diff --git a/.github/workflows/io-tests-linux.yml b/.github/workflows/io-tests-linux.yml deleted file mode 100644 index 6106de6..0000000 --- a/.github/workflows/io-tests-linux.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: IO Tests Linux - -on: - push: - branches: [main] - pull_request: - -jobs: - io-tests-linux: - uses: ./.github/workflows/io_test_base.yml - with: - platform_name: Linux - runner: ubuntu-latest - test_command: ./build/native-release/tests/io_tests diff --git a/.github/workflows/io-tests-mac.yml b/.github/workflows/io-tests-mac.yml deleted file mode 100644 index f5ad245..0000000 --- a/.github/workflows/io-tests-mac.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: IO Tests macOS - -on: - push: - branches: [main] - pull_request: - -jobs: - io-tests-mac: - uses: ./.github/workflows/io_test_base.yml - with: - platform_name: macOS - runner: macos-latest - test_command: ./build/native-release/tests/io_tests diff --git a/.github/workflows/io-tests-wasm32.yml b/.github/workflows/io-tests-wasm32.yml deleted file mode 100644 index 7726df8..0000000 --- a/.github/workflows/io-tests-wasm32.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: IO Tests wasm32 - -on: - push: - branches: [main] - pull_request: - -jobs: - io-tests-wasm32: - uses: ./.github/workflows/wasm32_test_base.yml - with: - test_name: IO - target: io_tests - test_command: node build/wasm32-release/tests/io_tests.js diff --git a/.github/workflows/io-tests-windows.yml b/.github/workflows/io-tests-windows.yml deleted file mode 100644 index 63b2ade..0000000 --- a/.github/workflows/io-tests-windows.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: IO Tests Windows - -on: - push: - branches: [main] - pull_request: - -jobs: - io-tests-windows: - uses: ./.github/workflows/io_test_base.yml - with: - platform_name: Windows - runner: windows-latest - test_command: .\build\native-release\tests\io_tests.exe diff --git a/.github/workflows/io_test_base.yml b/.github/workflows/io_test_base.yml deleted file mode 100644 index 6c51b9c..0000000 --- a/.github/workflows/io_test_base.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: IO Test Base - -on: - workflow_call: - inputs: - platform_name: - required: true - type: string - runner: - required: true - type: string - test_command: - required: true - type: string - -jobs: - io-tests: - name: ${{ inputs.platform_name }} - runs-on: ${{ inputs.runner }} - permissions: - contents: read - env: - VCPKG_CACHE_EPOCH: v1 - VCPKG_BINARY_CACHE: ${{ github.workspace }}/.vcpkg-binary-cache - VCPKG_BINARY_SOURCES: clear;files,${{ github.workspace }}/.vcpkg-binary-cache,readwrite - - steps: - - name: Check out repository - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Fetch vcpkg registry baseline - shell: bash - run: | - baseline="$(python -c "import json; print(json.load(open('vcpkg-configuration.json'))['default-registry']['baseline'])")" - git -C vcpkg fetch --depth=1 --no-tags origin "$baseline" - git -C vcpkg show "$baseline:versions/baseline.json" > /dev/null - - - name: Read vcpkg commit - id: vcpkg - shell: bash - run: echo "commit=$(git -C vcpkg rev-parse HEAD)" >> "$GITHUB_OUTPUT" - - - name: Set up Ninja (Linux) - if: runner.os == 'Linux' - shell: bash - run: sudo apt-get update && sudo apt-get install -y ninja-build - - - name: Set up build tools (macOS) - if: runner.os == 'macOS' - shell: bash - run: | - brew install autoconf automake libtool ninja - echo "$(brew --prefix)/bin" >> "$GITHUB_PATH" - echo "$(brew --prefix ninja)/bin" >> "$GITHUB_PATH" - command -v autoconf - command -v ninja - - - name: Set up Ninja (Windows) - if: runner.os == 'Windows' - shell: pwsh - run: choco install ninja --no-progress -y - - - name: Set up MSVC - if: runner.os == 'Windows' - uses: ilammy/msvc-dev-cmd@v1 - - - name: Read compiler cache key - id: compiler - shell: bash - run: | - if [ "$RUNNER_OS" = "Windows" ]; then - compiler="$(cl 2>&1 | sed -n '1p' || true)" - else - compiler="$(c++ --version | sed -n '1p')" - fi - hash="$(COMPILER="$compiler" python -c "import hashlib, os; print(hashlib.sha256(os.environ['COMPILER'].encode()).hexdigest()[:16])")" - echo "Compiler cache key input: $compiler" - echo "id=$hash" >> "$GITHUB_OUTPUT" - - - name: Restore vcpkg binary cache - id: vcpkg-cache - uses: actions/cache/restore@v4 - with: - path: ${{ env.VCPKG_BINARY_CACHE }} - key: vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ runner.arch }}-${{ steps.compiler.outputs.id }}-${{ steps.vcpkg.outputs.commit }}-${{ hashFiles('vcpkg.json', 'vcpkg-configuration.json', 'CMakePresets.json') }} - restore-keys: | - vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ runner.arch }}-${{ steps.compiler.outputs.id }}-${{ steps.vcpkg.outputs.commit }}- - vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ runner.arch }}-${{ steps.compiler.outputs.id }}- - vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ runner.arch }}- - vcpkg-${{ runner.os }}-${{ runner.arch }}-${{ steps.vcpkg.outputs.commit }}- - vcpkg-${{ runner.os }}-${{ runner.arch }}- - - - name: Bootstrap vcpkg (Unix) - if: runner.os != 'Windows' - shell: bash - run: ./vcpkg/bootstrap-vcpkg.sh - - - name: Bootstrap vcpkg (Windows) - if: runner.os == 'Windows' - shell: pwsh - run: .\vcpkg\bootstrap-vcpkg.bat - - - name: Configure - run: cmake --preset native-release -DFLTX_EXAMPLE_VIEWER=OFF -DVCPKG_MANIFEST_NO_DEFAULT_FEATURES=ON - - - name: Save vcpkg binary cache - if: steps.vcpkg-cache.outputs.cache-hit != 'true' - uses: actions/cache/save@v4 - with: - path: ${{ env.VCPKG_BINARY_CACHE }} - key: ${{ steps.vcpkg-cache.outputs.cache-primary-key }} - - - name: Build IO tests - run: cmake --build build/native-release --target io_tests --parallel - - - name: Run IO tests - run: ${{ inputs.test_command }} diff --git a/.github/workflows/parity-tests-linux.yml b/.github/workflows/parity-tests-linux.yml deleted file mode 100644 index cdba398..0000000 --- a/.github/workflows/parity-tests-linux.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Parity Tests Linux - -on: - push: - branches: [main] - pull_request: - -jobs: - parity-tests-linux: - uses: ./.github/workflows/parity_test_base.yml - with: - platform_name: Linux - runner: ubuntu-latest - test_command: ./build/native-release/tests/parity_tests diff --git a/.github/workflows/parity-tests-mac.yml b/.github/workflows/parity-tests-mac.yml deleted file mode 100644 index 5de2b44..0000000 --- a/.github/workflows/parity-tests-mac.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Parity Tests macOS - -on: - push: - branches: [main] - pull_request: - -jobs: - parity-tests-mac: - uses: ./.github/workflows/parity_test_base.yml - with: - platform_name: macOS - runner: macos-latest - test_command: ./build/native-release/tests/parity_tests diff --git a/.github/workflows/parity-tests-wasm32.yml b/.github/workflows/parity-tests-wasm32.yml deleted file mode 100644 index 18de1e5..0000000 --- a/.github/workflows/parity-tests-wasm32.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Parity Tests wasm32 - -on: - push: - branches: [main] - pull_request: - -jobs: - parity-tests-wasm32: - uses: ./.github/workflows/wasm32_test_base.yml - with: - test_name: Parity - target: parity_tests - test_command: node build/wasm32-release/tests/parity_tests.js diff --git a/.github/workflows/parity-tests-windows.yml b/.github/workflows/parity-tests-windows.yml deleted file mode 100644 index f5ebc00..0000000 --- a/.github/workflows/parity-tests-windows.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Parity Tests Windows - -on: - push: - branches: [main] - pull_request: - -jobs: - parity-tests-windows: - uses: ./.github/workflows/parity_test_base.yml - with: - platform_name: Windows - runner: windows-latest - test_command: .\build\native-release\tests\parity_tests.exe diff --git a/.github/workflows/parity_test_base.yml b/.github/workflows/parity_test_base.yml deleted file mode 100644 index ed21f12..0000000 --- a/.github/workflows/parity_test_base.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Parity Test Base - -on: - workflow_call: - inputs: - platform_name: - required: true - type: string - runner: - required: true - type: string - test_command: - required: true - type: string - -jobs: - parity-tests: - name: ${{ inputs.platform_name }} - runs-on: ${{ inputs.runner }} - permissions: - contents: read - env: - VCPKG_CACHE_EPOCH: v1 - VCPKG_BINARY_CACHE: ${{ github.workspace }}/.vcpkg-binary-cache - VCPKG_BINARY_SOURCES: clear;files,${{ github.workspace }}/.vcpkg-binary-cache,readwrite - - steps: - - name: Check out repository - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Fetch vcpkg registry baseline - shell: bash - run: | - baseline="$(python -c "import json; print(json.load(open('vcpkg-configuration.json'))['default-registry']['baseline'])")" - git -C vcpkg fetch --depth=1 --no-tags origin "$baseline" - git -C vcpkg show "$baseline:versions/baseline.json" > /dev/null - - - name: Read vcpkg commit - id: vcpkg - shell: bash - run: echo "commit=$(git -C vcpkg rev-parse HEAD)" >> "$GITHUB_OUTPUT" - - - name: Set up Ninja (Linux) - if: runner.os == 'Linux' - shell: bash - run: sudo apt-get update && sudo apt-get install -y ninja-build - - - name: Set up build tools (macOS) - if: runner.os == 'macOS' - shell: bash - run: | - brew install autoconf automake libtool ninja - echo "$(brew --prefix)/bin" >> "$GITHUB_PATH" - echo "$(brew --prefix ninja)/bin" >> "$GITHUB_PATH" - command -v autoconf - command -v ninja - - - name: Set up Ninja (Windows) - if: runner.os == 'Windows' - shell: pwsh - run: choco install ninja --no-progress -y - - - name: Set up MSVC - if: runner.os == 'Windows' - uses: ilammy/msvc-dev-cmd@v1 - - - name: Read compiler cache key - id: compiler - shell: bash - run: | - if [ "$RUNNER_OS" = "Windows" ]; then - compiler="$(cl 2>&1 | sed -n '1p' || true)" - else - compiler="$(c++ --version | sed -n '1p')" - fi - hash="$(COMPILER="$compiler" python -c "import hashlib, os; print(hashlib.sha256(os.environ['COMPILER'].encode()).hexdigest()[:16])")" - echo "Compiler cache key input: $compiler" - echo "id=$hash" >> "$GITHUB_OUTPUT" - - - name: Restore vcpkg binary cache - id: vcpkg-cache - uses: actions/cache/restore@v4 - with: - path: ${{ env.VCPKG_BINARY_CACHE }} - key: vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ runner.arch }}-${{ steps.compiler.outputs.id }}-${{ steps.vcpkg.outputs.commit }}-${{ hashFiles('vcpkg.json', 'vcpkg-configuration.json', 'CMakePresets.json') }} - restore-keys: | - vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ runner.arch }}-${{ steps.compiler.outputs.id }}-${{ steps.vcpkg.outputs.commit }}- - vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ runner.arch }}-${{ steps.compiler.outputs.id }}- - vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ runner.arch }}- - vcpkg-${{ runner.os }}-${{ runner.arch }}-${{ steps.vcpkg.outputs.commit }}- - vcpkg-${{ runner.os }}-${{ runner.arch }}- - - - name: Bootstrap vcpkg (Unix) - if: runner.os != 'Windows' - shell: bash - run: ./vcpkg/bootstrap-vcpkg.sh - - - name: Bootstrap vcpkg (Windows) - if: runner.os == 'Windows' - shell: pwsh - run: .\vcpkg\bootstrap-vcpkg.bat - - - name: Configure - run: cmake --preset native-release -DFLTX_EXAMPLE_VIEWER=OFF -DVCPKG_MANIFEST_NO_DEFAULT_FEATURES=ON - - - name: Save vcpkg binary cache - if: steps.vcpkg-cache.outputs.cache-hit != 'true' - uses: actions/cache/save@v4 - with: - path: ${{ env.VCPKG_BINARY_CACHE }} - key: ${{ steps.vcpkg-cache.outputs.cache-primary-key }} - - - name: Build parity tests - run: cmake --build build/native-release --target parity_tests --parallel - - - name: Run parity tests - run: ${{ inputs.test_command }} diff --git a/.github/workflows/precision-tests-linux.yml b/.github/workflows/precision-tests-linux.yml deleted file mode 100644 index 47330db..0000000 --- a/.github/workflows/precision-tests-linux.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Precision Tests Linux - -on: - push: - branches: [main] - pull_request: - -jobs: - precision-tests-linux: - uses: ./.github/workflows/precision_test_base.yml - with: - platform_name: Linux - runner: ubuntu-latest - test_command: ./build/native-release/tests/precision_tests diff --git a/.github/workflows/precision-tests-mac.yml b/.github/workflows/precision-tests-mac.yml deleted file mode 100644 index 85dc4af..0000000 --- a/.github/workflows/precision-tests-mac.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Precision Tests macOS - -on: - push: - branches: [main] - pull_request: - -jobs: - precision-tests-mac: - uses: ./.github/workflows/precision_test_base.yml - with: - platform_name: macOS - runner: macos-latest - test_command: ./build/native-release/tests/precision_tests diff --git a/.github/workflows/precision-tests-wasm32.yml b/.github/workflows/precision-tests-wasm32.yml deleted file mode 100644 index aaea6d6..0000000 --- a/.github/workflows/precision-tests-wasm32.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Precision Tests wasm32 - -on: - push: - branches: [main] - pull_request: - -jobs: - precision-tests-wasm32: - uses: ./.github/workflows/wasm32_test_base.yml - with: - test_name: Precision - target: precision_tests - test_command: node build/wasm32-release/tests/precision_tests.js diff --git a/.github/workflows/precision-tests-windows.yml b/.github/workflows/precision-tests-windows.yml deleted file mode 100644 index 21c2863..0000000 --- a/.github/workflows/precision-tests-windows.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Precision Tests Windows - -on: - push: - branches: [main] - pull_request: - -jobs: - precision-tests-windows: - uses: ./.github/workflows/precision_test_base.yml - with: - platform_name: Windows - runner: windows-latest - test_command: .\build\native-release\tests\precision_tests.exe diff --git a/.github/workflows/precision_test_base.yml b/.github/workflows/precision_test_base.yml deleted file mode 100644 index 94e045c..0000000 --- a/.github/workflows/precision_test_base.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Precision Test Base - -on: - workflow_call: - inputs: - platform_name: - required: true - type: string - runner: - required: true - type: string - test_command: - required: true - type: string - -jobs: - precision-tests: - name: ${{ inputs.platform_name }} - runs-on: ${{ inputs.runner }} - permissions: - contents: read - env: - VCPKG_CACHE_EPOCH: v1 - VCPKG_BINARY_CACHE: ${{ github.workspace }}/.vcpkg-binary-cache - VCPKG_BINARY_SOURCES: clear;files,${{ github.workspace }}/.vcpkg-binary-cache,readwrite - - steps: - - name: Check out repository - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Fetch vcpkg registry baseline - shell: bash - run: | - baseline="$(python -c "import json; print(json.load(open('vcpkg-configuration.json'))['default-registry']['baseline'])")" - git -C vcpkg fetch --depth=1 --no-tags origin "$baseline" - git -C vcpkg show "$baseline:versions/baseline.json" > /dev/null - - - name: Read vcpkg commit - id: vcpkg - shell: bash - run: echo "commit=$(git -C vcpkg rev-parse HEAD)" >> "$GITHUB_OUTPUT" - - - name: Set up Ninja (Linux) - if: runner.os == 'Linux' - shell: bash - run: sudo apt-get update && sudo apt-get install -y ninja-build - - - name: Set up build tools (macOS) - if: runner.os == 'macOS' - shell: bash - run: | - brew install autoconf automake libtool ninja - echo "$(brew --prefix)/bin" >> "$GITHUB_PATH" - echo "$(brew --prefix ninja)/bin" >> "$GITHUB_PATH" - command -v autoconf - command -v ninja - - - name: Set up Ninja (Windows) - if: runner.os == 'Windows' - shell: pwsh - run: choco install ninja --no-progress -y - - - name: Set up MSVC - if: runner.os == 'Windows' - uses: ilammy/msvc-dev-cmd@v1 - - - name: Read compiler cache key - id: compiler - shell: bash - run: | - if [ "$RUNNER_OS" = "Windows" ]; then - compiler="$(cl 2>&1 | sed -n '1p' || true)" - else - compiler="$(c++ --version | sed -n '1p')" - fi - hash="$(COMPILER="$compiler" python -c "import hashlib, os; print(hashlib.sha256(os.environ['COMPILER'].encode()).hexdigest()[:16])")" - echo "Compiler cache key input: $compiler" - echo "id=$hash" >> "$GITHUB_OUTPUT" - - - name: Restore vcpkg binary cache - id: vcpkg-cache - uses: actions/cache/restore@v4 - with: - path: ${{ env.VCPKG_BINARY_CACHE }} - key: vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ runner.arch }}-${{ steps.compiler.outputs.id }}-${{ steps.vcpkg.outputs.commit }}-${{ hashFiles('vcpkg.json', 'vcpkg-configuration.json', 'CMakePresets.json') }} - restore-keys: | - vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ runner.arch }}-${{ steps.compiler.outputs.id }}-${{ steps.vcpkg.outputs.commit }}- - vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ runner.arch }}-${{ steps.compiler.outputs.id }}- - vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ runner.arch }}- - vcpkg-${{ runner.os }}-${{ runner.arch }}-${{ steps.vcpkg.outputs.commit }}- - vcpkg-${{ runner.os }}-${{ runner.arch }}- - - - name: Bootstrap vcpkg (Unix) - if: runner.os != 'Windows' - shell: bash - run: ./vcpkg/bootstrap-vcpkg.sh - - - name: Bootstrap vcpkg (Windows) - if: runner.os == 'Windows' - shell: pwsh - run: .\vcpkg\bootstrap-vcpkg.bat - - - name: Configure - run: cmake --preset native-release -DFLTX_EXAMPLE_VIEWER=OFF -DVCPKG_MANIFEST_NO_DEFAULT_FEATURES=ON - - - name: Save vcpkg binary cache - if: steps.vcpkg-cache.outputs.cache-hit != 'true' - uses: actions/cache/save@v4 - with: - path: ${{ env.VCPKG_BINARY_CACHE }} - key: ${{ steps.vcpkg-cache.outputs.cache-primary-key }} - - - name: Build precision tests - run: cmake --build build/native-release --target precision_tests --parallel - - - name: Run precision tests - run: ${{ inputs.test_command }} diff --git a/.github/workflows/test_base.yml b/.github/workflows/test_base.yml new file mode 100644 index 0000000..9bc07e2 --- /dev/null +++ b/.github/workflows/test_base.yml @@ -0,0 +1,209 @@ +name: Native Accuracy Target + +on: + workflow_call: + inputs: + platform_name: + required: true + type: string + runner: + required: true + type: string + configure_preset: + required: true + type: string + compiler_family: + required: true + type: string + target_arch: + required: true + type: string + +jobs: + tests: + name: ${{ inputs.platform_name }} + runs-on: ${{ inputs.runner }} + timeout-minutes: 120 + permissions: + contents: read + env: + COMPILER_FAMILY: ${{ inputs.compiler_family }} + TARGET_ARCH: ${{ inputs.target_arch }} + EMSCRIPTEN_VERSION: 4.0.10 + EMSDK_CACHE_FOLDER: emsdk-cache + VCPKG_CACHE_EPOCH: v3 + VCPKG_BINARY_CACHE: ${{ github.workspace }}/.vcpkg-binary-cache + VCPKG_BINARY_SOURCES: clear;files,${{ github.workspace }}/.vcpkg-binary-cache,readwrite + VCPKG_MAX_CONCURRENCY: 4 + CONFIGURE_PRESET: ${{ inputs.configure_preset }} + + steps: + - name: Check out repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up build tools (Linux) + if: runner.os == 'Linux' + shell: bash + run: | + sudo apt-get update + sudo apt-get install -y autoconf automake build-essential clang libtool ninja-build pkg-config + + - name: Set up build tools (macOS) + if: runner.os == 'macOS' + shell: bash + run: | + brew install autoconf automake libtool ninja + echo "$(brew --prefix)/bin" >> "$GITHUB_PATH" + echo "$(brew --prefix ninja)/bin" >> "$GITHUB_PATH" + + - name: Set up Ninja (Windows) + if: runner.os == 'Windows' + shell: pwsh + run: choco install ninja --no-progress -y + + - name: Set up Visual Studio environment + if: >- + runner.os == 'Windows' && + (inputs.compiler_family == 'msvc' || inputs.compiler_family == 'clangcl') + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: ${{ inputs.target_arch }} + + - name: Set up MinGW + if: runner.os == 'Windows' && inputs.compiler_family == 'mingw' + shell: pwsh + run: | + choco install mingw --no-progress -y + 'C:\ProgramData\mingw64\mingw64\bin' | Out-File -FilePath $env:GITHUB_PATH -Append + + - name: Set up Emscripten + if: inputs.compiler_family == 'emscripten' + uses: emscripten-core/setup-emsdk@v16 + with: + version: ${{ env.EMSCRIPTEN_VERSION }} + actions-cache-folder: ${{ env.EMSDK_CACHE_FOLDER }} + + - name: Verify native runner architecture + if: inputs.target_arch != 'wasm32' + shell: bash + run: | + python - <<'PY' + import os + import platform + expected = os.environ["TARGET_ARCH"] + observed = platform.machine().lower() + aliases = { + "x64": {"amd64", "x86_64"}, + "arm64": {"arm64", "aarch64"}, + } + if observed not in aliases[expected]: + raise SystemExit( + f"runner architecture mismatch: expected {expected}, observed {observed}" + ) + print(f"native runner architecture: {observed}") + PY + + - name: Fetch vcpkg registry baseline + shell: bash + run: | + baseline="$(python -c "import json; print(json.load(open('vcpkg-configuration.json'))['default-registry']['baseline'])")" + git -C vcpkg fetch --depth=1 --no-tags origin "$baseline" + git -C vcpkg show "$baseline:versions/baseline.json" > /dev/null + + - name: Read build identities + id: identity + shell: bash + run: | + echo "vcpkg=$(git -C vcpkg rev-parse HEAD)" >> "$GITHUB_OUTPUT" + case "$COMPILER_FAMILY" in + msvc) compiler="$(cl 2>&1 | sed -n '1p' || true)" ;; + clangcl) compiler="$(clang-cl --version | sed -n '1p')" ;; + clang|appleclang) compiler="$(clang++ --version | sed -n '1p')" ;; + emscripten) compiler="$(em++ --version | sed -n '1p')" ;; + *) compiler="$(g++ --version | sed -n '1p')" ;; + esac + test -n "$compiler" + hash="$(COMPILER="$compiler" python -c "import hashlib, os; print(hashlib.sha256(os.environ['COMPILER'].encode()).hexdigest()[:16])")" + echo "Compiler cache key input: $compiler" + echo "compiler=$hash" >> "$GITHUB_OUTPUT" + + - name: Restore vcpkg binary cache + id: vcpkg-cache + uses: actions/cache/restore@v4 + with: + path: ${{ env.VCPKG_BINARY_CACHE }} + key: vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ inputs.target_arch }}-${{ inputs.compiler_family }}-${{ steps.identity.outputs.compiler }}-${{ steps.identity.outputs.vcpkg }}-${{ hashFiles('vcpkg.json', 'vcpkg-configuration.json', 'CMakePresets.json', 'cmake/vcpkg-ports/**', 'cmake/vcpkg-triplets/**') }} + restore-keys: | + vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ inputs.target_arch }}-${{ inputs.compiler_family }}-${{ steps.identity.outputs.compiler }}-${{ steps.identity.outputs.vcpkg }}- + vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-${{ runner.os }}-${{ inputs.target_arch }}-${{ inputs.compiler_family }}- + + - name: Bootstrap vcpkg (Unix) + if: runner.os != 'Windows' + shell: bash + run: ./vcpkg/bootstrap-vcpkg.sh + + - name: Bootstrap vcpkg (Windows) + if: runner.os == 'Windows' + shell: pwsh + run: .\vcpkg\bootstrap-vcpkg.bat + + - name: Configure + run: >- + cmake --preset ${{ inputs.configure_preset }} + -DVCPKG_MANIFEST_NO_DEFAULT_FEATURES=ON + -DFLTX_METRICS_EXTERNAL_COMPARISONS=OFF + + - name: Verify configured compiler + shell: bash + run: | + python - <<'PY' + import os + import re + from pathlib import Path + + cmake_files = Path("build", os.environ["CONFIGURE_PRESET"], "CMakeFiles") + compiler_file = next(cmake_files.glob("*/CMakeCXXCompiler.cmake")) + compiler_facts = compiler_file.read_text(encoding="utf-8") + + def fact(name): + match = re.search(rf'set\({name} "([^"]*)"\)', compiler_facts) + return match.group(1) if match else "" + + family = os.environ["COMPILER_FAMILY"] + expected_ids = { + "msvc": "MSVC", + "clangcl": "Clang", + "mingw": "GNU", + "gcc": "GNU", + "clang": "Clang", + "appleclang": "AppleClang", + "emscripten": "Clang", + } + compiler_id = fact("CMAKE_CXX_COMPILER_ID") + if compiler_id != expected_ids[family]: + raise SystemExit( + f"configured compiler mismatch: expected {expected_ids[family]}, " + f"observed {compiler_id or 'unknown'}" + ) + frontend = fact("CMAKE_CXX_COMPILER_FRONTEND_VARIANT") + if family == "clangcl" and frontend != "MSVC": + raise SystemExit( + f"configured frontend mismatch: expected MSVC, observed {frontend or 'unknown'}" + ) + print(f"configured compiler: {compiler_id}, frontend: {frontend or 'unspecified'}") + PY + + - name: Save vcpkg binary cache + if: steps.vcpkg-cache.outputs.cache-hit != 'true' + uses: actions/cache/save@v4 + continue-on-error: true + with: + path: ${{ env.VCPKG_BINARY_CACHE }} + key: ${{ steps.vcpkg-cache.outputs.cache-primary-key }} + + - name: Build and run accuracy gate + run: >- + cmake --build --preset ${{ inputs.configure_preset }} + --target fltx_ci_checks --parallel diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..2cac502 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,101 @@ +name: Native Accuracy Matrix + +on: + push: + branches: [main] + pull_request: + merge_group: + workflow_dispatch: + +permissions: + contents: read + +jobs: + accuracy: + name: Accuracy (${{ matrix.name }}) + strategy: + fail-fast: false + matrix: + include: + - name: Windows x64 MSVC + runner: windows-2025-vs2026 + preset: windows-x64-msvc-release + compiler: msvc + arch: x64 + - name: Windows x64 clang-cl + runner: windows-2025-vs2026 + preset: windows-x64-clangcl-release + compiler: clangcl + arch: x64 + - name: Windows x64 MinGW + runner: windows-2025-vs2026 + preset: windows-x64-mingw-release + compiler: mingw + arch: x64 + - name: Windows ARM64 MSVC + runner: windows-11-vs2026-arm + preset: windows-arm64-msvc-release + compiler: msvc + arch: arm64 + - name: Windows ARM64 clang-cl + runner: windows-11-vs2026-arm + preset: windows-arm64-clangcl-release + compiler: clangcl + arch: arm64 + - name: Linux x64 GCC + runner: ubuntu-24.04 + preset: linux-x64-gcc-release + compiler: gcc + arch: x64 + - name: Linux x64 Clang + runner: ubuntu-24.04 + preset: linux-x64-clang-release + compiler: clang + arch: x64 + - name: Linux ARM64 GCC + runner: ubuntu-24.04-arm + preset: linux-arm64-gcc-release + compiler: gcc + arch: arm64 + - name: Linux ARM64 Clang + runner: ubuntu-24.04-arm + preset: linux-arm64-clang-release + compiler: clang + arch: arm64 + - name: macOS x64 AppleClang + runner: macos-15-intel + preset: macos-x64-appleclang-release + compiler: appleclang + arch: x64 + - name: macOS ARM64 AppleClang + runner: macos-15 + preset: macos-arm64-appleclang-release + compiler: appleclang + arch: arm64 + - name: WebAssembly wasm32 Emscripten + runner: ubuntu-24.04 + preset: wasm32-emscripten-release + compiler: emscripten + arch: wasm32 + uses: ./.github/workflows/test_base.yml + with: + platform_name: ${{ matrix.name }} + runner: ${{ matrix.runner }} + configure_preset: ${{ matrix.preset }} + compiler_family: ${{ matrix.compiler }} + target_arch: ${{ matrix.arch }} + + required-native-accuracy-matrix: + name: Required native accuracy matrix + if: always() + needs: accuracy + runs-on: ubuntu-24.04 + steps: + - name: Require every native target + env: + MATRIX_RESULT: ${{ needs.accuracy.result }} + run: | + if [ "$MATRIX_RESULT" != "success" ]; then + echo "Native accuracy matrix result: $MATRIX_RESULT" >&2 + exit 1 + fi diff --git a/.github/workflows/wasm32_test_base.yml b/.github/workflows/wasm32_test_base.yml deleted file mode 100644 index 35c9cc0..0000000 --- a/.github/workflows/wasm32_test_base.yml +++ /dev/null @@ -1,106 +0,0 @@ -name: Wasm32 Test Base - -on: - workflow_call: - inputs: - test_name: - required: true - type: string - target: - required: true - type: string - test_command: - required: true - type: string - -jobs: - wasm32-tests: - name: ${{ inputs.test_name }} wasm32 - runs-on: ubuntu-latest - permissions: - contents: read - env: - EMSCRIPTEN_VERSION: 4.0.10 - EMSDK_CACHE_FOLDER: emsdk-cache - VCPKG_CACHE_EPOCH: v1 - VCPKG_BINARY_CACHE: ${{ github.workspace }}/.vcpkg-binary-cache - VCPKG_BINARY_SOURCES: clear;files,${{ github.workspace }}/.vcpkg-binary-cache,readwrite - VCPKG_MAX_CONCURRENCY: 4 - - steps: - - name: Check out repository - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Set up build tools - shell: bash - run: | - sudo apt-get update - sudo apt-get install -y autoconf automake build-essential libtool ninja-build pkg-config - - - name: Set up Emscripten - uses: emscripten-core/setup-emsdk@v16 - with: - version: ${{ env.EMSCRIPTEN_VERSION }} - actions-cache-folder: ${{ env.EMSDK_CACHE_FOLDER }} - - - name: Fetch vcpkg registry baseline - shell: bash - run: | - baseline="$(python3 -c "import json; print(json.load(open('vcpkg-configuration.json'))['default-registry']['baseline'])")" - git -C vcpkg fetch --depth=1 --no-tags origin "$baseline" - git -C vcpkg show "$baseline:versions/baseline.json" > /dev/null - - - name: Read vcpkg commit - id: vcpkg - shell: bash - run: echo "commit=$(git -C vcpkg rev-parse HEAD)" >> "$GITHUB_OUTPUT" - - - name: Read Emscripten cache key - id: emscripten - shell: bash - run: | - compiler="$(emcc --version | sed -n '1p')" - hash="$(COMPILER="$compiler" python3 -c "import hashlib, os; print(hashlib.sha256(os.environ['COMPILER'].encode()).hexdigest()[:16])")" - echo "Emscripten cache key input: $compiler" - echo "id=$hash" >> "$GITHUB_OUTPUT" - - - name: Restore vcpkg binary cache - id: vcpkg-cache - uses: actions/cache/restore@v4 - with: - path: ${{ env.VCPKG_BINARY_CACHE }} - key: vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-wasm32-emscripten-${{ runner.os }}-${{ runner.arch }}-${{ steps.emscripten.outputs.id }}-${{ steps.vcpkg.outputs.commit }}-${{ hashFiles('vcpkg.json', 'vcpkg-configuration.json', 'CMakePresets.json', 'cmake/vcpkg-ports/**', 'cmake/vcpkg-triplets/**') }} - restore-keys: | - vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-wasm32-emscripten-${{ runner.os }}-${{ runner.arch }}-${{ steps.emscripten.outputs.id }}-${{ steps.vcpkg.outputs.commit }}- - vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-wasm32-emscripten-${{ runner.os }}-${{ runner.arch }}-${{ steps.emscripten.outputs.id }}- - vcpkg-${{ env.VCPKG_CACHE_EPOCH }}-wasm32-emscripten-${{ runner.os }}-${{ runner.arch }}- - - - name: Bootstrap vcpkg - shell: bash - run: ./vcpkg/bootstrap-vcpkg.sh - - - name: Configure - shell: bash - run: | - cmake --preset wasm32-release \ - -DFLTX_EXAMPLE_VIEWER=OFF \ - -DFLTX_BUILD_MPFR_TESTS=ON \ - -DVCPKG_OVERLAY_PORTS="${GITHUB_WORKSPACE}/cmake/vcpkg-ports" \ - -DVCPKG_OVERLAY_TRIPLETS="${GITHUB_WORKSPACE}/cmake/vcpkg-triplets" \ - -DVCPKG_MANIFEST_NO_DEFAULT_FEATURES=ON - - - name: Save vcpkg binary cache - if: steps.vcpkg-cache.outputs.cache-hit != 'true' - uses: actions/cache/save@v4 - continue-on-error: true - with: - path: ${{ env.VCPKG_BINARY_CACHE }} - key: ${{ steps.vcpkg-cache.outputs.cache-primary-key }} - - - name: Build ${{ inputs.test_name }} tests - run: cmake --build build/wasm32-release --target ${{ inputs.target }} --parallel - - - name: Run ${{ inputs.test_name }} tests - run: ${{ inputs.test_command }} diff --git a/.gitignore b/.gitignore index c1f4cf7..a0b3397 100644 --- a/.gitignore +++ b/.gitignore @@ -40,9 +40,23 @@ # debug information files *.dwo +# Python cache files +__pycache__/ +*.py[cod] + +# Metrics publication scratch state +validation/metrics/**/.staging/ +validation/metrics/**/*.lock +validation/metrics/_unversioned/ + # project .vs .idea build/ TestResults/ CMakeUserPresets.json +VSWorkspaceSettings.json + +# Local Codex scratch/output +.codex/ +/RELEASE_CHECKLIST.md diff --git a/.rgignore b/.rgignore new file mode 100644 index 0000000..4763b0d --- /dev/null +++ b/.rgignore @@ -0,0 +1,18 @@ +# Local dependencies and build products +/vcpkg/ +/build/ +/TestResults/ +/validation/extern/ + +# Generated metrics evidence and presentation assets +/validation/metrics/data/ +/validation/metrics/generated/ +/validation/metrics/_unversioned/ +/validation/metrics/assets/ + +# IDE and agent scratch state +/.git/ +/.vs/ +/.idea/ +/.codex/ +/.agents/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..694bafe --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,63 @@ +# fltx repository guidance + +## Start with the current source + +- Check the worktree before editing and preserve unrelated changes. +- Locate the exact first-party owner with repository search, then read it before + changing behaviour. Start in `include`, `src`, `cmake`, `validation`, and + `examples`; do not scan vendored, generated, or build trees unless they are + part of the task. `.rgignore` keeps those trees out of normal searches; use + `rg --no-ignore` with an explicit path when they are intentionally in scope. +- Read `docs/architecture.md` for unfamiliar or cross-cutting work. Treat the + source as authoritative if documentation and implementation disagree, and + correct the documentation when the discrepancy is architectural. +- Use `validation/COVERAGE.md` to find the existing validation owner and + `validation/README.md` for current target and metrics semantics. + +## Architecture and API policy + +- Consider architectural consequences before implementing. Ask for + confirmation when a proposal would weaken an established boundary, add an + awkward dependency, or create a competing implementation path. Simple local + changes with limited side effects do not need a pause. +- Public headers under `include/fltx` expose the supported API. Reusable + mechanics belong under `include/fltx/detail`; runtime-only or heavyweight + work belongs in `src` when putting it in a header would harm compile time, + dependency exposure, or clarity. +- Keep validation-only dependencies and support code out of the library. +- Check constant-evaluation and runtime paths together for arithmetic, math, + conversion, and parsing changes. A fix in one route is not assumed to cover + the other. +- Be cautious with new includes in public headers. Every public header must + remain independently compilable. +- The project has no external compatibility obligation before its first public + release. Prefer the cleanest coherent API, update first-party callers and + validation together, and do not add deprecated aliases or forwarding shims + unless explicitly requested. +- Keep tightly coupled design, implementation, and verification together. + Delegation is optional and is useful only for bounded work that can proceed + independently without overlapping edits; the primary agent owns integration. + +## Build and verification + +- Inspect available presets with `cmake --list-presets=all`. Checked-in + `CMakePresets.json` contains portable project presets; ignored + `CMakeUserPresets.json` may provide machine-local toolchains or isolated build + trees. Never assume a local preset name, tool path, or dependency location. +- For Emscripten, set `EMSDK` to the active emsdk root and make its required + tools, including Node, available on `PATH`. +- Run the smallest relevant check first, then broaden in proportion to the + change. Report what ran and what was not exercised. The authoritative target + descriptions and commands are in `validation/README.md`. +- Extend an existing contract, constexpr corpus, accuracy domain, or benchmark + owner instead of creating overlapping coverage. Do not relax thresholds or + reinterpret failed evidence merely to make a run pass. +- Development, filtered, interrupted, and phase-only metrics stay under + `build/`. Publish or overwrite canonical data under `validation/metrics` + only when the user explicitly requests a complete release run. + +## Documentation maintenance + +Update `docs/architecture.md` only when a subsystem is added, removed, moved, +or its ownership/dependency flow materially changes. Routine implementation, +test, and refactoring work does not require an architecture-document update. diff --git a/CMakeLists.txt b/CMakeLists.txt index b7a7d5c..44419dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,11 +9,8 @@ if(CMAKE_GENERATOR MATCHES "Visual Studio") 1 - ^(accuracy_tests|hash_tests|io_tests|metrics_tests|parity_tests|precision_tests|random_tests)$ + ^(fltx_contract_tests|fltx_constexpr_tests)$ --verbosity high --list-tests --reporter xml ~[bench] - - 1 - Executable 60000 Combine @@ -40,11 +37,9 @@ endif() include(GNUInstallDirs) include(CMakePackageConfigHelpers) -include(cmake/fltxOptions.cmake) -include(cmake/fltxFastMath.cmake) +include(cmake/fltxBuildPolicy.cmake) include(cmake/fltxMsvcTiming.cmake) include(cmake/fltxMsvcParallel.cmake) -include(cmake/fltxSimd.cmake) include(cmake/fltxSources.cmake) set(FLTX_PUBLIC_SCOPE PUBLIC) @@ -87,9 +82,8 @@ if(MSVC) ) endif() -target_compile_features(fltx ${FLTX_PUBLIC_SCOPE} cxx_std_23) -fltx_apply_simd_options(fltx ${FLTX_PUBLIC_SCOPE}) -fltx_apply_fast_math_options(fltx) +fltx_configure_library_target(fltx) +fltx_assert_package_safe_interface(fltx) fltx_enable_msvc_parallel_compile(fltx) fltx_apply_msvc_timing_reports(fltx) @@ -133,10 +127,5 @@ if(FLTX_DEVELOPER_BUILD) include(CTest) add_subdirectory(examples) - add_subdirectory(tests) - add_subdirectory(tests/unit_compile_tests) - - if(NOT TARGET f256_expression_compile_bench) - add_subdirectory(tests/expressions/f256) - endif() + add_subdirectory(validation) endif() diff --git a/CMakePresets.json b/CMakePresets.json index b9cfcc0..e5caa86 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -8,183 +8,266 @@ "configurePresets": [ { - "name": "native-debug", + "name": "_ninja-release", + "hidden": true, "generator": "Ninja", - "binaryDir": "${sourceDir}/build/native-debug", "toolchainFile": "${sourceDir}/vcpkg/scripts/buildsystems/vcpkg.cmake", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_BUILD_TYPE": "Release", "CMAKE_EXPORT_COMPILE_COMMANDS": "YES" } }, { - "name": "native-release", - "generator": "Ninja", - "binaryDir": "${sourceDir}/build/native-release", - "toolchainFile": "${sourceDir}/vcpkg/scripts/buildsystems/vcpkg.cmake", + "name": "_windows-ninja-release", + "hidden": true, + "inherits": "_ninja-release", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_EXPORT_COMPILE_COMMANDS": "YES" + "VCPKG_OVERLAY_PORTS": "${sourceDir}/cmake/vcpkg-ports" + } + }, + { + "name": "windows-x64-msvc-release", + "displayName": "Windows x64 / MSVC / Release", + "inherits": "_windows-ninja-release", + "condition": {"type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows"}, + "binaryDir": "${sourceDir}/build/windows-x64-msvc-release", + "cacheVariables": { + "CMAKE_C_COMPILER": "cl.exe", + "CMAKE_CXX_COMPILER": "cl.exe", + "VCPKG_TARGET_TRIPLET": "x64-windows", + "FLTX_VALIDATION_EXPECTED_ARCHITECTURE": "x86_64" } }, { - "name": "clang-debug", - "displayName": "Clang Debug", + "name": "windows-x64-clangcl-release", + "displayName": "Windows x64 / clang-cl / Release", + "inherits": "_windows-ninja-release", + "condition": {"type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows"}, + "binaryDir": "${sourceDir}/build/windows-x64-clangcl-release", + "environment": { + "PATH": "$env{PROGRAMFILES}/LLVM/bin;$penv{PATH}" + }, + "cacheVariables": { + "CMAKE_C_COMPILER": "clang-cl.exe", + "CMAKE_CXX_COMPILER": "clang-cl.exe", + "CMAKE_LINKER": "lld-link.exe", + "CMAKE_AR": "llvm-lib.exe", + "VCPKG_TARGET_TRIPLET": "x64-windows", + "FLTX_VALIDATION_EXPECTED_ARCHITECTURE": "x86_64", + "FLTX_METRICS_QDPP": "OFF" + } + }, + { + "name": "windows-x64-mingw-release", + "displayName": "Windows x64 / MinGW / Release", + "inherits": "_windows-ninja-release", + "condition": {"type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows"}, + "binaryDir": "${sourceDir}/build/windows-x64-mingw-release", + "cacheVariables": { + "CMAKE_C_COMPILER": "gcc.exe", + "CMAKE_CXX_COMPILER": "g++.exe", + "VCPKG_TARGET_TRIPLET": "x64-mingw-static", + "VCPKG_HOST_TRIPLET": "x64-mingw-static", + "FLTX_VALIDATION_EXPECTED_ARCHITECTURE": "x86_64" + } + }, + { + "name": "windows-arm64-msvc-release", + "displayName": "Windows ARM64 / MSVC / Release", + "inherits": "_windows-ninja-release", + "condition": {"type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows"}, + "binaryDir": "${sourceDir}/build/windows-arm64-msvc-release", + "cacheVariables": { + "CMAKE_C_COMPILER": "cl.exe", + "CMAKE_CXX_COMPILER": "cl.exe", + "VCPKG_TARGET_TRIPLET": "arm64-windows", + "FLTX_VALIDATION_EXPECTED_ARCHITECTURE": "arm64", + "FLTX_METRICS_QDPP": "OFF", + "FLTX_METRICS_TLFLOAT": "OFF" + } + }, + { + "name": "windows-arm64-clangcl-release", + "displayName": "Windows ARM64 / clang-cl / Release", + "inherits": "_windows-ninja-release", + "condition": {"type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows"}, + "binaryDir": "${sourceDir}/build/windows-arm64-clangcl-release", + "environment": { + "PATH": "$env{PROGRAMFILES}/LLVM/bin;$penv{PATH}" + }, + "cacheVariables": { + "CMAKE_C_COMPILER": "clang-cl.exe", + "CMAKE_CXX_COMPILER": "clang-cl.exe", + "CMAKE_LINKER": "lld-link.exe", + "CMAKE_AR": "llvm-lib.exe", + "VCPKG_TARGET_TRIPLET": "arm64-windows", + "FLTX_VALIDATION_EXPECTED_ARCHITECTURE": "arm64", + "FLTX_METRICS_QDPP": "OFF", + "FLTX_METRICS_TLFLOAT": "OFF" + } + }, + { + "name": "linux-x64-gcc-release", + "displayName": "Linux x64 / GCC / Release", + "inherits": "_ninja-release", "condition": {"type": "equals", "lhs": "${hostSystemName}", "rhs": "Linux"}, - "generator": "Ninja", - "binaryDir": "${sourceDir}/build/clang-debug", - "toolchainFile": "${sourceDir}/vcpkg/scripts/buildsystems/vcpkg.cmake", + "binaryDir": "${sourceDir}/build/linux-x64-gcc-release", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug", - "CMAKE_CXX_COMPILER": "${sourceDir}/cmake/toolchains/fltx-clangxx", + "CMAKE_C_COMPILER": "gcc", + "CMAKE_CXX_COMPILER": "g++", + "VCPKG_TARGET_TRIPLET": "x64-linux", + "FLTX_VALIDATION_EXPECTED_ARCHITECTURE": "x86_64" + } + }, + { + "name": "linux-x64-clang-release", + "displayName": "Linux x64 / Clang / Release", + "inherits": "_ninja-release", + "condition": {"type": "equals", "lhs": "${hostSystemName}", "rhs": "Linux"}, + "binaryDir": "${sourceDir}/build/linux-x64-clang-release", + "cacheVariables": { + "CMAKE_C_COMPILER": "clang", + "CMAKE_CXX_COMPILER": "clang++", "CMAKE_INSTALL_LIBDIR": "lib", - "CMAKE_EXPORT_COMPILE_COMMANDS": "YES" + "VCPKG_TARGET_TRIPLET": "x64-linux", + "FLTX_VALIDATION_EXPECTED_ARCHITECTURE": "x86_64" } }, { - "name": "clang-release", - "displayName": "Clang Release", + "name": "linux-arm64-gcc-release", + "displayName": "Linux ARM64 / GCC / Release", + "inherits": "_ninja-release", "condition": {"type": "equals", "lhs": "${hostSystemName}", "rhs": "Linux"}, - "generator": "Ninja", - "binaryDir": "${sourceDir}/build/clang-release", - "toolchainFile": "${sourceDir}/vcpkg/scripts/buildsystems/vcpkg.cmake", + "binaryDir": "${sourceDir}/build/linux-arm64-gcc-release", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_CXX_COMPILER": "${sourceDir}/cmake/toolchains/fltx-clangxx", + "CMAKE_C_COMPILER": "gcc", + "CMAKE_CXX_COMPILER": "g++", + "VCPKG_TARGET_TRIPLET": "arm64-linux", + "FLTX_VALIDATION_EXPECTED_ARCHITECTURE": "arm64" + } + }, + { + "name": "linux-arm64-clang-release", + "displayName": "Linux ARM64 / Clang / Release", + "inherits": "_ninja-release", + "condition": {"type": "equals", "lhs": "${hostSystemName}", "rhs": "Linux"}, + "binaryDir": "${sourceDir}/build/linux-arm64-clang-release", + "cacheVariables": { + "CMAKE_C_COMPILER": "clang", + "CMAKE_CXX_COMPILER": "clang++", "CMAKE_INSTALL_LIBDIR": "lib", - "CMAKE_EXPORT_COMPILE_COMMANDS": "YES" + "VCPKG_TARGET_TRIPLET": "arm64-linux", + "FLTX_VALIDATION_EXPECTED_ARCHITECTURE": "arm64" } }, { - "name": "mingw-debug", - "generator": "Ninja", - "binaryDir": "${sourceDir}/build/mingw-debug", - "toolchainFile": "${sourceDir}/vcpkg/scripts/buildsystems/vcpkg.cmake", + "name": "macos-x64-appleclang-release", + "displayName": "macOS x64 / AppleClang / Release", + "inherits": "_ninja-release", + "condition": {"type": "equals", "lhs": "${hostSystemName}", "rhs": "Darwin"}, + "binaryDir": "${sourceDir}/build/macos-x64-appleclang-release", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug", - "VCPKG_TARGET_TRIPLET": "x64-mingw-static", - "CMAKE_EXPORT_COMPILE_COMMANDS": "YES" + "CMAKE_C_COMPILER": "clang", + "CMAKE_CXX_COMPILER": "clang++", + "VCPKG_TARGET_TRIPLET": "x64-osx", + "FLTX_VALIDATION_EXPECTED_ARCHITECTURE": "x86_64" } }, { - "name": "mingw-release", - "generator": "Ninja", - "binaryDir": "${sourceDir}/build/mingw-release", - "toolchainFile": "${sourceDir}/vcpkg/scripts/buildsystems/vcpkg.cmake", + "name": "macos-arm64-appleclang-release", + "displayName": "macOS ARM64 / AppleClang / Release", + "inherits": "_ninja-release", + "condition": {"type": "equals", "lhs": "${hostSystemName}", "rhs": "Darwin"}, + "binaryDir": "${sourceDir}/build/macos-arm64-appleclang-release", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "VCPKG_TARGET_TRIPLET": "x64-mingw-static", - "VCPKG_HOST_TRIPLET": "x64-mingw-static", - "CMAKE_EXPORT_COMPILE_COMMANDS": "YES" + "CMAKE_C_COMPILER": "clang", + "CMAKE_CXX_COMPILER": "clang++", + "VCPKG_TARGET_TRIPLET": "arm64-osx", + "FLTX_VALIDATION_EXPECTED_ARCHITECTURE": "arm64" } }, { - "name": "wasm32-release", - "generator": "Ninja", - "binaryDir": "${sourceDir}/build/wasm32-release", - "toolchainFile": "${sourceDir}/vcpkg/scripts/buildsystems/vcpkg.cmake", + "name": "wasm32-emscripten-release", + "displayName": "WebAssembly wasm32 / Emscripten / Release", + "inherits": "_ninja-release", + "binaryDir": "${sourceDir}/build/wasm32-emscripten-release", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_EXPORT_COMPILE_COMMANDS": "YES", "VCPKG_CHAINLOAD_TOOLCHAIN_FILE": "$env{EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake", "VCPKG_TARGET_TRIPLET": "wasm32-emscripten", "VCPKG_OVERLAY_PORTS": "${sourceDir}/cmake/vcpkg-ports", - "VCPKG_OVERLAY_TRIPLETS": "${sourceDir}/cmake/vcpkg-triplets" + "VCPKG_OVERLAY_TRIPLETS": "${sourceDir}/cmake/vcpkg-triplets", + "FLTX_VALIDATION_EXPECTED_ARCHITECTURE": "wasm32", + "FLTX_METRICS_QDPP": "ON", + "FLTX_METRICS_QDPP_INCLUDE_DIR": "${sourceDir}/validation/extern/qdpp/include" } }, { "name": "vs2026", + "displayName": "Visual Studio 2026 x64", "condition": {"type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows"}, "generator": "Visual Studio 18 2026", + "architecture": "x64", "binaryDir": "${sourceDir}/build/vs2026", "toolchainFile": "${sourceDir}/vcpkg/scripts/buildsystems/vcpkg.cmake", "cacheVariables": { "CMAKE_CONFIGURATION_TYPES": "Debug;Release;RelWithDebInfo", - "CMAKE_EXPORT_COMPILE_COMMANDS": "YES" + "CMAKE_EXPORT_COMPILE_COMMANDS": "YES", + "VCPKG_TARGET_TRIPLET": "x64-windows", + "FLTX_VALIDATION_EXPECTED_ARCHITECTURE": "x86_64" } }, { - "name": "macos-release", - "displayName": "macOS Release", - "generator": "Unix Makefiles", - "binaryDir": "${sourceDir}/build/macos-release", + "name": "xcode", + "displayName": "Xcode", + "condition": {"type": "equals", "lhs": "${hostSystemName}", "rhs": "Darwin"}, + "generator": "Xcode", + "binaryDir": "${sourceDir}/build/xcode", + "toolchainFile": "${sourceDir}/vcpkg/scripts/buildsystems/vcpkg.cmake", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/vcpkg/scripts/buildsystems/vcpkg.cmake", - "VCPKG_TARGET_TRIPLET": "arm64-osx" + "CMAKE_CONFIGURATION_TYPES": "Debug;Release;RelWithDebInfo" } } ], "buildPresets": [ - { "name": "01. native-debug", "configurePreset": "native-debug" }, - { "name": "02. native-release", "configurePreset": "native-release" }, - { "name": "03. mingw-debug", "configurePreset": "mingw-debug" }, - { "name": "04. mingw-release", "configurePreset": "mingw-release" }, - { "name": "05. wasm32-release", "configurePreset": "wasm32-release" }, - { "name": "06. macos-release", "configurePreset": "macos-release" }, - { "name": "clang-debug", "configurePreset": "clang-debug" }, - { "name": "clang-release", "configurePreset": "clang-release" } + {"name": "windows-x64-msvc-release", "configurePreset": "windows-x64-msvc-release"}, + {"name": "windows-x64-clangcl-release", "configurePreset": "windows-x64-clangcl-release"}, + {"name": "windows-x64-mingw-release", "configurePreset": "windows-x64-mingw-release"}, + {"name": "windows-arm64-msvc-release", "configurePreset": "windows-arm64-msvc-release"}, + {"name": "windows-arm64-clangcl-release", "configurePreset": "windows-arm64-clangcl-release"}, + {"name": "linux-x64-gcc-release", "configurePreset": "linux-x64-gcc-release"}, + {"name": "linux-x64-clang-release", "configurePreset": "linux-x64-clang-release"}, + {"name": "linux-arm64-gcc-release", "configurePreset": "linux-arm64-gcc-release"}, + {"name": "linux-arm64-clang-release", "configurePreset": "linux-arm64-clang-release"}, + {"name": "macos-x64-appleclang-release", "configurePreset": "macos-x64-appleclang-release"}, + {"name": "macos-arm64-appleclang-release", "configurePreset": "macos-arm64-appleclang-release"}, + {"name": "wasm32-emscripten-release", "configurePreset": "wasm32-emscripten-release"}, + {"name": "vs2026-debug", "configurePreset": "vs2026", "configuration": "Debug"}, + {"name": "vs2026-release", "configurePreset": "vs2026", "configuration": "Release"}, + {"name": "vs2026-relwithdebinfo", "configurePreset": "vs2026", "configuration": "RelWithDebInfo"}, + {"name": "xcode-debug", "configurePreset": "xcode", "configuration": "Debug"}, + {"name": "xcode-release", "configurePreset": "xcode", "configuration": "Release"}, + {"name": "xcode-relwithdebinfo", "configurePreset": "xcode", "configuration": "RelWithDebInfo"} ], "testPresets": [ - { - "name": "native-debug", - "configurePreset": "native-debug", - "output": { "outputOnFailure": true } - }, - { - "name": "native-release", - "configurePreset": "native-release", - "output": { "outputOnFailure": true } - }, - { - "name": "mingw-debug", - "configurePreset": "mingw-debug", - "output": { "outputOnFailure": true } - }, - { - "name": "mingw-release", - "configurePreset": "mingw-release", - "output": { "outputOnFailure": true } - }, - { - "name": "wasm32-release", - "configurePreset": "wasm32-release", - "output": { "outputOnFailure": true } - }, - { - "name": "macos-release", - "configurePreset": "macos-release", - "output": { "outputOnFailure": true } - }, - { - "name": "clang-debug", - "configurePreset": "clang-debug", - "output": { "outputOnFailure": true } - }, - { - "name": "clang-release", - "configurePreset": "clang-release", - "output": { "outputOnFailure": true } - }, - { - "name": "vs2026-debug", - "configurePreset": "vs2026", - "configuration": "Debug", - "output": { "outputOnFailure": true } - }, - { - "name": "vs2026-release", - "configurePreset": "vs2026", - "configuration": "Release", - "output": { "outputOnFailure": true } - }, - { - "name": "vs2026-relwithdebinfo", - "configurePreset": "vs2026", - "configuration": "RelWithDebInfo", - "output": { "outputOnFailure": true } - } + {"name": "windows-x64-msvc-release", "configurePreset": "windows-x64-msvc-release", "output": {"outputOnFailure": true}}, + {"name": "windows-x64-clangcl-release", "configurePreset": "windows-x64-clangcl-release", "output": {"outputOnFailure": true}}, + {"name": "windows-x64-mingw-release", "configurePreset": "windows-x64-mingw-release", "output": {"outputOnFailure": true}}, + {"name": "windows-arm64-msvc-release", "configurePreset": "windows-arm64-msvc-release", "output": {"outputOnFailure": true}}, + {"name": "windows-arm64-clangcl-release", "configurePreset": "windows-arm64-clangcl-release", "output": {"outputOnFailure": true}}, + {"name": "linux-x64-gcc-release", "configurePreset": "linux-x64-gcc-release", "output": {"outputOnFailure": true}}, + {"name": "linux-x64-clang-release", "configurePreset": "linux-x64-clang-release", "output": {"outputOnFailure": true}}, + {"name": "linux-arm64-gcc-release", "configurePreset": "linux-arm64-gcc-release", "output": {"outputOnFailure": true}}, + {"name": "linux-arm64-clang-release", "configurePreset": "linux-arm64-clang-release", "output": {"outputOnFailure": true}}, + {"name": "macos-x64-appleclang-release", "configurePreset": "macos-x64-appleclang-release", "output": {"outputOnFailure": true}}, + {"name": "macos-arm64-appleclang-release", "configurePreset": "macos-arm64-appleclang-release", "output": {"outputOnFailure": true}}, + {"name": "wasm32-emscripten-release", "configurePreset": "wasm32-emscripten-release", "output": {"outputOnFailure": true}}, + {"name": "vs2026-debug", "configurePreset": "vs2026", "configuration": "Debug", "output": {"outputOnFailure": true}}, + {"name": "vs2026-release", "configurePreset": "vs2026", "configuration": "Release", "output": {"outputOnFailure": true}}, + {"name": "vs2026-relwithdebinfo", "configurePreset": "vs2026", "configuration": "RelWithDebInfo", "output": {"outputOnFailure": true}}, + {"name": "xcode-debug", "configurePreset": "xcode", "configuration": "Debug", "output": {"outputOnFailure": true}}, + {"name": "xcode-release", "configurePreset": "xcode", "configuration": "Release", "output": {"outputOnFailure": true}}, + {"name": "xcode-relwithdebinfo", "configurePreset": "xcode", "configuration": "RelWithDebInfo", "output": {"outputOnFailure": true}} ] } diff --git a/LICENSE b/LICENSE index 1e78390..9251c72 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2026 willmh93 +Copyright (c) 2026 William Hemsworth Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 913aa29..43081f1 100644 --- a/README.md +++ b/README.md @@ -1,56 +1,65 @@

fltx logo
- Extended-precision floating point and constexpr math for C++23
+ Extended-precision floating point and constexpr math for C++20
Fast · Precise · Lightweight

-[![Precision Linux](https://github.com/willmh93/fltx/actions/workflows/precision-tests-linux.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/precision-tests-linux.yml) -[![Precision Windows](https://github.com/willmh93/fltx/actions/workflows/precision-tests-windows.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/precision-tests-windows.yml) -[![Precision macOS](https://github.com/willmh93/fltx/actions/workflows/precision-tests-mac.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/precision-tests-mac.yml) -[![Precision wasm32](https://github.com/willmh93/fltx/actions/workflows/precision-tests-wasm32.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/precision-tests-wasm32.yml) -[![Parity Linux](https://github.com/willmh93/fltx/actions/workflows/parity-tests-linux.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/parity-tests-linux.yml) -[![Parity Windows](https://github.com/willmh93/fltx/actions/workflows/parity-tests-windows.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/parity-tests-windows.yml) -[![Parity macOS](https://github.com/willmh93/fltx/actions/workflows/parity-tests-mac.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/parity-tests-mac.yml) -[![Parity wasm32](https://github.com/willmh93/fltx/actions/workflows/parity-tests-wasm32.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/parity-tests-wasm32.yml) -[![IO Linux](https://github.com/willmh93/fltx/actions/workflows/io-tests-linux.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/io-tests-linux.yml) -[![IO Windows](https://github.com/willmh93/fltx/actions/workflows/io-tests-windows.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/io-tests-windows.yml) -[![IO macOS](https://github.com/willmh93/fltx/actions/workflows/io-tests-mac.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/io-tests-mac.yml) -[![IO wasm32](https://github.com/willmh93/fltx/actions/workflows/io-tests-wasm32.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/io-tests-wasm32.yml) - -`fltx` is for projects that needs more precision than `double`, without giving up fixed-size scalar types, predictable performance, `constexpr` support, or familiar C++ ergonomics. +[![Tests Linux](https://github.com/willmh93/fltx/actions/workflows/tests-linux.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/tests-linux.yml) +[![Tests Windows](https://github.com/willmh93/fltx/actions/workflows/tests-windows.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/tests-windows.yml) +[![Tests macOS](https://github.com/willmh93/fltx/actions/workflows/tests-macos.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/tests-macos.yml) +[![Tests WebAssembly](https://github.com/willmh93/fltx/actions/workflows/tests-wasm32.yml/badge.svg)](https://github.com/willmh93/fltx/actions/workflows/tests-wasm32.yml) + +`fltx` is for projects that need more precision than `double`, without giving up fixed-size scalar types, predictable performance, `constexpr` support, or familiar C++ ergonomics. ## Menu - [Overview](https://github.com/willmh93/fltx#highlights): highlights and core types - [Get Started](https://github.com/willmh93/fltx#quick-start): quick start and installation - [Library Guide](https://github.com/willmh93/fltx#use-cases): use cases, headers, numeric types, math, and IO -- [Advanced Features](https://github.com/willmh93/fltx#f256-expression-fusion): f256 expression fusion and template dispatch +- [Advanced Features](https://github.com/willmh93/fltx#template-dispatch): template dispatch - [Developer](https://github.com/willmh93/fltx#building-fltx): building fltx and running tests -- [Project Details](https://github.com/willmh93/fltx#benchmarks): benchmarks and license +- [Project Details](https://github.com/willmh93/fltx#benchmarks): benchmarks, implementation notes, and license ## Highlights Features: +- C++20 minimum language requirement - Fixed-size extended-precision scalar types: [`bl::f128`](include/fltx/f128.h) and [`bl::f256`](include/fltx/f256.h) -- Full `constexpr` support for arithmetic, comparisons, conversions, parsing, formatting, and all math functions -- A familiar standard-library shaped API; in most cases you can simply replace `std::` with `bl::` +- Library-wide **constexpr** support for math, parsing, static formatting, and conversions +- Familiar `std::` style APIs; many calls work by swapping `std::` for `bl::` - No required runtime dependencies -- Standard-library integration for IO streams / manipulators, `std::numeric_limits`, `std::numbers`, `std::hash`, `std::format` +- Standard-library integration for streams, manipulators, `std::numeric_limits`, `std::numbers`, `std::hash`, and `std::format` Accuracy: - Accuracy validated against [boost::multiprecision::mpfr_float_backend](https://www.boost.org/doc/libs/latest/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/mpfr_float.html) -- Enable `FLTX_CONSTEXPR_PARITY` for bitwise-identical runtime and `constexpr` results (reduces performance) +- **Infinity** / **NaN** correctness +- Runtime, genuine `constexpr`, and fast-math paths are accuracy-gated independently; exact cross-path bits are not promised +- Consumer fast-math treats finite inputs as a precondition for runtime f128/f256 `+`, `-`, `*`, and `/`; strict builds, genuine constant evaluation, and other math APIs retain their special-value contracts Performance: +- Benchmarked against comparable libraries, demonstrating overall superior performance - Compatible with fast-math builds -- [`bl::f256`](include/fltx/f256.h) has an expression node system which recognises and fuses common arithmetic shapes, reducing intermediate rounding and temporary value materialisation, allowing those shapes to run specialised fused kernels. -- Hardware acceleration where supported, including x86/x64 SSE2 with FMA when available, AArch64 NEON, and WebAssembly `wasm128` SIMD via Emscripten +- Internal [`bl::f256`](include/fltx/f256.h) expression fusion reduces intermediate rounding and temporary value materialisation for common arithmetic shapes. +- Hardware acceleration where supported, including x86/x64 SSE2 with FMA when available, AArch64 NEON, and WebAssembly SIMD128 via Emscripten - Suitable for lightweight native builds, WebAssembly / Emscripten - Optional runtime-to-compile-time dispatch helper for template-specialized kernels +MinGW/GCC consumers that need extended precision down into binary64's +subnormal range should compile with `-ffast-math` but link with +`-ffast-math -mno-daz-ftz`. Bare link-time `-ffast-math` adds GCC's +`crtfastmath.o`, globally enabling FTZ/DAZ and discarding low expansion limbs. +The MinGW consumer-fast-math validation profile uses the gradual-underflow +form. + +MSVC C++20 builds require MSVC 19.36 or newer, and GCC C++20 builds require GCC +12 or newer. To preserve compile time and object size in both optimized and +debug builds, fltx uses their accepted `if consteval` extensions internally in +C++20 mode. C++23 builds use the standard feature; Clang-family C++20 builds +use `std::is_constant_evaluated()`. + ## Core Types | Type | Representation | Accuracy | @@ -67,7 +76,35 @@ sizeof(bl::f128) == 16 sizeof(bl::f256) == 32 ``` -[`bl::f128`](include/fltx/f128.h) and [`bl::f256`](include/fltx/f256.h) are not IEEE [binary128](https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format#IEEE_754_quadruple-precision_binary_floating-point_format:_binary128) / [binary256](https://en.wikipedia.org/wiki/Octuple-precision_floating-point_format#IEEE_754_octuple-precision_binary_floating-point_format:_binary256) types, and they are not arbitrary-precision numbers. +[`bl::f128`](include/fltx/f128.h) and [`bl::f256`](include/fltx/f256.h) are *not* IEEE [binary128](https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format#IEEE_754_quadruple-precision_binary_floating-point_format:_binary128) / [binary256](https://en.wikipedia.org/wiki/Octuple-precision_floating-point_format#IEEE_754_octuple-precision_binary_floating-point_format:_binary256) types. + +They are fixed-size expansion types: `f128` is double-double, and `f256` is quad-double. The names are intentionally short and uniform with `f32`/`f64`; they describe the precision tier, not the underlying representation. + +### Nominal precision policy + +The public floating-point model treats `f128` as a 106-bit type and `f256` as +a 212-bit type. `std::numeric_limits`, `epsilon()`, default text precision, and +`bl::nextafter`/`bl::nexttoward` follow that nominal model. In particular, +`nextafter` adds or subtracts one binade-relative nominal ULP; it does not search +for the smallest possible change to an individual storage limb. + +Arithmetic still uses the full nonoverlapping expansion representation and may +retain useful information in sparse tails beyond the nominal lattice. Results +are not rounded to 106 or 212 bits at API boundaries. Default `to_string`, +`to_static_string`, `to_chars`, and general `std::format` output use 33 digits +for `f128` and 65 for `f256`. Pass an explicit larger precision when sparse-tail +detail must be preserved; the fixed-format buffer capacities are unchanged. + +Accuracy reports measure the two text directions independently. A `parse` row +compares the stored expansion with the exact input decimal, while a formatting +row has MPFR read the emitted decimal directly and deliberately bypasses the +fltx parser. Formatting therefore can score more bits than the nominal binary +destination can retain; matching parse/format scores are not an I/O contract. +For values on the nominal lattice, the default decimal round trip is stable: +the parsed value is within half a nominal ULP and emits the same default text. +Identical limb encodings are not promised because parsing may retain a closer +sparse tail. Explicit scientific precision 33 for `f128` and 67 for `f256` +remains the tested component-preserving envelope for ordinary expansion tails. ## Quick Start @@ -87,6 +124,7 @@ int main() constexpr f256 d = bl::sin(a + b); std::cout + << std::fixed << std::setprecision(std::numeric_limits::digits10) << "a = " << a << "\n" << "b = " << b << "\n" @@ -100,11 +138,29 @@ Output: ```text a = 0.333333333333333333333333333333333333333333333333333333333333333 b = 0.666666666666666666666666666666666666666666666666666666666666667 -c = 1 -d = 0.84147098480789650665250232163029899962256306079837106567275171 +c = 1.000000000000000000000000000000000000000000000000000000000000000 +d = 0.841470984807896506652502321630298999622563060798371065672751710 ``` -More examples are available in [examples/](examples/) +More examples: + +| Example | Shows | +|---|---| +| [`example_basic.cpp`](examples/example_basic.cpp) | Basic `f128` / `f256` arithmetic, literals, and output. | +| [`example_constexpr_io.cpp`](examples/example_constexpr_io.cpp) | Compile-time parsing, formatting, and string conversion. | +| [`example_dispatch.cpp`](examples/example_dispatch.cpp) | Generic code dispatching across FLTX precision types. | +| [`example_mandelbrot.cpp`](examples/example_mandelbrot.cpp) | Higher-precision numeric work in a small visual workload. | +| [`example_consteval_ellipse.cpp`](examples/example_consteval_ellipse.cpp) | Consteval geometry using FLTX math. | +| [`example_consteval_library_sweep.cpp`](examples/example_consteval_library_sweep.cpp) | Library-wide constexpr coverage across the supported function groups. | +| [`example_random.cpp`](examples/example_random.cpp) | Random value generation for FLTX types. | +| [`example_pow.cpp`](examples/example_pow.cpp) | `bl::pow` / `bl::ipow` overload behavior, return-type policy, and fast paths. | +| [`example_newton_solver.cpp`](examples/example_newton_solver.cpp) | Generic Newton solving across `f64`, `f128`, and `f256`. | +| [`example_charconv.cpp`](examples/example_charconv.cpp) | Buffer-oriented `to_chars` / `from_chars` parsing and formatting. | +| [`example_std_integration.cpp`](examples/example_std_integration.cpp) | Standard-library integration with numbers, limits, hashing, comparisons, and optional `std::format`. | +| [`example_storage_interop.cpp`](examples/example_storage_interop.cpp) | Using `f128_s` / `f256_s` storage forms at fixed-size API boundaries. | +| [`example_special_values.cpp`](examples/example_special_values.cpp) | NaN, infinity, signed zero, classification, and layout helpers such as `frexp` / `modf`. | +| [`example_polynomial.cpp`](examples/example_polynomial.cpp) | Polynomial evaluation with `fma` and precision-sensitive cancellation. | +| [`example_consteval_coefficients.cpp`](examples/example_consteval_coefficients.cpp) | Compile-time generation of high-precision coefficient tables. | ## Installation @@ -153,6 +209,16 @@ add_subdirectory(/path/to/fltx fltx-build) target_link_libraries(main PRIVATE fltx::fltx) ``` +The package has three performance controls: + +| Option | Default | Meaning | +|---|---|---| +| `FLTX_FMA_MODE=AUTO\|OFF\|ASSUME` | `AUTO` | Safely detect x86 FMA at runtime, disable hardware FMA, or let the consumer guarantee FMA support. `ASSUME` exports `-mfma` where GNU-style compilers require it and performs no runtime feature check. | +| `FLTX_SIMD=ON\|OFF` | `ON` | Enable supported SIMD paths. Emscripten `ON` supplies `-msimd128` to both the library and consuming translation units. | +| `FLTX_INTERNAL_FAST_MATH=AUTO\|ON\|OFF` | `AUTO` | Control only the compiled `fltx` runtime sources. `AUTO` enables a platform only after its accuracy and performance gate is approved; the current approval list is empty. These flags are never exported to consumers. | + +Normal build-type optimization flags remain controlled by the selected CMake configuration and toolchain. + ## Use Cases `fltx` is aimed at workloads where both precision and speed matter: @@ -182,10 +248,10 @@ Individual headers are also available when you want a smaller include surface: |---|---| | [`fltx/f128.h`](include/fltx/f128.h)
[`fltx/f256.h`](include/fltx/f256.h) | Individual extended-precision types, storage types, and core operations | | [`fltx/f32_math.h`](include/fltx/f32_math.h)
[`fltx/f64_math.h`](include/fltx/f64_math.h)
[`fltx/f128_math.h`](include/fltx/f128_math.h)
[`fltx/f256_math.h`](include/fltx/f256_math.h) | Math APIs for individual floating-point types | -| [`fltx/f128_io.h`](include/fltx/f128_io.h)
[`fltx/f256_io.h`](include/fltx/f256_io.h) | `bl::to_f128`, `bl::to_f256`
`bl::to_string`, `bl::to_static_string`, `bl::to_string_collapsed`
`_dd` / `_qd` literals | -| [`fltx/charconv.h`](include/fltx/charconv.h) | `bl::to_chars` and `bl::from_chars` for extended types | +| [`fltx/f128_io.h`](include/fltx/f128_io.h)
[`fltx/f256_io.h`](include/fltx/f256_io.h) | Extended-type string conversion, stream output, and `_dd` / `_qd` literals | +| [`fltx/charconv.h`](include/fltx/charconv.h) | `bl::to_chars`, `bl::from_chars`, `bl::parse`, `bl::parse(text, fallback)`, and `bl::try_parse` for `f32`, `f64`, `f128`, and `f256` | | [`fltx/aliases.h`](include/fltx/aliases.h) | Fundamental aliases such as `f32`, `f64`, `f128`, and `f256` | -| [`fltx/traits.h`](include/fltx/traits.h) | Concepts, type traits, `FloatType` enum, and `FloatTypeNames` | +| [`fltx/traits.h`](include/fltx/traits.h) | Concepts, type traits, `FloatType` enum, and `bl::to_string(FloatType)` | | [`fltx/format.h`](include/fltx/format.h) | Optional `std::formatter` specializations when `` is available | | [`fltx/dispatch.h`](include/fltx/dispatch.h) | Includes standalone [`fltx/template_dispatch.h`](include/fltx/template_dispatch.h) runtime-to-compile-time dispatch-table helper,
plus mappings for `FloatType` values to `f32`, `f64`, `f128`, or `f256` | @@ -249,23 +315,40 @@ constexpr T radius(T x, T y) return bl::sqrt(x * x + y * y); } -using namespace bl::literals; - constexpr bl::f32 a = radius(1.0f, 2.0f); constexpr bl::f64 b = radius(1.0, 2.0); -constexpr bl::f128 c = radius(1.0_dd, 2.0_dd); -constexpr bl::f256 d = radius(1.0_qd, 2.0_qd); +constexpr bl::f128 c = radius(1_dd, 2_dd); +constexpr bl::f256 d = radius(1_qd, 2_qd); +``` + +Exact operators, hashing, and serialization remain bit-sensitive. For numerical +closeness, use the same-precision `bl::almost_equal` overloads: + +```cpp +constexpr bl::f128 a128{1.0}; +constexpr bl::f128 b128 = a128 + bl::f128{0x1p-80}; +constexpr bool close128 = bl::almost_equal(a128, b128); + +constexpr bl::f256 a256{1.0}; +constexpr bl::f256 b256 = a256 + bl::f256{0x1p-180}; +constexpr bool close256 = bl::almost_equal( + a256, b256, bl::f256{0x1p-179}); ``` +The defaults are relative tolerances of `2^-74` for `f128` and `2^-169` for +`f256`. Pass an explicit absolute tolerance for comparisons near zero. Scalar +and mixed-precision arguments must be promoted explicitly so the chosen +precision and tolerance are never implicit. + Supported function groups: | constexpr | Category | Functions | |---|---|---| | ✅ | Arithmetic | `abs`, `fabs`, `fma` | -| ✅ | Rounding | `floor`, `ceil`, `trunc`, `round`, `lround`, `llround`, `nearbyint`, `rint`, `lrint`, `llrint` | +| ✅ | Rounding | `floor`, `ceil`, `trunc`, `round`, `lround`, `llround`, `round_to` | | ✅ | Remainders | `fmod`, `remainder`, `remquo` | | ✅ | Min / max / sign | `fmin`, `fmax`, `fdim`, `copysign`, `signbit` | -| ✅ | Roots / powers | `sqrt`, `cbrt`, `hypot`, `pow` | +| ✅ | Roots / powers | `sqrt`, `cbrt`, `hypot`, `pow`, `ipow` | | ✅ | Exp / log | `exp`, `exp2`, `expm1`, `log`, `log2`, `log10`, `log1p`, `logb`, `ilogb` | | ✅ | Trigonometry | `sin`, `cos`, `tan`, `sincos`, `asin`, `acos`, `atan`, `atan2` | | ✅ | Hyperbolic | `sinh`, `cosh`, `tanh`, `asinh`, `acosh`, `atanh` | @@ -273,40 +356,113 @@ Supported function groups: | ✅ | Classification / comparison | `fpclassify`, `isfinite`, `isinf`, `isnan`, `isnormal`, `isunordered`, `isgreater`, `isgreaterequal`, `isless`, `islessequal`, `islessgreater`, `iszero` | | ✅ | Scaling / layout | `ldexp`, `scalbn`, `scalbln`, `frexp`, `modf`, `nextafter`, `nexttoward` | +For an example of the library-wide constexpr capabilities, see [`example_consteval_library_sweep.cpp`](examples/example_consteval_library_sweep.cpp). + +Use `bl::roundeven(x)` for nearest-integer rounding with halfway cases rounded to even. The standard-shaped `bl::round(x)`, `bl::trunc(x)`, `bl::ceil(x)`, and `bl::floor(x)` functions provide nearest-away-from-zero and the three directed rounding behaviors. Use `bl::round_decimals(x, precision)` for decimal-place rounding and `bl::round_significant(x, precision)` for significant-figure rounding. Use `bl::pow(T{ base }, n)` or `bl::ipow(T{ base }, n)` for integral powers, including powers of ten. ## IO and Literals -[`fltx/io.h`](include/fltx/io.h) adds `constexpr`-capable parsing, formatting, stream output, string conversion, and the `_dd` / `_qd` literals: +[`fltx/io.h`](include/fltx/io.h) provides constexpr-capable parsing, formatting, stream output, string conversion, and the `_dd` / `_qd` literals: + +### Literals example: ```cpp +#include +using namespace bl; using namespace bl::literals; -constexpr f128 a = 1.25_dd; -constexpr f256 b = 3.1415926535897932384626433832795028841971_qd; +constexpr f128 pi_128 = 3.14159265358979323846264338327950288_dd; +constexpr f256 pi_256 = 3.1415926535897932384626433832795028841971693993751058209749445923078164_qd; +``` + +### Serialize example: -constexpr auto s1 = bl::to_static_string(b); // static_string<512> -std::string s2 = bl::to_string(b); +```cpp +// serialize +std::string s1 = bl::to_string(pi_256); // string with default precision +std::string s2 = bl::to_string(pi_256, 16, true); // string with fixed precision +constexpr auto s3 = bl::to_static_string(pi_256, 10); // static_string with fixed precision ``` -Stream output supports `std::setprecision`, `std::fixed`, `std::scientific`, `std::showpoint`, `std::showpos`, and `std::uppercase`. +The default precision is the nominal round-trip precision (33 digits for +`f128`, 65 for `f256`). Explicit precision remains available for expansion-aware +serialization, including 67-digit `f256` output when sparse tail detail matters. -For buffer-oriented code, [`fltx/charconv.h`](include/fltx/charconv.h) provides `bl::to_chars` and `bl::from_chars` overloads for extended types. Include [`fltx/format.h`](include/fltx/format.h) when you want `std::format` support on standard libraries that provide ``. +### Deserialize example: -## f256 Expression Fusion +```cpp +// deserialize (fallback) +constexpr f256 value1 = bl::parse("__3.1415", 0_qd); // invalid input, use fallback value: 0.0 -[`bl::f256`](include/fltx/f256.h) has an expression node system which recognises common arithmetic shapes, including product sums, dot-product-plus-bias expressions, and scaled linear combinations. +// deserialize (try/catch) +f256 value2; +try +{ + value2 = bl::parse("__3.1415"); +} +catch (const std::exception& e) +{ + std::cout << e.what() << "\n"; // exception: "bl::parse invalid input" +} -For example: +// deserialize (error in result.ec) +constexpr auto result = bl::try_parse("__3.1415"); +if (result) + std::cout << "success: " << result.value; +else + std::cout << "invalid input"; +``` + +Use: +- `bl::to_static_string` for compile-time fixed-capacity string output. +- `bl::to_string` when you want a `std::string`. +- `bl::parse` for strict whole-string parsing that returns the parsed value. +- `bl::parse(text, fallback)` when a fallback value is enough. +- `bl::try_parse` when you need error and consumed-character details. + +String input is intentionally routed through the parsing APIs. Constructors for `f128` and `f256` are for numeric and storage-form values, not direct text parsing. + +Stream output supports `std::setprecision`, `std::fixed`, `std::scientific`, `std::showpoint`, `std::showpos`, and `std::uppercase`. + +### Buffer-oriented serializing/deserializing example: ```cpp -f256 r = a * b + c * d + e; +#include + +// serialize +char buffer[128]{}; +auto written = bl::to_chars(buffer, buffer + sizeof(buffer), pi_256, std::chars_format::fixed, 32); +if (written.ec == std::errc{}) + std::cout << std::string_view{ buffer, static_cast(written.ptr - buffer) }; + +// deserialize +std::string_view text = "3.1415"; +f256 parsed{}; +auto read = bl::from_chars(text.data(), text.data() + text.size(), parsed); +if (read.ec == std::errc{} && read.ptr == text.data() + text.size()) + std::cout << "success: " << parsed; ``` -is kept as a small compile-time expression and lowered to the existing fused product-sum body. This avoids materialising and normalising each intermediate quad-double result before the final value is needed. +For buffer-oriented code, [`fltx/charconv.h`](include/fltx/charconv.h) provides: -The matcher also accepts selected equivalent spellings, such as reordered product/value terms and scaled linear forms. That gives common kernels like affine transforms, small matrix-vector operations, polynomial-style updates, and recurrence relations a faster path without requiring users to call specialised helpers or the implementation to maintain a full symbolic optimiser. +- `bl::to_chars` writes into buffer and reports the end pointer plus `std::errc`. +- `bl::from_chars` parses the leading numeric token and reports where parsing stopped. -The fused bodies remain explicit and bounded, which keeps compile-time and code-size costs under control. +### std::format example: + +Include [`fltx/format.h`](include/fltx/format.h) when you want `std::format` support for `f128`/`f256`. + +The formatter supports common numeric presentation options such as precision, fixed/scientific/general notation, sign, width, alignment, fill, alternate form, and uppercase output. + +```cpp +#include + +std::string fixed = std::format("{:.32f}", pi_256); // "3.14159265358979323846264338327950" +std::string scientific = std::format("{:+.16e}", pi_256); // "+3.1415926535897932e+00" +std::string padded = std::format("{:>25.20g}", pi_256); // " 3.1415926535897932385" +std::string hex = std::format("{:.8a}", pi_256); // "0x1.921fb544p+1" +std::string hex_alt = std::format("{:+#.12A}", pi_256); // "+0X1.921FB54442D2P+1" +``` ## Template Dispatch @@ -335,7 +491,7 @@ int main() bl_table_invoke( bl_dispatch_table(run_kernel, 1920, 1080), - bl_enum_type(precision) + bl_enum_type(precision) // selects compile-time type f256 from runtime FloatType::F256 value ); } ``` @@ -430,10 +586,10 @@ cd fltx ./vcpkg/bootstrap-vcpkg.sh # 6. Configure; this installs vcpkg dependencies like Catch2, GMP, and MPFR -cmake --preset macos-release +cmake --preset macos-arm64-appleclang-release # 7. Build -cmake --build build/macos-release --parallel +cmake --build --preset macos-arm64-appleclang-release --parallel ``` For an already-cloned repo: @@ -443,8 +599,8 @@ cd ~/Documents/fltx git pull git submodule update --init --recursive ./vcpkg/bootstrap-vcpkg.sh -cmake --preset macos-release -cmake --build build/macos-release --parallel +cmake --preset macos-arm64-appleclang-release +cmake --build --preset macos-arm64-appleclang-release --parallel ``` @@ -463,11 +619,11 @@ cd fltx ./vcpkg/bootstrap-vcpkg.sh -cmake --preset native-release -cmake --build build/native-release --parallel +cmake --preset linux-x64-gcc-release +cmake --build --preset linux-x64-gcc-release --parallel ``` -Other distributions should use equivalent packages for a C++23 compiler, CMake, Ninja, pkg-config, and the autotools used by the GMP/MPFR vcpkg ports. +Other distributions should use equivalent packages for a C++20 compiler, CMake, Ninja, pkg-config, and the autotools used by the GMP/MPFR vcpkg ports. @@ -476,10 +632,14 @@ Other distributions should use equivalent packages for a C++23 compiler, CMake, Test executables are registered with CTest. After building, you can run the registered test cases from the command line: ```bash -ctest --preset native-release +ctest --preset linux-x64-gcc-release ``` -Use the matching preset for other configured build trees, such as `macos-release`, `mingw-release`, or `wasm32-release`. +Use the matching explicit platform/architecture/compiler preset on other +hosts, such as `macos-arm64-appleclang-release`, +`windows-x64-mingw-release`, or `wasm32-emscripten-release`. CLion and other +CMake-aware IDEs can import these Ninja presets directly; `vs2026` and `xcode` +remain available when native IDE project generation is wanted. For a multi-config Visual Studio build, include the configuration: @@ -487,29 +647,61 @@ For a multi-config Visual Studio build, include the configuration: ctest --preset vs2026-release ``` +The compact gate used by CI builds the public-header and C++ standard +contracts, comparison-library smokes, package smoke, contract and genuine +constexpr suites, normal and fixed-constexpr accuracy in both strict and +consumer-fast-math modes, and Python harness tests: ```powershell -.\build\vs2026\tests\Release\metrics_tests.exe "[precision],[domain],[bench]" +cmake --build --preset windows-x64-msvc-release --target fltx_ci_checks ``` -## Benchmarks +See [validation/README.md](validation/README.md) for focused runner commands, full +accuracy/metrics publication, installed-package checks, and compile/size +telemetry. -Tested on: -- **Windows:** AMD Ryzen 9 5950X, Memory 32 GB LPDDR5 -- **Linux:** AMD Ryzen 9 5950X, Memory 32 GB LPDDR5 -- **MacOS:** Apple M2 Pro, Memory 16 GB LPDDR5 +## Benchmarks / Metrics -`ns/iter` for `bl::f128` / `bl::f256` metrics, colored by speed ratio vs the stronger available reference. +The normalized harness measures the same operation/input corpus for FLTX and +each comparator, retains independent accuracy evidence and every benchmark +trial, and publishes only complete f128/f256 runs. Comparators are: -- cpp_dd (boost::multiprecision::cpp_double_double) -- mpfr (boost::multiprecision::mpfr_float_backend<64>) -- dd_real (qdpp) -- qd_real (qdpp) +- qdpp `dd_real` / `qd_real`; +- Boost.Multiprecision `cpp_double_double` / `mpfr_float_backend<64>`; +- TLFloat `Quad` / `Octuple`. -fltx metrics table +The checked-in development table currently contains Windows MSVC/MinGW and +WebAssembly Emscripten results. Linux GCC/Clang and macOS AppleClang become +canonical only after their final same-source runs are published. Each run's +JSON metadata records the actual compiler, flags, source fingerprint, host, +sample profile, comparator set, and artifact hashes. +The metrics workflow measures strict and consumer-fast-math targets +independently. Fast-math runners use the real consumer compiler option while +linking the same compiled fltx library, and publish separate `_fastmath` data, +metadata, and SVG reports. -Checked-in metrics CSVs currently live under [res/metrics/](res/metrics/) for the platform/compiler combinations that have generated reports. +fltx normalized performance table + +Checked-in CSV/JSON evidence lives under [validation/metrics/data/](validation/metrics/data/), with +reproducible SVG reports under [validation/metrics/generated/](validation/metrics/generated/). The +complete methodology and commands are in [validation/README.md](validation/README.md). + +## f256 Expression Fusion + +[`bl::f256`](include/fltx/f256.h) uses an internal expression node system which recognises common arithmetic shapes, including product sums, dot-product-plus-bias expressions, and scaled linear combinations. + +For example: + +```cpp +f256 r = a * b + c * d + e; +``` + +is kept as a small compile-time expression and lowered to the existing fused product-sum body. This avoids materialising and normalising each intermediate quad-double result before the final value is needed. + +The matcher also accepts selected equivalent spellings, such as reordered product/value terms and scaled linear forms. That gives common kernels like affine transforms, small matrix-vector operations, polynomial-style updates, and recurrence relations a faster path without requiring users to call specialised helpers or the implementation to maintain a full symbolic optimiser. + +The fused bodies remain explicit and bounded, which keeps compile-time and code-size costs under control. ## License diff --git a/cmake/fltxBuildPolicy.cmake b/cmake/fltxBuildPolicy.cmake new file mode 100644 index 0000000..6723ac1 --- /dev/null +++ b/cmake/fltxBuildPolicy.cmake @@ -0,0 +1,347 @@ +include_guard(GLOBAL) + +set(FLTX_BUILD_POLICY_INCLUDED TRUE) + +option( + FLTX_DEVELOPER_BUILD + "Build fltx developer targets: tests, examples, and isolated compile units." + "${PROJECT_IS_TOP_LEVEL}" +) + +set( + FLTX_INTERNAL_FAST_MATH + AUTO + CACHE STRING "Fast-math mode for fltx compiled runtime sources: ON, OFF, or AUTO (validated platforms only)." +) +set_property(CACHE FLTX_INTERNAL_FAST_MATH PROPERTY STRINGS ON OFF AUTO) + +option( + FLTX_SIMD + "Enable SIMD for fltx compiled sources and supported consuming translation units." + ON +) + +set( + FLTX_FMA_MODE + AUTO + CACHE STRING "FMA policy for fltx and consuming translation units: AUTO, OFF, or ASSUME." +) +set_property(CACHE FLTX_FMA_MODE PROPERTY STRINGS AUTO OFF ASSUME) + +option( + FLTX_MSVC_TIMING_REPORTS + "Emit MSVC compiler and linker timing reports for fltx developer targets." + "${FLTX_DEVELOPER_BUILD}" +) + +option( + FLTX_MSVC_PARALLEL_COMPILE + "Enable MSVC /MP multi-processor compilation for eligible fltx targets." + "${FLTX_DEVELOPER_BUILD}" +) + +option( + FLTX_MSVC_DETAILED_TIMING_REPORTS + "Emit detailed MSVC frontend and codegen timing reports for fltx developer targets." + OFF +) + +mark_as_advanced( + FLTX_MSVC_TIMING_REPORTS + FLTX_MSVC_PARALLEL_COMPILE + FLTX_MSVC_DETAILED_TIMING_REPORTS +) + +set(_FLTX_FAST_MATH_SUPPORTED OFF) +if(MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$") + set(_FLTX_FAST_MATH_SUPPORTED ON) +endif() + +# AUTO is an approval list, not a compiler-capability check. Add a platform +# here only after its required accuracy/special-value suite passes and its +# representative compiled-runtime benchmark set improves geometrically by 3%. +set(_FLTX_INTERNAL_FAST_MATH_AUTO_APPROVED OFF) + +set(_FLTX_TARGET_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR};${CMAKE_VS_PLATFORM_NAME}") +string(TOLOWER "${_FLTX_TARGET_PROCESSOR}" _FLTX_TARGET_PROCESSOR) + +set(_FLTX_X86_FMA_TARGET_OPTIONS_SUPPORTED OFF) +if(_FLTX_TARGET_PROCESSOR MATCHES "(^|;)(x86_64|amd64|x64|win32|i[3-6]86)(;|$)") + set(_FLTX_X86_FMA_TARGET_OPTIONS_SUPPORTED ON) +endif() + +set(_FLTX_CLANG_CL OFF) +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND + CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC") + set(_FLTX_CLANG_CL ON) +endif() + +function(fltx_resolve_fast_math_mode _OUT _MODE) + string(TOUPPER "${_MODE}" _FLTX_MODE) + + if(_FLTX_MODE STREQUAL "AUTO") + set(${_OUT} ${_FLTX_FAST_MATH_SUPPORTED} PARENT_SCOPE) + elseif(_FLTX_MODE STREQUAL "ON") + if(_FLTX_FAST_MATH_SUPPORTED) + set(${_OUT} ON PARENT_SCOPE) + else() + message(WARNING "fltx fast-math mode is ON, but no supported option set exists for ${CMAKE_CXX_COMPILER_ID}/${CMAKE_SYSTEM_NAME}; no fast-math options will be applied") + set(${_OUT} OFF PARENT_SCOPE) + endif() + elseif(_FLTX_MODE STREQUAL "OFF") + set(${_OUT} OFF PARENT_SCOPE) + else() + message(FATAL_ERROR "Invalid fltx fast-math mode '${_MODE}'. Expected AUTO, ON, or OFF.") + endif() +endfunction() + +function(fltx_resolve_internal_fast_math_mode _OUT _MODE) + string(TOUPPER "${_MODE}" _FLTX_MODE) + + if(_FLTX_MODE STREQUAL "AUTO") + set(${_OUT} ${_FLTX_INTERNAL_FAST_MATH_AUTO_APPROVED} PARENT_SCOPE) + return() + endif() + + fltx_resolve_fast_math_mode(_FLTX_EXPLICIT_FAST_MATH "${_MODE}") + set(${_OUT} ${_FLTX_EXPLICIT_FAST_MATH} PARENT_SCOPE) +endfunction() + +function(fltx_target_link_options_if_supported _TARGET) + get_target_property(_TARGET_TYPE ${_TARGET} TYPE) + + if(_TARGET_TYPE STREQUAL "EXECUTABLE" OR + _TARGET_TYPE STREQUAL "SHARED_LIBRARY" OR + _TARGET_TYPE STREQUAL "MODULE_LIBRARY") + target_link_options(${_TARGET} PRIVATE ${ARGN}) + endif() +endfunction() + +function(fltx_apply_private_wasm_simd_options _TARGET) + if(NOT EMSCRIPTEN OR NOT FLTX_SIMD) + return() + endif() + + target_compile_options(${_TARGET} PRIVATE -msimd128) + fltx_target_link_options_if_supported(${_TARGET} -msimd128) +endfunction() + +function(fltx_apply_private_fast_math_options _TARGET _MODE) + fltx_resolve_fast_math_mode(_FLTX_ENABLE_TARGET_FAST_MATH "${_MODE}") + if(NOT _FLTX_ENABLE_TARGET_FAST_MATH) + return() + endif() + + target_compile_definitions(${_TARGET} PRIVATE FLTX_FAST_MATH) + + if(MSVC) + target_compile_options(${_TARGET} PRIVATE /fp:fast) + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options(${_TARGET} PRIVATE + -ffp-contract=fast + -fno-math-errno + -fno-trapping-math + ) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "^(Clang|AppleClang)$") + # Clang's plain "fast" mode can override source pragmas. This variant + # keeps contraction fast outside protected error-free-transform blocks + # while allowing their clang fp contract(off) directives to take effect. + target_compile_definitions(${_TARGET} PRIVATE FLTX_DETAIL_FP_CONTRACT_FAST=1) + target_compile_options(${_TARGET} PRIVATE + -ffp-contract=fast-honor-pragmas + -fno-math-errno + -fno-trapping-math + ) + endif() +endfunction() + +function(fltx_configure_compiled_x86_fma_backend _TARGET) + string(TOUPPER "${FLTX_FMA_MODE}" _FLTX_FMA_MODE_NORMALIZED) + if(NOT _FLTX_FMA_MODE_NORMALIZED STREQUAL "AUTO" OR + EMSCRIPTEN OR + MSVC OR + NOT _FLTX_X86_FMA_TARGET_OPTIONS_SUPPORTED OR + NOT CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$") + return() + endif() + + get_target_property(_FLTX_TARGET_SOURCES ${_TARGET} SOURCES) + foreach(_FLTX_SOURCE IN LISTS _FLTX_TARGET_SOURCES) + if(_FLTX_SOURCE MATCHES "(^|[/\\\\])fma_x86\\.cpp$") + set_property(SOURCE "${_FLTX_SOURCE}" APPEND PROPERTY COMPILE_OPTIONS -mfma) + set_property(SOURCE "${_FLTX_SOURCE}" APPEND PROPERTY COMPILE_DEFINITIONS + FLTX_BUILD_X86_FMA_BACKEND=1 + ) + endif() + endforeach() +endfunction() + +function(fltx_configure_public_header_contract _TARGET) + set(_FLTX_VISIBILITY PUBLIC) + if(ARGC GREATER 1) + set(_FLTX_VISIBILITY "${ARGV1}") + endif() + + string(TOUPPER "${FLTX_FMA_MODE}" _FLTX_FMA_MODE_NORMALIZED) + if(NOT _FLTX_FMA_MODE_NORMALIZED MATCHES "^(AUTO|OFF|ASSUME)$") + message(FATAL_ERROR "Invalid FLTX_FMA_MODE='${FLTX_FMA_MODE}'. Expected AUTO, OFF, or ASSUME.") + endif() + + set(_FLTX_HEADER_DEFINITIONS) + if(NOT FLTX_SIMD) + list(APPEND _FLTX_HEADER_DEFINITIONS FLTX_HEADER_SIMD_OFF=1) + endif() + + if(_FLTX_FMA_MODE_NORMALIZED STREQUAL "OFF") + list(APPEND _FLTX_HEADER_DEFINITIONS FLTX_HEADER_FMA_OFF=1) + elseif(_FLTX_FMA_MODE_NORMALIZED STREQUAL "ASSUME") + list(APPEND _FLTX_HEADER_DEFINITIONS FLTX_HEADER_FMA_ASSUME=1) + elseif(_FLTX_X86_FMA_TARGET_OPTIONS_SUPPORTED AND + NOT EMSCRIPTEN AND + NOT MSVC AND + CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$") + list(APPEND _FLTX_HEADER_DEFINITIONS FLTX_HAS_COMPILED_X86_FMA_BACKEND=1) + endif() + + if(_FLTX_HEADER_DEFINITIONS) + target_compile_definitions(${_TARGET} ${_FLTX_VISIBILITY} ${_FLTX_HEADER_DEFINITIONS}) + endif() + + if(_FLTX_FMA_MODE_NORMALIZED STREQUAL "ASSUME" AND + _FLTX_X86_FMA_TARGET_OPTIONS_SUPPORTED AND + NOT EMSCRIPTEN) + if(_FLTX_CLANG_CL) + target_compile_options(${_TARGET} ${_FLTX_VISIBILITY} /clang:-mfma) + elseif(NOT MSVC AND CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$") + target_compile_options(${_TARGET} ${_FLTX_VISIBILITY} -mfma) + endif() + endif() + + if(EMSCRIPTEN AND FLTX_SIMD) + target_compile_options(${_TARGET} ${_FLTX_VISIBILITY} -msimd128) + if(_FLTX_VISIBILITY STREQUAL "PUBLIC" OR _FLTX_VISIBILITY STREQUAL "INTERFACE") + target_link_options(${_TARGET} INTERFACE -msimd128) + endif() + endif() +endfunction() + +function(fltx_configure_internal_target _TARGET) + cmake_parse_arguments(FLTX_INTERNAL "" "FAST_MATH_MODE" "" ${ARGN}) + + # Consumer -ffast-math can enable process-wide FTZ/DAZ on MinGW, while + # Emscripten may optimize the final linked module as a whole. Compile the + # affected runtime implementations with their local evaluation barriers so + # public APIs can retain the normal out-of-line dispatch boundary. + if(MINGW OR EMSCRIPTEN) + target_compile_definitions(${_TARGET} PRIVATE + FLTX_DETAIL_COMPILED_RUNTIME_FP_BARRIERS=1 + ) + endif() + + if(DEFINED FLTX_INTERNAL_FAST_MATH_MODE) + set(_FLTX_INTERNAL_FAST_MATH_MODE "${FLTX_INTERNAL_FAST_MATH_MODE}") + else() + set(_FLTX_INTERNAL_FAST_MATH_MODE "${FLTX_INTERNAL_FAST_MATH}") + endif() + + string(TOUPPER "${_FLTX_INTERNAL_FAST_MATH_MODE}" _FLTX_INTERNAL_FAST_MATH_MODE_NORMALIZED) + if(NOT _FLTX_INTERNAL_FAST_MATH_MODE_NORMALIZED MATCHES "^(AUTO|ON|OFF)$") + message(FATAL_ERROR + "Invalid internal fast-math mode '${_FLTX_INTERNAL_FAST_MATH_MODE}'. " + "Expected AUTO, ON, or OFF." + ) + endif() + target_compile_definitions(${_TARGET} PRIVATE + "FLTX_INTERNAL_FAST_MATH_REQUEST_${_FLTX_INTERNAL_FAST_MATH_MODE_NORMALIZED}=1" + ) + + fltx_resolve_internal_fast_math_mode( + _FLTX_ENABLE_INTERNAL_FAST_MATH + "${_FLTX_INTERNAL_FAST_MATH_MODE}" + ) + if(_FLTX_ENABLE_INTERNAL_FAST_MATH) + fltx_apply_private_fast_math_options(${_TARGET} ON) + endif() + + if(NOT FLTX_SIMD) + target_compile_definitions(${_TARGET} PRIVATE + FLTX_HEADER_SIMD_OFF=1 + FLTX_F128_ENABLE_SIMD=0 + FLTX_F256_ENABLE_SIMD=0 + FLTX_F256_ENABLE_TRIG_SIMD=0 + ) + endif() + + fltx_apply_private_wasm_simd_options(${_TARGET}) + fltx_configure_compiled_x86_fma_backend(${_TARGET}) +endfunction() + +function(fltx_configure_library_target _TARGET) + target_compile_features(${_TARGET} PUBLIC cxx_std_20) + fltx_configure_public_header_contract(${_TARGET} PUBLIC) + fltx_configure_internal_target(${_TARGET}) +endfunction() + +function(fltx_configure_consumer_fast_math _TARGET) + cmake_parse_arguments(FLTX_CONSUMER "" "MODE" "" ${ARGN}) + if(NOT DEFINED FLTX_CONSUMER_MODE) + set(FLTX_CONSUMER_MODE ON) + endif() + + string(TOUPPER "${FLTX_CONSUMER_MODE}" _FLTX_CONSUMER_MODE_NORMALIZED) + if(NOT _FLTX_CONSUMER_MODE_NORMALIZED MATCHES "^(ON|OFF)$") + message(FATAL_ERROR + "Invalid consumer fast-math mode '${FLTX_CONSUMER_MODE}'. " + "Expected ON or OFF." + ) + endif() + + if(MSVC) + if(_FLTX_CONSUMER_MODE_NORMALIZED STREQUAL "ON") + target_compile_options(${_TARGET} PRIVATE /fp:fast) + else() + target_compile_options(${_TARGET} PRIVATE /fp:precise) + endif() + elseif(CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$") + if(_FLTX_CONSUMER_MODE_NORMALIZED STREQUAL "ON") + target_compile_options(${_TARGET} PRIVATE -ffast-math) + fltx_target_link_options_if_supported(${_TARGET} -ffast-math) + else() + target_compile_options(${_TARGET} PRIVATE -fno-fast-math) + fltx_target_link_options_if_supported(${_TARGET} -fno-fast-math) + endif() + else() + message(FATAL_ERROR + "Consumer fast-math validation is unsupported for " + "${CMAKE_CXX_COMPILER_ID}/${CMAKE_SYSTEM_NAME}." + ) + endif() +endfunction() + +function(fltx_assert_package_safe_interface _TARGET) + foreach(_PROPERTY IN ITEMS INTERFACE_COMPILE_OPTIONS INTERFACE_LINK_OPTIONS) + get_target_property(_VALUE ${_TARGET} ${_PROPERTY}) + if(NOT _VALUE) + continue() + endif() + + foreach(_FORBIDDEN IN ITEMS "/arch:AVX" "/arch:AVX2" "-mavx" "-mavx2" "/fp:fast" "-ffast-math") + if("${_VALUE}" MATCHES "(^|;)${_FORBIDDEN}($|;)") + message(FATAL_ERROR "${_TARGET} ${_PROPERTY} contains package-unsafe option '${_FORBIDDEN}': ${_VALUE}") + endif() + endforeach() + + string(TOUPPER "${FLTX_FMA_MODE}" _FLTX_FMA_MODE_NORMALIZED) + if("${_VALUE}" MATCHES "(^|;)(-mfma|/clang:-mfma)($|;)" AND + NOT _FLTX_FMA_MODE_NORMALIZED STREQUAL "ASSUME") + message(FATAL_ERROR + "${_TARGET} ${_PROPERTY} contains an FMA target option outside " + "FLTX_FMA_MODE=ASSUME: ${_VALUE}" + ) + endif() + + if("${_VALUE}" MATCHES "(^|;)-msimd128($|;)" AND NOT (EMSCRIPTEN AND FLTX_SIMD)) + message(FATAL_ERROR "${_TARGET} ${_PROPERTY} contains -msimd128 while Wasm SIMD is disabled: ${_VALUE}") + endif() + endforeach() +endfunction() diff --git a/cmake/fltxFastMath.cmake b/cmake/fltxFastMath.cmake deleted file mode 100644 index 4471cb0..0000000 --- a/cmake/fltxFastMath.cmake +++ /dev/null @@ -1,107 +0,0 @@ -if(NOT DEFINED FLTX_OPTIONS_INCLUDED) - include("${CMAKE_CURRENT_LIST_DIR}/fltxOptions.cmake") -endif() - -set(_FLTX_FAST_MATH_SUPPORTED OFF) -if(MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$") - set(_FLTX_FAST_MATH_SUPPORTED ON) -endif() - -set(_FLTX_FAST_MATH_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR};${CMAKE_VS_PLATFORM_NAME}") -string(TOLOWER "${_FLTX_FAST_MATH_PROCESSOR}" _FLTX_FAST_MATH_PROCESSOR) - -set(_FLTX_FAST_MATH_ENABLE_AVX2 OFF) -if(_FLTX_FAST_MATH_PROCESSOR MATCHES "(^|;)(x86_64|amd64|x64|win32|i[3-6]86)(;|$)") - set(_FLTX_FAST_MATH_ENABLE_AVX2 ON) -endif() - -function(fltx_resolve_fast_math_mode _OUT _MODE) - string(TOUPPER "${_MODE}" _FLTX_MODE) - - if(_FLTX_MODE STREQUAL "AUTO") - set(${_OUT} ${_FLTX_FAST_MATH_SUPPORTED} PARENT_SCOPE) - elseif(_FLTX_MODE STREQUAL "ON") - if(_FLTX_FAST_MATH_SUPPORTED) - set(${_OUT} ON PARENT_SCOPE) - else() - message(WARNING "fltx fast-math mode is ON, but no supported option set exists for ${CMAKE_CXX_COMPILER_ID}/${CMAKE_SYSTEM_NAME}; no fast-math options will be applied") - set(${_OUT} OFF PARENT_SCOPE) - endif() - elseif(_FLTX_MODE STREQUAL "OFF") - set(${_OUT} OFF PARENT_SCOPE) - else() - message(FATAL_ERROR "Invalid fltx fast-math mode '${_MODE}'. Expected AUTO, ON, or OFF.") - endif() -endfunction() - -fltx_resolve_fast_math_mode(FLTX_ENABLE_FAST_MATH "${FLTX_FAST_MATH_MODE}") - -function(fltx_target_link_options_if_supported _TARGET) - get_target_property(_TARGET_TYPE ${_TARGET} TYPE) - - if(_TARGET_TYPE STREQUAL "EXECUTABLE" OR - _TARGET_TYPE STREQUAL "SHARED_LIBRARY" OR - _TARGET_TYPE STREQUAL "MODULE_LIBRARY") - target_link_options(${_TARGET} PRIVATE ${ARGN}) - endif() -endfunction() - -function(fltx_apply_fast_math_options _TARGET) - set(_FLTX_TARGET_FAST_MATH ${FLTX_ENABLE_FAST_MATH}) - - if(ARGC GREATER 1) - cmake_parse_arguments(FLTX_APPLY_FAST_MATH "" "MODE" "" ${ARGN}) - if(DEFINED FLTX_APPLY_FAST_MATH_MODE) - fltx_resolve_fast_math_mode(_FLTX_TARGET_FAST_MATH "${FLTX_APPLY_FAST_MATH_MODE}") - endif() - endif() - - if(NOT _FLTX_TARGET_FAST_MATH) - return() - endif() - - target_compile_definitions(${_TARGET} PRIVATE - $<$:BL_FAST_MATH> - $<$,$>:FMA_AVAILABLE> - $<$,$>>:FLTX_DISABLE_FMA_AVAILABLE=1> - $<$,$>:BL_FLTX_SIMD_USE_FMA_TWO_PROD=1> - $<$,$>>:BL_FLTX_SIMD_USE_FMA_TWO_PROD=0> - ) - - if(MSVC) - target_compile_options(${_TARGET} PRIVATE - $<$:/fp:fast> - ) - - if(_FLTX_FAST_MATH_ENABLE_AVX2) - target_compile_options(${_TARGET} PRIVATE - $<$:/arch:AVX2> - ) - endif() - else() - target_compile_options(${_TARGET} PRIVATE - $<$:-O3> - $<$:-ffp-contract=fast> - $<$:-fno-math-errno> - $<$:-fno-trapping-math> - ) - - if(_FLTX_FAST_MATH_ENABLE_AVX2) - target_compile_options(${_TARGET} PRIVATE - $<$:-mavx2> - $<$:-mfma> - ) - endif() - - if(FLTX_FAST_MATH_NATIVE) - target_compile_options(${_TARGET} PRIVATE - $<$:-march=native> - $<$:-mtune=native> - ) - endif() - - fltx_target_link_options_if_supported(${_TARGET} - $<$:-O3> - ) - endif() -endfunction() diff --git a/cmake/fltxMsvcParallel.cmake b/cmake/fltxMsvcParallel.cmake index 1ef45b8..47db995 100644 --- a/cmake/fltxMsvcParallel.cmake +++ b/cmake/fltxMsvcParallel.cmake @@ -1,5 +1,5 @@ -if(NOT DEFINED FLTX_OPTIONS_INCLUDED) - include("${CMAKE_CURRENT_LIST_DIR}/fltxOptions.cmake") +if(NOT DEFINED FLTX_BUILD_POLICY_INCLUDED) + include("${CMAKE_CURRENT_LIST_DIR}/fltxBuildPolicy.cmake") endif() function(fltx_enable_msvc_parallel_compile _TARGET) diff --git a/cmake/fltxMsvcTiming.cmake b/cmake/fltxMsvcTiming.cmake index c6f451b..4fa6ec3 100644 --- a/cmake/fltxMsvcTiming.cmake +++ b/cmake/fltxMsvcTiming.cmake @@ -1,5 +1,5 @@ -if(NOT DEFINED FLTX_OPTIONS_INCLUDED) - include("${CMAKE_CURRENT_LIST_DIR}/fltxOptions.cmake") +if(NOT DEFINED FLTX_BUILD_POLICY_INCLUDED) + include("${CMAKE_CURRENT_LIST_DIR}/fltxBuildPolicy.cmake") endif() function(fltx_msvc_target_link_options_if_supported _TARGET) diff --git a/cmake/fltxOptions.cmake b/cmake/fltxOptions.cmake deleted file mode 100644 index aea9c26..0000000 --- a/cmake/fltxOptions.cmake +++ /dev/null @@ -1,148 +0,0 @@ -include_guard(GLOBAL) - -set(FLTX_OPTIONS_INCLUDED TRUE) - -function(fltx_define_cache_bool _NAME _DEFAULT _DOC) - set(_DEFAULT_CACHE_NAME "_${_NAME}_DEFAULT_VALUE") - - get_property(_HAS_VALUE CACHE "${_NAME}" PROPERTY VALUE SET) - get_property(_HAS_OLD_DEFAULT CACHE "${_DEFAULT_CACHE_NAME}" PROPERTY VALUE SET) - - if(_HAS_VALUE) - get_property(_VALUE CACHE "${_NAME}" PROPERTY VALUE) - if(_HAS_OLD_DEFAULT) - get_property(_OLD_DEFAULT CACHE "${_DEFAULT_CACHE_NAME}" PROPERTY VALUE) - if(_VALUE STREQUAL _OLD_DEFAULT) - set(_VALUE "${_DEFAULT}") - endif() - endif() - else() - set(_VALUE "${_DEFAULT}") - endif() - - set(${_NAME} "${_VALUE}" CACHE BOOL "${_DOC}" FORCE) - set(${_DEFAULT_CACHE_NAME} "${_DEFAULT}" CACHE INTERNAL "Last default value for ${_NAME}" FORCE) -endfunction() - -function(fltx_define_cache_string _NAME _DEFAULT _DOC) - set(_DEFAULT_CACHE_NAME "_${_NAME}_DEFAULT_VALUE") - - get_property(_HAS_VALUE CACHE "${_NAME}" PROPERTY VALUE SET) - get_property(_HAS_OLD_DEFAULT CACHE "${_DEFAULT_CACHE_NAME}" PROPERTY VALUE SET) - - if(_HAS_VALUE) - get_property(_VALUE CACHE "${_NAME}" PROPERTY VALUE) - if(_HAS_OLD_DEFAULT) - get_property(_OLD_DEFAULT CACHE "${_DEFAULT_CACHE_NAME}" PROPERTY VALUE) - if(_VALUE STREQUAL _OLD_DEFAULT) - set(_VALUE "${_DEFAULT}") - endif() - endif() - else() - set(_VALUE "${_DEFAULT}") - endif() - - set(${_NAME} "${_VALUE}" CACHE STRING "${_DOC}" FORCE) - set(${_DEFAULT_CACHE_NAME} "${_DEFAULT}" CACHE INTERNAL "Last default value for ${_NAME}" FORCE) - - if(ARGC GREATER 3) - set_property(CACHE ${_NAME} PROPERTY STRINGS ${ARGN}) - endif() -endfunction() - -function(fltx_import_transient_cache_value _NAME _DEFAULT) - if(DEFINED CACHE{${_NAME}}) - set(_VALUE "${${_NAME}}") - unset(${_NAME} CACHE) - set(${_NAME} "${_VALUE}" PARENT_SCOPE) - elseif(NOT DEFINED ${_NAME}) - set(${_NAME} "${_DEFAULT}" PARENT_SCOPE) - endif() -endfunction() - -fltx_define_cache_bool( - FLTX_DEVELOPER_BUILD - "${PROJECT_IS_TOP_LEVEL}" - "Build fltx developer targets: tests, examples, and isolated compile units." -) - -fltx_define_cache_bool( - FLTX_SIMD_ENABLED - ON - "Enable fltx SIMD paths when supported by the target compiler and architecture." -) - -fltx_define_cache_string( - FLTX_FAST_MATH_MODE - ON - "fltx fast-math mode for compiled runtime sources: ON, OFF, or AUTO." - ON OFF AUTO -) - -fltx_define_cache_bool( - FLTX_FAST_MATH_NATIVE - OFF - "Tune fast-math builds for the local host CPU with -march=native/-mtune=native where supported." -) - -set(_FLTX_DEFAULT_FMA_AVAILABLE ON) -if(EMSCRIPTEN) - set(_FLTX_DEFAULT_FMA_AVAILABLE OFF) -endif() - -fltx_define_cache_bool( - FLTX_FMA_AVAILABLE - "${_FLTX_DEFAULT_FMA_AVAILABLE}" - "Use FMA-based error-free transforms where the source checks FMA_AVAILABLE." -) - -set(_FLTX_SIMD_FMA_TWO_PROD_DEFAULT ON) -if(DEFINED CACHE{FLTX_F256_FMA_TWO_PROD} AND NOT DEFINED CACHE{FLTX_SIMD_FMA_TWO_PROD}) - get_property(_FLTX_SIMD_FMA_TWO_PROD_DEFAULT CACHE FLTX_F256_FMA_TWO_PROD PROPERTY VALUE) -endif() - -fltx_define_cache_bool( - FLTX_SIMD_FMA_TWO_PROD - "${_FLTX_SIMD_FMA_TWO_PROD_DEFAULT}" - "Use hardware FMA for SIMD two-product error terms when available." -) - -if(DEFINED CACHE{FLTX_F256_FMA_TWO_PROD}) - unset(FLTX_F256_FMA_TWO_PROD CACHE) -endif() - -fltx_define_cache_bool( - FLTX_MSVC_TIMING_REPORTS - "${FLTX_DEVELOPER_BUILD}" - "Emit MSVC compiler and linker timing reports for fltx developer targets." -) - -fltx_define_cache_bool( - FLTX_MSVC_PARALLEL_COMPILE - "${FLTX_DEVELOPER_BUILD}" - "Enable MSVC /MP multi-processor compilation for eligible fltx targets." -) - -fltx_define_cache_bool( - FLTX_MSVC_DETAILED_TIMING_REPORTS - OFF - "Emit detailed MSVC frontend and codegen timing reports for fltx developer targets." -) - -fltx_define_cache_bool( - VERBOSE_TESTS - ON - "Print metrics console tables while running metrics_tests." -) - -mark_as_advanced( - FLTX_FAST_MATH_NATIVE - FLTX_FMA_AVAILABLE - FLTX_SIMD_FMA_TWO_PROD - FLTX_MSVC_TIMING_REPORTS - FLTX_MSVC_PARALLEL_COMPILE - FLTX_MSVC_DETAILED_TIMING_REPORTS -) - -fltx_import_transient_cache_value(FLTX_PRECISION_TESTS_CONSTEXPR_PARITY OFF) -fltx_import_transient_cache_value(FLTX_PRECISION_TESTS_SIMULATE_CONSTEVAL OFF) diff --git a/cmake/fltxSimd.cmake b/cmake/fltxSimd.cmake deleted file mode 100644 index 2319b42..0000000 --- a/cmake/fltxSimd.cmake +++ /dev/null @@ -1,37 +0,0 @@ -if(NOT DEFINED FLTX_OPTIONS_INCLUDED) - include("${CMAKE_CURRENT_LIST_DIR}/fltxOptions.cmake") -endif() - -function(fltx_apply_simd_options _TARGET) - set(_FLTX_SIMD_VISIBILITY PRIVATE) - if(ARGC GREATER 1) - set(_FLTX_SIMD_VISIBILITY "${ARGV1}") - endif() - - if(EMSCRIPTEN) - target_compile_options(${_TARGET} ${_FLTX_SIMD_VISIBILITY} -msimd128) - - get_target_property(_FLTX_SIMD_TARGET_TYPE ${_TARGET} TYPE) - - if(_FLTX_SIMD_TARGET_TYPE STREQUAL "STATIC_LIBRARY") - if(_FLTX_SIMD_VISIBILITY STREQUAL "PUBLIC" OR - _FLTX_SIMD_VISIBILITY STREQUAL "INTERFACE") - target_link_options(${_TARGET} INTERFACE -msimd128) - endif() - elseif(_FLTX_SIMD_TARGET_TYPE STREQUAL "EXECUTABLE" OR - _FLTX_SIMD_TARGET_TYPE STREQUAL "SHARED_LIBRARY" OR - _FLTX_SIMD_TARGET_TYPE STREQUAL "MODULE_LIBRARY") - target_link_options(${_TARGET} ${_FLTX_SIMD_VISIBILITY} -msimd128) - endif() - endif() - - if(NOT FLTX_SIMD_ENABLED) - target_compile_definitions(${_TARGET} ${_FLTX_SIMD_VISIBILITY} - BL_F128_ENABLE_SIMD=0 - BL_F256_ENABLE_SIMD=0 - BL_F256_ENABLE_TRIG_SIMD=0 - ) - return() - endif() - -endfunction() diff --git a/cmake/fltxSources.cmake b/cmake/fltxSources.cmake index 87cfdbe..77db1e1 100644 --- a/cmake/fltxSources.cmake +++ b/cmake/fltxSources.cmake @@ -1,10 +1,13 @@ set(FLTX_LIBRARY_SOURCE_FILES + src/build_info.cpp + src/fltx_io.cpp src/f128.cpp src/f128_math.cpp src/f128_transcendental.cpp src/f256.cpp src/f256_math.cpp src/f256_transcendental.cpp + src/fma_x86.cpp ) get_filename_component(FLTX_PROJECT_ROOT "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE) diff --git a/cmake/validation/fltxValidationCommon.cmake b/cmake/validation/fltxValidationCommon.cmake new file mode 100644 index 0000000..f1ab9fb --- /dev/null +++ b/cmake/validation/fltxValidationCommon.cmake @@ -0,0 +1,191 @@ +# Shared configuration for validation executables and libraries. + +set(FLTX_VALIDATION_EXPECTED_ARCHITECTURE "" CACHE STRING + "Expected validation target architecture (x86_64, arm64, or wasm32)." +) +set_property(CACHE FLTX_VALIDATION_EXPECTED_ARCHITECTURE PROPERTY STRINGS + "" x86_64 arm64 wasm32 +) +if(NOT FLTX_VALIDATION_EXPECTED_ARCHITECTURE STREQUAL "" AND + NOT FLTX_VALIDATION_EXPECTED_ARCHITECTURE MATCHES "^(x86_64|arm64|wasm32)$") + message(FATAL_ERROR + "Unsupported FLTX_VALIDATION_EXPECTED_ARCHITECTURE=" + "'${FLTX_VALIDATION_EXPECTED_ARCHITECTURE}'." + ) +endif() + +function(fltx_tests_build_configuration_identity config output_hash output_optimized) + string(TOUPPER "${config}" config_upper) + set(compile_flags + "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${config_upper}}" + ) + set(link_flags + "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${config_upper}}" + ) + set(identity + "compiler=${CMAKE_CXX_COMPILER}|id=${CMAKE_CXX_COMPILER_ID}|" + "version=${CMAKE_CXX_COMPILER_VERSION}|generator=${CMAKE_GENERATOR}|" + "config=${config}|cxx=${compile_flags}|link=${link_flags}|" + "ipo=${CMAKE_INTERPROCEDURAL_OPTIMIZATION_${config_upper}}" + ) + string(SHA256 flags_hash "${identity}") + + # Read the flags in command-line order so an explicit trailing /Od or -O0 + # cannot be published merely because the configuration is named Release. + separate_arguments(flag_tokens NATIVE_COMMAND "${compile_flags}") + set(optimized 0) + foreach(flag IN LISTS flag_tokens) + if(MSVC) + if(flag MATCHES "^[-/]Od$") + set(optimized 0) + elseif(flag MATCHES "^[-/]O(1|2|x)$") + set(optimized 1) + endif() + else() + if(flag MATCHES "^-O0$" OR flag MATCHES "^-Og$") + set(optimized 0) + elseif(flag MATCHES "^-O([1-3s]|fast)$" OR flag STREQUAL "-O") + set(optimized 1) + endif() + endif() + endforeach() + + set(${output_hash} "${flags_hash}" PARENT_SCOPE) + set(${output_optimized} "${optimized}" PARENT_SCOPE) +endfunction() + +foreach(config Debug Release RelWithDebInfo MinSizeRel) + string(TOUPPER "${config}" config_upper) + fltx_tests_build_configuration_identity( + "${config}" + "FLTX_TESTS_FLAGS_HASH_${config_upper}" + "FLTX_TESTS_OPTIMIZED_${config_upper}" + ) +endforeach() + +function(fltx_tests_add_build_identity target) + string(CONCAT flags_hash + "$,${FLTX_TESTS_FLAGS_HASH_RELEASE}," + "$,${FLTX_TESTS_FLAGS_HASH_RELWITHDEBINFO}," + "$,${FLTX_TESTS_FLAGS_HASH_MINSIZEREL}," + "${FLTX_TESTS_FLAGS_HASH_DEBUG}>>>" + ) + string(CONCAT optimized + "$,${FLTX_TESTS_OPTIMIZED_RELEASE}," + "$,${FLTX_TESTS_OPTIMIZED_RELWITHDEBINFO}," + "$,${FLTX_TESTS_OPTIMIZED_MINSIZEREL}," + "${FLTX_TESTS_OPTIMIZED_DEBUG}>>>" + ) + target_compile_definitions(${target} PRIVATE + "FLTX_TESTS_COMPILER_ID=\"${CMAKE_CXX_COMPILER_ID}\"" + "FLTX_TESTS_COMPILER_VERSION=\"${CMAKE_CXX_COMPILER_VERSION}\"" + "FLTX_TESTS_COMPILER_FRONTEND_VARIANT=\"${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}\"" + "FLTX_TESTS_BUILD_CONFIG=\"$\"" + "FLTX_TESTS_SYSTEM_NAME=\"${CMAKE_SYSTEM_NAME}\"" + "FLTX_TESTS_SYSTEM_PROCESSOR=\"${CMAKE_SYSTEM_PROCESSOR}\"" + "FLTX_TESTS_BUILD_FLAGS_HASH=\"${flags_hash}\"" + "FLTX_TESTS_BUILD_OPTIMIZED=${optimized}" + ) + if(FLTX_VALIDATION_EXPECTED_ARCHITECTURE STREQUAL "x86_64") + target_compile_definitions(${target} PRIVATE FLTX_TESTS_EXPECT_X86_64=1) + elseif(FLTX_VALIDATION_EXPECTED_ARCHITECTURE STREQUAL "arm64") + target_compile_definitions(${target} PRIVATE FLTX_TESTS_EXPECT_ARM64=1) + elseif(FLTX_VALIDATION_EXPECTED_ARCHITECTURE STREQUAL "wasm32") + target_compile_definitions(${target} PRIVATE FLTX_TESTS_EXPECT_WASM32=1) + endif() +endfunction() + +function(fltx_tests_prepare_target target) + target_compile_features(${target} PRIVATE cxx_std_20) + fltx_tests_add_build_identity(${target}) + + if(MSVC) + target_compile_options(${target} PRIVATE /bigobj) + elseif(WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options(${target} PRIVATE -Wa,-mbig-obj) + endif() + + fltx_configure_public_header_contract(${target} PRIVATE) + fltx_apply_private_wasm_simd_options(${target}) + fltx_enable_msvc_parallel_compile(${target}) +endfunction() + +function(fltx_tests_configure_consumer_mode target mode) + string(TOUPPER "${mode}" normalized_mode) + if(normalized_mode STREQUAL "ON") + set(expected_fast_math 1) + elseif(normalized_mode STREQUAL "OFF") + set(expected_fast_math 0) + else() + message(FATAL_ERROR + "Invalid validation consumer fast-math mode '${mode}'." + ) + endif() + + fltx_configure_consumer_fast_math(${target} MODE "${normalized_mode}") + target_compile_definitions(${target} PRIVATE + "FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH=${expected_fast_math}" + ) +endfunction() + +function(fltx_tests_prepare_test target label library) + target_link_libraries(${target} PRIVATE ${library} Catch2::Catch2) + target_include_directories(${target} PRIVATE "${FLTX_TESTS_SUPPORT_DIR}") + target_compile_definitions(${target} PRIVATE "FLTX_TESTS_NAME=\"${label}\"") + fltx_tests_prepare_target(${target}) + + if(EMSCRIPTEN) + # Catch2 must be able to observe public APIs which report errors by + # throwing. Emscripten disables exception catching unless the final + # application explicitly opts in. + target_compile_options(${target} PRIVATE -fexceptions) + target_link_options(${target} PRIVATE -fexceptions) + endif() + + if(BUILD_TESTING) + if(EMSCRIPTEN) + add_test(NAME ${target} COMMAND ${target}) + set_tests_properties(${target} PROPERTIES + LABELS "fltx;${label}" + ) + else() + catch_discover_tests( + ${target} + TEST_PREFIX "${target}::" + # catch_discover_tests forwards PROPERTIES as a list. A + # semicolon-separated label value is therefore emitted as + # separate property arguments; keep the suite label singular + # so `ctest -L` reliably selects these discovered cases. + PROPERTIES LABELS "${label}" + DISCOVERY_MODE POST_BUILD + ) + endif() + endif() +endfunction() + +function(fltx_tests_prepare_runner target) + set(library fltx::fltx) + if(ARGC GREATER 1) + set(library "${ARGV1}") + endif() + + target_link_libraries(${target} PRIVATE ${library}) + fltx_tests_prepare_target(${target}) + + if(EMSCRIPTEN) + # Boost's libc++ integration currently uses deprecated allocator + # members under modern standard modes. Keep that third-party noise out + # of metrics builds without weakening warnings for the library itself. + target_compile_options(${target} PRIVATE + -fexceptions + -Wno-deprecated-declarations + ) + target_link_options(${target} PRIVATE + -fexceptions + -sNODERAWFS=1 + -sALLOW_MEMORY_GROWTH=1 + -sINITIAL_MEMORY=268435456 + -sMAXIMUM_MEMORY=1073741824 + ) + endif() +endfunction() diff --git a/cmake/validation/fltxValidationDependencies.cmake b/cmake/validation/fltxValidationDependencies.cmake new file mode 100644 index 0000000..43d1ef0 --- /dev/null +++ b/cmake/validation/fltxValidationDependencies.cmake @@ -0,0 +1,90 @@ +# Validation-only numerical oracles and comparison libraries. + +find_path(FLTX_TESTS_MPFR_INCLUDE_DIR NAMES mpfr.h REQUIRED) +find_library(FLTX_TESTS_MPFR_LIBRARY NAMES mpfr REQUIRED) +find_path(FLTX_TESTS_GMP_INCLUDE_DIR NAMES gmp.h REQUIRED) +find_library(FLTX_TESTS_GMP_LIBRARY NAMES gmp REQUIRED) + +option(FLTX_METRICS_EXTERNAL_COMPARISONS + "Build external implementations used only by metrics comparisons." + ON +) + +option(FLTX_METRICS_TLFLOAT + "Build the vendored TLFloat dependency for metrics comparisons." + ON +) + +set(FLTX_METRICS_TLFLOAT_CONTRACT_TARGET) +if(FLTX_METRICS_EXTERNAL_COMPARISONS AND FLTX_METRICS_TLFLOAT) + set(FLTX_METRICS_TLFLOAT_SOURCE_DIR + "${FLTX_VALIDATION_SOURCE_DIR}/extern/tlfloat" + ) + set(FLTX_METRICS_TLFLOAT_BINARY_DIR + "${FLTX_VALIDATION_BINARY_DIR}/extern/tlfloat" + ) + + if(NOT EXISTS "${FLTX_METRICS_TLFLOAT_SOURCE_DIR}/CMakeLists.txt") + message(FATAL_ERROR + "FLTX_METRICS_TLFLOAT is ON, but validation/extern/tlfloat is unavailable." + ) + endif() + + # TLFloat's standalone project uses intentionally broad option names. + # Keep them in this function scope so they cannot become fltx options or + # alter the parent build. Only its static library is needed here. + function(fltx_tests_add_tlfloat) + set(BUILD_LIBS ON) + set(BUILD_TESTS OFF) + set(BUILD_UTILS OFF) + set(BUILD_BENCH OFF) + set(BUILD_SHARED_LIBS OFF) + set(ENABLE_DOXYGEN OFF) + set(ENABLE_COVERAGE OFF) + set(BUILD_EXHAUSTIVE_TESTING OFF) + set(ENABLE_EXHAUSTIVE_TESTING OFF) + add_subdirectory( + "${FLTX_METRICS_TLFLOAT_SOURCE_DIR}" + "${FLTX_METRICS_TLFLOAT_BINARY_DIR}" + EXCLUDE_FROM_ALL + ) + endfunction() + fltx_tests_add_tlfloat() + + set_target_properties(tlfloat PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY "${FLTX_METRICS_TLFLOAT_BINARY_DIR}/lib" + LIBRARY_OUTPUT_DIRECTORY "${FLTX_METRICS_TLFLOAT_BINARY_DIR}/lib" + RUNTIME_OUTPUT_DIRECTORY "${FLTX_METRICS_TLFLOAT_BINARY_DIR}/bin" + ) + set_target_properties(tlfloat_inline PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY "${FLTX_METRICS_TLFLOAT_BINARY_DIR}/lib" + ) + + add_library(fltx_tlfloat_dependency INTERFACE) + target_link_libraries(fltx_tlfloat_dependency INTERFACE tlfloat) + target_include_directories(fltx_tlfloat_dependency INTERFACE + "${FLTX_METRICS_TLFLOAT_SOURCE_DIR}/src/include" + "${FLTX_METRICS_TLFLOAT_BINARY_DIR}/include" + ) + add_library(fltx::test_tlfloat ALIAS fltx_tlfloat_dependency) + + add_executable(fltx_tlfloat_smoke + "${FLTX_VALIDATION_SOURCE_DIR}/support/tlfloat_smoke.cpp" + ) + target_link_libraries(fltx_tlfloat_smoke PRIVATE + fltx::test_tlfloat + ) + target_compile_features(fltx_tlfloat_smoke PRIVATE cxx_std_20) + set(FLTX_METRICS_TLFLOAT_CONTRACT_TARGET fltx_tlfloat_smoke) + + if(BUILD_TESTING) + add_test(NAME fltx.tlfloat.link COMMAND fltx_tlfloat_smoke) + set_tests_properties(fltx.tlfloat.link PROPERTIES + LABELS "fltx;metrics;tlfloat" + ) + endif() + + message(STATUS + "fltx metrics: TLFloat dependency enabled from validation/extern/tlfloat." + ) +endif() diff --git a/cmake/validation/fltxValidationPackage.cmake b/cmake/validation/fltxValidationPackage.cmake new file mode 100644 index 0000000..98bfeb9 --- /dev/null +++ b/cmake/validation/fltxValidationPackage.cmake @@ -0,0 +1,93 @@ +# In-tree and installed-package consumer validation. + +# This quick in-tree executable is useful while editing the consumer. The release +# target below runs the authoritative installed find_package fixture. +add_executable(fltx_package_smoke + "${FLTX_VALIDATION_SOURCE_DIR}/tests/package/consumer.cpp" +) +target_link_libraries(fltx_package_smoke PRIVATE fltx::fltx) +target_compile_features(fltx_package_smoke PRIVATE cxx_std_20) +fltx_tests_add_build_identity(fltx_package_smoke) + +if(BUILD_TESTING) + add_test(NAME fltx.package.in_tree COMMAND fltx_package_smoke) + set_tests_properties(fltx.package.in_tree PROPERTIES LABELS "fltx;package") +endif() + +set(FLTX_TESTS_PACKAGE_INSTALL_DIR + "${FLTX_VALIDATION_BINARY_DIR}/package_install" +) +string(MAKE_C_IDENTIFIER + "${CMAKE_SYSTEM_NAME}_${CMAKE_CXX_COMPILER_ID}" + FLTX_TESTS_PACKAGE_BUILD_ID +) +set(FLTX_TESTS_PACKAGE_BUILD_DIR + "${FLTX_VALIDATION_BINARY_DIR}/package_build_${FLTX_TESTS_PACKAGE_BUILD_ID}" +) +set(FLTX_TESTS_PACKAGE_GENERATOR_ARGS -G "${CMAKE_GENERATOR}") +if(CMAKE_GENERATOR_PLATFORM) + list(APPEND FLTX_TESTS_PACKAGE_GENERATOR_ARGS -A "${CMAKE_GENERATOR_PLATFORM}") +endif() +if(CMAKE_GENERATOR_TOOLSET) + list(APPEND FLTX_TESTS_PACKAGE_GENERATOR_ARGS -T "${CMAKE_GENERATOR_TOOLSET}") +endif() + +set(FLTX_TESTS_PACKAGE_TOOLCHAIN_ARGS) +if(EMSCRIPTEN) + if(NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE) + message(FATAL_ERROR + "fltx package tests require the Emscripten chainload toolchain path." + ) + endif() + list(APPEND FLTX_TESTS_PACKAGE_TOOLCHAIN_ARGS + "-DCMAKE_TOOLCHAIN_FILE=${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}" + "-DCMAKE_CROSSCOMPILING_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" + ) +else() + list(APPEND FLTX_TESTS_PACKAGE_TOOLCHAIN_ARGS -U CMAKE_TOOLCHAIN_FILE) +endif() +if(NOT EMSCRIPTEN AND NOT CMAKE_GENERATOR MATCHES "Visual Studio|Xcode") + list(APPEND FLTX_TESTS_PACKAGE_TOOLCHAIN_ARGS + "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}" + ) + if(CMAKE_MAKE_PROGRAM) + list(APPEND FLTX_TESTS_PACKAGE_TOOLCHAIN_ARGS + "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}" + ) + endif() +endif() +set(FLTX_TESTS_PACKAGE_BUILD_TYPE_ARG) +if(NOT CMAKE_CONFIGURATION_TYPES) + set(FLTX_TESTS_PACKAGE_BUILD_TYPE_ARG "-DCMAKE_BUILD_TYPE=$") +endif() + +add_custom_target(fltx_package_tests + # These directories belong only to this fixture. Recreate both on every + # invocation so removed headers, targets, and compile definitions cannot + # survive in the install tree or nested CMake cache. + COMMAND "${CMAKE_COMMAND}" -E rm -rf + "${FLTX_TESTS_PACKAGE_INSTALL_DIR}" + "${FLTX_TESTS_PACKAGE_BUILD_DIR}" + COMMAND "${CMAKE_COMMAND}" --install "${CMAKE_BINARY_DIR}" + --config "$" + --prefix "${FLTX_TESTS_PACKAGE_INSTALL_DIR}" + COMMAND "${CMAKE_COMMAND}" + -S "${FLTX_VALIDATION_SOURCE_DIR}/tests/package" + -B "${FLTX_TESTS_PACKAGE_BUILD_DIR}" + ${FLTX_TESTS_PACKAGE_GENERATOR_ARGS} + ${FLTX_TESTS_PACKAGE_TOOLCHAIN_ARGS} + "-DCMAKE_PREFIX_PATH=${FLTX_TESTS_PACKAGE_INSTALL_DIR}" + "-Dfltx_DIR=${FLTX_TESTS_PACKAGE_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/fltx" + ${FLTX_TESTS_PACKAGE_BUILD_TYPE_ARG} + -DBUILD_TESTING=ON + COMMAND "${CMAKE_COMMAND}" --build "${FLTX_TESTS_PACKAGE_BUILD_DIR}" + --config "$" + COMMAND "${CMAKE_CTEST_COMMAND}" + --test-dir "${FLTX_TESTS_PACKAGE_BUILD_DIR}" + --build-config "$" + --output-on-failure + DEPENDS fltx fltx_package_smoke + USES_TERMINAL + COMMENT "Testing installed fltx package consumers" + VERBATIM +) diff --git a/cmake/validation/fltxValidationRunners.cmake b/cmake/validation/fltxValidationRunners.cmake new file mode 100644 index 0000000..e6c563b --- /dev/null +++ b/cmake/validation/fltxValidationRunners.cmake @@ -0,0 +1,406 @@ +# Accuracy, benchmark, source-identity, and smoke-runner targets. + +set(FLTX_ACCURACY_SOURCE_FILE_PATHS + "${FLTX_VALIDATION_SOURCE_DIR}/accuracy/main.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/accuracy/f128.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/accuracy/f256.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/accuracy/native.cpp" +) + +function(fltx_tests_add_accuracy_runner + target library simulated_consteval consumer_fast_math) + add_executable(${target} ${FLTX_ACCURACY_SOURCE_FILE_PATHS}) + fltx_tests_prepare_runner(${target} ${library}) + fltx_tests_configure_consumer_mode(${target} "${consumer_fast_math}") + target_compile_definitions(${target} PRIVATE + "FLTX_ACCURACY_EXPECTS_SIMULATED_CONSTEVAL=${simulated_consteval}" + ) +endfunction() + +fltx_tests_add_accuracy_runner(fltx_accuracy fltx::fltx 0 OFF) +fltx_tests_add_accuracy_runner(fltx_ci_accuracy fltx::fltx 0 OFF) +fltx_tests_add_accuracy_runner( + fltx_constexpr_accuracy + fltx_constexpr_accuracy_lib + 1 + OFF +) +fltx_tests_add_accuracy_runner(fltx_accuracy_fastmath fltx::fltx 0 ON) +fltx_tests_add_accuracy_runner( + fltx_constexpr_accuracy_fastmath + fltx_constexpr_accuracy_lib + 1 + ON +) + +# Match genuine constant evaluation's uncontracted arithmetic in the strict +# fixed-simulation consumer. The fast-math simulation remains diagnostic and +# deliberately retains its consumer compiler policy. +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options(fltx_constexpr_accuracy PRIVATE + -ffp-contract=off + ) +endif() + +set(FLTX_ACCURACY_TARGETS + fltx_accuracy + fltx_ci_accuracy + fltx_constexpr_accuracy + fltx_accuracy_fastmath + fltx_constexpr_accuracy_fastmath +) +set(FLTX_RUNTIME_ACCURACY_TARGETS + fltx_accuracy + fltx_ci_accuracy + fltx_accuracy_fastmath +) +set(FLTX_CONSTEXPR_ACCURACY_TARGETS + fltx_constexpr_accuracy + fltx_constexpr_accuracy_fastmath +) +foreach(target IN LISTS FLTX_ACCURACY_TARGETS) + target_include_directories(${target} PRIVATE + "${FLTX_TESTS_MPFR_INCLUDE_DIR}" + "${FLTX_TESTS_GMP_INCLUDE_DIR}" + ) + target_link_libraries(${target} PRIVATE + "${FLTX_TESTS_MPFR_LIBRARY}" + "${FLTX_TESTS_GMP_LIBRARY}" + ) +endforeach() + +if(FLTX_METRICS_EXTERNAL_COMPARISONS) + target_compile_definitions(fltx_accuracy PRIVATE + FLTX_TESTS_ENABLE_EXTERNAL_COMPARISONS=1 + ) +else() + target_compile_definitions(fltx_accuracy PRIVATE + FLTX_TESTS_ENABLE_EXTERNAL_COMPARISONS=0 + ) +endif() +foreach(target + fltx_ci_accuracy + fltx_constexpr_accuracy + fltx_accuracy_fastmath + fltx_constexpr_accuracy_fastmath) + target_compile_definitions(${target} PRIVATE + FLTX_TESTS_ENABLE_EXTERNAL_COMPARISONS=0 + ) +endforeach() + +if(FLTX_METRICS_EXTERNAL_COMPARISONS AND FLTX_METRICS_TLFLOAT) + target_link_libraries(fltx_accuracy PRIVATE fltx::test_tlfloat) + target_compile_definitions(fltx_accuracy PRIVATE FLTX_METRICS_HAS_TLFLOAT=1) +else() + target_compile_definitions(fltx_accuracy PRIVATE FLTX_METRICS_HAS_TLFLOAT=0) +endif() +foreach(target + fltx_ci_accuracy + fltx_accuracy_fastmath + fltx_constexpr_accuracy + fltx_constexpr_accuracy_fastmath) + target_compile_definitions(${target} PRIVATE FLTX_METRICS_HAS_TLFLOAT=0) +endforeach() + +set(FLTX_BENCHMARK_SOURCE_FILE_PATHS + "${FLTX_VALIDATION_SOURCE_DIR}/benchmarks/runtime/main.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/benchmarks/runtime/operations.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/benchmarks/runtime/workloads.cpp" +) + +function(fltx_tests_add_benchmark_runner target consumer_fast_math) + add_executable(${target} ${FLTX_BENCHMARK_SOURCE_FILE_PATHS}) + fltx_tests_prepare_runner(${target}) + fltx_tests_configure_consumer_mode(${target} "${consumer_fast_math}") + target_include_directories(${target} PRIVATE + "${FLTX_TESTS_MPFR_INCLUDE_DIR}" + "${FLTX_TESTS_GMP_INCLUDE_DIR}" + ) + target_link_libraries(${target} PRIVATE + "${FLTX_TESTS_MPFR_LIBRARY}" + "${FLTX_TESTS_GMP_LIBRARY}" + ) + if(FLTX_METRICS_EXTERNAL_COMPARISONS AND + FLTX_METRICS_TLFLOAT AND NOT consumer_fast_math) + target_link_libraries(${target} PRIVATE fltx::test_tlfloat) + target_compile_definitions(${target} PRIVATE FLTX_METRICS_HAS_TLFLOAT=1) + else() + target_compile_definitions(${target} PRIVATE FLTX_METRICS_HAS_TLFLOAT=0) + endif() +endfunction() + +fltx_tests_add_benchmark_runner(fltx_benchmark OFF) +fltx_tests_add_benchmark_runner(fltx_benchmark_fastmath ON) + +if(FLTX_METRICS_EXTERNAL_COMPARISONS) + target_compile_definitions(fltx_benchmark PRIVATE + FLTX_TESTS_ENABLE_EXTERNAL_COMPARISONS=1 + ) +else() + target_compile_definitions(fltx_benchmark PRIVATE + FLTX_TESTS_ENABLE_EXTERNAL_COMPARISONS=0 + ) +endif() +target_compile_definitions(fltx_benchmark_fastmath PRIVATE + FLTX_TESTS_ENABLE_EXTERNAL_COMPARISONS=0 +) + +set(FLTX_BENCHMARK_TARGETS fltx_benchmark fltx_benchmark_fastmath) + +set(FLTX_METRICS_BUNDLED_QDPP_INCLUDE_DIR + "${FLTX_VALIDATION_SOURCE_DIR}/extern/qdpp/include" +) +option(FLTX_METRICS_QDPP + "Build qdpp-backed accuracy and benchmark comparisons." + ON +) +set(FLTX_METRICS_QDPP_INCLUDE_DIR + "${FLTX_METRICS_BUNDLED_QDPP_INCLUDE_DIR}" + CACHE PATH "qdpp include directory used by fltx metrics." +) +if(FLTX_METRICS_QDPP_INCLUDE_DIR STREQUAL "") + set(FLTX_METRICS_QDPP_INCLUDE_DIR + "${FLTX_METRICS_BUNDLED_QDPP_INCLUDE_DIR}" + CACHE PATH "qdpp include directory used by fltx metrics." + FORCE + ) +endif() + +set(FLTX_METRICS_QDPP_CONTRACT_TARGET) +if(FLTX_METRICS_EXTERNAL_COMPARISONS AND FLTX_METRICS_QDPP) + if(EXISTS "${FLTX_METRICS_QDPP_INCLUDE_DIR}/qd/dd.h" AND + EXISTS "${FLTX_METRICS_QDPP_INCLUDE_DIR}/qd/qd_real.h") + foreach(target fltx_accuracy fltx_benchmark) + target_include_directories(${target} PRIVATE + "${FLTX_METRICS_QDPP_INCLUDE_DIR}" + ) + target_compile_definitions(${target} PRIVATE + FLTX_METRICS_HAS_QDPP=1 + FLTX_METRICS_QDPP_ENABLED=1 + ) + endforeach() + + # Consumer-fast-math reports intentionally contain FLTX rows only. + # Do not parse qdpp headers in those translation units: qdpp rejects + # aggressive fast-math at compile time even when its rows are disabled. + foreach(target fltx_accuracy_fastmath fltx_benchmark_fastmath) + target_compile_definitions(${target} PRIVATE + FLTX_METRICS_HAS_QDPP=0 + FLTX_METRICS_QDPP_ENABLED=0 + ) + endforeach() + + add_executable(fltx_qdpp_smoke + "${FLTX_VALIDATION_SOURCE_DIR}/support/qdpp_smoke.cpp" + ) + target_include_directories(fltx_qdpp_smoke PRIVATE + "${FLTX_METRICS_QDPP_INCLUDE_DIR}" + ) + target_compile_features(fltx_qdpp_smoke PRIVATE cxx_std_20) + set(FLTX_METRICS_QDPP_CONTRACT_TARGET fltx_qdpp_smoke) + + if(BUILD_TESTING) + add_test(NAME fltx.qdpp.smoke COMMAND fltx_qdpp_smoke) + set_tests_properties(fltx.qdpp.smoke PROPERTIES + LABELS "fltx;metrics;qdpp" + ) + endif() + + message(STATUS + "fltx metrics: qdpp dependency enabled from " + "${FLTX_METRICS_QDPP_INCLUDE_DIR}." + ) + else() + message(FATAL_ERROR + "FLTX_METRICS_QDPP is ON, but FLTX_METRICS_QDPP_INCLUDE_DIR does not " + "contain qd/dd.h and qd/qd_real.h." + ) + endif() +else() + foreach(target IN LISTS FLTX_RUNTIME_ACCURACY_TARGETS FLTX_BENCHMARK_TARGETS) + target_compile_definitions(${target} PRIVATE + FLTX_METRICS_HAS_QDPP=0 + FLTX_METRICS_QDPP_ENABLED=0 + ) + endforeach() + if(FLTX_METRICS_EXTERNAL_COMPARISONS) + message(STATUS + "fltx metrics: qdpp explicitly disabled; Boost comparisons remain enabled." + ) + else() + message(STATUS + "fltx metrics: external comparisons disabled for this build." + ) + endif() +endif() +foreach(target IN LISTS FLTX_CONSTEXPR_ACCURACY_TARGETS) + target_compile_definitions(${target} PRIVATE + FLTX_METRICS_HAS_QDPP=0 + FLTX_METRICS_QDPP_ENABLED=0 + ) +endforeach() +target_compile_definitions(fltx_ci_accuracy PRIVATE + FLTX_METRICS_HAS_QDPP=0 + FLTX_METRICS_QDPP_ENABLED=0 +) + +# Recompute this header on every metrics build. The Python helper only touches +# it when the source identity changes, so normal incremental builds stay cheap +# while a stale runner cannot masquerade as a newer checkout. +set(FLTX_METRICS_SOURCE_IDENTITY_DIR + "${FLTX_VALIDATION_BINARY_DIR}/generated/source_identity" +) +set(FLTX_METRICS_SOURCE_IDENTITY_HEADER + "${FLTX_METRICS_SOURCE_IDENTITY_DIR}/fltx_source_identity.generated.hpp" +) +add_custom_target(fltx_source_identity + COMMAND "${Python3_EXECUTABLE}" + "${PROJECT_SOURCE_DIR}/validation/metrics/_internal/source_fingerprint.py" + --root "${PROJECT_SOURCE_DIR}" + --output "${FLTX_METRICS_SOURCE_IDENTITY_HEADER}" + BYPRODUCTS "${FLTX_METRICS_SOURCE_IDENTITY_HEADER}" + COMMENT "Refreshing fltx source fingerprint" + VERBATIM +) +foreach(target IN LISTS FLTX_ACCURACY_TARGETS FLTX_BENCHMARK_TARGETS) + add_dependencies(${target} fltx_source_identity) + target_include_directories(${target} PRIVATE + "${FLTX_METRICS_SOURCE_IDENTITY_DIR}" + ) + target_compile_definitions(${target} PRIVATE + FLTX_METRICS_EMBED_SOURCE_FINGERPRINT=1 + ) +endforeach() + +function(fltx_tests_add_native_accuracy_target + target runner output_name label consumer_mode) + add_custom_target(${target} + COMMAND "${Python3_EXECUTABLE}" + "${PROJECT_SOURCE_DIR}/validation/metrics/_internal/run_native_accuracy.py" + --accuracy "$" + --output-root "${FLTX_VALIDATION_BINARY_DIR}/${output_name}" + --sample-mode full + --consumer-mode "${consumer_mode}" + DEPENDS ${runner} + USES_TERMINAL + COMMENT "Running complete ${label} f32/f64 accuracy domains" + VERBATIM + ) +endfunction() + +fltx_tests_add_native_accuracy_target( + fltx_native_accuracy_full + fltx_accuracy + native_accuracy + strict-consumer + strict +) +fltx_tests_add_native_accuracy_target( + fltx_native_accuracy_fastmath_full + fltx_accuracy_fastmath + native_accuracy_fastmath + fast-math-consumer + fastmath +) + +if(BUILD_TESTING) + function(fltx_tests_add_accuracy_smoke + target test_name output_name precision labels) + set(output + "${FLTX_VALIDATION_BINARY_DIR}/smoke/${output_name}_${precision}.csv" + ) + add_test( + NAME "${test_name}.${precision}.smoke" + COMMAND ${target} + --precision "${precision}" + --output "${output}" + --run-id "ctest-smoke" + --source-revision "ctest" + --sample-mode "smoke" + ${ARGN} + ) + set_tests_properties("${test_name}.${precision}.smoke" PROPERTIES + LABELS "${labels}" + ) + endfunction() + + foreach(precision f32 f64 f128 f256) + set(FLTX_SIMULATED_FASTMATH_SMOKE_POLICY) + if(precision STREQUAL "f32" OR precision STREQUAL "f64") + set(FLTX_SIMULATED_FASTMATH_SMOKE_POLICY --advisory) + endif() + + fltx_tests_add_accuracy_smoke( + fltx_accuracy + fltx.accuracy + accuracy + "${precision}" + "fltx;accuracy;smoke" + ) + fltx_tests_add_accuracy_smoke( + fltx_accuracy_fastmath + fltx.accuracy.fastmath + accuracy_fastmath + "${precision}" + "fltx;accuracy;fastmath;smoke" + ) + fltx_tests_add_accuracy_smoke( + fltx_constexpr_accuracy + fltx.constexpr_accuracy + constexpr_accuracy + "${precision}" + "fltx;constexpr;accuracy;smoke" + ) + fltx_tests_add_accuracy_smoke( + fltx_constexpr_accuracy_fastmath + fltx.constexpr_accuracy.fastmath + constexpr_accuracy_fastmath + "${precision}" + "fltx;constexpr;accuracy;fastmath;smoke" + ${FLTX_SIMULATED_FASTMATH_SMOKE_POLICY} + ) + endforeach() + + function(fltx_tests_add_benchmark_smoke + target test_name output_name precision labels) + set(output + "${FLTX_VALIDATION_BINARY_DIR}/smoke/${output_name}_${precision}.csv" + ) + add_test( + NAME "${test_name}.${precision}.smoke" + COMMAND ${target} + --precision "${precision}" + --output "${output}" + --run-id "ctest-smoke" + --source-revision "ctest" + --sample-mode "smoke" + ) + set_tests_properties("${test_name}.${precision}.smoke" PROPERTIES + LABELS "${labels}" + ) + endfunction() + + foreach(precision f128 f256) + fltx_tests_add_benchmark_smoke( + fltx_benchmark + fltx.benchmark + benchmark + "${precision}" + "fltx;benchmark;smoke" + ) + fltx_tests_add_benchmark_smoke( + fltx_benchmark_fastmath + fltx.benchmark.fastmath + benchmark_fastmath + "${precision}" + "fltx;benchmark;fastmath;smoke" + ) + endforeach() + + add_test( + NAME fltx.metrics.tools + COMMAND "${Python3_EXECUTABLE}" + "${PROJECT_SOURCE_DIR}/validation/metrics/_internal/test_tools.py" + ) + set_tests_properties(fltx.metrics.tools PROPERTIES LABELS "fltx;metrics") +endif() diff --git a/cmake/validation/fltxValidationTests.cmake b/cmake/validation/fltxValidationTests.cmake new file mode 100644 index 0000000..afaa6af --- /dev/null +++ b/cmake/validation/fltxValidationTests.cmake @@ -0,0 +1,128 @@ +# Contract, constexpr, and compile-surface validation targets. + +set(FLTX_CONTRACT_TEST_SOURCE_FILE_PATHS + "${FLTX_VALIDATION_SOURCE_DIR}/support/catch_main.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/tests/contracts/core.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/tests/contracts/math.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/tests/contracts/io.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/tests/contracts/random.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/tests/contracts/expressions.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/tests/contracts/dispatch.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/tests/contracts/edge_cases.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/tests/contracts/overloads.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/tests/contracts/overload_matrix.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/tests/contracts/approx_comparison.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/tests/contracts/decimal.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/tests/contracts/benchmark_policy.cpp" +) + +function(fltx_tests_add_contract_runner target label consumer_fast_math) + add_executable(${target} ${FLTX_CONTRACT_TEST_SOURCE_FILE_PATHS}) + fltx_tests_prepare_test(${target} "${label}" fltx::fltx) + fltx_tests_configure_consumer_mode(${target} "${consumer_fast_math}") +endfunction() + +fltx_tests_add_contract_runner(fltx_contract_tests contracts OFF) +fltx_tests_add_contract_runner( + fltx_contract_tests_fastmath + contracts-fastmath + ON +) + +# Compile an isolated fixed-consteval library so the complete accuracy runner can +# exercise constexpr algorithms at runtime without changing normal applications. +add_library(fltx_constexpr_accuracy_lib STATIC ${FLTX_LIBRARY_SOURCE_FILE_PATHS}) +target_include_directories(fltx_constexpr_accuracy_lib PUBLIC + "${PROJECT_SOURCE_DIR}/include" +) +target_compile_definitions(fltx_constexpr_accuracy_lib PUBLIC + FLTX_SIMULATE_FIXED_CONSTEVAL_MODE +) +fltx_configure_library_target(fltx_constexpr_accuracy_lib) +fltx_enable_msvc_parallel_compile(fltx_constexpr_accuracy_lib) + +# GCC defaults to permitting contraction even in otherwise strict translation +# units, and its STDC FP_CONTRACT pragma does not reliably protect the inline +# error-free transforms on AArch64. Fixed simulation must retain the separate +# rounding steps that genuine constant evaluation observes. +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options(fltx_constexpr_accuracy_lib PRIVATE + -ffp-contract=off + ) +endif() + +set(FLTX_CONSTEXPR_TEST_SOURCE_FILE_PATHS + "${FLTX_VALIDATION_SOURCE_DIR}/support/catch_main.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/tests/constexpr/core.cpp" + "${FLTX_VALIDATION_SOURCE_DIR}/tests/constexpr/accuracy.cpp" +) + +# The genuine-constant-evaluation corpus stores compiler-evaluated results and +# checks them against the same high-precision oracle used by the accuracy runner. +function(fltx_tests_add_constexpr_runner target label consumer_fast_math) + add_executable(${target} ${FLTX_CONSTEXPR_TEST_SOURCE_FILE_PATHS}) + fltx_tests_prepare_test(${target} "${label}" fltx::fltx) + fltx_tests_configure_consumer_mode(${target} "${consumer_fast_math}") + + target_include_directories(${target} PRIVATE + "${FLTX_TESTS_MPFR_INCLUDE_DIR}" + "${FLTX_TESTS_GMP_INCLUDE_DIR}" + ) + target_link_libraries(${target} PRIVATE + "${FLTX_TESTS_MPFR_LIBRARY}" + "${FLTX_TESTS_GMP_LIBRARY}" + ) +endfunction() + +fltx_tests_add_constexpr_runner(fltx_constexpr_tests constexpr OFF) +fltx_tests_add_constexpr_runner( + fltx_constexpr_tests_fastmath + constexpr-fastmath + ON +) + +# Every public header must compile by itself. Sources are generated in the build +# tree so the source tree stays small and the probes always follow the headers. +file(GLOB FLTX_TESTS_PUBLIC_HEADERS CONFIGURE_DEPENDS + RELATIVE "${PROJECT_SOURCE_DIR}/include" + "${PROJECT_SOURCE_DIR}/include/*.h" + "${PROJECT_SOURCE_DIR}/include/fltx/*.h" +) + +set(FLTX_TESTS_HEADER_PROBE_SOURCES) +foreach(header IN LISTS FLTX_TESTS_PUBLIC_HEADERS) + string(MAKE_C_IDENTIFIER "${header}" probe_name) + set(source "${FLTX_VALIDATION_BINARY_DIR}/header_probes/${probe_name}.cpp") + file(GENERATE OUTPUT "${source}" CONTENT "#include <${header}>\n") + list(APPEND FLTX_TESTS_HEADER_PROBE_SOURCES "${source}") +endforeach() + +add_library(fltx_header_contract OBJECT EXCLUDE_FROM_ALL + ${FLTX_TESTS_HEADER_PROBE_SOURCES} +) +target_link_libraries(fltx_header_contract PRIVATE fltx::fltx) +target_compile_features(fltx_header_contract PRIVATE cxx_std_20) + +function(fltx_tests_add_cxx_standard_contract target standard) + add_library(${target} OBJECT EXCLUDE_FROM_ALL + "${FLTX_VALIDATION_SOURCE_DIR}/tests/standard/cxx_standard_contract.cpp" + ) + target_link_libraries(${target} PRIVATE fltx::fltx) + target_compile_definitions(${target} PRIVATE + "FLTX_CXX_STANDARD_CONTRACT=${standard}" + ) + set_target_properties(${target} PROPERTIES + CXX_STANDARD ${standard} + CXX_STANDARD_REQUIRED ON + CXX_EXTENSIONS OFF + ) + + if(MSVC) + target_compile_options(${target} PRIVATE /permissive- /Zc:__cplusplus) + else() + target_compile_options(${target} PRIVATE -pedantic-errors) + endif() +endfunction() + +fltx_tests_add_cxx_standard_contract(fltx_cxx20_contract 20) +fltx_tests_add_cxx_standard_contract(fltx_cxx23_contract 23) diff --git a/cmake/vcpkg-ports/gmp/portfile.cmake b/cmake/vcpkg-ports/gmp/portfile.cmake index 112d952..27ae05d 100644 --- a/cmake/vcpkg-ports/gmp/portfile.cmake +++ b/cmake/vcpkg-ports/gmp/portfile.cmake @@ -96,8 +96,8 @@ vcpkg_configure_make( AUTOCONFIG ADDITIONAL_MSYS_PACKAGES DIRECT_PACKAGES - "https://mirror.msys2.org/msys/x86_64/autoconf2.71-2.71-3-any.pkg.tar.zst" - dd312c428b2e19afd00899eb53ea4255794dea4c19d1d6dea2419cb6a54209ea2130d48abbc20af12196b9f628143436f736fbf889809c2c2291be0c69c0e306 + "https://mirror.msys2.org/msys/x86_64/autoconf2.71-2.71-4-any.pkg.tar.zst" + c93b791eb55893cbe7c425e764074837355fd165deb7b1775f652c8e25d9d1f0cdd4120ab710d56fb859b7df55c4f971eccda7c112448f60615bff8a2dc81166 OPTIONS ${OPTIONS} ${gmp_cxx_option} diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 0000000..8196450 --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,234 @@ +# fltx architecture + +This is a navigation map of stable ownership and dependency flow. It is not a +file inventory, API reference, or generated index. Read exact source before +changing behaviour. + +## Repository shape + +| Area | Responsibility | +|---|---| +| `include/fltx.h` | Complete public umbrella include | +| `include/fltx/*.h` | Public types, operations, and focused include surfaces | +| `include/fltx/detail/*.h` | Shared and precision-specific implementation mechanics | +| `src/*.cpp` | Compiled runtime boundaries and heavyweight implementations | +| `cmake/` | Library build policy, source ownership, packaging, and developer-target wiring | +| `validation/tests/` | Behavioural, overload, header, language-mode, and genuine-constexpr contracts | +| `validation/accuracy/` | Deterministic MPFR-backed numerical domains and runner registration | +| `validation/benchmarks/` | Runtime, compile-time, and linked-size measurement | +| `validation/support/` | Validation-only domains, oracles, comparison adapters, and shared runner support | +| `validation/_internal/` | Preset resolution, host-toolchain setup, and local CI-check orchestration | +| `validation/metrics/` | Metrics orchestration, provenance, publication, and report generation | +| `examples/` | First-party usage examples and API consumers | + +`vcpkg/` and `validation/extern/` are dependency trees, not first-party library +architecture. Generated metrics data and reports are evidence, not source +owners. Normal repository search excludes all of these through `.rgignore`. + +## Public include structure + +`include/fltx.h` composes the main surfaces: + +```text +fltx.h + core.h types, conversions, comparisons, classification, arithmetic + io.h limits, char conversion, strings, streams + math.h f32/f64/f128/f256 -shaped APIs + dispatch.h runtime-to-template dispatch and FloatType mappings + random.h engines, distributions, and array helpers + hash.h std::hash integration +``` + +The focused headers remain supported entry points. `f128.h` and `f256.h` +compose their respective type families; `f128_math.h`, `f256_math.h`, +`charconv.h`, and similar headers expose smaller surfaces when consumers do not +want the complete umbrella. + +The extended types have two public forms: + +- `f128_s` and `f256_s` are trivial storage forms containing two and four + `double` limbs respectively; +- `f128` and `f256` are scalar value forms built on those storage layouts; +- `f256` additionally participates in the bounded expression-fusion system in + `detail/f256_expressions.h`, while `f256_s` remains the eager storage form. + +`aliases.h` supplies the type names, `traits.h` owns concepts and promotion +traits, and the per-precision `*_type.h`, `*_limits.h`, `*_conversions.h`, +`*_comparison.h`, `*_classification.h`, and `*_arithmetic.h` headers build the +core numeric surface. + +## Library layers and execution paths + +### Header implementation layer + +Reusable constexpr-capable machinery lives under `include/fltx/detail`: + +- `common_fp.h`, `common_math.h`, `math_utils.h`, and `math_promotion.h` own + cross-precision floating-point mechanics and promotion; +- `common_decimal.h`, `common_io.h`, `native_float_decimal.h`, and + `native_float_io.h` own shared decimal and text conversion mechanics; +- `f128_*` and `f256_*` headers own expansion arithmetic, kernels, constants, + math implementations, conversions, random traits, and expression lowering; +- `simd.h`, `f256_simd_config.h`, and `build_info.h` own compiled/consumer SIMD + and FMA configuration boundaries. + +Internal namespaces reflect the layers: + +```text +bl::detail::_f128 / _f256 primitive expansion operations and kernels +bl::detail::_f128_impl / _f256_impl algorithm implementations +bl::detail::_f128_runtime / _f256_runtime compiled entry-point declarations +bl::detail::_f256_expr bounded f256 expression nodes and lowering +``` + +Public constexpr wrappers select the constant-evaluation implementation or a +compiled runtime entry point. Therefore changes to math, arithmetic, +conversion, or parsing commonly have two routes to inspect: + +```text +public wrapper + constant evaluation -> detail primitives / *_impl in headers + runtime -> detail::*_runtime declaration -> src/*.cpp -> *_impl +``` + +`config.h` centralizes compiler feature selection and the constant-evaluation +switch. `build_info.cpp` captures the compiled library configuration and +runtime hardware-FMA availability; `fma_x86.cpp` supplies separately compiled +x86 FMA backends when the build policy enables them. + +### Compiled runtime layer + +`cmake/fltxSources.cmake` is the source of truth for compiled library sources: + +| Sources | Ownership | +|---|---| +| `f128.cpp`, `f256.cpp` | Runtime conversions, hot arithmetic helpers, and f256 fused-expression bodies | +| `f128_math.cpp`, `f256_math.cpp` | Core roots, rounding, remainder, and decomposition entry points | +| `f128_transcendental.cpp`, `f256_transcendental.cpp` | Exponential, logarithmic, power, trigonometric, hyperbolic, and special-function entry points | +| `fltx_io.cpp` | Runtime string formatting and extended-type parsing entry points | +| `build_info.cpp` | Compiled configuration identity and runtime feature detection | +| `fma_x86.cpp` | Optional complete-operation x86 FMA backend | + +Heavy runtime work should remain behind these boundaries when header placement +would enlarge consumer translation units. Header code remains necessary where +constant evaluation or templates require the implementation to be visible. + +## Subsystem ownership + +| Subsystem | Public entry points | Detail/runtime owners | Primary validation owners | +|---|---|---|---| +| Types, storage, traits, limits | `core.h`, `f128.h`, `f256.h`, `traits.h`, `limits.h` | type/conversion/common-FP headers; `f128.cpp`, `f256.cpp`, `build_info.cpp` | `tests/contracts/core.cpp`, overload matrices, `tests/constexpr/core.cpp`, package tests | +| Arithmetic and f256 expressions | `f128_arithmetic.h`, `f256_arithmetic.h` | `detail/f128_arithmetic.h`, `detail/f256_arithmetic.h`, `detail/f256_expansion.h`, `detail/f256_expressions.h`, `f256.cpp` | core, expression, and edge-case contracts; accuracy runners; runtime operation benchmarks | +| Math and classification | `math.h`, per-type math/classification/numbers headers | common math/promotion plus per-precision basic, kernel, and transcendental headers; math/transcendental sources | `tests/contracts/math.cpp`, overload matrices, constexpr corpus, `accuracy/`, runtime benchmarks | +| Text and streams | `io.h`, `charconv.h`, `string.h`, `stream.h`, `format.h` | common/native/precision I/O and decimal headers; `fltx_io.cpp` | I/O contracts, constexpr corpus, parse/format accuracy rows, I/O benchmarks | +| Random facilities | `random.h` | header-only common logic plus `detail/f128_random.h` and `detail/f256_random.h` | random contracts, constexpr cases, selected runtime benchmarks | +| Dispatch | `dispatch.h`, `template_dispatch.h` | header-only mapping and dispatch-table mechanics | dispatch contracts | +| Standard integration | hash, limits, numbers, format specializations | corresponding focused public/detail headers | core and I/O contracts plus isolated-header probes | +| Build and package policy | top-level `CMakeLists.txt`, `CMakePresets.json` | `cmake/fltxBuildPolicy.cmake`, `cmake/fltxSources.cmake`, validation CMake modules | header/C++ standard contracts, in-tree and installed-package consumers | + +`validation/COVERAGE.md` is the detailed ownership ledger. It should be updated +when the implemented validation surface changes; this architecture map should +not duplicate its operation-by-operation inventory. + +## Validation flow + +The validation layers answer different questions: + +```text +contracts public behaviour, overloads, edge cases, I/O, random, dispatch +genuine constexpr compiler-evaluated behaviour +accuracy deterministic numerical comparison against MPFR +constexpr accuracy runtime execution of the fixed constexpr-algorithm route +benchmarks performance, compile-time, and linked-size evidence +package checks installed find_package consumer behaviour +``` + +CMake target construction is split across `cmake/validation/`: + +- `fltxValidationTests.cmake` owns contracts, genuine constexpr, isolated + public-header probes, and C++20/C++23 compile contracts; +- `fltxValidationRunners.cmake` owns accuracy, benchmark, source-identity, and + comparison smoke runners; +- `fltxValidationDependencies.cmake` owns validation-only comparison + dependencies; +- `fltxValidationPackage.cmake` owns in-tree and installed-package consumers; +- `fltxValidationCommon.cmake` owns shared target preparation and build + identity. + +The local CI-check entry points are intentionally separate from metrics +collection. Their accuracy runner emits and gates FLTX rows only; comparison +implementations and dependency smoke checks stay on metrics-owned targets: + +```text +run_preset_checks.py ------------------+-> _internal/check_pipeline.py +run_all_supported_checks.py -----------+ -> configure the selected preset + -> build fltx_ci_checks +``` + +Shared preset inheritance, host-matrix selection, and Visual Studio developer +environment setup live in `validation/_internal/preset_support.py` so checks +and metrics use one toolchain-resolution path. + +Read `validation/README.md` for current commands and runner semantics. Read +`validation/COVERAGE.md` before adding coverage so new work extends the +existing owner rather than creating a parallel test lane. + +## Metrics flow + +The normal public entry points are intentionally few: + +```text +run_preset_metrics.py -------------------------------+ +run_all_supported_metrics.py | + -> _internal/supported_preset_pipeline.py ----------+ + -> _internal/preset_pipeline.py + -> configure/build and locate C++ runners through the CMake File API + -> _internal/run_metrics.py and run_native_accuracy.py + -> rebuild_tables.py / _internal/report_pipeline.py + -> SVG renderers +``` + +`manifest.py` owns expected operation/implementation registration. +`source_fingerprint.py` owns source identity. `run_metrics.py` owns runner +preflight, streamed evidence, aggregation, provenance, staging, and atomic +publication. The `build_*` modules render existing evidence and must not repair +or reinterpret source rows. + +By default, quick, standard, and full staging runs keep profile-separated +evidence and reports beneath +`validation/metrics/_unversioned//{data,generated}`. Only an +explicitly requested complete release workflow may publish canonical evidence beneath +`validation/metrics/data` and regenerate the matching reports beneath +`validation/metrics/generated`. + +## Change navigation + +For a public API change, trace the focused public header into its detail and +runtime owners, then search first-party consumers in `validation` and +`examples`. Update them directly rather than preserving a superseded API. + +For an arithmetic, math, conversion, or parsing change, inspect both branches +of the constant-evaluation/runtime split and select validation from the +existing coverage row. Performance evidence complements correctness; it does +not replace contracts or accuracy coverage. + +For a new compiled source, update `cmake/fltxSources.cmake`. For a new +validation source, add it to the owning validation CMake module rather than the +top-level build file. + +For metrics work, start at `run_preset_metrics.py` or `rebuild_tables.py`, then +enter `_internal` only at the stage being changed. Renderer-only work should +reuse compatible data; collection/publishing work must preserve source +identity, manifests, provenance, and transactional publication. + +For a local CI reproduction, start at `run_preset_checks.py`; use +`run_all_supported_checks.py` only when every required host toolchain is +available. + +## Maintenance rule + +Update this document only when a subsystem is added, removed, moved, or its +ownership/dependency flow materially changes. Do not update it for ordinary +function additions, algorithm tuning, test cases, or refactoring within an +existing owner. Avoid volatile line numbers, counts, generated inventories, +and timestamps. diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 242cc16..9c6f1c6 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -16,7 +16,7 @@ function(fltx_add_example example_name) $<$:-fconstexpr-backtrace-limit=100> ) - target_compile_features(${example_name} PRIVATE cxx_std_23) + target_compile_features(${example_name} PRIVATE cxx_std_20) fltx_enable_msvc_parallel_compile(${example_name}) set_target_properties(${example_name} PROPERTIES FOLDER "fltx/examples") @@ -26,10 +26,18 @@ function(fltx_add_example example_name) endif() endfunction() -fltx_add_example("1_example_basic" example_basic.cpp) -fltx_add_example("2_example_constexpr_io" example_constexpr_io.cpp) -fltx_add_example("3_example_dispatch" example_dispatch.cpp) -fltx_add_example("4_example_mandelbrot" example_mandelbrot.cpp) -fltx_add_example("5_example_consteval_ellipse" example_consteval_ellipse.cpp) -fltx_add_example("6_example_consteval_math" example_consteval_math.cpp) -fltx_add_example("7_example_random" example_random.cpp) +fltx_add_example("01_example_basic" example_basic.cpp) +fltx_add_example("02_example_constexpr_io" example_constexpr_io.cpp) +fltx_add_example("03_example_dispatch" example_dispatch.cpp) +fltx_add_example("04_example_mandelbrot" example_mandelbrot.cpp helpers/bmp_writer.h) +fltx_add_example("05_example_consteval_ellipse" example_consteval_ellipse.cpp) +fltx_add_example("06_example_consteval_library_sweep" example_consteval_library_sweep.cpp) +fltx_add_example("07_example_random" example_random.cpp) +fltx_add_example("08_example_pow" example_pow.cpp) +fltx_add_example("09_example_newton_solver" example_newton_solver.cpp) +fltx_add_example("10_example_charconv" example_charconv.cpp) +fltx_add_example("11_example_std_integration" example_std_integration.cpp) +fltx_add_example("12_example_storage_interop" example_storage_interop.cpp) +fltx_add_example("13_example_special_values" example_special_values.cpp) +fltx_add_example("14_example_polynomial" example_polynomial.cpp) +fltx_add_example("15_example_consteval_coefficients" example_consteval_coefficients.cpp) diff --git a/examples/example_charconv.cpp b/examples/example_charconv.cpp new file mode 100644 index 0000000..f755b5f --- /dev/null +++ b/examples/example_charconv.cpp @@ -0,0 +1,74 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +using namespace bl; +using namespace bl::literals; + +const char* errc_name(std::errc ec) +{ + if (ec == std::errc{}) + return "ok"; + if (ec == std::errc::invalid_argument) + return "invalid_argument"; + if (ec == std::errc::result_out_of_range) + return "result_out_of_range"; + if (ec == std::errc::value_too_large) + return "value_too_large"; + return "other"; +} + +template +std::string_view written_view(const std::array& buffer, const char* end) +{ + return { buffer.data(), static_cast(end - buffer.data()) }; +} + +int main() +{ + constexpr f256 value = std::numbers::pi_v + 1_qd / 7_qd; + + std::array buffer{}; + const auto out = bl::to_chars( + buffer.data(), + buffer.data() + buffer.size(), + value, + std::chars_format::fixed, + 48); + + std::cout << "to_chars fixed status: " << errc_name(out.ec) << "\n"; + std::cout << "text: " << written_view(buffer, out.ptr) << "\n\n"; + + f256 parsed{}; + const auto in = bl::from_chars( + buffer.data(), + out.ptr, + parsed, + std::chars_format::fixed); + + std::cout << "from_chars status: " << errc_name(in.ec) << "\n"; + std::cout << std::setprecision(std::numeric_limits::digits10); + std::cout << "parsed: " << parsed << "\n\n"; + + constexpr std::string_view packet = "6.02214076e23 mol"; + f256 scanned{}; + const auto scan = bl::from_chars(packet.data(), packet.data() + packet.size(), scanned); + + std::cout << "scanned prefix: " << scanned << "\n"; + std::cout << "consumed chars: " << (scan.ptr - packet.data()) << "\n"; + std::cout << "remaining text: " + << std::string_view{ scan.ptr, static_cast(packet.data() + packet.size() - scan.ptr) } + << "\n\n"; + + const auto strict = bl::try_parse(packet); + std::cout << "try_parse whole packet status: " << errc_name(strict.ec) << "\n"; + std::cout << "try_parse consumed chars: " << strict.consumed << "\n"; +} diff --git a/examples/example_consteval_coefficients.cpp b/examples/example_consteval_coefficients.cpp new file mode 100644 index 0000000..5a227df --- /dev/null +++ b/examples/example_consteval_coefficients.cpp @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include + +#include + +using namespace bl; + +template +consteval std::array gaussian_kernel(T sigma) +{ + std::array weights{}; + T sum{}; + + for (std::size_t i = 0; i < weights.size(); ++i) + { + const int offset = static_cast(i) - static_cast(Radius); + const T x = T{ offset }; + const T x2 = x * x; + const T denom = T{ 2 } * sigma * sigma; + const T exponent = -x2 / denom; + weights[i] = bl::exp(exponent); + sum += weights[i]; + } + + for (T& weight : weights) + weight /= sum; + + return weights; +} + +template +constexpr T sum_values(const std::array& values) +{ + T sum{}; + for (const T& value : values) + sum += value; + return sum; +} + +int main() +{ + using T = f256; + + constexpr auto kernel = gaussian_kernel<4>( bl::parse("1.25") ); + constexpr T kernel_sum = sum_values(kernel); + + std::cout << std::setprecision(std::numeric_limits::digits10); + + for (std::size_t i = 0; i < kernel.size(); ++i) + { + const int offset = static_cast(i) - 4; + std::cout << "w[" << offset << "] = " << kernel[i] << "\n"; + } + + std::cout << "\nsum = " << kernel_sum << "\n"; +} diff --git a/examples/example_consteval_math.cpp b/examples/example_consteval_library_sweep.cpp similarity index 89% rename from examples/example_consteval_math.cpp rename to examples/example_consteval_library_sweep.cpp index f2c9a4b..01a5a8b 100644 --- a/examples/example_consteval_math.cpp +++ b/examples/example_consteval_library_sweep.cpp @@ -19,10 +19,7 @@ consteval f32 f32_test() constexpr f32 round_result = bl::round(2.5f); constexpr long lround_result = bl::lround(2.5f); constexpr llong llround_result = bl::llround(2.5f); - constexpr f32 nearbyint_result = bl::nearbyint(2.5f); - constexpr f32 rint_result = bl::rint(2.5f); - constexpr long lrint_result = bl::lrint(2.5f); - constexpr llong llrint_result = bl::llrint(2.5f); + constexpr f32 roundeven_result = bl::roundeven(2.5f); constexpr f32 fmod_result = bl::fmod(5.5f, 2.0f); constexpr f32 remainder_result = bl::remainder(5.5f, 2.0f); @@ -38,6 +35,7 @@ consteval f32 f32_test() constexpr f32 cbrt_result = bl::cbrt(0.123f); constexpr f32 hypot_result = bl::hypot(0.3f, 0.4f); constexpr f32 pow_result = bl::pow(0.123f, 4.56f); + constexpr f32 pow10_result = bl::ipow(10.0f, 2); constexpr f32 exp_result = bl::exp(0.123f); constexpr f32 exp2_result = bl::exp2(0.123f); @@ -85,11 +83,10 @@ consteval f32 f32_test() abs_result + fma_result + floor_result + ceil_result + trunc_result + round_result + static_cast(lround_result) + static_cast(llround_result) - + nearbyint_result + rint_result - + static_cast(lrint_result) + static_cast(llrint_result) + + roundeven_result + fmod_result + remainder_result + remquo_result1 + static_cast(remquo_result2) + fmin_result + fmax_result + fdim_result + copysign_result - + sqrt_result + cbrt_result + hypot_result + pow_result + + sqrt_result + cbrt_result + hypot_result + pow_result + pow10_result + exp_result + exp2_result + expm1_result + log_result + log2_result + log10_result + log1p_result + logb_result + static_cast(ilogb_result) + sin_result + cos_result + tan_result + asin_result + acos_result + atan_result + atan2_result @@ -113,10 +110,7 @@ consteval f64 f64_test() constexpr f64 round_result = bl::round(2.5); constexpr long lround_result = bl::lround(2.5); constexpr llong llround_result = bl::llround(2.5); - constexpr f64 nearbyint_result = bl::nearbyint(2.5); - constexpr f64 rint_result = bl::rint(2.5); - constexpr long lrint_result = bl::lrint(2.5); - constexpr llong llrint_result = bl::llrint(2.5); + constexpr f64 roundeven_result = bl::roundeven(2.5); constexpr f64 fmod_result = bl::fmod(5.5, 2.0); constexpr f64 remainder_result = bl::remainder(5.5, 2.0); @@ -132,6 +126,7 @@ consteval f64 f64_test() constexpr f64 cbrt_result = bl::cbrt(0.123); constexpr f64 hypot_result = bl::hypot(0.3, 0.4); constexpr f64 pow_result = bl::pow(0.123, 4.56); + constexpr f64 pow10_result = bl::pow(10.0, 2); constexpr f64 exp_result = bl::exp(0.123); constexpr f64 exp2_result = bl::exp2(0.123); @@ -179,11 +174,10 @@ consteval f64 f64_test() abs_result + fma_result + floor_result + ceil_result + trunc_result + round_result + static_cast(lround_result) + static_cast(llround_result) - + nearbyint_result + rint_result - + static_cast(lrint_result) + static_cast(llrint_result) + + roundeven_result + fmod_result + remainder_result + remquo_result1 + static_cast(remquo_result2) + fmin_result + fmax_result + fdim_result + copysign_result - + sqrt_result + cbrt_result + hypot_result + pow_result + + sqrt_result + cbrt_result + hypot_result + pow_result + pow10_result + exp_result + exp2_result + expm1_result + log_result + log2_result + log10_result + log1p_result + logb_result + static_cast(ilogb_result) + sin_result + cos_result + tan_result + asin_result + acos_result + atan_result + atan2_result @@ -207,10 +201,7 @@ consteval f128 f128_test() constexpr f128 round_result = bl::round(2.5_dd); constexpr long lround_result = bl::lround(2.5_dd); constexpr llong llround_result = bl::llround(2.5_dd); - constexpr f128 nearbyint_result = bl::nearbyint(2.5_dd); - constexpr f128 rint_result = bl::rint(2.5_dd); - constexpr long lrint_result = bl::lrint(2.5_dd); - constexpr llong llrint_result = bl::llrint(2.5_dd); + constexpr f128 roundeven_result = bl::roundeven(2.5_dd); constexpr f128 fmod_result = bl::fmod(5.5_dd, 2.0_dd); constexpr f128 remainder_result = bl::remainder(5.5_dd, 2.0_dd); @@ -222,11 +213,11 @@ consteval f128 f128_test() constexpr f128 fdim_result = bl::fdim(1.25_dd, 0.75_dd); constexpr f128 copysign_result = bl::copysign(0.125_dd, -1.0_dd); - constexpr f128 sqrt_result = bl::sqrt(0.123_dd); - constexpr f128 cbrt_result = bl::cbrt(0.123_dd); - constexpr f128 hypot_result = bl::hypot(0.3_dd, 0.4_dd); - constexpr f128 pow_result = bl::pow(0.123_dd, 4.56_dd); - constexpr f128 pow_double_result = bl::pow(0.123_dd, 4.56); + constexpr f128 sqrt_result = bl::sqrt(0.123_dd); + constexpr f128 cbrt_result = bl::cbrt(0.123_dd); + constexpr f128 hypot_result = bl::hypot(0.3_dd, 0.4_dd); + constexpr f128 pow_result = bl::pow(0.123_dd, 4.56_dd); + constexpr f128 pow10_result = bl::pow(10.0_dd, 2); constexpr f128 exp_result = bl::exp(0.123_dd); constexpr f128 exp2_result = bl::exp2(0.123_dd); @@ -274,11 +265,10 @@ consteval f128 f128_test() abs_result + fma_result + floor_result + ceil_result + trunc_result + round_result + f128{ static_cast(lround_result) } + f128{ static_cast(llround_result) } - + nearbyint_result + rint_result - + f128{ static_cast(lrint_result) } + f128{ static_cast(llrint_result) } + + roundeven_result + fmod_result + remainder_result + remquo_result1 + f128{ static_cast(remquo_result2) } + fmin_result + fmax_result + fdim_result + copysign_result - + sqrt_result + cbrt_result + hypot_result + pow_result + pow_double_result + + sqrt_result + cbrt_result + hypot_result + pow_result + pow10_result + exp_result + exp2_result + expm1_result + log_result + log2_result + log10_result + log1p_result + logb_result + f128{ static_cast(ilogb_result) } + sin_result + cos_result + tan_result + asin_result + acos_result + atan_result + atan2_result @@ -302,10 +292,7 @@ consteval f256 f256_test() constexpr f256 round_result = bl::round(2.5_qd); constexpr long lround_result = bl::lround(2.5_qd); constexpr llong llround_result = bl::llround(2.5_qd); - constexpr f256 nearbyint_result = bl::nearbyint(2.5_qd); - constexpr f256 rint_result = bl::rint(2.5_qd); - constexpr long lrint_result = bl::lrint(2.5_qd); - constexpr llong llrint_result = bl::llrint(2.5_qd); + constexpr f256 roundeven_result = bl::roundeven(2.5_qd); constexpr f256 fmod_result = bl::fmod(5.5_qd, 2.0_qd); constexpr f256 remainder_result = bl::remainder(5.5_qd, 2.0_qd); @@ -317,11 +304,11 @@ consteval f256 f256_test() constexpr f256 fdim_result = bl::fdim(1.25_qd, 0.75_qd); constexpr f256 copysign_result = bl::copysign(0.125_qd, -1.0_qd); - constexpr f256 sqrt_result = bl::sqrt(0.123_qd); - constexpr f256 cbrt_result = bl::cbrt(0.123_qd); - constexpr f256 hypot_result = bl::hypot(0.3_qd, 0.4_qd); - constexpr f256 pow_result = bl::pow(0.123_qd, 4.56_qd); - constexpr f256 pow_double_result = bl::pow(0.123_qd, 4.56); + constexpr f256 sqrt_result = bl::sqrt(0.123_qd); + constexpr f256 cbrt_result = bl::cbrt(0.123_qd); + constexpr f256 hypot_result = bl::hypot(0.3_qd, 0.4_qd); + constexpr f256 pow_result = bl::pow(0.123_qd, 4.56_qd); + constexpr f256 pow10_result = bl::pow(10.0_qd, 2); constexpr f256 exp_result = bl::exp(0.123_qd); constexpr f256 exp2_result = bl::exp2(0.123_qd); @@ -369,11 +356,10 @@ consteval f256 f256_test() abs_result + fma_result + floor_result + ceil_result + trunc_result + round_result + f256{ static_cast(lround_result) } + f256{ static_cast(llround_result) } - + nearbyint_result + rint_result - + f256{ static_cast(lrint_result) } + f256{ static_cast(llrint_result) } + + roundeven_result + fmod_result + remainder_result + remquo_result1 + f256{ static_cast(remquo_result2) } + fmin_result + fmax_result + fdim_result + copysign_result - + sqrt_result + cbrt_result + hypot_result + pow_result + pow_double_result + + sqrt_result + cbrt_result + hypot_result + pow_result + pow10_result + exp_result + exp2_result + expm1_result + log_result + log2_result + log10_result + log1p_result + logb_result + f256{ static_cast(ilogb_result) } + sin_result + cos_result + tan_result + asin_result + acos_result + atan_result + atan2_result @@ -386,6 +372,20 @@ consteval f256 f256_test() return scalar_sum; } +template +consteval bool approx_match(T lhs, T rhs) +{ + const T diff = bl::abs(lhs - rhs); + const T lhs_abs = bl::abs(lhs); + const T rhs_abs = bl::abs(rhs); + const T scale = (lhs_abs > rhs_abs) ? lhs_abs : rhs_abs; + const T floor = T{ 1 }; + const T reference = (scale > floor) ? scale : floor; + const T tolerance = std::numeric_limits::epsilon() * T{ 16 }; + + return diff <= reference * tolerance; +} + int main() { constexpr f32 result_f32 = f32_test(); @@ -393,6 +393,11 @@ int main() constexpr f128 result_f128 = f128_test(); constexpr f256 result_f256 = f256_test(); + constexpr bool match = + approx_match(result_f32, static_cast(result_f64)) && + approx_match(result_f64, static_cast(result_f128)) && + approx_match(result_f128, static_cast(result_f256)); + std::cout << std::fixed << std::setprecision(std::numeric_limits::digits10) @@ -401,5 +406,5 @@ int main() << result_f128 << "\n" << result_f256; - return 0; + return match ? 0 : 1; } diff --git a/examples/example_constexpr_io.cpp b/examples/example_constexpr_io.cpp index b09a371..4a96bc7 100644 --- a/examples/example_constexpr_io.cpp +++ b/examples/example_constexpr_io.cpp @@ -1,25 +1,118 @@ #include #include +#include #include +#include +#include using namespace bl; -using namespace bl::literals; int main() { - // calculate pi * 0.5: - // = 1.57079632679489661923132169163975144209858469968755291048747230 - constexpr f256 pio2_f256 = std::numbers::pi_v * 0.5_qd; - - // generate static_string<512> at compile-time - // = "1.57079632679489661923132169163975144209858469968755291048747230" - constexpr auto str_f256 = bl::to_static_string(pio2_f256); - std::cout << "str_f256: " << str_f256 << "\n"; - - // parse back to f128 value - constexpr f128 parsed_f128 = bl::to_f128(str_f256); - std::cout << std::setprecision(bl::numeric_limits::digits10); - std::cout << "parsed_f128: " << parsed_f128; + // ----- try switching format mode ----- + constexpr auto mode = std::ios_base::fixed; + // constexpr auto mode = std::ios_base::scientific; // scientific + // constexpr auto mode = std::ios_base::fmtflags{}; // defaultfloat + // constexpr auto mode = std::ios_base::fixed | std::ios_base::scientific; // hexfloat + + // ----- try switching base flags ----- + constexpr auto base_flags = + std::ios_base::showpoint | + std::ios_base::showpos | + std::ios_base::uppercase; + + // sets cout stream flags + constexpr auto flags = mode | base_flags; + std::cout.setf(flags & std::ios_base::floatfield, std::ios_base::floatfield); + std::cout.setf(flags & base_flags, base_flags); + + // use enough decimal digits for an exact f256 text round-trip + constexpr int digits = std::numeric_limits::max_digits10; + std::cout << std::setprecision(digits); + + // calculate 10+pi/2 + constexpr f256 value = 10 + std::numbers::pi_v / 2; + std::cout << "value: " << value << "\n\n"; + + // compile-time text round-trip + { + constexpr auto txt_static = bl::to_static_string(value, digits, flags); + std::cout << "txt (static): " << txt_static << "\n"; + + // parse back to f256 value + constexpr f256 parsed_static = bl::parse(txt_static); + std::cout << "parsed (static): " << parsed_static << "\n\n"; + + if (parsed_static != value) + return 1; + } + + // runtime text round-trip + { + auto txt_runtime = bl::to_string(value, digits, flags); + std::cout << "txt (runtime): " << txt_runtime << "\n"; + + // parse back to f256 value + f256 parsed_runtime = bl::parse(txt_runtime); + std::cout << "parsed (runtime): " << parsed_runtime << "\n\n"; + + if (parsed_runtime != value) + return 1; + } + + return 0; +} + + +// ----- Verify every viable stream flag combination round-trips at max_digits10 ----- + +template +consteval bool static_roundtrip_ok() +{ + constexpr int digits = std::numeric_limits::max_digits10; + constexpr f256 value = 10 + std::numbers::pi_v / 2; + constexpr auto txt_static = bl::to_static_string(value, digits, flags); + constexpr f256 parsed_static = bl::parse(txt_static); + return parsed_static == value; +} + +template +consteval bool all_static_roundtrips_ok() +{ + return (static_roundtrip_ok() && ...); } +static_assert(all_static_roundtrips_ok < + std::ios_base::fmtflags{}, + std::ios_base::showpoint, + std::ios_base::showpos, + std::ios_base::uppercase, + std::ios_base::showpoint | std::ios_base::showpos, + std::ios_base::showpoint | std::ios_base::uppercase, + std::ios_base::showpos | std::ios_base::uppercase, + std::ios_base::showpoint | std::ios_base::showpos | std::ios_base::uppercase, + std::ios_base::fixed, + std::ios_base::fixed | std::ios_base::showpoint, + std::ios_base::fixed | std::ios_base::showpos, + std::ios_base::fixed | std::ios_base::uppercase, + std::ios_base::fixed | std::ios_base::showpoint | std::ios_base::showpos, + std::ios_base::fixed | std::ios_base::showpoint | std::ios_base::uppercase, + std::ios_base::fixed | std::ios_base::showpos | std::ios_base::uppercase, + std::ios_base::fixed | std::ios_base::showpoint | std::ios_base::showpos | std::ios_base::uppercase, + std::ios_base::scientific, + std::ios_base::scientific | std::ios_base::showpoint, + std::ios_base::scientific | std::ios_base::showpos, + std::ios_base::scientific | std::ios_base::uppercase, + std::ios_base::scientific | std::ios_base::showpoint | std::ios_base::showpos, + std::ios_base::scientific | std::ios_base::showpoint | std::ios_base::uppercase, + std::ios_base::scientific | std::ios_base::showpos | std::ios_base::uppercase, + std::ios_base::scientific | std::ios_base::showpoint | std::ios_base::showpos | std::ios_base::uppercase, + std::ios_base::fixed | std::ios_base::scientific, + std::ios_base::fixed | std::ios_base::scientific | std::ios_base::showpoint, + std::ios_base::fixed | std::ios_base::scientific | std::ios_base::showpos, + std::ios_base::fixed | std::ios_base::scientific | std::ios_base::uppercase, + std::ios_base::fixed | std::ios_base::scientific | std::ios_base::showpoint | std::ios_base::showpos, + std::ios_base::fixed | std::ios_base::scientific | std::ios_base::showpoint | std::ios_base::uppercase, + std::ios_base::fixed | std::ios_base::scientific | std::ios_base::showpos | std::ios_base::uppercase, + std::ios_base::fixed | std::ios_base::scientific | std::ios_base::showpoint | std::ios_base::showpos | std::ios_base::uppercase > ()); \ No newline at end of file diff --git a/examples/example_dispatch.cpp b/examples/example_dispatch.cpp index 88848c4..a1ba01f 100644 --- a/examples/example_dispatch.cpp +++ b/examples/example_dispatch.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -7,7 +8,6 @@ #include using namespace bl; -//using namespace bl::literals; /* Notes: @@ -31,36 +31,36 @@ using namespace bl; */ template -void print_math(const char* name) +void print_math(std::string_view name) { - // T1 = f32/f64/f128/f256 + // T1 can be: f32 / f64 / f128 / f256 constexpr T1 pi_v = std::numbers::pi_v; constexpr T1 min_v = std::numeric_limits::min(); constexpr T1 max_v = std::numeric_limits::max(); - constexpr T1 sin_pi_6 = bl::sin(pi_v / T1{ 6.0 }); - constexpr T1 sin_pi_5 = bl::sin(pi_v / T1{ 5.0 }); + constexpr T1 sin_pi_6 = bl::sin(pi_v / 6); + constexpr T1 sin_pi_5 = bl::sin(pi_v / 5); std::cout << "print_math<" << name << ">():\n"; std::cout << std::setprecision(std::numeric_limits::digits10); - std::cout << " " << name << " min = " << min_v << "\n"; - std::cout << " " << name << " max = " << max_v << "\n"; - std::cout << " " << name << " PI = " << pi_v << "\n"; - std::cout << " " << "bl::sin(pi_v / 6.0) = " << sin_pi_6 << "\n"; - std::cout << " " << "bl::sin(pi_v / 5.0) = " << sin_pi_5 << "\n"; + std::cout << " " << name << " min\t\t= " << min_v << "\n"; + std::cout << " " << name << " max\t\t= " << max_v << "\n"; + std::cout << " " << name << " pi\t\t= " << pi_v << "\n"; + std::cout << " " << "bl::sin(pi / 6)\t= " << sin_pi_6 << "\n"; + std::cout << " " << "bl::sin(pi / 5)\t= " << sin_pi_5 << "\n"; // T2 is fixed to f32 by the dispatch argument below in this example T2 c = static_cast(sin_pi_5); std::cout << std::setprecision(std::numeric_limits::digits10); - std::cout << " c: " << c << "\n"; + std::cout << " c\t\t\t= " << c << "\n"; // test_bool is a runtime value at the call site, but dispatch selects a specialization // where Test_Bool is a compile-time bool if constexpr (Test_Bool) { - std::cout << " Test_Bool is TRUE\n"; + std::cout << " Test_Bool\t\t= TRUE\n"; } std::cout << "\n"; @@ -68,72 +68,102 @@ void print_math(const char* name) int main() { - // print_math("F32"); - - + // loop over each FloatType value for (int i = 0; i < (int)FloatType::COUNT; i++) { - const char* name = FloatTypeNames[i]; + // set runtime args FloatType float_type = (FloatType)i; - bool test_bool = (i % 2) == 0; + auto name = bl::to_string(float_type); + bool test_bool = (i % 2) == 0; - // invokes print_math(name), selected from runtime dispatch values + // invokes matching print_math(name) selected from runtime values bl_table_invoke( - bl_dispatch_table(print_math, name), // bind runtime args passed to print_math(...) + bl_dispatch_table(print_math, name), // bind runtime args to print_math(...) bl_enum_type(float_type), // map runtime enum value to T1 bl_enum_type(FloatType::F32), // map runtime enum value to T2 test_bool // map runtime bool to Test_Bool ); } - // print dispatch table info by providing example args (4 * 4 * 2 = 32 variants) - bl::dispatch_table_info::print_from_args("print_math", - bl_enum_type(FloatType::F64), // domain size = 4 - bl_enum_type(FloatType::F32), // domain size = 4 - true // domain size = 2 - ); + // generate an automatic dispatch table report: + { + std::cout << bl_dispatch_table_report("print_math", // print_math: 32 variants + bl_enum_type(FloatType::F64), // arg[0] domain = 4 + bl_enum_type(FloatType::F32), // arg[1] domain = 4 + true // arg[2] domain = 2 + ); + } + + /* + // manually calculate domain size of a single mapped type + { + constexpr std::size_t template_arg_domain_size = bl_enum_type_domain_size(FloatType::F64); + std::cout << "FloatType template arg domain: " << template_arg_domain_size << "\n\n"; + } + + + // manually calculate and print dispatch table domain info + { + constexpr std::size_t table_variant_count = bl_table_variants_count( + bl_enum_type(FloatType::F64), + bl_enum_type(FloatType::F32), + true + ); + constexpr auto table_domain_sizes = bl_dispatch_table_domain_sizes( + bl_enum_type(FloatType::F64), + bl_enum_type(FloatType::F32), + true + ); + + std::cout << "print_math: " << table_variant_count << " variants\n"; + for (std::size_t i = 0; i < table_domain_sizes.size(); i++) + std::cout << " arg[" << i << "] domain = " << table_domain_sizes[i] << "\n"; + + std::cout << "\n"; + } + */ } /* Output: -print_math(): - F32 min = 1.17549e-38 - F32 max = 3.40282e+38 - F32 PI = 3.14159 +print_math(): + f32 min = 1.17549e-38 + f32 max = 3.40282e+38 + f32 PI = 3.14159 bl::sin(pi_v / 6.0) = 0.5 bl::sin(pi_v / 5.0) = 0.587785 c: 0.587785 Test_Bool is TRUE -print_math(): - F64 min = 2.2250738585072e-308 - F64 max = 1.79769313486232e+308 - F64 PI = 3.14159265358979 +print_math(): + f64 min = 2.2250738585072e-308 + f64 max = 1.79769313486232e+308 + f64 PI = 3.14159265358979 bl::sin(pi_v / 6.0) = 0.5 bl::sin(pi_v / 5.0) = 0.587785252292473 c: 0.587785 -print_math(): - F128 min = 2.225073858507201383090232717332e-308 - F128 max = 1.797693134862315708145274237317e+308 - F128 PI = 3.14159265358979323846264338328 +print_math(): + f128 min = 2.225073858507201383090232717332e-308 + f128 max = 1.797693134862315708145274237317e+308 + f128 PI = 3.14159265358979323846264338328 bl::sin(pi_v / 6.0) = 0.5 bl::sin(pi_v / 5.0) = 0.5877852522924731291687059546391 c: 0.587785 Test_Bool is TRUE -print_math(): - F256 min = 2.22507385850720138309023271733240406421921598046233183055332742e-308 - F256 max = 1.79769313486231570814527423731704356798070567525844996598917477e+308 - F256 PI = 3.14159265358979323846264338327950288419716939937510582097494459 +print_math(): + f256 min = 2.22507385850720138309023271733240406421921598046233183055332742e-308 + f256 max = 1.79769313486231570814527423731704356798070567525844996598917477e+308 + f256 PI = 3.14159265358979323846264338327950288419716939937510582097494459 bl::sin(pi_v / 6.0) = 0.5 bl::sin(pi_v / 5.0) = 0.587785252292473129168705954639072768597652437643145991072272481 c: 0.587785 print_math: 32 variants - arg[0] domain=4 - arg[1] domain=4 - arg[2] domain=2 + arg[0] domain = 4 + arg[1] domain = 4 + arg[2] domain = 2 */ diff --git a/examples/example_mandelbrot.cpp b/examples/example_mandelbrot.cpp index 16166c5..70da9f6 100644 --- a/examples/example_mandelbrot.cpp +++ b/examples/example_mandelbrot.cpp @@ -3,27 +3,15 @@ #include #include #include -#include #include #include #include +#include "helpers/bmp_writer.h" using namespace bl; using namespace bl::literals; -static void write_u16(std::ofstream& out, std::uint16_t value) -{ - out.put((unsigned char)(value & 0xff)); - out.put((unsigned char)((value >> 8) & 0xff)); -} - -static void write_u32(std::ofstream& out, std::uint32_t value) -{ - write_u16(out, (std::uint16_t)(value)); - write_u16(out, (std::uint16_t)(value >> 16)); -} - static unsigned char to_byte(double x) { if (x < 0.0) x = 0.0; @@ -33,45 +21,45 @@ static unsigned char to_byte(double x) int main() { + // switch which underlying type is used using flt = f128; + // mandelbrot iteration limit / coordinate / zoom constexpr int max_iter = 20000; - constexpr flt center_x = flt("-1.73200006480238126967529761198455"); - constexpr flt center_y = flt("0.00000019235376499049335337716270"); - constexpr flt zoom = flt("2.0e+28"); + constexpr flt center_x = bl::parse("-1.73200006480238126967529761198455"); + constexpr flt center_y = bl::parse("0.00000019235376499049335337716270"); + constexpr flt zoom = bl::parse("2.0e+28"); + // target bitmap width / height constexpr int width = 1024; constexpr int height = 1024; - constexpr int row_stride = (width * 3 + 3) & ~3; - constexpr int pixel_bytes = row_stride * height; - constexpr int file_size = 54 + pixel_bytes; - - std::vector pixels(pixel_bytes); + bmp_writer image(width, height); std::atomic rows_done = 0; + // determine Mandelbrot-plane distance per pixel and image-centre offset const flt scale_x = 4.0 / (zoom * width); const flt scale_y = 4.0 / (zoom * height); const flt half_w = width * 0.5; const flt half_h = height * 0.5; + // determine ideal thread count to split up work std::size_t thread_count = std::thread::hardware_concurrency(); if (thread_count == 0) thread_count = 1; if (thread_count > (std::size_t)height) thread_count = height; + // calculate how many rows to assign to each thread const int rows_per_thread = (height + (int)thread_count - 1) / (int)thread_count; + // mandelbrot kernel to process rows [row_begin, row_end) auto render_rows = [&](int row_begin, int row_end) { for (int row = row_begin; row < row_end; ++row) { - int py = height - 1 - row; - unsigned char* out_row = pixels.data() + row * row_stride; - for (int px = 0; px < width; ++px) { flt cx = center_x + (flt(px) - half_w) * scale_x; - flt cy = center_y + (flt(py) - half_h) * scale_y; + flt cy = center_y + (flt(row) - half_h) * scale_y; flt x = 0, y = 0; int iter = 0; @@ -82,12 +70,12 @@ int main() x = xx; ++iter; - f64 _x = (f64)x; - f64 _y = (f64)y; - if (_x*_x + _y*_y > 4.0) + // cheap low-precision escape check + if (bl::sqr((f64)x) + bl::sqr((f64)y) > 4.0) break; } + // choose a nice colour unsigned char r, g, b; if (iter == max_iter) { @@ -96,28 +84,26 @@ int main() else { constexpr f64 tau = 6.28318530717958647692; - f64 t = iter * 0.005; + f64 t = iter * 0.005; r = to_byte(127.5 + 127.5 * std::cos(tau * (t + 0.00))); g = to_byte(127.5 + 127.5 * std::cos(tau * (t + 0.15))); b = to_byte(127.5 + 127.5 * std::cos(tau * (t + 0.32))); } - int i = px * 3; - out_row[i + 0] = b; - out_row[i + 1] = g; - out_row[i + 2] = r; + image.setPixel(px, row, { r, g, b }); } + // update progress rows_done.fetch_add(1, std::memory_order_relaxed); } }; + // create threads, assign rows std::vector threads; threads.reserve(thread_count); const auto render_start = std::chrono::steady_clock::now(); - for (std::size_t i = 0; i < thread_count; ++i) { int row_begin = (int)i * rows_per_thread; @@ -130,10 +116,11 @@ int main() threads.emplace_back(render_rows, row_begin, row_end); } + // track percentage complete int last_percent = -1; while (true) { - int done = rows_done.load(std::memory_order_relaxed); + int done = rows_done.load(std::memory_order_relaxed); int percent = (done * 100) / height; if (percent != last_percent) @@ -148,37 +135,18 @@ int main() std::this_thread::sleep_for(std::chrono::milliseconds(100)); } + // wait for all threads to complete for (std::thread& thread : threads) thread.join(); - const auto render_end = std::chrono::steady_clock::now(); + const auto render_end = std::chrono::steady_clock::now(); const std::chrono::duration render_time = render_end - render_start; std::cout << "\r100% complete\n"; std::cout << "generation took " << render_time.count() << " seconds\n"; + // save image (and print path) const std::filesystem::path output_path = std::filesystem::absolute("mandelbrot.bmp"); - std::ofstream out(output_path, std::ios::binary); - - out.put('B'); - out.put('M'); - write_u32(out, file_size); - write_u16(out, 0); - write_u16(out, 0); - write_u32(out, 54); - - write_u32(out, 40); - write_u32(out, width); - write_u32(out, height); - write_u16(out, 1); - write_u16(out, 24); - write_u32(out, 0); - write_u32(out, pixel_bytes); - write_u32(out, 2835); - write_u32(out, 2835); - write_u32(out, 0); - write_u32(out, 0); - - out.write(reinterpret_cast(pixels.data()), pixels.size()); + image.save(output_path); std::cout << "wrote: " << output_path.string() << "\n"; } diff --git a/examples/example_newton_solver.cpp b/examples/example_newton_solver.cpp new file mode 100644 index 0000000..a7c7565 --- /dev/null +++ b/examples/example_newton_solver.cpp @@ -0,0 +1,70 @@ +#include +#include +#include +#include + +#include + +using namespace bl; + +template +struct solve_result +{ + T root{}; + T residual{}; + int iterations{}; +}; + +template +constexpr T equation(T x) +{ + return bl::cos(x) - x; +} + +template +constexpr T derivative(T x) +{ + return -bl::sin(x) - T{ 1 }; +} + +template +constexpr solve_result solve_newton(T initial) +{ + T x = initial; + const T tolerance = std::numeric_limits::epsilon() * T{ 32 }; + + for (int i = 0; i < 20; ++i) + { + const T step = equation(x) / derivative(x); + x -= step; + + T scale = bl::abs(x); + if (scale < T{ 1 }) + scale = T{ 1 }; + + if (bl::abs(step) <= tolerance * scale) + return { x, equation(x), i + 1 }; + } + + return { x, equation(x), 20 }; +} + +template +void print_result(std::string_view name) +{ + const auto result = solve_newton(1); + + std::cout + << name << ":\n" + << " iterations = " << result.iterations << "\n" + << std::setprecision(std::numeric_limits::max_digits10) + << " root = " << result.root << "\n" + << " residual = " << result.residual << "\n\n"; +} + +int main() +{ + print_result("f64"); + print_result("f128"); + print_result("f256"); +} diff --git a/examples/example_polynomial.cpp b/examples/example_polynomial.cpp new file mode 100644 index 0000000..da7ea0b --- /dev/null +++ b/examples/example_polynomial.cpp @@ -0,0 +1,54 @@ +#include +#include +#include +#include + +#include + +using namespace bl; + +template +constexpr T expanded_shifted_power(T x) +{ + T y = T{ 1 }; + y = bl::fma(y, x, T{ -8 }); + y = bl::fma(y, x, T{ 28 }); + y = bl::fma(y, x, T{ -56 }); + y = bl::fma(y, x, T{ 70 }); + y = bl::fma(y, x, T{ -56 }); + y = bl::fma(y, x, T{ 28 }); + y = bl::fma(y, x, T{ -8 }); + y = bl::fma(y, x, T{ 1 }); + return y; +} + +template +constexpr T factored_shifted_power(T x) +{ + const T delta = x - T{ 1 }; + return bl::ipow(delta, 8); +} + +template +void print_case(std::string_view name) +{ + const T x = bl::parse("1.0001"); + const T expanded = expanded_shifted_power(x); + const T factored = factored_shifted_power(x); + const T diff = expanded - factored; + const T error = bl::abs(diff) / bl::abs(factored); + + std::cout + << name << ":\n" + << std::setprecision(std::numeric_limits::max_digits10) + << " expanded Horner = " << expanded << "\n" + << " factored form = " << factored << "\n" + << " relative error = " << error << "\n\n"; +} + +int main() +{ + print_case("f64"); + print_case("f128"); + print_case("f256"); +} diff --git a/examples/example_pow.cpp b/examples/example_pow.cpp new file mode 100644 index 0000000..d76443f --- /dev/null +++ b/examples/example_pow.cpp @@ -0,0 +1,227 @@ +#include +#include +#include +#include + +#include +using namespace bl; +using namespace bl::literals; +using namespace bl::int_literals; + +/* + +bl::pow precision policy: + + Follows std::pow rules: integer arguments count as f64 for overload selection, so these return f64: + - bl::pow(10, 10) + - bl::pow(10.0f, 3) + - bl::pow(10, 3.0f) + + f128/f256 act as wider floating types: + - f128 wins over f64 + - f256 wins over f128 + + +bl::ipow precision policy: + + - Keeps the base type as the result type. + - Debug builds assert when result overflows base type + - Release builds silently wrap + +*/ + + +#define assert_value_type(value, type) \ + static_assert(std::same_as, type>) + +consteval void consteval_pow_tests() +{ + // pow(integer, ...): integers count as f64 for overload ranking. + constexpr auto a0 = bl::pow(4_u8, 2_u8); assert_value_type(a0, f64); + constexpr auto a1 = bl::pow(10_u8, 10_i16); assert_value_type(a1, f64); + constexpr auto a2 = bl::pow(2_u8, 7_i32); assert_value_type(a2, f64); + constexpr auto a3 = bl::pow(2_u8, 7); assert_value_type(a3, f64); + constexpr auto a4 = bl::pow(4_u8, 3.0f); assert_value_type(a4, f64); + constexpr auto a5 = bl::pow(10_u8, 12.0); assert_value_type(a5, f64); + constexpr auto a6 = bl::pow(10_u8, 12.0_dd); assert_value_type(a6, f128); + constexpr auto a7 = bl::pow(10_u8, 12.0_qd); assert_value_type(a7, f256); + + constexpr auto b0 = bl::pow(10_i16, 4_u8); assert_value_type(b0, f64); + constexpr auto b1 = bl::pow(10_i16, 4_i16); assert_value_type(b1, f64); + constexpr auto b2 = bl::pow(10_i16, 4_i32); assert_value_type(b2, f64); + constexpr auto b3 = bl::pow(10_i16, 4); assert_value_type(b3, f64); + constexpr auto b4 = bl::pow(10_i16, 12.0f); assert_value_type(b4, f64); + constexpr auto b5 = bl::pow(10_i16, 12.0); assert_value_type(b5, f64); + constexpr auto b6 = bl::pow(10_i16, 12.0_dd); assert_value_type(b6, f128); + constexpr auto b7 = bl::pow(10_i16, 12.0_qd); assert_value_type(b7, f256); + + constexpr auto c0 = bl::pow(10, 9_u8); assert_value_type(c0, f64); + constexpr auto c1 = bl::pow(10, 10); assert_value_type(c1, f64); + constexpr auto c2 = bl::pow(10, 12.0f); assert_value_type(c2, f64); + constexpr auto c3 = bl::pow(10, 12.0); assert_value_type(c3, f64); + constexpr auto c4 = bl::pow(10, 12.0_dd); assert_value_type(c4, f128); + constexpr auto c5 = bl::pow(10, 12.0_qd); assert_value_type(c5, f256); + + // pow(floating, ...): f32 + integer returns f64, matching std::pow. + constexpr auto d0 = bl::pow(10.0f, 12.0f); assert_value_type(d0, f32); + constexpr auto d1 = bl::pow(10.0f, 12_u8); assert_value_type(d1, f64); + constexpr auto d2 = bl::pow(10.0f, 12); assert_value_type(d2, f64); + constexpr auto d3 = bl::pow(10.0f, 12_u64); assert_value_type(d3, f64); + constexpr auto d4 = bl::pow(10.0f, 12.0); assert_value_type(d4, f64); + constexpr auto d5 = bl::pow(10.0f, 12.0_dd); assert_value_type(d5, f128); + constexpr auto d6 = bl::pow(10.0f, 12.0_qd); assert_value_type(d6, f256); + + constexpr auto e0 = bl::pow(10.0, 12.0f); assert_value_type(e0, f64); + constexpr auto e1 = bl::pow(10.0, 12_u8); assert_value_type(e1, f64); + constexpr auto e2 = bl::pow(10.0, 12); assert_value_type(e2, f64); + constexpr auto e3 = bl::pow(10.0, 12_u64); assert_value_type(e3, f64); + constexpr auto e4 = bl::pow(10.0, 12.0); assert_value_type(e4, f64); + constexpr auto e5 = bl::pow(10.0, 12.0_dd); assert_value_type(e5, f128); + constexpr auto e6 = bl::pow(10.0, 12.0_qd); assert_value_type(e6, f256); + + constexpr auto f0 = bl::pow(10.0_dd, 12.0f); assert_value_type(f0, f128); + constexpr auto f1 = bl::pow(10.0_dd, 12_u8); assert_value_type(f1, f128); + constexpr auto f2 = bl::pow(10.0_dd, 12); assert_value_type(f2, f128); + constexpr auto f3 = bl::pow(10.0_dd, 12_u64); assert_value_type(f3, f128); + constexpr auto f4 = bl::pow(10.0_dd, 12.0); assert_value_type(f4, f128); + constexpr auto f5 = bl::pow(10.0_dd, 12.0_dd); assert_value_type(f5, f128); + constexpr auto f6 = bl::pow(10.0_dd, 12.0_qd); assert_value_type(f6, f256); + + constexpr auto g0 = bl::pow(10.0_qd, 12.0f); assert_value_type(g0, f256); + constexpr auto g1 = bl::pow(10.0_qd, 12_u8); assert_value_type(g1, f256); + constexpr auto g2 = bl::pow(10.0_qd, 12); assert_value_type(g2, f256); + constexpr auto g3 = bl::pow(10.0_qd, 12_u64); assert_value_type(g3, f256); + constexpr auto g4 = bl::pow(10.0_qd, 12.0); assert_value_type(g4, f256); + constexpr auto g5 = bl::pow(10.0_qd, 12.0_dd); assert_value_type(g5, f256); + constexpr auto g6 = bl::pow(10.0_qd, 12.0_qd); assert_value_type(g6, f256); + + static_assert(a1 == 10000000000.0); + static_assert(c1 == 10000000000.0); + + // negative_exponent_overloads + { + constexpr auto a0 = bl::pow(2_u8, -3_i8); assert_value_type(a0, f64); + constexpr auto a1 = bl::pow(2_u8, -5_i16); assert_value_type(a1, f64); + constexpr auto a2 = bl::pow(2_i16, -7_i32); assert_value_type(a2, f64); + constexpr auto a3 = bl::pow(2, -9_i64); assert_value_type(a3, f64); + constexpr auto a4 = bl::pow(2, -3.0f); assert_value_type(a4, f64); + constexpr auto a5 = bl::pow(2, -3.0); assert_value_type(a5, f64); + constexpr auto a6 = bl::pow(2, -3.0_dd); assert_value_type(a6, f128); + constexpr auto a7 = bl::pow(2, -3.0_qd); assert_value_type(a7, f256); + + constexpr auto b0 = bl::pow(2.0f, -3_i8); assert_value_type(b0, f64); + constexpr auto b1 = bl::pow(2.0f, -7_i32); assert_value_type(b1, f64); + constexpr auto b2 = bl::pow(2.0f, -3.0f); assert_value_type(b2, f32); + constexpr auto b3 = bl::pow(2.0f, -3.0); assert_value_type(b3, f64); + constexpr auto b4 = bl::pow(2.0f, -3.0_dd); assert_value_type(b4, f128); + constexpr auto b5 = bl::pow(2.0f, -3.0_qd); assert_value_type(b5, f256); + + constexpr auto c0 = bl::pow(2.0, -3_i8); assert_value_type(c0, f64); + constexpr auto c1 = bl::pow(2.0, -7_i32); assert_value_type(c1, f64); + constexpr auto c2 = bl::pow(2.0, -3.0f); assert_value_type(c2, f64); + constexpr auto c3 = bl::pow(2.0, -3.0); assert_value_type(c3, f64); + constexpr auto c4 = bl::pow(2.0, -3.0_dd); assert_value_type(c4, f128); + constexpr auto c5 = bl::pow(2.0, -3.0_qd); assert_value_type(c5, f256); + + constexpr auto d0 = bl::pow(2.0_dd, -3_i8); assert_value_type(d0, f128); + constexpr auto d1 = bl::pow(2.0_dd, -5_i16); assert_value_type(d1, f128); + constexpr auto d2 = bl::pow(2.0_dd, -7_i32); assert_value_type(d2, f128); + constexpr auto d3 = bl::pow(2.0_dd, -9_i64); assert_value_type(d3, f128); + constexpr auto d4 = bl::pow(2.0_dd, -3.0f); assert_value_type(d4, f128); + constexpr auto d5 = bl::pow(2.0_dd, -3.0); assert_value_type(d5, f128); + constexpr auto d6 = bl::pow(2.0_dd, -3.0_dd); assert_value_type(d6, f128); + constexpr auto d7 = bl::pow(2.0_dd, -3.0_qd); assert_value_type(d7, f256); + + constexpr auto e0 = bl::pow(2.0_qd, -3_i8); assert_value_type(e0, f256); + constexpr auto e1 = bl::pow(2.0_qd, -5_i16); assert_value_type(e1, f256); + constexpr auto e2 = bl::pow(2.0_qd, -7_i32); assert_value_type(e2, f256); + constexpr auto e3 = bl::pow(2.0_qd, -9_i64); assert_value_type(e3, f256); + constexpr auto e4 = bl::pow(2.0_qd, -3.0f); assert_value_type(e4, f256); + constexpr auto e5 = bl::pow(2.0_qd, -3.0); assert_value_type(e5, f256); + constexpr auto e6 = bl::pow(2.0_qd, -3.0_dd); assert_value_type(e6, f256); + constexpr auto e7 = bl::pow(2.0_qd, -3.0_qd); assert_value_type(e7, f256); + + constexpr auto f0 = bl::pow(-2_i16, -3_i8); assert_value_type(f0, f64); + constexpr auto f1 = bl::pow(-2.0_dd, -5_i16); assert_value_type(f1, f128); + constexpr auto f2 = bl::pow(-2.0_qd, -7_i32); assert_value_type(f2, f256); + + static_assert(a0 == 0.125); + static_assert(a1 == 0.03125); + static_assert(a2 == 0.0078125); + static_assert(a3 == 0.001953125); + static_assert(d0 == 0.125_dd); + static_assert(e0 == 0.125_qd); + static_assert(f0 == -0.125); + } + + // exponent_value_ranges + { + // These use deliberately different exponent storage types with values chosen + // to exercise the small-exp switch, its boundary, and the generic fallback. + constexpr auto a0 = bl::pow(1.25, 12_u8); assert_value_type(a0, f64); + constexpr auto a1 = bl::pow(1.25, 12_u64); assert_value_type(a1, f64); + constexpr auto a2 = bl::pow(1.001, 255_u64); assert_value_type(a2, f64); + constexpr auto a3 = bl::pow(1.001, 256_u64); assert_value_type(a3, f64); + constexpr auto a4 = bl::pow(1.0001, 4096_u64); assert_value_type(a4, f64); + constexpr auto a5 = bl::pow(1.00001, 65536_u64); assert_value_type(a5, f64); + constexpr auto a6 = bl::pow(1.0000001_qd, 12345678_u64); assert_value_type(a6, f256); + + constexpr auto b0 = bl::pow(2.0_dd, -12_i8); assert_value_type(b0, f128); + constexpr auto b1 = bl::pow(2.0_dd, -12_i64); assert_value_type(b1, f128); + + constexpr auto c0 = bl::pow(2.0f, 120_i32); assert_value_type(c0, f64); + constexpr auto c1 = bl::pow(2.0, 512_i32); assert_value_type(c1, f64); + constexpr auto c2 = bl::pow(2.0_dd, 512_i32); assert_value_type(c2, f128); + constexpr auto c3 = bl::pow(2.0_qd, 512_i32); assert_value_type(c3, f256); + + constexpr auto d0 = bl::pow(10.0f, 30_i32); assert_value_type(d0, f64); + constexpr auto d1 = bl::pow(10.0, 30_i32); assert_value_type(d1, f64); + constexpr auto d2 = bl::pow(10.0_dd, 30_i32); assert_value_type(d2, f128); + constexpr auto d3 = bl::pow(10.0_qd, 30_i32); assert_value_type(d3, f256); + constexpr auto d4 = bl::pow(20.0_dd, 30_i32); assert_value_type(d4, f128); + constexpr auto d5 = bl::pow(125.0_qd, 24_i32); assert_value_type(d5, f256); + + constexpr auto e0 = bl::pow(10.0_dd, -30_i32); assert_value_type(e0, f128); + constexpr auto e1 = bl::pow(10.0_qd, -30_i32); assert_value_type(e1, f256); + constexpr auto e2 = bl::pow(-20.0_dd, -30_i32); assert_value_type(e2, f128); + + static_assert(d4 == bl::pow(f128{ 20 }, 30_i32)); + static_assert(d5 == bl::pow(f256{ 125 }, 24_i32)); + } +} + + +consteval void consteval_ipow_tests() +{ + // ipow(int-like, int-like): default return is the base type. + constexpr auto a0 = bl::ipow(4_u8, 2_u8); assert_value_type(a0, u8); + constexpr auto a1 = bl::ipow(4_u8, 3_i16); assert_value_type(a1, u8); + constexpr auto a2 = bl::ipow(2_u8, 7_i32); assert_value_type(a2, u8); + constexpr auto a3 = bl::ipow(2_u8, 7); assert_value_type(a3, u8); + + constexpr auto b0 = bl::ipow(10_i16, 4_u8); assert_value_type(b0, i16); + constexpr auto b1 = bl::ipow(10_i16, 4_i16); assert_value_type(b1, i16); + constexpr auto b2 = bl::ipow(10_i16, 4_i32); assert_value_type(b2, i16); + constexpr auto b3 = bl::ipow(10_i16, 4); assert_value_type(b3, i16); + + constexpr auto c0 = bl::ipow(10, 9_u8); assert_value_type(c0, int); + constexpr auto c1 = bl::ipow(10, 9); assert_value_type(c1, int); + + #if 0 // Expected failures + { + // Integral ipow keeps the base type as the result type. + // Overflow is diagnosed during constant evaluation in all builds. + // Runtime overflow is checked only in Debug; Release runtime calls wrap silently. + constexpr auto a0 = bl::ipow(10_i16, 5_i16); + constexpr auto a1 = bl::ipow(10, 10); + } + #endif +} + +int main() +{ + consteval_pow_tests(); + consteval_ipow_tests(); + + return 0; +} diff --git a/examples/example_random.cpp b/examples/example_random.cpp index e920c97..f45c17e 100644 --- a/examples/example_random.cpp +++ b/examples/example_random.cpp @@ -1,31 +1,49 @@ #include #include +#include +#include #include using namespace bl; using namespace bl::literals; -template -consteval f256 sum(std::array values) +template +consteval T avg(const std::array& values) { - f256 total = 0; + T total = 0; for (const auto& v : values) total += v; - return total; + return total / N; } int main() { - constexpr auto constexpr_values = bl::random_array<4>( - bl::mt19937_64{ 0x1020304050607080ull }, - bl::uniform_real_distribution{ -0_qd, 10_qd } - ); + // f256: random uniform arrays (min=0, max=100) + constexpr auto a = bl::uniform_real_array<100>(0_qd, 100_qd, bl::mt19937_64{ 0x123ull }); // explicit engine / custom seed + constexpr auto b = bl::uniform_real_array<100>(0_qd, 100_qd, 0x123ull); // default engine / custom seed + constexpr auto c = bl::uniform_real_array<100>(0_qd, 100_qd); // default engine / default seed - constexpr f256 total = sum(constexpr_values); + // f128: random normal array (mean=50, stddev=50) + constexpr auto d = bl::normal_array<100>(50_dd, 50_dd, bl::mt19937_64{ 0x123ull }); // explicit engine / custom seed + constexpr auto e = bl::normal_array<100>(50_dd, 50_dd, 0x123ull); // default engine / custom seed + constexpr auto f = bl::normal_array<100>(50_dd, 50_dd); // default engine / default seed + + constexpr f256 a_avg = avg(a); + constexpr f256 b_avg = avg(b); + constexpr f256 c_avg = avg(c); + + constexpr f128 d_avg = avg(d); + constexpr f128 e_avg = avg(e); + constexpr f128 f_avg = avg(f); std::cout << std::fixed << std::setprecision(std::numeric_limits::digits10) - << "sum: " << total; + << "a_avg: " << a_avg << "\n" + << "b_avg: " << b_avg << "\n" + << "c_avg: " << c_avg << "\n\n" + << "d_avg: " << d_avg << "\n" + << "e_avg: " << e_avg << "\n" + << "f_avg: " << f_avg << "\n"; } diff --git a/examples/example_special_values.cpp b/examples/example_special_values.cpp new file mode 100644 index 0000000..c069267 --- /dev/null +++ b/examples/example_special_values.cpp @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include + +#include + +using namespace bl; +using namespace bl::literals; + +const char* class_name(int cls) +{ + switch (cls) + { + case FP_INFINITE: return "infinite"; + case FP_NAN: return "nan"; + case FP_NORMAL: return "normal"; + case FP_SUBNORMAL: return "subnormal"; + case FP_ZERO: return "zero"; + default: return "unknown"; + } +} + +template +void describe(std::string_view name, T value) +{ + std::cout + << std::boolalpha + << name << ":\n" + << " class = " << class_name(bl::fpclassify(value)) << "\n" + << " finite = " << bl::isfinite(value) << "\n" + << " infinite = " << bl::isinf(value) << "\n" + << " nan = " << bl::isnan(value) << "\n" + << " signbit = " << bl::signbit(value) << "\n\n"; +} + +int main() +{ + using T = f256; + + describe("positive zero", T{ 0.0 }); + describe("negative zero", T{ -0.0 }); + describe("denorm_min", std::numeric_limits::denorm_min()); + describe("infinity", std::numeric_limits::infinity()); + describe("quiet_NaN", std::numeric_limits::quiet_NaN()); + + const T value = bl::parse("-12.75"); + + int exponent{}; + const T significand = bl::frexp(value, &exponent); + const T rebuilt = bl::ldexp(significand, exponent); + + T integer_part{}; + const T fraction = bl::modf(value, &integer_part); + + std::cout + << std::setprecision(std::numeric_limits::max_digits10) + << "frexp(-12.75): significand = " << significand << ", exponent = " << exponent << "\n" + << "ldexp(significand, exponent): " << rebuilt << "\n" + << "modf(-12.75): integer = " << integer_part << ", fraction = " << fraction << "\n" + << "nextafter(0, 1): " << bl::nextafter(T{ 0 }, T{ 1 }) << "\n\n"; + + + constexpr int counter_width = 3; + constexpr int zeros_before_counter = + std::numeric_limits::digits10 - counter_width; // 60 for f256 + + constexpr int places = zeros_before_counter + counter_width; + const T step = bl::pow(10_qd, -places); + + std::cout << std::fixed << std::setprecision(places); + + for (int i = 1; i <= 4; ++i) + { + const T v = T{ i } * step; + std::cout << v << "\n"; + } +} diff --git a/examples/example_std_integration.cpp b/examples/example_std_integration.cpp new file mode 100644 index 0000000..c8b21e4 --- /dev/null +++ b/examples/example_std_integration.cpp @@ -0,0 +1,49 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +using namespace bl; +using namespace bl::literals; + +int main() +{ + const f256 pi = std::numbers::pi_v; + + std::cout + << "sizeof(f128): " << sizeof(f128) << "\n" + << "sizeof(f256): " << sizeof(f256) << "\n" + << "f128 digits10: " << std::numeric_limits::digits10 << "\n" + << "f256 digits10: " << std::numeric_limits::digits10 << "\n\n"; + + std::cout + << std::setprecision(std::numeric_limits::digits10) + << "std::numbers::pi_v: " << pi << "\n\n"; + + std::unordered_map labels; + labels.emplace(0.1_dd, "one tenth"); + labels.emplace(0.25_dd, "one quarter"); + + const auto found = labels.find(0.1_dd); + if (found != labels.end()) + std::cout << "unordered_map lookup for 0.1: " << found->second << "\n\n"; + + const f256 nan = std::numeric_limits::quiet_NaN(); + const auto ordering = nan <=> pi; + std::cout << std::boolalpha + << "NaN comparison is unordered: " + << (ordering == std::partial_ordering::unordered) << "\n\n"; + +#if FLTX_HAS_STD_FORMAT + std::cout << std::format("std::format fixed: {:.40f}\n", pi); + std::cout << std::format("std::format padded: {:>72.60g}\n", pi); +#else + std::cout << "std::format is not available in this standard library.\n"; +#endif +} diff --git a/examples/example_storage_interop.cpp b/examples/example_storage_interop.cpp new file mode 100644 index 0000000..88dc1ca --- /dev/null +++ b/examples/example_storage_interop.cpp @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include +#include + +#include + +using namespace bl; +using namespace bl::literals; + +struct weighted_point +{ + std::uint32_t id{}; + f128_s x{}; + f128_s y{}; + f256_s weight{}; +}; + +static_assert(sizeof(f128_s) == 16); +static_assert(sizeof(f256_s) == 32); +static_assert(std::is_standard_layout_v); +static_assert(std::is_standard_layout_v); +static_assert(std::is_trivially_copyable_v); +static_assert(std::is_trivially_copyable_v); +static_assert(std::is_standard_layout_v); +static_assert(std::is_trivially_copyable_v); + +struct center_result +{ + f256 x{}; + f256 y{}; +}; + +template +constexpr center_result weighted_center(const std::array& points) +{ + f256 total_x{}; + f256 total_y{}; + f256 total_weight{}; + + for (const weighted_point& point : points) + { + const f256 x = f256{ point.x }; + const f256 y = f256{ point.y }; + const f256 weight = f256{ point.weight }; + + total_x += x * weight; + total_y += y * weight; + total_weight += weight; + } + + return { + total_x / total_weight, + total_y / total_weight + }; +} + +int main() +{ + constexpr std::array points{ { + { 101, 0.125_dd, 1.5_dd, 0.20_qd }, + { 102, 1.250_dd, 2.0_dd, 0.35_qd }, + { 103, 2.750_dd, 3.5_dd, 0.45_qd } + } }; + + constexpr center_result center = weighted_center(points); + + std::cout + << "weighted_point size: " << sizeof(weighted_point) << " bytes\n" + << "f128_s size: " << sizeof(f128_s) << " bytes\n" + << "f256_s size: " << sizeof(f256_s) << " bytes\n\n"; + + std::cout + << std::setprecision(std::numeric_limits::digits10) + << "weighted center x: " << center.x << "\n" + << "weighted center y: " << center.y << "\n"; +} diff --git a/examples/example_viewer.h b/examples/example_viewer.h deleted file mode 100644 index 30d4be8..0000000 --- a/examples/example_viewer.h +++ /dev/null @@ -1,193 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include -#include - -#ifdef FLTX_EXAMPLE_VIEWER_SDL2 -#ifndef SDL_MAIN_HANDLED -#define SDL_MAIN_HANDLED -#endif -#include -#endif - -namespace fltx_example -{ -struct image_view -{ - std::string_view name; - int width = 0; - int height = 0; - const unsigned char* rgb = nullptr; -}; - -inline bool show_images(std::string_view title, std::initializer_list images) -{ -#ifndef FLTX_EXAMPLE_VIEWER_SDL2 - (void)title; - (void)images; - return false; -#else - if (images.size() == 0) - return false; - - for (const image_view& img : images) - { - if (img.width <= 0 || img.height <= 0 || img.rgb == nullptr) - return false; - } - - SDL_SetMainReady(); - if (SDL_Init(SDL_INIT_VIDEO) != 0) - { - std::cerr << "SDL_Init failed: " << SDL_GetError() << "\n"; - return false; - } - - struct sdl_quit_guard - { - ~sdl_quit_guard() - { - SDL_Quit(); - } - } guard; - - const std::vector views(images); - - int max_image_w = 0; - int max_image_h = 0; - for (const image_view& img : views) - { - max_image_w = std::max(max_image_w, img.width); - max_image_h = std::max(max_image_h, img.height); - } - - SDL_Rect usable_bounds{ 0, 0, 1280, 720 }; - if (SDL_GetDisplayUsableBounds(0, &usable_bounds) != 0) - usable_bounds = SDL_Rect{ 0, 0, 1280, 720 }; - - const int max_window_w = std::max(320, usable_bounds.w - 80); - const int max_window_h = std::max(240, usable_bounds.h - 120); - - int columns = std::min(static_cast(views.size()), 3); - while (columns > 1 && columns * max_image_w > max_window_w) - --columns; - - const int rows = (static_cast(views.size()) + columns - 1) / columns; - const double initial_scale = std::min( - static_cast(max_window_w) / static_cast(columns * max_image_w), - static_cast(max_window_h) / static_cast(rows * max_image_h)); - - const int window_w = std::max(320, static_cast(columns * max_image_w * initial_scale)); - const int window_h = std::max(240, static_cast(rows * max_image_h * initial_scale)); - - const std::string window_title(title); - SDL_Window* window = SDL_CreateWindow( - window_title.c_str(), - SDL_WINDOWPOS_CENTERED, - SDL_WINDOWPOS_CENTERED, - window_w, - window_h, - SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE); - - if (window == nullptr) - { - std::cerr << "SDL_CreateWindow failed: " << SDL_GetError() << "\n"; - return false; - } - - SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); - if (renderer == nullptr) - renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE); - - if (renderer == nullptr) - { - std::cerr << "SDL_CreateRenderer failed: " << SDL_GetError() << "\n"; - SDL_DestroyWindow(window); - return false; - } - - std::vector textures; - textures.reserve(views.size()); - for (const image_view& img : views) - { - SDL_Texture* texture = SDL_CreateTexture( - renderer, - SDL_PIXELFORMAT_RGB24, - SDL_TEXTUREACCESS_STATIC, - img.width, - img.height); - - if (texture == nullptr) - { - std::cerr << "SDL_CreateTexture failed: " << SDL_GetError() << "\n"; - for (SDL_Texture* old_texture : textures) - SDL_DestroyTexture(old_texture); - SDL_DestroyRenderer(renderer); - SDL_DestroyWindow(window); - return false; - } - - SDL_UpdateTexture(texture, nullptr, img.rgb, img.width * 3); - textures.push_back(texture); - } - - bool running = true; - while (running) - { - SDL_Event event; - while (SDL_PollEvent(&event) != 0) - { - if (event.type == SDL_QUIT) - running = false; - else if (event.type == SDL_KEYDOWN && (event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_q)) - running = false; - } - - int current_w = 0; - int current_h = 0; - SDL_GetWindowSize(window, ¤t_w, ¤t_h); - - const double cell_w = static_cast(current_w) / static_cast(columns); - const double cell_h = static_cast(current_h) / static_cast(rows); - const double scale = std::min(cell_w / static_cast(max_image_w), cell_h / static_cast(max_image_h)); - - SDL_SetRenderDrawColor(renderer, 30, 31, 34, 255); - SDL_RenderClear(renderer); - - for (std::size_t i = 0; i < views.size(); ++i) - { - const int column = static_cast(i) % columns; - const int row = static_cast(i) / columns; - const image_view& img = views[i]; - - const int draw_w = std::max(1, static_cast(static_cast(img.width) * scale)); - const int draw_h = std::max(1, static_cast(static_cast(img.height) * scale)); - const int cell_x = static_cast(static_cast(column) * cell_w); - const int cell_y = static_cast(static_cast(row) * cell_h); - - SDL_Rect dst{ - cell_x + static_cast((cell_w - static_cast(draw_w)) * 0.5), - cell_y + static_cast((cell_h - static_cast(draw_h)) * 0.5), - draw_w, - draw_h - }; - - SDL_RenderCopy(renderer, textures[i], nullptr, &dst); - } - - SDL_RenderPresent(renderer); - } - - for (SDL_Texture* texture : textures) - SDL_DestroyTexture(texture); - - SDL_DestroyRenderer(renderer); - SDL_DestroyWindow(window); - return true; -#endif -} - -} // namespace fltx_example diff --git a/examples/helpers/bmp_writer.h b/examples/helpers/bmp_writer.h new file mode 100644 index 0000000..30418b4 --- /dev/null +++ b/examples/helpers/bmp_writer.h @@ -0,0 +1,112 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +struct rgb_pixel +{ + std::uint8_t r{}; + std::uint8_t g{}; + std::uint8_t b{}; +}; + +class bmp_writer +{ + int width{}; + int height{}; + int row_stride{}; + std::vector pixels; + +public: + bmp_writer(int w, int h) + : width(check_dimension(w)), + height(check_dimension(h)), + row_stride((width * 3 + 3) & ~3), + pixels(static_cast(row_stride) * static_cast(height)) + {} + + [[nodiscard]] int getWidth() const noexcept + { + return width; + } + + [[nodiscard]] int getHeight() const noexcept + { + return height; + } + + void setPixel(int x, int y, rgb_pixel pixel) noexcept + { + assert(x >= 0 && x < width); + assert(y >= 0 && y < height); + + const std::size_t bmp_y = static_cast(height - 1 - y); + const std::size_t i = bmp_y * static_cast(row_stride) + + static_cast(x) * 3u; + + pixels[i + 0] = pixel.b; + pixels[i + 1] = pixel.g; + pixels[i + 2] = pixel.r; + } + + void save(const std::filesystem::path& path) const + { + std::ofstream out(path, std::ios::binary); + if (!out) + throw std::runtime_error("failed to open BMP output file"); + + const auto pixel_bytes = static_cast(pixels.size()); + const auto file_size = static_cast(54u + pixel_bytes); + + out.put('B'); + out.put('M'); + write_u32(out, file_size); + write_u16(out, 0); + write_u16(out, 0); + write_u32(out, 54); + + write_u32(out, 40); + write_u32(out, static_cast(width)); + write_u32(out, static_cast(height)); + write_u16(out, 1); + write_u16(out, 24); + write_u32(out, 0); + write_u32(out, pixel_bytes); + write_u32(out, 2835); + write_u32(out, 2835); + write_u32(out, 0); + write_u32(out, 0); + + out.write(reinterpret_cast(pixels.data()), + static_cast(pixels.size())); + + if (!out) + throw std::runtime_error("failed to write BMP output file"); + } + +private: + + static int check_dimension(int value) + { + if (value <= 0) + throw std::invalid_argument("bmp_writer dimensions must be positive"); + + return value; + } + + static void write_u16(std::ofstream& out, std::uint16_t value) + { + out.put(static_cast(value & 0xffu)); + out.put(static_cast((value >> 8) & 0xffu)); + } + + static void write_u32(std::ofstream& out, std::uint32_t value) + { + write_u16(out, static_cast(value)); + write_u16(out, static_cast(value >> 16)); + } +}; diff --git a/include/fltx/aliases.h b/include/fltx/aliases.h index c969d7c..d5ee205 100644 --- a/include/fltx/aliases.h +++ b/include/fltx/aliases.h @@ -31,9 +31,48 @@ namespace bl using f32 = float; using f64 = double; - using ddreal = f128; - using qdreal = f256; + namespace int_literals + { + inline constexpr std::uint8_t operator ""_u8(unsigned long long arg) noexcept + { + return static_cast(arg); + } + inline constexpr std::int8_t operator ""_i8(unsigned long long arg) noexcept + { + return static_cast(arg); + } + + inline constexpr std::uint16_t operator ""_u16(unsigned long long arg) noexcept + { + return static_cast(arg); + } + + inline constexpr std::int16_t operator ""_i16(unsigned long long arg) noexcept + { + return static_cast(arg); + } + + inline constexpr std::uint32_t operator ""_u32(unsigned long long arg) noexcept + { + return static_cast(arg); + } + + inline constexpr std::int32_t operator ""_i32(unsigned long long arg) noexcept + { + return static_cast(arg); + } + + inline constexpr std::uint64_t operator ""_u64(unsigned long long arg) noexcept + { + return static_cast(arg); + } + + inline constexpr std::int64_t operator ""_i64(unsigned long long arg) noexcept + { + return static_cast(arg); + } + } } // namespace bl #endif diff --git a/include/fltx/charconv.h b/include/fltx/charconv.h index 8187600..5492eb9 100644 --- a/include/fltx/charconv.h +++ b/include/fltx/charconv.h @@ -12,33 +12,45 @@ #include #include +#include #include +#include #include +#include +#include "fltx/detail/ascii.h" +#include "fltx/detail/native_float_io.h" #include "fltx/f128_string.h" #include "fltx/f256_string.h" namespace bl::detail::charconv { - [[nodiscard]] BL_FORCE_INLINE constexpr bool supported_format(std::chars_format fmt) noexcept + [[nodiscard]] BL_FORCE_INLINE constexpr bool supported_output_format(std::chars_format fmt) noexcept { return fmt == std::chars_format::general || fmt == std::chars_format::fixed || - fmt == std::chars_format::scientific; + fmt == std::chars_format::scientific || + fmt == std::chars_format::hex; } - [[nodiscard]] BL_FORCE_INLINE constexpr bool is_ascii_space(char c) noexcept + template + [[nodiscard]] BL_FORCE_INLINE constexpr std::from_chars_result parse_special_from_chars( + const char* first, + const char* last, + typename Traits::value_type& value) noexcept { - return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\f' || c == '\v'; - } + const char* p = first; + bool neg = false; + if (p != last && *p == '-') + { + neg = true; + ++p; + } - [[nodiscard]] BL_FORCE_INLINE constexpr bool begins_special(const char* first) noexcept - { - if (*first == '-') - ++first; + if (!detail::parse_special(p, last, neg, value)) + return { first, std::errc::invalid_argument }; - return (ascii_lower(first[0]) == 'n' && ascii_lower(first[1]) == 'a' && ascii_lower(first[2]) == 'n') || - (ascii_lower(first[0]) == 'i' && ascii_lower(first[1]) == 'n' && ascii_lower(first[2]) == 'f'); + return { p, std::errc{} }; } [[nodiscard]] BL_FORCE_INLINE constexpr bool has_exponent_marker(const char* first, const char* last) noexcept @@ -90,10 +102,10 @@ namespace bl::detail::charconv std::chars_format fmt, int precision) noexcept { - if (!supported_format(fmt)) + if (!supported_output_format(fmt)) return { first, std::errc::invalid_argument }; - if (special_text(value) != nullptr) + if (special_text(value) != nullptr) [[unlikely]] return emit_special(first, last, value); detail::fltx_char_result result{}; @@ -101,6 +113,15 @@ namespace bl::detail::charconv result = Traits::to_chars_fixed(first, last, value, precision, false); else if (fmt == std::chars_format::scientific) result = Traits::to_chars_scientific_frac(first, last, value, precision, false); + else if (fmt == std::chars_format::hex) + result = detail::emit_hex_float_to_chars( + first, + last, + value, + false, + precision, + precision >= 0, + precision < 0); else result = Traits::to_chars_general(first, last, value, precision, true); @@ -116,57 +137,222 @@ namespace bl::detail::charconv typename Traits::value_type& value, std::chars_format fmt) noexcept { - if (!supported_format(fmt)) + if (!supported_output_format(fmt)) return { first, std::errc::invalid_argument }; - if (first == last || *first == '+' || is_ascii_space(*first)) + if (first == last || *first == '+' || ascii_space(*first)) return { first, std::errc::invalid_argument }; - const std::size_t length = static_cast(last - first); - constexpr std::size_t stack_capacity = 1024; - char stack[stack_capacity + 1]{}; - std::string dynamic; - char* buffer = stack; - - if (length > stack_capacity) + typename Traits::value_type parsed{}; + const char* end = nullptr; + bool parsed_ok = false; + if (fmt == std::chars_format::hex) { - dynamic.assign(first, last); - dynamic.push_back('\0'); - buffer = dynamic.data(); + const std::size_t length = static_cast(last - first); + constexpr std::size_t stack_capacity = 1024; + char stack[stack_capacity + 1]{}; + std::string dynamic; + char* buffer = stack; + + if (length > stack_capacity) + { + dynamic.assign(first, last); + dynamic.push_back('\0'); + buffer = dynamic.data(); + } + else + { + copy_chars(buffer, first, length); + buffer[length] = '\0'; + } + + parsed_ok = detail::parse_hex_float(buffer, buffer + length, parsed, &end); + end = first + (end - buffer); } else { - copy_chars(buffer, first, length); - buffer[length] = '\0'; - } - - if (fmt == std::chars_format::fixed) - { - const std::size_t exponent_offset = exponent_marker_offset(buffer, length); - if (exponent_offset != length) - buffer[exponent_offset] = '\0'; + const char* parse_last = last; + if (fmt == std::chars_format::fixed) + { + const std::size_t length = static_cast(last - first); + const std::size_t exponent_offset = exponent_marker_offset(first, length); + parse_last = first + exponent_offset; + } + parsed_ok = detail::parse_flt(first, parse_last, parsed, &end); } - typename Traits::value_type parsed{}; - const char* end = nullptr; - if (!detail::parse_flt(buffer, parsed, &end) || end == buffer) + if (!parsed_ok || end == first) return { first, std::errc::invalid_argument }; if (fmt == std::chars_format::scientific && - !begins_special(buffer) && - !has_exponent_marker(buffer, end)) + signed_special_token_length(first, last) == 0 && + !has_exponent_marker(first, end)) { return { first, std::errc::invalid_argument }; } value = parsed; - return { first + (end - buffer), std::errc{} }; + return { end, std::errc{} }; + } + + template + [[nodiscard]] BL_FORCE_INLINE std::from_chars_result native_from_chars( + const char* first, + const char* last, + typename Traits::value_type& value, + std::chars_format fmt) noexcept + { + if constexpr (requires { std::from_chars(first, last, value, fmt); }) + { + typename Traits::value_type parsed = value; + auto result = std::from_chars(first, last, parsed, fmt); + if (result.ec == std::errc::invalid_argument && + signed_special_token_length(first, last) != 0) [[unlikely]] + { + result = parse_special_from_chars(first, last, parsed); + } + + // Some floating from_chars implementations report success and + // store infinity for a finite token outside the native range. + // Preserve the standard-shaped error and transactional output + // contract at the bl::from_chars boundary. + if (result.ec == std::errc{} && + signed_special_token_length(first, last) == 0 && + Traits::isinf(parsed)) [[unlikely]] + { + return { result.ptr, std::errc::result_out_of_range }; + } + + if (result.ec == std::errc{}) + value = parsed; + return result; + } + else + { + typename Traits::value_type parsed = value; + const auto result = from_chars_impl( + first, last, parsed, fmt); + if (result.ec == std::errc{} && + signed_special_token_length(first, last) == 0 && + Traits::isinf(parsed)) [[unlikely]] + { + return { result.ptr, std::errc::result_out_of_range }; + } + + if (result.ec == std::errc{}) + value = parsed; + return result; + } } } // namespace bl::detail::charconv namespace bl { + template + struct parse_result + { + T value{}; + std::size_t consumed = 0; + std::errc ec{}; + + [[nodiscard]] constexpr explicit operator bool() const noexcept + { + return ec == std::errc{}; + } + }; + + namespace detail::charconv + { + [[nodiscard]] BL_NO_INLINE parse_result parse_runtime_f128_s( + std::string_view text, + std::chars_format fmt) noexcept; + + [[nodiscard]] BL_NO_INLINE parse_result parse_runtime_f128( + std::string_view text, + std::chars_format fmt) noexcept; + + [[nodiscard]] BL_NO_INLINE parse_result parse_runtime_f256_s( + std::string_view text, + std::chars_format fmt) noexcept; + + [[nodiscard]] BL_NO_INLINE parse_result parse_runtime_f256( + std::string_view text, + std::chars_format fmt) noexcept; + } + + [[nodiscard]] inline std::to_chars_result to_chars( + char* first, + char* last, + f32 value) noexcept + { + return std::to_chars(first, last, value); + } + + [[nodiscard]] inline std::to_chars_result to_chars( + char* first, + char* last, + f32 value, + std::chars_format fmt) noexcept + { + return std::to_chars(first, last, value, fmt); + } + + [[nodiscard]] inline std::to_chars_result to_chars( + char* first, + char* last, + f32 value, + std::chars_format fmt, + int precision) noexcept + { + return std::to_chars(first, last, value, fmt, precision); + } + + [[nodiscard]] inline std::from_chars_result from_chars( + const char* first, + const char* last, + f32& value, + std::chars_format fmt = std::chars_format::general) noexcept + { + return detail::charconv::native_from_chars(first, last, value, fmt); + } + + [[nodiscard]] inline std::to_chars_result to_chars( + char* first, + char* last, + f64 value) noexcept + { + return std::to_chars(first, last, value); + } + + [[nodiscard]] inline std::to_chars_result to_chars( + char* first, + char* last, + f64 value, + std::chars_format fmt) noexcept + { + return std::to_chars(first, last, value, fmt); + } + + [[nodiscard]] inline std::to_chars_result to_chars( + char* first, + char* last, + f64 value, + std::chars_format fmt, + int precision) noexcept + { + return std::to_chars(first, last, value, fmt, precision); + } + + [[nodiscard]] inline std::from_chars_result from_chars( + const char* first, + const char* last, + f64& value, + std::chars_format fmt = std::chars_format::general) noexcept + { + return detail::charconv::native_from_chars(first, last, value, fmt); + } + [[nodiscard]] constexpr std::to_chars_result to_chars( char* first, char* last, @@ -188,6 +374,8 @@ namespace bl { const int precision = fmt == std::chars_format::general ? std::numeric_limits::max_digits10 + : fmt == std::chars_format::hex + ? -1 : 6; return detail::charconv::to_chars_impl( first, @@ -212,7 +400,7 @@ namespace bl precision); } - [[nodiscard]] std::from_chars_result from_chars( + [[nodiscard]] inline std::from_chars_result from_chars( const char* first, const char* last, f128_s& value, @@ -242,6 +430,8 @@ namespace bl { const int precision = fmt == std::chars_format::general ? std::numeric_limits::max_digits10 + : fmt == std::chars_format::hex + ? -1 : 6; return detail::charconv::to_chars_impl( @@ -267,7 +457,7 @@ namespace bl precision); } - [[nodiscard]] std::from_chars_result from_chars( + [[nodiscard]] inline std::from_chars_result from_chars( const char* first, const char* last, f256_s& value, @@ -276,6 +466,324 @@ namespace bl return detail::charconv::from_chars_impl(first, last, value, fmt); } + namespace detail::charconv + { + template + struct dependent_false : std::false_type {}; + + template + inline constexpr bool unqualified_parse_value = + std::is_same_v>; + + template + struct parse_traits_for + { + static constexpr bool supported = false; + }; + + template<> + struct parse_traits_for + { + static constexpr bool supported = true; + using traits = detail::_native_float_io::f32_io_traits; + }; + + template<> + struct parse_traits_for + { + static constexpr bool supported = true; + using traits = detail::_native_float_io::f64_io_traits; + }; + + template<> + struct parse_traits_for + { + static constexpr bool supported = true; + using traits = detail::_f128::f128_io_traits; + }; + + template<> + struct parse_traits_for + { + static constexpr bool supported = true; + using traits = detail::_f128::f128_io_traits; + }; + + template<> + struct parse_traits_for + { + static constexpr bool supported = true; + using traits = detail::_f256::f256_io_traits; + }; + + template<> + struct parse_traits_for + { + static constexpr bool supported = true; + using traits = detail::_f256::f256_io_traits; + }; + + [[nodiscard]] BL_FORCE_INLINE constexpr bool has_hex_float_prefix(std::string_view text) noexcept + { + std::size_t index = 0; + if (!text.empty() && (text[0] == '-' || text[0] == '+')) + index = 1; + + return text.size() >= index + 2 && + text[index] == '0' && + ascii_lower(text[index + 1]) == 'x'; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr std::chars_format effective_parse_format( + std::string_view text, + std::chars_format fmt) noexcept + { + return fmt == std::chars_format::general && has_hex_float_prefix(text) + ? std::chars_format::hex + : fmt; + } + + template + [[nodiscard]] constexpr std::from_chars_result from_chars_constexpr_range( + const char* first, + const char* last, + typename Traits::value_type& value, + std::chars_format fmt, + bool allow_hex_prefix = false, + bool allow_leading_plus = false) noexcept + { + if (!supported_output_format(fmt)) + return { first, std::errc::invalid_argument }; + + if (first == last || ascii_space(*first)) + return { first, std::errc::invalid_argument }; + + if (*first == '+' && !allow_leading_plus) + return { first, std::errc::invalid_argument }; + + typename Traits::value_type parsed{}; + const char* end = nullptr; + bool parsed_ok = false; + if (fmt == std::chars_format::hex) + { + parsed_ok = detail::parse_hex_float( + first, + last, + parsed, + &end, + allow_hex_prefix, + allow_leading_plus); + } + else + { + const char* parse_last = last; + if (fmt == std::chars_format::fixed) + { + const std::size_t length = static_cast(last - first); + const std::size_t exponent_offset = exponent_marker_offset(first, length); + parse_last = first + exponent_offset; + } + parsed_ok = detail::parse_flt(first, parse_last, parsed, &end); + } + + if (!parsed_ok || end == first) + return { first, std::errc::invalid_argument }; + + if (fmt == std::chars_format::scientific && + signed_special_token_length(first, last) == 0 && + !has_exponent_marker(first, end)) + { + return { first, std::errc::invalid_argument }; + } + + value = parsed; + return { end, std::errc{} }; + } + + template + [[nodiscard]] constexpr parse_result parse_constexpr( + std::string_view text, + std::chars_format fmt) noexcept + { + using Traits = typename parse_traits_for::traits; + const std::chars_format effective_fmt = effective_parse_format(text, fmt); + const bool allow_hex_prefix = effective_fmt == std::chars_format::hex; + + parse_result result{}; + + if (text.empty()) + { + result.ec = std::errc::invalid_argument; + return result; + } + + const char* first = text.data(); + const char* last = first + text.size(); + typename Traits::value_type parsed{}; + const auto parsed_result = from_chars_constexpr_range( + first, + last, + parsed, + effective_fmt, + allow_hex_prefix, + true); + + result.consumed = static_cast(parsed_result.ptr - first); + result.ec = parsed_result.ec; + if (result.ec == std::errc{} && result.consumed != text.size()) + result.ec = std::errc::invalid_argument; + + if (result.ec == std::errc{}) + result.value = T{ parsed }; + + return result; + } + + template + [[nodiscard]] parse_result parse_runtime( + std::string_view text, + std::chars_format fmt) noexcept + { + parse_result result{}; + + if (text.empty()) + { + result.ec = std::errc::invalid_argument; + return result; + } + + const std::chars_format effective_fmt = effective_parse_format(text, fmt); + const bool use_flexible_hex = effective_fmt == std::chars_format::hex; + const bool allow_leading_plus = !text.empty() && text[0] == '+'; + + T parsed{}; + std::from_chars_result parsed_result{}; + if (use_flexible_hex || allow_leading_plus) + { + using Traits = typename parse_traits_for::traits; + typename Traits::value_type traits_value{}; + const auto traits_result = from_chars_constexpr_range( + text.data(), + text.data() + text.size(), + traits_value, + effective_fmt, + use_flexible_hex, + allow_leading_plus); + parsed = T{ traits_value }; + parsed_result = { traits_result.ptr, traits_result.ec }; + } + else + { + parsed_result = bl::from_chars(text.data(), text.data() + text.size(), parsed, effective_fmt); + } + result.consumed = static_cast(parsed_result.ptr - text.data()); + result.ec = parsed_result.ec; + if (result.ec == std::errc{} && result.consumed != text.size()) + result.ec = std::errc::invalid_argument; + + if (result.ec == std::errc{}) + result.value = parsed; + + return result; + } + + template + [[nodiscard]] parse_result parse_runtime_dispatch( + std::string_view text, + std::chars_format fmt) noexcept + { + if constexpr (std::is_same_v) + return parse_runtime_f128_s(text, fmt); + else if constexpr (std::is_same_v) + return parse_runtime_f128(text, fmt); + else if constexpr (std::is_same_v) + return parse_runtime_f256_s(text, fmt); + else if constexpr (std::is_same_v) + return parse_runtime_f256(text, fmt); + else + return parse_runtime(text, fmt); + } + + } // namespace detail::charconv + + template + [[nodiscard]] constexpr parse_result try_parse( + std::string_view text, + std::chars_format fmt = std::chars_format::general) noexcept + { + static_assert( + detail::charconv::unqualified_parse_value, + "bl::parse and bl::try_parse expect T to be an unqualified value type, such as bl::f256." + ); + + if constexpr (!detail::charconv::parse_traits_for::supported) + { + static_assert( + detail::charconv::dependent_false::value, + "bl::parse and bl::try_parse support bl::f32, bl::f64, bl::f128, bl::f128_s, bl::f256, and bl::f256_s." + ); + } + else + { + #if BL_FP_BARRIER_ACTIVE + if constexpr ( + std::is_same_v || std::is_same_v || + std::is_same_v || std::is_same_v) + return detail::charconv::parse_constexpr(text, fmt); + #endif + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::charconv::parse_constexpr(text, fmt), + detail::charconv::parse_runtime_dispatch(text, fmt) + ); + } + } + + template + [[nodiscard]] constexpr bool try_parse( + std::string_view text, + T& out, + std::chars_format fmt = std::chars_format::general) noexcept + { + using value_type = std::remove_cvref_t; + const auto parsed = try_parse(text, fmt); + if (!parsed) + return false; + + out = parsed.value; + return true; + } + + template + [[nodiscard]] constexpr Value parse( + std::string_view text, + Value fallback, + std::chars_format fmt = std::chars_format::general) noexcept + { + const auto parsed = try_parse(text, fmt); + return parsed ? parsed.value : fallback; + } + + template + [[nodiscard]] constexpr Value parse( + std::string_view text, + std::chars_format fmt = std::chars_format::general) + { + const auto parsed = try_parse(text, fmt); + if (!parsed) + { + switch (parsed.ec) + { + case std::errc::invalid_argument: + throw std::invalid_argument("bl::parse invalid input"); + case std::errc::result_out_of_range: + throw std::out_of_range("bl::parse input out of range"); + default: + throw std::logic_error("bl::parse unexpected error code"); + } + } + return parsed.value; + } + } // namespace bl #endif diff --git a/include/fltx/config.h b/include/fltx/config.h index ac59fd0..73d9ea1 100644 --- a/include/fltx/config.h +++ b/include/fltx/config.h @@ -12,6 +12,97 @@ #include #include +#ifndef BL_CXX_LANGUAGE_VERSION + #if defined(_MSVC_LANG) && (!defined(__cplusplus) || (_MSVC_LANG > __cplusplus)) + #define BL_CXX_LANGUAGE_VERSION _MSVC_LANG + #else + #define BL_CXX_LANGUAGE_VERSION __cplusplus + #endif +#endif + +#if BL_CXX_LANGUAGE_VERSION < 202002L +#error fltx requires C++20 or newer. +#endif + +#ifndef BL_HAS_IF_CONSTEVAL + #if defined(__INTELLISENSE__) && defined(_MSC_VER) && !defined(__clang__) && \ + (BL_CXX_LANGUAGE_VERSION <= 202002L) + // IntelliSense does not consistently parse MSVC's C++20 if-consteval + // extension. Use the portable spelling for editor analysis only; the + // compiler never defines __INTELLISENSE__ and retains if consteval. + #define BL_HAS_IF_CONSTEVAL 0 + #elif defined(__cpp_if_consteval) && (__cpp_if_consteval >= 202106L) + #define BL_HAS_IF_CONSTEVAL 1 + #elif defined(_MSC_VER) && !defined(__clang__) && \ + defined(__cpp_consteval) && (_MSC_VER >= 1936) + // MSVC accepts C++23's if consteval in C++20 mode as extension C5282. + // Using it avoids a severe optimizer/code-size regression in large + // constexpr/runtime dispatch graphs. + #define BL_HAS_IF_CONSTEVAL 1 + #define BL_IF_CONSTEVAL_MSVC_CXX20_EXTENSION 1 + #elif defined(__GNUC__) && !defined(__clang__) && (__GNUC__ >= 12) + // GCC's standard C++20 branch optimizes well at -O2, but at -O0 it can + // retain and force-inline the constexpr graph into runtime code. GCC 12+ + // accepts if consteval in C++20 mode and discards that graph correctly. + #define BL_HAS_IF_CONSTEVAL 1 + #define BL_IF_CONSTEVAL_GCC_CXX20_EXTENSION 1 + #else + #define BL_HAS_IF_CONSTEVAL 0 + #endif +#endif + +#if defined(_MSC_VER) && !defined(__clang__) && !defined(__INTELLISENSE__) && \ + (BL_CXX_LANGUAGE_VERSION <= 202002L) && !BL_HAS_IF_CONSTEVAL +#error fltx C++20 support requires MSVC 19.36 or newer; upgrade MSVC or compile as C++23. +#endif + +#if defined(__GNUC__) && !defined(__clang__) && \ + (BL_CXX_LANGUAGE_VERSION <= 202002L) && !BL_HAS_IF_CONSTEVAL +#error fltx C++20 support requires GCC 12 or newer; upgrade GCC or compile as C++23. +#endif + +#if !BL_HAS_IF_CONSTEVAL +#include +#endif + +#if defined(BL_IF_CONSTEVAL_MSVC_CXX20_EXTENSION) + #define BL_IF_CONSTEVAL_WARNING_PUSH \ + __pragma(warning(push)) \ + __pragma(warning(disable: 5282)) + #define BL_IF_CONSTEVAL_WARNING_POP __pragma(warning(pop)) +#elif defined(BL_IF_CONSTEVAL_GCC_CXX20_EXTENSION) + #define BL_IF_CONSTEVAL_WARNING_PUSH \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wc++23-extensions\"") + #define BL_IF_CONSTEVAL_WARNING_POP _Pragma("GCC diagnostic pop") +#else + #define BL_IF_CONSTEVAL_WARNING_PUSH + #define BL_IF_CONSTEVAL_WARNING_POP +#endif + +#if defined(_MSC_VER) && !defined(__clang__) + #define BL_DEPRECATED_DECLARATIONS_WARNING_PUSH \ + __pragma(warning(push)) \ + __pragma(warning(disable: 4996)) + #define BL_DEPRECATED_DECLARATIONS_WARNING_POP __pragma(warning(pop)) +#elif defined(__clang__) || defined(__GNUC__) + #define BL_DEPRECATED_DECLARATIONS_WARNING_PUSH \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") + #define BL_DEPRECATED_DECLARATIONS_WARNING_POP _Pragma("GCC diagnostic pop") +#else + #define BL_DEPRECATED_DECLARATIONS_WARNING_PUSH + #define BL_DEPRECATED_DECLARATIONS_WARNING_POP +#endif + +#if BL_HAS_IF_CONSTEVAL + #define BL_IF_CONSTEVAL if consteval +#else + #define BL_IF_CONSTEVAL if (std::is_constant_evaluated()) +#endif + +// Environment checks + static_assert(sizeof(double) == sizeof(std::uint64_t), "fltx requires double to be 64 bits."); @@ -22,267 +113,478 @@ static_assert(std::numeric_limits::is_iec559 && std::numeric_limits::max_exponent == 1024, "fltx requires double to use the IEEE 754 binary64 format."); -#ifndef BL_FORCE_INLINE -#if defined(_MSC_VER) -#define BL_FORCE_INLINE __forceinline -#elif defined(__clang__) || defined(__GNUC__) -#define BL_FORCE_INLINE inline __attribute__((always_inline)) +#if !defined(NDEBUG) && defined(_MSC_VER) +#define BL_CONSTEXPR_DEBUG_ASSERT(cond, msg) \ + do \ + { \ + BL_IF_CONSTEVAL_WARNING_PUSH \ + BL_IF_CONSTEVAL \ + { \ + if (!(cond)) \ + throw msg; \ + } \ + else \ + { \ + if (!(cond)) \ + __debugbreak(); \ + } \ + BL_IF_CONSTEVAL_WARNING_POP \ + } while (false) +#elif !defined(NDEBUG) && (defined(__clang__) || defined(__GNUC__)) +#define BL_CONSTEXPR_DEBUG_ASSERT(cond, msg) \ + do \ + { \ + BL_IF_CONSTEVAL_WARNING_PUSH \ + BL_IF_CONSTEVAL \ + { \ + if (!(cond)) \ + throw msg; \ + } \ + else \ + { \ + if (!(cond)) \ + __builtin_trap(); \ + } \ + BL_IF_CONSTEVAL_WARNING_POP \ + } while (false) #else -#define BL_FORCE_INLINE inline +#define BL_CONSTEXPR_DEBUG_ASSERT(cond, msg) \ + do \ + { \ + BL_IF_CONSTEVAL_WARNING_PUSH \ + BL_IF_CONSTEVAL \ + { \ + if (!(cond)) \ + throw msg; \ + } \ + BL_IF_CONSTEVAL_WARNING_POP \ + } while (false) #endif + +#ifndef FLTX_FAST_MATH + #if defined(__FAST_MATH__) + #define FLTX_FAST_MATH + #elif defined(_MSC_VER) && defined(_M_FP_FAST) + #define FLTX_FAST_MATH + #endif #endif -#ifndef BL_NO_INLINE -#if defined(_MSC_VER) -#define BL_NO_INLINE __declspec(noinline) -#elif defined(__clang__) || defined(__GNUC__) -#define BL_NO_INLINE __attribute__((noinline)) +// Preserve explicit floating-point evaluation boundaries when a compiler's +// fast-math transformations would otherwise reassociate across them. Other +// platforms can provide a different implementation with the same semantics. +#if defined(__EMSCRIPTEN__) && defined(__clang__) && defined(__wasm32__) && \ + (defined(FLTX_FAST_MATH) || \ + defined(FLTX_DETAIL_COMPILED_RUNTIME_FP_BARRIERS)) +#define BL_FP_BARRIER_ACTIVE 1 +#define BL_FP_BARRIER_RUNTIME(value) __asm__ __volatile__("" : "+r"(value)) +#elif defined(__MINGW32__) && defined(__GNUC__) && !defined(__clang__) && \ + defined(__SSE2__) && \ + (defined(FLTX_FAST_MATH) || \ + defined(FLTX_DETAIL_COMPILED_RUNTIME_FP_BARRIERS)) +#define BL_FP_BARRIER_ACTIVE 1 +#define BL_FP_BARRIER_RUNTIME(value) __asm__ __volatile__("" : "+x"(value)) #else -#define BL_NO_INLINE -#endif +#define BL_FP_BARRIER_ACTIVE 0 +#define BL_FP_BARRIER_RUNTIME(value) ((void)0) #endif -// Use when pairing BL_NO_INLINE with constexpr -#if defined(_MSC_VER) -#define BL_MSVC_NOINLINE BL_NO_INLINE +#if BL_FP_BARRIER_ACTIVE +#define BL_FP_BARRIER(value) \ + do \ + { \ + BL_IF_CONSTEVAL_WARNING_PUSH \ + BL_IF_CONSTEVAL \ + { \ + } \ + else \ + { \ + BL_FP_BARRIER_RUNTIME(value); \ + } \ + BL_IF_CONSTEVAL_WARNING_POP \ + } while (false) #else -#define BL_MSVC_NOINLINE +#define BL_FP_BARRIER(value) ((void)0) +#endif + +// Inlining policy: +// +// - Tiny leaf helpers are force-inlined when the call overhead is a poor tradeoff. +// +// - Medium internal helpers may be force-inlined, but only when their main callers +// are large out-of-line runtime bodies. This lets those .cpp implementations be +// optimized aggressively once, without copying the whole call graph into every +// user translation unit. +// +// - Large functions should stay out-of-line. Parsing, formatting, transcendental +// math, and other heavy implementations are too expensive to inline/optimize at +// every call site. +// +// - Public wrappers should stay thin: either inline a genuinely tiny operation, +// or dispatch to an out-of-line implementation. Avoid making public headers +// pull large optimization graphs into consumer builds. + +#ifndef BL_FORCE_INLINE + #if defined(_MSC_VER) + #define BL_FORCE_INLINE __forceinline + #elif defined(__clang__) || defined(__GNUC__) + #define BL_FORCE_INLINE inline __attribute__((always_inline)) + #else + #define BL_FORCE_INLINE inline + #endif #endif -#ifndef FLTX_INLINE_LEVEL -#define FLTX_INLINE_LEVEL 2 +#ifndef BL_NO_INLINE + #if defined(_MSC_VER) + #define BL_NO_INLINE __declspec(noinline) + #elif defined(__clang__) || defined(__GNUC__) + #define BL_NO_INLINE __attribute__((noinline)) + #else + #define BL_NO_INLINE + #endif #endif -// Base inline aggressiveness (adjustable) -#if FLTX_INLINE_LEVEL >= 2 -#define FLTX_CORE_INLINE BL_FORCE_INLINE -#elif FLTX_INLINE_LEVEL == 1 -#define FLTX_CORE_INLINE +#ifndef BL_VECTORCALL + // ABI-affecting optimization: apply only to individually benchmarked runtime + // entry points. Callers and the compiled library must see the same declaration. + #if defined(_MSC_VER) + #define BL_VECTORCALL __vectorcall + #else + #define BL_VECTORCALL + #endif +#endif + +// MSVC-only noinline pressure valve for constexpr helpers that otherwise cause excessive +// optimization work; GCC/Clang retain control of their own inlining decisions. + +#if defined(_MSC_VER) + #define BL_MSVC_NOINLINE BL_NO_INLINE #else -#define FLTX_CORE_INLINE BL_MSVC_NOINLINE + #define BL_MSVC_NOINLINE #endif -#ifndef BL_FAST_MATH -#if defined(__FAST_MATH__) -#define BL_FAST_MATH -#elif defined(_MSC_VER) && defined(_M_FP_FAST) -#define BL_FAST_MATH +// Public-header feature policy. CMake may define these macros on fltx::fltx, +// but they are intentionally just policy switches, not CPU or FP compiler flags. + +#if !defined(FLTX_HEADER_SIMD_OFF) +#define FLTX_HEADER_SIMD_OFF 0 #endif + +#if !defined(FLTX_HEADER_FMA_AUTO) +#define FLTX_HEADER_FMA_AUTO 0 #endif -#ifndef BL_PRINT_NOINLINE -#if defined(_MSC_VER) && defined(BL_FAST_MATH) -#define BL_PRINT_NOINLINE __declspec(noinline) -#else -#define BL_PRINT_NOINLINE +#if !defined(FLTX_HEADER_FMA_OFF) +#define FLTX_HEADER_FMA_OFF 0 #endif + +#if !defined(FLTX_HEADER_FMA_ASSUME) +#define FLTX_HEADER_FMA_ASSUME 0 #endif -#if !defined(FLTX_DISABLE_FMA_AVAILABLE) -#ifndef FMA_AVAILABLE -#ifndef __EMSCRIPTEN__ -#if defined(__FMA__) || defined(__FMA4__) || defined(_MSC_VER) || defined(__clang__) -#define FMA_AVAILABLE +#if !defined(FLTX_HAS_COMPILED_X86_FMA_BACKEND) +#define FLTX_HAS_COMPILED_X86_FMA_BACKEND 0 #endif + +#if (FLTX_HEADER_FMA_AUTO + FLTX_HEADER_FMA_OFF + FLTX_HEADER_FMA_ASSUME) == 0 +#undef FLTX_HEADER_FMA_AUTO +#define FLTX_HEADER_FMA_AUTO 1 #endif + +#if (FLTX_HEADER_FMA_AUTO + FLTX_HEADER_FMA_OFF + FLTX_HEADER_FMA_ASSUME) > 1 +#error Select only one fltx header FMA policy: AUTO, OFF, or ASSUME. #endif + +#if !defined(FLTX_X86_TARGET) + #if !defined(__EMSCRIPTEN__) && \ + (defined(__x86_64__) || defined(__i386__) || defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86)) + #define FLTX_X86_TARGET 1 + #else + #define FLTX_X86_TARGET 0 + #endif #endif -#if defined(_MSC_VER) -#ifndef BL_PUSH_PRECISE -#define BL_PUSH_PRECISE __pragma(float_control(precise, on, push)) \ - __pragma(fp_contract(off)) +#if !defined(FLTX_ARM64_TARGET) + #if !defined(__EMSCRIPTEN__) && (defined(__aarch64__) || defined(_M_ARM64)) + #define FLTX_ARM64_TARGET 1 + #else + #define FLTX_ARM64_TARGET 0 + #endif #endif -#ifndef BL_POP_PRECISE -#define BL_POP_PRECISE __pragma(float_control(pop)) + +#if !defined(FLTX_TU_HAS_X86_FMA) + #if FLTX_X86_TARGET && (defined(__FMA__) || \ + (defined(_MSC_VER) && (defined(__AVX2__) || defined(__AVX512F__) || defined(_M_AVX2)))) + #define FLTX_TU_HAS_X86_FMA 1 + #else + #define FLTX_TU_HAS_X86_FMA 0 + #endif #endif -#elif defined(__EMSCRIPTEN__) -#ifndef BL_PUSH_PRECISE -#define BL_PUSH_PRECISE _Pragma("clang fp reassociate(off)") \ - _Pragma("clang fp contract(off)") + +#if FLTX_HEADER_FMA_ASSUME && !FLTX_X86_TARGET && !FLTX_ARM64_TARGET +#error FLTX_HEADER_FMA_ASSUME requires a target with baseline or explicitly enabled hardware FMA. #endif -#ifndef BL_POP_PRECISE -#define BL_POP_PRECISE _Pragma("clang fp reassociate(on)") \ - _Pragma("clang fp contract(fast)") + +#if FLTX_HEADER_FMA_ASSUME && FLTX_X86_TARGET && \ + (!defined(_MSC_VER) || defined(__clang__)) && !FLTX_TU_HAS_X86_FMA +#error FLTX_HEADER_FMA_ASSUME requires GNU/Clang translation units to be compiled with FMA enabled, for example -mfma or /clang:-mfma. #endif -#elif defined(__clang__) -// Clang's fp pragmas here do not restore a previous stack state. Keep strict -// FP semantics after protected blocks; expansion arithmetic relies on it. -#ifndef BL_PUSH_PRECISE -#define BL_PUSH_PRECISE _Pragma("clang fp reassociate(off)") \ - _Pragma("clang fp contract(off)") + +#if !defined(FLTX_HAS_X86_FMA) + #if !FLTX_HEADER_FMA_OFF && FLTX_X86_TARGET && (FLTX_TU_HAS_X86_FMA || FLTX_HEADER_FMA_ASSUME) + #define FLTX_HAS_X86_FMA 1 + #else + #define FLTX_HAS_X86_FMA 0 + #endif #endif -#ifndef BL_POP_PRECISE -#define BL_POP_PRECISE _Pragma("clang fp reassociate(off)") \ - _Pragma("clang fp contract(off)") + +#if !defined(FLTX_MSVC_GUARDED_X86_FMA) + #if FLTX_HEADER_FMA_AUTO && FLTX_X86_TARGET && defined(_MSC_VER) && \ + !defined(__clang__) && !FLTX_HAS_X86_FMA + #define FLTX_MSVC_GUARDED_X86_FMA 1 + #else + #define FLTX_MSVC_GUARDED_X86_FMA 0 + #endif #endif -#elif defined(__GNUC__) -#ifndef BL_PUSH_PRECISE -#define BL_PUSH_PRECISE _Pragma("GCC push_options") \ - _Pragma("GCC optimize(\"no-fast-math\")") \ - _Pragma("STDC FP_CONTRACT OFF") + +#if !defined(FLTX_CLANGCL_TARGETED_X86_FMA) + #if FLTX_HEADER_FMA_AUTO && FLTX_X86_TARGET && defined(_MSC_VER) && \ + defined(__clang__) && !FLTX_HAS_X86_FMA + #if !__has_attribute(target) + #error fltx requires Clang target attributes for baseline-safe AUTO FMA dispatch under clang-cl. + #endif + #define FLTX_CLANGCL_TARGETED_X86_FMA 1 + #else + #define FLTX_CLANGCL_TARGETED_X86_FMA 0 + #endif #endif -#ifndef BL_POP_PRECISE -#define BL_POP_PRECISE _Pragma("GCC pop_options") + +#if !defined(FLTX_GUARDED_X86_FMA) + #if FLTX_MSVC_GUARDED_X86_FMA || FLTX_CLANGCL_TARGETED_X86_FMA + #define FLTX_GUARDED_X86_FMA 1 + #else + #define FLTX_GUARDED_X86_FMA 0 + #endif #endif + +#if FLTX_CLANGCL_TARGETED_X86_FMA + #define FLTX_X86_FMA_LEAF_INLINE inline __attribute__((target("fma"))) + #if __has_attribute(flatten) + #define FLTX_X86_FMA_KERNEL_INLINE \ + inline __attribute__((target("fma"), flatten)) + #else + #define FLTX_X86_FMA_KERNEL_INLINE inline __attribute__((target("fma"))) + #endif #else -#define BL_PUSH_PRECISE -#define BL_POP_PRECISE + #define FLTX_X86_FMA_LEAF_INLINE BL_FORCE_INLINE + #define FLTX_X86_FMA_KERNEL_INLINE BL_FORCE_INLINE #endif -namespace bl -{ - #if defined(FLTX_SIMULATE_CONSTEVAL_MODE) - namespace _fltx_debug { +#if !defined(FLTX_X86_FMA_RUNTIME_CHECK) + #if FLTX_GUARDED_X86_FMA || \ + (FLTX_HEADER_FMA_AUTO && FLTX_X86_TARGET && \ + FLTX_HAS_COMPILED_X86_FMA_BACKEND && !FLTX_TU_HAS_X86_FMA) + #define FLTX_X86_FMA_RUNTIME_CHECK 1 + #else + #define FLTX_X86_FMA_RUNTIME_CHECK 0 + #endif +#endif - inline bool simulate_consteval_path = false; +#if !defined(FLTX_USE_SCALAR_X86_FMA) + #if FLTX_HAS_X86_FMA + #define FLTX_USE_SCALAR_X86_FMA 1 + #else + #define FLTX_USE_SCALAR_X86_FMA 0 + #endif +#endif - BL_FORCE_INLINE void set_simulated_consteval_path(bool enabled) noexcept { simulate_consteval_path = enabled; } - BL_FORCE_INLINE void set_forced_constexpr_path() noexcept { set_simulated_consteval_path(true); } - BL_FORCE_INLINE void set_forced_runtime_path() noexcept { set_simulated_consteval_path(false); } +#if !defined(FLTX_USE_BASELINE_ARM64_FMA) + #if !FLTX_HEADER_FMA_OFF && FLTX_ARM64_TARGET + #define FLTX_USE_BASELINE_ARM64_FMA 1 + #else + #define FLTX_USE_BASELINE_ARM64_FMA 0 + #endif +#endif - } // namespace _fltx_debug +#if !defined(FLTX_HAS_RUNTIME_FMA_PATH) + #if FLTX_USE_SCALAR_X86_FMA || FLTX_GUARDED_X86_FMA || \ + FLTX_USE_BASELINE_ARM64_FMA + #define FLTX_HAS_RUNTIME_FMA_PATH 1 + #else + #define FLTX_HAS_RUNTIME_FMA_PATH 0 + #endif +#endif +#if defined(_MSC_VER) + #ifndef BL_PUSH_PRECISE + #define BL_PUSH_PRECISE __pragma(float_control(precise, on, push)) \ + __pragma(fp_contract(off)) + #endif + #ifndef BL_POP_PRECISE + #define BL_POP_PRECISE __pragma(float_control(pop)) + #endif +#elif defined(__EMSCRIPTEN__) + // WebAssembly Clang does not support the float_control push/pop stack. + // Restore the incoming mode explicitly after each protected EFT block. + #ifndef BL_PUSH_PRECISE + #define BL_PUSH_PRECISE _Pragma("clang fp reassociate(off)") \ + _Pragma("clang fp contract(off)") + #endif + #ifndef BL_POP_PRECISE + #if defined(__FAST_MATH__) + #define BL_POP_PRECISE _Pragma("clang fp reassociate(on)") \ + _Pragma("clang fp contract(fast)") + #elif defined(FLTX_DETAIL_FP_CONTRACT_FAST) + #define BL_POP_PRECISE _Pragma("clang fp reassociate(off)") \ + _Pragma("clang fp contract(fast)") + #else + #define BL_POP_PRECISE _Pragma("clang fp reassociate(off)") \ + _Pragma("clang fp contract(off)") #endif + #endif +#elif defined(__clang__) + // Clang supports the same file-scope float_control stack as MSVC. Keep + // contraction disabled inside EFT declarations and restore the exact + // incoming translation-unit mode afterwards. + #ifndef BL_PUSH_PRECISE + #define BL_PUSH_PRECISE _Pragma("float_control(precise, on, push)") \ + _Pragma("clang fp contract(off)") + #endif + #ifndef BL_POP_PRECISE + #define BL_POP_PRECISE _Pragma("float_control(pop)") + #endif +#elif defined(__GNUC__) + #ifndef BL_PUSH_PRECISE + #define BL_PUSH_PRECISE _Pragma("GCC push_options") \ + _Pragma("GCC optimize(\"no-fast-math\")") \ + _Pragma("STDC FP_CONTRACT OFF") + #endif + #ifndef BL_POP_PRECISE + #define BL_POP_PRECISE _Pragma("GCC pop_options") + #endif +#else + #define BL_PUSH_PRECISE + #define BL_POP_PRECISE +#endif + +// Improves pow/cosh/sinh/lgamma domain scores with minimal overhead (default on) +#if !defined(FLTX_DISABLE_MATH_USES_CHECKED_DEKKER) && !defined(FLTX_MATH_USES_CHECKED_DEKKER) +#define FLTX_MATH_USES_CHECKED_DEKKER +#endif - [[nodiscard]] BL_FORCE_INLINE constexpr bool is_constant_evaluated() noexcept +namespace bl +{ + namespace detail { - // In simulated-consteval mode, tests can run ordinary runtime calls - // through the branches that would be selected during constant - // evaluation. FLTX_CONSTEXPR_PARITY itself is intentionally not part of - // this decision; it requests bitwise-compatible results, not forced - // constexpr-path execution. - if consteval + [[nodiscard]] BL_FORCE_INLINE constexpr bool is_constant_evaluated() noexcept { + // Fixed simulated-consteval mode runs every constexpr-capable branch + // at runtime for accuracy testing and performance profiling. + BL_IF_CONSTEVAL_WARNING_PUSH + BL_IF_CONSTEVAL + { + return true; + } + BL_IF_CONSTEVAL_WARNING_POP + + #if defined(FLTX_SIMULATE_FIXED_CONSTEVAL_MODE) return true; + #else + return false; + #endif } - #if defined(FLTX_SIMULATE_CONSTEVAL_MODE) - return _fltx_debug::simulate_consteval_path; - #else - return false; - #endif - } - - [[nodiscard]] BL_FORCE_INLINE constexpr bool use_constexpr_parity() noexcept - { - // Result-parity policy only. Callers may use this to decide whether to - // canonicalization a math result. - #if defined(FLTX_CONSTEXPR_PARITY) - return true; - #else - return false; - #endif - } - - [[nodiscard]] BL_FORCE_INLINE constexpr bool use_constexpr_math() noexcept - { - // Select constexpr-safe math algorithms. In normal builds this tracks - // actual constant evaluation. In FLTX_SIMULATE_CONSTEVAL_MODE, tests can - // force this at runtime to compare predicted consteval results with runtime - // results. - #if defined(FLTX_SIMULATE_CONSTEVAL_MODE) - return is_constant_evaluated() || _fltx_debug::simulate_consteval_path || use_constexpr_parity(); - #else - return is_constant_evaluated() || use_constexpr_parity(); - #endif - } + } // namespace detail } // namespace bl -#ifndef BL_DEFINE_FLOAT_WRAPPER_NUMERIC_LIMITS -#define BL_DEFINE_FLOAT_WRAPPER_NUMERIC_LIMITS(wrapper_type, storage_type) \ -template<> \ -struct std::numeric_limits \ -{ \ - using base = std::numeric_limits; \ - \ - static constexpr bool is_specialized = base::is_specialized; \ - \ - static constexpr wrapper_type min() noexcept { return wrapper_type{ base::min() }; } \ - static constexpr wrapper_type max() noexcept { return wrapper_type{ base::max() }; } \ - static constexpr wrapper_type lowest() noexcept { return wrapper_type{ base::lowest() }; } \ - static constexpr wrapper_type epsilon() noexcept { return wrapper_type{ base::epsilon() }; } \ - static constexpr wrapper_type round_error() noexcept { return wrapper_type{ base::round_error() }; } \ - static constexpr wrapper_type infinity() noexcept { return wrapper_type{ base::infinity() }; } \ - static constexpr wrapper_type quiet_NaN() noexcept { return wrapper_type{ base::quiet_NaN() }; } \ - static constexpr wrapper_type signaling_NaN() noexcept { return wrapper_type{ base::signaling_NaN() }; } \ - static constexpr wrapper_type denorm_min() noexcept { return wrapper_type{ base::denorm_min() }; } \ - \ - static constexpr bool has_infinity = base::has_infinity; \ - static constexpr bool has_quiet_NaN = base::has_quiet_NaN; \ - static constexpr bool has_signaling_NaN = base::has_signaling_NaN; \ - static constexpr int digits = base::digits; \ - static constexpr int digits10 = base::digits10; \ - static constexpr int max_digits10 = base::max_digits10; \ - \ - static constexpr bool is_signed = base::is_signed; \ - static constexpr bool is_integer = base::is_integer; \ - static constexpr bool is_exact = base::is_exact; \ - static constexpr int radix = base::radix; \ - \ - static constexpr int min_exponent = base::min_exponent; \ - static constexpr int max_exponent = base::max_exponent; \ - static constexpr int min_exponent10 = base::min_exponent10; \ - static constexpr int max_exponent10 = base::max_exponent10; \ - \ - static constexpr bool is_iec559 = base::is_iec559; \ - static constexpr bool is_bounded = base::is_bounded; \ - static constexpr bool is_modulo = base::is_modulo; \ - static constexpr bool traps = base::traps; \ - static constexpr bool tinyness_before = base::tinyness_before; \ - \ - static constexpr std::float_round_style round_style = base::round_style; \ -}; -#endif - - -#ifndef BL_CXX_LANGUAGE_VERSION -#if defined(_MSVC_LANG) && (!defined(__cplusplus) || (_MSVC_LANG > __cplusplus)) -#define BL_CXX_LANGUAGE_VERSION _MSVC_LANG -#else -#define BL_CXX_LANGUAGE_VERSION __cplusplus -#endif -#endif - -#if BL_CXX_LANGUAGE_VERSION <= 202002L -#error fltx requires C++23 or newer. -#endif -#if !defined(__cpp_if_consteval) || (__cpp_if_consteval < 202106L) -#error fltx requires C++23 if consteval support. -#endif +// Route public constexpr-capable APIs to the constexpr implementation during +// constant evaluation, and to the optimized runtime implementation otherwise. +// Fixed simulation can force the constexpr path at runtime so its accuracy and +// performance can be measured over the complete runtime-generated corpus. #ifndef BL_CONSTEXPR_RUNTIME_DISPATCH - #if !defined(FLTX_CONSTEXPR_PARITY) && !defined(FLTX_SIMULATE_CONSTEVAL_MODE) + #if defined(FLTX_SIMULATE_FIXED_CONSTEVAL_MODE) #define BL_CONSTEXPR_RUNTIME_DISPATCH(CONSTEVAL_EXPR, RUNTIME_EXPR) \ do \ { \ - if consteval \ + BL_IF_CONSTEVAL_WARNING_PUSH \ + BL_IF_CONSTEVAL \ { \ return (CONSTEVAL_EXPR); \ } \ else \ { \ - return (RUNTIME_EXPR); \ + return (CONSTEVAL_EXPR); \ } \ + BL_IF_CONSTEVAL_WARNING_POP \ } while (false) #else #define BL_CONSTEXPR_RUNTIME_DISPATCH(CONSTEVAL_EXPR, RUNTIME_EXPR) \ do \ { \ - if consteval \ + BL_IF_CONSTEVAL_WARNING_PUSH \ + BL_IF_CONSTEVAL \ { \ return (CONSTEVAL_EXPR); \ } \ else \ { \ - if (bl::use_constexpr_math()) \ - return (CONSTEVAL_EXPR); \ return (RUNTIME_EXPR); \ } \ + BL_IF_CONSTEVAL_WARNING_POP \ } while (false) #endif #endif +// Convenience macro for f128/f128_s and f256/f256_s for identical std::numeric_limits + +#ifndef BL_DEFINE_FLOAT_WRAPPER_NUMERIC_LIMITS +#define BL_DEFINE_FLOAT_WRAPPER_NUMERIC_LIMITS(wrapper_type, storage_type) \ +template<> \ +struct std::numeric_limits \ +{ \ + using base = std::numeric_limits; \ + \ + static constexpr bool is_specialized = base::is_specialized; \ + \ + static constexpr wrapper_type min() noexcept { return wrapper_type{ base::min() }; } \ + static constexpr wrapper_type max() noexcept { return wrapper_type{ base::max() }; } \ + static constexpr wrapper_type lowest() noexcept { return wrapper_type{ base::lowest() }; } \ + static constexpr wrapper_type epsilon() noexcept { return wrapper_type{ base::epsilon() }; } \ + static constexpr wrapper_type round_error() noexcept { return wrapper_type{ base::round_error() }; } \ + static constexpr wrapper_type infinity() noexcept { return wrapper_type{ base::infinity() }; } \ + static constexpr wrapper_type quiet_NaN() noexcept { return wrapper_type{ base::quiet_NaN() }; } \ + static constexpr wrapper_type signaling_NaN() noexcept { return wrapper_type{ base::signaling_NaN() }; } \ + static constexpr wrapper_type denorm_min() noexcept { return wrapper_type{ base::denorm_min() }; } \ + \ + static constexpr bool has_infinity = base::has_infinity; \ + static constexpr bool has_quiet_NaN = base::has_quiet_NaN; \ + static constexpr bool has_signaling_NaN = base::has_signaling_NaN; \ + static constexpr std::float_denorm_style has_denorm = base::has_denorm; \ + static constexpr bool has_denorm_loss = base::has_denorm_loss; \ + static constexpr int digits = base::digits; \ + static constexpr int digits10 = base::digits10; \ + static constexpr int max_digits10 = base::max_digits10; \ + \ + static constexpr bool is_signed = base::is_signed; \ + static constexpr bool is_integer = base::is_integer; \ + static constexpr bool is_exact = base::is_exact; \ + static constexpr int radix = base::radix; \ + \ + static constexpr int min_exponent = base::min_exponent; \ + static constexpr int max_exponent = base::max_exponent; \ + static constexpr int min_exponent10 = base::min_exponent10; \ + static constexpr int max_exponent10 = base::max_exponent10; \ + \ + static constexpr bool is_iec559 = base::is_iec559; \ + static constexpr bool is_bounded = base::is_bounded; \ + static constexpr bool is_modulo = base::is_modulo; \ + static constexpr bool traps = base::traps; \ + static constexpr bool tinyness_before = base::tinyness_before; \ + \ + static constexpr std::float_round_style round_style = base::round_style; \ +}; #endif + +#endif // FLTX_CONFIG_INCLUDED diff --git a/include/fltx/detail/approx_comparison.h b/include/fltx/detail/approx_comparison.h new file mode 100644 index 0000000..a68e102 --- /dev/null +++ b/include/fltx/detail/approx_comparison.h @@ -0,0 +1,63 @@ +/** + * fltx/detail/approx_comparison.h - Shared approximate-comparison mechanics. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#ifndef FLTX_DETAIL_APPROX_COMPARISON_INCLUDED +#define FLTX_DETAIL_APPROX_COMPARISON_INCLUDED + +namespace bl::detail +{ + template + [[nodiscard]] BL_FORCE_INLINE constexpr bool approx_eq_impl( + const Float& value, + const Float& expected, + const Float& relative_tolerance) noexcept + { + const Float zero{ 0.0 }; + if (isnan(relative_tolerance) || relative_tolerance < zero) [[unlikely]] + { + return false; + } + + if (value == expected) + return true; + + if (!isfinite(value) || !isfinite(expected)) [[unlikely]] + return false; + + const Float magnitude_value = abs(value); + const Float magnitude_expected = abs(expected); + const Float scale = magnitude_value < magnitude_expected + ? magnitude_expected + : magnitude_value; + const Float one{ 1.0 }; + const Float two{ 2.0 }; + + // Opposite-sign values need an overflow-safe sum of magnitudes. Work + // relative to the larger magnitude so no intermediate can exceed the + // finite range. + if ((value < zero) != (expected < zero)) + { + const Float smaller = magnitude_value < magnitude_expected + ? magnitude_value + : magnitude_expected; + return relative_tolerance >= two || + (relative_tolerance >= one && + smaller <= (relative_tolerance - one) * scale); + } + + const Float difference = abs(value - expected); + // Same-sign finite values differ by at most `scale`. Tolerances below + // one cannot overflow when scaled; tolerances of one or more already + // cover the complete same-sign interval. + return relative_tolerance >= one || + difference <= relative_tolerance * scale; + } +} + +#endif diff --git a/include/fltx/detail/ascii.h b/include/fltx/detail/ascii.h new file mode 100644 index 0000000..4ff5ae3 --- /dev/null +++ b/include/fltx/detail/ascii.h @@ -0,0 +1,39 @@ +/** + * fltx/detail/ascii.h - Small constexpr ASCII helpers shared by I/O code. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#ifndef FLTX_DETAIL_ASCII_INCLUDED +#define FLTX_DETAIL_ASCII_INCLUDED +#include "fltx/config.h" + +namespace bl::detail { + +BL_FORCE_INLINE constexpr unsigned char ascii_lower(char c) noexcept +{ + return static_cast((c >= 'A' && c <= 'Z') ? (c | 0x20) : c); +} + +BL_FORCE_INLINE constexpr bool ascii_space(char c) noexcept +{ + return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\f' || c == '\v'; +} + +[[nodiscard]] BL_FORCE_INLINE constexpr int ascii_hex_digit_value(char ch) noexcept +{ + if ('0' <= ch && ch <= '9') + return ch - '0'; + if ('a' <= ch && ch <= 'f') + return 10 + (ch - 'a'); + if ('A' <= ch && ch <= 'F') + return 10 + (ch - 'A'); + return -1; +} + +} // namespace bl::detail + +#endif diff --git a/include/fltx/detail/biguint.h b/include/fltx/detail/biguint.h new file mode 100644 index 0000000..6cde1f9 --- /dev/null +++ b/include/fltx/detail/biguint.h @@ -0,0 +1,769 @@ +/** + * fltx/detail/biguint.h - Fixed-capacity constexpr unsigned big-integer helpers. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#ifndef FLTX_DETAIL_BIGUINT_INCLUDED +#define FLTX_DETAIL_BIGUINT_INCLUDED +#include +#include +#include + +#include "fltx/config.h" + +namespace bl::detail::exact_decimal { + +struct biguint +{ + // Decimal parse/format/rounding paths stay well below this for canonical + // f128/f256 values. The limiting use is f256 Payne-Hanek reduction, whose + // 1888-bit 2/pi constant and 320-bit exact input accumulator use the + // complete 2208-bit capacity. + static constexpr int max_words = 69; + + std::uint32_t words[max_words]; + int size = 0; + + constexpr biguint() noexcept + { + } + + constexpr explicit biguint(std::uint64_t value) noexcept + { + if (value == 0) + return; + + words[0] = static_cast(value); + size = 1; + + const std::uint32_t hi = static_cast(value >> 32); + if (hi != 0) + { + words[1] = hi; + size = 2; + } + } + + constexpr biguint(const biguint& other) noexcept + : size(other.size) + { + for (int i = 0; i < size; ++i) + words[i] = other.words[i]; + + BL_IF_CONSTEVAL_WARNING_PUSH + BL_IF_CONSTEVAL + { + for (int i = size; i < max_words; ++i) + words[i] = 0; + } + BL_IF_CONSTEVAL_WARNING_POP + } + + constexpr biguint& operator=(const biguint& other) noexcept + { + if (this == &other) + return *this; + + size = other.size; + for (int i = 0; i < size; ++i) + words[i] = other.words[i]; + + BL_IF_CONSTEVAL_WARNING_PUSH + BL_IF_CONSTEVAL + { + for (int i = size; i < max_words; ++i) + words[i] = 0; + } + BL_IF_CONSTEVAL_WARNING_POP + + return *this; + } + + constexpr void clear() noexcept + { + size = 0; + } + + [[nodiscard]] constexpr bool is_zero() const noexcept + { + return size == 0; + } + + [[nodiscard]] constexpr bool is_odd() const noexcept + { + return size != 0 && (words[0] & 1u) != 0; + } + + constexpr void trim() noexcept + { + while (size > 0 && words[size - 1] == 0) + --size; + } + + [[nodiscard]] constexpr int bit_length() const noexcept + { + if (size == 0) + return 0; + + return 32 * (size - 1) + static_cast(std::bit_width(words[size - 1])); + } + + [[nodiscard]] constexpr bool get_bit(int index) const noexcept + { + if (index < 0) + return false; + + const int word_index = index >> 5; + if (word_index >= size) + return false; + + return ((words[word_index] >> (index & 31)) & 1u) != 0; + } + + [[nodiscard]] constexpr std::uint64_t get_bits(int start, int count) const noexcept + { + std::uint64_t value = 0; + int out_shift = 0; + while (count > 0 && out_shift < 64) + { + const int word_index = start >> 5; + const int bit_offset = start & 31; + const int available = 32 - bit_offset; + int take = count < available ? count : available; + if (take > 64 - out_shift) + take = 64 - out_shift; + + if (word_index < size) + { + const std::uint32_t mask = take == 32 + ? ~std::uint32_t{ 0 } + : ((std::uint32_t{ 1 } << take) - 1u); + const std::uint32_t chunk = static_cast((words[word_index] >> bit_offset) & mask); + value |= static_cast(chunk) << out_shift; + } + + start += take; + out_shift += take; + count -= take; + } + return value; + } + + [[nodiscard]] constexpr unsigned get_hex_nibble(int nibble_index) const noexcept + { + if (nibble_index < 0) + return 0; + + const int bit_index = nibble_index << 2; + const int word_index = bit_index >> 5; + if (word_index >= size) + return 0; + + return static_cast((words[word_index] >> (bit_index & 31)) & 0xfu); + } + + constexpr void set_bit(int index) noexcept + { + if (index < 0) + return; + + const int word_index = index >> 5; + if (word_index >= max_words) + return; + + while (size <= word_index) + words[size++] = 0; + + words[word_index] |= (1u << (index & 31)); + } + + constexpr void add_small(std::uint32_t value) noexcept + { + std::uint64_t carry = value; + int i = 0; + + while (carry != 0) + { + if (i == size) + { + if (size >= max_words) + return; + words[size++] = 0; + } + + const std::uint64_t sum = static_cast(words[i]) + carry; + words[i] = static_cast(sum); + carry = sum >> 32; + ++i; + } + } + + constexpr void sub_small(std::uint32_t value) noexcept + { + std::uint64_t borrow = value; + int i = 0; + + while (borrow != 0 && i < size) + { + const std::uint64_t word = words[i]; + if (word < borrow) + { + words[i] = static_cast((std::uint64_t{ 1 } << 32) + word - borrow); + borrow = 1; + } + else + { + words[i] = static_cast(word - borrow); + borrow = 0; + } + ++i; + } + + trim(); + } + + constexpr void add_inplace(const biguint& other) noexcept + { + if (size < other.size) + { + while (size < other.size) + words[size++] = 0; + } + + std::uint64_t carry = 0; + int i = 0; + for (; i < other.size; ++i) + { + const std::uint64_t sum = static_cast(words[i]) + other.words[i] + carry; + words[i] = static_cast(sum); + carry = sum >> 32; + } + + while (carry != 0) + { + if (i == size) + { + if (size >= max_words) + return; + words[size++] = 0; + } + + const std::uint64_t sum = static_cast(words[i]) + carry; + words[i] = static_cast(sum); + carry = sum >> 32; + ++i; + } + } + + constexpr void mul_small(std::uint32_t factor) noexcept + { + if (factor == 0 || size == 0) + { + size = 0; + return; + } + + std::uint64_t carry = 0; + for (int i = 0; i < size; ++i) + { + const std::uint64_t prod = static_cast(words[i]) * factor + carry; + words[i] = static_cast(prod); + carry = prod >> 32; + } + + if (carry != 0 && size < max_words) + words[size++] = static_cast(carry); + } + + constexpr std::uint32_t div_small(std::uint32_t divisor) noexcept + { + std::uint64_t rem = 0; + for (int i = size - 1; i >= 0; --i) + { + const std::uint64_t cur = (rem << 32) | words[i]; + words[i] = static_cast(cur / divisor); + rem = cur % divisor; + } + trim(); + return static_cast(rem); + } + + constexpr void shl1() noexcept + { + if (size == 0) + return; + + std::uint64_t carry = 0; + for (int i = 0; i < size; ++i) + { + const std::uint64_t cur = (static_cast(words[i]) << 1) | carry; + words[i] = static_cast(cur); + carry = cur >> 32; + } + + if (carry != 0 && size < max_words) + words[size++] = static_cast(carry); + } + + constexpr void shr1() noexcept + { + if (size == 0) + return; + + std::uint32_t carry = 0; + for (int i = size - 1; i >= 0; --i) + { + const std::uint32_t next_carry = static_cast(words[i] & 1u); + words[i] = (words[i] >> 1) | (carry << 31); + carry = next_carry; + } + trim(); + } + + constexpr void shl_bits(int bits) noexcept + { + if (bits <= 0 || size == 0) + return; + + const int word_shift = bits >> 5; + const int bit_shift = bits & 31; + + if (word_shift >= max_words) + { + size = 0; + return; + } + + const int old_size = size; + const int writable_count = max_words - word_shift; + const int src_count = (old_size < writable_count) ? old_size : writable_count; + + if (src_count <= 0) + { + size = 0; + return; + } + + if (bit_shift == 0) + { + for (int i = src_count - 1; i >= 0; --i) + words[i + word_shift] = words[i]; + + for (int i = 0; i < word_shift; ++i) + words[i] = 0; + + size = src_count + word_shift; + return; + } + + const std::uint32_t top_carry = static_cast(words[src_count - 1] >> (32 - bit_shift)); + for (int i = src_count - 1; i >= 0; --i) + { + const int dst = word_shift + i; + const std::uint32_t low = (i > 0) + ? static_cast(words[i - 1] >> (32 - bit_shift)) + : 0u; + words[dst] = static_cast((words[i] << bit_shift) | low); + } + + for (int i = 0; i < word_shift; ++i) + words[i] = 0; + + int new_size = src_count + word_shift; + if (top_carry != 0 && new_size < max_words) + { + words[new_size] = top_carry; + ++new_size; + } + + size = new_size; + trim(); + } + + [[nodiscard]] constexpr int compare(const biguint& other) const noexcept + { + if (size < other.size) return -1; + if (size > other.size) return 1; + + for (int i = size - 1; i >= 0; --i) + { + if (words[i] < other.words[i]) return -1; + if (words[i] > other.words[i]) return 1; + } + return 0; + } + + constexpr void sub_inplace(const biguint& other) noexcept + { + std::uint64_t borrow = 0; + for (int i = 0; i < size; ++i) + { + const std::uint64_t a = words[i]; + const std::uint64_t b = static_cast(i < other.size ? other.words[i] : 0u) + borrow; + + if (a < b) + { + words[i] = static_cast((std::uint64_t{1} << 32) + a - b); + borrow = 1; + } + else + { + words[i] = static_cast(a - b); + borrow = 0; + } + } + trim(); + } +}; + +[[nodiscard]] constexpr inline int compare(const biguint& a, const biguint& b) noexcept +{ + return a.compare(b); +} + +[[nodiscard]] constexpr inline biguint shifted(biguint v, int bits) noexcept +{ + v.shl_bits(bits); + return v; +} + +[[nodiscard]] constexpr inline int high_word_index_shifted(const biguint& value, int bits) noexcept +{ + if (value.is_zero()) + return -1; + + const int word_shift = bits >> 5; + const int bit_shift = bits & 31; + const bool extra_word = bit_shift != 0 && (value.words[value.size - 1] >> (32 - bit_shift)) != 0; + return word_shift + value.size - 1 + (extra_word ? 1 : 0); +} + +[[nodiscard]] constexpr inline std::uint32_t shifted_word_at(const biguint& value, int index, int bits) noexcept +{ + if (index < 0 || value.is_zero()) + return 0; + + const int word_shift = bits >> 5; + const int bit_shift = bits & 31; + const int src = index - word_shift; + + if (bit_shift == 0) + return (src >= 0 && src < value.size) ? value.words[src] : 0u; + + std::uint32_t out = 0; + if (src >= 0 && src < value.size) + out |= static_cast(static_cast(value.words[src]) << bit_shift); + if (src - 1 >= 0 && src - 1 < value.size) + out |= static_cast(value.words[src - 1] >> (32 - bit_shift)); + return out; +} + +[[nodiscard]] constexpr inline int compare_shifted(const biguint& a, const biguint& b, int bits) noexcept +{ + const int a_hi = a.size - 1; + const int b_hi = high_word_index_shifted(b, bits); + if (a_hi < b_hi) return -1; + if (a_hi > b_hi) return 1; + + for (int i = a_hi; i >= 0; --i) + { + const std::uint32_t bw = shifted_word_at(b, i, bits); + if (a.words[i] < bw) return -1; + if (a.words[i] > bw) return 1; + } + return 0; +} + +constexpr inline void sub_shifted_inplace(biguint& a, const biguint& b, int bits) noexcept +{ + if (a.is_zero()) + return; + if (b.is_zero()) + { + a.trim(); + return; + } + + const int word_shift = bits >> 5; + if (word_shift >= a.size) + { + a.trim(); + return; + } + + const int bit_shift = bits & 31; + const int a_size = a.size; + const int count = b.size < (a_size - word_shift) ? b.size : (a_size - word_shift); + std::uint64_t borrow = 0; + int i = word_shift; + + if (bit_shift == 0) + { + for (int j = 0; j < count; ++j, ++i) + { + const std::uint64_t sub = static_cast(b.words[j]) + borrow; + const std::uint64_t ai = a.words[i]; + a.words[i] = static_cast(ai - sub); + borrow = ai < sub ? 1u : 0u; + } + } + else + { + std::uint32_t carry = 0; + for (int j = 0; j < count; ++j, ++i) + { + const std::uint32_t word = b.words[j]; + const std::uint32_t shifted = + static_cast((static_cast(word) << bit_shift) | carry); + const std::uint64_t sub = static_cast(shifted) + borrow; + carry = word >> (32 - bit_shift); + + const std::uint64_t ai = a.words[i]; + a.words[i] = static_cast(ai - sub); + borrow = ai < sub ? 1u : 0u; + } + + if (carry != 0 && i < a_size) + { + const std::uint64_t sub = static_cast(carry) + borrow; + const std::uint64_t ai = a.words[i]; + a.words[i] = static_cast(ai - sub); + borrow = ai < sub ? 1u : 0u; + ++i; + } + } + + while (borrow != 0 && i < a_size) + { + const std::uint64_t ai = a.words[i]; + a.words[i] = static_cast(ai - 1u); + borrow = ai == 0 ? 1u : 0u; + ++i; + } + + a.trim(); +} + +constexpr inline void mod_shift_subtract(const biguint& numerator, const biguint& denominator, biguint& remainder) noexcept +{ + remainder = numerator; + if (denominator.is_zero()) + return; + + while (remainder.compare(denominator) >= 0) + { + int shift = (remainder.bit_length() - 1) - (denominator.bit_length() - 1); + if (shift > 0 && compare_shifted(remainder, denominator, shift) < 0) + --shift; + sub_shifted_inplace(remainder, denominator, shift); + } +} + +constexpr inline biguint mul_big(const biguint& a, const biguint& b) noexcept +{ + biguint out; + if (a.is_zero() || b.is_zero()) + return out; + + const int product_size = a.size + b.size; + out.size = (product_size < biguint::max_words) ? product_size : biguint::max_words; + for (int i = 0; i < out.size; ++i) + out.words[i] = 0; + + for (int i = 0; i < a.size; ++i) + { + std::uint64_t carry = 0; + const int writable_count = biguint::max_words - i; + const int jmax = (b.size < writable_count) ? b.size : writable_count; + for (int j = 0; j < jmax; ++j) + { + const int k = i + j; + const std::uint64_t cur = + static_cast(out.words[k]) + + static_cast(a.words[i]) * static_cast(b.words[j]) + + carry; + out.words[k] = static_cast(cur); + carry = cur >> 32; + } + + int k = i + jmax; + while (carry != 0 && k < out.size) + { + const std::uint64_t cur = static_cast(out.words[k]) + carry; + out.words[k] = static_cast(cur); + carry = cur >> 32; + ++k; + } + } + + out.trim(); + return out; +} + +[[nodiscard]] constexpr inline biguint mul_small_u64_big(const biguint& value, std::uint64_t multiplier) noexcept +{ + if (value.is_zero() || multiplier == 0) + return {}; + + constexpr std::uint64_t max_u32 = ~std::uint64_t{ 0 } >> 32; + if (multiplier <= max_u32) + { + biguint out = value; + out.mul_small(static_cast(multiplier)); + return out; + } + + const std::uint32_t multiplier_low = static_cast(multiplier); + const std::uint32_t multiplier_high = static_cast(multiplier >> 32); + + biguint out; + const int product_size = value.size + 2; + out.size = product_size < biguint::max_words ? product_size : biguint::max_words; + out.words[0] = 0; + if (out.size > 1) + out.words[1] = 0; + + for (int i = 0; i < value.size; ++i) + { + std::uint64_t carry = 0; + std::uint64_t current = + static_cast(out.words[i]) + + static_cast(value.words[i]) * multiplier_low; + out.words[i] = static_cast(current); + carry = current >> 32; + + int k = i + 1; + if (k < out.size) + { + current = + static_cast(out.words[k]) + + static_cast(value.words[i]) * multiplier_high + + carry; + out.words[k] = static_cast(current); + carry = current >> 32; + ++k; + } + + if (k < out.size) + out.words[k] = static_cast(carry); + } + + out.trim(); + return out; +} + +[[nodiscard]] constexpr inline bool any_low_bits_set(const biguint& value, int bit_count) noexcept +{ + if (bit_count <= 0 || value.is_zero()) + return false; + + const int full_words = bit_count >> 5; + const int rem_bits = bit_count & 31; + + const int checked_words = full_words < value.size ? full_words : value.size; + for (int i = 0; i < checked_words; ++i) + { + if (value.words[i] != 0) + return true; + } + + if (rem_bits == 0 || full_words >= value.size) + return false; + + const std::uint32_t mask = (std::uint32_t{ 1 } << rem_bits) - 1u; + return (value.words[full_words] & mask) != 0; +} + +[[nodiscard]] constexpr inline biguint shr_bits_copy(const biguint& value, int bits) noexcept +{ + if (bits <= 0 || value.is_zero()) + return value; + + const int word_shift = bits >> 5; + if (word_shift >= value.size) + return {}; + + const int bit_shift = bits & 31; + biguint out; + out.size = value.size - word_shift; + + for (int i = 0; i < out.size; ++i) + { + const int src = i + word_shift; + std::uint32_t word = value.words[src] >> bit_shift; + if (bit_shift != 0 && src + 1 < value.size) + word |= value.words[src + 1] << (32 - bit_shift); + out.words[i] = word; + } + + out.trim(); + return out; +} + +[[nodiscard]] constexpr inline biguint low_bits_copy(const biguint& value, int bits) noexcept +{ + if (bits <= 0 || value.is_zero()) + return {}; + + const int word_count = (bits + 31) >> 5; + biguint out; + out.size = value.size < word_count ? value.size : word_count; + + for (int i = 0; i < out.size; ++i) + out.words[i] = value.words[i]; + + const int rem_bits = bits & 31; + if (rem_bits != 0 && out.size == word_count) + out.words[out.size - 1] &= (std::uint32_t{ 1 } << rem_bits) - 1u; + + out.trim(); + return out; +} + +[[nodiscard]] constexpr inline biguint abs_diff(biguint a, const biguint& b) noexcept +{ + if (a.compare(b) >= 0) + { + a.sub_inplace(b); + return a; + } + + biguint out = b; + out.sub_inplace(a); + return out; +} + +[[nodiscard]] constexpr inline bool le_power2(const biguint& value, int bit) noexcept +{ + if (value.is_zero()) + return true; + if (bit < 0) + return false; + + const int highest = value.bit_length() - 1; + if (highest != bit) + return highest < bit; + + biguint limit; + limit.set_bit(bit); + return value.compare(limit) <= 0; +} + +[[nodiscard]] constexpr inline biguint from_words(const std::uint32_t* words, int count) noexcept +{ + biguint out{}; + const int copy_count = count < biguint::max_words ? count : biguint::max_words; + for (int i = 0; i < copy_count; ++i) + out.words[i] = words[i]; + out.size = copy_count; + out.trim(); + return out; +} + +} // namespace bl::detail::exact_decimal + +#endif diff --git a/include/fltx/detail/build_info.h b/include/fltx/detail/build_info.h new file mode 100644 index 0000000..fb28c56 --- /dev/null +++ b/include/fltx/detail/build_info.h @@ -0,0 +1,57 @@ +/** + * fltx/detail/build_info.h - Compiled-library build configuration reporting. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#ifndef FLTX_DETAIL_BUILD_INFO_INCLUDED +#define FLTX_DETAIL_BUILD_INFO_INCLUDED + +namespace bl::detail +{ + enum class configured_fma_mode + { + automatic, + off, + assume + }; + + enum class internal_fast_math_request + { + automatic, + enabled, + disabled + }; + + struct compiled_build_info + { + configured_fma_mode fma_mode; + internal_fast_math_request fast_math_request; + bool fast_math_enabled; + bool simd_policy_enabled; + bool x86_target; + bool arm64_target; + bool tu_has_x86_fma; + bool has_x86_fma; + bool compiled_x86_fma_backend; + bool x86_fma_runtime_check; + bool msvc_guarded_x86_fma; + bool scalar_x86_fma; + bool baseline_arm64_fma; + bool has_runtime_fma_path; + bool has_sse2; + bool has_neon; + bool has_wasm_simd; + bool f256_simd_enabled; + bool f256_trig_simd_enabled; + bool simd_fma_two_prod; + }; + + [[nodiscard]] const compiled_build_info& library_build_info() noexcept; + [[nodiscard]] bool library_runtime_hardware_fma_enabled() noexcept; +} + +#endif diff --git a/include/fltx/detail/common_decimal.h b/include/fltx/detail/common_decimal.h index c8f4038..4ef175c 100644 --- a/include/fltx/detail/common_decimal.h +++ b/include/fltx/detail/common_decimal.h @@ -1,5 +1,5 @@ /** - * fltx/detail/common_decimal.h - Exact decimal and big-integer helpers for constexpr I/O. + * fltx/detail/common_decimal.h - Exact decimal conversion helpers for constexpr I/O. * * Copyright (c) 2026 William Hemsworth * @@ -10,687 +10,1454 @@ #ifndef FLTX_DETAIL_COMMON_DECIMAL_INCLUDED #define FLTX_DETAIL_COMMON_DECIMAL_INCLUDED #include +#include #include +#include +#include + +#include "fltx/detail/biguint.h" +#include "fltx/detail/pow_tables.h" namespace bl::detail::exact_decimal { -struct biguint +[[nodiscard]] constexpr inline biguint pow5_big(int exponent) noexcept { - static constexpr int max_words = 320; + constexpr int chunk_exp = pow_tables::power5_checkpoint_exponent; + const int chunks = exponent / chunk_exp; + const int remainder = exponent % chunk_exp; - std::uint32_t words[max_words]{}; - int size = 0; + if (chunks < static_cast( + sizeof(pow_tables::power5_checkpoints) / + sizeof(pow_tables::power5_checkpoints[0]))) + { + const pow_tables::power5_checkpoint& cached = + pow_tables::power5_checkpoints[chunks]; + biguint out = from_words(cached.words, cached.size); - constexpr biguint() noexcept = default; + if (remainder > 0) + out.mul_small(static_cast(pow_tables::power5_u64[remainder])); + return out; + } - constexpr explicit biguint(std::uint64_t value) noexcept + biguint out{1}; + int remaining_chunks = chunks; + biguint factor{ pow_tables::power5_u64[chunk_exp] }; + while (remaining_chunks != 0) { - if (value == 0) - return; + if ((remaining_chunks & 1) != 0) + out = mul_big(out, factor); + + remaining_chunks >>= 1; + if (remaining_chunks != 0) + factor = mul_big(factor, factor); + } + + if (remainder > 0) + out.mul_small(static_cast(pow_tables::power5_u64[remainder])); + return out; +} - words[0] = static_cast(value); - size = 1; +[[nodiscard]] constexpr inline biguint pow10_big(int exponent) noexcept +{ + biguint out{1}; + while (exponent >= 9) + { + out.mul_small(1000000000u); + exponent -= 9; + } + + constexpr std::uint32_t pow10_chunks[] = { + 1u, + 10u, + 100u, + 1000u, + 10000u, + 100000u, + 1000000u, + 10000000u, + 100000000u + }; + if (exponent > 0) + out.mul_small(pow10_chunks[exponent]); + return out; +} + +[[nodiscard]] constexpr inline biguint rounded_decimal_places_shift( + const biguint& magnitude, + int shift) noexcept +{ + if (shift >= 0) + { + biguint out = magnitude; + out.shl_bits(shift); + return out; + } + + const int right_shift = -shift; + biguint out = shr_bits_copy(magnitude, right_shift); + const bool guard = magnitude.get_bit(right_shift - 1); + const bool sticky = right_shift > 1 && any_low_bits_set(magnitude, right_shift - 1); + if (guard && (sticky || out.is_odd())) + out.add_small(1); + + return out; +} + +constexpr inline void divmod_bitwise(const biguint& numerator, const biguint& denominator, biguint& quotient, biguint& remainder) noexcept +{ + quotient.clear(); + remainder.clear(); + + if (denominator.is_zero()) + return; + + const int nbits = numerator.bit_length(); + for (int i = nbits - 1; i >= 0; --i) + { + remainder.shl1(); + if (numerator.get_bit(i)) + remainder.add_small(1); - const std::uint32_t hi = static_cast(value >> 32); - if (hi != 0) + if (remainder.compare(denominator) >= 0) { - words[1] = hi; - size = 2; + remainder.sub_inplace(denominator); + quotient.set_bit(i); } } - constexpr void clear() noexcept + quotient.trim(); + remainder.trim(); +} + +constexpr inline void divmod_limited_quotient( + const biguint& numerator, + const biguint& denominator, + int quotient_bits, + biguint& quotient, + biguint& remainder) noexcept +{ + quotient.clear(); + remainder = numerator; + + if (denominator.is_zero() || quotient_bits <= 0) + return; + + const int num_bits = numerator.bit_length(); + const int den_bits = denominator.bit_length(); + if (num_bits == 0 || den_bits == 0 || num_bits < den_bits) { - size = 0; + remainder.trim(); + return; } - [[nodiscard]] constexpr bool is_zero() const noexcept + int shift = num_bits - den_bits; + if (shift >= quotient_bits) + shift = quotient_bits - 1; + + for (int i = shift; i >= 0; --i) { - return size == 0; + if (compare_shifted(remainder, denominator, i) >= 0) + { + sub_shifted_inplace(remainder, denominator, i); + quotient.set_bit(i); + } } - [[nodiscard]] constexpr bool is_odd() const noexcept + quotient.trim(); + remainder.trim(); +} + +[[nodiscard]] constexpr inline int single_bit_index(const biguint& value) noexcept +{ + int bit = -1; + for (int i = 0; i < value.size; ++i) { - return size != 0 && (words[0] & 1u) != 0; + const std::uint32_t word = value.words[i]; + if (word == 0) + continue; + if ((word & (word - 1u)) != 0 || bit >= 0) + return -1; + bit = i * 32 + static_cast(std::countr_zero(word)); } + return bit; +} - constexpr void trim() noexcept +[[nodiscard]] constexpr inline biguint mul_by_correction_denominator( + const biguint& denominator, + const biguint& value) noexcept +{ + const int shift = single_bit_index(denominator); + if (shift >= 0) { - while (size > 0 && words[size - 1] == 0) - --size; + biguint out = value; + out.shl_bits(shift); + return out; } - [[nodiscard]] constexpr int bit_length() const noexcept + if (denominator.size == 1) + return mul_small_u64_big(value, denominator.words[0]); + + return mul_big(denominator, value); +} + +[[nodiscard]] constexpr inline bool divmod_from_floor_candidate( + const biguint& numerator, + const biguint& denominator, + const biguint& candidate, + int quotient_bits, + biguint& quotient, + biguint& remainder) noexcept +{ + if (denominator.is_zero() || candidate.is_zero()) + return false; + + if (candidate.bit_length() > quotient_bits + 4) + return false; + + quotient = candidate; + biguint product = mul_by_correction_denominator(denominator, quotient); + int corrections = 0; + + while (product.compare(numerator) > 0) { - if (size == 0) - return 0; + if (quotient.is_zero()) + return false; - std::uint32_t msw = words[size - 1]; - int bits = 32 * (size - 1); - while (msw != 0) - { - ++bits; - msw >>= 1; - } - return bits; + quotient.sub_small(1); + product.sub_inplace(denominator); + + if (++corrections > 64) + return false; } - [[nodiscard]] constexpr bool get_bit(int index) const noexcept + remainder = numerator; + remainder.sub_inplace(product); + while (remainder.compare(denominator) >= 0) { - if (index < 0) - return false; + remainder.sub_inplace(denominator); + quotient.add_small(1); - const int word_index = index >> 5; - if (word_index >= size) + if (++corrections > 64) return false; + } + return true; +} + +[[nodiscard]] constexpr inline std::uint64_t div_quotient_limited_bitwise(const biguint& numerator, const biguint& denominator, int quotient_bits, biguint& remainder) noexcept +{ + remainder = numerator; + + if (denominator.is_zero() || quotient_bits <= 0) + return 0; - return ((words[word_index] >> (index & 31)) & 1u) != 0; + const int num_bits = numerator.bit_length(); + const int den_bits = denominator.bit_length(); + if (num_bits == 0 || den_bits == 0 || num_bits < den_bits) + { + remainder.trim(); + return 0; } - [[nodiscard]] constexpr std::uint64_t get_bits(int start, int count) const noexcept + int shift = num_bits - den_bits; + if (shift >= quotient_bits) + shift = quotient_bits - 1; + + std::uint64_t quotient = 0; + for (int i = shift; i >= 0; --i) { - std::uint64_t value = 0; - for (int i = 0; i < count; ++i) + if (compare_shifted(remainder, denominator, i) >= 0) { - if (get_bit(start + i)) - value |= (std::uint64_t{1} << i); + sub_shifted_inplace(remainder, denominator, i); + quotient |= (std::uint64_t{ 1 } << i); } - return value; } - constexpr void set_bit(int index) noexcept + remainder.trim(); + return quotient; +} + +[[nodiscard]] constexpr inline double leading_value_as_double(const biguint& value) noexcept +{ + const int bits = value.bit_length(); + if (bits <= 0) + return 0.0; + + const int keep_bits = bits < 53 ? bits : 53; + const std::uint64_t top = value.get_bits(bits - keep_bits, keep_bits); + const int scale = bits - keep_bits; + if (scale > 1023) + return std::numeric_limits::infinity(); + + const std::uint64_t scale_bits = static_cast(scale + 1023) << 52; + return static_cast(top) * std::bit_cast(scale_bits); +} + +[[nodiscard]] constexpr inline double leading_ratio_as_double( + const biguint& numerator, + const biguint& denominator) noexcept +{ + const int num_bits = numerator.bit_length(); + const int den_bits = denominator.bit_length(); + if (num_bits <= 0 || den_bits <= 0) + return 0.0; + + const int num_keep = num_bits < 53 ? num_bits : 53; + const int den_keep = den_bits < 53 ? den_bits : 53; + const std::uint64_t num_top = numerator.get_bits(num_bits - num_keep, num_keep); + const std::uint64_t den_top = denominator.get_bits(den_bits - den_keep, den_keep); + const int scale = (num_bits - num_keep) - (den_bits - den_keep); + if (scale < -1022 || scale > 1023) + return 0.0; + + const std::uint64_t scale_bits = static_cast(scale + 1023) << 52; + const double pow2 = std::bit_cast(scale_bits); + return (static_cast(num_top) / static_cast(den_top)) * pow2; +} + +[[nodiscard]] constexpr inline bool div_quotient_limited_estimate_from_ratio( + const biguint& numerator, + const biguint& denominator, + double approx, + int quotient_bits, + std::uint64_t& quotient, + biguint& remainder) noexcept +{ + if (denominator.is_zero() || quotient_bits <= 0 || quotient_bits > 53) + return false; + + const int num_bits = numerator.bit_length(); + const int den_bits = denominator.bit_length(); + if (num_bits == 0 || den_bits == 0 || num_bits < den_bits) { - if (index < 0) - return; + quotient = 0; + remainder = numerator; + remainder.trim(); + return true; + } + + const std::uint64_t max_quotient = + quotient_bits == 64 ? ~std::uint64_t{ 0 } : ((std::uint64_t{ 1 } << quotient_bits) - 1u); + if (!(approx >= 1.0)) + return false; + + std::uint64_t candidate = approx >= static_cast(max_quotient) + ? max_quotient + : static_cast(approx); + if (candidate == 0) + return false; - const int word_index = index >> 5; - if (word_index >= max_words) - return; + biguint product = mul_small_u64_big(denominator, candidate); + int corrections = 0; - while (size <= word_index) - words[size++] = 0; + while (product.compare(numerator) > 0) + { + if (candidate == 0 || ++corrections > 64) + return false; - words[word_index] |= (1u << (index & 31)); + --candidate; + product.sub_inplace(denominator); } - constexpr void add_small(std::uint32_t value) noexcept + remainder = numerator; + remainder.sub_inplace(product); + while (remainder.compare(denominator) >= 0) { - std::uint64_t carry = value; - int i = 0; + if (candidate == max_quotient || ++corrections > 64) + return false; - while (carry != 0) - { - if (i == size) - { - if (size >= max_words) - return; - words[size++] = 0; - } - - const std::uint64_t sum = static_cast(words[i]) + carry; - words[i] = static_cast(sum); - carry = sum >> 32; - ++i; - } + ++candidate; + remainder.sub_inplace(denominator); } + quotient = candidate; + return true; +} + +[[nodiscard]] inline bool div_quotient_limited_estimate( + const biguint& numerator, + const biguint& denominator, + double denominator_leading, + int quotient_bits, + std::uint64_t& quotient, + biguint& remainder) noexcept +{ + if (!(denominator_leading > 0.0)) + return false; + + return div_quotient_limited_estimate_from_ratio( + numerator, + denominator, + leading_value_as_double(numerator) / denominator_leading, + quotient_bits, + quotient, + remainder); +} - constexpr void add_inplace(const biguint& other) noexcept +[[nodiscard]] inline bool div_quotient_limited_estimate( + const biguint& numerator, + const biguint& denominator, + int quotient_bits, + std::uint64_t& quotient, + biguint& remainder) noexcept +{ + return div_quotient_limited_estimate( + numerator, + denominator, + leading_value_as_double(denominator), + quotient_bits, + quotient, + remainder); +} + +[[nodiscard]] constexpr inline std::uint64_t div_quotient_limited( + const biguint& numerator, + const biguint& denominator, + double denominator_leading, + int quotient_bits, + biguint& remainder) noexcept +{ + std::uint64_t quotient = 0; + if (bl::detail::is_constant_evaluated()) { - if (size < other.size) - { - while (size < other.size) - words[size++] = 0; - } + if (div_quotient_limited_estimate_from_ratio( + numerator, + denominator, + leading_ratio_as_double(numerator, denominator), + quotient_bits, + quotient, + remainder)) + return quotient; + } + else + { + if (div_quotient_limited_estimate(numerator, denominator, denominator_leading, quotient_bits, quotient, remainder)) + return quotient; + } - std::uint64_t carry = 0; - int i = 0; - for (; i < other.size; ++i) - { - const std::uint64_t sum = static_cast(words[i]) + other.words[i] + carry; - words[i] = static_cast(sum); - carry = sum >> 32; - } + return div_quotient_limited_bitwise(numerator, denominator, quotient_bits, remainder); +} - while (carry != 0) - { - if (i == size) - { - if (size >= max_words) - return; - words[size++] = 0; - } - - const std::uint64_t sum = static_cast(words[i]) + carry; - words[i] = static_cast(sum); - carry = sum >> 32; - ++i; - } +[[nodiscard]] constexpr inline std::uint64_t div_quotient_limited(const biguint& numerator, const biguint& denominator, int quotient_bits, biguint& remainder) noexcept +{ + if (!bl::detail::is_constant_evaluated()) + return div_quotient_limited( + numerator, + denominator, + leading_value_as_double(denominator), + quotient_bits, + remainder); + + std::uint64_t quotient = 0; + if (div_quotient_limited_estimate_from_ratio( + numerator, + denominator, + leading_ratio_as_double(numerator, denominator), + quotient_bits, + quotient, + remainder)) + return quotient; + + return div_quotient_limited_bitwise(numerator, denominator, quotient_bits, remainder); +} + +constexpr inline void divmod_limited_quotient_chunked( + const biguint& numerator, + const biguint& denominator, + int quotient_bits, + biguint& quotient, + biguint& remainder) noexcept +{ + quotient.clear(); + remainder = numerator; + + if (denominator.is_zero() || quotient_bits <= 0) + return; + + const int num_bits = numerator.bit_length(); + const int den_bits = denominator.bit_length(); + if (num_bits == 0 || den_bits == 0 || num_bits < den_bits) + { + remainder.trim(); + return; } - constexpr void mul_small(std::uint32_t factor) noexcept + int highest_shift = num_bits - den_bits; + if (highest_shift >= quotient_bits) + highest_shift = quotient_bits - 1; + + int remaining_bits = highest_shift + 1; + constexpr int chunk_bits = 53; + while (remaining_bits > 0) { - if (factor == 0 || size == 0) - { - size = 0; - return; - } + int take_bits = remaining_bits % chunk_bits; + if (take_bits == 0) + take_bits = chunk_bits; - std::uint64_t carry = 0; - for (int i = 0; i < size; ++i) - { - const std::uint64_t prod = static_cast(words[i]) * factor + carry; - words[i] = static_cast(prod); - carry = prod >> 32; - } + remaining_bits -= take_bits; - if (carry != 0 && size < max_words) - words[size++] = static_cast(carry); + biguint chunk_denominator = denominator; + if (remaining_bits > 0) + chunk_denominator.shl_bits(remaining_bits); + + biguint chunk_remainder; + const std::uint64_t chunk = div_quotient_limited( + remainder, + chunk_denominator, + take_bits, + chunk_remainder); + + quotient.shl_bits(take_bits); + if (chunk != 0) + quotient.add_inplace(biguint{ chunk }); + + remainder = chunk_remainder; } - constexpr std::uint32_t div_small(std::uint32_t divisor) noexcept + quotient.trim(); + remainder.trim(); +} + +[[nodiscard]] constexpr inline bool try_extract_rounded_significand_reciprocal( + const biguint& numerator, + const biguint& denominator, + int denominator_power5_exponent, + int ratio_exp, + int significand_bits, + biguint& quotient) noexcept +{ + constexpr int reciprocal_guard_bits = 3; + constexpr int capacity_bits = biguint::max_words * 32; + + if (denominator_power5_exponent <= 0 || + denominator_power5_exponent > pow_tables::reciprocal_power5_max_exponent || + significand_bits <= 0 || + significand_bits + reciprocal_guard_bits > + pow_tables::reciprocal_power5_precision) { - std::uint64_t rem = 0; - for (int i = size - 1; i >= 0; --i) - { - const std::uint64_t cur = (rem << 32) | words[i]; - words[i] = static_cast(cur / divisor); - rem = cur % divisor; - } - trim(); - return static_cast(rem); + return false; } - constexpr void shl1() noexcept + const int scale_bits = significand_bits - 1 - ratio_exp; + if (scale_bits < 0 || numerator.bit_length() + scale_bits > capacity_bits) + return false; + + const pow_tables::reciprocal_power5& cached = + pow_tables::reciprocal_power5_table[denominator_power5_exponent - 1]; + biguint reciprocal = from_words( + cached.words, + pow_tables::reciprocal_power5_word_count); + + const int reciprocal_drop = + pow_tables::reciprocal_power5_precision - + (significand_bits + reciprocal_guard_bits); + if (reciprocal_drop > 0) { - if (size == 0) - return; + const bool round_up = any_low_bits_set(reciprocal, reciprocal_drop); + reciprocal = shr_bits_copy(reciprocal, reciprocal_drop); + if (round_up) + reciprocal.add_small(1); + } - std::uint64_t carry = 0; - for (int i = 0; i < size; ++i) - { - const std::uint64_t cur = (static_cast(words[i]) << 1) | carry; - words[i] = static_cast(cur); - carry = cur >> 32; - } + const int product_shift = + static_cast(cached.binary_shift) - reciprocal_drop - scale_bits; + if (product_shift < 0 || + numerator.bit_length() + reciprocal.bit_length() > capacity_bits) + { + return false; + } - if (carry != 0 && size < max_words) - words[size++] = static_cast(carry); + // The cached value is ceil(2^P / 5^n). Three guard bits constrain the + // candidate error to less than one unit; exact correction below recovers + // the floor and its remainder before applying ties-to-even rounding. + const biguint product = mul_big(numerator, reciprocal); + quotient = shr_bits_copy(product, product_shift); + if (quotient.is_zero() || + quotient.bit_length() + denominator.bit_length() > capacity_bits) + { + return false; } - constexpr void shr1() noexcept + biguint scaled_numerator = numerator; + scaled_numerator.shl_bits(scale_bits); + biguint quotient_product = mul_big(quotient, denominator); + + int corrections = 0; + while (quotient_product.compare(scaled_numerator) > 0) { - if (size == 0) - return; + if (quotient.is_zero() || ++corrections > 2) + return false; - std::uint32_t carry = 0; - for (int i = size - 1; i >= 0; --i) - { - const std::uint32_t next_carry = static_cast(words[i] & 1u); - words[i] = (words[i] >> 1) | (carry << 31); - carry = next_carry; - } - trim(); + quotient.sub_small(1); + quotient_product.sub_inplace(denominator); } - constexpr void shl_bits(int bits) noexcept + biguint remainder = scaled_numerator; + remainder.sub_inplace(quotient_product); + while (remainder.compare(denominator) >= 0) { - if (bits <= 0 || size == 0) - return; + if (++corrections > 2) + return false; - const int word_shift = bits >> 5; - const int bit_shift = bits & 31; + quotient.add_small(1); + remainder.sub_inplace(denominator); + } - if (word_shift >= max_words) - { - size = 0; - return; - } + remainder.shl1(); + const int half_comparison = remainder.compare(denominator); + if (half_comparison > 0 || (half_comparison == 0 && quotient.is_odd())) + quotient.add_small(1); - const int old_size = size; - const int writable_count = max_words - word_shift; - const int src_count = (old_size < writable_count) ? old_size : writable_count; + quotient.trim(); + return true; +} - if (src_count <= 0) - { - size = 0; - return; - } +[[nodiscard]] constexpr inline biguint extract_rounded_significand_chunks( + biguint& numerator, + biguint& denominator, + int ratio_exp, + int significand_bits) noexcept +{ + const int chunk_bits = 53; + const int chunk_count = (significand_bits + chunk_bits - 1) / chunk_bits; + const int first_chunk_bits = significand_bits - (chunk_count - 1) * chunk_bits; + const int first_scale_bits = first_chunk_bits - 1; - if (bit_shift == 0) - { - for (int i = src_count - 1; i >= 0; --i) - words[i + word_shift] = words[i]; + if (ratio_exp >= 0) + denominator.shl_bits(ratio_exp); + else + numerator.shl_bits(-ratio_exp); + + biguint scaled = numerator; + if (first_scale_bits > 0) + scaled.shl_bits(first_scale_bits); - for (int i = 0; i < word_shift; ++i) - words[i] = 0; + double normalized_den_leading = 0.0; + if (!bl::detail::is_constant_evaluated()) + normalized_den_leading = leading_value_as_double(denominator); - size = src_count + word_shift; - trim(); - return; - } + biguint remainder; + const std::uint64_t first_chunk = div_quotient_limited(scaled, denominator, normalized_den_leading, first_chunk_bits, remainder); + + biguint q{ first_chunk }; + for (int chunk_index = 1; chunk_index < chunk_count; ++chunk_index) + { + if (!remainder.is_zero()) + remainder.shl_bits(chunk_bits); + + const std::uint64_t chunk = div_quotient_limited(remainder, denominator, normalized_den_leading, chunk_bits, remainder); + q.shl_bits(chunk_bits); + if (chunk != 0) + q.add_inplace(biguint{ chunk }); + } - std::uint32_t out[max_words]{}; + if (!remainder.is_zero()) + remainder.shl1(); + + const int half_comparison = remainder.compare(denominator); + const bool guard_bit = half_comparison >= 0; + const bool trailing_bits = half_comparison > 0; + + if (guard_bit && (trailing_bits || q.is_odd())) + q.add_small(1); + + q.trim(); + return q; +} + +[[nodiscard]] constexpr inline int floor_log2_ratio(const biguint& numerator, const biguint& denominator) noexcept +{ + int k = (numerator.bit_length() - 1) - (denominator.bit_length() - 1); + + if (k >= 0) + { + if (compare_shifted(numerator, denominator, k) < 0) + --k; + } + else + { + if (compare_shifted(denominator, numerator, -k) > 0) + --k; + } + + return k; +} + +struct signed_biguint +{ + biguint mag; + bool neg = false; +}; + +constexpr inline void add_signed(signed_biguint& acc, biguint term, bool term_neg) noexcept +{ + if (acc.mag.is_zero()) + { + acc.mag = term; + acc.neg = term_neg; + return; + } + + if (acc.neg == term_neg) + { + acc.mag.add_inplace(term); + return; + } + + const int cmp = acc.mag.compare(term); + if (cmp == 0) + { + acc.mag.clear(); + acc.neg = false; + return; + } + + if (cmp > 0) + { + acc.mag.sub_inplace(term); + return; + } + + term.sub_inplace(acc.mag); + acc.mag = term; + acc.neg = term_neg; +} + +[[nodiscard]] constexpr inline int compare_scaled_with_pow10exp(const biguint& mag, int bin_exp, int dec_exp) noexcept +{ + if (dec_exp >= 0) + { + const biguint p5 = pow5_big(dec_exp); + const int binary_shift = bin_exp - dec_exp; + if (binary_shift >= 0) + return -compare_shifted(p5, mag, binary_shift); + return compare_shifted(mag, p5, -binary_shift); + } + + const int scale = -dec_exp; + biguint lhs = mul_big(mag, pow5_big(scale)); + const int binary_shift = bin_exp + scale; + + if (binary_shift > 0) + return 1; + if (binary_shift == 0) + return compare(lhs, biguint{ 1 }); + + return compare_shifted(lhs, biguint{ 1 }, -binary_shift); +} + +[[nodiscard]] constexpr inline std::uint64_t decompose_double_mantissa(double x, int& exponent, bool& neg) noexcept +{ + const std::uint64_t bits = std::bit_cast(x); + neg = (bits >> 63) != 0; + const std::uint64_t frac = bits & ((std::uint64_t{ 1 } << 52) - 1); + const std::uint32_t exp_bits = static_cast((bits >> 52) & 0x7ffu); + if (exp_bits == 0) + { + exponent = -1074; + return frac; + } + exponent = static_cast(exp_bits) - 1023 - 52; + return (std::uint64_t{ 1 } << 52) | frac; +} - std::uint32_t carry = 0; +[[nodiscard]] constexpr inline int floor_to_int(double x) noexcept +{ + const int truncated = static_cast(x); + return static_cast(truncated) > x ? truncated - 1 : truncated; +} - for (int i = 0; i < src_count; ++i) - { - const int dst = word_shift + i; - const std::uint32_t word = words[i]; +[[nodiscard]] constexpr inline int decimal_exponent_from_components(const biguint& magnitude, int common_exp) noexcept +{ + const double log10_2 = 0.30102999566398119521373889472449; + int approx = floor_to_int((magnitude.bit_length() - 1 + common_exp) * log10_2); - out[dst] = static_cast( - (static_cast(word) << bit_shift) | carry); + int guard = 0; + while (compare_scaled_with_pow10exp(magnitude, common_exp, approx) < 0) + { + --approx; + if (++guard > 16) + break; + } - carry = static_cast(word >> (32 - bit_shift)); - } + guard = 0; + while (compare_scaled_with_pow10exp(magnitude, common_exp, approx + 1) >= 0) + { + ++approx; + if (++guard > 16) + break; + } - int new_size = src_count + word_shift; - if (carry != 0 && new_size < max_words) - { - out[new_size] = carry; - ++new_size; - } + return approx; +} - for (int i = 0; i < new_size; ++i) - words[i] = out[i]; +template +[[nodiscard]] constexpr inline bool exact_binary_components( + const typename Traits::value_type& x, + biguint& magnitude, + int& binary_exp, + bool& neg) +{ + int common_exp = std::numeric_limits::max(); + bool have_term = false; - size = new_size; - trim(); + for (int i = 0; i < Traits::limb_count; ++i) + { + const double limb = Traits::limb(x, i); + if ((std::bit_cast(limb) & 0x7fffffffffffffffull) == 0) + continue; + + int exponent = 0; + bool limb_neg = false; + const std::uint64_t mantissa = decompose_double_mantissa(limb, exponent, limb_neg); + if (mantissa == 0) + continue; + + common_exp = (exponent < common_exp) ? exponent : common_exp; + have_term = true; } - [[nodiscard]] constexpr int compare(const biguint& other) const noexcept + if (!have_term) { - if (size < other.size) return -1; - if (size > other.size) return 1; - - for (int i = size - 1; i >= 0; --i) - { - if (words[i] < other.words[i]) return -1; - if (words[i] > other.words[i]) return 1; - } - return 0; + magnitude.clear(); + binary_exp = 0; + neg = false; + return false; } - constexpr void sub_inplace(const biguint& other) noexcept + signed_biguint acc{}; + for (int i = 0; i < Traits::limb_count; ++i) { - std::uint64_t borrow = 0; - for (int i = 0; i < size; ++i) - { - const std::uint64_t a = words[i]; - const std::uint64_t b = static_cast(i < other.size ? other.words[i] : 0u) + borrow; - - if (a < b) - { - words[i] = static_cast((std::uint64_t{1} << 32) + a - b); - borrow = 1; - } - else - { - words[i] = static_cast(a - b); - borrow = 0; - } - } - trim(); + const double limb = Traits::limb(x, i); + if ((std::bit_cast(limb) & 0x7fffffffffffffffull) == 0) + continue; + + int exponent = 0; + bool limb_neg = false; + const std::uint64_t mantissa = decompose_double_mantissa(limb, exponent, limb_neg); + if (mantissa == 0) + continue; + + biguint term{ mantissa }; + term.shl_bits(exponent - common_exp); + add_signed(acc, term, limb_neg); } -}; - -[[nodiscard]] constexpr inline int compare(const biguint& a, const biguint& b) noexcept -{ - return a.compare(b); -} -[[nodiscard]] constexpr inline biguint shifted(biguint v, int bits) noexcept -{ - v.shl_bits(bits); - return v; + magnitude = acc.mag; + binary_exp = common_exp; + neg = acc.neg; + return !magnitude.is_zero(); } -[[nodiscard]] constexpr inline int high_word_index_shifted(const biguint& value, int bits) noexcept +[[nodiscard]] constexpr inline int compare_binary_scaled( + const biguint& lhs, + int lhs_exp, + const biguint& rhs, + int rhs_exp) noexcept { - if (value.is_zero()) - return -1; - - const int word_shift = bits >> 5; - const int bit_shift = bits & 31; - const bool extra_word = bit_shift != 0 && (value.words[value.size - 1] >> (32 - bit_shift)) != 0; - return word_shift + value.size - 1 + (extra_word ? 1 : 0); + if (lhs_exp == rhs_exp) + return compare(lhs, rhs); + if (lhs_exp > rhs_exp) + return -compare_shifted(rhs, lhs, lhs_exp - rhs_exp); + return compare_shifted(lhs, rhs, rhs_exp - lhs_exp); } -[[nodiscard]] constexpr inline std::uint32_t shifted_word_at(const biguint& value, int index, int bits) noexcept +template +[[nodiscard]] constexpr inline int compare_decimal_twice_to_binary_sum( + const biguint& coefficient, + int decimal_exp, + const typename Traits::value_type& lhs, + const typename Traits::value_type& rhs) noexcept { - if (index < 0 || value.is_zero()) + biguint lhs_magnitude; + biguint rhs_magnitude; + int lhs_exp = 0; + int rhs_exp = 0; + bool lhs_neg = false; + bool rhs_neg = false; + const bool have_lhs = exact_binary_components( + lhs, lhs_magnitude, lhs_exp, lhs_neg); + const bool have_rhs = exact_binary_components( + rhs, rhs_magnitude, rhs_exp, rhs_neg); + + // This helper compares positive parse magnitudes and their adjacent + // positive candidates. A negative component sum would indicate a broken + // caller invariant, so leave the original candidate unchanged. + if ((have_lhs && lhs_neg) || (have_rhs && rhs_neg)) return 0; - const int word_shift = bits >> 5; - const int bit_shift = bits & 31; - const int src = index - word_shift; + biguint sum; + int sum_exp = 0; + if (!have_lhs) + { + sum = rhs_magnitude; + sum_exp = rhs_exp; + } + else if (!have_rhs) + { + sum = lhs_magnitude; + sum_exp = lhs_exp; + } + else + { + sum_exp = lhs_exp < rhs_exp ? lhs_exp : rhs_exp; + lhs_magnitude.shl_bits(lhs_exp - sum_exp); + rhs_magnitude.shl_bits(rhs_exp - sum_exp); + lhs_magnitude.add_inplace(rhs_magnitude); + sum = lhs_magnitude; + } - if (bit_shift == 0) - return (src >= 0 && src < value.size) ? value.words[src] : 0u; + if (decimal_exp >= 0) + { + const biguint scaled_decimal = + mul_big(coefficient, pow5_big(decimal_exp)); + return compare_binary_scaled( + scaled_decimal, + decimal_exp + 1, + sum, + sum_exp); + } - std::uint32_t out = 0; - if (src >= 0 && src < value.size) - out |= static_cast(static_cast(value.words[src]) << bit_shift); - if (src - 1 >= 0 && src - 1 < value.size) - out |= static_cast(value.words[src - 1] >> (32 - bit_shift)); - return out; + const int scale = -decimal_exp; + const biguint scaled_sum = mul_big(sum, pow5_big(scale)); + return compare_binary_scaled( + coefficient, + 1 - scale, + scaled_sum, + sum_exp); } -[[nodiscard]] constexpr inline int compare_shifted(const biguint& a, const biguint& b, int bits) noexcept +template +[[nodiscard]] constexpr inline bool exact_decimal_places_integer( + const typename Traits::value_type& x, + int decimal_places, + biguint& coefficient, + bool& neg) { - const int a_hi = a.size - 1; - const int b_hi = high_word_index_shifted(b, bits); - if (a_hi < b_hi) return -1; - if (a_hi > b_hi) return 1; - - for (int i = a_hi; i >= 0; --i) + int binary_exp = 0; + biguint magnitude; + if (!exact_binary_components(x, magnitude, binary_exp, neg)) { - const std::uint32_t bw = shifted_word_at(b, i, bits); - if (a.words[i] < bw) return -1; - if (a.words[i] > bw) return 1; + coefficient.clear(); + return false; } - return 0; + + if (decimal_places > 13) + magnitude = mul_big(magnitude, pow5_big(decimal_places)); + else + for (int i = 0; i < decimal_places; ++i) + magnitude.mul_small(5); + + coefficient = rounded_decimal_places_shift( + magnitude, + binary_exp + decimal_places); + return true; } -constexpr inline void sub_shifted_inplace(biguint& a, const biguint& b, int bits) noexcept +constexpr inline void significant_decimal_ratio( + const biguint& magnitude, + int common_exp, + int scale10, + biguint& numerator, + biguint& denominator) noexcept { - const int a_size = a.size; - std::uint64_t borrow = 0; - for (int i = 0; i < a_size; ++i) + numerator = magnitude; + denominator = biguint{ 1 }; + + if (scale10 >= -10 && scale10 <= 10) { - const std::uint64_t bi = shifted_word_at(b, i, bits); - const std::uint64_t sub = bi + borrow; - const std::uint64_t ai = a.words[i]; - if (ai < sub) + if (common_exp >= 0) + numerator.shl_bits(common_exp); + else + denominator.shl_bits(-common_exp); + + if (scale10 >= 0) { - a.words[i] = static_cast((std::uint64_t{1} << 32) + ai - sub); - borrow = 1; + for (int i = 0; i < scale10; ++i) + numerator.mul_small(10); } else { - a.words[i] = static_cast(ai - sub); - borrow = 0; + for (int i = 0; i < -scale10; ++i) + denominator.mul_small(10); } + return; } - a.trim(); + + if (scale10 >= 0) + numerator = mul_big(numerator, pow5_big(scale10)); + else + denominator = pow5_big(-scale10); + + const int binary_shift = common_exp + scale10; + if (binary_shift >= 0) + numerator.shl_bits(binary_shift); + else + denominator.shl_bits(-binary_shift); } -constexpr inline void mod_shift_subtract(const biguint& numerator, const biguint& denominator, biguint& remainder) noexcept +template +[[nodiscard]] constexpr inline bool exact_significant_decimal( + const biguint& magnitude, + int common_exp, + int significant_figures, + biguint& coefficient, + int& exp10) { - remainder = numerator; - if (denominator.is_zero()) - return; + const int scale10 = significant_figures - 1 - exp10; + biguint num; + biguint den; + significant_decimal_ratio(magnitude, common_exp, scale10, num, den); + + const biguint limit = pow10_big(significant_figures); + const int quotient_bits = limit.bit_length() + 1; + + biguint q; + biguint r; + const int den_shift = single_bit_index(den); + if (den_shift >= 0) + { + q = shr_bits_copy(num, den_shift); + r = low_bits_copy(num, den_shift); + } + else if (quotient_bits <= 64) + q = biguint{ div_quotient_limited(num, den, quotient_bits, r) }; + else + divmod_limited_quotient_chunked(num, den, quotient_bits, q, r); - while (remainder.compare(denominator) >= 0) + if (!r.is_zero()) + { + const int cmp = -compare_shifted(den, r, 1); + if (cmp > 0 || (cmp == 0 && q.is_odd())) + q.add_small(1); + } + + if (compare(q, limit) >= 0) { - int shift = (remainder.bit_length() - 1) - (denominator.bit_length() - 1); - if (shift > 0 && compare_shifted(remainder, denominator, shift) < 0) - --shift; - sub_shifted_inplace(remainder, denominator, shift); + q.div_small(10); + ++exp10; } + + coefficient = q; + return true; } -constexpr inline biguint mul_big(const biguint& a, const biguint& b) noexcept +template +[[nodiscard]] constexpr inline bool exact_significant_decimal( + const typename Traits::value_type& x, + int significant_figures, + biguint& coefficient, + int& exp10) { - biguint out; - if (a.is_zero() || b.is_zero()) - return out; + biguint magnitude; + int common_exp = 0; + bool neg = false; + if (!exact_binary_components(x, magnitude, common_exp, neg) || neg) + return false; + + exp10 = decimal_exponent_from_components(magnitude, common_exp); - const int product_size = a.size + b.size; - out.size = (product_size < biguint::max_words) ? product_size : biguint::max_words; - for (int i = 0; i < out.size; ++i) - out.words[i] = 0; + return exact_significant_decimal(magnitude, common_exp, significant_figures, coefficient, exp10); +} + +template +[[nodiscard]] constexpr inline bool exact_significant_decimal_from_floor_candidate( + const biguint& magnitude, + int common_exp, + int significant_figures, + const biguint& floor_candidate, + int& exp10, + biguint& coefficient) +{ + const int scale10 = significant_figures - 1 - exp10; + biguint num; + biguint den; + significant_decimal_ratio(magnitude, common_exp, scale10, num, den); + + const biguint limit = pow10_big(significant_figures); + const int quotient_bits = limit.bit_length() + 1; - for (int i = 0; i < a.size; ++i) + biguint q; + biguint r; + if (!divmod_from_floor_candidate(num, den, floor_candidate, quotient_bits, q, r)) + return false; + + if (!r.is_zero()) { - std::uint64_t carry = 0; - const int writable_count = biguint::max_words - i; - const int jmax = (b.size < writable_count) ? b.size : writable_count; - for (int j = 0; j < jmax; ++j) - { - const int k = i + j; - const std::uint64_t cur = - static_cast(out.words[k]) + - static_cast(a.words[i]) * static_cast(b.words[j]) + - carry; - out.words[k] = static_cast(cur); - carry = cur >> 32; - } + const int cmp = -compare_shifted(den, r, 1); + if (cmp > 0 || (cmp == 0 && q.is_odd())) + q.add_small(1); + } - int k = i + jmax; - while (carry != 0 && k < out.size) - { - const std::uint64_t cur = static_cast(out.words[k]) + carry; - out.words[k] = static_cast(cur); - carry = cur >> 32; - ++k; - } + if (compare(q, limit) >= 0) + { + q.div_small(10); + ++exp10; } - out.trim(); - return out; + coefficient = q; + return true; } -[[nodiscard]] constexpr inline biguint pow5_big(int exponent) noexcept +template +[[nodiscard]] constexpr inline bool exact_significant_decimal_from_floor_candidate( + const typename Traits::value_type& x, + int significant_figures, + const biguint& floor_candidate, + int& exp10, + biguint& coefficient) { - biguint out{1}; - for (int i = 0; i < exponent; ++i) - out.mul_small(5); - return out; + biguint magnitude; + int common_exp = 0; + bool neg = false; + if (!exact_binary_components(x, magnitude, common_exp, neg) || neg) + return false; + + return exact_significant_decimal_from_floor_candidate( + magnitude, + common_exp, + significant_figures, + floor_candidate, + exp10, + coefficient); } -[[nodiscard]] constexpr inline biguint pow10_big(int exponent) noexcept +template +[[nodiscard]] constexpr inline bool exact_decimal_exponent( + const typename Traits::value_type& x, + int& exp10) { - biguint out{1}; - for (int i = 0; i < exponent; ++i) - out.mul_small(10); - return out; + biguint magnitude; + int common_exp = 0; + bool neg = false; + if (!exact_binary_components(x, magnitude, common_exp, neg) || neg) + return false; + + exp10 = decimal_exponent_from_components(magnitude, common_exp); + return true; } -constexpr inline void divmod_bitwise(const biguint& numerator, const biguint& denominator, biguint& quotient, biguint& remainder) noexcept +template +constexpr inline int write_unsigned_decimal_rev(char* dst, UInt value) noexcept { - quotient.clear(); - remainder.clear(); - - if (denominator.is_zero()) - return; - - const int nbits = numerator.bit_length(); - for (int i = nbits - 1; i >= 0; --i) + int len = 0; + do { - remainder.shl1(); - if (numerator.get_bit(i)) - remainder.add_small(1); - - if (remainder.compare(denominator) >= 0) - { - remainder.sub_inplace(denominator); - quotient.set_bit(i); - } - } - - quotient.trim(); - remainder.trim(); + dst[len++] = static_cast('0' + (value % 10)); + value /= 10; + } while (value != 0); + return len; } -[[nodiscard]] constexpr inline std::uint64_t div_quotient_limited(const biguint& numerator, const biguint& denominator, int quotient_bits, biguint& remainder) noexcept +template +constexpr inline void append_unsigned_decimal(String& out, UInt value) { - remainder = numerator; + char buf[32]; + const int len = write_unsigned_decimal_rev(buf, value); + for (int i = len - 1; i >= 0; --i) + out.push_back(buf[i]); +} - if (denominator.is_zero() || quotient_bits <= 0) - return 0; +template +[[nodiscard]] constexpr inline String to_decimal_string(biguint value) +{ + if (value.is_zero()) + return "0"; - const int num_bits = numerator.bit_length(); - const int den_bits = denominator.bit_length(); - if (num_bits == 0 || den_bits == 0 || num_bits < den_bits) + constexpr std::size_t chunk_capacity = (String::static_capacity + 8u) / 9u; + std::uint32_t chunks[chunk_capacity]; + int chunk_count = 0; + while (!value.is_zero()) { - remainder.trim(); - return 0; - } + if (chunk_count >= static_cast(sizeof(chunks) / sizeof(chunks[0]))) + throw "static_string capacity exceeded"; - int shift = num_bits - den_bits; - if (shift >= quotient_bits) - shift = quotient_bits - 1; + chunks[chunk_count++] = value.div_small(1000000000u); + } - std::uint64_t quotient = 0; - for (int i = shift; i >= 0; --i) + String out; + append_unsigned_decimal(out, chunks[chunk_count - 1]); + for (int i = chunk_count - 2; i >= 0; --i) { - if (compare_shifted(remainder, denominator, i) >= 0) - { - sub_shifted_inplace(remainder, denominator, i); - quotient |= (std::uint64_t{ 1 } << i); - } + char part_buf[16]; + const int part_len = write_unsigned_decimal_rev(part_buf, chunks[i]); + out.append(static_cast(9 - part_len), '0'); + for (int j = part_len - 1; j >= 0; --j) + out.push_back(part_buf[j]); } - - remainder.trim(); - return quotient; + return out; } -[[nodiscard]] constexpr inline biguint extract_rounded_significand_chunks(const biguint& numerator, const biguint& denominator, int ratio_exp, int significand_bits) noexcept +template +[[nodiscard]] constexpr inline bool exact_scientific_digits(const typename Traits::value_type& x, int sig, String& digits, int& exp10) { - const int chunk_bits = 53; - const int chunk_count = (significand_bits + chunk_bits - 1) / chunk_bits; - const int first_chunk_bits = significand_bits - (chunk_count - 1) * chunk_bits; - const int first_scale_bits = first_chunk_bits - 1; - - biguint normalized_num = numerator; - biguint normalized_den = denominator; - if (ratio_exp >= 0) - normalized_den.shl_bits(ratio_exp); - else - normalized_num.shl_bits(-ratio_exp); - - biguint scaled = normalized_num; - if (first_scale_bits > 0) - scaled.shl_bits(first_scale_bits); - - biguint remainder; - const std::uint64_t first_chunk = div_quotient_limited(scaled, normalized_den, first_chunk_bits, remainder); + biguint coefficient; + if (!exact_significant_decimal(x, sig, coefficient, exp10)) + return false; - biguint q{ first_chunk }; - for (int chunk_index = 1; chunk_index < chunk_count; ++chunk_index) + digits = to_decimal_string(coefficient); + if (static_cast(digits.size()) < sig) { - if (!remainder.is_zero()) - remainder.shl_bits(chunk_bits); - - const std::uint64_t chunk = div_quotient_limited(remainder, normalized_den, chunk_bits, remainder); - q.shl_bits(chunk_bits); - if (chunk != 0) - q.add_inplace(biguint{ chunk }); + const std::size_t zero_pad_count = static_cast(sig - static_cast(digits.size())); + digits.insert(0, zero_pad_count, '0'); } - if (!remainder.is_zero()) - remainder.shl_bits(2); + return true; +} - const std::uint64_t extra_bits = div_quotient_limited(remainder, normalized_den, 2, remainder); - const bool guard_bit = (extra_bits & 0x2u) != 0; - const bool trailing_bits = (extra_bits & 0x1u) != 0 || !remainder.is_zero(); +[[nodiscard]] BL_FORCE_INLINE constexpr bool pow5_u64(int exponent, std::uint64_t& out) noexcept +{ + if (exponent < 0 || exponent >= static_cast( + sizeof(pow_tables::power5_u64) / sizeof(pow_tables::power5_u64[0]))) + return false; - if (guard_bit && (trailing_bits || q.is_odd())) - q.add_small(1); + out = pow_tables::power5_u64[exponent]; + return true; +} - q.trim(); - return q; +[[nodiscard]] BL_FORCE_INLINE constexpr bool pow5_u32(int exponent, std::uint32_t& out) noexcept +{ + std::uint64_t value = 0; + if (!pow5_u64(exponent, value) || value > static_cast(~std::uint32_t{ 0 })) + return false; + + out = static_cast(value); + return true; } -[[nodiscard]] constexpr inline int floor_log2_ratio(const biguint& numerator, const biguint& denominator) noexcept +[[nodiscard]] constexpr inline int floor_log2_ratio_u64(std::uint64_t numerator, std::uint64_t denominator) noexcept { - int k = (numerator.bit_length() - 1) - (denominator.bit_length() - 1); + int k = static_cast(std::bit_width(numerator)) - static_cast(std::bit_width(denominator)); if (k >= 0) { - biguint shifted_den = denominator; - shifted_den.shl_bits(k); - if (numerator.compare(shifted_den) < 0) + const std::uint64_t shifted_den = denominator << k; + if (numerator < shifted_den) --k; } else { - biguint shifted_num = numerator; - shifted_num.shl_bits(-k); - if (shifted_num.compare(denominator) < 0) + const std::uint64_t shifted_num = numerator << -k; + if (shifted_num < denominator) --k; } return k; } -struct signed_biguint +template +[[nodiscard]] constexpr inline int decimal_conversion_significand_bits() noexcept { - biguint mag; - bool neg = false; -}; + if constexpr (requires { Traits::decimal_conversion_significand_bits; }) + return Traits::decimal_conversion_significand_bits; + else if constexpr (requires { Traits::conversion_significand_bits; }) + return Traits::conversion_significand_bits; + else + return Traits::significand_bits; +} -constexpr inline void add_signed(signed_biguint& acc, biguint term, bool term_neg) noexcept +template +[[nodiscard]] constexpr inline int binary_conversion_significand_bits() noexcept { - if (acc.mag.is_zero()) + if constexpr (requires { Traits::binary_conversion_significand_bits; }) + return Traits::binary_conversion_significand_bits; + else if constexpr (requires { Traits::conversion_significand_bits; }) + return Traits::conversion_significand_bits; + else + return Traits::significand_bits; +} + +template +constexpr inline bool compact_decimal_to_value(std::uint64_t coeff, int dec_exp, bool neg, typename Traits::value_type& out) noexcept +{ + if (coeff == 0) { - acc.mag = term; - acc.neg = term_neg; - return; + out = Traits::zero(neg); + return true; } - if (acc.neg == term_neg) + std::uint64_t numerator = coeff; + std::uint32_t denominator = 1; + int bin_exp = 0; + + if (dec_exp >= 0) { - acc.mag.add_inplace(term); - return; + std::uint64_t scale5 = 0; + if (!pow5_u64(dec_exp, scale5) || numerator > (~std::uint64_t{ 0 }) / scale5) + return false; + + numerator *= scale5; + bin_exp = dec_exp; + } + else + { + const int original_pow10 = -dec_exp; + int pow5 = original_pow10; + while (pow5 > 0 && (numerator % 5) == 0) + { + numerator /= 5; + --pow5; + } + + if (!pow5_u32(pow5, denominator)) + return false; + + bin_exp = -original_pow10; } - const int cmp = acc.mag.compare(term); - if (cmp == 0) + const int ratio_exp = floor_log2_ratio_u64(numerator, denominator); + const int conversion_bits = decimal_conversion_significand_bits(); + const int scale_bits = conversion_bits - 1 - ratio_exp; + if (scale_bits < 0) + return false; + + biguint q{ numerator }; + q.shl_bits(scale_bits); + + std::uint32_t remainder = 0; + if (denominator != 1) + remainder = q.div_small(denominator); + + if (remainder != 0) { - acc.mag.clear(); - acc.neg = false; - return; + const std::uint64_t twice_remainder = static_cast(remainder) << 1; + const int cmp = twice_remainder < denominator ? -1 : twice_remainder > denominator ? 1 : 0; + if (cmp > 0 || (cmp == 0 && q.is_odd())) + q.add_small(1); } - if (cmp > 0) + int adjusted_ratio_exp = ratio_exp; + if (q.bit_length() > conversion_bits) { - acc.mag.sub_inplace(term); - return; + q.shr1(); + ++adjusted_ratio_exp; } - term.sub_inplace(acc.mag); - acc.mag = term; - acc.neg = term_neg; + const int e2 = bin_exp + adjusted_ratio_exp; + if (e2 > Traits::max_binary_exponent) + out = Traits::infinity(neg); + else if (e2 < Traits::min_binary_exponent) + out = Traits::zero(neg); + else + out = Traits::pack_from_significand(q, e2, neg); + + return true; } -[[nodiscard]] constexpr inline int compare_scaled_with_pow10exp(const biguint& mag, int bin_exp, int dec_exp) noexcept +template +constexpr inline bool compact_decimal_to_value(const biguint& coeff, int dec_exp, bool neg, typename Traits::value_type& out) noexcept { - if (dec_exp >= 0) + if (coeff.size > 2) + return false; + + std::uint64_t compact = 0; + if (coeff.size > 0) + compact = coeff.words[0]; + if (coeff.size > 1) + compact |= static_cast(coeff.words[1]) << 32; + + return compact_decimal_to_value(compact, dec_exp, neg, out); +} + +template +constexpr inline typename Traits::value_type exact_binary_integer_to_value( + biguint q, + int bin_exp, + bool neg, + int conversion_bits) noexcept +{ + if (q.is_zero()) + return Traits::zero(neg); + + int ratio_exp = q.bit_length() - 1; + if (ratio_exp > conversion_bits - 1) { - const biguint p10 = pow10_big(dec_exp); - if (bin_exp >= 0) - return compare(shifted(mag, bin_exp), p10); - return compare(mag, shifted(p10, -bin_exp)); - } + const int shift = ratio_exp - (conversion_bits - 1); + const bool round_bit = q.get_bit(shift - 1); + const bool sticky = shift > 1 && any_low_bits_set(q, shift - 1); - biguint lhs = mag; - for (int i = 0; i < -dec_exp; ++i) - lhs.mul_small(10); + q = shr_bits_copy(q, shift); + if (round_bit && (sticky || q.is_odd())) + q.add_small(1); - if (bin_exp >= 0) + if (q.bit_length() > conversion_bits) + { + q.shr1(); + ++ratio_exp; + } + } + else if (ratio_exp < conversion_bits - 1) { - lhs.shl_bits(bin_exp); - return compare(lhs, biguint{ 1 }); + q.shl_bits((conversion_bits - 1) - ratio_exp); } - return compare(lhs, shifted(biguint{ 1 }, -bin_exp)); + const int e2 = bin_exp + ratio_exp; + if (e2 > Traits::max_binary_exponent) + return Traits::infinity(neg); + if (e2 < Traits::min_binary_exponent) + return Traits::zero(neg); + + return Traits::pack_from_significand(q, e2, neg); } -[[nodiscard]] constexpr inline std::uint64_t decompose_double_mantissa(double x, int& exponent, bool& neg) noexcept +template +constexpr inline typename Traits::value_type exact_binary_integer_to_value(biguint q, int bin_exp, bool neg) noexcept { - const std::uint64_t bits = std::bit_cast(x); - neg = (bits >> 63) != 0; - const std::uint64_t frac = bits & ((std::uint64_t{ 1 } << 52) - 1); - const std::uint32_t exp_bits = static_cast((bits >> 52) & 0x7ffu); - if (exp_bits == 0) + return exact_binary_integer_to_value( + q, + bin_exp, + neg, + binary_conversion_significand_bits()); +} + +template +constexpr inline typename Traits::value_type exact_decimal_to_value(const biguint& coeff, int dec_exp, bool neg) noexcept +{ + typename Traits::value_type compact{}; + if (compact_decimal_to_value(coeff, dec_exp, neg, compact)) + return compact; + + if (dec_exp >= 0) { - exponent = -1074; - return frac; + biguint numerator = mul_big(coeff, pow5_big(dec_exp)); + return exact_binary_integer_to_value( + numerator, + dec_exp, + neg, + decimal_conversion_significand_bits()); } - exponent = static_cast(exp_bits) - 1023 - 52; - return (std::uint64_t{ 1 } << 52) | frac; + biguint numerator = coeff; + biguint denominator = pow5_big(-dec_exp); + + int ratio_exp = floor_log2_ratio(numerator, denominator); + const int conversion_bits = decimal_conversion_significand_bits(); + + biguint q; + if (!try_extract_rounded_significand_reciprocal( + numerator, + denominator, + -dec_exp, + ratio_exp, + conversion_bits, + q)) + { + q = extract_rounded_significand_chunks( + numerator, + denominator, + ratio_exp, + conversion_bits); + } + if (q.bit_length() > conversion_bits) + { + q.shr1(); + ++ratio_exp; + } + + const int e2 = dec_exp + ratio_exp; + if (e2 > Traits::max_binary_exponent) + return Traits::infinity(neg); + if (e2 < Traits::min_binary_exponent) + return Traits::zero(neg); + + return Traits::pack_from_significand(q, e2, neg); } } // namespace bl::detail::exact_decimal diff --git a/include/fltx/detail/common_fp.h b/include/fltx/detail/common_fp.h index f97aa5e..f3a3f63 100644 --- a/include/fltx/detail/common_fp.h +++ b/include/fltx/detail/common_fp.h @@ -17,6 +17,31 @@ #include "fltx/config.h" +// Discard arithmetic-only constant-evaluation guards structurally when the compiler supports it. +#if defined(FLTX_SIMULATE_FIXED_CONSTEVAL_MODE) + #define BL_FP_IF_CONSTEVAL_WARNING_PUSH + #define BL_FP_IF_CONSTEVAL_WARNING_POP + #define BL_FP_IF_CONSTEVAL if (true) +#elif !BL_HAS_IF_CONSTEVAL && defined(__clang__) && (__clang_major__ >= 14) + #define BL_FP_IF_CONSTEVAL_WARNING_PUSH \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wc++23-extensions\"") + #define BL_FP_IF_CONSTEVAL_WARNING_POP _Pragma("clang diagnostic pop") + #define BL_FP_IF_CONSTEVAL if consteval +#else + #define BL_FP_IF_CONSTEVAL_WARNING_PUSH BL_IF_CONSTEVAL_WARNING_PUSH + #define BL_FP_IF_CONSTEVAL_WARNING_POP BL_IF_CONSTEVAL_WARNING_POP + #define BL_FP_IF_CONSTEVAL BL_IF_CONSTEVAL +#endif + +#if FLTX_X86_FMA_RUNTIME_CHECK +# include +#endif + +#if FLTX_USE_SCALAR_X86_FMA || FLTX_GUARDED_X86_FMA +# include +#endif + namespace bl::detail::fp { @@ -160,30 +185,10 @@ BL_FORCE_INLINE constexpr bool isnan(float value) noexcept return (bits & 0x7fffffffu) > 0x7f800000u; } -template -BL_FORCE_INLINE constexpr double zero_low_fraction_bits_finite(double value) noexcept -{ - static_assert(bits_to_clear >= 0 && bits_to_clear <= 52); - - if constexpr (bits_to_clear == 0) - return value; - - if (iszero_or_inf_or_nan(value)) - return value; - - constexpr std::uint64_t fraction_mask = (std::uint64_t{ 1 } << 52) - 1ULL; - constexpr std::uint64_t clear_mask = ~((std::uint64_t{ 1 } << bits_to_clear) - 1ULL); - - const std::uint64_t bits = std::bit_cast(value); - const std::uint64_t sign_and_exponent = bits & ~fraction_mask; - const std::uint64_t fraction = bits & fraction_mask; - return std::bit_cast(sign_and_exponent | (fraction & clear_mask)); -} - - BL_FORCE_INLINE constexpr double absd(double x) noexcept { - return (x < 0.0) ? -x : x; + return std::bit_cast( + std::bit_cast(x) & 0x7fffffffffffffffULL); } BL_FORCE_INLINE constexpr int frexp_exponent(double x) noexcept @@ -208,7 +213,7 @@ BL_FORCE_INLINE constexpr int frexp_exponent(double x) noexcept BL_FORCE_INLINE constexpr int frexp_exponent_limb(double value) noexcept { - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { return frexp_exponent(value); } @@ -277,6 +282,76 @@ BL_FORCE_INLINE constexpr bool abs_double_is_power_of_two(double value) noexcept return exact_pow2_scale_info(value).valid; } +[[nodiscard]] BL_FORCE_INLINE constexpr double positive_power_of_two(int exponent) noexcept +{ + if (exponent >= -1022) + { + return std::bit_cast( + static_cast(exponent + 1023) << 52); + } + return std::bit_cast( + std::uint64_t{ 1 } << static_cast(exponent + 1074)); +} + +[[nodiscard]] BL_FORCE_INLINE constexpr double nominal_ulp_step( + double leading, + double trailing, + bool toward_smaller_magnitude, + int precision_bits) noexcept +{ + constexpr std::uint64_t sign_mask = 0x8000000000000000ull; + constexpr std::uint64_t fraction_mask = 0x000fffffffffffffull; + + const std::uint64_t bits = std::bit_cast(leading); + const std::uint32_t exponent_bits = + static_cast((bits >> 52) & 0x7ffu); + const std::uint64_t fraction = bits & fraction_mask; + + if (exponent_bits != 0 && fraction != 0) + { + const int step_exponent_bits = + static_cast(exponent_bits) - (precision_bits - 1); + if (step_exponent_bits > 0) + { + return std::bit_cast( + static_cast(step_exponent_bits) << 52); + } + + const int step_exponent = + static_cast(exponent_bits) - 1023 + 1 - precision_bits; + return positive_power_of_two(step_exponent < -1074 ? -1074 : step_exponent); + } + + const bool opposite_trailing_sign = + trailing != 0.0 && + ((bits & sign_mask) != + (std::bit_cast(trailing) & sign_mask)); + const int lower_binade_adjustment = + opposite_trailing_sign || + (trailing == 0.0 && toward_smaller_magnitude); + + if (exponent_bits != 0) + { + const int step_exponent_bits = + static_cast(exponent_bits) - (precision_bits - 1) - + lower_binade_adjustment; + if (step_exponent_bits > 0) + { + return std::bit_cast( + static_cast(step_exponent_bits) << 52); + } + + const int step_exponent = + static_cast(exponent_bits) - 1023 + 1 - precision_bits - + lower_binade_adjustment; + return positive_power_of_two(step_exponent < -1074 ? -1074 : step_exponent); + } + + const int binade = highest_bit_index(fraction) - 1074; + const int step_exponent = binade + 1 - precision_bits; + return positive_power_of_two(step_exponent < -1074 ? -1074 : step_exponent); +} + BL_FORCE_INLINE constexpr double scalbn(double value, int exp) noexcept { if (exp == 0 || iszero_or_inf_or_nan(value)) @@ -360,7 +435,7 @@ BL_FORCE_INLINE constexpr double ldexp(double value, int exp) noexcept BL_FORCE_INLINE constexpr double ldexp_limb(double value, int exponent) noexcept { - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { return ldexp(value, exponent); } @@ -451,65 +526,475 @@ BL_FORCE_INLINE constexpr bool double_integer_is_odd(double x) noexcept return (i & 1ll) != 0; } +// GCC can reassociate error-free transforms under -ffast-math even inside a +// no-fast-math function scope. Empty XMM constraints preserve the required +// rounding points without emitting instructions or affecting constant evaluation. +#if defined(__GNUC__) && !defined(__clang__) && defined(__FAST_MATH__) && defined(__SSE2__) +#define FLTX_DETAIL_GNU_FAST_MATH_EFT_BARRIER 1 +#define FLTX_DETAIL_EFT_BARRIER(value) __asm__ __volatile__("" : "+x"(value)) +#else +#define FLTX_DETAIL_GNU_FAST_MATH_EFT_BARRIER 0 +#endif + BL_PUSH_PRECISE +#if FLTX_DETAIL_GNU_FAST_MATH_EFT_BARRIER +BL_FORCE_INLINE void two_sum_precise_runtime( + double a, + double b, + double& s, + double& e) noexcept +{ + s = a + b; + FLTX_DETAIL_EFT_BARRIER(s); + double bv = s - a; + FLTX_DETAIL_EFT_BARRIER(bv); + double av = s - bv; + FLTX_DETAIL_EFT_BARRIER(av); + double ar = a - av; + FLTX_DETAIL_EFT_BARRIER(ar); + double br = b - bv; + FLTX_DETAIL_EFT_BARRIER(br); + e = ar + br; + FLTX_DETAIL_EFT_BARRIER(e); +} +#endif + BL_FORCE_INLINE constexpr void two_sum_precise(double a, double b, double& s, double& e) noexcept { +#if FLTX_DETAIL_GNU_FAST_MATH_EFT_BARRIER + if (!std::is_constant_evaluated()) + { + two_sum_precise_runtime(a, b, s, e); + return; + } +#endif s = a + b; double bv = s - a; e = (a - (s - bv)) + (b - bv); } +#if FLTX_DETAIL_GNU_FAST_MATH_EFT_BARRIER +BL_FORCE_INLINE void two_diff_precise_runtime( + double a, + double b, + double& s, + double& e) noexcept +{ + s = a - b; + FLTX_DETAIL_EFT_BARRIER(s); + double bv = s - a; + FLTX_DETAIL_EFT_BARRIER(bv); + double av = s - bv; + FLTX_DETAIL_EFT_BARRIER(av); + double ar = a - av; + FLTX_DETAIL_EFT_BARRIER(ar); + double br = b + bv; + FLTX_DETAIL_EFT_BARRIER(br); + e = ar - br; + FLTX_DETAIL_EFT_BARRIER(e); +} +#endif + BL_FORCE_INLINE constexpr void two_diff_precise(double a, double b, double& s, double& e) noexcept { +#if FLTX_DETAIL_GNU_FAST_MATH_EFT_BARRIER + if (!std::is_constant_evaluated()) + { + two_diff_precise_runtime(a, b, s, e); + return; + } +#endif s = a - b; double bv = s - a; e = (a - (s - bv)) - (b + bv); } +#if FLTX_DETAIL_GNU_FAST_MATH_EFT_BARRIER +BL_FORCE_INLINE void quick_two_sum_precise_runtime( + double a, + double b, + double& s, + double& e) noexcept +{ + s = a + b; + FLTX_DETAIL_EFT_BARRIER(s); + double delta = s - a; + FLTX_DETAIL_EFT_BARRIER(delta); + e = b - delta; + FLTX_DETAIL_EFT_BARRIER(e); +} +#endif + BL_FORCE_INLINE constexpr void quick_two_sum_precise(double a, double b, double& s, double& e) noexcept { +#if FLTX_DETAIL_GNU_FAST_MATH_EFT_BARRIER + if (!std::is_constant_evaluated()) + { + quick_two_sum_precise_runtime(a, b, s, e); + return; + } +#endif s = a + b; e = b - (s - a); } -BL_FORCE_INLINE constexpr void two_prod_precise_dekker(double a, double b, double& p, double& err) noexcept +// Adds one value to a nonoverlapping expansion ordered from small to large. +// Input and output may be the same array. +BL_FORCE_INLINE constexpr int grow_expansion_zeroelim( + int length, + double* expansion, + double value) noexcept +{ + double sum = value; + int out = 0; + + for (int i = 0; i < length; ++i) + { + double next{}, error{}; + two_sum_precise(sum, expansion[i], next, error); + if (error != 0.0) + expansion[out++] = error; + sum = next; + } + + if (sum != 0.0 || out == 0) + expansion[out++] = sum; + return out; +} + +#if FLTX_DETAIL_GNU_FAST_MATH_EFT_BARRIER +BL_FORCE_INLINE void two_prod_precise_dekker_runtime( + double a, + double b, + double& p, + double& err) noexcept { constexpr double split = 134217729.0; - double a_c = a * split; - double a_hi = a_c - (a_c - a); + double a_c = a * split; + FLTX_DETAIL_EFT_BARRIER(a_c); + double a_delta = a_c - a; + FLTX_DETAIL_EFT_BARRIER(a_delta); + double a_hi = a_c - a_delta; + FLTX_DETAIL_EFT_BARRIER(a_hi); double a_lo = a - a_hi; + FLTX_DETAIL_EFT_BARRIER(a_lo); + + double b_c = b * split; + FLTX_DETAIL_EFT_BARRIER(b_c); + double b_delta = b_c - b; + FLTX_DETAIL_EFT_BARRIER(b_delta); + double b_hi = b_c - b_delta; + FLTX_DETAIL_EFT_BARRIER(b_hi); + double b_lo = b - b_hi; + FLTX_DETAIL_EFT_BARRIER(b_lo); + + p = a * b; + FLTX_DETAIL_EFT_BARRIER(p); + double residual = a_hi * b_hi; + FLTX_DETAIL_EFT_BARRIER(residual); + residual -= p; + FLTX_DETAIL_EFT_BARRIER(residual); + double term = a_hi * b_lo; + FLTX_DETAIL_EFT_BARRIER(term); + residual += term; + FLTX_DETAIL_EFT_BARRIER(residual); + term = a_lo * b_hi; + FLTX_DETAIL_EFT_BARRIER(term); + residual += term; + FLTX_DETAIL_EFT_BARRIER(residual); + term = a_lo * b_lo; + FLTX_DETAIL_EFT_BARRIER(term); + err = residual + term; + FLTX_DETAIL_EFT_BARRIER(err); +} +#endif - double b_c = b * split; +BL_FORCE_INLINE constexpr void two_prod_precise_dekker(double a, double b, double& p, double& err) noexcept +{ +#if FLTX_DETAIL_GNU_FAST_MATH_EFT_BARRIER + if (!std::is_constant_evaluated()) + { + two_prod_precise_dekker_runtime(a, b, p, err); + return; + } +#endif + + constexpr double split = 134217729.0; + double a_c = a * split; + double a_hi = a_c - (a_c - a); + double a_lo = a - a_hi; + double b_c = b * split; double b_hi = b_c - (b_c - b); double b_lo = b - b_hi; p = a * b; err = ((a_hi * b_hi - p) + a_hi * b_lo + a_lo * b_hi) + a_lo * b_lo; } + +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) +inline constexpr double dekker_split_overflow_threshold = 0x1p996; +inline constexpr double dekker_split_underflow_threshold = 0x1p-968; + +// Tests whether Dekker splitting needs temporary operand scaling. +[[nodiscard]] BL_FORCE_INLINE constexpr bool dekker_product_needs_scaling(double a, double b) noexcept +{ + const double aa = absd(a); + const double ab = absd(b); + return aa > dekker_split_overflow_threshold || ab > dekker_split_overflow_threshold || + (aa != 0.0 && aa < dekker_split_underflow_threshold) || + (ab != 0.0 && ab < dekker_split_underflow_threshold); +} + +template +// Predicts whether repeated powers can leave the ordinary Dekker split range. +[[nodiscard]] BL_FORCE_INLINE constexpr bool ipow_loop_needs_range_safe_dekker(double head, ExpUnsigned exp) noexcept +{ + if (exp <= ExpUnsigned{ 4 } || iszero_or_inf_or_nan(head)) [[likely]] + return false; + + const double magnitude = absd(head); + if (magnitude <= 1.0) + return false; + + const int frexp_exponent = frexp_exponent_limb(magnitude); + const int bits_per_power = frexp_exponent > 1 ? frexp_exponent : 1; + return exp > static_cast(996 / bits_per_power); +} + +// Forms an exact product after scaling operands into Dekker's safe range. +BL_MSVC_NOINLINE constexpr void two_prod_precise_dekker_scaled(double a, double b, double& p, double& err) noexcept +{ + p = a * b; + if (isinf_or_nan(a) || isinf_or_nan(b) || isinf_or_nan(p)) + { + err = 0.0; + return; + } + + constexpr int scale = 28; + int a_scale = 0; + int b_scale = 0; + if (absd(a) > dekker_split_overflow_threshold) + a_scale = -scale; + else if (a != 0.0 && absd(a) < dekker_split_underflow_threshold) + a_scale = scale; + + if (absd(b) > dekker_split_overflow_threshold) + b_scale = -scale; + else if (b != 0.0 && absd(b) < dekker_split_underflow_threshold) + b_scale = scale; + + const int product_scale = a_scale + b_scale; + double scaled_product{}; + double scaled_error{}; + two_prod_precise_dekker(ldexp(a, a_scale), ldexp(b, b_scale), scaled_product, scaled_error); + + const double direct_scaled_product = ldexp(p, product_scale); + err = ldexp((scaled_product - direct_scaled_product) + scaled_error, -product_scale); +} + +// Forms an exact Dekker product with scaling only when the operand range requires it. +BL_FORCE_INLINE constexpr void two_prod_precise_dekker_range_safe(double a, double b, double& p, double& err) noexcept +{ + if (dekker_product_needs_scaling(a, b)) [[unlikely]] + { + two_prod_precise_dekker_scaled(a, b, p, err); + } + else + { + two_prod_precise_dekker(a, b, p, err); + } +} +#else +// Reports that scaling is disabled when range-safe Dekker support is not configured. +[[nodiscard]] BL_FORCE_INLINE constexpr bool dekker_product_needs_scaling(double a, double b) noexcept +{ + (void)a; + (void)b; + return false; +} + +template +// Reports that power-loop scaling is disabled without range-safe Dekker support. +[[nodiscard]] BL_FORCE_INLINE constexpr bool ipow_loop_needs_range_safe_dekker(double head, ExpUnsigned exp) noexcept +{ + (void)head; + (void)exp; + return false; +} +#endif BL_POP_PRECISE +#if FLTX_X86_FMA_RUNTIME_CHECK +[[nodiscard]] bool runtime_x86_fma_available_uncached() noexcept; + +inline constinit std::atomic x86_fma_available_state{-1}; +static_assert(decltype(x86_fma_available_state)::is_always_lock_free); + +[[nodiscard]] BL_NO_INLINE inline bool initialize_x86_fma_available() noexcept +{ + const bool available = runtime_x86_fma_available_uncached(); + x86_fma_available_state.store( + static_cast(available), + std::memory_order_relaxed); + return available; +} + +[[nodiscard]] BL_FORCE_INLINE bool x86_fma_available_cached() noexcept +{ + #if defined(FLTX_TEST_RUNTIME_X86_FMA_AVAILABLE) + return FLTX_TEST_RUNTIME_X86_FMA_AVAILABLE != 0; + #else + const std::int8_t state = + x86_fma_available_state.load(std::memory_order_relaxed); + return state >= 0 + ? state != 0 + : initialize_x86_fma_available(); + #endif +} +#endif + +[[nodiscard]] BL_FORCE_INLINE bool runtime_hardware_fma_enabled() noexcept +{ + #if FLTX_X86_FMA_RUNTIME_CHECK + return x86_fma_available_cached(); + #elif FLTX_USE_SCALAR_X86_FMA || FLTX_USE_BASELINE_ARM64_FMA + return true; + #else + return false; + #endif +} + +BL_PUSH_PRECISE +FLTX_X86_FMA_LEAF_INLINE double fmsub_fma(double a, double b, double c) noexcept +{ + #if FLTX_USE_SCALAR_X86_FMA || FLTX_GUARDED_X86_FMA + const __m128d aw = _mm_set_sd(a); + const __m128d bw = _mm_set_sd(b); + const __m128d cw = _mm_set_sd(c); + return _mm_cvtsd_f64(_mm_fmsub_sd(aw, bw, cw)); + #elif FLTX_USE_BASELINE_ARM64_FMA && (defined(__clang__) || defined(__GNUC__)) + return __builtin_fma(a, b, -c); + #elif FLTX_USE_BASELINE_ARM64_FMA + return std::fma(a, b, -c); + #elif defined(__clang__) || defined(__GNUC__) + return __builtin_fma(a, b, -c); + #else + return std::fma(a, b, -c); + #endif +} + +FLTX_X86_FMA_LEAF_INLINE double fmadd_fma(double a, double b, double c) noexcept +{ + #if FLTX_USE_SCALAR_X86_FMA || FLTX_GUARDED_X86_FMA + const __m128d aw = _mm_set_sd(a); + const __m128d bw = _mm_set_sd(b); + const __m128d cw = _mm_set_sd(c); + return _mm_cvtsd_f64(_mm_fmadd_sd(aw, bw, cw)); + #elif FLTX_USE_BASELINE_ARM64_FMA && (defined(__clang__) || defined(__GNUC__)) + return __builtin_fma(a, b, c); + #elif FLTX_USE_BASELINE_ARM64_FMA + return std::fma(a, b, c); + #elif defined(__clang__) || defined(__GNUC__) + return __builtin_fma(a, b, c); + #else + return std::fma(a, b, c); + #endif +} + +FLTX_X86_FMA_LEAF_INLINE float fmadd_fma(float a, float b, float c) noexcept +{ + #if FLTX_USE_SCALAR_X86_FMA || FLTX_GUARDED_X86_FMA + const __m128 aw = _mm_set_ss(a); + const __m128 bw = _mm_set_ss(b); + const __m128 cw = _mm_set_ss(c); + return _mm_cvtss_f32(_mm_fmadd_ss(aw, bw, cw)); + #elif FLTX_USE_BASELINE_ARM64_FMA && (defined(__clang__) || defined(__GNUC__)) + return __builtin_fmaf(a, b, c); + #elif FLTX_USE_BASELINE_ARM64_FMA + return std::fma(a, b, c); + #elif defined(__clang__) || defined(__GNUC__) + return __builtin_fmaf(a, b, c); + #else + return std::fma(a, b, c); + #endif +} + +BL_FORCE_INLINE double fmadd_auto(double a, double b, double c) noexcept +{ + return runtime_hardware_fma_enabled() + ? fmadd_fma(a, b, c) + : std::fma(a, b, c); +} + +BL_FORCE_INLINE float fmadd_auto(float a, float b, float c) noexcept +{ + return runtime_hardware_fma_enabled() + ? fmadd_fma(a, b, c) + : std::fma(a, b, c); +} + +BL_FORCE_INLINE void two_prod_fma( + double a, + double b, + double& product, + double& error) noexcept +{ + product = a * b; +#if FLTX_DETAIL_GNU_FAST_MATH_EFT_BARRIER + FLTX_DETAIL_EFT_BARRIER(product); +#endif + error = fmsub_fma(a, b, product); +} +BL_POP_PRECISE +#undef FLTX_DETAIL_GNU_FAST_MATH_EFT_BARRIER +#undef FLTX_DETAIL_EFT_BARRIER + +// Selects the available exact-product implementation for ordinary operand ranges. BL_FORCE_INLINE constexpr void two_prod_precise(double a, double b, double& p, double& err) noexcept { - #ifdef FMA_AVAILABLE - if (bl::is_constant_evaluated() || bl::use_constexpr_parity()) + #if FLTX_HAS_RUNTIME_FMA_PATH + if (bl::detail::is_constant_evaluated()) [[unlikely]] { two_prod_precise_dekker(a, b, p, err); } + else if (runtime_hardware_fma_enabled()) + { + two_prod_fma(a, b, p, err); + } else { - p = a * b; - #if defined(__clang__) || defined(__GNUC__) - err = __builtin_fma(a, b, -p); - #else - err = std::fma(a, b, -p); - #endif + two_prod_precise_dekker(a, b, p, err); } #else two_prod_precise_dekker(a, b, p, err); #endif } +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) +// Selects the available exact-product implementation with Dekker range protection. +BL_FORCE_INLINE constexpr void two_prod_precise_range_safe(double a, double b, double& p, double& err) noexcept +{ + #if FLTX_HAS_RUNTIME_FMA_PATH + if (bl::detail::is_constant_evaluated()) [[unlikely]] + { + two_prod_precise_dekker_range_safe(a, b, p, err); + } + else if (runtime_hardware_fma_enabled()) + { + two_prod_fma(a, b, p, err); + } + else + { + two_prod_precise_dekker_range_safe(a, b, p, err); + } + #else + two_prod_precise_dekker_range_safe(a, b, p, err); + #endif +} +#endif + BL_FORCE_INLINE constexpr void split_uint64_to_doubles(std::uint64_t value, double& hi, double& lo) noexcept { hi = static_cast(value >> 32) * 4294967296.0; diff --git a/include/fltx/detail/common_io.h b/include/fltx/detail/common_io.h index d135fb1..ead9cc9 100644 --- a/include/fltx/detail/common_io.h +++ b/include/fltx/detail/common_io.h @@ -9,288 +9,83 @@ #ifndef FLTX_DETAIL_COMMON_IO_INCLUDED #define FLTX_DETAIL_COMMON_IO_INCLUDED +#include +#include #include #include #include +#include #include +#include "fltx/detail/ascii.h" #include "fltx/detail/common_decimal.h" #include "fltx/detail/common_fp.h" +#include "fltx/detail/format_flags.h" +#include "fltx/detail/static_string.h" -namespace bl -{ - template - struct static_string - { - using size_type = std::size_t; - - static constexpr size_type npos = static_cast(-1); - static constexpr size_type static_capacity = capacity; - - char chars[capacity + 1]{}; - size_type length = 0; - - constexpr static_string() noexcept = default; - - constexpr static_string(const char* text) - { - assign(text); - } - - constexpr static_string(std::string_view text) - { - assign(text); - } - - template - constexpr static_string(const char(&text)[size]) - { - assign(std::string_view(text, size - 1)); - } - - constexpr static_string& operator=(const char* text) - { - assign(text); - return *this; - } - - constexpr static_string& operator=(std::string_view text) - { - assign(text); - return *this; - } - - constexpr operator std::string_view() const noexcept - { - return view(); - } - - constexpr operator std::string() const - { - return std::string(chars, length); - } - - constexpr std::string_view view() const noexcept - { - return std::string_view(chars, length); - } - - constexpr char* data() noexcept - { - return chars; - } - - constexpr const char* data() const noexcept - { - return chars; - } - - constexpr const char* c_str() const noexcept - { - return chars; - } - - constexpr size_type size() const noexcept - { - return length; - } - - constexpr bool empty() const noexcept - { - return length == 0; - } - - constexpr char* begin() noexcept - { - return chars; - } - - constexpr char* end() noexcept - { - return chars + length; - } - - constexpr const char* begin() const noexcept - { - return chars; - } - - constexpr const char* end() const noexcept - { - return chars + length; - } - - constexpr char& operator[](size_type index) noexcept - { - return chars[index]; - } - - constexpr const char& operator[](size_type index) const noexcept - { - return chars[index]; - } - - constexpr char& front() noexcept - { - return chars[0]; - } - - constexpr const char& front() const noexcept - { - return chars[0]; - } - - constexpr void clear() noexcept - { - length = 0; - chars[0] = '\0'; - } - - constexpr void resize(size_type new_length) - { - require_capacity(new_length); - if (new_length > length) - { - for (size_type index = length; index < new_length; ++index) - chars[index] = '\0'; - } - length = new_length; - chars[length] = '\0'; - } - - constexpr void push_back(char value) - { - require_capacity(length + 1); - chars[length++] = value; - chars[length] = '\0'; - } - - constexpr static_string& append(size_type count, char value) - { - require_capacity(length + count); - for (size_type index = 0; index < count; ++index) - chars[length + index] = value; - length += count; - chars[length] = '\0'; - return *this; - } - - constexpr static_string& append(const char* text) - { - return append(std::string_view(text, const_string_length(text))); - } - - constexpr static_string& append(std::string_view text) - { - require_capacity(length + text.size()); - for (size_type index = 0; index < text.size(); ++index) - chars[length + index] = text[index]; - length += text.size(); - chars[length] = '\0'; - return *this; - } - - constexpr static_string& insert(size_type position, const char* text) - { - return insert(position, std::string_view(text, const_string_length(text))); - } - - constexpr static_string& insert(size_type position, std::string_view text) - { - require_insert_position(position); - require_capacity(length + text.size()); - for (size_type index = length; index > position; --index) - chars[index + text.size() - 1] = chars[index - 1]; - for (size_type index = 0; index < text.size(); ++index) - chars[position + index] = text[index]; - length += text.size(); - chars[length] = '\0'; - return *this; - } - - constexpr static_string& insert(size_type position, size_type count, char value) - { - require_insert_position(position); - require_capacity(length + count); - for (size_type index = length; index > position; --index) - chars[index + count - 1] = chars[index - 1]; - for (size_type index = 0; index < count; ++index) - chars[position + index] = value; - length += count; - chars[length] = '\0'; - return *this; - } - - constexpr void assign(const char* text) - { - assign(std::string_view(text, const_string_length(text))); - } +namespace bl::detail { - constexpr void assign(std::string_view text) - { - require_capacity(text.size()); - for (size_type index = 0; index < text.size(); ++index) - chars[index] = text[index]; - length = text.size(); - chars[length] = '\0'; - } +[[nodiscard]] constexpr std::uint32_t bounded_floor_to_u32(double value, std::uint32_t max_value) noexcept +{ + if (!(value > 0.0)) + return 0; + if (value >= static_cast(max_value)) + return max_value; - private: - static constexpr size_type const_string_length(const char* text) noexcept - { - size_type result = 0; - while (text[result] != '\0') - ++result; - return result; - } + if (!bl::detail::is_constant_evaluated()) + return static_cast(value); - constexpr void require_capacity(size_type requested_capacity) const - { - if (requested_capacity > capacity) - throw "static_string capacity exceeded"; - } - - constexpr void require_insert_position(size_type position) const + std::uint32_t out = 0; + for (std::uint32_t place = 1000000000u; place > 0; place /= 10u) + { + while (value >= static_cast(place)) { - if (position > length) - throw "static_string insert position out of range"; + value -= static_cast(place); + out += place; } - }; - - using default_io_string = static_string<512>; - -} // namespace bl - -namespace bl::detail { - -enum class format_kind : unsigned char { general, fixed_frac, scientific_frac, scientific_sig }; + } + return out; +} -template -struct parse_token +BL_FORCE_INLINE constexpr int append_uint32_rev(char* dst, std::uint32_t value) noexcept { - using coeff_type = BigUInt; + int len = 0; + if (value == 0) + { + dst[len++] = '0'; + return len; + } - coeff_type coeff; - int frac_digits = 0; - int sig_digits = 0; - int exp10 = 0; - bool any_digit = false; - bool seen_nonzero = false; -}; + while (value > 0) + { + const std::uint32_t next = value / 10u; + const std::uint32_t digit = value - next * 10u; + dst[len++] = static_cast('0' + digit); + value = next; + } + return len; +} + +enum class format_kind : unsigned char { general, fixed_frac, scientific_frac, scientific_sig, hex_float }; -using fltx_parse_token = parse_token; inline constexpr int fltx_max_parse_order = 330; inline constexpr int fltx_min_parse_order = -400; -struct small_parse_token +struct hybrid_parse_token { std::uint64_t coeff = 0; + exact_decimal::biguint bounded_coeff; + std::uint32_t decimal_chunk = 0; int frac_digits = 0; + int kept_sig_digits = 0; int sig_digits = 0; int exp10 = 0; + int first_discarded_digit = -1; + unsigned char decimal_chunk_digits = 0; bool any_digit = false; bool seen_nonzero = false; bool coeff_overflow = false; + bool discarded_nonzero = false; }; struct fltx_char_result @@ -313,29 +108,6 @@ BL_MSVC_NOINLINE constexpr void write_chars_to_string(String& out, std::size_t c out.resize(static_cast(r.ptr - first)); } -BL_FORCE_INLINE constexpr bool valid_float_string(const char* s) noexcept -{ - for (const char* p = s; *p; ++p) - { - const char c = *p; - if (!((c >= '0' && c <= '9') || c == '.' || c == 'e' || c == 'E' || c == '-' || c == '+')) - return false; - } - return true; -} - -BL_FORCE_INLINE constexpr unsigned char ascii_lower(char c) noexcept -{ - return static_cast((c >= 'A' && c <= 'Z') ? (c | 0x20) : c); -} - -BL_FORCE_INLINE constexpr const char* skip_ascii_space(const char* p) noexcept -{ - while (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r' || *p == '\f' || *p == '\v') - ++p; - return p; -} - BL_FORCE_INLINE constexpr void copy_chars(char* dst, const char* src, std::size_t count) noexcept { for (std::size_t i = 0; i < count; ++i) @@ -391,33 +163,324 @@ BL_FORCE_INLINE constexpr fltx_char_result append_exp10_to_chars(char* p, char* return { p, true }; } -template -BL_FORCE_INLINE constexpr int write_unsigned_decimal_rev(char* dst, UInt value) noexcept +BL_FORCE_INLINE constexpr fltx_char_result emit_single_zero_to_chars(char* first, char* last) noexcept { - int len = 0; - do + if (first >= last) + return { first, false }; + + *first = '0'; + return { first + 1, true }; +} + +BL_FORCE_INLINE constexpr fltx_char_result emit_scientific_zero_to_chars( + char* first, + char* last, + bool neg, + int frac_digits, + bool strip_trailing_zeros) noexcept +{ + if (frac_digits < 0) + frac_digits = 0; + + const int frac_len = strip_trailing_zeros ? 0 : frac_digits; + + const std::size_t needed = + static_cast(neg ? 1 : 0) + + 1u + + (frac_len > 0 ? static_cast(1 + frac_len) : 0u) + + 4u; + + if (static_cast(last - first) < needed) + return { first, false }; + + char* p = first; + if (neg) + *p++ = '-'; + + *p++ = '0'; + if (frac_len > 0) { - dst[len++] = static_cast('0' + (value % 10)); - value /= 10; - } while (value != 0); - return len; + *p++ = '.'; + for (int i = 0; i < frac_len; ++i) + *p++ = '0'; + } + + copy_chars(p, "e+00", 4u); + p += 4; + return { p, true }; +} + +BL_FORCE_INLINE constexpr fltx_char_result emit_scientific_digits_to_chars( + char* first, + char* last, + bool neg, + const char* digits, + int sig_digits, + int exp10, + bool strip_trailing_zeros) noexcept +{ + if (sig_digits < 1) + sig_digits = 1; + + int last_frac = sig_digits - 1; + if (sig_digits > 1 && strip_trailing_zeros) + { + while (last_frac >= 1 && digits[last_frac] == '0') + --last_frac; + } + + char exp_buf[16]; + auto er = append_exp10_to_chars(exp_buf, exp_buf + sizeof(exp_buf), exp10); + if (!er.ok) + return { first, false }; + + const int exp_len = static_cast(er.ptr - exp_buf); + const bool has_frac = sig_digits > 1 && last_frac >= 1; + const std::size_t needed = + static_cast(neg ? 1 : 0) + + 1u + + (has_frac ? static_cast(1 + last_frac) : 0u) + + static_cast(exp_len); + + if (static_cast(last - first) < needed) + return { first, false }; + + char* p = first; + if (neg) + *p++ = '-'; + + *p++ = digits[0]; + if (has_frac) + { + *p++ = '.'; + copy_chars(p, digits + 1, static_cast(last_frac)); + p += last_frac; + } + + copy_chars(p, exp_buf, static_cast(exp_len)); + p += exp_len; + return { p, true }; +} + +template +[[nodiscard]] constexpr fltx_char_result emit_scientific_sig_for_traits( + char* first, + char* last, + const typename Traits::value_type& x, + int sig_digits, + bool strip_trailing_zeros) noexcept +{ + if (Traits::iszero(x)) + return emit_single_zero_to_chars(first, last); + + if (sig_digits < 1) + sig_digits = 1; + + const bool neg = Traits::is_negative(x); + const typename Traits::value_type v = neg ? -x : x; + + typename Traits::string_type digits; + int e10 = 0; + if (!Traits::scientific_digits(v, sig_digits, digits, e10)) + return emit_single_zero_to_chars(first, last); + + return emit_scientific_digits_to_chars( + first, + last, + neg, + digits.data(), + sig_digits, + e10, + strip_trailing_zeros); +} + +template +[[nodiscard]] constexpr fltx_char_result emit_scientific_frac_for_traits( + char* first, + char* last, + const typename Traits::value_type& x, + int frac_digits, + bool strip_trailing_zeros) noexcept +{ + if (frac_digits < 0) + frac_digits = 0; + + if (Traits::iszero(x)) + return emit_scientific_zero_to_chars( + first, + last, + Traits::is_negative(x), + frac_digits, + strip_trailing_zeros); + + return Traits::to_chars_scientific_sig(first, last, x, frac_digits + 1, strip_trailing_zeros); +} + +BL_FORCE_INLINE constexpr char lower_hex_digit(unsigned value) noexcept +{ + value &= 0xfu; + return static_cast(value < 10u ? ('0' + value) : ('a' + (value - 10u))); +} + +BL_FORCE_INLINE constexpr fltx_char_result append_exp2_to_chars(char* p, char* end, int e2) noexcept +{ + if (p >= end) return { p, false }; + *p++ = 'p'; + + if (p >= end) return { p, false }; + if (e2 < 0) { *p++ = '-'; e2 = -e2; } + else { *p++ = '+'; } + + char buf[8]; + int n = 0; + do { + buf[n++] = char('0' + (e2 % 10)); + e2 /= 10; + } while (e2); + + if (p + n > end) return { p, false }; + for (int i = n - 1; i >= 0; --i) *p++ = buf[i]; + + return { p, true }; +} + +[[nodiscard]] constexpr inline exact_decimal::biguint rounded_scaled_binary( + const exact_decimal::biguint& magnitude, + int scale) noexcept +{ + if (scale >= 0) + { + exact_decimal::biguint out = magnitude; + out.shl_bits(scale); + return out; + } + + const int shift = -scale; + exact_decimal::biguint out = exact_decimal::shr_bits_copy(magnitude, shift); + const bool guard = magnitude.get_bit(shift - 1); + const bool sticky = shift > 1 && exact_decimal::any_low_bits_set(magnitude, shift - 1); + if (guard && (sticky || out.is_odd())) + out.add_small(1); + return out; } -template -BL_FORCE_INLINE constexpr void append_unsigned_decimal(String& out, UInt value) +template +[[nodiscard]] BL_FORCE_INLINE constexpr int hex_nominal_fraction_digits() noexcept +{ + return (Traits::significand_bits - 1 + 3) / 4; +} + +template +[[nodiscard]] BL_FORCE_INLINE constexpr int hex_full_significand_bits() noexcept +{ + return exact_decimal::decimal_conversion_significand_bits(); +} + +template +[[nodiscard]] BL_FORCE_INLINE constexpr int hex_max_fraction_digits() noexcept +{ + return (hex_full_significand_bits() - 1 + 3) / 4; +} + +template +[[nodiscard]] constexpr fltx_char_result emit_hex_float_to_chars( + char* first, + char* last, + const typename Traits::value_type& x, + bool prefix, + int precision, + bool precision_specified, + bool strip_trailing_zeros) noexcept { - char buf[32]; - const int len = write_unsigned_decimal_rev(buf, value); - for (int i = len - 1; i >= 0; --i) - out.push_back(buf[i]); + int fraction_digits = precision_specified ? precision : hex_nominal_fraction_digits(); + if (fraction_digits < 0) + fraction_digits = 0; + + const bool zero = Traits::iszero(x); + bool neg = Traits::is_negative(x); + + exact_decimal::biguint scaled; + int hex_exp = 0; + if (!zero) + { + exact_decimal::biguint magnitude; + int bin_exp = 0; + if (!exact_decimal::exact_binary_components(x, magnitude, bin_exp, neg)) + return { first, false }; + + if (!precision_specified) + { + const int exact_fraction_digits = (magnitude.bit_length() - 1 + 3) / 4; + const int max_fraction_digits = hex_max_fraction_digits(); + if (exact_fraction_digits > fraction_digits) + fraction_digits = exact_fraction_digits < max_fraction_digits ? exact_fraction_digits : max_fraction_digits; + } + + const int top_exp = bin_exp + magnitude.bit_length() - 1; + hex_exp = top_exp < Traits::min_normal_binary_exponent ? Traits::min_normal_binary_exponent : top_exp; + const int scale = bin_exp - hex_exp + 4 * fraction_digits; + scaled = rounded_scaled_binary(magnitude, scale); + } + + int emitted_fraction_digits = fraction_digits; + if (strip_trailing_zeros) + { + while (emitted_fraction_digits > 0 && + scaled.get_hex_nibble(fraction_digits - emitted_fraction_digits) == 0u) + { + --emitted_fraction_digits; + } + } + + char exp_buf[16]; + auto exp_result = append_exp2_to_chars(exp_buf, exp_buf + sizeof(exp_buf), hex_exp); + if (!exp_result.ok) + return { first, false }; + const int exp_len = static_cast(exp_result.ptr - exp_buf); + + const unsigned int_digit = zero ? 0u : scaled.get_hex_nibble(fraction_digits); + const std::size_t needed = static_cast(neg ? 1 : 0) + + static_cast(prefix ? 2 : 0) + + 1u + + static_cast(emitted_fraction_digits > 0 ? 1 + emitted_fraction_digits : 0) + + static_cast(exp_len); + if (static_cast(last - first) < needed) + return { last, false }; + + char* p = first; + if (neg) + *p++ = '-'; + if (prefix) + { + *p++ = '0'; + *p++ = 'x'; + } + + *p++ = lower_hex_digit(int_digit); + if (emitted_fraction_digits > 0) + { + *p++ = '.'; + for (int i = 0; i < emitted_fraction_digits; ++i) + { + const int nibble_index = fraction_digits - 1 - i; + *p++ = lower_hex_digit(scaled.get_hex_nibble(nibble_index)); + } + } + + copy_chars(p, exp_buf, static_cast(exp_len)); + p += exp_len; + return { p, true }; } constexpr inline std::size_t find_exponent_marker(std::string_view text) noexcept { for (std::size_t index = 0; index < text.size(); ++index) { - if (text[index] == 'e' || text[index] == 'E') + if (text[index] == 'e' || text[index] == 'E' || + text[index] == 'p' || text[index] == 'P') + { return index; + } } return std::string_view::npos; } @@ -465,7 +528,7 @@ constexpr inline const char* special_text(const typename Traits::value_type& x, template constexpr inline bool assign_special_string(String& out, const typename Traits::value_type& x, bool uppercase = false) noexcept { - if (const char* text = special_text(x, uppercase)) + if (const char* text = special_text(x, uppercase)) [[unlikely]] { out = text; return true; @@ -473,10 +536,63 @@ constexpr inline bool assign_special_string(String& out, const typename Traits:: return false; } +template +[[nodiscard]] BL_FORCE_INLINE constexpr std::size_t format_capacity(int precision, format_kind kind) noexcept +{ + constexpr std::size_t sign_chars = 1u; + constexpr std::size_t exp10_chars = 5u; // e+00 through e-400 + constexpr std::size_t exp2_chars = 6u; // p+0 through p-1074 + + switch (kind) + { + case format_kind::fixed_frac: + return sign_chars + + static_cast(Traits::max_fixed_integer_digits) + + static_cast(precision > 0 ? 1 + precision : 0); + + case format_kind::scientific_frac: + return sign_chars + + 1u + + static_cast(precision > 0 ? 1 + precision : 0) + + exp10_chars; + + case format_kind::scientific_sig: + { + const int sig_digits = precision > 1 ? precision : 1; + return sign_chars + + static_cast(sig_digits) + + static_cast(sig_digits > 1 ? 1 : 0) + + exp10_chars; + } + + case format_kind::hex_float: + { + const int fraction_digits = precision >= 0 + ? precision + : hex_max_fraction_digits(); + return sign_chars + + 2u + + 1u + + static_cast(fraction_digits > 0 ? 1 + fraction_digits : 0) + + exp2_chars; + } + + case format_kind::general: + default: + { + const int sig_digits = precision > 1 ? precision : 1; + return sign_chars + + static_cast(sig_digits) + + 6u + + exp10_chars; + } + } +} + template constexpr inline void format_to_string(String& out, const typename Traits::value_type& x, int precision, format_kind kind, bool strip_trailing_zeros = false) { - if (assign_special_string(out, x)) + if (assign_special_string(out, x)) [[unlikely]] return; if (kind == format_kind::scientific_sig) @@ -484,14 +600,12 @@ constexpr inline void format_to_string(String& out, const typename Traits::value if (precision < 1) precision = 1; } - else if (precision < 0) + else if (kind != format_kind::hex_float && precision < 0) { precision = 0; } - const std::size_t cap = ((kind == format_kind::general || kind == format_kind::fixed_frac) ? 1u + 309u : 1u + 1u) - + 1u + static_cast(precision) + 32u; - + const std::size_t cap = format_capacity(precision, kind); write_chars_to_string(out, cap, [&](char* first, char* last) { switch (kind) { @@ -503,50 +617,152 @@ constexpr inline void format_to_string(String& out, const typename Traits::value return Traits::to_chars_scientific_frac(first, last, x, precision, strip_trailing_zeros); case format_kind::scientific_sig: return Traits::to_chars_scientific_sig(first, last, x, precision, strip_trailing_zeros); + case format_kind::hex_float: + return emit_hex_float_to_chars(first, last, x, true, precision, false, strip_trailing_zeros); } return fltx_char_result{ first, false }; }); } template -constexpr void to_string_into(String& out, const typename Traits::value_type& x, int precision, - bool fixed = false, bool scientific = false, bool strip_trailing_zeros = false) +constexpr void format_to_string(String& out, const typename Traits::value_type& x, int precision, std::ios_base::fmtflags flags) { - const format_kind kind = (fixed && !scientific) ? format_kind::fixed_frac : (scientific && !fixed) ? format_kind::scientific_frac : format_kind::general; - format_to_string(out, x, precision, kind, strip_trailing_zeros); + if (precision < 0) + precision = 6; + + const float_format format = float_format_from_flags(flags); + const bool showpoint = has_showpoint(flags); + const bool showpos = has_showpos(flags); + const bool uppercase = has_uppercase(flags); + + if (assign_special_string(out, x, uppercase)) [[unlikely]] + { + if (showpos && (out.empty() || out[0] != '-')) + out.insert(0, 1, '+'); + return; + } + + if (format == float_format::hexfloat) + { + format_to_string(out, x, -1, format_kind::hex_float, false); + } + else if (format == float_format::fixed) + { + format_to_string(out, x, precision, format_kind::fixed_frac, false); + } + else if (format == float_format::scientific) + { + format_to_string(out, x, precision, format_kind::scientific_frac, false); + } + else + { + const int sig = (precision == 0) ? 1 : precision; + if (showpoint && Traits::iszero(x)) + { + format_to_string(out, x, (sig > 1) ? (sig - 1) : 0, format_kind::fixed_frac, false); + } + else + { + format_to_string(out, x, sig, format_kind::general, !showpoint); + } + } + + if (showpoint) + ensure_decimal_point(out); + apply_stream_decorations(out, showpos, uppercase); } template -constexpr void emit_scientific(String& out, const typename Traits::value_type& x, int prec, bool strip_trailing_zeros) +constexpr void to_string_into(String& out, const typename Traits::value_type& x, int precision, std::ios_base::fmtflags flags) { - format_to_string(out, x, prec, format_kind::scientific_frac, strip_trailing_zeros); + format_to_string(out, x, precision, flags); } -template -constexpr void emit_fixed_dec(String& out, const typename Traits::value_type& x, int prec, bool strip_trailing_zeros) +template +[[nodiscard]] BL_FORCE_INLINE constexpr int max_bounded_decimal_digits() noexcept { - format_to_string(out, x, prec, format_kind::fixed_frac, strip_trailing_zeros); + return ((Traits::significand_bits * 30103 + 99999) / 100000) + 8; } -template -constexpr void emit_scientific_sig(String& out, const typename Traits::value_type& x, int sig_digits, bool strip_trailing_zeros) +BL_FORCE_INLINE constexpr void flush_hybrid_decimal_chunk(hybrid_parse_token& token) noexcept { - format_to_string(out, x, sig_digits, format_kind::scientific_sig, strip_trailing_zeros); + constexpr std::uint32_t pow10[] = { + 1u, + 10u, + 100u, + 1000u, + 10000u, + 100000u, + 1000000u, + 10000000u, + 100000000u, + 1000000000u + }; + + if (token.decimal_chunk_digits == 0) + return; + + token.bounded_coeff.mul_small(pow10[token.decimal_chunk_digits]); + token.bounded_coeff.add_small(token.decimal_chunk); + token.decimal_chunk = 0; + token.decimal_chunk_digits = 0; } -template -BL_MSVC_NOINLINE constexpr void scan_decimal_digits(const char*& p, Token& token, bool fractional) noexcept +template +BL_FORCE_INLINE constexpr void append_hybrid_decimal_digit( + hybrid_parse_token& token, + int digit) noexcept { - while (*p >= '0' && *p <= '9') + if (digit == 0 && !token.seen_nonzero) + return; + + token.seen_nonzero = true; + ++token.sig_digits; + + if (!token.coeff_overflow) { - const int digit = *p - '0'; - if (digit != 0 || token.seen_nonzero) + constexpr std::uint64_t max_u64 = ~std::uint64_t{ 0 }; + constexpr std::uint64_t max_before_mul10 = max_u64 / 10u; + constexpr std::uint64_t max_last_digit = max_u64 % 10u; + const std::uint64_t udigit = static_cast(digit); + if (token.coeff < max_before_mul10 || + (token.coeff == max_before_mul10 && udigit <= max_last_digit)) { - token.coeff.mul_small(static_cast(10)); - token.coeff.add_small(static_cast(digit)); - ++token.sig_digits; - token.seen_nonzero = true; + token.coeff = token.coeff * 10 + udigit; + return; } + + token.coeff_overflow = true; + token.bounded_coeff = exact_decimal::biguint{ token.coeff }; + token.kept_sig_digits = token.sig_digits - 1; + } + + if (token.kept_sig_digits < max_bounded_decimal_digits()) + { + token.decimal_chunk = token.decimal_chunk * 10u + static_cast(digit); + ++token.decimal_chunk_digits; + ++token.kept_sig_digits; + if (token.decimal_chunk_digits == 9) + flush_hybrid_decimal_chunk(token); + return; + } + + if (token.first_discarded_digit < 0) + token.first_discarded_digit = digit; + else if (digit != 0) + token.discarded_nonzero = true; +} + +template +BL_MSVC_NOINLINE constexpr void scan_hybrid_decimal_digits( + const char*& p, + const char* last, + hybrid_parse_token& token, + bool fractional) noexcept +{ + while ((!bounded || p != last) && *p >= '0' && *p <= '9') + { + append_hybrid_decimal_digit(token, *p - '0'); ++p; token.any_digit = true; if (fractional) @@ -554,24 +770,24 @@ BL_MSVC_NOINLINE constexpr void scan_decimal_digits(const char*& p, Token& token } } -template -BL_MSVC_NOINLINE constexpr void scan_optional_exp10(const char*& p, Token& token) noexcept +template +BL_MSVC_NOINLINE constexpr void scan_optional_exp10(const char*& p, const char* last, Token& token) noexcept { - if (*p != 'e' && *p != 'E') + if ((bounded && p == last) || (*p != 'e' && *p != 'E')) return; const char* pe = p + 1; bool neg_exp = false; - if (*pe == '+' || *pe == '-') + if ((!bounded || pe != last) && (*pe == '+' || *pe == '-')) { neg_exp = (*pe == '-'); ++pe; } - if (*pe < '0' || *pe > '9') + if ((bounded && pe == last) || *pe < '0' || *pe > '9') return; int eacc = 0; - while (*pe >= '0' && *pe <= '9') + while ((!bounded || pe != last) && *pe >= '0' && *pe <= '9') { const int digit = *pe - '0'; if (eacc < 100000000) @@ -583,544 +799,866 @@ BL_MSVC_NOINLINE constexpr void scan_optional_exp10(const char*& p, Token& token p = pe; } -template -BL_MSVC_NOINLINE constexpr bool scan_decimal_token(const char*& p, Token& token) noexcept +template +BL_MSVC_NOINLINE constexpr bool scan_hybrid_decimal_token( + const char*& p, + const char* last, + hybrid_parse_token& token) noexcept { - scan_decimal_digits(p, token, false); - if (*p == '.') + scan_hybrid_decimal_digits(p, last, token, false); + if ((!bounded || p != last) && *p == '.') { ++p; - scan_decimal_digits(p, token, true); + scan_hybrid_decimal_digits(p, last, token, true); } if (!token.any_digit) return false; - scan_optional_exp10(p, token); + + scan_optional_exp10(p, last, token); + + if (token.coeff_overflow) + flush_hybrid_decimal_chunk(token); + + if (token.coeff_overflow && + (token.first_discarded_digit > 5 || + (token.first_discarded_digit == 5 && (token.discarded_nonzero || token.bounded_coeff.is_odd())))) + { + token.bounded_coeff.add_small(1); + } + return true; } -BL_FORCE_INLINE constexpr void append_small_decimal_digit(small_parse_token& token, int digit) noexcept +BL_FORCE_INLINE constexpr bool pow10_u64(int exp, std::uint64_t& out) noexcept { - if (token.coeff_overflow) - return; + constexpr std::uint64_t pow10[] = { + 1ull, + 10ull, + 100ull, + 1000ull, + 10000ull, + 100000ull, + 1000000ull, + 10000000ull, + 100000000ull, + 1000000000ull, + 10000000000ull, + 100000000000ull, + 1000000000000ull, + 10000000000000ull, + 100000000000000ull, + 1000000000000000ull, + 10000000000000000ull, + 100000000000000000ull, + 1000000000000000000ull, + 10000000000000000000ull + }; + + if (exp < 0 || exp >= static_cast(sizeof(pow10) / sizeof(pow10[0]))) + return false; + + out = pow10[exp]; + return true; +} + +BL_FORCE_INLINE constexpr bool mul_pow10_u64(std::uint64_t& value, int exp) noexcept +{ + if (exp == 0) + return true; + + std::uint64_t scale = 0; + if (!pow10_u64(exp, scale)) + return false; constexpr std::uint64_t max_u64 = ~std::uint64_t{ 0 }; - const std::uint64_t udigit = static_cast(digit); - if (token.coeff > (max_u64 - udigit) / 10) + if (value > max_u64 / scale) + return false; + + value *= scale; + return true; +} + +BL_FORCE_INLINE constexpr bool div_pow10_exact_u64(std::uint64_t& value, int exp, int sig_digits) noexcept +{ + if (exp < 0 || exp >= sig_digits) + return false; + + if (exp == 0) + return true; + + std::uint64_t scale = 0; + if (!pow10_u64(exp, scale)) + return false; + + if ((value % scale) != 0) + return false; + + value /= scale; + return true; +} + +template +BL_FORCE_INLINE constexpr bool try_parse_small_integer(const Token& token, int dec_exp, bool neg, typename Traits::value_type& out) noexcept +{ + if (token.coeff_overflow) + return false; + + std::uint64_t value = token.coeff; + if (dec_exp >= 0) { - token.coeff_overflow = true; - return; + if (!mul_pow10_u64(value, dec_exp)) + return false; + } + else if (!div_pow10_exact_u64(value, -dec_exp, token.sig_digits)) + { + return false; } - token.coeff = token.coeff * 10 + udigit; + out = Traits::exact_uint64_to_value(value, neg); + return true; } -BL_MSVC_NOINLINE constexpr void scan_small_decimal_digits(const char*& p, small_parse_token& token, bool fractional) noexcept +template +BL_FORCE_INLINE constexpr bool try_parse_compact_decimal(const Token& token, int dec_exp, bool neg, typename Traits::value_type& out) noexcept { - while (*p >= '0' && *p <= '9') + return !token.coeff_overflow && Traits::compact_decimal_to_value(token.coeff, dec_exp, neg, out); +} + +BL_FORCE_INLINE constexpr bool match_lower_token( + const char* p, + const char* last, + const char* token, + int length) noexcept +{ + for (int i = 0; i < length; ++i) { - const int digit = *p - '0'; - if (digit != 0 || token.seen_nonzero) - { - append_small_decimal_digit(token, digit); - ++token.sig_digits; - token.seen_nonzero = true; - } - ++p; - token.any_digit = true; - if (fractional) - ++token.frac_digits; + if (last != nullptr && p + i == last) + return false; + + const char c = p[i]; + if ((last == nullptr && c == '\0') || ascii_lower(c) != static_cast(token[i])) + return false; } + + return true; +} + +[[nodiscard]] BL_FORCE_INLINE constexpr bool special_scan_at_end(const char* p, const char* last) noexcept +{ + return last != nullptr ? p == last : *p == '\0'; +} + +[[nodiscard]] BL_FORCE_INLINE constexpr int special_token_length(const char* p, const char* last) noexcept +{ + if (special_scan_at_end(p, last)) + return 0; + + const unsigned char head = ascii_lower(*p); + if (head == 'n') + return match_lower_token(p, last, "nan", 3) ? 3 : 0; + if (head != 'i') + return 0; + + if (match_lower_token(p, last, "infinity", 8)) + return 8; + + return match_lower_token(p, last, "inf", 3) ? 3 : 0; } -BL_MSVC_NOINLINE constexpr bool scan_small_decimal_token(const char*& p, small_parse_token& token) noexcept +[[nodiscard]] BL_FORCE_INLINE constexpr int signed_special_token_length(const char* p, const char* last) noexcept { - scan_small_decimal_digits(p, token, false); - if (*p == '.') + int sign_length = 0; + if (!special_scan_at_end(p, last) && (*p == '-' || *p == '+')) { ++p; - scan_small_decimal_digits(p, token, true); + sign_length = 1; } - if (!token.any_digit) - return false; - scan_optional_exp10(p, token); - return true; + + const int token_length = special_token_length(p, last); + return token_length == 0 ? 0 : sign_length + token_length; } -BL_FORCE_INLINE constexpr bool mul_pow10_u64(std::uint64_t& value, int exp) noexcept +template +BL_MSVC_NOINLINE constexpr bool parse_special( + const char*& p, + const char* last, + bool neg, + typename Traits::value_type& out) noexcept { - if (exp < 0 || exp > 19) + const int token_length = special_token_length(p, last); + if (token_length == 0) return false; - constexpr std::uint64_t max_u64 = ~std::uint64_t{ 0 }; - for (int i = 0; i < exp; ++i) + if (ascii_lower(*p) == 'n') [[unlikely]] { - if (value > max_u64 / 10) - return false; - value *= 10; + out = Traits::quiet_nan(); + p += token_length; + return true; } + + out = Traits::infinity(neg); + p += token_length; return true; } -BL_FORCE_INLINE constexpr bool div_pow10_exact_u64(std::uint64_t& value, int exp, int sig_digits) noexcept +[[nodiscard]] BL_FORCE_INLINE constexpr int hex_digit_bit_width(int digit) noexcept { - if (exp < 0 || exp >= sig_digits) - return false; + return digit >= 8 ? 4 : digit >= 4 ? 3 : digit >= 2 ? 2 : digit; +} + +[[nodiscard]] BL_FORCE_INLINE constexpr bool has_hex_float_syntax(const char* first, const char* last) noexcept +{ + const char* p = first; + if (p != last && (*p == '-' || *p == '+')) + ++p; - for (int i = 0; i < exp; ++i) + if (last - p >= 2 && p[0] == '0' && ascii_lower(p[1]) == 'x') + return true; + + while (p != last) { - if ((value % 10) != 0) - return false; - value /= 10; + if (*p == 'p' || *p == 'P') + return true; + ++p; } - return true; + return false; } template -BL_FORCE_INLINE constexpr bool try_parse_small_integer(const small_parse_token& token, int dec_exp, bool neg, typename Traits::value_type& out) noexcept +BL_FORCE_INLINE constexpr void append_bounded_hex_bits( + exact_decimal::biguint& coeff, + int bits, + int width, + int& kept_bits, + int& total_bits, + bool& sticky) noexcept { - if (token.coeff_overflow) - return false; + constexpr int max_kept_bits = hex_full_significand_bits() + 2; - std::uint64_t value = token.coeff; - if (dec_exp >= 0) + total_bits += width; + const int available = max_kept_bits - kept_bits; + if (available >= width) { - if (!mul_pow10_u64(value, dec_exp)) - return false; + coeff.shl_bits(width); + if (bits != 0) + coeff.add_small(static_cast(bits)); + kept_bits += width; + return; } - else if (!div_pow10_exact_u64(value, -dec_exp, token.sig_digits)) + + if (available > 0) { - return false; + const int discarded = width - available; + const int kept = bits >> discarded; + coeff.shl_bits(available); + if (kept != 0) + coeff.add_small(static_cast(kept)); + kept_bits += available; + + if ((bits & ((1 << discarded) - 1)) != 0) + sticky = true; + return; } - out = Traits::exact_uint64_to_value(value, neg); - return true; -} - -template -BL_FORCE_INLINE constexpr bool try_parse_compact_decimal(const small_parse_token& token, int dec_exp, bool neg, typename Traits::value_type& out) noexcept -{ - return !token.coeff_overflow && Traits::compact_decimal_to_value(token.coeff, dec_exp, neg, out); + if (bits != 0) + sticky = true; } template -BL_MSVC_NOINLINE constexpr bool parse_special(const char*& p, bool neg, typename Traits::value_type& out) noexcept +BL_FORCE_INLINE constexpr void append_bounded_hex_digit( + exact_decimal::biguint& coeff, + int digit, + int& kept_bits, + int& total_bits, + bool& seen_nonzero, + bool& sticky) noexcept { - if (ascii_lower(p[0]) == 'n' && ascii_lower(p[1]) == 'a' && ascii_lower(p[2]) == 'n') + if (!seen_nonzero) { - out = Traits::quiet_nan(); - p += 3; - return true; - } - - if (ascii_lower(p[0]) != 'i' || ascii_lower(p[1]) != 'n' || ascii_lower(p[2]) != 'f') - return false; + if (digit == 0) + return; - p += 3; - if (ascii_lower(p[0]) == 'i' && ascii_lower(p[1]) == 'n' && ascii_lower(p[2]) == 'i' && ascii_lower(p[3]) == 't' && ascii_lower(p[4]) == 'y') - p += 5; + seen_nonzero = true; + const int width = hex_digit_bit_width(digit); + append_bounded_hex_bits(coeff, digit, width, kept_bits, total_bits, sticky); + return; + } - out = Traits::infinity(neg); - return true; + append_bounded_hex_bits(coeff, digit, 4, kept_bits, total_bits, sticky); } template -BL_MSVC_NOINLINE constexpr bool parse_flt(const char* s, typename Traits::value_type& out, const char** endptr = nullptr) noexcept +[[nodiscard]] constexpr bool parse_hex_float( + const char* first, + const char* last, + typename Traits::value_type& value, + const char** endptr, + bool allow_prefix = false, + bool allow_leading_plus = false) noexcept { - using coeff_type = fltx_parse_token::coeff_type; - - const char* p = skip_ascii_space(s); + const char* p = first; bool neg = false; - if (*p == '+' || *p == '-') + if (*p == '-' || (allow_leading_plus && *p == '+')) { - neg = (*p == '-'); + neg = *p == '-'; ++p; } - if (parse_special(p, neg, out)) + if (parse_special(p, last, neg, value)) [[unlikely]] { - if (endptr) - *endptr = p; + *endptr = p; return true; } - const char* token_start = p; - small_parse_token token; - if (!scan_small_decimal_token(p, token)) + if (allow_prefix && last - p >= 2 && p[0] == '0' && ascii_lower(p[1]) == 'x') + p += 2; + + exact_decimal::biguint coeff; + bool any_digit = false; + bool seen_nonzero = false; + bool fractional = false; + bool sticky = false; + int kept_bits = 0; + int total_bits = 0; + int frac_hex_digits = 0; + + while (p != last) + { + if (*p == '.' && !fractional) + { + fractional = true; + ++p; + continue; + } + + const int digit = ascii_hex_digit_value(*p); + if (digit < 0) + break; + + append_bounded_hex_digit( + coeff, + digit, + kept_bits, + total_bits, + seen_nonzero, + sticky); + + any_digit = true; + if (fractional) + ++frac_hex_digits; + ++p; + } + + if (!any_digit) { - if (endptr) - *endptr = s; + *endptr = first; return false; } - if (!token.seen_nonzero) + int exp2 = 0; + if (p != last && (*p == 'p' || *p == 'P')) { - out = Traits::zero(neg); - if (endptr) - *endptr = p; - return true; + const char* exponent_marker = p; + ++p; + + bool exp_neg = false; + if (p != last && (*p == '+' || *p == '-')) + { + exp_neg = (*p == '-'); + ++p; + } + + int parsed_exp = 0; + bool any_exp_digit = false; + while (p != last && '0' <= *p && *p <= '9') + { + any_exp_digit = true; + if (parsed_exp < 100000000) + parsed_exp = parsed_exp * 10 + (*p - '0'); + ++p; + } + + if (any_exp_digit) + exp2 = exp_neg ? -parsed_exp : parsed_exp; + else + p = exponent_marker; } - const int dec_exp = token.exp10 - token.frac_digits; - const int approx_dec_order = token.sig_digits + dec_exp - 1; + const int discarded_bits = total_bits - kept_bits; + if (sticky) + coeff.set_bit(0); + + value = exact_decimal::exact_binary_integer_to_value( + coeff, + exp2 - 4 * frac_hex_digits + discarded_bits, + neg); + *endptr = p; + return true; +} +template +BL_FORCE_INLINE constexpr void parsed_decimal_to_value( + const hybrid_parse_token& token, + int dec_exp, + int approx_dec_order, + bool neg, + typename Traits::value_type& out) noexcept +{ if (approx_dec_order > Traits::max_parse_order) { out = Traits::infinity(neg); - if (endptr) - *endptr = p; - return true; + return; } if (approx_dec_order < Traits::min_parse_order) { out = Traits::zero(neg); - if (endptr) - *endptr = p; - return true; + return; } if (try_parse_small_integer(token, dec_exp, neg, out)) + return; + + if (try_parse_compact_decimal(token, dec_exp, neg, out)) + return; + + if (!token.coeff_overflow) { - if (endptr) - *endptr = p; - return true; + out = Traits::exact_decimal_to_value(exact_decimal::biguint{ token.coeff }, dec_exp, neg); + return; } - if (try_parse_compact_decimal(token, dec_exp, neg, out)) + const int skipped_sig_digits = token.sig_digits - token.kept_sig_digits; + const int bounded_dec_exp = token.exp10 - token.frac_digits + skipped_sig_digits; + out = Traits::exact_decimal_to_value( + token.bounded_coeff, bounded_dec_exp, neg); + + if constexpr (requires(typename Traits::value_type value) { + Traits::nextafter(value, value); + Traits::max_finite(); + Traits::needs_nominal_refinement(value); + }) { - if (endptr) - *endptr = p; - return true; + if (Traits::isinf(out)) + { + const typename Traits::value_type maximum = Traits::max_finite(); + const int maximum_side = + exact_decimal::compare_decimal_twice_to_binary_sum( + token.bounded_coeff, + bounded_dec_exp, + maximum, + maximum); + if (maximum_side <= 0) + out = neg ? -maximum : maximum; + return; + } + if (!Traits::needs_nominal_refinement(out)) [[likely]] + return; + + // Long extended inputs already use the bigint path. Values whose guard + // limb remains representable return above; refine only underflow-edge + // candidates against the adjacent nominal value. Native floats, small + // integers, compact decimals, and ordinary-exponent bigint inputs keep + // their existing behavior and cost. The bounded coefficient includes + // decimal guard and sticky information, correcting pack/renormalization + // double-rounding without widening the public precision model. + typename Traits::value_type candidate = neg ? -out : out; + const int side = + exact_decimal::compare_decimal_twice_to_binary_sum( + token.bounded_coeff, + bounded_dec_exp, + candidate, + candidate); + if (side == 0) + return; + + const typename Traits::value_type neighbor = Traits::nextafter( + candidate, + side > 0 ? Traits::infinity(false) : Traits::zero(false)); + if (Traits::isinf(neighbor)) + return; + + const int midpoint_side = + exact_decimal::compare_decimal_twice_to_binary_sum( + token.bounded_coeff, + bounded_dec_exp, + candidate, + neighbor); + const bool neighbor_is_closer = + side > 0 ? midpoint_side > 0 : midpoint_side < 0; + if (neighbor_is_closer) + out = neg ? -neighbor : neighbor; } +} - if (!token.coeff_overflow) +template +BL_MSVC_NOINLINE constexpr bool parse_flt( + const char* first, + const char* last, + typename Traits::value_type& out, + const char** endptr = nullptr) noexcept +{ + const char* p = first; + while ((!bounded || p != last) && ascii_space(*p)) + ++p; + + bool neg = false; + if ((!bounded || p != last) && (*p == '+' || *p == '-')) + { + neg = (*p == '-'); + ++p; + } + + if (parse_special(p, last, neg, out)) { - out = Traits::exact_decimal_to_value(coeff_type{ token.coeff }, dec_exp, neg); if (endptr) *endptr = p; return true; } - const char* exact_p = token_start; - fltx_parse_token exact_token; - if (!scan_decimal_token(exact_p, exact_token)) + hybrid_parse_token token; + if (!scan_hybrid_decimal_token(p, last, token)) { if (endptr) - *endptr = s; + *endptr = first; return false; } - out = Traits::exact_decimal_to_value(exact_token.coeff, dec_exp, neg); + if (!token.seen_nonzero) + { + out = Traits::zero(neg); + if (endptr) + *endptr = p; + return true; + } + + const int dec_exp = token.exp10 - token.frac_digits; + const int approx_dec_order = token.sig_digits + dec_exp - 1; + parsed_decimal_to_value(token, dec_exp, approx_dec_order, neg, out); if (endptr) *endptr = p; return true; } -} // namespace bl::detail - -namespace bl::detail::exact_decimal { - -[[nodiscard]] constexpr inline default_io_string to_decimal_string(biguint value) +template +BL_MSVC_NOINLINE constexpr bool parse_flt(const char* s, typename Traits::value_type& out, const char** endptr = nullptr) noexcept { - if (value.is_zero()) - return "0"; - - std::uint32_t chunks[biguint::max_words * 2]; - int chunk_count = 0; - while (!value.is_zero() && chunk_count < static_cast(sizeof(chunks) / sizeof(chunks[0]))) - chunks[chunk_count++] = value.div_small(1000000000u); - - default_io_string out; - append_unsigned_decimal(out, chunks[chunk_count - 1]); - for (int i = chunk_count - 2; i >= 0; --i) - { - char part_buf[16]; - const int part_len = write_unsigned_decimal_rev(part_buf, chunks[i]); - out.append(static_cast(9 - part_len), '0'); - for (int j = part_len - 1; j >= 0; --j) - out.push_back(part_buf[j]); - } - return out; + return parse_flt(s, nullptr, out, endptr); } -template -[[nodiscard]] constexpr inline bool exact_scientific_digits(const typename Traits::value_type& x, int sig, String& digits, int& exp10) +template +BL_MSVC_NOINLINE constexpr bool parse_flt( + const char* first, + const char* last, + typename Traits::value_type& out, + const char** endptr = nullptr) noexcept { - int common_exp = std::numeric_limits::max(); - bool have_term = false; + return parse_flt(first, last, out, endptr); +} - for (int i = 0; i < Traits::limb_count; ++i) - { - const double limb = Traits::limb(x, i); - if (limb == 0.0) - continue; +template +[[nodiscard]] constexpr bool parse_literal_float_text( + const char* text, + const char* expected_end, + typename Traits::value_type& out) noexcept +{ + const char* end = text; + if (parse_flt(text, out, &end) && end == expected_end) + return true; - int exponent = 0; - bool limb_neg = false; - const std::uint64_t mantissa = decompose_double_mantissa(limb, exponent, limb_neg); - if (mantissa == 0) - continue; + if (!has_hex_float_syntax(text, expected_end)) + return false; - common_exp = (exponent < common_exp) ? exponent : common_exp; - have_term = true; - } + end = text; + return parse_hex_float( + text, + expected_end, + out, + &end, + true, + true) && end == expected_end; +} - if (!have_term) - return false; +} // namespace bl::detail - signed_biguint acc{}; - for (int i = 0; i < Traits::limb_count; ++i) +namespace bl::detail +{ + [[nodiscard]] BL_FORCE_INLINE constexpr bool fixed_format_needs_exact_integer_path( + double leading_limb, + int max_fast_decimal_digits) noexcept { - const double limb = Traits::limb(x, i); - if (limb == 0.0) - continue; - - int exponent = 0; - bool limb_neg = false; - const std::uint64_t mantissa = decompose_double_mantissa(limb, exponent, limb_neg); - if (mantissa == 0) - continue; + const double magnitude = fp::absd(leading_limb); + if (!fp::isfinite(magnitude) || magnitude < 1.0) + return false; - biguint term{ mantissa }; - term.shl_bits(exponent - common_exp); - add_signed(acc, term, limb_neg); + constexpr double log10_2 = 0.30102999566398119521373889472449; + const int exponent2 = fp::frexp_exponent(magnitude); + const int conservative_decimal_digits = + static_cast(fp::floor(static_cast(exponent2 - 1) * log10_2)) + 2; + return conservative_decimal_digits > max_fast_decimal_digits; } - if (acc.mag.is_zero() || acc.neg) - return false; + [[nodiscard]] BL_FORCE_INLINE constexpr bool defaultfloat_definitely_scientific( + double leading_limb, + int significant_digits) noexcept + { + const double magnitude = fp::absd(leading_limb); + if (!fp::isfinite(magnitude) || magnitude == 0.0) + return false; - const double log10_2 = 0.30102999566398119521373889472449; - int approx = static_cast(fp::floor((acc.mag.bit_length() - 1 + common_exp) * log10_2)); + constexpr double log10_2 = 0.30102999566398119521373889472449; + const int exponent2 = fp::frexp_exponent(magnitude); + const int lower_decimal_exponent = + static_cast(fp::floor(static_cast(exponent2 - 1) * log10_2)); - int guard = 0; - while (compare_scaled_with_pow10exp(acc.mag, common_exp, approx) < 0) - { - --approx; - if (++guard > 16) - break; + return lower_decimal_exponent < -5 || lower_decimal_exponent >= significant_digits; } - guard = 0; - while (compare_scaled_with_pow10exp(acc.mag, common_exp, approx + 1) >= 0) + template + [[nodiscard]] constexpr bool defaultfloat_rounded_exp10( + const typename Traits::value_type& ax, + int significant_digits, + int initial_exp10, + int& rounded_exp10) { - ++approx; - if (++guard > 16) - break; - } - - exp10 = approx; - - biguint num = acc.mag; - biguint den{1}; - if (common_exp >= 0) - num.shl_bits(common_exp); - else - den.shl_bits(-common_exp); + exact_decimal::biguint magnitude; + int common_exp = 0; + bool neg = false; + if (!exact_decimal::exact_binary_components( + ax, + magnitude, + common_exp, + neg) || + neg) + { + return false; + } - const int scale10 = sig - 1 - exp10; - if (scale10 >= 0) - { - for (int i = 0; i < scale10; ++i) - num.mul_small(10); - } - else - { - for (int i = 0; i < -scale10; ++i) - den.mul_small(10); + exact_decimal::biguint coefficient; + rounded_exp10 = initial_exp10; + return exact_decimal::exact_significant_decimal( + magnitude, + common_exp, + significant_digits, + coefficient, + rounded_exp10); } - biguint q; - biguint r; - divmod_bitwise(num, den, q, r); - if (!r.is_zero()) + template + [[nodiscard]] BL_FORCE_INLINE constexpr fltx_char_result emit_exact_fixed_decimal_to_chars( + char* first, + char* last, + const typename Traits::value_type& x, + int precision, + bool strip_trailing_zeros, + bool zero, + bool negative) { - biguint twice_r = r; - twice_r.shl1(); - const int cmp = compare(twice_r, den); - if (cmp > 0 || (cmp == 0 && q.is_odd())) - q.add_small(1); - } + if (precision < 0) + precision = 0; + + if (zero) + return emit_fixed_zero_to_chars(first, last, negative, precision, strip_trailing_zeros); + + exact_decimal::biguint coefficient; + bool coefficient_negative = false; + if (!exact_decimal::exact_decimal_places_integer( + x, + precision, + coefficient, + coefficient_negative)) + { + return { first, false }; + } - const biguint limit = pow10_big(sig); - if (compare(q, limit) >= 0) - { - q.div_small(10); - ++exp10; - } + String digits = exact_decimal::to_decimal_string(coefficient); + const int digit_count = static_cast(digits.size()); + const int integer_digits = digit_count > precision ? digit_count - precision : 1; + int fractional_digits = precision > 0 ? precision : 0; - digits = to_decimal_string(q); - if (static_cast(digits.size()) < sig) - { - const std::size_t zero_pad_count = static_cast(sig - static_cast(digits.size())); - digits.insert(0, zero_pad_count, '0'); - } + auto fractional_digit = [&](int index) constexpr noexcept -> char + { + if (digit_count > precision) + return digits[static_cast(integer_digits + index)]; - return true; -} + const int leading_zero_count = precision - digit_count; + if (index < leading_zero_count) + return '0'; -[[nodiscard]] constexpr inline bool pow5_u64(int exponent, std::uint64_t& out) noexcept -{ - if (exponent < 0) - return false; + return digits[static_cast(index - leading_zero_count)]; + }; - constexpr std::uint64_t max_u64 = ~std::uint64_t{ 0 }; - std::uint64_t value = 1; - for (int i = 0; i < exponent; ++i) - { - if (value > max_u64 / 5) - return false; - value *= 5; - } + if (strip_trailing_zeros) + { + while (fractional_digits > 0 && fractional_digit(fractional_digits - 1) == '0') + --fractional_digits; + } - out = value; - return true; -} + const bool emit_sign = coefficient_negative && (!coefficient.is_zero() || fractional_digits > 0); + const std::size_t needed = + static_cast(emit_sign ? 1 : 0) + + static_cast(integer_digits) + + (fractional_digits > 0 ? static_cast(1 + fractional_digits) : 0u); + if (static_cast(last - first) < needed) + return { first, false }; -[[nodiscard]] constexpr inline bool pow5_u32(int exponent, std::uint32_t& out) noexcept -{ - std::uint64_t value = 0; - if (!pow5_u64(exponent, value) || value > static_cast(~std::uint32_t{ 0 })) - return false; + char* p = first; + if (emit_sign) + *p++ = '-'; - out = static_cast(value); - return true; -} + if (digit_count > precision) + { + copy_chars(p, digits.data(), static_cast(integer_digits)); + p += integer_digits; + } + else + { + *p++ = '0'; + } -[[nodiscard]] constexpr inline int floor_log2_ratio_u64(std::uint64_t numerator, std::uint64_t denominator) noexcept -{ - int k = bl::detail::fp::bit_length_u64(numerator) - bl::detail::fp::bit_length_u64(denominator); + if (fractional_digits > 0) + { + *p++ = '.'; + for (int i = 0; i < fractional_digits; ++i) + *p++ = fractional_digit(i); + } - if (k >= 0) - { - const std::uint64_t shifted_den = denominator << k; - if (numerator < shifted_den) - --k; + return { p, true }; } - else + + template + [[nodiscard]] BL_FORCE_INLINE constexpr fltx_char_result emit_fixed_decimal_for_traits( + char* first, + char* last, + const typename Traits::value_type& x, + int precision, + bool strip_trailing_zeros) { - const std::uint64_t shifted_num = numerator << -k; - if (shifted_num < denominator) - --k; - } + if (fixed_format_needs_exact_integer_path( + Traits::limb(x, 0), + std::numeric_limits::digits10)) + { + return emit_exact_fixed_decimal_to_chars< + typename Traits::exact_decimal_traits, + typename Traits::string_type>( + first, + last, + x, + precision, + strip_trailing_zeros, + Traits::iszero(x), + Traits::is_negative(x)); + } - return k; -} + return Traits::to_chars_fixed_fast(first, last, x, precision, strip_trailing_zeros); + } -template -constexpr inline bool compact_decimal_to_value(std::uint64_t coeff, int dec_exp, bool neg, typename Traits::value_type& out) noexcept -{ - if (coeff == 0) + template + [[nodiscard]] BL_FORCE_INLINE constexpr fltx_char_result emit_general_decimal_for_traits( + char* first, + char* last, + const typename Traits::value_type& x, + int precision, + bool strip_trailing_zeros) { - out = Traits::zero(neg); - return true; - } + if (precision < 0) + precision = 0; - std::uint64_t numerator = coeff; - std::uint32_t denominator = 1; - int bin_exp = 0; + const int sig = precision == 0 ? 1 : precision; + if (Traits::iszero(x)) + return emit_single_zero_to_chars(first, last); - if (dec_exp >= 0) - { - std::uint64_t scale5 = 0; - if (!pow5_u64(dec_exp, scale5) || numerator > (~std::uint64_t{ 0 }) / scale5) - return false; + const auto ax = Traits::abs(x); + if (defaultfloat_definitely_scientific(Traits::limb(ax, 0), sig)) + return Traits::to_chars_scientific_sig(first, last, x, sig, strip_trailing_zeros); - numerator *= scale5; - bin_exp = dec_exp; - } - else - { - const int original_pow10 = -dec_exp; - int pow5 = original_pow10; - while (pow5 > 0 && (numerator % 5) == 0) + int e10 = 0; + if (!exact_decimal::exact_decimal_exponent(ax, e10)) + return emit_single_zero_to_chars(first, last); + + int format_exp10 = e10; + if (e10 == -5 || e10 == sig - 1) { - numerator /= 5; - --pow5; + int rounded_exp10 = e10; + if (defaultfloat_rounded_exp10(ax, sig, e10, rounded_exp10)) + format_exp10 = rounded_exp10; } - if (!pow5_u32(pow5, denominator)) - return false; + if (format_exp10 >= -4 && format_exp10 < sig) + { + const int frac = sig > format_exp10 + 1 ? sig - (format_exp10 + 1) : 0; + return Traits::to_chars_default_fixed(first, last, x, frac, sig, format_exp10, strip_trailing_zeros); + } - bin_exp = -original_pow10; + return Traits::to_chars_scientific_sig(first, last, x, sig, strip_trailing_zeros); } - const int ratio_exp = floor_log2_ratio_u64(numerator, denominator); - const int scale_bits = Traits::significand_bits - 1 - ratio_exp; - if (scale_bits < 0) - return false; - - biguint q{ numerator }; - q.shl_bits(scale_bits); - - std::uint32_t remainder = 0; - if (denominator != 1) - remainder = q.div_small(denominator); - - if (remainder != 0) + template + [[nodiscard]] constexpr typename Traits::string_type to_static_string_impl( + const typename Traits::value_type& value, + int precision, + std::ios_base::fmtflags flags) { - const std::uint64_t twice_remainder = static_cast(remainder) << 1; - const int cmp = twice_remainder < denominator ? -1 : twice_remainder > denominator ? 1 : 0; - if (cmp > 0 || (cmp == 0 && q.is_odd())) - q.add_small(1); + typename Traits::string_type out; + to_string_into(out, value, precision, flags); + return out; } - int adjusted_ratio_exp = ratio_exp; - if (q.bit_length() > Traits::significand_bits) + [[nodiscard]] BL_FORCE_INLINE constexpr bool should_collapse_fixed_string(precision_info precision, std::ios_base::fmtflags flags) noexcept { - q.shr1(); - ++adjusted_ratio_exp; + return float_format_from_flags(flags) == float_format::fixed && + precision.leading_digits > 0 && + precision.trailing_digits > 0; } - const int e2 = bin_exp + adjusted_ratio_exp; - if (e2 > 1023) - out = Traits::infinity(neg); - else if (e2 < -1074) - out = Traits::zero(neg); - else - out = Traits::pack_from_significand(q, e2, neg); + BL_FORCE_INLINE void collapse_fixed_string(std::string& text, precision_info precision) + { + if (precision.leading_digits < 0) + precision.leading_digits = 0; + if (precision.trailing_digits < 0) + precision.trailing_digits = 0; - return true; -} + const std::size_t period = text.find('.'); + if (period == std::string::npos) + return; -template -constexpr inline typename Traits::value_type exact_decimal_to_value(const biguint& coeff, int dec_exp, bool neg) noexcept -{ - if (coeff.is_zero()) - return Traits::zero(neg); + const std::size_t fractional_begin = period + 1; + if (fractional_begin >= text.size()) + return; - biguint numerator = coeff; - biguint denominator{ 1 }; - int bin_exp = 0; + const std::size_t fractional_digits = text.size() - fractional_begin; + const std::size_t leading = static_cast(precision.leading_digits); + const std::size_t trailing = static_cast(precision.trailing_digits); - if (dec_exp >= 0) - { - numerator = mul_big(coeff, pow5_big(dec_exp)); - bin_exp = dec_exp; - } - else - { - denominator = pow5_big(-dec_exp); - bin_exp = dec_exp; - } + if (leading >= fractional_digits || trailing >= fractional_digits || leading + trailing >= fractional_digits) + return; - int ratio_exp = floor_log2_ratio(numerator, denominator); + const std::size_t collapse_begin = fractional_begin + leading; + const std::size_t collapse_end = text.size() - trailing; - biguint q = extract_rounded_significand_chunks(numerator, denominator, ratio_exp, Traits::significand_bits); - if (q.bit_length() > Traits::significand_bits) - { - q.shr1(); - ++ratio_exp; - } + if (collapse_end <= collapse_begin + 3) + return; - const int e2 = bin_exp + ratio_exp; - if (e2 > 1023) - return Traits::infinity(neg); - if (e2 < -1074) - return Traits::zero(neg); + text.replace(collapse_begin, collapse_end - collapse_begin, "..."); + } - return Traits::pack_from_significand(q, e2, neg); -} + template + [[nodiscard]] BL_FORCE_INLINE std::string to_string_impl( + const typename Traits::value_type& value, + precision_info precision, + std::ios_base::fmtflags flags) + { + const int digits = precision.digits >= 0 + ? precision.digits + : std::numeric_limits::digits10; + + const auto text = to_static_string_impl(value, digits, flags); + std::string out(text.data(), text.size()); + if (should_collapse_fixed_string(precision, flags)) + collapse_fixed_string(out, precision); + return out; + } -} // namespace bl::detail::exact_decimal +} // namespace bl::detail #endif diff --git a/include/fltx/detail/common_math.h b/include/fltx/detail/common_math.h index 2b1ddf5..f1e1077 100644 --- a/include/fltx/detail/common_math.h +++ b/include/fltx/detail/common_math.h @@ -79,7 +79,7 @@ BL_FORCE_INLINE constexpr double log1p(double x) noexcept return log(1.0 + x); } -BL_FORCE_INLINE constexpr double round_half_away_zero(double x) noexcept +BL_FORCE_INLINE constexpr double round_nearest_away_from_zero(double x) noexcept { if (iszero_or_inf_or_nan(x)) return x; @@ -89,16 +89,16 @@ BL_FORCE_INLINE constexpr double round_half_away_zero(double x) noexcept if (ax >= integer_threshold) return x; - if (signbit(x)) - { - const double y = -floor((-x) + 0.5); - return (y == 0.0) ? -0.0 : y; - } + const double integer = floor(ax); + const double fraction = ax - integer; + double y = fraction < 0.5 ? integer : integer + 1.0; - return floor(x + 0.5); + if (signbit(x)) + y = -y; + return (y == 0.0) ? (signbit(x) ? -0.0 : 0.0) : y; } -BL_FORCE_INLINE constexpr float round_half_away_zero(float x) noexcept +BL_FORCE_INLINE constexpr float round_nearest_away_from_zero(float x) noexcept { if (isnan(x) || isinf(x) || x == 0.0f) return x; @@ -198,7 +198,10 @@ BL_FORCE_INLINE constexpr float nextafter(float from, float to) noexcept return std::bit_cast(bits); } -BL_FORCE_INLINE constexpr double nearbyint_ties_even(double x) noexcept +// Numeric rounding core. The wrapper below additionally preserves the input +// sign when the rounded result is zero. +BL_PUSH_PRECISE; +BL_FORCE_INLINE constexpr double round_nearest_even_value(double x) noexcept { if (iszero_or_inf_or_nan(x)) return x; @@ -215,22 +218,23 @@ BL_FORCE_INLINE constexpr double nearbyint_ties_even(double x) noexcept return out; } -BL_FORCE_INLINE constexpr double nearbyint(double x) noexcept +BL_FORCE_INLINE constexpr double round_nearest_even(double x) noexcept { - const double y = nearbyint_ties_even(x); + const double y = round_nearest_even_value(x); if (y == 0.0) return signbit(x) ? -0.0 : 0.0; return y; } -BL_FORCE_INLINE constexpr float nearbyint(float x) noexcept +BL_FORCE_INLINE constexpr float round_nearest_even(float x) noexcept { - const double y = nearbyint_ties_even(static_cast(x)); + const double y = round_nearest_even_value(static_cast(x)); const float out = static_cast(y); if (out == 0.0f) return signbit(x) ? -0.0f : 0.0f; return out; } +BL_POP_PRECISE; template BL_FORCE_INLINE constexpr SignedInt to_signed_integer_or_zero(float x) noexcept { @@ -285,17 +289,6 @@ template BL_FORCE_INLINE constexpr Value powi_by_squaring(Value bas return invert ? (Value{ 1.0 } / result) : result; } -template BL_FORCE_INLINE constexpr BigUInt append_decimal_digits(BigUInt coeff, const char* digits, int digit_count) noexcept -{ - for (int i = 0; i < digit_count; ++i) - { - coeff.mul_small(10); - coeff.add_small(static_cast(digits[i] - '0')); - } - - return coeff; -} - BL_FORCE_INLINE constexpr double atan_series(double x) noexcept { const double x2 = x * x; @@ -348,19 +341,43 @@ BL_MSVC_NOINLINE constexpr double atan2(double y, double x) noexcept { constexpr double pi = 3.1415926535897932384626433832795028841972; constexpr double pi_2 = 1.5707963267948966192313216916397514420986; + constexpr double pi_4 = 0.7853981633974483096156608458198757210493; if (isnan(x) || isnan(y)) return std::numeric_limits::quiet_NaN(); - if (x == 0.0) + + const bool x_negative = signbit(x); + const bool y_negative = signbit(y); + if (isinf(y)) + { + if (isinf(x)) + { + const double magnitude = x_negative ? 3.0 * pi_4 : pi_4; + return y_negative ? -magnitude : magnitude; + } + return y_negative ? -pi_2 : pi_2; + } + + if (isinf(x)) + { + if (x_negative) + return y_negative ? -pi : pi; + return y_negative ? -0.0 : 0.0; + } + + if (y == 0.0) { - if (y == 0.0) - return std::numeric_limits::quiet_NaN(); - return signbit(y) ? -pi_2 : pi_2; + if (x_negative) + return y_negative ? -pi : pi; + return y; } + if (x == 0.0) + return y_negative ? -pi_2 : pi_2; + const double a = atan(y / x); if (x < 0.0) - return signbit(y) ? (a - pi) : (a + pi); + return y_negative ? (a - pi) : (a + pi); return a; } @@ -371,7 +388,7 @@ BL_FORCE_INLINE constexpr void reduce_pi_over_2(double x, int& quadrant, double& constexpr double inv_pi_2 = 0x1.45f306dc9c883p-1; constexpr double pi_4_hi = 0x1.921fb54442d18p-1; - const double n = nearbyint_ties_even(x * inv_pi_2); + const double n = round_nearest_even_value(x * inv_pi_2); r = (x - n * pi_2_hi) - n * pi_2_lo; const int q0 = static_cast(n) & 3; @@ -524,6 +541,44 @@ BL_FORCE_INLINE constexpr double sqrt_seed(double x) noexcept return ldexp(y, exp2 / 2); } +BL_FORCE_INLINE constexpr double cbrt_seed(double x) noexcept +{ + if (x == 0.0 || isnan(x) || isinf(x)) + return x; + + const bool negative = x < 0.0; + double ax = negative ? -x : x; + + int exp2 = frexp_exponent(ax); + double m = ldexp(ax, -exp2); + + int rem = exp2 % 3; + if (rem < 0) + rem += 3; + + if (rem != 0) + { + m = ldexp(m, rem); + exp2 -= rem; + } + + double y = 1.0; + for (int i = 0; i < 8; ++i) + y = (2.0 * y + m / (y * y)) / 3.0; + + y = ldexp(y, exp2 / 3); + return negative ? -y : y; +} + +BL_FORCE_INLINE constexpr bool exp_scale_needs_checked_product(int n) noexcept +{ + return n >= 691 || n <= -671; +} + +BL_FORCE_INLINE constexpr bool exp_inverse_is_negligible(double x) noexcept +{ + return x >= 690.0; +} } // namespace bl::detail::fp diff --git a/include/fltx/detail/common_stream.h b/include/fltx/detail/common_stream.h index f0120e5..8630a28 100644 --- a/include/fltx/detail/common_stream.h +++ b/include/fltx/detail/common_stream.h @@ -29,18 +29,6 @@ namespace bl namespace bl::detail { -template -inline bool write_stream_special(std::ostream& os, const typename Traits::value_type& x, bool showpos, bool uppercase) -{ - const char* text = special_text(x, uppercase); - if (!text) - return false; - if (showpos && text[0] != '-') - os << '+'; - os << text; - return true; -} - template BL_NO_INLINE std::ostream& write_to_stream(std::ostream& os, const typename Traits::value_type& x) { @@ -48,67 +36,8 @@ BL_NO_INLINE std::ostream& write_to_stream(std::ostream& os, const typename Trai if (prec < 0) prec = 6; - const auto flags = os.flags(); - const bool fixed = (flags & std::ios_base::fixed) != 0; - const bool scientific = (flags & std::ios_base::scientific) != 0; - const bool showpoint = (flags & std::ios_base::showpoint) != 0; - const bool showpos = (flags & std::ios_base::showpos) != 0; - const bool uppercase = (flags & std::ios_base::uppercase) != 0; - - if (write_stream_special(os, x, showpos, uppercase)) - return os; - std::string s; - if (fixed && !scientific) - { - format_to_string(s, x, prec, format_kind::fixed_frac, false); - } - else if (scientific && !fixed) - { - format_to_string(s, x, prec, format_kind::scientific_frac, false); - } - else - { - const int sig = (prec == 0) ? 1 : prec; - if (Traits::iszero(x)) - { - if (showpoint) - { - format_to_string(s, x, (sig > 1) ? (sig - 1) : 0, format_kind::fixed_frac, false); - ensure_decimal_point(s); - } - else - { - s = "0"; - } - apply_stream_decorations(s, showpos, uppercase); - os << s; - return os; - } - - typename Traits::value_type m; - int e10 = 0; - Traits::normalize10(Traits::abs(x), m, e10); - - if (e10 >= -4 && e10 < sig) - { - const int frac = (sig > e10 + 1) ? (sig - (e10 + 1)) : 0; - format_to_string(s, x, frac, format_kind::fixed_frac, !showpoint); - } - else if (showpoint) - { - format_to_string(s, x, (sig > 1) ? (sig - 1) : 0, format_kind::scientific_frac, false); - ensure_decimal_point(s); - } - else - { - format_to_string(s, x, sig, format_kind::scientific_sig, true); - } - } - - if (showpoint) - ensure_decimal_point(s); - apply_stream_decorations(s, showpos, uppercase); + format_to_string(s, x, prec, os.flags()); os << s; return os; } diff --git a/include/fltx/detail/f128_arithmetic.h b/include/fltx/detail/f128_arithmetic.h index 5baeb33..11d662d 100644 --- a/include/fltx/detail/f128_arithmetic.h +++ b/include/fltx/detail/f128_arithmetic.h @@ -17,24 +17,38 @@ namespace bl { namespace detail::_f128 // primitives and kernels { - // public arithmetic special cases + // Tests one binary64 limb for either sign of zero without floating-point comparisons. + [[nodiscard]] BL_FORCE_INLINE constexpr bool limb_is_zero(double value) noexcept + { + return (std::bit_cast(value) & 0x7fffffffffffffffull) == 0; + } + + // Tests whether both limbs of an f128 value are zero. + [[nodiscard]] BL_FORCE_INLINE constexpr bool value_is_zero(const f128_s& value) noexcept + { + return limb_is_zero(value.hi) && limb_is_zero(value.lo); + } + + // Constructs the canonical quiet NaN used by public f128 arithmetic. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s quiet_nan() noexcept { - return { std::numeric_limits::quiet_NaN(), 0.0 }; + return { std::bit_cast(0x7ff8000000000000ull), 0.0 }; } + // Constructs a canonical signed infinity for public f128 arithmetic. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s signed_infinity(bool negative) noexcept { - const double inf = std::numeric_limits::infinity(); - return { negative ? -inf : inf, 0.0 }; + return { std::bit_cast(negative ? 0xfff0000000000000ull : 0x7ff0000000000000ull), 0.0 }; } + // Constructs a canonical signed zero for public f128 arithmetic. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s signed_zero(bool negative) noexcept { - return { negative ? -0.0 : 0.0, 0.0 }; + return { std::bit_cast(negative ? 0x8000000000000000ull : 0ull), 0.0 }; } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s add_special(const f128_s& a, const f128_s& b) noexcept + // Resolves non-finite addition results according to the public f128 policy. + [[nodiscard]] BL_NO_INLINE constexpr f128_s add_special(const f128_s& a, const f128_s& b) noexcept { if (detail::fp::isnan(a.hi) || detail::fp::isnan(b.hi)) return quiet_nan(); @@ -45,28 +59,40 @@ namespace detail::_f128 // primitives and kernels return quiet_nan(); if (a_inf) return signed_infinity(signbit(a.hi)); - return signed_infinity(signbit(b.hi)); + if (b_inf) + return signed_infinity(signbit(b.hi)); + + return signed_infinity(signbit(a)); } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sub_special(const f128_s& a, const f128_s& b) noexcept + // Resolves non-finite subtraction results according to the public f128 policy. + [[nodiscard]] BL_NO_INLINE constexpr f128_s sub_special(const f128_s& a, const f128_s& b) noexcept { return add_special(a, f128_s{ -b.hi, -b.lo }); } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_special(const f128_s& a, const f128_s& b) noexcept + // Resolves non-finite and signed-zero multiplication results for public f128 arithmetic. + [[nodiscard]] BL_NO_INLINE constexpr f128_s mul_special(const f128_s& a, const f128_s& b) noexcept { if (detail::fp::isnan(a.hi) || detail::fp::isnan(b.hi)) return quiet_nan(); const bool a_inf = isinf(a.hi); const bool b_inf = isinf(b.hi); - if ((a_inf && b.hi == 0.0) || (b_inf && a.hi == 0.0)) + const bool a_zero = value_is_zero(a); + const bool b_zero = value_is_zero(b); + if ((a_inf && b_zero) || (b_inf && a_zero)) return quiet_nan(); - return signed_infinity(bl::signbit(a) != bl::signbit(b)); + const bool negative = bl::signbit(a) != bl::signbit(b); + if (a_zero || b_zero) + return signed_zero(negative); + + return signed_infinity(negative); } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s div_special(const f128_s& a, const f128_s& b) noexcept + // Resolves zero, infinity, and NaN division cases for public f128 arithmetic. + [[nodiscard]] BL_NO_INLINE constexpr f128_s div_special(const f128_s& a, const f128_s& b) noexcept { if (detail::fp::isnan(a.hi) || detail::fp::isnan(b.hi)) return quiet_nan(); @@ -86,77 +112,76 @@ namespace detail::_f128 // primitives and kernels return signed_zero(negative); } - // residual helpers - BL_FORCE_INLINE constexpr f128_s sub_mul_scalar_exact(const f128_s& r, const f128_s& b, double q) noexcept - { - double p{}, e{}; - two_prod_precise(b.hi, q, p, e); - e += b.lo * q; - - double s{}, t{}; - detail::fp::two_diff_precise(r.hi, p, s, t); - t += r.lo - e; - - return renorm(s, t); - } + // ----- Addition ----- - [[nodiscard]] BL_FORCE_INLINE constexpr double product_split_high(double value) noexcept + BL_PUSH_PRECISE; + // Adds f128 expansions without applying canonical special-value handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s add_finite_inline(const f128_s& a, const f128_s& b) noexcept { - constexpr double split = 134217729.0; - constexpr int split_shift = 27; + double s1{}, s2{}; + two_sum_precise(a.hi, b.hi, s1, s2); - const double scaled = split * value; - if (detail::fp::isinf(scaled)) - { - return detail::fp::ldexp( - value - (value - detail::fp::ldexp(value, -split_shift)), - split_shift); - } + double t1{}, t2{}; + two_sum_precise(a.lo, b.lo, t1, t2); - return scaled - (scaled - value); + s2 += t1; + detail::fp::quick_two_sum_precise(s1, s2, s1, s2); + s2 += t2; + detail::fp::quick_two_sum_precise(s1, s2, s1, s2); + return { s1, s2 }; } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s div_compensated_inline(const f128_s& a, const f128_s& b) noexcept + // Adds f128 values and canonicalizes a non-finite result. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s add_canonical_inline(const f128_s& a, const f128_s& b) noexcept { - const double q0 = a.hi / b.hi; - if (detail::fp::isinf_or_nan(q0)) [[unlikely]] - return { q0, 0.0 }; - if (q0 == 0.0 && a.hi == 0.0 && a.lo == 0.0) [[unlikely]] - return signed_zero(bl::signbit(a) != bl::signbit(b)); + const f128_s out = add_finite_inline(a, b); + if (detail::fp::isinf_or_nan(out.hi)) [[unlikely]] + return add_special(a, b); + return out; + } - double p0{}, e0{}; - two_prod_precise(q0, b.hi, p0, e0); + BL_POP_PRECISE; - const double q1 = (((a.hi - p0) - e0) + a.lo - (q0 * b.lo)) / b.hi; - const double hi = q0 + q1; - return { hi, (q0 - hi) + q1 }; + // Adds a double to an f128 expansion without canonical special-value handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s add_double_finite_inline(const f128_s& a, double b) noexcept + { + double s{}, e{}; + two_sum_precise(a.hi, b, s, e); +#if BL_FP_BARRIER_ACTIVE + BL_FP_BARRIER(e); + e += a.lo; BL_FP_BARRIER(e); +#else + e += a.lo; +#endif + return renorm(s, e); } - [[nodiscard]] BL_MSVC_NOINLINE constexpr f128_s div_f128_double_runtime(const f128_s& a, double b) noexcept + // Adds an f128 expansion to a double through the finite scalar kernel. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s add_double_finite_inline(double a, const f128_s& b) noexcept { - return div_compensated_inline(a, f128_s{ b, 0.0 }); + return add_double_finite_inline(b, a); } - // core arithmetic - BL_PUSH_PRECISE; - BL_FORCE_INLINE constexpr void mul_expansion_inline(const f128_s& a, const f128_s& b, double& p, double& e) noexcept + // Adds a double to f128 and canonicalizes a non-finite result. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s add_double_canonical_inline(const f128_s& a, double b) noexcept { - two_prod_precise(a.hi, b.hi, p, e); - - e += a.hi * b.lo + a.lo * b.hi; - e += a.lo * b.lo; + const f128_s out = add_double_finite_inline(a, b); + if (detail::fp::isinf_or_nan(out.hi)) [[unlikely]] + return add_special(a, f128_s{ b, 0.0 }); + return out; } - BL_POP_PRECISE; - // fused expressions + // ----- Subtraction ----- + BL_PUSH_PRECISE; - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s add_inline(const f128_s& a, const f128_s& b) noexcept + // Subtracts f128 expansions without applying canonical special-value handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sub_finite_inline(const f128_s& a, const f128_s& b) noexcept { double s1{}, s2{}; - two_sum_precise(a.hi, b.hi, s1, s2); + detail::fp::two_diff_precise(a.hi, b.hi, s1, s2); double t1{}, t2{}; - two_sum_precise(a.lo, b.lo, t1, t2); + detail::fp::two_diff_precise(a.lo, b.lo, t1, t2); s2 += t1; detail::fp::quick_two_sum_precise(s1, s2, s1, s2); @@ -165,74 +190,232 @@ namespace detail::_f128 // primitives and kernels return { s1, s2 }; } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sub_inline(const f128_s& a, const f128_s& b) noexcept + // Subtracts f128 values and canonicalizes a non-finite result. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sub_canonical_inline(const f128_s& a, const f128_s& b) noexcept { - double s1{}, s2{}; - detail::fp::two_diff_precise(a.hi, b.hi, s1, s2); + const f128_s out = sub_finite_inline(a, b); + if (detail::fp::isinf_or_nan(out.hi)) [[unlikely]] + return sub_special(a, b); + return out; + } + BL_POP_PRECISE; - double t1{}, t2{}; - detail::fp::two_diff_precise(a.lo, b.lo, t1, t2); + // Subtracts a double from f128 without canonical special-value handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sub_double_finite_inline(const f128_s& a, double b) noexcept + { + return add_double_finite_inline(a, -b); + } - s2 += t1; - detail::fp::quick_two_sum_precise(s1, s2, s1, s2); - s2 += t2; - detail::fp::quick_two_sum_precise(s1, s2, s1, s2); - return { s1, s2 }; + // Subtracts f128 from a double through the finite scalar kernel. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sub_double_finite_inline(double a, const f128_s& b) noexcept + { + return add_double_finite_inline(-b, a); + } + + // Subtracts a double from f128 and canonicalizes a non-finite result. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sub_double_canonical_inline(const f128_s& a, double b) noexcept + { + const f128_s out = sub_double_finite_inline(a, b); + if (detail::fp::isinf_or_nan(out.hi)) [[unlikely]] + return sub_special(a, f128_s{ b, 0.0 }); + return out; + } + + // ----- Multiplication ----- + + BL_PUSH_PRECISE; + // Forms an unrenormalized f128 product with the ordinary Dekker split. + BL_FORCE_INLINE constexpr void mul_expansion_inline(const f128_s& a, const f128_s& b, double& p, double& e) noexcept + { + two_prod_precise(a.hi, b.hi, p, e); + + e += a.hi * b.lo + a.lo * b.hi; + e += a.lo * b.lo; + } + +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + // Forms an unrenormalized f128 product with range-safe Dekker splitting. + BL_FORCE_INLINE constexpr void mul_expansion_range_safe_inline(const f128_s& a, const f128_s& b, double& p, double& e) noexcept + { + detail::fp::two_prod_precise_range_safe(a.hi, b.hi, p, e); + + e += a.hi * b.lo + a.lo * b.hi; + e += a.lo * b.lo; } +#endif BL_POP_PRECISE; - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_inline(const f128_s& a, const f128_s& b) noexcept + // Forms and renormalizes an f128 product with the ordinary Dekker split. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_product_inline(const f128_s& a, const f128_s& b) noexcept { double p{}, e{}; two_prod_precise(a.hi, b.hi, p, e); +#if BL_FP_BARRIER_ACTIVE + BL_FP_BARRIER(e); + double cross = a.hi * b.lo; BL_FP_BARRIER(cross); + double term = a.lo * b.hi; BL_FP_BARRIER(term); + cross += term; BL_FP_BARRIER(cross); + e += cross; BL_FP_BARRIER(e); +#else e += a.hi * b.lo + a.lo * b.hi; +#endif detail::fp::quick_two_sum_precise(p, e, p, e); return { p, e }; } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_dd_inline(const f128_s& a, const f128_s& b) noexcept +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + // Forms and renormalizes an f128 product with range-safe Dekker splitting. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_product_range_safe_inline(const f128_s& a, const f128_s& b) noexcept { - return mul_inline(a, b); + double p{}, e{}; + detail::fp::two_prod_precise_range_safe(a.hi, b.hi, p, e); + e += a.hi * b.lo + a.lo * b.hi; + detail::fp::quick_two_sum_precise(p, e, p, e); + return { p, e }; } +#endif - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sqr_dd_inline(const f128_s& a) noexcept + // Squares an f128 expansion with the ordinary Dekker split. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sqr_inline(const f128_s& a) noexcept { double p{}, e{}; two_prod_precise(a.hi, a.hi, p, e); +#if BL_FP_BARRIER_ACTIVE + BL_FP_BARRIER(e); + double doubled_hi = a.hi + a.hi; BL_FP_BARRIER(doubled_hi); + double cross = doubled_hi * a.lo; BL_FP_BARRIER(cross); + e += cross; BL_FP_BARRIER(e); + double tail = a.lo * a.lo; BL_FP_BARRIER(tail); + e += tail; BL_FP_BARRIER(e); +#else e += (a.hi + a.hi) * a.lo; + e += a.lo * a.lo; +#endif detail::fp::quick_two_sum_precise(p, e, p, e); return { p, e }; } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s div_inline(const f128_s& a, const f128_s& b) noexcept + // Converts a formed product into the canonical public multiplication result. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s finish_mul_canonical_inline(const f128_s& a, const f128_s& b, const f128_s& out) noexcept { - return div_compensated_inline(a, b); + if (detail::fp::isinf_or_nan(out.hi)) [[unlikely]] + return mul_special(a, b); + if (limb_is_zero(out.hi) && (value_is_zero(a) || value_is_zero(b))) [[unlikely]] + return mul_special(a, b); + return out; } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s add_double_inline(const f128_s& a, double b) noexcept + // Handles the complete multiplication range and canonical public special values. + [[nodiscard]] BL_NO_INLINE constexpr f128_s mul_canonical_fallback(const f128_s& a, const f128_s& b) noexcept { - double s{}, e{}; - two_sum_precise(a.hi, b, s, e); - e += a.lo; - return renorm(s, e); + if (detail::fp::isinf_or_nan(a.hi) || detail::fp::isinf_or_nan(b.hi) || + value_is_zero(a) || value_is_zero(b)) [[unlikely]] + return mul_special(a, b); + + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + if (detail::fp::dekker_product_needs_scaling(a.hi, b.hi)) [[unlikely]] + return finish_mul_canonical_inline(a, b, mul_product_range_safe_inline(a, b)); + #endif + + return finish_mul_canonical_inline(a, b, mul_product_inline(a, b)); + } + + // Tests whether ordinary Dekker multiplication is safe for two leading limbs. + [[nodiscard]] BL_FORCE_INLINE constexpr bool mul_product_fast_path_is_range_safe(double a, double b) noexcept + { + constexpr std::uint64_t sign_mask = std::uint64_t{ 1 } << 63; + constexpr std::uint64_t minimum = UINT64_C(0x0370000000000000); // 2^-968 + constexpr std::uint64_t maximum = UINT64_C(0x7e30000000000000); // 2^996 + + const std::uint64_t a_magnitude = std::bit_cast(a) & ~sign_mask; + const std::uint64_t b_magnitude = std::bit_cast(b) & ~sign_mask; + const std::uint64_t product_exponent_sum = (a_magnitude >> 52) + (b_magnitude >> 52); + + // The magnitude bounds keep Dekker's split away from overflow and + // underflow. An exponent-field sum of at most 3068 guarantees that + // multiplying the two leading limbs stays finite. Keep the tests + // branchless so callers need only one cold-path branch. + return + ((a_magnitude - minimum) <= (maximum - minimum)) & + ((b_magnitude - minimum) <= (maximum - minimum)) & + (product_exponent_sum <= 3068u); + } + + // Multiplies f128 values through the hot product path or the canonical fallback. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_canonical_inline(const f128_s& a, const f128_s& b) noexcept + { + BL_CONSTEXPR_RUNTIME_DISPATCH( + mul_canonical_fallback(a, b), + mul_product_fast_path_is_range_safe(a.hi, b.hi) + ? mul_product_inline(a, b) + : mul_canonical_fallback(a, b) + ); } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s add_double_inline(double a, const f128_s& b) noexcept + // Multiplies finite f128 values while retaining Dekker range protection. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_finite_inline(const f128_s& a, const f128_s& b) noexcept { - return add_double_inline(b, a); + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + return detail::fp::dekker_product_needs_scaling(a.hi, b.hi) + ? mul_product_range_safe_inline(a, b) + : mul_product_inline(a, b); + #else + return mul_product_inline(a, b); + #endif } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sub_double_inline(const f128_s& a, double b) noexcept + // Multiplies f128 values with range-safe Dekker formation and canonical finalization. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_dekker_range_safe_canonical_inline(const f128_s& a, const f128_s& b) noexcept { - return add_double_inline(a, -b); + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + return finish_mul_canonical_inline(a, b, mul_product_range_safe_inline(a, b)); + #else + return mul_canonical_inline(a, b); + #endif + } + + // Multiplies f128 values while retaining additional cross-product error terms. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_accurate_inline(const f128_s& a, const f128_s& b) noexcept + { + if (detail::fp::isinf_or_nan(a.hi) || detail::fp::isinf_or_nan(b.hi)) [[unlikely]] + return mul_canonical_inline(a, b); + + double p0{}, q0{}; + two_prod_precise(a.hi, b.hi, p0, q0); + if (detail::fp::isinf_or_nan(p0)) [[unlikely]] + return mul_canonical_inline(a, b); + + double p1{}, q1{}; + double p2{}, q2{}; + two_prod_precise(a.hi, b.lo, p1, q1); + two_prod_precise(a.lo, b.hi, p2, q2); + + double p12{}, e12{}; + double p012{}, e012{}; + two_sum_precise(p1, p2, p12, e12); + two_sum_precise(q0, p12, p012, e012); + + const double tail = e12 + e012 + q1 + q2 + (a.lo * b.lo); + return renorm(p0, p012 + tail); } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sub_double_inline(double a, const f128_s& b) noexcept + // Squares f128 with range-safe Dekker formation and canonical finalization. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sqr_dekker_range_safe_canonical_inline(const f128_s& a) noexcept { - return add_double_inline(-b, a); + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + double p{}, e{}; + detail::fp::two_prod_precise_range_safe(a.hi, a.hi, p, e); + e += (a.hi + a.hi) * a.lo; + e += a.lo * a.lo; + detail::fp::quick_two_sum_precise(p, e, p, e); + return finish_mul_canonical_inline(a, a, f128_s{ p, e }); + #else + return sqr_inline(a); + #endif } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_double_inline(const f128_s& a, double b) noexcept + // Forms an f128-by-double product with the ordinary Dekker split. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_double_product_inline(const f128_s& a, double b) noexcept { double p{}, e{}; two_prod_precise(a.hi, b, p, e); @@ -241,19 +424,188 @@ namespace detail::_f128 // primitives and kernels return renorm(p, e); } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_double_inline(double a, const f128_s& b) noexcept +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + // Forms an f128-by-double product with range-safe Dekker splitting. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_double_product_range_safe_inline(const f128_s& a, double b) noexcept + { + double p{}, e{}; + detail::fp::two_prod_precise_range_safe(a.hi, b, p, e); + + e += a.lo * b; + return renorm(p, e); + } +#endif + + // Multiplies f128 by a double with range protection and canonical special handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_double_canonical_inline(const f128_s& a, double b) noexcept + { + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + const f128_s out = detail::fp::dekker_product_needs_scaling(a.hi, b) + ? mul_double_product_range_safe_inline(a, b) + : mul_double_product_inline(a, b); + #else + const f128_s out = mul_double_product_inline(a, b); + #endif + + if (detail::fp::isinf_or_nan(out.hi)) [[unlikely]] + return mul_special(a, f128_s{ b, 0.0 }); + if (out.hi == 0.0 && ((a.hi == 0.0 && a.lo == 0.0) || b == 0.0)) [[unlikely]] + return mul_special(a, f128_s{ b, 0.0 }); + return out; + } + + // Multiplies finite f128 by a double while retaining Dekker range protection. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_double_finite_inline( + const f128_s& a, + double b) noexcept { - return mul_double_inline(b, a); + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + return detail::fp::dekker_product_needs_scaling(a.hi, b) + ? mul_double_product_range_safe_inline(a, b) + : mul_double_product_inline(a, b); + #else + return mul_double_product_inline(a, b); + #endif } + // Multiplies a double by f128 through the ordinary scalar product kernel. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_double_product_inline(double a, const f128_s& b) noexcept + { + return mul_double_product_inline(b, a); + } + + // Scales both f128 limbs by an exactly representable power of two. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_pwr2_inline(const f128_s& a, double b) noexcept { return { a.hi * b, a.lo * b }; } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s div_double_inline(const f128_s& a, double b) noexcept + // ----- Division ----- + + // clang-cl /fp:fast can reassociate the quotient compensation back to + // binary64 precision. Keep the exception function-local so other kernels + // and every other compiler retain their normal fast-math code generation. + + // Computes an exact f128 residual after subtracting one quotient product. + BL_FORCE_INLINE constexpr f128_s div_residual_exact_inline(const f128_s& r, const f128_s& b, double q) noexcept + { + double p{}, e{}; + two_prod_precise(b.hi, q, p, e); + e += b.lo * q; + + double s{}, t{}; + detail::fp::two_diff_precise(r.hi, p, s, t); + t += r.lo - e; + + return renorm(s, t); + } + +#if BL_FP_BARRIER_ACTIVE + // Applies the compensated quotient correction with explicit evaluation barriers. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s div_correction_inline( + const f128_s& a, + const f128_s& b, + double q0, + double p0, + double e0) noexcept + { + double residual = a.hi - p0; BL_FP_BARRIER(residual); + residual -= e0; BL_FP_BARRIER(residual); + residual += a.lo; BL_FP_BARRIER(residual); + residual -= q0 * b.lo; BL_FP_BARRIER(residual); + + double q1 = residual / b.hi; BL_FP_BARRIER(q1); + double hi = q0 + q1; BL_FP_BARRIER(hi); + double lo = q0 - hi; BL_FP_BARRIER(lo); + lo += q1; BL_FP_BARRIER(lo); + + return { hi, lo }; + } +#endif + + // Divides f128 after the caller has handled exceptional denominator cases. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s div_prechecked_inline(const f128_s& a, const f128_s& b) noexcept + { +#if defined(_MSC_VER) && defined(__clang__) && defined(FLTX_FAST_MATH) +#pragma clang fp reassociate(off) +#endif + const double q0 = a.hi / b.hi; + if (detail::fp::isinf_or_nan(q0)) [[unlikely]] + return { q0, 0.0 }; + if (q0 == 0.0 && a.hi == 0.0 && a.lo == 0.0) [[unlikely]] + return signed_zero(bl::signbit(a) != bl::signbit(b)); + + double p0{}, e0{}; + two_prod_precise(q0, b.hi, p0, e0); + +#if BL_FP_BARRIER_ACTIVE + return div_correction_inline(a, b, q0, p0, e0); +#else + const double q1 = (((a.hi - p0) - e0) + a.lo - (q0 * b.lo)) / b.hi; + const double hi = q0 + q1; + return { hi, (q0 - hi) + q1 }; +#endif + } + + // Divides finite f128 values without canonical special-value handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s div_finite_inline(const f128_s& a, const f128_s& b) noexcept + { +#if defined(_MSC_VER) && defined(__clang__) && defined(FLTX_FAST_MATH) +#pragma clang fp reassociate(off) +#endif + const double q0 = a.hi / b.hi; + + double p0{}, e0{}; + two_prod_precise(q0, b.hi, p0, e0); + +#if BL_FP_BARRIER_ACTIVE + return div_correction_inline(a, b, q0, p0, e0); +#else + const double q1 = (((a.hi - p0) - e0) + a.lo - (q0 * b.lo)) / b.hi; + const double hi = q0 + q1; + return { hi, (q0 - hi) + q1 }; +#endif + } + +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + // Divides prechecked f128 values with a range-safe Dekker residual product. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s div_prechecked_range_safe_inline(const f128_s& a, const f128_s& b) noexcept + { +#if defined(_MSC_VER) && defined(__clang__) && defined(FLTX_FAST_MATH) +#pragma clang fp reassociate(off) +#endif + const double q0 = a.hi / b.hi; + if (detail::fp::isinf_or_nan(q0)) [[unlikely]] + return { q0, 0.0 }; + if (q0 == 0.0 && a.hi == 0.0 && a.lo == 0.0) [[unlikely]] + return signed_zero(bl::signbit(a) != bl::signbit(b)); + + double p0{}, e0{}; + detail::fp::two_prod_precise_range_safe(q0, b.hi, p0, e0); + +#if BL_FP_BARRIER_ACTIVE + return div_correction_inline(a, b, q0, p0, e0); +#else + const double q1 = (((a.hi - p0) - e0) + a.lo - (q0 * b.lo)) / b.hi; + const double hi = q0 + q1; + return { hi, (q0 - hi) + q1 }; +#endif + } +#endif + + // Divides f128 values after applying the public exceptional-denominator policy. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s div_canonical_inline(const f128_s& a, const f128_s& b) noexcept + { + if (detail::fp::iszero_or_inf_or_nan(b.hi)) [[unlikely]] + return div_special(a, b); + + return div_prechecked_inline(a, b); + } + + // Divides f128 by a double after exceptional denominator cases are handled. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s div_double_prechecked_inline(const f128_s& a, double b) noexcept { - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { if (detail::fp::isnan(a.hi) || detail::fp::isnan(b)) [[unlikely]] return std::numeric_limits::quiet_NaN(); @@ -264,7 +616,7 @@ namespace detail::_f128 // primitives and kernels return std::numeric_limits::quiet_NaN(); const bool neg = signbit(a.hi) ^ signbit(b); - return f128_s{ neg ? -0.0 : 0.0, 0.0 }; + return signed_zero(neg); } if (b == 0.0) [[unlikely]] @@ -285,15 +637,74 @@ namespace detail::_f128 // primitives and kernels } } - return div_compensated_inline(a, f128_s{ b, 0.0 }); + return div_prechecked_inline(a, f128_s{ b, 0.0 }); + } + + // Divides a double by f128 through the prechecked full-value kernel. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s div_double_prechecked_inline(double a, const f128_s& b) noexcept + { + return div_prechecked_inline(f128_s{ a, 0.0 }, b); + } + + // Divides f128 by a double with canonical exceptional-denominator handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s div_double_canonical_inline( + const f128_s& a, + double b) noexcept + { + if (detail::fp::iszero_or_inf_or_nan(b)) [[unlikely]] + return div_special(a, f128_s{ b, 0.0 }); + + return div_double_prechecked_inline(a, b); } - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s div_double_inline(double a, const f128_s& b) noexcept + // Divides finite f128 by a finite double without canonical special handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s div_double_finite_inline( + const f128_s& a, + double b) noexcept { - return div_compensated_inline(f128_s{ a, 0.0 }, b); + return div_finite_inline(a, f128_s{ b, 0.0 }); + } + + // Supporting product split, extracts the high splitter component while avoiding intermediate overflow. + [[nodiscard]] BL_FORCE_INLINE constexpr double product_split_high(double value) noexcept + { +#if defined(_MSC_VER) && defined(__clang__) && defined(FLTX_FAST_MATH) +#pragma clang fp reassociate(off) +#endif + constexpr double split = 134217729.0; + constexpr int split_shift = 27; + +#if BL_FP_BARRIER_ACTIVE + double scaled = split * value; BL_FP_BARRIER(scaled); + if (detail::fp::isinf(scaled)) + { + double shifted = detail::fp::ldexp(value, -split_shift); BL_FP_BARRIER(shifted); + double delta = value - shifted; BL_FP_BARRIER(delta); + double high = value - delta; BL_FP_BARRIER(high); + high = detail::fp::ldexp(high, split_shift); BL_FP_BARRIER(high); + return high; + } + + double delta = scaled - value; BL_FP_BARRIER(delta); + double high = scaled - delta; BL_FP_BARRIER(high); + return high; +#else + const double scaled = split * value; + if (detail::fp::isinf(scaled)) + { + return detail::fp::ldexp( + value - (value - detail::fp::ldexp(value, -split_shift)), + split_shift); + } + + return scaled - (scaled - value); +#endif } + // ----- Fused expressions ----- + BL_PUSH_PRECISE; + // Computes (a * b + c) while retaining the full product expansion. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_add_inline(const f128_s& a, const f128_s& b, const f128_s& c) noexcept { double p{}, e{}; @@ -305,6 +716,46 @@ namespace detail::_f128 // primitives and kernels return renorm(s, t); } + // Computes (a * b + c) when a is a double. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_add_double_lhs_inline(double a, const f128_s& b, const f128_s& c) noexcept + { + double p{}, e{}; + two_prod_precise(a, b.hi, p, e); + e += a * b.lo; + + double s{}, t{}; + two_sum_precise(p, c.hi, s, t); + t += e + c.lo; + return renorm(s, t); + } + + // Computes (a * b + c) when c is a double. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_add_double_rhs_inline(const f128_s& a, const f128_s& b, double c) noexcept + { + double p{}, e{}; + mul_expansion_inline(a, b, p, e); + + double s{}, t{}; + two_sum_precise(p, c, s, t); + t += e; + return renorm(s, t); + } + +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + // Computes (a * b + c) with range-safe Dekker product formation. + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_add_range_safe_inline(const f128_s& a, const f128_s& b, const f128_s& c) noexcept + { + double p{}, e{}; + mul_expansion_range_safe_inline(a, b, p, e); + + double s{}, t{}; + two_sum_precise(p, c.hi, s, t); + t += e + c.lo; + return renorm(s, t); + } +#endif + + // Computes (a * b - c) while retaining the full product expansion. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s mul_sub_inline(const f128_s& a, const f128_s& b, const f128_s& c) noexcept { double p{}, e{}; @@ -316,6 +767,7 @@ namespace detail::_f128 // primitives and kernels return renorm(s, t); } + // Computes (c - a * b) while retaining the full product expansion. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sub_mul_inline(const f128_s& c, const f128_s& a, const f128_s& b) noexcept { double p{}, e{}; @@ -327,6 +779,7 @@ namespace detail::_f128 // primitives and kernels return renorm(s, t); } + // Computes (a0 * b + c0) and (a1 * b + c1) together so the shared-b products can use SIMD. BL_FORCE_INLINE constexpr void mul_add_pair_same_rhs_inline( const f128_s& a0, const f128_s& a1, @@ -339,7 +792,7 @@ namespace detail::_f128 // primitives and kernels double p0{}, e0{}; double p1{}, e1{}; - #if BL_F128_ENABLE_SIMD && (BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) + #if FLTX_F128_ENABLE_SIMD && (FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) if (f128_runtime_product_pair_simd_enabled()) { simd::f64x2 p{}, e{}; @@ -372,12 +825,13 @@ namespace detail::_f128 // primitives and kernels out1 = renorm(s1, t1); } + // Computes (a * b + c * d) together so the independent products can use SIMD. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sum_products_inline(const f128_s& a, const f128_s& b, const f128_s& c, const f128_s& d) noexcept { double p0{}, e0{}; double p1{}, e1{}; - #if BL_F128_ENABLE_SIMD && (BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) + #if FLTX_F128_ENABLE_SIMD && (FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) if (f128_runtime_product_pair_simd_enabled()) { simd::f64x2 p{}, e{}; @@ -405,12 +859,13 @@ namespace detail::_f128 // primitives and kernels return renorm(s, t); } + // Computes (a * b - c * d) together so the independent products can use SIMD. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s diff_products_inline(const f128_s& a, const f128_s& b, const f128_s& c, const f128_s& d) noexcept { double p0{}, e0{}; double p1{}, e1{}; - #if BL_F128_ENABLE_SIMD && (BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) + #if FLTX_F128_ENABLE_SIMD && (FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) if (f128_runtime_product_pair_simd_enabled()) { simd::f64x2 p{}, e{}; @@ -444,6 +899,11 @@ namespace detail::_f128 // primitives and kernels // reciprocal helpers [[nodiscard]] BL_FORCE_INLINE constexpr f128 recip(f128_s b) noexcept { + if (iszero(b)) [[unlikely]] + return detail::_f128::signed_infinity(signbit(b)); + if (isinf(b)) [[unlikely]] + return detail::_f128::signed_zero(signbit(b)); + constexpr f128_s one = f128_s{ 1.0 }; f128_s y = f128_s{ 1.0 / b.hi }; f128_s e = one - b * y; @@ -455,8 +915,6 @@ namespace detail::_f128 // primitives and kernels return y; } -[[nodiscard]] BL_FORCE_INLINE constexpr f128 inv(const f128_s& a) { return recip(a); } - } // namespace bl #endif diff --git a/include/fltx/detail/f128_consts.h b/include/fltx/detail/f128_consts.h index a3160c0..3019785 100644 --- a/include/fltx/detail/f128_consts.h +++ b/include/fltx/detail/f128_consts.h @@ -11,6 +11,7 @@ #define F128_DETAIL_CONSTS_INCLUDED #include +#include "fltx/detail/trig_reduce_consts.h" #include "fltx/f128_type.h" namespace bl::detail::_f128 // primitives and kernels @@ -18,6 +19,8 @@ namespace bl::detail::_f128 // primitives and kernels // scalar constants inline constexpr f128_s sqrt_half = { 0x1.6a09e667f3bcdp-1, -0x1.bdd3413b26456p-55 }; inline constexpr f128_s half_log_two_pi = { 0x1.d67f1c864beb5p-1, -0x1.65b5a1b7ff5dfp-55 }; + inline constexpr f128_s exp_overflow_cutoff = { 0x1.62e42fefa39efp+9, 0x1.a9c9e3b39803fp-46 }; + inline constexpr f128_s exp_zero_cutoff = { -0x1.74910d52d3052p+9, 0x1.04e7ce353629ep-46 }; // trig constants inline constexpr f128_s pi_2 = { 0x1.921fb54442d18p+0, 0x1.1a62633145c07p-54 }; @@ -108,6 +111,7 @@ namespace bl::detail::_f128 // primitives and kernels inline constexpr auto f128_trig_coeff_count_pi4 = sizeof(f128_sin_coeffs_pi4) / sizeof(f128_sin_coeffs_pi4[0]); inline constexpr auto f128_trig_small_coeff_offset = 6; inline constexpr auto f128_trig_small_coeff_count = f128_trig_coeff_count_pi4 - f128_trig_small_coeff_offset; + static_assert(f128_trig_coeff_count_pi4 == sizeof(f128_cos_coeffs_pi4) / sizeof(f128_cos_coeffs_pi4[0])); // erf/erfc coefficients inline constexpr f128_s f128_erf_cheb_1_2[] = { diff --git a/include/fltx/detail/f128_conversions.h b/include/fltx/detail/f128_conversions.h index 0f396bc..dcec360 100644 --- a/include/fltx/detail/f128_conversions.h +++ b/include/fltx/detail/f128_conversions.h @@ -22,18 +22,6 @@ namespace detail::_f128 // primitives and kernels return { s, e }; } - BL_FORCE_INLINE constexpr f128_s canonicalize_math_result(f128_s value) noexcept - { - value.lo = detail::fp::zero_low_fraction_bits_finite<8>(value.lo); - return value; - } - - #if defined(FLTX_CONSTEXPR_PARITY) - #define F128_CANONICALIZE_MATH_RESULT(value) bl::detail::_f128::canonicalize_math_result(value) - #else - #define F128_CANONICALIZE_MATH_RESULT(value) (value) - #endif - BL_FORCE_INLINE constexpr f128_s uint64_to_f128(uint64_t value) noexcept { double sum{}, err{}; diff --git a/include/fltx/detail/f128_declarations.h b/include/fltx/detail/f128_declarations.h index 4533d59..23ec0eb 100644 --- a/include/fltx/detail/f128_declarations.h +++ b/include/fltx/detail/f128_declarations.h @@ -15,39 +15,33 @@ #include "fltx/f128_classification.h" #include "fltx/detail/f128_consts.h" #include "fltx/detail/common_math.h" -#include "fltx/detail/common_decimal.h" #include "fltx/detail/math_utils.h" namespace bl { namespace detail::_f128_runtime { + // complete-operation x86 FMA backend + BL_NO_INLINE f128_s fma_x86(const f128_s& x, const f128_s& y, const f128_s& z); + // roots + BL_NO_INLINE f128_s BL_VECTORCALL sqrt(const f128_s& a); BL_NO_INLINE f128_s hypot(const f128_s& x, const f128_s& y); // rounding and decimals - BL_NO_INLINE f128_s trunc(const f128_s& a); - BL_NO_INLINE f128_s round(const f128_s& a); - BL_NO_INLINE f128_s round_to_decimals(f128_s v, int prec); - BL_NO_INLINE f128_s nearbyint_slow(const f128_s& a); - BL_NO_INLINE f128_s nearbyint(const f128_s& a); - BL_NO_INLINE f128_s rint(const f128_s& x); - BL_NO_INLINE long lround(const f128_s& x); - BL_NO_INLINE long long llround(const f128_s& x); - BL_NO_INLINE long lrint(const f128_s& x); - BL_NO_INLINE long long llrint(const f128_s& x); + BL_NO_INLINE f128_s round_nearest_away_from_zero(const f128_s& a); + BL_NO_INLINE f128_s round_decimals(f128_s v, int prec); + BL_NO_INLINE f128_s round_significant(f128_s v, int figures); + BL_NO_INLINE long lround_nearest_away_from_zero(const f128_s& x); + BL_NO_INLINE long long llround_nearest_away_from_zero(const f128_s& x); // remainders BL_NO_INLINE f128_s fmod(const f128_s& x, const f128_s& y); - BL_NO_INLINE f128_s remainder(const f128_s& x, const f128_s& y); BL_NO_INLINE f128_s remquo(const f128_s& x, const f128_s& y, int* quo); // fractional decomposition BL_NO_INLINE f128_s modf(const f128_s& x, f128_s* iptr) noexcept; - // decomposition and scaling - BL_NO_INLINE f128_s ldexp(const f128_s& x, int e); - // exp / log BL_NO_INLINE f128_s exp(const f128_s& x); BL_NO_INLINE f128_s exp2(const f128_s& x); @@ -58,22 +52,23 @@ namespace detail::_f128_runtime BL_NO_INLINE f128_s log1p(const f128_s& x); // pow - BL_NO_INLINE f128_s pow10_128(int k); BL_NO_INLINE f128_s pow(const f128_s& x, const f128_s& y); BL_NO_INLINE f128_s pow(const f128_s& x, double y); + BL_NO_INLINE f128_s ipow_signed(const f128_s& x, std::intmax_t y); + BL_NO_INLINE f128_s ipow_unsigned(const f128_s& x, std::uintmax_t y); // trig BL_NO_INLINE bool sincos(const f128_s& x, f128_s& s_out, f128_s& c_out); - BL_NO_INLINE f128_s sin(const f128_s& x); - BL_NO_INLINE f128_s cos(const f128_s& x); + BL_NO_INLINE f128_s BL_VECTORCALL sin(const f128_s& x); + BL_NO_INLINE f128_s BL_VECTORCALL cos(const f128_s& x); BL_NO_INLINE f128_s tan(const f128_s& x); - BL_NO_INLINE f128_s atan(const f128_s& x); - BL_NO_INLINE f128_s atan2(const f128_s& y, const f128_s& x); - BL_NO_INLINE f128_s asin(const f128_s& x); - BL_NO_INLINE f128_s acos(const f128_s& x); + BL_NO_INLINE f128_s BL_VECTORCALL atan(const f128_s& x); + BL_NO_INLINE f128_s BL_VECTORCALL atan2(const f128_s& y, const f128_s& x); + BL_NO_INLINE f128_s BL_VECTORCALL asin(const f128_s& x); + BL_NO_INLINE f128_s BL_VECTORCALL acos(const f128_s& x); // hyperbolic - BL_NO_INLINE f128_s sinh(const f128_s& x); + BL_NO_INLINE f128_s BL_VECTORCALL sinh(const f128_s& x); BL_NO_INLINE f128_s cosh(const f128_s& x); BL_NO_INLINE f128_s tanh(const f128_s& x); BL_NO_INLINE f128_s asinh(const f128_s& x); @@ -83,10 +78,10 @@ namespace detail::_f128_runtime // erf/gamma and polynomials BL_NO_INLINE f128_s erf(const f128_s& x); BL_NO_INLINE f128_s erfc(const f128_s& x); - BL_NO_INLINE f128_s lgamma(const f128_s& x); - BL_NO_INLINE f128_s tgamma(const f128_s& x); - BL_NO_INLINE f128_s horner_forward(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept; - BL_NO_INLINE f128_s horner_reverse(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept; + BL_NO_INLINE f128_s BL_VECTORCALL lgamma(const f128_s& x); + BL_NO_INLINE f128_s BL_VECTORCALL tgamma(const f128_s& x); + BL_NO_INLINE f128_s BL_VECTORCALL horner_forward(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept; + BL_NO_INLINE f128_s BL_VECTORCALL horner_reverse(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept; BL_NO_INLINE void horner_pair_forward(const f128_s* left_coeffs, const f128_s* right_coeffs, std::size_t count, const f128_s& x, f128_s& left_out, f128_s& right_out) noexcept; } // namespace detail::_f128_runtime @@ -106,16 +101,13 @@ namespace detail::_f128_impl BL_FORCE_INLINE constexpr f128_s floor(const f128_s& a); BL_FORCE_INLINE constexpr f128_s ceil(const f128_s& a); BL_FORCE_INLINE constexpr f128_s trunc(const f128_s& a); - BL_FORCE_INLINE constexpr f128_s round(const f128_s& a); - BL_FORCE_INLINE f128_s round_runtime(const f128_s& a) noexcept; - BL_FORCE_INLINE constexpr f128_s round_to_decimals(f128_s v, int prec); - BL_FORCE_INLINE constexpr f128_s nearbyint(const f128_s& a); - BL_FORCE_INLINE f128_s nearbyint_runtime(const f128_s& a) noexcept; - BL_FORCE_INLINE constexpr f128_s rint(const f128_s& x); - BL_FORCE_INLINE constexpr long lround(const f128_s& x); - BL_FORCE_INLINE constexpr long long llround(const f128_s& x); - BL_FORCE_INLINE constexpr long lrint(const f128_s& x); - BL_FORCE_INLINE constexpr long long llrint(const f128_s& x); + BL_FORCE_INLINE constexpr f128_s round_nearest_away_from_zero(const f128_s& a); + BL_FORCE_INLINE f128_s round_nearest_away_from_zero_runtime(const f128_s& a) noexcept; + BL_FORCE_INLINE constexpr f128_s round_decimals(f128_s v, int prec); + BL_FORCE_INLINE constexpr f128_s round_significant(f128_s v, int figures); + BL_FORCE_INLINE constexpr f128_s round_nearest_even(const f128_s& a); + BL_FORCE_INLINE constexpr long lround_nearest_away_from_zero(const f128_s& x); + BL_FORCE_INLINE constexpr long long llround_nearest_away_from_zero(const f128_s& x); // arithmetic and comparisons BL_FORCE_INLINE constexpr f128_s fma(const f128_s& x, const f128_s& y, const f128_s& z); @@ -126,7 +118,6 @@ namespace detail::_f128_impl // remainders BL_FORCE_INLINE constexpr f128_s fmod(const f128_s& x, const f128_s& y); - BL_FORCE_INLINE constexpr f128_s remainder(const f128_s& x, const f128_s& y); BL_FORCE_INLINE constexpr f128_s remquo(const f128_s& x, const f128_s& y, int* quo); // fractional decomposition @@ -137,13 +128,9 @@ namespace detail::_f128_impl BL_FORCE_INLINE constexpr f128_s frexp(const f128_s& x, int* exp) noexcept; BL_FORCE_INLINE constexpr int ilogb(const f128_s& x) noexcept; BL_FORCE_INLINE constexpr f128_s logb(const f128_s& x) noexcept; - BL_FORCE_INLINE constexpr f128_s scalbn(const f128_s& x, int e) noexcept; - BL_FORCE_INLINE constexpr f128_s scalbln(const f128_s& x, long e) noexcept; // adjacent values BL_FORCE_INLINE constexpr f128_s nextafter(const f128_s& from, const f128_s& to) noexcept; - BL_FORCE_INLINE constexpr f128_s nexttoward(const f128_s& from, long double to) noexcept; - BL_FORCE_INLINE constexpr f128_s nexttoward(const f128_s& from, const f128_s& to) noexcept; // exp / log BL_FORCE_INLINE constexpr double log_as_double(f128_s a); diff --git a/include/fltx/detail/f128_math_basic.h b/include/fltx/detail/f128_math_basic.h index b9497f8..e4df37d 100644 --- a/include/fltx/detail/f128_math_basic.h +++ b/include/fltx/detail/f128_math_basic.h @@ -12,6 +12,7 @@ #ifndef F128_DETAIL_MATH_BASIC_INCLUDED #define F128_DETAIL_MATH_BASIC_INCLUDED #include "fltx/detail/f128_math_kernels.h" +#include "fltx/detail/pow_tables.h" #include "fltx/detail/simd.h" namespace bl { @@ -29,66 +30,289 @@ namespace detail::_f128 namespace detail::_f128 { - [[nodiscard]] BL_FORCE_INLINE constexpr f128_s nearbyint_generic(const f128_s& a) + inline constexpr int pow10_f128_min_exponent = detail::pow_tables::pow10_min_exponent; + inline constexpr int pow10_f128_max_exponent = detail::pow_tables::pow10_max_exponent; + + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s pow_table_entry_to_f128(const detail::pow_table_entry& row) noexcept { - if (detail::fp::iszero_or_inf_or_nan(a.hi)) - return a; + return f128_s{ row.x0, row.x1 }; + } - if (detail::_f128::absd(a.hi) < 0x1p52) - { - const auto base = static_cast(a.hi); - const double base_d = static_cast(base); - const double frac_hi = a.hi - base_d; - const double frac_lo = a.lo; - const double abs_frac_hi = detail::_f128::absd(frac_hi); - const double abs_frac_lo = detail::_f128::absd(frac_lo); + struct fma_products + { + double p0, q0; + double p1, q1; + double p2, q2; + }; - long long rounded = base; - if (abs_frac_hi > 0.5 + abs_frac_lo) - { - rounded += (frac_hi < 0.0 || (frac_hi == 0.0 && detail::_f128::signbit(frac_lo))) ? -1 : 1; - } - else if (abs_frac_hi >= 0.5 - abs_frac_lo) + BL_PUSH_PRECISE; + [[nodiscard]] BL_NO_INLINE constexpr f128_s fma_cancellation_exact( + const f128_s& x, + const f128_s& y, + const f128_s& z) noexcept + { + double expansion[10]{}; + int count = 0; + + const double x_limb[2]{ x.hi, x.lo }; + const double y_limb[2]{ y.hi, y.lo }; + for (double xi : x_limb) + { + for (double yi : y_limb) { - const f128_s frac = sub_double_inline(a, base_d); - const f128_s abs_frac = detail::_f128::mag(frac); - if (abs_frac > f128_s{ 0.5 } || (abs_frac == f128_s{ 0.5 } && (base & 1ll) != 0)) - rounded += signbit(frac) ? -1 : 1; + double product{}, error{}; + detail::fp::two_prod_precise(xi, yi, product, error); + count = detail::fp::grow_expansion_zeroelim(count, expansion, error); + count = detail::fp::grow_expansion_zeroelim(count, expansion, product); } + } - f128_s out{ static_cast(rounded), 0.0 }; - if (iszero(out)) - return f128_s{ signbit(a) ? -0.0 : 0.0, 0.0 }; - return out; + count = detail::fp::grow_expansion_zeroelim(count, expansion, z.lo); + count = detail::fp::grow_expansion_zeroelim(count, expansion, z.hi); + + double tail = 0.0; + for (int i = 0; i + 1 < count; ++i) + tail += expansion[i]; + return renorm(expansion[count - 1], tail); + } + BL_POP_PRECISE; + + [[nodiscard]] BL_FORCE_INLINE fma_products fma_products_hardware( + const f128_s& x, + const f128_s& y) noexcept + { + fma_products products{}; + detail::fp::two_prod_fma(x.hi, y.hi, products.p0, products.q0); + detail::fp::two_prod_fma(x.hi, y.lo, products.p1, products.q1); + detail::fp::two_prod_fma(x.lo, y.hi, products.p2, products.q2); + return products; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr fma_products fma_products_dekker( + const f128_s& x, + const f128_s& y) noexcept + { + fma_products products{}; + detail::fp::two_prod_precise_dekker(x.hi, y.hi, products.p0, products.q0); + detail::fp::two_prod_precise_dekker(x.hi, y.lo, products.p1, products.q1); + detail::fp::two_prod_precise_dekker(x.lo, y.hi, products.p2, products.q2); + return products; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr fma_products fma_products_auto( + const f128_s& x, + const f128_s& y) noexcept + { + fma_products products{}; + detail::fp::two_prod_precise(x.hi, y.hi, products.p0, products.q0); + detail::fp::two_prod_precise(x.hi, y.lo, products.p1, products.q1); + detail::fp::two_prod_precise(x.lo, y.hi, products.p2, products.q2); + return products; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s fma_finite_from_products( + const f128_s& x, + const f128_s& y, + const f128_s& z, + fma_products products) noexcept + { + const double p0 = products.p0; + const double q0 = products.q0; + const double p1 = products.p1; + const double q1 = products.q1; + const double p2 = products.p2; + const double q2 = products.q2; + + double p12{}, e12{}; + double p012{}, e012{}; + two_sum_precise(p1, p2, p12, e12); + two_sum_precise(q0, p12, p012, e012); + + double hi{}, hi_err{}; + double mid{}, mid_err{}; + double lo{}, lo_err{}; + two_sum_precise(p0, z.hi, hi, hi_err); + two_sum_precise(p012, z.lo, mid, mid_err); + two_sum_precise(hi_err, mid, lo, lo_err); + + const double tail = lo_err + mid_err + e12 + e012 + q1 + q2 + (x.lo * y.lo); + const f128_s rough = renorm(hi, lo + tail); + + return rough; + } + + [[nodiscard]] BL_FORCE_INLINE f128_s fma_finite_hardware( + const f128_s& x, + const f128_s& y, + const f128_s& z) noexcept + { + return fma_finite_from_products(x, y, z, fma_products_hardware(x, y)); + } + + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s fma_finite_dekker( + const f128_s& x, + const f128_s& y, + const f128_s& z) noexcept + { + return fma_finite_from_products(x, y, z, fma_products_dekker(x, y)); + } + + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s fma_finite_auto( + const f128_s& x, + const f128_s& y, + const f128_s& z) noexcept + { + return fma_finite_from_products(x, y, z, fma_products_auto(x, y)); + } + + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s fma_finite_dispatch( + const f128_s& x, + const f128_s& y, + const f128_s& z, + double leading_product) noexcept + { + if (leading_product != 0.0 + && detail::fp::absd(leading_product + z.hi) + <= detail::fp::absd(leading_product) * 0x1p-48) [[unlikely]] + { + return fma_cancellation_exact(x, y, z); + } + + #if FLTX_GUARDED_X86_FMA + if (!bl::detail::is_constant_evaluated()) + { + const bool use_hardware_fma = detail::fp::runtime_hardware_fma_enabled(); + return use_hardware_fma + ? fma_finite_hardware(x, y, z) + : fma_finite_dekker(x, y, z); } + return fma_finite_dekker(x, y, z); + #else + return fma_finite_auto(x, y, z); + #endif + } + + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s fma_overflow_scaled( + const f128_s& x, + const f128_s& y, + const f128_s& z) noexcept + { + // An overflowing leading product can still cancel with a finite z. + // Split the common 2^-1024 scale across x and y so all product terms + // remain normal, then apply the same total scale to z. + constexpr int half_scale = 512; + const f128_s scaled_x = _ldexp(x, -half_scale); + const f128_s scaled_y = _ldexp(y, -half_scale); + const f128_s scaled_z = _ldexp(z, -2 * half_scale); + const double scaled_leading_product = scaled_x.hi * scaled_y.hi; + const f128_s scaled_result = + fma_finite_dispatch(scaled_x, scaled_y, scaled_z, scaled_leading_product); + const f128_s result = _ldexp(scaled_result, 2 * half_scale); + + if (detail::fp::isinf(result.hi)) [[unlikely]] + return f128_s{ result.hi, 0.0 }; + + return result; + } + + [[nodiscard]] BL_NO_INLINE constexpr f128_s round_nearest_even_large(const f128_s& a) + { f128_s t = detail::_f128_impl::floor(a); - f128_s frac = sub_inline(a, t); + f128_s frac = sub_finite_inline(a, t); if (frac < f128_s{ 0.5 }) return t; if (frac > f128_s{ 0.5 }) { - t = add_inline(t, f128_s{ 1.0 }); + t = add_double_finite_inline(t, 1.0); if (iszero(t)) - return f128_s{ signbit(a.hi) ? -0.0 : 0.0 }; + return signed_zero(signbit(a.hi)); return t; } if (detail::_f128_impl::fmod(t, f128_s{ 2.0 }) != f128_s{ 0.0 }) - t = add_inline(t, f128_s{ 1.0 }); + t = add_double_finite_inline(t, 1.0); if (iszero(t)) - return f128_s{ signbit(a.hi) ? -0.0 : 0.0 }; + return signed_zero(signbit(a.hi)); return t; } + + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s round_nearest_even(const f128_s& a) + { + if (detail::fp::iszero_or_inf_or_nan(a.hi)) + return a; + + if (detail::_f128::absd(a.hi) < 0x1p52) + { + auto base = static_cast(a.hi); + if (static_cast(base) == a.hi) + { + if (a.hi < 0.0 && a.lo > 0.0) + ++base; + else if (a.hi > 0.0 && a.lo < 0.0) + --base; + } + + const double base_d = static_cast(base); + const double frac_hi = a.hi - base_d; + const double abs_frac_lo = detail::_f128::absd(a.lo); + long long rounded = base; + // Canonical double-double ties can be resolved from the low word + // directly. Keep the exact expansion fallback for noncanonical input. + if (frac_hi == 0.5 && abs_frac_lo <= 0.5) + { + if (a.lo > 0.0 || (a.lo == 0.0 && (base & 1ll) != 0)) + ++rounded; + } + else if (frac_hi == -0.5 && abs_frac_lo <= 0.5) + { + if (a.lo < 0.0 || (a.lo == 0.0 && (base & 1ll) != 0)) + --rounded; + } + else + { + const double abs_frac_hi = detail::_f128::absd(frac_hi); + if (abs_frac_hi > 0.5 + abs_frac_lo) + { + rounded += (frac_hi < 0.0 || + (frac_hi == 0.0 && detail::_f128::signbit(a.lo))) ? -1 : 1; + } + else if (abs_frac_hi >= 0.5 - abs_frac_lo) + { + const f128_s frac = sub_double_finite_inline(a, base_d); + const f128_s abs_frac = detail::_f128::mag(frac); + if (abs_frac > f128_s{ 0.5 } || + (abs_frac == f128_s{ 0.5 } && (base & 1ll) != 0)) + { + rounded += signbit(frac) ? -1 : 1; + } + } + } + + f128_s out{ static_cast(rounded), 0.0 }; + if (iszero(out)) + return signed_zero(signbit(a)); + return out; + } + + return round_nearest_even_large(a); + } } namespace detail::_f128_impl { - [[nodiscard]] BL_FORCE_INLINE f128_s round_runtime(const f128_s& a) noexcept + [[nodiscard]] inline BL_NO_INLINE f128_s round_nearest_away_from_zero_integral_head( + const f128_s& a) noexcept + { + return detail::_f128::round_nearest_away_from_zero(a); + } + + [[nodiscard]] BL_FORCE_INLINE f128_s round_nearest_away_from_zero_runtime( + const f128_s& a) noexcept { #if defined(__EMSCRIPTEN__) if (detail::fp::isinf_or_nan(a.hi)) [[unlikely]] @@ -100,27 +324,24 @@ namespace detail::_f128_impl if (detail::fp::signbit(a.hi)) rounded = -rounded; + if (rounded == a.hi && a.lo != 0.0) + return round_nearest_away_from_zero_integral_head(a); + const double delta = rounded - a.hi; if ((delta == 0.5 && a.lo < 0.0) || (delta == -0.5 && a.lo > 0.0)) rounded += (rounded < 0.0) ? 1.0 : -1.0; if (rounded == 0.0) - return f128_s{ bl::signbit(a) ? -0.0 : 0.0, 0.0 }; + return detail::_f128::signed_zero(bl::signbit(a)); return f128_s{ rounded, 0.0 }; } #endif - double rounded = std::round(a.hi); + double rounded = detail::fp::round_nearest_away_from_zero(a.hi); if (rounded == a.hi) { - const double rounded_lo = std::round(a.lo); - if (rounded_lo != 0.0) - { - double hi{}; - double lo{}; - detail::fp::quick_two_sum_precise(rounded, rounded_lo, hi, lo); - return f128_s{ hi, lo }; - } + if (a.lo != 0.0) + return round_nearest_away_from_zero_integral_head(a); return f128_s{ rounded, 0.0 }; } @@ -129,49 +350,10 @@ namespace detail::_f128_impl rounded += (rounded < 0.0) ? 1.0 : -1.0; if (rounded == 0.0) - return f128_s{ bl::signbit(a) ? -0.0 : 0.0, 0.0 }; + return detail::_f128::signed_zero(bl::signbit(a)); return f128_s{ rounded, 0.0 }; } - [[nodiscard]] BL_FORCE_INLINE f128_s nearbyint_runtime(const f128_s& a) noexcept - { - if (detail::_f128::absd(a.hi) < detail::fp::double_integer_threshold) - { - #if BL_FLTX_HAS_SSE2 - double rounded = static_cast(_mm_cvtsd_si64(_mm_set_sd(a.hi))); - #elif defined(__EMSCRIPTEN__) - double rounded = std::nearbyint(a.hi); - #else - double rounded = std::round(a.hi); - #endif - - const double delta = rounded - a.hi; - - #if !BL_FLTX_HAS_SSE2 && !defined(__EMSCRIPTEN__) - if (delta == 0.5) - { - if (a.lo == 0.0 && detail::fp::double_integer_is_odd(rounded)) - rounded -= 1.0; - } - else if (delta == -0.5) - { - if (a.lo == 0.0 && detail::fp::double_integer_is_odd(rounded)) - rounded += 1.0; - } - #endif - - if (delta == 0.5 && a.lo < 0.0) - rounded -= 1.0; - else if (delta == -0.5 && a.lo > 0.0) - rounded += 1.0; - - if (rounded == 0.0) - return f128_s{ bl::signbit(a) ? -0.0 : 0.0, 0.0 }; - return f128_s{ rounded, 0.0 }; - } - - return detail::_f128_runtime::nearbyint_slow(a); - } } // roots @@ -185,13 +367,13 @@ namespace detail::_f128_impl if (detail::fp::isposinf(a.hi)) return a; - return f128_s{ std::numeric_limits::quiet_NaN() }; + return detail::_f128::quiet_nan(); } constexpr double fast_min = 0x1p-900; constexpr double fast_max = 0x1p900; - if (bl::use_constexpr_math() || a.hi < fast_min || a.hi > fast_max) + if (bl::detail::is_constant_evaluated() || a.hi < fast_min || a.hi > fast_max) { const int exp2 = detail::fp::frexp_exponent_limb(a.hi); const int result_scale = exp2 / 2; @@ -199,7 +381,7 @@ namespace detail::_f128_impl const f128_s scaled_a = input_scale == 0 ? a : ldexp_terms(a, input_scale); double seed{}; - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) seed = detail::_f128::sqrt_constexpr_head(scaled_a.hi); else seed = std::sqrt(scaled_a.hi); @@ -209,10 +391,10 @@ namespace detail::_f128_impl if (result_scale != 0) y = ldexp_terms(y, result_scale); - return F128_CANONICALIZE_MATH_RESULT(y); + return y; } - return F128_CANONICALIZE_MATH_RESULT(detail::_f128::sqrt_compensated(a, std::sqrt(a.hi))); + return detail::_f128::sqrt_compensated(a, std::sqrt(a.hi)); } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::hypot(const f128_s& x, const f128_s& y) @@ -238,19 +420,28 @@ namespace detail::_f128_impl if (iszero(ax)) return f128_s{ 0.0 }; if (iszero(ay)) - return F128_CANONICALIZE_MATH_RESULT(ax); + return ax; if (ay.hi <= ax.hi * 0x1p-55) - return F128_CANONICALIZE_MATH_RESULT(ax); - - if (ax.hi > 0x1p-500 && ax.hi < 0x1p500) + return ax; + + // Squaring below 2^-484 cannot retain all 106 result bits before the + // double component floor at 2^-1074. Use the ratio form there so the + // smaller square is formed near unity instead of losing low components. +#if BL_FP_BARRIER_ACTIVE + // Leave headroom for the square's low cross terms when FTZ is enabled. + constexpr double direct_square_min = 0x1p-480; +#else + constexpr double direct_square_min = 0x1p-484; +#endif + if (ax.hi >= direct_square_min && ax.hi < 0x1p500) { - const f128_s sum = add_inline(sqr_dd_inline(ax), sqr_dd_inline(ay)); - return F128_CANONICALIZE_MATH_RESULT(hypot_sqrt_sum(sum)); + const f128_s sum = add_finite_inline(sqr_inline(ax), sqr_inline(ay)); + return hypot_sqrt_sum(sum); } - const f128_s r = div_inline(ay, ax); - return F128_CANONICALIZE_MATH_RESULT(mul_inline(ax, detail::_f128_impl::sqrt(add_inline(f128_s{ 1.0 }, mul_inline(r, r))))); + const f128_s r = div_prechecked_inline(ay, ax); + return mul_product_inline(ax, detail::_f128_impl::sqrt(add_double_finite_inline(mul_product_inline(r, r), 1.0))); } // rounding and decimals @@ -323,159 +514,109 @@ namespace detail::_f128_impl } if (hi == 0.0) - return f128_s{ signbit(a) ? -0.0 : 0.0, 0.0 }; + return detail::_f128::signed_zero(signbit(a)); return f128_s{ hi, 0.0 }; } return (a.hi < 0.0) ? detail::_f128_impl::ceil(a) : detail::_f128_impl::floor(a); } -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::round(const f128_s& a) +[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::round_nearest_away_from_zero( + const f128_s& a) { BL_CONSTEXPR_RUNTIME_DISPATCH( - round_half_away_zero(a), - detail::_f128_impl::round_runtime(a) + detail::_f128::round_nearest_away_from_zero(a), + detail::_f128_impl::round_nearest_away_from_zero_runtime(a) ); } -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::round_to_decimals(f128_s v, int prec) +[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::round_decimals(f128_s v, int prec) { - constexpr int local_capacity = std::numeric_limits::max_digits10; + // Expansion-aware decimal operations intentionally retain their original + // ceiling instead of inheriting presentation-oriented numeric metadata. + constexpr int local_capacity = 33; if (prec <= 0) return v; if (prec > local_capacity) prec = local_capacity; - - constexpr f128_s INV10_DD - { - 0.1000000000000000055511151231257827021181583404541015625, - -0.0000000000000000055511151231257827021181583404541015625 - }; - - char digits[local_capacity]; - - const bool neg = v < 0.0; - if (neg) v = -v; - - f128_s ip = detail::_f128_impl::floor(v); - f128_s frac = sub_inline(v, ip); - - f128_s w = frac; - for (int i = 0; i < prec; ++i) + if (detail::fp::iszero_or_inf_or_nan(v.hi)) return v; + + detail::exact_decimal::biguint coefficient; + bool neg = false; + if (!detail::exact_decimal::exact_decimal_places_integer( + v, + prec, + coefficient, + neg)) { - w = mul_inline(w, f128_s{ 10.0 }); - - int di = static_cast(detail::_f128_impl::floor(w).hi); - if (di < 0) di = 0; - else if (di > 9) di = 9; - - digits[i] = static_cast('0' + di); - w = sub_inline(w, f128_s{ static_cast(di) }); + return v; } - f128_s la = mul_inline(w, f128_s{ 10.0 }); - - const f128_s tie_slop = mul_inline(f128_s::eps(), f128_s{ 65536.0 }); - int next = static_cast(detail::_f128_impl::floor(la).hi); - if (next < 0) next = 0; - - f128_s rem = sub_inline(la, f128_s{ static_cast(next) }); - if (next < 10 && rem >= sub_inline(f128_s{ 1.0 }, tie_slop)) - { - ++next; - rem = sub_inline(rem, f128_s{ 1.0 }); - } - - const int last = digits[prec - 1] - '0'; - const bool beyond_half = rem > tie_slop; - const bool round_up = - (next > 5) || - (next == 5 && (beyond_half || (last & 1))); - - if (round_up) - { - int i = prec - 1; - for (; i >= 0; --i) - { - if (digits[i] == '9') - { - digits[i] = '0'; - } - else - { - ++digits[i]; - break; - } - } - - if (i < 0) - ip = add_inline(ip, f128_s{ 1.0 }); - } - - f128_s exact_out{}; - if (try_rounded_decimal_to_f128(ip, digits, prec, neg, exact_out)) - return exact_out; + const f128_s rounded = + detail::_f128::round_decimal_exact_to_f128(coefficient, -prec, neg); + if (iszero(rounded)) + return f128_s{ detail::fp::copysign(0.0, v.hi), 0.0 }; + return rounded; +} - f128_s frac_val{ 0.0, 0.0 }; - for (int i = prec - 1; i >= 0; --i) +[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::round_significant(f128_s v, int figures) +{ + if (figures <= 0 || detail::fp::iszero_or_inf_or_nan(v.hi)) + return v; + constexpr int local_capacity = 33; + if (figures > local_capacity) + figures = local_capacity; + + const bool neg = v.hi < 0.0; + const f128_s ax = neg ? -v : v; + + detail::exact_decimal::biguint coefficient; + int exp10 = 0; + if (!detail::exact_decimal::exact_significant_decimal( + ax, + figures, + coefficient, + exp10)) { - frac_val = add_inline( - frac_val, - f128_s{ static_cast(digits[i] - '0') }); - - frac_val = mul_inline(frac_val, INV10_DD); + return v; } - f128_s out = add_inline(ip, frac_val); - return neg ? -out : out; + return detail::_f128::round_decimal_exact_to_f128(coefficient, exp10 - (figures - 1), neg); } -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::nearbyint(const f128_s& a) +[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::pow10_128(int k) { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128::nearbyint_generic(a), - detail::_f128_impl::nearbyint_runtime(a) - ); + if (k < detail::_f128::pow10_f128_min_exponent) [[unlikely]] + return f128_s{ 0.0 }; + if (k > detail::_f128::pow10_f128_max_exponent) [[unlikely]] + return std::numeric_limits::infinity(); + + return detail::_f128::pow_table_entry_to_f128( + detail::pow_tables::pow10_table[k - detail::_f128::pow10_f128_min_exponent]); } -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::rint(const f128_s& x) +[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::round_nearest_even(const f128_s& a) { - return detail::_f128_impl::nearbyint(x); + return detail::_f128::round_nearest_even(a); } -[[nodiscard]] BL_FORCE_INLINE constexpr long detail::_f128_impl::lround(const f128_s& x) +[[nodiscard]] BL_FORCE_INLINE constexpr long detail::_f128_impl::lround_nearest_away_from_zero( + const f128_s& x) { long out = 0; if (detail::_f128::try_round_to_signed_integer(x, false, out)) return out; - return to_signed_integer_or_zero(round_half_away_zero(x)); + return to_signed_integer_or_zero(detail::_f128::round_nearest_away_from_zero(x)); } -[[nodiscard]] BL_FORCE_INLINE constexpr long long detail::_f128_impl::llround(const f128_s& x) +[[nodiscard]] BL_FORCE_INLINE constexpr long long detail::_f128_impl::llround_nearest_away_from_zero( + const f128_s& x) { long long out = 0; if (detail::_f128::try_round_to_signed_integer(x, false, out)) return out; - return to_signed_integer_or_zero(round_half_away_zero(x)); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr long detail::_f128_impl::lrint(const f128_s& x) -{ - long out = 0; - if (detail::_f128::try_round_to_signed_integer(x, true, out)) - return out; - - return to_signed_integer_or_zero(detail::_f128_impl::nearbyint(x)); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr long long detail::_f128_impl::llrint(const f128_s& x) -{ - long long out = 0; - if (detail::_f128::try_round_to_signed_integer(x, true, out)) - return out; - - return to_signed_integer_or_zero(detail::_f128_impl::nearbyint(x)); + return to_signed_integer_or_zero(detail::_f128::round_nearest_away_from_zero(x)); } // arithmetic and comparisons @@ -484,17 +625,22 @@ namespace detail::_f128_impl if (detail::fp::isinf_or_nan(x.hi) || detail::fp::isinf_or_nan(y.hi) || detail::fp::isinf_or_nan(z.hi)) [[unlikely]] return f128_s{ std::fma(x.hi, y.hi, z.hi), 0.0 }; - return F128_CANONICALIZE_MATH_RESULT(add_inline(mul_dd_inline(x, y), z)); + const double leading_product = x.hi * y.hi; + if (!detail::fp::isfinite(leading_product)) [[unlikely]] + return detail::_f128::fma_overflow_scaled(x, y, z); + + return detail::_f128::fma_finite_dispatch(x, y, z, leading_product); } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::fmin(const f128_s& a, const f128_s& b) { + if (detail::fp::isnan(a.hi)) [[unlikely]] + return b; + if (detail::fp::isnan(b.hi)) [[unlikely]] + return a; + if (a.hi != b.hi) - { - if (detail::fp::isnan(b.hi)) [[unlikely]] - return a; return a.hi < b.hi ? a : b; - } if (a.lo != b.lo) return a.lo < b.lo ? a : b; @@ -507,12 +653,13 @@ namespace detail::_f128_impl [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::fmax(const f128_s& a, const f128_s& b) { + if (detail::fp::isnan(a.hi)) [[unlikely]] + return b; + if (detail::fp::isnan(b.hi)) [[unlikely]] + return a; + if (a.hi != b.hi) - { - if (detail::fp::isnan(b.hi)) [[unlikely]] - return a; return a.hi > b.hi ? a : b; - } if (a.lo != b.lo) return a.lo > b.lo ? a : b; @@ -528,7 +675,7 @@ namespace detail::_f128_impl if (!detail::fp::isinf_or_nan(x.hi) && !detail::fp::isinf_or_nan(y.hi)) { const bool x_greater_y = (x.hi > y.hi) || (x.hi == y.hi && x.lo > y.lo); - return x_greater_y ? F128_CANONICALIZE_MATH_RESULT(sub_inline(x, y)) : f128_s{ 0.0 }; + return x_greater_y ? sub_finite_inline(x, y) : f128_s{ 0.0 }; } if (detail::fp::isnan(x.hi) || detail::fp::isnan(y.hi)) @@ -542,7 +689,7 @@ namespace detail::_f128_impl if (isinf(y)) return signbit(y) ? std::numeric_limits::infinity() : f128_s{ 0.0 }; - return (x > y) ? F128_CANONICALIZE_MATH_RESULT(sub_inline(x, y)) : f128_s{ 0.0 }; + return (x > y) ? sub_finite_inline(x, y) : f128_s{ 0.0 }; } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::copysign(const f128_s& x, const f128_s& y) @@ -568,16 +715,23 @@ namespace detail::_f128_impl if (fmod_fast_small_quotient_abs(ax, ay, fast)) { if (iszero(fast)) - return f128_s{ signbit(x.hi) ? -0.0 : 0.0 }; + return detail::_f128::signed_zero(signbit(x.hi)); return ispositive(x) ? fast : -fast; } - return fmod_reduced_or_exact(x, y); -} + const double q = detail::fp::trunc(ax.hi / ay.hi); + if (q >= 0x1p50 && q < 0x1p53) + { + f128_s exact{}; + if (fmod_exact_candidate_quotient_abs(ax, ay, static_cast(q), exact)) + { + if (iszero(exact)) + return detail::_f128::signed_zero(signbit(x.hi)); + return ispositive(x) ? exact : -exact; + } + } -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::remainder(const f128_s& x, const f128_s& y) -{ - return detail::_f128_impl::remquo(x, y, nullptr); + return fmod_reduced_or_exact(x, y); } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::remquo(const f128_s& x, const f128_s& y, int* quo) @@ -613,11 +767,11 @@ namespace detail::_f128_impl if (fast) { - const f128_s half = mul_double_inline(ay, 0.5); + const f128_s half = mul_double_product_inline(ay, 0.5); const int half_cmp = detail::_f128::fmod_compare_remainder_to_half(r_abs, half); if (half_cmp > 0 || (half_cmp == 0 && ((quotient_abs & 1u) != 0u))) { - r_abs = sub_inline(r_abs, ay); + r_abs = sub_finite_inline(r_abs, ay); ++quotient_abs; } @@ -626,24 +780,24 @@ namespace detail::_f128_impl f128_s r = x_negative ? -r_abs : r_abs; if (iszero(r)) - return f128_s{ x_negative ? -0.0 : 0.0, 0.0 }; + return detail::_f128::signed_zero(x_negative); - return F128_CANONICALIZE_MATH_RESULT(r); + return r; } std::uint64_t quotient_mod = 0; r_abs = fmod_exact_fixed_limb_abs_with_quotient_mod(ax, ay, quotient_mod); - const f128_s half = mul_double_inline(ay, 0.5); + const f128_s half = mul_double_product_inline(ay, 0.5); const int half_cmp = detail::_f128::fmod_compare_remainder_to_half(r_abs, half); if (half_cmp > 0) { - r_abs = sub_inline(r_abs, ay); + r_abs = sub_finite_inline(r_abs, ay); ++quotient_mod; } else if (half_cmp == 0 && ((quotient_mod & 1u) != 0u)) { - r_abs = sub_inline(r_abs, ay); + r_abs = sub_finite_inline(r_abs, ay); ++quotient_mod; } @@ -652,9 +806,9 @@ namespace detail::_f128_impl f128_s r = x_negative ? -r_abs : r_abs; if (iszero(r)) - return f128_s{ x_negative ? -0.0 : 0.0, 0.0 }; + return detail::_f128::signed_zero(x_negative); - return F128_CANONICALIZE_MATH_RESULT(r); + return r; } // fractional decomposition @@ -670,23 +824,26 @@ namespace detail::_f128_impl { if (iptr) *iptr = x; - return f128_s{ signbit(x) ? -0.0 : 0.0, 0.0 }; + return detail::_f128::signed_zero(signbit(x)); } const f128_s i = detail::_f128_impl::trunc(x); if (iptr) *iptr = i; - f128_s frac = sub_inline(x, i); + f128_s frac = sub_finite_inline(x, i); if (iszero(frac)) - frac = f128_s{ signbit(x) ? -0.0 : 0.0, 0.0 }; + frac = detail::_f128::signed_zero(signbit(x)); return frac; } // decomposition and scaling [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::ldexp(const f128_s& x, int e) { - return F128_CANONICALIZE_MATH_RESULT(_ldexp(x, e)); + if (detail::fp::iszero_or_inf_or_nan(x.hi)) [[unlikely]] + return x; + + return _ldexp(x, e); } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::frexp(const f128_s& x, int* exp) noexcept @@ -806,16 +963,6 @@ namespace detail::_f128_impl return f128_s{ static_cast(ilogb_finite_fast(x)), 0.0 }; } -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::scalbn(const f128_s& x, int e) noexcept -{ - return detail::_f128_impl::ldexp(x, e); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::scalbln(const f128_s& x, long e) noexcept -{ - return detail::_f128_impl::ldexp(x, static_cast(e)); -} - // adjacent values [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::nextafter(const f128_s& from, const f128_s& to) noexcept { @@ -832,26 +979,53 @@ namespace detail::_f128_impl ? -std::numeric_limits::max() : std::numeric_limits::max(); - const double toward = (from < to) - ? std::numeric_limits::infinity() - : -std::numeric_limits::infinity(); + const bool upward = from < to; + const bool toward_smaller_magnitude = upward == signbit(from); + const double step = detail::fp::nominal_ulp_step( + from.hi, + from.lo, + toward_smaller_magnitude, + std::numeric_limits::digits); + +#if BL_FP_BARRIER_ACTIVE + // Apply a subnormal nominal step through its encoding so FTZ cannot erase it. + constexpr std::uint64_t exponent_mask = 0x7ff0000000000000ull; + const std::uint64_t step_magnitude = + std::bit_cast(step) & 0x7fffffffffffffffull; + if (step_magnitude != 0 && (step_magnitude & exponent_mask) == 0) + { + constexpr std::uint64_t sign_mask = 0x8000000000000000ull; + constexpr std::uint64_t magnitude_mask = 0x7fffffffffffffffull; + const std::uint64_t lo_bits = std::bit_cast(from.lo); + bool lo_negative = (lo_bits & sign_mask) != 0; + std::uint64_t lo_magnitude = lo_bits & magnitude_mask; + + if (upward != lo_negative) + { + lo_magnitude += step_magnitude; + } + else if (lo_magnitude >= step_magnitude) + { + lo_magnitude -= step_magnitude; + } + else + { + lo_magnitude = step_magnitude - lo_magnitude; + lo_negative = !upward; + } + + const double next_lo = std::bit_cast( + lo_magnitude | (lo_magnitude != 0 && lo_negative ? sign_mask : 0u)); + return { from.hi, next_lo }; + } +#endif return renorm( from.hi, - detail::fp::nextafter(from.lo, toward) + upward ? from.lo + step : from.lo - step ); } -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::nexttoward(const f128_s& from, long double to) noexcept -{ - return detail::_f128_impl::nextafter(from, f128_s{ static_cast(to) }); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::nexttoward(const f128_s& from, const f128_s& to) noexcept -{ - return detail::_f128_impl::nextafter(from, to); -} - } // namespace bl #endif diff --git a/include/fltx/detail/f128_math_kernels.h b/include/fltx/detail/f128_math_kernels.h index 0e79de6..1ddd70d 100644 --- a/include/fltx/detail/f128_math_kernels.h +++ b/include/fltx/detail/f128_math_kernels.h @@ -11,12 +11,17 @@ #ifndef F128_DETAIL_MATH_KERNELS_INCLUDED #define F128_DETAIL_MATH_KERNELS_INCLUDED +#include "fltx/detail/common_decimal.h" #include "fltx/detail/f128_declarations.h" namespace bl { namespace detail::_f128 // primitives and kernels { + // Algorithmic convergence tolerance. This intentionally remains the + // former 2^-106 value and is independent of the public nominal epsilon. + inline constexpr f128_s convergence_epsilon{ 0x1p-106, 0.0 }; + using detail::fp::signbit; using detail::fp::fabs; using detail::fp::floor; @@ -24,12 +29,21 @@ namespace detail::_f128 // primitives and kernels using detail::fp::double_integer_is_odd; using detail::fp::fmod; using detail::fp::sqrt_seed; - using detail::fp::nearbyint_ties_even; + using detail::fp::round_nearest_even_value; using detail::fp::two_diff_precise; using detail::fp::abs_double_is_power_of_two; using detail::fp::frexp_exponent_limb; using detail::fp::ldexp_limb; + [[nodiscard]] BL_FORCE_INLINE constexpr bool is_subnormal_limb(double value) noexcept + { + constexpr std::uint64_t magnitude_mask = 0x7fffffffffffffffull; + constexpr std::uint64_t exponent_mask = 0x7ff0000000000000ull; + const std::uint64_t magnitude = + std::bit_cast(value) & magnitude_mask; + return magnitude != 0 && (magnitude & exponent_mask) == 0; + } + BL_FORCE_INLINE constexpr int ilogb_finite_fast(const f128_s& x) noexcept { const double hi = x.hi != 0.0 ? x.hi : x.lo; @@ -48,7 +62,7 @@ namespace detail::_f128 // primitives and kernels // scaling helpers BL_FORCE_INLINE constexpr bool ldexp_normal_limb(double value, int exponent, double& out) noexcept { - if (value == 0.0 || exponent == 0) + if (exponent == 0) { out = value; return true; @@ -59,6 +73,12 @@ namespace detail::_f128 // primitives and kernels constexpr std::uint64_t sign_mask = 0x8000000000000000ull; const std::uint64_t bits = std::bit_cast(value); + if ((bits & ~sign_mask) == 0u) + { + out = value; + return true; + } + const std::uint32_t exponent_bits = static_cast((bits & exponent_mask) >> 52); if (exponent_bits == 0u || exponent_bits == 0x7ffu) @@ -96,9 +116,17 @@ namespace detail::_f128 // primitives and kernels BL_FORCE_INLINE constexpr f128_s ldexp_terms(const f128_s& value, int exponent) noexcept { +#if BL_FP_BARRIER_ACTIVE + double hi = detail::fp::ldexp(value.hi, exponent); BL_FP_BARRIER(hi); + double lo = detail::fp::ldexp(value.lo, exponent); BL_FP_BARRIER(lo); + if (is_subnormal_limb(lo)) + return { hi, lo }; + return renorm(hi, lo); +#else return renorm( ldexp_limb(value.hi, exponent), ldexp_limb(value.lo, exponent)); +#endif } BL_FORCE_INLINE constexpr f128_s _ldexp(const f128_s& x, int e) @@ -107,7 +135,7 @@ namespace detail::_f128 // primitives and kernels if (ldexp_fast_normal(x, e, fast)) return fast; - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { return renorm( detail::fp::ldexp(x.hi, e), @@ -115,10 +143,18 @@ namespace detail::_f128 // primitives and kernels ); } +#if BL_FP_BARRIER_ACTIVE + double hi = detail::fp::ldexp(x.hi, e); BL_FP_BARRIER(hi); + double lo = detail::fp::ldexp(x.lo, e); BL_FP_BARRIER(lo); + if (is_subnormal_limb(lo)) + return { hi, lo }; + return renorm(hi, lo); +#else return renorm( std::ldexp(x.hi, e), std::ldexp(x.lo, e) ); +#endif } struct fmod_u128 @@ -126,6 +162,7 @@ namespace detail::_f128 // primitives and kernels std::uint64_t lo = 0; std::uint64_t hi = 0; }; + struct exact_dyadic_fmod { bool neg = false; @@ -133,6 +170,75 @@ namespace detail::_f128 // primitives and kernels fmod_u128 mant{}; }; + struct f128_decimal_traits + { + using value_type = f128_s; + static constexpr int limb_count = 2; + static constexpr int significand_bits = 106; + static constexpr int conversion_significand_bits = 53 * (limb_count + 1); + static constexpr int max_binary_exponent = 1023; + static constexpr int min_binary_exponent = -1074; + + static constexpr double limb(const value_type& x, int index) noexcept + { + return index == 0 ? x.hi : x.lo; + } + + static constexpr value_type zero(bool neg = false) noexcept + { + return neg ? value_type{ -0.0, 0.0 } : value_type{ 0.0, 0.0 }; + } + + static constexpr value_type infinity(bool neg = false) noexcept + { + const value_type inf = std::numeric_limits::infinity(); + return neg ? -inf : inf; + } + + static constexpr value_type pack_from_significand( + const detail::exact_decimal::biguint& q, + int e2, + bool neg) noexcept + { + const int bits = q.bit_length(); + if (bits <= 0) + return zero(neg); + + if (bits <= 53) + { + const std::uint64_t c0 = q.get_bits(0, bits); + value_type out{ c0 ? detail::fp::ldexp(static_cast(c0), e2 - (bits - 1)) : 0.0, 0.0 }; + return neg ? -out : out; + } + + if (bits <= significand_bits) + { + const int lo_width = bits - 53; + const std::uint64_t c1 = q.get_bits(0, lo_width); + const std::uint64_t c0 = q.get_bits(lo_width, 53); + + const double hi = c0 ? detail::fp::ldexp(static_cast(c0), e2 - 52) : 0.0; + const double lo = c1 ? detail::fp::ldexp(static_cast(c1), e2 - (bits - 1)) : 0.0; + value_type out = renorm(hi, lo); + return neg ? -out : out; + } + + const int lo_width = bits - significand_bits; + const std::uint64_t c2 = q.get_bits(0, lo_width); + const std::uint64_t c1 = q.get_bits(lo_width, 53); + const std::uint64_t c0 = q.get_bits(bits - 53, 53); + + const double hi = c0 ? detail::fp::ldexp(static_cast(c0), e2 - 52) : 0.0; + const double mid = c1 ? detail::fp::ldexp(static_cast(c1), e2 - 105) : 0.0; + const double lo = c2 ? detail::fp::ldexp(static_cast(c2), e2 - (bits - 1)) : 0.0; + + const f128_s tail = renorm(mid, lo); + f128_s out = renorm(hi, tail.hi); + out = renorm(out.hi, out.lo + tail.lo); + return neg ? -out : out; + } + }; + // exact integer helpers BL_FORCE_INLINE constexpr bool fmod_u128_is_zero(const fmod_u128& value) { @@ -569,13 +675,13 @@ namespace detail::_f128 // primitives and kernels { if (r < 0.0) { - r = add_inline(r, modulus); + r = add_finite_inline(r, modulus); continue; } if (r >= modulus) { - r = sub_inline(r, modulus); + r = sub_finite_inline(r, modulus); continue; } @@ -594,7 +700,7 @@ namespace detail::_f128 // primitives and kernels { if (r < 0.0) { - r = add_inline(r, modulus); + r = add_finite_inline(r, modulus); if (quotient == 0u) return false; --quotient; @@ -603,7 +709,7 @@ namespace detail::_f128 // primitives and kernels if (r >= modulus) { - r = sub_inline(r, modulus); + r = sub_finite_inline(r, modulus); ++quotient; continue; } @@ -616,7 +722,7 @@ namespace detail::_f128 // primitives and kernels BL_FORCE_INLINE constexpr int fmod_compare_remainder_to_half(const f128_s& r_abs, const f128_s& half) noexcept { - const f128_s delta = sub_inline(r_abs, half); + const f128_s delta = sub_finite_inline(r_abs, half); if (iszero(delta)) return 0; return delta < 0.0 ? -1 : 1; @@ -637,19 +743,21 @@ namespace detail::_f128 // primitives and kernels return false; quotient = static_cast(q); + if (q >= 0x1p50) + return false; if (q < 0x1p48 && abs_double_is_power_of_two(q)) { std::uint64_t cheap_quotient = quotient; - f128_s r = sub_inline(ax, mul_pwr2_inline(ay, q)); + f128_s r = sub_finite_inline(ax, mul_pwr2_inline(ay, q)); if (fmod_normalize_remainder_with_quotient(r, ay, cheap_quotient)) { - const f128_s edge_slack = mul_double_inline(ay, 0x1p-44); - const f128_s half = mul_double_inline(ay, 0.5); - const f128_s distance_to_half = mag(sub_inline(r, half)); + const f128_s edge_slack = mul_double_product_inline(ay, 0x1p-44); + const f128_s half = mul_double_product_inline(ay, 0.5); + const f128_s distance_to_half = mag(sub_finite_inline(r, half)); if (r > edge_slack && - sub_inline(ay, r) > edge_slack && + sub_finite_inline(ay, r) > edge_slack && distance_to_half > edge_slack) { out = r; @@ -665,6 +773,15 @@ namespace detail::_f128 // primitives and kernels f128_s r = fmod_sub_mul_scalar_compact(ax, ay, q); if (fmod_normalize_remainder_with_quotient(r, ay, compact_quotient)) { + const f128_s edge_slack = mul_double_product_inline(ay, 0x1p-80); + const f128_s half = mul_double_product_inline(ay, 0.5); + if (r <= edge_slack || + sub_finite_inline(ay, r) <= edge_slack || + mag(sub_finite_inline(r, half)) <= edge_slack) + { + return false; + } + out = r; quotient = compact_quotient; return true; @@ -675,14 +792,14 @@ namespace detail::_f128 // primitives and kernels if (!fmod_normalize_remainder_with_quotient(r, ay, quotient)) return false; - const f128_s edge_slack = mul_double_inline(ay, 0x1p-80); - if (r <= edge_slack || sub_inline(ay, r) <= edge_slack) + const f128_s edge_slack = mul_double_product_inline(ay, 0x1p-80); + if (r <= edge_slack || sub_finite_inline(ay, r) <= edge_slack) return false; if (allow_compact_residual) { - const f128_s half = mul_double_inline(ay, 0.5); - if (mag(sub_inline(r, half)) <= edge_slack) + const f128_s half = mul_double_product_inline(ay, 0.5); + if (mag(sub_finite_inline(r, half)) <= edge_slack) return false; } @@ -744,51 +861,149 @@ namespace detail::_f128 // primitives and kernels return neg ? -out : out; } - BL_FORCE_INLINE constexpr f128_s fmod_exact_fixed_limb(const f128_s& x, const f128_s& y) + BL_MSVC_NOINLINE constexpr f128_s exact_dyadic_to_f128_fmod_big( + detail::exact_decimal::biguint q, + int exp2, + bool neg) { - const exact_dyadic_fmod dx = exact_from_f128_fmod(mag(x)); - const exact_dyadic_fmod dy = exact_from_f128_fmod(mag(y)); + return detail::exact_decimal::exact_binary_integer_to_value(q, exp2, neg); + } - fmod_u128 remainder{}; + BL_MSVC_NOINLINE constexpr f128_s fmod_exact_biguint(const f128_s& x, const f128_s& y) + { + detail::exact_decimal::biguint mx; + detail::exact_decimal::biguint my; + int ex = 0; + int ey = 0; + bool unused_neg = false; + + if (!detail::exact_decimal::exact_binary_components(mag(x), mx, ex, unused_neg) || + !detail::exact_decimal::exact_binary_components(mag(y), my, ey, unused_neg)) + { + return detail::_f128::signed_zero(signbit(x.hi)); + } + + detail::exact_decimal::biguint remainder; int out_exp = 0; - if (dx.exp2 < dy.exp2) + if (ex < ey) { - const int shift = dy.exp2 - dx.exp2; - if (fmod_u128_shift_exceeds_capacity(dy.mant, shift)) + const int shift = ey - ex; + if (detail::exact_decimal::compare_shifted(mx, my, shift) < 0) { - remainder = dx.mant; + remainder = mx; } else { - const fmod_u128 denominator = fmod_u128_shl_bits(dy.mant, shift); - remainder = fmod_u128_mod_shift_subtract(dx.mant, denominator); + detail::exact_decimal::biguint denominator = my; + denominator.shl_bits(shift); + detail::exact_decimal::mod_shift_subtract(mx, denominator, remainder); } - out_exp = dx.exp2; + out_exp = ex; } else { - remainder = fmod_u128_mod_shift_subtract(dx.mant, dy.mant); - const int shift = dx.exp2 - dy.exp2; - for (int i = 0; i < shift && !fmod_u128_is_zero(remainder); ++i) - remainder = fmod_u128_double_mod(remainder, dy.mant); - out_exp = dy.exp2; + const int shift = ex - ey; + mx.shl_bits(shift); + detail::exact_decimal::mod_shift_subtract(mx, my, remainder); + out_exp = ey; } - f128_s out = exact_dyadic_to_f128_fmod(remainder, out_exp, !ispositive(x)); + f128_s out = exact_dyadic_to_f128_fmod_big(remainder, out_exp, signbit(x)); if (iszero(out)) - return f128_s{ signbit(x.hi) ? -0.0 : 0.0 }; + return detail::_f128::signed_zero(signbit(x.hi)); return out; } + BL_MSVC_NOINLINE constexpr bool fmod_exact_candidate_quotient_abs( + const f128_s& ax, + const f128_s& ay, + std::uint64_t quotient, + f128_s& out) + { + if (quotient == 0) + return false; + + detail::exact_decimal::biguint mx; + detail::exact_decimal::biguint my; + int ex = 0; + int ey = 0; + bool unused_neg = false; + + if (!detail::exact_decimal::exact_binary_components(ax, mx, ex, unused_neg) || + !detail::exact_decimal::exact_binary_components(ay, my, ey, unused_neg)) + { + return false; + } + + const int common_exp = (ex < ey) ? ex : ey; + + detail::exact_decimal::biguint numerator = mx; + numerator.shl_bits(ex - common_exp); + + detail::exact_decimal::biguint product = detail::exact_decimal::mul_small_u64_big(my, quotient); + product.shl_bits(ey - common_exp); + + detail::exact_decimal::biguint modulus = my; + modulus.shl_bits(ey - common_exp); + + detail::exact_decimal::biguint remainder; + bool remainder_negative = false; + const int cmp = numerator.compare(product); + if (cmp >= 0) + { + remainder = numerator; + remainder.sub_inplace(product); + } + else + { + remainder = product; + remainder.sub_inplace(numerator); + remainder_negative = true; + } + + for (int i = 0; i < 4; ++i) + { + if (remainder_negative) + { + const int mag_cmp = remainder.compare(modulus); + if (mag_cmp <= 0) + { + detail::exact_decimal::biguint adjusted = modulus; + adjusted.sub_inplace(remainder); + remainder = adjusted; + remainder_negative = false; + } + else + { + remainder.sub_inplace(modulus); + } + continue; + } + + if (remainder.compare(modulus) >= 0) + { + remainder.sub_inplace(modulus); + continue; + } + + out = exact_dyadic_to_f128_fmod_big(remainder, common_exp, false); + if (iszero(out)) + out = f128_s{ 0.0 }; + return true; + } + + return false; + } + BL_FORCE_INLINE constexpr f128_s fmod_reduced_or_exact(const f128_s& x, const f128_s& y) { const f128_s ay = mag(y); f128_s r = mag(x); - constexpr int exact_reduction_exponent_gap = 64; + constexpr int exact_reduction_exponent_gap = 49; if (frexp_exponent_limb(r.hi) - frexp_exponent_limb(ay.hi) > exact_reduction_exponent_gap) - return fmod_exact_fixed_limb(x, y); + return fmod_exact_biguint(x, y); for (int iteration = 0; iteration < 128 && r >= ay; ++iteration) { @@ -806,22 +1021,22 @@ namespace detail::_f128 // primitives and kernels } if (!(scaled > 0.0) || scaled > r) - return fmod_exact_fixed_limb(x, y); + return fmod_exact_biguint(x, y); const double q = detail::fp::trunc(r.hi / scaled.hi); if (!(q > 0.0) || q >= 0x1p53) - return fmod_exact_fixed_limb(x, y); + return fmod_exact_biguint(x, y); r = fmod_sub_mul_scalar_expansion(r, scaled, q); if (!fmod_normalize_remainder(r, scaled)) - return fmod_exact_fixed_limb(x, y); + return fmod_exact_biguint(x, y); } if (!fmod_normalize_remainder(r, ay)) - return fmod_exact_fixed_limb(x, y); + return fmod_exact_biguint(x, y); if (iszero(r)) - return f128_s{ signbit(x.hi) ? -0.0 : 0.0 }; + return detail::_f128::signed_zero(signbit(x.hi)); return ispositive(x) ? r : -r; } @@ -889,11 +1104,18 @@ namespace detail::_f128 // primitives and kernels if (xi != x) return false; + constexpr std::int64_t int64_min = std::numeric_limits::lowest(); + if (xi == detail::_f128_impl::to_f128(int64_min)) + { + out = int64_min; + return true; + } + if (absd(xi.hi) >= 0x1p63) return false; const int64_t hi_part = static_cast(xi.hi); - const f128_s rem = sub_inline(xi, detail::_f128_impl::to_f128(hi_part)); + const f128_s rem = sub_finite_inline(xi, detail::_f128_impl::to_f128(hi_part)); out = hi_part + static_cast(rem.hi + rem.lo); return true; } @@ -910,78 +1132,30 @@ namespace detail::_f128 // primitives and kernels return double_integer_is_odd(x.hi); } - BL_FORCE_INLINE constexpr f128_s pack_decimal_significand(const detail::exact_decimal::biguint& q, int e2, bool neg) noexcept - { - const std::uint64_t c1 = q.get_bits(0, 53); - const std::uint64_t c0 = q.get_bits(53, 53); - const double hi = c0 ? detail::fp::ldexp(static_cast(c0), e2 - 52) : 0.0; - const double lo = c1 ? detail::fp::ldexp(static_cast(c1), e2 - 105) : 0.0; - - f128_s out = renorm(hi, lo); - return neg ? -out : out; - } + using f128_significant_decimal_traits = f128_decimal_traits; BL_MSVC_NOINLINE constexpr f128_s round_decimal_exact_to_f128(const detail::exact_decimal::biguint& coeff, int dec_exp, bool neg) noexcept { - if (coeff.is_zero()) - return neg ? f128_s{ -0.0, 0.0 } : f128_s{ 0.0, 0.0 }; - - detail::exact_decimal::biguint numerator = coeff; - detail::exact_decimal::biguint denominator{ 1 }; - int bin_exp = 0; - - if (dec_exp >= 0) - { - numerator = detail::exact_decimal::mul_big(coeff, detail::exact_decimal::pow5_big(dec_exp)); - bin_exp = dec_exp; - } - else - { - denominator = detail::exact_decimal::pow5_big(-dec_exp); - bin_exp = dec_exp; - } - - int ratio_exp = detail::exact_decimal::floor_log2_ratio(numerator, denominator); - detail::exact_decimal::biguint q = detail::exact_decimal::extract_rounded_significand_chunks(numerator, denominator, ratio_exp, std::numeric_limits::digits); - if (q.bit_length() > std::numeric_limits::digits) - { - q.shr1(); - ++ratio_exp; - } - - const int e2 = bin_exp + ratio_exp; - if (e2 > 1023) - return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); - if (e2 < -1074) - return neg ? f128_s{ -0.0, 0.0 } : f128_s{ 0.0, 0.0 }; - - return pack_decimal_significand(q, e2, neg); - } - - BL_FORCE_INLINE constexpr bool try_rounded_decimal_to_f128(const f128_s& integer_part, const char* digits, int digit_count, bool neg, f128_s& out) noexcept - { - int64_t integer_value = 0; - if (!try_get_int64(integer_part, integer_value) || integer_value < 0) - return false; - - const detail::exact_decimal::biguint coeff = detail::fp::append_decimal_digits( - detail::exact_decimal::biguint{ static_cast(integer_value) }, - digits, - digit_count); - - out = round_decimal_exact_to_f128(coeff, -digit_count, neg); - return true; + return detail::exact_decimal::exact_decimal_to_value(coeff, dec_exp, neg); } // rounding helpers - BL_FORCE_INLINE constexpr f128_s round_half_away_zero(const f128_s& x) noexcept + BL_FORCE_INLINE constexpr f128_s round_nearest_away_from_zero(const f128_s& x) noexcept { if (detail::fp::iszero_or_inf_or_nan(x.hi)) return x; if (absd(x.hi) < 0x1p52) { - const auto base = static_cast(x.hi); + auto base = static_cast(x.hi); + if (static_cast(base) == x.hi) + { + if (x.hi < 0.0 && x.lo > 0.0) + ++base; + else if (x.hi > 0.0 && x.lo < 0.0) + --base; + } + const double base_d = static_cast(base); const double frac_hi = x.hi - base_d; const double frac_lo = x.lo; @@ -995,26 +1169,26 @@ namespace detail::_f128 // primitives and kernels } else if (abs_frac_hi >= 0.5 - abs_frac_lo) { - const f128_s frac = sub_double_inline(x, base_d); + const f128_s frac = sub_double_finite_inline(x, base_d); if (mag(frac) >= f128_s{ 0.5 }) rounded += signbit(frac) ? -1 : 1; } f128_s out{ static_cast(rounded), 0.0 }; if (iszero(out)) - return f128_s{ signbit(x) ? -0.0 : 0.0, 0.0 }; + return detail::_f128::signed_zero(signbit(x)); return out; } if (signbit(x)) { - f128_s y = -detail::_f128_impl::floor(add_inline(-x, f128_s{ 0.5 })); + f128_s y = -detail::_f128_impl::floor(add_double_finite_inline(-x, 0.5)); if (iszero(y)) return f128_s{ -0.0, 0.0 }; return y; } - return detail::_f128_impl::floor(add_inline(x, f128_s{ 0.5 })); + return detail::_f128_impl::floor(add_double_finite_inline(x, 0.5)); } template @@ -1055,15 +1229,23 @@ namespace detail::_f128 // primitives and kernels if (x < detail::_f128_impl::to_f128(lo_i) || x > detail::_f128_impl::to_f128(hi_i)) return false; - const std::int64_t base = static_cast(x.hi); - const f128_s frac = sub_double_inline(x, static_cast(base)); + std::int64_t base = static_cast(x.hi); + if (static_cast(base) == x.hi) + { + if (x.hi < 0.0 && x.lo > 0.0) + ++base; + else if (x.hi > 0.0 && x.lo < 0.0) + --base; + } + + const f128_s frac = sub_double_finite_inline(x, static_cast(base)); const f128_s abs_frac = mag(frac); std::int64_t rounded = base; if (abs_frac > f128_s{ 0.5 } || (!ties_to_even && abs_frac == f128_s{ 0.5 }) || (ties_to_even && abs_frac == f128_s{ 0.5 } && (base & 1ll) != 0)) { - rounded += (x.hi < 0.0 || (x.hi == 0.0 && signbit(x.hi))) ? -1 : 1; + rounded += bl::signbit(frac) ? -1 : 1; } if (rounded < lo_i || rounded > hi_i) @@ -1078,24 +1260,117 @@ namespace detail::_f128 // primitives and kernels { double y = sqrt_seed(x); y = 0.5 * (y + x / y); - y = 0.5 * (y + x / y); - return 0.5 * (y + x / y); + + auto square_residual = [x](double value, double& hi, double& lo) constexpr noexcept + { + double product{}; + double product_error{}; + detail::fp::two_prod_precise(value, value, product, product_error); + + double diff{}; + double diff_error{}; + detail::fp::two_diff_precise(product, x, diff, diff_error); + detail::fp::quick_two_sum_precise(diff, product_error + diff_error, hi, lo); + }; + + double best_hi{}; + double best_lo{}; + square_residual(y, best_hi, best_lo); + if (best_hi == 0.0 && best_lo == 0.0) + return y; + + const bool negative = best_hi < 0.0 || (best_hi == 0.0 && best_lo < 0.0); + const double candidate = detail::fp::nextafter( + y, + negative ? std::numeric_limits::infinity() : 0.0); + + const double step = detail::_f128::absd(candidate - y); + const double midpoint = detail::_f128::absd(y * step); + const double residual_mag = best_hi == 0.0 ? detail::_f128::absd(best_lo) : detail::_f128::absd(best_hi); + constexpr double guard = 0x1p-48; + if (midpoint != 0.0) + { + if (residual_mag < midpoint * (1.0 - guard)) + return y; + if (residual_mag > midpoint * (1.0 + guard)) + return candidate; + } + + double candidate_hi{}; + double candidate_lo{}; + square_residual(candidate, candidate_hi, candidate_lo); + + if (best_hi < 0.0 || (best_hi == 0.0 && best_lo < 0.0)) + { + best_hi = -best_hi; + best_lo = -best_lo; + } + if (candidate_hi < 0.0 || (candidate_hi == 0.0 && candidate_lo < 0.0)) + { + candidate_hi = -candidate_hi; + candidate_lo = -candidate_lo; + } + + return (candidate_hi < best_hi || (candidate_hi == best_hi && candidate_lo < best_lo)) + ? candidate + : y; } + // clang-cl /fp:fast can collapse the compensated square back to binary64. + // Keep reassociation disabled only inside the affected sqrt helpers. [[nodiscard]] BL_FORCE_INLINE constexpr double sqrt_tail_square(double c_lo, double correction) noexcept { - #ifdef FMA_AVAILABLE - if (!bl::use_constexpr_math()) +#if defined(_MSC_VER) && defined(__clang__) && defined(FLTX_FAST_MATH) +#pragma clang fp reassociate(off) +#endif + #if FLTX_HAS_RUNTIME_FMA_PATH + if (!bl::detail::is_constant_evaluated() && detail::fp::runtime_hardware_fma_enabled()) { - return std::fma(c_lo, c_lo, correction); + return detail::fp::fmadd_fma(c_lo, c_lo, correction); } #endif - return c_lo * c_lo + correction; + double product{}; + double product_error{}; + detail::fp::two_prod_precise(c_lo, c_lo, product, product_error); + + double sum{}; + double sum_error{}; + detail::fp::two_sum_precise(product, correction, sum, sum_error); + return sum + (product_error + sum_error); } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s sqrt_compensated(const f128_s& scaled_a, double c) noexcept { +#if defined(_MSC_VER) && defined(__clang__) && defined(FLTX_FAST_MATH) +#pragma clang fp reassociate(off) +#endif +#if BL_FP_BARRIER_ACTIVE + double c_hi = product_split_high(c); BL_FP_BARRIER(c_hi); + double c_lo = c - c_hi; BL_FP_BARRIER(c_lo); + + double q = c_hi * c_lo; BL_FP_BARRIER(q); + q += q; BL_FP_BARRIER(q); + + double p = c_hi * c_hi; BL_FP_BARRIER(p); + double u = p + q; BL_FP_BARRIER(u); + + double correction = p - u; BL_FP_BARRIER(correction); + correction += q; BL_FP_BARRIER(correction); + double uu = sqrt_tail_square(c_lo, correction); BL_FP_BARRIER(uu); + + double residual = scaled_a.hi - u; BL_FP_BARRIER(residual); + residual -= uu; BL_FP_BARRIER(residual); + residual += scaled_a.lo; BL_FP_BARRIER(residual); + + double denominator = c + c; BL_FP_BARRIER(denominator); + double cc = residual / denominator; BL_FP_BARRIER(cc); + + double y_hi = c + cc; BL_FP_BARRIER(y_hi); + double y_lo = c - y_hi; BL_FP_BARRIER(y_lo); + y_lo += cc; BL_FP_BARRIER(y_lo); + return { y_hi, y_lo }; +#else const double c_hi = product_split_high(c); const double c_lo = c - c_hi; @@ -1109,6 +1384,7 @@ namespace detail::_f128 // primitives and kernels const double y_hi = c + cc; return { y_hi, (c - y_hi) + cc }; +#endif } } // namespace detail::_f128 diff --git a/include/fltx/detail/f128_math_transcendental.h b/include/fltx/detail/f128_math_transcendental.h index 09a4aff..6006d99 100644 --- a/include/fltx/detail/f128_math_transcendental.h +++ b/include/fltx/detail/f128_math_transcendental.h @@ -20,28 +20,112 @@ namespace bl { namespace detail::_f128 // primitives and kernels { + // polynomial evaluation helpers + BL_FORCE_INLINE constexpr f128_s horner_forward_inline(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept + { + if (count == 0) + return {}; + + f128_s p = coeffs[0]; + for (std::size_t i = 1; i < count; ++i) + p = mul_add_inline(p, x, coeffs[i]); + return p; + } + + BL_FORCE_INLINE constexpr f128_s horner_forward(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept + { + if (bl::detail::is_constant_evaluated()) + { + return horner_forward_inline(coeffs, count, x); + } + + return detail::_f128_runtime::horner_forward(coeffs, count, x); + } + + BL_FORCE_INLINE constexpr f128_s horner_reverse_inline(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept + { + if (count == 0) + return {}; + + f128_s p = coeffs[count - 1]; + for (std::size_t i = count - 1; i > 0; --i) + p = mul_add_inline(p, x, coeffs[i - 1]); + return p; + } + + BL_FORCE_INLINE constexpr f128_s horner_reverse(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept + { + if (bl::detail::is_constant_evaluated()) + { + return horner_reverse_inline(coeffs, count, x); + } + + return detail::_f128_runtime::horner_reverse(coeffs, count, x); + } + + BL_FORCE_INLINE constexpr void horner_pair_forward_inline( + const f128_s* left_coeffs, + const f128_s* right_coeffs, + std::size_t count, + const f128_s& x, + f128_s& left_out, + f128_s& right_out) noexcept + { + if (count == 0) + { + left_out = f128_s{}; + right_out = f128_s{}; + return; + } + + f128_s left = left_coeffs[0]; + f128_s right = right_coeffs[0]; + for (std::size_t i = 1; i < count; ++i) + mul_add_pair_same_rhs_inline(left, right, x, left_coeffs[i], right_coeffs[i], left, right); + + left_out = left; + right_out = right; + } + + BL_FORCE_INLINE constexpr void horner_pair_forward( + const f128_s* left_coeffs, + const f128_s* right_coeffs, + std::size_t count, + const f128_s& x, + f128_s& left_out, + f128_s& right_out) noexcept + { + if (bl::detail::is_constant_evaluated()) + { + horner_pair_forward_inline(left_coeffs, right_coeffs, count, x, left_out, right_out); + return; + } + + detail::_f128_runtime::horner_pair_forward(left_coeffs, right_coeffs, count, x, left_out, right_out); + } + // expm1/log1p functions BL_MSVC_NOINLINE constexpr f128_s log1p_series_reduced(const f128_s& x) { - const f128_s z = div_inline(x, add_inline(f128_s{ 2.0 }, x)); - const f128_s z2 = mul_inline(z, z); + const f128_s z = div_prechecked_inline(x, add_double_finite_inline(x, 2.0)); + const f128_s z2 = mul_product_inline(z, z); f128_s term = z; f128_s sum = z; for (int k = 3; k <= 81; k += 2) { - term = mul_inline(term, z2); - const f128_s add = div_inline(term, f128_s{ static_cast(k) }); - sum = add_inline(sum, add); + term = mul_product_inline(term, z2); + const f128_s add = div_double_prechecked_inline(term, static_cast(k)); + sum = add_finite_inline(sum, add); const f128_s asum = mag(sum); const f128_s scale = (asum > f128_s{ 1.0 }) ? asum : f128_s{ 1.0 }; - if (mag(add) <= mul_inline(f128_s::eps(), scale)) + if (mag(add) <= mul_product_inline(convergence_epsilon, scale)) break; } - return add_inline(sum, sum); + return add_finite_inline(sum, sum); } BL_MSVC_NOINLINE constexpr f128_s log_normalized_series(const f128_s& m) @@ -70,15 +154,15 @@ namespace detail::_f128 // primitives and kernels { 0x1.7d05f417d05f4p-6, 0x1.7d05f417d05f4p-62 }, // 1/43 }; - const f128_s z = div_inline(sub_double_inline(m, 1.0), add_double_inline(m, 1.0)); - const f128_s z2 = mul_inline(z, z); + const f128_s z = div_prechecked_inline(sub_double_finite_inline(m, 1.0), add_double_finite_inline(m, 1.0)); + const f128_s z2 = mul_product_inline(z, z); f128_s p = inv_odd[sizeof(inv_odd) / sizeof(inv_odd[0]) - 1]; for (int i = static_cast(sizeof(inv_odd) / sizeof(inv_odd[0])) - 2; i >= 0; --i) p = mul_add_inline(p, z2, inv_odd[i]); - p = mul_add_inline(p, z2, f128_s{ 1.0 }); - return mul_double_inline(mul_inline(z, p), 2.0); + p = mul_add_double_rhs_inline(p, z2, 1.0); + return mul_double_product_inline(mul_product_inline(z, p), 2.0); } // exponential functions @@ -86,25 +170,28 @@ namespace detail::_f128 // primitives and kernels { constexpr int coeff_count = static_cast(sizeof(exp_inv_fact) / sizeof(exp_inv_fact[0])); - f128_s p = mul_inline(r, r); - f128_s sum = add_inline(r, mul_pwr2_inline(p, 0.5)); - const double threshold = absd(r.hi) * f128_s::eps().hi; + f128_s p = mul_product_inline(r, r); + f128_s sum = add_finite_inline(r, mul_pwr2_inline(p, 0.5)); + const double threshold = absd(r.hi) * convergence_epsilon.hi; - p = mul_inline(p, r); + p = mul_product_inline(p, r); for (int i = 0; i < coeff_count; ++i) { - const f128_s term = mul_inline(p, exp_inv_fact[i]); - sum = add_inline(sum, term); + const f128_s term = mul_product_inline(p, exp_inv_fact[i]); + sum = add_finite_inline(sum, term); if (absd(term.hi) <= threshold) break; - p = mul_inline(p, r); + p = mul_product_inline(p, r); } return sum; } - BL_FORCE_INLINE constexpr f128_s exp_integer_factor(int n) noexcept + BL_FORCE_INLINE constexpr f128_s exp_integer_factor( + int n, + int& binary_scale) noexcept { + binary_scale = 0; if (n == 0) return f128_s{ 1.0 }; @@ -112,11 +199,33 @@ namespace detail::_f128 // primitives and kernels std::uint32_t exponent = static_cast(negative ? -n : n); const f128_s* table = negative ? exp_integer_inv_table : exp_integer_table; f128_s factor{ 1.0 }; +#if BL_FP_BARRIER_ACTIVE + // Keep the factor expansion normal, then restore its binary scale exactly. + constexpr int binary_scaling_threshold = -600; + if (negative && n < binary_scaling_threshold) + { + int upward_scale = static_cast(detail::fp::ceil( + static_cast(-n) * std::numbers::log2e_v)); + if (upward_scale > 1023) + upward_scale = 1023; + factor = _ldexp(factor, upward_scale); + binary_scale = -upward_scale; + } +#endif +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + const bool checked_product = detail::fp::exp_scale_needs_checked_product(n); +#endif for (std::size_t i = 0; exponent != 0 && i < (sizeof(exp_integer_table) / sizeof(exp_integer_table[0])); ++i) { if ((exponent & 1u) != 0) - factor = mul_inline(factor, table[i]); + { +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + factor = checked_product ? mul_product_range_safe_inline(factor, table[i]) : mul_product_inline(factor, table[i]); +#else + factor = mul_product_inline(factor, table[i]); +#endif + } exponent >>= 1u; } @@ -125,32 +234,68 @@ namespace detail::_f128 // primitives and kernels BL_FORCE_INLINE constexpr double exp_nearest_integer(double x) noexcept { - if (bl::use_constexpr_math()) - return nearbyint_ties_even(x); - return static_cast( x >= 0.0 ? static_cast(x + 0.5) : static_cast(x - 0.5)); } - BL_MSVC_NOINLINE constexpr f128_s exp_general_scaled(const f128_s& x, bool sub_one) noexcept + BL_FORCE_INLINE constexpr bool exp_overflows(const f128_s& x) noexcept + { + if (x.hi != exp_overflow_cutoff.hi) + return x.hi > exp_overflow_cutoff.hi; + return x > exp_overflow_cutoff; + } + + BL_FORCE_INLINE constexpr bool exp_underflows_to_zero(const f128_s& x) noexcept + { + if (x.hi != exp_zero_cutoff.hi) + return x.hi < exp_zero_cutoff.hi; + return x < exp_zero_cutoff; + } + + BL_FORCE_INLINE constexpr int exp_reduction_integer(const f128_s& x) noexcept { - const double nd = exp_nearest_integer(x.hi); - const int n = static_cast(nd); - const f128_s reduced = sub_inline(x, f128_s{ nd }); + int n = static_cast(exp_nearest_integer(x.hi)); + return n > 709 ? 709 : n; + } + + BL_MSVC_NOINLINE constexpr f128_s exp_general_scaled_with_n(const f128_s& x, bool sub_one, int n) noexcept + { + const double nd = static_cast(n); + const f128_s reduced = sub_double_finite_inline(x, nd); const f128_s r = mul_pwr2_inline(reduced, 0.0078125); f128_s e = expm1_tiny(r); - for (int i = 0; i < 7; ++i) - e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); if (n == 0) - return sub_one ? e : add_inline(e, f128_s{ 1.0 }); - - const f128_s factor = exp_integer_factor(n); + return sub_one ? e : add_double_finite_inline(e, 1.0); + + int factor_scale = 0; + const f128_s factor = exp_integer_factor(n, factor_scale); +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + const f128_s scaled = detail::fp::exp_scale_needs_checked_product(n) + ? mul_add_range_safe_inline(factor, e, factor) + : mul_add_inline(factor, e, factor); +#else const f128_s scaled = mul_add_inline(factor, e, factor); - return sub_one ? sub_inline(scaled, f128_s{ 1.0 }) : scaled; +#endif + const f128_s result = factor_scale == 0 + ? scaled + : _ldexp(scaled, factor_scale); + return sub_one ? sub_double_finite_inline(result, 1.0) : result; + } + + BL_MSVC_NOINLINE constexpr f128_s exp_general_scaled(const f128_s& x, bool sub_one) noexcept + { + return exp_general_scaled_with_n(x, sub_one, exp_reduction_integer(x)); } BL_MSVC_NOINLINE constexpr f128_s _exp(const f128_s& x) @@ -160,10 +305,10 @@ namespace detail::_f128 // primitives and kernels if (isinf(x)) return (x.hi < 0.0) ? f128_s{ 0.0 } : std::numeric_limits::infinity(); - if (x.hi > 709.782712893384) + if (exp_overflows(x)) return std::numeric_limits::infinity(); - if (x.hi < -745.133219101941) + if (exp_underflows_to_zero(x)) return f128_s{ 0.0 }; if (iszero(x)) @@ -180,21 +325,26 @@ namespace detail::_f128 // primitives and kernels return (x.hi < 0.0) ? f128_s{ 0.0 } : std::numeric_limits::infinity(); if (x.hi > 1023.0 || x.hi < -1074.0) - return _exp(mul_inline(x, std::numbers::ln2_v)); + return _exp(mul_product_inline(x, std::numbers::ln2_v)); if (iszero(x)) return f128_s{ 1.0 }; const double kd = exp_nearest_integer(x.hi); const int k = static_cast(kd); - const f128_s reduced = sub_inline(x, f128_s{ kd }); - const f128_s r = mul_pwr2_inline(mul_dd_inline(reduced, std::numbers::ln2_v), 0.0078125); + const f128_s reduced = sub_double_finite_inline(x, kd); + const f128_s r = mul_pwr2_inline(mul_product_inline(reduced, std::numbers::ln2_v), 0.0078125); f128_s e = expm1_tiny(r); - for (int i = 0; i < 7; ++i) - e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_pwr2_inline(e, 2.0)); - return _ldexp(add_inline(e, f128_s{ 1.0 }), k); + return _ldexp(add_double_finite_inline(e, 1.0), k); } // logarithm functions @@ -209,23 +359,35 @@ namespace detail::_f128 // primitives and kernels if (isinf(a)) return a; +#if BL_FP_BARRIER_ACTIVE + f128_s input = a; + BL_FP_BARRIER(input.hi); + BL_FP_BARRIER(input.lo); +#else + const f128_s& input = a; +#endif + int exp2 = 0; - if (bl::use_constexpr_math()) { - exp2 = detail::fp::frexp_exponent(a.hi); + if (bl::detail::is_constant_evaluated()) { + exp2 = detail::fp::frexp_exponent(input.hi); } else { - (void)std::frexp(a.hi, &exp2); + (void)std::frexp(input.hi, &exp2); } - f128_s m = _ldexp(a, -exp2); + f128_s m = _ldexp(input, -exp2); +#if BL_FP_BARRIER_ACTIVE + BL_FP_BARRIER(m.hi); + BL_FP_BARRIER(m.lo); +#endif if (m < sqrt_half) { - m = mul_inline(m, f128_s{ 2.0 }); + m = mul_double_product_inline(m, 2.0); --exp2; } - const f128_s exp2_ln2 = mul_inline(f128_s{ static_cast(exp2) }, std::numbers::ln2_v); - return add_inline(exp2_ln2, log_normalized_series(m)); + const f128_s exp2_ln2 = mul_double_product_inline(std::numbers::ln2_v, static_cast(exp2)); + return add_finite_inline(exp2_ln2, log_normalized_series(m)); } BL_FORCE_INLINE constexpr bool f128_try_exact_binary_log2(const f128_s& x, int& out) noexcept @@ -245,9 +407,346 @@ namespace detail::_f128 // primitives and kernels } // power functions - BL_FORCE_INLINE constexpr f128_s powi(f128_s base, int64_t exp) + [[nodiscard]] BL_FORCE_INLINE constexpr bool f128_try_pow10_ldexp_chunks( + int pow5_count, + int binary_exponent_per_input_exponent, + int exponent, + f128_s& out) noexcept + { + if (pow5_count <= 0) + return false; + if (exponent == 0) + { + out = f128_s{ 1.0 }; + return true; + } + + const int chunk_limit = exponent > 0 + ? detail::_f128::pow10_f128_max_exponent / pow5_count + : (-detail::_f128::pow10_f128_min_exponent) / pow5_count; + if (chunk_limit <= 0) + return false; + + f128_s value{ 1.0 }; + int remaining = exponent; + while (remaining != 0) + { + const int chunk = remaining > 0 + ? ((remaining > chunk_limit) ? chunk_limit : remaining) + : ((remaining < -chunk_limit) ? -chunk_limit : remaining); + + int decimal_exponent = 0; + if (!detail::fp::checked_exponent_product(pow5_count, chunk, decimal_exponent)) + return false; + if (decimal_exponent < detail::_f128::pow10_f128_min_exponent || + decimal_exponent > detail::_f128::pow10_f128_max_exponent) + { + return false; + } + + int binary_exponent = 0; + if (!detail::fp::checked_exponent_product(binary_exponent_per_input_exponent, chunk, binary_exponent)) + return false; + + const f128_s term = detail::_f128_impl::ldexp( + detail::_f128_impl::pow10_128(decimal_exponent), + binary_exponent); + value = mul_product_inline(value, term); + if (detail::fp::isinf_or_nan(value.hi)) + return false; + + remaining -= chunk; + } + + out = value; + return true; + } + + template + [[nodiscard]] BL_FORCE_INLINE constexpr bool try_special_pow_components( + bool pow10_base, + int pow2_log2, + bool negative_base, + Exp y, + f128_s& out) { - return detail::fp::powi_by_squaring(base, exp); + int exponent = 0; + if (!detail::fp::try_int_exponent(y, exponent)) + return false; + + f128_s value{}; + if (pow10_base) + { + value = detail::_f128_impl::pow10_128(exponent); + } + else + { + int binary_exponent = 0; + if (!detail::fp::checked_exponent_product(pow2_log2, exponent, binary_exponent)) + return false; + + if (binary_exponent >= std::numeric_limits::max_exponent) + value = std::numeric_limits::infinity(); + else if (binary_exponent < std::numeric_limits::min_exponent - std::numeric_limits::digits) + value = f128_s{ 0.0 }; + else + value = detail::_f128_impl::ldexp(f128_s{ 1.0 }, binary_exponent); + } + + out = (negative_base && detail::fp::is_odd_integral(y)) ? -value : value; + return true; + } + + template + [[nodiscard]] BL_FORCE_INLINE constexpr bool try_integral_pow_finite_raw(Base x, Exp y, f128_s& out) noexcept + { + using UBase = std::make_unsigned_t>; + + const UBase magnitude_base = detail::fp::unsigned_abs(x); + const bool negative_base = x < Base{ 0 }; + + if (magnitude_base == UBase{ 10 }) + return try_special_pow_components(true, 0, negative_base, y, out); + + int pow2_log2 = 0; + if (detail::fp::try_unsigned_power_of_two_log2(magnitude_base, pow2_log2)) + return try_special_pow_components(false, pow2_log2, negative_base, y, out); + + int pow5_count = 0; + if (!detail::fp::factor_power_of_two_five(magnitude_base, pow2_log2, pow5_count)) + return false; + + int exponent = 0; + if (!detail::fp::try_int_exponent(y, exponent)) + return false; + + int decimal_exponent = 0; + if (!detail::fp::checked_exponent_product(pow5_count, exponent, decimal_exponent)) + return false; + + const int binary_exponent_per_input_exponent = pow2_log2 - pow5_count; + f128_s value{}; + if (decimal_exponent >= detail::_f128::pow10_f128_min_exponent && + decimal_exponent <= detail::_f128::pow10_f128_max_exponent) + { + int binary_exponent = 0; + if (!detail::fp::checked_exponent_product(binary_exponent_per_input_exponent, exponent, binary_exponent)) + return false; + + value = detail::_f128_impl::ldexp( + detail::_f128_impl::pow10_128(decimal_exponent), + binary_exponent); + } + else if (!f128_try_pow10_ldexp_chunks( + pow5_count, + binary_exponent_per_input_exponent, + exponent, + value)) + { + return false; + } + + out = (negative_base && detail::fp::is_odd_integral(y)) ? -value : value; + return true; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s pow_mul_adaptive(const f128_s& a, const f128_s& b) noexcept + { + return detail::fp::dekker_product_needs_scaling(a.hi, b.hi) + ? mul_dekker_range_safe_canonical_inline(a, b) + : mul_canonical_inline(a, b); + } + + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s pow_sqr_adaptive(const f128_s& a) noexcept + { + return detail::fp::dekker_product_needs_scaling(a.hi, a.hi) + ? sqr_dekker_range_safe_canonical_inline(a) + : sqr_inline(a); + } + + template + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s powi_nonnegative_impl(f128_s base, ExpUnsigned exp) noexcept + { + if (exp == ExpUnsigned{ 0 }) + return f128_s{ 1.0 }; + if (exp == ExpUnsigned{ 1 }) + return base; + if (exp == ExpUnsigned{ 2 }) + return Checked ? pow_sqr_adaptive(base) : sqr_inline(base); + if (exp == ExpUnsigned{ 3 }) + { + const f128_s squared = Checked ? pow_sqr_adaptive(base) : sqr_inline(base); + return Checked ? pow_mul_adaptive(squared, base) : mul_canonical_inline(squared, base); + } + if (exp == ExpUnsigned{ 4 }) + { + const f128_s squared = Checked ? pow_sqr_adaptive(base) : sqr_inline(base); + return Checked ? pow_sqr_adaptive(squared) : sqr_inline(squared); + } + + f128_s result{ 1.0 }; + while (exp != ExpUnsigned{ 0 }) + { + if ((exp & ExpUnsigned{ 1 }) != ExpUnsigned{ 0 }) + result = Checked ? pow_mul_adaptive(result, base) : mul_canonical_inline(result, base); + + exp >>= 1; + if (exp != ExpUnsigned{ 0 }) + base = Checked ? pow_sqr_adaptive(base) : sqr_inline(base); + } + + return result; + } + + template + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s powi_nonnegative_unchecked(f128_s base, ExpUnsigned exp) noexcept + { + if (exp == ExpUnsigned{ 0 }) + return f128_s{ 1.0 }; + if (exp == ExpUnsigned{ 1 }) + return base; + if (exp == ExpUnsigned{ 2 }) + return sqr_inline(base); + if (exp == ExpUnsigned{ 3 }) + return mul_product_inline(sqr_inline(base), base); + if (exp == ExpUnsigned{ 4 }) + return sqr_inline(sqr_inline(base)); + + f128_s result{ 1.0 }; + while (exp != ExpUnsigned{ 0 }) + { + if ((exp & ExpUnsigned{ 1 }) != ExpUnsigned{ 0 }) + result = mul_product_inline(result, base); + + exp >>= 1; + if (exp != ExpUnsigned{ 0 }) + base = sqr_inline(base); + } + + return result; + } + + template + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s powi_nonnegative_fast(f128_s base, ExpUnsigned exp) noexcept + { + if (detail::fp::ipow_loop_needs_range_safe_dekker(base.hi, exp)) [[unlikely]] + return powi_nonnegative_impl(base, exp); + return powi_nonnegative_impl(base, exp); + } + + [[nodiscard]] BL_FORCE_INLINE constexpr f128_s reciprocal_pow_result(const f128_s& value) noexcept + { + if (detail::fp::iszero_or_inf_or_nan(value.hi)) [[unlikely]] + return div_special(f128_s{ 1.0 }, value); + + return div_double_prechecked_inline(1.0, value); + } + + [[nodiscard]] BL_FORCE_INLINE constexpr bool try_exact_integer_pow_base_value(const f128_s& value, std::int64_t& out) noexcept + { + if (value.lo != 0.0 || !detail::fp::isfinite(value.hi)) + return false; + + const bool negative = value.hi < 0.0; + const double magnitude = negative ? -value.hi : value.hi; + if (magnitude > detail::fp::exact_double_integer_limit_double) + return false; + + const double integral = detail::fp::trunc(magnitude); + if (integral != magnitude) + return false; + + out = static_cast(integral); + if (negative) + out = -out; + return true; + } + + template + [[nodiscard]] BL_FORCE_INLINE constexpr bool try_exact_integer_pow_base(const f128_s& x, Exp y, f128_s& out) noexcept + { + std::int64_t integer_base = 0; + if (!try_exact_integer_pow_base_value(x, integer_base)) + return false; + + if (detail::_f128::try_integral_pow_finite_raw(integer_base, y, out)) + return true; + + using U = std::make_unsigned_t>; + const U magnitude = detail::fp::unsigned_abs(y); + const bool split_safe = detail::fp::integral_pow_split_safe(integer_base, magnitude) || + !detail::fp::ipow_loop_needs_range_safe_dekker(x.hi, magnitude); + + if constexpr (std::signed_integral>) + { + if (y < 0) + { + if (detail::fp::integral_pow_reciprocal_underflows_binary64(integer_base, magnitude)) + { + const bool negative_zero = detail::fp::negative_integral_pow_result_is_negative(integer_base, magnitude); + out = detail::_f128::signed_zero(negative_zero); + return true; + } + + if (split_safe) + { + const f128_s powered = detail::_f128::powi_nonnegative_unchecked(x, magnitude); + out = detail::_f128::reciprocal_pow_result(powered); + return true; + } + + const f128_s reciprocal = detail::_f128::reciprocal_pow_result(x); + out = (integer_base != 0) + ? detail::_f128::powi_nonnegative_unchecked(reciprocal, magnitude) + : detail::_f128::powi_nonnegative_impl(reciprocal, magnitude); + return true; + } + } + + out = split_safe + ? detail::_f128::powi_nonnegative_unchecked(x, magnitude) + : detail::_f128::powi_nonnegative_fast(x, magnitude); + return true; + } + + template + [[nodiscard]] BL_MSVC_NOINLINE constexpr f128_s ipow_integer(const f128_s& x, Exp y) + { + using U = std::make_unsigned_t>; + const U magnitude = detail::fp::unsigned_abs(y); + + if (magnitude == U{0}) + return f128_s{1.0}; + if (isnan(x)) + return x; + if (isinf(x)) + { + const bool negative = signbit(x) && (magnitude & U{1}) != U{0}; + if constexpr (std::signed_integral>) + { + if (y < 0) + return detail::_f128::signed_zero(negative); + } + return f128_s{ + negative + ? -std::numeric_limits::infinity() + : std::numeric_limits::infinity()}; + } + + f128_s special{}; + if (detail::_f128::try_exact_integer_pow_base(x, y, special)) + return special; + + if constexpr (std::signed_integral>) + { + if (y < 0) + { + const f128_s reciprocal = detail::_f128::reciprocal_pow_result(x); + return detail::_f128::powi_nonnegative_impl(reciprocal, magnitude); + } + } + + return detail::_f128::powi_nonnegative_fast(x, magnitude); } BL_FORCE_INLINE constexpr f128_s polish_eighth_root(const f128_s& x, const f128_s& y) @@ -255,13 +754,13 @@ namespace detail::_f128 // primitives and kernels if (iszero(y)) return y; - const f128_s y2 = mul_inline(y, y); - const f128_s y4 = mul_inline(y2, y2); - const f128_s y7 = mul_inline(mul_inline(y4, y2), y); - const f128_s y8 = mul_inline(y4, y4); - const f128_s correction = div_double_inline(div_inline(sub_inline(x, y8), y7), 8.0); + const f128_s y2 = mul_product_inline(y, y); + const f128_s y4 = mul_product_inline(y2, y2); + const f128_s y7 = mul_product_inline(mul_product_inline(y4, y2), y); + const f128_s y8 = mul_product_inline(y4, y4); + const f128_s correction = div_double_prechecked_inline(div_prechecked_inline(sub_finite_inline(x, y8), y7), 8.0); - return add_inline(y, correction); + return add_finite_inline(y, correction); } BL_FORCE_INLINE constexpr f128_s pow_positive_eighth_fraction(const f128_s& x, int numerator) @@ -276,15 +775,15 @@ namespace detail::_f128 // primitives and kernels f128_s out{ 1.0 }; if ((numerator & 4) != 0) - out = mul_inline(out, r2); + out = mul_product_inline(out, r2); if ((numerator & 2) != 0) - out = mul_inline(out, r4); + out = mul_product_inline(out, r4); if ((numerator & 1) != 0) { const f128_s r8 = polish_eighth_root(x, detail::_f128_impl::sqrt(r4)); if (numerator == 1) return r8; - out = mul_inline(out, r8); + out = mul_product_inline(out, r8); } return out; } @@ -304,7 +803,7 @@ namespace detail::_f128 // primitives and kernels if (x.hi < 0.0 || (x.hi == 0.0 && signbit(x.hi))) return false; - if (!try_get_int64(mul_double_inline(y, 8.0), n)) + if (!try_get_int64(mul_double_product_inline(y, 8.0), n)) return false; return pow_dyadic_eighth_exponent_in_range(n); @@ -337,9 +836,9 @@ namespace detail::_f128 // primitives and kernels const std::uint64_t whole = magnitude / 8u; const int rem = static_cast(magnitude & 7u); - f128_s result = (whole == 0u) ? f128_s{ 1.0 } : powi(x, static_cast(whole)); + f128_s result = (whole == 0u) ? f128_s{ 1.0 } : detail::fp::powi_by_squaring(x, static_cast(whole)); if (rem != 0) - result = mul_inline(result, pow_positive_eighth_fraction(x, rem)); + result = mul_product_inline(result, pow_positive_eighth_fraction(x, rem)); if (neg) result = recip(result); @@ -349,189 +848,209 @@ namespace detail::_f128 // primitives and kernels BL_FORCE_INLINE constexpr f128_s pow_from_log_product(const f128_s& product) { if (detail::_f128::mag(product) <= f128_s{ 0.125 }) - return add_inline(f128_s{ 1.0 }, expm1_tiny(product)); + return add_double_finite_inline(expm1_tiny(product), 1.0); return _exp(product); } BL_FORCE_INLINE constexpr f128_s log_for_pow_positive(const f128_s& x) { - const f128_s xm1 = sub_double_inline(x, 1.0); + const f128_s xm1 = sub_double_finite_inline(x, 1.0); if (detail::_f128::mag(xm1) <= f128_s{ 0.5 }) return log1p_series_reduced(xm1); return _log(x); } + BL_FORCE_INLINE constexpr f128_s pow_log_product_accurate(const f128_s& y, const f128_s& log_x) + { + return mul_accurate_inline(y, log_x); + } + // sine/cosine functions BL_FORCE_INLINE constexpr bool remainder_pio2(const f128_s& x, long long& n_out, f128_s& r_out) - { - const double ax = fabs(x.hi); - if (detail::fp::isinf_or_nan(ax)) - return false; - - if (ax > 7.0e15) - return false; - - const f128_s t = mul_inline(x, invpi2); - - double qd = nearbyint_ties_even(t.hi); - if (detail::fp::isinf_or_nan(qd) || - qd < static_cast(std::numeric_limits::min()) || - qd > static_cast(std::numeric_limits::max())) - { - return false; - } - - const f128_s delta = sub_inline(t, f128_s{ qd }); - if (delta.hi > 0.5 || (delta.hi == 0.5 && delta.lo > 0.0)) - qd += 1.0; - else if (delta.hi < -0.5 || (delta.hi == -0.5 && delta.lo < 0.0)) - qd -= 1.0; - - if (qd < static_cast(std::numeric_limits::min()) || - qd > static_cast(std::numeric_limits::max())) - { - return false; - } - - constexpr f128_s pi_2_hi{ pi_2_hi_d }; - constexpr f128_s pi_2_mid{ pi_2_mid_d }; - constexpr f128_s pi_2_lo{ pi_2_lo_d }; - constexpr f128_s pi_4{ pi_4_hi }; - - long long n = static_cast(qd); - const f128_s q{ static_cast(n) }; - - f128_s r = x; - r = sub_inline(r, mul_inline(q, pi_2_hi)); - r = sub_inline(r, mul_inline(q, pi_2_mid)); - r = sub_inline(r, mul_inline(q, pi_2_lo)); - - if (r > pi_4) - { - ++n; - r = sub_inline(r, pi_2_hi); - r = sub_inline(r, pi_2_mid); - r = sub_inline(r, pi_2_lo); - } - else if (r < -pi_4) - { - --n; - r = add_inline(r, pi_2_hi); - r = add_inline(r, pi_2_mid); - r = add_inline(r, pi_2_lo); - } - - n_out = n; - r_out = r; - return true; - } - - BL_FORCE_INLINE constexpr f128_s horner_forward_inline(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept { - if (count == 0) - return {}; + const double ax = fabs(x.hi); + if (detail::fp::isinf_or_nan(ax)) + return false; - f128_s p = coeffs[0]; - for (std::size_t i = 1; i < count; ++i) - p = mul_add_inline(p, x, coeffs[i]); - return p; - } + if (ax > 7.0e15) + return false; - BL_FORCE_INLINE constexpr f128_s horner_reverse_inline(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept - { - if (count == 0) - return {}; + const f128_s t = mul_product_inline(x, invpi2); - f128_s p = coeffs[count - 1]; - for (std::size_t i = count - 1; i > 0; --i) - p = mul_add_inline(p, x, coeffs[i - 1]); - return p; - } + double qd = round_nearest_even_value(t.hi); + if (detail::fp::isinf_or_nan(qd) || + qd < static_cast(std::numeric_limits::min()) || + qd > static_cast(std::numeric_limits::max())) + { + return false; + } - BL_FORCE_INLINE constexpr void horner_pair_forward_inline(const f128_s* left_coeffs, const f128_s* right_coeffs, std::size_t count, const f128_s& x, f128_s& left_out, f128_s& right_out) noexcept - { - if (count == 0) + const f128_s delta = sub_double_finite_inline(t, qd); + if (delta.hi > 0.5 || (delta.hi == 0.5 && delta.lo > 0.0)) + qd += 1.0; + else if (delta.hi < -0.5 || (delta.hi == -0.5 && delta.lo < 0.0)) + qd -= 1.0; + + if (qd < static_cast(std::numeric_limits::min()) || + qd > static_cast(std::numeric_limits::max())) { - left_out = f128_s{}; - right_out = f128_s{}; - return; + return false; } - f128_s left = left_coeffs[0]; - f128_s right = right_coeffs[0]; - for (std::size_t i = 1; i < count; ++i) - mul_add_pair_same_rhs_inline(left, right, x, left_coeffs[i], right_coeffs[i], left, right); + constexpr f128_s pi_2_hi{ pi_2_hi_d }; + constexpr f128_s pi_2_mid{ pi_2_mid_d }; + constexpr f128_s pi_2_lo{ pi_2_lo_d }; + constexpr f128_s pi_4{ pi_4_hi }; - left_out = left; - right_out = right; - } + long long n = static_cast(qd); + const double q = static_cast(n); - BL_FORCE_INLINE constexpr f128_s horner_forward(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept - { - if (bl::use_constexpr_math()) + f128_s r = x; + r = sub_finite_inline(r, mul_double_product_inline(pi_2_hi, q)); + r = sub_finite_inline(r, mul_double_product_inline(pi_2_mid, q)); + r = sub_finite_inline(r, mul_double_product_inline(pi_2_lo, q)); + + if (r > pi_4) { - return horner_forward_inline(coeffs, count, x); + ++n; + r = sub_finite_inline(r, pi_2_hi); + r = sub_finite_inline(r, pi_2_mid); + r = sub_finite_inline(r, pi_2_lo); + } + else if (r < -pi_4) + { + --n; + r = add_finite_inline(r, pi_2_hi); + r = add_finite_inline(r, pi_2_mid); + r = add_finite_inline(r, pi_2_lo); } - return detail::_f128_runtime::horner_forward(coeffs, count, x); + // The split-constant reduction is fast, but its relative error grows + // near a large multiple of pi/2. Let the exact reducer handle only + // those rare cancellation cases. + if (detail::fp::absd(r.hi) <= ax * 0x1p-72) + return false; + + n_out = n; + r_out = r; + return true; } - BL_FORCE_INLINE constexpr f128_s horner_reverse(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept + BL_MSVC_NOINLINE constexpr bool remainder_pio2_payne_hanek(const f128_s& x, long long& n_out, f128_s& r_out) { - if (bl::use_constexpr_math()) + detail::exact_decimal::biguint magnitude; + int binary_exp = 0; + bool unused_neg = false; + if (!detail::exact_decimal::exact_binary_components(mag(x), magnitude, binary_exp, unused_neg)) { - return horner_reverse_inline(coeffs, count, x); + n_out = 0; + r_out = signbit(x) ? f128_s{ -0.0, 0.0 } : f128_s{ 0.0, 0.0 }; + return true; } - return detail::_f128_runtime::horner_reverse(coeffs, count, x); - } + const detail::exact_decimal::biguint two_over_pi = detail::exact_decimal::from_words( + detail::trig_reduce::two_over_pi_fixed_words, + static_cast(sizeof(detail::trig_reduce::two_over_pi_fixed_words) / sizeof(detail::trig_reduce::two_over_pi_fixed_words[0]))); + static_assert(sizeof(detail::trig_reduce::two_over_pi_fixed_words) / sizeof(detail::trig_reduce::two_over_pi_fixed_words[0]) <= detail::exact_decimal::biguint::max_words); + static_assert(detail::exact_decimal::biguint::max_words * 32 >= detail::trig_reduce::two_over_pi_fixed_bits + 105); - BL_FORCE_INLINE constexpr void horner_pair_forward(const f128_s* left_coeffs, const f128_s* right_coeffs, std::size_t count, const f128_s& x, f128_s& left_out, f128_s& right_out) noexcept - { - if (bl::use_constexpr_math()) + const detail::exact_decimal::biguint product = detail::exact_decimal::mul_big(magnitude, two_over_pi); + const int scale_bits = detail::trig_reduce::two_over_pi_fixed_bits - binary_exp; + if (scale_bits <= 0) + return false; + + const detail::exact_decimal::biguint rem = detail::exact_decimal::low_bits_copy(product, scale_bits); + const bool half_bit = rem.get_bit(scale_bits - 1); + const bool sticky = detail::exact_decimal::any_low_bits_set(rem, scale_bits - 1); + const bool integer_odd = product.get_bit(scale_bits); + const bool round_up = half_bit && (sticky || integer_odd); + + unsigned n_mod4 = + (product.get_bit(scale_bits) ? 1u : 0u) | + (product.get_bit(scale_bits + 1) ? 2u : 0u); + if (round_up) + n_mod4 = (n_mod4 + 1u) & 3u; + + detail::exact_decimal::biguint y_coeff = rem; + bool y_neg = false; + if (round_up) { - horner_pair_forward_inline(left_coeffs, right_coeffs, count, x, left_out, right_out); - return; + y_coeff.clear(); + y_coeff.set_bit(scale_bits); + y_coeff.sub_inplace(rem); + y_neg = !y_coeff.is_zero(); } - detail::_f128_runtime::horner_pair_forward(left_coeffs, right_coeffs, count, x, left_out, right_out); + f128_s r = exact_dyadic_to_f128_fmod_big(y_coeff, -scale_bits, y_neg); + r = mul_product_inline(r, pi_2); + + if (r > pi_4) + { + r = sub_finite_inline(r, pi_2); + n_mod4 = (n_mod4 + 1u) & 3u; + } + else if (r < -pi_4) + { + r = add_finite_inline(r, pi_2); + n_mod4 = (n_mod4 + 3u) & 3u; + } + + if (signbit(x)) + { + r = -r; + n_mod4 = (4u - n_mod4) & 3u; + } + + n_out = static_cast(n_mod4); + r_out = r; + return true; } BL_FORCE_INLINE constexpr f128_s sin_kernel_small(const f128_s& x) { using namespace detail::_f128; - const f128_s t = mul_inline(x, x); + if (detail::fp::absd(x.hi) < 0x1p-56) + return x; + + const f128_s t = mul_product_inline(x, x); const f128_s ps = horner_forward( f128_sin_coeffs_pi4 + f128_trig_small_coeff_offset, f128_trig_small_coeff_count, t); - return mul_add_inline(mul_inline(x, t), ps, x); + return mul_add_inline(mul_product_inline(x, t), ps, x); } BL_FORCE_INLINE constexpr f128_s cos_kernel_small(const f128_s& x) { using namespace detail::_f128; - const f128_s t = mul_inline(x, x); + const f128_s t = mul_product_inline(x, x); const f128_s pc = horner_forward( f128_cos_coeffs_pi4 + f128_trig_small_coeff_offset, f128_trig_small_coeff_count, t); - return mul_add_inline(t, pc, f128_s{ 1.0 }); + return mul_add_double_rhs_inline(t, pc, 1.0); } BL_FORCE_INLINE constexpr void sincos_kernel_small(const f128_s& x, f128_s& s_out, f128_s& c_out) { using namespace detail::_f128; - const f128_s t = mul_inline(x, x); + if (detail::fp::absd(x.hi) < 0x1p-56) + { + s_out = x; + c_out = f128_s{ 1.0 }; + return; + } + + const f128_s t = mul_product_inline(x, x); f128_s ps{}; f128_s pc{}; @@ -543,14 +1062,14 @@ namespace detail::_f128 // primitives and kernels ps, pc); - const f128_s xt = mul_inline(x, t); + const f128_s xt = mul_product_inline(x, t); s_out = mul_add_inline(xt, ps, x); - c_out = mul_add_inline(t, pc, f128_s{ 1.0 }); + c_out = mul_add_double_rhs_inline(t, pc, 1.0); } BL_FORCE_INLINE constexpr void sincos_kernel_pi64_reduced(const f128_s& x, f128_s& s_out, f128_s& c_out) { - int k = static_cast(nearbyint_ties_even(x.hi * 20.371832715762604)); + int k = static_cast(round_nearest_even_value(x.hi * 20.371832715762604)); if (k < -16) k = -16; else if (k > 16) @@ -562,8 +1081,8 @@ namespace detail::_f128 // primitives and kernels return; } - const f128_s a = mul_double_inline(std::numbers::pi_v, static_cast(k) * 0.015625); - const f128_s u = sub_inline(x, a); + const f128_s a = mul_double_product_inline(std::numbers::pi_v, static_cast(k) * 0.015625); + const f128_s u = sub_finite_inline(x, a); f128_s su{}, cu{}; sincos_kernel_small(u, su, cu); @@ -572,31 +1091,29 @@ namespace detail::_f128 // primitives and kernels const f128_s sa = k < 0 ? -f128_sin_table_pi64[table_index] : f128_sin_table_pi64[table_index]; const f128_s ca = f128_cos_table_pi64[table_index]; - s_out = add_inline(mul_inline(ca, su), mul_inline(sa, cu)); - c_out = sub_inline(mul_inline(ca, cu), mul_inline(sa, su)); + s_out = sum_products_inline(ca, su, sa, cu); + c_out = diff_products_inline(ca, cu, sa, su); } BL_FORCE_INLINE constexpr f128_s sin_kernel_pi4(const f128_s& x) { - const f128_s t = mul_inline(x, x); + if (detail::fp::absd(x.hi) < 0x1p-56) + return x; + + const f128_s t = mul_product_inline(x, x); const f128_s ps = horner_forward(f128_sin_coeffs_pi4, f128_trig_coeff_count_pi4, t); - return mul_add_inline(mul_inline(x, t), ps, x); + return mul_add_inline(mul_product_inline(x, t), ps, x); } BL_FORCE_INLINE constexpr f128_s cos_kernel_pi4(const f128_s& x) { - const f128_s t = mul_inline(x, x); + const f128_s t = mul_product_inline(x, x); const f128_s pc = horner_forward(f128_cos_coeffs_pi4, f128_trig_coeff_count_pi4, t); - return mul_add_inline(t, pc, f128_s{ 1.0 }); - } - - BL_FORCE_INLINE constexpr void sincos_kernel_pi4(const f128_s& x, f128_s& s_out, f128_s& c_out) - { - sincos_kernel_pi64_reduced(x, s_out, c_out); + return mul_add_double_rhs_inline(t, pc, 1.0); } // inverse trig functions @@ -604,26 +1121,26 @@ namespace detail::_f128 // primitives and kernels { constexpr int count = static_cast(sizeof(f128_atan_reduced_coeffs) / sizeof(f128_atan_reduced_coeffs[0])); - const f128_s z2 = mul_inline(z, z); + const f128_s z2 = mul_product_inline(z, z); const f128_s p = horner_reverse(f128_atan_reduced_coeffs, static_cast(count), z2); - return mul_inline(z, p); + return mul_product_inline(z, p); } BL_FORCE_INLINE constexpr f128_s atan_core_unit(const f128_s& z) { - int k = static_cast(nearbyint_ties_even(z.hi * 16.0)); + int k = static_cast(round_nearest_even_value(z.hi * 16.0)); if (k <= 0) return atan_series_reduced(z); if (k > 16) k = 16; const double a = static_cast(k) * 0.0625; - const f128_s u = div_inline( - sub_double_inline(z, a), - add_double_inline(mul_double_inline(z, a), 1.0)); + const f128_s u = div_prechecked_inline( + sub_double_finite_inline(z, a), + add_double_finite_inline(mul_double_product_inline(z, a), 1.0)); - return add_inline(f128_atan_reduced_table_16[k], atan_series_reduced(u)); + return add_finite_inline(f128_atan_reduced_table_16[k], atan_series_reduced(u)); } BL_FORCE_INLINE constexpr f128_s _atan(const f128_s& x) @@ -637,8 +1154,8 @@ namespace detail::_f128 // primitives and kernels if (ax > f128_s{ 1.0 }) { - const f128_s core = atan_core_unit(div_inline(f128_s{ 1.0 }, ax)); - const f128_s out = sub_inline(pi_2, core); + const f128_s core = atan_core_unit(div_double_prechecked_inline(1.0, ax)); + const f128_s out = sub_finite_inline(pi_2, core); return neg ? -out : out; } @@ -658,10 +1175,10 @@ namespace detail::_f128 // primitives and kernels return (x.hi < 0.0) ? -pi_2 : pi_2; if (ax <= f128_s{ 0.5 }) - return _atan(div_inline(x, detail::_f128_impl::sqrt(sub_inline(f128_s{ 1.0 }, mul_inline(x, x))))); + return _atan(div_prechecked_inline(x, detail::_f128_impl::sqrt(sub_double_finite_inline(1.0, mul_product_inline(x, x))))); - const f128_s t = detail::_f128_impl::sqrt(div_inline(sub_double_inline(1.0, ax), add_double_inline(ax, 1.0))); - const f128_s a = sub_inline(pi_2, mul_double_inline(_atan(t), 2.0)); + const f128_s t = detail::_f128_impl::sqrt(div_prechecked_inline(sub_double_finite_inline(1.0, ax), add_double_finite_inline(ax, 1.0))); + const f128_s a = sub_finite_inline(pi_2, mul_double_product_inline(_atan(t), 2.0)); return (x.hi < 0.0) ? -a : a; } @@ -678,23 +1195,23 @@ namespace detail::_f128 // primitives and kernels if (x == f128_s{ -1.0 }) return std::numbers::pi_v; - return sub_inline(pi_2, detail::_f128::_asin(x)); + return sub_finite_inline(pi_2, detail::_f128::_asin(x)); } // inverse hyperbolic functions BL_MSVC_NOINLINE constexpr f128_s atanh_small_series(const f128_s& x) { - const f128_s x2 = mul_inline(x, x); + const f128_s x2 = mul_product_inline(x, x); f128_s sum = x; f128_s power = x; for (int k = 1; k <= 32; ++k) { - power = mul_inline(power, x2); - const f128_s term = div_inline(power, f128_s{ static_cast(2 * k + 1) }); - sum = add_inline(sum, term); + power = mul_product_inline(power, x2); + const f128_s term = div_double_prechecked_inline(power, static_cast(2 * k + 1)); + sum = add_finite_inline(sum, term); - if (mag(term) <= f128_s::eps()) + if (mag(term) <= convergence_epsilon) break; } @@ -708,20 +1225,20 @@ namespace detail::_f128 // primitives and kernels std::size_t count, double shift) { - const f128_s t = sub_inline(mul_double_inline(x, 2.0), f128_s{ shift }); + const f128_s t = sub_double_finite_inline(mul_double_product_inline(x, 2.0), shift); f128_s b1{ 0.0 }; f128_s b2{ 0.0 }; for (int i = static_cast(count) - 1; i >= 1; --i) { - const f128_s b0 = add_inline( - sub_inline(mul_double_inline(mul_inline(t, b1), 2.0), b2), + const f128_s b0 = add_finite_inline( + sub_finite_inline(mul_double_product_inline(mul_product_inline(t, b1), 2.0), b2), coeffs[i]); b2 = b1; b1 = b0; } - return F128_CANONICALIZE_MATH_RESULT(add_inline(mul_sub_inline(t, b1, b2), coeffs[0])); + return add_finite_inline(mul_sub_inline(t, b1, b2), coeffs[0]); } [[nodiscard]] BL_MSVC_NOINLINE constexpr f128_s erf_positive_cheb_1_2(const f128_s& x) @@ -731,58 +1248,60 @@ namespace detail::_f128 // primitives and kernels BL_FORCE_INLINE constexpr f128_s erf_positive_series(const f128_s& x) { - const f128_s xx = mul_inline(x, x); + const f128_s xx = mul_product_inline(x, x); f128_s power = x; f128_s sum = x; for (int n = 1; n < 256; ++n) { - power = mul_inline(power, div_inline(-xx, f128_s{ static_cast(n) })); - const f128_s term = div_inline(power, f128_s{ static_cast(2 * n + 1) }); - sum = add_inline(sum, term); - if (mag(term) < f128_s::eps()) + power = mul_product_inline(power, div_double_prechecked_inline(-xx, static_cast(n))); + const f128_s term = div_double_prechecked_inline(power, static_cast(2 * n + 1)); + sum = add_finite_inline(sum, term); + if (mag(term) < convergence_epsilon) break; } - return F128_CANONICALIZE_MATH_RESULT(mul_inline(mul_inline(f128_s{ 2.0 }, std::numbers::inv_sqrtpi_v), sum)); + return mul_pwr2_inline(mul_product_inline(std::numbers::inv_sqrtpi_v, sum), 2.0); } BL_FORCE_INLINE constexpr f128_s erfc_positive_cf(const f128_s& x) { - const f128_s z = mul_inline(x, x); - constexpr f128_s a = f128_s{ 0.5 }; + const f128_s z = mul_product_inline(x, x); constexpr f128_s tiny = f128_s{ 1.0e-300 }; + constexpr f128_s convergence = f128_s{ 0x1p-101 }; // 32 * convergence_epsilon - f128_s b = sub_inline(add_inline(z, f128_s{ 1.0 }), a); - f128_s c = div_inline(f128_s{ 1.0 }, tiny); - f128_s d = div_inline(f128_s{ 1.0 }, b); + f128_s b = add_double_finite_inline(z, 0.5); + f128_s c = div_double_prechecked_inline(1.0, tiny); + f128_s d = div_double_prechecked_inline(1.0, b); f128_s h = d; + double an = -0.5; + double an_step = -2.5; for (int i = 1; i <= 96; ++i) { - const f128_s ii = f128_s{ static_cast(i) }; - const f128_s an = -mul_inline(ii, sub_inline(ii, a)); + b = add_double_finite_inline(b, 2.0); - b = add_inline(b, f128_s{ 2.0 }); - - d = mul_add_inline(an, d, b); + d = mul_add_double_lhs_inline(an, d, b); if (mag(d) < tiny) d = tiny; - c = add_inline(b, div_inline(an, c)); + c = add_finite_inline(b, div_double_prechecked_inline(an, c)); if (mag(c) < tiny) c = tiny; - d = div_inline(f128_s{ 1.0 }, d); - const f128_s delta = mul_inline(d, c); - h = mul_inline(h, delta); + d = div_double_prechecked_inline(1.0, d); + const f128_s delta = mul_product_inline(d, c); + h = mul_product_inline(h, delta); - if (mag(sub_inline(delta, f128_s{ 1.0 })) <= mul_inline(f128_s{ 32.0 }, f128_s::eps())) + if (mag(sub_double_finite_inline(delta, 1.0)) <= convergence) break; + + an += an_step; + an_step -= 2.0; } - const f128_s out = mul_inline(mul_inline(mul_inline(detail::_f128_impl::exp(-z), x), std::numbers::inv_sqrtpi_v), h); - return F128_CANONICALIZE_MATH_RESULT(out); + const f128_s out = mul_product_inline(mul_product_inline(mul_product_inline(detail::_f128_impl::exp(-z), x), std::numbers::inv_sqrtpi_v), h); + return out; } // gamma functions @@ -792,7 +1311,7 @@ namespace detail::_f128 // primitives and kernels const f128_s p = horner_reverse(lgamma1p_coeff, static_cast(count), y); - return mul_inline(y, mul_add_inline(y, p, -std::numbers::egamma_v)); + return mul_product_inline(y, mul_add_inline(y, p, -std::numbers::egamma_v)); } BL_MSVC_NOINLINE constexpr f128_s lgamma1p5_series(const f128_s& y) noexcept @@ -801,31 +1320,31 @@ namespace detail::_f128 // primitives and kernels const f128_s p = horner_reverse(lgamma1p5_coeff, static_cast(count), y); - const f128_s constant = sub_inline(half_log_two_pi, mul_inline(f128_s{ 1.5 }, std::numbers::ln2_v)); - const f128_s linear = sub_inline(sub_inline(f128_s{ 2.0 }, std::numbers::egamma_v), mul_inline(f128_s{ 2.0 }, std::numbers::ln2_v)); + const f128_s constant = sub_finite_inline(half_log_two_pi, mul_double_product_inline(std::numbers::ln2_v, 1.5)); + const f128_s linear = sub_finite_inline(sub_double_finite_inline(2.0, std::numbers::egamma_v), mul_double_product_inline(std::numbers::ln2_v, 2.0)); return mul_add_inline(y, mul_add_inline(y, p, linear), constant); } BL_MSVC_NOINLINE constexpr bool try_lgamma_near_one_or_two(const f128_s& x, f128_s& out) noexcept { - const f128_s y1 = sub_inline(x, f128_s{ 1.0 }); + const f128_s y1 = sub_double_finite_inline(x, 1.0); if (mag(y1) <= f128_s{ 0.25 }) { out = lgamma1p_series(y1); return true; } - const f128_s y15 = sub_inline(x, f128_s{ 1.5 }); + const f128_s y15 = sub_double_finite_inline(x, 1.5); if (mag(y15) <= f128_s{ 0.25 }) { out = lgamma1p5_series(y15); return true; } - const f128_s y2 = sub_inline(x, f128_s{ 2.0 }); + const f128_s y2 = sub_double_finite_inline(x, 2.0); if (mag(y2) <= f128_s{ 0.25 }) { - out = add_inline(log1p_series_reduced(y2), lgamma1p_series(y2)); + out = add_finite_inline(log1p_series_reduced(y2), lgamma1p_series(y2)); return true; } @@ -834,14 +1353,14 @@ namespace detail::_f128 // primitives and kernels BL_MSVC_NOINLINE constexpr f128_s lgamma_stirling_asymptotic(const f128_s& z) noexcept { - const f128_s inv = div_inline(f128_s{ 1.0 }, z); - const f128_s inv2 = mul_inline(inv, inv); - const f128_s series = mul_inline(inv, horner_reverse( + const f128_s inv = div_double_prechecked_inline(1.0, z); + const f128_s inv2 = mul_product_inline(inv, inv); + const f128_s series = mul_product_inline(inv, horner_reverse( lgamma_stirling_coeffs, sizeof(lgamma_stirling_coeffs) / sizeof(lgamma_stirling_coeffs[0]), inv2)); - return add_inline(add_inline(sub_inline(mul_inline(sub_inline(z, f128_s{ 0.5 }), detail::_f128_impl::log(z)), z), half_log_two_pi), series); + return add_finite_inline(add_finite_inline(sub_finite_inline(mul_product_inline(sub_double_finite_inline(z, 0.5), detail::_f128_impl::log(z)), z), half_log_two_pi), series); } BL_MSVC_NOINLINE constexpr void positive_recurrence_product(const f128_s& x, const f128_s& asymptotic_min, f128_s& z, f128_s& product, int& product_scale2) noexcept @@ -852,7 +1371,7 @@ namespace detail::_f128 // primitives and kernels while (z < asymptotic_min) { - product = mul_inline(product, z); + product = mul_product_inline(product, z); const double hi = product.hi; if (hi != 0.0) @@ -865,7 +1384,7 @@ namespace detail::_f128 // primitives and kernels } } - z = add_inline(z, f128_s{ 1.0 }); + z = add_double_finite_inline(z, 1.0); } } @@ -880,8 +1399,8 @@ namespace detail::_f128 // primitives and kernels shifted_up = true; do { - product = mul_inline(product, y); - y = add_inline(y, f128_s{ 1.0 }); + product = mul_product_inline(product, y); + y = add_double_finite_inline(y, 1.0); } while (y < f128_s{ 0.75 }); } @@ -889,8 +1408,8 @@ namespace detail::_f128 // primitives and kernels { while (y > f128_s{ 2.25 }) { - y = sub_inline(y, f128_s{ 1.0 }); - product = mul_inline(product, y); + y = sub_double_finite_inline(y, 1.0); + product = mul_product_inline(product, y); } } @@ -901,7 +1420,7 @@ namespace detail::_f128 // primitives and kernels return local; const f128_s correction = detail::_f128_impl::log(product); - return shifted_up ? sub_inline(local, correction) : add_inline(local, correction); + return shifted_up ? sub_finite_inline(local, correction) : add_finite_inline(local, correction); } BL_MSVC_NOINLINE constexpr f128_s gamma_positive_low_range(const f128_s& x) noexcept @@ -915,8 +1434,8 @@ namespace detail::_f128 // primitives and kernels shifted_up = true; do { - product = mul_inline(product, y); - y = add_inline(y, f128_s{ 1.0 }); + product = mul_product_inline(product, y); + y = add_double_finite_inline(y, 1.0); } while (y < f128_s{ 0.75 }); } @@ -924,15 +1443,19 @@ namespace detail::_f128 // primitives and kernels { while (y > f128_s{ 2.25 }) { - y = sub_inline(y, f128_s{ 1.0 }); - product = mul_inline(product, y); + y = sub_double_finite_inline(y, 1.0); + product = mul_product_inline(product, y); } } f128_s local_lgamma{}; try_lgamma_near_one_or_two(y, local_lgamma); const f128_s local_gamma = detail::_f128_impl::exp(local_lgamma); - return shifted_up ? div_inline(local_gamma, product) : mul_inline(local_gamma, product); +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + return shifted_up ? div_prechecked_range_safe_inline(local_gamma, product) : mul_product_inline(local_gamma, product); +#else + return shifted_up ? div_prechecked_inline(local_gamma, product) : mul_product_inline(local_gamma, product); +#endif } BL_MSVC_NOINLINE constexpr f128_s lgamma_positive_recurrence(const f128_s& x) noexcept @@ -951,9 +1474,9 @@ namespace detail::_f128 // primitives and kernels int product_scale2 = 0; positive_recurrence_product(x, asymptotic_min, z, product, product_scale2); - return sub_inline( - sub_inline(lgamma_stirling_asymptotic(z), detail::_f128_impl::log(product)), - mul_inline(f128_s{ static_cast(product_scale2) }, std::numbers::ln2_v)); + return sub_finite_inline( + sub_finite_inline(lgamma_stirling_asymptotic(z), detail::_f128_impl::log(product)), + mul_double_product_inline(std::numbers::ln2_v, static_cast(product_scale2))); } BL_MSVC_NOINLINE constexpr f128_s gamma_positive_recurrence(const f128_s& x) noexcept @@ -972,7 +1495,13 @@ namespace detail::_f128 // primitives and kernels int product_scale2 = 0; positive_recurrence_product(x, asymptotic_min, z, product, product_scale2); - f128_s out = div_inline(detail::_f128_impl::exp(lgamma_stirling_asymptotic(z)), product); +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + f128_s out = (product == f128_s{ 1.0 }) + ? detail::_f128_impl::exp(lgamma_stirling_asymptotic(z)) + : div_prechecked_inline(detail::_f128_impl::exp(lgamma_stirling_asymptotic(z)), product); +#else + f128_s out = div_prechecked_inline(detail::_f128_impl::exp(lgamma_stirling_asymptotic(z)), product); +#endif if (product_scale2 != 0) out = detail::_f128_impl::ldexp(out, -product_scale2); @@ -981,9 +1510,9 @@ namespace detail::_f128 // primitives and kernels BL_MSVC_NOINLINE constexpr f128_s sinpi_reduced(const f128_s& x) noexcept { - const f128_s n = detail::_f128_impl::nearbyint(x); - const f128_s r = sub_inline(x, n); - f128_s out = detail::_f128_impl::sin(mul_inline(std::numbers::pi_v, r)); + const f128_s n = detail::_f128_impl::round_nearest_even(x); + const f128_s r = sub_finite_inline(x, n); + f128_s out = detail::_f128_impl::sin(mul_product_inline(std::numbers::pi_v, r)); if (is_odd_integer(n)) out = -out; return out; @@ -991,7 +1520,7 @@ namespace detail::_f128 // primitives and kernels [[nodiscard]] BL_FORCE_INLINE constexpr f128_s cbrt_constexpr_seed(const f128_s& ax) { - return detail::_f128_impl::exp(div_inline(detail::_f128_impl::log(ax), f128_s{ 3.0 })); + return f128_s{ detail::fp::cbrt_seed(ax.hi), 0.0 }; } } @@ -1035,6 +1564,29 @@ namespace detail::_f128 double c3_hi{}, c3_lo{}; two_prod_precise(c2_hi, c, c3_hi, c3_lo); +#if BL_FP_BARRIER_ACTIVE + BL_FP_BARRIER(c3_lo); + double c2_tail = c2_lo * c; BL_FP_BARRIER(c2_tail); + c3_lo += c2_tail; BL_FP_BARRIER(c3_lo); + + double residual_hi{}, residual_lo{}; + two_sum_precise(ax.hi, -c3_hi, residual_hi, residual_lo); + BL_FP_BARRIER(residual_lo); + residual_lo += ax.lo; BL_FP_BARRIER(residual_lo); + residual_lo -= c3_lo; BL_FP_BARRIER(residual_lo); + + const f128_s residual = renorm(residual_hi, residual_lo); + double derivative = 3.0 * c2_hi; BL_FP_BARRIER(derivative); + double inv_derivative = 1.0 / derivative; BL_FP_BARRIER(inv_derivative); + double cc = residual.hi * inv_derivative; BL_FP_BARRIER(cc); + double correction = residual.lo * inv_derivative; BL_FP_BARRIER(correction); + cc += correction; BL_FP_BARRIER(cc); + + double y_hi = c + cc; BL_FP_BARRIER(y_hi); + double y_lo = c - y_hi; BL_FP_BARRIER(y_lo); + y_lo += cc; BL_FP_BARRIER(y_lo); + return { y_hi, y_lo }; +#else c3_lo += c2_lo * c; double residual_hi{}, residual_lo{}; @@ -1047,6 +1599,7 @@ namespace detail::_f128 const double y_hi = c + cc; return { y_hi, (c - y_hi) + cc }; +#endif } BL_POP_PRECISE; @@ -1055,12 +1608,12 @@ namespace detail::_f128 // exponential functions [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::exp(const f128_s& x) { - return F128_CANONICALIZE_MATH_RESULT(_exp(x)); + return _exp(x); } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::exp2(const f128_s& x) { - return F128_CANONICALIZE_MATH_RESULT(_exp2(x)); + return _exp2(x); } // logarithm functions @@ -1075,7 +1628,7 @@ namespace detail::_f128 [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::log(const f128_s& a) { - return F128_CANONICALIZE_MATH_RESULT(_log(a)); + return _log(a); } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::log2(const f128_s& a) @@ -1093,7 +1646,7 @@ namespace detail::_f128 if (f128_try_exact_binary_log2(a, exact_exp2)) return f128_s{ static_cast(exact_exp2), 0.0 }; - return F128_CANONICALIZE_MATH_RESULT(mul_inline(_log(a), std::numbers::log2e_v)); + return mul_product_inline(_log(a), std::numbers::log2e_v); } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::log10(const f128_s& x) @@ -1116,12 +1669,13 @@ namespace detail::_f128 for (int k = k0 - 2; k <= k0 + 2; ++k) { - if (x == detail::_f128_impl::pow10_128(k)) + const f128_s pow10 = detail::_f128_impl::pow10_128(k); + if (pow10.hi >= std::numeric_limits::min() && x == pow10) return f128_s{ static_cast(k), 0.0 }; } } - return F128_CANONICALIZE_MATH_RESULT(mul_inline(_log(x), std::numbers::log10e_v)); + return mul_product_inline(_log(x), std::numbers::log10e_v); } // expm1/log1p functions @@ -1138,13 +1692,13 @@ namespace detail::_f128 ? f128_s{ -1.0, 0.0 } : std::numeric_limits::infinity(); - if (x.hi > 709.782712893384) + if (exp_overflows(x)) return std::numeric_limits::infinity(); - if (x.hi < -745.133219101941) + if (exp_underflows_to_zero(x)) return f128_s{ -1.0, 0.0 }; - return F128_CANONICALIZE_MATH_RESULT(exp_general_scaled(x, true)); + return exp_general_scaled(x, true); } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::log1p(const f128_s& x) @@ -1164,13 +1718,12 @@ namespace detail::_f128 const f128_s ax = detail::_f128::mag(x); if (ax <= f128_s{ 0.25 }) - return F128_CANONICALIZE_MATH_RESULT(log1p_series_reduced(x)); + return log1p_series_reduced(x); - const f128_s u = add_inline(f128_s{ 1.0 }, x); - return F128_CANONICALIZE_MATH_RESULT(_log(u)); + const f128_s u = add_double_finite_inline(x, 1.0); + return _log(u); } - // roots [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::cbrt(const f128_s& x) { @@ -1183,41 +1736,16 @@ namespace detail::_f128 const f128_s ax = neg ? -x : x; f128_s y = cbrt_compensated(ax, cbrt_seed(ax).hi); + if (bl::detail::is_constant_evaluated()) + y = cbrt_compensated(ax, y.hi); if (neg) y = -y; - return F128_CANONICALIZE_MATH_RESULT(y); + return y; } // power functions -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::pow10_128(int k) -{ - if (k == 0) [[unlikely]] - return f128_s{ 1.0 }; - - int n = (k >= 0) ? k : -k; - - // fast small-exponent path - if (n <= 16) { - f128_s r = f128_s{ 1.0 }; - const f128_s ten = f128_s{ 10.0 }; - for (int i = 0; i < n; ++i) r = r * ten; - return (k >= 0) ? r : (f128_s{ 1.0 } / r); - } - - f128_s r = f128_s{ 1.0 }; - f128_s base = f128_s{ 10.0 }; - - while (n) { - if (n & 1) r = r * base; - n >>= 1; - if (n) base = base * base; - } - - return (k >= 0) ? r : (f128_s{ 1.0 } / r); -} - [[nodiscard]] BL_MSVC_NOINLINE constexpr f128_s detail::_f128_impl::pow(const f128_s& x, const f128_s& y) { if (iszero(y)) @@ -1244,22 +1772,22 @@ namespace detail::_f128 int64_t yi64{}; if (y_is_int && try_get_int64(yi, yi64)) - return powi(x, yi64); + return detail::fp::powi_by_squaring(x, yi64); int64_t dyadic_exponent{}; if (try_get_pow_dyadic_eighth_exponent(x, y, dyadic_exponent)) - return F128_CANONICALIZE_MATH_RESULT(pow_dyadic_eighth_unchecked(x, dyadic_exponent)); + return pow_dyadic_eighth_unchecked(x, dyadic_exponent); if (x.hi < 0.0 || (x.hi == 0.0 && signbit(x.hi))) { if (!y_is_int) return std::numeric_limits::quiet_NaN(); - const f128_s magnitude = pow_from_log_product(mul_inline(y, log_for_pow_positive(-x))); + const f128_s magnitude = pow_from_log_product(pow_log_product_accurate(y, log_for_pow_positive(-x))); return is_odd_integer(yi) ? -magnitude : magnitude; } - return F128_CANONICALIZE_MATH_RESULT(pow_from_log_product(mul_inline(y, log_for_pow_positive(x)))); + return pow_from_log_product(pow_log_product_accurate(y, log_for_pow_positive(x))); } [[nodiscard]] BL_MSVC_NOINLINE constexpr f128_s detail::_f128_impl::pow(const f128_s& x, double y) @@ -1284,12 +1812,12 @@ namespace detail::_f128 } if (y == 1.0) return x; - if (y == 2.0) return F128_CANONICALIZE_MATH_RESULT(x * x); - if (y == -1.0) return F128_CANONICALIZE_MATH_RESULT(f128_s{ 1.0 } / x); - if (y == 0.5) return F128_CANONICALIZE_MATH_RESULT(detail::_f128_impl::sqrt(x)); + if (y == 2.0) return x * x; + if (y == -1.0) return div_double_prechecked_inline(1.0, x); + if (y == 0.5) return detail::_f128_impl::sqrt(x); double yi{}; - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { yi = (y < 0.0) ? detail::fp::ceil(y) @@ -1303,11 +1831,11 @@ namespace detail::_f128 const bool y_is_int = (yi == y); if (y_is_int && absd(yi) < 0x1p63) - return powi(x, static_cast(yi)); + return detail::fp::powi_by_squaring(x, static_cast(yi)); int64_t dyadic_exponent{}; if (try_get_pow_dyadic_eighth_exponent(x, y, dyadic_exponent)) - return F128_CANONICALIZE_MATH_RESULT(pow_dyadic_eighth_unchecked(x, dyadic_exponent)); + return pow_dyadic_eighth_unchecked(x, dyadic_exponent); if (x.hi < 0.0 || (x.hi == 0.0 && signbit(x.hi))) { @@ -1319,26 +1847,26 @@ namespace detail::_f128 (absd(yi) < 0x1p53) && ((static_cast(yi) & 1ll) != 0); - return F128_CANONICALIZE_MATH_RESULT(y_is_odd ? -magnitude : magnitude); + return y_is_odd ? -magnitude : magnitude; } - return F128_CANONICALIZE_MATH_RESULT(pow_from_log_product(log_for_pow_positive(x) * y)); + return pow_from_log_product(log_for_pow_positive(x) * y); } // inverse trig functions [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::atan(const f128_s& x) { - return F128_CANONICALIZE_MATH_RESULT(detail::_f128::_atan(x)); + return detail::_f128::_atan(x); } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::asin(const f128_s& x) { - return F128_CANONICALIZE_MATH_RESULT(detail::_f128::_asin(x)); + return detail::_f128::_asin(x); } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::acos(const f128_s& x) { - return F128_CANONICALIZE_MATH_RESULT(detail::_f128::_acos(x)); + return detail::_f128::_acos(x); } // sine/cosine functions @@ -1361,19 +1889,26 @@ namespace detail::_f128 if (ax <= pi_4_hi) { - sincos_kernel_pi4(x, s_out, c_out); - s_out = F128_CANONICALIZE_MATH_RESULT(s_out); - c_out = F128_CANONICALIZE_MATH_RESULT(c_out); + sincos_kernel_pi64_reduced(x, s_out, c_out); + s_out = s_out; + c_out = c_out; return true; } long long n = 0; f128_s r{}; if (!remainder_pio2(x, n, r)) - return false; + { + if (!remainder_pio2_payne_hanek(x, n, r)) + { + s_out = f128_s{ std::numeric_limits::quiet_NaN() }; + c_out = s_out; + return false; + } + } f128_s sr{}, cr{}; - sincos_kernel_pi4(r, sr, cr); + sincos_kernel_pi64_reduced(r, sr, cr); switch ((int)(n & 3)) { @@ -1383,8 +1918,8 @@ namespace detail::_f128 default: s_out = -cr; c_out = sr; break; } - s_out = F128_CANONICALIZE_MATH_RESULT(s_out); - c_out = F128_CANONICALIZE_MATH_RESULT(c_out); + s_out = s_out; + c_out = c_out; return true; } @@ -1398,28 +1933,22 @@ namespace detail::_f128 return f128_s{ std::numeric_limits::quiet_NaN() }; if (ax <= pi_4_hi) - return F128_CANONICALIZE_MATH_RESULT(sin_kernel_pi4(x)); + return sin_kernel_pi4(x); long long n = 0; f128_s r{}; if (!remainder_pio2(x, n, r)) { - if (bl::use_constexpr_math()) - { - return F128_CANONICALIZE_MATH_RESULT(f128_s{ detail::fp::sin(static_cast(x)) }); - } - else - { - return F128_CANONICALIZE_MATH_RESULT(f128_s{ std::sin((double)x) }); - } + if (!remainder_pio2_payne_hanek(x, n, r)) + return f128_s{ std::numeric_limits::quiet_NaN() }; } switch ((int)(n & 3)) { - case 0: return F128_CANONICALIZE_MATH_RESULT(sin_kernel_pi4(r)); - case 1: return F128_CANONICALIZE_MATH_RESULT(cos_kernel_pi4(r)); - case 2: return F128_CANONICALIZE_MATH_RESULT(-sin_kernel_pi4(r)); - default: return F128_CANONICALIZE_MATH_RESULT(-cos_kernel_pi4(r)); + case 0: return sin_kernel_pi4(r); + case 1: return cos_kernel_pi4(r); + case 2: return -sin_kernel_pi4(r); + default: return -cos_kernel_pi4(r); } } @@ -1430,28 +1959,22 @@ namespace detail::_f128 return f128_s{ std::numeric_limits::quiet_NaN() }; if (ax <= pi_4_hi) - return F128_CANONICALIZE_MATH_RESULT(cos_kernel_pi4(x)); + return cos_kernel_pi4(x); long long n = 0; f128_s r{}; if (!remainder_pio2(x, n, r)) { - if (bl::use_constexpr_math()) - { - return F128_CANONICALIZE_MATH_RESULT(f128_s{ detail::fp::cos(static_cast(x)) }); - } - else - { - return F128_CANONICALIZE_MATH_RESULT(f128_s{ std::cos((double)x) }); - } + if (!remainder_pio2_payne_hanek(x, n, r)) + return f128_s{ std::numeric_limits::quiet_NaN() }; } switch ((int)(n & 3)) { - case 0: return F128_CANONICALIZE_MATH_RESULT(cos_kernel_pi4(r)); - case 1: return F128_CANONICALIZE_MATH_RESULT(-sin_kernel_pi4(r)); - case 2: return F128_CANONICALIZE_MATH_RESULT(-cos_kernel_pi4(r)); - default: return F128_CANONICALIZE_MATH_RESULT(sin_kernel_pi4(r)); + case 0: return cos_kernel_pi4(r); + case 1: return -sin_kernel_pi4(r); + case 2: return -cos_kernel_pi4(r); + default: return sin_kernel_pi4(r); } } @@ -1463,9 +1986,9 @@ namespace detail::_f128 f128_s s{}, c{}; if (detail::_f128_impl::sincos(x, s, c)) - return div_inline(s, c); + return div_prechecked_inline(s, c); const double xd = (double)x; - if (bl::use_constexpr_math()) { + if (bl::detail::is_constant_evaluated()) { return f128_s{ detail::fp::tan(xd) }; } else { return f128_s{ std::tan(xd) }; @@ -1492,7 +2015,7 @@ namespace detail::_f128 { if (x.hi < 0.0) return signbit(y) ? -std::numbers::pi_v : std::numbers::pi_v; - return f128_s{ signbit(y) ? -0.0 : 0.0, 0.0 }; + return detail::_f128::signed_zero(signbit(y)); } if (iszero(x)) @@ -1520,26 +2043,40 @@ namespace detail::_f128 { if (x.hi < 0.0) { - return F128_CANONICALIZE_MATH_RESULT( - (y.hi < 0.0) ? -detail::_f128::pi_3_4 : detail::_f128::pi_3_4); + return + (y.hi < 0.0) ? -detail::_f128::pi_3_4 : detail::_f128::pi_3_4; } - return F128_CANONICALIZE_MATH_RESULT( - (y.hi < 0.0) ? -detail::_f128::pi_4 : detail::_f128::pi_4); + return + (y.hi < 0.0) ? -detail::_f128::pi_4 : detail::_f128::pi_4; } if (ax >= ay) { - f128_s a = detail::_f128::_atan(detail::_f128::div_inline(y, x)); + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + const f128_s ratio = detail::fp::dekker_product_needs_scaling(y.hi, x.hi) + ? detail::_f128::div_prechecked_range_safe_inline(y, x) + : detail::_f128::div_prechecked_inline(y, x); + #else + const f128_s ratio = detail::_f128::div_prechecked_inline(y, x); + #endif + f128_s a = detail::_f128::_atan(ratio); if (x.hi < 0.0) - a = detail::_f128::add_inline(a, (y.hi < 0.0) ? -std::numbers::pi_v : std::numbers::pi_v); - return F128_CANONICALIZE_MATH_RESULT(a); + a = detail::_f128::add_finite_inline(a, (y.hi < 0.0) ? -std::numbers::pi_v : std::numbers::pi_v); + return a; } - const f128_s a = detail::_f128::_atan(detail::_f128::div_inline(x, y)); - return F128_CANONICALIZE_MATH_RESULT( - (y.hi < 0.0) ? detail::_f128::sub_inline(-detail::_f128::pi_2, a) : detail::_f128::sub_inline(detail::_f128::pi_2, a)); + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + const f128_s ratio = detail::fp::dekker_product_needs_scaling(x.hi, y.hi) + ? detail::_f128::div_prechecked_range_safe_inline(x, y) + : detail::_f128::div_prechecked_inline(x, y); + #else + const f128_s ratio = detail::_f128::div_prechecked_inline(x, y); + #endif + const f128_s a = detail::_f128::_atan(ratio); + return + (y.hi < 0.0) ? detail::_f128::sub_finite_inline(-detail::_f128::pi_2, a) : detail::_f128::sub_finite_inline(detail::_f128::pi_2, a); } // sinh/cosh/tanh @@ -1554,15 +2091,21 @@ namespace detail::_f128 if (ax <= f128_s{ 0.5 }) { const f128_s e = detail::_f128_impl::expm1(x); - return F128_CANONICALIZE_MATH_RESULT( - mul_double_inline(div_inline(mul_inline(e, add_double_inline(e, 2.0)), add_double_inline(e, 1.0)), 0.5)); + return + mul_double_product_inline(div_prechecked_inline(mul_product_inline(e, add_double_finite_inline(e, 2.0)), add_double_finite_inline(e, 1.0)), 0.5); } const f128_s ex = detail::_f128_impl::exp(ax); - f128_s out = mul_double_inline(sub_inline(ex, div_inline(f128_s{ 1.0 }, ex)), 0.5); +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + f128_s out = detail::fp::exp_inverse_is_negligible(ax.hi) + ? mul_pwr2_inline(ex, 0.5) + : mul_double_product_inline(sub_finite_inline(ex, div_double_prechecked_inline(1.0, ex)), 0.5); +#else + f128_s out = mul_double_product_inline(sub_finite_inline(ex, div_double_prechecked_inline(1.0, ex)), 0.5); +#endif if (signbit(x)) out = -out; - return F128_CANONICALIZE_MATH_RESULT(out); + return out; } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::cosh(const f128_s& x) @@ -1576,7 +2119,12 @@ namespace detail::_f128 const f128_s ax = detail::_f128::mag(x); const f128_s ex = detail::_f128_impl::exp(ax); - return F128_CANONICALIZE_MATH_RESULT(mul_double_inline(add_inline(ex, div_inline(f128_s{ 1.0 }, ex)), 0.5)); +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + if (detail::fp::exp_inverse_is_negligible(ax.hi)) + return mul_pwr2_inline(ex, 0.5); +#endif + + return mul_double_product_inline(add_finite_inline(ex, div_double_prechecked_inline(1.0, ex)), 0.5); } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::tanh(const f128_s& x) @@ -1594,19 +2142,19 @@ namespace detail::_f128 if (ax >= f128_s{ 0.5 }) { - const f128_s e = detail::_f128_impl::exp(mul_double_inline(ax, -2.0)); - f128_s out = sub_inline(f128_s{ 1.0 }, div_inline(mul_double_inline(e, 2.0), add_double_inline(e, 1.0))); + const f128_s e = detail::_f128_impl::exp(mul_double_product_inline(ax, -2.0)); + f128_s out = sub_double_finite_inline(1.0, div_prechecked_inline(mul_double_product_inline(e, 2.0), add_double_finite_inline(e, 1.0))); if (signbit(x)) out = -out; - return F128_CANONICALIZE_MATH_RESULT(out); + return out; } const f128_s e = detail::_f128_impl::expm1(x); - const f128_s ep1 = add_double_inline(e, 1.0); - return F128_CANONICALIZE_MATH_RESULT( - div_inline( - mul_inline(e, add_double_inline(e, 2.0)), - add_double_inline(mul_inline(ep1, ep1), 1.0))); + const f128_s ep1 = add_double_finite_inline(e, 1.0); + return + div_prechecked_inline( + mul_product_inline(e, add_double_finite_inline(e, 2.0)), + add_double_finite_inline(mul_product_inline(ep1, ep1), 1.0)); } // inverse hyperbolic functions @@ -1620,20 +2168,20 @@ namespace detail::_f128 const f128_s ax = detail::_f128::mag(x); f128_s out{}; if (ax > f128_s{ 0x1p500 }) - out = add_inline(detail::_f128_impl::log(ax), std::numbers::ln2_v); + out = add_finite_inline(detail::_f128_impl::log(ax), std::numbers::ln2_v); else if (ax <= f128_s{ 0.5 }) { - const f128_s ax2 = mul_inline(ax, ax); - out = detail::_f128_impl::log1p(add_inline( + const f128_s ax2 = mul_product_inline(ax, ax); + out = detail::_f128_impl::log1p(add_finite_inline( ax, - div_inline(ax2, add_double_inline(detail::_f128_impl::sqrt(add_double_inline(ax2, 1.0)), 1.0)))); + div_prechecked_inline(ax2, add_double_finite_inline(detail::_f128_impl::sqrt(add_double_finite_inline(ax2, 1.0)), 1.0)))); } else - out = detail::_f128_impl::log(add_inline(ax, detail::_f128_impl::sqrt(add_double_inline(mul_inline(ax, ax), 1.0)))); + out = detail::_f128_impl::log(add_finite_inline(ax, detail::_f128_impl::sqrt(add_double_finite_inline(mul_product_inline(ax, ax), 1.0)))); if (signbit(x)) out = -out; - return F128_CANONICALIZE_MATH_RESULT(out); + return out; } [[nodiscard]] BL_MSVC_NOINLINE constexpr f128_s detail::_f128_impl::acosh(const f128_s& x) @@ -1651,20 +2199,20 @@ namespace detail::_f128 f128_s out{}; if (x > f128_s{ 0x1p500 }) - out = add_inline(detail::_f128_impl::log(x), std::numbers::ln2_v); + out = add_finite_inline(detail::_f128_impl::log(x), std::numbers::ln2_v); else if (x < f128_s{ 1.25 }) { - const f128_s xm1 = sub_double_inline(x, 1.0); - out = detail::_f128_impl::log1p(add_inline( + const f128_s xm1 = sub_double_finite_inline(x, 1.0); + out = detail::_f128_impl::log1p(add_finite_inline( xm1, - detail::_f128_impl::sqrt(mul_inline(xm1, add_double_inline(x, 1.0))))); + detail::_f128_impl::sqrt(mul_product_inline(xm1, add_double_finite_inline(x, 1.0))))); } else - out = detail::_f128_impl::log(add_inline( + out = detail::_f128_impl::log(add_finite_inline( x, - detail::_f128_impl::sqrt(mul_inline(sub_double_inline(x, 1.0), add_double_inline(x, 1.0))))); + detail::_f128_impl::sqrt(mul_product_inline(sub_double_finite_inline(x, 1.0), add_double_finite_inline(x, 1.0))))); - return F128_CANONICALIZE_MATH_RESULT(out); + return out; } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::atanh(const f128_s& x) @@ -1684,19 +2232,19 @@ namespace detail::_f128 if (ax <= f128_s{ 0.125 }) { - return F128_CANONICALIZE_MATH_RESULT(atanh_small_series(x)); + return atanh_small_series(x); } if (ax < f128_s{ 0.25 }) { - const f128_s r = div_inline(mul_double_inline(x, 2.0), sub_double_inline(1.0, x)); - return F128_CANONICALIZE_MATH_RESULT(mul_double_inline(detail::_f128_impl::log1p(r), 0.5)); + const f128_s r = div_prechecked_inline(mul_double_product_inline(x, 2.0), sub_double_finite_inline(1.0, x)); + return mul_double_product_inline(detail::_f128_impl::log1p(r), 0.5); } - const f128_s out = mul_double_inline( - detail::_f128_impl::log(div_inline(add_double_inline(x, 1.0), sub_double_inline(1.0, x))), + const f128_s out = mul_double_product_inline( + detail::_f128_impl::log(div_prechecked_inline(add_double_finite_inline(x, 1.0), sub_double_finite_inline(1.0, x))), 0.5); - return F128_CANONICALIZE_MATH_RESULT(out); + return out; } // erf/erfc functions @@ -1720,12 +2268,12 @@ namespace detail::_f128 else if (ax < f128_s{ 2.0 }) out = erf_positive_cheb_1_2(ax); else - out = ax > f128_s{ 27.0 } ? f128_s{ 1.0 } : sub_inline(f128_s{ 1.0 }, erfc_positive_cf(ax)); + out = ax > f128_s{ 27.0 } ? f128_s{ 1.0 } : sub_double_finite_inline(1.0, erfc_positive_cf(ax)); if (neg) out = -out; - return F128_CANONICALIZE_MATH_RESULT(out); + return out; } [[nodiscard]] BL_MSVC_NOINLINE constexpr f128_s detail::_f128_impl::erfc(const f128_s& x) @@ -1743,24 +2291,24 @@ namespace detail::_f128 { const f128_s ax = -x; if (ax < f128_s{ 1.0 }) - return F128_CANONICALIZE_MATH_RESULT(add_inline(f128_s{ 1.0 }, erf_positive_series(ax))); + return add_double_finite_inline(erf_positive_series(ax), 1.0); if (ax < f128_s{ 2.0 }) - return F128_CANONICALIZE_MATH_RESULT(add_inline(f128_s{ 1.0 }, erf_positive_cheb_1_2(ax))); + return add_double_finite_inline(erf_positive_cheb_1_2(ax), 1.0); if (ax > f128_s{ 27.0 }) return f128_s{ 2.0 }; - return F128_CANONICALIZE_MATH_RESULT(sub_inline(f128_s{ 2.0 }, erfc_positive_cf(ax))); + return sub_double_finite_inline(2.0, erfc_positive_cf(ax)); } // Keep the short series near zero and switch to the fixed midrange approximation before it gets expensive. if (x < f128_s{ 1.0 }) - return F128_CANONICALIZE_MATH_RESULT(sub_inline(f128_s{ 1.0 }, erf_positive_series(x))); + return sub_double_finite_inline(1.0, erf_positive_series(x)); if (x < f128_s{ 2.0 }) - return F128_CANONICALIZE_MATH_RESULT(sub_inline(f128_s{ 1.0 }, erf_positive_cheb_1_2(x))); + return sub_double_finite_inline(1.0, erf_positive_cheb_1_2(x)); if (x > f128_s{ 27.0 }) return f128_s{ 0.0 }; - return F128_CANONICALIZE_MATH_RESULT(erfc_positive_cf(x)); + return erfc_positive_cf(x); } // gamma functions @@ -1774,7 +2322,7 @@ namespace detail::_f128 return std::numeric_limits::infinity(); if (x > f128_s{ 0.0 }) - return F128_CANONICALIZE_MATH_RESULT(lgamma_positive_recurrence(x)); + return lgamma_positive_recurrence(x); const f128_s xi = detail::_f128_impl::trunc(x); if (xi == x) @@ -1785,11 +2333,11 @@ namespace detail::_f128 return std::numeric_limits::infinity(); const f128_s out = - sub_inline( - sub_inline(detail::_f128_impl::log(std::numbers::pi_v), detail::_f128_impl::log(detail::_f128::mag(sinpix))), - lgamma_positive_recurrence(sub_inline(f128_s{ 1.0 }, x))); + sub_finite_inline( + sub_finite_inline(detail::_f128_impl::log(std::numbers::pi_v), detail::_f128_impl::log(detail::_f128::mag(sinpix))), + lgamma_positive_recurrence(sub_double_finite_inline(1.0, x))); - return F128_CANONICALIZE_MATH_RESULT(out); + return out; } [[nodiscard]] BL_FORCE_INLINE constexpr f128_s detail::_f128_impl::tgamma(const f128_s& x) @@ -1806,7 +2354,7 @@ namespace detail::_f128 return f128_s{ signbit(x) ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(), 0.0 }; if (x > f128_s{ 0.0 }) - return F128_CANONICALIZE_MATH_RESULT(gamma_positive_recurrence(x)); + return gamma_positive_recurrence(x); const f128_s xi = detail::_f128_impl::trunc(x); if (xi == x) @@ -1816,8 +2364,8 @@ namespace detail::_f128 if (iszero(sinpix)) return std::numeric_limits::quiet_NaN(); - const f128_s out = div_inline(std::numbers::pi_v, mul_inline(sinpix, gamma_positive_recurrence(sub_inline(f128_s{ 1.0 }, x)))); - return F128_CANONICALIZE_MATH_RESULT(out); + const f128_s out = div_prechecked_inline(std::numbers::pi_v, mul_product_inline(sinpix, gamma_positive_recurrence(sub_double_finite_inline(1.0, x)))); + return out; } } // namespace bl diff --git a/include/fltx/detail/f256_arithmetic.h b/include/fltx/detail/f256_arithmetic.h index f6e39d6..b0f940b 100644 --- a/include/fltx/detail/f256_arithmetic.h +++ b/include/fltx/detail/f256_arithmetic.h @@ -17,120 +17,249 @@ namespace bl { namespace detail::_f256_runtime { - // core operations - [[nodiscard]] BL_NO_INLINE f256_s add(const f256_s& a, const f256_s& b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s sub(const f256_s& a, const f256_s& b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul(const f256_s& a, const f256_s& b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s div(const f256_s& a, const f256_s& b) noexcept; - - // double-double operations - [[nodiscard]] BL_NO_INLINE f256_s add_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s sub_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s sub_dd(detail::_f256::dd_scalar a, const f256_s& b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s div_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s div_dd(detail::_f256::dd_scalar a, const f256_s& b) noexcept; - - // double operations - [[nodiscard]] BL_NO_INLINE f256_s add_double(const f256_s& a, double b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s sub_double(const f256_s& a, double b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s sub_double(double a, const f256_s& b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_double(const f256_s& a, double b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s div_double(const f256_s& a, double b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s div_double(double a, const f256_s& b) noexcept; + // BL_VECTORCALL is intentionally selective: standalone multiplication + // regresses on MSVC x64, while add/sub/div and fused expressions benefit. + + // Adds finite f256 values through the compiled runtime boundary. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_finite(const f256_s& a, const f256_s& b) noexcept; + + // Adds f256 values and returns the canonical special-value representation. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_canonical(const f256_s& a, const f256_s& b) noexcept; + + // Adds a double-double value to f256 through the compiled runtime boundary. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept; + + // Adds a finite double to f256 through the compiled runtime boundary. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_double_finite(const f256_s& a, double b) noexcept; + + // Adds a double to f256 and returns the canonical special-value representation. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_double_canonical(const f256_s& a, double b) noexcept; + + // Subtracts finite f256 values through the compiled runtime boundary. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL sub_finite(const f256_s& a, const f256_s& b) noexcept; + + // Subtracts f256 values and returns the canonical special-value representation. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL sub_canonical(const f256_s& a, const f256_s& b) noexcept; + + // Subtracts a double-double value from f256 through the compiled runtime boundary. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL sub_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept; + + // Subtracts an f256 value from double-double through the compiled runtime boundary. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL sub_dd(detail::_f256::dd_scalar a, const f256_s& b) noexcept; + + // Subtracts a finite double from f256 through the compiled runtime boundary. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL sub_double_finite(const f256_s& a, double b) noexcept; + + // Subtracts a double from f256 and returns the canonical special-value representation. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL sub_double_canonical(const f256_s& a, double b) noexcept; + + // Subtracts f256 from a double and returns the canonical special-value representation. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL sub_double_canonical(double a, const f256_s& b) noexcept; + + // Multiplies finite f256 values through the compiled runtime boundary. + [[nodiscard]] BL_NO_INLINE f256_s mul_finite(const f256_s& a, const f256_s& b) noexcept; + + // Multiplies f256 values and returns the canonical special-value representation. + [[nodiscard]] BL_NO_INLINE f256_s mul_canonical(const f256_s& a, const f256_s& b) noexcept; + + // Multiplies f256 by double-double through the compiled runtime boundary. + [[nodiscard]] BL_NO_INLINE f256_s mul_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept; + + // Multiplies f256 by a finite double through the compiled runtime boundary. + [[nodiscard]] BL_NO_INLINE f256_s mul_double_finite(const f256_s& a, double b) noexcept; + + // Multiplies f256 by a double and returns the canonical special-value representation. + [[nodiscard]] BL_NO_INLINE f256_s mul_double_canonical(const f256_s& a, double b) noexcept; + + // Divides finite f256 values through the compiled runtime boundary. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL div_finite(const f256_s& a, const f256_s& b) noexcept; + + // Divides f256 values and returns the canonical special-value representation. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL div_canonical(const f256_s& a, const f256_s& b) noexcept; + + // Divides f256 by double-double through the compiled runtime boundary. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL div_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept; + + // Divides double-double by f256 through the compiled runtime boundary. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL div_dd(detail::_f256::dd_scalar a, const f256_s& b) noexcept; + + // Divides f256 by a finite double through the compiled runtime boundary. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL div_double_finite(const f256_s& a, double b) noexcept; + + // Divides f256 by a double and returns the canonical special-value representation. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL div_double_canonical(const f256_s& a, double b) noexcept; + + // Divides a double by f256 and returns the canonical special-value representation. + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL div_double_canonical(double a, const f256_s& b) noexcept; // fused operations - [[nodiscard]] BL_NO_INLINE f256_s sqr(const f256_s& a) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_pow2_or_double(const f256_s& a, double b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_add(const f256_s& a, const f256_s& b, const f256_s& c) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_sub(const f256_s& a, const f256_s& b, const f256_s& c) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s value_sub_mul(const f256_s& a, const f256_s& b, const f256_s& c) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_add_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_add_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_sub_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_add_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_sub_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_add_mul_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_add_mul_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_sub_mul_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_sub_mul_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_add_mul_add_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e, const f256_s& f) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_add_mul_add_mul_add_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e, const f256_s& f, const f256_s& g, const f256_s& h) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_add_add(const f256_s& a, const f256_s& b, const f256_s& c) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_sub_add(const f256_s& a, const f256_s& b, const f256_s& c) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_add_sub(const f256_s& a, const f256_s& b, const f256_s& c) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_add_add_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_add_add_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_add_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_sub_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_scaled_2_1(const f256_s& a, const f256_s& b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_scaled_1_2(const f256_s& a, const f256_s& b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_scaled_2_neg1(const f256_s& a, const f256_s& b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_scaled_1_neg2(const f256_s& a, const f256_s& b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_mul_double(const f256_s& addend, const f256_s& value, double scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s sub_mul_double(const f256_s& minuend, const f256_s& value, double scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_double_sub(const f256_s& value, double scalar, const f256_s& subtrahend) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_double_add_mul_double(const f256_s& a, double a_scalar, const f256_s& b, double b_scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_double_add_mul_double_add(const f256_s& a, double a_scalar, const f256_s& b, double b_scalar, const f256_s& c) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s div_add(const f256_s& numerator, const f256_s& a, const f256_s& b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s div_sub(const f256_s& numerator, const f256_s& a, const f256_s& b) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s div_add_double(const f256_s& numerator, const f256_s& base_denominator, double scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s div_double_sub(const f256_s& numerator, double scalar, const f256_s& base_denominator) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_add_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_sub_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s value_sub_mul_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_add_mul_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_sub_mul_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_add_add_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_sub_add_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_add_sub_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_sub_sub_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_mul_double_div(const f256_s& addend, const f256_s& value, double scalar, const f256_s& denominator) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s sub_mul_double_div(const f256_s& minuend, const f256_s& value, double scalar, const f256_s& denominator) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_double_sub_div(const f256_s& value, double scalar, const f256_s& subtrahend, const f256_s& denominator) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_add_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_sub_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s value_sub_mul_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_add_mul_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator, double scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_sub_mul_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator, double scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_add_add_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_sub_add_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_add_sub_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_sub_sub_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s add_mul_double_div_add_double(const f256_s& addend, const f256_s& value, double value_scalar, const f256_s& denominator, double denominator_scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s sub_mul_double_div_add_double(const f256_s& minuend, const f256_s& value, double value_scalar, const f256_s& denominator, double denominator_scalar) noexcept; - [[nodiscard]] BL_NO_INLINE f256_s mul_double_sub_div_add_double(const f256_s& value, double value_scalar, const f256_s& subtrahend, const f256_s& denominator, double denominator_scalar) noexcept; - - // runtime math - [[nodiscard]] BL_NO_INLINE f256_s floor(const f256_s& a); - [[nodiscard]] BL_NO_INLINE f256_s ceil(const f256_s& a); - [[nodiscard]] BL_NO_INLINE f256_s trunc(const f256_s& a); - [[nodiscard]] BL_NO_INLINE f256_s pow10_256(int k); + [[nodiscard]] BL_NO_INLINE f256_s sqr(const f256_s& a) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s mul_pow2_or_double(const f256_s& a, double b) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_add(const f256_s& a, const f256_s& b, const f256_s& c) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_sub(const f256_s& a, const f256_s& b, const f256_s& c) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL value_sub_mul(const f256_s& a, const f256_s& b, const f256_s& c) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_add_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_add_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_sub_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_add_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_sub_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_add_mul_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_add_mul_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_sub_mul_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_sub_mul_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_add_mul_add_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e, const f256_s& f) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_add_mul_add_mul_add_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e, const f256_s& f, const f256_s& g, const f256_s& h) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_add_add(const f256_s& a, const f256_s& b, const f256_s& c) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_sub_add(const f256_s& a, const f256_s& b, const f256_s& c) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_add_sub(const f256_s& a, const f256_s& b, const f256_s& c) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_add_add_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_add_add_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_add_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_sub_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_scaled_2_1(const f256_s& a, const f256_s& b) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_scaled_1_2(const f256_s& a, const f256_s& b) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_scaled_2_neg1(const f256_s& a, const f256_s& b) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_scaled_1_neg2(const f256_s& a, const f256_s& b) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_mul_double(const f256_s& addend, const f256_s& value, double scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL sub_mul_double(const f256_s& minuend, const f256_s& value, double scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_double_sub(const f256_s& value, double scalar, const f256_s& subtrahend) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_double_add_mul_double(const f256_s& a, double a_scalar, const f256_s& b, double b_scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_double_add_mul_double_add(const f256_s& a, double a_scalar, const f256_s& b, double b_scalar, const f256_s& c) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL div_add(const f256_s& numerator, const f256_s& a, const f256_s& b) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL div_sub(const f256_s& numerator, const f256_s& a, const f256_s& b) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL div_add_double(const f256_s& numerator, const f256_s& base_denominator, double scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL div_double_sub(const f256_s& numerator, double scalar, const f256_s& base_denominator) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_add_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_sub_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL value_sub_mul_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_add_mul_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_sub_mul_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_add_add_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_sub_add_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_add_sub_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_sub_sub_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_mul_double_div(const f256_s& addend, const f256_s& value, double scalar, const f256_s& denominator) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL sub_mul_double_div(const f256_s& minuend, const f256_s& value, double scalar, const f256_s& denominator) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_double_sub_div(const f256_s& value, double scalar, const f256_s& subtrahend, const f256_s& denominator) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_add_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_sub_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL value_sub_mul_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_add_mul_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator, double scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_sub_mul_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator, double scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_add_add_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_sub_add_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_add_sub_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_sub_sub_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL add_mul_double_div_add_double(const f256_s& addend, const f256_s& value, double value_scalar, const f256_s& denominator, double denominator_scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL sub_mul_double_div_add_double(const f256_s& minuend, const f256_s& value, double value_scalar, const f256_s& denominator, double denominator_scalar) noexcept; + [[nodiscard]] BL_NO_INLINE f256_s BL_VECTORCALL mul_double_sub_div_add_double(const f256_s& value, double value_scalar, const f256_s& subtrahend, const f256_s& denominator, double denominator_scalar) noexcept; } // namespace detail::_f256_runtime namespace detail::_f256 // primitives and kernels { - // public arithmetic special cases + [[nodiscard]] BL_FORCE_INLINE constexpr bool is_subnormal_limb(double value) noexcept + { + constexpr std::uint64_t magnitude_mask = 0x7fffffffffffffffull; + constexpr std::uint64_t exponent_mask = 0x7ff0000000000000ull; + const std::uint64_t magnitude = + std::bit_cast(value) & magnitude_mask; + return magnitude != 0 && (magnitude & exponent_mask) == 0; + } + +#if BL_FP_BARRIER_ACTIVE + [[nodiscard]] BL_FORCE_INLINE constexpr bool has_subnormal_limb( + const f256_s& value) noexcept + { + return is_subnormal_limb(value.x0) || is_subnormal_limb(value.x1) || + is_subnormal_limb(value.x2) || is_subnormal_limb(value.x3); + } + + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s scale_terms_guarded( + const f256_s& value, + int exponent) noexcept + { + return { + detail::fp::ldexp(value.x0, exponent), + detail::fp::ldexp(value.x1, exponent), + detail::fp::ldexp(value.x2, exponent), + detail::fp::ldexp(value.x3, exponent) + }; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr bool needs_product_input_scale( + const f256_s& value) noexcept + { + const double limbs[] = { value.x0, value.x1, value.x2, value.x3 }; + for (double limb : limbs) + { + if (!detail::fp::iszero_or_inf_or_nan(limb) && + detail::fp::frexp_exponent(limb) < -900) + { + return true; + } + } + return false; + } + + [[nodiscard]] BL_FORCE_INLINE f256_s mul_fastmath_guarded( + const f256_s& a, + const f256_s& b) noexcept + { + constexpr int input_scale = 512; + int a_scale = needs_product_input_scale(a) ? input_scale : 0; + int b_scale = needs_product_input_scale(b) ? input_scale : 0; + int result_scale = -(a_scale + b_scale); + + if (a_scale != 0 || b_scale != 0) [[unlikely]] + { + const int result_exponent = detail::fp::frexp_exponent(a.x0) + + detail::fp::frexp_exponent(b.x0) - 1 - result_scale; + if (result_exponent > 900 && a_scale != 0 && b_scale == 0) + { + b_scale = -input_scale; + result_scale = 0; + } + else if (result_exponent > 900 && b_scale != 0 && a_scale == 0) + { + a_scale = -input_scale; + result_scale = 0; + } + + const f256_s product = detail::_f256_runtime::mul_finite( + scale_terms_guarded(a, a_scale), + scale_terms_guarded(b, b_scale)); + return result_scale == 0 + ? product + : scale_terms_guarded(product, result_scale); + } + + return detail::_f256_runtime::mul_finite(a, b); + } +#endif + + // Constructs the canonical quiet NaN used by public f256 arithmetic. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s quiet_nan() noexcept { - return { std::numeric_limits::quiet_NaN(), 0.0, 0.0, 0.0 }; + return { std::bit_cast(0x7ff8000000000000ull), 0.0, 0.0, 0.0 }; } + // Constructs a canonical signed infinity for public f256 arithmetic. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s signed_infinity(bool negative) noexcept { - const double inf = std::numeric_limits::infinity(); - return { negative ? -inf : inf, 0.0, 0.0, 0.0 }; + return { std::bit_cast(negative ? 0xfff0000000000000ull : 0x7ff0000000000000ull), 0.0, 0.0, 0.0 }; } + // Constructs a canonical signed zero for public f256 arithmetic. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s signed_zero(bool negative) noexcept { return { std::bit_cast(negative ? 0x8000000000000000ull : 0ull), 0.0, 0.0, 0.0 }; } + // Resolves non-finite addition results according to the public f256 policy. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s add_special(const f256_s& a, const f256_s& b) noexcept { if (detail::fp::isnan(a.x0) || detail::fp::isnan(b.x0)) @@ -145,11 +274,13 @@ namespace detail::_f256 // primitives and kernels return signed_infinity(signbit(b.x0)); } + // Resolves non-finite subtraction results according to the public f256 policy. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_special(const f256_s& a, const f256_s& b) noexcept { return add_special(a, f256_s{ -b.x0, -b.x1, -b.x2, -b.x3 }); } + // Resolves non-finite and signed-zero multiplication results for public f256 arithmetic. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_special(const f256_s& a, const f256_s& b) noexcept { if (detail::fp::isnan(a.x0) || detail::fp::isnan(b.x0)) @@ -160,9 +291,14 @@ namespace detail::_f256 // primitives and kernels if ((a_inf && b.x0 == 0.0) || (b_inf && a.x0 == 0.0)) return quiet_nan(); - return signed_infinity(bl::signbit(a) != bl::signbit(b)); + const bool negative = bl::signbit(a) != bl::signbit(b); + if (bl::iszero(a) || bl::iszero(b)) + return signed_zero(negative); + + return signed_infinity(negative); } + // Resolves zero, infinity, and NaN division cases for public f256 arithmetic. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_special(const f256_s& a, const f256_s& b) noexcept { if (detail::fp::isnan(a.x0) || detail::fp::isnan(b.x0)) @@ -183,7 +319,7 @@ namespace detail::_f256 // primitives and kernels return signed_zero(negative); } - // scalar accumulation + // Accumulates one double into an f256 expansion with error-free sums. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s add_scalar_precise(const f256_s& a, double b) noexcept { double s0{}, e0{}; two_sum_precise(a.x0, b, s0, e0); @@ -194,6 +330,7 @@ namespace detail::_f256 // primitives and kernels return renorm5(s0, s1, s2, s3, e3); } + // Compresses an arbitrary expansion into a normalized f256 value. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s from_expansion_fast(const double* h, int n) noexcept { if (n <= 0) return {}; @@ -208,15 +345,16 @@ namespace detail::_f256 // primitives and kernels return sum; } - // core arithmetic - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s add_inline(const f256_s& a, const f256_s& b) noexcept + // Addition + // Adds f256 expansions without applying canonical special-value handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s add_finite_inline(const f256_s& a, const f256_s& b) noexcept { double s0{}, e0{}; double s1{}, e1{}; double s2{}, e2{}; double s3{}, e3{}; - #if BL_F256_ENABLE_SIMD + #if FLTX_F256_ENABLE_SIMD if (f256_runtime_addsub_simd_enabled()) { const simd::f64x2 a01 = simd::f64x2_set(a.x0, a.x1); @@ -251,14 +389,69 @@ namespace detail::_f256 // primitives and kernels return renorm5(s0, s1, s2, s3, e0); } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_inline(const f256_s& a, const f256_s& b) noexcept + // Adds a double to f256 without canonical special-value handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s add_double_finite_inline(const f256_s& a, double b) noexcept + { + double c0{}, c1{}, c2{}, c3{}, e{}; + + two_sum_precise(a.x0, b, c0, e); + if (e == 0.0) return renorm4(c0, a.x1, a.x2, a.x3); + + two_sum_precise(a.x1, e, c1, e); + if (e == 0.0) return renorm4(c0, c1, a.x2, a.x3); + + two_sum_precise(a.x2, e, c2, e); + if (e == 0.0) return renorm4(c0, c1, c2, a.x3); + + two_sum_precise(a.x3, e, c3, e); + if (e == 0.0) return renorm4(c0, c1, c2, c3); + + return renorm5(c0, c1, c2, c3, e); + } + + // Adds an f256 expansion to a double through the finite scalar kernel. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s add_double_finite_inline(double a, const f256_s& b) noexcept + { + return add_double_finite_inline(b, a); + } + + // Adds f256 values and canonicalizes a non-finite result. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s add_canonical_inline(const f256_s& a, const f256_s& b) noexcept + { + const f256_s out = add_finite_inline(a, b); + if (detail::fp::isinf_or_nan(out.x0)) [[unlikely]] + return add_special(a, b); + return out; + } + + // Adds a double to f256 and canonicalizes a non-finite result. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s add_double_canonical_inline(const f256_s& a, double b) noexcept + { + const f256_s out = add_double_finite_inline(a, b); + if (detail::fp::isinf_or_nan(out.x0)) [[unlikely]] + return add_special(a, f256_s{ b, 0.0, 0.0, 0.0 }); + return out; + } + + // Adds double-double to f256 through constexpr or compiled canonical dispatch. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s add_dd(const f256_s& a, dd_scalar b) noexcept + { + BL_CONSTEXPR_RUNTIME_DISPATCH( + add_canonical_inline(a, f256_s{ b.hi, b.lo, 0.0, 0.0 }), + detail::_f256_runtime::add_dd(a, b) + ); + } + + // Subtraction + // Subtracts f256 expansions without applying canonical special-value handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_finite_inline(const f256_s& a, const f256_s& b) noexcept { double s0{}, e0{}; double s1{}, e1{}; double s2{}, e2{}; double s3{}, e3{}; - #if BL_F256_ENABLE_SIMD + #if FLTX_F256_ENABLE_SIMD if (f256_runtime_addsub_simd_enabled()) { const simd::f64x2 a01 = simd::f64x2_set(a.x0, a.x1); @@ -293,19 +486,79 @@ namespace detail::_f256 // primitives and kernels return renorm5(s0, s1, s2, s3, e0); } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_inline(const f256_s& a, const f256_s& b) noexcept + // Subtracts a double from f256 without canonical special-value handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_double_finite_inline(const f256_s& a, double b) noexcept { - using namespace detail::_f256; + return add_double_finite_inline(a, -b); + } - double p0{}, p1{}, p2{}, p3{}, p4{}, p5{}; - double q0{}, q1{}, q2{}, q3{}, q4{}, q5{}; - double p6{}, p7{}, p8{}, p9{}; - double q6{}, q7{}, q8{}, q9{}; - double r0{}, r1{}; - double t0{}, t1{}; - double s0{}, s1{}, s2{}; + // Subtracts f256 from a double through the finite scalar kernel. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_double_finite_inline(double a, const f256_s& b) noexcept + { + return add_double_finite_inline(-b, a); + } + + // Subtracts f256 values and canonicalizes a non-finite result. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_canonical_inline(const f256_s& a, const f256_s& b) noexcept + { + const f256_s out = sub_finite_inline(a, b); + if (detail::fp::isinf_or_nan(out.x0)) [[unlikely]] + return sub_special(a, b); + return out; + } + + // Subtracts a double from f256 and canonicalizes a non-finite result. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_double_canonical_inline(const f256_s& a, double b) noexcept + { + const f256_s out = sub_double_finite_inline(a, b); + if (detail::fp::isinf_or_nan(out.x0)) [[unlikely]] + return sub_special(a, f256_s{ b, 0.0, 0.0, 0.0 }); + return out; + } + + // Subtracts f256 from a double and canonicalizes a non-finite result. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_double_canonical_inline(double a, const f256_s& b) noexcept + { + const f256_s out = sub_double_finite_inline(a, b); + if (detail::fp::isinf_or_nan(out.x0)) [[unlikely]] + return sub_special(f256_s{ a, 0.0, 0.0, 0.0 }, b); + return out; + } + + // Subtracts double-double from f256 through constexpr or compiled canonical dispatch. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_dd(const f256_s& a, dd_scalar b) noexcept + { + BL_CONSTEXPR_RUNTIME_DISPATCH( + sub_canonical_inline(a, f256_s{ b.hi, b.lo, 0.0, 0.0 }), + detail::_f256_runtime::sub_dd(a, b) + ); + } + + // Subtracts f256 from double-double through constexpr or compiled canonical dispatch. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_dd(dd_scalar a, const f256_s& b) noexcept + { + BL_CONSTEXPR_RUNTIME_DISPATCH( + sub_canonical_inline(f256_s{ a.hi, a.lo, 0.0, 0.0 }, b), + detail::_f256_runtime::sub_dd(a, b) + ); + } - #if BL_F256_ENABLE_SIMD && (BL_FLTX_HAS_SSE2 || BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) + // Multiplication + // Stores the ten leading products and their exact product errors. + struct product_terms + { + double p[10]{}; + double q[10]{}; + }; + + // Fills f256 product terms with hardware FMA, using SIMD when available. + BL_FORCE_INLINE void fill_mul_products_fma( + const f256_s& a, + const f256_s& b, + product_terms& products) noexcept + { + #if FLTX_F256_ENABLE_SIMD && \ + ((FLTX_HAS_SSE2 && (FLTX_HAS_X86_FMA || FLTX_GUARDED_X86_FMA)) || FLTX_HAS_NEON) if (f256_runtime_product_simd_enabled()) { simd::f64x2 p01{}, q01{}; @@ -314,125 +567,386 @@ namespace detail::_f256 // primitives and kernels simd::f64x2 p67{}, q67{}; simd::f64x2 p89{}, q89{}; - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x0, a.x0), simd::f64x2_set(b.x0, b.x1), p01, q01); - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x1, a.x0), simd::f64x2_set(b.x0, b.x2), p23, q23); - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x1, a.x2), simd::f64x2_set(b.x1, b.x0), p45, q45); - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x0, a.x1), simd::f64x2_set(b.x3, b.x2), p67, q67); - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x2, a.x3), simd::f64x2_set(b.x1, b.x0), p89, q89); + simd::f64x2_two_prod_fma(simd::f64x2_set(a.x0, a.x0), simd::f64x2_set(b.x0, b.x1), p01, q01); + simd::f64x2_two_prod_fma(simd::f64x2_set(a.x1, a.x0), simd::f64x2_set(b.x0, b.x2), p23, q23); + simd::f64x2_two_prod_fma(simd::f64x2_set(a.x1, a.x2), simd::f64x2_set(b.x1, b.x0), p45, q45); + simd::f64x2_two_prod_fma(simd::f64x2_set(a.x0, a.x1), simd::f64x2_set(b.x3, b.x2), p67, q67); + simd::f64x2_two_prod_fma(simd::f64x2_set(a.x2, a.x3), simd::f64x2_set(b.x1, b.x0), p89, q89); + + simd::f64x2_store(p01, products.p[0], products.p[1]); + simd::f64x2_store(q01, products.q[0], products.q[1]); + simd::f64x2_store(p23, products.p[2], products.p[3]); + simd::f64x2_store(q23, products.q[2], products.q[3]); + simd::f64x2_store(p45, products.p[4], products.p[5]); + simd::f64x2_store(q45, products.q[4], products.q[5]); + simd::f64x2_store(p67, products.p[6], products.p[7]); + simd::f64x2_store(q67, products.q[6], products.q[7]); + simd::f64x2_store(p89, products.p[8], products.p[9]); + simd::f64x2_store(q89, products.q[8], products.q[9]); + return; + } + #endif - simd::f64x2_store(p01, p0, p1); - simd::f64x2_store(q01, q0, q1); - simd::f64x2_store(p23, p2, p3); - simd::f64x2_store(q23, q2, q3); - simd::f64x2_store(p45, p4, p5); - simd::f64x2_store(q45, q4, q5); - simd::f64x2_store(p67, p6, p7); - simd::f64x2_store(q67, q6, q7); - simd::f64x2_store(p89, p8, p9); - simd::f64x2_store(q89, q8, q9); + detail::fp::two_prod_fma(a.x0, b.x0, products.p[0], products.q[0]); + detail::fp::two_prod_fma(a.x0, b.x1, products.p[1], products.q[1]); + detail::fp::two_prod_fma(a.x1, b.x0, products.p[2], products.q[2]); + detail::fp::two_prod_fma(a.x0, b.x2, products.p[3], products.q[3]); + detail::fp::two_prod_fma(a.x1, b.x1, products.p[4], products.q[4]); + detail::fp::two_prod_fma(a.x2, b.x0, products.p[5], products.q[5]); + detail::fp::two_prod_fma(a.x0, b.x3, products.p[6], products.q[6]); + detail::fp::two_prod_fma(a.x1, b.x2, products.p[7], products.q[7]); + detail::fp::two_prod_fma(a.x2, b.x1, products.p[8], products.q[8]); + detail::fp::two_prod_fma(a.x3, b.x0, products.p[9], products.q[9]); + } + + // Fills f256 product terms with ordinary Dekker splitting. + BL_FORCE_INLINE constexpr void fill_mul_products_dekker( + const f256_s& a, + const f256_s& b, + product_terms& products) noexcept + { + #if FLTX_F256_ENABLE_SIMD && (FLTX_HAS_SSE2 || FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) + if (f256_runtime_product_simd_enabled()) + { + simd::f64x2 p01{}, q01{}; + simd::f64x2 p23{}, q23{}; + simd::f64x2 p45{}, q45{}; + simd::f64x2 p67{}, q67{}; + simd::f64x2 p89{}, q89{}; + + simd::f64x2_two_prod_dekker(simd::f64x2_set(a.x0, a.x0), simd::f64x2_set(b.x0, b.x1), p01, q01); + simd::f64x2_two_prod_dekker(simd::f64x2_set(a.x1, a.x0), simd::f64x2_set(b.x0, b.x2), p23, q23); + simd::f64x2_two_prod_dekker(simd::f64x2_set(a.x1, a.x2), simd::f64x2_set(b.x1, b.x0), p45, q45); + simd::f64x2_two_prod_dekker(simd::f64x2_set(a.x0, a.x1), simd::f64x2_set(b.x3, b.x2), p67, q67); + simd::f64x2_two_prod_dekker(simd::f64x2_set(a.x2, a.x3), simd::f64x2_set(b.x1, b.x0), p89, q89); + + simd::f64x2_store(p01, products.p[0], products.p[1]); + simd::f64x2_store(q01, products.q[0], products.q[1]); + simd::f64x2_store(p23, products.p[2], products.p[3]); + simd::f64x2_store(q23, products.q[2], products.q[3]); + simd::f64x2_store(p45, products.p[4], products.p[5]); + simd::f64x2_store(q45, products.q[4], products.q[5]); + simd::f64x2_store(p67, products.p[6], products.p[7]); + simd::f64x2_store(q67, products.q[6], products.q[7]); + simd::f64x2_store(p89, products.p[8], products.p[9]); + simd::f64x2_store(q89, products.q[8], products.q[9]); + return; + } + #endif + + detail::fp::two_prod_precise_dekker(a.x0, b.x0, products.p[0], products.q[0]); + detail::fp::two_prod_precise_dekker(a.x0, b.x1, products.p[1], products.q[1]); + detail::fp::two_prod_precise_dekker(a.x1, b.x0, products.p[2], products.q[2]); + detail::fp::two_prod_precise_dekker(a.x0, b.x2, products.p[3], products.q[3]); + detail::fp::two_prod_precise_dekker(a.x1, b.x1, products.p[4], products.q[4]); + detail::fp::two_prod_precise_dekker(a.x2, b.x0, products.p[5], products.q[5]); + detail::fp::two_prod_precise_dekker(a.x0, b.x3, products.p[6], products.q[6]); + detail::fp::two_prod_precise_dekker(a.x1, b.x2, products.p[7], products.q[7]); + detail::fp::two_prod_precise_dekker(a.x2, b.x1, products.p[8], products.q[8]); + detail::fp::two_prod_precise_dekker(a.x3, b.x0, products.p[9], products.q[9]); + } + + // Selects FMA or ordinary Dekker product formation for the current build and runtime. + BL_FORCE_INLINE constexpr void fill_mul_products_auto( + const f256_s& a, + const f256_s& b, + product_terms& products) noexcept + { + #if FLTX_HAS_RUNTIME_FMA_PATH + if (!bl::detail::is_constant_evaluated() && + detail::fp::runtime_hardware_fma_enabled()) + { + fill_mul_products_fma(a, b, products); + return; } - else #endif + fill_mul_products_dekker(a, b, products); + } + + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + // Fills f256 product terms with range-safe Dekker splitting. + BL_FORCE_INLINE constexpr void fill_mul_products_range_safe_dekker( + const f256_s& a, + const f256_s& b, + product_terms& products) noexcept + { + detail::fp::two_prod_precise_dekker_range_safe(a.x0, b.x0, products.p[0], products.q[0]); + detail::fp::two_prod_precise_dekker_range_safe(a.x0, b.x1, products.p[1], products.q[1]); + detail::fp::two_prod_precise_dekker_range_safe(a.x1, b.x0, products.p[2], products.q[2]); + detail::fp::two_prod_precise_dekker_range_safe(a.x0, b.x2, products.p[3], products.q[3]); + detail::fp::two_prod_precise_dekker_range_safe(a.x1, b.x1, products.p[4], products.q[4]); + detail::fp::two_prod_precise_dekker_range_safe(a.x2, b.x0, products.p[5], products.q[5]); + detail::fp::two_prod_precise_dekker_range_safe(a.x0, b.x3, products.p[6], products.q[6]); + detail::fp::two_prod_precise_dekker_range_safe(a.x1, b.x2, products.p[7], products.q[7]); + detail::fp::two_prod_precise_dekker_range_safe(a.x2, b.x1, products.p[8], products.q[8]); + detail::fp::two_prod_precise_dekker_range_safe(a.x3, b.x0, products.p[9], products.q[9]); + } + + // Selects FMA or range-safe Dekker product formation for the current runtime. + BL_FORCE_INLINE constexpr void fill_mul_products_range_safe_auto( + const f256_s& a, + const f256_s& b, + product_terms& products) noexcept + { + #if FLTX_HAS_RUNTIME_FMA_PATH + if (!bl::detail::is_constant_evaluated() && + detail::fp::runtime_hardware_fma_enabled()) { - two_prod_precise(a.x0, b.x0, p0, q0); - two_prod_precise(a.x0, b.x1, p1, q1); - two_prod_precise(a.x1, b.x0, p2, q2); - two_prod_precise(a.x0, b.x2, p3, q3); - two_prod_precise(a.x1, b.x1, p4, q4); - two_prod_precise(a.x2, b.x0, p5, q5); - two_prod_precise(a.x0, b.x3, p6, q6); - two_prod_precise(a.x1, b.x2, p7, q7); - two_prod_precise(a.x2, b.x1, p8, q8); - two_prod_precise(a.x3, b.x0, p9, q9); + fill_mul_products_fma(a, b, products); + return; } + #endif + fill_mul_products_range_safe_dekker(a, b, products); + } + #endif - three_sum(p1, p2, q0); - three_sum(p2, q1, q2); - three_sum(p3, p4, p5); + // Accumulates and renormalizes previously formed f256 product terms. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s finish_mul_product_inline( + const f256_s& a, + const f256_s& b, + product_terms products) noexcept + { + double r0{}, r1{}; + double t0{}, t1{}; + double s0{}, s1{}, s2{}; - two_sum_precise(p2, p3, s0, t0); - two_sum_precise(q1, p4, s1, t1); - s2 = q2 + p5; + three_sum(products.p[1], products.p[2], products.q[0]); + three_sum(products.p[2], products.q[1], products.q[2]); + three_sum(products.p[3], products.p[4], products.p[5]); + + two_sum_precise(products.p[2], products.p[3], s0, t0); + two_sum_precise(products.q[1], products.p[4], s1, t1); + s2 = products.q[2] + products.p[5]; two_sum_precise(s1, t0, s1, t0); s2 += (t0 + t1); - two_sum_precise(q0, q3, q0, q3); - two_sum_precise(q4, q5, q4, q5); - two_sum_precise(p6, p7, p6, p7); - two_sum_precise(p8, p9, p8, p9); + two_sum_precise(products.q[0], products.q[3], products.q[0], products.q[3]); + two_sum_precise(products.q[4], products.q[5], products.q[4], products.q[5]); + two_sum_precise(products.p[6], products.p[7], products.p[6], products.p[7]); + two_sum_precise(products.p[8], products.p[9], products.p[8], products.p[9]); - two_sum_precise(q0, q4, t0, t1); t1 += (q3 + q5); - two_sum_precise(p6, p8, r0, r1); r1 += (p7 + p9); - two_sum_precise(t0, r0, q3, q4); q4 += (t1 + r1); + two_sum_precise(products.q[0], products.q[4], t0, t1); + t1 += products.q[3] + products.q[5]; + two_sum_precise(products.p[6], products.p[8], r0, r1); + r1 += products.p[7] + products.p[9]; + two_sum_precise(t0, r0, products.q[3], products.q[4]); + products.q[4] += t1 + r1; - two_sum_precise(q3, s1, t0, t1); - t1 += q4; - t1 += a.x1 * b.x3 + a.x2 * b.x2 + a.x3 * b.x1 + q6 + q7 + q8 + q9 + s2; + two_sum_precise(products.q[3], s1, t0, t1); + t1 += products.q[4]; + t1 += a.x1 * b.x3 + a.x2 * b.x2 + a.x3 * b.x1 + + products.q[6] + products.q[7] + products.q[8] + products.q[9] + s2; - return renorm5(p0, p1, s0, t0, t1); + return renorm5(products.p[0], products.p[1], s0, t0, t1); } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_inline(const f256_s& a, const f256_s& b) noexcept + // Forms and renormalizes an f256 product through the ordinary product path. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_product_inline( + const f256_s& a, + const f256_s& b) noexcept { - using namespace detail::_f256; - - //if (b.x1 == 0.0 && b.x2 == 0.0 && b.x3 == 0.0) [[unlikely]] - // return a / b.x0; - - const double inv_b0 = 1.0 / b.x0; - - const double q0 = a.x0 * inv_b0; - if (detail::fp::isinf_or_nan(q0)) [[unlikely]] - return f256_s{ q0, 0.0, 0.0, 0.0 }; - if (q0 == 0.0 && bl::iszero(a)) [[unlikely]] - return signed_zero(bl::signbit(a) != bl::signbit(b)); + product_terms products{}; + fill_mul_products_auto(a, b, products); + return finish_mul_product_inline(a, b, products); + } - f256_s r = sub_mul_scalar_exact(a, b, q0); +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + // Forms and renormalizes an f256 product through the range-safe product path. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_product_range_safe_inline( + const f256_s& a, + const f256_s& b) noexcept + { + product_terms products{}; + fill_mul_products_range_safe_auto(a, b, products); + return finish_mul_product_inline(a, b, products); + } +#endif - const double q1 = r.x0 * inv_b0; - r = sub_mul_scalar_exact(r, b, q1); + // Converts a formed product into the canonical public multiplication result. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s finish_mul_canonical_inline( + const f256_s& a, + const f256_s& b, + const f256_s& out) noexcept + { + if (detail::fp::isinf_or_nan(out.x0)) [[unlikely]] + return mul_special(a, b); + if (out.x0 == 0.0 && (bl::iszero(a) || bl::iszero(b))) [[unlikely]] + return mul_special(a, b); + return out; + } - const double q2 = r.x0 * inv_b0; - r = sub_mul_scalar_fast(r, b, q2); + // Multiplies f256 values with range protection and canonical special handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_canonical_inline(const f256_s& a, const f256_s& b) noexcept + { + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + if (detail::fp::dekker_product_needs_scaling(a.x0, b.x0)) [[unlikely]] + return finish_mul_canonical_inline(a, b, mul_product_range_safe_inline(a, b)); + #endif - const double q3 = r.x0 * inv_b0; - r = sub_mul_scalar_fast(r, b, q3); + return finish_mul_canonical_inline(a, b, mul_product_inline(a, b)); + } - const double q4 = r.x0 * inv_b0; + // Multiplies finite f256 values while retaining Dekker range protection. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_finite_inline( + const f256_s& a, + const f256_s& b) noexcept + { + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + return detail::fp::dekker_product_needs_scaling(a.x0, b.x0) + ? mul_product_range_safe_inline(a, b) + : mul_product_inline(a, b); + #else + return mul_product_inline(a, b); + #endif + } - return renorm5(q0, q1, q2, q3, q4); + // Multiplies f256 values with range-safe Dekker formation and canonical finalization. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_dekker_range_safe_canonical_inline(const f256_s& a, const f256_s& b) noexcept + { + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + return finish_mul_canonical_inline(a, b, mul_product_range_safe_inline(a, b)); + #else + return mul_canonical_inline(a, b); + #endif } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sqr_inline(const f256_s& a) noexcept + // Forms an f256-by-double product with the ordinary product path. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_double_product_inline(const f256_s& a, double b) noexcept { using namespace detail::_f256; - double p0{}, p1{}, p2{}, p3{}, p4{}, p5{}; - double q0{}, q1{}, q2{}, q3{}, q4{}, q5{}; - double p6{}, p7{}, p8{}, p9{}; - double q6{}, q7{}, q8{}, q9{}; - double r0{}, r1{}; - double t0{}, t1{}; - double s0{}, s1{}, s2{}; + double p0{}, p1{}, p2{}, p3{}; + double q0{}, q1{}, q2{}; + double s0{}, s1{}, s2{}, s3{}, s4{}; - #if BL_F256_ENABLE_SIMD && (BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) + #if FLTX_F256_ENABLE_SIMD && (FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) if (f256_runtime_simd_enabled()) { simd::f64x2 p01{}, q01{}; - simd::f64x2 p34{}, q34{}; - simd::f64x2 p67{}, q67{}; - - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x0, a.x0), simd::f64x2_set(a.x0, a.x1), p01, q01); - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x0, a.x1), simd::f64x2_set(a.x2, a.x1), p34, q34); - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x0, a.x1), simd::f64x2_set(a.x3, a.x2), p67, q67); - + simd::f64x2 p23{}, q23{}; + const simd::f64x2 bv = simd::f64x2_splat(b); + simd::f64x2_two_prod_precise(simd::f64x2_set(a.x0, a.x1), bv, p01, q01); + simd::f64x2_two_prod_precise(simd::f64x2_set(a.x2, a.x3), bv, p23, q23); + double ignored{}; simd::f64x2_store(p01, p0, p1); simd::f64x2_store(q01, q0, q1); - simd::f64x2_store(p34, p3, p4); - simd::f64x2_store(q34, q3, q4); - simd::f64x2_store(p67, p6, p7); - simd::f64x2_store(q67, q6, q7); - } + simd::f64x2_store(p23, p2, p3); + simd::f64x2_store(q23, q2, ignored); + } + else + #endif + { + two_prod_precise(a.x0, b, p0, q0); + two_prod_precise(a.x1, b, p1, q1); + two_prod_precise(a.x2, b, p2, q2); + p3 = a.x3 * b; + } + + s0 = p0; + two_sum_precise(q0, p1, s1, s2); + three_sum(s2, q1, p2); + three_sum2(q1, q2, p3); + s3 = q1; + s4 = q2 + p2; + + return renorm5(s0, s1, s2, s3, s4); + } + +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + // Forms an f256-by-double product with range-safe Dekker splitting. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_double_product_range_safe_inline(const f256_s& a, double b) noexcept + { + using namespace detail::_f256; + + double p0{}, p1{}, p2{}, p3{}; + double q0{}, q1{}, q2{}; + double s0{}, s1{}, s2{}, s3{}, s4{}; + + detail::fp::two_prod_precise_range_safe(a.x0, b, p0, q0); + detail::fp::two_prod_precise_range_safe(a.x1, b, p1, q1); + detail::fp::two_prod_precise_range_safe(a.x2, b, p2, q2); + p3 = a.x3 * b; + + s0 = p0; + two_sum_precise(q0, p1, s1, s2); + three_sum(s2, q1, p2); + three_sum2(q1, q2, p3); + s3 = q1; + s4 = q2 + p2; + + return renorm5(s0, s1, s2, s3, s4); + } +#endif + + // Multiplies a double by f256 through the ordinary scalar product kernel. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_double_product_inline(double a, const f256_s& b) noexcept + { + return mul_double_product_inline(b, a); + } + + // Multiplies f256 by a double with range protection and canonical special handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_double_canonical_inline(const f256_s& a, double b) noexcept + { + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + const f256_s out = detail::fp::dekker_product_needs_scaling(a.x0, b) + ? mul_double_product_range_safe_inline(a, b) + : mul_double_product_inline(a, b); + #else + const f256_s out = mul_double_product_inline(a, b); + #endif + + if (detail::fp::isinf_or_nan(out.x0)) [[unlikely]] + return mul_special(a, f256_s{ b, 0.0, 0.0, 0.0 }); + if (out.x0 == 0.0 && (bl::iszero(a) || b == 0.0)) [[unlikely]] + return mul_special(a, f256_s{ b, 0.0, 0.0, 0.0 }); + return out; + } + + // Multiplies finite f256 by a double while retaining Dekker range protection. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_double_finite_inline( + const f256_s& a, + double b) noexcept + { + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + return detail::fp::dekker_product_needs_scaling(a.x0, b) + ? mul_double_product_range_safe_inline(a, b) + : mul_double_product_inline(a, b); + #else + return mul_double_product_inline(a, b); + #endif + } + + // Squares an f256 expansion through its specialized symmetric product kernel. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sqr_inline(const f256_s& a) noexcept + { + using namespace detail::_f256; + + double p0{}, p1{}, p2{}, p3{}, p4{}, p5{}; + double q0{}, q1{}, q2{}, q3{}, q4{}, q5{}; + double p6{}, p7{}, p8{}, p9{}; + double q6{}, q7{}, q8{}, q9{}; + double r0{}, r1{}; + double t0{}, t1{}; + double s0{}, s1{}, s2{}; + + #if FLTX_F256_ENABLE_SIMD && (FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) + if (f256_runtime_simd_enabled()) + { + simd::f64x2 p01{}, q01{}; + simd::f64x2 p34{}, q34{}; + simd::f64x2 p67{}, q67{}; + + simd::f64x2_two_prod_precise(simd::f64x2_set(a.x0, a.x0), simd::f64x2_set(a.x0, a.x1), p01, q01); + simd::f64x2_two_prod_precise(simd::f64x2_set(a.x0, a.x1), simd::f64x2_set(a.x2, a.x1), p34, q34); + simd::f64x2_two_prod_precise(simd::f64x2_set(a.x0, a.x1), simd::f64x2_set(a.x3, a.x2), p67, q67); + + simd::f64x2_store(p01, p0, p1); + simd::f64x2_store(q01, q0, q1); + simd::f64x2_store(p34, p3, p4); + simd::f64x2_store(q34, q3, q4); + simd::f64x2_store(p67, p6, p7); + simd::f64x2_store(q67, q6, q7); + } else #endif { @@ -476,59 +990,132 @@ namespace detail::_f256 // primitives and kernels t1 += q4; t1 += a.x1 * a.x3 + a.x2 * a.x2 + a.x3 * a.x1 + q6 + q7 + q8 + q9 + s2; -return renorm5(p0, p1, s0, t0, t1); + return renorm5(p0, p1, s0, t0, t1); } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s add_double_inline(const f256_s& a, double b) noexcept + // Multiplies f256 by double-double through constexpr or compiled canonical dispatch. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_dd(const f256_s& a, dd_scalar b) noexcept { - double c0{}, c1{}, c2{}, c3{}, e{}; - - two_sum_precise(a.x0, b, c0, e); - if (e == 0.0) return renorm4(c0, a.x1, a.x2, a.x3); - - two_sum_precise(a.x1, e, c1, e); - if (e == 0.0) return renorm4(c0, c1, a.x2, a.x3); - - two_sum_precise(a.x2, e, c2, e); - if (e == 0.0) return renorm4(c0, c1, c2, a.x3); - - two_sum_precise(a.x3, e, c3, e); - if (e == 0.0) return renorm4(c0, c1, c2, c3); - - return renorm5(c0, c1, c2, c3, e); + BL_CONSTEXPR_RUNTIME_DISPATCH( + mul_canonical_inline(a, f256_s{ b.hi, b.lo, 0.0, 0.0 }), + detail::_f256_runtime::mul_dd(a, b) + ); } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s add_double_inline(double a, const f256_s& b) noexcept + // Division + // clang-cl /fp:fast can discard the residual roundoff terms used by the + // quotient refinements. The function-local guards below preserve them + // without changing fast-math code generation elsewhere. + // Tests whether one residual product needs range-safe Dekker splitting. + [[nodiscard]] BL_FORCE_INLINE constexpr bool div_residual_product_needs_range_safe_dekker( + double a, + double b) noexcept { - return add_double_inline(b, a); + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + return detail::fp::dekker_product_needs_scaling(a, b); + #else + (void)a; + (void)b; + return false; + #endif } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_double_inline(const f256_s& a, double b) noexcept + // Forms one exact residual product with range protection when required. + BL_FORCE_INLINE constexpr void div_residual_product_inline( + double a, + double b, + double& p, + double& e) noexcept { - return add_double_inline(a, -b); + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + detail::fp::two_prod_precise_range_safe(a, b, p, e); + #else + detail::fp::two_prod_precise(a, b, p, e); + #endif } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_double_inline(double a, const f256_s& b) noexcept + // Subtracts one quotient product with the faster compressed residual path. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_residual_fast_inline(const f256_s& r, const f256_s& b, double q) noexcept { - return add_double_inline(-b, a); +#if defined(_MSC_VER) && defined(__clang__) && defined(FLTX_FAST_MATH) +#pragma clang fp reassociate(off) +#endif + double p0{}, e0{}; + double p1{}, e1{}; + double p2{}, e2{}; + double p3{}, e3{}; + + [[maybe_unused]] const bool needs_range_safe_dekker = + div_residual_product_needs_range_safe_dekker(b.x0, q) || + div_residual_product_needs_range_safe_dekker(b.x1, q) || + div_residual_product_needs_range_safe_dekker(b.x2, q) || + div_residual_product_needs_range_safe_dekker(b.x3, q); + + #if FLTX_F256_ENABLE_SIMD && (FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) + if (!needs_range_safe_dekker && f256_runtime_simd_enabled()) + { + simd::f64x2 p01{}, e01{}; + simd::f64x2 p23{}, e23{}; + const simd::f64x2 qv = simd::f64x2_splat(q); + simd::f64x2_two_prod_precise(simd::f64x2_set(b.x0, b.x1), qv, p01, e01); + simd::f64x2_two_prod_precise(simd::f64x2_set(b.x2, b.x3), qv, p23, e23); + simd::f64x2_store(p01, p0, p1); + simd::f64x2_store(e01, e0, e1); + simd::f64x2_store(p23, p2, p3); + simd::f64x2_store(e23, e2, e3); + } + else + #endif + { + div_residual_product_inline(b.x0, q, p0, e0); + div_residual_product_inline(b.x1, q, p1, e1); + div_residual_product_inline(b.x2, q, p2, e2); + div_residual_product_inline(b.x3, q, p3, e3); + } + + double s0 = r.x0-p0; double v0 = s0-r.x0; double u0 = s0-v0; double w0 = r.x0-u0; u0 = -p0 - v0; + double s1 = r.x1-p1; double v1 = s1-r.x1; double u1 = s1-v1; double w1 = r.x1-u1; u1 = -p1 - v1; + double s2 = r.x2-p2; double v2 = s2-r.x2; double u2 = s2-v2; double w2 = r.x2-u2; u2 = -p2 - v2; + double s3 = r.x3-p3; double v3 = s3-r.x3; double u3 = s3-v3; double w3 = r.x3-u3; u3 = -p3 - v3; + + double t0 = w0 + u0; + double t1 = w1 + u1; + double t2 = w2 + u2; + double t3 = w3 + u3; + + double tail0 = t0 - e0; two_sum_precise(s1, tail0, s1, t0); + double tail1 = t1 - e1; three_sum(s2, t0, tail1); + double tail2 = t2 - e2; three_sum2(s3, t0, tail2); + + t0 = t0 + tail1 + t3 - e3; + + return renorm5(s0, s1, s2, s3, t0); } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_double_inline(const f256_s& a, double b) noexcept + // Subtracts one quotient product while retaining the full residual expansion. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_residual_exact_inline(const f256_s& r, const f256_s& b, double q) noexcept { - using namespace detail::_f256; - +#if defined(_MSC_VER) && defined(__clang__) && defined(FLTX_FAST_MATH) +#pragma clang fp reassociate(off) +#endif double p0{}, p1{}, p2{}, p3{}; double q0{}, q1{}, q2{}; double s0{}, s1{}, s2{}, s3{}, s4{}; - #if BL_F256_ENABLE_SIMD && (BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) - if (f256_runtime_simd_enabled()) + [[maybe_unused]] const bool needs_range_safe_dekker = + div_residual_product_needs_range_safe_dekker(b.x0, q) || + div_residual_product_needs_range_safe_dekker(b.x1, q) || + div_residual_product_needs_range_safe_dekker(b.x2, q) || + div_residual_product_needs_range_safe_dekker(b.x3, q); + + #if FLTX_F256_ENABLE_SIMD && (FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) + if (!needs_range_safe_dekker && f256_runtime_simd_enabled()) { simd::f64x2 p01{}, q01{}; simd::f64x2 p23{}, q23{}; - const simd::f64x2 bv = simd::f64x2_splat(b); - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x0, a.x1), bv, p01, q01); - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x2, a.x3), bv, p23, q23); + const simd::f64x2 qv = simd::f64x2_splat(q); + simd::f64x2_two_prod_precise(simd::f64x2_set(b.x0, b.x1), qv, p01, q01); + simd::f64x2_two_prod_precise(simd::f64x2_set(b.x2, b.x3), qv, p23, q23); double ignored{}; simd::f64x2_store(p01, p0, p1); simd::f64x2_store(q01, q0, q1); @@ -536,12 +1123,12 @@ return renorm5(p0, p1, s0, t0, t1); simd::f64x2_store(q23, q2, ignored); } else - #endif + #endif { - two_prod_precise(a.x0, b, p0, q0); - two_prod_precise(a.x1, b, p1, q1); - two_prod_precise(a.x2, b, p2, q2); - p3 = a.x3 * b; + div_residual_product_inline(b.x0, q, p0, q0); + div_residual_product_inline(b.x1, q, p1, q1); + div_residual_product_inline(b.x2, q, p2, q2); + p3 = b.x3 * q; } s0 = p0; @@ -551,19 +1138,126 @@ return renorm5(p0, p1, s0, t0, t1); s3 = q1; s4 = q2 + p2; - return renorm5(s0, s1, s2, s3, s4); + double c0{}, e0{}; + double c1{}, e1{}; + double c2{}, e2{}; + double c3{}, e3{}; + + two_sum_precise(r.x0, -s0, c0, e0); + two_sum_precise(r.x1, -s1, c1, e1); + two_sum_precise(r.x2, -s2, c2, e2); + two_sum_precise(r.x3, -s3, c3, e3); + + two_sum_precise(c1, e0, c1, e0); + three_sum(c2, e0, e1); + three_sum2(c3, e0, e2); + + e0 += e1 + e3 - s4; + + return renorm5(c0, c1, c2, c3, e0); + } + + // Refines an initial f256 quotient with exact then fast residual corrections. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_correction_inline( + const f256_s& a, + const f256_s& b, + double inv_b0, + double q0) noexcept + { + using namespace detail::_f256; + + f256_s r = div_residual_exact_inline(a, b, q0); + + const double q1 = r.x0 * inv_b0; + r = div_residual_exact_inline(r, b, q1); + + const double q2 = r.x0 * inv_b0; + r = div_residual_fast_inline(r, b, q2); + + const double q3 = r.x0 * inv_b0; + r = div_residual_fast_inline(r, b, q3); + + const double q4 = r.x0 * inv_b0; + + return renorm5(q0, q1, q2, q3, q4); + } + + // Divides f256 after the caller has handled exceptional denominator cases. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_prechecked_inline(const f256_s& a, const f256_s& b) noexcept + { + const double inv_b0 = 1.0 / b.x0; + const double q0 = a.x0 * inv_b0; + if (detail::fp::isinf_or_nan(q0)) [[unlikely]] + return f256_s{ q0, 0.0, 0.0, 0.0 }; + if (q0 == 0.0 && bl::iszero(a)) [[unlikely]] + return signed_zero(bl::signbit(a) != bl::signbit(b)); + + return div_correction_inline(a, b, inv_b0, q0); + } + + // Divides f256 values with exceptional-denominator handling and tiny-divisor scaling. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_canonical_inline(const f256_s& a, const f256_s& b) noexcept + { + if (detail::fp::iszero_or_inf_or_nan(b.x0)) [[unlikely]] + return div_special(a, b); + + if (detail::fp::absd(b.x0) < 0x1p-500 + && detail::fp::absd(a.x0) < 0x1p500) [[unlikely]] + { + constexpr int scale = 512; + const f256_s scaled_a{ + detail::fp::ldexp_limb(a.x0, scale), + detail::fp::ldexp_limb(a.x1, scale), + detail::fp::ldexp_limb(a.x2, scale), + detail::fp::ldexp_limb(a.x3, scale) + }; + const f256_s scaled_b{ + detail::fp::ldexp_limb(b.x0, scale), + detail::fp::ldexp_limb(b.x1, scale), + detail::fp::ldexp_limb(b.x2, scale), + detail::fp::ldexp_limb(b.x3, scale) + }; + return div_prechecked_inline(scaled_a, scaled_b); + } + + return div_prechecked_inline(a, b); } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_double_inline(double a, const f256_s& b) noexcept + // Divides finite f256 values with tiny-divisor scaling but no canonical special handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_finite_inline( + const f256_s& a, + const f256_s& b) noexcept { - return mul_double_inline(b, a); + if (detail::fp::absd(b.x0) < 0x1p-500 + && detail::fp::absd(a.x0) < 0x1p500) [[unlikely]] + { + constexpr int scale = 512; + const f256_s scaled_a{ + detail::fp::ldexp_limb(a.x0, scale), + detail::fp::ldexp_limb(a.x1, scale), + detail::fp::ldexp_limb(a.x2, scale), + detail::fp::ldexp_limb(a.x3, scale) + }; + const f256_s scaled_b{ + detail::fp::ldexp_limb(b.x0, scale), + detail::fp::ldexp_limb(b.x1, scale), + detail::fp::ldexp_limb(b.x2, scale), + detail::fp::ldexp_limb(b.x3, scale) + }; + const double inv_b0 = 1.0 / scaled_b.x0; + return div_correction_inline(scaled_a, scaled_b, inv_b0, scaled_a.x0 * inv_b0); + } + + const double inv_b0 = 1.0 / b.x0; + return div_correction_inline(a, b, inv_b0, a.x0 * inv_b0); } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_double_inline(const f256_s& a, double b) noexcept + // Divides f256 by a double after exceptional denominator cases are handled. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_double_prechecked_inline(const f256_s& a, double b) noexcept { using namespace detail::_f256; - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { if (detail::fp::isnan(a.x0) || detail::fp::isnan(b)) return std::numeric_limits::quiet_NaN(); @@ -604,21 +1298,22 @@ return renorm5(p0, p1, s0, t0, t1); if (q0 == 0.0 && bl::iszero(a)) [[unlikely]] return signed_zero(bl::signbit(a) != signbit(b)); - f256_s r = sub_mul_scalar_exact(a, divisor, q0); + f256_s r = div_residual_exact_inline(a, divisor, q0); - const double q1 = r.x0 * inv_b; r = sub_mul_scalar_fast(r, divisor, q1); - const double q2 = r.x0 * inv_b; r = sub_mul_scalar_fast(r, divisor, q2); - const double q3 = r.x0 * inv_b; r = sub_mul_scalar_fast(r, divisor, q3); + const double q1 = r.x0 * inv_b; r = div_residual_fast_inline(r, divisor, q1); + const double q2 = r.x0 * inv_b; r = div_residual_fast_inline(r, divisor, q2); + const double q3 = r.x0 * inv_b; r = div_residual_fast_inline(r, divisor, q3); const double q4 = r.x0 * inv_b; return renorm5(q0, q1, q2, q3, q4); } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_double_inline(double a, const f256_s& b) noexcept + // Divides a double by f256 after exceptional denominator cases are handled. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_double_prechecked_inline(double a, const f256_s& b) noexcept { using namespace detail::_f256; - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { if (detail::fp::isnan(a) || detail::fp::isnan(b.x0)) return std::numeric_limits::quiet_NaN(); @@ -651,7 +1346,7 @@ return renorm5(p0, p1, s0, t0, t1); } if (b.x1 == 0.0 && b.x2 == 0.0 && b.x3 == 0.0) [[unlikely]] - return div_double_inline(f256_s{ a, 0.0, 0.0, 0.0 }, b.x0); + return div_double_prechecked_inline(f256_s{ a, 0.0, 0.0, 0.0 }, b.x0); const double inv_b0 = 1.0 / b.x0; const double q0 = a * inv_b0; @@ -664,9 +1359,9 @@ return renorm5(p0, p1, s0, t0, t1); double e0{}, e1{}, e2{}; double s0{}, s1{}, s2{}, s3{}, s4{}; - two_prod_precise(b.x0, q0, p0, e0); - two_prod_precise(b.x1, q0, p1, e1); - two_prod_precise(b.x2, q0, p2, e2); + div_residual_product_inline(b.x0, q0, p0, e0); + div_residual_product_inline(b.x1, q0, p1, e1); + div_residual_product_inline(b.x2, q0, p2, e2); p3 = b.x3 * q0; s0 = p0; @@ -692,268 +1387,66 @@ return renorm5(p0, p1, s0, t0, t1); f256_s r = renorm5(c0, c1, c2, c3, t0); - const double q1 = r.x0 * inv_b0; r = sub_mul_scalar_fast(r, b, q1); - const double q2 = r.x0 * inv_b0; r = sub_mul_scalar_fast(r, b, q2); - const double q3 = r.x0 * inv_b0; r = sub_mul_scalar_fast(r, b, q3); + const double q1 = r.x0 * inv_b0; r = div_residual_fast_inline(r, b, q1); + const double q2 = r.x0 * inv_b0; r = div_residual_fast_inline(r, b, q2); + const double q3 = r.x0 * inv_b0; r = div_residual_fast_inline(r, b, q3); const double q4 = r.x0 * inv_b0; return renorm5(q0, q1, q2, q3, q4); } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s add_checked_inline(const f256_s& a, const f256_s& b) noexcept - { - if (detail::fp::isinf_or_nan(a.x0) || detail::fp::isinf_or_nan(b.x0)) [[unlikely]] - return add_special(a, b); - - const f256_s out = add_inline(a, b); - if (detail::fp::isinf_or_nan(out.x0)) [[unlikely]] - return signed_infinity(bl::signbit(a)); - return out; - } - - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_checked_inline(const f256_s& a, const f256_s& b) noexcept - { - if (detail::fp::isinf_or_nan(a.x0) || detail::fp::isinf_or_nan(b.x0)) [[unlikely]] - return sub_special(a, b); - - const f256_s out = sub_inline(a, b); - if (detail::fp::isinf_or_nan(out.x0)) [[unlikely]] - return signed_infinity(bl::signbit(a)); - return out; - } - - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_checked_inline(const f256_s& a, const f256_s& b) noexcept - { - if (detail::fp::isinf_or_nan(a.x0) || detail::fp::isinf_or_nan(b.x0)) [[unlikely]] - return mul_special(a, b); - if (bl::iszero(a) || bl::iszero(b)) [[unlikely]] - return signed_zero(bl::signbit(a) != bl::signbit(b)); - - const f256_s out = mul_inline(a, b); - if (detail::fp::isinf_or_nan(out.x0)) [[unlikely]] - return signed_infinity(bl::signbit(a) != bl::signbit(b)); - return out; - } - - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_checked_inline(const f256_s& a, const f256_s& b) noexcept - { - if (detail::fp::iszero_or_inf_or_nan(b.x0)) [[unlikely]] - return div_special(a, b); - - return div_inline(a, b); - } - - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s add_double_checked_inline(const f256_s& a, double b) noexcept - { - if (detail::fp::isinf_or_nan(a.x0) || detail::fp::isinf_or_nan(b)) [[unlikely]] - return add_special(a, f256_s{ b, 0.0, 0.0, 0.0 }); - - const f256_s out = add_double_inline(a, b); - if (detail::fp::isinf_or_nan(out.x0)) [[unlikely]] - return signed_infinity(bl::signbit(a)); - return out; - } - - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_double_checked_inline(const f256_s& a, double b) noexcept - { - if (detail::fp::isinf_or_nan(a.x0) || detail::fp::isinf_or_nan(b)) [[unlikely]] - return sub_special(a, f256_s{ b, 0.0, 0.0, 0.0 }); - - const f256_s out = sub_double_inline(a, b); - if (detail::fp::isinf_or_nan(out.x0)) [[unlikely]] - return signed_infinity(bl::signbit(a)); - return out; - } - - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_double_checked_inline(double a, const f256_s& b) noexcept - { - if (detail::fp::isinf_or_nan(a) || detail::fp::isinf_or_nan(b.x0)) [[unlikely]] - return sub_special(f256_s{ a, 0.0, 0.0, 0.0 }, b); - - const f256_s out = sub_double_inline(a, b); - if (detail::fp::isinf_or_nan(out.x0)) [[unlikely]] - return signed_infinity(signbit(a)); - return out; - } - - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_double_checked_inline(const f256_s& a, double b) noexcept - { - if (detail::fp::isinf_or_nan(a.x0) || detail::fp::isinf_or_nan(b)) [[unlikely]] - return mul_special(a, f256_s{ b, 0.0, 0.0, 0.0 }); - if (bl::iszero(a) || b == 0.0) [[unlikely]] - return signed_zero(bl::signbit(a) != signbit(b)); - - const f256_s out = mul_double_inline(a, b); - if (detail::fp::isinf_or_nan(out.x0)) [[unlikely]] - return signed_infinity(bl::signbit(a) != signbit(b)); - return out; - } - - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_double_checked_inline(const f256_s& a, double b) noexcept + // Divides f256 by a double with canonical exceptional-denominator handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_double_canonical_inline(const f256_s& a, double b) noexcept { if (detail::fp::iszero_or_inf_or_nan(b)) [[unlikely]] return div_special(a, f256_s{ b, 0.0, 0.0, 0.0 }); - return div_double_inline(a, b); + return div_double_prechecked_inline(a, b); } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_double_checked_inline(double a, const f256_s& b) noexcept + // Divides a double by f256 with canonical exceptional-denominator handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_double_canonical_inline(double a, const f256_s& b) noexcept { if (detail::fp::iszero_or_inf_or_nan(b.x0)) [[unlikely]] return div_special(f256_s{ a, 0.0, 0.0, 0.0 }, b); - return div_double_inline(a, b); + return div_double_prechecked_inline(a, b); } - // residual helpers - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_mul_scalar_fast(const f256_s& r, const f256_s& b, double q) noexcept + // Divides finite f256 by a finite double without canonical special handling. + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_double_finite_inline( + const f256_s& a, + double b) noexcept { - double p0{}, e0{}; - double p1{}, e1{}; - double p2{}, e2{}; - double p3{}, e3{}; - - #if BL_F256_ENABLE_SIMD && (BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) - if (f256_runtime_simd_enabled()) - { - simd::f64x2 p01{}, e01{}; - simd::f64x2 p23{}, e23{}; - const simd::f64x2 qv = simd::f64x2_splat(q); - simd::f64x2_two_prod_precise(simd::f64x2_set(b.x0, b.x1), qv, p01, e01); - simd::f64x2_two_prod_precise(simd::f64x2_set(b.x2, b.x3), qv, p23, e23); - simd::f64x2_store(p01, p0, p1); - simd::f64x2_store(e01, e0, e1); - simd::f64x2_store(p23, p2, p3); - simd::f64x2_store(e23, e2, e3); - } - else - #endif - { - two_prod_precise(b.x0, q, p0, e0); - two_prod_precise(b.x1, q, p1, e1); - two_prod_precise(b.x2, q, p2, e2); - two_prod_precise(b.x3, q, p3, e3); - } - - double s0 = r.x0-p0; double v0 = s0-r.x0; double u0 = s0-v0; double w0 = r.x0-u0; u0 = -p0 - v0; - double s1 = r.x1-p1; double v1 = s1-r.x1; double u1 = s1-v1; double w1 = r.x1-u1; u1 = -p1 - v1; - double s2 = r.x2-p2; double v2 = s2-r.x2; double u2 = s2-v2; double w2 = r.x2-u2; u2 = -p2 - v2; - double s3 = r.x3-p3; double v3 = s3-r.x3; double u3 = s3-v3; double w3 = r.x3-u3; u3 = -p3 - v3; - - double t0 = w0 + u0; - double t1 = w1 + u1; - double t2 = w2 + u2; - double t3 = w3 + u3; - - double tail0 = t0 - e0; two_sum_precise(s1, tail0, s1, t0); - double tail1 = t1 - e1; three_sum(s2, t0, tail1); - double tail2 = t2 - e2; three_sum2(s3, t0, tail2); - - t0 = t0 + tail1 + t3 - e3; - - return renorm5(s0, s1, s2, s3, t0); - } - - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_mul_scalar_exact(const f256_s& r, const f256_s& b, double q) noexcept - { - double p0{}, p1{}, p2{}, p3{}; - double q0{}, q1{}, q2{}; - double s0{}, s1{}, s2{}, s3{}, s4{}; - - #if BL_F256_ENABLE_SIMD && (BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) - if (f256_runtime_simd_enabled()) - { - simd::f64x2 p01{}, q01{}; - simd::f64x2 p23{}, q23{}; - const simd::f64x2 qv = simd::f64x2_splat(q); - simd::f64x2_two_prod_precise(simd::f64x2_set(b.x0, b.x1), qv, p01, q01); - simd::f64x2_two_prod_precise(simd::f64x2_set(b.x2, b.x3), qv, p23, q23); - double ignored{}; - simd::f64x2_store(p01, p0, p1); - simd::f64x2_store(q01, q0, q1); - simd::f64x2_store(p23, p2, p3); - simd::f64x2_store(q23, q2, ignored); - } - else - #endif - { - two_prod_precise(b.x0, q, p0, q0); - two_prod_precise(b.x1, q, p1, q1); - two_prod_precise(b.x2, q, p2, q2); - p3 = b.x3 * q; - } - - s0 = p0; - two_sum_precise(q0, p1, s1, s2); - three_sum(s2, q1, p2); - three_sum2(q1, q2, p3); - s3 = q1; - s4 = q2 + p2; - - double c0{}, e0{}; - double c1{}, e1{}; - double c2{}, e2{}; - double c3{}, e3{}; - - two_sum_precise(r.x0, -s0, c0, e0); - two_sum_precise(r.x1, -s1, c1, e1); - two_sum_precise(r.x2, -s2, c2, e2); - two_sum_precise(r.x3, -s3, c3, e3); - - two_sum_precise(c1, e0, c1, e0); - three_sum(c2, e0, e1); - three_sum2(c3, e0, e2); - - e0 += e1 + e3 - s4; - - return renorm5(c0, c1, c2, c3, e0); - } - - // double-double dispatch - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s add_dd(const f256_s& a, dd_scalar b) noexcept - { - BL_CONSTEXPR_RUNTIME_DISPATCH( - add_checked_inline(a, f256_s{ b.hi, b.lo, 0.0, 0.0 }), - detail::_f256_runtime::add_dd(a, b) - ); - } + using namespace detail::_f256; - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_dd(const f256_s& a, dd_scalar b) noexcept - { - BL_CONSTEXPR_RUNTIME_DISPATCH( - sub_checked_inline(a, f256_s{ b.hi, b.lo, 0.0, 0.0 }), - detail::_f256_runtime::sub_dd(a, b) - ); - } + const double inv_b = 1.0 / b; + const f256_s divisor{ b, 0.0, 0.0, 0.0 }; + const double q0 = a.x0 * inv_b; + f256_s r = div_residual_exact_inline(a, divisor, q0); - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_dd(dd_scalar a, const f256_s& b) noexcept - { - BL_CONSTEXPR_RUNTIME_DISPATCH( - sub_checked_inline(f256_s{ a.hi, a.lo, 0.0, 0.0 }, b), - detail::_f256_runtime::sub_dd(a, b) - ); - } + const double q1 = r.x0 * inv_b; r = div_residual_fast_inline(r, divisor, q1); + const double q2 = r.x0 * inv_b; r = div_residual_fast_inline(r, divisor, q2); + const double q3 = r.x0 * inv_b; r = div_residual_fast_inline(r, divisor, q3); + const double q4 = r.x0 * inv_b; - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s mul_dd(const f256_s& a, dd_scalar b) noexcept - { - BL_CONSTEXPR_RUNTIME_DISPATCH( - mul_checked_inline(a, f256_s{ b.hi, b.lo, 0.0, 0.0 }), - detail::_f256_runtime::mul_dd(a, b) - ); + return renorm5(q0, q1, q2, q3, q4); } + // Divides f256 by double-double through constexpr or compiled canonical dispatch. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_dd(const f256_s& a, dd_scalar b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - div_checked_inline(a, f256_s{ b.hi, b.lo, 0.0, 0.0 }), + div_canonical_inline(a, f256_s{ b.hi, b.lo, 0.0, 0.0 }), detail::_f256_runtime::div_dd(a, b) ); } + // Divides double-double by f256 through constexpr or compiled canonical dispatch. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_dd(dd_scalar a, const f256_s& b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - div_checked_inline(f256_s{ a.hi, a.lo, 0.0, 0.0 }, b), + div_canonical_inline(f256_s{ a.hi, a.lo, 0.0, 0.0 }, b), detail::_f256_runtime::div_dd(a, b) ); } @@ -965,22 +1458,32 @@ return renorm5(p0, p1, s0, t0, t1); { using namespace detail::_f256; + if (iszero(b)) [[unlikely]] + return signed_infinity(signbit(b)); + if (isinf(b)) [[unlikely]] + return signed_zero(signbit(b)); + constexpr f256_s one = f256_s{ 1.0 }; +#if BL_FP_BARRIER_ACTIVE + BL_CONSTEXPR_RUNTIME_DISPATCH( + div_prechecked_inline(one, b), + detail::_f256_runtime::div_finite(one, b) + ); +#else const double inv_b0 = 1.0 / b.x0; const double q0 = inv_b0; - f256_s r = sub_mul_scalar_exact(one, b, q0); + f256_s r = div_residual_exact_inline(one, b, q0); - const double q1 = r.x0 * inv_b0; r = sub_mul_scalar_fast(r, b, q1); - const double q2 = r.x0 * inv_b0; r = sub_mul_scalar_fast(r, b, q2); - const double q3 = r.x0 * inv_b0; r = sub_mul_scalar_fast(r, b, q3); + const double q1 = r.x0 * inv_b0; r = div_residual_fast_inline(r, b, q1); + const double q2 = r.x0 * inv_b0; r = div_residual_fast_inline(r, b, q2); + const double q3 = r.x0 * inv_b0; r = div_residual_fast_inline(r, b, q3); const double q4 = r.x0 * inv_b0; return renorm5(q0, q1, q2, q3, q4); +#endif } -[[nodiscard]] BL_FORCE_INLINE constexpr f256 inv(const f256_s& a) { return recip(a); } - } // namespace bl #endif diff --git a/include/fltx/detail/f256_consts.h b/include/fltx/detail/f256_consts.h index b7385a2..b1a9d8d 100644 --- a/include/fltx/detail/f256_consts.h +++ b/include/fltx/detail/f256_consts.h @@ -11,6 +11,7 @@ #define F256_DETAIL_CONSTS_INCLUDED #include +#include "fltx/detail/trig_reduce_consts.h" #include "fltx/f256_type.h" namespace bl::detail::_f256 // primitives and kernels @@ -20,32 +21,15 @@ namespace bl::detail::_f256 // primitives and kernels inline constexpr f256_s sqrtpi = { 0x1.c5bf891b4ef6bp+0, -0x1.618f13eb7ca89p-54, -0x1.b1f0071b7aae4p-110, -0x1.389b5a46bdfe8p-165 }; inline constexpr f256_s half_log_pi = { 0x1.250d048e7a1bdp-1, 0x1.7abf2ad8d5088p-58, -0x1.6ccf43244818ap-114, 0x1.f9303719c0176p-168 }; inline constexpr f256_s half_log_two_pi = { 0x1.d67f1c864beb5p-1, -0x1.65b5a1b7ff5dfp-55, -0x1.b7f70c13dc1ccp-110, 0x1.3458b4ddec6a3p-164 }; + inline constexpr f256_s exp_overflow_cutoff = { 0x1.62e42fefa39efp+9, 0x1.a9c9e3b39803fp-46, 0x1.7757a079a1934p-101, -0x1.b23e8fa413b27p-155 }; + inline constexpr f256_s exp_zero_cutoff = { -0x1.74910d52d3052p+9, 0x1.04e7ce353629ep-46, -0x1.541e1edbd82fap-100, -0x1.ccdd1404ead3ep-154 }; // trig constants inline constexpr f256_s pi_2 = { 0x1.921fb54442d18p+0, 0x1.1a62633145c07p-54, -0x1.f1976b7ed8fbcp-110, 0x1.4cf98e804177dp-164 }; inline constexpr f256_s pi_4 = { 0x1.921fb54442d18p-1, 0x1.1a62633145c07p-55, -0x1.f1976b7ed8fbcp-111, 0x1.4cf98e804177dp-165 }; inline constexpr f256_s invpi2 = { 0x1.45f306dc9c883p-1, -0x1.6b01ec5417056p-55, -0x1.6447e493ad4cep-109, 0x1.e21c820ff28b2p-163 }; inline constexpr f256_s pi_3_4 = { 0x1.2d97c7f3321d2p+1, 0x1.a79394c9e8a0ap-54, 0x1.456737b06ea1ap-108, -0x1.83226a8fe7731p-162 }; - - // argument reduction tables - inline constexpr std::uint32_t two_over_pi_fixed_words[] = { - 0xcaf27f1du, 0x9f3a1f35u, 0x6b1e5ef8u, 0xc33d26efu, - 0x98327dbbu, 0x32c2de4fu, 0x3f7e33e8u, 0xa5ff0705u, - 0x5719053eu, 0xddaf44d1u, 0x8b961ca6u, 0x8359c476u, - 0xdce8092au, 0x19c367cdu, 0x8c6b47c4u, 0x60e27bc0u, - 0xca73a8c9u, 0x06061556u, 0x4d732731u, 0x8dffd880u, - 0x14a06840u, 0x6599855fu, 0x5ee61b08u, 0xa9e39161u, - 0x9af4361du, 0xf0cfbc20u, 0xfc7b6babu, 0x56033046u, - 0x1f8d5d08u, 0x6bfb5fb1u, 0x8a5292eau, 0x3d0739f7u, - 0xebe5f17bu, 0x7527bac7u, 0x9e5fea2du, 0x4f463f66u, - 0x27cb09b7u, 0x6d367ecfu, 0x5a0a6d1fu, 0xef2f118bu, - 0xde05980fu, 0x1ff897ffu, 0xbdf9283bu, 0x9c845f8bu, - 0x835339f4u, 0x3991d639u, 0xb45f7e41u, 0xe99c7026u, - 0x2ebb4484u, 0xe88235f5u, 0xb129a73eu, 0xfe1deb1cu, - 0x09d1921cu, 0x06492eeau, 0x424dd2e0u, 0xb7246e3au, - 0xdebbc561u, 0xfe5163abu, 0x3c439041u, 0xdb629599u, - 0xf534ddc0u, 0xfc2757d1u, 0x4e441529u, 0xa2f9836eu - }; + inline constexpr double pi_2_tail_4 = 0x1.31d89cd9128a5p-218; // exponential coefficients inline constexpr f256_s exp_inv_fact[] = { @@ -167,6 +151,74 @@ namespace bl::detail::_f256 // primitives and kernels { 0x1.fa7c1819e90d8p+0, 0x1.74853f3a5931ep-55, 0x1.dc060c36f7651p-112, -0x1.2cfc37316ebd2p-166 } }; + inline constexpr f256_s ln2_table_64[] = { + { 0x0.0p+0, 0x0.0p+0, 0x0.0p+0, 0x0.0p+0 }, + { 0x1.62e42fefa39efp-7, 0x1.abc9e3b39803fp-62, 0x1.7b57a079a1934p-117, -0x1.ace93a4ebe5d1p-171 }, + { 0x1.62e42fefa39efp-6, 0x1.abc9e3b39803fp-61, 0x1.7b57a079a1934p-116, -0x1.ace93a4ebe5d1p-170 }, + { 0x1.0a2b23f3bab73p-5, 0x1.a06bb56359018p-59, -0x1.38df91e931b46p-113, -0x1.506bbaeec3b17p-167 }, + { 0x1.62e42fefa39efp-5, 0x1.abc9e3b39803fp-60, 0x1.7b57a079a1934p-115, -0x1.ace93a4ebe5d1p-169 }, + { 0x1.bb9d3beb8c86bp-5, 0x1.6bc5ca07e04f0p-64, -0x1.2e93bb3fb03fcp-118, -0x1.82388e26df45ap-173 }, + { 0x1.0a2b23f3bab73p-4, 0x1.a06bb56359018p-58, -0x1.38df91e931b46p-112, -0x1.506bbaeec3b17p-166 }, + { 0x1.3687a9f1af2b1p-4, 0x1.3b28539e9281cp-58, -0x1.6d04d4e564a7dp-112, 0x1.222cfb3ec65bap-166 }, + { 0x1.62e42fefa39efp-4, 0x1.abc9e3b39803fp-59, 0x1.7b57a079a1934p-114, -0x1.ace93a4ebe5d1p-168 }, + { 0x1.8f40b5ed9812dp-4, 0x1.c28640541608ep-60, 0x1.55852911ab8b4p-115, 0x1.d799e6769d749p-172 }, + { 0x1.bb9d3beb8c86bp-4, 0x1.6bc5ca07e04f0p-63, -0x1.2e93bb3fb03fcp-117, -0x1.82388e26df45ap-172 }, + { 0x1.e7f9c1e980fa9p-4, -0x1.6794cdd21df52p-60, -0x1.eccf06b183ab2p-115, -0x1.3702c0b116fffp-170 }, + { 0x1.0a2b23f3bab73p-3, 0x1.a06bb56359018p-57, -0x1.38df91e931b46p-111, -0x1.506bbaeec3b17p-165 }, + { 0x1.205966f2b4f12p-3, 0x1.6dca0480f5c1ap-57, -0x1.52f233674b2e2p-111, 0x1.e8e0a02801551p-165 }, + { 0x1.3687a9f1af2b1p-3, 0x1.3b28539e9281cp-57, -0x1.6d04d4e564a7dp-111, 0x1.222cfb3ec65bap-165 }, + { 0x1.4cb5ecf0a9650p-3, 0x1.0886a2bc2f41ep-57, -0x1.871776637e218p-111, 0x1.6de559562d88cp-167 }, + { 0x1.62e42fefa39efp-3, 0x1.abc9e3b39803fp-58, 0x1.7b57a079a1934p-113, -0x1.ace93a4ebe5d1p-167 }, + { 0x1.791272ee9dd8ep-3, 0x1.468681eed1843p-58, 0x1.130d1a813bac7p-113, -0x1.8f6f9be75485dp-168 }, + { 0x1.8f40b5ed9812dp-3, 0x1.c28640541608ep-59, 0x1.55852911ab8b4p-114, 0x1.d799e6769d749p-171 }, + { 0x1.a56ef8ec924ccp-3, 0x1.effef9951212cp-60, 0x1.09e03a41bf7b5p-115, 0x1.5585613ef8bbdp-174 }, + { 0x1.bb9d3beb8c86bp-3, 0x1.6bc5ca07e04f0p-62, -0x1.2e93bb3fb03fcp-116, -0x1.82388e26df45ap-171 }, + { 0x1.d1cb7eea86c0ap-3, -0x1.3a1c149121eb4p-60, -0x1.1c39fac0b7dd9p-114, 0x1.9a1bc6f14c4bbp-168 }, + { 0x1.e7f9c1e980fa9p-3, -0x1.6794cdd21df52p-59, -0x1.eccf06b183ab2p-114, -0x1.3702c0b116fffp-169 }, + { 0x1.fe2804e87b348p-3, -0x1.190dc8add57a5p-58, -0x1.5eb2095127bc6p-113, 0x1.2ee1785d9cb46p-168 }, + { 0x1.0a2b23f3bab73p-2, 0x1.a06bb56359018p-56, -0x1.38df91e931b46p-110, -0x1.506bbaeec3b17p-164 }, + { 0x1.1542457337d43p-2, -0x1.e3948c376279dp-58, -0x1.17a38aa0f9c50p-112, 0x1.30e9ca727b474p-166 }, + { 0x1.205966f2b4f12p-2, 0x1.6dca0480f5c1ap-56, -0x1.52f233674b2e2p-110, 0x1.e8e0a02801551p-164 }, + { 0x1.2b708872320e2p-2, -0x1.570da7e077bcbp-57, 0x1.4008f7b3502a2p-111, -0x1.e9e4c932709e9p-166 }, + { 0x1.3687a9f1af2b1p-2, 0x1.3b28539e9281cp-56, -0x1.6d04d4e564a7dp-110, 0x1.222cfb3ec65bap-164 }, + { 0x1.419ecb712c481p-2, -0x1.bc5109a53e3c7p-57, 0x1.0be3b4b71d36bp-111, 0x1.7da6519451bddp-165 }, + { 0x1.4cb5ecf0a9650p-2, 0x1.0886a2bc2f41ep-56, -0x1.871776637e218p-110, 0x1.6de559562d88cp-166 }, + { 0x1.57cd0e7026820p-2, -0x1.10ca35b5025e1p-56, -0x1.9420c7228ade6p-110, 0x1.f81f83e0ede57p-164 }, + { 0x1.62e42fefa39efp-2, 0x1.abc9e3b39803fp-57, 0x1.7b57a079a1934p-112, -0x1.ace93a4ebe5d1p-166 }, + { 0x1.6dfb516f20bbfp-2, -0x1.436be697659dfp-56, -0x1.ae3368a0a4581p-110, 0x1.316bdef7b2ec0p-164 }, + { 0x1.791272ee9dd8ep-2, 0x1.468681eed1843p-57, 0x1.130d1a813bac7p-112, -0x1.8f6f9be75485dp-167 }, + { 0x1.8429946e1af5ep-2, -0x1.760d9779c8dddp-56, -0x1.c8460a1ebdd1cp-110, 0x1.aae0e839dfca3p-166 }, + { 0x1.8f40b5ed9812dp-2, 0x1.c28640541608ep-58, 0x1.55852911ab8b4p-113, 0x1.d799e6769d749p-170 }, + { 0x1.9a57d76d152fdp-2, -0x1.a8af485c2c1dbp-56, -0x1.e258ab9cd74b7p-110, -0x1.6fedab6b0c1bap-166 }, + { 0x1.a56ef8ec924ccp-2, 0x1.effef9951212cp-59, 0x1.09e03a41bf7b5p-114, 0x1.5585613ef8bbdp-173 }, + { 0x1.b0861a6c0f69cp-2, -0x1.db50f93e8f5d9p-56, -0x1.fc6b4d1af0c52p-110, -0x1.22af0fc3fe006p-164 }, + { 0x1.bb9d3beb8c86bp-2, 0x1.6bc5ca07e04f0p-61, -0x1.2e93bb3fb03fcp-115, -0x1.82388e26df45ap-170 }, + { 0x1.c6b45d6b09a3ap-2, 0x1.f20d55df0d628p-56, 0x1.e9821166f5c13p-110, -0x1.e962b4ad38f9dp-164 }, + { 0x1.d1cb7eea86c0ap-2, -0x1.3a1c149121eb4p-59, -0x1.1c39fac0b7dd9p-113, 0x1.9a1bc6f14c4bbp-167 }, + { 0x1.dce2a06a03dd9p-2, 0x1.bf6ba4fcaa22ap-56, 0x1.cf6f6fe8dc477p-110, 0x1.4fe9a6698c0ccp-164 }, + { 0x1.e7f9c1e980fa9p-2, -0x1.6794cdd21df52p-58, -0x1.eccf06b183ab2p-113, -0x1.3702c0b116fffp-168 }, + { 0x1.f310e368fe178p-2, 0x1.8cc9f41a46e2cp-56, 0x1.b55cce6ac2cdcp-110, 0x1.126c0300a2269p-165 }, + { 0x1.fe2804e87b348p-2, -0x1.190dc8add57a5p-57, -0x1.5eb2095127bc6p-112, 0x1.2ee1785d9cb46p-167 }, + { 0x1.049f9333fc28cp-1, -0x1.52ebde640e2e9p-55, 0x1.9b4a2ceca9541p-110, -0x1.ebed1b474f317p-167 }, + { 0x1.0a2b23f3bab73p-1, 0x1.a06bb56359018p-55, -0x1.38df91e931b46p-109, -0x1.506bbaeec3b17p-163 }, + { 0x1.0fb6b4b37945bp-1, 0x1.2786925580630p-56, 0x1.81378b6e8fda6p-110, -0x1.0431485224dfap-164 }, + { 0x1.1542457337d43p-1, -0x1.e3948c376279dp-57, -0x1.17a38aa0f9c50p-111, 0x1.30e9ca727b474p-165 }, + { 0x1.1acdd632f662bp-1, -0x1.858d8f46716e7p-55, 0x1.6724e9f07660bp-110, -0x1.cae4ed3b5fd91p-164 }, + { 0x1.205966f2b4f12p-1, 0x1.6dca0480f5c1ap-55, -0x1.52f233674b2e2p-109, 0x1.e8e0a02801551p-163 }, + { 0x1.25e4f7b2737fap-1, 0x1.8486612173c69p-57, -0x1.65db6f1b46321p-111, -0x1.2331244935a51p-165 }, + { 0x1.2b708872320e2p-1, -0x1.570da7e077bcbp-56, 0x1.4008f7b3502a2p-110, -0x1.e9e4c932709e9p-165 }, + { 0x1.30fc1931f09cap-1, -0x1.b82f4028d4ae5p-55, 0x1.32ffa6f4436d4p-110, 0x1.4f6791e454680p-165 }, + { 0x1.3687a9f1af2b1p-1, 0x1.3b28539e9281cp-55, -0x1.6d04d4e564a7dp-109, 0x1.222cfb3ec65bap-163 }, + { 0x1.3c133ab16db99p-1, 0x1.73ff3b2fcd8e1p-58, 0x1.8ed057629f390p-114, -0x1.effdbf710c573p-168 }, + { 0x1.419ecb712c481p-1, -0x1.bc5109a53e3c7p-56, 0x1.0be3b4b71d36bp-110, 0x1.7da6519451bddp-164 }, + { 0x1.472a5c30ead69p-1, -0x1.ead0f10b37ee3p-55, 0x1.fdb4c7f020f3cp-111, -0x1.cb6701c0977ddp-165 }, + { 0x1.4cb5ecf0a9650p-1, 0x1.0886a2bc2f41ep-55, -0x1.871776637e218p-109, 0x1.6de559562d88cp-165 }, + { 0x1.52417db067f38p-1, -0x1.08725f1a63879p-61, 0x1.31f09e7dc00a5p-116, 0x1.cc6d1b3ca3d22p-171 }, + { 0x1.57cd0e7026820p-1, -0x1.10ca35b5025e1p-55, -0x1.9420c7228ade6p-109, 0x1.f81f83e0ede57p-163 }, + { 0x1.5d589f2fe5107p-1, 0x1.e28d5e1264d1fp-55, 0x1.956a41f7bb0cfp-111, -0x1.cc6b2acb06c74p-166 }, + { 0x1.62e42fefa39efp-1, 0x1.abc9e3b39803fp-56, 0x1.7b57a079a1934p-111, -0x1.ace93a4ebe5d1p-165 } + }; + // logarithm coefficients inline constexpr f256_s log_atanh_coeffs[] = { { 0x1p+1, 0x0p+0, 0x0p+0, 0x0p+0 }, @@ -688,20 +740,28 @@ namespace bl::detail::_f256 // primitives and kernels { -0x1.508f0136e4c55p-174, -0x1.610f5fbe0553fp-229, -0x1.3c032cb2c6f71p-285, -0x1.398ab14eef776p-340 }, { 0x1.5325472cd461ep-178, -0x1.be070aa9e6708p-232, -0x1.9424187dd7358p-286, 0x1.a01887d174e65p-340 }, { 0x1.5936fbf9ec655p-186, 0x1.36b1efd62ae1fp-243, -0x1.5197195d42727p-297, 0x1.396f96fdbf03dp-352 }, - { -0x1.d3257cb381cb2p-187, -0x1.a9acc2bacdf6ap-241, 0x1.3204cc65fcf88p-298, -0x1.540bd126cad21p-352 }, - { 0x1.df5871880e591p-192, -0x1.e091979f28c8ap-246, 0x1.acea2fc38ae40p-301, 0x1.0ee226696b3aep-355 }, - { 0x1.3c421b3b2b2dfp-196, -0x1.a2c79eef97c8bp-252, -0x1.4da91e762e58ap-308, 0x1.f465abcf26a83p-363 }, - { -0x1.d527b931bde63p-200, -0x1.a90490031a12ep-254, -0x1.3a30d8ce0d4c0p-308, -0x1.5aa90a6cd2fa6p-362 }, + { -0x1.d3257cb34616ap-187, 0x1.69f87e0063ce0p-242, 0x1.829dd92b4d289p-296, -0x1.1a0c886619382p-351 }, + { 0x1.df58714fa55b3p-192, -0x1.c258b621fc0c1p-246, 0x1.c2778f959ff13p-302, -0x1.c9a360d4739ddp-358 }, + { 0x1.3c41788d4b89fp-196, 0x1.fe5ff8b0acdd8p-251, -0x1.ad0b82a24bb68p-305, 0x1.4c8df23011e5ap-359 }, + { -0x1.d4337c4e54866p-200, -0x1.aaae5133945ccp-255, 0x1.5dd200b7a686ep-309, 0x1.828455e459147p-373 }, + { 0x1.ee7eb9d18f479p-207, -0x1.41d87f455af28p-262, 0x1.b5c316fa1fc08p-317, -0x1.f760d37bd3965p-374 }, + { 0x1.e879c6d2bfa6ap-209, -0x1.4a625ac06de17p-264, 0x1.9d929e08f756bp-320, 0x1.95af78f8584c8p-374 }, + { -0x1.455bbf47f4c0fp-213, -0x1.bebc39f1706adp-270, 0x1.0963d0a4c5a8fp-324, 0x1.7731f7b24ea20p-379 }, + { -0x1.c347eefc38e3dp-219, -0x1.69a1b8cbae680p-277, 0x1.d14524b7e96d8p-331, -0x1.fcd74bef77dedp-386 }, }; // table metadata - inline constexpr int two_over_pi_fixed_bits = 2048; inline constexpr auto f256_trig_coeff_count_pi4 = sizeof(f256_sin_coeffs_pi4) / sizeof(f256_sin_coeffs_pi4[0]); - inline constexpr auto f256_trig_small_coeff_count = 13; - inline constexpr auto f256_trig_small_coeff_offset = f256_trig_coeff_count_pi4 - f256_trig_small_coeff_count; + inline constexpr auto f256_trig_small_coeff_offset = 11; + inline constexpr auto f256_trig_small_coeff_count = f256_trig_coeff_count_pi4 - f256_trig_small_coeff_offset; inline constexpr auto f256_atan_tiny_coeff_count = sizeof(f256_atan_tiny_coeffs) / sizeof(f256_atan_tiny_coeffs[0]); inline constexpr auto f256_atan_reduced_coeff_count = sizeof(f256_atan_reduced_coeffs) / sizeof(f256_atan_reduced_coeffs[0]); - inline constexpr auto f256_erf_cheb_coeff_count = 52; + inline constexpr auto f256_erf_cheb_coeff_count = sizeof(f256_erf_cheb_0_1) / sizeof(f256_erf_cheb_0_1[0]); + inline constexpr auto f256_erfc_cheb_coeff_count = sizeof(f256_erfc_cheb_3_4) / sizeof(f256_erfc_cheb_3_4[0]); + + static_assert(f256_trig_coeff_count_pi4 == sizeof(f256_cos_coeffs_pi4) / sizeof(f256_cos_coeffs_pi4[0])); + static_assert(f256_erf_cheb_coeff_count == sizeof(f256_erf_cheb_1_2) / sizeof(f256_erf_cheb_1_2[0])); + static_assert(f256_erf_cheb_coeff_count == sizeof(f256_erf_cheb_2_3) / sizeof(f256_erf_cheb_2_3[0])); } // namespace bl::detail::_f256 diff --git a/include/fltx/detail/f256_declarations.h b/include/fltx/detail/f256_declarations.h index 0343670..5c350ae 100644 --- a/include/fltx/detail/f256_declarations.h +++ b/include/fltx/detail/f256_declarations.h @@ -14,48 +14,36 @@ #include "fltx/detail/f256_expressions.h" #include "fltx/detail/f256_consts.h" #include "fltx/detail/common_math.h" -#include "fltx/detail/common_decimal.h" #include "fltx/detail/math_utils.h" namespace bl { namespace detail::_f256_runtime { + // complete-operation x86 FMA backend + BL_NO_INLINE f256_s fma_x86(const f256_s& x, const f256_s& y, const f256_s& z); + BL_NO_INLINE f256_s fma(const f256_s& x, const f256_s& y, const f256_s& z); + BL_NO_INLINE f256_s fma_cancellation(const f256_s& x, const f256_s& y, const f256_s& z); + // roots BL_NO_INLINE f256_s sqrt(const f256_s& a); BL_NO_INLINE f256_s cbrt(const f256_s& x); BL_NO_INLINE f256_s hypot(const f256_s& x, const f256_s& y); // rounding and decimals - BL_NO_INLINE f256_s round(const f256_s& a); - BL_NO_INLINE f256_s round_to_decimals(f256_s v, int prec); - BL_NO_INLINE f256_s nearbyint(const f256_s& a); - BL_NO_INLINE f256_s rint(const f256_s& x); - BL_NO_INLINE long lround(const f256_s& x); - BL_NO_INLINE long long llround(const f256_s& x); - BL_NO_INLINE long lrint(const f256_s& x); - BL_NO_INLINE long long llrint(const f256_s& x); + BL_NO_INLINE f256_s BL_VECTORCALL round_nearest_away_from_zero(const f256_s& a); + BL_NO_INLINE f256_s round_decimals(f256_s v, int prec); + BL_NO_INLINE f256_s round_significant(f256_s v, int figures); + BL_NO_INLINE long lround_nearest_away_from_zero(const f256_s& x); + BL_NO_INLINE long long llround_nearest_away_from_zero(const f256_s& x); // remainders BL_NO_INLINE f256_s fmod(const f256_s& x, const f256_s& y); - BL_NO_INLINE f256_s remainder(const f256_s& x, const f256_s& y); BL_NO_INLINE f256_s remquo(const f256_s& x, const f256_s& y, int* quo); // fractional decomposition BL_NO_INLINE f256_s modf(const f256_s& x, f256_s* iptr) noexcept; - // decomposition and scaling - BL_NO_INLINE f256_s ldexp(const f256_s& a, int e); - BL_NO_INLINE f256_s frexp(const f256_s& x, int* exp) noexcept; - BL_NO_INLINE int ilogb(const f256_s& x) noexcept; - BL_NO_INLINE f256_s logb(const f256_s& x) noexcept; - BL_NO_INLINE f256_s scalbn(const f256_s& x, int e) noexcept; - BL_NO_INLINE f256_s scalbln(const f256_s& x, long e) noexcept; - - // adjacent values - BL_NO_INLINE f256_s nexttoward(const f256_s& from, long double to) noexcept; - BL_NO_INLINE f256_s nexttoward(const f256_s& from, const f256_s& to) noexcept; - // exp / log BL_NO_INLINE f256_s exp(const f256_s& x); BL_NO_INLINE f256_s exp2(const f256_s& x); @@ -66,9 +54,10 @@ namespace detail::_f256_runtime BL_NO_INLINE f256_s log1p(const f256_s& x); // pow - BL_NO_INLINE f256_s pow10_256(int k); - BL_NO_INLINE f256_s pow(const f256_s& x, const f256_s& y); - BL_NO_INLINE f256_s pow(const f256_s& x, double y); + BL_NO_INLINE f256_s BL_VECTORCALL pow(const f256_s& x, const f256_s& y); + BL_NO_INLINE f256_s BL_VECTORCALL pow(const f256_s& x, double y); + BL_NO_INLINE f256_s BL_VECTORCALL ipow_signed(const f256_s& x, std::intmax_t y); + BL_NO_INLINE f256_s BL_VECTORCALL ipow_unsigned(const f256_s& x, std::uintmax_t y); // trig BL_NO_INLINE bool sincos(const f256_s& x, f256_s& s_out, f256_s& c_out); @@ -113,19 +102,14 @@ namespace detail::_f256_impl BL_FORCE_INLINE constexpr f256_s hypot(const f256_s& x, const f256_s& y); // rounding and decimals - inline constexpr f256_s floor(const f256_s& a); - inline constexpr f256_s ceil(const f256_s& a); BL_FORCE_INLINE constexpr f256_s trunc(const f256_s& a); - BL_FORCE_INLINE constexpr f256_s round(const f256_s& a); - BL_FORCE_INLINE f256_s round_runtime(const f256_s& a) noexcept; - BL_FORCE_INLINE constexpr f256_s round_to_decimals(f256_s v, int prec); - BL_FORCE_INLINE constexpr f256_s nearbyint(const f256_s& a); - BL_FORCE_INLINE f256_s nearbyint_runtime(const f256_s& a) noexcept; - BL_FORCE_INLINE constexpr f256_s rint(const f256_s& x); - BL_FORCE_INLINE constexpr long lround(const f256_s& x); - BL_FORCE_INLINE constexpr long long llround(const f256_s& x); - BL_FORCE_INLINE constexpr long lrint(const f256_s& x); - BL_FORCE_INLINE constexpr long long llrint(const f256_s& x); + BL_FORCE_INLINE constexpr f256_s round_nearest_away_from_zero(const f256_s& a); + BL_FORCE_INLINE f256_s round_nearest_away_from_zero_runtime(const f256_s& a) noexcept; + BL_FORCE_INLINE constexpr f256_s round_decimals(f256_s v, int prec); + BL_FORCE_INLINE constexpr f256_s round_significant(f256_s v, int figures); + BL_FORCE_INLINE constexpr f256_s round_nearest_even(const f256_s& a); + BL_FORCE_INLINE constexpr long lround_nearest_away_from_zero(const f256_s& x); + BL_FORCE_INLINE constexpr long long llround_nearest_away_from_zero(const f256_s& x); // arithmetic and comparisons BL_FORCE_INLINE constexpr f256_s fma(const f256_s& x, const f256_s& y, const f256_s& z); @@ -136,7 +120,6 @@ namespace detail::_f256_impl // remainders BL_FORCE_INLINE constexpr f256_s fmod(const f256_s& x, const f256_s& y); - BL_FORCE_INLINE constexpr f256_s remainder(const f256_s& x, const f256_s& y); BL_FORCE_INLINE constexpr f256_s remquo(const f256_s& x, const f256_s& y, int* quo); // fractional decomposition @@ -147,13 +130,9 @@ namespace detail::_f256_impl BL_FORCE_INLINE constexpr f256_s frexp(const f256_s& x, int* exp) noexcept; BL_FORCE_INLINE constexpr int ilogb(const f256_s& x) noexcept; BL_FORCE_INLINE constexpr f256_s logb(const f256_s& x) noexcept; - BL_FORCE_INLINE constexpr f256_s scalbn(const f256_s& x, int e) noexcept; - BL_FORCE_INLINE constexpr f256_s scalbln(const f256_s& x, long e) noexcept; // adjacent values BL_FORCE_INLINE constexpr f256_s nextafter(const f256_s& from, const f256_s& to) noexcept; - BL_FORCE_INLINE constexpr f256_s nexttoward(const f256_s& from, long double to) noexcept; - BL_FORCE_INLINE constexpr f256_s nexttoward(const f256_s& from, const f256_s& to) noexcept; // exp / log BL_FORCE_INLINE constexpr double log_as_double(f256_s a) noexcept; diff --git a/include/fltx/detail/f256_expansion.h b/include/fltx/detail/f256_expansion.h index 69e0e8e..02c4073 100644 --- a/include/fltx/detail/f256_expansion.h +++ b/include/fltx/detail/f256_expansion.h @@ -169,18 +169,6 @@ namespace detail::_f256 // primitives and kernels } BL_POP_PRECISE - BL_FORCE_INLINE constexpr f256_s canonicalize_math_result(f256_s value) noexcept - { - value.x3 = detail::fp::zero_low_fraction_bits_finite<8>(value.x3); - return value; - } - - #if defined(FLTX_CONSTEXPR_PARITY) - #define F256_CANONICALIZE_MATH_RESULT(value) bl::detail::_f256::canonicalize_math_result(value) - #else - #define F256_CANONICALIZE_MATH_RESULT(value) (value) - #endif - // Shewchuk-style expansion sum, expansions sorted by increasing magnitude (small -> large) // expansion arithmetic BL_FORCE_INLINE constexpr int fast_expansion_sum_zeroelim(int elen, const double* e, int flen, const double* f, double* h) noexcept diff --git a/include/fltx/detail/f256_expressions.h b/include/fltx/detail/f256_expressions.h index f83e732..a5a52c9 100644 --- a/include/fltx/detail/f256_expressions.h +++ b/include/fltx/detail/f256_expressions.h @@ -50,7 +50,7 @@ namespace detail::_f256 // primitives and kernels double t0{}, t1{}; double s0{}, s1{}, s2{}; - #if BL_F256_ENABLE_SIMD && (BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) + #if FLTX_F256_ENABLE_SIMD && (FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) if (f256_runtime_simd_enabled()) { simd::f64x2 p01{}, q01{}; @@ -71,12 +71,12 @@ namespace detail::_f256 // primitives and kernels else #endif { - two_prod_precise(a.x0, a.x0, p0, q0); - two_prod_precise(a.x0, a.x1, p1, q1); - two_prod_precise(a.x0, a.x2, p3, q3); - two_prod_precise(a.x1, a.x1, p4, q4); - two_prod_precise(a.x0, a.x3, p6, q6); - two_prod_precise(a.x1, a.x2, p7, q7); + detail::fp::two_prod_precise(a.x0, a.x0, p0, q0); + detail::fp::two_prod_precise(a.x0, a.x1, p1, q1); + detail::fp::two_prod_precise(a.x0, a.x2, p3, q3); + detail::fp::two_prod_precise(a.x1, a.x1, p4, q4); + detail::fp::two_prod_precise(a.x0, a.x3, p6, q6); + detail::fp::two_prod_precise(a.x1, a.x2, p7, q7); } p2 = p1; q2 = q1; @@ -114,86 +114,73 @@ namespace detail::_f256 // primitives and kernels return { p0, p1, s0, t0, t1 }; } - BL_FORCE_INLINE constexpr f256_raw5 mul_raw5_inline(const f256_s& a, const f256_s& b) noexcept + [[nodiscard]] BL_FORCE_INLINE constexpr f256_raw5 mul_raw5_from_products( + const f256_s& a, + const f256_s& b, + product_terms products) noexcept { - using namespace detail::_f256; - - if (&a == &b) - return sqr_raw5_inline(a); - - double p0{}, p1{}, p2{}, p3{}, p4{}, p5{}; - double q0{}, q1{}, q2{}, q3{}, q4{}, q5{}; - double p6{}, p7{}, p8{}, p9{}; - double q6{}, q7{}, q8{}, q9{}; double r0{}, r1{}; double t0{}, t1{}; double s0{}, s1{}, s2{}; - #if BL_F256_ENABLE_SIMD && (BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) - if (f256_runtime_simd_enabled()) - { - simd::f64x2 p01{}, q01{}; - simd::f64x2 p23{}, q23{}; - simd::f64x2 p45{}, q45{}; - simd::f64x2 p67{}, q67{}; - simd::f64x2 p89{}, q89{}; + three_sum(products.p[1], products.p[2], products.q[0]); + three_sum(products.p[2], products.q[1], products.q[2]); + three_sum(products.p[3], products.p[4], products.p[5]); - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x0, a.x0), simd::f64x2_set(b.x0, b.x1), p01, q01); - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x1, a.x0), simd::f64x2_set(b.x0, b.x2), p23, q23); - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x1, a.x2), simd::f64x2_set(b.x1, b.x0), p45, q45); - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x0, a.x1), simd::f64x2_set(b.x3, b.x2), p67, q67); - simd::f64x2_two_prod_precise(simd::f64x2_set(a.x2, a.x3), simd::f64x2_set(b.x1, b.x0), p89, q89); + two_sum_precise(products.p[2], products.p[3], s0, t0); + two_sum_precise(products.q[1], products.p[4], s1, t1); + s2 = products.q[2] + products.p[5]; + two_sum_precise(s1, t0, s1, t0); + s2 += (t0 + t1); - simd::f64x2_store(p01, p0, p1); - simd::f64x2_store(q01, q0, q1); - simd::f64x2_store(p23, p2, p3); - simd::f64x2_store(q23, q2, q3); - simd::f64x2_store(p45, p4, p5); - simd::f64x2_store(q45, q4, q5); - simd::f64x2_store(p67, p6, p7); - simd::f64x2_store(q67, q6, q7); - simd::f64x2_store(p89, p8, p9); - simd::f64x2_store(q89, q8, q9); - } - else - #endif - { - two_prod_precise(a.x0, b.x0, p0, q0); - two_prod_precise(a.x0, b.x1, p1, q1); - two_prod_precise(a.x1, b.x0, p2, q2); - two_prod_precise(a.x0, b.x2, p3, q3); - two_prod_precise(a.x1, b.x1, p4, q4); - two_prod_precise(a.x2, b.x0, p5, q5); - two_prod_precise(a.x0, b.x3, p6, q6); - two_prod_precise(a.x1, b.x2, p7, q7); - two_prod_precise(a.x2, b.x1, p8, q8); - two_prod_precise(a.x3, b.x0, p9, q9); - } + two_sum_precise(products.q[0], products.q[3], products.q[0], products.q[3]); + two_sum_precise(products.q[4], products.q[5], products.q[4], products.q[5]); + two_sum_precise(products.p[6], products.p[7], products.p[6], products.p[7]); + two_sum_precise(products.p[8], products.p[9], products.p[8], products.p[9]); - three_sum(p1, p2, q0); - three_sum(p2, q1, q2); - three_sum(p3, p4, p5); + two_sum_precise(products.q[0], products.q[4], t0, t1); + t1 += products.q[3] + products.q[5]; + two_sum_precise(products.p[6], products.p[8], r0, r1); + r1 += products.p[7] + products.p[9]; + two_sum_precise(t0, r0, products.q[3], products.q[4]); + products.q[4] += t1 + r1; - two_sum_precise(p2, p3, s0, t0); - two_sum_precise(q1, p4, s1, t1); - s2 = q2 + p5; - two_sum_precise(s1, t0, s1, t0); - s2 += (t0 + t1); + two_sum_precise(products.q[3], s1, t0, t1); + t1 += products.q[4]; + t1 += a.x1 * b.x3 + a.x2 * b.x2 + a.x3 * b.x1 + + products.q[6] + products.q[7] + products.q[8] + products.q[9] + s2; - two_sum_precise(q0, q3, q0, q3); - two_sum_precise(q4, q5, q4, q5); - two_sum_precise(p6, p7, p6, p7); - two_sum_precise(p8, p9, p8, p9); + return { products.p[0], products.p[1], s0, t0, t1 }; + } - two_sum_precise(q0, q4, t0, t1); t1 += (q3 + q5); - two_sum_precise(p6, p8, r0, r1); r1 += (p7 + p9); - two_sum_precise(t0, r0, q3, q4); q4 += (t1 + r1); + [[nodiscard]] BL_FORCE_INLINE f256_raw5 mul_raw5_hardware_inline( + const f256_s& a, + const f256_s& b) noexcept + { + product_terms products{}; + fill_mul_products_fma(a, b, products); + return mul_raw5_from_products(a, b, products); + } - two_sum_precise(q3, s1, t0, t1); - t1 += q4; - t1 += a.x1 * b.x3 + a.x2 * b.x2 + a.x3 * b.x1 + q6 + q7 + q8 + q9 + s2; + [[nodiscard]] BL_FORCE_INLINE constexpr f256_raw5 mul_raw5_dekker_inline( + const f256_s& a, + const f256_s& b) noexcept + { + product_terms products{}; + fill_mul_products_dekker(a, b, products); + return mul_raw5_from_products(a, b, products); + } - return { p0, p1, s0, t0, t1 }; + [[nodiscard]] BL_FORCE_INLINE constexpr f256_raw5 mul_raw5_inline( + const f256_s& a, + const f256_s& b) noexcept + { + if (&a == &b) + return sqr_raw5_inline(a); + + product_terms products{}; + fill_mul_products_auto(a, b, products); + return mul_raw5_from_products(a, b, products); } BL_FORCE_INLINE constexpr f256_raw5 neg_raw5(f256_raw5 v) noexcept @@ -202,7 +189,7 @@ namespace detail::_f256 // primitives and kernels } // scaling helpers - BL_FORCE_INLINE constexpr f256_s mul_double_inline(const f256_s& a, double b) noexcept; + BL_FORCE_INLINE constexpr f256_s mul_double_product_inline(const f256_s& a, double b) noexcept; BL_FORCE_INLINE constexpr f256_s scale_unchecked_inline(const f256_s& a, double scalar) noexcept { return { a.x0 * scalar, a.x1 * scalar, a.x2 * scalar, a.x3 * scalar }; @@ -210,8 +197,8 @@ namespace detail::_f256 // primitives and kernels BL_FORCE_INLINE constexpr f256_s scale_pow2_inline(const f256_s& a, int exponent, bool negative) noexcept { - #if defined(BL_FAST_MATH) - if (!bl::use_constexpr_math()) + #if defined(FLTX_FAST_MATH) + if (!bl::detail::is_constant_evaluated()) { const double scale = bl::detail::fp::scalbn(negative ? -1.0 : 1.0, exponent); return scale_unchecked_inline(a, scale); @@ -223,14 +210,14 @@ namespace detail::_f256 // primitives and kernels const double x2 = bl::detail::fp::scalbn(a.x2, exponent); const double x3 = bl::detail::fp::scalbn(a.x3, exponent); - #if !defined(BL_FAST_MATH) + #if !defined(FLTX_FAST_MATH) if (!finite_scaled_limb_is_safe(a.x0, x0) || !finite_scaled_limb_is_safe(a.x1, x1) || !finite_scaled_limb_is_safe(a.x2, x2) || !finite_scaled_limb_is_safe(a.x3, x3)) { const double scalar = negative ? -bl::detail::fp::scalbn(1.0, exponent) : bl::detail::fp::scalbn(1.0, exponent); - return mul_double_inline(a, scalar); + return mul_double_product_inline(a, scalar); } #endif @@ -242,8 +229,8 @@ namespace detail::_f256 // primitives and kernels BL_FORCE_INLINE constexpr f256_s scale_pow2_or_checked_inline(const f256_s& a,double scalar,pow2_scale_info scale) noexcept { - #if defined(BL_FAST_MATH) - if (!bl::use_constexpr_math()) + #if defined(FLTX_FAST_MATH) + if (!bl::detail::is_constant_evaluated()) return scale_unchecked_inline(a, scalar); #endif @@ -256,10 +243,10 @@ namespace detail::_f256 // primitives and kernels if (scale.valid) return scale_pow2_or_checked_inline(a, b, scale); - return mul_double_inline(a, b); + return mul_double_product_inline(a, b); } - BL_FORCE_INLINE constexpr f256_s mul_pow2_or_double_checked_inline(const f256_s& a, double b) noexcept + BL_FORCE_INLINE constexpr f256_s mul_pow2_or_double_canonical_inline(const f256_s& a, double b) noexcept { if (bl::detail::fp::isinf_or_nan(a.x0) || bl::detail::fp::isinf_or_nan(b)) [[unlikely]] return mul_special(a, f256_s{ b, 0.0, 0.0, 0.0 }); @@ -321,7 +308,12 @@ namespace detail::_f256 // primitives and kernels BL_FORCE_INLINE constexpr f256_s add_raw5_raw5_value_inline(f256_raw5 a, f256_raw5 b, const f256_s& v) noexcept { - return add_inline(add_raw5_raw5_inline(a, b), v); + return add_finite_inline(add_raw5_raw5_inline(a, b), v); + } + + BL_FORCE_INLINE constexpr f256_s add_raw5_double_inline(f256_raw5 p, double v) noexcept + { + return add_raw5_value_inline(p, f256_s{ v }); } // fused expression kernels @@ -330,6 +322,55 @@ namespace detail::_f256 // primitives and kernels return add_raw5_value_inline(mul_raw5_inline(a, b), c); } + FLTX_X86_FMA_KERNEL_INLINE f256_s mul_add_hardware_inline( + const f256_s& a, + const f256_s& b, + const f256_s& c) noexcept + { + return add_raw5_value_inline(mul_raw5_hardware_inline(a, b), c); + } + + BL_FORCE_INLINE constexpr f256_s mul_add_dekker_inline( + const f256_s& a, + const f256_s& b, + const f256_s& c) noexcept + { + return add_raw5_value_inline(mul_raw5_dekker_inline(a, b), c); + } + + [[nodiscard]] BL_NO_INLINE constexpr f256_s mul_add_exact_inline( + const f256_s& a, + const f256_s& b, + const f256_s& c) noexcept + { + const double a_limb[4]{ a.x0, a.x1, a.x2, a.x3 }; + const double b_limb[4]{ b.x0, b.x1, b.x2, b.x3 }; + const double c_limb[4]{ c.x0, c.x1, c.x2, c.x3 }; + double expansion[40]{}; + int count = 0; + + for (double ai : a_limb) + { + for (double bi : b_limb) + { + double product{}, error{}; + detail::fp::two_prod_precise(ai, bi, product, error); + count = detail::fp::grow_expansion_zeroelim(count, expansion, error); + count = detail::fp::grow_expansion_zeroelim(count, expansion, product); + } + } + + for (double ci : c_limb) + count = detail::fp::grow_expansion_zeroelim(count, expansion, ci); + + return from_expansion_fast(expansion, count); + } + + BL_FORCE_INLINE constexpr f256_s mul_add_double_rhs_inline(const f256_s& a, const f256_s& b, double c) noexcept + { + return add_raw5_double_inline(mul_raw5_inline(a, b), c); + } + BL_FORCE_INLINE constexpr f256_s mul_sub_inline(const f256_s& a, const f256_s& b, const f256_s& c) noexcept { return add_raw5_value_inline(mul_raw5_inline(a, b), -c); @@ -372,22 +413,22 @@ namespace detail::_f256 // primitives and kernels BL_FORCE_INLINE constexpr f256_s add_add_add_inline(const f256_s& a, const f256_s& b, const f256_s& c) noexcept { - return add_inline(add_inline(a, b), c); + return add_finite_inline(add_finite_inline(a, b), c); } BL_FORCE_INLINE constexpr f256_s add_sub_add_inline(const f256_s& a, const f256_s& b, const f256_s& c) noexcept { - return add_inline(sub_inline(a, b), c); + return add_finite_inline(sub_finite_inline(a, b), c); } BL_FORCE_INLINE constexpr f256_s add_add_sub_inline(const f256_s& a, const f256_s& b, const f256_s& c) noexcept { - return sub_inline(add_inline(a, b), c); + return sub_finite_inline(add_finite_inline(a, b), c); } BL_FORCE_INLINE constexpr f256_s add_sub_sub_inline(const f256_s& a, const f256_s& b, const f256_s& c) noexcept { - return sub_inline(sub_inline(a, b), c); + return sub_finite_inline(sub_finite_inline(a, b), c); } template BL_FORCE_INLINE constexpr double scale_limb_inline(double value) noexcept @@ -432,7 +473,7 @@ namespace detail::_f256 // primitives and kernels double q0{}, q1{}, q2{}; double s0{}, s1{}, s2{}, s3{}, s4{}; - #if BL_F256_ENABLE_SIMD && (BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) + #if FLTX_F256_ENABLE_SIMD && (FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) if (f256_runtime_simd_enabled()) { simd::f64x2 p01{}, q01{}; @@ -469,7 +510,7 @@ namespace detail::_f256 // primitives and kernels { const pow2_scale_info scale = exact_pow2_scale_info(scalar); if (scale.valid) - return add_inline(add, scale_pow2_or_checked_inline(value, scalar, scale)); + return add_finite_inline(add, scale_pow2_or_checked_inline(value, scalar, scale)); return add_raw5_value_inline(mul_double_raw5_inline(value, scalar), add); } @@ -478,7 +519,7 @@ namespace detail::_f256 // primitives and kernels { const pow2_scale_info scale = exact_pow2_scale_info(scalar); if (scale.valid) - return sub_inline(min, scale_pow2_or_checked_inline(value, scalar, scale)); + return sub_finite_inline(min, scale_pow2_or_checked_inline(value, scalar, scale)); return add_raw5_value_inline(neg_raw5(mul_double_raw5_inline(value, scalar)), min); } @@ -487,19 +528,28 @@ namespace detail::_f256 // primitives and kernels { const pow2_scale_info scale = exact_pow2_scale_info(scalar); if (scale.valid) - return sub_inline(scale_pow2_or_checked_inline(value, scalar, scale), sub); + return sub_finite_inline(scale_pow2_or_checked_inline(value, scalar, scale), sub); return add_raw5_value_inline(mul_double_raw5_inline(value, scalar), -sub); } + BL_FORCE_INLINE constexpr f256_s mul_double_sub_pow2_inline(const f256_s& value, double scalar, const f256_s& sub) noexcept + { + const pow2_scale_info scale = exact_pow2_scale_info(scalar); + if (scale.valid) + return sub_finite_inline(scale_pow2_or_checked_inline(value, scalar, scale), sub); + + return mul_double_sub_inline(value, scalar, sub); + } + BL_FORCE_INLINE constexpr f256_s div_add_double_inline(const f256_s& numerator, const f256_s& base_den, double scalar) noexcept { - return div_inline(numerator, add_double_inline(base_den, scalar)); + return div_prechecked_inline(numerator, add_double_finite_inline(base_den, scalar)); } BL_FORCE_INLINE constexpr f256_s div_double_sub_inline(const f256_s& numerator, double scalar, const f256_s& base_den) noexcept { - return div_inline(numerator, sub_double_inline(scalar, base_den)); + return div_prechecked_inline(numerator, sub_double_finite_inline(scalar, base_den)); } } // namespace detail::_f256 @@ -791,82 +841,115 @@ namespace detail::_f256_expr template using expr_t = clean_t()))>; // evaluation dispatch + // Evaluates full f256 addition through constexpr or compiled canonical dispatch. BL_FORCE_INLINE constexpr f256_s add_eval(const f256_s& a, const f256_s& b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::add_checked_inline(a, b), - detail::_f256_runtime::add(a, b) + detail::_f256::add_canonical_inline(a, b), + detail::_f256_runtime::add_canonical(a, b) ); } + // Evaluates full f256 subtraction through constexpr or compiled canonical dispatch. BL_FORCE_INLINE constexpr f256_s sub_eval(const f256_s& a, const f256_s& b) noexcept { + BL_FP_IF_CONSTEVAL_WARNING_PUSH + BL_FP_IF_CONSTEVAL + { + if (detail::fp::isinf_or_nan(a.x0) || detail::fp::isinf_or_nan(b.x0)) [[unlikely]] + return detail::_f256::sub_special(a, b); + } + BL_FP_IF_CONSTEVAL_WARNING_POP + BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::sub_checked_inline(a, b), - detail::_f256_runtime::sub(a, b) + detail::_f256::sub_canonical_inline(a, b), + detail::_f256_runtime::sub_canonical(a, b) ); } + // Evaluates full f256 multiplication through constexpr or compiled canonical dispatch. BL_FORCE_INLINE constexpr f256_s mul_eval(const f256_s& a, const f256_s& b) noexcept { + BL_FP_IF_CONSTEVAL_WARNING_PUSH + BL_FP_IF_CONSTEVAL + { + if (detail::fp::isinf_or_nan(a.x0) || detail::fp::isinf_or_nan(b.x0) || bl::iszero(a) || bl::iszero(b)) [[unlikely]] + return detail::_f256::mul_special(a, b); + } + BL_FP_IF_CONSTEVAL_WARNING_POP + +#if BL_FP_BARRIER_ACTIVE BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::mul_checked_inline(a, b), - detail::_f256_runtime::mul(a, b) + detail::_f256::mul_canonical_inline(a, b), + detail::_f256::mul_fastmath_guarded(a, b) ); +#else + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f256::mul_canonical_inline(a, b), + detail::_f256_runtime::mul_canonical(a, b) + ); +#endif } + // Evaluates full f256 division through constexpr or compiled canonical dispatch. BL_FORCE_INLINE constexpr f256_s div_eval(const f256_s& a, const f256_s& b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_checked_inline(a, b), - detail::_f256_runtime::div(a, b) + detail::_f256::div_canonical_inline(a, b), + detail::_f256_runtime::div_canonical(a, b) ); } + // Evaluates f256-plus-double addition through constexpr or compiled canonical dispatch. BL_FORCE_INLINE constexpr f256_s add_double_eval(const f256_s& a, double b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::add_double_checked_inline(a, b), - detail::_f256_runtime::add_double(a, b) + detail::_f256::add_double_canonical_inline(a, b), + detail::_f256_runtime::add_double_canonical(a, b) ); } + // Evaluates f256-minus-double subtraction through constexpr or compiled canonical dispatch. BL_FORCE_INLINE constexpr f256_s sub_double_eval(const f256_s& a, double b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::sub_double_checked_inline(a, b), - detail::_f256_runtime::sub_double(a, b) + detail::_f256::sub_double_canonical_inline(a, b), + detail::_f256_runtime::sub_double_canonical(a, b) ); } + // Evaluates double-minus-f256 subtraction through constexpr or compiled canonical dispatch. BL_FORCE_INLINE constexpr f256_s sub_double_eval(double a, const f256_s& b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::sub_double_checked_inline(a, b), - detail::_f256_runtime::sub_double(a, b) + detail::_f256::sub_double_canonical_inline(a, b), + detail::_f256_runtime::sub_double_canonical(a, b) ); } + // Evaluates f256-by-double division through constexpr or compiled canonical dispatch. BL_FORCE_INLINE constexpr f256_s div_double_eval(const f256_s& a, double b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_double_checked_inline(a, b), - detail::_f256_runtime::div_double(a, b) + detail::_f256::div_double_canonical_inline(a, b), + detail::_f256_runtime::div_double_canonical(a, b) ); } + // Evaluates double-by-f256 division through constexpr or compiled canonical dispatch. BL_FORCE_INLINE constexpr f256_s div_double_eval(double a, const f256_s& b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_double_checked_inline(a, b), - detail::_f256_runtime::div_double(a, b) + detail::_f256::div_double_canonical_inline(a, b), + detail::_f256_runtime::div_double_canonical(a, b) ); } + // Evaluates f256-by-double multiplication with the power-of-two fast path. BL_FORCE_INLINE constexpr f256_s mul_pow2_or_double_eval(const f256_s& a, double b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::mul_pow2_or_double_checked_inline(a, b), + detail::_f256::mul_pow2_or_double_canonical_inline(a, b), detail::_f256_runtime::mul_pow2_or_double(a, b) ); } @@ -1050,7 +1133,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_add_add_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::add_inline(detail::_f256::mul_add_inline(a, b, c), d), + detail::_f256::add_finite_inline(detail::_f256::mul_add_inline(a, b, c), d), detail::_f256_runtime::mul_add_add(a, b, c, d) ); } @@ -1058,7 +1141,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_add_sub_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::sub_inline(detail::_f256::mul_add_inline(a, b, c), d), + detail::_f256::sub_finite_inline(detail::_f256::mul_add_inline(a, b, c), d), detail::_f256_runtime::mul_add_sub(a, b, c, d) ); } @@ -1066,7 +1149,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_sub_add_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::add_inline(detail::_f256::mul_sub_inline(a, b, c), d), + detail::_f256::add_finite_inline(detail::_f256::mul_sub_inline(a, b, c), d), detail::_f256_runtime::mul_sub_add(a, b, c, d) ); } @@ -1074,7 +1157,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_sub_sub_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::sub_inline(detail::_f256::mul_sub_inline(a, b, c), d), + detail::_f256::sub_finite_inline(detail::_f256::mul_sub_inline(a, b, c), d), detail::_f256_runtime::mul_sub_sub(a, b, c, d) ); } @@ -1082,7 +1165,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_add_mul_add_mul_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e, const f256_s& f) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::add_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), detail::_f256::mul_inline(e, f)), + detail::_f256::add_finite_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), detail::_f256::mul_product_inline(e, f)), detail::_f256_runtime::mul_add_mul_add_mul(a, b, c, d, e, f) ); } @@ -1090,7 +1173,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_add_mul_add_mul_add_mul_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e, const f256_s& f, const f256_s& g, const f256_s& h) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::add_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), detail::_f256::mul_add_mul_inline(e, f, g, h)), + detail::_f256::add_finite_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), detail::_f256::mul_add_mul_inline(e, f, g, h)), detail::_f256_runtime::mul_add_mul_add_mul_add_mul(a, b, c, d, e, f, g, h) ); } @@ -1098,7 +1181,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s add_add_add_add_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::add_inline(detail::_f256::add_add_add_inline(a, b, c), d), + detail::_f256::add_finite_inline(detail::_f256::add_add_add_inline(a, b, c), d), detail::_f256_runtime::add_add_add_add(a, b, c, d) ); } @@ -1106,7 +1189,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s add_add_add_sub_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::sub_inline(detail::_f256::add_add_add_inline(a, b, c), d), + detail::_f256::sub_finite_inline(detail::_f256::add_add_add_inline(a, b, c), d), detail::_f256_runtime::add_add_add_sub(a, b, c, d) ); } @@ -1114,7 +1197,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s add_add_sub_sub_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::sub_inline(detail::_f256::add_add_sub_inline(a, b, c), d), + detail::_f256::sub_finite_inline(detail::_f256::add_add_sub_inline(a, b, c), d), detail::_f256_runtime::add_add_sub_sub(a, b, c, d) ); } @@ -1122,7 +1205,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s add_sub_sub_sub_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::sub_inline(detail::_f256::add_sub_sub_inline(a, b, c), d), + detail::_f256::sub_finite_inline(detail::_f256::add_sub_sub_inline(a, b, c), d), detail::_f256_runtime::add_sub_sub_sub(a, b, c, d) ); } @@ -1146,7 +1229,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s div_add_eval(const f256_s& numerator, const f256_s& a, const f256_s& b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(numerator, detail::_f256::add_inline(a, b)), + detail::_f256::div_prechecked_inline(numerator, detail::_f256::add_finite_inline(a, b)), detail::_f256_runtime::div_add(numerator, a, b) ); } @@ -1154,7 +1237,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s div_sub_eval(const f256_s& numerator, const f256_s& a, const f256_s& b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(numerator, detail::_f256::sub_inline(a, b)), + detail::_f256::div_prechecked_inline(numerator, detail::_f256::sub_finite_inline(a, b)), detail::_f256_runtime::div_sub(numerator, a, b) ); } @@ -1162,7 +1245,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_add_div_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& den) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::mul_add_inline(a, b, c), den), + detail::_f256::div_prechecked_inline(detail::_f256::mul_add_inline(a, b, c), den), detail::_f256_runtime::mul_add_div(a, b, c, den) ); } @@ -1170,7 +1253,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_sub_div_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& den) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::mul_sub_inline(a, b, c), den), + detail::_f256::div_prechecked_inline(detail::_f256::mul_sub_inline(a, b, c), den), detail::_f256_runtime::mul_sub_div(a, b, c, den) ); } @@ -1178,7 +1261,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s value_sub_mul_div_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& den) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::value_sub_mul_inline(a, b, c), den), + detail::_f256::div_prechecked_inline(detail::_f256::value_sub_mul_inline(a, b, c), den), detail::_f256_runtime::value_sub_mul_div(a, b, c, den) ); } @@ -1186,7 +1269,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_add_mul_div_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& den) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), den), + detail::_f256::div_prechecked_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), den), detail::_f256_runtime::mul_add_mul_div(a, b, c, d, den) ); } @@ -1194,7 +1277,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_sub_mul_div_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& den) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::mul_sub_mul_inline(a, b, c, d), den), + detail::_f256::div_prechecked_inline(detail::_f256::mul_sub_mul_inline(a, b, c, d), den), detail::_f256_runtime::mul_sub_mul_div(a, b, c, d, den) ); } @@ -1202,7 +1285,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s add_add_add_div_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& den) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::add_add_add_inline(a, b, c), den), + detail::_f256::div_prechecked_inline(detail::_f256::add_add_add_inline(a, b, c), den), detail::_f256_runtime::add_add_add_div(a, b, c, den) ); } @@ -1210,7 +1293,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s add_sub_add_div_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& den) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::add_sub_add_inline(a, b, c), den), + detail::_f256::div_prechecked_inline(detail::_f256::add_sub_add_inline(a, b, c), den), detail::_f256_runtime::add_sub_add_div(a, b, c, den) ); } @@ -1218,7 +1301,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s add_add_sub_div_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& den) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::add_add_sub_inline(a, b, c), den), + detail::_f256::div_prechecked_inline(detail::_f256::add_add_sub_inline(a, b, c), den), detail::_f256_runtime::add_add_sub_div(a, b, c, den) ); } @@ -1226,7 +1309,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s add_sub_sub_div_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& den) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::add_sub_sub_inline(a, b, c), den), + detail::_f256::div_prechecked_inline(detail::_f256::add_sub_sub_inline(a, b, c), den), detail::_f256_runtime::add_sub_sub_div(a, b, c, den) ); } @@ -1234,7 +1317,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s add_mul_double_div_eval(const f256_s& add, const f256_s& value, double scalar, const f256_s& den) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::add_mul_double_inline(add, value, scalar), den), + detail::_f256::div_prechecked_inline(detail::_f256::add_mul_double_inline(add, value, scalar), den), detail::_f256_runtime::add_mul_double_div(add, value, scalar, den) ); } @@ -1242,7 +1325,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s sub_mul_double_div_eval(const f256_s& min, const f256_s& value, double scalar, const f256_s& den) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::sub_mul_double_inline(min, value, scalar), den), + detail::_f256::div_prechecked_inline(detail::_f256::sub_mul_double_inline(min, value, scalar), den), detail::_f256_runtime::sub_mul_double_div(min, value, scalar, den) ); } @@ -1250,7 +1333,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_double_sub_div_eval(const f256_s& value, double scalar, const f256_s& sub, const f256_s& den) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::mul_double_sub_inline(value, scalar, sub), den), + detail::_f256::div_prechecked_inline(detail::_f256::mul_double_sub_inline(value, scalar, sub), den), detail::_f256_runtime::mul_double_sub_div(value, scalar, sub, den) ); } @@ -1258,7 +1341,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_add_div_add_double_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& den, double scalar) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::mul_add_inline(a, b, c), detail::_f256::add_double_inline(den, scalar)), + detail::_f256::div_prechecked_inline(detail::_f256::mul_add_inline(a, b, c), detail::_f256::add_double_finite_inline(den, scalar)), detail::_f256_runtime::mul_add_div_add_double(a, b, c, den, scalar) ); } @@ -1266,7 +1349,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_sub_div_add_double_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& den, double scalar) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::mul_sub_inline(a, b, c), detail::_f256::add_double_inline(den, scalar)), + detail::_f256::div_prechecked_inline(detail::_f256::mul_sub_inline(a, b, c), detail::_f256::add_double_finite_inline(den, scalar)), detail::_f256_runtime::mul_sub_div_add_double(a, b, c, den, scalar) ); } @@ -1274,7 +1357,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s value_sub_mul_div_add_double_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& den, double scalar) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::value_sub_mul_inline(a, b, c), detail::_f256::add_double_inline(den, scalar)), + detail::_f256::div_prechecked_inline(detail::_f256::value_sub_mul_inline(a, b, c), detail::_f256::add_double_finite_inline(den, scalar)), detail::_f256_runtime::value_sub_mul_div_add_double(a, b, c, den, scalar) ); } @@ -1282,7 +1365,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_add_mul_div_add_double_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& den, double scalar) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), detail::_f256::add_double_inline(den, scalar)), + detail::_f256::div_prechecked_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), detail::_f256::add_double_finite_inline(den, scalar)), detail::_f256_runtime::mul_add_mul_div_add_double(a, b, c, d, den, scalar) ); } @@ -1290,7 +1373,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_sub_mul_div_add_double_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& den, double scalar) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::mul_sub_mul_inline(a, b, c, d), detail::_f256::add_double_inline(den, scalar)), + detail::_f256::div_prechecked_inline(detail::_f256::mul_sub_mul_inline(a, b, c, d), detail::_f256::add_double_finite_inline(den, scalar)), detail::_f256_runtime::mul_sub_mul_div_add_double(a, b, c, d, den, scalar) ); } @@ -1298,7 +1381,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s add_add_add_div_add_double_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& den, double scalar) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::add_add_add_inline(a, b, c), detail::_f256::add_double_inline(den, scalar)), + detail::_f256::div_prechecked_inline(detail::_f256::add_add_add_inline(a, b, c), detail::_f256::add_double_finite_inline(den, scalar)), detail::_f256_runtime::add_add_add_div_add_double(a, b, c, den, scalar) ); } @@ -1306,7 +1389,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s add_sub_add_div_add_double_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& den, double scalar) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::add_sub_add_inline(a, b, c), detail::_f256::add_double_inline(den, scalar)), + detail::_f256::div_prechecked_inline(detail::_f256::add_sub_add_inline(a, b, c), detail::_f256::add_double_finite_inline(den, scalar)), detail::_f256_runtime::add_sub_add_div_add_double(a, b, c, den, scalar) ); } @@ -1314,7 +1397,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s add_add_sub_div_add_double_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& den, double scalar) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::add_add_sub_inline(a, b, c), detail::_f256::add_double_inline(den, scalar)), + detail::_f256::div_prechecked_inline(detail::_f256::add_add_sub_inline(a, b, c), detail::_f256::add_double_finite_inline(den, scalar)), detail::_f256_runtime::add_add_sub_div_add_double(a, b, c, den, scalar) ); } @@ -1322,7 +1405,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s add_sub_sub_div_add_double_eval(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& den, double scalar) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::add_sub_sub_inline(a, b, c), detail::_f256::add_double_inline(den, scalar)), + detail::_f256::div_prechecked_inline(detail::_f256::add_sub_sub_inline(a, b, c), detail::_f256::add_double_finite_inline(den, scalar)), detail::_f256_runtime::add_sub_sub_div_add_double(a, b, c, den, scalar) ); } @@ -1330,7 +1413,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s add_mul_double_div_add_double_eval(const f256_s& add, const f256_s& value, double val_s, const f256_s& den, double den_s) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::add_mul_double_inline(add, value, val_s), detail::_f256::add_double_inline(den, den_s)), + detail::_f256::div_prechecked_inline(detail::_f256::add_mul_double_inline(add, value, val_s), detail::_f256::add_double_finite_inline(den, den_s)), detail::_f256_runtime::add_mul_double_div_add_double(add, value, val_s, den, den_s) ); } @@ -1338,7 +1421,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s sub_mul_double_div_add_double_eval(const f256_s& min, const f256_s& value, double val_s, const f256_s& den, double den_s) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::sub_mul_double_inline(min, value, val_s), detail::_f256::add_double_inline(den, den_s)), + detail::_f256::div_prechecked_inline(detail::_f256::sub_mul_double_inline(min, value, val_s), detail::_f256::add_double_finite_inline(den, den_s)), detail::_f256_runtime::sub_mul_double_div_add_double(min, value, val_s, den, den_s) ); } @@ -1346,7 +1429,7 @@ namespace detail::_f256_expr BL_FORCE_INLINE constexpr f256_s mul_double_sub_div_add_double_eval(const f256_s& value, double val_s, const f256_s& sub, const f256_s& den, double den_s) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_inline(detail::_f256::mul_double_sub_inline(value, val_s, sub), detail::_f256::add_double_inline(den, den_s)), + detail::_f256::div_prechecked_inline(detail::_f256::mul_double_sub_inline(value, val_s, sub), detail::_f256::add_double_finite_inline(den, den_s)), detail::_f256_runtime::mul_double_sub_div_add_double(value, val_s, sub, den, den_s) ); } diff --git a/include/fltx/detail/f256_math_basic.h b/include/fltx/detail/f256_math_basic.h index c969216..67ffa7a 100644 --- a/include/fltx/detail/f256_math_basic.h +++ b/include/fltx/detail/f256_math_basic.h @@ -12,12 +12,27 @@ #ifndef F256_DETAIL_MATH_BASIC_INCLUDED #define F256_DETAIL_MATH_BASIC_INCLUDED #include "fltx/detail/f256_math_kernels.h" +#include "fltx/detail/pow_tables.h" #include "fltx/detail/simd.h" namespace bl { namespace detail::_f256 { + inline constexpr int pow10_f256_min_exponent = detail::pow_tables::pow10_min_exponent; + inline constexpr int pow10_f256_max_exponent = detail::pow_tables::pow10_max_exponent; + + static_assert(sizeof(detail::pow_table_entry) == sizeof(f256_s)); + static_assert(alignof(detail::pow_table_entry) == alignof(f256_s)); + + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s pow_table_entry_to_f256(const detail::pow_table_entry& row) noexcept + { + BL_CONSTEXPR_RUNTIME_DISPATCH( + (f256_s{ row.x0, row.x1, row.x2, row.x3 }), + std::bit_cast(row) + ); + } + [[nodiscard]] BL_FORCE_INLINE constexpr double floor_limb(double x) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( @@ -30,7 +45,7 @@ namespace detail::_f256 { BL_CONSTEXPR_RUNTIME_DISPATCH( detail::fp::ceil(x), - -std::floor(-x) + std::ceil(x) ); } } @@ -64,7 +79,7 @@ namespace detail::_f256 namespace detail::_f256_runtime { - [[nodiscard]] BL_FORCE_INLINE double nearbyint_limb(double x) noexcept + [[nodiscard]] BL_FORCE_INLINE double round_nearest_even_limb(double x) noexcept { if (detail::fp::iszero_or_inf_or_nan(x)) return x; @@ -81,58 +96,22 @@ namespace detail::_f256_runtime namespace detail::_f256 { - [[nodiscard]] BL_FORCE_INLINE constexpr double nearbyint_limb(double x) noexcept + [[nodiscard]] BL_FORCE_INLINE constexpr double round_nearest_even_limb(double x) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::fp::nearbyint(x), - detail::_f256_runtime::nearbyint_limb(x) + detail::fp::round_nearest_even(x), + detail::_f256_runtime::round_nearest_even_limb(x) ); } - [[nodiscard]] BL_FORCE_INLINE double nearbyint_limb_finite_small(double x) noexcept - { - #if BL_FLTX_HAS_SSE2 - return static_cast(_mm_cvtsd_si64(_mm_set_sd(x))); - #else - return nearbyint_limb(x); - #endif - } -} - -namespace detail::_f256_runtime -{ - [[nodiscard]] BL_FORCE_INLINE double round_half_away_zero_limb(double x) noexcept - { - if (detail::fp::iszero_or_inf_or_nan(x)) - return x; - - const double ax = detail::fp::absd(x); - if (ax >= detail::fp::double_integer_threshold) - return x; - - double out = static_cast(static_cast(ax + 0.5)); - if (detail::fp::signbit(x)) - out = -out; - return out == 0.0 ? (detail::fp::signbit(x) ? -0.0 : 0.0) : out; - } } namespace detail::_f256 { - [[nodiscard]] BL_FORCE_INLINE constexpr double round_half_away_zero_limb(double x) noexcept + [[nodiscard]] BL_FORCE_INLINE double round_nearest_away_from_zero_limb_finite_small( + double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::fp::round_half_away_zero(x), - detail::_f256_runtime::round_half_away_zero_limb(x) - ); - } - - [[nodiscard]] BL_FORCE_INLINE double round_half_away_zero_limb_finite_small(double x) noexcept - { - double out = static_cast(static_cast(detail::fp::absd(x) + 0.5)); - if (detail::fp::signbit(x)) - out = -out; - return out; + return detail::fp::round_nearest_away_from_zero(x); } [[nodiscard]] BL_FORCE_INLINE constexpr bool has_negative_tail(double x1, double x2, double x3) noexcept @@ -145,6 +124,51 @@ namespace detail::_f256 return x1 > 0.0 || (x1 == 0.0 && (x2 > 0.0 || (x2 == 0.0 && x3 > 0.0))); } + [[nodiscard]] BL_FORCE_INLINE constexpr int ilogb_finite_fast(const f256_s& x) noexcept + { + const double lead = + x.x0 != 0.0 ? x.x0 : + x.x1 != 0.0 ? x.x1 : + x.x2 != 0.0 ? x.x2 : x.x3; + constexpr std::uint64_t fraction_mask = 0x000fffffffffffffull; + const std::uint64_t lead_bits = std::bit_cast(lead); + const std::uint32_t exponent_bits = + static_cast((lead_bits >> 52) & 0x7ffu); + const std::uint64_t fraction = lead_bits & fraction_mask; + + int exponent; + bool lead_is_power; + if (exponent_bits != 0) + { + exponent = static_cast(exponent_bits) - 1023; + lead_is_power = fraction == 0; + } + else + { + exponent = detail::fp::highest_bit_index(fraction) - 1074; + lead_is_power = (fraction & (fraction - 1)) == 0; + } + + // Only an exact leading power of two can be pulled into the lower + // binade by an oppositely signed expansion tail. Keep the ordinary + // path independent of the more detailed nextafter analysis. + if (lead_is_power) [[unlikely]] + { + const double tail = + x.x0 != 0.0 + ? (x.x1 != 0.0 ? x.x1 : (x.x2 != 0.0 ? x.x2 : x.x3)) + : x.x1 != 0.0 + ? (x.x2 != 0.0 ? x.x2 : x.x3) + : x.x2 != 0.0 ? x.x3 : 0.0; + if (tail != 0.0 && + ((lead_bits ^ std::bit_cast(tail)) >> 63) != 0) + { + --exponent; + } + } + return exponent; + } + BL_FORCE_INLINE constexpr void adjust_rounded_limb_for_tail( double& rounded, double value, @@ -226,7 +250,7 @@ namespace detail::_f256 return canonicalize_rounded_zero(renorm(x0, x1, x2, x3), a); } - return x0 == 0.0 ? signed_zero_like(a) : f256_s{ x0 }; + return f256_s{ x0 }; } [[nodiscard]] BL_FORCE_INLINE constexpr f256_s trunc_limbwise(const f256_s& a) noexcept @@ -245,51 +269,24 @@ namespace detail::_f256 return a.x0 < 0.0 ? ceil_limbwise(a) : floor_limbwise(a); } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s nearbyint_limbwise(const f256_s& a) noexcept + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s round_nearest_even(const f256_s& a) noexcept { - double x0 = nearbyint_limb(a.x0); - double x1 = 0.0; - double x2 = 0.0; - double x3 = 0.0; - - if (x0 == a.x0) - { - x1 = nearbyint_limb(a.x1); - if (x1 == a.x1) - { - x2 = nearbyint_limb(a.x2); - if (x2 == a.x2) - x3 = nearbyint_limb(a.x3); - else - adjust_rounded_limb_for_tail(x2, a.x2, a.x3, 0.0, 0.0); - } - else - adjust_rounded_limb_for_tail(x1, a.x1, a.x2, a.x3, 0.0); - } - else - { - adjust_rounded_limb_for_tail(x0, a.x0, a.x1, a.x2, a.x3); - return x0 == 0.0 ? signed_zero_like(a) : f256_s{ x0 }; - } - - return canonicalize_rounded_zero(renorm(x0, x1, x2, x3), a); - } + if (detail::fp::iszero_or_inf_or_nan(a.x0)) [[unlikely]] + return a; - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s round_half_away_zero_limbwise(const f256_s& a) noexcept - { - double x0 = round_half_away_zero_limb(a.x0); + double x0 = round_nearest_even_limb(a.x0); double x1 = 0.0; double x2 = 0.0; double x3 = 0.0; if (x0 == a.x0) { - x1 = round_half_away_zero_limb(a.x1); + x1 = round_nearest_even_limb(a.x1); if (x1 == a.x1) { - x2 = round_half_away_zero_limb(a.x2); + x2 = round_nearest_even_limb(a.x2); if (x2 == a.x2) - x3 = round_half_away_zero_limb(a.x3); + x3 = round_nearest_even_limb(a.x3); else adjust_rounded_limb_for_tail(x2, a.x2, a.x3, 0.0, 0.0); } @@ -299,7 +296,7 @@ namespace detail::_f256 else { adjust_rounded_limb_for_tail(x0, a.x0, a.x1, a.x2, a.x3); - return f256_s{ x0 }; + return x0 == 0.0 ? signed_zero_like(a) : f256_s{ x0 }; } return canonicalize_rounded_zero(renorm(x0, x1, x2, x3), a); @@ -309,46 +306,28 @@ namespace detail::_f256 namespace detail::_f256_impl { - [[nodiscard]] BL_FORCE_INLINE f256_s round_runtime(const f256_s& a) noexcept + [[nodiscard]] BL_FORCE_INLINE f256_s round_nearest_away_from_zero_runtime( + const f256_s& a) noexcept { if (detail::fp::isinf_or_nan(a.x0)) [[unlikely]] return a; if (detail::fp::absd(a.x0) < detail::fp::double_integer_threshold) { - double x0 = detail::_f256::round_half_away_zero_limb_finite_small(a.x0); - detail::_f256::adjust_rounded_limb_for_tail(x0, a.x0, a.x1, a.x2, a.x3); - return x0 == 0.0 ? detail::_f256::signed_zero_like(a) : f256_s{ x0 }; - } - - return detail::_f256::round_half_away_zero_limbwise(a); - } - - [[nodiscard]] BL_FORCE_INLINE f256_s nearbyint_runtime(const f256_s& a) noexcept - { - if (detail::fp::absd(a.x0) < detail::fp::double_integer_threshold) - { - double x0 = detail::_f256::nearbyint_limb_finite_small(a.x0); - - const double delta = x0 - a.x0; - if (delta == 0.5) + if (detail::fp::trunc(a.x0) == a.x0 && + (a.x1 != 0.0 || a.x2 != 0.0 || a.x3 != 0.0)) { - if (detail::_f256::has_negative_tail(a.x1, a.x2, a.x3)) - x0 -= 1.0; - } - else if (delta == -0.5 && detail::_f256::has_positive_tail(a.x1, a.x2, a.x3)) - { - x0 += 1.0; + return detail::_f256::round_nearest_away_from_zero(a); } + double x0 = detail::_f256::round_nearest_away_from_zero_limb_finite_small(a.x0); + detail::_f256::adjust_rounded_limb_for_tail(x0, a.x0, a.x1, a.x2, a.x3); return x0 == 0.0 ? detail::_f256::signed_zero_like(a) : f256_s{ x0 }; } - if (detail::fp::iszero_or_inf_or_nan(a.x0)) - return a; - - return detail::_f256::nearbyint_limbwise(a); + return detail::_f256::round_nearest_away_from_zero(a); } + } // roots @@ -367,6 +346,9 @@ namespace detail::_f256_impl return f256_s{ std::numeric_limits::quiet_NaN(), 0.0, 0.0, 0.0 }; } + if (bl::detail::is_constant_evaluated()) + return sqrt_impl(a); + return sqrt_impl_fast(a); } @@ -409,184 +391,137 @@ namespace detail::_f256_impl if (iszero(ax)) return f256_s{ 0.0 }; if (iszero(ay)) - return F256_CANONICALIZE_MATH_RESULT(ax); + return ax; const int ex = detail::fp::frexp_exponent_limb(ax.x0); const int ey = detail::fp::frexp_exponent_limb(ay.x0); if ((ex - ey) > 110) - return F256_CANONICALIZE_MATH_RESULT(ax); - - if (ex > -450 && ex < 450) - return F256_CANONICALIZE_MATH_RESULT(detail::_f256_impl::sqrt_accurate(add_raw5_raw5_inline(sqr_raw5_inline(ax), sqr_raw5_inline(ay)))); - - const f256_s r = div_inline(ay, ax); - return F256_CANONICALIZE_MATH_RESULT(mul_inline(ax, detail::_f256_impl::sqrt_accurate(add_raw5_value_inline(sqr_raw5_inline(r), f256_s{ 1.0 })))); + return ax; + + // A 212-bit square needs its leading component at exponent -862 or + // greater to keep the last result bit above double's 2^-1074 floor. + // Smaller magnitudes use the ratio form to avoid losing low components. + if (ex >= -431 && ex < 450) + return detail::_f256_impl::sqrt_accurate(add_raw5_raw5_inline(sqr_raw5_inline(ax), sqr_raw5_inline(ay))); + + // Power-of-two scaling is exact and avoids both component underflow and + // the substantially more expensive f256 division in the ratio form. + const f256_s scaled_ax = detail::_f256::ldexp_terms(ax, -ex); + const f256_s scaled_ay = detail::_f256::ldexp_terms(ay, -ex); + const f256_s scaled_result = detail::_f256_impl::sqrt_accurate( + add_raw5_raw5_inline( + sqr_raw5_inline(scaled_ax), + sqr_raw5_inline(scaled_ay))); + return + detail::_f256::ldexp_terms(scaled_result, ex); } // rounding and decimals -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::floor(const f256_s& a) -{ - return detail::_f256::floor_limbwise(a); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::ceil(const f256_s& a) -{ - return -detail::_f256_impl::floor(-a); -} - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::trunc(const f256_s& a) { if (detail::fp::isinf_or_nan(a.x0)) [[unlikely]] return a; - return detail::fp::signbit(a.x0) ? detail::_f256_impl::ceil(a) : detail::_f256_impl::floor(a); + return detail::fp::signbit(a.x0) ? detail::_f256::ceil_limbwise(a) : detail::_f256::floor_limbwise(a); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::round(const f256_s& a) +[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::round_nearest_away_from_zero(const f256_s& a) { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::round_half_away_zero_limbwise(a), - detail::_f256_impl::round_runtime(a) + detail::_f256::round_nearest_away_from_zero(a), + detail::_f256_impl::round_nearest_away_from_zero_runtime(a) ); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::round_to_decimals(f256_s v, int prec) +[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::round_decimals(f256_s v, int prec) { - constexpr int local_capacity = std::numeric_limits::max_digits10; + // Preserve sparse-expansion decimal functionality beyond the 65-digit + // nominal default. + constexpr int local_capacity = 67; if (prec <= 0) return v; if (prec > local_capacity) prec = local_capacity; + if (detail::fp::iszero_or_inf_or_nan(v.x0)) return v; - constexpr f256_s inv10_qd{ - 0x1.999999999999ap-4, - -0x1.999999999999ap-58, - 0x1.999999999999ap-112, - -0x1.999999999999ap-166 - }; - - char digits[local_capacity]; - - const bool neg = v < 0.0; - if (neg) v = -v; - - f256_s ip = detail::_f256_impl::floor(v); - f256_s frac = sub_inline(v, ip); - - f256_s w = frac; - for (int i = 0; i < prec; ++i) + detail::exact_decimal::biguint coefficient; + bool neg = false; + if (!detail::exact_decimal::exact_decimal_places_integer( + v, + prec, + coefficient, + neg)) { - w = mul_double_inline(w, 10.0); - - int di = static_cast(detail::_f256_impl::floor(w).x0); - if (di < 0) di = 0; - else if (di > 9) di = 9; - - digits[i] = static_cast('0' + di); - w = sub_double_inline(w, static_cast(di)); + return v; } - f256_s la = mul_double_inline(w, 10.0); - - const f256_s tie_slop = mul_double_inline(f256_s::eps(), 65536.0); - int next = static_cast(detail::_f256_impl::floor(la).x0); - if (next < 0) next = 0; - - f256_s rem = sub_double_inline(la, static_cast(next)); - if (next < 10 && rem >= sub_inline(f256_s{ 1.0 }, tie_slop)) - { - ++next; - rem = sub_double_inline(rem, 1.0); - } - - const int last = digits[prec - 1] - '0'; - const bool beyond_half = rem > tie_slop; - const bool round_up = - (next > 5) || - (next == 5 && (beyond_half || (last & 1))); - - if (round_up) - { - int i = prec - 1; - for (; i >= 0; --i) - { - if (digits[i] == '9') - { - digits[i] = '0'; - } - else - { - ++digits[i]; - break; - } - } + const f256_s rounded = + detail::_f256::round_decimal_exact_to_f256(coefficient, -prec, neg); + if (iszero(rounded)) + return detail::_f256::signed_zero_from(v.x0); + return rounded; +} - if (i < 0) - ip = add_double_inline(ip, 1.0); - } +[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::round_significant(f256_s v, int figures) +{ + if (figures <= 0 || detail::fp::iszero_or_inf_or_nan(v.x0)) + return v; + constexpr int local_capacity = 67; + if (figures > local_capacity) + figures = local_capacity; - f256_s exact_out{}; - if (try_rounded_decimal_to_f256(ip, digits, prec, neg, exact_out)) - return exact_out; + const bool neg = v.x0 < 0.0; + const f256_s ax = neg ? -v : v; - f256_s frac_val{ 0.0 }; - for (int i = prec - 1; i >= 0; --i) + detail::exact_decimal::biguint coefficient; + int exp10 = 0; + if (!detail::exact_decimal::exact_significant_decimal( + ax, + figures, + coefficient, + exp10)) { - frac_val = add_double_inline(frac_val, static_cast(digits[i] - '0')); - frac_val = mul_inline(frac_val, inv10_qd); + return v; } - f256_s out = add_inline(ip, frac_val); - return neg ? -out : out; + return detail::_f256::round_decimal_exact_to_f256(coefficient, exp10 - (figures - 1), neg); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::nearbyint(const f256_s& a) +[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::pow10_256(int k) { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::nearbyint_limbwise(a), - detail::_f256_impl::nearbyint_runtime(a) - ); + if (k < detail::_f256::pow10_f256_min_exponent) [[unlikely]] + return f256_s{ 0.0 }; + if (k > detail::_f256::pow10_f256_max_exponent) [[unlikely]] + return std::numeric_limits::infinity(); + + return detail::_f256::pow_table_entry_to_f256( + detail::pow_tables::pow10_table[k - detail::_f256::pow10_f256_min_exponent]); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::rint(const f256_s& x) +[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::round_nearest_even(const f256_s& a) { - return detail::_f256_impl::nearbyint(x); + return detail::_f256::round_nearest_even(a); } -[[nodiscard]] BL_FORCE_INLINE constexpr long detail::_f256_impl::lround(const f256_s& x) +[[nodiscard]] BL_FORCE_INLINE constexpr long detail::_f256_impl::lround_nearest_away_from_zero( + const f256_s& x) { long out = 0; if (detail::_f256::try_round_to_signed_integer(x, false, out)) return out; - return detail::_f256::to_signed_integer_or_zero(detail::_f256::round_half_away_zero(x)); + return detail::_f256::to_signed_integer_or_zero( + detail::_f256::round_nearest_away_from_zero(x)); } -[[nodiscard]] BL_FORCE_INLINE constexpr long long detail::_f256_impl::llround(const f256_s& x) +[[nodiscard]] BL_FORCE_INLINE constexpr long long detail::_f256_impl::llround_nearest_away_from_zero(const f256_s& x) { long long out = 0; if (detail::_f256::try_round_to_signed_integer(x, false, out)) return out; - return detail::_f256::to_signed_integer_or_zero(detail::_f256::round_half_away_zero(x)); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr long detail::_f256_impl::lrint(const f256_s& x) -{ - long out = 0; - if (detail::_f256::try_round_to_signed_integer(x, true, out)) - return out; - - return detail::_f256::to_signed_integer_or_zero(detail::_f256_impl::nearbyint(x)); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr long long detail::_f256_impl::llrint(const f256_s& x) -{ - long long out = 0; - if (detail::_f256::try_round_to_signed_integer(x, true, out)) - return out; - - return detail::_f256::to_signed_integer_or_zero(detail::_f256_impl::nearbyint(x)); + return detail::_f256::to_signed_integer_or_zero( + detail::_f256::round_nearest_away_from_zero(x)); } // arithmetic and comparisons @@ -595,19 +530,44 @@ namespace detail::_f256_impl if (detail::fp::isinf_or_nan(x.x0) || detail::fp::isinf_or_nan(y.x0) || detail::fp::isinf_or_nan(z.x0)) [[unlikely]] return f256_s{ std::fma(x.x0, y.x0, z.x0), 0.0, 0.0, 0.0 }; - return F256_CANONICALIZE_MATH_RESULT(mul_add_inline(x, y, z)); + const double leading_product = x.x0 * y.x0; + if (leading_product != 0.0 + && detail::fp::absd(leading_product + z.x0) + <= detail::fp::absd(leading_product) * 0x1p-48) [[unlikely]] + { + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f256::mul_add_exact_inline(x, y, z), + detail::_f256_runtime::fma_cancellation(x, y, z) + ); + } + + #if FLTX_GUARDED_X86_FMA + if (!bl::detail::is_constant_evaluated()) + { + const bool use_hardware_fma = detail::fp::runtime_hardware_fma_enabled(); + return + use_hardware_fma + ? detail::_f256::mul_add_hardware_inline(x, y, z) + : detail::_f256::mul_add_dekker_inline(x, y, z); + } + + return + detail::_f256::mul_add_dekker_inline(x, y, z); + #else + return + detail::_f256::mul_add_inline(x, y, z); + #endif } [[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::fmin(const f256_s& a, const f256_s& b) { + if (detail::fp::isnan(a.x0)) [[unlikely]] + return b; + if (detail::fp::isnan(b.x0)) [[unlikely]] + return a; + if (a.x0 != b.x0) - { - if (detail::fp::isnan(a.x0)) [[unlikely]] - return b; - if (detail::fp::isnan(b.x0)) [[unlikely]] - return a; return a.x0 < b.x0 ? a : b; - } if (a.x1 != b.x1) return a.x1 < b.x1 ? a : b; @@ -624,14 +584,13 @@ namespace detail::_f256_impl [[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::fmax(const f256_s& a, const f256_s& b) { + if (detail::fp::isnan(a.x0)) [[unlikely]] + return b; + if (detail::fp::isnan(b.x0)) [[unlikely]] + return a; + if (a.x0 != b.x0) - { - if (detail::fp::isnan(a.x0)) [[unlikely]] - return b; - if (detail::fp::isnan(b.x0)) [[unlikely]] - return a; return a.x0 > b.x0 ? a : b; - } if (a.x1 != b.x1) return a.x1 > b.x1 ? a : b; @@ -659,7 +618,7 @@ namespace detail::_f256_impl if (isinf(y)) [[unlikely]] return signbit(y) ? std::numeric_limits::infinity() : f256_s{ 0.0 }; - return (x > y) ? F256_CANONICALIZE_MATH_RESULT(x - y) : f256_s{ 0.0 }; + return (x > y) ? x - y : f256_s{ 0.0 }; } [[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::copysign(const f256_s& x, const f256_s& y) @@ -687,15 +646,10 @@ namespace detail::_f256_impl if (iszero(fast)) return detail::_f256::signed_zero_like(x); const f256_s out = ispositive(x) ? fast : -fast; - return F256_CANONICALIZE_MATH_RESULT(out); + return out; } - return F256_CANONICALIZE_MATH_RESULT(fmod_reduced_or_exact(x, y)); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::remainder(const f256_s& x, const f256_s& y) -{ - return detail::_f256_impl::remquo(x, y, nullptr); + return fmod_reduced_or_exact(x, y); } [[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::remquo(const f256_s& x, const f256_s& y, int* quo) @@ -729,11 +683,11 @@ namespace detail::_f256_impl if (fast) { - const f256_s half = mul_double_inline(ay, 0.5); + const f256_s half = mul_double_product_inline(ay, 0.5); const int half_cmp = detail::_f256::fmod_compare_remainder_to_half(r_abs, half); if (half_cmp > 0 || (half_cmp == 0 && ((quotient_abs & 1u) != 0u))) { - r_abs = sub_inline(r_abs, ay); + r_abs = sub_finite_inline(r_abs, ay); ++quotient_abs; } @@ -744,22 +698,22 @@ namespace detail::_f256_impl if (iszero(r)) return detail::_f256::signed_zero_like(x); - return F256_CANONICALIZE_MATH_RESULT(r); + return r; } std::uint64_t quotient_mod = 0; - r_abs = fmod_exact_abs_with_quotient_mod(ax, ay, quotient_mod); - const f256_s half = mul_double_inline(ay, 0.5); + r_abs = fmod_exact_fixed_limb_abs_with_quotient_mod(ax, ay, quotient_mod); + const f256_s half = mul_double_product_inline(ay, 0.5); const int half_cmp = detail::_f256::fmod_compare_remainder_to_half(r_abs, half); if (half_cmp > 0) { - r_abs = sub_inline(r_abs, ay); + r_abs = sub_finite_inline(r_abs, ay); ++quotient_mod; } else if (half_cmp == 0 && ((quotient_mod & 1u) != 0u)) { - r_abs = sub_inline(r_abs, ay); + r_abs = sub_finite_inline(r_abs, ay); ++quotient_mod; } @@ -770,7 +724,7 @@ namespace detail::_f256_impl if (iszero(r)) return detail::_f256::signed_zero_like(x); - return F256_CANONICALIZE_MATH_RESULT(r); + return r; } // fractional decomposition @@ -793,7 +747,7 @@ namespace detail::_f256_impl if (iptr) *iptr = i; - f256_s frac = sub_inline(x, i); + f256_s frac = sub_finite_inline(x, i); if (iszero(frac)) frac = detail::_f256::signed_zero_like(x); return frac; @@ -805,7 +759,7 @@ namespace detail::_f256_impl if (detail::fp::iszero_or_inf_or_nan(a.x0)) [[unlikely]] return a; - return F256_CANONICALIZE_MATH_RESULT(_ldexp(a, e)); + return _ldexp(a, e); } [[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::frexp(const f256_s& x, int* exp) noexcept @@ -818,14 +772,21 @@ namespace detail::_f256_impl int e = 0; - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) + { + e = detail::fp::frexp_exponent(x.x0); + } +#if BL_FP_BARRIER_ACTIVE + else { e = detail::fp::frexp_exponent(x.x0); } +#else else { (void)std::frexp(x.x0, &e); } +#endif const bool safe_fast_scale = detail::fp::absd(x.x0) >= std::numeric_limits::min(); @@ -861,11 +822,7 @@ namespace detail::_f256_impl if (iszero(x)) return FP_ILOGB0; if (isinf(x)) return std::numeric_limits::max(); - const double lead = - (x.x0 != 0.0) ? x.x0 : - (x.x1 != 0.0) ? x.x1 : - (x.x2 != 0.0) ? x.x2 : x.x3; - return detail::fp::frexp_exponent(detail::fp::absd(lead)) - 1; + return detail::_f256::ilogb_finite_fast(x); } [[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::logb(const f256_s& x) noexcept @@ -877,16 +834,6 @@ namespace detail::_f256_impl return f256_s{ static_cast(detail::_f256_impl::ilogb(x)), 0.0, 0.0, 0.0 }; } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::scalbn(const f256_s& x, int e) noexcept -{ - return detail::_f256_impl::ldexp(x, e); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::scalbln(const f256_s& x, long e) noexcept -{ - return detail::_f256_impl::ldexp(x, static_cast(e)); -} - // adjacent values [[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::nextafter(const f256_s& from, const f256_s& to) noexcept { @@ -903,23 +850,55 @@ namespace detail::_f256_impl ? -std::numeric_limits::max() : std::numeric_limits::max(); - const double toward = (from < to) - ? std::numeric_limits::infinity() - : -std::numeric_limits::infinity(); + const bool upward = from < to; + const bool toward_smaller_magnitude = upward == signbit(from); + constexpr std::uint64_t fraction_mask = 0x000fffffffffffffull; + const std::uint64_t leading_bits = + std::bit_cast(from.x0) & 0x7fffffffffffffffull; + const std::uint32_t exponent_bits = + static_cast(leading_bits >> 52); + if (exponent_bits > std::numeric_limits::digits - 1 && + (leading_bits & fraction_mask) != 0) [[likely]] + { + const std::uint64_t step_bits = + static_cast( + exponent_bits - (std::numeric_limits::digits - 1)) << 52; + const double step = std::bit_cast(step_bits); + const double stepped_x3 = upward ? from.x3 + step : from.x3 - step; + const std::uint32_t x2_exponent_bits = + static_cast( + (std::bit_cast(from.x2) >> 52) & 0x7ffu); + if (x2_exponent_bits > 53) + { + const std::uint64_t half_x2_ulp_bits = + static_cast(x2_exponent_bits - 53) << 52; + const std::uint64_t stepped_x3_bits = + std::bit_cast(stepped_x3) & 0x7fffffffffffffffull; + if (stepped_x3_bits < half_x2_ulp_bits) [[likely]] + return f256_s{ from.x0, from.x1, from.x2, stepped_x3 }; + } + return normalize_nextafter_tail(from, stepped_x3); + } + + const double leading = + from.x0 != 0.0 ? from.x0 : + from.x1 != 0.0 ? from.x1 : + from.x2 != 0.0 ? from.x2 : from.x3; + const double trailing = + from.x0 != 0.0 + ? (from.x1 != 0.0 ? from.x1 : (from.x2 != 0.0 ? from.x2 : from.x3)) + : from.x1 != 0.0 + ? (from.x2 != 0.0 ? from.x2 : from.x3) + : from.x2 != 0.0 ? from.x3 : 0.0; + const double step = detail::fp::nominal_ulp_step( + leading, + trailing, + toward_smaller_magnitude, + std::numeric_limits::digits); return normalize_nextafter_tail( from, - detail::fp::nextafter(from.x3, toward)); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::nexttoward(const f256_s& from, long double to) noexcept -{ - return detail::_f256_impl::nextafter(from, f256_s{ static_cast(to), 0.0, 0.0, 0.0 }); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::nexttoward(const f256_s& from, const f256_s& to) noexcept -{ - return detail::_f256_impl::nextafter(from, to); + upward ? from.x3 + step : from.x3 - step); } } // namespace bl diff --git a/include/fltx/detail/f256_math_kernels.h b/include/fltx/detail/f256_math_kernels.h index e782c4f..d7b8cd7 100644 --- a/include/fltx/detail/f256_math_kernels.h +++ b/include/fltx/detail/f256_math_kernels.h @@ -11,102 +11,108 @@ #ifndef F256_DETAIL_MATH_KERNELS_INCLUDED #define F256_DETAIL_MATH_KERNELS_INCLUDED +#include "fltx/detail/common_decimal.h" #include "fltx/detail/f256_declarations.h" namespace bl { namespace detail::_f256 // primitives and kernels { - using detail::exact_decimal::add_signed; + // Algorithmic convergence tolerance, deliberately independent of public + // numeric metadata even though both currently have the value 2^-211. + inline constexpr f256_s convergence_epsilon{ 0x1p-211, 0.0, 0.0, 0.0 }; + + using detail::exact_decimal::any_low_bits_set; using detail::exact_decimal::biguint; using detail::exact_decimal::decompose_double_mantissa; - using detail::exact_decimal::mod_shift_subtract; - using detail::exact_decimal::signed_biguint; + using detail::exact_decimal::from_words; + using detail::exact_decimal::low_bits_copy; + using detail::exact_decimal::shr_bits_copy; using detail::fp::fmod; - using detail::fp::nearbyint_ties_even; + using detail::fp::round_nearest_even_value; using detail::fp::sqrt_seed; using detail::fp::trunc; using detail::fp::frexp_exponent_limb; using detail::fp::ldexp_limb; - BL_FORCE_INLINE constexpr f256_s add_inline(const f256_s& a, const f256_s& b) noexcept; + BL_FORCE_INLINE constexpr f256_s add_finite_inline(const f256_s& a, const f256_s& b) noexcept; [[nodiscard]] BL_FORCE_INLINE constexpr f256_s signed_zero_from(double sign_source) noexcept { return f256_s{ detail::fp::copysign(0.0, sign_source), 0.0, 0.0, 0.0 }; } - BL_FORCE_INLINE constexpr f256_s sub_inline(const f256_s& a, const f256_s& b) noexcept; + BL_FORCE_INLINE constexpr f256_s sub_finite_inline(const f256_s& a, const f256_s& b) noexcept; // expression evaluation BL_FORCE_INLINE constexpr f256_s add_eval(const f256_s& a, const f256_s& b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - add_inline(a, b), - detail::_f256_runtime::add(a, b) + add_finite_inline(a, b), + detail::_f256_runtime::add_canonical(a, b) ); } BL_FORCE_INLINE constexpr f256_s sub_eval(const f256_s& a, const f256_s& b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - sub_inline(a, b), - detail::_f256_runtime::sub(a, b) + sub_finite_inline(a, b), + detail::_f256_runtime::sub_canonical(a, b) ); } BL_FORCE_INLINE constexpr f256_s mul_eval(const f256_s& a, const f256_s& b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - mul_inline(a, b), - detail::_f256_runtime::mul(a, b) + mul_product_inline(a, b), + detail::_f256_runtime::mul_canonical(a, b) ); } BL_FORCE_INLINE constexpr f256_s div_eval(const f256_s& a, const f256_s& b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - div_inline(a, b), - detail::_f256_runtime::div(a, b) + div_prechecked_inline(a, b), + detail::_f256_runtime::div_canonical(a, b) ); } BL_FORCE_INLINE constexpr f256_s add_double_eval(const f256_s& a, double b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - add_double_inline(a, b), - detail::_f256_runtime::add_double(a, b) + add_double_finite_inline(a, b), + detail::_f256_runtime::add_double_canonical(a, b) ); } BL_FORCE_INLINE constexpr f256_s sub_double_eval(const f256_s& a, double b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - sub_double_inline(a, b), - detail::_f256_runtime::sub_double(a, b) + sub_double_finite_inline(a, b), + detail::_f256_runtime::sub_double_canonical(a, b) ); } BL_FORCE_INLINE constexpr f256_s sub_double_eval(double a, const f256_s& b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - sub_double_inline(a, b), - detail::_f256_runtime::sub_double(a, b) + sub_double_finite_inline(a, b), + detail::_f256_runtime::sub_double_canonical(a, b) ); } BL_FORCE_INLINE constexpr f256_s mul_double_eval(const f256_s& a, double b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - mul_double_inline(a, b), - detail::_f256_runtime::mul_double(a, b) + mul_double_product_inline(a, b), + detail::_f256_runtime::mul_double_canonical(a, b) ); } BL_FORCE_INLINE constexpr f256_s div_double_eval(const f256_s& a, double b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - div_double_inline(a, b), - detail::_f256_runtime::div_double(a, b) + div_double_prechecked_inline(a, b), + detail::_f256_runtime::div_double_canonical(a, b) ); } @@ -177,144 +183,24 @@ namespace detail::_f256 // primitives and kernels // scaling helpers BL_FORCE_INLINE constexpr f256_s ldexp_terms(const f256_s& value, int exponent) noexcept { +#if BL_FP_BARRIER_ACTIVE + double x0 = detail::fp::ldexp(value.x0, exponent); BL_FP_BARRIER(x0); + double x1 = detail::fp::ldexp(value.x1, exponent); BL_FP_BARRIER(x1); + double x2 = detail::fp::ldexp(value.x2, exponent); BL_FP_BARRIER(x2); + double x3 = detail::fp::ldexp(value.x3, exponent); BL_FP_BARRIER(x3); + if (is_subnormal_limb(x0) || is_subnormal_limb(x1) || + is_subnormal_limb(x2) || is_subnormal_limb(x3)) + { + return { x0, x1, x2, x3 }; + } + return renorm(x0, x1, x2, x3); +#else return renorm( ldexp_limb(value.x0, exponent), ldexp_limb(value.x1, exponent), ldexp_limb(value.x2, exponent), ldexp_limb(value.x3, exponent)); - } - - struct exact_dyadic_fmod - { - int exp2 = 0; - biguint mant{}; - }; - - // exact integer helpers - BL_FORCE_INLINE constexpr bool biguint_is_odd(const biguint& value) - { - return !value.is_zero() && (value.words[0] & 1u) != 0; - } - - BL_FORCE_INLINE constexpr bool biguint_any_low_bits_set(const biguint& value, int bit_count) - { - if (bit_count <= 0) - return false; - - const int full_words = bit_count >> 5; - const int rem_bits = bit_count & 31; - - for (int i = 0; i < full_words && i < value.size; ++i) - { - if (value.words[i] != 0) - return true; - } - - if (rem_bits != 0 && full_words < value.size) - { - const std::uint32_t mask = (std::uint32_t{ 1 } << rem_bits) - 1u; - if ((value.words[full_words] & mask) != 0) - return true; - } - - return false; - } - - BL_FORCE_INLINE constexpr int biguint_trailing_zero_bits(const biguint& value) - { - int count = 0; - for (int i = 0; i < value.size; ++i) - { - const std::uint32_t word = value.words[i]; - if (word == 0) - { - count += 32; - continue; - } - - std::uint32_t bits = word; - while ((bits & 1u) == 0u) - { - bits >>= 1; - ++count; - } - break; - } - return count; - } - - BL_FORCE_INLINE constexpr biguint biguint_shr_bits(biguint value, int bits) - { - if (bits <= 0 || value.is_zero()) - return value; - - const int word_shift = bits >> 5; - const int bit_shift = bits & 31; - - if (word_shift >= value.size) - { - value.clear(); - return value; - } - - if (word_shift > 0) - { - for (int i = 0; i + word_shift < value.size; ++i) - value.words[i] = value.words[i + word_shift]; - value.size -= word_shift; - } - - if (bit_shift != 0) - { - std::uint32_t carry = 0; - for (int i = value.size - 1; i >= 0; --i) - { - const std::uint32_t next_carry = static_cast(value.words[i] << (32 - bit_shift)); - value.words[i] = static_cast((value.words[i] >> bit_shift) | carry); - carry = next_carry; - } - } - - value.trim(); - return value; - } - - BL_FORCE_INLINE constexpr biguint biguint_mod(const biguint& numerator, const biguint& modulus) - { - biguint remainder{}; - mod_shift_subtract(numerator, modulus, remainder); - return remainder; - } - - BL_FORCE_INLINE constexpr biguint biguint_mul_mod(const biguint& a, const biguint& b, const biguint& modulus) - { - if (a.is_zero() || b.is_zero()) - return {}; - - return biguint_mod(mul_big(a, b), modulus); - } - - BL_FORCE_INLINE constexpr biguint biguint_pow2_mod(int exponent, const biguint& modulus) - { - if (modulus.is_zero()) - return {}; - if (exponent <= 0) - return biguint_mod(biguint{ 1u }, modulus); - - biguint result = biguint_mod(biguint{ 1u }, modulus); - biguint base = biguint_mod(biguint{ 2u }, modulus); - - while (exponent > 0) - { - if ((exponent & 1) != 0) - result = biguint_mul_mod(result, base, modulus); - - exponent >>= 1; - if (exponent != 0) - base = biguint_mul_mod(base, base, modulus); - } - - return result; +#endif } struct fmod_u320 @@ -629,9 +515,7 @@ namespace detail::_f256 // primitives and kernels } } - BL_NO_INLINE constexpr bool exact_from_f256_fmod_fixed( - const f256_s& x, - exact_dyadic_fmod_fixed& out) + BL_NO_INLINE constexpr exact_dyadic_fmod_fixed exact_from_f256_fmod_fixed(const f256_s& x) { int common_exp = std::numeric_limits::max(); const double limbs[4] = { x.x0, x.x1, x.x2, x.x3 }; @@ -651,9 +535,9 @@ namespace detail::_f256 // primitives and kernels common_exp = exponent; } - out = {}; + exact_dyadic_fmod_fixed out{}; if (common_exp == std::numeric_limits::max()) - return true; + return out; signed_fmod_u320 acc{}; for (double limb : limbs) @@ -669,19 +553,14 @@ namespace detail::_f256 // primitives and kernels const int shift = exponent - common_exp; fmod_u320 term = fmod_u320_from_u64(mantissa); - if (fmod_u320_shift_exceeds_capacity(term, shift)) - return false; term = fmod_u320_shl_bits(term, shift); fmod_u320_add_signed(acc, term, limb_neg); } - if (acc.neg) - return false; - out.exp2 = common_exp; out.mant = acc.mag; normalize_exact_dyadic_fmod_fixed(out); - return true; + return out; } BL_NO_INLINE constexpr f256_s exact_dyadic_to_f256_fmod_fixed( @@ -740,21 +619,15 @@ namespace detail::_f256 // primitives and kernels return neg ? -out : out; } - BL_NO_INLINE constexpr bool fmod_exact_fixed_limb_abs_with_quotient_mod( + BL_NO_INLINE constexpr f256_s fmod_exact_fixed_limb_abs_with_quotient_mod( const f256_s& ax, const f256_s& ay, - std::uint64_t& quotient_mod, - f256_s& out) + std::uint64_t& quotient_mod) { constexpr std::uint64_t quotient_mask = 0x7fffffffull; - exact_dyadic_fmod_fixed dx{}; - exact_dyadic_fmod_fixed dy{}; - if (!exact_from_f256_fmod_fixed(ax, dx) || - !exact_from_f256_fmod_fixed(ay, dy)) - { - return false; - } + const exact_dyadic_fmod_fixed dx = exact_from_f256_fmod_fixed(ax); + const exact_dyadic_fmod_fixed dy = exact_from_f256_fmod_fixed(ay); fmod_u320 remainder{}; int out_exp = 0; @@ -796,79 +669,13 @@ namespace detail::_f256 // primitives and kernels out_exp = dy.exp2; } - out = exact_dyadic_to_f256_fmod_fixed(remainder, out_exp, false); + f256_s out = exact_dyadic_to_f256_fmod_fixed(remainder, out_exp, false); if (iszero(out)) out = f256_s{ 0.0 }; - return true; - } - - // exact fmod conversion - BL_FORCE_INLINE constexpr void normalize_exact_dyadic_fmod(exact_dyadic_fmod& value) - { - if (value.mant.is_zero()) - { - value.exp2 = 0; - return; - } - - const int tz = biguint_trailing_zero_bits(value.mant); - if (tz != 0) - { - value.mant = biguint_shr_bits(value.mant, tz); - value.exp2 += tz; - } - } - - BL_MSVC_NOINLINE constexpr exact_dyadic_fmod exact_from_f256_fmod(const f256_s& x) - { - int common_exp = std::numeric_limits::max(); - const double limbs[4] = { x.x0, x.x1, x.x2, x.x3 }; - - for (double limb : limbs) - { - if (limb == 0.0) - continue; - - int exponent = 0; - bool limb_neg = false; - const std::uint64_t mantissa = decompose_double_mantissa(limb, exponent, limb_neg); - if (mantissa == 0) - continue; - - if (exponent < common_exp) - common_exp = exponent; - } - - exact_dyadic_fmod out{}; - if (common_exp == std::numeric_limits::max()) - return out; - - signed_biguint acc{}; - for (double limb : limbs) - { - if (limb == 0.0) - continue; - - int exponent = 0; - bool limb_neg = false; - const std::uint64_t mantissa = decompose_double_mantissa(limb, exponent, limb_neg); - if (mantissa == 0) - continue; - - biguint term{ mantissa }; - term.shl_bits(exponent - common_exp); - add_signed(acc, term, limb_neg); - } - - if (acc.neg || acc.mag.is_zero()) - return out; - - out.exp2 = common_exp; - out.mant = acc.mag; - normalize_exact_dyadic_fmod(out); return out; } + // exact dyadic conversion BL_MSVC_NOINLINE constexpr f256_s exact_dyadic_to_f256_fmod(const biguint& coeff, int exp2, bool neg) { if (coeff.is_zero()) @@ -882,16 +689,16 @@ namespace detail::_f256 // primitives and kernels { const int right_shift = ratio_exp - (kept_bits - 1); const bool round_bit = q.get_bit(right_shift - 1); - const bool sticky = biguint_any_low_bits_set(q, right_shift - 1); + const bool sticky = any_low_bits_set(q, right_shift - 1); - q = biguint_shr_bits(q, right_shift); + q = shr_bits_copy(q, right_shift); - if (round_bit && (sticky || biguint_is_odd(q))) + if (round_bit && (sticky || q.is_odd())) q.add_small(1u); if (q.bit_length() > kept_bits) { - q = biguint_shr_bits(q, 1); + q = shr_bits_copy(q, 1); ++ratio_exp; } } @@ -925,39 +732,12 @@ namespace detail::_f256 // primitives and kernels // fmod kernels BL_MSVC_NOINLINE constexpr f256_s fmod_exact(const f256_s& x, const f256_s& y) { - const exact_dyadic_fmod dx = exact_from_f256_fmod(mag(x)); - const exact_dyadic_fmod dy = exact_from_f256_fmod(mag(y)); - - if (dx.mant.is_zero() || dy.mant.is_zero()) - return signed_zero_from(x.x0); + std::uint64_t quotient_mod = 0; + const f256_s out = fmod_exact_fixed_limb_abs_with_quotient_mod(mag(x), mag(y), quotient_mod); - biguint remainder{}; - int out_exp = 0; - - if (dx.exp2 < dy.exp2) - { - const int shift = dy.exp2 - dx.exp2; - biguint denominator = dy.mant; - denominator.shl_bits(shift); - mod_shift_subtract(dx.mant, denominator, remainder); - out_exp = dx.exp2; - } - else - { - remainder = biguint_mod(dx.mant, dy.mant); - const int shift = dx.exp2 - dy.exp2; - if (!remainder.is_zero() && shift != 0) - { - const biguint scale = biguint_pow2_mod(shift, dy.mant); - remainder = biguint_mul_mod(remainder, scale, dy.mant); - } - out_exp = dy.exp2; - } - - f256_s out = exact_dyadic_to_f256_fmod(remainder, out_exp, !ispositive(x)); if (iszero(out)) return signed_zero_from(x.x0); - return out; + return ispositive(x) ? out : -out; } BL_FORCE_INLINE constexpr bool fmod_normalize_remainder(f256_s& r, const f256_s& modulus) noexcept @@ -1045,7 +825,7 @@ namespace detail::_f256 // primitives and kernels BL_FORCE_INLINE constexpr int fmod_compare_remainder_to_half(const f256_s& r_abs, const f256_s& half) noexcept { - const f256_s delta = sub_inline(r_abs, half); + const f256_s delta = sub_finite_inline(r_abs, half); if (iszero(delta)) return 0; return delta < 0.0 ? -1 : 1; @@ -1063,8 +843,8 @@ namespace detail::_f256 // primitives and kernels if (!fmod_normalize_remainder_with_quotient(r, ay, candidate)) return false; - const f256_s edge_slack = mul_double_inline(ay, 0x1p-160); - if (r <= edge_slack || sub_inline(ay, r) <= edge_slack) + const f256_s edge_slack = mul_double_product_inline(ay, 0x1p-160); + if (r <= edge_slack || sub_finite_inline(ay, r) <= edge_slack) return false; out = r; @@ -1090,8 +870,8 @@ namespace detail::_f256 // primitives and kernels if (!fmod_normalize_remainder_with_quotient(r, ay, quotient)) return false; - const f256_s edge_slack = mul_double_inline(ay, 0x1p-160); - if (r <= edge_slack || sub_inline(ay, r) <= edge_slack) + const f256_s edge_slack = mul_double_product_inline(ay, 0x1p-160); + if (r <= edge_slack || sub_finite_inline(ay, r) <= edge_slack) return false; out = r; @@ -1119,7 +899,7 @@ namespace detail::_f256 // primitives and kernels if (!refine_quotient) return false; - const f256_s q_floor = detail::_f256_impl::floor(ax / ay); + const f256_s q_floor = detail::_f256_impl::trunc(ax / ay); if (q_floor.x1 != 0.0 || q_floor.x2 != 0.0 || q_floor.x3 != 0.0) return false; if (!(q_floor.x0 > 0.0) || q_floor.x0 >= quotient_limit || q_floor.x0 == q) @@ -1141,115 +921,24 @@ namespace detail::_f256 // primitives and kernels if (!fmod_normalize_remainder(r, ay)) return false; - const f256_s edge_slack = mul_double_inline(ay, 0x1p-160); - if (r <= edge_slack || sub_inline(ay, r) <= edge_slack) + const f256_s edge_slack = mul_double_product_inline(ay, 0x1p-160); + if (r <= edge_slack || sub_finite_inline(ay, r) <= edge_slack) return false; out = r; return true; } - BL_FORCE_INLINE constexpr void biguint_mod_shift_subtract_with_quotient_mod( - const biguint& numerator, - const biguint& denominator, - biguint& remainder, - std::uint64_t& quotient_mod) noexcept - { - constexpr std::uint64_t quotient_mask = 0x7fffffffull; - - remainder = numerator; - if (denominator.is_zero()) - return; - - while (remainder.compare(denominator) >= 0) - { - int shift = (remainder.bit_length() - 1) - (denominator.bit_length() - 1); - if (shift > 0 && detail::exact_decimal::compare_shifted(remainder, denominator, shift) < 0) - --shift; - - detail::exact_decimal::sub_shifted_inplace(remainder, denominator, shift); - if (shift < 31) - quotient_mod = (quotient_mod + (std::uint64_t{ 1 } << shift)) & quotient_mask; - } - } - - BL_FORCE_INLINE constexpr biguint biguint_double_mod_with_quotient_bit( - const biguint& value, - const biguint& modulus, - std::uint64_t& bit) noexcept - { - biguint out = value; - out.shl1(); - - bit = 0; - if (out.compare(modulus) >= 0) - { - out.sub_inplace(modulus); - bit = 1; - } - - return out; - } - - BL_FORCE_INLINE constexpr f256_s fmod_exact_abs_with_quotient_mod( - const f256_s& ax, - const f256_s& ay, - std::uint64_t& quotient_mod) - { - constexpr std::uint64_t quotient_mask = 0x7fffffffull; - - f256_s fixed{}; - if (fmod_exact_fixed_limb_abs_with_quotient_mod(ax, ay, quotient_mod, fixed)) - return fixed; - - const exact_dyadic_fmod dx = exact_from_f256_fmod(ax); - const exact_dyadic_fmod dy = exact_from_f256_fmod(ay); - - biguint remainder{}; - int out_exp = 0; - - if (dx.exp2 < dy.exp2) - { - const int shift = dy.exp2 - dx.exp2; - biguint denominator = dy.mant; - denominator.shl_bits(shift); - biguint_mod_shift_subtract_with_quotient_mod(dx.mant, denominator, remainder, quotient_mod); - out_exp = dx.exp2; - } - else - { - biguint_mod_shift_subtract_with_quotient_mod(dx.mant, dy.mant, remainder, quotient_mod); - const int shift = dx.exp2 - dy.exp2; - - int i = 0; - for (; i < shift && !remainder.is_zero(); ++i) - { - std::uint64_t bit = 0; - remainder = biguint_double_mod_with_quotient_bit(remainder, dy.mant, bit); - quotient_mod = ((quotient_mod << 1) | bit) & quotient_mask; - } - - const int remaining = shift - i; - if (remaining >= 31) - quotient_mod = 0; - else if (remaining > 0) - quotient_mod = (quotient_mod << remaining) & quotient_mask; - - out_exp = dy.exp2; - } - - f256_s out = exact_dyadic_to_f256_fmod(remainder, out_exp, false); - if (iszero(out)) - return f256_s{ 0.0 }; - return out; - } - BL_MSVC_NOINLINE constexpr f256_s fmod_reduced_or_exact(const f256_s& x, const f256_s& y) { const f256_s ay = mag(y); f256_s r = mag(x); - constexpr int exact_reduction_exponent_gap = 96; + // A scaled reduction with shift > 0 rounds an intermediate remainder + // whose ulp is 2^shift coarser than the final modulo-by-y remainder. + // Keep the fast reduced path only where the first subtraction is also + // the final-scale subtraction; wider quotients need the exact reducer. + constexpr int exact_reduction_exponent_gap = 52; if (frexp_exponent_limb(r.x0) - frexp_exponent_limb(ay.x0) > exact_reduction_exponent_gap) return fmod_exact(x, y); @@ -1296,87 +985,97 @@ namespace detail::_f256 // primitives and kernels if (xi != x) return false; + constexpr std::int64_t int64_min = std::numeric_limits::lowest(); + if (xi == detail::_f256_impl::to_f256(int64_min)) + { + out = int64_min; + return true; + } + if (absd(xi.x0) >= 0x1p63) return false; const int64_t p0 = static_cast(xi.x0); - const f256_s r0 = sub_inline(xi, detail::_f256_impl::to_f256(p0)); + const f256_s r0 = sub_finite_inline(xi, detail::_f256_impl::to_f256(p0)); const int64_t p1 = static_cast(r0.x0); - const f256_s r1 = sub_inline(r0, detail::_f256_impl::to_f256(p1)); + const f256_s r1 = sub_finite_inline(r0, detail::_f256_impl::to_f256(p1)); const int64_t p2 = static_cast(r1.x0); - const f256_s r2 = sub_inline(r1, detail::_f256_impl::to_f256(p2)); + const f256_s r2 = sub_finite_inline(r1, detail::_f256_impl::to_f256(p2)); const int64_t p3 = static_cast(r2.x0 + r2.x1 + r2.x2 + r2.x3); out = p0 + p1 + p2 + p3; return true; } - BL_FORCE_INLINE constexpr f256_s pack_decimal_significand(const biguint& q, int e2, bool neg) noexcept - { - const std::uint64_t c3 = q.get_bits(0, 53); - const std::uint64_t c2 = q.get_bits(53, 53); - const std::uint64_t c1 = q.get_bits(106, 53); - const std::uint64_t c0 = q.get_bits(159, 53); - - const double x0 = c0 ? detail::fp::ldexp(static_cast(c0), e2 - 52) : 0.0; - const double x1 = c1 ? detail::fp::ldexp(static_cast(c1), e2 - 105) : 0.0; - const double x2 = c2 ? detail::fp::ldexp(static_cast(c2), e2 - 158) : 0.0; - const double x3 = c3 ? detail::fp::ldexp(static_cast(c3), e2 - 211) : 0.0; - - f256_s out = renorm(x0, x1, x2, x3); - return neg ? -out : out; - } - - BL_MSVC_NOINLINE constexpr f256_s round_decimal_exact_to_f256(const biguint& coeff, int dec_exp, bool neg) noexcept + struct f256_significant_decimal_traits { - if (coeff.is_zero()) - return neg ? f256_s{ -0.0, 0.0, 0.0, 0.0 } : f256_s{ 0.0, 0.0, 0.0, 0.0 }; - - biguint numerator = coeff; - biguint denominator{ 1 }; - int bin_exp = 0; + using value_type = f256_s; + static constexpr int limb_count = 4; + static constexpr int significand_bits = 212; + static constexpr int conversion_significand_bits = 53 * (limb_count + 1); + static constexpr int max_binary_exponent = 1023; + static constexpr int min_binary_exponent = -1074; - if (dec_exp >= 0) + static constexpr double limb(const value_type& x, int index) noexcept { - numerator = detail::exact_decimal::mul_big(coeff, detail::exact_decimal::pow5_big(dec_exp)); - bin_exp = dec_exp; + switch (index) + { + case 0: return x.x0; + case 1: return x.x1; + case 2: return x.x2; + default: return x.x3; + } } - else + + static constexpr value_type zero(bool neg = false) noexcept { - denominator = detail::exact_decimal::pow5_big(-dec_exp); - bin_exp = dec_exp; + return neg ? value_type{ -0.0, 0.0, 0.0, 0.0 } : value_type{ 0.0, 0.0, 0.0, 0.0 }; } - int ratio_exp = detail::exact_decimal::floor_log2_ratio(numerator, denominator); - biguint q = detail::exact_decimal::extract_rounded_significand_chunks(numerator, denominator, ratio_exp, std::numeric_limits::digits); - if (q.bit_length() > std::numeric_limits::digits) + static constexpr value_type infinity(bool neg = false) noexcept { - q.shr1(); - ++ratio_exp; + const value_type inf = std::numeric_limits::infinity(); + return neg ? -inf : inf; } - const int e2 = bin_exp + ratio_exp; - if (e2 > 1023) - return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); - if (e2 < -1074) - return neg ? f256_s{ -0.0, 0.0, 0.0, 0.0 } : f256_s{ 0.0, 0.0, 0.0, 0.0 }; + static constexpr value_type pack_from_significand(const biguint& q, int e2, bool neg) noexcept + { + if (q.bit_length() > significand_bits) + { + const std::uint64_t c4 = q.get_bits(0, 53); + const std::uint64_t c3 = q.get_bits(53, 53); + const std::uint64_t c2 = q.get_bits(106, 53); + const std::uint64_t c1 = q.get_bits(159, 53); + const std::uint64_t c0 = q.get_bits(212, 53); + + const double x0 = c0 ? detail::fp::ldexp(static_cast(c0), e2 - 52) : 0.0; + const double x1 = c1 ? detail::fp::ldexp(static_cast(c1), e2 - 105) : 0.0; + const double x2 = c2 ? detail::fp::ldexp(static_cast(c2), e2 - 158) : 0.0; + const double x3 = c3 ? detail::fp::ldexp(static_cast(c3), e2 - 211) : 0.0; + const double x4 = c4 ? detail::fp::ldexp(static_cast(c4), e2 - 264) : 0.0; + + f256_s out = renorm5(x0, x1, x2, x3, x4); + return neg ? -out : out; + } - return pack_decimal_significand(q, e2, neg); - } + const std::uint64_t c3 = q.get_bits(0, 53); + const std::uint64_t c2 = q.get_bits(53, 53); + const std::uint64_t c1 = q.get_bits(106, 53); + const std::uint64_t c0 = q.get_bits(159, 53); - BL_FORCE_INLINE constexpr bool try_rounded_decimal_to_f256(const f256_s& integer_part, const char* digits, int digit_count, bool neg, f256_s& out) noexcept - { - int64_t integer_value = 0; - if (!try_get_int64(integer_part, integer_value) || integer_value < 0) - return false; + const double x0 = c0 ? detail::fp::ldexp(static_cast(c0), e2 - 52) : 0.0; + const double x1 = c1 ? detail::fp::ldexp(static_cast(c1), e2 - 105) : 0.0; + const double x2 = c2 ? detail::fp::ldexp(static_cast(c2), e2 - 158) : 0.0; + const double x3 = c3 ? detail::fp::ldexp(static_cast(c3), e2 - 211) : 0.0; - const biguint coeff = detail::fp::append_decimal_digits( - biguint{ static_cast(integer_value) }, - digits, - digit_count); + f256_s out = renorm(x0, x1, x2, x3); + return neg ? -out : out; + } + }; - out = round_decimal_exact_to_f256(coeff, -digit_count, neg); - return true; + BL_MSVC_NOINLINE constexpr f256_s round_decimal_exact_to_f256(const biguint& coeff, int dec_exp, bool neg) noexcept + { + return detail::exact_decimal::exact_decimal_to_value(coeff, dec_exp, neg); } // quotient helpers @@ -1400,22 +1099,10 @@ namespace detail::_f256 // primitives and kernels if (mod2 < 0.0) mod2 += 2.0; - return detail::fp::double_integer_is_odd(nearbyint_ties_even(mod2)); + return detail::fp::double_integer_is_odd(round_nearest_even_value(mod2)); } // sqrt kernels - BL_FORCE_INLINE constexpr f256_s canonicalize_sqrt_result(f256_s value) noexcept - { - value.x3 = detail::fp::zero_low_fraction_bits_finite<16>(value.x3); - return value; - } - - #if defined(FLTX_CONSTEXPR_PARITY) - #define F256_CANONICALIZE_SQRT_RESULT(value) bl::detail::_f256::canonicalize_sqrt_result(value) - #else - #define F256_CANONICALIZE_SQRT_RESULT(value) (value) - #endif - BL_FORCE_INLINE constexpr double sqrt_compress_sum16(const double* e) noexcept { using namespace detail::_f256; @@ -1536,7 +1223,7 @@ namespace detail::_f256 // primitives and kernels double p01{}, q01{}; double p11{}, q11{}; - #if BL_F256_ENABLE_SIMD + #if FLTX_F256_ENABLE_SIMD if (f256_runtime_simd_enabled()) { simd::f64x2 p00p01{}, q00q01{}; @@ -1586,7 +1273,7 @@ namespace detail::_f256 // primitives and kernels double p11{}, q11{}; double p12{}, q12{}; - #if BL_F256_ENABLE_SIMD + #if FLTX_F256_ENABLE_SIMD if (f256_runtime_simd_enabled()) { simd::f64x2 p00p12{}, q00q12{}; @@ -1635,19 +1322,19 @@ namespace detail::_f256 // primitives and kernels BL_FORCE_INLINE constexpr f256_s sqrt_step_tail_head_limb(const f256_s& scaled_a, double y0, double half_inv_y0) { using namespace detail::_f256; - return add_double_inline(f256_s{ y0, 0.0, 0.0, 0.0 }, sqrt_tail_residual_head_limb(scaled_a, y0) * half_inv_y0); + return add_double_finite_inline(f256_s{ y0, 0.0, 0.0, 0.0 }, sqrt_tail_residual_head_limb(scaled_a, y0) * half_inv_y0); } BL_FORCE_INLINE constexpr f256_s sqrt_step_tail_head_dd(const f256_s& scaled_a, const f256_s& y, double half_inv_y0) { using namespace detail::_f256; - return add_double_inline(y, sqrt_tail_residual_head_dd(scaled_a, y) * half_inv_y0); + return add_double_finite_inline(y, sqrt_tail_residual_head_dd(scaled_a, y) * half_inv_y0); } BL_FORCE_INLINE constexpr f256_s sqrt_step_tail_head(const f256_s& scaled_a, const f256_s& y, double half_inv_y0) { using namespace detail::_f256; - return add_double_inline(y, sqrt_tail_residual_head(scaled_a, y) * half_inv_y0); + return add_double_finite_inline(y, sqrt_tail_residual_head(scaled_a, y) * half_inv_y0); } BL_PUSH_PRECISE @@ -1716,7 +1403,7 @@ namespace detail::_f256 // primitives and kernels BL_FORCE_INLINE constexpr f256_s sqrt_step_full_recip(const f256_s& scaled_a, const f256_s& y) { using namespace detail::_f256; - return add_double_inline(y, sqrt_raw_residual_head(scaled_a, y) * (0.5 / y.x0)); + return add_double_finite_inline(y, sqrt_raw_residual_head(scaled_a, y) * (0.5 / y.x0)); } BL_FORCE_INLINE constexpr double sqrt_limb_seed(double x) noexcept @@ -1730,7 +1417,7 @@ namespace detail::_f256 // primitives and kernels BL_FORCE_INLINE constexpr int scale_sqrt_input(f256_s& scaled_a) noexcept { int result_scale = 0; - if (scaled_a.x0 < 0x1p-900 || scaled_a.x0 > 0x1p900) + if (scaled_a.x0 < 0x1p-500 || scaled_a.x0 > 0x1p500) { const int exp2 = frexp_exponent_limb(scaled_a.x0); result_scale = exp2 / 2; @@ -1747,7 +1434,7 @@ namespace detail::_f256 // primitives and kernels if (result_scale != 0) y = ldexp_terms(y, result_scale); - return F256_CANONICALIZE_SQRT_RESULT(y); + return y; } BL_MSVC_NOINLINE constexpr f256_s sqrt_impl_fast(const f256_s& a) @@ -1786,22 +1473,22 @@ namespace detail::_f256 // primitives and kernels } // rounding helpers - BL_FORCE_INLINE constexpr f256_s round_half_away_zero(const f256_s& x) noexcept + BL_FORCE_INLINE constexpr f256_s round_nearest_away_from_zero(const f256_s& x) noexcept { if (detail::fp::iszero_or_inf_or_nan(x.x0)) return x; if (bl::signbit(x)) { - f256_s y = -detail::_f256_impl::floor( - add_inline(-x, f256_s{ 0.5 })); + f256_s y = -detail::_f256_impl::trunc( + add_double_finite_inline(-x, 0.5)); if (iszero(y)) return f256_s{ -0.0, 0.0, 0.0, 0.0 }; return y; } - return detail::_f256_impl::floor( - add_inline(x, f256_s{ 0.5 })); + return detail::_f256_impl::trunc( + add_double_finite_inline(x, 0.5)); } BL_FORCE_INLINE constexpr f256_s normalize_nextafter_tail(const f256_s& from, double stepped_x3) noexcept @@ -1856,15 +1543,25 @@ namespace detail::_f256 // primitives and kernels if (x < detail::_f256_impl::to_f256(lo_i) || x > detail::_f256_impl::to_f256(hi_i)) return false; - const std::int64_t base = static_cast(x.x0); - const f256_s frac = sub_double_inline(x, static_cast(base)); + std::int64_t base = static_cast(x.x0); + if (static_cast(base) == x.x0) + { + const bool tail_positive = x.x1 > 0.0 || (x.x1 == 0.0 && (x.x2 > 0.0 || (x.x2 == 0.0 && x.x3 > 0.0))); + const bool tail_negative = x.x1 < 0.0 || (x.x1 == 0.0 && (x.x2 < 0.0 || (x.x2 == 0.0 && x.x3 < 0.0))); + if (x.x0 < 0.0 && tail_positive) + ++base; + else if (x.x0 > 0.0 && tail_negative) + --base; + } + + const f256_s frac = sub_double_finite_inline(x, static_cast(base)); const f256_s abs_frac = mag(frac); std::int64_t rounded = base; if (abs_frac > f256_s{ 0.5 } || (!ties_to_even && abs_frac == f256_s{ 0.5 }) || (ties_to_even && abs_frac == f256_s{ 0.5 } && (base & 1ll) != 0)) { - rounded += (x.x0 < 0.0 || (x.x0 == 0.0 && signbit(x.x0))) ? -1 : 1; + rounded += bl::signbit(frac) ? -1 : 1; } if (rounded < lo_i || rounded > hi_i) @@ -1877,11 +1574,14 @@ namespace detail::_f256 // primitives and kernels // scaling kernels BL_FORCE_INLINE constexpr f256_s _ldexp(const f256_s& a, int e) { +#if BL_FP_BARRIER_ACTIVE + return ldexp_terms(a, e); +#else if (e > 1023 || e < -1074) [[unlikely]] return ldexp_terms(a, e); double s; - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { s = bl::detail::fp::ldexp(1.0, e); } @@ -1890,13 +1590,13 @@ namespace detail::_f256 // primitives and kernels s = std::ldexp(1.0, e); } - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { return renorm(a.x0 * s, a.x1 * s, a.x2 * s, a.x3 * s); } else { - #if BL_F256_ENABLE_SIMD + #if FLTX_F256_ENABLE_SIMD if (f256_runtime_simd_enabled()) { const simd::f64x2 scale = simd::f64x2_splat(s); @@ -1913,6 +1613,7 @@ namespace detail::_f256 // primitives and kernels return renorm(a.x0 * s, a.x1 * s, a.x2 * s, a.x3 * s); } } +#endif } } // namespace detail::_f256 diff --git a/include/fltx/detail/f256_math_transcendental.h b/include/fltx/detail/f256_math_transcendental.h index 33e9786..7f769bf 100644 --- a/include/fltx/detail/f256_math_transcendental.h +++ b/include/fltx/detail/f256_math_transcendental.h @@ -16,20 +16,16 @@ namespace bl { -[[nodiscard]] BL_FORCE_INLINE constexpr double detail::_f256_impl::log_as_double(f256_s a) noexcept; +[[nodiscard]] BL_MSVC_NOINLINE constexpr double detail::_f256_impl::log_as_double(f256_s a) noexcept; namespace detail::_f256 // primitives and kernels { - BL_FORCE_INLINE constexpr f256_s mul_add_horner_step_inline(const f256_s& a, const f256_s& b, const f256_s& c) noexcept - { - return mul_add_inline(a, b, c); - } - + // polynomial evaluation helpers BL_FORCE_INLINE constexpr f256_s mul_add_horner_step(const f256_s& a, const f256_s& b, const f256_s& c) noexcept { - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { - return mul_add_horner_step_inline(a, b, c); + return mul_add_inline(a, b, c); } return detail::_f256_runtime::mul_add_horner_step(a, b, c); @@ -48,7 +44,7 @@ namespace detail::_f256 // primitives and kernels BL_FORCE_INLINE constexpr f256_s horner_forward(const f256_s* coeffs, std::size_t count, const f256_s& x) noexcept { - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { return horner_forward_inline(coeffs, count, x); } @@ -69,7 +65,7 @@ namespace detail::_f256 // primitives and kernels BL_FORCE_INLINE constexpr f256_s horner_reverse(const f256_s* coeffs, std::size_t count, const f256_s& x) noexcept { - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { return horner_reverse_inline(coeffs, count, x); } @@ -112,7 +108,7 @@ namespace detail::_f256 // primitives and kernels f256_s& left_out, f256_s& right_out) noexcept { - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { horner_pair_forward_inline(left_coeffs, right_coeffs, count, x, left_out, right_out); return; @@ -126,13 +122,15 @@ namespace detail::_f256 // primitives and kernels { constexpr std::size_t coeff_count = sizeof(exp_inv_fact) / sizeof(exp_inv_fact[0]); f256_s p = horner_reverse(exp_inv_fact, coeff_count, r); - p = mul_add_horner_step(p, r, f256_s{ 0.5 }); + p = bl::detail::is_constant_evaluated() + ? mul_add_double_rhs_inline(p, r, 0.5) + : mul_add_horner_step(p, r, f256_s{ 0.5 }); return mul_add_horner_step(sqr_inline(r), p, r); } BL_MSVC_NOINLINE constexpr f256_s log1p_series_reduced(const f256_s& x) { - if (!bl::use_constexpr_math()) + if (!bl::detail::is_constant_evaluated()) { return detail::_f256_runtime::log1p_series_reduced(x); } @@ -145,17 +143,17 @@ namespace detail::_f256 // primitives and kernels for (int k = 3; k <= 257; k += 2) { - term = mul_inline(term, z2); - const f256_s add = div_double_inline(term, static_cast(k)); - sum = add_inline(sum, add); + term = mul_product_inline(term, z2); + const f256_s add = div_double_prechecked_inline(term, static_cast(k)); + sum = add_finite_inline(sum, add); const f256_s asum = mag(sum); const f256_s scale = (asum > f256_s{ 1.0 }) ? asum : f256_s{ 1.0 }; - if (mag(add) <= mul_inline(f256_s::eps(), scale)) + if (mag(add) <= mul_product_inline(convergence_epsilon, scale)) break; } - return add_inline(sum, sum); + return add_finite_inline(sum, sum); } // exponential functions @@ -166,7 +164,7 @@ namespace detail::_f256 // primitives and kernels for (std::size_t i = coeff_count - 1; i > 0; --i) p = mul_add_inline(p, r, exp_inv_fact[i - 1]); - p = mul_add_inline(p, r, f256_s{ 0.5 }); + p = mul_add_double_rhs_inline(p, r, 0.5); return mul_add_inline(sqr_inline(r), p, r); } @@ -179,50 +177,150 @@ namespace detail::_f256 // primitives and kernels std::uint32_t exponent = static_cast(negative ? -n : n); f256_s factor{ 1.0 }; const f256_s* table = negative ? exp_integer_inv_table : exp_integer_table; +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + const bool checked_product = detail::fp::exp_scale_needs_checked_product(n); +#endif for (std::size_t i = 0; exponent != 0 && i < (sizeof(exp_integer_table) / sizeof(exp_integer_table[0])); ++i) { if ((exponent & 1u) != 0) - factor = mul_inline(factor, table[i]); + { +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + factor = checked_product ? mul_product_range_safe_inline(factor, table[i]) : mul_product_inline(factor, table[i]); +#else + factor = mul_product_inline(factor, table[i]); +#endif + } exponent >>= 1u; } return factor; } - BL_FORCE_INLINE constexpr f256_s div_refined_once(const f256_s& a, const f256_s& b) noexcept + BL_MSVC_NOINLINE constexpr f256_s div_refined_once(const f256_s& a, const f256_s& b) noexcept + { + const f256_s q = div_prechecked_inline(a, b); + return add_finite_inline(q, div_prechecked_inline(sub_finite_inline(a, mul_canonical_inline(b, q)), b)); + } + + BL_MSVC_NOINLINE constexpr f256_s div_refined_once(double a, const f256_s& b) noexcept + { + const f256_s q = div_double_prechecked_inline(a, b); + return add_finite_inline(q, div_prechecked_inline(sub_double_finite_inline(a, mul_canonical_inline(b, q)), b)); + } + + BL_FORCE_INLINE constexpr bool exp_overflows(const f256_s& x) noexcept + { + if (x.x0 != exp_overflow_cutoff.x0) + return x.x0 > exp_overflow_cutoff.x0; + return x > exp_overflow_cutoff; + } + + BL_FORCE_INLINE constexpr bool exp_underflows_to_zero(const f256_s& x) noexcept + { + if (x.x0 != exp_zero_cutoff.x0) + return x.x0 < exp_zero_cutoff.x0; + return x < exp_zero_cutoff; + } + + BL_FORCE_INLINE constexpr int exp_reduction_integer(const f256_s& x) noexcept { - const f256_s q = div_inline(a, b); - return add_inline(q, div_inline(sub_inline(a, mul_inline(b, q)), b)); + int n = static_cast(round_nearest_even_value(x.x0)); + return n > 709 ? 709 : n; + } + + BL_MSVC_NOINLINE constexpr f256_s double_expm1_argument_five_times(f256_s value) noexcept + { + value = mul_add_inline(value, value, mul_double_product_inline(value, 2.0)); + value = mul_add_inline(value, value, mul_double_product_inline(value, 2.0)); + value = mul_add_inline(value, value, mul_double_product_inline(value, 2.0)); + value = mul_add_inline(value, value, mul_double_product_inline(value, 2.0)); + value = mul_add_inline(value, value, mul_double_product_inline(value, 2.0)); + return value; + } + + BL_MSVC_NOINLINE constexpr f256_s double_expm1_argument_twice(f256_s value) noexcept + { + value = mul_add_inline(value, value, mul_double_product_inline(value, 2.0)); + value = mul_add_inline(value, value, mul_double_product_inline(value, 2.0)); + return value; + } + + BL_MSVC_NOINLINE constexpr f256_s exp_general_scaled_with_n(const f256_s& x, bool sub_one, int n) noexcept + { + f256_s reduced = sub_double_finite_inline(x, static_cast(n)); + + const f256_s r = mul_double_product_inline(reduced, 0.03125); + f256_s e = double_expm1_argument_five_times(expm1_tiny_fast(r)); + + if (n == 0) + return sub_one ? e : add_scalar_precise(e, 1.0); + + const f256_s factor = exp_integer_factor(n); +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + const f256_s scaled = detail::fp::exp_scale_needs_checked_product(n) + ? add_finite_inline(factor, mul_product_range_safe_inline(factor, e)) + : mul_add_inline(factor, e, factor); +#else + const f256_s scaled = mul_add_inline(factor, e, factor); +#endif + return sub_one ? add_scalar_precise(scaled, -1.0) : scaled; } BL_MSVC_NOINLINE constexpr f256_s exp_general_scaled(const f256_s& x, bool sub_one) noexcept { - int n = static_cast(nearbyint_ties_even(x.x0)); - f256_s reduced = sub_double_inline(x, static_cast(n)); + return exp_general_scaled_with_n(x, sub_one, exp_reduction_integer(x)); + } - const f256_s r = mul_double_inline(reduced, 0.03125); - f256_s e = expm1_tiny_fast(r); - for (int i = 0; i < 5; ++i) - e = mul_add_inline(e, e, mul_double_inline(e, 2.0)); + BL_MSVC_NOINLINE constexpr f256_s exp_general_scaled_precise_with_n(const f256_s& x, bool sub_one, int n) noexcept + { + f256_s reduced = sub_double_finite_inline(x, static_cast(n)); + + const f256_s r = mul_double_product_inline(reduced, 0.0078125); + f256_s e = double_expm1_argument_five_times(expm1_tiny_fast(r)); + e = double_expm1_argument_twice(e); if (n == 0) return sub_one ? e : add_scalar_precise(e, 1.0); const f256_s factor = exp_integer_factor(n); - const f256_s scaled = add_inline(factor, mul_inline(factor, e)); +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + const f256_s scaled = detail::fp::exp_scale_needs_checked_product(n) + ? add_finite_inline(factor, mul_product_range_safe_inline(factor, e)) + : mul_add_inline(factor, e, factor); +#else + const f256_s scaled = mul_add_inline(factor, e, factor); +#endif return sub_one ? add_scalar_precise(scaled, -1.0) : scaled; } + BL_MSVC_NOINLINE constexpr f256_s exp_general_scaled_precise(const f256_s& x, bool sub_one) noexcept + { + return exp_general_scaled_precise_with_n(x, sub_one, exp_reduction_integer(x)); + } + BL_MSVC_NOINLINE constexpr f256_s log1p_newton_small(const f256_s& frac) noexcept { - f256_s x = bl::use_constexpr_math() + const bool constexpr_path = bl::detail::is_constant_evaluated(); + f256_s x = constexpr_path ? f256_s{ detail::fp::log1p(frac.x0) } : f256_s{ std::log1p(frac.x0) }; - for (int i = 0; i < 2; ++i) + if (constexpr_path) { const f256_s em1 = exp_general_scaled(x, true); - x = add_inline(x, div_inline(sub_inline(frac, em1), add_scalar_precise(em1, 1.0))); + x = add_finite_inline(x, div_prechecked_inline(sub_finite_inline(frac, em1), add_scalar_precise(em1, 1.0))); + const f256_s em2 = exp_general_scaled(x, true); + x = add_finite_inline(x, div_prechecked_inline(sub_finite_inline(frac, em2), add_scalar_precise(em2, 1.0))); + const f256_s em3 = exp_general_scaled(x, true); + x = add_finite_inline(x, div_prechecked_inline(sub_finite_inline(frac, em3), add_scalar_precise(em3, 1.0))); + } + else + { + for (int i = 0; i < 2; ++i) + { + const f256_s em1 = exp_general_scaled(x, true); + x = add_finite_inline(x, div_prechecked_inline(sub_finite_inline(frac, em1), add_scalar_precise(em1, 1.0))); + } } return x; @@ -230,8 +328,8 @@ namespace detail::_f256 // primitives and kernels BL_MSVC_NOINLINE constexpr f256_s exp_from_reduced_64(const f256_s& x, bool base2) noexcept { - const f256_s t = base2 ? x : mul_inline(x, std::numbers::log2e_v); - const int m = static_cast(nearbyint_ties_even(t.x0 * 64.0)); + const f256_s t = base2 ? x : mul_product_inline(x, std::numbers::log2e_v); + const int m = static_cast(round_nearest_even_value(t.x0 * 64.0)); int n = m / 64; int j = m - n * 64; if (j < 0) @@ -241,15 +339,15 @@ namespace detail::_f256 // primitives and kernels } const f256_s reduced = base2 - ? sub_double_inline(x, static_cast(n) + static_cast(j) / 64.0) - : sub_inline(x, mul_double_inline(std::numbers::ln2_v, static_cast(n) + static_cast(j) / 64.0)); + ? sub_double_finite_inline(x, static_cast(n) + static_cast(j) / 64.0) + : sub_finite_inline(x, mul_double_product_inline(std::numbers::ln2_v, static_cast(n) + static_cast(j) / 64.0)); - const f256_s r = mul_double_inline(base2 ? mul_inline(reduced, std::numbers::ln2_v) : reduced, 0.25); + const f256_s r = mul_double_product_inline(base2 ? mul_product_inline(reduced, std::numbers::ln2_v) : reduced, 0.25); f256_s e = expm1_tiny_fast(r); - e = mul_add_inline(e, e, mul_double_inline(e, 2.0)); - e = mul_add_inline(e, e, mul_double_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_double_product_inline(e, 2.0)); + e = mul_add_inline(e, e, mul_double_product_inline(e, 2.0)); - return _ldexp(mul_inline(exp2_table_64[j], add_scalar_precise(e, 1.0)), n); + return _ldexp(mul_product_inline(exp2_table_64[j], add_scalar_precise(e, 1.0)), n); } // logarithm functions @@ -264,7 +362,7 @@ namespace detail::_f256 // primitives and kernels if (isinf(a)) return a; - const f256_s frac = sub_double_inline(a, 1.0); + const f256_s frac = sub_double_finite_inline(a, 1.0); if (mag(frac) < f256_s{ 0.5 }) return log1p_newton_small(frac); @@ -292,7 +390,7 @@ namespace detail::_f256 // primitives and kernels } double log2_m{}; - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { log2_m = detail::fp::log(m.x0) * 1.4426950408889634074; } @@ -301,32 +399,39 @@ namespace detail::_f256 // primitives and kernels log2_m = std::log2(m.x0); } - int j = static_cast(nearbyint_ties_even(log2_m * 64.0)); + int j = static_cast(round_nearest_even_value(log2_m * 64.0)); if (j < 0) j = 0; else if (j > 64) j = 64; const f256_s c = (j == 64) ? f256_s{ 2.0 } : exp2_table_64[j]; - const f256_s u = div_inline(sub_inline(m, c), add_inline(m, c)); + const f256_s u = div_prechecked_inline(sub_finite_inline(m, c), add_finite_inline(m, c)); const f256_s u2 = sqr_inline(u); f256_s p = log_atanh_coeffs[11]; for (std::size_t i = 11; i > 0; --i) p = mul_add_inline(p, u2, log_atanh_coeffs[i - 1]); - const f256_s log_m = add_inline( - mul_double_inline(std::numbers::ln2_v, static_cast(j) / 64.0), - mul_inline(u, p)); - f256_s y = add_inline( - mul_double_inline(std::numbers::ln2_v, static_cast(exp2)), - log_m); - for (int i = 0; i < 1; ++i) - { - const f256_s correction = add_scalar_precise(mul_inline(m, exp_general_scaled(-log_m, false)), -1.0); - y = add_inline(y, correction); - if (mag(correction) <= mul_inline(f256_s::eps(), mag(y))) - break; + const f256_s log_m = add_finite_inline(mul_product_inline(u, p), ln2_table_64[j]); + f256_s y = add_mul_double_inline( + log_m, + std::numbers::ln2_v, + static_cast(exp2)); + if (exp2 >= -96 && exp2 <= 96) + { + for (int i = 0; i < 3; ++i) + { + const f256_s correction = mul_add_double_rhs_inline(a, exp_general_scaled(-y, false), -1.0); + y = add_finite_inline(y, correction); + if (mag(correction) <= mul_product_inline(convergence_epsilon, mag(y))) + break; + } + } + else + { + const f256_s correction = mul_add_double_rhs_inline(m, exp_general_scaled(-log_m, false), -1.0); + y = add_finite_inline(y, correction); } return y; } @@ -337,14 +442,14 @@ namespace detail::_f256 // primitives and kernels return x; if (isinf(x)) return (x.x0 < 0.0) ? f256_s{ 0.0 } : std::numeric_limits::infinity(); - if (x.x0 > 709.782712893384) + if (exp_overflows(x)) return std::numeric_limits::infinity(); - if (x.x0 < -745.133219101941) + if (exp_underflows_to_zero(x)) return f256_s{ 0.0 }; if (iszero(x)) return f256_s{ 1.0 }; - return F256_CANONICALIZE_MATH_RESULT(exp_from_reduced_64(x, false)); + return exp_general_scaled_precise(x, false); } BL_MSVC_NOINLINE constexpr f256_s _exp(const f256_s& x) @@ -354,10 +459,10 @@ namespace detail::_f256 // primitives and kernels if (isinf(x)) return (x.x0 < 0.0) ? f256_s{ 0.0 } : std::numeric_limits::infinity(); - if (x.x0 > 709.782712893384) + if (exp_overflows(x)) return std::numeric_limits::infinity(); - if (x.x0 < -745.133219101941) + if (exp_underflows_to_zero(x)) return f256_s{ 0.0 }; if (iszero(x)) @@ -374,7 +479,7 @@ namespace detail::_f256 // primitives and kernels return (x.x0 < 0.0) ? f256_s{ 0.0 } : std::numeric_limits::infinity(); if (x.x0 > 1023.0 || x.x0 < -1074.0) - return _exp(mul_inline(x, std::numbers::ln2_v)); + return _exp(mul_product_inline(x, std::numbers::ln2_v)); if (iszero(x)) return f256_s{ 1.0 }; @@ -407,10 +512,10 @@ namespace detail::_f256 // primitives and kernels ? f256_s{ -1.0, 0.0, 0.0, 0.0 } : std::numeric_limits::infinity(); - if (x.x0 > 709.782712893384) + if (exp_overflows(x)) return std::numeric_limits::infinity(); - if (x.x0 < -745.133219101941) + if (exp_underflows_to_zero(x)) return f256_s{ -1.0, 0.0, 0.0, 0.0 }; return exp_general_scaled(x, true); @@ -433,26 +538,387 @@ namespace detail::_f256 // primitives and kernels } // power functions - BL_FORCE_INLINE constexpr f256_s powi(f256_s base, int64_t exp) + [[nodiscard]] BL_FORCE_INLINE constexpr bool f256_try_pow10_ldexp_chunks( + int pow5_count, + int binary_exponent_per_input_exponent, + int exponent, + f256_s& out) noexcept + { + if (pow5_count <= 0) + return false; + if (exponent == 0) + { + out = f256_s{ 1.0 }; + return true; + } + + const int chunk_limit = exponent > 0 + ? detail::_f256::pow10_f256_max_exponent / pow5_count + : (-detail::_f256::pow10_f256_min_exponent) / pow5_count; + if (chunk_limit <= 0) + return false; + + f256_s value{ 1.0 }; + int remaining = exponent; + while (remaining != 0) + { + const int chunk = remaining > 0 + ? ((remaining > chunk_limit) ? chunk_limit : remaining) + : ((remaining < -chunk_limit) ? -chunk_limit : remaining); + + int decimal_exponent = 0; + if (!detail::fp::checked_exponent_product(pow5_count, chunk, decimal_exponent)) + return false; + if (decimal_exponent < detail::_f256::pow10_f256_min_exponent || + decimal_exponent > detail::_f256::pow10_f256_max_exponent) + { + return false; + } + + int binary_exponent = 0; + if (!detail::fp::checked_exponent_product(binary_exponent_per_input_exponent, chunk, binary_exponent)) + return false; + + const f256_s term = detail::_f256_impl::ldexp( + detail::_f256_impl::pow10_256(decimal_exponent), + binary_exponent); + value = mul_product_inline(value, term); + if (detail::fp::isinf_or_nan(value.x0)) + return false; + + remaining -= chunk; + } + + out = value; + return true; + } + + template + [[nodiscard]] BL_FORCE_INLINE constexpr bool try_special_pow_components( + bool pow10_base, + int pow2_log2, + bool negative_base, + Exp y, + f256_s& out) + { + int exponent = 0; + if (!detail::fp::try_int_exponent(y, exponent)) + return false; + + f256_s value{}; + if (pow10_base) + { + value = detail::_f256_impl::pow10_256(exponent); + } + else + { + int binary_exponent = 0; + if (!detail::fp::checked_exponent_product(pow2_log2, exponent, binary_exponent)) + return false; + + if (binary_exponent >= std::numeric_limits::max_exponent) + value = std::numeric_limits::infinity(); + else if (binary_exponent < std::numeric_limits::min_exponent - std::numeric_limits::digits) + value = f256_s{ 0.0 }; + else + value = detail::_f256_impl::ldexp(f256_s{ 1.0 }, binary_exponent); + } + + out = (negative_base && detail::fp::is_odd_integral(y)) ? -value : value; + return true; + } + + template + [[nodiscard]] BL_FORCE_INLINE constexpr bool try_integral_pow_finite_raw(Base x, Exp y, f256_s& out) noexcept + { + using UBase = std::make_unsigned_t>; + + const UBase magnitude_base = detail::fp::unsigned_abs(x); + const bool negative_base = x < Base{ 0 }; + + if (magnitude_base == UBase{ 10 }) + return try_special_pow_components(true, 0, negative_base, y, out); + + int pow2_log2 = 0; + if (detail::fp::try_unsigned_power_of_two_log2(magnitude_base, pow2_log2)) + return try_special_pow_components(false, pow2_log2, negative_base, y, out); + + int pow5_count = 0; + if (!detail::fp::factor_power_of_two_five(magnitude_base, pow2_log2, pow5_count)) + return false; + + int exponent = 0; + if (!detail::fp::try_int_exponent(y, exponent)) + return false; + + int decimal_exponent = 0; + if (!detail::fp::checked_exponent_product(pow5_count, exponent, decimal_exponent)) + return false; + + const int binary_exponent_per_input_exponent = pow2_log2 - pow5_count; + f256_s value{}; + if (decimal_exponent >= detail::_f256::pow10_f256_min_exponent && + decimal_exponent <= detail::_f256::pow10_f256_max_exponent) + { + int binary_exponent = 0; + if (!detail::fp::checked_exponent_product(binary_exponent_per_input_exponent, exponent, binary_exponent)) + return false; + + value = detail::_f256_impl::ldexp( + detail::_f256_impl::pow10_256(decimal_exponent), + binary_exponent); + } + else if (!f256_try_pow10_ldexp_chunks( + pow5_count, + binary_exponent_per_input_exponent, + exponent, + value)) + { + return false; + } + + out = (negative_base && detail::fp::is_odd_integral(y)) ? -value : value; + return true; + } + + [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s pow_mul_adaptive(const f256_s& a, const f256_s& b) noexcept { - return detail::fp::powi_by_squaring(base, exp); + return detail::fp::dekker_product_needs_scaling(a.x0, b.x0) + ? mul_dekker_range_safe_canonical_inline(a, b) + : mul_canonical_inline(a, b); + } + + [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s pow_sqr_adaptive(const f256_s& a) noexcept + { + return detail::fp::dekker_product_needs_scaling(a.x0, a.x0) + ? mul_dekker_range_safe_canonical_inline(a, a) + : sqr_inline(a); + } + + template + [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s powi_nonnegative_checked(f256_s base, ExpUnsigned exp) noexcept + { + if (exp == ExpUnsigned{ 0 }) + return f256_s{ 1.0 }; + if (exp == ExpUnsigned{ 1 }) + return base; + if (exp == ExpUnsigned{ 2 }) + return pow_sqr_adaptive(base); + if (exp == ExpUnsigned{ 3 }) + { + const f256_s squared = pow_sqr_adaptive(base); + return pow_mul_adaptive(squared, base); + } + if (exp == ExpUnsigned{ 4 }) + { + return pow_sqr_adaptive(pow_sqr_adaptive(base)); + } + + f256_s result{ 1.0 }; + while (exp != ExpUnsigned{ 0 }) + { + if ((exp & ExpUnsigned{ 1 }) != ExpUnsigned{ 0 }) + result = pow_mul_adaptive(result, base); + + exp >>= 1; + if (exp != ExpUnsigned{ 0 }) + base = pow_sqr_adaptive(base); + } + + return result; + } + + template + [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s powi_nonnegative(f256_s base, ExpUnsigned exp) noexcept + { + if (exp == ExpUnsigned{ 0 }) + return f256_s{ 1.0 }; + if (exp == ExpUnsigned{ 1 }) + return base; + if (exp == ExpUnsigned{ 2 }) + return sqr_inline(base); + if (exp == ExpUnsigned{ 3 }) + return mul_canonical_inline(sqr_inline(base), base); + if (exp == ExpUnsigned{ 4 }) + return sqr_inline(sqr_inline(base)); + + f256_s result{ 1.0 }; + while (exp != ExpUnsigned{ 0 }) + { + if ((exp & ExpUnsigned{ 1 }) != ExpUnsigned{ 0 }) + result = mul_canonical_inline(result, base); + + exp >>= 1; + if (exp != ExpUnsigned{ 0 }) + base = sqr_inline(base); + } + + return result; } - BL_FORCE_INLINE constexpr f256_s polish_eighth_root(const f256_s& x, const f256_s& y) + template + [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s powi_nonnegative_unchecked(f256_s base, ExpUnsigned exp) noexcept + { + if (exp == ExpUnsigned{ 0 }) + return f256_s{ 1.0 }; + if (exp == ExpUnsigned{ 1 }) + return base; + if (exp == ExpUnsigned{ 2 }) + return sqr_inline(base); + if (exp == ExpUnsigned{ 3 }) + return mul_product_inline(sqr_inline(base), base); + if (exp == ExpUnsigned{ 4 }) + return sqr_inline(sqr_inline(base)); + + f256_s result{ 1.0 }; + while (exp != ExpUnsigned{ 0 }) + { + if ((exp & ExpUnsigned{ 1 }) != ExpUnsigned{ 0 }) + result = mul_product_inline(result, base); + + exp >>= 1; + if (exp != ExpUnsigned{ 0 }) + base = sqr_inline(base); + } + + return result; + } + + template + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s powi_nonnegative_fast(f256_s base, ExpUnsigned exp) noexcept + { + if (detail::fp::ipow_loop_needs_range_safe_dekker(base.x0, exp)) [[unlikely]] + return powi_nonnegative_checked(base, exp); + return powi_nonnegative(base, exp); + } + + [[nodiscard]] BL_FORCE_INLINE constexpr f256_s reciprocal_pow_result(const f256_s& value) noexcept + { + return f256_s{ 1.0 } / value; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr bool try_exact_integer_pow_base_value(const f256_s& value, std::int64_t& out) noexcept + { + if (value.x1 != 0.0 || value.x2 != 0.0 || value.x3 != 0.0 || !detail::fp::isfinite(value.x0)) + return false; + + const bool negative = value.x0 < 0.0; + const double magnitude = negative ? -value.x0 : value.x0; + if (magnitude > detail::fp::exact_double_integer_limit_double) + return false; + + const double integral = detail::fp::trunc(magnitude); + if (integral != magnitude) + return false; + + out = static_cast(integral); + if (negative) + out = -out; + return true; + } + + template + [[nodiscard]] BL_MSVC_NOINLINE constexpr bool try_exact_integer_pow_base(const f256_s& x, Exp y, f256_s& out) noexcept + { + std::int64_t integer_base = 0; + if (!try_exact_integer_pow_base_value(x, integer_base)) + return false; + + if (detail::_f256::try_integral_pow_finite_raw(integer_base, y, out)) + return true; + + using U = std::make_unsigned_t>; + const U magnitude = detail::fp::unsigned_abs(y); + const bool split_safe = detail::fp::integral_pow_split_safe(integer_base, magnitude) || + !detail::fp::ipow_loop_needs_range_safe_dekker(x.x0, magnitude); + + if constexpr (std::signed_integral>) + { + if (y < 0) + { + if (detail::fp::integral_pow_reciprocal_underflows_binary64(integer_base, magnitude)) + { + const bool negative_zero = detail::fp::negative_integral_pow_result_is_negative(integer_base, magnitude); + out = detail::_f256::signed_zero(negative_zero); + return true; + } + + if (split_safe) + { + const f256_s powered = detail::_f256::powi_nonnegative_unchecked(x, magnitude); + out = detail::_f256::reciprocal_pow_result(powered); + return true; + } + + const f256_s reciprocal = detail::_f256::reciprocal_pow_result(x); + out = (integer_base != 0) + ? detail::_f256::powi_nonnegative_unchecked(reciprocal, magnitude) + : detail::_f256::powi_nonnegative(reciprocal, magnitude); + return true; + } + } + + out = split_safe + ? detail::_f256::powi_nonnegative_unchecked(x, magnitude) + : detail::_f256::powi_nonnegative_fast(x, magnitude); + return true; + } + + template + [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s ipow_integer(const f256_s& x, Exp y) + { + using U = std::make_unsigned_t>; + const U magnitude = detail::fp::unsigned_abs(y); + + if (magnitude == U{0}) + return f256_s{1.0}; + if (isnan(x)) + return x; + if (isinf(x)) + { + const bool negative = signbit(x) && (magnitude & U{1}) != U{0}; + if constexpr (std::signed_integral>) + { + if (y < 0) + return detail::_f256::signed_zero(negative); + } + return f256_s{ + negative + ? -std::numeric_limits::infinity() + : std::numeric_limits::infinity()}; + } + + f256_s special{}; + if (detail::_f256::try_exact_integer_pow_base(x, y, special)) + return special; + + if constexpr (std::signed_integral>) + { + if (y < 0) + { + const f256_s reciprocal = detail::_f256::reciprocal_pow_result(x); + return detail::_f256::powi_nonnegative(reciprocal, magnitude); + } + } + + return detail::_f256::powi_nonnegative_fast(x, magnitude); + } + + BL_MSVC_NOINLINE constexpr f256_s polish_eighth_root(const f256_s& x, const f256_s& y) { if (iszero(y)) return y; const f256_s y2 = sqr_inline(y); const f256_s y4 = sqr_inline(y2); - const f256_s y7 = mul_inline(mul_inline(y4, y2), y); + const f256_s y7 = mul_product_inline(mul_product_inline(y4, y2), y); const f256_s y8 = sqr_inline(y4); - const f256_s correction = div_double_inline(div_inline(sub_inline(x, y8), y7), 8.0); + const f256_s correction = div_double_prechecked_inline(div_prechecked_inline(sub_finite_inline(x, y8), y7), 8.0); - return add_inline(y, correction); + return add_finite_inline(y, correction); } - BL_FORCE_INLINE constexpr f256_s pow_positive_eighth_fraction(const f256_s& x, int numerator) + BL_MSVC_NOINLINE constexpr f256_s pow_positive_eighth_fraction(const f256_s& x, int numerator) { const f256_s r2 = detail::_f256_impl::sqrt(x); if (numerator == 4) @@ -464,15 +930,15 @@ namespace detail::_f256 // primitives and kernels f256_s out{ 1.0 }; if ((numerator & 4) != 0) - out = mul_inline(out, r2); + out = mul_product_inline(out, r2); if ((numerator & 2) != 0) - out = mul_inline(out, r4); + out = mul_product_inline(out, r4); if ((numerator & 1) != 0) { const f256_s r8 = polish_eighth_root(x, detail::_f256_impl::sqrt(r4)); if (numerator == 1) return r8; - out = mul_inline(out, r8); + out = mul_product_inline(out, r8); } return out; } @@ -492,7 +958,7 @@ namespace detail::_f256 // primitives and kernels if (x.x0 < 0.0 || (x.x0 == 0.0 && signbit(x.x0))) return false; - if (!try_get_int64(mul_double_inline(y, 8.0), n)) + if (!try_get_int64(mul_double_product_inline(y, 8.0), n)) return false; return pow_dyadic_eighth_exponent_in_range(n); @@ -525,78 +991,69 @@ namespace detail::_f256 // primitives and kernels const uint64_t whole = magnitude / 8u; const int rem = static_cast(magnitude & 7u); - f256_s result = (whole == 0u) ? f256_s{ 1.0 } : powi(x, static_cast(whole)); + f256_s result = (whole == 0u) ? f256_s{ 1.0 } : detail::fp::powi_by_squaring(x, static_cast(whole)); if (rem != 0) - result = mul_inline(result, pow_positive_eighth_fraction(x, rem)); + result = mul_product_inline(result, pow_positive_eighth_fraction(x, rem)); if (neg) result = recip(result); return result; } - BL_FORCE_INLINE constexpr biguint biguint_from_words(const std::uint32_t* words, int count) + BL_FORCE_INLINE constexpr biguint biguint_from_fmod_u320(const fmod_u320& value) { biguint out{}; - const int copy_count = count < biguint::max_words ? count : biguint::max_words; - for (int i = 0; i < copy_count; ++i) - out.words[i] = words[i]; - out.size = copy_count; - out.trim(); - return out; - } - - BL_FORCE_INLINE constexpr biguint biguint_low_bits(const biguint& value, int bits) - { - biguint out{}; - if (bits <= 0 || value.is_zero()) - return out; - - const int full_words = bits >> 5; - const int rem_bits = bits & 31; - const int copy_words = full_words < value.size ? full_words : value.size; + static_assert(biguint::max_words >= 10); - for (int i = 0; i < copy_words; ++i) - out.words[i] = value.words[i]; - - out.size = copy_words; - if (rem_bits != 0 && full_words < value.size && out.size < biguint::max_words) + for (int i = 0; i < 5; ++i) { - out.words[out.size++] = value.words[full_words] & ((std::uint32_t{ 1 } << rem_bits) - 1u); + out.words[2 * i] = static_cast(value.word[i]); + out.words[2 * i + 1] = static_cast(value.word[i] >> 32); } - + out.size = 10; out.trim(); return out; } - BL_FORCE_INLINE constexpr biguint biguint_pow2(int bit) - { - biguint out{}; - out.set_bit(bit); - return out; - } - - BL_FORCE_INLINE constexpr bool remainder_pi2_payne_hanek(const f256_s& x, long long& n_out, f256_s& r_out) + BL_NO_INLINE constexpr bool remainder_pi2_payne_hanek(const f256_s& x, long long& n_out, f256_s& r_out) { const bool neg = signbit(x.x0); - const exact_dyadic_fmod dx = exact_from_f256_fmod(mag(x)); - if (dx.mant.is_zero()) + const exact_dyadic_fmod_fixed dx = exact_from_f256_fmod_fixed(mag(x)); + if (fmod_u320_is_zero(dx.mant)) { n_out = 0; r_out = neg ? f256_s{ -0.0, 0.0, 0.0, 0.0 } : f256_s{ 0.0, 0.0, 0.0, 0.0 }; return true; } - const biguint two_over_pi = biguint_from_words( - two_over_pi_fixed_words, - static_cast(sizeof(two_over_pi_fixed_words) / sizeof(two_over_pi_fixed_words[0]))); - const biguint product = mul_big(dx.mant, two_over_pi); - const int scale_bits = two_over_pi_fixed_bits - dx.exp2; + // Retaining 1888 bits of 2/pi leaves more than 650 guard bits after + // reducing the largest finite f256 input. Dropping the lowest five + // words also lets the full 320-bit exact expansion accumulator fit in + // the compact shared big integer; truncating its high product words + // would corrupt the quotient quadrant near multiples of pi/2. + constexpr int omitted_low_words = 5; + constexpr int fixed_bits = + detail::trig_reduce::two_over_pi_fixed_bits - omitted_low_words * 32; + constexpr int word_count = + static_cast(sizeof(detail::trig_reduce::two_over_pi_fixed_words) + / sizeof(detail::trig_reduce::two_over_pi_fixed_words[0])) + - omitted_low_words; + const biguint two_over_pi = from_words( + detail::trig_reduce::two_over_pi_fixed_words + omitted_low_words, + word_count); + static_assert(word_count <= biguint::max_words); + static_assert( + biguint::max_words * 32 >= + fixed_bits + static_cast(sizeof(fmod_u320) * 8)); + + const biguint product = mul_big(biguint_from_fmod_u320(dx.mant), two_over_pi); + const int scale_bits = fixed_bits - dx.exp2; if (scale_bits <= 0) return false; - const biguint rem = biguint_low_bits(product, scale_bits); + const biguint rem = low_bits_copy(product, scale_bits); const bool half_bit = rem.get_bit(scale_bits - 1); - const bool sticky = biguint_any_low_bits_set(rem, scale_bits - 1); + const bool sticky = any_low_bits_set(rem, scale_bits - 1); const bool integer_odd = product.get_bit(scale_bits); const bool round_up = half_bit && (sticky || integer_odd); @@ -610,22 +1067,23 @@ namespace detail::_f256 // primitives and kernels bool y_neg = false; if (round_up) { - y_coeff = biguint_pow2(scale_bits); + y_coeff.clear(); + y_coeff.set_bit(scale_bits); y_coeff.sub_inplace(rem); y_neg = !y_coeff.is_zero(); } f256_s r = exact_dyadic_to_f256_fmod(y_coeff, -scale_bits, y_neg); - r = mul_inline(r, pi_2); + r = mul_product_inline(r, pi_2); if (r > pi_4) { - r = sub_inline(r, pi_2); + r = sub_finite_inline(r, pi_2); n_mod4 = (n_mod4 + 1u) & 3u; } else if (r < -pi_4) { - r = add_inline(r, pi_2); + r = add_finite_inline(r, pi_2); n_mod4 = (n_mod4 + 3u) & 3u; } @@ -642,7 +1100,7 @@ namespace detail::_f256 // primitives and kernels // sine/cosine functions - BL_FORCE_INLINE constexpr bool remainder_pi2(const f256_s& x, long long& n_out, f256_s& r_out) + BL_MSVC_NOINLINE constexpr bool remainder_pi2(const f256_s& x, long long& n_out, f256_s& r_out) { if (detail::fp::isinf_or_nan(x.x0)) return false; @@ -654,10 +1112,11 @@ namespace detail::_f256 // primitives and kernels return true; } - const f256_s q = detail::_f256_impl::nearbyint(mul_inline(x, invpi2)); + const f256_s q = detail::_f256_impl::round_nearest_even(mul_product_inline(x, invpi2)); const double qd = q.x0; - if (detail::fp::isinf_or_nan(qd) || detail::fp::absd(qd) > 9.0e15) + if (detail::fp::isinf_or_nan(qd) || detail::fp::absd(qd) >= 0x1p52 || + q.x1 != 0.0 || q.x2 != 0.0 || q.x3 != 0.0) { return remainder_pi2_payne_hanek(x, n_out, r_out); } @@ -668,24 +1127,31 @@ namespace detail::_f256 // primitives and kernels r = sub_mul_double_inline(r, q, pi_2.x1); r = sub_mul_double_inline(r, q, pi_2.x2); r = sub_mul_double_inline(r, q, pi_2.x3); + r = sub_mul_double_inline(r, q, pi_2_tail_4); if (r > pi_4) { - r = sub_inline(r, pi_2); + r = sub_finite_inline(r, pi_2); ++n; } else if (r < -pi_4) { - r = add_inline(r, pi_2); + r = add_finite_inline(r, pi_2); --n; } + // The split-constant path is deliberately cheap. Very close to a + // multiple of pi/2, however, cancellation consumes its guard digits; + // use the exact reducer only for that rare case. + if (detail::fp::absd(r.x0) <= detail::fp::absd(x.x0) * 0x1p-80) + return remainder_pi2_payne_hanek(x, n_out, r_out); + n_out = n; r_out = r; return true; } - #if BL_F256_ENABLE_SIMD + #if FLTX_F256_ENABLE_SIMD BL_FORCE_INLINE constexpr f256_s mul_from_two_prod_terms( double p0, double p1, double p2, double p3, double p4, double p5, double p6, double p7, double p8, double p9, @@ -805,11 +1271,14 @@ namespace detail::_f256 // primitives and kernels BL_MSVC_NOINLINE constexpr f256_s sin_kernel_pi4_inline(const f256_s& r) { + if (detail::fp::absd(r.x0) < 0x1p-107) + return r; + const f256_s t = sqr_inline(r); const f256_s ps = horner_forward_inline(f256_sin_coeffs_pi4, f256_trig_coeff_count_pi4, t); - return mul_add_inline(mul_inline(r, t), ps, r); + return mul_add_inline(mul_product_inline(r, t), ps, r); } BL_MSVC_NOINLINE constexpr f256_s cos_kernel_pi4_inline(const f256_s& r) @@ -818,23 +1287,37 @@ namespace detail::_f256 // primitives and kernels const f256_s pc = horner_forward_inline(f256_cos_coeffs_pi4, f256_trig_coeff_count_pi4, t); - return mul_add_inline(t, pc, f256_s{ 1.0 }); + return mul_add_double_rhs_inline(t, pc, 1.0); } BL_MSVC_NOINLINE constexpr void sincos_kernel_pi4_inline(const f256_s& r, f256_s& s_out, f256_s& c_out) { + if (detail::fp::absd(r.x0) < 0x1p-107) + { + s_out = r; + c_out = f256_s{ 1.0 }; + return; + } + const f256_s t = sqr_inline(r); f256_s ps{}; f256_s pc{}; horner_pair_forward_inline(f256_sin_coeffs_pi4, f256_cos_coeffs_pi4, f256_trig_coeff_count_pi4, t, ps, pc); - s_out = mul_add_inline(mul_inline(r, t), ps, r); - c_out = mul_add_inline(t, pc, f256_s{ 1.0 }); + s_out = mul_add_inline(mul_product_inline(r, t), ps, r); + c_out = mul_add_double_rhs_inline(t, pc, 1.0); } BL_MSVC_NOINLINE constexpr void sincos_kernel_small(const f256_s& r, f256_s& s_out, f256_s& c_out) { + if (detail::fp::absd(r.x0) < 0x1p-107) + { + s_out = r; + c_out = f256_s{ 1.0 }; + return; + } + const f256_s t = sqr_inline(r); f256_s ps{}; @@ -847,14 +1330,16 @@ namespace detail::_f256 // primitives and kernels ps, pc); - const f256_s rt = mul_inline(r, t); + const f256_s rt = mul_product_inline(r, t); s_out = mul_add_horner_step(rt, ps, r); - c_out = mul_add_horner_step(t, pc, f256_s{ 1.0 }); + c_out = bl::detail::is_constant_evaluated() + ? mul_add_double_rhs_inline(t, pc, 1.0) + : mul_add_horner_step(t, pc, f256_s{ 1.0 }); } BL_MSVC_NOINLINE constexpr void sincos_kernel_pi64_reduced(const f256_s& r, f256_s& s_out, f256_s& c_out) { - int k = static_cast(nearbyint_ties_even(r.x0 * 20.371832715762604)); + int k = static_cast(round_nearest_even_value(r.x0 * 20.371832715762604)); if (k < -16) k = -16; else if (k > 16) @@ -866,8 +1351,8 @@ namespace detail::_f256 // primitives and kernels return; } - const f256_s a = mul_double_inline(std::numbers::pi_v, static_cast(k) * 0.015625); - const f256_s u = sub_inline(r, a); + const f256_s a = mul_double_product_inline(std::numbers::pi_v, static_cast(k) * 0.015625); + const f256_s u = sub_finite_inline(r, a); f256_s su{}; f256_s cu{}; @@ -877,13 +1362,16 @@ namespace detail::_f256 // primitives and kernels const f256_s sa = k < 0 ? -f256_sin_table_pi64[table_index] : f256_sin_table_pi64[table_index]; const f256_s ca = f256_cos_table_pi64[table_index]; - s_out = mul_add_inline(ca, su, mul_inline(sa, cu)); - c_out = mul_sub_inline(ca, cu, mul_inline(sa, su)); + s_out = mul_add_mul_inline(ca, su, sa, cu); + c_out = mul_sub_mul_inline(ca, cu, sa, su); } BL_MSVC_NOINLINE constexpr f256_s sin_kernel_pi4(const f256_s& r) { - if (bl::use_constexpr_math()) + if (detail::fp::absd(r.x0) < 0x1p-107) + return r; + + if (bl::detail::is_constant_evaluated()) { return sin_kernel_pi4_inline(r); } @@ -891,13 +1379,13 @@ namespace detail::_f256 // primitives and kernels const f256_s t = sqr_inline(r); const f256_s ps = horner_forward(f256_sin_coeffs_pi4, f256_trig_coeff_count_pi4, t); - const f256_s rt = mul_inline(r, t); + const f256_s rt = mul_product_inline(r, t); return mul_add_horner_step(rt, ps, r); } BL_MSVC_NOINLINE constexpr f256_s cos_kernel_pi4(const f256_s& r) { - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { return cos_kernel_pi4_inline(r); } @@ -905,12 +1393,9 @@ namespace detail::_f256 // primitives and kernels const f256_s t = sqr_inline(r); const f256_s pc = horner_forward(f256_cos_coeffs_pi4, f256_trig_coeff_count_pi4, t); - return mul_add_horner_step(t, pc, f256_s{ 1.0 }); - } - - BL_MSVC_NOINLINE constexpr void sincos_kernel_pi4(const f256_s& r, f256_s& s_out, f256_s& c_out) - { - sincos_kernel_pi64_reduced(r, s_out, c_out); + return bl::detail::is_constant_evaluated() + ? mul_add_double_rhs_inline(t, pc, 1.0) + : mul_add_horner_step(t, pc, f256_s{ 1.0 }); } BL_MSVC_NOINLINE constexpr bool _sincos(const f256_s& x, f256_s& s_out, f256_s& c_out) @@ -925,7 +1410,7 @@ namespace detail::_f256 // primitives and kernels if (ax <= static_cast(pi_4)) { - sincos_kernel_pi4(x, s_out, c_out); + sincos_kernel_pi64_reduced(x, s_out, c_out); return true; } @@ -939,7 +1424,7 @@ namespace detail::_f256 // primitives and kernels } f256_s sr{}, cr{}; - sincos_kernel_pi4(r, sr, cr); + sincos_kernel_pi64_reduced(r, sr, cr); switch ((int)(n & 3LL)) { @@ -957,14 +1442,14 @@ namespace detail::_f256 // primitives and kernels { const f256_s z2 = sqr_inline(z); const f256_s p = horner_reverse(f256_atan_reduced_coeffs, f256_atan_reduced_coeff_count, z2); - return mul_inline(z, p); + return mul_product_inline(z, p); } BL_MSVC_NOINLINE constexpr f256_s atan_core_unit(const f256_s& z) { using namespace detail::_f256; - int k = static_cast(nearbyint_ties_even(z.x0 * 16.0)); + int k = static_cast(round_nearest_even_value(z.x0 * 16.0)); if (k <= 0) return atan_series_reduced(z); if (k > 16) @@ -972,10 +1457,10 @@ namespace detail::_f256 // primitives and kernels const double a = static_cast(k) * 0.0625; const f256_s u = div_refined_once( - sub_double_inline(z, a), - add_scalar_precise(mul_double_inline(z, a), 1.0)); + sub_double_finite_inline(z, a), + add_scalar_precise(mul_double_product_inline(z, a), 1.0)); - return add_inline(f256_atan_reduced_table_16[k], atan_series_reduced(u)); + return add_finite_inline(f256_atan_reduced_table_16[k], atan_series_reduced(u)); } BL_MSVC_NOINLINE constexpr f256_s _atan(const f256_s& x) @@ -991,8 +1476,8 @@ namespace detail::_f256 // primitives and kernels if (ax > f256_s{ 1.0 }) { - const f256_s core = atan_core_unit(div_refined_once(f256_s{ 1.0 }, ax)); - const f256_s out = sub_inline(pi_2, core); + const f256_s core = atan_core_unit(div_refined_once(1.0, ax)); + const f256_s out = sub_finite_inline(pi_2, core); return neg ? -out : out; } @@ -1013,7 +1498,7 @@ namespace detail::_f256 // primitives and kernels if (ax == f256_s{ 1.0 }) return (x.x0 < 0.0) ? -pi_2 : pi_2; - const f256_s c = detail::_f256_impl::sqrt_accurate(mul_inline(sub_double_inline(1.0, x), add_double_inline(x, 1.0))); + const f256_s c = detail::_f256_impl::sqrt_accurate(mul_product_inline(sub_double_finite_inline(1.0, x), add_double_finite_inline(x, 1.0))); return detail::_f256_impl::atan2(x, c); } @@ -1026,11 +1511,11 @@ namespace detail::_f256 // primitives and kernels for (int k = 1; k <= 128; ++k) { - power = mul_inline(power, x2); - const f256_s term = div_double_inline(power, static_cast(2 * k + 1)); - sum = add_inline(sum, term); + power = mul_product_inline(power, x2); + const f256_s term = div_double_prechecked_inline(power, static_cast(2 * k + 1)); + sum = add_finite_inline(sum, term); - const f256_s threshold = mul_double_inline(mul_inline(f256_s::eps(), mag(sum)), 0.0625); + const f256_s threshold = mul_double_product_inline(mul_product_inline(convergence_epsilon, mag(sum)), 0.0625); if (mag(term) <= threshold) break; } @@ -1039,106 +1524,121 @@ namespace detail::_f256 // primitives and kernels } // erf/erfc functions - [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s erf_cheb_eval(const f256_s& x, const f256_s* coeffs, double shift) + [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s erf_cheb_eval( + const f256_s& x, + const f256_s* coeffs, + std::size_t count, + double shift) { - if (!bl::use_constexpr_math()) + if (!bl::detail::is_constant_evaluated()) { - return detail::_f256_runtime::cheb_eval(x, coeffs, f256_erf_cheb_coeff_count, shift); + return detail::_f256_runtime::cheb_eval(x, coeffs, count, shift); } - const f256_s t = sub_inline(mul_double_inline(x, 2.0), f256_s{ shift }); + const f256_s t = sub_double_finite_inline(mul_double_product_inline(x, 2.0), shift); f256_s b1{ 0.0 }; f256_s b2{ 0.0 }; - for (int i = static_cast(f256_erf_cheb_coeff_count) - 1; i >= 1; --i) + for (int i = static_cast(count) - 1; i >= 1; --i) { - const f256_s b0 = add_inline( - mul_double_sub_inline(mul_inline(t, b1), 2.0, b2), + const f256_s b0 = add_finite_inline( + mul_double_sub_pow2_inline(mul_product_inline(t, b1), 2.0, b2), coeffs[i]); b2 = b1; b1 = b0; } - return add_inline(mul_sub_inline(t, b1, b2), coeffs[0]); + return add_finite_inline(mul_sub_inline(t, b1, b2), coeffs[0]); } [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s erf_positive_cheb(const f256_s& x) { if (x < f256_s{ 1.0 }) - return erf_cheb_eval(x, f256_erf_cheb_0_1, 1.0); + return erf_cheb_eval(x, f256_erf_cheb_0_1, f256_erf_cheb_coeff_count, 1.0); if (x < f256_s{ 2.0 }) - return erf_cheb_eval(x, f256_erf_cheb_1_2, 3.0); - return erf_cheb_eval(x, f256_erf_cheb_2_3, 5.0); + return erf_cheb_eval(x, f256_erf_cheb_1_2, f256_erf_cheb_coeff_count, 3.0); + return erf_cheb_eval(x, f256_erf_cheb_2_3, f256_erf_cheb_coeff_count, 5.0); } [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s erf_positive_series(const f256_s& x) { - const f256_s xx = mul_inline(x, x); + const f256_s xx = mul_product_inline(x, x); f256_s power = x; f256_s sum = x; for (int n = 1; n < 512; ++n) { - power = mul_inline( + power = mul_product_inline( power, - div_inline(-xx, f256_s{ static_cast(n) })); + div_double_prechecked_inline(-xx, static_cast(n))); - const f256_s term = div_inline( - power, - f256_s{ static_cast(2 * n + 1) }); + const f256_s term = div_double_prechecked_inline(power, static_cast(2 * n + 1)); - sum = add_inline(sum, term); - if (mag(term) < f256_s::eps()) + sum = add_finite_inline(sum, term); + if (mag(term) < convergence_epsilon) break; } - return mul_inline( - mul_inline(f256_s{ 2.0 }, std::numbers::inv_sqrtpi_v), - sum); + return mul_double_product_inline( + mul_product_inline(std::numbers::inv_sqrtpi_v, sum), + 2.0); } [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s erfc_positive_cheb_3_4(const f256_s& x) { - return erf_cheb_eval(x, f256_erfc_cheb_3_4, 7.0); + return erf_cheb_eval(x, f256_erfc_cheb_3_4, f256_erfc_cheb_coeff_count, 7.0); + } + + [[nodiscard]] BL_MSVC_NOINLINE constexpr bool erfc_continued_fraction_step( + f256_s& b, + f256_s& c, + f256_s& d, + f256_s& h, + double an, + const f256_s& tiny, + const f256_s& convergence) noexcept + { + b = add_double_finite_inline(b, 2.0); + + d = add_mul_double_inline(b, d, an); + if (mag(d) < tiny) + d = tiny; + + c = add_finite_inline(b, div_double_prechecked_inline(an, c)); + if (mag(c) < tiny) + c = tiny; + + d = div_double_prechecked_inline(1.0, d); + const f256_s delta = mul_product_inline(d, c); + h = mul_product_inline(h, delta); + return mag(sub_double_finite_inline(delta, 1.0)) <= convergence; } [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s erfc_positive_cf(const f256_s& x) { const f256_s z = sqr_inline(x); - constexpr f256_s a = f256_s{ 0.5 }; constexpr f256_s tiny = f256_s{ 1.0e-300, 0.0, 0.0, 0.0 }; - f256_s b = add_double_inline(z, 0.5); - f256_s c = f256_s{ 1.0 } / tiny; - f256_s d = f256_s{ 1.0 } / b; + f256_s b = add_double_finite_inline(z, 0.5); + const f256_s convergence = mul_double_product_inline(convergence_epsilon, 64.0); + f256_s c = div_double_prechecked_inline(1.0, tiny); + f256_s d = div_double_prechecked_inline(1.0, b); f256_s h = d; + double an = -0.5; + double an_step = -2.5; for (int i = 1; i <= 160; ++i) { - const f256_s ii = f256_s{ static_cast(i) }; - const f256_s an = -mul_inline(ii, sub_inline(ii, a)); - - b = add_double_inline(b, 2.0); - - d = mul_add_inline(an, d, b); - if (mag(d) < tiny) - d = tiny; - - c = add_inline(b, div_inline(an, c)); - if (mag(c) < tiny) - c = tiny; - - d = f256_s{ 1.0 } / d; - const f256_s delta = mul_inline(d, c); - h = mul_inline(h, delta); - - if (mag(sub_double_inline(delta, 1.0)) <= mul_double_inline(f256_s::eps(), 64.0)) + if (erfc_continued_fraction_step(b, c, d, h, an, tiny, convergence)) break; + + an += an_step; + an_step -= 2.0; } - return mul_inline( - mul_inline(_exp(-z), x), - mul_inline(std::numbers::inv_sqrtpi_v, h)); + return mul_product_inline( + mul_product_inline(_exp(-z), x), + mul_product_inline(std::numbers::inv_sqrtpi_v, h)); } // erfc(13) is below the f256 accuracy target, so the tails round to 0/1/2. @@ -1152,22 +1652,22 @@ namespace detail::_f256 // primitives and kernels f256_s p = horner_reverse(lgamma1p_coeff, static_cast(count), y); - return mul_inline(y, mul_add_inline(y, p, -std::numbers::egamma_v)); + return mul_product_inline(y, mul_add_inline(y, p, -std::numbers::egamma_v)); } BL_NO_INLINE constexpr bool try_lgamma_near_one_or_two(const f256_s& x, f256_s& out) noexcept { - const f256_s y1 = sub_double_inline(x, 1.0); + const f256_s y1 = sub_double_finite_inline(x, 1.0); if (mag(y1) <= f256_s{ 0.25 }) { out = lgamma1p_series(y1); return true; } - const f256_s y2 = sub_double_inline(x, 2.0); + const f256_s y2 = sub_double_finite_inline(x, 2.0); if (mag(y2) <= f256_s{ 0.25 }) { - out = add_inline(log1p_series_reduced(y2), lgamma1p_series(y2)); + out = add_finite_inline(log1p_series_reduced(y2), lgamma1p_series(y2)); return true; } @@ -1185,14 +1685,14 @@ namespace detail::_f256 // primitives and kernels while (z < f256_s{ 1.0 }) { - product = mul_inline(product, z); - z = add_double_inline(z, 1.0); + product = mul_product_inline(product, z); + z = add_double_finite_inline(z, 1.0); shifted_up = true; } while (z > f256_s{ 2.25 }) { - z = sub_double_inline(z, 1.0); - product = mul_inline(product, z); + z = sub_double_finite_inline(z, 1.0); + product = mul_product_inline(product, z); } f256_s near_value{}; @@ -1200,7 +1700,7 @@ namespace detail::_f256 // primitives and kernels return false; const f256_s log_product = _log(product); - out = shifted_up ? sub_inline(near_value, log_product) : add_inline(near_value, log_product); + out = shifted_up ? sub_finite_inline(near_value, log_product) : add_finite_inline(near_value, log_product); return true; } @@ -1212,7 +1712,7 @@ namespace detail::_f256 // primitives and kernels while (z < asymptotic_min) { - product = mul_inline(product, z); + product = mul_product_inline(product, z); const double hi = product.x0; if (hi != 0.0) @@ -1225,13 +1725,13 @@ namespace detail::_f256 // primitives and kernels } } - z = add_double_inline(z, 1.0); + z = add_double_finite_inline(z, 1.0); } } BL_NO_INLINE constexpr f256_s lgamma_stirling_asymptotic(const f256_s& z) noexcept { - const f256_s inv = f256_s{ 1.0 } / z; + const f256_s inv = div_double_prechecked_inline(1.0, z); const f256_s inv2 = sqr_eval(inv); const f256_s series = mul_eval(inv, horner_reverse( lgamma_stirling_coeffs, @@ -1266,9 +1766,9 @@ namespace detail::_f256 // primitives and kernels BL_MSVC_NOINLINE constexpr f256_s sinpi_reduced(const f256_s& x) noexcept { - const f256_s n = detail::_f256_impl::nearbyint(x); - const f256_s r = sub_inline(x, n); - f256_s out = detail::_f256_impl::sin(mul_inline(std::numbers::pi_v, r)); + const f256_s n = detail::_f256_impl::round_nearest_even(x); + const f256_s r = sub_finite_inline(x, n); + f256_s out = detail::_f256_impl::sin(mul_product_inline(std::numbers::pi_v, r)); if (is_odd_integer(n)) out = -out; return out; @@ -1276,7 +1776,7 @@ namespace detail::_f256 // primitives and kernels [[nodiscard]] BL_FORCE_INLINE constexpr f256_s cbrt_constexpr_seed(const f256_s& ax) { - return detail::_f256_impl::exp(detail::_f256_impl::log(ax) / f256_s{ 3.0 }); + return f256_s{ detail::fp::cbrt_seed(ax.x0), 0.0, 0.0, 0.0 }; } } @@ -1312,36 +1812,50 @@ namespace detail::_f256 ); } - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s cbrt_tail_step(const f256_s& ax, const f256_s& current) noexcept + [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s cbrt_tail_step(const f256_s& ax, const f256_s& current) noexcept { const double inv_derivative = 1.0 / (3.0 * current.x0 * current.x0); const f256_s current_squared = sqr_inline(current); const f256_s residual = value_sub_mul_inline(ax, current_squared, current); - return add_inline(current, mul_double_inline(residual, inv_derivative)); + return add_mul_double_inline(current, residual, inv_derivative); + } + + [[nodiscard]] BL_FORCE_INLINE constexpr int scale_cbrt_input(f256_s& value) noexcept + { + if (value.x0 >= 0x1p-300 && value.x0 <= 0x1p300) + return 0; + + const int exponent = detail::fp::frexp_exponent_limb(value.x0); + int remainder = exponent % 3; + if (remainder < 0) + remainder += 3; + + value = ldexp_terms(value, remainder - exponent); + return (exponent - remainder) / 3; } } // namespace detail::_f256 // exponential functions -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::exp(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::exp(const f256_s& x) { - return F256_CANONICALIZE_MATH_RESULT(_exp(x)); + return _exp(x); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::exp2(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::exp2(const f256_s& x) { - return F256_CANONICALIZE_MATH_RESULT(_exp2(x)); + return _exp2(x); } // logarithm functions -[[nodiscard]] BL_FORCE_INLINE constexpr double detail::_f256_impl::log_as_double(f256_s a) noexcept +[[nodiscard]] BL_MSVC_NOINLINE constexpr double detail::_f256_impl::log_as_double(f256_s a) noexcept { const double hi = a.x0; if (hi <= 0.0) return detail::fp::log(static_cast(a)); const double lo = (a.x1 + a.x2) + a.x3; - if (!bl::use_constexpr_math()) + if (!bl::detail::is_constant_evaluated()) { return std::log(hi) + std::log1p(lo / hi); } @@ -1349,12 +1863,12 @@ namespace detail::_f256 return detail::fp::log(hi) + detail::fp::log1p(lo / hi); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::log(const f256_s& a) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::log(const f256_s& a) { - return F256_CANONICALIZE_MATH_RESULT(_log(a)); + return _log(a); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::log2(const f256_s& a) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::log2(const f256_s& a) { if (isnan(a)) return a; @@ -1369,10 +1883,10 @@ namespace detail::_f256 if (f256_try_exact_binary_log2(a, exact_exp2)) return f256_s{ static_cast(exact_exp2), 0.0, 0.0, 0.0 }; - return F256_CANONICALIZE_MATH_RESULT(mul_inline(_log(a), std::numbers::log2e_v)); + return mul_product_inline(_log(a), std::numbers::log2e_v); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::log10(const f256_s& a) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::log10(const f256_s& a) { if (isnan(a)) return a; @@ -1390,21 +1904,22 @@ namespace detail::_f256 for (int k = k0 - 2; k <= k0 + 2; ++k) { - if (a == detail::_f256_impl::pow10_256(k)) + const f256_s pow10 = detail::_f256_impl::pow10_256(k); + if (pow10.x0 >= std::numeric_limits::min() && a == pow10) return f256_s{ static_cast(k), 0.0, 0.0, 0.0 }; } } - return F256_CANONICALIZE_MATH_RESULT(mul_inline(_log(a), std::numbers::log10e_v)); + return mul_product_inline(_log(a), std::numbers::log10e_v); } // expm1/log1p functions -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::expm1(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::expm1(const f256_s& x) { - return F256_CANONICALIZE_MATH_RESULT(_expm1(x)); + return _expm1(x); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::log1p(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::log1p(const f256_s& x) { if (isnan(x)) return x; @@ -1419,37 +1934,38 @@ namespace detail::_f256 const f256_s ax = detail::_f256::mag(x); if (ax <= f256_s{ 0.5 }) - return F256_CANONICALIZE_MATH_RESULT(log1p_newton_small(x)); + return log1p_newton_small(x); - const f256_s u = add_double_inline(x, 1.0); - if (sub_double_inline(u, 1.0) == x) - return F256_CANONICALIZE_MATH_RESULT(detail::_f256_impl::log(u)); + const f256_s u = add_double_finite_inline(x, 1.0); + if (sub_double_finite_inline(u, 1.0) == x) + return detail::_f256_impl::log(u); if (x > f256_s{ 0.0 } && x <= f256_s{ 1.0 }) { - const f256_s t = div_inline(x, add_double_inline(detail::_f256_impl::sqrt(add_double_inline(x, 1.0)), 1.0)); - return F256_CANONICALIZE_MATH_RESULT(mul_double_inline(log1p_newton_small(t), 2.0)); + const f256_s t = div_prechecked_inline(x, add_double_finite_inline(detail::_f256_impl::sqrt(add_double_finite_inline(x, 1.0)), 1.0)); + return mul_double_product_inline(log1p_newton_small(t), 2.0); } if (x > f256_s{ 0.0 }) - return F256_CANONICALIZE_MATH_RESULT(detail::_f256_impl::log(u)); + return detail::_f256_impl::log(u); - const f256_s y = sub_double_inline(u, 1.0); + const f256_s y = sub_double_finite_inline(u, 1.0); if (iszero(y)) return x; - return F256_CANONICALIZE_MATH_RESULT(mul_inline(detail::_f256_impl::log(u), div_inline(x, y))); + return mul_product_inline(detail::_f256_impl::log(u), div_prechecked_inline(x, y)); } // roots -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::cbrt(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::cbrt(const f256_s& x) { if (detail::fp::iszero_or_inf_or_nan(x.x0)) return x; const bool neg = signbit(x); - const f256_s ax = neg ? -x : x; + f256_s ax = neg ? -x : x; + const int result_scale = scale_cbrt_input(ax); f256_s y = cbrt_seed(ax); y = cbrt_tail_step(ax, y); @@ -1457,39 +1973,16 @@ namespace detail::_f256 y = cbrt_tail_step(ax, y); y = cbrt_tail_step(ax, y); + if (result_scale != 0) + y = ldexp_terms(y, result_scale); + if (neg) y = -y; - return F256_CANONICALIZE_MATH_RESULT(y); + return y; } // power functions -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::pow10_256(int k) -{ - if (k == 0) [[unlikely]] - return f256_s{ 1.0 }; - - int n = (k >= 0) ? k : -k; - - if (n <= 16) { - f256_s r = f256_s{ 1.0 }; - const f256_s ten = f256_s{ 10.0, 0.0, 0.0, 0.0 }; - for (int i = 0; i < n; ++i) r = r * ten; - return (k >= 0) ? r : (f256_s{ 1.0 } / r); - } - - f256_s r = f256_s{ 1.0 }; - f256_s base = f256_s{ 10.0, 0.0, 0.0, 0.0 }; - - while (n) { - if (n & 1) r = r * base; - n >>= 1; - if (n) base = base * base; - } - - return (k >= 0) ? r : (f256_s{ 1.0 } / r); -} - [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::pow(const f256_s& x, const f256_s& y) { if (iszero(y)) @@ -1516,22 +2009,22 @@ namespace detail::_f256 int64_t yi64{}; if (y_is_int && try_get_int64(yi, yi64)) - return powi(x, yi64); + return detail::fp::powi_by_squaring(x, yi64); int64_t dyadic_exponent{}; if (try_get_pow_dyadic_eighth_exponent(x, y, dyadic_exponent)) - return F256_CANONICALIZE_MATH_RESULT(pow_dyadic_eighth_unchecked(x, dyadic_exponent)); + return pow_dyadic_eighth_unchecked(x, dyadic_exponent); if (x.x0 < 0.0 || (x.x0 == 0.0 && signbit(x.x0))) { if (!y_is_int) return std::numeric_limits::quiet_NaN(); - const f256_s magnitude = exp_for_pow(mul_inline(y, _log(-x))); + const f256_s magnitude = exp_for_pow(mul_product_inline(y, _log(-x))); return is_odd_integer(yi) ? -magnitude : magnitude; } - return F256_CANONICALIZE_MATH_RESULT(exp_for_pow(mul_inline(y, _log(x)))); + return exp_for_pow(mul_product_inline(y, _log(x))); } [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::pow(const f256_s& x, double y) @@ -1556,12 +2049,12 @@ namespace detail::_f256 } if (y == 1.0) return x; - if (y == 2.0) return F256_CANONICALIZE_MATH_RESULT(sqr_inline(x)); - if (y == -1.0) return F256_CANONICALIZE_MATH_RESULT(f256_s{ 1.0 } / x); - if (y == 0.5) return F256_CANONICALIZE_MATH_RESULT(detail::_f256_impl::sqrt(x)); + if (y == 2.0) return sqr_inline(x); + if (y == -1.0) return div_refined_once(1.0, x); + if (y == 0.5) return detail::_f256_impl::sqrt(x); double yi{}; - if (bl::use_constexpr_math()) + if (bl::detail::is_constant_evaluated()) { yi = (y < 0.0) ? detail::fp::ceil(y) @@ -1575,40 +2068,40 @@ namespace detail::_f256 const bool y_is_int = (yi == y); if (y_is_int && absd(yi) < 0x1p63) - return powi(x, static_cast(yi)); + return detail::fp::powi_by_squaring(x, static_cast(yi)); int64_t dyadic_exponent{}; if (try_get_pow_dyadic_eighth_exponent(x, y, dyadic_exponent)) - return F256_CANONICALIZE_MATH_RESULT(pow_dyadic_eighth_unchecked(x, dyadic_exponent)); + return pow_dyadic_eighth_unchecked(x, dyadic_exponent); if (x.x0 < 0.0 || (x.x0 == 0.0 && signbit(x.x0))) { if (!y_is_int) return std::numeric_limits::quiet_NaN(); - const f256_s magnitude = exp_for_pow(mul_double_inline(_log(-x), y)); + const f256_s magnitude = exp_for_pow(mul_double_product_inline(_log(-x), y)); const bool y_is_odd = (absd(yi) < 0x1p53) && ((static_cast(yi) & 1ll) != 0); - return F256_CANONICALIZE_MATH_RESULT(y_is_odd ? -magnitude : magnitude); + return y_is_odd ? -magnitude : magnitude; } - return F256_CANONICALIZE_MATH_RESULT(exp_for_pow(mul_double_inline(_log(x), y))); + return exp_for_pow(mul_double_product_inline(_log(x), y)); } // inverse trig functions -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::atan(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::atan(const f256_s& x) { - return F256_CANONICALIZE_MATH_RESULT(_atan(x)); + return _atan(x); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::asin(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::asin(const f256_s& x) { - return F256_CANONICALIZE_MATH_RESULT(_asin(x)); + return _asin(x); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::acos(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::acos(const f256_s& x) { if (isnan(x)) return x; @@ -1621,11 +2114,11 @@ namespace detail::_f256 if (x == f256_s{ -1.0 }) return std::numbers::pi_v; - return F256_CANONICALIZE_MATH_RESULT(sub_inline(pi_2, _asin(x))); + return sub_finite_inline(pi_2, _asin(x)); } // sine/cosine functions -[[nodiscard]] BL_FORCE_INLINE constexpr bool detail::_f256_impl::sincos(const f256_s& x, f256_s& s_out, f256_s& c_out) +[[nodiscard]] BL_MSVC_NOINLINE constexpr bool detail::_f256_impl::sincos(const f256_s& x, f256_s& s_out, f256_s& c_out) { if (iszero(x)) { @@ -1635,12 +2128,12 @@ namespace detail::_f256 } bool ret = _sincos(x, s_out, c_out); - s_out = F256_CANONICALIZE_MATH_RESULT(s_out); - c_out = F256_CANONICALIZE_MATH_RESULT(c_out); + s_out = s_out; + c_out = c_out; return ret; } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::sin(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::sin(const f256_s& x) { if (iszero(x)) return x; @@ -1665,7 +2158,7 @@ namespace detail::_f256 } } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::cos(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::cos(const f256_s& x) { const double ax = detail::_f256::fabs(x.x0); if (detail::fp::isinf_or_nan(ax)) @@ -1689,19 +2182,19 @@ namespace detail::_f256 } // tangent and atan2 -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::tan(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::tan(const f256_s& x) { if (iszero(x)) return x; f256_s s{}, c{}; if (_sincos(x, s, c)) - return F256_CANONICALIZE_MATH_RESULT(s / c); + return s / c; return f256_s{ std::numeric_limits::quiet_NaN(), 0.0, 0.0, 0.0 }; } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::atan2(const f256_s& y, const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::atan2(const f256_s& y, const f256_s& x) { if (detail::fp::isnan(x.x0) || detail::fp::isnan(y.x0)) return std::numeric_limits::quiet_NaN(); @@ -1749,29 +2242,37 @@ namespace detail::_f256 { if (x.x0 < 0.0) { - return F256_CANONICALIZE_MATH_RESULT( - (y.x0 < 0.0) ? -pi_3_4 : pi_3_4); + return + (y.x0 < 0.0) ? -pi_3_4 : pi_3_4; } - return F256_CANONICALIZE_MATH_RESULT( - (y.x0 < 0.0) ? -pi_4 : pi_4); + return + (y.x0 < 0.0) ? -pi_4 : pi_4; } if (ax >= ay) { - f256_s a = _atan(div_refined_once(y, x)); + f256_s ratio = div_refined_once(y, x); + if (iszero(ratio)) [[unlikely]] + ratio = detail::_f256::signed_zero(signbit(y) != signbit(x)); + + f256_s a = _atan(ratio); if (x.x0 < 0.0) a += (y.x0 < 0.0) ? -std::numbers::pi_v : std::numbers::pi_v; - return F256_CANONICALIZE_MATH_RESULT(a); + return a; } - f256_s a = _atan(div_refined_once(x, y)); - return F256_CANONICALIZE_MATH_RESULT((y.x0 < 0.0) ? (-pi_2 - a) : (pi_2 - a)); + f256_s ratio = div_refined_once(x, y); + if (iszero(ratio)) [[unlikely]] + ratio = detail::_f256::signed_zero(signbit(x) != signbit(y)); + + f256_s a = _atan(ratio); + return (y.x0 < 0.0) ? (-pi_2 - a) : (pi_2 - a); } // sinh/cosh/tanh -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::sinh(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::sinh(const f256_s& x) { if (detail::fp::iszero_or_inf_or_nan(x.x0)) return x; @@ -1780,20 +2281,26 @@ namespace detail::_f256 if (ax <= f256_s{ 0.375 }) { const f256_s em1 = _expm1(x); - return F256_CANONICALIZE_MATH_RESULT(div_inline( - mul_add_inline(em1, em1, mul_double_inline(em1, 2.0)), - mul_double_inline(add_scalar_precise(em1, 1.0), 2.0))); + return div_prechecked_inline( + mul_add_inline(em1, em1, mul_double_product_inline(em1, 2.0)), + mul_double_product_inline(add_scalar_precise(em1, 1.0), 2.0)); } const f256_s ex = _exp(ax); - const f256_s inv_ex = div_refined_once(f256_s{ 1.0 }, ex); - f256_s out = mul_double_inline(sub_inline(ex, inv_ex), 0.5); +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + f256_s out = detail::fp::exp_inverse_is_negligible(ax.x0) + ? _ldexp(ex, -1) + : mul_double_product_inline(sub_finite_inline(ex, div_refined_once(1.0, ex)), 0.5); +#else + const f256_s inv_ex = div_refined_once(1.0, ex); + f256_s out = mul_double_product_inline(sub_finite_inline(ex, inv_ex), 0.5); +#endif if (signbit(x)) out = -out; - return F256_CANONICALIZE_MATH_RESULT(out); + return out; } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::cosh(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::cosh(const f256_s& x) { if (isnan(x)) return x; @@ -1802,12 +2309,17 @@ namespace detail::_f256 const f256_s ax = detail::_f256::mag(x); const f256_s ex = _exp(ax); - const f256_s inv_ex = div_refined_once(f256_s{ 1.0 }, ex); - return F256_CANONICALIZE_MATH_RESULT( - mul_double_inline(add_inline(ex, inv_ex), 0.5)); +#if defined(FLTX_MATH_USES_CHECKED_DEKKER) + if (detail::fp::exp_inverse_is_negligible(ax.x0)) + return _ldexp(ex, -1); +#endif + + const f256_s inv_ex = div_refined_once(1.0, ex); + return + mul_double_product_inline(add_finite_inline(ex, inv_ex), 0.5); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::tanh(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::tanh(const f256_s& x) { using namespace detail::_f256; if (detail::fp::iszero_or_nan(x.x0)) @@ -1822,21 +2334,21 @@ namespace detail::_f256 f256_s out{}; if (ax >= f256_s{ 0.5 }) { - const f256_s e = _exp(mul_double_inline(ax, -2.0)); - out = sub_double_inline(1.0, div_refined_once(mul_double_inline(e, 2.0), add_scalar_precise(e, 1.0))); + const f256_s e = _exp(mul_double_product_inline(ax, -2.0)); + out = sub_double_finite_inline(1.0, div_refined_once(mul_double_product_inline(e, 2.0), add_scalar_precise(e, 1.0))); } else { const f256_s em1 = _expm1(ax); const f256_s one_plus = add_scalar_precise(em1, 1.0); out = div_refined_once( - mul_add_inline(em1, em1, mul_double_inline(em1, 2.0)), + mul_add_inline(em1, em1, mul_double_product_inline(em1, 2.0)), add_scalar_precise(sqr_inline(one_plus), 1.0)); } if (signbit(x)) out = -out; - return F256_CANONICALIZE_MATH_RESULT(out); + return out; } // inverse hyperbolic functions @@ -1848,21 +2360,21 @@ namespace detail::_f256 const f256_s ax = detail::_f256::mag(x); f256_s out{}; if (ax > f256_s{ 0x1p500 }) - out = add_inline(detail::_f256_impl::log(ax), std::numbers::ln2_v); + out = add_finite_inline(detail::_f256_impl::log(ax), std::numbers::ln2_v); else if (ax <= f256_s{ 0.5 }) { const f256_s ax2 = sqr_inline(ax); - const f256_s r = add_raw5_value_inline(sqr_raw5_inline(ax), f256_s{ 1.0 }); - out = detail::_f256_impl::log1p(add_inline( + const f256_s r = add_raw5_double_inline(sqr_raw5_inline(ax), 1.0); + out = detail::_f256_impl::log1p(add_finite_inline( ax, - div_inline(ax2, add_double_inline(detail::_f256_impl::sqrt(r), 1.0)))); + div_prechecked_inline(ax2, add_double_finite_inline(detail::_f256_impl::sqrt(r), 1.0)))); } else - out = detail::_f256_impl::log(add_inline(ax, detail::_f256_impl::sqrt(add_raw5_value_inline(sqr_raw5_inline(ax), f256_s{ 1.0 })))); + out = detail::_f256_impl::log(add_finite_inline(ax, detail::_f256_impl::sqrt(add_raw5_double_inline(sqr_raw5_inline(ax), 1.0)))); if (signbit(x)) out = -out; - return F256_CANONICALIZE_MATH_RESULT(out); + return out; } [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::acosh(const f256_s& x) @@ -1878,23 +2390,23 @@ namespace detail::_f256 f256_s out{}; if (x > f256_s{ 0x1p500 }) - out = add_inline(detail::_f256_impl::log(x), std::numbers::ln2_v); + out = add_finite_inline(detail::_f256_impl::log(x), std::numbers::ln2_v); else if (x < f256_s{ 1.25 }) { - const f256_s xm1 = sub_double_inline(x, 1.0); - out = detail::_f256_impl::log1p(add_inline( + const f256_s xm1 = sub_double_finite_inline(x, 1.0); + out = detail::_f256_impl::log1p(add_finite_inline( xm1, - detail::_f256_impl::sqrt_accurate(mul_inline(xm1, add_double_inline(x, 1.0))))); + detail::_f256_impl::sqrt_accurate(mul_product_inline(xm1, add_double_finite_inline(x, 1.0))))); } else - out = detail::_f256_impl::log(add_inline( + out = detail::_f256_impl::log(add_finite_inline( x, - detail::_f256_impl::sqrt_accurate(mul_inline(sub_double_inline(x, 1.0), add_double_inline(x, 1.0))))); + detail::_f256_impl::sqrt_accurate(mul_product_inline(sub_double_finite_inline(x, 1.0), add_double_finite_inline(x, 1.0))))); - return F256_CANONICALIZE_MATH_RESULT(out); + return out; } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::atanh(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::atanh(const f256_s& x) { if (detail::fp::iszero_or_nan(x.x0)) return x; @@ -1910,23 +2422,23 @@ namespace detail::_f256 if (ax <= f256_s{ 0.125 }) { - return F256_CANONICALIZE_MATH_RESULT(atanh_small_series(x)); + return atanh_small_series(x); } if (ax < f256_s{ 0.25 }) { - const f256_s r = div_inline(mul_double_inline(x, 2.0), sub_double_inline(1.0, x)); - return F256_CANONICALIZE_MATH_RESULT(mul_double_inline(detail::_f256_impl::log1p(r), 0.5)); + const f256_s r = div_prechecked_inline(mul_double_product_inline(x, 2.0), sub_double_finite_inline(1.0, x)); + return mul_double_product_inline(detail::_f256_impl::log1p(r), 0.5); } - const f256_s out = mul_double_inline( - detail::_f256_impl::log(div_refined_once(add_double_inline(x, 1.0), sub_double_inline(1.0, x))), + const f256_s out = mul_double_product_inline( + detail::_f256_impl::log(div_refined_once(add_double_finite_inline(x, 1.0), sub_double_finite_inline(1.0, x))), 0.5); - return F256_CANONICALIZE_MATH_RESULT(out); + return out; } // erf/erfc functions -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::erf(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::erf(const f256_s& x) { if (isnan(x)) return x; @@ -1953,17 +2465,17 @@ namespace detail::_f256 } else if (ax < f256_s{ 4.0 }) { - out = f256_s{ 1.0 } - erfc_positive_cheb_3_4(ax); + out = sub_double_finite_inline(1.0, erfc_positive_cheb_3_4(ax)); } else { - out = f256_s{ 1.0 } - erfc_positive_cf(ax); + out = sub_double_finite_inline(1.0, erfc_positive_cf(ax)); } if (neg) out = -out; - return F256_CANONICALIZE_MATH_RESULT(out); + return out; } [[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::erfc(const f256_s& x) @@ -1980,26 +2492,26 @@ namespace detail::_f256 const f256_s ax = -x; if (ax >= erf_saturation_cutoff) return f256_s{ 2.0 }; - return F256_CANONICALIZE_MATH_RESULT(add_double_inline(detail::_f256_impl::erf(ax), 1.0)); + return add_double_finite_inline(detail::_f256_impl::erf(ax), 1.0); } if (x < f256_s{ 1.0 }) - return F256_CANONICALIZE_MATH_RESULT(sub_double_inline(1.0, erf_positive_series(x))); + return sub_double_finite_inline(1.0, erf_positive_series(x)); if (x < f256_s{ 3.0 }) - return F256_CANONICALIZE_MATH_RESULT(sub_double_inline(1.0, erf_positive_cheb(x))); + return sub_double_finite_inline(1.0, erf_positive_cheb(x)); if (x < f256_s{ 4.0 }) - return F256_CANONICALIZE_MATH_RESULT(erfc_positive_cheb_3_4(x)); + return erfc_positive_cheb_3_4(x); if (x >= erf_saturation_cutoff) return f256_s{ 0.0 }; - return F256_CANONICALIZE_MATH_RESULT(erfc_positive_cf(x)); + return erfc_positive_cf(x); } // gamma functions -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::lgamma(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::lgamma(const f256_s& x) { if (isnan(x)) return x; @@ -2007,7 +2519,7 @@ namespace detail::_f256 return std::numeric_limits::infinity(); if (x > f256_s{ 0.0 }) - return F256_CANONICALIZE_MATH_RESULT(lgamma_positive_recurrence(x)); + return lgamma_positive_recurrence(x); const f256_s xi = detail::_f256_impl::trunc(x); if (xi == x) @@ -2017,15 +2529,14 @@ namespace detail::_f256 if (iszero(sinpix)) return std::numeric_limits::infinity(); - const f256_s out = - mul_double_eval(half_log_pi, 2.0) - - detail::_f256_impl::log(detail::_f256::mag(sinpix)) - - lgamma_positive_recurrence(f256_s{ 1.0 } - x); + const f256_s out = sub_eval( + sub_eval(mul_double_eval(half_log_pi, 2.0), detail::_f256_impl::log(detail::_f256::mag(sinpix))), + lgamma_positive_recurrence(sub_double_finite_inline(1.0, x))); - return F256_CANONICALIZE_MATH_RESULT(out); + return out; } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s detail::_f256_impl::tgamma(const f256_s& x) +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256_s detail::_f256_impl::tgamma(const f256_s& x) { if (isnan(x)) return x; @@ -2037,7 +2548,7 @@ namespace detail::_f256 return f256_s{ signbit(x) ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(), 0.0, 0.0, 0.0 }; if (x > f256_s{ 0.0 }) - return F256_CANONICALIZE_MATH_RESULT(_exp(lgamma_positive_recurrence(x))); + return _exp(lgamma_positive_recurrence(x)); const f256_s xi = detail::_f256_impl::trunc(x); if (xi == x) @@ -2049,11 +2560,11 @@ namespace detail::_f256 const f256_s log_abs = sub_eval( sub_eval(mul_double_eval(half_log_pi, 2.0), detail::_f256_impl::log(detail::_f256::mag(sinpix))), - lgamma_positive_recurrence(sub_double_inline(1.0, x))); + lgamma_positive_recurrence(sub_double_finite_inline(1.0, x))); f256_s out = _exp(log_abs); if (signbit(sinpix)) out = -out; - return F256_CANONICALIZE_MATH_RESULT(out); + return out; } } // namespace bl diff --git a/include/fltx/detail/f256_simd_config.h b/include/fltx/detail/f256_simd_config.h new file mode 100644 index 0000000..ed2bd6e --- /dev/null +++ b/include/fltx/detail/f256_simd_config.h @@ -0,0 +1,33 @@ +/** + * fltx/detail/f256_simd_config.h - f256 SIMD configuration defaults. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#ifndef FLTX_DETAIL_F256_SIMD_CONFIG_INCLUDED +#define FLTX_DETAIL_F256_SIMD_CONFIG_INCLUDED + +#include "fltx/detail/simd.h" + +#if !defined(FLTX_F256_ENABLE_SIMD) +# if defined(FLTX_F256_ENABLE_TRIG_SIMD) +# define FLTX_F256_ENABLE_SIMD FLTX_F256_ENABLE_TRIG_SIMD +# elif FLTX_HAS_SSE2 || FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD +# define FLTX_F256_ENABLE_SIMD 1 +# else +# define FLTX_F256_ENABLE_SIMD 0 +# endif +#endif + +#if !defined(FLTX_F256_ENABLE_TRIG_SIMD) +# define FLTX_F256_ENABLE_TRIG_SIMD FLTX_F256_ENABLE_SIMD +#endif + +#if FLTX_F256_ENABLE_SIMD && !(FLTX_HAS_SSE2 || FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) +# error "FLTX_F256_ENABLE_SIMD requires SSE2, AArch64 NEON, or WebAssembly SIMD128 support." +#endif + +#endif diff --git a/include/fltx/detail/f32_math_basic.h b/include/fltx/detail/f32_math_basic.h index 77103a7..95b3c58 100644 --- a/include/fltx/detail/f32_math_basic.h +++ b/include/fltx/detail/f32_math_basic.h @@ -28,12 +28,62 @@ namespace detail::_f32_impl using detail::fp::isfinite; using detail::fp::isinf; using detail::fp::isnan; - using detail::fp::nearbyint; + using detail::fp::round_nearest_even; using detail::fp::nextafter; - using detail::fp::round_half_away_zero; + using detail::fp::round_nearest_away_from_zero; using detail::fp::signbit; using detail::fp::to_signed_integer_or_zero; + using detail::_native_float_decimal::exact_dyadic_to_float; + using detail::_native_float_decimal::f32_decimal_round_traits; + + inline constexpr int pow10_f32_min_exponent = -45; + inline constexpr int pow10_f32_max_exponent = 38; + inline constexpr std::uint32_t pow10_f32_bits[] = + { + 0x00000001u, 0x00000007u, 0x00000047u, 0x000002cau, + 0x00001be0u, 0x000116c2u, 0x000ae398u, 0x006ce3eeu, + 0x02081ceau, 0x03aa2425u, 0x0554ad2eu, 0x0704ec3du, + 0x08a6274cu, 0x0a4fb11fu, 0x0c01ceb3u, 0x0da24260u, + 0x0f4ad2f8u, 0x10fd87b6u, 0x129e74d2u, 0x14461206u, + 0x15f79688u, 0x179abe15u, 0x19416d9au, 0x1af1c901u, + 0x1c971da0u, 0x1e3ce508u, 0x1fec1e4au, 0x219392efu, + 0x233877aau, 0x24e69595u, 0x26901d7du, 0x283424dcu, + 0x29e12e13u, 0x2b8cbcccu, 0x2d2febffu, 0x2edbe6ffu, + 0x3089705fu, 0x322bcc77u, 0x33d6bf95u, 0x358637bdu, + 0x3727c5acu, 0x38d1b717u, 0x3a83126fu, 0x3c23d70au, + 0x3dcccccdu, 0x3f800000u, 0x41200000u, 0x42c80000u, + 0x447a0000u, 0x461c4000u, 0x47c35000u, 0x49742400u, + 0x4b189680u, 0x4cbebc20u, 0x4e6e6b28u, 0x501502f9u, + 0x51ba43b7u, 0x5368d4a5u, 0x551184e7u, 0x56b5e621u, + 0x58635fa9u, 0x5a0e1bcau, 0x5bb1a2bcu, 0x5d5e0b6bu, + 0x5f0ac723u, 0x60ad78ecu, 0x6258d727u, 0x64078678u, + 0x65a96816u, 0x6753c21cu, 0x69045951u, 0x6aa56fa6u, + 0x6c4ecb8fu, 0x6e013f39u, 0x6fa18f08u, 0x7149f2cau, + 0x72fc6f7cu, 0x749dc5aeu, 0x76453719u, 0x77f684dfu, + 0x799a130cu, 0x7b4097ceu, 0x7cf0bdc2u, 0x7e967699u + }; + + [[nodiscard]] BL_FORCE_INLINE constexpr float pow10(int exponent) noexcept + { + if (exponent > pow10_f32_max_exponent) + return std::numeric_limits::infinity(); + if (exponent < pow10_f32_min_exponent) + return 0.0f; + + return std::bit_cast(pow10_f32_bits[exponent - pow10_f32_min_exponent]); + } + + [[nodiscard]] BL_FORCE_INLINE constexpr float round_decimals(float v, int prec) noexcept + { + return detail::_f64_impl::round_decimals_native(v, prec); + } + + [[nodiscard]] BL_FORCE_INLINE constexpr float round_significant(float v, int figures) noexcept + { + return detail::_f64_impl::round_significant_native(v, figures); + } + BL_FORCE_INLINE constexpr int normalize_remquo_bits(int q) noexcept { const int magnitude = q < 0 ? -q : q; @@ -86,14 +136,34 @@ namespace detail::_f32_impl return static_cast(m); } + BL_PUSH_PRECISE; [[nodiscard]] BL_FORCE_INLINE constexpr float modf(float x, float* iptr) noexcept { + if (isnan(x) || isinf(x) || iszero(x)) + { + if (iptr) + *iptr = x; + return isinf(x) ? detail::fp::copysign(0.0f, x) : x; + } + double integral = 0.0; const double fractional = bl::modf(static_cast(x), &integral); if (iptr) *iptr = static_cast(integral); return static_cast(fractional); } + BL_POP_PRECISE; + + BL_PUSH_PRECISE + [[nodiscard]] BL_FORCE_INLINE constexpr float fma(float x, float y, float z) noexcept + { + // Binary64 can represent an exact binary32 product and the following + // sum, so this is a correctly rounded binary32 FMA on every target. + return static_cast( + static_cast(x) * static_cast(y) + + static_cast(z)); + } + BL_POP_PRECISE } // namespace detail::_f32_impl @@ -123,58 +193,36 @@ namespace detail::_f32_impl [[nodiscard]] BL_FORCE_INLINE constexpr float round(float x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f32_impl::round_half_away_zero(x), - std::round(x) - ); + return detail::_f32_impl::round_nearest_away_from_zero(x); } -[[nodiscard]] BL_FORCE_INLINE constexpr float nearbyint(float x) noexcept +[[nodiscard]] BL_FORCE_INLINE constexpr float roundeven(float x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f32_impl::nearbyint(x), - std::nearbyint(x) - ); + return detail::_f32_impl::round_nearest_even(x); } -[[nodiscard]] BL_FORCE_INLINE constexpr float rint(float x) noexcept +[[nodiscard]] BL_FORCE_INLINE constexpr float round_decimals(float x, int precision) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f32_impl::nearbyint(x), - std::rint(x) - ); + return detail::_f32_impl::round_decimals(x, precision); } -[[nodiscard]] BL_FORCE_INLINE constexpr long lround(float x) noexcept +[[nodiscard]] BL_FORCE_INLINE constexpr float round_significant( + float x, + int precision) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f32_impl::to_signed_integer_or_zero(detail::_f32_impl::round_half_away_zero(x)), - std::lround(x) - ); + return detail::_f32_impl::round_significant(x, precision); } -[[nodiscard]] BL_FORCE_INLINE constexpr long long llround(float x) noexcept -{ - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f32_impl::to_signed_integer_or_zero(detail::_f32_impl::round_half_away_zero(x)), - std::llround(x) - ); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr long lrint(float x) noexcept +[[nodiscard]] BL_FORCE_INLINE constexpr long lround(float x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f32_impl::to_signed_integer_or_zero(detail::_f32_impl::nearbyint(x)), - std::lrint(x) - ); + return detail::_f32_impl::to_signed_integer_or_zero( + detail::_f32_impl::round_nearest_away_from_zero(x)); } -[[nodiscard]] BL_FORCE_INLINE constexpr long long llrint(float x) noexcept +[[nodiscard]] BL_FORCE_INLINE constexpr long long llround(float x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f32_impl::to_signed_integer_or_zero(detail::_f32_impl::nearbyint(x)), - std::llrint(x) - ); + return detail::_f32_impl::to_signed_integer_or_zero( + detail::_f32_impl::round_nearest_away_from_zero(x)); } [[nodiscard]] BL_FORCE_INLINE constexpr float fmod(float x, float y) noexcept @@ -203,10 +251,12 @@ namespace detail::_f32_impl [[nodiscard]] BL_FORCE_INLINE constexpr float fma(float x, float y, float z) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - static_cast(bl::fma(static_cast(x), static_cast(y), static_cast(z))), - std::fma(x, y, z) - ); + return detail::_f32_impl::fma(x, y, z); +} + +[[nodiscard]] BL_FORCE_INLINE constexpr float recip(float x) noexcept +{ + return 1.0f / x; } [[nodiscard]] BL_FORCE_INLINE constexpr float fmin(float a, float b) noexcept @@ -227,10 +277,20 @@ namespace detail::_f32_impl [[nodiscard]] BL_FORCE_INLINE constexpr float fdim(float x, float y) noexcept { +#if defined(__EMSCRIPTEN__) + // Emscripten's libm fdim does not reliably propagate NaNs. The scalar + // definition is both cheaper than a call and preserves the C contract. + return (detail::fp::isnan(x) || detail::fp::isnan(y)) + ? std::numeric_limits::quiet_NaN() + : ((x > y) ? (x - y) : 0.0f); +#else BL_CONSTEXPR_RUNTIME_DISPATCH( - (x > y) ? (x - y) : 0.0f, + (isnan(x) || isnan(y)) + ? std::numeric_limits::quiet_NaN() + : ((x > y) ? (x - y) : 0.0f), std::fdim(x, y) ); +#endif } [[nodiscard]] BL_FORCE_INLINE constexpr float copysign(float x, float y) noexcept @@ -269,10 +329,7 @@ namespace detail::_f32_impl [[nodiscard]] BL_FORCE_INLINE constexpr float modf(float x, float* iptr) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f32_impl::modf(x, iptr), - std::modf(x, iptr) - ); + return detail::_f32_impl::modf(x, iptr); } [[nodiscard]] BL_FORCE_INLINE constexpr int ilogb(float x) noexcept diff --git a/include/fltx/detail/f32_math_transcendental.h b/include/fltx/detail/f32_math_transcendental.h index f054eb6..b4f20ca 100644 --- a/include/fltx/detail/f32_math_transcendental.h +++ b/include/fltx/detail/f32_math_transcendental.h @@ -14,6 +14,7 @@ #include "fltx/detail/f32_math_basic.h" #include "fltx/detail/f64_math_transcendental.h" +#include "fltx/traits.h" namespace bl { @@ -83,6 +84,18 @@ namespace detail::_f32_runtime [[nodiscard]] BL_FORCE_INLINE constexpr float log10(float x) noexcept { + if (detail::fp::isfinite(x) && x > 0.0f) + { + const int exp2 = detail::fp::frexp_exponent(static_cast(x)); + const int k0 = static_cast(detail::fp::floor((exp2 - 1) * 0.30102999566398114)); + + for (int k = k0 - 2; k <= k0 + 2; ++k) + { + if (0 <= k && k <= 10 && x == detail::_f32_impl::pow10(k)) + return static_cast(k); + } + } + BL_CONSTEXPR_RUNTIME_DISPATCH( static_cast(bl::log10(static_cast(x))), std::log10(x) @@ -117,6 +130,11 @@ namespace detail::_f32_runtime [[nodiscard]] BL_FORCE_INLINE constexpr float hypot(float x, float y) noexcept { + if (detail::fp::isinf(x) || detail::fp::isinf(y)) + return std::bit_cast(0x7f800000u); + if (detail::fp::isnan(x) || detail::fp::isnan(y)) + return std::bit_cast(0x7fc00000u); + BL_CONSTEXPR_RUNTIME_DISPATCH( static_cast(bl::hypot(static_cast(x), static_cast(y))), std::hypot(x, y) @@ -133,22 +151,73 @@ namespace detail::_f32_runtime ); } +BL_PUSH_PRECISE; +template +[[nodiscard]] BL_FORCE_INLINE constexpr float ipow(float x, Exp y) noexcept +{ + int exponent = 0; + if (detail::fp::try_int_exponent(y, exponent)) + { + const bool negative_base = x < 0.0f; + const float magnitude = negative_base ? -x : x; + float value{}; + + if (magnitude == 2.0f) + { + if (exponent >= std::numeric_limits::max_exponent) + value = std::numeric_limits::infinity(); + else if (exponent < std::numeric_limits::min_exponent - std::numeric_limits::digits) + value = 0.0f; + else + value = static_cast(detail::fp::ldexp(1.0, exponent)); + + return (negative_base && detail::fp::is_odd_integral(y)) ? -value : value; + } + + if (magnitude == 10.0f) + { + value = detail::_f32_impl::pow10(exponent); + return (negative_base && detail::fp::is_odd_integral(y)) ? -value : value; + } + } + + using U = std::make_unsigned_t>; + const U magnitude = detail::fp::unsigned_abs(y); + const float powered = detail::fp::ipow_nonneg_fast(x, magnitude); + + if constexpr (std::signed_integral>) + { + if (y < 0) + return 1.0f / powered; + } + + return powered; +} +BL_POP_PRECISE; // trig [[nodiscard]] BL_FORCE_INLINE constexpr float sin(float x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - static_cast(bl::sin(static_cast(x))), - std::sin(x) - ); + if (bl::detail::is_constant_evaluated()) + return static_cast(bl::sin(static_cast(x))); +#if defined(__MINGW32__) + if (std::fabs(x) >= 0x1p12f) [[unlikely]] + return static_cast( + detail::_f64_runtime::sin_large(static_cast(x))); +#endif + return std::sin(x); } [[nodiscard]] BL_FORCE_INLINE constexpr float cos(float x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - static_cast(bl::cos(static_cast(x))), - std::cos(x) - ); + if (bl::detail::is_constant_evaluated()) + return static_cast(bl::cos(static_cast(x))); +#if defined(__MINGW32__) + if (std::fabs(x) >= 0x1p12f) [[unlikely]] + return static_cast( + detail::_f64_runtime::cos_large(static_cast(x))); +#endif + return std::cos(x); } [[nodiscard]] BL_FORCE_INLINE constexpr bool sincos(float x, float& s_out, float& c_out) noexcept @@ -160,14 +229,22 @@ namespace detail::_f32_runtime [[nodiscard]] BL_FORCE_INLINE constexpr float tan(float x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - static_cast(bl::tan(static_cast(x))), - std::tan(x) - ); + if (bl::detail::is_constant_evaluated()) + return static_cast(bl::tan(static_cast(x))); +#if defined(__MINGW32__) + if (std::fabs(x) >= 0x1p12f) [[unlikely]] + return static_cast( + detail::_f64_runtime::tan_large(static_cast(x))); +#endif + return std::tan(x); } [[nodiscard]] BL_FORCE_INLINE constexpr float atan(float x) noexcept { +#if defined(__EMSCRIPTEN__) + if (!detail::fp::isfinite(x)) [[unlikely]] + return static_cast(bl::atan(static_cast(x))); +#endif BL_CONSTEXPR_RUNTIME_DISPATCH( static_cast(bl::atan(static_cast(x))), std::atan(x) @@ -176,6 +253,11 @@ namespace detail::_f32_runtime [[nodiscard]] BL_FORCE_INLINE constexpr float atan2(float y, float x) noexcept { +#if defined(__EMSCRIPTEN__) + if (!detail::fp::isfinite(x) || !detail::fp::isfinite(y)) [[unlikely]] + return static_cast( + bl::atan2(static_cast(y), static_cast(x))); +#endif BL_CONSTEXPR_RUNTIME_DISPATCH( static_cast(bl::atan2(static_cast(y), static_cast(x))), std::atan2(y, x) @@ -253,10 +335,14 @@ template requires std::same_as, float> [[nodiscard]] BL_FORCE_INLINE constexpr float acosh(float x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - static_cast(bl::acosh(static_cast(x))), - std::acosh(x) - ); + if (bl::detail::is_constant_evaluated()) + return static_cast(bl::acosh(static_cast(x))); +#if defined(__MINGW32__) + if (x < 1.5f) + return static_cast( + detail::_f64_impl::acosh(static_cast(x))); +#endif + return std::acosh(x); } [[nodiscard]] BL_FORCE_INLINE constexpr float atanh(float x) noexcept diff --git a/include/fltx/detail/f64_math_basic.h b/include/fltx/detail/f64_math_basic.h index a694112..183783f 100644 --- a/include/fltx/detail/f64_math_basic.h +++ b/include/fltx/detail/f64_math_basic.h @@ -13,6 +13,8 @@ #define F64_MATH_BASIC_INCLUDED #include "fltx/f64_classification.h" +#include "fltx/detail/common_decimal.h" +#include "fltx/detail/native_float_decimal.h" namespace bl { @@ -27,9 +29,9 @@ namespace detail::_f64_impl using detail::fp::floor; using detail::fp::ceil; using detail::fp::trunc; - using detail::fp::nearbyint_ties_even; - using detail::fp::nearbyint; - using detail::fp::round_half_away_zero; + using detail::fp::round_nearest_even; + using detail::fp::round_nearest_even_value; + using detail::fp::round_nearest_away_from_zero; using detail::fp::nextafter; using detail::fp::copysign; using detail::fp::to_signed_integer_or_zero; @@ -38,9 +40,6 @@ namespace detail::_f64_impl using detail::fp::bit_length_u64; using detail::fp::log; using detail::fp::log1p; - using detail::fp::sin; - using detail::fp::cos; - using detail::fp::tan; using detail::fp::atan; using detail::fp::atan2; using detail::fp::sqrt_seed; @@ -145,60 +144,262 @@ namespace detail::_f64_impl return 0; } - [[nodiscard]] BL_FORCE_INLINE constexpr std::uint64_t rounded_shr_u64(std::uint64_t value, int bits) noexcept + using detail::_native_float_decimal::rounded_shr_u64; + using detail::_native_float_decimal::exact_dyadic_to_double; + using detail::_native_float_decimal::f64_decimal_round_traits; + using detail::_native_float_decimal::exact_decimal_to_native_value; + + inline constexpr int pow10_f64_min_exponent = -323; + inline constexpr int pow10_f64_max_exponent = 308; + inline constexpr std::uint64_t pow10_f64_bits[] = + { + 0x0000000000000002ull, 0x0000000000000014ull, 0x00000000000000caull, 0x00000000000007e8ull, + 0x0000000000004f10ull, 0x00000000000316a2ull, 0x00000000001ee257ull, 0x000000000134d761ull, + 0x000000000c1069cdull, 0x0000000078a42205ull, 0x00000004b6695433ull, 0x0000002f201d49fbull, + 0x000001d74124e3d1ull, 0x000012688b70e62bull, 0x0000b8157268fdafull, 0x000730d67819e8d2ull, + 0x0031fa182c40c60dull, 0x0066789e3750f791ull, 0x009c16c5c5253575ull, 0x00d18e3b9b374169ull, + 0x0105f1ca820511c3ull, 0x013b6e3d22865634ull, 0x017124e63593f5e1ull, 0x01a56e1fc2f8f359ull, + 0x01dac9a7b3b7302full, 0x0210be08d0527e1dull, 0x0244ed8b04671da5ull, 0x027a28edc580e50eull, + 0x02b059949b708f29ull, 0x02e46ff9c24cb2f3ull, 0x03198bf832dfdfb0ull, 0x034feef63f97d79cull, + 0x0383f559e7bee6c1ull, 0x03b8f2b061aea072ull, 0x03ef2f5c7a1a488eull, 0x04237d99cc506d59ull, + 0x04585d003f6488afull, 0x048e74404f3daadbull, 0x04c308a831868ac9ull, 0x04f7cad23de82d7bull, + 0x052dbd86cd6238d9ull, 0x05629674405d6388ull, 0x05973c115074bc6aull, 0x05cd0b15a491eb84ull, + 0x060226ed86db3333ull, 0x0636b0a8e891ffffull, 0x066c5cd322b67fffull, 0x06a1ba03f5b21000ull, + 0x06d62884f31e93ffull, 0x070bb2a62fe638ffull, 0x07414fa7ddefe3a0ull, 0x0775a391d56bdc87ull, + 0x07ab0c764ac6d3a9ull, 0x07e0e7c9eebc444aull, 0x081521bc6a6b555cull, 0x084a6a2b85062ab3ull, + 0x0880825b3323dab0ull, 0x08b4a2f1ffecd15cull, 0x08e9cbae7fe805b3ull, 0x09201f4d0ff10390ull, + 0x0954272053ed4474ull, 0x098930e868e89591ull, 0x09bf7d228322baf5ull, 0x09f3ae3591f5b4d9ull, + 0x0a2899c2f6732210ull, 0x0a5ec033b40fea93ull, 0x0a9338205089f29cull, 0x0ac8062864ac6f43ull, + 0x0afe07b27dd78b14ull, 0x0b32c4cf8ea6b6ecull, 0x0b677603725064a8ull, 0x0b9d53844ee47dd1ull, + 0x0bd25432b14ecea3ull, 0x0c06e93f5da2824cull, 0x0c3ca38f350b22dfull, 0x0c71e6398126f5cbull, + 0x0ca65fc7e170b33eull, 0x0cdbf7b9d9cce00dull, 0x0d117ad428200c08ull, 0x0d45d98932280f0aull, + 0x0d7b4feb7eb212cdull, 0x0db111f32f2f4bc0ull, 0x0de5566ffafb1eb0ull, 0x0e1aac0bf9b9e65cull, + 0x0e50ab877c142ffaull, 0x0e84d6695b193bf8ull, 0x0eba0c03b1df8af6ull, 0x0ef047824f2bb6daull, + 0x0f245962e2f6a490ull, 0x0f596fbb9bb44db4ull, 0x0f8fcbaa82a16121ull, 0x0fc3df4a91a4dcb5ull, + 0x0ff8d71d360e13e2ull, 0x102f0ce4839198dbull, 0x1063680ed23aff89ull, 0x1098421286c9bf6bull, + 0x10ce5297287c2f45ull, 0x1102f39e794d9d8bull, 0x1137b08617a104eeull, 0x116d9ca79d89462aull, + 0x11a281e8c275cbdaull, 0x11d72262f3133ed1ull, 0x120ceafbafd80e85ull, 0x124212dd4de70913ull, + 0x12769794a160cb58ull, 0x12ac3d79c9b8fe2eull, 0x12e1a66c1e139eddull, 0x1316100725988694ull, + 0x134b9408eefea839ull, 0x13813c85955f2923ull, 0x13b58ba6fab6f36cull, 0x13eaee90b964b047ull, + 0x1420d51a73deee2dull, 0x14550a6110d6a9b8ull, 0x148a4cf9550c5426ull, 0x14c0701bd527b498ull, + 0x14f48c22ca71a1bdull, 0x1529af2b7d0e0a2dull, 0x15600d7b2e28c65cull, 0x159410d9f9b2f7f3ull, + 0x15c91510781fb5f0ull, 0x15ff5a549627a36cull, 0x16339874ddd8c623ull, 0x16687e92154ef7acull, + 0x169e9e369aa2b597ull, 0x16d322e220a5b17eull, 0x1707eb9aa8cf1ddeull, 0x173de6815302e556ull, + 0x1772b010d3e1cf56ull, 0x17a75c1508da432bull, 0x17dd331a4b10d3f6ull, 0x18123ff06eea847aull, + 0x1846cfec8aa52598ull, 0x187c83e7ad4e6efeull, 0x18b1d270cc51055full, 0x18e6470cff6546b6ull, + 0x191bd8d03f3e9864ull, 0x1951678227871f3eull, 0x1985c162b168e70eull, 0x19bb31bb5dc320d2ull, + 0x19f0ff151a99f483ull, 0x1a253eda614071a4ull, 0x1a5a8e90f9908e0dull, 0x1a90991a9bfa58c8ull, + 0x1ac4bf6142f8eefaull, 0x1af9ef3993b72ab8ull, 0x1b303583fc527ab3ull, 0x1b6442e4fb671960ull, + 0x1b99539e3a40dfb8ull, 0x1bcfa885c8d117a6ull, 0x1c03c9539d82aec8ull, 0x1c38bba884e35a7aull, + 0x1c6eea92a61c3118ull, 0x1ca3529ba7d19eafull, 0x1cd8274291c6065bull, 0x1d0e3113363787f2ull, + 0x1d42deac01e2b4f7ull, 0x1d779657025b6235ull, 0x1dad7becc2f23ac2ull, 0x1de26d73f9d764b9ull, + 0x1e1708d0f84d3de7ull, 0x1e4ccb0536608d61ull, 0x1e81fee341fc585dull, 0x1eb67e9c127b6e74ull, + 0x1eec1e43171a4a11ull, 0x1f2192e9ee706e4bull, 0x1f55f7a46a0c89ddull, 0x1f8b758d848fac55ull, + 0x1fc1297872d9cbb5ull, 0x1ff573d68f903ea2ull, 0x202ad0cc33744e4bull, 0x2060c27fa028b0efull, + 0x2094f31f8832dd2aull, 0x20ca2fe76a3f9475ull, 0x21005df0a267bcc9ull, 0x2134756ccb01abfbull, + 0x216992c7fdc216faull, 0x219ff779fd329cb9ull, 0x21d3faac3e3fa1f3ull, 0x2208f9574dcf8a70ull, + 0x223f37ad21436d0cull, 0x227382cc34ca2428ull, 0x22a8637f41fcad32ull, 0x22de7c5f127bd87eull, + 0x23130dbb6b8d674full, 0x2347d12a4670c123ull, 0x237dc574d80cf16bull, 0x23b29b69070816e3ull, + 0x23e7424348ca1c9cull, 0x241d12d41afca3c3ull, 0x24522bc490dde65aull, 0x2486b6b5b5155ff0ull, + 0x24bc6463225ab7ecull, 0x24f1bebdf578b2f4ull, 0x25262e6d72d6dfb0ull, 0x255bba08cf8c979dull, + 0x2591544581b7dec2ull, 0x25c5a956e225d672ull, 0x25fb13ac9aaf4c0full, 0x2630ec4be0ad8f89ull, + 0x2665275ed8d8f36cull, 0x269a71368f0f3047ull, 0x26d086c219697e2cull, 0x2704a8729fc3ddb7ull, + 0x2739d28f47b4d525ull, 0x277023998cd10537ull, 0x27a42c7ff0054685ull, 0x27d9379fec069826ull, + 0x280f8587e7083e30ull, 0x2843b374f06526deull, 0x2878a0522c7e7095ull, 0x28aec866b79e0cbaull, + 0x28e33d4032c2c7f5ull, 0x29180c903f7379f2ull, 0x294e0fb44f50586eull, 0x2982c9d0b1923745ull, + 0x29b77c44ddf6c516ull, 0x29ed5b561574765bull, 0x2a225915cd68c9f9ull, 0x2a56ef5b40c2fc77ull, + 0x2a8cab3210f3bb95ull, 0x2ac1eaff4a98553dull, 0x2af665bf1d3e6a8dull, 0x2b2bff2ee48e0530ull, + 0x2b617f7d4ed8c33eull, 0x2b95df5ca28ef40dull, 0x2bcb5733cb32b111ull, 0x2c0116805effaeaaull, + 0x2c355c2076bf9a55ull, 0x2c6ab328946f80eaull, 0x2ca0aff95cc5b092ull, 0x2cd4dbf7b3f71cb7ull, + 0x2d0a12f5a0f4e3e5ull, 0x2d404bd984990e6full, 0x2d745ecfe5bf520bull, 0x2da97683df2f268dull, + 0x2ddfd424d6faf031ull, 0x2e13e497065cd61full, 0x2e48ddbcc7f40ba6ull, 0x2e7f152bf9f10e90ull, + 0x2eb36d3b7c36a91aull, 0x2ee8488a5b445360ull, 0x2f1e5aacf2156838ull, 0x2f52f8ac174d6123ull, + 0x2f87b6d71d20b96cull, 0x2fbda48ce468e7c7ull, 0x2ff286d80ec190dcull, 0x3027288e1271f513ull, + 0x305cf2b1970e7258ull, 0x309217aefe690777ull, 0x30c69d9abe034955ull, 0x30fc45016d841baaull, + 0x3131ab20e472914aull, 0x316615e91d8f359dull, 0x319b9b6364f30304ull, 0x31d1411e1f17e1e3ull, + 0x32059165a6ddda5bull, 0x323af5bf109550f2ull, 0x3270d9976a5d5297ull, 0x32a50ffd44f4a73dull, + 0x32da53fc9631d10dull, 0x3310747ddddf22a8ull, 0x3344919d5556eb52ull, 0x3379b604aaaca626ull, + 0x33b011c2eaabe7d8ull, 0x33e41633a556e1ceull, 0x34191bc08eac9a41ull, 0x344f62b0b257c0d2ull, + 0x34839dae6f76d883ull, 0x34b8851a0b548ea4ull, 0x34eea6608e29b24dull, 0x352327fc58da0f70ull, + 0x3557f1fb6f10934cull, 0x358dee7a4ad4b81full, 0x35c2b50c6ec4f313ull, 0x35f7624f8a762fd8ull, + 0x362d3ae36d13bbceull, 0x366244ce242c5561ull, 0x3696d601ad376ab9ull, 0x36cc8b8218854567ull, + 0x3701d7314f534b61ull, 0x37364cfda3281e39ull, 0x376be03d0bf225c7ull, 0x37a16c262777579cull, + 0x37d5c72fb1552d83ull, 0x380b38fb9daa78e4ull, 0x3841039d428a8b8full, 0x38754484932d2e72ull, + 0x38aa95a5b7f87a0full, 0x38e09d8792fb4c49ull, 0x3914c4e977ba1f5cull, 0x3949f623d5a8a733ull, + 0x398039d665896880ull, 0x39b4484bfeebc2a0ull, 0x39e95a5efea6b347ull, 0x3a1fb0f6be506019ull, + 0x3a53ce9a36f23c10ull, 0x3a88c240c4aecb14ull, 0x3abef2d0f5da7dd9ull, 0x3af357c299a88ea7ull, + 0x3b282db34012b251ull, 0x3b5e392010175ee6ull, 0x3b92e3b40a0e9b4full, 0x3bc79ca10c924223ull, + 0x3bfd83c94fb6d2acull, 0x3c32725dd1d243acull, 0x3c670ef54646d497ull, 0x3c9cd2b297d889bcull, + 0x3cd203af9ee75616ull, 0x3d06849b86a12b9bull, 0x3d3c25c268497682ull, 0x3d719799812dea11ull, + 0x3da5fd7fe1796495ull, 0x3ddb7cdfd9d7bdbbull, 0x3e112e0be826d695ull, 0x3e45798ee2308c3aull, + 0x3e7ad7f29abcaf48ull, 0x3eb0c6f7a0b5ed8dull, 0x3ee4f8b588e368f1ull, 0x3f1a36e2eb1c432dull, + 0x3f50624dd2f1a9fcull, 0x3f847ae147ae147bull, 0x3fb999999999999aull, 0x3ff0000000000000ull, + 0x4024000000000000ull, 0x4059000000000000ull, 0x408f400000000000ull, 0x40c3880000000000ull, + 0x40f86a0000000000ull, 0x412e848000000000ull, 0x416312d000000000ull, 0x4197d78400000000ull, + 0x41cdcd6500000000ull, 0x4202a05f20000000ull, 0x42374876e8000000ull, 0x426d1a94a2000000ull, + 0x42a2309ce5400000ull, 0x42d6bcc41e900000ull, 0x430c6bf526340000ull, 0x4341c37937e08000ull, + 0x4376345785d8a000ull, 0x43abc16d674ec800ull, 0x43e158e460913d00ull, 0x4415af1d78b58c40ull, + 0x444b1ae4d6e2ef50ull, 0x4480f0cf064dd592ull, 0x44b52d02c7e14af6ull, 0x44ea784379d99db4ull, + 0x45208b2a2c280291ull, 0x4554adf4b7320335ull, 0x4589d971e4fe8402ull, 0x45c027e72f1f1281ull, + 0x45f431e0fae6d721ull, 0x46293e5939a08ceaull, 0x465f8def8808b024ull, 0x4693b8b5b5056e17ull, + 0x46c8a6e32246c99cull, 0x46fed09bead87c03ull, 0x4733426172c74d82ull, 0x476812f9cf7920e3ull, + 0x479e17b84357691bull, 0x47d2ced32a16a1b1ull, 0x48078287f49c4a1dull, 0x483d6329f1c35ca5ull, + 0x48725dfa371a19e7ull, 0x48a6f578c4e0a061ull, 0x48dcb2d6f618c879ull, 0x4911efc659cf7d4cull, + 0x49466bb7f0435c9eull, 0x497c06a5ec5433c6ull, 0x49b18427b3b4a05cull, 0x49e5e531a0a1c873ull, + 0x4a1b5e7e08ca3a8full, 0x4a511b0ec57e649aull, 0x4a8561d276ddfdc0ull, 0x4ababa4714957d30ull, + 0x4af0b46c6cdd6e3eull, 0x4b24e1878814c9ceull, 0x4b5a19e96a19fc41ull, 0x4b905031e2503da9ull, + 0x4bc4643e5ae44d13ull, 0x4bf97d4df19d6057ull, 0x4c2fdca16e04b86dull, 0x4c63e9e4e4c2f344ull, + 0x4c98e45e1df3b015ull, 0x4ccf1d75a5709c1bull, 0x4d03726987666191ull, 0x4d384f03e93ff9f5ull, + 0x4d6e62c4e38ff872ull, 0x4da2fdbb0e39fb47ull, 0x4dd7bd29d1c87a19ull, 0x4e0dac74463a989full, + 0x4e428bc8abe49f64ull, 0x4e772ebad6ddc73dull, 0x4eacfa698c95390cull, 0x4ee21c81f7dd43a7ull, + 0x4f16a3a275d49491ull, 0x4f4c4c8b1349b9b5ull, 0x4f81afd6ec0e1411ull, 0x4fb61bcca7119916ull, + 0x4feba2bfd0d5ff5bull, 0x502145b7e285bf99ull, 0x50559725db272f7full, 0x508afcef51f0fb5full, + 0x50c0de1593369d1bull, 0x50f5159af8044462ull, 0x512a5b01b605557bull, 0x516078e111c3556dull, + 0x5194971956342ac8ull, 0x51c9bcdfabc1357aull, 0x5200160bcb58c16cull, 0x52341b8ebe2ef1c7ull, + 0x526922726dbaae39ull, 0x529f6b0f092959c7ull, 0x52d3a2e965b9d81dull, 0x53088ba3bf284e24ull, + 0x533eae8caef261adull, 0x53732d17ed577d0cull, 0x53a7f85de8ad5c4full, 0x53ddf67562d8b363ull, + 0x5412ba095dc7701eull, 0x5447688bb5394c25ull, 0x547d42aea2879f2eull, 0x54b249ad2594c37dull, + 0x54e6dc186ef9f45cull, 0x551c931e8ab87173ull, 0x5551dbf316b346e8ull, 0x558652efdc6018a2ull, + 0x55bbe7abd3781ecaull, 0x55f170cb642b133full, 0x5625ccfe3d35d80eull, 0x565b403dcc834e12ull, + 0x569108269fd210cbull, 0x56c54a3047c694feull, 0x56fa9cbc59b83a3dull, 0x5730a1f5b8132466ull, + 0x5764ca732617ed80ull, 0x5799fd0fef9de8e0ull, 0x57d03e29f5c2b18cull, 0x58044db473335defull, + 0x583961219000356bull, 0x586fb969f40042c5ull, 0x58a3d3e2388029bbull, 0x58d8c8dac6a0342aull, + 0x590efb1178484135ull, 0x59435ceaeb2d28c1ull, 0x59783425a5f872f1ull, 0x59ae412f0f768fadull, + 0x59e2e8bd69aa19ccull, 0x5a17a2ecc414a03full, 0x5a4d8ba7f519c84full, 0x5a827748f9301d32ull, + 0x5ab7151b377c247eull, 0x5aecda62055b2d9eull, 0x5b22087d4358fc82ull, 0x5b568a9c942f3ba3ull, + 0x5b8c2d43b93b0a8cull, 0x5bc19c4a53c4e697ull, 0x5bf6035ce8b6203dull, 0x5c2b843422e3a84dull, + 0x5c6132a095ce4930ull, 0x5c957f48bb41db7cull, 0x5ccadf1aea12525bull, 0x5d00cb70d24b7379ull, + 0x5d34fe4d06de5057ull, 0x5d6a3de04895e46dull, 0x5da066ac2d5daec4ull, 0x5dd4805738b51a75ull, + 0x5e09a06d06e26112ull, 0x5e400444244d7cabull, 0x5e7405552d60dbd6ull, 0x5ea906aa78b912ccull, + 0x5edf485516e7577full, 0x5f138d352e5096afull, 0x5f48708279e4bc5bull, 0x5f7e8ca3185deb72ull, + 0x5fb317e5ef3ab327ull, 0x5fe7dddf6b095ff1ull, 0x601dd55745cbb7edull, 0x6052a5568b9f52f4ull, + 0x60874eac2e8727b1ull, 0x60bd22573a28f19dull, 0x60f2357684599702ull, 0x6126c2d4256ffcc3ull, + 0x615c73892ecbfbf4ull, 0x6191c835bd3f7d78ull, 0x61c63a432c8f5cd6ull, 0x61fbc8d3f7b3340cull, + 0x62315d847ad00087ull, 0x6265b4e5998400a9ull, 0x629b221effe500d4ull, 0x62d0f5535fef2084ull, + 0x630532a837eae8a5ull, 0x633a7f5245e5a2cfull, 0x63708f936baf85c1ull, 0x63a4b378469b6732ull, + 0x63d9e056584240feull, 0x64102c35f729689full, 0x6444374374f3c2c6ull, 0x647945145230b378ull, + 0x64af965966bce056ull, 0x64e3bdf7e0360c36ull, 0x6518ad75d8438f43ull, 0x654ed8d34e547314ull, + 0x6583478410f4c7ecull, 0x65b819651531f9e8ull, 0x65ee1fbe5a7e7861ull, 0x6622d3d6f88f0b3dull, + 0x665788ccb6b2ce0cull, 0x668d6affe45f818full, 0x66c262dfeebbb0f9ull, 0x66f6fb97ea6a9d38ull, + 0x672cba7de5054486ull, 0x6761f48eaf234ad4ull, 0x679671b25aec1d89ull, 0x67cc0e1ef1a724ebull, + 0x680188d357087713ull, 0x6835eb082cca94d7ull, 0x686b65ca37fd3a0dull, 0x68a11f9e62fe4448ull, + 0x68d56785fbbdd55aull, 0x690ac1677aad4ab1ull, 0x6940b8e0acac4eafull, 0x6974e718d7d7625aull, + 0x69aa20df0dcd3af1ull, 0x69e0548b68a044d6ull, 0x6a1469ae42c8560cull, 0x6a498419d37a6b8full, + 0x6a7fe52048590673ull, 0x6ab3ef342d37a408ull, 0x6ae8eb0138858d0aull, 0x6b1f25c186a6f04cull, + 0x6b537798f4285630ull, 0x6b88557f31326bbbull, 0x6bbe6adefd7f06aaull, 0x6bf302cb5e6f642aull, + 0x6c27c37e360b3d35ull, 0x6c5db45dc38e0c82ull, 0x6c9290ba9a38c7d1ull, 0x6cc734e940c6f9c6ull, + 0x6cfd022390f8b837ull, 0x6d3221563a9b7323ull, 0x6d66a9abc9424febull, 0x6d9c5416bb92e3e6ull, + 0x6dd1b48e353bce70ull, 0x6e0621b1c28ac20cull, 0x6e3baa1e332d728full, 0x6e714a52dffc6799ull, + 0x6ea59ce797fb817full, 0x6edb04217dfa61dfull, 0x6f10e294eebc7d2cull, 0x6f451b3a2a6b9c76ull, + 0x6f7a6208b5068394ull, 0x6fb07d457124123dull, 0x6fe49c96cd6d16ccull, 0x7019c3bc80c85c7full, + 0x70501a55d07d39cfull, 0x708420eb449c8843ull, 0x70b9292615c3aa54ull, 0x70ef736f9b3494e9ull, + 0x7123a825c100dd11ull, 0x7158922f31411456ull, 0x718eb6bafd91596bull, 0x71c33234de7ad7e3ull, + 0x71f7fec216198ddcull, 0x722dfe729b9ff153ull, 0x7262bf07a143f6d4ull, 0x72976ec98994f489ull, + 0x72cd4a7bebfa31abull, 0x73024e8d737c5f0bull, 0x7336e230d05b76cdull, 0x736c9abd04725481ull, + 0x73a1e0b622c774d0ull, 0x73d658e3ab795204ull, 0x740bef1c9657a686ull, 0x74417571ddf6c814ull, + 0x7475d2ce55747a18ull, 0x74ab4781ead1989eull, 0x74e10cb132c2ff63ull, 0x75154fdd7f73bf3cull, + 0x754aa3d4df50af0bull, 0x7580a6650b926d67ull, 0x75b4cffe4e7708c0ull, 0x75ea03fde214caf1ull, + 0x7620427ead4cfed6ull, 0x7654531e58a03e8cull, 0x768967e5eec84e2full, 0x76bfc1df6a7a61bbull, + 0x76f3d92ba28c7d15ull, 0x7728cf768b2f9c5aull, 0x775f03542dfb8370ull, 0x779362149cbd3226ull, + 0x77c83a99c3ec7eb0ull, 0x77fe494034e79e5cull, 0x7832edc82110c2f9ull, 0x7867a93a2954f3b8ull, + 0x789d9388b3aa30a5ull, 0x78d27c35704a5e67ull, 0x79071b42cc5cf601ull, 0x793ce2137f743382ull, + 0x79720d4c2fa8a031ull, 0x79a6909f3b92c83dull, 0x79dc34c70a777a4dull, 0x7a11a0fc668aac70ull, + 0x7a46093b802d578cull, 0x7a7b8b8a6038ad6full, 0x7ab137367c236c65ull, 0x7ae585041b2c477full, + 0x7b1ae64521f7595eull, 0x7b50cfeb353a97dbull, 0x7b8503e602893dd2ull, 0x7bba44df832b8d46ull, + 0x7bf06b0bb1fb384cull, 0x7c2485ce9e7a065full, 0x7c59a742461887f6ull, 0x7c9008896bcf54faull, + 0x7cc40aabc6c32a38ull, 0x7cf90d56b873f4c7ull, 0x7d2f50ac6690f1f8ull, 0x7d63926bc01a973bull, + 0x7d987706b0213d0aull, 0x7dce94c85c298c4cull, 0x7e031cfd3999f7b0ull, 0x7e37e43c8800759cull, + 0x7e6ddd4baa009303ull, 0x7ea2aa4f4a405be2ull, 0x7ed754e31cd072daull, 0x7f0d2a1be4048f90ull, + 0x7f423a516e82d9baull, 0x7f76c8e5ca239029ull, 0x7fac7b1f3cac7433ull, 0x7fe1ccf385ebc8a0ull + }; + + [[nodiscard]] BL_FORCE_INLINE constexpr double pow10(int exponent) noexcept { - if (bits <= 0) - return value; - - const bool round_bit = bits <= 64 && ((value >> (bits - 1)) & 1u) != 0; - const bool sticky = bits > 1 - ? (bits < 64 ? (value & ((std::uint64_t{ 1 } << (bits - 1)) - 1u)) != 0 : (value << 1) != 0) - : false; - const std::uint64_t shifted = bits >= 64 ? 0 : (value >> bits); - return shifted + (round_bit && (sticky || (shifted & 1u) != 0) ? 1u : 0u); + if (exponent > pow10_f64_max_exponent) + return std::numeric_limits::infinity(); + if (exponent < pow10_f64_min_exponent) + return 0.0; + + return std::bit_cast(pow10_f64_bits[exponent - pow10_f64_min_exponent]); } - [[nodiscard]] BL_FORCE_INLINE constexpr double exact_dyadic_to_double(std::uint64_t coeff, int exp2, bool neg) noexcept + template + [[nodiscard]] BL_FORCE_INLINE constexpr typename Traits::value_type round_decimals_native( + typename Traits::value_type v, + int prec) noexcept { - const std::uint64_t sign = neg ? (std::uint64_t{ 1 } << 63) : 0; - if (coeff == 0) - return std::bit_cast(sign); + constexpr int local_capacity = std::numeric_limits::max_digits10; + + if (prec <= 0) + return v; + if (prec > local_capacity) + prec = local_capacity; + if (!Traits::isfinite(v) || v == Traits::zero(false)) + return v; + + using detail::exact_decimal::biguint; + + const bool neg = Traits::signbit(v); + const double ax = static_cast(Traits::abs(v)); + + int exponent = 0; + bool ignored_neg = false; + const std::uint64_t mantissa = detail::exact_decimal::decompose_double_mantissa(ax, exponent, ignored_neg); + if (mantissa == 0) + return v; + + biguint num{ mantissa }; + biguint den{ 1 }; + if (exponent >= 0) + num.shl_bits(exponent); + else + den.shl_bits(-exponent); - const int top_bit = bit_length_u64(coeff) - 1; - int unbiased_exp = exp2 + top_bit; - if (unbiased_exp > 1023) - return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); + for (int i = 0; i < prec; ++i) + num.mul_small(10); - if (unbiased_exp < -1022) + biguint q; + biguint r; + detail::exact_decimal::divmod_bitwise(num, den, q, r); + if (!r.is_zero()) { - const int scale = exp2 + 1074; - const std::uint64_t subnormal = scale >= 0 - ? (scale >= 64 ? 0 : (coeff << scale)) - : rounded_shr_u64(coeff, -scale); - - if (subnormal == 0) - return std::bit_cast(sign); - if (subnormal >= (std::uint64_t{ 1 } << 52)) - return std::bit_cast(sign | (std::uint64_t{ 1 } << 52)); - return std::bit_cast(sign | subnormal); + biguint twice_r = r; + twice_r.shl1(); + const int cmp = detail::exact_decimal::compare(twice_r, den); + if (cmp > 0 || (cmp == 0 && q.is_odd())) + q.add_small(1); } - const int shift = top_bit - 52; - std::uint64_t significand = shift > 0 - ? rounded_shr_u64(coeff, shift) - : (coeff << -shift); + return exact_decimal_to_native_value(q, -prec, neg); + } - if (bit_length_u64(significand) > 53) - { - significand >>= 1; - ++unbiased_exp; - if (unbiased_exp > 1023) - return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); - } + [[nodiscard]] BL_FORCE_INLINE constexpr double round_decimals(double v, int prec) noexcept + { + return round_decimals_native(v, prec); + } - const std::uint64_t exp_bits = static_cast(unbiased_exp + 1023); - const std::uint64_t frac_bits = significand & ((std::uint64_t{ 1 } << 52) - 1u); - return std::bit_cast(sign | (exp_bits << 52) | frac_bits); + template + [[nodiscard]] BL_FORCE_INLINE constexpr typename Traits::value_type round_significant_native( + typename Traits::value_type v, + int figures) noexcept + { + if (figures <= 0 || !Traits::isfinite(v) || v == Traits::zero(false)) + return v; + if (figures > std::numeric_limits::max_digits10) + figures = std::numeric_limits::max_digits10; + + detail::exact_decimal::biguint coefficient; + int exp10 = 0; + const bool neg = Traits::signbit(v); + if (!detail::exact_decimal::exact_significant_decimal(Traits::abs(v), figures, coefficient, exp10)) + return v; + + return exact_decimal_to_native_value(coefficient, exp10 - (figures - 1), neg); + } + + [[nodiscard]] BL_FORCE_INLINE constexpr double round_significant(double v, int figures) noexcept + { + return round_significant_native(v, figures); } [[nodiscard]] BL_FORCE_INLINE constexpr dyadic_u64 subtract_scaled_u64(std::uint64_t a, int a_exp2, std::uint64_t b, int b_exp2) noexcept @@ -337,6 +538,26 @@ namespace detail::_f64_impl return a; } + [[nodiscard]] BL_FORCE_INLINE constexpr double fma(double x, double y, double z) noexcept + { + const double direct_product = x * y; + if (!isfinite(x) || !isfinite(y) || !isfinite(z) || !isfinite(direct_product)) [[unlikely]] + return direct_product + z; + + double product{}; + double product_error{}; + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + detail::fp::two_prod_precise_dekker_range_safe(x, y, product, product_error); + #else + detail::fp::two_prod_precise_dekker(x, y, product, product_error); + #endif + + double sum{}; + double sum_error{}; + detail::fp::two_sum_precise(product, z, sum, sum_error); + return sum + (product_error + sum_error); + } + [[nodiscard]] BL_FORCE_INLINE constexpr double frexp(double x, int* exp) noexcept { if (exp) @@ -366,17 +587,29 @@ namespace detail::_f64_impl return m; } + BL_PUSH_PRECISE; [[nodiscard]] BL_FORCE_INLINE constexpr double modf(double x, double* iptr) noexcept { + if (isnan(x) || isinf(x) || iszero(x)) + { + if (iptr) + *iptr = x; + return isinf(x) ? detail::fp::copysign(0.0, x) : x; + } + const double i = trunc(x); if (iptr) *iptr = i; + if (isinf(x)) + return signbit(x) ? -0.0 : 0.0; + double frac = x - i; if (iszero(frac)) frac = signbit(x) ? -0.0 : 0.0; return frac; } + BL_POP_PRECISE; } // namespace detail::_f64_impl @@ -406,58 +639,36 @@ namespace detail::_f64_impl [[nodiscard]] BL_FORCE_INLINE constexpr double round(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::round_half_away_zero(x), - std::round(x) - ); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr double nearbyint(double x) noexcept -{ - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::nearbyint(x), - std::nearbyint(x) - ); + return detail::_f64_impl::round_nearest_away_from_zero(x); } -[[nodiscard]] BL_FORCE_INLINE constexpr double rint(double x) noexcept +[[nodiscard]] BL_FORCE_INLINE constexpr double roundeven(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::nearbyint(x), - std::rint(x) - ); + return detail::_f64_impl::round_nearest_even(x); } -[[nodiscard]] BL_FORCE_INLINE constexpr long lround(double x) noexcept +[[nodiscard]] BL_FORCE_INLINE constexpr double round_decimals(double x, int precision) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::to_signed_integer_or_zero(detail::_f64_impl::round_half_away_zero(x)), - std::lround(x) - ); + return detail::_f64_impl::round_decimals(x, precision); } -[[nodiscard]] BL_FORCE_INLINE constexpr long long llround(double x) noexcept +[[nodiscard]] BL_FORCE_INLINE constexpr double round_significant( + double x, + int precision) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::to_signed_integer_or_zero(detail::_f64_impl::round_half_away_zero(x)), - std::llround(x) - ); + return detail::_f64_impl::round_significant(x, precision); } -[[nodiscard]] BL_FORCE_INLINE constexpr long lrint(double x) noexcept +[[nodiscard]] BL_FORCE_INLINE constexpr long lround(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::to_signed_integer_or_zero(detail::_f64_impl::nearbyint(x)), - std::lrint(x) - ); + return detail::_f64_impl::to_signed_integer_or_zero( + detail::_f64_impl::round_nearest_away_from_zero(x)); } -[[nodiscard]] BL_FORCE_INLINE constexpr long long llrint(double x) noexcept +[[nodiscard]] BL_FORCE_INLINE constexpr long long llround(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::to_signed_integer_or_zero(detail::_f64_impl::nearbyint(x)), - std::llrint(x) - ); + return detail::_f64_impl::to_signed_integer_or_zero( + detail::_f64_impl::round_nearest_away_from_zero(x)); } [[nodiscard]] BL_FORCE_INLINE constexpr double fmod(double x, double y) noexcept @@ -487,11 +698,16 @@ namespace detail::_f64_impl [[nodiscard]] BL_FORCE_INLINE constexpr double fma(double x, double y, double z) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( - x * y + z, - std::fma(x, y, z) + detail::_f64_impl::fma(x, y, z), + detail::fp::fmadd_auto(x, y, z) ); } +[[nodiscard]] BL_FORCE_INLINE constexpr double recip(double x) noexcept +{ + return 1.0 / x; +} + [[nodiscard]] BL_FORCE_INLINE constexpr double fmin(double a, double b) noexcept { BL_CONSTEXPR_RUNTIME_DISPATCH( @@ -510,10 +726,20 @@ namespace detail::_f64_impl [[nodiscard]] BL_FORCE_INLINE constexpr double fdim(double x, double y) noexcept { +#if defined(__EMSCRIPTEN__) + // Emscripten's libm fdim does not reliably propagate NaNs. The scalar + // definition is both cheaper than a call and preserves the C contract. + return (detail::fp::isnan(x) || detail::fp::isnan(y)) + ? std::numeric_limits::quiet_NaN() + : ((x > y) ? (x - y) : 0.0); +#else BL_CONSTEXPR_RUNTIME_DISPATCH( - (x > y) ? (x - y) : 0.0, + (isnan(x) || isnan(y)) + ? std::numeric_limits::quiet_NaN() + : ((x > y) ? (x - y) : 0.0), std::fdim(x, y) ); +#endif } [[nodiscard]] BL_FORCE_INLINE constexpr double copysign(double x, double y) noexcept @@ -552,10 +778,7 @@ namespace detail::_f64_impl [[nodiscard]] BL_FORCE_INLINE constexpr double modf(double x, double* iptr) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::modf(x, iptr), - std::modf(x, iptr) - ); + return detail::_f64_impl::modf(x, iptr); } [[nodiscard]] BL_FORCE_INLINE constexpr int ilogb(double x) noexcept diff --git a/include/fltx/detail/f64_math_transcendental.h b/include/fltx/detail/f64_math_transcendental.h index 6292413..a27dc44 100644 --- a/include/fltx/detail/f64_math_transcendental.h +++ b/include/fltx/detail/f64_math_transcendental.h @@ -13,12 +13,277 @@ #define F64_MATH_TRANSCENDENTAL_INCLUDED #include "fltx/detail/f64_math_basic.h" +#include "fltx/detail/trig_reduce_consts.h" +#include "fltx/traits.h" namespace bl { +namespace detail::_f64_runtime +{ + BL_NO_INLINE double sin_large(double x) noexcept; + BL_NO_INLINE double cos_large(double x) noexcept; + BL_NO_INLINE double tan_large(double x) noexcept; +} + namespace detail::_f64_impl { + struct native_trig_product + { + static constexpr int table_word_count = static_cast( + sizeof(detail::trig_reduce::two_over_pi_fixed_words) / + sizeof(detail::trig_reduce::two_over_pi_fixed_words[0])); + static constexpr int word_count = table_word_count + 2; + std::uint32_t words[word_count]{}; + + constexpr explicit native_trig_product(std::uint64_t significand) noexcept + { + const std::uint32_t factors[] = { + static_cast(significand), + static_cast(significand >> 32) + }; + for (int factor_index = 0; factor_index < 2; ++factor_index) + { + const std::uint32_t factor = factors[factor_index]; + std::uint64_t carry = 0; + for (int i = 0; i < table_word_count; ++i) + { + const int out_index = i + factor_index; + const std::uint64_t value = + static_cast( + detail::trig_reduce::two_over_pi_fixed_words[i]) * factor + + words[out_index] + carry; + words[out_index] = static_cast(value); + carry = value >> 32; + } + words[table_word_count + factor_index] = + static_cast(carry); + } + } + + [[nodiscard]] constexpr bool get_bit(int index) const noexcept + { + if (index < 0 || index >= word_count * 32) + return false; + return ((words[index >> 5] >> (index & 31)) & 1u) != 0; + } + + [[nodiscard]] constexpr bool any_low_bits_set(int bit_count) const noexcept + { + if (bit_count <= 0) + return false; + const int complete_words = bit_count >> 5; + for (int i = 0; i < complete_words; ++i) + { + if (words[i] != 0) + return true; + } + const int partial_bits = bit_count & 31; + return partial_bits != 0 && + (words[complete_words] & ((std::uint32_t{ 1 } << partial_bits) - 1u)) != 0; + } + + [[nodiscard]] constexpr std::uint64_t get_bits(int start, int count) const noexcept + { + std::uint64_t value = 0; + for (int i = 0; i < count; ++i) + { + if (get_bit(start + i)) + value |= std::uint64_t{ 1 } << i; + } + return value; + } + + [[nodiscard]] constexpr int bit_length() const noexcept + { + for (int i = word_count; i-- > 0;) + { + if (words[i] != 0) + return i * 32 + static_cast(std::bit_width(words[i])); + } + return 0; + } + + constexpr void keep_low_bits(int bit_count) noexcept + { + const int retained_words = (bit_count + 31) >> 5; + for (int i = retained_words; i < word_count; ++i) + words[i] = 0; + const int partial_bits = bit_count & 31; + if (partial_bits != 0) + { + words[retained_words - 1] &= + (std::uint32_t{ 1 } << partial_bits) - 1u; + } + } + + constexpr void negate_low_bits(int bit_count) noexcept + { + keep_low_bits(bit_count); + const int retained_words = (bit_count + 31) >> 5; + for (int i = 0; i < retained_words; ++i) + words[i] = ~words[i]; + + const int partial_bits = bit_count & 31; + if (partial_bits != 0) + { + words[retained_words - 1] &= + (std::uint32_t{ 1 } << partial_bits) - 1u; + } + + std::uint64_t carry = 1; + for (int i = 0; i < retained_words && carry != 0; ++i) + { + const std::uint64_t value = + static_cast(words[i]) + carry; + words[i] = static_cast(value); + carry = value >> 32; + } + if (partial_bits != 0) + { + words[retained_words - 1] &= + (std::uint32_t{ 1 } << partial_bits) - 1u; + } + } + }; + + [[nodiscard]] BL_MSVC_NOINLINE constexpr double rounded_dyadic_to_double( + const native_trig_product& coefficient, + int exponent, + bool negative) noexcept + { + const int bit_count = coefficient.bit_length(); + if (bit_count == 0) + return negative ? -0.0 : 0.0; + + const int shift = bit_count > 53 ? bit_count - 53 : 0; + std::uint64_t significand = coefficient.get_bits(shift, bit_count - shift); + if (shift > 0) + { + const bool round_bit = coefficient.get_bit(shift - 1); + const bool sticky = shift > 1 && + coefficient.any_low_bits_set(shift - 1); + if (round_bit && (sticky || (significand & 1u) != 0)) + ++significand; + } + + return detail::_native_float_decimal::exact_dyadic_to_double( + significand, + exponent + shift, + negative); + } + + BL_MSVC_NOINLINE constexpr void reduce_pi_over_2_exact( + double x, + int& quadrant, + double& remainder) noexcept + { + constexpr std::uint64_t fraction_mask = (std::uint64_t{ 1 } << 52) - 1u; + const std::uint64_t bits = std::bit_cast(detail::fp::absd(x)); + const unsigned raw_exponent = static_cast((bits >> 52) & 0x7ffu); + const std::uint64_t significand = raw_exponent == 0 + ? (bits & fraction_mask) + : ((std::uint64_t{ 1 } << 52) | (bits & fraction_mask)); + const int binary_exponent = raw_exponent == 0 + ? -1074 + : static_cast(raw_exponent) - 1023 - 52; + + native_trig_product product{ significand }; + const int scale_bits = detail::trig_reduce::two_over_pi_fixed_bits - binary_exponent; + + const bool half_bit = product.get_bit(scale_bits - 1); + const bool sticky = product.any_low_bits_set(scale_bits - 1); + const bool integer_odd = product.get_bit(scale_bits); + const bool round_up = half_bit && (sticky || integer_odd); + + unsigned n_mod4 = + (product.get_bit(scale_bits) ? 1u : 0u) | + (product.get_bit(scale_bits + 1) ? 2u : 0u); + if (round_up) + n_mod4 = (n_mod4 + 1u) & 3u; + + native_trig_product reduced_coefficient = product; + reduced_coefficient.keep_low_bits(scale_bits); + bool reduced_negative = false; + if (round_up) + { + reduced_coefficient.negate_low_bits(scale_bits); + reduced_negative = reduced_coefficient.bit_length() != 0; + } + + const double reduced = rounded_dyadic_to_double( + reduced_coefficient, + -scale_bits, + reduced_negative); + remainder = reduced * pi_2; + + if (signbit(x)) + { + remainder = -remainder; + n_mod4 = (4u - n_mod4) & 3u; + } + quadrant = static_cast(n_mod4); + } + + BL_MSVC_NOINLINE constexpr double sin(double x) noexcept + { + if (isnan(x) || isinf(x)) + return std::numeric_limits::quiet_NaN(); + if (x == 0.0) + return x; + if (abs(x) < 0x1p18) + return detail::fp::sin(x); + + int quadrant = 0; + double reduced = 0.0; + reduce_pi_over_2_exact(x, quadrant, reduced); + switch (quadrant) + { + case 0: return detail::fp::sin_poly_reduced(reduced); + case 1: return detail::fp::cos_poly_reduced(reduced); + case 2: return -detail::fp::sin_poly_reduced(reduced); + default: return -detail::fp::cos_poly_reduced(reduced); + } + } + + BL_MSVC_NOINLINE constexpr double cos(double x) noexcept + { + if (isnan(x) || isinf(x)) + return std::numeric_limits::quiet_NaN(); + if (abs(x) < 0x1p18) + return detail::fp::cos(x); + + int quadrant = 0; + double reduced = 0.0; + reduce_pi_over_2_exact(x, quadrant, reduced); + switch (quadrant) + { + case 0: return detail::fp::cos_poly_reduced(reduced); + case 1: return -detail::fp::sin_poly_reduced(reduced); + case 2: return -detail::fp::cos_poly_reduced(reduced); + default: return detail::fp::sin_poly_reduced(reduced); + } + } + + BL_MSVC_NOINLINE constexpr double tan(double x) noexcept + { + if (abs(x) < 0x1p18) + return detail::fp::tan(x); + + if (isnan(x) || isinf(x)) + return std::numeric_limits::quiet_NaN(); + + int quadrant = 0; + double reduced = 0.0; + reduce_pi_over_2_exact(x, quadrant, reduced); + const double reduced_sine = detail::fp::sin_poly_reduced(reduced); + const double reduced_cosine = detail::fp::cos_poly_reduced(reduced); + const bool swap = (quadrant & 1) != 0; + const double sine = swap ? reduced_cosine : reduced_sine; + const double cosine = swap ? -reduced_sine : reduced_cosine; + return sine / cosine; + } + // exp / log BL_FORCE_INLINE constexpr double exp(double x) noexcept { @@ -99,7 +364,7 @@ namespace detail::_f64_impl if (isinf(x)) return signbit(x) ? 0.0 : std::numeric_limits::infinity(); - const double kd = nearbyint_ties_even(x); + const double kd = round_nearest_even_value(x); const int k = static_cast(kd); const double frac = x - kd; return ldexp(exp(frac * ln2), k); @@ -137,6 +402,18 @@ namespace detail::_f64_impl BL_FORCE_INLINE constexpr double log10(double x) noexcept { + if (isfinite(x) && x > 0.0) + { + const int exp2 = detail::fp::frexp_exponent(x); + const int k0 = static_cast(floor((exp2 - 1) * 0.30102999566398114)); + + for (int k = k0 - 2; k <= k0 + 2; ++k) + { + if (0 <= k && k <= 22 && x == pow10(k)) + return static_cast(k); + } + } + return log(x) * inv_ln10; } @@ -208,17 +485,60 @@ namespace detail::_f64_impl return ax * sqrt(1.0 + r * r); } + [[nodiscard]] BL_FORCE_INLINE constexpr double exp_log_product( + double exponent, + double logarithm) noexcept + { + // Preserve the low product term: rounding y * log(x) before exp can + // otherwise consume the final few bits of the constexpr pow result. + double product{}; + double product_error{}; + detail::fp::two_prod_precise_dekker_range_safe( + exponent, + logarithm, + product, + product_error); + + const double leading = exp(product); + if (!isfinite(leading) || leading == 0.0 || product_error == 0.0) + return leading; + return leading + leading * expm1(product_error); + } + // pow [[nodiscard]] BL_FORCE_INLINE constexpr double pow(double x, double y) noexcept { if (iszero(y)) return 1.0; + if (x == 1.0) + return 1.0; + if (isnan(x) || isnan(y)) return std::numeric_limits::quiet_NaN(); const double yi = trunc(y); const bool y_is_int = (yi == y); + const bool y_is_odd = y_is_int && fmod_exact(abs(yi), 2.0) == 1.0; + + if (isinf(y)) + { + const double ax = abs(x); + if (ax == 1.0) + return 1.0; + if (ax > 1.0) + return signbit(y) ? 0.0 : std::numeric_limits::infinity(); + return signbit(y) ? std::numeric_limits::infinity() : 0.0; + } + + if (isinf(x)) + { + if (y < 0.0) + return signbit(x) && y_is_odd ? -0.0 : 0.0; + return signbit(x) && y_is_odd + ? -std::numeric_limits::infinity() + : std::numeric_limits::infinity(); + } if (y_is_int && yi >= static_cast(std::numeric_limits::min()) && yi <= static_cast(std::numeric_limits::max())) @@ -231,12 +551,11 @@ namespace detail::_f64_impl if (!y_is_int) return std::numeric_limits::quiet_NaN(); - const double magnitude = exp(y * log(-x)); - const double parity = fmod_exact(abs(yi), 2.0); - return (parity == 1.0) ? -magnitude : magnitude; + const double magnitude = exp_log_product(y, log(-x)); + return y_is_odd ? -magnitude : magnitude; } - return exp(y * log(x)); + return exp_log_product(y, log(x)); } // hyperbolic @@ -329,7 +648,8 @@ namespace detail::_f64_impl if (x > 0x1p500) return log(x) + ln2; - return log(x + sqrt((x - 1.0) * (x + 1.0))); + const double offset = x - 1.0; + return log1p(offset + sqrt(offset * (x + 1.0))); } BL_FORCE_INLINE constexpr double atanh(double x) noexcept @@ -539,14 +859,184 @@ namespace detail::_f64_impl } // gamma + template + [[nodiscard]] BL_FORCE_INLINE constexpr double horner_ascending( + const double (&coefficients)[Count], + double x) noexcept + { + double value = coefficients[Count - 1]; + for (std::size_t i = Count - 1; i-- > 0;) + value = value * x + coefficients[i]; + return value; + } + + BL_MSVC_NOINLINE constexpr double lgamma1p_series(double y) noexcept + { + constexpr double coefficients[] = { + 0x1.a51a6625307d3p-1, -0x1.9a4d55beab2d7p-2, + 0x1.151322ac7d848p-2, -0x1.a8b9c17aa6149p-3, + 0x1.5b40cb100c306p-3, -0x1.2703a1dcea3aep-3, + 0x1.010b36af86397p-3, -0x1.c806706d57db4p-4, + 0x1.9a01e385d5f8fp-4, -0x1.748c33114c6d6p-4, + 0x1.556ad63243bc4p-4, -0x1.3b1d971fc5985p-4, + 0x1.2496df8320c5fp-4, -0x1.11133476e7fe0p-4, + 0x1.00010064cdeb2p-4, -0x1.e1e2d311e8abdp-5, + 0x1.c71ce3a20b419p-5, -0x1.af28a1b5688a0p-5, + 0x1.9999b3352d5bap-5, -0x1.86186db77bfbfp-5, + 0x1.745d1d1778df9p-5, -0x1.642c88591b66dp-5, + 0x1.555556aaafdcdp-5, -0x1.47ae151eb9fb7p-5, + 0x1.3b13b189d925ep-5, -0x1.2f684c00002bcp-5, + 0x1.24924936db7bcp-5, -0x1.1a7b961a7b9aap-5, + 0x1.111111155556dp-5, -0x1.08421086318cep-5 + }; + constexpr double euler_gamma = 0x1.2788cfc6fb619p-1; + return y * (y * horner_ascending(coefficients, y) - euler_gamma); + } + + BL_MSVC_NOINLINE constexpr double lgamma1p5_series(double y) noexcept + { + constexpr double coefficients[] = { + 0x1.de9e64df22ef3p-2, -0x1.1ae55b180726cp-3, + 0x1.e0f840dad61dap-5, -0x1.da59d5374a543p-6, + 0x1.f9ca39daa929cp-7, -0x1.1a8ba4f0ea597p-7, + 0x1.456f1ad666a3bp-8, -0x1.7edb812f6426ep-9, + 0x1.c9735ae9db2c1p-10, -0x1.148a319eec639p-10, + 0x1.517c5a1579f10p-11, -0x1.9eff1d1c8bdc2p-12, + 0x1.00c41c13e4c1cp-12, -0x1.3f6dff22ac1c2p-13, + 0x1.8f3619541742cp-14, -0x1.f4ea079c9c87ap-15, + 0x1.3b5e73f18d398p-15, -0x1.8e583480fb843p-16, + 0x1.f88eb43555368p-17, -0x1.4059677eed115p-17, + 0x1.97b6b03fa7446p-18, -0x1.03fd6bf0808efp-18, + 0x1.4c355353d5241p-19, -0x1.a939cf6ab6697p-20, + 0x1.109491756a3f0p-20, -0x1.5dfabe1235651p-21, + 0x1.c1f93171f89d3p-22, -0x1.21a3531259833p-22, + 0x1.754fa60ab8b7ap-23, -0x1.e1b1158537c59p-24 + }; + constexpr double constant = -0x1.eeb95b094c191p-4; + constexpr double linear = 0x1.2aed059bd608ap-5; + return y * (y * horner_ascending(coefficients, y) + linear) + constant; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr bool try_lgamma_local( + double x, + double& result) noexcept + { + const double y1 = x - 1.0; + if (abs(y1) <= 0.25) + { + result = lgamma1p_series(y1); + return true; + } + + const double y15 = x - 1.5; + if (abs(y15) <= 0.25) + { + result = lgamma1p5_series(y15); + return true; + } + + const double y2 = x - 2.0; + if (abs(y2) <= 0.25) + { + result = log1p(y2) + lgamma1p_series(y2); + return true; + } + return false; + } + + BL_MSVC_NOINLINE constexpr double lgamma_positive_low_range(double x) noexcept + { + double y = x; + double correction = 0.0; + if (y < 0.75) + { + do + { + correction -= log(y); + y += 1.0; + } + while (y < 0.75); + } + else + { + while (y > 2.25) + { + y -= 1.0; + correction += log(y); + } + } + + double local = 0.0; + (void)try_lgamma_local(y, local); + return local + correction; + } + + BL_MSVC_NOINLINE constexpr double gamma_positive_low_range(double x) noexcept + { + double y = x; + double product_hi = 1.0; + double product_lo = 0.0; + bool divide = false; + + const auto accumulate = [&](double factor) constexpr { + double next_hi{}; + double product_error{}; + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + detail::fp::two_prod_precise_dekker_range_safe( + product_hi, factor, next_hi, product_error); + #else + detail::fp::two_prod_precise_dekker( + product_hi, factor, next_hi, product_error); + #endif + const double next_lo = product_lo * factor + product_error; + detail::fp::quick_two_sum_precise( + next_hi, next_lo, product_hi, product_lo); + }; + + if (y < 0.75) + { + divide = true; + do + { + accumulate(y); + y += 1.0; + } + while (y < 0.75); + } + else + { + while (y > 2.25) + { + y -= 1.0; + accumulate(y); + } + } + + double local_log = 0.0; + (void)try_lgamma_local(y, local_log); + const double local = exp(local_log); + if (divide) + return local / (product_hi + product_lo); + + double result_hi{}; + double result_error{}; + #if defined(FLTX_MATH_USES_CHECKED_DEKKER) + detail::fp::two_prod_precise_dekker_range_safe( + local, product_hi, result_hi, result_error); + #else + detail::fp::two_prod_precise_dekker( + local, product_hi, result_hi, result_error); + #endif + return result_hi + (result_error + local * product_lo); + } + BL_FORCE_INLINE constexpr double lgamma_positive(double x) noexcept { - if (x == 1.0 || x == 2.0) - return 0.0; - if (x == 0.5) - return 0.57236494292470009; - if (x == 1.5) - return -0.12078223763524522; + double local = 0.0; + if (try_lgamma_local(x, local)) + return local; + if (x <= 16.0) + return lgamma_positive_low_range(x); constexpr double coeffs[] = { @@ -575,9 +1065,7 @@ namespace detail::_f64_impl if (isnan(x)) return std::numeric_limits::quiet_NaN(); if (isinf(x)) - return signbit(x) - ? std::numeric_limits::quiet_NaN() - : std::numeric_limits::infinity(); + return std::numeric_limits::infinity(); if (x > 0.0) return lgamma_positive(x); @@ -615,7 +1103,9 @@ namespace detail::_f64_impl } if (x > 0.0) - return exp(lgamma_positive(x)); + return x <= 20.0 + ? gamma_positive_low_range(x) + : exp(lgamma_positive(x)); const double xi = trunc(x); if (xi == x) @@ -731,22 +1221,107 @@ namespace detail::_f64_impl ); } +BL_PUSH_PRECISE; +template +[[nodiscard]] BL_FORCE_INLINE constexpr double ipow(double x, Exp y) noexcept +{ + int exponent = 0; + if (detail::fp::try_int_exponent(y, exponent)) + { + const bool negative_base = x < 0.0; + const double magnitude = negative_base ? -x : x; + double value{}; + + if (magnitude == 2.0) + { + if (exponent >= std::numeric_limits::max_exponent) + value = std::numeric_limits::infinity(); + else if (exponent < std::numeric_limits::min_exponent - std::numeric_limits::digits) + value = 0.0; + else + value = detail::fp::ldexp(1.0, exponent); + + return (negative_base && detail::fp::is_odd_integral(y)) ? -value : value; + } + + if (magnitude == 10.0) + { + value = detail::_f64_impl::pow10(exponent); + return (negative_base && detail::fp::is_odd_integral(y)) ? -value : value; + } + } + + using U = std::make_unsigned_t>; + const U magnitude = detail::fp::unsigned_abs(y); + const double powered = detail::fp::ipow_nonneg_fast(x, magnitude); + + if constexpr (std::signed_integral>) + { + if (y < 0) + return 1.0 / powered; + } + + return powered; +} +BL_POP_PRECISE; + +template +[[nodiscard]] BL_FORCE_INLINE constexpr double pow(double x, Exp y) noexcept +{ + return bl::ipow(x, y); +} + +[[nodiscard]] BL_FORCE_INLINE constexpr long double pow(long double, long double) noexcept = delete; + +template +requires (fltx_arithmetic> && !std::same_as, long double>) +[[nodiscard]] BL_FORCE_INLINE constexpr long double pow(long double, Exp) noexcept = delete; + +template +requires (std::is_arithmetic_v> && !std::same_as, long double>) +[[nodiscard]] BL_FORCE_INLINE constexpr long double pow(Base, long double) noexcept = delete; + +template +requires (detail::math::f64_promoted_math_args && + !(std::same_as, f64> && detail::fp::non_bool_integral)) +[[nodiscard]] BL_FORCE_INLINE constexpr auto pow(Base x, Exp y) noexcept +{ + using P = detail::math::promoted_t; + using E = detail::math::promoted_pow_exponent_t; + return bl::pow(detail::math::promoted_cast

(x), detail::math::promoted_cast(y)); +} // trig [[nodiscard]] BL_FORCE_INLINE constexpr double sin(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::sin(x), - std::sin(x) - ); + if (bl::detail::is_constant_evaluated()) + return detail::_f64_impl::sin(x); +#if defined(__MINGW32__) + if (std::fabs(x) >= 0x1p20) [[unlikely]] + return detail::_f64_runtime::sin_large(x); + const double result = std::sin(x); + if (std::fabs(result) < 0x1p-20) [[unlikely]] + return detail::_f64_runtime::sin_large(x); + return result; +#else + return std::sin(x); +#endif } [[nodiscard]] BL_FORCE_INLINE constexpr double cos(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::cos(x), - std::cos(x) - ); + if (bl::detail::is_constant_evaluated()) + return detail::_f64_impl::cos(x); +#if defined(__MINGW32__) + if (std::fabs(x) >= 0x1p20) [[unlikely]] + return detail::_f64_runtime::cos_large(x); + const double result = std::cos(x); + if (std::fabs(result) < 0x1p-20) [[unlikely]] + return detail::_f64_runtime::cos_large(x); + return result; +#else + return std::cos(x); +#endif } [[nodiscard]] BL_FORCE_INLINE constexpr bool sincos(double x, double& s_out, double& c_out) noexcept @@ -758,10 +1333,13 @@ namespace detail::_f64_impl [[nodiscard]] BL_FORCE_INLINE constexpr double tan(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::tan(x), - std::tan(x) - ); + if (bl::detail::is_constant_evaluated()) + return detail::_f64_impl::tan(x); +#if defined(__MINGW32__) + if (std::fabs(x) >= 0x1p20) [[unlikely]] + return detail::_f64_runtime::tan_large(x); +#endif + return std::tan(x); } [[nodiscard]] BL_FORCE_INLINE constexpr double atan(double x) noexcept @@ -851,10 +1429,13 @@ template requires std::same_as, double> [[nodiscard]] BL_FORCE_INLINE constexpr double acosh(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::acosh(x), - std::acosh(x) - ); + if (bl::detail::is_constant_evaluated()) + return detail::_f64_impl::acosh(x); +#if defined(__MINGW32__) + if (x < 1.5) + return detail::_f64_impl::acosh(x); +#endif + return std::acosh(x); } [[nodiscard]] BL_FORCE_INLINE constexpr double atanh(double x) noexcept @@ -887,10 +1468,13 @@ template requires std::same_as, double> // gamma [[nodiscard]] BL_FORCE_INLINE constexpr double lgamma(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::lgamma(x), - std::lgamma(x) - ); + if (bl::detail::is_constant_evaluated()) + return detail::_f64_impl::lgamma(x); +#if defined(__MINGW32__) + if (x >= 0.75 && x <= 1.25) + return static_cast(std::lgamma(static_cast(x))); +#endif + return std::lgamma(x); } [[nodiscard]] BL_FORCE_INLINE constexpr double tgamma(double x) noexcept diff --git a/include/fltx/detail/format_flags.h b/include/fltx/detail/format_flags.h new file mode 100644 index 0000000..b57fd5c --- /dev/null +++ b/include/fltx/detail/format_flags.h @@ -0,0 +1,56 @@ +/** + * fltx/detail/format_flags.h - Internal helpers for std::ios_base::fmtflags. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#ifndef FLTX_DETAIL_FORMAT_FLAGS_INCLUDED +#define FLTX_DETAIL_FORMAT_FLAGS_INCLUDED + +#include + +#include "fltx/config.h" + +namespace bl::detail +{ + enum class float_format : unsigned char + { + defaultfloat, + fixed, + scientific, + hexfloat + }; + + [[nodiscard]] BL_FORCE_INLINE constexpr float_format float_format_from_flags(std::ios_base::fmtflags flags) noexcept + { + const auto field = flags & std::ios_base::floatfield; + if (field == std::ios_base::fixed) + return float_format::fixed; + if (field == std::ios_base::scientific) + return float_format::scientific; + if (field == (std::ios_base::fixed | std::ios_base::scientific)) + return float_format::hexfloat; + return float_format::defaultfloat; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr bool has_showpoint(std::ios_base::fmtflags flags) noexcept + { + return (flags & std::ios_base::showpoint) != std::ios_base::fmtflags{}; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr bool has_showpos(std::ios_base::fmtflags flags) noexcept + { + return (flags & std::ios_base::showpos) != std::ios_base::fmtflags{}; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr bool has_uppercase(std::ios_base::fmtflags flags) noexcept + { + return (flags & std::ios_base::uppercase) != std::ios_base::fmtflags{}; + } + +} // namespace bl::detail + +#endif diff --git a/include/fltx/detail/math_promotion.h b/include/fltx/detail/math_promotion.h new file mode 100644 index 0000000..d2be3f1 --- /dev/null +++ b/include/fltx/detail/math_promotion.h @@ -0,0 +1,146 @@ +/** + * fltx/detail/math_promotion.h - Shared -style promotion helpers. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#ifndef FLTX_DETAIL_MATH_PROMOTION_INCLUDED +#define FLTX_DETAIL_MATH_PROMOTION_INCLUDED + +#include "fltx/config.h" +#include "fltx/detail/math_utils.h" +#include "fltx/traits.h" + +#include +#include + +namespace bl::detail::math +{ + template + using clean_t = std::remove_cvref_t; + + template + concept native_math_float = + std::same_as, f32> || + std::same_as, f64>; + + template + concept promoted_math_arg = + fltx_arithmetic> && + fltx_precision_rank_v != 0 && + !std::same_as, long double>; + + template + struct promoted_call_type + { + using type = T; + }; + + template<> struct promoted_call_type { using type = f128_s; }; + template<> struct promoted_call_type { using type = f256_s; }; + + template + using promoted_t = typename promoted_call_type>::type; + + template + struct promoted_pow_exponent_type + { + using type = P; + }; + + template + struct promoted_pow_exponent_type + { + using type = clean_t; + }; + + template + requires (!detail::fp::non_bool_integral && fltx_precision_rank_v <= 2) + struct promoted_pow_exponent_type + { + using type = f64; + }; + + template + requires (!detail::fp::non_bool_integral && fltx_precision_rank_v <= 2) + struct promoted_pow_exponent_type + { + using type = f64; + }; + + template + requires fltx_f128 + struct promoted_pow_exponent_type + { + using type = f128_s; + }; + + template + using promoted_pow_exponent_t = typename promoted_pow_exponent_type::type; + + template concept promoted_math_args = (promoted_math_arg && ...); + + template concept f64_promoted_math_args = + promoted_math_args && ::bl::detail::traits::max_precision_rank() == 2; + template concept f128_promoted_math_args = + promoted_math_args && ::bl::detail::traits::max_precision_rank() == 4; + template concept f256_promoted_math_args = + promoted_math_args && ::bl::detail::traits::max_precision_rank() == 5; + + template + [[nodiscard]] BL_FORCE_INLINE constexpr To promoted_cast(const From& value) + { + if constexpr (std::same_as>) + { + return value; + } + else + { + To out{}; + out = value; + return out; + } + } + + template + concept native_nexttoward_target = + std::is_integral_v> || + native_math_float || + std::same_as, long double>; + + template + concept f64_nexttoward_args = + promoted_math_arg && + fltx_precision_rank_v == 2 && + native_nexttoward_target; + + template + concept f128_nexttoward_target = + std::is_integral_v> || + native_math_float || + fltx_f128 || + std::same_as, long double>; + + template + concept f128_nexttoward_args = + promoted_math_arg && + fltx_precision_rank_v == 4 && + f128_nexttoward_target; + + template + concept f256_nexttoward_target = + promoted_math_arg || + std::same_as, long double>; + + template + concept f256_nexttoward_args = + promoted_math_arg && + fltx_precision_rank_v == 5 && + f256_nexttoward_target; + +} // namespace bl::detail::math + +#endif diff --git a/include/fltx/detail/math_utils.h b/include/fltx/detail/math_utils.h index 1c2a30f..112b164 100644 --- a/include/fltx/detail/math_utils.h +++ b/include/fltx/detail/math_utils.h @@ -9,10 +9,14 @@ #ifndef FLTX_DETAIL_MATH_UTILS_INCLUDED #define FLTX_DETAIL_MATH_UTILS_INCLUDED +#include #include +#include +#include #include #include "fltx/config.h" +#include "fltx/traits.h" namespace bl::detail::fp { @@ -40,8 +44,222 @@ namespace bl::detail::fp } } + template + requires std::unsigned_integral + [[nodiscard]] BL_FORCE_INLINE constexpr bool factor_power_of_two_five( + UInt magnitude, + int& pow2, + int& pow5) noexcept + { + if (magnitude <= UInt{ 1 }) + return false; + + pow2 = 0; + pow5 = 0; + + while ((magnitude & UInt{ 1 }) == UInt{ 0 }) + { + magnitude >>= 1; + ++pow2; + } + + while ((magnitude % UInt{ 5 }) == UInt{ 0 }) + { + magnitude /= UInt{ 5 }; + ++pow5; + } + + return pow5 != 0 && magnitude == UInt{ 1 }; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr bool checked_exponent_product( + int factor, + int exponent, + int& out) noexcept + { + const long long wide = static_cast(factor) * static_cast(exponent); + if (wide < static_cast(std::numeric_limits::min()) || + wide > static_cast(std::numeric_limits::max())) + { + return false; + } + + out = static_cast(wide); + return true; + } + + template + requires std::unsigned_integral + [[nodiscard]] BL_FORCE_INLINE constexpr bool try_unsigned_power_of_two_log2(UInt value, int& out) noexcept + { + if (value <= UInt{ 1 } || (value & (value - UInt{ 1 })) != UInt{ 0 }) + return false; + + int exponent = 0; + while (value > UInt{ 1 }) + { + value >>= 1; + ++exponent; + } + + out = exponent; + return true; + } + + // Avoid runtime log checks when small integer powers are safely below Dekker split overflow. + inline constexpr std::uint16_t integral_pow_split_safe_exp_limit_upto_256[] = { + 0, 65535, 996, 628, 498, 428, 385, 354, 332, 314, 299, 287, 277, 269, 261, 254, + 249, 243, 238, 234, 230, 226, 223, 220, 217, 214, 211, 209, 207, 205, 202, 201, + 199, 197, 195, 194, 192, 191, 189, 188, 187, 185, 184, 183, 182, 181, 180, 179, + 178, 177, 176, 175, 174, 173, 173, 172, 171, 170, 170, 169, 168, 167, 167, 166, + 166, 165, 164, 164, 163, 163, 162, 161, 161, 160, 160, 159, 159, 158, 158, 158, + 157, 157, 156, 156, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 151, 151, + 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 147, 147, 147, 146, 146, + 146, 146, 145, 145, 145, 144, 144, 144, 144, 143, 143, 143, 143, 142, 142, 142, + 142, 142, 141, 141, 141, 141, 140, 140, 140, 140, 140, 139, 139, 139, 139, 139, + 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, + 136, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 133, 133, 133, + 133, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, + 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 129, 129, + 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, + 124 + }; + + // Avoid reciprocal pow work when small negative integer powers must underflow to binary64 zero. + inline constexpr std::uint16_t integral_pow_underflow_exp_limit_upto_256[] = { + 0, 65535, 1075, 679, 538, 463, 416, 383, 359, 340, 324, 311, 300, 291, 283, 276, + 269, 263, 258, 254, 249, 245, 242, 238, 235, 232, 229, 227, 224, 222, 220, 217, + 215, 214, 212, 210, 208, 207, 205, 204, 202, 201, 200, 199, 197, 196, 195, 194, + 193, 192, 191, 190, 189, 188, 187, 186, 186, 185, 184, 183, 182, 182, 181, 180, + 180, 179, 178, 178, 177, 176, 176, 175, 175, 174, 174, 173, 173, 172, 172, 171, + 171, 170, 170, 169, 169, 168, 168, 167, 167, 167, 166, 166, 165, 165, 165, 164, + 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, + 158, 158, 158, 158, 157, 157, 157, 156, 156, 156, 156, 155, 155, 155, 155, 154, + 154, 154, 154, 153, 153, 153, 153, 152, 152, 152, 152, 152, 151, 151, 151, 151, + 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, + 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 145, 145, + 145, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 142, + 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, + 140, 140, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 135, 135, 135, + 135 + }; + + template + requires (non_bool_integral && std::unsigned_integral) + [[nodiscard]] BL_FORCE_INLINE constexpr bool integral_pow_split_safe(Base base, ExpUnsigned exp) noexcept + { + const std::uintmax_t magnitude_base = static_cast(unsigned_abs(base)); + if (magnitude_base > 256u) + return false; + + return static_cast(exp) <= + integral_pow_split_safe_exp_limit_upto_256[static_cast(magnitude_base)]; + } + + template + requires (non_bool_integral && std::unsigned_integral) + [[nodiscard]] BL_FORCE_INLINE constexpr bool integral_pow_reciprocal_underflows_binary64( + Base base, + ExpUnsigned exp) noexcept + { + const std::uintmax_t original_magnitude_base = static_cast(unsigned_abs(base)); + if (original_magnitude_base <= 1u) + return false; + + if (original_magnitude_base <= 256u) + { + return static_cast(exp) > + integral_pow_underflow_exp_limit_upto_256[static_cast(original_magnitude_base)]; + } + + std::uintmax_t magnitude_base = original_magnitude_base; + int floor_log2_base = 0; + while (magnitude_base > 1u) + { + magnitude_base >>= 1u; + ++floor_log2_base; + } + + return floor_log2_base > 0 && + static_cast(exp) > (std::uintmax_t{ 1075 } / static_cast(floor_log2_base)); + } + + template + requires (non_bool_integral && std::unsigned_integral) + [[nodiscard]] BL_FORCE_INLINE constexpr bool negative_integral_pow_result_is_negative( + Base base, + ExpUnsigned exp) noexcept + { + if constexpr (std::signed_integral>) + return base < Base{ 0 } && ((exp & ExpUnsigned{ 1 }) != ExpUnsigned{ 0 }); + else + return false; + } + + template + struct ipow_square_traits + { + [[nodiscard]] BL_FORCE_INLINE static constexpr R eval(const R& value) + noexcept(noexcept(value * value)) + { + return value * value; + } + }; + + template + [[nodiscard]] BL_FORCE_INLINE constexpr R ipow_square(const R& value) + noexcept(noexcept(ipow_square_traits::eval(value))) + { + return ipow_square_traits::eval(value); + } + + template + requires non_bool_integral + [[nodiscard]] BL_FORCE_INLINE constexpr bool ipow_integral_mul_overflows(R a, R b) noexcept + { + if constexpr (std::unsigned_integral) + { + return b != R{ 0 } && a > (std::numeric_limits::max() / b); + } + else + { + constexpr R min = std::numeric_limits::min(); + constexpr R max = std::numeric_limits::max(); + + if (a > R{ 0 }) + return b > R{ 0 } ? a > (max / b) : b < (min / a); + if (a < R{ 0 }) + return b > R{ 0 } ? a < (min / b) : b < (max / a); + return false; + } + } + + template + requires non_bool_integral + [[nodiscard]] BL_FORCE_INLINE constexpr R ipow_integral_mul(R a, R b) + { + BL_CONSTEXPR_DEBUG_ASSERT( + !ipow_integral_mul_overflows(a, b), + "bl::ipow integral overflow"); + + using U = std::make_unsigned_t>; + const U out = static_cast(a) * static_cast(b); + return static_cast(out); + } + + template + requires non_bool_integral + [[nodiscard]] BL_FORCE_INLINE constexpr R ipow_integral_square(R value) + { + return ipow_integral_mul(value, value); + } + template - constexpr R ipow_nonneg(R base, ExpUnsigned exp) + BL_FORCE_INLINE constexpr R ipow_nonneg(R base, ExpUnsigned exp) { R result = R{ 1 }; @@ -53,12 +271,140 @@ namespace bl::detail::fp exp >>= 1; if (exp != ExpUnsigned{ 0 }) - base *= base; + base = ipow_square(base); + } + + return result; + } + + template + BL_FORCE_INLINE constexpr R ipow_nonneg_fast(R base, ExpUnsigned exp) + { + if (exp == ExpUnsigned{ 0 }) + return R{ 1 }; + if (exp == ExpUnsigned{ 1 }) + return base; + + if (exp == ExpUnsigned{ 2 }) + return ipow_square(base); + if (exp == ExpUnsigned{ 3 }) + { + const R squared = ipow_square(base); + return squared * base; + } + if (exp == ExpUnsigned{ 4 }) + { + return ipow_square(ipow_square(base)); + } + + return ipow_nonneg(base, exp); + } + + template + requires (non_bool_integral && std::unsigned_integral) + BL_FORCE_INLINE constexpr R ipow_integral_nonneg(R base, ExpUnsigned exp) + { + R result = R{ 1 }; + + while (exp != ExpUnsigned{ 0 }) + { + if ((exp & ExpUnsigned{ 1 }) != ExpUnsigned{ 0 }) + result = ipow_integral_mul(result, base); + + exp >>= 1; + + if (exp != ExpUnsigned{ 0 }) + base = ipow_integral_square(base); } return result; } + template + requires (non_bool_integral && std::unsigned_integral) + BL_FORCE_INLINE constexpr R ipow_integral_nonneg_fast(R base, ExpUnsigned exp) + { + if (exp == ExpUnsigned{ 0 }) + return R{ 1 }; + if (exp == ExpUnsigned{ 1 }) + return base; + + if (exp == ExpUnsigned{ 2 }) + return ipow_integral_square(base); + if (exp == ExpUnsigned{ 3 }) + { + const R squared = ipow_integral_square(base); + return ipow_integral_mul(squared, base); + } + if (exp == ExpUnsigned{ 4 }) + { + return ipow_integral_square(ipow_integral_square(base)); + } + + return ipow_integral_nonneg(base, exp); + } + + template + requires non_bool_integral + [[nodiscard]] BL_FORCE_INLINE constexpr bool try_int_exponent(Exp value, int& out) noexcept + { + using E = std::remove_cvref_t; + constexpr int min_int = std::numeric_limits::min(); + constexpr int max_int = std::numeric_limits::max(); + + if constexpr (std::signed_integral) + { + const auto wide = static_cast(value); + if (wide < static_cast(min_int) || wide > static_cast(max_int)) + return false; + } + else + { + if (static_cast(value) > static_cast(max_int)) + return false; + } + + out = static_cast(value); + return true; + } + + template + requires non_bool_integral + [[nodiscard]] BL_FORCE_INLINE constexpr bool is_odd_integral(Exp value) noexcept + { + return (unsigned_abs(value) & std::make_unsigned_t>{ 1 }) != 0; + } + + template + requires (non_bool_integral && non_bool_integral && non_bool_integral) + [[nodiscard]] BL_FORCE_INLINE constexpr R ipow_integral_default_result(T x, U y) + { + using Exp = std::remove_cvref_t; + using ExpUnsigned = std::make_unsigned_t; + + const R base = static_cast(x); + + if constexpr (std::signed_integral) + { + if (y < 0) + { + if (base == R{ 1 }) + return R{ 1 }; + + if constexpr (std::signed_integral) + { + if (base == R{ -1 }) + return (y % 2 != 0) ? R{ -1 } : R{ 1 }; + } + + return R{ 0 }; + } + } + + const ExpUnsigned exp = unsigned_abs(y); + return ipow_integral_nonneg_fast(base, exp); + } + template concept sincos_vector_constructible = requires(const Value& c, const Value& s) { @@ -117,14 +463,17 @@ namespace bl } template - requires (!std::integral> && detail::fp::non_bool_integral) - [[nodiscard]] constexpr std::remove_cvref_t pow(T base, Exp exp) + requires ( + !std::integral> && + !fltx_extended_float> && + detail::fp::non_bool_integral) + [[nodiscard]] constexpr std::remove_cvref_t ipow(T base, Exp exp) { using R = std::remove_cvref_t; using U = std::make_unsigned_t>; const U magnitude = detail::fp::unsigned_abs(exp); - const R powered = detail::fp::ipow_nonneg(static_cast(base), magnitude); + const R powered = detail::fp::ipow_nonneg_fast(static_cast(base), magnitude); if constexpr (std::signed_integral>) { @@ -137,33 +486,9 @@ namespace bl template requires (detail::fp::non_bool_integral && detail::fp::non_bool_integral) - [[nodiscard]] constexpr std::common_type_t pow(T x, U y) + [[nodiscard]] constexpr std::remove_cvref_t ipow(T x, U y) { - using R = std::common_type_t; - using Exp = std::remove_cvref_t; - using ExpUnsigned = std::make_unsigned_t; - - const R base = static_cast(x); - - if constexpr (std::signed_integral) - { - if (y < 0) - { - if (base == R{ 1 }) - return R{ 1 }; - - if constexpr (std::signed_integral) - { - if (base == R{ -1 }) - return (y % 2 != 0) ? R{ -1 } : R{ 1 }; - } - - return R{ 0 }; - } - } - - const ExpUnsigned exp = detail::fp::unsigned_abs(y); - return detail::fp::ipow_nonneg(base, exp); + return detail::fp::ipow_integral_default_result>(x, y); } } // namespace bl diff --git a/include/fltx/detail/native_float_decimal.h b/include/fltx/detail/native_float_decimal.h new file mode 100644 index 0000000..f5ee84f --- /dev/null +++ b/include/fltx/detail/native_float_decimal.h @@ -0,0 +1,221 @@ +/** + * fltx/detail/native_float_decimal.h - Shared native f32/f64 decimal conversion helpers. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#ifndef FLTX_DETAIL_NATIVE_FLOAT_DECIMAL_INCLUDED +#define FLTX_DETAIL_NATIVE_FLOAT_DECIMAL_INCLUDED + +#include +#include +#include + +#include "fltx/config.h" +#include "fltx/detail/common_decimal.h" +#include "fltx/detail/common_fp.h" + +namespace bl::detail::_native_float_decimal +{ + [[nodiscard]] BL_FORCE_INLINE constexpr std::uint64_t rounded_shr_u64(std::uint64_t value, int bits) noexcept + { + if (bits <= 0) + return value; + + const bool round_bit = bits <= 64 && ((value >> (bits - 1)) & 1u) != 0; + const bool sticky = bits > 1 + ? (bits < 64 ? (value & ((std::uint64_t{ 1 } << (bits - 1)) - 1u)) != 0 : (value << 1) != 0) + : false; + const std::uint64_t shifted = bits >= 64 ? 0 : (value >> bits); + return shifted + (round_bit && (sticky || (shifted & 1u) != 0) ? 1u : 0u); + } + + [[nodiscard]] BL_FORCE_INLINE constexpr double exact_dyadic_to_double(std::uint64_t coeff, int exp2, bool neg) noexcept + { + const std::uint64_t sign = neg ? (std::uint64_t{ 1 } << 63) : 0; + if (coeff == 0) + return std::bit_cast(sign); + + const int top_bit = detail::fp::bit_length_u64(coeff) - 1; + int unbiased_exp = exp2 + top_bit; + if (unbiased_exp > 1023) + return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); + + if (unbiased_exp < -1022) + { + const int scale = exp2 + 1074; + const std::uint64_t subnormal = scale >= 0 + ? (scale >= 64 ? 0 : (coeff << scale)) + : rounded_shr_u64(coeff, -scale); + + if (subnormal == 0) + return std::bit_cast(sign); + if (subnormal >= (std::uint64_t{ 1 } << 52)) + return std::bit_cast(sign | (std::uint64_t{ 1 } << 52)); + return std::bit_cast(sign | subnormal); + } + + const int shift = top_bit - 52; + std::uint64_t significand = shift > 0 + ? rounded_shr_u64(coeff, shift) + : (coeff << -shift); + + if (detail::fp::bit_length_u64(significand) > 53) + { + significand >>= 1; + ++unbiased_exp; + if (unbiased_exp > 1023) + return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); + } + + const std::uint64_t exp_bits = static_cast(unbiased_exp + 1023); + const std::uint64_t frac_bits = significand & ((std::uint64_t{ 1 } << 52) - 1u); + return std::bit_cast(sign | (exp_bits << 52) | frac_bits); + } + + [[nodiscard]] BL_FORCE_INLINE constexpr float exact_dyadic_to_float(std::uint64_t coeff, int exp2, bool neg) noexcept + { + const std::uint32_t sign = neg ? (std::uint32_t{ 1 } << 31) : 0; + if (coeff == 0) + return std::bit_cast(sign); + + const int top_bit = detail::fp::bit_length_u64(coeff) - 1; + int unbiased_exp = exp2 + top_bit; + if (unbiased_exp > 127) + return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); + + if (unbiased_exp < -126) + { + const int scale = exp2 + 149; + const std::uint64_t subnormal = scale >= 0 + ? (scale >= 64 ? 0 : (coeff << scale)) + : rounded_shr_u64(coeff, -scale); + + if (subnormal == 0) + return std::bit_cast(sign); + if (subnormal >= (std::uint64_t{ 1 } << 23)) + return std::bit_cast(sign | (std::uint32_t{ 1 } << 23)); + return std::bit_cast(sign | static_cast(subnormal)); + } + + const int shift = top_bit - 23; + std::uint64_t significand = shift > 0 + ? rounded_shr_u64(coeff, shift) + : (coeff << -shift); + + if (detail::fp::bit_length_u64(significand) > 24) + { + significand >>= 1; + ++unbiased_exp; + if (unbiased_exp > 127) + return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); + } + + const std::uint32_t exp_bits = static_cast(unbiased_exp + 127); + const std::uint32_t frac_bits = static_cast(significand) & ((std::uint32_t{ 1 } << 23) - 1u); + return std::bit_cast(sign | (exp_bits << 23) | frac_bits); + } + + struct f64_decimal_round_traits + { + using value_type = double; + + static constexpr int significand_bits = 53; + static constexpr int max_binary_exponent = 1023; + static constexpr int min_binary_exponent = -1074; + static constexpr int limb_count = 1; + + static constexpr bool isfinite(value_type x) noexcept { return detail::fp::isfinite(x); } + static constexpr bool signbit(value_type x) noexcept { return detail::fp::signbit(x); } + static constexpr value_type abs(value_type x) noexcept { return detail::fp::fabs(x); } + static constexpr value_type zero(bool neg) noexcept { return neg ? -0.0 : 0.0; } + static constexpr double limb(value_type x, int) noexcept { return x; } + static constexpr value_type infinity(bool neg) noexcept + { + return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); + } + + static constexpr value_type pack_from_significand(const detail::exact_decimal::biguint& q, int e2, bool neg) noexcept + { + return exact_dyadic_to_double(q.get_bits(0, significand_bits), e2 - (significand_bits - 1), neg); + } + }; + + struct f32_decimal_round_traits + { + using value_type = float; + + static constexpr int significand_bits = 24; + static constexpr int max_binary_exponent = 127; + static constexpr int min_binary_exponent = -149; + static constexpr int limb_count = 1; + + static constexpr bool isfinite(value_type x) noexcept { return detail::fp::isfinite(x); } + static constexpr bool signbit(value_type x) noexcept { return detail::fp::signbit(x); } + static constexpr value_type abs(value_type x) noexcept { return detail::fp::fabs(x); } + static constexpr value_type zero(bool neg) noexcept { return neg ? -0.0f : 0.0f; } + static constexpr double limb(value_type x, int) noexcept { return static_cast(x); } + static constexpr value_type infinity(bool neg) noexcept + { + return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); + } + + static constexpr value_type pack_from_significand(const detail::exact_decimal::biguint& q, int e2, bool neg) noexcept + { + return exact_dyadic_to_float(q.get_bits(0, significand_bits), e2 - (significand_bits - 1), neg); + } + }; + + template + [[nodiscard]] BL_FORCE_INLINE constexpr typename Traits::value_type exact_decimal_to_native_value( + const detail::exact_decimal::biguint& coeff, + int dec_exp, + bool neg) noexcept + { + using detail::exact_decimal::biguint; + + if (coeff.is_zero()) + return Traits::zero(neg); + + biguint numerator = coeff; + biguint denominator{ 1 }; + int bin_exp = 0; + + if (dec_exp >= 0) + { + numerator = detail::exact_decimal::mul_big(coeff, detail::exact_decimal::pow5_big(dec_exp)); + bin_exp = dec_exp; + } + else + { + denominator = detail::exact_decimal::pow5_big(-dec_exp); + bin_exp = dec_exp; + } + + int ratio_exp = detail::exact_decimal::floor_log2_ratio(numerator, denominator); + biguint q = detail::exact_decimal::extract_rounded_significand_chunks( + numerator, + denominator, + ratio_exp, + Traits::significand_bits); + + if (q.bit_length() > Traits::significand_bits) + { + q.shr1(); + ++ratio_exp; + } + + const int e2 = bin_exp + ratio_exp; + if (e2 > Traits::max_binary_exponent) + return Traits::infinity(neg); + if (e2 < Traits::min_binary_exponent) + return Traits::zero(neg); + + return Traits::pack_from_significand(q, e2, neg); + } +} + +#endif diff --git a/include/fltx/detail/native_float_io.h b/include/fltx/detail/native_float_io.h new file mode 100644 index 0000000..cc10bbe --- /dev/null +++ b/include/fltx/detail/native_float_io.h @@ -0,0 +1,206 @@ +/** + * fltx/detail/native_float_io.h - Native f32/f64 constexpr string formatting traits. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#ifndef FLTX_DETAIL_NATIVE_FLOAT_IO_INCLUDED +#define FLTX_DETAIL_NATIVE_FLOAT_IO_INCLUDED + +#include +#include + +#include "fltx/aliases.h" +#include "fltx/detail/common_io.h" +#include "fltx/detail/native_float_decimal.h" + +namespace bl::detail::_native_float_io +{ + struct f64_io_traits + { + using value_type = f64; + using string_type = bl::f64_io_string; + using exact_decimal_traits = f64_io_traits; + + static constexpr int max_parse_order = 308; + static constexpr int min_parse_order = -324; + static constexpr int limb_count = 1; + static constexpr int significand_bits = 53; + static constexpr int max_binary_exponent = 1023; + static constexpr int min_normal_binary_exponent = -1022; + static constexpr int min_binary_exponent = -1074; + static constexpr int max_fixed_integer_digits = 309; + + static constexpr double limb(value_type x, int) noexcept { return x; } + static constexpr bool isnan(value_type x) noexcept { return fp::isnan(x); } + static constexpr bool isinf(value_type x) noexcept { return fp::isinf(x); } + static constexpr bool iszero(value_type x) noexcept { return x == 0.0; } + static constexpr bool is_negative(value_type x) noexcept { return fp::signbit(x); } + static constexpr value_type abs(value_type x) noexcept { return fp::fabs(x); } + static constexpr value_type zero(bool neg = false) noexcept { return neg ? -0.0 : 0.0; } + static constexpr value_type infinity(bool neg = false) noexcept { return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); } + static constexpr value_type quiet_nan() noexcept { return std::numeric_limits::quiet_NaN(); } + + static constexpr fltx_char_result to_chars_general(char* first, char* last, value_type x, int precision, bool strip_trailing_zeros) + { + return detail::emit_general_decimal_for_traits(first, last, x, precision, strip_trailing_zeros); + } + + static constexpr fltx_char_result to_chars_fixed(char* first, char* last, value_type x, int precision, bool strip_trailing_zeros) + { + return detail::emit_exact_fixed_decimal_to_chars( + first, + last, + x, + precision, + strip_trailing_zeros, + iszero(x), + is_negative(x)); + } + + static constexpr fltx_char_result to_chars_default_fixed( + char* first, + char* last, + value_type x, + int precision, + int, + int, + bool strip_trailing_zeros) + { + return to_chars_fixed(first, last, x, precision, strip_trailing_zeros); + } + + static constexpr fltx_char_result to_chars_scientific_frac(char* first, char* last, value_type x, int precision, bool strip_trailing_zeros) + { + return detail::emit_scientific_frac_for_traits(first, last, x, precision, strip_trailing_zeros); + } + + static constexpr fltx_char_result to_chars_scientific_sig(char* first, char* last, value_type x, int precision, bool strip_trailing_zeros) + { + return detail::emit_scientific_sig_for_traits(first, last, x, precision, strip_trailing_zeros); + } + + static constexpr bool scientific_digits(value_type x, int sig, string_type& digits, int& exp10) + { + return exact_decimal::exact_scientific_digits(x, sig, digits, exp10); + } + + static constexpr value_type exact_uint64_to_value(std::uint64_t value, bool neg) noexcept + { + const value_type out = static_cast(value); + return neg ? -out : out; + } + + static constexpr bool compact_decimal_to_value(std::uint64_t coeff, int dec_exp, bool neg, value_type& out) noexcept + { + return exact_decimal::compact_decimal_to_value(coeff, dec_exp, neg, out); + } + + static constexpr value_type exact_decimal_to_value(const detail::exact_decimal::biguint& coeff, int dec_exp, bool neg) noexcept + { + return detail::_native_float_decimal::exact_decimal_to_native_value(coeff, dec_exp, neg); + } + + static constexpr value_type pack_from_significand(const exact_decimal::biguint& q, int e2, bool neg) noexcept + { + return detail::_native_float_decimal::exact_dyadic_to_double(q.get_bits(0, significand_bits), e2 - (significand_bits - 1), neg); + } + }; + + struct f32_io_traits + { + using value_type = f32; + using string_type = bl::f32_io_string; + using exact_decimal_traits = f32_io_traits; + + static constexpr int max_parse_order = 38; + static constexpr int min_parse_order = -46; + static constexpr int limb_count = 1; + static constexpr int significand_bits = 24; + static constexpr int max_binary_exponent = 127; + static constexpr int min_normal_binary_exponent = -126; + static constexpr int min_binary_exponent = -149; + static constexpr int max_fixed_integer_digits = 39; + + static constexpr double limb(value_type x, int) noexcept { return static_cast(x); } + static constexpr bool isnan(value_type x) noexcept { return fp::isnan(x); } + static constexpr bool isinf(value_type x) noexcept { return fp::isinf(x); } + static constexpr bool iszero(value_type x) noexcept { return x == 0.0f; } + static constexpr bool is_negative(value_type x) noexcept { return fp::signbit(x); } + static constexpr value_type abs(value_type x) noexcept { return fp::fabs(x); } + static constexpr value_type zero(bool neg = false) noexcept { return neg ? -0.0f : 0.0f; } + static constexpr value_type infinity(bool neg = false) noexcept { return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); } + static constexpr value_type quiet_nan() noexcept { return std::numeric_limits::quiet_NaN(); } + + static constexpr fltx_char_result to_chars_general(char* first, char* last, value_type x, int precision, bool strip_trailing_zeros) + { + return detail::emit_general_decimal_for_traits(first, last, x, precision, strip_trailing_zeros); + } + + static constexpr fltx_char_result to_chars_fixed(char* first, char* last, value_type x, int precision, bool strip_trailing_zeros) + { + return detail::emit_exact_fixed_decimal_to_chars( + first, + last, + x, + precision, + strip_trailing_zeros, + iszero(x), + is_negative(x)); + } + + static constexpr fltx_char_result to_chars_default_fixed( + char* first, + char* last, + value_type x, + int precision, + int, + int, + bool strip_trailing_zeros) + { + return to_chars_fixed(first, last, x, precision, strip_trailing_zeros); + } + + static constexpr fltx_char_result to_chars_scientific_frac(char* first, char* last, value_type x, int precision, bool strip_trailing_zeros) + { + return detail::emit_scientific_frac_for_traits(first, last, x, precision, strip_trailing_zeros); + } + + static constexpr fltx_char_result to_chars_scientific_sig(char* first, char* last, value_type x, int precision, bool strip_trailing_zeros) + { + return detail::emit_scientific_sig_for_traits(first, last, x, precision, strip_trailing_zeros); + } + + static constexpr bool scientific_digits(value_type x, int sig, string_type& digits, int& exp10) + { + return exact_decimal::exact_scientific_digits(x, sig, digits, exp10); + } + + static constexpr value_type exact_uint64_to_value(std::uint64_t value, bool neg) noexcept + { + const value_type out = static_cast(value); + return neg ? -out : out; + } + + static constexpr bool compact_decimal_to_value(std::uint64_t coeff, int dec_exp, bool neg, value_type& out) noexcept + { + return exact_decimal::compact_decimal_to_value(coeff, dec_exp, neg, out); + } + + static constexpr value_type exact_decimal_to_value(const detail::exact_decimal::biguint& coeff, int dec_exp, bool neg) noexcept + { + return detail::_native_float_decimal::exact_decimal_to_native_value(coeff, dec_exp, neg); + } + + static constexpr value_type pack_from_significand(const exact_decimal::biguint& q, int e2, bool neg) noexcept + { + return detail::_native_float_decimal::exact_dyadic_to_float(q.get_bits(0, significand_bits), e2 - (significand_bits - 1), neg); + } + }; + +} // namespace bl::detail::_native_float_io + +#endif diff --git a/include/fltx/detail/pow_tables.h b/include/fltx/detail/pow_tables.h new file mode 100644 index 0000000..9f95776 --- /dev/null +++ b/include/fltx/detail/pow_tables.h @@ -0,0 +1,815 @@ +/** + * fltx/detail/pow_tables.h - Shared exact power lookup table storage. + * + * Generated from exact integer and rational decompositions. + */ + +#ifndef FLTX_DETAIL_POW_TABLES_INCLUDED +#define FLTX_DETAIL_POW_TABLES_INCLUDED +#include +#include + +namespace bl::detail { + +struct pow_table_entry +{ + double x0; + double x1; + double x2; + double x3; +}; + +namespace pow_tables { + +inline constexpr int pow10_min_exponent = -323; +inline constexpr int pow10_max_exponent = 308; + +inline constexpr pow_table_entry pow10_table[] = { + pow_table_entry{ 0x0.0000000000002p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-323 + pow_table_entry{ 0x0.0000000000014p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-322 + pow_table_entry{ 0x0.00000000000cap-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-321 + pow_table_entry{ 0x0.00000000007e8p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-320 + pow_table_entry{ 0x0.0000000004f10p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-319 + pow_table_entry{ 0x0.00000000316a2p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-318 + pow_table_entry{ 0x0.00000001ee257p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-317 + pow_table_entry{ 0x0.000000134d761p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-316 + pow_table_entry{ 0x0.000000c1069cdp-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-315 + pow_table_entry{ 0x0.0000078a42205p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-314 + pow_table_entry{ 0x0.00004b6695433p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-313 + pow_table_entry{ 0x0.0002f201d49fbp-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-312 + pow_table_entry{ 0x0.001d74124e3d1p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-311 + pow_table_entry{ 0x0.012688b70e62bp-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-310 + pow_table_entry{ 0x0.0b8157268fdafp-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-309 + pow_table_entry{ 0x0.730d67819e8d2p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-308 + pow_table_entry{ 0x1.1fa182c40c60ep-1020, -0x0.0000000000002p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-307 + pow_table_entry{ 0x1.6789e3750f791p-1017, -0x0.0000000000006p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-306 + pow_table_entry{ 0x1.c16c5c5253575p-1014, 0x0.0000000000008p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-305 + pow_table_entry{ 0x1.18e3b9b374169p-1010, 0x0.000000000024bp-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-304 + pow_table_entry{ 0x1.5f1ca820511c3p-1007, 0x0.00000000036f0p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-303 + pow_table_entry{ 0x1.b6e3d22865634p-1004, 0x0.0000000012565p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-302 + pow_table_entry{ 0x1.124e63593f5e1p-1000, -0x0.0000000148a0ep-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-301 + pow_table_entry{ 0x1.56e1fc2f8f359p-997, -0x0.00000004d6491p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-300 + pow_table_entry{ 0x1.ac9a7b3b7302fp-994, 0x0.0000000fa1259p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-299 + pow_table_entry{ 0x1.0be08d0527e1dp-990, 0x0.0000069c4b77fp-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-298 + pow_table_entry{ 0x1.4ed8b04671da5p-987, -0x0.00001de50d50dp-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-297 + pow_table_entry{ 0x1.a28edc580e50ep-984, -0x0.00002af285285p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-296 + pow_table_entry{ 0x1.059949b708f29p-980, -0x0.0011ad7933930p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-295 + pow_table_entry{ 0x1.46ff9c24cb2f3p-977, -0x0.0030c6bc03be1p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-294 + pow_table_entry{ 0x1.98bf832dfdfb0p-974, -0x0.05e7c358256cbp-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-293 + pow_table_entry{ 0x1.feef63f97d79cp-971, -0x0.3b0da171763ecp-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-292 + pow_table_entry{ 0x1.3f559e7bee6c1p-967, 0x1.b177b191618c5p-1022, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e-291 + pow_table_entry{ 0x1.8f2b061aea072p-964, -0x1.f115310523085p-1018, 0x0.0000000000005p-1022, 0x0.0000000000000p+0 }, // 1e-290 + pow_table_entry{ 0x1.f2f5c7a1a488ep-961, -0x1.b569f519af297p-1017, -0x0.000000000000dp-1022, 0x0.0000000000000p+0 }, // 1e-289 + pow_table_entry{ 0x1.37d99cc506d59p-957, -0x1.44588e4c035e8p-1011, 0x0.00000000002bbp-1022, 0x0.0000000000000p+0 }, // 1e-288 + pow_table_entry{ 0x1.85d003f6488afp-954, -0x1.2add63be086c3p-1009, -0x0.00000000004b2p-1022, 0x0.0000000000000p+0 }, // 1e-287 + pow_table_entry{ 0x1.e74404f3daadbp-951, -0x1.baca5e56c543ap-1005, 0x0.0000000001111p-1022, 0x0.0000000000000p+0 }, // 1e-286 + pow_table_entry{ 0x1.308a831868ac9p-947, -0x1.94be7af63b4a4p-1001, -0x0.0000000075556p-1022, 0x0.0000000000000p+0 }, // 1e-285 + pow_table_entry{ 0x1.7cad23de82d7bp-944, -0x1.f3dc33679439bp-999, 0x0.000000036aaa0p-1022, 0x0.0000000000000p+0 }, // 1e-284 + pow_table_entry{ 0x1.dbd86cd6238d9p-941, 0x1.c7965fdf435bfp-995, 0x0.000000322aa3cp-1022, 0x0.0000000000000p+0 }, // 1e-283 + pow_table_entry{ 0x1.29674405d6388p-937, -0x1.8d081051d79a2p-993, 0x0.000000f5aa655p-1022, 0x0.0000000000000p+0 }, // 1e-282 + pow_table_entry{ 0x1.73c115074bc6ap-934, -0x1.f04a14664d80ap-990, 0x0.00000198a7f4ep-1022, 0x0.0000000000000p+0 }, // 1e-281 + pow_table_entry{ 0x1.d0b15a491eb84p-931, 0x1.64e8d9a007c7dp-985, -0x0.00003009706efp-1022, 0x0.0000000000000p+0 }, // 1e-280 + pow_table_entry{ 0x1.226ed86db3333p-927, -0x1.20ee77fbfb232p-981, 0x0.00021fa19baaap-1022, 0x0.0000000000000p+0 }, // 1e-279 + pow_table_entry{ 0x1.6b0a8e891ffffp-924, 0x1.96d5ea0506142p-978, -0x0.006ac3afeb55ep-1022, 0x0.0000000000000p+0 }, // 1e-278 + pow_table_entry{ 0x1.c5cd322b67fffp-921, 0x1.f916c90c8f324p-976, -0x0.002ba4df315b0p-1022, 0x0.0000000000000p+0 }, // 1e-277 + pow_table_entry{ 0x1.1ba03f5b21000p-917, -0x1.e228e12c13405p-971, 0x0.1e4b8f4812724p-1022, 0x0.0000000000000p+0 }, // 1e-276 + pow_table_entry{ 0x1.62884f31e93ffp-914, 0x1.a54ce688e7efap-968, 0x0.2ef398d0b8769p-1022, 0x0.0000000000000p+0 }, // 1e-275 + pow_table_entry{ 0x1.bb2a62fe638ffp-911, 0x1.0ea0202b21eb9p-965, -0x1.c54f80fb196bcp-1019, -0x0.0000000000002p-1022 }, // 1e-274 + pow_table_entry{ 0x1.14fa7ddefe3a0p-907, -0x1.d6dbebe50accdp-961, 0x1.64ae4f63101cap-1015, 0x0.000000000002ep-1022 }, // 1e-273 + pow_table_entry{ 0x1.5a391d56bdc87p-904, 0x1.b36d1921b2800p-958, 0x1.7bb3c677a847ap-1013, -0x0.0000000000033p-1022 }, // 1e-272 + pow_table_entry{ 0x1.b0c764ac6d3a9p-901, 0x1.20485f6a1f200p-955, 0x1.daa0b81592598p-1010, 0x0.0000000000604p-1022 }, // 1e-271 + pow_table_entry{ 0x1.0e7c9eebc444ap-897, -0x1.97a588bb59180p-952, 0x1.28a4730d7b77fp-1006, 0x0.0000000003c26p-1022 }, // 1e-270 + pow_table_entry{ 0x1.521bc6a6b555cp-894, 0x1.01388a8ae8510p-948, 0x1.72cd8fd0da55fp-1003, 0x0.0000000005980p-1022 }, // 1e-269 + pow_table_entry{ 0x1.a6a2b85062ab3p-891, 0x1.4186ad2da2654p-945, 0x1.cf80f3c510eb7p-1000, -0x0.00000000c8104p-1022 }, // 1e-268 + pow_table_entry{ 0x1.0825b3323dab0p-887, 0x1.23d0b0f215fd3p-943, -0x1.bc9ecf49aad9bp-997, -0x0.0000000fd0a2bp-1022 }, // 1e-267 + pow_table_entry{ 0x1.4a2f1ffecd15cp-884, 0x1.6cc4dd2e9b7c7p-940, 0x1.a872f9c7d4dfbp-995, 0x0.00000021d9a51p-1022 }, // 1e-266 + pow_table_entry{ 0x1.9cbae7fe805b3p-881, 0x1.c7f6147a425b9p-937, 0x1.28fb839ca17a1p-996, 0x0.000000128072ap-1022 }, // 1e-265 + pow_table_entry{ 0x1.01f4d0ff10390p-877, -0x1.c60c66672d0d9p-934, 0x1.0b99d3241e4ecp-988, 0x0.00001339047a5p-1022 }, // 1e-264 + pow_table_entry{ 0x1.4272053ed4474p-874, -0x1.1bc7c0007c287p-930, -0x1.d8bfdc096d0ecp-984, -0x0.00013fc5d338ap-1022 }, // 1e-263 + pow_table_entry{ 0x1.930e868e89591p-871, -0x1.62b9b0009b329p-927, -0x1.4eefd30bc8527p-981, -0x0.000c7dba40368p-1022 }, // 1e-262 + pow_table_entry{ 0x1.f7d228322baf5p-868, 0x1.224bf1ff9f006p-923, 0x1.5d5438314598fp-978, -0x0.003ce94682212p-1022 }, // 1e-261 + pow_table_entry{ 0x1.3ae3591f5b4d9p-864, 0x1.b56f773fc3604p-919, -0x1.25ab5ce134807p-974, 0x0.039ee33eeab4cp-1022 }, // 1e-260 + pow_table_entry{ 0x1.899c2f6732210p-861, -0x1.ee9a557825e3ep-915, 0x1.a43a72f99f97ep-969, -0x0.3bcb1f8ad4f05p-1022 }, // 1e-259 + pow_table_entry{ 0x1.ec033b40fea93p-858, 0x1.95bf1529d0a33p-912, 0x1.a921f700efbabp-971, 0x0.2a10c493ae9cbp-1022 }, // 1e-258 + pow_table_entry{ 0x1.338205089f29cp-854, 0x1.f65db4e889980p-910, -0x1.dec958b3ed457p-964, 0x1.8a4a7adc4d21fp-1018 }, // 1e-257 + pow_table_entry{ 0x1.8062864ac6f43p-851, 0x1.39fa911155ff0p-906, -0x1.2b3dd770744b6p-960, -0x1.1322e66c9f959p-1015 }, // 1e-256 + pow_table_entry{ 0x1.e07b27dd78b14p-848, -0x1.de1b2aa952051p-905, -0x1.d83535324578fp-959, 0x1.5028bff0710a1p-1013 }, // 1e-255 + pow_table_entry{ 0x1.2c4cf8ea6b6ecp-844, 0x1.daa5e0aac597ap-898, -0x1.74e42827ed6d7p-952, -0x1.2b79a2026e567p-1007 }, // 1e-254 + pow_table_entry{ 0x1.77603725064a8p-841, -0x1.aeb0a72a89028p-895, 0x1.6f166e70b9b99p-952, -0x1.d9602a0c27b02p-1006 }, // 1e-253 + pow_table_entry{ 0x1.d53844ee47dd1p-838, 0x1.e5a32f0ad4bcep-892, 0x1.cadc0a0ce827fp-949, -0x1.4fb8348f319c2p-1003 }, // 1e-252 + pow_table_entry{ 0x1.25432b14ecea3p-834, -0x1.41e80a64ec27dp-890, 0x1.1ec986481118fp-945, 0x1.5c59be4d01fcdp-1000 }, // 1e-251 + pow_table_entry{ 0x1.6e93f5da2824cp-831, -0x1.6498833f89cc7p-885, -0x1.3308304bd541ap-943, -0x1.323f487ef60ffp-999 }, // 1e-250 + pow_table_entry{ 0x1.ca38f350b22dfp-828, -0x1.bdbea40f6c3f9p-882, 0x1.d006b87426adcp-937, -0x1.2fd9e353d6728p-993 }, // 1e-249 + pow_table_entry{ 0x1.1e6398126f5cbp-824, 0x1.a5a365d971612p-880, 0x1.10219a44c164cp-936, -0x1.7bd05c28cc0f2p-990 }, // 1e-248 + pow_table_entry{ 0x1.65fc7e170b33ep-821, -0x1.f0f3c0b032469p-877, -0x1.aaf57fca83908p-931, -0x1.76b11cccbfc4cp-985 }, // 1e-247 + pow_table_entry{ 0x1.bf7b9d9cce00dp-818, 0x1.64b3d3c8f049fp-872, 0x1.d49a4085b716bp-929, 0x1.5d14e0008250cp-985 }, // 1e-246 + pow_table_entry{ 0x1.17ad428200c08p-814, 0x1.5ef0645d962e3p-868, 0x1.a49c0d0a724dcp-922, 0x1.76d16860028b9p-976 }, // 1e-245 + pow_table_entry{ 0x1.5d98932280f0ap-811, 0x1.b6ac7d74fbb9cp-865, 0x1.0dc3104d0ee13p-919, 0x1.d485c278032e8p-973 }, // 1e-244 + pow_table_entry{ 0x1.b4feb7eb212cdp-808, 0x1.22bce691d541bp-865, -0x1.76615cfd6b33dp-919, -0x1.b2c6674fe02f5p-973 }, // 1e-243 + pow_table_entry{ 0x1.111f32f2f4bc0p-804, 0x1.2d6d8406c9524p-859, 0x1.4b0192f0ce7fdp-914, -0x1.8fbc0091ec1d9p-969 }, // 1e-242 + pow_table_entry{ 0x1.5566ffafb1eb0p-801, 0x1.78c8e5087ba6dp-856, 0x1.9dc1f7ad021fcp-911, 0x1.8a9fe9331b61fp-971 }, // 1e-241 + pow_table_entry{ 0x1.aac0bf9b9e65cp-798, 0x1.d6fb1e4a9a909p-853, -0x1.fd66c533deac2p-907, -0x1.fc257039003b9p-961 }, // 1e-240 + pow_table_entry{ 0x1.0ab877c142ffap-794, -0x1.6cd18688afb2dp-848, -0x1.5f301da03595dp-902, 0x1.c26899dc5fdadp-957 }, // 1e-239 + pow_table_entry{ 0x1.4d6695b193bf8p-791, 0x1.bfd0bea92303bp-848, -0x1.b7e1284217da0p-902, 0x1.9816029bbe8bep-957 }, // 1e-238 + pow_table_entry{ 0x1.a0c03b1df8af6p-788, 0x1.17e27729b5e25p-844, -0x1.92ecb9294ee84p-898, 0x1.fe1b8342ae2edp-954 }, // 1e-237 + pow_table_entry{ 0x1.047824f2bb6dap-784, -0x1.a8893ac2f7295p-839, 0x1.c216062317577p-893, -0x1.b04bb37d94c8bp-948 }, // 1e-236 + pow_table_entry{ 0x1.45962e2f6a490p-781, 0x1.ed54768c4b0c6p-836, 0x1.329b87abdd2d4p-890, 0x1.f1d0afd183029p-944 }, // 1e-235 + pow_table_entry{ 0x1.96fbb9bb44db4p-778, 0x1.3454ca17aee7cp-832, -0x1.017b2cd2570edp-888, 0x1.b9136f178f0cep-943 }, // 1e-234 + pow_table_entry{ 0x1.fcbaa82a16121p-775, 0x1.8169fc9d9aa1bp-829, -0x1.41d9f806ecd28p-885, 0x1.3ac256eb96809p-943 }, // 1e-233 + pow_table_entry{ 0x1.3df4a91a4dcb5p-771, -0x1.1e3b843afeb5ep-826, -0x1.64941d822a01cp-880, -0x1.f9da344d660f8p-934 }, // 1e-232 + pow_table_entry{ 0x1.8d71d360e13e2p-768, 0x1.346b356c83394p-824, 0x1.091b6c752df72p-879, -0x1.e1430582fe4d7p-933 }, // 1e-231 + pow_table_entry{ 0x1.f0ce4839198dbp-765, -0x1.9f9e7f4e16fe2p-819, 0x1.296c48f24f2eap-873, -0x1.0b3278dc77bc2p-927 }, // 1e-230 + pow_table_entry{ 0x1.3680ed23aff89p-761, -0x1.83c30f90ce5edp-815, -0x1.187149a23a0b8p-871, 0x1.6401d1d8d4a9cp-925 }, // 1e-229 + pow_table_entry{ 0x1.8421286c9bf6bp-758, -0x1.c967a6ea03ed1p-813, 0x1.50b931fa9bb8dp-867, 0x1.bd02464f09d43p-922 }, // 1e-228 + pow_table_entry{ 0x1.e5297287c2f45p-755, 0x1.e21f37adbd8bep-809, -0x1.ad8c40c35eac8p-863, 0x1.0b10b5f8b3125p-917 }, // 1e-227 + pow_table_entry{ 0x1.2f39e794d9d8bp-751, 0x1.ad5382cc96776p-805, 0x1.f3885785e4d43p-859, 0x1.4dd4e376dfd6ep-914 }, // 1e-226 + pow_table_entry{ 0x1.7b08617a104eep-748, 0x1.18a8637fbc154p-802, 0x1.c1a9b59d78250p-858, -0x1.7ad78eada0cd9p-913 }, // 1e-225 + pow_table_entry{ 0x1.d9ca79d89462ap-745, -0x1.425b0740a9caep-800, 0x1.190a11826b172p-854, -0x1.d98d72590900fp-910 }, // 1e-224 + pow_table_entry{ 0x1.281e8c275cbdap-741, 0x1.36871b7795e13p-796, 0x1.afa64af182ee7p-850, 0x1.6c03cc442d2fbp-905 }, // 1e-223 + pow_table_entry{ 0x1.72262f3133ed1p-738, -0x1.3deb8ed542534p-792, 0x1.1b8fddade3aa1p-847, -0x1.c7da05563c230p-905 }, // 1e-222 + pow_table_entry{ 0x1.ceafbafd80e85p-735, -0x1.1acce51525d02p-790, 0x1.6273d5195c949p-844, 0x1.b8c5ef2a869a8p-899 }, // 1e-221 + pow_table_entry{ 0x1.212dd4de70913p-731, 0x1.3cffc34b2177cp-788, -0x1.13bcd68131192p-843, 0x1.37bb57a942094p-899 }, // 1e-220 + pow_table_entry{ 0x1.69794a160cb58p-728, -0x1.9cf012f8858a9p-783, -0x1.2b1581842fabfp-837, 0x1.985aa2d93928cp-892 }, // 1e-219 + pow_table_entry{ 0x1.c3d79c9b8fe2ep-725, -0x1.02160bdb5376ap-779, 0x1.8a251e1ac4691p-834, 0x1.ff38a5c7c3b97p-888 }, // 1e-218 + pow_table_entry{ 0x1.1a66c1e139eddp-721, -0x1.a14dc769142a2p-775, -0x1.09a8cd2f453e5p-830, -0x1.01f2618c96b06p-886 }, // 1e-217 + pow_table_entry{ 0x1.6100725988694p-718, -0x1.09a139435934bp-772, 0x1.59f67fc274b91p-826, -0x1.509bbe7bef172p-881 }, // 1e-216 + pow_table_entry{ 0x1.b9408eefea839p-715, -0x1.4c0987942f81dp-769, -0x1.4f8be04cee18bp-823, 0x1.6cf54794548c7p-880 }, // 1e-215 + pow_table_entry{ 0x1.13c85955f2923p-711, 0x1.b07a0b43624eep-765, -0x1.51b76c3014cf7p-819, 0x1.3906532f2d35fp-874 }, // 1e-214 + pow_table_entry{ 0x1.58ba6fab6f36cp-708, 0x1.1c988e143ae29p-762, 0x1.676ae30f97f2ep-818, -0x1.e2e060141df25p-873 }, // 1e-213 + pow_table_entry{ 0x1.aee90b964b047p-705, 0x1.63beb199499b3p-759, 0x1.705166f4df7bep-813, 0x1.348cf0fcdb522p-867 }, // 1e-212 + pow_table_entry{ 0x1.0d51a73deee2dp-701, -0x1.a1a8d10031ff0p-755, 0x1.98cb81642eb5cp-811, -0x1.f93f4b0fb7655p-866 }, // 1e-211 + pow_table_entry{ 0x1.50a6110d6a9b8p-698, -0x1.0a1305403e7ecp-752, 0x1.fefe61bd3a633p-808, -0x1.3bc78ee9d29f5p-862 }, // 1e-210 + pow_table_entry{ 0x1.a4cf9550c5426p-695, -0x1.4c97c6904e1e7p-749, 0x1.3f5efd16447e0p-804, -0x1.455cb95223a39p-858 }, // 1e-209 + pow_table_entry{ 0x1.0701bd527b498p-691, -0x1.cfdedc1a30d30p-745, -0x1.1c3250e90a98ap-799, -0x1.96b3e7a6ac8c7p-855 }, // 1e-208 + pow_table_entry{ 0x1.48c22ca71a1bdp-688, 0x1.bc296cdf42f84p-742, -0x1.633ee5234d3edp-796, 0x1.80e7c79bea142p-850 }, // 1e-207 + pow_table_entry{ 0x1.9af2b7d0e0a2dp-685, -0x1.a9986fd1d8937p-740, 0x1.0fc5864f7dc61p-795, -0x1.ede467d1b66dep-851 }, // 1e-206 + pow_table_entry{ 0x1.00d7b2e28c65cp-681, -0x1.3fe8bc64eb849p-741, -0x1.6248c0e516437p-795, -0x1.a576071890255p-850 }, // 1e-205 + pow_table_entry{ 0x1.410d9f9b2f7f3p-678, -0x1.8fe2eb7e2665cp-738, 0x1.45250ee1a42bbp-792, -0x1.da711bd685d53p-852 }, // 1e-204 + pow_table_entry{ 0x1.91510781fb5f0p-675, -0x1.07cf6e9976c00p-729, 0x1.acb37294d069bp-784, 0x1.37b5de53a67b1p-838 }, // 1e-203 + pow_table_entry{ 0x1.f5a549627a36cp-672, -0x1.49c34a3fd4700p-726, 0x1.0bf0279d02421p-780, 0x1.0b46abd12033cp-836 }, // 1e-202 + pow_table_entry{ 0x1.39874ddd8c623p-668, 0x1.31e5f1981b3a0p-722, 0x1.4eec318442d29p-777, 0x1.538615b15a103p-831 }, // 1e-201 + pow_table_entry{ 0x1.87e92154ef7acp-665, 0x1.f97db7f888221p-721, -0x1.7563086ab1e31p-776, -0x1.5e6193893daf3p-830 }, // 1e-200 + pow_table_entry{ 0x1.e9e369aa2b597p-662, 0x1.3bee92fb55155p-717, -0x1.f4aef2a15796fp-771, -0x1.ad7e7e1ae346cp-825 }, // 1e-199 + pow_table_entry{ 0x1.322e220a5b17ep-658, 0x1.e2ba8dee8a96ap-712, 0x1.a389542d94a0dp-766, 0x1.7390f12f31f3dp-821 }, // 1e-198 + pow_table_entry{ 0x1.7eb9aa8cf1ddep-655, 0x1.6da4c5a8b4f14p-711, 0x1.8d75271f3920fp-768, 0x1.0752d7afe70bbp-822 }, // 1e-197 + pow_table_entry{ 0x1.de6815302e556p-652, -0x1.8dbc823b4774ap-706, 0x1.0f869387383b5p-760, -0x1.9db6c39320f99p-814 }, // 1e-196 + pow_table_entry{ 0x1.2b010d3e1cf56p-648, -0x1.f895d1650ca8ep-702, -0x1.592f8f2df36bdp-758, 0x1.f5b717102d902p-812 }, // 1e-195 + pow_table_entry{ 0x1.75c1508da432bp-645, -0x1.daed16f93f4c6p-701, -0x1.af7b72f97046cp-755, 0x1.7324dcd438f43p-809 }, // 1e-194 + pow_table_entry{ 0x1.d331a4b10d3f6p-642, -0x1.946a172de3c7ep-696, -0x1.b5a4fb7cc5869p-756, 0x1.fdc28128e6271p-811 }, // 1e-193 + pow_table_entry{ 0x1.23ff06eea847ap-638, -0x1.fcc24e7cae5cfp-692, 0x1.f773c71690246p-747, -0x1.782ccde8ce04fp-804 }, // 1e-192 + pow_table_entry{ 0x1.6cfec8aa52598p-635, -0x1.efcb886f67d0ap-691, 0x1.d542e370d0b5ep-746, -0x1.d638016301863p-801 }, // 1e-191 + pow_table_entry{ 0x1.c83e7ad4e6efep-632, -0x1.35df3545a0e26p-687, -0x1.b56c63b2fb1cbp-743, 0x1.b439fe443e184p-798 }, // 1e-190 + pow_table_entry{ 0x1.1d270cc51055fp-628, -0x1.60d5c0a5c246cp-682, 0x1.774e20d811871p-738, -0x1.7bd6f045564c3p-792 }, // 1e-189 + pow_table_entry{ 0x1.6470cff6546b6p-625, 0x1.46f4cf30cd279p-679, 0x1.d521a90e15e8dp-735, -0x1.b59958ad57be8p-790 }, // 1e-188 + pow_table_entry{ 0x1.bd8d03f3e9864p-622, -0x1.9d37f40bfe3a2p-678, -0x1.b595ecae649d0p-732, -0x1.17fd76c56d713p-790 }, // 1e-187 + pow_table_entry{ 0x1.1678227871f3ep-618, 0x1.bf6f41de2046fp-672, -0x1.845f6cfb3fb89p-726, 0x1.fd440657126e6p-780 }, // 1e-186 + pow_table_entry{ 0x1.5c162b168e70ep-615, 0x1.7a5892ad42c52p-672, 0x1.a88b7c5f05956p-727, -0x1.b57c09947b00ep-784 }, // 1e-185 + pow_table_entry{ 0x1.b31bb5dc320d2p-612, -0x1.c4e22914ed913p-666, -0x1.3daa34912720bp-721, 0x1.b77493d019990p-775 }, // 1e-184 + pow_table_entry{ 0x1.0ff151a99f483p-608, -0x1.b0d59ad147ac0p-666, 0x1.cbacf92a3c5cbp-720, 0x1.2a8dc620fff9dp-775 }, // 1e-183 + pow_table_entry{ 0x1.53eda614071a4p-605, -0x1.21d0b01859997p-659, 0x1.1f4c1bba65b9fp-716, -0x1.159d90ad800f7p-773 }, // 1e-182 + pow_table_entry{ 0x1.a8e90f9908e0dp-602, -0x1.6a44dc1e6fffdp-656, 0x1.2ce3e4551fe51p-710, -0x1.4ad827a6c700ap-765 }, // 1e-181 + pow_table_entry{ 0x1.0991a9bfa58c8p-598, -0x1.89ac264c17ff8p-654, 0x1.e07375a99f794p-709, 0x1.89c739be1cfd0p-764 }, // 1e-180 + pow_table_entry{ 0x1.4bf6142f8eefap-595, -0x1.ec172fdf1dff6p-651, 0x1.2c48298a03abdp-705, -0x1.84f1bdf496f0fp-759 }, // 1e-179 + pow_table_entry{ 0x1.9ef3993b72ab8p-592, 0x1.6638c10a46a03p-646, 0x1.bbad19f6424b6p-701, -0x1.cc5c5ae3795a6p-757 }, // 1e-178 + pow_table_entry{ 0x1.03583fc527ab3p-588, 0x1.bfc6f14cd8484p-643, 0x1.54c3039e96f1bp-701, -0x1.fb9b8ce2bd879p-757 }, // 1e-177 + pow_table_entry{ 0x1.442e4fb671960p-585, 0x1.7dc56d0072d28p-643, 0x1.a9f3c4863cae2p-698, -0x1.9ea09c06db3a6p-752 }, // 1e-176 + pow_table_entry{ 0x1.9539e3a40dfb8p-582, 0x1.dd36c8408f872p-640, 0x1.0a385ad3e5ecdp-694, -0x1.9230c224823ccp-755 }, // 1e-175 + pow_table_entry{ 0x1.fa885c8d117a6p-579, 0x1.2a423d2859b47p-636, 0x1.a66338c46fb40p-690, 0x1.f8250c354974dp-746 }, // 1e-174 + pow_table_entry{ 0x1.3c9539d82aec8p-575, -0x1.d165a671b1fbdp-630, 0x1.43ff01bd62e84p-685, 0x1.3b1727a14de90p-742 }, // 1e-173 + pow_table_entry{ 0x1.8bba884e35a7ap-572, -0x1.22df88070f3d6p-626, -0x1.ac04f74d1176cp-684, 0x1.89dcf189a1634p-739 }, // 1e-172 + pow_table_entry{ 0x1.eea92a61c3118p-569, 0x1.28d12bee59e69p-624, -0x1.0b831a902aea3p-680, -0x1.84eaf484fd910p-734 }, // 1e-171 + pow_table_entry{ 0x1.3529ba7d19eafp-565, 0x1.730576e9f0603p-621, 0x1.58ce0f65e52dap-676, -0x1.cc4b634c79ea7p-732 }, // 1e-170 + pow_table_entry{ 0x1.8274291c6065bp-562, -0x1.181c95adc9c3ep-617, -0x1.43f9b302861bfp-675, 0x1.c0a1c3e0679afp-729 }, // 1e-169 + pow_table_entry{ 0x1.e3113363787f2p-559, -0x1.af11dd8c9e1a7p-613, 0x1.e6b07e03cd85dp-668, 0x1.cc328d3620607p-724 }, // 1e-168 + pow_table_entry{ 0x1.2deac01e2b4f7p-555, -0x1.ad654efc5a107p-614, -0x1.fa3627b3f18bap-669, 0x1.f9f9841d43c43p-724 }, // 1e-167 + pow_table_entry{ 0x1.79657025b6235p-552, -0x1.10c5f515db84ap-606, -0x1.21e30ec683b7cp-660, 0x1.7cf0efca49297p-714 }, // 1e-166 + pow_table_entry{ 0x1.d7becc2f23ac2p-549, -0x1.53ddc96d49973p-605, -0x1.a96f49e09296ap-659, -0x1.1e96a2192461dp-714 }, // 1e-165 + pow_table_entry{ 0x1.26d73f9d764b9p-545, 0x1.95cab10dd900cp-600, -0x1.13cb1c58b73c5p-656, 0x1.4ce1dab04942ep-710 }, // 1e-164 + pow_table_entry{ 0x1.708d0f84d3de7p-542, 0x1.fd9eaea8a7a07p-596, 0x1.d4e84392235e9p-650, 0x1.14034a2b8b727p-704 }, // 1e-163 + pow_table_entry{ 0x1.ccb0536608d61p-539, 0x1.7d065a52d1889p-593, 0x1.4a225476ac364p-647, -0x1.a6fbe34991b0fp-701 }, // 1e-162 + pow_table_entry{ 0x1.1fee341fc585dp-535, -0x1.23b80f187a154p-590, -0x1.6355166ba8bc4p-644, 0x1.ef4523e409e2dp-698 }, // 1e-161 + pow_table_entry{ 0x1.67e9c127b6e74p-532, 0x1.26b3da42cecadp-588, 0x1.0f568fe5b452ep-643, 0x1.ac59b374316e2p-697 }, // 1e-160 + pow_table_entry{ 0x1.c1e43171a4a11p-529, 0x1.7060d0d3827d8p-585, 0x1.a99619ef90b3dp-639, 0x1.77020513dc9a1p-698 }, // 1e-159 + pow_table_entry{ 0x1.192e9ee706e4bp-525, -0x1.4670df5ef39c6p-579, -0x1.7b0117e522c7dp-634, 0x1.0ea61432c69e0p-690 }, // 1e-158 + pow_table_entry{ 0x1.5f7a46a0c89ddp-522, 0x1.67f2e8c94f7c8p-576, 0x1.131f5110ca432p-630, -0x1.56d8336043dd4p-686 }, // 1e-157 + pow_table_entry{ 0x1.b758d848fac55p-519, -0x1.3e105d045ca46p-573, 0x1.57e72554fcd3ep-627, 0x1.94dc6ff1eacaep-681 }, // 1e-156 + pow_table_entry{ 0x1.1297872d9cbb5p-515, -0x1.1b28e88ae79aep-571, -0x1.487c45570fdc8p-626, -0x1.7b1d0466a09b0p-684 }, // 1e-155 + pow_table_entry{ 0x1.573d68f903ea2p-512, 0x1.4f066ea92f3f3p-567, 0x1.32b254a996163p-622, -0x1.d9e4458048c1cp-681 }, // 1e-154 + pow_table_entry{ 0x1.ad0cc33744e4bp-509, -0x1.2e9bfad642788p-563, -0x1.01422c5808c89p-620, 0x1.dafa2a91fa50ep-674 }, // 1e-153 + pow_table_entry{ 0x1.0c27fa028b0efp-505, -0x1.3d217cc5e98b5p-559, -0x1.4192b76e0afabp-617, 0x1.51b8b53678e51p-671 }, // 1e-152 + pow_table_entry{ 0x1.4f31f8832dd2ap-502, 0x1.739624089c11ep-556, -0x1.191f765498db9p-610, -0x1.559d91d7be8e2p-664 }, // 1e-151 + pow_table_entry{ 0x1.a2fe76a3f9475p-499, -0x1.7c2297a9e74d7p-556, 0x1.04c560b2076c3p-610, -0x1.5827b26d718d0p-664 }, // 1e-150 + pow_table_entry{ 0x1.05df0a267bcc9p-495, 0x1.8935309ae7b7dp-551, -0x1.ba09472176b8dp-607, 0x1.51ce60f7320fbp-661 }, // 1e-149 + pow_table_entry{ 0x1.4756ccb01abfbp-492, 0x1.7ae09f3068697p-546, 0x1.d77467162b990p-604, 0x1.4c83f269fd274p-659 }, // 1e-148 + pow_table_entry{ 0x1.992c7fdc216fap-489, 0x1.b3318df90507ap-544, -0x1.b655cfe489301p-598, -0x1.e605b10fb838fp-652 }, // 1e-147 + pow_table_entry{ 0x1.ff779fd329cb9p-486, -0x1.e0020e88b9b68p-541, -0x1.1f5a1eed5be0fp-598, 0x1.03c71562cdc6bp-652 }, // 1e-146 + pow_table_entry{ 0x1.3faac3e3fa1f3p-482, 0x1.e9ff5b7545f6fp-536, 0x1.f4c67acaba693p-590, 0x1.b225c6d5dc09cp-644 }, // 1e-145 + pow_table_entry{ 0x1.8f9574dcf8a70p-479, 0x1.647f32529774bp-533, 0x1.71f8197d69038p-587, 0x1.1eaf388b530c3p-641 }, // 1e-144 + pow_table_entry{ 0x1.f37ad21436d0cp-476, 0x1.bd9efee73d51ep-530, 0x1.9cec3fb98688dp-585, -0x1.3349f2a3b0618p-639 }, // 1e-143 + pow_table_entry{ 0x1.382cc34ca2428p-472, -0x1.d2f9415ef359ap-527, -0x1.fbd8b05817d50p-582, -0x1.0038de9938f3cp-637 }, // 1e-142 + pow_table_entry{ 0x1.8637f41fcad32p-469, -0x1.23dbc8db58180p-523, -0x1.9eb3b71b87729p-577, -0x1.4047163f8730bp-634 }, // 1e-141 + pow_table_entry{ 0x1.e7c5f127bd87ep-466, 0x1.265a89dba3c3fp-521, -0x1.9829389a53cd3p-580, -0x1.058dbcf68fcd8p-635 }, // 1e-140 + pow_table_entry{ 0x1.30dbb6b8d674fp-462, -0x1.480769d6b9a59p-517, 0x1.780731e4fc5d0p-571, -0x1.fa378961a19e0p-627 }, // 1e-139 + pow_table_entry{ 0x1.7d12a4670c123p-459, -0x1.cd04a22634077p-513, -0x1.94fb80d0e245ep-567, -0x1.3c62b5dd0502cp-623 }, // 1e-138 + pow_table_entry{ 0x1.dc574d80cf16bp-456, 0x1.7f746aa07ded6p-511, -0x1.f474c20a35aebp-565, -0x1.8b7b635446437p-620 }, // 1e-137 + pow_table_entry{ 0x1.29b69070816e3p-452, -0x1.0573d5bb14ba9p-511, 0x1.cdc1ae679cb40p-567, 0x1.1a5c3d6a82badp-621 }, // 1e-136 + pow_table_entry{ 0x1.7424348ca1c9cp-449, -0x1.0a3686594ecf5p-503, 0x1.9c8264340307cp-557, 0x1.0583cd33148dap-612 }, // 1e-135 + pow_table_entry{ 0x1.d12d41afca3c3p-446, -0x1.4cc427efa2832p-500, 0x1.03a2fd4103c9bp-554, 0x1.46e4c07fd9b11p-609 }, // 1e-134 + pow_table_entry{ 0x1.22bc490dde65ap-442, -0x1.4ffa98f5c591fp-496, -0x1.76e886dd7687cp-552, -0x1.9d883d80bf8abp-608 }, // 1e-133 + pow_table_entry{ 0x1.6b6b5b5155ff0p-439, 0x1.701b033324265p-495, -0x1.d4a2a894d429bp-549, -0x1.0275267077b6bp-604 }, // 1e-132 + pow_table_entry{ 0x1.c6463225ab7ecp-436, 0x1.cc21c3ffed2fep-492, -0x1.49cb52ba09342p-546, 0x1.79db1fe6d4b75p-602 }, // 1e-131 + pow_table_entry{ 0x1.1bebdf578b2f4p-432, -0x1.b81ab96002f08p-486, -0x1.7387c4ed11702p-540, -0x1.313d70c0fbb0dp-594 }, // 1e-130 + pow_table_entry{ 0x1.62e6d72d6dfb0p-429, 0x1.d9de9847fc536p-483, -0x1.d069b62855cc3p-537, 0x1.04e6661d8ac5ep-592 }, // 1e-129 + pow_table_entry{ 0x1.bba08cf8c979dp-426, -0x1.afa9c1a60497dp-480, -0x1.12108ec9acfcep-536, -0x1.73c000b625114p-590 }, // 1e-128 + pow_table_entry{ 0x1.1544581b7dec2p-422, -0x1.1b94320f85bdcp-477, -0x1.55a52c9f060f0p-531, -0x1.f42c0038eb956p-585 }, // 1e-127 + pow_table_entry{ 0x1.5a956e225d672p-419, 0x1.4ec360b64c696p-473, 0x1.2a78c41c9c36ap-527, -0x1.389b8023933d6p-581 }, // 1e-126 + pow_table_entry{ 0x1.b13ac9aaf4c0fp-416, -0x1.762f1c7081f11p-472, 0x1.d45bd48f0d110p-526, 0x1.e4f67f4e1fcd2p-580 }, // 1e-125 + pow_table_entry{ 0x1.0ec4be0ad8f89p-412, 0x1.4588a38e6bb25p-466, 0x1.a92e59365a0abp-520, -0x1.b4397c1bcb07fp-574 }, // 1e-124 + pow_table_entry{ 0x1.5275ed8d8f36cp-409, -0x1.6915338df9611p-463, -0x1.d90c20f81ee56p-518, 0x1.bd7049ba846c2p-572 }, // 1e-123 + pow_table_entry{ 0x1.a71368f0f3047p-406, -0x1.c35a807177b96p-460, 0x1.d8586b64ecb0bp-514, -0x1.e999d1eb6d3c7p-568 }, // 1e-122 + pow_table_entry{ 0x1.086c219697e2cp-402, 0x1.979dbee454b0ap-458, 0x1.39ba18f89f735p-513, -0x1.90011999222e1p-567 }, // 1e-121 + pow_table_entry{ 0x1.4a8729fc3ddb7p-399, 0x1.fd852e9d69dcdp-455, -0x1.3bebb0649c57fp-509, -0x1.e802bffed5733p-565 }, // 1e-120 + pow_table_entry{ 0x1.9d28f47b4d525p-396, -0x1.831985bb3bac0p-452, -0x1.15cd38fb86dbep-507, 0x1.9dfc900175301p-562 }, // 1e-119 + pow_table_entry{ 0x1.023998cd10537p-392, 0x1.0e100c6afab48p-448, -0x1.5b40873a6892dp-504, -0x1.fa844bfe2d83fp-559 }, // 1e-118 + pow_table_entry{ 0x1.42c7ff0054685p-389, -0x1.5735f83d234f3p-444, -0x1.b210a90902b79p-501, 0x1.c36d5081238d8p-555 }, // 1e-117 + pow_table_entry{ 0x1.9379fec069826p-386, 0x1.4bf226ce4f741p-443, -0x1.0f4a69a5a1b2bp-497, -0x1.65dbadaf49c79p-551 }, // 1e-116 + pow_table_entry{ 0x1.f8587e7083e30p-383, -0x1.cc2229efc395ep-437, 0x1.d6717df87af05p-493, -0x1.7ea532363872ep-549 }, // 1e-115 + pow_table_entry{ 0x1.3b374f06526dep-379, -0x1.1f955a35da3dbp-433, 0x1.4981bbaed3359p-487, -0x1.dde4e7ec3c690p-542 }, // 1e-114 + pow_table_entry{ 0x1.8a0522c7e7095p-376, 0x1.310a9e795e65dp-431, 0x1.37c455351005ep-485, -0x1.5578879d2e0cep-541 }, // 1e-113 + pow_table_entry{ 0x1.ec866b79e0cbap-373, 0x1.bea6a30bdaffap-427, 0x1.42dab5412a03bp-481, -0x1.355ad5308f320p-535 }, // 1e-112 + pow_table_entry{ 0x1.33d4032c2c7f5p-369, -0x1.e8d7da1897204p-423, 0x1.c9c8b148ba425p-477, -0x1.4158c53e597f4p-531 }, // 1e-111 + pow_table_entry{ 0x1.80c903f7379f2p-366, -0x1.630dd09ebce84p-420, -0x1.c3c52265172d2p-474, -0x1.235ded1bdfbe2p-529 }, // 1e-110 + pow_table_entry{ 0x1.e0fb44f50586ep-363, 0x1.10baece64f76ap-419, -0x1.a5b357f2e7c35p-474, -0x1.b0d5a18b5eb6bp-528 }, // 1e-109 + pow_table_entry{ 0x1.2c9d0b1923745p-359, -0x1.aac595f8072afp-414, 0x1.f0dfd2105e4bdp-471, 0x1.c5e9ec2393374p-526 }, // 1e-108 + pow_table_entry{ 0x1.77c44ddf6c516p-356, -0x1.576fb7608f5abp-415, 0x1.b45f1a51d77b2p-470, 0x1.bb233963c0284p-526 }, // 1e-107 + pow_table_entry{ 0x1.d5b561574765bp-353, 0x1.f295a2d63a667p-407, 0x1.5085db8399356p-461, 0x1.ea29ec07bcb03p-515 }, // 1e-106 + pow_table_entry{ 0x1.25915cd68c9f9p-349, 0x1.6f3b0b8bc9001p-404, 0x1.494ea4c8ff058p-459, 0x1.92d19c26af710p-514 }, // 1e-105 + pow_table_entry{ 0x1.6ef5b40c2fc77p-346, 0x1.e584e7375da01p-400, -0x1.19176c81304e4p-454, -0x1.c10f3f99f4966p-508 }, // 1e-104 + pow_table_entry{ 0x1.cab3210f3bb95p-343, 0x1.5ee6210535081p-397, -0x1.7d751e85f1876p-453, -0x1.8a987c038ddf7p-508 }, // 1e-103 + pow_table_entry{ 0x1.1eaff4a98553dp-339, 0x1.5b4fd4a341251p-393, -0x1.bb9a4cc4edbd2p-447, -0x1.ded3e9b047157p-501 }, // 1e-102 + pow_table_entry{ 0x1.665bf1d3e6a8dp-336, -0x1.4ddc3633ee91bp-390, -0x1.2a80dff6292c7p-444, -0x1.5a239071636b5p-500 }, // 1e-101 + pow_table_entry{ 0x1.bff2ee48e0530p-333, -0x1.42a68781d46c4p-388, -0x1.d4845fcecdde3p-443, -0x1.b0ac748dbc462p-497 }, // 1e-100 + pow_table_entry{ 0x1.17f7d4ed8c33ep-329, -0x1.9350296249875p-385, -0x1.24d2bbe140aaep-439, -0x1.1cd791b12b57ap-494 }, // 1e-99 + pow_table_entry{ 0x1.5df5ca28ef40dp-326, 0x1.81f6f3114905bp-380, 0x1.647e25499bcaap-434, -0x1.ac81aec3aec5bp-488 }, // 1e-98 + pow_table_entry{ 0x1.b5733cb32b111p-323, -0x1.1d8b502a64b8ep-377, 0x1.7b3b5d38057a8p-432, -0x1.7a21a749a771ep-489 }, // 1e-97 + pow_table_entry{ 0x1.116805effaeaap-319, 0x1.cd88ede5810c7p-373, 0x1.76828d2181b64p-427, 0x1.f13aaf771f759p-481 }, // 1e-96 + pow_table_entry{ 0x1.55c2076bf9a55p-316, 0x1.03aca57b853e5p-372, -0x1.5ee67cb0eee13p-427, -0x1.276a4ab18ad10p-482 }, // 1e-95 + pow_table_entry{ 0x1.ab328946f80eap-313, 0x1.5125f3b699a38p-367, -0x1.f6d4037ba5533p-421, 0x1.1d76454424f59p-480 }, // 1e-94 + pow_table_entry{ 0x1.0aff95cc5b092p-309, 0x1.d2b7b85220063p-363, -0x1.3a44822d47540p-417, 0x1.0b269eb4a9719p-472 }, // 1e-93 + pow_table_entry{ 0x1.4dbf7b3f71cb7p-306, 0x1.1d96999aa01edp-362, 0x1.dca9751d9b5c1p-416, -0x1.641f733c58640p-470 }, // 1e-92 + pow_table_entry{ 0x1.a12f5a0f4e3e5p-303, -0x1.4d81dfff5beccp-358, 0x1.a9e9e93281198p-412, 0x1.a16c57fa48c18p-466 }, // 1e-91 + pow_table_entry{ 0x1.04bd984990e6fp-299, 0x1.7c76a00334606p-357, 0x1.464637f215fe8p-413, 0x1.38edbf1b5e3b9p-468 }, // 1e-90 + pow_table_entry{ 0x1.45ecfe5bf520bp-296, -0x1.c48d76ff7fd0fp-351, -0x1.9a0a0e8459207p-408, -0x1.cf1ada23b946bp-462 }, // 1e-89 + pow_table_entry{ 0x1.97683df2f268dp-293, 0x1.e52795a0501d7p-347, -0x1.a008c92256f69p-401, 0x1.abd1e6f535868p-455 }, // 1e-88 + pow_table_entry{ 0x1.fd424d6faf031p-290, -0x1.431d09ef37b68p-345, 0x1.efea092a2697bp-399, -0x1.d2733e9afa2fdp-453 }, // 1e-87 + pow_table_entry{ 0x1.3e497065cd61fp-286, -0x1.e4f9131ac1690p-340, -0x1.6506dd22d3f0ap-394, 0x1.2e3bfc6f91d11p-448 }, // 1e-86 + pow_table_entry{ 0x1.8ddbcc7f40ba6p-283, 0x1.4391503d1c797p-338, 0x1.06ddae51dc4cfp-393, 0x1.e72bee2dd9155p-447 }, // 1e-85 + pow_table_entry{ 0x1.f152bf9f10e90p-280, -0x1.35c52dd9ce342p-334, 0x1.d225467994d81p-388, -0x1.4f848b235852bp-443 }, // 1e-84 + pow_table_entry{ 0x1.36d3b7c36a91ap-276, -0x1.8336795041c12p-331, 0x1.1aba605fe8384p-387, 0x1.7269484f46629p-442 }, // 1e-83 + pow_table_entry{ 0x1.8488a5b445360p-273, 0x1.0dfdf42dd6e75p-327, -0x1.a7a5c1e2076e7p-382, 0x1.39e0734c62ff6p-436 }, // 1e-82 + pow_table_entry{ 0x1.e5aacf2156838p-270, 0x1.517d71394ca12p-324, -0x1.18f325a894a06p-383, 0x1.0b1203ef77e80p-438 }, // 1e-81 + pow_table_entry{ 0x1.2f8ac174d6123p-266, 0x1.a5dccd879fc96p-321, 0x1.f50680876a31cp-375, -0x1.d5914bd8a550fp-430 }, // 1e-80 + pow_table_entry{ 0x1.7b6d71d20b96cp-263, 0x1.ea801d30f7784p-323, -0x1.b6fbead7683a9p-377, -0x1.5eb3d9d9d4a57p-432 }, // 1e-79 + pow_table_entry{ 0x1.da48ce468e7c7p-260, 0x1.3290123e9aab2p-319, 0x1.db451a72bdb6dp-374, -0x1.db30682824e77p-428 }, // 1e-78 + pow_table_entry{ 0x1.286d80ec190dcp-256, 0x1.85fcd05b39055p-310, 0x1.eca42cc21eda5p-364, -0x1.c2a3f904645c4p-418 }, // 1e-77 + pow_table_entry{ 0x1.7288e1271f513p-253, 0x1.e77c04720746bp-307, -0x1.3065901ab2de5p-362, 0x1.9966117505196p-416 }, // 1e-76 + pow_table_entry{ 0x1.cf2b1970e7258p-250, 0x1.615b058e89186p-304, -0x1.be3f7a10afcafp-358, 0x1.ff7f2ba48cbf6p-414 }, // 1e-75 + pow_table_entry{ 0x1.217aefe690777p-246, 0x1.b9b1c6f22b5e7p-301, -0x1.6e7ac4a6dded5p-358, 0x1.fd7bda36bfbcep-413 }, // 1e-74 + pow_table_entry{ 0x1.69d9abe034955p-243, 0x1.40f1c575b1b06p-301, -0x1.ca1975d09568ap-355, 0x1.f36b4311beb06p-412 }, // 1e-73 + pow_table_entry{ 0x1.c45016d841baap-240, 0x1.1912e36d31e1cp-294, 0x1.bc3602cbb453dp-348, 0x1.c9c1184f58b97p-403 }, // 1e-72 + pow_table_entry{ 0x1.1ab20e472914ap-236, 0x1.afabce243f2d2p-290, -0x1.d4bc7c815e973p-345, -0x1.e1e750ce688c2p-399 }, // 1e-71 + pow_table_entry{ 0x1.615e91d8f359dp-233, 0x1.b96c1ad4ef863p-291, 0x1.b0a322f24e17dp-345, 0x1.2cf6d7efea871p-399 }, // 1e-70 + pow_table_entry{ 0x1.b9b6364f30304p-230, 0x1.227c7218a2b68p-284, -0x1.dc66828a23cc4p-339, -0x1.b0f96e42835aep-393 }, // 1e-69 + pow_table_entry{ 0x1.1411e1f17e1e3p-226, -0x1.4a7238b09a4dfp-280, -0x1.29c01196565fbp-335, 0x1.e2c8362cdbce6p-390 }, // 1e-68 + pow_table_entry{ 0x1.59165a6ddda5bp-223, 0x1.62f139233f1e9p-277, 0x1.179fd4082810dp-333, 0x1.6de90ee04b07ep-389 }, // 1e-67 + pow_table_entry{ 0x1.af5bf109550f2p-220, 0x1.775b0ed81dcc7p-275, -0x1.513c1b7ae6f58p-329, 0x1.7258d4a617727p-384 }, // 1e-66 + pow_table_entry{ 0x1.0d9976a5d5297p-216, 0x1.754c74a3894fep-270, 0x1.5a74dda65f4d2p-326, 0x1.ceef09cf9d4f1p-381 }, // 1e-65 + pow_table_entry{ 0x1.50ffd44f4a73dp-213, 0x1.a53f2398d747bp-268, 0x1.b112150ff7207p-323, -0x1.bd5533bc7b5d3p-378 }, // 1e-64 + pow_table_entry{ 0x1.a53fc9631d10dp-210, -0x1.f8b889c079733p-264, 0x1.d569a53f4e888p-324, -0x1.6554055cd1a39p-378 }, // 1e-63 + pow_table_entry{ 0x1.0747ddddf22a8p-206, -0x1.76e6ac3097d00p-261, 0x1.092b103a3c88bp-315, -0x1.66faa41ad0183p-369 }, // 1e-62 + pow_table_entry{ 0x1.4919d5556eb52p-203, -0x1.d4a0573cbdc40p-258, 0x1.4b75d448cbaadp-312, 0x1.3f46b2de7be1cp-366 }, // 1e-61 + pow_table_entry{ 0x1.9b604aaaca626p-200, 0x1.b63792f412cb0p-255, 0x1.9e53495afe959p-309, -0x1.70e7a069e525dp-363 }, // 1e-60 + pow_table_entry{ 0x1.011c2eaabe7d8p-196, -0x1.dc3a884ee8823p-252, -0x1.fa17e44e41c51p-306, -0x1.9a431108bcde8p-361 }, // 1e-59 + pow_table_entry{ 0x1.41633a556e1cep-193, -0x1.29a4953151516p-248, -0x1.789ddd61d2366p-303, 0x1.ff96155a89f4fp-357 }, // 1e-58 + pow_table_entry{ 0x1.91bc08eac9a41p-190, 0x1.45f922c12d2d2p-244, 0x1.149d55a2dc9e1p-299, -0x1.c04232a769c6fp-353 }, // 1e-57 + pow_table_entry{ 0x1.f62b0b257c0d2p-187, -0x1.6888948e87879p-241, -0x1.531daa7a361d4p-295, 0x1.67d6a0575de3bp-349 }, // 1e-56 + pow_table_entry{ 0x1.39dae6f76d883p-183, 0x1.eaaa326eb4b43p-241, -0x1.3f28a8c61d244p-295, -0x1.f19dbc96551b4p-349 }, // 1e-55 + pow_table_entry{ 0x1.8851a0b548ea4p-180, -0x1.b355681eb3c3ep-235, 0x1.ae21a5a10b725p-289, 0x1.323f5a8882b3cp-343 }, // 1e-54 + pow_table_entry{ 0x1.ea6608e29b24dp-177, -0x1.10156113305a6p-231, -0x1.f32af87b58d89p-285, 0x1.3f67989551b05p-339 }, // 1e-53 + pow_table_entry{ 0x1.327fc58da0f70p-173, -0x1.506ae55ff1c40p-230, -0x1.bfd6da68bc3abp-284, -0x1.c2fa0515678e5p-338 }, // 1e-52 + pow_table_entry{ 0x1.7f1fb6f10934cp-170, -0x1.a4859eb7ee351p-227, 0x1.d0336efd14b6ap-281, -0x1.33b8865ac171ep-335 }, // 1e-51 + pow_table_entry{ 0x1.dee7a4ad4b81fp-167, -0x1.06d38332f4e12p-223, -0x1.5ddfdaa1d30dep-277, 0x1.fd65603a38c6ap-334 }, // 1e-50 + pow_table_entry{ 0x1.2b50c6ec4f313p-163, 0x1.56eef38009bcdp-217, 0x1.12aa0bad6e0bbp-272, -0x1.6c1a0a3db9c84p-326 }, // 1e-49 + pow_table_entry{ 0x1.7624f8a762fd8p-160, 0x1.595560c018581p-215, -0x1.5156e2ce6ce2dp-270, -0x1.8e41199a5074ap-324 }, // 1e-48 + pow_table_entry{ 0x1.d3ae36d13bbcep-157, 0x1.afaab8f01e6e1p-212, 0x1.694d91f7df91dp-269, 0x1.c5d3ffe36dc7dp-326 }, // 1e-47 + pow_table_entry{ 0x1.244ce242c5561p-153, -0x1.e46a98d3d9f67p-209, 0x1.38741ecebaeedp-263, -0x1.d722dc008edb2p-317 }, // 1e-46 + pow_table_entry{ 0x1.6d601ad376ab9p-150, 0x1.a27ac0f72f8c0p-206, -0x1.796ed97d96558p-260, -0x1.4ceb9300b291ep-314 }, // 1e-45 + pow_table_entry{ 0x1.c8b8218854567p-147, 0x1.82c65c4d3edbcp-201, -0x1.d7ca8fdcfbeaep-257, -0x1.a02677c0df365p-311 }, // 1e-44 + pow_table_entry{ 0x1.1d7314f534b61p-143, -0x1.8e44064fb8b6bp-197, 0x1.b648598578a35p-251, -0x1.010602b622e08p-305 }, // 1e-43 + pow_table_entry{ 0x1.64cfda3281e39p-140, -0x1.e3aa0fc74dc8ap-195, -0x1.b84b20325267cp-249, -0x1.051e0d8eae627p-304 }, // 1e-42 + pow_table_entry{ 0x1.be03d0bf225c7p-137, -0x1.72524ee484eb4p-194, -0x1.32ef41f7380d9p-249, -0x1.199643c967ec4p-303 }, // 1e-41 + pow_table_entry{ 0x1.16c262777579cp-133, 0x1.631191d6259dap-187, -0x1.2ff5624ea0c22p-243, 0x1.a0042b443e18bp-300 }, // 1e-40 + pow_table_entry{ 0x1.5c72fb1552d83p-130, 0x1.bbd5f64baf050p-184, 0x1.a10351476dc35p-238, 0x1.904029b0aa6cfp-292 }, // 1e-39 + pow_table_entry{ 0x1.b38fb9daa78e4p-127, 0x1.2acb73de9ac65p-181, -0x1.f6bbda66b6cbdp-235, -0x1.0bafcbe32af7dp-289 }, // 1e-38 + pow_table_entry{ 0x1.1039d428a8b8fp-123, -0x1.4540d794df441p-177, -0x1.746ad100647edp-232, 0x1.b16441240a4a4p-286 }, // 1e-37 + pow_table_entry{ 0x1.54484932d2e72p-120, 0x1.696ef285e8eafp-174, -0x1.e8c2c2a03ecf4p-228, 0x1.1dbd516d0cdcdp-283 }, // 1e-36 + pow_table_entry{ 0x1.a95a5b7f87a0fp-117, -0x1.e1aa86c4e6d2fp-174, 0x1.d0c8cb7b17cf3p-229, -0x1.ad35a37afebfap-284 }, // 1e-35 + pow_table_entry{ 0x1.09d8792fb4c49p-113, 0x1.5a5ead789df78p-167, 0x1.6227d7f2ceee1p-221, 0x1.ef9df3ce99064p-275 }, // 1e-34 + pow_table_entry{ 0x1.4c4e977ba1f5cp-110, -0x1.4f09a7293a8aap-164, 0x1.bab1cdef82a9ap-218, -0x1.28f51e7b81706p-273 }, // 1e-33 + pow_table_entry{ 0x1.9f623d5a8a733p-107, -0x1.a2cc10f3892d4p-161, 0x1.4af20b5b1aa03p-218, -0x1.ccc998698731cp-272 }, // 1e-32 + pow_table_entry{ 0x1.039d665896880p-103, -0x1.85bf8a9835bc4p-157, -0x1.e625171ce1eb8p-211, 0x1.9800802f82e04p-266 }, // 1e-31 + pow_table_entry{ 0x1.4484bfeebc2a0p-100, -0x1.e72f6d3e432b6p-154, 0x1.a051a31be599ap-208, 0x1.fe00a03b63984p-263 }, // 1e-30 + pow_table_entry{ 0x1.95a5efea6b347p-97, 0x1.9f04b7722c09dp-151, 0x1.0cc17c5be001ap-210, -0x1.3f9bdae1c0d39p-267 }, // 1e-29 + pow_table_entry{ 0x1.fb0f6be506019p-94, 0x1.06c5e54eb70c4p-148, 0x1.0a7f8edb96c01p-202, 0x1.ce0fa5ccb9defp-261 }, // 1e-28 + pow_table_entry{ 0x1.3ce9a36f23c10p-90, -0x1.b788a15d9b30bp-145, 0x1.4d1f72927c701p-199, 0x1.120c9c79ff42bp-253 }, // 1e-27 + pow_table_entry{ 0x1.8c240c4aecb14p-87, -0x1.12b564da80fe7p-141, 0x1.5033a79b8dc61p-195, -0x1.a9703c6780ecap-250 }, // 1e-26 + pow_table_entry{ 0x1.ef2d0f5da7dd9p-84, -0x1.5762be11213e0p-138, -0x1.5bbf6e7d8ec87p-192, -0x1.3cc4b816127c4p-251 }, // 1e-25 + pow_table_entry{ 0x1.357c299a88ea7p-80, 0x1.a96249354b394p-134, -0x1.b2af4a1cf27a9p-189, 0x1.e740a19e468e5p-244 }, // 1e-24 + pow_table_entry{ 0x1.82db34012b251p-77, 0x1.13badb829e079p-131, -0x1.0fad8e52178c9p-185, -0x1.e7bbcd7e89f39p-239 }, // 1e-23 + pow_table_entry{ 0x1.e392010175ee6p-74, -0x1.a7566d9cba769p-128, -0x1.4e63c79a75befp-184, -0x1.86ab0378b1c1bp-238 }, // 1e-22 + pow_table_entry{ 0x1.2e3b40a0e9b4fp-70, 0x1.f769fb7e0b75ep-124, 0x1.4bc068cfdd9a3p-178, -0x1.9d0ab88adbc64p-232 }, // 1e-21 + pow_table_entry{ 0x1.79ca10c924223p-67, 0x1.75447a5d8e536p-121, -0x1.853df3f0abfd3p-177, -0x1.1359ab64adf4ep-235 }, // 1e-20 + pow_table_entry{ 0x1.d83c94fb6d2acp-64, 0x1.a52b31e9e3d07p-119, -0x1.e68d70ecd6fc8p-174, 0x1.d4f9fd3844d1cp-229 }, // 1e-19 + pow_table_entry{ 0x1.2725dd1d243acp-60, -0x1.7c628066e8ceep-114, 0x1.cfe7996bf9a23p-170, 0x1.251c3e432b031p-225 }, // 1e-18 + pow_table_entry{ 0x1.70ef54646d497p-57, -0x1.db7b2080a3029p-111, -0x1.6f07a00e41fd5p-165, -0x1.2339645814785p-223 }, // 1e-17 + pow_table_entry{ 0x1.cd2b297d889bcp-54, 0x1.5b4c2ebe68799p-109, -0x1.95931023a4f95p-163, 0x1.d27f08523ccd3p-217 }, // 1e-16 + pow_table_entry{ 0x1.203af9ee75616p-50, -0x1.937831647f5a0p-104, -0x1.3ebdf50b238dep-158, -0x1.ae384d664cffep-212 }, // 1e-15 + pow_table_entry{ 0x1.6849b86a12b9bp-47, 0x1.ea70909833de7p-107, 0x1.928db2138e9fap-163, -0x1.c660bfe03fd78p-217 }, // 1e-14 + pow_table_entry{ 0x1.c25c268497682p-44, -0x1.ecd79a5a0df95p-99, 0x1.bee623d30e48fp-157, -0x1.bfc77ec27e6aep-217 }, // 1e-13 + pow_table_entry{ 0x1.19799812dea11p-40, 0x1.97f27f0f6e886p-96, -0x1.ba2c0a6705c4ap-151, 0x1.5ee82350c6710p-205 }, // 1e-12 + pow_table_entry{ 0x1.5fd7fe1796495p-37, 0x1.7f7bc7b4d28aap-91, -0x1.8a2dc34031cd7p-146, -0x1.25774f6c1fcb1p-204 }, // 1e-11 + pow_table_entry{ 0x1.b7cdfd9d7bdbbp-34, -0x1.20a5465df8d2cp-88, 0x1.09a365f7e0dfap-142, -0x1.8b76a91a393dfp-196 }, // 1e-10 + pow_table_entry{ 0x1.12e0be826d695p-30, -0x1.34674bfabb83bp-84, -0x1.59f9e04513744p-138, 0x1.1abac9f387296p-197 }, // 1e-9 + pow_table_entry{ 0x1.5798ee2308c3ap-27, -0x1.03023df2d4c94p-82, -0x1.60f0b0acb0a2ap-136, 0x1.61697c7068f3bp-194 }, // 1e-8 + pow_table_entry{ 0x1.ad7f29abcaf48p-24, 0x1.5e1e99483b023p-78, 0x1.23699194119a6p-132, -0x1.e463c24737ccfp-187 }, // 1e-7 + pow_table_entry{ 0x1.0c6f7a0b5ed8dp-20, 0x1.b5a63f9a49c2cp-75, 0x1.b10fd7e45803dp-131, -0x1.75f2cb641700dp-186 }, // 1e-6 + pow_table_entry{ 0x1.4f8b588e368f1p-17, -0x1.ee78183f91e64p-71, -0x1.bc558644523f6p-125, -0x1.fd36f7e3d1cc1p-179 }, // 1e-5 + pow_table_entry{ 0x1.a36e2eb1c432dp-14, -0x1.6a161e4f765fep-68, 0x1.d495182a9930cp-122, -0x1.f212d77318fc5p-178 }, // 1e-4 + pow_table_entry{ 0x1.0624dd2f1a9fcp-10, -0x1.89374bc6a7efap-66, 0x1.26e978d4fdf3bp-121, 0x1.916872b020c4ap-175 }, // 1e-3 + pow_table_entry{ 0x1.47ae147ae147bp-7, -0x1.eb851eb851eb8p-63, -0x1.47ae147ae147bp-117, 0x1.eb851eb851eb8p-173 }, // 1e-2 + pow_table_entry{ 0x1.999999999999ap-4, -0x1.999999999999ap-58, 0x1.999999999999ap-112, -0x1.999999999999ap-166 }, // 1e-1 + pow_table_entry{ 0x1.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e0 + pow_table_entry{ 0x1.4000000000000p+3, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e1 + pow_table_entry{ 0x1.9000000000000p+6, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e2 + pow_table_entry{ 0x1.f400000000000p+9, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e3 + pow_table_entry{ 0x1.3880000000000p+13, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e4 + pow_table_entry{ 0x1.86a0000000000p+16, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e5 + pow_table_entry{ 0x1.e848000000000p+19, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e6 + pow_table_entry{ 0x1.312d000000000p+23, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e7 + pow_table_entry{ 0x1.7d78400000000p+26, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e8 + pow_table_entry{ 0x1.dcd6500000000p+29, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e9 + pow_table_entry{ 0x1.2a05f20000000p+33, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e10 + pow_table_entry{ 0x1.74876e8000000p+36, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e11 + pow_table_entry{ 0x1.d1a94a2000000p+39, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e12 + pow_table_entry{ 0x1.2309ce5400000p+43, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e13 + pow_table_entry{ 0x1.6bcc41e900000p+46, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e14 + pow_table_entry{ 0x1.c6bf526340000p+49, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e15 + pow_table_entry{ 0x1.1c37937e08000p+53, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e16 + pow_table_entry{ 0x1.6345785d8a000p+56, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e17 + pow_table_entry{ 0x1.bc16d674ec800p+59, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e18 + pow_table_entry{ 0x1.158e460913d00p+63, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e19 + pow_table_entry{ 0x1.5af1d78b58c40p+66, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e20 + pow_table_entry{ 0x1.b1ae4d6e2ef50p+69, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e21 + pow_table_entry{ 0x1.0f0cf064dd592p+73, 0x0.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e22 + pow_table_entry{ 0x1.52d02c7e14af6p+76, 0x1.0000000000000p+23, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e23 + pow_table_entry{ 0x1.a784379d99db4p+79, 0x1.0000000000000p+24, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e24 + pow_table_entry{ 0x1.08b2a2c280291p+83, -0x1.b000000000000p+29, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e25 + pow_table_entry{ 0x1.4adf4b7320335p+86, -0x1.1c00000000000p+32, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e26 + pow_table_entry{ 0x1.9d971e4fe8402p+89, -0x1.8c00000000000p+33, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e27 + pow_table_entry{ 0x1.027e72f1f1281p+93, 0x1.8440000000000p+38, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e28 + pow_table_entry{ 0x1.431e0fae6d721p+96, 0x1.f2a8000000000p+42, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e29 + pow_table_entry{ 0x1.93e5939a08ceap+99, -0x1.215c000000000p+44, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e30 + pow_table_entry{ 0x1.f8def8808b024p+102, 0x1.4b26800000000p+48, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e31 + pow_table_entry{ 0x1.3b8b5b5056e17p+106, -0x1.3107f00000000p+52, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e32 + pow_table_entry{ 0x1.8a6e32246c99cp+109, 0x1.82b6140000000p+55, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e33 + pow_table_entry{ 0x1.ed09bead87c03p+112, 0x1.e363990000000p+58, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e34 + pow_table_entry{ 0x1.3426172c74d82p+116, 0x1.5c3c7f4000000p+61, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e35 + pow_table_entry{ 0x1.812f9cf7920e3p+119, -0x1.265a307800000p+65, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e36 + pow_table_entry{ 0x1.e17b84357691bp+122, 0x1.900f436a00000p+68, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e37 + pow_table_entry{ 0x1.2ced32a16a1b1p+126, 0x1.e826288900000p+70, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e38 + pow_table_entry{ 0x1.78287f49c4a1dp+129, 0x1.988becaad0000p+75, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e39 + pow_table_entry{ 0x1.d6329f1c35ca5p+132, -0x1.0151182a7c000p+78, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e40 + pow_table_entry{ 0x1.25dfa371a19e7p+136, -0x1.069578d46c000p+79, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e41 + pow_table_entry{ 0x1.6f578c4e0a061p+139, -0x1.29075ae130e00p+85, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e42 + pow_table_entry{ 0x1.cb2d6f618c879p+142, -0x1.cd24c665f4600p+86, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e43 + pow_table_entry{ 0x1.1efc659cf7d4cp+146, -0x1.c80dbeffee2f0p+92, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e44 + pow_table_entry{ 0x1.66bb7f0435c9ep+149, 0x1.c5eed14016454p+95, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e45 + pow_table_entry{ 0x1.c06a5ec5433c6p+152, 0x1.bb542c80deb48p+95, 0x0.0000000000000p+0, 0x0.0000000000000p+0 }, // 1e46 + pow_table_entry{ 0x1.18427b3b4a05cp+156, -0x1.babad90bdd33dp+101, 0x1.0000000000000p+47, 0x0.0000000000000p+0 }, // 1e47 + pow_table_entry{ 0x1.5e531a0a1c873p+159, -0x1.14b4c7a76a406p+105, 0x1.0000000000000p+48, 0x0.0000000000000p+0 }, // 1e48 + pow_table_entry{ 0x1.b5e7e08ca3a8fp+162, 0x1.a61e066ebb2f9p+108, -0x1.d800000000000p+54, 0x0.0000000000000p+0 }, // 1e49 + pow_table_entry{ 0x1.11b0ec57e649ap+166, -0x1.782d3bfacb025p+112, 0x1.5900000000000p+58, 0x0.0000000000000p+0 }, // 1e50 + pow_table_entry{ 0x1.561d276ddfdc0p+169, 0x1.4e3ba83411e91p+112, 0x1.7a00000000000p+58, 0x0.0000000000000p+0 }, // 1e51 + pow_table_entry{ 0x1.aba4714957d30p+172, 0x1.a1ca924116636p+115, -0x1.2780000000000p+61, 0x0.0000000000000p+0 }, // 1e52 + pow_table_entry{ 0x1.0b46c6cdd6e3ep+176, 0x1.051e9b68adfe2p+119, -0x1.b8b0000000000p+65, 0x0.0000000000000p+0 }, // 1e53 + pow_table_entry{ 0x1.4e1878814c9cep+179, -0x1.d73337b7a4d05p+125, 0x1.f649000000000p+70, 0x0.0000000000000p+0 }, // 1e54 + pow_table_entry{ 0x1.a19e96a19fc41p+182, -0x1.3400169638118p+126, 0x1.cf6d000000000p+71, 0x0.0000000000000p+0 }, // 1e55 + pow_table_entry{ 0x1.05031e2503da9p+186, -0x1.b020038778c2cp+132, 0x1.2434840000000p+78, 0x0.0000000000000p+0 }, // 1e56 + pow_table_entry{ 0x1.4643e5ae44d13p+189, -0x1.1c28046956f37p+135, 0x1.6d41a50000000p+81, 0x0.0000000000000p+0 }, // 1e57 + pow_table_entry{ 0x1.97d4df19d6057p+192, 0x1.9ccdfa7c534fcp+138, -0x1.376df1c000000p+84, 0x0.0000000000000p+0 }, // 1e58 + pow_table_entry{ 0x1.fdca16e04b86dp+195, 0x1.0401791b6823bp+141, -0x1.85496e3000000p+87, 0x0.0000000000000p+0 }, // 1e59 + pow_table_entry{ 0x1.3e9e4e4c2f344p+199, 0x1.2280ebb121165p+145, -0x1.734de4de00000p+91, 0x0.0000000000000p+0 }, // 1e60 + pow_table_entry{ 0x1.8e45e1df3b015p+202, 0x1.6b21269d695bep+148, -0x1.a042bc2b00000p+93, 0x0.0000000000000p+0 }, // 1e61 + pow_table_entry{ 0x1.f1d75a5709c1bp+205, -0x1.3a168fbb3c4d3p+151, 0x1.f7ac94ca40000p+96, 0x0.0000000000000p+0 }, // 1e62 + pow_table_entry{ 0x1.3726987666191p+209, -0x1.444e19d505b04p+155, 0x1.1d65ee7f34000p+101, 0x0.0000000000000p+0 }, // 1e63 + pow_table_entry{ 0x1.84f03e93ff9f5p+212, -0x1.2ac340948e389p+157, -0x1.36812bc1fe000p+103, 0x0.0000000000000p+0 }, // 1e64 + pow_table_entry{ 0x1.e62c4e38ff872p+215, 0x1.1517de8c9c729p+159, -0x1.0842ed64fb000p+105, 0x0.0000000000000p+0 }, // 1e65 + pow_table_entry{ 0x1.2fdbb0e39fb47p+219, 0x1.2b4bbac5f871ep+165, 0x1.76b58ae838c80p+111, 0x0.0000000000000p+0 }, // 1e66 + pow_table_entry{ 0x1.7bd29d1c87a19p+222, 0x1.d87aa5ddda398p+166, -0x1.5ce892edc8300p+111, 0x0.0000000000000p+0 }, // 1e67 + pow_table_entry{ 0x1.dac74463a989fp+225, 0x1.93a653d55431fp+171, 0x1.c97ba90ad8b88p+117, 0x0.0000000000000p+0 }, // 1e68 + pow_table_entry{ 0x1.28bc8abe49f64p+229, -0x1.83b80b9aab60cp+175, -0x1.6212b659388cbp+121, 0x0.0000000000000p+0 }, // 1e69 + pow_table_entry{ 0x1.72ebad6ddc73dp+232, -0x1.e4a60e815638fp+178, -0x1.ba9763ef86afep+124, 0x1.0000000000000p+70 }, // 1e70 + pow_table_entry{ 0x1.cfa698c95390cp+235, -0x1.5dcf9221abc73p+181, -0x1.293d3ceb685bdp+127, -0x1.8000000000000p+72 }, // 1e71 + pow_table_entry{ 0x1.21c81f7dd43a7p+239, 0x1.255e44aaf4a38p+185, -0x1.ce32309909cb2p+128, 0x1.0000000000000p+72 }, // 1e72 + pow_table_entry{ 0x1.6a3a275d49491p+242, 0x1.bad75756c7318p+186, -0x1.20df5e5fa61efp+132, -0x1.b000000000000p+77 }, // 1e73 + pow_table_entry{ 0x1.c4c8b1349b9b5p+245, 0x1.8a634b4b1e3f7p+191, 0x1.a5ba32821c165p+137, 0x1.f900000000000p+82 }, // 1e74 + pow_table_entry{ 0x1.1afd6ec0e1411p+249, 0x1.767e0f0ef2e7bp+195, -0x1.786ba06eae721p+141, 0x1.1dd0000000000p+87 }, // 1e75 + pow_table_entry{ 0x1.61bcca7119916p+252, -0x1.2be26d2d505e7p+198, 0x1.29797775a5f17p+144, 0x1.9510000000000p+88 }, // 1e76 + pow_table_entry{ 0x1.ba2bfd0d5ff5bp+255, 0x1.1249ef0eb713fp+200, 0x1.cf5f554c3db73p+145, 0x1.fa54000000000p+91 }, // 1e77 + pow_table_entry{ 0x1.145b7e285bf99p+259, -0x1.52472a5b364e2p+202, 0x1.0cdcaa7d34941p+146, 0x1.e3a4000000000p+92 }, // 1e78 + pow_table_entry{ 0x1.59725db272f7fp+262, 0x1.9649c2c37f079p+207, 0x1.95013d51c81b9p+153, 0x1.d723400000000p+97 }, // 1e79 + pow_table_entry{ 0x1.afcef51f0fb5fp+265, -0x1.08f322e84da10p+204, -0x1.6f9cd67177627p+150, 0x1.9d82000000000p+95 }, // 1e80 + pow_table_entry{ 0x1.0de1593369d1bp+269, 0x1.7eb4d0145d9efp+215, 0x1.ae347bf3f22acp+161, 0x1.3e02714000000p+107 }, // 1e81 + pow_table_entry{ 0x1.5159af8044462p+272, 0x1.bcc40832ea0d7p+217, -0x1.cc7cca1e22951p+163, -0x1.c9f3c9c000000p+108 }, // 1e82 + pow_table_entry{ 0x1.a5b01b605557bp+275, -0x1.d40af5c05b6f4p+220, 0x1.80c806b4a98b5p+165, -0x1.e385e18000000p+108 }, // 1e83 + pow_table_entry{ 0x1.078e111c3556dp+279, -0x1.12436ccc1c92cp+225, -0x1.87c17de78b047p+170, -0x1.d2e33acf00000p+116 }, // 1e84 + pow_table_entry{ 0x1.4971956342ac8p+282, -0x1.5b511ffc8edddp+226, 0x1.64e229e923a6bp+169, -0x1.e70260b000000p+113 }, // 1e85 + pow_table_entry{ 0x1.9bcdfabc1357ap+285, -0x1.b22567fbb2954p+229, -0x1.907952e724dbfp+174, 0x1.99f3d07240000p+120 }, // 1e86 + pow_table_entry{ 0x1.0160bcb58c16cp+289, 0x1.78544f8158316p+234, -0x1.3e92f4f41dc26p+180, 0x1.c01c3123b4000p+125 }, // 1e87 + pow_table_entry{ 0x1.41b8ebe2ef1c7p+292, 0x1.d6696361ae3dbp+237, 0x1.c721373b6b343p+181, 0x1.8119eb6508000p+125 }, // 1e88 + pow_table_entry{ 0x1.922726dbaae39p+295, 0x1.300ef0e867348p+238, -0x1.c7167af5b9fecp+184, -0x1.0f4fcce0db000p+129 }, // 1e89 + pow_table_entry{ 0x1.f6b0f092959c7p+298, 0x1.2f8255a450203p+244, 0x1.71c8f99335e06p+189, 0x1.ab370ff9bb900p+134 }, // 1e90 + pow_table_entry{ 0x1.3a2e965b9d81dp+302, -0x1.c24e8a794debep+248, -0x1.8e26403fe53c2p+189, 0x1.604d3f82a7400p+133 }, // 1e91 + pow_table_entry{ 0x1.88ba3bf284e24p+305, -0x1.32e22d17a166ep+251, 0x1.f072817d810bap+197, 0x1.b370c11ec6a22p+143 }, // 1e92 + pow_table_entry{ 0x1.eae8caef261adp+308, -0x1.7f9ab85d89c09p+254, 0x1.b23c8773853a4p+198, 0x1.02678b33c2554p+143 }, // 1e93 + pow_table_entry{ 0x1.32d17ed577d0cp+312, -0x1.bf02cce9d8616p+256, -0x1.e13456af99773p+201, 0x1.43016e00b2ea9p+146 }, // 1e94 + pow_table_entry{ 0x1.7f85de8ad5c4fp+315, -0x1.1761c012273cep+260, 0x1.a67e93a4802b0p+204, 0x1.c9e0e4c06fd2ap+150 }, // 1e95 + pow_table_entry{ 0x1.df67562d8b363p+318, -0x1.ae9d180b58861p+264, 0x1.4203c711b406cp+210, -0x1.b874dc41ee871p+156 }, // 1e96 + pow_table_entry{ 0x1.2ba095dc7701ep+322, -0x1.8d222f071753cp+268, -0x1.b6bda394ef7bdp+214, 0x1.d96decad95d72p+159 }, // 1e97 + pow_table_entry{ 0x1.7688bb5394c25p+325, 0x1.f2a8a6e45ae8fp+266, -0x1.1b431e8ad6afep+211, 0x1.f92cfb1f699d5p+157 }, // 1e98 + pow_table_entry{ 0x1.d42aea2879f2ep+328, 0x1.137a9684eb8d2p+274, -0x1.ad884f98b6317p+220, 0x1.8eef073ce8809p+163 }, // 1e99 + pow_table_entry{ 0x1.249ad2594c37dp+332, -0x1.4f4d87b3b31f4p+276, -0x1.8ea637ee3bdcbp+219, -0x1.aaa6de7babe8cp+161 }, // 1e100 + pow_table_entry{ 0x1.6dc186ef9f45cp+335, 0x1.2e6f8b2fb00c7p+280, 0x1.e0db03a16352cp+226, 0x1.1bd55ed3cad24p+171 }, // 1e101 + pow_table_entry{ 0x1.c931e8ab87173p+338, 0x1.7a0b6dfb9c0f9p+283, 0x1.5911c489bc277p+229, 0x1.62cab688bd86dp+174 }, // 1e102 + pow_table_entry{ 0x1.1dbf316b346e8p+342, -0x1.3b8db42be7643p+283, 0x1.7ab1ad61598a8p+229, -0x1.120a6f544c5e1p+175 }, // 1e103 + pow_table_entry{ 0x1.652efdc6018a2p+345, -0x1.8a712136e13d3p+286, -0x1.26a1e7465012ep+232, -0x1.568d0b295f75ap+178 }, // 1e104 + pow_table_entry{ 0x1.be7abd3781ecap+348, 0x1.f09794b3db33ap+294, -0x1.03825308bf20cp+240, 0x1.853cfb20c48adp+185 }, // 1e105 + pow_table_entry{ 0x1.170cb642b133fp+352, -0x1.c9a1430f96ffcp+298, 0x1.773a306a222e2p+242, 0x1.e68c39e8f5ad8p+188 }, // 1e106 + pow_table_entry{ 0x1.5ccfe3d35d80ep+355, 0x1.87ecd8590680ap+300, 0x1.d508bc84aab9bp+245, 0x1.80bd218ccc639p+189 }, // 1e107 + pow_table_entry{ 0x1.b403dcc834e12p+358, -0x1.0b0bf8c85befap+304, 0x1.9292bae9755a0p+250, 0x1.de0ec69efff7cp+196 }, // 1e108 + pow_table_entry{ 0x1.108269fd210cbp+362, 0x1.6462120b1a290p+306, -0x1.1912cb85a9eedp+248, -0x1.4db0f7280148dp+194 }, // 1e109 + pow_table_entry{ 0x1.54a3047c694fep+365, -0x1.2142b4b90fa66p+310, -0x1.5f577e67146a9p+251, 0x1.5ee2cb0dfe650p+197 }, // 1e110 + pow_table_entry{ 0x1.a9cbc59b83a3dp+368, 0x1.4b364f0c56380p+314, 0x1.f246950ff933dp+259, 0x1.a5b4dbee8beffp+205 }, // 1e111 + pow_table_entry{ 0x1.0a1f5b8132466p+372, 0x1.4f01f167b5e30p+318, 0x1.376c1d29fbc06p+263, 0x1.879109751775fp+209 }, // 1e112 + pow_table_entry{ 0x1.4ca732617ed80p+375, -0x1.74f648f97290fp+319, -0x1.eae36e2e153e0p+264, -0x1.68ab42da2ac8bp+208 }, // 1e113 + pow_table_entry{ 0x1.9fd0fef9de8e0p+378, -0x1.d233db37cf353p+322, -0x1.967126e66a360p+265, -0x1.c2d61390b57aep+211 }, // 1e114 + pow_table_entry{ 0x1.03e29f5c2b18cp+382, -0x1.23606902e1814p+326, 0x1.80fca3d7fecf2p+270, -0x1.19c5cc3a716cdp+215 }, // 1e115 + pow_table_entry{ 0x1.44db473335defp+385, -0x1.6c38834399e19p+329, 0x1.e13bcccdfe82ep+273, 0x1.4fe4605b791c0p+219 }, // 1e116 + pow_table_entry{ 0x1.961219000356bp+388, -0x1.71d1a90520168p+334, 0x1.cb3158002fc47p+279, 0x1.e8f75e1c95d8cp+224 }, // 1e117 + pow_table_entry{ 0x1.fb969f40042c5p+391, 0x1.31b9ecb997e3ep+337, 0x1.1efed7001ddadp+283, -0x1.e732b297112c4p+229 }, // 1e118 + pow_table_entry{ 0x1.3d3e2388029bbp+395, 0x1.3f1433f3feee7p+341, -0x1.3282e67fb55d1p+285, 0x1.3e01418655115p+231 }, // 1e119 + pow_table_entry{ 0x1.8c8dac6a0342ap+398, 0x1.1db281e1fd541p+343, 0x1.406e2ff02ea5ep+289, -0x1.b93f370c0ad53p+235 }, // 1e120 + pow_table_entry{ 0x1.efb1178484135p+401, -0x1.4d706ed2c1ab7p+347, -0x1.6f764413c5b0bp+292, -0x1.3c7826786c53ap+235 }, // 1e121 + pow_table_entry{ 0x1.35ceaeb2d28c1p+405, -0x1.4199150ee42cap+349, 0x1.a561573a47192p+292, -0x1.8b96301687689p+238 }, // 1e122 + pow_table_entry{ 0x1.83425a5f872f1p+408, 0x1.370052d6b1642p+353, -0x1.be28ca5ee4e41p+298, -0x1.fb9eef070a50bp+243 }, // 1e123 + pow_table_entry{ 0x1.e412f0f768fadp+411, 0x1.c26033c62ede9p+357, 0x1.d24d030961e2ep+301, 0x1.c2bcaa9b998d9p+247 }, // 1e124 + pow_table_entry{ 0x1.2e8bd69aa19ccp+415, 0x1.997c205bdd4b2p+361, -0x1.3723f78688b49p+307, 0x1.066d7aa84ffe2p+253 }, // 1e125 + pow_table_entry{ 0x1.7a2ecc414a03fp+418, 0x1.ffdb2872d49dep+364, 0x1.ec4c2a5f54794p+308, 0x1.202365498ff6ap+254 }, // 1e126 + pow_table_entry{ 0x1.d8ba7f519c84fp+421, 0x1.7fd1f28f89c56p+367, -0x1.662832c2359a2p+313, 0x1.5a0b0fa6fcfd1p+259 }, // 1e127 + pow_table_entry{ 0x1.27748f9301d32p+425, -0x1.901cc86649e4ap+371, -0x1.dfd91fb961805p+317, -0x1.3dc8b1bd0f0ebp+260 }, // 1e128 + pow_table_entry{ 0x1.7151b377c247ep+428, 0x1.7b80b0047445dp+369, 0x1.06130b08c3f36p+315, 0x1.cb14874eb4b6ap+261 }, // 1e129 + pow_table_entry{ 0x1.cda62055b2d9ep+431, -0x1.f12cf91fd3754p+377, -0x1.6dc34191a8588p+323, 0x1.03dd9a92261e4p+268 }, // 1e130 + pow_table_entry{ 0x1.2087d4358fc82p+435, 0x1.c943e44c1bd6bp+381, 0x1.1b65f704f6c8bp+327, 0x1.44d50136afa5dp+271 }, // 1e131 + pow_table_entry{ 0x1.68a9c942f3ba3p+438, 0x1.dca6eaf916631p+381, -0x1.dc08b39cb8522p+326, -0x1.a7d6f9ee91c2dp+272 }, // 1e132 + pow_table_entry{ 0x1.c2d43b93b0a8cp+441, -0x1.6b0bd69229011p+386, 0x1.eb3d47df06665p+331, 0x1.f719a3cae4e64p+276 }, // 1e133 + pow_table_entry{ 0x1.19c4a53c4e697p+445, 0x1.8e8c4cf2532fbp+391, -0x1.e67cd98a4e000p+336, -0x1.7163fe684c3c0p+282 }, // 1e134 + pow_table_entry{ 0x1.6035ce8b6203dp+448, 0x1.e45ec05dcff73p+393, -0x1.80703fb386002p+337, 0x1.92180fed05a7cp+282 }, // 1e135 + pow_table_entry{ 0x1.b843422e3a84dp+451, -0x1.d144c7c55e058p+397, -0x1.782313e819e01p+342, 0x1.bed3c27d08e23p+288 }, // 1e136 + pow_table_entry{ 0x1.132a095ce4930p+455, -0x1.4595f9b6b586ep+400, -0x1.d62bd8e220581p+345, 0x1.2e88b31c4b1acp+291 }, // 1e137 + pow_table_entry{ 0x1.57f48bb41db7cp+458, -0x1.96fb782462e8ap+403, 0x1.b44930e55791fp+348, 0x1.e8ab7f8d7785dp+292 }, // 1e138 + pow_table_entry{ 0x1.adf1aea12525bp+461, -0x1.fcba562d7ba2cp+406, -0x1.dea482e152899p+351, -0x1.9d29a08f2a98cp+295 }, // 1e139 + pow_table_entry{ 0x1.0cb70d24b7379p+465, -0x1.1efa3aee36a2ep+411, 0x1.6a6c971996350p+356, 0x1.3f717ee9a1582p+301 }, // 1e140 + pow_table_entry{ 0x1.4fe4d06de5057p+468, -0x1.9ae326a7112e5p+412, -0x1.d7c2190021edep+356, -0x1.c2c8856fd9475p+302 }, // 1e141 + pow_table_entry{ 0x1.a3de04895e46dp+471, -0x1.8066fc14355e8p+417, 0x1.9b24d60bfd597p+363, -0x1.8337aa6cbcf99p+309 }, // 1e142 + pow_table_entry{ 0x1.066ac2d5daec4p+475, -0x1.c1017632856c3p+419, 0x1.ee0b8efcafc47p+358, -0x1.6541fb0dfdc90p+298 }, // 1e143 + pow_table_entry{ 0x1.4805738b51a75p+478, -0x1.18a0e9df9363ap+423, 0x1.04d31ce577b77p+368, -0x1.3a0df493ce8bfp+314 }, // 1e144 + pow_table_entry{ 0x1.9a06d06e26112p+481, 0x1.426db7510f86fp+425, 0x1.4607e41ed5a54p+371, 0x1.776e8e473dd12p+317 }, // 1e145 + pow_table_entry{ 0x1.00444244d7cabp+485, 0x1.326124a4aa6d1p+431, 0x1.92f13ba4d161dp+377, 0x1.75528c7643516p+322 }, // 1e146 + pow_table_entry{ 0x1.405552d60dbd6p+488, 0x1.fbe5b73754217p+432, -0x1.0a4eae3f48b71p+375, 0x1.2a72f93d425afp+321 }, // 1e147 + pow_table_entry{ 0x1.906aa78b912ccp+491, -0x1.614836beb5b59p+437, 0x1.6b31da630e51bp+382, 0x1.8ea1f6f1925e3p+327 }, // 1e148 + pow_table_entry{ 0x1.f485516e7577fp+494, -0x1.b99a446e6322fp+440, -0x1.d00d782170cf0p+382, -0x1.b6b16a412147bp+325 }, // 1e149 + pow_table_entry{ 0x1.38d352e5096afp+498, 0x1.affe54ec0828ap+442, 0x1.b77de53ac65fap+388, 0x1.f76e88ecba59ap+334 }, // 1e150 + pow_table_entry{ 0x1.8708279e4bc5bp+501, -0x1.e40215d8f5cd3p+445, 0x1.2aeaf44bbfbc9p+388, -0x1.56ba9b02e2000p+332 }, // 1e151 + pow_table_entry{ 0x1.e8ca3185deb72p+504, -0x1.9740a6d3ccd02p+450, 0x1.2eb4b62bd5f57p+394, 0x1.929cb5f1e32c0p+340 }, // 1e152 + pow_table_entry{ 0x1.317e5ef3ab327p+508, 0x1.7797bb9ffdeccp+446, -0x1.6787124d234b1p+391, 0x1.d0f8db96fdbffp+337 }, // 1e153 + pow_table_entry{ 0x1.7dddf6b095ff1p+511, -0x1.fc5504aaf0053p+456, -0x1.382d1adc0d83cp+397, 0x1.a8a6e24f97a60p+343 }, // 1e154 + pow_table_entry{ 0x1.dd55745cbb7edp+514, -0x1.eda91756b019fp+457, -0x1.8638619310e4ap+400, -0x1.ed2f651c82708p+346 }, // 1e155 + pow_table_entry{ 0x1.2a5568b9f52f4p+518, 0x1.65bb28b4e8f7ep+462, 0x1.30c1cc3041571p+408, 0x1.72f098338b9e7p+352 }, // 1e156 + pow_table_entry{ 0x1.74eac2e8727b1p+521, 0x1.bf29f2e22335ep+465, -0x1.061b81875ca65p+410, -0x1.1829a0dfc8bd0p+356 }, // 1e157 + pow_table_entry{ 0x1.d22573a28f19dp+524, 0x1.8bbd1be6ab00dp+470, 0x1.570bb3c2d9860p+416, 0x1.6872fdba1144fp+361 }, // 1e158 + pow_table_entry{ 0x1.2357684599702p+528, 0x1.775631702ae08p+474, 0x1.56675059c7f3cp+420, 0x1.c28fbd2895963p+364 }, // 1e159 + pow_table_entry{ 0x1.6c2d4256ffcc3p+531, -0x1.56a2119e533adp+474, 0x1.60092381cf859p+420, 0x1.999d6395d7ddcp+364 }, // 1e160 + pow_table_entry{ 0x1.c73892ecbfbf4p+534, -0x1.358952c0bd013p+480, 0x1.7016d8c486cdfp+422, -0x1.fffb4384b22adp+367 }, // 1e161 + pow_table_entry{ 0x1.1c835bd3f7d78p+538, 0x1.3e8a2c4789df4p+484, 0x1.1cc1c8ef5a881p+429, 0x1.9c002f5cd10a5p+375 }, // 1e162 + pow_table_entry{ 0x1.63a432c8f5cd6p+541, 0x1.8e2cb7596c571p+487, 0x1.63f23b2b312a2p+432, -0x1.f9ff8997f5663p+377 }, // 1e163 + pow_table_entry{ 0x1.bc8d3f7b3340cp+544, -0x1.c9035a0712651p+485, -0x1.889b050145ae8p+428, 0x1.e02500835011bp+374 }, // 1e164 + pow_table_entry{ 0x1.15d847ad00087p+548, 0x1.f712ef3ddca40p+494, 0x1.ab0a9f1cdf347p+440, 0x1.7a582e40a4241p+385 }, // 1e165 + pow_table_entry{ 0x1.5b4e5998400a9p+551, 0x1.74d7ab0d53cd1p+497, -0x1.ea32b91be8fe7p+443, -0x1.388e317996972p+385 }, // 1e166 + pow_table_entry{ 0x1.b221effe500d4p+554, -0x1.2df26a2f573fbp+500, -0x1.64bf6762e33e1p+446, 0x1.cf29c84500786p+391 }, // 1e167 + pow_table_entry{ 0x1.0f5535fef2084p+558, 0x1.43487da269783p+504, -0x1.7bde8277381b2p+448, 0x1.0bd0e9590259fp+392 }, // 1e168 + pow_table_entry{ 0x1.532a837eae8a5p+561, 0x1.941a9d0b03d64p+507, -0x1.76b588c541888p+453, 0x1.94ec523af42f0p+399 }, // 1e169 + pow_table_entry{ 0x1.a7f5245e5a2cfp+564, -0x1.06debbb23b343p+510, -0x1.d462eaf691eaap+456, 0x1.fa2766c9b13adp+402 }, // 1e170 + pow_table_entry{ 0x1.08f936baf85c1p+568, 0x1.b769956135fecp+513, -0x1.497ba5b436654p+459, 0x1.e2c501f07625fp+403 }, // 1e171 + pow_table_entry{ 0x1.4b378469b6732p+571, -0x1.ed5e02a33e40dp+517, 0x1.3212b86f5e00cp+463, -0x1.b49137b26d8a1p+409 }, // 1e172 + pow_table_entry{ 0x1.9e056584240fep+574, -0x1.a2d60d3037440p+518, 0x1.fa5d9a2cd603ap+464, -0x1.0dac2cf84764cp+409 }, // 1e173 + pow_table_entry{ 0x1.02c35f729689fp+578, -0x1.4171720f88a2ap+524, 0x1.3c7a805c05c24p+468, 0x1.577463e4d3610p+413 }, // 1e174 + pow_table_entry{ 0x1.4374374f3c2c6p+581, 0x1.6e32316c9534cp+527, -0x1.9d19b7e33e335p+473, 0x1.35aa2f9bc1073p+419 }, // 1e175 + pow_table_entry{ 0x1.945145230b378p+584, -0x1.b20a11c22bf0cp+527, -0x1.1809770370078p+470, 0x1.8a5dc158a4798p+415 }, // 1e176 + pow_table_entry{ 0x1.f965966bce056p+587, -0x1.0f464b195b768p+531, 0x1.ea1f42b3bb3f7p+477, -0x1.7098567289934p+423 }, // 1e177 + pow_table_entry{ 0x1.3bdf7e0360c36p+591, -0x1.2a62fbbbf64a8p+537, -0x1.66d63b27d57c3p+482, 0x1.334193f0d407fp+426 }, // 1e178 + pow_table_entry{ 0x1.8ad75d8438f43p+594, 0x1.16088aaa1845cp+539, -0x1.c08bc9f1cadb4p+485, 0x1.60047e3b42428p+431 }, // 1e179 + pow_table_entry{ 0x1.ed8d34e547314p+597, -0x1.48eaa556c351bp+541, -0x1.8575e371ec905p+485, 0x1.c02cee509698dp+431 }, // 1e180 + pow_table_entry{ 0x1.3478410f4c7ecp+601, 0x1.cc9b562a717b4p+547, -0x1.de6d35c4e67b4p+492, -0x1.6cfc7d61b43c1p+438 }, // 1e181 + pow_table_entry{ 0x1.819651531f9e8p+604, -0x1.c03dd44af225fp+550, -0x1.2b04419b100d1p+496, 0x1.1be231a2ef5a7p+442 }, // 1e182 + pow_table_entry{ 0x1.e1fbe5a7e7861p+607, 0x1.cfb2b6a251509p+553, -0x1.d715480750414p+497, 0x1.8b6af82eacc45p+443 }, // 1e183 + pow_table_entry{ 0x1.2d3d6f88f0b3dp+611, -0x1.78c1376a34b6ap+555, 0x1.b32565f6dbae7p+500, 0x1.ee45b63a57f56p+446 }, // 1e184 + pow_table_entry{ 0x1.788ccb6b2ce0cp+614, 0x1.14873d5d9f0dep+559, -0x1.e011408b6d65fp+503, 0x1.69d723c8edf2cp+449 }, // 1e185 + pow_table_entry{ 0x1.d6affe45f818fp+617, 0x1.59a90cb506d15p+562, 0x1.69fa9bd46dd02p+508, 0x1.b1133b2eca5bep+454 }, // 1e186 + pow_table_entry{ 0x1.262dfeebbb0f9p+621, 0x1.ec04d3f892217p+567, -0x1.4ee1af4d9daefp+513, -0x1.f153fb02c1869p+458 }, // 1e187 + pow_table_entry{ 0x1.6fb97ea6a9d38p+624, -0x1.31f3ee1292ac7p+569, -0x1.453436420a356p+515, -0x1.b6a3e70dc7a0fp+459 }, // 1e188 + pow_table_entry{ 0x1.cba7de5054486p+627, -0x1.7e70e99737579p+572, -0x1.2d0287a519857p+517, -0x1.122670689cc4ap+463 }, // 1e189 + pow_table_entry{ 0x1.1f48eaf234ad4p+631, -0x1.778348ff414b6p+577, 0x1.21ef359c68065p+522, -0x1.15ac0320b0fd7p+468 }, // 1e190 + pow_table_entry{ 0x1.671b25aec1d89p+634, -0x1.d5641b3f119e3p+580, -0x1.4aca7e7e3efc1p+526, -0x1.6c5c0fa374f33p+469 }, // 1e191 + pow_table_entry{ 0x1.c0e1ef1a724ebp+637, -0x1.4abd220ed605cp+583, -0x1.3afa3c3b9d763p+528, 0x1.8e233b1ceb740p+474 }, // 1e192 + pow_table_entry{ 0x1.188d357087713p+641, -0x1.4eb6354945c3ap+587, 0x1.9d91cd2d5ecb1p+533, 0x1.78d604f213288p+478 }, // 1e193 + pow_table_entry{ 0x1.5eb082cca94d7p+644, 0x1.5d9c3d6468cb8p+590, 0x1.3d901e2d9f75fp+530, -0x1.1e8f3a2d01abfp+476 }, // 1e194 + pow_table_entry{ 0x1.b65ca37fd3a0dp+647, 0x1.6a06997b05fccp+592, 0x1.8cf425b907536p+533, 0x1.99ccf747bde91p+479 }, // 1e195 + pow_table_entry{ 0x1.11f9e62fe4448p+651, 0x1.e2441fece3be0p+596, -0x1.f83f3b4362db6p+542, 0x1.000403519ad63p+486 }, // 1e196 + pow_table_entry{ 0x1.56785fbbdd55ap+654, 0x1.2d6a93f40e56cp+600, -0x1.3b27850a1dc92p+546, 0x1.2800a084c0318p+492 }, // 1e197 + pow_table_entry{ 0x1.ac1677aad4ab1p+657, -0x1.0e758e1ddc273p+602, 0x1.d83a66cd6b127p+547, 0x1.c8032297c0f76p+493 }, // 1e198 + pow_table_entry{ 0x1.0b8e0acac4eafp+661, -0x1.d484bc6954cc4p+607, 0x1.139240203175cp+552, 0x1.4e80facf6c4d5p+498 }, // 1e199 + pow_table_entry{ 0x1.4e718d7d7625ap+664, 0x1.6cb428f8ac016p+609, 0x1.5876d0283dd33p+555, 0x1.a22139834760ap+501 }, // 1e200 + pow_table_entry{ 0x1.a20df0dcd3af1p+667, -0x1.1c0f6664947f2p+613, -0x1.45adef36cadffp+556, 0x1.5530fc832718dp+499 }, // 1e201 + pow_table_entry{ 0x1.0548b68a044d6p+671, 0x1.ce76600123309p+617, -0x1.197196b047d98p+563, 0x1.4d53e9dd1f870p+507 }, // 1e202 + pow_table_entry{ 0x1.469ae42c8560cp+674, 0x1.084fe005aff2cp+618, -0x1.7f37f171673f8p+564, 0x1.a0a8e4546768bp+510 }, // 1e203 + pow_table_entry{ 0x1.98419d37a6b8fp+677, 0x1.4a63d8071bef7p+621, -0x1.df05edcdc10f5p+567, -0x1.f72ce2967ebd2p+513 }, // 1e204 + pow_table_entry{ 0x1.fe52048590673p+680, -0x1.318198fb8e8a6p+625, 0x1.52712d7d9d59ap+569, 0x1.160fc987c3274p+515 }, // 1e205 + pow_table_entry{ 0x1.3ef342d37a408p+684, -0x1.bef0ff9d39168p+629, 0x1.34e1af1ba0960p+575, 0x1.adc9ddf4d9f88p+519 }, // 1e206 + pow_table_entry{ 0x1.8eb0138858d0ap+687, -0x1.17569fc243ae1p+633, 0x1.821a1ae288bb8p+578, 0x1.0c9e2ab9083b5p+523 }, // 1e207 + pow_table_entry{ 0x1.f25c186a6f04cp+690, 0x1.45a7709a56ccep+635, -0x1.d5f5e64d5159dp+577, -0x1.81d254c5adaecp+523 }, // 1e208 + pow_table_entry{ 0x1.37798f4285630p+694, -0x1.9a3baccfc4e00p+640, 0x1.76d232807d694p+586, -0x1.2e246e9f7191ap+530 }, // 1e209 + pow_table_entry{ 0x1.8557f31326bbbp+697, 0x1.ff3567fc49e80p+643, 0x1.d486bf209cc39p+589, -0x1.79ad8a474df61p+533 }, // 1e210 + pow_table_entry{ 0x1.e6adefd7f06aap+700, 0x1.7f02c1fb5c621p+646, -0x1.b65791173c0b9p+592, 0x1.13f389936f463p+537 }, // 1e211 + pow_table_entry{ 0x1.302cb5e6f642ap+704, 0x1.ef61b93d19bd4p+650, 0x1.6e0945517a78cp+596, 0x1.d63c1afe12c5fp+542 }, // 1e212 + pow_table_entry{ 0x1.7c37e360b3d35p+707, 0x1.ace89e3180b26p+651, -0x1.b3a34ad137483p+596, -0x1.a1a6f2134444ap+542 }, // 1e213 + pow_table_entry{ 0x1.db45dc38e0c82p+710, 0x1.8608b16f7837cp+656, -0x1.8823076161469p+601, -0x1.0a10ae981555cp+545 }, // 1e214 + pow_table_entry{ 0x1.290ba9a38c7d1p+714, 0x1.f3c56ee5ab22dp+660, 0x1.85750db19199fp+606, 0x1.566d64b83caaap+551 }, // 1e215 + pow_table_entry{ 0x1.734e940c6f9c6p+717, -0x1.1e926ac1d428fp+662, 0x1.cda4a23bec00ep+608, -0x1.4fdd0866d0ab0p+552 }, // 1e216 + pow_table_entry{ 0x1.d022390f8b837p+720, 0x1.4ce47d46db667p+666, -0x1.7de46a6a31fddp+610, -0x1.a3d44a8084d5cp+555 }, // 1e217 + pow_table_entry{ 0x1.221563a9b7323p+724, -0x1.aff131b3b6e00p+670, 0x1.44544f5f68305p+616, 0x1.bf336a2df59f5p+562 }, // 1e218 + pow_table_entry{ 0x1.6a9abc9424febp+727, 0x1.c82503beb6d01p+672, -0x1.aa5a7322f70e5p+617, 0x1.780225cb98390p+562 }, // 1e219 + pow_table_entry{ 0x1.c5416bb92e3e6p+730, 0x1.d172257324208p+672, -0x1.4f10febb4d1e0p+616, -0x1.4fea860c0dc5dp+562 }, // 1e220 + pow_table_entry{ 0x1.1b48e353bce70p+734, -0x1.dba31513012d7p+679, -0x1.868b54f9a8819p+625, -0x1.868f949e3c44ep+571 }, // 1e221 + pow_table_entry{ 0x1.621b1c28ac20cp+737, -0x1.2945ed2be0bc7p+683, 0x1.8be8eae3f6af0p+629, 0x1.17cc863a34a9fp+574 }, // 1e222 + pow_table_entry{ 0x1.baa1e332d728fp+740, -0x1.73976876d8eb8p+686, -0x1.111cda630ba54p+632, 0x1.5dbfa7c8c1d46p+577 }, // 1e223 + pow_table_entry{ 0x1.14a52dffc6799p+744, 0x1.2f82bd6b70d9ap+689, -0x1.556410fbce8e9p+635, 0x1.b52f91baf2498p+580 }, // 1e224 + pow_table_entry{ 0x1.59ce797fb817fp+747, 0x1.bdb1b66326880p+693, 0x1.550bab14f7374p+636, 0x1.13dbb14d76df0p+580 }, // 1e225 + pow_table_entry{ 0x1.b04217dfa61dfp+750, 0x1.2d1e23fbf02a0p+696, 0x1.aa4e95da35051p+639, 0x1.58d29da0d496cp+583 }, // 1e226 + pow_table_entry{ 0x1.0e294eebc7d2cp+754, -0x1.c3cd298289e5cp+700, 0x1.0a711da861233p+643, -0x1.4a1f175edec87p+589 }, // 1e227 + pow_table_entry{ 0x1.51b3a2a6b9c76p+757, 0x1.cb3f8c1cd3a0dp+703, 0x1.4d0d6512796bfp+646, 0x1.635922c969857p+592 }, // 1e228 + pow_table_entry{ 0x1.a6208b5068394p+760, 0x1.f07b792044482p+703, 0x1.a050be5717c6fp+649, 0x1.785ed6f787cdap+594 }, // 1e229 + pow_table_entry{ 0x1.07d457124123dp+764, -0x1.d9365a897aaa6p+710, 0x1.810c9dbd9bb71p+655, 0x1.7d6768cb569c1p+601 }, // 1e230 + pow_table_entry{ 0x1.49c96cd6d16ccp+767, -0x1.4f83f12bd954fp+713, -0x1.0f581d697ead9p+659, -0x1.233ebd01d3bcfp+604 }, // 1e231 + pow_table_entry{ 0x1.9c3bc80c85c7fp+770, -0x1.a364ed76cfaa3p+716, -0x1.4cb8930f7963ep+660, 0x1.27e3277b6ea7bp+606 }, // 1e232 + pow_table_entry{ 0x1.01a55d07d39cfp+774, 0x1.e783ae56f8d68p+718, 0x1.300ca41654219p+664, 0x1.b8edf8ad2528dp+610 }, // 1e233 + pow_table_entry{ 0x1.420eb449c8843p+777, -0x1.9e9b661348f3ep+721, 0x1.7c0fcd1be92a0p+667, -0x1.b1ad124f231a0p+612 }, // 1e234 + pow_table_entry{ 0x1.9292615c3aa54p+780, -0x1.81908fe606cc3p+726, -0x1.093b0fe74722ep+672, -0x1.0f0c2b7175f04p+616 }, // 1e235 + pow_table_entry{ 0x1.f736f9b3494e9p+783, -0x1.e1f4b3df887f4p+729, -0x1.2e274f8463ae6p+673, -0x1.52cf364dd36c5p+619 }, // 1e236 + pow_table_entry{ 0x1.3a825c100dd11p+787, 0x1.52c70f944ab07p+733, 0x1.d0c9db93506ccp+679, 0x1.61f3f07adee29p+620 }, // 1e237 + pow_table_entry{ 0x1.8922f31411456p+790, -0x1.58872c86a2a37p+736, 0x1.44fc52782487fp+682, 0x1.ba70ec99969b3p+623 }, // 1e238 + pow_table_entry{ 0x1.eb6bafd91596bp+793, 0x1.455c215ed2cefp+737, -0x1.a71263a749585p+683, 0x1.148693dffe210p+627 }, // 1e239 + pow_table_entry{ 0x1.33234de7ad7e3p+797, -0x1.34a66b24bc3ebp+741, 0x1.de5206ddc8a34p+685, -0x1.532be394012b6p+631 }, // 1e240 + pow_table_entry{ 0x1.7fec216198ddcp+800, -0x1.6074017b7ad39p+746, -0x1.9aa19776ac534p+692, 0x1.2c0491c37f44ep+635 }, // 1e241 + pow_table_entry{ 0x1.dfe729b9ff153p+803, -0x1.b89101da59888p+749, 0x1.fd6c0557512fep+694, 0x1.7705b6345f162p+638 }, // 1e242 + pow_table_entry{ 0x1.2bf07a143f6d4p+807, -0x1.935aa12877f55p+753, 0x1.3e63835692bdfp+698, -0x1.8ace370fa2491p+643 }, // 1e243 + pow_table_entry{ 0x1.76ec98994f489p+810, -0x1.f831497295f2ap+756, -0x1.c80e6f4f224a6p+699, 0x1.27e3b2c7524a3p+642 }, // 1e244 + pow_table_entry{ 0x1.d4a7bebfa31abp+813, -0x1.763d9bcf3b6f5p+759, 0x1.b8bdbe9ba2a46p+705, 0x1.171dc9f7926ddp+649 }, // 1e245 + pow_table_entry{ 0x1.24e8d737c5f0bp+817, -0x1.69e6816185259p+763, 0x1.26ed2e428b4d8p+708, -0x1.a8c6b0e2a23dbp+654 }, // 1e246 + pow_table_entry{ 0x1.6e230d05b76cdp+820, 0x1.3b9fde4619911p+766, -0x1.1eaf0c59a3be5p+710, -0x1.2f85d1b4acd1dp+653 }, // 1e247 + pow_table_entry{ 0x1.c9abd04725481p+823, -0x1.75782a28600abp+769, 0x1.4cd29847f9a91p+714, -0x1.2f6ce8c43b00cp+659 }, // 1e248 + pow_table_entry{ 0x1.1e0b622c774d0p+827, 0x1.9694e5a6c3f95p+773, 0x1.d0039f2cfc09bp+718, -0x1.ded208bd52704p+664 }, // 1e249 + pow_table_entry{ 0x1.658e3ab795204p+830, 0x1.fc3a1f1074f7bp+776, -0x1.ddfdbc83e279fp+722, -0x1.ab43457653862p+668 }, // 1e250 + pow_table_entry{ 0x1.bef1c9657a686p+833, -0x1.84b7592b6dca7p+779, 0x1.5505a8b649cf1p+724, 0x1.d3d7d2582f30ap+670 }, // 1e251 + pow_table_entry{ 0x1.17571ddf6c814p+837, -0x1.f2f297bb249e8p+783, -0x1.156e3b4708ef5p+729, 0x1.d23371bb8ebf3p+675 }, // 1e252 + pow_table_entry{ 0x1.5d2ce55747a18p+840, 0x1.9050c2561239ep+786, -0x1.5ac9ca18cb2b2p+732, 0x1.46c04e2a726f0p+678 }, // 1e253 + pow_table_entry{ 0x1.b4781ead1989ep+843, 0x1.f464f2eb96c85p+789, 0x1.3a0f0d8408288p+733, -0x1.9e3e792bc3d51p+679 }, // 1e254 + pow_table_entry{ 0x1.10cb132c2ff63p+847, 0x1.c5f8be99f1e99p+790, 0x1.8892d0e50a329p+736, 0x1.fa31e8894b35bp+682 }, // 1e255 + pow_table_entry{ 0x1.54fdd7f73bf3cp+850, -0x1.7222446fe4670p+795, -0x1.15487ae1b340cp+739, -0x1.0e833aa8c3f9cp+684 }, // 1e256 + pow_table_entry{ 0x1.aa3d4df50af0bp+853, -0x1.ceaad58bdd80cp+798, -0x1.5a9a999a2010fp+742, -0x1.52240952f4f83p+687 }, // 1e257 + pow_table_entry{ 0x1.0a6650b926d67p+857, -0x1.109562bbb5384p+803, 0x1.c9d7d7ffeafd6p+748, -0x1.7a6ad0ba7b236p+694 }, // 1e258 + pow_table_entry{ 0x1.4cffe4e7708c0p+860, 0x1.ab4544955d79bp+806, 0x1.1e26e6fff2de6p+752, -0x1.ec82c2748cf62p+698 }, // 1e259 + pow_table_entry{ 0x1.a03fde214caf1p+863, -0x1.e9e96a454b27ep+809, 0x1.96c282ffbe57cp+753, -0x1.9e8dcc46c0ce9p+699 }, // 1e260 + pow_table_entry{ 0x1.0427ead4cfed6p+867, 0x1.4dce1d94b1071p+813, 0x1.3f8e6477f5bdbp+759, 0x1.3f39d814f1dfcp+705 }, // 1e261 + pow_table_entry{ 0x1.4531e58a03e8cp+870, -0x1.7af96c188adc9p+814, -0x1.c23809a8334b7p+760, -0x1.c3dec79746a16p+706 }, // 1e262 + pow_table_entry{ 0x1.967e5eec84e2fp+873, -0x1.d9b7c71ead93cp+817, 0x1.9a73e7db7fc35p+762, 0x1.96530d05cf6c8p+708 }, // 1e263 + pow_table_entry{ 0x1.fc1df6a7a61bbp+876, -0x1.94096e39963e3p+822, 0x1.40221c3a4bf68p+768, 0x1.5f7cfa08e868fp+714 }, // 1e264 + pow_table_entry{ 0x1.3d92ba28c7d15p+880, -0x1.7c85e4e3fde6ep+826, 0x1.481551a46f7a1p+772, 0x1.b75c388b22833p+717 }, // 1e265 + pow_table_entry{ 0x1.8cf768b2f9c5ap+883, -0x1.b74ebc39fac12p+828, -0x1.979567c9d29dap+773, 0x1.299a356f591ffp+717 }, // 1e266 + pow_table_entry{ 0x1.f03542dfb8370p+886, 0x1.dadd94b7868e9p+831, 0x1.01429f21dc5d8p+777, -0x1.a2ffcf4d34260p+722 }, // 1e267 + pow_table_entry{ 0x1.362149cbd3226p+890, 0x1.28ca7cf2b4192p+835, -0x1.be6cb915ac8b2p+780, -0x1.05dfe1904097cp+726 }, // 1e268 + pow_table_entry{ 0x1.83a99c3ec7eb0p+893, -0x1.468171e84f705p+839, 0x1.d1f818a4e8521p+783, 0x1.71504c175e849p+728 }, // 1e269 + pow_table_entry{ 0x1.e494034e79e5cp+896, -0x1.9821ce62634c6p+842, -0x1.b989e131dd997p+786, 0x1.e6d22f8e9b12ep+732 }, // 1e270 + pow_table_entry{ 0x1.2edc82110c2f9p+900, 0x1.00eadf0281f04p+846, 0x1.7604e9a06ac01p+791, -0x1.3ef2891b7c50dp+734 }, // 1e271 + pow_table_entry{ 0x1.7a93a2954f3b8p+903, -0x1.beda693cdd93bp+849, 0x1.d386240885701p+794, 0x1.9c5435276926cp+739 }, // 1e272 + pow_table_entry{ 0x1.d9388b3aa30a5p+906, 0x1.d16efc73eb077p+852, -0x1.dbcc297aac99fp+798, -0x1.fe4b5ec75e47dp+743 }, // 1e273 + pow_table_entry{ 0x1.27c35704a5e67p+910, 0x1.a2e55dc872e4ap+856, 0x1.5a81984d507f2p+800, -0x1.f778d9e4d766fp+744 }, // 1e274 + pow_table_entry{ 0x1.71b42cc5cf601p+913, 0x1.0b9eb53a8f9ddp+859, -0x1.93b78067d6d84p+805, -0x1.a7557105e0d41p+751 }, // 1e275 + pow_table_entry{ 0x1.ce2137f743382p+916, -0x1.b1799d76cc7acp+862, -0x1.f14ac103991cbp+807, -0x1.12acd4759090ep+750 }, // 1e276 + pow_table_entry{ 0x1.20d4c2fa8a031p+920, -0x1.dd804d47f9975p+861, 0x1.2628ebb809c23p+806, 0x1.514fecda1695ep+752 }, // 1e277 + pow_table_entry{ 0x1.6909f3b92c83dp+923, 0x1.dab1f9f660803p+868, -0x1.0904cd959f3cdp+813, -0x1.eb4b82fdec789p+758 }, // 1e278 + pow_table_entry{ 0x1.c34c70a777a4dp+926, -0x1.d750c3c603afep+872, -0x1.a5a3007d83860p+817, -0x1.198798ef59e5bp+763 }, // 1e279 + pow_table_entry{ 0x1.1a0fc668aac70p+930, -0x1.4d24f4b7849bep+875, 0x1.f0f43f631b988p+820, -0x1.5fe97f2b305f2p+766 }, // 1e280 + pow_table_entry{ 0x1.6093b802d578cp+933, -0x1.a06e31e565c2dp+878, -0x1.92ceb0c41d816p+823, -0x1.b7e3def5fc76ep+769 }, // 1e281 + pow_table_entry{ 0x1.b8b8a6038ad6fp+936, -0x1.0444df2f5f99cp+882, -0x1.fbc12e7a9270ep+827, -0x1.2ee6b59bdca4dp+769 }, // 1e282 + pow_table_entry{ 0x1.137367c236c65p+940, 0x1.baa9e904c87fdp+885, -0x1.3d58bd0c9b869p+831, 0x1.e855f9cfd2c32p+776 }, // 1e283 + pow_table_entry{ 0x1.585041b2c477fp+943, -0x1.eb55ce5d02b02p+889, -0x1.195dd89f84d06p+833, 0x1.89ade10f1dcfap+777 }, // 1e284 + pow_table_entry{ 0x1.ae64521f7595ep+946, 0x1.33a97c177947bp+891, -0x1.5fb54ec766047p+836, -0x1.84f9a9ab46af2p+782 }, // 1e285 + pow_table_entry{ 0x1.0cfeb353a97dbp+950, -0x1.3fb6127154333p+895, -0x1.dbd1513c9fc2dp+840, 0x1.8ce3f5f4f3d29p+786 }, // 1e286 + pow_table_entry{ 0x1.503e602893dd2p+953, -0x1.c7d1cb86d4a00p+899, -0x1.4b16962f1ecdfp+841, -0x1.fc6191b9e719ep+784 }, // 1e287 + pow_table_entry{ 0x1.a44df832b8d46p+956, -0x1.ce31f3444e400p+899, -0x1.9ddc3bbae6817p+844, 0x1.61218275e7c7fp+789 }, // 1e288 + pow_table_entry{ 0x1.06b0bb1fb384cp+960, -0x1.241be701561d0p+906, -0x1.02a9a554d010ep+848, -0x1.11a5873b27918p+794 }, // 1e289 + pow_table_entry{ 0x1.485ce9e7a065fp+963, -0x1.6d22e0c1aba44p+909, -0x1.43540eaa04152p+851, 0x1.53e22dec1d143p+796 }, // 1e290 + pow_table_entry{ 0x1.9a742461887f6p+966, 0x1.3794670de972bp+912, -0x1.94291254851a6p+854, -0x1.2b92a34c6dd36p+800 }, // 1e291 + pow_table_entry{ 0x1.008896bcf54fap+970, -0x1.ea19fcba70c29p+913, -0x1.f93356e9a6610p+857, 0x1.131167c0ed6f8p+802 }, // 1e292 + pow_table_entry{ 0x1.40aabc6c32a38p+973, 0x1.b36bf082de61ap+919, -0x1.b3bc0165207fdp+865, 0x1.855f5706c4a33p+811 }, // 1e293 + pow_table_entry{ 0x1.90d56b873f4c7p+976, -0x1.dfb9135c6a060p+922, -0x1.05580df344fdep+865, -0x1.948d3378a3407p+810 }, // 1e294 + pow_table_entry{ 0x1.f50ac6690f1f8p+979, 0x1.50b14f98f6f10p+924, -0x1.46ae1170163d6p+868, 0x1.0327bfd499f7cp+814 }, // 1e295 + pow_table_entry{ 0x1.3926bc01a973bp+983, 0x1.a4dda37f34ad4p+927, -0x1.985995cc1bccbp+871, -0x1.781ca06c7f14bp+816 }, // 1e296 + pow_table_entry{ 0x1.87706b0213d0ap+986, -0x1.f1eaf3a0fe277p+930, -0x1.fe6ffb3f22bfep+874, 0x1.4ee1bbc309314p+816 }, // 1e297 + pow_table_entry{ 0x1.e94c85c298c4cp+989, 0x1.646693ddb093bp+935, -0x1.cfc17f41dd6e0p+880, 0x1.4345345567970p+826 }, // 1e298 + pow_table_entry{ 0x1.31cfd3999f7b0p+993, -0x1.213fe39571a3bp+939, -0x1.10ec77c495326p+885, 0x1.9416816ac17ccp+829 }, // 1e299 + pow_table_entry{ 0x1.7e43c8800759cp+996, -0x1.698fdc7ace0cap+942, -0x1.549e56d6e9fbep+886, 0x1.f91c21c571dbfp+832 }, // 1e300 + pow_table_entry{ 0x1.ddd4baa009303p+999, -0x1.c3f3d399818fdp+945, 0x1.958e84dcd6e15p+891, -0x1.c44e6ae498d69p+836 }, // 1e301 + pow_table_entry{ 0x1.2aa4f4a405be2p+1003, -0x1.9a78643ff0f9ep+949, 0x1.f5e44c2819334p+893, -0x1.ab102cedf8619p+836 }, // 1e302 + pow_table_entry{ 0x1.754e31cd072dap+1006, -0x1.167d4fed38559p+944, 0x1.aeaf990fc0078p+889, -0x1.5d438297679f9p+835 }, // 1e303 + pow_table_entry{ 0x1.d2a1be4048f90p+1009, 0x1.fea3e35c17799p+955, 0x1.440d2dbfa9d80p+901, 0x1.2b25b5ce615f4p+847 }, // 1e304 + pow_table_entry{ 0x1.23a516e82d9bap+1013, 0x1.3f266e198eac0p+959, -0x1.6aef86d06bb20p+904, 0x1.75ef2341f9b71p+850 }, // 1e305 + pow_table_entry{ 0x1.6c8e5ca239029p+1016, -0x1.c43fd98036a41p+960, 0x1.d2a4bbdbcb0c4p+904, -0x1.64a89f6c3ed99p+850 }, // 1e306 + pow_table_entry{ 0x1.c7b1f3cac7433p+1019, 0x1.cab0301fbbb2fp+963, -0x1.b8b2152d4230bp+907, -0x1.bdd2c7474e8ffp+853 }, // 1e307 + pow_table_entry{ 0x1.1ccf385ebc8a0p+1023, -0x1.c2a3c3d855605p+966, -0x1.89b7a69e24af4p+912, 0x1.b4ae21b9b7730p+858 }, // 1e308 +}; + +static_assert( + sizeof(pow10_table) / sizeof(pow10_table[0]) == + static_cast(pow10_max_exponent - pow10_min_exponent + 1)); + +// Exact powers used by decimal parsing. The reciprocal for 5^n is +// ceil(2^binary_shift / 5^n); callers shorten it to the target precision +// before multiplying and then correct the candidate against the exact power. +inline constexpr std::uint64_t power5_u64[] = { + 1ull, + 5ull, + 25ull, + 125ull, + 625ull, + 3125ull, + 15625ull, + 78125ull, + 390625ull, + 1953125ull, + 9765625ull, + 48828125ull, + 244140625ull, + 1220703125ull, + 6103515625ull, + 30517578125ull, + 152587890625ull, + 762939453125ull, + 3814697265625ull, + 19073486328125ull, + 95367431640625ull, + 476837158203125ull, + 2384185791015625ull, + 11920928955078125ull, + 59604644775390625ull, + 298023223876953125ull, + 1490116119384765625ull, + 7450580596923828125ull +}; + +inline constexpr int power5_checkpoint_exponent = 13; + +struct power5_checkpoint +{ + std::uint32_t words[11]; + std::uint8_t size; +}; + +inline constexpr power5_checkpoint power5_checkpoints[] = { + { { 0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u }, 1 }, + { { 0x48c27395u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u }, 1 }, + { { 0x320334b9u, 0x14adf4b7u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u }, 2 }, + { { 0x88becaadu, 0x27128759u, 0x05e0a1fdu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u }, 3 }, + { { 0x8b31adb1u, 0xd0e54920u, 0x4957d300u, 0x01aba471u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u }, 4 }, + { { 0xbd129b05u, 0x271ca2f7u, 0x4545f7a3u, 0x8e3fe1c8u, 0x00798b13u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u }, 5 }, + { { 0x494178e9u, 0xcdcaa7d3u, 0x4c9b1e10u, 0xeadb8d5au, 0xc50b7f31u, 0x00228b6fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u }, 6 }, + { { 0x34fe0a9du, 0x6b0f8581u, 0xc766ff00u, 0xd64283f9u, 0x47b62eb0u, 0xb2dcec0eu, 0x0009d174u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u }, 7 }, + { { 0x299ab461u, 0xcbd35a82u, 0xafed1aa5u, 0xd95e18b9u, 0xb247b0b2u, 0x3f9d63b7u, 0xfb8c0314u, 0x0002ca5du, 0x00000000u, 0x00000000u, 0x00000000u }, 8 }, + { { 0xaf948f75u, 0xc603306au, 0xbaf0e4aeu, 0xbf11cf47u, 0x2cc56000u, 0xf5bfd307u, 0x551c5cadu, 0x0c8001abu, 0x0000cb09u, 0x00000000u, 0x00000000u }, 9 }, + { { 0x8c930e19u, 0x60d5f1e5u, 0x791290b5u, 0x766a4898u, 0xaf4f040fu, 0x24797cdcu, 0x7016455du, 0x3b076983u, 0xc40ab65bu, 0x000039b4u, 0x00000000u }, 10 }, + { { 0x97de6f8du, 0x57adcc28u, 0x7b7f423bu, 0x9011b7e6u, 0xf4d5f027u, 0x7e57e237u, 0x00f705c7u, 0x9cd7a93du, 0xc3e3efe8u, 0xac2d5daeu, 0x00001066u }, 11 } +}; + +inline constexpr int reciprocal_power5_precision = 268; +inline constexpr int reciprocal_power5_word_count = 9; +inline constexpr int reciprocal_power5_max_exponent = 72; + +struct reciprocal_power5 +{ + std::uint32_t words[reciprocal_power5_word_count]; + std::uint16_t binary_shift; +}; + +inline constexpr reciprocal_power5 reciprocal_power5_table[] = { + { { 0xcccccccdu, 0xccccccccu, 0xccccccccu, 0xccccccccu, 0xccccccccu, 0xccccccccu, 0xccccccccu, 0xccccccccu, 0x00000cccu }, 270 }, + { { 0x0a3d70a4u, 0x3d70a3d7u, 0x70a3d70au, 0xa3d70a3du, 0xd70a3d70u, 0x0a3d70a3u, 0x3d70a3d7u, 0x70a3d70au, 0x00000a3du }, 272 }, + { { 0xd4fdf3b7u, 0x3126e978u, 0x5a1cac08u, 0x4fdf3b64u, 0x126e978du, 0xa1cac083u, 0xfdf3b645u, 0x26e978d4u, 0x00000831u }, 274 }, + { { 0x87fcb924u, 0x81d7dbf4u, 0xf6944673u, 0x4c985f06u, 0xea4a8c15u, 0x36113404u, 0x9652bd3cu, 0x71758e21u, 0x00000d1bu }, 277 }, + { { 0x0663c750u, 0x67dfe32au, 0x9210385cu, 0xd6e04c05u, 0x21d53cddu, 0xf80dc337u, 0x784230fcu, 0x5ac471b4u, 0x00000a7cu }, 279 }, + { { 0xd1e96c40u, 0x1fe64f54u, 0x41a6937du, 0x45803cd1u, 0x1b10fd7eu, 0xf9a49c2cu, 0xc69b5a63u, 0x7bd05af6u, 0x00000863u }, 281 }, + { { 0xb64246cdu, 0x330a1887u, 0x9c3db8c8u, 0x08cd2e1bu, 0x91b4c8cau, 0x29076046u, 0xa42bc3d3u, 0xf94d5e57u, 0x00000d6bu }, 284 }, + { { 0xf8350571u, 0x8f3b46d2u, 0x1697c706u, 0xd3d75816u, 0xa7c3d3d4u, 0x20d2b36bu, 0x1cefcfdcu, 0xc7711846u, 0x00000abcu }, 286 }, + { { 0x602a6ac1u, 0x7295d242u, 0xabac9f38u, 0x7645e011u, 0x53030fddu, 0x80a88f89u, 0x4a597316u, 0x05f4136bu, 0x00000897u }, 288 }, + { { 0xcd10aaceu, 0x8422ea03u, 0x12adcb8du, 0xf06fcce9u, 0x84d1b2fbu, 0x3440e5a8u, 0xdd5beb57u, 0x6fecebdeu, 0x00000dbeu }, 291 }, + { { 0xa40d5571u, 0x034f219cu, 0xa88b093eu, 0xf38ca3edu, 0x9d748f2fu, 0xf69a5153u, 0x4aafef78u, 0xbff0bcb2u, 0x00000afeu }, 293 }, + { { 0xe9a4445bu, 0x9c3f4e16u, 0xba08d431u, 0x8fa3b657u, 0xe45d3f59u, 0xf87b7442u, 0x088cbf93u, 0xccc096f5u, 0x000008cbu }, 295 }, + { { 0x42a06d5eu, 0x606549beu, 0x900e204fu, 0x4c3923bfu, 0x06fb988fu, 0x5a5f206bu, 0x40e13286u, 0xe13424bbu, 0x00000e12u }, 298 }, + { { 0x6880577eu, 0x805107cbu, 0x733e803fu, 0x09c74fccu, 0x38c946d9u, 0x484c19efu, 0xcd80f538u, 0x4dc35095u, 0x00000b42u }, 300 }, + { { 0x2066ac65u, 0x0040d309u, 0x8f653366u, 0x6e390ca3u, 0x60a1057au, 0xd37014bfu, 0x0acd90f9u, 0xd7cf73abu, 0x00000901u }, 302 }, + { { 0x670aad6fu, 0xcd3484dbu, 0x7f08523cu, 0x16c1add2u, 0x9a9b3bf7u, 0xebe68798u, 0xde15b4c2u, 0x594bec44u, 0x00000e69u }, 305 }, + { { 0x85a22459u, 0x70f6d0afu, 0x98d374fdu, 0xdf0157dbu, 0x487c2ff8u, 0xefeb9fadu, 0x4b44909bu, 0x7aa3236au, 0x00000b87u }, 307 }, + { { 0x9e1b5047u, 0xc0c573bfu, 0x470f90cau, 0x7f344649u, 0x39fcf32du, 0xf322e624u, 0xd5d073afu, 0x2ee8e921u, 0x00000939u }, 309 }, + { { 0xfcf88071u, 0x346f1f98u, 0x3e7f4e11u, 0x65207075u, 0xc32e51e2u, 0x1e9e3d06u, 0x561a52b3u, 0xe4a7db69u, 0x00000ec1u }, 312 }, + { { 0xfd9399f4u, 0x9058e613u, 0x6532a4dau, 0xea8059f7u, 0xcf584181u, 0x4bb1ca6bu, 0x11aea88fu, 0x50864921u, 0x00000bceu }, 314 }, + { { 0x97a947f7u, 0x737a51a9u, 0xea8eea48u, 0xeecd14c5u, 0xa5e03467u, 0x6fc16ebcu, 0xa7beed3fu, 0xda05074du, 0x00000971u }, 316 }, + { { 0x8c420cbeu, 0x1f2a1c42u, 0xaa7e43a7u, 0xb148213cu, 0xd633870cu, 0x4c68b12du, 0x72cb1532u, 0x90080bafu, 0x00000f1cu }, 319 }, + { { 0x09ce7098u, 0x18ee7d02u, 0x886502ecu, 0xf439b430u, 0x782938d6u, 0x7053c0f1u, 0x28a2775bu, 0xd9a00959u, 0x00000c16u }, 321 }, + { { 0x6e3ec07au, 0x472530ceu, 0xa050cf23u, 0xc3615cf3u, 0x93542d78u, 0x26a96727u, 0x53b52c49u, 0xe14cd447u, 0x000009abu }, 323 }, + { { 0x49fe00c2u, 0xd83b814au, 0x33b47e9eu, 0x389bc7ecu, 0x522048c1u, 0x3ddbd83fu, 0xec5513a8u, 0x687aed3eu, 0x00000f79u }, 326 }, + { { 0x07fe6702u, 0x1362cdd5u, 0x8fc3987fu, 0xc6e30656u, 0xa819d3cdu, 0x64afe032u, 0x89dda953u, 0x20625765u, 0x00000c61u }, 328 }, + { { 0x39985268u, 0x42b57177u, 0x0c9c79ffu, 0x9f1c0512u, 0x5347dca4u, 0xea264cf5u, 0x07e48775u, 0x4d1b791eu, 0x000009e7u }, 330 }, + { { 0xf5c083d9u, 0x9def1bf1u, 0xe0fa5ccbu, 0xcb60081cu, 0x853fc76du, 0xa9d6e188u, 0x0ca0d8bcu, 0x7b5f2830u, 0x00000fd8u }, 333 }, + { { 0xf7cd3647u, 0x7e58e327u, 0x80c84a3cu, 0x6f80067du, 0x043305f1u, 0xee45813au, 0xa3b3e096u, 0x2f7f5359u, 0x00000cadu }, 335 }, + { { 0xf970f839u, 0x98471c1fu, 0x00a03b63u, 0xf2ccd1feu, 0xd028d18du, 0x58379a94u, 0x4fc31a12u, 0x25ff75e1u, 0x00000a24u }, 337 }, + { { 0xc78d9361u, 0xe038e34cu, 0x00802f82u, 0x8f0a4198u, 0x0ced7471u, 0xacf94877u, 0x3fcf480eu, 0xeb32c4b4u, 0x0000081cu }, 339 }, + { { 0xd8e28568u, 0x338e387au, 0xcd99e59eu, 0xb1aa028cu, 0x14af20b5u, 0xe18eda58u, 0x994ba67du, 0x11ead453u, 0x00000cfbu }, 342 }, + { { 0xe0b53786u, 0x8fa4f9fbu, 0x0ae1847eu, 0xc154ced7u, 0xdd58e6f7u, 0x1ad8aeacu, 0xadd61ecbu, 0x74bbdd0fu, 0x00000a62u }, 344 }, + { { 0xe6f75f9fu, 0x0c83fb2fu, 0x3be79d32u, 0x67770bdfu, 0xb113ebf9u, 0xaf13bef0u, 0x24ab4bd5u, 0xc3c97da6u, 0x0000084eu }, 346 }, + { { 0x0b2565cbu, 0x14065eb3u, 0x2ca5c850u, 0xd8be7965u, 0x4e86465bu, 0xe4ec64b4u, 0x07787955u, 0xd2dbfc3du, 0x00000d4au }, 349 }, + { { 0x08eab7d5u, 0xdcd1e55cu, 0xbd516d0cu, 0xe098611du, 0x0b9e9eafu, 0x50bd1d5du, 0x392d2ddeu, 0x42499697u, 0x00000aa2u }, 351 }, + { { 0xa0bbc644u, 0x4a418449u, 0x6441240au, 0xe6e04db1u, 0xa2e54bbfu, 0x0d64177du, 0xc75757e5u, 0xcea14545u, 0x00000881u }, 353 }, + { { 0x012c706du, 0x1068d3a9u, 0xa06839aau, 0xa49a15e8u, 0x04a212ccu, 0x7bd358c9u, 0x7225596eu, 0x7dced53cu, 0x00000d9cu }, 356 }, + { { 0xcdbd26beu, 0xd9ed7620u, 0x80536154u, 0xb6e1ab20u, 0xd081a8a3u, 0xc975e0a0u, 0xc1b77abeu, 0x97d8aa96u, 0x00000ae3u }, 358 }, + { { 0x0afdb898u, 0xe18ac4e7u, 0x0042b443u, 0x2be7bc1au, 0xda0153b6u, 0x3ac4b3b3u, 0xce2c6232u, 0x1313bbabu, 0x000008b6u }, 360 }, + { { 0xab2f8dc0u, 0x0277a171u, 0xcd3786d3u, 0x463f935cu, 0xf66885f0u, 0xc46dec52u, 0xe37a36b6u, 0x1e85f912u, 0x00000df0u }, 363 }, + { { 0x55bfa499u, 0xcec61ac1u, 0x70f938a8u, 0x6b660f7du, 0x91ed37f3u, 0x038b2375u, 0x1c61c55fu, 0x7ed1940fu, 0x00000b26u }, 365 }, + { { 0x4499507bu, 0x3f04e234u, 0xf3fa93bau, 0xbc51a5fdu, 0xdb242cc2u, 0x3608e92au, 0xb04e377fu, 0x98a7a9a5u, 0x000008ebu }, 367 }, + { { 0x6dc21a5eu, 0x64d49d20u, 0xecc41f90u, 0x6082a32fu, 0xc506ae04u, 0x89a7db77u, 0xb3b058cbu, 0xc10c42a2u, 0x00000e45u }, 370 }, + { { 0x8b01aeb2u, 0xb7107db3u, 0x8a367fa6u, 0x4d354f59u, 0xd0d224d0u, 0x07b97c5fu, 0x5c8d13d6u, 0x00d69bb5u, 0x00000b6bu }, 372 }, + { { 0xd59af228u, 0x927397c2u, 0x6e91ffb8u, 0xd75dd914u, 0xa70e83d9u, 0x3961304cu, 0xb070dcabu, 0x6712162au, 0x00000922u }, 374 }, + { { 0xbc2b1d0cu, 0xb71f5937u, 0x174fff8du, 0xbefc8e87u, 0x0b4a6c8fu, 0x8f01e6e1u, 0xe71afaabu, 0x71b689ddu, 0x00000e9du }, 377 }, + { { 0x30227da3u, 0xc5b2adc6u, 0xdf7332d7u, 0x3263a538u, 0xd5d523a6u, 0x0c018580u, 0xec159556u, 0x27c53b17u, 0x00000bb1u }, 379 }, + { { 0x8ce86483u, 0x37c2249eu, 0xe5f5c246u, 0x5b82ea93u, 0x44aa82ebu, 0x7001379au, 0x89aadddeu, 0x86376279u, 0x0000095au }, 381 }, + { { 0xe173d404u, 0x8c69d430u, 0xd65603a3u, 0xc59e441fu, 0xd44404abu, 0xe66858f6u, 0x0f77c963u, 0x3d256a5cu, 0x00000ef7u }, 384 }, + { { 0xe78fdcd0u, 0xa387dcf3u, 0x11de694fu, 0xd14b69b3u, 0xdd0336efu, 0x8520472bu, 0xa5f96de9u, 0xfdb78849u, 0x00000bf8u }, 386 }, + { { 0x1fa64a40u, 0x1c6cb0c3u, 0x417ebaa6u, 0x743c548fu, 0xe4029259u, 0x6a8038efu, 0xb7fabe54u, 0xfe2c6d07u, 0x00000993u }, 388 }, + { { 0x990a1067u, 0x60ade79eu, 0xcf312aa3u, 0x5393ba7eu, 0x066a83c2u, 0xdd99f4b3u, 0x265dfd53u, 0x304714d9u, 0x00000f53u }, 391 }, + { { 0x473b4052u, 0xb3be52e5u, 0x3f5a8882u, 0x42dc9532u, 0x6b886968u, 0x7e14c3c2u, 0x51e4caa9u, 0x8d05aa47u, 0x00000c42u }, 393 }, + { { 0x05c90042u, 0x5c984251u, 0xcc486d35u, 0xcf16ddc1u, 0x5606bab9u, 0x64dd6968u, 0x4183d554u, 0xd737bb6cu, 0x000009ceu }, 395 }, + { { 0xd60e66cfu, 0xc75a03b4u, 0xad40aebbu, 0xe4f162cfu, 0x56712ac2u, 0x6e2f0f0du, 0x68d2eeedu, 0x58592be0u, 0x00000fb1u }, 398 }, + { { 0xde71ebd9u, 0x3914cfc3u, 0xbdcd5896u, 0xb727823fu, 0x45275568u, 0x5825a5a4u, 0x20a8bf24u, 0xe047564du, 0x00000c8du }, 400 }, + { { 0xb1f4bcaeu, 0xfa770c9cu, 0xcb0aad44u, 0xc5b934ffu, 0xd0ec4453u, 0xaceaeae9u, 0xe6ed65b6u, 0x19d2ab70u, 0x00000a0bu }, 402 }, + { { 0x27f6fd58u, 0xc85f3d4au, 0x6f3bbdd0u, 0x37c75d99u, 0x40bd0376u, 0xbd88bbeeu, 0xebf11e2bu, 0xe17555f3u, 0x00000808u }, 404 }, + { { 0xd98b2ef3u, 0xda31fba9u, 0x185f961au, 0xbfa5628fu, 0x6794d256u, 0x2f412cb0u, 0x131b6379u, 0x02555653u, 0x00000cdbu }, 407 }, + { { 0x7ad5bf29u, 0xe1c19621u, 0x46b2de7bu, 0x32eab53fu, 0x52dd7512u, 0x8c3423c0u, 0xa8e2b5fau, 0xceaaab75u, 0x00000a48u }, 409 }, + { { 0x624498eeu, 0xe7ce11b4u, 0x055be52fu, 0x8f222a99u, 0x424ac40eu, 0x3cf68300u, 0x53e89195u, 0x3eeeef91u, 0x0000083au }, 411 }, + { { 0x03a0f4afu, 0x72e34f87u, 0xd55fd519u, 0x7e9d10f4u, 0x03aad34au, 0xc7f0d19au, 0x8640e8eeu, 0xfe4b18e8u, 0x00000d29u }, 414 }, + { { 0xcfb3f6f3u, 0x28b5d938u, 0xaab310e1u, 0xfee40d90u, 0x362242a1u, 0x398d747bu, 0x9e9a53f2u, 0xfea27a53u, 0x00000a87u }, 416 }, + { { 0x0c8ff8c2u, 0x53c4adc7u, 0xbbc273e7u, 0xcbe9a473u, 0x2b4e9bb4u, 0x947129fcu, 0x4baea98eu, 0xcbb52ea9u, 0x0000086cu }, 418 }, + { { 0xe0e65ad0u, 0xb93aafa4u, 0x2c6a530bu, 0x4642a0b9u, 0xabb0f921u, 0xed81dcc6u, 0x791775b0u, 0xdf884aa8u, 0x00000d7au }, 421 }, + { { 0x1a51e240u, 0x60fbbfb7u, 0xbd21dc09u, 0x05021a2du, 0x22f3fa81u, 0x2467e3d2u, 0x2dac5e27u, 0xb2d36eedu, 0x00000ac8u }, 423 }, + { { 0x7b74b500u, 0xe72fcc92u, 0x641b166du, 0x6a6814f1u, 0xb58ffb9au, 0xe9ecb641u, 0xf156b1b8u, 0x8f0f8bf0u, 0x000008a0u }, 425 }, + { { 0xc5878800u, 0xa5194750u, 0x0691bd7cu, 0x770cee4fu, 0x88e65f5du, 0x431456cfu, 0x82244f8eu, 0xb1b27981u, 0x00000dcdu }, 428 }, + { { 0x379fa000u, 0x50e105dau, 0x9edafdfdu, 0x9270bea5u, 0x6d851917u, 0x35a9df0cu, 0xce8372d8u, 0xf48ec79au, 0x00000b0au }, 430 }, + { { 0xc6194ccdu, 0x73e737e1u, 0x18af3197u, 0xa85a321eu, 0x8ad0e0dfu, 0xc487e5a3u, 0xa535f579u, 0x90723948u, 0x000008d5u }, 432 }, + { { 0xd68ee148u, 0xb971f302u, 0xc1184f58u, 0xda29e9c9u, 0xde1b0165u, 0x6da63c38u, 0xd523225cu, 0x80b6c20du, 0x00000e22u }, 435 } +}; + +static_assert( + sizeof(reciprocal_power5_table) / sizeof(reciprocal_power5_table[0]) == + static_cast(reciprocal_power5_max_exponent)); + +} // namespace pow_tables +} // namespace bl::detail + +#endif // FLTX_DETAIL_POW_TABLES_INCLUDED diff --git a/include/fltx/detail/simd.h b/include/fltx/detail/simd.h index 7266a13..3e0be73 100644 --- a/include/fltx/detail/simd.h +++ b/include/fltx/detail/simd.h @@ -11,70 +11,62 @@ #define FLTX_DETAIL_SIMD_INCLUDED #include "fltx/config.h" -#if !defined(BL_FLTX_HAS_SSE2) -# if !defined(__EMSCRIPTEN__) && (defined(__SSE2__) || defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 2))) -# define BL_FLTX_HAS_SSE2 1 +#if !defined(FLTX_HAS_SSE2) +# if !FLTX_HEADER_SIMD_OFF && !defined(__EMSCRIPTEN__) && \ + (defined(__SSE2__) || defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 2))) +# define FLTX_HAS_SSE2 1 # else -# define BL_FLTX_HAS_SSE2 0 +# define FLTX_HAS_SSE2 0 # endif #endif -#if !defined(BL_FLTX_HAS_NEON) -# if !defined(__EMSCRIPTEN__) && defined(__aarch64__) && (defined(__ARM_NEON) || defined(__ARM_NEON__)) -# define BL_FLTX_HAS_NEON 1 +#if !defined(FLTX_HAS_NEON) +# if !FLTX_HEADER_SIMD_OFF && !defined(__EMSCRIPTEN__) && defined(__aarch64__) && \ + (defined(__ARM_NEON) || defined(__ARM_NEON__)) +# define FLTX_HAS_NEON 1 # else -# define BL_FLTX_HAS_NEON 0 +# define FLTX_HAS_NEON 0 # endif #endif -#if !defined(BL_FLTX_HAS_WASM_SIMD) -# if defined(__wasm_simd128__) -# define BL_FLTX_HAS_WASM_SIMD 1 +#if !defined(FLTX_HAS_WASM_SIMD) +# if !FLTX_HEADER_SIMD_OFF && defined(__wasm_simd128__) +# define FLTX_HAS_WASM_SIMD 1 # else -# define BL_FLTX_HAS_WASM_SIMD 0 +# define FLTX_HAS_WASM_SIMD 0 # endif #endif -#if !defined(BL_FLTX_HAS_X86_FMA) -# if BL_FLTX_HAS_SSE2 && (defined(__FMA__) || (defined(_MSC_VER) && (defined(__AVX2__) || defined(__AVX512F__)))) -# define BL_FLTX_HAS_X86_FMA 1 -# else -# define BL_FLTX_HAS_X86_FMA 0 -# endif -#endif - -#if BL_FLTX_HAS_SSE2 +#if FLTX_HAS_SSE2 # include #endif -#if BL_FLTX_HAS_X86_FMA +#if FLTX_HAS_X86_FMA || FLTX_GUARDED_X86_FMA # include #endif -#if BL_FLTX_HAS_NEON +#if FLTX_HAS_NEON # include #endif -#if BL_FLTX_HAS_WASM_SIMD +#if FLTX_HAS_WASM_SIMD # include #endif -#if !defined(BL_FLTX_SIMD_USE_FMA_TWO_PROD) -# if defined(FLTX_DISABLE_FMA_AVAILABLE) -# define BL_FLTX_SIMD_USE_FMA_TWO_PROD 0 -# elif BL_FLTX_HAS_X86_FMA || BL_FLTX_HAS_NEON -# define BL_FLTX_SIMD_USE_FMA_TWO_PROD 1 +#if !defined(FLTX_SIMD_USE_FMA_TWO_PROD) +# if FLTX_HAS_X86_FMA || FLTX_HAS_NEON +# define FLTX_SIMD_USE_FMA_TWO_PROD 1 # else -# define BL_FLTX_SIMD_USE_FMA_TWO_PROD 0 +# define FLTX_SIMD_USE_FMA_TWO_PROD 0 # endif #endif -#if BL_FLTX_HAS_SSE2 || BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD +#if FLTX_HAS_SSE2 || FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD namespace bl::detail::simd { - #if BL_FLTX_HAS_SSE2 + #if FLTX_HAS_SSE2 using f64x2 = __m128d; - #elif BL_FLTX_HAS_NEON + #elif FLTX_HAS_NEON using f64x2 = float64x2_t; #else using f64x2 = v128_t; @@ -82,9 +74,9 @@ namespace bl::detail::simd BL_FORCE_INLINE f64x2 f64x2_set(double lane0, double lane1) noexcept { - #if BL_FLTX_HAS_SSE2 + #if FLTX_HAS_SSE2 return _mm_set_pd(lane1, lane0); - #elif BL_FLTX_HAS_NEON + #elif FLTX_HAS_NEON return vsetq_lane_f64(lane1, vdupq_n_f64(lane0), 1); #else return wasm_f64x2_make(lane0, lane1); @@ -93,9 +85,9 @@ namespace bl::detail::simd BL_FORCE_INLINE f64x2 f64x2_splat(double value) noexcept { - #if BL_FLTX_HAS_SSE2 + #if FLTX_HAS_SSE2 return _mm_set1_pd(value); - #elif BL_FLTX_HAS_NEON + #elif FLTX_HAS_NEON return vdupq_n_f64(value); #else return wasm_f64x2_splat(value); @@ -104,9 +96,9 @@ namespace bl::detail::simd BL_FORCE_INLINE void f64x2_store_array(f64x2 value, double* lanes) noexcept { - #if BL_FLTX_HAS_SSE2 + #if FLTX_HAS_SSE2 _mm_storeu_pd(lanes, value); - #elif BL_FLTX_HAS_NEON + #elif FLTX_HAS_NEON vst1q_f64(lanes, value); #else wasm_v128_store(lanes, value); @@ -123,9 +115,9 @@ namespace bl::detail::simd BL_FORCE_INLINE f64x2 f64x2_add(f64x2 a, f64x2 b) noexcept { - #if BL_FLTX_HAS_SSE2 + #if FLTX_HAS_SSE2 return _mm_add_pd(a, b); - #elif BL_FLTX_HAS_NEON + #elif FLTX_HAS_NEON return vaddq_f64(a, b); #else return wasm_f64x2_add(a, b); @@ -134,9 +126,9 @@ namespace bl::detail::simd BL_FORCE_INLINE f64x2 f64x2_sub(f64x2 a, f64x2 b) noexcept { - #if BL_FLTX_HAS_SSE2 + #if FLTX_HAS_SSE2 return _mm_sub_pd(a, b); - #elif BL_FLTX_HAS_NEON + #elif FLTX_HAS_NEON return vsubq_f64(a, b); #else return wasm_f64x2_sub(a, b); @@ -145,24 +137,19 @@ namespace bl::detail::simd BL_FORCE_INLINE f64x2 f64x2_mul(f64x2 a, f64x2 b) noexcept { - #if BL_FLTX_HAS_SSE2 + #if FLTX_HAS_SSE2 return _mm_mul_pd(a, b); - #elif BL_FLTX_HAS_NEON + #elif FLTX_HAS_NEON return vmulq_f64(a, b); #else return wasm_f64x2_mul(a, b); #endif } - BL_FORCE_INLINE void f64x2_two_prod_precise(f64x2 a, f64x2 b, f64x2& p, f64x2& e) noexcept + BL_FORCE_INLINE void f64x2_two_prod_dekker(f64x2 a, f64x2 b, f64x2& p, f64x2& e) noexcept { p = f64x2_mul(a, b); - #if BL_FLTX_SIMD_USE_FMA_TWO_PROD && BL_FLTX_HAS_X86_FMA - e = _mm_fmsub_pd(a, b, p); - #elif BL_FLTX_SIMD_USE_FMA_TWO_PROD && BL_FLTX_HAS_NEON - e = vfmaq_f64(f64x2_sub(f64x2_splat(0.0), p), a, b); - #else const f64x2 split = f64x2_splat(134217729.0); const f64x2 a_scaled = f64x2_mul(a, split); const f64x2 b_scaled = f64x2_mul(b, split); @@ -175,6 +162,28 @@ namespace bl::detail::simd e = f64x2_add(f64x2_sub(f64x2_mul(a_hi, b_hi), p), f64x2_mul(a_hi, b_lo)); e = f64x2_add(e, f64x2_mul(a_lo, b_hi)); e = f64x2_add(e, f64x2_mul(a_lo, b_lo)); + } + + #if (FLTX_HAS_SSE2 && (FLTX_HAS_X86_FMA || FLTX_GUARDED_X86_FMA)) || FLTX_HAS_NEON + FLTX_X86_FMA_LEAF_INLINE void f64x2_two_prod_fma( + f64x2 a, f64x2 b, f64x2& p, f64x2& e) noexcept + { + p = f64x2_mul(a, b); + + #if FLTX_HAS_SSE2 + e = _mm_fmsub_pd(a, b, p); + #else + e = vfmaq_f64(f64x2_sub(f64x2_splat(0.0), p), a, b); + #endif + } + #endif + + BL_FORCE_INLINE void f64x2_two_prod_precise(f64x2 a, f64x2 b, f64x2& p, f64x2& e) noexcept + { + #if FLTX_SIMD_USE_FMA_TWO_PROD && (FLTX_HAS_X86_FMA || FLTX_HAS_NEON) + f64x2_two_prod_fma(a, b, p, e); + #else + f64x2_two_prod_dekker(a, b, p, e); #endif } diff --git a/include/fltx/detail/static_string.h b/include/fltx/detail/static_string.h new file mode 100644 index 0000000..10ca958 --- /dev/null +++ b/include/fltx/detail/static_string.h @@ -0,0 +1,284 @@ +/** + * fltx/detail/static_string.h - Fixed-capacity constexpr string helpers for fltx I/O. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#ifndef FLTX_DETAIL_STATIC_STRING_INCLUDED +#define FLTX_DETAIL_STATIC_STRING_INCLUDED +#include +#include +#include + +namespace bl +{ + struct precision_info + { + int digits = -1; + int leading_digits = 0; + int trailing_digits = 0; + + constexpr precision_info() noexcept = default; + + constexpr precision_info(int precision_digits) noexcept : + digits(precision_digits) + { + } + + constexpr precision_info(int precision_digits, int leading, int trailing) noexcept : + digits(precision_digits), + leading_digits(leading), + trailing_digits(trailing) + { + } + }; + + template + struct static_string + { + using size_type = std::size_t; + + static constexpr size_type npos = static_cast(-1); + static constexpr size_type static_capacity = capacity; + + char chars[capacity + 1]{}; + size_type length = 0; + + constexpr static_string() noexcept = default; + + constexpr static_string(const char* text) + { + assign(text); + } + + constexpr static_string(std::string_view text) + { + assign(text); + } + + template + constexpr static_string(const char(&text)[size]) + { + assign(std::string_view(text, size - 1)); + } + + constexpr static_string& operator=(const char* text) + { + assign(text); + return *this; + } + + constexpr static_string& operator=(std::string_view text) + { + assign(text); + return *this; + } + + constexpr operator std::string_view() const noexcept + { + return view(); + } + + constexpr operator std::string() const + { + return std::string(chars, length); + } + + constexpr std::string_view view() const noexcept + { + return std::string_view(chars, length); + } + + constexpr char* data() noexcept + { + return chars; + } + + constexpr const char* data() const noexcept + { + return chars; + } + + constexpr const char* c_str() const noexcept + { + return chars; + } + + constexpr size_type size() const noexcept + { + return length; + } + + constexpr bool empty() const noexcept + { + return length == 0; + } + + constexpr char* begin() noexcept + { + return chars; + } + + constexpr char* end() noexcept + { + return chars + length; + } + + constexpr const char* begin() const noexcept + { + return chars; + } + + constexpr const char* end() const noexcept + { + return chars + length; + } + + constexpr char& operator[](size_type index) noexcept + { + return chars[index]; + } + + constexpr const char& operator[](size_type index) const noexcept + { + return chars[index]; + } + + constexpr char& front() noexcept + { + return chars[0]; + } + + constexpr const char& front() const noexcept + { + return chars[0]; + } + + constexpr void clear() noexcept + { + length = 0; + chars[0] = '\0'; + } + + constexpr void resize(size_type new_length) + { + require_capacity(new_length); + if (new_length > length) + { + for (size_type index = length; index < new_length; ++index) + chars[index] = '\0'; + } + length = new_length; + chars[length] = '\0'; + } + + constexpr void push_back(char value) + { + require_capacity(length + 1); + chars[length++] = value; + chars[length] = '\0'; + } + + constexpr static_string& append(size_type count, char value) + { + require_capacity(length + count); + for (size_type index = 0; index < count; ++index) + chars[length + index] = value; + length += count; + chars[length] = '\0'; + return *this; + } + + constexpr static_string& append(const char* text) + { + return append(std::string_view(text, const_string_length(text))); + } + + constexpr static_string& append(std::string_view text) + { + require_capacity(length + text.size()); + for (size_type index = 0; index < text.size(); ++index) + chars[length + index] = text[index]; + length += text.size(); + chars[length] = '\0'; + return *this; + } + + constexpr static_string& insert(size_type position, const char* text) + { + return insert(position, std::string_view(text, const_string_length(text))); + } + + constexpr static_string& insert(size_type position, std::string_view text) + { + require_insert_position(position); + require_capacity(length + text.size()); + for (size_type index = length; index > position; --index) + chars[index + text.size() - 1] = chars[index - 1]; + for (size_type index = 0; index < text.size(); ++index) + chars[position + index] = text[index]; + length += text.size(); + chars[length] = '\0'; + return *this; + } + + constexpr static_string& insert(size_type position, size_type count, char value) + { + require_insert_position(position); + require_capacity(length + count); + for (size_type index = length; index > position; --index) + chars[index + count - 1] = chars[index - 1]; + for (size_type index = 0; index < count; ++index) + chars[position + index] = value; + length += count; + chars[length] = '\0'; + return *this; + } + + constexpr void assign(const char* text) + { + assign(std::string_view(text, const_string_length(text))); + } + + constexpr void assign(std::string_view text) + { + require_capacity(text.size()); + for (size_type index = 0; index < text.size(); ++index) + chars[index] = text[index]; + length = text.size(); + chars[length] = '\0'; + } + + private: + static constexpr size_type const_string_length(const char* text) noexcept + { + size_type result = 0; + while (text[result] != '\0') + ++result; + return result; + } + + constexpr void require_capacity(size_type requested_capacity) const + { + if (requested_capacity > capacity) + throw "static_string capacity exceeded"; + } + + constexpr void require_insert_position(size_type position) const + { + if (position > length) + throw "static_string insert position out of range"; + } + }; + + using f32_io_string = static_string<64>; + using f64_io_string = static_string<352>; + using f128_io_string = static_string<352>; + using f256_io_string = static_string<384>; + +} // namespace bl + +#endif diff --git a/include/fltx/detail/trig_reduce_consts.h b/include/fltx/detail/trig_reduce_consts.h new file mode 100644 index 0000000..cf94a79 --- /dev/null +++ b/include/fltx/detail/trig_reduce_consts.h @@ -0,0 +1,38 @@ +/** + * fltx/detail/trig_reduce_consts.h - Shared fixed-point trig reduction constants. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#ifndef FLTX_DETAIL_TRIG_REDUCE_CONSTS_INCLUDED +#define FLTX_DETAIL_TRIG_REDUCE_CONSTS_INCLUDED +#include + +namespace bl::detail::trig_reduce +{ + inline constexpr std::uint32_t two_over_pi_fixed_words[] = { + 0xcaf27f1du, 0x9f3a1f35u, 0x6b1e5ef8u, 0xc33d26efu, + 0x98327dbbu, 0x32c2de4fu, 0x3f7e33e8u, 0xa5ff0705u, + 0x5719053eu, 0xddaf44d1u, 0x8b961ca6u, 0x8359c476u, + 0xdce8092au, 0x19c367cdu, 0x8c6b47c4u, 0x60e27bc0u, + 0xca73a8c9u, 0x06061556u, 0x4d732731u, 0x8dffd880u, + 0x14a06840u, 0x6599855fu, 0x5ee61b08u, 0xa9e39161u, + 0x9af4361du, 0xf0cfbc20u, 0xfc7b6babu, 0x56033046u, + 0x1f8d5d08u, 0x6bfb5fb1u, 0x8a5292eau, 0x3d0739f7u, + 0xebe5f17bu, 0x7527bac7u, 0x9e5fea2du, 0x4f463f66u, + 0x27cb09b7u, 0x6d367ecfu, 0x5a0a6d1fu, 0xef2f118bu, + 0xde05980fu, 0x1ff897ffu, 0xbdf9283bu, 0x9c845f8bu, + 0x835339f4u, 0x3991d639u, 0xb45f7e41u, 0xe99c7026u, + 0x2ebb4484u, 0xe88235f5u, 0xb129a73eu, 0xfe1deb1cu, + 0x09d1921cu, 0x06492eeau, 0x424dd2e0u, 0xb7246e3au, + 0xdebbc561u, 0xfe5163abu, 0x3c439041u, 0xdb629599u, + 0xf534ddc0u, 0xfc2757d1u, 0x4e441529u, 0xa2f9836eu + }; + + inline constexpr int two_over_pi_fixed_bits = 2048; +} + +#endif // FLTX_DETAIL_TRIG_REDUCE_CONSTS_INCLUDED diff --git a/include/fltx/f128.h b/include/fltx/f128.h index 4963e29..6e77466 100644 --- a/include/fltx/f128.h +++ b/include/fltx/f128.h @@ -13,11 +13,11 @@ #include "fltx/aliases.h" #include "fltx/f128_type.h" #include "fltx/f128_limits.h" -#include "fltx/f128_numbers.h" #include "fltx/f128_conversions.h" #include "fltx/f128_comparison.h" #include "fltx/f128_classification.h" #include "fltx/f128_arithmetic.h" +#include "fltx/f128_approx_comparison.h" #include "fltx/detail/interop.h" diff --git a/include/fltx/f128_approx_comparison.h b/include/fltx/f128_approx_comparison.h new file mode 100644 index 0000000..7885bfd --- /dev/null +++ b/include/fltx/f128_approx_comparison.h @@ -0,0 +1,36 @@ +/** + * fltx/f128_approx_comparison.h - Approximate comparison for f128. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#ifndef FLTX_F128_APPROX_COMPARISON_INCLUDED +#define FLTX_F128_APPROX_COMPARISON_INCLUDED + +#include "fltx/f128_arithmetic.h" +#include "fltx/f128_classification.h" +#include "fltx/traits.h" +#include "fltx/detail/approx_comparison.h" + +namespace bl +{ + inline constexpr f128_s f128_parity_tolerance{ 0x1p-80, 0.0 }; + + template + requires (fltx_f128 && fltx_f128) + [[nodiscard]] BL_FORCE_INLINE constexpr bool approx_eq( + const Value& value, + const Expected& expected, + const f128_s& relative_tolerance = f128_parity_tolerance) noexcept + { + return detail::approx_eq_impl( + static_cast(value), + static_cast(expected), + relative_tolerance); + } +} + +#endif diff --git a/include/fltx/f128_arithmetic.h b/include/fltx/f128_arithmetic.h index 59b986c..6269790 100644 --- a/include/fltx/f128_arithmetic.h +++ b/include/fltx/f128_arithmetic.h @@ -14,107 +14,159 @@ namespace bl { BL_PUSH_PRECISE; -[[nodiscard]] FLTX_CORE_INLINE constexpr f128_s operator+(const f128_s& a, const f128_s& b) noexcept -{ - if (detail::fp::isinf_or_nan(a.hi) || detail::fp::isinf_or_nan(b.hi)) [[unlikely]] - return detail::_f128::add_special(a, b); - - const f128_s out = detail::_f128::add_inline(a, b); - if (detail::fp::isinf_or_nan(out.hi)) [[unlikely]] - return detail::_f128::signed_infinity(signbit(a)); - return out; -} - -[[nodiscard]] FLTX_CORE_INLINE constexpr f128_s operator-(const f128_s& a, const f128_s& b) noexcept -{ - if (detail::fp::isinf_or_nan(a.hi) || detail::fp::isinf_or_nan(b.hi)) [[unlikely]] - return detail::_f128::sub_special(a, b); - - const f128_s out = detail::_f128::sub_inline(a, b); - if (detail::fp::isinf_or_nan(out.hi)) [[unlikely]] - return detail::_f128::signed_infinity(signbit(a)); - return out; +// Dispatches full f128 addition to canonical or relaxed finite semantics. +[[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator+(const f128_s& a, const f128_s& b) noexcept +{ + #if defined(FLTX_FAST_MATH) + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f128::add_canonical_inline(a, b), + detail::_f128::add_finite_inline(a, b) + ); + #else + return detail::_f128::add_canonical_inline(a, b); + #endif +} + +// Dispatches full f128 subtraction to canonical or relaxed finite semantics. +[[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator-(const f128_s& a, const f128_s& b) noexcept +{ + BL_FP_IF_CONSTEVAL_WARNING_PUSH + BL_FP_IF_CONSTEVAL + { + if (detail::fp::isinf_or_nan(a.hi) || detail::fp::isinf_or_nan(b.hi)) [[unlikely]] + return detail::_f128::sub_special(a, b); + } + BL_FP_IF_CONSTEVAL_WARNING_POP + + #if defined(FLTX_FAST_MATH) + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f128::sub_canonical_inline(a, b), + detail::_f128::sub_finite_inline(a, b) + ); + #else + return detail::_f128::sub_canonical_inline(a, b); + #endif } BL_POP_PRECISE; -[[nodiscard]] FLTX_CORE_INLINE constexpr f128_s operator*(const f128_s& a, const f128_s& b) noexcept -{ - if (detail::fp::isinf_or_nan(a.hi) || detail::fp::isinf_or_nan(b.hi)) [[unlikely]] - return detail::_f128::mul_special(a, b); - if ((a.hi == 0.0 && a.lo == 0.0) || (b.hi == 0.0 && b.lo == 0.0)) [[unlikely]] - return detail::_f128::signed_zero(signbit(a) != signbit(b)); - const f128_s out = detail::_f128::mul_inline(a, b); - if (detail::fp::isinf_or_nan(out.hi)) [[unlikely]] - return detail::_f128::signed_infinity(signbit(a) != signbit(b)); - return out; +// Dispatches full f128 multiplication to canonical or relaxed finite semantics. +[[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator*(const f128_s& a, const f128_s& b) noexcept +{ + #if defined(FLTX_FAST_MATH) + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f128::mul_canonical_inline(a, b), + detail::_f128::mul_finite_inline(a, b) + ); + #else + return detail::_f128::mul_canonical_inline(a, b); + #endif } -[[nodiscard]] FLTX_CORE_INLINE constexpr f128_s operator/(const f128_s& a, const f128_s& b) noexcept +// Dispatches full f128 division to canonical or relaxed finite semantics. +[[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator/(const f128_s& a, const f128_s& b) noexcept { - if (detail::fp::iszero_or_inf_or_nan(b.hi)) [[unlikely]] - return detail::_f128::div_special(a, b); - - return detail::_f128::div_inline(a, b); + #if defined(FLTX_FAST_MATH) + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f128::div_canonical_inline(a, b), + detail::_f128::div_finite_inline(a, b) + ); + #else + return detail::_f128::div_canonical_inline(a, b); + #endif } +// Dispatches f128-plus-double addition for the active arithmetic semantics. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator+(const f128_s& a, double b) noexcept { - if (detail::fp::isinf_or_nan(a.hi) || detail::fp::isinf_or_nan(b)) [[unlikely]] - return detail::_f128::add_special(a, f128_s{ b, 0.0 }); - - const f128_s out = detail::_f128::add_double_inline(a, b); - if (detail::fp::isinf_or_nan(out.hi)) [[unlikely]] - return detail::_f128::signed_infinity(signbit(a)); - return out; + #if defined(FLTX_FAST_MATH) + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f128::add_double_canonical_inline(a, b), + detail::_f128::add_double_finite_inline(a, b) + ); + #else + return detail::_f128::add_double_canonical_inline(a, b); + #endif } +// Dispatches f128-minus-double subtraction for the active arithmetic semantics. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator-(const f128_s& a, double b) noexcept { - if (detail::fp::isinf_or_nan(a.hi) || detail::fp::isinf_or_nan(b)) [[unlikely]] - return detail::_f128::sub_special(a, f128_s{ b, 0.0 }); - - const f128_s out = detail::_f128::sub_double_inline(a, b); - if (detail::fp::isinf_or_nan(out.hi)) [[unlikely]] - return detail::_f128::signed_infinity(signbit(a)); - return out; + #if defined(FLTX_FAST_MATH) + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f128::sub_double_canonical_inline(a, b), + detail::_f128::sub_double_finite_inline(a, b) + ); + #else + return detail::_f128::sub_double_canonical_inline(a, b); + #endif } +// Dispatches f128-by-double multiplication for the active arithmetic semantics. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator*(const f128_s& a, double b) noexcept { - if (detail::fp::isinf_or_nan(a.hi) || detail::fp::isinf_or_nan(b)) [[unlikely]] - return detail::_f128::mul_special(a, f128_s{ b, 0.0 }); - if ((a.hi == 0.0 && a.lo == 0.0) || b == 0.0) [[unlikely]] - return detail::_f128::signed_zero(signbit(a) != detail::fp::signbit(b)); - - const f128_s out = detail::_f128::mul_double_inline(a, b); - if (detail::fp::isinf_or_nan(out.hi)) [[unlikely]] - return detail::_f128::signed_infinity(signbit(a) != detail::fp::signbit(b)); - return out; + #if defined(FLTX_FAST_MATH) + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f128::mul_double_canonical_inline(a, b), + detail::_f128::mul_double_finite_inline(a, b) + ); + #else + return detail::_f128::mul_double_canonical_inline(a, b); + #endif } +// Dispatches f128-by-double division for the active arithmetic semantics. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator/(const f128_s& a, double b) noexcept { - if (detail::fp::iszero_or_inf_or_nan(b)) [[unlikely]] - return detail::_f128::div_special(a, f128_s{ b, 0.0 }); - - return detail::_f128::div_double_inline(a, b); + #if defined(FLTX_FAST_MATH) + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f128::div_double_canonical_inline(a, b), + detail::_f128::div_double_finite_inline(a, b) + ); + #else + return detail::_f128::div_double_canonical_inline(a, b); + #endif } +// Adds double to f128 through the commutative scalar overload. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator+(double a, const f128_s& b) noexcept { return b + a; } +// Subtracts f128 from double through the existing scalar subtraction path. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator-(double a, const f128_s& b) noexcept { return -(b - a); } +// Multiplies double by f128 through the commutative scalar overload. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator*(double a, const f128_s& b) noexcept { return b * a; } +// Divides double by f128 through the full-value division overload. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator/(double a, const f128_s& b) noexcept { return f128_s{ a } / b; } +// Promotes float and adds it to f128. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator+(const f128_s& a, float b) noexcept { return a + (double)b; } +// Promotes float and subtracts it from f128. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator-(const f128_s& a, float b) noexcept { return a - (double)b; } +// Promotes float and multiplies it by f128. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator*(const f128_s& a, float b) noexcept { return a * (double)b; } +// Promotes float and divides f128 by it. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator/(const f128_s& a, float b) noexcept { return a / (double)b; } +// Promotes float and adds f128 to it. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator+(float a, const f128_s& b) noexcept { return (double)a + b; } +// Promotes float and subtracts f128 from it. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator-(float a, const f128_s& b) noexcept { return (double)a - b; } +// Promotes float and multiplies it by f128. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator*(float a, const f128_s& b) noexcept { return (double)a * b; } +// Promotes float and divides it by f128. [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator/(float a, const f128_s& b) noexcept { return (double)a / b; } +// Squares an f128 storage value with canonical multiplication semantics. +[[nodiscard]] BL_FORCE_INLINE constexpr f128_s sqr(const f128_s& a) noexcept +{ + return detail::_f128::mul_canonical_inline(a, a); +} + +// Squares an f128 wrapper value with canonical multiplication semantics. +[[nodiscard]] BL_FORCE_INLINE constexpr f128 sqr(const f128& a) noexcept +{ + return f128{ detail::_f128::mul_canonical_inline(a, a) }; +} + +// Adds an integer to f128, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator+(const f128_s& a, T b) noexcept { @@ -124,6 +176,7 @@ template, int> = 0> return a + detail::_f128::integer_to_f128(b); } +// Subtracts an integer from f128, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator-(const f128_s& a, T b) noexcept { @@ -133,6 +186,7 @@ template, int> = 0> return a - detail::_f128::integer_to_f128(b); } +// Multiplies f128 by an integer, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator*(const f128_s& a, T b) noexcept { @@ -142,6 +196,7 @@ template, int> = 0> return a * detail::_f128::integer_to_f128(b); } +// Divides f128 by an integer, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator/(const f128_s& a, T b) noexcept { @@ -151,6 +206,7 @@ template, int> = 0> return a / detail::_f128::integer_to_f128(b); } +// Adds f128 to an integer, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator+(T a, const f128_s& b) noexcept { @@ -160,6 +216,7 @@ template, int> = 0> return detail::_f128::integer_to_f128(a) + b; } +// Subtracts f128 from an integer, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator-(T a, const f128_s& b) noexcept { @@ -169,6 +226,7 @@ template, int> = 0> return detail::_f128::integer_to_f128(a) - b; } +// Multiplies an integer by f128, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator*(T a, const f128_s& b) noexcept { @@ -178,6 +236,7 @@ template, int> = 0> return detail::_f128::integer_to_f128(a) * b; } +// Divides an integer by f128, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f128_s operator/(T a, const f128_s& b) noexcept { diff --git a/include/fltx/f128_classification.h b/include/fltx/f128_classification.h index b49c5da..343d522 100644 --- a/include/fltx/f128_classification.h +++ b/include/fltx/f128_classification.h @@ -44,7 +44,7 @@ namespace detail::_f128 // primitives and kernels [[nodiscard]] BL_FORCE_INLINE constexpr bool ispositive(const f128_s& x) noexcept { - return x.hi > 0.0; + return !isnan(x) && !iszero(x) && !detail::fp::signbit(x.hi); } [[nodiscard]] BL_FORCE_INLINE constexpr bool signbit(const f128_s& x) noexcept diff --git a/include/fltx/f128_comparison.h b/include/fltx/f128_comparison.h index 17acbc7..11e7bf4 100644 --- a/include/fltx/f128_comparison.h +++ b/include/fltx/f128_comparison.h @@ -27,16 +27,25 @@ namespace detail::_f128 // primitives and kernels BL_FORCE_INLINE constexpr bool compare_less(double ahi, double alo, double bhi, double blo) noexcept { + if (detail::fp::isnan(ahi) || detail::fp::isnan(bhi)) + return false; + return (ahi < bhi) || (ahi == bhi && alo < blo); } BL_FORCE_INLINE constexpr bool compare_less_equal(double ahi, double alo, double bhi, double blo) noexcept { + if (detail::fp::isnan(ahi) || detail::fp::isnan(bhi)) + return false; + return (ahi < bhi) || (ahi == bhi && alo <= blo); } BL_FORCE_INLINE constexpr bool compare_equal(double ahi, double alo, double bhi, double blo) noexcept { + if (detail::fp::isnan(ahi) || detail::fp::isnan(bhi)) + return false; + return ahi == bhi && alo == blo; } diff --git a/include/fltx/f128_conversions.h b/include/fltx/f128_conversions.h index 54d4377..52f06ca 100644 --- a/include/fltx/f128_conversions.h +++ b/include/fltx/f128_conversions.h @@ -1,5 +1,5 @@ /** - * fltx/f128_conversions.h - Public f128 scalar conversion helpers. + * fltx/f128_conversions.h - f128 assignment conversion helpers. * * Copyright (c) 2026 William Hemsworth * @@ -29,42 +29,6 @@ BL_FORCE_INLINE constexpr f128_s& f128_s::operator=(int64_t v) noexcept ); } -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s to_f128(double x) noexcept -{ - return f128_s{ x, 0.0 }; -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s to_f128(float x) noexcept -{ - return f128_s{ (double)x, 0.0 }; -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s to_f128(int32_t v) noexcept -{ - return f128_s{ (double)v, 0.0 }; -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s to_f128(uint32_t v) noexcept -{ - return f128_s{ (double)v, 0.0 }; -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s to_f128(uint64_t u) noexcept -{ - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128_impl::to_f128(u), - detail::_f128_runtime::to_f128(u) - ); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s to_f128(int64_t v) noexcept -{ - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128_impl::to_f128(v), - detail::_f128_runtime::to_f128(v) - ); -} - } // namespace bl #endif diff --git a/include/fltx/f128_limits.h b/include/fltx/f128_limits.h index b9bf5dc..9558b79 100644 --- a/include/fltx/f128_limits.h +++ b/include/fltx/f128_limits.h @@ -13,39 +13,61 @@ #include "fltx/f128_type.h" +// C++23 deprecates std::float_denorm_style even though numeric_limits still +// requires has_denorm to use it. +BL_DEPRECATED_DECLARATIONS_WARNING_PUSH + template<> struct std::numeric_limits { static constexpr bool is_specialized = true; - static constexpr bl::f128_s min() noexcept { return { numeric_limits::min(), 0.0 }; } - static constexpr bl::f128_s max() noexcept { return { numeric_limits::max(), -numeric_limits::epsilon() }; } - static constexpr bl::f128_s lowest() noexcept { return { -numeric_limits::max(), numeric_limits::epsilon() }; } + // Public limits describe the nominal 106-bit floating-point model. The + // expansion representation may retain additional sparse-tail information. + static constexpr bl::f128_s min() noexcept + { + return { 0x1p-969, 0.0 }; + } - static constexpr bl::f128_s epsilon() noexcept { return { 1.232595164407831e-32, 0.0 }; } // ~2^-106, a single ulp of double-double - static constexpr bl::f128_s round_error() noexcept { return { 0.5, 0.0 }; } - static constexpr bl::f128_s infinity() noexcept { return { numeric_limits::infinity(), 0.0 }; } - static constexpr bl::f128_s quiet_NaN() noexcept { return { numeric_limits::quiet_NaN(), 0.0 }; } - static constexpr bl::f128_s signaling_NaN() noexcept { return { numeric_limits::signaling_NaN(), 0.0 }; } - static constexpr bl::f128_s denorm_min() noexcept { return { numeric_limits::denorm_min(), 0.0 }; } + static constexpr bl::f128_s max() noexcept + { + return { + 0x1.fffffffffffffp+1023, + 0x1.fffffffffffffp+969 + }; + } - static constexpr bool has_infinity = true; - static constexpr bool has_quiet_NaN = true; - static constexpr bool has_signaling_NaN = true; + static constexpr bl::f128_s lowest() noexcept { return -max(); } + static constexpr bl::f128_s highest() noexcept { return max(); } static constexpr int digits = 106; // ~53 bits * 2 static constexpr int digits10 = 31; // log10(2^106) ~= 31.9 static constexpr int max_digits10 = 33; + static constexpr bool is_signed = true; static constexpr bool is_integer = false; static constexpr bool is_exact = false; - static constexpr int radix = 2; + static constexpr int radix = 2; - static constexpr int min_exponent = numeric_limits::min_exponent; + static constexpr bl::f128_s epsilon() noexcept { return { 0x1p-105, 0.0 }; } + static constexpr bl::f128_s round_error() noexcept { return { 0.5, 0.0 }; } + + static constexpr int min_exponent = -968; + static constexpr int min_exponent10 = -291; static constexpr int max_exponent = numeric_limits::max_exponent; - static constexpr int min_exponent10 = numeric_limits::min_exponent10; static constexpr int max_exponent10 = numeric_limits::max_exponent10; + static constexpr bool has_infinity = true; + static constexpr bool has_quiet_NaN = true; + static constexpr bool has_signaling_NaN = true; + static constexpr float_denorm_style has_denorm = denorm_present; + static constexpr bool has_denorm_loss = false; + + static constexpr bl::f128_s infinity() noexcept { return { numeric_limits::infinity(), 0.0 }; } + static constexpr bl::f128_s quiet_NaN() noexcept { return { numeric_limits::quiet_NaN(), 0.0 }; } + static constexpr bl::f128_s signaling_NaN() noexcept { return { numeric_limits::signaling_NaN(), 0.0 }; } + static constexpr bl::f128_s denorm_min() noexcept { return { numeric_limits::denorm_min(), 0.0 }; } + static constexpr bool is_iec559 = false; // not IEEE-754 compliant static constexpr bool is_bounded = true; static constexpr bool is_modulo = false; @@ -58,12 +80,6 @@ struct std::numeric_limits BL_DEFINE_FLOAT_WRAPPER_NUMERIC_LIMITS(bl::f128, bl::f128_s) -#ifndef FLTX_LIMITS_ALIAS_DEFINED -#define FLTX_LIMITS_ALIAS_DEFINED -namespace bl -{ - using std::numeric_limits; -} -#endif +BL_DEPRECATED_DECLARATIONS_WARNING_POP #endif diff --git a/include/fltx/f128_math.h b/include/fltx/f128_math.h index 2b1440b..4726dbe 100644 --- a/include/fltx/f128_math.h +++ b/include/fltx/f128_math.h @@ -12,6 +12,8 @@ #include "fltx/detail/f128_math_basic.h" #include "fltx/detail/f128_math_transcendental.h" +#include "fltx/detail/math_promotion.h" +#include "fltx/traits.h" namespace bl { @@ -23,7 +25,10 @@ namespace bl { // roots [[nodiscard]] BL_FORCE_INLINE constexpr f128 sqrt(f128_s a) { - return detail::_f128_impl::sqrt(a); + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f128_impl::sqrt(a), + detail::_f128_runtime::sqrt(a) + ); } [[nodiscard]] BL_FORCE_INLINE constexpr f128 cbrt(const f128_s& a) @@ -58,75 +63,67 @@ namespace bl { [[nodiscard]] BL_FORCE_INLINE constexpr f128 round(const f128_s& a) { #if defined(_MSC_VER) && !defined(__clang__) - return detail::_f128_impl::round(a); + return detail::_f128_impl::round_nearest_away_from_zero(a); #else BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128_impl::round(a), - detail::_f128_runtime::round(a) + detail::_f128_impl::round_nearest_away_from_zero(a), + detail::_f128_runtime::round_nearest_away_from_zero(a) ); #endif } -[[nodiscard]] BL_FORCE_INLINE constexpr f128 round_to_decimals(f128_s v, int prec) +[[nodiscard]] BL_FORCE_INLINE constexpr f128 roundeven(const f128_s& x) { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128_impl::round_to_decimals(v, prec), - detail::_f128_runtime::round_to_decimals(v, prec) - ); + return detail::_f128_impl::round_nearest_even(x); } -[[nodiscard]] BL_FORCE_INLINE constexpr f128 nearbyint(const f128_s& a) +[[nodiscard]] BL_FORCE_INLINE constexpr f128 round_decimals(f128_s v, int precision) { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128_impl::nearbyint(a), - detail::_f128_impl::nearbyint_runtime(a) + detail::_f128_impl::round_decimals(v, precision), + detail::_f128_runtime::round_decimals(v, precision) ); } -[[nodiscard]] BL_FORCE_INLINE constexpr f128 rint(const f128_s& x) +[[nodiscard]] BL_FORCE_INLINE constexpr f128 round_significant( + f128_s v, + int precision) { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128_impl::rint(x), - detail::_f128_impl::nearbyint_runtime(x) + detail::_f128_impl::round_significant(v, precision), + detail::_f128_runtime::round_significant(v, precision) ); } [[nodiscard]] BL_FORCE_INLINE constexpr long lround(const f128_s& x) { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128_impl::lround(x), - detail::_f128_runtime::lround(x) + detail::_f128_impl::lround_nearest_away_from_zero(x), + detail::_f128_runtime::lround_nearest_away_from_zero(x) ); } [[nodiscard]] BL_FORCE_INLINE constexpr long long llround(const f128_s& x) { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128_impl::llround(x), - detail::_f128_runtime::llround(x) - ); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr long lrint(const f128_s& x) -{ - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128_impl::lrint(x), - detail::_f128_runtime::lrint(x) - ); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr long long llrint(const f128_s& x) -{ - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128_impl::llrint(x), - detail::_f128_runtime::llrint(x) + detail::_f128_impl::llround_nearest_away_from_zero(x), + detail::_f128_runtime::llround_nearest_away_from_zero(x) ); } // arithmetic and comparisons [[nodiscard]] BL_FORCE_INLINE constexpr f128 fma(const f128_s& x, const f128_s& y, const f128_s& z) { +#if FLTX_HAS_COMPILED_X86_FMA_BACKEND && !FLTX_TU_HAS_X86_FMA + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f128_impl::fma(x, y, z), + detail::fp::runtime_hardware_fma_enabled() + ? detail::_f128_runtime::fma_x86(x, y, z) + : detail::_f128_impl::fma(x, y, z) + ); +#else return detail::_f128_impl::fma(x, y, z); +#endif } [[nodiscard]] BL_FORCE_INLINE constexpr f128 fmin(const f128_s& a, const f128_s& b) @@ -165,8 +162,8 @@ namespace bl { [[nodiscard]] BL_FORCE_INLINE constexpr f128 remainder(const f128_s& x, const f128_s& y) { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128_impl::remainder(x, y), - detail::_f128_runtime::remainder(x, y) + detail::_f128_impl::remquo(x, y, nullptr), + detail::_f128_runtime::remquo(x, y, nullptr) ); } @@ -200,28 +197,22 @@ namespace bl { [[nodiscard]] BL_FORCE_INLINE constexpr int ilogb(const f128_s& x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128_impl::ilogb(x), - std::ilogb(x.hi) - ); + return detail::_f128_impl::ilogb(x); } [[nodiscard]] BL_FORCE_INLINE constexpr f128 logb(const f128_s& x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128_impl::logb(x), - f128{ std::logb(x.hi) } - ); + return detail::_f128_impl::logb(x); } [[nodiscard]] BL_FORCE_INLINE constexpr f128 scalbn(const f128_s& x, int e) noexcept { - return detail::_f128_impl::scalbn(x, e); + return detail::_f128_impl::ldexp(x, e); } [[nodiscard]] BL_FORCE_INLINE constexpr f128 scalbln(const f128_s& x, long e) noexcept { - return detail::_f128_impl::scalbln(x, e); + return detail::_f128_impl::ldexp(x, static_cast(e)); } // adjacent values @@ -232,12 +223,24 @@ namespace bl { [[nodiscard]] BL_FORCE_INLINE constexpr f128 nexttoward(const f128_s& from, long double to) noexcept { - return detail::_f128_impl::nexttoward(from, to); + const double high = static_cast(to); + if (detail::fp::isinf_or_nan(high)) + return detail::_f128_impl::nextafter(from, f128_s{ high, 0.0 }); + if (high == 0.0 && to != 0.0L) + { + const double target = to < 0.0L + ? -std::numeric_limits::denorm_min() + : std::numeric_limits::denorm_min(); + return detail::_f128_impl::nextafter(from, f128_s{ target, 0.0 }); + } + + const double low = static_cast(to - static_cast(high)); + return detail::_f128_impl::nextafter(from, f128_s{ high, low }); } [[nodiscard]] BL_FORCE_INLINE constexpr f128 nexttoward(const f128_s& from, const f128_s& to) noexcept { - return detail::_f128_impl::nexttoward(from, to); + return detail::_f128_impl::nextafter(from, to); } // exp / log @@ -302,15 +305,6 @@ namespace bl { ); } -// pow -[[nodiscard]] BL_FORCE_INLINE constexpr f128 pow10_128(int k) -{ - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f128_impl::pow10_128(k), - detail::_f128_runtime::pow10_128(k) - ); -} - [[nodiscard]] BL_FORCE_INLINE constexpr f128 pow(const f128_s& x, const f128_s& y) { BL_CONSTEXPR_RUNTIME_DISPATCH( @@ -319,6 +313,31 @@ namespace bl { ); } +template +[[nodiscard]] BL_MSVC_NOINLINE constexpr f128 ipow(const f128_s& x, Exp y) +{ + if constexpr (std::signed_integral>) + { + BL_CONSTEXPR_RUNTIME_DISPATCH( + f128{ detail::_f128::ipow_integer(x, y) }, + f128{ detail::_f128_runtime::ipow_signed(x, static_cast(y)) } + ); + } + else + { + BL_CONSTEXPR_RUNTIME_DISPATCH( + f128{ detail::_f128::ipow_integer(x, y) }, + f128{ detail::_f128_runtime::ipow_unsigned(x, static_cast(y)) } + ); + } +} + +template +[[nodiscard]] BL_FORCE_INLINE constexpr f128 pow(const f128_s& x, Exp y) +{ + return bl::ipow(x, y); +} + [[nodiscard]] BL_FORCE_INLINE constexpr f128 pow(const f128_s& x, double y) { BL_CONSTEXPR_RUNTIME_DISPATCH( @@ -327,6 +346,18 @@ namespace bl { ); } +[[nodiscard]] BL_FORCE_INLINE constexpr f128 pow(const f128_s&, long double) = delete; + +template +requires (detail::math::f128_promoted_math_args && + !(fltx_f128 && detail::fp::non_bool_integral)) +[[nodiscard]] BL_FORCE_INLINE constexpr auto pow(Base x, Exp y) +{ + using P = detail::math::promoted_t; + using E = detail::math::promoted_pow_exponent_t; + return bl::pow(detail::math::promoted_cast

(x), detail::math::promoted_cast(y)); +} + // trig [[nodiscard]] BL_FORCE_INLINE constexpr bool sincos(const f128_s& x, f128_s& s_out, f128_s& c_out) { @@ -399,11 +430,6 @@ template f128_s s_out{}; f128_s c_out{}; const bool ok = bl::sincos(x, s_out, c_out); - if (!ok) - { - s_out = bl::sin(x); - c_out = bl::cos(x); - } detail::fp::assign_sincos_vector(out, s_out, c_out); return ok; } @@ -416,11 +442,6 @@ template requires (std::same_as, f128> | Result s_out{}; Result c_out{}; const bool ok = bl::sincos(x, s_out, c_out); - if (!ok) - { - s_out = bl::sin(x); - c_out = bl::cos(x); - } return detail::fp::make_sincos_result(s_out, c_out, ok); } @@ -507,6 +528,175 @@ template requires (std::same_as, f128> | ); } +// type promotions +#define FLTX_F128_PROMOTED_UNARY(NAME) \ + template \ + requires detail::math::f128_promoted_math_args \ + [[nodiscard]] BL_FORCE_INLINE constexpr auto NAME(T x) \ + { \ + using P = detail::math::promoted_t; \ + return bl::NAME(detail::math::promoted_cast

(x)); \ + } + +#define FLTX_F128_PROMOTED_BINARY(NAME) \ + template \ + requires detail::math::f128_promoted_math_args \ + [[nodiscard]] BL_FORCE_INLINE constexpr auto NAME(T x, U y) \ + { \ + using P = detail::math::promoted_t; \ + return bl::NAME(detail::math::promoted_cast

(x), detail::math::promoted_cast

(y)); \ + } + +#define FLTX_F128_PROMOTED_TERNARY(NAME) \ + template \ + requires detail::math::f128_promoted_math_args \ + [[nodiscard]] BL_FORCE_INLINE constexpr auto NAME(T x, U y, V z) \ + { \ + using P = detail::math::promoted_t; \ + return bl::NAME(detail::math::promoted_cast

(x), detail::math::promoted_cast

(y), detail::math::promoted_cast

(z)); \ + } + +FLTX_F128_PROMOTED_UNARY(abs) +FLTX_F128_PROMOTED_UNARY(fabs) +FLTX_F128_PROMOTED_UNARY(signbit) +FLTX_F128_PROMOTED_UNARY(isnan) +FLTX_F128_PROMOTED_UNARY(isinf) +FLTX_F128_PROMOTED_UNARY(isfinite) +FLTX_F128_PROMOTED_UNARY(iszero) +FLTX_F128_PROMOTED_UNARY(fpclassify) +FLTX_F128_PROMOTED_UNARY(isnormal) + +FLTX_F128_PROMOTED_UNARY(floor) +FLTX_F128_PROMOTED_UNARY(ceil) +FLTX_F128_PROMOTED_UNARY(trunc) +FLTX_F128_PROMOTED_UNARY(round) +FLTX_F128_PROMOTED_UNARY(roundeven) +FLTX_F128_PROMOTED_UNARY(lround) +FLTX_F128_PROMOTED_UNARY(llround) + +FLTX_F128_PROMOTED_BINARY(fmod) +FLTX_F128_PROMOTED_BINARY(remainder) +FLTX_F128_PROMOTED_TERNARY(fma) +FLTX_F128_PROMOTED_BINARY(fmin) +FLTX_F128_PROMOTED_BINARY(fmax) +FLTX_F128_PROMOTED_BINARY(fdim) +FLTX_F128_PROMOTED_BINARY(copysign) + +FLTX_F128_PROMOTED_UNARY(ilogb) +FLTX_F128_PROMOTED_UNARY(logb) +FLTX_F128_PROMOTED_BINARY(nextafter) + +FLTX_F128_PROMOTED_UNARY(exp) +FLTX_F128_PROMOTED_UNARY(exp2) +FLTX_F128_PROMOTED_UNARY(expm1) +FLTX_F128_PROMOTED_UNARY(log) +FLTX_F128_PROMOTED_UNARY(log2) +FLTX_F128_PROMOTED_UNARY(log10) +FLTX_F128_PROMOTED_UNARY(log1p) +FLTX_F128_PROMOTED_UNARY(sqrt) +FLTX_F128_PROMOTED_UNARY(cbrt) +FLTX_F128_PROMOTED_BINARY(hypot) + +FLTX_F128_PROMOTED_UNARY(sin) +FLTX_F128_PROMOTED_UNARY(cos) +FLTX_F128_PROMOTED_UNARY(tan) +FLTX_F128_PROMOTED_UNARY(atan) +FLTX_F128_PROMOTED_BINARY(atan2) +FLTX_F128_PROMOTED_UNARY(asin) +FLTX_F128_PROMOTED_UNARY(acos) + +FLTX_F128_PROMOTED_UNARY(sinh) +FLTX_F128_PROMOTED_UNARY(cosh) +FLTX_F128_PROMOTED_UNARY(tanh) +FLTX_F128_PROMOTED_UNARY(asinh) +FLTX_F128_PROMOTED_UNARY(acosh) +FLTX_F128_PROMOTED_UNARY(atanh) + +FLTX_F128_PROMOTED_UNARY(erf) +FLTX_F128_PROMOTED_UNARY(erfc) +FLTX_F128_PROMOTED_UNARY(lgamma) +FLTX_F128_PROMOTED_UNARY(tgamma) + +FLTX_F128_PROMOTED_BINARY(isunordered) +FLTX_F128_PROMOTED_BINARY(isgreater) +FLTX_F128_PROMOTED_BINARY(isgreaterequal) +FLTX_F128_PROMOTED_BINARY(isless) +FLTX_F128_PROMOTED_BINARY(islessequal) +FLTX_F128_PROMOTED_BINARY(islessgreater) + +#undef FLTX_F128_PROMOTED_TERNARY +#undef FLTX_F128_PROMOTED_BINARY +#undef FLTX_F128_PROMOTED_UNARY + +template +requires detail::math::f128_promoted_math_args +[[nodiscard]] BL_FORCE_INLINE constexpr auto remquo(T x, U y, int* quo) +{ + using P = detail::math::promoted_t; + return bl::remquo(detail::math::promoted_cast

(x), detail::math::promoted_cast

(y), quo); +} + +template +requires detail::math::f128_promoted_math_args +[[nodiscard]] BL_FORCE_INLINE constexpr auto ldexp(T x, int exp) +{ + using P = detail::math::promoted_t; + return bl::ldexp(detail::math::promoted_cast

(x), exp); +} + +template +requires detail::math::f128_promoted_math_args +[[nodiscard]] BL_FORCE_INLINE constexpr auto scalbn(T x, int exp) +{ + using P = detail::math::promoted_t; + return bl::scalbn(detail::math::promoted_cast

(x), exp); +} + +template +requires detail::math::f128_promoted_math_args +[[nodiscard]] BL_FORCE_INLINE constexpr auto scalbln(T x, long exp) +{ + using P = detail::math::promoted_t; + return bl::scalbln(detail::math::promoted_cast

(x), exp); +} + +template +requires detail::math::f128_promoted_math_args +[[nodiscard]] BL_FORCE_INLINE constexpr auto frexp(T x, int* exp) +{ + using P = detail::math::promoted_t; + return bl::frexp(detail::math::promoted_cast

(x), exp); +} + +template +requires detail::math::f128_promoted_math_args +[[nodiscard]] BL_FORCE_INLINE constexpr auto modf(T x, detail::math::promoted_t* iptr) +{ + using P = detail::math::promoted_t; + return bl::modf(detail::math::promoted_cast

(x), iptr); +} + +template +requires detail::math::f128_nexttoward_args +[[nodiscard]] BL_FORCE_INLINE constexpr auto nexttoward(From from, To to) +{ + using P = detail::math::promoted_t; + const P promoted_from = detail::math::promoted_cast

(from); + + if constexpr (std::same_as, long double>) + return bl::nexttoward(promoted_from, to); + else + return bl::nexttoward(promoted_from, detail::math::promoted_cast

(to)); +} + +template +requires detail::math::f128_promoted_math_args +[[nodiscard]] BL_FORCE_INLINE constexpr bool sincos(T x, detail::math::promoted_t& s_out, detail::math::promoted_t& c_out) +{ + using P = detail::math::promoted_t; + return bl::sincos(detail::math::promoted_cast

(x), s_out, c_out); +} + } // namespace bl #endif diff --git a/include/fltx/f128_numbers.h b/include/fltx/f128_numbers.h index 256089f..5e26e11 100644 --- a/include/fltx/f128_numbers.h +++ b/include/fltx/f128_numbers.h @@ -45,12 +45,4 @@ namespace std::numbers } // namespace std::numbers -#ifndef FLTX_NUMBERS_ALIAS_DEFINED -#define FLTX_NUMBERS_ALIAS_DEFINED -namespace bl -{ - namespace numbers = std::numbers; -} // namespace bl -#endif - #endif diff --git a/include/fltx/f128_stream.h b/include/fltx/f128_stream.h index 9d3369e..827fa40 100644 --- a/include/fltx/f128_stream.h +++ b/include/fltx/f128_stream.h @@ -22,12 +22,12 @@ namespace bl inline std::istream& operator>>(std::istream& is, f128_s& x) { - return detail::read_from_stream(is, x, parse_flt128); + return detail::read_from_stream(is, x, detail::_f128::parse); } inline std::istream& operator>>(std::istream& is, f128& x) { - return detail::read_from_stream(is, static_cast(x), parse_flt128); + return detail::read_from_stream(is, static_cast(x), detail::_f128::parse); } } // namespace bl diff --git a/include/fltx/f128_string.h b/include/fltx/f128_string.h index e472ba6..7dcbe25 100644 --- a/include/fltx/f128_string.h +++ b/include/fltx/f128_string.h @@ -9,30 +9,98 @@ #ifndef F128_STRING_INCLUDED #define F128_STRING_INCLUDED +#include #include +#include #include +#include #include "fltx/f128_limits.h" -#include "fltx/f128_math.h" +#include "fltx/detail/f128_math_basic.h" #include "fltx/detail/common_io.h" namespace bl { namespace detail::_f128 // primitives and kernels { - BL_FORCE_INLINE constexpr void normalize10(const f128_s& x, f128_s& m, int& exp10) + struct f128_io_traits; + + [[nodiscard]] BL_FORCE_INLINE constexpr bool runtime_native_double_subnormal(const f128_s& x) noexcept + { + return !std::is_constant_evaluated() && + x.lo == 0.0 && + detail::fp::isfinite(x.hi) && + detail::fp::absd(x.hi) < std::numeric_limits::min(); + } + + BL_FORCE_INLINE detail::fltx_char_result strip_scientific_trailing_zeros(char* first, char* ptr) noexcept { - if (x.hi == 0.0 && x.lo == 0.0) { m = f128_s{ 0.0 }; exp10 = 0; return; } + char* exp = first; + while (exp < ptr && *exp != 'e' && *exp != 'E') + ++exp; + if (exp == ptr) + return { ptr, true }; + + char* frac_end = exp; + while (frac_end > first && frac_end[-1] == '0') + --frac_end; + if (frac_end > first && frac_end[-1] == '.') + --frac_end; + if (frac_end == exp) + return { ptr, true }; + + char* out = frac_end; + for (char* in = exp; in < ptr; ++in) + *out++ = *in; + return { out, true }; + } + + BL_FORCE_INLINE detail::fltx_char_result emit_native_double_to_chars( + char* first, + char* last, + double x, + std::chars_format format, + int precision, + bool strip_trailing_zeros = false) noexcept + { + auto result = std::to_chars(first, last, x, format, precision); + if (result.ec != std::errc{}) + return { first, false }; + if (strip_trailing_zeros && format == std::chars_format::scientific) + return strip_scientific_trailing_zeros(first, result.ptr); + return { result.ptr, true }; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr bool normalize10(const f128_s& x, f128_s& m, int& exp10) + { + if (x.hi == 0.0 && x.lo == 0.0) { m = f128_s{ 0.0 }; exp10 = 0; return true; } f128_s ax = abs(x); int e2 = detail::fp::frexp_exponent(ax.hi); // ax.hi = f * 2^(e2-1) - int e10 = (int)detail::fp::floor((e2 - 1) * 0.30102999566398114); // ≈ log10(2) + int e10 = (int)detail::fp::floor((e2 - 1) * 0.30102999566398114); // approx log10(2) + + m = ax * bl::detail::_f128_impl::pow10_128(-e10); + if (!detail::fp::isfinite(m.hi)) + return false; + + int guard = 0; + while (m >= f128_s{ 10.0 }) { + m = m / f128_s{ 10.0 }; + ++e10; + if (!detail::fp::isfinite(m.hi) || ++guard > 16) + return false; + } - m = ax * pow10_128(-e10); - while (m >= f128_s{ 10.0 }) { m = m / f128_s{ 10.0 }; ++e10; } - while (m < f128_s{ 1.0 }) { m = m * f128_s{ 10.0 }; --e10; } + guard = 0; + while (m < f128_s{ 1.0 }) { + m = m * f128_s{ 10.0 }; + --e10; + if (!detail::fp::isfinite(m.hi) || ++guard > 16) + return false; + } exp10 = e10; + return true; } BL_PUSH_PRECISE; @@ -59,6 +127,108 @@ namespace detail::_f128 // primitives and kernels } BL_POP_PRECISE; + constexpr inline bool approximate_scientific_digits(const f128_s& x, int sig, char* digits, int capacity, int& exp10) noexcept + { + if (sig < 1) + sig = 1; + + f128_s scaled{}; + if (!normalize10(x, scaled, exp10)) + return false; + if (!(scaled >= f128_s{ 1.0 }) || !(scaled < f128_s{ 10.0 })) + return false; + + const int digit_count = sig + 2; + if (digit_count > capacity) + return false; + + for (int i = 0; i < digit_count; ++i) + { + const int digit = static_cast(scaled.hi); + if (digit < -9 || digit > 19) + return false; + + digits[i] = static_cast('0' + digit); + scaled = mul_by_double_print(sub_by_double_print(scaled, static_cast(digit)), 10.0); + } + + for (int i = digit_count - 1; i > 0; --i) + { + if (digits[i] < '0') + { + --digits[i - 1]; + digits[i] = static_cast(digits[i] + 10); + } + else if (digits[i] > '9') + { + ++digits[i - 1]; + digits[i] = static_cast(digits[i] - 10); + } + } + + if (digits[0] <= '0' || digits[0] > '9') + return false; + + const int round_digit_index = sig; + const int sticky_digit_index = sig + 1; + const int round_digit = digits[round_digit_index] - '0'; + + // The approximate path is fast, but decimal cases close to a rounding + // boundary are exactly where the stream-compatible policy matters. + if (round_digit == 4 || round_digit == 5) + return false; + + const bool sticky = + digits[sticky_digit_index] != '0' || + scaled.hi > 0.0 || + scaled.lo > 0.0; + const int last_kept_digit = digits[sig - 1] - '0'; + const bool round_up = + round_digit > 5 || + (round_digit == 5 && (sticky || ((last_kept_digit & 1) != 0))); + + if (round_up) + { + ++digits[sig - 1]; + int i = sig - 1; + while (i > 0 && digits[i] > '9') + { + digits[i] = static_cast(digits[i] - 10); + ++digits[--i]; + } + } + + if (digits[0] > '9') + { + ++exp10; + for (int i = sig - 1; i >= 2; --i) + digits[i] = digits[i - 1]; + digits[0] = '1'; + if (sig > 1) + digits[1] = '0'; + } + + return true; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr bool should_try_approximate_scientific_digits(const f128_s& x, int sig) noexcept + { + if (sig <= 16) + return true; + + constexpr int max_meaningful_sig = std::numeric_limits::digits10 + 1; + return sig < max_meaningful_sig && x.hi >= 1.0e-4 && x.hi < 1.0e5; + } + + [[nodiscard]] BL_FORCE_INLINE constexpr bool should_accept_approximate_scientific_digits(int sig, int exp10) noexcept + { + if (sig <= 16) + return true; + + constexpr int max_meaningful_sig = std::numeric_limits::digits10 + 1; + return sig < max_meaningful_sig && exp10 >= -4 && exp10 <= 4; + } + BL_FORCE_INLINE constexpr int emit_uint_rev_buf(char* dst, f128_s n) { // n is a non-negative integer in f128 @@ -67,40 +237,31 @@ namespace detail::_f128 // primitives and kernels int len = 0; if (n < f128_s{ 10.0 }) { - int d = (int)n.hi; - if (d < 0) d = 0; else if (d > 9) d = 9; - dst[len++] = char('0' + d); + const std::uint32_t d = detail::bounded_floor_to_u32(detail::fp::floor(n.hi), 9u); + dst[len++] = static_cast('0' + d); return len; } while (n >= base) { - f128_s q = floor(n / base); + f128_s q = detail::_f128_impl::floor(n / base); f128_s r = n - q * base; - long long chunk = (long long)detail::fp::floor(r.hi); - if (chunk >= 1000000000LL) { chunk -= 1000000000LL; q = q + f128_s{ 1.0 }; } - if (chunk < 0) chunk = 0; + std::uint32_t chunk = detail::bounded_floor_to_u32(detail::fp::floor(r.hi), 1000000000u); + if (chunk >= 1000000000u) { chunk = 0; q = q + f128_s{ 1.0 }; } for (int i = 0; i < 9; ++i) { - int d = int(chunk % 10); - dst[len++] = char('0' + d); - chunk /= 10; + const std::uint32_t next = chunk / 10u; + const std::uint32_t d = chunk - next * 10u; + dst[len++] = static_cast('0' + d); + chunk = next; } n = q; } - long long last = (long long)detail::fp::floor(n.hi); - if (last == 0) { - dst[len++] = '0'; - } - else { - while (last > 0) { - int d = int(last % 10); - dst[len++] = char('0' + d); - last /= 10; - } - } + len += detail::append_uint32_rev( + dst + len, + detail::bounded_floor_to_u32(detail::fp::floor(n.hi), 999999999u)); return len; } @@ -110,6 +271,119 @@ namespace detail::_f128 // primitives and kernels using value_type = f128_s; static constexpr int limb_count = 2; static constexpr int significand_bits = 106; + static constexpr int max_binary_exponent = 1023; + static constexpr int min_binary_exponent = -1074; + + static constexpr double scaled_significand_limb( + std::uint64_t coefficient, + int exponent) noexcept + { + if (coefficient == 0) + return 0.0; + +#if BL_FP_BARRIER_ACTIVE + constexpr std::uint64_t hidden_bit = 0x0010000000000000ull; + constexpr std::uint64_t fraction_mask = 0x000fffffffffffffull; + constexpr std::uint64_t exponent_mask = 0x7ff0000000000000ull; + + const int leading_bit = detail::fp::highest_bit_index(coefficient); + const std::uint64_t significand = coefficient << (52 - leading_bit); + const int unbiased_exponent = leading_bit + exponent; + + if (unbiased_exponent > 1023) + return std::bit_cast(exponent_mask); + if (unbiased_exponent >= -1022) + { + const std::uint64_t exponent_bits = + static_cast(unbiased_exponent + 1023) << 52; + return std::bit_cast( + exponent_bits | (significand & fraction_mask)); + } + + const int shift = -1022 - unbiased_exponent; + if (shift >= 64) + return 0.0; + + const std::uint64_t truncated = significand >> shift; + const std::uint64_t remainder_mask = + (std::uint64_t{ 1 } << shift) - 1; + const std::uint64_t remainder = significand & remainder_mask; + const std::uint64_t halfway = std::uint64_t{ 1 } << (shift - 1); + const bool round_up = remainder > halfway || + (remainder == halfway && (truncated & 1u) != 0); + const std::uint64_t rounded = truncated + static_cast(round_up); + return std::bit_cast( + rounded >= hidden_bit ? hidden_bit : rounded); +#else + return detail::fp::ldexp(static_cast(coefficient), exponent); +#endif + } + +#if BL_FP_BARRIER_ACTIVE + // Canonicalizes the guarded integer significand without passing a + // subnormal residual through floating-point arithmetic. + static constexpr value_type pack_guarded_significand( + const detail::exact_decimal::biguint& q, + int e2, + bool neg) noexcept + { + constexpr std::uint64_t sign_mask = 0x8000000000000000ull; + constexpr std::uint64_t limb_unit = std::uint64_t{ 1 } << 53; + const int discarded_bits = q.bit_length() - significand_bits; + + std::uint64_t lo_coefficient = q.get_bits(discarded_bits, 53); + std::uint64_t hi_coefficient = q.get_bits(discarded_bits + 53, 53); + if (discarded_bits > 0) + { + const bool round_bit = q.get_bit(discarded_bits - 1); + const bool sticky = discarded_bits > 1 && + detail::exact_decimal::any_low_bits_set(q, discarded_bits - 1); + if (round_bit && (sticky || (lo_coefficient & 1u) != 0)) + { + ++lo_coefficient; + if (lo_coefficient == limb_unit) + { + lo_coefficient = 0; + ++hi_coefficient; + } + } + } + + if (hi_coefficient == limb_unit) + { + hi_coefficient = std::uint64_t{ 1 } << 52; + ++e2; + } + + constexpr std::uint64_t halfway = std::uint64_t{ 1 } << 52; + const bool round_hi = lo_coefficient > halfway || + (lo_coefficient == halfway && (hi_coefficient & 1u) != 0); + if (round_hi) + ++hi_coefficient; + + double hi{}; + if (hi_coefficient == limb_unit) + hi = scaled_significand_limb(std::uint64_t{ 1 } << 52, e2 - 51); + else + hi = scaled_significand_limb(hi_coefficient, e2 - 52); + + const std::int64_t residual = static_cast(lo_coefficient) - + (round_hi ? static_cast(limb_unit) : 0); + const std::uint64_t residual_magnitude = residual < 0 + ? static_cast(-residual) + : static_cast(residual); + double lo = scaled_significand_limb(residual_magnitude, e2 - 105); + if (residual < 0) + lo = std::bit_cast(std::bit_cast(lo) | sign_mask); + + if (neg) + { + hi = std::bit_cast(std::bit_cast(hi) ^ sign_mask); + lo = std::bit_cast(std::bit_cast(lo) ^ sign_mask); + } + return { hi, lo }; + } +#endif static constexpr double limb(const value_type& x, int index) noexcept { @@ -118,7 +392,7 @@ namespace detail::_f128 // primitives and kernels static constexpr value_type zero(bool neg = false) noexcept { - return neg ? value_type{ -0.0, 0.0 } : value_type{ 0.0, 0.0 }; + return detail::_f128::signed_zero(neg); } static constexpr value_type infinity(bool neg = false) noexcept @@ -129,11 +403,77 @@ namespace detail::_f128 // primitives and kernels static constexpr value_type pack_from_significand(const detail::exact_decimal::biguint& q, int e2, bool neg) noexcept { - const std::uint64_t c1 = q.get_bits(0, 53); - const std::uint64_t c0 = q.get_bits(53, 53); - const double hi = c0 ? detail::fp::ldexp(static_cast(c0), e2 - 52) : 0.0; - const double lo = c1 ? detail::fp::ldexp(static_cast(c1), e2 - 105) : 0.0; - f128_s out = detail::_f128::renorm(hi, lo); + const int bits = q.bit_length(); + if (bits <= 0) + return zero(neg); + + if (bits <= 53) + { + const std::uint64_t c0 = q.get_bits(0, bits); + value_type out{ c0 ? detail::fp::ldexp(static_cast(c0), e2 - (bits - 1)) : 0.0, 0.0 }; + return neg ? -out : out; + } + + if (bits <= 106) + { + const int lo_width = bits - 53; + const std::uint64_t c1 = q.get_bits(0, lo_width); + const std::uint64_t c0 = q.get_bits(lo_width, 53); + + const double hi = scaled_significand_limb(c0, e2 - 52); + const double lo = scaled_significand_limb(c1, e2 - (bits - 1)); +#if BL_FP_BARRIER_ACTIVE + double guarded_hi = hi; BL_FP_BARRIER(guarded_hi); + double guarded_lo = lo; BL_FP_BARRIER(guarded_lo); + value_type out = detail::_f128::is_subnormal_limb(guarded_lo) + ? value_type{ guarded_hi, guarded_lo } + : detail::_f128::renorm(guarded_hi, guarded_lo); +#else + value_type out = detail::_f128::renorm(hi, lo); +#endif + return neg ? -out : out; + } + + const int lo_width = bits - 106; + const std::uint64_t c2 = q.get_bits(0, lo_width); + const std::uint64_t c1 = q.get_bits(lo_width, 53); + const std::uint64_t c0 = q.get_bits(bits - 53, 53); + +#if BL_FP_BARRIER_ACTIVE + constexpr int guarded_significand_bits = significand_bits + 53; + constexpr int guarded_underflow_exponent = + min_binary_exponent + guarded_significand_bits - 1; + if (e2 < guarded_underflow_exponent) + return pack_guarded_significand(q, e2, neg); +#endif + + const double hi = scaled_significand_limb(c0, e2 - 52); + const double mid = scaled_significand_limb(c1, e2 - 105); + const double lo = scaled_significand_limb(c2, e2 - (bits - 1)); + +#if BL_FP_BARRIER_ACTIVE + double guarded_hi = hi; BL_FP_BARRIER(guarded_hi); + double guarded_mid = mid; BL_FP_BARRIER(guarded_mid); + double guarded_lo = lo; BL_FP_BARRIER(guarded_lo); + if (detail::_f128::is_subnormal_limb(guarded_mid)) + { + constexpr std::uint64_t magnitude_mask = 0x7fffffffffffffffull; + const std::uint64_t tail_bits = + (std::bit_cast(guarded_mid) & magnitude_mask) + + (std::bit_cast(guarded_lo) & magnitude_mask); + value_type out{ + guarded_hi, + std::bit_cast(tail_bits) + }; + return neg ? -out : out; + } + + const f128_s tail = detail::_f128::renorm(guarded_mid, guarded_lo); +#else + const f128_s tail = detail::_f128::renorm(mid, lo); +#endif + f128_s out = detail::_f128::renorm(hi, tail.hi); + out = detail::_f128::renorm(out.hi, out.lo + tail.lo); if (neg) out = -out; return out; @@ -143,6 +483,75 @@ namespace detail::_f128 // primitives and kernels template constexpr inline bool exact_scientific_digits(const f128_s& x, int sig, String& digits, int& exp10) { + if (sig < 1) + sig = 1; + + detail::exact_decimal::biguint magnitude; + int common_exp = 0; + bool exact_neg = false; + if (sig <= 32 && + detail::exact_decimal::exact_binary_components(x, magnitude, common_exp, exact_neg) && + !exact_neg) + { + exp10 = detail::exact_decimal::decimal_exponent_from_components(magnitude, common_exp); + + detail::exact_decimal::biguint coefficient; + int exact_exp10 = exp10; + if (detail::exact_decimal::exact_significant_decimal( + magnitude, + common_exp, + sig, + coefficient, + exact_exp10)) + { + exp10 = exact_exp10; + digits = detail::exact_decimal::to_decimal_string(coefficient); + if (static_cast(digits.size()) < sig) + { + const std::size_t zero_pad_count = static_cast(sig - static_cast(digits.size())); + digits.insert(0, zero_pad_count, '0'); + } + return true; + } + + f128_s m = x * bl::detail::_f128_impl::pow10_128(-exp10); + if (detail::fp::isfinite(m.hi)) + { + detail::exact_decimal::biguint candidate; + for (int i = 0; i < sig; ++i) + { + int digit = static_cast(detail::fp::floor(m.hi)); + if (digit < 0) digit = 0; + else if (digit > 9) digit = 9; + + candidate.mul_small(10); + candidate.add_small(static_cast(digit)); + + m = mul_by_double_print(sub_by_double_print(m, static_cast(digit)), 10.0); + } + + detail::exact_decimal::biguint coefficient; + int corrected_exp10 = exp10; + if (detail::exact_decimal::exact_significant_decimal_from_floor_candidate( + magnitude, + common_exp, + sig, + candidate, + corrected_exp10, + coefficient)) + { + exp10 = corrected_exp10; + digits = detail::exact_decimal::to_decimal_string(coefficient); + if (static_cast(digits.size()) < sig) + { + const std::size_t zero_pad_count = static_cast(sig - static_cast(digits.size())); + digits.insert(0, zero_pad_count, '0'); + } + return true; + } + } + } + return detail::exact_decimal::exact_scientific_digits(x, sig, digits, exp10); } @@ -157,8 +566,8 @@ namespace detail::_f128 // primitives and kernels if (neg) x = f128_s{ -x.hi, -x.lo }; x = detail::_f128::renorm(x.hi, x.lo); - f128_s ip = floor(x); - f128_s fp = sub_by_double_print(x, ip.hi); + f128_s ip = detail::_f128_impl::floor(x); + f128_s fp = x - ip; if (fp >= f128_s{ 1.0 }) { fp = fp - f128_s{ 1.0 }; ip = ip + f128_s{ 1.0 }; } else if (fp < f128_s{ 0.0 }) { fp = f128_s{ 0.0 }; } @@ -312,142 +721,166 @@ namespace detail::_f128 // primitives and kernels BL_FORCE_INLINE constexpr detail::fltx_char_result emit_scientific_sig_to_chars_f128(char* first, char* last, const f128_s& x, int sig_digits, bool strip_trailing_zeros) noexcept { - if (iszero(x)) { - if (first >= last) return { first, false }; - *first = '0'; - return { first + 1, true }; - } + if (iszero(x)) + return detail::emit_single_zero_to_chars(first, last); + if (sig_digits < 1) sig_digits = 1; const bool neg = (x.hi < 0.0); const f128_s v = neg ? -x : x; const int sig = static_cast(sig_digits); - bl::default_io_string digits; + char approximate_digits[40]{}; + bl::f128_io_string exact_digits; + const char* digit_data = approximate_digits; int e = 0; - if (!detail::_f128::exact_scientific_digits(v, sig, digits, e)) { - if (first >= last) return { first, false }; - *first = '0'; - return { first + 1, true }; - } - int last_frac = sig - 1; - if (sig > 1 && strip_trailing_zeros) { - while (last_frac >= 1 && digits[last_frac] == '0') --last_frac; - } - char exp_buf[16]; - char* ep = exp_buf; - char* eend = exp_buf + sizeof(exp_buf); - auto er = detail::append_exp10_to_chars(ep, eend, e); - if (!er.ok) return { first, false }; - const int exp_len = static_cast(er.ptr - ep); - const bool has_frac = (sig > 1) && (last_frac >= 1); - const size_t needed = static_cast(neg ? 1 : 0) + 1u + (has_frac ? static_cast(1 + last_frac) : 0u) + static_cast(exp_len); - if (static_cast(last - first) < needed) return { first, false }; - char* p = first; - if (neg) *p++ = '-'; - *p++ = digits[0]; - if (has_frac) { - *p++ = '.'; - detail::copy_chars(p, digits.data() + 1, static_cast(last_frac)); - p += last_frac; + bool have_digits = false; + if (detail::_f128::should_try_approximate_scientific_digits(v, sig) && + detail::_f128::approximate_scientific_digits( + v, + sig, + approximate_digits, + static_cast(sizeof(approximate_digits)), + e) && + detail::_f128::should_accept_approximate_scientific_digits(sig, e)) + { + have_digits = true; } - detail::copy_chars(p, exp_buf, static_cast(exp_len)); - p += exp_len; - return { p, true }; - } - BL_FORCE_INLINE constexpr detail::fltx_char_result emit_scientific_to_chars(char* first, char* last, const f128_s& x, int frac_digits, bool strip_trailing_zeros) noexcept - { - if (frac_digits < 0) frac_digits = 0; - if (iszero(x)) { - const bool neg = detail::_f128::signbit(x.hi); - int frac_len = strip_trailing_zeros ? 0 : static_cast(frac_digits); - char exp_buf[16]; - char* ep = exp_buf; - char* eend = exp_buf + sizeof(exp_buf); - auto er = detail::append_exp10_to_chars(ep, eend, 0); - if (!er.ok) return { first, false }; - const int exp_len = static_cast(er.ptr - ep); - const size_t needed = static_cast(neg ? 1 : 0) + 1u + (frac_len ? static_cast(1 + frac_len) : 0u) + static_cast(exp_len); - if (static_cast(last - first) < needed) return { first, false }; - char* p = first; - if (neg) *p++ = '-'; - *p++ = '0'; - if (frac_len > 0) { - *p++ = '.'; - for (int i = 0; i < frac_len; ++i) *p++ = '0'; + if (!have_digits) { + if (!detail::_f128::exact_scientific_digits(v, sig, exact_digits, e)) + { + if (first >= last) return { first, false }; + *first = '0'; + return { first + 1, true }; } - detail::copy_chars(p, exp_buf, static_cast(exp_len)); - p += exp_len; - return { p, true }; + digit_data = exact_digits.data(); } - return emit_scientific_sig_to_chars_f128(first, last, x, frac_digits + 1, strip_trailing_zeros); - } - BL_FORCE_INLINE constexpr detail::fltx_char_result to_chars(char* first, char* last, const f128_s& x, int precision, bool fixed = false, bool scientific = false, bool strip_trailing_zeros = false) noexcept - { - if (precision < 0) precision = 0; - if (fixed && !scientific) - return emit_fixed_dec_to_chars(first, last, x, precision, strip_trailing_zeros); - if (scientific && !fixed) - return emit_scientific_to_chars(first, last, x, precision, strip_trailing_zeros); - const int sig = (precision == 0) ? 1 : precision; - if (iszero(x)) { - if (first >= last) return { first, false }; - *first = '0'; - return { first + 1, true }; - } - const f128_s ax = (x.hi < 0.0) ? -x : x; - bl::default_io_string digits; - int e10 = 0; - if (!detail::_f128::exact_scientific_digits(ax, 1, digits, e10)) { - if (first >= last) return { first, false }; - *first = '0'; - return { first + 1, true }; - } - if (e10 >= -4 && e10 < sig) { - const int frac = (sig > e10 + 1) ? (sig - (e10 + 1)) : 0; - return emit_fixed_dec_to_chars(first, last, x, frac, strip_trailing_zeros); - } - return emit_scientific_sig_to_chars_f128(first, last, x, sig, strip_trailing_zeros); + return detail::emit_scientific_digits_to_chars( + first, + last, + neg, + digit_data, + sig, + e, + strip_trailing_zeros); } struct f128_io_traits { using value_type = f128_s; + using string_type = bl::f128_io_string; + using exact_decimal_traits = detail::_f128::exact_traits; static constexpr int max_parse_order = detail::fltx_max_parse_order; static constexpr int min_parse_order = detail::fltx_min_parse_order; - + static constexpr int limb_count = detail::_f128::exact_traits::limb_count; + static constexpr int significand_bits = detail::_f128::exact_traits::significand_bits; + static constexpr int conversion_significand_bits = 53 * (limb_count + 1); + static constexpr int decimal_conversion_guard_bits = conversion_significand_bits - significand_bits; + static constexpr int decimal_conversion_significand_bits = + significand_bits + decimal_conversion_guard_bits; + static constexpr int max_binary_exponent = 1023; + static constexpr int min_normal_binary_exponent = -1022; + static constexpr int min_binary_exponent = -1074; + static constexpr int max_fixed_integer_digits = 309; + + static constexpr double limb(const value_type& x, int index) noexcept { return detail::_f128::exact_traits::limb(x, index); } static constexpr bool isnan(const value_type& x) noexcept { return bl::isnan(x); } static constexpr bool isinf(const value_type& x) noexcept { return bl::isinf(x); } static constexpr bool iszero(const value_type& x) noexcept { return bl::iszero(x); } - static constexpr bool is_negative(const value_type& x) noexcept { return x.hi < 0.0; } + static constexpr bool is_negative(const value_type& x) noexcept { return detail::_f128::signbit(x.hi); } static constexpr value_type abs(const value_type& x) noexcept { return (x.hi < 0.0) ? -x : x; } - static constexpr value_type zero(bool neg = false) noexcept { return neg ? value_type{ -0.0, 0.0 } : value_type{ 0.0, 0.0 }; } - static value_type infinity(bool neg = false) noexcept + static constexpr value_type zero(bool neg = false) noexcept { return detail::_f128::signed_zero(neg); } + static constexpr value_type infinity(bool neg = false) noexcept { const value_type inf = std::numeric_limits::infinity(); return neg ? -inf : inf; } static constexpr value_type quiet_nan() noexcept { return std::numeric_limits::quiet_NaN(); } - static constexpr void normalize10(const value_type& x, value_type& m, int& e10) { detail::_f128::normalize10(x, m, e10); } + static constexpr value_type max_finite() noexcept { return std::numeric_limits::max(); } + static constexpr bool needs_nominal_refinement(const value_type& value) noexcept + { + constexpr int guard_underflow_exponent = + min_binary_exponent + conversion_significand_bits - 1; + return iszero(value) || + detail::fp::absd(value.hi) < + detail::fp::positive_power_of_two(guard_underflow_exponent); + } static constexpr detail::fltx_char_result to_chars_general(char* first, char* last, const value_type& x, int precision, bool strip_trailing_zeros) { - return to_chars(first, last, x, precision, false, false, strip_trailing_zeros); + if (detail::_f128::runtime_native_double_subnormal(x)) + return detail::_f128::emit_native_double_to_chars(first, last, x.hi, std::chars_format::general, precision, strip_trailing_zeros); + + return detail::emit_general_decimal_for_traits(first, last, x, precision, strip_trailing_zeros); } static constexpr detail::fltx_char_result to_chars_fixed(char* first, char* last, const value_type& x, int precision, bool strip_trailing_zeros) + { + if (detail::_f128::runtime_native_double_subnormal(x)) + return detail::_f128::emit_native_double_to_chars(first, last, x.hi, std::chars_format::fixed, precision); + + if (precision <= std::numeric_limits::digits10) + { + return detail::emit_exact_fixed_decimal_to_chars( + first, + last, + x, + precision, + strip_trailing_zeros, + iszero(x), + is_negative(x)); + } + + return detail::emit_fixed_decimal_for_traits(first, last, x, precision, strip_trailing_zeros); + } + + static constexpr detail::fltx_char_result to_chars_fixed_fast(char* first, char* last, const value_type& x, int precision, bool strip_trailing_zeros) { return emit_fixed_dec_to_chars(first, last, x, precision, strip_trailing_zeros); } + static constexpr detail::fltx_char_result to_chars_default_fixed( + char* first, + char* last, + const value_type& x, + int precision, + int, + int, + bool strip_trailing_zeros) + { + return detail::emit_exact_fixed_decimal_to_chars( + first, + last, + x, + precision, + strip_trailing_zeros, + iszero(x), + is_negative(x)); + } + static constexpr detail::fltx_char_result to_chars_scientific_frac(char* first, char* last, const value_type& x, int precision, bool strip_trailing_zeros) { - return emit_scientific_to_chars(first, last, x, precision, strip_trailing_zeros); + if (detail::_f128::runtime_native_double_subnormal(x)) + return detail::_f128::emit_native_double_to_chars(first, last, x.hi, std::chars_format::scientific, precision); + + return detail::emit_scientific_frac_for_traits(first, last, x, precision, strip_trailing_zeros); } static constexpr detail::fltx_char_result to_chars_scientific_sig(char* first, char* last, const value_type& x, int precision, bool strip_trailing_zeros) { + if (detail::_f128::runtime_native_double_subnormal(x)) + { + const int frac_digits = precision > 1 ? precision - 1 : 0; + return detail::_f128::emit_native_double_to_chars( + first, + last, + x.hi, + std::chars_format::scientific, + frac_digits, + strip_trailing_zeros); + } + return emit_scientific_sig_to_chars_f128(first, last, x, precision, strip_trailing_zeros); } @@ -459,73 +892,52 @@ namespace detail::_f128 // primitives and kernels static constexpr bool compact_decimal_to_value(std::uint64_t coeff, int dec_exp, bool neg, value_type& out) { - return detail::exact_decimal::compact_decimal_to_value(coeff, dec_exp, neg, out); + return detail::exact_decimal::compact_decimal_to_value(coeff, dec_exp, neg, out); + } + + static constexpr value_type exact_decimal_to_value(const detail::exact_decimal::biguint& coeff, int dec_exp, bool neg) + { + return detail::exact_decimal::exact_decimal_to_value(coeff, dec_exp, neg); } - static constexpr value_type exact_decimal_to_value(const detail::fltx_parse_token::coeff_type& coeff, int dec_exp, bool neg) + static constexpr value_type nextafter(const value_type& from, const value_type& to) noexcept { - return detail::exact_decimal::exact_decimal_to_value(coeff, dec_exp, neg); + return detail::_f128_impl::nextafter(from, to); + } + + static constexpr value_type pack_from_significand(const detail::exact_decimal::biguint& q, int e2, bool neg) noexcept + { + return detail::_f128::exact_traits::pack_from_significand(q, e2, neg); } }; - template - BL_FORCE_INLINE constexpr void to_string_into(String& out, const f128_s& x, int precision, bool fixed = false, bool scientific = false, bool strip_trailing_zeros = false) + [[nodiscard]] BL_MSVC_NOINLINE constexpr bool parse(const char* s, f128_s& out, const char** endptr = nullptr) noexcept { - detail::to_string_into(out, x, precision, fixed, scientific, strip_trailing_zeros); + return detail::parse_flt(s, out, endptr); } } // namespace detail::_f128 -BL_MSVC_NOINLINE constexpr bool parse_flt128(const char* s, f128_s& out, const char** endptr = nullptr) noexcept +[[nodiscard]] constexpr bl::f128_io_string to_static_string( + const f128_s& value, + int precision = std::numeric_limits::max_digits10, + std::ios_base::fmtflags flags = std::ios_base::fmtflags{}) { - return detail::parse_flt(s, out, endptr); + return detail::to_static_string_impl(value, precision, flags); } -[[nodiscard]] BL_MSVC_NOINLINE constexpr f128_s to_f128(const char* s) noexcept -{ - f128_s ret; - if (parse_flt128(s, ret)) - return ret; - return f128_s{ 0 }; -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f128_s to_f128(const std::string& s) noexcept -{ - return to_f128(s.c_str()); -} - -template -[[nodiscard]] constexpr bl::static_string to_static_string(const f128_s& x, int precision = std::numeric_limits::digits10, bool fixed = false, bool scientific = false, bool strip_trailing_zeros = false) -{ - bl::static_string out; - detail::_f128::to_string_into(out, x, precision, fixed, scientific, strip_trailing_zeros); - return out; -} - -[[nodiscard]] constexpr bl::default_io_string to_static_string(const f128_s& x, int precision = std::numeric_limits::digits10, bool fixed = false, bool scientific = false, bool strip_trailing_zeros = false) -{ - return to_static_string(x, precision, fixed, scientific, strip_trailing_zeros); -} - -[[nodiscard]] inline std::string to_string(const f128_s& x, int precision = std::numeric_limits::digits10, bool fixed = false, bool scientific = false, bool strip_trailing_zeros = false) -{ - const auto text = to_static_string(x, precision, fixed, scientific, strip_trailing_zeros); - return std::string(text.data(), text.size()); -} - -[[nodiscard]] inline std::string to_std_string(const f128_s& x, int precision = std::numeric_limits::digits10, bool fixed = false, bool scientific = false, bool strip_trailing_zeros = false) -{ - return to_string(x, precision, fixed, scientific, strip_trailing_zeros); -} +[[nodiscard]] BL_NO_INLINE std::string to_string( + const f128_s& value, + precision_info precision = std::numeric_limits::max_digits10, + std::ios_base::fmtflags flags = std::ios_base::fmtflags{}); namespace detail::_f128 // primitives and kernels { [[nodiscard]] consteval f128_s parse_dd_literal(const char* text, const char* expected_end) { f128_s out{}; - const char* end = text; - if (!(parse_flt128(text, out, &end) && end == expected_end)) + if (!bl::detail::parse_literal_float_text(text, expected_end, out)) throw "invalid _dd literal"; return out; @@ -549,13 +961,6 @@ namespace literals } // namespace literals -constexpr f128::f128(const char* text) -{ - const char* end = text; - if (!parse_flt128(text, *this, &end)) - throw "invalid f128"; -} - } // namespace bl #endif diff --git a/include/fltx/f128_type.h b/include/fltx/f128_type.h index e306e34..ea58ffd 100644 --- a/include/fltx/f128_type.h +++ b/include/fltx/f128_type.h @@ -12,16 +12,16 @@ #include "fltx/detail/common_fp.h" #include "fltx/detail/simd.h" -#if !defined(BL_F128_ENABLE_SIMD) -# if BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD -# define BL_F128_ENABLE_SIMD 1 +#if !defined(FLTX_F128_ENABLE_SIMD) +# if FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD +# define FLTX_F128_ENABLE_SIMD 1 # else -# define BL_F128_ENABLE_SIMD 0 +# define FLTX_F128_ENABLE_SIMD 0 # endif #endif -#if BL_F128_ENABLE_SIMD && !(BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) -# error "BL_F128_ENABLE_SIMD requires AArch64 NEON or wasm128 SIMD support." +#if FLTX_F128_ENABLE_SIMD && !(FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) +# error "FLTX_F128_ENABLE_SIMD requires AArch64 NEON or wasm128 SIMD support." #endif namespace bl { @@ -49,14 +49,14 @@ namespace detail::_f128 // primitives and kernels BL_FORCE_INLINE constexpr bool f128_runtime_product_pair_simd_enabled() noexcept { - #if BL_F128_ENABLE_SIMD && !defined(FMA_AVAILABLE) && (BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) - return !bl::use_constexpr_math(); + #if FLTX_F128_ENABLE_SIMD && (FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) + return !bl::detail::is_constant_evaluated(); #else return false; #endif } - #if BL_F128_ENABLE_SIMD && (BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) + #if FLTX_F128_ENABLE_SIMD && (FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) namespace simd = bl::detail::simd; #endif @@ -250,7 +250,8 @@ struct f128_s [[nodiscard]] constexpr f128_s operator+() const { return *this; } [[nodiscard]] constexpr f128_s operator-() const noexcept { return f128_s{ -hi, -lo }; } - [[nodiscard]] static constexpr f128_s eps() { return { 1.232595164407831e-32, 0.0 }; } + // Spacing above 1.0 in the public nominal 106-bit model. + [[nodiscard]] static constexpr f128_s eps() { return { 0x1p-105, 0.0 }; } }; struct f128 : public f128_s @@ -263,8 +264,6 @@ struct f128 : public f128_s constexpr f128(uint64_t u) noexcept : f128_s{} { static_cast(*this) = static_cast(u); } constexpr f128(int32_t v) noexcept : f128((int64_t)v) {} constexpr f128(uint32_t u) noexcept : f128((int64_t)u) {} - constexpr f128(const char*); - constexpr f128(const f128_s& f) noexcept : f128_s{ f.hi, f.lo } {} using f128_s::operator=; diff --git a/include/fltx/f256.h b/include/fltx/f256.h index 4cd15b0..dcd42fd 100644 --- a/include/fltx/f256.h +++ b/include/fltx/f256.h @@ -13,11 +13,11 @@ #include "fltx/aliases.h" #include "fltx/f256_type.h" #include "fltx/f256_limits.h" -#include "fltx/f256_numbers.h" #include "fltx/f256_conversions.h" #include "fltx/f256_comparison.h" #include "fltx/f256_classification.h" #include "fltx/f256_arithmetic.h" +#include "fltx/f256_approx_comparison.h" #include "fltx/detail/f256_expressions.h" #include "fltx/detail/interop.h" diff --git a/include/fltx/f256_approx_comparison.h b/include/fltx/f256_approx_comparison.h new file mode 100644 index 0000000..4d3ba09 --- /dev/null +++ b/include/fltx/f256_approx_comparison.h @@ -0,0 +1,38 @@ +/** + * fltx/f256_approx_comparison.h - Approximate comparison for f256. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#ifndef FLTX_F256_APPROX_COMPARISON_INCLUDED +#define FLTX_F256_APPROX_COMPARISON_INCLUDED + +#include "fltx/f256_arithmetic.h" +#include "fltx/f256_classification.h" +#include "fltx/traits.h" +#include "fltx/detail/approx_comparison.h" + +namespace bl +{ + inline constexpr f256_s f256_parity_tolerance{ + 0x1p-188, 0.0, 0.0, 0.0 + }; + + template + requires (fltx_f256 && fltx_f256) + [[nodiscard]] BL_FORCE_INLINE constexpr bool approx_eq( + const Value& value, + const Expected& expected, + const f256_s& relative_tolerance = f256_parity_tolerance) noexcept + { + return detail::approx_eq_impl( + static_cast(value), + static_cast(expected), + relative_tolerance); + } +} + +#endif diff --git a/include/fltx/f256_arithmetic.h b/include/fltx/f256_arithmetic.h index b93af73..43ec7f5 100644 --- a/include/fltx/f256_arithmetic.h +++ b/include/fltx/f256_arithmetic.h @@ -14,85 +14,182 @@ namespace bl { +// Dispatches full f256 addition to canonical or relaxed finite semantics. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator+(const f256_s& a, const f256_s& b) noexcept { + #if defined(FLTX_FAST_MATH) BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::add_checked_inline(a, b), - detail::_f256_runtime::add(a, b) + detail::_f256::add_canonical_inline(a, b), + detail::_f256_runtime::add_finite(a, b) ); + #else + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f256::add_canonical_inline(a, b), + detail::_f256_runtime::add_canonical(a, b) + ); + #endif } +// Dispatches full f256 subtraction to canonical or relaxed finite semantics. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator-(const f256_s& a, const f256_s& b) noexcept { + #if defined(FLTX_FAST_MATH) + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f256::sub_canonical_inline(a, b), + detail::_f256_runtime::sub_finite(a, b) + ); + #else BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::sub_checked_inline(a, b), - detail::_f256_runtime::sub(a, b) + detail::_f256::sub_canonical_inline(a, b), + detail::_f256_runtime::sub_canonical(a, b) ); + #endif } +// Dispatches full f256 multiplication to canonical or relaxed finite semantics. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator*(const f256_s& a, const f256_s& b) noexcept { + #if defined(FLTX_FAST_MATH) && BL_FP_BARRIER_ACTIVE BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::mul_checked_inline(a, b), - detail::_f256_runtime::mul(a, b) + detail::_f256::mul_canonical_inline(a, b), + detail::_f256::mul_fastmath_guarded(a, b) ); + #elif defined(FLTX_FAST_MATH) + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f256::mul_canonical_inline(a, b), + detail::_f256_runtime::mul_finite(a, b) + ); + #else + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f256::mul_canonical_inline(a, b), + detail::_f256_runtime::mul_canonical(a, b) + ); + #endif } +// Dispatches full f256 division to canonical or relaxed finite semantics. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator/(const f256_s& a, const f256_s& b) noexcept { + #if defined(FLTX_FAST_MATH) + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f256::div_canonical_inline(a, b), + detail::_f256_runtime::div_finite(a, b) + ); + #else BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_checked_inline(a, b), - detail::_f256_runtime::div(a, b) + detail::_f256::div_canonical_inline(a, b), + detail::_f256_runtime::div_canonical(a, b) ); + #endif } +// Dispatches f256-plus-double addition for the active arithmetic semantics. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator+(const f256_s& a, double b) noexcept { + #if defined(FLTX_FAST_MATH) BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::add_double_checked_inline(a, b), - detail::_f256_runtime::add_double(a, b) + detail::_f256::add_double_canonical_inline(a, b), + detail::_f256_runtime::add_double_finite(a, b) ); + #else + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f256::add_double_canonical_inline(a, b), + detail::_f256_runtime::add_double_canonical(a, b) + ); + #endif } +// Dispatches f256-minus-double subtraction for the active arithmetic semantics. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator-(const f256_s& a, double b) noexcept { + #if defined(FLTX_FAST_MATH) + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f256::sub_double_canonical_inline(a, b), + detail::_f256_runtime::sub_double_finite(a, b) + ); + #else BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::sub_double_checked_inline(a, b), - detail::_f256_runtime::sub_double(a, b) + detail::_f256::sub_double_canonical_inline(a, b), + detail::_f256_runtime::sub_double_canonical(a, b) ); + #endif } +// Dispatches f256-by-double multiplication for the active arithmetic semantics. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator*(const f256_s& a, double b) noexcept { + #if defined(FLTX_FAST_MATH) + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f256::mul_double_canonical_inline(a, b), + detail::_f256_runtime::mul_double_finite(a, b) + ); + #else BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::mul_double_checked_inline(a, b), - detail::_f256_runtime::mul_double(a, b) + detail::_f256::mul_double_canonical_inline(a, b), + detail::_f256_runtime::mul_double_canonical(a, b) ); + #endif } +// Dispatches f256-by-double division for the active arithmetic semantics. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator/(const f256_s& a, double b) noexcept { + #if defined(FLTX_FAST_MATH) BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256::div_double_checked_inline(a, b), - detail::_f256_runtime::div_double(a, b) + detail::_f256::div_double_canonical_inline(a, b), + detail::_f256_runtime::div_double_finite(a, b) ); + #else + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f256::div_double_canonical_inline(a, b), + detail::_f256_runtime::div_double_canonical(a, b) + ); + #endif } +// Adds double to f256 through the commutative scalar overload. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator+(double a, const f256_s& b) noexcept { return b + a; } +// Subtracts f256 from double through the existing scalar subtraction path. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator-(double a, const f256_s& b) noexcept { return -(b - a); } +// Multiplies double by f256 through the commutative scalar overload. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator*(double a, const f256_s& b) noexcept { return b * a; } +// Divides double by f256 through the full-value division overload. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator/(double a, const f256_s& b) noexcept { return f256_s{ a } / b; } +// Promotes float and adds it to f256. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator+(const f256_s& a, float b) noexcept { return a + (double)b; } +// Promotes float and subtracts it from f256. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator-(const f256_s& a, float b) noexcept { return a - (double)b; } +// Promotes float and multiplies it by f256. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator*(const f256_s& a, float b) noexcept { return a * (double)b; } +// Promotes float and divides f256 by it. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator/(const f256_s& a, float b) noexcept { return a / (double)b; } +// Promotes float and adds f256 to it. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator+(float a, const f256_s& b) noexcept { return (double)a + b; } +// Promotes float and subtracts f256 from it. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator-(float a, const f256_s& b) noexcept { return (double)a - b; } +// Promotes float and multiplies it by f256. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator*(float a, const f256_s& b) noexcept { return (double)a * b; } +// Promotes float and divides it by f256. [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator/(float a, const f256_s& b) noexcept { return (double)a / b; } +// Squares an f256 storage value with canonical multiplication semantics. +[[nodiscard]] BL_FORCE_INLINE constexpr f256_s sqr(const f256_s& a) noexcept +{ + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f256::mul_canonical_inline(a, a), + detail::_f256_runtime::mul_canonical(a, a) + ); +} + +// Squares an f256 wrapper value with canonical multiplication semantics. +[[nodiscard]] BL_FORCE_INLINE constexpr f256 sqr(const f256& a) noexcept +{ + return f256{ sqr(static_cast(a)) }; +} + +// Adds an integer to f256, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator+(const f256_s& a, T b) noexcept { @@ -102,6 +199,7 @@ template, int> = 0> return detail::_f256::add_dd(a, detail::_f256::integer_to_double_double(b)); } +// Subtracts an integer from f256, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator-(const f256_s& a, T b) noexcept { @@ -111,6 +209,7 @@ template, int> = 0> return detail::_f256::sub_dd(a, detail::_f256::integer_to_double_double(b)); } +// Multiplies f256 by an integer, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator*(const f256_s& a, T b) noexcept { @@ -120,6 +219,7 @@ template, int> = 0> return detail::_f256::mul_dd(a, detail::_f256::integer_to_double_double(b)); } +// Divides f256 by an integer, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator/(const f256_s& a, T b) noexcept { @@ -129,6 +229,7 @@ template, int> = 0> return detail::_f256::div_dd(a, detail::_f256::integer_to_double_double(b)); } +// Adds f256 to an integer, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator+(T a, const f256_s& b) noexcept { @@ -138,6 +239,7 @@ template, int> = 0> return detail::_f256::add_dd(b, detail::_f256::integer_to_double_double(a)); } +// Subtracts f256 from an integer, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator-(T a, const f256_s& b) noexcept { @@ -147,6 +249,7 @@ template, int> = 0> return detail::_f256::sub_dd(detail::_f256::integer_to_double_double(a), b); } +// Multiplies an integer by f256, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator*(T a, const f256_s& b) noexcept { @@ -156,6 +259,7 @@ template, int> = 0> return detail::_f256::mul_dd(b, detail::_f256::integer_to_double_double(a)); } +// Divides an integer by f256, preserving integers wider than binary64 exactly. template, int> = 0> [[nodiscard]] BL_FORCE_INLINE constexpr f256_s operator/(T a, const f256_s& b) noexcept { diff --git a/include/fltx/f256_classification.h b/include/fltx/f256_classification.h index 312feaa..a027d0e 100644 --- a/include/fltx/f256_classification.h +++ b/include/fltx/f256_classification.h @@ -44,7 +44,7 @@ namespace detail::_f256 // primitives and kernels [[nodiscard]] BL_FORCE_INLINE constexpr bool ispositive(const f256_s& x) noexcept { - return x.x0 > 0.0; + return !isnan(x) && !iszero(x) && !detail::fp::signbit(x.x0); } [[nodiscard]] BL_FORCE_INLINE constexpr bool signbit(const f256_s& x) noexcept diff --git a/include/fltx/f256_conversions.h b/include/fltx/f256_conversions.h index db940cd..03f9be3 100644 --- a/include/fltx/f256_conversions.h +++ b/include/fltx/f256_conversions.h @@ -1,5 +1,5 @@ /** - * fltx/f256_conversions.h - Public f256 scalar conversion helpers. + * fltx/f256_conversions.h - f256 assignment conversion helpers. * * Copyright (c) 2026 William Hemsworth * @@ -29,42 +29,6 @@ BL_FORCE_INLINE constexpr f256_s& f256_s::operator=(int64_t v) noexcept ); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s to_f256(double x) noexcept -{ - return f256_s{ x, 0.0, 0.0, 0.0 }; -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s to_f256(float x) noexcept -{ - return f256_s{ (double)x, 0.0, 0.0, 0.0 }; -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s to_f256(int32_t v) noexcept -{ - return f256_s{ (double)v, 0.0, 0.0, 0.0 }; -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s to_f256(uint32_t v) noexcept -{ - return f256_s{ (double)v, 0.0, 0.0, 0.0 }; -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s to_f256(uint64_t u) noexcept -{ - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256_impl::to_f256(u), - detail::_f256_runtime::to_f256(u) - ); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s to_f256(int64_t v) noexcept -{ - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256_impl::to_f256(v), - detail::_f256_runtime::to_f256(v) - ); -} - } // namespace bl #endif diff --git a/include/fltx/f256_limits.h b/include/fltx/f256_limits.h index b18a282..02d21ec 100644 --- a/include/fltx/f256_limits.h +++ b/include/fltx/f256_limits.h @@ -13,19 +13,38 @@ #include "fltx/f256_type.h" +// C++23 deprecates std::float_denorm_style even though numeric_limits still +// requires has_denorm to use it. +BL_DEPRECATED_DECLARATIONS_WARNING_PUSH + template<> struct std::numeric_limits { static constexpr bool is_specialized = true; - static constexpr bl::f256_s min() noexcept { return { numeric_limits::min(), 0.0, 0.0, 0.0 }; } - static constexpr bl::f256_s max() noexcept { return { numeric_limits::max(), -numeric_limits::epsilon(), 0.0, 0.0 }; } - static constexpr bl::f256_s lowest() noexcept { return { -numeric_limits::max(), numeric_limits::epsilon(), 0.0, 0.0 }; } - static constexpr bl::f256_s highest() noexcept { return { numeric_limits::max(), -numeric_limits::epsilon(), 0.0, 0.0 }; } + // Public limits describe the nominal 212-bit floating-point model. The + // expansion representation may retain additional sparse-tail information. + static constexpr bl::f256_s min() noexcept + { + return { 0x1p-863, 0.0, 0.0, 0.0 }; + } + + static constexpr bl::f256_s max() noexcept + { + return { + 0x1.fffffffffffffp+1023, + 0x1.fffffffffffffp+969, + 0x1.fffffffffffffp+915, + 0x1.fffffffffffffp+861 + }; + } + + static constexpr bl::f256_s lowest() noexcept { return -max(); } + static constexpr bl::f256_s highest() noexcept { return max(); } static constexpr int digits = 212; static constexpr int digits10 = 63; - static constexpr int max_digits10 = 66; + static constexpr int max_digits10 = 65; static constexpr bool is_signed = true; static constexpr bool is_integer = false; @@ -35,37 +54,34 @@ struct std::numeric_limits static constexpr bl::f256_s epsilon() noexcept { return bl::f256_s::eps(); } static constexpr bl::f256_s round_error() noexcept { return { 0.5, 0.0, 0.0, 0.0 }; } - static constexpr int min_exponent = numeric_limits::min_exponent; - static constexpr int min_exponent10 = numeric_limits::min_exponent10; + static constexpr int min_exponent = -862; + static constexpr int min_exponent10 = -259; static constexpr int max_exponent = numeric_limits::max_exponent; static constexpr int max_exponent10 = numeric_limits::max_exponent10; static constexpr bool has_infinity = true; static constexpr bool has_quiet_NaN = true; static constexpr bool has_signaling_NaN = true; + static constexpr float_denorm_style has_denorm = denorm_present; + static constexpr bool has_denorm_loss = false; static constexpr bl::f256_s infinity() noexcept { return { numeric_limits::infinity(), 0.0, 0.0, 0.0 }; } static constexpr bl::f256_s quiet_NaN() noexcept { return { numeric_limits::quiet_NaN(), 0.0, 0.0, 0.0 }; } static constexpr bl::f256_s signaling_NaN() noexcept { return { numeric_limits::signaling_NaN(), 0.0, 0.0, 0.0 }; } static constexpr bl::f256_s denorm_min() noexcept { return { numeric_limits::denorm_min(), 0.0, 0.0, 0.0 }; } - static constexpr bool is_iec559 = false; + static constexpr bool is_iec559 = false; // not IEEE-754 compliant static constexpr bool is_bounded = true; static constexpr bool is_modulo = false; static constexpr bool traps = false; static constexpr bool tinyness_before = false; + static constexpr float_round_style round_style = round_to_nearest; }; BL_DEFINE_FLOAT_WRAPPER_NUMERIC_LIMITS(bl::f256, bl::f256_s) -#ifndef FLTX_LIMITS_ALIAS_DEFINED -#define FLTX_LIMITS_ALIAS_DEFINED -namespace bl -{ - using std::numeric_limits; -} -#endif +BL_DEPRECATED_DECLARATIONS_WARNING_POP #endif diff --git a/include/fltx/f256_math.h b/include/fltx/f256_math.h index bcbf464..29a7092 100644 --- a/include/fltx/f256_math.h +++ b/include/fltx/f256_math.h @@ -10,8 +10,12 @@ #ifndef F256_MATH_INCLUDED #define F256_MATH_INCLUDED +#include "fltx/f128.h" +#include "fltx/f256.h" #include "fltx/detail/f256_math_basic.h" #include "fltx/detail/f256_math_transcendental.h" +#include "fltx/detail/math_promotion.h" +#include "fltx/traits.h" namespace bl { @@ -48,12 +52,12 @@ namespace bl { // rounding and decimals [[nodiscard]] BL_FORCE_INLINE constexpr f256 floor(const f256_s& a) { - return detail::_f256_impl::floor(a); + return detail::_f256::floor_limbwise(a); } [[nodiscard]] BL_FORCE_INLINE constexpr f256 ceil(const f256_s& a) { - return detail::_f256_impl::ceil(a); + return detail::_f256::ceil_limbwise(a); } [[nodiscard]] BL_FORCE_INLINE constexpr f256 trunc(const f256_s& a) @@ -64,71 +68,74 @@ namespace bl { [[nodiscard]] BL_FORCE_INLINE constexpr f256 round(const f256_s& a) { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256_impl::round(a), - detail::_f256_runtime::round(a) + detail::_f256_impl::round_nearest_away_from_zero(a), + detail::_f256_runtime::round_nearest_away_from_zero(a) ); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256 round_to_decimals(f256_s v, int prec) +[[nodiscard]] BL_FORCE_INLINE constexpr f256 roundeven(const f256_s& x) { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256_impl::round_to_decimals(v, prec), - detail::_f256_runtime::round_to_decimals(v, prec) - ); + return detail::_f256_impl::round_nearest_even(x); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256 nearbyint(const f256_s& a) +[[nodiscard]] BL_FORCE_INLINE constexpr f256 round_decimals(f256_s v, int precision) { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256_impl::nearbyint(a), - detail::_f256_runtime::nearbyint(a) + detail::_f256_impl::round_decimals(v, precision), + detail::_f256_runtime::round_decimals(v, precision) ); } -[[nodiscard]] BL_FORCE_INLINE constexpr f256 rint(const f256_s& x) +[[nodiscard]] BL_FORCE_INLINE constexpr f256 round_significant( + f256_s v, + int precision) { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256_impl::rint(x), - detail::_f256_runtime::rint(x) + detail::_f256_impl::round_significant(v, precision), + detail::_f256_runtime::round_significant(v, precision) ); } [[nodiscard]] BL_FORCE_INLINE constexpr long lround(const f256_s& x) { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256_impl::lround(x), - detail::_f256_runtime::lround(x) + detail::_f256_impl::lround_nearest_away_from_zero(x), + detail::_f256_runtime::lround_nearest_away_from_zero(x) ); } [[nodiscard]] BL_FORCE_INLINE constexpr long long llround(const f256_s& x) { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256_impl::llround(x), - detail::_f256_runtime::llround(x) + detail::_f256_impl::llround_nearest_away_from_zero(x), + detail::_f256_runtime::llround_nearest_away_from_zero(x) ); } -[[nodiscard]] BL_FORCE_INLINE constexpr long lrint(const f256_s& x) +// arithmetic and comparisons +[[nodiscard]] BL_FORCE_INLINE constexpr f256 fma(const f256_s& x, const f256_s& y, const f256_s& z) { +#if defined(__EMSCRIPTEN__) && defined(__clang__) && defined(__wasm32__) && \ + defined(FLTX_FAST_MATH) BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256_impl::lrint(x), - detail::_f256_runtime::lrint(x) + detail::_f256_impl::fma(x, y, z), + detail::_f256_runtime::fma(x, y, z) ); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr long long llrint(const f256_s& x) -{ +#elif FLTX_GUARDED_X86_FMA BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256_impl::llrint(x), - detail::_f256_runtime::llrint(x) + detail::_f256_impl::fma(x, y, z), + detail::_f256_runtime::fma(x, y, z) ); -} - -// arithmetic and comparisons -[[nodiscard]] BL_FORCE_INLINE constexpr f256 fma(const f256_s& x, const f256_s& y, const f256_s& z) -{ +#elif FLTX_HAS_COMPILED_X86_FMA_BACKEND && !FLTX_TU_HAS_X86_FMA + BL_CONSTEXPR_RUNTIME_DISPATCH( + detail::_f256_impl::fma(x, y, z), + detail::fp::runtime_hardware_fma_enabled() + ? detail::_f256_runtime::fma_x86(x, y, z) + : detail::_f256_impl::fma(x, y, z) + ); +#else return detail::_f256_impl::fma(x, y, z); +#endif } [[nodiscard]] BL_FORCE_INLINE constexpr f256 fmin(const f256_s& a, const f256_s& b) @@ -163,8 +170,8 @@ namespace bl { [[nodiscard]] BL_FORCE_INLINE constexpr f256 remainder(const f256_s& x, const f256_s& y) { BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256_impl::remainder(x, y), - detail::_f256_runtime::remainder(x, y) + detail::_f256_impl::remquo(x, y, nullptr), + detail::_f256_runtime::remquo(x, y, nullptr) ); } @@ -208,12 +215,12 @@ namespace bl { [[nodiscard]] BL_FORCE_INLINE constexpr f256 scalbn(const f256_s& x, int e) noexcept { - return detail::_f256_impl::scalbn(x, e); + return detail::_f256_impl::ldexp(x, e); } [[nodiscard]] BL_FORCE_INLINE constexpr f256 scalbln(const f256_s& x, long e) noexcept { - return detail::_f256_impl::scalbln(x, e); + return detail::_f256_impl::ldexp(x, static_cast(e)); } // adjacent values @@ -224,18 +231,24 @@ namespace bl { [[nodiscard]] BL_FORCE_INLINE constexpr f256 nexttoward(const f256_s& from, long double to) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256_impl::nexttoward(from, to), - detail::_f256_runtime::nexttoward(from, to) - ); + const double high = static_cast(to); + if (detail::fp::isinf_or_nan(high)) + return detail::_f256_impl::nextafter(from, f256_s{ high, 0.0, 0.0, 0.0 }); + if (high == 0.0 && to != 0.0L) + { + const double target = to < 0.0L + ? -std::numeric_limits::denorm_min() + : std::numeric_limits::denorm_min(); + return detail::_f256_impl::nextafter(from, f256_s{ target, 0.0, 0.0, 0.0 }); + } + + const double low = static_cast(to - static_cast(high)); + return detail::_f256_impl::nextafter(from, f256_s{ high, low, 0.0, 0.0 }); } [[nodiscard]] BL_FORCE_INLINE constexpr f256 nexttoward(const f256_s& from, const f256_s& to) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256_impl::nexttoward(from, to), - detail::_f256_runtime::nexttoward(from, to) - ); + return detail::_f256_impl::nextafter(from, to); } // exp / log @@ -300,15 +313,6 @@ namespace bl { ); } -// pow -[[nodiscard]] BL_FORCE_INLINE constexpr f256 pow10_256(int k) -{ - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f256_impl::pow10_256(k), - detail::_f256_runtime::pow10_256(k) - ); -} - [[nodiscard]] BL_FORCE_INLINE constexpr f256 pow(const f256_s& x, const f256_s& y) { BL_CONSTEXPR_RUNTIME_DISPATCH( @@ -317,6 +321,31 @@ namespace bl { ); } +template +[[nodiscard]] BL_MSVC_NOINLINE constexpr f256 ipow(const f256_s& x, Exp y) +{ + if constexpr (std::signed_integral>) + { + BL_CONSTEXPR_RUNTIME_DISPATCH( + f256{ detail::_f256::ipow_integer(x, y) }, + f256{ detail::_f256_runtime::ipow_signed(x, static_cast(y)) } + ); + } + else + { + BL_CONSTEXPR_RUNTIME_DISPATCH( + f256{ detail::_f256::ipow_integer(x, y) }, + f256{ detail::_f256_runtime::ipow_unsigned(x, static_cast(y)) } + ); + } +} + +template +[[nodiscard]] BL_FORCE_INLINE constexpr f256 pow(const f256_s& x, Exp y) +{ + return bl::ipow(x, y); +} + [[nodiscard]] BL_FORCE_INLINE constexpr f256 pow(const f256_s& x, double y) { BL_CONSTEXPR_RUNTIME_DISPATCH( @@ -325,6 +354,25 @@ namespace bl { ); } +[[nodiscard]] BL_FORCE_INLINE constexpr f256 pow(const f256_s& x, const f128_s& y) +{ + f256_s promoted{}; + promoted = y; + return bl::pow(x, promoted); +} + +[[nodiscard]] BL_FORCE_INLINE constexpr f256 pow(const f256_s&, long double) = delete; + +template +requires (detail::math::f256_promoted_math_args && + !(fltx_f256 && detail::fp::non_bool_integral)) +[[nodiscard]] BL_FORCE_INLINE constexpr auto pow(Base x, Exp y) +{ + using P = detail::math::promoted_t; + using E = detail::math::promoted_pow_exponent_t; + return bl::pow(detail::math::promoted_cast

(x), detail::math::promoted_cast(y)); +} + // trig [[nodiscard]] BL_FORCE_INLINE constexpr bool sincos(const f256_s& x, f256_s& s_out, f256_s& c_out) { @@ -397,11 +445,6 @@ template f256_s s_out{}; f256_s c_out{}; const bool ok = bl::sincos(x, s_out, c_out); - if (!ok) - { - s_out = bl::sin(x); - c_out = bl::cos(x); - } detail::fp::assign_sincos_vector(out, s_out, c_out); return ok; } @@ -414,11 +457,6 @@ template requires (std::same_as, f256> | Result s_out{}; Result c_out{}; const bool ok = bl::sincos(x, s_out, c_out); - if (!ok) - { - s_out = bl::sin(x); - c_out = bl::cos(x); - } return detail::fp::make_sincos_result(s_out, c_out, ok); } @@ -505,6 +543,175 @@ template requires (std::same_as, f256> | ); } +// type promotions +#define FLTX_F256_PROMOTED_UNARY(NAME) \ + template \ + requires detail::math::f256_promoted_math_args \ + [[nodiscard]] BL_FORCE_INLINE constexpr auto NAME(T x) \ + { \ + using P = detail::math::promoted_t; \ + return bl::NAME(detail::math::promoted_cast

(x)); \ + } + +#define FLTX_F256_PROMOTED_BINARY(NAME) \ + template \ + requires detail::math::f256_promoted_math_args \ + [[nodiscard]] BL_FORCE_INLINE constexpr auto NAME(T x, U y) \ + { \ + using P = detail::math::promoted_t; \ + return bl::NAME(detail::math::promoted_cast

(x), detail::math::promoted_cast

(y)); \ + } + +#define FLTX_F256_PROMOTED_TERNARY(NAME) \ + template \ + requires detail::math::f256_promoted_math_args \ + [[nodiscard]] BL_FORCE_INLINE constexpr auto NAME(T x, U y, V z) \ + { \ + using P = detail::math::promoted_t; \ + return bl::NAME(detail::math::promoted_cast

(x), detail::math::promoted_cast

(y), detail::math::promoted_cast

(z)); \ + } + +FLTX_F256_PROMOTED_UNARY(abs) +FLTX_F256_PROMOTED_UNARY(fabs) +FLTX_F256_PROMOTED_UNARY(signbit) +FLTX_F256_PROMOTED_UNARY(isnan) +FLTX_F256_PROMOTED_UNARY(isinf) +FLTX_F256_PROMOTED_UNARY(isfinite) +FLTX_F256_PROMOTED_UNARY(iszero) +FLTX_F256_PROMOTED_UNARY(fpclassify) +FLTX_F256_PROMOTED_UNARY(isnormal) + +FLTX_F256_PROMOTED_UNARY(floor) +FLTX_F256_PROMOTED_UNARY(ceil) +FLTX_F256_PROMOTED_UNARY(trunc) +FLTX_F256_PROMOTED_UNARY(round) +FLTX_F256_PROMOTED_UNARY(roundeven) +FLTX_F256_PROMOTED_UNARY(lround) +FLTX_F256_PROMOTED_UNARY(llround) + +FLTX_F256_PROMOTED_BINARY(fmod) +FLTX_F256_PROMOTED_BINARY(remainder) +FLTX_F256_PROMOTED_TERNARY(fma) +FLTX_F256_PROMOTED_BINARY(fmin) +FLTX_F256_PROMOTED_BINARY(fmax) +FLTX_F256_PROMOTED_BINARY(fdim) +FLTX_F256_PROMOTED_BINARY(copysign) + +FLTX_F256_PROMOTED_UNARY(ilogb) +FLTX_F256_PROMOTED_UNARY(logb) +FLTX_F256_PROMOTED_BINARY(nextafter) + +FLTX_F256_PROMOTED_UNARY(exp) +FLTX_F256_PROMOTED_UNARY(exp2) +FLTX_F256_PROMOTED_UNARY(expm1) +FLTX_F256_PROMOTED_UNARY(log) +FLTX_F256_PROMOTED_UNARY(log2) +FLTX_F256_PROMOTED_UNARY(log10) +FLTX_F256_PROMOTED_UNARY(log1p) +FLTX_F256_PROMOTED_UNARY(sqrt) +FLTX_F256_PROMOTED_UNARY(cbrt) +FLTX_F256_PROMOTED_BINARY(hypot) + +FLTX_F256_PROMOTED_UNARY(sin) +FLTX_F256_PROMOTED_UNARY(cos) +FLTX_F256_PROMOTED_UNARY(tan) +FLTX_F256_PROMOTED_UNARY(atan) +FLTX_F256_PROMOTED_BINARY(atan2) +FLTX_F256_PROMOTED_UNARY(asin) +FLTX_F256_PROMOTED_UNARY(acos) + +FLTX_F256_PROMOTED_UNARY(sinh) +FLTX_F256_PROMOTED_UNARY(cosh) +FLTX_F256_PROMOTED_UNARY(tanh) +FLTX_F256_PROMOTED_UNARY(asinh) +FLTX_F256_PROMOTED_UNARY(acosh) +FLTX_F256_PROMOTED_UNARY(atanh) + +FLTX_F256_PROMOTED_UNARY(erf) +FLTX_F256_PROMOTED_UNARY(erfc) +FLTX_F256_PROMOTED_UNARY(lgamma) +FLTX_F256_PROMOTED_UNARY(tgamma) + +FLTX_F256_PROMOTED_BINARY(isunordered) +FLTX_F256_PROMOTED_BINARY(isgreater) +FLTX_F256_PROMOTED_BINARY(isgreaterequal) +FLTX_F256_PROMOTED_BINARY(isless) +FLTX_F256_PROMOTED_BINARY(islessequal) +FLTX_F256_PROMOTED_BINARY(islessgreater) + +#undef FLTX_F256_PROMOTED_TERNARY +#undef FLTX_F256_PROMOTED_BINARY +#undef FLTX_F256_PROMOTED_UNARY + +template +requires detail::math::f256_promoted_math_args +[[nodiscard]] BL_FORCE_INLINE constexpr auto remquo(T x, U y, int* quo) +{ + using P = detail::math::promoted_t; + return bl::remquo(detail::math::promoted_cast

(x), detail::math::promoted_cast

(y), quo); +} + +template +requires detail::math::f256_promoted_math_args +[[nodiscard]] BL_FORCE_INLINE constexpr auto ldexp(T x, int exp) +{ + using P = detail::math::promoted_t; + return bl::ldexp(detail::math::promoted_cast

(x), exp); +} + +template +requires detail::math::f256_promoted_math_args +[[nodiscard]] BL_FORCE_INLINE constexpr auto scalbn(T x, int exp) +{ + using P = detail::math::promoted_t; + return bl::scalbn(detail::math::promoted_cast

(x), exp); +} + +template +requires detail::math::f256_promoted_math_args +[[nodiscard]] BL_FORCE_INLINE constexpr auto scalbln(T x, long exp) +{ + using P = detail::math::promoted_t; + return bl::scalbln(detail::math::promoted_cast

(x), exp); +} + +template +requires detail::math::f256_promoted_math_args +[[nodiscard]] BL_FORCE_INLINE constexpr auto frexp(T x, int* exp) +{ + using P = detail::math::promoted_t; + return bl::frexp(detail::math::promoted_cast

(x), exp); +} + +template +requires detail::math::f256_promoted_math_args +[[nodiscard]] BL_FORCE_INLINE constexpr auto modf(T x, detail::math::promoted_t* iptr) +{ + using P = detail::math::promoted_t; + return bl::modf(detail::math::promoted_cast

(x), iptr); +} + +template +requires detail::math::f256_nexttoward_args +[[nodiscard]] BL_FORCE_INLINE constexpr auto nexttoward(From from, To to) +{ + using P = detail::math::promoted_t; + const P promoted_from = detail::math::promoted_cast

(from); + + if constexpr (std::same_as, long double>) + return bl::nexttoward(promoted_from, to); + else + return bl::nexttoward(promoted_from, detail::math::promoted_cast

(to)); +} + +template +requires detail::math::f256_promoted_math_args +[[nodiscard]] BL_FORCE_INLINE constexpr bool sincos(T x, detail::math::promoted_t& s_out, detail::math::promoted_t& c_out) +{ + using P = detail::math::promoted_t; + return bl::sincos(detail::math::promoted_cast

(x), s_out, c_out); +} + } // namespace bl #endif diff --git a/include/fltx/f256_numbers.h b/include/fltx/f256_numbers.h index bc3f720..ed575ff 100644 --- a/include/fltx/f256_numbers.h +++ b/include/fltx/f256_numbers.h @@ -45,12 +45,4 @@ namespace std::numbers } // namespace std::numbers -#ifndef FLTX_NUMBERS_ALIAS_DEFINED -#define FLTX_NUMBERS_ALIAS_DEFINED -namespace bl -{ - namespace numbers = std::numbers; -} // namespace bl -#endif - #endif diff --git a/include/fltx/f256_stream.h b/include/fltx/f256_stream.h index 4cbe850..4377c91 100644 --- a/include/fltx/f256_stream.h +++ b/include/fltx/f256_stream.h @@ -22,12 +22,12 @@ namespace bl inline std::istream& operator>>(std::istream& is, f256_s& x) { - return detail::read_from_stream(is, x, parse_flt256); + return detail::read_from_stream(is, x, detail::_f256::parse); } inline std::istream& operator>>(std::istream& is, f256& x) { - return detail::read_from_stream(is, static_cast(x), parse_flt256); + return detail::read_from_stream(is, static_cast(x), detail::_f256::parse); } } // namespace bl diff --git a/include/fltx/f256_string.h b/include/fltx/f256_string.h index f1ce777..97f6949 100644 --- a/include/fltx/f256_string.h +++ b/include/fltx/f256_string.h @@ -10,151 +10,27 @@ #ifndef F256_STRING_INCLUDED #define F256_STRING_INCLUDED #include +#include #include #include "fltx/f256_limits.h" -#include "fltx/f256_math.h" +#include "fltx/detail/f256_math_basic.h" #include "fltx/detail/common_io.h" namespace bl { namespace detail::_f256 // primitives and kernels { - BL_PUSH_PRECISE; - BL_PRINT_NOINLINE inline f256_s mul_by_double_print(f256_s a, double b) noexcept - { - return a * b; - } - - BL_PRINT_NOINLINE inline f256_s sub_by_double_print(f256_s a, double b) noexcept - { - return a - b; - } - BL_POP_PRECISE; - - struct f256_print_expansion - { - double terms[64]{}; // small -> large - int n = 0; - }; - - inline constexpr void print_expansion_set(f256_print_expansion& st, const f256_s& x) noexcept - { - double tmp[4] = { x.x3, x.x2, x.x1, x.x0 }; - st.n = detail::_f256::compress_expansion_zeroelim(4, tmp, st.terms); - } - - inline constexpr bool print_expansion_is_zero(const f256_print_expansion& st) noexcept - { - return st.n <= 0; - } - - inline constexpr f256_s print_expansion_to_f256(const f256_print_expansion& st) noexcept - { - return from_expansion_fast(st.terms, st.n); - } - - inline constexpr void print_expansion_scale(f256_print_expansion& st, double b) noexcept - { - double tmp[128]{}; - int n = detail::_f256::scale_expansion_zeroelim(st.n, st.terms, b, tmp); - - double comp[64]{}; - st.n = detail::_f256::compress_expansion_zeroelim(n, tmp, comp); - for (int i = 0; i < st.n; ++i) - st.terms[i] = comp[i]; - } - - inline constexpr void print_expansion_add_double(f256_print_expansion& st, double b) noexcept - { - double term = b; - double tmp[128]{}; - int n = detail::_f256::fast_expansion_sum_zeroelim(st.n, st.terms, 1, &term, tmp); - - double comp[64]{}; - st.n = detail::_f256::compress_expansion_zeroelim(n, tmp, comp); - for (int i = 0; i < st.n; ++i) - st.terms[i] = comp[i]; - } - - inline constexpr uint32_t print_expansion_take_uint(f256_print_expansion& st, uint32_t max_value) noexcept - { - f256_s approx = print_expansion_to_f256(st); - long long value = (long long)floor(approx).x0; - - if (value < 0) value = 0; - else if (value > (long long)max_value) value = (long long)max_value; - - print_expansion_add_double(st, -(double)value); - return (uint32_t)value; - } - - inline constexpr void normalize10(const f256_s& x, f256_s& m, int& exp10) - { - if (iszero(x)) { m = f256_s{}; exp10 = 0; return; } - - f256_s ax = abs(x); - - int e2 = 0; - (void)std::frexp(ax.x0, &e2); - int e10 = (int)detail::fp::floor((e2 - 1) * 0.30102999566398114); - - m = ax * pow10_256(-e10); - while (m >= f256_s{ 10.0, 0.0, 0.0, 0.0 }) { m = m / f256_s{ 10.0, 0.0, 0.0, 0.0 }; ++e10; } - while (m < f256_s{ 1.0 }) { m = m * f256_s{ 10.0, 0.0, 0.0, 0.0 }; --e10; } - exp10 = e10; - } - - inline constexpr int emit_uint_rev_buf(char* dst, f256_s n) - { - const f256_s base = f256_s{ 1000000000.0, 0.0, 0.0, 0.0 }; - - int len = 0; - - if (n < f256_s{ 10.0, 0.0, 0.0, 0.0 }) { - int d = (int)n.x0; - if (d < 0) d = 0; else if (d > 9) d = 9; - dst[len++] = char('0' + d); - return len; - } - - while (n >= base) { - f256_s q = floor(n / base); - f256_s r = n - q * base; - - long long chunk = (long long)detail::fp::floor(r.x0); - if (chunk >= 1000000000LL) { chunk -= 1000000000LL; q += 1.0; } - if (chunk < 0) chunk = 0; - - for (int i = 0; i < 9; ++i) { - int d = int(chunk % 10); - dst[len++] = char('0' + d); - chunk /= 10; - } - - n = q; - } - - long long last = (long long)detail::fp::floor(n.x0); - if (last == 0) { - dst[len++] = '0'; - } - else { - while (last > 0) { - int d = int(last % 10); - dst[len++] = char('0' + d); - last /= 10; - } - } - - return len; - } + struct f256_io_traits; struct exact_traits { using value_type = f256_s; static constexpr int limb_count = 4; static constexpr int significand_bits = 212; + static constexpr int conversion_significand_bits = 53 * 5; + static constexpr int max_binary_exponent = 1023; + static constexpr int min_binary_exponent = -1074; static constexpr double limb(const value_type& x, int index) noexcept { @@ -169,7 +45,7 @@ namespace detail::_f256 // primitives and kernels static constexpr value_type zero(bool neg = false) noexcept { - return neg ? value_type{ -0.0, 0.0, 0.0, 0.0 } : value_type{ 0.0, 0.0, 0.0, 0.0 }; + return detail::_f256::signed_zero(neg); } static constexpr value_type infinity(bool neg = false) noexcept @@ -178,8 +54,135 @@ namespace detail::_f256 // primitives and kernels return neg ? -inf : inf; } +#if BL_FP_BARRIER_ACTIVE + static constexpr std::uint64_t scaled_significand_limb_bits( + std::uint64_t coefficient, + int exponent) noexcept + { + if (coefficient == 0) + return 0; + + constexpr std::uint64_t hidden_bit = 0x0010000000000000ull; + constexpr std::uint64_t fraction_mask = 0x000fffffffffffffull; + constexpr std::uint64_t exponent_mask = 0x7ff0000000000000ull; + + const int leading_bit = detail::fp::highest_bit_index(coefficient); + const std::uint64_t significand = coefficient << (52 - leading_bit); + const int unbiased_exponent = leading_bit + exponent; + + if (unbiased_exponent > 1023) + return exponent_mask; + if (unbiased_exponent >= -1022) + { + const std::uint64_t exponent_bits = + static_cast(unbiased_exponent + 1023) << 52; + return exponent_bits | (significand & fraction_mask); + } + + const int shift = -1022 - unbiased_exponent; + if (shift >= 64) + return 0; + + const std::uint64_t truncated = significand >> shift; + const std::uint64_t remainder_mask = + (std::uint64_t{ 1 } << shift) - 1; + const std::uint64_t remainder = significand & remainder_mask; + const std::uint64_t halfway = std::uint64_t{ 1 } << (shift - 1); + const bool round_up = remainder > halfway || + (remainder == halfway && (truncated & 1u) != 0); + const std::uint64_t rounded = truncated + static_cast(round_up); + return rounded >= hidden_bit ? hidden_bit : rounded; + } + + // Extracts each limb from the exact signed remainder, avoiding the + // floating-point error-free transforms that fast-math can reassociate. + static constexpr value_type pack_guarded_significand( + const detail::exact_decimal::biguint& q, + int e2, + bool neg) noexcept + { + constexpr std::uint64_t sign_mask = 0x8000000000000000ull; + constexpr std::uint64_t limb_unit = std::uint64_t{ 1 } << 53; + constexpr std::uint64_t halfway = std::uint64_t{ 1 } << 52; + + const int bits = q.bit_length(); + if (bits <= 0) + return zero(neg); + + const int unit_exponent = e2 - (bits - 1); + detail::exact_decimal::signed_biguint remainder{ q, neg }; + std::uint64_t limb_bits[4]{}; + for (int i = 0; i < 4 && !remainder.mag.is_zero(); ++i) + { + const int remainder_bits = remainder.mag.bit_length(); + const int highest_exponent = unit_exponent + remainder_bits - 1; + const int shift = highest_exponent >= -1022 + ? (remainder_bits > 53 ? remainder_bits - 53 : 0) + : (-1074 > unit_exponent ? -1074 - unit_exponent : 0); + + detail::exact_decimal::biguint rounded = + detail::exact_decimal::shr_bits_copy(remainder.mag, shift); + if (shift > 0) + { + const bool round_bit = remainder.mag.get_bit(shift - 1); + const bool sticky = shift > 1 && + detail::exact_decimal::any_low_bits_set(remainder.mag, shift - 1); + if (round_bit && (sticky || rounded.is_odd())) + rounded.add_small(1); + } + + const std::uint64_t coefficient = rounded.get_bits(0, 54); + if (coefficient == 0) + break; + + std::uint64_t bits = coefficient == limb_unit + ? scaled_significand_limb_bits(halfway, unit_exponent + shift + 1) + : scaled_significand_limb_bits(coefficient, unit_exponent + shift); + if (remainder.neg) + bits |= sign_mask; + limb_bits[i] = bits; + + if (i != 3) + { + detail::exact_decimal::biguint term{ coefficient }; + term.shl_bits(shift); + detail::exact_decimal::add_signed(remainder, term, !remainder.neg); + } + } + return { + std::bit_cast(limb_bits[0]), + std::bit_cast(limb_bits[1]), + std::bit_cast(limb_bits[2]), + std::bit_cast(limb_bits[3]) + }; + } +#endif + static constexpr value_type pack_from_significand(const detail::exact_decimal::biguint& q, int e2, bool neg) noexcept { +#if BL_FP_BARRIER_ACTIVE + return pack_guarded_significand(q, e2, neg); +#else + if (q.bit_length() > significand_bits) + { + const std::uint64_t c4 = q.get_bits(0, 53); + const std::uint64_t c3 = q.get_bits(53, 53); + const std::uint64_t c2 = q.get_bits(106, 53); + const std::uint64_t c1 = q.get_bits(159, 53); + const std::uint64_t c0 = q.get_bits(212, 53); + + const double x0 = c0 ? detail::fp::ldexp(static_cast(c0), e2 - 52) : 0.0; + const double x1 = c1 ? detail::fp::ldexp(static_cast(c1), e2 - 105) : 0.0; + const double x2 = c2 ? detail::fp::ldexp(static_cast(c2), e2 - 158) : 0.0; + const double x3 = c3 ? detail::fp::ldexp(static_cast(c3), e2 - 211) : 0.0; + const double x4 = c4 ? detail::fp::ldexp(static_cast(c4), e2 - 264) : 0.0; + + f256_s out = renorm5(x0, x1, x2, x3, x4); + if (neg) + out = -out; + return out; + } + const std::uint64_t c3 = q.get_bits(0, 53); const std::uint64_t c2 = q.get_bits(53, 53); const std::uint64_t c1 = q.get_bits(106, 53); @@ -194,6 +197,7 @@ namespace detail::_f256 // primitives and kernels if (neg) out = -out; return out; +#endif } }; @@ -203,135 +207,10 @@ namespace detail::_f256 // primitives and kernels return detail::exact_decimal::exact_scientific_digits(x, sig, digits, exp10); } - inline constexpr double pow10_double_table[10] = { - 1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, - 1000000.0, 10000000.0, 100000000.0, 1000000000.0 - }; - - inline constexpr detail::fltx_char_result emit_fixed_dec_to_chars(char* first, char* last, f256_s x, int prec, bool strip_trailing_zeros) noexcept - { - if (prec < 0) prec = 0; - - if (iszero(x)) - return detail::emit_fixed_zero_to_chars(first, last, detail::_f256::signbit(x.x0), prec, strip_trailing_zeros); - - const bool neg = (x.x0 < 0.0); - if (neg) x = -x; - x = renorm(x.x0, x.x1, x.x2, x.x3); - - f256_s ip = floor(x); - f256_s fp = x - ip; - - if (fp >= f256_s{ 1.0 }) { fp -= 1.0; ip += 1.0; } - else if (fp < f256_s{}) { fp = f256_s{}; } - - constexpr int kFracStack = 2048; - char frac_stack[kFracStack]; - char* frac = frac_stack; - - std::string frac_dyn; - if (prec > kFracStack) { - frac_dyn.resize((size_t)prec); - frac = (char*)frac_dyn.data(); - } - - int frac_len = (prec > 0) ? prec : 0; - - if (prec > 0) { - - f256_print_expansion fp_exp; - print_expansion_set(fp_exp, fp); - - int written = 0; - const int full = prec / 9; - const int rem = prec - full * 9; - - for (int c = 0; c < full; ++c) { - print_expansion_scale(fp_exp, pow10_double_table[9]); - uint32_t chunk = print_expansion_take_uint(fp_exp, 999999999u); - - for (int i = 8; i >= 0; --i) { - frac[written + i] = char('0' + (chunk % 10u)); - chunk /= 10u; - } - written += 9; - } - - if (rem > 0) { - print_expansion_scale(fp_exp, pow10_double_table[rem]); - uint32_t chunk = print_expansion_take_uint(fp_exp, (uint32_t)pow10_double_table[rem] - 1u); - - for (int i = rem - 1; i >= 0; --i) { - frac[written + i] = char('0' + (chunk % 10u)); - chunk /= 10u; - } - written += rem; - } - - f256_print_expansion round_exp = fp_exp; - print_expansion_scale(round_exp, 10.0); - int next = (int)print_expansion_take_uint(round_exp, 9u); - - const int last_digit = frac[prec - 1] - '0'; - bool round_up = false; - if (next > 5) round_up = true; - else if (next < 5) round_up = false; - else { - const bool gt_half = !print_expansion_is_zero(round_exp); - round_up = gt_half || ((last_digit & 1) != 0); - } - - if (round_up) { - int i = prec - 1; - for (; i >= 0; --i) { - char& c = frac[i]; - if (c == '9') c = '0'; - else { c = char(c + 1); break; } - } - if (i < 0) { - ip += 1.0; - for (int j = 0; j < prec; ++j) frac[j] = '0'; - } - } - - if (strip_trailing_zeros) { - while (frac_len > 0 && frac[frac_len - 1] == '0') --frac_len; - } - } - - char int_rev[320]; - int int_len = emit_uint_rev_buf(int_rev, ip); - - if (neg && int_len == 1 && int_rev[0] == '0' && frac_len == 0) { - if (first >= last) return { first, false }; - *first = '0'; - return { first + 1, true }; - } - - const size_t needed = (size_t)(neg ? 1 : 0) + (size_t)int_len + (frac_len ? (size_t)(1 + frac_len) : 0u); - if ((size_t)(last - first) < needed) return { first, false }; - - char* p = first; - if (neg) *p++ = '-'; - - for (int i = int_len - 1; i >= 0; --i) *p++ = int_rev[i]; - - if (frac_len > 0) { - *p++ = '.'; - detail::copy_chars(p, frac, static_cast(frac_len)); - p += frac_len; - } - - return { p, true }; - } - inline constexpr detail::fltx_char_result emit_scientific_sig_to_chars(char* first, char* last, const f256_s& x, int sig_digits, bool strip_trailing_zeros) noexcept { - if (iszero(x)) { - if (first >= last) return { first, false }; - *first = '0'; - return { first + 1, true }; - } + if (iszero(x)) + return detail::emit_single_zero_to_chars(first, last); if (sig_digits < 1) sig_digits = 1; @@ -339,7 +218,7 @@ namespace detail::_f256 // primitives and kernels const f256_s v = neg ? -x : x; const int sig = static_cast(sig_digits); - bl::default_io_string digits; + bl::f256_io_string digits; int e = 0; if (!detail::_f256::exact_scientific_digits(v, sig, digits, e)) { if (first >= last) return { first, false }; @@ -347,139 +226,99 @@ namespace detail::_f256 // primitives and kernels return { first + 1, true }; } - int last_frac = sig - 1; - if (sig > 1 && strip_trailing_zeros) { - while (last_frac >= 1 && digits[last_frac] == '0') --last_frac; - } - - char exp_buf[16]; - char* ep = exp_buf; - char* eend = exp_buf + sizeof(exp_buf); - auto er = detail::append_exp10_to_chars(ep, eend, e); - if (!er.ok) return { first, false }; - const int exp_len = static_cast(er.ptr - ep); - - const bool has_frac = (sig > 1) && (last_frac >= 1); - const size_t needed = static_cast(neg ? 1 : 0) + 1u + (has_frac ? static_cast(1 + last_frac) : 0u) + static_cast(exp_len); - if (static_cast(last - first) < needed) return { first, false }; - - char* p = first; - if (neg) *p++ = '-'; - *p++ = digits[0]; - if (has_frac) { - *p++ = '.'; - detail::copy_chars(p, digits.data() + 1, static_cast(last_frac)); - p += last_frac; - } - detail::copy_chars(p, exp_buf, static_cast(exp_len)); - p += exp_len; - return { p, true }; - } - - inline constexpr detail::fltx_char_result emit_scientific_to_chars(char* first, char* last, const f256_s& x, int frac_digits, bool strip_trailing_zeros) noexcept - { - if (frac_digits < 0) frac_digits = 0; - - if (iszero(x)) { - const bool neg = detail::_f256::signbit(x.x0); - int frac_len = strip_trailing_zeros ? 0 : (int)frac_digits; - - char exp_buf[16]; - char* ep = exp_buf; - char* eend = exp_buf + sizeof(exp_buf); - auto er = detail::append_exp10_to_chars(ep, eend, 0); - if (!er.ok) return { first, false }; - const int exp_len = static_cast(er.ptr - ep); - - const size_t needed = static_cast(neg ? 1 : 0) + 1u + (frac_len ? static_cast(1 + frac_len) : 0u) + static_cast(exp_len); - if (static_cast(last - first) < needed) return { first, false }; - - char* p = first; - if (neg) *p++ = '-'; - *p++ = '0'; - - if (frac_len > 0) { - *p++ = '.'; - for (int i = 0; i < frac_len; ++i) *p++ = '0'; - } - - detail::copy_chars(p, exp_buf, static_cast(exp_len)); - p += exp_len; - return { p, true }; - } - - return emit_scientific_sig_to_chars(first, last, x, frac_digits + 1, strip_trailing_zeros); - } - - inline constexpr detail::fltx_char_result to_chars(char* first, char* last, const f256_s& x, int precision, bool fixed = false, bool scientific = false, bool strip_trailing_zeros = false) noexcept - { - if (precision < 0) precision = 0; - - if (fixed && !scientific) - return emit_fixed_dec_to_chars(first, last, x, precision, strip_trailing_zeros); - - if (scientific && !fixed) - return emit_scientific_to_chars(first, last, x, precision, strip_trailing_zeros); - - const int sig = (precision == 0) ? 1 : precision; - - if (iszero(x)) { - if (first >= last) return { first, false }; - *first = '0'; - return { first + 1, true }; - } - - const f256_s ax = (x.x0 < 0.0) ? -x : x; - bl::default_io_string digits; - int e10 = 0; - if (!detail::_f256::exact_scientific_digits(ax, 1, digits, e10)) { - if (first >= last) return { first, false }; - *first = '0'; - return { first + 1, true }; - } - - if (e10 >= -4 && e10 < sig) { - const int frac = (sig > e10 + 1) ? (sig - (e10 + 1)) : 0; - return emit_fixed_dec_to_chars(first, last, x, frac, strip_trailing_zeros); - } - - return emit_scientific_sig_to_chars(first, last, x, sig, strip_trailing_zeros); + return detail::emit_scientific_digits_to_chars( + first, + last, + neg, + digits.data(), + sig, + e, + strip_trailing_zeros); } struct f256_io_traits { using value_type = f256_s; + using string_type = bl::f256_io_string; + using exact_decimal_traits = detail::_f256::exact_traits; static constexpr int max_parse_order = detail::fltx_max_parse_order; static constexpr int min_parse_order = detail::fltx_min_parse_order; - + static constexpr int limb_count = detail::_f256::exact_traits::limb_count; + static constexpr int significand_bits = detail::_f256::exact_traits::significand_bits; + static constexpr int conversion_significand_bits = detail::_f256::exact_traits::conversion_significand_bits; + static constexpr int max_binary_exponent = 1023; + static constexpr int min_normal_binary_exponent = -1022; + static constexpr int min_binary_exponent = -1074; + static constexpr int max_fixed_integer_digits = 309; + + static constexpr double limb(const value_type& x, int index) noexcept { return detail::_f256::exact_traits::limb(x, index); } static constexpr bool isnan(const value_type& x) noexcept { return bl::isnan(x); } static constexpr bool isinf(const value_type& x) noexcept { return bl::isinf(x); } static constexpr bool iszero(const value_type& x) noexcept { return bl::iszero(x); } - static constexpr bool is_negative(const value_type& x) noexcept { return x.x0 < 0.0; } + static constexpr bool is_negative(const value_type& x) noexcept { return detail::_f256::signbit(x.x0); } static constexpr value_type abs(const value_type& x) noexcept { return (x.x0 < 0.0) ? -x : x; } - static constexpr value_type zero(bool neg = false) noexcept { return neg ? value_type{ -0.0, 0.0, 0.0, 0.0 } : value_type{ 0.0, 0.0, 0.0, 0.0 }; } - static value_type infinity(bool neg = false) noexcept + static constexpr value_type zero(bool neg = false) noexcept { return detail::_f256::signed_zero(neg); } + static constexpr value_type infinity(bool neg = false) noexcept { const value_type inf = std::numeric_limits::infinity(); return neg ? -inf : inf; } static constexpr value_type quiet_nan() noexcept { return std::numeric_limits::quiet_NaN(); } - static constexpr void normalize10(const value_type& x, value_type& m, int& e10) { detail::_f256::normalize10(x, m, e10); } + static constexpr value_type max_finite() noexcept { return std::numeric_limits::max(); } + static constexpr bool needs_nominal_refinement(const value_type& value) noexcept + { +#if BL_FP_BARRIER_ACTIVE + (void)value; + return false; +#else + constexpr int guard_underflow_exponent = + min_binary_exponent + conversion_significand_bits - 1; + return iszero(value) || + detail::fp::absd(value.x0) < + detail::fp::positive_power_of_two(guard_underflow_exponent); +#endif + } static constexpr detail::fltx_char_result to_chars_general(char* first, char* last, const value_type& x, int precision, bool strip_trailing_zeros) { - return to_chars(first, last, x, precision, false, false, strip_trailing_zeros); + return detail::emit_general_decimal_for_traits(first, last, x, precision, strip_trailing_zeros); } static constexpr detail::fltx_char_result to_chars_fixed(char* first, char* last, const value_type& x, int precision, bool strip_trailing_zeros) { - return emit_fixed_dec_to_chars(first, last, x, precision, strip_trailing_zeros); + return detail::emit_exact_fixed_decimal_to_chars( + first, + last, + x, + precision, + strip_trailing_zeros, + iszero(x), + is_negative(x)); + } + + static constexpr detail::fltx_char_result to_chars_default_fixed( + char* first, + char* last, + const value_type& x, + int precision, + int, + int, + bool strip_trailing_zeros) + { + return detail::emit_exact_fixed_decimal_to_chars( + first, + last, + x, + precision, + strip_trailing_zeros, + iszero(x), + is_negative(x)); } static constexpr detail::fltx_char_result to_chars_scientific_frac(char* first, char* last, const value_type& x, int precision, bool strip_trailing_zeros) { - return emit_scientific_to_chars(first, last, x, precision, strip_trailing_zeros); + return detail::emit_scientific_frac_for_traits(first, last, x, precision, strip_trailing_zeros); } static constexpr detail::fltx_char_result to_chars_scientific_sig(char* first, char* last, const value_type& x, int precision, bool strip_trailing_zeros) @@ -489,7 +328,7 @@ namespace detail::_f256 // primitives and kernels static constexpr value_type exact_uint64_to_value(std::uint64_t value, bool neg) { - value_type out = bl::to_f256(value); + value_type out = detail::_f256::integer_to_f256(value); return neg ? -out : out; } @@ -498,71 +337,49 @@ namespace detail::_f256 // primitives and kernels return detail::exact_decimal::compact_decimal_to_value(coeff, dec_exp, neg, out); } - static constexpr value_type exact_decimal_to_value(const detail::fltx_parse_token::coeff_type& coeff, int dec_exp, bool neg) + static constexpr value_type exact_decimal_to_value(const detail::exact_decimal::biguint& coeff, int dec_exp, bool neg) { return detail::exact_decimal::exact_decimal_to_value(coeff, dec_exp, neg); } + + static constexpr value_type nextafter(const value_type& from, const value_type& to) noexcept + { + return detail::_f256_impl::nextafter(from, to); + } + + static constexpr value_type pack_from_significand(const detail::exact_decimal::biguint& q, int e2, bool neg) noexcept + { + return detail::_f256::exact_traits::pack_from_significand(q, e2, neg); + } }; - template - BL_FORCE_INLINE constexpr void to_string_into(String& out, const f256_s& x, int precision, bool fixed = false, bool scientific = false, bool strip_trailing_zeros = false) + [[nodiscard]] BL_MSVC_NOINLINE constexpr bool parse(const char* s, f256_s& out, const char** endptr = nullptr) noexcept { - detail::to_string_into(out, x, precision, fixed, scientific, strip_trailing_zeros); + return detail::parse_flt(s, out, endptr); } } // namespace detail::_f256 - -[[nodiscard]] BL_MSVC_NOINLINE constexpr bool parse_flt256(const char* s, f256_s& out, const char** endptr = nullptr) noexcept -{ - return detail::parse_flt(s, out, endptr); -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s to_f256(const char* s) noexcept -{ - f256_s ret; - if (parse_flt256(s, ret)) - return ret; - return f256_s{ 0.0 }; -} - -[[nodiscard]] BL_FORCE_INLINE constexpr f256_s to_f256(const std::string& s) noexcept -{ - return to_f256(s.c_str()); -} - -template -[[nodiscard]] BL_MSVC_NOINLINE constexpr bl::static_string to_static_string(const f256_s& x, int precision = std::numeric_limits::digits10, bool fixed = false, bool scientific = false, bool strip_trailing_zeros = false) -{ - bl::static_string out; - detail::_f256::to_string_into(out, x, precision, fixed, scientific, strip_trailing_zeros); - return out; -} - -[[nodiscard]] BL_FORCE_INLINE constexpr bl::default_io_string to_static_string(const f256_s& x, int precision = std::numeric_limits::digits10, bool fixed = false, bool scientific = false, bool strip_trailing_zeros = false) -{ - return to_static_string(x, precision, fixed, scientific, strip_trailing_zeros); -} - -[[nodiscard]] BL_FORCE_INLINE std::string to_string(const f256_s& x, int precision = std::numeric_limits::digits10, bool fixed = false, bool scientific = false, bool strip_trailing_zeros = false) +[[nodiscard]] BL_MSVC_NOINLINE constexpr bl::f256_io_string to_static_string( + const f256_s& value, + int precision = std::numeric_limits::max_digits10, + std::ios_base::fmtflags flags = std::ios_base::fmtflags{}) { - const auto text = to_static_string(x, precision, fixed, scientific, strip_trailing_zeros); - return std::string(text.data(), text.size()); + return detail::to_static_string_impl(value, precision, flags); } -[[nodiscard]] BL_FORCE_INLINE std::string to_std_string(const f256_s& x, int precision = std::numeric_limits::digits10, bool fixed = false, bool scientific = false, bool strip_trailing_zeros = false) -{ - return to_string(x, precision, fixed, scientific, strip_trailing_zeros); -} +[[nodiscard]] BL_NO_INLINE std::string to_string( + const f256_s& value, + precision_info precision = std::numeric_limits::max_digits10, + std::ios_base::fmtflags flags = std::ios_base::fmtflags{}); namespace detail::_f256 // primitives and kernels { [[nodiscard]] consteval f256_s parse_qd_literal(const char* text, const char* expected_end) { f256_s out{}; - const char* end = text; - if (!(parse_flt256(text, out, &end) && end == expected_end)) + if (!bl::detail::parse_literal_float_text(text, expected_end, out)) throw "invalid _qd literal"; return out; @@ -586,13 +403,6 @@ namespace literals } // namespace literals -constexpr f256::f256(const char* text) -{ - const char* end = text; - if (!parse_flt256(text, *this, &end)) - throw "invalid f256"; -} - } // namespace bl #endif diff --git a/include/fltx/f256_type.h b/include/fltx/f256_type.h index 5757a8d..d099798 100644 --- a/include/fltx/f256_type.h +++ b/include/fltx/f256_type.h @@ -12,25 +12,7 @@ #include #include "fltx/detail/common_fp.h" -#include "fltx/detail/simd.h" - -#if !defined(BL_F256_ENABLE_SIMD) -# if defined(BL_F256_ENABLE_TRIG_SIMD) -# define BL_F256_ENABLE_SIMD BL_F256_ENABLE_TRIG_SIMD -# elif BL_FLTX_HAS_SSE2 || BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD -# define BL_F256_ENABLE_SIMD 1 -# else -# define BL_F256_ENABLE_SIMD 0 -# endif -#endif - -#if !defined(BL_F256_ENABLE_TRIG_SIMD) -# define BL_F256_ENABLE_TRIG_SIMD BL_F256_ENABLE_SIMD -#endif - -#if BL_F256_ENABLE_SIMD && !(BL_FLTX_HAS_SSE2 || BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) -# error "BL_F256_ENABLE_SIMD requires SSE2, AArch64 NEON, or wasm128 SIMD support." -#endif +#include "fltx/detail/f256_simd_config.h" namespace bl { @@ -55,13 +37,10 @@ namespace detail::_f256 // primitives and kernels using detail::fp::ceil; using detail::fp::integer_fits_exact_double; - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_mul_scalar_fast(const f256_s& r, const f256_s& b, double q) noexcept; - [[nodiscard]] BL_FORCE_INLINE constexpr f256_s sub_mul_scalar_exact(const f256_s& r, const f256_s& b, double q) noexcept; - BL_FORCE_INLINE constexpr bool f256_runtime_simd_enabled() noexcept { - #if BL_F256_ENABLE_SIMD && (BL_FLTX_HAS_NEON || BL_FLTX_HAS_WASM_SIMD) - return !bl::use_constexpr_math(); + #if FLTX_F256_ENABLE_SIMD && (FLTX_HAS_NEON || FLTX_HAS_WASM_SIMD) + return !bl::detail::is_constant_evaluated(); #else return false; #endif @@ -69,8 +48,8 @@ namespace detail::_f256 // primitives and kernels BL_FORCE_INLINE constexpr bool f256_runtime_addsub_simd_enabled() noexcept { - #if BL_F256_ENABLE_SIMD && BL_FLTX_HAS_NEON - return !bl::use_constexpr_math(); + #if FLTX_F256_ENABLE_SIMD && FLTX_HAS_NEON + return !bl::detail::is_constant_evaluated(); #else return false; #endif @@ -78,8 +57,8 @@ namespace detail::_f256 // primitives and kernels BL_FORCE_INLINE constexpr bool f256_runtime_trig_simd_enabled() noexcept { - #if BL_F256_ENABLE_TRIG_SIMD - return !bl::use_constexpr_math(); + #if FLTX_F256_ENABLE_TRIG_SIMD + return !bl::detail::is_constant_evaluated(); #else return false; #endif @@ -87,12 +66,12 @@ namespace detail::_f256 // primitives and kernels BL_FORCE_INLINE constexpr bool f256_runtime_product_simd_enabled() noexcept { - #if BL_F256_ENABLE_SIMD && BL_FLTX_HAS_NEON - return !bl::use_constexpr_math(); - #elif BL_F256_ENABLE_SIMD && BL_FLTX_HAS_WASM_SIMD - return !bl::use_constexpr_math(); - #elif BL_F256_ENABLE_SIMD && BL_FLTX_HAS_SSE2 && (!BL_FLTX_SIMD_USE_FMA_TWO_PROD || BL_FLTX_HAS_X86_FMA) - return !bl::use_constexpr_math(); + #if FLTX_F256_ENABLE_SIMD && FLTX_HAS_NEON + return !bl::detail::is_constant_evaluated(); + #elif FLTX_F256_ENABLE_SIMD && FLTX_HAS_WASM_SIMD + return !bl::detail::is_constant_evaluated(); + #elif FLTX_F256_ENABLE_SIMD && FLTX_HAS_SSE2 && (!FLTX_SIMD_USE_FMA_TWO_PROD || FLTX_HAS_X86_FMA) + return !bl::detail::is_constant_evaluated(); #else return false; #endif @@ -120,7 +99,7 @@ namespace detail::_f256 // primitives and kernels [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_dd(const f256_s& a, dd_scalar b) noexcept; [[nodiscard]] BL_FORCE_INLINE constexpr f256_s div_dd(dd_scalar a, const f256_s& b) noexcept; -#if BL_F256_ENABLE_SIMD +#if FLTX_F256_ENABLE_SIMD namespace simd = bl::detail::simd; #endif @@ -347,7 +326,8 @@ struct f256_s [[nodiscard]] constexpr f256_s operator+() const { return *this; } [[nodiscard]] constexpr f256_s operator-() const noexcept { return f256_s{ -x0, -x1, -x2, -x3 }; } - [[nodiscard]] static constexpr f256_s eps() { return { 3.038581678643134e-64, 0.0, 0.0, 0.0 }; } // ~2^-211 + // Spacing above 1.0 in the public nominal 212-bit model. + [[nodiscard]] static constexpr f256_s eps() { return { 0x1p-211, 0.0, 0.0, 0.0 }; } }; namespace detail::_f256_expr @@ -372,8 +352,6 @@ struct f256 : public f256_s constexpr f256(uint64_t u) noexcept : f256_s{} { static_cast(*this) = static_cast(u); } constexpr f256(int32_t v) noexcept : f256((int64_t)v) {} constexpr f256(uint32_t u) noexcept : f256((int64_t)u) {} - constexpr f256(const char*); - constexpr f256(f128_s f) noexcept; constexpr f256(const f256_s& f) noexcept : f256_s{ f.x0, f.x1, f.x2, f.x3 } {} diff --git a/include/fltx/f32_classification.h b/include/fltx/f32_classification.h index 0b37439..d492025 100644 --- a/include/fltx/f32_classification.h +++ b/include/fltx/f32_classification.h @@ -29,57 +29,39 @@ namespace detail::_f32_impl BL_FORCE_INLINE constexpr bool iszero(float x) noexcept { - return x == 0.0f; + return (std::bit_cast(x) & 0x7fffffffu) == 0; } } // namespace detail::_f32_impl [[nodiscard]] BL_FORCE_INLINE constexpr float abs(float x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f32_impl::fabs(x), - std::abs(x) - ); + return detail::_f32_impl::fabs(x); } [[nodiscard]] BL_FORCE_INLINE constexpr float fabs(float x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f32_impl::fabs(x), - std::fabs(x) - ); + return detail::_f32_impl::fabs(x); } [[nodiscard]] BL_FORCE_INLINE constexpr bool signbit(float x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f32_impl::signbit(x), - std::signbit(x) - ); + return detail::_f32_impl::signbit(x); } [[nodiscard]] BL_FORCE_INLINE constexpr bool isnan(float x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f32_impl::isnan(x), - std::isnan(x) - ); + return detail::_f32_impl::isnan(x); } [[nodiscard]] BL_FORCE_INLINE constexpr bool isinf(float x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f32_impl::isinf(x), - std::isinf(x) - ); + return detail::_f32_impl::isinf(x); } [[nodiscard]] BL_FORCE_INLINE constexpr bool isfinite(float x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f32_impl::isfinite(x), - std::isfinite(x) - ); + return detail::_f32_impl::isfinite(x); } [[nodiscard]] BL_FORCE_INLINE constexpr bool iszero(float x) noexcept diff --git a/include/fltx/f32_math.h b/include/fltx/f32_math.h index 229492f..ec92ff3 100644 --- a/include/fltx/f32_math.h +++ b/include/fltx/f32_math.h @@ -10,7 +10,19 @@ #ifndef F32_MATH_INCLUDED #define F32_MATH_INCLUDED +#include "fltx/f64_math.h" #include "fltx/detail/f32_math_basic.h" #include "fltx/detail/f32_math_transcendental.h" +namespace bl +{ + template + requires detail::math::native_nexttoward_target + [[nodiscard]] BL_FORCE_INLINE constexpr float nexttoward(float from, To to) noexcept + { + return bl::nexttoward(from, static_cast(to)); + } + +} // namespace bl + #endif diff --git a/include/fltx/f64_classification.h b/include/fltx/f64_classification.h index 151c7fe..428535e 100644 --- a/include/fltx/f64_classification.h +++ b/include/fltx/f64_classification.h @@ -29,7 +29,7 @@ namespace detail::_f64_impl BL_FORCE_INLINE constexpr bool iszero(double x) noexcept { - return x == 0.0; + return (std::bit_cast(x) & 0x7fffffffffffffffULL) == 0; } BL_FORCE_INLINE constexpr double abs(double x) noexcept @@ -41,55 +41,37 @@ namespace detail::_f64_impl [[nodiscard]] BL_FORCE_INLINE constexpr double abs(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::abs(x), - std::abs(x) - ); + return detail::_f64_impl::abs(x); } [[nodiscard]] BL_FORCE_INLINE constexpr double fabs(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::abs(x), - std::fabs(x) - ); + return detail::_f64_impl::abs(x); } [[nodiscard]] BL_FORCE_INLINE constexpr bool signbit(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::signbit(x), - std::signbit(x) - ); + return detail::_f64_impl::signbit(x); } [[nodiscard]] BL_FORCE_INLINE constexpr bool isnan(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::isnan(x), - std::isnan(x) - ); + return detail::_f64_impl::isnan(x); } [[nodiscard]] BL_FORCE_INLINE constexpr bool isinf(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::isinf(x), - std::isinf(x) - ); + return detail::_f64_impl::isinf(x); } [[nodiscard]] BL_FORCE_INLINE constexpr bool isfinite(double x) noexcept { - BL_CONSTEXPR_RUNTIME_DISPATCH( - detail::_f64_impl::isfinite(x), - std::isfinite(x) - ); + return detail::_f64_impl::isfinite(x); } [[nodiscard]] BL_FORCE_INLINE constexpr bool iszero(double x) noexcept { - return x == 0.0; + return detail::_f64_impl::iszero(x); } [[nodiscard]] BL_FORCE_INLINE constexpr int fpclassify(double x) noexcept diff --git a/include/fltx/f64_math.h b/include/fltx/f64_math.h index 26f84e4..246418d 100644 --- a/include/fltx/f64_math.h +++ b/include/fltx/f64_math.h @@ -10,7 +10,176 @@ #ifndef F64_MATH_INCLUDED #define F64_MATH_INCLUDED +#include "fltx/detail/math_promotion.h" #include "fltx/detail/f64_math_basic.h" #include "fltx/detail/f64_math_transcendental.h" +namespace bl +{ + +#define FLTX_F64_PROMOTED_UNARY(NAME) \ + template \ + requires detail::math::f64_promoted_math_args \ + [[nodiscard]] BL_FORCE_INLINE constexpr auto NAME(T x) \ + { \ + using P = detail::math::promoted_t; \ + return bl::NAME(detail::math::promoted_cast

(x)); \ + } + +#define FLTX_F64_PROMOTED_BINARY(NAME) \ + template \ + requires detail::math::f64_promoted_math_args \ + [[nodiscard]] BL_FORCE_INLINE constexpr auto NAME(T x, U y) \ + { \ + using P = detail::math::promoted_t; \ + return bl::NAME(detail::math::promoted_cast

(x), detail::math::promoted_cast

(y)); \ + } + +#define FLTX_F64_PROMOTED_TERNARY(NAME) \ + template \ + requires detail::math::f64_promoted_math_args \ + [[nodiscard]] BL_FORCE_INLINE constexpr auto NAME(T x, U y, V z) \ + { \ + using P = detail::math::promoted_t; \ + return bl::NAME(detail::math::promoted_cast

(x), detail::math::promoted_cast

(y), detail::math::promoted_cast

(z)); \ + } + +FLTX_F64_PROMOTED_UNARY(abs) +FLTX_F64_PROMOTED_UNARY(fabs) +FLTX_F64_PROMOTED_UNARY(signbit) +FLTX_F64_PROMOTED_UNARY(isnan) +FLTX_F64_PROMOTED_UNARY(isinf) +FLTX_F64_PROMOTED_UNARY(isfinite) +FLTX_F64_PROMOTED_UNARY(iszero) +FLTX_F64_PROMOTED_UNARY(fpclassify) +FLTX_F64_PROMOTED_UNARY(isnormal) + +FLTX_F64_PROMOTED_UNARY(floor) +FLTX_F64_PROMOTED_UNARY(ceil) +FLTX_F64_PROMOTED_UNARY(trunc) +FLTX_F64_PROMOTED_UNARY(round) +FLTX_F64_PROMOTED_UNARY(roundeven) +FLTX_F64_PROMOTED_UNARY(lround) +FLTX_F64_PROMOTED_UNARY(llround) + +FLTX_F64_PROMOTED_BINARY(fmod) +FLTX_F64_PROMOTED_BINARY(remainder) +FLTX_F64_PROMOTED_TERNARY(fma) +FLTX_F64_PROMOTED_BINARY(fmin) +FLTX_F64_PROMOTED_BINARY(fmax) +FLTX_F64_PROMOTED_BINARY(fdim) +FLTX_F64_PROMOTED_BINARY(copysign) + +FLTX_F64_PROMOTED_UNARY(ilogb) +FLTX_F64_PROMOTED_UNARY(logb) +FLTX_F64_PROMOTED_BINARY(nextafter) + +FLTX_F64_PROMOTED_UNARY(exp) +FLTX_F64_PROMOTED_UNARY(exp2) +FLTX_F64_PROMOTED_UNARY(expm1) +FLTX_F64_PROMOTED_UNARY(log) +FLTX_F64_PROMOTED_UNARY(log2) +FLTX_F64_PROMOTED_UNARY(log10) +FLTX_F64_PROMOTED_UNARY(log1p) +FLTX_F64_PROMOTED_UNARY(sqrt) +FLTX_F64_PROMOTED_UNARY(cbrt) +FLTX_F64_PROMOTED_BINARY(hypot) + +FLTX_F64_PROMOTED_UNARY(sin) +FLTX_F64_PROMOTED_UNARY(cos) +FLTX_F64_PROMOTED_UNARY(tan) +FLTX_F64_PROMOTED_UNARY(atan) +FLTX_F64_PROMOTED_BINARY(atan2) +FLTX_F64_PROMOTED_UNARY(asin) +FLTX_F64_PROMOTED_UNARY(acos) + +FLTX_F64_PROMOTED_UNARY(sinh) +FLTX_F64_PROMOTED_UNARY(cosh) +FLTX_F64_PROMOTED_UNARY(tanh) +FLTX_F64_PROMOTED_UNARY(asinh) +FLTX_F64_PROMOTED_UNARY(acosh) +FLTX_F64_PROMOTED_UNARY(atanh) + +FLTX_F64_PROMOTED_UNARY(erf) +FLTX_F64_PROMOTED_UNARY(erfc) +FLTX_F64_PROMOTED_UNARY(lgamma) +FLTX_F64_PROMOTED_UNARY(tgamma) + +FLTX_F64_PROMOTED_BINARY(isunordered) +FLTX_F64_PROMOTED_BINARY(isgreater) +FLTX_F64_PROMOTED_BINARY(isgreaterequal) +FLTX_F64_PROMOTED_BINARY(isless) +FLTX_F64_PROMOTED_BINARY(islessequal) +FLTX_F64_PROMOTED_BINARY(islessgreater) + +#undef FLTX_F64_PROMOTED_TERNARY +#undef FLTX_F64_PROMOTED_BINARY +#undef FLTX_F64_PROMOTED_UNARY + + template + requires detail::math::f64_promoted_math_args + [[nodiscard]] BL_FORCE_INLINE constexpr auto remquo(T x, U y, int* quo) + { + using P = detail::math::promoted_t; + return bl::remquo(detail::math::promoted_cast

(x), detail::math::promoted_cast

(y), quo); + } + + template + requires detail::math::f64_promoted_math_args + [[nodiscard]] BL_FORCE_INLINE constexpr auto ldexp(T x, int exp) + { + using P = detail::math::promoted_t; + return bl::ldexp(detail::math::promoted_cast

(x), exp); + } + + template + requires detail::math::f64_promoted_math_args + [[nodiscard]] BL_FORCE_INLINE constexpr auto scalbn(T x, int exp) + { + using P = detail::math::promoted_t; + return bl::scalbn(detail::math::promoted_cast

(x), exp); + } + + template + requires detail::math::f64_promoted_math_args + [[nodiscard]] BL_FORCE_INLINE constexpr auto scalbln(T x, long exp) + { + using P = detail::math::promoted_t; + return bl::scalbln(detail::math::promoted_cast

(x), exp); + } + + template + requires detail::math::f64_promoted_math_args + [[nodiscard]] BL_FORCE_INLINE constexpr auto frexp(T x, int* exp) + { + using P = detail::math::promoted_t; + return bl::frexp(detail::math::promoted_cast

(x), exp); + } + + template + requires detail::math::f64_promoted_math_args + [[nodiscard]] BL_FORCE_INLINE constexpr auto modf(T x, detail::math::promoted_t* iptr) + { + using P = detail::math::promoted_t; + return bl::modf(detail::math::promoted_cast

(x), iptr); + } + + template + requires detail::math::f64_nexttoward_args + [[nodiscard]] BL_FORCE_INLINE constexpr auto nexttoward(From from, To to) + { + using P = detail::math::promoted_t; + return bl::nexttoward(detail::math::promoted_cast

(from), static_cast(to)); + } + + template + requires detail::math::f64_promoted_math_args + [[nodiscard]] BL_FORCE_INLINE constexpr bool sincos(T x, detail::math::promoted_t& s_out, detail::math::promoted_t& c_out) + { + using P = detail::math::promoted_t; + return bl::sincos(detail::math::promoted_cast

(x), s_out, c_out); + } + +} // namespace bl + #endif diff --git a/include/fltx/format.h b/include/fltx/format.h index 8295a87..801875d 100644 --- a/include/fltx/format.h +++ b/include/fltx/format.h @@ -11,6 +11,7 @@ #define FLTX_FORMAT_INCLUDED #include +#include #include #include #include @@ -126,6 +127,8 @@ namespace bl::detail::format case 'F': case 'g': case 'G': + case 'a': + case 'A': return it; default: throw std::format_error("unsupported fltx format type"); @@ -133,6 +136,21 @@ namespace bl::detail::format } }; + template + struct io_traits_for; + + template<> + struct io_traits_for + { + using type = bl::detail::_f128::f128_io_traits; + }; + + template<> + struct io_traits_for + { + using type = bl::detail::_f256::f256_io_traits; + }; + [[nodiscard]] inline bool has_sign_prefix(const std::string& text) noexcept { return !text.empty() && (text[0] == '-' || text[0] == '+' || text[0] == ' '); @@ -168,27 +186,88 @@ namespace bl::detail::format text.insert(0, pad, spec.fill); } + [[nodiscard]] inline bool is_uppercase_type(char type) noexcept + { + return type >= 'A' && type <= 'Z'; + } + + template + [[nodiscard]] inline std::string format_hex_value_to_string(const Value& value, const standard_format_spec& spec) + { + using Traits = typename io_traits_for::type; + + std::string text; + const bool uppercase = is_uppercase_type(spec.type); + if (const char* special = special_text(value, uppercase)) [[unlikely]] + { + text = special; + } + else + { + const int precision = spec.precision >= 0 ? spec.precision : -1; + const bool precision_specified = spec.precision >= 0; + text.resize(bl::detail::format_capacity( + precision, + bl::detail::format_kind::hex_float)); + + const auto result = bl::detail::emit_hex_float_to_chars( + text.data(), + text.data() + text.size(), + value, + true, + precision, + precision_specified, + !precision_specified); + + if (!result.ok) + throw std::format_error("unable to format fltx hexfloat value"); + + text.resize(static_cast(result.ptr - text.data())); + if (spec.alternate) + bl::detail::ensure_decimal_point(text); + } + + bl::detail::apply_stream_decorations(text, spec.sign == '+', uppercase); + if (spec.sign == ' ' && !has_sign_prefix(text)) + text.insert(0, 1, ' '); + return text; + } + template [[nodiscard]] inline std::string format_value_to_string(const Value& value, const standard_format_spec& spec) { - const char lower_type = (spec.type >= 'A' && spec.type <= 'Z') + const char lower_type = is_uppercase_type(spec.type) ? static_cast(spec.type + ('a' - 'A')) : spec.type; - const bool fixed = lower_type == 'f'; - const bool scientific = lower_type == 'e'; + if (lower_type == 'a') + { + std::string text = format_hex_value_to_string(value, spec); + apply_padding(text, spec); + return text; + } + + std::ios_base::fmtflags flags{}; + if (lower_type == 'f') + flags |= std::ios_base::fixed; + else if (lower_type == 'e') + flags |= std::ios_base::scientific; + + if (spec.alternate) + flags |= std::ios_base::showpoint; + if (spec.sign == '+') + flags |= std::ios_base::showpos; + if (is_uppercase_type(spec.type)) + flags |= std::ios_base::uppercase; + const bool explicit_general = lower_type == 'g'; + const bool explicit_float_format = lower_type == 'f' || lower_type == 'e'; + const bool precision_defaults_to_six = explicit_general || explicit_float_format; const int precision = spec.precision >= 0 ? spec.precision - : (explicit_general || fixed || scientific ? 6 : std::numeric_limits::max_digits10); - const bool strip_trailing_zeros = !spec.alternate && !fixed && !scientific; - - std::string text = bl::to_std_string(value, precision, fixed, scientific, strip_trailing_zeros); - - if (spec.alternate && !bl::isnan(value) && !bl::isinf(value)) - detail::ensure_decimal_point(text); + : (precision_defaults_to_six ? 6 : std::numeric_limits::max_digits10); - detail::apply_stream_decorations(text, spec.sign == '+', spec.type >= 'A' && spec.type <= 'Z'); + std::string text = bl::to_string(value, precision, flags); if (spec.sign == ' ' && (text.empty() || text[0] != '-')) text.insert(0, 1, ' '); diff --git a/include/fltx/io.h b/include/fltx/io.h index 2e9b42e..800b217 100644 --- a/include/fltx/io.h +++ b/include/fltx/io.h @@ -1,5 +1,5 @@ /** - * fltx/io.h - Convenience include for fltx limits, numbers, string, and stream support. + * fltx/io.h - Convenience include for fltx limits, string, and stream support. * * Copyright (c) 2026 William Hemsworth * @@ -11,7 +11,6 @@ #define FLTX_IO_INCLUDED #include "fltx/limits.h" -#include "fltx/numbers.h" #include "fltx/charconv.h" #include "fltx/string.h" #include "fltx/stream.h" diff --git a/include/fltx/random.h b/include/fltx/random.h index 70375c3..d29cd1a 100644 --- a/include/fltx/random.h +++ b/include/fltx/random.h @@ -219,6 +219,68 @@ namespace detail::random return value; } + template + inline constexpr bool extended_limb_canonical_v = + std::same_as, f128_s> || + std::same_as, f128> || + std::same_as, f256_s> || + std::same_as, f256>; + + template + [[nodiscard]] BL_FORCE_INLINE constexpr std::uint64_t canonical_limb_bits(URBG& g) noexcept + { + using result_type = typename URBG::result_type; + + constexpr int limb_bits = std::numeric_limits::digits; + constexpr result_type inclusive_range = URBG::max() - URBG::min(); + constexpr int result_digits = std::numeric_limits::digits; + + if constexpr (result_digits >= limb_bits && is_all_low_bits_set(inclusive_range)) + { + constexpr result_type mask = word_mask(limb_bits); + const result_type sample = static_cast(g() - URBG::min()); + return static_cast((sample >> (result_digits - limb_bits)) & mask); + } + else + { + return uniform_bits(g, limb_bits); + } + } + + template + [[nodiscard]] BL_FORCE_INLINE constexpr RealType generate_canonical_from_double_limbs(URBG& g) noexcept + { + using real_type = std::remove_cv_t; + static_assert(extended_limb_canonical_v); + + constexpr int limb_bits = std::numeric_limits::digits; + const double x0 = detail::fp::ldexp_limb(static_cast(canonical_limb_bits(g)), -limb_bits); + const double x1 = detail::fp::ldexp_limb(static_cast(canonical_limb_bits(g)), -2 * limb_bits); + + if constexpr (std::same_as) + { + return f128_s{ x0, x1 }; + } + else if constexpr (std::same_as) + { + return f128{ x0, x1 }; + } + else + { + const double x2 = detail::fp::ldexp_limb(static_cast(canonical_limb_bits(g)), -3 * limb_bits); + const double x3 = detail::fp::ldexp_limb(static_cast(canonical_limb_bits(g)), -4 * limb_bits); + + if constexpr (std::same_as) + { + return f256_s{ x0, x1, x2, x3 }; + } + else + { + return f256{ x0, x1, x2, x3 }; + } + } + } + template [[nodiscard]] BL_FORCE_INLINE constexpr UInt uniform_unsigned(URBG& g, UInt inclusive_max) noexcept { @@ -825,6 +887,12 @@ namespace detail::random (requested_bits + static_cast(bits_per_call) - 1) / static_cast(bits_per_call); + if constexpr (detail::random::extended_limb_canonical_v && + requested_bits == static_cast(traits::digits)) + { + return detail::random::generate_canonical_from_double_limbs(g); + } + const RealType range = detail::random::real_from_uint(URBG::max()) - detail::random::real_from_uint(URBG::min()) + @@ -920,6 +988,12 @@ namespace detail::random [[nodiscard]] BL_FORCE_INLINE constexpr result_type operator()(URBG& g, const param_type& _params) noexcept { const result_type u = bl::generate_canonical::digits>(g); + if (_params.a() == detail::random::real_zero() && + _params.b() == detail::random::real_one()) + { + return u; + } + return _params.a() + (_params.b() - _params.a()) * u; } @@ -1081,6 +1155,58 @@ namespace detail::random param_type params; }; +namespace detail::random +{ + template + requires extended_limb_canonical_v + [[nodiscard]] BL_FORCE_INLINE constexpr RealType extended_standard_normal(URBG& g) noexcept + { + // Leva's ratio-of-uniforms method (ACM TOMS 18(4), 1992, + // doi:10.1145/138351.138364). The double-precision quadratic is only + // a conservative sieve: guard bands route boundary cases to the + // decisive acceptance test in the target extended precision. + constexpr double inner_guard = 0.27596; + constexpr double outer_guard = 0.27847; + + uniform_real_distribution unit; + + for (;;) + { + const RealType u = unit(g); + if (u == real_zero()) + continue; + + const RealType v{ + RealType{ 1.7156 } * (unit(g) - RealType{ 0.5 }) + }; + + const double u_approx = static_cast(u); + const double v_approx = static_cast(v); + const double x = u_approx - 0.449871; + const double abs_v = v_approx < 0.0 ? -v_approx : v_approx; + const double y = abs_v + 0.386595; + const double q = x * x + y * (0.19600 * y - 0.25472 * x); + + if (q < inner_guard) + return RealType{ v / u }; + if (q > outer_guard) + continue; + + const RealType lhs{ v * v }; + const RealType u_squared{ u * u }; + const RealType rhs{ + RealType{ -4.0 } * real_log(u) * u_squared + }; + if (lhs <= rhs) + return RealType{ v / u }; + } + + // MSVC's C++20 constexpr evaluator requires an explicit return even + // though the loop above has no reachable fallthrough. + return {}; + } +} + template class normal_distribution { @@ -1152,34 +1278,46 @@ namespace detail::random template [[nodiscard]] BL_FORCE_INLINE constexpr result_type operator()(URBG& g, const param_type& _params) noexcept { - if (has_saved) + if constexpr (detail::random::extended_limb_canonical_v) { - has_saved = false; - return _params.mean() + _params.stddev() * saved_standard; + const result_type standard = + detail::random::extended_standard_normal(g); + return result_type{ + _params.mean() + _params.stddev() * standard + }; } + else + { + if (has_saved) + { + has_saved = false; + return _params.mean() + _params.stddev() * saved_standard; + } - uniform_real_distribution unit( - -detail::random::real_one(), - detail::random::real_one()); + uniform_real_distribution unit( + -detail::random::real_one(), + detail::random::real_one()); - result_type x{}; - result_type y{}; - result_type radius_squared{}; - do - { - x = unit(g); - y = unit(g); - radius_squared = x * x + y * y; + result_type x{}; + result_type y{}; + result_type radius_squared{}; + do + { + x = unit(g); + y = unit(g); + radius_squared = x * x + y * y; + } + while (radius_squared <= detail::random::real_zero() || + radius_squared >= detail::random::real_one()); + + const result_type multiplier_argument = + (result_type{ -2.0 } * detail::random::real_log(radius_squared)) / radius_squared; + const result_type multiplier = + detail::random::real_sqrt(multiplier_argument); + saved_standard = y * multiplier; + has_saved = true; + return _params.mean() + _params.stddev() * (x * multiplier); } - while (radius_squared <= detail::random::real_zero() || - radius_squared >= detail::random::real_one()); - - const result_type multiplier_argument = - (result_type{ -2.0 } * detail::random::real_log(radius_squared)) / radius_squared; - const result_type multiplier = detail::random::real_sqrt(multiplier_argument); - saved_standard = y * multiplier; - has_saved = true; - return _params.mean() + _params.stddev() * (x * multiplier); } [[nodiscard]] BL_FORCE_INLINE constexpr result_type mean() const noexcept { return params.mean(); } @@ -1202,9 +1340,16 @@ namespace detail::random const normal_distribution& lhs, const normal_distribution& rhs) noexcept { - return lhs.params == rhs.params && - lhs.has_saved == rhs.has_saved && - (!lhs.has_saved || lhs.saved_standard == rhs.saved_standard); + if constexpr (detail::random::extended_limb_canonical_v) + { + return lhs.params == rhs.params; + } + else + { + return lhs.params == rhs.params && + lhs.has_saved == rhs.has_saved && + (!lhs.has_saved || lhs.saved_standard == rhs.saved_standard); + } } [[nodiscard]] BL_FORCE_INLINE friend constexpr bool operator!=( @@ -1244,8 +1389,16 @@ namespace detail::random return is; distribution.params = param_type{ mean, stddev }; - distribution.has_saved = loaded_has_saved; - distribution.saved_standard = loaded_saved; + if constexpr (detail::random::extended_limb_canonical_v) + { + distribution.has_saved = false; + distribution.saved_standard = result_type{}; + } + else + { + distribution.has_saved = loaded_has_saved; + distribution.saved_standard = loaded_saved; + } return is; } @@ -1407,6 +1560,141 @@ namespace detail::random return values; } +namespace detail::random +{ + struct infer_real_type {}; + + template + using clean_t = std::remove_cvref_t; + + template + concept real_distribution_arg_for = + supported_real && + bl::fltx_arithmetic> && + requires(Arg value) + { + static_cast(value); + }; + + template + concept inferred_real_distribution_args = + bl::fltx_arithmetic> && + bl::fltx_arithmetic> && + supported_real>; + + template + concept real_distribution_args = + (std::same_as && inferred_real_distribution_args) || + (real_distribution_arg_for && real_distribution_arg_for); + + template + struct real_distribution_result + { + using type = RealType; + }; + + template + struct real_distribution_result + { + using type = bl::common_float_type_t; + }; + + template + using real_distribution_result_t = typename real_distribution_result::type; +} + + template< + std::size_t Count, + class RealType = detail::random::infer_real_type, + class A, + class B, + uniform_random_bit_generator Engine> + requires detail::random::real_distribution_args + [[nodiscard]] BL_FORCE_INLINE constexpr auto uniform_real_array(A a, B b, Engine engine) + { + using result_type = detail::random::real_distribution_result_t; + return bl::random_array( + engine, + bl::uniform_real_distribution{ + static_cast(a), + static_cast(b) }); + } + + template< + std::size_t Count, + class RealType = detail::random::infer_real_type, + class A, + class B> + requires detail::random::real_distribution_args + [[nodiscard]] BL_FORCE_INLINE constexpr auto uniform_real_array(A a, B b, std::uint64_t seed = 0) + { + return bl::uniform_real_array(a, b, bl::mt19937_64{ seed }); + } + + template< + std::size_t Count, + detail::random::supported_real RealType, + uniform_random_bit_generator Engine> + [[nodiscard]] BL_FORCE_INLINE constexpr auto uniform_real_array(Engine engine) + { + return bl::uniform_real_array( + detail::random::real_zero(), + detail::random::real_one(), + engine); + } + + template + [[nodiscard]] BL_FORCE_INLINE constexpr auto uniform_real_array(std::uint64_t seed = 0) + { + return bl::uniform_real_array(bl::mt19937_64{ seed }); + } + + template< + std::size_t Count, + class RealType = detail::random::infer_real_type, + class Mean, + class Stddev, + uniform_random_bit_generator Engine> + requires detail::random::real_distribution_args + [[nodiscard]] BL_FORCE_INLINE constexpr auto normal_array(Mean mean, Stddev stddev, Engine engine) + { + using result_type = detail::random::real_distribution_result_t; + return bl::random_array( + engine, + bl::normal_distribution{ + static_cast(mean), + static_cast(stddev) }); + } + + template< + std::size_t Count, + class RealType = detail::random::infer_real_type, + class Mean, + class Stddev> + requires detail::random::real_distribution_args + [[nodiscard]] BL_FORCE_INLINE constexpr auto normal_array(Mean mean, Stddev stddev, std::uint64_t seed = 0) + { + return bl::normal_array(mean, stddev, bl::mt19937_64{ seed }); + } + + template< + std::size_t Count, + detail::random::supported_real RealType, + uniform_random_bit_generator Engine> + [[nodiscard]] BL_FORCE_INLINE constexpr auto normal_array(Engine engine) + { + return bl::normal_array( + detail::random::real_zero(), + detail::random::real_one(), + engine); + } + + template + [[nodiscard]] BL_FORCE_INLINE constexpr auto normal_array(std::uint64_t seed = 0) + { + return bl::normal_array(bl::mt19937_64{ seed }); + } + class random_device { public: diff --git a/include/fltx/string.h b/include/fltx/string.h index b690185..a9dcda9 100644 --- a/include/fltx/string.h +++ b/include/fltx/string.h @@ -10,98 +10,81 @@ #ifndef FLTX_STRING_INCLUDED #define FLTX_STRING_INCLUDED +#include #include #include #include "fltx/aliases.h" +#include "fltx/detail/native_float_io.h" #include "fltx/f128_string.h" #include "fltx/f256_string.h" namespace bl { - BL_FORCE_INLINE constexpr bl::default_io_string to_static_string(f32 value, + [[nodiscard]] BL_FORCE_INLINE constexpr bl::f32_io_string to_static_string( + f32 value, int precision = std::numeric_limits::digits10, - bool fixed = false, - bool scientific = false, - bool strip_trailing_zeros = false) + std::ios_base::fmtflags flags = std::ios_base::fmtflags{}) { - return to_static_string((f128)value, precision, fixed, scientific, strip_trailing_zeros); + bl::f32_io_string out; + detail::to_string_into( + out, + value, + precision, + flags + ); + return out; } - BL_FORCE_INLINE constexpr bl::default_io_string to_static_string(f64 value, + [[nodiscard]] BL_FORCE_INLINE constexpr bl::f64_io_string to_static_string( + f64 value, int precision = std::numeric_limits::digits10, - bool fixed = false, - bool scientific = false, - bool strip_trailing_zeros = false) + std::ios_base::fmtflags flags = std::ios_base::fmtflags{}) { - return to_static_string((f128)value, precision, fixed, scientific, strip_trailing_zeros); - } - - BL_FORCE_INLINE std::string to_string(f32 a, - int precision = std::numeric_limits::digits10, - bool fixed = false, - bool scientific = false, - bool strip_trailing_zeros = false) - { - std::string out; - detail::_f128::to_string_into( + bl::f64_io_string out; + detail::to_string_into( out, - f128_s{ static_cast(a), 0.0 }, + value, precision, - fixed, - scientific, - strip_trailing_zeros + flags ); return out; } - BL_FORCE_INLINE std::string to_string(f64 a, - int precision = std::numeric_limits::digits10, - bool fixed = false, - bool scientific = false, - bool strip_trailing_zeros = false) + [[nodiscard]] BL_FORCE_INLINE std::string to_string( + f32 value, + precision_info precision = std::numeric_limits::digits10, + std::ios_base::fmtflags flags = std::ios_base::fmtflags{}) { + const int digits = precision.digits >= 0 ? precision.digits : std::numeric_limits::digits10; std::string out; - detail::_f128::to_string_into( + detail::to_string_into( out, - f128_s{ a, 0.0 }, - precision, - fixed, - scientific, - strip_trailing_zeros + value, + digits, + flags ); + if (detail::should_collapse_fixed_string(precision, flags)) + detail::collapse_fixed_string(out, precision); return out; } - template - std::string to_string_collapsed(T value, int max_precision, int peek_front = 4, int peek_back = 10) + [[nodiscard]] BL_FORCE_INLINE std::string to_string( + f64 value, + precision_info precision = std::numeric_limits::digits10, + std::ios_base::fmtflags flags = std::ios_base::fmtflags{}) { - if (max_precision < 0) max_precision = 0; - if (peek_front < 0) peek_front = 0; - if (peek_back < 0) peek_back = 0; - - peek_front = (peek_front < max_precision) ? peek_front : max_precision; - peek_back = (peek_back < max_precision) ? peek_back : max_precision; - - std::string s = bl::to_string(value, max_precision, true, false); - size_t period_i = s.find('.'); - - if (period_i == std::string::npos) - return s; - - int front_end = (int)period_i + 1 + peek_front; - int back_start = (int)period_i + 1 + (max_precision - peek_back); - - // ensure we're collapsing more than 3 characters, otherwise there's little point - if (back_start <= front_end + 3) - return s; - - std::string ret; - ret += s.substr(0, front_end); - ret += "..."; - ret += s.substr(back_start, peek_back); - - return ret; + std::string out; + const int digits = precision.digits >= 0 ? precision.digits : std::numeric_limits::digits10; + detail::to_string_into( + out, + value, + digits, + flags + ); + if (detail::should_collapse_fixed_string(precision, flags)) + detail::collapse_fixed_string(out, precision); + return out; } } // namespace bl diff --git a/include/fltx/template_dispatch.h b/include/fltx/template_dispatch.h index 9a60dc7..cf9bab9 100644 --- a/include/fltx/template_dispatch.h +++ b/include/fltx/template_dispatch.h @@ -10,11 +10,11 @@ #ifndef FLTX_TEMPLATE_DISPATCH_INCLUDED #define FLTX_TEMPLATE_DISPATCH_INCLUDED #include +#include #include #include #include #include -#include #ifndef BL_FORCE_INLINE #if defined(_MSC_VER) @@ -26,71 +26,60 @@ #endif #endif -/// ────────── usage: free function / local method ────────── +/// Usage: free function / local method /// -/// format: -/// -/// bl_table_invoke( // real template types first -/// bl_dispatch_table(func, runtime_arg1, runtime_arg2), // arg-1: dispatch table -/// FloatType::F32, MyEnum::FOO, (MyEnum)m_bar // arg-N: mapped types (e.g. FloatType) THEN template non-types +/// bl_table_invoke( +/// bl_dispatch_table(testFunc, runtime_arg), +/// bl_enum_type(FloatType::F32), // maps the enum value to a template type +/// true // maps the bool to a template non-type /// ); /// -/// template -/// void testFunc(bool B) -/// { -/// T1 x = 5; -/// T2 y = 5; -/// } -/// -/// template -/// void MyClass::testMethod(bool B) -/// { -/// T1 x = 5; -/// T2 y = 5; -/// } -/// -/// void MyClass::foo() -/// { -/// bl_table_invoke( bl_dispatch_table(testFunc, true) ); -/// bl_table_invoke( bl_dispatch_table(testFunc, true), FloatType::F32, FloatType::F128 ); -/// bl_table_invoke( bl_dispatch_table(testFunc, true), FloatType::F128); -/// -/// // local method -/// bl_table_invoke( bl_dispatch_table(testMethod, true) ); -/// bl_table_invoke( bl_dispatch_table(testMethod, true), FloatType::F32, FloatType::F128 ); -/// bl_table_invoke( bl_dispatch_table(testMethod, true), FloatType::F128 ); -/// } -/// +/// bl_table_invoke( +/// bl_dispatch_table(testFunc, runtime_arg), +/// bl_enum_type(FloatType::F128) +/// ); /// -/// ────────── usage: targetted method ────────── +/// Raw bool/enums dispatch as template non-type constants. +/// Use bl_enum_type(value) when an enum value maps to a type via bl_enum_type_map. +/// Use bl_type when a template type is already known at compile time. /// -/// bl_table_invoke( bl_dispatch_table_memfn(obj, MyClass::testMethod, arg1, arg2), template_arg1, template_arg2 ); +/// Usage: targeted method /// +/// bl_table_invoke( +/// bl_dispatch_table_memfn(obj, MyClass::testMethod, arg1, arg2), +/// bl_enum_type(template_arg1), +/// template_arg2 +/// ); + /// -// ───────────────────────────────────────────────────────────────────────────── +// ----------------------------------------------------------------------------- // dispatch domain traits // // by default, enums are treated as a dense domain [0, E::COUNT] -// you may specialize enum_domain_traits to +// you may specialize bl_enum_domain_traits to // - shrink the domain (e.g. a subset) // - remap arbitrary enum values to a dense index // // this keeps "COUNT bigger than last declared enumerator" tricks working // (e.g. bitmask enums), while allowing explicit shrinking elsewhere -// ───────────────────────────────────────────────────────────────────────────── +// ----------------------------------------------------------------------------- -template -struct is_dispatch_arg : std::bool_constant || - std::is_same_v, bool>> {}; +namespace bl::detail +{ + template + struct is_dispatch_arg : std::bool_constant || + std::is_same_v, bool>> {}; -template -inline constexpr bool is_dispatch_arg_v = is_dispatch_arg::value; + template + inline constexpr bool is_dispatch_arg_v = is_dispatch_arg::value; + +} // namespace bl::detail template -struct enum_domain_traits +struct bl_enum_domain_traits { - static_assert(std::is_enum_v, "enum_domain_traits requires enum E"); + static_assert(std::is_enum_v, "bl_enum_domain_traits requires enum E"); static constexpr std::size_t size = static_cast(E::COUNT); @@ -127,7 +116,7 @@ struct enum_domain_traits }; template<> -struct enum_domain_traits +struct bl_enum_domain_traits { static constexpr std::size_t size = 2; @@ -144,9 +133,9 @@ struct enum_domain_traits // helper for sparse/subset domains template -struct enum_domain_values +struct bl_enum_domain_values { - static_assert(std::is_enum_v, "enum_domain_values requires enum E"); + static_assert(std::is_enum_v, "bl_enum_domain_values requires enum E"); static constexpr std::size_t size = sizeof...(Vs); static constexpr std::array values = { Vs... }; @@ -183,11 +172,11 @@ struct enum_domain_values } }; -template -inline constexpr std::size_t domain_size_v = enum_domain_traits>::size; - -namespace template_dispatch_detail +namespace bl::detail { + template + inline constexpr std::size_t dispatch_domain_size_v = bl_enum_domain_traits>::size; + template struct type_list {}; @@ -205,29 +194,29 @@ namespace template_dispatch_detail using default_constant_t = std::conditional_t< std::is_same_v, bool>, std::integral_constant, - std::integral_constant, enum_domain_traits>::value(0)> + std::integral_constant, bl_enum_domain_traits>::value(0)> >; -} // namespace template_dispatch_detail +} // namespace bl::detail -// ───────────────────────────────────────────────────────────────────────────── +// ----------------------------------------------------------------------------- // enum => type mapping // -// specialize enum_type_map to map a specific enum value V to a type -// used by enum_type(...) -// ───────────────────────────────────────────────────────────────────────────── +// specialize bl_enum_type_map to map a specific enum value V to a type +// used by bl_enum_type(...) +// ----------------------------------------------------------------------------- template -struct enum_type_map; +struct bl_enum_type_map; template -using enum_type_map_t = typename enum_type_map::type; +using bl_enum_type_map_t = typename bl_enum_type_map::type; -// ───────────────────────────────────────────────────────────────────────────── +// ----------------------------------------------------------------------------- // type selector tags -// ───────────────────────────────────────────────────────────────────────────── +// ----------------------------------------------------------------------------- -namespace bl +namespace bl::detail { template struct type_tag { using type = T; }; @@ -248,31 +237,31 @@ namespace bl return mapped_enum{ v }; } -} // namespace bl + template + struct is_type_tag : std::false_type {}; -template -struct is_type_tag : std::false_type {}; + template + struct is_type_tag> : std::true_type {}; -template -struct is_type_tag> : std::true_type {}; + template + inline constexpr bool is_type_tag_v = is_type_tag>::value; -template -inline constexpr bool is_type_tag_v = is_type_tag>::value; + template + struct is_mapped_enum : std::false_type {}; -template -struct is_mapped_enum : std::false_type {}; + template + struct is_mapped_enum> : std::true_type {}; -template -struct is_mapped_enum> : std::true_type {}; + template + inline constexpr bool is_mapped_enum_v = is_mapped_enum>::value; -template -inline constexpr bool is_mapped_enum_v = is_mapped_enum>::value; +} // namespace bl::detail -// ───────────────────────────────────────────────────────────────────────────── -// enum_expandN maps runtime enum values to types using enum_type_map + enum_domain_traits -// ───────────────────────────────────────────────────────────────────────────── +// ----------------------------------------------------------------------------- +// enum_expandN maps runtime enum values to types using bl_enum_type_map + bl_enum_domain_traits +// ----------------------------------------------------------------------------- -namespace template_dispatch_detail +namespace bl::detail { template struct enum_expand_step; @@ -289,27 +278,27 @@ namespace template_dispatch_detail template struct enum_expand_step, E, More...> { - using Ret = decltype(std::declval().template operator()::value(0)>>()); + using Ret = decltype(std::declval().template operator()::value(0)>>()); using Fn = Ret(*)(Cont&, More...); template static BL_FORCE_INLINE Ret entry(Cont& cont, More... rest) { - using Mapped = enum_type_map_t::value(I)>; + using Mapped = bl_enum_type_map_t::value(I)>; return enum_expand_step, More...>::invoke(cont, rest...); } template static consteval auto build(std::index_sequence) { - return std::array::size>{ &entry... }; + return std::array::size>{ &entry... }; } - static constexpr auto table = build(std::make_index_sequence::size>{}); + static constexpr auto table = build(std::make_index_sequence::size>{}); static BL_FORCE_INLINE decltype(auto) invoke(Cont& cont, E v0, More... rest) { - return table[enum_domain_traits::index(v0)](cont, rest...); + return table[bl_enum_domain_traits::index(v0)](cont, rest...); } }; @@ -319,26 +308,26 @@ namespace template_dispatch_detail return enum_expand_step::invoke(cont, xs...); } -} // namespace template_dispatch_detail + template + BL_FORCE_INLINE decltype(auto) enum_expandN(Cont& cont, More... xs) + { + static_assert(std::is_enum_v, "E must be an enum"); + return enum_expandN_impl>(cont, xs...); + } -template -BL_FORCE_INLINE decltype(auto) enum_expandN(Cont& cont, More... xs) -{ - static_assert(std::is_enum_v, "E must be an enum"); - return template_dispatch_detail::enum_expandN_impl>(cont, xs...); -} +} // namespace bl::detail -// ───────────────────────────────────────────────────────────────────────────── +// ----------------------------------------------------------------------------- // stepwise 1-D dispatch for value domains (bool + enums) -// ───────────────────────────────────────────────────────────────────────────── +// ----------------------------------------------------------------------------- -namespace template_dispatch_detail +namespace bl::detail { template using domain_constant_t = std::conditional_t< std::is_same_v, bool>, std::integral_constant, - std::integral_constant, enum_domain_traits>::value(I)> + std::integral_constant, bl_enum_domain_traits>::value(I)> >; template @@ -378,41 +367,41 @@ namespace template_dispatch_detail template static consteval auto build(std::index_sequence) { - return std::array::size>{ &entry... }; + return std::array::size>{ &entry... }; } - static constexpr auto table = build(std::make_index_sequence::size>{}); + static constexpr auto table = build(std::make_index_sequence::size>{}); static BL_FORCE_INLINE Ret invoke(Fun& func, First v0, Rest... rest) { - return table[enum_domain_traits::index(v0)](func, rest...); + return table[bl_enum_domain_traits::index(v0)](func, rest...); } }; -} // namespace template_dispatch_detail + template + requires ((is_dispatch_arg_v> && ...)) + decltype(auto) table_invoke_values(F& func, Es... vs) + { + using Fun = std::decay_t; + using RetProbe = decltype(func.template operator()(default_constant_t>{}...)); + return step_dispatch, type_list<>, std::remove_cvref_t...>::invoke( + func, + static_cast>(vs)...); + } -template - requires ((is_dispatch_arg_v> && ...)) -decltype(auto) _table_invoke(F& func, Es... vs) -{ - using Fun = std::decay_t; - using RetProbe = decltype(func.template operator()(template_dispatch_detail::default_constant_t>{}...)); - return template_dispatch_detail::step_dispatch, template_dispatch_detail::type_list<>, std::remove_cvref_t...>::invoke( - func, - static_cast>(vs)...); -} +} // namespace bl::detail -// ───────────────────────────────────────────────────────────────────────────── +// ----------------------------------------------------------------------------- // public table_invoke parses leading type selectors, then dispatch domains // // supported leading type selectors -// - bl::type_tag (bl::type) -// - bl::mapped_enum (bl::enum_type(v)) +// - bl_type +// - bl_enum_type(v) // // after the first non-type-selector, all remaining args must be dispatch args -// ───────────────────────────────────────────────────────────────────────────── +// ----------------------------------------------------------------------------- -namespace template_dispatch_detail +namespace bl::detail { template struct table_invoke_parse; @@ -422,23 +411,23 @@ namespace template_dispatch_detail { static BL_FORCE_INLINE decltype(auto) invoke(Fun& func) { - return _table_invoke(func); + return table_invoke_values(func); } }; template - struct table_invoke_parse, bl::type_tag, Rest...> + struct table_invoke_parse, bl::detail::type_tag, Rest...> { - static BL_FORCE_INLINE decltype(auto) invoke(Fun& func, bl::type_tag, Rest... rest) + static BL_FORCE_INLINE decltype(auto) invoke(Fun& func, bl::detail::type_tag, Rest... rest) { return table_invoke_parse, Rest...>::invoke(func, rest...); } }; template - struct table_invoke_parse, bl::mapped_enum, Rest...> + struct table_invoke_parse, bl::detail::mapped_enum, Rest...> { - static BL_FORCE_INLINE decltype(auto) invoke(Fun& func, bl::mapped_enum me, Rest... rest) + static BL_FORCE_INLINE decltype(auto) invoke(Fun& func, bl::detail::mapped_enum me, Rest... rest) { auto cont = [&]() -> decltype(auto) { return table_invoke_parse, Rest...>::invoke(func, rest...); @@ -454,46 +443,36 @@ namespace template_dispatch_detail { static_assert(is_dispatch_arg_v>, "type selectors must come before dispatch args"); static_assert(((is_dispatch_arg_v> && ...)), "all trailing args must be dispatch args"); - return _table_invoke( + return table_invoke_values( func, static_cast>(first), static_cast>(rest)...); } }; -} // namespace template_dispatch_detail - -namespace bl -{ - template - decltype(auto) table_invoke(F&& f, Args... args) - { - using Fun = std::decay_t; - Fun& func = const_cast(static_cast(f)); - return template_dispatch_detail::table_invoke_parse, Args...>::invoke(func, args...); - } - -} // namespace bl +} // namespace bl::detail template BL_FORCE_INLINE decltype(auto) bl_table_invoke(F&& f, Args... args) { - return bl::table_invoke(std::forward(f), args...); + using Fun = std::decay_t; + Fun& func = const_cast(static_cast(f)); + return bl::detail::table_invoke_parse, Args...>::invoke(func, args...); } template -inline constexpr bl::type_tag bl_type{}; +inline constexpr bl::detail::type_tag bl_type{}; template -BL_FORCE_INLINE constexpr bl::mapped_enum bl_enum_type(E v) +BL_FORCE_INLINE constexpr bl::detail::mapped_enum bl_enum_type(E v) { - return bl::enum_type(v); + return bl::detail::enum_type(v); } -// ───────────────────────────────────────────────────────────────────────────── +// ----------------------------------------------------------------------------- // macro helpers -// ───────────────────────────────────────────────────────────────────────────── +// ----------------------------------------------------------------------------- #define bl_dispatch_table(func, ...) \ ([&] (auto... Cs) -> decltype(auto) { \ @@ -528,23 +507,23 @@ BL_FORCE_INLINE constexpr bl::mapped_enum bl_enum_type(E v) }) #define bl_map_enum_to_type(EnumValue, T) \ - template<> struct enum_type_map { using type = T; } + template<> struct bl_enum_type_map { using type = T; } -// Debug helpers for dispatch domain sizes -namespace bl::dispatch_table_info +// dispatch table size helpers +namespace bl::detail { template struct mapped_underlying; template - struct mapped_underlying> { using type = E; }; + struct mapped_underlying> { using type = E; }; template using mapped_underlying_t = typename mapped_underlying>::type; template - consteval std::size_t arg_domain_size() + consteval std::size_t dispatch_arg_domain_size_type() { using A = std::remove_cvref_t; @@ -555,11 +534,11 @@ namespace bl::dispatch_table_info else if constexpr (is_mapped_enum_v) { using E = mapped_underlying_t; - return domain_size_v; + return dispatch_domain_size_v; } else if constexpr (is_dispatch_arg_v) { - return domain_size_v; + return dispatch_domain_size_v; } else { @@ -568,22 +547,72 @@ namespace bl::dispatch_table_info } template - consteval std::size_t variant_count_types() + consteval std::size_t dispatch_table_variant_count_types() { - return (std::size_t{ 1 } * ... * arg_domain_size()); + return (std::size_t{ 1 } * ... * dispatch_arg_domain_size_type()); } template - void print_from_args(const char* label, Args&&...) + consteval std::array dispatch_table_domain_sizes_types() { - constexpr std::size_t sizes[] = { arg_domain_size>()... }; - constexpr std::size_t total = variant_count_types...>(); + return { dispatch_arg_domain_size_type()... }; + } + +} // namespace bl::detail + +template +[[nodiscard]] constexpr std::size_t bl_dispatch_arg_domain_size(const Arg&) noexcept +{ + return bl::detail::dispatch_arg_domain_size_type(); +} - std::printf("%s: %zu variants\n", label ? label : "dispatch", total); - for (std::size_t i = 0; i < sizeof...(Args); ++i) - std::printf(" arg[%zu] domain = %zu\n", i, sizes[i]); +template +[[nodiscard]] constexpr std::size_t bl_enum_type_domain_size(const Arg& arg) noexcept +{ + return bl_dispatch_arg_domain_size(arg); +} + +template +[[nodiscard]] constexpr std::size_t bl_dispatch_table_variant_count(const Args&...) noexcept +{ + return bl::detail::dispatch_table_variant_count_types(); +} + +template +[[nodiscard]] constexpr std::size_t bl_table_variants_count(const Args&... args) noexcept +{ + return bl_dispatch_table_variant_count(args...); +} + +template +[[nodiscard]] constexpr std::array bl_dispatch_table_domain_sizes(const Args&...) noexcept +{ + return bl::detail::dispatch_table_domain_sizes_types(); +} + +template +[[nodiscard]] std::string bl_dispatch_table_report(const char* label, const Args&... args) +{ + const auto sizes = bl_dispatch_table_domain_sizes(args...); + const auto total = bl_dispatch_table_variant_count(args...); + + std::string report; + report.reserve(48 + sizes.size() * 24); + report += label ? label : "dispatch"; + report += ": "; + report += std::to_string(total); + report += " variants\n"; + + for (std::size_t i = 0; i < sizes.size(); ++i) + { + report += " arg["; + report += std::to_string(i); + report += "] domain = "; + report += std::to_string(sizes[i]); + report += "\n"; } -} // namespace bl::dispatch_table_info + return report; +} #endif diff --git a/include/fltx/traits.h b/include/fltx/traits.h index 83cf791..1e948ea 100644 --- a/include/fltx/traits.h +++ b/include/fltx/traits.h @@ -10,6 +10,7 @@ #ifndef FLTX_TRAITS_INCLUDED #define FLTX_TRAITS_INCLUDED #include +#include #include #include "fltx/aliases.h" @@ -41,14 +42,79 @@ namespace bl template inline constexpr bool is_arithmetic_v = fltx_arithmetic; template inline constexpr bool is_integral_v = std::is_integral_v; - enum struct FloatType : int { F32, F64, F128, F256, COUNT }; - static inline const char* FloatTypeNames[(int)FloatType::COUNT] = { - "F32", - "F64", - "F128", - "F256" + template + inline constexpr int fltx_precision_rank_v = + fltx_f256> ? 5 : + fltx_f128> ? 4 : + std::same_as, long double> ? 3 : + (std::same_as, f64> || + std::is_integral_v>) ? 2 : + std::same_as, f32> ? 1 : 0; + + namespace detail::traits + { + template + using clean_t = std::remove_cvref_t; + + template + [[nodiscard]] consteval int max_precision_rank() noexcept + { + int rank = 0; + ((rank = rank < fltx_precision_rank_v ? fltx_precision_rank_v : rank), ...); + return rank; + } + + template + struct common_float_type_impl + { + static_assert(sizeof...(Ts) > 0, + "bl::common_float_type_t requires at least one type."); + static_assert((fltx_arithmetic> && ...), + "bl::common_float_type_t requires arithmetic or fltx extended floating-point types."); + static_assert(((fltx_precision_rank_v != 0) && ...), + "bl::common_float_type_t does not support one of these arithmetic types."); + + static constexpr int rank = max_precision_rank(); + using type = + std::conditional_t>>>; + }; + + } // namespace detail::traits + + template + struct common_float_type + { + using type = typename detail::traits::common_float_type_impl::type; }; + template + using common_float_type_t = typename common_float_type::type; + + enum struct FloatType : int + { + F32, + F64, + F128, + F256, + COUNT + }; + + [[nodiscard]] constexpr std::string_view to_string(FloatType type) noexcept + { + switch (type) + { + case FloatType::F32: return "f32"; + case FloatType::F64: return "f64"; + case FloatType::F128: return "f128"; + case FloatType::F256: return "f256"; + default: return "unknown"; + } + } + } // namespace bl #endif diff --git a/res/metrics/browser_bench.html b/res/metrics/browser_bench.html deleted file mode 100644 index 8d8d66d..0000000 --- a/res/metrics/browser_bench.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - fltx browser benchmarks - - - -

-

fltx browser benchmarks

- -
- - - - -
- -

- -
-
-
- -

-  
- - - - diff --git a/res/metrics/build_table.py b/res/metrics/build_table.py deleted file mode 100644 index d153308..0000000 --- a/res/metrics/build_table.py +++ /dev/null @@ -1,942 +0,0 @@ -#!/usr/bin/env python3 -"""Collect metrics CSV files into one combined bl::f128/bl::f256 table.""" - -from __future__ import annotations - -import argparse -import csv -import html -import math -import re -from dataclasses import dataclass -from pathlib import Path -from typing import Iterable - - -METRICS_FILE_RE = re.compile(r"(?P.+)_(?Pf128|f256)\.csv$", re.IGNORECASE) - -TABLE_TITLE = "fltx metrics" -TABLE_SUBTITLE = "Nanoseconds per iteration for bl::f128/bl::f256 metrics, colored by speed ratio vs the stronger available reference." - -FP_TYPE_ORDER = {"f128": 0, "f256": 1} -FP_TYPE_LABELS = {"f128": "bl::f128", "f256": "bl::f256"} - -PLATFORM_ORDER = { - "windows": 0, - "linux": 1, - "macos": 2, - "wasm32": 3, -} -PLATFORM_LABELS = { - "windows": "Windows", - "linux": "Linux", - "macos": "MacOS", - "wasm32": "WebAssembly", -} - -COMPILER_ORDER = { - "msvc": 0, - "mingw": 1, - "gcc": 2, - "clang": 3, - "appleclang": 4, - "nodejs": 5, - "node": 5, - "chrome": 6, - "browser": 6, - "wasm32": 7, -} -COMPILER_LABELS = { - "msvc": "MSVC", - "mingw": "MinGW", - "gcc": "GCC", - "clang": "Clang", - "appleclang": "AppleClang", - "nodejs": "Node.js", - "node": "Node.js", - "chrome": "Chrome", - "browser": "Chrome", - "wasm32": "Wasm32", -} - -HEADER_BG = "#3B4B63" -PLATFORM_HEADER_BG = "#475569" -SUBHEADER_BG = "#64748B" -GROUP_BG = "#C9CDD6" -GRID = "#D1D5DB" -TEXT = "#111827" -MUTED = "#4B5563" -WHITE = "#FFFFFF" -PAGE_BG = "#F5F7FB" -TYPE_GAP_WIDTH = 16 -FUNCTION_COLUMN_MIN_WIDTH = 210 -FUNCTION_COLUMN_MAX_WIDTH = 720 -FUNCTION_COLUMN_CHAR_WIDTH = 8 -FUNCTION_COLUMN_PADDING = 34 -FUNCTION_COLUMN_WIDTH_SCALE = 0.75 -RATIO_COLOR_STOPS: tuple[tuple[float, str], ...] = ( - (0.10, "#FF0000"), - (0.45, "#FA5B11"), - (0.55, "#F19A51"), - (0.97, "#D7DA81"), - (1.01, "#90EA86"), - (2.00, "#74D673"), - (3.00, "#58CD6B"), - (4.00, "#40C564"), - (8.00, "#0DB454"), - (20.00, "#009D4A"), -) -NATIVE_ARITHMETIC_GROUP = "Arithmetic" -NATIVE_ARITHMETIC_LABELS = {"add", "subtract", "multiply", "divide"} -MIXED_WORKLOADS_GROUP = "Mixed Workloads" -LEGACY_MIXED_WORKLOADS_GROUPS = {"Mixed workloads"} -LEGACY_HIDDEN_GROUPS = {"Mandelbrot"} -ARITHMETIC_GROUP_RE = re.compile(r"^f(?P128|256) <-> (?Pf128|f256|f64|f32|i64|i32)$") -PRIMARY_METRICS_GROUP = "Primary" - - -@dataclass(frozen=True) -class ColumnKey: - fp_type: str - platform: str - compiler: str - - -@dataclass -class BenchmarkCell: - ns_per_iter: float | None = None - reference_ns_per_iter: float | None = None - ratio: float | None = None - reference_name: str | None = None - - -@dataclass -class BenchmarkTable: - columns: list[ColumnKey] - groups: list[str] - rows_by_group: dict[str, list[str]] - cells: dict[tuple[str, str, ColumnKey], BenchmarkCell] - - -def normalize_key(value: str) -> str: - return ( - value.strip() - .replace("-", "") - .replace("_", "") - .replace(".", "") - .replace("(", "") - .replace(")", "") - .replace(" ", "") - .lower() - ) - - -def platform_key(path: Path, compiler: str = "") -> str: - key = normalize_key(path.parent.name) - if key in {"mac", "darwin", "osx"}: - return "macos" - if key in { - "browser", - "chrome", - "emscripten", - "node", - "nodejs", - "wasm", - "wasm32", - "wasm32browser", - "wasm32chrome", - "wasm32node", - "wasm32nodejs", - "wasmbrowser", - "wasmchrome", - "wasmnode", - "wasmnodejs", - "web", - }: - return "wasm32" - return key - - -def platform_label(key: str) -> str: - return PLATFORM_LABELS.get(key, key[:1].upper() + key[1:]) - - -def compiler_key(value: str, platform: str = "") -> str: - key = normalize_key(value) - if platform == "wasm32": - if key in {"clang", "emcc", "emscripten", "emscriptennode", "emscriptennodejs", "node", "nodejs"}: - return "nodejs" - if key in {"browser", "chrome", "emscriptenbrowser", "emscriptenchrome"}: - return "chrome" - if key in {"wasm", "wasm32"}: - return "wasm32" - return key - - -def fp_type_label(key: str) -> str: - return FP_TYPE_LABELS.get(key, key) - - -def compiler_label(key: str) -> str: - return COMPILER_LABELS.get(key, key) - - -def column_sort_key(column: ColumnKey) -> tuple[int, str, int, str, int, str]: - return ( - FP_TYPE_ORDER.get(column.fp_type, 100), - fp_type_label(column.fp_type).lower(), - PLATFORM_ORDER.get(column.platform, 100), - platform_label(column.platform).lower(), - COMPILER_ORDER.get(column.compiler, 100), - compiler_label(column.compiler).lower(), - ) - - -def find_column(fieldnames: Iterable[str], *candidates: str) -> str | None: - field_map = {name.lower(): name for name in fieldnames} - for candidate in candidates: - if candidate.lower() in field_map: - return field_map[candidate.lower()] - return None - - -def parse_float(value: str | None) -> float | None: - if value is None: - return None - text = value.strip() - if not text: - return None - try: - return float(text) - except ValueError: - return None - - -def parse_reference_name(value: str | None) -> str | None: - if value is None: - return None - text = value.strip() - if not text or text == "-": - return None - return text - - -def read_csv(path: Path, fp_type: str) -> list[tuple[str, str, BenchmarkCell]]: - with path.open(newline="", encoding="utf-8") as handle: - reader = csv.DictReader(handle) - if not reader.fieldnames: - return [] - - group_column = find_column(reader.fieldnames, "group") - label_column = find_column(reader.fieldnames, "label") - precision_column = find_column(reader.fieldnames, "precision") - operation_column = find_column(reader.fieldnames, "operation") - candidate_column = find_column(reader.fieldnames, "fltx_ns_iter", f"{fp_type}_ns_iter") - ratio_column = find_column(reader.fieldnames, "preferred_speed_ratio") - reference_column = find_column(reader.fieldnames, "preferred_reference") - - if operation_column is None or candidate_column is None: - return [] - - out: list[tuple[str, str, BenchmarkCell]] = [] - for row in reader: - precision = (row.get(precision_column) or "").strip().lower() if precision_column else "" - if precision and precision != fp_type: - continue - - group = (row.get(group_column) or "").strip() if group_column else "" - label = (row.get(label_column) or "").strip() if label_column else "" - if not group: - group = PRIMARY_METRICS_GROUP - if not label: - label = (row.get(operation_column) or "").strip() - if not label: - continue - candidate_ns = parse_float(row.get(candidate_column)) - if candidate_ns is None: - continue - ratio = parse_float(row.get(ratio_column)) if ratio_column else None - reference_name = parse_reference_name(row.get(reference_column)) if reference_column else None - reference_ns = candidate_ns * ratio if candidate_ns is not None and ratio is not None else None - out.append(( - group, - label, - BenchmarkCell(candidate_ns, reference_ns, ratio, reference_name), - )) - return out - - -def visible_table_entry(fp_type: str, group: str, label: str) -> tuple[str, str] | None: - arithmetic_match = ARITHMETIC_GROUP_RE.match(group) - if arithmetic_match: - native_group = f"{fp_type} <-> {fp_type}" - if group == native_group and label in NATIVE_ARITHMETIC_LABELS: - return NATIVE_ARITHMETIC_GROUP, label - return None - - if group == NATIVE_ARITHMETIC_GROUP: - return None - - if group in LEGACY_HIDDEN_GROUPS: - return None - - if group == MIXED_WORKLOADS_GROUP or group in LEGACY_MIXED_WORKLOADS_GROUPS: - return MIXED_WORKLOADS_GROUP, label - - return group, label - - -def average_or_none(values: list[float]) -> float | None: - if not values: - return None - return sum(values) / len(values) - - -def average_cells(cells: list[BenchmarkCell]) -> BenchmarkCell: - ns_per_iter = average_or_none([cell.ns_per_iter for cell in cells if cell.ns_per_iter is not None]) - reference_ns_per_iter = average_or_none([ - cell.reference_ns_per_iter - for cell in cells - if cell.reference_ns_per_iter is not None - ]) - ratio = average_or_none([cell.ratio for cell in cells if cell.ratio is not None]) - if ratio is None and ns_per_iter is not None and ns_per_iter > 0.0 and reference_ns_per_iter is not None: - ratio = reference_ns_per_iter / ns_per_iter - - reference_names = [cell.reference_name for cell in cells if cell.reference_name is not None] - reference_name = None - if reference_names: - reference_name = max(reference_names, key=reference_names.count) - - return BenchmarkCell(ns_per_iter, reference_ns_per_iter, ratio, reference_name) - - -def discover_table(metrics_root: Path) -> BenchmarkTable: - columns: set[ColumnKey] = set() - groups: list[str] = [] - rows_by_group: dict[str, list[str]] = {} - cell_buckets: dict[tuple[str, str, ColumnKey], list[BenchmarkCell]] = {} - - for path in sorted(metrics_root.rglob("*.csv")): - match = METRICS_FILE_RE.match(path.name) - if not match: - continue - - fp_type = match.group("type").lower() - platform = platform_key(path, match.group("compiler")) - column = ColumnKey(fp_type, platform, compiler_key(match.group("compiler"), platform)) - entries = read_csv(path, fp_type) - has_visible_entries = False - for group, label, cell in entries: - visible_entry = visible_table_entry(fp_type, group, label) - if visible_entry is None: - continue - - visible_group, visible_label = visible_entry - has_visible_entries = True - if visible_group not in rows_by_group: - groups.append(visible_group) - rows_by_group[visible_group] = [] - if visible_label not in rows_by_group[visible_group]: - rows_by_group[visible_group].append(visible_label) - cell_buckets.setdefault((visible_group, visible_label, column), []).append(cell) - - if has_visible_entries: - columns.add(column) - - cells = { - key: average_cells(values) - for key, values in cell_buckets.items() - } - - return BenchmarkTable( - columns=sorted(columns, key=column_sort_key), - groups=groups, - rows_by_group=rows_by_group, - cells=cells, - ) - - -def mix_channel(a: int, b: int, t: float) -> int: - return round(a + (b - a) * t) - - -def mix_color(a: str, b: str, t: float) -> str: - t = max(0.0, min(1.0, t)) - ar, ag, ab = int(a[1:3], 16), int(a[3:5], 16), int(a[5:7], 16) - br, bg, bb = int(b[1:3], 16), int(b[3:5], 16), int(b[5:7], 16) - return f"#{mix_channel(ar, br, t):02X}{mix_channel(ag, bg, t):02X}{mix_channel(ab, bb, t):02X}" - - -def smoothstep(t: float) -> float: - t = max(0.0, min(1.0, t)) - return t * t * (3.0 - 2.0 * t) - - -def ratio_curve_t(low_ratio: float, high_ratio: float, ratio: float) -> float: - if low_ratio > 0.0 and high_ratio > low_ratio: - t = (math.log(ratio) - math.log(low_ratio)) / (math.log(high_ratio) - math.log(low_ratio)) - else: - t = (ratio - low_ratio) / (high_ratio - low_ratio) - return smoothstep(t) - - -def ratio_color(ratio: float | None) -> str: - if ratio is None: - return WHITE - if math.isnan(ratio): - return WHITE - if ratio <= RATIO_COLOR_STOPS[0][0]: - return RATIO_COLOR_STOPS[0][1] - if ratio >= RATIO_COLOR_STOPS[-1][0] or math.isinf(ratio): - return RATIO_COLOR_STOPS[-1][1] - - previous_ratio, previous_color = RATIO_COLOR_STOPS[0] - for next_ratio, next_color in RATIO_COLOR_STOPS[1:]: - if ratio <= next_ratio: - return mix_color( - previous_color, - next_color, - ratio_curve_t(previous_ratio, next_ratio, ratio), - ) - previous_ratio, previous_color = next_ratio, next_color - - return RATIO_COLOR_STOPS[-1][1] - - -def text_color(background: str) -> str: - red = int(background[1:3], 16) / 255.0 - green = int(background[3:5], 16) / 255.0 - blue = int(background[5:7], 16) / 255.0 - luminance = 0.2126 * red + 0.7152 * green + 0.0722 * blue - return "#000000" if luminance >= 0.45 else "#FFFFFF" - - -def format_ns(value: float | None) -> str: - if value is None: - return "" - if value >= 100.0: - return f"{value:,.0f}ns" - if value >= 10.0: - return f"{value:.1f}ns" - if value >= 1.0: - return f"{value:.2f}ns" - return f"{value:.3f}ns" - - -def format_ratio(value: float | None) -> str: - if value is None: - return "" - return f"{value:.2f}x" - - -def reference_nickname(reference_name: str | None) -> str: - if reference_name is None: - return "" - - key = normalize_key(reference_name) - if "cppdoubledouble" in key: - return "cpp_dd" - if "mpfrfloatbackend" in key or "mpfr" in key: - return "mpfr" - if "ddreal" in key: - return "dd_real" - if "qdreal" in key: - return "qd_real" - return reference_name - - -def reference_full_name(reference_name: str | None) -> str: - if reference_name is None: - return "" - - key = normalize_key(reference_name) - if "cppdoubledouble" in key: - return "boost::multiprecision::cpp_double_double" - if "mpfrfloatbackend" in key or "mpfr" in key: - return "boost::multiprecision::mpfr_float_backend<64>" - if "ddreal" in key: - return "qdpp (dd_real)" - if "qdreal" in key: - return "qdpp (qd_real)" - return reference_name - - -def reference_sort_rank(reference_name: str) -> int: - key = normalize_key(reference_name) - if "cppdoubledouble" in key or "mpfrfloatbackend" in key or "mpfr" in key: - return 0 - if "qdpp" in key or "ddreal" in key or "qdreal" in key: - return 1 - return 10 - - -def reference_legend_groups(table: BenchmarkTable) -> list[tuple[str, list[str]]]: - groups: list[tuple[str, list[str]]] = [] - for start_index, _ in fp_type_spans(table.columns): - fp_type = table.columns[start_index].fp_type - references: list[str] = [] - for column in [column for column in table.columns if column.fp_type == fp_type]: - for group in table.groups: - for label in table.rows_by_group.get(group, []): - cell = table.cells.get((group, label, column)) - if cell is None or cell.ratio is None or cell.reference_name is None: - continue - if cell.reference_name not in references: - references.append(cell.reference_name) - - references.sort(key=lambda reference: (reference_sort_rank(reference), reference_nickname(reference))) - if references: - groups.append((fp_type, references)) - return groups - - -def reference_legend_lines(table: BenchmarkTable) -> list[str]: - lines: list[str] = [] - for group_index, (_, references) in enumerate(reference_legend_groups(table)): - if group_index > 0 and lines: - lines.append("") - for reference in references: - lines.append(f"{reference_nickname(reference)} = {reference_full_name(reference)}") - return lines - - -def format_ratio_with_reference(cell: BenchmarkCell) -> str: - ratio = format_ratio(cell.ratio) - nickname = reference_nickname(cell.reference_name) - return f"{nickname}: {ratio}" if nickname and ratio else ratio - - -def e(value: str) -> str: - return html.escape(value, quote=True) - - -def is_type_boundary(columns: list[ColumnKey], index: int) -> bool: - return index > 0 and columns[index].fp_type != columns[index - 1].fp_type - - -def type_boundary_indices(columns: list[ColumnKey]) -> list[int]: - return [index for index in range(1, len(columns)) if is_type_boundary(columns, index)] - - -def render_type_header(columns: list[ColumnKey]) -> str: - parts = ["", 'Function'] - index = 0 - while index < len(columns): - fp_type = columns[index].fp_type - count = 1 - while index + count < len(columns) and columns[index + count].fp_type == fp_type: - count += 1 - if index > 0: - parts.append('') - parts.append(f'{e(fp_type_label(fp_type))}') - index += count - parts.append("") - return "".join(parts) - - -def render_platform_header(columns: list[ColumnKey]) -> str: - parts = [""] - index = 0 - while index < len(columns): - fp_type = columns[index].fp_type - platform = columns[index].platform - count = 1 - while ( - index + count < len(columns) - and columns[index + count].fp_type == fp_type - and columns[index + count].platform == platform - ): - count += 1 - parts.append(f'{e(platform_label(platform))}') - index += count - parts.append("") - return "".join(parts) - - -def render_compiler_header(columns: list[ColumnKey]) -> str: - return "" + "".join( - f'{e(compiler_label(column.compiler))}' - for column in columns - ) + "" - - -def render_html_reference_legend(table: BenchmarkTable) -> str: - lines = reference_legend_lines(table) - if not lines: - return "" - - parts = ['
'] - for line in lines: - if not line: - parts.append('') - continue - - nickname, _, full_name = line.partition(" = ") - parts.append( - '
' - f'{e(nickname)}' - '=' - f'{e(full_name)}' - '
' - ) - parts.append('
') - return "".join(parts) - - -def render_html_cell(cell: BenchmarkCell | None, boundary_class: str = "") -> str: - if cell is None or cell.ns_per_iter is None: - return f'' - if cell.ratio is None: - return f'
{e(format_ns(cell.ns_per_iter))}
' - - background = ratio_color(cell.ratio) - color = text_color(background) - return ( - f'' - f'
{e(format_ns(cell.ns_per_iter))}
' - f'
{e(format_ratio_with_reference(cell))}
' - "" - ) - - -def fp_type_spans(columns: list[ColumnKey]) -> list[tuple[int, int]]: - spans: list[tuple[int, int]] = [] - index = 0 - while index < len(columns): - fp_type = columns[index].fp_type - count = 1 - while index + count < len(columns) and columns[index + count].fp_type == fp_type: - count += 1 - spans.append((index, count)) - index += count - return spans - - -def render_group_row(group: str, columns: list[ColumnKey]) -> str: - parts = [''] - spans = fp_type_spans(columns) - for span_index, (_, count) in enumerate(spans): - if span_index > 0: - parts.append('') - - if span_index == 0: - parts.append(f'{e(group)}') - else: - parts.append(f'') - parts.append("") - return "".join(parts) - - -def render_html_table(table: BenchmarkTable) -> str: - if not table.columns: - return '

No benchmark metrics were found for this table.

' - - parts = [ - '', - "", - render_type_header(table.columns), - render_platform_header(table.columns), - render_compiler_header(table.columns), - "", - "", - ] - for group in table.groups: - parts.append(render_group_row(group, table.columns)) - for label in table.rows_by_group.get(group, []): - parts.append("") - parts.append(f'') - for index, column in enumerate(table.columns): - if is_type_boundary(table.columns, index): - parts.append('') - parts.append(render_html_cell(table.cells.get((group, label, column)))) - parts.append("") - parts.extend(["", "
{e(label)}
"]) - return "\n".join(parts) - - -def function_column_width(table: BenchmarkTable) -> int: - labels = [label for group in table.groups for label in table.rows_by_group.get(group, [])] - longest_label = max([len("Function")] + [len(label) for label in labels]) - natural_width = max( - FUNCTION_COLUMN_MIN_WIDTH, - min(FUNCTION_COLUMN_MAX_WIDTH, longest_label * FUNCTION_COLUMN_CHAR_WIDTH + FUNCTION_COLUMN_PADDING), - ) - return round(natural_width * FUNCTION_COLUMN_WIDTH_SCALE) - - -def render_html_document(table: BenchmarkTable) -> str: - function_w = function_column_width(table) - return f""" - - - - -{e(TABLE_TITLE)} - - - -

{e(TABLE_TITLE)}

-

{e(TABLE_SUBTITLE)}

-{render_html_reference_legend(table)} -
-{render_html_table(table)} -
- - -""" - - -def svg_text(x: int, y: int, text: str, size: int, color: str, weight: int = 400, anchor: str = "start") -> str: - return ( - f'{e(text)}' - ) - - -def svg_rect(x: int, y: int, width: int, height: int, fill: str, stroke: str = GRID) -> str: - return f'' - - -def svg_rect_no_stroke(x: int, y: int, width: int, height: int, fill: str) -> str: - return f'' - - -def svg_vertical_borders(x: int, y: int, width: int, height: int, color: str) -> str: - return ( - f'' - f'' - ) - - -def svg_reference_legend_height(table: BenchmarkTable) -> int: - lines = reference_legend_lines(table) - if not lines: - return 0 - - height = 8 - for line in lines: - height += 8 if not line else 15 - return height - - -def render_svg_reference_legend(table: BenchmarkTable, x: int, baseline_y: int) -> list[str]: - lines = reference_legend_lines(table) - if not lines: - return [] - - parts: list[str] = [] - y = baseline_y - for line in lines: - if not line: - y += 8 - continue - - nickname, _, full_name = line.partition(" = ") - nickname_w = math.ceil(len(nickname) * 7.0) - parts.append(svg_text(x, y, nickname, 11, TEXT, 700)) - parts.append(svg_text(x + nickname_w + 8, y, "=", 11, TEXT, 650)) - parts.append(svg_text(x + nickname_w + 22, y, full_name, 11, MUTED, 600)) - y += 15 - return parts - - -def table_row_count(table: BenchmarkTable) -> int: - return sum(1 + len(table.rows_by_group.get(group, [])) for group in table.groups) - - -def render_svg_table(table: BenchmarkTable) -> str: - legend_h = svg_reference_legend_height(table) - title_h = 62 + legend_h - header_h = 34 - header_rows = 3 - group_h = 28 - row_h = 40 - margin = 18 - - function_w = function_column_width(table) - column_w = 116 - boundaries = set(type_boundary_indices(table.columns)) - width = margin * 2 + function_w + column_w * max(1, len(table.columns)) + TYPE_GAP_WIDTH * len(boundaries) - legend_width = max([0] + [math.ceil(len(line) * 6.4) for line in reference_legend_lines(table)]) - width = max(width, margin * 2 + math.ceil(len(TABLE_SUBTITLE) * 7.2), margin * 2 + legend_width) - height = margin * 2 + title_h + header_h * header_rows + group_h * len(table.groups) + row_h * sum(len(table.rows_by_group.get(group, [])) for group in table.groups) - - parts = [ - f'', - f'{e(TABLE_TITLE)}', - f'{e(TABLE_SUBTITLE)}', - f'', - svg_text(margin, margin + 26, TABLE_TITLE, 24, TEXT, 700), - svg_text(margin, margin + 50, TABLE_SUBTITLE, 13, MUTED), - ] - parts.extend(render_svg_reference_legend(table, margin, margin + 76)) - - if not table.columns: - parts.append(svg_text(margin, margin + title_h + 32, "No benchmark metrics were found for this table.", 14, MUTED)) - parts.append("") - return "\n".join(parts) - - table_x = margin - y = margin + title_h - parts.append(svg_rect(table_x, y, function_w, header_h * header_rows, HEADER_BG)) - parts.append(svg_text(table_x + 14, y + 60, "Function", 13, WHITE, 700)) - - x = table_x + function_w - index = 0 - while index < len(table.columns): - fp_type = table.columns[index].fp_type - count = 1 - while index + count < len(table.columns) and table.columns[index + count].fp_type == fp_type: - count += 1 - if index in boundaries: - x += TYPE_GAP_WIDTH - span_w = count * column_w - parts.append(svg_rect(x, y, span_w, header_h, HEADER_BG)) - parts.append(svg_text(x + span_w // 2, y + 22, fp_type_label(fp_type), 13, WHITE, 700, "middle")) - x += span_w - index += count - - y += header_h - x = table_x + function_w - index = 0 - while index < len(table.columns): - fp_type = table.columns[index].fp_type - platform = table.columns[index].platform - count = 1 - while ( - index + count < len(table.columns) - and table.columns[index + count].fp_type == fp_type - and table.columns[index + count].platform == platform - ): - count += 1 - if index in boundaries: - x += TYPE_GAP_WIDTH - span_w = count * column_w - parts.append(svg_rect(x, y, span_w, header_h, PLATFORM_HEADER_BG)) - parts.append(svg_text(x + span_w // 2, y + 22, platform_label(platform), 13, WHITE, 700, "middle")) - x += span_w - index += count - - y += header_h - x = table_x + function_w - for index, column in enumerate(table.columns): - if index in boundaries: - x += TYPE_GAP_WIDTH - parts.append(svg_rect(x, y, column_w, header_h, SUBHEADER_BG)) - parts.append(svg_text(x + column_w // 2, y + 22, compiler_label(column.compiler), 13, WHITE, 700, "middle")) - x += column_w - - y += header_h - for group in table.groups: - group_x = table_x - for span_index, (_, count) in enumerate(fp_type_spans(table.columns)): - if span_index == 0: - span_w = function_w + column_w * count - else: - parts.append(svg_rect_no_stroke(group_x, y, TYPE_GAP_WIDTH, group_h, PAGE_BG)) - parts.append(svg_vertical_borders(group_x, y, TYPE_GAP_WIDTH, group_h, GRID)) - group_x += TYPE_GAP_WIDTH - span_w = column_w * count - parts.append(svg_rect(group_x, y, span_w, group_h, GROUP_BG)) - group_x += span_w - parts.append(svg_text(table_x + 14, y + 19, group, 12, TEXT, 700)) - y += group_h - - for label in table.rows_by_group.get(group, []): - parts.append(svg_rect(table_x, y, function_w, row_h, WHITE)) - parts.append(svg_text(table_x + 14, y + 25, label, 13, TEXT, 600)) - x = table_x + function_w - for index, column in enumerate(table.columns): - if index in boundaries: - x += TYPE_GAP_WIDTH - cell = table.cells.get((group, label, column)) - if cell is None or cell.ns_per_iter is None: - parts.append(svg_rect(x, y, column_w, row_h, WHITE)) - elif cell.ratio is None: - parts.append(svg_rect(x, y, column_w, row_h, WHITE)) - parts.append(svg_text(x + column_w // 2, y + 25, format_ns(cell.ns_per_iter), 13, "#000000", 700, "middle")) - else: - background = ratio_color(cell.ratio) - color = text_color(background) - parts.append(svg_rect(x, y, column_w, row_h, background)) - parts.append(svg_text(x + column_w // 2, y + 17, format_ns(cell.ns_per_iter), 13, color, 700, "middle")) - parts.append(svg_text(x + column_w // 2, y + 33, format_ratio_with_reference(cell), 11, color, 600, "middle")) - x += column_w - y += row_h - - parts.append("") - return "\n".join(parts) - - -def default_res_root() -> Path: - return Path(__file__).resolve().parents[1] - - -def resolve_metrics_root(res_root: Path) -> Path: - if res_root.name.lower() == "metrics": - return res_root - return res_root / "metrics" - - -def parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser(description="Collect fltx metrics CSV files into one combined bl::f128/bl::f256 table file.") - parser.add_argument("--res-root", type=Path, default=default_res_root(), help="fltx/res root folder. Defaults to this script's parent res folder.") - parser.add_argument("--root", type=Path, default=None, help="Deprecated alias for --res-root.") - parser.add_argument("--output-dir", type=Path, default=None, help="Output directory. Defaults to /metrics.") - parser.add_argument("--format", choices=("html", "svg", "both"), default="svg", help="Output format.") - return parser.parse_args() - - -def write_outputs(table: BenchmarkTable, output_dir: Path, output_format: str) -> list[Path]: - written: list[Path] = [] - output_dir.mkdir(parents=True, exist_ok=True) - if output_format in {"html", "both"}: - path = output_dir / "metrics_table.html" - path.write_text(render_html_document(table), encoding="utf-8") - written.append(path) - if output_format in {"svg", "both"}: - path = output_dir / "metrics_table.svg" - path.write_text(render_svg_table(table), encoding="utf-8") - written.append(path) - return written - - -def main() -> None: - args = parse_args() - res_root = (args.root if args.root is not None else args.res_root).resolve() - metrics_root = resolve_metrics_root(res_root) - output_dir = args.output_dir.resolve() if args.output_dir else metrics_root - - table = discover_table(metrics_root) - for path in write_outputs(table, output_dir, args.format): - print(f"wrote {path}") - - -if __name__ == "__main__": - main() diff --git a/res/metrics/linux/Clang_f128.csv b/res/metrics/linux/Clang_f128.csv deleted file mode 100644 index aa49ba9..0000000 --- a/res/metrics/linux/Clang_f128.csv +++ /dev/null @@ -1,70 +0,0 @@ -group,label,precision,operation,domain,domain_role,samples,primary_competitor,primary_competitor_supported,fltx_worst_bits,fltx_mean_bits,fltx_domain_score,fltx_inf_nan_correct,competitor_worst_bits,competitor_mean_bits,competitor_domain_score,competitor_inf_nan_correct,precision_gap_bits,domain_gap_pp,fltx_ns_iter,competitor_ns_iter,speed_ratio,preferred_reference,preferred_mean_gap_bits,preferred_worst_gap_bits,preferred_domain_gap_pp,preferred_speed_ratio,qdpp (dd_real)_supported,qdpp (dd_real)_worst_bits,qdpp (dd_real)_mean_bits,qdpp (dd_real)_domain_score,qdpp (dd_real)_inf_nan_correct,qdpp (dd_real)_gap_bits,qdpp (dd_real)_domain_gap_pp,qdpp (dd_real)_ns_iter,qdpp (dd_real)_speed_ratio -f128 <-> f128,add,f128,add,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.29622,4.33909,1.00998,qdpp (dd_real),-,-,-,1.00233,yes,-,-,-,-,-,-,4.30622,1.00233 -f128 <-> f128,subtract,f128,subtract,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.28357,4.33492,1.01199,qdpp (dd_real),-,-,-,0.994935,yes,-,-,-,-,-,-,4.26188,0.994935 -f128 <-> f128,multiply,f128,multiply,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.27253,4.40219,1.03035,qdpp (dd_real),-,-,-,1.00373,yes,-,-,-,-,-,-,4.28848,1.00373 -f128 <-> f128,divide,f128,divide,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.31029,4.84805,1.12476,boost::multiprecision::cpp_double_double,-,-,-,1.12476,yes,-,-,-,-,-,-,13.5414,3.14165 -Mixed Workloads,affine trig transform,f128,affine transform,mixed,stress,28,boost::multiprecision::cpp_double_double,yes,109.276,110.689,100,-,105.205,107.24,99.4373,-,4.07101,0.562711,128.3,1256.81,9.7959,qdpp (dd_real),3.95738,5.08906,1.28303,1.83863,yes,104.187,106.731,98.717,-,5.08906,1.28303,235.895,1.83863 -Mixed Workloads,mandelbrot kernel,f128,mandelbrot,mixed,stress,3072,boost::multiprecision::cpp_double_double,yes,3.41619,152.228,51.3273,-,3.54951,152.561,51.36,-,-0.133319,-0.0326876,15.9267,25.1211,1.5773,qdpp (dd_real),1.83759,-0.185565,0.724835,1.15517,yes,3.60175,150.39,50.6024,-,-0.185565,0.724835,18.398,1.15517 -Mixed Workloads,mixed arithmetic,f128,mixed arithmetic,mixed,stress,196,boost::multiprecision::cpp_double_double,yes,101.15,107.768,99.3608,-,101.15,107.768,99.3608,-,0,0,34.0004,65.6326,1.93035,boost::multiprecision::cpp_double_double,0,0,0,1.93035,yes,97.9223,106.017,98.3071,-,3.22762,1.05362,78.7487,2.31611 -Rounding,floor,f128,floor,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.26606,4.27905,1.00304,boost::multiprecision::cpp_double_double,-,-,-,1.00304,yes,-,-,-,-,-,-,4.29183,1.00604 -Rounding,ceil,f128,ceil,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.30453,4.30988,1.00124,qdpp (dd_real),-,-,-,1.00005,yes,-,-,-,-,-,-,4.30477,1.00005 -Rounding,trunc,f128,trunc,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.29723,5.23255,1.21766,qdpp (dd_real),-,-,-,1.07806,yes,-,-,-,-,-,-,4.63266,1.07806 -Rounding,round,f128,round,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.33495,7.05484,1.62743,qdpp (dd_real),-,-,-,0.995344,yes,-,-,-,-,-,-,4.31477,0.995344 -Rounding,nearbyint,f128,nearbyint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.97405,7.03522,1.41439,qdpp (dd_real),-,-,-,0.865419,yes,-,-,-,-,-,-,4.30464,0.865419 -Rounding,rint,f128,rint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.82603,7.09013,1.46914,qdpp (dd_real),-,-,-,0.894353,yes,-,-,-,-,-,-,4.31617,0.894353 -Rounding,lround,f128,lround,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,12.9711,348.954,26.9025,boost::multiprecision::cpp_double_double,-,-,-,26.9025,no,-,-,-,-,-,-,-,- -Rounding,llround,f128,llround,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,12.6632,349.725,27.6175,boost::multiprecision::cpp_double_double,-,-,-,27.6175,no,-,-,-,-,-,-,-,- -Rounding,lrint,f128,lrint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,13.0427,346.589,26.5735,boost::multiprecision::cpp_double_double,-,-,-,26.5735,no,-,-,-,-,-,-,-,- -Rounding,llrint,f128,llrint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,13.1726,348.8,26.4792,boost::multiprecision::cpp_double_double,-,-,-,26.4792,no,-,-,-,-,-,-,-,- -Remainders,fmod,f128,fmod,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,28.769,48.3237,1.67971,qdpp (dd_real),-,-,-,1.05495,yes,-,-,-,-,-,-,30.3499,1.05495 -Remainders,remainder,f128,remainder,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,31.8731,51.4451,1.61406,qdpp (dd_real),-,-,-,0.981227,yes,-,-,-,-,-,-,31.2747,0.981227 -Remainders,remquo,f128,remquo,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,32.4056,51.3897,1.58583,boost::multiprecision::cpp_double_double,-,-,-,1.58583,no,-,-,-,-,-,-,-,- -Floating-point utilities,abs,f128,fabs,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.27621,4.29111,1.00348,qdpp (dd_real),-,-,-,0.996201,yes,-,-,-,-,-,-,4.25996,0.996201 -Floating-point utilities,fma,f128,fma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.26951,17.2164,4.0324,boost::multiprecision::cpp_double_double,-,-,-,4.0324,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmin,f128,fmin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.30515,4.30949,1.00101,boost::multiprecision::cpp_double_double,-,-,-,1.00101,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmax,f128,fmax,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.31417,4.31906,1.00113,boost::multiprecision::cpp_double_double,-,-,-,1.00113,no,-,-,-,-,-,-,-,- -Floating-point utilities,fdim,f128,fdim,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.31425,4.96457,1.15074,boost::multiprecision::cpp_double_double,-,-,-,1.15074,no,-,-,-,-,-,-,-,- -Floating-point utilities,copysign,f128,copysign,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.29356,4.29239,0.999728,boost::multiprecision::cpp_double_double,-,-,-,0.999728,no,-,-,-,-,-,-,-,- -Floating-point utilities,ldexp,f128,ldexp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.3076,4.42992,1.02839,qdpp (dd_real),-,-,-,1.01972,yes,-,-,-,-,-,-,4.39253,1.01972 -Floating-point utilities,scalbn,f128,scalbn,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.30809,4.42769,1.02776,boost::multiprecision::cpp_double_double,-,-,-,1.02776,yes,-,-,-,-,-,-,4.43416,1.02926 -Floating-point utilities,scalbln,f128,scalbln,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.29749,4.43831,1.03277,qdpp (dd_real),-,-,-,1.02147,yes,-,-,-,-,-,-,4.38977,1.02147 -Floating-point utilities,frexp,f128,frexp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.38296,6.54159,1.02485,boost::multiprecision::cpp_double_double,-,-,-,1.02485,no,-,-,-,-,-,-,-,- -Floating-point utilities,modf,f128,modf,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,5.14204,8.10997,1.57719,boost::multiprecision::cpp_double_double,-,-,-,1.57719,no,-,-,-,-,-,-,-,- -Floating-point utilities,ilogb,f128,ilogb,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.17161,3.02872,1.39469,boost::multiprecision::cpp_double_double,-,-,-,1.39469,no,-,-,-,-,-,-,-,- -Floating-point utilities,logb,f128,logb,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.28597,61.5279,14.3557,boost::multiprecision::cpp_double_double,-,-,-,14.3557,no,-,-,-,-,-,-,-,- -Floating-point utilities,nextafter,f128,nextafter,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.52153,21.3564,4.72327,boost::multiprecision::cpp_double_double,-,-,-,4.72327,no,-,-,-,-,-,-,-,- -Floating-point utilities,nexttoward(type),f128,nexttoward,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.53693,21.8584,4.81788,boost::multiprecision::cpp_double_double,-,-,-,4.81788,no,-,-,-,-,-,-,-,- -Roots & powers,sqrt,f128,sqrt,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.36905,4.2832,0.980351,boost::multiprecision::cpp_double_double,-,-,-,0.980351,yes,-,-,-,-,-,-,6.02874,1.37988 -Roots & powers,cbrt,f128,cbrt,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,20.4349,335.251,16.4058,qdpp (dd_real),-,-,-,3.41278,yes,-,-,-,-,-,-,69.7396,3.41278 -Roots & powers,hypot,f128,hypot,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,10.5305,63.3237,6.01334,boost::multiprecision::cpp_double_double,-,-,-,6.01334,no,-,-,-,-,-,-,-,- -Roots & powers,pow,f128,pow,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,236.906,746.141,3.14952,qdpp (dd_real),-,-,-,1.45192,yes,-,-,-,-,-,-,343.969,1.45192 -Exponentials,exp,f128,exp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,83.3252,341.478,4.09813,qdpp (dd_real),-,-,-,1.86784,yes,-,-,-,-,-,-,155.638,1.86784 -Exponentials,exp2,f128,exp2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,86.5868,753.72,8.70479,boost::multiprecision::cpp_double_double,-,-,-,8.70479,no,-,-,-,-,-,-,-,- -Exponentials,expm1,f128,expm1,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,86.8167,347.156,3.99873,qdpp (dd_real),-,-,-,1.78518,yes,-,-,-,-,-,-,154.983,1.78518 -Logarithms,log,f128,log,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,128.085,378.798,2.9574,qdpp (dd_real),-,-,-,1.40239,yes,-,-,-,-,-,-,179.624,1.40239 -Logarithms,log2,f128,log2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,130.122,389.967,2.99692,boost::multiprecision::cpp_double_double,-,-,-,2.99692,no,-,-,-,-,-,-,-,- -Logarithms,log10,f128,log10,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,129.71,388.689,2.9966,qdpp (dd_real),-,-,-,1.56771,yes,-,-,-,-,-,-,203.348,1.56771 -Logarithms,log1p,f128,log1p,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,134.594,471.548,3.50347,qdpp (dd_real),-,-,-,1.2744,yes,-,-,-,-,-,-,171.527,1.2744 -Trigonometric,sin,f128,sin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,83.4692,588.261,7.04764,qdpp (dd_real),-,-,-,1.76573,yes,-,-,-,-,-,-,147.384,1.76573 -Trigonometric,cos,f128,cos,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,84.4721,592.064,7.00899,qdpp (dd_real),-,-,-,1.76951,yes,-,-,-,-,-,-,149.474,1.76951 -Trigonometric,tan,f128,tan,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,99.3472,1191.85,11.9968,qdpp (dd_real),-,-,-,1.73417,yes,-,-,-,No,-,-,172.285,1.73417 -Trigonometric,asin,f128,asin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,164.656,2119.12,12.87,qdpp (dd_real),-,-,-,1.68249,yes,-,-,-,No,-,-,277.032,1.68249 -Trigonometric,acos,f128,acos,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,170.939,2078.52,12.1594,qdpp (dd_real),-,-,-,1.60543,yes,-,-,-,No,-,-,274.431,1.60543 -Trigonometric,atan,f128,atan,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,113.431,329.064,2.90102,qdpp (dd_real),-,-,-,1.81921,yes,-,-,-,No,-,-,206.354,1.81921 -Trigonometric,atan2,f128,atan2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,134.972,1932.7,14.3192,qdpp (dd_real),-,-,-,1.5455,yes,-,-,-,No,-,-,208.599,1.5455 -Hyperbolic,sinh,f128,sinh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,96.3247,355.462,3.69025,qdpp (dd_real),-,-,-,1.88099,yes,-,-,-,-,-,-,181.185,1.88099 -Hyperbolic,cosh,f128,cosh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,94.5838,361.183,3.81866,qdpp (dd_real),-,-,-,1.93205,yes,-,-,-,-,-,-,182.74,1.93205 -Hyperbolic,tanh,f128,tanh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,100.262,429.464,4.28343,qdpp (dd_real),-,-,-,1.83836,yes,-,-,-,-,-,-,184.317,1.83836 -Inverse hyperbolic,asinh,f128,asinh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,138.937,464.118,3.34049,qdpp (dd_real),-,-,-,1.4394,yes,-,-,-,-,-,-,199.986,1.4394 -Inverse hyperbolic,acosh,f128,acosh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,139.662,452.76,3.24182,qdpp (dd_real),-,-,-,1.39497,yes,-,-,-,-,-,-,194.825,1.39497 -Inverse hyperbolic,atanh,f128,atanh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,115.671,1380.83,11.9376,qdpp (dd_real),-,-,-,1.7257,yes,-,-,-,-,-,-,199.613,1.7257 -Special functions,erfc,f128,erfc,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,637.185,920.001,1.44385,boost::multiprecision::cpp_double_double,-,-,-,1.44385,no,-,-,-,-,-,-,-,- -Special functions,erf,f128,erf,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,639.421,932.558,1.45844,boost::multiprecision::cpp_double_double,-,-,-,1.45844,no,-,-,-,-,-,-,-,- -Special functions,tgamma,f128,tgamma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,454.254,1854.57,4.08267,boost::multiprecision::cpp_double_double,-,-,-,4.08267,no,-,-,-,-,-,-,-,- -Special functions,lgamma,f128,lgamma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,486.136,1876.55,3.86014,boost::multiprecision::cpp_double_double,-,-,-,3.86014,no,-,-,-,-,-,-,-,- -Comparisons,operator==,f128,operator==,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.12901,2.12601,0.998592,qdpp (dd_real),-,-,-,0.992091,yes,-,-,-,-,-,-,2.11217,0.992091 -Comparisons,operator!=,f128,operator!=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.13754,2.12027,0.991918,qdpp (dd_real),-,-,-,0.991497,yes,-,-,-,-,-,-,2.11936,0.991497 -Comparisons,operator<,f128,operator<,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.53539,2.60498,1.02745,qdpp (dd_real),-,-,-,0.947309,yes,-,-,-,-,-,-,2.4018,0.947309 -Comparisons,operator>,f128,operator>,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.61691,2.83761,1.08434,qdpp (dd_real),-,-,-,0.896852,yes,-,-,-,-,-,-,2.34698,0.896852 -Comparisons,operator<=,f128,operator<=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.6518,2.95031,1.11257,qdpp (dd_real),-,-,-,0.943794,yes,-,-,-,-,-,-,2.50276,0.943794 -Comparisons,operator>=,f128,operator>=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.59783,2.60264,1.00185,qdpp (dd_real),-,-,-,0.92392,yes,-,-,-,-,-,-,2.40019,0.92392 diff --git a/res/metrics/linux/Clang_f256.csv b/res/metrics/linux/Clang_f256.csv deleted file mode 100644 index df5f8b4..0000000 --- a/res/metrics/linux/Clang_f256.csv +++ /dev/null @@ -1,70 +0,0 @@ -group,label,precision,operation,domain,domain_role,samples,primary_competitor,primary_competitor_supported,fltx_worst_bits,fltx_mean_bits,fltx_domain_score,fltx_inf_nan_correct,competitor_worst_bits,competitor_mean_bits,competitor_domain_score,competitor_inf_nan_correct,precision_gap_bits,domain_gap_pp,fltx_ns_iter,competitor_ns_iter,speed_ratio,preferred_reference,preferred_mean_gap_bits,preferred_worst_gap_bits,preferred_domain_gap_pp,preferred_speed_ratio,qdpp (qd_real)_supported,qdpp (qd_real)_worst_bits,qdpp (qd_real)_mean_bits,qdpp (qd_real)_domain_score,qdpp (qd_real)_inf_nan_correct,qdpp (qd_real)_gap_bits,qdpp (qd_real)_domain_gap_pp,qdpp (qd_real)_ns_iter,qdpp (qd_real)_speed_ratio -f256 <-> f256,add,f256,add,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,12.5874,34.4355,2.73572,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.73572,yes,-,-,-,-,-,-,36.3829,2.89043 -f256 <-> f256,subtract,f256,subtract,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,12.7807,33.7261,2.63884,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.63884,yes,-,-,-,-,-,-,38.5622,3.01723 -f256 <-> f256,multiply,f256,multiply,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,28.7621,38.9056,1.35267,qdpp (qd_real),-,-,-,1.05379,yes,-,-,-,-,-,-,30.3093,1.05379 -f256 <-> f256,divide,f256,divide,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,81.7956,64.9804,0.794424,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.794424,yes,-,-,-,-,-,-,316.947,3.87487 -Mixed Workloads,affine trig transform,f256,affine transform,mixed,stress,28,boost::multiprecision::mpfr_float_backend<64>,yes,211.085,211.715,99.6764,-,214.628,215.967,100,-,-3.54282,-0.323583,1182.24,2490.22,2.10636,boost::multiprecision::mpfr_float_backend<64>,-4.25129,-3.54282,-0.323583,2.10636,yes,216.748,218.127,100,-,-5.66305,-0.323583,3174.02,2.68476 -Mixed Workloads,mandelbrot kernel,f256,mandelbrot,mixed,stress,3072,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,-,exact,320,100,-,0,0,150.419,180.734,1.20153,boost::multiprecision::mpfr_float_backend<64>,0,0,0,1.20153,yes,exact,320,100,-,0,0,219.426,1.45876 -Mixed Workloads,mixed arithmetic,f256,mixed arithmetic,mixed,stress,196,boost::multiprecision::mpfr_float_backend<64>,yes,206.62,213.861,99.5384,-,207.146,214.099,99.596,-,-0.526346,-0.0576514,359.611,513.784,1.42872,boost::multiprecision::mpfr_float_backend<64>,-0.238925,-0.526346,-0.0576514,1.42872,yes,208.541,216.957,99.7676,-,-1.92155,-0.229226,1055.15,2.93413 -Rounding,floor,f256,floor,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.60284,20.5249,2.38583,qdpp (qd_real),-,-,-,0.981453,yes,-,-,-,-,-,-,8.44328,0.981453 -Rounding,ceil,f256,ceil,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.45128,20.544,2.43087,qdpp (qd_real),-,-,-,1.01279,yes,-,-,-,-,-,-,8.55935,1.01279 -Rounding,trunc,f256,trunc,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.511,20.2311,2.37706,qdpp (qd_real),-,-,-,0.995939,yes,-,-,-,-,-,-,8.47643,0.995939 -Rounding,round,f256,round,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.48355,38.7692,4.56993,qdpp (qd_real),-,-,-,1.01429,yes,-,-,-,-,-,-,8.60477,1.01429 -Rounding,nearbyint,f256,nearbyint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.48869,38.595,4.54664,qdpp (qd_real),-,-,-,1.0042,yes,-,-,-,-,-,-,8.52432,1.0042 -Rounding,rint,f256,rint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.46267,38.3676,4.53375,qdpp (qd_real),-,-,-,1.01041,yes,-,-,-,-,-,-,8.55073,1.01041 -Rounding,lround,f256,lround,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,10.395,52.2916,5.03045,boost::multiprecision::mpfr_float_backend<64>,-,-,-,5.03045,no,-,-,-,-,-,-,-,- -Rounding,llround,f256,llround,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,10.4902,53.1252,5.06428,boost::multiprecision::mpfr_float_backend<64>,-,-,-,5.06428,no,-,-,-,-,-,-,-,- -Rounding,lrint,f256,lrint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,12.1216,52.2858,4.31345,boost::multiprecision::mpfr_float_backend<64>,-,-,-,4.31345,no,-,-,-,-,-,-,-,- -Rounding,llrint,f256,llrint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,11.7277,52.0759,4.4404,boost::multiprecision::mpfr_float_backend<64>,-,-,-,4.4404,no,-,-,-,-,-,-,-,- -Remainders,fmod,f256,fmod,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,89.794,82.304,0.916587,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.916587,yes,-,-,-,-,-,-,402.941,4.48739 -Remainders,remainder,f256,remainder,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,115.279,100.705,0.873577,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.873577,yes,-,-,-,-,-,-,408.452,3.54316 -Remainders,remquo,f256,remquo,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,115.865,101.59,0.876794,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.876794,no,-,-,-,-,-,-,-,- -Floating-point utilities,abs,f256,fabs,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.50108,18.9367,2.22757,qdpp (qd_real),-,-,-,1.00012,yes,-,-,-,-,-,-,8.5021,1.00012 -Floating-point utilities,fma,f256,fma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,25.4125,53.7341,2.11448,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.11448,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmin,f256,fmin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.54315,26.1818,3.06465,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.06465,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmax,f256,fmax,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.52792,25.575,2.99897,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.99897,no,-,-,-,-,-,-,-,- -Floating-point utilities,fdim,f256,fdim,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9.02002,27.0431,2.99812,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.99812,no,-,-,-,-,-,-,-,- -Floating-point utilities,copysign,f256,copysign,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.56802,24.4625,2.85509,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.85509,no,-,-,-,-,-,-,-,- -Floating-point utilities,ldexp,f256,ldexp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.49221,24.3809,2.87097,qdpp (qd_real),-,-,-,1.02877,yes,-,-,-,-,-,-,8.73654,1.02877 -Floating-point utilities,scalbn,f256,scalbn,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.49057,24.367,2.86988,qdpp (qd_real),-,-,-,1.02443,yes,-,-,-,-,-,-,8.69801,1.02443 -Floating-point utilities,scalbln,f256,scalbln,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.60183,24.5405,2.85294,qdpp (qd_real),-,-,-,1.00697,yes,-,-,-,-,-,-,8.66176,1.00697 -Floating-point utilities,frexp,f256,frexp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,12.6635,24.8745,1.96426,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.96426,no,-,-,-,-,-,-,-,- -Floating-point utilities,modf,f256,modf,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,12.8698,50.3541,3.91258,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.91258,no,-,-,-,-,-,-,-,- -Floating-point utilities,ilogb,f256,ilogb,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.15738,14.6301,6.78142,boost::multiprecision::mpfr_float_backend<64>,-,-,-,6.78142,no,-,-,-,-,-,-,-,- -Floating-point utilities,logb,f256,logb,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.46851,31.356,3.70266,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.70266,no,-,-,-,-,-,-,-,- -Floating-point utilities,nextafter,f256,nextafter,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.48292,216.549,25.5276,boost::multiprecision::mpfr_float_backend<64>,-,-,-,25.5276,no,-,-,-,-,-,-,-,- -Floating-point utilities,nexttoward(type),f256,nexttoward,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.60078,216.973,25.2271,boost::multiprecision::mpfr_float_backend<64>,-,-,-,25.2271,no,-,-,-,-,-,-,-,- -Roots & powers,sqrt,f256,sqrt,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,94.6585,97.8984,1.03423,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.03423,yes,-,-,-,-,-,-,501.315,5.29604 -Roots & powers,cbrt,f256,cbrt,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,334.129,314.192,0.940332,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.940332,yes,-,-,-,-,-,-,1292.02,3.86683 -Roots & powers,hypot,f256,hypot,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,158.584,272.864,1.72063,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.72063,no,-,-,-,-,-,-,-,- -Roots & powers,pow,f256,pow,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2375.35,2991.28,1.2593,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.2593,yes,-,-,-,-,-,-,10075.4,4.24167 -Exponentials,exp,f256,exp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,873.944,993.291,1.13656,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.13656,yes,-,-,-,-,-,-,2443.02,2.79539 -Exponentials,exp2,f256,exp2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,757.092,1106.06,1.46093,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.46093,no,-,-,-,-,-,-,-,- -Exponentials,expm1,f256,expm1,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,878.107,1104.69,1.25804,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.25804,yes,-,-,-,-,-,-,2423.7,2.76014 -Logarithms,log,f256,log,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1413.03,1770.91,1.25327,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.25327,yes,-,-,-,-,-,-,7702.83,5.45127 -Logarithms,log2,f256,log2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1425.87,1929.84,1.35345,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.35345,no,-,-,-,-,-,-,-,- -Logarithms,log10,f256,log10,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2480.13,3269.47,1.31827,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.31827,yes,-,-,-,-,-,-,8032.74,3.23884 -Logarithms,log1p,f256,log1p,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1442.35,1851.2,1.28347,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.28347,yes,-,-,-,-,-,-,7509.14,5.2062 -Trigonometric,sin,f256,sin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,741.832,1182.39,1.59388,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.59388,yes,-,-,-,-,-,-,2169.49,2.9245 -Trigonometric,cos,f256,cos,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,741.479,838.457,1.13079,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.13079,yes,-,-,-,-,-,-,2165.18,2.92008 -Trigonometric,tan,f256,tan,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,902.144,1364.63,1.51265,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.51265,yes,-,-,-,-,-,-,2629.59,2.91482 -Trigonometric,asin,f256,asin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1237.18,4096.79,3.31138,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.31138,yes,-,-,-,No,-,-,9662.57,7.81013 -Trigonometric,acos,f256,acos,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1265.14,4123.98,3.25969,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.25969,yes,-,-,-,No,-,-,9762.83,7.71678 -Trigonometric,atan,f256,atan,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,796.959,1295.34,1.62535,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.62535,yes,-,-,-,-,-,-,6993.46,8.77518 -Trigonometric,atan2,f256,atan2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,978.001,2836.72,2.90052,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.90052,yes,-,-,-,-,-,-,7025,7.18302 -Hyperbolic,sinh,f256,sinh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1088.62,1160.55,1.06607,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.06607,yes,-,-,-,-,-,-,2769.82,2.54434 -Hyperbolic,cosh,f256,cosh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1103.18,1128.21,1.02269,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.02269,yes,-,-,-,-,-,-,2744.29,2.48761 -Hyperbolic,tanh,f256,tanh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1056.37,1175.73,1.11299,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.11299,yes,-,-,-,-,-,-,2775.43,2.62734 -Inverse hyperbolic,asinh,f256,asinh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1728.9,3449.04,1.99494,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.99494,yes,-,-,-,-,-,-,7636.57,4.41702 -Inverse hyperbolic,acosh,f256,acosh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1671.48,3530.57,2.11224,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.11224,yes,-,-,-,-,-,-,7793.45,4.6626 -Inverse hyperbolic,atanh,f256,atanh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1526.91,2054,1.3452,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.3452,yes,-,-,-,-,-,-,7307.66,4.78591 -Special functions,erfc,f256,erfc,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9447.09,19870.5,2.10334,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.10334,no,-,-,-,-,-,-,-,- -Special functions,erf,f256,erf,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9392.86,12488.7,1.32959,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.32959,no,-,-,-,-,-,-,-,- -Special functions,tgamma,f256,tgamma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,7026.34,10642.8,1.5147,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.5147,no,-,-,-,-,-,-,-,- -Special functions,lgamma,f256,lgamma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,6129.82,13959.5,2.27731,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.27731,no,-,-,-,-,-,-,-,- -Comparisons,operator==,f256,operator==,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.14032,4.57623,2.13811,qdpp (qd_real),-,-,-,0.996646,yes,-,-,-,-,-,-,2.13314,0.996646 -Comparisons,operator!=,f256,operator!=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.1583,4.60757,2.13481,qdpp (qd_real),-,-,-,0.99605,yes,-,-,-,-,-,-,2.14978,0.99605 -Comparisons,operator<,f256,operator<,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.18448,5.94646,2.72214,qdpp (qd_real),-,-,-,1.00803,yes,-,-,-,-,-,-,2.20203,1.00803 -Comparisons,operator>,f256,operator>,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.18323,6.2396,2.85797,qdpp (qd_real),-,-,-,1.01895,yes,-,-,-,-,-,-,2.22461,1.01895 -Comparisons,operator<=,f256,operator<=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.17838,6.02937,2.76782,qdpp (qd_real),-,-,-,1.00513,yes,-,-,-,-,-,-,2.18955,1.00513 -Comparisons,operator>=,f256,operator>=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.20715,6.45274,2.92356,qdpp (qd_real),-,-,-,1.01574,yes,-,-,-,-,-,-,2.24189,1.01574 diff --git a/res/metrics/linux/GCC_f128.csv b/res/metrics/linux/GCC_f128.csv deleted file mode 100644 index 3e1fdf8..0000000 --- a/res/metrics/linux/GCC_f128.csv +++ /dev/null @@ -1,70 +0,0 @@ -group,label,precision,operation,domain,domain_role,samples,primary_competitor,primary_competitor_supported,fltx_worst_bits,fltx_mean_bits,fltx_domain_score,fltx_inf_nan_correct,competitor_worst_bits,competitor_mean_bits,competitor_domain_score,competitor_inf_nan_correct,precision_gap_bits,domain_gap_pp,fltx_ns_iter,competitor_ns_iter,speed_ratio,preferred_reference,preferred_mean_gap_bits,preferred_worst_gap_bits,preferred_domain_gap_pp,preferred_speed_ratio,qdpp (dd_real)_supported,qdpp (dd_real)_worst_bits,qdpp (dd_real)_mean_bits,qdpp (dd_real)_domain_score,qdpp (dd_real)_inf_nan_correct,qdpp (dd_real)_gap_bits,qdpp (dd_real)_domain_gap_pp,qdpp (dd_real)_ns_iter,qdpp (dd_real)_speed_ratio -f128 <-> f128,add,f128,add,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.32447,7.21995,1.66956,qdpp (dd_real),-,-,-,0.985019,yes,-,-,-,-,-,-,4.25968,0.985019 -f128 <-> f128,subtract,f128,subtract,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.26245,7.65955,1.79698,qdpp (dd_real),-,-,-,1.0043,yes,-,-,-,-,-,-,4.2808,1.0043 -f128 <-> f128,multiply,f128,multiply,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.26799,12.1516,2.84715,qdpp (dd_real),-,-,-,1.00416,yes,-,-,-,-,-,-,4.28574,1.00416 -f128 <-> f128,divide,f128,divide,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.27868,13.168,3.07758,boost::multiprecision::cpp_double_double,-,-,-,3.07758,yes,-,-,-,-,-,-,14.3782,3.36042 -Mixed Workloads,affine trig transform,f128,affine transform,mixed,stress,28,boost::multiprecision::cpp_double_double,yes,109.179,109.227,100,-,105.205,107.24,99.4373,-,3.97402,0.562711,135.019,1489.45,11.0314,qdpp (dd_real),2.49603,4.99207,1.28303,2.24878,yes,104.187,106.731,98.717,-,4.99207,1.28303,303.628,2.24878 -Mixed Workloads,mandelbrot kernel,f128,mandelbrot,mixed,stress,3072,boost::multiprecision::cpp_double_double,yes,3.41619,152.228,51.3273,-,3.54951,152.561,51.36,-,-0.133319,-0.0326876,13.2834,28.3687,2.13565,qdpp (dd_real),1.83759,-0.185565,0.724835,1.13037,yes,3.60175,150.39,50.6024,-,-0.185565,0.724835,15.0152,1.13037 -Mixed Workloads,mixed arithmetic,f128,mixed arithmetic,mixed,stress,196,boost::multiprecision::cpp_double_double,yes,99.4338,107.795,99.1173,-,99.4338,107.795,99.1173,-,0,0,39.7098,113.542,2.85929,qdpp (dd_real),1.97331,2.99741,1.00997,2.27529,yes,96.4364,105.821,98.1073,-,2.99741,1.00997,90.3511,2.27529 -Rounding,floor,f128,floor,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.26425,4.24791,0.996168,boost::multiprecision::cpp_double_double,-,-,-,0.996168,yes,-,-,-,-,-,-,4.25035,0.99674 -Rounding,ceil,f128,ceil,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.27945,4.29012,1.00249,qdpp (dd_real),-,-,-,0.990511,yes,-,-,-,-,-,-,4.23884,0.990511 -Rounding,trunc,f128,trunc,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,5.51992,6.91569,1.25286,qdpp (dd_real),-,-,-,0.772757,yes,-,-,-,-,-,-,4.26556,0.772757 -Rounding,round,f128,round,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.3374,10.1198,2.33314,qdpp (dd_real),-,-,-,0.988411,yes,-,-,-,-,-,-,4.28714,0.988411 -Rounding,nearbyint,f128,nearbyint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.95562,10.1045,2.039,qdpp (dd_real),-,-,-,0.865001,yes,-,-,-,-,-,-,4.28662,0.865001 -Rounding,rint,f128,rint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,5.0021,10.0562,2.01039,qdpp (dd_real),-,-,-,0.85491,yes,-,-,-,-,-,-,4.27635,0.85491 -Rounding,lround,f128,lround,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,10.1109,91.9039,9.08958,boost::multiprecision::cpp_double_double,-,-,-,9.08958,no,-,-,-,-,-,-,-,- -Rounding,llround,f128,llround,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,10.0581,91.7637,9.12332,boost::multiprecision::cpp_double_double,-,-,-,9.12332,no,-,-,-,-,-,-,-,- -Rounding,lrint,f128,lrint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,13.5171,91.9755,6.80436,boost::multiprecision::cpp_double_double,-,-,-,6.80436,no,-,-,-,-,-,-,-,- -Rounding,llrint,f128,llrint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,13.4024,92.5711,6.90705,boost::multiprecision::cpp_double_double,-,-,-,6.90705,no,-,-,-,-,-,-,-,- -Remainders,fmod,f128,fmod,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,23.3932,45.4153,1.94139,qdpp (dd_real),-,-,-,1.40182,yes,-,-,-,-,-,-,32.7931,1.40182 -Remainders,remainder,f128,remainder,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,29.9485,48.2712,1.6118,qdpp (dd_real),-,-,-,1.07324,yes,-,-,-,-,-,-,32.1421,1.07324 -Remainders,remquo,f128,remquo,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,30.0925,47.136,1.56637,boost::multiprecision::cpp_double_double,-,-,-,1.56637,no,-,-,-,-,-,-,-,- -Floating-point utilities,abs,f128,fabs,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.26013,4.2705,1.00243,qdpp (dd_real),-,-,-,1.00185,yes,-,-,-,-,-,-,4.26802,1.00185 -Floating-point utilities,fma,f128,fma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.26741,18.491,4.33306,boost::multiprecision::cpp_double_double,-,-,-,4.33306,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmin,f128,fmin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.23982,4.24638,1.00155,boost::multiprecision::cpp_double_double,-,-,-,1.00155,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmax,f128,fmax,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.25467,4.2414,0.99688,boost::multiprecision::cpp_double_double,-,-,-,0.99688,no,-,-,-,-,-,-,-,- -Floating-point utilities,fdim,f128,fdim,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.26892,7.60027,1.78037,boost::multiprecision::cpp_double_double,-,-,-,1.78037,no,-,-,-,-,-,-,-,- -Floating-point utilities,copysign,f128,copysign,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.22758,4.62216,1.09334,boost::multiprecision::cpp_double_double,-,-,-,1.09334,no,-,-,-,-,-,-,-,- -Floating-point utilities,ldexp,f128,ldexp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.23713,4.33526,1.02316,boost::multiprecision::cpp_double_double,-,-,-,1.02316,yes,-,-,-,-,-,-,4.39396,1.03701 -Floating-point utilities,scalbn,f128,scalbn,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.26267,4.38114,1.02779,boost::multiprecision::cpp_double_double,-,-,-,1.02779,yes,-,-,-,-,-,-,4.41049,1.03468 -Floating-point utilities,scalbln,f128,scalbln,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.25309,4.36426,1.02614,boost::multiprecision::cpp_double_double,-,-,-,1.02614,yes,-,-,-,-,-,-,4.3799,1.02982 -Floating-point utilities,frexp,f128,frexp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.37476,6.38392,1.00144,boost::multiprecision::cpp_double_double,-,-,-,1.00144,no,-,-,-,-,-,-,-,- -Floating-point utilities,modf,f128,modf,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,7.08628,11.0596,1.56071,boost::multiprecision::cpp_double_double,-,-,-,1.56071,no,-,-,-,-,-,-,-,- -Floating-point utilities,ilogb,f128,ilogb,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.12977,3.04373,1.42913,boost::multiprecision::cpp_double_double,-,-,-,1.42913,no,-,-,-,-,-,-,-,- -Floating-point utilities,logb,f128,logb,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.24974,25.7581,6.06111,boost::multiprecision::cpp_double_double,-,-,-,6.06111,no,-,-,-,-,-,-,-,- -Floating-point utilities,nextafter,f128,nextafter,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.5899,21.4275,4.66841,boost::multiprecision::cpp_double_double,-,-,-,4.66841,no,-,-,-,-,-,-,-,- -Floating-point utilities,nexttoward(type),f128,nexttoward,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.66483,21.4001,4.58754,boost::multiprecision::cpp_double_double,-,-,-,4.58754,no,-,-,-,-,-,-,-,- -Roots & powers,sqrt,f128,sqrt,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.25673,4.30076,1.01034,boost::multiprecision::cpp_double_double,-,-,-,1.01034,yes,-,-,-,-,-,-,7.5121,1.76476 -Roots & powers,cbrt,f128,cbrt,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,24.5303,337.779,13.7699,qdpp (dd_real),-,-,-,2.93303,yes,-,-,-,-,-,-,71.9481,2.93303 -Roots & powers,hypot,f128,hypot,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,13.3332,60.523,4.53927,boost::multiprecision::cpp_double_double,-,-,-,4.53927,no,-,-,-,-,-,-,-,- -Roots & powers,pow,f128,pow,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,245.012,851.49,3.47529,qdpp (dd_real),-,-,-,1.6145,yes,-,-,-,-,-,-,395.573,1.6145 -Exponentials,exp,f128,exp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,83.5575,369.09,4.41719,qdpp (dd_real),-,-,-,2.10738,yes,-,-,-,-,-,-,176.088,2.10738 -Exponentials,exp2,f128,exp2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,85.3328,853.991,10.0078,boost::multiprecision::cpp_double_double,-,-,-,10.0078,no,-,-,-,-,-,-,-,- -Exponentials,expm1,f128,expm1,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,89.1553,375.805,4.21517,qdpp (dd_real),-,-,-,1.96102,yes,-,-,-,-,-,-,174.836,1.96102 -Logarithms,log,f128,log,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,127.719,426.487,3.33926,qdpp (dd_real),-,-,-,1.57831,yes,-,-,-,-,-,-,201.58,1.57831 -Logarithms,log2,f128,log2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,129.731,437.106,3.36932,boost::multiprecision::cpp_double_double,-,-,-,3.36932,no,-,-,-,-,-,-,-,- -Logarithms,log10,f128,log10,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,129.592,439.261,3.38956,qdpp (dd_real),-,-,-,1.7713,yes,-,-,-,-,-,-,229.547,1.7713 -Logarithms,log1p,f128,log1p,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,139.368,511.068,3.66703,qdpp (dd_real),-,-,-,1.36623,yes,-,-,-,-,-,-,190.409,1.36623 -Trigonometric,sin,f128,sin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,88.4973,693.857,7.84043,qdpp (dd_real),-,-,-,1.87752,yes,-,-,-,-,-,-,166.156,1.87752 -Trigonometric,cos,f128,cos,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,89.0315,697.822,7.83793,qdpp (dd_real),-,-,-,1.86359,yes,-,-,-,-,-,-,165.918,1.86359 -Trigonometric,tan,f128,tan,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,104.226,1398.05,13.4136,qdpp (dd_real),-,-,-,1.99053,yes,-,-,-,No,-,-,207.465,1.99053 -Trigonometric,asin,f128,asin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,178.238,2426.93,13.6163,qdpp (dd_real),-,-,-,1.87421,yes,-,-,-,No,-,-,334.055,1.87421 -Trigonometric,acos,f128,acos,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,183.594,2366.98,12.8925,qdpp (dd_real),-,-,-,1.81744,yes,-,-,-,No,-,-,333.67,1.81744 -Trigonometric,atan,f128,atan,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,125.229,390.71,3.11996,qdpp (dd_real),-,-,-,1.94013,yes,-,-,-,No,-,-,242.961,1.94013 -Trigonometric,atan2,f128,atan2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,143.365,2203.64,15.3709,qdpp (dd_real),-,-,-,1.75863,yes,-,-,-,No,-,-,252.125,1.75863 -Hyperbolic,sinh,f128,sinh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,95.995,393.748,4.10176,qdpp (dd_real),-,-,-,2.11888,yes,-,-,-,-,-,-,203.402,2.11888 -Hyperbolic,cosh,f128,cosh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,94.4009,386.179,4.09084,qdpp (dd_real),-,-,-,2.14668,yes,-,-,-,-,-,-,202.648,2.14668 -Hyperbolic,tanh,f128,tanh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,99.2131,473.771,4.77529,qdpp (dd_real),-,-,-,2.08185,yes,-,-,-,-,-,-,206.547,2.08185 -Inverse hyperbolic,asinh,f128,asinh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,136.516,498.372,3.65066,qdpp (dd_real),-,-,-,1.6767,yes,-,-,-,-,-,-,228.896,1.6767 -Inverse hyperbolic,acosh,f128,acosh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,141.346,485.624,3.43572,qdpp (dd_real),-,-,-,1.57986,yes,-,-,-,-,-,-,223.307,1.57986 -Inverse hyperbolic,atanh,f128,atanh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,118.738,1306.84,11.0061,qdpp (dd_real),-,-,-,1.86599,yes,-,-,-,-,-,-,221.564,1.86599 -Special functions,erfc,f128,erfc,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,653.641,1003.41,1.53511,boost::multiprecision::cpp_double_double,-,-,-,1.53511,no,-,-,-,-,-,-,-,- -Special functions,erf,f128,erf,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,640.485,1012.38,1.58065,boost::multiprecision::cpp_double_double,-,-,-,1.58065,no,-,-,-,-,-,-,-,- -Special functions,tgamma,f128,tgamma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,492.182,2158.07,4.3847,boost::multiprecision::cpp_double_double,-,-,-,4.3847,no,-,-,-,-,-,-,-,- -Special functions,lgamma,f128,lgamma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,523.15,2140.47,4.09149,boost::multiprecision::cpp_double_double,-,-,-,4.09149,no,-,-,-,-,-,-,-,- -Comparisons,operator==,f128,operator==,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.12836,2.40749,1.13115,qdpp (dd_real),-,-,-,0.999899,yes,-,-,-,-,-,-,2.12815,0.999899 -Comparisons,operator!=,f128,operator!=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.12499,2.55947,1.20446,qdpp (dd_real),-,-,-,1.00514,yes,-,-,-,-,-,-,2.13592,1.00514 -Comparisons,operator<,f128,operator<,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.12477,2.50041,1.17679,qdpp (dd_real),-,-,-,1.00226,yes,-,-,-,-,-,-,2.12958,1.00226 -Comparisons,operator>,f128,operator>,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.12981,2.12816,0.999226,boost::multiprecision::cpp_double_double,-,-,-,0.999226,yes,-,-,-,-,-,-,2.13418,1.00205 -Comparisons,operator<=,f128,operator<=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.14291,2.13072,0.994309,boost::multiprecision::cpp_double_double,-,-,-,0.994309,yes,-,-,-,-,-,-,2.13322,0.995476 -Comparisons,operator>=,f128,operator>=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.1351,2.58005,1.2084,qdpp (dd_real),-,-,-,1.00117,yes,-,-,-,-,-,-,2.1376,1.00117 diff --git a/res/metrics/linux/GCC_f256.csv b/res/metrics/linux/GCC_f256.csv deleted file mode 100644 index 04e981b..0000000 --- a/res/metrics/linux/GCC_f256.csv +++ /dev/null @@ -1,70 +0,0 @@ -group,label,precision,operation,domain,domain_role,samples,primary_competitor,primary_competitor_supported,fltx_worst_bits,fltx_mean_bits,fltx_domain_score,fltx_inf_nan_correct,competitor_worst_bits,competitor_mean_bits,competitor_domain_score,competitor_inf_nan_correct,precision_gap_bits,domain_gap_pp,fltx_ns_iter,competitor_ns_iter,speed_ratio,preferred_reference,preferred_mean_gap_bits,preferred_worst_gap_bits,preferred_domain_gap_pp,preferred_speed_ratio,qdpp (qd_real)_supported,qdpp (qd_real)_worst_bits,qdpp (qd_real)_mean_bits,qdpp (qd_real)_domain_score,qdpp (qd_real)_inf_nan_correct,qdpp (qd_real)_gap_bits,qdpp (qd_real)_domain_gap_pp,qdpp (qd_real)_ns_iter,qdpp (qd_real)_speed_ratio -f256 <-> f256,add,f256,add,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.3966,33.5339,2.50316,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.50316,yes,-,-,-,-,-,-,41.1397,3.0709 -f256 <-> f256,subtract,f256,subtract,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.5713,33.9272,2.49993,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.49993,yes,-,-,-,-,-,-,42.8735,3.15914 -f256 <-> f256,multiply,f256,multiply,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,18.0966,38.3351,2.11837,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.11837,yes,-,-,-,-,-,-,41.7052,2.30459 -f256 <-> f256,divide,f256,divide,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,74.8011,67.2595,0.899178,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.899178,yes,-,-,-,-,-,-,354.002,4.73257 -Mixed Workloads,affine trig transform,f256,affine transform,mixed,stress,28,boost::multiprecision::mpfr_float_backend<64>,yes,211.085,211.715,99.6764,-,214.628,215.967,100,-,-3.54282,-0.323583,1223.38,2490.24,2.03555,boost::multiprecision::mpfr_float_backend<64>,-4.25129,-3.54282,-0.323583,2.03555,yes,216.748,218.127,100,-,-5.66305,-0.323583,3719.61,3.04044 -Mixed Workloads,mandelbrot kernel,f256,mandelbrot,mixed,stress,3072,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,-,exact,320,100,-,0,0,130.626,185.84,1.42269,boost::multiprecision::mpfr_float_backend<64>,0,0,0,1.42269,yes,exact,320,100,-,0,0,219.943,1.68376 -Mixed Workloads,mixed arithmetic,f256,mixed arithmetic,mixed,stress,196,boost::multiprecision::mpfr_float_backend<64>,yes,205.264,213.582,99.4457,-,207.626,213.954,99.6266,-,-2.36159,-0.180957,367.317,515.311,1.4029,boost::multiprecision::mpfr_float_backend<64>,-0.372262,-2.36159,-0.180957,1.4029,yes,209.969,217.238,99.8643,-,-4.70507,-0.418591,1245.74,3.39145 -Rounding,floor,f256,floor,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.46332,20.3529,2.40484,qdpp (qd_real),-,-,-,1.00478,yes,-,-,-,-,-,-,8.50375,1.00478 -Rounding,ceil,f256,ceil,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.50303,20.3774,2.39648,qdpp (qd_real),-,-,-,1.01,yes,-,-,-,-,-,-,8.58808,1.01 -Rounding,trunc,f256,trunc,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.619,19.8062,2.29797,qdpp (qd_real),-,-,-,0.992789,yes,-,-,-,-,-,-,8.55684,0.992789 -Rounding,round,f256,round,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.65493,38.2772,4.42259,qdpp (qd_real),-,-,-,0.988403,yes,-,-,-,-,-,-,8.55456,0.988403 -Rounding,nearbyint,f256,nearbyint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.51998,38.2905,4.49419,qdpp (qd_real),-,-,-,1.0026,yes,-,-,-,-,-,-,8.54215,1.0026 -Rounding,rint,f256,rint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.5447,38.6762,4.52634,qdpp (qd_real),-,-,-,1.0092,yes,-,-,-,-,-,-,8.62334,1.0092 -Rounding,lround,f256,lround,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,10.1365,50.0826,4.94084,boost::multiprecision::mpfr_float_backend<64>,-,-,-,4.94084,no,-,-,-,-,-,-,-,- -Rounding,llround,f256,llround,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,10.1635,50.1099,4.9304,boost::multiprecision::mpfr_float_backend<64>,-,-,-,4.9304,no,-,-,-,-,-,-,-,- -Rounding,lrint,f256,lrint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,10.0537,50.4222,5.01528,boost::multiprecision::mpfr_float_backend<64>,-,-,-,5.01528,no,-,-,-,-,-,-,-,- -Rounding,llrint,f256,llrint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9.91949,50.9742,5.1388,boost::multiprecision::mpfr_float_backend<64>,-,-,-,5.1388,no,-,-,-,-,-,-,-,- -Remainders,fmod,f256,fmod,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,100.708,81.927,0.813514,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.813514,yes,-,-,-,-,-,-,458.816,4.55592 -Remainders,remainder,f256,remainder,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,131.731,99.9723,0.758912,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.758912,yes,-,-,-,-,-,-,458.472,3.48036 -Remainders,remquo,f256,remquo,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,132.765,100.817,0.759359,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.759359,no,-,-,-,-,-,-,-,- -Floating-point utilities,abs,f256,fabs,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.4975,18.6704,2.19716,qdpp (qd_real),-,-,-,0.99951,yes,-,-,-,-,-,-,8.49334,0.99951 -Floating-point utilities,fma,f256,fma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,31.2155,54.0405,1.73121,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.73121,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmin,f256,fmin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.68088,28.8465,3.323,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.323,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmax,f256,fmax,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.58752,27.9221,3.25147,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.25147,no,-,-,-,-,-,-,-,- -Floating-point utilities,fdim,f256,fdim,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9.38997,26.9808,2.87337,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.87337,no,-,-,-,-,-,-,-,- -Floating-point utilities,copysign,f256,copysign,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.5085,23.4291,2.75361,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.75361,no,-,-,-,-,-,-,-,- -Floating-point utilities,ldexp,f256,ldexp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.46206,24.5689,2.90342,qdpp (qd_real),-,-,-,1.02976,yes,-,-,-,-,-,-,8.71392,1.02976 -Floating-point utilities,scalbn,f256,scalbn,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.50496,24.3981,2.86869,qdpp (qd_real),-,-,-,1.01975,yes,-,-,-,-,-,-,8.67289,1.01975 -Floating-point utilities,scalbln,f256,scalbln,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.52983,24.258,2.84391,qdpp (qd_real),-,-,-,1.01633,yes,-,-,-,-,-,-,8.66911,1.01633 -Floating-point utilities,frexp,f256,frexp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,10.6225,25.0054,2.35399,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.35399,no,-,-,-,-,-,-,-,- -Floating-point utilities,modf,f256,modf,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.71,50.2985,3.66875,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.66875,no,-,-,-,-,-,-,-,- -Floating-point utilities,ilogb,f256,ilogb,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.14059,14.4023,6.7282,boost::multiprecision::mpfr_float_backend<64>,-,-,-,6.7282,no,-,-,-,-,-,-,-,- -Floating-point utilities,logb,f256,logb,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.46355,30.4493,3.59769,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.59769,no,-,-,-,-,-,-,-,- -Floating-point utilities,nextafter,f256,nextafter,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.52459,226.429,26.5619,boost::multiprecision::mpfr_float_backend<64>,-,-,-,26.5619,no,-,-,-,-,-,-,-,- -Floating-point utilities,nexttoward(type),f256,nexttoward,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.62777,229.07,26.5504,boost::multiprecision::mpfr_float_backend<64>,-,-,-,26.5504,no,-,-,-,-,-,-,-,- -Roots & powers,sqrt,f256,sqrt,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,107.971,96.5924,0.894615,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.894615,yes,-,-,-,-,-,-,598.18,5.54019 -Roots & powers,cbrt,f256,cbrt,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,345.006,306.846,0.889393,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.889393,yes,-,-,-,-,-,-,1396.62,4.04809 -Roots & powers,hypot,f256,hypot,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,183.716,267.34,1.45518,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.45518,no,-,-,-,-,-,-,-,- -Roots & powers,pow,f256,pow,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2367.32,2901.01,1.22544,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.22544,yes,-,-,-,-,-,-,11464.2,4.84268 -Exponentials,exp,f256,exp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,876.021,961.821,1.09794,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.09794,yes,-,-,-,-,-,-,2806.11,3.20324 -Exponentials,exp2,f256,exp2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,761.741,1071.49,1.40664,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.40664,no,-,-,-,-,-,-,-,- -Exponentials,expm1,f256,expm1,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,884.668,1065.4,1.2043,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.2043,yes,-,-,-,-,-,-,2786.29,3.14953 -Logarithms,log,f256,log,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1419.18,1779.98,1.25423,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.25423,yes,-,-,-,-,-,-,8832.81,6.22387 -Logarithms,log2,f256,log2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1460.85,1933.09,1.32326,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.32326,no,-,-,-,-,-,-,-,- -Logarithms,log10,f256,log10,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2528.63,3267.11,1.29205,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.29205,yes,-,-,-,-,-,-,9151.95,3.61934 -Logarithms,log1p,f256,log1p,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1452.78,1802.2,1.24051,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.24051,yes,-,-,-,-,-,-,8607.1,5.92457 -Trigonometric,sin,f256,sin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,737.948,1163.6,1.5768,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.5768,yes,-,-,-,-,-,-,2465.36,3.34083 -Trigonometric,cos,f256,cos,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,736.769,843.34,1.14465,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.14465,yes,-,-,-,-,-,-,2468.59,3.35056 -Trigonometric,tan,f256,tan,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,951.819,1340.97,1.40885,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.40885,yes,-,-,-,-,-,-,2967.84,3.11807 -Trigonometric,asin,f256,asin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1244.98,4154.95,3.33736,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.33736,yes,-,-,-,No,-,-,11043.2,8.87019 -Trigonometric,acos,f256,acos,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1268.31,4217.71,3.32546,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.32546,yes,-,-,-,No,-,-,11056,8.71712 -Trigonometric,atan,f256,atan,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,788.358,1342.28,1.70263,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.70263,yes,-,-,-,-,-,-,7967.14,10.106 -Trigonometric,atan2,f256,atan2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,958.006,2917.66,3.04555,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.04555,yes,-,-,-,-,-,-,7965.74,8.31492 -Hyperbolic,sinh,f256,sinh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1076.97,1107.15,1.02802,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.02802,yes,-,-,-,-,-,-,3149.53,2.92443 -Hyperbolic,cosh,f256,cosh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1087.73,1084.14,0.996698,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.996698,yes,-,-,-,-,-,-,3142.22,2.8888 -Hyperbolic,tanh,f256,tanh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1061.21,1147.71,1.08151,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.08151,yes,-,-,-,-,-,-,3166.15,2.98352 -Inverse hyperbolic,asinh,f256,asinh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1725.15,3458.46,2.00474,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.00474,yes,-,-,-,-,-,-,8861.73,5.1368 -Inverse hyperbolic,acosh,f256,acosh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1729.88,3558.08,2.05684,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.05684,yes,-,-,-,-,-,-,9048.39,5.23065 -Inverse hyperbolic,atanh,f256,atanh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1561.85,2040.75,1.30662,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.30662,yes,-,-,-,-,-,-,8426.84,5.39542 -Special functions,erfc,f256,erfc,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9289.31,19680.6,2.11863,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.11863,no,-,-,-,-,-,-,-,- -Special functions,erf,f256,erf,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9247.24,12404.4,1.34141,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.34141,no,-,-,-,-,-,-,-,- -Special functions,tgamma,f256,tgamma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,7387.18,10581.7,1.43244,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.43244,no,-,-,-,-,-,-,-,- -Special functions,lgamma,f256,lgamma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,6501.48,13907.3,2.1391,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.1391,no,-,-,-,-,-,-,-,- -Comparisons,operator==,f256,operator==,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.16851,4.85677,2.23968,qdpp (qd_real),-,-,-,0.995831,yes,-,-,-,-,-,-,2.15947,0.995831 -Comparisons,operator!=,f256,operator!=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.1752,5.16176,2.37301,qdpp (qd_real),-,-,-,1.00393,yes,-,-,-,-,-,-,2.18374,1.00393 -Comparisons,operator<,f256,operator<,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.20233,5.72524,2.59962,qdpp (qd_real),-,-,-,1.01071,yes,-,-,-,-,-,-,2.22591,1.01071 -Comparisons,operator>,f256,operator>,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.19527,6.26683,2.85469,qdpp (qd_real),-,-,-,1.00692,yes,-,-,-,-,-,-,2.21047,1.00692 -Comparisons,operator<=,f256,operator<=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.22046,6.1682,2.7779,qdpp (qd_real),-,-,-,1.01307,yes,-,-,-,-,-,-,2.24947,1.01307 -Comparisons,operator>=,f256,operator>=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.1942,5.82617,2.65526,qdpp (qd_real),-,-,-,1.00254,yes,-,-,-,-,-,-,2.19978,1.00254 diff --git a/res/metrics/macOS/AppleClang_f128.csv b/res/metrics/macOS/AppleClang_f128.csv deleted file mode 100644 index 0b80659..0000000 --- a/res/metrics/macOS/AppleClang_f128.csv +++ /dev/null @@ -1,70 +0,0 @@ -group,label,precision,operation,domain,domain_role,samples,primary_competitor,primary_competitor_supported,fltx_worst_bits,fltx_mean_bits,fltx_domain_score,fltx_inf_nan_correct,competitor_worst_bits,competitor_mean_bits,competitor_domain_score,competitor_inf_nan_correct,precision_gap_bits,domain_gap_pp,fltx_ns_iter,competitor_ns_iter,speed_ratio,preferred_reference,preferred_mean_gap_bits,preferred_worst_gap_bits,preferred_domain_gap_pp,preferred_speed_ratio,qdpp (dd_real)_supported,qdpp (dd_real)_worst_bits,qdpp (dd_real)_mean_bits,qdpp (dd_real)_domain_score,qdpp (dd_real)_inf_nan_correct,qdpp (dd_real)_gap_bits,qdpp (dd_real)_domain_gap_pp,qdpp (dd_real)_ns_iter,qdpp (dd_real)_speed_ratio -f128 <-> f128,add,f128,add,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,7.38841,7.04947,0.954126,qdpp (dd_real),-,-,-,0.945035,yes,-,-,-,-,-,-,6.98231,0.945035 -f128 <-> f128,subtract,f128,subtract,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.97113,7.0309,1.00857,qdpp (dd_real),-,-,-,1.00453,yes,-,-,-,-,-,-,7.00274,1.00453 -f128 <-> f128,multiply,f128,multiply,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.9574,7.03513,1.01117,qdpp (dd_real),-,-,-,1.00487,yes,-,-,-,-,-,-,6.99125,1.00487 -f128 <-> f128,divide,f128,divide,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.98957,7.01707,1.00393,boost::multiprecision::cpp_double_double,-,-,-,1.00393,yes,-,-,-,-,-,-,15.6406,2.23771 -Mixed Workloads,affine trig transform,f128,affine transform,mixed,stress,28,boost::multiprecision::cpp_double_double,yes,109.276,110.689,100,-,105.205,107.24,99.4373,-,4.07101,0.562711,202.281,1847.24,9.13209,qdpp (dd_real),3.95738,5.08906,1.28303,2.14035,yes,104.187,106.731,98.717,-,5.08906,1.28303,432.951,2.14035 -Mixed Workloads,mandelbrot kernel,f128,mandelbrot,mixed,stress,3072,boost::multiprecision::cpp_double_double,yes,3.41619,152.228,51.3273,-,3.54951,152.561,51.36,-,-0.133319,-0.0326876,30.032,34.0933,1.13523,qdpp (dd_real),1.83759,-0.185565,0.724835,0.960146,yes,3.60175,150.39,50.6024,-,-0.185565,0.724835,28.8351,0.960146 -Mixed Workloads,mixed arithmetic,f128,mixed arithmetic,mixed,stress,196,boost::multiprecision::cpp_double_double,yes,101.15,107.768,99.3608,-,101.15,107.768,99.3608,-,0,0,35.378,75.9132,2.14577,boost::multiprecision::cpp_double_double,0,0,0,2.14577,yes,97.9223,106.017,98.3071,-,3.22762,1.05362,105.541,2.98323 -Rounding,floor,f128,floor,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.97104,6.87461,0.986167,boost::multiprecision::cpp_double_double,-,-,-,0.986167,yes,-,-,-,-,-,-,6.93121,0.994286 -Rounding,ceil,f128,ceil,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.96435,6.87365,0.986976,boost::multiprecision::cpp_double_double,-,-,-,0.986976,yes,-,-,-,-,-,-,6.95483,0.998633 -Rounding,trunc,f128,trunc,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.98719,6.88265,0.985038,boost::multiprecision::cpp_double_double,-,-,-,0.985038,yes,-,-,-,-,-,-,6.94698,0.994246 -Rounding,round,f128,round,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.98905,7.8415,1.12197,qdpp (dd_real),-,-,-,0.997043,yes,-,-,-,-,-,-,6.96838,0.997043 -Rounding,nearbyint,f128,nearbyint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.98073,7.44419,1.06639,qdpp (dd_real),-,-,-,0.990765,yes,-,-,-,-,-,-,6.91627,0.990765 -Rounding,rint,f128,rint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.96743,7.51065,1.07797,qdpp (dd_real),-,-,-,0.987945,yes,-,-,-,-,-,-,6.88344,0.987945 -Rounding,lround,f128,lround,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,8.85377,1589.05,179.478,boost::multiprecision::cpp_double_double,-,-,-,179.478,no,-,-,-,-,-,-,-,- -Rounding,llround,f128,llround,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,9.11003,1590.04,174.537,boost::multiprecision::cpp_double_double,-,-,-,174.537,no,-,-,-,-,-,-,-,- -Rounding,lrint,f128,lrint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,10.2165,1592.35,155.861,boost::multiprecision::cpp_double_double,-,-,-,155.861,no,-,-,-,-,-,-,-,- -Rounding,llrint,f128,llrint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,10.0732,1590.31,157.876,boost::multiprecision::cpp_double_double,-,-,-,157.876,no,-,-,-,-,-,-,-,- -Remainders,fmod,f128,fmod,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,34.2761,64.0202,1.86778,qdpp (dd_real),-,-,-,1.02837,yes,-,-,-,-,-,-,35.2487,1.02837 -Remainders,remainder,f128,remainder,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,38.8579,66.2564,1.7051,qdpp (dd_real),-,-,-,0.819717,yes,-,-,-,-,-,-,31.8525,0.819717 -Remainders,remquo,f128,remquo,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,39.1299,66.3852,1.69654,boost::multiprecision::cpp_double_double,-,-,-,1.69654,no,-,-,-,-,-,-,-,- -Floating-point utilities,abs,f128,fabs,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.89752,6.87153,0.996232,boost::multiprecision::cpp_double_double,-,-,-,0.996232,yes,-,-,-,-,-,-,6.93944,1.00608 -Floating-point utilities,fma,f128,fma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.96499,12.3033,1.76644,boost::multiprecision::cpp_double_double,-,-,-,1.76644,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmin,f128,fmin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,7.14302,6.99247,0.978923,boost::multiprecision::cpp_double_double,-,-,-,0.978923,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmax,f128,fmax,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.97523,6.99535,1.00288,boost::multiprecision::cpp_double_double,-,-,-,1.00288,no,-,-,-,-,-,-,-,- -Floating-point utilities,fdim,f128,fdim,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,7.00403,6.97059,0.995225,boost::multiprecision::cpp_double_double,-,-,-,0.995225,no,-,-,-,-,-,-,-,- -Floating-point utilities,copysign,f128,copysign,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,7.04057,6.88466,0.977855,boost::multiprecision::cpp_double_double,-,-,-,0.977855,no,-,-,-,-,-,-,-,- -Floating-point utilities,ldexp,f128,ldexp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.91567,6.90106,0.997887,boost::multiprecision::cpp_double_double,-,-,-,0.997887,yes,-,-,-,-,-,-,7.00287,1.01261 -Floating-point utilities,scalbn,f128,scalbn,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,7.02719,7.01432,0.998168,qdpp (dd_real),-,-,-,0.995095,yes,-,-,-,-,-,-,6.99272,0.995095 -Floating-point utilities,scalbln,f128,scalbln,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.95684,7.01521,1.00839,boost::multiprecision::cpp_double_double,-,-,-,1.00839,yes,-,-,-,-,-,-,7.03724,1.01156 -Floating-point utilities,frexp,f128,frexp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,10.5078,10.6445,1.01301,boost::multiprecision::cpp_double_double,-,-,-,1.01301,no,-,-,-,-,-,-,-,- -Floating-point utilities,modf,f128,modf,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,7.01924,9.07471,1.29283,boost::multiprecision::cpp_double_double,-,-,-,1.29283,no,-,-,-,-,-,-,-,- -Floating-point utilities,ilogb,f128,ilogb,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,3.50274,3.59788,1.02716,boost::multiprecision::cpp_double_double,-,-,-,1.02716,no,-,-,-,-,-,-,-,- -Floating-point utilities,logb,f128,logb,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.9894,264.254,37.8079,boost::multiprecision::cpp_double_double,-,-,-,37.8079,no,-,-,-,-,-,-,-,- -Floating-point utilities,nextafter,f128,nextafter,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,7.00634,22.7295,3.24414,boost::multiprecision::cpp_double_double,-,-,-,3.24414,no,-,-,-,-,-,-,-,- -Floating-point utilities,nexttoward(type),f128,nexttoward,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.99998,22.6753,3.23934,boost::multiprecision::cpp_double_double,-,-,-,3.23934,no,-,-,-,-,-,-,-,- -Roots & powers,sqrt,f128,sqrt,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,7.01755,7.05135,1.00482,qdpp (dd_real),-,-,-,0.993472,yes,-,-,-,-,-,-,6.97174,0.993472 -Roots & powers,cbrt,f128,cbrt,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,13.8469,632.792,45.6993,qdpp (dd_real),-,-,-,7.4788,yes,-,-,-,-,-,-,103.558,7.4788 -Roots & powers,hypot,f128,hypot,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,12.5918,68.8209,5.46555,boost::multiprecision::cpp_double_double,-,-,-,5.46555,no,-,-,-,-,-,-,-,- -Roots & powers,pow,f128,pow,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,423.086,1153.88,2.7273,qdpp (dd_real),-,-,-,1.64,yes,-,-,-,-,-,-,693.859,1.64 -Exponentials,exp,f128,exp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,144.966,523.889,3.61387,qdpp (dd_real),-,-,-,2.00304,yes,-,-,-,-,-,-,290.373,2.00304 -Exponentials,exp2,f128,exp2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,147.582,1166.28,7.90258,boost::multiprecision::cpp_double_double,-,-,-,7.90258,no,-,-,-,-,-,-,-,- -Exponentials,expm1,f128,expm1,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,150.36,535.74,3.56305,qdpp (dd_real),-,-,-,1.9425,yes,-,-,-,-,-,-,292.075,1.9425 -Logarithms,log,f128,log,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,211.828,584.006,2.75698,qdpp (dd_real),-,-,-,1.55317,yes,-,-,-,-,-,-,329.004,1.55317 -Logarithms,log2,f128,log2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,217.064,607.944,2.80076,boost::multiprecision::cpp_double_double,-,-,-,2.80076,no,-,-,-,-,-,-,-,- -Logarithms,log10,f128,log10,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,217.592,608.25,2.79537,qdpp (dd_real),-,-,-,1.73954,yes,-,-,-,-,-,-,378.509,1.73954 -Logarithms,log1p,f128,log1p,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,229.369,653.993,2.85126,qdpp (dd_real),-,-,-,1.40488,yes,-,-,-,-,-,-,322.237,1.40488 -Trigonometric,sin,f128,sin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,133.959,887.127,6.62239,qdpp (dd_real),-,-,-,1.9963,yes,-,-,-,-,-,-,267.421,1.9963 -Trigonometric,cos,f128,cos,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,132.45,897.122,6.77327,qdpp (dd_real),-,-,-,2.01192,yes,-,-,-,-,-,-,266.48,2.01192 -Trigonometric,tan,f128,tan,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,162.803,1791.44,11.0038,qdpp (dd_real),-,-,-,2.00103,yes,-,-,-,No,-,-,325.772,2.00103 -Trigonometric,asin,f128,asin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,274.351,3267.63,11.9104,qdpp (dd_real),-,-,-,1.78828,yes,-,-,-,No,-,-,490.618,1.78828 -Trigonometric,acos,f128,acos,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,283.155,3169.6,11.1939,qdpp (dd_real),-,-,-,1.74516,yes,-,-,-,No,-,-,494.151,1.74516 -Trigonometric,atan,f128,atan,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,189.747,498.555,2.62747,qdpp (dd_real),-,-,-,1.78567,yes,-,-,-,No,-,-,338.826,1.78567 -Trigonometric,atan2,f128,atan2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,224.322,2990.59,13.3317,qdpp (dd_real),-,-,-,1.53077,yes,-,-,-,No,-,-,343.386,1.53077 -Hyperbolic,sinh,f128,sinh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,165.076,565.933,3.42832,qdpp (dd_real),-,-,-,2.11382,yes,-,-,-,-,-,-,348.942,2.11382 -Hyperbolic,cosh,f128,cosh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,162.584,552.176,3.39625,qdpp (dd_real),-,-,-,2.13855,yes,-,-,-,-,-,-,347.694,2.13855 -Hyperbolic,tanh,f128,tanh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,174.915,669.293,3.82638,qdpp (dd_real),-,-,-,2.01833,yes,-,-,-,-,-,-,353.036,2.01833 -Inverse hyperbolic,asinh,f128,asinh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,235.352,662.314,2.81414,qdpp (dd_real),-,-,-,1.59266,yes,-,-,-,-,-,-,374.838,1.59266 -Inverse hyperbolic,acosh,f128,acosh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,241.285,638.824,2.64759,qdpp (dd_real),-,-,-,1.51931,yes,-,-,-,-,-,-,366.588,1.51931 -Inverse hyperbolic,atanh,f128,atanh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,187.41,1419.16,7.5725,qdpp (dd_real),-,-,-,2.02231,yes,-,-,-,-,-,-,379,2.02231 -Special functions,erfc,f128,erfc,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,920.021,1351.18,1.46864,boost::multiprecision::cpp_double_double,-,-,-,1.46864,no,-,-,-,-,-,-,-,- -Special functions,erf,f128,erf,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,919.137,1360.95,1.48068,boost::multiprecision::cpp_double_double,-,-,-,1.48068,no,-,-,-,-,-,-,-,- -Special functions,tgamma,f128,tgamma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,874.236,3011.71,3.44496,boost::multiprecision::cpp_double_double,-,-,-,3.44496,no,-,-,-,-,-,-,-,- -Special functions,lgamma,f128,lgamma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,883.781,2954.08,3.34255,boost::multiprecision::cpp_double_double,-,-,-,3.34255,no,-,-,-,-,-,-,-,- -Comparisons,operator==,f128,operator==,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,3.50677,3.47953,0.992233,boost::multiprecision::cpp_double_double,-,-,-,0.992233,yes,-,-,-,-,-,-,3.51237,1.0016 -Comparisons,operator!=,f128,operator!=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,3.50793,3.47537,0.990717,boost::multiprecision::cpp_double_double,-,-,-,0.990717,yes,-,-,-,-,-,-,3.49535,0.996413 -Comparisons,operator<,f128,operator<,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,3.5271,3.79282,1.07534,qdpp (dd_real),-,-,-,0.979377,yes,-,-,-,-,-,-,3.45436,0.979377 -Comparisons,operator>,f128,operator>,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,3.5116,3.52481,1.00376,qdpp (dd_real),-,-,-,1.00178,yes,-,-,-,-,-,-,3.51784,1.00178 -Comparisons,operator<=,f128,operator<=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,3.56565,3.48464,0.977282,boost::multiprecision::cpp_double_double,-,-,-,0.977282,yes,-,-,-,-,-,-,3.49098,0.97906 -Comparisons,operator>=,f128,operator>=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,3.572,3.72796,1.04366,qdpp (dd_real),-,-,-,0.977986,yes,-,-,-,-,-,-,3.49337,0.977986 diff --git a/res/metrics/macOS/AppleClang_f256.csv b/res/metrics/macOS/AppleClang_f256.csv deleted file mode 100644 index bbc8ba1..0000000 --- a/res/metrics/macOS/AppleClang_f256.csv +++ /dev/null @@ -1,70 +0,0 @@ -group,label,precision,operation,domain,domain_role,samples,primary_competitor,primary_competitor_supported,fltx_worst_bits,fltx_mean_bits,fltx_domain_score,fltx_inf_nan_correct,competitor_worst_bits,competitor_mean_bits,competitor_domain_score,competitor_inf_nan_correct,precision_gap_bits,domain_gap_pp,fltx_ns_iter,competitor_ns_iter,speed_ratio,preferred_reference,preferred_mean_gap_bits,preferred_worst_gap_bits,preferred_domain_gap_pp,preferred_speed_ratio,qdpp (qd_real)_supported,qdpp (qd_real)_worst_bits,qdpp (qd_real)_mean_bits,qdpp (qd_real)_domain_score,qdpp (qd_real)_inf_nan_correct,qdpp (qd_real)_gap_bits,qdpp (qd_real)_domain_gap_pp,qdpp (qd_real)_ns_iter,qdpp (qd_real)_speed_ratio -f256 <-> f256,add,f256,add,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,15.5628,51.1527,3.28686,qdpp (qd_real),-,-,-,2.80061,yes,-,-,-,-,-,-,43.5854,2.80061 -f256 <-> f256,subtract,f256,subtract,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,15.6269,51.5663,3.29983,qdpp (qd_real),-,-,-,2.95126,yes,-,-,-,-,-,-,46.1192,2.95126 -f256 <-> f256,multiply,f256,multiply,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,20.8341,68.5034,3.28804,qdpp (qd_real),-,-,-,1.67294,yes,-,-,-,-,-,-,34.8541,1.67294 -f256 <-> f256,divide,f256,divide,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,123.669,118.107,0.955028,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.955028,yes,-,-,-,-,-,-,401.255,3.24459 -Mixed Workloads,affine trig transform,f256,affine transform,mixed,stress,28,boost::multiprecision::mpfr_float_backend<64>,yes,211.085,211.715,99.6764,-,214.628,215.967,100,-,-3.54282,-0.323583,1498.79,4195.39,2.79919,qdpp (qd_real),-6.41207,-5.66305,-0.323583,2.776,yes,216.748,218.127,100,-,-5.66305,-0.323583,4160.64,2.776 -Mixed Workloads,mandelbrot kernel,f256,mandelbrot,mixed,stress,3072,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,-,exact,320,100,-,0,0,159.19,382.972,2.40575,qdpp (qd_real),0,0,0,1.90559,yes,exact,320,100,-,0,0,303.352,1.90559 -Mixed Workloads,mixed arithmetic,f256,mixed arithmetic,mixed,stress,196,boost::multiprecision::mpfr_float_backend<64>,yes,206.62,213.861,99.5384,-,207.146,214.099,99.596,-,-0.526346,-0.0576514,517.459,1158.37,2.23858,boost::multiprecision::mpfr_float_backend<64>,-0.238925,-0.526346,-0.0576514,2.23858,yes,208.541,216.957,99.7676,-,-1.92155,-0.229226,1463.72,2.82866 -Rounding,floor,f256,floor,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,14.0361,43.058,3.06766,qdpp (qd_real),-,-,-,0.983469,yes,-,-,-,-,-,-,13.8041,0.983469 -Rounding,ceil,f256,ceil,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,14.0206,43.2234,3.08285,qdpp (qd_real),-,-,-,0.984937,yes,-,-,-,-,-,-,13.8094,0.984937 -Rounding,trunc,f256,trunc,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.9957,40.7249,2.90981,qdpp (qd_real),-,-,-,0.984435,yes,-,-,-,-,-,-,13.7779,0.984435 -Rounding,round,f256,round,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.9915,94.3857,6.74594,qdpp (qd_real),-,-,-,0.981623,yes,-,-,-,-,-,-,13.7344,0.981623 -Rounding,nearbyint,f256,nearbyint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.9893,94.6946,6.76909,qdpp (qd_real),-,-,-,0.983365,yes,-,-,-,-,-,-,13.7565,0.983365 -Rounding,rint,f256,rint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,14.0358,95.1168,6.77672,qdpp (qd_real),-,-,-,0.978348,yes,-,-,-,-,-,-,13.7319,0.978348 -Rounding,lround,f256,lround,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9.27102,130.382,14.0634,boost::multiprecision::mpfr_float_backend<64>,-,-,-,14.0634,no,-,-,-,-,-,-,-,- -Rounding,llround,f256,llround,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9.29331,131.217,14.1195,boost::multiprecision::mpfr_float_backend<64>,-,-,-,14.1195,no,-,-,-,-,-,-,-,- -Rounding,lrint,f256,lrint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,10.5362,130.027,12.341,boost::multiprecision::mpfr_float_backend<64>,-,-,-,12.341,no,-,-,-,-,-,-,-,- -Rounding,llrint,f256,llrint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,10.4028,130.918,12.5848,boost::multiprecision::mpfr_float_backend<64>,-,-,-,12.5848,no,-,-,-,-,-,-,-,- -Remainders,fmod,f256,fmod,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,140.92,174.285,1.23676,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.23676,yes,-,-,-,-,-,-,507.848,3.60379 -Remainders,remainder,f256,remainder,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,181.391,200.59,1.10584,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.10584,yes,-,-,-,-,-,-,525.326,2.8961 -Remainders,remquo,f256,remquo,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,183.136,208.296,1.13738,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.13738,no,-,-,-,-,-,-,-,- -Floating-point utilities,abs,f256,fabs,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,14.0109,34.7142,2.47765,qdpp (qd_real),-,-,-,0.983417,yes,-,-,-,-,-,-,13.7786,0.983417 -Floating-point utilities,fma,f256,fma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,25.007,88.7491,3.54897,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.54897,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmin,f256,fmin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.951,44.4382,3.1853,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.1853,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmax,f256,fmax,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.9614,44.6878,3.2008,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.2008,no,-,-,-,-,-,-,-,- -Floating-point utilities,fdim,f256,fdim,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,14.0373,46.6113,3.32052,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.32052,no,-,-,-,-,-,-,-,- -Floating-point utilities,copysign,f256,copysign,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,14.2186,38.8804,2.73449,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.73449,no,-,-,-,-,-,-,-,- -Floating-point utilities,ldexp,f256,ldexp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.9942,41.1236,2.93862,qdpp (qd_real),-,-,-,0.983825,yes,-,-,-,-,-,-,13.7678,0.983825 -Floating-point utilities,scalbn,f256,scalbn,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,14.0108,41.6274,2.9711,qdpp (qd_real),-,-,-,0.982766,yes,-,-,-,-,-,-,13.7693,0.982766 -Floating-point utilities,scalbln,f256,scalbln,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.9842,41.9951,3.00303,qdpp (qd_real),-,-,-,1.00427,yes,-,-,-,-,-,-,14.0439,1.00427 -Floating-point utilities,frexp,f256,frexp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,17.9949,42.4141,2.357,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.357,no,-,-,-,-,-,-,-,- -Floating-point utilities,modf,f256,modf,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,16.7446,110.86,6.6206,boost::multiprecision::mpfr_float_backend<64>,-,-,-,6.6206,no,-,-,-,-,-,-,-,- -Floating-point utilities,ilogb,f256,ilogb,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,3.43822,34.0033,9.88982,boost::multiprecision::mpfr_float_backend<64>,-,-,-,9.88982,no,-,-,-,-,-,-,-,- -Floating-point utilities,logb,f256,logb,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.8557,75.3606,5.43896,boost::multiprecision::mpfr_float_backend<64>,-,-,-,5.43896,no,-,-,-,-,-,-,-,- -Floating-point utilities,nextafter,f256,nextafter,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.9356,517.6,37.1424,boost::multiprecision::mpfr_float_backend<64>,-,-,-,37.1424,no,-,-,-,-,-,-,-,- -Floating-point utilities,nexttoward(type),f256,nexttoward,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.8662,516.394,37.2412,boost::multiprecision::mpfr_float_backend<64>,-,-,-,37.2412,no,-,-,-,-,-,-,-,- -Roots & powers,sqrt,f256,sqrt,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,156.583,162.503,1.0378,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.0378,yes,-,-,-,-,-,-,699.89,4.46976 -Roots & powers,cbrt,f256,cbrt,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,530.925,476.094,0.896726,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.896726,yes,-,-,-,-,-,-,1734.19,3.26635 -Roots & powers,hypot,f256,hypot,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,253.063,505.649,1.99812,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.99812,no,-,-,-,-,-,-,-,- -Roots & powers,pow,f256,pow,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,3483.65,4400.11,1.26307,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.26307,yes,-,-,-,-,-,-,12832.6,3.68365 -Exponentials,exp,f256,exp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1261.23,1479.9,1.17337,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.17337,yes,-,-,-,-,-,-,3118.02,2.47221 -Exponentials,exp2,f256,exp2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1090.02,1719.11,1.57714,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.57714,no,-,-,-,-,-,-,-,- -Exponentials,expm1,f256,expm1,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1284.05,1628.8,1.26849,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.26849,yes,-,-,-,-,-,-,3101.52,2.41543 -Logarithms,log,f256,log,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2057.71,2713.27,1.31859,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.31859,yes,-,-,-,-,-,-,9882.08,4.80247 -Logarithms,log2,f256,log2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2097.61,2926.44,1.39513,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.39513,no,-,-,-,-,-,-,-,- -Logarithms,log10,f256,log10,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,3640.95,5251.34,1.4423,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.4423,yes,-,-,-,-,-,-,10303.8,2.82996 -Logarithms,log1p,f256,log1p,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2092.92,2776.2,1.32647,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.32647,yes,-,-,-,-,-,-,9687,4.62847 -Trigonometric,sin,f256,sin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1031.4,1822.14,1.76667,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.76667,yes,-,-,-,-,-,-,2744.13,2.6606 -Trigonometric,cos,f256,cos,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1036.07,1475.17,1.42381,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.42381,yes,-,-,-,-,-,-,2747.81,2.65215 -Trigonometric,tan,f256,tan,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1129.08,2038.88,1.80579,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.80579,yes,-,-,-,-,-,-,3311.57,2.93298 -Trigonometric,asin,f256,asin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1911.74,5885.84,3.07878,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.07878,yes,-,-,-,No,-,-,12464,6.5197 -Trigonometric,acos,f256,acos,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1931.2,5999.79,3.10677,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.10677,yes,-,-,-,No,-,-,12478.7,6.46167 -Trigonometric,atan,f256,atan,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1127.75,1923.82,1.70589,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.70589,yes,-,-,-,-,-,-,9264.03,8.21458 -Trigonometric,atan2,f256,atan2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1455.75,4155,2.8542,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.8542,yes,-,-,-,-,-,-,9230.57,6.34076 -Hyperbolic,sinh,f256,sinh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1643.61,1690.63,1.0286,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.0286,yes,-,-,-,-,-,-,3529.94,2.14767 -Hyperbolic,cosh,f256,cosh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1681.94,1661.03,0.987569,boost::multiprecision::mpfr_float_backend<64>,-,-,-,0.987569,yes,-,-,-,-,-,-,3542.71,2.10633 -Hyperbolic,tanh,f256,tanh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1632.73,1733.67,1.06182,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.06182,yes,-,-,-,-,-,-,3570.25,2.18667 -Inverse hyperbolic,asinh,f256,asinh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2615.05,5218.48,1.99556,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.99556,yes,-,-,-,-,-,-,10067.3,3.84977 -Inverse hyperbolic,acosh,f256,acosh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2540.03,5369.83,2.11408,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.11408,yes,-,-,-,-,-,-,10304.6,4.05689 -Inverse hyperbolic,atanh,f256,atanh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2413.89,3103.77,1.2858,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.2858,yes,-,-,-,-,-,-,9584.98,3.97076 -Special functions,erfc,f256,erfc,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,15789.6,26593.8,1.68426,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.68426,no,-,-,-,-,-,-,-,- -Special functions,erf,f256,erf,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,15799.8,16811.1,1.06401,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.06401,no,-,-,-,-,-,-,-,- -Special functions,tgamma,f256,tgamma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,10710.1,16084.1,1.50177,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.50177,no,-,-,-,-,-,-,-,- -Special functions,lgamma,f256,lgamma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9501.92,21146.6,2.22551,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.22551,no,-,-,-,-,-,-,-,- -Comparisons,operator==,f256,operator==,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,3.47538,6.92235,1.99183,qdpp (qd_real),-,-,-,0.987249,yes,-,-,-,-,-,-,3.43106,0.987249 -Comparisons,operator!=,f256,operator!=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,3.4846,7.02707,2.01661,qdpp (qd_real),-,-,-,0.984418,yes,-,-,-,-,-,-,3.43031,0.984418 -Comparisons,operator<,f256,operator<,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,3.48522,6.96694,1.999,qdpp (qd_real),-,-,-,1.00608,yes,-,-,-,-,-,-,3.5064,1.00608 -Comparisons,operator>,f256,operator>,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,3.49429,6.88404,1.97009,qdpp (qd_real),-,-,-,1.01022,yes,-,-,-,-,-,-,3.53,1.01022 -Comparisons,operator<=,f256,operator<=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,3.47874,6.96035,2.00083,qdpp (qd_real),-,-,-,0.994206,yes,-,-,-,-,-,-,3.45859,0.994206 -Comparisons,operator>=,f256,operator>=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,3.4758,7.00403,2.01508,qdpp (qd_real),-,-,-,1.00429,yes,-,-,-,-,-,-,3.49072,1.00429 diff --git a/res/metrics/metrics_table.svg b/res/metrics/metrics_table.svg deleted file mode 100644 index 51c3196..0000000 --- a/res/metrics/metrics_table.svg +++ /dev/null @@ -1,2752 +0,0 @@ - -fltx metrics -Nanoseconds per iteration for bl::f128/bl::f256 metrics, colored by speed ratio vs the stronger available reference. - -fltx metrics -Nanoseconds per iteration for bl::f128/bl::f256 metrics, colored by speed ratio vs the stronger available reference. -cpp_dd -= -boost::multiprecision::cpp_double_double -dd_real -= -qdpp (dd_real) -mpfr -= -boost::multiprecision::mpfr_float_backend<64> -qd_real -= -qdpp (qd_real) - -Function - -bl::f128 - -bl::f256 - -Windows - -Linux - -MacOS - -WebAssembly - -Windows - -Linux - -MacOS - -WebAssembly - -MSVC - -MinGW - -GCC - -Clang - -AppleClang - -Wasm32 - -MSVC - -MinGW - -GCC - -Clang - -AppleClang - -Wasm32 - - - - -Arithmetic - -add - -4.25ns -dd_real: 1.01x - -4.39ns -dd_real: 1.01x - -4.32ns -dd_real: 0.99x - -4.30ns -dd_real: 1.00x - -7.39ns -dd_real: 0.95x - -4.30ns -cpp_dd: 1.01x - -13.4ns -qd_real: 2.60x - -14.2ns -qd_real: 2.89x - -13.4ns -mpfr: 2.50x - -12.6ns -mpfr: 2.74x - -15.6ns -qd_real: 2.80x - -15.6ns -qd_real: 2.43x - -subtract - -4.24ns -dd_real: 1.03x - -4.37ns -dd_real: 1.00x - -4.26ns -dd_real: 1.00x - -4.28ns -dd_real: 0.99x - -6.97ns -dd_real: 1.00x - -4.30ns -cpp_dd: 1.01x - -13.4ns -qd_real: 2.66x - -13.3ns -qd_real: 3.04x - -13.6ns -mpfr: 2.50x - -12.8ns -mpfr: 2.64x - -15.6ns -qd_real: 2.95x - -13.8ns -qd_real: 3.11x - -multiply - -4.43ns -dd_real: 0.96x - -4.35ns -dd_real: 0.98x - -4.27ns -dd_real: 1.00x - -4.27ns -dd_real: 1.00x - -6.96ns -dd_real: 1.00x - -4.38ns -dd_real: 1.38x - -17.4ns -qd_real: 1.21x - -20.8ns -qd_real: 2.29x - -18.1ns -mpfr: 2.12x - -28.8ns -qd_real: 1.05x - -20.8ns -qd_real: 1.67x - -25.4ns -qd_real: 1.63x - -divide - -4.25ns -cpp_dd: 2.12x - -4.30ns -dd_real: 3.33x - -4.28ns -cpp_dd: 3.08x - -4.31ns -cpp_dd: 1.12x - -6.99ns -cpp_dd: 1.00x - -4.57ns -cpp_dd: 1.40x - -77.0ns -mpfr: 1.49x - -81.7ns -mpfr: 2.08x - -74.8ns -mpfr: 0.90x - -81.8ns -mpfr: 0.79x - -124ns -mpfr: 0.96x - -87.1ns -mpfr: 2.36x - - - - -Mixed Workloads - -affine trig transform - -124ns -dd_real: 1.58x - -140ns -dd_real: 2.36x - -135ns -dd_real: 2.25x - -128ns -dd_real: 1.84x - -202ns -dd_real: 2.14x - -223ns -dd_real: 1.17x - -1,265ns -qd_real: 2.08x - -1,241ns -qd_real: 3.15x - -1,223ns -mpfr: 2.04x - -1,182ns -mpfr: 2.11x - -1,499ns -qd_real: 2.78x - -1,524ns -qd_real: 2.05x - -mandelbrot kernel - -13.7ns -dd_real: 0.97x - -13.6ns -dd_real: 1.19x - -13.3ns -dd_real: 1.13x - -15.9ns -dd_real: 1.16x - -30.0ns -dd_real: 0.96x - -30.5ns -dd_real: 0.77x - -123ns -qd_real: 1.58x - -131ns -qd_real: 1.67x - -131ns -mpfr: 1.42x - -150ns -mpfr: 1.20x - -159ns -qd_real: 1.91x - -145ns -qd_real: 1.49x - -mixed arithmetic - -35.7ns -dd_real: 1.70x - -43.2ns -dd_real: 2.29x - -39.7ns -dd_real: 2.28x - -34.0ns -cpp_dd: 1.93x - -35.4ns -cpp_dd: 2.15x - -59.1ns -cpp_dd: 1.49x - -360ns -qd_real: 2.52x - -361ns -qd_real: 3.64x - -367ns -mpfr: 1.40x - -360ns -mpfr: 1.43x - -517ns -mpfr: 2.24x - -500ns -qd_real: 1.99x - - - - -Rounding - -floor - -4.22ns -dd_real: 0.99x - -4.24ns -dd_real: 1.00x - -4.26ns -cpp_dd: 1.00x - -4.27ns -cpp_dd: 1.00x - -6.97ns -cpp_dd: 0.99x - -4.26ns -cpp_dd: 0.99x - -8.42ns -qd_real: 1.00x - -8.65ns -qd_real: 1.00x - -8.46ns -qd_real: 1.00x - -8.60ns -qd_real: 0.98x - -14.0ns -qd_real: 0.98x - -8.83ns -qd_real: 0.99x - -ceil - -4.20ns -dd_real: 1.00x - -4.27ns -dd_real: 0.99x - -4.28ns -dd_real: 0.99x - -4.30ns -dd_real: 1.00x - -6.96ns -cpp_dd: 0.99x - -4.25ns -dd_real: 1.00x - -8.42ns -qd_real: 1.00x - -8.64ns -qd_real: 1.00x - -8.50ns -qd_real: 1.01x - -8.45ns -qd_real: 1.01x - -14.0ns -qd_real: 0.98x - -8.76ns -qd_real: 1.00x - -trunc - -4.22ns -dd_real: 1.03x - -5.46ns -dd_real: 0.83x - -5.52ns -dd_real: 0.77x - -4.30ns -dd_real: 1.08x - -6.99ns -cpp_dd: 0.99x - -5.56ns -dd_real: 0.85x - -8.95ns -qd_real: 0.94x - -8.65ns -qd_real: 1.00x - -8.62ns -qd_real: 0.99x - -8.51ns -qd_real: 1.00x - -14.0ns -qd_real: 0.98x - -8.86ns -qd_real: 1.00x - -round - -4.90ns -cpp_dd: 2.81x - -4.88ns -cpp_dd: 2.62x - -4.34ns -dd_real: 0.99x - -4.33ns -dd_real: 1.00x - -6.99ns -dd_real: 1.00x - -8.35ns -cpp_dd: 1.31x - -12.6ns -mpfr: 6.39x - -8.69ns -qd_real: 1.53x - -8.65ns -qd_real: 0.99x - -8.48ns -qd_real: 1.01x - -14.0ns -qd_real: 0.98x - -9.55ns -qd_real: 1.63x - -nearbyint - -6.22ns -cpp_dd: 2.21x - -6.44ns -cpp_dd: 1.78x - -4.96ns -dd_real: 0.87x - -4.97ns -dd_real: 0.87x - -6.98ns -dd_real: 0.99x - -7.65ns -cpp_dd: 1.41x - -12.6ns -mpfr: 6.40x - -8.50ns -qd_real: 1.56x - -8.52ns -qd_real: 1.00x - -8.49ns -qd_real: 1.00x - -14.0ns -qd_real: 0.98x - -9.56ns -qd_real: 1.63x - -rint - -6.22ns -cpp_dd: 2.22x - -6.36ns -cpp_dd: 1.84x - -5.00ns -dd_real: 0.85x - -4.83ns -dd_real: 0.89x - -6.97ns -dd_real: 0.99x - -7.53ns -cpp_dd: 1.43x - -12.3ns -mpfr: 6.66x - -8.58ns -qd_real: 1.54x - -8.54ns -qd_real: 1.01x - -8.46ns -qd_real: 1.01x - -14.0ns -qd_real: 0.98x - -9.63ns -qd_real: 1.54x - -lround - -13.9ns -cpp_dd: 1.97x - -10.5ns -cpp_dd: 2.31x - -10.1ns -cpp_dd: 9.09x - -13.0ns -cpp_dd: 26.90x - -8.85ns -cpp_dd: 179.48x - -9.04ns -cpp_dd: 2.30x - -12.1ns -mpfr: 10.07x - -10.1ns -mpfr: 15.12x - -10.1ns -mpfr: 4.94x - -10.4ns -mpfr: 5.03x - -9.27ns -mpfr: 14.06x - -12.0ns -mpfr: 9.06x - -llround - -13.8ns -cpp_dd: 31.57x - -12.3ns -cpp_dd: 9.40x - -10.1ns -cpp_dd: 9.12x - -12.7ns -cpp_dd: 27.62x - -9.11ns -cpp_dd: 174.54x - -8.93ns -cpp_dd: 73.18x - -11.6ns -mpfr: 18.09x - -10.1ns -mpfr: 24.10x - -10.2ns -mpfr: 4.93x - -10.5ns -mpfr: 5.06x - -9.29ns -mpfr: 14.12x - -12.1ns -mpfr: 14.54x - -lrint - -14.0ns -cpp_dd: 1.96x - -14.2ns -cpp_dd: 1.72x - -13.5ns -cpp_dd: 6.80x - -13.0ns -cpp_dd: 26.57x - -10.2ns -cpp_dd: 155.86x - -11.1ns -cpp_dd: 1.85x - -11.8ns -mpfr: 9.89x - -10.3ns -mpfr: 14.85x - -10.1ns -mpfr: 5.02x - -12.1ns -mpfr: 4.31x - -10.5ns -mpfr: 12.34x - -14.0ns -mpfr: 7.86x - -llrint - -13.6ns -cpp_dd: 32.41x - -13.6ns -cpp_dd: 8.61x - -13.4ns -cpp_dd: 6.91x - -13.2ns -cpp_dd: 26.48x - -10.1ns -cpp_dd: 157.88x - -11.1ns -cpp_dd: 56.18x - -11.4ns -mpfr: 18.42x - -10.2ns -mpfr: 24.12x - -9.92ns -mpfr: 5.14x - -11.7ns -mpfr: 4.44x - -10.4ns -mpfr: 12.58x - -14.3ns -mpfr: 12.28x - - - - -Remainders - -fmod - -24.0ns -dd_real: 1.08x - -31.0ns -dd_real: 1.02x - -23.4ns -dd_real: 1.40x - -28.8ns -dd_real: 1.05x - -34.3ns -dd_real: 1.03x - -22.6ns -dd_real: 1.55x - -94.7ns -qd_real: 4.03x - -104ns -mpfr: 2.82x - -101ns -mpfr: 0.81x - -89.8ns -mpfr: 0.92x - -141ns -mpfr: 1.24x - -115ns -mpfr: 1.66x - -remainder - -27.6ns -dd_real: 0.95x - -33.3ns -dd_real: 1.29x - -29.9ns -dd_real: 1.07x - -31.9ns -dd_real: 0.98x - -38.9ns -dd_real: 0.82x - -35.1ns -dd_real: 1.30x - -121ns -qd_real: 3.14x - -136ns -mpfr: 2.37x - -132ns -mpfr: 0.76x - -115ns -mpfr: 0.87x - -181ns -mpfr: 1.11x - -149ns -mpfr: 1.46x - -remquo - -28.1ns -cpp_dd: 1.80x - -32.9ns -cpp_dd: 6.87x - -30.1ns -cpp_dd: 1.57x - -32.4ns -cpp_dd: 1.59x - -39.1ns -cpp_dd: 1.70x - -35.8ns -cpp_dd: 1.40x - -123ns -mpfr: 1.97x - -136ns -mpfr: 2.44x - -133ns -mpfr: 0.76x - -116ns -mpfr: 0.88x - -183ns -mpfr: 1.14x - -139ns -mpfr: 1.66x - - - - -Floating-point utilities - -abs - -4.21ns -dd_real: 1.00x - -4.25ns -dd_real: 1.00x - -4.26ns -dd_real: 1.00x - -4.28ns -dd_real: 1.00x - -6.90ns -cpp_dd: 1.00x - -4.72ns -cpp_dd: 0.95x - -8.44ns -qd_real: 1.00x - -8.68ns -qd_real: 1.00x - -8.50ns -qd_real: 1.00x - -8.50ns -qd_real: 1.00x - -14.0ns -qd_real: 0.98x - -8.80ns -qd_real: 1.00x - -fma - -4.21ns -cpp_dd: 3.05x - -4.66ns -cpp_dd: 28.46x - -4.27ns -cpp_dd: 4.33x - -4.27ns -cpp_dd: 4.03x - -6.96ns -cpp_dd: 1.77x - -5.04ns -cpp_dd: 3.51x - -26.0ns -mpfr: 3.26x - -36.4ns -mpfr: 4.90x - -31.2ns -mpfr: 1.73x - -25.4ns -mpfr: 2.11x - -25.0ns -mpfr: 3.55x - -48.6ns -mpfr: 3.85x - -fmin - -4.20ns -cpp_dd: 1.63x - -4.29ns -cpp_dd: 1.00x - -4.24ns -cpp_dd: 1.00x - -4.31ns -cpp_dd: 1.00x - -7.14ns -cpp_dd: 0.98x - -5.61ns -cpp_dd: 0.96x - -8.46ns -mpfr: 5.95x - -8.50ns -mpfr: 7.55x - -8.68ns -mpfr: 3.32x - -8.54ns -mpfr: 3.06x - -14.0ns -mpfr: 3.19x - -8.83ns -mpfr: 7.14x - -fmax - -4.20ns -cpp_dd: 1.70x - -4.32ns -cpp_dd: 0.99x - -4.25ns -cpp_dd: 1.00x - -4.31ns -cpp_dd: 1.00x - -6.98ns -cpp_dd: 1.00x - -5.31ns -cpp_dd: 1.11x - -8.43ns -mpfr: 5.86x - -8.49ns -mpfr: 7.61x - -8.59ns -mpfr: 3.25x - -8.53ns -mpfr: 3.00x - -14.0ns -mpfr: 3.20x - -9.07ns -mpfr: 6.94x - -fdim - -4.23ns -cpp_dd: 2.22x - -4.30ns -cpp_dd: 1.98x - -4.27ns -cpp_dd: 1.78x - -4.31ns -cpp_dd: 1.15x - -7.00ns -cpp_dd: 1.00x - -5.98ns -cpp_dd: 1.15x - -9.72ns -mpfr: 5.02x - -9.71ns -mpfr: 5.38x - -9.39ns -mpfr: 2.87x - -9.02ns -mpfr: 3.00x - -14.0ns -mpfr: 3.32x - -13.3ns -mpfr: 4.41x - -copysign - -4.21ns -cpp_dd: 1.00x - -4.34ns -cpp_dd: 1.20x - -4.23ns -cpp_dd: 1.09x - -4.29ns -cpp_dd: 1.00x - -7.04ns -cpp_dd: 0.98x - -4.30ns -cpp_dd: 1.01x - -8.41ns -mpfr: 8.07x - -8.46ns -mpfr: 7.11x - -8.51ns -mpfr: 2.75x - -8.57ns -mpfr: 2.86x - -14.2ns -mpfr: 2.73x - -8.80ns -mpfr: 6.50x - -ldexp - -4.23ns -dd_real: 1.04x - -4.31ns -dd_real: 2.50x - -4.24ns -cpp_dd: 1.02x - -4.31ns -dd_real: 1.02x - -6.92ns -cpp_dd: 1.00x - -4.28ns -cpp_dd: 1.02x - -8.41ns -qd_real: 1.03x - -9.10ns -qd_real: 1.97x - -8.46ns -qd_real: 1.03x - -8.49ns -qd_real: 1.03x - -14.0ns -qd_real: 0.98x - -8.95ns -qd_real: 1.72x - -scalbn - -4.24ns -dd_real: 1.04x - -4.22ns -cpp_dd: 2.25x - -4.26ns -cpp_dd: 1.03x - -4.31ns -cpp_dd: 1.03x - -7.03ns -dd_real: 1.00x - -4.29ns -cpp_dd: 1.02x - -8.41ns -qd_real: 1.03x - -9.11ns -qd_real: 1.96x - -8.50ns -qd_real: 1.02x - -8.49ns -qd_real: 1.02x - -14.0ns -qd_real: 0.98x - -9.00ns -qd_real: 1.71x - -scalbln - -4.24ns -dd_real: 1.04x - -4.30ns -dd_real: 2.24x - -4.25ns -cpp_dd: 1.03x - -4.30ns -dd_real: 1.02x - -6.96ns -cpp_dd: 1.01x - -4.32ns -cpp_dd: 1.02x - -8.41ns -qd_real: 1.03x - -9.08ns -qd_real: 1.97x - -8.53ns -qd_real: 1.02x - -8.60ns -qd_real: 1.01x - -14.0ns -qd_real: 1.00x - -8.85ns -qd_real: 1.74x - -frexp - -6.31ns -cpp_dd: 1.02x - -6.52ns -cpp_dd: 1.84x - -6.37ns -cpp_dd: 1.00x - -6.38ns -cpp_dd: 1.02x - -10.5ns -cpp_dd: 1.01x - -6.49ns -cpp_dd: 1.00x - -10.6ns -mpfr: 4.31x - -14.1ns -mpfr: 3.64x - -10.6ns -mpfr: 2.35x - -12.7ns -mpfr: 1.96x - -18.0ns -mpfr: 2.36x - -14.7ns -mpfr: 2.81x - -modf - -5.98ns -cpp_dd: 2.42x - -7.28ns -cpp_dd: 1.73x - -7.09ns -cpp_dd: 1.56x - -5.14ns -cpp_dd: 1.58x - -7.02ns -cpp_dd: 1.29x - -6.83ns -cpp_dd: 1.60x - -28.6ns -mpfr: 3.49x - -14.4ns -mpfr: 9.53x - -13.7ns -mpfr: 3.67x - -12.9ns -mpfr: 3.91x - -16.7ns -mpfr: 6.62x - -14.9ns -mpfr: 7.36x - -ilogb - -2.11ns -cpp_dd: 2.49x - -2.18ns -cpp_dd: 3.98x - -2.13ns -cpp_dd: 1.43x - -2.17ns -cpp_dd: 1.39x - -3.50ns -cpp_dd: 1.03x - -2.18ns -cpp_dd: 1.32x - -2.13ns -mpfr: 15.30x - -2.15ns -mpfr: 19.02x - -2.14ns -mpfr: 6.73x - -2.16ns -mpfr: 6.78x - -3.44ns -mpfr: 9.89x - -2.74ns -mpfr: 9.23x - -logb - -4.21ns -cpp_dd: 19.69x - -4.30ns -cpp_dd: 9.17x - -4.25ns -cpp_dd: 6.06x - -4.29ns -cpp_dd: 14.36x - -6.99ns -cpp_dd: 37.81x - -4.28ns -cpp_dd: 23.07x - -8.41ns -mpfr: 7.86x - -8.72ns -mpfr: 10.15x - -8.46ns -mpfr: 3.60x - -8.47ns -mpfr: 3.70x - -13.9ns -mpfr: 5.44x - -8.83ns -mpfr: 8.38x - -nextafter - -7.91ns -cpp_dd: 8.81x - -4.88ns -cpp_dd: 7.46x - -4.59ns -cpp_dd: 4.67x - -4.52ns -cpp_dd: 4.72x - -7.01ns -cpp_dd: 3.24x - -7.75ns -cpp_dd: 3.34x - -9.26ns -mpfr: 58.39x - -8.57ns -mpfr: 81.85x - -8.52ns -mpfr: 26.56x - -8.48ns -mpfr: 25.53x - -13.9ns -mpfr: 37.14x - -12.0ns -mpfr: 35.91x - -nexttoward(type) - -7.90ns -cpp_dd: 8.92x - -4.76ns -cpp_dd: 7.70x - -4.66ns -cpp_dd: 4.59x - -4.54ns -cpp_dd: 4.82x - -7.00ns -cpp_dd: 3.24x - -7.71ns -cpp_dd: 3.35x - -9.89ns -mpfr: 52.81x - -8.53ns -mpfr: 82.89x - -8.63ns -mpfr: 26.55x - -8.60ns -mpfr: 25.23x - -13.9ns -mpfr: 37.24x - -9.36ns -mpfr: 45.85x - - - - -Roots & powers - -sqrt - -4.32ns -dd_real: 1.24x - -4.69ns -dd_real: 1.26x - -4.26ns -cpp_dd: 1.01x - -4.37ns -cpp_dd: 0.98x - -7.02ns -dd_real: 0.99x - -4.35ns -cpp_dd: 0.99x - -113ns -mpfr: 1.16x - -115ns -mpfr: 1.63x - -108ns -mpfr: 0.89x - -94.7ns -mpfr: 1.03x - -157ns -mpfr: 1.04x - -133ns -mpfr: 1.93x - -cbrt - -23.5ns -dd_real: 2.79x - -78.0ns -dd_real: 1.84x - -24.5ns -dd_real: 2.93x - -20.4ns -dd_real: 3.41x - -13.8ns -dd_real: 7.48x - -23.7ns -dd_real: 3.35x - -344ns -mpfr: 1.23x - -391ns -mpfr: 1.39x - -345ns -mpfr: 0.89x - -334ns -mpfr: 0.94x - -531ns -mpfr: 0.90x - -408ns -mpfr: 1.90x - -hypot - -15.2ns -cpp_dd: 4.08x - -14.6ns -cpp_dd: 38.45x - -13.3ns -cpp_dd: 4.54x - -10.5ns -cpp_dd: 6.01x - -12.6ns -cpp_dd: 5.47x - -13.2ns -cpp_dd: 4.90x - -183ns -mpfr: 2.68x - -190ns -mpfr: 4.35x - -184ns -mpfr: 1.46x - -159ns -mpfr: 1.72x - -253ns -mpfr: 2.00x - -230ns -mpfr: 4.20x - -pow - -234ns -dd_real: 1.17x - -270ns -dd_real: 1.85x - -245ns -dd_real: 1.61x - -237ns -dd_real: 1.45x - -423ns -dd_real: 1.64x - -309ns -dd_real: 1.19x - -2,419ns -mpfr: 1.57x - -2,600ns -mpfr: 2.22x - -2,367ns -mpfr: 1.23x - -2,375ns -mpfr: 1.26x - -3,484ns -mpfr: 1.26x - -2,938ns -mpfr: 3.22x - - - - -Exponentials - -exp - -96.4ns -dd_real: 1.21x - -88.2ns -dd_real: 2.29x - -83.6ns -dd_real: 2.11x - -83.3ns -dd_real: 1.87x - -145ns -dd_real: 2.00x - -132ns -dd_real: 1.25x - -901ns -mpfr: 1.37x - -879ns -mpfr: 1.61x - -876ns -mpfr: 1.10x - -874ns -mpfr: 1.14x - -1,261ns -mpfr: 1.17x - -1,084ns -qd_real: 2.26x - -exp2 - -96.0ns -cpp_dd: 8.56x - -93.8ns -cpp_dd: 59.61x - -85.3ns -cpp_dd: 10.01x - -86.6ns -cpp_dd: 8.70x - -148ns -cpp_dd: 7.90x - -123ns -cpp_dd: 5.79x - -775ns -mpfr: 1.92x - -768ns -mpfr: 2.50x - -762ns -mpfr: 1.41x - -757ns -mpfr: 1.46x - -1,090ns -mpfr: 1.58x - -993ns -mpfr: 3.80x - -expm1 - -99.5ns -dd_real: 1.18x - -87.7ns -dd_real: 2.31x - -89.2ns -dd_real: 1.96x - -86.8ns -dd_real: 1.79x - -150ns -dd_real: 1.94x - -130ns -dd_real: 1.26x - -900ns -mpfr: 1.52x - -886ns -mpfr: 1.75x - -885ns -mpfr: 1.20x - -878ns -mpfr: 1.26x - -1,284ns -mpfr: 1.27x - -1,041ns -qd_real: 2.35x - - - - -Logarithms - -log - -112ns -dd_real: 1.25x - -130ns -dd_real: 2.01x - -128ns -dd_real: 1.58x - -128ns -dd_real: 1.40x - -212ns -dd_real: 1.55x - -160ns -dd_real: 1.18x - -1,446ns -mpfr: 1.64x - -1,469ns -mpfr: 2.15x - -1,419ns -mpfr: 1.25x - -1,413ns -mpfr: 1.25x - -2,058ns -mpfr: 1.32x - -1,980ns -mpfr: 2.88x - -log2 - -115ns -cpp_dd: 3.59x - -160ns -cpp_dd: 18.99x - -130ns -cpp_dd: 3.37x - -130ns -cpp_dd: 3.00x - -217ns -cpp_dd: 2.80x - -166ns -cpp_dd: 2.20x - -1,473ns -mpfr: 1.78x - -1,556ns -mpfr: 2.50x - -1,461ns -mpfr: 1.32x - -1,426ns -mpfr: 1.35x - -2,098ns -mpfr: 1.40x - -1,846ns -mpfr: 3.50x - -log10 - -116ns -dd_real: 1.40x - -133ns -dd_real: 2.15x - -130ns -dd_real: 1.77x - -130ns -dd_real: 1.57x - -218ns -dd_real: 1.74x - -165ns -dd_real: 1.29x - -2,546ns -mpfr: 1.81x - -2,687ns -mpfr: 2.31x - -2,529ns -mpfr: 1.29x - -2,480ns -mpfr: 1.32x - -3,641ns -mpfr: 1.44x - -3,199ns -qd_real: 2.46x - -log1p - -120ns -dd_real: 1.10x - -141ns -dd_real: 1.84x - -139ns -dd_real: 1.37x - -135ns -dd_real: 1.27x - -229ns -dd_real: 1.40x - -161ns -dd_real: 1.11x - -1,476ns -mpfr: 1.65x - -1,582ns -mpfr: 2.09x - -1,453ns -mpfr: 1.24x - -1,442ns -mpfr: 1.28x - -2,093ns -mpfr: 1.33x - -1,916ns -mpfr: 3.14x - - - - -Trigonometric - -sin - -83.4ns -dd_real: 1.46x - -89.7ns -dd_real: 2.50x - -88.5ns -dd_real: 1.88x - -83.5ns -dd_real: 1.77x - -134ns -dd_real: 2.00x - -109ns -dd_real: 1.54x - -817ns -mpfr: 2.04x - -750ns -mpfr: 3.43x - -738ns -mpfr: 1.58x - -742ns -mpfr: 1.59x - -1,031ns -mpfr: 1.77x - -934ns -qd_real: 2.33x - -cos - -83.4ns -dd_real: 1.45x - -92.1ns -dd_real: 2.43x - -89.0ns -dd_real: 1.86x - -84.5ns -dd_real: 1.77x - -132ns -dd_real: 2.01x - -109ns -dd_real: 1.52x - -809ns -mpfr: 1.56x - -762ns -mpfr: 2.20x - -737ns -mpfr: 1.14x - -741ns -mpfr: 1.13x - -1,036ns -mpfr: 1.42x - -911ns -qd_real: 2.38x - -tan - -95.3ns -dd_real: 1.62x - -98.7ns -dd_real: 2.52x - -104ns -dd_real: 1.99x - -99.3ns -dd_real: 1.73x - -163ns -dd_real: 2.00x - -130ns -dd_real: 1.50x - -992ns -mpfr: 1.89x - -967ns -mpfr: 2.75x - -952ns -mpfr: 1.41x - -902ns -mpfr: 1.51x - -1,129ns -mpfr: 1.81x - -1,155ns -qd_real: 2.23x - -asin - -156ns -dd_real: 1.59x - -191ns -dd_real: 1.95x - -178ns -dd_real: 1.87x - -165ns -dd_real: 1.68x - -274ns -dd_real: 1.79x - -203ns -dd_real: 1.46x - -1,294ns -mpfr: 4.65x - -1,282ns -mpfr: 5.91x - -1,245ns -mpfr: 3.34x - -1,237ns -mpfr: 3.31x - -1,912ns -mpfr: 3.08x - -1,536ns -qd_real: 6.08x - -acos - -162ns -dd_real: 1.52x - -190ns -dd_real: 2.05x - -184ns -dd_real: 1.82x - -171ns -dd_real: 1.61x - -283ns -dd_real: 1.75x - -208ns -dd_real: 1.43x - -1,366ns -mpfr: 4.50x - -1,360ns -mpfr: 5.59x - -1,268ns -mpfr: 3.33x - -1,265ns -mpfr: 3.26x - -1,931ns -mpfr: 3.11x - -1,499ns -qd_real: 6.30x - -atan - -110ns -dd_real: 1.69x - -127ns -dd_real: 2.33x - -125ns -dd_real: 1.94x - -113ns -dd_real: 1.82x - -190ns -dd_real: 1.79x - -147ns -dd_real: 1.46x - -839ns -mpfr: 2.30x - -785ns -mpfr: 4.14x - -788ns -mpfr: 1.70x - -797ns -mpfr: 1.63x - -1,128ns -mpfr: 1.71x - -962ns -mpfr: 4.13x - -atan2 - -127ns -dd_real: 1.52x - -144ns -dd_real: 2.11x - -143ns -dd_real: 1.76x - -135ns -dd_real: 1.55x - -224ns -dd_real: 1.53x - -169ns -dd_real: 1.30x - -1,017ns -mpfr: 4.19x - -960ns -mpfr: 6.03x - -958ns -mpfr: 3.05x - -978ns -mpfr: 2.90x - -1,456ns -mpfr: 2.85x - -1,134ns -qd_real: 5.87x - - - - -Hyperbolic - -sinh - -107ns -dd_real: 1.31x - -101ns -dd_real: 2.42x - -96.0ns -dd_real: 2.12x - -96.3ns -dd_real: 1.88x - -165ns -dd_real: 2.11x - -139ns -dd_real: 1.39x - -1,113ns -mpfr: 1.29x - -1,144ns -mpfr: 1.73x - -1,077ns -mpfr: 1.03x - -1,089ns -mpfr: 1.07x - -1,644ns -mpfr: 1.03x - -1,332ns -qd_real: 2.02x - -cosh - -104ns -dd_real: 1.36x - -101ns -dd_real: 2.28x - -94.4ns -dd_real: 2.15x - -94.6ns -dd_real: 1.93x - -163ns -dd_real: 2.14x - -139ns -dd_real: 1.38x - -1,132ns -mpfr: 1.25x - -1,115ns -mpfr: 1.63x - -1,088ns -mpfr: 1.00x - -1,103ns -mpfr: 1.02x - -1,682ns -mpfr: 0.99x - -1,354ns -qd_real: 2.01x - -tanh - -112ns -dd_real: 1.29x - -98.8ns -dd_real: 2.37x - -99.2ns -dd_real: 2.08x - -100ns -dd_real: 1.84x - -175ns -dd_real: 2.02x - -143ns -dd_real: 1.39x - -1,103ns -mpfr: 1.35x - -1,084ns -mpfr: 1.64x - -1,061ns -mpfr: 1.08x - -1,056ns -mpfr: 1.11x - -1,633ns -mpfr: 1.06x - -1,303ns -qd_real: 2.13x - - - - -Inverse hyperbolic - -asinh - -126ns -dd_real: 1.30x - -144ns -dd_real: 1.96x - -137ns -dd_real: 1.68x - -139ns -dd_real: 1.44x - -235ns -dd_real: 1.59x - -160ns -dd_real: 1.30x - -1,760ns -mpfr: 2.60x - -1,879ns -mpfr: 2.97x - -1,725ns -mpfr: 2.00x - -1,729ns -mpfr: 1.99x - -2,615ns -mpfr: 2.00x - -2,233ns -qd_real: 3.40x - -acosh - -125ns -dd_real: 1.26x - -151ns -dd_real: 1.80x - -141ns -dd_real: 1.58x - -140ns -dd_real: 1.39x - -241ns -dd_real: 1.52x - -159ns -dd_real: 1.28x - -1,741ns -mpfr: 2.70x - -1,752ns -mpfr: 3.36x - -1,730ns -mpfr: 2.06x - -1,671ns -mpfr: 2.11x - -2,540ns -mpfr: 2.11x - -2,170ns -qd_real: 3.56x - -atanh - -106ns -dd_real: 1.54x - -124ns -dd_real: 2.35x - -119ns -dd_real: 1.87x - -116ns -dd_real: 1.73x - -187ns -dd_real: 2.02x - -141ns -dd_real: 1.55x - -1,583ns -mpfr: 1.74x - -1,693ns -mpfr: 2.23x - -1,562ns -mpfr: 1.31x - -1,527ns -mpfr: 1.35x - -2,414ns -mpfr: 1.29x - -2,073ns -mpfr: 3.25x - - - - -Special functions - -erfc - -833ns -cpp_dd: 1.42x - -683ns -cpp_dd: 11.63x - -654ns -cpp_dd: 1.54x - -637ns -cpp_dd: 1.44x - -920ns -cpp_dd: 1.47x - -1,084ns -cpp_dd: 0.84x - -9,673ns -mpfr: 2.51x - -9,450ns -mpfr: 4.26x - -9,289ns -mpfr: 2.12x - -9,447ns -mpfr: 2.10x - -15,790ns -mpfr: 1.68x - -10,834ns -mpfr: 6.97x - -erf - -835ns -cpp_dd: 1.43x - -745ns -cpp_dd: 10.67x - -640ns -cpp_dd: 1.58x - -639ns -cpp_dd: 1.46x - -919ns -cpp_dd: 1.48x - -1,072ns -cpp_dd: 0.85x - -9,686ns -mpfr: 1.59x - -9,518ns -mpfr: 2.70x - -9,247ns -mpfr: 1.34x - -9,393ns -mpfr: 1.33x - -15,800ns -mpfr: 1.06x - -11,064ns -mpfr: 3.55x - -tgamma - -442ns -cpp_dd: 4.59x - -514ns -cpp_dd: 34.32x - -492ns -cpp_dd: 4.38x - -454ns -cpp_dd: 4.08x - -874ns -cpp_dd: 3.44x - -563ns -cpp_dd: 3.17x - -7,538ns -mpfr: 1.91x - -7,495ns -mpfr: 2.64x - -7,387ns -mpfr: 1.43x - -7,026ns -mpfr: 1.51x - -10,710ns -mpfr: 1.50x - -8,854ns -mpfr: 3.86x - -lgamma - -451ns -cpp_dd: 4.77x - -543ns -cpp_dd: 30.38x - -523ns -cpp_dd: 4.09x - -486ns -cpp_dd: 3.86x - -884ns -cpp_dd: 3.34x - -586ns -cpp_dd: 3.06x - -6,621ns -mpfr: 2.91x - -6,549ns -mpfr: 4.02x - -6,501ns -mpfr: 2.14x - -6,130ns -mpfr: 2.28x - -9,502ns -mpfr: 2.23x - -8,038ns -mpfr: 5.66x - - - - -Comparisons - -operator== - -2.10ns -dd_real: 1.00x - -2.19ns -dd_real: 1.01x - -2.13ns -dd_real: 1.00x - -2.13ns -dd_real: 0.99x - -3.51ns -cpp_dd: 0.99x - -2.14ns -dd_real: 1.00x - -2.11ns -qd_real: 1.00x - -2.24ns -qd_real: 1.04x - -2.17ns -qd_real: 1.00x - -2.14ns -qd_real: 1.00x - -3.48ns -qd_real: 0.99x - -3.14ns -qd_real: 0.72x - -operator!= - -2.10ns -dd_real: 1.00x - -2.25ns -dd_real: 0.98x - -2.12ns -dd_real: 1.01x - -2.14ns -dd_real: 0.99x - -3.51ns -cpp_dd: 0.99x - -2.16ns -dd_real: 0.99x - -2.12ns -qd_real: 1.00x - -2.14ns -qd_real: 1.08x - -2.18ns -qd_real: 1.00x - -2.16ns -qd_real: 1.00x - -3.48ns -qd_real: 0.98x - -2.41ns -qd_real: 0.98x - -operator< - -2.27ns -dd_real: 1.00x - -2.19ns -dd_real: 1.01x - -2.12ns -dd_real: 1.00x - -2.54ns -dd_real: 0.95x - -3.53ns -dd_real: 0.98x - -3.78ns -dd_real: 1.02x - -2.15ns -qd_real: 1.00x - -2.18ns -qd_real: 1.09x - -2.20ns -qd_real: 1.01x - -2.18ns -qd_real: 1.01x - -3.49ns -qd_real: 1.01x - -5.52ns -qd_real: 0.89x - -operator> - -2.29ns -dd_real: 1.00x - -2.22ns -cpp_dd: 1.00x - -2.13ns -cpp_dd: 1.00x - -2.62ns -dd_real: 0.90x - -3.51ns -dd_real: 1.00x - -3.83ns -dd_real: 1.00x - -2.15ns -qd_real: 1.00x - -2.22ns -qd_real: 1.17x - -2.20ns -qd_real: 1.01x - -2.18ns -qd_real: 1.02x - -3.49ns -qd_real: 1.01x - -5.47ns -qd_real: 0.93x - -operator<= - -2.27ns -dd_real: 1.01x - -2.23ns -dd_real: 0.97x - -2.14ns -cpp_dd: 0.99x - -2.65ns -dd_real: 0.94x - -3.57ns -cpp_dd: 0.98x - -3.87ns -dd_real: 1.00x - -2.16ns -qd_real: 1.01x - -2.20ns -qd_real: 0.99x - -2.22ns -qd_real: 1.01x - -2.18ns -qd_real: 1.01x - -3.48ns -qd_real: 0.99x - -5.23ns -qd_real: 0.91x - -operator>= - -2.29ns -dd_real: 1.00x - -2.26ns -dd_real: 0.97x - -2.14ns -dd_real: 1.00x - -2.60ns -dd_real: 0.92x - -3.57ns -dd_real: 0.98x - -3.86ns -dd_real: 1.03x - -2.16ns -qd_real: 0.99x - -2.21ns -qd_real: 1.13x - -2.19ns -qd_real: 1.00x - -2.21ns -qd_real: 1.02x - -3.48ns -qd_real: 1.00x - -5.33ns -qd_real: 0.86x - \ No newline at end of file diff --git a/res/metrics/serve_browser_bench.py b/res/metrics/serve_browser_bench.py deleted file mode 100644 index 02f1e3a..0000000 --- a/res/metrics/serve_browser_bench.py +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/env python3 -"""Serve browser metrics assets and save generated outputs.""" - -from __future__ import annotations - -import json -import subprocess -import sys -from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer -from pathlib import Path, PurePosixPath -from urllib.parse import unquote - - -ROOT = Path(__file__).resolve().parents[2] -METRICS_DIR = ROOT / "res" / "metrics" - - -def resolve_output_path(raw_path: str) -> Path: - pure = PurePosixPath(unquote(raw_path)) - if pure.is_absolute(): - pure = PurePosixPath(*pure.parts[1:]) - - if ".." in pure.parts: - raise ValueError("parent directory segments are not allowed") - if len(pure.parts) < 3 or pure.parts[0] != "res" or pure.parts[1] != "metrics": - raise ValueError("path must be under res/metrics") - if pure.suffix.lower() not in {".csv", ".svg"}: - raise ValueError("only csv and svg metrics outputs can be saved") - - target = (ROOT / Path(*pure.parts)).resolve() - if not target.is_relative_to(METRICS_DIR.resolve()): - raise ValueError("path resolves outside res/metrics") - return target - - -class BrowserMetricsHandler(SimpleHTTPRequestHandler): - def __init__(self, *args: object, **kwargs: object) -> None: - super().__init__(*args, directory=str(ROOT), **kwargs) - - def log_message(self, format: str, *args: object) -> None: - sys.stderr.write(f"[browser-metrics] {format % args}\n") - - def do_GET(self) -> None: - if self.path == "/": - self.send_response(302) - self.send_header("Location", "/res/metrics/metrics_table.svg") - self.end_headers() - return - super().do_GET() - - def do_POST(self) -> None: - if self.path in {"/save-metrics-file", "/save-benchmark-file"}: - self.save_metrics_file() - return - if self.path in {"/build-table", "/collect-table"}: - self.build_table() - return - self.send_error(404, "unknown endpoint") - - def read_json_body(self) -> dict[str, object]: - length = int(self.headers.get("Content-Length", "0")) - body = self.rfile.read(length).decode("utf-8") - value = json.loads(body) - if not isinstance(value, dict): - raise ValueError("expected a JSON object") - return value - - def save_metrics_file(self) -> None: - try: - payload = self.read_json_body() - path_value = payload.get("path") - content_value = payload.get("content") - if not isinstance(path_value, str) or not isinstance(content_value, str): - raise ValueError("path and content must be strings") - - target = resolve_output_path(path_value) - target.parent.mkdir(parents=True, exist_ok=True) - target.write_text(content_value, encoding="utf-8", newline="") - self.send_json({"ok": True, "path": str(target.relative_to(ROOT))}) - except Exception as exc: - self.send_error(400, str(exc)) - - def build_table(self) -> None: - try: - result = subprocess.run( - [sys.executable, str(METRICS_DIR / "build_table.py"), "--format", "svg"], - cwd=ROOT, - text=True, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - check=True, - ) - self.send_json({"ok": True, "stdout": result.stdout, "stderr": result.stderr}) - except subprocess.CalledProcessError as exc: - self.send_error(500, (exc.stdout or "") + (exc.stderr or "")) - - def send_json(self, value: dict[str, object]) -> None: - data = json.dumps(value).encode("utf-8") - self.send_response(200) - self.send_header("Content-Type", "application/json") - self.send_header("Content-Length", str(len(data))) - self.end_headers() - self.wfile.write(data) - - -def main() -> None: - port = int(sys.argv[1]) if len(sys.argv) > 1 else 8765 - server = ThreadingHTTPServer(("127.0.0.1", port), BrowserMetricsHandler) - print(f"Serving fltx browser metrics at http://127.0.0.1:{port}/", flush=True) - server.serve_forever() - - -if __name__ == "__main__": - main() diff --git a/res/metrics/wasm32/Wasm32_f128.csv b/res/metrics/wasm32/Wasm32_f128.csv deleted file mode 100644 index a976c65..0000000 --- a/res/metrics/wasm32/Wasm32_f128.csv +++ /dev/null @@ -1,70 +0,0 @@ -group,label,precision,operation,domain,domain_role,samples,primary_competitor,primary_competitor_supported,fltx_worst_bits,fltx_mean_bits,fltx_domain_score,fltx_inf_nan_correct,competitor_worst_bits,competitor_mean_bits,competitor_domain_score,competitor_inf_nan_correct,precision_gap_bits,domain_gap_pp,fltx_ns_iter,competitor_ns_iter,speed_ratio,preferred_reference,preferred_mean_gap_bits,preferred_worst_gap_bits,preferred_domain_gap_pp,preferred_speed_ratio,qdpp (dd_real)_supported,qdpp (dd_real)_worst_bits,qdpp (dd_real)_mean_bits,qdpp (dd_real)_domain_score,qdpp (dd_real)_inf_nan_correct,qdpp (dd_real)_gap_bits,qdpp (dd_real)_domain_gap_pp,qdpp (dd_real)_ns_iter,qdpp (dd_real)_speed_ratio -f128 <-> f128,add,f128,add,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.29863,4.35701,1.01358,boost::multiprecision::cpp_double_double,-,-,-,1.01358,yes,-,-,-,-,-,-,5.83332,1.35702 -f128 <-> f128,subtract,f128,subtract,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.30093,4.34054,1.00921,boost::multiprecision::cpp_double_double,-,-,-,1.00921,yes,-,-,-,-,-,-,5.79217,1.34673 -f128 <-> f128,multiply,f128,multiply,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.38411,6.20819,1.41606,qdpp (dd_real),-,-,-,1.37954,yes,-,-,-,-,-,-,6.04806,1.37954 -f128 <-> f128,divide,f128,divide,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.56724,6.40529,1.40244,boost::multiprecision::cpp_double_double,-,-,-,1.40244,yes,-,-,-,-,-,-,14.447,3.16318 -Mixed Workloads,affine trig transform,f128,affine transform,mixed,stress,28,boost::multiprecision::cpp_double_double,yes,109.179,109.227,100,-,105.205,107.24,99.4373,-,3.97402,0.562711,223.201,1376.62,6.1676,qdpp (dd_real),2.49603,4.99207,1.28303,1.17453,yes,104.187,106.731,98.717,-,4.99207,1.28303,262.156,1.17453 -Mixed Workloads,mandelbrot kernel,f128,mandelbrot,mixed,stress,3072,boost::multiprecision::cpp_double_double,yes,3.41619,152.228,51.3273,-,3.54951,152.561,51.36,-,-0.133319,-0.0326876,30.497,36.573,1.19923,qdpp (dd_real),1.83759,-0.185565,0.724835,0.770691,yes,3.60175,150.39,50.6024,-,-0.185565,0.724835,23.5038,0.770691 -Mixed Workloads,mixed arithmetic,f128,mixed arithmetic,mixed,stress,196,boost::multiprecision::cpp_double_double,yes,0,93.2871,85.7143,-,101.15,107.768,99.3608,-,-101.15,-13.6465,59.106,87.9833,1.48857,boost::multiprecision::cpp_double_double,-14.4805,-101.15,-13.6465,1.48857,yes,97.9223,106.017,98.3071,-,-97.9223,-12.5929,87.5716,1.4816 -Rounding,floor,f128,floor,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.26116,4.23386,0.993595,boost::multiprecision::cpp_double_double,-,-,-,0.993595,yes,-,-,-,-,-,-,4.23851,0.994685 -Rounding,ceil,f128,ceil,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.24824,4.33073,1.01942,qdpp (dd_real),-,-,-,1.00134,yes,-,-,-,-,-,-,4.25394,1.00134 -Rounding,trunc,f128,trunc,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,5.56286,6.47878,1.16465,qdpp (dd_real),-,-,-,0.854796,yes,-,-,-,-,-,-,4.75511,0.854796 -Rounding,round,f128,round,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,8.34532,10.9342,1.31022,boost::multiprecision::cpp_double_double,-,-,-,1.31022,yes,-,-,-,-,-,-,11.4776,1.37533 -Rounding,nearbyint,f128,nearbyint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,7.65108,10.7953,1.41095,boost::multiprecision::cpp_double_double,-,-,-,1.41095,yes,-,-,-,-,-,-,11.4747,1.49975 -Rounding,rint,f128,rint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,7.53361,10.7843,1.4315,boost::multiprecision::cpp_double_double,-,-,-,1.4315,yes,-,-,-,-,-,-,11.4449,1.51918 -Rounding,lround,f128,lround,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,9.0376,20.7584,2.29689,boost::multiprecision::cpp_double_double,-,-,-,2.29689,no,-,-,-,-,-,-,-,- -Rounding,llround,f128,llround,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,8.92641,653.192,73.1752,boost::multiprecision::cpp_double_double,-,-,-,73.1752,no,-,-,-,-,-,-,-,- -Rounding,lrint,f128,lrint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,11.1358,20.6532,1.85466,boost::multiprecision::cpp_double_double,-,-,-,1.85466,no,-,-,-,-,-,-,-,- -Rounding,llrint,f128,llrint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,11.0696,621.943,56.1846,boost::multiprecision::cpp_double_double,-,-,-,56.1846,no,-,-,-,-,-,-,-,- -Remainders,fmod,f128,fmod,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,22.5727,43.0233,1.90599,qdpp (dd_real),-,-,-,1.55355,yes,-,-,-,-,-,-,35.0678,1.55355 -Remainders,remainder,f128,remainder,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,35.0877,49.9355,1.42316,qdpp (dd_real),-,-,-,1.29908,yes,-,-,-,-,-,-,45.5815,1.29908 -Remainders,remquo,f128,remquo,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,35.7898,49.9772,1.39641,boost::multiprecision::cpp_double_double,-,-,-,1.39641,no,-,-,-,-,-,-,-,- -Floating-point utilities,abs,f128,fabs,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.71627,4.49031,0.95209,boost::multiprecision::cpp_double_double,-,-,-,0.95209,yes,-,-,-,-,-,-,4.58368,0.971886 -Floating-point utilities,fma,f128,fma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,5.04221,17.6886,3.50811,boost::multiprecision::cpp_double_double,-,-,-,3.50811,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmin,f128,fmin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,5.60774,5.38776,0.960772,boost::multiprecision::cpp_double_double,-,-,-,0.960772,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmax,f128,fmax,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,5.31468,5.87599,1.10561,boost::multiprecision::cpp_double_double,-,-,-,1.10561,no,-,-,-,-,-,-,-,- -Floating-point utilities,fdim,f128,fdim,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,5.9807,6.84958,1.14528,boost::multiprecision::cpp_double_double,-,-,-,1.14528,no,-,-,-,-,-,-,-,- -Floating-point utilities,copysign,f128,copysign,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.29662,4.32626,1.0069,boost::multiprecision::cpp_double_double,-,-,-,1.0069,no,-,-,-,-,-,-,-,- -Floating-point utilities,ldexp,f128,ldexp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.28241,4.38003,1.02279,boost::multiprecision::cpp_double_double,-,-,-,1.02279,yes,-,-,-,-,-,-,7.4471,1.739 -Floating-point utilities,scalbn,f128,scalbn,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.28803,4.36179,1.0172,boost::multiprecision::cpp_double_double,-,-,-,1.0172,yes,-,-,-,-,-,-,7.4703,1.74213 -Floating-point utilities,scalbln,f128,scalbln,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.3192,4.40699,1.02033,boost::multiprecision::cpp_double_double,-,-,-,1.02033,yes,-,-,-,-,-,-,7.42949,1.72011 -Floating-point utilities,frexp,f128,frexp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.48841,6.45952,0.995546,boost::multiprecision::cpp_double_double,-,-,-,0.995546,no,-,-,-,-,-,-,-,- -Floating-point utilities,modf,f128,modf,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.83051,10.91,1.59724,boost::multiprecision::cpp_double_double,-,-,-,1.59724,no,-,-,-,-,-,-,-,- -Floating-point utilities,ilogb,f128,ilogb,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.17546,2.87943,1.32359,boost::multiprecision::cpp_double_double,-,-,-,1.32359,no,-,-,-,-,-,-,-,- -Floating-point utilities,logb,f128,logb,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.28377,98.8057,23.0651,boost::multiprecision::cpp_double_double,-,-,-,23.0651,no,-,-,-,-,-,-,-,- -Floating-point utilities,nextafter,f128,nextafter,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,7.75438,25.8727,3.33652,boost::multiprecision::cpp_double_double,-,-,-,3.33652,no,-,-,-,-,-,-,-,- -Floating-point utilities,nexttoward(type),f128,nexttoward,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,7.71458,25.8595,3.35203,boost::multiprecision::cpp_double_double,-,-,-,3.35203,no,-,-,-,-,-,-,-,- -Roots & powers,sqrt,f128,sqrt,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.34806,4.32267,0.99416,boost::multiprecision::cpp_double_double,-,-,-,0.99416,yes,-,-,-,-,-,-,8.0336,1.84763 -Roots & powers,cbrt,f128,cbrt,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,23.7137,384.617,16.2192,qdpp (dd_real),-,-,-,3.35411,yes,-,-,-,-,-,-,79.5385,3.35411 -Roots & powers,hypot,f128,hypot,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,13.2349,64.8938,4.90324,boost::multiprecision::cpp_double_double,-,-,-,4.90324,no,-,-,-,-,-,-,-,- -Roots & powers,pow,f128,pow,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,308.719,698.859,2.26374,qdpp (dd_real),-,-,-,1.18873,yes,-,-,-,-,-,-,366.983,1.18873 -Exponentials,exp,f128,exp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,132.403,314.246,2.37341,qdpp (dd_real),-,-,-,1.24827,yes,-,-,-,-,-,-,165.275,1.24827 -Exponentials,exp2,f128,exp2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,122.552,709.68,5.79086,boost::multiprecision::cpp_double_double,-,-,-,5.79086,no,-,-,-,-,-,-,-,- -Exponentials,expm1,f128,expm1,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,129.923,326.53,2.51327,qdpp (dd_real),-,-,-,1.25709,yes,-,-,-,-,-,-,163.324,1.25709 -Logarithms,log,f128,log,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,160.049,349.812,2.18565,qdpp (dd_real),-,-,-,1.17514,yes,-,-,-,-,-,-,188.08,1.17514 -Logarithms,log2,f128,log2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,165.661,365.161,2.20426,boost::multiprecision::cpp_double_double,-,-,-,2.20426,no,-,-,-,-,-,-,-,- -Logarithms,log10,f128,log10,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,165.156,359.074,2.17416,qdpp (dd_real),-,-,-,1.28894,yes,-,-,-,-,-,-,212.877,1.28894 -Logarithms,log1p,f128,log1p,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,160.582,457.924,2.85166,qdpp (dd_real),-,-,-,1.10999,yes,-,-,-,-,-,-,178.244,1.10999 -Trigonometric,sin,f128,sin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,108.847,625.209,5.74394,qdpp (dd_real),-,-,-,1.54271,yes,-,-,-,-,-,-,167.919,1.54271 -Trigonometric,cos,f128,cos,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,109.318,638.981,5.84517,qdpp (dd_real),-,-,-,1.51991,yes,-,-,-,-,-,-,166.153,1.51991 -Trigonometric,tan,f128,tan,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,129.745,1270.13,9.78946,qdpp (dd_real),-,-,-,1.4962,yes,-,-,-,No,-,-,194.124,1.4962 -Trigonometric,asin,f128,asin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,203,3353.67,16.5206,qdpp (dd_real),-,-,-,1.46321,yes,-,-,-,No,-,-,297.032,1.46321 -Trigonometric,acos,f128,acos,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,208.282,3190.06,15.3161,qdpp (dd_real),-,-,-,1.42764,yes,-,-,-,No,-,-,297.351,1.42764 -Trigonometric,atan,f128,atan,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,147.2,359.879,2.44483,qdpp (dd_real),-,-,-,1.45986,yes,-,-,-,No,-,-,214.891,1.45986 -Trigonometric,atan2,f128,atan2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,169.187,2050.48,12.1196,qdpp (dd_real),-,-,-,1.3048,yes,-,-,-,No,-,-,220.755,1.3048 -Hyperbolic,sinh,f128,sinh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,138.636,337.028,2.43102,qdpp (dd_real),-,-,-,1.38522,yes,-,-,-,-,-,-,192.041,1.38522 -Hyperbolic,cosh,f128,cosh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,138.623,335.529,2.42044,qdpp (dd_real),-,-,-,1.38314,yes,-,-,-,-,-,-,191.735,1.38314 -Hyperbolic,tanh,f128,tanh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,143.347,394.913,2.75494,qdpp (dd_real),-,-,-,1.39041,yes,-,-,-,-,-,-,199.312,1.39041 -Inverse hyperbolic,asinh,f128,asinh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,160.397,469.359,2.92623,qdpp (dd_real),-,-,-,1.30163,yes,-,-,-,-,-,-,208.777,1.30163 -Inverse hyperbolic,acosh,f128,acosh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,158.845,451.422,2.8419,qdpp (dd_real),-,-,-,1.27919,yes,-,-,-,-,-,-,203.194,1.27919 -Inverse hyperbolic,atanh,f128,atanh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,141.096,1533.37,10.8676,qdpp (dd_real),-,-,-,1.55038,yes,-,-,-,-,-,-,218.752,1.55038 -Special functions,erfc,f128,erfc,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,1084.39,909.769,0.83897,boost::multiprecision::cpp_double_double,-,-,-,0.83897,no,-,-,-,-,-,-,-,- -Special functions,erf,f128,erf,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,1071.57,910.494,0.849683,boost::multiprecision::cpp_double_double,-,-,-,0.849683,no,-,-,-,-,-,-,-,- -Special functions,tgamma,f128,tgamma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,563.458,1785.18,3.16826,boost::multiprecision::cpp_double_double,-,-,-,3.16826,no,-,-,-,-,-,-,-,- -Special functions,lgamma,f128,lgamma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,586.021,1790.53,3.0554,boost::multiprecision::cpp_double_double,-,-,-,3.0554,no,-,-,-,-,-,-,-,- -Comparisons,operator==,f128,operator==,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.14394,2.33051,1.08703,qdpp (dd_real),-,-,-,1.00174,yes,-,-,-,-,-,-,2.14766,1.00174 -Comparisons,operator!=,f128,operator!=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.15937,2.18723,1.0129,qdpp (dd_real),-,-,-,0.99321,yes,-,-,-,-,-,-,2.14471,0.99321 -Comparisons,operator<,f128,operator<,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,3.78436,4.88027,1.28959,qdpp (dd_real),-,-,-,1.0219,yes,-,-,-,-,-,-,3.86722,1.0219 -Comparisons,operator>,f128,operator>,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,3.83187,4.81806,1.25737,qdpp (dd_real),-,-,-,1.00353,yes,-,-,-,-,-,-,3.8454,1.00353 -Comparisons,operator<=,f128,operator<=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,3.86623,4.68109,1.21076,qdpp (dd_real),-,-,-,0.996917,yes,-,-,-,-,-,-,3.85431,0.996917 -Comparisons,operator>=,f128,operator>=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,3.85842,4.71225,1.22129,qdpp (dd_real),-,-,-,1.02657,yes,-,-,-,-,-,-,3.96093,1.02657 diff --git a/res/metrics/wasm32/Wasm32_f256.csv b/res/metrics/wasm32/Wasm32_f256.csv deleted file mode 100644 index add0d66..0000000 --- a/res/metrics/wasm32/Wasm32_f256.csv +++ /dev/null @@ -1,70 +0,0 @@ -group,label,precision,operation,domain,domain_role,samples,primary_competitor,primary_competitor_supported,fltx_worst_bits,fltx_mean_bits,fltx_domain_score,fltx_inf_nan_correct,competitor_worst_bits,competitor_mean_bits,competitor_domain_score,competitor_inf_nan_correct,precision_gap_bits,domain_gap_pp,fltx_ns_iter,competitor_ns_iter,speed_ratio,preferred_reference,preferred_mean_gap_bits,preferred_worst_gap_bits,preferred_domain_gap_pp,preferred_speed_ratio,qdpp (qd_real)_supported,qdpp (qd_real)_worst_bits,qdpp (qd_real)_mean_bits,qdpp (qd_real)_domain_score,qdpp (qd_real)_inf_nan_correct,qdpp (qd_real)_gap_bits,qdpp (qd_real)_domain_gap_pp,qdpp (qd_real)_ns_iter,qdpp (qd_real)_speed_ratio -f256 <-> f256,add,f256,add,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,15.5505,83.3629,5.3608,qdpp (qd_real),-,-,-,2.42883,yes,-,-,-,-,-,-,37.7694,2.42883 -f256 <-> f256,subtract,f256,subtract,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.8174,87.6401,6.34272,qdpp (qd_real),-,-,-,3.10821,yes,-,-,-,-,-,-,42.9475,3.10821 -f256 <-> f256,multiply,f256,multiply,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,25.4053,163.328,6.42888,qdpp (qd_real),-,-,-,1.62605,yes,-,-,-,-,-,-,41.3102,1.62605 -f256 <-> f256,divide,f256,divide,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,87.0615,205.192,2.35686,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.35686,yes,-,-,-,-,-,-,278.657,3.20069 -Mixed Workloads,affine trig transform,f256,affine transform,mixed,stress,28,boost::multiprecision::mpfr_float_backend<64>,yes,211.085,211.715,99.6764,-,214.628,215.967,100,-,-3.54282,-0.323583,1524.49,8737.88,5.73166,qdpp (qd_real),-6.41207,-5.66305,-0.323583,2.05127,yes,216.748,218.127,100,-,-5.66305,-0.323583,3127.15,2.05127 -Mixed Workloads,mandelbrot kernel,f256,mandelbrot,mixed,stress,3072,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,-,exact,320,100,-,0,0,144.931,571.69,3.94457,qdpp (qd_real),0,0,0,1.49483,yes,exact,320,100,-,0,0,216.647,1.49483 -Mixed Workloads,mixed arithmetic,f256,mixed arithmetic,mixed,stress,196,boost::multiprecision::mpfr_float_backend<64>,yes,0,184.341,85.6147,-,207.146,214.099,99.596,-,-207.146,-13.9813,500.344,1719.97,3.43757,qdpp (qd_real),-32.6158,-208.541,-14.1529,1.98654,yes,208.541,216.957,99.7676,-,-208.541,-14.1529,993.954,1.98654 -Rounding,floor,f256,floor,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.82528,48.4607,5.49112,qdpp (qd_real),-,-,-,0.989426,yes,-,-,-,-,-,-,8.73196,0.989426 -Rounding,ceil,f256,ceil,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.76261,48.4717,5.53165,qdpp (qd_real),-,-,-,1.00161,yes,-,-,-,-,-,-,8.77673,1.00161 -Rounding,trunc,f256,trunc,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.86354,48.1982,5.43781,qdpp (qd_real),-,-,-,0.996586,yes,-,-,-,-,-,-,8.83328,0.996586 -Rounding,round,f256,round,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9.55033,93.6094,9.8017,qdpp (qd_real),-,-,-,1.6282,yes,-,-,-,-,-,-,15.5499,1.6282 -Rounding,nearbyint,f256,nearbyint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9.55672,93.9241,9.82806,qdpp (qd_real),-,-,-,1.63043,yes,-,-,-,-,-,-,15.5816,1.63043 -Rounding,rint,f256,rint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9.63464,93.8121,9.73696,qdpp (qd_real),-,-,-,1.53545,yes,-,-,-,-,-,-,14.7935,1.53545 -Rounding,lround,f256,lround,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,11.9615,108.384,9.06107,boost::multiprecision::mpfr_float_backend<64>,-,-,-,9.06107,no,-,-,-,-,-,-,-,- -Rounding,llround,f256,llround,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,12.1482,176.615,14.5384,boost::multiprecision::mpfr_float_backend<64>,-,-,-,14.5384,no,-,-,-,-,-,-,-,- -Rounding,lrint,f256,lrint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.9935,110.007,7.8613,boost::multiprecision::mpfr_float_backend<64>,-,-,-,7.8613,no,-,-,-,-,-,-,-,- -Rounding,llrint,f256,llrint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,14.2594,175.082,12.2783,boost::multiprecision::mpfr_float_backend<64>,-,-,-,12.2783,no,-,-,-,-,-,-,-,- -Remainders,fmod,f256,fmod,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,115.136,190.728,1.65654,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.65654,yes,-,-,-,-,-,-,371.459,3.22625 -Remainders,remainder,f256,remainder,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,149.27,218.326,1.46262,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.46262,yes,-,-,-,-,-,-,384.292,2.57448 -Remainders,remquo,f256,remquo,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,139.233,231.165,1.66028,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.66028,no,-,-,-,-,-,-,-,- -Floating-point utilities,abs,f256,fabs,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.79619,52.3503,5.95148,qdpp (qd_real),-,-,-,1.00177,yes,-,-,-,-,-,-,8.81179,1.00177 -Floating-point utilities,fma,f256,fma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,48.592,187.045,3.84929,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.84929,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmin,f256,fmin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.83006,63.0389,7.13913,boost::multiprecision::mpfr_float_backend<64>,-,-,-,7.13913,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmax,f256,fmax,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9.06613,62.8776,6.93545,boost::multiprecision::mpfr_float_backend<64>,-,-,-,6.93545,no,-,-,-,-,-,-,-,- -Floating-point utilities,fdim,f256,fdim,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.2675,58.5271,4.4113,boost::multiprecision::mpfr_float_backend<64>,-,-,-,4.4113,no,-,-,-,-,-,-,-,- -Floating-point utilities,copysign,f256,copysign,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.79623,57.2039,6.50322,boost::multiprecision::mpfr_float_backend<64>,-,-,-,6.50322,no,-,-,-,-,-,-,-,- -Floating-point utilities,ldexp,f256,ldexp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.94984,65.2135,7.28655,qdpp (qd_real),-,-,-,1.7203,yes,-,-,-,-,-,-,15.3964,1.7203 -Floating-point utilities,scalbn,f256,scalbn,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.99938,64.2688,7.14148,qdpp (qd_real),-,-,-,1.70503,yes,-,-,-,-,-,-,15.3443,1.70503 -Floating-point utilities,scalbln,f256,scalbln,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.84563,64.0857,7.2449,qdpp (qd_real),-,-,-,1.73654,yes,-,-,-,-,-,-,15.3607,1.73654 -Floating-point utilities,frexp,f256,frexp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,14.7451,41.4269,2.80953,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.80953,no,-,-,-,-,-,-,-,- -Floating-point utilities,modf,f256,modf,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,14.9337,109.983,7.36475,boost::multiprecision::mpfr_float_backend<64>,-,-,-,7.36475,no,-,-,-,-,-,-,-,- -Floating-point utilities,ilogb,f256,ilogb,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.73828,25.2649,9.22659,boost::multiprecision::mpfr_float_backend<64>,-,-,-,9.22659,no,-,-,-,-,-,-,-,- -Floating-point utilities,logb,f256,logb,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.82971,73.9637,8.37668,boost::multiprecision::mpfr_float_backend<64>,-,-,-,8.37668,no,-,-,-,-,-,-,-,- -Floating-point utilities,nextafter,f256,nextafter,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,11.9619,429.581,35.9124,boost::multiprecision::mpfr_float_backend<64>,-,-,-,35.9124,no,-,-,-,-,-,-,-,- -Floating-point utilities,nexttoward(type),f256,nexttoward,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9.36075,429.204,45.8514,boost::multiprecision::mpfr_float_backend<64>,-,-,-,45.8514,no,-,-,-,-,-,-,-,- -Roots & powers,sqrt,f256,sqrt,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,132.963,256.994,1.93283,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.93283,yes,-,-,-,-,-,-,507.892,3.81981 -Roots & powers,cbrt,f256,cbrt,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,407.618,774.624,1.90037,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.90037,yes,-,-,-,-,-,-,1271.25,3.11874 -Roots & powers,hypot,f256,hypot,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,229.911,966.391,4.20333,boost::multiprecision::mpfr_float_backend<64>,-,-,-,4.20333,no,-,-,-,-,-,-,-,- -Roots & powers,pow,f256,pow,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2938.14,9472.17,3.22386,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.22386,yes,-,-,-,-,-,-,10022.6,3.41119 -Exponentials,exp,f256,exp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1084.31,3353.5,3.09276,qdpp (qd_real),-,-,-,2.26187,yes,-,-,-,-,-,-,2452.56,2.26187 -Exponentials,exp2,f256,exp2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,993.324,3774.22,3.79959,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.79959,no,-,-,-,-,-,-,-,- -Exponentials,expm1,f256,expm1,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1040.69,3783.66,3.63571,qdpp (qd_real),-,-,-,2.35357,yes,-,-,-,-,-,-,2449.35,2.35357 -Logarithms,log,f256,log,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1980.02,5701.37,2.87945,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.87945,yes,-,-,-,-,-,-,7694.7,3.88617 -Logarithms,log2,f256,log2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1846.44,6457.53,3.49728,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.49728,no,-,-,-,-,-,-,-,- -Logarithms,log10,f256,log10,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,3199.17,11554.5,3.61173,qdpp (qd_real),-,-,-,2.46367,yes,-,-,-,-,-,-,7881.68,2.46367 -Logarithms,log1p,f256,log1p,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1916.07,6018.2,3.14091,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.14091,yes,-,-,-,-,-,-,7458.97,3.89285 -Trigonometric,sin,f256,sin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,933.754,3930.16,4.20899,qdpp (qd_real),-,-,-,2.3296,yes,-,-,-,-,-,-,2175.27,2.3296 -Trigonometric,cos,f256,cos,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,910.721,3196.09,3.50941,qdpp (qd_real),-,-,-,2.37632,yes,-,-,-,-,-,-,2164.16,2.37632 -Trigonometric,tan,f256,tan,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1155.13,4789.3,4.14612,qdpp (qd_real),-,-,-,2.23178,yes,-,-,-,-,-,-,2578,2.23178 -Trigonometric,asin,f256,asin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1536.45,12245.4,7.9699,qdpp (qd_real),-,-,-,6.07938,yes,-,-,-,No,-,-,9340.68,6.07938 -Trigonometric,acos,f256,acos,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1498.55,13496,9.00604,qdpp (qd_real),-,-,-,6.30354,yes,-,-,-,No,-,-,9446.19,6.30354 -Trigonometric,atan,f256,atan,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,962.197,3977.02,4.13327,boost::multiprecision::mpfr_float_backend<64>,-,-,-,4.13327,yes,-,-,-,-,-,-,6611.56,6.87132 -Trigonometric,atan2,f256,atan2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1133.94,8899.06,7.84791,qdpp (qd_real),-,-,-,5.87313,yes,-,-,-,-,-,-,6659.78,5.87313 -Hyperbolic,sinh,f256,sinh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1332.14,4110.21,3.08541,qdpp (qd_real),-,-,-,2.02343,yes,-,-,-,-,-,-,2695.5,2.02343 -Hyperbolic,cosh,f256,cosh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1353.92,3887.77,2.8715,qdpp (qd_real),-,-,-,2.00644,yes,-,-,-,-,-,-,2716.55,2.00644 -Hyperbolic,tanh,f256,tanh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1303.35,3923.11,3.01002,qdpp (qd_real),-,-,-,2.12529,yes,-,-,-,-,-,-,2770,2.12529 -Inverse hyperbolic,asinh,f256,asinh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2232.94,15292.3,6.84852,qdpp (qd_real),-,-,-,3.40212,yes,-,-,-,-,-,-,7596.73,3.40212 -Inverse hyperbolic,acosh,f256,acosh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2169.96,13992.8,6.44842,qdpp (qd_real),-,-,-,3.55678,yes,-,-,-,-,-,-,7718.06,3.55678 -Inverse hyperbolic,atanh,f256,atanh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2073.33,6743.83,3.25265,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.25265,yes,-,-,-,-,-,-,7316.17,3.5287 -Special functions,erfc,f256,erfc,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,10833.6,75503.7,6.9694,boost::multiprecision::mpfr_float_backend<64>,-,-,-,6.9694,no,-,-,-,-,-,-,-,- -Special functions,erf,f256,erf,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,11064.2,39279.5,3.55013,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.55013,no,-,-,-,-,-,-,-,- -Special functions,tgamma,f256,tgamma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8853.5,34164.2,3.85883,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.85883,no,-,-,-,-,-,-,-,- -Special functions,lgamma,f256,lgamma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8037.8,45456,5.65528,boost::multiprecision::mpfr_float_backend<64>,-,-,-,5.65528,no,-,-,-,-,-,-,-,- -Comparisons,operator==,f256,operator==,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,3.13891,6.93842,2.21045,qdpp (qd_real),-,-,-,0.718313,yes,-,-,-,-,-,-,2.25472,0.718313 -Comparisons,operator!=,f256,operator!=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.414,8.93027,3.69936,qdpp (qd_real),-,-,-,0.982914,yes,-,-,-,-,-,-,2.37276,0.982914 -Comparisons,operator<,f256,operator<,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,5.51705,10.4472,1.89362,qdpp (qd_real),-,-,-,0.885735,yes,-,-,-,-,-,-,4.88664,0.885735 -Comparisons,operator>,f256,operator>,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,5.46669,10.2567,1.87622,qdpp (qd_real),-,-,-,0.933397,yes,-,-,-,-,-,-,5.10259,0.933397 -Comparisons,operator<=,f256,operator<=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,5.22775,9.72157,1.85961,qdpp (qd_real),-,-,-,0.910595,yes,-,-,-,-,-,-,4.76036,0.910595 -Comparisons,operator>=,f256,operator>=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,5.32501,9.31815,1.74988,qdpp (qd_real),-,-,-,0.864167,yes,-,-,-,-,-,-,4.6017,0.864167 diff --git a/res/metrics/windows/MSVC_f128.csv b/res/metrics/windows/MSVC_f128.csv deleted file mode 100644 index 7064bb2..0000000 --- a/res/metrics/windows/MSVC_f128.csv +++ /dev/null @@ -1,70 +0,0 @@ -group,label,precision,operation,domain,domain_role,samples,primary_competitor,primary_competitor_supported,fltx_worst_bits,fltx_mean_bits,fltx_domain_score,fltx_inf_nan_correct,competitor_worst_bits,competitor_mean_bits,competitor_domain_score,competitor_inf_nan_correct,precision_gap_bits,domain_gap_pp,fltx_ns_iter,competitor_ns_iter,speed_ratio,preferred_reference,preferred_mean_gap_bits,preferred_worst_gap_bits,preferred_domain_gap_pp,preferred_speed_ratio,qdpp (dd_real)_supported,qdpp (dd_real)_worst_bits,qdpp (dd_real)_mean_bits,qdpp (dd_real)_domain_score,qdpp (dd_real)_inf_nan_correct,qdpp (dd_real)_gap_bits,qdpp (dd_real)_domain_gap_pp,qdpp (dd_real)_ns_iter,qdpp (dd_real)_speed_ratio -f128 <-> f128,add,f128,add,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,105.53,133.49,100,Yes,105.53,133.49,100,Yes,0,0,4.24812,8.34343,1.96403,qdpp (dd_real),0,0,0,1.00649,yes,105.53,133.49,100,No,0,0,4.27568,1.00649 -f128 <-> f128,subtract,f128,subtract,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,105.544,133.393,100,Yes,105.544,133.393,100,Yes,0,0,4.24075,8.41606,1.98457,qdpp (dd_real),0,0,0,1.02972,yes,105.544,133.393,100,No,0,0,4.36678,1.02972 -f128 <-> f128,multiply,f128,multiply,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,104.251,138.855,100,Yes,104.182,138.873,99.9551,No,0.0693723,0.0448786,4.42905,9.48258,2.141,qdpp (dd_real),0,0,0,0.958871,yes,104.251,138.855,100,No,0,0,4.24689,0.958871 -f128 <-> f128,divide,f128,divide,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,103.574,123.545,99.8759,Yes,103.574,123.545,99.8759,No,0,0,4.25234,9.02098,2.12142,boost::multiprecision::cpp_double_double,0,0,0,2.12142,yes,104.898,123.964,100,No,-1.32419,-0.124052,10.8841,2.55955 -Mixed Workloads,affine trig transform,f128,affine transform,mixed,stress,28,boost::multiprecision::cpp_double_double,yes,109.179,109.227,100,-,105.205,107.24,99.4373,-,3.97402,0.562711,124.196,1406.34,11.3235,qdpp (dd_real),2.49603,4.99207,1.28303,1.57631,yes,104.187,106.731,98.717,-,4.99207,1.28303,195.772,1.57631 -Mixed Workloads,mandelbrot kernel,f128,mandelbrot,mixed,stress,3072,boost::multiprecision::cpp_double_double,yes,3.41619,152.228,51.3273,-,3.54951,152.561,51.36,-,-0.133319,-0.0326876,13.7099,57.7842,4.21479,qdpp (dd_real),1.83759,-0.185565,0.724835,0.96905,yes,3.60175,150.39,50.6024,-,-0.185565,0.724835,13.2855,0.96905 -Mixed Workloads,mixed arithmetic,f128,mixed arithmetic,mixed,stress,196,boost::multiprecision::cpp_double_double,yes,98.1304,107.646,98.9574,-,98.1304,107.646,98.9574,-,0,0,35.6964,153.258,4.29337,qdpp (dd_real),1.83934,2.84315,0.978005,1.70358,yes,95.2873,105.806,97.9794,-,2.84315,0.978005,60.8118,1.70358 -Rounding,floor,f128,floor,primary,primary,8198,boost::multiprecision::cpp_double_double,yes,exact,160,100,Yes,exact,160,79.9488,No,0,20.0512,4.22295,6.21715,1.47223,qdpp (dd_real),0,0,0,0.994562,yes,exact,160,100,No,0,0,4.19999,0.994562 -Rounding,ceil,f128,ceil,primary,primary,8198,boost::multiprecision::cpp_double_double,yes,exact,160,100,Yes,exact,160,79.9488,No,0,20.0512,4.20182,7.80282,1.85701,qdpp (dd_real),0,0,0,0.999797,yes,exact,160,100,No,0,0,4.20096,0.999797 -Rounding,trunc,f128,trunc,primary,primary,8198,boost::multiprecision::cpp_double_double,yes,exact,160,100,Yes,exact,160,100,No,0,0,4.21715,8.80833,2.08869,qdpp (dd_real),0,0,0,1.03458,yes,exact,160,100,No,0,0,4.36299,1.03458 -Rounding,round,f128,round,primary,primary,8198,boost::multiprecision::cpp_double_double,yes,exact,160,100,Yes,exact,160,100,No,0,0,4.90181,13.76,2.80714,boost::multiprecision::cpp_double_double,0,0,0,2.80714,yes,11.7211,142.131,79.8701,No,exact,20.1299,4.22045,0.860998 -Rounding,nearbyint,f128,nearbyint,primary,primary,8198,boost::multiprecision::cpp_double_double,yes,exact,160,79.9269,Yes,exact,160,100,No,0,-20.0731,6.22285,13.7494,2.2095,boost::multiprecision::cpp_double_double,0,0,-20.0731,2.2095,yes,11.7211,142.131,79.8701,No,exact,0.0567541,4.22264,0.67857 -Rounding,rint,f128,rint,primary,primary,8198,boost::multiprecision::cpp_double_double,yes,exact,160,79.9269,Yes,exact,160,100,No,0,-20.0731,6.21995,13.8059,2.21961,boost::multiprecision::cpp_double_double,0,0,-20.0731,2.21961,yes,11.7211,142.131,79.8703,No,exact,0.0566046,4.22071,0.678575 -Rounding,lround,f128,lround,primary,primary,8198,boost::multiprecision::cpp_double_double,yes,exact,160,100,-,exact,160,100,-,0,0,13.8702,27.3693,1.97325,boost::multiprecision::cpp_double_double,0,0,0,1.97325,no,-,-,-,-,-,-,-,- -Rounding,llround,f128,llround,primary,primary,8198,boost::multiprecision::cpp_double_double,yes,exact,160,100,-,exact,160,100,-,0,0,13.8015,435.737,31.5718,boost::multiprecision::cpp_double_double,0,0,0,31.5718,no,-,-,-,-,-,-,-,- -Rounding,lrint,f128,lrint,primary,primary,8198,boost::multiprecision::cpp_double_double,yes,exact,160,100,-,exact,160,79.9244,-,0,20.0756,13.9962,27.3714,1.95564,boost::multiprecision::cpp_double_double,0,0,20.0756,1.95564,no,-,-,-,-,-,-,-,- -Rounding,llrint,f128,llrint,primary,primary,8198,boost::multiprecision::cpp_double_double,yes,exact,160,100,-,exact,160,79.9244,-,0,20.0756,13.6266,441.643,32.4103,boost::multiprecision::cpp_double_double,0,0,20.0756,32.4103,no,-,-,-,-,-,-,-,- -Remainders,fmod,f128,fmod,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,107,158.233,97.2118,Yes,-16.9946,63.3238,21.7118,No,123.995,75.5,23.9651,50.565,2.10994,qdpp (dd_real),30.4638,41.5154,66.0287,1.08055,yes,65.4849,127.769,31.1831,No,41.5154,66.0287,25.8955,1.08055 -Remainders,remainder,f128,remainder,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,99,157.963,97.4698,Yes,64.3582,127.507,31.4634,No,34.6418,66.0063,27.572,50.6802,1.8381,qdpp (dd_real),30.5205,88.4531,66.0522,0.947824,yes,10.5469,127.442,31.4176,No,88.4531,66.0522,26.1334,0.947824 -Remainders,remquo,f128,remquo,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,99,157.963,96.9567,Yes,64.3582,127.507,31.1775,No,34.6418,65.7792,28.0945,50.6879,1.8042,boost::multiprecision::cpp_double_double,30.456,34.6418,65.7792,1.8042,no,-,-,-,-,-,-,-,- -Floating-point utilities,abs,f128,fabs,primary,primary,8201,boost::multiprecision::cpp_double_double,yes,exact,160,100,Yes,exact,160,100,Yes,0,0,4.2079,5.27451,1.25348,qdpp (dd_real),0,0,0,0.998875,yes,exact,160,100,No,0,0,4.20317,0.998875 -Floating-point utilities,fma,f128,fma,primary,primary,8195,boost::multiprecision::cpp_double_double,yes,92.9272,111.897,99.8982,Yes,93.0478,111.839,99.8115,Yes,-0.120626,0.08672,4.20641,12.8196,3.04762,boost::multiprecision::cpp_double_double,0.0579677,-0.120626,0.08672,3.04762,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmin,f128,fmin,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,exact,160,100,Yes,exact,160,100,No,0,0,4.20398,6.86243,1.63237,boost::multiprecision::cpp_double_double,0,0,0,1.63237,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmax,f128,fmax,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,exact,160,100,Yes,exact,160,100,Yes,0,0,4.20061,7.12786,1.69686,boost::multiprecision::cpp_double_double,0,0,0,1.69686,no,-,-,-,-,-,-,-,- -Floating-point utilities,fdim,f128,fdim,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,105.544,146.926,100,Yes,105.544,146.926,100,No,0,0,4.23095,9.40531,2.22298,boost::multiprecision::cpp_double_double,0,0,0,2.22298,no,-,-,-,-,-,-,-,- -Floating-point utilities,copysign,f128,copysign,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,exact,160,100,Yes,exact,160,79.9442,Yes,0,20.0558,4.20607,4.20146,0.998904,boost::multiprecision::cpp_double_double,0,0,20.0558,0.998904,no,-,-,-,-,-,-,-,- -Floating-point utilities,ldexp,f128,ldexp,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,exact,160,100,Yes,exact,160,89.2422,No,0,10.7578,4.23487,4.37037,1.032,qdpp (dd_real),0,0,0,1.03979,yes,exact,160,100,Yes,0,0,4.4034,1.03979 -Floating-point utilities,scalbn,f128,scalbn,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,exact,160,100,Yes,exact,160,89.2422,No,0,10.7578,4.23528,4.36543,1.03073,qdpp (dd_real),0,0,0,1.03888,yes,exact,160,100,Yes,0,0,4.39995,1.03888 -Floating-point utilities,scalbln,f128,scalbln,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,exact,160,100,Yes,exact,160,89.2422,No,0,10.7578,4.23852,4.36388,1.02958,qdpp (dd_real),0,0,0,1.03844,yes,exact,160,100,Yes,0,0,4.40146,1.03844 -Floating-point utilities,frexp,f128,frexp,primary,primary,8201,boost::multiprecision::cpp_double_double,yes,exact,160,100,Yes,exact,160,100,No,0,0,6.30522,6.41096,1.01677,boost::multiprecision::cpp_double_double,0,0,0,1.01677,no,-,-,-,-,-,-,-,- -Floating-point utilities,modf,f128,modf,primary,primary,8198,boost::multiprecision::cpp_double_double,yes,exact,160,100,Yes,exact,160,100,No,0,0,5.97669,14.4498,2.4177,boost::multiprecision::cpp_double_double,0,0,0,2.4177,no,-,-,-,-,-,-,-,- -Floating-point utilities,ilogb,f128,ilogb,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,exact,160,79.6389,Yes,exact,160,79.5364,Yes,0,0.102517,2.11497,5.26341,2.48865,boost::multiprecision::cpp_double_double,0,0,0.102517,2.48865,no,-,-,-,-,-,-,-,- -Floating-point utilities,logb,f128,logb,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,exact,160,79.6107,Yes,exact,160,52.2862,Yes,0,27.3245,4.20561,82.8175,19.6921,boost::multiprecision::cpp_double_double,0,0,27.3245,19.6921,no,-,-,-,-,-,-,-,- -Floating-point utilities,nextafter,f128,nextafter,primary,primary,8200,boost::multiprecision::cpp_double_double,yes,106.002,128.082,100,Yes,105.002,126.046,99.4232,No,1,0.576813,7.9137,69.7538,8.81432,boost::multiprecision::cpp_double_double,2.03561,1,0.576813,8.81432,no,-,-,-,-,-,-,-,- -Floating-point utilities,nexttoward(type),f128,nexttoward,primary,primary,8200,boost::multiprecision::cpp_double_double,yes,106.002,128.082,100,Yes,105.002,126.046,99.4212,No,1,0.578757,7.90099,70.4502,8.91664,boost::multiprecision::cpp_double_double,2.03561,1,0.578757,8.91664,no,-,-,-,-,-,-,-,- -Roots & powers,sqrt,f128,sqrt,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,104.646,119.282,99.8842,Yes,104.646,119.282,99.8842,No,0,0,4.31667,7.3566,1.70423,qdpp (dd_real),1.53501,1.36969,0.867873,1.23622,yes,103.276,117.747,99.0163,No,1.36969,0.867873,5.33633,1.23622 -Roots & powers,cbrt,f128,cbrt,primary,primary,8201,boost::multiprecision::cpp_double_double,yes,102.352,114.451,98.9867,Yes,104.283,114.732,99.5255,No,-1.93074,-0.538804,23.4571,424.661,18.1037,qdpp (dd_real),5.58369,6.22937,25.0623,2.78504,yes,96.1229,108.867,73.9244,No,6.22937,25.0623,65.329,2.78504 -Roots & powers,hypot,f128,hypot,primary,primary,8196,boost::multiprecision::cpp_double_double,yes,104.74,127.379,99.8577,Yes,103.864,127.414,99.7344,Yes,0.876314,0.123233,15.191,61.9345,4.07704,boost::multiprecision::cpp_double_double,-0.0350803,0.876314,0.123233,4.07704,no,-,-,-,-,-,-,-,- -Roots & powers,pow,f128,pow,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,99.1293,115.313,94.6003,Yes,93.1818,111.624,75.9208,No,5.94752,18.6795,234.386,826.983,3.52829,qdpp (dd_real),0.433914,0.852506,3.1244,1.16896,yes,98.2768,114.88,91.4759,No,0.852506,3.1244,273.988,1.16896 -Exponentials,exp,f128,exp,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,103.931,121.283,99.1267,Yes,99.4777,116.954,93.9116,Yes,4.45346,5.21508,96.4122,374.617,3.88558,qdpp (dd_real),0.133431,0.0177136,9.5273,1.2114,yes,103.913,121.15,89.5994,Yes,0.0177136,9.5273,116.794,1.2114 -Exponentials,exp2,f128,exp2,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,105.259,141.456,99.8321,Yes,98.1044,134.283,75.8474,Yes,7.15456,23.9847,96.0158,821.996,8.56106,boost::multiprecision::cpp_double_double,7.17331,7.15456,23.9847,8.56106,no,-,-,-,-,-,-,-,- -Exponentials,expm1,f128,expm1,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,104.383,108.929,99.1385,Yes,100.185,106.583,93.9416,No,4.19814,5.19697,99.4668,397.178,3.99308,qdpp (dd_real),0.15437,104.383,19.7789,1.17667,yes,-0,108.775,79.3597,No,104.383,19.7789,117.04,1.17667 -Logarithms,log,f128,log,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,104.861,108.447,99.6198,Yes,101.184,106.694,79.2122,Yes,3.67729,20.4077,111.949,405.283,3.62024,qdpp (dd_real),2.31997,2.85077,23.4281,1.25263,yes,102.01,106.127,76.1917,No,2.85077,23.4281,140.231,1.25263 -Logarithms,log2,f128,log2,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,104.439,107.982,99.3813,Yes,100.642,106.55,79.1376,Yes,3.79745,20.2437,115.478,415.083,3.59448,boost::multiprecision::cpp_double_double,1.43214,3.79745,20.2437,3.59448,no,-,-,-,-,-,-,-,- -Logarithms,log10,f128,log10,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,104.007,107.886,99.3801,Yes,102.189,103.785,78.0085,Yes,1.81856,21.3716,115.615,415.183,3.59109,qdpp (dd_real),2.14613,2.02712,23.1942,1.39703,yes,101.98,105.74,76.1858,No,2.02712,23.1942,161.518,1.39703 -Logarithms,log1p,f128,log1p,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,105.178,108.711,99.7906,Yes,100.817,105.367,98.7213,No,4.3614,1.06929,120.22,518.347,4.31164,qdpp (dd_real),0.896884,104.178,22.2292,1.09555,yes,1,107.814,77.5614,No,104.178,22.2292,131.707,1.09555 -Trigonometric,sin,f128,sin,primary,primary,8204,boost::multiprecision::cpp_double_double,yes,105.496,110.314,100,Yes,89.759,93.5169,89.2125,No,15.7367,10.7875,83.3861,638.01,7.65128,qdpp (dd_real),15.0159,15.1151,26.3194,1.45696,yes,90.3806,95.2977,73.6806,No,15.1151,26.3194,121.49,1.45696 -Trigonometric,cos,f128,cos,primary,primary,8204,boost::multiprecision::cpp_double_double,yes,106.113,110.278,99.8776,Yes,89.6755,93.5106,89.2416,Yes,16.4374,10.636,83.4221,642.196,7.69816,qdpp (dd_real),14.9828,15.7323,26.2185,1.44711,yes,90.3806,95.2956,73.6591,Yes,15.7323,26.2185,120.721,1.44711 -Trigonometric,tan,f128,tan,primary,primary,8198,boost::multiprecision::cpp_double_double,yes,103.808,107.887,99.1599,Yes,78.8778,91.3367,81.6497,No,24.9305,17.5103,95.3372,1304.56,13.6837,qdpp (dd_real),14.7296,22.6805,26.6036,1.61627,yes,81.1278,93.1578,72.5564,No,22.6805,26.6036,154.091,1.61627 -Trigonometric,asin,f128,asin,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,104.745,109.314,99.8125,Yes,103.363,107.914,99.0247,No,1.38199,0.787814,155.926,2257.62,14.4788,qdpp (dd_real),1.38683,1.45265,0.766399,1.58802,yes,103.293,107.928,99.0461,No,1.45265,0.766399,247.614,1.58802 -Trigonometric,acos,f128,acos,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,104.716,108.74,99.6766,Yes,103.704,107.064,99.0658,Yes,1.01153,0.610869,161.67,2212.68,13.6864,qdpp (dd_real),0.562685,1.17194,0.478494,1.51911,yes,103.544,108.177,99.1981,No,1.17194,0.478494,245.595,1.51911 -Trigonometric,atan,f128,atan,primary,primary,8201,boost::multiprecision::cpp_double_double,yes,105.639,133.132,99.965,Yes,104.577,131.913,99.8248,No,1.06176,0.140112,109.815,376.974,3.4328,qdpp (dd_real),0.256343,2.09318,60.3261,1.68597,yes,103.546,132.876,39.6389,No,2.09318,60.3261,185.145,1.68597 -Trigonometric,atan2,f128,atan2,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,105.542,115.119,99.9908,Yes,104.488,113.223,45.8421,No,1.05396,54.1487,126.827,2053,16.1875,qdpp (dd_real),0.941277,2.27686,70.376,1.51534,yes,103.265,114.178,29.6148,No,2.27686,70.376,192.185,1.51534 -Hyperbolic,sinh,f128,sinh,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,103.988,107.887,99.0171,Yes,99.3953,104.573,46.7718,No,4.59247,52.2452,107.31,380.055,3.54164,qdpp (dd_real),0.309227,-0.0281223,12.5737,1.30698,yes,104.016,107.578,86.4434,No,-0.0281223,12.5737,140.252,1.30698 -Hyperbolic,cosh,f128,cosh,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,103.886,107.638,99.021,Yes,99.3953,103.9,46.6221,Yes,4.49038,52.3989,103.924,387.513,3.7288,qdpp (dd_real),0.143623,-0.198486,9.3156,1.35525,yes,104.084,107.495,89.7054,No,-0.198486,9.3156,140.844,1.35525 -Hyperbolic,tanh,f128,tanh,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,105.229,114.86,99.9866,Yes,101.356,108.395,98.7705,No,3.87213,1.21612,112.18,453.434,4.04204,qdpp (dd_real),-0.634357,0,9.7499,1.29371,yes,105.229,115.494,90.2367,No,0,9.7499,145.128,1.29371 -Inverse hyperbolic,asinh,f128,asinh,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,104.918,115.406,99.66,Yes,101.004,114.101,98.4166,No,3.91411,1.24348,126.278,550.086,4.35614,qdpp (dd_real),0.79564,103.918,60.2222,1.29723,yes,1,114.61,39.4378,No,103.918,60.2222,163.811,1.29723 -Inverse hyperbolic,acosh,f128,acosh,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,105.033,111.689,99.674,Yes,101.017,110.167,98.6318,Yes,4.01654,1.04215,124.916,512.006,4.0988,qdpp (dd_real),1.17881,104.033,87.019,1.25573,yes,1,110.51,12.6549,No,104.033,87.019,156.861,1.25573 -Inverse hyperbolic,atanh,f128,atanh,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,104.824,121.177,99.6032,Yes,101.793,119.712,97.9056,No,3.03024,1.69761,105.648,1627.49,15.4049,qdpp (dd_real),1.10139,102.824,19.4431,1.54319,yes,2,120.075,80.1601,No,102.824,19.4431,163.034,1.54319 -Special functions,erfc,f128,erfc,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,104.462,116.48,99.8078,Yes,102.446,116.422,99.4815,Yes,2.01643,0.326225,833.456,1182.75,1.41909,boost::multiprecision::cpp_double_double,0.0581146,2.01643,0.326225,1.41909,no,-,-,-,-,-,-,-,- -Special functions,erf,f128,erf,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,104.06,109.75,99.8075,Yes,102.148,109.658,99.532,No,1.91159,0.275451,834.795,1191.32,1.42708,boost::multiprecision::cpp_double_double,0.0911588,1.91159,0.275451,1.42708,no,-,-,-,-,-,-,-,- -Special functions,tgamma,f128,tgamma,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,97.0151,104.856,92.5288,Yes,95.374,100.634,73.3707,No,1.64108,19.1582,441.904,2026.2,4.58517,boost::multiprecision::cpp_double_double,4.22142,1.64108,19.1582,4.58517,no,-,-,-,-,-,-,-,- -Special functions,lgamma,f128,lgamma,primary,primary,8197,boost::multiprecision::cpp_double_double,yes,102.202,107.516,98.6987,Yes,101.084,105.6,78.2719,Yes,1.11782,20.4268,450.524,2150.38,4.77305,boost::multiprecision::cpp_double_double,1.91561,1.11782,20.4268,4.77305,no,-,-,-,-,-,-,-,- -Comparisons,operator==,f128,operator==,primary,primary,8200,boost::multiprecision::cpp_double_double,yes,160,160,100,Yes,160,160,79.9943,Yes,0,20.0057,2.10188,6.20212,2.95075,qdpp (dd_real),0,0,0,1.00081,yes,160,160,100,Yes,0,0,2.10359,1.00081 -Comparisons,operator!=,f128,operator!=,primary,primary,8200,boost::multiprecision::cpp_double_double,yes,160,160,100,Yes,160,160,79.9943,Yes,0,20.0057,2.10127,6.36216,3.02777,qdpp (dd_real),0,0,0,1.00007,yes,160,160,100,Yes,0,0,2.10142,1.00007 -Comparisons,operator<,f128,operator<,primary,primary,8200,boost::multiprecision::cpp_double_double,yes,160,160,100,Yes,160,160,100,Yes,0,0,2.26744,6.29283,2.77531,qdpp (dd_real),0,0,0,1.00447,yes,160,160,100,Yes,0,0,2.27758,1.00447 -Comparisons,operator>,f128,operator>,primary,primary,8200,boost::multiprecision::cpp_double_double,yes,160,160,100,Yes,160,160,79.9943,Yes,0,20.0057,2.28505,6.37127,2.78824,qdpp (dd_real),0,0,0,1.00365,yes,160,160,100,Yes,0,0,2.29339,1.00365 -Comparisons,operator<=,f128,operator<=,primary,primary,8200,boost::multiprecision::cpp_double_double,yes,160,160,100,Yes,160,160,79.9943,Yes,0,20.0057,2.27382,6.46642,2.84386,qdpp (dd_real),0,0,0,1.01315,yes,160,160,100,Yes,0,0,2.30371,1.01315 -Comparisons,operator>=,f128,operator>=,primary,primary,8200,boost::multiprecision::cpp_double_double,yes,160,160,100,Yes,160,160,100,Yes,0,0,2.29061,6.29701,2.74906,qdpp (dd_real),0,0,0,1.00399,yes,160,160,100,Yes,0,0,2.29975,1.00399 diff --git a/res/metrics/windows/MSVC_f256.csv b/res/metrics/windows/MSVC_f256.csv deleted file mode 100644 index d0353a4..0000000 --- a/res/metrics/windows/MSVC_f256.csv +++ /dev/null @@ -1,70 +0,0 @@ -group,label,precision,operation,domain,domain_role,samples,primary_competitor,primary_competitor_supported,fltx_worst_bits,fltx_mean_bits,fltx_domain_score,fltx_inf_nan_correct,competitor_worst_bits,competitor_mean_bits,competitor_domain_score,competitor_inf_nan_correct,precision_gap_bits,domain_gap_pp,fltx_ns_iter,competitor_ns_iter,speed_ratio,preferred_reference,preferred_mean_gap_bits,preferred_worst_gap_bits,preferred_domain_gap_pp,preferred_speed_ratio,qdpp (qd_real)_supported,qdpp (qd_real)_worst_bits,qdpp (qd_real)_mean_bits,qdpp (qd_real)_domain_score,qdpp (qd_real)_inf_nan_correct,qdpp (qd_real)_gap_bits,qdpp (qd_real)_domain_gap_pp,qdpp (qd_real)_ns_iter,qdpp (qd_real)_speed_ratio -f256 <-> f256,add,f256,add,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,215.1,260.571,100,Yes,152.233,225.207,99.6879,Yes,62.8662,0.312055,13.3689,55.2709,4.1343,qdpp (qd_real),0.000219766,0,0,2.60136,yes,215.1,260.571,100,No,0,0,34.7772,2.60136 -f256 <-> f256,subtract,f256,subtract,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,215.059,259.913,100,Yes,152.198,225.522,99.9568,Yes,62.8614,0.0432255,13.4434,55.4066,4.12147,qdpp (qd_real),0.000699088,0,0,2.65969,yes,215.059,259.912,100,No,0,0,35.7553,2.65969 -f256 <-> f256,multiply,f256,multiply,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,215.044,250.575,100,Yes,212.804,246.007,100,Yes,2.23974,0,17.3853,61.6733,3.54743,qdpp (qd_real),0,0,0,1.20643,yes,215.044,250.575,100,No,0,0,20.9742,1.20643 -f256 <-> f256,divide,f256,divide,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,214.587,233.418,100,Yes,212.78,227.178,100,Yes,1.80731,0,77.0337,115.081,1.49391,boost::multiprecision::mpfr_float_backend<64>,6.24006,1.80731,0,1.49391,yes,214.496,233.635,100,No,0.0910899,0,299.972,3.89403 -Mixed Workloads,affine trig transform,f256,affine transform,mixed,stress,28,boost::multiprecision::mpfr_float_backend<64>,yes,211.085,211.715,99.6764,-,214.628,215.967,100,-,-3.54282,-0.323583,1265.08,3675.56,2.9054,qdpp (qd_real),-6.41207,-5.66305,-0.323583,2.08039,yes,216.748,218.127,100,-,-5.66305,-0.323583,2631.85,2.08039 -Mixed Workloads,mandelbrot kernel,f256,mandelbrot,mixed,stress,3072,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,-,exact,320,100,-,0,0,123.188,339.189,2.75343,qdpp (qd_real),0,0,0,1.58032,yes,exact,320,100,-,0,0,194.676,1.58032 -Mixed Workloads,mixed arithmetic,f256,mixed arithmetic,mixed,stress,196,boost::multiprecision::mpfr_float_backend<64>,yes,203.606,213.487,99.3567,-,203.263,213.814,99.3502,-,0.342723,0.00650101,359.72,957.152,2.66083,qdpp (qd_real),-3.59029,-6.14938,-0.529821,2.51743,yes,209.755,217.077,99.8865,-,-6.14938,-0.529821,905.569,2.51743 -Rounding,floor,f256,floor,primary,primary,4102,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,Yes,exact,320,99.9303,Yes,0,0.0697354,8.42264,40.0824,4.75889,qdpp (qd_real),0,0,0,0.99911,yes,exact,320,100,No,0,0,8.41515,0.99911 -Rounding,ceil,f256,ceil,primary,primary,4102,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,Yes,exact,320,99.9082,Yes,0,0.09183,8.41745,40.1322,4.76773,qdpp (qd_real),0,0,0,1.00034,yes,exact,320,100,No,0,0,8.42029,1.00034 -Rounding,trunc,f256,trunc,primary,primary,4102,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,Yes,exact,320,99.765,Yes,0,0.235029,8.94774,39.3456,4.39726,qdpp (qd_real),0,0,0,0.942929,yes,exact,320,100,No,0,0,8.43708,0.942929 -Rounding,round,f256,round,primary,primary,4102,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,79.9658,Yes,exact,320,99.8241,Yes,0,-19.8583,12.6073,80.5989,6.39306,boost::multiprecision::mpfr_float_backend<64>,0,0,-19.8583,6.39306,yes,9.84862,281.914,79.8606,No,exact,0.105211,8.51371,0.675302 -Rounding,nearbyint,f256,nearbyint,primary,primary,4102,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,79.9264,Yes,exact,320,99.4684,Yes,0,-19.5419,12.5747,80.5222,6.40349,boost::multiprecision::mpfr_float_backend<64>,0,0,-19.5419,6.40349,yes,9.84862,281.914,79.8534,No,exact,0.0730028,8.54109,0.679226 -Rounding,rint,f256,rint,primary,primary,4102,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,79.9264,Yes,exact,320,100,Yes,0,-20.0736,12.3192,82.0976,6.66419,boost::multiprecision::mpfr_float_backend<64>,0,0,-20.0736,6.66419,yes,9.84862,281.914,79.8647,No,exact,0.0617895,8.486,0.688842 -Rounding,lround,f256,lround,primary,primary,4102,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,-,exact,320,100,-,0,0,12.073,121.62,10.0737,boost::multiprecision::mpfr_float_backend<64>,0,0,0,10.0737,no,-,-,-,-,-,-,-,- -Rounding,llround,f256,llround,primary,primary,4102,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,-,exact,320,100,-,0,0,11.6169,210.136,18.0889,boost::multiprecision::mpfr_float_backend<64>,0,0,0,18.0889,no,-,-,-,-,-,-,-,- -Rounding,lrint,f256,lrint,primary,primary,4102,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,-,exact,320,79.924,-,0,20.076,11.7546,116.204,9.88577,boost::multiprecision::mpfr_float_backend<64>,0,0,20.076,9.88577,no,-,-,-,-,-,-,-,- -Rounding,llrint,f256,llrint,primary,primary,4102,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,-,exact,320,79.924,-,0,20.076,11.3639,209.354,18.4228,boost::multiprecision::mpfr_float_backend<64>,0,0,20.076,18.4228,no,-,-,-,-,-,-,-,- -Remainders,fmod,f256,fmod,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,215.246,311.979,96.281,Yes,173.276,224.93,39.4109,Yes,41.97,56.8701,94.6522,198.196,2.09394,qdpp (qd_real),45.5939,40.0394,64.0385,4.0292,yes,175.206,266.385,32.2425,No,40.0394,64.0385,381.373,4.0292 -Remainders,remainder,f256,remainder,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,211.269,310.867,99.5026,Yes,173.276,224.551,39.8679,Yes,37.9927,59.6348,121.368,231.715,1.90918,qdpp (qd_real),44.8257,199.722,66.674,3.14258,yes,11.547,266.041,32.8286,No,199.722,66.674,381.41,3.14258 -Remainders,remquo,f256,remquo,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,211.269,310.867,99.3214,Yes,173.276,224.551,39.6749,Yes,37.9927,59.6464,122.529,241.529,1.9712,boost::multiprecision::mpfr_float_backend<64>,86.3163,37.9927,59.6464,1.9712,no,-,-,-,-,-,-,-,- -Floating-point utilities,abs,f256,fabs,primary,primary,4105,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,Yes,214.001,248.326,100,Yes,exact,0,8.44318,44.6072,5.28322,qdpp (qd_real),0,0,0,0.997603,yes,exact,320,100,No,0,0,8.42295,0.997603 -Floating-point utilities,fma,f256,fma,primary,primary,4099,boost::multiprecision::mpfr_float_backend<64>,yes,215.144,226.964,100,Yes,200.883,219.158,100,Yes,14.2614,0,25.9852,84.6126,3.25618,boost::multiprecision::mpfr_float_backend<64>,7.80597,14.2614,0,3.25618,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmin,f256,fmin,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,Yes,214.003,245.176,100,Yes,exact,0,8.46372,50.3826,5.95277,boost::multiprecision::mpfr_float_backend<64>,exact,105.997,0,5.95277,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmax,f256,fmax,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,Yes,214.001,244.894,100,Yes,exact,0,8.42925,49.4052,5.86116,boost::multiprecision::mpfr_float_backend<64>,exact,105.999,0,5.86116,no,-,-,-,-,-,-,-,- -Floating-point utilities,fdim,f256,fdim,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,215.059,289.849,100,Yes,152.325,273.181,100,No,62.7337,0,9.72436,48.7773,5.01599,boost::multiprecision::mpfr_float_backend<64>,16.6676,62.7337,0,5.01599,no,-,-,-,-,-,-,-,- -Floating-point utilities,copysign,f256,copysign,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,Yes,214.001,247.414,100,Yes,exact,0,8.40972,67.8369,8.06649,boost::multiprecision::mpfr_float_backend<64>,exact,105.999,0,8.06649,no,-,-,-,-,-,-,-,- -Floating-point utilities,ldexp,f256,ldexp,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,Yes,214.018,338.408,100,Yes,exact,0,8.40842,43.8775,5.21828,qdpp (qd_real),0,0,0,1.02844,yes,exact,320,100,Yes,0,0,8.64759,1.02844 -Floating-point utilities,scalbn,f256,scalbn,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,Yes,214.018,338.408,100,Yes,exact,0,8.40968,43.919,5.22243,qdpp (qd_real),0,0,0,1.03133,yes,exact,320,100,Yes,0,0,8.67317,1.03133 -Floating-point utilities,scalbln,f256,scalbln,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,Yes,214.018,338.408,100,Yes,exact,0,8.41,43.6973,5.19587,qdpp (qd_real),0,0,0,1.02871,yes,exact,320,100,Yes,0,0,8.65144,1.02871 -Floating-point utilities,frexp,f256,frexp,primary,primary,4105,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,Yes,214.001,248.326,100,Yes,exact,0,10.6363,45.8113,4.30707,boost::multiprecision::mpfr_float_backend<64>,exact,105.999,0,4.30707,no,-,-,-,-,-,-,-,- -Floating-point utilities,modf,f256,modf,primary,primary,4102,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,Yes,185,209.179,50.3689,Yes,exact,49.6311,28.615,99.9087,3.49148,boost::multiprecision::mpfr_float_backend<64>,exact,135,49.6311,3.49148,no,-,-,-,-,-,-,-,- -Floating-point utilities,ilogb,f256,ilogb,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,79.6315,Yes,exact,320,100,Yes,0,-20.3685,2.1342,32.6577,15.3021,boost::multiprecision::mpfr_float_backend<64>,0,0,-20.3685,15.3021,no,-,-,-,-,-,-,-,- -Floating-point utilities,logb,f256,logb,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,79.6033,Yes,exact,320,79.9715,Yes,0,-0.368273,8.40994,66.0738,7.85662,boost::multiprecision::mpfr_float_backend<64>,0,0,-0.368273,7.85662,no,-,-,-,-,-,-,-,- -Floating-point utilities,nextafter,f256,nextafter,primary,primary,4104,boost::multiprecision::mpfr_float_backend<64>,yes,214.008,239.023,100,Yes,212.429,233.694,100,No,1.57828,0,9.25978,540.685,58.3906,boost::multiprecision::mpfr_float_backend<64>,5.32912,1.57828,0,58.3906,no,-,-,-,-,-,-,-,- -Floating-point utilities,nexttoward(type),f256,nexttoward,primary,primary,4104,boost::multiprecision::mpfr_float_backend<64>,yes,214.008,239.023,100,Yes,212.429,233.694,100,No,1.57828,0,9.89086,522.339,52.8103,boost::multiprecision::mpfr_float_backend<64>,5.32912,1.57828,0,52.8103,no,-,-,-,-,-,-,-,- -Roots & powers,sqrt,f256,sqrt,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,211.585,228.125,100,Yes,213.503,225.917,100,Yes,-1.91792,0,113.044,131.609,1.16422,boost::multiprecision::mpfr_float_backend<64>,2.20807,-1.91792,0,1.16422,yes,212.794,227.581,77.4285,No,-1.20823,22.5715,441.162,3.90256 -Roots & powers,cbrt,f256,cbrt,primary,primary,4105,boost::multiprecision::mpfr_float_backend<64>,yes,215.088,225.816,100,Yes,213.619,222.54,100,Yes,1.46976,0,343.767,421.288,1.2255,boost::multiprecision::mpfr_float_backend<64>,3.27536,1.46976,0,1.2255,yes,212.906,224.034,79.9201,No,2.18196,20.0799,1174.39,3.41624 -Roots & powers,hypot,f256,hypot,primary,primary,4100,boost::multiprecision::mpfr_float_backend<64>,yes,215.136,223.878,100,Yes,212.46,219.875,100,Yes,2.67603,0,183.472,492.216,2.68279,boost::multiprecision::mpfr_float_backend<64>,4.00243,2.67603,0,2.68279,no,-,-,-,-,-,-,-,- -Roots & powers,pow,f256,pow,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,208.603,225.666,98.353,Yes,206.178,223.553,99.714,Yes,2.42516,-1.36093,2419.41,3808.64,1.5742,boost::multiprecision::mpfr_float_backend<64>,2.11238,2.42516,-1.36093,1.5742,yes,208.957,226.003,98.5464,No,-0.354235,-0.193408,8246.03,3.40828 -Exponentials,exp,f256,exp,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,213.61,231.249,100,Yes,208.969,226.57,100,Yes,4.64024,0,900.807,1235.21,1.37123,boost::multiprecision::mpfr_float_backend<64>,4.67907,4.64024,0,1.37123,yes,213.667,231.052,100,Yes,-0.057336,0,1986.46,2.2052 -Exponentials,exp2,f256,exp2,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,214.321,250.545,100,Yes,208.498,243.951,100,Yes,5.82262,0,774.605,1488.16,1.92118,boost::multiprecision::mpfr_float_backend<64>,6.59451,5.82262,0,1.92118,no,-,-,-,-,-,-,-,- -Exponentials,expm1,f256,expm1,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,213.888,218.575,100,Yes,209.923,214.911,100,Yes,3.96466,0,900.055,1368.83,1.52083,boost::multiprecision::mpfr_float_backend<64>,3.66341,3.96466,0,1.52083,yes,-0,218.354,79.953,No,213.888,20.047,1982.56,2.20271 -Logarithms,log,f256,log,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,214.173,217.68,100,Yes,213.606,215.99,100,Yes,0.566564,0,1445.54,2377.39,1.64463,boost::multiprecision::mpfr_float_backend<64>,1.69071,0.566564,0,1.64463,yes,214.763,219.19,78.1887,No,-0.589811,21.8113,6281.73,4.34559 -Logarithms,log2,f256,log2,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,214.144,217.52,100,Yes,213.471,215.905,100,Yes,0.673611,0,1473.33,2621.15,1.77907,boost::multiprecision::mpfr_float_backend<64>,1.61488,0.673611,0,1.77907,no,-,-,-,-,-,-,-,- -Logarithms,log10,f256,log10,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,214.022,217.483,100,Yes,213.776,215.954,100,Yes,0.245569,0,2546.5,4620.56,1.81447,boost::multiprecision::mpfr_float_backend<64>,1.52833,0.245569,0,1.81447,yes,213.741,216.512,78.1149,No,0.280754,21.8851,6614.78,2.5976 -Logarithms,log1p,f256,log1p,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,214.357,217.495,100,Yes,212.938,216.005,100,Yes,1.41964,0,1475.79,2440.84,1.65392,boost::multiprecision::mpfr_float_backend<64>,1.48927,1.41964,0,1.65392,yes,6.56927,217.894,80.5582,No,207.788,19.4418,6157.87,4.1726 -Trigonometric,sin,f256,sin,primary,primary,4108,boost::multiprecision::mpfr_float_backend<64>,yes,202.398,204.868,96.4502,Yes,199,205.073,95.5352,Yes,3.39837,0.915014,816.507,1663.93,2.03786,boost::multiprecision::mpfr_float_backend<64>,-0.205225,3.39837,0.915014,2.03786,yes,199.828,204.737,77.637,No,2.57031,18.8132,1822.08,2.23156 -Trigonometric,cos,f256,cos,primary,primary,4108,boost::multiprecision::mpfr_float_backend<64>,yes,202.398,204.866,96.4816,Yes,199,205.041,95.5584,Yes,3.39839,0.923162,809.045,1260.62,1.55816,boost::multiprecision::mpfr_float_backend<64>,-0.175534,3.39839,0.923162,1.55816,yes,199.828,204.732,77.6529,Yes,2.57027,18.8287,1828.74,2.26037 -Trigonometric,tan,f256,tan,primary,primary,4102,boost::multiprecision::mpfr_float_backend<64>,yes,189.784,202.695,92.6508,Yes,185.473,202.402,94.4545,Yes,4.31112,-1.80378,991.519,1878.92,1.89499,boost::multiprecision::mpfr_float_backend<64>,0.293318,4.31112,-1.80378,1.89499,yes,187.378,202.557,77.0534,No,2.40614,15.5973,2237.17,2.2563 -Trigonometric,asin,f256,asin,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,214.746,219.096,100,Yes,209.888,216.802,100,Yes,4.85858,0,1294.47,6025.17,4.65455,boost::multiprecision::mpfr_float_backend<64>,2.29387,4.85858,0,4.65455,yes,212.416,217.458,100,No,2.33041,0,8267.32,6.38664 -Trigonometric,acos,f256,acos,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,214.537,218.142,100,Yes,209.303,215.753,100,Yes,5.2338,0,1366.33,6150.75,4.50165,boost::multiprecision::mpfr_float_backend<64>,2.38897,5.2338,0,4.50165,yes,212.516,217.483,100,No,2.02062,0,8313.58,6.08459 -Trigonometric,atan,f256,atan,primary,primary,4105,boost::multiprecision::mpfr_float_backend<64>,yes,215.319,238.691,100,Yes,213.913,235.642,100,Yes,1.40574,0,838.817,1932.67,2.30404,boost::multiprecision::mpfr_float_backend<64>,3.04926,1.40574,0,2.30404,yes,213.783,237.903,39.6915,No,1.53642,60.3085,6155.07,7.3378 -Trigonometric,atan2,f256,atan2,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,214.816,224.462,97.1549,Yes,213.617,222.052,100,Yes,1.19896,-2.8451,1016.53,4257.04,4.18783,boost::multiprecision::mpfr_float_backend<64>,2.41038,1.19896,-2.8451,4.18783,yes,212.378,223.427,25.9127,No,2.43778,71.2422,6198.7,6.09791 -Hyperbolic,sinh,f256,sinh,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,213.813,217.555,100,Yes,208.963,214.487,100,Yes,4.84942,0,1113.44,1441.49,1.29462,boost::multiprecision::mpfr_float_backend<64>,3.06804,4.84942,0,1.29462,yes,213.78,217.269,100,No,0.0327492,0,2302.85,2.06822 -Hyperbolic,cosh,f256,cosh,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,213.757,217.264,100,Yes,208.96,213.789,100,Yes,4.79687,0,1131.75,1412.35,1.24793,boost::multiprecision::mpfr_float_backend<64>,3.47508,4.79687,0,1.24793,yes,213.661,217.024,100,No,0.0960654,0,2295.29,2.02809 -Hyperbolic,tanh,f256,tanh,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,215.496,225.55,100,Yes,214.197,216.952,100,Yes,1.29918,0,1102.83,1485.84,1.3473,boost::multiprecision::mpfr_float_backend<64>,8.59804,1.29918,0,1.3473,yes,214.858,225.351,100,No,0.637737,0,2329.72,2.1125 -Inverse hyperbolic,asinh,f256,asinh,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,214.067,224.792,100,Yes,213.76,223.186,100,Yes,0.307416,0,1759.92,4581.94,2.60349,boost::multiprecision::mpfr_float_backend<64>,1.60604,0.307416,0,2.60349,yes,6.56927,225.059,38.8353,No,207.498,61.1647,6425.82,3.6512 -Inverse hyperbolic,acosh,f256,acosh,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,214.265,221.114,100,Yes,185.052,212.989,100,Yes,29.213,0,1741.02,4708.78,2.70461,boost::multiprecision::mpfr_float_backend<64>,8.12516,29.213,0,2.70461,yes,6.56927,221.425,13.2776,No,207.696,86.7224,6570,3.77365 -Inverse hyperbolic,atanh,f256,atanh,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,214.402,228.238,100,Yes,166.255,221.256,100,Yes,48.1476,0,1582.73,2750.92,1.73809,boost::multiprecision::mpfr_float_backend<64>,6.98245,48.1476,0,1.73809,yes,7.56927,227.93,80.6852,No,206.833,19.3148,6167.76,3.89691 -Special functions,erfc,f256,erfc,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,197.011,216.092,97.2301,Yes,214.05,224.149,100,Yes,-17.0387,-2.76992,9672.91,24326.9,2.51496,boost::multiprecision::mpfr_float_backend<64>,-8.05698,-17.0387,-2.76992,2.51496,no,-,-,-,-,-,-,-,- -Special functions,erf,f256,erf,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,197.011,211.514,97.0863,Yes,214.163,216.607,100,Yes,-17.1521,-2.91373,9685.54,15422.6,1.59233,boost::multiprecision::mpfr_float_backend<64>,-5.09286,-17.1521,-2.91373,1.59233,no,-,-,-,-,-,-,-,- -Special functions,tgamma,f256,tgamma,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,202.451,208.85,96.229,Yes,206.946,212.451,100,Yes,-4.49523,-3.77105,7538.36,14406.2,1.91105,boost::multiprecision::mpfr_float_backend<64>,-3.60175,-4.49523,-3.77105,1.91105,no,-,-,-,-,-,-,-,- -Special functions,lgamma,f256,lgamma,primary,primary,4101,boost::multiprecision::mpfr_float_backend<64>,yes,202.523,212.537,45.9715,Yes,212.3,215.336,46.275,Yes,-9.77701,-0.303436,6621.49,19291,2.91338,boost::multiprecision::mpfr_float_backend<64>,-2.79946,-9.77701,-0.303436,2.91338,no,-,-,-,-,-,-,-,- -Comparisons,operator==,f256,operator==,primary,primary,4104,boost::multiprecision::mpfr_float_backend<64>,yes,320,320,100,Yes,320,320,100,Yes,0,0,2.11153,6.25658,2.96306,qdpp (qd_real),0,0,0,1.0004,yes,320,320,100,Yes,0,0,2.11238,1.0004 -Comparisons,operator!=,f256,operator!=,primary,primary,4104,boost::multiprecision::mpfr_float_backend<64>,yes,320,320,100,Yes,320,320,100,Yes,0,0,2.11918,6.12374,2.88968,qdpp (qd_real),0,0,0,0.997167,yes,320,320,100,Yes,0,0,2.11317,0.997167 -Comparisons,operator<,f256,operator<,primary,primary,4104,boost::multiprecision::mpfr_float_backend<64>,yes,320,320,100,Yes,320,320,100,Yes,0,0,2.14722,7.46015,3.47433,qdpp (qd_real),0,0,0,0.998388,yes,320,320,100,Yes,0,0,2.14376,0.998388 -Comparisons,operator>,f256,operator>,primary,primary,4104,boost::multiprecision::mpfr_float_backend<64>,yes,320,320,100,Yes,320,320,100,Yes,0,0,2.15036,7.39395,3.43847,qdpp (qd_real),0,0,0,0.996502,yes,320,320,100,Yes,0,0,2.14284,0.996502 -Comparisons,operator<=,f256,operator<=,primary,primary,4104,boost::multiprecision::mpfr_float_backend<64>,yes,320,320,100,Yes,320,320,100,Yes,0,0,2.16478,7.57072,3.49722,qdpp (qd_real),0,0,0,1.00542,yes,320,320,100,Yes,0,0,2.17651,1.00542 -Comparisons,operator>=,f256,operator>=,primary,primary,4104,boost::multiprecision::mpfr_float_backend<64>,yes,320,320,100,Yes,320,320,100,Yes,0,0,2.15701,8.03741,3.72618,qdpp (qd_real),0,0,0,0.991559,yes,320,320,100,Yes,0,0,2.1388,0.991559 diff --git a/res/metrics/windows/MinGW_f128.csv b/res/metrics/windows/MinGW_f128.csv deleted file mode 100644 index e422f42..0000000 --- a/res/metrics/windows/MinGW_f128.csv +++ /dev/null @@ -1,70 +0,0 @@ -group,label,precision,operation,domain,domain_role,samples,primary_competitor,primary_competitor_supported,fltx_worst_bits,fltx_mean_bits,fltx_domain_score,fltx_inf_nan_correct,competitor_worst_bits,competitor_mean_bits,competitor_domain_score,competitor_inf_nan_correct,precision_gap_bits,domain_gap_pp,fltx_ns_iter,competitor_ns_iter,speed_ratio,preferred_reference,preferred_mean_gap_bits,preferred_worst_gap_bits,preferred_domain_gap_pp,preferred_speed_ratio,qdpp (dd_real)_supported,qdpp (dd_real)_worst_bits,qdpp (dd_real)_mean_bits,qdpp (dd_real)_domain_score,qdpp (dd_real)_inf_nan_correct,qdpp (dd_real)_gap_bits,qdpp (dd_real)_domain_gap_pp,qdpp (dd_real)_ns_iter,qdpp (dd_real)_speed_ratio -f128 <-> f128,add,f128,add,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.38518,8.50393,1.93925,qdpp (dd_real),-,-,-,1.00551,yes,-,-,-,-,-,-,4.40935,1.00551 -f128 <-> f128,subtract,f128,subtract,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.37049,9.14442,2.09231,qdpp (dd_real),-,-,-,0.99691,yes,-,-,-,-,-,-,4.35698,0.99691 -f128 <-> f128,multiply,f128,multiply,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.35062,123.726,28.4388,qdpp (dd_real),-,-,-,0.980308,yes,-,-,-,-,-,-,4.26495,0.980308 -f128 <-> f128,divide,f128,divide,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.29623,127.834,29.755,qdpp (dd_real),-,-,-,3.33167,yes,-,-,-,-,-,-,14.3136,3.33167 -Mixed Workloads,affine trig transform,f128,affine transform,mixed,stress,28,boost::multiprecision::cpp_double_double,yes,109.179,109.227,100,-,105.205,107.24,99.4373,-,3.97402,0.562711,139.573,15260.4,109.336,qdpp (dd_real),2.49603,4.99207,1.28303,2.3639,yes,104.187,106.731,98.717,-,4.99207,1.28303,329.936,2.3639 -Mixed Workloads,mandelbrot kernel,f128,mandelbrot,mixed,stress,3072,boost::multiprecision::cpp_double_double,yes,3.41619,152.228,51.3273,-,3.54951,152.561,51.36,-,-0.133319,-0.0326876,13.5596,363.729,26.8246,qdpp (dd_real),1.83759,-0.185565,0.724835,1.19438,yes,3.60175,150.39,50.6024,-,-0.185565,0.724835,16.1952,1.19438 -Mixed Workloads,mixed arithmetic,f128,mixed arithmetic,mixed,stress,196,boost::multiprecision::cpp_double_double,yes,99.4338,107.795,99.1173,-,99.4338,107.795,99.1173,-,0,0,43.1781,1082.55,25.0718,qdpp (dd_real),1.97331,2.99741,1.00997,2.29361,yes,96.4364,105.821,98.1073,-,2.99741,1.00997,99.0337,2.29361 -Rounding,floor,f128,floor,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.23784,4.24896,1.00262,qdpp (dd_real),-,-,-,1.00026,yes,-,-,-,-,-,-,4.23892,1.00026 -Rounding,ceil,f128,ceil,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.26876,4.39068,1.02856,qdpp (dd_real),-,-,-,0.989259,yes,-,-,-,-,-,-,4.22291,0.989259 -Rounding,trunc,f128,trunc,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,5.46004,8.44321,1.54636,qdpp (dd_real),-,-,-,0.832928,yes,-,-,-,-,-,-,4.54782,0.832928 -Rounding,round,f128,round,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.87949,12.7644,2.61593,boost::multiprecision::cpp_double_double,-,-,-,2.61593,yes,-,-,-,-,-,-,13.0547,2.67541 -Rounding,nearbyint,f128,nearbyint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.43908,11.4529,1.77865,boost::multiprecision::cpp_double_double,-,-,-,1.77865,yes,-,-,-,-,-,-,12.8222,1.9913 -Rounding,rint,f128,rint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.36221,11.6827,1.83626,boost::multiprecision::cpp_double_double,-,-,-,1.83626,yes,-,-,-,-,-,-,12.8563,2.02073 -Rounding,lround,f128,lround,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,10.4627,24.1469,2.3079,boost::multiprecision::cpp_double_double,-,-,-,2.3079,no,-,-,-,-,-,-,-,- -Rounding,llround,f128,llround,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,12.2635,115.234,9.39649,boost::multiprecision::cpp_double_double,-,-,-,9.39649,no,-,-,-,-,-,-,-,- -Rounding,lrint,f128,lrint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,14.2186,24.4363,1.71862,boost::multiprecision::cpp_double_double,-,-,-,1.71862,no,-,-,-,-,-,-,-,- -Rounding,llrint,f128,llrint,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,13.6452,117.527,8.61305,boost::multiprecision::cpp_double_double,-,-,-,8.61305,no,-,-,-,-,-,-,-,- -Remainders,fmod,f128,fmod,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,31.02,227.256,7.32612,qdpp (dd_real),-,-,-,1.02238,yes,-,-,-,-,-,-,31.7143,1.02238 -Remainders,remainder,f128,remainder,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,33.3039,226.289,6.79465,qdpp (dd_real),-,-,-,1.29383,yes,-,-,-,-,-,-,43.0895,1.29383 -Remainders,remquo,f128,remquo,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,32.8868,225.833,6.86699,boost::multiprecision::cpp_double_double,-,-,-,6.86699,no,-,-,-,-,-,-,-,- -Floating-point utilities,abs,f128,fabs,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.24718,4.30679,1.01403,qdpp (dd_real),-,-,-,1.00361,yes,-,-,-,-,-,-,4.26252,1.00361 -Floating-point utilities,fma,f128,fma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.65819,132.581,28.4618,boost::multiprecision::cpp_double_double,-,-,-,28.4618,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmin,f128,fmin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.28733,4.296,1.00202,boost::multiprecision::cpp_double_double,-,-,-,1.00202,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmax,f128,fmax,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.31754,4.26944,0.988859,boost::multiprecision::cpp_double_double,-,-,-,0.988859,no,-,-,-,-,-,-,-,- -Floating-point utilities,fdim,f128,fdim,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.29704,8.49163,1.97616,boost::multiprecision::cpp_double_double,-,-,-,1.97616,no,-,-,-,-,-,-,-,- -Floating-point utilities,copysign,f128,copysign,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.34313,5.20456,1.19834,boost::multiprecision::cpp_double_double,-,-,-,1.19834,no,-,-,-,-,-,-,-,- -Floating-point utilities,ldexp,f128,ldexp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.31156,11.7286,2.72027,qdpp (dd_real),-,-,-,2.50153,yes,-,-,-,-,-,-,10.7855,2.50153 -Floating-point utilities,scalbn,f128,scalbn,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.22246,9.51813,2.25416,boost::multiprecision::cpp_double_double,-,-,-,2.25416,yes,-,-,-,-,-,-,9.98095,2.36377 -Floating-point utilities,scalbln,f128,scalbln,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.29577,11.238,2.61607,qdpp (dd_real),-,-,-,2.24047,yes,-,-,-,-,-,-,9.62454,2.24047 -Floating-point utilities,frexp,f128,frexp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,6.52404,11.9792,1.83617,boost::multiprecision::cpp_double_double,-,-,-,1.83617,no,-,-,-,-,-,-,-,- -Floating-point utilities,modf,f128,modf,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,7.28454,12.6286,1.73362,boost::multiprecision::cpp_double_double,-,-,-,1.73362,no,-,-,-,-,-,-,-,- -Floating-point utilities,ilogb,f128,ilogb,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.18093,8.68763,3.98345,boost::multiprecision::cpp_double_double,-,-,-,3.98345,no,-,-,-,-,-,-,-,- -Floating-point utilities,logb,f128,logb,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.29873,39.4271,9.17182,boost::multiprecision::cpp_double_double,-,-,-,9.17182,no,-,-,-,-,-,-,-,- -Floating-point utilities,nextafter,f128,nextafter,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.8839,36.4129,7.45571,boost::multiprecision::cpp_double_double,-,-,-,7.45571,no,-,-,-,-,-,-,-,- -Floating-point utilities,nexttoward(type),f128,nexttoward,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.76304,36.6636,7.69751,boost::multiprecision::cpp_double_double,-,-,-,7.69751,no,-,-,-,-,-,-,-,- -Roots & powers,sqrt,f128,sqrt,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,4.69414,29.7726,6.34249,qdpp (dd_real),-,-,-,1.26251,yes,-,-,-,-,-,-,5.92639,1.26251 -Roots & powers,cbrt,f128,cbrt,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,77.9763,2273.29,29.1536,qdpp (dd_real),-,-,-,1.83555,yes,-,-,-,-,-,-,143.13,1.83555 -Roots & powers,hypot,f128,hypot,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,14.5548,559.665,38.4522,boost::multiprecision::cpp_double_double,-,-,-,38.4522,no,-,-,-,-,-,-,-,- -Roots & powers,pow,f128,pow,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,269.798,5856.37,21.7065,qdpp (dd_real),-,-,-,1.84896,yes,-,-,-,-,-,-,498.848,1.84896 -Exponentials,exp,f128,exp,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,88.1502,2588.49,29.3646,qdpp (dd_real),-,-,-,2.29363,yes,-,-,-,-,-,-,202.184,2.29363 -Exponentials,exp2,f128,exp2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,93.833,5593.68,59.6131,boost::multiprecision::cpp_double_double,-,-,-,59.6131,no,-,-,-,-,-,-,-,- -Exponentials,expm1,f128,expm1,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,87.7078,2617.53,29.8437,qdpp (dd_real),-,-,-,2.3098,yes,-,-,-,-,-,-,202.588,2.3098 -Logarithms,log,f128,log,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,130.082,2875.08,22.102,qdpp (dd_real),-,-,-,2.0143,yes,-,-,-,-,-,-,262.025,2.0143 -Logarithms,log2,f128,log2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,159.664,3032.57,18.9934,boost::multiprecision::cpp_double_double,-,-,-,18.9934,no,-,-,-,-,-,-,-,- -Logarithms,log10,f128,log10,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,133.122,3001.7,22.5485,qdpp (dd_real),-,-,-,2.14605,yes,-,-,-,-,-,-,285.685,2.14605 -Logarithms,log1p,f128,log1p,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,140.978,3741.37,26.5386,qdpp (dd_real),-,-,-,1.84369,yes,-,-,-,-,-,-,259.921,1.84369 -Trigonometric,sin,f128,sin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,89.7467,7127.88,79.4222,qdpp (dd_real),-,-,-,2.49662,yes,-,-,-,-,-,-,224.064,2.49662 -Trigonometric,cos,f128,cos,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,92.0833,7137.61,77.5126,qdpp (dd_real),-,-,-,2.43231,yes,-,-,-,-,-,-,223.975,2.43231 -Trigonometric,tan,f128,tan,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,98.6885,14105.9,142.933,qdpp (dd_real),-,-,-,2.51513,yes,-,-,-,No,-,-,248.214,2.51513 -Trigonometric,asin,f128,asin,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,191.221,26253,137.291,qdpp (dd_real),-,-,-,1.94829,yes,-,-,-,No,-,-,372.554,1.94829 -Trigonometric,acos,f128,acos,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,189.794,25232,132.944,qdpp (dd_real),-,-,-,2.04733,yes,-,-,-,No,-,-,388.571,2.04733 -Trigonometric,atan,f128,atan,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,126.848,4229.11,33.34,qdpp (dd_real),-,-,-,2.32658,yes,-,-,-,No,-,-,295.122,2.32658 -Trigonometric,atan2,f128,atan2,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,144.243,23279.7,161.392,qdpp (dd_real),-,-,-,2.10766,yes,-,-,-,No,-,-,304.015,2.10766 -Hyperbolic,sinh,f128,sinh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,100.639,3018.52,29.9935,qdpp (dd_real),-,-,-,2.42431,yes,-,-,-,-,-,-,243.981,2.42431 -Hyperbolic,cosh,f128,cosh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,100.858,2752.63,27.292,qdpp (dd_real),-,-,-,2.27822,yes,-,-,-,-,-,-,229.778,2.27822 -Hyperbolic,tanh,f128,tanh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,98.8086,3402.28,34.433,qdpp (dd_real),-,-,-,2.37406,yes,-,-,-,-,-,-,234.577,2.37406 -Inverse hyperbolic,asinh,f128,asinh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,143.868,3802.3,26.4292,qdpp (dd_real),-,-,-,1.96184,yes,-,-,-,-,-,-,282.245,1.96184 -Inverse hyperbolic,acosh,f128,acosh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,151.283,3663.84,24.2185,qdpp (dd_real),-,-,-,1.80237,yes,-,-,-,-,-,-,272.667,1.80237 -Inverse hyperbolic,atanh,f128,atanh,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,124.454,13051.8,104.873,qdpp (dd_real),-,-,-,2.35231,yes,-,-,-,-,-,-,292.755,2.35231 -Special functions,erfc,f128,erfc,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,682.68,7937.72,11.6273,boost::multiprecision::cpp_double_double,-,-,-,11.6273,no,-,-,-,-,-,-,-,- -Special functions,erf,f128,erf,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,744.768,7948.44,10.6724,boost::multiprecision::cpp_double_double,-,-,-,10.6724,no,-,-,-,-,-,-,-,- -Special functions,tgamma,f128,tgamma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,514.134,17643.5,34.317,boost::multiprecision::cpp_double_double,-,-,-,34.317,no,-,-,-,-,-,-,-,- -Special functions,lgamma,f128,lgamma,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,542.612,16485.3,30.3814,boost::multiprecision::cpp_double_double,-,-,-,30.3814,no,-,-,-,-,-,-,-,- -Comparisons,operator==,f128,operator==,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.19447,2.79551,1.27389,qdpp (dd_real),-,-,-,1.01446,yes,-,-,-,-,-,-,2.22621,1.01446 -Comparisons,operator!=,f128,operator!=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.24538,2.80606,1.2497,qdpp (dd_real),-,-,-,0.98393,yes,-,-,-,-,-,-,2.2093,0.98393 -Comparisons,operator<,f128,operator<,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.18757,3.07774,1.40692,qdpp (dd_real),-,-,-,1.00956,yes,-,-,-,-,-,-,2.2085,1.00956 -Comparisons,operator>,f128,operator>,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.21806,2.21017,0.996442,boost::multiprecision::cpp_double_double,-,-,-,0.996442,yes,-,-,-,-,-,-,2.27202,1.02433 -Comparisons,operator<=,f128,operator<=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.22927,2.18861,0.981764,qdpp (dd_real),-,-,-,0.970066,yes,-,-,-,-,-,-,2.16254,0.970066 -Comparisons,operator>=,f128,operator>=,primary,primary,-,boost::multiprecision::cpp_double_double,yes,-,-,-,-,-,-,-,-,-,-,2.26186,2.81016,1.24241,qdpp (dd_real),-,-,-,0.973478,yes,-,-,-,-,-,-,2.20187,0.973478 diff --git a/res/metrics/windows/MinGW_f256.csv b/res/metrics/windows/MinGW_f256.csv deleted file mode 100644 index b4b0064..0000000 --- a/res/metrics/windows/MinGW_f256.csv +++ /dev/null @@ -1,70 +0,0 @@ -group,label,precision,operation,domain,domain_role,samples,primary_competitor,primary_competitor_supported,fltx_worst_bits,fltx_mean_bits,fltx_domain_score,fltx_inf_nan_correct,competitor_worst_bits,competitor_mean_bits,competitor_domain_score,competitor_inf_nan_correct,precision_gap_bits,domain_gap_pp,fltx_ns_iter,competitor_ns_iter,speed_ratio,preferred_reference,preferred_mean_gap_bits,preferred_worst_gap_bits,preferred_domain_gap_pp,preferred_speed_ratio,qdpp (qd_real)_supported,qdpp (qd_real)_worst_bits,qdpp (qd_real)_mean_bits,qdpp (qd_real)_domain_score,qdpp (qd_real)_inf_nan_correct,qdpp (qd_real)_gap_bits,qdpp (qd_real)_domain_gap_pp,qdpp (qd_real)_ns_iter,qdpp (qd_real)_speed_ratio -f256 <-> f256,add,f256,add,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,14.1955,74.1683,5.22479,qdpp (qd_real),-,-,-,2.89023,yes,-,-,-,-,-,-,41.0281,2.89023 -f256 <-> f256,subtract,f256,subtract,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,13.3111,64.7386,4.86352,qdpp (qd_real),-,-,-,3.0432,yes,-,-,-,-,-,-,40.5082,3.0432 -f256 <-> f256,multiply,f256,multiply,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,20.7599,89.2947,4.30132,qdpp (qd_real),-,-,-,2.29141,yes,-,-,-,-,-,-,47.5693,2.29141 -f256 <-> f256,divide,f256,divide,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,81.6947,170.227,2.08369,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.08369,yes,-,-,-,-,-,-,321.476,3.93509 -Mixed Workloads,affine trig transform,f256,affine transform,mixed,stress,28,boost::multiprecision::mpfr_float_backend<64>,yes,211.085,211.715,99.6764,-,214.628,215.967,100,-,-3.54282,-0.323583,1241.38,5393.26,4.34457,qdpp (qd_real),-6.41207,-5.66305,-0.323583,3.14874,yes,216.748,218.127,100,-,-5.66305,-0.323583,3908.78,3.14874 -Mixed Workloads,mandelbrot kernel,f256,mandelbrot,mixed,stress,3072,boost::multiprecision::mpfr_float_backend<64>,yes,exact,320,100,-,exact,320,100,-,0,0,131.22,437.7,3.33563,qdpp (qd_real),0,0,0,1.67349,yes,exact,320,100,-,0,0,219.595,1.67349 -Mixed Workloads,mixed arithmetic,f256,mixed arithmetic,mixed,stress,196,boost::multiprecision::mpfr_float_backend<64>,yes,205.264,213.582,99.4457,-,207.626,213.954,99.6266,-,-2.36159,-0.180957,361.055,1830.71,5.07045,qdpp (qd_real),-3.65589,-4.70507,-0.418591,3.64477,yes,209.969,217.238,99.8643,-,-4.70507,-0.418591,1315.96,3.64477 -Rounding,floor,f256,floor,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.64877,46.6939,5.3989,qdpp (qd_real),-,-,-,1.00234,yes,-,-,-,-,-,-,8.66897,1.00234 -Rounding,ceil,f256,ceil,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.63968,46.1457,5.34113,qdpp (qd_real),-,-,-,0.998296,yes,-,-,-,-,-,-,8.62495,0.998296 -Rounding,trunc,f256,trunc,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.65424,44.8593,5.18351,qdpp (qd_real),-,-,-,0.999709,yes,-,-,-,-,-,-,8.65172,0.999709 -Rounding,round,f256,round,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.6915,112.551,12.9496,qdpp (qd_real),-,-,-,1.52755,yes,-,-,-,-,-,-,13.2767,1.52755 -Rounding,nearbyint,f256,nearbyint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.50045,110.547,13.0049,qdpp (qd_real),-,-,-,1.56321,yes,-,-,-,-,-,-,13.2879,1.56321 -Rounding,rint,f256,rint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.57515,111.213,12.9693,qdpp (qd_real),-,-,-,1.53824,yes,-,-,-,-,-,-,13.1907,1.53824 -Rounding,lround,f256,lround,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,10.1133,152.88,15.1167,boost::multiprecision::mpfr_float_backend<64>,-,-,-,15.1167,no,-,-,-,-,-,-,-,- -Rounding,llround,f256,llround,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,10.1467,244.573,24.1037,boost::multiprecision::mpfr_float_backend<64>,-,-,-,24.1037,no,-,-,-,-,-,-,-,- -Rounding,lrint,f256,lrint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,10.3209,153.312,14.8545,boost::multiprecision::mpfr_float_backend<64>,-,-,-,14.8545,no,-,-,-,-,-,-,-,- -Rounding,llrint,f256,llrint,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,10.1993,245.993,24.1185,boost::multiprecision::mpfr_float_backend<64>,-,-,-,24.1185,no,-,-,-,-,-,-,-,- -Remainders,fmod,f256,fmod,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,104.327,293.781,2.81597,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.81597,yes,-,-,-,-,-,-,433.301,4.1533 -Remainders,remainder,f256,remainder,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,136.287,323.04,2.37029,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.37029,yes,-,-,-,-,-,-,442.813,3.24911 -Remainders,remquo,f256,remquo,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,136.405,332.165,2.43514,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.43514,no,-,-,-,-,-,-,-,- -Floating-point utilities,abs,f256,fabs,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.67937,40.957,4.71889,qdpp (qd_real),-,-,-,1.00256,yes,-,-,-,-,-,-,8.70156,1.00256 -Floating-point utilities,fma,f256,fma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,36.4192,178.607,4.90421,boost::multiprecision::mpfr_float_backend<64>,-,-,-,4.90421,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmin,f256,fmin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.50203,64.1966,7.55074,boost::multiprecision::mpfr_float_backend<64>,-,-,-,7.55074,no,-,-,-,-,-,-,-,- -Floating-point utilities,fmax,f256,fmax,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.49172,64.6457,7.6128,boost::multiprecision::mpfr_float_backend<64>,-,-,-,7.6128,no,-,-,-,-,-,-,-,- -Floating-point utilities,fdim,f256,fdim,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9.71128,52.203,5.3755,boost::multiprecision::mpfr_float_backend<64>,-,-,-,5.3755,no,-,-,-,-,-,-,-,- -Floating-point utilities,copysign,f256,copysign,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.4622,60.1417,7.1071,boost::multiprecision::mpfr_float_backend<64>,-,-,-,7.1071,no,-,-,-,-,-,-,-,- -Floating-point utilities,ldexp,f256,ldexp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9.09949,50.5062,5.55044,qdpp (qd_real),-,-,-,1.96901,yes,-,-,-,-,-,-,17.917,1.96901 -Floating-point utilities,scalbn,f256,scalbn,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9.10656,50.5422,5.55009,qdpp (qd_real),-,-,-,1.96234,yes,-,-,-,-,-,-,17.8702,1.96234 -Floating-point utilities,scalbln,f256,scalbln,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9.07948,50.5442,5.56686,qdpp (qd_real),-,-,-,1.96834,yes,-,-,-,-,-,-,17.8715,1.96834 -Floating-point utilities,frexp,f256,frexp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,14.0623,51.2201,3.64237,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.64237,no,-,-,-,-,-,-,-,- -Floating-point utilities,modf,f256,modf,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,14.4198,137.461,9.53277,boost::multiprecision::mpfr_float_backend<64>,-,-,-,9.53277,no,-,-,-,-,-,-,-,- -Floating-point utilities,ilogb,f256,ilogb,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.14857,40.8765,19.0249,boost::multiprecision::mpfr_float_backend<64>,-,-,-,19.0249,no,-,-,-,-,-,-,-,- -Floating-point utilities,logb,f256,logb,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.72108,88.5243,10.1506,boost::multiprecision::mpfr_float_backend<64>,-,-,-,10.1506,no,-,-,-,-,-,-,-,- -Floating-point utilities,nextafter,f256,nextafter,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.57295,701.716,81.8523,boost::multiprecision::mpfr_float_backend<64>,-,-,-,81.8523,no,-,-,-,-,-,-,-,- -Floating-point utilities,nexttoward(type),f256,nexttoward,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,8.52868,706.985,82.895,boost::multiprecision::mpfr_float_backend<64>,-,-,-,82.895,no,-,-,-,-,-,-,-,- -Roots & powers,sqrt,f256,sqrt,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,114.903,187.637,1.633,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.633,yes,-,-,-,-,-,-,622.419,5.41689 -Roots & powers,cbrt,f256,cbrt,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,391.237,545.598,1.39454,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.39454,yes,-,-,-,-,-,-,1489.41,3.80692 -Roots & powers,hypot,f256,hypot,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,190.038,826.23,4.34771,boost::multiprecision::mpfr_float_backend<64>,-,-,-,4.34771,no,-,-,-,-,-,-,-,- -Roots & powers,pow,f256,pow,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2599.51,5767.35,2.21862,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.21862,yes,-,-,-,-,-,-,12821.3,4.93217 -Exponentials,exp,f256,exp,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,878.812,1418.32,1.61391,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.61391,yes,-,-,-,-,-,-,2980.67,3.3917 -Exponentials,exp2,f256,exp2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,768.479,1920.95,2.49968,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.49968,no,-,-,-,-,-,-,-,- -Exponentials,expm1,f256,expm1,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,886.027,1553.72,1.75358,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.75358,yes,-,-,-,-,-,-,2887.94,3.25943 -Logarithms,log,f256,log,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1469.02,3158.97,2.15039,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.15039,yes,-,-,-,-,-,-,9540.93,6.49474 -Logarithms,log2,f256,log2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1556.06,3888.33,2.49883,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.49883,no,-,-,-,-,-,-,-,- -Logarithms,log10,f256,log10,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2686.63,6204.29,2.30932,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.30932,yes,-,-,-,-,-,-,9818.03,3.6544 -Logarithms,log1p,f256,log1p,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1581.64,3302.05,2.08773,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.08773,yes,-,-,-,-,-,-,9200.04,5.81676 -Trigonometric,sin,f256,sin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,749.711,2574.64,3.43417,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.43417,yes,-,-,-,-,-,-,2661.16,3.54958 -Trigonometric,cos,f256,cos,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,761.627,1671.93,2.19521,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.19521,yes,-,-,-,-,-,-,2642.82,3.46996 -Trigonometric,tan,f256,tan,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,967.48,2660.5,2.74993,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.74993,yes,-,-,-,-,-,-,3122.95,3.22793 -Trigonometric,asin,f256,asin,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1281.76,7569.03,5.9052,boost::multiprecision::mpfr_float_backend<64>,-,-,-,5.9052,yes,-,-,-,No,-,-,11734.9,9.15534 -Trigonometric,acos,f256,acos,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1360.02,7607.97,5.59402,boost::multiprecision::mpfr_float_backend<64>,-,-,-,5.59402,yes,-,-,-,No,-,-,11805.6,8.68047 -Trigonometric,atan,f256,atan,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,785.256,3253.56,4.14331,boost::multiprecision::mpfr_float_backend<64>,-,-,-,4.14331,yes,-,-,-,-,-,-,8570.65,10.9145 -Trigonometric,atan2,f256,atan2,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,960.325,5787.02,6.02611,boost::multiprecision::mpfr_float_backend<64>,-,-,-,6.02611,yes,-,-,-,-,-,-,8639.08,8.996 -Hyperbolic,sinh,f256,sinh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1143.54,1973.59,1.72586,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.72586,yes,-,-,-,-,-,-,3446.55,3.01393 -Hyperbolic,cosh,f256,cosh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1115.31,1818.46,1.63045,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.63045,yes,-,-,-,-,-,-,3338.04,2.99293 -Hyperbolic,tanh,f256,tanh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1083.93,1782.76,1.64472,boost::multiprecision::mpfr_float_backend<64>,-,-,-,1.64472,yes,-,-,-,-,-,-,3344.41,3.08546 -Inverse hyperbolic,asinh,f256,asinh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1879.26,5582.22,2.97043,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.97043,yes,-,-,-,-,-,-,9440.15,5.02332 -Inverse hyperbolic,acosh,f256,acosh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1752.4,5894.8,3.36384,boost::multiprecision::mpfr_float_backend<64>,-,-,-,3.36384,yes,-,-,-,-,-,-,9851.03,5.62144 -Inverse hyperbolic,atanh,f256,atanh,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,1692.66,3771.41,2.2281,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.2281,yes,-,-,-,-,-,-,9090.96,5.37081 -Special functions,erfc,f256,erfc,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9449.65,40229.7,4.25727,boost::multiprecision::mpfr_float_backend<64>,-,-,-,4.25727,no,-,-,-,-,-,-,-,- -Special functions,erf,f256,erf,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,9518.45,25656,2.6954,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.6954,no,-,-,-,-,-,-,-,- -Special functions,tgamma,f256,tgamma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,7495.07,19805.7,2.6425,boost::multiprecision::mpfr_float_backend<64>,-,-,-,2.6425,no,-,-,-,-,-,-,-,- -Special functions,lgamma,f256,lgamma,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,6548.91,26352.2,4.02391,boost::multiprecision::mpfr_float_backend<64>,-,-,-,4.02391,no,-,-,-,-,-,-,-,- -Comparisons,operator==,f256,operator==,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.2394,6.23712,2.78517,qdpp (qd_real),-,-,-,1.03769,yes,-,-,-,-,-,-,2.32381,1.03769 -Comparisons,operator!=,f256,operator!=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.13703,5.97993,2.79824,qdpp (qd_real),-,-,-,1.07779,yes,-,-,-,-,-,-,2.30327,1.07779 -Comparisons,operator<,f256,operator<,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.17878,7.27262,3.33794,qdpp (qd_real),-,-,-,1.08621,yes,-,-,-,-,-,-,2.36661,1.08621 -Comparisons,operator>,f256,operator>,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.21696,7.34371,3.31251,qdpp (qd_real),-,-,-,1.1736,yes,-,-,-,-,-,-,2.60183,1.1736 -Comparisons,operator<=,f256,operator<=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.19895,7.25708,3.30024,qdpp (qd_real),-,-,-,0.991845,yes,-,-,-,-,-,-,2.18102,0.991845 -Comparisons,operator>=,f256,operator>=,primary,primary,-,boost::multiprecision::mpfr_float_backend<64>,yes,-,-,-,-,-,-,-,-,-,-,2.21054,7.21992,3.26614,qdpp (qd_real),-,-,-,1.13035,yes,-,-,-,-,-,-,2.49869,1.13035 diff --git a/src/build_info.cpp b/src/build_info.cpp new file mode 100644 index 0000000..5526480 --- /dev/null +++ b/src/build_info.cpp @@ -0,0 +1,116 @@ +/** + * fltx/src/build_info.cpp - Capture the baseline compiled-library configuration. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#include "fltx/detail/build_info.h" +#include "fltx/detail/common_fp.h" +#include "fltx/detail/f256_simd_config.h" + +#if FLTX_X86_FMA_RUNTIME_CHECK +# if defined(_MSC_VER) +# include +# elif defined(__GNUC__) || defined(__clang__) +# include +# endif +#endif + +namespace +{ + constexpr bl::detail::configured_fma_mode configured_fma_policy = + #if FLTX_HEADER_FMA_OFF + bl::detail::configured_fma_mode::off; + #elif FLTX_HEADER_FMA_ASSUME + bl::detail::configured_fma_mode::assume; + #else + bl::detail::configured_fma_mode::automatic; + #endif + + constexpr bl::detail::internal_fast_math_request configured_fast_math_request = + #if defined(FLTX_INTERNAL_FAST_MATH_REQUEST_ON) + bl::detail::internal_fast_math_request::enabled; + #elif defined(FLTX_INTERNAL_FAST_MATH_REQUEST_OFF) + bl::detail::internal_fast_math_request::disabled; + #else + bl::detail::internal_fast_math_request::automatic; + #endif +} + +#if FLTX_X86_FMA_RUNTIME_CHECK +bool bl::detail::fp::runtime_x86_fma_available_uncached() noexcept +{ + constexpr int bit_fma = 1 << 12; + constexpr int bit_xsave = 1 << 26; + constexpr int bit_osxsave = 1 << 27; + constexpr int bit_avx = 1 << 28; + constexpr int required = bit_fma | bit_xsave | bit_osxsave | bit_avx; + + #if defined(_MSC_VER) + int regs[4]{}; + __cpuid(regs, 0); + if (regs[0] < 1) + return false; + + __cpuid(regs, 1); + if ((regs[2] & required) != required) + return false; + + return (_xgetbv(0) & 0x6) == 0x6; + #else + if (__get_cpuid_max(0, nullptr) < 1) + return false; + + unsigned int eax{}, ebx{}, ecx{}, edx{}; + __cpuid(1, eax, ebx, ecx, edx); + if ((static_cast(ecx) & required) != required) + return false; + + std::uint32_t xcr0_eax{}; + std::uint32_t xcr0_edx{}; + __asm__ volatile("xgetbv" : "=a"(xcr0_eax), "=d"(xcr0_edx) : "c"(0)); + const std::uint64_t xcr0 = + (static_cast(xcr0_edx) << 32u) | xcr0_eax; + return (xcr0 & 0x6) == 0x6; + #endif +} +#endif + +const bl::detail::compiled_build_info& bl::detail::library_build_info() noexcept +{ + static constexpr compiled_build_info info{ + .fma_mode = configured_fma_policy, + .fast_math_request = configured_fast_math_request, + #if defined(FLTX_FAST_MATH) + .fast_math_enabled = true, + #else + .fast_math_enabled = false, + #endif + .simd_policy_enabled = !FLTX_HEADER_SIMD_OFF, + .x86_target = FLTX_X86_TARGET, + .arm64_target = FLTX_ARM64_TARGET, + .tu_has_x86_fma = FLTX_TU_HAS_X86_FMA, + .has_x86_fma = FLTX_HAS_X86_FMA, + .compiled_x86_fma_backend = FLTX_HAS_COMPILED_X86_FMA_BACKEND, + .x86_fma_runtime_check = FLTX_X86_FMA_RUNTIME_CHECK, + .msvc_guarded_x86_fma = FLTX_MSVC_GUARDED_X86_FMA, + .scalar_x86_fma = FLTX_USE_SCALAR_X86_FMA, + .baseline_arm64_fma = FLTX_USE_BASELINE_ARM64_FMA, + .has_runtime_fma_path = FLTX_HAS_RUNTIME_FMA_PATH, + .has_sse2 = FLTX_HAS_SSE2, + .has_neon = FLTX_HAS_NEON, + .has_wasm_simd = FLTX_HAS_WASM_SIMD, + .f256_simd_enabled = FLTX_F256_ENABLE_SIMD, + .f256_trig_simd_enabled = FLTX_F256_ENABLE_TRIG_SIMD, + .simd_fma_two_prod = FLTX_SIMD_USE_FMA_TWO_PROD + }; + return info; +} + +bool bl::detail::library_runtime_hardware_fma_enabled() noexcept +{ + return fp::runtime_hardware_fma_enabled(); +} diff --git a/src/f128_math.cpp b/src/f128_math.cpp index 493537f..41b4abd 100644 --- a/src/f128_math.cpp +++ b/src/f128_math.cpp @@ -12,55 +12,40 @@ namespace bl::detail::_f128_runtime { // roots + BL_NO_INLINE f128_s BL_VECTORCALL sqrt(const f128_s& a) + { + return detail::_f128_impl::sqrt(a); + } + BL_NO_INLINE f128_s hypot(const f128_s& x, const f128_s& y) { return detail::_f128_impl::hypot(x, y); } // rounding and decimals - BL_NO_INLINE f128_s round(const f128_s& a) + BL_NO_INLINE f128_s round_nearest_away_from_zero(const f128_s& a) { - return detail::_f128_impl::round_runtime(a); + return detail::_f128_impl::round_nearest_away_from_zero_runtime(a); } - BL_NO_INLINE f128_s round_to_decimals(f128_s v, int prec) + BL_NO_INLINE f128_s round_decimals(f128_s v, int prec) { - return detail::_f128_impl::round_to_decimals(v, prec); - } - - BL_NO_INLINE f128_s nearbyint_slow(const f128_s& a) - { - return detail::_f128::nearbyint_generic(a); + return detail::_f128_impl::round_decimals(v, prec); } - BL_NO_INLINE f128_s nearbyint(const f128_s& a) + BL_NO_INLINE f128_s round_significant(f128_s v, int figures) { - return detail::_f128_impl::nearbyint_runtime(a); + return detail::_f128_impl::round_significant(v, figures); } - BL_NO_INLINE f128_s rint(const f128_s& x) + BL_NO_INLINE long lround_nearest_away_from_zero(const f128_s& x) { - return detail::_f128_impl::rint(x); + return detail::_f128_impl::lround_nearest_away_from_zero(x); } - BL_NO_INLINE long lround(const f128_s& x) + BL_NO_INLINE long long llround_nearest_away_from_zero(const f128_s& x) { - return detail::_f128_impl::lround(x); - } - - BL_NO_INLINE long long llround(const f128_s& x) - { - return detail::_f128_impl::llround(x); - } - - BL_NO_INLINE long lrint(const f128_s& x) - { - return detail::_f128_impl::lrint(x); - } - - BL_NO_INLINE long long llrint(const f128_s& x) - { - return detail::_f128_impl::llrint(x); + return detail::_f128_impl::llround_nearest_away_from_zero(x); } // remainders @@ -69,26 +54,15 @@ namespace bl::detail::_f128_runtime return detail::_f128_impl::fmod(x, y); } - BL_NO_INLINE f128_s remainder(const f128_s& x, const f128_s& y) - { - return detail::_f128_impl::remainder(x, y); - } - - BL_NO_INLINE f128_s remquo(const f128_s& x, const f128_s& y, int* quo) + BL_NO_INLINE f128_s remquo(const f128_s& x, const f128_s& y, int* quo) { return detail::_f128_impl::remquo(x, y, quo); } // fractional decomposition - BL_NO_INLINE f128_s modf(const f128_s& x, f128_s* iptr) noexcept + BL_NO_INLINE f128_s modf(const f128_s& x, f128_s* iptr) noexcept { return detail::_f128_impl::modf(x, iptr); } - // decomposition and scaling - BL_NO_INLINE f128_s ldexp(const f128_s& x, int e) - { - return detail::_f128_impl::ldexp(x, e); - } - } // namespace bl::detail::_f128_runtime diff --git a/src/f128_transcendental.cpp b/src/f128_transcendental.cpp index ff4d47e..832db03 100644 --- a/src/f128_transcendental.cpp +++ b/src/f128_transcendental.cpp @@ -9,9 +9,36 @@ #include "fltx/detail/f128_math_transcendental.h" + // MinGW f64/f32 libm fallbacks implemented through the f128 kernels. + // Kept in this translation unit to avoid compiling the heavyweight f128 + // transcendental implementation in a second source file. +namespace bl::detail::_f64_runtime +{ + BL_NO_INLINE double sin_large(double x) noexcept + { + if (x == 0.0) + return x; + + return static_cast( + detail::_f128_impl::sin(f128_s{ x })); + } + + BL_NO_INLINE double cos_large(double x) noexcept + { + return static_cast( + detail::_f128_impl::cos(f128_s{ x })); + } + + BL_NO_INLINE double tan_large(double x) noexcept + { + return static_cast( + detail::_f128_impl::tan(f128_s{ x })); + } +} + namespace bl::detail::_f128_runtime { - BL_NO_INLINE f128_s horner_forward(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept + BL_NO_INLINE f128_s BL_VECTORCALL horner_forward(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept { if (count == 0) return {}; @@ -22,7 +49,7 @@ namespace bl::detail::_f128_runtime return p; } - BL_NO_INLINE f128_s horner_reverse(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept + BL_NO_INLINE f128_s BL_VECTORCALL horner_reverse(const f128_s* coeffs, std::size_t count, const f128_s& x) noexcept { if (count == 0) return {}; @@ -94,11 +121,6 @@ namespace bl::detail::_f128_runtime } // powers - BL_NO_INLINE f128_s pow10_128(int k) - { - return detail::_f128_impl::pow10_128(k); - } - BL_NO_INLINE f128_s pow(const f128_s& x, const f128_s& y) { return detail::_f128_impl::pow(x, y); @@ -109,18 +131,28 @@ namespace bl::detail::_f128_runtime return detail::_f128_impl::pow(x, y); } + BL_NO_INLINE f128_s ipow_signed(const f128_s& x, std::intmax_t y) + { + return detail::_f128::ipow_integer(x, y); + } + + BL_NO_INLINE f128_s ipow_unsigned(const f128_s& x, std::uintmax_t y) + { + return detail::_f128::ipow_integer(x, y); + } + // trigonometric BL_NO_INLINE bool sincos(const f128_s& x, f128_s& s_out, f128_s& c_out) { return detail::_f128_impl::sincos(x, s_out, c_out); } - BL_NO_INLINE f128_s sin(const f128_s& x) + BL_NO_INLINE f128_s BL_VECTORCALL sin(const f128_s& x) { return detail::_f128_impl::sin(x); } - BL_NO_INLINE f128_s cos(const f128_s& x) + BL_NO_INLINE f128_s BL_VECTORCALL cos(const f128_s& x) { return detail::_f128_impl::cos(x); } @@ -130,28 +162,28 @@ namespace bl::detail::_f128_runtime return detail::_f128_impl::tan(x); } - BL_NO_INLINE f128_s atan(const f128_s& x) + BL_NO_INLINE f128_s BL_VECTORCALL atan(const f128_s& x) { return detail::_f128_impl::atan(x); } - BL_NO_INLINE f128_s atan2(const f128_s& y, const f128_s& x) + BL_NO_INLINE f128_s BL_VECTORCALL atan2(const f128_s& y, const f128_s& x) { return detail::_f128_impl::atan2(y, x); } - BL_NO_INLINE f128_s asin(const f128_s& x) + BL_NO_INLINE f128_s BL_VECTORCALL asin(const f128_s& x) { return detail::_f128_impl::asin(x); } - BL_NO_INLINE f128_s acos(const f128_s& x) + BL_NO_INLINE f128_s BL_VECTORCALL acos(const f128_s& x) { return detail::_f128_impl::acos(x); } // hyperbolic - BL_NO_INLINE f128_s sinh(const f128_s& x) + BL_NO_INLINE f128_s BL_VECTORCALL sinh(const f128_s& x) { return detail::_f128_impl::sinh(x); } @@ -192,12 +224,12 @@ namespace bl::detail::_f128_runtime return detail::_f128_impl::erfc(x); } - BL_NO_INLINE f128_s lgamma(const f128_s& x) + BL_NO_INLINE f128_s BL_VECTORCALL lgamma(const f128_s& x) { return detail::_f128_impl::lgamma(x); } - BL_NO_INLINE f128_s tgamma(const f128_s& x) + BL_NO_INLINE f128_s BL_VECTORCALL tgamma(const f128_s& x) { return detail::_f128_impl::tgamma(x); } diff --git a/src/f256.cpp b/src/f256.cpp index c8c078b..5b1a797 100644 --- a/src/f256.cpp +++ b/src/f256.cpp @@ -11,67 +11,47 @@ namespace bl::detail::_f256_runtime { - namespace + // assignment + f256_s to_f256(uint64_t u) noexcept { - [[nodiscard]] BL_FORCE_INLINE f256_s div_add_double_impl(const f256_s& numerator, const f256_s& base_denominator, double scalar) noexcept - { - double head{}, carry{}; - detail::fp::two_sum_precise(base_denominator.x0, scalar, head, carry); - - const double head_abs = head < 0.0 ? -head : head; - const double base_abs = base_denominator.x0 < 0.0 ? -base_denominator.x0 : base_denominator.x0; - if (carry == 0.0 && head_abs >= base_abs) - return detail::_f256::div_inline(numerator, f256_s{ head, base_denominator.x1, base_denominator.x2, base_denominator.x3 }); - - return detail::_f256::div_inline(numerator, detail::_f256::add_double_inline(base_denominator, scalar)); - } - - // Exact residual for long division by a double-double denominator. - BL_PUSH_PRECISE - [[nodiscard]] BL_FORCE_INLINE f256_s sub_mul_scalar_exact_dd(const f256_s& r, detail::_f256::dd_scalar b, double q) noexcept - { - using namespace detail::_f256; - - double p0{}, p1{}, p2 = 0.0, p3 = 0.0; - double q0{}, q1{}, q2 = 0.0; - double s0{}, s1{}, s2{}, s3{}, s4{}; - - two_prod_precise(b.hi, q, p0, q0); - two_prod_precise(b.lo, q, p1, q1); - - s0 = p0; - two_sum_precise(q0, p1, s1, s2); - three_sum(s2, q1, p2); - three_sum2(q1, q2, p3); - s3 = q1; - s4 = q2 + p2; + return detail::_f256_impl::to_f256(u); + } - double c0{}, e0{}; - double c1{}, e1{}; - double c2{}, e2{}; - double c3{}, e3{}; + f256_s to_f256(int64_t v) noexcept + { + return detail::_f256_impl::to_f256(v); + } - two_sum_precise(r.x0, -s0, c0, e0); - two_sum_precise(r.x1, -s1, c1, e1); - two_sum_precise(r.x2, -s2, c2, e2); - two_sum_precise(r.x3, -s3, c3, e3); + f256_s& assign(f256_s& out, uint64_t u) noexcept + { + return detail::_f256_impl::assign(out, u); + } - two_sum_precise(c1, e0, c1, e0); - three_sum(c2, e0, e1); - three_sum2(c3, e0, e2); + f256_s& assign(f256_s& out, int64_t v) noexcept + { + return detail::_f256_impl::assign(out, v); + } - e0 += e1 + e3 - s4; + // fma + BL_NO_INLINE f256_s fma(const f256_s& x, const f256_s& y, const f256_s& z) + { + return detail::_f256_impl::fma(x, y, z); + } - return renorm5(c0, c1, c2, c3, e0); - } - BL_POP_PRECISE + BL_NO_INLINE f256_s fma_cancellation(const f256_s& x, const f256_s& y, const f256_s& z) + { + return detail::_f256::mul_add_exact_inline(x, y, z); + } - [[nodiscard]] BL_FORCE_INLINE f256_s add_dd_impl(const f256_s& a, detail::_f256::dd_scalar b) noexcept + namespace + { + // Adds finite double-double to f256 without canonical special-value handling. + [[nodiscard]] BL_FORCE_INLINE f256_s add_dd_finite_inline(const f256_s& a, detail::_f256::dd_scalar b) noexcept { using namespace detail::_f256; if (b.lo == 0.0) - return add_double_inline(a, b.hi); + return add_double_finite_inline(a, b.hi); double s0{}, e0{}; double s1{}, e1{}; @@ -92,24 +72,26 @@ namespace bl::detail::_f256_runtime return renorm5(s0, s1, s2, s3, e0); } - [[nodiscard]] BL_FORCE_INLINE f256_s sub_dd_impl(const f256_s& a, detail::_f256::dd_scalar b) noexcept + // Subtracts finite double-double from f256 without canonical special handling. + [[nodiscard]] BL_FORCE_INLINE f256_s sub_dd_finite_inline(const f256_s& a, detail::_f256::dd_scalar b) noexcept { using namespace detail::_f256; if (b.lo == 0.0) - return sub_double_inline(a, b.hi); + return sub_double_finite_inline(a, b.hi); b.hi = -b.hi; b.lo = -b.lo; - return add_dd_impl(a, b); + return add_dd_finite_inline(a, b); } - [[nodiscard]] BL_FORCE_INLINE f256_s sub_dd_impl(detail::_f256::dd_scalar a, const f256_s& b) noexcept + // Subtracts finite f256 from double-double without canonical special handling. + [[nodiscard]] BL_FORCE_INLINE f256_s sub_dd_finite_inline(detail::_f256::dd_scalar a, const f256_s& b) noexcept { using namespace detail::_f256; if (a.lo == 0.0) - return sub_double_inline(a.hi, b); + return sub_double_finite_inline(a.hi, b); double s0{}, e0{}; double s1{}, e1{}; @@ -132,14 +114,15 @@ namespace bl::detail::_f256_runtime return renorm5(s0, s1, s2, s3, e0); } - [[nodiscard]] BL_FORCE_INLINE f256_s mul_dd_impl(const f256_s& a, detail::_f256::dd_scalar b) noexcept + // Multiplies finite f256 by double-double without canonical special handling. + [[nodiscard]] BL_FORCE_INLINE f256_s mul_dd_finite_inline(const f256_s& a, detail::_f256::dd_scalar b) noexcept { using namespace detail::_f256; if (b.lo == 0.0) - return mul_double_inline(a, b.hi); + return mul_double_product_inline(a, b.hi); if (!isfinite(a.x0) || !isfinite(b.hi) || !isfinite(b.lo)) - return mul_inline(a, f256_s{ b.hi, b.lo }); + return mul_product_inline(a, f256_s{ b.hi, b.lo }); double p0{}, p1{}, p2{}, p3 = 0.0, p4{}, p5{}; double q0{}, q1{}, q2{}, q3 = 0.0, q4{}, q5{}; @@ -183,14 +166,55 @@ namespace bl::detail::_f256_runtime return renorm5(p0, p1, s0, t0, t1); } - [[nodiscard]] BL_FORCE_INLINE f256_s div_dd_impl(const f256_s& a, detail::_f256::dd_scalar b) noexcept + BL_PUSH_PRECISE + // Computes an exact residual for long division by a double-double denominator. + [[nodiscard]] BL_FORCE_INLINE f256_s div_dd_residual_exact_inline(const f256_s& r, detail::_f256::dd_scalar b, double q) noexcept + { + using namespace detail::_f256; + + double p0{}, p1{}, p2 = 0.0, p3 = 0.0; + double q0{}, q1{}, q2 = 0.0; + double s0{}, s1{}, s2{}, s3{}, s4{}; + + two_prod_precise(b.hi, q, p0, q0); + two_prod_precise(b.lo, q, p1, q1); + + s0 = p0; + two_sum_precise(q0, p1, s1, s2); + three_sum(s2, q1, p2); + three_sum2(q1, q2, p3); + s3 = q1; + s4 = q2 + p2; + + double c0{}, e0{}; + double c1{}, e1{}; + double c2{}, e2{}; + double c3{}, e3{}; + + two_sum_precise(r.x0, -s0, c0, e0); + two_sum_precise(r.x1, -s1, c1, e1); + two_sum_precise(r.x2, -s2, c2, e2); + two_sum_precise(r.x3, -s3, c3, e3); + + two_sum_precise(c1, e0, c1, e0); + three_sum(c2, e0, e1); + three_sum2(c3, e0, e2); + + e0 += e1 + e3 - s4; + + return renorm5(c0, c1, c2, c3, e0); + } + BL_POP_PRECISE + + // Divides f256 by a prechecked double-double denominator. + [[nodiscard]] BL_FORCE_INLINE f256_s div_dd_prechecked_inline(const f256_s& a, detail::_f256::dd_scalar b) noexcept { using namespace detail::_f256; if (b.lo == 0.0) - return div_double_inline(a, b.hi); + return div_double_prechecked_inline(a, b.hi); if (b.hi == 0.0 || !isfinite(b.hi) || !isfinite(b.lo)) - return div_inline(a, f256_s{ b.hi, b.lo }); + return div_prechecked_inline(a, f256_s{ b.hi, b.lo }); const double inv_b0 = 1.0 / b.hi; @@ -201,353 +225,403 @@ namespace bl::detail::_f256_runtime if (q0 == 0.0 && bl::iszero(a)) [[unlikely]] return signed_zero(bl::signbit(a) != signbit(b.hi)); - f256_s r = sub_mul_scalar_exact_dd(a, b, q0); + f256_s r = div_dd_residual_exact_inline(a, b, q0); const double q1 = r.x0 * inv_b0; - r = sub_mul_scalar_exact_dd(r, b, q1); + r = div_dd_residual_exact_inline(r, b, q1); const double q2 = r.x0 * inv_b0; - r = sub_mul_scalar_exact_dd(r, b, q2); + r = div_dd_residual_exact_inline(r, b, q2); const double q3 = r.x0 * inv_b0; - r = sub_mul_scalar_exact_dd(r, b, q3); + r = div_dd_residual_exact_inline(r, b, q3); const double q4 = r.x0 * inv_b0; return renorm5(q0, q1, q2, q3, q4); } - [[nodiscard]] BL_FORCE_INLINE f256_s div_dd_impl(detail::_f256::dd_scalar a, const f256_s& b) noexcept + // Divides double-double by a prechecked f256 denominator. + [[nodiscard]] BL_FORCE_INLINE f256_s div_dd_prechecked_inline(detail::_f256::dd_scalar a, const f256_s& b) noexcept { using namespace detail::_f256; if (a.lo == 0.0) - return div_double_inline(a.hi, b); + return div_double_prechecked_inline(a.hi, b); - return div_inline(f256_s{ a.hi, a.lo }, b); + return div_prechecked_inline(f256_s{ a.hi, a.lo }, b); + } + + // Divides by an f256-plus-double denominator without materializing it when exact. + [[nodiscard]] BL_FORCE_INLINE f256_s div_add_double_kernel_inline(const f256_s& numerator, const f256_s& base_denominator, double scalar) noexcept + { + double head{}, carry{}; + detail::fp::two_sum_precise(base_denominator.x0, scalar, head, carry); + + const double head_abs = head < 0.0 ? -head : head; + const double base_abs = base_denominator.x0 < 0.0 ? -base_denominator.x0 : base_denominator.x0; + if (carry == 0.0 && head_abs >= base_abs) + return detail::_f256::div_prechecked_inline(numerator, f256_s{ head, base_denominator.x1, base_denominator.x2, base_denominator.x3 }); + + return detail::_f256::div_prechecked_inline(numerator, detail::_f256::add_double_finite_inline(base_denominator, scalar)); } } // namespace - f256_s floor(const f256_s& a) + // Adds finite f256 values through the compiled runtime boundary. + f256_s BL_VECTORCALL add_finite(const f256_s& a, const f256_s& b) noexcept { - return detail::_f256_impl::floor(a); + return detail::_f256::add_finite_inline(a, b); } - f256_s ceil(const f256_s& a) + // Adds f256 values and returns the canonical special-value representation. + f256_s BL_VECTORCALL add_canonical(const f256_s& a, const f256_s& b) noexcept { - return detail::_f256_impl::ceil(a); + return detail::_f256::add_canonical_inline(a, b); } - f256_s trunc(const f256_s& a) + // Adds a double-double value to f256 with canonical special-value handling. + f256_s BL_VECTORCALL add_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept { - return detail::_f256_impl::trunc(a); + const f256_s rhs{ b.hi, b.lo, 0.0, 0.0 }; + const f256_s out = add_dd_finite_inline(a, b); + if (!detail::_f256::isfinite(out.x0)) [[unlikely]] + { + if (!detail::_f256::isfinite(a.x0) || !detail::_f256::isfinite(b.hi)) [[unlikely]] + return detail::_f256::add_special(a, rhs); + return detail::_f256::signed_infinity(bl::signbit(a)); + } + return out; } - f256_s to_f256(uint64_t u) noexcept + // Adds a finite double to f256 through the compiled runtime boundary. + f256_s BL_VECTORCALL add_double_finite(const f256_s& a, double b) noexcept { - return detail::_f256_impl::to_f256(u); + return detail::_f256::add_double_finite_inline(a, b); } - f256_s to_f256(int64_t v) noexcept + // Adds a double to f256 and returns the canonical special-value representation. + f256_s BL_VECTORCALL add_double_canonical(const f256_s& a, double b) noexcept { - return detail::_f256_impl::to_f256(v); + return detail::_f256::add_double_canonical_inline(a, b); } - f256_s& assign(f256_s& out, uint64_t u) noexcept + // Subtracts finite f256 values through the compiled runtime boundary. + f256_s BL_VECTORCALL sub_finite(const f256_s& a, const f256_s& b) noexcept { - return detail::_f256_impl::assign(out, u); + return detail::_f256::sub_finite_inline(a, b); } - f256_s& assign(f256_s& out, int64_t v) noexcept + // Subtracts f256 values and returns the canonical special-value representation. + f256_s BL_VECTORCALL sub_canonical(const f256_s& a, const f256_s& b) noexcept { - return detail::_f256_impl::assign(out, v); + return detail::_f256::sub_canonical_inline(a, b); } - f256_s add(const f256_s& a, const f256_s& b) noexcept + // Subtracts a double-double value from f256 with canonical special-value handling. + f256_s BL_VECTORCALL sub_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept { - return detail::_f256::add_checked_inline(a, b); + const f256_s rhs{ b.hi, b.lo, 0.0, 0.0 }; + const f256_s out = sub_dd_finite_inline(a, b); + if (!detail::_f256::isfinite(out.x0)) [[unlikely]] + { + if (!detail::_f256::isfinite(a.x0) || !detail::_f256::isfinite(b.hi)) [[unlikely]] + return detail::_f256::sub_special(a, rhs); + return detail::_f256::signed_infinity(bl::signbit(a)); + } + return out; } - f256_s sub(const f256_s& a, const f256_s& b) noexcept + // Subtracts f256 from a double-double value with canonical special-value handling. + f256_s BL_VECTORCALL sub_dd(detail::_f256::dd_scalar a, const f256_s& b) noexcept { - return detail::_f256::sub_checked_inline(a, b); + const f256_s lhs{ a.hi, a.lo, 0.0, 0.0 }; + const f256_s out = sub_dd_finite_inline(a, b); + if (!detail::_f256::isfinite(out.x0)) [[unlikely]] + { + if (!detail::_f256::isfinite(a.hi) || !detail::_f256::isfinite(b.x0)) [[unlikely]] + return detail::_f256::sub_special(lhs, b); + return detail::_f256::signed_infinity(bl::signbit(lhs)); + } + return out; } - f256_s mul(const f256_s& a, const f256_s& b) noexcept + // Subtracts a finite double from f256 through the compiled runtime boundary. + f256_s BL_VECTORCALL sub_double_finite(const f256_s& a, double b) noexcept { - return detail::_f256::mul_checked_inline(a, b); + return detail::_f256::sub_double_finite_inline(a, b); } - f256_s div(const f256_s& a, const f256_s& b) noexcept + // Subtracts a double from f256 and returns the canonical special-value representation. + f256_s BL_VECTORCALL sub_double_canonical(const f256_s& a, double b) noexcept { - return detail::_f256::div_checked_inline(a, b); + return detail::_f256::sub_double_canonical_inline(a, b); } - f256_s add_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept + // Subtracts f256 from a double and returns the canonical special-value representation. + f256_s BL_VECTORCALL sub_double_canonical(double a, const f256_s& b) noexcept { - const f256_s rhs{ b.hi, b.lo, 0.0, 0.0 }; - if (!detail::_f256::isfinite(a.x0) || !detail::_f256::isfinite(b.hi)) [[unlikely]] - return detail::_f256::add_special(a, rhs); - - const f256_s out = add_dd_impl(a, b); - if (!detail::_f256::isfinite(out.x0)) [[unlikely]] - return detail::_f256::signed_infinity(bl::signbit(a)); - return out; + return detail::_f256::sub_double_canonical_inline(a, b); } - f256_s sub_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept + // Multiplies finite f256 values through the compiled runtime boundary. + f256_s mul_finite(const f256_s& a, const f256_s& b) noexcept { - const f256_s rhs{ b.hi, b.lo, 0.0, 0.0 }; - if (!detail::_f256::isfinite(a.x0) || !detail::_f256::isfinite(b.hi)) [[unlikely]] - return detail::_f256::sub_special(a, rhs); - - const f256_s out = sub_dd_impl(a, b); - if (!detail::_f256::isfinite(out.x0)) [[unlikely]] - return detail::_f256::signed_infinity(bl::signbit(a)); - return out; + return detail::_f256::mul_finite_inline(a, b); } - f256_s sub_dd(detail::_f256::dd_scalar a, const f256_s& b) noexcept + // Multiplies f256 values and returns the canonical special-value representation. + f256_s mul_canonical(const f256_s& a, const f256_s& b) noexcept { - const f256_s lhs{ a.hi, a.lo, 0.0, 0.0 }; - if (!detail::_f256::isfinite(a.hi) || !detail::_f256::isfinite(b.x0)) [[unlikely]] - return detail::_f256::sub_special(lhs, b); - - const f256_s out = sub_dd_impl(a, b); - if (!detail::_f256::isfinite(out.x0)) [[unlikely]] - return detail::_f256::signed_infinity(bl::signbit(lhs)); - return out; + return detail::_f256::mul_canonical_inline(a, b); } + // Multiplies f256 by a double-double value with canonical special-value handling. f256_s mul_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept { const f256_s rhs{ b.hi, b.lo, 0.0, 0.0 }; - if (!detail::_f256::isfinite(a.x0) || !detail::_f256::isfinite(b.hi)) [[unlikely]] - return detail::_f256::mul_special(a, rhs); - - const f256_s out = mul_dd_impl(a, b); + const f256_s out = mul_dd_finite_inline(a, b); if (!detail::_f256::isfinite(out.x0)) [[unlikely]] + { + if (!detail::_f256::isfinite(a.x0) || !detail::_f256::isfinite(b.hi)) [[unlikely]] + return detail::_f256::mul_special(a, rhs); return detail::_f256::signed_infinity(bl::signbit(a) != bl::signbit(rhs)); + } return out; } - f256_s div_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept + // Multiplies f256 by a finite double through the compiled runtime boundary. + f256_s mul_double_finite(const f256_s& a, double b) noexcept { - const f256_s rhs{ b.hi, b.lo, 0.0, 0.0 }; - if (!detail::_f256::isfinite(b.hi) || b.hi == 0.0) [[unlikely]] - return detail::_f256::div_special(a, rhs); - - return div_dd_impl(a, b); + return detail::_f256::mul_double_finite_inline(a, b); } - f256_s div_dd(detail::_f256::dd_scalar a, const f256_s& b) noexcept + // Multiplies f256 by a double and returns the canonical special-value representation. + f256_s mul_double_canonical(const f256_s& a, double b) noexcept { - const f256_s lhs{ a.hi, a.lo, 0.0, 0.0 }; - if (!detail::_f256::isfinite(b.x0) || b.x0 == 0.0) [[unlikely]] - return detail::_f256::div_special(lhs, b); + return detail::_f256::mul_double_canonical_inline(a, b); + } - return div_dd_impl(a, b); + // Divides finite f256 values through the compiled runtime boundary. + f256_s BL_VECTORCALL div_finite(const f256_s& a, const f256_s& b) noexcept + { + return detail::_f256::div_finite_inline(a, b); } - f256_s add_double(const f256_s& a, double b) noexcept + // Divides f256 values and returns the canonical special-value representation. + f256_s BL_VECTORCALL div_canonical(const f256_s& a, const f256_s& b) noexcept { - return detail::_f256::add_double_checked_inline(a, b); + return detail::_f256::div_canonical_inline(a, b); } - f256_s sub_double(const f256_s& a, double b) noexcept + // Divides f256 by a double-double value with canonical special-value handling. + f256_s BL_VECTORCALL div_dd(const f256_s& a, detail::_f256::dd_scalar b) noexcept { - return detail::_f256::sub_double_checked_inline(a, b); + const f256_s rhs{ b.hi, b.lo, 0.0, 0.0 }; + if (!detail::_f256::isfinite(b.hi) || b.hi == 0.0) [[unlikely]] + return detail::_f256::div_special(a, rhs); + + return div_dd_prechecked_inline(a, b); } - f256_s sub_double(double a, const f256_s& b) noexcept + // Divides a double-double value by f256 with canonical special-value handling. + f256_s BL_VECTORCALL div_dd(detail::_f256::dd_scalar a, const f256_s& b) noexcept { - return detail::_f256::sub_double_checked_inline(a, b); + const f256_s lhs{ a.hi, a.lo, 0.0, 0.0 }; + if (!detail::_f256::isfinite(b.x0) || b.x0 == 0.0) [[unlikely]] + return detail::_f256::div_special(lhs, b); + + return div_dd_prechecked_inline(a, b); } - f256_s mul_double(const f256_s& a, double b) noexcept + // Divides f256 by a finite double through the compiled runtime boundary. + f256_s BL_VECTORCALL div_double_finite(const f256_s& a, double b) noexcept { - return detail::_f256::mul_double_checked_inline(a, b); + return detail::_f256::div_double_finite_inline(a, b); } - f256_s div_double(const f256_s& a, double b) noexcept + // Divides f256 by a double and returns the canonical special-value representation. + f256_s BL_VECTORCALL div_double_canonical(const f256_s& a, double b) noexcept { - return detail::_f256::div_double_checked_inline(a, b); + return detail::_f256::div_double_canonical_inline(a, b); } - f256_s div_double(double a, const f256_s& b) noexcept + // Divides a double by f256 and returns the canonical special-value representation. + f256_s BL_VECTORCALL div_double_canonical(double a, const f256_s& b) noexcept { - return detail::_f256::div_double_checked_inline(a, b); + return detail::_f256::div_double_canonical_inline(a, b); } + // Squares f256 through the compiled runtime boundary. f256_s sqr(const f256_s& a) noexcept { return detail::_f256::sqr_inline(a); } + // Multiplies f256 by a double with an exact power-of-two fast path. f256_s mul_pow2_or_double(const f256_s& a, double b) noexcept { - return detail::_f256::mul_pow2_or_double_checked_inline(a, b); + return detail::_f256::mul_pow2_or_double_canonical_inline(a, b); } - f256_s mul_add(const f256_s& a, const f256_s& b, const f256_s& c) noexcept + f256_s BL_VECTORCALL mul_add(const f256_s& a, const f256_s& b, const f256_s& c) noexcept { return detail::_f256::mul_add_inline(a, b, c); } - f256_s mul_sub(const f256_s& a, const f256_s& b, const f256_s& c) noexcept + f256_s BL_VECTORCALL mul_sub(const f256_s& a, const f256_s& b, const f256_s& c) noexcept { return detail::_f256::mul_sub_inline(a, b, c); } - f256_s value_sub_mul(const f256_s& a, const f256_s& b, const f256_s& c) noexcept + f256_s BL_VECTORCALL value_sub_mul(const f256_s& a, const f256_s& b, const f256_s& c) noexcept { return detail::_f256::value_sub_mul_inline(a, b, c); } - f256_s mul_add_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept + f256_s BL_VECTORCALL mul_add_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { - return detail::_f256::add_inline(detail::_f256::mul_add_inline(a, b, c), d); + return detail::_f256::add_finite_inline(detail::_f256::mul_add_inline(a, b, c), d); } - f256_s mul_add_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept + f256_s BL_VECTORCALL mul_add_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { - return detail::_f256::sub_inline(detail::_f256::mul_add_inline(a, b, c), d); + return detail::_f256::sub_finite_inline(detail::_f256::mul_add_inline(a, b, c), d); } - f256_s mul_sub_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept + f256_s BL_VECTORCALL mul_sub_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { - return detail::_f256::add_inline(detail::_f256::mul_sub_inline(a, b, c), d); + return detail::_f256::add_finite_inline(detail::_f256::mul_sub_inline(a, b, c), d); } - f256_s mul_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept + f256_s BL_VECTORCALL mul_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { - return detail::_f256::sub_inline(detail::_f256::mul_sub_inline(a, b, c), d); + return detail::_f256::sub_finite_inline(detail::_f256::mul_sub_inline(a, b, c), d); } - f256_s mul_add_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept + f256_s BL_VECTORCALL mul_add_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { return detail::_f256::mul_add_mul_inline(a, b, c, d); } - f256_s mul_sub_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept + f256_s BL_VECTORCALL mul_sub_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { return detail::_f256::mul_sub_mul_inline(a, b, c, d); } - f256_s mul_add_mul_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept + f256_s BL_VECTORCALL mul_add_mul_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept { return detail::_f256::mul_add_mul_add_inline(a, b, c, d, e); } - f256_s mul_add_mul_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept + f256_s BL_VECTORCALL mul_add_mul_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept { return detail::_f256::mul_add_mul_sub_inline(a, b, c, d, e); } - f256_s mul_sub_mul_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept + f256_s BL_VECTORCALL mul_sub_mul_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept { return detail::_f256::mul_sub_mul_add_inline(a, b, c, d, e); } - f256_s mul_sub_mul_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept + f256_s BL_VECTORCALL mul_sub_mul_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e) noexcept { return detail::_f256::mul_sub_mul_sub_inline(a, b, c, d, e); } - f256_s mul_add_mul_add_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e, const f256_s& f) noexcept + f256_s BL_VECTORCALL mul_add_mul_add_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e, const f256_s& f) noexcept { - return detail::_f256::add_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), detail::_f256::mul_inline(e, f)); + return detail::_f256::add_finite_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), detail::_f256::mul_product_inline(e, f)); } - f256_s mul_add_mul_add_mul_add_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e, const f256_s& f, const f256_s& g, const f256_s& h) noexcept + f256_s BL_VECTORCALL mul_add_mul_add_mul_add_mul(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& e, const f256_s& f, const f256_s& g, const f256_s& h) noexcept { - return detail::_f256::add_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), detail::_f256::mul_add_mul_inline(e, f, g, h)); + return detail::_f256::add_finite_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), detail::_f256::mul_add_mul_inline(e, f, g, h)); } - f256_s add_add_add(const f256_s& a, const f256_s& b, const f256_s& c) noexcept + f256_s BL_VECTORCALL add_add_add(const f256_s& a, const f256_s& b, const f256_s& c) noexcept { return detail::_f256::add_add_add_inline(a, b, c); } - f256_s add_sub_add(const f256_s& a, const f256_s& b, const f256_s& c) noexcept + f256_s BL_VECTORCALL add_sub_add(const f256_s& a, const f256_s& b, const f256_s& c) noexcept { return detail::_f256::add_sub_add_inline(a, b, c); } - f256_s add_add_sub(const f256_s& a, const f256_s& b, const f256_s& c) noexcept + f256_s BL_VECTORCALL add_add_sub(const f256_s& a, const f256_s& b, const f256_s& c) noexcept { return detail::_f256::add_add_sub_inline(a, b, c); } - f256_s add_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c) noexcept + f256_s BL_VECTORCALL add_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c) noexcept { return detail::_f256::add_sub_sub_inline(a, b, c); } - f256_s add_add_add_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept + f256_s BL_VECTORCALL add_add_add_add(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { - return detail::_f256::add_inline(detail::_f256::add_add_add_inline(a, b, c), d); + return detail::_f256::add_finite_inline(detail::_f256::add_add_add_inline(a, b, c), d); } - f256_s add_add_add_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept + f256_s BL_VECTORCALL add_add_add_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { - return detail::_f256::sub_inline(detail::_f256::add_add_add_inline(a, b, c), d); + return detail::_f256::sub_finite_inline(detail::_f256::add_add_add_inline(a, b, c), d); } - f256_s add_add_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept + f256_s BL_VECTORCALL add_add_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { - return detail::_f256::sub_inline(detail::_f256::add_add_sub_inline(a, b, c), d); + return detail::_f256::sub_finite_inline(detail::_f256::add_add_sub_inline(a, b, c), d); } - f256_s add_sub_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept + f256_s BL_VECTORCALL add_sub_sub_sub(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d) noexcept { - return detail::_f256::sub_inline(detail::_f256::add_sub_sub_inline(a, b, c), d); + return detail::_f256::sub_finite_inline(detail::_f256::add_sub_sub_inline(a, b, c), d); } - f256_s add_scaled_2_1(const f256_s& a, const f256_s& b) noexcept + f256_s BL_VECTORCALL add_scaled_2_1(const f256_s& a, const f256_s& b) noexcept { return detail::_f256::add_scaled_inline<2, 1>(a, b); } - f256_s add_scaled_1_2(const f256_s& a, const f256_s& b) noexcept + f256_s BL_VECTORCALL add_scaled_1_2(const f256_s& a, const f256_s& b) noexcept { return detail::_f256::add_scaled_inline<1, 2>(a, b); } - f256_s add_scaled_2_neg1(const f256_s& a, const f256_s& b) noexcept + f256_s BL_VECTORCALL add_scaled_2_neg1(const f256_s& a, const f256_s& b) noexcept { return detail::_f256::add_scaled_inline<2, -1>(a, b); } - f256_s add_scaled_1_neg2(const f256_s& a, const f256_s& b) noexcept + f256_s BL_VECTORCALL add_scaled_1_neg2(const f256_s& a, const f256_s& b) noexcept { return detail::_f256::add_scaled_inline<1, -2>(a, b); } - f256_s add_mul_double(const f256_s& addend, const f256_s& value, double scalar) noexcept + f256_s BL_VECTORCALL add_mul_double(const f256_s& addend, const f256_s& value, double scalar) noexcept { return detail::_f256::add_mul_double_inline(addend, value, scalar); } - f256_s sub_mul_double(const f256_s& minuend, const f256_s& value, double scalar) noexcept + f256_s BL_VECTORCALL sub_mul_double(const f256_s& minuend, const f256_s& value, double scalar) noexcept { return detail::_f256::sub_mul_double_inline(minuend, value, scalar); } - f256_s mul_double_sub(const f256_s& value, double scalar, const f256_s& subtrahend) noexcept + f256_s BL_VECTORCALL mul_double_sub(const f256_s& value, double scalar, const f256_s& subtrahend) noexcept { return detail::_f256::mul_double_sub_inline(value, scalar, subtrahend); } - f256_s mul_double_add_mul_double(const f256_s& a, double a_scalar, const f256_s& b, double b_scalar) noexcept + f256_s BL_VECTORCALL mul_double_add_mul_double(const f256_s& a, double a_scalar, const f256_s& b, double b_scalar) noexcept { return detail::_f256::add_raw5_raw5_inline( detail::_f256::mul_double_raw5_inline(a, a_scalar), detail::_f256::mul_double_raw5_inline(b, b_scalar)); } - f256_s mul_double_add_mul_double_add(const f256_s& a, double a_scalar, const f256_s& b, double b_scalar, const f256_s& c) noexcept + f256_s BL_VECTORCALL mul_double_add_mul_double_add(const f256_s& a, double a_scalar, const f256_s& b, double b_scalar, const f256_s& c) noexcept { return detail::_f256::add_raw5_raw5_value_inline( detail::_f256::mul_double_raw5_inline(a, a_scalar), @@ -555,144 +629,144 @@ namespace bl::detail::_f256_runtime c); } - f256_s div_add(const f256_s& numerator, const f256_s& a, const f256_s& b) noexcept + f256_s BL_VECTORCALL div_add(const f256_s& numerator, const f256_s& a, const f256_s& b) noexcept { - return detail::_f256::div_inline(numerator, detail::_f256::add_inline(a, b)); + return detail::_f256::div_prechecked_inline(numerator, detail::_f256::add_finite_inline(a, b)); } - f256_s div_sub(const f256_s& numerator, const f256_s& a, const f256_s& b) noexcept + f256_s BL_VECTORCALL div_sub(const f256_s& numerator, const f256_s& a, const f256_s& b) noexcept { - return detail::_f256::div_inline(numerator, detail::_f256::sub_inline(a, b)); + return detail::_f256::div_prechecked_inline(numerator, detail::_f256::sub_finite_inline(a, b)); } - f256_s div_add_double(const f256_s& numerator, const f256_s& base_denominator, double scalar) noexcept + f256_s BL_VECTORCALL div_add_double(const f256_s& numerator, const f256_s& base_denominator, double scalar) noexcept { - return div_add_double_impl(numerator, base_denominator, scalar); + return div_add_double_kernel_inline(numerator, base_denominator, scalar); } - f256_s div_double_sub(const f256_s& numerator, double scalar, const f256_s& base_denominator) noexcept + f256_s BL_VECTORCALL div_double_sub(const f256_s& numerator, double scalar, const f256_s& base_denominator) noexcept { return detail::_f256::div_double_sub_inline(numerator, scalar, base_denominator); } - f256_s mul_add_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept + f256_s BL_VECTORCALL mul_add_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept { - return detail::_f256::div_inline(detail::_f256::mul_add_inline(a, b, c), denominator); + return detail::_f256::div_prechecked_inline(detail::_f256::mul_add_inline(a, b, c), denominator); } - f256_s mul_sub_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept + f256_s BL_VECTORCALL mul_sub_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept { - return detail::_f256::div_inline(detail::_f256::mul_sub_inline(a, b, c), denominator); + return detail::_f256::div_prechecked_inline(detail::_f256::mul_sub_inline(a, b, c), denominator); } - f256_s value_sub_mul_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept + f256_s BL_VECTORCALL value_sub_mul_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept { - return detail::_f256::div_inline(detail::_f256::value_sub_mul_inline(a, b, c), denominator); + return detail::_f256::div_prechecked_inline(detail::_f256::value_sub_mul_inline(a, b, c), denominator); } - f256_s mul_add_mul_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator) noexcept + f256_s BL_VECTORCALL mul_add_mul_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator) noexcept { - return detail::_f256::div_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), denominator); + return detail::_f256::div_prechecked_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), denominator); } - f256_s mul_sub_mul_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator) noexcept + f256_s BL_VECTORCALL mul_sub_mul_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator) noexcept { - return detail::_f256::div_inline(detail::_f256::mul_sub_mul_inline(a, b, c, d), denominator); + return detail::_f256::div_prechecked_inline(detail::_f256::mul_sub_mul_inline(a, b, c, d), denominator); } - f256_s add_add_add_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept + f256_s BL_VECTORCALL add_add_add_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept { - return detail::_f256::div_inline(detail::_f256::add_add_add_inline(a, b, c), denominator); + return detail::_f256::div_prechecked_inline(detail::_f256::add_add_add_inline(a, b, c), denominator); } - f256_s add_sub_add_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept + f256_s BL_VECTORCALL add_sub_add_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept { - return detail::_f256::div_inline(detail::_f256::add_sub_add_inline(a, b, c), denominator); + return detail::_f256::div_prechecked_inline(detail::_f256::add_sub_add_inline(a, b, c), denominator); } - f256_s add_add_sub_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept + f256_s BL_VECTORCALL add_add_sub_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept { - return detail::_f256::div_inline(detail::_f256::add_add_sub_inline(a, b, c), denominator); + return detail::_f256::div_prechecked_inline(detail::_f256::add_add_sub_inline(a, b, c), denominator); } - f256_s add_sub_sub_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept + f256_s BL_VECTORCALL add_sub_sub_div(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator) noexcept { - return detail::_f256::div_inline(detail::_f256::add_sub_sub_inline(a, b, c), denominator); + return detail::_f256::div_prechecked_inline(detail::_f256::add_sub_sub_inline(a, b, c), denominator); } - f256_s add_mul_double_div(const f256_s& addend, const f256_s& value, double scalar, const f256_s& denominator) noexcept + f256_s BL_VECTORCALL add_mul_double_div(const f256_s& addend, const f256_s& value, double scalar, const f256_s& denominator) noexcept { - return detail::_f256::div_inline(detail::_f256::add_mul_double_inline(addend, value, scalar), denominator); + return detail::_f256::div_prechecked_inline(detail::_f256::add_mul_double_inline(addend, value, scalar), denominator); } - f256_s sub_mul_double_div(const f256_s& minuend, const f256_s& value, double scalar, const f256_s& denominator) noexcept + f256_s BL_VECTORCALL sub_mul_double_div(const f256_s& minuend, const f256_s& value, double scalar, const f256_s& denominator) noexcept { - return detail::_f256::div_inline(detail::_f256::sub_mul_double_inline(minuend, value, scalar), denominator); + return detail::_f256::div_prechecked_inline(detail::_f256::sub_mul_double_inline(minuend, value, scalar), denominator); } - f256_s mul_double_sub_div(const f256_s& value, double scalar, const f256_s& subtrahend, const f256_s& denominator) noexcept + f256_s BL_VECTORCALL mul_double_sub_div(const f256_s& value, double scalar, const f256_s& subtrahend, const f256_s& denominator) noexcept { - return detail::_f256::div_inline(detail::_f256::mul_double_sub_inline(value, scalar, subtrahend), denominator); + return detail::_f256::div_prechecked_inline(detail::_f256::mul_double_sub_inline(value, scalar, subtrahend), denominator); } - f256_s mul_add_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept + f256_s BL_VECTORCALL mul_add_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept { - return detail::_f256::div_inline(detail::_f256::mul_add_inline(a, b, c), detail::_f256::add_double_inline(denominator, scalar)); + return detail::_f256::div_prechecked_inline(detail::_f256::mul_add_inline(a, b, c), detail::_f256::add_double_finite_inline(denominator, scalar)); } - f256_s mul_sub_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept + f256_s BL_VECTORCALL mul_sub_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept { - return detail::_f256::div_inline(detail::_f256::mul_sub_inline(a, b, c), detail::_f256::add_double_inline(denominator, scalar)); + return detail::_f256::div_prechecked_inline(detail::_f256::mul_sub_inline(a, b, c), detail::_f256::add_double_finite_inline(denominator, scalar)); } - f256_s value_sub_mul_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept + f256_s BL_VECTORCALL value_sub_mul_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept { - return detail::_f256::div_inline(detail::_f256::value_sub_mul_inline(a, b, c), detail::_f256::add_double_inline(denominator, scalar)); + return detail::_f256::div_prechecked_inline(detail::_f256::value_sub_mul_inline(a, b, c), detail::_f256::add_double_finite_inline(denominator, scalar)); } - f256_s mul_add_mul_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator, double scalar) noexcept + f256_s BL_VECTORCALL mul_add_mul_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator, double scalar) noexcept { - return detail::_f256::div_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), detail::_f256::add_double_inline(denominator, scalar)); + return detail::_f256::div_prechecked_inline(detail::_f256::mul_add_mul_inline(a, b, c, d), detail::_f256::add_double_finite_inline(denominator, scalar)); } - f256_s mul_sub_mul_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator, double scalar) noexcept + f256_s BL_VECTORCALL mul_sub_mul_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& d, const f256_s& denominator, double scalar) noexcept { - return detail::_f256::div_inline(detail::_f256::mul_sub_mul_inline(a, b, c, d), detail::_f256::add_double_inline(denominator, scalar)); + return detail::_f256::div_prechecked_inline(detail::_f256::mul_sub_mul_inline(a, b, c, d), detail::_f256::add_double_finite_inline(denominator, scalar)); } - f256_s add_add_add_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept + f256_s BL_VECTORCALL add_add_add_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept { - return detail::_f256::div_inline(detail::_f256::add_add_add_inline(a, b, c), detail::_f256::add_double_inline(denominator, scalar)); + return detail::_f256::div_prechecked_inline(detail::_f256::add_add_add_inline(a, b, c), detail::_f256::add_double_finite_inline(denominator, scalar)); } - f256_s add_sub_add_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept + f256_s BL_VECTORCALL add_sub_add_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept { - return detail::_f256::div_inline(detail::_f256::add_sub_add_inline(a, b, c), detail::_f256::add_double_inline(denominator, scalar)); + return detail::_f256::div_prechecked_inline(detail::_f256::add_sub_add_inline(a, b, c), detail::_f256::add_double_finite_inline(denominator, scalar)); } - f256_s add_add_sub_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept + f256_s BL_VECTORCALL add_add_sub_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept { - return detail::_f256::div_inline(detail::_f256::add_add_sub_inline(a, b, c), detail::_f256::add_double_inline(denominator, scalar)); + return detail::_f256::div_prechecked_inline(detail::_f256::add_add_sub_inline(a, b, c), detail::_f256::add_double_finite_inline(denominator, scalar)); } - f256_s add_sub_sub_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept + f256_s BL_VECTORCALL add_sub_sub_div_add_double(const f256_s& a, const f256_s& b, const f256_s& c, const f256_s& denominator, double scalar) noexcept { - return detail::_f256::div_inline(detail::_f256::add_sub_sub_inline(a, b, c), detail::_f256::add_double_inline(denominator, scalar)); + return detail::_f256::div_prechecked_inline(detail::_f256::add_sub_sub_inline(a, b, c), detail::_f256::add_double_finite_inline(denominator, scalar)); } - f256_s add_mul_double_div_add_double(const f256_s& addend, const f256_s& value, double value_scalar, const f256_s& denominator, double denominator_scalar) noexcept + f256_s BL_VECTORCALL add_mul_double_div_add_double(const f256_s& addend, const f256_s& value, double value_scalar, const f256_s& denominator, double denominator_scalar) noexcept { - return detail::_f256::div_inline(detail::_f256::add_mul_double_inline(addend, value, value_scalar), detail::_f256::add_double_inline(denominator, denominator_scalar)); + return detail::_f256::div_prechecked_inline(detail::_f256::add_mul_double_inline(addend, value, value_scalar), detail::_f256::add_double_finite_inline(denominator, denominator_scalar)); } - f256_s sub_mul_double_div_add_double(const f256_s& minuend, const f256_s& value, double value_scalar, const f256_s& denominator, double denominator_scalar) noexcept + f256_s BL_VECTORCALL sub_mul_double_div_add_double(const f256_s& minuend, const f256_s& value, double value_scalar, const f256_s& denominator, double denominator_scalar) noexcept { - return detail::_f256::div_inline(detail::_f256::sub_mul_double_inline(minuend, value, value_scalar), detail::_f256::add_double_inline(denominator, denominator_scalar)); + return detail::_f256::div_prechecked_inline(detail::_f256::sub_mul_double_inline(minuend, value, value_scalar), detail::_f256::add_double_finite_inline(denominator, denominator_scalar)); } - f256_s mul_double_sub_div_add_double(const f256_s& value, double value_scalar, const f256_s& subtrahend, const f256_s& denominator, double denominator_scalar) noexcept + f256_s BL_VECTORCALL mul_double_sub_div_add_double(const f256_s& value, double value_scalar, const f256_s& subtrahend, const f256_s& denominator, double denominator_scalar) noexcept { - return detail::_f256::div_inline(detail::_f256::mul_double_sub_inline(value, value_scalar, subtrahend), detail::_f256::add_double_inline(denominator, denominator_scalar)); + return detail::_f256::div_prechecked_inline(detail::_f256::mul_double_sub_inline(value, value_scalar, subtrahend), detail::_f256::add_double_finite_inline(denominator, denominator_scalar)); } } // namespace bl::detail::_f256_runtime diff --git a/src/f256_math.cpp b/src/f256_math.cpp index e76ce0e..e3a5f93 100644 --- a/src/f256_math.cpp +++ b/src/f256_math.cpp @@ -14,53 +14,66 @@ namespace bl::detail::_f256_runtime // roots BL_NO_INLINE f256_s sqrt(const f256_s& a) { +#if BL_FP_BARRIER_ACTIVE + if (detail::_f256::has_subnormal_limb(a)) [[unlikely]] + { + constexpr int input_scale = 512; + return detail::_f256::scale_terms_guarded( + detail::_f256_impl::sqrt( + detail::_f256::scale_terms_guarded(a, input_scale)), + -(input_scale / 2)); + } +#endif return detail::_f256_impl::sqrt(a); } BL_NO_INLINE f256_s hypot(const f256_s& x, const f256_s& y) { +#if BL_FP_BARRIER_ACTIVE + const double largest_head = detail::fp::absd(x.x0) > detail::fp::absd(y.x0) + ? detail::fp::absd(x.x0) + : detail::fp::absd(y.x0); + const bool needs_scale = detail::_f256::has_subnormal_limb(x) || + detail::_f256::has_subnormal_limb(y) || + (largest_head != 0.0 && largest_head < 0x1p-400); + if (needs_scale && detail::fp::absd(x.x0) < 0x1p500 && + detail::fp::absd(y.x0) < 0x1p500) [[unlikely]] + { + constexpr int input_scale = 512; + return detail::_f256::scale_terms_guarded( + detail::_f256_impl::hypot( + detail::_f256::scale_terms_guarded(x, input_scale), + detail::_f256::scale_terms_guarded(y, input_scale)), + -input_scale); + } +#endif return detail::_f256_impl::hypot(x, y); } // rounding and decimals - BL_NO_INLINE f256_s round(const f256_s& a) + BL_NO_INLINE f256_s BL_VECTORCALL round_nearest_away_from_zero(const f256_s& a) { - return detail::_f256_impl::round_runtime(a); + return detail::_f256_impl::round_nearest_away_from_zero_runtime(a); } - BL_NO_INLINE f256_s round_to_decimals(f256_s v, int prec) + BL_NO_INLINE f256_s round_decimals(f256_s v, int prec) { - return detail::_f256_impl::round_to_decimals(v, prec); + return detail::_f256_impl::round_decimals(v, prec); } - BL_NO_INLINE f256_s nearbyint(const f256_s& a) + BL_NO_INLINE f256_s round_significant(f256_s v, int figures) { - return detail::_f256_impl::nearbyint_runtime(a); + return detail::_f256_impl::round_significant(v, figures); } - BL_NO_INLINE f256_s rint(const f256_s& x) + BL_NO_INLINE long lround_nearest_away_from_zero(const f256_s& x) { - return detail::_f256_impl::rint(x); + return detail::_f256_impl::lround_nearest_away_from_zero(x); } - BL_NO_INLINE long lround(const f256_s& x) + BL_NO_INLINE long long llround_nearest_away_from_zero(const f256_s& x) { - return detail::_f256_impl::lround(x); - } - - BL_NO_INLINE long long llround(const f256_s& x) - { - return detail::_f256_impl::llround(x); - } - - BL_NO_INLINE long lrint(const f256_s& x) - { - return detail::_f256_impl::lrint(x); - } - - BL_NO_INLINE long long llrint(const f256_s& x) - { - return detail::_f256_impl::llrint(x); + return detail::_f256_impl::llround_nearest_away_from_zero(x); } // remainders @@ -69,11 +82,6 @@ namespace bl::detail::_f256_runtime return detail::_f256_impl::fmod(x, y); } - BL_NO_INLINE f256_s remainder(const f256_s& x, const f256_s& y) - { - return detail::_f256_impl::remainder(x, y); - } - BL_NO_INLINE f256_s remquo(const f256_s& x, const f256_s& y, int* quo) { return detail::_f256_impl::remquo(x, y, quo); @@ -82,48 +90,15 @@ namespace bl::detail::_f256_runtime // fractional decomposition BL_NO_INLINE f256_s modf(const f256_s& x, f256_s* iptr) noexcept { +#if BL_FP_BARRIER_ACTIVE + if (!detail::fp::isinf_or_nan(x.x0) && detail::fp::absd(x.x0) < 1.0) + { + if (iptr) + *iptr = detail::_f256::signed_zero(bl::signbit(x)); + return x; + } +#endif return detail::_f256_impl::modf(x, iptr); } - // decomposition and scaling - BL_NO_INLINE f256_s ldexp(const f256_s& a, int e) - { - return detail::_f256_impl::ldexp(a, e); - } - - BL_NO_INLINE f256_s frexp(const f256_s& x, int* exp) noexcept - { - return detail::_f256_impl::frexp(x, exp); - } - - BL_NO_INLINE int ilogb(const f256_s& x) noexcept - { - return detail::_f256_impl::ilogb(x); - } - - BL_NO_INLINE f256_s logb(const f256_s& x) noexcept - { - return detail::_f256_impl::logb(x); - } - - BL_NO_INLINE f256_s scalbn(const f256_s& x, int e) noexcept - { - return detail::_f256_impl::scalbn(x, e); - } - - BL_NO_INLINE f256_s scalbln(const f256_s& x, long e) noexcept - { - return detail::_f256_impl::scalbln(x, e); - } - - BL_NO_INLINE f256_s nexttoward(const f256_s& from, long double to) noexcept - { - return detail::_f256_impl::nexttoward(from, to); - } - - BL_NO_INLINE f256_s nexttoward(const f256_s& from, const f256_s& to) noexcept - { - return detail::_f256_impl::nexttoward(from, to); - } - } // namespace bl::detail::_f256_runtime diff --git a/src/f256_transcendental.cpp b/src/f256_transcendental.cpp index e8028b6..3dc7d10 100644 --- a/src/f256_transcendental.cpp +++ b/src/f256_transcendental.cpp @@ -13,7 +13,7 @@ namespace bl::detail::_f256_runtime { BL_NO_INLINE f256_s mul_add_horner_step(const f256_s& a, const f256_s& b, const f256_s& c) noexcept { - return detail::_f256::mul_add_horner_step_inline(a, b, c); + return detail::_f256::mul_add_inline(a, b, c); } BL_NO_INLINE f256_s horner_forward(const f256_s* coeffs, std::size_t count, const f256_s& x) noexcept @@ -70,22 +70,22 @@ namespace bl::detail::_f256_runtime if (count == 0) return {}; - const f256_s t = detail::_f256::sub_inline( - detail::_f256::mul_double_inline(x, 2.0), + const f256_s t = detail::_f256::sub_finite_inline( + detail::_f256::mul_double_product_inline(x, 2.0), f256_s{ shift }); f256_s b1{ 0.0 }; f256_s b2{ 0.0 }; for (std::size_t i = count - 1; i >= 1; --i) { - const f256_s b0 = detail::_f256::add_inline( - detail::_f256::mul_double_sub_inline(detail::_f256::mul_inline(t, b1), 2.0, b2), + const f256_s b0 = detail::_f256::add_finite_inline( + detail::_f256::mul_double_sub_pow2_inline(detail::_f256::mul_product_inline(t, b1), 2.0, b2), coeffs[i]); b2 = b1; b1 = b0; } - return detail::_f256::add_inline(detail::_f256::mul_sub_inline(t, b1, b2), coeffs[0]); + return detail::_f256::add_finite_inline(detail::_f256::mul_sub_inline(t, b1, b2), coeffs[0]); } BL_NO_INLINE f256_s log1p_series_reduced(const f256_s& x) noexcept @@ -98,28 +98,51 @@ namespace bl::detail::_f256_runtime for (int k = 3; k <= 257; k += 2) { - term = detail::_f256::mul_inline(term, z2); - const f256_s add = detail::_f256::div_double_inline(term, static_cast(k)); - sum = detail::_f256::add_inline(sum, add); + term = detail::_f256::mul_product_inline(term, z2); + const f256_s add = detail::_f256::div_double_prechecked_inline(term, static_cast(k)); + sum = detail::_f256::add_finite_inline(sum, add); const f256_s asum = detail::_f256::mag(sum); const f256_s scale = (asum > f256_s{ 1.0 }) ? asum : f256_s{ 1.0 }; - if (detail::_f256::mag(add) <= detail::_f256::mul_inline(f256_s::eps(), scale)) + if (detail::_f256::mag(add) <= detail::_f256::mul_product_inline(detail::_f256::convergence_epsilon, scale)) break; } - return detail::_f256::add_inline(sum, sum); + return detail::_f256::add_finite_inline(sum, sum); } // roots BL_NO_INLINE f256_s cbrt(const f256_s& x) { +#if BL_FP_BARRIER_ACTIVE + if (detail::_f256::has_subnormal_limb(x)) [[unlikely]] + { + constexpr int input_scale = 510; + return detail::_f256::scale_terms_guarded( + detail::_f256_impl::cbrt( + detail::_f256::scale_terms_guarded(x, input_scale)), + -(input_scale / 3)); + } +#endif return detail::_f256_impl::cbrt(x); } // exponential and logarithmic BL_NO_INLINE f256_s exp(const f256_s& x) { +#if BL_FP_BARRIER_ACTIVE + if (x.x0 < -450.0 && !detail::fp::isinf_or_nan(x.x0)) [[unlikely]] + { + constexpr int result_scale = 512; + const f256_s offset = detail::_f256::scale_terms_guarded( + std::numbers::ln2_v, + 9); + const f256_s adjusted = detail::_f256_runtime::add_finite(x, offset); + return detail::_f256::scale_terms_guarded( + detail::_f256_impl::exp(adjusted), + -result_scale); + } +#endif return detail::_f256_impl::exp(x); } @@ -130,43 +153,96 @@ namespace bl::detail::_f256_runtime BL_NO_INLINE f256_s log(const f256_s& a) { +#if BL_FP_BARRIER_ACTIVE + if (detail::_f256::has_subnormal_limb(a)) [[unlikely]] + { + constexpr int input_scale = 64; + const f256_s scaled = detail::_f256::scale_terms_guarded(a, input_scale); + const f256_s correction = detail::_f256::scale_terms_guarded( + std::numbers::ln2_v, + 6); + return detail::_f256_runtime::sub_finite( + detail::_f256_impl::log(scaled), + correction); + } +#endif return detail::_f256_impl::log(a); } BL_NO_INLINE f256_s log2(const f256_s& a) { +#if BL_FP_BARRIER_ACTIVE + if (detail::_f256::has_subnormal_limb(a)) [[unlikely]] + { + constexpr int input_scale = 64; + return detail::_f256_runtime::sub_double_finite( + detail::_f256_impl::log2( + detail::_f256::scale_terms_guarded(a, input_scale)), + static_cast(input_scale)); + } +#endif return detail::_f256_impl::log2(a); } BL_NO_INLINE f256_s log10(const f256_s& a) { +#if BL_FP_BARRIER_ACTIVE + if (detail::_f256::has_subnormal_limb(a)) [[unlikely]] + { + constexpr int input_scale = 64; + const f256_s log10_two = detail::_f256_runtime::mul_finite( + std::numbers::ln2_v, + std::numbers::log10e_v); + const f256_s correction = + detail::_f256::scale_terms_guarded(log10_two, 6); + return detail::_f256_runtime::sub_finite( + detail::_f256_impl::log10( + detail::_f256::scale_terms_guarded(a, input_scale)), + correction); + } +#endif return detail::_f256_impl::log10(a); } BL_NO_INLINE f256_s expm1(const f256_s& x) { +#if BL_FP_BARRIER_ACTIVE + const int exponent = detail::fp::frexp_exponent(x.x0); + if (exponent != 0 && exponent < -540) [[unlikely]] + return x; +#endif return detail::_f256_impl::expm1(x); } BL_NO_INLINE f256_s log1p(const f256_s& x) { +#if BL_FP_BARRIER_ACTIVE + const int exponent = detail::fp::frexp_exponent(x.x0); + if (exponent != 0 && exponent < -540) [[unlikely]] + return x; +#endif return detail::_f256_impl::log1p(x); } // powers - BL_NO_INLINE f256_s pow10_256(int k) + BL_NO_INLINE f256_s BL_VECTORCALL pow(const f256_s& x, const f256_s& y) { - return detail::_f256_impl::pow10_256(k); + return detail::_f256_impl::pow(x, y); } - BL_NO_INLINE f256_s pow(const f256_s& x, const f256_s& y) + BL_NO_INLINE f256_s BL_VECTORCALL pow(const f256_s& x, double y) { return detail::_f256_impl::pow(x, y); } - BL_NO_INLINE f256_s pow(const f256_s& x, double y) + BL_NO_INLINE f256_s BL_VECTORCALL ipow_signed(const f256_s& x, std::intmax_t y) { - return detail::_f256_impl::pow(x, y); + return detail::_f256::ipow_integer(x, y); + } + + BL_NO_INLINE f256_s BL_VECTORCALL ipow_unsigned(const f256_s& x, std::uintmax_t y) + { + return detail::_f256::ipow_integer(x, y); } // trigonometric diff --git a/src/fltx_io.cpp b/src/fltx_io.cpp new file mode 100644 index 0000000..85743ee --- /dev/null +++ b/src/fltx_io.cpp @@ -0,0 +1,63 @@ +/** + * fltx/fltx_io.cpp - Runtime IO entry points. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#include "fltx/charconv.h" +#include "fltx/string.h" + +namespace bl +{ + [[nodiscard]] BL_NO_INLINE std::string to_string( + const f128_s& value, + precision_info precision, + std::ios_base::fmtflags flags) + { + return detail::to_string_impl(value, precision, flags); + } + + [[nodiscard]] BL_NO_INLINE std::string to_string( + const f256_s& value, + precision_info precision, + std::ios_base::fmtflags flags) + { + return detail::to_string_impl(value, precision, flags); + } + + namespace detail::charconv + { + [[nodiscard]] BL_NO_INLINE parse_result parse_runtime_f128_s( + std::string_view text, + std::chars_format fmt) noexcept + { + return parse_runtime(text, fmt); + } + + [[nodiscard]] BL_NO_INLINE parse_result parse_runtime_f128( + std::string_view text, + std::chars_format fmt) noexcept + { + return parse_runtime(text, fmt); + } + + [[nodiscard]] BL_NO_INLINE parse_result parse_runtime_f256_s( + std::string_view text, + std::chars_format fmt) noexcept + { + return parse_runtime(text, fmt); + } + + [[nodiscard]] BL_NO_INLINE parse_result parse_runtime_f256( + std::string_view text, + std::chars_format fmt) noexcept + { + return parse_runtime(text, fmt); + } + + } // namespace detail::charconv + +} // namespace bl diff --git a/src/fma_x86.cpp b/src/fma_x86.cpp new file mode 100644 index 0000000..4799265 --- /dev/null +++ b/src/fma_x86.cpp @@ -0,0 +1,33 @@ +/** + * fltx/src/fma_x86.cpp - Complete-operation x86 FMA backends. + * + * Copyright (c) 2026 William Hemsworth + * + * This software is released under the MIT License. + * See LICENSE for details. + */ + +#include "fltx/detail/f128_math_basic.h" +#include "fltx/detail/f256_math_basic.h" + +#if defined(FLTX_BUILD_X86_FMA_BACKEND) + +static_assert(FLTX_HAS_X86_FMA, "the x86 FMA backend must be compiled with FMA enabled"); + +namespace bl::detail::_f128_runtime +{ + BL_NO_INLINE f128_s fma_x86(const f128_s& x, const f128_s& y, const f128_s& z) + { + return _f128_impl::fma(x, y, z); + } +} + +namespace bl::detail::_f256_runtime +{ + BL_NO_INLINE f256_s fma_x86(const f256_s& x, const f256_s& y, const f256_s& z) + { + return _f256_impl::fma(x, y, z); + } +} + +#endif diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt deleted file mode 100644 index c62352a..0000000 --- a/tests/CMakeLists.txt +++ /dev/null @@ -1,312 +0,0 @@ -cmake_minimum_required(VERSION 3.21) -project(fltx LANGUAGES CXX) - -if (NOT DEFINED FLTX_OPTIONS_INCLUDED) - include("${CMAKE_CURRENT_SOURCE_DIR}/../cmake/fltxOptions.cmake") -endif() -if (NOT COMMAND fltx_apply_fast_math_options) - include("${CMAKE_CURRENT_SOURCE_DIR}/../cmake/fltxFastMath.cmake") -endif() -if (NOT COMMAND fltx_apply_msvc_timing_reports) - include("${CMAKE_CURRENT_SOURCE_DIR}/../cmake/fltxMsvcTiming.cmake") -endif() -if (NOT COMMAND fltx_enable_msvc_parallel_compile) - include("${CMAKE_CURRENT_SOURCE_DIR}/../cmake/fltxMsvcParallel.cmake") -endif() -if (NOT COMMAND fltx_apply_simd_options) - include("${CMAKE_CURRENT_SOURCE_DIR}/../cmake/fltxSimd.cmake") -endif() -include("${CMAKE_CURRENT_SOURCE_DIR}/../cmake/fltxSources.cmake") - -find_package(Catch2 3 CONFIG REQUIRED) -include(Catch) -include(CTest) - -option(FLTX_REGISTER_METRICS_CTESTS "Register fltx non-benchmark metrics cases with CTest." ON) - -if(FLTX_PRECISION_TESTS_CONSTEXPR_PARITY AND FLTX_PRECISION_TESTS_SIMULATE_CONSTEVAL) - message(FATAL_ERROR "FLTX_PRECISION_TESTS_CONSTEXPR_PARITY and FLTX_PRECISION_TESTS_SIMULATE_CONSTEVAL are separate modes; enable only one.") -endif() - -file(GLOB_RECURSE FLTX_HEADERS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/../include/*.h") -file(GLOB FLTX_ROOT_HEADERS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/../include/*.h") -file(GLOB_RECURSE FLTX_PUBLIC_TREE_HEADERS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/../include/fltx/*.h") -file(GLOB FLTX_SOURCE CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/../include/*.cpp") - -file(GLOB FLTX_TESTS_PRECISION_SOURCE CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/precision/*.cpp") -file(GLOB FLTX_TESTS_IO_SOURCE CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/io/*.cpp") -file(GLOB FLTX_TESTS_HASH_SOURCE CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/hash/*.cpp") -file(GLOB FLTX_TESTS_RANDOM_SOURCE CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/random/*.cpp") -file(GLOB FLTX_TESTS_METRICS_HEADERS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/metrics/*.h") -file(GLOB FLTX_TESTS_METRICS_SOURCE CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/metrics/*.cpp") -file(GLOB_RECURSE FLTX_TESTS_QDPP_HEADERS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/extern/qdpp/include/*.h") -file(GLOB FLTX_TESTS_CONSTEXPR_PARITY_SOURCE CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/constexpr_parity/*.cpp") - -set(FLTX_TEST_MACRO_STATUS_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/test_macro_status.cpp") -set(FLTX_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/../include") -set(FLTX_PUBLIC_TREE_INCLUDE_DIR "${FLTX_INCLUDE_DIR}/fltx") -get_filename_component(FLTX_METRICS_OUTPUT_ROOT_NATIVE "${CMAKE_CURRENT_SOURCE_DIR}/../res/metrics" ABSOLUTE) -file(TO_CMAKE_PATH "${FLTX_METRICS_OUTPUT_ROOT_NATIVE}" FLTX_METRICS_OUTPUT_ROOT) - -function (organizeMetricsTestsSourceGroups) - source_group(TREE "${FLTX_PUBLIC_TREE_INCLUDE_DIR}" - PREFIX "fltx" - FILES ${FLTX_PUBLIC_TREE_HEADERS} - ) - source_group("fltx" - FILES ${FLTX_ROOT_HEADERS} - ) - source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/metrics" - PREFIX "metrics" - FILES - ${FLTX_TESTS_METRICS_HEADERS} - ${FLTX_TESTS_METRICS_SOURCE} - ) - source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/extern/qdpp/include" - PREFIX "extern\\qdpp" - FILES ${FLTX_TESTS_QDPP_HEADERS} - ) -endfunction() - -set(FLTX_LIBRARY_SOURCES "") -foreach(_FLTX_LIBRARY_SOURCE IN LISTS FLTX_LIBRARY_SOURCE_FILES) - list(APPEND FLTX_LIBRARY_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/../${_FLTX_LIBRARY_SOURCE}") -endforeach() - -function (addFltxTestLibrary _TARGET) - cmake_parse_arguments(FLTX_TEST_LIB "" "FAST_MATH_MODE" "DEFINITIONS" ${ARGN}) - - add_library(${_TARGET} STATIC ${FLTX_LIBRARY_SOURCES}) - target_include_directories(${_TARGET} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../include") - target_compile_features(${_TARGET} PUBLIC cxx_std_23) - fltx_apply_simd_options(${_TARGET} PUBLIC) - target_compile_definitions(${_TARGET} PUBLIC ${FLTX_TEST_LIB_DEFINITIONS} ${FLTX_TEST_LIB_UNPARSED_ARGUMENTS}) - - if(DEFINED FLTX_TEST_LIB_FAST_MATH_MODE) - fltx_apply_fast_math_options(${_TARGET} MODE ${FLTX_TEST_LIB_FAST_MATH_MODE}) - else() - fltx_apply_fast_math_options(${_TARGET}) - endif() - - fltx_apply_msvc_timing_reports(${_TARGET}) - fltx_enable_msvc_parallel_compile(${_TARGET}) -endfunction() - -function (addFltxTestMacroStatus _TARGET) - cmake_parse_arguments(FLTX_TEST_STATUS "" "FAST_MATH_MODE" "DEFINITIONS" ${ARGN}) - - set(_STATUS_TARGET "${_TARGET}_macro_status") - add_library(${_STATUS_TARGET} OBJECT "${FLTX_TEST_MACRO_STATUS_SOURCE}") - target_include_directories(${_STATUS_TARGET} PRIVATE "${FLTX_INCLUDE_DIR}") - target_compile_features(${_STATUS_TARGET} PRIVATE cxx_std_23) - fltx_apply_simd_options(${_STATUS_TARGET}) - target_compile_definitions(${_STATUS_TARGET} PRIVATE - FLTX_TEST_NAME=\"${_TARGET}\" - ${FLTX_TEST_STATUS_DEFINITIONS} - ${FLTX_TEST_STATUS_UNPARSED_ARGUMENTS} - ) - - if(DEFINED FLTX_TEST_STATUS_FAST_MATH_MODE) - fltx_apply_fast_math_options(${_STATUS_TARGET} MODE ${FLTX_TEST_STATUS_FAST_MATH_MODE}) - else() - fltx_apply_fast_math_options(${_STATUS_TARGET}) - endif() - - fltx_apply_msvc_timing_reports(${_STATUS_TARGET}) - fltx_enable_msvc_parallel_compile(${_STATUS_TARGET}) - target_sources(${_TARGET} PRIVATE $) -endfunction() - -function (registerFltxCatchTests _TARGET) - cmake_parse_arguments(FLTX_CATCH "" "" "TEST_SPEC" ${ARGN}) - - if(NOT BUILD_TESTING) - return() - endif() - - if(EMSCRIPTEN) - add_test(NAME ${_TARGET} COMMAND ${_TARGET}) - set_tests_properties(${_TARGET} PROPERTIES LABELS "fltx;${_TARGET}") - return() - endif() - - set(_DISCOVERY_ARGS) - if(FLTX_CATCH_TEST_SPEC) - list(APPEND _DISCOVERY_ARGS TEST_SPEC ${FLTX_CATCH_TEST_SPEC}) - endif() - - catch_discover_tests(${_TARGET} - ${_DISCOVERY_ARGS} - TEST_PREFIX "${_TARGET}::" - PROPERTIES LABELS "fltx;${_TARGET}" - DISCOVERY_MODE POST_BUILD - ) -endfunction() - -set(FLTX_PARITY_TEST_DEFINITIONS - FLTX_CONSTEXPR_PARITY - FLTX_SIMULATE_CONSTEVAL_MODE -) - -addFltxTestLibrary(fltx_parity_test_lib ${FLTX_PARITY_TEST_DEFINITIONS}) - -if(FLTX_PRECISION_TESTS_CONSTEXPR_PARITY) - addFltxTestLibrary(fltx_constexpr_parity_lib FLTX_CONSTEXPR_PARITY) -endif() - -if(FLTX_PRECISION_TESTS_SIMULATE_CONSTEVAL) - addFltxTestLibrary(fltx_simulate_consteval_lib FLTX_SIMULATE_CONSTEVAL_MODE) -endif() - -add_executable(precision_tests - ${FLTX_HEADERS} - ${FLTX_SOURCE} - ${FLTX_TESTS_PRECISION_SOURCE} -) -add_executable(io_tests - ${FLTX_HEADERS} - ${FLTX_SOURCE} - - ${FLTX_TESTS_IO_SOURCE} -) -add_executable(hash_tests - ${FLTX_HEADERS} - ${FLTX_SOURCE} - - ${FLTX_TESTS_HASH_SOURCE} -) -add_executable(random_tests - ${FLTX_HEADERS} - ${FLTX_SOURCE} - - ${FLTX_TESTS_RANDOM_SOURCE} -) -add_executable(metrics_tests - ${FLTX_HEADERS} - ${FLTX_SOURCE} - - ${FLTX_TESTS_METRICS_HEADERS} - ${FLTX_TESTS_METRICS_SOURCE} - ${FLTX_TESTS_QDPP_HEADERS} -) -organizeMetricsTestsSourceGroups() -add_executable(parity_tests - ${FLTX_HEADERS} - ${FLTX_SOURCE} - - ${FLTX_TESTS_CONSTEXPR_PARITY_SOURCE} -) - - -find_path(MPFR_INCLUDE_DIR NAMES mpfr.h REQUIRED) -find_library(MPFR_LIBRARY NAMES mpfr REQUIRED) - -find_path(GMP_INCLUDE_DIR NAMES gmp.h REQUIRED) -find_library(GMP_LIBRARY NAMES gmp REQUIRED) - -function (prepareTarget _TARGET _FLTX_LIBRARY) - if (NOT EMSCRIPTEN) - if (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - target_compile_options(${_TARGET} PRIVATE -Wa,-mbig-obj) - elseif (MSVC) - target_compile_options(${_TARGET} PRIVATE /bigobj) - endif() - endif() - - target_include_directories(${_TARGET} PRIVATE - ${FLTX_INCLUDE_DIR} - ) - - set(_CATCH_TARGET Catch2::Catch2WithMain) - if(_TARGET STREQUAL "metrics_tests") - set(_CATCH_TARGET Catch2::Catch2) - endif() - - target_link_libraries(${_TARGET} PRIVATE - ${_FLTX_LIBRARY} - ${_CATCH_TARGET} - ) - - target_include_directories(${_TARGET} PRIVATE - ${MPFR_INCLUDE_DIR} - ${GMP_INCLUDE_DIR} - ) - - target_link_libraries(${_TARGET} PRIVATE - ${MPFR_LIBRARY} - ${GMP_LIBRARY} - ) - - target_compile_features(${_TARGET} PRIVATE cxx_std_23) - fltx_apply_simd_options(${_TARGET}) - - if(_TARGET STREQUAL "metrics_tests") - target_compile_definitions(${_TARGET} PRIVATE "FLTX_METRICS_OUTPUT_ROOT=\"${FLTX_METRICS_OUTPUT_ROOT}\"") - endif() - - fltx_apply_msvc_timing_reports(${_TARGET}) - fltx_enable_msvc_parallel_compile(${_TARGET}) -endfunction() - -set(FLTX_PRECISION_TEST_LIBRARY fltx::fltx) -if (FLTX_PRECISION_TESTS_CONSTEXPR_PARITY) - set(FLTX_PRECISION_TEST_LIBRARY fltx_constexpr_parity_lib) -elseif(FLTX_PRECISION_TESTS_SIMULATE_CONSTEVAL) - set(FLTX_PRECISION_TEST_LIBRARY fltx_simulate_consteval_lib) -endif() - -prepareTarget(precision_tests ${FLTX_PRECISION_TEST_LIBRARY}) -prepareTarget(io_tests fltx::fltx) -prepareTarget(hash_tests fltx::fltx) -prepareTarget(random_tests fltx::fltx) -prepareTarget(metrics_tests fltx::fltx) -prepareTarget(parity_tests fltx_parity_test_lib) - -if(VERBOSE_TESTS) - target_compile_definitions(metrics_tests PRIVATE VERBOSE_TESTS=1) -else() - target_compile_definitions(metrics_tests PRIVATE VERBOSE_TESTS=0) -endif() - -target_include_directories(metrics_tests PRIVATE - "${CMAKE_CURRENT_SOURCE_DIR}/extern/qdpp/include" -) - -if(EMSCRIPTEN) - target_link_options(metrics_tests PRIVATE - -sALLOW_MEMORY_GROWTH=1 - -sINITIAL_MEMORY=268435456 - -sMAXIMUM_MEMORY=1073741824 - ) -endif() - -if (FLTX_PRECISION_TESTS_CONSTEXPR_PARITY) - addFltxTestMacroStatus(precision_tests DEFINITIONS FLTX_CONSTEXPR_PARITY) -elseif(FLTX_PRECISION_TESTS_SIMULATE_CONSTEVAL) - addFltxTestMacroStatus(precision_tests DEFINITIONS FLTX_SIMULATE_CONSTEVAL_MODE FLTX_TEST_FORCE_SIMULATED_CONSTEVAL) -else() - addFltxTestMacroStatus(precision_tests) -endif() - -addFltxTestMacroStatus(io_tests) -addFltxTestMacroStatus(hash_tests) -addFltxTestMacroStatus(random_tests) -addFltxTestMacroStatus(metrics_tests) -if(TARGET accuracy_tests) - addFltxTestMacroStatus(accuracy_tests) -endif() - -addFltxTestMacroStatus(parity_tests ${FLTX_PARITY_TEST_DEFINITIONS}) - -registerFltxCatchTests(precision_tests) -registerFltxCatchTests(io_tests) -registerFltxCatchTests(hash_tests) -registerFltxCatchTests(random_tests) -registerFltxCatchTests(parity_tests) -if(FLTX_REGISTER_METRICS_CTESTS) - registerFltxCatchTests(metrics_tests TEST_SPEC "~[bench]") -endif() - -if(NOT TARGET f256_expression_compile_bench) - add_subdirectory(expressions/f256) -endif() diff --git a/tests/binary_size/CMakeLists.txt b/tests/binary_size/CMakeLists.txt deleted file mode 100644 index c5b59de..0000000 --- a/tests/binary_size/CMakeLists.txt +++ /dev/null @@ -1,205 +0,0 @@ -cmake_minimum_required(VERSION 3.21) -project(fltx_binary_size LANGUAGES CXX) - -if(NOT DEFINED FLTX_OPTIONS_INCLUDED) - include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/fltxOptions.cmake") -endif() -if(NOT COMMAND fltx_apply_fast_math_options) - include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/fltxFastMath.cmake") -endif() -if(NOT COMMAND fltx_apply_simd_options) - include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/fltxSimd.cmake") -endif() -if(NOT COMMAND fltx_enable_msvc_parallel_compile) - include("${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/fltxMsvcParallel.cmake") -endif() - -find_package(Python3 COMPONENTS Interpreter QUIET) - -set(FLTX_BINARY_SIZE_GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") -file(MAKE_DIRECTORY "${FLTX_BINARY_SIZE_GENERATED_DIR}") - -set_property(GLOBAL PROPERTY FLTX_BINARY_SIZE_TARGETS "") -set_property(GLOBAL PROPERTY FLTX_BINARY_SIZE_MANIFEST_CONTENT "family,group,label,target,path\n") - -function(fltx_binary_size_apply_size_link_options _TARGET) - if(MSVC) - target_compile_options(${_TARGET} PRIVATE - $<$:/Gy> - $<$:/Gw> - ) - target_link_options(${_TARGET} PRIVATE - $<$:/OPT:REF> - $<$:/OPT:ICF> - ) - elseif(CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$") - target_compile_options(${_TARGET} PRIVATE - $<$:-ffunction-sections> - $<$:-fdata-sections> - ) - target_link_options(${_TARGET} PRIVATE - $<$:-Wl,--gc-sections> - ) - endif() -endfunction() - -function(fltx_binary_size_prepare_target _TARGET _FAMILY _GROUP _LABEL) - target_link_libraries(${_TARGET} PRIVATE fltx::fltx) - target_compile_features(${_TARGET} PRIVATE cxx_std_23) - target_include_directories(${_TARGET} PRIVATE - "${CMAKE_CURRENT_SOURCE_DIR}/../unit_compile_tests/${_FAMILY}" - ) - fltx_apply_fast_math_options(${_TARGET}) - fltx_apply_simd_options(${_TARGET}) - fltx_binary_size_apply_size_link_options(${_TARGET}) - fltx_enable_msvc_parallel_compile(${_TARGET}) - - set_target_properties(${_TARGET} PROPERTIES FOLDER "fltx/binary-size/${_FAMILY}") - - set_property(GLOBAL APPEND PROPERTY FLTX_BINARY_SIZE_TARGETS "${_TARGET}") - set_property(GLOBAL APPEND_STRING PROPERTY FLTX_BINARY_SIZE_MANIFEST_CONTENT - "${_FAMILY},${_GROUP},${_LABEL},${_TARGET},$\n" - ) -endfunction() - -function(fltx_binary_size_add_baseline _FAMILY) - set(_TARGET "fltx_size_${_FAMILY}_baseline") - set(_MAIN "${FLTX_BINARY_SIZE_GENERATED_DIR}/${_TARGET}.cpp") - - if(_FAMILY STREQUAL "f128") - set(_HEADER "fltx/f128.h") - set(_CALL "bl::isolated::runtime_f128(1.25)") - elseif(_FAMILY STREQUAL "f256") - set(_HEADER "fltx/f256.h") - set(_CALL "bl::isolated::runtime_f256(1.25)") - else() - message(FATAL_ERROR "Unsupported fltx binary-size family '${_FAMILY}'.") - endif() - - file(WRITE "${_MAIN}" -"#include <${_HEADER}> -#include \"isolated_runtime.h\" - -int main() -{ - auto value = ${_CALL}; - bl::isolated::keep_value(value); - return 0; -} -") - - add_executable(${_TARGET} - "${_MAIN}" - "${CMAKE_CURRENT_SOURCE_DIR}/../unit_compile_tests/${_FAMILY}/isolated_runtime.cpp" - ) - fltx_binary_size_prepare_target(${_TARGET} "${_FAMILY}" "baseline" "baseline") -endfunction() - -function(fltx_binary_size_add_case _FAMILY _SOURCE) - get_filename_component(_STEM "${_SOURCE}" NAME_WE) - string(REGEX REPLACE "^isolated_${_FAMILY}_" "" _LABEL "${_STEM}") - set(_TARGET "fltx_size_${_FAMILY}_${_LABEL}") - set(_MAIN "${FLTX_BINARY_SIZE_GENERATED_DIR}/${_TARGET}.cpp") - - file(WRITE "${_MAIN}" -"void ${_STEM}(); - -int main() -{ - ${_STEM}(); - return 0; -} -") - - add_executable(${_TARGET} - "${_MAIN}" - "${_SOURCE}" - "${CMAKE_CURRENT_SOURCE_DIR}/../unit_compile_tests/${_FAMILY}/isolated_runtime.cpp" - ) - fltx_binary_size_prepare_target(${_TARGET} "${_FAMILY}" "single" "${_LABEL}") -endfunction() - -function(fltx_binary_size_add_callsite_case _FAMILY _LABEL _CASE_ID _REPEAT) - set(_TARGET "fltx_size_${_FAMILY}_callsite_${_LABEL}_${_REPEAT}") - - add_executable(${_TARGET} - "${CMAKE_CURRENT_SOURCE_DIR}/callsite_stress.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/../unit_compile_tests/${_FAMILY}/isolated_runtime.cpp" - ) - - if(_FAMILY STREQUAL "f128") - target_compile_definitions(${_TARGET} PRIVATE FLTX_BINARY_SIZE_STRESS_F128=1) - elseif(_FAMILY STREQUAL "f256") - target_compile_definitions(${_TARGET} PRIVATE FLTX_BINARY_SIZE_STRESS_F256=1) - else() - message(FATAL_ERROR "Unsupported fltx binary-size family '${_FAMILY}'.") - endif() - - target_compile_definitions(${_TARGET} PRIVATE - FLTX_BINARY_SIZE_STRESS_CASE=${_CASE_ID} - FLTX_BINARY_SIZE_STRESS_REPEAT=${_REPEAT} - ) - - fltx_binary_size_prepare_target(${_TARGET} "${_FAMILY}" "callsite" "${_LABEL}_${_REPEAT}") -endfunction() - -fltx_binary_size_add_baseline(f128) -fltx_binary_size_add_baseline(f256) - -file(GLOB FLTX_BINARY_SIZE_F128_SOURCES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/../unit_compile_tests/f128/isolated_f128_*.cpp" -) -file(GLOB FLTX_BINARY_SIZE_F256_SOURCES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/../unit_compile_tests/f256/isolated_f256_*.cpp" -) - -foreach(_SOURCE IN LISTS FLTX_BINARY_SIZE_F128_SOURCES) - fltx_binary_size_add_case(f128 "${_SOURCE}") -endforeach() - -foreach(_SOURCE IN LISTS FLTX_BINARY_SIZE_F256_SOURCES) - fltx_binary_size_add_case(f256 "${_SOURCE}") -endforeach() - -foreach(_FAMILY f128 f256) - fltx_binary_size_add_callsite_case(${_FAMILY} add 1 32) - fltx_binary_size_add_callsite_case(${_FAMILY} mul 2 32) - fltx_binary_size_add_callsite_case(${_FAMILY} div 3 16) - fltx_binary_size_add_callsite_case(${_FAMILY} mixed_arithmetic 4 16) - fltx_binary_size_add_callsite_case(${_FAMILY} sqrt 5 16) - fltx_binary_size_add_callsite_case(${_FAMILY} sin 6 16) - fltx_binary_size_add_callsite_case(${_FAMILY} cos 7 16) - fltx_binary_size_add_callsite_case(${_FAMILY} tan 8 16) - fltx_binary_size_add_callsite_case(${_FAMILY} exp 9 16) - fltx_binary_size_add_callsite_case(${_FAMILY} log 10 16) - fltx_binary_size_add_callsite_case(${_FAMILY} pow 11 16) - fltx_binary_size_add_callsite_case(${_FAMILY} sincos 12 16) -endforeach() - -set(FLTX_BINARY_SIZE_MANIFEST "${CMAKE_CURRENT_BINARY_DIR}/fltx_binary_size_manifest.csv") -set(FLTX_BINARY_SIZE_REPORT "${CMAKE_CURRENT_BINARY_DIR}/fltx_binary_size_report.csv") - -get_property(FLTX_BINARY_SIZE_TARGETS GLOBAL PROPERTY FLTX_BINARY_SIZE_TARGETS) -get_property(FLTX_BINARY_SIZE_MANIFEST_CONTENT GLOBAL PROPERTY FLTX_BINARY_SIZE_MANIFEST_CONTENT) - -file(GENERATE - OUTPUT "${FLTX_BINARY_SIZE_MANIFEST}" - CONTENT "${FLTX_BINARY_SIZE_MANIFEST_CONTENT}" -) - -add_custom_target(fltx_binary_size - DEPENDS ${FLTX_BINARY_SIZE_TARGETS} -) - -if(Python3_Interpreter_FOUND) - add_custom_target(fltx_binary_size_report - COMMAND "${Python3_EXECUTABLE}" - "${CMAKE_CURRENT_SOURCE_DIR}/report_binary_size.py" - "--manifest" "${FLTX_BINARY_SIZE_MANIFEST}" - "--output" "${FLTX_BINARY_SIZE_REPORT}" - DEPENDS fltx_binary_size - USES_TERMINAL - ) -else() - message(STATUS "Python3 interpreter not found; fltx_binary_size_report target will not be available.") -endif() diff --git a/tests/binary_size/callsite_stress.cpp b/tests/binary_size/callsite_stress.cpp deleted file mode 100644 index 46dfa01..0000000 --- a/tests/binary_size/callsite_stress.cpp +++ /dev/null @@ -1,103 +0,0 @@ -#include -#include -#include "isolated_runtime.h" - -#if !defined(FLTX_BINARY_SIZE_STRESS_CASE) -# error "FLTX_BINARY_SIZE_STRESS_CASE must be defined." -#endif - -#if !defined(FLTX_BINARY_SIZE_STRESS_REPEAT) -# define FLTX_BINARY_SIZE_STRESS_REPEAT 64 -#endif - -#if defined(FLTX_BINARY_SIZE_STRESS_F128) -using fltx_binary_size_value = bl::f128; - -BL_FORCE_INLINE fltx_binary_size_value fltx_binary_size_runtime(double value) noexcept -{ - return bl::isolated::runtime_f128(value); -} -#elif defined(FLTX_BINARY_SIZE_STRESS_F256) -using fltx_binary_size_value = bl::f256; - -BL_FORCE_INLINE fltx_binary_size_value fltx_binary_size_runtime(double value) noexcept -{ - return bl::isolated::runtime_f256(value); -} -#else -# error "Define FLTX_BINARY_SIZE_STRESS_F128 or FLTX_BINARY_SIZE_STRESS_F256." -#endif - -template -BL_FORCE_INLINE fltx_binary_size_value fltx_binary_size_bias() noexcept -{ - return fltx_binary_size_value{ 1.0 + static_cast((I % 11) + 1) * 0.0001 }; -} - -template -BL_FORCE_INLINE fltx_binary_size_value fltx_binary_size_step( - fltx_binary_size_value x, - fltx_binary_size_value a, - fltx_binary_size_value b, - fltx_binary_size_value c) noexcept -{ - if constexpr (FLTX_BINARY_SIZE_STRESS_CASE == 1) - return x + a + fltx_binary_size_bias(); - else if constexpr (FLTX_BINARY_SIZE_STRESS_CASE == 2) - return x * a * fltx_binary_size_bias(); - else if constexpr (FLTX_BINARY_SIZE_STRESS_CASE == 3) - return x / (a + fltx_binary_size_bias()); - else if constexpr (FLTX_BINARY_SIZE_STRESS_CASE == 4) - return ((x + a) * b - c) / (a + fltx_binary_size_bias()); - else if constexpr (FLTX_BINARY_SIZE_STRESS_CASE == 5) - return bl::sqrt((x * x) + fltx_binary_size_bias()); - else if constexpr (FLTX_BINARY_SIZE_STRESS_CASE == 6) - return bl::sin((x + fltx_binary_size_bias()) * 0.001); - else if constexpr (FLTX_BINARY_SIZE_STRESS_CASE == 7) - return bl::cos((x + fltx_binary_size_bias()) * 0.001); - else if constexpr (FLTX_BINARY_SIZE_STRESS_CASE == 8) - return bl::tan((x + fltx_binary_size_bias()) * 0.001); - else if constexpr (FLTX_BINARY_SIZE_STRESS_CASE == 9) - return bl::exp((x + fltx_binary_size_bias()) * 0.001); - else if constexpr (FLTX_BINARY_SIZE_STRESS_CASE == 10) - return bl::log((x * x) + fltx_binary_size_bias()); - else if constexpr (FLTX_BINARY_SIZE_STRESS_CASE == 11) - return bl::pow((x * 0.001) + fltx_binary_size_bias(), b); - else if constexpr (FLTX_BINARY_SIZE_STRESS_CASE == 12) - { - fltx_binary_size_value s; - fltx_binary_size_value c_out; - (void)bl::sincos((x + fltx_binary_size_bias()) * 0.001, s, c_out); - return s + c_out; - } - else - { - static_assert(FLTX_BINARY_SIZE_STRESS_CASE >= 1 && FLTX_BINARY_SIZE_STRESS_CASE <= 12); - return x; - } -} - -template -BL_FORCE_INLINE fltx_binary_size_value fltx_binary_size_run( - fltx_binary_size_value x, - fltx_binary_size_value a, - fltx_binary_size_value b, - fltx_binary_size_value c) noexcept -{ - if constexpr (I == 0) - return x; - else - return fltx_binary_size_run(fltx_binary_size_step(x, a, b, c), a, b, c); -} - -int main() -{ - auto x = fltx_binary_size_runtime(1.125); - auto a = fltx_binary_size_runtime(1.0001); - auto b = fltx_binary_size_runtime(1.25); - auto c = fltx_binary_size_runtime(0.0625); - - auto value = fltx_binary_size_run(x, a, b, c); - bl::isolated::keep_value(value); - return 0; -} diff --git a/tests/binary_size/report_binary_size.py b/tests/binary_size/report_binary_size.py deleted file mode 100644 index c75ee74..0000000 --- a/tests/binary_size/report_binary_size.py +++ /dev/null @@ -1,151 +0,0 @@ -import argparse -import csv -from pathlib import Path -from typing import Optional - - -def companion_wasm_path(path: Path) -> Optional[Path]: - if path.suffix.lower() in {".js", ".html"}: - return path.with_suffix(".wasm") - return None - - -def file_size(path: Path) -> Optional[int]: - if not path.exists(): - return None - return path.stat().st_size - - -def kib(value: Optional[int]) -> str: - if value is None: - return "" - return f"{value / 1024.0:.2f}" - - -def load_rows(manifest: Path) -> list[dict[str, object]]: - rows: list[dict[str, object]] = [] - with manifest.open(newline="") as handle: - for row in csv.DictReader(handle): - path = Path(row["path"]) - exe_bytes = file_size(path) - wasm_path = companion_wasm_path(path) - wasm_bytes = file_size(wasm_path) if wasm_path else None - primary_bytes = wasm_bytes if wasm_bytes is not None else exe_bytes - primary_path = wasm_path if wasm_bytes is not None and wasm_path is not None else path - - rows.append( - { - "family": row["family"], - "group": row["group"], - "label": row["label"], - "target": row["target"], - "path": str(path), - "primary_path": str(primary_path), - "exe_bytes": exe_bytes, - "wasm_bytes": wasm_bytes, - "primary_bytes": primary_bytes, - } - ) - return rows - - -def write_report(rows: list[dict[str, object]], output: Path) -> list[dict[str, object]]: - baselines: dict[str, int] = {} - for row in rows: - if row["label"] == "baseline" and isinstance(row["primary_bytes"], int): - baselines[str(row["family"])] = int(row["primary_bytes"]) - - report_rows: list[dict[str, object]] = [] - for row in rows: - primary = row["primary_bytes"] - baseline = baselines.get(str(row["family"])) - delta = primary - baseline if isinstance(primary, int) and baseline is not None else None - - report_rows.append( - { - "family": row["family"], - "group": row["group"], - "label": row["label"], - "target": row["target"], - "primary_bytes": primary if primary is not None else "", - "primary_kib": kib(primary if isinstance(primary, int) else None), - "delta_bytes": delta if delta is not None else "", - "delta_kib": kib(delta), - "exe_bytes": row["exe_bytes"] if row["exe_bytes"] is not None else "", - "wasm_bytes": row["wasm_bytes"] if row["wasm_bytes"] is not None else "", - "primary_path": row["primary_path"], - "target_path": row["path"], - } - ) - - report_rows.sort( - key=lambda row: ( - str(row["family"]), - str(row["group"]), - -(int(row["delta_bytes"]) if row["delta_bytes"] != "" else -1), - str(row["label"]), - ) - ) - - output.parent.mkdir(parents=True, exist_ok=True) - with output.open("w", newline="") as handle: - writer = csv.DictWriter( - handle, - fieldnames=[ - "family", - "group", - "label", - "target", - "primary_bytes", - "primary_kib", - "delta_bytes", - "delta_kib", - "exe_bytes", - "wasm_bytes", - "primary_path", - "target_path", - ], - ) - writer.writeheader() - writer.writerows(report_rows) - - return report_rows - - -def print_summary(report_rows: list[dict[str, object]], output: Path, top: int) -> None: - print(f"Wrote {output}") - print("Primary size uses the companion .wasm file when present; otherwise it uses the target executable.") - - families = sorted({str(row["family"]) for row in report_rows}) - for family in families: - baseline = next((row for row in report_rows if row["family"] == family and row["label"] == "baseline"), None) - if baseline: - print(f"\n{family} baseline: {baseline['primary_kib']} KiB") - - groups = [group for group in ("single", "callsite") if any(row["family"] == family and row["group"] == group for row in report_rows)] - for group in groups: - rows = [ - row for row in report_rows - if row["family"] == family and row["group"] == group and row["delta_bytes"] != "" - ] - rows.sort(key=lambda row: int(row["delta_bytes"]), reverse=True) - - print(f" {group}:") - for row in rows[:top]: - print(f" {row['label']:<24} +{row['delta_kib']:>9} KiB total {row['primary_kib']:>9} KiB") - - -def main() -> None: - parser = argparse.ArgumentParser(description="Report fltx isolated binary-size deltas.") - parser.add_argument("--manifest", required=True, type=Path) - parser.add_argument("--output", required=True, type=Path) - parser.add_argument("--top", default=20, type=int) - args = parser.parse_args() - - rows = load_rows(args.manifest) - report_rows = write_report(rows, args.output) - print_summary(report_rows, args.output, args.top) - - -if __name__ == "__main__": - main() diff --git a/tests/constexpr_parity/test_f128_constexpr_parity.cpp b/tests/constexpr_parity/test_f128_constexpr_parity.cpp deleted file mode 100644 index 77dcf0f..0000000 --- a/tests/constexpr_parity/test_f128_constexpr_parity.cpp +++ /dev/null @@ -1,980 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -namespace -{ -using sample_type = bl::f128; -using value_type = bl::f128_s; - -#ifdef FLTX_PARITY_SAMPLES_PER_BUCKET -constexpr int kSamplesPerBucket = FLTX_PARITY_SAMPLES_PER_BUCKET; -#else -constexpr int kSamplesPerBucket = 1000; -#endif - -constexpr int kBucketCount = 4; -constexpr const char* kTypeName = "f128"; -constexpr std::array kBucketNames = -{ - "scalar_only", - "sparse_tail", - "dense_tail", - "edge_tail" -}; - -struct forced_path_scope -{ - explicit forced_path_scope(bool force_constexpr) noexcept - { - if (force_constexpr) - bl::_fltx_debug::set_forced_constexpr_path(); - else - bl::_fltx_debug::set_forced_runtime_path(); - } - - ~forced_path_scope() noexcept - { - bl::_fltx_debug::set_forced_runtime_path(); - } -}; - -template -auto eval_constexpr_path(Function&& function) -{ - forced_path_scope scope(true); - return function(); -} - -template -auto eval_runtime_path(Function&& function) -{ - forced_path_scope scope(false); - return function(); -} - -[[nodiscard]] std::uint64_t hash_name(const char* text) noexcept -{ - std::uint64_t hash = 1469598103934665603ull; - while (*text != '\0') - { - hash ^= static_cast(*text); - hash *= 1099511628211ull; - ++text; - } - return hash; -} - -[[nodiscard]] bl::mt19937_64 make_rng(const char* test_name, int bucket) noexcept -{ - return bl::mt19937_64{ - 0x94d049bb133111ebull ^ - hash_name(test_name) ^ - (0xbf58476d1ce4e5b9ull * static_cast(bucket + 1)) - }; -} - -[[nodiscard]] sample_type unit_01(bl::mt19937_64& rng) noexcept -{ - return bl::uniform_real_distribution{ - sample_type{ 0.0 }, - sample_type{ 1.0 } - }(rng); -} - -[[nodiscard]] double unit_01_double(bl::mt19937_64& rng) noexcept -{ - const std::uint64_t mantissa = (rng() >> 11) | 1ull; - return static_cast(mantissa) * (1.0 / 9007199254740992.0); -} - -[[nodiscard]] sample_type signed_unit(bl::mt19937_64& rng) noexcept -{ - const sample_type value = unit_01(rng); - if ((rng() & 1ull) == 0) - return value; - return sample_type{ -value }; -} - -[[nodiscard]] int random_int(bl::mt19937_64& rng, int lo, int hi) noexcept -{ - return bl::uniform_int_distribution(lo, hi)(rng); -} - -[[nodiscard]] long long random_long_long(bl::mt19937_64& rng, long long lo, long long hi) noexcept -{ - return bl::uniform_int_distribution(lo, hi)(rng); -} - -[[nodiscard]] double scaled_double(bl::mt19937_64& rng, int exp_lo, int exp_hi, bool force_positive = false) noexcept -{ - const int exponent = random_int(rng, exp_lo, exp_hi); - const double magnitude = std::ldexp(unit_01_double(rng), exponent); - if (force_positive) - return magnitude; - return (rng() & 1ull) == 0 ? magnitude : -magnitude; -} - -[[nodiscard]] sample_type scaled_value(bl::mt19937_64& rng, int exp_lo, int exp_hi, bool force_positive = false) -{ - const int exponent = random_int(rng, exp_lo, exp_hi); - const sample_type magnitude = - unit_01(rng) * sample_type{ std::ldexp(1.0, exponent) }; - if (force_positive) - return magnitude; - if ((rng() & 1ull) == 0) - return magnitude; - return sample_type{ -magnitude }; -} - -[[nodiscard]] value_type special_value(int index) -{ - switch (index & 7) - { - case 0: return value_type{ 0.0 }; - case 1: return value_type{ -0.0 }; - case 2: return value_type{ 1.0 }; - case 3: return value_type{ -1.0 }; - case 4: return std::numeric_limits::denorm_min(); - case 5: return std::numeric_limits::min(); - case 6: return std::numeric_limits::max(); - default: return std::numeric_limits::lowest(); - } -} - -[[nodiscard]] value_type special_classification_value(int index) -{ - switch (index & 7) - { - case 0: return value_type{ 0.0 }; - case 1: return value_type{ -0.0 }; - case 2: return std::numeric_limits::quiet_NaN(); - case 3: return std::numeric_limits::infinity(); - case 4: return -std::numeric_limits::infinity(); - case 5: return std::numeric_limits::denorm_min(); - case 6: return std::numeric_limits::min(); - default: return value_type{ -1.0 }; - } -} - -[[nodiscard]] sample_type compose_terms(bl::mt19937_64& rng, int term_count, int exp_lo, int exp_hi, int gap_lo, int gap_hi, bool positive_lead = false) -{ - int exponent = random_int(rng, exp_lo, exp_hi); - sample_type value = scaled_value(rng, exponent, exponent, positive_lead); - for (int index = 1; index < term_count; ++index) - { - exponent -= random_int(rng, gap_lo, gap_hi); - value += scaled_value(rng, exponent, exponent); - } - return value; -} - -[[nodiscard]] sample_type gen_any_value(bl::mt19937_64& rng, int bucket) -{ - if ((rng() & 31ull) == 0) - return sample_type{ special_value(bucket + static_cast(rng())) }; - - switch (bucket) - { - case 0: - return scaled_value(rng, -20, 20); - - case 1: - return compose_terms(rng, 2, -250, 250, 30, 60); - - case 2: - return compose_terms(rng, 2, -500, 500, 2, 20); - - default: - { - const int lead_exp = random_int(rng, -950, 950); - sample_type lead = scaled_value(rng, lead_exp, lead_exp); - const int tail_exp = lead_exp - random_int(rng, 40, 100); - sample_type tail = scaled_value(rng, tail_exp, tail_exp); - return (lead + tail) - lead; - } - } -} - -[[nodiscard]] sample_type gen_classification_value(bl::mt19937_64& rng, int bucket) -{ - if ((rng() & 3ull) == 0) - return sample_type{ special_classification_value(bucket + static_cast(rng())) }; - return gen_any_value(rng, bucket); -} - -[[nodiscard]] sample_type gen_nonzero_value(bl::mt19937_64& rng, int bucket) -{ - sample_type value = gen_any_value(rng, bucket); - if (bl::iszero(value)) - value = sample_type{ std::ldexp(1.0, -40 - bucket * 100) }; - return value; -} - -[[nodiscard]] sample_type gen_positive_nonzero_value(bl::mt19937_64& rng, int bucket) -{ - sample_type value = sample_type{ bl::abs(gen_nonzero_value(rng, bucket)) }; - value += sample_type{ std::numeric_limits::denorm_min() }; - return value; -} - -[[nodiscard]] sample_type gen_unit_value(bl::mt19937_64& rng, int bucket) -{ - sample_type value = signed_unit(rng) * sample_type{ bucket == 0 ? 0.75 : 0.95 }; - if (bucket >= 1) - value += signed_unit(rng) * sample_type{ std::ldexp(1.0, -40) }; - if (bucket >= 2) - value += signed_unit(rng) * sample_type{ std::ldexp(1.0, -80) }; - if (bucket >= 3) - value = (sample_type{ 1.0 } + value) - sample_type{ 1.0 }; - - if (value <= sample_type{ -1.0 }) - value = sample_type{ -0.9999999999999999 }; - if (value >= sample_type{ 1.0 }) - value = sample_type{ 0.9999999999999999 }; - return value; -} - -[[nodiscard]] sample_type gen_gt_minus_one_value(bl::mt19937_64& rng, int bucket) -{ - if ((rng() & 3ull) == 0) - return gen_unit_value(rng, bucket); - - sample_type value = gen_positive_nonzero_value(rng, bucket); - if ((rng() & 1ull) != 0) - value *= sample_type{ 0.125 }; - return value; -} - -[[nodiscard]] sample_type gen_ge_one_value(bl::mt19937_64& rng, int bucket) -{ - return sample_type{ 1.0 } + gen_positive_nonzero_value(rng, bucket); -} - -[[nodiscard]] sample_type gen_gamma_value(bl::mt19937_64& rng, int bucket) -{ - sample_type value{ static_cast(random_int(rng, -20, 20)) }; - value += signed_unit(rng); - if (bl::abs(value - sample_type{ std::round(static_cast(value)) }) < sample_type{ 0.125 } && value <= sample_type{ 0.0 }) - value += sample_type{ 0.375 }; - - if (bucket >= 1) - value += signed_unit(rng) * sample_type{ std::ldexp(1.0, -40) }; - if (bucket >= 2) - value += signed_unit(rng) * sample_type{ std::ldexp(1.0, -80) }; - if (bucket >= 3) - value = (sample_type{ 2.0 } + value) - sample_type{ 2.0 }; - - if (bl::iszero(value)) - value = sample_type{ 0.375 }; - - return value; -} - -[[nodiscard]] int gen_exponent_value(bl::mt19937_64& rng, int bucket) noexcept -{ - switch (bucket) - { - case 0: return random_int(rng, -32, 32); - case 1: return random_int(rng, -256, 256); - case 2: return random_int(rng, -1024, 1024); - default: return random_int(rng, -4096, 4096); - } -} - -[[nodiscard]] int gen_round_digits_value(bl::mt19937_64& rng, int bucket) noexcept -{ - switch (bucket) - { - case 0: return random_int(rng, -8, 8); - case 1: return random_int(rng, -24, 24); - case 2: return random_int(rng, -40, 40); - default: return random_int(rng, -60, 60); - } -} - -[[nodiscard]] int gen_pow10_exponent(bl::mt19937_64& rng, int bucket) noexcept -{ - switch (bucket) - { - case 0: return random_int(rng, -16, 16); - case 1: return random_int(rng, -64, 64); - case 2: return random_int(rng, -128, 128); - default: return random_int(rng, -300, 300); - } -} - -[[nodiscard]] std::string describe_bits(double value) -{ - std::ostringstream stream; - stream << std::hex << std::showbase << std::bit_cast(value); - return stream.str(); -} - -[[nodiscard]] std::string describe(const value_type& value) -{ - std::ostringstream stream; - stream << value - << " [decimal=" << bl::to_string(value, std::numeric_limits::max_digits10, false, true) - << ", hi=" << describe_bits(value.hi) - << ", lo=" << describe_bits(value.lo) << "]"; - return stream.str(); -} - -[[nodiscard]] std::string describe(long double value) -{ - std::ostringstream stream; - stream << std::setprecision(std::numeric_limits::max_digits10) << value; - return stream.str(); -} - -[[nodiscard]] std::string describe(double value) -{ - std::ostringstream stream; - stream << std::setprecision(17) << value - << " [decimal=" << std::setprecision(std::numeric_limits::max_digits10) << std::scientific << value - << std::defaultfloat << ", bits=" << describe_bits(value) << "]"; - return stream.str(); -} - -[[nodiscard]] std::string describe(bool value) -{ - return value ? "true" : "false"; -} - -template -[[nodiscard]] std::enable_if_t && !std::is_same_v, std::string> -describe(T value) -{ - return std::to_string(value); -} - -[[nodiscard]] bool string_equals(const char* lhs, const char* rhs) noexcept -{ - while (*lhs != '\0' && *rhs != '\0') - { - if (*lhs != *rhs) - return false; - - ++lhs; - ++rhs; - } - - return *lhs == *rhs; -} - -[[nodiscard]] double constexpr_dekker_max_safe_magnitude() noexcept -{ - constexpr double split = 134217729.0; - return std::numeric_limits::max() / split; -} - -[[nodiscard]] bool double_has_constexpr_dekker_overflow_risk(double value) noexcept -{ - return std::isfinite(value) && std::fabs(value) > constexpr_dekker_max_safe_magnitude(); -} - -[[nodiscard]] bool double_recip_estimate_has_constexpr_dekker_overflow_risk(double value) noexcept -{ - if (!std::isfinite(value) || value == 0.0) - return false; - - return std::fabs(value) < (1.0 / constexpr_dekker_max_safe_magnitude()); -} - -[[nodiscard]] bool value_has_constexpr_dekker_overflow_risk(const value_type& value) noexcept -{ - if (double_has_constexpr_dekker_overflow_risk(value.hi)) - return true; - - if (double_has_constexpr_dekker_overflow_risk(value.lo)) - return true; - - return false; -} - -[[nodiscard]] bool value_has_constexpr_recip_dekker_overflow_risk(const value_type& value) noexcept -{ - if (double_has_constexpr_dekker_overflow_risk(value.hi)) - return true; - - if (double_recip_estimate_has_constexpr_dekker_overflow_risk(value.hi)) - return true; - - return false; -} - -[[nodiscard]] bool value_has_constexpr_dekker_overflow_risk(const sample_type& value) noexcept -{ - if (double_has_constexpr_dekker_overflow_risk(value.hi)) - return true; - - if (double_has_constexpr_dekker_overflow_risk(value.lo)) - return true; - - return false; -} - -[[nodiscard]] bool value_has_constexpr_recip_dekker_overflow_risk(const sample_type& value) noexcept -{ - if (double_has_constexpr_dekker_overflow_risk(value.hi)) - return true; - - if (double_recip_estimate_has_constexpr_dekker_overflow_risk(value.hi)) - return true; - - return false; -} - -template -[[nodiscard]] bool value_has_constexpr_dekker_overflow_risk(const T&) noexcept -{ - return false; -} - -template -[[nodiscard]] bool value_has_constexpr_recip_dekker_overflow_risk(const T&) noexcept -{ - return false; -} - -template -[[nodiscard]] bool tuple_has_constexpr_dekker_overflow_risk(const std::tuple& values) noexcept -{ - return std::apply([](const auto&... item) - { - return (... || value_has_constexpr_dekker_overflow_risk(item)); - }, values); -} - -template -[[nodiscard]] bool tuple_has_constexpr_recip_dekker_overflow_risk(const std::tuple& values) noexcept -{ - return std::apply([](const auto&... item) - { - return (... || value_has_constexpr_recip_dekker_overflow_risk(item)); - }, values); -} - -[[nodiscard]] bool test_can_use_constexpr_dekker_multiply(const char* test_name) noexcept -{ - return - string_equals(test_name, "fma"); -} - -[[nodiscard]] bool test_can_use_constexpr_recip_dekker_multiply(const char* test_name) noexcept -{ - return - string_equals(test_name, "recip") || - string_equals(test_name, "inv"); -} - -template -[[nodiscard]] bool should_skip_constexpr_dekker_extreme_case( - const char* test_name, - const std::tuple& values) noexcept -{ - if (test_can_use_constexpr_dekker_multiply(test_name) && - tuple_has_constexpr_dekker_overflow_risk(values)) - { - return true; - } - - return - test_can_use_constexpr_recip_dekker_multiply(test_name) && - tuple_has_constexpr_recip_dekker_overflow_risk(values); -} - -[[nodiscard]] bool equal(const value_type& lhs, const value_type& rhs) noexcept -{ - return std::bit_cast(lhs.hi) == std::bit_cast(rhs.hi) && - std::bit_cast(lhs.lo) == std::bit_cast(rhs.lo); -} - -[[nodiscard]] bool equal(double lhs, double rhs) noexcept -{ - return std::bit_cast(lhs) == std::bit_cast(rhs); -} - -[[nodiscard]] bool equal(long double lhs, long double rhs) noexcept -{ - return lhs == rhs; -} - -[[nodiscard]] bool equal(bool lhs, bool rhs) noexcept -{ - return lhs == rhs; -} - -template -[[nodiscard]] std::enable_if_t && !std::is_same_v, bool> -equal(T lhs, T rhs) noexcept -{ - return lhs == rhs; -} - -template -[[nodiscard]] std::string describe_tuple_impl(const std::tuple& values, std::index_sequence) -{ - std::ostringstream stream; - stream << '('; - std::size_t index = 0; - ((stream << (index++ == 0 ? "" : ", ") << describe(std::get(values))), ...); - stream << ')'; - return stream.str(); -} - -template -[[nodiscard]] std::string describe_tuple(const std::tuple& values) -{ - return describe_tuple_impl(values, std::index_sequence_for{}); -} - -template -struct unary_out_result -{ - Value value; - int extra; -}; - -template -[[nodiscard]] bool equal(const unary_out_result& lhs, const unary_out_result& rhs) noexcept -{ - return equal(lhs.value, rhs.value) && lhs.extra == rhs.extra; -} - -template -[[nodiscard]] std::string describe(const unary_out_result& result) -{ - std::ostringstream stream; - stream << "{value=" << describe(result.value) << ", extra=" << result.extra << '}'; - return stream.str(); -} - -template -struct binary_out_result -{ - Value value; - int extra; -}; - -template -[[nodiscard]] bool equal(const binary_out_result& lhs, const binary_out_result& rhs) noexcept -{ - return equal(lhs.value, rhs.value) && lhs.extra == rhs.extra; -} - -template -[[nodiscard]] std::string describe(const binary_out_result& result) -{ - std::ostringstream stream; - stream << "{value=" << describe(result.value) << ", extra=" << result.extra << '}'; - return stream.str(); -} - -template -struct split_result -{ - Value fractional; - Value integral; -}; - -template -[[nodiscard]] bool equal(const split_result& lhs, const split_result& rhs) noexcept -{ - return equal(lhs.fractional, rhs.fractional) && equal(lhs.integral, rhs.integral); -} - -template -[[nodiscard]] std::string describe(const split_result& result) -{ - std::ostringstream stream; - stream << "{fractional=" << describe(result.fractional) << ", integral=" << describe(result.integral) << '}'; - return stream.str(); -} - -template -struct sincos_result -{ - bool ok; - Value sine; - Value cosine; -}; - -template -[[nodiscard]] bool equal(const sincos_result& lhs, const sincos_result& rhs) noexcept -{ - if (lhs.ok != rhs.ok) - return false; - if (!lhs.ok) - return true; - return equal(lhs.sine, rhs.sine) && equal(lhs.cosine, rhs.cosine); -} - -template -[[nodiscard]] std::string describe(const sincos_result& result) -{ - std::ostringstream stream; - stream << "{ok=" << describe(result.ok); - if (result.ok) - stream << ", sine=" << describe(result.sine) << ", cosine=" << describe(result.cosine); - stream << '}'; - return stream.str(); -} - -template -void run_tuple_test(const char* test_name, Generator&& generator, Function&& function) -{ - bl::_fltx_debug::set_forced_runtime_path(); - - int checked = 0; - for (int bucket = 0; bucket < kBucketCount; ++bucket) - { - auto rng = make_rng(test_name, bucket); - for (int iteration = 0; iteration < kSamplesPerBucket; ++iteration) - { - const auto args = generator(rng, bucket); - if (should_skip_constexpr_dekker_extreme_case(test_name, args)) - continue; - - const auto constexpr_result = eval_constexpr_path([&]() { return std::apply(function, args); }); - const auto runtime_result = eval_runtime_path([&]() { return std::apply(function, args); }); - const bool matches = equal(constexpr_result, runtime_result); - ++checked; - - if (!matches) - { - INFO("function=" << test_name << ", bucket=" << kBucketNames[static_cast(bucket)] << ", iteration=" << iteration); - INFO("args=" << describe_tuple(args)); - INFO("constexpr=" << describe(constexpr_result)); - INFO("runtime=" << describe(runtime_result)); - } - REQUIRE(matches); - } - } - - std::fprintf(stderr, "[fltx parity] %s %s passed (%d samples)\n", kTypeName, test_name, checked); - std::fflush(stderr); -} - -[[nodiscard]] auto gen_unary_any(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_classification(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_classification_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_nonzero(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_nonzero_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_positive(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_positive_nonzero_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_unit(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_unit_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_gt_minus_one(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_gt_minus_one_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_ge_one(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_ge_one_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_gamma(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_gamma_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_binary_any(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_binary_classification(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_classification_value(rng, bucket), gen_classification_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_binary_rhs_nonzero(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_nonzero_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_fma_args(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_any_value(rng, bucket), gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_ldexp_args(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_exponent_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_scalbln_args(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), static_cast(gen_exponent_value(rng, bucket)) }; -} - -[[nodiscard]] auto gen_round_digits_args(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_round_digits_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_pow10_args(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_pow10_exponent(rng, bucket) }; -} - -[[nodiscard]] auto gen_nexttoward_args(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), static_cast(scaled_double(rng, -300, 300)) }; -} - -[[nodiscard]] auto gen_clamp_args(bl::mt19937_64& rng, int bucket) -{ - sample_type a = gen_any_value(rng, bucket); - sample_type b = gen_any_value(rng, bucket); - if (b < a) - std::swap(a, b); - return std::tuple{ gen_any_value(rng, bucket), a, b }; -} - -[[nodiscard]] auto gen_pow_args(bl::mt19937_64& rng, int bucket) -{ - if ((rng() & 3ull) == 0) - { - sample_type base{ static_cast(random_int(rng, -16, 16)) }; - if (bl::iszero(base)) - base = sample_type{ -2.0 }; - if (base > sample_type{ 0.0 }) - base = -base; - sample_type exponent{ static_cast(random_int(rng, -12, 12)) }; - return std::tuple{ base, exponent }; - } - - return std::tuple{ gen_positive_nonzero_value(rng, bucket), gen_any_value(rng, bucket) }; -} - -#define FLTX_TEST_UNARY(NAME, GENERATOR) \ -TEST_CASE("f128 constexpr parity: " #NAME, "[fltx][constexpr][parity][f128][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](const value_type& x) { return bl::NAME(x); }); \ -} - -#define FLTX_TEST_BINARY(NAME, GENERATOR) \ -TEST_CASE("f128 constexpr parity: " #NAME, "[fltx][constexpr][parity][f128][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](const value_type& x, const value_type& y) { return bl::NAME(x, y); }); \ -} - -#define FLTX_TEST_BINARY_LONG(NAME, GENERATOR) \ -TEST_CASE("f128 constexpr parity: " #NAME, "[fltx][constexpr][parity][f128][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](const value_type& x, long double y) { return bl::NAME(x, y); }); \ -} - -#define FLTX_TEST_TERNARY(NAME, GENERATOR) \ -TEST_CASE("f128 constexpr parity: " #NAME, "[fltx][constexpr][parity][f128][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](const value_type& x, const value_type& y, const value_type& z) { return bl::NAME(x, y, z); }); \ -} - -#define FLTX_TEST_VALUE_INT(NAME, GENERATOR) \ -TEST_CASE("f128 constexpr parity: " #NAME, "[fltx][constexpr][parity][f128][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](const value_type& x, int exponent) { return bl::NAME(x, exponent); }); \ -} - -#define FLTX_TEST_VALUE_LONG(NAME, GENERATOR) \ -TEST_CASE("f128 constexpr parity: " #NAME, "[fltx][constexpr][parity][f128][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](const value_type& x, long exponent) { return bl::NAME(x, exponent); }); \ -} - -FLTX_TEST_UNARY(isnan, gen_unary_classification) -FLTX_TEST_UNARY(isinf, gen_unary_classification) -FLTX_TEST_UNARY(isfinite, gen_unary_classification) -FLTX_TEST_UNARY(iszero, gen_unary_any) -FLTX_TEST_UNARY(ispositive, gen_unary_any) -FLTX_TEST_UNARY(signbit, gen_unary_classification) -FLTX_TEST_UNARY(fpclassify, gen_unary_classification) -FLTX_TEST_UNARY(isnormal, gen_unary_classification) -FLTX_TEST_BINARY(isunordered, gen_binary_classification) -FLTX_TEST_BINARY(isgreater, gen_binary_any) -FLTX_TEST_BINARY(isgreaterequal, gen_binary_any) -FLTX_TEST_BINARY(isless, gen_binary_any) -FLTX_TEST_BINARY(islessequal, gen_binary_any) -FLTX_TEST_BINARY(islessgreater, gen_binary_any) -FLTX_TEST_UNARY(recip, gen_unary_nonzero) - -TEST_CASE("f128 constexpr parity: clamp", "[fltx][constexpr][parity][f128][clamp]") -{ - run_tuple_test("clamp", gen_clamp_args, [](const value_type& x, const value_type& lo, const value_type& hi) - { - return bl::clamp(x, lo, hi); - }); -} - -FLTX_TEST_UNARY(abs, gen_unary_any) -FLTX_TEST_UNARY(fabs, gen_unary_any) -FLTX_TEST_UNARY(floor, gen_unary_any) -FLTX_TEST_UNARY(ceil, gen_unary_any) -FLTX_TEST_UNARY(trunc, gen_unary_any) -FLTX_TEST_BINARY(fmod, gen_binary_rhs_nonzero) -FLTX_TEST_UNARY(round, gen_unary_any) -TEST_CASE("f128 constexpr parity: round_to_decimals", "[fltx][constexpr][parity][f128][round_to_decimals]") -{ - run_tuple_test("round_to_decimals", gen_round_digits_args, [](const value_type& x, int digits) - { - return bl::round_to_decimals(x, digits); - }); -} - -FLTX_TEST_BINARY(remainder, gen_binary_rhs_nonzero) -FLTX_TEST_UNARY(sqrt, gen_unary_positive) -FLTX_TEST_UNARY(nearbyint, gen_unary_any) -FLTX_TEST_UNARY(log_as_double, gen_unary_positive) -FLTX_TEST_VALUE_INT(ldexp, gen_ldexp_args) -FLTX_TEST_UNARY(exp, gen_unary_any) -FLTX_TEST_UNARY(exp2, gen_unary_any) -FLTX_TEST_UNARY(log, gen_unary_positive) -FLTX_TEST_UNARY(log2, gen_unary_positive) -FLTX_TEST_UNARY(log10, gen_unary_positive) -TEST_CASE("f128 constexpr parity: pow", "[fltx][constexpr][parity][f128][pow]") -{ - run_tuple_test("pow", gen_pow_args, [](const value_type& x, const value_type& y) { return bl::pow(x, y); }); -} - -TEST_CASE("f128 constexpr parity: pow10_128", "[fltx][constexpr][parity][f128][pow10_128]") -{ - run_tuple_test("pow10_128", gen_pow10_args, [](int exponent) { return bl::pow10_128(exponent); }); -} - -TEST_CASE("f128 constexpr parity: sincos", "[fltx][constexpr][parity][f128][sincos]") -{ - run_tuple_test("sincos", gen_unary_any, [](const value_type& x) - { - value_type sine = std::numeric_limits::quiet_NaN(); - value_type cosine = std::numeric_limits::quiet_NaN(); - const bool ok = bl::sincos(x, sine, cosine); - return sincos_result{ ok, sine, cosine }; - }); -} - -FLTX_TEST_UNARY(sin, gen_unary_any) -FLTX_TEST_UNARY(cos, gen_unary_any) -FLTX_TEST_UNARY(tan, gen_unary_any) -FLTX_TEST_BINARY(atan2, gen_binary_any) -FLTX_TEST_UNARY(atan, gen_unary_any) -FLTX_TEST_UNARY(asin, gen_unary_unit) -FLTX_TEST_UNARY(acos, gen_unary_unit) -FLTX_TEST_UNARY(expm1, gen_unary_any) -FLTX_TEST_UNARY(log1p, gen_unary_gt_minus_one) -FLTX_TEST_UNARY(sinh, gen_unary_any) -FLTX_TEST_UNARY(cosh, gen_unary_any) -FLTX_TEST_UNARY(tanh, gen_unary_any) -FLTX_TEST_UNARY(asinh, gen_unary_any) -FLTX_TEST_UNARY(acosh, gen_unary_ge_one) -FLTX_TEST_UNARY(atanh, gen_unary_unit) -FLTX_TEST_UNARY(cbrt, gen_unary_any) -FLTX_TEST_BINARY(hypot, gen_binary_any) -FLTX_TEST_UNARY(rint, gen_unary_any) -FLTX_TEST_UNARY(lround, gen_unary_any) -FLTX_TEST_UNARY(llround, gen_unary_any) -FLTX_TEST_UNARY(lrint, gen_unary_any) -FLTX_TEST_UNARY(llrint, gen_unary_any) - -TEST_CASE("f128 constexpr parity: remquo", "[fltx][constexpr][parity][f128][remquo]") -{ - run_tuple_test("remquo", gen_binary_rhs_nonzero, [](const value_type& x, const value_type& y) - { - int quotient = 0; - return binary_out_result{ bl::remquo(x, y, "ient), quotient }; - }); -} - -FLTX_TEST_TERNARY(fma, gen_fma_args) -FLTX_TEST_BINARY(fmin, gen_binary_any) -FLTX_TEST_BINARY(fmax, gen_binary_any) -FLTX_TEST_BINARY(fdim, gen_binary_any) -FLTX_TEST_BINARY(copysign, gen_binary_any) - -TEST_CASE("f128 constexpr parity: frexp", "[fltx][constexpr][parity][f128][frexp]") -{ - run_tuple_test("frexp", gen_unary_any, [](const value_type& x) - { - int exponent = 0; - return unary_out_result{ bl::frexp(x, &exponent), exponent }; - }); -} - -TEST_CASE("f128 constexpr parity: modf", "[fltx][constexpr][parity][f128][modf]") -{ - run_tuple_test("modf", gen_unary_any, [](const value_type& x) - { - value_type integral = std::numeric_limits::quiet_NaN(); - return split_result{ bl::modf(x, &integral), integral }; - }); -} - -FLTX_TEST_UNARY(ilogb, gen_unary_nonzero) -FLTX_TEST_UNARY(logb, gen_unary_nonzero) -FLTX_TEST_VALUE_INT(scalbn, gen_ldexp_args) -FLTX_TEST_VALUE_LONG(scalbln, gen_scalbln_args) -FLTX_TEST_BINARY(nextafter, gen_binary_any) -FLTX_TEST_BINARY_LONG(nexttoward, gen_nexttoward_args) -FLTX_TEST_UNARY(erfc, gen_unary_any) -FLTX_TEST_UNARY(erf, gen_unary_any) -FLTX_TEST_UNARY(lgamma, gen_unary_gamma) -FLTX_TEST_UNARY(tgamma, gen_unary_gamma) - -TEST_CASE("f128 constexpr parity harness switches forced path", "[fltx][constexpr][parity][f128][harness]") -{ - const bool forced_constexpr = eval_constexpr_path([]() - { - return bl::is_constant_evaluated(); - }); - - const bool forced_runtime = eval_runtime_path([]() - { - return bl::is_constant_evaluated(); - }); - - REQUIRE(forced_constexpr); - REQUIRE_FALSE(forced_runtime); -} - -#undef FLTX_TEST_UNARY -#undef FLTX_TEST_BINARY -#undef FLTX_TEST_BINARY_LONG -#undef FLTX_TEST_TERNARY -#undef FLTX_TEST_VALUE_INT -#undef FLTX_TEST_VALUE_LONG - -} // namespace diff --git a/tests/constexpr_parity/test_f256_constexpr_parity.cpp b/tests/constexpr_parity/test_f256_constexpr_parity.cpp deleted file mode 100644 index 0e50273..0000000 --- a/tests/constexpr_parity/test_f256_constexpr_parity.cpp +++ /dev/null @@ -1,1046 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -namespace -{ -using sample_type = bl::f256; -using value_type = bl::f256_s; - -#ifdef FLTX_PARITY_SAMPLES_PER_BUCKET -constexpr int kSamplesPerBucket = FLTX_PARITY_SAMPLES_PER_BUCKET; -#else -constexpr int kSamplesPerBucket = 1000; -#endif - -constexpr int kBucketCount = 4; -constexpr const char* kTypeName = "f256"; -constexpr std::array kBucketNames = -{ - "lead_only", - "one_tail", - "two_tails", - "three_tails" -}; - -struct forced_path_scope -{ - explicit forced_path_scope(bool force_constexpr) noexcept - { - if (force_constexpr) - bl::_fltx_debug::set_forced_constexpr_path(); - else - bl::_fltx_debug::set_forced_runtime_path(); - } - - ~forced_path_scope() noexcept - { - bl::_fltx_debug::set_forced_runtime_path(); - } -}; - -template -auto eval_constexpr_path(Function&& function) -{ - forced_path_scope scope(true); - return function(); -} - -template -auto eval_runtime_path(Function&& function) -{ - forced_path_scope scope(false); - return function(); -} - -[[nodiscard]] std::uint64_t hash_name(const char* text) noexcept -{ - std::uint64_t hash = 1469598103934665603ull; - while (*text != '\0') - { - hash ^= static_cast(*text); - hash *= 1099511628211ull; - ++text; - } - return hash; -} - -[[nodiscard]] bl::mt19937_64 make_rng(const char* test_name, int bucket) noexcept -{ - return bl::mt19937_64{ - 0xd6e8feb86659fd93ull ^ - hash_name(test_name) ^ - (0xbf58476d1ce4e5b9ull * static_cast(bucket + 1)) - }; -} - -[[nodiscard]] sample_type unit_01(bl::mt19937_64& rng) noexcept -{ - return bl::uniform_real_distribution{ - sample_type{ 0.0 }, - sample_type{ 1.0 } - }(rng); -} - -[[nodiscard]] double unit_01_double(bl::mt19937_64& rng) noexcept -{ - const std::uint64_t mantissa = (rng() >> 11) | 1ull; - return static_cast(mantissa) * (1.0 / 9007199254740992.0); -} - -[[nodiscard]] sample_type signed_unit(bl::mt19937_64& rng) noexcept -{ - const sample_type value = unit_01(rng); - if ((rng() & 1ull) == 0) - return value; - return sample_type{ -value }; -} - -[[nodiscard]] int random_int(bl::mt19937_64& rng, int lo, int hi) noexcept -{ - return bl::uniform_int_distribution(lo, hi)(rng); -} - -[[nodiscard]] double scaled_double(bl::mt19937_64& rng, int exp_lo, int exp_hi, bool force_positive = false) noexcept -{ - const int exponent = random_int(rng, exp_lo, exp_hi); - const double magnitude = std::ldexp(unit_01_double(rng), exponent); - if (force_positive) - return magnitude; - return (rng() & 1ull) == 0 ? magnitude : -magnitude; -} - -[[nodiscard]] sample_type scaled_value(bl::mt19937_64& rng, int exp_lo, int exp_hi, bool force_positive = false) -{ - const int exponent = random_int(rng, exp_lo, exp_hi); - const sample_type magnitude = - unit_01(rng) * sample_type{ std::ldexp(1.0, exponent) }; - if (force_positive) - return magnitude; - if ((rng() & 1ull) == 0) - return magnitude; - return sample_type{ -magnitude }; -} - -[[nodiscard]] value_type special_value(int index) -{ - switch (index & 7) - { - case 0: return value_type{ 0.0 }; - case 1: return value_type{ -0.0 }; - case 2: return value_type{ 1.0 }; - case 3: return value_type{ -1.0 }; - case 4: return std::numeric_limits::denorm_min(); - case 5: return std::numeric_limits::min(); - case 6: return std::numeric_limits::max(); - default: return std::numeric_limits::lowest(); - } -} - -[[nodiscard]] value_type special_classification_value(int index) -{ - switch (index & 7) - { - case 0: return value_type{ 0.0 }; - case 1: return value_type{ -0.0 }; - case 2: return std::numeric_limits::quiet_NaN(); - case 3: return std::numeric_limits::infinity(); - case 4: return -std::numeric_limits::infinity(); - case 5: return std::numeric_limits::denorm_min(); - case 6: return std::numeric_limits::min(); - default: return value_type{ -1.0 }; - } -} - -[[nodiscard]] constexpr value_type canonicalization_canary() noexcept -{ - value_type value{ - 1.0, - 0x1.0p-60, - -0x1.0p-120, - 0x1.23456789abcdfp-180 - }; - - if (!bl::is_constant_evaluated()) - { - const std::uint64_t bits = std::bit_cast(value.x3); - value.x3 = std::bit_cast(bits ^ 0x3full); - } - - return bl::detail::_f256::canonicalize_math_result(value); -} - -[[nodiscard]] sample_type compose_terms(bl::mt19937_64& rng, int term_count, int exp_lo, int exp_hi, int gap_lo, int gap_hi, bool positive_lead = false) -{ - int exponent = random_int(rng, exp_lo, exp_hi); - sample_type value = scaled_value(rng, exponent, exponent, positive_lead); - for (int index = 1; index < term_count; ++index) - { - exponent -= random_int(rng, gap_lo, gap_hi); - value += scaled_value(rng, exponent, exponent); - } - return value; -} - -[[nodiscard]] sample_type gen_any_value(bl::mt19937_64& rng, int bucket) -{ - if ((rng() & 31ull) == 0) - return sample_type{ special_value(bucket + static_cast(rng())) }; - - switch (bucket) - { - case 0: - return scaled_value(rng, -20, 20); - - case 1: - return compose_terms(rng, 2, -250, 250, 25, 55); - - case 2: - return compose_terms(rng, 3, -500, 500, 25, 55); - - default: - return compose_terms(rng, 4, -900, 900, 25, 60); - } -} - -[[nodiscard]] sample_type gen_classification_value(bl::mt19937_64& rng, int bucket) -{ - if ((rng() & 3ull) == 0) - return sample_type{ special_classification_value(bucket + static_cast(rng())) }; - return gen_any_value(rng, bucket); -} - -[[nodiscard]] sample_type gen_nonzero_value(bl::mt19937_64& rng, int bucket) -{ - sample_type value = gen_any_value(rng, bucket); - if (bl::iszero(value)) - value = sample_type{ std::ldexp(1.0, -40 - bucket * 100) }; - return value; -} - -[[nodiscard]] sample_type gen_positive_nonzero_value(bl::mt19937_64& rng, int bucket) -{ - sample_type value = sample_type{ bl::abs(gen_nonzero_value(rng, bucket)) }; - value += sample_type{ std::numeric_limits::denorm_min() }; - return value; -} - -[[nodiscard]] sample_type gen_unit_value(bl::mt19937_64& rng, int bucket) -{ - sample_type value = signed_unit(rng) * sample_type{ 0.95 }; - if (bucket >= 1) - value += signed_unit(rng) * sample_type{ std::ldexp(1.0, -40) }; - if (bucket >= 2) - value += signed_unit(rng) * sample_type{ std::ldexp(1.0, -80) }; - if (bucket >= 3) - value += signed_unit(rng) * sample_type{ std::ldexp(1.0, -120) }; - - if (value <= sample_type{ -1.0 }) - value = sample_type{ -0.9999999999999999 }; - if (value >= sample_type{ 1.0 }) - value = sample_type{ 0.9999999999999999 }; - return value; -} - -[[nodiscard]] sample_type gen_gt_minus_one_value(bl::mt19937_64& rng, int bucket) -{ - if ((rng() & 3ull) == 0) - return gen_unit_value(rng, bucket); - - sample_type value = gen_positive_nonzero_value(rng, bucket); - if ((rng() & 1ull) != 0) - value *= sample_type{ 0.125 }; - return value; -} - -[[nodiscard]] sample_type gen_ge_one_value(bl::mt19937_64& rng, int bucket) -{ - return sample_type{ 1.0 } + gen_positive_nonzero_value(rng, bucket); -} - -[[nodiscard]] sample_type gen_gamma_value(bl::mt19937_64& rng, int bucket) -{ - sample_type value{ static_cast(random_int(rng, -20, 20)) }; - value += signed_unit(rng); - if (bl::abs(value - sample_type{ std::round(static_cast(value)) }) < sample_type{ 0.125 } && value <= sample_type{ 0.0 }) - value += sample_type{ 0.375 }; - - if (bucket >= 1) - value += signed_unit(rng) * sample_type{ std::ldexp(1.0, -40) }; - if (bucket >= 2) - value += signed_unit(rng) * sample_type{ std::ldexp(1.0, -80) }; - if (bucket >= 3) - value += signed_unit(rng) * sample_type{ std::ldexp(1.0, -120) }; - - if (bl::iszero(value)) - value = sample_type{ 0.375 }; - - return value; -} - -[[nodiscard]] int gen_exponent_value(bl::mt19937_64& rng, int bucket) noexcept -{ - switch (bucket) - { - case 0: return random_int(rng, -32, 32); - case 1: return random_int(rng, -256, 256); - case 2: return random_int(rng, -1024, 1024); - default: return random_int(rng, -4096, 4096); - } -} - -[[nodiscard]] int gen_round_digits_value(bl::mt19937_64& rng, int bucket) noexcept -{ - switch (bucket) - { - case 0: return random_int(rng, -8, 8); - case 1: return random_int(rng, -24, 24); - case 2: return random_int(rng, -48, 48); - default: return random_int(rng, -80, 80); - } -} - -[[nodiscard]] int gen_pow10_exponent(bl::mt19937_64& rng, int bucket) noexcept -{ - switch (bucket) - { - case 0: return random_int(rng, -16, 16); - case 1: return random_int(rng, -64, 64); - case 2: return random_int(rng, -128, 128); - default: return random_int(rng, -300, 300); - } -} - -[[nodiscard]] std::string describe_bits(double value) -{ - std::ostringstream stream; - stream << std::hex << std::showbase << std::bit_cast(value); - return stream.str(); -} - -[[nodiscard]] std::string describe(const value_type& value) -{ - std::ostringstream stream; - stream << value - << " [decimal=" << bl::to_string(value, std::numeric_limits::max_digits10, false, true) - << ", x0=" << describe_bits(value.x0) - << ", x1=" << describe_bits(value.x1) - << ", x2=" << describe_bits(value.x2) - << ", x3=" << describe_bits(value.x3) << "]"; - return stream.str(); -} - -[[nodiscard]] std::string describe(long double value) -{ - std::ostringstream stream; - stream << std::setprecision(std::numeric_limits::max_digits10) << value; - return stream.str(); -} - -[[nodiscard]] std::string describe(double value) -{ - std::ostringstream stream; - stream << std::setprecision(17) << value - << " [decimal=" << std::setprecision(std::numeric_limits::max_digits10) << std::scientific << value - << std::defaultfloat << ", bits=" << describe_bits(value) << "]"; - return stream.str(); -} - -[[nodiscard]] std::string describe(bool value) -{ - return value ? "true" : "false"; -} - -template -[[nodiscard]] std::enable_if_t && !std::is_same_v, std::string> -describe(T value) -{ - return std::to_string(value); -} - -[[nodiscard]] bool string_equals(const char* lhs, const char* rhs) noexcept -{ - while (*lhs != '\0' && *rhs != '\0') - { - if (*lhs != *rhs) - return false; - - ++lhs; - ++rhs; - } - - return *lhs == *rhs; -} - -[[nodiscard]] double constexpr_dekker_max_safe_magnitude() noexcept -{ - constexpr double split = 134217729.0; - return std::numeric_limits::max() / split; -} - -[[nodiscard]] bool double_has_constexpr_dekker_overflow_risk(double value) noexcept -{ - return std::isfinite(value) && std::fabs(value) > constexpr_dekker_max_safe_magnitude(); -} - -[[nodiscard]] bool double_recip_estimate_has_constexpr_dekker_overflow_risk(double value) noexcept -{ - if (!std::isfinite(value) || value == 0.0) - return false; - - return std::fabs(value) < (1.0 / constexpr_dekker_max_safe_magnitude()); -} - -[[nodiscard]] bool value_has_constexpr_dekker_overflow_risk(const value_type& value) noexcept -{ - if (double_has_constexpr_dekker_overflow_risk(value.x0)) - return true; - - if (double_has_constexpr_dekker_overflow_risk(value.x1)) - return true; - - if (double_has_constexpr_dekker_overflow_risk(value.x2)) - return true; - - if (double_has_constexpr_dekker_overflow_risk(value.x3)) - return true; - - return false; -} - -[[nodiscard]] bool value_has_constexpr_recip_dekker_overflow_risk(const value_type& value) noexcept -{ - if (double_has_constexpr_dekker_overflow_risk(value.x0)) - return true; - - if (double_recip_estimate_has_constexpr_dekker_overflow_risk(value.x0)) - return true; - - return false; -} - -[[nodiscard]] bool value_has_constexpr_dekker_overflow_risk(const sample_type& value) noexcept -{ - if (double_has_constexpr_dekker_overflow_risk(value.x0)) - return true; - - if (double_has_constexpr_dekker_overflow_risk(value.x1)) - return true; - - if (double_has_constexpr_dekker_overflow_risk(value.x2)) - return true; - - if (double_has_constexpr_dekker_overflow_risk(value.x3)) - return true; - - return false; -} - -[[nodiscard]] bool value_has_constexpr_recip_dekker_overflow_risk(const sample_type& value) noexcept -{ - if (double_has_constexpr_dekker_overflow_risk(value.x0)) - return true; - - if (double_recip_estimate_has_constexpr_dekker_overflow_risk(value.x0)) - return true; - - return false; -} - -template -[[nodiscard]] bool value_has_constexpr_dekker_overflow_risk(const T&) noexcept -{ - return false; -} - -template -[[nodiscard]] bool value_has_constexpr_recip_dekker_overflow_risk(const T&) noexcept -{ - return false; -} - -template -[[nodiscard]] bool tuple_has_constexpr_dekker_overflow_risk(const std::tuple& values) noexcept -{ - return std::apply([](const auto&... item) - { - return (... || value_has_constexpr_dekker_overflow_risk(item)); - }, values); -} - -template -[[nodiscard]] bool tuple_has_constexpr_recip_dekker_overflow_risk(const std::tuple& values) noexcept -{ - return std::apply([](const auto&... item) - { - return (... || value_has_constexpr_recip_dekker_overflow_risk(item)); - }, values); -} - -[[nodiscard]] bool test_can_use_constexpr_dekker_multiply(const char* test_name) noexcept -{ - return - string_equals(test_name, "fma"); -} - -[[nodiscard]] bool test_can_use_constexpr_recip_dekker_multiply(const char* test_name) noexcept -{ - return - string_equals(test_name, "recip") || - string_equals(test_name, "inv"); -} - -template -[[nodiscard]] bool should_skip_constexpr_dekker_extreme_case( - const char* test_name, - const std::tuple& values) noexcept -{ - if (test_can_use_constexpr_dekker_multiply(test_name) && - tuple_has_constexpr_dekker_overflow_risk(values)) - { - return true; - } - - return - test_can_use_constexpr_recip_dekker_multiply(test_name) && - tuple_has_constexpr_recip_dekker_overflow_risk(values); -} - -[[nodiscard]] bool equal(const value_type& lhs, const value_type& rhs) noexcept -{ - return std::bit_cast(lhs.x0) == std::bit_cast(rhs.x0) && - std::bit_cast(lhs.x1) == std::bit_cast(rhs.x1) && - std::bit_cast(lhs.x2) == std::bit_cast(rhs.x2) && - std::bit_cast(lhs.x3) == std::bit_cast(rhs.x3); -} - -[[nodiscard]] bool equal(double lhs, double rhs) noexcept -{ - return std::bit_cast(lhs) == std::bit_cast(rhs); -} - -[[nodiscard]] bool equal(long double lhs, long double rhs) noexcept -{ - return lhs == rhs; -} - -[[nodiscard]] bool equal(bool lhs, bool rhs) noexcept -{ - return lhs == rhs; -} - -template -[[nodiscard]] std::enable_if_t && !std::is_same_v, bool> -equal(T lhs, T rhs) noexcept -{ - return lhs == rhs; -} - -template -[[nodiscard]] std::string describe_tuple_impl(const std::tuple& values, std::index_sequence) -{ - std::ostringstream stream; - stream << '('; - std::size_t index = 0; - ((stream << (index++ == 0 ? "" : ", ") << describe(std::get(values))), ...); - stream << ')'; - return stream.str(); -} - -template -[[nodiscard]] std::string describe_tuple(const std::tuple& values) -{ - return describe_tuple_impl(values, std::index_sequence_for{}); -} - -template -struct unary_out_result -{ - Value value; - int extra; -}; - -template -[[nodiscard]] bool equal(const unary_out_result& lhs, const unary_out_result& rhs) noexcept -{ - return equal(lhs.value, rhs.value) && lhs.extra == rhs.extra; -} - -template -[[nodiscard]] std::string describe(const unary_out_result& result) -{ - std::ostringstream stream; - stream << "{value=" << describe(result.value) << ", extra=" << result.extra << '}'; - return stream.str(); -} - -template -struct binary_out_result -{ - Value value; - int extra; -}; - -template -[[nodiscard]] bool equal(const binary_out_result& lhs, const binary_out_result& rhs) noexcept -{ - return equal(lhs.value, rhs.value) && lhs.extra == rhs.extra; -} - -template -[[nodiscard]] std::string describe(const binary_out_result& result) -{ - std::ostringstream stream; - stream << "{value=" << describe(result.value) << ", extra=" << result.extra << '}'; - return stream.str(); -} - -template -struct split_result -{ - Value fractional; - Value integral; -}; - -template -[[nodiscard]] bool equal(const split_result& lhs, const split_result& rhs) noexcept -{ - return equal(lhs.fractional, rhs.fractional) && equal(lhs.integral, rhs.integral); -} - -template -[[nodiscard]] std::string describe(const split_result& result) -{ - std::ostringstream stream; - stream << "{fractional=" << describe(result.fractional) << ", integral=" << describe(result.integral) << '}'; - return stream.str(); -} - -template -struct sincos_result -{ - bool ok; - Value sine; - Value cosine; -}; - -template -[[nodiscard]] bool equal(const sincos_result& lhs, const sincos_result& rhs) noexcept -{ - if (lhs.ok != rhs.ok) - return false; - if (!lhs.ok) - return true; - return equal(lhs.sine, rhs.sine) && equal(lhs.cosine, rhs.cosine); -} - -template -[[nodiscard]] std::string describe(const sincos_result& result) -{ - std::ostringstream stream; - stream << "{ok=" << describe(result.ok); - if (result.ok) - stream << ", sine=" << describe(result.sine) << ", cosine=" << describe(result.cosine); - stream << '}'; - return stream.str(); -} - -template -void run_tuple_test(const char* test_name, Generator&& generator, Function&& function) -{ - bl::_fltx_debug::set_forced_runtime_path(); - - int checked = 0; - for (int bucket = 0; bucket < kBucketCount; ++bucket) - { - auto rng = make_rng(test_name, bucket); - for (int iteration = 0; iteration < kSamplesPerBucket; ++iteration) - { - const auto args = generator(rng, bucket); - if (should_skip_constexpr_dekker_extreme_case(test_name, args)) - continue; - - const auto constexpr_result = eval_constexpr_path([&]() { return std::apply(function, args); }); - const auto runtime_result = eval_runtime_path([&]() { return std::apply(function, args); }); - const bool matches = equal(constexpr_result, runtime_result); - ++checked; - - if (!matches) - { - INFO("function=" << test_name << ", bucket=" << kBucketNames[static_cast(bucket)] << ", iteration=" << iteration); - INFO("args=" << describe_tuple(args)); - INFO("constexpr=" << describe(constexpr_result)); - INFO("runtime=" << describe(runtime_result)); - } - REQUIRE(matches); - } - } - - std::fprintf(stderr, "[fltx parity] %s %s passed (%d samples)\n", kTypeName, test_name, checked); - std::fflush(stderr); -} - -[[nodiscard]] auto gen_unary_any(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_classification(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_classification_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_nonzero(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_nonzero_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_positive(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_positive_nonzero_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_unit(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_unit_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_gt_minus_one(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_gt_minus_one_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_ge_one(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_ge_one_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_gamma(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_gamma_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_binary_any(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_binary_classification(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_classification_value(rng, bucket), gen_classification_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_binary_rhs_nonzero(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_nonzero_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_fma_args(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_any_value(rng, bucket), gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_ldexp_args(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_exponent_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_scalbln_args(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), static_cast(gen_exponent_value(rng, bucket)) }; -} - -[[nodiscard]] auto gen_round_digits_args(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_round_digits_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_pow10_args(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_pow10_exponent(rng, bucket) }; -} - -[[nodiscard]] auto gen_nexttoward_args(bl::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), static_cast(scaled_double(rng, -300, 300)) }; -} - -[[nodiscard]] auto gen_clamp_args(bl::mt19937_64& rng, int bucket) -{ - sample_type a = gen_any_value(rng, bucket); - sample_type b = gen_any_value(rng, bucket); - if (b < a) - std::swap(a, b); - return std::tuple{ gen_any_value(rng, bucket), a, b }; -} - -[[nodiscard]] auto gen_pow_args(bl::mt19937_64& rng, int bucket) -{ - if ((rng() & 3ull) == 0) - { - sample_type base{ static_cast(random_int(rng, -16, 16)) }; - if (bl::iszero(base)) - base = sample_type{ -2.0 }; - if (base > sample_type{ 0.0 }) - base = -base; - sample_type exponent{ static_cast(random_int(rng, -12, 12)) }; - return std::tuple{ base, exponent }; - } - - return std::tuple{ gen_positive_nonzero_value(rng, bucket), gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_pow_double_args(bl::mt19937_64& rng, int bucket) -{ - if ((rng() & 3ull) == 0) - { - sample_type base{ static_cast(random_int(rng, -16, 16)) }; - if (bl::iszero(base)) - base = sample_type{ -2.0 }; - if (base > sample_type{ 0.0 }) - base = -base; - return std::tuple{ base, static_cast(random_int(rng, -12, 12)) }; - } - - return std::tuple{ gen_positive_nonzero_value(rng, bucket), static_cast(scaled_double(rng, -20, 20)) }; -} - -#define FLTX_TEST_UNARY(NAME, GENERATOR) \ -TEST_CASE("f256 constexpr parity: " #NAME, "[fltx][constexpr][parity][f256][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](const value_type& x) { return bl::NAME(x); }); \ -} - -#define FLTX_TEST_BINARY(NAME, GENERATOR) \ -TEST_CASE("f256 constexpr parity: " #NAME, "[fltx][constexpr][parity][f256][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](const value_type& x, const value_type& y) { return bl::NAME(x, y); }); \ -} - -#define FLTX_TEST_BINARY_LONG(NAME, GENERATOR) \ -TEST_CASE("f256 constexpr parity: " #NAME, "[fltx][constexpr][parity][f256][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](const value_type& x, long double y) { return bl::NAME(x, y); }); \ -} - -#define FLTX_TEST_TERNARY(NAME, GENERATOR) \ -TEST_CASE("f256 constexpr parity: " #NAME, "[fltx][constexpr][parity][f256][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](const value_type& x, const value_type& y, const value_type& z) { return bl::NAME(x, y, z); }); \ -} - -#define FLTX_TEST_VALUE_INT(NAME, GENERATOR) \ -TEST_CASE("f256 constexpr parity: " #NAME, "[fltx][constexpr][parity][f256][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](const value_type& x, int exponent) { return bl::NAME(x, exponent); }); \ -} - -#define FLTX_TEST_VALUE_LONG(NAME, GENERATOR) \ -TEST_CASE("f256 constexpr parity: " #NAME, "[fltx][constexpr][parity][f256][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](const value_type& x, long exponent) { return bl::NAME(x, exponent); }); \ -} - -FLTX_TEST_UNARY(isnan, gen_unary_classification) -FLTX_TEST_UNARY(isinf, gen_unary_classification) -FLTX_TEST_UNARY(isfinite, gen_unary_classification) -FLTX_TEST_UNARY(iszero, gen_unary_any) -FLTX_TEST_UNARY(ispositive, gen_unary_any) -FLTX_TEST_UNARY(signbit, gen_unary_classification) -FLTX_TEST_UNARY(fpclassify, gen_unary_classification) -FLTX_TEST_UNARY(isnormal, gen_unary_classification) -FLTX_TEST_BINARY(isunordered, gen_binary_classification) -FLTX_TEST_BINARY(isgreater, gen_binary_any) -FLTX_TEST_BINARY(isgreaterequal, gen_binary_any) -FLTX_TEST_BINARY(isless, gen_binary_any) -FLTX_TEST_BINARY(islessequal, gen_binary_any) -FLTX_TEST_BINARY(islessgreater, gen_binary_any) -FLTX_TEST_UNARY(recip, gen_unary_nonzero) -FLTX_TEST_UNARY(inv, gen_unary_nonzero) - -TEST_CASE("f256 constexpr parity: clamp", "[fltx][constexpr][parity][f256][clamp]") -{ - run_tuple_test("clamp", gen_clamp_args, [](const value_type& x, const value_type& lo, const value_type& hi) - { - return bl::clamp(x, lo, hi); - }); -} - -FLTX_TEST_UNARY(abs, gen_unary_any) -FLTX_TEST_UNARY(fabs, gen_unary_any) -FLTX_TEST_UNARY(floor, gen_unary_any) -FLTX_TEST_UNARY(ceil, gen_unary_any) -FLTX_TEST_UNARY(trunc, gen_unary_any) -FLTX_TEST_BINARY(fmod, gen_binary_rhs_nonzero) -FLTX_TEST_UNARY(round, gen_unary_any) -TEST_CASE("f256 constexpr parity: round_to_decimals", "[fltx][constexpr][parity][f256][round_to_decimals]") -{ - run_tuple_test("round_to_decimals", gen_round_digits_args, [](const value_type& x, int digits) - { - return bl::round_to_decimals(x, digits); - }); -} - -FLTX_TEST_UNARY(sqrt, gen_unary_positive) -FLTX_TEST_UNARY(nearbyint, gen_unary_any) -FLTX_TEST_UNARY(log_as_double, gen_unary_positive) -FLTX_TEST_VALUE_INT(ldexp, gen_ldexp_args) -FLTX_TEST_UNARY(exp, gen_unary_any) -FLTX_TEST_UNARY(exp2, gen_unary_any) -FLTX_TEST_UNARY(log, gen_unary_positive) -FLTX_TEST_UNARY(log2, gen_unary_positive) -FLTX_TEST_UNARY(log10, gen_unary_positive) -TEST_CASE("f256 constexpr parity: pow", "[fltx][constexpr][parity][f256][pow]") -{ - run_tuple_test("pow", gen_pow_args, [](const value_type& x, const value_type& y) { return bl::pow(x, y); }); -} - -TEST_CASE("f256 constexpr parity: pow(double)", "[fltx][constexpr][parity][f256][pow_double]") -{ - run_tuple_test("pow_double", gen_pow_double_args, [](const value_type& x, double y) { return bl::pow(x, y); }); -} - -TEST_CASE("f256 constexpr parity: pow10_256", "[fltx][constexpr][parity][f256][pow10_256]") -{ - run_tuple_test("pow10_256", gen_pow10_args, [](int exponent) { return bl::pow10_256(exponent); }); -} - -TEST_CASE("f256 constexpr parity: sincos", "[fltx][constexpr][parity][f256][sincos]") -{ - run_tuple_test("sincos", gen_unary_any, [](const value_type& x) - { - value_type sine = std::numeric_limits::quiet_NaN(); - value_type cosine = std::numeric_limits::quiet_NaN(); - const bool ok = bl::sincos(x, sine, cosine); - return sincos_result{ ok, sine, cosine }; - }); -} - -FLTX_TEST_UNARY(sin, gen_unary_any) -FLTX_TEST_UNARY(cos, gen_unary_any) -FLTX_TEST_UNARY(tan, gen_unary_any) -FLTX_TEST_UNARY(atan, gen_unary_any) -FLTX_TEST_BINARY(atan2, gen_binary_any) -FLTX_TEST_UNARY(asin, gen_unary_unit) -FLTX_TEST_UNARY(acos, gen_unary_unit) -FLTX_TEST_UNARY(expm1, gen_unary_any) -FLTX_TEST_UNARY(log1p, gen_unary_gt_minus_one) -FLTX_TEST_UNARY(sinh, gen_unary_any) -FLTX_TEST_UNARY(cosh, gen_unary_any) -FLTX_TEST_UNARY(tanh, gen_unary_any) -FLTX_TEST_UNARY(asinh, gen_unary_any) -FLTX_TEST_UNARY(acosh, gen_unary_ge_one) -FLTX_TEST_UNARY(atanh, gen_unary_unit) -FLTX_TEST_UNARY(cbrt, gen_unary_any) -FLTX_TEST_BINARY(hypot, gen_binary_any) -FLTX_TEST_UNARY(rint, gen_unary_any) -FLTX_TEST_UNARY(lround, gen_unary_any) -FLTX_TEST_UNARY(llround, gen_unary_any) -FLTX_TEST_UNARY(lrint, gen_unary_any) -FLTX_TEST_UNARY(llrint, gen_unary_any) - -TEST_CASE("f256 constexpr parity: remquo", "[fltx][constexpr][parity][f256][remquo]") -{ - run_tuple_test("remquo", gen_binary_rhs_nonzero, [](const value_type& x, const value_type& y) - { - int quotient = 0; - return binary_out_result{ bl::remquo(x, y, "ient), quotient }; - }); -} - -FLTX_TEST_BINARY(remainder, gen_binary_rhs_nonzero) -FLTX_TEST_TERNARY(fma, gen_fma_args) -FLTX_TEST_BINARY(fmin, gen_binary_any) -FLTX_TEST_BINARY(fmax, gen_binary_any) -FLTX_TEST_BINARY(fdim, gen_binary_any) -FLTX_TEST_BINARY(copysign, gen_binary_any) - -TEST_CASE("f256 constexpr parity: frexp", "[fltx][constexpr][parity][f256][frexp]") -{ - run_tuple_test("frexp", gen_unary_any, [](const value_type& x) - { - int exponent = 0; - return unary_out_result{ bl::frexp(x, &exponent), exponent }; - }); -} - -TEST_CASE("f256 constexpr parity: modf", "[fltx][constexpr][parity][f256][modf]") -{ - run_tuple_test("modf", gen_unary_any, [](const value_type& x) - { - value_type integral = std::numeric_limits::quiet_NaN(); - return split_result{ bl::modf(x, &integral), integral }; - }); -} - -FLTX_TEST_UNARY(ilogb, gen_unary_nonzero) -FLTX_TEST_UNARY(logb, gen_unary_nonzero) -FLTX_TEST_VALUE_INT(scalbn, gen_ldexp_args) -FLTX_TEST_VALUE_LONG(scalbln, gen_scalbln_args) -FLTX_TEST_BINARY(nextafter, gen_binary_any) -FLTX_TEST_BINARY_LONG(nexttoward, gen_nexttoward_args) -FLTX_TEST_UNARY(erfc, gen_unary_any) -FLTX_TEST_UNARY(erf, gen_unary_any) -FLTX_TEST_UNARY(lgamma, gen_unary_gamma) -FLTX_TEST_UNARY(tgamma, gen_unary_gamma) - -TEST_CASE("f256 constexpr parity harness detects x3 low-bit differences", "[fltx][constexpr][parity][f256][harness]") -{ - const auto constexpr_result = eval_constexpr_path([]() - { - return canonicalization_canary(); - }); - - const auto runtime_result = eval_runtime_path([]() - { - return canonicalization_canary(); - }); - - INFO("constexpr=" << describe(constexpr_result)); - INFO("runtime=" << describe(runtime_result)); - - REQUIRE(equal(constexpr_result, runtime_result)); - std::fputs("[fltx parity] f256 harness low-bit canary passed\n", stderr); - std::fflush(stderr); -} - -TEST_CASE("f256 constexpr parity harness switches forced path", "[fltx][constexpr][parity][f256][harness]") -{ - const bool forced_constexpr = eval_constexpr_path([]() - { - return bl::is_constant_evaluated(); - }); - - const bool forced_runtime = eval_runtime_path([]() - { - return bl::is_constant_evaluated(); - }); - - REQUIRE(forced_constexpr); - REQUIRE_FALSE(forced_runtime); - std::fputs("[fltx parity] f256 harness forced path passed\n", stderr); - std::fflush(stderr); -} - -#undef FLTX_TEST_UNARY -#undef FLTX_TEST_BINARY -#undef FLTX_TEST_BINARY_LONG -#undef FLTX_TEST_TERNARY -#undef FLTX_TEST_VALUE_INT -#undef FLTX_TEST_VALUE_LONG - -} // namespace diff --git a/tests/constexpr_parity/test_f32_constexpr_parity.cpp b/tests/constexpr_parity/test_f32_constexpr_parity.cpp deleted file mode 100644 index 1e569af..0000000 --- a/tests/constexpr_parity/test_f32_constexpr_parity.cpp +++ /dev/null @@ -1,707 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace -{ -#ifdef FLTX_PARITY_SAMPLES_PER_BUCKET -constexpr int kSamplesPerBucket = FLTX_PARITY_SAMPLES_PER_BUCKET; -#else -constexpr int kSamplesPerBucket = 1000; -#endif - -constexpr int kBucketCount = 4; -constexpr const char* kTypeName = "f32"; -constexpr std::array kBucketNames = -{ - "simple", - "broad", - "integer_adjacent", - "edge_range" -}; - -struct forced_path_scope -{ - explicit forced_path_scope(bool force_constexpr) noexcept - { - if (force_constexpr) - bl::_fltx_debug::set_forced_constexpr_path(); - else - bl::_fltx_debug::set_forced_runtime_path(); - } - - ~forced_path_scope() noexcept - { - bl::_fltx_debug::set_forced_runtime_path(); - } -}; - -template -auto eval_constexpr_path(Function&& function) -{ - forced_path_scope scope(true); - return function(); -} - -template -auto eval_runtime_path(Function&& function) -{ - forced_path_scope scope(false); - return function(); -} - -[[nodiscard]] std::uint64_t hash_name(const char* text) noexcept -{ - std::uint64_t hash = 1469598103934665603ull; - while (*text != '\0') - { - hash ^= static_cast(*text); - hash *= 1099511628211ull; - ++text; - } - return hash; -} - -[[nodiscard]] std::mt19937_64 make_rng(const char* test_name, int bucket) noexcept -{ - return std::mt19937_64{ - 0x9e3779b97f4a7c15ull ^ - hash_name(test_name) ^ - (0xbf58476d1ce4e5b9ull * static_cast(bucket + 1)) - }; -} - -[[nodiscard]] float unit_01(std::mt19937_64& rng) noexcept -{ - const std::uint32_t mantissa = static_cast((rng() >> 40) | 1ull); - return static_cast(mantissa) * (1.0f / 16777216.0f); -} - -[[nodiscard]] float signed_unit(std::mt19937_64& rng) noexcept -{ - const float value = unit_01(rng); - return (rng() & 1ull) == 0 ? value : -value; -} - -[[nodiscard]] int random_int(std::mt19937_64& rng, int lo, int hi) noexcept -{ - return std::uniform_int_distribution(lo, hi)(rng); -} - -[[nodiscard]] long long random_long_long(std::mt19937_64& rng, long long lo, long long hi) noexcept -{ - return std::uniform_int_distribution(lo, hi)(rng); -} - -[[nodiscard]] float scaled_float(std::mt19937_64& rng, int exp_lo, int exp_hi, bool force_positive = false) noexcept -{ - const int exponent = random_int(rng, exp_lo, exp_hi); - const float magnitude = std::ldexp(unit_01(rng), exponent); - if (force_positive) - return magnitude; - return (rng() & 1ull) == 0 ? magnitude : -magnitude; -} - -[[nodiscard]] float special_f32(std::mt19937_64& rng, int bucket) noexcept -{ - static constexpr std::array special_values = - { - 0.0, - -0.0, - 1.0, - -1.0, - std::numeric_limits::denorm_min(), - -std::numeric_limits::denorm_min(), - std::numeric_limits::min(), - -std::numeric_limits::min() - }; - - if ((rng() & 31ull) != 0) - return std::numeric_limits::quiet_NaN(); - - const std::size_t index = static_cast((bucket * 3 + static_cast(rng() % special_values.size())) % static_cast(special_values.size())); - return special_values[index]; -} - -[[nodiscard]] float special_classification_f32(std::mt19937_64& rng, int bucket) noexcept -{ - static constexpr std::array special_values = - { - 0.0, - -0.0, - std::numeric_limits::quiet_NaN(), - std::numeric_limits::infinity(), - -std::numeric_limits::infinity(), - std::numeric_limits::denorm_min(), - -std::numeric_limits::denorm_min(), - -1.0 - }; - - const std::size_t index = static_cast((bucket * 5 + static_cast(rng() % special_values.size())) % static_cast(special_values.size())); - return special_values[index]; -} - -[[nodiscard]] float gen_any_value(std::mt19937_64& rng, int bucket) noexcept -{ - if ((rng() & 31ull) == 0) - { - const float value = special_f32(rng, bucket); - if (!std::isnan(value)) - return value; - } - - switch (bucket) - { - case 0: - return scaled_float(rng, -10, 10); - - case 1: - return scaled_float(rng, -60, 60); - - case 2: - { - const float base = static_cast(random_long_long(rng, -1000000, 1000000)); - const float delta = std::ldexp(signed_unit(rng), -random_int(rng, 4, 20)); - return base + delta; - } - - default: - { - if ((rng() & 1ull) == 0) - return scaled_float(rng, -149, -120); - return scaled_float(rng, 100, 127); - } - } -} - -[[nodiscard]] float gen_nonzero_value(std::mt19937_64& rng, int bucket) noexcept -{ - float value = gen_any_value(rng, bucket); - if (value == 0.0) - value = bucket == 3 ? std::numeric_limits::denorm_min() : std::ldexp(1.0f, -20 - bucket * 20); - return value; -} - -[[nodiscard]] float gen_positive_nonzero_value(std::mt19937_64& rng, int bucket) noexcept -{ - float value = std::fabs(gen_nonzero_value(rng, bucket)); - if (value == 0.0) - value = std::numeric_limits::denorm_min(); - return value; -} - -[[nodiscard]] float gen_unit_value(std::mt19937_64& rng, int bucket) noexcept -{ - switch (bucket) - { - case 0: - return signed_unit(rng) * 0.75; - case 1: - return signed_unit(rng) * 0.95; - case 2: - { - const float base = static_cast(random_int(rng, -1, 1)); - const float delta = std::ldexp(signed_unit(rng), -random_int(rng, 2, 12)); - float value = base + delta; - if (value <= -1.0) - value = -0.99999994f; - if (value >= 1.0) - value = 0.99999994f; - return value; - } - default: - return signed_unit(rng) * (1.0f - std::ldexp(1.0f, -20)); - } -} - -[[nodiscard]] float gen_gt_minus_one_value(std::mt19937_64& rng, int bucket) noexcept -{ - if ((rng() & 3ull) == 0) - return signed_unit(rng) * 0.99; - - float value = gen_positive_nonzero_value(rng, bucket); - if ((rng() & 1ull) != 0) - value *= 0.125; - return value; -} - -[[nodiscard]] float gen_ge_one_value(std::mt19937_64& rng, int bucket) noexcept -{ - return 1.0 + gen_positive_nonzero_value(rng, bucket); -} - -[[nodiscard]] float gen_gamma_value(std::mt19937_64& rng, int bucket) noexcept -{ - float value = static_cast(random_int(rng, -20, 20)) + signed_unit(rng); - if (std::fabs(value - std::round(value)) < 0.125 && value <= 0.0) - value += 0.375; - - if (bucket >= 2) - value += std::ldexp(signed_unit(rng), -random_int(rng, 4, 16)); - - if (value == 0.0) - value = 0.375; - - return value; -} - -[[nodiscard]] int gen_exponent_value(std::mt19937_64& rng, int bucket) noexcept -{ - switch (bucket) - { - case 0: return random_int(rng, -8, 8); - case 1: return random_int(rng, -96, 96); - case 2: return random_int(rng, -192, 192); - default: return random_int(rng, -512, 512); - } -} - -[[nodiscard]] int gen_pow10_exponent(std::mt19937_64& rng, int bucket) noexcept -{ - switch (bucket) - { - case 0: return random_int(rng, -8, 8); - case 1: return random_int(rng, -24, 24); - case 2: return random_int(rng, -60, 60); - default: return random_int(rng, -120, 120); - } -} - -[[nodiscard]] std::string describe_bits(float value) -{ - std::ostringstream stream; - stream << std::hex << std::showbase << std::bit_cast(value); - return stream.str(); -} - -[[nodiscard]] std::string describe(float value) -{ - std::ostringstream stream; - stream << std::setprecision(17) << value - << " [decimal=" << std::setprecision(std::numeric_limits::max_digits10) << std::scientific << value - << std::defaultfloat << ", bits=" << describe_bits(value) << "]"; - return stream.str(); -} - -[[nodiscard]] std::string describe(long double value) -{ - std::ostringstream stream; - stream << std::setprecision(std::numeric_limits::max_digits10) << value; - return stream.str(); -} - -[[nodiscard]] std::string describe(bool value) -{ - return value ? "true" : "false"; -} - -template -[[nodiscard]] std::enable_if_t && !std::is_same_v, std::string> -describe(T value) -{ - return std::to_string(value); -} - -[[nodiscard]] bool equal(float lhs, float rhs) noexcept -{ - return std::bit_cast(lhs) == std::bit_cast(rhs); -} - -[[nodiscard]] bool equal(long double lhs, long double rhs) noexcept -{ - return lhs == rhs; -} - -[[nodiscard]] bool equal(bool lhs, bool rhs) noexcept -{ - return lhs == rhs; -} - -template -[[nodiscard]] std::enable_if_t && !std::is_same_v, bool> -equal(T lhs, T rhs) noexcept -{ - return lhs == rhs; -} - -template -[[nodiscard]] std::string describe_tuple_impl(const std::tuple& values, std::index_sequence) -{ - std::ostringstream stream; - stream << '('; - std::size_t index = 0; - ((stream << (index++ == 0 ? "" : ", ") << describe(std::get(values))), ...); - stream << ')'; - return stream.str(); -} - -template -[[nodiscard]] std::string describe_tuple(const std::tuple& values) -{ - return describe_tuple_impl(values, std::index_sequence_for{}); -} - -template -struct unary_out_result -{ - Value value; - int extra; -}; - -template -[[nodiscard]] bool equal(const unary_out_result& lhs, const unary_out_result& rhs) noexcept -{ - return equal(lhs.value, rhs.value) && lhs.extra == rhs.extra; -} - -template -[[nodiscard]] std::string describe(const unary_out_result& result) -{ - std::ostringstream stream; - stream << "{value=" << describe(result.value) << ", extra=" << result.extra << '}'; - return stream.str(); -} - -template -struct binary_out_result -{ - Value value; - int extra; -}; - -template -[[nodiscard]] bool equal(const binary_out_result& lhs, const binary_out_result& rhs) noexcept -{ - return equal(lhs.value, rhs.value) && lhs.extra == rhs.extra; -} - -template -[[nodiscard]] std::string describe(const binary_out_result& result) -{ - std::ostringstream stream; - stream << "{value=" << describe(result.value) << ", extra=" << result.extra << '}'; - return stream.str(); -} - -template -struct split_result -{ - Value fractional; - Value integral; -}; - -template -[[nodiscard]] bool equal(const split_result& lhs, const split_result& rhs) noexcept -{ - return equal(lhs.fractional, rhs.fractional) && equal(lhs.integral, rhs.integral); -} - -template -[[nodiscard]] std::string describe(const split_result& result) -{ - std::ostringstream stream; - stream << "{fractional=" << describe(result.fractional) << ", integral=" << describe(result.integral) << '}'; - return stream.str(); -} - -template -void run_tuple_test(const char* test_name, Generator&& generator, Function&& function) -{ - bl::_fltx_debug::set_forced_runtime_path(); - - int checked = 0; - for (int bucket = 0; bucket < kBucketCount; ++bucket) - { - auto rng = make_rng(test_name, bucket); - for (int iteration = 0; iteration < kSamplesPerBucket; ++iteration) - { - const auto args = generator(rng, bucket); - const auto constexpr_result = eval_constexpr_path([&]() { return std::apply(function, args); }); - const auto runtime_result = eval_runtime_path([&]() { return std::apply(function, args); }); - const bool matches = equal(constexpr_result, runtime_result); - ++checked; - - if (!matches) - { - INFO("function=" << test_name << ", bucket=" << kBucketNames[static_cast(bucket)] << ", iteration=" << iteration); - INFO("args=" << describe_tuple(args)); - INFO("constexpr=" << describe(constexpr_result)); - INFO("runtime=" << describe(runtime_result)); - } - REQUIRE(matches); - } - } - - std::fprintf(stderr, "[fltx parity] %s %s passed (%d samples)\n", kTypeName, test_name, checked); - std::fflush(stderr); -} - -[[nodiscard]] auto gen_unary_any(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_classification(std::mt19937_64& rng, int bucket) -{ - if ((rng() & 3ull) == 0) - return std::tuple{ special_classification_f32(rng, bucket) }; - return std::tuple{ gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_nonzero(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_nonzero_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_positive(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_positive_nonzero_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_unit(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_unit_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_gt_minus_one(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_gt_minus_one_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_ge_one(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_ge_one_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_gamma(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_gamma_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_binary_any(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_binary_classification(std::mt19937_64& rng, int bucket) -{ - const float lhs = (rng() & 3ull) == 0 ? special_classification_f32(rng, bucket) : gen_any_value(rng, bucket); - const float rhs = (rng() & 3ull) == 0 ? special_classification_f32(rng, bucket + 1) : gen_any_value(rng, bucket); - return std::tuple{ lhs, rhs }; -} - -[[nodiscard]] auto gen_binary_rhs_nonzero(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_nonzero_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_binary_positive_any(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_positive_nonzero_value(rng, bucket), gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_binary_unit(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_unit_value(rng, bucket), gen_unit_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_fma_args(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_any_value(rng, bucket), gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_ldexp_args(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_exponent_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_scalbln_args(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), static_cast(gen_exponent_value(rng, bucket)) }; -} - -[[nodiscard]] auto gen_nexttoward_args(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), static_cast(gen_any_value(rng, bucket)) }; -} - -[[nodiscard]] auto gen_pow_args(std::mt19937_64& rng, int bucket) -{ - if ((rng() & 3ull) == 0) - { - float base = static_cast(random_int(rng, -16, 16)); - if (base == 0.0) - base = -2.0; - if (base > 0.0) - base = -base; - const float exponent = static_cast(random_int(rng, -12, 12)); - return std::tuple{ base, exponent }; - } - - return std::tuple{ gen_positive_nonzero_value(rng, bucket), gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_remquo_args(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_nonzero_value(rng, bucket) }; -} - -#define FLTX_TEST_UNARY(NAME, GENERATOR) \ -TEST_CASE("f32 constexpr parity: " #NAME, "[fltx][constexpr][parity][f32][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](float x) { return bl::NAME(x); }); \ -} - -#define FLTX_TEST_BINARY(NAME, GENERATOR) \ -TEST_CASE("f32 constexpr parity: " #NAME, "[fltx][constexpr][parity][f32][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](float x, float y) { return bl::NAME(x, y); }); \ -} - -#define FLTX_TEST_BINARY_LONG(NAME, GENERATOR) \ -TEST_CASE("f32 constexpr parity: " #NAME, "[fltx][constexpr][parity][f32][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](float x, long double y) { return bl::NAME(x, y); }); \ -} - -#define FLTX_TEST_TERNARY(NAME, GENERATOR) \ -TEST_CASE("f32 constexpr parity: " #NAME, "[fltx][constexpr][parity][f32][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](float x, float y, float z) { return bl::NAME(x, y, z); }); \ -} - -#define FLTX_TEST_UNARY_INT(NAME, GENERATOR) \ -TEST_CASE("f32 constexpr parity: " #NAME, "[fltx][constexpr][parity][f32][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](float x, int exponent) { return bl::NAME(x, exponent); }); \ -} - -#define FLTX_TEST_UNARY_LONG(NAME, GENERATOR) \ -TEST_CASE("f32 constexpr parity: " #NAME, "[fltx][constexpr][parity][f32][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](float x, long exponent) { return bl::NAME(x, exponent); }); \ -} - -FLTX_TEST_UNARY(abs, gen_unary_any) -FLTX_TEST_UNARY(fabs, gen_unary_any) -FLTX_TEST_UNARY(signbit, gen_unary_classification) -FLTX_TEST_UNARY(isnan, gen_unary_classification) -FLTX_TEST_UNARY(isinf, gen_unary_classification) -FLTX_TEST_UNARY(isfinite, gen_unary_classification) -FLTX_TEST_UNARY(iszero, gen_unary_any) -FLTX_TEST_UNARY(floor, gen_unary_any) -FLTX_TEST_UNARY(ceil, gen_unary_any) -FLTX_TEST_UNARY(trunc, gen_unary_any) -FLTX_TEST_UNARY(round, gen_unary_any) -FLTX_TEST_UNARY(nearbyint, gen_unary_any) -FLTX_TEST_UNARY(rint, gen_unary_any) -FLTX_TEST_UNARY(lround, gen_unary_any) -FLTX_TEST_UNARY(llround, gen_unary_any) -FLTX_TEST_UNARY(lrint, gen_unary_any) -FLTX_TEST_UNARY(llrint, gen_unary_any) -FLTX_TEST_BINARY(fmod, gen_binary_rhs_nonzero) -FLTX_TEST_BINARY(remainder, gen_binary_rhs_nonzero) - -TEST_CASE("f32 constexpr parity: remquo", "[fltx][constexpr][parity][f32][remquo]") -{ - run_tuple_test("remquo", gen_remquo_args, [](float x, float y) - { - int quotient = 0; - return binary_out_result{ bl::remquo(x, y, "ient), quotient }; - }); -} - -FLTX_TEST_TERNARY(fma, gen_fma_args) -FLTX_TEST_BINARY(fmin, gen_binary_any) -FLTX_TEST_BINARY(fmax, gen_binary_any) -FLTX_TEST_BINARY(fdim, gen_binary_any) -FLTX_TEST_BINARY(copysign, gen_binary_any) -FLTX_TEST_UNARY_INT(ldexp, gen_ldexp_args) -FLTX_TEST_UNARY_INT(scalbn, gen_ldexp_args) -FLTX_TEST_UNARY_LONG(scalbln, gen_scalbln_args) - -TEST_CASE("f32 constexpr parity: frexp", "[fltx][constexpr][parity][f32][frexp]") -{ - run_tuple_test("frexp", gen_unary_any, [](float x) - { - int exponent = 0; - return unary_out_result{ bl::frexp(x, &exponent), exponent }; - }); -} - -TEST_CASE("f32 constexpr parity: modf", "[fltx][constexpr][parity][f32][modf]") -{ - run_tuple_test("modf", gen_unary_any, [](float x) - { - float integral = 0.0; - return split_result{ bl::modf(x, &integral), integral }; - }); -} - -FLTX_TEST_UNARY(ilogb, gen_unary_nonzero) -FLTX_TEST_UNARY(logb, gen_unary_nonzero) -FLTX_TEST_BINARY(nextafter, gen_binary_any) -FLTX_TEST_BINARY_LONG(nexttoward, gen_nexttoward_args) -FLTX_TEST_UNARY(exp, gen_unary_any) -FLTX_TEST_UNARY(exp2, gen_unary_any) -FLTX_TEST_UNARY(expm1, gen_unary_any) -FLTX_TEST_UNARY(log, gen_unary_positive) -FLTX_TEST_UNARY(log2, gen_unary_positive) -FLTX_TEST_UNARY(log10, gen_unary_positive) -FLTX_TEST_UNARY(log1p, gen_unary_gt_minus_one) -FLTX_TEST_UNARY(sqrt, gen_unary_positive) -FLTX_TEST_UNARY(cbrt, gen_unary_any) -FLTX_TEST_BINARY(hypot, gen_binary_any) -FLTX_TEST_UNARY(sin, gen_unary_any) -FLTX_TEST_UNARY(cos, gen_unary_any) -FLTX_TEST_UNARY(tan, gen_unary_any) -FLTX_TEST_UNARY(atan, gen_unary_any) -FLTX_TEST_BINARY(atan2, gen_binary_any) -FLTX_TEST_UNARY(asin, gen_unary_unit) -FLTX_TEST_UNARY(acos, gen_unary_unit) -FLTX_TEST_UNARY(sinh, gen_unary_any) -FLTX_TEST_UNARY(cosh, gen_unary_any) -FLTX_TEST_UNARY(tanh, gen_unary_any) -FLTX_TEST_UNARY(asinh, gen_unary_any) -FLTX_TEST_UNARY(acosh, gen_unary_ge_one) -FLTX_TEST_UNARY(atanh, gen_unary_unit) - -TEST_CASE("f32 constexpr parity: pow", "[fltx][constexpr][parity][f32][pow]") -{ - run_tuple_test("pow", gen_pow_args, [](float x, float y) { return bl::pow(x, y); }); -} - -FLTX_TEST_UNARY(erf, gen_unary_any) -FLTX_TEST_UNARY(erfc, gen_unary_any) -FLTX_TEST_UNARY(lgamma, gen_unary_gamma) -FLTX_TEST_UNARY(tgamma, gen_unary_gamma) -FLTX_TEST_UNARY(fpclassify, gen_unary_classification) -FLTX_TEST_UNARY(isnormal, gen_unary_classification) -FLTX_TEST_BINARY(isunordered, gen_binary_classification) -FLTX_TEST_BINARY(isgreater, gen_binary_any) -FLTX_TEST_BINARY(isgreaterequal, gen_binary_any) -FLTX_TEST_BINARY(isless, gen_binary_any) -FLTX_TEST_BINARY(islessequal, gen_binary_any) -FLTX_TEST_BINARY(islessgreater, gen_binary_any) - -#undef FLTX_TEST_UNARY -#undef FLTX_TEST_BINARY -#undef FLTX_TEST_BINARY_LONG -#undef FLTX_TEST_TERNARY -#undef FLTX_TEST_UNARY_INT -#undef FLTX_TEST_UNARY_LONG - -} // namespace diff --git a/tests/constexpr_parity/test_f64_constexpr_parity.cpp b/tests/constexpr_parity/test_f64_constexpr_parity.cpp deleted file mode 100644 index e520266..0000000 --- a/tests/constexpr_parity/test_f64_constexpr_parity.cpp +++ /dev/null @@ -1,707 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace -{ -#ifdef FLTX_PARITY_SAMPLES_PER_BUCKET -constexpr int kSamplesPerBucket = FLTX_PARITY_SAMPLES_PER_BUCKET; -#else -constexpr int kSamplesPerBucket = 1000; -#endif - -constexpr int kBucketCount = 4; -constexpr const char* kTypeName = "f64"; -constexpr std::array kBucketNames = -{ - "simple", - "broad", - "integer_adjacent", - "edge_range" -}; - -struct forced_path_scope -{ - explicit forced_path_scope(bool force_constexpr) noexcept - { - if (force_constexpr) - bl::_fltx_debug::set_forced_constexpr_path(); - else - bl::_fltx_debug::set_forced_runtime_path(); - } - - ~forced_path_scope() noexcept - { - bl::_fltx_debug::set_forced_runtime_path(); - } -}; - -template -auto eval_constexpr_path(Function&& function) -{ - forced_path_scope scope(true); - return function(); -} - -template -auto eval_runtime_path(Function&& function) -{ - forced_path_scope scope(false); - return function(); -} - -[[nodiscard]] std::uint64_t hash_name(const char* text) noexcept -{ - std::uint64_t hash = 1469598103934665603ull; - while (*text != '\0') - { - hash ^= static_cast(*text); - hash *= 1099511628211ull; - ++text; - } - return hash; -} - -[[nodiscard]] std::mt19937_64 make_rng(const char* test_name, int bucket) noexcept -{ - return std::mt19937_64{ - 0x9e3779b97f4a7c15ull ^ - hash_name(test_name) ^ - (0xbf58476d1ce4e5b9ull * static_cast(bucket + 1)) - }; -} - -[[nodiscard]] double unit_01(std::mt19937_64& rng) noexcept -{ - const std::uint64_t mantissa = (rng() >> 11) | 1ull; - return static_cast(mantissa) * (1.0 / 9007199254740992.0); -} - -[[nodiscard]] double signed_unit(std::mt19937_64& rng) noexcept -{ - const double value = unit_01(rng); - return (rng() & 1ull) == 0 ? value : -value; -} - -[[nodiscard]] int random_int(std::mt19937_64& rng, int lo, int hi) noexcept -{ - return std::uniform_int_distribution(lo, hi)(rng); -} - -[[nodiscard]] long long random_long_long(std::mt19937_64& rng, long long lo, long long hi) noexcept -{ - return std::uniform_int_distribution(lo, hi)(rng); -} - -[[nodiscard]] double scaled_double(std::mt19937_64& rng, int exp_lo, int exp_hi, bool force_positive = false) noexcept -{ - const int exponent = random_int(rng, exp_lo, exp_hi); - const double magnitude = std::ldexp(unit_01(rng), exponent); - if (force_positive) - return magnitude; - return (rng() & 1ull) == 0 ? magnitude : -magnitude; -} - -[[nodiscard]] double special_f64(std::mt19937_64& rng, int bucket) noexcept -{ - static constexpr std::array special_values = - { - 0.0, - -0.0, - 1.0, - -1.0, - std::numeric_limits::denorm_min(), - -std::numeric_limits::denorm_min(), - std::numeric_limits::min(), - -std::numeric_limits::min() - }; - - if ((rng() & 31ull) != 0) - return std::numeric_limits::quiet_NaN(); - - const std::size_t index = static_cast((bucket * 3 + static_cast(rng() % special_values.size())) % static_cast(special_values.size())); - return special_values[index]; -} - -[[nodiscard]] double special_classification_f64(std::mt19937_64& rng, int bucket) noexcept -{ - static constexpr std::array special_values = - { - 0.0, - -0.0, - std::numeric_limits::quiet_NaN(), - std::numeric_limits::infinity(), - -std::numeric_limits::infinity(), - std::numeric_limits::denorm_min(), - -std::numeric_limits::denorm_min(), - -1.0 - }; - - const std::size_t index = static_cast((bucket * 5 + static_cast(rng() % special_values.size())) % static_cast(special_values.size())); - return special_values[index]; -} - -[[nodiscard]] double gen_any_value(std::mt19937_64& rng, int bucket) noexcept -{ - if ((rng() & 31ull) == 0) - { - const double value = special_f64(rng, bucket); - if (!std::isnan(value)) - return value; - } - - switch (bucket) - { - case 0: - return scaled_double(rng, -20, 20); - - case 1: - return scaled_double(rng, -250, 250); - - case 2: - { - const double base = static_cast(random_long_long(rng, -1000000, 1000000)); - const double delta = std::ldexp(signed_unit(rng), -random_int(rng, 10, 50)); - return base + delta; - } - - default: - { - if ((rng() & 1ull) == 0) - return scaled_double(rng, -1074, -1020); - return scaled_double(rng, 900, 1023); - } - } -} - -[[nodiscard]] double gen_nonzero_value(std::mt19937_64& rng, int bucket) noexcept -{ - double value = gen_any_value(rng, bucket); - if (value == 0.0) - value = bucket == 3 ? std::numeric_limits::denorm_min() : std::ldexp(1.0, -40 - bucket * 100); - return value; -} - -[[nodiscard]] double gen_positive_nonzero_value(std::mt19937_64& rng, int bucket) noexcept -{ - double value = std::fabs(gen_nonzero_value(rng, bucket)); - if (value == 0.0) - value = std::numeric_limits::denorm_min(); - return value; -} - -[[nodiscard]] double gen_unit_value(std::mt19937_64& rng, int bucket) noexcept -{ - switch (bucket) - { - case 0: - return signed_unit(rng) * 0.75; - case 1: - return signed_unit(rng) * 0.95; - case 2: - { - const double base = static_cast(random_int(rng, -1, 1)); - const double delta = std::ldexp(signed_unit(rng), -random_int(rng, 4, 40)); - double value = base + delta; - if (value <= -1.0) - value = -0.999999999999; - if (value >= 1.0) - value = 0.999999999999; - return value; - } - default: - return signed_unit(rng) * (1.0 - std::ldexp(1.0, -40)); - } -} - -[[nodiscard]] double gen_gt_minus_one_value(std::mt19937_64& rng, int bucket) noexcept -{ - if ((rng() & 3ull) == 0) - return signed_unit(rng) * 0.99; - - double value = gen_positive_nonzero_value(rng, bucket); - if ((rng() & 1ull) != 0) - value *= 0.125; - return value; -} - -[[nodiscard]] double gen_ge_one_value(std::mt19937_64& rng, int bucket) noexcept -{ - return 1.0 + gen_positive_nonzero_value(rng, bucket); -} - -[[nodiscard]] double gen_gamma_value(std::mt19937_64& rng, int bucket) noexcept -{ - double value = static_cast(random_int(rng, -20, 20)) + signed_unit(rng); - if (std::fabs(value - std::round(value)) < 0.125 && value <= 0.0) - value += 0.375; - - if (bucket >= 2) - value += std::ldexp(signed_unit(rng), -random_int(rng, 8, 40)); - - if (value == 0.0) - value = 0.375; - - return value; -} - -[[nodiscard]] int gen_exponent_value(std::mt19937_64& rng, int bucket) noexcept -{ - switch (bucket) - { - case 0: return random_int(rng, -32, 32); - case 1: return random_int(rng, -256, 256); - case 2: return random_int(rng, -1024, 1024); - default: return random_int(rng, -4096, 4096); - } -} - -[[nodiscard]] int gen_pow10_exponent(std::mt19937_64& rng, int bucket) noexcept -{ - switch (bucket) - { - case 0: return random_int(rng, -16, 16); - case 1: return random_int(rng, -64, 64); - case 2: return random_int(rng, -128, 128); - default: return random_int(rng, -300, 300); - } -} - -[[nodiscard]] std::string describe_bits(double value) -{ - std::ostringstream stream; - stream << std::hex << std::showbase << std::bit_cast(value); - return stream.str(); -} - -[[nodiscard]] std::string describe(double value) -{ - std::ostringstream stream; - stream << std::setprecision(17) << value - << " [decimal=" << std::setprecision(std::numeric_limits::max_digits10) << std::scientific << value - << std::defaultfloat << ", bits=" << describe_bits(value) << "]"; - return stream.str(); -} - -[[nodiscard]] std::string describe(long double value) -{ - std::ostringstream stream; - stream << std::setprecision(std::numeric_limits::max_digits10) << value; - return stream.str(); -} - -[[nodiscard]] std::string describe(bool value) -{ - return value ? "true" : "false"; -} - -template -[[nodiscard]] std::enable_if_t && !std::is_same_v, std::string> -describe(T value) -{ - return std::to_string(value); -} - -[[nodiscard]] bool equal(double lhs, double rhs) noexcept -{ - return std::bit_cast(lhs) == std::bit_cast(rhs); -} - -[[nodiscard]] bool equal(long double lhs, long double rhs) noexcept -{ - return lhs == rhs; -} - -[[nodiscard]] bool equal(bool lhs, bool rhs) noexcept -{ - return lhs == rhs; -} - -template -[[nodiscard]] std::enable_if_t && !std::is_same_v, bool> -equal(T lhs, T rhs) noexcept -{ - return lhs == rhs; -} - -template -[[nodiscard]] std::string describe_tuple_impl(const std::tuple& values, std::index_sequence) -{ - std::ostringstream stream; - stream << '('; - std::size_t index = 0; - ((stream << (index++ == 0 ? "" : ", ") << describe(std::get(values))), ...); - stream << ')'; - return stream.str(); -} - -template -[[nodiscard]] std::string describe_tuple(const std::tuple& values) -{ - return describe_tuple_impl(values, std::index_sequence_for{}); -} - -template -struct unary_out_result -{ - Value value; - int extra; -}; - -template -[[nodiscard]] bool equal(const unary_out_result& lhs, const unary_out_result& rhs) noexcept -{ - return equal(lhs.value, rhs.value) && lhs.extra == rhs.extra; -} - -template -[[nodiscard]] std::string describe(const unary_out_result& result) -{ - std::ostringstream stream; - stream << "{value=" << describe(result.value) << ", extra=" << result.extra << '}'; - return stream.str(); -} - -template -struct binary_out_result -{ - Value value; - int extra; -}; - -template -[[nodiscard]] bool equal(const binary_out_result& lhs, const binary_out_result& rhs) noexcept -{ - return equal(lhs.value, rhs.value) && lhs.extra == rhs.extra; -} - -template -[[nodiscard]] std::string describe(const binary_out_result& result) -{ - std::ostringstream stream; - stream << "{value=" << describe(result.value) << ", extra=" << result.extra << '}'; - return stream.str(); -} - -template -struct split_result -{ - Value fractional; - Value integral; -}; - -template -[[nodiscard]] bool equal(const split_result& lhs, const split_result& rhs) noexcept -{ - return equal(lhs.fractional, rhs.fractional) && equal(lhs.integral, rhs.integral); -} - -template -[[nodiscard]] std::string describe(const split_result& result) -{ - std::ostringstream stream; - stream << "{fractional=" << describe(result.fractional) << ", integral=" << describe(result.integral) << '}'; - return stream.str(); -} - -template -void run_tuple_test(const char* test_name, Generator&& generator, Function&& function) -{ - bl::_fltx_debug::set_forced_runtime_path(); - - int checked = 0; - for (int bucket = 0; bucket < kBucketCount; ++bucket) - { - auto rng = make_rng(test_name, bucket); - for (int iteration = 0; iteration < kSamplesPerBucket; ++iteration) - { - const auto args = generator(rng, bucket); - const auto constexpr_result = eval_constexpr_path([&]() { return std::apply(function, args); }); - const auto runtime_result = eval_runtime_path([&]() { return std::apply(function, args); }); - const bool matches = equal(constexpr_result, runtime_result); - ++checked; - - if (!matches) - { - INFO("function=" << test_name << ", bucket=" << kBucketNames[static_cast(bucket)] << ", iteration=" << iteration); - INFO("args=" << describe_tuple(args)); - INFO("constexpr=" << describe(constexpr_result)); - INFO("runtime=" << describe(runtime_result)); - } - REQUIRE(matches); - } - } - - std::fprintf(stderr, "[fltx parity] %s %s passed (%d samples)\n", kTypeName, test_name, checked); - std::fflush(stderr); -} - -[[nodiscard]] auto gen_unary_any(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_classification(std::mt19937_64& rng, int bucket) -{ - if ((rng() & 3ull) == 0) - return std::tuple{ special_classification_f64(rng, bucket) }; - return std::tuple{ gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_nonzero(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_nonzero_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_positive(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_positive_nonzero_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_unit(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_unit_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_gt_minus_one(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_gt_minus_one_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_ge_one(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_ge_one_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_unary_gamma(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_gamma_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_binary_any(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_binary_classification(std::mt19937_64& rng, int bucket) -{ - const double lhs = (rng() & 3ull) == 0 ? special_classification_f64(rng, bucket) : gen_any_value(rng, bucket); - const double rhs = (rng() & 3ull) == 0 ? special_classification_f64(rng, bucket + 1) : gen_any_value(rng, bucket); - return std::tuple{ lhs, rhs }; -} - -[[nodiscard]] auto gen_binary_rhs_nonzero(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_nonzero_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_binary_positive_any(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_positive_nonzero_value(rng, bucket), gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_binary_unit(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_unit_value(rng, bucket), gen_unit_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_fma_args(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_any_value(rng, bucket), gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_ldexp_args(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_exponent_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_scalbln_args(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), static_cast(gen_exponent_value(rng, bucket)) }; -} - -[[nodiscard]] auto gen_nexttoward_args(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), static_cast(gen_any_value(rng, bucket)) }; -} - -[[nodiscard]] auto gen_pow_args(std::mt19937_64& rng, int bucket) -{ - if ((rng() & 3ull) == 0) - { - double base = static_cast(random_int(rng, -16, 16)); - if (base == 0.0) - base = -2.0; - if (base > 0.0) - base = -base; - const double exponent = static_cast(random_int(rng, -12, 12)); - return std::tuple{ base, exponent }; - } - - return std::tuple{ gen_positive_nonzero_value(rng, bucket), gen_any_value(rng, bucket) }; -} - -[[nodiscard]] auto gen_remquo_args(std::mt19937_64& rng, int bucket) -{ - return std::tuple{ gen_any_value(rng, bucket), gen_nonzero_value(rng, bucket) }; -} - -#define FLTX_TEST_UNARY(NAME, GENERATOR) \ -TEST_CASE("f64 constexpr parity: " #NAME, "[fltx][constexpr][parity][f64][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](double x) { return bl::NAME(x); }); \ -} - -#define FLTX_TEST_BINARY(NAME, GENERATOR) \ -TEST_CASE("f64 constexpr parity: " #NAME, "[fltx][constexpr][parity][f64][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](double x, double y) { return bl::NAME(x, y); }); \ -} - -#define FLTX_TEST_BINARY_LONG(NAME, GENERATOR) \ -TEST_CASE("f64 constexpr parity: " #NAME, "[fltx][constexpr][parity][f64][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](double x, long double y) { return bl::NAME(x, y); }); \ -} - -#define FLTX_TEST_TERNARY(NAME, GENERATOR) \ -TEST_CASE("f64 constexpr parity: " #NAME, "[fltx][constexpr][parity][f64][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](double x, double y, double z) { return bl::NAME(x, y, z); }); \ -} - -#define FLTX_TEST_UNARY_INT(NAME, GENERATOR) \ -TEST_CASE("f64 constexpr parity: " #NAME, "[fltx][constexpr][parity][f64][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](double x, int exponent) { return bl::NAME(x, exponent); }); \ -} - -#define FLTX_TEST_UNARY_LONG(NAME, GENERATOR) \ -TEST_CASE("f64 constexpr parity: " #NAME, "[fltx][constexpr][parity][f64][" #NAME "]") \ -{ \ - run_tuple_test(#NAME, GENERATOR, [](double x, long exponent) { return bl::NAME(x, exponent); }); \ -} - -FLTX_TEST_UNARY(abs, gen_unary_any) -FLTX_TEST_UNARY(fabs, gen_unary_any) -FLTX_TEST_UNARY(signbit, gen_unary_classification) -FLTX_TEST_UNARY(isnan, gen_unary_classification) -FLTX_TEST_UNARY(isinf, gen_unary_classification) -FLTX_TEST_UNARY(isfinite, gen_unary_classification) -FLTX_TEST_UNARY(iszero, gen_unary_any) -FLTX_TEST_UNARY(floor, gen_unary_any) -FLTX_TEST_UNARY(ceil, gen_unary_any) -FLTX_TEST_UNARY(trunc, gen_unary_any) -FLTX_TEST_UNARY(round, gen_unary_any) -FLTX_TEST_UNARY(nearbyint, gen_unary_any) -FLTX_TEST_UNARY(rint, gen_unary_any) -FLTX_TEST_UNARY(lround, gen_unary_any) -FLTX_TEST_UNARY(llround, gen_unary_any) -FLTX_TEST_UNARY(lrint, gen_unary_any) -FLTX_TEST_UNARY(llrint, gen_unary_any) -FLTX_TEST_BINARY(fmod, gen_binary_rhs_nonzero) -FLTX_TEST_BINARY(remainder, gen_binary_rhs_nonzero) - -TEST_CASE("f64 constexpr parity: remquo", "[fltx][constexpr][parity][f64][remquo]") -{ - run_tuple_test("remquo", gen_remquo_args, [](double x, double y) - { - int quotient = 0; - return binary_out_result{ bl::remquo(x, y, "ient), quotient }; - }); -} - -FLTX_TEST_TERNARY(fma, gen_fma_args) -FLTX_TEST_BINARY(fmin, gen_binary_any) -FLTX_TEST_BINARY(fmax, gen_binary_any) -FLTX_TEST_BINARY(fdim, gen_binary_any) -FLTX_TEST_BINARY(copysign, gen_binary_any) -FLTX_TEST_UNARY_INT(ldexp, gen_ldexp_args) -FLTX_TEST_UNARY_INT(scalbn, gen_ldexp_args) -FLTX_TEST_UNARY_LONG(scalbln, gen_scalbln_args) - -TEST_CASE("f64 constexpr parity: frexp", "[fltx][constexpr][parity][f64][frexp]") -{ - run_tuple_test("frexp", gen_unary_any, [](double x) - { - int exponent = 0; - return unary_out_result{ bl::frexp(x, &exponent), exponent }; - }); -} - -TEST_CASE("f64 constexpr parity: modf", "[fltx][constexpr][parity][f64][modf]") -{ - run_tuple_test("modf", gen_unary_any, [](double x) - { - double integral = 0.0; - return split_result{ bl::modf(x, &integral), integral }; - }); -} - -FLTX_TEST_UNARY(ilogb, gen_unary_nonzero) -FLTX_TEST_UNARY(logb, gen_unary_nonzero) -FLTX_TEST_BINARY(nextafter, gen_binary_any) -FLTX_TEST_BINARY_LONG(nexttoward, gen_nexttoward_args) -FLTX_TEST_UNARY(exp, gen_unary_any) -FLTX_TEST_UNARY(exp2, gen_unary_any) -FLTX_TEST_UNARY(expm1, gen_unary_any) -FLTX_TEST_UNARY(log, gen_unary_positive) -FLTX_TEST_UNARY(log2, gen_unary_positive) -FLTX_TEST_UNARY(log10, gen_unary_positive) -FLTX_TEST_UNARY(log1p, gen_unary_gt_minus_one) -FLTX_TEST_UNARY(sqrt, gen_unary_positive) -FLTX_TEST_UNARY(cbrt, gen_unary_any) -FLTX_TEST_BINARY(hypot, gen_binary_any) -FLTX_TEST_UNARY(sin, gen_unary_any) -FLTX_TEST_UNARY(cos, gen_unary_any) -FLTX_TEST_UNARY(tan, gen_unary_any) -FLTX_TEST_UNARY(atan, gen_unary_any) -FLTX_TEST_BINARY(atan2, gen_binary_any) -FLTX_TEST_UNARY(asin, gen_unary_unit) -FLTX_TEST_UNARY(acos, gen_unary_unit) -FLTX_TEST_UNARY(sinh, gen_unary_any) -FLTX_TEST_UNARY(cosh, gen_unary_any) -FLTX_TEST_UNARY(tanh, gen_unary_any) -FLTX_TEST_UNARY(asinh, gen_unary_any) -FLTX_TEST_UNARY(acosh, gen_unary_ge_one) -FLTX_TEST_UNARY(atanh, gen_unary_unit) - -TEST_CASE("f64 constexpr parity: pow", "[fltx][constexpr][parity][f64][pow]") -{ - run_tuple_test("pow", gen_pow_args, [](double x, double y) { return bl::pow(x, y); }); -} - -FLTX_TEST_UNARY(erf, gen_unary_any) -FLTX_TEST_UNARY(erfc, gen_unary_any) -FLTX_TEST_UNARY(lgamma, gen_unary_gamma) -FLTX_TEST_UNARY(tgamma, gen_unary_gamma) -FLTX_TEST_UNARY(fpclassify, gen_unary_classification) -FLTX_TEST_UNARY(isnormal, gen_unary_classification) -FLTX_TEST_BINARY(isunordered, gen_binary_classification) -FLTX_TEST_BINARY(isgreater, gen_binary_any) -FLTX_TEST_BINARY(isgreaterequal, gen_binary_any) -FLTX_TEST_BINARY(isless, gen_binary_any) -FLTX_TEST_BINARY(islessequal, gen_binary_any) -FLTX_TEST_BINARY(islessgreater, gen_binary_any) - -#undef FLTX_TEST_UNARY -#undef FLTX_TEST_BINARY -#undef FLTX_TEST_BINARY_LONG -#undef FLTX_TEST_TERNARY -#undef FLTX_TEST_UNARY_INT -#undef FLTX_TEST_UNARY_LONG - -} // namespace diff --git a/tests/constexpr_parity/test_fltx_constexpr_mpfr.cpp b/tests/constexpr_parity/test_fltx_constexpr_mpfr.cpp deleted file mode 100644 index 1ad7cb4..0000000 --- a/tests/constexpr_parity/test_fltx_constexpr_mpfr.cpp +++ /dev/null @@ -1,555 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace -{ - using f128_ref = boost::multiprecision::number< - boost::multiprecision::mpfr_float_backend<192>, - boost::multiprecision::et_off>; - - using f256_ref = boost::multiprecision::number< - boost::multiprecision::mpfr_float_backend<320>, - boost::multiprecision::et_off>; - - enum class unary_op - { - sqrt, - exp, - expm1, - log, - log1p, - sin, - cos, - tan, - atan, - asin, - acos, - sinh, - cosh, - tanh, - asinh, - acosh, - atanh, - cbrt, - erf, - erfc, - lgamma, - tgamma - }; - - enum class binary_op - { - add, - subtract, - multiply, - divide, - fmod, - remainder, - pow, - atan2, - hypot - }; - - template - struct unary_case - { - const char* label = ""; - unary_op op = unary_op::sqrt; - Float input{}; - Float result{}; - }; - - template - struct binary_case - { - const char* label = ""; - binary_op op = binary_op::add; - Float lhs{}; - Float rhs{}; - Float result{}; - }; - - [[nodiscard]] constexpr bool real_constexpr_canary() - { - return bl::is_constant_evaluated(); - } - - static_assert(real_constexpr_canary()); - - template - [[nodiscard]] constexpr Float fp(double value) - { - return Float{ value }; - } - - template - [[nodiscard]] constexpr Float q(double numerator, double denominator) - { - return fp(numerator) / fp(denominator); - } - - template - [[nodiscard]] constexpr Float mixed(double whole, double numerator, double denominator) - { - return fp(whole) + q(numerator, denominator); - } - - template - [[nodiscard]] constexpr Float apply_constexpr(unary_op op, Float input) - { - switch (op) - { - case unary_op::sqrt: return bl::sqrt(input); - case unary_op::exp: return bl::exp(input); - case unary_op::expm1: return bl::expm1(input); - case unary_op::log: return bl::log(input); - case unary_op::log1p: return bl::log1p(input); - case unary_op::sin: return bl::sin(input); - case unary_op::cos: return bl::cos(input); - case unary_op::tan: return bl::tan(input); - case unary_op::atan: return bl::atan(input); - case unary_op::asin: return bl::asin(input); - case unary_op::acos: return bl::acos(input); - case unary_op::sinh: return bl::sinh(input); - case unary_op::cosh: return bl::cosh(input); - case unary_op::tanh: return bl::tanh(input); - case unary_op::asinh: return bl::asinh(input); - case unary_op::acosh: return bl::acosh(input); - case unary_op::atanh: return bl::atanh(input); - case unary_op::cbrt: return bl::cbrt(input); - case unary_op::erf: return bl::erf(input); - case unary_op::erfc: return bl::erfc(input); - case unary_op::lgamma: return bl::lgamma(input); - case unary_op::tgamma: return bl::tgamma(input); - } - - return std::numeric_limits::quiet_NaN(); - } - - template - [[nodiscard]] constexpr Float apply_constexpr(binary_op op, Float lhs, Float rhs) - { - switch (op) - { - case binary_op::add: return lhs + rhs; - case binary_op::subtract: return lhs - rhs; - case binary_op::multiply: return lhs * rhs; - case binary_op::divide: return lhs / rhs; - case binary_op::fmod: return bl::fmod(lhs, rhs); - case binary_op::remainder: return bl::remainder(lhs, rhs); - case binary_op::pow: return bl::pow(lhs, rhs); - case binary_op::atan2: return bl::atan2(lhs, rhs); - case binary_op::hypot: return bl::hypot(lhs, rhs); - } - - return std::numeric_limits::quiet_NaN(); - } - - template - [[nodiscard]] constexpr unary_case make_unary_case(const char* label, unary_op op, Float input) - { - return { label, op, input, apply_constexpr(op, input) }; - } - - template - [[nodiscard]] constexpr binary_case make_binary_case(const char* label, binary_op op, Float lhs, Float rhs) - { - return { label, op, lhs, rhs, apply_constexpr(op, lhs, rhs) }; - } - - template - [[nodiscard]] constexpr auto make_core_unary_cases() - { - return std::array{ - make_unary_case("sqrt tiny scaled", unary_op::sqrt, bl::ldexp(mixed(1.0, 1.0, 3.0), -80)), - make_unary_case("sqrt two", unary_op::sqrt, fp(2.0)), - make_unary_case("sqrt large scaled", unary_op::sqrt, bl::ldexp(mixed(1.0, 1.0, 5.0), 180)), - make_unary_case("exp negative", unary_op::exp, q(-5.0, 4.0)), - make_unary_case("exp positive", unary_op::exp, q(3.0, 2.0)), - make_unary_case("expm1 moderate negative", unary_op::expm1, q(-1.0, 2.0)), - make_unary_case("expm1 moderate positive", unary_op::expm1, q(1.0, 4.0)), - make_unary_case("log subunit", unary_op::log, q(1.0, 8.0)), - make_unary_case("log mixed", unary_op::log, mixed(1.0, 1.0, 7.0)), - make_unary_case("log1p negative", unary_op::log1p, q(-3.0, 4.0)), - make_unary_case("log1p positive", unary_op::log1p, q(5.0, 4.0)), - make_unary_case("sin reduced negative", unary_op::sin, q(-3.0, 4.0)), - make_unary_case("sin reduced positive", unary_op::sin, q(1.0, 2.0)), - make_unary_case("cos reduced negative", unary_op::cos, q(-3.0, 4.0)), - make_unary_case("cos reduced positive", unary_op::cos, q(1.0, 2.0)), - make_unary_case("tan reduced", unary_op::tan, q(1.0, 4.0)), - make_unary_case("atan negative", unary_op::atan, q(-5.0, 8.0)), - make_unary_case("atan positive", unary_op::atan, q(3.0, 4.0)) - }; - } - - template - [[nodiscard]] constexpr auto make_inverse_unary_cases() - { - return std::array{ - make_unary_case("asin negative", unary_op::asin, q(-1.0, 4.0)), - make_unary_case("asin positive", unary_op::asin, q(1.0, 2.0)), - make_unary_case("acos negative", unary_op::acos, q(-1.0, 4.0)), - make_unary_case("acos positive", unary_op::acos, q(1.0, 2.0)), - make_unary_case("asinh negative", unary_op::asinh, q(-5.0, 4.0)), - make_unary_case("asinh positive", unary_op::asinh, q(3.0, 4.0)), - make_unary_case("acosh near one", unary_op::acosh, mixed(1.0, 1.0, 16.0)), - make_unary_case("acosh moderate", unary_op::acosh, q(5.0, 2.0)), - make_unary_case("atanh negative", unary_op::atanh, q(-1.0, 4.0)), - make_unary_case("atanh positive", unary_op::atanh, q(1.0, 2.0)) - }; - } - - template - [[nodiscard]] constexpr auto make_hyperbolic_unary_cases() - { - return std::array{ - make_unary_case("sinh negative", unary_op::sinh, q(-3.0, 4.0)), - make_unary_case("sinh positive", unary_op::sinh, q(5.0, 4.0)), - make_unary_case("cosh small", unary_op::cosh, q(1.0, 2.0)), - make_unary_case("cosh moderate", unary_op::cosh, q(5.0, 4.0)), - make_unary_case("tanh negative", unary_op::tanh, q(-3.0, 4.0)), - make_unary_case("tanh positive", unary_op::tanh, q(5.0, 4.0)) - }; - } - - template - [[nodiscard]] constexpr auto make_special_unary_cases() - { - return std::array{ - make_unary_case("cbrt negative", unary_op::cbrt, fp(-27.0)), - make_unary_case("cbrt positive", unary_op::cbrt, q(5.0, 8.0)), - make_unary_case("erf negative", unary_op::erf, q(-5.0, 4.0)), - make_unary_case("erf positive", unary_op::erf, q(1.0, 2.0)), - make_unary_case("erfc negative", unary_op::erfc, q(-5.0, 4.0)), - make_unary_case("erfc positive", unary_op::erfc, q(1.0, 2.0)), - make_unary_case("lgamma small", unary_op::lgamma, q(1.0, 8.0)), - make_unary_case("lgamma moderate", unary_op::lgamma, q(15.0, 4.0)), - make_unary_case("tgamma half", unary_op::tgamma, q(1.0, 2.0)), - make_unary_case("tgamma moderate", unary_op::tgamma, q(9.0, 4.0)) - }; - } - - template - [[nodiscard]] constexpr auto make_arithmetic_binary_cases() - { - return std::array{ - make_binary_case("add cancellation", binary_op::add, mixed(1.0, 1.0, 7.0), q(-8.0, 7.0)), - make_binary_case("subtract close", binary_op::subtract, mixed(1.0, 1.0, 4096.0), fp(1.0)), - make_binary_case("multiply mixed", binary_op::multiply, mixed(3.0, 1.0, 7.0), q(-11.0, 13.0)), - make_binary_case("divide mixed", binary_op::divide, mixed(7.0, 2.0, 11.0), mixed(3.0, 1.0, 5.0)) - }; - } - - template - [[nodiscard]] constexpr auto make_reduction_binary_cases() - { - return std::array{ - make_binary_case("fmod simple", binary_op::fmod, mixed(5.0, 1.0, 4.0), fp(2.0)), - make_binary_case("fmod fractional divisor", binary_op::fmod, mixed(17.0, 1.0, 7.0), mixed(3.0, 1.0, 11.0)), - make_binary_case("fmod scaled quotient", binary_op::fmod, bl::ldexp(mixed(1.0, 3.0, 17.0), 48), mixed(5.0, 1.0, 8.0)), - make_binary_case("remainder simple", binary_op::remainder, mixed(17.0, 1.0, 7.0), mixed(3.0, 1.0, 11.0)) - }; - } - - template - [[nodiscard]] constexpr auto make_transcendental_binary_cases() - { - return std::array{ - make_binary_case("pow fractional", binary_op::pow, mixed(1.0, 1.0, 4.0), mixed(1.0, 1.0, 8.0)), - make_binary_case("pow reciprocal", binary_op::pow, q(5.0, 2.0), q(-3.0, 2.0)), - make_binary_case("atan2 quadrant one", binary_op::atan2, q(1.0, 2.0), mixed(1.0, 1.0, 4.0)), - make_binary_case("atan2 quadrant three", binary_op::atan2, q(-3.0, 4.0), q(-5.0, 4.0)), - make_binary_case("hypot 3 4", binary_op::hypot, fp(3.0), fp(4.0)), - make_binary_case("hypot fractional", binary_op::hypot, q(5.0, 8.0), q(7.0, 9.0)) - }; - } - - constexpr auto f128_core_unary_constexpr_cases = make_core_unary_cases(); - constexpr auto f128_inverse_unary_constexpr_cases = make_inverse_unary_cases(); - constexpr auto f128_hyperbolic_unary_constexpr_cases = make_hyperbolic_unary_cases(); - constexpr auto f128_special_unary_constexpr_cases = make_special_unary_cases(); - constexpr auto f128_arithmetic_binary_constexpr_cases = make_arithmetic_binary_cases(); - constexpr auto f128_reduction_binary_constexpr_cases = make_reduction_binary_cases(); - constexpr auto f128_transcendental_binary_constexpr_cases = make_transcendental_binary_cases(); - - constexpr auto f256_core_unary_constexpr_cases = make_core_unary_cases(); - constexpr auto f256_inverse_unary_constexpr_cases = make_inverse_unary_cases(); - constexpr auto f256_hyperbolic_unary_constexpr_cases = make_hyperbolic_unary_cases(); - constexpr auto f256_special_unary_constexpr_cases = make_special_unary_cases(); - constexpr auto f256_arithmetic_binary_constexpr_cases = make_arithmetic_binary_cases(); - constexpr auto f256_reduction_binary_constexpr_cases = make_reduction_binary_cases(); - constexpr auto f256_transcendental_binary_constexpr_cases = make_transcendental_binary_cases(); - - static_assert(f128_core_unary_constexpr_cases.size() > 0); - static_assert(f256_core_unary_constexpr_cases.size() == f128_core_unary_constexpr_cases.size()); - - template - [[nodiscard]] Ref abs_ref(const Ref& value) - { - return value < 0 ? -value : value; - } - - template - [[nodiscard]] Ref trunc_ref(const Ref& value) - { - return value < 0 ? boost::multiprecision::ceil(value) : boost::multiprecision::floor(value); - } - - template - [[nodiscard]] Ref round_to_even_ref(const Ref& value) - { - Ref rounded = boost::multiprecision::floor(value + Ref{ "0.5" }); - if ((rounded - value) == Ref{ "0.5" }) - { - const Ref half = boost::multiprecision::floor(rounded / Ref{ 2 }); - if (half * Ref{ 2 } != rounded) - rounded -= 1; - } - return rounded; - } - - template - [[nodiscard]] Ref fmod_ref(const Ref& lhs, const Ref& rhs) - { - return lhs - trunc_ref(lhs / rhs) * rhs; - } - - template - [[nodiscard]] Ref remainder_ref(const Ref& lhs, const Ref& rhs) - { - return lhs - round_to_even_ref(lhs / rhs) * rhs; - } - - template - [[nodiscard]] Ref cbrt_ref(const Ref& value) - { - if (value < 0) - return -boost::multiprecision::cbrt(-value); - return boost::multiprecision::cbrt(value); - } - - template - [[nodiscard]] Ref apply_ref(unary_op op, const Ref& input) - { - switch (op) - { - case unary_op::sqrt: return boost::multiprecision::sqrt(input); - case unary_op::exp: return boost::multiprecision::exp(input); - case unary_op::expm1: return boost::multiprecision::expm1(input); - case unary_op::log: return boost::multiprecision::log(input); - case unary_op::log1p: return boost::multiprecision::log1p(input); - case unary_op::sin: return boost::multiprecision::sin(input); - case unary_op::cos: return boost::multiprecision::cos(input); - case unary_op::tan: return boost::multiprecision::tan(input); - case unary_op::atan: return boost::multiprecision::atan(input); - case unary_op::asin: return boost::multiprecision::asin(input); - case unary_op::acos: return boost::multiprecision::acos(input); - case unary_op::sinh: return boost::multiprecision::sinh(input); - case unary_op::cosh: return boost::multiprecision::cosh(input); - case unary_op::tanh: return boost::multiprecision::tanh(input); - case unary_op::asinh: return boost::multiprecision::asinh(input); - case unary_op::acosh: return boost::multiprecision::acosh(input); - case unary_op::atanh: return boost::multiprecision::atanh(input); - case unary_op::cbrt: return cbrt_ref(input); - case unary_op::erf: return boost::multiprecision::erf(input); - case unary_op::erfc: return boost::multiprecision::erfc(input); - case unary_op::lgamma: return boost::multiprecision::lgamma(input); - case unary_op::tgamma: return boost::multiprecision::tgamma(input); - } - - return std::numeric_limits::quiet_NaN(); - } - - template - [[nodiscard]] Ref apply_ref(binary_op op, const Ref& lhs, const Ref& rhs) - { - switch (op) - { - case binary_op::add: return lhs + rhs; - case binary_op::subtract: return lhs - rhs; - case binary_op::multiply: return lhs * rhs; - case binary_op::divide: return lhs / rhs; - case binary_op::fmod: return fmod_ref(lhs, rhs); - case binary_op::remainder: return remainder_ref(lhs, rhs); - case binary_op::pow: return boost::multiprecision::pow(lhs, rhs); - case binary_op::atan2: return boost::multiprecision::atan2(lhs, rhs); - case binary_op::hypot: return boost::multiprecision::sqrt(lhs * lhs + rhs * rhs); - } - - return std::numeric_limits::quiet_NaN(); - } - - template - [[nodiscard]] Ref to_ref_exact(const bl::f128_s& value) - { - Ref sum = 0; - sum += Ref{ value.hi }; - sum += Ref{ value.lo }; - return sum; - } - - template - [[nodiscard]] Ref to_ref_exact(const bl::f256_s& value) - { - Ref sum = 0; - sum += Ref{ value.x0 }; - sum += Ref{ value.x1 }; - sum += Ref{ value.x2 }; - sum += Ref{ value.x3 }; - return sum; - } - - [[nodiscard]] std::string describe(const bl::f128_s& value) - { - std::ostringstream out; - out << std::hexfloat << "{ " << value.hi << ", " << value.lo << " }"; - return out.str(); - } - - [[nodiscard]] std::string describe(const bl::f256_s& value) - { - std::ostringstream out; - out << std::hexfloat - << "{ " << value.x0 << ", " << value.x1 << ", " << value.x2 << ", " << value.x3 << " }"; - return out.str(); - } - - template - [[nodiscard]] std::string describe_ref(const Ref& value) - { - std::ostringstream out; - out << std::scientific << std::setprecision(std::numeric_limits::digits10 + 8) << value; - return out.str(); - } - - template - [[nodiscard]] Ref decimal_epsilon(int digits) - { - Ref value = 1; - for (int i = 0; i < digits; ++i) - value /= 10; - return value; - } - - template - [[nodiscard]] constexpr int checked_digits() - { - if constexpr (std::is_same_v) - return std::numeric_limits::digits10 - 2; - else - return std::numeric_limits::digits10 - 4; - } - - template - [[nodiscard]] Ref tolerance_for(const Ref& expected, int digits) - { - Ref scale = abs_ref(expected); - if (scale < 1) - scale = 1; - return decimal_epsilon(digits) * scale; - } - - template - struct ref_for; - - template<> - struct ref_for - { - using type = f128_ref; - static constexpr const char* label = "f128"; - }; - - template<> - struct ref_for - { - using type = f256_ref; - static constexpr const char* label = "f256"; - }; - - template - void check_unary_constexpr_corpus(const std::array, N>& cases) - { - using ref = typename ref_for::type; - constexpr int digits = checked_digits(); - - for (const auto& test : cases) - { - const ref input = to_ref_exact(test.input); - const ref got = to_ref_exact(test.result); - const ref expected = apply_ref(test.op, input); - const ref diff = abs_ref(got - expected); - const ref tolerance = tolerance_for(expected, digits); - - INFO("type=" << ref_for::label); - INFO("case=" << test.label); - INFO("input=" << describe(test.input)); - INFO("constexpr result=" << describe(test.result)); - INFO("expected=" << describe_ref(expected)); - INFO("got=" << describe_ref(got)); - INFO("diff=" << describe_ref(diff)); - INFO("tolerance=" << describe_ref(tolerance)); - CHECK(diff <= tolerance); - } - } - - template - void check_binary_constexpr_corpus(const std::array, N>& cases) - { - using ref = typename ref_for::type; - constexpr int digits = checked_digits(); - - for (const auto& test : cases) - { - const ref lhs = to_ref_exact(test.lhs); - const ref rhs = to_ref_exact(test.rhs); - const ref got = to_ref_exact(test.result); - const ref expected = apply_ref(test.op, lhs, rhs); - const ref diff = abs_ref(got - expected); - const ref tolerance = tolerance_for(expected, digits); - - INFO("type=" << ref_for::label); - INFO("case=" << test.label); - INFO("lhs=" << describe(test.lhs)); - INFO("rhs=" << describe(test.rhs)); - INFO("constexpr result=" << describe(test.result)); - INFO("expected=" << describe_ref(expected)); - INFO("got=" << describe_ref(got)); - INFO("diff=" << describe_ref(diff)); - INFO("tolerance=" << describe_ref(tolerance)); - CHECK(diff <= tolerance); - } - } - -} // namespace - -TEST_CASE("real constexpr f128 libm corpus matches MPFR", "[fltx][constexpr][mpfr][f128]") -{ - check_unary_constexpr_corpus(f128_core_unary_constexpr_cases); - check_unary_constexpr_corpus(f128_inverse_unary_constexpr_cases); - check_unary_constexpr_corpus(f128_hyperbolic_unary_constexpr_cases); - check_unary_constexpr_corpus(f128_special_unary_constexpr_cases); - check_binary_constexpr_corpus(f128_arithmetic_binary_constexpr_cases); - check_binary_constexpr_corpus(f128_reduction_binary_constexpr_cases); - check_binary_constexpr_corpus(f128_transcendental_binary_constexpr_cases); -} - -TEST_CASE("real constexpr f256 libm corpus matches MPFR", "[fltx][constexpr][mpfr][f256]") -{ - check_unary_constexpr_corpus(f256_core_unary_constexpr_cases); - check_unary_constexpr_corpus(f256_inverse_unary_constexpr_cases); - check_unary_constexpr_corpus(f256_hyperbolic_unary_constexpr_cases); - check_unary_constexpr_corpus(f256_special_unary_constexpr_cases); - check_binary_constexpr_corpus(f256_arithmetic_binary_constexpr_cases); - check_binary_constexpr_corpus(f256_reduction_binary_constexpr_cases); - check_binary_constexpr_corpus(f256_transcendental_binary_constexpr_cases); -} diff --git a/tests/expressions/f256/CMakeLists.txt b/tests/expressions/f256/CMakeLists.txt deleted file mode 100644 index e017d17..0000000 --- a/tests/expressions/f256/CMakeLists.txt +++ /dev/null @@ -1,120 +0,0 @@ -if(TARGET f256_expression_compile_bench) - return() -endif() - -if(NOT DEFINED FLTX_INCLUDE_DIR) - get_filename_component(FLTX_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../include" ABSOLUTE) -endif() - -if(NOT COMMAND fltx_apply_msvc_timing_reports) - include("${CMAKE_CURRENT_LIST_DIR}/../../../cmake/fltxMsvcTiming.cmake") -endif() - -set(FLTX_F256_EXPRESSION_BENCH_REPEATS "3" CACHE STRING "Number of repeats for each f256 expression compile benchmark case.") -set(FLTX_F256_EXPRESSION_BENCH_COUNT "1000" CACHE STRING "Generated function count for the large f256 expression compile benchmark cases.") - -set(FLTX_F256_EXPRESSION_TARGET_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/target_generated") -file(MAKE_DIRECTORY "${FLTX_F256_EXPRESSION_TARGET_SOURCE_DIR}") -set_property(GLOBAL PROPERTY FLTX_F256_EXPRESSION_TARGET_SOURCES "") - -function(fltx_f256_expression_write_source _NAME _TEXT) - set(_PATH "${FLTX_F256_EXPRESSION_TARGET_SOURCE_DIR}/${_NAME}") - file(WRITE "${_PATH}" "${_TEXT}") - set_property(GLOBAL APPEND PROPERTY FLTX_F256_EXPRESSION_TARGET_SOURCES "${_PATH}") -endfunction() - -function(fltx_f256_expression_make_source _NAME _COUNT _KIND) - set(_TEXT "#include \"fltx/f256.h\"\n\n") - string(APPEND _TEXT "#if defined(_MSC_VER)\n") - string(APPEND _TEXT "#define FLTX_EXPR_NOINLINE __declspec(noinline)\n") - string(APPEND _TEXT "#elif defined(__GNUC__) || defined(__clang__)\n") - string(APPEND _TEXT "#define FLTX_EXPR_NOINLINE __attribute__((noinline))\n") - string(APPEND _TEXT "#else\n") - string(APPEND _TEXT "#define FLTX_EXPR_NOINLINE\n") - string(APPEND _TEXT "#endif\n\n") - string(APPEND _TEXT "namespace bench {\n") - - math(EXPR _LAST_INDEX "${_COUNT} - 1") - foreach(_I RANGE 0 ${_LAST_INDEX}) - if(_KIND STREQUAL "pass") - set(_EXPR "return a;") - elseif(_KIND STREQUAL "add") - set(_EXPR "return a + b;") - elseif(_KIND STREQUAL "muladdmul") - set(_EXPR "return a * b + c * d;") - elseif(_KIND STREQUAL "muladdmul_direct") - set(_EXPR "return bl::f256{ bl::detail::_f256_runtime::mul_add_mul(static_cast(a), static_cast(b), static_cast(c), static_cast(d)) };") - elseif(_KIND STREQUAL "eager_steps") - set(_EXPR "bl::f256 ab = a * b; bl::f256 cd = c * d; return ab + cd;") - elseif(_KIND STREQUAL "mixed") - math(EXPR _VARIANT "${_I} % 8") - if(_VARIANT EQUAL 0) - set(_EXPR "return a * b + c * d;") - elseif(_VARIANT EQUAL 1) - set(_EXPR "return (a * b + c) / (d + 1.0);") - elseif(_VARIANT EQUAL 2) - set(_EXPR "return a * 2.0 + b * 3.0 + c;") - elseif(_VARIANT EQUAL 3) - set(_EXPR "return (a + b + c) / d;") - elseif(_VARIANT EQUAL 4) - set(_EXPR "return a - b * c;") - elseif(_VARIANT EQUAL 5) - set(_EXPR "return (a * b - c * d) / (a - 2.0);") - elseif(_VARIANT EQUAL 6) - set(_EXPR "return (a * 0.5 + b * 0.25) - c;") - else() - set(_EXPR "return (a * b + c * d + a * c + b * d);") - endif() - else() - message(FATAL_ERROR "Unknown f256 expression compile-test kind '${_KIND}'.") - endif() - - string(APPEND _TEXT "FLTX_EXPR_NOINLINE bl::f256 ${_KIND}_${_COUNT}_${_I}(bl::f256 a, bl::f256 b, bl::f256 c, bl::f256 d) { ${_EXPR} }\n") - endforeach() - - string(APPEND _TEXT "}\n") - fltx_f256_expression_write_source("${_NAME}" "${_TEXT}") -endfunction() - -fltx_f256_expression_write_source("main.cpp" "int main() { return 0; }\n") -fltx_f256_expression_make_source("expr_pass_${FLTX_F256_EXPRESSION_BENCH_COUNT}.cpp" "${FLTX_F256_EXPRESSION_BENCH_COUNT}" "pass") -fltx_f256_expression_make_source("expr_add_${FLTX_F256_EXPRESSION_BENCH_COUNT}.cpp" "${FLTX_F256_EXPRESSION_BENCH_COUNT}" "add") -fltx_f256_expression_make_source("expr_muladdmul_100.cpp" 100 "muladdmul") -fltx_f256_expression_make_source("expr_muladdmul_${FLTX_F256_EXPRESSION_BENCH_COUNT}.cpp" "${FLTX_F256_EXPRESSION_BENCH_COUNT}" "muladdmul") -fltx_f256_expression_make_source("expr_muladdmul_direct_${FLTX_F256_EXPRESSION_BENCH_COUNT}.cpp" "${FLTX_F256_EXPRESSION_BENCH_COUNT}" "muladdmul_direct") -fltx_f256_expression_make_source("expr_eager_steps_${FLTX_F256_EXPRESSION_BENCH_COUNT}.cpp" "${FLTX_F256_EXPRESSION_BENCH_COUNT}" "eager_steps") -fltx_f256_expression_make_source("expr_mixed_${FLTX_F256_EXPRESSION_BENCH_COUNT}.cpp" "${FLTX_F256_EXPRESSION_BENCH_COUNT}" "mixed") - -get_property(FLTX_F256_EXPRESSION_TARGET_SOURCES GLOBAL PROPERTY FLTX_F256_EXPRESSION_TARGET_SOURCES) -add_executable(f256_expression_compile_tests EXCLUDE_FROM_ALL - ${FLTX_F256_EXPRESSION_TARGET_SOURCES} -) - -target_include_directories(f256_expression_compile_tests PRIVATE "${FLTX_INCLUDE_DIR}") -target_compile_features(f256_expression_compile_tests PRIVATE cxx_std_23) - -if(TARGET fltx::fltx) - target_link_libraries(f256_expression_compile_tests PRIVATE fltx::fltx) -elseif(TARGET fltx) - target_link_libraries(f256_expression_compile_tests PRIVATE fltx) -endif() - -if(MSVC) - target_compile_options(f256_expression_compile_tests PRIVATE /bigobj) -endif() - -fltx_apply_msvc_timing_reports(f256_expression_compile_tests) - -add_custom_target(f256_expression_compile_bench - COMMAND ${CMAKE_COMMAND} - -DFLTX_F256_EXPR_BENCH_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} - -DFLTX_F256_EXPR_BENCH_INCLUDE_DIR=${FLTX_INCLUDE_DIR} - -DFLTX_F256_EXPR_BENCH_COMPILER=${CMAKE_CXX_COMPILER} - -DFLTX_F256_EXPR_BENCH_COMPILER_ID=${CMAKE_CXX_COMPILER_ID} - -DFLTX_F256_EXPR_BENCH_REPEATS=${FLTX_F256_EXPRESSION_BENCH_REPEATS} - -DFLTX_F256_EXPR_BENCH_COUNT=${FLTX_F256_EXPRESSION_BENCH_COUNT} - -P ${CMAKE_CURRENT_LIST_DIR}/run_compile_bench.cmake - USES_TERMINAL - VERBATIM - COMMENT "Timing f256 expression compile cases" -) diff --git a/tests/expressions/f256/run_compile_bench.cmake b/tests/expressions/f256/run_compile_bench.cmake deleted file mode 100644 index 63a2509..0000000 --- a/tests/expressions/f256/run_compile_bench.cmake +++ /dev/null @@ -1,318 +0,0 @@ -if(NOT DEFINED FLTX_F256_EXPR_BENCH_BINARY_DIR) - message(FATAL_ERROR "FLTX_F256_EXPR_BENCH_BINARY_DIR is required.") -endif() - -if(NOT DEFINED FLTX_F256_EXPR_BENCH_INCLUDE_DIR) - message(FATAL_ERROR "FLTX_F256_EXPR_BENCH_INCLUDE_DIR is required.") -endif() - -if(NOT DEFINED FLTX_F256_EXPR_BENCH_COMPILER) - message(FATAL_ERROR "FLTX_F256_EXPR_BENCH_COMPILER is required.") -endif() - -if(NOT DEFINED FLTX_F256_EXPR_BENCH_COMPILER_ID) - set(FLTX_F256_EXPR_BENCH_COMPILER_ID "") -endif() - -if(NOT DEFINED FLTX_F256_EXPR_BENCH_REPEATS) - set(FLTX_F256_EXPR_BENCH_REPEATS 3) -endif() - -if(NOT DEFINED FLTX_F256_EXPR_BENCH_COUNT) - set(FLTX_F256_EXPR_BENCH_COUNT 1000) -endif() - -set(FLTX_F256_EXPR_BENCH_SOURCE_DIR "${FLTX_F256_EXPR_BENCH_BINARY_DIR}/generated") -set(FLTX_F256_EXPR_BENCH_OBJECT_DIR "${FLTX_F256_EXPR_BENCH_BINARY_DIR}/objects") -file(MAKE_DIRECTORY "${FLTX_F256_EXPR_BENCH_SOURCE_DIR}") -file(MAKE_DIRECTORY "${FLTX_F256_EXPR_BENCH_OBJECT_DIR}") - -function(fltx_f256_write_source name text) - file(WRITE "${FLTX_F256_EXPR_BENCH_SOURCE_DIR}/${name}" "${text}") -endfunction() - -function(fltx_f256_make_expr_source name count kind) - set(text "#include \"fltx/f256.h\"\n\n") - string(APPEND text "#if defined(_MSC_VER)\n") - string(APPEND text "#define FLTX_EXPR_NOINLINE __declspec(noinline)\n") - string(APPEND text "#elif defined(__GNUC__) || defined(__clang__)\n") - string(APPEND text "#define FLTX_EXPR_NOINLINE __attribute__((noinline))\n") - string(APPEND text "#else\n") - string(APPEND text "#define FLTX_EXPR_NOINLINE\n") - string(APPEND text "#endif\n\n") - string(APPEND text "namespace bench {\n") - - math(EXPR last_index "${count} - 1") - foreach(i RANGE 0 ${last_index}) - if(kind STREQUAL "pass") - set(expr "return a;") - elseif(kind STREQUAL "add") - set(expr "return a + b;") - elseif(kind STREQUAL "muladdmul") - set(expr "return a * b + c * d;") - elseif(kind STREQUAL "muladdmul_direct") - set(expr "return bl::f256{ bl::detail::_f256_runtime::mul_add_mul(static_cast(a), static_cast(b), static_cast(c), static_cast(d)) };") - elseif(kind STREQUAL "eager_steps") - set(expr "bl::f256 ab = a * b; bl::f256 cd = c * d; return ab + cd;") - elseif(kind STREQUAL "mixed") - math(EXPR variant "${i} % 8") - if(variant EQUAL 0) - set(expr "return a * b + c * d;") - elseif(variant EQUAL 1) - set(expr "return (a * b + c) / (d + 1.0);") - elseif(variant EQUAL 2) - set(expr "return a * 2.0 + b * 3.0 + c;") - elseif(variant EQUAL 3) - set(expr "return (a + b + c) / d;") - elseif(variant EQUAL 4) - set(expr "return a - b * c;") - elseif(variant EQUAL 5) - set(expr "return (a * b - c * d) / (a - 2.0);") - elseif(variant EQUAL 6) - set(expr "return (a * 0.5 + b * 0.25) - c;") - else() - set(expr "return (a * b + c * d + a * c + b * d);") - endif() - else() - message(FATAL_ERROR "Unknown expression source kind '${kind}'.") - endif() - - string(APPEND text "FLTX_EXPR_NOINLINE bl::f256 ${kind}_${i}(bl::f256 a, bl::f256 b, bl::f256 c, bl::f256 d) { ${expr} }\n") - endforeach() - - string(APPEND text "}\n") - fltx_f256_write_source("${name}" "${text}") -endfunction() - -fltx_f256_write_source("empty.cpp" "int main() { return 0; }\n") -fltx_f256_write_source("inc_f128.cpp" "#include \"fltx/f128.h\"\nint main() { return 0; }\n") -fltx_f256_write_source("inc_f256.cpp" "#include \"fltx/f256.h\"\nint main() { return 0; }\n") -fltx_f256_write_source("inc_f128_math.cpp" "#include \"fltx/f128_math.h\"\nint main() { return 0; }\n") -fltx_f256_write_source("inc_f256_math.cpp" "#include \"fltx/f256_math.h\"\nint main() { return 0; }\n") -fltx_f256_write_source("inc_fltx_math.cpp" "#include \"fltx/math.h\"\nint main() { return 0; }\n") -fltx_f256_write_source("inc_f256_io.cpp" "#include \"fltx/f256_io.h\"\nint main() { return 0; }\n") - -fltx_f256_make_expr_source("expr_pass_${FLTX_F256_EXPR_BENCH_COUNT}.cpp" "${FLTX_F256_EXPR_BENCH_COUNT}" "pass") -fltx_f256_make_expr_source("expr_add_${FLTX_F256_EXPR_BENCH_COUNT}.cpp" "${FLTX_F256_EXPR_BENCH_COUNT}" "add") -fltx_f256_make_expr_source("expr_muladdmul_100.cpp" 100 "muladdmul") -fltx_f256_make_expr_source("expr_muladdmul_${FLTX_F256_EXPR_BENCH_COUNT}.cpp" "${FLTX_F256_EXPR_BENCH_COUNT}" "muladdmul") -fltx_f256_make_expr_source("expr_muladdmul_direct_${FLTX_F256_EXPR_BENCH_COUNT}.cpp" "${FLTX_F256_EXPR_BENCH_COUNT}" "muladdmul_direct") -fltx_f256_make_expr_source("expr_eager_steps_${FLTX_F256_EXPR_BENCH_COUNT}.cpp" "${FLTX_F256_EXPR_BENCH_COUNT}" "eager_steps") -fltx_f256_make_expr_source("expr_mixed_${FLTX_F256_EXPR_BENCH_COUNT}.cpp" "${FLTX_F256_EXPR_BENCH_COUNT}" "mixed") - -function(fltx_f256_timestamp_ms out_var) - string(TIMESTAMP seconds "%s") - string(TIMESTAMP micros "%f") - math(EXPR millis "${seconds} * 1000 + ${micros} / 1000") - set(${out_var} "${millis}" PARENT_SCOPE) -endfunction() - -function(fltx_f256_sanitize out_var text) - string(MAKE_C_IDENTIFIER "${text}" sanitized) - set(${out_var} "${sanitized}" PARENT_SCOPE) -endfunction() - -function(fltx_f256_append_common_compile_args out_var) - set(args) - - if(FLTX_F256_EXPR_BENCH_COMPILER_ID STREQUAL "MSVC") - list(APPEND args - /nologo - /std:c++latest - /EHsc - /bigobj - /I "${FLTX_F256_EXPR_BENCH_INCLUDE_DIR}" - /D_CRT_SECURE_NO_WARNINGS - ) - else() - list(APPEND args - -std=c++23 - -I "${FLTX_F256_EXPR_BENCH_INCLUDE_DIR}" - -D_CRT_SECURE_NO_WARNINGS - ) - endif() - - set(${out_var} "${args}" PARENT_SCOPE) -endfunction() - -function(fltx_f256_compile_args out_var case_name source_file mode variant repeat_index) - fltx_f256_sanitize(safe_case "${case_name}") - fltx_f256_sanitize(safe_mode "${mode}") - fltx_f256_sanitize(safe_variant "${variant}") - set(object_path "${FLTX_F256_EXPR_BENCH_OBJECT_DIR}/${safe_case}_${safe_mode}_${safe_variant}_${repeat_index}.obj") - set(source_path "${FLTX_F256_EXPR_BENCH_SOURCE_DIR}/${source_file}") - - fltx_f256_append_common_compile_args(args) - - if(FLTX_F256_EXPR_BENCH_COMPILER_ID STREQUAL "MSVC") - if(mode STREQUAL "syntax") - list(APPEND args /Zs "${source_path}") - elseif(mode STREQUAL "Od") - list(APPEND args /c /Od /Ob0 "/Fo${object_path}" "${source_path}") - elseif(mode STREQUAL "O2") - if(variant STREQUAL "Ob0") - list(APPEND args /c /O2 /Ob0 /DNDEBUG "/Fo${object_path}" "${source_path}") - else() - list(APPEND args /c /O2 /Ob2 /DNDEBUG "/Fo${object_path}" "${source_path}") - endif() - else() - message(FATAL_ERROR "Unknown compile mode '${mode}'.") - endif() - else() - if(mode STREQUAL "syntax") - list(APPEND args -fsyntax-only "${source_path}") - elseif(mode STREQUAL "Od") - list(APPEND args -c -O0 -o "${object_path}" "${source_path}") - elseif(mode STREQUAL "O2") - if(variant STREQUAL "Ob0") - list(APPEND args -c -O2 -fno-inline -DNDEBUG -o "${object_path}" "${source_path}") - else() - list(APPEND args -c -O2 -DNDEBUG -o "${object_path}" "${source_path}") - endif() - else() - message(FATAL_ERROR "Unknown compile mode '${mode}'.") - endif() - endif() - - set(${out_var} "${args}" PARENT_SCOPE) -endfunction() - -function(fltx_f256_run_compiler elapsed_ms_var) - fltx_f256_timestamp_ms(start_ms) - execute_process( - COMMAND "${FLTX_F256_EXPR_BENCH_COMPILER}" ${ARGN} - RESULT_VARIABLE result - OUTPUT_VARIABLE stdout - ERROR_VARIABLE stderr - ) - fltx_f256_timestamp_ms(end_ms) - math(EXPR elapsed_ms "${end_ms} - ${start_ms}") - - if(NOT result EQUAL 0) - message(FATAL_ERROR - "Compiler failed with exit code ${result}\n" - "Command: ${FLTX_F256_EXPR_BENCH_COMPILER};${ARGN}\n" - "stdout:\n${stdout}\n" - "stderr:\n${stderr}" - ) - endif() - - set(${elapsed_ms_var} "${elapsed_ms}" PARENT_SCOPE) -endfunction() - -function(fltx_f256_median out_var) - set(values ${ARGN}) - list(SORT values COMPARE NATURAL ORDER ASCENDING) - list(LENGTH values count) - math(EXPR middle "${count} / 2") - list(GET values "${middle}" median) - set(${out_var} "${median}" PARENT_SCOPE) -endfunction() - -function(fltx_f256_csv_escape out_var text) - string(REPLACE "\"" "\"\"" escaped "${text}") - set(${out_var} "\"${escaped}\"" PARENT_SCOPE) -endfunction() - -function(fltx_f256_add_csv_row case_name source_file mode variant median runs) - fltx_f256_csv_escape(csv_case "${case_name}") - fltx_f256_csv_escape(csv_file "${source_file}") - fltx_f256_csv_escape(csv_mode "${mode}") - fltx_f256_csv_escape(csv_variant "${variant}") - fltx_f256_csv_escape(csv_runs "${runs}") - string(APPEND FLTX_F256_EXPR_BENCH_CSV_ROWS "${csv_case},${csv_file},${csv_mode},${csv_variant},${median},${csv_runs}\n") - set(FLTX_F256_EXPR_BENCH_CSV_ROWS "${FLTX_F256_EXPR_BENCH_CSV_ROWS}" PARENT_SCOPE) -endfunction() - -function(fltx_f256_measure_case case_name source_file mode variant) - set(times) - - math(EXPR last_repeat "${FLTX_F256_EXPR_BENCH_REPEATS} - 1") - foreach(repeat_index RANGE 0 ${last_repeat}) - fltx_f256_compile_args(args "${case_name}" "${source_file}" "${mode}" "${variant}" "${repeat_index}") - fltx_f256_run_compiler(elapsed_ms ${args}) - list(APPEND times "${elapsed_ms}") - endforeach() - - fltx_f256_median(median ${times}) - list(JOIN times "|" joined_times) - fltx_f256_add_csv_row("${case_name}" "${source_file}" "${mode}" "${variant}" "${median}" "${joined_times}") - set(FLTX_F256_EXPR_BENCH_CSV_ROWS "${FLTX_F256_EXPR_BENCH_CSV_ROWS}" PARENT_SCOPE) - message(STATUS "${case_name} [${mode}, ${variant}]: median ${median} ms; runs ${joined_times}") -endfunction() - -set(FLTX_F256_EXPR_BENCH_CSV_ROWS "") - -message(STATUS "f256 expression compile benchmark compiler: ${FLTX_F256_EXPR_BENCH_COMPILER}") -message(STATUS "f256 expression compile benchmark generated sources: ${FLTX_F256_EXPR_BENCH_SOURCE_DIR}") -message(STATUS "f256 expression compile benchmark repeats: ${FLTX_F256_EXPR_BENCH_REPEATS}") -message(STATUS "f256 expression compile benchmark count: ${FLTX_F256_EXPR_BENCH_COUNT}") - -# Warm the compiler process and filesystem caches before taking measurements. -fltx_f256_compile_args(warm_args "warm include fltx/f256.h" "inc_f256.cpp" "syntax" "default" 0) -fltx_f256_run_compiler(warm_elapsed ${warm_args}) - -fltx_f256_measure_case("empty" "empty.cpp" "syntax" "default") -fltx_f256_measure_case("include fltx/f128.h" "inc_f128.cpp" "syntax" "default") -fltx_f256_measure_case("include fltx/f256.h" "inc_f256.cpp" "syntax" "default") -fltx_f256_measure_case("include fltx/f128_math.h" "inc_f128_math.cpp" "syntax" "default") -fltx_f256_measure_case("include fltx/f256_math.h" "inc_f256_math.cpp" "syntax" "default") -fltx_f256_measure_case("include fltx/math.h" "inc_fltx_math.cpp" "syntax" "default") -fltx_f256_measure_case("include fltx/f256_io.h" "inc_f256_io.cpp" "syntax" "default") - -set(large_count "${FLTX_F256_EXPR_BENCH_COUNT}") -set(large_case_names - "${large_count} pass" - "${large_count} add" - "100 muladdmul" - "${large_count} muladdmul" - "${large_count} direct runtime" - "${large_count} eager steps" - "${large_count} mixed" -) -set(large_case_sources - "expr_pass_${large_count}.cpp" - "expr_add_${large_count}.cpp" - "expr_muladdmul_100.cpp" - "expr_muladdmul_${large_count}.cpp" - "expr_muladdmul_direct_${large_count}.cpp" - "expr_eager_steps_${large_count}.cpp" - "expr_mixed_${large_count}.cpp" -) - -list(LENGTH large_case_names large_case_count) -math(EXPR large_case_last "${large_case_count} - 1") -foreach(case_index RANGE 0 ${large_case_last}) - list(GET large_case_names "${case_index}" case_name) - list(GET large_case_sources "${case_index}" source_file) - fltx_f256_measure_case("${case_name}" "${source_file}" "syntax" "default") - fltx_f256_measure_case("${case_name}" "${source_file}" "Od" "default") - fltx_f256_measure_case("${case_name}" "${source_file}" "O2" "default") -endforeach() - -set(variant_case_names - "${large_count} add" - "${large_count} muladdmul" - "${large_count} direct runtime" - "${large_count} eager steps" - "${large_count} mixed" -) -set(variant_case_sources - "expr_add_${large_count}.cpp" - "expr_muladdmul_${large_count}.cpp" - "expr_muladdmul_direct_${large_count}.cpp" - "expr_eager_steps_${large_count}.cpp" - "expr_mixed_${large_count}.cpp" -) - -list(LENGTH variant_case_names variant_case_count) -math(EXPR variant_case_last "${variant_case_count} - 1") -foreach(case_index RANGE 0 ${variant_case_last}) - list(GET variant_case_names "${case_index}" case_name) - list(GET variant_case_sources "${case_index}" source_file) - fltx_f256_measure_case("${case_name}" "${source_file}" "O2" "Ob0") -endforeach() - -set(csv_path "${FLTX_F256_EXPR_BENCH_BINARY_DIR}/f256_expression_compile_bench.csv") -file(WRITE "${csv_path}" "case,file,mode,variant,median_ms,runs_ms\n${FLTX_F256_EXPR_BENCH_CSV_ROWS}") -message(STATUS "f256 expression compile benchmark CSV: ${csv_path}") diff --git a/tests/hash/test_hash.cpp b/tests/hash/test_hash.cpp deleted file mode 100644 index f0d552a..0000000 --- a/tests/hash/test_hash.cpp +++ /dev/null @@ -1,138 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace -{ - template - [[nodiscard]] std::size_t hash_value(const T& value) noexcept - { - return std::hash{}(value); - } - - template - [[nodiscard]] constexpr bool hash_returns_size_t() noexcept - { - return std::is_same_v{}(std::declval())), std::size_t>; - } - - static_assert(hash_returns_size_t()); - static_assert(hash_returns_size_t()); - static_assert(hash_returns_size_t()); - static_assert(hash_returns_size_t()); - - static_assert(noexcept(std::hash{}(std::declval()))); - static_assert(noexcept(std::hash{}(std::declval()))); - static_assert(noexcept(std::hash{}(std::declval()))); - static_assert(noexcept(std::hash{}(std::declval()))); - -} // namespace - -TEST_CASE("fltx hash specializations normalize signed zero", "[fltx][hash]") -{ - const bl::f128_s f128_zero_a{ 0.0, -0.0 }; - const bl::f128_s f128_zero_b{ -0.0, 0.0 }; - REQUIRE(f128_zero_a == f128_zero_b); - REQUIRE(hash_value(f128_zero_a) == hash_value(f128_zero_b)); - REQUIRE(hash_value(bl::f128{ f128_zero_a }) == hash_value(bl::f128{ f128_zero_b })); - - const bl::f256_s f256_zero_a{ 0.0, -0.0, 0.0, -0.0 }; - const bl::f256_s f256_zero_b{ -0.0, 0.0, -0.0, 0.0 }; - REQUIRE(f256_zero_a == f256_zero_b); - REQUIRE(hash_value(f256_zero_a) == hash_value(f256_zero_b)); - REQUIRE(hash_value(bl::f256{ f256_zero_a }) == hash_value(bl::f256{ f256_zero_b })); - - std::unordered_set f128_zeros; - f128_zeros.insert(f128_zero_a); - f128_zeros.insert(f128_zero_b); - REQUIRE(f128_zeros.size() == 1u); - - std::unordered_set f256_zeros; - f256_zeros.insert(f256_zero_a); - f256_zeros.insert(f256_zero_b); - REQUIRE(f256_zeros.size() == 1u); -} - -TEST_CASE("fltx hash specializations include all precision limbs", "[fltx][hash]") -{ - const bl::f128_s f128_base{ 1.0, 0.0 }; - const bl::f128_s f128_low_changed{ 1.0, 0x1p-80 }; - REQUIRE(f128_base != f128_low_changed); - REQUIRE(hash_value(f128_base) != hash_value(f128_low_changed)); - REQUIRE(hash_value(bl::f128{ f128_base }) != hash_value(bl::f128{ f128_low_changed })); - - const bl::f256_s f256_base{ 1.0, 0.0, 0.0, 0.0 }; - const bl::f256_s f256_x1_changed{ 1.0, 0x1p-80, 0.0, 0.0 }; - const bl::f256_s f256_x2_changed{ 1.0, 0.0, 0x1p-160, 0.0 }; - const bl::f256_s f256_x3_changed{ 1.0, 0.0, 0.0, 0x1p-240 }; - - REQUIRE(f256_base != f256_x1_changed); - REQUIRE(f256_base != f256_x2_changed); - REQUIRE(f256_base != f256_x3_changed); - REQUIRE(hash_value(f256_base) != hash_value(f256_x1_changed)); - REQUIRE(hash_value(f256_base) != hash_value(f256_x2_changed)); - REQUIRE(hash_value(f256_base) != hash_value(f256_x3_changed)); - REQUIRE(hash_value(bl::f256{ f256_base }) != hash_value(bl::f256{ f256_x1_changed })); - REQUIRE(hash_value(bl::f256{ f256_base }) != hash_value(bl::f256{ f256_x2_changed })); - REQUIRE(hash_value(bl::f256{ f256_base }) != hash_value(bl::f256{ f256_x3_changed })); -} - -TEST_CASE("fltx storage and value hashes match for the same representation", "[fltx][hash]") -{ - const bl::f128_s f128_storage{ -2.0, 0x1p-90 }; - const bl::f128 f128_value{ f128_storage }; - REQUIRE(hash_value(f128_storage) == hash_value(f128_value)); - - const bl::f256_s f256_storage{ -2.0, 0x1p-90, -0x1p-170, 0x1p-240 }; - const bl::f256 f256_value{ f256_storage }; - REQUIRE(hash_value(f256_storage) == hash_value(f256_value)); -} - -TEST_CASE("fltx hash specializations support unordered maps and sets", "[fltx][hash]") -{ - const bl::f128_s f128_storage_key{ 3.0, 0x1p-82 }; - std::unordered_map f128_storage_values; - f128_storage_values.emplace(f128_storage_key, 128); - REQUIRE(f128_storage_values.find(f128_storage_key) != f128_storage_values.end()); - REQUIRE(f128_storage_values.at(f128_storage_key) == 128); - - const bl::f128 f128_value_key{ -3.0, 0x1p-82 }; - std::unordered_map f128_values; - f128_values.emplace(f128_value_key, "f128"); - REQUIRE(f128_values.find(f128_value_key) != f128_values.end()); - REQUIRE(f128_values.at(f128_value_key) == "f128"); - - const bl::f256_s f256_storage_key{ 5.0, 0x1p-80, -0x1p-160, 0x1p-240 }; - std::unordered_set f256_storage_values; - f256_storage_values.insert(f256_storage_key); - REQUIRE(f256_storage_values.contains(f256_storage_key)); - REQUIRE_FALSE(f256_storage_values.contains(bl::f256_s{ 5.0, 0x1p-80, -0x1p-160, -0x1p-240 })); - - const bl::f256 f256_value_key{ -5.0, 0x1p-80, -0x1p-160, 0x1p-240 }; - std::unordered_set f256_values; - f256_values.insert(f256_value_key); - REQUIRE(f256_values.contains(f256_value_key)); - REQUIRE_FALSE(f256_values.contains(bl::f256{ -5.0, 0x1p-80, -0x1p-160, -0x1p-240 })); -} - -TEST_CASE("fltx hash specializations are deterministic for special values", "[fltx][hash]") -{ - const bl::f128 f128_inf = std::numeric_limits::infinity(); - const bl::f128 f128_nan = std::numeric_limits::quiet_NaN(); - REQUIRE(hash_value(f128_inf) == hash_value(f128_inf)); - REQUIRE(hash_value(f128_nan) == hash_value(f128_nan)); - - const bl::f256 f256_inf = std::numeric_limits::infinity(); - const bl::f256 f256_nan = std::numeric_limits::quiet_NaN(); - REQUIRE(hash_value(f256_inf) == hash_value(f256_inf)); - REQUIRE(hash_value(f256_nan) == hash_value(f256_nan)); -} diff --git a/tests/io/test_f128_io.cpp b/tests/io/test_f128_io.cpp deleted file mode 100644 index 2f8a15c..0000000 --- a/tests/io/test_f128_io.cpp +++ /dev/null @@ -1,397 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using namespace bl; - -namespace -{ - using mpfr_check = boost::multiprecision::number< - boost::multiprecision::mpfr_float_backend<100>, - boost::multiprecision::et_off>; - - constexpr int checked_digits = std::numeric_limits::digits10 - 4; - constexpr int print_digits = std::numeric_limits::max_digits10; - - [[nodiscard]] mpfr_check abs_check(const mpfr_check& value) - { - return value < 0 ? -value : value; - } - - [[nodiscard]] mpfr_check decimal_epsilon(int digits) - { - mpfr_check epsilon = 1; - for (int i = 0; i < digits; ++i) - epsilon /= 10; - return epsilon; - } - - [[nodiscard]] mpfr_check comparison_tolerance(const mpfr_check& expected) - { - mpfr_check scale = abs_check(expected); - if (scale < 1) - scale = 1; - - return decimal_epsilon(checked_digits) * scale; - } - - [[nodiscard]] std::string to_text(const f128& value) - { - return bl::to_string(value, print_digits, false, true, false); - } - - [[nodiscard]] std::string to_text(const mpfr_check& value) - { - std::ostringstream out; - out << std::setprecision(print_digits + 20) - << std::scientific - << value; - return out.str(); - } - - [[nodiscard]] mpfr_check to_ref(const char* text) - { - return mpfr_check{ std::string{text} }; - } - - [[nodiscard]] mpfr_check to_ref_exact(const f128& value) - { - mpfr_check sum = 0; - sum += mpfr_check{ value.hi }; - sum += mpfr_check{ value.lo }; - return sum; - } - - void require_close(const f128& actual, const mpfr_check& expected) - { - const mpfr_check got = to_ref_exact(actual); - const mpfr_check tolerance = comparison_tolerance(expected); - const mpfr_check diff = abs_check(got - expected); - - CAPTURE(to_text(actual)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - CAPTURE(actual.hi); - CAPTURE(actual.lo); - - REQUIRE(diff <= tolerance); - } - - void check_parse_case(const char* text) - { - f128 parsed{}; - const char* end = nullptr; - const bool ok = parse_flt128(text, parsed, &end); - - CAPTURE(text); - REQUIRE(ok); - REQUIRE(end != nullptr); - REQUIRE(*end == '\0'); - - require_close(parsed, to_ref(text)); - } - - void check_roundtrip_case(const char* label, const f128& value) - { - const std::string text = to_text(value); - const f128 reparsed = to_f128(text); - const mpfr_check expected = to_ref_exact(value); - const mpfr_check got = to_ref_exact(reparsed); - const mpfr_check tolerance = comparison_tolerance(expected); - const mpfr_check diff = abs_check(got - expected); - - CAPTURE(label); - CAPTURE(text); - CAPTURE(to_text(value)); - CAPTURE(to_text(reparsed)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - CAPTURE(value.hi); - CAPTURE(value.lo); - CAPTURE(reparsed.hi); - CAPTURE(reparsed.lo); - - REQUIRE(diff <= tolerance); - } - - [[nodiscard]] f128 random_large_finite_for_f128(bl::mt19937_64& rng) - { - bl::uniform_int_distribution sign_dist(0, 1); - bl::uniform_int_distribution exponent_dist(-250, 250); - bl::uniform_real_distribution mantissa_dist{ f128{ 0.5 }, f128{ 1.0 } }; - - f128 mantissa = mantissa_dist(rng); - if (sign_dist(rng) != 0) - mantissa = -mantissa; - - return bl::ldexp(mantissa, exponent_dist(rng)); - } - -} // namespace - -TEST_CASE("f128 parses decimal and scientific strings accurately", "[fltx][f128][io][parse]") -{ - constexpr std::array cases = {{ - "0", - "-0", - "1", - "-1", - "1.25", - "2.125", - "-3.75", - "0.125", - "0.5", - "1e-20", - "1e20", - "1.00000000000000000000000000000001", - "2.00000000000000000000000000000002", - "12345678901234567890.125", - "0.0000000000000000000000000125", - "3.1415926535897932384626433832795", - "2.7182818284590452353602874713527", - "-8.333333333333333333333333333333", - "0.3333333333333333333333333333333", - "7.0000000000000000000000000000001" - }}; - - for (const char* text : cases) - check_parse_case(text); -} - -TEST_CASE("f128 literals parse numeric and string source text", "[fltx][f128][io][literal]") -{ - using namespace bl::literals; - - constexpr f128 numeric = 0.123456789012345678901234567890123_dd; - constexpr f128 scientific = 1.25e-20_dd; - constexpr f128 text = "0.123456789012345678901234567890123"_dd; - - require_close(numeric, to_ref("0.123456789012345678901234567890123")); - require_close(scientific, to_ref("1.25e-20")); - require_close(text, to_ref("0.123456789012345678901234567890123")); -} - -TEST_CASE("f128 parser handles special values, partial tokens, and invalid inputs", "[fltx][f128][io][parse][edge]") -{ - { - const char* text = " \t+infinity;"; - const char* end = nullptr; - f128 parsed{}; - REQUIRE(parse_flt128(text, parsed, &end)); - REQUIRE(end != nullptr); - REQUIRE(*end == ';'); - REQUIRE(bl::isinf(parsed)); - REQUIRE(!bl::signbit(parsed)); - } - { - const char* text = "-inf tail"; - const char* end = nullptr; - f128 parsed{}; - REQUIRE(parse_flt128(text, parsed, &end)); - REQUIRE(end != nullptr); - REQUIRE(*end == ' '); - REQUIRE(bl::isinf(parsed)); - REQUIRE(bl::signbit(parsed)); - } - { - const char* text = "NaN(payload)"; - const char* end = nullptr; - f128 parsed{}; - REQUIRE(parse_flt128(text, parsed, &end)); - REQUIRE(end != nullptr); - REQUIRE(*end == '('); - REQUIRE(bl::isnan(parsed)); - } - { - const char* text = "1.25tail"; - const char* end = nullptr; - f128 parsed{}; - REQUIRE(parse_flt128(text, parsed, &end)); - REQUIRE(end != nullptr); - REQUIRE(*end == 't'); - require_close(parsed, to_ref("1.25")); - } - { - const char* text = "1e+oops"; - const char* end = nullptr; - f128 parsed{}; - REQUIRE(parse_flt128(text, parsed, &end)); - REQUIRE(end != nullptr); - REQUIRE(*end == 'e'); - require_close(parsed, to_ref("1")); - } - { - const char* text = "1e100000000"; - const char* end = nullptr; - f128 parsed{}; - REQUIRE(parse_flt128(text, parsed, &end)); - REQUIRE(end != nullptr); - REQUIRE(*end == '\0'); - REQUIRE(bl::isinf(parsed)); - REQUIRE(!bl::signbit(parsed)); - } - { - const char* text = "-1e-100000000"; - const char* end = nullptr; - f128 parsed{ 1.0, 0.0 }; - REQUIRE(parse_flt128(text, parsed, &end)); - REQUIRE(end != nullptr); - REQUIRE(*end == '\0'); - REQUIRE(bl::iszero(parsed)); - REQUIRE(bl::signbit(parsed)); - } - - constexpr std::array invalid_cases = {{ - "", - " ", - ".", - "+.", - "e10", - "--1" - }}; - - for (const char* text : invalid_cases) - { - const char* end = nullptr; - f128 parsed{ 42.0, 0.0 }; - CAPTURE(text); - REQUIRE_FALSE(parse_flt128(text, parsed, &end)); - REQUIRE(end == text); - REQUIRE(parsed.hi == 42.0); - REQUIRE(parsed.lo == 0.0); - } - - REQUIRE(bl::iszero(to_f128("oops"))); -} - -TEST_CASE("f128 fixed zero formatting respects precision", "[fltx][f128][io][format]") -{ - std::ostringstream out; - out << std::fixed << std::setprecision(std::numeric_limits::digits10) << f128{ 0.0, 0.0 }; - - std::string expected = "0."; - expected.append(static_cast(std::numeric_limits::digits10), '0'); - REQUIRE(out.str() == expected); - REQUIRE(bl::to_std_string(f128{ 0.0, 0.0 }, 5, true, false, false) == "0.00000"); - REQUIRE(bl::to_std_string(f128{ 0.0, 0.0 }, 5, true, false, true) == "0"); - - std::ostringstream neg_out; - neg_out << std::fixed << std::setprecision(3) << f128{ -0.0, 0.0 }; - REQUIRE(neg_out.str() == "-0.000"); -} - -TEST_CASE("f128 formats special values and stream flags consistently", "[fltx][f128][io][format][edge]") -{ - const f128 inf = std::numeric_limits::infinity(); - const f128 neg_inf = -inf; - const f128 nan = std::numeric_limits::quiet_NaN(); - - REQUIRE(bl::to_std_string(inf) == "inf"); - REQUIRE(bl::to_std_string(neg_inf) == "-inf"); - REQUIRE(bl::to_std_string(nan) == "nan"); - REQUIRE(std::string(bl::to_static_string(to_f128("1.2500"), 4, true, false, true)) == "1.25"); - - std::ostringstream pos_upper; - pos_upper << std::showpos << std::uppercase << inf; - REQUIRE(pos_upper.str() == "+INF"); - - std::ostringstream neg_upper; - neg_upper << std::uppercase << neg_inf; - REQUIRE(neg_upper.str() == "-INF"); - - std::ostringstream nan_upper; - nan_upper << std::uppercase << nan; - REQUIRE(nan_upper.str() == "NAN"); -} - -TEST_CASE("f128 stream extraction parses complete tokens", "[fltx][f128][io][stream]") -{ - std::istringstream in{ "1.25 -0 +inf nan tail" }; - f128 value{}; - f128_s neg_zero{}; - f128 inf{}; - f128_s nan{}; - std::string tail; - - REQUIRE(static_cast(in >> value >> neg_zero >> inf >> nan >> tail)); - require_close(value, to_ref("1.25")); - REQUIRE(bl::iszero(neg_zero)); - REQUIRE(bl::signbit(neg_zero)); - REQUIRE(bl::isinf(inf)); - REQUIRE(!bl::signbit(inf)); - REQUIRE(bl::isnan(nan)); - REQUIRE(tail == "tail"); -} - -TEST_CASE("f128 stream extraction fails without overwriting on partial or invalid tokens", "[fltx][f128][io][stream][edge]") -{ - { - std::istringstream in{ "1.25tail" }; - f128 value{ 42.0, 0.0 }; - - REQUIRE_FALSE(static_cast(in >> value)); - REQUIRE(in.fail()); - REQUIRE(value.hi == 42.0); - REQUIRE(value.lo == 0.0); - } - { - std::istringstream in{ "oops" }; - f128_s value{ 7.0, 0.0 }; - - REQUIRE_FALSE(static_cast(in >> value)); - REQUIRE(in.fail()); - REQUIRE(value.hi == 7.0); - REQUIRE(value.lo == 0.0); - } -} - -TEST_CASE("f128 print and parse round-trip preserves explicit limb values", "[fltx][f128][io][roundtrip]") -{ - const std::array, 8> cases = {{ - { "zero", f128{ 0.0, 0.0 } }, - { "one", f128{ 1.0, 0.0 } }, - { "neg_one_point_25", f128{ -1.25, 0.0 } }, - { "two_limb_small", f128{ 0.5, std::ldexp(1.0, -60) } }, - { "unit_with_tail", f128{ 1.0, std::ldexp(1.0, -55) } }, - { "large_with_tail", f128{ std::ldexp(1.0, 200), std::ldexp(1.0, 140) } }, - { "small_with_tail", f128{ std::ldexp(1.0, -200), -std::ldexp(1.0, -255) } }, - { "mixed_sign_tail", f128{ std::ldexp(1.0, 100), -std::ldexp(1.0, 40) } }, - }}; - - for (const auto& [label, value] : cases) - check_roundtrip_case(label, value); -} - -TEST_CASE("f128 brute-force random roundtrip test", "[fltx][f128][io][rand]") -{ - bl::mt19937_64 rng{ 0x1020304050607080ull }; - constexpr int sample_count = 10000; - - std::cout << "f128 brute-force random roundtrip test: " << sample_count - << " random values (seed 0x1020304050607080)...\n\n"; - - for (int i = 0; i < sample_count; ++i) - { - const f128 value = random_large_finite_for_f128(rng); - const std::string expected = to_text(value); - - const f128 parsed = to_f128(expected); - const std::string actual = to_text(parsed); - - INFO("iteration: " << i); - INFO("random f128: " << expected); - INFO("original n: " << actual); - - require_close(parsed, to_ref_exact(value)); - } -} diff --git a/tests/io/test_f256_io.cpp b/tests/io/test_f256_io.cpp deleted file mode 100644 index 6d68a22..0000000 --- a/tests/io/test_f256_io.cpp +++ /dev/null @@ -1,422 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using namespace bl; - -namespace -{ - using mpfr_check = boost::multiprecision::number< - boost::multiprecision::mpfr_float_backend<200>, - boost::multiprecision::et_off>; - - constexpr int checked_digits = std::numeric_limits::digits10 - 4; - constexpr int print_digits = std::numeric_limits::max_digits10; - - [[nodiscard]] mpfr_check abs_check(const mpfr_check& value) - { - return value < 0 ? -value : value; - } - - [[nodiscard]] mpfr_check decimal_epsilon(int digits) - { - mpfr_check epsilon = 1; - for (int i = 0; i < digits; ++i) - epsilon /= 10; - return epsilon; - } - - [[nodiscard]] mpfr_check comparison_tolerance(const mpfr_check& expected) - { - mpfr_check scale = abs_check(expected); - if (scale < 1) - scale = 1; - - return decimal_epsilon(checked_digits) * scale; - } - - [[nodiscard]] std::string to_text(const f256& value) - { - return bl::to_string(value, print_digits, false, true, false); - } - - [[nodiscard]] std::string to_text(const mpfr_check& value) - { - std::ostringstream out; - out << std::setprecision(print_digits + 20) - << std::scientific - << value; - return out.str(); - } - - [[nodiscard]] mpfr_check to_ref(const char* text) - { - return mpfr_check{ std::string{text} }; - } - - [[nodiscard]] mpfr_check to_ref_exact(const f256& value) - { - mpfr_check sum = 0; - sum += mpfr_check{ value.x0 }; - sum += mpfr_check{ value.x1 }; - sum += mpfr_check{ value.x2 }; - sum += mpfr_check{ value.x3 }; - return sum; - } - - void require_close(const f256& actual, const mpfr_check& expected) - { - const mpfr_check got = to_ref_exact(actual); - const mpfr_check tolerance = comparison_tolerance(expected); - const mpfr_check diff = abs_check(got - expected); - - CAPTURE(to_text(actual)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - CAPTURE(actual.x0); - CAPTURE(actual.x1); - CAPTURE(actual.x2); - CAPTURE(actual.x3); - - REQUIRE(diff <= tolerance); - } - - void check_parse_case(const char* text) - { - f256 parsed{}; - const char* end = nullptr; - const bool ok = parse_flt256(text, parsed, &end); - - CAPTURE(text); - REQUIRE(ok); - REQUIRE(end != nullptr); - REQUIRE(*end == '\0'); - - require_close(parsed, to_ref(text)); - } - - void check_roundtrip_case(const char* label, const f256& value) - { - const std::string text = to_text(value); - const f256 reparsed = to_f256(text); - const mpfr_check expected = to_ref_exact(value); - const mpfr_check got = to_ref_exact(reparsed); - const mpfr_check tolerance = comparison_tolerance(expected); - const mpfr_check diff = abs_check(got - expected); - - CAPTURE(label); - CAPTURE(text); - CAPTURE(to_text(value)); - CAPTURE(to_text(reparsed)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - CAPTURE(value.x0); - CAPTURE(value.x1); - CAPTURE(value.x2); - CAPTURE(value.x3); - CAPTURE(reparsed.x0); - CAPTURE(reparsed.x1); - CAPTURE(reparsed.x2); - CAPTURE(reparsed.x3); - - REQUIRE(diff <= tolerance); - } - - [[nodiscard]] f256 random_large_finite_for_f256(bl::mt19937_64& rng) - { - bl::uniform_int_distribution sign_dist(0, 1); - bl::uniform_int_distribution exponent_dist(-900, 900); - bl::uniform_real_distribution mantissa_dist{ f256{ 0.5 }, f256{ 1.0 } }; - - f256 mantissa = mantissa_dist(rng); - if (sign_dist(rng) != 0) - mantissa = -mantissa; - - return bl::ldexp(mantissa, exponent_dist(rng)); - } - -} // namespace - -TEST_CASE("f256 parses decimal and scientific strings accurately", "[fltx][f256][io][parse]") -{ - constexpr std::array cases = {{ - "0", - "-0", - "1", - "-1", - "123", - "1024.0", - "1e6", - "3.14e-5", - "0.1", - "123.45678", - "1234.5678912345", - "0.0009765625", - "1.234567890123e-10", - "1.25", - "2.125", - "-3.75", - "0.125", - "0.5", - "1e-50", - "1e50", - "1.0000000000000000000000000000000001", - "2.0000000000000000000000000000000002", - "123456789012345678901234567890.125", - "0.000000000000000000000000000000125", - "3.1415926535897932384626433832795028841971", - "2.7182818284590452353602874713526624977572", - "-8.333333333333333333333333333333333", - "0.3333333333333333333333333333333333", - "7.0000000000000000000000000000000001" - }}; - - for (const char* text : cases) - check_parse_case(text); -} - -TEST_CASE("f256 literals parse numeric and string source text", "[fltx][f256][io][literal]") -{ - using namespace bl::literals; - - constexpr f256 integer = 1_qd; - constexpr f256 numeric = 0.123456789012345678901234567890123456789_qd; - constexpr f256 scientific = 1.25e-50_qd; - constexpr f256 text = "3.1415926535897932384626433832795028841971"_qd; - - require_close(integer, to_ref("1")); - require_close(numeric, to_ref("0.123456789012345678901234567890123456789")); - require_close(scientific, to_ref("1.25e-50")); - require_close(text, to_ref("3.1415926535897932384626433832795028841971")); -} - -TEST_CASE("f256 parser handles special values, partial tokens, and invalid inputs", "[fltx][f256][io][parse][edge]") -{ - { - const char* text = " \t+infinity;"; - const char* end = nullptr; - f256 parsed{}; - REQUIRE(parse_flt256(text, parsed, &end)); - REQUIRE(end != nullptr); - REQUIRE(*end == ';'); - REQUIRE(bl::isinf(parsed)); - REQUIRE(!std::signbit(parsed.x0)); - } - { - const char* text = "-inf tail"; - const char* end = nullptr; - f256 parsed{}; - REQUIRE(parse_flt256(text, parsed, &end)); - REQUIRE(end != nullptr); - REQUIRE(*end == ' '); - REQUIRE(bl::isinf(parsed)); - REQUIRE(std::signbit(parsed.x0)); - } - { - const char* text = "NaN(payload)"; - const char* end = nullptr; - f256 parsed{}; - REQUIRE(parse_flt256(text, parsed, &end)); - REQUIRE(end != nullptr); - REQUIRE(*end == '('); - REQUIRE(bl::isnan(parsed)); - } - { - const char* text = "1.25tail"; - const char* end = nullptr; - f256 parsed{}; - REQUIRE(parse_flt256(text, parsed, &end)); - REQUIRE(end != nullptr); - REQUIRE(*end == 't'); - require_close(parsed, to_ref("1.25")); - } - { - const char* text = "1e+oops"; - const char* end = nullptr; - f256 parsed{}; - REQUIRE(parse_flt256(text, parsed, &end)); - REQUIRE(end != nullptr); - REQUIRE(*end == 'e'); - require_close(parsed, to_ref("1")); - } - { - const char* text = "1e100000000"; - const char* end = nullptr; - f256 parsed{}; - REQUIRE(parse_flt256(text, parsed, &end)); - REQUIRE(end != nullptr); - REQUIRE(*end == '\0'); - REQUIRE(bl::isinf(parsed)); - REQUIRE(!std::signbit(parsed.x0)); - } - { - const char* text = "-1e-100000000"; - const char* end = nullptr; - f256 parsed{ 1.0, 0.0, 0.0, 0.0 }; - REQUIRE(parse_flt256(text, parsed, &end)); - REQUIRE(end != nullptr); - REQUIRE(*end == '\0'); - REQUIRE(bl::iszero(parsed)); - REQUIRE(std::signbit(parsed.x0)); - } - - constexpr std::array invalid_cases = {{ - "", - " ", - ".", - "+.", - "e10", - "--1" - }}; - - for (const char* text : invalid_cases) - { - const char* end = nullptr; - f256 parsed{ 42.0, 0.0, 0.0, 0.0 }; - CAPTURE(text); - REQUIRE_FALSE(parse_flt256(text, parsed, &end)); - REQUIRE(end == text); - REQUIRE(parsed.x0 == 42.0); - REQUIRE(parsed.x1 == 0.0); - REQUIRE(parsed.x2 == 0.0); - REQUIRE(parsed.x3 == 0.0); - } - - REQUIRE(bl::iszero(to_f256("oops"))); -} - -TEST_CASE("f256 fixed zero formatting respects precision", "[fltx][f256][io][format]") -{ - std::ostringstream out; - out << std::fixed << std::setprecision(std::numeric_limits::digits10) << f256{ 0.0, 0.0, 0.0, 0.0 }; - - std::string expected = "0."; - expected.append(static_cast(std::numeric_limits::digits10), '0'); - REQUIRE(out.str() == expected); - REQUIRE(bl::to_std_string(f256{ 0.0, 0.0, 0.0, 0.0 }, 5, true, false, false) == "0.00000"); - REQUIRE(bl::to_std_string(f256{ 0.0, 0.0, 0.0, 0.0 }, 5, true, false, true) == "0"); - - std::ostringstream neg_out; - neg_out << std::fixed << std::setprecision(3) << f256{ -0.0, 0.0, 0.0, 0.0 }; - REQUIRE(neg_out.str() == "-0.000"); -} - -TEST_CASE("f256 formats special values and stream flags consistently", "[fltx][f256][io][format][edge]") -{ - const f256 inf = std::numeric_limits::infinity(); - const f256 neg_inf = -inf; - const f256 nan = std::numeric_limits::quiet_NaN(); - - REQUIRE(bl::to_std_string(inf) == "inf"); - REQUIRE(bl::to_std_string(neg_inf) == "-inf"); - REQUIRE(bl::to_std_string(nan) == "nan"); - REQUIRE(std::string(bl::to_static_string(to_f256("1.2500"), 4, true, false, true)) == "1.25"); - - std::ostringstream pos_upper; - pos_upper << std::showpos << std::uppercase << inf; - REQUIRE(pos_upper.str() == "+INF"); - - std::ostringstream neg_upper; - neg_upper << std::uppercase << neg_inf; - REQUIRE(neg_upper.str() == "-INF"); - - std::ostringstream nan_upper; - nan_upper << std::uppercase << nan; - REQUIRE(nan_upper.str() == "NAN"); -} - -TEST_CASE("f256 stream extraction parses complete tokens", "[fltx][f256][io][stream]") -{ - std::istringstream in{ "1.25 -0 +inf nan tail" }; - f256 value{}; - f256_s neg_zero{}; - f256 inf{}; - f256_s nan{}; - std::string tail; - - REQUIRE(static_cast(in >> value >> neg_zero >> inf >> nan >> tail)); - require_close(value, to_ref("1.25")); - REQUIRE(bl::iszero(neg_zero)); - REQUIRE(std::signbit(neg_zero.x0)); - REQUIRE(bl::isinf(inf)); - REQUIRE(!std::signbit(inf.x0)); - REQUIRE(bl::isnan(nan)); - REQUIRE(tail == "tail"); -} - -TEST_CASE("f256 stream extraction fails without overwriting on partial or invalid tokens", "[fltx][f256][io][stream][edge]") -{ - { - std::istringstream in{ "1.25tail" }; - f256 value{ 42.0, 0.0, 0.0, 0.0 }; - - REQUIRE_FALSE(static_cast(in >> value)); - REQUIRE(in.fail()); - REQUIRE(value.x0 == 42.0); - REQUIRE(value.x1 == 0.0); - REQUIRE(value.x2 == 0.0); - REQUIRE(value.x3 == 0.0); - } - { - std::istringstream in{ "oops" }; - f256_s value{ 7.0, 0.0, 0.0, 0.0 }; - - REQUIRE_FALSE(static_cast(in >> value)); - REQUIRE(in.fail()); - REQUIRE(value.x0 == 7.0); - REQUIRE(value.x1 == 0.0); - REQUIRE(value.x2 == 0.0); - REQUIRE(value.x3 == 0.0); - } -} - -TEST_CASE("f256 print and parse round-trip preserves explicit limb values", "[fltx][f256][io][roundtrip]") -{ - const std::array, 8> cases = {{ - { "zero", f256{ 0.0, 0.0, 0.0, 0.0 } }, - { "one", f256{ 1.0, 0.0, 0.0, 0.0 } }, - { "neg_one_point_25", f256{ -1.25, 0.0, 0.0, 0.0 } }, - { "two_limb_small", f256{ 0.5, std::ldexp(1.0, -60), 0.0, 0.0 } }, - { "three_limb_mix", f256{ std::ldexp(1.0, 100), -std::ldexp(1.0, 40), std::ldexp(1.0, -20), 0.0 } }, - { "four_limb_mix", f256{ 1.0, std::ldexp(1.0, -55), -std::ldexp(1.0, -110), std::ldexp(1.0, -165) } }, - { "large_with_tail", f256{ std::ldexp(1.0, 200), std::ldexp(1.0, 140), -std::ldexp(1.0, 80), std::ldexp(1.0, 20) } }, - { "small_with_tail", f256{ std::ldexp(1.0, -200), -std::ldexp(1.0, -255), std::ldexp(1.0, -310), -std::ldexp(1.0, -365) } }, - }}; - - for (const auto& [label, value] : cases) - check_roundtrip_case(label, value); -} - -TEST_CASE("f256 brute-force random io test", "[fltx][f256][io][rand]") -{ - bl::mt19937_64 rng{ 0x1020304050607080ull }; - constexpr int sample_count = 10000; - - std::cout << "f256 brute-force random roundtrip test: " << sample_count - << " random values (seed 0x1020304050607080)...\n\n"; - - for (int i = 0; i < sample_count; ++i) - { - const f256 value = random_large_finite_for_f256(rng); - const std::string expected = to_text(value); - - const f256 parsed = to_f256(expected); - const std::string actual = to_text(parsed); - - INFO("iteration: " << i); - INFO("random f256: " << expected); - INFO("original n: " << actual); - - require_close(parsed, to_ref_exact(value)); - } -} diff --git a/tests/io/test_standard_integration.cpp b/tests/io/test_standard_integration.cpp deleted file mode 100644 index f17c0b5..0000000 --- a/tests/io/test_standard_integration.cpp +++ /dev/null @@ -1,259 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace -{ - static_assert((bl::f128{ 1.0 } <=> bl::f128{ 2.0 }) == std::partial_ordering::less); - static_assert((bl::f128{ 1.0 } <=> 2.0) == std::partial_ordering::less); - static_assert((2.0 <=> bl::f128{ 1.0 }) == std::partial_ordering::greater); - static_assert((bl::f256{ 2.0 } <=> bl::f256{ 1.0 }) == std::partial_ordering::greater); - static_assert((bl::f256{ 1.0 } <=> 1.0) == std::partial_ordering::equivalent); - - static_assert(bl::fltx_f32); - static_assert(bl::fltx_f64); - static_assert(bl::fltx_f128); - static_assert(bl::fltx_f128); - static_assert(bl::fltx_f256); - static_assert(bl::fltx_f256); - static_assert(bl::fltx_extended_float); - static_assert(bl::fltx_extended_float); - static_assert(!bl::fltx_extended_float); - static_assert(!bl::fltx_extended_float); - static_assert(bl::fltx_float); - static_assert(bl::fltx_float); - static_assert(bl::fltx_floating_point); - static_assert(bl::fltx_floating_point); - static_assert(bl::fltx_arithmetic); - static_assert(bl::fltx_arithmetic); - - static_assert(bl::is_f32_v); - static_assert(bl::is_f64_v); - static_assert(bl::is_f128_v); - static_assert(bl::is_f256_v); - static_assert(bl::is_fltx_extended_float_v); - static_assert(bl::is_fltx_float_v); - static_assert(bl::is_floating_point_v); - static_assert(bl::is_arithmetic_v); - static_assert(bl::is_integral_v); - static_assert(!bl::is_integral_v); - -} // namespace - -TEST_CASE("fltx charconv-shaped helpers format and parse", "[fltx][io][charconv]") -{ - char buffer[128]{}; - - const bl::f128 f128_value{ 1.25 }; - const auto f128_out = bl::to_chars( - buffer, - buffer + sizeof(buffer), - f128_value, - std::chars_format::fixed, - 3); - - REQUIRE(f128_out.ec == std::errc{}); - REQUIRE(std::string_view(buffer, static_cast(f128_out.ptr - buffer)) == "1.250"); - - bl::f128 f128_parsed{}; - const auto f128_in = bl::from_chars(buffer, f128_out.ptr, f128_parsed, std::chars_format::fixed); - REQUIRE(f128_in.ec == std::errc{}); - REQUIRE(f128_in.ptr == f128_out.ptr); - REQUIRE(f128_parsed == f128_value); - - const auto f256_out = bl::to_chars( - buffer, - buffer + sizeof(buffer), - bl::f256{ 2.5 }, - std::chars_format::fixed, - 4); - REQUIRE(f256_out.ec == std::errc{}); - REQUIRE(std::string_view(buffer, static_cast(f256_out.ptr - buffer)) == "2.5000"); - - constexpr std::string_view text = "3.5tail"; - bl::f256 f256_parsed{}; - const auto f256_in = bl::from_chars(text.data(), text.data() + text.size(), f256_parsed); - REQUIRE(f256_in.ec == std::errc{}); - REQUIRE(f256_in.ptr == text.data() + 3); - REQUIRE(f256_parsed == bl::f256{ 3.5 }); - - const auto hex_out = bl::to_chars( - buffer, - buffer + sizeof(buffer), - f128_value, - std::chars_format::hex); - REQUIRE(hex_out.ec == std::errc::invalid_argument); - - char tiny[3]{}; - const auto too_small_out = bl::to_chars( - tiny, - tiny + sizeof(tiny), - f128_value, - std::chars_format::fixed, - 3); - REQUIRE(too_small_out.ec == std::errc::value_too_large); - REQUIRE(too_small_out.ptr == tiny + sizeof(tiny)); - - const auto inf_out = bl::to_chars( - buffer, - buffer + sizeof(buffer), - std::numeric_limits::infinity()); - REQUIRE(inf_out.ec == std::errc{}); - REQUIRE(std::string_view(buffer, static_cast(inf_out.ptr - buffer)) == "inf"); - - const auto nan_out = bl::to_chars( - buffer, - buffer + sizeof(buffer), - std::numeric_limits::quiet_NaN()); - REQUIRE(nan_out.ec == std::errc{}); - REQUIRE(std::string_view(buffer, static_cast(nan_out.ptr - buffer)) == "nan"); - - bl::f128 invalid{}; - constexpr std::string_view plus_text = "+1"; - const auto plus_in = bl::from_chars(plus_text.data(), plus_text.data() + plus_text.size(), invalid); - REQUIRE(plus_in.ec == std::errc::invalid_argument); - REQUIRE(plus_in.ptr == plus_text.data()); - - constexpr std::string_view exponent_text = "1e2"; - bl::f128 fixed_parsed{}; - const auto fixed_in = bl::from_chars( - exponent_text.data(), - exponent_text.data() + exponent_text.size(), - fixed_parsed, - std::chars_format::fixed); - REQUIRE(fixed_in.ec == std::errc{}); - REQUIRE(fixed_in.ptr == exponent_text.data() + 1); - REQUIRE(fixed_parsed == bl::f128{ 1.0 }); - - bl::f128 scientific_parsed{}; - constexpr std::string_view no_exponent_text = "1.25"; - const auto scientific_in = bl::from_chars( - no_exponent_text.data(), - no_exponent_text.data() + no_exponent_text.size(), - scientific_parsed, - std::chars_format::scientific); - REQUIRE(scientific_in.ec == std::errc::invalid_argument); - - constexpr std::string_view neg_inf_text = "-inf!"; - bl::f128 neg_inf{}; - const auto neg_inf_in = bl::from_chars(neg_inf_text.data(), neg_inf_text.data() + neg_inf_text.size(), neg_inf); - REQUIRE(neg_inf_in.ec == std::errc{}); - REQUIRE(neg_inf_in.ptr == neg_inf_text.data() + 4); - REQUIRE(bl::isinf(neg_inf)); - REQUIRE(bl::signbit(neg_inf)); - - constexpr std::string_view nan_text = "nan rest"; - bl::f256 parsed_nan{}; - const auto nan_in = bl::from_chars(nan_text.data(), nan_text.data() + nan_text.size(), parsed_nan); - REQUIRE(nan_in.ec == std::errc{}); - REQUIRE(nan_in.ptr == nan_text.data() + 3); - REQUIRE(bl::isnan(parsed_nan)); -} - -TEST_CASE("fltx partial ordering reports NaNs as unordered", "[fltx][compare]") -{ - const bl::f128 f128_nan = std::numeric_limits::quiet_NaN(); - const bl::f256 f256_nan = std::numeric_limits::quiet_NaN(); - - REQUIRE((f128_nan <=> bl::f128{ 0.0 }) == std::partial_ordering::unordered); - REQUIRE((bl::f128{ 0.0 } <=> f128_nan) == std::partial_ordering::unordered); - REQUIRE((f256_nan <=> bl::f256{ 0.0 }) == std::partial_ordering::unordered); - REQUIRE((bl::f256{ 0.0 } <=> f256_nan) == std::partial_ordering::unordered); - - const double scalar_nan = std::numeric_limits::quiet_NaN(); - REQUIRE((bl::f128{ 0.0 } <=> scalar_nan) == std::partial_ordering::unordered); - REQUIRE((scalar_nan <=> bl::f128{ 0.0 }) == std::partial_ordering::unordered); -} - -TEST_CASE("fltx hash specializations support unordered containers", "[fltx][hash]") -{ - const std::hash f128_hash{}; - const std::hash f256_hash{}; - - REQUIRE(f128_hash(bl::f128{ 0.0 }) == f128_hash(bl::f128{ -0.0 })); - REQUIRE(f256_hash(bl::f256{ 0.0 }) == f256_hash(bl::f256{ -0.0 })); - - std::unordered_map values; - values.emplace(bl::f128{ 1.5 }, 42); - - const auto found = values.find(bl::f128{ 1.5 }); - REQUIRE(found != values.end()); - REQUIRE(found->second == 42); -} - -#if FLTX_HAS_STD_FORMAT -TEST_CASE("fltx std formatter supports common numeric specs", "[fltx][format]") -{ - REQUIRE(std::format("{}", bl::f128{ 1.25 }) == "1.25"); - REQUIRE(std::format("{:.4g}", bl::f128{ 1.25 }) == "1.25"); - REQUIRE(std::format("{:.3f}", bl::f128{ 1.25 }) == "1.250"); - REQUIRE(std::format("{:.2f}", bl::f128_s{ 2.5, 0.0 }) == "2.50"); - REQUIRE(std::format("{:.2f}", bl::f256_s{ 2.5, 0.0, 0.0, 0.0 }) == "2.50"); - REQUIRE(std::format("{:+.2e}", bl::f256{ 1.5 }) == "+1.50e+00"); - REQUIRE(std::format("{:+.2E}", bl::f256{ 1.5 }) == "+1.50E+00"); - REQUIRE(std::format("{: .2f}", bl::f128{ 1.25 }) == " 1.25"); - REQUIRE(std::format("{: .2f}", bl::f128{ -1.25 }) == "-1.25"); - REQUIRE(std::format("{:+08.2f}", bl::f128{ 1.25 }) == "+0001.25"); - REQUIRE(std::format("{:08.2f}", bl::f128{ -1.25 }) == "-0001.25"); - REQUIRE(std::format("{:>8.2f}", bl::f128{ 1.25 }) == " 1.25"); - REQUIRE(std::format("{:<8.2f}", bl::f128{ 1.25 }) == "1.25 "); - REQUIRE(std::format("{:*^8.2f}", bl::f128{ 1.25 }) == "**1.25**"); - REQUIRE(std::format("{:#.0f}", bl::f128{ 1.0 }) == "1."); - REQUIRE(std::format("{:#.3g}", bl::f128{ 1.0 }) == "1.00"); - REQUIRE(std::format("{:.2F}", std::numeric_limits::infinity()) == "INF"); - REQUIRE(std::format("{:+.2F}", std::numeric_limits::quiet_NaN()) == "+NAN"); - - #if !defined(__EMSCRIPTEN__) - bl::f128 invalid_format_value{ 1.0 }; - REQUIRE_THROWS_AS(std::vformat("{:x}", std::make_format_args(invalid_format_value)), std::format_error); - #endif -} - -TEST_CASE("fltx std formatter preserves long precision and padding", "[fltx][format]") -{ - const bl::f256 pi = std::numbers::pi_v; - - const std::string fixed60 = std::format("{:.60f}", pi); - REQUIRE(fixed60.size() == 62u); - REQUIRE(fixed60.find('.') == 1u); - REQUIRE(fixed60.starts_with("3.14159265358979323846264338327950288419716939937510")); - - const std::string scientific55 = std::format("{:.55e}", pi); - REQUIRE(scientific55.size() == 61u); - REQUIRE(scientific55.starts_with("3.14159265358979323846264338327950288419716939937510")); - REQUIRE(scientific55.ends_with("e+00")); - - const std::string general64 = std::format("{:.64g}", pi); - REQUIRE(general64.size() == 65u); - REQUIRE(general64.find('.') == 1u); - REQUIRE(general64.starts_with("3.14159265358979323846264338327950288419716939937510")); - REQUIRE(general64.back() != '0'); - - const std::string right80 = std::format("{:>80.60f}", pi); - REQUIRE(right80.size() == 80u); - REQUIRE(right80 == std::string(80u - fixed60.size(), ' ') + fixed60); - - const std::string left76 = std::format("{:_<76.60f}", pi); - REQUIRE(left76.size() == 76u); - REQUIRE(left76 == fixed60 + std::string(76u - fixed60.size(), '_')); - - const std::string centered67 = std::format("{:*^67.60f}", pi); - REQUIRE(centered67.size() == 67u); - REQUIRE(centered67 == std::string(2u, '*') + fixed60 + std::string(3u, '*')); - - REQUIRE(std::format("{:.10g}", bl::f256{ 1.25 }) == "1.25"); - REQUIRE(std::format("{:#.10g}", bl::f256{ 1.25 }) == "1.250000000"); - REQUIRE(std::format("{:.0f}", pi) == "3"); - REQUIRE(std::format("{:#.0f}", pi) == "3."); -} -#endif diff --git a/tests/metrics/metrics_case_output.cpp b/tests/metrics/metrics_case_output.cpp deleted file mode 100644 index c89f8d1..0000000 --- a/tests/metrics/metrics_case_output.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include "metrics_case_output.h" - -#include -#include -#include - -namespace bl::test::metrics -{ - namespace - { - void write_metrics_console_legend(std::ostream& out) - { - if (!metrics_verbose_enabled()) - return; - - out << "\n[metrics legend]\n" - << "bits accurate = estimated matching binary bits versus the MPFR oracle; exact sampled matches are shown as exact.\n" - << "Inf/NaN = whether the backend matches the std/libm oracle on a small Inf/NaN/signed-zero probe set.\n" - << "domain score = normal finite-domain magnitude quality: 50% mean sample score, 30% 1st-percentile sample score, 20% worst sample score.\n" - << "sample score = clamp(finite-domain bits / target bits, 0, 1); targets: f128=106 bits, f256=212 bits.\n\n" - - << "preferred reference = preferred backend picked from faster comparable results.\n" - << "cppdd = boost::multiprecision::cpp_double_double\n" - << "mpfr<64> = boost::multiprecision::mpfr_float_backend<64>\n" - << "dd_real = qdpp double-double type\n" - << "qd_real = qdpp quad-double type\n\n"; - } - } - - class metrics_case_report_listener final : public Catch::EventListenerBase - { - public: - using Catch::EventListenerBase::EventListenerBase; - - static std::string getDescription() - { - return "prints consolidated metrics tables and writes complete metrics CSV reports"; - } - - void testRunStarting(const Catch::TestRunInfo&) override - { - clear_pending_metrics_case_reports(); - clear_realtime_metrics_console(); - set_metrics_filter_arguments(m_config->getTestsOrTags()); - write_metrics_console_legend(Catch::cout()); - } - - void testRunEnded(const Catch::TestRunStats&) override - { - write_pending_metrics_case_reports(std::cout); - } - }; -} - -CATCH_REGISTER_LISTENER(bl::test::metrics::metrics_case_report_listener) diff --git a/tests/metrics/metrics_case_output.h b/tests/metrics/metrics_case_output.h deleted file mode 100644 index d966707..0000000 --- a/tests/metrics/metrics_case_output.h +++ /dev/null @@ -1,1132 +0,0 @@ -#ifndef FLTX_TESTS_METRICS_CASE_OUTPUT_INCLUDED -#define FLTX_TESTS_METRICS_CASE_OUTPUT_INCLUDED - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "metrics_report.h" - -#ifndef VERBOSE_TESTS -#define VERBOSE_TESTS 1 -#endif - -namespace bl::test::metrics -{ - [[nodiscard]] inline bool metrics_verbose_enabled() noexcept - { - return VERBOSE_TESTS != 0; - } - - [[nodiscard]] inline std::vector& metrics_filter_arguments() - { - static std::vector filters; - return filters; - } - - inline void set_metrics_filter_arguments(std::vector filters) - { - metrics_filter_arguments() = std::move(filters); - } - - [[nodiscard]] inline std::string normalized_metrics_filter(std::string_view filter) - { - std::string normalized; - normalized.reserve(filter.size()); - for (char ch : filter) - { - if (ch != ' ' && ch != '\t' && ch != '\r' && ch != '\n') - normalized += ch; - } - return normalized; - } - - [[nodiscard]] inline bool metrics_filter_has_tag(std::string_view tag) - { - std::string bracketed; - bracketed.reserve(tag.size() + 2); - bracketed += "["; - bracketed += tag; - bracketed += "]"; - - for (const std::string& filter : metrics_filter_arguments()) - { - const std::string normalized = normalized_metrics_filter(filter); - std::string::size_type pos = normalized.find(bracketed); - while (pos != std::string::npos) - { - if (pos == 0 || normalized[pos - 1] != '~') - return true; - - pos = normalized.find(bracketed, pos + bracketed.size()); - } - } - return false; - } - - [[nodiscard]] inline bool metrics_filter_has_explicit_phase() - { - return metrics_filter_has_tag("precision") || - metrics_filter_has_tag("accuracy") || - metrics_filter_has_tag("bench") || - metrics_filter_has_tag("domain"); - } - - [[nodiscard]] inline std::size_t metrics_filter_phase_count() - { - std::size_t count = 0; - if (metrics_filter_has_tag("precision") || metrics_filter_has_tag("accuracy")) - ++count; - if (metrics_filter_has_tag("bench")) - ++count; - if (metrics_filter_has_tag("domain")) - ++count; - return count; - } - - [[nodiscard]] inline std::vector metrics_normalized_filter_clauses() - { - std::vector clauses; - if (metrics_filter_arguments().size() != 1) - return clauses; - - const std::string normalized = normalized_metrics_filter(metrics_filter_arguments().front()); - if (normalized.empty()) - return clauses; - - std::string::size_type first = 0; - while (first < normalized.size()) - { - std::string::size_type last = normalized.find(',', first); - if (last == std::string::npos) - last = normalized.size(); - if (last == first) - return {}; - - clauses.push_back(normalized.substr(first, last - first)); - first = last + 1; - } - - return clauses; - } - - [[nodiscard]] inline bool metrics_filter_clause_matches_tags( - std::string_view clause, - std::string_view first_tag, - std::string_view second_tag = {}) - { - std::vector tags; - std::string::size_type pos = 0; - while (pos < clause.size()) - { - if (clause[pos] != '[') - return false; - - const std::string::size_type close = clause.find(']', pos + 1); - if (close == std::string::npos || close == pos + 1) - return false; - - tags.push_back(clause.substr(pos + 1, close - pos - 1)); - pos = close + 1; - } - - const std::size_t expected_size = second_tag.empty() ? 1u : 2u; - if (tags.size() != expected_size) - return false; - - const auto has_tag = - [&tags](std::string_view tag) - { - return std::find(tags.begin(), tags.end(), tag) != tags.end(); - }; - return has_tag(first_tag) && (second_tag.empty() || has_tag(second_tag)); - } - - [[nodiscard]] inline bool metrics_filter_has_exact_phase_clause( - const std::vector& clauses, - std::string_view phase_tag, - std::string_view precision_tag = {}) - { - return std::any_of( - clauses.begin(), - clauses.end(), - [phase_tag, precision_tag](const std::string& clause) - { - if (precision_tag.empty()) - return metrics_filter_clause_matches_tags(clause, phase_tag); - return metrics_filter_clause_matches_tags(clause, precision_tag, phase_tag); - }); - } - - [[nodiscard]] inline bool metrics_filter_has_exact_precision_phase_clause( - const std::vector& clauses, - std::string_view precision_tag = {}) - { - return metrics_filter_has_exact_phase_clause(clauses, "precision", precision_tag) || - metrics_filter_has_exact_phase_clause(clauses, "accuracy", precision_tag); - } - - [[nodiscard]] inline bool metrics_filter_is_complete_report_filter_for( - std::string_view precision_tag = {}) - { - const std::vector clauses = metrics_normalized_filter_clauses(); - if (clauses.size() != 3) - return false; - - return metrics_filter_has_exact_precision_phase_clause(clauses, precision_tag) && - metrics_filter_has_exact_phase_clause(clauses, "bench", precision_tag) && - metrics_filter_has_exact_phase_clause(clauses, "domain", precision_tag); - } - - [[nodiscard]] inline bool metrics_filter_is_complete_report_filter() - { - return metrics_filter_is_complete_report_filter_for() || - metrics_filter_is_complete_report_filter_for("f128") || - metrics_filter_is_complete_report_filter_for("f256"); - } - - [[nodiscard]] inline bool metrics_case_phase_enabled(std::string_view phase) - { - if (phase == "precision") - { - if (!metrics_filter_has_explicit_phase()) - return true; - return metrics_filter_has_tag("precision") || metrics_filter_has_tag("accuracy"); - } - if (phase == "bench") - return metrics_filter_has_tag("bench"); - if (phase == "domain") - { - if (!metrics_filter_has_explicit_phase()) - return true; - return metrics_filter_has_tag("domain"); - } - - return true; - } - - [[nodiscard]] inline bool metrics_filter_selects_phase(std::string_view phase) - { - if (phase == "precision") - return metrics_filter_has_tag("precision") || metrics_filter_has_tag("accuracy"); - if (phase == "bench") - return metrics_filter_has_tag("bench"); - if (phase == "domain") - return metrics_filter_has_tag("domain"); - return false; - } - - [[nodiscard]] inline metrics_console_column_visibility metrics_console_columns_for_current_filter() - { - if (!metrics_filter_has_explicit_phase() || metrics_filter_is_complete_report_filter()) - return {}; - - const bool accuracy_selected = metrics_filter_selects_phase("precision"); - const bool benchmark_selected = metrics_filter_selects_phase("bench"); - return { - accuracy_selected, - metrics_filter_selects_phase("domain"), - benchmark_selected, - accuracy_selected - }; - } - - [[nodiscard]] inline bool metrics_case_assertions_enabled() - { - return true; - } - - [[nodiscard]] inline bool metrics_should_generate_report_for(precision_type precision) - { - const bool f128_selected = metrics_filter_has_tag("f128"); - const bool f256_selected = metrics_filter_has_tag("f256"); - if (!f128_selected && !f256_selected) - return true; - - return precision == precision_type::f128 - ? f128_selected - : f256_selected; - } - - struct metrics_case_report_entry - { - std::string title; - metrics_record record; - }; - - [[nodiscard]] inline std::vector& pending_metrics_case_reports() - { - static std::vector entries; - return entries; - } - - [[nodiscard]] inline std::string_view metrics_case_phase(std::string_view title) noexcept - { - if (title.find("precision") != std::string_view::npos) - return "precision"; - if (title.find("benchmark") != std::string_view::npos) - return "bench"; - if (title.find("domain") != std::string_view::npos) - return "domain"; - return {}; - } - - [[nodiscard]] inline int metrics_case_phase_rank(std::string_view title) noexcept - { - const std::string_view phase = metrics_case_phase(title); - if (phase == "precision") - return 0; - if (phase == "bench") - return 1; - if (phase == "domain") - return 2; - return 3; - } - - inline void clear_pending_metrics_case_reports() - { - pending_metrics_case_reports().clear(); - } - - struct metrics_complete_record_group - { - precision_type precision = precision_type::f128; - std::string domain; - domain_role role = domain_role::primary; - std::string operation; - const metrics_record* precision_record = nullptr; - const metrics_record* benchmark_record = nullptr; - const metrics_record* domain_record = nullptr; - }; - - [[nodiscard]] inline metrics_complete_record_group& find_or_add_complete_record_group( - std::vector& groups, - const metrics_record& record) - { - for (metrics_complete_record_group& group : groups) - { - if (group.precision == record.suite.precision && - group.domain == record.suite.domain.name && - group.role == record.suite.domain.role && - group.operation == record.suite.operation.name) - { - return group; - } - } - - groups.push_back(metrics_complete_record_group{ - record.suite.precision, - std::string{ record.suite.domain.name }, - record.suite.domain.role, - std::string{ record.suite.operation.name } - }); - return groups.back(); - } - - inline void copy_extra_domain_scores( - metrics_record& output, - const metrics_record& domain_record) - { - for (competitor_result& output_competitor : output.extra_competitors) - { - if (const competitor_result* domain_competitor = - find_extra_competitor(domain_record, output_competitor.name)) - { - output_competitor.supported = - output_competitor.supported && domain_competitor->supported; - if (domain_competitor->supported) - { - output_competitor.accuracy.domain_score = - domain_competitor->accuracy.domain_score; - } - } - } - } - - inline void copy_extra_benchmarks( - metrics_record& output, - const metrics_record& benchmark_record) - { - for (competitor_result& output_competitor : output.extra_competitors) - { - if (const competitor_result* benchmark_competitor = - find_extra_competitor(benchmark_record, output_competitor.name)) - { - output_competitor.supported = - output_competitor.supported && benchmark_competitor->supported; - if (benchmark_competitor->supported) - output_competitor.benchmark = benchmark_competitor->benchmark; - } - } - } - - [[nodiscard]] inline std::vector make_complete_report_records( - const std::vector& entries, - precision_type precision) - { - std::vector groups; - std::vector records; - for (const metrics_case_report_entry& entry : entries) - { - if (entry.record.suite.precision != precision) - continue; - - const std::string_view phase = metrics_case_phase(entry.title); - if (phase.empty()) - { - records.push_back(entry.record); - continue; - } - - metrics_complete_record_group& group = - find_or_add_complete_record_group(groups, entry.record); - if (phase == "precision") - group.precision_record = &entry.record; - else if (phase == "bench") - group.benchmark_record = &entry.record; - else if (phase == "domain") - group.domain_record = &entry.record; - } - - if (groups.empty()) - return records; - - records.reserve(records.size() + groups.size()); - for (const metrics_complete_record_group& group : groups) - { - if (group.precision_record == nullptr || - group.benchmark_record == nullptr || - group.domain_record == nullptr) - { - return {}; - } - - metrics_record record = *group.precision_record; - record.fltx_accuracy.domain_score = - group.domain_record->fltx_accuracy.domain_score; - record.competitor_supported = - record.competitor_supported && - group.domain_record->competitor_supported && - group.benchmark_record->competitor_supported; - if (group.domain_record->competitor_supported) - { - record.competitor_accuracy.domain_score = - group.domain_record->competitor_accuracy.domain_score; - } - copy_extra_domain_scores(record, *group.domain_record); - - record.fltx_benchmark = group.benchmark_record->fltx_benchmark; - if (group.benchmark_record->competitor_supported) - record.competitor_benchmark = group.benchmark_record->competitor_benchmark; - copy_extra_benchmarks(record, *group.benchmark_record); - - records.push_back(std::move(record)); - } - - std::sort( - records.begin(), - records.end(), - metrics_csv_record_less); - return records; - } - - inline void add_missing_extra_competitors( - metrics_record& output, - const metrics_record& source) - { - for (const competitor_result& competitor : source.extra_competitors) - { - if (find_extra_competitor(output, competitor.name) == nullptr) - output.extra_competitors.push_back(competitor); - } - } - - [[nodiscard]] inline std::vector make_csv_report_records( - const std::vector& entries, - precision_type precision) - { - std::vector groups; - std::vector records; - for (const metrics_case_report_entry& entry : entries) - { - if (entry.record.suite.precision != precision) - continue; - - const std::string_view phase = metrics_case_phase(entry.title); - if (phase.empty()) - { - records.push_back(entry.record); - continue; - } - - metrics_complete_record_group& group = - find_or_add_complete_record_group(groups, entry.record); - if (phase == "precision") - group.precision_record = &entry.record; - else if (phase == "bench") - group.benchmark_record = &entry.record; - else if (phase == "domain") - group.domain_record = &entry.record; - } - - records.reserve(records.size() + groups.size()); - for (const metrics_complete_record_group& group : groups) - { - const metrics_record* base = - group.precision_record != nullptr ? group.precision_record : - group.domain_record != nullptr ? group.domain_record : - group.benchmark_record; - if (base == nullptr) - continue; - - metrics_record record = *base; - if (group.precision_record != nullptr) - add_missing_extra_competitors(record, *group.precision_record); - if (group.domain_record != nullptr) - add_missing_extra_competitors(record, *group.domain_record); - if (group.benchmark_record != nullptr) - add_missing_extra_competitors(record, *group.benchmark_record); - - if (group.domain_record != nullptr) - { - record.fltx_accuracy.domain_score = - group.domain_record->fltx_accuracy.domain_score; - record.competitor_supported = - record.competitor_supported && - group.domain_record->competitor_supported; - if (group.domain_record->competitor_supported) - { - record.competitor_accuracy.domain_score = - group.domain_record->competitor_accuracy.domain_score; - } - copy_extra_domain_scores(record, *group.domain_record); - } - - if (group.benchmark_record != nullptr) - { - record.competitor_supported = - record.competitor_supported && - group.benchmark_record->competitor_supported; - record.fltx_benchmark = group.benchmark_record->fltx_benchmark; - if (group.benchmark_record->competitor_supported) - record.competitor_benchmark = group.benchmark_record->competitor_benchmark; - copy_extra_benchmarks(record, *group.benchmark_record); - } - - records.push_back(std::move(record)); - } - - std::sort( - records.begin(), - records.end(), - metrics_csv_record_less); - return records; - } - - inline void write_automatic_metrics_report( - std::ostream& out, - const std::vector& entries, - precision_type precision) - { - if (!metrics_should_generate_report_for(precision)) - return; - - std::vector records = make_csv_report_records(entries, precision); - if (records.empty()) - return; - - const std::string_view precision_name = precision == precision_type::f128 ? "f128" : "f256"; - const std::string output_path = metrics_output_path(precision_name, "", "csv"); - write_csv_report(output_path, records); - - if (metrics_verbose_enabled()) - { - out << "\n[metrics report]\n" - << precision_name << " csv = " << output_path << '\n'; - } - } - - [[nodiscard]] inline std::size_t metrics_phase_entry_count_for_precision( - const std::vector& entries, - precision_type precision) noexcept - { - std::size_t count = 0; - for (const metrics_case_report_entry& entry : entries) - { - if (entry.record.suite.precision == precision && - !metrics_case_phase(entry.title).empty()) - { - ++count; - } - } - return count; - } - - [[nodiscard]] inline std::size_t metrics_primary_record_count( - const std::vector& records) noexcept - { - std::size_t count = 0; - for (const metrics_record& record : records) - { - if (record.suite.domain.role == domain_role::primary) - ++count; - } - return count; - } - - inline void write_complete_metrics_case_reports( - std::ostream& out, - const std::vector& f128_records, - const std::vector& f256_records) - { - if (!f128_records.empty()) - write_console_report( - out, - "f128 primary metrics results", - f128_records, - 0.005, - 0.01, - metrics_console_columns_for_current_filter()); - if (!f256_records.empty()) - write_console_report( - out, - "f256 primary metrics results", - f256_records, - 0.005, - 0.01, - metrics_console_columns_for_current_filter()); - } - - inline void write_metrics_case_report_group( - std::ostream& out, - std::string_view primary_title, - std::string_view stress_title, - const std::vector& records) - { - std::vector primary_records; - std::vector stress_records; - primary_records.reserve(records.size()); - stress_records.reserve(records.size()); - - for (const metrics_record& record : records) - { - if (record.suite.domain.role == domain_role::stress) - stress_records.push_back(record); - else - primary_records.push_back(record); - } - - if (!primary_records.empty()) - write_console_report( - out, - primary_title, - primary_records, - 0.005, - 0.01, - metrics_console_columns_for_current_filter()); - if (!stress_records.empty()) - write_console_report( - out, - stress_title, - stress_records, - 0.005, - 0.01, - metrics_console_columns_for_current_filter()); - } - - [[nodiscard]] inline std::string metrics_report_title_for(const metrics_record& record) - { - std::string title = std::string(to_string(record.suite.precision)); - title += record.suite.domain.role == domain_role::stress - ? " mixed workload metrics results" - : " primary metrics results"; - return title; - } - - inline void write_partial_metrics_case_reports( - std::ostream& out, - const std::vector& entries) - { - if (metrics_should_generate_report_for(precision_type::f128)) - { - write_metrics_case_report_group( - out, - "f128 primary metrics results", - "f128 mixed workload metrics results", - make_csv_report_records(entries, precision_type::f128)); - } - - if (metrics_should_generate_report_for(precision_type::f256)) - { - write_metrics_case_report_group( - out, - "f256 primary metrics results", - "f256 mixed workload metrics results", - make_csv_report_records(entries, precision_type::f256)); - } - } - - [[nodiscard]] inline bool try_make_complete_report_record( - const std::vector& entries, - const metrics_record& source_record, - metrics_record& output) - { - const metrics_record* precision_record = nullptr; - const metrics_record* benchmark_record = nullptr; - const metrics_record* domain_record = nullptr; - - for (const metrics_case_report_entry& entry : entries) - { - if (entry.record.suite.precision != source_record.suite.precision || - entry.record.suite.domain.name != source_record.suite.domain.name || - entry.record.suite.domain.role != source_record.suite.domain.role || - entry.record.suite.operation.name != source_record.suite.operation.name) - { - continue; - } - - const std::string_view phase = metrics_case_phase(entry.title); - if (phase == "precision") - precision_record = &entry.record; - else if (phase == "bench") - benchmark_record = &entry.record; - else if (phase == "domain") - domain_record = &entry.record; - } - - if (precision_record == nullptr || - benchmark_record == nullptr || - domain_record == nullptr) - { - return false; - } - - output = *precision_record; - output.fltx_accuracy.domain_score = - domain_record->fltx_accuracy.domain_score; - output.competitor_supported = - output.competitor_supported && - domain_record->competitor_supported && - benchmark_record->competitor_supported; - if (domain_record->competitor_supported) - { - output.competitor_accuracy.domain_score = - domain_record->competitor_accuracy.domain_score; - } - copy_extra_domain_scores(output, *domain_record); - - output.fltx_benchmark = benchmark_record->fltx_benchmark; - if (benchmark_record->competitor_supported) - output.competitor_benchmark = benchmark_record->competitor_benchmark; - copy_extra_benchmarks(output, *benchmark_record); - return true; - } - - [[nodiscard]] inline bool try_make_selected_phase_report_record( - const std::vector& entries, - const metrics_record& source_record, - metrics_record& output) - { - const metrics_record* precision_record = nullptr; - const metrics_record* benchmark_record = nullptr; - const metrics_record* domain_record = nullptr; - - for (const metrics_case_report_entry& entry : entries) - { - if (entry.record.suite.precision != source_record.suite.precision || - entry.record.suite.domain.name != source_record.suite.domain.name || - entry.record.suite.domain.role != source_record.suite.domain.role || - entry.record.suite.operation.name != source_record.suite.operation.name) - { - continue; - } - - const std::string_view phase = metrics_case_phase(entry.title); - if (phase == "precision") - precision_record = &entry.record; - else if (phase == "bench") - benchmark_record = &entry.record; - else if (phase == "domain") - domain_record = &entry.record; - } - - const bool needs_precision = metrics_filter_selects_phase("precision"); - const bool needs_benchmark = metrics_filter_selects_phase("bench"); - const bool needs_domain = metrics_filter_selects_phase("domain"); - if ((needs_precision && precision_record == nullptr) || - (needs_benchmark && benchmark_record == nullptr) || - (needs_domain && domain_record == nullptr)) - { - return false; - } - - const metrics_record* base = - precision_record != nullptr ? precision_record : - domain_record != nullptr ? domain_record : - benchmark_record; - if (base == nullptr) - return false; - - output = *base; - if (precision_record != nullptr) - add_missing_extra_competitors(output, *precision_record); - if (domain_record != nullptr) - add_missing_extra_competitors(output, *domain_record); - if (benchmark_record != nullptr) - add_missing_extra_competitors(output, *benchmark_record); - - if (domain_record != nullptr) - { - output.fltx_accuracy.domain_score = - domain_record->fltx_accuracy.domain_score; - output.competitor_supported = - output.competitor_supported && - domain_record->competitor_supported; - if (domain_record->competitor_supported) - { - output.competitor_accuracy.domain_score = - domain_record->competitor_accuracy.domain_score; - } - copy_extra_domain_scores(output, *domain_record); - } - - if (benchmark_record != nullptr) - { - output.competitor_supported = - output.competitor_supported && - benchmark_record->competitor_supported; - output.fltx_benchmark = benchmark_record->fltx_benchmark; - if (benchmark_record->competitor_supported) - output.competitor_benchmark = benchmark_record->competitor_benchmark; - copy_extra_benchmarks(output, *benchmark_record); - } - - return true; - } - - [[nodiscard]] inline std::string metrics_realtime_complete_key( - const metrics_record& record) - { - std::string key = std::string(to_string(record.suite.precision)); - key += "|"; - key += record.suite.domain.name; - key += "|"; - key += to_string(record.suite.domain.role); - key += "|"; - key += record.suite.operation.name; - return key; - } - - struct metrics_realtime_table - { - std::string key; - std::string title; - std::string primary_competitor; - std::vector extra_competitors; - std::string fltx_backend; - int operation_column_width = 10; - metrics_console_column_visibility columns; - std::unique_ptr writer; - }; - - struct metrics_realtime_console_state - { - std::vector> tables; - std::vector printed_complete_keys; - std::string current_table_key; - bool printed_any = false; - }; - - [[nodiscard]] inline metrics_realtime_console_state& realtime_metrics_console() - { - static metrics_realtime_console_state state; - return state; - } - - inline void clear_realtime_metrics_console() - { - realtime_metrics_console() = {}; - } - - [[nodiscard]] inline std::string metrics_realtime_table_key( - std::string_view title, - const metrics_record& record) - { - std::string key = std::string(title); - key += "|"; - key += to_string(record.suite.precision); - key += "|"; - key += record.competitor_name; - for (const competitor_result& competitor : record.extra_competitors) - { - key += "|"; - key += competitor.name; - } - return key; - } - - [[nodiscard]] inline std::vector metrics_realtime_extra_views( - const metrics_realtime_table& table) - { - std::vector views; - views.reserve(table.extra_competitors.size()); - for (const std::string& name : table.extra_competitors) - views.push_back(name); - return views; - } - - inline void reset_realtime_metrics_writer( - std::ostream& out, - metrics_realtime_table& table) - { - const std::vector extra_views = - metrics_realtime_extra_views(table); - table.writer = std::make_unique( - out, - table.title, - table.primary_competitor, - extra_views, - table.fltx_backend, - table.operation_column_width, - 0.005, - 0.01, - metrics_console_report_summary{}, - table.columns); - } - - [[nodiscard]] inline metrics_realtime_table& find_or_add_realtime_metrics_table( - std::ostream& out, - std::string_view title, - const metrics_record& record) - { - metrics_realtime_console_state& state = realtime_metrics_console(); - const std::string key = metrics_realtime_table_key(title, record); - for (const std::unique_ptr& table : state.tables) - { - if (table->key == key) - { - if (state.current_table_key != key) - reset_realtime_metrics_writer(out, *table); - state.current_table_key = key; - return *table; - } - } - - auto table = std::make_unique(); - table->key = key; - table->title = std::string(title); - table->primary_competitor = std::string(record.competitor_name); - table->fltx_backend = metrics_fltx_backend_name(record.suite.precision); - table->operation_column_width = std::max( - 10, - static_cast(record.suite.operation.name.size())); - table->columns = metrics_console_columns_for_current_filter(); - table->extra_competitors.reserve(record.extra_competitors.size()); - for (const competitor_result& competitor : record.extra_competitors) - table->extra_competitors.emplace_back(competitor.name); - - reset_realtime_metrics_writer(out, *table); - state.current_table_key = key; - - state.tables.push_back(std::move(table)); - return *state.tables.back(); - } - - inline void write_realtime_metrics_record( - std::ostream& out, - std::string_view title, - const metrics_record& record) - { - if (!metrics_verbose_enabled()) - return; - - metrics_realtime_table& table = - find_or_add_realtime_metrics_table(out, title, record); - table.writer->write_record(record); - realtime_metrics_console().printed_any = true; - } - - [[nodiscard]] inline bool metrics_complete_record_already_printed( - const metrics_record& record) - { - const std::string key = metrics_realtime_complete_key(record); - const auto& printed_keys = realtime_metrics_console().printed_complete_keys; - return std::find(printed_keys.begin(), printed_keys.end(), key) != printed_keys.end(); - } - - inline void mark_metrics_complete_record_printed(const metrics_record& record) - { - realtime_metrics_console().printed_complete_keys.push_back( - metrics_realtime_complete_key(record)); - } - - inline void write_realtime_metrics_case_report( - std::ostream& out, - const std::vector& entries, - std::string_view title, - const metrics_record& record) - { - if (!metrics_verbose_enabled()) - return; - - const std::string_view phase = metrics_case_phase(title); - if (phase.empty()) - { - write_realtime_metrics_record(out, title, record); - return; - } - - if (metrics_filter_has_explicit_phase() && - !metrics_filter_is_complete_report_filter()) - { - if (metrics_filter_phase_count() > 1) - { - if (metrics_complete_record_already_printed(record)) - return; - - metrics_record selected_phase_record; - if (!try_make_selected_phase_report_record(entries, record, selected_phase_record)) - return; - - write_realtime_metrics_record( - out, - metrics_report_title_for(selected_phase_record), - selected_phase_record); - mark_metrics_complete_record_printed(record); - return; - } - - write_realtime_metrics_record(out, "selected metrics results", record); - return; - } - - if (metrics_complete_record_already_printed(record)) - return; - - metrics_record complete_record; - if (!try_make_complete_report_record(entries, record, complete_record)) - return; - - write_realtime_metrics_record(out, metrics_report_title_for(complete_record), complete_record); - mark_metrics_complete_record_printed(record); - } - - inline void write_pending_metrics_case_reports(std::ostream& out) - { - auto& entries = pending_metrics_case_reports(); - if (entries.empty()) - return; - - bool has_precision = false; - bool has_benchmark = false; - bool has_domain = false; - std::stable_sort( - entries.begin(), - entries.end(), - [](const metrics_case_report_entry& lhs, const metrics_case_report_entry& rhs) - { - if (lhs.record.suite.operation.name != rhs.record.suite.operation.name) - return lhs.record.suite.operation.name < rhs.record.suite.operation.name; - return metrics_case_phase_rank(lhs.title) < metrics_case_phase_rank(rhs.title); - }); - - for (const metrics_case_report_entry& entry : entries) - { - const std::string_view phase = metrics_case_phase(entry.title); - has_precision = has_precision || phase == "precision"; - has_benchmark = has_benchmark || phase == "bench"; - has_domain = has_domain || phase == "domain"; - } - - const bool mixed_phases = - (has_precision ? 1 : 0) + - (has_benchmark ? 1 : 0) + - (has_domain ? 1 : 0) > 1; - - const std::vector complete_f128_records = - make_complete_report_records(entries, precision_type::f128); - const std::vector complete_f256_records = - make_complete_report_records(entries, precision_type::f256); - const std::size_t f128_entry_count = - metrics_phase_entry_count_for_precision(entries, precision_type::f128); - const std::size_t f256_entry_count = - metrics_phase_entry_count_for_precision(entries, precision_type::f256); - const bool f128_entries_are_complete = - f128_entry_count == 0 || metrics_primary_record_count(complete_f128_records) * 3 == f128_entry_count; - const bool f256_entries_are_complete = - f256_entry_count == 0 || metrics_primary_record_count(complete_f256_records) * 3 == f256_entry_count; - const bool can_print_complete_records = - (!complete_f128_records.empty() || !complete_f256_records.empty()) && - f128_entries_are_complete && - f256_entries_are_complete; - - if (metrics_verbose_enabled() && - !realtime_metrics_console().printed_any && - can_print_complete_records) - { - write_complete_metrics_case_reports(out, complete_f128_records, complete_f256_records); - } - else if (metrics_verbose_enabled() && !realtime_metrics_console().printed_any) - { - if (mixed_phases) - write_partial_metrics_case_reports(out, entries); - else - { - std::vector records; - records.reserve(entries.size()); - for (const metrics_case_report_entry& entry : entries) - records.push_back(entry.record); - - write_console_report( - out, - "selected metrics results", - records, - 0.005, - 0.01, - metrics_console_columns_for_current_filter()); - } - } - - write_automatic_metrics_report(out, entries, precision_type::f128); - write_automatic_metrics_report(out, entries, precision_type::f256); - entries.clear(); - clear_realtime_metrics_console(); - } - - inline void write_metrics_case_report( - std::string_view title, - const metrics_record& record) - { - pending_metrics_case_reports().push_back( - metrics_case_report_entry{ std::string{ title }, record }); - write_realtime_metrics_case_report( - Catch::cout(), - pending_metrics_case_reports(), - title, - pending_metrics_case_reports().back().record); - } - - inline void write_metrics_report_now( - std::string_view title, - const std::vector& records) - { - if (!metrics_verbose_enabled()) - return; - - write_console_report( - std::cout, - title, - records, - 0.005, - 0.01, - metrics_console_columns_for_current_filter()); - } -} - -#endif diff --git a/tests/metrics/metrics_config.h b/tests/metrics/metrics_config.h deleted file mode 100644 index 32c5f04..0000000 --- a/tests/metrics/metrics_config.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef FLTX_TESTS_METRICS_CONFIG_INCLUDED -#define FLTX_TESTS_METRICS_CONFIG_INCLUDED - -#include - -namespace bl::test::metrics::config -{ - constexpr double accuracy_sample_count_scale = 2.0; // precision sample scale (fixed, no function-local scaling) - constexpr double domain_sample_count_scale = 2.0; // domain sample scale (fixed, no function-local scaling) - - constexpr double benchmark_sample_count_scale = 20.0; // global benchmark sample scale - constexpr double bench_iters_scale = 20.0; // global benchmark iteration scale - constexpr double mixed_sample_count_scale = 0.25; // mixed workload generated sample scale - constexpr double mixed_iters_scale = 0.15; // mixed workload benchmark iteration scale - - [[nodiscard]] constexpr std::size_t scale_count(std::size_t count, double scale) noexcept - { - const auto scaled = static_cast(static_cast(count) * scale); - return scaled == 0 ? std::size_t{ 1 } : scaled; - } - - [[nodiscard]] constexpr std::size_t scale_accuracy_sample_count(std::size_t count) noexcept - { - return scale_count(count, accuracy_sample_count_scale); - } - - [[nodiscard]] constexpr std::size_t scale_domain_sample_count(std::size_t count) noexcept - { - return scale_count(count, domain_sample_count_scale); - } - - [[nodiscard]] constexpr std::size_t scale_benchmark_sample_count(std::size_t count) noexcept - { - return scale_count(count, benchmark_sample_count_scale); - } - - [[nodiscard]] constexpr std::size_t scale_benchmark_iterations(std::size_t count) noexcept - { - return scale_count(count, bench_iters_scale); - } - - [[nodiscard]] constexpr std::size_t scale_mixed_sample_count(std::size_t count) noexcept - { - return scale_count(count, mixed_sample_count_scale); - } - - [[nodiscard]] constexpr std::size_t scale_mixed_iterations(std::size_t count) noexcept - { - return scale_count(count, mixed_iters_scale); - } - -#ifdef NDEBUG - constexpr std::size_t f128_primary_accuracy_random_sample_count = scale_accuracy_sample_count(4096); - constexpr std::size_t f128_primary_benchmark_random_sample_count = scale_benchmark_sample_count(4096); - constexpr std::size_t f128_primary_benchmark_min_iterations = scale_benchmark_iterations(1000000); - constexpr std::size_t f256_primary_accuracy_random_sample_count = scale_accuracy_sample_count(2048); - constexpr std::size_t f256_primary_benchmark_random_sample_count = scale_benchmark_sample_count(2048); - constexpr std::size_t f256_primary_benchmark_min_iterations = scale_benchmark_iterations(200000); - constexpr std::size_t primary_domain_random_sample_count = scale_domain_sample_count(4096); -#else - constexpr std::size_t f128_primary_accuracy_random_sample_count = scale_accuracy_sample_count(128); - constexpr std::size_t f128_primary_benchmark_random_sample_count = scale_benchmark_sample_count(128); - constexpr std::size_t f128_primary_benchmark_min_iterations = scale_benchmark_iterations(20000); - constexpr std::size_t f256_primary_accuracy_random_sample_count = scale_accuracy_sample_count(128); - constexpr std::size_t f256_primary_benchmark_random_sample_count = scale_benchmark_sample_count(128); - constexpr std::size_t f256_primary_benchmark_min_iterations = scale_benchmark_iterations(20000); - constexpr std::size_t primary_domain_random_sample_count = scale_domain_sample_count(64); -#endif -} - -#endif diff --git a/tests/metrics/metrics_domain_samples.h b/tests/metrics/metrics_domain_samples.h deleted file mode 100644 index 3938ae5..0000000 --- a/tests/metrics/metrics_domain_samples.h +++ /dev/null @@ -1,674 +0,0 @@ -#ifndef FLTX_TESTS_METRICS_DOMAIN_SAMPLES_INCLUDED -#define FLTX_TESTS_METRICS_DOMAIN_SAMPLES_INCLUDED - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "metrics_samples.h" - -namespace bl::test::metrics -{ - enum class domain_value_kind - { - wide_real, - reduction_real, - balanced_real, - positive, - positive_balanced, - nonzero_wide_real, - nonzero_balanced_real, - unit_closed, - unit_open, - exp_argument, - exp2_argument, - hyperbolic_argument, - log1p_argument, - acosh_argument, - gamma_argument, - tgamma_argument, - integer_rounding_argument, - pow_exponent - }; - - class domain_sample_rng - { - public: - explicit constexpr domain_sample_rng(std::uint64_t seed) noexcept - : state(seed == 0 ? 0x9e3779b97f4a7c15ull : seed) - { - } - - [[nodiscard]] std::uint64_t next() noexcept - { - std::uint64_t x = state; - x ^= x >> 12; - x ^= x << 25; - x ^= x >> 27; - state = x; - return x * 0x2545f4914f6cdd1dull; - } - - [[nodiscard]] double unit() noexcept - { - return static_cast(next() >> 11) * 0x1.0p-53; - } - - [[nodiscard]] int integer(int min, int max) noexcept - { - const auto span = static_cast(max - min + 1); - return min + static_cast(next() % span); - } - - [[nodiscard]] double sign() noexcept - { - return (next() & 1ull) == 0 ? -1.0 : 1.0; - } - - private: - std::uint64_t state; - }; - - [[nodiscard]] inline std::uint64_t domain_seed(std::string_view text, std::uint64_t salt = 0) noexcept - { - std::uint64_t value = 1469598103934665603ull ^ salt; - for (char c : text) - { - value ^= static_cast(c); - value *= 1099511628211ull; - } - return value; - } - - [[nodiscard]] inline std::size_t configured_domain_random_sample_count(std::size_t fallback) noexcept - { - const char* text = std::getenv("FLTX_DOMAIN_RANDOM_SAMPLES"); - if (text == nullptr || *text == '\0') - return fallback; - - char* end = nullptr; - const unsigned long long value = std::strtoull(text, &end, 10); - return end != text && value > 0ull - ? static_cast(value) - : fallback; - } - - [[nodiscard]] inline bool domain_trace_enabled() noexcept - { - static const bool enabled = [] - { - const char* text = std::getenv("FLTX_DOMAIN_TRACE"); - return text != nullptr && *text != '\0' && *text != '0'; - }(); - return enabled; - } - - inline void trace_domain_value(const value_sample& value) - { - std::cerr << std::hexfloat << value.hi; - if (value.lo != 0.0 || value.x2 != 0.0 || value.x3 != 0.0) - std::cerr << " + [" << value.lo << ", " << value.x2 << ", " << value.x3 << ']'; - std::cerr << std::defaultfloat; - } - - inline void trace_domain_sample( - std::string_view operation, - std::string_view backend_name, - std::size_t index, - const unary_sample& sample) - { - if (!domain_trace_enabled()) - return; - std::cerr << "[domain trace] " << operation << ' ' << backend_name << " sample " << index << " x="; - trace_domain_value(sample.x); - std::cerr << '\n'; - } - - inline void trace_domain_sample( - std::string_view operation, - std::string_view backend_name, - std::size_t index, - const binary_sample& sample) - { - if (!domain_trace_enabled()) - return; - std::cerr << "[domain trace] " << operation << ' ' << backend_name << " sample " << index << " x="; - trace_domain_value(sample.x); - std::cerr << " y="; - trace_domain_value(sample.y); - std::cerr << '\n'; - } - - inline void trace_domain_sample( - std::string_view operation, - std::string_view backend_name, - std::size_t index, - const ternary_sample& sample) - { - if (!domain_trace_enabled()) - return; - std::cerr << "[domain trace] " << operation << ' ' << backend_name << " sample " << index << " x="; - trace_domain_value(sample.x); - std::cerr << " y="; - trace_domain_value(sample.y); - std::cerr << " z="; - trace_domain_value(sample.z); - std::cerr << '\n'; - } - - inline void trace_domain_sample( - std::string_view operation, - std::string_view backend_name, - std::size_t index, - const unary_int_sample& sample) - { - if (!domain_trace_enabled()) - return; - std::cerr << "[domain trace] " << operation << ' ' << backend_name << " sample " << index << " x="; - trace_domain_value(sample.x); - std::cerr << " n=" << sample.n << '\n'; - } - - inline void trace_domain_result( - std::string_view operation, - std::string_view backend_name, - std::size_t index, - double bits) - { - if (!domain_trace_enabled()) - return; - std::cerr << "[domain trace] " << operation << ' ' << backend_name << " sample " << index - << " bits=" << bits << '\n'; - } - - [[nodiscard]] inline bool domain_is_nonzero(domain_value_kind kind) noexcept - { - return kind == domain_value_kind::nonzero_wide_real || - kind == domain_value_kind::nonzero_balanced_real; - } - - [[nodiscard]] inline bool domain_supports_residual(domain_value_kind kind) noexcept - { - switch (kind) - { - case domain_value_kind::wide_real: - case domain_value_kind::reduction_real: - case domain_value_kind::balanced_real: - case domain_value_kind::positive: - case domain_value_kind::positive_balanced: - case domain_value_kind::nonzero_wide_real: - case domain_value_kind::nonzero_balanced_real: - return true; - case domain_value_kind::unit_closed: - case domain_value_kind::unit_open: - case domain_value_kind::exp_argument: - case domain_value_kind::exp2_argument: - case domain_value_kind::hyperbolic_argument: - case domain_value_kind::log1p_argument: - case domain_value_kind::acosh_argument: - case domain_value_kind::gamma_argument: - case domain_value_kind::tgamma_argument: - case domain_value_kind::pow_exponent: - case domain_value_kind::integer_rounding_argument: - return false; - } - return false; - } - - [[nodiscard]] inline bool domain_accepts(domain_value_kind kind, double value) noexcept - { - if (!std::isfinite(value)) - return false; - - const double abs_value = std::fabs(value); - const double wide_limit = std::ldexp(1.0, 900); - const double reduction_limit = std::ldexp(1.0, 20); - const double balanced_limit = std::ldexp(1.0, 450); - const double balanced_min = std::ldexp(1.0, -450); - const double ordinary_argument_min = std::ldexp(1.0, -64); - - switch (kind) - { - case domain_value_kind::wide_real: - return abs_value <= wide_limit; - case domain_value_kind::reduction_real: - return abs_value <= reduction_limit; - case domain_value_kind::balanced_real: - return abs_value <= balanced_limit; - case domain_value_kind::positive: - return value > 0.0 && value <= wide_limit; - case domain_value_kind::positive_balanced: - return value >= balanced_min && value <= balanced_limit; - case domain_value_kind::nonzero_wide_real: - return value != 0.0 && abs_value <= wide_limit; - case domain_value_kind::nonzero_balanced_real: - return abs_value >= balanced_min && abs_value <= balanced_limit; - case domain_value_kind::unit_closed: - return value >= -1.0 && value <= 1.0; - case domain_value_kind::unit_open: - return value > -1.0 && value < 1.0; - case domain_value_kind::exp_argument: - return value >= -700.0 && value <= 700.0; - case domain_value_kind::exp2_argument: - return value >= -1020.0 && value <= 1020.0; - case domain_value_kind::hyperbolic_argument: - return value == 0.0 || - (abs_value >= ordinary_argument_min && value >= -700.0 && value <= 700.0); - case domain_value_kind::log1p_argument: - return value > -1.0 && value <= wide_limit; - case domain_value_kind::acosh_argument: - return value >= 1.0 && value <= wide_limit; - case domain_value_kind::gamma_argument: - if (value < -30.0 || value > 170.0) - return false; - return value > 0.0 || std::fabs(value - std::round(value)) > 0.000000000001; - case domain_value_kind::tgamma_argument: - if (value < -30.0 || value > 170.0) - return false; - if (value > 0.0) - return value >= std::ldexp(1.0, -1023); - return std::fabs(value - std::round(value)) > 0.000000000001; - case domain_value_kind::integer_rounding_argument: - return value >= -1000000.0 && value <= 1000000.0; - case domain_value_kind::pow_exponent: - return value >= -16.0 && value <= 16.0; - } - return false; - } - - inline void append_domain_value( - std::vector& values, - domain_value_kind kind, - double hi, - double lo = 0.0, - double x2 = 0.0, - double x3 = 0.0) - { - if (!domain_accepts(kind, hi)) - return; - if (((hi + lo) + (x2 + x3)) == 0.0 && domain_is_nonzero(kind)) - return; - values.push_back({ "domain", hi, lo, x2, x3 }); - } - - inline void append_domain_neighborhood( - std::vector& values, - domain_value_kind kind, - double center) - { - append_domain_value(values, kind, center); - append_domain_value(values, kind, std::nextafter(center, -std::numeric_limits::infinity())); - append_domain_value(values, kind, std::nextafter(center, std::numeric_limits::infinity())); - - if (center != 0.0 && std::isfinite(center) && domain_supports_residual(kind)) - { - const int exponent = std::ilogb(std::fabs(center)); - append_domain_value( - values, - kind, - center, - std::ldexp(1.0, exponent - 60), - -std::ldexp(1.0, exponent - 113), - std::ldexp(1.0, exponent - 166)); - append_domain_value( - values, - kind, - center, - -std::ldexp(1.0, exponent - 60), - std::ldexp(1.0, exponent - 113), - -std::ldexp(1.0, exponent - 166)); - } - } - - inline void append_domain_landmarks(std::vector& values, domain_value_kind kind) - { - constexpr double pi = 3.14159265358979323846264338327950288; - constexpr double e = 2.71828182845904523536028747135266250; - constexpr double ln2 = 0.69314718055994530941723212145817657; - constexpr double sqrt2 = 1.41421356237309504880168872420969808; - - const double centers[] = { - 0.0, - std::numeric_limits::denorm_min(), - std::numeric_limits::min(), - std::numeric_limits::epsilon(), - 0.25, - 0.5, - 1.0, - 1.5, - 2.0, - 3.0, - 10.0, - pi / 6.0, - pi / 4.0, - pi / 2.0, - pi, - 2.0 * pi, - e, - ln2, - sqrt2 - }; - - for (double center : centers) - { - append_domain_neighborhood(values, kind, center); - append_domain_neighborhood(values, kind, -center); - } - - const int exponents[] = { - -1022, -900, -768, -512, -256, -128, -64, -32, -16, -8, -4, -1, - 0, 1, 4, 8, 16, 32, 64, 128, 256, 512, 768, 900, 1023 - }; - for (int exponent : exponents) - { - const double value = std::ldexp(1.0, exponent); - append_domain_neighborhood(values, kind, value); - append_domain_neighborhood(values, kind, -value); - } - - for (int integer = -8; integer <= 8; ++integer) - { - const double value = static_cast(integer); - append_domain_neighborhood(values, kind, value); - append_domain_neighborhood(values, kind, value + 0.5); - } - } - - [[nodiscard]] inline double signed_log_value(domain_sample_rng& rng, int min_exp, int max_exp) - { - const int exponent = rng.integer(min_exp, max_exp); - return rng.sign() * std::ldexp(1.0 + rng.unit(), exponent); - } - - [[nodiscard]] inline double positive_log_value(domain_sample_rng& rng, int min_exp, int max_exp) - { - const int exponent = rng.integer(min_exp, max_exp); - return std::ldexp(1.0 + rng.unit(), exponent); - } - - [[nodiscard]] inline double bounded_signed_value(domain_sample_rng& rng, double limit) - { - if ((rng.next() & 3ull) == 0) - return rng.sign() * std::ldexp(1.0 + rng.unit(), rng.integer(-30, static_cast(std::log2(limit)))); - return (rng.unit() * 2.0 - 1.0) * limit; - } - - [[nodiscard]] inline double random_domain_value(domain_value_kind kind, domain_sample_rng& rng) - { - switch (kind) - { - case domain_value_kind::wide_real: - case domain_value_kind::nonzero_wide_real: - return signed_log_value(rng, -900, 900); - case domain_value_kind::reduction_real: - return signed_log_value(rng, -20, 20); - case domain_value_kind::balanced_real: - case domain_value_kind::nonzero_balanced_real: - return signed_log_value(rng, -450, 450); - case domain_value_kind::positive: - return positive_log_value(rng, -900, 900); - case domain_value_kind::positive_balanced: - return positive_log_value(rng, -450, 450); - case domain_value_kind::unit_closed: - return rng.unit() * 2.0 - 1.0; - case domain_value_kind::unit_open: - return std::nextafter(rng.unit() * 2.0 - 1.0, 0.0); - case domain_value_kind::exp_argument: - return bounded_signed_value(rng, 700.0); - case domain_value_kind::exp2_argument: - return bounded_signed_value(rng, 1020.0); - case domain_value_kind::hyperbolic_argument: - return bounded_signed_value(rng, 700.0); - case domain_value_kind::log1p_argument: - if ((rng.next() & 3ull) == 0) - return -1.0 + positive_log_value(rng, -900, -1); - return signed_log_value(rng, -900, 900); - case domain_value_kind::acosh_argument: - if ((rng.next() & 3ull) == 0) - return 1.0 + positive_log_value(rng, -900, -1); - return 1.0 + positive_log_value(rng, -900, 900); - case domain_value_kind::gamma_argument: - case domain_value_kind::tgamma_argument: - { - double value = rng.unit() * 200.0 - 30.0; - if (value <= 0.0 && std::fabs(value - std::round(value)) < 0.03125) - value += 0.125; - return value; - } - case domain_value_kind::integer_rounding_argument: - return rng.unit() * 2000000.0 - 1000000.0; - case domain_value_kind::pow_exponent: - return bounded_signed_value(rng, 16.0); - } - return 0.0; - } - - [[nodiscard]] inline value_sample make_random_domain_sample( - domain_value_kind kind, - domain_sample_rng& rng) - { - double hi = 0.0; - do - { - hi = random_domain_value(kind, rng); - } - while (!domain_accepts(kind, hi) || (hi == 0.0 && domain_is_nonzero(kind))); - - double lo = 0.0; - double x2 = 0.0; - double x3 = 0.0; - if (hi != 0.0 && std::isfinite(hi) && domain_supports_residual(kind)) - { - const int exponent = std::ilogb(std::fabs(hi)); - lo = rng.sign() * std::ldexp(0.5 + rng.unit() * 0.5, exponent - 60); - x2 = rng.sign() * std::ldexp(0.5 + rng.unit() * 0.5, exponent - 113); - x3 = rng.sign() * std::ldexp(0.5 + rng.unit() * 0.5, exponent - 166); - } - - return { "domain", hi, lo, x2, x3 }; - } - - [[nodiscard]] inline std::vector make_domain_values( - domain_value_kind kind, - std::size_t random_count, - std::uint64_t seed) - { - std::vector values; - values.reserve(random_count + 256); - append_domain_landmarks(values, kind); - - domain_sample_rng rng{ seed }; - for (std::size_t index = 0; index < random_count; ++index) - values.push_back(make_random_domain_sample(kind, rng)); - - return values; - } - - [[nodiscard]] inline std::vector make_domain_unary_values( - domain_value_kind kind, - std::size_t random_count, - std::uint64_t seed) - { - std::vector samples; - const auto values = make_domain_values(kind, random_count, seed); - samples.reserve(values.size()); - for (const value_sample& value : values) - samples.push_back({ "domain", value }); - return samples; - } - - [[nodiscard]] inline std::vector make_domain_binary_values( - domain_value_kind x_kind, - domain_value_kind y_kind, - std::size_t random_count, - std::uint64_t seed) - { - std::vector samples; - const auto x_values = make_domain_values(x_kind, random_count, seed ^ 0x8da6b343u); - const auto y_values = make_domain_values(y_kind, random_count, seed ^ 0xd8163841u); - const std::size_t count = std::min(x_values.size(), y_values.size()); - samples.reserve(count); - for (std::size_t index = 0; index < count; ++index) - samples.push_back({ "domain", x_values[index], y_values[(index * 37u + 11u) % count] }); - return samples; - } - - [[nodiscard]] inline long double domain_value_estimate(const value_sample& value) noexcept - { - return static_cast(value.hi) + - static_cast(value.lo) + - static_cast(value.x2) + - static_cast(value.x3); - } - - [[nodiscard]] inline bool pow_domain_result_is_representable( - const value_sample& base, - const value_sample& exponent) noexcept - { - const long double base_estimate = domain_value_estimate(base); - const long double exponent_estimate = domain_value_estimate(exponent); - if (!(base_estimate > 0.0L) || !std::isfinite(base_estimate) || !std::isfinite(exponent_estimate)) - return false; - - constexpr long double max_finite_result_log2 = 1000.0L; - const long double result_log2 = std::log2(base_estimate) * exponent_estimate; - return std::isfinite(result_log2) && - result_log2 >= -max_finite_result_log2 && - result_log2 <= max_finite_result_log2; - } - - [[nodiscard]] inline std::vector make_pow_domain_binary_values( - std::size_t random_count, - std::uint64_t seed) - { - std::vector samples; - samples.reserve(random_count + 128); - - std::vector base_landmarks; - std::vector exponent_landmarks; - append_domain_landmarks(base_landmarks, domain_value_kind::positive_balanced); - append_domain_landmarks(exponent_landmarks, domain_value_kind::pow_exponent); - - const std::size_t landmark_count = std::min(base_landmarks.size(), exponent_landmarks.size()); - for (std::size_t index = 0; index < landmark_count; ++index) - { - const value_sample& base = base_landmarks[index]; - const value_sample& exponent = exponent_landmarks[(index * 37u + 11u) % landmark_count]; - if (pow_domain_result_is_representable(base, exponent)) - samples.push_back({ "domain", base, exponent }); - } - - domain_sample_rng rng{ seed ^ 0x6eed0e9da4d94a4bull }; - std::size_t accepted_random = 0; - std::size_t attempts = 0; - const std::size_t max_attempts = std::max(random_count * 128u, 1024u); - while (accepted_random < random_count && attempts++ < max_attempts) - { - const value_sample base = make_random_domain_sample(domain_value_kind::positive_balanced, rng); - const value_sample exponent = make_random_domain_sample(domain_value_kind::pow_exponent, rng); - if (!pow_domain_result_is_representable(base, exponent)) - continue; - - samples.push_back({ "domain", base, exponent }); - ++accepted_random; - } - - return samples; - } - - [[nodiscard]] inline std::vector make_domain_ternary_values( - domain_value_kind x_kind, - domain_value_kind y_kind, - domain_value_kind z_kind, - std::size_t random_count, - std::uint64_t seed) - { - std::vector samples; - const auto x_values = make_domain_values(x_kind, random_count, seed ^ 0x27d4eb2du); - const auto y_values = make_domain_values(y_kind, random_count, seed ^ 0x165667b1u); - const auto z_values = make_domain_values(z_kind, random_count, seed ^ 0x9e3779b9u); - const std::size_t count = std::min({ x_values.size(), y_values.size(), z_values.size() }); - samples.reserve(count); - for (std::size_t index = 0; index < count; ++index) - { - samples.push_back({ - "domain", - x_values[index], - y_values[(index * 37u + 11u) % count], - z_values[(index * 53u + 17u) % count] - }); - } - return samples; - } - - inline void constrain_scaling_shift(double value, int& min_shift, int& max_shift) noexcept - { - if (value == 0.0 || !std::isfinite(value)) - return; - - int exponent = 0; - (void)std::frexp(std::fabs(value), &exponent); - min_shift = std::max(min_shift, -1073 - exponent); - max_shift = std::min(max_shift, 1024 - exponent); - } - - [[nodiscard]] inline bool scaling_shift_bounds( - const value_sample& value, - int& min_shift, - int& max_shift) noexcept - { - min_shift = std::numeric_limits::min(); - max_shift = std::numeric_limits::max(); - constrain_scaling_shift(value.hi, min_shift, max_shift); - constrain_scaling_shift(value.lo, min_shift, max_shift); - constrain_scaling_shift(value.x2, min_shift, max_shift); - constrain_scaling_shift(value.x3, min_shift, max_shift); - return min_shift <= max_shift; - } - - [[nodiscard]] inline std::vector make_domain_unary_int_values( - domain_value_kind kind, - std::size_t random_count, - std::uint64_t seed) - { - std::vector samples; - const auto values = make_domain_values(kind, random_count, seed); - samples.reserve(values.size()); - domain_sample_rng rng{ seed ^ 0x94d049bb133111ebull }; - const int fixed_exponents[] = { - -1024, -900, -512, -128, -32, -1, 0, 1, 32, 128, 512, 900, 1024 - }; - for (std::size_t index = 0; index < values.size(); ++index) - { - int min_shift = 0; - int max_shift = 0; - if (!scaling_shift_bounds(values[index], min_shift, max_shift)) - continue; - - int n = 0; - if (index < sizeof(fixed_exponents) / sizeof(fixed_exponents[0])) - { - n = std::clamp(fixed_exponents[index], min_shift, max_shift); - } - else - { - const int random_min = std::max(min_shift, -900); - const int random_max = std::min(max_shift, 900); - if (random_min > random_max) - continue; - n = rng.integer(random_min, random_max); - } - samples.push_back({ "domain", values[index], n }); - } - return samples; - } -} - -#endif diff --git a/tests/metrics/metrics_f128_accuracy.cpp b/tests/metrics/metrics_f128_accuracy.cpp deleted file mode 100644 index caf6e9a..0000000 --- a/tests/metrics/metrics_f128_accuracy.cpp +++ /dev/null @@ -1,127 +0,0 @@ -#include "metrics_f128_primary.h" -#include "metrics_f128_primary_cases.h" -#include "metrics_case_output.h" - -using namespace bl::test::metrics::f128_primary; - -#define FLTX_F128_UNARY_ACCURACY(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " precision", "[metrics][precision][accuracy][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("precision")) { SUCCEED("metrics precision phase not selected"); return; } \ - const bool enforce_assertions = bl::test::metrics::metrics_case_assertions_enabled(); \ - const auto samples = SAMPLES(); \ - const auto record = run_unary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - [](const auto& x) { return CALL(x); }, \ - false, enforce_assertions); \ - bl::test::metrics::write_metrics_case_report("f128 primary precision: " #NAME, record); \ - if (enforce_assertions) check_competitor_slack(record); \ - } - -#define FLTX_F128_BINARY_ACCURACY(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " precision", "[metrics][precision][accuracy][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("precision")) { SUCCEED("metrics precision phase not selected"); return; } \ - const bool enforce_assertions = bl::test::metrics::metrics_case_assertions_enabled(); \ - const auto samples = SAMPLES(); \ - const auto record = run_binary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y) { return CALL(x, y); }, \ - [](const auto& x, const auto& y) { return REF_CALL(x, y); }, \ - false, enforce_assertions); \ - bl::test::metrics::write_metrics_case_report("f128 primary precision: " #NAME, record); \ - if (enforce_assertions) check_competitor_slack(record); \ - } - -#define FLTX_F128_BINARY_BOOL_ACCURACY(NAME, LABEL, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " LABEL " precision", "[metrics][precision][accuracy][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("precision")) { SUCCEED("metrics precision phase not selected"); return; } \ - const bool enforce_assertions = bl::test::metrics::metrics_case_assertions_enabled(); \ - const auto samples = SAMPLES(); \ - const auto record = run_binary_bool_case( \ - LABEL, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y) { return CALL(x, y); }, \ - [](const auto& x, const auto& y) { return REF_CALL(x, y); }, \ - false, enforce_assertions); \ - bl::test::metrics::write_metrics_case_report("f128 primary precision: " LABEL, record); \ - if (enforce_assertions) check_competitor_slack(record); \ - } - -#define FLTX_F128_TERNARY_ACCURACY(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " precision", "[metrics][precision][accuracy][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("precision")) { SUCCEED("metrics precision phase not selected"); return; } \ - const bool enforce_assertions = bl::test::metrics::metrics_case_assertions_enabled(); \ - const auto samples = SAMPLES(); \ - const auto record = run_ternary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y, const auto& z) { return CALL(x, y, z); }, \ - [](const auto& x, const auto& y, const auto& z) { return REF_CALL(x, y, z); }, \ - false, enforce_assertions); \ - bl::test::metrics::write_metrics_case_report("f128 primary precision: " #NAME, record); \ - if (enforce_assertions) check_competitor_slack(record); \ - } - -#define FLTX_F128_UNARY_INT_ACCURACY(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " precision", "[metrics][precision][accuracy][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("precision")) { SUCCEED("metrics precision phase not selected"); return; } \ - const bool enforce_assertions = bl::test::metrics::metrics_case_assertions_enabled(); \ - const auto samples = SAMPLES(); \ - const auto record = run_unary_int_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, int n) { return CALL(x, n); }, \ - [](const auto& x, int n) { return CALL(x, n); }, \ - false, enforce_assertions); \ - bl::test::metrics::write_metrics_case_report("f128 primary precision: " #NAME, record); \ - if (enforce_assertions) check_competitor_slack(record); \ - } - -#define FLTX_F128_UNARY_INTEGER_ACCURACY(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " precision", "[metrics][precision][accuracy][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("precision")) { SUCCEED("metrics precision phase not selected"); return; } \ - const bool enforce_assertions = bl::test::metrics::metrics_case_assertions_enabled(); \ - const auto samples = SAMPLES(); \ - const auto record = run_unary_integer_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - [](const auto& x) { return REF_CALL(x); }, \ - false, enforce_assertions); \ - bl::test::metrics::write_metrics_case_report("f128 primary precision: " #NAME, record); \ - if (enforce_assertions) check_competitor_slack(record); \ - } - -#define FLTX_F128_FREXP_ACCURACY(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " precision", "[metrics][precision][accuracy][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("precision")) { SUCCEED("metrics precision phase not selected"); return; } \ - const bool enforce_assertions = bl::test::metrics::metrics_case_assertions_enabled(); \ - const auto samples = SAMPLES(); \ - const auto record = run_frexp_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - false, enforce_assertions); \ - bl::test::metrics::write_metrics_case_report("f128 primary precision: " #NAME, record); \ - if (enforce_assertions) check_competitor_slack(record); \ - } - -FLTX_F128_PRIMARY_CASES( - FLTX_F128_UNARY_ACCURACY, - FLTX_F128_BINARY_ACCURACY, - FLTX_F128_TERNARY_ACCURACY, - FLTX_F128_UNARY_INT_ACCURACY, - FLTX_F128_UNARY_INTEGER_ACCURACY, - FLTX_F128_FREXP_ACCURACY) - -FLTX_F128_PRIMARY_COMPARISON_CASES(FLTX_F128_BINARY_BOOL_ACCURACY) - -#undef FLTX_F128_UNARY_ACCURACY -#undef FLTX_F128_BINARY_ACCURACY -#undef FLTX_F128_BINARY_BOOL_ACCURACY -#undef FLTX_F128_TERNARY_ACCURACY -#undef FLTX_F128_UNARY_INT_ACCURACY -#undef FLTX_F128_UNARY_INTEGER_ACCURACY -#undef FLTX_F128_FREXP_ACCURACY diff --git a/tests/metrics/metrics_f128_bench.cpp b/tests/metrics/metrics_f128_bench.cpp deleted file mode 100644 index 8d799f9..0000000 --- a/tests/metrics/metrics_f128_bench.cpp +++ /dev/null @@ -1,127 +0,0 @@ -#include "metrics_f128_primary.h" -#include "metrics_f128_primary_cases.h" -#include "metrics_case_output.h" - -using namespace bl::test::metrics::f128_primary; - -#define FLTX_F128_UNARY_BENCH(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " benchmark", "[metrics][bench][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("bench")) { SUCCEED("metrics benchmark phase not selected"); return; } \ - const scoped_benchmark_sample_count benchmark_samples{ #NAME }; \ - const auto samples = SAMPLES(); \ - const auto record = run_unary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - [](const auto& x) { return CALL(x); }, \ - true, false, domain_ideal_bits, false); \ - bl::test::metrics::write_metrics_case_report("f128 primary benchmark: " #NAME, record); \ - check_benchmark_claim_is_meaningful(record); \ - } - -#define FLTX_F128_BINARY_BENCH(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " benchmark", "[metrics][bench][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("bench")) { SUCCEED("metrics benchmark phase not selected"); return; } \ - const scoped_benchmark_sample_count benchmark_samples{ #NAME }; \ - const auto samples = SAMPLES(); \ - const auto record = run_binary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y) { return CALL(x, y); }, \ - [](const auto& x, const auto& y) { return REF_CALL(x, y); }, \ - true, false, domain_ideal_bits, false); \ - bl::test::metrics::write_metrics_case_report("f128 primary benchmark: " #NAME, record); \ - check_benchmark_claim_is_meaningful(record); \ - } - -#define FLTX_F128_BINARY_BOOL_BENCH(NAME, LABEL, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " LABEL " benchmark", "[metrics][bench][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("bench")) { SUCCEED("metrics benchmark phase not selected"); return; } \ - const scoped_benchmark_sample_count benchmark_samples{ LABEL }; \ - const auto samples = SAMPLES(); \ - const auto record = run_binary_bool_case( \ - LABEL, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y) { return CALL(x, y); }, \ - [](const auto& x, const auto& y) { return REF_CALL(x, y); }, \ - true, false, domain_ideal_bits, false); \ - bl::test::metrics::write_metrics_case_report("f128 primary benchmark: " LABEL, record); \ - check_benchmark_claim_is_meaningful(record); \ - } - -#define FLTX_F128_TERNARY_BENCH(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " benchmark", "[metrics][bench][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("bench")) { SUCCEED("metrics benchmark phase not selected"); return; } \ - const scoped_benchmark_sample_count benchmark_samples{ #NAME }; \ - const auto samples = SAMPLES(); \ - const auto record = run_ternary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y, const auto& z) { return CALL(x, y, z); }, \ - [](const auto& x, const auto& y, const auto& z) { return REF_CALL(x, y, z); }, \ - true, false, domain_ideal_bits, false); \ - bl::test::metrics::write_metrics_case_report("f128 primary benchmark: " #NAME, record); \ - check_benchmark_claim_is_meaningful(record); \ - } - -#define FLTX_F128_UNARY_INT_BENCH(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " benchmark", "[metrics][bench][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("bench")) { SUCCEED("metrics benchmark phase not selected"); return; } \ - const scoped_benchmark_sample_count benchmark_samples{ #NAME }; \ - const auto samples = SAMPLES(); \ - const auto record = run_unary_int_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, int n) { return CALL(x, n); }, \ - [](const auto& x, int n) { return CALL(x, n); }, \ - true, false, domain_ideal_bits, false); \ - bl::test::metrics::write_metrics_case_report("f128 primary benchmark: " #NAME, record); \ - check_benchmark_claim_is_meaningful(record); \ - } - -#define FLTX_F128_UNARY_INTEGER_BENCH(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " benchmark", "[metrics][bench][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("bench")) { SUCCEED("metrics benchmark phase not selected"); return; } \ - const scoped_benchmark_sample_count benchmark_samples{ #NAME }; \ - const auto samples = SAMPLES(); \ - const auto record = run_unary_integer_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - [](const auto& x) { return REF_CALL(x); }, \ - true, false, domain_ideal_bits, false); \ - bl::test::metrics::write_metrics_case_report("f128 primary benchmark: " #NAME, record); \ - check_benchmark_claim_is_meaningful(record); \ - } - -#define FLTX_F128_FREXP_BENCH(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " benchmark", "[metrics][bench][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("bench")) { SUCCEED("metrics benchmark phase not selected"); return; } \ - const scoped_benchmark_sample_count benchmark_samples{ #NAME }; \ - const auto samples = SAMPLES(); \ - const auto record = run_frexp_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - true, false, domain_ideal_bits, false); \ - bl::test::metrics::write_metrics_case_report("f128 primary benchmark: " #NAME, record); \ - check_benchmark_claim_is_meaningful(record); \ - } - -FLTX_F128_PRIMARY_CASES( - FLTX_F128_UNARY_BENCH, - FLTX_F128_BINARY_BENCH, - FLTX_F128_TERNARY_BENCH, - FLTX_F128_UNARY_INT_BENCH, - FLTX_F128_UNARY_INTEGER_BENCH, - FLTX_F128_FREXP_BENCH) - -FLTX_F128_PRIMARY_COMPARISON_CASES(FLTX_F128_BINARY_BOOL_BENCH) - -#undef FLTX_F128_UNARY_BENCH -#undef FLTX_F128_BINARY_BENCH -#undef FLTX_F128_BINARY_BOOL_BENCH -#undef FLTX_F128_TERNARY_BENCH -#undef FLTX_F128_UNARY_INT_BENCH -#undef FLTX_F128_UNARY_INTEGER_BENCH -#undef FLTX_F128_FREXP_BENCH diff --git a/tests/metrics/metrics_f128_domain.cpp b/tests/metrics/metrics_f128_domain.cpp deleted file mode 100644 index 05ff2fd..0000000 --- a/tests/metrics/metrics_f128_domain.cpp +++ /dev/null @@ -1,120 +0,0 @@ -#include "metrics_f128_primary.h" -#include "metrics_f128_primary_cases.h" -#include "metrics_case_output.h" - -using namespace bl::test::metrics::f128_primary; - -#define FLTX_F128_UNARY_DOMAIN(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " domain", "[metrics][domain][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("domain")) { SUCCEED("metrics domain phase not selected"); return; } \ - const auto samples = make_domain_unary_samples(#NAME); \ - const auto record = run_unary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - [](const auto& x) { return CALL(x); }, \ - false, false); \ - bl::test::metrics::write_metrics_case_report("f128 primary domain: " #NAME, record); \ - CHECK(record.fltx_accuracy.sample_count > 0); \ - } - -#define FLTX_F128_BINARY_DOMAIN(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " domain", "[metrics][domain][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("domain")) { SUCCEED("metrics domain phase not selected"); return; } \ - const auto samples = make_domain_binary_samples(#NAME); \ - const auto record = run_binary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y) { return CALL(x, y); }, \ - [](const auto& x, const auto& y) { return REF_CALL(x, y); }, \ - false, false); \ - bl::test::metrics::write_metrics_case_report("f128 primary domain: " #NAME, record); \ - CHECK(record.fltx_accuracy.sample_count > 0); \ - } - -#define FLTX_F128_BINARY_BOOL_DOMAIN(NAME, LABEL, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " LABEL " domain", "[metrics][domain][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("domain")) { SUCCEED("metrics domain phase not selected"); return; } \ - const auto samples = make_domain_binary_samples(LABEL); \ - const auto record = run_binary_bool_case( \ - LABEL, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y) { return CALL(x, y); }, \ - [](const auto& x, const auto& y) { return REF_CALL(x, y); }, \ - false, false); \ - bl::test::metrics::write_metrics_case_report("f128 primary domain: " LABEL, record); \ - CHECK(record.fltx_accuracy.sample_count > 0); \ - } - -#define FLTX_F128_TERNARY_DOMAIN(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " domain", "[metrics][domain][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("domain")) { SUCCEED("metrics domain phase not selected"); return; } \ - const auto samples = make_domain_ternary_samples(#NAME); \ - const auto record = run_ternary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y, const auto& z) { return CALL(x, y, z); }, \ - [](const auto& x, const auto& y, const auto& z) { return REF_CALL(x, y, z); }, \ - false, false); \ - bl::test::metrics::write_metrics_case_report("f128 primary domain: " #NAME, record); \ - CHECK(record.fltx_accuracy.sample_count > 0); \ - } - -#define FLTX_F128_UNARY_INT_DOMAIN(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " domain", "[metrics][domain][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("domain")) { SUCCEED("metrics domain phase not selected"); return; } \ - const auto samples = make_domain_unary_int_samples(#NAME); \ - const auto record = run_unary_int_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, int n) { return CALL(x, n); }, \ - [](const auto& x, int n) { return CALL(x, n); }, \ - false, false); \ - bl::test::metrics::write_metrics_case_report("f128 primary domain: " #NAME, record); \ - CHECK(record.fltx_accuracy.sample_count > 0); \ - } - -#define FLTX_F128_UNARY_INTEGER_DOMAIN(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " domain", "[metrics][domain][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("domain")) { SUCCEED("metrics domain phase not selected"); return; } \ - const auto samples = make_domain_unary_samples(#NAME); \ - const auto record = run_unary_integer_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - [](const auto& x) { return REF_CALL(x); }, \ - false, false); \ - bl::test::metrics::write_metrics_case_report("f128 primary domain: " #NAME, record); \ - CHECK(record.fltx_accuracy.sample_count > 0); \ - } - -#define FLTX_F128_FREXP_DOMAIN(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f128 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " domain", "[metrics][domain][fltx][f128][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("domain")) { SUCCEED("metrics domain phase not selected"); return; } \ - const auto samples = make_domain_unary_samples(#NAME); \ - const auto record = run_frexp_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - false, false); \ - bl::test::metrics::write_metrics_case_report("f128 primary domain: " #NAME, record); \ - CHECK(record.fltx_accuracy.sample_count > 0); \ - } - -FLTX_F128_PRIMARY_CASES( - FLTX_F128_UNARY_DOMAIN, - FLTX_F128_BINARY_DOMAIN, - FLTX_F128_TERNARY_DOMAIN, - FLTX_F128_UNARY_INT_DOMAIN, - FLTX_F128_UNARY_INTEGER_DOMAIN, - FLTX_F128_FREXP_DOMAIN) - -FLTX_F128_PRIMARY_COMPARISON_CASES(FLTX_F128_BINARY_BOOL_DOMAIN) - -#undef FLTX_F128_UNARY_DOMAIN -#undef FLTX_F128_BINARY_DOMAIN -#undef FLTX_F128_BINARY_BOOL_DOMAIN -#undef FLTX_F128_TERNARY_DOMAIN -#undef FLTX_F128_UNARY_INT_DOMAIN -#undef FLTX_F128_UNARY_INTEGER_DOMAIN -#undef FLTX_F128_FREXP_DOMAIN diff --git a/tests/metrics/metrics_f128_primary.h b/tests/metrics/metrics_f128_primary.h deleted file mode 100644 index 25c7896..0000000 --- a/tests/metrics/metrics_f128_primary.h +++ /dev/null @@ -1,3100 +0,0 @@ -#ifndef FLTX_TESTS_METRICS_F128_PRIMARY_INCLUDED -#define FLTX_TESTS_METRICS_F128_PRIMARY_INCLUDED - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "metrics_config.h" -#include "metrics_records.h" -#include "metrics_domain_samples.h" -#include "metrics_qdpp.h" -#include "metrics_reference.h" -#include "metrics_samples.h" -#include "metrics_std_special_oracle.h" - -namespace bl::test::metrics::f128_primary -{ - using references = reference_types; - using fltx_type = references::fltx_type; - using perfect_ref = references::perfect_ref; - using competitor_ref = references::competitor_ref; - using extra_competitor_ref = references::extra_competitor_ref; - - constexpr domain_id primary_domain{ "primary", domain_role::primary }; - constexpr double competitor_accuracy_slack_bits = 16.0; - - constexpr std::size_t accuracy_random_sample_count = config::f128_primary_accuracy_random_sample_count; - constexpr std::size_t benchmark_random_sample_count = config::f128_primary_benchmark_random_sample_count; - constexpr std::size_t benchmark_min_iterations = config::f128_primary_benchmark_min_iterations; - - constexpr double bits_90 = 90.0; - constexpr double bits_80 = 80.0; - constexpr double bits_75 = 75.0; - constexpr double bits_40 = 40.0; - constexpr double domain_ideal_bits = 106.0; - - constexpr std::size_t default_domain_random_sample_count = config::primary_domain_random_sample_count; - - inline thread_local std::size_t active_random_sample_count = accuracy_random_sample_count; - - [[nodiscard]] inline std::size_t random_sample_count() noexcept - { - return active_random_sample_count; - } - - [[nodiscard]] inline double benchmark_local_sample_scale(std::string_view operation) noexcept - { - if (operation == "erf" || operation == "erfc" || operation == "lgamma" || operation == "tgamma") - return 0.25; - - if (operation == "asin" || operation == "acos" || operation == "atan" || operation == "atan2" - || operation == "atanh" || operation == "asinh" || operation == "acosh" || operation == "pow") - return 0.25; - - if (operation == "cbrt" || operation == "sin" || operation == "cos" || operation == "tan" - || operation == "exp" || operation == "exp2" || operation == "expm1" || operation == "log" - || operation == "log2" || operation == "log10" || operation == "log1p" - || operation == "sinh" || operation == "cosh" || operation == "tanh") - return 0.25; - - if (operation == "fmod" || operation == "remainder" || operation == "remquo") - return 0.5; - - return 1.0; - } - - [[nodiscard]] inline bool is_short_rounding_benchmark(std::string_view operation) noexcept - { - return operation == "floor" || operation == "ceil" || operation == "trunc" || - operation == "round" || operation == "nearbyint" || operation == "rint"; - } - - [[nodiscard]] inline bool is_integer_rounding_benchmark(std::string_view operation) noexcept - { - return operation == "lround" || operation == "llround" || - operation == "lrint" || operation == "llrint"; - } - - [[nodiscard]] inline bool is_short_utility_benchmark(std::string_view operation) noexcept - { - return operation == "fma" || operation == "fabs" || operation == "fdim" || - operation == "ldexp" || operation == "modf" || operation == "frexp" || - operation == "nextafter" || operation == "nexttoward"; - } - - [[nodiscard]] inline bool is_comparison_benchmark(std::string_view operation) noexcept - { - return operation == "operator==" || operation == "operator!=" || - operation == "operator<" || operation == "operator>" || - operation == "operator<=" || operation == "operator>="; - } - - [[nodiscard]] inline std::size_t benchmark_sample_count(std::string_view operation) noexcept - { - return config::scale_count(benchmark_random_sample_count, benchmark_local_sample_scale(operation)); - } - - class scoped_benchmark_sample_count - { - public: - explicit scoped_benchmark_sample_count(std::string_view operation) noexcept - : previous_count(active_random_sample_count) - { - active_random_sample_count = benchmark_sample_count(operation); - } - - scoped_benchmark_sample_count(const scoped_benchmark_sample_count&) = delete; - scoped_benchmark_sample_count& operator=(const scoped_benchmark_sample_count&) = delete; - - ~scoped_benchmark_sample_count() - { - active_random_sample_count = previous_count; - } - - private: - std::size_t previous_count; - }; - - [[nodiscard]] inline std::size_t domain_random_sample_count() noexcept - { - return configured_domain_random_sample_count(default_domain_random_sample_count); - } - - class sample_rng - { - public: - BL_FORCE_INLINE constexpr explicit sample_rng(std::uint64_t seed) noexcept - : engine(seed) - { - } - - [[nodiscard]] BL_FORCE_INLINE fltx_type unit() noexcept - { - bl::uniform_real_distribution distribution{ fltx_type{ 0.0 }, fltx_type{ 1.0 } }; - return distribution(engine); - } - - [[nodiscard]] BL_FORCE_INLINE double sign() noexcept - { - bl::uniform_int_distribution distribution{ 0, 1 }; - return distribution(engine) != 0 ? 1.0 : -1.0; - } - - [[nodiscard]] BL_FORCE_INLINE int integer(int min, int max) noexcept - { - bl::uniform_int_distribution distribution{ min, max }; - return distribution(engine); - } - - [[nodiscard]] BL_FORCE_INLINE fltx_type uniform(double min, double max) noexcept - { - bl::uniform_real_distribution distribution{ fltx_type{ min }, fltx_type{ max } }; - return distribution(engine); - } - - private: - bl::mt19937_64 engine; - }; - - [[nodiscard]] inline value_sample make_runtime_value(std::string_view label, double hi, double lo = 0.0) noexcept - { - const auto value = bl::detail::_f128::renorm(hi, lo); - return { label, value.hi, value.lo }; - } - - [[nodiscard]] inline value_sample make_runtime_value(std::string_view label, const fltx_type& value) noexcept - { - return { label, value.hi, value.lo }; - } - - [[nodiscard]] inline value_sample make_runtime_value( - std::string_view label, - const fltx_type& value, - const fltx_type& residual) noexcept - { - return make_runtime_value(label, value + residual); - } - - [[nodiscard]] inline fltx_type uniform_value(sample_rng& rng, double min, double max) noexcept - { - return rng.uniform(min, max); - } - - [[nodiscard]] inline fltx_type signed_log_value(sample_rng& rng, int min_exp, int max_exp) noexcept - { - const int exponent = rng.integer(min_exp, max_exp); - const fltx_type value = bl::ldexp(fltx_type{ 1.0 } + rng.unit(), exponent); - return rng.sign() > 0.0 ? value : fltx_type{ -value }; - } - - [[nodiscard]] inline fltx_type positive_log_value(sample_rng& rng, int min_exp, int max_exp) noexcept - { - const int exponent = rng.integer(min_exp, max_exp); - return bl::ldexp(fltx_type{ 1.0 } + rng.unit(), exponent); - } - - [[nodiscard]] inline fltx_type residual_for(const fltx_type& value, sample_rng& rng) noexcept - { - const double hi = value.hi; - if (hi == 0.0 || !std::isfinite(hi)) - return fltx_type{ 0.0 }; - - const int exponent = std::ilogb(std::fabs(hi)); - const fltx_type residual = bl::ldexp(fltx_type{ 0.5 } + rng.unit(), exponent - 60); - return rng.sign() > 0.0 ? residual : fltx_type{ -residual }; - } - - [[nodiscard]] inline fltx_type positive_residual_for(const fltx_type& value, sample_rng& rng) noexcept - { - const fltx_type residual = residual_for(value, rng); - return residual.hi < 0.0 ? fltx_type{ -residual } : residual; - } - - [[nodiscard]] inline fltx_type make_fltx(const value_sample& value) noexcept - { - return fltx_type{ value.hi, value.lo }; - } - - [[nodiscard]] inline bool value_sample_is_zero(const value_sample& value) noexcept - { - return value.hi == 0.0 && value.lo == 0.0; - } - - [[nodiscard]] inline bool value_sample_signbit(const value_sample& value) noexcept - { - return detail::fp::signbit(value.hi); - } - - [[nodiscard]] inline perfect_ref signed_zero_perfect(bool negative) - { - return perfect_ref{ negative ? "-0" : "0" }; - } - - [[nodiscard]] inline competitor_ref make_competitor(const value_sample& value) - { - if (value_sample_is_zero(value)) - return competitor_ref{ value_sample_signbit(value) ? "-0" : "0" }; - return competitor_ref{ value.hi } + competitor_ref{ value.lo }; - } - - [[nodiscard]] inline extra_competitor_ref make_extra_competitor(const value_sample& value) - { - return qdpp::make(value.hi, value.lo); - } - - [[nodiscard]] inline perfect_ref make_perfect(const value_sample& value) - { - if (value_sample_is_zero(value)) - return signed_zero_perfect(value_sample_signbit(value)); - return perfect_ref{ value.hi } + perfect_ref{ value.lo }; - } - - [[nodiscard]] inline perfect_ref to_perfect(const fltx_type& value) - { - if (bl::iszero(value)) - return signed_zero_perfect(bl::signbit(value)); - return perfect_ref{ value.hi } + perfect_ref{ value.lo }; - } - - [[nodiscard]] inline perfect_ref to_perfect(const competitor_ref& value) - { - using boost::multiprecision::signbit; - if (value == 0 && signbit(value)) - return signed_zero_perfect(true); - const auto parts = value.backend().crep(); - return perfect_ref{ parts.first } + perfect_ref{ parts.second }; - } - - [[nodiscard]] inline perfect_ref to_perfect(const extra_competitor_ref& value) - { - if (value.x[0] == 0.0 && value.x[1] == 0.0) - { - return signed_zero_perfect(detail::fp::signbit(value.x[0])); - } - return perfect_ref{ value.x[0] } + perfect_ref{ value.x[1] }; - } - - enum class special_value_kind - { - nan, - infinity, - zero, - finite - }; - - struct special_value_state - { - special_value_kind kind = special_value_kind::finite; - bool negative = false; - perfect_ref finite_value = 0; - }; - - [[nodiscard]] inline special_value_state classify_special_ref(const perfect_ref& value) - { - const double approximate = static_cast(value); - if (std::isnan(approximate)) - return { special_value_kind::nan, false, 0 }; - if (std::isinf(approximate)) - return { special_value_kind::infinity, std::signbit(approximate), 0 }; - - using boost::multiprecision::signbit; - if (value == 0) - return { special_value_kind::zero, signbit(value), 0 }; - return { special_value_kind::finite, signbit(value), value }; - } - - [[nodiscard]] inline special_value_state classify_special_double(double value) - { - if (std::isnan(value)) - return { special_value_kind::nan, false, 0 }; - if (std::isinf(value)) - return { special_value_kind::infinity, std::signbit(value), 0 }; - if (value == 0.0) - return { special_value_kind::zero, std::signbit(value), 0 }; - return { special_value_kind::finite, std::signbit(value), perfect_ref{ value } }; - } - - [[nodiscard]] inline special_value_state classify_special_value(const fltx_type& value) - { - if (bl::isnan(value)) - return { special_value_kind::nan, false, 0 }; - if (bl::isinf(value)) - return { special_value_kind::infinity, bl::signbit(value), 0 }; - if (bl::iszero(value)) - return { special_value_kind::zero, bl::signbit(value), 0 }; - return { special_value_kind::finite, bl::signbit(value), to_perfect(value) }; - } - - [[nodiscard]] inline special_value_state classify_special_value(const competitor_ref& value) - { - return classify_special_ref(to_perfect(value)); - } - - [[nodiscard]] inline special_value_state classify_special_value(const extra_competitor_ref& value) - { - if (std::isnan(value.x[0]) || (std::isfinite(value.x[0]) && std::isnan(value.x[1]))) - return { special_value_kind::nan, false, 0 }; - if (std::isinf(value.x[0])) - return { special_value_kind::infinity, std::signbit(value.x[0]), 0 }; - if (value.x[0] == 0.0 && value.x[1] == 0.0) - return { special_value_kind::zero, std::signbit(value.x[0]), 0 }; - return { special_value_kind::finite, std::signbit(value.x[0]), to_perfect(value) }; - } - - [[nodiscard]] inline perfect_ref abs_ref(const perfect_ref& value) - { - return value < 0 ? -value : value; - } - - [[nodiscard]] inline perfect_ref reference_scale(const perfect_ref& expected) - { - const perfect_ref scale = abs_ref(expected); - return scale < 1 ? perfect_ref{ 1 } : scale; - } - - [[nodiscard]] inline double matching_bits(const perfect_ref& actual, const perfect_ref& expected) - { - const perfect_ref error = abs_ref(actual - expected); - if (error == 0) - return std::numeric_limits::infinity(); - - const perfect_ref scaled_error = error / reference_scale(expected); - using std::log2; - return static_cast(-log2(scaled_error)); - } - - [[nodiscard]] inline double domain_matching_bits(const perfect_ref& actual, const perfect_ref& expected) - { - const perfect_ref error = abs_ref(actual - expected); - if (error == 0) - return std::numeric_limits::infinity(); - - const perfect_ref scaled_error = error / reference_scale(expected); - using std::log2; - return static_cast(-log2(scaled_error)); - } - - [[nodiscard]] inline double domain_score_bits(const perfect_ref& actual, const perfect_ref& expected) - { - const double bits = domain_matching_bits(actual, expected); - return std::isnan(bits) ? 0.0 : bits; - } - - [[nodiscard]] inline bool special_values_match( - const special_value_state& actual, - const special_value_state& expected) - { - constexpr double finite_match_bits = 20.0; - if (actual.kind != expected.kind) - return false; - - if (expected.kind == special_value_kind::nan) - return true; - if (expected.kind == special_value_kind::infinity || expected.kind == special_value_kind::zero) - return actual.negative == expected.negative; - - const double bits = matching_bits(actual.finite_value, expected.finite_value); - return std::isinf(bits) || bits >= finite_match_bits; - } - - template - [[nodiscard]] special_correctness measure_unary_special_values( - std::string_view operation, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - (void)reference; - if (samples.empty()) - return special_correctness::unavailable; - - for (std::size_t index = 0; index < samples.size(); ++index) - { - special_value_state expected; - try - { - expected = classify_special_double( - stdlib_unary_special_result(operation, sample_as_double(samples[index].x))); - } - catch (...) - { - return special_correctness::unavailable; - } - - try - { - const special_value_state actual = classify_special_value(eval(values[index])); - if (!special_values_match(actual, expected)) - { - if (special_trace_enabled()) - { - std::cerr << "[special trace] " << operation << " sample " << index - << " '" << samples[index].label << "' mismatch\n"; - } - return special_correctness::fail; - } - } - catch (...) - { - return special_correctness::fail; - } - } - return special_correctness::pass; - } - - template - [[nodiscard]] special_correctness measure_binary_special_values( - std::string_view operation, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - (void)reference; - if (samples.empty()) - return special_correctness::unavailable; - - for (std::size_t index = 0; index < samples.size(); ++index) - { - special_value_state expected; - try - { - expected = classify_special_double(stdlib_binary_special_result( - operation, - sample_as_double(samples[index].x), - sample_as_double(samples[index].y))); - } - catch (...) - { - return special_correctness::unavailable; - } - - try - { - const special_value_state actual = classify_special_value( - eval(values[index].x, values[index].y)); - if (!special_values_match(actual, expected)) - { - if (special_trace_enabled()) - { - std::cerr << "[special trace] " << operation << " sample " << index - << " '" << samples[index].label << "' mismatch\n"; - } - return special_correctness::fail; - } - } - catch (...) - { - return special_correctness::fail; - } - } - return special_correctness::pass; - } - - template - [[nodiscard]] special_correctness measure_ternary_special_values( - std::string_view operation, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - (void)reference; - if (samples.empty()) - return special_correctness::unavailable; - - for (std::size_t index = 0; index < samples.size(); ++index) - { - special_value_state expected; - try - { - expected = classify_special_double(stdlib_ternary_special_result( - operation, - sample_as_double(samples[index].x), - sample_as_double(samples[index].y), - sample_as_double(samples[index].z))); - } - catch (...) - { - return special_correctness::unavailable; - } - - try - { - const special_value_state actual = classify_special_value( - eval(values[index].x, values[index].y, values[index].z)); - if (!special_values_match(actual, expected)) - { - if (special_trace_enabled()) - { - std::cerr << "[special trace] " << operation << " sample " << index - << " '" << samples[index].label << "' mismatch\n"; - } - return special_correctness::fail; - } - } - catch (...) - { - return special_correctness::fail; - } - } - return special_correctness::pass; - } - - template - [[nodiscard]] special_correctness measure_unary_int_special_values( - std::string_view operation, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - (void)reference; - if (samples.empty()) - return special_correctness::unavailable; - - for (std::size_t index = 0; index < samples.size(); ++index) - { - special_value_state expected; - try - { - expected = classify_special_double(stdlib_unary_int_special_result( - operation, - sample_as_double(samples[index].x), - samples[index].n)); - } - catch (...) - { - return special_correctness::unavailable; - } - - try - { - const special_value_state actual = classify_special_value( - eval(values[index].x, values[index].n)); - if (!special_values_match(actual, expected)) - { - if (special_trace_enabled()) - { - std::cerr << "[special trace] " << operation << " sample " << index - << " '" << samples[index].label << "' mismatch\n"; - } - return special_correctness::fail; - } - } - catch (...) - { - return special_correctness::fail; - } - } - return special_correctness::pass; - } - - [[nodiscard]] inline double finite_for_mean(double bits) noexcept - { - constexpr double exact_result_bits = 160.0; - return std::isinf(bits) ? exact_result_bits : bits; - } - - template - [[nodiscard]] std::vector make_unary_inputs(const Samples& samples, MakeFn make_value) - { - std::vector values; - values.reserve(samples.size()); - for (const auto& sample : samples) - values.push_back(make_value(sample.x)); - return values; - } - - template - [[nodiscard]] std::vector> make_binary_inputs(const Samples& samples, MakeFn make_value) - { - std::vector> values; - values.reserve(samples.size()); - for (const auto& sample : samples) - values.push_back({ make_value(sample.x), make_value(sample.y) }); - return values; - } - - template - [[nodiscard]] std::vector> make_ternary_inputs(const Samples& samples, MakeFn make_value) - { - std::vector> values; - values.reserve(samples.size()); - for (const auto& sample : samples) - values.push_back({ make_value(sample.x), make_value(sample.y), make_value(sample.z) }); - return values; - } - - template - [[nodiscard]] std::vector> make_unary_int_inputs(const Samples& samples, MakeFn make_value) - { - std::vector> values; - values.reserve(samples.size()); - for (const auto& sample : samples) - values.push_back({ make_value(sample.x), sample.n }); - return values; - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_add(const T& x, const T& y) { return x + y; } - - template - [[nodiscard]] BL_FORCE_INLINE T call_subtract(const T& x, const T& y) { return x - y; } - - template - [[nodiscard]] BL_FORCE_INLINE T call_multiply(const T& x, const T& y) { return x * y; } - - template - [[nodiscard]] BL_FORCE_INLINE T call_divide(const T& x, const T& y) { return x / y; } - - template - [[nodiscard]] BL_FORCE_INLINE bool call_equal(const T& x, const T& y) { return x == y; } - - template - [[nodiscard]] BL_FORCE_INLINE bool call_not_equal(const T& x, const T& y) { return x != y; } - - template - [[nodiscard]] BL_FORCE_INLINE bool call_less(const T& x, const T& y) { return x < y; } - - template - [[nodiscard]] BL_FORCE_INLINE bool call_greater(const T& x, const T& y) { return x > y; } - - template - [[nodiscard]] BL_FORCE_INLINE bool call_less_equal(const T& x, const T& y) { return x <= y; } - - template - [[nodiscard]] BL_FORCE_INLINE bool call_greater_equal(const T& x, const T& y) { return x >= y; } - - template - [[nodiscard]] BL_FORCE_INLINE T call_sqrt(const T& x) { using std::sqrt; return sqrt(x); } - - [[nodiscard]] BL_FORCE_INLINE extra_competitor_ref call_cbrt(const extra_competitor_ref& x) - { - return qdpp::cbrt(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_cbrt(const T& x) { using std::cbrt; return cbrt(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_hypot(const T& x, const T& y) { using std::hypot; return hypot(x, y); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_sin(const T& x) { using std::sin; return sin(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_cos(const T& x) { using std::cos; return cos(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_tan(const T& x) { using std::tan; return tan(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_atan(const T& x) { using std::atan; return atan(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_atan2(const T& y, const T& x) { using std::atan2; return atan2(y, x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_asin(const T& x) { using std::asin; return asin(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_acos(const T& x) { using std::acos; return acos(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_exp(const T& x) { using std::exp; return exp(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_exp2(const T& x) { using std::exp2; return exp2(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_expm1(const T& x) { using std::expm1; return expm1(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_log(const T& x) { using std::log; return log(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_log2(const T& x) { using std::log2; return log2(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_log10(const T& x) { using std::log10; return log10(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_log1p(const T& x) { using std::log1p; return log1p(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_pow(const T& x, const T& y) { using std::pow; return pow(x, y); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_sinh(const T& x) { using std::sinh; return sinh(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_cosh(const T& x) { using std::cosh; return cosh(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_tanh(const T& x) { using std::tanh; return tanh(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_asinh(const T& x) { using std::asinh; return asinh(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_acosh(const T& x) { using std::acosh; return acosh(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_atanh(const T& x) { using std::atanh; return atanh(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_fma(const T& x, const T& y, const T& z) { using std::fma; return fma(x, y, z); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_fma_reference(const T& x, const T& y, const T& z) { return x * y + z; } - - template - [[nodiscard]] BL_FORCE_INLINE T call_fabs(const T& x) { using boost::multiprecision::fabs; using std::fabs; return fabs(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_floor(const T& x) { using boost::multiprecision::floor; using std::floor; return floor(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_ceil(const T& x) { using boost::multiprecision::ceil; using std::ceil; return ceil(x); } - - [[nodiscard]] BL_FORCE_INLINE extra_competitor_ref call_trunc(const extra_competitor_ref& x) - { - return qdpp::trunc(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_trunc(const T& x) { using boost::multiprecision::trunc; using std::trunc; return trunc(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_round(const T& x) { using boost::multiprecision::round; using std::round; return round(x); } - - [[nodiscard]] BL_FORCE_INLINE extra_competitor_ref call_nearbyint(const extra_competitor_ref& x) - { - return qdpp::nearbyint(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_nearbyint(const T& x) - { - using boost::multiprecision::nearbyint; - using std::nearbyint; - return nearbyint(x); - } - - [[nodiscard]] BL_FORCE_INLINE extra_competitor_ref call_rint(const extra_competitor_ref& x) - { - return qdpp::rint(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_rint(const T& x) { using boost::multiprecision::rint; using std::rint; return rint(x); } - - template - [[nodiscard]] BL_FORCE_INLINE long call_lround(const T& x) - { - using boost::multiprecision::lround; - using std::lround; - return lround(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE long long call_llround(const T& x) - { - using boost::multiprecision::llround; - using std::llround; - return llround(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE long call_lrint(const T& x) - { - using boost::multiprecision::lrint; - using std::lrint; - return lrint(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE long long call_llrint(const T& x) - { - using boost::multiprecision::llrint; - using std::llrint; - return llrint(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T round_nearest_even_integer_reference(const T& x) - { - using boost::multiprecision::floor; - using std::floor; - - const T lower = floor(x); - const T fraction = x - lower; - if (fraction < T{ 0.5 }) - return lower; - if (fraction > T{ 0.5 }) - return lower + T{ 1 }; - - const auto lower_integer = static_cast(lower); - return (lower_integer % 2ll) == 0 ? lower : lower + T{ 1 }; - } - - template - [[nodiscard]] BL_FORCE_INLINE long call_lrint_reference(const T& x) - { - return static_cast(round_nearest_even_integer_reference(x)); - } - - template - [[nodiscard]] BL_FORCE_INLINE long long call_llrint_reference(const T& x) - { - return static_cast(round_nearest_even_integer_reference(x)); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_fmod(const T& x, const T& y) - { - using boost::multiprecision::fmod; - using std::fmod; - return fmod(x, y); - } - - [[nodiscard]] BL_FORCE_INLINE extra_competitor_ref call_remainder(const extra_competitor_ref& x, const extra_competitor_ref& y) - { - return qdpp::remainder(x, y); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_remainder(const T& x, const T& y) - { - using boost::multiprecision::remainder; - using std::remainder; - return remainder(x, y); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_remquo_value(const T& x, const T& y) - { - int quotient = 0; - using boost::multiprecision::remquo; - using std::remquo; - return remquo(x, y, "ient); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_fmin(const T& x, const T& y) - { - using boost::multiprecision::fmin; - using std::fmin; - return fmin(x, y); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_fmax(const T& x, const T& y) - { - using boost::multiprecision::fmax; - using std::fmax; - return fmax(x, y); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_fdim(const T& x, const T& y) - { - using boost::multiprecision::fdim; - using std::fdim; - return fdim(x, y); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_copysign(const T& x, const T& y) - { - using boost::multiprecision::copysign; - using std::copysign; - return copysign(x, y); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_ldexp(const T& x, int n) - { - using boost::multiprecision::ldexp; - using std::ldexp; - return ldexp(x, n); - } - - [[nodiscard]] BL_FORCE_INLINE extra_competitor_ref call_scalbn(const extra_competitor_ref& x, int n) - { - return qdpp::scalbn(x, n); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_scalbn(const T& x, int n) - { - using boost::multiprecision::scalbn; - using std::scalbn; - return scalbn(x, n); - } - - [[nodiscard]] BL_FORCE_INLINE extra_competitor_ref call_scalbln(const extra_competitor_ref& x, int n) - { - return qdpp::scalbln(x, static_cast(n)); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_scalbln(const T& x, int n) - { - using boost::multiprecision::scalbln; - using std::scalbln; - return scalbln(x, static_cast(n)); - } - - [[nodiscard]] BL_FORCE_INLINE fltx_type call_nextafter(const fltx_type& from, const fltx_type& to) noexcept - { - return bl::nextafter(from, to); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_nextafter(const T& from, const T& to) - { - return boost::math::nextafter(from, to); - } - - [[nodiscard]] BL_FORCE_INLINE fltx_type call_nexttoward(const fltx_type& from, const fltx_type& to) noexcept - { - return bl::nexttoward(from, to); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_nexttoward(const T& from, const T& to) - { - return call_nextafter(from, to); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_logb(const T& x) - { - using boost::multiprecision::logb; - using std::logb; - return logb(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE int call_ilogb(const T& x) - { - using boost::multiprecision::ilogb; - using std::ilogb; - return static_cast(ilogb(x)); - } - - template - [[nodiscard]] BL_FORCE_INLINE frexp_value call_frexp(const T& x) - { - int exponent = 0; - using boost::multiprecision::frexp; - using std::frexp; - return { frexp(x, &exponent), exponent }; - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_modf_fraction(const T& x) - { - T integer_part{}; - using boost::multiprecision::modf; - using std::modf; - return modf(x, &integer_part); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_erf(const T& x) - { - using boost::multiprecision::erf; - using std::erf; - return erf(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_erfc(const T& x) - { - using boost::multiprecision::erfc; - using std::erfc; - return erfc(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_lgamma(const T& x) - { - using boost::multiprecision::lgamma; - using std::lgamma; - return lgamma(x); - } - - [[nodiscard]] inline perfect_ref gamma_reference_sinpi(const perfect_ref& x) - { - using boost::multiprecision::floor; - using boost::multiprecision::sin; - - const perfect_ref n = floor(x); - const perfect_ref r = x - n; - perfect_ref out = sin(boost::math::constants::pi() * r); - - const long long n_int = n.convert_to(); - if ((n_int & 1ll) != 0) - out = -out; - return out; - } - - [[nodiscard]] inline bool gamma_reference_is_integer(const perfect_ref& x) - { - using boost::multiprecision::trunc; - return trunc(x) == x; - } - - [[nodiscard]] inline perfect_ref call_lgamma(const perfect_ref& x) - { - const double approximate = static_cast(x); - if (std::isnan(approximate)) - return std::numeric_limits::quiet_NaN(); - if (std::isinf(approximate)) - return std::numeric_limits::infinity(); - - if (x > 0) - { - using boost::multiprecision::lgamma; - return lgamma(x); - } - - if (gamma_reference_is_integer(x)) - return std::numeric_limits::infinity(); - - using boost::multiprecision::lgamma; - using boost::multiprecision::log; - - const perfect_ref sinpix = gamma_reference_sinpi(x); - const perfect_ref abs_sinpix = sinpix < 0 ? -sinpix : sinpix; - return log(boost::math::constants::pi()) - log(abs_sinpix) - lgamma(perfect_ref{ 1 } - x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_tgamma(const T& x) - { - using boost::multiprecision::tgamma; - using std::tgamma; - return tgamma(x); - } - - [[nodiscard]] inline perfect_ref call_tgamma(const perfect_ref& x) - { - const double approximate = static_cast(x); - if (std::isnan(approximate)) - return std::numeric_limits::quiet_NaN(); - if (std::isinf(approximate)) - { - return std::signbit(approximate) - ? std::numeric_limits::quiet_NaN() - : std::numeric_limits::infinity(); - } - - using boost::multiprecision::signbit; - if (x == 0) - { - return signbit(x) - ? -std::numeric_limits::infinity() - : std::numeric_limits::infinity(); - } - - if (x > 0) - { - using boost::multiprecision::tgamma; - return tgamma(x); - } - - if (gamma_reference_is_integer(x)) - return std::numeric_limits::quiet_NaN(); - - using boost::multiprecision::tgamma; - - const perfect_ref sinpix = gamma_reference_sinpi(x); - if (sinpix == 0) - return std::numeric_limits::quiet_NaN(); - - return boost::math::constants::pi() / (sinpix * tgamma(perfect_ref{ 1 } - x)); - } - - [[nodiscard]] inline std::vector make_positive_samples() - { - std::vector samples{ - { "quarter", { "x", 0.25, 0x1p-56 } }, - { "near one", { "x", 1.0, 0x1p-54 } }, - { "two", { "x", 2.0, 0x1p-55 } }, - { "large", { "x", 0x1.3c0ca428c59f8p+24, 0x1p-30 } }, - { "tiny normal", { "x", 0x1p-32, 0x1p-86 } } - }; - - sample_rng rng{ 0x128acc90517ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = positive_log_value(rng, -80, 80); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_arithmetic_samples() - { - std::vector samples{ - { "unit mixed signs", { "x", 1.25, 0x1p-54 }, { "y", -0.75, 0x1p-55 } }, - { "large plus small", { "x", 0x1.3c0ca428c59f8p+32, 0x1p-22 }, { "y", -0x1.f972474538ef3p-20, 0x1p-74 } }, - { "near cancellation", { "x", 1.0, 0x1p-54 }, { "y", -1.0, 0x1p-55 } }, - { "fractional", { "x", -0x1.1f9add3739636p-4, 0x1p-60 }, { "y", 0x1.3be76c8b43958p+3, -0x1p-52 } }, - { "wide finite", { "x", 0x1.2d6444d013d18p+48, -0x1p-8 }, { "y", 0x1.8p-24, 0x1p-80 } } - }; - - sample_rng rng{ 0x128acca217ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = signed_log_value(rng, -80, 80); - const fltx_type x_value = x + residual_for(x, rng); - fltx_type y_value{ 0.0 }; - switch (index % 4) - { - case 0: - y_value = signed_log_value(rng, -80, 80) + residual_for(x, rng); - break; - case 1: - y_value = -x_value + residual_for(x, rng); - break; - case 2: - y_value = x_value + residual_for(x, rng); - break; - default: - y_value = signed_log_value(rng, -12, 12) + residual_for(x, rng); - break; - } - - samples.push_back({ - "random", - make_runtime_value("x", x_value), - make_runtime_value("y", y_value) - }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_comparison_samples() - { - std::vector samples{ - { "equal positive", { "x", 1.25, 0x1p-54 }, { "y", 1.25, 0x1p-54 } }, - { "equal negative", { "x", -2.5, -0x1p-53 }, { "y", -2.5, -0x1p-53 } }, - { "signed zeros", { "x", 0.0, 0.0 }, { "y", std::copysign(0.0, -1.0), 0.0 } }, - { "same high x lower tail", { "x", 1.0, -0x1p-54 }, { "y", 1.0, 0x1p-54 } }, - { "same high x higher tail", { "x", 1.0, 0x1p-54 }, { "y", 1.0, -0x1p-54 } }, - { "negative same high", { "x", -1.0, -0x1p-54 }, { "y", -1.0, 0x1p-54 } }, - { "wide x greater", { "x", 0x1.2d6444d013d18p+48, -0x1p-8 }, { "y", 0x1.2d6444d013d18p+47, 0x1p-8 } }, - { "tiny x less", { "x", -0x1p-80, 0x1p-134 }, { "y", 0x1p-80, -0x1p-134 } } - }; - - sample_rng rng{ 0x128c0a9a11ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = signed_log_value(rng, -80, 80); - fltx_type y{}; - switch (index % 5) - { - case 0: - y = x; - break; - case 1: - y = x + residual_for(x, rng); - break; - case 2: - y = x - residual_for(x, rng); - break; - case 3: - y = -x; - break; - default: - y = signed_log_value(rng, -80, 80); - break; - } - - samples.push_back({ - "random", - make_runtime_value("x", x), - make_runtime_value("y", y) - }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_nextafter_samples() - { - std::vector samples{ - { "equal positive", { "from", 1.25, 0x1p-54 }, { "to", 1.25, 0x1p-54 } }, - { "up tail", { "from", 1.25, 0x1p-54 }, { "to", 2.0, 0.0 } }, - { "down tail", { "from", 1.25, 0x1p-54 }, { "to", -2.0, 0.0 } }, - { "zero to positive", { "from", 0.0, 0.0 }, { "to", 1.0, 0.0 } }, - { "zero to negative", { "from", 0.0, 0.0 }, { "to", -1.0, 0.0 } }, - { "negative zero to positive", { "from", std::copysign(0.0, -1.0), 0.0 }, { "to", 1.0, 0.0 } }, - { "large up", { "from", 0x1.2d6444d013d18p+48, -0x1p-8 }, { "to", 0x1.2d6444d013d18p+49, 0.0 } }, - { "tiny down", { "from", -0x1p-80, 0x1p-134 }, { "to", -1.0, 0.0 } } - }; - - sample_rng rng{ 0x128ad3a9e5ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type from = signed_log_value(rng, -80, 80); - const fltx_type delta = positive_residual_for(from, rng); - fltx_type to{}; - switch (index % 5) - { - case 0: - to = from + delta; - break; - case 1: - to = from - delta; - break; - case 2: - to = -from; - break; - case 3: - to = signed_log_value(rng, -80, 80); - break; - default: - to = from; - break; - } - - if (to == from && (index % 5) != 4) - to = from + fltx_type{ rng.sign() }; - - samples.push_back({ - "random", - make_runtime_value("from", from, residual_for(from, rng)), - make_runtime_value("to", to, residual_for(to, rng)) - }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_signed_samples() - { - std::vector samples{ - { "negative large", { "x", -1e20, 0x1p+12 } }, - { "negative ten", { "x", -10.0, 0x1p-50 } }, - { "negative one", { "x", -1.0, 0x1p-54 } }, - { "negative tiny", { "x", -1e-20, 0x1p-120 } }, - { "zero", { "x", 0.0, 0.0 } }, - { "positive tiny", { "x", 1e-20, -0x1p-120 } }, - { "one", { "x", 1.0, -0x1p-54 } }, - { "ten", { "x", 10.0, -0x1p-50 } }, - { "positive large", { "x", 1e20, -0x1p+12 } } - }; - - sample_rng rng{ 0x128acc51a5ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = signed_log_value(rng, -80, 80); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline fltx_type trig_half_pi() noexcept - { - return fltx_type{ 0x1.921fb54442d18p+0 } + fltx_type{ 0x1.1a62633145c07p-54 }; - } - - inline void append_trig_landmark_samples(std::vector& samples) - { - samples.push_back({ "tiny", { "x", 0x1p-20, 0x1p-74 } }); - samples.push_back({ "pi / 6", { "x", 0x1.0c152382d7366p-1, 0x1.1a62633145c07p-55 } }); - samples.push_back({ "pi / 4", { "x", 0x1.921fb54442d18p-1, 0x1.1a62633145c07p-55 } }); - samples.push_back({ "negative moderate", { "x", -2.5, 0x1p-54 } }); - samples.push_back({ "ten pi plus offset", { "x", 31.75, -0x1p-52 } }); - samples.push_back({ "wide reduction", { "x", 12345.678901234567, 0x1p-43 } }); - } - - [[nodiscard]] inline std::vector make_unshifted_trig_samples() - { - std::vector samples; - append_trig_landmark_samples(samples); - - sample_rng rng{ 0x128acc7e16ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = uniform_value(rng, -0x1p16, 0x1p16); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_trig_samples() - { - std::vector samples; - append_trig_landmark_samples(samples); - - const fltx_type half_pi = trig_half_pi(); - const std::size_t landmark_count = samples.size(); - for (std::size_t index = 0; index < landmark_count; ++index) - { - const fltx_type shifted = make_fltx(samples[index].x) + half_pi; - samples.push_back({ "phase shifted", make_runtime_value("x", shifted) }); - } - - sample_rng rng{ 0x128acc7e16ull }; - for (std::size_t index = 0; index < random_sample_count() / 2; ++index) - { - const fltx_type x = uniform_value(rng, -0x1p16, 0x1p16); - const fltx_type value = x + residual_for(x, rng); - samples.push_back({ "random", make_runtime_value("x", value) }); - samples.push_back({ "random phase shifted", make_runtime_value("x", value + half_pi) }); - } - if ((random_sample_count() & 1u) != 0u) - { - const fltx_type x = uniform_value(rng, -0x1p16, 0x1p16); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_tan_samples() - { - std::vector samples = make_unshifted_trig_samples(); - sample_rng rng{ 0x128acc7a9ull }; - while (samples.size() < random_sample_count() + 6) - { - const fltx_type x = uniform_value(rng, -0x1p16, 0x1p16); - if (std::fabs(std::cos(static_cast(x))) < 0x1p-20) - continue; - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_exp_samples() - { - std::vector samples{ - { "negative ten", { "x", -10.0, 0x1p-50 } }, - { "near zero", { "x", 0.0, 0x1p-60 } }, - { "quarter", { "x", 0.25, 0x1p-56 } }, - { "one", { "x", 1.0, -0x1p-54 } }, - { "five", { "x", 5.0, 0x1p-50 } } - }; - - sample_rng rng{ 0x128acce901ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = uniform_value(rng, -40.0, 40.0); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_exp2_samples() - { - std::vector samples{ - { "negative ten", { "x", -10.0, 0x1p-50 } }, - { "negative one", { "x", -1.0, 0x1p-54 } }, - { "zero", { "x", 0.0, 0.0 } }, - { "one", { "x", 1.0, -0x1p-54 } }, - { "ten", { "x", 10.0, -0x1p-50 } } - }; - - sample_rng rng{ 0x128acce2e2ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = uniform_value(rng, -128.0, 128.0); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_expm1_samples() - { - std::vector samples{ - { "negative twenty", { "x", -20.0, 0x1p-48 } }, - { "negative tiny", { "x", -1e-10, 0x1p-88 } }, - { "zero", { "x", 0.0, 0.0 } }, - { "positive tiny", { "x", 1e-10, -0x1p-88 } }, - { "twenty", { "x", 20.0, -0x1p-48 } } - }; - - sample_rng rng{ 0x128acce111ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = uniform_value(rng, -20.0, 20.0); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_log1p_samples() - { - std::vector samples{ - { "near negative one", { "x", -0.875, 0x1p-58 } }, - { "negative tiny", { "x", -1e-10, 0x1p-88 } }, - { "zero", { "x", 0.0, 0.0 } }, - { "positive tiny", { "x", 1e-10, -0x1p-88 } }, - { "ten", { "x", 10.0, 0x1p-50 } } - }; - - sample_rng rng{ 0x128acc1011ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = uniform_value(rng, -0.95, 20.0); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_pow_samples() - { - std::vector samples{ - { "square root", { "x", 2.0, 0x1p-55 }, { "y", 0.5, 0x1p-56 } }, - { "fractional base", { "x", 0.75, 0x1p-56 }, { "y", 3.25, -0x1p-54 } }, - { "near one", { "x", 1.0, 0x1p-53 }, { "y", 512.0, 0x1p-45 } }, - { "moderate", { "x", 8.5, -0x1p-53 }, { "y", -1.25, 0x1p-55 } }, - { "large base", { "x", 1024.0, 0x1p-42 }, { "y", 1.75, -0x1p-55 } } - }; - - sample_rng rng{ 0x128acc90dull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - fltx_type x{}; - fltx_type y{}; - switch (index % 4) - { - case 0: - x = positive_log_value(rng, -12, 12); - y = uniform_value(rng, -6.0, 6.0); - break; - case 1: - x = fltx_type{ 1.0 } + uniform_value(rng, -0.125, 0.125); - y = uniform_value(rng, -256.0, 256.0); - break; - case 2: - x = positive_log_value(rng, -32, 32); - y = uniform_value(rng, -2.0, 2.0); - break; - default: - x = uniform_value(rng, 0.125, 64.0); - y = fltx_type{ rng.integer(-16, 16) }; - break; - } - samples.push_back({ - "random", - make_runtime_value("x", x, residual_for(x, rng)), - make_runtime_value("y", y, residual_for(y, rng)) - }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_fma_samples() - { - std::vector samples{ - { "unit positive", { "x", 1.0, 0x1p-54 }, { "y", 1.0, -0x1p-55 }, { "z", 0.5, 0x1p-56 } }, - { "mixed signs", { "x", -1.25, 0x1p-54 }, { "y", 0.75, 0x1p-55 }, { "z", -0.5, -0x1p-56 } }, - { "large product", { "x", 0x1.3c0ca428c59f8p+24, 0x1p-30 }, { "y", -0x1.8p+12, 0x1p-42 }, { "z", 0x1.2p+20, -0x1p-34 } } - }; - - sample_rng rng{ 0x128accf0a1ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = signed_log_value(rng, -24, 24); - const fltx_type y = signed_log_value(rng, -24, 24); - const fltx_type product = x * y; - fltx_type z{}; - switch (index % 4) - { - case 0: - z = signed_log_value(rng, -48, 48); - break; - case 1: - z = -product + (rng.sign() > 0.0 ? bl::ldexp(product, -12) : -bl::ldexp(product, -12)); - break; - case 2: - z = product * fltx_type{ -0.5 } + residual_for(product, rng); - break; - default: - z = signed_log_value(rng, -12, 12); - break; - } - samples.push_back({ - "random", - make_runtime_value("x", x, residual_for(x, rng)), - make_runtime_value("y", y, residual_for(y, rng)), - make_runtime_value("z", z, residual_for(z, rng)) - }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_hypot_samples() - { - std::vector samples{ - { "zero", { "x", 0.0, 0.0 }, { "y", 0.0, 0.0 } }, - { "three four", { "x", 3.0, 0x1p-54 }, { "y", 4.0, -0x1p-54 } }, - { "mixed scale", { "x", 1e20, 0x1p+12 }, { "y", 1e-20, 0x1p-120 } }, - { "moderate", { "x", 123.456, 0x1p-48 }, { "y", 789.25, -0x1p-44 } } - }; - - sample_rng rng{ 0x128acc1707ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = signed_log_value(rng, -60, 60); - const fltx_type y = signed_log_value(rng, -60, 60); - samples.push_back({ - "random", - make_runtime_value("x", x, residual_for(x, rng)), - make_runtime_value("y", y, residual_for(y, rng)) - }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_unit_interval_samples() - { - std::vector samples{ - { "negative one", { "x", -1.0, 0.0 } }, - { "negative half", { "x", -0.5, 0x1p-58 } }, - { "zero", { "x", 0.0, 0.0 } }, - { "half", { "x", 0.5, -0x1p-58 } }, - { "one", { "x", 1.0, 0.0 } } - }; - - sample_rng rng{ 0x128acc1eafull }; - while (samples.size() < random_sample_count() + 5) - { - const fltx_type x = uniform_value(rng, -0.999999, 0.999999); - const value_sample sample = make_runtime_value("x", x, residual_for(x, rng)); - if (std::fabs(sample.hi + sample.lo) <= 1.0) - samples.push_back({ "random", sample }); - } - return samples; - } - - inline void append_hyperbolic_landmark_samples(std::vector& samples) - { - samples.push_back({ "negative four", { "x", -4.0, 0x1p-52 } }); - samples.push_back({ "negative one", { "x", -1.0, 0x1p-54 } }); - samples.push_back({ "zero", { "x", 0.0, 0.0 } }); - samples.push_back({ "one", { "x", 1.0, -0x1p-54 } }); - samples.push_back({ "four", { "x", 4.0, -0x1p-52 } }); - } - - [[nodiscard]] inline std::vector make_hyperbolic_samples() - { - std::vector samples; - append_hyperbolic_landmark_samples(samples); - - sample_rng rng{ 0x128accb1b0ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - fltx_type x{}; - switch (index % 4) - { - case 0: - x = uniform_value(rng, -4.0, 4.0); - break; - case 1: - x = uniform_value(rng, -16.0, 16.0); - break; - case 2: - x = uniform_value(rng, -40.0, 40.0); - break; - default: - x = signed_log_value(rng, -8, 5); - break; - } - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_asinh_samples() - { - std::vector samples; - append_hyperbolic_landmark_samples(samples); - sample_rng rng{ 0x128acca511ull }; - while (samples.size() < random_sample_count() + 5) - { - const fltx_type x = (samples.size() & 1u) == 0u - ? uniform_value(rng, -32.0, 32.0) - : signed_log_value(rng, -60, 60); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_acosh_samples() - { - std::vector samples{ - { "one", { "x", 1.0, 0.0 } }, - { "near one", { "x", 1.0, 0x1p-52 } }, - { "one half", { "x", 1.5, -0x1p-54 } }, - { "two", { "x", 2.0, 0x1p-55 } }, - { "sixteen", { "x", 16.0, 0x1p-48 } } - }; - - sample_rng rng{ 0x128acca051ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - fltx_type x{}; - switch (index % 4) - { - case 0: - x = uniform_value(rng, 1.0, 16.0); - break; - case 1: - x = fltx_type{ 1.0 } + positive_log_value(rng, -60, -1); - break; - case 2: - x = positive_log_value(rng, 0, 60); - break; - default: - x = uniform_value(rng, 16.0, 1024.0); - break; - } - samples.push_back({ "random", make_runtime_value("x", x, positive_residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_atanh_samples() - { - std::vector samples{ - { "negative near one", { "x", -0.95, 0x1p-58 } }, - { "negative tiny", { "x", -1e-10, 0x1p-88 } }, - { "zero", { "x", 0.0, 0.0 } }, - { "positive tiny", { "x", 1e-10, -0x1p-88 } }, - { "positive near one", { "x", 0.95, -0x1p-58 } } - }; - - sample_rng rng{ 0x128acca7a9ull }; - while (samples.size() < random_sample_count() + 5) - { - fltx_type x{}; - switch (samples.size() % 4) - { - case 0: - x = uniform_value(rng, -0.95, 0.95); - break; - case 1: - if (rng.sign() > 0.0) - x = fltx_type{ 1.0 } - positive_log_value(rng, -60, -1); - else - x = fltx_type{ -1.0 } + positive_log_value(rng, -60, -1); - break; - case 2: - x = uniform_value(rng, -0.999999, 0.999999); - break; - default: - x = signed_log_value(rng, -80, -1); - break; - } - const value_sample sample = make_runtime_value("x", x, residual_for(x, rng)); - if (std::fabs(sample.hi + sample.lo) < 1.0) - samples.push_back({ "random", sample }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_rounding_samples() - { - std::vector samples{ - { "negative large fraction", { "x", -123456.75, 0x1p-48 } }, - { "negative above half", { "x", -0.51, -0x1p-58 } }, - { "negative tiny", { "x", -0x1p-20, 0x1p-80 } }, - { "positive tiny", { "x", 0x1p-20, -0x1p-80 } }, - { "above half", { "x", 0.51, -0x1p-58 } }, - { "large fraction", { "x", 123456.75, -0x1p-48 } } - }; - - sample_rng rng{ 0x128acc9080ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - fltx_type x{}; - switch (index % 4) - { - case 0: - x = uniform_value(rng, -1e6, 1e6); - break; - case 1: - x = fltx_type{ rng.integer(-1000000, 1000000) } + fltx_type{ 0.5 } + residual_for(fltx_type{ 1.0 }, rng); - break; - case 2: - x = fltx_type{ rng.integer(-1000000, 1000000) } + residual_for(fltx_type{ 1.0 }, rng); - break; - default: - x = signed_log_value(rng, -20, 29); - break; - } - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_remainder_samples() - { - std::vector samples{ - { "positive", { "x", 5.25, 0x1p-54 }, { "y", 2.0, 0.0 } }, - { "negative dividend", { "x", -5.25, -0x1p-54 }, { "y", 2.0, 0.0 } }, - { "decimal divisor", { "x", 1.0, 0x1p-54 }, { "y", 0.1, 0x1p-58 } }, - { "large half", { "x", 123456789.125, 0x1p-28 }, { "y", 0.5, 0.0 } }, - { "x less than y", { "x", 0.125, 0x1p-58 }, { "y", 10.0, -0x1p-50 } } - }; - - sample_rng rng{ 0x128accf00dull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = signed_log_value(rng, -40, 40); - fltx_type y{ 0.0 }; - do - { - y = signed_log_value(rng, -16, 16); - } - while (y == 0.0); - - samples.push_back({ - "random", - make_runtime_value("x", x, residual_for(x, rng)), - make_runtime_value("y", y, residual_for(y, rng)) - }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_scaling_samples() - { - std::vector samples{ - { "zero", { "x", 0.0, 0.0 }, 32 }, - { "one up", { "x", 1.0, 0x1p-54 }, 1 }, - { "one down", { "x", 1.0, -0x1p-54 }, -1 }, - { "negative up", { "x", -1.5, 0x1p-54 }, 10 }, - { "large down", { "x", 1e20, -0x1p+12 }, -32 } - }; - - sample_rng rng{ 0x128acc5ca1eull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = signed_log_value(rng, -60, 60); - const int n = rng.integer(-512, 512); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)), n }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_erf_samples() - { - std::vector samples{ - { "negative four", { "x", -4.0, 0x1p-52 } }, - { "negative tiny", { "x", -1e-10, 0x1p-88 } }, - { "zero", { "x", 0.0, 0.0 } }, - { "positive tiny", { "x", 1e-10, -0x1p-88 } }, - { "four", { "x", 4.0, -0x1p-52 } } - }; - - sample_rng rng{ 0x128accecfull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = uniform_value(rng, -6.0, 6.0); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_gamma_samples() - { - std::vector samples{ - { "eighth", { "x", 0.125, 0x1p-58 } }, - { "half", { "x", 0.5, 0x1p-58 } }, - { "one", { "x", 1.0, 0.0 } }, - { "one half", { "x", 1.5, -0x1p-54 } }, - { "ten", { "x", 10.0, 0x1p-50 } } - }; - - sample_rng rng{ 0x128acc6a99ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - fltx_type x{}; - switch (index % 4) - { - case 0: - x = uniform_value(rng, 0.125, 12.0); - break; - case 1: - x = positive_log_value(rng, -20, 5); - break; - case 2: - x = uniform_value(rng, 0.125, 35.0); - break; - default: - x = uniform_value(rng, 12.0, 35.0); - break; - } - samples.push_back({ "random", make_runtime_value("x", x, positive_residual_for(x, rng)) }); - } - return samples; - } - - template - [[nodiscard]] accuracy_result measure_unary_accuracy( - std::string_view operation, - std::string_view backend_name, - double required_bits, - double metrics_ideal_bits, - bool enforce_required_bits, - const Samples& samples, - const Values& values, - ToRefFn to_reference_value, - EvalFn eval, - RefFn reference) - { - double total_bits = 0.0; - double worst_bits = std::numeric_limits::infinity(); - std::vector domain_scores; - domain_scores.reserve(samples.size()); - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const auto& sample = samples[index]; - trace_domain_sample(operation, backend_name, index, sample); - const perfect_ref actual = to_reference_value(eval(values[index])); - const perfect_ref expected = reference(make_perfect(sample.x)); - double bits = matching_bits(actual, expected); - trace_domain_result(operation, backend_name, index, bits); - - INFO(operation << ' ' << backend_name << " sample '" << sample.label << "' matched " << bits << " bits"); - if (std::isnan(bits)) - { - if (enforce_required_bits) - CHECK(!std::isnan(bits)); - bits = 0.0; - } - if (enforce_required_bits) - CHECK(bits >= required_bits); - - worst_bits = std::min(worst_bits, bits); - total_bits += finite_for_mean(bits); - domain_scores.push_back(domain_sample_score(domain_score_bits(actual, expected), metrics_ideal_bits)); - } - - return { - worst_bits, - total_bits / static_cast(samples.size()), - samples.size(), - domain_score(std::move(domain_scores)) - }; - } - - template - [[nodiscard]] accuracy_result measure_binary_accuracy( - std::string_view operation, - std::string_view backend_name, - double required_bits, - double metrics_ideal_bits, - bool enforce_required_bits, - const Samples& samples, - const Values& values, - ToRefFn to_reference_value, - EvalFn eval, - RefFn reference) - { - double total_bits = 0.0; - double worst_bits = std::numeric_limits::infinity(); - std::vector domain_scores; - domain_scores.reserve(samples.size()); - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const auto& sample = samples[index]; - trace_domain_sample(operation, backend_name, index, sample); - const perfect_ref actual = to_reference_value(eval(values[index].x, values[index].y)); - const perfect_ref expected = reference(make_perfect(sample.x), make_perfect(sample.y)); - double bits = matching_bits(actual, expected); - trace_domain_result(operation, backend_name, index, bits); - - INFO(operation << ' ' << backend_name << " sample '" << sample.label << "' matched " << bits << " bits"); - if (std::isnan(bits)) - { - if (enforce_required_bits) - CHECK(!std::isnan(bits)); - bits = 0.0; - } - if (enforce_required_bits) - CHECK(bits >= required_bits); - - worst_bits = std::min(worst_bits, bits); - total_bits += finite_for_mean(bits); - domain_scores.push_back(domain_sample_score(domain_score_bits(actual, expected), metrics_ideal_bits)); - } - - return { - worst_bits, - total_bits / static_cast(samples.size()), - samples.size(), - domain_score(std::move(domain_scores)) - }; - } - - template - [[nodiscard]] inline double integer_match_bits(Actual actual, Expected expected) noexcept - { - return actual == expected ? std::numeric_limits::infinity() : 0.0; - } - - template - [[nodiscard]] accuracy_result measure_unary_integer_accuracy( - std::string_view operation, - std::string_view backend_name, - double required_bits, - double metrics_ideal_bits, - bool enforce_required_bits, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - double total_bits = 0.0; - double worst_bits = std::numeric_limits::infinity(); - std::vector domain_scores; - domain_scores.reserve(samples.size()); - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const auto& sample = samples[index]; - trace_domain_sample(operation, backend_name, index, sample); - const auto actual = eval(values[index]); - const auto expected = reference(make_perfect(sample.x)); - const double bits = integer_match_bits(actual, expected); - trace_domain_result(operation, backend_name, index, bits); - - INFO(operation << ' ' << backend_name << " sample '" << sample.label << "' matched " << bits << " bits"); - if (enforce_required_bits) - CHECK(bits >= required_bits); - - worst_bits = std::min(worst_bits, bits); - total_bits += finite_for_mean(bits); - domain_scores.push_back(domain_sample_score(domain_score_bits(actual, expected), metrics_ideal_bits)); - } - - return { - worst_bits, - total_bits / static_cast(samples.size()), - samples.size(), - domain_score(std::move(domain_scores)) - }; - } - - [[nodiscard]] inline double bool_match_bits(bool actual, bool expected) noexcept - { - constexpr double exact_bool_bits = 160.0; - return actual == expected ? exact_bool_bits : 0.0; - } - - template - [[nodiscard]] special_correctness measure_binary_bool_special_values( - std::string_view operation, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - if (samples.empty()) - return special_correctness::unavailable; - - for (std::size_t index = 0; index < samples.size(); ++index) - { - bool expected = false; - try - { - expected = reference(sample_as_double(samples[index].x), sample_as_double(samples[index].y)); - } - catch (...) - { - return special_correctness::unavailable; - } - - try - { - const bool actual = eval(values[index].x, values[index].y); - if (actual != expected) - { - if (special_trace_enabled()) - { - std::cerr << "[special trace] " << operation << " sample " << index - << " '" << samples[index].label << "' mismatch\n"; - } - return special_correctness::fail; - } - } - catch (...) - { - return special_correctness::fail; - } - } - return special_correctness::pass; - } - - template - [[nodiscard]] accuracy_result measure_binary_bool_accuracy( - std::string_view operation, - std::string_view backend_name, - double required_bits, - double metrics_ideal_bits, - bool enforce_required_bits, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - double total_bits = 0.0; - double worst_bits = std::numeric_limits::infinity(); - std::vector domain_scores; - domain_scores.reserve(samples.size()); - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const auto& sample = samples[index]; - trace_domain_sample(operation, backend_name, index, sample); - const bool actual = eval(values[index].x, values[index].y); - const bool expected = reference(make_perfect(sample.x), make_perfect(sample.y)); - const double bits = bool_match_bits(actual, expected); - trace_domain_result(operation, backend_name, index, bits); - - INFO(operation << ' ' << backend_name << " sample '" << sample.label << "' matched " << bits << " bits"); - if (enforce_required_bits) - CHECK(bits >= required_bits); - - worst_bits = std::min(worst_bits, bits); - total_bits += bits; - domain_scores.push_back(domain_sample_score(bits, metrics_ideal_bits)); - } - - return { - worst_bits, - total_bits / static_cast(samples.size()), - samples.size(), - domain_score(std::move(domain_scores)) - }; - } - - template - [[nodiscard]] accuracy_result measure_ternary_accuracy( - std::string_view operation, - std::string_view backend_name, - double required_bits, - double metrics_ideal_bits, - bool enforce_required_bits, - const Samples& samples, - const Values& values, - ToRefFn to_reference_value, - EvalFn eval, - RefFn reference) - { - double total_bits = 0.0; - double worst_bits = std::numeric_limits::infinity(); - std::vector domain_scores; - domain_scores.reserve(samples.size()); - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const auto& sample = samples[index]; - trace_domain_sample(operation, backend_name, index, sample); - const perfect_ref actual = to_reference_value(eval(values[index].x, values[index].y, values[index].z)); - const perfect_ref expected = - reference(make_perfect(sample.x), make_perfect(sample.y), make_perfect(sample.z)); - double bits = matching_bits(actual, expected); - - INFO(operation << ' ' << backend_name << " sample '" << sample.label << "' matched " << bits << " bits"); - if (std::isnan(bits)) - { - if (enforce_required_bits) - CHECK(!std::isnan(bits)); - bits = 0.0; - } - if (enforce_required_bits) - CHECK(bits >= required_bits); - - worst_bits = std::min(worst_bits, bits); - total_bits += finite_for_mean(bits); - domain_scores.push_back(domain_sample_score(domain_score_bits(actual, expected), metrics_ideal_bits)); - } - - return { - worst_bits, - total_bits / static_cast(samples.size()), - samples.size(), - domain_score(std::move(domain_scores)) - }; - } - - template - [[nodiscard]] accuracy_result measure_unary_int_accuracy( - std::string_view operation, - std::string_view backend_name, - double required_bits, - double metrics_ideal_bits, - bool enforce_required_bits, - const Samples& samples, - const Values& values, - ToRefFn to_reference_value, - EvalFn eval, - RefFn reference) - { - double total_bits = 0.0; - double worst_bits = std::numeric_limits::infinity(); - std::vector domain_scores; - domain_scores.reserve(samples.size()); - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const auto& sample = samples[index]; - trace_domain_sample(operation, backend_name, index, sample); - const perfect_ref actual = to_reference_value(eval(values[index].x, values[index].n)); - const perfect_ref expected = reference(make_perfect(sample.x), sample.n); - double bits = matching_bits(actual, expected); - trace_domain_result(operation, backend_name, index, bits); - - INFO(operation << ' ' << backend_name << " sample '" << sample.label << "' matched " << bits << " bits"); - if (std::isnan(bits)) - { - if (enforce_required_bits) - CHECK(!std::isnan(bits)); - bits = 0.0; - } - if (enforce_required_bits) - CHECK(bits >= required_bits); - - worst_bits = std::min(worst_bits, bits); - total_bits += finite_for_mean(bits); - domain_scores.push_back(domain_sample_score(domain_score_bits(actual, expected), metrics_ideal_bits)); - } - - return { - worst_bits, - total_bits / static_cast(samples.size()), - samples.size(), - domain_score(std::move(domain_scores)) - }; - } - - template - [[nodiscard]] perfect_ref rebuild_frexp_result(const frexp_value& value) - { - using boost::multiprecision::ldexp; - return ldexp(to_perfect(value.fraction), value.exponent); - } - - template - [[nodiscard]] special_correctness measure_frexp_special_values( - const Samples& samples, - const Values& values, - EvalFn eval) - { - if (samples.empty()) - return special_correctness::unavailable; - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const special_value_state expected = classify_special_ref(make_perfect(samples[index].x)); - try - { - const special_value_state actual = classify_special_ref(rebuild_frexp_result(eval(values[index]))); - if (!special_values_match(actual, expected)) - return special_correctness::fail; - } - catch (...) - { - return special_correctness::fail; - } - } - return special_correctness::pass; - } - - template - [[nodiscard]] accuracy_result measure_frexp_accuracy( - std::string_view operation, - std::string_view backend_name, - double required_bits, - double metrics_ideal_bits, - bool enforce_required_bits, - const Samples& samples, - const Values& values, - EvalFn eval) - { - double total_bits = 0.0; - double worst_bits = std::numeric_limits::infinity(); - std::vector domain_scores; - domain_scores.reserve(samples.size()); - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const auto& sample = samples[index]; - trace_domain_sample(operation, backend_name, index, sample); - const perfect_ref actual = rebuild_frexp_result(eval(values[index])); - const perfect_ref expected = make_perfect(sample.x); - double bits = matching_bits(actual, expected); - - INFO(operation << ' ' << backend_name << " sample '" << sample.label << "' matched " << bits << " bits"); - if (std::isnan(bits)) - { - if (enforce_required_bits) - CHECK(!std::isnan(bits)); - bits = 0.0; - } - if (enforce_required_bits) - CHECK(bits >= required_bits); - - worst_bits = std::min(worst_bits, bits); - total_bits += finite_for_mean(bits); - domain_scores.push_back(domain_sample_score(domain_score_bits(actual, expected), metrics_ideal_bits)); - } - - return { - worst_bits, - total_bits / static_cast(samples.size()), - samples.size(), - domain_score(std::move(domain_scores)) - }; - } - - inline volatile double benchmark_sink = 0.0; - - inline void consume_benchmark_limb(double value) noexcept - { - benchmark_sink = benchmark_sink + value; - } - - inline void consume_benchmark_value(const fltx_type& value) noexcept - { - consume_benchmark_limb(value.hi); - consume_benchmark_limb(value.lo); - } - - inline void consume_benchmark_value(const competitor_ref& value) - { - const auto parts = value.backend().crep(); - consume_benchmark_limb(parts.first); - consume_benchmark_limb(parts.second); - } - - inline void consume_benchmark_value(const extra_competitor_ref& value) - { - consume_benchmark_limb(value.x[0]); - consume_benchmark_limb(value.x[1]); - } - - inline void consume_benchmark_value(bool value) noexcept - { - consume_benchmark_limb(value ? 1.0 : 0.0); - } - - template && !std::is_same_v, int> = 0> - inline void consume_benchmark_value(Integer value) noexcept - { - consume_benchmark_limb(static_cast(value)); - } - - template - inline void consume_benchmark_value(const frexp_value& value) - { - consume_benchmark_value(value.fraction); - consume_benchmark_limb(static_cast(value.exponent)); - } - - [[nodiscard]] inline double benchmark_iteration_scale(std::string_view operation) noexcept - { - if (is_short_rounding_benchmark(operation)) - return 5.0; - - if (is_integer_rounding_benchmark(operation)) - return 3.0; - - if (is_short_utility_benchmark(operation) || is_comparison_benchmark(operation)) - return is_comparison_benchmark(operation) ? 8.0 : 5.0; - - if (operation == "erf" || operation == "erfc") - return 0.01; - - if (operation == "lgamma" || operation == "tgamma") - return 0.015; - - if (operation == "asin" || operation == "acos" || operation == "atan" || operation == "atan2" - || operation == "atanh" || operation == "asinh" || operation == "acosh" || operation == "pow") - return 0.03; - - if (operation == "sin" || operation == "cos" || operation == "tan") - return 0.04; - - if (operation == "cbrt" - || operation == "exp" || operation == "exp2" || operation == "expm1" || operation == "log" - || operation == "log2" || operation == "log10" || operation == "log1p" - || operation == "sinh" || operation == "cosh" || operation == "tanh") - return 0.03; - - if (operation == "fmod" || operation == "remainder" || operation == "remquo") - return 0.5; - - return 1.0; - } - - [[nodiscard]] inline std::size_t scaled_benchmark_min_iterations(std::string_view operation) noexcept - { - const auto scaled = static_cast( - static_cast(benchmark_min_iterations) * benchmark_iteration_scale(operation)); - return std::max(1, scaled); - } - - [[nodiscard]] inline std::size_t benchmark_repetitions( - std::size_t sample_count, - std::string_view operation = {}) noexcept - { - if (sample_count == 0) - return 0; - constexpr std::size_t min_repetitions = 3; - const std::size_t min_iterations = scaled_benchmark_min_iterations(operation); - return std::max(min_repetitions, (min_iterations + sample_count - 1) / sample_count); - } - - template - [[nodiscard]] benchmark_result benchmark_unary_values( - const Values& values, - EvalFn eval, - std::string_view operation = {}) - { - const std::size_t repetitions = benchmark_repetitions(values.size(), operation); - const auto start = std::chrono::steady_clock::now(); - for (std::size_t repeat = 0; repeat < repetitions; ++repeat) - { - for (const auto& value : values) - consume_benchmark_value(eval(value)); - } - const auto elapsed = std::chrono::steady_clock::now() - start; - const std::size_t iterations = repetitions * values.size(); - const double ns = std::chrono::duration(elapsed).count() / static_cast(iterations); - return { ns, iterations }; - } - - template - [[nodiscard]] benchmark_result benchmark_binary_values( - const Values& values, - EvalFn eval, - std::string_view operation = {}) - { - const std::size_t repetitions = benchmark_repetitions(values.size(), operation); - const auto start = std::chrono::steady_clock::now(); - for (std::size_t repeat = 0; repeat < repetitions; ++repeat) - { - for (const auto& value : values) - consume_benchmark_value(eval(value.x, value.y)); - } - const auto elapsed = std::chrono::steady_clock::now() - start; - const std::size_t iterations = repetitions * values.size(); - const double ns = std::chrono::duration(elapsed).count() / static_cast(iterations); - return { ns, iterations }; - } - - template - [[nodiscard]] benchmark_result benchmark_ternary_values( - const Values& values, - EvalFn eval, - std::string_view operation = {}) - { - const std::size_t repetitions = benchmark_repetitions(values.size(), operation); - const auto start = std::chrono::steady_clock::now(); - for (std::size_t repeat = 0; repeat < repetitions; ++repeat) - { - for (const auto& value : values) - consume_benchmark_value(eval(value.x, value.y, value.z)); - } - const auto elapsed = std::chrono::steady_clock::now() - start; - const std::size_t iterations = repetitions * values.size(); - const double ns = std::chrono::duration(elapsed).count() / static_cast(iterations); - return { ns, iterations }; - } - - template - [[nodiscard]] benchmark_result benchmark_unary_int_values( - const Values& values, - EvalFn eval, - std::string_view operation = {}) - { - const std::size_t repetitions = benchmark_repetitions(values.size(), operation); - const auto start = std::chrono::steady_clock::now(); - for (std::size_t repeat = 0; repeat < repetitions; ++repeat) - { - for (const auto& value : values) - consume_benchmark_value(eval(value.x, value.n)); - } - const auto elapsed = std::chrono::steady_clock::now() - start; - const std::size_t iterations = repetitions * values.size(); - const double ns = std::chrono::duration(elapsed).count() / static_cast(iterations); - return { ns, iterations }; - } - - [[nodiscard]] inline suite_id make_suite(std::string_view operation) noexcept - { - return { - precision_type::f128, - operation_id{ operation, operation }, - primary_domain - }; - } - - [[nodiscard]] inline domain_value_kind domain_unary_kind(std::string_view operation) noexcept - { - if (operation == "sqrt" || operation == "log" || operation == "log2" || operation == "log10") - return domain_value_kind::positive; - if (operation == "asin" || operation == "acos") - return domain_value_kind::unit_closed; - if (operation == "sin" || operation == "cos" || operation == "tan") - return domain_value_kind::reduction_real; - if (operation == "cbrt") - return domain_value_kind::balanced_real; - if (operation == "atanh") - return domain_value_kind::unit_open; - if (operation == "exp" || operation == "expm1") - return domain_value_kind::exp_argument; - if (operation == "sinh" || operation == "cosh" || operation == "tanh") - return domain_value_kind::hyperbolic_argument; - if (operation == "exp2") - return domain_value_kind::exp2_argument; - if (operation == "log1p") - return domain_value_kind::log1p_argument; - if (operation == "acosh") - return domain_value_kind::acosh_argument; - if (operation == "lgamma") - return domain_value_kind::gamma_argument; - if (operation == "tgamma") - return domain_value_kind::tgamma_argument; - if (operation == "lround" || operation == "llround" || - operation == "lrint" || operation == "llrint") - return domain_value_kind::integer_rounding_argument; - if (operation == "ilogb") - return domain_value_kind::nonzero_wide_real; - return domain_value_kind::wide_real; - } - - [[nodiscard]] inline std::vector make_domain_unary_samples(std::string_view operation) - { - return make_domain_unary_values( - domain_unary_kind(operation), - domain_random_sample_count(), - domain_seed(operation, 0x128d0a11ull)); - } - - [[nodiscard]] inline std::vector make_domain_binary_samples(std::string_view operation) - { - domain_value_kind x_kind = domain_value_kind::wide_real; - domain_value_kind y_kind = domain_value_kind::wide_real; - - if (operation == "multiply" || operation == "hypot") - { - x_kind = domain_value_kind::balanced_real; - y_kind = domain_value_kind::balanced_real; - } - else if (operation == "divide") - { - x_kind = domain_value_kind::balanced_real; - y_kind = domain_value_kind::nonzero_balanced_real; - } - else if (operation == "atan2") - { - x_kind = domain_value_kind::nonzero_wide_real; - y_kind = domain_value_kind::wide_real; - } - else if (operation == "pow") - { - return make_pow_domain_binary_values( - domain_random_sample_count(), - domain_seed(operation, 0x128b1a11ull)); - } - else if (operation == "fmod" || operation == "remainder" || operation == "remquo") - { - x_kind = domain_value_kind::wide_real; - y_kind = domain_value_kind::nonzero_balanced_real; - } - - return make_domain_binary_values( - x_kind, - y_kind, - domain_random_sample_count(), - domain_seed(operation, 0x128b1a11ull)); - } - - [[nodiscard]] inline std::vector make_domain_ternary_samples(std::string_view operation) - { - return make_domain_ternary_values( - domain_value_kind::balanced_real, - domain_value_kind::balanced_real, - domain_value_kind::balanced_real, - domain_random_sample_count(), - domain_seed(operation, 0x1287e311ull)); - } - - [[nodiscard]] inline std::vector make_domain_unary_int_samples(std::string_view operation) - { - return make_domain_unary_int_values( - domain_value_kind::balanced_real, - domain_random_sample_count(), - domain_seed(operation, 0x1281e711ull)); - } - - inline void check_competitor_slack(const metrics_record& record) - { - INFO("operation: " << record.suite.operation.name); - INFO("fltx worst bits: " << record.fltx_accuracy.worst_bits); - INFO("competitor worst bits: " << record.competitor_accuracy.worst_bits); - CHECK(record.fltx_accuracy.worst_bits + competitor_accuracy_slack_bits >= - record.competitor_accuracy.worst_bits); - } - - inline void check_benchmark_claim_is_meaningful(const metrics_record& record) - { - if (record.fltx_benchmark.ns_per_iter >= record.competitor_benchmark.ns_per_iter) - return; - - INFO("operation: " << record.suite.operation.name); - INFO("fltx ns/iter: " << record.fltx_benchmark.ns_per_iter); - INFO("competitor ns/iter: " << record.competitor_benchmark.ns_per_iter); - INFO("fltx worst bits: " << record.fltx_accuracy.worst_bits); - INFO("competitor worst bits: " << record.competitor_accuracy.worst_bits); - CHECK(record.fltx_accuracy.worst_bits + competitor_accuracy_slack_bits >= - record.competitor_accuracy.worst_bits); - } - - [[nodiscard]] inline bool extra_competitor_special_probe_is_unsafe(std::string_view operation) noexcept - { - return operation == "tan" || operation == "atan" || operation == "asin" || operation == "acos"; - } - - [[nodiscard]] inline bool extra_competitor_binary_special_probe_is_unsafe(std::string_view operation) noexcept - { - return operation == "atan2"; - } - - template - [[nodiscard]] metrics_record run_unary_case( - std::string_view operation, - double required_bits, - const Samples& samples, - EvalFn eval, - RefFn reference, - bool include_benchmarks, - bool enforce_fltx_accuracy = true, - double metrics_ideal_bits = domain_ideal_bits, - bool measure_accuracy = true) - { - const auto fltx_inputs = make_unary_inputs(samples, make_fltx); - const auto competitor_inputs = make_unary_inputs(samples, make_competitor); - - metrics_record record{}; - record.suite = make_suite(operation); - record.competitor_name = references::competitor_name; - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = references::extra_competitor_name; - extra_competitor.supported = ExtraSupported; - const auto special_samples = measure_accuracy ? make_special_unary_samples() : std::vector{}; - const auto special_fltx_inputs = make_unary_inputs(special_samples, make_fltx); - const auto special_competitor_inputs = - make_unary_inputs(special_samples, make_competitor); - record.fltx_special_values = - measure_unary_special_values(operation, special_samples, special_fltx_inputs, eval, reference); - record.competitor_special_values = - measure_unary_special_values(operation, special_samples, special_competitor_inputs, eval, reference); - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_unary_values(fltx_inputs, eval, operation); - record.competitor_benchmark = benchmark_unary_values(competitor_inputs, eval, operation); - } - if (!measure_accuracy) - { - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_unary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = extra_competitor_special_probe_is_unsafe(operation) - ? special_correctness::fail - : measure_unary_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_unary_values(extra_competitor_inputs, eval, operation); - } - return record; - } - - auto to_reference_value = [](const auto& value) { return to_perfect(value); }; - record.fltx_accuracy = - measure_unary_accuracy(operation, "fltx", required_bits, metrics_ideal_bits, enforce_fltx_accuracy, samples, fltx_inputs, to_reference_value, eval, reference); - record.competitor_accuracy = - measure_unary_accuracy(operation, references::competitor_name, required_bits, metrics_ideal_bits, false, samples, competitor_inputs, to_reference_value, eval, reference); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_unary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = extra_competitor_special_probe_is_unsafe(operation) - ? special_correctness::fail - : measure_unary_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_unary_values(extra_competitor_inputs, eval, operation); - extra_competitor.accuracy = - measure_unary_accuracy(operation, references::extra_competitor_name, required_bits, metrics_ideal_bits, false, samples, extra_competitor_inputs, to_reference_value, eval, reference); - } - return record; - } - - template - [[nodiscard]] metrics_record run_unary_integer_case( - std::string_view operation, - double required_bits, - const Samples& samples, - EvalFn eval, - RefFn reference, - bool include_benchmarks, - bool enforce_fltx_accuracy = true, - double metrics_ideal_bits = domain_ideal_bits, - bool measure_accuracy = true) - { - const auto fltx_inputs = make_unary_inputs(samples, make_fltx); - const auto competitor_inputs = make_unary_inputs(samples, make_competitor); - - metrics_record record{}; - record.suite = make_suite(operation); - record.competitor_name = references::competitor_name; - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = references::extra_competitor_name; - extra_competitor.supported = ExtraSupported; - - if (measure_accuracy && unary_integer_special_probe_is_meaningful(operation)) - { - const auto special_samples = make_special_unary_samples(); - const auto special_fltx_inputs = - make_unary_inputs(special_samples, make_fltx); - const auto special_competitor_inputs = - make_unary_inputs(special_samples, make_competitor); - record.fltx_special_values = - measure_unary_integer_special_values(operation, special_samples, special_fltx_inputs, eval, reference); - record.competitor_special_values = - measure_unary_integer_special_values(operation, special_samples, special_competitor_inputs, eval, reference); - if constexpr (ExtraSupported) - { - const auto special_extra_competitor_inputs = - make_unary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_unary_integer_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - } - else - { - extra_competitor.special_values = special_correctness::unavailable; - } - } - - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_unary_values(fltx_inputs, eval, operation); - record.competitor_benchmark = benchmark_unary_values(competitor_inputs, eval, operation); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_inputs(samples, make_extra_competitor); - extra_competitor.benchmark = benchmark_unary_values(extra_competitor_inputs, eval, operation); - } - } - if (!measure_accuracy) - return record; - - record.fltx_accuracy = - measure_unary_integer_accuracy(operation, "fltx", required_bits, metrics_ideal_bits, enforce_fltx_accuracy, samples, fltx_inputs, eval, reference); - record.competitor_accuracy = - measure_unary_integer_accuracy(operation, references::competitor_name, required_bits, metrics_ideal_bits, false, samples, competitor_inputs, eval, reference); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_inputs(samples, make_extra_competitor); - extra_competitor.accuracy = - measure_unary_integer_accuracy(operation, references::extra_competitor_name, required_bits, metrics_ideal_bits, false, samples, extra_competitor_inputs, eval, reference); - } - return record; - } - - template - [[nodiscard]] metrics_record run_binary_case( - std::string_view operation, - double required_bits, - const Samples& samples, - EvalFn eval, - RefFn reference, - bool include_benchmarks, - bool enforce_fltx_accuracy = true, - double metrics_ideal_bits = domain_ideal_bits, - bool measure_accuracy = true) - { - const auto fltx_inputs = make_binary_inputs(samples, make_fltx); - const auto competitor_inputs = make_binary_inputs(samples, make_competitor); - - metrics_record record{}; - record.suite = make_suite(operation); - record.competitor_name = references::competitor_name; - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = references::extra_competitor_name; - extra_competitor.supported = ExtraSupported; - const auto special_samples = measure_accuracy ? make_special_binary_samples() : std::vector{}; - const auto special_fltx_inputs = make_binary_inputs(special_samples, make_fltx); - const auto special_competitor_inputs = - make_binary_inputs(special_samples, make_competitor); - record.fltx_special_values = - measure_binary_special_values(operation, special_samples, special_fltx_inputs, eval, reference); - record.competitor_special_values = - measure_binary_special_values(operation, special_samples, special_competitor_inputs, eval, reference); - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_binary_values(fltx_inputs, eval, operation); - record.competitor_benchmark = benchmark_binary_values(competitor_inputs, eval, operation); - } - if (!measure_accuracy) - { - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_binary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_binary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = extra_competitor_binary_special_probe_is_unsafe(operation) - ? special_correctness::fail - : measure_binary_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_binary_values(extra_competitor_inputs, eval, operation); - } - return record; - } - - auto to_reference_value = [](const auto& value) { return to_perfect(value); }; - record.fltx_accuracy = - measure_binary_accuracy(operation, "fltx", required_bits, metrics_ideal_bits, enforce_fltx_accuracy, samples, fltx_inputs, to_reference_value, eval, reference); - record.competitor_accuracy = - measure_binary_accuracy(operation, references::competitor_name, required_bits, metrics_ideal_bits, false, samples, competitor_inputs, to_reference_value, eval, reference); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_binary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_binary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = extra_competitor_binary_special_probe_is_unsafe(operation) - ? special_correctness::fail - : measure_binary_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_binary_values(extra_competitor_inputs, eval, operation); - extra_competitor.accuracy = - measure_binary_accuracy(operation, references::extra_competitor_name, required_bits, metrics_ideal_bits, false, samples, extra_competitor_inputs, to_reference_value, eval, reference); - } - return record; - } - - template - [[nodiscard]] metrics_record run_binary_bool_case( - std::string_view operation, - double required_bits, - const Samples& samples, - EvalFn eval, - RefFn reference, - bool include_benchmarks, - bool enforce_fltx_accuracy = true, - double metrics_ideal_bits = domain_ideal_bits, - bool measure_accuracy = true) - { - const auto fltx_inputs = make_binary_inputs(samples, make_fltx); - const auto competitor_inputs = make_binary_inputs(samples, make_competitor); - - metrics_record record{}; - record.suite = make_suite(operation); - record.competitor_name = references::competitor_name; - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = references::extra_competitor_name; - extra_competitor.supported = ExtraSupported; - const auto special_samples = measure_accuracy ? make_special_binary_samples() : std::vector{}; - const auto special_fltx_inputs = - make_binary_inputs(special_samples, make_fltx); - const auto special_competitor_inputs = - make_binary_inputs(special_samples, make_competitor); - record.fltx_special_values = - measure_binary_bool_special_values(operation, special_samples, special_fltx_inputs, eval, reference); - record.competitor_special_values = - measure_binary_bool_special_values(operation, special_samples, special_competitor_inputs, eval, reference); - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_binary_values(fltx_inputs, eval, operation); - record.competitor_benchmark = benchmark_binary_values(competitor_inputs, eval, operation); - } - if (!measure_accuracy) - { - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_binary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_binary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_binary_bool_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_binary_values(extra_competitor_inputs, eval, operation); - } - return record; - } - - record.fltx_accuracy = - measure_binary_bool_accuracy(operation, "fltx", required_bits, metrics_ideal_bits, enforce_fltx_accuracy, samples, fltx_inputs, eval, reference); - record.competitor_accuracy = - measure_binary_bool_accuracy(operation, references::competitor_name, required_bits, metrics_ideal_bits, false, samples, competitor_inputs, eval, reference); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_binary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_binary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_binary_bool_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_binary_values(extra_competitor_inputs, eval, operation); - extra_competitor.accuracy = - measure_binary_bool_accuracy(operation, references::extra_competitor_name, required_bits, metrics_ideal_bits, false, samples, extra_competitor_inputs, eval, reference); - } - return record; - } - - template - [[nodiscard]] metrics_record run_ternary_case( - std::string_view operation, - double required_bits, - const Samples& samples, - EvalFn eval, - RefFn reference, - bool include_benchmarks, - bool enforce_fltx_accuracy = true, - double metrics_ideal_bits = domain_ideal_bits, - bool measure_accuracy = true) - { - const auto fltx_inputs = make_ternary_inputs(samples, make_fltx); - const auto competitor_inputs = make_ternary_inputs(samples, make_competitor); - - metrics_record record{}; - record.suite = make_suite(operation); - record.competitor_name = references::competitor_name; - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = references::extra_competitor_name; - extra_competitor.supported = ExtraSupported; - const auto special_samples = measure_accuracy ? make_special_ternary_samples() : std::vector{}; - const auto special_fltx_inputs = make_ternary_inputs(special_samples, make_fltx); - const auto special_competitor_inputs = - make_ternary_inputs(special_samples, make_competitor); - record.fltx_special_values = - measure_ternary_special_values(operation, special_samples, special_fltx_inputs, eval, reference); - record.competitor_special_values = - measure_ternary_special_values(operation, special_samples, special_competitor_inputs, eval, reference); - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_ternary_values(fltx_inputs, eval, operation); - record.competitor_benchmark = benchmark_ternary_values(competitor_inputs, eval, operation); - } - if (!measure_accuracy) - { - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_ternary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_ternary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_ternary_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_ternary_values(extra_competitor_inputs, eval, operation); - } - return record; - } - - auto to_reference_value = [](const auto& value) { return to_perfect(value); }; - record.fltx_accuracy = - measure_ternary_accuracy(operation, "fltx", required_bits, metrics_ideal_bits, enforce_fltx_accuracy, samples, fltx_inputs, to_reference_value, eval, reference); - record.competitor_accuracy = - measure_ternary_accuracy(operation, references::competitor_name, required_bits, metrics_ideal_bits, false, samples, competitor_inputs, to_reference_value, eval, reference); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_ternary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_ternary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_ternary_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_ternary_values(extra_competitor_inputs, eval, operation); - extra_competitor.accuracy = - measure_ternary_accuracy(operation, references::extra_competitor_name, required_bits, metrics_ideal_bits, false, samples, extra_competitor_inputs, to_reference_value, eval, reference); - } - return record; - } - - template - [[nodiscard]] metrics_record run_unary_int_case( - std::string_view operation, - double required_bits, - const Samples& samples, - EvalFn eval, - RefFn reference, - bool include_benchmarks, - bool enforce_fltx_accuracy = true, - double metrics_ideal_bits = domain_ideal_bits, - bool measure_accuracy = true) - { - const auto fltx_inputs = make_unary_int_inputs(samples, make_fltx); - const auto competitor_inputs = make_unary_int_inputs(samples, make_competitor); - - metrics_record record{}; - record.suite = make_suite(operation); - record.competitor_name = references::competitor_name; - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = references::extra_competitor_name; - extra_competitor.supported = ExtraSupported; - const auto special_samples = measure_accuracy ? make_special_unary_int_samples() : std::vector{}; - const auto special_fltx_inputs = - make_unary_int_inputs(special_samples, make_fltx); - const auto special_competitor_inputs = - make_unary_int_inputs(special_samples, make_competitor); - record.fltx_special_values = - measure_unary_int_special_values(operation, special_samples, special_fltx_inputs, eval, reference); - record.competitor_special_values = - measure_unary_int_special_values(operation, special_samples, special_competitor_inputs, eval, reference); - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_unary_int_values(fltx_inputs, eval, operation); - record.competitor_benchmark = benchmark_unary_int_values(competitor_inputs, eval, operation); - } - if (!measure_accuracy) - { - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_int_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_unary_int_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_unary_int_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_unary_int_values(extra_competitor_inputs, eval, operation); - } - return record; - } - - auto to_reference_value = [](const auto& value) { return to_perfect(value); }; - record.fltx_accuracy = - measure_unary_int_accuracy(operation, "fltx", required_bits, metrics_ideal_bits, enforce_fltx_accuracy, samples, fltx_inputs, to_reference_value, eval, reference); - record.competitor_accuracy = - measure_unary_int_accuracy(operation, references::competitor_name, required_bits, metrics_ideal_bits, false, samples, competitor_inputs, to_reference_value, eval, reference); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_int_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_unary_int_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_unary_int_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_unary_int_values(extra_competitor_inputs, eval, operation); - extra_competitor.accuracy = - measure_unary_int_accuracy(operation, references::extra_competitor_name, required_bits, metrics_ideal_bits, false, samples, extra_competitor_inputs, to_reference_value, eval, reference); - } - return record; - } - - template - [[nodiscard]] metrics_record run_frexp_case( - std::string_view operation, - double required_bits, - const Samples& samples, - EvalFn eval, - bool include_benchmarks, - bool enforce_fltx_accuracy = true, - double metrics_ideal_bits = domain_ideal_bits, - bool measure_accuracy = true) - { - const auto fltx_inputs = make_unary_inputs(samples, make_fltx); - const auto competitor_inputs = make_unary_inputs(samples, make_competitor); - - metrics_record record{}; - record.suite = make_suite(operation); - record.competitor_name = references::competitor_name; - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = references::extra_competitor_name; - extra_competitor.supported = ExtraSupported; - const auto special_samples = measure_accuracy ? make_special_unary_samples() : std::vector{}; - const auto special_fltx_inputs = make_unary_inputs(special_samples, make_fltx); - const auto special_competitor_inputs = - make_unary_inputs(special_samples, make_competitor); - record.fltx_special_values = - measure_frexp_special_values(special_samples, special_fltx_inputs, eval); - record.competitor_special_values = - measure_frexp_special_values(special_samples, special_competitor_inputs, eval); - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_unary_values(fltx_inputs, eval, operation); - record.competitor_benchmark = benchmark_unary_values(competitor_inputs, eval, operation); - } - if (!measure_accuracy) - { - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_unary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_frexp_special_values(special_samples, special_extra_competitor_inputs, eval); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_unary_values(extra_competitor_inputs, eval, operation); - } - return record; - } - - record.fltx_accuracy = - measure_frexp_accuracy(operation, "fltx", required_bits, metrics_ideal_bits, enforce_fltx_accuracy, samples, fltx_inputs, eval); - record.competitor_accuracy = - measure_frexp_accuracy(operation, references::competitor_name, required_bits, metrics_ideal_bits, false, samples, competitor_inputs, eval); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_unary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_frexp_special_values(special_samples, special_extra_competitor_inputs, eval); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_unary_values(extra_competitor_inputs, eval, operation); - extra_competitor.accuracy = - measure_frexp_accuracy(operation, references::extra_competitor_name, required_bits, metrics_ideal_bits, false, samples, extra_competitor_inputs, eval); - } - return record; - } -} - -#endif diff --git a/tests/metrics/metrics_f128_primary_cases.h b/tests/metrics/metrics_f128_primary_cases.h deleted file mode 100644 index 2d7315c..0000000 --- a/tests/metrics/metrics_f128_primary_cases.h +++ /dev/null @@ -1,212 +0,0 @@ -#ifndef FLTX_TESTS_METRICS_F128_PRIMARY_CASES_INCLUDED -#define FLTX_TESTS_METRICS_F128_PRIMARY_CASES_INCLUDED - -#define FLTX_PRIMARY_CASE_ORDER_add "001" -#define FLTX_PRIMARY_CASE_ORDER_subtract "002" -#define FLTX_PRIMARY_CASE_ORDER_multiply "003" -#define FLTX_PRIMARY_CASE_ORDER_divide "004" -#define FLTX_PRIMARY_CASE_ORDER_sqrt "005" -#define FLTX_PRIMARY_CASE_ORDER_cbrt "006" -#define FLTX_PRIMARY_CASE_ORDER_hypot "007" -#define FLTX_PRIMARY_CASE_ORDER_sin "008" -#define FLTX_PRIMARY_CASE_ORDER_cos "009" -#define FLTX_PRIMARY_CASE_ORDER_tan "010" -#define FLTX_PRIMARY_CASE_ORDER_atan "011" -#define FLTX_PRIMARY_CASE_ORDER_atan2 "012" -#define FLTX_PRIMARY_CASE_ORDER_asin "013" -#define FLTX_PRIMARY_CASE_ORDER_acos "014" -#define FLTX_PRIMARY_CASE_ORDER_exp "015" -#define FLTX_PRIMARY_CASE_ORDER_exp2 "016" -#define FLTX_PRIMARY_CASE_ORDER_expm1 "017" -#define FLTX_PRIMARY_CASE_ORDER_log "018" -#define FLTX_PRIMARY_CASE_ORDER_log2 "019" -#define FLTX_PRIMARY_CASE_ORDER_log10 "020" -#define FLTX_PRIMARY_CASE_ORDER_log1p "021" -#define FLTX_PRIMARY_CASE_ORDER_pow "022" -#define FLTX_PRIMARY_CASE_ORDER_sinh "023" -#define FLTX_PRIMARY_CASE_ORDER_cosh "024" -#define FLTX_PRIMARY_CASE_ORDER_tanh "025" -#define FLTX_PRIMARY_CASE_ORDER_asinh "026" -#define FLTX_PRIMARY_CASE_ORDER_acosh "027" -#define FLTX_PRIMARY_CASE_ORDER_atanh "028" -#define FLTX_PRIMARY_CASE_ORDER_fma "029" -#define FLTX_PRIMARY_CASE_ORDER_fabs "030" -#define FLTX_PRIMARY_CASE_ORDER_floor "031" -#define FLTX_PRIMARY_CASE_ORDER_ceil "032" -#define FLTX_PRIMARY_CASE_ORDER_trunc "033" -#define FLTX_PRIMARY_CASE_ORDER_round "034" -#define FLTX_PRIMARY_CASE_ORDER_nearbyint "035" -#define FLTX_PRIMARY_CASE_ORDER_rint "036" -#define FLTX_PRIMARY_CASE_ORDER_lround "037" -#define FLTX_PRIMARY_CASE_ORDER_llround "038" -#define FLTX_PRIMARY_CASE_ORDER_lrint "039" -#define FLTX_PRIMARY_CASE_ORDER_llrint "040" -#define FLTX_PRIMARY_CASE_ORDER_fmod "041" -#define FLTX_PRIMARY_CASE_ORDER_remainder "042" -#define FLTX_PRIMARY_CASE_ORDER_remquo "043" -#define FLTX_PRIMARY_CASE_ORDER_fmin "044" -#define FLTX_PRIMARY_CASE_ORDER_fmax "045" -#define FLTX_PRIMARY_CASE_ORDER_fdim "046" -#define FLTX_PRIMARY_CASE_ORDER_copysign "047" -#define FLTX_PRIMARY_CASE_ORDER_ldexp "048" -#define FLTX_PRIMARY_CASE_ORDER_scalbn "049" -#define FLTX_PRIMARY_CASE_ORDER_scalbln "050" -#define FLTX_PRIMARY_CASE_ORDER_nextafter "051" -#define FLTX_PRIMARY_CASE_ORDER_nexttoward "052" -#define FLTX_PRIMARY_CASE_ORDER_ilogb "053" -#define FLTX_PRIMARY_CASE_ORDER_logb "054" -#define FLTX_PRIMARY_CASE_ORDER_frexp "055" -#define FLTX_PRIMARY_CASE_ORDER_modf "056" -#define FLTX_PRIMARY_CASE_ORDER_erf "057" -#define FLTX_PRIMARY_CASE_ORDER_erfc "058" -#define FLTX_PRIMARY_CASE_ORDER_lgamma "059" -#define FLTX_PRIMARY_CASE_ORDER_tgamma "060" -#define FLTX_PRIMARY_CASE_ORDER_equal "061" -#define FLTX_PRIMARY_CASE_ORDER_not_equal "062" -#define FLTX_PRIMARY_CASE_ORDER_less "063" -#define FLTX_PRIMARY_CASE_ORDER_greater "064" -#define FLTX_PRIMARY_CASE_ORDER_less_equal "065" -#define FLTX_PRIMARY_CASE_ORDER_greater_equal "066" - -#define FLTX_PRIMARY_CASE_ORDER(NAME) FLTX_PRIMARY_CASE_ORDER_##NAME - -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_add true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_subtract true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_multiply true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_divide true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_sqrt true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_cbrt true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_hypot false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_sin true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_cos true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_tan true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_atan true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_atan2 true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_asin true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_acos true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_exp true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_exp2 false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_expm1 true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_log true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_log2 false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_log10 true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_log1p true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_pow true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_sinh true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_cosh true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_tanh true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_asinh true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_acosh true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_atanh true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_fma false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_fabs true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_floor true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_ceil true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_trunc true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_round true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_nearbyint true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_rint true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_lround false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_llround false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_lrint false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_llrint false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_fmod true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_remainder true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_remquo false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_fmin false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_fmax false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_fdim false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_copysign false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_ldexp true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_scalbn true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_scalbln true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_nextafter false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_nexttoward false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_ilogb false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_logb false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_frexp false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_modf false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_erf false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_erfc false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_lgamma false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_tgamma false -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_equal true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_not_equal true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_less true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_greater true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_less_equal true -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_greater_equal true - -#define FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED(NAME) FLTX_PRIMARY_CASE_QDPP_EXTRA_SUPPORTED_##NAME - -#define FLTX_F128_PRIMARY_CASES(UNARY, BINARY, TERNARY, UNARY_INT, UNARY_INTEGER, FREXP) \ - BINARY(add, "[arithmetic][add]", bits_90, make_arithmetic_samples, call_add, call_add) \ - BINARY(subtract, "[arithmetic][subtract]", bits_90, make_arithmetic_samples, call_subtract, call_subtract) \ - BINARY(multiply, "[arithmetic][multiply]", bits_90, make_arithmetic_samples, call_multiply, call_multiply) \ - BINARY(divide, "[arithmetic][divide]", bits_90, make_arithmetic_samples, call_divide, call_divide) \ - UNARY(sqrt, "[roots][sqrt]", bits_90, make_positive_samples, call_sqrt) \ - UNARY(cbrt, "[roots][cbrt]", bits_90, make_signed_samples, call_cbrt) \ - BINARY(hypot, "[roots][hypot]", bits_90, make_hypot_samples, call_hypot, call_hypot) \ - UNARY(sin, "[transcendental][trig][sin]", bits_80, make_trig_samples, call_sin) \ - UNARY(cos, "[transcendental][trig][cos]", bits_80, make_trig_samples, call_cos) \ - UNARY(tan, "[transcendental][trig][tan]", bits_75, make_tan_samples, call_tan) \ - UNARY(atan, "[transcendental][trig][atan]", bits_80, make_signed_samples, call_atan) \ - BINARY(atan2, "[transcendental][trig][atan2]", bits_80, make_arithmetic_samples, call_atan2, call_atan2) \ - UNARY(asin, "[transcendental][trig][asin]", bits_80, make_unit_interval_samples, call_asin) \ - UNARY(acos, "[transcendental][trig][acos]", bits_80, make_unit_interval_samples, call_acos) \ - UNARY(exp, "[transcendental][exp]", bits_80, make_exp_samples, call_exp) \ - UNARY(exp2, "[transcendental][exp][exp2]", bits_80, make_exp2_samples, call_exp2) \ - UNARY(expm1, "[transcendental][exp][expm1]", bits_80, make_expm1_samples, call_expm1) \ - UNARY(log, "[transcendental][log]", bits_80, make_positive_samples, call_log) \ - UNARY(log2, "[transcendental][log][log2]", bits_80, make_positive_samples, call_log2) \ - UNARY(log10, "[transcendental][log][log10]", bits_80, make_positive_samples, call_log10) \ - UNARY(log1p, "[transcendental][log][log1p]", bits_80, make_log1p_samples, call_log1p) \ - BINARY(pow, "[transcendental][pow]", bits_80, make_pow_samples, call_pow, call_pow) \ - UNARY(sinh, "[transcendental][hyperbolic][sinh]", bits_80, make_hyperbolic_samples, call_sinh) \ - UNARY(cosh, "[transcendental][hyperbolic][cosh]", bits_80, make_hyperbolic_samples, call_cosh) \ - UNARY(tanh, "[transcendental][hyperbolic][tanh]", bits_80, make_hyperbolic_samples, call_tanh) \ - UNARY(asinh, "[transcendental][inverse_hyperbolic][asinh]", bits_80, make_asinh_samples, call_asinh) \ - UNARY(acosh, "[transcendental][inverse_hyperbolic][acosh]", bits_80, make_acosh_samples, call_acosh) \ - UNARY(atanh, "[transcendental][inverse_hyperbolic][atanh]", bits_80, make_atanh_samples, call_atanh) \ - TERNARY(fma, "[fma]", bits_90, make_fma_samples, call_fma, call_fma_reference) \ - UNARY(fabs, "[arithmetic][fabs][abs]", bits_90, make_signed_samples, call_fabs) \ - UNARY(floor, "[rounding][floor]", bits_90, make_rounding_samples, call_floor) \ - UNARY(ceil, "[rounding][ceil]", bits_90, make_rounding_samples, call_ceil) \ - UNARY(trunc, "[rounding][trunc]", bits_90, make_rounding_samples, call_trunc) \ - UNARY(round, "[rounding][round]", bits_90, make_rounding_samples, call_round) \ - UNARY(nearbyint, "[nearbyint]", bits_90, make_rounding_samples, call_nearbyint) \ - UNARY(rint, "[rint]", bits_90, make_rounding_samples, call_rint) \ - UNARY_INTEGER(lround, "[rounding][lround]", bits_90, make_rounding_samples, call_lround, call_lround) \ - UNARY_INTEGER(llround, "[rounding][llround]", bits_90, make_rounding_samples, call_llround, call_llround) \ - UNARY_INTEGER(lrint, "[rounding][lrint]", bits_90, make_rounding_samples, call_lrint, call_lrint_reference) \ - UNARY_INTEGER(llrint, "[rounding][llrint]", bits_90, make_rounding_samples, call_llrint, call_llrint_reference) \ - BINARY(fmod, "[fmod]", domain_ideal_bits, make_remainder_samples, call_fmod, call_fmod) \ - BINARY(remainder, "[remainder]", bits_80, make_remainder_samples, call_remainder, call_remainder) \ - BINARY(remquo, "[remquo]", bits_40, make_remainder_samples, call_remquo_value, call_remainder) \ - BINARY(fmin, "[fmin]", bits_90, make_arithmetic_samples, call_fmin, call_fmin) \ - BINARY(fmax, "[fmax]", bits_90, make_arithmetic_samples, call_fmax, call_fmax) \ - BINARY(fdim, "[fdim]", bits_90, make_arithmetic_samples, call_fdim, call_fdim) \ - BINARY(copysign, "[copysign]", bits_90, make_arithmetic_samples, call_copysign, call_copysign) \ - UNARY_INT(ldexp, "[scaling][ldexp]", bits_90, make_scaling_samples, call_ldexp) \ - UNARY_INT(scalbn, "[scaling][scalbn]", bits_90, make_scaling_samples, call_scalbn) \ - UNARY_INT(scalbln, "[scaling][scalbln]", bits_90, make_scaling_samples, call_scalbln) \ - BINARY(nextafter, "[adjacent][nextafter]", bits_90, make_nextafter_samples, call_nextafter, call_nextafter) \ - BINARY(nexttoward, "[adjacent][nexttoward]", bits_90, make_nextafter_samples, call_nexttoward, call_nextafter) \ - UNARY_INTEGER(ilogb, "[ilogb]", bits_90, make_positive_samples, call_ilogb, call_ilogb) \ - UNARY(logb, "[logb]", bits_90, make_positive_samples, call_logb) \ - FREXP(frexp, "[frexp]", bits_90, make_signed_samples, call_frexp) \ - UNARY(modf, "[modf]", bits_90, make_rounding_samples, call_modf_fraction) \ - UNARY(erf, "[transcendental][erf]", bits_80, make_erf_samples, call_erf) \ - UNARY(erfc, "[transcendental][erfc]", bits_80, make_erf_samples, call_erfc) \ - UNARY(lgamma, "[transcendental][gamma][lgamma]", bits_80, make_gamma_samples, call_lgamma) \ - UNARY(tgamma, "[transcendental][gamma][tgamma]", bits_80, make_gamma_samples, call_tgamma) - -#define FLTX_F128_PRIMARY_COMPARISON_CASES(BINARY_BOOL) \ - BINARY_BOOL(equal, "operator==", "[comparison][equal]", bits_90, make_comparison_samples, call_equal, call_equal) \ - BINARY_BOOL(not_equal, "operator!=", "[comparison][not_equal]", bits_90, make_comparison_samples, call_not_equal, call_not_equal) \ - BINARY_BOOL(less, "operator<", "[comparison][less]", bits_90, make_comparison_samples, call_less, call_less) \ - BINARY_BOOL(greater, "operator>", "[comparison][greater]", bits_90, make_comparison_samples, call_greater, call_greater) \ - BINARY_BOOL(less_equal, "operator<=", "[comparison][less_equal]", bits_90, make_comparison_samples, call_less_equal, call_less_equal) \ - BINARY_BOOL(greater_equal, "operator>=", "[comparison][greater_equal]", bits_90, make_comparison_samples, call_greater_equal, call_greater_equal) - -#endif diff --git a/tests/metrics/metrics_f256_accuracy.cpp b/tests/metrics/metrics_f256_accuracy.cpp deleted file mode 100644 index 7074aa2..0000000 --- a/tests/metrics/metrics_f256_accuracy.cpp +++ /dev/null @@ -1,127 +0,0 @@ -#include "metrics_f256_primary.h" -#include "metrics_f128_primary_cases.h" -#include "metrics_case_output.h" - -using namespace bl::test::metrics::f256_primary; - -#define FLTX_F256_UNARY_ACCURACY(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " precision", "[metrics][precision][accuracy][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("precision")) { SUCCEED("metrics precision phase not selected"); return; } \ - const bool enforce_assertions = bl::test::metrics::metrics_case_assertions_enabled(); \ - const auto samples = SAMPLES(); \ - const auto record = run_unary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - [](const auto& x) { return CALL(x); }, \ - false, enforce_assertions); \ - bl::test::metrics::write_metrics_case_report("f256 primary precision: " #NAME, record); \ - if (enforce_assertions) check_competitor_slack(record); \ - } - -#define FLTX_F256_BINARY_ACCURACY(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " precision", "[metrics][precision][accuracy][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("precision")) { SUCCEED("metrics precision phase not selected"); return; } \ - const bool enforce_assertions = bl::test::metrics::metrics_case_assertions_enabled(); \ - const auto samples = SAMPLES(); \ - const auto record = run_binary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y) { return CALL(x, y); }, \ - [](const auto& x, const auto& y) { return REF_CALL(x, y); }, \ - false, enforce_assertions); \ - bl::test::metrics::write_metrics_case_report("f256 primary precision: " #NAME, record); \ - if (enforce_assertions) check_competitor_slack(record); \ - } - -#define FLTX_F256_BINARY_BOOL_ACCURACY(NAME, LABEL, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " LABEL " precision", "[metrics][precision][accuracy][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("precision")) { SUCCEED("metrics precision phase not selected"); return; } \ - const bool enforce_assertions = bl::test::metrics::metrics_case_assertions_enabled(); \ - const auto samples = SAMPLES(); \ - const auto record = run_binary_bool_case( \ - LABEL, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y) { return CALL(x, y); }, \ - [](const auto& x, const auto& y) { return REF_CALL(x, y); }, \ - false, enforce_assertions); \ - bl::test::metrics::write_metrics_case_report("f256 primary precision: " LABEL, record); \ - if (enforce_assertions) check_competitor_slack(record); \ - } - -#define FLTX_F256_TERNARY_ACCURACY(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " precision", "[metrics][precision][accuracy][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("precision")) { SUCCEED("metrics precision phase not selected"); return; } \ - const bool enforce_assertions = bl::test::metrics::metrics_case_assertions_enabled(); \ - const auto samples = SAMPLES(); \ - const auto record = run_ternary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y, const auto& z) { return CALL(x, y, z); }, \ - [](const auto& x, const auto& y, const auto& z) { return REF_CALL(x, y, z); }, \ - false, enforce_assertions); \ - bl::test::metrics::write_metrics_case_report("f256 primary precision: " #NAME, record); \ - if (enforce_assertions) check_competitor_slack(record); \ - } - -#define FLTX_F256_UNARY_INT_ACCURACY(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " precision", "[metrics][precision][accuracy][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("precision")) { SUCCEED("metrics precision phase not selected"); return; } \ - const bool enforce_assertions = bl::test::metrics::metrics_case_assertions_enabled(); \ - const auto samples = SAMPLES(); \ - const auto record = run_unary_int_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, int n) { return CALL(x, n); }, \ - [](const auto& x, int n) { return CALL(x, n); }, \ - false, enforce_assertions); \ - bl::test::metrics::write_metrics_case_report("f256 primary precision: " #NAME, record); \ - if (enforce_assertions) check_competitor_slack(record); \ - } - -#define FLTX_F256_UNARY_INTEGER_ACCURACY(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " precision", "[metrics][precision][accuracy][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("precision")) { SUCCEED("metrics precision phase not selected"); return; } \ - const bool enforce_assertions = bl::test::metrics::metrics_case_assertions_enabled(); \ - const auto samples = SAMPLES(); \ - const auto record = run_unary_integer_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - [](const auto& x) { return REF_CALL(x); }, \ - false, enforce_assertions); \ - bl::test::metrics::write_metrics_case_report("f256 primary precision: " #NAME, record); \ - if (enforce_assertions) check_competitor_slack(record); \ - } - -#define FLTX_F256_FREXP_ACCURACY(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " precision", "[metrics][precision][accuracy][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("precision")) { SUCCEED("metrics precision phase not selected"); return; } \ - const bool enforce_assertions = bl::test::metrics::metrics_case_assertions_enabled(); \ - const auto samples = SAMPLES(); \ - const auto record = run_frexp_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - false, enforce_assertions); \ - bl::test::metrics::write_metrics_case_report("f256 primary precision: " #NAME, record); \ - if (enforce_assertions) check_competitor_slack(record); \ - } - -FLTX_F128_PRIMARY_CASES( - FLTX_F256_UNARY_ACCURACY, - FLTX_F256_BINARY_ACCURACY, - FLTX_F256_TERNARY_ACCURACY, - FLTX_F256_UNARY_INT_ACCURACY, - FLTX_F256_UNARY_INTEGER_ACCURACY, - FLTX_F256_FREXP_ACCURACY) - -FLTX_F128_PRIMARY_COMPARISON_CASES(FLTX_F256_BINARY_BOOL_ACCURACY) - -#undef FLTX_F256_UNARY_ACCURACY -#undef FLTX_F256_BINARY_ACCURACY -#undef FLTX_F256_BINARY_BOOL_ACCURACY -#undef FLTX_F256_TERNARY_ACCURACY -#undef FLTX_F256_UNARY_INT_ACCURACY -#undef FLTX_F256_UNARY_INTEGER_ACCURACY -#undef FLTX_F256_FREXP_ACCURACY diff --git a/tests/metrics/metrics_f256_bench.cpp b/tests/metrics/metrics_f256_bench.cpp deleted file mode 100644 index 8a28858..0000000 --- a/tests/metrics/metrics_f256_bench.cpp +++ /dev/null @@ -1,127 +0,0 @@ -#include "metrics_f256_primary.h" -#include "metrics_f128_primary_cases.h" -#include "metrics_case_output.h" - -using namespace bl::test::metrics::f256_primary; - -#define FLTX_F256_UNARY_BENCH(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " benchmark", "[metrics][bench][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("bench")) { SUCCEED("metrics benchmark phase not selected"); return; } \ - const scoped_benchmark_sample_count benchmark_samples{ #NAME }; \ - const auto samples = SAMPLES(); \ - const auto record = run_unary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - [](const auto& x) { return CALL(x); }, \ - true, false, domain_ideal_bits, false); \ - bl::test::metrics::write_metrics_case_report("f256 primary benchmark: " #NAME, record); \ - check_benchmark_claim_is_meaningful(record); \ - } - -#define FLTX_F256_BINARY_BENCH(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " benchmark", "[metrics][bench][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("bench")) { SUCCEED("metrics benchmark phase not selected"); return; } \ - const scoped_benchmark_sample_count benchmark_samples{ #NAME }; \ - const auto samples = SAMPLES(); \ - const auto record = run_binary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y) { return CALL(x, y); }, \ - [](const auto& x, const auto& y) { return REF_CALL(x, y); }, \ - true, false, domain_ideal_bits, false); \ - bl::test::metrics::write_metrics_case_report("f256 primary benchmark: " #NAME, record); \ - check_benchmark_claim_is_meaningful(record); \ - } - -#define FLTX_F256_BINARY_BOOL_BENCH(NAME, LABEL, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " LABEL " benchmark", "[metrics][bench][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("bench")) { SUCCEED("metrics benchmark phase not selected"); return; } \ - const scoped_benchmark_sample_count benchmark_samples{ LABEL }; \ - const auto samples = SAMPLES(); \ - const auto record = run_binary_bool_case( \ - LABEL, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y) { return CALL(x, y); }, \ - [](const auto& x, const auto& y) { return REF_CALL(x, y); }, \ - true, false, domain_ideal_bits, false); \ - bl::test::metrics::write_metrics_case_report("f256 primary benchmark: " LABEL, record); \ - check_benchmark_claim_is_meaningful(record); \ - } - -#define FLTX_F256_TERNARY_BENCH(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " benchmark", "[metrics][bench][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("bench")) { SUCCEED("metrics benchmark phase not selected"); return; } \ - const scoped_benchmark_sample_count benchmark_samples{ #NAME }; \ - const auto samples = SAMPLES(); \ - const auto record = run_ternary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y, const auto& z) { return CALL(x, y, z); }, \ - [](const auto& x, const auto& y, const auto& z) { return REF_CALL(x, y, z); }, \ - true, false, domain_ideal_bits, false); \ - bl::test::metrics::write_metrics_case_report("f256 primary benchmark: " #NAME, record); \ - check_benchmark_claim_is_meaningful(record); \ - } - -#define FLTX_F256_UNARY_INT_BENCH(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " benchmark", "[metrics][bench][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("bench")) { SUCCEED("metrics benchmark phase not selected"); return; } \ - const scoped_benchmark_sample_count benchmark_samples{ #NAME }; \ - const auto samples = SAMPLES(); \ - const auto record = run_unary_int_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, int n) { return CALL(x, n); }, \ - [](const auto& x, int n) { return CALL(x, n); }, \ - true, false, domain_ideal_bits, false); \ - bl::test::metrics::write_metrics_case_report("f256 primary benchmark: " #NAME, record); \ - check_benchmark_claim_is_meaningful(record); \ - } - -#define FLTX_F256_UNARY_INTEGER_BENCH(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " benchmark", "[metrics][bench][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("bench")) { SUCCEED("metrics benchmark phase not selected"); return; } \ - const scoped_benchmark_sample_count benchmark_samples{ #NAME }; \ - const auto samples = SAMPLES(); \ - const auto record = run_unary_integer_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - [](const auto& x) { return REF_CALL(x); }, \ - true, false, domain_ideal_bits, false); \ - bl::test::metrics::write_metrics_case_report("f256 primary benchmark: " #NAME, record); \ - check_benchmark_claim_is_meaningful(record); \ - } - -#define FLTX_F256_FREXP_BENCH(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " benchmark", "[metrics][bench][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("bench")) { SUCCEED("metrics benchmark phase not selected"); return; } \ - const scoped_benchmark_sample_count benchmark_samples{ #NAME }; \ - const auto samples = SAMPLES(); \ - const auto record = run_frexp_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - true, false, domain_ideal_bits, false); \ - bl::test::metrics::write_metrics_case_report("f256 primary benchmark: " #NAME, record); \ - check_benchmark_claim_is_meaningful(record); \ - } - -FLTX_F128_PRIMARY_CASES( - FLTX_F256_UNARY_BENCH, - FLTX_F256_BINARY_BENCH, - FLTX_F256_TERNARY_BENCH, - FLTX_F256_UNARY_INT_BENCH, - FLTX_F256_UNARY_INTEGER_BENCH, - FLTX_F256_FREXP_BENCH) - -FLTX_F128_PRIMARY_COMPARISON_CASES(FLTX_F256_BINARY_BOOL_BENCH) - -#undef FLTX_F256_UNARY_BENCH -#undef FLTX_F256_BINARY_BENCH -#undef FLTX_F256_BINARY_BOOL_BENCH -#undef FLTX_F256_TERNARY_BENCH -#undef FLTX_F256_UNARY_INT_BENCH -#undef FLTX_F256_UNARY_INTEGER_BENCH -#undef FLTX_F256_FREXP_BENCH diff --git a/tests/metrics/metrics_f256_domain.cpp b/tests/metrics/metrics_f256_domain.cpp deleted file mode 100644 index 27ca498..0000000 --- a/tests/metrics/metrics_f256_domain.cpp +++ /dev/null @@ -1,120 +0,0 @@ -#include "metrics_f256_primary.h" -#include "metrics_f128_primary_cases.h" -#include "metrics_case_output.h" - -using namespace bl::test::metrics::f256_primary; - -#define FLTX_F256_UNARY_DOMAIN(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " domain", "[metrics][domain][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("domain")) { SUCCEED("metrics domain phase not selected"); return; } \ - const auto samples = make_domain_unary_samples(#NAME); \ - const auto record = run_unary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - [](const auto& x) { return CALL(x); }, \ - false, false); \ - bl::test::metrics::write_metrics_case_report("f256 primary domain: " #NAME, record); \ - CHECK(record.fltx_accuracy.sample_count > 0); \ - } - -#define FLTX_F256_BINARY_DOMAIN(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " domain", "[metrics][domain][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("domain")) { SUCCEED("metrics domain phase not selected"); return; } \ - const auto samples = make_domain_binary_samples(#NAME); \ - const auto record = run_binary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y) { return CALL(x, y); }, \ - [](const auto& x, const auto& y) { return REF_CALL(x, y); }, \ - false, false); \ - bl::test::metrics::write_metrics_case_report("f256 primary domain: " #NAME, record); \ - CHECK(record.fltx_accuracy.sample_count > 0); \ - } - -#define FLTX_F256_BINARY_BOOL_DOMAIN(NAME, LABEL, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " LABEL " domain", "[metrics][domain][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("domain")) { SUCCEED("metrics domain phase not selected"); return; } \ - const auto samples = make_domain_binary_samples(LABEL); \ - const auto record = run_binary_bool_case( \ - LABEL, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y) { return CALL(x, y); }, \ - [](const auto& x, const auto& y) { return REF_CALL(x, y); }, \ - false, false); \ - bl::test::metrics::write_metrics_case_report("f256 primary domain: " LABEL, record); \ - CHECK(record.fltx_accuracy.sample_count > 0); \ - } - -#define FLTX_F256_TERNARY_DOMAIN(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " domain", "[metrics][domain][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("domain")) { SUCCEED("metrics domain phase not selected"); return; } \ - const auto samples = make_domain_ternary_samples(#NAME); \ - const auto record = run_ternary_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, const auto& y, const auto& z) { return CALL(x, y, z); }, \ - [](const auto& x, const auto& y, const auto& z) { return REF_CALL(x, y, z); }, \ - false, false); \ - bl::test::metrics::write_metrics_case_report("f256 primary domain: " #NAME, record); \ - CHECK(record.fltx_accuracy.sample_count > 0); \ - } - -#define FLTX_F256_UNARY_INT_DOMAIN(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " domain", "[metrics][domain][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("domain")) { SUCCEED("metrics domain phase not selected"); return; } \ - const auto samples = make_domain_unary_int_samples(#NAME); \ - const auto record = run_unary_int_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x, int n) { return CALL(x, n); }, \ - [](const auto& x, int n) { return CALL(x, n); }, \ - false, false); \ - bl::test::metrics::write_metrics_case_report("f256 primary domain: " #NAME, record); \ - CHECK(record.fltx_accuracy.sample_count > 0); \ - } - -#define FLTX_F256_UNARY_INTEGER_DOMAIN(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL, REF_CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " domain", "[metrics][domain][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("domain")) { SUCCEED("metrics domain phase not selected"); return; } \ - const auto samples = make_domain_unary_samples(#NAME); \ - const auto record = run_unary_integer_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - [](const auto& x) { return REF_CALL(x); }, \ - false, false); \ - bl::test::metrics::write_metrics_case_report("f256 primary domain: " #NAME, record); \ - CHECK(record.fltx_accuracy.sample_count > 0); \ - } - -#define FLTX_F256_FREXP_DOMAIN(NAME, TAGS, REQUIRED_BITS, SAMPLES, CALL) \ - TEST_CASE("f256 primary " FLTX_PRIMARY_CASE_ORDER(NAME) " " #NAME " domain", "[metrics][domain][fltx][f256][primary]" TAGS) \ - { \ - if (!bl::test::metrics::metrics_case_phase_enabled("domain")) { SUCCEED("metrics domain phase not selected"); return; } \ - const auto samples = make_domain_unary_samples(#NAME); \ - const auto record = run_frexp_case( \ - #NAME, REQUIRED_BITS, samples, \ - [](const auto& x) { return CALL(x); }, \ - false, false); \ - bl::test::metrics::write_metrics_case_report("f256 primary domain: " #NAME, record); \ - CHECK(record.fltx_accuracy.sample_count > 0); \ - } - -FLTX_F128_PRIMARY_CASES( - FLTX_F256_UNARY_DOMAIN, - FLTX_F256_BINARY_DOMAIN, - FLTX_F256_TERNARY_DOMAIN, - FLTX_F256_UNARY_INT_DOMAIN, - FLTX_F256_UNARY_INTEGER_DOMAIN, - FLTX_F256_FREXP_DOMAIN) - -FLTX_F128_PRIMARY_COMPARISON_CASES(FLTX_F256_BINARY_BOOL_DOMAIN) - -#undef FLTX_F256_UNARY_DOMAIN -#undef FLTX_F256_BINARY_DOMAIN -#undef FLTX_F256_BINARY_BOOL_DOMAIN -#undef FLTX_F256_TERNARY_DOMAIN -#undef FLTX_F256_UNARY_INT_DOMAIN -#undef FLTX_F256_UNARY_INTEGER_DOMAIN -#undef FLTX_F256_FREXP_DOMAIN diff --git a/tests/metrics/metrics_f256_primary.h b/tests/metrics/metrics_f256_primary.h deleted file mode 100644 index d4d45ff..0000000 --- a/tests/metrics/metrics_f256_primary.h +++ /dev/null @@ -1,3013 +0,0 @@ -#ifndef FLTX_TESTS_METRICS_F256_PRIMARY_INCLUDED -#define FLTX_TESTS_METRICS_F256_PRIMARY_INCLUDED - -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "metrics_config.h" -#include "metrics_records.h" -#include "metrics_domain_samples.h" -#include "metrics_qdpp.h" -#include "metrics_reference.h" -#include "metrics_samples.h" -#include "metrics_std_special_oracle.h" - -namespace bl::test::metrics::f256_primary -{ - using references = reference_types; - using fltx_type = references::fltx_type; - using perfect_ref = references::perfect_ref; - using competitor_ref = references::competitor_ref; - using extra_competitor_ref = references::extra_competitor_ref; - - constexpr domain_id primary_domain{ "primary", domain_role::primary }; - constexpr double competitor_accuracy_slack_bits = 16.0; - - constexpr std::size_t accuracy_random_sample_count = config::f256_primary_accuracy_random_sample_count; - constexpr std::size_t benchmark_random_sample_count = config::f256_primary_benchmark_random_sample_count; - constexpr std::size_t benchmark_min_iterations = config::f256_primary_benchmark_min_iterations; - - constexpr double bits_90 = 190.0; - constexpr double bits_80 = 180.0; - constexpr double bits_75 = 170.0; - constexpr double bits_40 = 80.0; - constexpr double domain_ideal_bits = 212.0; - - constexpr std::size_t default_domain_random_sample_count = config::primary_domain_random_sample_count; - - inline thread_local std::size_t active_random_sample_count = accuracy_random_sample_count; - - [[nodiscard]] inline std::size_t random_sample_count() noexcept - { - return active_random_sample_count; - } - - [[nodiscard]] inline double benchmark_local_sample_scale(std::string_view operation) noexcept - { - if (operation == "erf" || operation == "erfc" || operation == "lgamma" || operation == "tgamma") - return 0.25; - - if (operation == "asin" || operation == "acos" || operation == "asinh" || operation == "acosh" - || operation == "atanh" || operation == "log" || operation == "log2" || operation == "log10" - || operation == "log1p" || operation == "pow") - return 0.25; - - if (operation == "sin" || operation == "cos" || operation == "tan" || operation == "atan" - || operation == "atan2" || operation == "exp" || operation == "exp2" || operation == "expm1" - || operation == "sinh" || operation == "cosh" || operation == "tanh") - return 0.25; - - if (operation == "fmod" || operation == "remainder" || operation == "remquo") - return 0.5; - - return 1.0; - } - - [[nodiscard]] inline bool is_short_rounding_benchmark(std::string_view operation) noexcept - { - return operation == "floor" || operation == "ceil" || operation == "trunc" || - operation == "round" || operation == "nearbyint" || operation == "rint"; - } - - [[nodiscard]] inline bool is_integer_rounding_benchmark(std::string_view operation) noexcept - { - return operation == "lround" || operation == "llround" || - operation == "lrint" || operation == "llrint"; - } - - [[nodiscard]] inline bool is_short_utility_benchmark(std::string_view operation) noexcept - { - return operation == "fabs" || operation == "fdim" || operation == "ldexp" || - operation == "scalbn" || operation == "scalbln" || operation == "frexp" || - operation == "nextafter" || operation == "nexttoward"; - } - - [[nodiscard]] inline std::size_t benchmark_sample_count(std::string_view operation) noexcept - { - return config::scale_count(benchmark_random_sample_count, benchmark_local_sample_scale(operation)); - } - - class scoped_benchmark_sample_count - { - public: - explicit scoped_benchmark_sample_count(std::string_view operation) noexcept - : previous_count(active_random_sample_count) - { - active_random_sample_count = benchmark_sample_count(operation); - } - - scoped_benchmark_sample_count(const scoped_benchmark_sample_count&) = delete; - scoped_benchmark_sample_count& operator=(const scoped_benchmark_sample_count&) = delete; - - ~scoped_benchmark_sample_count() - { - active_random_sample_count = previous_count; - } - - private: - std::size_t previous_count; - }; - - [[nodiscard]] inline std::size_t domain_random_sample_count() noexcept - { - return configured_domain_random_sample_count(default_domain_random_sample_count); - } - - class sample_rng - { - public: - BL_FORCE_INLINE constexpr explicit sample_rng(std::uint64_t seed) noexcept - : engine(seed) - { - } - - [[nodiscard]] BL_FORCE_INLINE fltx_type unit() noexcept - { - bl::uniform_real_distribution distribution{ fltx_type{ 0.0 }, fltx_type{ 1.0 } }; - return distribution(engine); - } - - [[nodiscard]] BL_FORCE_INLINE double sign() noexcept - { - bl::uniform_int_distribution distribution{ 0, 1 }; - return distribution(engine) != 0 ? 1.0 : -1.0; - } - - [[nodiscard]] BL_FORCE_INLINE int integer(int min, int max) noexcept - { - bl::uniform_int_distribution distribution{ min, max }; - return distribution(engine); - } - - [[nodiscard]] BL_FORCE_INLINE fltx_type uniform(double min, double max) noexcept - { - bl::uniform_real_distribution distribution{ fltx_type{ min }, fltx_type{ max } }; - return distribution(engine); - } - - private: - bl::mt19937_64 engine; - }; - - [[nodiscard]] inline value_sample make_runtime_value(std::string_view label, double hi, double lo = 0.0) noexcept - { - const auto value = bl::detail::_f256::renorm4(hi, lo, 0.0, 0.0); - return { label, value.x0, value.x1, value.x2, value.x3 }; - } - - [[nodiscard]] inline value_sample make_runtime_value(std::string_view label, const fltx_type& value) noexcept - { - return { label, value.x0, value.x1, value.x2, value.x3 }; - } - - [[nodiscard]] inline value_sample make_runtime_value( - std::string_view label, - const fltx_type& value, - const fltx_type& residual) noexcept - { - return make_runtime_value(label, value + residual); - } - - [[nodiscard]] inline double approximate_value(const value_sample& value) noexcept - { - return (value.hi + value.lo) + (value.x2 + value.x3); - } - - [[nodiscard]] inline fltx_type uniform_value(sample_rng& rng, double min, double max) noexcept - { - return rng.uniform(min, max); - } - - [[nodiscard]] inline fltx_type signed_log_value(sample_rng& rng, int min_exp, int max_exp) noexcept - { - const int exponent = rng.integer(min_exp, max_exp); - const fltx_type value = bl::ldexp(fltx_type{ 1.0 } + rng.unit(), exponent); - return rng.sign() > 0.0 ? value : fltx_type{ -value }; - } - - [[nodiscard]] inline fltx_type positive_log_value(sample_rng& rng, int min_exp, int max_exp) noexcept - { - const int exponent = rng.integer(min_exp, max_exp); - return bl::ldexp(fltx_type{ 1.0 } + rng.unit(), exponent); - } - - [[nodiscard]] inline fltx_type residual_for(const fltx_type& value, sample_rng& rng) noexcept - { - const double hi = value.x0; - if (hi == 0.0 || !std::isfinite(hi)) - return fltx_type{ 0.0 }; - - const int exponent = std::ilogb(std::fabs(hi)); - const fltx_type residual = bl::ldexp(fltx_type{ 0.5 } + rng.unit(), exponent - 60); - return rng.sign() > 0.0 ? residual : fltx_type{ -residual }; - } - - [[nodiscard]] inline fltx_type positive_residual_for(const fltx_type& value, sample_rng& rng) noexcept - { - const fltx_type residual = residual_for(value, rng); - return residual.x0 < 0.0 ? fltx_type{ -residual } : residual; - } - - [[nodiscard]] inline fltx_type make_fltx(const value_sample& value) noexcept - { - return fltx_type{ value.hi, value.lo, value.x2, value.x3 }; - } - - [[nodiscard]] inline bool value_sample_is_zero(const value_sample& value) noexcept - { - return value.hi == 0.0 && value.lo == 0.0 && value.x2 == 0.0 && value.x3 == 0.0; - } - - [[nodiscard]] inline bool value_sample_signbit(const value_sample& value) noexcept - { - return detail::fp::signbit(value.hi); - } - - [[nodiscard]] inline perfect_ref signed_zero_perfect(bool negative) - { - return perfect_ref{ negative ? "-0" : "0" }; - } - - [[nodiscard]] inline competitor_ref make_competitor(const value_sample& value) - { - if (value_sample_is_zero(value)) - return competitor_ref{ value_sample_signbit(value) ? "-0" : "0" }; - return competitor_ref{ value.hi } + competitor_ref{ value.lo } + - competitor_ref{ value.x2 } + competitor_ref{ value.x3 }; - } - - [[nodiscard]] inline extra_competitor_ref make_extra_competitor(const value_sample& value) - { - return qdpp::make(value.hi, value.lo, value.x2, value.x3); - } - - [[nodiscard]] inline perfect_ref make_perfect(const value_sample& value) - { - if (value_sample_is_zero(value)) - return signed_zero_perfect(value_sample_signbit(value)); - return perfect_ref{ value.hi } + perfect_ref{ value.lo } + - perfect_ref{ value.x2 } + perfect_ref{ value.x3 }; - } - - [[nodiscard]] inline perfect_ref to_perfect(const fltx_type& value) - { - if (bl::iszero(value)) - return signed_zero_perfect(bl::signbit(value)); - return perfect_ref{ value.x0 } + perfect_ref{ value.x1 } + - perfect_ref{ value.x2 } + perfect_ref{ value.x3 }; - } - - [[nodiscard]] inline perfect_ref to_perfect(const competitor_ref& value) - { - using boost::multiprecision::signbit; - if (value == 0 && signbit(value)) - return signed_zero_perfect(true); - return perfect_ref{ value }; - } - - [[nodiscard]] inline perfect_ref to_perfect(const extra_competitor_ref& value) - { - if (value[0] == 0.0 && value[1] == 0.0 && value[2] == 0.0 && value[3] == 0.0) - { - return signed_zero_perfect(detail::fp::signbit(value[0])); - } - return perfect_ref{ value[0] } + perfect_ref{ value[1] } + - perfect_ref{ value[2] } + perfect_ref{ value[3] }; - } - - enum class special_value_kind - { - nan, - infinity, - zero, - finite - }; - - struct special_value_state - { - special_value_kind kind = special_value_kind::finite; - bool negative = false; - perfect_ref finite_value = 0; - }; - - [[nodiscard]] inline special_value_state classify_special_ref(const perfect_ref& value) - { - const double approximate = static_cast(value); - if (std::isnan(approximate)) - return { special_value_kind::nan, false, 0 }; - if (std::isinf(approximate)) - return { special_value_kind::infinity, std::signbit(approximate), 0 }; - - using boost::multiprecision::signbit; - if (value == 0) - return { special_value_kind::zero, signbit(value), 0 }; - return { special_value_kind::finite, signbit(value), value }; - } - - [[nodiscard]] inline special_value_state classify_special_double(double value) - { - if (std::isnan(value)) - return { special_value_kind::nan, false, 0 }; - if (std::isinf(value)) - return { special_value_kind::infinity, std::signbit(value), 0 }; - if (value == 0.0) - return { special_value_kind::zero, std::signbit(value), 0 }; - return { special_value_kind::finite, std::signbit(value), perfect_ref{ value } }; - } - - [[nodiscard]] inline special_value_state classify_special_value(const fltx_type& value) - { - if (bl::isnan(value)) - return { special_value_kind::nan, false, 0 }; - if (bl::isinf(value)) - return { special_value_kind::infinity, bl::signbit(value), 0 }; - if (bl::iszero(value)) - return { special_value_kind::zero, bl::signbit(value), 0 }; - return { special_value_kind::finite, bl::signbit(value), to_perfect(value) }; - } - - [[nodiscard]] inline special_value_state classify_special_value(const competitor_ref& value) - { - return classify_special_ref(to_perfect(value)); - } - - [[nodiscard]] inline special_value_state classify_special_value(const extra_competitor_ref& value) - { - if (std::isnan(value[0]) || (std::isfinite(value[0]) && - (std::isnan(value[1]) || std::isnan(value[2]) || std::isnan(value[3])))) - { - return { special_value_kind::nan, false, 0 }; - } - if (std::isinf(value[0])) - return { special_value_kind::infinity, std::signbit(value[0]), 0 }; - if (value[0] == 0.0 && value[1] == 0.0 && value[2] == 0.0 && value[3] == 0.0) - return { special_value_kind::zero, std::signbit(value[0]), 0 }; - return { special_value_kind::finite, std::signbit(value[0]), to_perfect(value) }; - } - - [[nodiscard]] inline perfect_ref abs_ref(const perfect_ref& value) - { - return value < 0 ? -value : value; - } - - [[nodiscard]] inline perfect_ref reference_scale(const perfect_ref& expected) - { - const perfect_ref scale = abs_ref(expected); - return scale < 1 ? perfect_ref{ 1 } : scale; - } - - [[nodiscard]] inline double matching_bits(const perfect_ref& actual, const perfect_ref& expected) - { - const perfect_ref error = abs_ref(actual - expected); - if (error == 0) - return std::numeric_limits::infinity(); - - const perfect_ref scaled_error = error / reference_scale(expected); - using std::log2; - return static_cast(-log2(scaled_error)); - } - - [[nodiscard]] inline double domain_matching_bits(const perfect_ref& actual, const perfect_ref& expected) - { - const perfect_ref error = abs_ref(actual - expected); - if (error == 0) - return std::numeric_limits::infinity(); - - const perfect_ref scaled_error = error / reference_scale(expected); - using std::log2; - return static_cast(-log2(scaled_error)); - } - - [[nodiscard]] inline double domain_score_bits(const perfect_ref& actual, const perfect_ref& expected) - { - const double bits = domain_matching_bits(actual, expected); - return std::isnan(bits) ? 0.0 : bits; - } - - [[nodiscard]] inline bool special_values_match( - const special_value_state& actual, - const special_value_state& expected) - { - constexpr double finite_match_bits = 20.0; - if (actual.kind != expected.kind) - return false; - - if (expected.kind == special_value_kind::nan) - return true; - if (expected.kind == special_value_kind::infinity || expected.kind == special_value_kind::zero) - return actual.negative == expected.negative; - - const double bits = matching_bits(actual.finite_value, expected.finite_value); - return std::isinf(bits) || bits >= finite_match_bits; - } - - template - [[nodiscard]] special_correctness measure_unary_special_values( - std::string_view operation, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - (void)reference; - if (samples.empty()) - return special_correctness::unavailable; - - for (std::size_t index = 0; index < samples.size(); ++index) - { - special_value_state expected; - try - { - expected = classify_special_double( - stdlib_unary_special_result(operation, sample_as_double(samples[index].x))); - } - catch (...) - { - return special_correctness::unavailable; - } - - try - { - const special_value_state actual = classify_special_value(eval(values[index])); - if (!special_values_match(actual, expected)) - { - if (special_trace_enabled()) - { - std::cerr << "[special trace] " << operation << " sample " << index - << " '" << samples[index].label << "' mismatch\n"; - } - return special_correctness::fail; - } - } - catch (...) - { - return special_correctness::fail; - } - } - return special_correctness::pass; - } - - template - [[nodiscard]] special_correctness measure_binary_special_values( - std::string_view operation, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - (void)reference; - if (samples.empty()) - return special_correctness::unavailable; - - for (std::size_t index = 0; index < samples.size(); ++index) - { - special_value_state expected; - try - { - expected = classify_special_double(stdlib_binary_special_result( - operation, - sample_as_double(samples[index].x), - sample_as_double(samples[index].y))); - } - catch (...) - { - return special_correctness::unavailable; - } - - try - { - const special_value_state actual = classify_special_value( - eval(values[index].x, values[index].y)); - if (!special_values_match(actual, expected)) - { - if (special_trace_enabled()) - { - std::cerr << "[special trace] " << operation << " sample " << index - << " '" << samples[index].label << "' mismatch\n"; - } - return special_correctness::fail; - } - } - catch (...) - { - return special_correctness::fail; - } - } - return special_correctness::pass; - } - - template - [[nodiscard]] special_correctness measure_ternary_special_values( - std::string_view operation, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - (void)reference; - if (samples.empty()) - return special_correctness::unavailable; - - for (std::size_t index = 0; index < samples.size(); ++index) - { - special_value_state expected; - try - { - expected = classify_special_double(stdlib_ternary_special_result( - operation, - sample_as_double(samples[index].x), - sample_as_double(samples[index].y), - sample_as_double(samples[index].z))); - } - catch (...) - { - return special_correctness::unavailable; - } - - try - { - const special_value_state actual = classify_special_value( - eval(values[index].x, values[index].y, values[index].z)); - if (!special_values_match(actual, expected)) - { - if (special_trace_enabled()) - { - std::cerr << "[special trace] " << operation << " sample " << index - << " '" << samples[index].label << "' mismatch\n"; - } - return special_correctness::fail; - } - } - catch (...) - { - return special_correctness::fail; - } - } - return special_correctness::pass; - } - - template - [[nodiscard]] special_correctness measure_unary_int_special_values( - std::string_view operation, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - (void)reference; - if (samples.empty()) - return special_correctness::unavailable; - - for (std::size_t index = 0; index < samples.size(); ++index) - { - special_value_state expected; - try - { - expected = classify_special_double(stdlib_unary_int_special_result( - operation, - sample_as_double(samples[index].x), - samples[index].n)); - } - catch (...) - { - return special_correctness::unavailable; - } - - try - { - const special_value_state actual = classify_special_value( - eval(values[index].x, values[index].n)); - if (!special_values_match(actual, expected)) - { - if (special_trace_enabled()) - { - std::cerr << "[special trace] " << operation << " sample " << index - << " '" << samples[index].label << "' mismatch\n"; - } - return special_correctness::fail; - } - } - catch (...) - { - return special_correctness::fail; - } - } - return special_correctness::pass; - } - - [[nodiscard]] inline double finite_for_mean(double bits) noexcept - { - constexpr double exact_result_bits = 320.0; - return std::isinf(bits) ? exact_result_bits : bits; - } - - template - [[nodiscard]] std::vector make_unary_inputs(const Samples& samples, MakeFn make_value) - { - std::vector values; - values.reserve(samples.size()); - for (const auto& sample : samples) - values.push_back(make_value(sample.x)); - return values; - } - - template - [[nodiscard]] std::vector> make_binary_inputs(const Samples& samples, MakeFn make_value) - { - std::vector> values; - values.reserve(samples.size()); - for (const auto& sample : samples) - values.push_back({ make_value(sample.x), make_value(sample.y) }); - return values; - } - - template - [[nodiscard]] std::vector> make_ternary_inputs(const Samples& samples, MakeFn make_value) - { - std::vector> values; - values.reserve(samples.size()); - for (const auto& sample : samples) - values.push_back({ make_value(sample.x), make_value(sample.y), make_value(sample.z) }); - return values; - } - - template - [[nodiscard]] std::vector> make_unary_int_inputs(const Samples& samples, MakeFn make_value) - { - std::vector> values; - values.reserve(samples.size()); - for (const auto& sample : samples) - values.push_back({ make_value(sample.x), sample.n }); - return values; - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_add(const T& x, const T& y) { return x + y; } - - template - [[nodiscard]] BL_FORCE_INLINE T call_subtract(const T& x, const T& y) { return x - y; } - - template - [[nodiscard]] BL_FORCE_INLINE T call_multiply(const T& x, const T& y) { return x * y; } - - template - [[nodiscard]] BL_FORCE_INLINE T call_divide(const T& x, const T& y) { return x / y; } - - template - [[nodiscard]] BL_FORCE_INLINE bool call_equal(const T& x, const T& y) { return x == y; } - - template - [[nodiscard]] BL_FORCE_INLINE bool call_not_equal(const T& x, const T& y) { return x != y; } - - template - [[nodiscard]] BL_FORCE_INLINE bool call_less(const T& x, const T& y) { return x < y; } - - template - [[nodiscard]] BL_FORCE_INLINE bool call_greater(const T& x, const T& y) { return x > y; } - - template - [[nodiscard]] BL_FORCE_INLINE bool call_less_equal(const T& x, const T& y) { return x <= y; } - - template - [[nodiscard]] BL_FORCE_INLINE bool call_greater_equal(const T& x, const T& y) { return x >= y; } - - template - [[nodiscard]] BL_FORCE_INLINE T call_sqrt(const T& x) { using std::sqrt; return sqrt(x); } - - [[nodiscard]] BL_FORCE_INLINE extra_competitor_ref call_cbrt(const extra_competitor_ref& x) - { - return qdpp::cbrt(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_cbrt(const T& x) { using std::cbrt; return cbrt(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_hypot(const T& x, const T& y) { using std::hypot; return hypot(x, y); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_sin(const T& x) { using std::sin; return sin(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_cos(const T& x) { using std::cos; return cos(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_tan(const T& x) { using std::tan; return tan(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_atan(const T& x) { using std::atan; return atan(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_atan2(const T& y, const T& x) { using std::atan2; return atan2(y, x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_asin(const T& x) { using std::asin; return asin(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_acos(const T& x) { using std::acos; return acos(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_exp(const T& x) { using std::exp; return exp(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_exp2(const T& x) { using std::exp2; return exp2(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_expm1(const T& x) { using std::expm1; return expm1(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_log(const T& x) { using std::log; return log(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_log2(const T& x) { using std::log2; return log2(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_log10(const T& x) { using std::log10; return log10(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_log1p(const T& x) { using std::log1p; return log1p(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_pow(const T& x, const T& y) { using std::pow; return pow(x, y); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_sinh(const T& x) { using std::sinh; return sinh(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_cosh(const T& x) { using std::cosh; return cosh(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_tanh(const T& x) { using std::tanh; return tanh(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_asinh(const T& x) { using std::asinh; return asinh(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_acosh(const T& x) { using std::acosh; return acosh(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_atanh(const T& x) { using std::atanh; return atanh(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_fma(const T& x, const T& y, const T& z) { using std::fma; return fma(x, y, z); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_fma_reference(const T& x, const T& y, const T& z) { return x * y + z; } - - template - [[nodiscard]] BL_FORCE_INLINE T call_fabs(const T& x) { using boost::multiprecision::fabs; using std::fabs; return fabs(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_floor(const T& x) { using boost::multiprecision::floor; using std::floor; return floor(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_ceil(const T& x) { using boost::multiprecision::ceil; using std::ceil; return ceil(x); } - - [[nodiscard]] BL_FORCE_INLINE extra_competitor_ref call_trunc(const extra_competitor_ref& x) - { - return qdpp::trunc(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_trunc(const T& x) { using boost::multiprecision::trunc; using std::trunc; return trunc(x); } - - template - [[nodiscard]] BL_FORCE_INLINE T call_round(const T& x) { using boost::multiprecision::round; using std::round; return round(x); } - - [[nodiscard]] BL_FORCE_INLINE extra_competitor_ref call_nearbyint(const extra_competitor_ref& x) - { - return qdpp::nearbyint(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_nearbyint(const T& x) - { - using boost::multiprecision::nearbyint; - using std::nearbyint; - return nearbyint(x); - } - - [[nodiscard]] BL_FORCE_INLINE extra_competitor_ref call_rint(const extra_competitor_ref& x) - { - return qdpp::rint(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_rint(const T& x) { using boost::multiprecision::rint; using std::rint; return rint(x); } - - template - [[nodiscard]] BL_FORCE_INLINE long call_lround(const T& x) - { - using boost::multiprecision::lround; - using std::lround; - return lround(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE long long call_llround(const T& x) - { - using boost::multiprecision::llround; - using std::llround; - return llround(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE long call_lrint(const T& x) - { - using boost::multiprecision::lrint; - using std::lrint; - return lrint(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE long long call_llrint(const T& x) - { - using boost::multiprecision::llrint; - using std::llrint; - return llrint(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T round_nearest_even_integer_reference(const T& x) - { - using boost::multiprecision::floor; - using std::floor; - - const T lower = floor(x); - const T fraction = x - lower; - if (fraction < T{ 0.5 }) - return lower; - if (fraction > T{ 0.5 }) - return lower + T{ 1 }; - - const auto lower_integer = static_cast(lower); - return (lower_integer % 2ll) == 0 ? lower : lower + T{ 1 }; - } - - template - [[nodiscard]] BL_FORCE_INLINE long call_lrint_reference(const T& x) - { - return static_cast(round_nearest_even_integer_reference(x)); - } - - template - [[nodiscard]] BL_FORCE_INLINE long long call_llrint_reference(const T& x) - { - return static_cast(round_nearest_even_integer_reference(x)); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_fmod(const T& x, const T& y) - { - using boost::multiprecision::fmod; - using std::fmod; - return fmod(x, y); - } - - [[nodiscard]] BL_FORCE_INLINE extra_competitor_ref call_remainder(const extra_competitor_ref& x, const extra_competitor_ref& y) - { - return qdpp::remainder(x, y); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_remainder(const T& x, const T& y) - { - using boost::multiprecision::remainder; - using std::remainder; - return remainder(x, y); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_remquo_value(const T& x, const T& y) - { - int quotient = 0; - using boost::multiprecision::remquo; - using std::remquo; - return remquo(x, y, "ient); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_fmin(const T& x, const T& y) - { - using boost::multiprecision::fmin; - using std::fmin; - return fmin(x, y); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_fmax(const T& x, const T& y) - { - using boost::multiprecision::fmax; - using std::fmax; - return fmax(x, y); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_fdim(const T& x, const T& y) - { - using boost::multiprecision::fdim; - using std::fdim; - return fdim(x, y); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_copysign(const T& x, const T& y) - { - using boost::multiprecision::copysign; - using std::copysign; - return copysign(x, y); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_ldexp(const T& x, int n) - { - using boost::multiprecision::ldexp; - using std::ldexp; - return ldexp(x, n); - } - - [[nodiscard]] BL_FORCE_INLINE extra_competitor_ref call_scalbn(const extra_competitor_ref& x, int n) - { - return qdpp::scalbn(x, n); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_scalbn(const T& x, int n) - { - using boost::multiprecision::scalbn; - using std::scalbn; - return scalbn(x, n); - } - - [[nodiscard]] BL_FORCE_INLINE extra_competitor_ref call_scalbln(const extra_competitor_ref& x, int n) - { - return qdpp::scalbln(x, static_cast(n)); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_scalbln(const T& x, int n) - { - using boost::multiprecision::scalbln; - using std::scalbln; - return scalbln(x, static_cast(n)); - } - - [[nodiscard]] BL_FORCE_INLINE fltx_type call_nextafter(const fltx_type& from, const fltx_type& to) noexcept - { - return bl::nextafter(from, to); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_nextafter(const T& from, const T& to) - { - return boost::math::nextafter(from, to); - } - - [[nodiscard]] BL_FORCE_INLINE fltx_type call_nexttoward(const fltx_type& from, const fltx_type& to) noexcept - { - return bl::nexttoward(from, to); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_nexttoward(const T& from, const T& to) - { - return call_nextafter(from, to); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_logb(const T& x) - { - using boost::multiprecision::logb; - using std::logb; - return logb(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE int call_ilogb(const T& x) - { - using boost::multiprecision::ilogb; - using std::ilogb; - return static_cast(ilogb(x)); - } - - template - [[nodiscard]] BL_FORCE_INLINE frexp_value call_frexp(const T& x) - { - int exponent = 0; - using boost::multiprecision::frexp; - using std::frexp; - return { frexp(x, &exponent), exponent }; - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_modf_fraction(const T& x) - { - T integer_part{}; - using boost::multiprecision::modf; - using std::modf; - return modf(x, &integer_part); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_erf(const T& x) - { - using boost::multiprecision::erf; - using std::erf; - return erf(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_erfc(const T& x) - { - using boost::multiprecision::erfc; - using std::erfc; - return erfc(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_lgamma(const T& x) - { - using boost::multiprecision::lgamma; - using std::lgamma; - return lgamma(x); - } - - template - [[nodiscard]] BL_FORCE_INLINE T call_tgamma(const T& x) - { - using boost::multiprecision::tgamma; - using std::tgamma; - return tgamma(x); - } - - [[nodiscard]] inline std::vector make_positive_samples() - { - std::vector samples{ - { "quarter", { "x", 0.25, 0x1p-56 } }, - { "near one", { "x", 1.0, 0x1p-54 } }, - { "two", { "x", 2.0, 0x1p-55 } }, - { "large", { "x", 0x1.3c0ca428c59f8p+24, 0x1p-30 } }, - { "tiny normal", { "x", 0x1p-32, 0x1p-86 } } - }; - - sample_rng rng{ 0x128acc90517ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = positive_log_value(rng, -80, 80); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_arithmetic_samples() - { - std::vector samples{ - { "unit mixed signs", { "x", 1.25, 0x1p-54 }, { "y", -0.75, 0x1p-55 } }, - { "large plus small", { "x", 0x1.3c0ca428c59f8p+32, 0x1p-22 }, { "y", -0x1.f972474538ef3p-20, 0x1p-74 } }, - { "near cancellation", { "x", 1.0, 0x1p-54 }, { "y", -1.0, 0x1p-55 } }, - { "fractional", { "x", -0x1.1f9add3739636p-4, 0x1p-60 }, { "y", 0x1.3be76c8b43958p+3, -0x1p-52 } }, - { "wide finite", { "x", 0x1.2d6444d013d18p+48, -0x1p-8 }, { "y", 0x1.8p-24, 0x1p-80 } } - }; - - sample_rng rng{ 0x128acca217ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = signed_log_value(rng, -80, 80); - const fltx_type x_value = x + residual_for(x, rng); - fltx_type y_value{ 0.0 }; - switch (index % 4) - { - case 0: - y_value = signed_log_value(rng, -80, 80) + residual_for(x, rng); - break; - case 1: - y_value = -x_value + residual_for(x, rng); - break; - case 2: - y_value = x_value + residual_for(x, rng); - break; - default: - y_value = signed_log_value(rng, -12, 12) + residual_for(x, rng); - break; - } - - samples.push_back({ - "random", - make_runtime_value("x", x_value), - make_runtime_value("y", y_value) - }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_comparison_samples() - { - std::vector samples{ - { "equal positive", { "x", 1.25, 0x1p-54, -0x1p-108, 0x1p-162 }, { "y", 1.25, 0x1p-54, -0x1p-108, 0x1p-162 } }, - { "equal negative", { "x", -2.5, -0x1p-53, 0x1p-107, -0x1p-161 }, { "y", -2.5, -0x1p-53, 0x1p-107, -0x1p-161 } }, - { "signed zeros", { "x", 0.0, 0.0, 0.0, 0.0 }, { "y", std::copysign(0.0, -1.0), 0.0, 0.0, 0.0 } }, - { "same high x lower tail", { "x", 1.0, -0x1p-54, 0x1p-108, -0x1p-162 }, { "y", 1.0, 0x1p-54, -0x1p-108, 0x1p-162 } }, - { "same high x higher tail", { "x", 1.0, 0x1p-54, -0x1p-108, 0x1p-162 }, { "y", 1.0, -0x1p-54, 0x1p-108, -0x1p-162 } }, - { "same first two limbs", { "x", 1.0, 0x1p-54, -0x1p-108, 0x1p-162 }, { "y", 1.0, 0x1p-54, 0x1p-108, -0x1p-162 } }, - { "wide x greater", { "x", 0x1.2d6444d013d18p+48, -0x1p-8, 0x1p-62, -0x1p-116 }, { "y", 0x1.2d6444d013d18p+47, 0x1p-8, -0x1p-62, 0x1p-116 } }, - { "tiny x less", { "x", -0x1p-80, 0x1p-134, -0x1p-188, 0x1p-242 }, { "y", 0x1p-80, -0x1p-134, 0x1p-188, -0x1p-242 } } - }; - - sample_rng rng{ 0x256c0a9a11ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = signed_log_value(rng, -80, 80); - fltx_type y{}; - switch (index % 5) - { - case 0: - y = x; - break; - case 1: - y = x + residual_for(x, rng); - break; - case 2: - y = x - residual_for(x, rng); - break; - case 3: - y = -x; - break; - default: - y = signed_log_value(rng, -80, 80); - break; - } - - samples.push_back({ - "random", - make_runtime_value("x", x), - make_runtime_value("y", y) - }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_nextafter_samples() - { - std::vector samples{ - { "equal positive", { "from", 1.25, 0x1p-54 }, { "to", 1.25, 0x1p-54 } }, - { "up tail", { "from", 1.25, 0x1p-54 }, { "to", 2.0, 0.0 } }, - { "down tail", { "from", 1.25, 0x1p-54 }, { "to", -2.0, 0.0 } }, - { "zero to positive", { "from", 0.0, 0.0 }, { "to", 1.0, 0.0 } }, - { "zero to negative", { "from", 0.0, 0.0 }, { "to", -1.0, 0.0 } }, - { "negative zero to positive", { "from", std::copysign(0.0, -1.0), 0.0 }, { "to", 1.0, 0.0 } }, - { "large up", { "from", 0x1.2d6444d013d18p+48, -0x1p-8 }, { "to", 0x1.2d6444d013d18p+49, 0.0 } }, - { "tiny down", { "from", -0x1p-80, 0x1p-134 }, { "to", -1.0, 0.0 } } - }; - - sample_rng rng{ 0x256ad3a9e5ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type from = signed_log_value(rng, -80, 80); - const fltx_type delta = positive_residual_for(from, rng); - fltx_type to{}; - switch (index % 5) - { - case 0: - to = from + delta; - break; - case 1: - to = from - delta; - break; - case 2: - to = -from; - break; - case 3: - to = signed_log_value(rng, -80, 80); - break; - default: - to = from; - break; - } - - if (to == from && (index % 5) != 4) - to = from + fltx_type{ rng.sign() }; - - samples.push_back({ - "random", - make_runtime_value("from", from, residual_for(from, rng)), - make_runtime_value("to", to, residual_for(to, rng)) - }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_signed_samples() - { - std::vector samples{ - { "negative large", { "x", -1e20, 0x1p+12 } }, - { "negative ten", { "x", -10.0, 0x1p-50 } }, - { "negative one", { "x", -1.0, 0x1p-54 } }, - { "negative tiny", { "x", -1e-20, 0x1p-120 } }, - { "zero", { "x", 0.0, 0.0 } }, - { "positive tiny", { "x", 1e-20, -0x1p-120 } }, - { "one", { "x", 1.0, -0x1p-54 } }, - { "ten", { "x", 10.0, -0x1p-50 } }, - { "positive large", { "x", 1e20, -0x1p+12 } } - }; - - sample_rng rng{ 0x128acc51a5ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = signed_log_value(rng, -80, 80); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline fltx_type trig_half_pi() noexcept - { - return fltx_type{ 0x1.921fb54442d18p+0 } + fltx_type{ 0x1.1a62633145c07p-54 }; - } - - inline void append_trig_landmark_samples(std::vector& samples) - { - samples.push_back({ "tiny", { "x", 0x1p-20, 0x1p-74 } }); - samples.push_back({ "pi / 6", { "x", 0x1.0c152382d7366p-1, 0x1.1a62633145c07p-55 } }); - samples.push_back({ "pi / 4", { "x", 0x1.921fb54442d18p-1, 0x1.1a62633145c07p-55 } }); - samples.push_back({ "negative moderate", { "x", -2.5, 0x1p-54 } }); - samples.push_back({ "ten pi plus offset", { "x", 31.75, -0x1p-52 } }); - samples.push_back({ "wide reduction", { "x", 12345.678901234567, 0x1p-43 } }); - } - - [[nodiscard]] inline std::vector make_unshifted_trig_samples() - { - std::vector samples; - append_trig_landmark_samples(samples); - - sample_rng rng{ 0x128acc7e16ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = uniform_value(rng, -0x1p16, 0x1p16); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_trig_samples() - { - std::vector samples; - append_trig_landmark_samples(samples); - - const fltx_type half_pi = trig_half_pi(); - const std::size_t landmark_count = samples.size(); - for (std::size_t index = 0; index < landmark_count; ++index) - { - const fltx_type shifted = make_fltx(samples[index].x) + half_pi; - samples.push_back({ "phase shifted", make_runtime_value("x", shifted) }); - } - - sample_rng rng{ 0x128acc7e16ull }; - for (std::size_t index = 0; index < random_sample_count() / 2; ++index) - { - const fltx_type x = uniform_value(rng, -0x1p16, 0x1p16); - const fltx_type value = x + residual_for(x, rng); - samples.push_back({ "random", make_runtime_value("x", value) }); - samples.push_back({ "random phase shifted", make_runtime_value("x", value + half_pi) }); - } - if ((random_sample_count() & 1u) != 0u) - { - const fltx_type x = uniform_value(rng, -0x1p16, 0x1p16); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_tan_samples() - { - std::vector samples = make_unshifted_trig_samples(); - sample_rng rng{ 0x128acc7a9ull }; - while (samples.size() < random_sample_count() + 6) - { - const fltx_type x = uniform_value(rng, -0x1p16, 0x1p16); - if (std::fabs(std::cos(static_cast(x))) < 0x1p-20) - continue; - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_exp_samples() - { - std::vector samples{ - { "negative ten", { "x", -10.0, 0x1p-50 } }, - { "near zero", { "x", 0.0, 0x1p-60 } }, - { "quarter", { "x", 0.25, 0x1p-56 } }, - { "one", { "x", 1.0, -0x1p-54 } }, - { "five", { "x", 5.0, 0x1p-50 } } - }; - - sample_rng rng{ 0x128acce901ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = uniform_value(rng, -40.0, 40.0); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_exp2_samples() - { - std::vector samples{ - { "negative ten", { "x", -10.0, 0x1p-50 } }, - { "negative one", { "x", -1.0, 0x1p-54 } }, - { "zero", { "x", 0.0, 0.0 } }, - { "one", { "x", 1.0, -0x1p-54 } }, - { "ten", { "x", 10.0, -0x1p-50 } } - }; - - sample_rng rng{ 0x128acce2e2ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = uniform_value(rng, -128.0, 128.0); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_expm1_samples() - { - std::vector samples{ - { "negative twenty", { "x", -20.0, 0x1p-48 } }, - { "negative tiny", { "x", -1e-10, 0x1p-88 } }, - { "zero", { "x", 0.0, 0.0 } }, - { "positive tiny", { "x", 1e-10, -0x1p-88 } }, - { "twenty", { "x", 20.0, -0x1p-48 } } - }; - - sample_rng rng{ 0x128acce111ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = uniform_value(rng, -20.0, 20.0); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_log1p_samples() - { - std::vector samples{ - { "near negative one", { "x", -0.875, 0x1p-58 } }, - { "negative tiny", { "x", -1e-10, 0x1p-88 } }, - { "zero", { "x", 0.0, 0.0 } }, - { "positive tiny", { "x", 1e-10, -0x1p-88 } }, - { "ten", { "x", 10.0, 0x1p-50 } } - }; - - sample_rng rng{ 0x128acc1011ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = uniform_value(rng, -0.95, 20.0); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_pow_samples() - { - std::vector samples{ - { "square root", { "x", 2.0, 0x1p-55 }, { "y", 0.5, 0x1p-56 } }, - { "fractional base", { "x", 0.75, 0x1p-56 }, { "y", 3.25, -0x1p-54 } }, - { "near one", { "x", 1.0, 0x1p-53 }, { "y", 512.0, 0x1p-45 } }, - { "moderate", { "x", 8.5, -0x1p-53 }, { "y", -1.25, 0x1p-55 } }, - { "large base", { "x", 1024.0, 0x1p-42 }, { "y", 1.75, -0x1p-55 } } - }; - - sample_rng rng{ 0x128acc90dull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - fltx_type x{}; - fltx_type y{}; - switch (index % 4) - { - case 0: - x = positive_log_value(rng, -12, 12); - y = uniform_value(rng, -6.0, 6.0); - break; - case 1: - x = fltx_type{ 1.0 } + uniform_value(rng, -0.125, 0.125); - y = uniform_value(rng, -256.0, 256.0); - break; - case 2: - x = positive_log_value(rng, -32, 32); - y = uniform_value(rng, -2.0, 2.0); - break; - default: - x = uniform_value(rng, 0.125, 64.0); - y = fltx_type{ rng.integer(-16, 16) }; - break; - } - samples.push_back({ - "random", - make_runtime_value("x", x, residual_for(x, rng)), - make_runtime_value("y", y, residual_for(y, rng)) - }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_fma_samples() - { - std::vector samples{ - { "unit positive", { "x", 1.0, 0x1p-54 }, { "y", 1.0, -0x1p-55 }, { "z", 0.5, 0x1p-56 } }, - { "mixed signs", { "x", -1.25, 0x1p-54 }, { "y", 0.75, 0x1p-55 }, { "z", -0.5, -0x1p-56 } }, - { "large product", { "x", 0x1.3c0ca428c59f8p+24, 0x1p-30 }, { "y", -0x1.8p+12, 0x1p-42 }, { "z", 0x1.2p+20, -0x1p-34 } } - }; - - sample_rng rng{ 0x128accf0a1ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = signed_log_value(rng, -24, 24); - const fltx_type y = signed_log_value(rng, -24, 24); - const fltx_type product = x * y; - fltx_type z{}; - switch (index % 4) - { - case 0: - z = signed_log_value(rng, -48, 48); - break; - case 1: - z = -product + (rng.sign() > 0.0 ? bl::ldexp(product, -12) : -bl::ldexp(product, -12)); - break; - case 2: - z = product * fltx_type{ -0.5 } + residual_for(product, rng); - break; - default: - z = signed_log_value(rng, -12, 12); - break; - } - samples.push_back({ - "random", - make_runtime_value("x", x, residual_for(x, rng)), - make_runtime_value("y", y, residual_for(y, rng)), - make_runtime_value("z", z, residual_for(z, rng)) - }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_hypot_samples() - { - std::vector samples{ - { "zero", { "x", 0.0, 0.0 }, { "y", 0.0, 0.0 } }, - { "three four", { "x", 3.0, 0x1p-54 }, { "y", 4.0, -0x1p-54 } }, - { "mixed scale", { "x", 1e20, 0x1p+12 }, { "y", 1e-20, 0x1p-120 } }, - { "moderate", { "x", 123.456, 0x1p-48 }, { "y", 789.25, -0x1p-44 } } - }; - - sample_rng rng{ 0x128acc1707ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = signed_log_value(rng, -60, 60); - const fltx_type y = signed_log_value(rng, -60, 60); - samples.push_back({ - "random", - make_runtime_value("x", x, residual_for(x, rng)), - make_runtime_value("y", y, residual_for(y, rng)) - }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_unit_interval_samples() - { - std::vector samples{ - { "negative one", { "x", -1.0, 0.0 } }, - { "negative half", { "x", -0.5, 0x1p-58 } }, - { "zero", { "x", 0.0, 0.0 } }, - { "half", { "x", 0.5, -0x1p-58 } }, - { "one", { "x", 1.0, 0.0 } } - }; - - sample_rng rng{ 0x128acc1eafull }; - while (samples.size() < random_sample_count() + 5) - { - const fltx_type x = uniform_value(rng, -0.999999, 0.999999); - const value_sample sample = make_runtime_value("x", x, residual_for(x, rng)); - if (std::fabs(approximate_value(sample)) <= 1.0) - samples.push_back({ "random", sample }); - } - return samples; - } - - inline void append_hyperbolic_landmark_samples(std::vector& samples) - { - samples.push_back({ "negative four", { "x", -4.0, 0x1p-52 } }); - samples.push_back({ "negative one", { "x", -1.0, 0x1p-54 } }); - samples.push_back({ "zero", { "x", 0.0, 0.0 } }); - samples.push_back({ "one", { "x", 1.0, -0x1p-54 } }); - samples.push_back({ "four", { "x", 4.0, -0x1p-52 } }); - } - - [[nodiscard]] inline std::vector make_hyperbolic_samples() - { - std::vector samples; - append_hyperbolic_landmark_samples(samples); - - sample_rng rng{ 0x128accb1b0ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - fltx_type x{}; - switch (index % 4) - { - case 0: - x = uniform_value(rng, -4.0, 4.0); - break; - case 1: - x = uniform_value(rng, -16.0, 16.0); - break; - case 2: - x = uniform_value(rng, -40.0, 40.0); - break; - default: - x = signed_log_value(rng, -8, 5); - break; - } - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_asinh_samples() - { - std::vector samples; - append_hyperbolic_landmark_samples(samples); - sample_rng rng{ 0x128acca511ull }; - while (samples.size() < random_sample_count() + 5) - { - const fltx_type x = (samples.size() & 1u) == 0u - ? uniform_value(rng, -32.0, 32.0) - : signed_log_value(rng, -60, 60); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_acosh_samples() - { - std::vector samples{ - { "one", { "x", 1.0, 0.0 } }, - { "near one", { "x", 1.0, 0x1p-52 } }, - { "one half", { "x", 1.5, -0x1p-54 } }, - { "two", { "x", 2.0, 0x1p-55 } }, - { "sixteen", { "x", 16.0, 0x1p-48 } } - }; - - sample_rng rng{ 0x128acca051ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - fltx_type x{}; - switch (index % 4) - { - case 0: - x = uniform_value(rng, 1.0, 16.0); - break; - case 1: - x = fltx_type{ 1.0 } + positive_log_value(rng, -60, -1); - break; - case 2: - x = positive_log_value(rng, 0, 60); - break; - default: - x = uniform_value(rng, 16.0, 1024.0); - break; - } - samples.push_back({ "random", make_runtime_value("x", x, positive_residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_atanh_samples() - { - std::vector samples{ - { "negative near one", { "x", -0.95, 0x1p-58 } }, - { "negative tiny", { "x", -1e-10, 0x1p-88 } }, - { "zero", { "x", 0.0, 0.0 } }, - { "positive tiny", { "x", 1e-10, -0x1p-88 } }, - { "positive near one", { "x", 0.95, -0x1p-58 } } - }; - - sample_rng rng{ 0x128acca7a9ull }; - while (samples.size() < random_sample_count() + 5) - { - fltx_type x{}; - switch (samples.size() % 4) - { - case 0: - x = uniform_value(rng, -0.95, 0.95); - break; - case 1: - if (rng.sign() > 0.0) - x = fltx_type{ 1.0 } - positive_log_value(rng, -60, -1); - else - x = fltx_type{ -1.0 } + positive_log_value(rng, -60, -1); - break; - case 2: - x = uniform_value(rng, -0.999999, 0.999999); - break; - default: - x = signed_log_value(rng, -80, -1); - break; - } - const value_sample sample = make_runtime_value("x", x, residual_for(x, rng)); - if (std::fabs(approximate_value(sample)) < 1.0) - samples.push_back({ "random", sample }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_rounding_samples() - { - std::vector samples{ - { "negative large fraction", { "x", -123456.75, 0x1p-48 } }, - { "negative above half", { "x", -0.51, -0x1p-58 } }, - { "negative tiny", { "x", -0x1p-20, 0x1p-80 } }, - { "positive tiny", { "x", 0x1p-20, -0x1p-80 } }, - { "above half", { "x", 0.51, -0x1p-58 } }, - { "large fraction", { "x", 123456.75, -0x1p-48 } } - }; - - sample_rng rng{ 0x128acc9080ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - fltx_type x{}; - switch (index % 4) - { - case 0: - x = uniform_value(rng, -1e6, 1e6); - break; - case 1: - x = fltx_type{ rng.integer(-1000000, 1000000) } + fltx_type{ 0.5 } + residual_for(fltx_type{ 1.0 }, rng); - break; - case 2: - x = fltx_type{ rng.integer(-1000000, 1000000) } + residual_for(fltx_type{ 1.0 }, rng); - break; - default: - x = signed_log_value(rng, -20, 29); - break; - } - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_remainder_samples() - { - std::vector samples{ - { "positive", { "x", 5.25, 0x1p-54 }, { "y", 2.0, 0.0 } }, - { "negative dividend", { "x", -5.25, -0x1p-54 }, { "y", 2.0, 0.0 } }, - { "decimal divisor", { "x", 1.0, 0x1p-54 }, { "y", 0.1, 0x1p-58 } }, - { "large half", { "x", 123456789.125, 0x1p-28 }, { "y", 0.5, 0.0 } }, - { "x less than y", { "x", 0.125, 0x1p-58 }, { "y", 10.0, -0x1p-50 } } - }; - - sample_rng rng{ 0x128accf00dull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = signed_log_value(rng, -40, 40); - fltx_type y{ 0.0 }; - do - { - y = signed_log_value(rng, -16, 16); - } - while (y == 0.0); - - samples.push_back({ - "random", - make_runtime_value("x", x, residual_for(x, rng)), - make_runtime_value("y", y, residual_for(y, rng)) - }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_scaling_samples() - { - std::vector samples{ - { "zero", { "x", 0.0, 0.0 }, 32 }, - { "one up", { "x", 1.0, 0x1p-54 }, 1 }, - { "one down", { "x", 1.0, -0x1p-54 }, -1 }, - { "negative up", { "x", -1.5, 0x1p-54 }, 10 }, - { "large down", { "x", 1e20, -0x1p+12 }, -32 } - }; - - sample_rng rng{ 0x128acc5ca1eull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = signed_log_value(rng, -60, 60); - const int n = rng.integer(-512, 512); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)), n }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_erf_samples() - { - std::vector samples{ - { "negative four", { "x", -4.0, 0x1p-52 } }, - { "negative tiny", { "x", -1e-10, 0x1p-88 } }, - { "zero", { "x", 0.0, 0.0 } }, - { "positive tiny", { "x", 1e-10, -0x1p-88 } }, - { "four", { "x", 4.0, -0x1p-52 } } - }; - - sample_rng rng{ 0x128accecfull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - const fltx_type x = uniform_value(rng, -6.0, 6.0); - samples.push_back({ "random", make_runtime_value("x", x, residual_for(x, rng)) }); - } - return samples; - } - - [[nodiscard]] inline std::vector make_gamma_samples() - { - std::vector samples{ - { "eighth", { "x", 0.125, 0x1p-58 } }, - { "half", { "x", 0.5, 0x1p-58 } }, - { "one", { "x", 1.0, 0.0 } }, - { "one half", { "x", 1.5, -0x1p-54 } }, - { "ten", { "x", 10.0, 0x1p-50 } } - }; - - sample_rng rng{ 0x128acc6a99ull }; - for (std::size_t index = 0; index < random_sample_count(); ++index) - { - fltx_type x{}; - switch (index % 4) - { - case 0: - x = uniform_value(rng, 0.125, 12.0); - break; - case 1: - x = positive_log_value(rng, -20, 5); - break; - case 2: - x = uniform_value(rng, 0.125, 35.0); - break; - default: - x = uniform_value(rng, 12.0, 35.0); - break; - } - samples.push_back({ "random", make_runtime_value("x", x, positive_residual_for(x, rng)) }); - } - return samples; - } - - template - [[nodiscard]] accuracy_result measure_unary_accuracy( - std::string_view operation, - std::string_view backend_name, - double required_bits, - double metrics_ideal_bits, - bool enforce_required_bits, - const Samples& samples, - const Values& values, - ToRefFn to_reference_value, - EvalFn eval, - RefFn reference) - { - double total_bits = 0.0; - double worst_bits = std::numeric_limits::infinity(); - std::vector domain_scores; - domain_scores.reserve(samples.size()); - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const auto& sample = samples[index]; - trace_domain_sample(operation, backend_name, index, sample); - const perfect_ref actual = to_reference_value(eval(values[index])); - const perfect_ref expected = reference(make_perfect(sample.x)); - double bits = matching_bits(actual, expected); - trace_domain_result(operation, backend_name, index, bits); - - INFO(operation << ' ' << backend_name << " sample '" << sample.label << "' matched " << bits << " bits"); - if (std::isnan(bits)) - { - if (enforce_required_bits) - CHECK(!std::isnan(bits)); - bits = 0.0; - } - if (enforce_required_bits) - CHECK(bits >= required_bits); - - worst_bits = std::min(worst_bits, bits); - total_bits += finite_for_mean(bits); - domain_scores.push_back(domain_sample_score(domain_score_bits(actual, expected), metrics_ideal_bits)); - } - - return { - worst_bits, - total_bits / static_cast(samples.size()), - samples.size(), - domain_score(std::move(domain_scores)) - }; - } - - template - [[nodiscard]] accuracy_result measure_binary_accuracy( - std::string_view operation, - std::string_view backend_name, - double required_bits, - double metrics_ideal_bits, - bool enforce_required_bits, - const Samples& samples, - const Values& values, - ToRefFn to_reference_value, - EvalFn eval, - RefFn reference) - { - double total_bits = 0.0; - double worst_bits = std::numeric_limits::infinity(); - std::vector domain_scores; - domain_scores.reserve(samples.size()); - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const auto& sample = samples[index]; - trace_domain_sample(operation, backend_name, index, sample); - const perfect_ref actual = to_reference_value(eval(values[index].x, values[index].y)); - const perfect_ref expected = reference(make_perfect(sample.x), make_perfect(sample.y)); - double bits = matching_bits(actual, expected); - trace_domain_result(operation, backend_name, index, bits); - - INFO(operation << ' ' << backend_name << " sample '" << sample.label << "' matched " << bits << " bits"); - if (std::isnan(bits)) - { - if (enforce_required_bits) - CHECK(!std::isnan(bits)); - bits = 0.0; - } - if (enforce_required_bits) - CHECK(bits >= required_bits); - - worst_bits = std::min(worst_bits, bits); - total_bits += finite_for_mean(bits); - domain_scores.push_back(domain_sample_score(domain_score_bits(actual, expected), metrics_ideal_bits)); - } - - return { - worst_bits, - total_bits / static_cast(samples.size()), - samples.size(), - domain_score(std::move(domain_scores)) - }; - } - - [[nodiscard]] inline double bool_match_bits(bool actual, bool expected) noexcept - { - constexpr double exact_bool_bits = 320.0; - return actual == expected ? exact_bool_bits : 0.0; - } - - template - [[nodiscard]] inline double integer_match_bits(Actual actual, Expected expected) noexcept - { - return actual == expected ? std::numeric_limits::infinity() : 0.0; - } - - template - [[nodiscard]] accuracy_result measure_unary_integer_accuracy( - std::string_view operation, - std::string_view backend_name, - double required_bits, - double metrics_ideal_bits, - bool enforce_required_bits, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - double total_bits = 0.0; - double worst_bits = std::numeric_limits::infinity(); - std::vector domain_scores; - domain_scores.reserve(samples.size()); - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const auto& sample = samples[index]; - trace_domain_sample(operation, backend_name, index, sample); - const auto actual = eval(values[index]); - const auto expected = reference(make_perfect(sample.x)); - const double bits = integer_match_bits(actual, expected); - trace_domain_result(operation, backend_name, index, bits); - - INFO(operation << ' ' << backend_name << " sample '" << sample.label << "' matched " << bits << " bits"); - if (enforce_required_bits) - CHECK(bits >= required_bits); - - worst_bits = std::min(worst_bits, bits); - total_bits += finite_for_mean(bits); - domain_scores.push_back(domain_sample_score(domain_score_bits(actual, expected), metrics_ideal_bits)); - } - - return { - worst_bits, - total_bits / static_cast(samples.size()), - samples.size(), - domain_score(std::move(domain_scores)) - }; - } - - template - [[nodiscard]] special_correctness measure_binary_bool_special_values( - std::string_view operation, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - if (samples.empty()) - return special_correctness::unavailable; - - for (std::size_t index = 0; index < samples.size(); ++index) - { - bool expected = false; - try - { - expected = reference(sample_as_double(samples[index].x), sample_as_double(samples[index].y)); - } - catch (...) - { - return special_correctness::unavailable; - } - - try - { - const bool actual = eval(values[index].x, values[index].y); - if (actual != expected) - { - if (special_trace_enabled()) - { - std::cerr << "[special trace] " << operation << " sample " << index - << " '" << samples[index].label << "' mismatch\n"; - } - return special_correctness::fail; - } - } - catch (...) - { - return special_correctness::fail; - } - } - return special_correctness::pass; - } - - template - [[nodiscard]] accuracy_result measure_binary_bool_accuracy( - std::string_view operation, - std::string_view backend_name, - double required_bits, - double metrics_ideal_bits, - bool enforce_required_bits, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - double total_bits = 0.0; - double worst_bits = std::numeric_limits::infinity(); - std::vector domain_scores; - domain_scores.reserve(samples.size()); - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const auto& sample = samples[index]; - trace_domain_sample(operation, backend_name, index, sample); - const bool actual = eval(values[index].x, values[index].y); - const bool expected = reference(make_perfect(sample.x), make_perfect(sample.y)); - const double bits = bool_match_bits(actual, expected); - trace_domain_result(operation, backend_name, index, bits); - - INFO(operation << ' ' << backend_name << " sample '" << sample.label << "' matched " << bits << " bits"); - if (enforce_required_bits) - CHECK(bits >= required_bits); - - worst_bits = std::min(worst_bits, bits); - total_bits += bits; - domain_scores.push_back(domain_sample_score(bits, metrics_ideal_bits)); - } - - return { - worst_bits, - total_bits / static_cast(samples.size()), - samples.size(), - domain_score(std::move(domain_scores)) - }; - } - - template - [[nodiscard]] accuracy_result measure_ternary_accuracy( - std::string_view operation, - std::string_view backend_name, - double required_bits, - double metrics_ideal_bits, - bool enforce_required_bits, - const Samples& samples, - const Values& values, - ToRefFn to_reference_value, - EvalFn eval, - RefFn reference) - { - double total_bits = 0.0; - double worst_bits = std::numeric_limits::infinity(); - std::vector domain_scores; - domain_scores.reserve(samples.size()); - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const auto& sample = samples[index]; - trace_domain_sample(operation, backend_name, index, sample); - const perfect_ref actual = to_reference_value(eval(values[index].x, values[index].y, values[index].z)); - const perfect_ref expected = - reference(make_perfect(sample.x), make_perfect(sample.y), make_perfect(sample.z)); - double bits = matching_bits(actual, expected); - - INFO(operation << ' ' << backend_name << " sample '" << sample.label << "' matched " << bits << " bits"); - if (std::isnan(bits)) - { - if (enforce_required_bits) - CHECK(!std::isnan(bits)); - bits = 0.0; - } - if (enforce_required_bits) - CHECK(bits >= required_bits); - - worst_bits = std::min(worst_bits, bits); - total_bits += finite_for_mean(bits); - domain_scores.push_back(domain_sample_score(domain_score_bits(actual, expected), metrics_ideal_bits)); - } - - return { - worst_bits, - total_bits / static_cast(samples.size()), - samples.size(), - domain_score(std::move(domain_scores)) - }; - } - - template - [[nodiscard]] accuracy_result measure_unary_int_accuracy( - std::string_view operation, - std::string_view backend_name, - double required_bits, - double metrics_ideal_bits, - bool enforce_required_bits, - const Samples& samples, - const Values& values, - ToRefFn to_reference_value, - EvalFn eval, - RefFn reference) - { - double total_bits = 0.0; - double worst_bits = std::numeric_limits::infinity(); - std::vector domain_scores; - domain_scores.reserve(samples.size()); - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const auto& sample = samples[index]; - trace_domain_sample(operation, backend_name, index, sample); - const perfect_ref actual = to_reference_value(eval(values[index].x, values[index].n)); - const perfect_ref expected = reference(make_perfect(sample.x), sample.n); - double bits = matching_bits(actual, expected); - trace_domain_result(operation, backend_name, index, bits); - - INFO(operation << ' ' << backend_name << " sample '" << sample.label << "' matched " << bits << " bits"); - if (std::isnan(bits)) - { - if (enforce_required_bits) - CHECK(!std::isnan(bits)); - bits = 0.0; - } - if (enforce_required_bits) - CHECK(bits >= required_bits); - - worst_bits = std::min(worst_bits, bits); - total_bits += finite_for_mean(bits); - domain_scores.push_back(domain_sample_score(domain_score_bits(actual, expected), metrics_ideal_bits)); - } - - return { - worst_bits, - total_bits / static_cast(samples.size()), - samples.size(), - domain_score(std::move(domain_scores)) - }; - } - - template - [[nodiscard]] perfect_ref rebuild_frexp_result(const frexp_value& value) - { - using boost::multiprecision::ldexp; - return ldexp(to_perfect(value.fraction), value.exponent); - } - - template - [[nodiscard]] special_correctness measure_frexp_special_values( - const Samples& samples, - const Values& values, - EvalFn eval) - { - if (samples.empty()) - return special_correctness::unavailable; - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const special_value_state expected = classify_special_ref(make_perfect(samples[index].x)); - try - { - const special_value_state actual = classify_special_ref(rebuild_frexp_result(eval(values[index]))); - if (!special_values_match(actual, expected)) - return special_correctness::fail; - } - catch (...) - { - return special_correctness::fail; - } - } - return special_correctness::pass; - } - - template - [[nodiscard]] accuracy_result measure_frexp_accuracy( - std::string_view operation, - std::string_view backend_name, - double required_bits, - double metrics_ideal_bits, - bool enforce_required_bits, - const Samples& samples, - const Values& values, - EvalFn eval) - { - double total_bits = 0.0; - double worst_bits = std::numeric_limits::infinity(); - std::vector domain_scores; - domain_scores.reserve(samples.size()); - - for (std::size_t index = 0; index < samples.size(); ++index) - { - const auto& sample = samples[index]; - trace_domain_sample(operation, backend_name, index, sample); - const perfect_ref actual = rebuild_frexp_result(eval(values[index])); - const perfect_ref expected = make_perfect(sample.x); - double bits = matching_bits(actual, expected); - trace_domain_result(operation, backend_name, index, bits); - - INFO(operation << ' ' << backend_name << " sample '" << sample.label << "' matched " << bits << " bits"); - if (std::isnan(bits)) - { - if (enforce_required_bits) - CHECK(!std::isnan(bits)); - bits = 0.0; - } - if (enforce_required_bits) - CHECK(bits >= required_bits); - - worst_bits = std::min(worst_bits, bits); - total_bits += finite_for_mean(bits); - domain_scores.push_back(domain_sample_score(domain_score_bits(actual, expected), metrics_ideal_bits)); - } - - return { - worst_bits, - total_bits / static_cast(samples.size()), - samples.size(), - domain_score(std::move(domain_scores)) - }; - } - - inline volatile double benchmark_sink = 0.0; - - inline void consume_benchmark_limb(double value) noexcept - { - benchmark_sink = benchmark_sink + value; - } - - inline void consume_benchmark_value(const fltx_type& value) noexcept - { - consume_benchmark_limb(value.x0); - consume_benchmark_limb(value.x1); - consume_benchmark_limb(value.x2); - consume_benchmark_limb(value.x3); - } - - inline void consume_benchmark_value(const competitor_ref& value) - { - consume_benchmark_limb(static_cast(value)); - } - - inline void consume_benchmark_value(const extra_competitor_ref& value) - { - consume_benchmark_limb(value[0]); - consume_benchmark_limb(value[1]); - consume_benchmark_limb(value[2]); - consume_benchmark_limb(value[3]); - } - - inline void consume_benchmark_value(bool value) noexcept - { - consume_benchmark_limb(value ? 1.0 : 0.0); - } - - template && !std::is_same_v, int> = 0> - inline void consume_benchmark_value(Integer value) noexcept - { - consume_benchmark_limb(static_cast(value)); - } - - template - inline void consume_benchmark_value(const frexp_value& value) - { - consume_benchmark_value(value.fraction); - consume_benchmark_limb(static_cast(value.exponent)); - } - - [[nodiscard]] inline double benchmark_iteration_scale(std::string_view operation) noexcept - { - if (is_short_rounding_benchmark(operation)) - return 15.0; - - if (is_integer_rounding_benchmark(operation)) - return 6.0; - - if (is_short_utility_benchmark(operation)) - return 16.0; - - if (operation == "erf" || operation == "erfc" || operation == "lgamma" || operation == "tgamma") - return 0.005; - - if (operation == "asin" || operation == "acos" || operation == "asinh" || operation == "acosh" - || operation == "atanh" || operation == "log" || operation == "log2" || operation == "log10" - || operation == "log1p" || operation == "pow") - return 0.01; - - if (operation == "divide" || operation == "sqrt") - return 0.5; - - if (operation == "tan") - return 0.03; - - if (operation == "sin" || operation == "cos" || operation == "atan" || operation == "atan2" - || operation == "exp" || operation == "exp2" || operation == "expm1" - || operation == "sinh" || operation == "cosh" || operation == "tanh") - return 0.03; - - if (operation == "cbrt" || operation == "hypot" || operation == "fmod" - || operation == "remainder" || operation == "remquo") - return 0.15; - - return 1.0; - } - - [[nodiscard]] inline std::size_t scaled_benchmark_min_iterations(std::string_view operation) noexcept - { - const auto scaled = static_cast( - static_cast(benchmark_min_iterations) * benchmark_iteration_scale(operation)); - return std::max(1, scaled); - } - - [[nodiscard]] inline std::size_t benchmark_repetitions( - std::size_t sample_count, - std::string_view operation = {}) noexcept - { - if (sample_count == 0) - return 0; - constexpr std::size_t min_repetitions = 3; - const std::size_t min_iterations = scaled_benchmark_min_iterations(operation); - return std::max(min_repetitions, (min_iterations + sample_count - 1) / sample_count); - } - - template - [[nodiscard]] benchmark_result benchmark_unary_values( - const Values& values, - EvalFn eval, - std::string_view operation = {}) - { - const std::size_t repetitions = benchmark_repetitions(values.size(), operation); - const auto start = std::chrono::steady_clock::now(); - for (std::size_t repeat = 0; repeat < repetitions; ++repeat) - { - for (const auto& value : values) - consume_benchmark_value(eval(value)); - } - const auto elapsed = std::chrono::steady_clock::now() - start; - const std::size_t iterations = repetitions * values.size(); - const double ns = std::chrono::duration(elapsed).count() - / static_cast(iterations); - return { ns, iterations }; - } - - template - [[nodiscard]] benchmark_result benchmark_binary_values( - const Values& values, - EvalFn eval, - std::string_view operation = {}) - { - const std::size_t repetitions = benchmark_repetitions(values.size(), operation); - const auto start = std::chrono::steady_clock::now(); - for (std::size_t repeat = 0; repeat < repetitions; ++repeat) - { - for (const auto& value : values) - consume_benchmark_value(eval(value.x, value.y)); - } - const auto elapsed = std::chrono::steady_clock::now() - start; - const std::size_t iterations = repetitions * values.size(); - const double ns = std::chrono::duration(elapsed).count() - / static_cast(iterations); - return { ns, iterations }; - } - - template - [[nodiscard]] benchmark_result benchmark_ternary_values( - const Values& values, - EvalFn eval, - std::string_view operation = {}) - { - const std::size_t repetitions = benchmark_repetitions(values.size(), operation); - const auto start = std::chrono::steady_clock::now(); - for (std::size_t repeat = 0; repeat < repetitions; ++repeat) - { - for (const auto& value : values) - consume_benchmark_value(eval(value.x, value.y, value.z)); - } - const auto elapsed = std::chrono::steady_clock::now() - start; - const std::size_t iterations = repetitions * values.size(); - const double ns = std::chrono::duration(elapsed).count() - / static_cast(iterations); - return { ns, iterations }; - } - - template - [[nodiscard]] benchmark_result benchmark_unary_int_values( - const Values& values, - EvalFn eval, - std::string_view operation = {}) - { - const std::size_t repetitions = benchmark_repetitions(values.size(), operation); - const auto start = std::chrono::steady_clock::now(); - for (std::size_t repeat = 0; repeat < repetitions; ++repeat) - { - for (const auto& value : values) - consume_benchmark_value(eval(value.x, value.n)); - } - const auto elapsed = std::chrono::steady_clock::now() - start; - const std::size_t iterations = repetitions * values.size(); - const double ns = std::chrono::duration(elapsed).count() - / static_cast(iterations); - return { ns, iterations }; - } - - [[nodiscard]] inline suite_id make_suite(std::string_view operation) noexcept - { - return { - precision_type::f256, - operation_id{ operation, operation }, - primary_domain - }; - } - - [[nodiscard]] inline domain_value_kind domain_unary_kind(std::string_view operation) noexcept - { - if (operation == "sqrt" || operation == "log" || operation == "log2" || operation == "log10") - return domain_value_kind::positive; - if (operation == "asin" || operation == "acos") - return domain_value_kind::unit_closed; - if (operation == "sin" || operation == "cos" || operation == "tan") - return domain_value_kind::reduction_real; - if (operation == "cbrt") - return domain_value_kind::balanced_real; - if (operation == "atanh") - return domain_value_kind::unit_open; - if (operation == "exp" || operation == "expm1") - return domain_value_kind::exp_argument; - if (operation == "sinh" || operation == "cosh" || operation == "tanh") - return domain_value_kind::hyperbolic_argument; - if (operation == "exp2") - return domain_value_kind::exp2_argument; - if (operation == "log1p") - return domain_value_kind::log1p_argument; - if (operation == "acosh") - return domain_value_kind::acosh_argument; - if (operation == "lgamma") - return domain_value_kind::gamma_argument; - if (operation == "tgamma") - return domain_value_kind::tgamma_argument; - if (operation == "lround" || operation == "llround" || - operation == "lrint" || operation == "llrint") - return domain_value_kind::integer_rounding_argument; - if (operation == "ilogb") - return domain_value_kind::nonzero_wide_real; - return domain_value_kind::wide_real; - } - - [[nodiscard]] inline std::vector make_domain_unary_samples(std::string_view operation) - { - return make_domain_unary_values( - domain_unary_kind(operation), - domain_random_sample_count(), - domain_seed(operation, 0x256d0a11ull)); - } - - [[nodiscard]] inline std::vector make_domain_binary_samples(std::string_view operation) - { - domain_value_kind x_kind = domain_value_kind::wide_real; - domain_value_kind y_kind = domain_value_kind::wide_real; - - if (operation == "multiply" || operation == "hypot") - { - x_kind = domain_value_kind::balanced_real; - y_kind = domain_value_kind::balanced_real; - } - else if (operation == "divide") - { - x_kind = domain_value_kind::balanced_real; - y_kind = domain_value_kind::nonzero_balanced_real; - } - else if (operation == "atan2") - { - x_kind = domain_value_kind::nonzero_wide_real; - y_kind = domain_value_kind::wide_real; - } - else if (operation == "pow") - { - return make_pow_domain_binary_values( - domain_random_sample_count(), - domain_seed(operation, 0x256b1a11ull)); - } - else if (operation == "fmod" || operation == "remainder" || operation == "remquo") - { - x_kind = domain_value_kind::wide_real; - y_kind = domain_value_kind::nonzero_balanced_real; - } - - return make_domain_binary_values( - x_kind, - y_kind, - domain_random_sample_count(), - domain_seed(operation, 0x256b1a11ull)); - } - - [[nodiscard]] inline std::vector make_domain_ternary_samples(std::string_view operation) - { - return make_domain_ternary_values( - domain_value_kind::balanced_real, - domain_value_kind::balanced_real, - domain_value_kind::balanced_real, - domain_random_sample_count(), - domain_seed(operation, 0x2567e311ull)); - } - - [[nodiscard]] inline std::vector make_domain_unary_int_samples(std::string_view operation) - { - return make_domain_unary_int_values( - domain_value_kind::balanced_real, - domain_random_sample_count(), - domain_seed(operation, 0x2561e711ull)); - } - - inline void check_competitor_slack(const metrics_record& record) - { - INFO("operation: " << record.suite.operation.name); - INFO("fltx worst bits: " << record.fltx_accuracy.worst_bits); - INFO("competitor worst bits: " << record.competitor_accuracy.worst_bits); - } - - inline void check_benchmark_claim_is_meaningful(const metrics_record& record) - { - INFO("operation: " << record.suite.operation.name); - INFO("fltx ns/iter: " << record.fltx_benchmark.ns_per_iter); - INFO("competitor ns/iter: " << record.competitor_benchmark.ns_per_iter); - INFO("fltx worst bits: " << record.fltx_accuracy.worst_bits); - INFO("competitor worst bits: " << record.competitor_accuracy.worst_bits); - } - - [[nodiscard]] inline bool extra_competitor_special_probe_is_unsafe(std::string_view operation) noexcept - { - return operation == "asin" || operation == "acos"; - } - - template - [[nodiscard]] metrics_record run_unary_case( - std::string_view operation, - double required_bits, - const Samples& samples, - EvalFn eval, - RefFn reference, - bool include_benchmarks, - bool enforce_fltx_accuracy = true, - double metrics_ideal_bits = domain_ideal_bits, - bool measure_accuracy = true) - { - const auto fltx_inputs = make_unary_inputs(samples, make_fltx); - const auto competitor_inputs = make_unary_inputs(samples, make_competitor); - - metrics_record record{}; - record.suite = make_suite(operation); - record.competitor_name = references::competitor_name; - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = references::extra_competitor_name; - extra_competitor.supported = ExtraSupported; - const auto special_samples = measure_accuracy ? make_special_unary_samples() : std::vector{}; - const auto special_fltx_inputs = make_unary_inputs(special_samples, make_fltx); - const auto special_competitor_inputs = - make_unary_inputs(special_samples, make_competitor); - record.fltx_special_values = - measure_unary_special_values(operation, special_samples, special_fltx_inputs, eval, reference); - record.competitor_special_values = - measure_unary_special_values(operation, special_samples, special_competitor_inputs, eval, reference); - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_unary_values(fltx_inputs, eval, operation); - record.competitor_benchmark = benchmark_unary_values(competitor_inputs, eval, operation); - } - if (!measure_accuracy) - { - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_unary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = extra_competitor_special_probe_is_unsafe(operation) - ? special_correctness::fail - : measure_unary_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_unary_values(extra_competitor_inputs, eval, operation); - } - return record; - } - - auto to_reference_value = [](const auto& value) { return to_perfect(value); }; - record.fltx_accuracy = - measure_unary_accuracy(operation, "fltx", required_bits, metrics_ideal_bits, enforce_fltx_accuracy, samples, fltx_inputs, to_reference_value, eval, reference); - record.competitor_accuracy = - measure_unary_accuracy(operation, references::competitor_name, required_bits, metrics_ideal_bits, false, samples, competitor_inputs, to_reference_value, eval, reference); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_unary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = extra_competitor_special_probe_is_unsafe(operation) - ? special_correctness::fail - : measure_unary_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_unary_values(extra_competitor_inputs, eval, operation); - extra_competitor.accuracy = - measure_unary_accuracy(operation, references::extra_competitor_name, required_bits, metrics_ideal_bits, false, samples, extra_competitor_inputs, to_reference_value, eval, reference); - } - return record; - } - - template - [[nodiscard]] metrics_record run_unary_integer_case( - std::string_view operation, - double required_bits, - const Samples& samples, - EvalFn eval, - RefFn reference, - bool include_benchmarks, - bool enforce_fltx_accuracy = true, - double metrics_ideal_bits = domain_ideal_bits, - bool measure_accuracy = true) - { - const auto fltx_inputs = make_unary_inputs(samples, make_fltx); - const auto competitor_inputs = make_unary_inputs(samples, make_competitor); - - metrics_record record{}; - record.suite = make_suite(operation); - record.competitor_name = references::competitor_name; - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = references::extra_competitor_name; - extra_competitor.supported = ExtraSupported; - - if (measure_accuracy && unary_integer_special_probe_is_meaningful(operation)) - { - const auto special_samples = make_special_unary_samples(); - const auto special_fltx_inputs = - make_unary_inputs(special_samples, make_fltx); - const auto special_competitor_inputs = - make_unary_inputs(special_samples, make_competitor); - record.fltx_special_values = - measure_unary_integer_special_values(operation, special_samples, special_fltx_inputs, eval, reference); - record.competitor_special_values = - measure_unary_integer_special_values(operation, special_samples, special_competitor_inputs, eval, reference); - if constexpr (ExtraSupported) - { - const auto special_extra_competitor_inputs = - make_unary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_unary_integer_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - } - else - { - extra_competitor.special_values = special_correctness::unavailable; - } - } - - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_unary_values(fltx_inputs, eval, operation); - record.competitor_benchmark = benchmark_unary_values(competitor_inputs, eval, operation); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_inputs(samples, make_extra_competitor); - extra_competitor.benchmark = benchmark_unary_values(extra_competitor_inputs, eval, operation); - } - } - if (!measure_accuracy) - return record; - - record.fltx_accuracy = - measure_unary_integer_accuracy(operation, "fltx", required_bits, metrics_ideal_bits, enforce_fltx_accuracy, samples, fltx_inputs, eval, reference); - record.competitor_accuracy = - measure_unary_integer_accuracy(operation, references::competitor_name, required_bits, metrics_ideal_bits, false, samples, competitor_inputs, eval, reference); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_inputs(samples, make_extra_competitor); - extra_competitor.accuracy = - measure_unary_integer_accuracy(operation, references::extra_competitor_name, required_bits, metrics_ideal_bits, false, samples, extra_competitor_inputs, eval, reference); - } - return record; - } - - template - [[nodiscard]] metrics_record run_binary_case( - std::string_view operation, - double required_bits, - const Samples& samples, - EvalFn eval, - RefFn reference, - bool include_benchmarks, - bool enforce_fltx_accuracy = true, - double metrics_ideal_bits = domain_ideal_bits, - bool measure_accuracy = true) - { - const auto fltx_inputs = make_binary_inputs(samples, make_fltx); - const auto competitor_inputs = make_binary_inputs(samples, make_competitor); - - metrics_record record{}; - record.suite = make_suite(operation); - record.competitor_name = references::competitor_name; - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = references::extra_competitor_name; - extra_competitor.supported = ExtraSupported; - const auto special_samples = measure_accuracy ? make_special_binary_samples() : std::vector{}; - const auto special_fltx_inputs = make_binary_inputs(special_samples, make_fltx); - const auto special_competitor_inputs = - make_binary_inputs(special_samples, make_competitor); - record.fltx_special_values = - measure_binary_special_values(operation, special_samples, special_fltx_inputs, eval, reference); - record.competitor_special_values = - measure_binary_special_values(operation, special_samples, special_competitor_inputs, eval, reference); - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_binary_values(fltx_inputs, eval, operation); - record.competitor_benchmark = benchmark_binary_values(competitor_inputs, eval, operation); - } - if (!measure_accuracy) - { - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_binary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_binary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_binary_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_binary_values(extra_competitor_inputs, eval, operation); - } - return record; - } - - auto to_reference_value = [](const auto& value) { return to_perfect(value); }; - record.fltx_accuracy = - measure_binary_accuracy(operation, "fltx", required_bits, metrics_ideal_bits, enforce_fltx_accuracy, samples, fltx_inputs, to_reference_value, eval, reference); - record.competitor_accuracy = - measure_binary_accuracy(operation, references::competitor_name, required_bits, metrics_ideal_bits, false, samples, competitor_inputs, to_reference_value, eval, reference); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_binary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_binary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_binary_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_binary_values(extra_competitor_inputs, eval, operation); - extra_competitor.accuracy = - measure_binary_accuracy(operation, references::extra_competitor_name, required_bits, metrics_ideal_bits, false, samples, extra_competitor_inputs, to_reference_value, eval, reference); - } - return record; - } - - template - [[nodiscard]] metrics_record run_binary_bool_case( - std::string_view operation, - double required_bits, - const Samples& samples, - EvalFn eval, - RefFn reference, - bool include_benchmarks, - bool enforce_fltx_accuracy = true, - double metrics_ideal_bits = domain_ideal_bits, - bool measure_accuracy = true) - { - const auto fltx_inputs = make_binary_inputs(samples, make_fltx); - const auto competitor_inputs = make_binary_inputs(samples, make_competitor); - - metrics_record record{}; - record.suite = make_suite(operation); - record.competitor_name = references::competitor_name; - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = references::extra_competitor_name; - extra_competitor.supported = ExtraSupported; - const auto special_samples = measure_accuracy ? make_special_binary_samples() : std::vector{}; - const auto special_fltx_inputs = - make_binary_inputs(special_samples, make_fltx); - const auto special_competitor_inputs = - make_binary_inputs(special_samples, make_competitor); - record.fltx_special_values = - measure_binary_bool_special_values(operation, special_samples, special_fltx_inputs, eval, reference); - record.competitor_special_values = - measure_binary_bool_special_values(operation, special_samples, special_competitor_inputs, eval, reference); - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_binary_values(fltx_inputs, eval, operation); - record.competitor_benchmark = benchmark_binary_values(competitor_inputs, eval, operation); - } - if (!measure_accuracy) - { - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_binary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_binary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_binary_bool_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_binary_values(extra_competitor_inputs, eval, operation); - } - return record; - } - - record.fltx_accuracy = - measure_binary_bool_accuracy(operation, "fltx", required_bits, metrics_ideal_bits, enforce_fltx_accuracy, samples, fltx_inputs, eval, reference); - record.competitor_accuracy = - measure_binary_bool_accuracy(operation, references::competitor_name, required_bits, metrics_ideal_bits, false, samples, competitor_inputs, eval, reference); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_binary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_binary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_binary_bool_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_binary_values(extra_competitor_inputs, eval, operation); - extra_competitor.accuracy = - measure_binary_bool_accuracy(operation, references::extra_competitor_name, required_bits, metrics_ideal_bits, false, samples, extra_competitor_inputs, eval, reference); - } - return record; - } - - template - [[nodiscard]] metrics_record run_ternary_case( - std::string_view operation, - double required_bits, - const Samples& samples, - EvalFn eval, - RefFn reference, - bool include_benchmarks, - bool enforce_fltx_accuracy = true, - double metrics_ideal_bits = domain_ideal_bits, - bool measure_accuracy = true) - { - const auto fltx_inputs = make_ternary_inputs(samples, make_fltx); - const auto competitor_inputs = make_ternary_inputs(samples, make_competitor); - - metrics_record record{}; - record.suite = make_suite(operation); - record.competitor_name = references::competitor_name; - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = references::extra_competitor_name; - extra_competitor.supported = ExtraSupported; - const auto special_samples = measure_accuracy ? make_special_ternary_samples() : std::vector{}; - const auto special_fltx_inputs = make_ternary_inputs(special_samples, make_fltx); - const auto special_competitor_inputs = - make_ternary_inputs(special_samples, make_competitor); - record.fltx_special_values = - measure_ternary_special_values(operation, special_samples, special_fltx_inputs, eval, reference); - record.competitor_special_values = - measure_ternary_special_values(operation, special_samples, special_competitor_inputs, eval, reference); - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_ternary_values(fltx_inputs, eval, operation); - record.competitor_benchmark = benchmark_ternary_values(competitor_inputs, eval, operation); - } - if (!measure_accuracy) - { - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_ternary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_ternary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_ternary_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_ternary_values(extra_competitor_inputs, eval, operation); - } - return record; - } - - auto to_reference_value = [](const auto& value) { return to_perfect(value); }; - record.fltx_accuracy = - measure_ternary_accuracy(operation, "fltx", required_bits, metrics_ideal_bits, enforce_fltx_accuracy, samples, fltx_inputs, to_reference_value, eval, reference); - record.competitor_accuracy = - measure_ternary_accuracy(operation, references::competitor_name, required_bits, metrics_ideal_bits, false, samples, competitor_inputs, to_reference_value, eval, reference); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_ternary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_ternary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_ternary_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_ternary_values(extra_competitor_inputs, eval, operation); - extra_competitor.accuracy = - measure_ternary_accuracy(operation, references::extra_competitor_name, required_bits, metrics_ideal_bits, false, samples, extra_competitor_inputs, to_reference_value, eval, reference); - } - return record; - } - - template - [[nodiscard]] metrics_record run_unary_int_case( - std::string_view operation, - double required_bits, - const Samples& samples, - EvalFn eval, - RefFn reference, - bool include_benchmarks, - bool enforce_fltx_accuracy = true, - double metrics_ideal_bits = domain_ideal_bits, - bool measure_accuracy = true) - { - const auto fltx_inputs = make_unary_int_inputs(samples, make_fltx); - const auto competitor_inputs = make_unary_int_inputs(samples, make_competitor); - - metrics_record record{}; - record.suite = make_suite(operation); - record.competitor_name = references::competitor_name; - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = references::extra_competitor_name; - extra_competitor.supported = ExtraSupported; - const auto special_samples = measure_accuracy ? make_special_unary_int_samples() : std::vector{}; - const auto special_fltx_inputs = - make_unary_int_inputs(special_samples, make_fltx); - const auto special_competitor_inputs = - make_unary_int_inputs(special_samples, make_competitor); - record.fltx_special_values = - measure_unary_int_special_values(operation, special_samples, special_fltx_inputs, eval, reference); - record.competitor_special_values = - measure_unary_int_special_values(operation, special_samples, special_competitor_inputs, eval, reference); - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_unary_int_values(fltx_inputs, eval, operation); - record.competitor_benchmark = benchmark_unary_int_values(competitor_inputs, eval, operation); - } - if (!measure_accuracy) - { - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_int_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_unary_int_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_unary_int_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_unary_int_values(extra_competitor_inputs, eval, operation); - } - return record; - } - - auto to_reference_value = [](const auto& value) { return to_perfect(value); }; - record.fltx_accuracy = - measure_unary_int_accuracy(operation, "fltx", required_bits, metrics_ideal_bits, enforce_fltx_accuracy, samples, fltx_inputs, to_reference_value, eval, reference); - record.competitor_accuracy = - measure_unary_int_accuracy(operation, references::competitor_name, required_bits, metrics_ideal_bits, false, samples, competitor_inputs, to_reference_value, eval, reference); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_int_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_unary_int_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_unary_int_special_values(operation, special_samples, special_extra_competitor_inputs, eval, reference); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_unary_int_values(extra_competitor_inputs, eval, operation); - extra_competitor.accuracy = - measure_unary_int_accuracy(operation, references::extra_competitor_name, required_bits, metrics_ideal_bits, false, samples, extra_competitor_inputs, to_reference_value, eval, reference); - } - return record; - } - - template - [[nodiscard]] metrics_record run_frexp_case( - std::string_view operation, - double required_bits, - const Samples& samples, - EvalFn eval, - bool include_benchmarks, - bool enforce_fltx_accuracy = true, - double metrics_ideal_bits = domain_ideal_bits, - bool measure_accuracy = true) - { - const auto fltx_inputs = make_unary_inputs(samples, make_fltx); - const auto competitor_inputs = make_unary_inputs(samples, make_competitor); - - metrics_record record{}; - record.suite = make_suite(operation); - record.competitor_name = references::competitor_name; - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = references::extra_competitor_name; - extra_competitor.supported = ExtraSupported; - const auto special_samples = measure_accuracy ? make_special_unary_samples() : std::vector{}; - const auto special_fltx_inputs = make_unary_inputs(special_samples, make_fltx); - const auto special_competitor_inputs = - make_unary_inputs(special_samples, make_competitor); - record.fltx_special_values = - measure_frexp_special_values(special_samples, special_fltx_inputs, eval); - record.competitor_special_values = - measure_frexp_special_values(special_samples, special_competitor_inputs, eval); - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_unary_values(fltx_inputs, eval, operation); - record.competitor_benchmark = benchmark_unary_values(competitor_inputs, eval, operation); - } - if (!measure_accuracy) - { - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_unary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_frexp_special_values(special_samples, special_extra_competitor_inputs, eval); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_unary_values(extra_competitor_inputs, eval, operation); - } - return record; - } - - record.fltx_accuracy = - measure_frexp_accuracy(operation, "fltx", required_bits, metrics_ideal_bits, enforce_fltx_accuracy, samples, fltx_inputs, eval); - record.competitor_accuracy = - measure_frexp_accuracy(operation, references::competitor_name, required_bits, metrics_ideal_bits, false, samples, competitor_inputs, eval); - if constexpr (ExtraSupported) - { - const auto extra_competitor_inputs = - make_unary_inputs(samples, make_extra_competitor); - const auto special_extra_competitor_inputs = - make_unary_inputs(special_samples, make_extra_competitor); - extra_competitor.special_values = - measure_frexp_special_values(special_samples, special_extra_competitor_inputs, eval); - if (include_benchmarks) - extra_competitor.benchmark = benchmark_unary_values(extra_competitor_inputs, eval, operation); - extra_competitor.accuracy = - measure_frexp_accuracy(operation, references::extra_competitor_name, required_bits, metrics_ideal_bits, false, samples, extra_competitor_inputs, eval); - } - return record; - } -} - -#endif diff --git a/tests/metrics/metrics_filter_tests.cpp b/tests/metrics/metrics_filter_tests.cpp deleted file mode 100644 index 86b978c..0000000 --- a/tests/metrics/metrics_filter_tests.cpp +++ /dev/null @@ -1,249 +0,0 @@ -#include "metrics_case_output.h" - -#include - -#include -#include -#include -#include -#include -#include - -namespace -{ - class metrics_filter_restore - { - public: - metrics_filter_restore() - : filters_{ bl::test::metrics::metrics_filter_arguments() } - {} - - ~metrics_filter_restore() - { - bl::test::metrics::set_metrics_filter_arguments(std::move(filters_)); - } - - metrics_filter_restore(const metrics_filter_restore&) = delete; - metrics_filter_restore& operator=(const metrics_filter_restore&) = delete; - - private: - std::vector filters_; - }; - - void set_single_metrics_filter(std::string filter) - { - bl::test::metrics::set_metrics_filter_arguments({ std::move(filter) }); - } - - bl::test::metrics::metrics_record make_filter_test_record( - bl::test::metrics::precision_type precision, - std::string_view operation, - bl::test::metrics::domain_role role = bl::test::metrics::domain_role::primary) - { - bl::test::metrics::metrics_record record{}; - record.suite = { - precision, - { operation, operation }, - { role == bl::test::metrics::domain_role::primary ? "primary" : "mixed", role } - }; - record.competitor_name = "reference"; - record.fltx_accuracy = { 100.0, 110.0, 16, 75.0 }; - record.competitor_accuracy = { 95.0, 105.0, 16, 70.0 }; - return record; - } - - std::size_t count_substrings(std::string_view text, std::string_view pattern) - { - std::size_t count = 0; - std::string_view::size_type pos = 0; - while ((pos = text.find(pattern, pos)) != std::string_view::npos) - { - ++count; - pos += pattern.size(); - } - return count; - } -} - -TEST_CASE("metrics complete report filters are recognized exactly", "[metrics][filters]") -{ - const metrics_filter_restore restore; - - set_single_metrics_filter("[precision],[domain],[bench]"); - CHECK(bl::test::metrics::metrics_filter_is_complete_report_filter()); - CHECK(bl::test::metrics::metrics_should_generate_report_for(bl::test::metrics::precision_type::f128)); - CHECK(bl::test::metrics::metrics_should_generate_report_for(bl::test::metrics::precision_type::f256)); - - set_single_metrics_filter("[domain],[bench],[accuracy]"); - CHECK(bl::test::metrics::metrics_filter_is_complete_report_filter()); - CHECK(bl::test::metrics::metrics_should_generate_report_for(bl::test::metrics::precision_type::f128)); - CHECK(bl::test::metrics::metrics_should_generate_report_for(bl::test::metrics::precision_type::f256)); - - set_single_metrics_filter("[f128][precision],[f128][domain],[f128][bench]"); - CHECK(bl::test::metrics::metrics_filter_is_complete_report_filter()); - CHECK(bl::test::metrics::metrics_should_generate_report_for(bl::test::metrics::precision_type::f128)); - CHECK_FALSE(bl::test::metrics::metrics_should_generate_report_for(bl::test::metrics::precision_type::f256)); - - set_single_metrics_filter("[precision][f256],[domain][f256],[bench][f256]"); - CHECK(bl::test::metrics::metrics_filter_is_complete_report_filter()); - CHECK_FALSE(bl::test::metrics::metrics_should_generate_report_for(bl::test::metrics::precision_type::f128)); - CHECK(bl::test::metrics::metrics_should_generate_report_for(bl::test::metrics::precision_type::f256)); - - set_single_metrics_filter("[add][precision],[add][domain],[add][bench]"); - CHECK_FALSE(bl::test::metrics::metrics_filter_is_complete_report_filter()); - CHECK(bl::test::metrics::metrics_should_generate_report_for(bl::test::metrics::precision_type::f128)); - CHECK(bl::test::metrics::metrics_should_generate_report_for(bl::test::metrics::precision_type::f256)); - - set_single_metrics_filter("[bench]"); - CHECK_FALSE(bl::test::metrics::metrics_filter_is_complete_report_filter()); - CHECK(bl::test::metrics::metrics_should_generate_report_for(bl::test::metrics::precision_type::f128)); - CHECK(bl::test::metrics::metrics_should_generate_report_for(bl::test::metrics::precision_type::f256)); - - set_single_metrics_filter("[f128][bench]"); - CHECK_FALSE(bl::test::metrics::metrics_filter_is_complete_report_filter()); - CHECK(bl::test::metrics::metrics_should_generate_report_for(bl::test::metrics::precision_type::f128)); - CHECK_FALSE(bl::test::metrics::metrics_should_generate_report_for(bl::test::metrics::precision_type::f256)); -} - -TEST_CASE("metrics partial phase reports merge operation rows", "[metrics][filters]") -{ - const metrics_filter_restore restore; - set_single_metrics_filter("[precision],[domain]"); - - auto precision_record = make_filter_test_record(bl::test::metrics::precision_type::f128, "add"); - auto domain_record = precision_record; - domain_record.fltx_accuracy.domain_score = 99.0; - domain_record.competitor_accuracy.domain_score = 88.0; - - const std::vector entries{ - { "f128 add precision", precision_record }, - { "f128 add domain", domain_record } - }; - - const std::vector records = - bl::test::metrics::make_csv_report_records(entries, bl::test::metrics::precision_type::f128); - - REQUIRE(records.size() == 1); - CHECK(records.front().suite.operation.name == "add"); - CHECK(records.front().fltx_accuracy.mean_bits == precision_record.fltx_accuracy.mean_bits); - CHECK(records.front().fltx_accuracy.domain_score == domain_record.fltx_accuracy.domain_score); - - std::ostringstream out; - bl::test::metrics::write_partial_metrics_case_reports(out, entries); - const std::string text = out.str(); - CHECK(text.find("[ f128 primary metrics results ]") != std::string::npos); - CHECK(count_substrings(text, " add ") == 1); - CHECK(text.find("add precision") == std::string::npos); - CHECK(text.find("add domain") == std::string::npos); -} - -TEST_CASE("metrics realtime partial phase reports print when selected phases complete", "[metrics][filters]") -{ - const metrics_filter_restore restore; - set_single_metrics_filter("[precision],[domain]"); - bl::test::metrics::clear_realtime_metrics_console(); - - auto precision_record = make_filter_test_record(bl::test::metrics::precision_type::f128, "add"); - auto domain_record = precision_record; - domain_record.fltx_accuracy.domain_score = 99.0; - - std::vector entries; - std::ostringstream out; - - entries.push_back({ "f128 add precision", precision_record }); - bl::test::metrics::write_realtime_metrics_case_report( - out, - entries, - entries.back().title, - entries.back().record); - CHECK(out.str().empty()); - - entries.push_back({ "f128 add domain", domain_record }); - bl::test::metrics::write_realtime_metrics_case_report( - out, - entries, - entries.back().title, - entries.back().record); - - const std::string text = out.str(); - CHECK(text.find("[ f128 primary metrics results ]") != std::string::npos); - CHECK(count_substrings(text, " add ") == 1); - CHECK(text.find("add precision") == std::string::npos); - CHECK(text.find("add domain") == std::string::npos); - - bl::test::metrics::clear_realtime_metrics_console(); -} - -TEST_CASE("metrics partial phase reports keep mixed workloads separate", "[metrics][filters]") -{ - const metrics_filter_restore restore; - set_single_metrics_filter("[precision],[domain]"); - - const std::vector entries{ - { - "f128 add precision", - make_filter_test_record(bl::test::metrics::precision_type::f128, "add") - }, - { - "f128 mixed workload metrics results", - make_filter_test_record( - bl::test::metrics::precision_type::f128, - "mixed arithmetic", - bl::test::metrics::domain_role::stress) - } - }; - - std::ostringstream out; - bl::test::metrics::write_partial_metrics_case_reports(out, entries); - const std::string text = out.str(); - CHECK(text.find("[ f128 primary metrics results ]") != std::string::npos); - CHECK(text.find("[ f128 mixed workload metrics results ]") != std::string::npos); -} - -TEST_CASE("metrics bench-only console reports hide accuracy and domain columns", "[metrics][filters]") -{ - const metrics_filter_restore restore; - set_single_metrics_filter("[bench]"); - - auto record = make_filter_test_record( - bl::test::metrics::precision_type::f128, - "mixed arithmetic", - bl::test::metrics::domain_role::stress); - record.fltx_benchmark = { 10.0, 1000 }; - record.competitor_benchmark = { 20.0, 1000 }; - - std::ostringstream out; - bl::test::metrics::write_metrics_case_report_group( - out, - "f128 primary metrics results", - "f128 mixed workload metrics results", - { record }); - - const std::string text = out.str(); - CHECK(text.find("[ f128 mixed workload metrics results ]") != std::string::npos); - CHECK(text.find("bench") != std::string::npos); - CHECK(text.find("speed") != std::string::npos); - CHECK(text.find("reference") != std::string::npos); - CHECK(text.find("bits accurate") == std::string::npos); - CHECK(text.find("domain") == std::string::npos); - CHECK(text.find("Inf/") == std::string::npos); - CHECK(text.find("NaN") == std::string::npos); -} - -TEST_CASE("metrics exact comparison formatting avoids literal infinities", "[metrics][filters]") -{ - auto record = make_filter_test_record(bl::test::metrics::precision_type::f128, "round"); - record.fltx_accuracy.worst_bits = std::numeric_limits::infinity(); - record.fltx_accuracy.mean_bits = std::numeric_limits::infinity(); - - CHECK(bl::test::metrics::format_metrics_number(record.fltx_accuracy.mean_bits, 1) == "exact"); - - auto exact_reference = record.fltx_accuracy; - CHECK(bl::test::metrics::precision_gap_bits(record.fltx_accuracy, exact_reference) == 0.0); - - std::ostringstream out; - bl::test::metrics::write_csv_record(out, record); - const std::string csv = out.str(); - CHECK(csv.find("inf") == std::string::npos); - CHECK(csv.find("exact") != std::string::npos); -} diff --git a/tests/metrics/metrics_main.cpp b/tests/metrics/metrics_main.cpp deleted file mode 100644 index a626fbe..0000000 --- a/tests/metrics/metrics_main.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include - -int main(int argc, char* argv[]) -{ - Catch::Session session; - - Catch::ConfigData config; - config.runOrder = Catch::TestRunOrder::LexicographicallySorted; - session.useConfigData(config); - - return session.run(argc, argv); -} diff --git a/tests/metrics/metrics_mixed.cpp b/tests/metrics/metrics_mixed.cpp deleted file mode 100644 index db48e49..0000000 --- a/tests/metrics/metrics_mixed.cpp +++ /dev/null @@ -1,95 +0,0 @@ -#include - -#include -#include - -#include "metrics_case_output.h" -#include "metrics_mixed_workloads.h" - -namespace -{ - bool benchmark_phase_selected() - { - if (bl::test::metrics::metrics_case_phase_enabled("bench")) - return true; - - SUCCEED("metrics benchmark phase not selected"); - return false; - } - - template - void write_mixed_record(std::string_view title, const bl::test::metrics::metrics_record& record) - { - bl::test::metrics::write_metrics_case_report(title, record); - CHECK(record.fltx_accuracy.sample_count > 0); - CHECK(record.competitor_accuracy.sample_count > 0); - CHECK(record.fltx_benchmark.iteration_count > 0); - CHECK(record.competitor_benchmark.iteration_count > 0); - } -} - -TEST_CASE("f128 workload 001 mixed arithmetic", "[metrics][bench][fltx][f128][mixed][workload][arithmetic]") -{ - if (!benchmark_phase_selected()) - return; - - using profile = bl::test::metrics::mixed_workloads::mixed_profile; - write_mixed_record( - "f128 mixed workload metrics results", - bl::test::metrics::mixed_workloads::run_mixed_arithmetic_record(true)); -} - -TEST_CASE("f128 workload 002 affine transform", "[metrics][bench][fltx][f128][mixed][workload][affine]") -{ - if (!benchmark_phase_selected()) - return; - - using profile = bl::test::metrics::mixed_workloads::mixed_profile; - write_mixed_record( - "f128 mixed workload metrics results", - bl::test::metrics::mixed_workloads::run_affine_record(true)); -} - -TEST_CASE("f128 workload 003 mandelbrot", "[metrics][bench][fltx][f128][mixed][workload][mandelbrot]") -{ - if (!benchmark_phase_selected()) - return; - - using profile = bl::test::metrics::mixed_workloads::mixed_profile; - write_mixed_record( - "f128 mixed workload metrics results", - bl::test::metrics::mixed_workloads::run_mandelbrot_record(true)); -} - -TEST_CASE("f256 workload 001 mixed arithmetic", "[metrics][bench][fltx][f256][mixed][workload][arithmetic]") -{ - if (!benchmark_phase_selected()) - return; - - using profile = bl::test::metrics::mixed_workloads::mixed_profile; - write_mixed_record( - "f256 mixed workload metrics results", - bl::test::metrics::mixed_workloads::run_mixed_arithmetic_record(true)); -} - -TEST_CASE("f256 workload 002 affine transform", "[metrics][bench][fltx][f256][mixed][workload][affine]") -{ - if (!benchmark_phase_selected()) - return; - - using profile = bl::test::metrics::mixed_workloads::mixed_profile; - write_mixed_record( - "f256 mixed workload metrics results", - bl::test::metrics::mixed_workloads::run_affine_record(true)); -} - -TEST_CASE("f256 workload 003 mandelbrot", "[metrics][bench][fltx][f256][mixed][workload][mandelbrot]") -{ - if (!benchmark_phase_selected()) - return; - - using profile = bl::test::metrics::mixed_workloads::mixed_profile; - write_mixed_record( - "f256 mixed workload metrics results", - bl::test::metrics::mixed_workloads::run_mandelbrot_record(true)); -} diff --git a/tests/metrics/metrics_mixed_workloads.h b/tests/metrics/metrics_mixed_workloads.h deleted file mode 100644 index 5b3c707..0000000 --- a/tests/metrics/metrics_mixed_workloads.h +++ /dev/null @@ -1,1222 +0,0 @@ -#ifndef FLTX_TESTS_METRICS_MIXED_WORKLOADS_INCLUDED -#define FLTX_TESTS_METRICS_MIXED_WORKLOADS_INCLUDED - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "metrics_f128_primary.h" -#include "metrics_f256_primary.h" -#include "metrics_config.h" - -namespace bl::test::metrics::mixed_workloads -{ - constexpr domain_id mixed_domain{ "mixed", domain_role::stress }; - constexpr int mandelbrot_width = 32; - constexpr int mandelbrot_height = 32; - constexpr int mandelbrot_max_iter = 20000; - - template - [[nodiscard]] T constant(double value) - { - return T{ value }; - } - - template - [[nodiscard]] T parse_constant(const char* text) - { - return T{ text }; - } - - template<> - [[nodiscard]] inline bl::f128 parse_constant(const char* text) - { - return bl::f128{ bl::to_f128(text) }; - } - - template<> - [[nodiscard]] inline bl::f256 parse_constant(const char* text) - { - return bl::f256{ bl::to_f256(text) }; - } - - template<> - [[nodiscard]] inline dd_real parse_constant(const char* text) - { - return dd_real::read(text); - } - - template<> - [[nodiscard]] inline qd_real parse_constant(const char* text) - { - return qd_real::read(text); - } - - struct mixed_value_sample - { - std::string_view label; - std::string text; - value_sample value; - }; - - struct recurrence_sample - { - std::string_view label; - mixed_value_sample x; - mixed_value_sample y; - mixed_value_sample a; - mixed_value_sample b; - mixed_value_sample c; - mixed_value_sample d; - }; - - struct affine_sample - { - std::string_view label; - mixed_value_sample x; - mixed_value_sample y; - mixed_value_sample angle; - mixed_value_sample scale_x; - mixed_value_sample scale_y; - mixed_value_sample translate_x; - mixed_value_sample translate_y; - }; - - enum class arithmetic_kernel - { - square_difference, - product_sum, - scaled_product_sum, - shifted_sum, - three_product_sum, - scalar_mix, - fused_expression - }; - - template - struct mixed_profile; - - template<> - struct mixed_profile - { - using primary = f128_primary::references; - using fltx_type = f128_primary::fltx_type; - using perfect_ref = f128_primary::perfect_ref; - using competitor_ref = f128_primary::competitor_ref; - using extra_competitor_ref = f128_primary::extra_competitor_ref; - - static constexpr precision_type precision = precision_type::f128; - static constexpr std::string_view competitor_name = f128_primary::references::competitor_name; - static constexpr std::string_view extra_competitor_name = f128_primary::references::extra_competitor_name; - static constexpr double domain_target_bits = f128_primary::domain_ideal_bits; - - [[nodiscard]] static mixed_value_sample parse_value(std::string_view label, std::string text) - { - const fltx_type value{ bl::to_f128(text.c_str()) }; - return { label, std::move(text), f128_primary::make_runtime_value(label, value) }; - } - - [[nodiscard]] static mixed_value_sample parse_value(std::string_view label, const char* text) - { - return parse_value(label, std::string{ text }); - } - - template - [[nodiscard]] static T make_value(const mixed_value_sample& value) - { - if constexpr (std::is_same_v) - return f128_primary::make_fltx(value.value); - else if constexpr (std::is_same_v) - return parse_constant(value.text.c_str()); - else if constexpr (std::is_same_v) - return parse_constant(value.text.c_str()); - else - return parse_constant(value.text.c_str()); - } - - [[nodiscard]] static perfect_ref to_perfect(const fltx_type& value) { return f128_primary::to_perfect(value); } - [[nodiscard]] static perfect_ref to_perfect(const competitor_ref& value) { return f128_primary::to_perfect(value); } - [[nodiscard]] static perfect_ref to_perfect(const extra_competitor_ref& value) { return f128_primary::to_perfect(value); } - [[nodiscard]] static const perfect_ref& to_perfect(const perfect_ref& value) { return value; } - - [[nodiscard]] static double matching_bits(const perfect_ref& actual, const perfect_ref& expected) - { - return f128_primary::matching_bits(actual, expected); - } - - [[nodiscard]] static double finite_for_mean(double bits) noexcept { return f128_primary::finite_for_mean(bits); } - [[nodiscard]] static std::size_t benchmark_repetitions(std::size_t sample_count) noexcept - { - return f128_primary::benchmark_repetitions(sample_count); - } - - static void consume(const fltx_type& value) noexcept { f128_primary::consume_benchmark_value(value); } - static void consume(const competitor_ref& value) { f128_primary::consume_benchmark_value(value); } - static void consume(const extra_competitor_ref& value) { f128_primary::consume_benchmark_value(value); } - }; - - template<> - struct mixed_profile - { - using primary = f256_primary::references; - using fltx_type = f256_primary::fltx_type; - using perfect_ref = f256_primary::perfect_ref; - using competitor_ref = f256_primary::competitor_ref; - using extra_competitor_ref = f256_primary::extra_competitor_ref; - - static constexpr precision_type precision = precision_type::f256; - static constexpr std::string_view competitor_name = f256_primary::references::competitor_name; - static constexpr std::string_view extra_competitor_name = f256_primary::references::extra_competitor_name; - static constexpr double domain_target_bits = f256_primary::domain_ideal_bits; - - [[nodiscard]] static mixed_value_sample parse_value(std::string_view label, std::string text) - { - const fltx_type value{ bl::to_f256(text.c_str()) }; - return { label, std::move(text), f256_primary::make_runtime_value(label, value) }; - } - - [[nodiscard]] static mixed_value_sample parse_value(std::string_view label, const char* text) - { - return parse_value(label, std::string{ text }); - } - - template - [[nodiscard]] static T make_value(const mixed_value_sample& value) - { - if constexpr (std::is_same_v) - return f256_primary::make_fltx(value.value); - else if constexpr (std::is_same_v) - return parse_constant(value.text.c_str()); - else if constexpr (std::is_same_v) - return parse_constant(value.text.c_str()); - else - return parse_constant(value.text.c_str()); - } - - [[nodiscard]] static perfect_ref to_perfect(const fltx_type& value) { return f256_primary::to_perfect(value); } - [[nodiscard]] static perfect_ref to_perfect(const competitor_ref& value) { return f256_primary::to_perfect(value); } - [[nodiscard]] static perfect_ref to_perfect(const extra_competitor_ref& value) { return f256_primary::to_perfect(value); } - [[nodiscard]] static const perfect_ref& to_perfect(const perfect_ref& value) { return value; } - - [[nodiscard]] static double matching_bits(const perfect_ref& actual, const perfect_ref& expected) - { - return f256_primary::matching_bits(actual, expected); - } - - [[nodiscard]] static double finite_for_mean(double bits) noexcept { return f256_primary::finite_for_mean(bits); } - [[nodiscard]] static std::size_t benchmark_repetitions(std::size_t sample_count) noexcept - { - return f256_primary::benchmark_repetitions(sample_count); - } - - static void consume(const fltx_type& value) noexcept { f256_primary::consume_benchmark_value(value); } - static void consume(const competitor_ref& value) { f256_primary::consume_benchmark_value(value); } - static void consume(const extra_competitor_ref& value) { f256_primary::consume_benchmark_value(value); } - }; - - template - [[nodiscard]] T mixed_sin(const T& x) - { - using std::sin; - return sin(x); - } - - template - [[nodiscard]] T mixed_cos(const T& x) - { - using std::cos; - return cos(x); - } - - template - [[nodiscard]] std::pair mixed_sincos(const T& x) - { - return { mixed_sin(x), mixed_cos(x) }; - } - - [[nodiscard]] inline std::pair mixed_sincos(const bl::f128& x) - { - bl::f128 s{}; - bl::f128 c{}; - if (bl::sincos(x, s, c)) - return { s, c }; - return { bl::sin(x), bl::cos(x) }; - } - - [[nodiscard]] inline std::pair mixed_sincos(const bl::f256& x) - { - bl::f256 s{}; - bl::f256 c{}; - if (bl::sincos(x, s, c)) - return { s, c }; - return { bl::sin(x), bl::cos(x) }; - } - - [[nodiscard]] inline std::pair mixed_sincos(const dd_real& x) - { - dd_real s{}; - dd_real c{}; - ::sincos(x, s, c); - return { s, c }; - } - - [[nodiscard]] inline std::pair mixed_sincos(const qd_real& x) - { - qd_real s{}; - qd_real c{}; - ::sincos(x, s, c); - return { s, c }; - } - - template - [[nodiscard]] T blend_result(const T& value, const T& acc) - { - return value + acc * constant(0.25); - } - - template - [[nodiscard]] T mixed_sqr(const T& value) - { - return value * value; - } - - template<> - [[nodiscard]] inline bl::f128 mixed_sqr(const bl::f128& value) - { - return bl::detail::_f128::sqr_dd_inline(value); - } - - template<> - [[nodiscard]] inline dd_real mixed_sqr(const dd_real& value) - { - return sqr(value); - } - - template<> - [[nodiscard]] inline qd_real mixed_sqr(const qd_real& value) - { - return sqr(value); - } - - template - [[nodiscard]] T mixed_twice(const T& value) - { - return value + value; - } - - template<> - [[nodiscard]] inline bl::f128 mixed_twice(const bl::f128& value) - { - return bl::detail::_f128::mul_pwr2_inline(value, 2.0); - } - - template<> - [[nodiscard]] inline dd_real mixed_twice(const dd_real& value) - { - return mul_pwr2(value, 2.0); - } - - template<> - [[nodiscard]] inline qd_real mixed_twice(const qd_real& value) - { - return mul_pwr2(value, 2.0); - } - - template - [[nodiscard]] bool mixed_mandelbrot_escaped(const T& x2, const T& y2) - { - return x2 + y2 > constant(4.0); - } - - template<> - [[nodiscard]] inline bool mixed_mandelbrot_escaped(const bl::f128& x2, const bl::f128& y2) - { - constexpr double bailout = 4.0; - constexpr double bailout_margin = 0x1.0p-48; - - const double hi_sum = x2.hi + y2.hi; - if (hi_sum > bailout + bailout_margin) - return true; - if (hi_sum < bailout - bailout_margin) - return false; - - double s1{}, s2{}; - bl::detail::fp::two_sum_precise(x2.hi, y2.hi, s1, s2); - - double t1{}, t2{}; - bl::detail::fp::two_sum_precise(x2.lo, y2.lo, t1, t2); - - s2 += t1; - bl::detail::fp::quick_two_sum_precise(s1, s2, s1, s2); - s2 += t2; - bl::detail::fp::quick_two_sum_precise(s1, s2, s1, s2); - return s1 > bailout || (s1 == bailout && s2 > 0.0); - } - - template - struct recurrence_value - { - T x{}; - T y{}; - T a{}; - T b{}; - T c{}; - T d{}; - }; - - template - struct affine_value - { - T x{}; - T y{}; - T angle{}; - T scale_x{}; - T scale_y{}; - T translate_x{}; - T translate_y{}; - }; - - class mixed_rng - { - public: - constexpr explicit mixed_rng(std::uint64_t seed) noexcept - : state(seed) - { - } - - [[nodiscard]] std::uint64_t next() noexcept - { - state += 0x9e3779b97f4a7c15ull; - std::uint64_t value = state; - value = (value ^ (value >> 30)) * 0xbf58476d1ce4e5b9ull; - value = (value ^ (value >> 27)) * 0x94d049bb133111ebull; - return value ^ (value >> 31); - } - - [[nodiscard]] double unit() noexcept - { - return static_cast(next() >> 11) * 0x1.0p-53; - } - - [[nodiscard]] double uniform(double min, double max) noexcept - { - return min + (max - min) * unit(); - } - - [[nodiscard]] int integer(int min, int max) noexcept - { - return min + static_cast(next() % static_cast(max - min + 1)); - } - - [[nodiscard]] double sign() noexcept - { - return (next() & 1ull) == 0ull ? -1.0 : 1.0; - } - - private: - std::uint64_t state; - }; - - [[nodiscard]] inline std::string format_mixed_value(double value) - { - std::ostringstream out; - out << std::scientific << std::setprecision(36) << value; - return out.str(); - } - - template - [[nodiscard]] mixed_value_sample make_generated_value(std::string_view label, double value) - { - return Profile::parse_value(label, format_mixed_value(value)); - } - - template - [[nodiscard]] recurrence_sample make_recurrence_sample( - std::string_view label, - const std::array& values) - { - return { - label, - Profile::parse_value("x", values[0]), - Profile::parse_value("y", values[1]), - Profile::parse_value("a", values[2]), - Profile::parse_value("b", values[3]), - Profile::parse_value("c", values[4]), - Profile::parse_value("d", values[5]) - }; - } - - template - [[nodiscard]] affine_sample make_affine_sample( - std::string_view label, - const std::array& values) - { - return { - label, - Profile::parse_value("x", values[0]), - Profile::parse_value("y", values[1]), - Profile::parse_value("angle", values[2]), - Profile::parse_value("scale_x", values[3]), - Profile::parse_value("scale_y", values[4]), - Profile::parse_value("translate_x", values[5]), - Profile::parse_value("translate_y", values[6]) - }; - } - - template - [[nodiscard]] std::vector make_recurrence_samples() - { - static constexpr std::array, 16> source{{ - {{ "-1.1250000000000000000000000000000001", "0.3125000000000000000000000000000001", "0.8750000000000000000000000000000001", "-0.4062500000000000000000000000000001", "1.3125000000000000000000000000000001", "0.6875000000000000000000000000000001" }}, - {{ "0.6875000000000000000000000000000001", "-0.9375000000000000000000000000000001", "-0.5625000000000000000000000000000001", "0.7812500000000000000000000000000001", "0.8125000000000000000000000000000001", "1.1875000000000000000000000000000001" }}, - {{ "-0.3437500000000000000000000000000001", "0.8437500000000000000000000000000001", "0.4687500000000000000000000000000001", "0.6562500000000000000000000000000001", "1.5625000000000000000000000000000001", "0.9062500000000000000000000000000001" }}, - {{ "0.1562500000000000000000000000000001", "-0.7187500000000000000000000000000001", "-0.8437500000000000000000000000000001", "0.3437500000000000000000000000000001", "0.7187500000000000000000000000000001", "1.4062500000000000000000000000000001" }}, - {{ "1.0312500000000000000000000000000001", "0.4062500000000000000000000000000001", "0.5937500000000000000000000000000001", "-0.6875000000000000000000000000000001", "1.2187500000000000000000000000000001", "0.7812500000000000000000000000000001" }}, - {{ "-0.6562500000000000000000000000000001", "-0.1875000000000000000000000000000001", "-0.3125000000000000000000000000000001", "0.7187500000000000000000000000000001", "0.9062500000000000000000000000000001", "1.6250000000000000000000000000000001" }}, - {{ "0.7812500000000000000000000000000001", "-1.0312500000000000000000000000000001", "0.6875000000000000000000000000000001", "0.2187500000000000000000000000000001", "1.4375000000000000000000000000000001", "0.5937500000000000000000000000000001" }}, - {{ "-0.2187500000000000000000000000000001", "0.9375000000000000000000000000000001", "-0.4687500000000000000000000000000001", "-0.8125000000000000000000000000000001", "0.5937500000000000000000000000000001", "1.3125000000000000000000000000000001" }}, - {{ "-1.3333333333333333333333333333333333", "0.4142135623730950488016887242096981", "0.7071067811865475244008443621048490", "-0.5773502691896257645091487805019575", "1.6180339887498948482045868343656381", "0.6180339887498948482045868343656381" }}, - {{ "0.5773502691896257645091487805019575", "-1.2247448713915890490986420373529457", "-0.4142135623730950488016887242096981", "0.8660254037844386467637231707529362", "0.7071067811865475244008443621048490", "1.4142135623730950488016887242096981" }}, - {{ "-0.3819660112501051517954131656343619", "1.1180339887498948482045868343656381", "0.6180339887498948482045868343656381", "0.7320508075688772935274463415058724", "1.7320508075688772935274463415058724", "0.8164965809277260327324280249019638" }}, - {{ "0.2679491924311227064725536584941276", "-0.8164965809277260327324280249019638", "-0.8660254037844386467637231707529362", "0.3819660112501051517954131656343619", "0.7639320225002103035908263312687238", "1.6180339887498948482045868343656381" }}, - {{ "1.1547005383792515290182975610039150", "0.3660254037844386467637231707529362", "0.8164965809277260327324280249019638", "-0.7071067811865475244008443621048490", "1.3333333333333333333333333333333333", "0.6666666666666666666666666666666667" }}, - {{ "-0.7639320225002103035908263312687238", "-0.2360679774997896964091736687312762", "-0.3333333333333333333333333333333333", "0.7320508075688772935274463415058724", "0.8660254037844386467637231707529362", "1.7320508075688772935274463415058724" }}, - {{ "0.8660254037844386467637231707529362", "-1.1180339887498948482045868343656381", "0.7639320225002103035908263312687238", "0.2679491924311227064725536584941276", "1.5", "0.5773502691896257645091487805019575" }}, - {{ "-0.2679491924311227064725536584941276", "1.2247448713915890490986420373529457", "-0.6180339887498948482045868343656381", "-0.7639320225002103035908263312687238", "0.6666666666666666666666666666666667", "1.5" }} - }}; - - std::vector samples; - constexpr std::size_t generated_count = config::scale_mixed_sample_count(48); - samples.reserve(source.size() + generated_count); - for (std::size_t index = 0; index < source.size(); ++index) - samples.push_back(make_recurrence_sample("mixed", source[index])); - - mixed_rng rng{ 0x6d697865645f6175ull }; - for (std::size_t index = 0; index < generated_count; ++index) - { - const auto signed_value = [&]() { - if ((rng.next() & 3ull) == 0ull) - return rng.sign() * std::ldexp(1.0 + rng.unit(), rng.integer(-8, 4)); - return rng.uniform(-2.5, 2.5); - }; - - const double c = (index % 3) == 0 ? rng.uniform(0.375, 3.0) : rng.uniform(0.5, 1.75); - const double d = (index % 3) == 1 ? rng.uniform(0.375, 3.0) : rng.uniform(0.5, 1.75); - samples.push_back({ - "generated", - make_generated_value("x", signed_value()), - make_generated_value("y", signed_value()), - make_generated_value("a", rng.uniform(-1.5, 1.5)), - make_generated_value("b", rng.uniform(-1.5, 1.5)), - make_generated_value("c", c), - make_generated_value("d", d) - }); - } - return samples; - } - - template - [[nodiscard]] std::vector make_affine_samples() - { - static constexpr std::array, 16> source{{ - {{ "-1.1250000000000000000000000000000001", "0.3125000000000000000000000000000001", "-2.9137461023847500000000000000000000", "0.8750000000000000000000000000000001", "1.1250000000000000000000000000000001", "0.2500000000000000000000000000000001", "-0.1250000000000000000000000000000001" }}, - {{ "0.6875000000000000000000000000000001", "-0.9375000000000000000000000000000001", "-2.1845036821094100000000000000000000", "1.0312500000000000000000000000000001", "0.7812500000000000000000000000000001", "-0.3750000000000000000000000000000001", "0.5000000000000000000000000000000001" }}, - {{ "-0.3437500000000000000000000000000001", "0.8437500000000000000000000000000001", "-1.0362719548392000000000000000000000", "0.7187500000000000000000000000000001", "1.3125000000000000000000000000000001", "0.1250000000000000000000000000000001", "0.3750000000000000000000000000000001" }}, - {{ "0.1562500000000000000000000000000001", "-0.7187500000000000000000000000000001", "-0.4178293036751200000000000000000000", "1.4062500000000000000000000000000001", "0.9062500000000000000000000000000001", "-0.5000000000000000000000000000000001", "-0.2500000000000000000000000000000001" }}, - {{ "1.0312500000000000000000000000000001", "0.4062500000000000000000000000000001", "0.4637912285314400000000000000000000", "0.8125000000000000000000000000000001", "1.2187500000000000000000000000000001", "0.3125000000000000000000000000000001", "-0.4375000000000000000000000000000001" }}, - {{ "-0.6562500000000000000000000000000001", "-0.1875000000000000000000000000000001", "1.3379281740185600000000000000000000", "1.1875000000000000000000000000000001", "0.6875000000000000000000000000000001", "-0.1875000000000000000000000000000001", "0.2500000000000000000000000000000001" }}, - {{ "0.7812500000000000000000000000000001", "-1.0312500000000000000000000000000001", "2.1187636509482200000000000000000000", "0.9687500000000000000000000000000001", "1.3437500000000000000000000000000001", "0.0625000000000000000000000000000001", "-0.3125000000000000000000000000000001" }}, - {{ "-0.2187500000000000000000000000000001", "0.9375000000000000000000000000000001", "3.0824510067120300000000000000000000", "1.0937500000000000000000000000000001", "0.8437500000000000000000000000000001", "-0.2500000000000000000000000000000001", "0.1875000000000000000000000000000001" }}, - {{ "-4.1250000000000000000000000000000001", "2.3125000000000000000000000000000001", "-11.7849263152274000000000000000000000", "0.7812500000000000000000000000000001", "1.4375000000000000000000000000000001", "1.2500000000000000000000000000000001", "-1.1250000000000000000000000000000001" }}, - {{ "3.6875000000000000000000000000000001", "-3.9375000000000000000000000000000001", "-8.6027134903187000000000000000000000", "1.5312500000000000000000000000000001", "0.6562500000000000000000000000000001", "-1.3750000000000000000000000000000001", "1.5000000000000000000000000000000001" }}, - {{ "-2.3437500000000000000000000000000001", "3.8437500000000000000000000000000001", "-5.7314081860192000000000000000000000", "0.5937500000000000000000000000000001", "1.6250000000000000000000000000000001", "1.1250000000000000000000000000000001", "1.3750000000000000000000000000000001" }}, - {{ "2.1562500000000000000000000000000001", "-2.7187500000000000000000000000000001", "-4.2861034750118000000000000000000000", "1.6875000000000000000000000000000001", "0.5625000000000000000000000000000001", "-1.5000000000000000000000000000000001", "-1.2500000000000000000000000000000001" }}, - {{ "4.0312500000000000000000000000000001", "1.4062500000000000000000000000000001", "4.2349172307716000000000000000000000", "0.6875000000000000000000000000000001", "1.5625000000000000000000000000000001", "1.3125000000000000000000000000000001", "-1.4375000000000000000000000000000001" }}, - {{ "-3.6562500000000000000000000000000001", "-1.1875000000000000000000000000000001", "5.9472684042019000000000000000000000", "1.4375000000000000000000000000000001", "0.5937500000000000000000000000000001", "-1.1875000000000000000000000000000001", "1.2500000000000000000000000000000001" }}, - {{ "2.7812500000000000000000000000000001", "-4.0312500000000000000000000000000001", "8.5197046183375000000000000000000000", "0.8437500000000000000000000000000001", "1.6875000000000000000000000000000001", "1.0625000000000000000000000000000001", "-1.3125000000000000000000000000000001" }}, - {{ "-1.2187500000000000000000000000000001", "3.9375000000000000000000000000000001", "11.3582910427196000000000000000000000", "1.2187500000000000000000000000000001", "0.7187500000000000000000000000000001", "-1.2500000000000000000000000000000001", "1.1875000000000000000000000000000001" }} - }}; - - std::vector samples; - constexpr std::size_t generated_count = config::scale_mixed_sample_count(48); - samples.reserve(source.size() + generated_count); - for (std::size_t index = 0; index < source.size(); ++index) - samples.push_back(make_affine_sample("affine", source[index])); - - constexpr double pi = 3.14159265358979323846264338327950288; - mixed_rng rng{ 0x616666696e655f6dull }; - for (std::size_t index = 0; index < generated_count; ++index) - { - const double coordinate_scale = (index % 4) == 0 ? 16.0 : 4.0; - samples.push_back({ - "generated", - make_generated_value("x", rng.uniform(-coordinate_scale, coordinate_scale)), - make_generated_value("y", rng.uniform(-coordinate_scale, coordinate_scale)), - make_generated_value("angle", rng.uniform(-8.0 * pi, 8.0 * pi)), - make_generated_value("scale_x", rng.uniform(0.375, 1.875)), - make_generated_value("scale_y", rng.uniform(0.375, 1.875)), - make_generated_value("translate_x", rng.uniform(-2.0, 2.0)), - make_generated_value("translate_y", rng.uniform(-2.0, 2.0)) - }); - } - return samples; - } - - template - [[nodiscard]] std::vector> make_recurrence_inputs(const std::vector& samples) - { - std::vector> values; - values.reserve(samples.size()); - for (const recurrence_sample& sample : samples) - { - values.push_back({ - Profile::template make_value(sample.x), - Profile::template make_value(sample.y), - Profile::template make_value(sample.a), - Profile::template make_value(sample.b), - Profile::template make_value(sample.c), - Profile::template make_value(sample.d) - }); - } - return values; - } - - template - [[nodiscard]] std::vector> make_affine_inputs(const std::vector& samples) - { - std::vector> values; - values.reserve(samples.size()); - for (const affine_sample& sample : samples) - { - values.push_back({ - Profile::template make_value(sample.x), - Profile::template make_value(sample.y), - Profile::template make_value(sample.angle), - Profile::template make_value(sample.scale_x), - Profile::template make_value(sample.scale_y), - Profile::template make_value(sample.translate_x), - Profile::template make_value(sample.translate_y) - }); - } - return values; - } - - template - struct recurrence_input_maker - { - template - [[nodiscard]] auto operator()(const std::vector& source) const - { - return make_recurrence_inputs(source); - } - }; - - template - struct affine_input_maker - { - template - [[nodiscard]] auto operator()(const std::vector& source) const - { - return make_affine_inputs(source); - } - }; - - template - [[nodiscard]] std::pair run_arithmetic_workload( - const std::vector>& values, - std::size_t outer_loops) - { - auto state = values; - T acc_x = state.front().x; - T acc_y = state.front().y; - - constexpr std::array add_rhs{ 0.125, -0.1875, 0.3125, -0.4375, 0.5625, -0.6875, 0.8125, -0.9375 }; - constexpr std::array add_lhs{ -0.03125, 0.09375, -0.15625, 0.21875, -0.28125, 0.34375, -0.40625, 0.46875 }; - constexpr std::array mul_rhs{ 0.875, -1.125, 1.375, -0.625, 0.5625, -0.8125, 1.0625, -1.3125 }; - constexpr std::array mul_lhs{ -1.0625, 0.6875, -0.9375, 1.1875, -0.75, 1.5, -1.25, 0.8125 }; - constexpr std::array div_rhs{ 1.125, -1.375, 1.625, -1.875, 2.125, -2.375, 2.625, -2.875 }; - - for (std::size_t outer = 0; outer < outer_loops; ++outer) - { - for (std::size_t i = 0; i < state.size(); ++i) - { - auto& item = state[i]; - const T x = item.x; - const T y = item.y; - const T a = item.a; - const T b = item.b; - const T c = item.c; - const T d = item.d; - - if constexpr (Kernel == arithmetic_kernel::square_difference) - { - item.x = ((x * x - y * y) + a) / (c + constant(0.5)); - item.y = ((x * y + x * y) + b) / (d + constant(1.5)); - } - else if constexpr (Kernel == arithmetic_kernel::product_sum) - { - item.x = (((x * a) + (y * b)) + c) / (c + constant(2.0)); - item.y = (((x * b) - (a * c)) - d) / (d + constant(2.5)); - } - else if constexpr (Kernel == arithmetic_kernel::scaled_product_sum) - { - item.x = (((x * constant(1.125)) + (y * constant(-0.625))) + a) / (c + constant(1.75)); - item.y = (b - (x * constant(0.375))) / (d + constant(2.25)); - } - else if constexpr (Kernel == arithmetic_kernel::shifted_sum) - { - item.x = ((x + a) + b) / ((c + d) + constant(1.0)); - item.y = ((y + c) - d) / ((a + b) + constant(2.0)); - } - else if constexpr (Kernel == arithmetic_kernel::three_product_sum) - { - item.x = (((x * a) + (y * b)) + (c * d)) / ((c + d) + constant(2.0)); - item.y = (((x * b) + (y * a)) + ((c * d) + (a * b))) / (c + constant(3.0)); - } - else if constexpr (Kernel == arithmetic_kernel::scalar_mix) - { - const std::size_t scalar_index = i % add_rhs.size(); - const T scalar_rhs_add = item.x + constant(add_rhs[scalar_index]); - const T scalar_lhs_add = constant(add_lhs[scalar_index]) + item.y; - const T scalar_rhs_mul = scalar_rhs_add * constant(mul_rhs[scalar_index]); - const T scalar_lhs_mul = constant(mul_lhs[scalar_index]) * scalar_lhs_add; - const T scalar_div = scalar_rhs_mul / constant(div_rhs[scalar_index]); - - const T qd_add = scalar_div + item.a; - const T qd_sub = scalar_lhs_mul - item.b; - const T qd_mul = qd_add * qd_sub; - const T denominator_base = item.c * item.c + item.d * item.d; - const T denominator = denominator_base + constant(1.0); - - const T x_step = qd_mul / denominator / (denominator + constant(2.0)); - const T y_delta = qd_add - qd_sub; - const T y_denominator = denominator + item.c * constant(0.5) + constant(2.5); - item.x = x_step + constant(0.125) * item.a; - item.y = y_delta / y_denominator - item.b * constant(0.0625); - } - else - { - const T sum_plus_value = ((item.x * item.y) + (item.a * item.b)) + item.c; - const T diff_minus_value = ((item.x * item.a) - (item.b * item.c)) - item.d; - item.x = sum_plus_value / (item.c * item.c + constant(2.0)); - item.y = diff_minus_value / (item.d * item.d + constant(2.5)); - } - - acc_x = blend_result(item.x, acc_x); - acc_y = blend_result(item.y, acc_y); - } - } - - return { acc_x, acc_y }; - } - - template - [[nodiscard]] std::pair run_affine_workload( - const std::vector>& values, - std::size_t outer_loops) - { - auto state = values; - T acc_x = state.front().x; - T acc_y = state.front().y; - - for (std::size_t outer = 0; outer < outer_loops; ++outer) - { - for (auto& item : state) - { - const auto [sin_angle, cos_angle] = mixed_sincos(item.angle); - const T neg_sin_angle = -sin_angle; - - const T m00 = cos_angle * item.scale_x; - const T m01 = neg_sin_angle * item.scale_y; - const T m10 = sin_angle * item.scale_x; - const T m11 = cos_angle * item.scale_y; - - const T next_x = ((m00 * item.x) + (m01 * item.y) + item.translate_x) / (item.scale_x + constant(2.0)); - const T next_y = ((m10 * item.x) + (m11 * item.y) + item.translate_y) / (item.scale_y + constant(2.0)); - - item.x = next_x; - item.y = next_y; - - acc_x = blend_result(item.x, acc_x); - acc_y = blend_result(item.y, acc_y); - } - } - - return { acc_x, acc_y }; - } - - template - void consume_pair(const std::pair& value) - { - Profile::consume(value.first); - Profile::consume(value.second); - } - - template - [[nodiscard]] benchmark_result benchmark_pair_workload( - const std::vector& values, - WorkloadFn workload) - { - const std::size_t repetitions = config::scale_mixed_iterations(Profile::benchmark_repetitions(values.size())); - const auto start = std::chrono::steady_clock::now(); - const auto result = workload(values, repetitions); - const auto elapsed = std::chrono::steady_clock::now() - start; - consume_pair(result); - - const std::size_t iterations = repetitions * values.size(); - return { - std::chrono::duration(elapsed).count() / static_cast(iterations), - iterations - }; - } - - template - [[nodiscard]] accuracy_result pair_accuracy( - const std::pair& actual, - const std::pair& expected, - std::size_t sample_count) - { - double x_bits = Profile::matching_bits( - Profile::to_perfect(actual.first), - Profile::to_perfect(expected.first)); - double y_bits = Profile::matching_bits( - Profile::to_perfect(actual.second), - Profile::to_perfect(expected.second)); - if (std::isnan(x_bits)) - x_bits = 0.0; - if (std::isnan(y_bits)) - y_bits = 0.0; - return { - std::min(x_bits, y_bits), - (Profile::finite_for_mean(x_bits) + Profile::finite_for_mean(y_bits)) * 0.5, - sample_count, - domain_score({ - domain_sample_score(x_bits, Profile::domain_target_bits), - domain_sample_score(y_bits, Profile::domain_target_bits) - }) - }; - } - - template - [[nodiscard]] metrics_record run_pair_workload_case( - std::string_view operation, - const std::vector& samples, - MakeInputsFn make_inputs, - WorkloadFn workload, - bool include_benchmarks) - { - constexpr std::size_t accuracy_repetitions = 8; - - using fltx_type = typename Profile::fltx_type; - using competitor_ref = typename Profile::competitor_ref; - using extra_competitor_ref = typename Profile::extra_competitor_ref; - using perfect_ref = typename Profile::perfect_ref; - - const auto fltx_inputs = make_inputs.template operator()(samples); - const auto competitor_inputs = make_inputs.template operator()(samples); - const auto extra_inputs = make_inputs.template operator()(samples); - const auto perfect_inputs = make_inputs.template operator()(samples); - - const auto expected = workload(perfect_inputs, accuracy_repetitions); - - metrics_record record{}; - record.suite = { Profile::precision, operation_id{ operation, operation }, mixed_domain }; - record.competitor_name = Profile::competitor_name; - record.fltx_accuracy = - pair_accuracy(workload(fltx_inputs, accuracy_repetitions), expected, samples.size()); - record.competitor_accuracy = - pair_accuracy(workload(competitor_inputs, accuracy_repetitions), expected, samples.size()); - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = Profile::extra_competitor_name; - extra_competitor.accuracy = - pair_accuracy(workload(extra_inputs, accuracy_repetitions), expected, samples.size()); - - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_pair_workload(fltx_inputs, workload); - record.competitor_benchmark = benchmark_pair_workload(competitor_inputs, workload); - extra_competitor.benchmark = benchmark_pair_workload(extra_inputs, workload); - } - - return record; - } - - [[nodiscard]] inline accuracy_result aggregate_accuracy(const std::vector& records, auto selector) - { - double worst_bits = std::numeric_limits::infinity(); - double total_mean = 0.0; - double total_domain_score = 0.0; - std::size_t sample_count = 0; - - for (const metrics_record& record : records) - { - const accuracy_result& accuracy = selector(record); - worst_bits = std::min(worst_bits, accuracy.worst_bits); - total_mean += accuracy.mean_bits * static_cast(accuracy.sample_count); - total_domain_score += accuracy.domain_score * static_cast(accuracy.sample_count); - sample_count += accuracy.sample_count; - } - - return { - worst_bits, - sample_count == 0 ? 0.0 : total_mean / static_cast(sample_count), - sample_count, - sample_count == 0 ? 0.0 : total_domain_score / static_cast(sample_count) - }; - } - - [[nodiscard]] inline benchmark_result aggregate_benchmark(const std::vector& records, auto selector) - { - double total_ns = 0.0; - std::size_t iteration_count = 0; - for (const metrics_record& record : records) - { - const benchmark_result& benchmark = selector(record); - total_ns += benchmark.ns_per_iter; - iteration_count += benchmark.iteration_count; - } - - return { - records.empty() ? 0.0 : total_ns / static_cast(records.size()), - iteration_count - }; - } - - template - [[nodiscard]] metrics_record aggregate_mixed_arithmetic(const std::vector& records) - { - metrics_record aggregate{}; - aggregate.suite = { Profile::precision, operation_id{ "mixed arithmetic", "mixed arithmetic" }, mixed_domain }; - aggregate.competitor_name = Profile::competitor_name; - aggregate.fltx_accuracy = aggregate_accuracy(records, [](const metrics_record& record) -> const accuracy_result& { return record.fltx_accuracy; }); - aggregate.competitor_accuracy = aggregate_accuracy(records, [](const metrics_record& record) -> const accuracy_result& { return record.competitor_accuracy; }); - aggregate.fltx_benchmark = aggregate_benchmark(records, [](const metrics_record& record) -> const benchmark_result& { return record.fltx_benchmark; }); - aggregate.competitor_benchmark = aggregate_benchmark(records, [](const metrics_record& record) -> const benchmark_result& { return record.competitor_benchmark; }); - - if (!records.empty() && !records.front().extra_competitors.empty()) - { - auto& extra_competitor = aggregate.extra_competitors.emplace_back(); - extra_competitor.name = records.front().extra_competitors.front().name; - extra_competitor.accuracy = aggregate_accuracy( - records, - [](const metrics_record& record) -> const accuracy_result& { return record.extra_competitors.front().accuracy; }); - extra_competitor.benchmark = aggregate_benchmark( - records, - [](const metrics_record& record) -> const benchmark_result& { return record.extra_competitors.front().benchmark; }); - } - - return aggregate; - } - - template - [[nodiscard]] metrics_record run_arithmetic_record(bool include_benchmarks) - { - const auto samples = make_recurrence_samples(); - return run_pair_workload_case( - "mixed arithmetic detail", - samples, - recurrence_input_maker{}, - [](const auto& values, std::size_t repetitions) - { - return run_arithmetic_workload(values, repetitions); - }, - include_benchmarks); - } - - template - [[nodiscard]] metrics_record run_mixed_arithmetic_record(bool include_benchmarks) - { - std::vector records; - records.reserve(7); - records.push_back(run_arithmetic_record(include_benchmarks)); - records.push_back(run_arithmetic_record(include_benchmarks)); - records.push_back(run_arithmetic_record(include_benchmarks)); - records.push_back(run_arithmetic_record(include_benchmarks)); - records.push_back(run_arithmetic_record(include_benchmarks)); - records.push_back(run_arithmetic_record(include_benchmarks)); - records.push_back(run_arithmetic_record(include_benchmarks)); - return aggregate_mixed_arithmetic(records); - } - - template - [[nodiscard]] metrics_record run_affine_record(bool include_benchmarks) - { - const auto samples = make_affine_samples(); - return run_pair_workload_case( - "affine transform", - samples, - affine_input_maker{}, - [](const auto& values, std::size_t repetitions) - { - return run_affine_workload(values, repetitions); - }, - include_benchmarks); - } - - template - struct mandelbrot_total - { - std::int64_t escape_iterations = 0; - std::int64_t escaped_pixels = 0; - }; - - template - struct mandelbrot_trace - { - mandelbrot_total total{}; - std::array iterations{}; - }; - - template - struct mandelbrot_constants - { - T center_x{}; - T center_y{}; - T zoom{}; - }; - - struct mandelbrot_window - { - const char* center_x; - const char* center_y; - const char* zoom; - }; - - inline constexpr std::array mandelbrot_windows{{ - { "-1.73200006480238126967529761198455", "0.00000019235376499049335337716270", "2.0e+28" }, - { "-0.74364388703715100000000000000000", "0.13182590420533000000000000000000", "1.0e+10" }, - { "-0.75000000000000000000000000000000", "0.10000000000000000000000000000000", "5.12e+2" } - }}; - - template - [[nodiscard]] mandelbrot_constants make_mandelbrot_constants(const mandelbrot_window& window) - { - const mixed_value_sample center_x = Profile::parse_value("center_x", window.center_x); - const mixed_value_sample center_y = Profile::parse_value("center_y", window.center_y); - const mixed_value_sample zoom = Profile::parse_value("zoom", window.zoom); - - return { - Profile::template make_value(center_x), - Profile::template make_value(center_y), - Profile::template make_value(zoom) - }; - } - - template - [[nodiscard]] std::vector> make_mandelbrot_constant_set() - { - std::vector> constants; - constants.reserve(mandelbrot_windows.size()); - for (const mandelbrot_window& window : mandelbrot_windows) - constants.push_back(make_mandelbrot_constants(window)); - return constants; - } - - struct ignore_mandelbrot_pixel - { - void operator()(int, int) const noexcept {} - }; - - template - [[nodiscard]] mandelbrot_total run_mandelbrot_kernel( - const mandelbrot_constants& constants, - RecordPixel record_pixel) - { - const T& center_x = constants.center_x; - const T& center_y = constants.center_y; - const T& zoom = constants.zoom; - - const T width_value = constant(static_cast(mandelbrot_width)); - const T height_value = constant(static_cast(mandelbrot_height)); - const T scale_x = constant(4.0) / (zoom * width_value); - const T scale_y = constant(4.0) / (zoom * height_value); - const T half_w = width_value * constant(0.5); - const T half_h = height_value * constant(0.5); - mandelbrot_total total{}; - for (int row = 0; row < mandelbrot_height; ++row) - { - const int py = mandelbrot_height - 1 - row; - for (int px = 0; px < mandelbrot_width; ++px) - { - const T cx = center_x + (constant(static_cast(px)) - half_w) * scale_x; - const T cy = center_y + (constant(static_cast(py)) - half_h) * scale_y; - T x{}; - T y{}; - - int iter = 0; - while (iter < mandelbrot_max_iter) - { - const T x2 = mixed_sqr(x); - const T y2 = mixed_sqr(y); - if (mixed_mandelbrot_escaped(x2, y2)) - break; - - const T xy = x * y; - const T xx = x2 - y2 + cx; - y = mixed_twice(xy) + cy; - x = xx; - ++iter; - } - - total.escape_iterations += iter; - if (iter != mandelbrot_max_iter) - ++total.escaped_pixels; - record_pixel(row * mandelbrot_width + px, iter); - } - } - return total; - } - - template - [[nodiscard]] mandelbrot_total run_mandelbrot_kernel(const mandelbrot_constants& constants) - { - return run_mandelbrot_kernel(constants, ignore_mandelbrot_pixel{}); - } - - template - [[nodiscard]] mandelbrot_trace run_mandelbrot_trace(const mandelbrot_constants& constants) - { - mandelbrot_trace trace{}; - trace.total = run_mandelbrot_kernel( - constants, - [&](int index, int iter) noexcept - { - trace.iterations[static_cast(index)] = iter; - }); - return trace; - } - - template - [[nodiscard]] std::vector> run_mandelbrot_traces( - const std::vector>& constants) - { - std::vector> traces; - traces.reserve(constants.size()); - for (const mandelbrot_constants& window : constants) - traces.push_back(run_mandelbrot_trace(window)); - return traces; - } - - inline volatile std::int64_t mandelbrot_sink = 0; - - template - [[nodiscard]] benchmark_result benchmark_mandelbrot() - { - const auto constants = make_mandelbrot_constant_set(); - const auto start = std::chrono::steady_clock::now(); - mandelbrot_total total{}; - for (const mandelbrot_constants& window : constants) - { - const mandelbrot_total window_total = run_mandelbrot_kernel(window); - total.escape_iterations += window_total.escape_iterations; - total.escaped_pixels += window_total.escaped_pixels; - } - const auto elapsed = std::chrono::steady_clock::now() - start; - mandelbrot_sink += total.escape_iterations + total.escaped_pixels; - - return { - std::chrono::duration(elapsed).count() / - static_cast(std::max(1, total.escape_iterations)), - static_cast(std::max(0, total.escape_iterations)) - }; - } - - template - [[nodiscard]] accuracy_result mandelbrot_accuracy( - const std::vector& actual, - const std::vector& expected) - { - using perfect_ref = typename Profile::perfect_ref; - - double worst_bits = std::numeric_limits::infinity(); - double total_bits = 0.0; - std::vector domain_scores; - const std::size_t sample_count = expected.size() * mandelbrot_width * mandelbrot_height; - domain_scores.reserve(sample_count); - - for (std::size_t window = 0; window < expected.size(); ++window) - { - for (std::size_t index = 0; index < mandelbrot_width * mandelbrot_height; ++index) - { - const int actual_iter = actual[window].iterations[index]; - const int expected_iter = expected[window].iterations[index]; - const double bits = actual_iter == expected_iter - ? std::numeric_limits::infinity() - : Profile::matching_bits(perfect_ref{ actual_iter }, perfect_ref{ expected_iter }); - worst_bits = std::min(worst_bits, bits); - total_bits += Profile::finite_for_mean(bits); - domain_scores.push_back(domain_sample_score(bits, Profile::domain_target_bits)); - } - } - - return { - worst_bits, - sample_count == 0 ? 0.0 : total_bits / static_cast(sample_count), - sample_count, - domain_score(std::move(domain_scores)) - }; - } - - template - [[nodiscard]] metrics_record run_mandelbrot_record(bool include_benchmarks) - { - using fltx_type = typename Profile::fltx_type; - using competitor_ref = typename Profile::competitor_ref; - using extra_competitor_ref = typename Profile::extra_competitor_ref; - using perfect_ref = typename Profile::perfect_ref; - - const auto expected = run_mandelbrot_traces( - make_mandelbrot_constant_set()); - const auto fltx = run_mandelbrot_traces( - make_mandelbrot_constant_set()); - const auto competitor = run_mandelbrot_traces( - make_mandelbrot_constant_set()); - const auto extra = run_mandelbrot_traces( - make_mandelbrot_constant_set()); - - metrics_record record{}; - record.suite = { Profile::precision, operation_id{ "mandelbrot", "mandelbrot" }, mixed_domain }; - record.competitor_name = Profile::competitor_name; - record.fltx_accuracy = mandelbrot_accuracy(fltx, expected); - record.competitor_accuracy = mandelbrot_accuracy(competitor, expected); - auto& extra_competitor = record.extra_competitors.emplace_back(); - extra_competitor.name = Profile::extra_competitor_name; - extra_competitor.accuracy = mandelbrot_accuracy(extra, expected); - - if (include_benchmarks) - { - record.fltx_benchmark = benchmark_mandelbrot(); - record.competitor_benchmark = benchmark_mandelbrot(); - extra_competitor.benchmark = benchmark_mandelbrot(); - } - - return record; - } - - template - [[nodiscard]] std::vector collect_records(bool include_benchmarks) - { - std::vector records; - records.reserve(3); - records.push_back(run_mixed_arithmetic_record(include_benchmarks)); - records.push_back(run_affine_record(include_benchmarks)); - records.push_back(run_mandelbrot_record(include_benchmarks)); - return records; - } -} - -#endif diff --git a/tests/metrics/metrics_qdpp.h b/tests/metrics/metrics_qdpp.h deleted file mode 100644 index 04e8dfb..0000000 --- a/tests/metrics/metrics_qdpp.h +++ /dev/null @@ -1,100 +0,0 @@ -#ifndef FLTX_TESTS_METRICS_QDPP_INCLUDED -#define FLTX_TESTS_METRICS_QDPP_INCLUDED - -#include - -#include -#include - -namespace bl::test::metrics::qdpp -{ - [[nodiscard]] inline dd_real make(double x0, double x1) - { - if (x0 == 0.0 && x1 == 0.0) - return dd_real{ std::copysign(0.0, x0), 0.0 }; - return std::isfinite(x0) ? dd_real::add(x0, x1) : dd_real{ x0, x1 }; - } - - [[nodiscard]] inline qd_real make(double x0, double x1, double x2, double x3) - { - if (x0 == 0.0 && x1 == 0.0 && x2 == 0.0 && x3 == 0.0) - return qd_real{ std::copysign(0.0, x0), 0.0, 0.0, 0.0 }; - - qd_real value{ x0, x1, x2, x3 }; - if (std::isfinite(x0)) - value.renorm(); - return value; - } - - [[nodiscard]] inline dd_real cbrt(const dd_real& value) - { - return value < 0.0 ? -::nroot(-value, 3) : ::nroot(value, 3); - } - - [[nodiscard]] inline qd_real cbrt(const qd_real& value) - { - return value < 0.0 ? -::nroot(-value, 3) : ::nroot(value, 3); - } - - [[nodiscard]] inline dd_real trunc(const dd_real& value) - { - return ::aint(value); - } - - [[nodiscard]] inline qd_real trunc(const qd_real& value) - { - return ::aint(value); - } - - [[nodiscard]] inline dd_real nearbyint(const dd_real& value) - { - return ::nint(value); - } - - [[nodiscard]] inline qd_real nearbyint(const qd_real& value) - { - return ::nint(value); - } - - [[nodiscard]] inline dd_real rint(const dd_real& value) - { - return ::nint(value); - } - - [[nodiscard]] inline qd_real rint(const qd_real& value) - { - return ::nint(value); - } - - [[nodiscard]] inline dd_real remainder(const dd_real& x, const dd_real& y) - { - return ::drem(x, y); - } - - [[nodiscard]] inline qd_real remainder(const qd_real& x, const qd_real& y) - { - return ::drem(x, y); - } - - [[nodiscard]] inline dd_real scalbn(const dd_real& value, int exponent) - { - return ::ldexp(value, exponent); - } - - [[nodiscard]] inline qd_real scalbn(const qd_real& value, int exponent) - { - return ::ldexp(value, exponent); - } - - [[nodiscard]] inline dd_real scalbln(const dd_real& value, long exponent) - { - return ::ldexp(value, static_cast(exponent)); - } - - [[nodiscard]] inline qd_real scalbln(const qd_real& value, long exponent) - { - return ::ldexp(value, static_cast(exponent)); - } -} - -#endif diff --git a/tests/metrics/metrics_records.h b/tests/metrics/metrics_records.h deleted file mode 100644 index 3bb72af..0000000 --- a/tests/metrics/metrics_records.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef FLTX_TESTS_METRICS_RECORDS_INCLUDED -#define FLTX_TESTS_METRICS_RECORDS_INCLUDED - -#include -#include -#include -#include -#include -#include - -#include "metrics_types.h" - -namespace bl::test::metrics -{ - enum class special_correctness - { - unavailable, - pass, - fail - }; - - struct accuracy_result - { - double worst_bits = std::numeric_limits::infinity(); - double mean_bits = std::numeric_limits::infinity(); - std::size_t sample_count = 0; - double domain_score = 0.0; - }; - - struct benchmark_result - { - double ns_per_iter = 0.0; - std::size_t iteration_count = 0; - }; - - struct competitor_result - { - std::string_view name; - bool supported = true; - accuracy_result accuracy; - benchmark_result benchmark; - special_correctness special_values = special_correctness::unavailable; - }; - - struct metrics_record - { - suite_id suite; - accuracy_result fltx_accuracy; - special_correctness fltx_special_values = special_correctness::unavailable; - std::string_view competitor_name = "comp"; - bool competitor_supported = true; - accuracy_result competitor_accuracy; - special_correctness competitor_special_values = special_correctness::unavailable; - benchmark_result fltx_benchmark; - benchmark_result competitor_benchmark; - std::vector extra_competitors; - }; - - [[nodiscard]] inline double domain_sample_score(double bits, double ideal_bits) noexcept - { - if (std::isnan(bits)) - return 0.0; - if (std::isinf(bits)) - return bits > 0.0 ? 1.0 : 0.0; - if (ideal_bits <= 0.0) - return bits > 0.0 ? 1.0 : 0.0; - - return std::clamp(bits / ideal_bits, 0.0, 1.0); - } - - [[nodiscard]] inline double domain_score(std::vector sample_scores) - { - if (sample_scores.empty()) - return 0.0; - - double total = 0.0; - double worst = 1.0; - for (double score : sample_scores) - { - total += score; - worst = std::min(worst, score); - } - - std::sort(sample_scores.begin(), sample_scores.end()); - const std::size_t lower_tail_index = - std::min( - sample_scores.size() - 1, - static_cast(static_cast(sample_scores.size() - 1) * 0.01)); - const double mean = total / static_cast(sample_scores.size()); - const double lower_tail = sample_scores[lower_tail_index]; - - return 100.0 * (mean * 0.50 + lower_tail * 0.30 + worst * 0.20); - } -} - -#endif diff --git a/tests/metrics/metrics_reference.h b/tests/metrics/metrics_reference.h deleted file mode 100644 index 8b75f0a..0000000 --- a/tests/metrics/metrics_reference.h +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef FLTX_TESTS_METRICS_REFERENCE_INCLUDED -#define FLTX_TESTS_METRICS_REFERENCE_INCLUDED - -#include -#include - -#include -#include - -#include -#include - -#include -#include - -#include "metrics_types.h" - -namespace bl::test::metrics -{ - template - struct reference_types; - - template<> - struct reference_types - { - static constexpr int oracle_digits10 = 200; - static constexpr int qdpp_competitor_digits10 = 31; - static constexpr int extra_competitor_digits10 = qdpp_competitor_digits10; - - using fltx_type = bl::f128; - using perfect_ref = boost::multiprecision::number< - boost::multiprecision::mpfr_float_backend, - boost::multiprecision::et_off>; - - using competitor_ref = boost::multiprecision::cpp_double_double; - using extra_competitor_ref = dd_real; - - static constexpr precision_type precision = precision_type::f128; - static constexpr std::string_view precision_name = "f128"; - static constexpr std::string_view competitor_name = "boost::multiprecision::cpp_double_double"; - static constexpr std::string_view extra_competitor_name = "qdpp (dd_real)"; - }; - - template<> - struct reference_types - { - static constexpr int oracle_digits10 = 1000; - static constexpr int competitor_digits10 = 64; - static constexpr int qdpp_competitor_digits10 = 62; - static constexpr int extra_competitor_digits10 = qdpp_competitor_digits10; - - using fltx_type = bl::f256; - using perfect_ref = boost::multiprecision::number< - boost::multiprecision::mpfr_float_backend, - boost::multiprecision::et_off>; - - using competitor_ref = boost::multiprecision::number, boost::multiprecision::et_off>; - using extra_competitor_ref = qd_real; - - static constexpr precision_type precision = precision_type::f256; - static constexpr std::string_view precision_name = "f256"; - static constexpr std::string_view competitor_name = "boost::multiprecision::mpfr_float_backend<64>"; - static constexpr std::string_view extra_competitor_name = "qdpp (qd_real)"; - }; -} - -#endif diff --git a/tests/metrics/metrics_report.h b/tests/metrics/metrics_report.h deleted file mode 100644 index fdfd47c..0000000 --- a/tests/metrics/metrics_report.h +++ /dev/null @@ -1,2378 +0,0 @@ -#ifndef FLTX_TESTS_METRICS_REPORT_INCLUDED -#define FLTX_TESTS_METRICS_REPORT_INCLUDED - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(__EMSCRIPTEN__) -#include -#endif - -#include "metrics_records.h" - -namespace bl::test::metrics -{ - [[nodiscard]] inline const char* to_string(precision_type value) noexcept - { - switch (value) - { - case precision_type::f128: return "f128"; - case precision_type::f256: return "f256"; - } - return "unknown"; - } - - [[nodiscard]] inline const char* metrics_fltx_backend_name(precision_type value) noexcept - { - switch (value) - { - case precision_type::f128: return "bl::f128"; - case precision_type::f256: return "bl::f256"; - } - return "fltx"; - } - - [[nodiscard]] inline const char* to_string(domain_role value) noexcept - { - switch (value) - { - case domain_role::primary: return "primary"; - case domain_role::stress: return "stress"; - } - return "unknown"; - } - - [[nodiscard]] inline std::string_view metrics_compiler_name() noexcept - { - #if defined(__EMSCRIPTEN__) && defined(FLTX_BENCH_RUNTIME_CHROME) - return "Chrome"; - #elif defined(__EMSCRIPTEN__) && defined(FLTX_BENCH_RUNTIME_BROWSER) - return "Chrome"; - #elif defined(__EMSCRIPTEN__) && defined(FLTX_BENCH_RUNTIME_NODE) - return "Nodejs"; - #elif defined(__EMSCRIPTEN__) - return "Wasm32"; - #elif defined(__MINGW32__) || defined(__MINGW64__) - return "MinGW"; - #elif defined(__clang__) && defined(__apple_build_version__) - return "AppleClang"; - #elif defined(__clang__) - return "Clang"; - #elif defined(_MSC_VER) - return "MSVC"; - #elif defined(__GNUC__) - return "GCC"; - #else - return "unknown"; - #endif - } - - [[nodiscard]] inline std::string_view metrics_os_name() noexcept - { - #if defined(__EMSCRIPTEN__) - return "wasm32"; - #elif defined(_WIN32) - return "windows"; - #elif defined(__APPLE__) && defined(__MACH__) - return "macOS"; - #elif defined(__linux__) - return "linux"; - #elif defined(__unix__) - return "unix"; - #else - return "unknown"; - #endif - } - - [[nodiscard]] inline std::string metrics_output_path( - std::string_view precision_name, - std::string_view suffix, - std::string_view extension) - { - #ifdef FLTX_METRICS_OUTPUT_ROOT - std::filesystem::path output_path = std::filesystem::path(FLTX_METRICS_OUTPUT_ROOT); - #else - std::filesystem::path output_path = std::filesystem::path("res") / "metrics"; - #endif - output_path /= std::string(metrics_os_name()); - - std::string filename = std::string(metrics_compiler_name()) + "_" + std::string(precision_name); - if (!suffix.empty()) - { - filename += "_"; - filename += suffix; - } - filename += "."; - filename += extension; - - output_path /= filename; - return output_path.string(); - } - - [[nodiscard]] inline std::string metrics_native_arithmetic_group(precision_type precision) - { - const char* name = to_string(precision); - return std::string(name) + " <-> " + name; - } - - [[nodiscard]] inline bool metrics_operation_is( - std::string_view operation, - std::initializer_list names) noexcept - { - for (std::string_view name : names) - { - if (operation == name) - return true; - } - return false; - } - - [[nodiscard]] inline std::string metrics_csv_group(const metrics_record& record) - { - const std::string_view operation = record.suite.operation.name; - if (record.suite.domain.role == domain_role::stress) - return "Mixed Workloads"; - if (metrics_operation_is(operation, { "add", "subtract", "multiply", "divide" })) - return metrics_native_arithmetic_group(record.suite.precision); - if (metrics_operation_is(operation, { - "floor", "ceil", "trunc", "round", "nearbyint", "rint", - "lround", "llround", "lrint", "llrint" })) - return "Rounding"; - if (metrics_operation_is(operation, { "fmod", "remainder", "remquo" })) - return "Remainders"; - if (metrics_operation_is(operation, { - "fabs", "fma", "fmin", "fmax", "fdim", "copysign", - "ldexp", "scalbn", "scalbln", "frexp", "modf", "ilogb", - "logb", "nextafter", "nexttoward" })) - return "Floating-point utilities"; - if (metrics_operation_is(operation, { "sqrt", "cbrt", "hypot", "pow" })) - return "Roots & powers"; - if (metrics_operation_is(operation, { "exp", "exp2", "expm1" })) - return "Exponentials"; - if (metrics_operation_is(operation, { "log", "log2", "log10", "log1p" })) - return "Logarithms"; - if (metrics_operation_is(operation, { "sin", "cos", "tan", "asin", "acos", "atan", "atan2" })) - return "Trigonometric"; - if (metrics_operation_is(operation, { "sinh", "cosh", "tanh" })) - return "Hyperbolic"; - if (metrics_operation_is(operation, { "asinh", "acosh", "atanh" })) - return "Inverse hyperbolic"; - if (metrics_operation_is(operation, { "erfc", "erf", "tgamma", "lgamma" })) - return "Special functions"; - if (metrics_operation_is(operation, { - "operator==", "operator!=", "operator<", "operator>", - "operator<=", "operator>=" })) - return "Comparisons"; - return "Primary"; - } - - [[nodiscard]] inline std::string metrics_csv_label(const metrics_record& record) - { - const std::string_view operation = record.suite.operation.name; - if (operation == "fabs") - return "abs"; - if (operation == "nexttoward") - return "nexttoward(type)"; - if (record.suite.domain.role == domain_role::stress) - { - if (operation == "affine transform") - return "affine trig transform"; - if (operation == "mandelbrot") - return "mandelbrot kernel"; - } - return std::string(operation); - } - - [[nodiscard]] inline int metrics_csv_group_order(const metrics_record& record) - { - const std::string group = metrics_csv_group(record); - if (group == metrics_native_arithmetic_group(record.suite.precision)) return 0; - if (group == "Mixed Workloads") return 1; - if (group == "Rounding") return 2; - if (group == "Remainders") return 3; - if (group == "Floating-point utilities") return 4; - if (group == "Roots & powers") return 5; - if (group == "Exponentials") return 6; - if (group == "Logarithms") return 7; - if (group == "Trigonometric") return 8; - if (group == "Hyperbolic") return 9; - if (group == "Inverse hyperbolic") return 10; - if (group == "Special functions") return 11; - if (group == "Comparisons") return 12; - return 100; - } - - [[nodiscard]] inline int metrics_csv_row_order(const metrics_record& record) - { - const std::string_view operation = record.suite.operation.name; - if (operation == "add") return 0; - if (operation == "subtract") return 1; - if (operation == "multiply") return 2; - if (operation == "divide") return 3; - if (operation == "affine transform") return 0; - if (operation == "mandelbrot") return 1; - if (operation == "mixed arithmetic") return 2; - if (operation == "floor") return 0; - if (operation == "ceil") return 1; - if (operation == "trunc") return 2; - if (operation == "round") return 3; - if (operation == "nearbyint") return 4; - if (operation == "rint") return 5; - if (operation == "lround") return 6; - if (operation == "llround") return 7; - if (operation == "lrint") return 8; - if (operation == "llrint") return 9; - if (operation == "fmod") return 0; - if (operation == "remainder") return 1; - if (operation == "remquo") return 2; - if (operation == "fabs") return 0; - if (operation == "fma") return 1; - if (operation == "fmin") return 2; - if (operation == "fmax") return 3; - if (operation == "fdim") return 4; - if (operation == "copysign") return 5; - if (operation == "ldexp") return 6; - if (operation == "scalbn") return 7; - if (operation == "scalbln") return 8; - if (operation == "frexp") return 9; - if (operation == "modf") return 10; - if (operation == "ilogb") return 11; - if (operation == "logb") return 12; - if (operation == "nextafter") return 13; - if (operation == "nexttoward") return 14; - if (operation == "sqrt") return 0; - if (operation == "cbrt") return 1; - if (operation == "hypot") return 2; - if (operation == "pow") return 3; - if (operation == "exp") return 0; - if (operation == "exp2") return 1; - if (operation == "expm1") return 2; - if (operation == "log") return 0; - if (operation == "log2") return 1; - if (operation == "log10") return 2; - if (operation == "log1p") return 3; - if (operation == "sin") return 0; - if (operation == "cos") return 1; - if (operation == "tan") return 2; - if (operation == "asin") return 3; - if (operation == "acos") return 4; - if (operation == "atan") return 5; - if (operation == "atan2") return 6; - if (operation == "sinh") return 0; - if (operation == "cosh") return 1; - if (operation == "tanh") return 2; - if (operation == "asinh") return 0; - if (operation == "acosh") return 1; - if (operation == "atanh") return 2; - if (operation == "erfc") return 0; - if (operation == "erf") return 1; - if (operation == "tgamma") return 2; - if (operation == "lgamma") return 3; - if (operation == "operator==") return 0; - if (operation == "operator!=") return 1; - if (operation == "operator<") return 2; - if (operation == "operator>") return 3; - if (operation == "operator<=") return 4; - if (operation == "operator>=") return 5; - return 1000; - } - - [[nodiscard]] inline bool metrics_csv_record_less( - const metrics_record& lhs, - const metrics_record& rhs) - { - if (metrics_csv_group_order(lhs) != metrics_csv_group_order(rhs)) - return metrics_csv_group_order(lhs) < metrics_csv_group_order(rhs); - if (metrics_csv_row_order(lhs) != metrics_csv_row_order(rhs)) - return metrics_csv_row_order(lhs) < metrics_csv_row_order(rhs); - return metrics_csv_label(lhs) < metrics_csv_label(rhs); - } - - inline void write_csv_text(std::ostream& out, std::string_view text) - { - const bool needs_quotes = text.find_first_of(",\"\r\n") != std::string_view::npos; - if (!needs_quotes) - { - out << text; - return; - } - - out << '"'; - for (char ch : text) - { - if (ch == '"') - out << "\"\""; - else - out << ch; - } - out << '"'; - } - - [[nodiscard]] inline double precision_gap_bits(const metrics_record& record) noexcept - { - const bool fltx_exact = std::isinf(record.fltx_accuracy.worst_bits); - const bool competitor_exact = std::isinf(record.competitor_accuracy.worst_bits); - if (fltx_exact && competitor_exact) - return 0.0; - if (fltx_exact) - return std::numeric_limits::infinity(); - if (competitor_exact) - return -std::numeric_limits::infinity(); - return record.fltx_accuracy.worst_bits - record.competitor_accuracy.worst_bits; - } - - [[nodiscard]] inline double precision_gap_bits( - const accuracy_result& fltx_accuracy, - const accuracy_result& competitor_accuracy) noexcept - { - const bool fltx_exact = std::isinf(fltx_accuracy.worst_bits); - const bool competitor_exact = std::isinf(competitor_accuracy.worst_bits); - if (fltx_exact && competitor_exact) - return 0.0; - if (fltx_exact) - return std::numeric_limits::infinity(); - if (competitor_exact) - return -std::numeric_limits::infinity(); - return fltx_accuracy.worst_bits - competitor_accuracy.worst_bits; - } - - [[nodiscard]] inline double precision_advantage_bits( - double fltx_bits, - double competitor_bits) noexcept - { - const bool fltx_exact = std::isinf(fltx_bits); - const bool competitor_exact = std::isinf(competitor_bits); - if (fltx_exact && competitor_exact) - return 0.0; - if (fltx_exact) - return std::numeric_limits::infinity(); - if (competitor_exact) - return -std::numeric_limits::infinity(); - return fltx_bits - competitor_bits; - } - - [[nodiscard]] inline bool accuracy_is_exact(const accuracy_result& accuracy) noexcept - { - return std::isinf(accuracy.worst_bits) && accuracy.worst_bits > 0.0; - } - - [[nodiscard]] inline double accuracy_mean_comparison_bits(const accuracy_result& accuracy) noexcept - { - return accuracy_is_exact(accuracy) - ? std::numeric_limits::infinity() - : accuracy.mean_bits; - } - - [[nodiscard]] inline double finite_display_bits(double bits, double exact_bits) noexcept - { - if (!std::isinf(bits) || !std::isfinite(exact_bits)) - return bits; - return bits > 0.0 ? exact_bits : -exact_bits; - } - - [[nodiscard]] inline double precision_worst_advantage_bits( - const accuracy_result& fltx_accuracy, - const accuracy_result& competitor_accuracy) noexcept - { - return precision_advantage_bits( - finite_display_bits(fltx_accuracy.worst_bits, fltx_accuracy.mean_bits), - finite_display_bits(competitor_accuracy.worst_bits, competitor_accuracy.mean_bits)); - } - - [[nodiscard]] inline double precision_mean_advantage_bits( - const accuracy_result& fltx_accuracy, - const accuracy_result& competitor_accuracy) noexcept - { - return precision_advantage_bits( - accuracy_mean_comparison_bits(fltx_accuracy), - accuracy_mean_comparison_bits(competitor_accuracy)); - } - - [[nodiscard]] inline double domain_gap( - const accuracy_result& fltx_accuracy, - const accuracy_result& competitor_accuracy) noexcept - { - return fltx_accuracy.domain_score - competitor_accuracy.domain_score; - } - - [[nodiscard]] inline bool has_accuracy_data(const accuracy_result& accuracy) noexcept - { - return accuracy.sample_count > 0; - } - - [[nodiscard]] inline bool has_benchmark_data(const benchmark_result& benchmark) noexcept - { - return benchmark.iteration_count > 0 && benchmark.ns_per_iter > 0.0; - } - - [[nodiscard]] inline double speed_ratio(const metrics_record& record) noexcept - { - return record.competitor_supported && - has_benchmark_data(record.fltx_benchmark) && - has_benchmark_data(record.competitor_benchmark) - ? record.competitor_benchmark.ns_per_iter / record.fltx_benchmark.ns_per_iter - : 0.0; - } - - [[nodiscard]] inline double speed_ratio( - const benchmark_result& fltx_benchmark, - const benchmark_result& competitor_benchmark) noexcept - { - return has_benchmark_data(fltx_benchmark) && has_benchmark_data(competitor_benchmark) - ? competitor_benchmark.ns_per_iter / fltx_benchmark.ns_per_iter - : 0.0; - } - - [[nodiscard]] inline std::vector collect_extra_competitor_names( - const std::vector& records) - { - std::vector names; - for (const metrics_record& record : records) - { - for (const competitor_result& competitor : record.extra_competitors) - { - if (std::find(names.begin(), names.end(), competitor.name) == names.end()) - names.push_back(competitor.name); - } - } - return names; - } - - [[nodiscard]] inline const competitor_result* find_extra_competitor( - const metrics_record& record, - std::string_view name) noexcept - { - for (const competitor_result& competitor : record.extra_competitors) - { - if (competitor.name == name) - return &competitor; - } - return nullptr; - } - - struct preferred_reference_result - { - std::string_view name; - const accuracy_result* accuracy = nullptr; - const benchmark_result* benchmark = nullptr; - bool supported = false; - }; - - struct preferred_reference_candidate - { - std::string_view name; - const accuracy_result* accuracy = nullptr; - const benchmark_result* benchmark = nullptr; - special_correctness special_values = special_correctness::unavailable; - bool supported = false; - }; - - [[nodiscard]] inline double precision_target_bits(precision_type precision) noexcept - { - switch (precision) - { - case precision_type::f128: return 106.0; - case precision_type::f256: return 212.0; - } - return 0.0; - } - - [[nodiscard]] inline int special_correctness_rank(special_correctness value) noexcept - { - switch (value) - { - case special_correctness::pass: return 2; - case special_correctness::unavailable: return 1; - case special_correctness::fail: return 0; - } - return 0; - } - - [[nodiscard]] inline bool benchmark_is_faster( - const benchmark_result& candidate, - const benchmark_result& current) noexcept - { - if (candidate.ns_per_iter <= 0.0) - return false; - if (current.ns_per_iter <= 0.0) - return true; - return candidate.ns_per_iter < current.ns_per_iter; - } - - [[nodiscard]] inline bool benchmark_is_materially_faster( - const benchmark_result& candidate, - const benchmark_result& current) noexcept - { - if (candidate.ns_per_iter <= 0.0) - return false; - if (current.ns_per_iter <= 0.0) - return true; - return candidate.ns_per_iter < current.ns_per_iter * 0.97; - } - - [[nodiscard]] inline bool operation_uses_discrete_accuracy_gate( - std::string_view operation) noexcept - { - return operation == "floor" || - operation == "ceil" || - operation == "trunc" || - operation == "round" || - operation == "nearbyint" || - operation == "rint" || - operation == "lround" || - operation == "llround" || - operation == "lrint" || - operation == "llrint"; - } - - [[nodiscard]] inline bool reference_has_stronger_result( - const preferred_reference_candidate& candidate, - const preferred_reference_candidate& current) noexcept - { - const double candidate_mean = accuracy_mean_comparison_bits(*candidate.accuracy); - const double current_mean = accuracy_mean_comparison_bits(*current.accuracy); - if (candidate_mean != current_mean) - return candidate_mean > current_mean; - if (candidate.accuracy->worst_bits != current.accuracy->worst_bits) - return candidate.accuracy->worst_bits > current.accuracy->worst_bits; - if (candidate.accuracy->domain_score != current.accuracy->domain_score) - return candidate.accuracy->domain_score > current.accuracy->domain_score; - - const int candidate_special_rank = special_correctness_rank(candidate.special_values); - const int current_special_rank = special_correctness_rank(current.special_values); - if (candidate_special_rank != current_special_rank) - return candidate_special_rank > current_special_rank; - - return benchmark_is_faster(*candidate.benchmark, *current.benchmark); - } - - [[nodiscard]] inline bool reference_is_quality_comparable( - std::string_view operation, - precision_type precision, - domain_role role, - const preferred_reference_candidate& candidate, - const preferred_reference_candidate& strongest) noexcept - { - const double target_bits = precision_target_bits(precision); - - if (operation_uses_discrete_accuracy_gate(operation)) - return candidate.accuracy->worst_bits >= target_bits - 4.0; - - if (role == domain_role::stress) - { - constexpr double domain_score_tolerance = 3.0; - constexpr double worst_bits_tolerance = 4.0; - return candidate.accuracy->domain_score + domain_score_tolerance >= strongest.accuracy->domain_score && - candidate.accuracy->worst_bits + worst_bits_tolerance >= strongest.accuracy->worst_bits; - } - - constexpr double mean_bits_tolerance = 4.0; - constexpr double primary_domain_floor = 70.0; - const double candidate_mean = accuracy_mean_comparison_bits(*candidate.accuracy); - const double strongest_mean = accuracy_mean_comparison_bits(*strongest.accuracy); - const bool close_to_strongest_mean = - candidate_mean + mean_bits_tolerance >= strongest_mean; - const bool precision_adequate_for_primary = - candidate_mean >= target_bits && - candidate.accuracy->domain_score >= primary_domain_floor; - - return close_to_strongest_mean || precision_adequate_for_primary; - } - - [[nodiscard]] inline preferred_reference_result preferred_available_reference( - const metrics_record& record) noexcept - { - preferred_reference_candidate strongest{}; - bool has_strongest = false; - - const auto consider_strongest = [&](const preferred_reference_candidate& candidate) - { - if (!candidate.supported || - candidate.accuracy == nullptr || - candidate.benchmark == nullptr || - !has_benchmark_data(*candidate.benchmark)) - { - return; - } - - if (!has_strongest || reference_has_stronger_result(candidate, strongest)) - { - strongest = candidate; - has_strongest = true; - } - }; - - const auto consider_all = [&](const auto& consider) - { - consider({ - record.competitor_name, - &record.competitor_accuracy, - &record.competitor_benchmark, - record.competitor_special_values, - record.competitor_supported - }); - - for (const competitor_result& competitor : record.extra_competitors) - { - consider({ - competitor.name, - &competitor.accuracy, - &competitor.benchmark, - competitor.special_values, - competitor.supported - }); - } - }; - - consider_all(consider_strongest); - - if (!has_strongest) - return {}; - - preferred_reference_candidate best = strongest; - const auto consider_preferred = [&](const preferred_reference_candidate& candidate) - { - if (!candidate.supported || - candidate.accuracy == nullptr || - candidate.benchmark == nullptr || - !has_benchmark_data(*candidate.benchmark)) - { - return; - } - if (!reference_is_quality_comparable( - record.suite.operation.name, - record.suite.precision, - record.suite.domain.role, - candidate, - strongest)) - { - return; - } - - if (benchmark_is_materially_faster(*candidate.benchmark, *best.benchmark) || - (!benchmark_is_materially_faster(*best.benchmark, *candidate.benchmark) && - reference_has_stronger_result(candidate, best))) - { - best = candidate; - } - }; - - consider_all(consider_preferred); - - return { best.name, best.accuracy, best.benchmark, true }; - } - - [[nodiscard]] inline std::string format_metrics_number(double value, int precision) - { - if (std::isinf(value)) - return value > 0.0 ? "exact" : "-exact"; - if (std::isnan(value)) - return "nan"; - - std::ostringstream out; - out << std::fixed << std::setprecision(precision) << value; - return out.str(); - } - - [[nodiscard]] inline std::string format_metrics_benchmark(double value) - { - if (value <= 0.0) - return "-"; - return format_metrics_number(value, 2); - } - - [[nodiscard]] inline std::string format_metrics_ratio(double value) - { - if (value <= 0.0) - return "-"; - return format_metrics_number(value, 2) + "x"; - } - - inline void write_csv_metric_number(std::ostream& out, double value) - { - if (std::isinf(value)) - out << (value > 0.0 ? "exact" : "-exact"); - else if (std::isnan(value)) - out << "nan"; - else - out << value; - } - - [[nodiscard]] inline std::string_view format_special_correctness(special_correctness value) noexcept - { - switch (value) - { - case special_correctness::pass: return "Yes"; - case special_correctness::fail: return "No"; - case special_correctness::unavailable: return "-"; - } - return "-"; - } - - [[nodiscard]] inline std::string metrics_comparison_name(std::string_view name) - { - if (name.find("cpp_double_double") != std::string_view::npos) - return "cppdd"; - if (name.find("mpfr_float_backend<64>") != std::string_view::npos) - return "mpfr<64>"; - if (name.find("dd_real") != std::string_view::npos) - return "dd_real"; - if (name.find("qd_real") != std::string_view::npos) - return "qd_real"; - if (name.size() > 14) - return std::string(name.substr(0, 14)); - return std::string(name); - } - - struct metrics_console_report_summary - { - bool has_records = false; - bool has_benchmarks = false; - double average_precision_samples = 0.0; - double average_benchmark_iterations = 0.0; - }; - - struct metrics_console_column_visibility - { - bool accuracy = true; - bool domain = true; - bool benchmark = true; - bool special = true; - - [[nodiscard]] bool has_raw_metric() const noexcept - { - return accuracy || domain || benchmark || special; - } - - [[nodiscard]] bool has_comparison_metric() const noexcept - { - return accuracy || domain || benchmark; - } - - [[nodiscard]] bool has_preferred_reference() const noexcept - { - return benchmark; - } - }; - - [[nodiscard]] inline std::string format_metrics_count(double value) - { - std::ostringstream out; - out << std::fixed << std::setprecision(0) << value; - return out.str(); - } - - [[nodiscard]] inline metrics_console_report_summary summarize_console_report( - const std::vector& records) - { - metrics_console_report_summary summary{}; - summary.has_records = !records.empty(); - if (records.empty()) - return summary; - - double precision_sample_total = 0.0; - double benchmark_iteration_total = 0.0; - std::size_t benchmark_record_count = 0; - - for (const metrics_record& record : records) - { - precision_sample_total += static_cast(record.fltx_accuracy.sample_count); - if (record.fltx_benchmark.iteration_count > 0) - { - benchmark_iteration_total += static_cast(record.fltx_benchmark.iteration_count); - ++benchmark_record_count; - } - } - - summary.average_precision_samples = - precision_sample_total / static_cast(records.size()); - if (benchmark_record_count > 0) - { - summary.has_benchmarks = true; - summary.average_benchmark_iterations = - benchmark_iteration_total / static_cast(benchmark_record_count); - } - return summary; - } - - class metrics_console_report_writer - { - public: - metrics_console_report_writer( - std::ostream& out, - std::string_view title, - std::string_view primary_competitor_name = "comp", - std::vector extra_competitor_names = {}, - std::string_view fltx_backend_name = "fltx", - int operation_column_width_value = 10, - double accuracy_equal_tolerance_bits = 0.005, - double speed_equal_tolerance_ratio = 0.01, - metrics_console_report_summary summary = {}, - metrics_console_column_visibility visible_columns = {}) - : stream(out), - primary_competitor(primary_competitor_name), - extra_competitors(std::move(extra_competitor_names)), - fltx_backend(fltx_backend_name), - operation_column_width(std::max(operation_column_width_value, default_operation_width)), - accuracy_tolerance(accuracy_equal_tolerance_bits), - speed_tolerance(speed_equal_tolerance_ratio), - columns(visible_columns.has_raw_metric() ? visible_columns : metrics_console_column_visibility{}) - { - state.copyfmt(stream); - write_header(title, summary); - } - - metrics_console_report_writer(const metrics_console_report_writer&) = delete; - metrics_console_report_writer& operator=(const metrics_console_report_writer&) = delete; - - ~metrics_console_report_writer() - { - stream.copyfmt(state); - } - - void write_record(const metrics_record& record) - { - begin_report_line(); - write_left_cell(record.suite.operation.name, operation_column_width, metadata_background, {}, true); - write_raw_backend( - record.competitor_accuracy, - record.competitor_benchmark, - record.competitor_special_values, - record.competitor_supported, - primary_competitor_background, - true); - for (std::string_view competitor_name : extra_competitors) - { - const competitor_result* competitor = find_extra_competitor(record, competitor_name); - if (competitor == nullptr) - { - write_empty_raw_backend(extra_competitor_background, true); - continue; - } - - write_raw_backend( - competitor->accuracy, - competitor->benchmark, - competitor->special_values, - competitor->supported, - extra_competitor_background, - true); - } - write_raw_backend( - record.fltx_accuracy, - record.fltx_benchmark, - record.fltx_special_values, - true, - fltx_background, - true); - write_comparison( - record.fltx_accuracy, - record.fltx_benchmark, - record.competitor_accuracy, - record.competitor_benchmark, - record.competitor_supported, - fltx_background, - true); - for (std::string_view competitor_name : extra_competitors) - { - const competitor_result* competitor = find_extra_competitor(record, competitor_name); - if (competitor == nullptr) - { - write_empty_comparison(fltx_background, true); - continue; - } - - write_comparison( - record.fltx_accuracy, - record.fltx_benchmark, - competitor->accuracy, - competitor->benchmark, - competitor->supported, - fltx_background, - true); - } - - if (columns.has_preferred_reference()) - write_preferred_reference_comparison(record, fltx_background, true); - write_section_boundary(); - end_report_line(); - stream << std::flush; - } - - private: - static constexpr int default_operation_width = 10; - static constexpr int bits_width = 6; - static constexpr int domain_width = 6; - static constexpr int benchmark_ns_width = 8; - static constexpr int benchmark_speed_width = 6; - static constexpr int special_width = 4; - static constexpr int pair_group_width = bits_width * 2 + 1; - static constexpr int domain_single_group_width = domain_width; - static constexpr int benchmark_single_group_width = benchmark_ns_width; - static constexpr int special_single_group_width = special_width; - static constexpr int raw_backend_group_width = - pair_group_width + domain_single_group_width + benchmark_single_group_width + - special_single_group_width + 9; - static constexpr int comparison_bits_group_width = pair_group_width; - static constexpr int comparison_group_width = - comparison_bits_group_width + domain_single_group_width + benchmark_speed_width + 4; - static constexpr int preferred_reference_width = 9; - static constexpr int preferred_reference_group_width = - preferred_reference_width + comparison_group_width + 3; - static constexpr std::string_view red = "\033[31m"; - static constexpr std::string_view green = "\033[32m"; - static constexpr std::string_view reset_foreground = "\033[39m"; - static constexpr std::string_view reset_background = "\033[49m"; - static constexpr std::string_view reset_all = "\033[0m"; - static constexpr std::string_view clear_to_end_of_line = "\033[K"; - static constexpr std::string_view metadata_background = "\033[48;2;24;25;28m"; - static constexpr std::string_view fltx_background = "\033[48;2;17;31;48m"; - static constexpr std::string_view primary_competitor_background = "\033[48;2;37;30;50m"; - static constexpr std::string_view extra_competitor_background = "\033[48;2;31;41;52m"; - - std::ostream& stream; - std::ios state{ nullptr }; - std::string_view primary_competitor; - std::vector extra_competitors; - std::string_view fltx_backend; - int operation_column_width; - double accuracy_tolerance; - double speed_tolerance; - metrics_console_column_visibility columns; - - void write_repeated(char value, int count) - { - stream << std::string(static_cast(std::max(count, 0)), value); - } - - void write_background_repeated(std::string_view background, char value, int count) - { - if (!background.empty()) - stream << background; - write_repeated(value, count); - if (!background.empty()) - stream << reset_all; - } - - void write_separator(std::string_view background = {}) - { - if (!background.empty()) - stream << background; - stream << '|'; - if (!background.empty()) - stream << reset_all; - } - - void write_section_boundary() - { - stream << ' '; - } - - void write_border_join(std::string_view background = {}) - { - if (!background.empty()) - stream << background; - stream << '+'; - if (!background.empty()) - stream << reset_all; - } - - void end_report_line() - { - stream << reset_all << reset_background << clear_to_end_of_line << '\n'; - } - - void begin_report_line() - { - stream << reset_all; - } - - [[nodiscard]] static std::string centered(std::string_view text, int width) - { - if (static_cast(text.size()) >= width) - return std::string(text.substr(0, static_cast(width))); - - const int total_padding = width - static_cast(text.size()); - const int left_padding = total_padding / 2; - const int right_padding = total_padding - left_padding; - return std::string(static_cast(left_padding), ' ') + - std::string(text) + - std::string(static_cast(right_padding), ' '); - } - - [[nodiscard]] static int regular_group_width(std::initializer_list widths) noexcept - { - int total = 0; - int count = 0; - for (const int width : widths) - { - if (width <= 0) - continue; - total += width; - ++count; - } - return count == 0 ? 0 : total + (count - 1) * 3; - } - - [[nodiscard]] int raw_backend_visible_widths() const noexcept - { - return regular_group_width({ - columns.accuracy ? pair_group_width : 0, - columns.domain ? domain_single_group_width : 0, - columns.benchmark ? benchmark_single_group_width : 0, - columns.special ? special_single_group_width : 0 - }); - } - - [[nodiscard]] int comparison_visible_width() const noexcept - { - if (columns.accuracy) - { - int width = pair_group_width - 2; - if (columns.domain) - width += domain_single_group_width + 3; - if (columns.benchmark) - width += comparison_speed_visible_width() + 3; - return width; - } - - return regular_group_width({ - columns.domain ? domain_single_group_width : 0, - columns.benchmark ? comparison_speed_visible_width() : 0 - }); - } - - [[nodiscard]] int preferred_reference_visible_width() const noexcept - { - return columns.has_preferred_reference() - ? preferred_reference_width + comparison_visible_width() + 3 - : 0; - } - - [[nodiscard]] int comparison_speed_visible_width() const noexcept - { - return columns.accuracy || columns.domain ? benchmark_speed_width : 10; - } - - void write_regular_border_group( - std::string_view background, - std::initializer_list widths) - { - bool first = true; - write_section_boundary(); - for (const int width : widths) - { - if (width <= 0) - continue; - if (!first) - write_border_join(background); - write_background_repeated(background, '-', width + 2); - first = false; - } - } - - void write_raw_backend_border(std::string_view background) - { - write_regular_border_group( - background, - { - columns.accuracy ? pair_group_width : 0, - columns.domain ? domain_single_group_width : 0, - columns.benchmark ? benchmark_single_group_width : 0, - columns.special ? special_single_group_width : 0 - }); - } - - void write_comparison_border(std::string_view background) - { - if (columns.accuracy) - { - write_section_boundary(); - write_background_repeated(background, '-', comparison_bits_group_width); - if (columns.domain) - { - write_border_join(background); - write_background_repeated(background, '-', domain_single_group_width + 2); - } - if (columns.benchmark) - { - write_border_join(background); - write_background_repeated(background, '-', comparison_speed_visible_width() + 2); - } - return; - } - - write_regular_border_group( - background, - { - columns.domain ? domain_single_group_width : 0, - columns.benchmark ? comparison_speed_visible_width() : 0 - }); - } - - void write_preferred_reference_border(std::string_view background) - { - if (!columns.has_preferred_reference()) - return; - - write_regular_border_group(background, { preferred_reference_width }); - write_border_join(background); - if (columns.accuracy) - { - write_background_repeated(background, '-', comparison_bits_group_width); - if (columns.domain) - { - write_border_join(background); - write_background_repeated(background, '-', domain_single_group_width + 2); - } - write_border_join(background); - write_background_repeated(background, '-', comparison_speed_visible_width() + 2); - return; - } - - if (columns.domain) - { - write_background_repeated(background, '-', domain_single_group_width + 2); - write_border_join(background); - } - write_background_repeated(background, '-', comparison_speed_visible_width() + 2); - } - - void write_detail_border() - { - begin_report_line(); - write_section_boundary(); - write_background_repeated(metadata_background, '-', operation_column_width + 2); - write_raw_backend_border(primary_competitor_background); - for (std::size_t index = 0; index < extra_competitors.size(); ++index) - write_raw_backend_border(extra_competitor_background); - write_raw_backend_border(fltx_background); - if (columns.has_comparison_metric()) - { - write_comparison_border(fltx_background); - for (std::size_t index = 0; index < extra_competitors.size(); ++index) - write_comparison_border(fltx_background); - } - write_preferred_reference_border(fltx_background); - write_section_boundary(); - end_report_line(); - } - - void begin_cell( - std::string_view background, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - if (leading_section_boundary) - write_section_boundary(); - else - write_separator(leading_border_background); - if (!background.empty()) - stream << background; - stream << ' '; - } - - void end_cell(std::string_view background) - { - stream << ' '; - if (!background.empty()) - stream << reset_all; - } - - void begin_tight_cell( - std::string_view background, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - if (leading_section_boundary) - write_section_boundary(); - else - write_separator(leading_border_background); - if (!background.empty()) - stream << background; - } - - void end_tight_cell(std::string_view background) - { - if (!background.empty()) - stream << reset_all; - } - - void write_left_cell( - std::string_view text, - int width, - std::string_view background = {}, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_cell(background, leading_border_background, leading_section_boundary); - stream << std::left << std::setw(width) << text << std::right; - end_cell(background); - } - - void write_right_cell( - std::string_view text, - int width, - std::string_view background = {}, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_cell(background, leading_border_background, leading_section_boundary); - stream << std::right << std::setw(width) << text; - end_cell(background); - } - - void write_center_cell( - std::string_view text, - int width, - std::string_view background = {}, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_cell(background, leading_border_background, leading_section_boundary); - stream << centered(text, width); - end_cell(background); - } - - void write_tight_center_cell( - std::string_view text, - int width, - std::string_view background = {}, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_tight_cell(background, leading_border_background, leading_section_boundary); - stream << centered(text, width); - end_tight_cell(background); - } - - void write_final_superheader_cell( - std::string_view text, - int width, - std::string_view background, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_cell(background, leading_border_background, leading_section_boundary); - const int text_width = std::min(static_cast(text.size()), width); - const int total_padding = width - text_width; - const int left_padding = total_padding / 2; - const int right_padding = total_padding - left_padding; - write_repeated(' ', left_padding); - stream << text.substr(0, static_cast(text_width)); - write_repeated(' ', right_padding); - stream << ' '; - stream << reset_all << reset_background; - } - - [[nodiscard]] static double round_metrics_display_value(double value, int precision) noexcept - { - if (!std::isfinite(value)) - return value; - const double scale = std::pow(10.0, static_cast(precision)); - return std::round(value * scale) / scale; - } - - [[nodiscard]] static std::string_view color_for_signed_value(double value, int precision) noexcept - { - const double rounded = round_metrics_display_value(value, precision); - if (rounded < 0.0) - return red; - if (rounded > 0.0) - return green; - return {}; - } - - [[nodiscard]] static std::string_view color_for_speed_ratio(double value) noexcept - { - if (value <= 0.0) - return {}; - - const double rounded = round_metrics_display_value(value, 2); - if (rounded < 1.0) - return red; - if (rounded > 1.0) - return green; - return {}; - } - - void write_metric_value(double value, int width, int precision) - { - const std::string text = format_metrics_number(value, precision); - const int padding = width - static_cast(text.size()); - if (padding > 0) - write_repeated(' ', padding); - - stream << text; - } - - void write_colored_metric_value(double value, std::string_view color, int width, int precision) - { - const std::string text = format_metrics_number(value, precision); - const int padding = width - static_cast(text.size()); - if (padding > 0) - write_repeated(' ', padding); - - if (!color.empty()) - stream << color << text << reset_foreground; - else - stream << text; - } - - void write_metric_text(std::string_view text, int width) - { - const int padding = width - static_cast(text.size()); - if (padding > 0) - write_repeated(' ', padding); - stream << text; - } - - void write_benchmark_metric(std::string_view text) - { - const int padding = benchmark_ns_width - static_cast(text.size()); - if (padding > 0) - write_repeated(' ', padding); - stream << text; - } - - void write_colored_benchmark_metric( - std::string_view text, - std::string_view color, - int width = benchmark_speed_width) - { - const int padding = width - static_cast(text.size()); - if (padding > 0) - write_repeated(' ', padding); - - if (!color.empty()) - stream << color << text << reset_foreground; - else - stream << text; - } - - void write_bits_metric(double value) - { - write_metric_value(value, bits_width, 1); - } - - void write_colored_bits_metric(double value) - { - write_colored_metric_value(value, color_for_signed_value(value, 1), bits_width, 1); - } - - void write_domain_metric(double value) - { - write_metric_value(value, domain_width, 1); - } - - void write_colored_domain_metric(double value) - { - write_colored_metric_value(value, color_for_signed_value(value, 1), domain_width, 1); - } - - void write_accuracy_pair( - const accuracy_result& accuracy, - std::string_view background = {}, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_cell(background, leading_border_background, leading_section_boundary); - if (std::isinf(accuracy.worst_bits) && accuracy.worst_bits > 0.0) - { - write_metric_text("exact", bits_width); - stream << ' '; - write_metric_text("exact", bits_width); - } - else - { - write_bits_metric(finite_display_bits(accuracy.mean_bits, accuracy.mean_bits)); - stream << ' '; - write_bits_metric(finite_display_bits(accuracy.worst_bits, accuracy.mean_bits)); - } - end_cell(background); - } - - void write_domain_single( - double score, - std::string_view background = {}, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_cell(background, leading_border_background, leading_section_boundary); - write_domain_metric(score); - end_cell(background); - } - - void write_benchmark_single( - double ns_per_iter, - std::string_view background = {}, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_cell(background, leading_border_background, leading_section_boundary); - write_benchmark_metric(format_metrics_benchmark(ns_per_iter)); - end_cell(background); - } - - void write_special_single( - special_correctness special_values, - std::string_view background = {}, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_cell(background, leading_border_background, leading_section_boundary); - write_metric_text(format_special_correctness(special_values), special_width); - end_cell(background); - } - - void write_raw_backend( - const accuracy_result& accuracy, - const benchmark_result& benchmark, - special_correctness special_values, - bool supported, - std::string_view background, - bool leading_section_boundary = false) - { - if (!supported) - { - write_empty_raw_backend(background, leading_section_boundary); - return; - } - - struct cell_leading - { - std::string_view border_background; - bool section_boundary = false; - }; - bool first = true; - const auto next_cell = - [&first, leading_section_boundary, background]() - { - const cell_leading leading{ - first ? std::string_view{} : background, - first && leading_section_boundary - }; - first = false; - return leading; - }; - - if (columns.accuracy) - { - const cell_leading leading = next_cell(); - if (has_accuracy_data(accuracy)) - write_accuracy_pair(accuracy, background, leading.border_background, leading.section_boundary); - else - { - begin_cell(background, leading.border_background, leading.section_boundary); - write_metric_text("-", bits_width); - stream << ' '; - write_metric_text("-", bits_width); - end_cell(background); - } - } - - if (columns.domain) - { - const cell_leading leading = next_cell(); - if (has_accuracy_data(accuracy)) - write_domain_single(accuracy.domain_score, background, leading.border_background, leading.section_boundary); - else - { - begin_cell(background, leading.border_background, leading.section_boundary); - write_metric_text("-", domain_width); - end_cell(background); - } - } - - if (columns.benchmark) - { - const cell_leading leading = next_cell(); - write_benchmark_single(benchmark.ns_per_iter, background, leading.border_background, leading.section_boundary); - } - if (columns.special) - { - const cell_leading leading = next_cell(); - write_special_single(special_values, background, leading.border_background, leading.section_boundary); - } - } - - void write_empty_raw_backend( - std::string_view background, - bool leading_section_boundary = false) - { - struct cell_leading - { - std::string_view border_background; - bool section_boundary = false; - }; - bool first = true; - const auto next_cell = - [&first, leading_section_boundary, background]() - { - const cell_leading leading{ - first ? std::string_view{} : background, - first && leading_section_boundary - }; - first = false; - return leading; - }; - - if (columns.accuracy) - { - const cell_leading leading = next_cell(); - begin_cell(background, leading.border_background, leading.section_boundary); - write_metric_text("-", bits_width); - stream << ' '; - write_metric_text("-", bits_width); - end_cell(background); - } - if (columns.domain) - { - const cell_leading leading = next_cell(); - begin_cell(background, leading.border_background, leading.section_boundary); - write_metric_text("-", domain_width); - end_cell(background); - } - if (columns.benchmark) - { - const cell_leading leading = next_cell(); - begin_cell(background, leading.border_background, leading.section_boundary); - write_benchmark_metric("-"); - end_cell(background); - } - if (columns.special) - { - const cell_leading leading = next_cell(); - begin_cell(background, leading.border_background, leading.section_boundary); - write_metric_text("-", special_width); - end_cell(background); - } - } - - void write_comparison_bits_pair( - double mean_bits, - double worst_bits, - std::string_view background, - bool leading_section_boundary = false) - { - begin_tight_cell(background, {}, leading_section_boundary); - write_colored_metric_value(mean_bits, color_for_signed_value(mean_bits, 1), bits_width - 1, 1); - stream << ' '; - write_colored_bits_metric(worst_bits); - stream << ' '; - end_tight_cell(background); - } - - void write_comparison_domain( - double score, - std::string_view background, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_cell(background, leading_border_background, leading_section_boundary); - write_colored_domain_metric(score); - end_cell(background); - } - - void write_comparison_speed( - double ratio, - std::string_view background, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_cell(background, leading_border_background, leading_section_boundary); - write_colored_benchmark_metric( - format_metrics_ratio(ratio), - color_for_speed_ratio(ratio), - comparison_speed_visible_width()); - end_cell(background); - } - - void write_comparison( - const accuracy_result& fltx_accuracy, - const benchmark_result& fltx_benchmark, - const accuracy_result& competitor_accuracy, - const benchmark_result& competitor_benchmark, - bool supported, - std::string_view background, - bool leading_section_boundary = false) - { - if (!supported) - { - write_empty_comparison(background, leading_section_boundary); - return; - } - - struct cell_leading - { - std::string_view border_background; - bool section_boundary = false; - }; - bool first = true; - const auto next_cell = - [&first, leading_section_boundary, background]() - { - const cell_leading leading{ - first ? std::string_view{} : background, - first && leading_section_boundary - }; - first = false; - return leading; - }; - const bool has_accuracy = - has_accuracy_data(fltx_accuracy) && has_accuracy_data(competitor_accuracy); - - if (columns.accuracy) - { - const cell_leading leading = next_cell(); - if (has_accuracy) - { - write_comparison_bits_pair( - precision_mean_advantage_bits(fltx_accuracy, competitor_accuracy), - precision_worst_advantage_bits(fltx_accuracy, competitor_accuracy), - background, - leading.section_boundary); - } - else - { - begin_tight_cell(background, leading.border_background, leading.section_boundary); - write_metric_text("-", bits_width - 1); - stream << ' '; - write_metric_text("-", bits_width); - stream << ' '; - end_tight_cell(background); - } - } - - if (columns.domain) - { - const cell_leading leading = next_cell(); - if (has_accuracy) - write_comparison_domain(domain_gap(fltx_accuracy, competitor_accuracy), background, leading.border_background, leading.section_boundary); - else - { - begin_cell(background, leading.border_background, leading.section_boundary); - write_metric_text("-", domain_width); - end_cell(background); - } - } - - if (columns.benchmark) - { - const cell_leading leading = next_cell(); - write_comparison_speed( - speed_ratio(fltx_benchmark, competitor_benchmark), - background, - leading.border_background, - leading.section_boundary); - } - } - - void write_empty_comparison( - std::string_view background, - bool leading_section_boundary = false) - { - struct cell_leading - { - std::string_view border_background; - bool section_boundary = false; - }; - bool first = true; - const auto next_cell = - [&first, leading_section_boundary, background]() - { - const cell_leading leading{ - first ? std::string_view{} : background, - first && leading_section_boundary - }; - first = false; - return leading; - }; - - if (columns.accuracy) - { - const cell_leading leading = next_cell(); - begin_tight_cell(background, leading.border_background, leading.section_boundary); - write_metric_text("-", bits_width - 1); - stream << ' '; - write_metric_text("-", bits_width); - stream << ' '; - end_tight_cell(background); - } - if (columns.domain) - { - const cell_leading leading = next_cell(); - begin_cell(background, leading.border_background, leading.section_boundary); - write_metric_text("-", domain_width); - end_cell(background); - } - if (columns.benchmark) - { - const cell_leading leading = next_cell(); - begin_cell(background, leading.border_background, leading.section_boundary); - write_colored_benchmark_metric("-", {}, comparison_speed_visible_width()); - end_cell(background); - } - } - - void write_preferred_reference_comparison( - const metrics_record& record, - std::string_view background, - bool leading_section_boundary = false) - { - const preferred_reference_result reference = preferred_available_reference(record); - if (!reference.supported || reference.accuracy == nullptr || reference.benchmark == nullptr) - { - write_left_cell("-", preferred_reference_width, background, {}, leading_section_boundary); - write_empty_comparison(background); - return; - } - - const std::string reference_name = metrics_comparison_name(reference.name); - write_left_cell(reference_name, preferred_reference_width, background, {}, leading_section_boundary); - write_comparison( - record.fltx_accuracy, - record.fltx_benchmark, - *reference.accuracy, - *reference.benchmark, - true, - background); - } - - void write_pair_subheader( - std::string_view background = {}, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_cell(background, leading_border_background, leading_section_boundary); - stream << std::right << std::setw(bits_width) << "mean" << ' ' - << std::right << std::setw(bits_width) << "worst"; - end_cell(background); - } - - void write_tight_pair_subheader( - std::string_view background = {}, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_tight_cell(background, leading_border_background, leading_section_boundary); - stream << std::right << std::setw(bits_width) << "mean" << ' ' - << std::right << std::setw(bits_width) << "worst"; - end_tight_cell(background); - } - - void write_comparison_bits_header( - std::string_view background = {}, - bool leading_section_boundary = false) - { - begin_tight_cell(background, {}, leading_section_boundary); - stream << " bits diff"; - write_repeated(' ', comparison_bits_group_width - 10); - end_tight_cell(background); - } - - void write_comparison_bits_subheader( - std::string_view background = {}, - bool leading_section_boundary = false) - { - begin_tight_cell(background, {}, leading_section_boundary); - stream << " mean worst "; - end_tight_cell(background); - } - - void write_benchmark_single_subheader( - std::string_view background = {}, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_cell(background, leading_border_background, leading_section_boundary); - stream << std::right << std::setw(benchmark_ns_width) << "ns"; - end_cell(background); - } - - void write_comparison_group_header( - std::string_view background = {}, - bool leading_section_boundary = false) - { - bool first = true; - if (columns.accuracy) - { - write_comparison_bits_header(background, leading_section_boundary); - first = false; - } - if (columns.domain) - { - write_center_cell( - "domain", - domain_width, - background, - first ? std::string_view{} : background, - first && leading_section_boundary); - first = false; - } - if (columns.benchmark) - { - write_center_cell( - "speed", - comparison_speed_visible_width(), - background, - first ? std::string_view{} : background, - first && leading_section_boundary); - } - } - - void write_comparison_group_subheader( - std::string_view background = {}, - bool leading_section_boundary = false) - { - bool first = true; - if (columns.accuracy) - { - write_comparison_bits_subheader(background, leading_section_boundary); - first = false; - } - if (columns.domain) - { - write_center_cell( - "score", - domain_width, - background, - first ? std::string_view{} : background, - first && leading_section_boundary); - first = false; - } - if (columns.benchmark) - { - write_center_cell( - "ratio", - comparison_speed_visible_width(), - background, - first ? std::string_view{} : background, - first && leading_section_boundary); - } - } - - void write_domain_single_subheader( - std::string_view background = {}, - std::string_view leading_border_background = {}, - bool leading_section_boundary = false) - { - begin_cell(background, leading_border_background, leading_section_boundary); - stream << std::right << std::setw(domain_width) << "score"; - end_cell(background); - } - - void write_raw_backend_metric_header( - std::string_view background, - bool leading_section_boundary = false) - { - bool first = true; - if (columns.accuracy) - { - write_center_cell("bits accurate", pair_group_width, background, {}, leading_section_boundary); - first = false; - } - if (columns.domain) - { - write_center_cell( - "domain", - domain_single_group_width, - background, - first ? std::string_view{} : background, - first && leading_section_boundary); - first = false; - } - if (columns.benchmark) - { - write_center_cell( - "bench", - benchmark_single_group_width, - background, - first ? std::string_view{} : background, - first && leading_section_boundary); - first = false; - } - if (columns.special) - { - write_center_cell( - "Inf/", - special_single_group_width, - background, - first ? std::string_view{} : background, - first && leading_section_boundary); - } - } - - void write_raw_backend_metric_subheader( - std::string_view background, - bool leading_section_boundary = false) - { - bool first = true; - if (columns.accuracy) - { - write_pair_subheader(background, {}, leading_section_boundary); - first = false; - } - if (columns.domain) - { - write_domain_single_subheader( - background, - first ? std::string_view{} : background, - first && leading_section_boundary); - first = false; - } - if (columns.benchmark) - { - write_benchmark_single_subheader( - background, - first ? std::string_view{} : background, - first && leading_section_boundary); - first = false; - } - if (columns.special) - { - write_center_cell( - "NaN", - special_single_group_width, - background, - first ? std::string_view{} : background, - first && leading_section_boundary); - } - } - - void write_header(std::string_view title, const metrics_console_report_summary& summary) - { - stream << '\n'; - begin_report_line(); - stream << "[ " << title << " ]"; - end_report_line(); - if (summary.has_records) - { - if (columns.accuracy || columns.domain) - { - begin_report_line(); - stream << "average samples: " - << format_metrics_count(summary.average_precision_samples); - end_report_line(); - } - if (columns.benchmark) - { - begin_report_line(); - stream << "benchmark iterations: "; - if (summary.has_benchmarks) - stream << format_metrics_count(summary.average_benchmark_iterations); - else - stream << '-'; - end_report_line(); - } - } - begin_report_line(); - end_report_line(); - begin_report_line(); - write_center_cell("operation", operation_column_width, metadata_background, {}, true); - const std::string primary_backend_name = metrics_comparison_name(primary_competitor); - write_center_cell(primary_backend_name, raw_backend_visible_widths(), primary_competitor_background, {}, true); - for (std::string_view competitor_name : extra_competitors) - { - const std::string backend_name = metrics_comparison_name(competitor_name); - write_center_cell( - backend_name, - raw_backend_visible_widths(), - extra_competitor_background, - {}, - true); - } - write_center_cell(fltx_backend, raw_backend_visible_widths(), fltx_background, {}, true); - if (columns.has_comparison_metric()) - { - const std::string primary_comparison_name = "VS " + metrics_comparison_name(primary_competitor); - write_center_cell(primary_comparison_name, comparison_visible_width(), fltx_background, {}, true); - for (std::string_view competitor_name : extra_competitors) - { - const std::string comparison_name = "VS " + metrics_comparison_name(competitor_name); - write_center_cell(comparison_name, comparison_visible_width(), fltx_background, {}, true); - } - } - if (columns.has_preferred_reference()) - { - const std::string_view preferred_reference_title = - columns.accuracy || columns.domain - ? "VS preferred available reference" - : "VS preferred reference"; - write_final_superheader_cell( - preferred_reference_title, - preferred_reference_visible_width(), - fltx_background, - {}, - true); - } - write_section_boundary(); - end_report_line(); - write_detail_border(); - begin_report_line(); - write_center_cell("", operation_column_width, metadata_background, {}, true); - write_raw_backend_metric_header(primary_competitor_background, true); - for (std::size_t remaining = extra_competitors.size(); remaining > 0; --remaining) - write_raw_backend_metric_header(extra_competitor_background, true); - write_raw_backend_metric_header(fltx_background, true); - if (columns.has_comparison_metric()) - { - write_comparison_group_header(fltx_background, true); - for (std::size_t index = 0; index < extra_competitors.size(); ++index) - write_comparison_group_header(fltx_background, true); - } - if (columns.has_preferred_reference()) - { - write_center_cell("reference", preferred_reference_width, fltx_background, {}, true); - write_comparison_group_header(fltx_background); - } - write_section_boundary(); - end_report_line(); - begin_report_line(); - write_center_cell("", operation_column_width, metadata_background, {}, true); - write_raw_backend_metric_subheader(primary_competitor_background, true); - for (std::size_t index = 0; index < extra_competitors.size(); ++index) - write_raw_backend_metric_subheader(extra_competitor_background, true); - write_raw_backend_metric_subheader(fltx_background, true); - if (columns.has_comparison_metric()) - { - write_comparison_group_subheader(fltx_background, true); - for (std::size_t index = 0; index < extra_competitors.size(); ++index) - write_comparison_group_subheader(fltx_background, true); - } - if (columns.has_preferred_reference()) - { - write_center_cell("", preferred_reference_width, fltx_background, {}, true); - write_comparison_group_subheader(fltx_background); - } - write_section_boundary(); - end_report_line(); - write_detail_border(); - } - }; - - inline void write_csv_header( - std::ostream& out, - const std::vector& extra_competitor_names = {}) - { - out << "group,label,precision,operation,domain,domain_role,samples," - << "primary_competitor,primary_competitor_supported," - << "fltx_worst_bits,fltx_mean_bits,fltx_domain_score,fltx_inf_nan_correct," - << "competitor_worst_bits,competitor_mean_bits,competitor_domain_score,competitor_inf_nan_correct," - << "precision_gap_bits,domain_gap_pp,fltx_ns_iter,competitor_ns_iter,speed_ratio," - << "preferred_reference,preferred_mean_gap_bits,preferred_worst_gap_bits," - << "preferred_domain_gap_pp,preferred_speed_ratio"; - for (std::string_view name : extra_competitor_names) - { - out << ',' - << name << "_supported," - << name << "_worst_bits," - << name << "_mean_bits," - << name << "_domain_score," - << name << "_inf_nan_correct," - << name << "_gap_bits," - << name << "_domain_gap_pp," - << name << "_ns_iter," - << name << "_speed_ratio"; - } - out << '\n'; - } - - inline void write_csv_accuracy_fields( - std::ostream& out, - const accuracy_result& accuracy, - special_correctness special_values) - { - if (has_accuracy_data(accuracy)) - { - write_csv_metric_number(out, accuracy.worst_bits); - out << ','; - write_csv_metric_number(out, accuracy.mean_bits); - out << ','; - write_csv_metric_number(out, accuracy.domain_score); - out << ','; - } - else - { - out << "-,-,-,"; - } - write_csv_text(out, format_special_correctness(special_values)); - } - - inline void write_csv_gap_fields( - std::ostream& out, - const accuracy_result& fltx_accuracy, - const accuracy_result& reference_accuracy) - { - if (has_accuracy_data(fltx_accuracy) && has_accuracy_data(reference_accuracy)) - { - write_csv_metric_number(out, precision_gap_bits(fltx_accuracy, reference_accuracy)); - out << ','; - write_csv_metric_number(out, domain_gap(fltx_accuracy, reference_accuracy)); - } - else - { - out << "-,-"; - } - } - - inline void write_csv_benchmark_fields( - std::ostream& out, - const benchmark_result& fltx_benchmark, - const benchmark_result* reference_benchmark) - { - if (has_benchmark_data(fltx_benchmark)) - out << fltx_benchmark.ns_per_iter; - else - out << '-'; - out << ','; - - if (reference_benchmark != nullptr && has_benchmark_data(*reference_benchmark)) - out << reference_benchmark->ns_per_iter; - else - out << '-'; - out << ','; - - if (reference_benchmark != nullptr) - { - const double ratio = speed_ratio(fltx_benchmark, *reference_benchmark); - if (ratio > 0.0) - out << ratio; - else - out << '-'; - } - else - { - out << '-'; - } - } - - inline void write_csv_record( - std::ostream& out, - const metrics_record& record, - const std::vector& extra_competitor_names = {}) - { - write_csv_text(out, metrics_csv_group(record)); - out << ','; - write_csv_text(out, metrics_csv_label(record)); - out << ','; - write_csv_text(out, to_string(record.suite.precision)); - out << ','; - write_csv_text(out, record.suite.operation.name); - out << ','; - write_csv_text(out, record.suite.domain.name); - out << ','; - write_csv_text(out, to_string(record.suite.domain.role)); - out << ','; - if (has_accuracy_data(record.fltx_accuracy)) - out << record.fltx_accuracy.sample_count; - else - out << '-'; - out << ','; - write_csv_text(out, record.competitor_name); - out << ',' - << (record.competitor_supported ? "yes" : "no") << ','; - - write_csv_accuracy_fields(out, record.fltx_accuracy, record.fltx_special_values); - out << ','; - - if (record.competitor_supported) - { - write_csv_accuracy_fields(out, record.competitor_accuracy, record.competitor_special_values); - out << ','; - write_csv_gap_fields(out, record.fltx_accuracy, record.competitor_accuracy); - out << ','; - write_csv_benchmark_fields(out, record.fltx_benchmark, &record.competitor_benchmark); - } - else - { - out << "-,-,-,-,-,-,"; - write_csv_benchmark_fields(out, record.fltx_benchmark, nullptr); - } - - const preferred_reference_result preferred = preferred_available_reference(record); - if (preferred.supported && preferred.benchmark != nullptr) - { - out << ','; - write_csv_text(out, preferred.name); - out << ','; - if (preferred.accuracy != nullptr && - has_accuracy_data(record.fltx_accuracy) && - has_accuracy_data(*preferred.accuracy)) - { - write_csv_metric_number(out, precision_mean_advantage_bits(record.fltx_accuracy, *preferred.accuracy)); - out << ','; - write_csv_metric_number(out, precision_worst_advantage_bits(record.fltx_accuracy, *preferred.accuracy)); - out << ','; - write_csv_metric_number(out, domain_gap(record.fltx_accuracy, *preferred.accuracy)); - } - else - { - out << "-,-,-"; - } - out << ','; - const double ratio = speed_ratio(record.fltx_benchmark, *preferred.benchmark); - if (ratio > 0.0) - out << ratio; - else - out << '-'; - } - else - { - out << ",-,-,-,-,-"; - } - - for (std::string_view name : extra_competitor_names) - { - const competitor_result* competitor = find_extra_competitor(record, name); - if (competitor == nullptr) - { - out << ",,,,,,,,,"; - continue; - } - - out << ',' - << (competitor->supported ? "yes" : "no"); - if (competitor->supported) - { - out << ','; - write_csv_accuracy_fields(out, competitor->accuracy, competitor->special_values); - out << ','; - write_csv_gap_fields(out, record.fltx_accuracy, competitor->accuracy); - out << ','; - if (has_benchmark_data(competitor->benchmark)) - out << competitor->benchmark.ns_per_iter; - else - out << '-'; - out << ','; - const double ratio = speed_ratio(record.fltx_benchmark, competitor->benchmark); - if (ratio > 0.0) - out << ratio; - else - out << '-'; - } - else - { - out << ",-,-,-,-,-,-,-,-"; - } - } - out << '\n'; - } - - #if defined(__EMSCRIPTEN__) - inline bool write_node_host_text_file( - const std::string& output_path, - const std::string& content) - { - const int result = EM_ASM_INT({ - if (typeof ENVIRONMENT_IS_NODE === "undefined" || !ENVIRONMENT_IS_NODE) - return 0; - - try { - const fs = require("fs"); - const path = require("path"); - const outputPath = UTF8ToString($0); - const text = UTF8ToString($1, $2); - fs.mkdirSync(path.dirname(outputPath), { recursive: true }); - fs.writeFileSync(outputPath, text, "utf8"); - return 1; - } catch (error) { - if (typeof err === "function") { - const message = error && error.message ? error.message : String(error); - err("[metrics report] failed to write host file: " + message); - } - return -1; - } - }, output_path.c_str(), content.c_str(), content.size()); - - if (result < 0) - throw std::runtime_error("unable to write metrics report host output path: " + output_path); - return result > 0; - } - #endif - - inline void write_text_file( - const std::filesystem::path& output_path, - const std::string& content) - { - #if defined(__EMSCRIPTEN__) - if (write_node_host_text_file(output_path.string(), content)) - return; - #endif - - if (const std::filesystem::path parent = output_path.parent_path(); !parent.empty()) - std::filesystem::create_directories(parent); - - std::ofstream out(output_path, std::ios::trunc); - if (!out) - throw std::runtime_error("unable to open metrics report output path: " + output_path.string()); - - out << content; - } - - inline void write_csv_report( - const std::filesystem::path& output_path, - const std::vector& records) - { - std::ostringstream out; - const std::vector extra_competitor_names = collect_extra_competitor_names(records); - write_csv_header(out, extra_competitor_names); - std::vector sorted_records = records; - std::stable_sort(sorted_records.begin(), sorted_records.end(), metrics_csv_record_less); - for (const metrics_record& record : sorted_records) - write_csv_record(out, record, extra_competitor_names); - - write_text_file(output_path, out.str()); - } - - inline void write_console_report( - std::ostream& out, - std::string_view title, - const std::vector& records, - double accuracy_equal_tolerance_bits = 0.005, - double speed_equal_tolerance_ratio = 0.01, - metrics_console_column_visibility visible_columns = {}) - { - int operation_column_width = 10; - for (const metrics_record& record : records) - { - operation_column_width = std::max( - operation_column_width, - static_cast(record.suite.operation.name.size())); - } - - const std::string_view primary_competitor_name = - records.empty() || records.front().competitor_name.empty() - ? std::string_view{ "comp" } - : records.front().competitor_name; - metrics_console_report_writer writer{ - out, - title, - primary_competitor_name, - collect_extra_competitor_names(records), - records.empty() ? std::string_view{ "fltx" } : metrics_fltx_backend_name(records.front().suite.precision), - operation_column_width, - accuracy_equal_tolerance_bits, - speed_equal_tolerance_ratio, - summarize_console_report(records), - visible_columns - }; - for (const metrics_record& record : records) - writer.write_record(record); - } -} - -#endif diff --git a/tests/metrics/metrics_samples.h b/tests/metrics/metrics_samples.h deleted file mode 100644 index 61024d0..0000000 --- a/tests/metrics/metrics_samples.h +++ /dev/null @@ -1,191 +0,0 @@ -#ifndef FLTX_TESTS_METRICS_SAMPLES_INCLUDED -#define FLTX_TESTS_METRICS_SAMPLES_INCLUDED - -#include -#include -#include -#include - -#include "metrics_types.h" - -namespace bl::test::metrics -{ - struct value_sample - { - std::string_view label; - double hi = 0.0; - double lo = 0.0; - double x2 = 0.0; - double x3 = 0.0; - }; - - struct unary_sample - { - std::string_view label; - value_sample x; - }; - - struct binary_sample - { - std::string_view label; - value_sample x; - value_sample y; - }; - - struct ternary_sample - { - std::string_view label; - value_sample x; - value_sample y; - value_sample z; - }; - - struct unary_int_sample - { - std::string_view label; - value_sample x; - int n = 0; - }; - - template - struct binary_value - { - T x; - T y; - }; - - template - struct ternary_value - { - T x; - T y; - T z; - }; - - template - struct unary_int_value - { - T x; - int n = 0; - }; - - template - struct frexp_value - { - T fraction; - int exponent = 0; - }; - - template - struct sample_set - { - operation_id operation; - domain_id domain; - std::vector values; - }; - - [[nodiscard]] inline value_sample special_nan_sample(std::string_view label = "nan") noexcept - { - return { label, std::numeric_limits::quiet_NaN(), 0.0 }; - } - - [[nodiscard]] inline value_sample special_pos_inf_sample(std::string_view label = "+inf") noexcept - { - return { label, std::numeric_limits::infinity(), 0.0 }; - } - - [[nodiscard]] inline value_sample special_neg_inf_sample(std::string_view label = "-inf") noexcept - { - return { label, -std::numeric_limits::infinity(), 0.0 }; - } - - [[nodiscard]] inline value_sample special_pos_zero_sample(std::string_view label = "+0") noexcept - { - return { label, 0.0, 0.0 }; - } - - [[nodiscard]] inline value_sample special_neg_zero_sample(std::string_view label = "-0") noexcept - { - return { label, std::copysign(0.0, -1.0), 0.0 }; - } - - [[nodiscard]] inline value_sample special_one_sample(std::string_view label = "1") noexcept - { - return { label, 1.0, 0.0 }; - } - - [[nodiscard]] inline value_sample special_neg_one_sample(std::string_view label = "-1") noexcept - { - return { label, -1.0, 0.0 }; - } - - [[nodiscard]] inline std::vector make_special_unary_samples() - { - return { - { "nan", special_nan_sample() }, - { "+inf", special_pos_inf_sample() }, - { "-inf", special_neg_inf_sample() }, - { "+0", special_pos_zero_sample() }, - { "-0", special_neg_zero_sample() } - }; - } - - [[nodiscard]] inline std::vector make_special_binary_samples() - { - const value_sample nan = special_nan_sample(); - const value_sample pinf = special_pos_inf_sample(); - const value_sample ninf = special_neg_inf_sample(); - const value_sample zero = special_pos_zero_sample(); - const value_sample neg_zero = special_neg_zero_sample(); - const value_sample one = special_one_sample(); - const value_sample neg_one = special_neg_one_sample(); - - return { - { "nan left", nan, one }, - { "nan right", one, nan }, - { "both nan", nan, nan }, - { "+inf left", pinf, one }, - { "-inf left", ninf, one }, - { "+inf right", one, pinf }, - { "-inf right", one, ninf }, - { "opposite infinities", pinf, ninf }, - { "matching infinities", pinf, pinf }, - { "zero divisor", one, zero }, - { "zero zero", zero, zero }, - { "signed zero", neg_zero, one }, - { "negative finite", neg_one, pinf } - }; - } - - [[nodiscard]] inline std::vector make_special_ternary_samples() - { - const value_sample nan = special_nan_sample(); - const value_sample pinf = special_pos_inf_sample(); - const value_sample ninf = special_neg_inf_sample(); - const value_sample zero = special_pos_zero_sample(); - const value_sample one = special_one_sample(); - - return { - { "nan x", nan, one, one }, - { "nan y", one, nan, one }, - { "nan z", one, one, nan }, - { "inf times zero", pinf, zero, one }, - { "inf plus opposite inf", pinf, one, ninf }, - { "negative inf plus inf", ninf, one, pinf }, - { "inf finite", pinf, one, one } - }; - } - - [[nodiscard]] inline std::vector make_special_unary_int_samples() - { - return { - { "nan", special_nan_sample(), 4 }, - { "+inf", special_pos_inf_sample(), 4 }, - { "-inf", special_neg_inf_sample(), -4 }, - { "+0", special_pos_zero_sample(), 4 }, - { "-0", special_neg_zero_sample(), -4 } - }; - } -} - -#endif diff --git a/tests/metrics/metrics_std_special_oracle.h b/tests/metrics/metrics_std_special_oracle.h deleted file mode 100644 index a53e8d5..0000000 --- a/tests/metrics/metrics_std_special_oracle.h +++ /dev/null @@ -1,234 +0,0 @@ -#ifndef FLTX_TESTS_METRICS_STD_SPECIAL_ORACLE_INCLUDED -#define FLTX_TESTS_METRICS_STD_SPECIAL_ORACLE_INCLUDED - -#include -#include -#include -#include -#include -#include - -#include "metrics_samples.h" - -namespace bl::test::metrics -{ - [[nodiscard]] inline double sample_as_double(const value_sample& sample) noexcept - { - return sample.hi; - } - - [[nodiscard]] inline bool special_trace_enabled() noexcept - { - const char* text = std::getenv("FLTX_SPECIAL_TRACE"); - return text != nullptr && text[0] != '\0' && !(text[0] == '0' && text[1] == '\0'); - } - - [[nodiscard]] inline double stdlib_unary_special_result(std::string_view operation, double x) - { - if (operation == "sqrt") - return std::sqrt(x); - if (operation == "cbrt") - return std::cbrt(x); - if (operation == "sin") - return std::sin(x); - if (operation == "cos") - return std::cos(x); - if (operation == "tan") - return std::tan(x); - if (operation == "atan") - return std::atan(x); - if (operation == "asin") - return std::asin(x); - if (operation == "acos") - return std::acos(x); - if (operation == "exp") - return std::exp(x); - if (operation == "exp2") - return std::exp2(x); - if (operation == "expm1") - return std::expm1(x); - if (operation == "log") - return std::log(x); - if (operation == "log2") - return std::log2(x); - if (operation == "log10") - return std::log10(x); - if (operation == "log1p") - return std::log1p(x); - if (operation == "sinh") - return std::sinh(x); - if (operation == "cosh") - return std::cosh(x); - if (operation == "tanh") - return std::tanh(x); - if (operation == "asinh") - return std::asinh(x); - if (operation == "acosh") - return std::acosh(x); - if (operation == "atanh") - return std::atanh(x); - if (operation == "fabs") - return std::fabs(x); - if (operation == "floor") - return std::floor(x); - if (operation == "ceil") - return std::ceil(x); - if (operation == "trunc") - return std::trunc(x); - if (operation == "round") - return std::round(x); - if (operation == "nearbyint") - return std::nearbyint(x); - if (operation == "rint") - return std::rint(x); - if (operation == "logb") - return std::logb(x); - if (operation == "modf") - { - double integer_part = 0.0; - return std::modf(x, &integer_part); - } - if (operation == "erf") - return std::erf(x); - if (operation == "erfc") - return std::erfc(x); - if (operation == "lgamma") - return std::lgamma(x); - if (operation == "tgamma") - return std::tgamma(x); - - throw std::invalid_argument("unknown unary std special oracle operation"); - } - - [[nodiscard]] inline double stdlib_binary_special_result(std::string_view operation, double x, double y) - { - if (operation == "add") - return x + y; - if (operation == "subtract") - return x - y; - if (operation == "multiply") - return x * y; - if (operation == "divide") - return x / y; - if (operation == "hypot") - return std::hypot(x, y); - if (operation == "atan2") - return std::atan2(x, y); - if (operation == "pow") - return std::pow(x, y); - if (operation == "fmod") - return std::fmod(x, y); - if (operation == "remainder") - return std::remainder(x, y); - if (operation == "remquo") - { - int quotient = 0; - return std::remquo(x, y, "ient); - } - if (operation == "fmin") - return std::fmin(x, y); - if (operation == "fmax") - return std::fmax(x, y); - if (operation == "fdim") - return std::fdim(x, y); - if (operation == "copysign") - return std::copysign(x, y); - if (operation == "nextafter") - return std::nextafter(x, y); - if (operation == "nexttoward") - return std::nextafter(x, y); - - throw std::invalid_argument("unknown binary std special oracle operation"); - } - - [[nodiscard]] inline double stdlib_ternary_special_result(std::string_view operation, double x, double y, double z) - { - if (operation == "fma") - return std::fma(x, y, z); - - throw std::invalid_argument("unknown ternary std special oracle operation"); - } - - [[nodiscard]] inline double stdlib_unary_int_special_result(std::string_view operation, double x, int n) - { - if (operation == "ldexp") - return std::ldexp(x, n); - if (operation == "scalbn") - return std::scalbn(x, n); - if (operation == "scalbln") - return std::scalbln(x, static_cast(n)); - - throw std::invalid_argument("unknown unary-int std special oracle operation"); - } - - [[nodiscard]] inline long long stdlib_unary_integer_special_result(std::string_view operation, double x) - { - if (operation == "lround") - return static_cast(std::lround(x)); - if (operation == "llround") - return std::llround(x); - if (operation == "lrint") - return static_cast(std::lrint(x)); - if (operation == "llrint") - return std::llrint(x); - if (operation == "ilogb") - return static_cast(std::ilogb(x)); - - throw std::invalid_argument("unknown unary-integer std special oracle operation"); - } - - [[nodiscard]] inline bool unary_integer_special_probe_is_meaningful(std::string_view operation) noexcept - { - return operation == "ilogb"; - } - - template - [[nodiscard]] special_correctness measure_unary_integer_special_values( - std::string_view operation, - const Samples& samples, - const Values& values, - EvalFn eval, - RefFn reference) - { - (void)reference; - if (samples.empty()) - return special_correctness::unavailable; - - for (std::size_t index = 0; index < samples.size(); ++index) - { - long long expected = 0; - try - { - expected = stdlib_unary_integer_special_result( - operation, - sample_as_double(samples[index].x)); - } - catch (...) - { - return special_correctness::unavailable; - } - - try - { - const long long actual = static_cast(eval(values[index])); - if (actual != expected) - { - if (special_trace_enabled()) - { - std::cerr << "[special trace] " << operation << " sample " << index - << " '" << samples[index].label << "' integer mismatch: " - << actual << " != " << expected << '\n'; - } - return special_correctness::fail; - } - } - catch (...) - { - return special_correctness::fail; - } - } - return special_correctness::pass; - } -} - -#endif diff --git a/tests/metrics/metrics_types.h b/tests/metrics/metrics_types.h deleted file mode 100644 index 1d89435..0000000 --- a/tests/metrics/metrics_types.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef FLTX_TESTS_METRICS_TYPES_INCLUDED -#define FLTX_TESTS_METRICS_TYPES_INCLUDED - -#include - -namespace bl::test::metrics -{ - enum class precision_type - { - f128, - f256 - }; - - enum class domain_role - { - primary, - stress - }; - - struct operation_id - { - std::string_view name; - std::string_view standard_name; - }; - - struct domain_id - { - std::string_view name; - domain_role role = domain_role::primary; - }; - - struct suite_id - { - precision_type precision; - operation_id operation; - domain_id domain; - }; -} - -#endif diff --git a/tests/precision/test_f128_math.cpp b/tests/precision/test_f128_math.cpp deleted file mode 100644 index 27f3c68..0000000 --- a/tests/precision/test_f128_math.cpp +++ /dev/null @@ -1,3582 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -using namespace bl; - -namespace -{ - using mpfr_ref = boost::multiprecision::number< - boost::multiprecision::mpfr_float_backend<192>, - boost::multiprecision::et_off>; - - constexpr int checked_digits = std::numeric_limits::digits10 - 2; - constexpr int printed_digits = std::numeric_limits::max_digits10; - - constexpr std::uint64_t random_seed = 1ull; - constexpr int random_sample_count_scale = 50; - constexpr const char* type_label = "f128"; - - void print_random_run(const char* description, int count) - { - std::cout << type_label << " comparing: " << count << " " << description - << " (seed " << random_seed << ")...\n\n"; - } - - [[nodiscard]] mpfr_ref abs_ref(const mpfr_ref& value) - { - return value < 0 ? -value : value; - } - - [[nodiscard]] mpfr_ref decimal_epsilon(int digits) - { - mpfr_ref epsilon = 1; - for (int i = 0; i < digits; ++i) - epsilon /= 10; - return epsilon; - } - - struct scaled_tolerance_entry - { - const char* op_name; - const char* tolerance; - }; - - [[nodiscard]] mpfr_ref function_scaled_tolerance(const char* op_name) - { - constexpr std::array tolerances{{ - { "acos", "4e-30" }, - { "acosh", "4e-30" }, - { "add", "4e-32" }, - { "asin", "4e-30" }, - { "asinh", "3e-30" }, - { "atan", "3e-30" }, - { "atan2", "4e-30" }, - { "atanh", "4e-30" }, - { "cbrt", "3e-30" }, - { "cos", "2e-30" }, - { "cosh", "5e-30" }, - { "divide", "9e-32" }, - { "erf", "2e-30" }, - { "erfc", "4e-30" }, - { "exp", "4e-30" }, - { "exp2", "4e-30" }, - { "expm1", "4e-30" }, - { "fmod", "4e-33" }, - { "frexp", "7e-31" }, - { "hypot", "6e-30" }, - { "ldexp", "4e-30" }, - { "lgamma", "7e-30" }, - { "log", "4e-30" }, - { "log10", "4e-30" }, - { "log1p", "4e-30" }, - { "log2", "4e-30" }, - { "multiply", "5e-32" }, - { "pow", "4e-30" }, - { "pow10_128", "4e-34" }, - { "recip", "2e-33" }, - { "remainder", "3e-30" }, - { "sin", "2e-30" }, - { "sincos.cos", "2e-30" }, - { "sincos.sin", "6e-31" }, - { "sinh", "5e-30" }, - { "sqrt", "4e-30" }, - { "subtract", "5e-32" }, - { "tan", "4e-30" }, - { "tanh", "2e-30" }, - { "tgamma", "6e-30" } - }}; - - for (const auto& entry : tolerances) - { - if (std::strcmp(op_name, entry.op_name) == 0) - return mpfr_ref{ entry.tolerance }; - } - - return mpfr_ref{ 0 }; - } - - [[nodiscard]] mpfr_ref function_tolerance(const char* op_name, const mpfr_ref& scale) - { - return function_scaled_tolerance(op_name) * scale; - } - - [[nodiscard]] mpfr_ref combined_tolerance( - const char* op_name, - const mpfr_ref& accuracy_scale, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance, - const mpfr_ref& rel_scale) - { - const mpfr_ref rel_based_tolerance = rel_tolerance * rel_scale; - mpfr_ref explicit_tolerance = abs_tolerance; - if (rel_based_tolerance > explicit_tolerance) - explicit_tolerance = rel_based_tolerance; - - const mpfr_ref scaled_tolerance = function_tolerance(op_name, accuracy_scale); - if (scaled_tolerance == 0 || explicit_tolerance < scaled_tolerance) - return explicit_tolerance; - - return scaled_tolerance; - } - - [[nodiscard]] std::string to_text(const f128& value) - { - return bl::to_string(value, printed_digits, false, true, false); - } - - [[nodiscard]] std::string to_text(const mpfr_ref& value) - { - std::ostringstream out; - out << std::setprecision(printed_digits + 20) - << std::scientific - << value; - return out.str(); - } - - [[nodiscard]] mpfr_ref to_ref_exact(const f128& value) - { - mpfr_ref sum = 0; - sum += mpfr_ref{ value.hi }; - sum += mpfr_ref{ value.lo }; - return sum; - } - - [[nodiscard]] std::string to_text_double(double value) - { - std::ostringstream out; - out << std::setprecision(std::numeric_limits::max_digits10) - << std::scientific - << value; - return out.str(); - } - - [[nodiscard]] std::string to_text_double_hex(double value) - { - std::ostringstream out; - out << std::hexfloat << value; - return out.str(); - } - - using ulp_count = boost::multiprecision::cpp_int; - - struct ulp_distance_result - { - ulp_count value = 0; - bool exact = true; - }; - - [[nodiscard]] bool same_double_bits(double lhs, double rhs) noexcept - { - return std::bit_cast(lhs) == std::bit_cast(rhs); - } - - [[nodiscard]] bool same_value_bits(const f128& lhs, const f128& rhs) noexcept - { - return same_double_bits(lhs.hi, rhs.hi) && - same_double_bits(lhs.lo, rhs.lo); - } - - [[nodiscard]] mpfr_ref scale_by_power_of_two(mpfr_ref value, int exponent) - { - if (exponent > 0) - { - for (int i = 0; i < exponent; ++i) - value *= 2; - } - else if (exponent < 0) - { - for (int i = 0; i < -exponent; ++i) - value /= 2; - } - - return value; - } - - [[nodiscard]] f128 round_ref_to_f128(const mpfr_ref& value) - { - const std::string text = to_text(value); - return to_f128(text.c_str()); - } - - [[nodiscard]] mpfr_ref nominal_ulp_size(const f128& reference, const f128& fallback) - { - double lead = std::fabs(reference.hi); - if (lead == 0.0) - lead = std::fabs(fallback.hi); - if (lead == 0.0) - return mpfr_ref{ std::numeric_limits::denorm_min() }; - - int exponent = 0; - (void)std::frexp(lead, &exponent); - return scale_by_power_of_two(mpfr_ref{ 1 }, exponent - std::numeric_limits::digits); - } - - [[nodiscard]] ulp_count ceil_to_ulp_count(const mpfr_ref& value) - { - if (value <= 0) - return 0; - - return boost::multiprecision::ceil(value).template convert_to(); - } - - [[nodiscard]] ulp_distance_result ulp_distance(const f128& lhs, const f128& rhs) - { - if (bl::isnan(lhs) || bl::isnan(rhs)) - return { 0, false }; - - if (!bl::isfinite(lhs) || !bl::isfinite(rhs)) - return { same_value_bits(lhs, rhs) ? ulp_count{ 0 } : ulp_count{ 1 }, same_value_bits(lhs, rhs) }; - - const mpfr_ref lhs_ref = to_ref_exact(lhs); - const mpfr_ref rhs_ref = to_ref_exact(rhs); - if (lhs_ref == rhs_ref) - return { 0, true }; - - const mpfr_ref diff = abs_ref(lhs_ref - rhs_ref); - const mpfr_ref ulp = nominal_ulp_size(rhs, lhs); - return { ceil_to_ulp_count(diff / ulp), true }; - } - - [[nodiscard]] ulp_distance_result true_ulp_distance_from_reference(const f128& got, const mpfr_ref& expected) - { - return ulp_distance(got, round_ref_to_f128(expected)); - } - - [[nodiscard]] f128 random_finite_for_f128(bl::mt19937_64& rng) - { - bl::uniform_int_distribution sign_dist(0, 1); - bl::uniform_int_distribution exponent_dist(-80, 80); - bl::uniform_real_distribution mantissa_dist{ f128{ 0.5 }, f128{ 1.0 } }; - - f128 mantissa = mantissa_dist(rng); - if (sign_dist(rng) != 0) - mantissa = -mantissa; - - return bl::ldexp(mantissa, exponent_dist(rng)); - } - - struct accuracy_stats_entry - { - int samples = 0; - int passed = 0; - std::vector achieved_digits; - ulp_count worst_ulp = 0; - bool worst_ulp_exact = true; - int inexact_ulp_samples = 0; - mpfr_ref worst_scaled_error = 0; - }; - - class accuracy_report_scope; - thread_local accuracy_report_scope* current_accuracy_report_scope = nullptr; - - [[nodiscard]] double achieved_digits_from_error(const mpfr_ref& diff, const mpfr_ref& scale) - { - if (diff == 0) - return static_cast(checked_digits); - - const mpfr_ref scaled_error = diff / scale; - if (scaled_error >= 1) - return 0.0; - - const double scaled_error_double = scaled_error.convert_to(); - if (!(scaled_error_double > 0.0)) - return static_cast(checked_digits); - - const double digits = -std::log10(scaled_error_double); - return digits < 0.0 ? 0.0 : digits; - } - - [[nodiscard]] double normalized_accuracy_percent(double digits) - { - if (checked_digits <= 0) - return 100.0; - - double ratio = digits / static_cast(checked_digits); - if (ratio < 0.0) - ratio = 0.0; - if (ratio > 1.0) - ratio = 1.0; - return ratio * 100.0; - } - - [[nodiscard]] double median_digits(std::vector values) - { - if (values.empty()) - return 0.0; - - std::sort(values.begin(), values.end()); - const std::size_t mid = values.size() / 2; - if ((values.size() & 1u) != 0u) - return values[mid]; - - return (values[mid - 1] + values[mid]) * 0.5; - } - - class accuracy_report_scope - { - public: - explicit accuracy_report_scope(const char* test_name, bool report_ulp = true) - : test_name(test_name), report_ulp(report_ulp), previous(current_accuracy_report_scope) - { - current_accuracy_report_scope = this; - } - - ~accuracy_report_scope() - { - current_accuracy_report_scope = previous; - - if (stats.empty()) - return; - - const std::ios_base::fmtflags old_flags = std::cout.flags(); - const std::streamsize old_precision = std::cout.precision(); - - std::cout << "\naccuracy summary for " << test_name << ":\n"; - std::cout << std::fixed << std::setprecision(2); - - for (const auto& [op_name, entry] : stats) - { - const double median = median_digits(entry.achieved_digits); - const double worst = *std::min_element(entry.achieved_digits.begin(), entry.achieved_digits.end()); - - std::cout << " " << op_name - << ": pass " << entry.passed << "/" << entry.samples - << ", median " << median << "/" << checked_digits - << " digits (" << normalized_accuracy_percent(median) << "%)" - << ", worst " << worst << "/" << checked_digits - << " digits (" << normalized_accuracy_percent(worst) << "%)"; - - if (report_ulp) - { - std::cout << ", worst ulp "; - if (!entry.worst_ulp_exact) - std::cout << ">="; - std::cout << entry.worst_ulp; - if (entry.inexact_ulp_samples != 0) - std::cout << " (" << entry.inexact_ulp_samples << " capped)"; - } - else - { - std::cout << ", local ulp omitted"; - } - std::cout << ", worst scaled error " << std::scientific << entry.worst_scaled_error << std::fixed; - std::cout << "\n"; - } - - std::cout.flags(old_flags); - std::cout.precision(old_precision); - } - - void record( - const char* op_name, - const mpfr_ref& diff, - const mpfr_ref& scale, - const f128& got, - const mpfr_ref& expected, - bool passed) - { - auto& entry = stats[op_name]; - ++entry.samples; - if (passed) - ++entry.passed; - entry.achieved_digits.push_back(achieved_digits_from_error(diff, scale)); - if (scale != 0) - { - const mpfr_ref scaled_error = diff / scale; - if (scaled_error > entry.worst_scaled_error) - entry.worst_scaled_error = scaled_error; - } - - const ulp_distance_result ulps = true_ulp_distance_from_reference(got, expected); - if (!ulps.exact) - ++entry.inexact_ulp_samples; - - if (ulps.value > entry.worst_ulp) - { - entry.worst_ulp = ulps.value; - entry.worst_ulp_exact = ulps.exact; - } - else if (ulps.value == entry.worst_ulp && !ulps.exact) - { - entry.worst_ulp_exact = false; - } - } - - private: - std::string test_name; - bool report_ulp = true; - accuracy_report_scope* previous = nullptr; - std::map stats; - }; - - void record_accuracy_sample( - const char* op_name, - const f128& got, - const mpfr_ref& expected, - const mpfr_ref& diff, - const mpfr_ref& scale, - bool passed) - { - if (current_accuracy_report_scope != nullptr) - current_accuracy_report_scope->record(op_name, diff, scale, got, expected, passed); - } - - template - void check_binary_op(const char* op_name, const char* lhs_text, const char* rhs_text, F128Op&& f128_op, RefOp&& ref_op) - { - const f128 lhs = to_f128(lhs_text); - const f128 rhs = to_f128(rhs_text); - - const f128 got = f128_op(lhs, rhs); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_op(to_ref_exact(lhs), to_ref_exact(rhs)); - - mpfr_ref scale = abs_ref(expected); - if (scale < 1) - scale = 1; - - const mpfr_ref tolerance = function_tolerance(op_name, scale); - const mpfr_ref diff = abs_ref(got_ref - expected); - - CAPTURE(op_name); - CAPTURE(lhs_text); - CAPTURE(rhs_text); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - - CAPTURE(to_text_double(got.hi)); - CAPTURE(to_text_double(got.lo)); - CAPTURE(to_text_double_hex(got.hi)); - CAPTURE(to_text_double_hex(got.lo)); - - record_accuracy_sample(op_name, got, expected, diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - template - void check_scalar_binary_op( - const char* op_name, - const char* case_label, - const char* scalar_kind, - const char* value_text, - Scalar scalar, - F128Op&& f128_op, - RefOp&& ref_op) - { - const f128 value = to_f128(value_text); - const mpfr_ref value_ref = to_ref_exact(value); - const mpfr_ref scalar_ref{ static_cast(scalar) }; - - const f128 got = f128_op(value, scalar); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_op(value_ref, scalar_ref); - - mpfr_ref scale = abs_ref(expected); - if (scale < 1) - scale = 1; - - const mpfr_ref tolerance = function_tolerance(op_name, scale); - const mpfr_ref diff = abs_ref(got_ref - expected); - - CAPTURE(op_name); - CAPTURE(case_label); - CAPTURE(scalar_kind); - CAPTURE(value_text); - CAPTURE(to_text_double(static_cast(scalar))); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - - CAPTURE(to_text_double(got.hi)); - CAPTURE(to_text_double(got.lo)); - CAPTURE(to_text_double_hex(got.hi)); - CAPTURE(to_text_double_hex(got.lo)); - - record_accuracy_sample(op_name, got, expected, diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - template - void check_unary_op(const char* op_name, const char* input_text, F128Op&& f128_op, RefOp&& ref_op) - { - const f128 input = to_f128(input_text); - - const f128 got = f128_op(input); - const mpfr_ref input_ref = to_ref_exact(input); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_op(input_ref); - - mpfr_ref scale = abs_ref(expected); - if (scale < 1) - scale = 1; - - const mpfr_ref tolerance = function_tolerance(op_name, scale); - const mpfr_ref diff = abs_ref(got_ref - expected); - - CAPTURE(op_name); - CAPTURE(input_text); - CAPTURE(to_text(input)); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - - //CAPTURE(to_text_double(input.hi)); - //CAPTURE(to_text_double(input.lo)); - //CAPTURE(to_text_double_hex(input.hi)); - //CAPTURE(to_text_double_hex(input.lo)); - // - //CAPTURE(to_text_double(got.hi)); - //CAPTURE(to_text_double(got.lo)); - //CAPTURE(to_text_double_hex(got.hi)); - //CAPTURE(to_text_double_hex(got.lo)); - - record_accuracy_sample(op_name, got, expected, diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - template - void check_unary_op_with_tolerance( - const char* op_name, - const char* input_text, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance, - F128Op&& f128_op, - RefOp&& ref_op) - { - const f128 input = to_f128(input_text); - - const f128 got = f128_op(input); - const mpfr_ref input_ref = to_ref_exact(input); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_op(input_ref); - - mpfr_ref accuracy_scale = abs_ref(expected); - if (accuracy_scale < 1) - accuracy_scale = 1; - - const mpfr_ref scale = abs_ref(expected); - const mpfr_ref tolerance = combined_tolerance(op_name, accuracy_scale, abs_tolerance, rel_tolerance, scale); - - const mpfr_ref diff = abs_ref(got_ref - expected); - - CAPTURE(op_name); - CAPTURE(input_text); - CAPTURE(to_text(input)); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - CAPTURE(to_text(abs_tolerance)); - CAPTURE(to_text(rel_tolerance)); - - //CAPTURE(to_text_double(input.hi)); - //CAPTURE(to_text_double(input.lo)); - //CAPTURE(to_text_double_hex(input.hi)); - //CAPTURE(to_text_double_hex(input.lo)); - // - //CAPTURE(to_text_double(got.hi)); - //CAPTURE(to_text_double(got.lo)); - //CAPTURE(to_text_double_hex(got.hi)); - //CAPTURE(to_text_double_hex(got.lo)); - - record_accuracy_sample(op_name, got, expected, diff, accuracy_scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - template - void check_binary_op_with_tolerance( - const char* op_name, - const char* lhs_text, - const char* rhs_text, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance, - F128Op&& f128_op, - RefOp&& ref_op) - { - const f128 lhs = to_f128(lhs_text); - const f128 rhs = to_f128(rhs_text); - - const f128 got = f128_op(lhs, rhs); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_op(to_ref_exact(lhs), to_ref_exact(rhs)); - - mpfr_ref accuracy_scale = abs_ref(expected); - if (accuracy_scale < 1) - accuracy_scale = 1; - - const mpfr_ref scale = abs_ref(expected); - const mpfr_ref tolerance = combined_tolerance(op_name, accuracy_scale, abs_tolerance, rel_tolerance, scale); - - const mpfr_ref diff = abs_ref(got_ref - expected); - - CAPTURE(op_name); - CAPTURE(lhs_text); - CAPTURE(rhs_text); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - CAPTURE(to_text(abs_tolerance)); - CAPTURE(to_text(rel_tolerance)); - - CAPTURE(to_text_double(got.hi)); - CAPTURE(to_text_double(got.lo)); - CAPTURE(to_text_double_hex(got.hi)); - CAPTURE(to_text_double_hex(got.lo)); - - record_accuracy_sample(op_name, got, expected, diff, accuracy_scale, diff <= tolerance); - CHECK(diff <= tolerance); - } - - [[nodiscard]] mpfr_ref ref_floor(const mpfr_ref& value) - { - return boost::multiprecision::floor(value); - } - - [[nodiscard]] mpfr_ref ref_ceil(const mpfr_ref& value) - { - return boost::multiprecision::ceil(value); - } - - [[nodiscard]] mpfr_ref ref_trunc(const mpfr_ref& value) - { - return value < 0 ? ref_ceil(value) : ref_floor(value); - } - - [[nodiscard]] mpfr_ref ref_fmod(const mpfr_ref& x, const mpfr_ref& y) - { - return x - ref_trunc(x / y) * y; - } - - [[nodiscard]] mpfr_ref ref_round_to_even(const mpfr_ref& value) - { - mpfr_ref rounded = ref_floor(value + mpfr_ref{ "0.5" }); - if ((rounded - value) == mpfr_ref{ "0.5" } && ref_fmod(rounded, mpfr_ref{ 2 }) != mpfr_ref{ 0 }) - rounded -= 1; - return rounded; - } - - [[nodiscard]] mpfr_ref ref_round_half_away_zero(const mpfr_ref& value) - { - return value < 0 - ? ref_ceil(value - mpfr_ref{ "0.5" }) - : ref_floor(value + mpfr_ref{ "0.5" }); - } - - [[nodiscard]] const mpfr_ref& ln2_ref() - { - static const mpfr_ref value = boost::multiprecision::log(mpfr_ref{ 2 }); - return value; - } - - [[nodiscard]] const mpfr_ref& ln10_ref() - { - static const mpfr_ref value = boost::multiprecision::log(mpfr_ref{ 10 }); - return value; - } - - [[nodiscard]] mpfr_ref ref_exp2(const mpfr_ref& value) - { - return boost::multiprecision::exp(value * ln2_ref()); - } - - [[nodiscard]] mpfr_ref ref_log2(const mpfr_ref& value) - { - return boost::multiprecision::log(value) / ln2_ref(); - } - - [[nodiscard]] mpfr_ref ref_log10(const mpfr_ref& value) - { - return boost::multiprecision::log(value) / ln10_ref(); - } - - [[nodiscard]] bool ref_is_integer(const mpfr_ref& value) - { - return boost::multiprecision::floor(value) == value; - } - - [[nodiscard]] mpfr_ref ref_powi(mpfr_ref base, long long exponent) - { - if (exponent == 0) - return mpfr_ref{ 1 }; - - bool invert = exponent < 0; - unsigned long long e = invert - ? static_cast(-(exponent + 1)) + 1ull - : static_cast(exponent); - - mpfr_ref result{ 1 }; - while (e != 0) - { - if ((e & 1ull) != 0) - result *= base; - e >>= 1ull; - if (e != 0) - base *= base; - } - - return invert ? (mpfr_ref{ 1 } / result) : result; - } - - [[nodiscard]] mpfr_ref ref_pow(const mpfr_ref& base, const mpfr_ref& exponent) - { - if (base < 0 && ref_is_integer(exponent)) - { - const long long n = exponent.convert_to(); - const mpfr_ref mag = ref_powi(-base, n); - return (n & 1LL) ? -mag : mag; - } - - return boost::multiprecision::exp(exponent * boost::multiprecision::log(base)); - } - - [[nodiscard]] mpfr_ref ref_ldexp(mpfr_ref value, int exponent) - { - if (exponent > 0) - { - for (int i = 0; i < exponent; ++i) - value *= 2; - } - else if (exponent < 0) - { - for (int i = 0; i < -exponent; ++i) - value /= 2; - } - - return value; - } - - [[nodiscard]] const mpfr_ref& pi_ref() - { - static const mpfr_ref value{ - "3.14159265358979323846264338327950288419716939937510582097494459230781640628620899" - }; - return value; - } - - template - [[nodiscard]] std::string to_scientific_text(const T& value, int digits) - { - return value.str(digits, std::ios_base::scientific); - } - - [[nodiscard]] mpfr_ref random_unit_interval_for_f128(bl::mt19937_64& rng) - { - bl::uniform_real_distribution dist{ f128{ 0.0 }, f128{ 1.0 } }; - return to_ref_exact(dist(rng)); - } - - [[nodiscard]] mpfr_ref random_sine_kernel_argument_for_f128(bl::mt19937_64& rng) - { - bl::uniform_int_distribution sign_dist(0, 1); - - mpfr_ref value = random_unit_interval_for_f128(rng) * (pi_ref() / 4); - if (sign_dist(rng) != 0) - value = -value; - - return value; - } - - [[nodiscard]] mpfr_ref random_sine_reduction_argument_for_f128(bl::mt19937_64& rng) - { - bl::uniform_int_distribution multiple_dist(-1000000LL, 1000000LL); - - const mpfr_ref half_pi = pi_ref() / 2; - const mpfr_ref quarter_pi = pi_ref() / 4; - - mpfr_ref offset = random_unit_interval_for_f128(rng) * (quarter_pi * 2); - offset -= quarter_pi; - - return mpfr_ref{ static_cast(multiple_dist(rng)) } * half_pi + offset; - } - - [[nodiscard]] mpfr_ref random_signed_interval_for_f128(bl::mt19937_64& rng, const mpfr_ref& limit) - { - bl::uniform_int_distribution sign_dist(0, 1); - - mpfr_ref value = random_unit_interval_for_f128(rng) * limit; - if (sign_dist(rng) != 0) - value = -value; - - return value; - } - - [[nodiscard]] mpfr_ref random_positive_for_f128(bl::mt19937_64& rng) - { - mpfr_ref value = abs_ref(to_ref_exact(random_finite_for_f128(rng))); - if (value == 0) - value = mpfr_ref{ "0.5" }; - return value; - } - - [[nodiscard]] mpfr_ref random_nonzero_for_f128(bl::mt19937_64& rng) - { - mpfr_ref value = to_ref_exact(random_finite_for_f128(rng)); - if (value == 0) - value = mpfr_ref{ "0.5" }; - return value; - } - - [[nodiscard]] mpfr_ref random_pow_base_for_f128(bl::mt19937_64& rng) - { - return mpfr_ref{ "0.125" } + random_unit_interval_for_f128(rng) * mpfr_ref{ "7.875" }; - } - - void check_sin_case( - const char* label, - const mpfr_ref& input, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance) - { - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("label: " << label); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "sin", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::sin(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sin(value); }); - } - - void check_cos_case( - const char* label, - const mpfr_ref& input, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance) - { - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("label: " << label); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "cos", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::cos(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::cos(value); }); - } - - void check_ldexp_case(const char* label, const mpfr_ref& input, int exponent) - { - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("label: " << label); - INFO("input_text: " << input_text); - INFO("exponent: " << exponent); - - const f128 input_value = to_f128(input_text.c_str()); - const f128 got = bl::ldexp(input_value, exponent); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_ldexp(to_ref_exact(input_value), exponent); - - mpfr_ref scale = abs_ref(expected); - if (scale < 1) - scale = 1; - - const mpfr_ref tolerance = function_tolerance("ldexp", scale); - const mpfr_ref diff = abs_ref(got_ref - expected); - - CAPTURE(label); - CAPTURE(input_text); - CAPTURE(exponent); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - - CAPTURE(to_text_double(got.hi)); - CAPTURE(to_text_double(got.lo)); - CAPTURE(to_text_double_hex(got.hi)); - CAPTURE(to_text_double_hex(got.lo)); - - record_accuracy_sample("ldexp", got, expected, diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - void check_pow_case( - const char* label, - const mpfr_ref& base, - const mpfr_ref& exponent, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance) - { - const std::string base_text = to_scientific_text(base, printed_digits + 4); - const std::string exponent_text = to_scientific_text(exponent, printed_digits + 4); - - INFO("label: " << label); - INFO("base_text: " << base_text); - INFO("exponent_text: " << exponent_text); - - check_binary_op_with_tolerance( - "pow", - base_text.c_str(), - exponent_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& x, const f128& y) { return bl::pow(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return ref_pow(x, y); }); - } - -} // namespace - - - [[nodiscard]] mpfr_ref ref_remainder_ties_even(const mpfr_ref& x, const mpfr_ref& y) - { - return x - ref_round_to_even(x / y) * y; - } - - [[nodiscard]] mpfr_ref ref_cbrt(const mpfr_ref& value) - { - if (value < 0) - return -boost::multiprecision::cbrt(-value); - return boost::multiprecision::cbrt(value); - } - - [[nodiscard]] mpfr_ref ref_hypot(const mpfr_ref& x, const mpfr_ref& y) - { - return boost::multiprecision::sqrt(x * x + y * y); - } - - [[nodiscard]] mpfr_ref ref_pow10(int exponent) - { - return ref_powi(mpfr_ref{ 10 }, exponent); - } - - [[nodiscard]] mpfr_ref random_unit_symmetric_for_f128(bl::mt19937_64& rng) - { - return random_signed_interval_for_f128(rng, mpfr_ref{ 1.0 }); - } - - [[nodiscard]] mpfr_ref random_atanh_argument_for_f128(bl::mt19937_64& rng) - { - return random_signed_interval_for_f128(rng, mpfr_ref{ "0.95" }); - } - - [[nodiscard]] mpfr_ref random_acosh_argument_for_f128(bl::mt19937_64& rng) - { - return mpfr_ref{ 1.0 } + random_unit_interval_for_f128(rng) * mpfr_ref{ 64.0 }; - } - - [[nodiscard]] mpfr_ref random_log1p_argument_for_f128(bl::mt19937_64& rng) - { - return mpfr_ref{ "-0.95" } + random_unit_interval_for_f128(rng) * mpfr_ref{ "16.95" }; - } - - [[nodiscard]] mpfr_ref random_gamma_positive_for_f128(bl::mt19937_64& rng) - { - return mpfr_ref{ "0.125" } + random_unit_interval_for_f128(rng) * mpfr_ref{ "15.875" }; - } - - [[nodiscard]] mpfr_ref random_erf_argument_for_f128(bl::mt19937_64& rng) - { - return random_signed_interval_for_f128(rng, mpfr_ref{ 4.0 }); - } - - void require_exact_value(const char* label, const f128& got, const f128& expected) - { - CAPTURE(label); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text_double(got.hi)); - CAPTURE(to_text_double(got.lo)); - CAPTURE(to_text_double(expected.hi)); - CAPTURE(to_text_double(expected.lo)); - CAPTURE(to_text_double_hex(got.hi)); - CAPTURE(to_text_double_hex(got.lo)); - CAPTURE(to_text_double_hex(expected.hi)); - CAPTURE(to_text_double_hex(expected.lo)); - - REQUIRE(got.hi == expected.hi); - REQUIRE(got.lo == expected.lo); - } - - [[nodiscard]] bool same_bits(double lhs, double rhs) noexcept - { - return std::bit_cast(lhs) == std::bit_cast(rhs); - } - - void require_canonical_value(const char* label, const f128& got) - { - CAPTURE(label); - CAPTURE(to_text(got)); - CAPTURE(to_text_double_hex(got.hi)); - CAPTURE(to_text_double_hex(got.lo)); - - if (!bl::isfinite(got) || bl::iszero(got)) - return; - - const f128 expected = detail::_f128::renorm(got.hi, got.lo); - CAPTURE(to_text(expected)); - CAPTURE(to_text_double_hex(expected.hi)); - CAPTURE(to_text_double_hex(expected.lo)); - - REQUIRE(same_bits(got.hi, expected.hi)); - REQUIRE(same_bits(got.lo, expected.lo)); - } - - void check_sincos_case( - const char* label, - const mpfr_ref& input, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance) - { - const std::string input_text = to_scientific_text(input, printed_digits + 4); - const f128 input_value = to_f128(input_text.c_str()); - - f128 got_s{}; - f128 got_c{}; - const bool ok = bl::sincos(input_value, got_s, got_c); - - INFO("label: " << label); - INFO("input_text: " << input_text); - REQUIRE(ok); - - const mpfr_ref expected_s = boost::multiprecision::sin(to_ref_exact(input_value)); - const mpfr_ref expected_c = boost::multiprecision::cos(to_ref_exact(input_value)); - - { - const mpfr_ref got_ref = to_ref_exact(got_s); - mpfr_ref accuracy_scale = abs_ref(expected_s); - if (accuracy_scale < 1) - accuracy_scale = 1; - - const mpfr_ref scale = abs_ref(expected_s); - const mpfr_ref tolerance = combined_tolerance("sincos.sin", accuracy_scale, abs_tolerance, rel_tolerance, scale); - - const mpfr_ref diff = abs_ref(got_ref - expected_s); - CAPTURE(to_text(got_s)); - CAPTURE(to_text(expected_s)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - record_accuracy_sample("sincos.sin", got_s, expected_s, diff, accuracy_scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - { - const mpfr_ref got_ref = to_ref_exact(got_c); - mpfr_ref accuracy_scale = abs_ref(expected_c); - if (accuracy_scale < 1) - accuracy_scale = 1; - - const mpfr_ref scale = abs_ref(expected_c); - const mpfr_ref tolerance = combined_tolerance("sincos.cos", accuracy_scale, abs_tolerance, rel_tolerance, scale); - - const mpfr_ref diff = abs_ref(got_ref - expected_c); - CAPTURE(to_text(got_c)); - CAPTURE(to_text(expected_c)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - record_accuracy_sample("sincos.cos", got_c, expected_c, diff, accuracy_scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - } - - void check_remquo_case( - const char* label, - const mpfr_ref& x, - const mpfr_ref& y, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance) - { - const std::string lhs_text = to_scientific_text(x, printed_digits + 4); - const std::string rhs_text = to_scientific_text(y, printed_digits + 4); - - const f128 lhs = to_f128(lhs_text.c_str()); - const f128 rhs = to_f128(rhs_text.c_str()); - - int got_quo = 0; - const f128 got = bl::remquo(lhs, rhs, &got_quo); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_remainder_ties_even(to_ref_exact(lhs), to_ref_exact(rhs)); - - const mpfr_ref n = ref_round_to_even(to_ref_exact(lhs) / to_ref_exact(rhs)); - int expected_quo = static_cast(ref_trunc(ref_fmod(abs_ref(n), mpfr_ref{ 2147483648.0 })).convert_to()); - if (n < 0) - expected_quo = -expected_quo; - - mpfr_ref accuracy_scale = abs_ref(expected); - if (accuracy_scale < 1) - accuracy_scale = 1; - - const mpfr_ref scale = abs_ref(expected); - const mpfr_ref tolerance = combined_tolerance("remquo", accuracy_scale, abs_tolerance, rel_tolerance, scale); - - const mpfr_ref diff = abs_ref(got_ref - expected); - - INFO("label: " << label); - CAPTURE(lhs_text); - CAPTURE(rhs_text); - CAPTURE(got_quo); - CAPTURE(expected_quo); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - - record_accuracy_sample("remquo", got, expected, diff, accuracy_scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - REQUIRE(got_quo == expected_quo); - } - -TEST_CASE("f128 matches MPFR for + - * /", "[fltx][f128][precision][arithmetic]") -{ - accuracy_report_scope report_scope{ "f128 matches MPFR for + - * /" }; - const std::array, 10> cases = {{ - { "1", "2" }, - { "1.25", "2.5" }, - { "-3.75", "2.125" }, - { "1.000000000000000000000000000001", "2.000000000000000000000000000002" }, - { "1234567890123456.125", "0.000000000000000000000000000125" }, - { "3.1415926535897932384626433832795", "2.7182818284590452353602874713527" }, - { "1e-30", "1e-12" }, - { "1e30", "1e-8" }, - { "-8.33333333333333333333333333333", "0.125" }, - { "0.333333333333333333333333333333", "7.000000000000000000000000000001" } - }}; - - for (const auto& [lhs, rhs] : cases) - { - check_binary_op("add", lhs, rhs, - [](const f128& a, const f128& b) { return a + b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a + b; }); - - check_binary_op("subtract", lhs, rhs, - [](const f128& a, const f128& b) { return a - b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a - b; }); - - check_binary_op("multiply", lhs, rhs, - [](const f128& a, const f128& b) { return a * b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a * b; }); - - check_binary_op("divide", lhs, rhs, - [](const f128& a, const f128& b) { return a / b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a / b; }); - } -} - -TEST_CASE("f128 brute-force random arithmetic matches MPFR within tolerance", "[fltx][f128][precision][arithmetic]") -{ - accuracy_report_scope report_scope{ "f128 brute-force random arithmetic matches MPFR within tolerance" }; - bl::mt19937_64 rng{ random_seed }; - - const int count = 128 * random_sample_count_scale; - print_random_run("random arithmetic cases", count); - - for (int i = 0; i < count; ++i) - { - const f128 lhs_value = random_finite_for_f128(rng); - const f128 rhs_value = random_finite_for_f128(rng); - - const std::string lhs_text = to_text(lhs_value); - const std::string rhs_text = to_text(rhs_value); - - INFO("iteration: " << i); - INFO("lhs_text: " << lhs_text); - INFO("rhs_text: " << rhs_text); - - check_binary_op("add", lhs_text.c_str(), rhs_text.c_str(), - [](const f128& a, const f128& b) { return a + b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a + b; }); - - check_binary_op("subtract", lhs_text.c_str(), rhs_text.c_str(), - [](const f128& a, const f128& b) { return a - b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a - b; }); - - check_binary_op("multiply", lhs_text.c_str(), rhs_text.c_str(), - [](const f128& a, const f128& b) { return a * b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a * b; }); - - if (!bl::iszero(rhs_value)) - { - check_binary_op("divide", lhs_text.c_str(), rhs_text.c_str(), - [](const f128& a, const f128& b) { return a / b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a / b; }); - } - } -} - -TEST_CASE("f128 mixed scalar arithmetic matches MPFR within tolerance", "[fltx][f128][precision][arithmetic][scalar]") -{ - accuracy_report_scope report_scope{ "f128 mixed scalar arithmetic matches MPFR within tolerance" }; - - constexpr std::array values{{ - "3.1415926535897932384626433832795028841971", - "-2.7182818284590452353602874713526624977572", - "1.0000000000000000000000000000000001", - "-123456789012345678901234567890.125", - "1e-30", - "1e30" - }}; - - constexpr std::array double_scalars{{ - 0.5, - -1.5, - 3.141592653589793, - -0.125, - 1.0e-15, - -1.0e15 - }}; - - constexpr std::array float_scalars{{ - 0.5f, - -1.25f, - 3.75f, - -0.125f, - 1.0e-7f, - -1.0e7f - }}; - - auto check_all_scalar_orders = [](const char* scalar_kind, auto scalar, const char* value_text) - { - check_scalar_binary_op("add", "f128 + scalar", scalar_kind, value_text, scalar, - [](const f128& a, auto b) { return a + b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a + b; }); - - check_scalar_binary_op("add", "scalar + f128", scalar_kind, value_text, scalar, - [](const f128& a, auto b) { return b + a; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return b + a; }); - - check_scalar_binary_op("subtract", "f128 - scalar", scalar_kind, value_text, scalar, - [](const f128& a, auto b) { return a - b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a - b; }); - - check_scalar_binary_op("subtract", "scalar - f128", scalar_kind, value_text, scalar, - [](const f128& a, auto b) { return b - a; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return b - a; }); - - check_scalar_binary_op("multiply", "f128 * scalar", scalar_kind, value_text, scalar, - [](const f128& a, auto b) { return a * b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a * b; }); - - check_scalar_binary_op("multiply", "scalar * f128", scalar_kind, value_text, scalar, - [](const f128& a, auto b) { return b * a; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return b * a; }); - - check_scalar_binary_op("divide", "f128 / scalar", scalar_kind, value_text, scalar, - [](const f128& a, auto b) { return a / b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a / b; }); - - check_scalar_binary_op("divide", "scalar / f128", scalar_kind, value_text, scalar, - [](const f128& a, auto b) { return b / a; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return b / a; }); - }; - - for (std::size_t i = 0; i < values.size(); ++i) - { - check_all_scalar_orders("double", double_scalars[i], values[i]); - check_all_scalar_orders("float", float_scalars[i], values[i]); - } -} - -TEST_CASE("f128 integer overloads preserve exact integer values", "[fltx][f128][precision][arithmetic][scalar][integer]") -{ - auto check_signed = [](auto rhs, const char* label) - { - const f128 base = to_f128("1.2345678901234567890123456789012345"); - const f128 rhs_value = to_f128(static_cast(rhs)); - const bool rhs_fits_double = detail::_f128::integer_fits_exact_double(rhs); - const double rhs_double = static_cast(rhs); - - auto add_right = [&]() -> f128 { return rhs_fits_double ? f128{ base + rhs_double } : f128{ base + rhs_value }; }; - auto add_left = [&]() -> f128 { return rhs_fits_double ? f128{ rhs_double + base } : f128{ rhs_value + base }; }; - auto sub_right = [&]() -> f128 { return rhs_fits_double ? f128{ base - rhs_double } : f128{ base - rhs_value }; }; - auto sub_left = [&]() -> f128 { return rhs_fits_double ? f128{ rhs_double - base } : f128{ rhs_value - base }; }; - auto mul_right = [&]() -> f128 { return rhs_fits_double ? f128{ base * rhs_double } : f128{ base * rhs_value }; }; - auto mul_left = [&]() -> f128 { return rhs_fits_double ? f128{ rhs_double * base } : f128{ rhs_value * base }; }; - auto div_right = [&]() -> f128 { return rhs_fits_double ? f128{ base / rhs_double } : f128{ base / rhs_value }; }; - auto div_left = [&]() -> f128 { return rhs_fits_double ? f128{ rhs_double / base } : f128{ rhs_value / base }; }; - - f128 got = base; - got += rhs; - require_exact_value(label, got, add_right()); - - got = base; - got -= rhs; - require_exact_value(label, got, sub_right()); - - got = base; - got *= rhs; - require_exact_value(label, got, mul_right()); - - got = base; - got /= rhs; - require_exact_value(label, got, div_right()); - - require_exact_value(label, base + rhs, add_right()); - require_exact_value(label, rhs + base, add_left()); - require_exact_value(label, base - rhs, sub_right()); - require_exact_value(label, rhs - base, sub_left()); - require_exact_value(label, base * rhs, mul_right()); - require_exact_value(label, rhs * base, mul_left()); - require_exact_value(label, base / rhs, div_right()); - require_exact_value(label, rhs / base, div_left()); - }; - - auto check_unsigned = [](auto rhs, const char* label) - { - const f128 base = to_f128("1.2345678901234567890123456789012345"); - const f128 rhs_value = to_f128(static_cast(rhs)); - const bool rhs_fits_double = detail::_f128::integer_fits_exact_double(rhs); - const double rhs_double = static_cast(rhs); - - auto add_right = [&]() -> f128 { return rhs_fits_double ? f128{ base + rhs_double } : f128{ base + rhs_value }; }; - auto add_left = [&]() -> f128 { return rhs_fits_double ? f128{ rhs_double + base } : f128{ rhs_value + base }; }; - auto sub_right = [&]() -> f128 { return rhs_fits_double ? f128{ base - rhs_double } : f128{ base - rhs_value }; }; - auto sub_left = [&]() -> f128 { return rhs_fits_double ? f128{ rhs_double - base } : f128{ rhs_value - base }; }; - auto mul_right = [&]() -> f128 { return rhs_fits_double ? f128{ base * rhs_double } : f128{ base * rhs_value }; }; - auto mul_left = [&]() -> f128 { return rhs_fits_double ? f128{ rhs_double * base } : f128{ rhs_value * base }; }; - auto div_right = [&]() -> f128 { return rhs_fits_double ? f128{ base / rhs_double } : f128{ base / rhs_value }; }; - auto div_left = [&]() -> f128 { return rhs_fits_double ? f128{ rhs_double / base } : f128{ rhs_value / base }; }; - - f128 got = base; - got += rhs; - require_exact_value(label, got, add_right()); - - got = base; - got -= rhs; - require_exact_value(label, got, sub_right()); - - got = base; - got *= rhs; - require_exact_value(label, got, mul_right()); - - got = base; - got /= rhs; - require_exact_value(label, got, div_right()); - - require_exact_value(label, base + rhs, add_right()); - require_exact_value(label, rhs + base, add_left()); - require_exact_value(label, base - rhs, sub_right()); - require_exact_value(label, rhs - base, sub_left()); - require_exact_value(label, base * rhs, mul_right()); - require_exact_value(label, rhs * base, mul_left()); - require_exact_value(label, base / rhs, div_right()); - require_exact_value(label, rhs / base, div_left()); - }; - - check_signed(std::int8_t{ -7 }, "int8"); - check_unsigned(std::uint8_t{ 7 }, "uint8"); - check_signed(std::int16_t{ -257 }, "int16"); - check_unsigned(std::uint16_t{ 257 }, "uint16"); - check_signed(std::int32_t{ -65537 }, "int32"); - check_unsigned(std::uint32_t{ 65537 }, "uint32"); - check_signed(static_cast(-9007199254740993ll), "int64"); - check_unsigned(std::uint64_t{ 9007199254740993ull }, "uint64"); -} - -TEST_CASE("f128 sin matches MPFR for fixed values", "[fltx][f128][precision][transcendental][trig][sin]") -{ - accuracy_report_scope report_scope{ "f128 sin matches MPFR for fixed values" }; - const mpfr_ref pi = pi_ref(); - const mpfr_ref half_pi = pi / 2; - const mpfr_ref quarter_pi = pi / 4; - const mpfr_ref third_pi = pi / 3; - const mpfr_ref sixth_pi = pi / 6; - const mpfr_ref tiny{ "1e-20" }; - - const mpfr_ref reduced_abs_tolerance{ "1e-31" }; - const mpfr_ref reduced_rel_tolerance{ "5e-30" }; - const mpfr_ref reduction_abs_tolerance{ "1e-29" }; - const mpfr_ref reduction_rel_tolerance{ "1e-29" }; - - check_sin_case("zero", mpfr_ref{ 0 }, reduced_abs_tolerance, reduced_rel_tolerance); - check_sin_case("minus_zero", mpfr_ref{ "-0" }, reduced_abs_tolerance, reduced_rel_tolerance); - check_sin_case("tiny_positive", tiny, reduced_abs_tolerance, reduced_rel_tolerance); - check_sin_case("tiny_negative", -tiny, reduced_abs_tolerance, reduced_rel_tolerance); - check_sin_case("pi_over_6", sixth_pi, reduced_abs_tolerance, reduced_rel_tolerance); - check_sin_case("pi_over_4", quarter_pi, reduced_abs_tolerance, reduced_rel_tolerance); - check_sin_case("pi_over_3", third_pi, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("pi_over_2", half_pi, reduction_abs_tolerance, reduction_rel_tolerance); -} - -TEST_CASE("f128 sin matches MPFR for fixed argument-reduction stress values", "[fltx][f128][precision][transcendental][trig][sin][reduction]") -{ - accuracy_report_scope report_scope{ "f128 sin matches MPFR for fixed argument-reduction stress values", false }; - const mpfr_ref pi = pi_ref(); - const mpfr_ref two_pi = pi * 2; - const mpfr_ref tiny{ "1e-20" }; - - const mpfr_ref reduction_abs_tolerance{ "1e-29" }; - const mpfr_ref reduction_rel_tolerance{ "1e-29" }; - - check_sin_case("pi_minus_tiny", pi - tiny, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("pi_plus_tiny", pi + tiny, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("two_pi_minus_tiny", two_pi - tiny, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("two_pi_plus_tiny", two_pi + tiny, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("large_decimal", mpfr_ref{ "1000000.25" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("negative_large_decimal", mpfr_ref{ "-1000000.25" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("million_pi_plus_offset", mpfr_ref{ "1000000" } * pi + mpfr_ref{ "0.125" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("negative_million_pi_plus_offset", mpfr_ref{ "-1000000" } * pi + mpfr_ref{ "0.125" }, reduction_abs_tolerance, reduction_rel_tolerance); -} - -TEST_CASE("f128 sin matches MPFR on random reduced-range inputs", "[fltx][f128][precision][transcendental][trig][sin]") -{ - accuracy_report_scope report_scope{ "f128 sin matches MPFR on random reduced-range inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-31" }; - const mpfr_ref rel_tolerance{ "5e-30" }; - print_random_run("random reduced-range sin cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_sine_kernel_argument_for_f128(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "sin", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::sin(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sin(value); }); - } -} - -TEST_CASE("f128 sin matches MPFR on random range-reduced inputs away from zero-crossings", "[fltx][f128][precision][transcendental][trig][sin][reduction]") -{ - accuracy_report_scope report_scope{ "f128 sin matches MPFR on random range-reduced inputs away from zero-crossings" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - const mpfr_ref zero_crossing_threshold{ "0.125" }; - print_random_run("random range-reduced sin cases away from zero-crossings", count); - - for (int i = 0, attempts = 0; i < count; ++attempts) - { - const mpfr_ref input = random_sine_reduction_argument_for_f128(rng); - const mpfr_ref expected = boost::multiprecision::sin(input); - if (abs_ref(expected) < zero_crossing_threshold) - continue; - - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("attempt: " << attempts); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "sin", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::sin(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sin(value); }); - - ++i; - } -} - -TEST_CASE("f128 sin matches MPFR on random range-reduced zero-crossing stress inputs", "[fltx][f128][precision][transcendental][trig][sin][reduction][zero-crossing]") -{ - accuracy_report_scope report_scope{ "f128 sin matches MPFR on random range-reduced zero-crossing stress inputs", false }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 64 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - const mpfr_ref zero_crossing_threshold{ "0.125" }; - print_random_run("random range-reduced sin zero-crossing stress cases", count); - - for (int i = 0, attempts = 0; i < count; ++attempts) - { - const mpfr_ref input = random_sine_reduction_argument_for_f128(rng); - const mpfr_ref expected = boost::multiprecision::sin(input); - if (abs_ref(expected) >= zero_crossing_threshold) - continue; - - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("attempt: " << attempts); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "sin", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::sin(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sin(value); }); - - ++i; - } -} - -TEST_CASE("f128 cos matches MPFR for fixed values", "[fltx][f128][precision][transcendental][trig][cos]") -{ - accuracy_report_scope report_scope{ "f128 cos matches MPFR for fixed values" }; - const mpfr_ref pi = pi_ref(); - const mpfr_ref quarter_pi = pi / 4; - const mpfr_ref third_pi = pi / 3; - const mpfr_ref sixth_pi = pi / 6; - const mpfr_ref tiny{ "1e-20" }; - - const mpfr_ref reduced_abs_tolerance{ "1e-31" }; - const mpfr_ref reduced_rel_tolerance{ "5e-30" }; - const mpfr_ref reduction_abs_tolerance{ "1e-29" }; - const mpfr_ref reduction_rel_tolerance{ "1e-29" }; - - check_cos_case("zero", mpfr_ref{ 0 }, reduced_abs_tolerance, reduced_rel_tolerance); - check_cos_case("minus_zero", mpfr_ref{ "-0" }, reduced_abs_tolerance, reduced_rel_tolerance); - check_cos_case("tiny_positive", tiny, reduced_abs_tolerance, reduced_rel_tolerance); - check_cos_case("tiny_negative", -tiny, reduced_abs_tolerance, reduced_rel_tolerance); - check_cos_case("pi_over_6", sixth_pi, reduced_abs_tolerance, reduced_rel_tolerance); - check_cos_case("pi_over_4", quarter_pi, reduced_abs_tolerance, reduced_rel_tolerance); - check_cos_case("pi_over_3", third_pi, reduction_abs_tolerance, reduction_rel_tolerance); -} - -TEST_CASE("f128 cos matches MPFR for fixed argument-reduction stress values", "[fltx][f128][precision][transcendental][trig][cos][reduction]") -{ - accuracy_report_scope report_scope{ "f128 cos matches MPFR for fixed argument-reduction stress values", false }; - const mpfr_ref pi = pi_ref(); - const mpfr_ref half_pi = pi / 2; - const mpfr_ref two_pi = pi * 2; - const mpfr_ref tiny{ "1e-20" }; - - const mpfr_ref reduction_abs_tolerance{ "1e-29" }; - const mpfr_ref reduction_rel_tolerance{ "1e-29" }; - - check_cos_case("pi_over_2", half_pi, reduction_abs_tolerance, reduction_rel_tolerance); - check_cos_case("pi_minus_tiny", pi - tiny, reduction_abs_tolerance, reduction_rel_tolerance); - check_cos_case("pi_plus_tiny", pi + tiny, reduction_abs_tolerance, reduction_rel_tolerance); - check_cos_case("two_pi_minus_tiny", two_pi - tiny, reduction_abs_tolerance, reduction_rel_tolerance); - check_cos_case("two_pi_plus_tiny", two_pi + tiny, reduction_abs_tolerance, reduction_rel_tolerance); - check_cos_case("large_decimal", mpfr_ref{ "1000000.25" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_cos_case("negative_large_decimal", mpfr_ref{ "-1000000.25" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_cos_case("million_pi_plus_offset", mpfr_ref{ "1000000" } * pi + mpfr_ref{ "0.125" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_cos_case("negative_million_pi_plus_offset", mpfr_ref{ "-1000000" } * pi + mpfr_ref{ "0.125" }, reduction_abs_tolerance, reduction_rel_tolerance); -} - -TEST_CASE("f128 cos matches MPFR on random reduced-range inputs", "[fltx][f128][precision][transcendental][trig][cos]") -{ - accuracy_report_scope report_scope{ "f128 cos matches MPFR on random reduced-range inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-31" }; - const mpfr_ref rel_tolerance{ "5e-30" }; - print_random_run("random reduced-range cos cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_sine_kernel_argument_for_f128(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "cos", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::cos(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::cos(value); }); - } -} - -TEST_CASE("f128 cos matches MPFR on random range-reduced inputs away from zero-crossings", "[fltx][f128][precision][transcendental][trig][cos][reduction]") -{ - accuracy_report_scope report_scope{ "f128 cos matches MPFR on random range-reduced inputs away from zero-crossings" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - const mpfr_ref zero_crossing_threshold{ "0.125" }; - print_random_run("random range-reduced cos cases away from zero-crossings", count); - - for (int i = 0, attempts = 0; i < count; ++attempts) - { - const mpfr_ref input = random_sine_reduction_argument_for_f128(rng); - const mpfr_ref expected = boost::multiprecision::cos(input); - if (abs_ref(expected) < zero_crossing_threshold) - continue; - - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("attempt: " << attempts); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "cos", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::cos(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::cos(value); }); - - ++i; - } -} - -TEST_CASE("f128 cos matches MPFR on random range-reduced zero-crossing stress inputs", "[fltx][f128][precision][transcendental][trig][cos][reduction][zero-crossing]") -{ - accuracy_report_scope report_scope{ "f128 cos matches MPFR on random range-reduced zero-crossing stress inputs", false }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 64 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - const mpfr_ref zero_crossing_threshold{ "0.125" }; - print_random_run("random range-reduced cos zero-crossing stress cases", count); - - for (int i = 0, attempts = 0; i < count; ++attempts) - { - const mpfr_ref input = random_sine_reduction_argument_for_f128(rng); - const mpfr_ref expected = boost::multiprecision::cos(input); - if (abs_ref(expected) >= zero_crossing_threshold) - continue; - - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("attempt: " << attempts); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "cos", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::cos(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::cos(value); }); - - ++i; - } -} - -TEST_CASE("f128 floor ceil trunc and round match MPFR for fixed values", "[fltx][f128][precision][math][rounding]") -{ - accuracy_report_scope report_scope{ "f128 floor ceil trunc and round match MPFR for fixed values" }; - const std::array cases = {{ - "0", - "-0", - "0.25", - "-0.25", - "0.5", - "-0.5", - "1.5", - "-1.5", - "2.5", - "-2.5", - "0.999999999999999999999999999999", - "1.000000000000000000000000000001", - "-0.999999999999999999999999999999", - "-1.000000000000000000000000000001", - "1234567890123456.000000000000000000000000000001", - "-1234567890123456.000000000000000000000000000001" - }}; - - for (const char* input : cases) - { - check_unary_op("floor", input, - [](const f128& value) { return bl::floor(value); }, - [](const mpfr_ref& value) { return ref_floor(value); }); - - check_unary_op("ceil", input, - [](const f128& value) { return bl::ceil(value); }, - [](const mpfr_ref& value) { return ref_ceil(value); }); - - check_unary_op("trunc", input, - [](const f128& value) { return bl::trunc(value); }, - [](const mpfr_ref& value) { return ref_trunc(value); }); - - check_unary_op("round", input, - [](const f128& value) { return bl::round(value); }, - [](const mpfr_ref& value) { return ref_round_half_away_zero(value); }); - } -} - -TEST_CASE("f128 floor ceil trunc and round match MPFR for large-limb regression cases", "[fltx][f128][precision][math][rounding]") -{ - accuracy_report_scope report_scope{ "f128 floor ceil trunc and round match MPFR for large-limb regression cases" }; - check_unary_op( - "floor", - "4.6958550912494028428400315673292717414e+19", - [](const f128& value) { return bl::floor(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::floor(value); }); - - check_unary_op( - "trunc", - "-1.5848854675958108400285213569604012722e+23", - [](const f128& value) { return bl::trunc(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::trunc(value); }); -} - -TEST_CASE("f128 floor ceil trunc and round match MPFR on random finite inputs", "[fltx][f128][precision][math][rounding]") -{ - accuracy_report_scope report_scope{ "f128 floor ceil trunc and round match MPFR on random finite inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - print_random_run("random floor/ceil/trunc/round cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = to_ref_exact(random_finite_for_f128(rng)); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op("floor", input_text.c_str(), - [](const f128& value) { return bl::floor(value); }, - [](const mpfr_ref& value) { return ref_floor(value); }); - - check_unary_op("ceil", input_text.c_str(), - [](const f128& value) { return bl::ceil(value); }, - [](const mpfr_ref& value) { return ref_ceil(value); }); - - check_unary_op("trunc", input_text.c_str(), - [](const f128& value) { return bl::trunc(value); }, - [](const mpfr_ref& value) { return ref_trunc(value); }); - - check_unary_op("round", input_text.c_str(), - [](const f128& value) { return bl::round(value); }, - [](const mpfr_ref& value) { return ref_round_half_away_zero(value); }); - } -} - -TEST_CASE("f128 fmod matches MPFR for fixed values", "[fltx][f128][precision][math][fmod]") -{ - accuracy_report_scope report_scope{ "f128 fmod matches MPFR for fixed values" }; - const std::array, 12> cases = {{ - { "5.25", "2" }, - { "-5.25", "2" }, - { "5.25", "-2" }, - { "-5.25", "-2" }, - { "1.000000000000000000000000000001", "0.1" }, - { "-1.000000000000000000000000000001", "0.1" }, - { "123456789.125", "0.5" }, - { "-123456789.125", "0.5" }, - { "1e-20", "3e-21" }, - { "-1e20", "3.125" }, - { "-1.8529511283991559001345365170060183648e+06", "-9.2032434723707283356667078971731995853e+04" }, - { "2.0070307529846201810885555445715861468e+22", "-6.6186399950942319874533902621549657056e+21" } - }}; - - for (const auto& [lhs, rhs] : cases) - { - check_binary_op("fmod", lhs, rhs, - [](const f128& x, const f128& y) { return bl::fmod(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return ref_fmod(x, y); }); - } -} - -TEST_CASE("f128 fmod matches MPFR for huge-quotient regression cases", "[fltx][f128][precision][math][fmod]") -{ - accuracy_report_scope report_scope{ "f128 fmod matches MPFR for huge-quotient regression cases" }; - check_binary_op( - "fmod", - "4.6958550912494028428400315673292717414e+19", - "2.9410562077176174010123838366180003482e+02", - [](const f128& lhs, const f128& rhs) { return bl::fmod(lhs, rhs); }, - [](const mpfr_ref& lhs, const mpfr_ref& rhs) { return boost::multiprecision::fmod(lhs, rhs); }); - - // Domain sweep regression: 0x1.fffffffffffffp+899 mod -7.5 is exactly 0.5. - const f128 lhs = f128{ std::nextafter(std::ldexp(1.0, 900), 0.0), 0.0 }; - const f128 rhs = f128{ -7.5, 0.0 }; - require_exact_value("fmod.domain.max-p899.mod7p5", bl::fmod(lhs, rhs), f128{ 0.5, 0.0 }); -} - -TEST_CASE("f128 remainder and remquo handle exact half ties with noncanonical halves", "[fltx][f128][precision][math][remainder][remquo]") -{ - accuracy_report_scope report_scope{ "f128 remainder and remquo handle exact half ties with noncanonical halves" }; - - const f128 lhs{ 0x1.8000000000000p+0, 0x1.0000000000000p-60 }; - const f128 rhs{ -0x1.8000000000000p+1, -0x1.0000000000000p-59 }; - - require_exact_value("remainder.domain.exact-half.tie-even", bl::remainder(lhs, rhs), lhs); - - int quotient = 12345; - require_exact_value("remquo.domain.exact-half.tie-even", bl::remquo(lhs, rhs, "ient), lhs); - REQUIRE(quotient == 0); -} - -TEST_CASE("f128 fmod matches MPFR on random finite inputs", "[fltx][f128][precision][math][fmod]") -{ - accuracy_report_scope report_scope{ "f128 fmod matches MPFR on random finite inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - print_random_run("random fmod cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref lhs = to_ref_exact(random_finite_for_f128(rng)); - const mpfr_ref rhs = random_nonzero_for_f128(rng); - - const std::string lhs_text = to_scientific_text(lhs, printed_digits + 4); - const std::string rhs_text = to_scientific_text(rhs, printed_digits + 4); - - INFO("iteration: " << i); - INFO("lhs_text: " << lhs_text); - INFO("rhs_text: " << rhs_text); - - check_binary_op_with_tolerance( - "fmod", - lhs_text.c_str(), - rhs_text.c_str(), - mpfr_ref{ "1e-29" }, - mpfr_ref{ "1e-29" }, - [](const f128& x, const f128& y) { return bl::fmod(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return ref_fmod(x, y); }); - } -} - -TEST_CASE("f128 sqrt matches MPFR for fixed values", "[fltx][f128][precision][math][sqrt]") -{ - accuracy_report_scope report_scope{ "f128 sqrt matches MPFR for fixed values" }; - const std::array cases = {{ - "0", - "1", - "2", - "4", - "1e-30", - "1e30", - "0.125", - "123456789.125" - }}; - - for (const char* input : cases) - { - check_unary_op("sqrt", input, - [](const f128& value) { return bl::sqrt(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sqrt(value); }); - } -} - -TEST_CASE("f128 sqrt matches MPFR on random positive inputs", "[fltx][f128][precision][math][sqrt]") -{ - accuracy_report_scope report_scope{ "f128 sqrt matches MPFR on random positive inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - print_random_run("random sqrt cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_positive_for_f128(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op("sqrt", input_text.c_str(), - [](const f128& value) { return bl::sqrt(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sqrt(value); }); - } -} - -TEST_CASE("f128 ldexp matches MPFR for fixed values", "[fltx][f128][precision][math][ldexp]") -{ - accuracy_report_scope report_scope{ "f128 ldexp matches MPFR for fixed values" }; - const std::array, 10> cases = {{ - { "0", 0 }, - { "1", 0 }, - { "1", 1 }, - { "1", -1 }, - { "1.5", 10 }, - { "-1.5", 10 }, - { "3.1415926535897932384626433832795", -20 }, - { "1e-20", 80 }, - { "1e20", -80 }, - { "123456789.125", 37 } - }}; - - for (const auto& [input, exponent] : cases) - check_ldexp_case("ldexp", mpfr_ref{ input }, exponent); -} - -TEST_CASE("f128 ldexp matches MPFR on random finite inputs", "[fltx][f128][precision][math][ldexp]") -{ - accuracy_report_scope report_scope{ "f128 ldexp matches MPFR on random finite inputs" }; - bl::mt19937_64 rng{ random_seed }; - bl::uniform_int_distribution exponent_dist(-120, 120); - - constexpr int count = 128 * random_sample_count_scale; - print_random_run("random ldexp cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = to_ref_exact(random_finite_for_f128(rng)); - const int exponent = exponent_dist(rng); - - INFO("iteration: " << i); - check_ldexp_case("ldexp", input, exponent); - } -} - -TEST_CASE("f128 exp matches MPFR for fixed values", "[fltx][f128][precision][transcendental][exp]") -{ - accuracy_report_scope report_scope{ "f128 exp matches MPFR for fixed values" }; - const std::array cases = {{ - "-10", - "-1", - "-0.125", - "0", - "0.125", - "1", - "10", - "20" - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "exp", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::exp(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::exp(value); }); - } -} - -TEST_CASE("f128 exp matches MPFR on random moderate inputs", "[fltx][f128][precision][transcendental][exp]") -{ - accuracy_report_scope report_scope{ "f128 exp matches MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random exp cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_signed_interval_for_f128(rng, mpfr_ref{ 20 }); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "exp", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::exp(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::exp(value); }); - } -} - -TEST_CASE("f128 exp2 matches MPFR for fixed values", "[fltx][f128][precision][transcendental][exp2]") -{ - accuracy_report_scope report_scope{ "f128 exp2 matches MPFR for fixed values" }; - const std::array cases = {{ - "-10", - "-1", - "-0.125", - "0", - "0.125", - "1", - "10", - "20" - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "exp2", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::exp2(value); }, - [](const mpfr_ref& value) { return ref_exp2(value); }); - } -} - -TEST_CASE("f128 exp2 matches MPFR on random moderate inputs", "[fltx][f128][precision][transcendental][exp2]") -{ - accuracy_report_scope report_scope{ "f128 exp2 matches MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random exp2 cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_signed_interval_for_f128(rng, mpfr_ref{ 20 }); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "exp2", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::exp2(value); }, - [](const mpfr_ref& value) { return ref_exp2(value); }); - } -} - -TEST_CASE("f128 log matches MPFR for fixed values", "[fltx][f128][precision][transcendental][log]") -{ - accuracy_report_scope report_scope{ "f128 log matches MPFR for fixed values" }; - const std::array cases = {{ - "0.125", - "0.5", - "0.999999999999999999999999999999", - "1", - "1.000000000000000000000000000001", - "2", - "10", - "123456789.125" - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "log", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::log(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::log(value); }); - } -} - -TEST_CASE("f128 log matches MPFR on random positive inputs", "[fltx][f128][precision][transcendental][log]") -{ - accuracy_report_scope report_scope{ "f128 log matches MPFR on random positive inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random log cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_positive_for_f128(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "log", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::log(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::log(value); }); - } -} - -TEST_CASE("f128 log2 matches MPFR for fixed values", "[fltx][f128][precision][transcendental][log2]") -{ - accuracy_report_scope report_scope{ "f128 log2 matches MPFR for fixed values" }; - const std::array cases = {{ - "0.125", - "0.5", - "0.999999999999999999999999999999", - "1", - "1.000000000000000000000000000001", - "2", - "10", - "123456789.125" - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "log2", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::log2(value); }, - [](const mpfr_ref& value) { return ref_log2(value); }); - } -} - -TEST_CASE("f128 log2 matches MPFR on random positive inputs", "[fltx][f128][precision][transcendental][log2]") -{ - accuracy_report_scope report_scope{ "f128 log2 matches MPFR on random positive inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random log2 cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_positive_for_f128(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "log2", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::log2(value); }, - [](const mpfr_ref& value) { return ref_log2(value); }); - } -} - -TEST_CASE("f128 log10 matches MPFR for fixed values", "[fltx][f128][precision][transcendental][log10]") -{ - accuracy_report_scope report_scope{ "f128 log10 matches MPFR for fixed values" }; - const std::array cases = {{ - "0.125", - "0.5", - "0.999999999999999999999999999999", - "1", - "1.000000000000000000000000000001", - "2", - "10", - "123456789.125" - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "log10", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::log10(value); }, - [](const mpfr_ref& value) { return ref_log10(value); }); - } -} - -TEST_CASE("f128 log10 matches MPFR on random positive inputs", "[fltx][f128][precision][transcendental][log10]") -{ - accuracy_report_scope report_scope{ "f128 log10 matches MPFR on random positive inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random log10 cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_positive_for_f128(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "log10", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::log10(value); }, - [](const mpfr_ref& value) { return ref_log10(value); }); - } -} - -TEST_CASE("f128 pow matches MPFR for fixed values", "[fltx][f128][precision][transcendental][pow]") -{ - accuracy_report_scope report_scope{ "f128 pow matches MPFR for fixed values" }; - const mpfr_ref abs_tolerance = decimal_epsilon(checked_digits); - const mpfr_ref rel_tolerance = decimal_epsilon(checked_digits); - - check_pow_case("two_to_ten", mpfr_ref{ 2 }, mpfr_ref{ 10 }, abs_tolerance, rel_tolerance); - check_pow_case("two_to_minus_ten", mpfr_ref{ 2 }, mpfr_ref{ -10 }, abs_tolerance, rel_tolerance); - check_pow_case("minus_two_to_three", mpfr_ref{ -2 }, mpfr_ref{ 3 }, abs_tolerance, rel_tolerance); - check_pow_case("minus_two_to_four", mpfr_ref{ -2 }, mpfr_ref{ 4 }, abs_tolerance, rel_tolerance); - check_pow_case("minus_two_to_minus_three", mpfr_ref{ -2 }, mpfr_ref{ -3 }, abs_tolerance, rel_tolerance); - check_pow_case("ten_to_half", mpfr_ref{ 10 }, mpfr_ref{ "0.5" }, abs_tolerance, rel_tolerance); - check_pow_case("half_to_ten", mpfr_ref{ "0.5" }, mpfr_ref{ 10 }, abs_tolerance, rel_tolerance); - check_pow_case("oneish_to_large", mpfr_ref{ "1.000000000000000000000000000001" }, mpfr_ref{ "123.5" }, abs_tolerance, rel_tolerance); - check_pow_case("fractional_exp", mpfr_ref{ "123.456" }, mpfr_ref{ "0.125" }, abs_tolerance, rel_tolerance); - check_pow_case("tiny_base", mpfr_ref{ "1e-10" }, mpfr_ref{ 2 }, abs_tolerance, rel_tolerance); - check_pow_case("large_base_negative_exp", mpfr_ref{ "1e10" }, mpfr_ref{ -2 }, abs_tolerance, rel_tolerance); -} - -TEST_CASE("f128 pow matches MPFR on random positive-base inputs", "[fltx][f128][precision][transcendental][pow]") -{ - accuracy_report_scope report_scope{ "f128 pow matches MPFR on random positive-base inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance = decimal_epsilon(checked_digits); - const mpfr_ref rel_tolerance = decimal_epsilon(checked_digits); - print_random_run("random pow cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref base = random_pow_base_for_f128(rng); - const mpfr_ref exponent = random_signed_interval_for_f128(rng, mpfr_ref{ 8 }); - - INFO("iteration: " << i); - check_pow_case("random", base, exponent, abs_tolerance, rel_tolerance); - } -} - -TEST_CASE("f128 pow follows one-base special-value conventions", "[fltx][f128][precision][transcendental][pow]") -{ - accuracy_report_scope report_scope{ "f128 pow follows one-base special-value conventions" }; - - const f128 one{ 1.0 }; - const f128 neg_one{ -1.0 }; - const f128 pos_inf{ std::numeric_limits::infinity(), 0.0 }; - const f128 neg_inf{ -std::numeric_limits::infinity(), 0.0 }; - const f128 nan{ std::numeric_limits::quiet_NaN(), 0.0 }; - - require_exact_value("pow(1, nan)", bl::pow(one, nan), one); - require_exact_value("pow(1, +inf)", bl::pow(one, pos_inf), one); - require_exact_value("pow(1, -inf)", bl::pow(one, neg_inf), one); - require_exact_value("pow(-1, +inf)", bl::pow(neg_one, pos_inf), one); - require_exact_value("pow(-1, -inf)", bl::pow(neg_one, neg_inf), one); - - require_exact_value("pow.double(1, nan)", bl::pow(one, std::numeric_limits::quiet_NaN()), one); - require_exact_value("pow.double(1, +inf)", bl::pow(one, std::numeric_limits::infinity()), one); - require_exact_value("pow.double(-1, -inf)", bl::pow(neg_one, -std::numeric_limits::infinity()), one); -} - - -TEST_CASE("f128 utility math helpers behave correctly for fixed values", "[fltx][f128][math][utility]") -{ - accuracy_report_scope report_scope{ "f128 utility math helpers behave correctly for fixed values" }; - - check_unary_op("recip", "2.5", - [](const f128& value) { return bl::recip(value); }, - [](const mpfr_ref& value) { return mpfr_ref{ 1 } / value; }); - - check_unary_op("recip", "-0.125", - [](const f128& value) { return bl::recip(value); }, - [](const mpfr_ref& value) { return mpfr_ref{ 1 } / value; }); - - check_binary_op("fdim", "5.25", "2.0", - [](const f128& x, const f128& y) { return bl::fdim(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return x > y ? (x - y) : mpfr_ref{ 0 }; }); - - check_binary_op("fdim", "-5.25", "2.0", - [](const f128& x, const f128& y) { return bl::fdim(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return x > y ? (x - y) : mpfr_ref{ 0 }; }); - - { - const f128 got = bl::abs(to_f128("-123.5")); - require_exact_value("abs", got, to_f128("123.5")); - } - { - const f128 got = bl::fabs(to_f128("-0.25")); - require_exact_value("fabs", got, to_f128("0.25")); - } - { - const f128 got = bl::clamp(to_f128("-5"), to_f128("-2"), to_f128("3")); - require_exact_value("clamp.low", got, to_f128("-2")); - } - { - const f128 got = bl::clamp(to_f128("1.5"), to_f128("-2"), to_f128("3")); - require_exact_value("clamp.mid", got, to_f128("1.5")); - } - { - const f128 got = bl::clamp(to_f128("5"), to_f128("-2"), to_f128("3")); - require_exact_value("clamp.high", got, to_f128("3")); - } - { - const f128 got = bl::fma(to_f128("1.25"), to_f128("2.5"), to_f128("-0.5")); - const mpfr_ref expected = to_ref_exact(to_f128("1.25")) * to_ref_exact(to_f128("2.5")) + to_ref_exact(to_f128("-0.5")); - const mpfr_ref diff = abs_ref(to_ref_exact(got) - expected); - mpfr_ref scale = abs_ref(expected); - if (scale < 1) - scale = 1; - const mpfr_ref tolerance = function_tolerance("fma", scale); - record_accuracy_sample("fma", got, expected, diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - { - const f128 nan = std::numeric_limits::quiet_NaN(); - const f128 pos = to_f128("2.5"); - const f128 neg = to_f128("-3.5"); - const f128 pos_zero{ 0.0, 0.0 }; - const f128 neg_zero{ -0.0, 0.0 }; - - require_exact_value("fmin", bl::fmin(pos, neg), neg); - require_exact_value("fmax", bl::fmax(pos, neg), pos); - require_exact_value("fmin.nan", bl::fmin(nan, pos), pos); - require_exact_value("fmax.nan", bl::fmax(nan, neg), neg); - require_exact_value("fmin.zero", bl::fmin(pos_zero, neg_zero), neg_zero); - require_exact_value("fmax.zero", bl::fmax(pos_zero, neg_zero), pos_zero); - - require_exact_value("copysign.pos_to_neg", bl::copysign(to_f128("1.25"), neg), to_f128("-1.25")); - require_exact_value("copysign.neg_to_pos", bl::copysign(to_f128("-1.25"), pos), to_f128("1.25")); - } - { - REQUIRE(bl::isnan(std::numeric_limits::quiet_NaN())); - REQUIRE(bl::isinf(std::numeric_limits::infinity())); - REQUIRE(bl::isfinite(to_f128("1.25"))); - REQUIRE(bl::iszero(f128{ 0.0, 0.0 })); - REQUIRE(bl::ispositive(to_f128("0.25"))); - REQUIRE(!bl::ispositive(to_f128("-0.25"))); - REQUIRE(bl::signbit(f128{ -0.0, 0.0 })); - REQUIRE(!bl::signbit(f128{ 0.0, 0.0 })); - REQUIRE(bl::fpclassify(std::numeric_limits::quiet_NaN()) == FP_NAN); - REQUIRE(bl::fpclassify(std::numeric_limits::infinity()) == FP_INFINITE); - REQUIRE(bl::fpclassify(f128{ 0.0, 0.0 }) == FP_ZERO); - REQUIRE(bl::isnormal(to_f128("1.0"))); - REQUIRE(bl::isunordered(std::numeric_limits::quiet_NaN(), to_f128("1.0"))); - REQUIRE(bl::isgreater(to_f128("2.0"), to_f128("1.0"))); - REQUIRE(bl::isgreaterequal(to_f128("2.0"), to_f128("2.0"))); - REQUIRE(bl::isless(to_f128("1.0"), to_f128("2.0"))); - REQUIRE(bl::islessequal(to_f128("2.0"), to_f128("2.0"))); - REQUIRE(bl::islessgreater(to_f128("1.0"), to_f128("2.0"))); - } - - { - const std::array exponents = {{ -8, -3, -1, 0, 1, 3, 8, 16, 32 }}; - for (int exponent : exponents) - { - const f128 got = bl::pow10_128(exponent); - const mpfr_ref expected = ref_pow10(exponent); - const mpfr_ref got_ref = to_ref_exact(got); - mpfr_ref scale = abs_ref(expected); - if (scale < 1) - scale = 1; - const mpfr_ref tolerance = function_tolerance("pow10_128", scale); - const mpfr_ref diff = abs_ref(got_ref - expected); - CAPTURE(exponent); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - record_accuracy_sample("pow10_128", got, expected, diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - } - { - require_exact_value("round_to_decimals.2", bl::round_to_decimals(to_f128("1.2345"), 2), to_f128("1.23")); - require_exact_value("round_to_decimals.3", bl::round_to_decimals(to_f128("1.2345"), 3), to_f128("1.234")); - require_exact_value("round_to_decimals.tie_even", bl::round_to_decimals(to_f128("1.2355"), 3), to_f128("1.236")); - REQUIRE(bl::lround(to_f128("2.5")) == 3L); - REQUIRE(bl::lround(to_f128("-2.5")) == -3L); - REQUIRE(bl::llround(to_f128("2.5")) == 3LL); - REQUIRE(bl::llround(to_f128("-2.5")) == -3LL); - REQUIRE(bl::lrint(to_f128("2.5")) == 2L); - REQUIRE(bl::lrint(to_f128("3.5")) == 4L); - REQUIRE(bl::llrint(to_f128("-2.5")) == -2LL); - REQUIRE(bl::llrint(to_f128("-3.5")) == -4LL); - REQUIRE(bl::llround(to_f128("4503599627370495.5")) == 4503599627370496LL); - REQUIRE(bl::llround(to_f128("-4503599627370495.5")) == -4503599627370496LL); - REQUIRE(bl::llround(to_f128("4503599627370496.5")) == 4503599627370497LL); - REQUIRE(bl::llrint(to_f128("4503599627370496.5")) == 4503599627370496LL); - REQUIRE(bl::llrint(to_f128("4503599627370497.5")) == 4503599627370498LL); - } -} - -TEST_CASE("f128 public math results remain canonical on edge-shaped inputs", "[fltx][f128][math][canonical]") -{ - if (bl::is_constant_evaluated() && !bl::use_constexpr_parity()) - SKIP("canonicalization is not required when simulating consteval mode without FLTX_CONSTEXPR_PARITY"); - - accuracy_report_scope report_scope{ "f128 public math results remain canonical on edge-shaped inputs" }; - - const f128 a = detail::_f128::renorm(1.0, std::ldexp(1.0, -60)); - const f128 b = detail::_f128::renorm(-0.375, -std::ldexp(1.0, -64)); - const f128 domain = detail::_f128::renorm(0.625, std::ldexp(1.0, -62)); - const f128 positive = detail::_f128::renorm(1.125, std::ldexp(1.0, -60)); - const f128 gamma_arg = detail::_f128::renorm(1.75, std::ldexp(1.0, -62)); - const f128 target = to_f128("2.0"); - - require_canonical_value("operator+", a + b); - require_canonical_value("operator-", a - b); - require_canonical_value("operator*", a * domain); - require_canonical_value("operator/", a / positive); - require_canonical_value("unary-", -a); - - require_canonical_value("abs", bl::abs(b)); - require_canonical_value("fabs", bl::fabs(b)); - require_canonical_value("clamp", bl::clamp(a, domain, positive)); - require_canonical_value("floor", bl::floor(b)); - require_canonical_value("ceil", bl::ceil(b)); - require_canonical_value("trunc", bl::trunc(b)); - require_canonical_value("round", bl::round(b)); - require_canonical_value("nearbyint", bl::nearbyint(b)); - require_canonical_value("rint", bl::rint(b)); - - require_canonical_value("fma", bl::fma(a, positive, b)); - require_canonical_value("fmin", bl::fmin(a, b)); - require_canonical_value("fmax", bl::fmax(a, b)); - require_canonical_value("fdim", bl::fdim(a, domain)); - require_canonical_value("copysign", bl::copysign(a, b)); - - require_canonical_value("fmod", bl::fmod(a, domain)); - require_canonical_value("remainder", bl::remainder(a, domain)); - int quo = 0; - require_canonical_value("remquo", bl::remquo(a, domain, &quo)); - - require_canonical_value("sqrt", bl::sqrt(positive)); - require_canonical_value("cbrt", bl::cbrt(b)); - require_canonical_value("hypot", bl::hypot(a, b)); - require_canonical_value("pow", bl::pow(positive, domain)); - require_canonical_value("pow10_128", bl::pow10_128(-3)); - - require_canonical_value("exp", bl::exp(domain)); - require_canonical_value("exp2", bl::exp2(domain)); - require_canonical_value("expm1", bl::expm1(domain)); - require_canonical_value("log", bl::log(positive)); - require_canonical_value("log2", bl::log2(positive)); - require_canonical_value("log10", bl::log10(positive)); - require_canonical_value("log1p", bl::log1p(domain)); - - f128 sin_value{}; - f128 cos_value{}; - REQUIRE(bl::sincos(domain, sin_value, cos_value)); - require_canonical_value("sincos.sin", sin_value); - require_canonical_value("sincos.cos", cos_value); - require_canonical_value("sin", bl::sin(domain)); - require_canonical_value("cos", bl::cos(domain)); - require_canonical_value("tan", bl::tan(domain)); - require_canonical_value("atan", bl::atan(domain)); - require_canonical_value("atan2", bl::atan2(b, a)); - require_canonical_value("asin", bl::asin(domain)); - require_canonical_value("acos", bl::acos(domain)); - - require_canonical_value("sinh", bl::sinh(domain)); - require_canonical_value("cosh", bl::cosh(domain)); - require_canonical_value("tanh", bl::tanh(domain)); - require_canonical_value("asinh", bl::asinh(b)); - require_canonical_value("acosh", bl::acosh(positive)); - require_canonical_value("atanh", bl::atanh(domain)); - - int exponent = 0; - require_canonical_value("frexp", bl::frexp(a, &exponent)); - f128 integer_part{}; - require_canonical_value("modf.frac", bl::modf(a, &integer_part)); - require_canonical_value("modf.int", integer_part); - require_canonical_value("ldexp", bl::ldexp(a, 7)); - require_canonical_value("scalbn", bl::scalbn(a, -7)); - require_canonical_value("scalbln", bl::scalbln(a, 7)); - require_canonical_value("logb", bl::logb(a)); - require_canonical_value("nextafter", bl::nextafter(a, target)); - require_canonical_value("nexttoward.f128", bl::nexttoward(a, target)); - require_canonical_value("nexttoward.longdouble", bl::nexttoward(a, static_cast(2.0))); - require_canonical_value("round_to_decimals", bl::round_to_decimals(to_f128("1.23456789"), 5)); - - require_canonical_value("erf", bl::erf(domain)); - require_canonical_value("erfc", bl::erfc(domain)); - require_canonical_value("lgamma", bl::lgamma(gamma_arg)); - require_canonical_value("tgamma", bl::tgamma(gamma_arg)); -} - -TEST_CASE("f128 sincos matches MPFR for fixed values", "[fltx][f128][precision][transcendental][trig][sincos]") -{ - accuracy_report_scope report_scope{ "f128 sincos matches MPFR for fixed values" }; - const std::array cases = {{ - "0", - "0.125", - "-0.125", - "0.785398163397448309615660845819875721", - "-0.785398163397448309615660845819875721", - "1.5", - "-1.5", - "1234.56789" - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cases) - check_sincos_case("fixed", mpfr_ref{ input }, abs_tolerance, rel_tolerance); -} - -TEST_CASE("f128 tan matches MPFR for fixed values", "[fltx][f128][precision][transcendental][trig][tan]") -{ - accuracy_report_scope report_scope{ "f128 tan matches MPFR for fixed values" }; - const std::array cases = {{ - "-1.0", - "-0.5", - "-0.125", - "0", - "0.125", - "0.5", - "1.0", - "3.0" - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "tan", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::tan(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::tan(value); }); - } -} - -TEST_CASE("f128 tan matches MPFR on random moderate inputs", "[fltx][f128][precision][transcendental][trig][tan]") -{ - accuracy_report_scope report_scope{ "f128 tan matches MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random tan cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_signed_interval_for_f128(rng, mpfr_ref{ 1.2 }); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "tan", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::tan(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::tan(value); }); - } -} - -TEST_CASE("f128 atan matches MPFR for fixed values", "[fltx][f128][precision][transcendental][trig][atan]") -{ - accuracy_report_scope report_scope{ "f128 atan matches MPFR for fixed values" }; - const std::array cases = {{ - "-100", - "-10", - "-1", - "-0.125", - "0.125", - "1", - "10", - "100" - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "atan", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::atan(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::atan(value); }); - } -} - -TEST_CASE("f128 atan matches MPFR on random moderate inputs", "[fltx][f128][precision][transcendental][trig][atan]") -{ - accuracy_report_scope report_scope{ "f128 atan matches MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random atan cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_signed_interval_for_f128(rng, mpfr_ref{ 128.0 }); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "atan", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::atan(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::atan(value); }); - } -} - -TEST_CASE("f128 atan2 matches MPFR for fixed values", "[fltx][f128][precision][transcendental][trig][atan2]") -{ - accuracy_report_scope report_scope{ "f128 atan2 matches MPFR for fixed values" }; - const std::array, 10> cases = {{ - { "1", "1" }, - { "1", "-1" }, - { "-1", "1" }, - { "-1", "-1" }, - { "0.125", "10" }, - { "10", "0.125" }, - { "-0.125", "10" }, - { "10", "-0.125" }, - { "123.456", "789.25" }, - { "-123.456", "789.25" } - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const auto& [lhs, rhs] : cases) - { - check_binary_op_with_tolerance( - "atan2", - lhs, - rhs, - abs_tolerance, - rel_tolerance, - [](const f128& y, const f128& x) { return bl::atan2(y, x); }, - [](const mpfr_ref& y, const mpfr_ref& x) { return boost::multiprecision::atan2(y, x); }); - } -} - -TEST_CASE("f128 atan2 matches MPFR on random moderate inputs", "[fltx][f128][precision][transcendental][trig][atan2]") -{ - accuracy_report_scope report_scope{ "f128 atan2 matches MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random atan2 cases", count); - - for (int i = 0; i < count; ++i) - { - mpfr_ref y = random_signed_interval_for_f128(rng, mpfr_ref{ 128.0 }); - mpfr_ref x = random_signed_interval_for_f128(rng, mpfr_ref{ 128.0 }); - if (x == 0 && y == 0) - x = mpfr_ref{ 1.0 }; - - const std::string lhs_text = to_scientific_text(y, printed_digits + 4); - const std::string rhs_text = to_scientific_text(x, printed_digits + 4); - - INFO("iteration: " << i); - INFO("lhs_text: " << lhs_text); - INFO("rhs_text: " << rhs_text); - - check_binary_op_with_tolerance( - "atan2", - lhs_text.c_str(), - rhs_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& lhs, const f128& rhs) { return bl::atan2(lhs, rhs); }, - [](const mpfr_ref& lhs, const mpfr_ref& rhs) { return boost::multiprecision::atan2(lhs, rhs); }); - } -} - -TEST_CASE("f128 asin and acos match MPFR for fixed values", "[fltx][f128][precision][transcendental][trig][asin][acos]") -{ - accuracy_report_scope report_scope{ "f128 asin and acos match MPFR for fixed values" }; - const std::array cases = {{ - "-1", - "-0.875", - "-0.5", - "-0.125", - "0", - "0.125", - "0.5", - "0.875", - "1" - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "asin", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::asin(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::asin(value); }); - - check_unary_op_with_tolerance( - "acos", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::acos(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::acos(value); }); - } -} - -TEST_CASE("f128 asin and acos match MPFR on random unit inputs", "[fltx][f128][precision][transcendental][trig][asin][acos]") -{ - accuracy_report_scope report_scope{ "f128 asin and acos match MPFR on random unit inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random asin/acos cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_unit_symmetric_for_f128(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "asin", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::asin(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::asin(value); }); - - check_unary_op_with_tolerance( - "acos", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::acos(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::acos(value); }); - } -} - -TEST_CASE("f128 remainder matches MPFR for fixed values", "[fltx][f128][precision][math][remainder]") -{ - accuracy_report_scope report_scope{ "f128 remainder matches MPFR for fixed values" }; - const std::array, 10> cases = {{ - { "5.25", "2" }, - { "-5.25", "2" }, - { "5.25", "-2" }, - { "-5.25", "-2" }, - { "0.5", "1" }, - { "1.5", "1" }, - { "2.5", "2" }, - { "123456789.125", "0.5" }, - { "1e-20", "3e-21" }, - { "-1e20", "3.125" } - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const auto& [lhs, rhs] : cases) - { - check_binary_op_with_tolerance( - "remainder", - lhs, - rhs, - abs_tolerance, - rel_tolerance, - [](const f128& x, const f128& y) { return bl::remainder(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return ref_remainder_ties_even(x, y); }); - } -} - -TEST_CASE("f128 remainder handles huge double-divisor quotient regression", "[fltx][f128][precision][math][remainder]") -{ - accuracy_report_scope report_scope{ "f128 remainder handles huge double-divisor quotient regression" }; - - // Domain sweep regression: remainder(0x1.fffffffffffffp+899, -7.5) is exactly 0.5. - const f128 lhs = f128{ std::nextafter(std::ldexp(1.0, 900), 0.0), 0.0 }; - const f128 rhs = f128{ -7.5, 0.0 }; - require_exact_value("remainder.domain.max-p899.mod7p5", bl::remainder(lhs, rhs), f128{ 0.5, 0.0 }); -} - -TEST_CASE("f128 remainder matches MPFR on random finite inputs", "[fltx][f128][precision][math][remainder]") -{ - accuracy_report_scope report_scope{ "f128 remainder matches MPFR on random finite inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random remainder cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref lhs = to_ref_exact(random_finite_for_f128(rng)); - const mpfr_ref rhs = random_nonzero_for_f128(rng); - const std::string lhs_text = to_scientific_text(lhs, printed_digits + 4); - const std::string rhs_text = to_scientific_text(rhs, printed_digits + 4); - - INFO("iteration: " << i); - INFO("lhs_text: " << lhs_text); - INFO("rhs_text: " << rhs_text); - - check_binary_op_with_tolerance( - "remainder", - lhs_text.c_str(), - rhs_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& x, const f128& y) { return bl::remainder(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return ref_remainder_ties_even(x, y); }); - } -} - -TEST_CASE("f128 nearbyint and rint match ties-to-even references", "[fltx][f128][precision][math][nearbyint][rint]") -{ - accuracy_report_scope report_scope{ "f128 nearbyint and rint match ties-to-even references" }; - const std::array cases = {{ - "0", - "-0", - "0.25", - "-0.25", - "0.5", - "-0.5", - "1.5", - "-1.5", - "2.5", - "-2.5", - "3.5", - "-3.5", - "0.999999999999999999999999999999", - "1.000000000000000000000000000001", - "-0.999999999999999999999999999999", - "-1.000000000000000000000000000001" - }}; - - for (const char* input : cases) - { - check_unary_op("nearbyint", input, - [](const f128& value) { return bl::nearbyint(value); }, - [](const mpfr_ref& value) { return ref_round_to_even(value); }); - - check_unary_op("rint", input, - [](const f128& value) { return bl::rint(value); }, - [](const mpfr_ref& value) { return ref_round_to_even(value); }); - } - - { - const f128 got = bl::nearbyint(to_f128("-0.5")); - REQUIRE(bl::iszero(got)); - REQUIRE(bl::signbit(got)); - } - { - const f128 got = bl::rint(to_f128("-0.5")); - REQUIRE(bl::iszero(got)); - REQUIRE(bl::signbit(got)); - } -} - -TEST_CASE("f128 nearbyint and rint match ties-to-even references on random inputs", "[fltx][f128][precision][math][nearbyint][rint]") -{ - accuracy_report_scope report_scope{ "f128 nearbyint and rint match ties-to-even references on random inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - print_random_run("random nearbyint/rint cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = to_ref_exact(random_finite_for_f128(rng)); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op("nearbyint", input_text.c_str(), - [](const f128& value) { return bl::nearbyint(value); }, - [](const mpfr_ref& value) { return ref_round_to_even(value); }); - - check_unary_op("rint", input_text.c_str(), - [](const f128& value) { return bl::rint(value); }, - [](const mpfr_ref& value) { return ref_round_to_even(value); }); - } -} - -TEST_CASE("f128 expm1 matches MPFR for fixed values", "[fltx][f128][precision][transcendental][expm1]") -{ - accuracy_report_scope report_scope{ "f128 expm1 matches MPFR for fixed values" }; - const std::array cases = {{ - "-20", - "-1", - "-0.125", - "-1e-10", - "0", - "1e-10", - "0.125", - "1", - "20" - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "expm1", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::expm1(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::expm1(value); }); - } -} - -TEST_CASE("f128 expm1 matches MPFR on random moderate inputs", "[fltx][f128][precision][transcendental][expm1]") -{ - accuracy_report_scope report_scope{ "f128 expm1 matches MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random expm1 cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_signed_interval_for_f128(rng, mpfr_ref{ 20.0 }); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "expm1", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::expm1(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::expm1(value); }); - } -} - -TEST_CASE("f128 log1p matches MPFR for fixed values", "[fltx][f128][precision][transcendental][log1p]") -{ - accuracy_report_scope report_scope{ "f128 log1p matches MPFR for fixed values" }; - const std::array cases = {{ - "-0.875", - "-0.5", - "-0.125", - "-1e-10", - "0", - "1e-10", - "0.125", - "1", - "10" - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "log1p", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::log1p(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::log1p(value); }); - } -} - -TEST_CASE("f128 log1p matches MPFR on random valid inputs", "[fltx][f128][precision][transcendental][log1p]") -{ - accuracy_report_scope report_scope{ "f128 log1p matches MPFR on random valid inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random log1p cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_log1p_argument_for_f128(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "log1p", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::log1p(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::log1p(value); }); - } -} - -TEST_CASE("f128 hyperbolic functions match MPFR for fixed values", "[fltx][f128][precision][transcendental][hyperbolic]") -{ - accuracy_report_scope report_scope{ "f128 hyperbolic functions match MPFR for fixed values" }; - const std::array cases = {{ - "-4", - "-1", - "-0.125", - "0", - "0.125", - "1", - "4", - "8" - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "sinh", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::sinh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sinh(value); }); - - check_unary_op_with_tolerance( - "cosh", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::cosh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::cosh(value); }); - - check_unary_op_with_tolerance( - "tanh", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::tanh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::tanh(value); }); - } -} - -TEST_CASE("f128 hyperbolic functions match MPFR on random moderate inputs", "[fltx][f128][precision][transcendental][hyperbolic]") -{ - accuracy_report_scope report_scope{ "f128 hyperbolic functions match MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random hyperbolic cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_signed_interval_for_f128(rng, mpfr_ref{ 8.0 }); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "sinh", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::sinh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sinh(value); }); - - check_unary_op_with_tolerance( - "cosh", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::cosh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::cosh(value); }); - - check_unary_op_with_tolerance( - "tanh", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::tanh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::tanh(value); }); - } -} - -TEST_CASE("f128 inverse hyperbolic functions match MPFR for fixed values", "[fltx][f128][precision][transcendental][inverse_hyperbolic]") -{ - accuracy_report_scope report_scope{ "f128 inverse hyperbolic functions match MPFR for fixed values" }; - const std::array asinh_cases = {{ "-8", "-1", "-0.125", "0", "0.125", "1", "8" }}; - const std::array acosh_cases = {{ "1", "1.125", "1.5", "2", "4", "8", "16" }}; - const std::array atanh_cases = {{ "-0.95", "-0.5", "-0.125", "-1e-10", "0", "1e-10", "0.125", "0.95" }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : asinh_cases) - { - check_unary_op_with_tolerance( - "asinh", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::asinh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::asinh(value); }); - } - - for (const char* input : acosh_cases) - { - check_unary_op_with_tolerance( - "acosh", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::acosh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::acosh(value); }); - } - - for (const char* input : atanh_cases) - { - check_unary_op_with_tolerance( - "atanh", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::atanh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::atanh(value); }); - } -} - -TEST_CASE("f128 inverse hyperbolic functions match MPFR on random valid inputs", "[fltx][f128][precision][transcendental][inverse_hyperbolic]") -{ - accuracy_report_scope report_scope{ "f128 inverse hyperbolic functions match MPFR on random valid inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random inverse hyperbolic cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref asinh_input = random_signed_interval_for_f128(rng, mpfr_ref{ 8.0 }); - const mpfr_ref acosh_input = random_acosh_argument_for_f128(rng); - const mpfr_ref atanh_input = random_atanh_argument_for_f128(rng); - - const std::string asinh_text = to_scientific_text(asinh_input, printed_digits + 4); - const std::string acosh_text = to_scientific_text(acosh_input, printed_digits + 4); - const std::string atanh_text = to_scientific_text(atanh_input, printed_digits + 4); - - INFO("iteration: " << i); - - check_unary_op_with_tolerance( - "asinh", - asinh_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::asinh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::asinh(value); }); - - check_unary_op_with_tolerance( - "acosh", - acosh_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::acosh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::acosh(value); }); - - check_unary_op_with_tolerance( - "atanh", - atanh_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::atanh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::atanh(value); }); - } -} - -TEST_CASE("f128 cbrt and hypot match MPFR for fixed values", "[fltx][f128][precision][math][cbrt][hypot]") -{ - accuracy_report_scope report_scope{ "f128 cbrt and hypot match MPFR for fixed values" }; - const std::array cbrt_cases = {{ "-1e9", "-8", "-0.125", "0", "0.125", "8", "27", "1e9" }}; - const std::array, 8> hypot_cases = {{ - { "0", "0" }, - { "3", "4" }, - { "-3", "4" }, - { "1e-20", "3e-20" }, - { "1e20", "3e20" }, - { "123.456", "789.25" }, - { "-123.456", "789.25" }, - { "0.125", "0.5" } - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cbrt_cases) - { - check_unary_op_with_tolerance( - "cbrt", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::cbrt(value); }, - [](const mpfr_ref& value) { return ref_cbrt(value); }); - } - - for (const auto& [lhs, rhs] : hypot_cases) - { - check_binary_op_with_tolerance( - "hypot", - lhs, - rhs, - abs_tolerance, - rel_tolerance, - [](const f128& x, const f128& y) { return bl::hypot(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return ref_hypot(x, y); }); - } -} - -TEST_CASE("f128 cbrt and hypot match MPFR on random moderate inputs", "[fltx][f128][precision][math][cbrt][hypot]") -{ - accuracy_report_scope report_scope{ "f128 cbrt and hypot match MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random cbrt/hypot cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref cbrt_input = random_signed_interval_for_f128(rng, mpfr_ref{ 1e12 }); - const mpfr_ref hypot_x = random_signed_interval_for_f128(rng, mpfr_ref{ 1e12 }); - const mpfr_ref hypot_y = random_signed_interval_for_f128(rng, mpfr_ref{ 1e12 }); - - const std::string cbrt_text = to_scientific_text(cbrt_input, printed_digits + 4); - const std::string x_text = to_scientific_text(hypot_x, printed_digits + 4); - const std::string y_text = to_scientific_text(hypot_y, printed_digits + 4); - - INFO("iteration: " << i); - - check_unary_op_with_tolerance( - "cbrt", - cbrt_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::cbrt(value); }, - [](const mpfr_ref& value) { return ref_cbrt(value); }); - - check_binary_op_with_tolerance( - "hypot", - x_text.c_str(), - y_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& x, const f128& y) { return bl::hypot(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return ref_hypot(x, y); }); - } -} - -TEST_CASE("f128 decomposition and stepping functions behave correctly", "[fltx][f128][math][decomposition]") -{ - accuracy_report_scope report_scope{ "f128 decomposition and stepping functions behave correctly" }; - - { - const f128 input = to_f128("123.456"); - int exponent = 0; - const f128 mantissa = bl::frexp(input, &exponent); - const f128 rebuilt = bl::ldexp(mantissa, exponent); - const mpfr_ref diff = abs_ref(to_ref_exact(rebuilt) - to_ref_exact(input)); - const mpfr_ref scale = abs_ref(to_ref_exact(input)); - const mpfr_ref tolerance = function_tolerance("frexp", scale); - CAPTURE(exponent); - CAPTURE(to_text(mantissa)); - CAPTURE(to_text(rebuilt)); - REQUIRE(abs_ref(to_ref_exact(mantissa)) >= mpfr_ref{ 0.5 }); - REQUIRE(abs_ref(to_ref_exact(mantissa)) < mpfr_ref{ 1.0 }); - record_accuracy_sample("frexp", rebuilt, to_ref_exact(input), diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - { - const std::array, 6> cases = {{ - { "positive just below one", f128{ f128_s{ 1.0, -0x1p-106 } } }, - { "positive just above one", f128{ f128_s{ 1.0, 0x1p-106 } } }, - { "negative just below one", f128{ f128_s{ -1.0, 0x1p-106 } } }, - { "negative just above one", f128{ f128_s{ -1.0, -0x1p-106 } } }, - { "large positive just below power of two", f128{ f128_s{ 0x1p500, -0x1p394 } } }, - { "large positive just above power of two", f128{ f128_s{ 0x1p500, 0x1p394 } } } - }}; - - for (const auto& [label, input] : cases) - { - int exponent = 0; - const f128 mantissa = bl::frexp(input, &exponent); - const f128 rebuilt = bl::ldexp(mantissa, exponent); - const mpfr_ref diff = abs_ref(to_ref_exact(rebuilt) - to_ref_exact(input)); - CAPTURE(label); - CAPTURE(exponent); - CAPTURE(to_text(input)); - CAPTURE(to_text(mantissa)); - CAPTURE(to_text(rebuilt)); - REQUIRE(abs_ref(to_ref_exact(mantissa)) >= mpfr_ref{ 0.5 }); - REQUIRE(abs_ref(to_ref_exact(mantissa)) < mpfr_ref{ 1.0 }); - REQUIRE(diff == 0); - require_canonical_value("frexp.boundary", mantissa); - } - } - { - const f128 input = to_f128("-123.456"); - f128 ip{}; - const f128 frac = bl::modf(input, &ip); - const mpfr_ref sum_diff = abs_ref((to_ref_exact(frac) + to_ref_exact(ip)) - to_ref_exact(input)); - CAPTURE(to_text(frac)); - CAPTURE(to_text(ip)); - const mpfr_ref sum_scale = abs_ref(to_ref_exact(input)); - REQUIRE(sum_diff <= function_tolerance("modf", sum_scale)); - require_exact_value("modf.integer", ip, bl::trunc(input)); - } - { - const f128 input = to_f128("8.0"); - REQUIRE(bl::ilogb(input) == 3); - require_exact_value("logb", bl::logb(input), to_f128("3.0")); - } - { - const f128 input = to_f128("1.5"); - require_exact_value("scalbn", bl::scalbn(input, 5), bl::ldexp(input, 5)); - require_exact_value("scalbln", bl::scalbln(input, -5), bl::ldexp(input, -5)); - } - { - const f128 from = to_f128("1.25"); - const f128 to = to_f128("2.0"); - const f128 expected = f128{ from.hi, std::nextafter(from.lo, std::numeric_limits::infinity()) }; - require_exact_value("nextafter.up", bl::nextafter(from, to), expected); - require_exact_value("nexttoward.f128", bl::nexttoward(from, to), expected); - require_exact_value("nexttoward.longdouble", bl::nexttoward(from, static_cast(2.0)), expected); - } - { - const f128 from = to_f128("1.25"); - const f128 to = to_f128("-2.0"); - const f128 expected = f128{ from.hi, std::nextafter(from.lo, -std::numeric_limits::infinity()) }; - require_exact_value("nextafter.down", bl::nextafter(from, to), expected); - } - { - const f128 got = bl::nextafter(f128{ 0.0, 0.0 }, to_f128("-1.0")); - require_exact_value("nextafter.zero", got, f128{ -std::numeric_limits::denorm_min(), 0.0 }); - } - { - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - check_remquo_case("fixed.positive", mpfr_ref{ "5.25" }, mpfr_ref{ "2" }, abs_tolerance, rel_tolerance); - check_remquo_case("fixed.negative", mpfr_ref{ "-5.25" }, mpfr_ref{ "2" }, abs_tolerance, rel_tolerance); - check_remquo_case("fixed.fractional", mpfr_ref{ "123.456" }, mpfr_ref{ "0.5" }, abs_tolerance, rel_tolerance); - } -} - -TEST_CASE("f128 erf and erfc match MPFR for fixed values", "[fltx][f128][precision][transcendental][erf][erfc]") -{ - accuracy_report_scope report_scope{ "f128 erf and erfc match MPFR for fixed values" }; - const std::array cases = {{ - "-4", - "-1", - "-0.125", - "-1e-10", - "0", - "1e-10", - "0.125", - "1", - "4" - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "erf", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::erf(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::erf(value); }); - - check_unary_op_with_tolerance( - "erfc", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::erfc(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::erfc(value); }); - } -} - -TEST_CASE("f128 erf and erfc match MPFR on random moderate inputs", "[fltx][f128][precision][transcendental][erf][erfc]") -{ - accuracy_report_scope report_scope{ "f128 erf and erfc match MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random erf/erfc cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_erf_argument_for_f128(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "erf", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::erf(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::erf(value); }); - - check_unary_op_with_tolerance( - "erfc", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::erfc(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::erfc(value); }); - } -} - -TEST_CASE("f128 lgamma and tgamma match MPFR for fixed values", "[fltx][f128][precision][transcendental][gamma]") -{ - accuracy_report_scope report_scope{ "f128 lgamma and tgamma match MPFR for fixed values" }; - const std::array cases = {{ - "0.125", - "0.5", - "0.75", - "1", - "1.5", - "2.5", - "5.5", - "10" - }}; - - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "lgamma", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::lgamma(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::lgamma(value); }); - - check_unary_op_with_tolerance( - "tgamma", - input, - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::tgamma(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::tgamma(value); }); - } -} - -TEST_CASE("f128 gamma functions follow special-value conventions", "[fltx][f128][precision][transcendental][gamma]") -{ - accuracy_report_scope report_scope{ "f128 gamma functions follow special-value conventions" }; - - const f128 pos_zero{ 0.0, 0.0 }; - const f128 neg_zero{ -0.0, 0.0 }; - const f128 pos_inf{ std::numeric_limits::infinity(), 0.0 }; - const f128 neg_inf{ -std::numeric_limits::infinity(), 0.0 }; - - const f128 lgamma_neg_inf = bl::lgamma(neg_inf); - REQUIRE(bl::isinf(lgamma_neg_inf)); - REQUIRE(!bl::signbit(lgamma_neg_inf)); - - const f128 tgamma_pos_zero = bl::tgamma(pos_zero); - REQUIRE(bl::isinf(tgamma_pos_zero)); - REQUIRE(!bl::signbit(tgamma_pos_zero)); - - const f128 tgamma_neg_zero = bl::tgamma(neg_zero); - REQUIRE(bl::isinf(tgamma_neg_zero)); - REQUIRE(bl::signbit(tgamma_neg_zero)); - - REQUIRE(bl::isinf(bl::tgamma(pos_inf))); - REQUIRE(bl::isnan(bl::tgamma(neg_inf))); -} - -TEST_CASE("f128 lgamma and tgamma match MPFR on random positive inputs", "[fltx][f128][precision][transcendental][gamma]") -{ - accuracy_report_scope report_scope{ "f128 lgamma and tgamma match MPFR on random positive inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-29" }; - const mpfr_ref rel_tolerance{ "1e-29" }; - print_random_run("random gamma cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_gamma_positive_for_f128(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 4); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "lgamma", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::lgamma(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::lgamma(value); }); - - check_unary_op_with_tolerance( - "tgamma", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f128& value) { return bl::tgamma(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::tgamma(value); }); - } -} diff --git a/tests/precision/test_f256_expression_semantics.cpp b/tests/precision/test_f256_expression_semantics.cpp deleted file mode 100755 index 3eaeff7..0000000 --- a/tests/precision/test_f256_expression_semantics.cpp +++ /dev/null @@ -1,353 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using namespace bl; - -static_assert(std::is_aggregate_v); -static_assert(std::is_standard_layout_v); -static_assert(std::is_trivially_copyable_v); - -static_assert(!detail::_f256_expr::is_expr() + std::declval())>>::value); -static_assert(detail::_f256_expr::is_expr() + std::declval())>>::value); -static_assert(detail::_f256_expr::is_expr() - std::declval())>>::value); -static_assert(detail::_f256_expr::is_expr() * std::declval())>>::value); -static_assert(detail::_f256_expr::is_expr() / std::declval())>>::value); -static_assert(detail::_f256_expr::is_expr() + 0.5)>>::value); -static_assert(detail::_f256_expr::is_expr())>>::value); - -using f256_prod_expr = std::remove_cvref_t() * std::declval())>; -static_assert(std::is_convertible_v); -static_assert(!std::is_convertible_v); -static_assert(!std::is_constructible_v); -static_assert(!std::is_constructible_v); -static_assert(std::is_constructible_v); -using f256_prod_plus_value_sub_prod_expr = std::remove_cvref_t() * std::declval()) + - (std::declval() - (std::declval() * std::declval())))>; -using f256_value_sub_prod_plus_prod_expr = std::remove_cvref_t() - (std::declval() * std::declval())) + - (std::declval() * std::declval()))>; -using f256_prod_minus_value_sub_prod_expr = std::remove_cvref_t() * std::declval()) - - (std::declval() - (std::declval() * std::declval())))>; -static_assert(detail::_f256_expr::is_prod_pair_value_v); -static_assert(detail::_f256_expr::is_prod_pair_value_v); -static_assert(detail::_f256_expr::is_prod_pair_value_v); - -namespace -{ - using mpfr_ref = boost::multiprecision::number< - boost::multiprecision::mpfr_float_backend<320>, - boost::multiprecision::et_off>; - - struct storage_point - { - f256_s x; - f256_s y; - }; - - struct storage_rect - { - storage_point a; - storage_point b; - }; - - volatile double expression_semantics_sink = 0.0; - - [[nodiscard]] f256 make_f256(const char* text) - { - return to_f256(text); - } - - [[nodiscard]] mpfr_ref to_ref_exact(const f256_s& value) - { - mpfr_ref sum = 0; - sum += mpfr_ref{ value.x0 }; - sum += mpfr_ref{ value.x1 }; - sum += mpfr_ref{ value.x2 }; - sum += mpfr_ref{ value.x3 }; - return sum; - } - - [[nodiscard]] std::string to_text(const f256_s& value) - { - return bl::to_string(value, std::numeric_limits::max_digits10, false, true, false); - } - - [[nodiscard]] std::string to_text(const mpfr_ref& value) - { - std::ostringstream out; - out << std::setprecision(std::numeric_limits::max_digits10 + 20) - << std::scientific - << value; - return out.str(); - } - - [[nodiscard]] bool same_double_bits(double lhs, double rhs) noexcept - { - return std::bit_cast(lhs) == std::bit_cast(rhs); - } - - [[nodiscard]] bool same_value_bits(const f256_s& lhs, const f256_s& rhs) noexcept - { - return same_double_bits(lhs.x0, rhs.x0) && - same_double_bits(lhs.x1, rhs.x1) && - same_double_bits(lhs.x2, rhs.x2) && - same_double_bits(lhs.x3, rhs.x3); - } - - void clobber_stack_between_expression_creation_and_evaluation() - { - std::array scratch{}; - f256_s accumulator = make_f256("0.0625"); - - for (std::size_t i = 0; i < scratch.size(); ++i) - { - const f256_s scale = make_f256((i & 1u) == 0u ? "1.0000000000000000000000000000000001" : "-0.9999999999999999999999999999999999"); - const f256_s offset = make_f256((i % 3u) == 0u ? "0.3333333333333333333333333333333333" : "-0.1250000000000000000000000000000001"); - accumulator = accumulator * scale + offset; - scratch[i] = accumulator; - } - - expression_semantics_sink += scratch.back().x0; - } - - [[nodiscard]] auto make_returned_basic_expression() - { - const f256 a = make_f256("1.0000000000000000000000000000000001"); - const f256 b = make_f256("-0.9999999999999999999999999999999997"); - const f256 c = make_f256("0.3333333333333333333333333333333333"); - const f256 d = make_f256("-0.2500000000000000000000000000000001"); - const f256 e = make_f256("0.1250000000000000000000000000000003"); - - return ((a * b) + (c * d) - e) / (a + 2.0); - } - - [[nodiscard]] f256 make_materialized_basic_expression() - { - const f256 a = make_f256("1.0000000000000000000000000000000001"); - const f256 b = make_f256("-0.9999999999999999999999999999999997"); - const f256 c = make_f256("0.3333333333333333333333333333333333"); - const f256 d = make_f256("-0.2500000000000000000000000000000001"); - const f256 e = make_f256("0.1250000000000000000000000000000003"); - - const f256 result = ((a * b) + (c * d) - e) / (a + 2.0); - return result; - } - - [[nodiscard]] auto make_returned_log_minus_input_expression() - { - const f256 z = make_f256("1.3125000000000000000000000000000001"); - return log(z) - z; - } - - [[nodiscard]] f256 make_materialized_log_minus_input_expression() - { - const f256 z = make_f256("1.3125000000000000000000000000000001"); - const f256 result = log(z) - z; - return result; - } - - [[nodiscard]] storage_rect make_storage_rect() - { - return { - { - make_f256("0.8750000000000000000000000000000001"), - make_f256("-1.1250000000000000000000000000000001") - }, - { - make_f256("1.3750000000000000000000000000000001"), - make_f256("-1.6250000000000000000000000000000001") - } - }; - } - - template - [[nodiscard]] auto storage_member_expression(const Rect& rect) - { - return ((rect.a.x + rect.a.y * 0.5) - (rect.b.x / 3.0)) + - ((2.0 * rect.b.y) - (rect.a.x * rect.b.y)) / (rect.a.y + 1.25); - } - - [[nodiscard]] auto make_returned_storage_member_expression() - { - const storage_rect rect = make_storage_rect(); - return storage_member_expression(rect); - } - - [[nodiscard]] f256 make_materialized_storage_member_expression() - { - const storage_rect rect = make_storage_rect(); - const f256 result = storage_member_expression(rect); - return result; - } - - [[nodiscard]] mpfr_ref storage_member_expression_reference() - { - const storage_rect rect = make_storage_rect(); - const mpfr_ref ax = to_ref_exact(rect.a.x); - const mpfr_ref ay = to_ref_exact(rect.a.y); - const mpfr_ref bx = to_ref_exact(rect.b.x); - const mpfr_ref by = to_ref_exact(rect.b.y); - - return ((ax + ay * mpfr_ref{ 0.5 }) - (bx / mpfr_ref{ 3.0 })) + - ((mpfr_ref{ 2.0 } * by) - (ax * by)) / (ay + mpfr_ref{ 1.25 }); - } - - void require_same_value_bits(const f256_s& delayed, const f256_s& immediate) - { - CAPTURE(to_text(delayed)); - CAPTURE(to_text(immediate)); - REQUIRE(same_value_bits(delayed, immediate)); - } - - void require_close_to_reference(const f256_s& got, const mpfr_ref& expected) - { - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref diff = got_ref > expected ? got_ref - expected : expected - got_ref; - mpfr_ref scale = expected; - if (scale < 0) - scale = -scale; - if (scale < 1) - scale = 1; - - const mpfr_ref tolerance = mpfr_ref{ "2e-62" } * scale; - - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - REQUIRE(diff <= tolerance); - } - -} // namespace - -TEST_CASE("f256 delayed fused expressions preserve normal value semantics", "[fltx][f256][precision][arithmetic][expressions][semantics]") -{ - auto expression = make_returned_basic_expression(); - clobber_stack_between_expression_creation_and_evaluation(); - - const f256 delayed = std::move(expression); - const f256 immediate = make_materialized_basic_expression(); - - require_same_value_bits(delayed, immediate); -} - -TEST_CASE("f256 delayed expressions preserve math temporary semantics", "[fltx][f256][precision][arithmetic][expressions][semantics]") -{ - auto expression = make_returned_log_minus_input_expression(); - clobber_stack_between_expression_creation_and_evaluation(); - - const f256 delayed = std::move(expression); - const f256 immediate = make_materialized_log_minus_input_expression(); - - require_same_value_bits(delayed, immediate); -} - -TEST_CASE("f256 delayed product expressions preserve simple multi-line value semantics", "[fltx][f256][precision][arithmetic][expressions][semantics][fusion]") -{ - const f256 x = make_f256("1.1250000000000000000000000000000001"); - const f256 y = make_f256("-0.8750000000000000000000000000000001"); - const f256 a = make_f256("0.3333333333333333333333333333333333"); - - const mpfr_ref x_ref = to_ref_exact(x); - const mpfr_ref y_ref = to_ref_exact(y); - const mpfr_ref a_ref = to_ref_exact(a); - - auto xy0 = x * y; - auto xy1 = x * y; - const f256 doubled = std::move(xy0) + std::move(xy1); - - auto xy2 = x * y; - auto xy3 = x * y; - const f256 doubled_plus = a + (std::move(xy2) + std::move(xy3)); - - auto xy4 = x * y; - auto xy5 = x * y; - const f256 associated_plus = (std::move(xy4) + a) + std::move(xy5); - - auto xy6 = x * y; - auto xy7 = x * y; - const f256 associated_minus = (std::move(xy6) - a) + std::move(xy7); - - auto xx0 = x * x; - auto yy0 = y * y; - const f256 commuted_difference = a + (std::move(xx0) - std::move(yy0)); - - auto xy8 = x * y; - auto xx1 = x * x; - auto yy1 = y * y; - const f256 product_reassociated = std::move(xy8) + (std::move(xx1) + std::move(yy1)); - - auto xx2 = x * x; - auto yy2 = y * y; - const f256 product_plus_value_sub_product = std::move(xx2) + (a - std::move(yy2)); - - auto xx3 = x * x; - auto yy3 = y * y; - const f256 value_sub_product_plus_product = (a - std::move(xx3)) + std::move(yy3); - - auto xx4 = x * x; - auto yy4 = y * y; - const f256 product_minus_value_sub_product = std::move(xx4) - (a - std::move(yy4)); - - const f256 scaled_right_associated = (x * 1.25) + (a + y * -0.75); - const f256 scaled_value_sub_product = (x * 1.25) + (a - y * 0.75); - const f256 scaled_sub_associated = (x * 1.25) - (a + y * 0.75); - const f256 scaled_left_associated = (a + x * 1.25) - (y * 0.75); - - require_close_to_reference(doubled, x_ref * y_ref + x_ref * y_ref); - require_close_to_reference(doubled_plus, a_ref + (x_ref * y_ref + x_ref * y_ref)); - require_close_to_reference(associated_plus, (x_ref * y_ref + a_ref) + x_ref * y_ref); - require_close_to_reference(associated_minus, (x_ref * y_ref - a_ref) + x_ref * y_ref); - require_close_to_reference(commuted_difference, a_ref + (x_ref * x_ref - y_ref * y_ref)); - require_close_to_reference(product_reassociated, x_ref * y_ref + (x_ref * x_ref + y_ref * y_ref)); - require_close_to_reference(product_plus_value_sub_product, x_ref * x_ref + (a_ref - y_ref * y_ref)); - require_close_to_reference(value_sub_product_plus_product, (a_ref - x_ref * x_ref) + y_ref * y_ref); - require_close_to_reference(product_minus_value_sub_product, x_ref * x_ref - (a_ref - y_ref * y_ref)); - require_close_to_reference(scaled_right_associated, x_ref * mpfr_ref{ 1.25 } + (a_ref + y_ref * mpfr_ref{ -0.75 })); - require_close_to_reference(scaled_value_sub_product, x_ref * mpfr_ref{ 1.25 } + (a_ref - y_ref * mpfr_ref{ 0.75 })); - require_close_to_reference(scaled_sub_associated, x_ref * mpfr_ref{ 1.25 } - (a_ref + y_ref * mpfr_ref{ 0.75 })); - require_close_to_reference(scaled_left_associated, (a_ref + x_ref * mpfr_ref{ 1.25 }) - y_ref * mpfr_ref{ 0.75 }); -} - -TEST_CASE("f256 named expressions require explicit consumption", "[fltx][f256][precision][arithmetic][expressions][semantics][fusion]") -{ - const f256 x = make_f256("1.1250000000000000000000000000000001"); - const f256 y = make_f256("-0.8750000000000000000000000000000001"); - const f256 cx = make_f256("0.3333333333333333333333333333333333"); - - auto xx = x * x - y * y + cx; - const f256 assigned = std::move(xx); - const f256 direct = x * x - y * y + cx; - - require_same_value_bits(assigned, direct); -} - -TEST_CASE("f256_s storage member arithmetic preserves normal value semantics", "[fltx][f256][precision][arithmetic][expressions][semantics][storage]") -{ - auto value_for_f256 = make_returned_storage_member_expression(); - auto value_for_storage = make_returned_storage_member_expression(); - clobber_stack_between_expression_creation_and_evaluation(); - - const f256 delayed_value = std::move(value_for_f256); - const f256 delayed_storage_value = std::move(value_for_storage); - const f256_s delayed_storage = delayed_storage_value; - const f256 immediate = make_materialized_storage_member_expression(); - - require_same_value_bits(delayed_value, immediate); - require_same_value_bits(delayed_storage, immediate); - require_close_to_reference(delayed_storage, storage_member_expression_reference()); -} diff --git a/tests/precision/test_f256_math.cpp b/tests/precision/test_f256_math.cpp deleted file mode 100644 index 833a352..0000000 --- a/tests/precision/test_f256_math.cpp +++ /dev/null @@ -1,4398 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -using namespace bl; - -namespace -{ - using mpfr_ref = boost::multiprecision::number< - boost::multiprecision::mpfr_float_backend<320>, - boost::multiprecision::et_off>; - - constexpr int checked_digits = std::numeric_limits::digits10 - 1; - constexpr int printed_digits = std::numeric_limits::max_digits10; - - constexpr std::uint64_t random_seed = 1ull; - constexpr int random_sample_count_scale = 5; - - constexpr const char* type_label = "f256"; - - void print_random_run(const char* description, int count) - { - std::cout << type_label << " comparing: " << count << " " << description - << " (seed " << random_seed << ")...\n\n"; - } - - [[nodiscard]] mpfr_ref abs_ref(const mpfr_ref& value) - { - return value < 0 ? -value : value; - } - - [[nodiscard]] mpfr_ref decimal_epsilon(int digits) - { - mpfr_ref epsilon = 1; - for (int i = 0; i < digits; ++i) - epsilon /= 10; - return epsilon; - } - - struct scaled_tolerance_entry - { - const char* op_name; - const char* tolerance; - }; - - [[nodiscard]] mpfr_ref function_scaled_tolerance(const char* op_name) - { - constexpr std::array tolerances{{ - { "acos", "2e-60" }, - { "acosh", "5e-61" }, - { "add", "2e-65" }, - { "asin", "2e-60" }, - { "asinh", "2e-60" }, - { "atan", "8e-63" }, - { "atan2", "9e-63" }, - { "atanh", "1e-62" }, - { "cbrt", "1e-62" }, - { "cos", "3e-60" }, - { "cosh", "1e-62" }, - { "divide", "2e-64" }, - { "erf", "5e-60" }, - { "erfc", "5e-60" }, - { "exp", "1e-62" }, - { "exp2", "1e-62" }, - { "expm1", "9e-63" }, - { "fmod", "1e-62" }, - { "frexp", "2e-64" }, - { "hypot", "3e-60" }, - { "ldexp", "1e-62" }, - { "lgamma", "7e-60" }, - { "log", "1e-62" }, - { "log10", "1e-62" }, - { "log1p", "9e-63" }, - { "log2", "1e-62" }, - { "multiply", "2e-65" }, - { "pow", "2e-61" }, - { "pow10_256", "2e-65" }, - { "recip", "4e-66" }, - { "sin", "6e-60" }, - { "sincos.cos", "4e-63" }, - { "sincos.sin", "3e-63" }, - { "sinh", "9e-63" }, - { "sqrt", "3e-60" }, - { "subtract", "2e-65" }, - { "tan", "8e-63" }, - { "tanh", "5e-63" }, - { "tgamma", "6e-60" } - }}; - - for (const auto& entry : tolerances) - { - if (std::strcmp(op_name, entry.op_name) == 0) - return mpfr_ref{ entry.tolerance }; - } - - return mpfr_ref{ 0 }; - } - - [[nodiscard]] mpfr_ref function_tolerance(const char* op_name, const mpfr_ref& scale) - { - return function_scaled_tolerance(op_name) * scale; - } - - [[nodiscard]] mpfr_ref combined_tolerance( - const char* op_name, - const mpfr_ref& accuracy_scale, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance, - const mpfr_ref& rel_scale) - { - const mpfr_ref rel_based_tolerance = rel_tolerance * rel_scale; - mpfr_ref explicit_tolerance = abs_tolerance; - if (rel_based_tolerance > explicit_tolerance) - explicit_tolerance = rel_based_tolerance; - - const mpfr_ref scaled_tolerance = function_tolerance(op_name, accuracy_scale); - if (scaled_tolerance == 0 || explicit_tolerance < scaled_tolerance) - return explicit_tolerance; - - return scaled_tolerance; - } - - [[nodiscard]] std::string to_text(const f256& value) - { - return bl::to_string(value, printed_digits, false, true, false); - } - - [[nodiscard]] std::string to_text(const mpfr_ref& value) - { - std::ostringstream out; - out << std::setprecision(printed_digits + 20) - << std::scientific - << value; - return out.str(); - } - - [[nodiscard]] mpfr_ref to_ref_exact(const f256& value) - { - mpfr_ref sum = 0; - sum += mpfr_ref{ value.x0 }; - sum += mpfr_ref{ value.x1 }; - sum += mpfr_ref{ value.x2 }; - sum += mpfr_ref{ value.x3 }; - return sum; - } - - [[nodiscard]] mpfr_ref to_ref_exact(const f128_s& value) - { - mpfr_ref sum = 0; - sum += mpfr_ref{ value.hi }; - sum += mpfr_ref{ value.lo }; - return sum; - } - - [[nodiscard]] std::string to_text_double(double value) - { - std::ostringstream out; - out << std::setprecision(std::numeric_limits::max_digits10) - << std::scientific - << value; - return out.str(); - } - - [[nodiscard]] std::string to_text_double_hex(double value) - { - std::ostringstream out; - out << std::hexfloat << value; - return out.str(); - } - - template - [[nodiscard]] mpfr_ref scalar_to_ref(Scalar scalar) - { - using scalar_t = std::remove_cv_t>; - if constexpr (std::is_same_v) - return to_ref_exact(scalar); - else - return mpfr_ref{ scalar }; - } - - template - [[nodiscard]] std::string scalar_to_text(Scalar scalar) - { - using scalar_t = std::remove_cv_t>; - if constexpr (std::is_same_v) - return to_text(f256{ scalar }); - else - return to_text_double(static_cast(scalar)); - } - - using ulp_count = boost::multiprecision::cpp_int; - - struct ulp_distance_result - { - ulp_count value = 0; - bool exact = true; - }; - - [[nodiscard]] bool same_double_bits(double lhs, double rhs) noexcept - { - return std::bit_cast(lhs) == std::bit_cast(rhs); - } - - [[nodiscard]] bool same_value_bits(const f256& lhs, const f256& rhs) noexcept - { - return same_double_bits(lhs.x0, rhs.x0) && - same_double_bits(lhs.x1, rhs.x1) && - same_double_bits(lhs.x2, rhs.x2) && - same_double_bits(lhs.x3, rhs.x3); - } - - [[nodiscard]] mpfr_ref scale_by_power_of_two(mpfr_ref value, int exponent) - { - if (exponent > 0) - { - for (int i = 0; i < exponent; ++i) - value *= 2; - } - else if (exponent < 0) - { - for (int i = 0; i < -exponent; ++i) - value /= 2; - } - - return value; - } - - [[nodiscard]] f256 round_ref_to_f256(const mpfr_ref& value) - { - const std::string text = to_text(value); - return to_f256(text.c_str()); - } - - [[nodiscard]] mpfr_ref nominal_ulp_size(const f256& reference, const f256& fallback) - { - double lead = std::fabs(reference.x0); - if (lead == 0.0) - lead = std::fabs(fallback.x0); - if (lead == 0.0) - return mpfr_ref{ std::numeric_limits::denorm_min() }; - - int exponent = 0; - (void)std::frexp(lead, &exponent); - return scale_by_power_of_two(mpfr_ref{ 1 }, exponent - std::numeric_limits::digits); - } - - [[nodiscard]] ulp_count ceil_to_ulp_count(const mpfr_ref& value) - { - if (value <= 0) - return 0; - - return boost::multiprecision::ceil(value).template convert_to(); - } - - [[nodiscard]] ulp_distance_result ulp_distance(const f256& lhs, const f256& rhs) - { - if (bl::isnan(lhs) || bl::isnan(rhs)) - return { 0, false }; - - if (!bl::isfinite(lhs) || !bl::isfinite(rhs)) - return { same_value_bits(lhs, rhs) ? ulp_count{ 0 } : ulp_count{ 1 }, same_value_bits(lhs, rhs) }; - - const mpfr_ref lhs_ref = to_ref_exact(lhs); - const mpfr_ref rhs_ref = to_ref_exact(rhs); - if (lhs_ref == rhs_ref) - return { 0, true }; - - const mpfr_ref diff = abs_ref(lhs_ref - rhs_ref); - const mpfr_ref ulp = nominal_ulp_size(rhs, lhs); - return { ceil_to_ulp_count(diff / ulp), true }; - } - - [[nodiscard]] ulp_distance_result true_ulp_distance_from_reference(const f256& got, const mpfr_ref& expected) - { - return ulp_distance(got, round_ref_to_f256(expected)); - } - - [[nodiscard]] f256 random_finite_for_f256(bl::mt19937_64& rng) - { - bl::uniform_int_distribution sign_dist(0, 1); - bl::uniform_int_distribution exponent_dist(-100, 100); - bl::uniform_real_distribution mantissa_dist{ f256{ 0.5 }, f256{ 1.0 } }; - - f256 mantissa = mantissa_dist(rng); - if (sign_dist(rng) != 0) - mantissa = -mantissa; - - return bl::ldexp(mantissa, exponent_dist(rng)); - } - - - struct accuracy_stats_entry - { - int samples = 0; - int passed = 0; - std::vector achieved_digits; - ulp_count worst_ulp = 0; - bool worst_ulp_exact = true; - int inexact_ulp_samples = 0; - mpfr_ref worst_scaled_error = 0; - }; - - class accuracy_report_scope; - thread_local accuracy_report_scope* current_accuracy_report_scope = nullptr; - - [[nodiscard]] double achieved_digits_from_error(const mpfr_ref& diff, const mpfr_ref& scale) - { - if (diff == 0) - return static_cast(checked_digits); - - const mpfr_ref scaled_error = diff / scale; - if (scaled_error >= 1) - return 0.0; - - const double scaled_error_double = scaled_error.convert_to(); - if (!(scaled_error_double > 0.0)) - return static_cast(checked_digits); - - const double digits = -std::log10(scaled_error_double); - return digits < 0.0 ? 0.0 : digits; - } - - [[nodiscard]] double normalized_accuracy_percent(double digits) - { - if (checked_digits <= 0) - return 100.0; - - double ratio = digits / static_cast(checked_digits); - if (ratio < 0.0) - ratio = 0.0; - if (ratio > 1.0) - ratio = 1.0; - return ratio * 100.0; - } - - [[nodiscard]] double median_digits(std::vector values) - { - if (values.empty()) - return 0.0; - - std::sort(values.begin(), values.end()); - const std::size_t mid = values.size() / 2; - if ((values.size() & 1u) != 0u) - return values[mid]; - - return (values[mid - 1] + values[mid]) * 0.5; - } - - class accuracy_report_scope - { - public: - explicit accuracy_report_scope(const char* test_name, bool report_ulp = true) - : test_name(test_name), report_ulp(report_ulp), previous(current_accuracy_report_scope) - { - current_accuracy_report_scope = this; - } - - ~accuracy_report_scope() - { - current_accuracy_report_scope = previous; - - if (stats.empty()) - return; - - const std::ios_base::fmtflags old_flags = std::cout.flags(); - const std::streamsize old_precision = std::cout.precision(); - - std::cout << "\naccuracy summary for " << test_name << ":\n"; - std::cout << std::fixed << std::setprecision(2); - - for (const auto& [op_name, entry] : stats) - { - const double median = median_digits(entry.achieved_digits); - const double worst = *std::min_element(entry.achieved_digits.begin(), entry.achieved_digits.end()); - - std::cout << " " << op_name - << ": pass " << entry.passed << "/" << entry.samples - << ", median " << median << "/" << checked_digits - << " digits (" << normalized_accuracy_percent(median) << "%)" - << ", worst " << worst << "/" << checked_digits - << " digits (" << normalized_accuracy_percent(worst) << "%)"; - - if (report_ulp) - { - std::cout << ", worst ulp "; - if (!entry.worst_ulp_exact) - std::cout << ">="; - std::cout << entry.worst_ulp; - if (entry.inexact_ulp_samples != 0) - std::cout << " (" << entry.inexact_ulp_samples << " capped)"; - } - else - { - std::cout << ", local ulp omitted"; - } - std::cout << ", worst scaled error " << std::scientific << entry.worst_scaled_error << std::fixed; - std::cout << "\n"; - } - - std::cout.flags(old_flags); - std::cout.precision(old_precision); - } - - void record( - const char* op_name, - const mpfr_ref& diff, - const mpfr_ref& scale, - const f256& got, - const mpfr_ref& expected, - bool passed) - { - auto& entry = stats[op_name]; - ++entry.samples; - if (passed) - ++entry.passed; - entry.achieved_digits.push_back(achieved_digits_from_error(diff, scale)); - if (scale != 0) - { - const mpfr_ref scaled_error = diff / scale; - if (scaled_error > entry.worst_scaled_error) - entry.worst_scaled_error = scaled_error; - } - - const ulp_distance_result ulps = true_ulp_distance_from_reference(got, expected); - if (!ulps.exact) - ++entry.inexact_ulp_samples; - - if (ulps.value > entry.worst_ulp) - { - entry.worst_ulp = ulps.value; - entry.worst_ulp_exact = ulps.exact; - } - else if (ulps.value == entry.worst_ulp && !ulps.exact) - { - entry.worst_ulp_exact = false; - } - } - - private: - std::string test_name; - bool report_ulp = true; - accuracy_report_scope* previous = nullptr; - std::map stats; - }; - - void record_accuracy_sample( - const char* op_name, - const f256& got, - const mpfr_ref& expected, - const mpfr_ref& diff, - const mpfr_ref& scale, - bool passed) - { - if (current_accuracy_report_scope != nullptr) - current_accuracy_report_scope->record(op_name, diff, scale, got, expected, passed); - } - - template - void check_binary_op(const char* op_name, const char* lhs_text, const char* rhs_text, F256Op&& f256_op, RefOp&& ref_op) - { - const f256 lhs = to_f256(lhs_text); - const f256 rhs = to_f256(rhs_text); - - const f256 got = f256_op(lhs, rhs); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_op(to_ref_exact(lhs), to_ref_exact(rhs)); - - mpfr_ref scale = abs_ref(expected); - if (scale < 1) - scale = 1; - - const mpfr_ref tolerance = function_tolerance(op_name, scale); - const mpfr_ref diff = abs_ref(got_ref - expected); - - CAPTURE(op_name); - CAPTURE(lhs_text); - CAPTURE(rhs_text); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - - CAPTURE(to_text_double(got.x0)); - CAPTURE(to_text_double(got.x1)); - CAPTURE(to_text_double(got.x2)); - CAPTURE(to_text_double(got.x3)); - - CAPTURE(to_text_double_hex(got.x0)); - CAPTURE(to_text_double_hex(got.x1)); - CAPTURE(to_text_double_hex(got.x2)); - CAPTURE(to_text_double_hex(got.x3)); - - record_accuracy_sample(op_name, got, expected, diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - template - void check_scalar_binary_op( - const char* op_name, - const char* case_label, - const char* scalar_kind, - const char* value_text, - Scalar scalar, - F256Op&& f256_op, - RefOp&& ref_op) - { - const f256 value = to_f256(value_text); - const mpfr_ref value_ref = to_ref_exact(value); - const mpfr_ref scalar_ref = scalar_to_ref(scalar); - - const f256 got = f256_op(value, scalar); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_op(value_ref, scalar_ref); - - mpfr_ref scale = abs_ref(expected); - if (scale < 1) - scale = 1; - - const mpfr_ref tolerance = function_tolerance(op_name, scale); - const mpfr_ref diff = abs_ref(got_ref - expected); - - CAPTURE(op_name); - CAPTURE(case_label); - CAPTURE(scalar_kind); - CAPTURE(value_text); - CAPTURE(scalar_to_text(scalar)); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - - CAPTURE(to_text_double(got.x0)); - CAPTURE(to_text_double(got.x1)); - CAPTURE(to_text_double(got.x2)); - CAPTURE(to_text_double(got.x3)); - - CAPTURE(to_text_double_hex(got.x0)); - CAPTURE(to_text_double_hex(got.x1)); - CAPTURE(to_text_double_hex(got.x2)); - CAPTURE(to_text_double_hex(got.x3)); - - record_accuracy_sample(op_name, got, expected, diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - template - void check_unary_op(const char* op_name, const char* input_text, F256Op&& f256_op, RefOp&& ref_op) - { - const f256 input = to_f256(input_text); - - const f256 got = f256_op(input); - const mpfr_ref input_ref = to_ref_exact(input); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_op(input_ref); - - mpfr_ref scale = abs_ref(expected); - if (scale < 1) - scale = 1; - - const mpfr_ref tolerance = function_tolerance(op_name, scale); - const mpfr_ref diff = abs_ref(got_ref - expected); - - CAPTURE(op_name); - CAPTURE(input_text); - CAPTURE(to_text(input)); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - - CAPTURE(to_text_double(input.x0)); - CAPTURE(to_text_double(input.x1)); - CAPTURE(to_text_double(input.x2)); - CAPTURE(to_text_double(input.x3)); - - CAPTURE(to_text_double_hex(input.x0)); - CAPTURE(to_text_double_hex(input.x1)); - CAPTURE(to_text_double_hex(input.x2)); - CAPTURE(to_text_double_hex(input.x3)); - - CAPTURE(to_text_double(got.x0)); - CAPTURE(to_text_double(got.x1)); - CAPTURE(to_text_double(got.x2)); - CAPTURE(to_text_double(got.x3)); - - CAPTURE(to_text_double_hex(got.x0)); - CAPTURE(to_text_double_hex(got.x1)); - CAPTURE(to_text_double_hex(got.x2)); - CAPTURE(to_text_double_hex(got.x3)); - - record_accuracy_sample(op_name, got, expected, diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - template - void check_unary_op_with_tolerance( - const char* op_name, - const char* input_text, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance, - F256Op&& f256_op, - RefOp&& ref_op) - { - const f256 input = to_f256(input_text); - - const f256 got = f256_op(input); - const mpfr_ref input_ref = to_ref_exact(input); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_op(input_ref); - - mpfr_ref accuracy_scale = abs_ref(expected); - if (accuracy_scale < 1) - accuracy_scale = 1; - - const mpfr_ref scale = abs_ref(expected); - const mpfr_ref tolerance = combined_tolerance(op_name, accuracy_scale, abs_tolerance, rel_tolerance, scale); - - const mpfr_ref diff = abs_ref(got_ref - expected); - - CAPTURE(op_name); - CAPTURE(input_text); - CAPTURE(to_text(input)); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - CAPTURE(to_text(abs_tolerance)); - CAPTURE(to_text(rel_tolerance)); - - CAPTURE(to_text_double(input.x0)); - CAPTURE(to_text_double(input.x1)); - CAPTURE(to_text_double(input.x2)); - CAPTURE(to_text_double(input.x3)); - - CAPTURE(to_text_double_hex(input.x0)); - CAPTURE(to_text_double_hex(input.x1)); - CAPTURE(to_text_double_hex(input.x2)); - CAPTURE(to_text_double_hex(input.x3)); - - CAPTURE(to_text_double(got.x0)); - CAPTURE(to_text_double(got.x1)); - CAPTURE(to_text_double(got.x2)); - CAPTURE(to_text_double(got.x3)); - - CAPTURE(to_text_double_hex(got.x0)); - CAPTURE(to_text_double_hex(got.x1)); - CAPTURE(to_text_double_hex(got.x2)); - CAPTURE(to_text_double_hex(got.x3)); - - record_accuracy_sample(op_name, got, expected, diff, accuracy_scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - template - void check_binary_op_with_tolerance( - const char* op_name, - const char* lhs_text, - const char* rhs_text, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance, - F256Op&& f256_op, - RefOp&& ref_op) - { - const f256 lhs = to_f256(lhs_text); - const f256 rhs = to_f256(rhs_text); - - const f256 got = f256_op(lhs, rhs); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_op(to_ref_exact(lhs), to_ref_exact(rhs)); - - mpfr_ref accuracy_scale = abs_ref(expected); - if (accuracy_scale < 1) - accuracy_scale = 1; - - const mpfr_ref scale = abs_ref(expected); - const mpfr_ref tolerance = combined_tolerance(op_name, accuracy_scale, abs_tolerance, rel_tolerance, scale); - - const mpfr_ref diff = abs_ref(got_ref - expected); - - CAPTURE(op_name); - CAPTURE(lhs_text); - CAPTURE(rhs_text); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - CAPTURE(to_text(abs_tolerance)); - CAPTURE(to_text(rel_tolerance)); - - CAPTURE(to_text_double(got.x0)); - CAPTURE(to_text_double(got.x1)); - CAPTURE(to_text_double(got.x2)); - CAPTURE(to_text_double(got.x3)); - - CAPTURE(to_text_double_hex(got.x0)); - CAPTURE(to_text_double_hex(got.x1)); - CAPTURE(to_text_double_hex(got.x2)); - CAPTURE(to_text_double_hex(got.x3)); - - record_accuracy_sample(op_name, got, expected, diff, accuracy_scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - [[nodiscard]] mpfr_ref ref_floor(const mpfr_ref& value) - { - return boost::multiprecision::floor(value); - } - - [[nodiscard]] mpfr_ref ref_ceil(const mpfr_ref& value) - { - return boost::multiprecision::ceil(value); - } - - [[nodiscard]] mpfr_ref ref_trunc(const mpfr_ref& value) - { - return value < 0 ? ref_ceil(value) : ref_floor(value); - } - - [[nodiscard]] mpfr_ref ref_fmod(const mpfr_ref& x, const mpfr_ref& y) - { - return x - ref_trunc(x / y) * y; - } - - [[nodiscard]] mpfr_ref ref_round_to_even(const mpfr_ref& value) - { - mpfr_ref rounded = ref_floor(value + mpfr_ref{ "0.5" }); - if ((rounded - value) == mpfr_ref{ "0.5" } && ref_fmod(rounded, mpfr_ref{ 2 }) != mpfr_ref{ 0 }) - rounded -= 1; - return rounded; - } - - [[nodiscard]] mpfr_ref ref_round_half_away_zero(const mpfr_ref& value) - { - return value < 0 - ? ref_ceil(value - mpfr_ref{ "0.5" }) - : ref_floor(value + mpfr_ref{ "0.5" }); - } - - [[nodiscard]] const mpfr_ref& ln2_ref() - { - static const mpfr_ref value = boost::multiprecision::log(mpfr_ref{ 2 }); - return value; - } - - [[nodiscard]] const mpfr_ref& ln10_ref() - { - static const mpfr_ref value = boost::multiprecision::log(mpfr_ref{ 10 }); - return value; - } - - [[nodiscard]] mpfr_ref ref_exp2(const mpfr_ref& value) - { - return boost::multiprecision::exp(value * ln2_ref()); - } - - [[nodiscard]] mpfr_ref ref_log2(const mpfr_ref& value) - { - return boost::multiprecision::log(value) / ln2_ref(); - } - - [[nodiscard]] mpfr_ref ref_log10(const mpfr_ref& value) - { - return boost::multiprecision::log(value) / ln10_ref(); - } - - [[nodiscard]] bool ref_is_integer(const mpfr_ref& value) - { - return boost::multiprecision::floor(value) == value; - } - - [[nodiscard]] mpfr_ref ref_powi(mpfr_ref base, long long exponent) - { - if (exponent == 0) - return mpfr_ref{ 1 }; - - bool invert = exponent < 0; - unsigned long long e = invert - ? static_cast(-(exponent + 1)) + 1ull - : static_cast(exponent); - - mpfr_ref result{ 1 }; - while (e != 0) - { - if ((e & 1ull) != 0) - result *= base; - e >>= 1ull; - if (e != 0) - base *= base; - } - - return invert ? (mpfr_ref{ 1 } / result) : result; - } - - [[nodiscard]] mpfr_ref ref_pow(const mpfr_ref& base, const mpfr_ref& exponent) - { - if (base < 0 && ref_is_integer(exponent)) - { - const long long n = exponent.convert_to(); - const mpfr_ref mag = ref_powi(-base, n); - return (n & 1LL) ? -mag : mag; - } - - return boost::multiprecision::exp(exponent * boost::multiprecision::log(base)); - } - - [[nodiscard]] mpfr_ref ref_ldexp(mpfr_ref value, int exponent) - { - if (exponent > 0) - { - for (int i = 0; i < exponent; ++i) - value *= 2; - } - else if (exponent < 0) - { - for (int i = 0; i < -exponent; ++i) - value /= 2; - } - - return value; - } - - [[nodiscard]] const mpfr_ref& pi_ref() - { - static const mpfr_ref value{ - "3.14159265358979323846264338327950288419716939937510582097494459230781640628620899" - }; - return value; - } - - template - [[nodiscard]] std::string to_scientific_text(const T& value, int digits) - { - return value.str(digits, std::ios_base::scientific); - } - - [[nodiscard]] mpfr_ref random_unit_interval_for_f256(bl::mt19937_64& rng) - { - bl::uniform_real_distribution dist{ f256{ 0.0 }, f256{ 1.0 } }; - return to_ref_exact(dist(rng)); - } - - [[nodiscard]] mpfr_ref random_sine_kernel_argument_for_f256(bl::mt19937_64& rng) - { - bl::uniform_int_distribution sign_dist(0, 1); - - mpfr_ref value = random_unit_interval_for_f256(rng) * (pi_ref() / 4); - if (sign_dist(rng) != 0) - value = -value; - - return value; - } - - [[nodiscard]] mpfr_ref random_sine_reduction_argument_for_f256(bl::mt19937_64& rng) - { - bl::uniform_int_distribution multiple_dist(-1000000LL, 1000000LL); - - const mpfr_ref half_pi = pi_ref() / 2; - const mpfr_ref quarter_pi = pi_ref() / 4; - - mpfr_ref offset = random_unit_interval_for_f256(rng) * (quarter_pi * 2); - offset -= quarter_pi; - - return mpfr_ref{ static_cast(multiple_dist(rng)) } * half_pi + offset; - } - - void check_sin_case( - const char* label, - const mpfr_ref& input, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance) - { - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("label: " << label); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "sin", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::sin(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sin(value); }); - } - - void check_cos_case( - const char* label, - const mpfr_ref& input, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance) - { - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("label: " << label); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "cos", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::cos(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::cos(value); }); - } - - [[nodiscard]] mpfr_ref random_signed_interval_for_f256(bl::mt19937_64& rng, const mpfr_ref& limit) - { - bl::uniform_int_distribution sign_dist(0, 1); - - mpfr_ref value = random_unit_interval_for_f256(rng) * limit; - if (sign_dist(rng) != 0) - value = -value; - - return value; - } - - [[nodiscard]] mpfr_ref random_signed_interval_away_from_zero_for_f256( - bl::mt19937_64& rng, - const mpfr_ref& minimum, - const mpfr_ref& width) - { - bl::uniform_int_distribution sign_dist(0, 1); - - mpfr_ref value = minimum + random_unit_interval_for_f256(rng) * width; - if (sign_dist(rng) != 0) - value = -value; - - return value; - } - - [[nodiscard]] mpfr_ref random_positive_for_f256(bl::mt19937_64& rng) - { - mpfr_ref value = abs_ref(to_ref_exact(random_finite_for_f256(rng))); - if (value == 0) - value = mpfr_ref{ "0.5" }; - return value; - } - - [[nodiscard]] mpfr_ref random_nonzero_for_f256(bl::mt19937_64& rng) - { - mpfr_ref value = to_ref_exact(random_finite_for_f256(rng)); - if (value == 0) - value = mpfr_ref{ "0.5" }; - return value; - } - - [[nodiscard]] mpfr_ref random_pow_base_for_f256(bl::mt19937_64& rng) - { - return mpfr_ref{ "0.125" } + random_unit_interval_for_f256(rng) * mpfr_ref{ "7.875" }; - } - - void check_ldexp_case(const char* label, const mpfr_ref& input, int exponent) - { - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("label: " << label); - INFO("input_text: " << input_text); - INFO("exponent: " << exponent); - - const f256 input_value = to_f256(input_text.c_str()); - const f256 got = bl::ldexp(input_value, exponent); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_ldexp(to_ref_exact(input_value), exponent); - - mpfr_ref scale = abs_ref(expected); - if (scale < 1) - scale = 1; - - const mpfr_ref tolerance = function_tolerance("ldexp", scale); - const mpfr_ref diff = abs_ref(got_ref - expected); - - CAPTURE(label); - CAPTURE(input_text); - CAPTURE(exponent); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - - CAPTURE(to_text_double(got.x0)); - CAPTURE(to_text_double(got.x1)); - CAPTURE(to_text_double(got.x2)); - CAPTURE(to_text_double(got.x3)); - - CAPTURE(to_text_double_hex(got.x0)); - CAPTURE(to_text_double_hex(got.x1)); - CAPTURE(to_text_double_hex(got.x2)); - CAPTURE(to_text_double_hex(got.x3)); - - record_accuracy_sample("ldexp", got, expected, diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - void check_pow_case( - const char* label, - const mpfr_ref& base, - const mpfr_ref& exponent, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance) - { - const std::string base_text = to_scientific_text(base, printed_digits + 6); - const std::string exponent_text = to_scientific_text(exponent, printed_digits + 6); - - INFO("label: " << label); - INFO("base_text: " << base_text); - INFO("exponent_text: " << exponent_text); - - check_binary_op_with_tolerance( - "pow", - base_text.c_str(), - exponent_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& x, const f256& y) { return bl::pow(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return ref_pow(x, y); }); - } - - -[[nodiscard]] mpfr_ref ref_remainder_ties_even(const mpfr_ref& x, const mpfr_ref& y) - { - return x - ref_round_to_even(x / y) * y; - } - - [[nodiscard]] mpfr_ref ref_cbrt(const mpfr_ref& value) - { - if (value < 0) - return -boost::multiprecision::cbrt(-value); - return boost::multiprecision::cbrt(value); - } - - [[nodiscard]] mpfr_ref ref_hypot(const mpfr_ref& x, const mpfr_ref& y) - { - return boost::multiprecision::sqrt(x * x + y * y); - } - - [[nodiscard]] mpfr_ref ref_pow10(int exponent) - { - return ref_powi(mpfr_ref{ 10 }, exponent); - } - - [[nodiscard]] mpfr_ref random_unit_symmetric_for_f256(bl::mt19937_64& rng) - { - return random_signed_interval_for_f256(rng, mpfr_ref{ 1.0 }); - } - - [[nodiscard]] mpfr_ref random_atanh_argument_for_f256(bl::mt19937_64& rng) - { - return random_signed_interval_for_f256(rng, mpfr_ref{ "0.95" }); - } - - [[nodiscard]] mpfr_ref random_acosh_argument_for_f256(bl::mt19937_64& rng) - { - return mpfr_ref{ 1.0 } + random_unit_interval_for_f256(rng) * mpfr_ref{ 64.0 }; - } - - [[nodiscard]] mpfr_ref random_log1p_argument_for_f256(bl::mt19937_64& rng) - { - return mpfr_ref{ "-0.95" } + random_unit_interval_for_f256(rng) * mpfr_ref{ "16.95" }; - } - - [[nodiscard]] mpfr_ref random_gamma_positive_for_f256(bl::mt19937_64& rng) - { - return mpfr_ref{ "0.125" } + random_unit_interval_for_f256(rng) * mpfr_ref{ "15.875" }; - } - - [[nodiscard]] mpfr_ref random_erf_argument_for_f256(bl::mt19937_64& rng) - { - return random_signed_interval_for_f256(rng, mpfr_ref{ 4.0 }); - } - - void require_exact_value(const char* label, const f256& got, const f256& expected) - { - CAPTURE(label); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text_double(got.x0)); - CAPTURE(to_text_double(got.x1)); - CAPTURE(to_text_double(got.x2)); - CAPTURE(to_text_double(got.x3)); - CAPTURE(to_text_double(expected.x0)); - CAPTURE(to_text_double(expected.x1)); - CAPTURE(to_text_double(expected.x2)); - CAPTURE(to_text_double(expected.x3)); - CAPTURE(to_text_double_hex(got.x0)); - CAPTURE(to_text_double_hex(got.x1)); - CAPTURE(to_text_double_hex(got.x2)); - CAPTURE(to_text_double_hex(got.x3)); - CAPTURE(to_text_double_hex(expected.x0)); - CAPTURE(to_text_double_hex(expected.x1)); - CAPTURE(to_text_double_hex(expected.x2)); - CAPTURE(to_text_double_hex(expected.x3)); - - REQUIRE(got.x0 == expected.x0); - REQUIRE(got.x1 == expected.x1); - REQUIRE(got.x2 == expected.x2); - REQUIRE(got.x3 == expected.x3); - } - - void require_integer_overload_value(const char* label, const char* operation, const f256& got, const f256& expected) - { - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected_ref = to_ref_exact(expected); - const mpfr_ref diff = abs_ref(got_ref - expected_ref); - mpfr_ref scale = abs_ref(expected_ref); - if (scale < 1) - scale = 1; - - const mpfr_ref tolerance = mpfr_ref{ "4e-60" } * scale; - - CAPTURE(label); - CAPTURE(operation); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - CAPTURE(to_text_double_hex(got.x0)); - CAPTURE(to_text_double_hex(got.x1)); - CAPTURE(to_text_double_hex(got.x2)); - CAPTURE(to_text_double_hex(got.x3)); - CAPTURE(to_text_double_hex(expected.x0)); - CAPTURE(to_text_double_hex(expected.x1)); - CAPTURE(to_text_double_hex(expected.x2)); - CAPTURE(to_text_double_hex(expected.x3)); - - REQUIRE(diff <= tolerance); - } - - [[nodiscard]] bool same_bits(double lhs, double rhs) noexcept - { - return std::bit_cast(lhs) == std::bit_cast(rhs); - } - - void require_canonical_value(const char* label, const f256& got) - { - CAPTURE(label); - CAPTURE(to_text(got)); - CAPTURE(to_text_double_hex(got.x0)); - CAPTURE(to_text_double_hex(got.x1)); - CAPTURE(to_text_double_hex(got.x2)); - CAPTURE(to_text_double_hex(got.x3)); - - if (!bl::isfinite(got) || bl::iszero(got)) - return; - - const f256 expected = detail::_f256::renorm4(got.x0, got.x1, got.x2, got.x3); - CAPTURE(to_text(expected)); - CAPTURE(to_text_double_hex(expected.x0)); - CAPTURE(to_text_double_hex(expected.x1)); - CAPTURE(to_text_double_hex(expected.x2)); - CAPTURE(to_text_double_hex(expected.x3)); - - REQUIRE(same_bits(got.x0, expected.x0)); - REQUIRE(same_bits(got.x1, expected.x1)); - REQUIRE(same_bits(got.x2, expected.x2)); - REQUIRE(same_bits(got.x3, expected.x3)); - } - - void check_sincos_case( - const char* label, - const mpfr_ref& input, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance) - { - const std::string input_text = to_scientific_text(input, printed_digits + 6); - const f256 input_value = to_f256(input_text.c_str()); - - f256 got_s{}; - f256 got_c{}; - const bool ok = bl::sincos(input_value, got_s, got_c); - - INFO("label: " << label); - INFO("input_text: " << input_text); - REQUIRE(ok); - - const mpfr_ref expected_s = boost::multiprecision::sin(to_ref_exact(input_value)); - const mpfr_ref expected_c = boost::multiprecision::cos(to_ref_exact(input_value)); - - { - const mpfr_ref got_ref = to_ref_exact(got_s); - mpfr_ref accuracy_scale = abs_ref(expected_s); - if (accuracy_scale < 1) - accuracy_scale = 1; - - const mpfr_ref scale = abs_ref(expected_s); - const mpfr_ref tolerance = combined_tolerance("sincos.sin", accuracy_scale, abs_tolerance, rel_tolerance, scale); - - const mpfr_ref diff = abs_ref(got_ref - expected_s); - CAPTURE(to_text(got_s)); - CAPTURE(to_text(expected_s)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - record_accuracy_sample("sincos.sin", got_s, expected_s, diff, accuracy_scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - { - const mpfr_ref got_ref = to_ref_exact(got_c); - mpfr_ref accuracy_scale = abs_ref(expected_c); - if (accuracy_scale < 1) - accuracy_scale = 1; - - const mpfr_ref scale = abs_ref(expected_c); - const mpfr_ref tolerance = combined_tolerance("sincos.cos", accuracy_scale, abs_tolerance, rel_tolerance, scale); - - const mpfr_ref diff = abs_ref(got_ref - expected_c); - CAPTURE(to_text(got_c)); - CAPTURE(to_text(expected_c)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - record_accuracy_sample("sincos.cos", got_c, expected_c, diff, accuracy_scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - } - - void check_remquo_case( - const char* label, - const mpfr_ref& x, - const mpfr_ref& y, - const mpfr_ref& abs_tolerance, - const mpfr_ref& rel_tolerance) - { - const std::string lhs_text = to_scientific_text(x, printed_digits + 6); - const std::string rhs_text = to_scientific_text(y, printed_digits + 6); - - const f256 lhs = to_f256(lhs_text.c_str()); - const f256 rhs = to_f256(rhs_text.c_str()); - - int got_quo = 0; - const f256 got = bl::remquo(lhs, rhs, &got_quo); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_remainder_ties_even(to_ref_exact(lhs), to_ref_exact(rhs)); - - const mpfr_ref n = ref_round_to_even(to_ref_exact(lhs) / to_ref_exact(rhs)); - int expected_quo = static_cast(ref_trunc(ref_fmod(abs_ref(n), mpfr_ref{ 2147483648.0 })).convert_to()); - if (n < 0) - expected_quo = -expected_quo; - - mpfr_ref accuracy_scale = abs_ref(expected); - if (accuracy_scale < 1) - accuracy_scale = 1; - - const mpfr_ref scale = abs_ref(expected); - const mpfr_ref tolerance = combined_tolerance("remquo", accuracy_scale, abs_tolerance, rel_tolerance, scale); - - const mpfr_ref diff = abs_ref(got_ref - expected); - - INFO("label: " << label); - CAPTURE(lhs_text); - CAPTURE(rhs_text); - CAPTURE(got_quo); - CAPTURE(expected_quo); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - - record_accuracy_sample("remquo", got, expected, diff, accuracy_scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - REQUIRE(got_quo == expected_quo); - } - - struct scalar_mixed_recurrence_case - { - const char* x = "0"; - const char* y = "0"; - const char* a = "0"; - const char* b = "0"; - const char* c = "1"; - const char* d = "1"; - }; - - template - struct scalar_mixed_recurrence_state - { - T x{}; - T y{}; - T a{}; - T b{}; - T c{}; - T d{}; - }; - - template - [[nodiscard]] T scalar_mixed_recurrence_value(const char* text); - - template<> - [[nodiscard]] f256 scalar_mixed_recurrence_value(const char* text) - { - return to_f256(text); - } - - template<> - [[nodiscard]] mpfr_ref scalar_mixed_recurrence_value(const char* text) - { - return to_ref_exact(to_f256(text)); - } - - template - [[nodiscard]] T blend_scalar_mixed_recurrence_result(const T& value, const T& acc) - { - const T scaled_acc = acc * 0.25; - return value + scaled_acc; - } - - template - [[nodiscard]] std::pair run_scalar_mixed_recurrence_precision( - const std::array& specs, - int rounds) - { - std::array, ValueCount> state{}; - for (std::size_t i = 0; i < ValueCount; ++i) - { - state[i].x = scalar_mixed_recurrence_value(specs[i].x); - state[i].y = scalar_mixed_recurrence_value(specs[i].y); - state[i].a = scalar_mixed_recurrence_value(specs[i].a); - state[i].b = scalar_mixed_recurrence_value(specs[i].b); - state[i].c = scalar_mixed_recurrence_value(specs[i].c); - state[i].d = scalar_mixed_recurrence_value(specs[i].d); - } - - constexpr std::array add_rhs{ 0.125, -0.1875, 0.3125, -0.4375, 0.5625, -0.6875, 0.8125, -0.9375 }; - constexpr std::array add_lhs{ -0.03125, 0.09375, -0.15625, 0.21875, -0.28125, 0.34375, -0.40625, 0.46875 }; - constexpr std::array mul_rhs{ 0.875, -1.125, 1.375, -0.625, 0.5625, -0.8125, 1.0625, -1.3125 }; - constexpr std::array mul_lhs{ -1.0625, 0.6875, -0.9375, 1.1875, -0.75, 1.5, -1.25, 0.8125 }; - constexpr std::array div_rhs{ 1.125, -1.375, 1.625, -1.875, 2.125, -2.375, 2.625, -2.875 }; - - T acc_x = state.front().x; - T acc_y = state.front().y; - - for (int round = 0; round < rounds; ++round) - { - for (std::size_t i = 0; i < ValueCount; ++i) - { - auto& item = state[i]; - const std::size_t scalar_index = (i + static_cast(round)) % add_rhs.size(); - - const T scalar_rhs_add = item.x + add_rhs[scalar_index]; - const T scalar_lhs_add = add_lhs[scalar_index] + item.y; - const T scalar_rhs_mul = scalar_rhs_add * mul_rhs[scalar_index]; - const T scalar_lhs_mul = mul_lhs[scalar_index] * scalar_lhs_add; - const T scalar_div = scalar_rhs_mul / div_rhs[scalar_index]; - - const T qd_add = scalar_div + item.a; - const T qd_sub = scalar_lhs_mul - item.b; - const T qd_mul = qd_add * qd_sub; - const T c2 = item.c * item.c; - const T d2 = item.d * item.d; - const T denominator_base = c2 + d2; - const T denominator = denominator_base + 1.0; - const T qd_div = qd_mul / denominator; - - const T x_denominator = denominator + 2.0; - const T c_half = item.c * 0.5; - const T y_denominator_base = denominator + c_half; - const T y_denominator = y_denominator_base + 2.5; - - const T x_step = qd_div / x_denominator; - const T x_damping = 0.125 * item.a; - const T y_delta = qd_add - qd_sub; - const T y_step = y_delta / y_denominator; - const T y_damping = item.b * 0.0625; - - item.x = x_step + x_damping; - item.y = y_step - y_damping; - - acc_x = blend_scalar_mixed_recurrence_result(item.x, acc_x); - acc_y = blend_scalar_mixed_recurrence_result(item.y, acc_y); - } - } - - return { acc_x, acc_y }; - } - - [[nodiscard]] mpfr_ref scalar_mixed_recurrence_tolerance(const mpfr_ref& scale, int rounds, std::size_t state_count) - { - constexpr int operations_per_state_update = 24; - const mpfr_ref operation_count = - mpfr_ref{ static_cast(state_count) } * - mpfr_ref{ rounds } * - mpfr_ref{ operations_per_state_update }; - return function_scaled_tolerance("divide") * operation_count * scale; - } - - void check_scalar_mixed_recurrence_component( - const char* component, - const f256& got, - const mpfr_ref& expected, - int rounds, - std::size_t state_count) - { - const mpfr_ref got_ref = to_ref_exact(got); - mpfr_ref scale = abs_ref(expected); - if (scale < 1) - scale = 1; - - const mpfr_ref tolerance = scalar_mixed_recurrence_tolerance(scale, rounds, state_count); - const mpfr_ref diff = abs_ref(got_ref - expected); - - CAPTURE(component); - CAPTURE(rounds); - CAPTURE(state_count); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - CAPTURE(to_text_double(got.x0)); - CAPTURE(to_text_double(got.x1)); - CAPTURE(to_text_double(got.x2)); - CAPTURE(to_text_double(got.x3)); - CAPTURE(to_text_double_hex(got.x0)); - CAPTURE(to_text_double_hex(got.x1)); - CAPTURE(to_text_double_hex(got.x2)); - CAPTURE(to_text_double_hex(got.x3)); - - record_accuracy_sample("scalar_mixed_recurrence", got, expected, diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - struct fused_expression_case - { - std::string a; - std::string b; - std::string c; - std::string d; - std::string e; - double scalar = 1.0; - double denom_plus = 2.0; - double denom_minus = 3.0; - }; - - struct fused_expression_budget - { - int add = 0; - int subtract = 0; - int multiply = 0; - int divide = 0; - }; - - [[nodiscard]] mpfr_ref fused_expression_tolerance(const mpfr_ref& scale, fused_expression_budget budget) - { - mpfr_ref tolerance = 0; - tolerance += function_scaled_tolerance("add") * budget.add; - tolerance += function_scaled_tolerance("subtract") * budget.subtract; - tolerance += function_scaled_tolerance("multiply") * budget.multiply; - tolerance += function_scaled_tolerance("divide") * budget.divide; - return tolerance * scale; - } - - void update_expression_scale(mpfr_ref& scale, const mpfr_ref& value) - { - const mpfr_ref magnitude = abs_ref(value); - if (magnitude > scale) - scale = magnitude; - } - - [[nodiscard]] mpfr_ref fused_expression_scale( - const mpfr_ref& expected, - const mpfr_ref& a, - const mpfr_ref& b, - const mpfr_ref& c, - const mpfr_ref& d, - const mpfr_ref& e, - const mpfr_ref& scalar, - const mpfr_ref& denom_plus, - const mpfr_ref& denom_minus) - { - mpfr_ref scale = 1; - update_expression_scale(scale, expected); - update_expression_scale(scale, a); - update_expression_scale(scale, b); - update_expression_scale(scale, c); - update_expression_scale(scale, d); - update_expression_scale(scale, e); - update_expression_scale(scale, a * b); - update_expression_scale(scale, c * d); - update_expression_scale(scale, a * scalar); - update_expression_scale(scale, b * scalar); - update_expression_scale(scale, e + denom_plus); - update_expression_scale(scale, denom_minus - e); - return scale; - } - - template - void check_fused_expression_case( - const char* label, - const fused_expression_case& spec, - std::size_t case_index, - fused_expression_budget budget, - F256Op&& f256_op, - RefOp&& ref_op) - { - const f256 a = to_f256(spec.a.c_str()); - const f256 b = to_f256(spec.b.c_str()); - const f256 c = to_f256(spec.c.c_str()); - const f256 d = to_f256(spec.d.c_str()); - const f256 e = to_f256(spec.e.c_str()); - - const mpfr_ref a_ref = to_ref_exact(a); - const mpfr_ref b_ref = to_ref_exact(b); - const mpfr_ref c_ref = to_ref_exact(c); - const mpfr_ref d_ref = to_ref_exact(d); - const mpfr_ref e_ref = to_ref_exact(e); - const mpfr_ref scalar_ref{ spec.scalar }; - const mpfr_ref denom_plus_ref{ spec.denom_plus }; - const mpfr_ref denom_minus_ref{ spec.denom_minus }; - - const f256 got = f256_op(a, b, c, d, e, spec.scalar, spec.denom_plus, spec.denom_minus); - const mpfr_ref got_ref = to_ref_exact(got); - const mpfr_ref expected = ref_op( - a_ref, - b_ref, - c_ref, - d_ref, - e_ref, - scalar_ref, - denom_plus_ref, - denom_minus_ref); - - const mpfr_ref scale = fused_expression_scale( - expected, - a_ref, - b_ref, - c_ref, - d_ref, - e_ref, - scalar_ref, - denom_plus_ref, - denom_minus_ref); - const mpfr_ref tolerance = fused_expression_tolerance(scale, budget); - const mpfr_ref diff = abs_ref(got_ref - expected); - - CAPTURE(label); - CAPTURE(case_index); - CAPTURE(spec.a); - CAPTURE(spec.b); - CAPTURE(spec.c); - CAPTURE(spec.d); - CAPTURE(spec.e); - CAPTURE(to_text_double(spec.scalar)); - CAPTURE(to_text_double(spec.denom_plus)); - CAPTURE(to_text_double(spec.denom_minus)); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - CAPTURE(to_text(diff)); - CAPTURE(to_text(tolerance)); - CAPTURE(to_text(scale)); - - CAPTURE(to_text_double(got.x0)); - CAPTURE(to_text_double(got.x1)); - CAPTURE(to_text_double(got.x2)); - CAPTURE(to_text_double(got.x3)); - - CAPTURE(to_text_double_hex(got.x0)); - CAPTURE(to_text_double_hex(got.x1)); - CAPTURE(to_text_double_hex(got.x2)); - CAPTURE(to_text_double_hex(got.x3)); - - record_accuracy_sample(label, got, expected, diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - - template - void run_fused_expression_precision_suite(const Cases& cases) - { - std::size_t case_index = 0; - for (const auto& spec : cases) - { - check_fused_expression_case( - "fused add/add leaf chain", - spec, - case_index, - { 2, 0, 0, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, auto, auto, auto) { - return (a + b) + c; - }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, const auto&, const auto&, const auto&) { - return (a + b) + c; - }); - - check_fused_expression_case( - "fused scaled add leaf chain", - spec, - case_index, - { 2, 0, 0, 0 }, - [](const auto& a, const auto&, const auto& c, const auto&, const auto&, auto, auto, auto) { - return (a + a) + c; - }, - [](const auto& a, const auto&, const auto& c, const auto&, const auto&, const auto&, const auto&, const auto&) { - return (a + a) + c; - }); - - check_fused_expression_case( - "fused sub/add leaf chain", - spec, - case_index, - { 1, 1, 0, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, auto, auto, auto) { - return (a - b) + c; - }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, const auto&, const auto&, const auto&) { - return (a - b) + c; - }); - - check_fused_expression_case( - "fused value plus leaf difference", - spec, - case_index, - { 1, 1, 0, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, auto, auto, auto) { - return a + (b - c); - }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, const auto&, const auto&, const auto&) { - return a + (b - c); - }); - - check_fused_expression_case( - "fused add/sub leaf chain", - spec, - case_index, - { 1, 1, 0, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, auto, auto, auto) { - return (a + b) - c; - }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, const auto&, const auto&, const auto&) { - return (a + b) - c; - }); - - check_fused_expression_case( - "fused value minus leaf sum", - spec, - case_index, - { 1, 1, 0, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, auto, auto, auto) { - return a - (b + c); - }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, const auto&, const auto&, const auto&) { - return a - (b + c); - }); - - check_fused_expression_case( - "fused value minus leaf difference", - spec, - case_index, - { 1, 1, 0, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, auto, auto, auto) { - return a - (b - c); - }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, const auto&, const auto&, const auto&) { - return a - (b - c); - }); - - check_fused_expression_case( - "fused product plus value", - spec, - case_index, - { 1, 0, 1, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, auto, auto, auto) { - return (a * b) + c; - }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, const auto&, const auto&, const auto&) { - return (a * b) + c; - }); - - check_fused_expression_case( - "fused value plus product", - spec, - case_index, - { 1, 0, 1, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, auto, auto, auto) { - return a + (b * c); - }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, const auto&, const auto&, const auto&) { - return a + (b * c); - }); - - check_fused_expression_case( - "fused product minus value", - spec, - case_index, - { 0, 1, 1, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, auto, auto, auto) { - return (a * b) - c; - }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, const auto&, const auto&, const auto&) { - return (a * b) - c; - }); - - check_fused_expression_case( - "fused value minus product", - spec, - case_index, - { 0, 1, 1, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, auto, auto, auto) { - return a - (b * c); - }, - [](const auto& a, const auto& b, const auto& c, const auto&, const auto&, const auto&, const auto&, const auto&) { - return a - (b * c); - }); - - check_fused_expression_case( - "fused product sum", - spec, - case_index, - { 1, 0, 2, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto&, auto, auto, auto) { - return (a * b) + (c * d); - }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto&, const auto&, const auto&, const auto&) { - return (a * b) + (c * d); - }); - - check_fused_expression_case( - "fused product difference", - spec, - case_index, - { 0, 1, 2, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto&, auto, auto, auto) { - return (a * b) - (c * d); - }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto&, const auto&, const auto&, const auto&) { - return (a * b) - (c * d); - }); - - check_fused_expression_case( - "fused product sum plus value", - spec, - case_index, - { 2, 0, 2, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto& e, auto, auto, auto) { - return ((a * b) + (c * d)) + e; - }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto& e, const auto&, const auto&, const auto&) { - return ((a * b) + (c * d)) + e; - }); - - check_fused_expression_case( - "fused product sum minus value", - spec, - case_index, - { 1, 1, 2, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto& e, auto, auto, auto) { - return ((a * b) + (c * d)) - e; - }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto& e, const auto&, const auto&, const auto&) { - return ((a * b) + (c * d)) - e; - }); - - check_fused_expression_case( - "fused product difference plus value", - spec, - case_index, - { 1, 1, 2, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto& e, auto, auto, auto) { - return ((a * b) - (c * d)) + e; - }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto& e, const auto&, const auto&, const auto&) { - return ((a * b) - (c * d)) + e; - }); - - check_fused_expression_case( - "fused product difference minus value", - spec, - case_index, - { 0, 2, 2, 0 }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto& e, auto, auto, auto) { - return ((a * b) - (c * d)) - e; - }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto& e, const auto&, const auto&, const auto&) { - return ((a * b) - (c * d)) - e; - }); - - check_fused_expression_case( - "fused scalar product plus value", - spec, - case_index, - { 1, 0, 1, 0 }, - [](const auto& a, const auto& b, const auto&, const auto&, const auto&, auto scalar, auto, auto) { - return (a * scalar) + b; - }, - [](const auto& a, const auto& b, const auto&, const auto&, const auto&, const auto& scalar, const auto&, const auto&) { - return (a * scalar) + b; - }); - - check_fused_expression_case( - "fused value plus scalar product", - spec, - case_index, - { 1, 0, 1, 0 }, - [](const auto& a, const auto& b, const auto&, const auto&, const auto&, auto scalar, auto, auto) { - return a + (b * scalar); - }, - [](const auto& a, const auto& b, const auto&, const auto&, const auto&, const auto& scalar, const auto&, const auto&) { - return a + (b * scalar); - }); - - check_fused_expression_case( - "fused scalar product minus value", - spec, - case_index, - { 0, 1, 1, 0 }, - [](const auto& a, const auto& b, const auto&, const auto&, const auto&, auto scalar, auto, auto) { - return (a * scalar) - b; - }, - [](const auto& a, const auto& b, const auto&, const auto&, const auto&, const auto& scalar, const auto&, const auto&) { - return (a * scalar) - b; - }); - - check_fused_expression_case( - "fused value minus scalar product", - spec, - case_index, - { 0, 1, 1, 0 }, - [](const auto& a, const auto& b, const auto&, const auto&, const auto&, auto scalar, auto, auto) { - return a - (b * scalar); - }, - [](const auto& a, const auto& b, const auto&, const auto&, const auto&, const auto& scalar, const auto&, const auto&) { - return a - (b * scalar); - }); - - check_fused_expression_case( - "fused product sum over add-double denominator", - spec, - case_index, - { 2, 0, 2, 1 }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto& e, auto, auto denom_plus, auto) { - return ((a * b) + (c * d)) / (e + denom_plus); - }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto& e, const auto&, const auto& denom_plus, const auto&) { - return ((a * b) + (c * d)) / (e + denom_plus); - }); - - check_fused_expression_case( - "fused product difference over double-sub denominator", - spec, - case_index, - { 0, 2, 2, 1 }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto& e, auto, auto, auto denom_minus) { - return ((a * b) - (c * d)) / (denom_minus - e); - }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto& e, const auto&, const auto&, const auto& denom_minus) { - return ((a * b) - (c * d)) / (denom_minus - e); - }); - - check_fused_expression_case( - "fused product sum over product-sum denominator", - spec, - case_index, - { 2, 0, 4, 1 }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto& e, auto, auto, auto) { - return (((a * b) + (c * d)) + e) / ((c * c) + (d * d)); - }, - [](const auto& a, const auto& b, const auto& c, const auto& d, const auto& e, const auto&, const auto&, const auto&) { - return (((a * b) + (c * d)) + e) / ((c * c) + (d * d)); - }); - - ++case_index; - } - } - - [[nodiscard]] std::string fused_expression_random_text(const mpfr_ref& value) - { - return to_scientific_text(value, printed_digits + 6); - } - - [[nodiscard]] fused_expression_case random_fused_expression_case(bl::mt19937_64& rng) - { - constexpr std::array scalars{{ - 0.5, -0.75, 1.125, -1.375, 1.625, -1.875, - 0.3125, -0.4375, 2.25, -2.5, 0.0625, -0.09375 - }}; - constexpr std::array add_denominators{{ - 1.5, 1.875, 2.25, 2.625, 3.0, 3.375, 3.75, 4.125 - }}; - constexpr std::array sub_denominators{{ - 2.0, 2.375, 2.75, 3.125, 3.5, 3.875, 4.25, 4.625 - }}; - - bl::uniform_int_distribution scalar_dist(0, scalars.size() - 1); - bl::uniform_int_distribution denominator_dist(0, add_denominators.size() - 1); - - return { - fused_expression_random_text(random_signed_interval_for_f256(rng, mpfr_ref{ 2.0 })), - fused_expression_random_text(random_signed_interval_for_f256(rng, mpfr_ref{ 2.0 })), - fused_expression_random_text(random_signed_interval_away_from_zero_for_f256(rng, mpfr_ref{ "0.25" }, mpfr_ref{ "1.75" })), - fused_expression_random_text(random_signed_interval_away_from_zero_for_f256(rng, mpfr_ref{ "0.25" }, mpfr_ref{ "1.75" })), - fused_expression_random_text(random_signed_interval_for_f256(rng, mpfr_ref{ "0.75" })), - scalars[scalar_dist(rng)], - add_denominators[denominator_dist(rng)], - sub_denominators[denominator_dist(rng)] - }; - } - -} // namespace - -TEST_CASE("f256 matches MPFR for + - * /", "[fltx][f256][precision][arithmetic]") -{ - accuracy_report_scope report_scope{ "f256 matches MPFR for + - * /" }; - const std::array, 10> cases = {{ - { "1", "2" }, - { "1.25", "2.5" }, - { "-3.75", "2.125" }, - { "1.0000000000000000000000000000000001", "2.0000000000000000000000000000000002" }, - { "123456789012345678901234567890.125", "0.000000000000000000000000000000125" }, - { "3.1415926535897932384626433832795028841971", "2.7182818284590452353602874713526624977572" }, - { "1e-50", "1e-20" }, - { "1e50", "1e-10" }, - { "-8.333333333333333333333333333333333", "0.125" }, - { "0.3333333333333333333333333333333333", "7.0000000000000000000000000000000001" } - }}; - - for (const auto& [lhs, rhs] : cases) - { - check_binary_op("add", lhs, rhs, - [](const f256& a, const f256& b) { return a + b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a + b; }); - - check_binary_op("subtract", lhs, rhs, - [](const f256& a, const f256& b) { return a - b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a - b; }); - - check_binary_op("multiply", lhs, rhs, - [](const f256& a, const f256& b) { return a * b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a * b; }); - - check_binary_op("divide", lhs, rhs, - [](const f256& a, const f256& b) { return a / b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a / b; }); - } -} - -TEST_CASE("f256 brute-force random arithmetic matches MPFR within tolerance", "[fltx][f256][precision][arithmetic]") -{ - accuracy_report_scope report_scope{ "f256 brute-force random arithmetic matches MPFR within tolerance" }; - bl::mt19937_64 rng{ random_seed }; - - const int count = 1000; - print_random_run("random arithmetic cases", count); - - for (int i = 0; i < count; ++i) - { - const f256 lhs_value = random_finite_for_f256(rng); - const f256 rhs_value = random_finite_for_f256(rng); - - const std::string lhs_text = to_text(lhs_value); - const std::string rhs_text = to_text(rhs_value); - - INFO("iteration: " << i); - INFO("lhs_text: " << lhs_text); - INFO("rhs_text: " << rhs_text); - - check_binary_op("add", lhs_text.c_str(), rhs_text.c_str(), - [](const f256& a, const f256& b) { return a + b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a + b; }); - - check_binary_op("subtract", lhs_text.c_str(), rhs_text.c_str(), - [](const f256& a, const f256& b) { return a - b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a - b; }); - - check_binary_op("multiply", lhs_text.c_str(), rhs_text.c_str(), - [](const f256& a, const f256& b) { return a * b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a * b; }); - - if (!bl::iszero(rhs_value)) - { - check_binary_op("divide", lhs_text.c_str(), rhs_text.c_str(), - [](const f256& a, const f256& b) { return a / b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a / b; }); - } - } -} - -TEST_CASE("f256 mixed scalar arithmetic matches MPFR within tolerance", "[fltx][f256][precision][arithmetic][scalar]") -{ - accuracy_report_scope report_scope{ "f256 mixed scalar arithmetic matches MPFR within tolerance" }; - - constexpr std::array values{{ - "3.1415926535897932384626433832795028841971", - "-2.7182818284590452353602874713526624977572", - "1.0000000000000000000000000000000001", - "-123456789012345678901234567890.125", - "1e-50", - "1e50" - }}; - - constexpr std::array double_scalars{{ - 0.5, - -1.5, - 3.141592653589793, - -0.125, - 1.0e-20, - -1.0e20 - }}; - - constexpr std::array float_scalars{{ - 0.5f, - -1.25f, - 3.75f, - -0.125f, - 1.0e-10f, - -1.0e10f - }}; - - constexpr std::array f128_scalars{{ - { 0.5, 0.0 }, - { -1.5, 0.0 }, - { 3.141592653589793, 1.2246467991473532e-16 }, - { -0.125, 0.0 }, - { 1.0e-20, -5.4846728545790429e-37 }, - { -1.0e20, 0.0 } - }}; - - auto check_all_scalar_orders = [](const char* scalar_kind, auto scalar, const char* value_text) - { - check_scalar_binary_op("add", "f256 + scalar", scalar_kind, value_text, scalar, - [](const f256& a, auto b) { return a + b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a + b; }); - - check_scalar_binary_op("add", "scalar + f256", scalar_kind, value_text, scalar, - [](const f256& a, auto b) { return b + a; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return b + a; }); - - check_scalar_binary_op("subtract", "f256 - scalar", scalar_kind, value_text, scalar, - [](const f256& a, auto b) { return a - b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a - b; }); - - check_scalar_binary_op("subtract", "scalar - f256", scalar_kind, value_text, scalar, - [](const f256& a, auto b) { return b - a; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return b - a; }); - - check_scalar_binary_op("multiply", "f256 * scalar", scalar_kind, value_text, scalar, - [](const f256& a, auto b) { return a * b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a * b; }); - - check_scalar_binary_op("multiply", "scalar * f256", scalar_kind, value_text, scalar, - [](const f256& a, auto b) { return b * a; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return b * a; }); - - check_scalar_binary_op("divide", "f256 / scalar", scalar_kind, value_text, scalar, - [](const f256& a, auto b) { return a / b; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return a / b; }); - - check_scalar_binary_op("divide", "scalar / f256", scalar_kind, value_text, scalar, - [](const f256& a, auto b) { return b / a; }, - [](const mpfr_ref& a, const mpfr_ref& b) { return b / a; }); - }; - - for (std::size_t i = 0; i < values.size(); ++i) - { - check_all_scalar_orders("double", double_scalars[i], values[i]); - check_all_scalar_orders("float", float_scalars[i], values[i]); - check_all_scalar_orders("f128", f128_scalars[i], values[i]); - } -} - -TEST_CASE("f256 integer overloads preserve exact integer values", "[fltx][f256][precision][arithmetic][scalar][integer]") -{ - auto check_signed = [](auto rhs, const char* label) - { - const f256 base = to_f256("1.2345678901234567890123456789012345678901234567890123456789"); - const f256 rhs_value = to_f256(static_cast(rhs)); - const bool rhs_fits_double = detail::_f256::integer_fits_exact_double(rhs); - const double rhs_double = static_cast(rhs); - - auto add_right = [&]() -> f256 { return rhs_fits_double ? f256{ base + rhs_double } : f256{ base + rhs_value }; }; - auto add_left = [&]() -> f256 { return rhs_fits_double ? f256{ rhs_double + base } : f256{ rhs_value + base }; }; - auto sub_right = [&]() -> f256 { return rhs_fits_double ? f256{ base - rhs_double } : f256{ base - rhs_value }; }; - auto sub_left = [&]() -> f256 { return rhs_fits_double ? f256{ rhs_double - base } : f256{ rhs_value - base }; }; - auto mul_right = [&]() -> f256 { return rhs_fits_double ? f256{ base * rhs_double } : f256{ base * rhs_value }; }; - auto mul_left = [&]() -> f256 { return rhs_fits_double ? f256{ rhs_double * base } : f256{ rhs_value * base }; }; - auto div_right = [&]() -> f256 { return rhs_fits_double ? f256{ base / rhs_double } : f256{ base / rhs_value }; }; - auto div_left = [&]() -> f256 { return rhs_fits_double ? f256{ rhs_double / base } : f256{ rhs_value / base }; }; - - f256 got = base; - got += rhs; - require_integer_overload_value(label, "operator+=", got, add_right()); - - got = base; - got -= rhs; - require_integer_overload_value(label, "operator-=", got, sub_right()); - - got = base; - got *= rhs; - require_integer_overload_value(label, "operator*=", got, mul_right()); - - got = base; - got /= rhs; - require_integer_overload_value(label, "operator/=", got, div_right()); - - require_integer_overload_value(label, "f256 + int", base + rhs, add_right()); - require_integer_overload_value(label, "int + f256", rhs + base, add_left()); - require_integer_overload_value(label, "f256 - int", base - rhs, sub_right()); - require_integer_overload_value(label, "int - f256", rhs - base, sub_left()); - require_integer_overload_value(label, "f256 * int", base * rhs, mul_right()); - require_integer_overload_value(label, "int * f256", rhs * base, mul_left()); - require_integer_overload_value(label, "f256 / int", base / rhs, div_right()); - require_integer_overload_value(label, "int / f256", rhs / base, div_left()); - }; - - auto check_unsigned = [](auto rhs, const char* label) - { - const f256 base = to_f256("1.2345678901234567890123456789012345678901234567890123456789"); - const f256 rhs_value = to_f256(static_cast(rhs)); - const bool rhs_fits_double = detail::_f256::integer_fits_exact_double(rhs); - const double rhs_double = static_cast(rhs); - - auto add_right = [&]() -> f256 { return rhs_fits_double ? f256{ base + rhs_double } : f256{ base + rhs_value }; }; - auto add_left = [&]() -> f256 { return rhs_fits_double ? f256{ rhs_double + base } : f256{ rhs_value + base }; }; - auto sub_right = [&]() -> f256 { return rhs_fits_double ? f256{ base - rhs_double } : f256{ base - rhs_value }; }; - auto sub_left = [&]() -> f256 { return rhs_fits_double ? f256{ rhs_double - base } : f256{ rhs_value - base }; }; - auto mul_right = [&]() -> f256 { return rhs_fits_double ? f256{ base * rhs_double } : f256{ base * rhs_value }; }; - auto mul_left = [&]() -> f256 { return rhs_fits_double ? f256{ rhs_double * base } : f256{ rhs_value * base }; }; - auto div_right = [&]() -> f256 { return rhs_fits_double ? f256{ base / rhs_double } : f256{ base / rhs_value }; }; - auto div_left = [&]() -> f256 { return rhs_fits_double ? f256{ rhs_double / base } : f256{ rhs_value / base }; }; - - f256 got = base; - got += rhs; - require_integer_overload_value(label, "operator+=", got, add_right()); - - got = base; - got -= rhs; - require_integer_overload_value(label, "operator-=", got, sub_right()); - - got = base; - got *= rhs; - require_integer_overload_value(label, "operator*=", got, mul_right()); - - got = base; - got /= rhs; - require_integer_overload_value(label, "operator/=", got, div_right()); - - require_integer_overload_value(label, "f256 + uint", base + rhs, add_right()); - require_integer_overload_value(label, "uint + f256", rhs + base, add_left()); - require_integer_overload_value(label, "f256 - uint", base - rhs, sub_right()); - require_integer_overload_value(label, "uint - f256", rhs - base, sub_left()); - require_integer_overload_value(label, "f256 * uint", base * rhs, mul_right()); - require_integer_overload_value(label, "uint * f256", rhs * base, mul_left()); - require_integer_overload_value(label, "f256 / uint", base / rhs, div_right()); - require_integer_overload_value(label, "uint / f256", rhs / base, div_left()); - }; - - check_signed(std::int8_t{ -7 }, "int8"); - check_unsigned(std::uint8_t{ 7 }, "uint8"); - check_signed(std::int16_t{ -257 }, "int16"); - check_unsigned(std::uint16_t{ 257 }, "uint16"); - check_signed(std::int32_t{ -65537 }, "int32"); - check_unsigned(std::uint32_t{ 65537 }, "uint32"); - check_signed(static_cast(-9007199254740993ll), "int64"); - check_unsigned(std::uint64_t{ 9007199254740993ull }, "uint64"); -} - -TEST_CASE("f256 scalar mixed recurrence stays within MPFR tolerance", "[fltx][f256][precision][arithmetic][scalar][mixed]") -{ - accuracy_report_scope report_scope{ "f256 scalar mixed recurrence stays within MPFR tolerance" }; - - constexpr std::array cases{{ - { "-0.75", "0.125", "0.875", "-0.375", "1.25", "0.625" }, - { "0.5", "-0.25", "-0.625", "0.75", "0.875", "1.125" }, - { "-0.3437500000000000000000000000000001", "0.8437500000000000000000000000000001", "0.4687500000000000000000000000000001", "0.6562500000000000000000000000000001", "1.5625000000000000000000000000000001", "0.9062500000000000000000000000000001" }, - { "0.1562500000000000000000000000000001", "-0.7187500000000000000000000000000001", "-0.8437500000000000000000000000000001", "0.3437500000000000000000000000000001", "0.7187500000000000000000000000000001", "1.4062500000000000000000000000000001" }, - { "-1.3333333333333333333333333333333333", "0.4142135623730950488016887242096981", "0.7071067811865475244008443621048490", "-0.5773502691896257645091487805019575", "1.6180339887498948482045868343656381", "0.6180339887498948482045868343656381" }, - { "0.5773502691896257645091487805019575", "-1.2247448713915890490986420373529457", "-0.4142135623730950488016887242096981", "0.8660254037844386467637231707529362", "0.7071067811865475244008443621048490", "1.4142135623730950488016887242096981" }, - { "0.8660254037844386467637231707529362", "-1.1180339887498948482045868343656381", "0.7639320225002103035908263312687238", "0.2679491924311227064725536584941276", "1.5", "0.5773502691896257645091487805019575" }, - { "-0.2679491924311227064725536584941276", "1.2247448713915890490986420373529457", "-0.6180339887498948482045868343656381", "-0.7639320225002103035908263312687238", "0.6666666666666666666666666666666667", "1.5" } - }}; - - constexpr int rounds = 32; - const auto got = run_scalar_mixed_recurrence_precision(cases, rounds); - const auto expected = run_scalar_mixed_recurrence_precision(cases, rounds); - - check_scalar_mixed_recurrence_component("x accumulator", got.first, expected.first, rounds, cases.size()); - check_scalar_mixed_recurrence_component("y accumulator", got.second, expected.second, rounds, cases.size()); -} - -TEST_CASE("f256 fused expression evaluator matches MPFR for routed shapes", "[fltx][f256][precision][arithmetic][fused]") -{ - accuracy_report_scope report_scope{ "f256 fused expression evaluator matches MPFR for routed shapes" }; - - const std::array cases{{ - { - "1.0000000000000000000000000000000001", - "-0.9999999999999999999999999999999997", - "0.3333333333333333333333333333333333", - "-0.2500000000000000000000000000000001", - "0.1250000000000000000000000000000003", - 0.5, - 2.0, - 3.0 - }, - { - "-1.4142135623730950488016887242096981", - "0.7071067811865475244008443621048490", - "-0.5773502691896257645091487805019575", - "1.7320508075688772935274463415058724", - "-0.2187500000000000000000000000000001", - -0.75, - 2.25, - 3.25 - }, - { - "3.1415926535897932384626433832795029", - "-2.7182818284590452353602874713526625", - "1.6180339887498948482045868343656381", - "-0.6180339887498948482045868343656381", - "0.4142135623730950488016887242096981", - 1.125, - 3.0, - 4.0 - }, - { - "-0.00000000000000000000000000000125", - "0.00000000000000000000000000000250", - "-1.0000000000000000000000000000000001", - "0.9999999999999999999999999999999999", - "-0.3333333333333333333333333333333333", - -1.375, - 1.5, - 2.5 - }, - { - "1099511627776.0000000000000000000000000001", - "-0.0000000000009094947017729282379150390625", - "0.8750000000000000000000000000000001", - "-1.1250000000000000000000000000000001", - "0.0625000000000000000000000000000001", - 0.3125, - 2.625, - 3.625 - }, - { - "-4503599627370496.000000000000000000000000001", - "0.0000000000000002220446049250313080847263336181640625", - "1.2500000000000000000000000000000001", - "0.7500000000000000000000000000000001", - "-0.1562500000000000000000000000000001", - -0.4375, - 3.375, - 4.375 - }, - { - "0.875", - "-1.125", - "1.375", - "-1.625", - "0.00000000000000000000000000000000000000000000000001", - 2.25, - 4.125, - 5.125 - }, - { - "-0.8750000000000000000000000000000001", - "1.1250000000000000000000000000000001", - "-1.3750000000000000000000000000000001", - "1.6250000000000000000000000000000001", - "-0.00000000000000000000000000000000000000000000000001", - -2.5, - 1.875, - 2.875 - }, - { - "0.1562500000000000000000000000000001", - "-0.8437500000000000000000000000000001", - "1.5625000000000000000000000000000001", - "0.9062500000000000000000000000000001", - "-0.7187500000000000000000000000000001", - 0.0625, - 2.75, - 3.75 - }, - { - "-1.3333333333333333333333333333333333", - "0.4142135623730950488016887242096981", - "0.7071067811865475244008443621048490", - "-0.5773502691896257645091487805019575", - "0.8660254037844386467637231707529362", - -0.09375, - 3.5, - 4.5 - } - }}; - - run_fused_expression_precision_suite(cases); -} - -TEST_CASE("f256 fused expression evaluator matches MPFR on random routed shapes", "[fltx][f256][precision][arithmetic][fused][random]") -{ - accuracy_report_scope report_scope{ "f256 fused expression evaluator matches MPFR on random routed shapes" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 48; - print_random_run("random fused expression cases", count); - - std::vector cases; - cases.reserve(count); - for (int i = 0; i < count; ++i) - cases.push_back(random_fused_expression_case(rng)); - - run_fused_expression_precision_suite(cases); -} - -TEST_CASE("f256 sin matches MPFR for fixed values", "[fltx][f256][precision][transcendental][trig][sin]") -{ - accuracy_report_scope report_scope{ "f256 sin matches MPFR for fixed values" }; - const mpfr_ref pi = pi_ref(); - const mpfr_ref half_pi = pi / 2; - const mpfr_ref quarter_pi = pi / 4; - const mpfr_ref third_pi = pi / 3; - const mpfr_ref sixth_pi = pi / 6; - const mpfr_ref tiny{ "1e-40" }; - - const mpfr_ref reduced_abs_tolerance{ "1e-67" }; - const mpfr_ref reduced_rel_tolerance{ "5e-61" }; - const mpfr_ref reduction_abs_tolerance{ "1e-59" }; - const mpfr_ref reduction_rel_tolerance{ "1e-59" }; - - check_sin_case("zero", mpfr_ref{ 0 }, reduced_abs_tolerance, reduced_rel_tolerance); - check_sin_case("minus_zero", mpfr_ref{ "-0" }, reduced_abs_tolerance, reduced_rel_tolerance); - check_sin_case("tiny_positive", tiny, reduced_abs_tolerance, reduced_rel_tolerance); - check_sin_case("tiny_negative", -tiny, reduced_abs_tolerance, reduced_rel_tolerance); - check_sin_case("pi_over_6", sixth_pi, reduced_abs_tolerance, reduced_rel_tolerance); - check_sin_case("pi_over_4", quarter_pi, reduced_abs_tolerance, reduced_rel_tolerance); - check_sin_case("pi_over_3", third_pi, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("pi_over_2", half_pi, reduction_abs_tolerance, reduction_rel_tolerance); -} - -TEST_CASE("f256 sin matches MPFR for fixed argument-reduction stress values", "[fltx][f256][precision][transcendental][trig][sin][reduction]") -{ - accuracy_report_scope report_scope{ "f256 sin matches MPFR for fixed argument-reduction stress values", false }; - const mpfr_ref pi = pi_ref(); - const mpfr_ref two_pi = pi * 2; - const mpfr_ref tiny{ "1e-40" }; - - const mpfr_ref reduction_abs_tolerance{ "1e-59" }; - const mpfr_ref reduction_rel_tolerance{ "1e-59" }; - const mpfr_ref tiny_offset_abs_tolerance{ "2e-65" }; - - check_sin_case("pi_minus_tiny", pi - tiny, tiny_offset_abs_tolerance, reduction_rel_tolerance); - check_sin_case("pi_plus_tiny", pi + tiny, tiny_offset_abs_tolerance, reduction_rel_tolerance); - check_sin_case("two_pi_minus_tiny", two_pi - tiny, tiny_offset_abs_tolerance, reduction_rel_tolerance); - check_sin_case("two_pi_plus_tiny", two_pi + tiny, tiny_offset_abs_tolerance, reduction_rel_tolerance); - check_sin_case("large_decimal", mpfr_ref{ "1000000.25" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("negative_large_decimal", mpfr_ref{ "-1000000.25" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("million_pi_plus_offset", mpfr_ref{ "1000000" } * pi + mpfr_ref{ "0.125" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("negative_million_pi_plus_offset", mpfr_ref{ "-1000000" } * pi + mpfr_ref{ "0.125" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("huge_decimal", mpfr_ref{ "1e20" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("huge_pi_multiple_plus_offset", mpfr_ref{ "100000000000000000000" } * pi + mpfr_ref{ "0.125" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_sin_case("negative_huge_pi_multiple_plus_offset", mpfr_ref{ "-100000000000000000000" } * pi + mpfr_ref{ "0.125" }, reduction_abs_tolerance, reduction_rel_tolerance); -} - -TEST_CASE("f256 sin matches MPFR on random reduced-range inputs", "[fltx][f256][precision][transcendental][trig][sin]") -{ - accuracy_report_scope report_scope{ "f256 sin matches MPFR on random reduced-range inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-67" }; - const mpfr_ref rel_tolerance{ "5e-61" }; - print_random_run("random reduced-range sin cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_sine_kernel_argument_for_f256(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "sin", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::sin(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sin(value); }); - } -} - -TEST_CASE("f256 sin matches MPFR on random range-reduced inputs away from zero-crossings", "[fltx][f256][precision][transcendental][trig][sin][reduction]") -{ - accuracy_report_scope report_scope{ "f256 sin matches MPFR on random range-reduced inputs away from zero-crossings" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - const mpfr_ref zero_crossing_threshold{ "0.125" }; - print_random_run("random range-reduced sin cases away from zero-crossings", count); - - for (int i = 0, attempts = 0; i < count; ++attempts) - { - const mpfr_ref input = random_sine_reduction_argument_for_f256(rng); - const mpfr_ref expected = boost::multiprecision::sin(input); - if (abs_ref(expected) < zero_crossing_threshold) - continue; - - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("attempt: " << attempts); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "sin", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::sin(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sin(value); }); - - ++i; - } -} - -TEST_CASE("f256 sin matches MPFR on random range-reduced zero-crossing stress inputs", "[fltx][f256][precision][transcendental][trig][sin][reduction][zero-crossing]") -{ - accuracy_report_scope report_scope{ "f256 sin matches MPFR on random range-reduced zero-crossing stress inputs", false }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 64 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - const mpfr_ref zero_crossing_threshold{ "0.125" }; - print_random_run("random range-reduced sin zero-crossing stress cases", count); - - for (int i = 0, attempts = 0; i < count; ++attempts) - { - const mpfr_ref input = random_sine_reduction_argument_for_f256(rng); - const mpfr_ref expected = boost::multiprecision::sin(input); - if (abs_ref(expected) >= zero_crossing_threshold) - continue; - - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("attempt: " << attempts); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "sin", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::sin(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sin(value); }); - - ++i; - } -} - -TEST_CASE("f256 cos matches MPFR for fixed values", "[fltx][f256][precision][transcendental][trig][cos]") -{ - accuracy_report_scope report_scope{ "f256 cos matches MPFR for fixed values" }; - const mpfr_ref pi = pi_ref(); - const mpfr_ref quarter_pi = pi / 4; - const mpfr_ref third_pi = pi / 3; - const mpfr_ref sixth_pi = pi / 6; - const mpfr_ref tiny{ "1e-40" }; - - const mpfr_ref reduced_abs_tolerance{ "1e-67" }; - const mpfr_ref reduced_rel_tolerance{ "5e-61" }; - const mpfr_ref reduction_abs_tolerance{ "1e-59" }; - const mpfr_ref reduction_rel_tolerance{ "1e-59" }; - - check_cos_case("zero", mpfr_ref{ 0 }, reduced_abs_tolerance, reduced_rel_tolerance); - check_cos_case("minus_zero", mpfr_ref{ "-0" }, reduced_abs_tolerance, reduced_rel_tolerance); - check_cos_case("tiny_positive", tiny, reduced_abs_tolerance, reduced_rel_tolerance); - check_cos_case("tiny_negative", -tiny, reduced_abs_tolerance, reduced_rel_tolerance); - check_cos_case("pi_over_6", sixth_pi, reduced_abs_tolerance, reduced_rel_tolerance); - check_cos_case("pi_over_4", quarter_pi, reduced_abs_tolerance, reduced_rel_tolerance); - check_cos_case("pi_over_3", third_pi, reduction_abs_tolerance, reduction_rel_tolerance); -} - -TEST_CASE("f256 cos matches MPFR for fixed argument-reduction stress values", "[fltx][f256][precision][transcendental][trig][cos][reduction]") -{ - accuracy_report_scope report_scope{ "f256 cos matches MPFR for fixed argument-reduction stress values", false }; - const mpfr_ref pi = pi_ref(); - const mpfr_ref half_pi = pi / 2; - const mpfr_ref two_pi = pi * 2; - const mpfr_ref tiny{ "1e-40" }; - - const mpfr_ref reduction_abs_tolerance{ "1e-59" }; - const mpfr_ref reduction_rel_tolerance{ "1e-59" }; - check_cos_case("pi_over_2", half_pi, reduction_abs_tolerance, reduction_rel_tolerance); - const mpfr_ref tiny_offset_abs_tolerance{ "2e-65" }; - - check_cos_case("pi_minus_tiny", pi - tiny, tiny_offset_abs_tolerance, reduction_rel_tolerance); - check_cos_case("pi_plus_tiny", pi + tiny, tiny_offset_abs_tolerance, reduction_rel_tolerance); - check_cos_case("two_pi_minus_tiny", two_pi - tiny, tiny_offset_abs_tolerance, reduction_rel_tolerance); - check_cos_case("two_pi_plus_tiny", two_pi + tiny, tiny_offset_abs_tolerance, reduction_rel_tolerance); - check_cos_case("large_decimal", mpfr_ref{ "1000000.25" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_cos_case("negative_large_decimal", mpfr_ref{ "-1000000.25" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_cos_case("million_pi_plus_offset", mpfr_ref{ "1000000" } * pi + mpfr_ref{ "0.125" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_cos_case("negative_million_pi_plus_offset", mpfr_ref{ "-1000000" } * pi + mpfr_ref{ "0.125" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_cos_case("huge_decimal", mpfr_ref{ "1e20" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_cos_case("huge_pi_multiple_plus_offset", mpfr_ref{ "100000000000000000000" } * pi + mpfr_ref{ "0.125" }, reduction_abs_tolerance, reduction_rel_tolerance); - check_cos_case("negative_huge_pi_multiple_plus_offset", mpfr_ref{ "-100000000000000000000" } * pi + mpfr_ref{ "0.125" }, reduction_abs_tolerance, reduction_rel_tolerance); -} - -TEST_CASE("f256 cos matches MPFR on random reduced-range inputs", "[fltx][f256][precision][transcendental][trig][cos]") -{ - accuracy_report_scope report_scope{ "f256 cos matches MPFR on random reduced-range inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-67" }; - const mpfr_ref rel_tolerance{ "5e-61" }; - print_random_run("random reduced-range cos cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_sine_kernel_argument_for_f256(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "cos", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::cos(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::cos(value); }); - } -} - -TEST_CASE("f256 cos matches MPFR on random range-reduced inputs away from zero-crossings", "[fltx][f256][precision][transcendental][trig][cos][reduction]") -{ - accuracy_report_scope report_scope{ "f256 cos matches MPFR on random range-reduced inputs away from zero-crossings" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - const mpfr_ref zero_crossing_threshold{ "0.125" }; - print_random_run("random range-reduced cos cases away from zero-crossings", count); - - for (int i = 0, attempts = 0; i < count; ++attempts) - { - const mpfr_ref input = random_sine_reduction_argument_for_f256(rng); - const mpfr_ref expected = boost::multiprecision::cos(input); - if (abs_ref(expected) < zero_crossing_threshold) - continue; - - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("attempt: " << attempts); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "cos", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::cos(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::cos(value); }); - - ++i; - } -} - -TEST_CASE("f256 cos matches MPFR on random range-reduced zero-crossing stress inputs", "[fltx][f256][precision][transcendental][trig][cos][reduction][zero-crossing]") -{ - accuracy_report_scope report_scope{ "f256 cos matches MPFR on random range-reduced zero-crossing stress inputs", false }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 64 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - const mpfr_ref zero_crossing_threshold{ "0.125" }; - print_random_run("random range-reduced cos zero-crossing stress cases", count); - - for (int i = 0, attempts = 0; i < count; ++attempts) - { - const mpfr_ref input = random_sine_reduction_argument_for_f256(rng); - const mpfr_ref expected = boost::multiprecision::cos(input); - if (abs_ref(expected) >= zero_crossing_threshold) - continue; - - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("attempt: " << attempts); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "cos", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::cos(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::cos(value); }); - - ++i; - } -} - -TEST_CASE("f256 floor ceil trunc and round match MPFR for fixed values", "[fltx][f256][precision][math][rounding]") -{ - accuracy_report_scope report_scope{ "f256 floor ceil trunc and round match MPFR for fixed values" }; - const std::array cases = {{ - "0", - "-0", - "0.25", - "-0.25", - "0.5", - "-0.5", - "1.5", - "-1.5", - "2.5", - "-2.5", - "0.999999999999999999999999999999999999999999999999999999999999", - "1.000000000000000000000000000000000000000000000000000000000001", - "-0.999999999999999999999999999999999999999999999999999999999999", - "-1.000000000000000000000000000000000000000000000000000000000001", - "123456789012345678901234567890.000000000000000000000000000000000000000000000000000000000001", - "-123456789012345678901234567890.000000000000000000000000000000000000000000000000000000000001" - }}; - - for (const char* input : cases) - { - check_unary_op("floor", input, - [](const f256& value) { return bl::floor(value); }, - [](const mpfr_ref& value) { return ref_floor(value); }); - - check_unary_op("ceil", input, - [](const f256& value) { return bl::ceil(value); }, - [](const mpfr_ref& value) { return ref_ceil(value); }); - - check_unary_op("trunc", input, - [](const f256& value) { return bl::trunc(value); }, - [](const mpfr_ref& value) { return ref_trunc(value); }); - - check_unary_op("round", input, - [](const f256& value) { return bl::round(value); }, - [](const mpfr_ref& value) { return ref_round_half_away_zero(value); }); - } -} - -TEST_CASE("f256 floor ceil trunc and round match MPFR for large-limb regression cases", "[fltx][f256][precision][math][rounding]") -{ - accuracy_report_scope report_scope{ "f256 floor ceil trunc and round match MPFR for large-limb regression cases" }; - check_unary_op( - "floor", - "4.6958550912494028428400315673292717414e+19", - [](const f256& value) { return bl::floor(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::floor(value); }); - - check_unary_op( - "trunc", - "-1.5848854675958108400285213569604012722e+23", - [](const f256& value) { return bl::trunc(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::trunc(value); }); -} - -TEST_CASE("f256 floor ceil trunc and round match MPFR on random finite inputs", "[fltx][f256][precision][math][rounding]") -{ - accuracy_report_scope report_scope{ "f256 floor ceil trunc and round match MPFR on random finite inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - print_random_run("random floor/ceil/trunc/round cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = to_ref_exact(random_finite_for_f256(rng)); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op("floor", input_text.c_str(), - [](const f256& value) { return bl::floor(value); }, - [](const mpfr_ref& value) { return ref_floor(value); }); - - check_unary_op("ceil", input_text.c_str(), - [](const f256& value) { return bl::ceil(value); }, - [](const mpfr_ref& value) { return ref_ceil(value); }); - - check_unary_op("trunc", input_text.c_str(), - [](const f256& value) { return bl::trunc(value); }, - [](const mpfr_ref& value) { return ref_trunc(value); }); - - check_unary_op("round", input_text.c_str(), - [](const f256& value) { return bl::round(value); }, - [](const mpfr_ref& value) { return ref_round_half_away_zero(value); }); - } -} - -TEST_CASE("f256 fmod matches MPFR for fixed values", "[fltx][f256][precision][math][fmod]") -{ - accuracy_report_scope report_scope{ "f256 fmod matches MPFR for fixed values" }; - const std::array, 10> cases = {{ - { "5.25", "2" }, - { "-5.25", "2" }, - { "5.25", "-2" }, - { "-5.25", "-2" }, - { "1.000000000000000000000000000000000000000000000000000000000001", "0.1" }, - { "-1.000000000000000000000000000000000000000000000000000000000001", "0.1" }, - { "123456789.125", "0.5" }, - { "-123456789.125", "0.5" }, - { "1e-40", "3e-41" }, - { "-1e40", "3.125" } - }}; - - for (const auto& [lhs, rhs] : cases) - { - check_binary_op("fmod", lhs, rhs, - [](const f256& x, const f256& y) { return bl::fmod(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return ref_fmod(x, y); }); - } -} - -TEST_CASE("f256 fmod matches MPFR for huge-quotient regression cases", "[fltx][f256][precision][math][fmod]") -{ - accuracy_report_scope report_scope{ "f256 fmod matches MPFR for huge-quotient regression cases" }; - check_binary_op( - "fmod", - "4.6958550912494028428400315673292717414e+19", - "2.9410562077176174010123838366180003482e+02", - [](const f256& lhs, const f256& rhs) { return bl::fmod(lhs, rhs); }, - [](const mpfr_ref& lhs, const mpfr_ref& rhs) { return boost::multiprecision::fmod(lhs, rhs); }); - - // Domain sweep regression: 0x1.fffffffffffffp+899 mod -7.5 is exactly 0.5. - const f256 lhs = f256{ std::nextafter(std::ldexp(1.0, 900), 0.0), 0.0, 0.0, 0.0 }; - const f256 rhs = f256{ -7.5, 0.0, 0.0, 0.0 }; - require_exact_value("fmod.domain.max-p899.mod7p5", bl::fmod(lhs, rhs), f256{ 0.5, 0.0, 0.0, 0.0 }); -} - -TEST_CASE("f256 remainder handles huge double-divisor quotient regression", "[fltx][f256][precision][math][remainder]") -{ - accuracy_report_scope report_scope{ "f256 remainder handles huge double-divisor quotient regression" }; - - // Domain sweep regression: remainder(0x1.fffffffffffffp+899, -7.5) is exactly 0.5. - const f256 lhs = f256{ std::nextafter(std::ldexp(1.0, 900), 0.0), 0.0, 0.0, 0.0 }; - const f256 rhs = f256{ -7.5, 0.0, 0.0, 0.0 }; - require_exact_value("remainder.domain.max-p899.mod7p5", bl::remainder(lhs, rhs), f256{ 0.5, 0.0, 0.0, 0.0 }); -} - -TEST_CASE("f256 remainder and remquo handle exact half ties with noncanonical halves", "[fltx][f256][precision][math][remainder][remquo]") -{ - accuracy_report_scope report_scope{ "f256 remainder and remquo handle exact half ties with noncanonical halves" }; - - const f256 lhs{ 0x1.8000000000000p+0, 0x1.0000000000000p-60, -0x1.0000000000000p-113, 0x1.0000000000000p-166 }; - const f256 rhs{ -0x1.8000000000000p+1, -0x1.0000000000000p-59, 0x1.0000000000000p-112, -0x1.0000000000000p-165 }; - - require_exact_value("remainder.domain.exact-half.tie-even", bl::remainder(lhs, rhs), lhs); - - int quotient = 12345; - require_exact_value("remquo.domain.exact-half.tie-even", bl::remquo(lhs, rhs, "ient), lhs); - REQUIRE(quotient == 0); -} - -TEST_CASE("f256 fmod matches MPFR on random finite inputs", "[fltx][f256][precision][math][fmod]") -{ - accuracy_report_scope report_scope{ "f256 fmod matches MPFR on random finite inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 10000; - print_random_run("random fmod cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref lhs = to_ref_exact(random_finite_for_f256(rng)); - const mpfr_ref rhs = random_nonzero_for_f256(rng); - - const std::string lhs_text = to_scientific_text(lhs, printed_digits + 6); - const std::string rhs_text = to_scientific_text(rhs, printed_digits + 6); - - INFO("iteration: " << i); - INFO("lhs_text: " << lhs_text); - INFO("rhs_text: " << rhs_text); - - check_binary_op_with_tolerance( - "fmod", - lhs_text.c_str(), - rhs_text.c_str(), - mpfr_ref{ "1e-54" }, - mpfr_ref{ "1e-54" }, - [](const f256& x, const f256& y) { return bl::fmod(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return ref_fmod(x, y); }); - } -} - -TEST_CASE("f256 sqrt matches MPFR for fixed values", "[fltx][f256][precision][math][sqrt]") -{ - accuracy_report_scope report_scope{ "f256 sqrt matches MPFR for fixed values" }; - const std::array cases = {{ - "0", - "1", - "2", - "4", - "1e-60", - "1e60", - "0.125", - "123456789.125" - }}; - - for (const char* input : cases) - { - check_unary_op("sqrt", input, - [](const f256& value) { return bl::sqrt(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sqrt(value); }); - } -} - -TEST_CASE("f256 sqrt matches MPFR on random positive inputs", "[fltx][f256][precision][math][sqrt]") -{ - accuracy_report_scope report_scope{ "f256 sqrt matches MPFR on random positive inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - print_random_run("random sqrt cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_positive_for_f256(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op("sqrt", input_text.c_str(), - [](const f256& value) { return bl::sqrt(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sqrt(value); }); - } -} - -TEST_CASE("f256 ldexp matches MPFR for fixed values", "[fltx][f256][precision][math][ldexp]") -{ - accuracy_report_scope report_scope{ "f256 ldexp matches MPFR for fixed values" }; - const std::array, 10> cases = {{ - { "0", 0 }, - { "1", 0 }, - { "1", 1 }, - { "1", -1 }, - { "1.5", 10 }, - { "-1.5", 10 }, - { "3.1415926535897932384626433832795028841971", -20 }, - { "1e-40", 120 }, - { "1e40", -120 }, - { "123456789.125", 37 } - }}; - - for (const auto& [input, exponent] : cases) - check_ldexp_case("fixed", mpfr_ref{ input }, exponent); - - const mpfr_ref two_denorms = - mpfr_ref{ std::numeric_limits::denorm_min() } * 2; - check_ldexp_case("subnormal up", two_denorms, 1024); - check_ldexp_case("negative subnormal up", -two_denorms, 1024); -} - -TEST_CASE("f256 ldexp matches MPFR on random finite inputs", "[fltx][f256][precision][math][ldexp]") -{ - accuracy_report_scope report_scope{ "f256 ldexp matches MPFR on random finite inputs" }; - bl::mt19937_64 rng{ random_seed }; - bl::uniform_int_distribution exponent_dist(-180, 180); - - constexpr int count = 128 * random_sample_count_scale; - print_random_run("random ldexp cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = to_ref_exact(random_finite_for_f256(rng)); - const int exponent = exponent_dist(rng); - - INFO("iteration: " << i); - check_ldexp_case("random", input, exponent); - } -} - -TEST_CASE("f256 exp matches MPFR for fixed values", "[fltx][f256][precision][transcendental][exp]") -{ - accuracy_report_scope report_scope{ "f256 exp matches MPFR for fixed values" }; - const std::array cases = {{ - "-10", - "-1", - "-0.125", - "0", - "0.125", - "1", - "10", - "20" - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "exp", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::exp(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::exp(value); }); - } -} - -TEST_CASE("f256 exp matches MPFR on random moderate inputs", "[fltx][f256][precision][transcendental][exp]") -{ - accuracy_report_scope report_scope{ "f256 exp matches MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random exp cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_signed_interval_for_f256(rng, mpfr_ref{ 20 }); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "exp", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::exp(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::exp(value); }); - } -} - -TEST_CASE("f256 exp2 matches MPFR for fixed values", "[fltx][f256][precision][transcendental][exp2]") -{ - accuracy_report_scope report_scope{ "f256 exp2 matches MPFR for fixed values" }; - const std::array cases = {{ - "-10", - "-1", - "-0.125", - "0", - "0.125", - "1", - "10", - "20" - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "exp2", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::exp2(value); }, - [](const mpfr_ref& value) { return ref_exp2(value); }); - } -} - -TEST_CASE("f256 exp2 matches MPFR on random moderate inputs", "[fltx][f256][precision][transcendental][exp2]") -{ - accuracy_report_scope report_scope{ "f256 exp2 matches MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random exp2 cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_signed_interval_for_f256(rng, mpfr_ref{ 20 }); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "exp2", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::exp2(value); }, - [](const mpfr_ref& value) { return ref_exp2(value); }); - } -} - -TEST_CASE("f256 log matches MPFR for fixed values", "[fltx][f256][precision][transcendental][log]") -{ - accuracy_report_scope report_scope{ "f256 log matches MPFR for fixed values" }; - const std::array cases = {{ - "0.125", - "0.5", - "0.999999999999999999999999999999999999999999999999999999999999", - "1", - "1.000000000000000000000000000000000000000000000000000000000001", - "2", - "10", - "123456789.125" - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "log", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::log(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::log(value); }); - } -} - -TEST_CASE("f256 log matches MPFR on random positive inputs", "[fltx][f256][precision][transcendental][log]") -{ - accuracy_report_scope report_scope{ "f256 log matches MPFR on random positive inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random log cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_positive_for_f256(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "log", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::log(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::log(value); }); - } -} - -TEST_CASE("f256 log2 matches MPFR for fixed values", "[fltx][f256][precision][transcendental][log2]") -{ - accuracy_report_scope report_scope{ "f256 log2 matches MPFR for fixed values" }; - const std::array cases = {{ - "0.125", - "0.5", - "0.999999999999999999999999999999999999999999999999999999999999", - "1", - "1.000000000000000000000000000000000000000000000000000000000001", - "2", - "10", - "123456789.125" - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "log2", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::log2(value); }, - [](const mpfr_ref& value) { return ref_log2(value); }); - } -} - -TEST_CASE("f256 log2 matches MPFR on random positive inputs", "[fltx][f256][precision][transcendental][log2]") -{ - accuracy_report_scope report_scope{ "f256 log2 matches MPFR on random positive inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random log2 cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_positive_for_f256(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "log2", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::log2(value); }, - [](const mpfr_ref& value) { return ref_log2(value); }); - } -} - -TEST_CASE("f256 log10 matches MPFR for fixed values", "[fltx][f256][precision][transcendental][log10]") -{ - accuracy_report_scope report_scope{ "f256 log10 matches MPFR for fixed values" }; - const std::array cases = {{ - "0.125", - "0.5", - "0.999999999999999999999999999999999999999999999999999999999999", - "1", - "1.000000000000000000000000000000000000000000000000000000000001", - "2", - "10", - "123456789.125" - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "log10", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::log10(value); }, - [](const mpfr_ref& value) { return ref_log10(value); }); - } -} - -TEST_CASE("f256 log10 matches MPFR on random positive inputs", "[fltx][f256][precision][transcendental][log10]") -{ - accuracy_report_scope report_scope{ "f256 log10 matches MPFR on random positive inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random log10 cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_positive_for_f256(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "log10", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::log10(value); }, - [](const mpfr_ref& value) { return ref_log10(value); }); - } -} - -TEST_CASE("f256 pow matches MPFR for fixed values", "[fltx][f256][precision][transcendental][pow]") -{ - accuracy_report_scope report_scope{ "f256 pow matches MPFR for fixed values" }; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - check_pow_case("two_to_ten", mpfr_ref{ 2 }, mpfr_ref{ 10 }, abs_tolerance, rel_tolerance); - check_pow_case("two_to_minus_ten", mpfr_ref{ 2 }, mpfr_ref{ -10 }, abs_tolerance, rel_tolerance); - check_pow_case("minus_two_to_three", mpfr_ref{ -2 }, mpfr_ref{ 3 }, abs_tolerance, rel_tolerance); - check_pow_case("minus_two_to_four", mpfr_ref{ -2 }, mpfr_ref{ 4 }, abs_tolerance, rel_tolerance); - check_pow_case("minus_two_to_minus_three", mpfr_ref{ -2 }, mpfr_ref{ -3 }, abs_tolerance, rel_tolerance); - check_pow_case("ten_to_half", mpfr_ref{ 10 }, mpfr_ref{ "0.5" }, abs_tolerance, rel_tolerance); - check_pow_case("half_to_ten", mpfr_ref{ "0.5" }, mpfr_ref{ 10 }, abs_tolerance, rel_tolerance); - check_pow_case("oneish_to_large", mpfr_ref{ "1.000000000000000000000000000000000000000000000000000000000001" }, mpfr_ref{ "123.5" }, abs_tolerance, rel_tolerance); - check_pow_case("fractional_exp", mpfr_ref{ "123.456" }, mpfr_ref{ "0.125" }, abs_tolerance, rel_tolerance); - check_pow_case("tiny_base", mpfr_ref{ "1e-20" }, mpfr_ref{ 2 }, abs_tolerance, rel_tolerance); - check_pow_case("large_base_negative_exp", mpfr_ref{ "1e20" }, mpfr_ref{ -2 }, abs_tolerance, rel_tolerance); -} - - - -TEST_CASE("f256 pow matches MPFR on random positive-base inputs", "[fltx][f256][precision][transcendental][pow]") -{ - accuracy_report_scope report_scope{ "f256 pow matches MPFR on random positive-base inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random pow cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref base = random_pow_base_for_f256(rng); - const mpfr_ref exponent = random_signed_interval_for_f256(rng, mpfr_ref{ 8 }); - - INFO("iteration: " << i); - check_pow_case("random", base, exponent, abs_tolerance, rel_tolerance); - } -} - -TEST_CASE("f256 utility math helpers behave correctly for fixed values", "[fltx][f256][math][utility]") -{ - accuracy_report_scope report_scope{ "f256 utility math helpers behave correctly for fixed values" }; - - check_unary_op("recip", "2.5", - [](const f256& value) { return bl::recip(value); }, - [](const mpfr_ref& value) { return mpfr_ref{ 1 } / value; }); - - check_unary_op("recip", "-0.125", - [](const f256& value) { return bl::recip(value); }, - [](const mpfr_ref& value) { return mpfr_ref{ 1 } / value; }); - - check_binary_op("fdim", "5.25", "2.0", - [](const f256& x, const f256& y) { return bl::fdim(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return x > y ? (x - y) : mpfr_ref{ 0 }; }); - - check_binary_op("fdim", "-5.25", "2.0", - [](const f256& x, const f256& y) { return bl::fdim(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return x > y ? (x - y) : mpfr_ref{ 0 }; }); - - { - const f256 got = bl::abs(to_f256("-123.5")); - require_exact_value("abs", got, to_f256("123.5")); - } - { - const f256 got = bl::fabs(to_f256("-0.25")); - require_exact_value("fabs", got, to_f256("0.25")); - } - { - const f256 got = bl::clamp(to_f256("-5"), to_f256("-2"), to_f256("3")); - require_exact_value("clamp.low", got, to_f256("-2")); - } - { - const f256 got = bl::clamp(to_f256("1.5"), to_f256("-2"), to_f256("3")); - require_exact_value("clamp.mid", got, to_f256("1.5")); - } - { - const f256 got = bl::clamp(to_f256("5"), to_f256("-2"), to_f256("3")); - require_exact_value("clamp.high", got, to_f256("3")); - } - { - const f256 got = bl::fma(to_f256("1.25"), to_f256("2.5"), to_f256("-0.5")); - const mpfr_ref expected = to_ref_exact(to_f256("1.25")) * to_ref_exact(to_f256("2.5")) + to_ref_exact(to_f256("-0.5")); - const mpfr_ref diff = abs_ref(to_ref_exact(got) - expected); - mpfr_ref scale = abs_ref(expected); - if (scale < 1) - scale = 1; - const mpfr_ref tolerance = function_tolerance("fma", scale); - record_accuracy_sample("fma", got, expected, diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - { - const f256 nan = std::numeric_limits::quiet_NaN(); - const f256 pos = to_f256("2.5"); - const f256 neg = to_f256("-3.5"); - const f256 pos_zero{ 0.0 }; - const f256 neg_zero{ -0.0 }; - - require_exact_value("fmin", bl::fmin(pos, neg), neg); - require_exact_value("fmax", bl::fmax(pos, neg), pos); - require_exact_value("fmin.nan", bl::fmin(nan, pos), pos); - require_exact_value("fmax.nan", bl::fmax(nan, neg), neg); - require_exact_value("fmin.zero", bl::fmin(pos_zero, neg_zero), neg_zero); - require_exact_value("fmax.zero", bl::fmax(pos_zero, neg_zero), pos_zero); - - require_exact_value("copysign.pos_to_neg", bl::copysign(to_f256("1.25"), neg), to_f256("-1.25")); - require_exact_value("copysign.neg_to_pos", bl::copysign(to_f256("-1.25"), pos), to_f256("1.25")); - } - { - REQUIRE(bl::isnan(std::numeric_limits::quiet_NaN())); - REQUIRE(bl::isinf(std::numeric_limits::infinity())); - REQUIRE(bl::isfinite(to_f256("1.25"))); - REQUIRE(bl::iszero(f256{ 0.0, 0.0, 0.0, 0.0 })); - REQUIRE(bl::ispositive(to_f256("0.25"))); - REQUIRE(!bl::ispositive(to_f256("-0.25"))); - REQUIRE(bl::signbit(f256{ -0.0, 0.0, 0.0, 0.0 })); - REQUIRE(!bl::signbit(f256{ 0.0, 0.0, 0.0, 0.0 })); - REQUIRE(bl::fpclassify(std::numeric_limits::quiet_NaN()) == FP_NAN); - REQUIRE(bl::fpclassify(std::numeric_limits::infinity()) == FP_INFINITE); - REQUIRE(bl::fpclassify(f256{ 0.0, 0.0, 0.0, 0.0 }) == FP_ZERO); - REQUIRE(bl::isnormal(to_f256("1.0"))); - REQUIRE(bl::isunordered(std::numeric_limits::quiet_NaN(), to_f256("1.0"))); - REQUIRE(bl::isgreater(to_f256("2.0"), to_f256("1.0"))); - REQUIRE(bl::isgreaterequal(to_f256("2.0"), to_f256("2.0"))); - REQUIRE(bl::isless(to_f256("1.0"), to_f256("2.0"))); - REQUIRE(bl::islessequal(to_f256("2.0"), to_f256("2.0"))); - REQUIRE(bl::islessgreater(to_f256("1.0"), to_f256("2.0"))); - } - { - const std::array exponents = {{ -8, -3, -1, 0, 1, 3, 8, 16, 32 }}; - for (int exponent : exponents) - { - const f256 got = bl::pow10_256(exponent); - const mpfr_ref expected = ref_pow10(exponent); - const mpfr_ref got_ref = to_ref_exact(got); - mpfr_ref scale = abs_ref(expected); - if (scale < 1) - scale = 1; - const mpfr_ref tolerance = function_tolerance("pow10_256", scale); - const mpfr_ref diff = abs_ref(got_ref - expected); - CAPTURE(exponent); - CAPTURE(to_text(got)); - CAPTURE(to_text(expected)); - record_accuracy_sample("pow10_256", got, expected, diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - } - { - require_exact_value("round_to_decimals.2", bl::round_to_decimals(to_f256("1.2345"), 2), to_f256("1.23")); - require_exact_value("round_to_decimals.3", bl::round_to_decimals(to_f256("1.2345"), 3), to_f256("1.234")); - require_exact_value("round_to_decimals.tie_even", bl::round_to_decimals(to_f256("1.2355"), 3), to_f256("1.236")); - - REQUIRE(bl::lround(to_f256("2.5")) == 3L); - REQUIRE(bl::lround(to_f256("-2.5")) == -3L); - REQUIRE(bl::llround(to_f256("2.5")) == 3LL); - REQUIRE(bl::llround(to_f256("-2.5")) == -3LL); - REQUIRE(bl::lrint(to_f256("2.5")) == 2L); - REQUIRE(bl::lrint(to_f256("3.5")) == 4L); - REQUIRE(bl::llrint(to_f256("-2.5")) == -2LL); - REQUIRE(bl::llrint(to_f256("-3.5")) == -4LL); - } -} - -TEST_CASE("f256 public math results remain canonical on edge-shaped inputs", "[fltx][f256][math][canonical]") -{ - if (bl::is_constant_evaluated() && !bl::use_constexpr_parity()) - SKIP("canonicalization is not required when simulating consteval mode without FLTX_CONSTEXPR_PARITY"); - - accuracy_report_scope report_scope{ "f256 public math results remain canonical on edge-shaped inputs" }; - - const f256 a = detail::_f256::renorm4(1.0, std::ldexp(1.0, -60), -std::ldexp(1.0, -121), std::ldexp(1.0, -180)); - const f256 b = detail::_f256::renorm4(-0.375, -std::ldexp(1.0, -64), std::ldexp(1.0, -126), -std::ldexp(1.0, -190)); - const f256 domain = detail::_f256::renorm4(0.625, std::ldexp(1.0, -62), -std::ldexp(1.0, -123), std::ldexp(1.0, -184)); - const f256 positive = detail::_f256::renorm4(1.125, std::ldexp(1.0, -60), std::ldexp(1.0, -122), -std::ldexp(1.0, -186)); - const f256 gamma_arg = detail::_f256::renorm4(1.75, std::ldexp(1.0, -62), -std::ldexp(1.0, -124), std::ldexp(1.0, -188)); - const f256 target = to_f256("2.0"); - - require_canonical_value("operator+", a + b); - require_canonical_value("operator-", a - b); - require_canonical_value("operator*", a * domain); - require_canonical_value("operator/", a / positive); - require_canonical_value("unary-", -a); - - require_canonical_value("abs", bl::abs(b)); - require_canonical_value("fabs", bl::fabs(b)); - require_canonical_value("clamp", bl::clamp(a, domain, positive)); - require_canonical_value("floor", bl::floor(b)); - require_canonical_value("ceil", bl::ceil(b)); - require_canonical_value("trunc", bl::trunc(b)); - require_canonical_value("round", bl::round(b)); - require_canonical_value("nearbyint", bl::nearbyint(b)); - require_canonical_value("rint", bl::rint(b)); - - require_canonical_value("fma", bl::fma(a, positive, b)); - require_canonical_value("fmin", bl::fmin(a, b)); - require_canonical_value("fmax", bl::fmax(a, b)); - require_canonical_value("fdim", bl::fdim(a, domain)); - require_canonical_value("copysign", bl::copysign(a, b)); - - require_canonical_value("fmod", bl::fmod(a, domain)); - require_canonical_value("remainder", bl::remainder(a, domain)); - int quo = 0; - require_canonical_value("remquo", bl::remquo(a, domain, &quo)); - - require_canonical_value("sqrt", bl::sqrt(positive)); - require_canonical_value("cbrt", bl::cbrt(b)); - require_canonical_value("hypot", bl::hypot(a, b)); - require_canonical_value("pow", bl::pow(positive, domain)); - require_canonical_value("pow.double", bl::pow(positive, 2.25)); - require_canonical_value("pow10_256", bl::pow10_256(-3)); - - require_canonical_value("exp", bl::exp(domain)); - require_canonical_value("exp2", bl::exp2(domain)); - require_canonical_value("expm1", bl::expm1(domain)); - require_canonical_value("log", bl::log(positive)); - require_canonical_value("log2", bl::log2(positive)); - require_canonical_value("log10", bl::log10(positive)); - require_canonical_value("log1p", bl::log1p(domain)); - - f256 sin_value{}; - f256 cos_value{}; - REQUIRE(bl::sincos(domain, sin_value, cos_value)); - require_canonical_value("sincos.sin", sin_value); - require_canonical_value("sincos.cos", cos_value); - require_canonical_value("sin", bl::sin(domain)); - require_canonical_value("cos", bl::cos(domain)); - require_canonical_value("tan", bl::tan(domain)); - require_canonical_value("atan", bl::atan(domain)); - require_canonical_value("atan2", bl::atan2(b, a)); - require_canonical_value("asin", bl::asin(domain)); - require_canonical_value("acos", bl::acos(domain)); - - require_canonical_value("sinh", bl::sinh(domain)); - require_canonical_value("cosh", bl::cosh(domain)); - require_canonical_value("tanh", bl::tanh(domain)); - require_canonical_value("asinh", bl::asinh(b)); - require_canonical_value("acosh", bl::acosh(positive)); - require_canonical_value("atanh", bl::atanh(domain)); - - int exponent = 0; - require_canonical_value("frexp", bl::frexp(a, &exponent)); - f256 integer_part{}; - require_canonical_value("modf.frac", bl::modf(a, &integer_part)); - require_canonical_value("modf.int", integer_part); - require_canonical_value("ldexp", bl::ldexp(a, 7)); - require_canonical_value("scalbn", bl::scalbn(a, -7)); - require_canonical_value("scalbln", bl::scalbln(a, 7)); - require_canonical_value("logb", bl::logb(a)); - require_canonical_value("nextafter", bl::nextafter(a, target)); - require_canonical_value("nexttoward.f256", bl::nexttoward(a, target)); - require_canonical_value("nexttoward.longdouble", bl::nexttoward(a, static_cast(2.0))); - require_canonical_value("round_to_decimals", bl::round_to_decimals(to_f256("1.23456789"), 5)); - - require_canonical_value("erf", bl::erf(domain)); - require_canonical_value("erfc", bl::erfc(domain)); - require_canonical_value("lgamma", bl::lgamma(gamma_arg)); - require_canonical_value("tgamma", bl::tgamma(gamma_arg)); -} - -TEST_CASE("f256 sincos matches MPFR for fixed values", "[fltx][f256][precision][transcendental][trig][sincos]") -{ - accuracy_report_scope report_scope{ "f256 sincos matches MPFR for fixed values" }; - const std::array cases = {{ - "0", - "0.125", - "-0.125", - "0.785398163397448309615660845819875721", - "-0.785398163397448309615660845819875721", - "1.5", - "-1.5", - "1234.56789", - "1e20" - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cases) - check_sincos_case("fixed", mpfr_ref{ input }, abs_tolerance, rel_tolerance); -} - -TEST_CASE("f256 tan matches MPFR for fixed values", "[fltx][f256][precision][transcendental][trig][tan]") -{ - accuracy_report_scope report_scope{ "f256 tan matches MPFR for fixed values" }; - const std::array cases = {{ - "-1.0", - "-0.5", - "-0.125", - "0", - "0.125", - "0.5", - "1.0", - "3.0" - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "tan", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::tan(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::tan(value); }); - } -} - -TEST_CASE("f256 tan matches MPFR on random moderate inputs", "[fltx][f256][precision][transcendental][trig][tan]") -{ - accuracy_report_scope report_scope{ "f256 tan matches MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random tan cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_signed_interval_for_f256(rng, mpfr_ref{ 1.2 }); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "tan", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::tan(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::tan(value); }); - } -} - -TEST_CASE("f256 atan matches MPFR for fixed values", "[fltx][f256][precision][transcendental][trig][atan]") -{ - accuracy_report_scope report_scope{ "f256 atan matches MPFR for fixed values" }; - const std::array cases = {{ - "-100", - "-10", - "-1", - "-0.125", - "0.125", - "1", - "10", - "100" - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "atan", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::atan(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::atan(value); }); - } -} - -TEST_CASE("f256 atan matches MPFR on random moderate inputs", "[fltx][f256][precision][transcendental][trig][atan]") -{ - accuracy_report_scope report_scope{ "f256 atan matches MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random atan cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_signed_interval_for_f256(rng, mpfr_ref{ 128.0 }); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "atan", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::atan(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::atan(value); }); - } -} - -TEST_CASE("f256 atan2 matches MPFR for fixed values", "[fltx][f256][precision][transcendental][trig][atan2]") -{ - accuracy_report_scope report_scope{ "f256 atan2 matches MPFR for fixed values" }; - const std::array, 10> cases = {{ - { "1", "1" }, - { "1", "-1" }, - { "-1", "1" }, - { "-1", "-1" }, - { "0.125", "10" }, - { "10", "0.125" }, - { "-0.125", "10" }, - { "10", "-0.125" }, - { "123.456", "789.25" }, - { "-123.456", "789.25" } - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const auto& [lhs, rhs] : cases) - { - check_binary_op_with_tolerance( - "atan2", - lhs, - rhs, - abs_tolerance, - rel_tolerance, - [](const f256& y, const f256& x) { return bl::atan2(y, x); }, - [](const mpfr_ref& y, const mpfr_ref& x) { return boost::multiprecision::atan2(y, x); }); - } -} - -TEST_CASE("f256 atan2 matches MPFR on random moderate inputs", "[fltx][f256][precision][transcendental][trig][atan2]") -{ - accuracy_report_scope report_scope{ "f256 atan2 matches MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random atan2 cases", count); - - for (int i = 0; i < count; ++i) - { - mpfr_ref y = random_signed_interval_for_f256(rng, mpfr_ref{ 128.0 }); - mpfr_ref x = random_signed_interval_for_f256(rng, mpfr_ref{ 128.0 }); - if (x == 0 && y == 0) - x = mpfr_ref{ 1.0 }; - - const std::string lhs_text = to_scientific_text(y, printed_digits + 6); - const std::string rhs_text = to_scientific_text(x, printed_digits + 6); - - INFO("iteration: " << i); - INFO("lhs_text: " << lhs_text); - INFO("rhs_text: " << rhs_text); - - check_binary_op_with_tolerance( - "atan2", - lhs_text.c_str(), - rhs_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& lhs, const f256& rhs) { return bl::atan2(lhs, rhs); }, - [](const mpfr_ref& lhs, const mpfr_ref& rhs) { return boost::multiprecision::atan2(lhs, rhs); }); - } -} - -TEST_CASE("f256 asin and acos match MPFR for fixed values", "[fltx][f256][precision][transcendental][trig][asin][acos]") -{ - accuracy_report_scope report_scope{ "f256 asin and acos match MPFR for fixed values" }; - const std::array cases = {{ - "-1", - "-0.875", - "-0.5", - "-0.125", - "0", - "0.125", - "0.5", - "0.875", - "1" - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "asin", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::asin(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::asin(value); }); - - check_unary_op_with_tolerance( - "acos", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::acos(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::acos(value); }); - } -} - -TEST_CASE("f256 asin and acos match MPFR on random unit inputs", "[fltx][f256][precision][transcendental][trig][asin][acos]") -{ - accuracy_report_scope report_scope{ "f256 asin and acos match MPFR on random unit inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random asin/acos cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_unit_symmetric_for_f256(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "asin", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::asin(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::asin(value); }); - - check_unary_op_with_tolerance( - "acos", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::acos(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::acos(value); }); - } -} - -TEST_CASE("f256 nearbyint and rint match ties-to-even references", "[fltx][f256][precision][math][nearbyint][rint]") -{ - accuracy_report_scope report_scope{ "f256 nearbyint and rint match ties-to-even references" }; - const std::array cases = {{ - "0", - "-0", - "0.25", - "-0.25", - "0.5", - "-0.5", - "1.5", - "-1.5", - "2.5", - "-2.5", - "3.5", - "-3.5", - "0.999999999999999999999999999999", - "1.000000000000000000000000000001", - "-0.999999999999999999999999999999", - "-1.000000000000000000000000000001" - }}; - - for (const char* input : cases) - { - check_unary_op("nearbyint", input, - [](const f256& value) { return bl::nearbyint(value); }, - [](const mpfr_ref& value) { return ref_round_to_even(value); }); - - check_unary_op("rint", input, - [](const f256& value) { return bl::rint(value); }, - [](const mpfr_ref& value) { return ref_round_to_even(value); }); - } - - { - const f256 got = bl::nearbyint(to_f256("-0.5")); - REQUIRE(bl::iszero(got)); - REQUIRE(bl::signbit(got)); - } - { - const f256 got = bl::rint(to_f256("-0.5")); - REQUIRE(bl::iszero(got)); - REQUIRE(bl::signbit(got)); - } -} - -TEST_CASE("f256 nearbyint and rint match ties-to-even references on random inputs", "[fltx][f256][precision][math][nearbyint][rint]") -{ - accuracy_report_scope report_scope{ "f256 nearbyint and rint match ties-to-even references on random inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - print_random_run("random nearbyint/rint cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = to_ref_exact(random_finite_for_f256(rng)); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op("nearbyint", input_text.c_str(), - [](const f256& value) { return bl::nearbyint(value); }, - [](const mpfr_ref& value) { return ref_round_to_even(value); }); - - check_unary_op("rint", input_text.c_str(), - [](const f256& value) { return bl::rint(value); }, - [](const mpfr_ref& value) { return ref_round_to_even(value); }); - } -} - -TEST_CASE("f256 expm1 matches MPFR for fixed values", "[fltx][f256][precision][transcendental][expm1]") -{ - accuracy_report_scope report_scope{ "f256 expm1 matches MPFR for fixed values" }; - const std::array cases = {{ - "-20", - "-1", - "-0.125", - "-1e-10", - "0", - "1e-10", - "0.125", - "1", - "20" - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "expm1", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::expm1(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::expm1(value); }); - } -} - -TEST_CASE("f256 expm1 matches MPFR on random moderate inputs", "[fltx][f256][precision][transcendental][expm1]") -{ - accuracy_report_scope report_scope{ "f256 expm1 matches MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random expm1 cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_signed_interval_for_f256(rng, mpfr_ref{ 20.0 }); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "expm1", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::expm1(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::expm1(value); }); - } -} - -TEST_CASE("f256 log1p matches MPFR for fixed values", "[fltx][f256][precision][transcendental][log1p]") -{ - accuracy_report_scope report_scope{ "f256 log1p matches MPFR for fixed values" }; - const std::array cases = {{ - "-0.875", - "-0.5", - "-0.125", - "-1e-10", - "0", - "1e-10", - "0.125", - "1", - "10" - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "log1p", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::log1p(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::log1p(value); }); - } -} - -TEST_CASE("f256 log1p matches MPFR on random valid inputs", "[fltx][f256][precision][transcendental][log1p]") -{ - accuracy_report_scope report_scope{ "f256 log1p matches MPFR on random valid inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random log1p cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_log1p_argument_for_f256(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "log1p", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::log1p(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::log1p(value); }); - } -} - -TEST_CASE("f256 hyperbolic functions match MPFR for fixed values", "[fltx][f256][precision][transcendental][hyperbolic]") -{ - accuracy_report_scope report_scope{ "f256 hyperbolic functions match MPFR for fixed values" }; - const std::array cases = {{ - "-4", - "-1", - "-0.125", - "0", - "0.125", - "1", - "4", - "8" - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "sinh", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::sinh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sinh(value); }); - - check_unary_op_with_tolerance( - "cosh", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::cosh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::cosh(value); }); - - check_unary_op_with_tolerance( - "tanh", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::tanh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::tanh(value); }); - } -} - -TEST_CASE("f256 hyperbolic functions match MPFR on random moderate inputs", "[fltx][f256][precision][transcendental][hyperbolic]") -{ - accuracy_report_scope report_scope{ "f256 hyperbolic functions match MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random hyperbolic cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_signed_interval_for_f256(rng, mpfr_ref{ 8.0 }); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "sinh", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::sinh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::sinh(value); }); - - check_unary_op_with_tolerance( - "cosh", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::cosh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::cosh(value); }); - - check_unary_op_with_tolerance( - "tanh", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::tanh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::tanh(value); }); - } -} - -TEST_CASE("f256 inverse hyperbolic functions match MPFR for fixed values", "[fltx][f256][precision][transcendental][inverse_hyperbolic]") -{ - accuracy_report_scope report_scope{ "f256 inverse hyperbolic functions match MPFR for fixed values" }; - const std::array asinh_cases = {{ "-8", "-1", "-0.125", "0", "0.125", "1", "8" }}; - const std::array acosh_cases = {{ "1", "1.125", "1.5", "2", "4", "8", "16" }}; - const std::array atanh_cases = {{ "-0.95", "-0.5", "-0.125", "-1e-10", "0", "1e-10", "0.125", "0.95" }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : asinh_cases) - { - check_unary_op_with_tolerance( - "asinh", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::asinh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::asinh(value); }); - } - - for (const char* input : acosh_cases) - { - check_unary_op_with_tolerance( - "acosh", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::acosh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::acosh(value); }); - } - - for (const char* input : atanh_cases) - { - check_unary_op_with_tolerance( - "atanh", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::atanh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::atanh(value); }); - } -} - -TEST_CASE("f256 inverse hyperbolic functions match MPFR on random valid inputs", "[fltx][f256][precision][transcendental][inverse_hyperbolic]") -{ - accuracy_report_scope report_scope{ "f256 inverse hyperbolic functions match MPFR on random valid inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random inverse hyperbolic cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref asinh_input = random_signed_interval_for_f256(rng, mpfr_ref{ 8.0 }); - const mpfr_ref acosh_input = random_acosh_argument_for_f256(rng); - const mpfr_ref atanh_input = random_atanh_argument_for_f256(rng); - - const std::string asinh_text = to_scientific_text(asinh_input, printed_digits + 6); - const std::string acosh_text = to_scientific_text(acosh_input, printed_digits + 6); - const std::string atanh_text = to_scientific_text(atanh_input, printed_digits + 6); - - INFO("iteration: " << i); - - check_unary_op_with_tolerance( - "asinh", - asinh_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::asinh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::asinh(value); }); - - check_unary_op_with_tolerance( - "acosh", - acosh_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::acosh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::acosh(value); }); - - check_unary_op_with_tolerance( - "atanh", - atanh_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::atanh(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::atanh(value); }); - } -} - -TEST_CASE("f256 cbrt and hypot match MPFR for fixed values", "[fltx][f256][precision][math][cbrt][hypot]") -{ - accuracy_report_scope report_scope{ "f256 cbrt and hypot match MPFR for fixed values" }; - const std::array cbrt_cases = {{ "-1e9", "-8", "-0.125", "0", "0.125", "8", "27", "1e9" }}; - const std::array, 8> hypot_cases = {{ - { "0", "0" }, - { "3", "4" }, - { "-3", "4" }, - { "1e-40", "3e-20" }, - { "1e40", "3e20" }, - { "123.456", "789.25" }, - { "-123.456", "789.25" }, - { "0.125", "0.5" } - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cbrt_cases) - { - check_unary_op_with_tolerance( - "cbrt", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::cbrt(value); }, - [](const mpfr_ref& value) { return ref_cbrt(value); }); - } - - for (const auto& [lhs, rhs] : hypot_cases) - { - check_binary_op_with_tolerance( - "hypot", - lhs, - rhs, - abs_tolerance, - rel_tolerance, - [](const f256& x, const f256& y) { return bl::hypot(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return ref_hypot(x, y); }); - } -} - -TEST_CASE("f256 cbrt and hypot match MPFR on random moderate inputs", "[fltx][f256][precision][math][cbrt][hypot]") -{ - accuracy_report_scope report_scope{ "f256 cbrt and hypot match MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 256; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random cbrt/hypot cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref cbrt_input = random_signed_interval_for_f256(rng, mpfr_ref{ 1e12 }); - const mpfr_ref hypot_x = random_signed_interval_for_f256(rng, mpfr_ref{ 1e12 }); - const mpfr_ref hypot_y = random_signed_interval_for_f256(rng, mpfr_ref{ 1e12 }); - - const std::string cbrt_text = to_scientific_text(cbrt_input, printed_digits + 6); - const std::string x_text = to_scientific_text(hypot_x, printed_digits + 6); - const std::string y_text = to_scientific_text(hypot_y, printed_digits + 6); - - INFO("iteration: " << i); - - check_unary_op_with_tolerance( - "cbrt", - cbrt_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::cbrt(value); }, - [](const mpfr_ref& value) { return ref_cbrt(value); }); - - check_binary_op_with_tolerance( - "hypot", - x_text.c_str(), - y_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& x, const f256& y) { return bl::hypot(x, y); }, - [](const mpfr_ref& x, const mpfr_ref& y) { return ref_hypot(x, y); }); - } -} - -TEST_CASE("f256 decomposition and stepping functions behave correctly", "[fltx][f256][math][decomposition]") -{ - accuracy_report_scope report_scope{ "f256 decomposition and stepping functions behave correctly" }; - - { - const f256 input = to_f256("123.456"); - int exponent = 0; - const f256 mantissa = bl::frexp(input, &exponent); - const f256 rebuilt = bl::ldexp(mantissa, exponent); - const mpfr_ref diff = abs_ref(to_ref_exact(rebuilt) - to_ref_exact(input)); - const mpfr_ref scale = abs_ref(to_ref_exact(input)); - const mpfr_ref tolerance = function_tolerance("frexp", scale); - CAPTURE(exponent); - CAPTURE(to_text(mantissa)); - CAPTURE(to_text(rebuilt)); - REQUIRE(abs_ref(to_ref_exact(mantissa)) >= mpfr_ref{ 0.5 }); - REQUIRE(abs_ref(to_ref_exact(mantissa)) < mpfr_ref{ 1.0 }); - record_accuracy_sample("frexp", rebuilt, to_ref_exact(input), diff, scale, diff <= tolerance); - REQUIRE(diff <= tolerance); - } - { - const f256 input = to_f256("-123.456"); - f256 ip{}; - const f256 frac = bl::modf(input, &ip); - const mpfr_ref sum_diff = abs_ref((to_ref_exact(frac) + to_ref_exact(ip)) - to_ref_exact(input)); - CAPTURE(to_text(frac)); - CAPTURE(to_text(ip)); - const mpfr_ref sum_scale = abs_ref(to_ref_exact(input)); - REQUIRE(sum_diff <= function_tolerance("modf", sum_scale)); - require_exact_value("modf.integer", ip, bl::trunc(input)); - } - { - const f256 input = to_f256("8.0"); - REQUIRE(bl::ilogb(input) == 3); - require_exact_value("logb", bl::logb(input), to_f256("3.0")); - } - { - const f256 input = to_f256("1.5"); - require_exact_value("scalbn", bl::scalbn(input, 5), bl::ldexp(input, 5)); - require_exact_value("scalbln", bl::scalbln(input, -5), bl::ldexp(input, -5)); - } - { - const f256 from = to_f256("1.25"); - const f256 to = to_f256("2.0"); - const f256 expected = detail::_f256::renorm4(from.x0, from.x1, from.x2, std::nextafter(from.x3, std::numeric_limits::infinity())); - REQUIRE(expected.x1 != 0.0); - REQUIRE(expected.x2 == 0.0); - REQUIRE(expected.x3 == 0.0); - require_exact_value("nextafter.up", bl::nextafter(from, to), expected); - require_exact_value("nexttoward.f256", bl::nexttoward(from, to), expected); - require_exact_value("nexttoward.longdouble", bl::nexttoward(from, static_cast(2.0)), expected); - } - { - const f256 from = to_f256("1.25"); - const f256 to = to_f256("-2.0"); - const f256 expected = detail::_f256::renorm4(from.x0, from.x1, from.x2, std::nextafter(from.x3, -std::numeric_limits::infinity())); - REQUIRE(expected.x1 != 0.0); - REQUIRE(expected.x2 == 0.0); - REQUIRE(expected.x3 == 0.0); - require_exact_value("nextafter.down", bl::nextafter(from, to), expected); - } - { - const f256 from = detail::_f256::renorm4(1.0, 0x1p-60, 0x1p-120, 0.0); - const f256 to = to_f256("2.0"); - const f256 expected = detail::_f256::renorm4(from.x0, from.x1, from.x2, std::nextafter(from.x3, std::numeric_limits::infinity())); - REQUIRE(expected.x1 != 0.0); - REQUIRE(expected.x2 != 0.0); - REQUIRE(expected.x3 != 0.0); - require_exact_value("nextafter.normalized_tail_up", bl::nextafter(from, to), expected); - } - { - const f256 got = bl::nextafter(f256{ 0.0, 0.0, 0.0, 0.0 }, to_f256("-1.0")); - require_exact_value("nextafter.zero", got, f256{ -std::numeric_limits::denorm_min(), 0.0, 0.0, 0.0 }); - } - { - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - check_remquo_case("fixed.positive", mpfr_ref{ "5.25" }, mpfr_ref{ "2" }, abs_tolerance, rel_tolerance); - check_remquo_case("fixed.negative", mpfr_ref{ "-5.25" }, mpfr_ref{ "2" }, abs_tolerance, rel_tolerance); - check_remquo_case("fixed.fractional", mpfr_ref{ "123.456" }, mpfr_ref{ "0.5" }, abs_tolerance, rel_tolerance); - } -} - -TEST_CASE("f256 erf and erfc match MPFR for fixed values", "[fltx][f256][precision][transcendental][erf][erfc]") -{ - accuracy_report_scope report_scope{ "f256 erf and erfc match MPFR for fixed values" }; - const std::array cases = {{ - "-1e100", - "-13", - "-4", - "-1", - "-0.125", - "-1e-10", - "0", - "1e-10", - "0.125", - "1", - "4", - "13", - "1e100" - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "erf", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::erf(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::erf(value); }); - - check_unary_op_with_tolerance( - "erfc", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::erfc(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::erfc(value); }); - } -} - -TEST_CASE("f256 erf and erfc match MPFR on random moderate inputs", "[fltx][f256][precision][transcendental][erf][erfc]") -{ - accuracy_report_scope report_scope{ "f256 erf and erfc match MPFR on random moderate inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random erf/erfc cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_erf_argument_for_f256(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "erf", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::erf(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::erf(value); }); - - check_unary_op_with_tolerance( - "erfc", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::erfc(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::erfc(value); }); - } -} - -TEST_CASE("f256 lgamma and tgamma match MPFR for fixed values", "[fltx][f256][precision][transcendental][gamma]") -{ - accuracy_report_scope report_scope{ "f256 lgamma and tgamma match MPFR for fixed values" }; - const std::array cases = {{ - "0.125", - "0.5", - "0.75", - "1", - "1.5", - "2.5", - "5.5", - "10" - }}; - - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - - for (const char* input : cases) - { - check_unary_op_with_tolerance( - "lgamma", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::lgamma(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::lgamma(value); }); - - check_unary_op_with_tolerance( - "tgamma", - input, - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::tgamma(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::tgamma(value); }); - } -} - -TEST_CASE("f256 lgamma and tgamma match MPFR on random positive inputs", "[fltx][f256][precision][transcendental][gamma]") -{ - accuracy_report_scope report_scope{ "f256 lgamma and tgamma match MPFR on random positive inputs" }; - bl::mt19937_64 rng{ random_seed }; - - constexpr int count = 128 * random_sample_count_scale; - const mpfr_ref abs_tolerance{ "1e-59" }; - const mpfr_ref rel_tolerance{ "1e-59" }; - print_random_run("random gamma cases", count); - - for (int i = 0; i < count; ++i) - { - const mpfr_ref input = random_gamma_positive_for_f256(rng); - const std::string input_text = to_scientific_text(input, printed_digits + 6); - - INFO("iteration: " << i); - INFO("input_text: " << input_text); - - check_unary_op_with_tolerance( - "lgamma", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::lgamma(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::lgamma(value); }); - - check_unary_op_with_tolerance( - "tgamma", - input_text.c_str(), - abs_tolerance, - rel_tolerance, - [](const f256& value) { return bl::tgamma(value); }, - [](const mpfr_ref& value) { return boost::multiprecision::tgamma(value); }); - } -} diff --git a/tests/precision/test_f32_math.cpp b/tests/precision/test_f32_math.cpp deleted file mode 100644 index 0283d3e..0000000 --- a/tests/precision/test_f32_math.cpp +++ /dev/null @@ -1,2062 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -using namespace bl; - -namespace -{ - using mpfr_ref = boost::multiprecision::number< - boost::multiprecision::mpfr_float_backend<96>, - boost::multiprecision::et_off>; - using boost::multiprecision::cpp_int; - - constexpr int checked_digits = std::numeric_limits::digits10; - constexpr int printed_digits = std::numeric_limits::max_digits10; - constexpr float min_subnormal = std::numeric_limits::denorm_min(); - - constexpr std::uint64_t random_seed = 1ull; - constexpr int random_sample_count = 10; - constexpr const char* type_label = "f32"; - - template - struct sincos_pair - { - T c; - T s; - }; - - struct accuracy_stats_entry - { - int samples = 0; - int passed = 0; - std::vector achieved_digits; - std::uint32_t worst_ulp = 0; - float worst_scaled_error = 0.0f; - }; - - class accuracy_report_scope; - thread_local accuracy_report_scope* current_accuracy_report_scope = nullptr; - - [[nodiscard]] std::string to_text(float value) - { - if (std::isnan(value)) - return "nan"; - if (std::isinf(value)) - return std::signbit(value) ? "-inf" : "inf"; - - std::ostringstream out; - out << std::setprecision(printed_digits) << std::defaultfloat << value; - return out.str(); - } - - [[nodiscard]] std::string to_text_hex(float value) - { - std::ostringstream out; - out << std::hexfloat << value; - return out.str(); - } - - [[nodiscard]] std::string to_text(const mpfr_ref& value) - { - std::ostringstream out; - out << std::setprecision(printed_digits + 24) - << std::scientific - << value; - return out.str(); - } - - [[nodiscard]] bool op_is(const char* op_name, const char* expected) - { - return std::strcmp(op_name, expected) == 0; - } - - [[nodiscard]] bool op_starts_with(const char* op_name, const char* prefix) - { - return std::strncmp(op_name, prefix, std::strlen(prefix)) == 0; - } - - [[nodiscard]] float abs_ref(float value) - { - return value < 0.0 ? -value : value; - } - - [[nodiscard]] mpfr_ref abs_ref(const mpfr_ref& value) - { - return value < 0 ? -value : value; - } - - [[nodiscard]] mpfr_ref to_ref_exact(float value) - { - return mpfr_ref{ value }; - } - - [[nodiscard]] float round_ref_to_f32(const mpfr_ref& value) - { - return value.convert_to(); - } - - [[nodiscard]] mpfr_ref ref_floor(const mpfr_ref& value) - { - return boost::multiprecision::floor(value); - } - - [[nodiscard]] mpfr_ref ref_ceil(const mpfr_ref& value) - { - return boost::multiprecision::ceil(value); - } - - [[nodiscard]] mpfr_ref ref_trunc(const mpfr_ref& value) - { - return value < 0 ? ref_ceil(value) : ref_floor(value); - } - - [[nodiscard]] mpfr_ref ref_fmod(const mpfr_ref& x, const mpfr_ref& y) - { - return x - ref_trunc(x / y) * y; - } - - [[nodiscard]] mpfr_ref ref_round_half_away_zero(const mpfr_ref& value) - { - return value < 0 - ? ref_ceil(value - mpfr_ref{ "0.5" }) - : ref_floor(value + mpfr_ref{ "0.5" }); - } - - [[nodiscard]] mpfr_ref ref_round_to_even(const mpfr_ref& value) - { - mpfr_ref rounded = ref_floor(value + mpfr_ref{ "0.5" }); - if ((rounded - value) == mpfr_ref{ "0.5" } && ref_fmod(rounded, mpfr_ref{ 2 }) != mpfr_ref{ 0 }) - rounded -= 1; - return rounded; - } - - [[nodiscard]] mpfr_ref ref_remainder(const mpfr_ref& x, const mpfr_ref& y) - { - return x - ref_round_to_even(x / y) * y; - } - - struct exact_binary_float - { - cpp_int coeff; - int exp2 = 0; - bool neg = false; - }; - - struct exact_mod_reference - { - float fmod = 0.0f; - float remainder = 0.0f; - int quotient_bits = 0; - }; - - [[nodiscard]] exact_binary_float decompose_exact(float value) - { - const std::uint32_t bits = std::bit_cast(value); - const std::uint32_t frac = bits & ((std::uint32_t{ 1 } << 23) - 1u); - const std::uint32_t exp_bits = (bits >> 23) & 0xffu; - - exact_binary_float out; - out.neg = (bits >> 31) != 0; - if (exp_bits == 0) - { - out.coeff = frac; - out.exp2 = -149; - } - else - { - out.coeff = (std::uint32_t{ 1 } << 23) | frac; - out.exp2 = static_cast(exp_bits) - 127 - 23; - } - return out; - } - - [[nodiscard]] int bit_length(const cpp_int& value) - { - return value == 0 ? 0 : static_cast(boost::multiprecision::msb(value)) + 1; - } - - [[nodiscard]] cpp_int rounded_shift_right(cpp_int value, int bits) - { - if (bits <= 0) - return value; - - const bool round_bit = ((value >> (bits - 1)) & 1) != 0; - const bool sticky = bits > 1 && (value & ((cpp_int{ 1 } << (bits - 1)) - 1)) != 0; - cpp_int out = value >> bits; - if (round_bit && (sticky || (out & 1) != 0)) - ++out; - return out; - } - - [[nodiscard]] float round_exact_dyadic_to_f32(cpp_int coeff, int exp2, bool neg) - { - if (coeff == 0) - return neg ? -0.0f : 0.0f; - - const int top_bit = bit_length(coeff) - 1; - int unbiased_exp = exp2 + top_bit; - if (unbiased_exp > 127) - return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); - - if (unbiased_exp < -126) - { - const int scale = exp2 + 149; - cpp_int units = scale >= 0 ? (coeff << scale) : rounded_shift_right(coeff, -scale); - if (units == 0) - return neg ? -0.0f : 0.0f; - const float out = std::ldexp(units.convert_to(), -149); - return neg ? -out : out; - } - - const int shift = top_bit - 23; - cpp_int significand = shift > 0 ? rounded_shift_right(coeff, shift) : (coeff << -shift); - int result_exp = exp2 + shift; - - if (bit_length(significand) > 24) - { - significand >>= 1; - ++result_exp; - ++unbiased_exp; - if (unbiased_exp > 127) - return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); - } - - const float out = std::ldexp(significand.convert_to(), result_exp); - return neg ? -out : out; - } - - [[nodiscard]] int normalize_remquo_bits(const cpp_int& quotient, bool neg) - { - if (quotient == 0) - return 0; - - int bits = static_cast((quotient & 0x7).convert_to()); - if (bits == 0) - bits = 8; - return neg ? -bits : bits; - } - - [[nodiscard]] exact_mod_reference exact_mod_reference_for(float lhs, float rhs) - { - exact_mod_reference out; - if (std::isnan(lhs) || std::isnan(rhs) || rhs == 0.0f || std::isinf(lhs)) - { - out.fmod = std::numeric_limits::quiet_NaN(); - out.remainder = std::numeric_limits::quiet_NaN(); - return out; - } - if (std::isinf(rhs) || lhs == 0.0f) - { - out.fmod = lhs; - out.remainder = lhs; - return out; - } - - exact_binary_float x = decompose_exact(std::fabs(lhs)); - exact_binary_float y = decompose_exact(std::fabs(rhs)); - const int common_exp = std::min(x.exp2, y.exp2); - - cpp_int numerator = x.coeff << (x.exp2 - common_exp); - cpp_int denominator = y.coeff << (y.exp2 - common_exp); - cpp_int quotient = numerator / denominator; - cpp_int remainder = numerator % denominator; - - const bool x_neg = std::signbit(lhs); - out.fmod = round_exact_dyadic_to_f32(remainder, common_exp, x_neg); - - bool remainder_neg = x_neg; - cpp_int nearest_quotient = quotient; - cpp_int nearest_remainder = remainder; - const cpp_int twice_remainder = remainder << 1; - if (twice_remainder > denominator || (twice_remainder == denominator && (quotient & 1) != 0)) - { - nearest_remainder = denominator - remainder; - ++nearest_quotient; - remainder_neg = !remainder_neg; - } - - out.remainder = round_exact_dyadic_to_f32(nearest_remainder, common_exp, remainder_neg); - if (out.remainder == 0.0f) - out.remainder = std::copysign(0.0f, lhs); - out.quotient_bits = normalize_remquo_bits(nearest_quotient, std::signbit(lhs) != std::signbit(rhs)); - return out; - } - - [[nodiscard]] const mpfr_ref& ln2_ref() - { - static const mpfr_ref value = boost::multiprecision::log(mpfr_ref{ 2 }); - return value; - } - - [[nodiscard]] const mpfr_ref& ln10_ref() - { - static const mpfr_ref value = boost::multiprecision::log(mpfr_ref{ 10 }); - return value; - } - - [[nodiscard]] mpfr_ref ref_exp2(const mpfr_ref& value) - { - return boost::multiprecision::exp(value * ln2_ref()); - } - - [[nodiscard]] mpfr_ref ref_log2(const mpfr_ref& value) - { - return boost::multiprecision::log(value) / ln2_ref(); - } - - [[nodiscard]] mpfr_ref ref_log10(const mpfr_ref& value) - { - return boost::multiprecision::log(value) / ln10_ref(); - } - - [[nodiscard]] bool ref_is_integer(const mpfr_ref& value) - { - return boost::multiprecision::floor(value) == value; - } - - [[nodiscard]] mpfr_ref ref_powi(mpfr_ref base, long long exponent) - { - if (exponent == 0) - return mpfr_ref{ 1 }; - - bool invert = exponent < 0; - unsigned long long e = invert - ? static_cast(-(exponent + 1)) + 1ull - : static_cast(exponent); - - mpfr_ref result{ 1 }; - while (e != 0) - { - if ((e & 1ull) != 0) - result *= base; - e >>= 1ull; - if (e != 0) - base *= base; - } - - return invert ? (mpfr_ref{ 1 } / result) : result; - } - - [[nodiscard]] mpfr_ref ref_pow(const mpfr_ref& base, const mpfr_ref& exponent) - { - if (base < 0 && ref_is_integer(exponent)) - { - const long long n = exponent.convert_to(); - const mpfr_ref mag = ref_powi(-base, n); - return (n & 1LL) ? -mag : mag; - } - - return boost::multiprecision::exp(exponent * boost::multiprecision::log(base)); - } - - [[nodiscard]] mpfr_ref ref_cbrt(const mpfr_ref& value) - { - const mpfr_ref third = mpfr_ref{ 1 } / mpfr_ref{ 3 }; - return value < 0 - ? -boost::multiprecision::pow(-value, third) - : boost::multiprecision::pow(value, third); - } - - [[nodiscard]] mpfr_ref ref_hypot(const mpfr_ref& x, const mpfr_ref& y) - { - return boost::multiprecision::sqrt(x * x + y * y); - } - - [[nodiscard]] mpfr_ref ref_ldexp(mpfr_ref value, int exponent) - { - if (exponent > 0) - { - for (int i = 0; i < exponent; ++i) - value *= 2; - } - else - { - for (int i = 0; i < -exponent; ++i) - value /= 2; - } - - return value; - } - - [[nodiscard]] bool try_mpfr_unary_reference(const char* op_name, float input, float& expected) - { - const mpfr_ref x = to_ref_exact(input); - mpfr_ref ref{}; - - if (op_is(op_name, "sin")) ref = boost::multiprecision::sin(x); - else if (op_is(op_name, "cos")) ref = boost::multiprecision::cos(x); - else if (op_is(op_name, "tan")) ref = boost::multiprecision::tan(x); - else if (op_is(op_name, "atan")) ref = boost::multiprecision::atan(x); - else if (op_is(op_name, "asin")) ref = boost::multiprecision::asin(x); - else if (op_is(op_name, "acos")) ref = boost::multiprecision::acos(x); - else if (op_is(op_name, "floor")) ref = ref_floor(x); - else if (op_is(op_name, "ceil")) ref = ref_ceil(x); - else if (op_is(op_name, "trunc")) ref = ref_trunc(x); - else if (op_is(op_name, "round")) ref = ref_round_half_away_zero(x); - else if (op_is(op_name, "nearbyint") || op_is(op_name, "rint")) ref = ref_round_to_even(x); - else if (op_is(op_name, "exp")) ref = boost::multiprecision::exp(x); - else if (op_is(op_name, "exp2")) ref = ref_exp2(x); - else if (op_is(op_name, "expm1")) ref = boost::multiprecision::expm1(x); - else if (op_is(op_name, "log")) ref = boost::multiprecision::log(x); - else if (op_is(op_name, "log2")) ref = ref_log2(x); - else if (op_is(op_name, "log10")) ref = ref_log10(x); - else if (op_is(op_name, "log1p")) ref = boost::multiprecision::log1p(x); - else if (op_is(op_name, "sqrt")) ref = boost::multiprecision::sqrt(x); - else if (op_starts_with(op_name, "cbrt")) - { - if (input == 0.0f) - { - expected = input; - return true; - } - ref = ref_cbrt(x); - } - else if (op_is(op_name, "sinh")) ref = boost::multiprecision::sinh(x); - else if (op_is(op_name, "cosh")) ref = boost::multiprecision::cosh(x); - else if (op_is(op_name, "tanh")) ref = boost::multiprecision::tanh(x); - else if (op_is(op_name, "asinh")) ref = boost::multiprecision::asinh(x); - else if (op_is(op_name, "acosh")) ref = boost::multiprecision::acosh(x); - else if (op_is(op_name, "atanh")) ref = boost::multiprecision::atanh(x); - else if (op_is(op_name, "erf")) ref = boost::multiprecision::erf(x); - else if (op_is(op_name, "erfc")) ref = boost::multiprecision::erfc(x); - else if (op_is(op_name, "lgamma")) ref = boost::multiprecision::lgamma(x); - else if (op_is(op_name, "tgamma")) ref = boost::multiprecision::tgamma(x); - else if (op_is(op_name, "fabs") || op_is(op_name, "abs")) - { - expected = std::fabs(input); - return true; - } - else return false; - - expected = round_ref_to_f32(ref); - if (expected == 0.0f && - (op_is(op_name, "sin") || op_is(op_name, "tan") || op_is(op_name, "atan") || - op_is(op_name, "asin") || op_is(op_name, "sinh") || op_is(op_name, "tanh") || - op_is(op_name, "asinh") || op_is(op_name, "erf") || op_is(op_name, "expm1") || - op_is(op_name, "log1p") || op_is(op_name, "floor") || op_is(op_name, "ceil") || - op_is(op_name, "trunc") || op_is(op_name, "round") || op_is(op_name, "nearbyint") || - op_is(op_name, "rint"))) - { - expected = std::copysign(0.0f, input); - } - return true; - } - - [[nodiscard]] bool try_mpfr_binary_reference(const char* op_name, float lhs, float rhs, float& expected) - { - const mpfr_ref a = to_ref_exact(lhs); - const mpfr_ref b = to_ref_exact(rhs); - mpfr_ref ref{}; - - if (op_is(op_name, "add")) ref = a + b; - else if (op_is(op_name, "subtract")) ref = a - b; - else if (op_is(op_name, "multiply")) ref = a * b; - else if (op_is(op_name, "divide")) ref = a / b; - else if (op_is(op_name, "atan2")) ref = boost::multiprecision::atan2(a, b); - else if (op_is(op_name, "hypot")) ref = ref_hypot(a, b); - else if (op_is(op_name, "pow")) - { - if (lhs == 0.0f) - { - expected = std::pow(lhs, rhs); - return true; - } - ref = ref_pow(a, b); - } - else if (op_is(op_name, "fmod")) - { - expected = exact_mod_reference_for(lhs, rhs).fmod; - return true; - } - else if (op_is(op_name, "remainder")) - { - expected = exact_mod_reference_for(lhs, rhs).remainder; - return true; - } - else if (op_is(op_name, "fdim")) ref = (a > b) ? (a - b) : mpfr_ref{ 0 }; - else return false; - - expected = round_ref_to_f32(ref); - return true; - } - - [[nodiscard]] float achieved_digits_from_error(float diff, float scale) - { - if (diff == 0.0) - return static_cast(checked_digits); - - const float scaled_error = diff / scale; - if (!(scaled_error > 0.0)) - return static_cast(checked_digits); - - if (scaled_error >= 1.0) - return 0.0; - - const float digits = -std::log10(scaled_error); - return digits < 0.0 ? 0.0 : digits; - } - - [[nodiscard]] float normalized_accuracy_percent(float digits) - { - if (checked_digits <= 0) - return 100.0; - - float ratio = digits / static_cast(checked_digits); - if (ratio < 0.0) - ratio = 0.0; - if (ratio > 1.0) - ratio = 1.0; - return ratio * 100.0; - } - - [[nodiscard]] float median_digits(std::vector values) - { - if (values.empty()) - return 0.0; - - std::sort(values.begin(), values.end()); - const std::size_t mid = values.size() / 2; - if ((values.size() & 1u) != 0u) - return values[mid]; - - return (values[mid - 1] + values[mid]) * 0.5; - } - - [[nodiscard]] std::uint32_t ordered_bits(float value) - { - const std::uint32_t bits = std::bit_cast(value); - if ((bits & 0x80000000u) != 0u) - return ~bits; - - return bits | 0x80000000u; - } - - [[nodiscard]] std::uint32_t ulp_distance(float a, float b) - { - const std::uint32_t oa = ordered_bits(a); - const std::uint32_t ob = ordered_bits(b); - return (oa >= ob) ? (oa - ob) : (ob - oa); - } - - class accuracy_report_scope - { - public: - explicit accuracy_report_scope(const char* test_name) - : test_name(test_name), previous(current_accuracy_report_scope) - { - current_accuracy_report_scope = this; - } - - ~accuracy_report_scope() - { - current_accuracy_report_scope = previous; - - if (stats.empty()) - return; - - const std::ios_base::fmtflags old_flags = std::cout.flags(); - const std::streamsize old_precision = std::cout.precision(); - - std::cout << "\naccuracy summary for " << test_name << ":\n"; - std::cout << std::fixed << std::setprecision(2); - - for (const auto& [op_name, entry] : stats) - { - const float median = median_digits(entry.achieved_digits); - const float worst = *std::min_element(entry.achieved_digits.begin(), entry.achieved_digits.end()); - - std::cout << " " << op_name - << ": pass " << entry.passed << "/" << entry.samples - << ", median " << median << "/" << checked_digits - << " digits (" << normalized_accuracy_percent(median) << "%)" - << ", worst " << worst << "/" << checked_digits - << " digits (" << normalized_accuracy_percent(worst) << "%)" - << ", worst ulp " << entry.worst_ulp - << ", worst scaled error " << std::scientific << entry.worst_scaled_error << std::fixed - << "\n"; - } - - std::cout.flags(old_flags); - std::cout.precision(old_precision); - } - - void record(const char* op_name, float diff, float scale, std::uint32_t ulp_diff, bool passed) - { - auto& entry = stats[op_name]; - ++entry.samples; - if (passed) - ++entry.passed; - entry.achieved_digits.push_back(achieved_digits_from_error(diff, scale)); - if (ulp_diff > entry.worst_ulp) - entry.worst_ulp = ulp_diff; - if (scale != 0.0f && std::isfinite(diff) && std::isfinite(scale)) - entry.worst_scaled_error = std::max(entry.worst_scaled_error, diff / scale); - } - - private: - std::string test_name; - accuracy_report_scope* previous = nullptr; - std::map stats; - }; - - void record_accuracy_sample(const char* op_name, float diff, float scale, std::uint32_t ulp_diff, bool passed) - { - if (current_accuracy_report_scope != nullptr) - current_accuracy_report_scope->record(op_name, diff, scale, ulp_diff, passed); - } - - struct tolerance_spec - { - float abs_tolerance = 0.0; - float rel_tolerance = 0.0; - std::uint32_t max_ulps = 0; - }; - - [[nodiscard]] tolerance_spec with_default_mpfr_tolerance(const char* op_name, tolerance_spec tolerance); - - [[nodiscard]] bool both_nan(float a, float b) - { - return std::isnan(a) && std::isnan(b); - } - - [[nodiscard]] bool same_zero_with_same_sign(float a, float b) - { - return a == 0.0 && b == 0.0 && std::signbit(a) == std::signbit(b); - } - - [[nodiscard]] bool same_infinity_with_same_sign(float a, float b) - { - return std::isinf(a) && std::isinf(b) && std::signbit(a) == std::signbit(b); - } - - [[nodiscard]] bool same_bits(float a, float b) - { - return std::bit_cast(a) == std::bit_cast(b); - } - - struct floating_compare_result - { - bool passed = false; - float signed_diff = 0.0; - float abs_diff = 0.0; - float rel_diff = 0.0; - float scale = 1.0; - float allowed_diff = 0.0; - float achieved_digits = 0.0; - std::uint32_t ulp_diff = 0; - const char* reason = ""; - }; - - [[nodiscard]] floating_compare_result compare_floating_result( - const char* op_name, - float got, - float expected, - const tolerance_spec& tolerance) - { - floating_compare_result result{}; - - if (both_nan(got, expected)) - { - result.passed = true; - result.achieved_digits = static_cast(checked_digits); - result.reason = "both NaN"; - record_accuracy_sample(op_name, 0.0, 1.0, 0, true); - return result; - } - - if (same_infinity_with_same_sign(got, expected)) - { - result.passed = true; - result.achieved_digits = static_cast(checked_digits); - result.reason = "same signed infinity"; - record_accuracy_sample(op_name, 0.0, 1.0, 0, true); - return result; - } - - if (same_zero_with_same_sign(got, expected)) - { - result.passed = true; - result.achieved_digits = static_cast(checked_digits); - result.reason = "same signed zero"; - record_accuracy_sample(op_name, 0.0, 1.0, 0, true); - return result; - } - - if (got == 0.0 && expected == 0.0) - { - result.passed = false; - result.abs_diff = 0.0; - result.scale = 1.0; - result.allowed_diff = tolerance.abs_tolerance; - result.ulp_diff = 1; - result.reason = "zero sign mismatch"; - record_accuracy_sample(op_name, 0.0, 1.0, 1, false); - return result; - } - - if (same_bits(got, expected)) - { - result.passed = true; - result.scale = std::max(1.0f, abs_ref(expected)); - result.achieved_digits = static_cast(checked_digits); - result.reason = "bitwise equal"; - record_accuracy_sample(op_name, 0.0, result.scale, 0, true); - return result; - } - - if (!std::isfinite(got) || !std::isfinite(expected)) - { - result.passed = false; - result.abs_diff = std::numeric_limits::infinity(); - result.rel_diff = std::numeric_limits::infinity(); - result.scale = 1.0; - result.allowed_diff = tolerance.abs_tolerance; - result.ulp_diff = std::numeric_limits::max(); - result.reason = "non-finite mismatch"; - record_accuracy_sample(op_name, std::numeric_limits::infinity(), 1.0, std::numeric_limits::max(), false); - return result; - } - - result.signed_diff = got - expected; - result.abs_diff = abs_ref(result.signed_diff); - result.scale = abs_ref(expected); - if (result.scale < 1.0) - result.scale = 1.0; - - const float rel_based_tolerance = tolerance.rel_tolerance * result.scale; - result.allowed_diff = tolerance.abs_tolerance; - if (rel_based_tolerance > result.allowed_diff) - result.allowed_diff = rel_based_tolerance; - - if (expected == 0.0) - result.rel_diff = (result.abs_diff == 0.0) ? 0.0 : std::numeric_limits::infinity(); - else - result.rel_diff = result.abs_diff / abs_ref(expected); - - result.ulp_diff = ulp_distance(got, expected); - const bool within_diff = result.abs_diff <= result.allowed_diff; - const bool within_ulps = result.ulp_diff <= tolerance.max_ulps; - result.passed = within_diff || within_ulps; - result.achieved_digits = achieved_digits_from_error(result.abs_diff, result.scale); - result.reason = result.passed ? "within tolerance" : "outside tolerance"; - - record_accuracy_sample(op_name, result.abs_diff, result.scale, result.ulp_diff, result.passed); - return result; - } - - [[nodiscard]] std::string build_comparison_message( - const char* op_name, - float got, - float expected, - const tolerance_spec& tolerance, - const floating_compare_result& result) - { - std::ostringstream out; - out << op_name << " mismatch" - << "\n got: " << to_text(got) - << "\n expected: " << to_text(expected) - << "\n got hex: " << to_text_hex(got) - << "\n expected hex: " << to_text_hex(expected) - << "\n signed diff (got - expected): " << to_text(result.signed_diff) - << "\n abs diff: " << to_text(result.abs_diff) - << "\n relative diff: " << to_text(result.rel_diff) - << "\n allowed abs diff: " << to_text(result.allowed_diff) - << "\n ulp diff: " << result.ulp_diff - << " (limit " << tolerance.max_ulps << ")" - << "\n achieved digits: " << result.achieved_digits << "/" << checked_digits - << "\n reason: " << result.reason; - return out.str(); - } - - template - void check_unary_op( - const char* op_name, - float input, - const tolerance_spec& tolerance, - F64Op&& f32_op, - StdOp&& std_op) - { - const float got = f32_op(input); - float expected{}; - if (!try_mpfr_unary_reference(op_name, input, expected)) - expected = std_op(input); - const tolerance_spec effective_tolerance = with_default_mpfr_tolerance(op_name, tolerance); - - INFO(op_name - << "\n input: " << to_text(input) - << "\n input hex: " << to_text_hex(input)); - - const floating_compare_result comparison = compare_floating_result(op_name, got, expected, effective_tolerance); - INFO(build_comparison_message(op_name, got, expected, effective_tolerance, comparison)); - REQUIRE(comparison.passed); - } - - template - void check_binary_op( - const char* op_name, - float lhs, - float rhs, - const tolerance_spec& tolerance, - F64Op&& f32_op, - StdOp&& std_op) - { - const float got = f32_op(lhs, rhs); - float expected{}; - if (!try_mpfr_binary_reference(op_name, lhs, rhs, expected)) - expected = std_op(lhs, rhs); - const tolerance_spec effective_tolerance = with_default_mpfr_tolerance(op_name, tolerance); - - INFO(op_name - << "\n lhs: " << to_text(lhs) - << "\n rhs: " << to_text(rhs) - << "\n lhs hex: " << to_text_hex(lhs) - << "\n rhs hex: " << to_text_hex(rhs)); - - const floating_compare_result comparison = compare_floating_result(op_name, got, expected, effective_tolerance); - INFO(build_comparison_message(op_name, got, expected, effective_tolerance, comparison)); - REQUIRE(comparison.passed); - } - - void check_fma_result(float x, float y, float z, const tolerance_spec& tolerance) - { - const char* op_name = "fma"; - const float got = bl::fma(x, y, z); - const float expected = round_ref_to_f32(to_ref_exact(x) * to_ref_exact(y) + to_ref_exact(z)); - const tolerance_spec effective_tolerance = with_default_mpfr_tolerance(op_name, tolerance); - - INFO(op_name - << "\n x: " << to_text(x) - << "\n y: " << to_text(y) - << "\n z: " << to_text(z) - << "\n x hex: " << to_text_hex(x) - << "\n y hex: " << to_text_hex(y) - << "\n z hex: " << to_text_hex(z)); - - const floating_compare_result comparison = compare_floating_result(op_name, got, expected, effective_tolerance); - INFO(build_comparison_message(op_name, got, expected, effective_tolerance, comparison)); - REQUIRE(comparison.passed); - } - - void check_scaled_result(const char* op_name, float value, int exponent, float got) - { - const float expected = value == 0.0f - ? value - : round_ref_to_f32(ref_ldexp(to_ref_exact(value), exponent)); - - INFO(op_name - << "\n input: " << to_text(value) - << "\n exponent: " << exponent - << "\n input hex: " << to_text_hex(value)); - - const tolerance_spec tolerance{}; - const floating_compare_result comparison = compare_floating_result(op_name, got, expected, tolerance); - INFO(build_comparison_message(op_name, got, expected, tolerance, comparison)); - REQUIRE(comparison.passed); - } - - template - void check_exact_integer_result(const char* op_name, Int got, Int expected, float input) - { - CAPTURE(op_name); - CAPTURE(to_text(input)); - CAPTURE(got); - CAPTURE(expected); - REQUIRE(got == expected); - } - - template - void check_exact_integer_result(const char* op_name, Int got, Int expected, float lhs, float rhs) - { - CAPTURE(op_name); - CAPTURE(to_text(lhs)); - CAPTURE(to_text(rhs)); - CAPTURE(got); - CAPTURE(expected); - REQUIRE(got == expected); - } - - void check_exact_bool_result(const char* op_name, bool got, bool expected, float lhs, float rhs) - { - CAPTURE(op_name); - CAPTURE(to_text(lhs)); - CAPTURE(to_text(rhs)); - CAPTURE(got); - CAPTURE(expected); - REQUIRE(got == expected); - } - - void check_frexp_result(float input) - { - int got_exp = 0; - int expected_exp = 0; - - const float got = bl::frexp(input, &got_exp); - const float expected = std::frexp(input, &expected_exp); - - INFO("frexp" - << "\n input: " << to_text(input) - << "\n input hex: " << to_text_hex(input) - << "\n got exp: " << got_exp - << "\n expected exp: " << expected_exp); - - const floating_compare_result comparison = compare_floating_result("frexp", got, expected, tolerance_spec{}); - INFO(build_comparison_message("frexp", got, expected, tolerance_spec{}, comparison)); - REQUIRE(comparison.passed); - REQUIRE(got_exp == expected_exp); - } - - void check_modf_result(float input) - { - float got_int = 0.0; - float expected_int = 0.0; - - const float got = bl::modf(input, &got_int); - const float expected = std::modf(input, &expected_int); - - INFO("modf" - << "\n input: " << to_text(input) - << "\n input hex: " << to_text_hex(input) - << "\n got int: " << to_text(got_int) - << "\n expected int: " << to_text(expected_int)); - - const floating_compare_result frac_comparison = compare_floating_result("modf.frac", got, expected, tolerance_spec{}); - INFO(build_comparison_message("modf.frac", got, expected, tolerance_spec{}, frac_comparison)); - REQUIRE(frac_comparison.passed); - - const floating_compare_result int_comparison = compare_floating_result("modf.int", got_int, expected_int, tolerance_spec{}); - INFO(build_comparison_message("modf.int", got_int, expected_int, tolerance_spec{}, int_comparison)); - REQUIRE(int_comparison.passed); - } - - void check_remquo_result(float lhs, float rhs) - { - int got_quo = 0; - - const float got = bl::remquo(lhs, rhs, &got_quo); - const exact_mod_reference expected_ref = exact_mod_reference_for(lhs, rhs); - const float expected = expected_ref.remainder; - const int expected_quo = expected_ref.quotient_bits; - - INFO("remquo" - << "\n lhs: " << to_text(lhs) - << "\n rhs: " << to_text(rhs) - << "\n lhs hex: " << to_text_hex(lhs) - << "\n rhs hex: " << to_text_hex(rhs) - << "\n got quo: " << got_quo - << "\n expected quo: " << expected_quo); - - const floating_compare_result comparison = compare_floating_result("remquo", got, expected, tolerance_spec{}); - INFO(build_comparison_message("remquo", got, expected, tolerance_spec{}, comparison)); - REQUIRE(comparison.passed); - - if (!std::isnan(expected)) - { - const int got_sign = (got_quo > 0) - (got_quo < 0); - const int expected_sign = (expected_quo > 0) - (expected_quo < 0); - const int got_low_bits = got_quo & 0x7; - const int expected_low_bits = expected_quo & 0x7; - - CAPTURE(got_sign); - CAPTURE(expected_sign); - CAPTURE(got_low_bits); - CAPTURE(expected_low_bits); - - REQUIRE(got_low_bits == expected_low_bits); - if (expected_low_bits != 0) - REQUIRE(got_sign == expected_sign); - } - } - - void print_random_run(const char* description, int count) - { - std::cout << type_label << " comparing: " << count << " " << description - << " (seed " << random_seed << ")...\n\n"; - } - - [[nodiscard]] float random_finite_for_f32(std::mt19937_64& rng) - { - std::uniform_int_distribution sign_dist(0, 1); - std::uniform_int_distribution exponent_dist(-149, 127); - std::uniform_real_distribution mantissa_dist(0.5f, 1.0f); - - float value = std::ldexp(mantissa_dist(rng), exponent_dist(rng)); - if (!std::isfinite(value) || value == 0.0f) - value = std::numeric_limits::denorm_min(); - if (sign_dist(rng) != 0) - value = -value; - - return value; - } - - [[nodiscard]] float random_signed_interval(std::mt19937_64& rng, float limit) - { - std::uniform_real_distribution dist(-limit, limit); - return dist(rng); - } - - [[nodiscard]] float random_unit_interval(std::mt19937_64& rng) - { - std::uniform_real_distribution dist(0.0, 1.0); - return dist(rng); - } - - [[nodiscard]] float random_positive(std::mt19937_64& rng) - { - float value = std::fabs(random_finite_for_f32(rng)); - if (value < std::numeric_limits::denorm_min()) - value = std::numeric_limits::denorm_min(); - return value; - } - - [[nodiscard]] float random_nonzero(std::mt19937_64& rng) - { - float value = random_finite_for_f32(rng); - if (value == 0.0) - value = 1.0; - return value; - } - - [[nodiscard]] float random_log1p_argument(std::mt19937_64& rng) - { - std::uniform_real_distribution dist(-0.95f, 16.0f); - return dist(rng); - } - - [[nodiscard]] float random_acosh_argument(std::mt19937_64& rng) - { - std::uniform_real_distribution dist(1.0f, 64.0f); - return dist(rng); - } - - [[nodiscard]] float random_atanh_argument(std::mt19937_64& rng) - { - std::uniform_real_distribution dist(-0.95f, 0.95f); - return dist(rng); - } - - [[nodiscard]] float random_pow_base(std::mt19937_64& rng) - { - std::uniform_real_distribution dist(0.125f, 8.0f); - return dist(rng); - } - - [[nodiscard]] float random_gamma_positive(std::mt19937_64& rng) - { - std::uniform_real_distribution dist(0.125f, 15.0f); - return dist(rng); - } - - [[nodiscard]] constexpr tolerance_spec exact_tol() - { - return tolerance_spec{}; - } - - [[nodiscard]] constexpr tolerance_spec close_tol(std::uint32_t ulps, float abs_tol = 0.0, float rel_tol = 0.0) - { - return tolerance_spec{ abs_tol, rel_tol, ulps }; - } - - struct default_tolerance_entry - { - const char* op_name; - std::uint32_t ulps; - float tolerance; - }; - - [[nodiscard]] tolerance_spec default_mpfr_tolerance_for_op(const char* op_name) - { - constexpr std::array tolerances{{ - { "acos", 1, 2e-7f }, - { "acosh", 1, 2e-7f }, - { "asin", 1, 2e-7f }, - { "asinh", 1, 2e-7f }, - { "atan", 1, 2e-7f }, - { "atan2", 1, 1e-7f }, - { "atanh", 1, 2e-7f }, - { "cbrt", 1, 2e-7f }, - { "cbrt.neg", 1, 2e-7f }, - { "cos", 1, 3e-8f }, - { "cosh", 1, 7e-8f }, - { "erf", 3, 2e-7f }, - { "erfc", 3, 2e-7f }, - { "exp", 1, 2e-7f }, - { "exp2", 1, 1e-7f }, - { "expm1", 1, 2e-7f }, - { "hypot", 1, 1e-7f }, - { "lgamma", 2, 2e-7f }, - { "log", 1, 2e-7f }, - { "log10", 1, 2e-7f }, - { "log1p", 1, 9e-8f }, - { "pow", 1, 9e-8f }, - { "sin", 1, 6e-8f }, - { "sinh", 1, 2e-7f }, - { "tan", 1, 2e-7f }, - { "tanh", 1, 6e-8f }, - { "tgamma", 3, 4e-7f } - }}; - - for (const auto& entry : tolerances) - { - if (op_is(op_name, entry.op_name)) - return close_tol(entry.ulps, entry.tolerance, entry.tolerance); - } - - return exact_tol(); - } - - [[nodiscard]] tolerance_spec with_default_mpfr_tolerance(const char* op_name, tolerance_spec tolerance) - { - if (tolerance.abs_tolerance != 0.0f || tolerance.rel_tolerance != 0.0f || tolerance.max_ulps != 0) - return tolerance; - - return default_mpfr_tolerance_for_op(op_name); - } - -} // namespace - -TEST_CASE("f32 matches MPFR for + - * /", "[fltx][f32][precision][arithmetic]") -{ - accuracy_report_scope report("f32 matches MPFR for + - * /"); - - constexpr std::array, 10> cases{{ - { 0.0f, 0.0f }, - { 1.0f, 2.0f }, - { -1.0f, 2.0f }, - { 1.25f, -2.5f }, - { min_subnormal, min_subnormal }, - { -min_subnormal, min_subnormal }, - { (f32)std::numbers::pi, (f32)std::numbers::e }, - { (f32)-std::numbers::pi, (f32)std::numbers::sqrt2 }, - { 1e30f, -min_subnormal }, - { -1e30f, 3.0f } - }}; - - for (const auto& [lhs, rhs] : cases) - { - check_binary_op("add", lhs, rhs, exact_tol(), - [](float a, float b) { return a + b; }, - [](float a, float b) { return a + b; }); - - check_binary_op("subtract", lhs, rhs, exact_tol(), - [](float a, float b) { return a - b; }, - [](float a, float b) { return a - b; }); - - check_binary_op("multiply", lhs, rhs, exact_tol(), - [](float a, float b) { return a * b; }, - [](float a, float b) { return a * b; }); - - if (rhs != 0.0) - { - check_binary_op("divide", lhs, rhs, exact_tol(), - [](float a, float b) { return a / b; }, - [](float a, float b) { return a / b; }); - } - } -} - -TEST_CASE("f32 random arithmetic matches MPFR", "[fltx][f32][precision][arithmetic]") -{ - accuracy_report_scope report("f32 random arithmetic matches MPFR"); - print_random_run("random arithmetic pairs", random_sample_count); - - std::mt19937_64 rng(random_seed); - - for (int i = 0; i < random_sample_count; ++i) - { - const float lhs = random_finite_for_f32(rng); - const float rhs = random_finite_for_f32(rng); - - check_binary_op("add", lhs, rhs, exact_tol(), - [](float a, float b) { return a + b; }, - [](float a, float b) { return a + b; }); - - check_binary_op("subtract", lhs, rhs, exact_tol(), - [](float a, float b) { return a - b; }, - [](float a, float b) { return a - b; }); - - check_binary_op("multiply", lhs, rhs, exact_tol(), - [](float a, float b) { return a * b; }, - [](float a, float b) { return a * b; }); - - if (rhs != 0.0) - { - check_binary_op("divide", lhs, rhs, exact_tol(), - [](float a, float b) { return a / b; }, - [](float a, float b) { return a / b; }); - } - } -} - -TEST_CASE("f32 trig matches MPFR for fixed values", "[fltx][f32][precision][transcendental][trig]") -{ - accuracy_report_scope report("f32 trig matches MPFR for fixed values"); - - constexpr std::array unary_cases{{ - -3.0, - -1.5, - -1.0, - -0.5, - -0.0, - 0.0, - 0.5, - 1.0, - 1.5, - 3.0, - std::numbers::pi / 6.0, - std::numbers::pi / 4.0, - std::numbers::pi / 3.0 - }}; - - for (float input : unary_cases) - { - check_unary_op("sin", input, exact_tol(), - [](float x) { return bl::sin(x); }, - [](float x) { return std::sin(x); }); - - check_unary_op("cos", input, exact_tol(), - [](float x) { return bl::cos(x); }, - [](float x) { return std::cos(x); }); - - check_unary_op("tan", input, exact_tol(), - [](float x) { return bl::tan(x); }, - [](float x) { return std::tan(x); }); - - check_unary_op("atan", input, exact_tol(), - [](float x) { return bl::atan(x); }, - [](float x) { return std::atan(x); }); - - if (input >= -1.0 && input <= 1.0) - { - check_unary_op("asin", input, exact_tol(), - [](float x) { return bl::asin(x); }, - [](float x) { return std::asin(x); }); - - check_unary_op("acos", input, exact_tol(), - [](float x) { return bl::acos(x); }, - [](float x) { return std::acos(x); }); - } - } - - constexpr std::array, 8> atan2_cases{{ - { 0.0f, 1.0f }, - { 1.0f, 0.0f }, - { -1.0f, 0.0f }, - { 1.0f, 1.0f }, - { -1.0f, 1.0f }, - { 1.0f, -1.0f }, - { -1.0f, -1.0f }, - { (f32)std::numbers::pi, (f32)-std::numbers::e } - }}; - - for (const auto& [y, x] : atan2_cases) - { - check_binary_op("atan2", y, x, exact_tol(), - [](float a, float b) { return bl::atan2(a, b); }, - [](float a, float b) { return std::atan2(a, b); }); - } -} - -TEST_CASE("f32 sincos overloads match sin and cos", "[fltx][f32][precision][transcendental][trig][sincos]") -{ - const float input = 0.625f; - - float s_out{}; - float c_out{}; - REQUIRE(bl::sincos(input, s_out, c_out)); - REQUIRE(s_out == bl::sin(input)); - REQUIRE(c_out == bl::cos(input)); - - sincos_pair out{}; - REQUIRE(bl::sincos(input, out)); - REQUIRE(out.s == s_out); - REQUIRE(out.c == c_out); - - const sincos_pair returned = bl::sincos(input); - REQUIRE(returned.s == s_out); - REQUIRE(returned.c == c_out); -} - -TEST_CASE("f32 trig matches MPFR on random inputs", "[fltx][f32][precision][transcendental][trig]") -{ - accuracy_report_scope report("f32 trig matches MPFR on random inputs"); - print_random_run("random trig inputs", random_sample_count); - - std::mt19937_64 rng(random_seed); - - for (int i = 0; i < random_sample_count; ++i) - { - const float trig_input = random_signed_interval(rng, 16.0); - const float tan_input = random_signed_interval(rng, 1.2); - const float unit_input = random_signed_interval(rng, 1.0); - const float y = random_signed_interval(rng, 128.0); - const float x = random_signed_interval(rng, 128.0); - - check_unary_op("sin", trig_input, exact_tol(), - [](float v) { return bl::sin(v); }, - [](float v) { return std::sin(v); }); - - check_unary_op("cos", trig_input, exact_tol(), - [](float v) { return bl::cos(v); }, - [](float v) { return std::cos(v); }); - - check_unary_op("tan", tan_input, exact_tol(), - [](float v) { return bl::tan(v); }, - [](float v) { return std::tan(v); }); - - check_unary_op("atan", random_signed_interval(rng, 128.0), exact_tol(), - [](float v) { return bl::atan(v); }, - [](float v) { return std::atan(v); }); - - check_unary_op("asin", unit_input, exact_tol(), - [](float v) { return bl::asin(v); }, - [](float v) { return std::asin(v); }); - - check_unary_op("acos", unit_input, exact_tol(), - [](float v) { return bl::acos(v); }, - [](float v) { return std::acos(v); }); - - if (x == 0.0 && y == 0.0) - continue; - - check_binary_op("atan2", y, x, exact_tol(), - [](float a, float b) { return bl::atan2(a, b); }, - [](float a, float b) { return std::atan2(a, b); }); - } -} - -TEST_CASE("f32 rounding matches MPFR references", "[fltx][f32][precision][math][rounding]") -{ - accuracy_report_scope report("f32 rounding matches MPFR references"); - - constexpr std::array fixed_inputs{{ - -3.75, - -2.5, - -1.5, - -1.0, - -0.5, - -0.25, - -0.0, - 0.0, - 0.25, - 0.5, - 1.0, - 1.5, - 2.5, - 3.75, - 123456.5, - -123456.5 - }}; - - for (float input : fixed_inputs) - { - check_unary_op("floor", input, exact_tol(), - [](float x) { return bl::floor(x); }, - [](float x) { return std::floor(x); }); - - check_unary_op("ceil", input, exact_tol(), - [](float x) { return bl::ceil(x); }, - [](float x) { return std::ceil(x); }); - - check_unary_op("trunc", input, exact_tol(), - [](float x) { return bl::trunc(x); }, - [](float x) { return std::trunc(x); }); - - check_unary_op("round", input, exact_tol(), - [](float x) { return bl::round(x); }, - [](float x) { return std::round(x); }); - - check_unary_op("nearbyint", input, exact_tol(), - [](float x) { return bl::nearbyint(x); }, - [](float x) { return std::nearbyint(x); }); - - check_unary_op("rint", input, exact_tol(), - [](float x) { return bl::rint(x); }, - [](float x) { return std::rint(x); }); - - check_exact_integer_result("lround", bl::lround(input), std::lround(input), input); - check_exact_integer_result("llround", bl::llround(input), std::llround(input), input); - check_exact_integer_result("lrint", bl::lrint(input), std::lrint(input), input); - check_exact_integer_result("llrint", bl::llrint(input), std::llrint(input), input); - } - - std::mt19937_64 rng(random_seed); - print_random_run("random rounding inputs", random_sample_count); - - for (int i = 0; i < random_sample_count; ++i) - { - const float input = random_finite_for_f32(rng); - - check_unary_op("floor", input, exact_tol(), - [](float x) { return bl::floor(x); }, - [](float x) { return std::floor(x); }); - - check_unary_op("ceil", input, exact_tol(), - [](float x) { return bl::ceil(x); }, - [](float x) { return std::ceil(x); }); - - check_unary_op("trunc", input, exact_tol(), - [](float x) { return bl::trunc(x); }, - [](float x) { return std::trunc(x); }); - - check_unary_op("round", input, exact_tol(), - [](float x) { return bl::round(x); }, - [](float x) { return std::round(x); }); - - check_unary_op("nearbyint", input, exact_tol(), - [](float x) { return bl::nearbyint(x); }, - [](float x) { return std::nearbyint(x); }); - - check_unary_op("rint", input, exact_tol(), - [](float x) { return bl::rint(x); }, - [](float x) { return std::rint(x); }); - - if (std::fabs(input) < static_cast(std::numeric_limits::max()) - 1.0) - { - check_exact_integer_result("lround", bl::lround(input), std::lround(input), input); - check_exact_integer_result("llround", bl::llround(input), std::llround(input), input); - check_exact_integer_result("lrint", bl::lrint(input), std::lrint(input), input); - check_exact_integer_result("llrint", bl::llrint(input), std::llrint(input), input); - } - } -} - -TEST_CASE("f32 exp and log families match MPFR", "[fltx][f32][precision][transcendental]") -{ - accuracy_report_scope report("f32 exp and log families match MPFR"); - - constexpr std::array exp_inputs{{ - -20.0, - -4.0, - -1.0, - -0.1, - 0.0, - 0.1, - 1.0, - 4.0, - 10.0, - 20.0 - }}; - - for (float input : exp_inputs) - { - check_unary_op("exp", input, exact_tol(), - [](float x) { return bl::exp(x); }, - [](float x) { return std::exp(x); }); - - check_unary_op("exp2", input, exact_tol(), - [](float x) { return bl::exp2(x); }, - [](float x) { return std::exp2(x); }); - - check_unary_op("expm1", input, exact_tol(), - [](float x) { return bl::expm1(x); }, - [](float x) { return std::expm1(x); }); - } - - constexpr std::array log_inputs{{ - std::numeric_limits::denorm_min(), - std::numeric_limits::min(), - 0.125, - 0.5, - 1.0, - 2.0, - 10.0, - 1e30f - }}; - - for (float input : log_inputs) - { - check_unary_op("log", input, exact_tol(), - [](float x) { return bl::log(x); }, - [](float x) { return std::log(x); }); - - check_unary_op("log2", input, exact_tol(), - [](float x) { return bl::log2(x); }, - [](float x) { return std::log2(x); }); - - check_unary_op("log10", input, exact_tol(), - [](float x) { return bl::log10(x); }, - [](float x) { return std::log10(x); }); - } - - constexpr std::array log1p_inputs{{ - -0.95, - -0.75, - -0.5, - -0.125, - 0.0, - 0.125, - 1.0, - 16.0 - }}; - - for (float input : log1p_inputs) - { - check_unary_op("log1p", input, exact_tol(), - [](float x) { return bl::log1p(x); }, - [](float x) { return std::log1p(x); }); - } - - std::mt19937_64 rng(random_seed); - print_random_run("random exp/log inputs", random_sample_count); - - for (int i = 0; i < random_sample_count; ++i) - { - const float exp_input = random_signed_interval(rng, 20.0); - const float log_input = random_positive(rng); - const float log1p_input = random_log1p_argument(rng); - - check_unary_op("exp", exp_input, exact_tol(), - [](float x) { return bl::exp(x); }, - [](float x) { return std::exp(x); }); - - check_unary_op("exp2", exp_input, exact_tol(), - [](float x) { return bl::exp2(x); }, - [](float x) { return std::exp2(x); }); - - check_unary_op("expm1", exp_input, exact_tol(), - [](float x) { return bl::expm1(x); }, - [](float x) { return std::expm1(x); }); - - check_unary_op("log", log_input, exact_tol(), - [](float x) { return bl::log(x); }, - [](float x) { return std::log(x); }); - - check_unary_op("log2", log_input, exact_tol(), - [](float x) { return bl::log2(x); }, - [](float x) { return std::log2(x); }); - - check_unary_op("log10", log_input, exact_tol(), - [](float x) { return bl::log10(x); }, - [](float x) { return std::log10(x); }); - - check_unary_op("log1p", log1p_input, exact_tol(), - [](float x) { return bl::log1p(x); }, - [](float x) { return std::log1p(x); }); - } -} - -TEST_CASE("f32 root and power functions match MPFR", "[fltx][f32][precision][math]") -{ - accuracy_report_scope report("f32 root and power functions match MPFR"); - - constexpr std::array root_inputs{{ - 0.0, - std::numeric_limits::denorm_min(), - std::numeric_limits::min(), - 0.125, - 1.0, - 2.0, - 1000.0, - 1e30f - }}; - - for (float input : root_inputs) - { - check_unary_op("sqrt", input, exact_tol(), - [](float x) { return bl::sqrt(x); }, - [](float x) { return std::sqrt(x); }); - - check_unary_op("cbrt", input, exact_tol(), - [](float x) { return bl::cbrt(x); }, - [](float x) { return std::cbrt(x); }); - - check_unary_op("cbrt.neg", -input, exact_tol(), - [](float x) { return bl::cbrt(x); }, - [](float x) { return std::cbrt(x); }); - } - - constexpr std::array, 8> hypot_cases{{ - { 0.0f, 0.0f }, - { 3.0f, 4.0f }, - { -3.0f, 4.0f }, - { min_subnormal, min_subnormal }, - { 1e30f, 1e30f }, - { 1e30f, 1.0f }, - { (f32)std::numbers::pi, (f32)std::numbers::e }, - { (f32)-std::numbers::sqrt2, (f32)std::numbers::pi } - }}; - - for (const auto& [x, y] : hypot_cases) - { - check_binary_op("hypot", x, y, exact_tol(), - [](float a, float b) { return bl::hypot(a, b); }, - [](float a, float b) { return std::hypot(a, b); }); - } - - constexpr std::array, 10> pow_cases{{ - { 2.0f, 3.0f }, - { 2.0f, -3.0f }, - { 0.5f, 0.5f }, - { 3.0f, 1.5f }, - { 10.0f, -2.0f }, - { -2.0f, 3.0f }, - { -2.0f, 4.0f }, - { -0.0f, 3.0f }, - { -0.0f, 4.0f }, - { 0.0f, 0.0f } - }}; - - for (const auto& [base, exponent] : pow_cases) - { - check_binary_op("pow", base, exponent, exact_tol(), - [](float a, float b) { return bl::pow(a, b); }, - [](float a, float b) { return std::pow(a, b); }); - } - - std::mt19937_64 rng(random_seed); - print_random_run("random root/pow inputs", random_sample_count); - - for (int i = 0; i < random_sample_count; ++i) - { - const float positive = random_positive(rng); - const float signed_input = random_signed_interval(rng, 1e12); - const float x = random_signed_interval(rng, 1e12); - const float y = random_signed_interval(rng, 1e12); - const float base = random_pow_base(rng); - const float exponent = random_signed_interval(rng, 8.0); - - check_unary_op("sqrt", positive, exact_tol(), - [](float v) { return bl::sqrt(v); }, - [](float v) { return std::sqrt(v); }); - - check_unary_op("cbrt", signed_input, exact_tol(), - [](float v) { return bl::cbrt(v); }, - [](float v) { return std::cbrt(v); }); - - check_binary_op("hypot", x, y, exact_tol(), - [](float a, float b) { return bl::hypot(a, b); }, - [](float a, float b) { return std::hypot(a, b); }); - - check_binary_op("pow", base, exponent, exact_tol(), - [](float a, float b) { return bl::pow(a, b); }, - [](float a, float b) { return std::pow(a, b); }); - } -} - -TEST_CASE("f32 fmod and remainder match exact references", "[fltx][f32][precision][math][fmod][remainder]") -{ - accuracy_report_scope report("f32 fmod and remainder match exact references"); - - constexpr std::array, 10> cases{{ - { 5.25f, 2.0f }, - { -5.25f, 2.0f }, - { 5.25f, -2.0f }, - { -5.25f, -2.0f }, - { 1e30f, 3.0f }, - { min_subnormal, 3.0f }, - { (f32)std::numbers::pi, 0.5f }, - { (f32)-std::numbers::pi, 0.5f }, - { 17.0f, 0.25f }, - { -17.0f, 0.25f } - }}; - - for (const auto& [lhs, rhs] : cases) - { - check_binary_op("fmod", lhs, rhs, exact_tol(), - [](float a, float b) { return bl::fmod(a, b); }, - [](float a, float b) { return std::fmod(a, b); }); - - check_binary_op("remainder", lhs, rhs, exact_tol(), - [](float a, float b) { return bl::remainder(a, b); }, - [](float a, float b) { return std::remainder(a, b); }); - - check_remquo_result(lhs, rhs); - } - - std::mt19937_64 rng(random_seed); - print_random_run("random fmod/remainder inputs", random_sample_count); - - for (int i = 0; i < random_sample_count; ++i) - { - const float lhs = random_finite_for_f32(rng); - const float rhs = random_nonzero(rng); - - check_binary_op("fmod", lhs, rhs, exact_tol(), - [](float a, float b) { return bl::fmod(a, b); }, - [](float a, float b) { return std::fmod(a, b); }); - - check_binary_op("remainder", lhs, rhs, exact_tol(), - [](float a, float b) { return bl::remainder(a, b); }, - [](float a, float b) { return std::remainder(a, b); }); - - check_remquo_result(lhs, rhs); - } -} - -TEST_CASE("f32 hyperbolic families match MPFR", "[fltx][f32][precision][transcendental][hyperbolic]") -{ - accuracy_report_scope report("f32 hyperbolic families match MPFR"); - - constexpr std::array fixed_inputs{{ - -8.0, - -2.0, - -0.5, - -0.0, - 0.0, - 0.5, - 2.0, - 4.0, - 8.0 - }}; - - for (float input : fixed_inputs) - { - check_unary_op("sinh", input, exact_tol(), - [](float x) { return bl::sinh(x); }, - [](float x) { return std::sinh(x); }); - - check_unary_op("cosh", input, exact_tol(), - [](float x) { return bl::cosh(x); }, - [](float x) { return std::cosh(x); }); - - check_unary_op("tanh", input, exact_tol(), - [](float x) { return bl::tanh(x); }, - [](float x) { return std::tanh(x); }); - - check_unary_op("asinh", input, exact_tol(), - [](float x) { return bl::asinh(x); }, - [](float x) { return std::asinh(x); }); - } - - constexpr std::array acosh_inputs{{ 1.0, 1.125, 1.5, 2.0, 10.0, 64.0 }}; - for (float input : acosh_inputs) - { - check_unary_op("acosh", input, exact_tol(), - [](float x) { return bl::acosh(x); }, - [](float x) { return std::acosh(x); }); - } - - constexpr std::array atanh_inputs{{ -0.95, -0.5, -0.125, -0.0, 0.0, 0.125, 0.5, 0.95 }}; - for (float input : atanh_inputs) - { - check_unary_op("atanh", input, exact_tol(), - [](float x) { return bl::atanh(x); }, - [](float x) { return std::atanh(x); }); - } - - std::mt19937_64 rng(random_seed); - print_random_run("random hyperbolic inputs", random_sample_count); - - for (int i = 0; i < random_sample_count; ++i) - { - const float moderate = random_signed_interval(rng, 8.0); - const float acosh_input = random_acosh_argument(rng); - const float atanh_input = random_atanh_argument(rng); - - check_unary_op("sinh", moderate, exact_tol(), - [](float x) { return bl::sinh(x); }, - [](float x) { return std::sinh(x); }); - - check_unary_op("cosh", moderate, exact_tol(), - [](float x) { return bl::cosh(x); }, - [](float x) { return std::cosh(x); }); - - check_unary_op("tanh", moderate, exact_tol(), - [](float x) { return bl::tanh(x); }, - [](float x) { return std::tanh(x); }); - - check_unary_op("asinh", moderate, exact_tol(), - [](float x) { return bl::asinh(x); }, - [](float x) { return std::asinh(x); }); - - check_unary_op("acosh", acosh_input, exact_tol(), - [](float x) { return bl::acosh(x); }, - [](float x) { return std::acosh(x); }); - - check_unary_op("atanh", atanh_input, exact_tol(), - [](float x) { return bl::atanh(x); }, - [](float x) { return std::atanh(x); }); - } -} - -TEST_CASE("f32 special functions match MPFR", "[fltx][f32][precision][transcendental][special]") -{ - accuracy_report_scope report("f32 special functions match MPFR"); - - constexpr std::array erf_inputs{{ - -4.0, - -2.0, - -1.0, - -0.125, - 0.0, - 0.125, - 1.0, - 2.0, - 4.0 - }}; - - for (float input : erf_inputs) - { - check_unary_op("erf", input, exact_tol(), - [](float x) { return bl::erf(x); }, - [](float x) { return std::erf(x); }); - - check_unary_op("erfc", input, exact_tol(), - [](float x) { return bl::erfc(x); }, - [](float x) { return std::erfc(x); }); - } - - constexpr std::array gamma_inputs{{ 0.125, 0.5, 1.0, 1.5, 2.5, 5.0, 10.0 }}; - for (float input : gamma_inputs) - { - check_unary_op("lgamma", input, exact_tol(), - [](float x) { return bl::lgamma(x); }, - [](float x) { return std::lgamma(x); }); - - check_unary_op("tgamma", input, exact_tol(), - [](float x) { return bl::tgamma(x); }, - [](float x) { return std::tgamma(x); }); - } - - std::mt19937_64 rng(random_seed); - print_random_run("random special-function inputs", random_sample_count); - - for (int i = 0; i < random_sample_count; ++i) - { - const float erf_input = random_signed_interval(rng, 4.0); - const float gamma_input = random_gamma_positive(rng); - - check_unary_op("erf", erf_input, exact_tol(), - [](float x) { return bl::erf(x); }, - [](float x) { return std::erf(x); }); - - check_unary_op("erfc", erf_input, exact_tol(), - [](float x) { return bl::erfc(x); }, - [](float x) { return std::erfc(x); }); - - check_unary_op("lgamma", gamma_input, exact_tol(), - [](float x) { return bl::lgamma(x); }, - [](float x) { return std::lgamma(x); }); - - check_unary_op("tgamma", gamma_input, exact_tol(), - [](float x) { return bl::tgamma(x); }, - [](float x) { return std::tgamma(x); }); - } -} - -TEST_CASE("f32 decomposition and stepping functions match reference semantics", "[fltx][f32][precision][math][decomposition]") -{ - accuracy_report_scope report("f32 decomposition and stepping functions match reference semantics"); - - constexpr std::array inputs{{ - -1e30f, - -3.5, - -0.5, - -0.0, - 0.0, - 0.5, - 3.5, - std::numeric_limits::denorm_min(), - std::numeric_limits::min(), - 1e30f - }}; - - for (float input : inputs) - { - check_unary_op("fabs", input, exact_tol(), - [](float x) { return bl::fabs(x); }, - [](float x) { return std::fabs(x); }); - - check_unary_op("abs", input, exact_tol(), - [](float x) { return bl::abs(x); }, - [](float x) { return std::fabs(x); }); - - check_unary_op("logb", input, exact_tol(), - [](float x) { return bl::logb(x); }, - [](float x) { return std::logb(x); }); - - check_frexp_result(input); - check_modf_result(input); - - check_exact_integer_result("ilogb", bl::ilogb(input), std::ilogb(input), input, 0.0); - REQUIRE(bl::signbit(input) == std::signbit(input)); - REQUIRE(bl::isnan(input) == std::isnan(input)); - REQUIRE(bl::isinf(input) == std::isinf(input)); - REQUIRE(bl::isfinite(input) == std::isfinite(input)); - REQUIRE(bl::fpclassify(input) == std::fpclassify(input)); - REQUIRE(bl::isnormal(input) == std::isnormal(input)); - } - - constexpr std::array, 8> pairs{{ - { -0.0f, 0.0f }, - { 0.0f, -0.0f }, - { 1.0f, 2.0f }, - { 2.0f, 1.0f }, - { -1.0f, 1.0f }, - { std::numeric_limits::denorm_min(), 0.0f }, - { 0.0f, std::numeric_limits::denorm_min() }, - { (f32)std::numbers::pi, (f32)-std::numbers::e } - }}; - - for (const auto& [lhs, rhs] : pairs) - { - check_unary_op("nextafter", lhs, exact_tol(), - [rhs](float x) { return bl::nextafter(x, rhs); }, - [rhs](float x) { return std::nextafter(x, rhs); }); - - check_unary_op("nexttoward", lhs, exact_tol(), - [rhs](float x) { return bl::nexttoward(x, static_cast(rhs)); }, - [rhs](float x) { return std::nexttoward(x, static_cast(rhs)); }); - - check_exact_bool_result("isunordered", bl::isunordered(lhs, rhs), std::isunordered(lhs, rhs), lhs, rhs); - check_exact_bool_result("isgreater", bl::isgreater(lhs, rhs), std::isgreater(lhs, rhs), lhs, rhs); - check_exact_bool_result("isgreaterequal", bl::isgreaterequal(lhs, rhs), std::isgreaterequal(lhs, rhs), lhs, rhs); - check_exact_bool_result("isless", bl::isless(lhs, rhs), std::isless(lhs, rhs), lhs, rhs); - check_exact_bool_result("islessequal", bl::islessequal(lhs, rhs), std::islessequal(lhs, rhs), lhs, rhs); - check_exact_bool_result("islessgreater", bl::islessgreater(lhs, rhs), std::islessgreater(lhs, rhs), lhs, rhs); - } - - constexpr std::array, 8> ldexp_cases{{ - { 0.0f, 0 }, - { -0.0f, 3 }, - { 0.5f, 1 }, - { -0.5f, 1 }, - { 1.0f, -10 }, - { (f32)std::numbers::pi, 7 }, - { min_subnormal, 64 }, - { 1e30f, -64 } - }}; - - for (const auto& [value, exponent] : ldexp_cases) - { - check_scaled_result("ldexp", value, exponent, bl::ldexp(value, exponent)); - check_scaled_result("scalbn", value, exponent, bl::scalbn(value, exponent)); - check_scaled_result("scalbln", value, exponent, bl::scalbln(value, exponent)); - } -} - -TEST_CASE("f32 utility helpers match reference semantics", "[fltx][f32][precision][math][utility]") -{ - accuracy_report_scope report("f32 utility helpers match reference semantics"); - - constexpr std::array, 10> pairs{{ - { -0.0f, 0.0f }, - { 0.0f, -0.0f }, - { 1.0f, 2.0f }, - { 2.0f, 1.0f }, - { -2.0f, 3.0f }, - { 3.0f, -2.0f }, - { (f32)std::numbers::pi, (f32)std::numbers::e }, - { (f32)-std::numbers::pi, (f32)std::numbers::e }, - { 1e30f, min_subnormal }, - { min_subnormal, 1e30f } - }}; - - for (const auto& [lhs, rhs] : pairs) - { - check_binary_op("fmin", lhs, rhs, exact_tol(), - [](float a, float b) { return bl::fmin(a, b); }, - [](float a, float b) { return std::fmin(a, b); }); - - check_binary_op("fmax", lhs, rhs, exact_tol(), - [](float a, float b) { return bl::fmax(a, b); }, - [](float a, float b) { return std::fmax(a, b); }); - - check_binary_op("fdim", lhs, rhs, exact_tol(), - [](float a, float b) { return bl::fdim(a, b); }, - [](float a, float b) { return std::fdim(a, b); }); - - check_binary_op("copysign", lhs, rhs, exact_tol(), - [](float a, float b) { return bl::copysign(a, b); }, - [](float a, float b) { return std::copysign(a, b); }); - } - - constexpr std::array, 6> fma_cases{{ - { 2.0f, 3.0f, 4.0f }, - { (f32)std::numbers::pi, (f32)std::numbers::e, (f32)-std::numbers::sqrt2 }, - { -3.0f, 4.0f, 5.0f }, - { 0.5f, -0.25f, 0.125f }, - { 6.0f, -7.0f, 8.0f } - }}; - - for (const auto& [x, y, z] : fma_cases) - { - check_fma_result(x, y, z, exact_tol()); - } -} - -TEST_CASE("f32 IEEE special values match reference semantics", "[fltx][f32][precision][math][edge]") -{ - accuracy_report_scope report("f32 IEEE special values match reference semantics"); - - const float nan = std::numeric_limits::quiet_NaN(); - const float inf = std::numeric_limits::infinity(); - const float neg_inf = -inf; - - check_unary_op("sqrt.nan", nan, exact_tol(), - [](float x) { return bl::sqrt(x); }, - [](float x) { return std::sqrt(x); }); - - check_unary_op("log.zero", 0.0f, exact_tol(), - [](float x) { return bl::log(x); }, - [](float x) { return std::log(x); }); - - check_unary_op("exp.neg_inf", neg_inf, exact_tol(), - [](float x) { return bl::exp(x); }, - [](float x) { return std::exp(x); }); - - check_binary_op("pow.neg_fractional", -1.0f, 0.5f, exact_tol(), - [](float x, float y) { return bl::pow(x, y); }, - [](float x, float y) { return std::pow(x, y); }); - - check_binary_op("fmod.inf", inf, 1.0f, exact_tol(), - [](float x, float y) { return bl::fmod(x, y); }, - [](float x, float y) { return std::fmod(x, y); }); - - check_binary_op("remainder.inf", inf, 1.0f, exact_tol(), - [](float x, float y) { return bl::remainder(x, y); }, - [](float x, float y) { return std::remainder(x, y); }); - - check_binary_op("fmin.nan_left", nan, 1.0f, exact_tol(), - [](float x, float y) { return bl::fmin(x, y); }, - [](float x, float y) { return std::fmin(x, y); }); - - check_binary_op("fmax.nan_right", 1.0f, nan, exact_tol(), - [](float x, float y) { return bl::fmax(x, y); }, - [](float x, float y) { return std::fmax(x, y); }); - - check_binary_op("copysign.neg_zero", 0.0f, -0.0f, exact_tol(), - [](float x, float y) { return bl::copysign(x, y); }, - [](float x, float y) { return std::copysign(x, y); }); - - check_unary_op("nextafter.inf_to_zero", inf, exact_tol(), - [](float x) { return bl::nextafter(x, 0.0f); }, - [](float x) { return std::nextafter(x, 0.0f); }); - - check_unary_op("nextafter.zero_to_negative", 0.0f, exact_tol(), - [](float x) { return bl::nextafter(x, -1.0f); }, - [](float x) { return std::nextafter(x, -1.0f); }); - - int got_quo = 123; - int expected_quo = 456; - const float got_remquo = bl::remquo(inf, 1.0f, &got_quo); - const float expected_remquo = std::remquo(inf, 1.0f, &expected_quo); - const floating_compare_result remquo_comparison = compare_floating_result("remquo.inf", got_remquo, expected_remquo, exact_tol()); - INFO(build_comparison_message("remquo.inf", got_remquo, expected_remquo, exact_tol(), remquo_comparison)); - REQUIRE(remquo_comparison.passed); - - check_exact_bool_result("isunordered.nan", bl::isunordered(nan, 1.0f), std::isunordered(nan, 1.0f), nan, 1.0f); - check_exact_bool_result("isless.nan", bl::isless(nan, 1.0f), std::isless(nan, 1.0f), nan, 1.0f); - check_exact_bool_result("isgreater.inf", bl::isgreater(inf, 1.0f), std::isgreater(inf, 1.0f), inf, 1.0f); - check_exact_bool_result("islessequal.neg_inf", bl::islessequal(neg_inf, 1.0f), std::islessequal(neg_inf, 1.0f), neg_inf, 1.0f); -} diff --git a/tests/precision/test_f64_math.cpp b/tests/precision/test_f64_math.cpp deleted file mode 100644 index d746261..0000000 --- a/tests/precision/test_f64_math.cpp +++ /dev/null @@ -1,2061 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -using namespace bl; - -namespace -{ - using mpfr_ref = boost::multiprecision::number< - boost::multiprecision::mpfr_float_backend<192>, - boost::multiprecision::et_off>; - using boost::multiprecision::cpp_int; - - constexpr int checked_digits = std::numeric_limits::digits10; - constexpr int printed_digits = std::numeric_limits::max_digits10; - - constexpr std::uint64_t random_seed = 1ull; - constexpr int random_sample_count = 10; - constexpr const char* type_label = "f64"; - - template - struct sincos_pair - { - T c; - T s; - }; - - struct accuracy_stats_entry - { - int samples = 0; - int passed = 0; - std::vector achieved_digits; - std::uint64_t worst_ulp = 0; - double worst_scaled_error = 0.0; - }; - - class accuracy_report_scope; - thread_local accuracy_report_scope* current_accuracy_report_scope = nullptr; - - [[nodiscard]] std::string to_text(double value) - { - if (std::isnan(value)) - return "nan"; - if (std::isinf(value)) - return std::signbit(value) ? "-inf" : "inf"; - - std::ostringstream out; - out << std::setprecision(printed_digits) << std::defaultfloat << value; - return out.str(); - } - - [[nodiscard]] std::string to_text_hex(double value) - { - std::ostringstream out; - out << std::hexfloat << value; - return out.str(); - } - - [[nodiscard]] std::string to_text(const mpfr_ref& value) - { - std::ostringstream out; - out << std::setprecision(printed_digits + 32) - << std::scientific - << value; - return out.str(); - } - - [[nodiscard]] bool op_is(const char* op_name, const char* expected) - { - return std::strcmp(op_name, expected) == 0; - } - - [[nodiscard]] bool op_starts_with(const char* op_name, const char* prefix) - { - return std::strncmp(op_name, prefix, std::strlen(prefix)) == 0; - } - - [[nodiscard]] double abs_ref(double value) - { - return value < 0.0 ? -value : value; - } - - [[nodiscard]] mpfr_ref abs_ref(const mpfr_ref& value) - { - return value < 0 ? -value : value; - } - - [[nodiscard]] mpfr_ref to_ref_exact(double value) - { - return mpfr_ref{ value }; - } - - [[nodiscard]] double round_ref_to_f64(const mpfr_ref& value) - { - return value.convert_to(); - } - - [[nodiscard]] mpfr_ref ref_floor(const mpfr_ref& value) - { - return boost::multiprecision::floor(value); - } - - [[nodiscard]] mpfr_ref ref_ceil(const mpfr_ref& value) - { - return boost::multiprecision::ceil(value); - } - - [[nodiscard]] mpfr_ref ref_trunc(const mpfr_ref& value) - { - return value < 0 ? ref_ceil(value) : ref_floor(value); - } - - [[nodiscard]] mpfr_ref ref_fmod(const mpfr_ref& x, const mpfr_ref& y) - { - return x - ref_trunc(x / y) * y; - } - - [[nodiscard]] mpfr_ref ref_round_half_away_zero(const mpfr_ref& value) - { - return value < 0 - ? ref_ceil(value - mpfr_ref{ "0.5" }) - : ref_floor(value + mpfr_ref{ "0.5" }); - } - - [[nodiscard]] mpfr_ref ref_round_to_even(const mpfr_ref& value) - { - mpfr_ref rounded = ref_floor(value + mpfr_ref{ "0.5" }); - if ((rounded - value) == mpfr_ref{ "0.5" } && ref_fmod(rounded, mpfr_ref{ 2 }) != mpfr_ref{ 0 }) - rounded -= 1; - return rounded; - } - - [[nodiscard]] mpfr_ref ref_remainder(const mpfr_ref& x, const mpfr_ref& y) - { - return x - ref_round_to_even(x / y) * y; - } - - struct exact_binary_float - { - cpp_int coeff; - int exp2 = 0; - bool neg = false; - }; - - struct exact_mod_reference - { - double fmod = 0.0; - double remainder = 0.0; - int quotient_bits = 0; - }; - - [[nodiscard]] exact_binary_float decompose_exact(double value) - { - const std::uint64_t bits = std::bit_cast(value); - const std::uint64_t frac = bits & ((std::uint64_t{ 1 } << 52) - 1u); - const std::uint32_t exp_bits = static_cast((bits >> 52) & 0x7ffu); - - exact_binary_float out; - out.neg = (bits >> 63) != 0; - if (exp_bits == 0) - { - out.coeff = frac; - out.exp2 = -1074; - } - else - { - out.coeff = (std::uint64_t{ 1 } << 52) | frac; - out.exp2 = static_cast(exp_bits) - 1023 - 52; - } - return out; - } - - [[nodiscard]] int bit_length(const cpp_int& value) - { - return value == 0 ? 0 : static_cast(boost::multiprecision::msb(value)) + 1; - } - - [[nodiscard]] cpp_int rounded_shift_right(cpp_int value, int bits) - { - if (bits <= 0) - return value; - - const bool round_bit = ((value >> (bits - 1)) & 1) != 0; - const bool sticky = bits > 1 && (value & ((cpp_int{ 1 } << (bits - 1)) - 1)) != 0; - cpp_int out = value >> bits; - if (round_bit && (sticky || (out & 1) != 0)) - ++out; - return out; - } - - [[nodiscard]] double round_exact_dyadic_to_f64(cpp_int coeff, int exp2, bool neg) - { - if (coeff == 0) - return neg ? -0.0 : 0.0; - - const int top_bit = bit_length(coeff) - 1; - int unbiased_exp = exp2 + top_bit; - if (unbiased_exp > 1023) - return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); - - if (unbiased_exp < -1022) - { - const int scale = exp2 + 1074; - cpp_int units = scale >= 0 ? (coeff << scale) : rounded_shift_right(coeff, -scale); - if (units == 0) - return neg ? -0.0 : 0.0; - const double out = std::ldexp(units.convert_to(), -1074); - return neg ? -out : out; - } - - const int shift = top_bit - 52; - cpp_int significand = shift > 0 ? rounded_shift_right(coeff, shift) : (coeff << -shift); - int result_exp = exp2 + shift; - - if (bit_length(significand) > 53) - { - significand >>= 1; - ++result_exp; - ++unbiased_exp; - if (unbiased_exp > 1023) - return neg ? -std::numeric_limits::infinity() : std::numeric_limits::infinity(); - } - - const double out = std::ldexp(significand.convert_to(), result_exp); - return neg ? -out : out; - } - - [[nodiscard]] int normalize_remquo_bits(const cpp_int& quotient, bool neg) - { - if (quotient == 0) - return 0; - - int bits = static_cast((quotient & 0x7).convert_to()); - if (bits == 0) - bits = 8; - return neg ? -bits : bits; - } - - [[nodiscard]] exact_mod_reference exact_mod_reference_for(double lhs, double rhs) - { - exact_mod_reference out; - if (std::isnan(lhs) || std::isnan(rhs) || rhs == 0.0 || std::isinf(lhs)) - { - out.fmod = std::numeric_limits::quiet_NaN(); - out.remainder = std::numeric_limits::quiet_NaN(); - return out; - } - if (std::isinf(rhs) || lhs == 0.0) - { - out.fmod = lhs; - out.remainder = lhs; - return out; - } - - exact_binary_float x = decompose_exact(std::fabs(lhs)); - exact_binary_float y = decompose_exact(std::fabs(rhs)); - const int common_exp = std::min(x.exp2, y.exp2); - - cpp_int numerator = x.coeff << (x.exp2 - common_exp); - cpp_int denominator = y.coeff << (y.exp2 - common_exp); - cpp_int quotient = numerator / denominator; - cpp_int remainder = numerator % denominator; - - const bool x_neg = std::signbit(lhs); - out.fmod = round_exact_dyadic_to_f64(remainder, common_exp, x_neg); - - bool remainder_neg = x_neg; - cpp_int nearest_quotient = quotient; - cpp_int nearest_remainder = remainder; - const cpp_int twice_remainder = remainder << 1; - if (twice_remainder > denominator || (twice_remainder == denominator && (quotient & 1) != 0)) - { - nearest_remainder = denominator - remainder; - ++nearest_quotient; - remainder_neg = !remainder_neg; - } - - out.remainder = round_exact_dyadic_to_f64(nearest_remainder, common_exp, remainder_neg); - if (out.remainder == 0.0) - out.remainder = std::copysign(0.0, lhs); - out.quotient_bits = normalize_remquo_bits(nearest_quotient, std::signbit(lhs) != std::signbit(rhs)); - return out; - } - - [[nodiscard]] const mpfr_ref& ln2_ref() - { - static const mpfr_ref value = boost::multiprecision::log(mpfr_ref{ 2 }); - return value; - } - - [[nodiscard]] const mpfr_ref& ln10_ref() - { - static const mpfr_ref value = boost::multiprecision::log(mpfr_ref{ 10 }); - return value; - } - - [[nodiscard]] mpfr_ref ref_exp2(const mpfr_ref& value) - { - return boost::multiprecision::exp(value * ln2_ref()); - } - - [[nodiscard]] mpfr_ref ref_log2(const mpfr_ref& value) - { - return boost::multiprecision::log(value) / ln2_ref(); - } - - [[nodiscard]] mpfr_ref ref_log10(const mpfr_ref& value) - { - return boost::multiprecision::log(value) / ln10_ref(); - } - - [[nodiscard]] bool ref_is_integer(const mpfr_ref& value) - { - return boost::multiprecision::floor(value) == value; - } - - [[nodiscard]] mpfr_ref ref_powi(mpfr_ref base, long long exponent) - { - if (exponent == 0) - return mpfr_ref{ 1 }; - - bool invert = exponent < 0; - unsigned long long e = invert - ? static_cast(-(exponent + 1)) + 1ull - : static_cast(exponent); - - mpfr_ref result{ 1 }; - while (e != 0) - { - if ((e & 1ull) != 0) - result *= base; - e >>= 1ull; - if (e != 0) - base *= base; - } - - return invert ? (mpfr_ref{ 1 } / result) : result; - } - - [[nodiscard]] mpfr_ref ref_pow(const mpfr_ref& base, const mpfr_ref& exponent) - { - if (base < 0 && ref_is_integer(exponent)) - { - const long long n = exponent.convert_to(); - const mpfr_ref mag = ref_powi(-base, n); - return (n & 1LL) ? -mag : mag; - } - - return boost::multiprecision::exp(exponent * boost::multiprecision::log(base)); - } - - [[nodiscard]] mpfr_ref ref_cbrt(const mpfr_ref& value) - { - const mpfr_ref third = mpfr_ref{ 1 } / mpfr_ref{ 3 }; - return value < 0 - ? -boost::multiprecision::pow(-value, third) - : boost::multiprecision::pow(value, third); - } - - [[nodiscard]] mpfr_ref ref_hypot(const mpfr_ref& x, const mpfr_ref& y) - { - return boost::multiprecision::sqrt(x * x + y * y); - } - - [[nodiscard]] mpfr_ref ref_ldexp(mpfr_ref value, int exponent) - { - if (exponent > 0) - { - for (int i = 0; i < exponent; ++i) - value *= 2; - } - else - { - for (int i = 0; i < -exponent; ++i) - value /= 2; - } - - return value; - } - - [[nodiscard]] bool try_mpfr_unary_reference(const char* op_name, double input, double& expected) - { - const mpfr_ref x = to_ref_exact(input); - mpfr_ref ref{}; - - if (op_is(op_name, "sin")) ref = boost::multiprecision::sin(x); - else if (op_is(op_name, "cos")) ref = boost::multiprecision::cos(x); - else if (op_is(op_name, "tan")) ref = boost::multiprecision::tan(x); - else if (op_is(op_name, "atan")) ref = boost::multiprecision::atan(x); - else if (op_is(op_name, "asin")) ref = boost::multiprecision::asin(x); - else if (op_is(op_name, "acos")) ref = boost::multiprecision::acos(x); - else if (op_is(op_name, "floor")) ref = ref_floor(x); - else if (op_is(op_name, "ceil")) ref = ref_ceil(x); - else if (op_is(op_name, "trunc")) ref = ref_trunc(x); - else if (op_is(op_name, "round")) ref = ref_round_half_away_zero(x); - else if (op_is(op_name, "nearbyint") || op_is(op_name, "rint")) ref = ref_round_to_even(x); - else if (op_is(op_name, "exp")) ref = boost::multiprecision::exp(x); - else if (op_is(op_name, "exp2")) ref = ref_exp2(x); - else if (op_is(op_name, "expm1")) ref = boost::multiprecision::expm1(x); - else if (op_is(op_name, "log")) ref = boost::multiprecision::log(x); - else if (op_is(op_name, "log2")) ref = ref_log2(x); - else if (op_is(op_name, "log10")) ref = ref_log10(x); - else if (op_is(op_name, "log1p")) ref = boost::multiprecision::log1p(x); - else if (op_is(op_name, "sqrt")) ref = boost::multiprecision::sqrt(x); - else if (op_starts_with(op_name, "cbrt")) - { - if (input == 0.0) - { - expected = input; - return true; - } - ref = ref_cbrt(x); - } - else if (op_is(op_name, "sinh")) ref = boost::multiprecision::sinh(x); - else if (op_is(op_name, "cosh")) ref = boost::multiprecision::cosh(x); - else if (op_is(op_name, "tanh")) ref = boost::multiprecision::tanh(x); - else if (op_is(op_name, "asinh")) ref = boost::multiprecision::asinh(x); - else if (op_is(op_name, "acosh")) ref = boost::multiprecision::acosh(x); - else if (op_is(op_name, "atanh")) ref = boost::multiprecision::atanh(x); - else if (op_is(op_name, "erf")) ref = boost::multiprecision::erf(x); - else if (op_is(op_name, "erfc")) ref = boost::multiprecision::erfc(x); - else if (op_is(op_name, "lgamma")) ref = boost::multiprecision::lgamma(x); - else if (op_is(op_name, "tgamma")) ref = boost::multiprecision::tgamma(x); - else if (op_is(op_name, "fabs") || op_is(op_name, "abs")) - { - expected = std::fabs(input); - return true; - } - else return false; - - expected = round_ref_to_f64(ref); - if (expected == 0.0 && - (op_is(op_name, "sin") || op_is(op_name, "tan") || op_is(op_name, "atan") || - op_is(op_name, "asin") || op_is(op_name, "sinh") || op_is(op_name, "tanh") || - op_is(op_name, "asinh") || op_is(op_name, "erf") || op_is(op_name, "expm1") || - op_is(op_name, "log1p") || op_is(op_name, "floor") || op_is(op_name, "ceil") || - op_is(op_name, "trunc") || op_is(op_name, "round") || op_is(op_name, "nearbyint") || - op_is(op_name, "rint"))) - { - expected = std::copysign(0.0, input); - } - return true; - } - - [[nodiscard]] bool try_mpfr_binary_reference(const char* op_name, double lhs, double rhs, double& expected) - { - const mpfr_ref a = to_ref_exact(lhs); - const mpfr_ref b = to_ref_exact(rhs); - mpfr_ref ref{}; - - if (op_is(op_name, "add")) ref = a + b; - else if (op_is(op_name, "subtract")) ref = a - b; - else if (op_is(op_name, "multiply")) ref = a * b; - else if (op_is(op_name, "divide")) ref = a / b; - else if (op_is(op_name, "atan2")) ref = boost::multiprecision::atan2(a, b); - else if (op_is(op_name, "hypot")) ref = ref_hypot(a, b); - else if (op_is(op_name, "pow")) - { - if (lhs == 0.0) - { - expected = std::pow(lhs, rhs); - return true; - } - ref = ref_pow(a, b); - } - else if (op_is(op_name, "fmod")) - { - expected = exact_mod_reference_for(lhs, rhs).fmod; - return true; - } - else if (op_is(op_name, "remainder")) - { - expected = exact_mod_reference_for(lhs, rhs).remainder; - return true; - } - else if (op_is(op_name, "fdim")) ref = (a > b) ? (a - b) : mpfr_ref{ 0 }; - else return false; - - expected = round_ref_to_f64(ref); - return true; - } - - [[nodiscard]] double achieved_digits_from_error(double diff, double scale) - { - if (diff == 0.0) - return static_cast(checked_digits); - - const double scaled_error = diff / scale; - if (!(scaled_error > 0.0)) - return static_cast(checked_digits); - - if (scaled_error >= 1.0) - return 0.0; - - const double digits = -std::log10(scaled_error); - return digits < 0.0 ? 0.0 : digits; - } - - [[nodiscard]] double normalized_accuracy_percent(double digits) - { - if (checked_digits <= 0) - return 100.0; - - double ratio = digits / static_cast(checked_digits); - if (ratio < 0.0) - ratio = 0.0; - if (ratio > 1.0) - ratio = 1.0; - return ratio * 100.0; - } - - [[nodiscard]] double median_digits(std::vector values) - { - if (values.empty()) - return 0.0; - - std::sort(values.begin(), values.end()); - const std::size_t mid = values.size() / 2; - if ((values.size() & 1u) != 0u) - return values[mid]; - - return (values[mid - 1] + values[mid]) * 0.5; - } - - [[nodiscard]] std::uint64_t ordered_bits(double value) - { - const std::uint64_t bits = std::bit_cast(value); - if ((bits & 0x8000000000000000ull) != 0ull) - return ~bits; - - return bits | 0x8000000000000000ull; - } - - [[nodiscard]] std::uint64_t ulp_distance(double a, double b) - { - const std::uint64_t oa = ordered_bits(a); - const std::uint64_t ob = ordered_bits(b); - return (oa >= ob) ? (oa - ob) : (ob - oa); - } - - class accuracy_report_scope - { - public: - explicit accuracy_report_scope(const char* test_name) - : test_name(test_name), previous(current_accuracy_report_scope) - { - current_accuracy_report_scope = this; - } - - ~accuracy_report_scope() - { - current_accuracy_report_scope = previous; - - if (stats.empty()) - return; - - const std::ios_base::fmtflags old_flags = std::cout.flags(); - const std::streamsize old_precision = std::cout.precision(); - - std::cout << "\naccuracy summary for " << test_name << ":\n"; - std::cout << std::fixed << std::setprecision(2); - - for (const auto& [op_name, entry] : stats) - { - const double median = median_digits(entry.achieved_digits); - const double worst = *std::min_element(entry.achieved_digits.begin(), entry.achieved_digits.end()); - - std::cout << " " << op_name - << ": pass " << entry.passed << "/" << entry.samples - << ", median " << median << "/" << checked_digits - << " digits (" << normalized_accuracy_percent(median) << "%)" - << ", worst " << worst << "/" << checked_digits - << " digits (" << normalized_accuracy_percent(worst) << "%)" - << ", worst ulp " << entry.worst_ulp - << ", worst scaled error " << std::scientific << entry.worst_scaled_error << std::fixed - << "\n"; - } - - std::cout.flags(old_flags); - std::cout.precision(old_precision); - } - - void record(const char* op_name, double diff, double scale, std::uint64_t ulp_diff, bool passed) - { - auto& entry = stats[op_name]; - ++entry.samples; - if (passed) - ++entry.passed; - entry.achieved_digits.push_back(achieved_digits_from_error(diff, scale)); - if (ulp_diff > entry.worst_ulp) - entry.worst_ulp = ulp_diff; - if (scale != 0.0 && std::isfinite(diff) && std::isfinite(scale)) - entry.worst_scaled_error = std::max(entry.worst_scaled_error, diff / scale); - } - - private: - std::string test_name; - accuracy_report_scope* previous = nullptr; - std::map stats; - }; - - void record_accuracy_sample(const char* op_name, double diff, double scale, std::uint64_t ulp_diff, bool passed) - { - if (current_accuracy_report_scope != nullptr) - current_accuracy_report_scope->record(op_name, diff, scale, ulp_diff, passed); - } - - struct tolerance_spec - { - double abs_tolerance = 0.0; - double rel_tolerance = 0.0; - std::uint64_t max_ulps = 0; - }; - - [[nodiscard]] tolerance_spec with_default_mpfr_tolerance(const char* op_name, tolerance_spec tolerance); - - [[nodiscard]] bool both_nan(double a, double b) - { - return std::isnan(a) && std::isnan(b); - } - - [[nodiscard]] bool same_zero_with_same_sign(double a, double b) - { - return a == 0.0 && b == 0.0 && std::signbit(a) == std::signbit(b); - } - - [[nodiscard]] bool same_infinity_with_same_sign(double a, double b) - { - return std::isinf(a) && std::isinf(b) && std::signbit(a) == std::signbit(b); - } - - [[nodiscard]] bool same_bits(double a, double b) - { - return std::bit_cast(a) == std::bit_cast(b); - } - - struct floating_compare_result - { - bool passed = false; - double signed_diff = 0.0; - double abs_diff = 0.0; - double rel_diff = 0.0; - double scale = 1.0; - double allowed_diff = 0.0; - double achieved_digits = 0.0; - std::uint64_t ulp_diff = 0; - const char* reason = ""; - }; - - [[nodiscard]] floating_compare_result compare_floating_result( - const char* op_name, - double got, - double expected, - const tolerance_spec& tolerance) - { - floating_compare_result result{}; - - if (both_nan(got, expected)) - { - result.passed = true; - result.achieved_digits = static_cast(checked_digits); - result.reason = "both NaN"; - record_accuracy_sample(op_name, 0.0, 1.0, 0, true); - return result; - } - - if (same_infinity_with_same_sign(got, expected)) - { - result.passed = true; - result.achieved_digits = static_cast(checked_digits); - result.reason = "same signed infinity"; - record_accuracy_sample(op_name, 0.0, 1.0, 0, true); - return result; - } - - if (same_zero_with_same_sign(got, expected)) - { - result.passed = true; - result.achieved_digits = static_cast(checked_digits); - result.reason = "same signed zero"; - record_accuracy_sample(op_name, 0.0, 1.0, 0, true); - return result; - } - - if (got == 0.0 && expected == 0.0) - { - result.passed = false; - result.abs_diff = 0.0; - result.scale = 1.0; - result.allowed_diff = tolerance.abs_tolerance; - result.ulp_diff = 1; - result.reason = "zero sign mismatch"; - record_accuracy_sample(op_name, 0.0, 1.0, 1, false); - return result; - } - - if (same_bits(got, expected)) - { - result.passed = true; - result.scale = std::max(1.0, abs_ref(expected)); - result.achieved_digits = static_cast(checked_digits); - result.reason = "bitwise equal"; - record_accuracy_sample(op_name, 0.0, result.scale, 0, true); - return result; - } - - if (!std::isfinite(got) || !std::isfinite(expected)) - { - result.passed = false; - result.abs_diff = std::numeric_limits::infinity(); - result.rel_diff = std::numeric_limits::infinity(); - result.scale = 1.0; - result.allowed_diff = tolerance.abs_tolerance; - result.ulp_diff = std::numeric_limits::max(); - result.reason = "non-finite mismatch"; - record_accuracy_sample(op_name, std::numeric_limits::infinity(), 1.0, std::numeric_limits::max(), false); - return result; - } - - result.signed_diff = got - expected; - result.abs_diff = abs_ref(result.signed_diff); - result.scale = abs_ref(expected); - if (result.scale < 1.0) - result.scale = 1.0; - - const double rel_based_tolerance = tolerance.rel_tolerance * result.scale; - result.allowed_diff = tolerance.abs_tolerance; - if (rel_based_tolerance > result.allowed_diff) - result.allowed_diff = rel_based_tolerance; - - if (expected == 0.0) - result.rel_diff = (result.abs_diff == 0.0) ? 0.0 : std::numeric_limits::infinity(); - else - result.rel_diff = result.abs_diff / abs_ref(expected); - - result.ulp_diff = ulp_distance(got, expected); - const bool within_diff = result.abs_diff <= result.allowed_diff; - const bool within_ulps = result.ulp_diff <= tolerance.max_ulps; - result.passed = within_diff || within_ulps; - result.achieved_digits = achieved_digits_from_error(result.abs_diff, result.scale); - result.reason = result.passed ? "within tolerance" : "outside tolerance"; - - record_accuracy_sample(op_name, result.abs_diff, result.scale, result.ulp_diff, result.passed); - return result; - } - - [[nodiscard]] std::string build_comparison_message( - const char* op_name, - double got, - double expected, - const tolerance_spec& tolerance, - const floating_compare_result& result) - { - std::ostringstream out; - out << op_name << " mismatch" - << "\n got: " << to_text(got) - << "\n expected: " << to_text(expected) - << "\n got hex: " << to_text_hex(got) - << "\n expected hex: " << to_text_hex(expected) - << "\n signed diff (got - expected): " << to_text(result.signed_diff) - << "\n abs diff: " << to_text(result.abs_diff) - << "\n relative diff: " << to_text(result.rel_diff) - << "\n allowed abs diff: " << to_text(result.allowed_diff) - << "\n ulp diff: " << result.ulp_diff - << " (limit " << tolerance.max_ulps << ")" - << "\n achieved digits: " << result.achieved_digits << "/" << checked_digits - << "\n reason: " << result.reason; - return out.str(); - } - - template - void check_unary_op( - const char* op_name, - double input, - const tolerance_spec& tolerance, - F64Op&& f64_op, - StdOp&& std_op) - { - const double got = f64_op(input); - double expected{}; - if (!try_mpfr_unary_reference(op_name, input, expected)) - expected = std_op(input); - const tolerance_spec effective_tolerance = with_default_mpfr_tolerance(op_name, tolerance); - - INFO(op_name - << "\n input: " << to_text(input) - << "\n input hex: " << to_text_hex(input)); - - const floating_compare_result comparison = compare_floating_result(op_name, got, expected, effective_tolerance); - INFO(build_comparison_message(op_name, got, expected, effective_tolerance, comparison)); - REQUIRE(comparison.passed); - } - - template - void check_binary_op( - const char* op_name, - double lhs, - double rhs, - const tolerance_spec& tolerance, - F64Op&& f64_op, - StdOp&& std_op) - { - const double got = f64_op(lhs, rhs); - double expected{}; - if (!try_mpfr_binary_reference(op_name, lhs, rhs, expected)) - expected = std_op(lhs, rhs); - const tolerance_spec effective_tolerance = with_default_mpfr_tolerance(op_name, tolerance); - - INFO(op_name - << "\n lhs: " << to_text(lhs) - << "\n rhs: " << to_text(rhs) - << "\n lhs hex: " << to_text_hex(lhs) - << "\n rhs hex: " << to_text_hex(rhs)); - - const floating_compare_result comparison = compare_floating_result(op_name, got, expected, effective_tolerance); - INFO(build_comparison_message(op_name, got, expected, effective_tolerance, comparison)); - REQUIRE(comparison.passed); - } - - void check_fma_result(double x, double y, double z, const tolerance_spec& tolerance) - { - const char* op_name = "fma"; - const double got = bl::fma(x, y, z); - const double expected = round_ref_to_f64(to_ref_exact(x) * to_ref_exact(y) + to_ref_exact(z)); - const tolerance_spec effective_tolerance = with_default_mpfr_tolerance(op_name, tolerance); - - INFO(op_name - << "\n x: " << to_text(x) - << "\n y: " << to_text(y) - << "\n z: " << to_text(z) - << "\n x hex: " << to_text_hex(x) - << "\n y hex: " << to_text_hex(y) - << "\n z hex: " << to_text_hex(z)); - - const floating_compare_result comparison = compare_floating_result(op_name, got, expected, effective_tolerance); - INFO(build_comparison_message(op_name, got, expected, effective_tolerance, comparison)); - REQUIRE(comparison.passed); - } - - void check_scaled_result(const char* op_name, double value, int exponent, double got) - { - const double expected = value == 0.0 - ? value - : round_ref_to_f64(ref_ldexp(to_ref_exact(value), exponent)); - - INFO(op_name - << "\n input: " << to_text(value) - << "\n exponent: " << exponent - << "\n input hex: " << to_text_hex(value)); - - const tolerance_spec tolerance{}; - const floating_compare_result comparison = compare_floating_result(op_name, got, expected, tolerance); - INFO(build_comparison_message(op_name, got, expected, tolerance, comparison)); - REQUIRE(comparison.passed); - } - - template - void check_exact_integer_result(const char* op_name, Int got, Int expected, double input) - { - CAPTURE(op_name); - CAPTURE(to_text(input)); - CAPTURE(got); - CAPTURE(expected); - REQUIRE(got == expected); - } - - template - void check_exact_integer_result(const char* op_name, Int got, Int expected, double lhs, double rhs) - { - CAPTURE(op_name); - CAPTURE(to_text(lhs)); - CAPTURE(to_text(rhs)); - CAPTURE(got); - CAPTURE(expected); - REQUIRE(got == expected); - } - - void check_exact_bool_result(const char* op_name, bool got, bool expected, double lhs, double rhs) - { - CAPTURE(op_name); - CAPTURE(to_text(lhs)); - CAPTURE(to_text(rhs)); - CAPTURE(got); - CAPTURE(expected); - REQUIRE(got == expected); - } - - void check_frexp_result(double input) - { - int got_exp = 0; - int expected_exp = 0; - - const double got = bl::frexp(input, &got_exp); - const double expected = std::frexp(input, &expected_exp); - - INFO("frexp" - << "\n input: " << to_text(input) - << "\n input hex: " << to_text_hex(input) - << "\n got exp: " << got_exp - << "\n expected exp: " << expected_exp); - - const floating_compare_result comparison = compare_floating_result("frexp", got, expected, tolerance_spec{}); - INFO(build_comparison_message("frexp", got, expected, tolerance_spec{}, comparison)); - REQUIRE(comparison.passed); - REQUIRE(got_exp == expected_exp); - } - - void check_modf_result(double input) - { - double got_int = 0.0; - double expected_int = 0.0; - - const double got = bl::modf(input, &got_int); - const double expected = std::modf(input, &expected_int); - - INFO("modf" - << "\n input: " << to_text(input) - << "\n input hex: " << to_text_hex(input) - << "\n got int: " << to_text(got_int) - << "\n expected int: " << to_text(expected_int)); - - const floating_compare_result frac_comparison = compare_floating_result("modf.frac", got, expected, tolerance_spec{}); - INFO(build_comparison_message("modf.frac", got, expected, tolerance_spec{}, frac_comparison)); - REQUIRE(frac_comparison.passed); - - const floating_compare_result int_comparison = compare_floating_result("modf.int", got_int, expected_int, tolerance_spec{}); - INFO(build_comparison_message("modf.int", got_int, expected_int, tolerance_spec{}, int_comparison)); - REQUIRE(int_comparison.passed); - } - - void check_remquo_result(double lhs, double rhs) - { - int got_quo = 0; - - const double got = bl::remquo(lhs, rhs, &got_quo); - const exact_mod_reference expected_ref = exact_mod_reference_for(lhs, rhs); - const double expected = expected_ref.remainder; - const int expected_quo = expected_ref.quotient_bits; - - INFO("remquo" - << "\n lhs: " << to_text(lhs) - << "\n rhs: " << to_text(rhs) - << "\n lhs hex: " << to_text_hex(lhs) - << "\n rhs hex: " << to_text_hex(rhs) - << "\n got quo: " << got_quo - << "\n expected quo: " << expected_quo); - - const floating_compare_result comparison = compare_floating_result("remquo", got, expected, tolerance_spec{}); - INFO(build_comparison_message("remquo", got, expected, tolerance_spec{}, comparison)); - REQUIRE(comparison.passed); - - if (!std::isnan(expected)) - { - const int got_sign = (got_quo > 0) - (got_quo < 0); - const int expected_sign = (expected_quo > 0) - (expected_quo < 0); - const int got_low_bits = got_quo & 0x7; - const int expected_low_bits = expected_quo & 0x7; - - CAPTURE(got_sign); - CAPTURE(expected_sign); - CAPTURE(got_low_bits); - CAPTURE(expected_low_bits); - - REQUIRE(got_low_bits == expected_low_bits); - if (expected_low_bits != 0) - REQUIRE(got_sign == expected_sign); - } - } - - void print_random_run(const char* description, int count) - { - std::cout << type_label << " comparing: " << count << " " << description - << " (seed " << random_seed << ")...\n\n"; - } - - [[nodiscard]] double random_finite_for_f64(std::mt19937_64& rng) - { - std::uniform_int_distribution sign_dist(0, 1); - std::uniform_int_distribution exponent_dist(-300, 300); - std::uniform_real_distribution mantissa_dist(0.5, 1.0); - - double value = std::ldexp(mantissa_dist(rng), exponent_dist(rng)); - if (sign_dist(rng) != 0) - value = -value; - - return value; - } - - [[nodiscard]] double random_signed_interval(std::mt19937_64& rng, double limit) - { - std::uniform_real_distribution dist(-limit, limit); - return dist(rng); - } - - [[nodiscard]] double random_unit_interval(std::mt19937_64& rng) - { - std::uniform_real_distribution dist(0.0, 1.0); - return dist(rng); - } - - [[nodiscard]] double random_positive(std::mt19937_64& rng) - { - double value = std::fabs(random_finite_for_f64(rng)); - if (value < std::numeric_limits::denorm_min()) - value = std::numeric_limits::denorm_min(); - return value; - } - - [[nodiscard]] double random_nonzero(std::mt19937_64& rng) - { - double value = random_finite_for_f64(rng); - if (value == 0.0) - value = 1.0; - return value; - } - - [[nodiscard]] double random_log1p_argument(std::mt19937_64& rng) - { - std::uniform_real_distribution dist(-0.95, 16.0); - return dist(rng); - } - - [[nodiscard]] double random_acosh_argument(std::mt19937_64& rng) - { - std::uniform_real_distribution dist(1.0, 64.0); - return dist(rng); - } - - [[nodiscard]] double random_atanh_argument(std::mt19937_64& rng) - { - std::uniform_real_distribution dist(-0.95, 0.95); - return dist(rng); - } - - [[nodiscard]] double random_pow_base(std::mt19937_64& rng) - { - std::uniform_real_distribution dist(0.125, 8.0); - return dist(rng); - } - - [[nodiscard]] double random_gamma_positive(std::mt19937_64& rng) - { - std::uniform_real_distribution dist(0.125, 15.0); - return dist(rng); - } - - [[nodiscard]] constexpr tolerance_spec exact_tol() - { - return tolerance_spec{}; - } - - [[nodiscard]] constexpr tolerance_spec close_tol(std::uint64_t ulps, double abs_tol = 0.0, double rel_tol = 0.0) - { - return tolerance_spec{ abs_tol, rel_tol, ulps }; - } - - struct default_tolerance_entry - { - const char* op_name; - std::uint64_t ulps; - double tolerance = 0.0; - }; - - [[nodiscard]] tolerance_spec default_mpfr_tolerance_for_op(const char* op_name) - { - constexpr default_tolerance_entry tolerances[] = { - { "sqrt", 2 }, - { "sin", 5 }, - { "cos", 5 }, - { "tan", 5 }, - { "asin", 5 }, - { "acos", 5 }, - { "atan", 5 }, - { "atan2", 5 }, - { "sinh", 5 }, - { "cosh", 5 }, - { "tanh", 5 }, - { "asinh", 5 }, - { "acosh", 5 }, - { "atanh", 5 }, - { "exp", 5 }, - { "exp2", 5 }, - { "expm1", 5 }, - { "log", 5 }, - { "log2", 5 }, - { "log10", 5 }, - { "log1p", 5 }, - { "cbrt", 5 }, - { "cbrt.neg", 5 }, - { "hypot", 5 }, - { "erf", 10 }, - { "erfc", 10 }, - { "pow", 64, 5e-15 }, - { "lgamma", 128, 2e-15 }, - { "tgamma", 128, 1e-14 } - }; - - for (const auto& entry : tolerances) - { - if (op_is(op_name, entry.op_name)) - return close_tol(entry.ulps, entry.tolerance, entry.tolerance); - } - - return exact_tol(); - } - - [[nodiscard]] tolerance_spec with_default_mpfr_tolerance(const char* op_name, tolerance_spec tolerance) - { - if (tolerance.abs_tolerance != 0.0 || tolerance.rel_tolerance != 0.0 || tolerance.max_ulps != 0) - return tolerance; - - return default_mpfr_tolerance_for_op(op_name); - } - -} // namespace - -TEST_CASE("f64 matches MPFR for + - * /", "[fltx][f64][precision][arithmetic]") -{ - accuracy_report_scope report("f64 matches MPFR for + - * /"); - - constexpr std::array, 10> cases{{ - { 0.0, 0.0 }, - { 1.0, 2.0 }, - { -1.0, 2.0 }, - { 1.25, -2.5 }, - { 1e-300, 1e-200 }, - { -1e-100, 1e-150 }, - { std::numbers::pi, std::numbers::e }, - { -std::numbers::pi, std::numbers::sqrt2 }, - { 1e100, -1e-100 }, - { -1e200, 3.0 } - }}; - - for (const auto& [lhs, rhs] : cases) - { - check_binary_op("add", lhs, rhs, exact_tol(), - [](double a, double b) { return a + b; }, - [](double a, double b) { return a + b; }); - - check_binary_op("subtract", lhs, rhs, exact_tol(), - [](double a, double b) { return a - b; }, - [](double a, double b) { return a - b; }); - - check_binary_op("multiply", lhs, rhs, exact_tol(), - [](double a, double b) { return a * b; }, - [](double a, double b) { return a * b; }); - - if (rhs != 0.0) - { - check_binary_op("divide", lhs, rhs, exact_tol(), - [](double a, double b) { return a / b; }, - [](double a, double b) { return a / b; }); - } - } -} - -TEST_CASE("f64 random arithmetic matches MPFR", "[fltx][f64][precision][arithmetic]") -{ - accuracy_report_scope report("f64 random arithmetic matches MPFR"); - print_random_run("random arithmetic pairs", random_sample_count); - - std::mt19937_64 rng(random_seed); - - for (int i = 0; i < random_sample_count; ++i) - { - const double lhs = random_finite_for_f64(rng); - const double rhs = random_finite_for_f64(rng); - - check_binary_op("add", lhs, rhs, exact_tol(), - [](double a, double b) { return a + b; }, - [](double a, double b) { return a + b; }); - - check_binary_op("subtract", lhs, rhs, exact_tol(), - [](double a, double b) { return a - b; }, - [](double a, double b) { return a - b; }); - - check_binary_op("multiply", lhs, rhs, exact_tol(), - [](double a, double b) { return a * b; }, - [](double a, double b) { return a * b; }); - - if (rhs != 0.0) - { - check_binary_op("divide", lhs, rhs, exact_tol(), - [](double a, double b) { return a / b; }, - [](double a, double b) { return a / b; }); - } - } -} - -TEST_CASE("f64 trig matches MPFR for fixed values", "[fltx][f64][precision][transcendental][trig]") -{ - accuracy_report_scope report("f64 trig matches MPFR for fixed values"); - - constexpr std::array unary_cases{{ - -3.0, - -1.5, - -1.0, - -0.5, - -0.0, - 0.0, - 0.5, - 1.0, - 1.5, - 3.0, - std::numbers::pi / 6.0, - std::numbers::pi / 4.0, - std::numbers::pi / 3.0 - }}; - - for (double input : unary_cases) - { - check_unary_op("sin", input, exact_tol(), - [](double x) { return bl::sin(x); }, - [](double x) { return std::sin(x); }); - - check_unary_op("cos", input, exact_tol(), - [](double x) { return bl::cos(x); }, - [](double x) { return std::cos(x); }); - - check_unary_op("tan", input, exact_tol(), - [](double x) { return bl::tan(x); }, - [](double x) { return std::tan(x); }); - - check_unary_op("atan", input, exact_tol(), - [](double x) { return bl::atan(x); }, - [](double x) { return std::atan(x); }); - - if (input >= -1.0 && input <= 1.0) - { - check_unary_op("asin", input, exact_tol(), - [](double x) { return bl::asin(x); }, - [](double x) { return std::asin(x); }); - - check_unary_op("acos", input, exact_tol(), - [](double x) { return bl::acos(x); }, - [](double x) { return std::acos(x); }); - } - } - - constexpr std::array, 8> atan2_cases{{ - { 0.0, 1.0 }, - { 1.0, 0.0 }, - { -1.0, 0.0 }, - { 1.0, 1.0 }, - { -1.0, 1.0 }, - { 1.0, -1.0 }, - { -1.0, -1.0 }, - { std::numbers::pi, -std::numbers::e } - }}; - - for (const auto& [y, x] : atan2_cases) - { - check_binary_op("atan2", y, x, exact_tol(), - [](double a, double b) { return bl::atan2(a, b); }, - [](double a, double b) { return std::atan2(a, b); }); - } -} - -TEST_CASE("f64 sincos overloads match sin and cos", "[fltx][f64][precision][transcendental][trig][sincos]") -{ - const double input = 0.625; - - double s_out{}; - double c_out{}; - REQUIRE(bl::sincos(input, s_out, c_out)); - REQUIRE(s_out == bl::sin(input)); - REQUIRE(c_out == bl::cos(input)); - - sincos_pair out{}; - REQUIRE(bl::sincos(input, out)); - REQUIRE(out.s == s_out); - REQUIRE(out.c == c_out); - - const sincos_pair returned = bl::sincos(input); - REQUIRE(returned.s == s_out); - REQUIRE(returned.c == c_out); -} - -TEST_CASE("f64 trig matches MPFR on random inputs", "[fltx][f64][precision][transcendental][trig]") -{ - accuracy_report_scope report("f64 trig matches MPFR on random inputs"); - print_random_run("random trig inputs", random_sample_count); - - std::mt19937_64 rng(random_seed); - - for (int i = 0; i < random_sample_count; ++i) - { - const double trig_input = random_signed_interval(rng, 16.0); - const double tan_input = random_signed_interval(rng, 1.2); - const double unit_input = random_signed_interval(rng, 1.0); - const double y = random_signed_interval(rng, 128.0); - const double x = random_signed_interval(rng, 128.0); - - check_unary_op("sin", trig_input, exact_tol(), - [](double v) { return bl::sin(v); }, - [](double v) { return std::sin(v); }); - - check_unary_op("cos", trig_input, exact_tol(), - [](double v) { return bl::cos(v); }, - [](double v) { return std::cos(v); }); - - check_unary_op("tan", tan_input, exact_tol(), - [](double v) { return bl::tan(v); }, - [](double v) { return std::tan(v); }); - - check_unary_op("atan", random_signed_interval(rng, 128.0), exact_tol(), - [](double v) { return bl::atan(v); }, - [](double v) { return std::atan(v); }); - - check_unary_op("asin", unit_input, exact_tol(), - [](double v) { return bl::asin(v); }, - [](double v) { return std::asin(v); }); - - check_unary_op("acos", unit_input, exact_tol(), - [](double v) { return bl::acos(v); }, - [](double v) { return std::acos(v); }); - - if (x == 0.0 && y == 0.0) - continue; - - check_binary_op("atan2", y, x, exact_tol(), - [](double a, double b) { return bl::atan2(a, b); }, - [](double a, double b) { return std::atan2(a, b); }); - } -} - -TEST_CASE("f64 rounding matches MPFR references", "[fltx][f64][precision][math][rounding]") -{ - accuracy_report_scope report("f64 rounding matches MPFR references"); - - constexpr std::array fixed_inputs{{ - -3.75, - -2.5, - -1.5, - -1.0, - -0.5, - -0.25, - -0.0, - 0.0, - 0.25, - 0.5, - 1.0, - 1.5, - 2.5, - 3.75, - 123456.5, - -123456.5 - }}; - - for (double input : fixed_inputs) - { - check_unary_op("floor", input, exact_tol(), - [](double x) { return bl::floor(x); }, - [](double x) { return std::floor(x); }); - - check_unary_op("ceil", input, exact_tol(), - [](double x) { return bl::ceil(x); }, - [](double x) { return std::ceil(x); }); - - check_unary_op("trunc", input, exact_tol(), - [](double x) { return bl::trunc(x); }, - [](double x) { return std::trunc(x); }); - - check_unary_op("round", input, exact_tol(), - [](double x) { return bl::round(x); }, - [](double x) { return std::round(x); }); - - check_unary_op("nearbyint", input, exact_tol(), - [](double x) { return bl::nearbyint(x); }, - [](double x) { return std::nearbyint(x); }); - - check_unary_op("rint", input, exact_tol(), - [](double x) { return bl::rint(x); }, - [](double x) { return std::rint(x); }); - - check_exact_integer_result("lround", bl::lround(input), std::lround(input), input); - check_exact_integer_result("llround", bl::llround(input), std::llround(input), input); - check_exact_integer_result("lrint", bl::lrint(input), std::lrint(input), input); - check_exact_integer_result("llrint", bl::llrint(input), std::llrint(input), input); - } - - std::mt19937_64 rng(random_seed); - print_random_run("random rounding inputs", random_sample_count); - - for (int i = 0; i < random_sample_count; ++i) - { - const double input = random_finite_for_f64(rng); - - check_unary_op("floor", input, exact_tol(), - [](double x) { return bl::floor(x); }, - [](double x) { return std::floor(x); }); - - check_unary_op("ceil", input, exact_tol(), - [](double x) { return bl::ceil(x); }, - [](double x) { return std::ceil(x); }); - - check_unary_op("trunc", input, exact_tol(), - [](double x) { return bl::trunc(x); }, - [](double x) { return std::trunc(x); }); - - check_unary_op("round", input, exact_tol(), - [](double x) { return bl::round(x); }, - [](double x) { return std::round(x); }); - - check_unary_op("nearbyint", input, exact_tol(), - [](double x) { return bl::nearbyint(x); }, - [](double x) { return std::nearbyint(x); }); - - check_unary_op("rint", input, exact_tol(), - [](double x) { return bl::rint(x); }, - [](double x) { return std::rint(x); }); - - if (std::fabs(input) < static_cast(std::numeric_limits::max()) - 1.0) - { - check_exact_integer_result("lround", bl::lround(input), std::lround(input), input); - check_exact_integer_result("llround", bl::llround(input), std::llround(input), input); - check_exact_integer_result("lrint", bl::lrint(input), std::lrint(input), input); - check_exact_integer_result("llrint", bl::llrint(input), std::llrint(input), input); - } - } -} - -TEST_CASE("f64 exp and log families match MPFR", "[fltx][f64][precision][transcendental]") -{ - accuracy_report_scope report("f64 exp and log families match MPFR"); - - constexpr std::array exp_inputs{{ - -20.0, - -4.0, - -1.0, - -0.1, - 0.0, - 0.1, - 1.0, - 4.0, - 10.0, - 20.0 - }}; - - for (double input : exp_inputs) - { - check_unary_op("exp", input, exact_tol(), - [](double x) { return bl::exp(x); }, - [](double x) { return std::exp(x); }); - - check_unary_op("exp2", input, exact_tol(), - [](double x) { return bl::exp2(x); }, - [](double x) { return std::exp2(x); }); - - check_unary_op("expm1", input, exact_tol(), - [](double x) { return bl::expm1(x); }, - [](double x) { return std::expm1(x); }); - } - - constexpr std::array log_inputs{{ - std::numeric_limits::denorm_min(), - std::numeric_limits::min(), - 0.125, - 0.5, - 1.0, - 2.0, - 10.0, - 1e100 - }}; - - for (double input : log_inputs) - { - check_unary_op("log", input, exact_tol(), - [](double x) { return bl::log(x); }, - [](double x) { return std::log(x); }); - - check_unary_op("log2", input, exact_tol(), - [](double x) { return bl::log2(x); }, - [](double x) { return std::log2(x); }); - - check_unary_op("log10", input, exact_tol(), - [](double x) { return bl::log10(x); }, - [](double x) { return std::log10(x); }); - } - - constexpr std::array log1p_inputs{{ - -0.95, - -0.75, - -0.5, - -0.125, - 0.0, - 0.125, - 1.0, - 16.0 - }}; - - for (double input : log1p_inputs) - { - check_unary_op("log1p", input, exact_tol(), - [](double x) { return bl::log1p(x); }, - [](double x) { return std::log1p(x); }); - } - - std::mt19937_64 rng(random_seed); - print_random_run("random exp/log inputs", random_sample_count); - - for (int i = 0; i < random_sample_count; ++i) - { - const double exp_input = random_signed_interval(rng, 20.0); - const double log_input = random_positive(rng); - const double log1p_input = random_log1p_argument(rng); - - check_unary_op("exp", exp_input, exact_tol(), - [](double x) { return bl::exp(x); }, - [](double x) { return std::exp(x); }); - - check_unary_op("exp2", exp_input, exact_tol(), - [](double x) { return bl::exp2(x); }, - [](double x) { return std::exp2(x); }); - - check_unary_op("expm1", exp_input, exact_tol(), - [](double x) { return bl::expm1(x); }, - [](double x) { return std::expm1(x); }); - - check_unary_op("log", log_input, exact_tol(), - [](double x) { return bl::log(x); }, - [](double x) { return std::log(x); }); - - check_unary_op("log2", log_input, exact_tol(), - [](double x) { return bl::log2(x); }, - [](double x) { return std::log2(x); }); - - check_unary_op("log10", log_input, exact_tol(), - [](double x) { return bl::log10(x); }, - [](double x) { return std::log10(x); }); - - check_unary_op("log1p", log1p_input, exact_tol(), - [](double x) { return bl::log1p(x); }, - [](double x) { return std::log1p(x); }); - } -} - -TEST_CASE("f64 root and power functions match MPFR", "[fltx][f64][precision][math]") -{ - accuracy_report_scope report("f64 root and power functions match MPFR"); - - constexpr std::array root_inputs{{ - 0.0, - std::numeric_limits::denorm_min(), - std::numeric_limits::min(), - 0.125, - 1.0, - 2.0, - 1000.0, - 1e100 - }}; - - for (double input : root_inputs) - { - check_unary_op("sqrt", input, exact_tol(), - [](double x) { return bl::sqrt(x); }, - [](double x) { return std::sqrt(x); }); - - check_unary_op("cbrt", input, exact_tol(), - [](double x) { return bl::cbrt(x); }, - [](double x) { return std::cbrt(x); }); - - check_unary_op("cbrt.neg", -input, exact_tol(), - [](double x) { return bl::cbrt(x); }, - [](double x) { return std::cbrt(x); }); - } - - constexpr std::array, 8> hypot_cases{{ - { 0.0, 0.0 }, - { 3.0, 4.0 }, - { -3.0, 4.0 }, - { 1e-200, 1e-200 }, - { 1e100, 1e100 }, - { 1e200, 1.0 }, - { std::numbers::pi, std::numbers::e }, - { -std::numbers::sqrt2, std::numbers::pi } - }}; - - for (const auto& [x, y] : hypot_cases) - { - check_binary_op("hypot", x, y, exact_tol(), - [](double a, double b) { return bl::hypot(a, b); }, - [](double a, double b) { return std::hypot(a, b); }); - } - - constexpr std::array, 10> pow_cases{{ - { 2.0, 3.0 }, - { 2.0, -3.0 }, - { 0.5, 0.5 }, - { 3.0, 1.5 }, - { 10.0, -2.0 }, - { -2.0, 3.0 }, - { -2.0, 4.0 }, - { -0.0, 3.0 }, - { -0.0, 4.0 }, - { 0.0, 0.0 } - }}; - - for (const auto& [base, exponent] : pow_cases) - { - check_binary_op("pow", base, exponent, exact_tol(), - [](double a, double b) { return bl::pow(a, b); }, - [](double a, double b) { return std::pow(a, b); }); - } - - std::mt19937_64 rng(random_seed); - print_random_run("random root/pow inputs", random_sample_count); - - for (int i = 0; i < random_sample_count; ++i) - { - const double positive = random_positive(rng); - const double signed_input = random_signed_interval(rng, 1e12); - const double x = random_signed_interval(rng, 1e12); - const double y = random_signed_interval(rng, 1e12); - const double base = random_pow_base(rng); - const double exponent = random_signed_interval(rng, 8.0); - - check_unary_op("sqrt", positive, exact_tol(), - [](double v) { return bl::sqrt(v); }, - [](double v) { return std::sqrt(v); }); - - check_unary_op("cbrt", signed_input, exact_tol(), - [](double v) { return bl::cbrt(v); }, - [](double v) { return std::cbrt(v); }); - - check_binary_op("hypot", x, y, exact_tol(), - [](double a, double b) { return bl::hypot(a, b); }, - [](double a, double b) { return std::hypot(a, b); }); - - check_binary_op("pow", base, exponent, exact_tol(), - [](double a, double b) { return bl::pow(a, b); }, - [](double a, double b) { return std::pow(a, b); }); - } -} - -TEST_CASE("f64 fmod and remainder match exact references", "[fltx][f64][precision][math][fmod][remainder]") -{ - accuracy_report_scope report("f64 fmod and remainder match exact references"); - - constexpr std::array, 10> cases{{ - { 5.25, 2.0 }, - { -5.25, 2.0 }, - { 5.25, -2.0 }, - { -5.25, -2.0 }, - { 1e100, 3.0 }, - { 1e-100, 3.0 }, - { std::numbers::pi, 0.5 }, - { -std::numbers::pi, 0.5 }, - { 17.0, 0.25 }, - { -17.0, 0.25 } - }}; - - for (const auto& [lhs, rhs] : cases) - { - check_binary_op("fmod", lhs, rhs, exact_tol(), - [](double a, double b) { return bl::fmod(a, b); }, - [](double a, double b) { return std::fmod(a, b); }); - - check_binary_op("remainder", lhs, rhs, exact_tol(), - [](double a, double b) { return bl::remainder(a, b); }, - [](double a, double b) { return std::remainder(a, b); }); - - check_remquo_result(lhs, rhs); - } - - std::mt19937_64 rng(random_seed); - print_random_run("random fmod/remainder inputs", random_sample_count); - - for (int i = 0; i < random_sample_count; ++i) - { - const double lhs = random_finite_for_f64(rng); - const double rhs = random_nonzero(rng); - - check_binary_op("fmod", lhs, rhs, exact_tol(), - [](double a, double b) { return bl::fmod(a, b); }, - [](double a, double b) { return std::fmod(a, b); }); - - check_binary_op("remainder", lhs, rhs, exact_tol(), - [](double a, double b) { return bl::remainder(a, b); }, - [](double a, double b) { return std::remainder(a, b); }); - - check_remquo_result(lhs, rhs); - } -} - -TEST_CASE("f64 hyperbolic families match MPFR", "[fltx][f64][precision][transcendental][hyperbolic]") -{ - accuracy_report_scope report("f64 hyperbolic families match MPFR"); - - constexpr std::array fixed_inputs{{ - -8.0, - -2.0, - -0.5, - -0.0, - 0.0, - 0.5, - 2.0, - 4.0, - 8.0 - }}; - - for (double input : fixed_inputs) - { - check_unary_op("sinh", input, exact_tol(), - [](double x) { return bl::sinh(x); }, - [](double x) { return std::sinh(x); }); - - check_unary_op("cosh", input, exact_tol(), - [](double x) { return bl::cosh(x); }, - [](double x) { return std::cosh(x); }); - - check_unary_op("tanh", input, exact_tol(), - [](double x) { return bl::tanh(x); }, - [](double x) { return std::tanh(x); }); - - check_unary_op("asinh", input, exact_tol(), - [](double x) { return bl::asinh(x); }, - [](double x) { return std::asinh(x); }); - } - - constexpr std::array acosh_inputs{{ 1.0, 1.125, 1.5, 2.0, 10.0, 64.0 }}; - for (double input : acosh_inputs) - { - check_unary_op("acosh", input, exact_tol(), - [](double x) { return bl::acosh(x); }, - [](double x) { return std::acosh(x); }); - } - - constexpr std::array atanh_inputs{{ -0.95, -0.5, -0.125, -0.0, 0.0, 0.125, 0.5, 0.95 }}; - for (double input : atanh_inputs) - { - check_unary_op("atanh", input, exact_tol(), - [](double x) { return bl::atanh(x); }, - [](double x) { return std::atanh(x); }); - } - - std::mt19937_64 rng(random_seed); - print_random_run("random hyperbolic inputs", random_sample_count); - - for (int i = 0; i < random_sample_count; ++i) - { - const double moderate = random_signed_interval(rng, 8.0); - const double acosh_input = random_acosh_argument(rng); - const double atanh_input = random_atanh_argument(rng); - - check_unary_op("sinh", moderate, exact_tol(), - [](double x) { return bl::sinh(x); }, - [](double x) { return std::sinh(x); }); - - check_unary_op("cosh", moderate, exact_tol(), - [](double x) { return bl::cosh(x); }, - [](double x) { return std::cosh(x); }); - - check_unary_op("tanh", moderate, exact_tol(), - [](double x) { return bl::tanh(x); }, - [](double x) { return std::tanh(x); }); - - check_unary_op("asinh", moderate, exact_tol(), - [](double x) { return bl::asinh(x); }, - [](double x) { return std::asinh(x); }); - - check_unary_op("acosh", acosh_input, exact_tol(), - [](double x) { return bl::acosh(x); }, - [](double x) { return std::acosh(x); }); - - check_unary_op("atanh", atanh_input, exact_tol(), - [](double x) { return bl::atanh(x); }, - [](double x) { return std::atanh(x); }); - } -} - -TEST_CASE("f64 special functions match MPFR", "[fltx][f64][precision][transcendental][special]") -{ - accuracy_report_scope report("f64 special functions match MPFR"); - - constexpr std::array erf_inputs{{ - -4.0, - -2.0, - -1.0, - -0.125, - 0.0, - 0.125, - 1.0, - 2.0, - 4.0 - }}; - - for (double input : erf_inputs) - { - check_unary_op("erf", input, exact_tol(), - [](double x) { return bl::erf(x); }, - [](double x) { return std::erf(x); }); - - check_unary_op("erfc", input, exact_tol(), - [](double x) { return bl::erfc(x); }, - [](double x) { return std::erfc(x); }); - } - - constexpr std::array gamma_inputs{{ 0.125, 0.5, 1.0, 1.5, 2.5, 5.0, 10.0 }}; - for (double input : gamma_inputs) - { - check_unary_op("lgamma", input, exact_tol(), - [](double x) { return bl::lgamma(x); }, - [](double x) { return std::lgamma(x); }); - - check_unary_op("tgamma", input, exact_tol(), - [](double x) { return bl::tgamma(x); }, - [](double x) { return std::tgamma(x); }); - } - - std::mt19937_64 rng(random_seed); - print_random_run("random special-function inputs", random_sample_count); - - for (int i = 0; i < random_sample_count; ++i) - { - const double erf_input = random_signed_interval(rng, 4.0); - const double gamma_input = random_gamma_positive(rng); - - check_unary_op("erf", erf_input, exact_tol(), - [](double x) { return bl::erf(x); }, - [](double x) { return std::erf(x); }); - - check_unary_op("erfc", erf_input, exact_tol(), - [](double x) { return bl::erfc(x); }, - [](double x) { return std::erfc(x); }); - - check_unary_op("lgamma", gamma_input, exact_tol(), - [](double x) { return bl::lgamma(x); }, - [](double x) { return std::lgamma(x); }); - - check_unary_op("tgamma", gamma_input, exact_tol(), - [](double x) { return bl::tgamma(x); }, - [](double x) { return std::tgamma(x); }); - } -} - -TEST_CASE("f64 decomposition and stepping functions match reference semantics", "[fltx][f64][precision][math][decomposition]") -{ - accuracy_report_scope report("f64 decomposition and stepping functions match reference semantics"); - - constexpr std::array inputs{{ - -1e200, - -3.5, - -0.5, - -0.0, - 0.0, - 0.5, - 3.5, - std::numeric_limits::denorm_min(), - std::numeric_limits::min(), - 1e200 - }}; - - for (double input : inputs) - { - check_unary_op("fabs", input, exact_tol(), - [](double x) { return bl::fabs(x); }, - [](double x) { return std::fabs(x); }); - - check_unary_op("abs", input, exact_tol(), - [](double x) { return bl::abs(x); }, - [](double x) { return std::fabs(x); }); - - check_unary_op("logb", input, exact_tol(), - [](double x) { return bl::logb(x); }, - [](double x) { return std::logb(x); }); - - check_frexp_result(input); - check_modf_result(input); - - check_exact_integer_result("ilogb", bl::ilogb(input), std::ilogb(input), input, 0.0); - REQUIRE(bl::signbit(input) == std::signbit(input)); - REQUIRE(bl::isnan(input) == std::isnan(input)); - REQUIRE(bl::isinf(input) == std::isinf(input)); - REQUIRE(bl::isfinite(input) == std::isfinite(input)); - REQUIRE(bl::fpclassify(input) == std::fpclassify(input)); - REQUIRE(bl::isnormal(input) == std::isnormal(input)); - } - - constexpr std::array, 8> pairs{{ - { -0.0, 0.0 }, - { 0.0, -0.0 }, - { 1.0, 2.0 }, - { 2.0, 1.0 }, - { -1.0, 1.0 }, - { 1e-300, 0.0 }, - { 0.0, 1e-300 }, - { std::numbers::pi, -std::numbers::e } - }}; - - for (const auto& [lhs, rhs] : pairs) - { - check_unary_op("nextafter", lhs, exact_tol(), - [rhs](double x) { return bl::nextafter(x, rhs); }, - [rhs](double x) { return std::nextafter(x, rhs); }); - - check_unary_op("nexttoward", lhs, exact_tol(), - [rhs](double x) { return bl::nexttoward(x, static_cast(rhs)); }, - [rhs](double x) { return std::nexttoward(x, static_cast(rhs)); }); - - check_exact_bool_result("isunordered", bl::isunordered(lhs, rhs), std::isunordered(lhs, rhs), lhs, rhs); - check_exact_bool_result("isgreater", bl::isgreater(lhs, rhs), std::isgreater(lhs, rhs), lhs, rhs); - check_exact_bool_result("isgreaterequal", bl::isgreaterequal(lhs, rhs), std::isgreaterequal(lhs, rhs), lhs, rhs); - check_exact_bool_result("isless", bl::isless(lhs, rhs), std::isless(lhs, rhs), lhs, rhs); - check_exact_bool_result("islessequal", bl::islessequal(lhs, rhs), std::islessequal(lhs, rhs), lhs, rhs); - check_exact_bool_result("islessgreater", bl::islessgreater(lhs, rhs), std::islessgreater(lhs, rhs), lhs, rhs); - } - - constexpr std::array, 8> ldexp_cases{{ - { 0.0, 0 }, - { -0.0, 3 }, - { 0.5, 1 }, - { -0.5, 1 }, - { 1.0, -10 }, - { std::numbers::pi, 7 }, - { 1e-200, 64 }, - { 1e200, -64 } - }}; - - for (const auto& [value, exponent] : ldexp_cases) - { - check_scaled_result("ldexp", value, exponent, bl::ldexp(value, exponent)); - check_scaled_result("scalbn", value, exponent, bl::scalbn(value, exponent)); - check_scaled_result("scalbln", value, exponent, bl::scalbln(value, exponent)); - } -} - -TEST_CASE("f64 utility helpers match reference semantics", "[fltx][f64][precision][math][utility]") -{ - accuracy_report_scope report("f64 utility helpers match reference semantics"); - - constexpr std::array, 10> pairs{{ - { -0.0, 0.0 }, - { 0.0, -0.0 }, - { 1.0, 2.0 }, - { 2.0, 1.0 }, - { -2.0, 3.0 }, - { 3.0, -2.0 }, - { std::numbers::pi, std::numbers::e }, - { -std::numbers::pi, std::numbers::e }, - { 1e200, 1e-200 }, - { 1e-200, 1e200 } - }}; - - for (const auto& [lhs, rhs] : pairs) - { - check_binary_op("fmin", lhs, rhs, exact_tol(), - [](double a, double b) { return bl::fmin(a, b); }, - [](double a, double b) { return std::fmin(a, b); }); - - check_binary_op("fmax", lhs, rhs, exact_tol(), - [](double a, double b) { return bl::fmax(a, b); }, - [](double a, double b) { return std::fmax(a, b); }); - - check_binary_op("fdim", lhs, rhs, exact_tol(), - [](double a, double b) { return bl::fdim(a, b); }, - [](double a, double b) { return std::fdim(a, b); }); - - check_binary_op("copysign", lhs, rhs, exact_tol(), - [](double a, double b) { return bl::copysign(a, b); }, - [](double a, double b) { return std::copysign(a, b); }); - } - - constexpr std::array, 6> fma_cases{{ - { 2.0, 3.0, 4.0 }, - { std::numbers::pi, std::numbers::e, -std::numbers::sqrt2 }, - { -3.0, 4.0, 5.0 }, - { 0.5, -0.25, 0.125 }, - { 6.0, -7.0, 8.0 } - }}; - - for (const auto& [x, y, z] : fma_cases) - { - check_fma_result(x, y, z, exact_tol()); - } -} - -TEST_CASE("f64 IEEE special values match reference semantics", "[fltx][f64][precision][math][edge]") -{ - accuracy_report_scope report("f64 IEEE special values match reference semantics"); - - const double nan = std::numeric_limits::quiet_NaN(); - const double inf = std::numeric_limits::infinity(); - const double neg_inf = -inf; - - check_unary_op("sqrt.nan", nan, exact_tol(), - [](double x) { return bl::sqrt(x); }, - [](double x) { return std::sqrt(x); }); - - check_unary_op("log.zero", 0.0, exact_tol(), - [](double x) { return bl::log(x); }, - [](double x) { return std::log(x); }); - - check_unary_op("exp.neg_inf", neg_inf, exact_tol(), - [](double x) { return bl::exp(x); }, - [](double x) { return std::exp(x); }); - - check_binary_op("pow.neg_fractional", -1.0, 0.5, exact_tol(), - [](double x, double y) { return bl::pow(x, y); }, - [](double x, double y) { return std::pow(x, y); }); - - check_binary_op("fmod.inf", inf, 1.0, exact_tol(), - [](double x, double y) { return bl::fmod(x, y); }, - [](double x, double y) { return std::fmod(x, y); }); - - check_binary_op("remainder.inf", inf, 1.0, exact_tol(), - [](double x, double y) { return bl::remainder(x, y); }, - [](double x, double y) { return std::remainder(x, y); }); - - check_binary_op("fmin.nan_left", nan, 1.0, exact_tol(), - [](double x, double y) { return bl::fmin(x, y); }, - [](double x, double y) { return std::fmin(x, y); }); - - check_binary_op("fmax.nan_right", 1.0, nan, exact_tol(), - [](double x, double y) { return bl::fmax(x, y); }, - [](double x, double y) { return std::fmax(x, y); }); - - check_binary_op("copysign.neg_zero", 0.0, -0.0, exact_tol(), - [](double x, double y) { return bl::copysign(x, y); }, - [](double x, double y) { return std::copysign(x, y); }); - - check_unary_op("nextafter.inf_to_zero", inf, exact_tol(), - [](double x) { return bl::nextafter(x, 0.0); }, - [](double x) { return std::nextafter(x, 0.0); }); - - check_unary_op("nextafter.zero_to_negative", 0.0, exact_tol(), - [](double x) { return bl::nextafter(x, -1.0); }, - [](double x) { return std::nextafter(x, -1.0); }); - - int got_quo = 123; - int expected_quo = 456; - const double got_remquo = bl::remquo(inf, 1.0, &got_quo); - const double expected_remquo = std::remquo(inf, 1.0, &expected_quo); - const floating_compare_result remquo_comparison = compare_floating_result("remquo.inf", got_remquo, expected_remquo, exact_tol()); - INFO(build_comparison_message("remquo.inf", got_remquo, expected_remquo, exact_tol(), remquo_comparison)); - REQUIRE(remquo_comparison.passed); - - check_exact_bool_result("isunordered.nan", bl::isunordered(nan, 1.0), std::isunordered(nan, 1.0), nan, 1.0); - check_exact_bool_result("isless.nan", bl::isless(nan, 1.0), std::isless(nan, 1.0), nan, 1.0); - check_exact_bool_result("isgreater.inf", bl::isgreater(inf, 1.0), std::isgreater(inf, 1.0), inf, 1.0); - check_exact_bool_result("islessequal.neg_inf", bl::islessequal(neg_inf, 1.0), std::islessequal(neg_inf, 1.0), neg_inf, 1.0); -} diff --git a/tests/precision/test_mpfr_precision_sanity.cpp b/tests/precision/test_mpfr_precision_sanity.cpp deleted file mode 100644 index cddd9b0..0000000 --- a/tests/precision/test_mpfr_precision_sanity.cpp +++ /dev/null @@ -1,353 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace -{ - template - using mpfr_number = boost::multiprecision::number< - boost::multiprecision::mpfr_float_backend - >; - - struct scan_result - { - int mpfr_digits10 = 0; - long double matching_digits = 0.0L; - bool found = false; - }; - - template - std::string precise_string(const T& value) - { - constexpr int precision = std::numeric_limits::max_digits10 > 0 - ? std::numeric_limits::max_digits10 - : std::numeric_limits::digits10 + 8; - - std::ostringstream out; - out << std::setprecision(precision) << value; - return out.str(); - } - - template - Ref parse_as_ref(const T& value) - { - return Ref{ precise_string(value) }; - } - - template - long double relative_matching_digits(const Ref& candidate, const Ref& reference) - { - using boost::multiprecision::abs; - - Ref error = abs(candidate - reference); - if (error == 0) - return std::numeric_limits::infinity(); - - Ref scale = abs(reference); - if (scale != 0) - error /= scale; - - const long double relative_error = error.template convert_to(); - if (relative_error == 0.0L) - return std::numeric_limits::infinity(); - - const long double digits = -std::log10(relative_error); - return digits > 0.0L ? digits : 0.0L; - } - - struct sqrt_op - { - static constexpr const char* name = "sqrt"; - - template - static T input_a() - { - return T{ 1 } + T{ 1 } / T{ 7 } + T{ 2 } / T{ 37 }; - } - - template - static T apply() - { - using std::sqrt; - return sqrt(input_a()); - } - }; - - struct sin_op - { - static constexpr const char* name = "sin"; - - template - static T input_a() - { - return T{ 1 } / T{ 7 } + T{ 2 } / T{ 37 } + T{ 3 } / T{ 101 }; - } - - template - static T apply() - { - using std::sin; - return sin(input_a()); - } - }; - - struct exp_op - { - static constexpr const char* name = "exp"; - - template - static T input_a() - { - return T{ 1 } / T{ 7 } - T{ 2 } / T{ 37 }; - } - - template - static T apply() - { - using std::exp; - return exp(input_a()); - } - }; - - struct log_op - { - static constexpr const char* name = "log"; - - template - static T input_a() - { - return T{ 1 } + T{ 1 } / T{ 7 } + T{ 2 } / T{ 37 }; - } - - template - static T apply() - { - using std::log; - return log(input_a()); - } - }; - - struct pow_op - { - static constexpr const char* name = "pow"; - - template - static T input_a() - { - return T{ 1 } + T{ 1 } / T{ 7 } + T{ 2 } / T{ 37 }; - } - - template - static T input_b() - { - return T{ 1 } + T{ 3 } / T{ 19 }; - } - - template - static T apply() - { - using std::pow; - return pow(input_a(), input_b()); - } - }; - - struct atan2_op - { - static constexpr const char* name = "atan2"; - - template - static T input_a() - { - return T{ 1 } / T{ 7 } + T{ 2 } / T{ 37 }; - } - - template - static T input_b() - { - return T{ 1 } + T{ 3 } / T{ 19 }; - } - - template - static T apply() - { - using std::atan2; - return atan2(input_a(), input_b()); - } - }; - - struct erf_op - { - static constexpr const char* name = "erf"; - - template - static T input_a() - { - return T{ 1 } / T{ 7 } + T{ 2 } / T{ 37 }; - } - - template - static T apply() - { - using std::erf; - return erf(input_a()); - } - }; - - struct lgamma_op - { - static constexpr const char* name = "lgamma"; - - template - static T input_a() - { - return T{ 2 } + T{ 1 } / T{ 7 } + T{ 2 } / T{ 37 }; - } - - template - static T apply() - { - using std::lgamma; - return lgamma(input_a()); - } - }; - - struct fmod_op - { - static constexpr const char* name = "fmod"; - - template - static T input_a() - { - return T{ 17 } + T{ 1 } / T{ 7 } + T{ 2 } / T{ 37 }; - } - - template - static T input_b() - { - return T{ 3 } + T{ 1 } / T{ 11 }; - } - - template - static T apply() - { - using std::fmod; - return fmod(input_a(), input_b()); - } - }; - - template - scan_result scan_mpfr_digits10(long double target_matching_digits) - { - using mpfr_t = mpfr_number; - using ref_t = mpfr_number; - - const ref_t reference_y = Op::template apply(); - const ref_t candidate_y = ref_t{ Op::template apply() }; - - const long double mpfr_matching_digits = - relative_matching_digits(candidate_y, reference_y); - - if (mpfr_matching_digits + 0.25L >= target_matching_digits) - return { N, mpfr_matching_digits, true }; - - if constexpr (N < MaxDigits10) - { - return scan_mpfr_digits10( - target_matching_digits - ); - } - else - { - return { N, mpfr_matching_digits, false }; - } - } - - template - void check_precision_case(const char* float_name) - { - constexpr int benchmark_digits10 = std::numeric_limits::max_digits10; - constexpr int ref_digits10 = benchmark_digits10 + 80; - - using ref_t = mpfr_number; - - const ref_t reference_y = Op::template apply(); - const ref_t fltx_y = parse_as_ref(Op::template apply()); - - const long double fltx_matching_digits = - relative_matching_digits(fltx_y, reference_y); - - const scan_result result = - scan_mpfr_digits10( - fltx_matching_digits - ); - - const long double matching_gap = - fltx_matching_digits - result.matching_digits; - - std::cout - << float_name << " / " << Op::name << '\n' - << " benchmark mpfr digits10: " << benchmark_digits10 << '\n' - << " fltx matching digits vs high MPFR: " - << std::fixed << std::setprecision(2) << fltx_matching_digits << '\n'; - - if (result.found) - { - std::cout - << " first mpfr_float_backend match: N = " - << result.mpfr_digits10 << '\n' - << " MPFR matching digits at that N: " - << result.matching_digits << "\n\n"; - } - else - { - std::cout - << " no MPFR N <= digits10 matched fltx precision\n" - << " best scanned N: " - << result.mpfr_digits10 << '\n' - << " MPFR matching digits at best N: " - << result.matching_digits << "\n\n"; - } - - INFO("float type: " << float_name); - INFO("operation: " << Op::name); - INFO("fltx matching digits: " << fltx_matching_digits); - INFO("best mpfr N: " << result.mpfr_digits10); - INFO("best mpfr matching digits: " << result.matching_digits); - INFO("matching gap: " << matching_gap); - - CHECK(result.mpfr_digits10 <= benchmark_digits10); - CHECK(matching_gap <= 1.5L); - } - - template - void check_representative_precision_sweep(const char* float_name) - { - check_precision_case(float_name); - check_precision_case(float_name); - check_precision_case(float_name); - check_precision_case(float_name); - check_precision_case(float_name); - check_precision_case(float_name); - check_precision_case(float_name); - check_precision_case(float_name); - check_precision_case(float_name); - } - -} // namespace - -TEST_CASE("MPFR benchmark precision is comparable to f128", "[fltx][mpfr][compare_precision]") -{ - check_representative_precision_sweep("bl::f128"); -} - -TEST_CASE("MPFR benchmark precision is comparable to f256", "[fltx][mpfr][compare_precision]") -{ - check_representative_precision_sweep("bl::f256"); -} diff --git a/tests/random/random_print_utils.h b/tests/random/random_print_utils.h deleted file mode 100644 index ac08384..0000000 --- a/tests/random/random_print_utils.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef FLTX_TEST_RANDOM_PRINT_UTILS_INCLUDED -#define FLTX_TEST_RANDOM_PRINT_UTILS_INCLUDED - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace bl::test::random_print -{ - class ostream_state_guard - { - public: - explicit ostream_state_guard(std::ostream& stream) - : stream_(stream), flags_(stream.flags()), precision_(stream.precision()) - { - } - - ~ostream_state_guard() - { - stream_.flags(flags_); - stream_.precision(precision_); - } - - private: - std::ostream& stream_; - std::ios_base::fmtflags flags_; - std::streamsize precision_; - }; - - template - [[nodiscard]] std::string to_max_digits_string(const Real& value) - { - std::ostringstream out; - out << std::fixed - << std::showpoint - << std::setprecision(std::numeric_limits::max_digits10) - << value; - return out.str(); - } - - [[nodiscard]] inline std::size_t decimal_position(std::string_view value) noexcept - { - const std::size_t dot = value.find('.'); - return dot == std::string_view::npos ? value.size() : dot; - } - - inline void print_aligned_samples(std::ostream& out, const std::vector& samples) - { - std::size_t max_decimal_position = 0; - for (const std::string& sample : samples) - { - const std::size_t position = decimal_position(sample); - if (position > max_decimal_position) - max_decimal_position = position; - } - - const int index_width = samples.size() >= 100 ? 3 : 2; - for (std::size_t index = 0; index < samples.size(); ++index) - { - const std::string& sample = samples[index]; - const std::size_t position = decimal_position(sample); - out << "sample[" << std::setw(index_width) << index << "] = " - << std::string(max_decimal_position - position, ' ') - << sample << '\n'; - } - } -} - -#endif diff --git a/tests/random/test_f128_random.cpp b/tests/random/test_f128_random.cpp deleted file mode 100644 index 1f2b500..0000000 --- a/tests/random/test_f128_random.cpp +++ /dev/null @@ -1,583 +0,0 @@ -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "random_print_utils.h" - -namespace -{ - [[nodiscard]] constexpr bl::f128 constexpr_unit_sample() - { - bl::mt19937_64 rng{ 0x123456789abcdef0ull }; - bl::uniform_real_distribution dist{ bl::f128{ 0.0 }, bl::f128{ 1.0 } }; - return dist(rng); - } - - [[nodiscard]] constexpr bl::f128 constexpr_interval_sample() - { - bl::mt19937_64 rng{ 0x1020304050607080ull }; - bl::uniform_real_distribution dist{ bl::f128{ -2.0 }, bl::f128{ 3.0 } }; - return dist(rng); - } - - [[nodiscard]] constexpr auto constexpr_random_array_sample() - { - return bl::random_array<4>( - bl::mt19937_64{ 0x1020304050607080ull }, - bl::uniform_real_distribution{ bl::f128{ -2.0 }, bl::f128{ 3.0 } }); - } - - [[nodiscard]] constexpr bl::f128 constexpr_canonical_sample() - { - bl::mt19937 rng{ 1234u }; - return bl::generate_canonical::digits>(rng); - } - - [[nodiscard]] constexpr float constexpr_float_sample() - { - bl::mt19937_64 rng{ 0x1111222233334444ull }; - bl::uniform_real_distribution dist{ -0.5f, 0.5f }; - return dist(rng); - } - - [[nodiscard]] constexpr double constexpr_double_sample() - { - bl::mt19937_64 rng{ 0x5555666677778888ull }; - bl::uniform_real_distribution dist{ -0.5, 0.5 }; - return dist(rng); - } - - [[nodiscard]] constexpr int constexpr_int_sample() - { - bl::mt19937 rng{ 0x13579bdfu }; - bl::uniform_int_distribution dist{ -17, 29 }; - return dist(rng); - } - - [[nodiscard]] constexpr std::uint_fast32_t constexpr_seed_seq_sample() - { - bl::seed_seq seq{ 1u, 2u, 3u, 4u }; - bl::mt19937 rng{ seq }; - return rng(); - } - - [[nodiscard]] constexpr bl::f128 constexpr_exponential_sample() - { - bl::mt19937_64 rng{ 0x2468ace02468ace0ull }; - bl::exponential_distribution dist{ bl::f128{ 1.25 } }; - return dist(rng); - } - - [[nodiscard]] constexpr bl::f128 constexpr_normal_sample() - { - bl::mt19937_64 rng{ 0x3141592653589793ull }; - bl::normal_distribution dist{ bl::f128{ 0.5 }, bl::f128{ 2.0 } }; - return dist(rng); - } - - [[nodiscard]] constexpr bl::f128 constexpr_lognormal_sample() - { - bl::mt19937_64 rng{ 0x2718281828459045ull }; - bl::lognormal_distribution dist{ bl::f128{ 0.0 }, bl::f128{ 0.25 } }; - return dist(rng); - } - - struct modulo_six_urbg - { - using result_type = unsigned int; - - unsigned int value = 0; - - [[nodiscard]] static constexpr result_type min() noexcept { return 0; } - [[nodiscard]] static constexpr result_type max() noexcept { return 5; } - - [[nodiscard]] constexpr result_type operator()() noexcept - { - const result_type result = value; - value = (value + 1) % 6; - return result; - } - }; - - [[nodiscard]] constexpr double constexpr_non_power_canonical_sample() - { - modulo_six_urbg rng{}; - return bl::generate_canonical(rng); - } - - [[nodiscard]] constexpr float constexpr_float_exponential_sample() - { - bl::mt19937_64 rng{ 0x1111222233334444ull }; - bl::exponential_distribution dist{ 1.5f }; - return dist(rng); - } - - [[nodiscard]] constexpr double constexpr_double_normal_sample() - { - bl::mt19937_64 rng{ 0x5555666677778888ull }; - bl::normal_distribution dist{ -1.0, 0.25 }; - return dist(rng); - } - - [[nodiscard]] constexpr double constexpr_double_lognormal_sample() - { - bl::mt19937_64 rng{ 0x9999aaaabbbbccccull }; - bl::lognormal_distribution dist{ 0.1, 0.5 }; - return dist(rng); - } - - static_assert(bl::uniform_random_bit_generator); - static_assert(bl::uniform_random_bit_generator); - static_assert(bl::uniform_random_bit_generator); - static_assert(bl::random_distribution_for, bl::mt19937_64>); - static_assert(std::is_same_v); - static_assert(std::is_same_v::result_type, bl::f128>); - static_assert(std::is_same_v::result_type, int>); - static_assert(!std::is_copy_constructible_v); - static_assert(!std::is_copy_assignable_v); - static_assert(bl::random_device::min() < bl::random_device::max()); - static_assert(constexpr_unit_sample() >= bl::f128{ 0.0 }); - static_assert(constexpr_unit_sample() < bl::f128{ 1.0 }); - static_assert(constexpr_interval_sample() >= bl::f128{ -2.0 }); - static_assert(constexpr_interval_sample() < bl::f128{ 3.0 }); - static_assert(std::tuple_size_v> == 4); - static_assert(constexpr_random_array_sample()[0] >= bl::f128{ -2.0 }); - static_assert(constexpr_random_array_sample()[0] < bl::f128{ 3.0 }); - static_assert(constexpr_random_array_sample()[3] >= bl::f128{ -2.0 }); - static_assert(constexpr_random_array_sample()[3] < bl::f128{ 3.0 }); - static_assert(constexpr_canonical_sample() >= bl::f128{ 0.0 }); - static_assert(constexpr_canonical_sample() < bl::f128{ 1.0 }); - static_assert(constexpr_float_sample() >= -0.5f); - static_assert(constexpr_float_sample() < 0.5f); - static_assert(constexpr_double_sample() >= -0.5); - static_assert(constexpr_double_sample() < 0.5); - static_assert(constexpr_int_sample() >= -17); - static_assert(constexpr_int_sample() <= 29); - static_assert(constexpr_seed_seq_sample() != 0u); - static_assert(constexpr_exponential_sample() >= bl::f128{ 0.0 }); - static_assert(constexpr_normal_sample() == constexpr_normal_sample()); - static_assert(constexpr_lognormal_sample() > bl::f128{ 0.0 }); - static_assert(constexpr_non_power_canonical_sample() >= 0.0); - static_assert(constexpr_non_power_canonical_sample() < 1.0); - static_assert(constexpr_float_exponential_sample() >= 0.0f); - static_assert(constexpr_double_normal_sample() == constexpr_double_normal_sample()); - static_assert(constexpr_double_lognormal_sample() > 0.0); - -} - -TEST_CASE("bl mersenne twister engines match std output", "[fltx][random][f128][constexpr]") -{ - bl::mt19937 bl32{ 5489u }; - std::mt19937 std32{ 5489u }; - for (int index = 0; index < 1000; ++index) - REQUIRE(bl32() == std32()); - - bl::mt19937_64 bl64{ 5489u }; - std::mt19937_64 std64{ 5489u }; - for (int index = 0; index < 1000; ++index) - REQUIRE(bl64() == std64()); -} - -TEST_CASE("bl random_device exposes the runtime-only standard-shaped API", "[fltx][random]") -{ - bl::random_device device; - const bl::random_device::result_type sample = device(); - - REQUIRE(sample >= bl::random_device::min()); - REQUIRE(sample <= bl::random_device::max()); - REQUIRE(device.entropy() >= 0.0); -} - -TEST_CASE("bl random_array generates deterministic distribution samples", "[fltx][random][f128][constexpr]") -{ - bl::mt19937_64 rng{ 0x1020304050607080ull }; - bl::uniform_real_distribution dist{ bl::f128{ -2.0 }, bl::f128{ 3.0 } }; - - const auto values = bl::random_array<4>(rng, dist); - for (const bl::f128& value : values) - { - REQUIRE(value >= bl::f128{ -2.0 }); - REQUIRE(value < bl::f128{ 3.0 }); - } - - for (const bl::f128& value : values) - REQUIRE(value == dist(rng)); -} - -TEST_CASE("bl seed_seq and mersenne twister seed sequence match std output", "[fltx][random][f128][constexpr]") -{ - std::seed_seq std_seq{ 1u, 2u, 3u, 4u, 5u }; - bl::seed_seq bl_seq{ 1u, 2u, 3u, 4u, 5u }; - - std::array std_words{}; - std::array bl_words{}; - std_seq.generate(std_words.begin(), std_words.end()); - bl_seq.generate(bl_words.begin(), bl_words.end()); - REQUIRE(bl_words == std_words); - - std::vector params; - bl_seq.param(std::back_inserter(params)); - REQUIRE(params == std::vector{ 1u, 2u, 3u, 4u, 5u }); - REQUIRE(bl_seq.size() == params.size()); - - std::seed_seq std_empty_seq; - bl::seed_seq bl_empty_seq; - std::array std_empty_words{}; - std::array bl_empty_words{}; - std_empty_seq.generate(std_empty_words.begin(), std_empty_words.end()); - bl_empty_seq.generate(bl_empty_words.begin(), bl_empty_words.end()); - REQUIRE(bl_empty_words == std_empty_words); - bl_empty_seq.generate(bl_empty_words.begin(), bl_empty_words.begin()); - REQUIRE(bl_empty_seq.size() == 0u); - - std::array constructor_words{ 0x10u, 0x20u, 0x30u, 0x40u }; - std::seed_seq std_iter_seq{ constructor_words.begin(), constructor_words.end() }; - bl::seed_seq bl_iter_seq{ constructor_words.begin(), constructor_words.end() }; - std::array std_iter_words{}; - std::array bl_iter_words{}; - std_iter_seq.generate(std_iter_words.begin(), std_iter_words.end()); - bl_iter_seq.generate(bl_iter_words.begin(), bl_iter_words.end()); - REQUIRE(bl_iter_words == std_iter_words); - - std::seed_seq std_engine_seq{ 8u, 6u, 7u, 5u, 3u, 0u, 9u }; - bl::seed_seq bl_engine_seq{ 8u, 6u, 7u, 5u, 3u, 0u, 9u }; - std::mt19937 std_rng{ std_engine_seq }; - bl::mt19937 bl_rng{ bl_engine_seq }; - for (int index = 0; index < 1000; ++index) - REQUIRE(bl_rng() == std_rng()); - - std::seed_seq std_engine_seq64{ 11u, 22u, 33u, 44u, 55u, 66u }; - bl::seed_seq bl_engine_seq64{ 11u, 22u, 33u, 44u, 55u, 66u }; - std::mt19937_64 std_rng64{ std_engine_seq64 }; - bl::mt19937_64 bl_rng64{ bl_engine_seq64 }; - for (int index = 0; index < 1000; ++index) - REQUIRE(bl_rng64() == std_rng64()); -} - -TEST_CASE("bl random engines round-trip through streams", "[fltx][random][f128][constexpr]") -{ - bl::mt19937_64 rng{ 42u }; - rng.discard(37); - - std::stringstream stream; - stream << rng; - - bl::mt19937_64 restored; - stream >> restored; - - REQUIRE(restored == rng); - for (int index = 0; index < 32; ++index) - REQUIRE(restored() == rng()); - - bl::mt19937 discarded{ 123u }; - bl::mt19937 stepped{ 123u }; - discarded.discard(100); - for (int index = 0; index < 100; ++index) - static_cast(stepped()); - REQUIRE(discarded == stepped); - - std::stringstream bad_stream; - bad_stream << (bl::mt19937::state_size + 1u); - bl::mt19937 bad_target; - bad_stream >> bad_target; - REQUIRE(bad_stream.fail()); -} - -TEST_CASE("bl uniform_int_distribution is deterministic and bounded", "[fltx][random][f128][constexpr]") -{ - bl::mt19937_64 left_rng{ 42u }; - bl::mt19937_64 right_rng{ 42u }; - bl::uniform_int_distribution dist{ -128, 513 }; - - for (int index = 0; index < 256; ++index) - { - const int left = dist(left_rng); - const int right = dist(right_rng); - REQUIRE(left == right); - REQUIRE(left >= -128); - REQUIRE(left <= 513); - } - - bl::uniform_int_distribution full_range{ - std::numeric_limits::min(), - std::numeric_limits::max() - }; - const std::int64_t full_sample = full_range(left_rng); - (void)full_sample; -} - -TEST_CASE("bl uniform_int_distribution exposes standard-shaped params", "[fltx][random][f128][constexpr]") -{ - using distribution = bl::uniform_int_distribution; - - constexpr distribution::param_type first{ -7, 13 }; - constexpr distribution::param_type second{ -7, 13 }; - static_assert(first == second); - static_assert(first.a() == -7); - static_assert(first.b() == 13); - - distribution dist{ first }; - REQUIRE(dist.a() == -7); - REQUIRE(dist.b() == 13); - REQUIRE(dist.min() == -7); - REQUIRE(dist.max() == 13); - REQUIRE(dist.param() == first); - - dist.param(distribution::param_type{ 10, 12 }); - REQUIRE(dist.param().a() == 10); - REQUIRE(dist.param().b() == 12); - dist.reset(); - - bl::mt19937 rng{ 321u }; - const int override_sample = dist(rng, distribution::param_type{ -2, 2 }); - REQUIRE(override_sample >= -2); - REQUIRE(override_sample <= 2); - REQUIRE(dist.a() == 10); - REQUIRE(dist.b() == 12); - - bl::uniform_int_distribution one_value{ 7u, 7u }; - for (int index = 0; index < 8; ++index) - REQUIRE(one_value(rng) == 7u); - - bl::uniform_int_distribution unsigned_dist{ 0u, 11u }; - const unsigned int unsigned_sample = unsigned_dist(rng); - REQUIRE(unsigned_sample <= 11u); -} - -TEST_CASE("bl integer and canonical generation handle non-power-of-two URBG ranges", "[fltx][random][f128][constexpr]") -{ - modulo_six_urbg canonical_rng{}; - for (int index = 0; index < 16; ++index) - { - const double sample = bl::generate_canonical(canonical_rng); - REQUIRE(sample >= 0.0); - REQUIRE(sample < 1.0); - } - - modulo_six_urbg int_rng{}; - bl::uniform_int_distribution dist{ 0, 3 }; - for (int index = 0; index < 16; ++index) - { - const int sample = dist(int_rng); - REQUIRE(sample >= 0); - REQUIRE(sample <= 3); - } -} - -TEST_CASE("bl f128 uniform_real_distribution is deterministic and bounded", "[fltx][random][f128][constexpr]") -{ - bl::mt19937_64 left_rng{ 42u }; - bl::mt19937_64 right_rng{ 42u }; - bl::uniform_real_distribution dist{ bl::f128{ -1.25 }, bl::f128{ 2.5 } }; - - auto& out = Catch::cout(); - bl::test::random_print::ostream_state_guard out_state{ out }; - out << "\n[bl::uniform_real_distribution samples]\n" - << "seed = 42, range = [-1.25, 2.5), precision = " - << std::numeric_limits::max_digits10 << "\n"; - - std::vector samples; - samples.reserve(128); - for (int index = 0; index < 128; ++index) - { - const bl::f128 left = dist(left_rng); - const bl::f128 right = dist(right_rng); - - samples.push_back(bl::test::random_print::to_max_digits_string(left)); - - REQUIRE(left == right); - REQUIRE(left >= bl::f128{ -1.25 }); - REQUIRE(left < bl::f128{ 2.5 }); - } - bl::test::random_print::print_aligned_samples(out, samples); -} - -TEST_CASE("bl f128 uniform_real_distribution exposes standard-shaped params", "[fltx][random][f128][constexpr]") -{ - using distribution = bl::uniform_real_distribution; - - constexpr distribution::param_type first{ bl::f128{ 1.0 }, bl::f128{ 2.0 } }; - constexpr distribution::param_type second{ bl::f128{ 1.0 }, bl::f128{ 2.0 } }; - static_assert(first == second); - - distribution dist{ first }; - REQUIRE(dist.a() == bl::f128{ 1.0 }); - REQUIRE(dist.b() == bl::f128{ 2.0 }); - REQUIRE(dist.min() == bl::f128{ 1.0 }); - REQUIRE(dist.max() == bl::f128{ 2.0 }); - - dist.param(distribution::param_type{ bl::f128{ -4.0 }, bl::f128{ -3.0 } }); - REQUIRE(dist.param().a() == bl::f128{ -4.0 }); - REQUIRE(dist.param().b() == bl::f128{ -3.0 }); - - bl::mt19937_64 rng{ 7u }; - const bl::f128 override_sample = - dist(rng, distribution::param_type{ bl::f128{ 10.0 }, bl::f128{ 12.0 } }); - REQUIRE(override_sample >= bl::f128{ 10.0 }); - REQUIRE(override_sample < bl::f128{ 12.0 }); - REQUIRE(dist.a() == bl::f128{ -4.0 }); - REQUIRE(dist.b() == bl::f128{ -3.0 }); - - dist.reset(); - REQUIRE(dist.param().a() == bl::f128{ -4.0 }); -} - -TEST_CASE("bl f128 real distributions are constexpr-capable and bounded", "[fltx][random][f128][constexpr]") -{ - bl::mt19937_64 rng{ 123u }; - - bl::exponential_distribution exponential{ bl::f128{ 0.75 } }; - const bl::f128 exponential_sample = exponential(rng); - REQUIRE(exponential_sample >= bl::f128{ 0.0 }); - - bl::normal_distribution normal{ bl::f128{ 1.0 }, bl::f128{ 0.5 } }; - const bl::f128 normal_sample = normal(rng); - REQUIRE(normal_sample == normal_sample); - - bl::lognormal_distribution lognormal{ bl::f128{ 0.0 }, bl::f128{ 0.5 } }; - const bl::f128 lognormal_sample = lognormal(rng); - REQUIRE(lognormal_sample > bl::f128{ 0.0 }); -} - -TEST_CASE("bl real distributions expose standard-shaped params and cached state", "[fltx][random][f128][constexpr]") -{ - using exponential = bl::exponential_distribution; - using normal = bl::normal_distribution; - using lognormal = bl::lognormal_distribution; - - constexpr exponential::param_type exp_params{ 1.5 }; - constexpr normal::param_type normal_params{ -1.0, 0.25 }; - constexpr lognormal::param_type lognormal_params{ 0.1, 0.75 }; - static_assert(exp_params == exponential::param_type{ 1.5 }); - static_assert(normal_params == normal::param_type{ -1.0, 0.25 }); - static_assert(lognormal_params == lognormal::param_type{ 0.1, 0.75 }); - - bl::mt19937_64 rng{ 777u }; - - exponential exp_dist{ exp_params }; - REQUIRE(exp_dist.lambda() == 1.5); - REQUIRE(exp_dist.min() == 0.0); - REQUIRE(exp_dist.max() == std::numeric_limits::max()); - REQUIRE(exp_dist.param() == exp_params); - const double exp_override = exp_dist(rng, exponential::param_type{ 0.5 }); - REQUIRE(exp_override >= 0.0); - REQUIRE(exp_dist.lambda() == 1.5); - exp_dist.param(exponential::param_type{ 2.0 }); - REQUIRE(exp_dist.lambda() == 2.0); - exp_dist.reset(); - - normal normal_dist{ normal_params }; - normal normal_fresh{ normal_params }; - REQUIRE(normal_dist.mean() == -1.0); - REQUIRE(normal_dist.stddev() == 0.25); - REQUIRE(normal_dist.min() == std::numeric_limits::lowest()); - REQUIRE(normal_dist.max() == std::numeric_limits::max()); - REQUIRE(normal_dist.param() == normal_params); - const double normal_override = normal_dist(rng, normal::param_type{ 10.0, 2.0 }); - REQUIRE(normal_override == normal_override); - REQUIRE(normal_dist.mean() == -1.0); - REQUIRE(normal_dist.stddev() == 0.25); - REQUIRE(normal_dist != normal_fresh); - normal_dist.reset(); - REQUIRE(normal_dist == normal_fresh); - normal_dist.param(normal::param_type{ 3.0, 4.0 }); - REQUIRE(normal_dist.mean() == 3.0); - REQUIRE(normal_dist.stddev() == 4.0); - - lognormal lognormal_dist{ lognormal_params }; - lognormal lognormal_fresh{ lognormal_params }; - REQUIRE(lognormal_dist.m() == 0.1); - REQUIRE(lognormal_dist.s() == 0.75); - REQUIRE(lognormal_dist.min() == 0.0); - REQUIRE(lognormal_dist.max() == std::numeric_limits::max()); - REQUIRE(lognormal_dist.param() == lognormal_params); - const double lognormal_override = lognormal_dist(rng, lognormal::param_type{ 0.2, 0.5 }); - REQUIRE(lognormal_override > 0.0); - REQUIRE(lognormal_dist.m() == 0.1); - REQUIRE(lognormal_dist.s() == 0.75); - REQUIRE(lognormal_dist != lognormal_fresh); - lognormal_dist.reset(); - REQUIRE(lognormal_dist == lognormal_fresh); - lognormal_dist.param(lognormal::param_type{ -0.5, 1.25 }); - REQUIRE(lognormal_dist.m() == -0.5); - REQUIRE(lognormal_dist.s() == 1.25); -} - -TEST_CASE("bl real distributions support the standard floating types at runtime", "[fltx][random]") -{ - bl::mt19937_64 rng{ 1001u }; - - bl::exponential_distribution exponential{ 1.5f }; - const float exponential_sample = exponential(rng); - REQUIRE(exponential_sample >= 0.0f); - - bl::normal_distribution normal{ 1.0, 2.0 }; - const double normal_sample = normal(rng); - REQUIRE(normal_sample == normal_sample); - - bl::lognormal_distribution lognormal{ 0.0L, 0.5L }; - const long double lognormal_sample = lognormal(rng); - REQUIRE(lognormal_sample > 0.0L); -} - -TEST_CASE("bl distributions round-trip through streams", "[fltx][random][f128][constexpr]") -{ - bl::uniform_int_distribution int_dist{ -9, 15 }; - std::stringstream int_stream; - int_stream << int_dist; - bl::uniform_int_distribution restored_int; - int_stream >> restored_int; - REQUIRE(restored_int == int_dist); - - bl::uniform_real_distribution real_dist{ bl::f128{ -1.5 }, bl::f128{ 2.25 } }; - std::stringstream real_stream; - real_stream << real_dist; - bl::uniform_real_distribution restored_real; - real_stream >> restored_real; - REQUIRE(restored_real.a() == real_dist.a()); - REQUIRE(restored_real.b() == real_dist.b()); - - bl::mt19937_64 rng{ 99u }; - bl::normal_distribution normal{ bl::f128{ 1.0 }, bl::f128{ 2.0 } }; - (void)normal(rng); - std::stringstream normal_stream; - normal_stream << normal; - bl::normal_distribution restored_normal; - normal_stream >> restored_normal; - REQUIRE(restored_normal == normal); - - bl::exponential_distribution exponential{ bl::f128{ 1.75 } }; - std::stringstream exponential_stream; - exponential_stream << exponential; - bl::exponential_distribution restored_exponential; - exponential_stream >> restored_exponential; - REQUIRE(restored_exponential == exponential); - - bl::lognormal_distribution lognormal{ bl::f128{ 0.25 }, bl::f128{ 0.5 } }; - (void)lognormal(rng); - std::stringstream lognormal_stream; - lognormal_stream << lognormal; - bl::lognormal_distribution restored_lognormal; - lognormal_stream >> restored_lognormal; - REQUIRE(restored_lognormal == lognormal); - - std::stringstream bad_real_stream; - bad_real_stream << "not-a-number"; - bl::uniform_real_distribution bad_real_target{ bl::f128{ 4.0 }, bl::f128{ 5.0 } }; - bad_real_stream >> bad_real_target; - REQUIRE(bad_real_stream.fail()); - REQUIRE(bad_real_target.a() == bl::f128{ 4.0 }); - REQUIRE(bad_real_target.b() == bl::f128{ 5.0 }); -} diff --git a/tests/random/test_f256_random.cpp b/tests/random/test_f256_random.cpp deleted file mode 100644 index 556c6f9..0000000 --- a/tests/random/test_f256_random.cpp +++ /dev/null @@ -1,220 +0,0 @@ -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "random_print_utils.h" - -namespace -{ - [[nodiscard]] constexpr bl::f256 constexpr_unit_sample() - { - bl::mt19937_64 rng{ 0x123456789abcdef0ull }; - bl::uniform_real_distribution dist{ bl::f256{ 0.0 }, bl::f256{ 1.0 } }; - return dist(rng); - } - - [[nodiscard]] constexpr bl::f256 constexpr_interval_sample() - { - bl::mt19937_64 rng{ 0x1020304050607080ull }; - bl::uniform_real_distribution dist{ bl::f256{ -2.0 }, bl::f256{ 3.0 } }; - return dist(rng); - } - - [[nodiscard]] constexpr bl::f256 constexpr_canonical_sample() - { - bl::mt19937 rng{ 1234u }; - return bl::generate_canonical::digits>(rng); - } - - [[nodiscard]] constexpr bl::f256 constexpr_exponential_sample() - { - bl::mt19937_64 rng{ 0x2468ace02468ace0ull }; - bl::exponential_distribution dist{ bl::f256{ 1.25 } }; - return dist(rng); - } - - [[nodiscard]] constexpr bl::f256 constexpr_normal_sample() - { - bl::mt19937_64 rng{ 0x3141592653589793ull }; - bl::normal_distribution dist{ bl::f256{ 0.5 }, bl::f256{ 2.0 } }; - return dist(rng); - } - - [[nodiscard]] constexpr bl::f256 constexpr_lognormal_sample() - { - bl::mt19937_64 rng{ 0x2718281828459045ull }; - bl::lognormal_distribution dist{ bl::f256{ 0.0 }, bl::f256{ 0.25 } }; - return dist(rng); - } - - static_assert(std::is_same_v::result_type, bl::f256>); - static_assert(constexpr_unit_sample() >= bl::f256{ 0.0 }); - static_assert(constexpr_unit_sample() < bl::f256{ 1.0 }); - static_assert(constexpr_interval_sample() >= bl::f256{ -2.0 }); - static_assert(constexpr_interval_sample() < bl::f256{ 3.0 }); - static_assert(constexpr_canonical_sample() >= bl::f256{ 0.0 }); - static_assert(constexpr_canonical_sample() < bl::f256{ 1.0 }); - static_assert(constexpr_exponential_sample() >= bl::f256{ 0.0 }); - static_assert(constexpr_normal_sample() == constexpr_normal_sample()); - static_assert(constexpr_lognormal_sample() > bl::f256{ 0.0 }); - -} - -TEST_CASE("bl f256 uniform_real_distribution is deterministic and bounded", "[fltx][random][f256][constexpr]") -{ - bl::mt19937_64 left_rng{ 42u }; - bl::mt19937_64 right_rng{ 42u }; - bl::uniform_real_distribution dist{ bl::f256{ -1.25 }, bl::f256{ 2.5 } }; - - auto& out = Catch::cout(); - bl::test::random_print::ostream_state_guard out_state{ out }; - out << "\n[bl::uniform_real_distribution samples]\n" - << "seed = 42, range = [-1.25, 2.5), precision = " - << std::numeric_limits::max_digits10 << "\n"; - - std::vector samples; - samples.reserve(64); - for (int index = 0; index < 64; ++index) - { - const bl::f256 left = dist(left_rng); - const bl::f256 right = dist(right_rng); - - samples.push_back(bl::test::random_print::to_max_digits_string(left)); - - REQUIRE(left == right); - REQUIRE(left >= bl::f256{ -1.25 }); - REQUIRE(left < bl::f256{ 2.5 }); - } - bl::test::random_print::print_aligned_samples(out, samples); -} - -TEST_CASE("bl f256 uniform_real_distribution exposes standard-shaped params", "[fltx][random][f256][constexpr]") -{ - using distribution = bl::uniform_real_distribution; - - constexpr distribution::param_type first{ bl::f256{ 1.0 }, bl::f256{ 2.0 } }; - constexpr distribution::param_type second{ bl::f256{ 1.0 }, bl::f256{ 2.0 } }; - static_assert(first == second); - - distribution dist{ first }; - REQUIRE(dist.a() == bl::f256{ 1.0 }); - REQUIRE(dist.b() == bl::f256{ 2.0 }); - REQUIRE(dist.min() == bl::f256{ 1.0 }); - REQUIRE(dist.max() == bl::f256{ 2.0 }); - - dist.param(distribution::param_type{ bl::f256{ -4.0 }, bl::f256{ -3.0 } }); - REQUIRE(dist.param().a() == bl::f256{ -4.0 }); - REQUIRE(dist.param().b() == bl::f256{ -3.0 }); -} - -TEST_CASE("bl f256 real distributions are constexpr-capable and bounded", "[fltx][random][f256][constexpr]") -{ - bl::mt19937_64 rng{ 123u }; - - bl::exponential_distribution exponential{ bl::f256{ 0.75 } }; - const bl::f256 exponential_sample = exponential(rng); - REQUIRE(exponential_sample >= bl::f256{ 0.0 }); - - bl::normal_distribution normal{ bl::f256{ 1.0 }, bl::f256{ 0.5 } }; - const bl::f256 normal_sample = normal(rng); - REQUIRE(normal_sample == normal_sample); - - bl::lognormal_distribution lognormal{ bl::f256{ 0.0 }, bl::f256{ 0.5 } }; - const bl::f256 lognormal_sample = lognormal(rng); - REQUIRE(lognormal_sample > bl::f256{ 0.0 }); -} - -TEST_CASE("bl f256 real distributions expose standard-shaped params and cached state", "[fltx][random][f256][constexpr]") -{ - using exponential = bl::exponential_distribution; - using normal = bl::normal_distribution; - using lognormal = bl::lognormal_distribution; - - constexpr exponential::param_type exp_params{ bl::f256{ 1.5 } }; - constexpr normal::param_type normal_params{ bl::f256{ -1.0 }, bl::f256{ 0.25 } }; - constexpr lognormal::param_type lognormal_params{ bl::f256{ 0.1 }, bl::f256{ 0.75 } }; - static_assert(exp_params == exponential::param_type{ bl::f256{ 1.5 } }); - static_assert(normal_params == normal::param_type{ bl::f256{ -1.0 }, bl::f256{ 0.25 } }); - static_assert(lognormal_params == lognormal::param_type{ bl::f256{ 0.1 }, bl::f256{ 0.75 } }); - - bl::mt19937_64 rng{ 777u }; - - exponential exp_dist{ exp_params }; - REQUIRE(exp_dist.lambda() == bl::f256{ 1.5 }); - REQUIRE(exp_dist.min() == bl::f256{ 0.0 }); - REQUIRE(exp_dist.max() == std::numeric_limits::max()); - const bl::f256 exp_override = exp_dist(rng, exponential::param_type{ bl::f256{ 0.5 } }); - REQUIRE(exp_override >= bl::f256{ 0.0 }); - REQUIRE(exp_dist.lambda() == bl::f256{ 1.5 }); - - normal normal_dist{ normal_params }; - normal normal_fresh{ normal_params }; - REQUIRE(normal_dist.mean() == bl::f256{ -1.0 }); - REQUIRE(normal_dist.stddev() == bl::f256{ 0.25 }); - REQUIRE(normal_dist.min() == std::numeric_limits::lowest()); - REQUIRE(normal_dist.max() == std::numeric_limits::max()); - const bl::f256 normal_override = - normal_dist(rng, normal::param_type{ bl::f256{ 10.0 }, bl::f256{ 2.0 } }); - REQUIRE(normal_override == normal_override); - REQUIRE(normal_dist != normal_fresh); - normal_dist.reset(); - REQUIRE(normal_dist == normal_fresh); - - lognormal lognormal_dist{ lognormal_params }; - lognormal lognormal_fresh{ lognormal_params }; - REQUIRE(lognormal_dist.m() == bl::f256{ 0.1 }); - REQUIRE(lognormal_dist.s() == bl::f256{ 0.75 }); - REQUIRE(lognormal_dist.min() == bl::f256{ 0.0 }); - REQUIRE(lognormal_dist.max() == std::numeric_limits::max()); - const bl::f256 lognormal_override = - lognormal_dist(rng, lognormal::param_type{ bl::f256{ 0.2 }, bl::f256{ 0.5 } }); - REQUIRE(lognormal_override > bl::f256{ 0.0 }); - REQUIRE(lognormal_dist != lognormal_fresh); - lognormal_dist.reset(); - REQUIRE(lognormal_dist == lognormal_fresh); -} - -TEST_CASE("bl f256 distributions round-trip through streams", "[fltx][random][f256][constexpr]") -{ - bl::uniform_real_distribution real_dist{ bl::f256{ -1.5 }, bl::f256{ 2.25 } }; - std::stringstream real_stream; - real_stream << real_dist; - bl::uniform_real_distribution restored_real; - real_stream >> restored_real; - REQUIRE(restored_real.a() == real_dist.a()); - REQUIRE(restored_real.b() == real_dist.b()); - - bl::mt19937_64 rng{ 99u }; - bl::normal_distribution normal{ bl::f256{ 1.0 }, bl::f256{ 2.0 } }; - (void)normal(rng); - std::stringstream normal_stream; - normal_stream << normal; - bl::normal_distribution restored_normal; - normal_stream >> restored_normal; - REQUIRE(restored_normal == normal); - - bl::exponential_distribution exponential{ bl::f256{ 1.75 } }; - std::stringstream exponential_stream; - exponential_stream << exponential; - bl::exponential_distribution restored_exponential; - exponential_stream >> restored_exponential; - REQUIRE(restored_exponential == exponential); - - bl::lognormal_distribution lognormal{ bl::f256{ 0.25 }, bl::f256{ 0.5 } }; - (void)lognormal(rng); - std::stringstream lognormal_stream; - lognormal_stream << lognormal; - bl::lognormal_distribution restored_lognormal; - lognormal_stream >> restored_lognormal; - REQUIRE(restored_lognormal == lognormal); -} diff --git a/tests/test_macro_status.cpp b/tests/test_macro_status.cpp deleted file mode 100644 index a2407f7..0000000 --- a/tests/test_macro_status.cpp +++ /dev/null @@ -1,173 +0,0 @@ -#include -#include -#include - -#include "fltx/f256.h" - -#ifndef FLTX_TEST_NAME -#define FLTX_TEST_NAME "unknown_tests" -#endif - -#define FLTX_STRINGIZE_IMPL(x) #x -#define FLTX_STRINGIZE(x) FLTX_STRINGIZE_IMPL(x) - -#if defined(__aarch64__) || defined(_M_ARM64) -#define FLTX_ARCH_ARM64_STATUS "defined" -#else -#define FLTX_ARCH_ARM64_STATUS "not defined" -#endif - -#if defined(__ARM_NEON) || defined(__ARM_NEON__) -#define FLTX_ARCH_NEON_STATUS "defined" -#else -#define FLTX_ARCH_NEON_STATUS "not defined" -#endif - -#if defined(__SSE2__) || defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) -#define FLTX_ARCH_SSE2_STATUS "defined" -#else -#define FLTX_ARCH_SSE2_STATUS "not defined" -#endif - -#if defined(__wasm_simd128__) -#define FLTX_ARCH_WASM_SIMD128_STATUS "defined" -#else -#define FLTX_ARCH_WASM_SIMD128_STATUS "not defined" -#endif - -namespace -{ - [[nodiscard]] bool env_requests_simulated_consteval(bool fallback) noexcept - { - const char* value = std::getenv("FLTX_SIMULATE_CONSTEVAL"); - if (value == nullptr || *value == '\0') - return fallback; - - if (std::strcmp(value, "0") == 0 || - std::strcmp(value, "false") == 0 || - std::strcmp(value, "FALSE") == 0 || - std::strcmp(value, "off") == 0 || - std::strcmp(value, "OFF") == 0) - { - return false; - } - - return true; - } - - [[nodiscard]] bool env_requests_macro_status_suppression() noexcept - { - const char* value = std::getenv("FLTX_TEST_SUPPRESS_MACRO_STATUS"); - if (value == nullptr || *value == '\0') - return false; - - if (std::strcmp(value, "0") == 0 || - std::strcmp(value, "false") == 0 || - std::strcmp(value, "FALSE") == 0 || - std::strcmp(value, "off") == 0 || - std::strcmp(value, "OFF") == 0) - { - return false; - } - - return true; - } - - struct fltx_test_macro_status_printer - { - fltx_test_macro_status_printer() noexcept - { - #if defined(FLTX_SIMULATE_CONSTEVAL_MODE) - bool simulated_consteval_enabled = false; - #if defined(FLTX_TEST_FORCE_SIMULATED_CONSTEVAL) - simulated_consteval_enabled = true; - #endif - simulated_consteval_enabled = env_requests_simulated_consteval(simulated_consteval_enabled); - bl::_fltx_debug::set_simulated_consteval_path(simulated_consteval_enabled); - #endif - - if (env_requests_macro_status_suppression()) - return; - - std::fputs("[fltx ", stderr); - std::fputs(FLTX_TEST_NAME, stderr); - std::fputs("] BL_FAST_MATH = ", stderr); - #if defined(BL_FAST_MATH) - std::fputs("defined", stderr); - #else - std::fputs("not defined", stderr); - #endif - - std::fputs("\nFMA_AVAILABLE = ", stderr); - #if defined(FMA_AVAILABLE) - std::fputs("defined", stderr); - #else - std::fputs("not defined", stderr); - #endif - - std::fputs("\nFLTX_CONSTEXPR_PARITY = ", stderr); - #if defined(FLTX_CONSTEXPR_PARITY) - std::fputs("defined", stderr); - #else - std::fputs("not defined", stderr); - #endif - - std::fputs("\nFLTX_SIMULATE_CONSTEVAL_MODE = ", stderr); - #if defined(FLTX_SIMULATE_CONSTEVAL_MODE) - std::fputs("defined", stderr); - #else - std::fputs("not defined", stderr); - #endif - - std::fputs("\nFLTX_TEST_FORCE_SIMULATED_CONSTEVAL = ", stderr); - #if defined(FLTX_TEST_FORCE_SIMULATED_CONSTEVAL) - std::fputs("defined", stderr); - #else - std::fputs("not defined", stderr); - #endif - - std::fputs("\nsimulated_consteval = ", stderr); - #if defined(FLTX_SIMULATE_CONSTEVAL_MODE) - std::fputs(simulated_consteval_enabled ? "on" : "off", stderr); - #else - std::fputs("unavailable", stderr); - #endif - - std::fputs("\nBL_FLTX_HAS_SSE2 = ", stderr); - std::fputs(FLTX_STRINGIZE(BL_FLTX_HAS_SSE2), stderr); - - std::fputs("\nBL_FLTX_HAS_NEON = ", stderr); - std::fputs(FLTX_STRINGIZE(BL_FLTX_HAS_NEON), stderr); - - std::fputs("\nBL_FLTX_HAS_WASM_SIMD = ", stderr); - std::fputs(FLTX_STRINGIZE(BL_FLTX_HAS_WASM_SIMD), stderr); - - std::fputs("\nBL_F256_ENABLE_SIMD = ", stderr); - std::fputs(FLTX_STRINGIZE(BL_F256_ENABLE_SIMD), stderr); - - std::fputs("\nBL_F256_ENABLE_TRIG_SIMD = ", stderr); - std::fputs(FLTX_STRINGIZE(BL_F256_ENABLE_TRIG_SIMD), stderr); - - std::fputs("\nBL_FLTX_SIMD_USE_FMA_TWO_PROD = ", stderr); - std::fputs(FLTX_STRINGIZE(BL_FLTX_SIMD_USE_FMA_TWO_PROD), stderr); - - std::fputs("\narm64 = ", stderr); - std::fputs(FLTX_ARCH_ARM64_STATUS, stderr); - - std::fputs("\nneon = ", stderr); - std::fputs(FLTX_ARCH_NEON_STATUS, stderr); - - std::fputs("\nsse2 = ", stderr); - std::fputs(FLTX_ARCH_SSE2_STATUS, stderr); - - std::fputs("\nwasm_simd128 = ", stderr); - std::fputs(FLTX_ARCH_WASM_SIMD128_STATUS, stderr); - - std::fputc('\n', stderr); - std::fflush(stderr); - } - }; - - const fltx_test_macro_status_printer fltx_test_macro_status_printer_instance{}; - -} // namespace diff --git a/tests/unit_compile_tests/CMakeLists.txt b/tests/unit_compile_tests/CMakeLists.txt deleted file mode 100644 index 7f54d8b..0000000 --- a/tests/unit_compile_tests/CMakeLists.txt +++ /dev/null @@ -1,47 +0,0 @@ -cmake_minimum_required(VERSION 3.21) -project(fltx LANGUAGES CXX) - -file(GLOB ISOLATED_F128_SOURCES CONFIGURE_DEPENDS - "f128/isolated_f128_*.cpp" -) -file(GLOB ISOLATED_F256_SOURCES CONFIGURE_DEPENDS - "f256/isolated_f256_*.cpp" -) - -set(ISOLATED_F128_SOURCES - "f128/main.cpp" - "f128/isolated_runtime.h" - "f128/isolated_runtime.cpp" - ${ISOLATED_F128_SOURCES} -) - -set(ISOLATED_F256_SOURCES - "f256/main.cpp" - "f256/isolated_runtime.h" - "f256/isolated_runtime.cpp" - ${ISOLATED_F256_SOURCES} -) - -add_executable(isolated_f128_math ${ISOLATED_F128_SOURCES}) -add_executable(isolated_f256_math ${ISOLATED_F256_SOURCES}) - -target_link_libraries(isolated_f128_math PRIVATE fltx::fltx) -target_link_libraries(isolated_f256_math PRIVATE fltx::fltx) -add_dependencies(isolated_f128_math fltx) -add_dependencies(isolated_f256_math fltx) - -target_include_directories(isolated_f128_math PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/f128") -target_include_directories(isolated_f256_math PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/f256") - -target_compile_features(isolated_f128_math PRIVATE cxx_std_23) -target_compile_features(isolated_f256_math PRIVATE cxx_std_23) - -set_target_properties(isolated_f128_math PROPERTIES FOLDER "fltx/isolated/f128") -set_target_properties(isolated_f256_math PROPERTIES FOLDER "fltx/isolated/f256") - -if (MSVC) - target_compile_options(isolated_f128_math PRIVATE /Bt+) - target_compile_options(isolated_f256_math PRIVATE /Bt+) - target_link_options(isolated_f128_math PRIVATE /TIME) - target_link_options(isolated_f256_math PRIVATE /TIME) -endif() diff --git a/tests/unit_compile_tests/f128/isolated_f128_abs.cpp b/tests/unit_compile_tests/f128/isolated_f128_abs.cpp deleted file mode 100644 index b852708..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_abs.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_abs() -{ - bl::f128 input = bl::isolated::runtime_f128(-0.123456789); - bl::f128 value = bl::abs(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_acos.cpp b/tests/unit_compile_tests/f128/isolated_f128_acos.cpp deleted file mode 100644 index ed5acc1..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_acos.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_acos() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::acos(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_acosh.cpp b/tests/unit_compile_tests/f128/isolated_f128_acosh.cpp deleted file mode 100644 index 3c02d1e..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_acosh.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_acosh() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::acosh(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_asin.cpp b/tests/unit_compile_tests/f128/isolated_f128_asin.cpp deleted file mode 100644 index 69a60e4..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_asin.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_asin() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::asin(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_asinh.cpp b/tests/unit_compile_tests/f128/isolated_f128_asinh.cpp deleted file mode 100644 index c7bccb0..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_asinh.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_asinh() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::asinh(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_atan.cpp b/tests/unit_compile_tests/f128/isolated_f128_atan.cpp deleted file mode 100644 index 1d61636..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_atan.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_atan() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::atan(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_atan2.cpp b/tests/unit_compile_tests/f128/isolated_f128_atan2.cpp deleted file mode 100644 index bfd54fb..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_atan2.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_atan2() -{ - bl::f128 y = bl::isolated::runtime_f128(0.123456789); - bl::f128 x = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::atan2(y, x); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_atanh.cpp b/tests/unit_compile_tests/f128/isolated_f128_atanh.cpp deleted file mode 100644 index a77db75..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_atanh.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_atanh() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::atanh(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_cbrt.cpp b/tests/unit_compile_tests/f128/isolated_f128_cbrt.cpp deleted file mode 100644 index 60be629..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_cbrt.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_cbrt() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::cbrt(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_ceil.cpp b/tests/unit_compile_tests/f128/isolated_f128_ceil.cpp deleted file mode 100644 index bd6b96e..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_ceil.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_ceil() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::ceil(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_copysign.cpp b/tests/unit_compile_tests/f128/isolated_f128_copysign.cpp deleted file mode 100644 index 810d995..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_copysign.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_copysign() -{ - bl::f128 x = bl::isolated::runtime_f128(0.123456789); - bl::f128 y = bl::isolated::runtime_f128(-1.23456789); - bl::f128 value = bl::copysign(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_cos.cpp b/tests/unit_compile_tests/f128/isolated_f128_cos.cpp deleted file mode 100644 index 73d8374..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_cos.cpp +++ /dev/null @@ -1,11 +0,0 @@ - -#include -#include "isolated_runtime.h" - -void isolated_f128_cos() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::cos(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_cosh.cpp b/tests/unit_compile_tests/f128/isolated_f128_cosh.cpp deleted file mode 100644 index 068b611..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_cosh.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_cosh() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::cosh(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_erf.cpp b/tests/unit_compile_tests/f128/isolated_f128_erf.cpp deleted file mode 100644 index 807c6eb..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_erf.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_erf() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::erf(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_erfc.cpp b/tests/unit_compile_tests/f128/isolated_f128_erfc.cpp deleted file mode 100644 index 3d06c4c..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_erfc.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_erfc() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::erfc(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_exp.cpp b/tests/unit_compile_tests/f128/isolated_f128_exp.cpp deleted file mode 100644 index aeca6b6..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_exp.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_exp() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::exp(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_exp2.cpp b/tests/unit_compile_tests/f128/isolated_f128_exp2.cpp deleted file mode 100644 index 5459346..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_exp2.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_exp2() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::exp2(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_expm1.cpp b/tests/unit_compile_tests/f128/isolated_f128_expm1.cpp deleted file mode 100644 index 5779e2a..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_expm1.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_expm1() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::expm1(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_fabs.cpp b/tests/unit_compile_tests/f128/isolated_f128_fabs.cpp deleted file mode 100644 index 21cfcf5..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_fabs.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_fabs() -{ - bl::f128 input = bl::isolated::runtime_f128(-0.123456789); - bl::f128 value = bl::fabs(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_fdim.cpp b/tests/unit_compile_tests/f128/isolated_f128_fdim.cpp deleted file mode 100644 index 2ed38a0..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_fdim.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_fdim() -{ - bl::f128 x = bl::isolated::runtime_f128(1.23456789); - bl::f128 y = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::fdim(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_floor.cpp b/tests/unit_compile_tests/f128/isolated_f128_floor.cpp deleted file mode 100644 index 3d57182..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_floor.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_floor() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::floor(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_fma.cpp b/tests/unit_compile_tests/f128/isolated_f128_fma.cpp deleted file mode 100644 index 83b77b0..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_fma.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_fma() -{ - bl::f128 x = bl::isolated::runtime_f128(1.23456789); - bl::f128 y = bl::isolated::runtime_f128(0.123456789); - bl::f128 z = bl::isolated::runtime_f128(-0.333333333); - bl::f128 value = bl::fma(x, y, z); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_fmax.cpp b/tests/unit_compile_tests/f128/isolated_f128_fmax.cpp deleted file mode 100644 index 01743c6..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_fmax.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_fmax() -{ - bl::f128 x = bl::isolated::runtime_f128(1.23456789); - bl::f128 y = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::fmax(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_fmin.cpp b/tests/unit_compile_tests/f128/isolated_f128_fmin.cpp deleted file mode 100644 index d9014de..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_fmin.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_fmin() -{ - bl::f128 x = bl::isolated::runtime_f128(1.23456789); - bl::f128 y = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::fmin(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_fmod.cpp b/tests/unit_compile_tests/f128/isolated_f128_fmod.cpp deleted file mode 100644 index 916e9ae..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_fmod.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_fmod() -{ - bl::f128 x = bl::isolated::runtime_f128(1.23456789); - bl::f128 y = bl::isolated::runtime_f128(0.75); - bl::f128 value = bl::fmod(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_fpclassify.cpp b/tests/unit_compile_tests/f128/isolated_f128_fpclassify.cpp deleted file mode 100644 index aaf1cc2..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_fpclassify.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_fpclassify() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - int value = bl::fpclassify(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_frexp.cpp b/tests/unit_compile_tests/f128/isolated_f128_frexp.cpp deleted file mode 100644 index 0da4702..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_frexp.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_frexp() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - int exponent = 0; - bl::f128 value = bl::frexp(input, &exponent); - - bl::isolated::keep_value(value); - bl::isolated::keep_value(exponent); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_hypot.cpp b/tests/unit_compile_tests/f128/isolated_f128_hypot.cpp deleted file mode 100644 index 5bc74fc..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_hypot.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_hypot() -{ - bl::f128 x = bl::isolated::runtime_f128(1.23456789); - bl::f128 y = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::hypot(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_ilogb.cpp b/tests/unit_compile_tests/f128/isolated_f128_ilogb.cpp deleted file mode 100644 index e52f41e..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_ilogb.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_ilogb() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - int value = bl::ilogb(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_isfinite.cpp b/tests/unit_compile_tests/f128/isolated_f128_isfinite.cpp deleted file mode 100644 index fc85380..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_isfinite.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_isfinite() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bool value = bl::isfinite(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_isgreater.cpp b/tests/unit_compile_tests/f128/isolated_f128_isgreater.cpp deleted file mode 100644 index 6d149c7..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_isgreater.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_isgreater() -{ - bl::f128 a = bl::isolated::runtime_f128(1.23456789); - bl::f128 b = bl::isolated::runtime_f128(0.123456789); - bool value = bl::isgreater(a, b); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_isgreaterequal.cpp b/tests/unit_compile_tests/f128/isolated_f128_isgreaterequal.cpp deleted file mode 100644 index 0ef2ab2..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_isgreaterequal.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_isgreaterequal() -{ - bl::f128 a = bl::isolated::runtime_f128(1.23456789); - bl::f128 b = bl::isolated::runtime_f128(0.123456789); - bool value = bl::isgreaterequal(a, b); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_isinf.cpp b/tests/unit_compile_tests/f128/isolated_f128_isinf.cpp deleted file mode 100644 index 8edc1c2..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_isinf.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_isinf() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bool value = bl::isinf(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_isless.cpp b/tests/unit_compile_tests/f128/isolated_f128_isless.cpp deleted file mode 100644 index 9e99bbb..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_isless.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_isless() -{ - bl::f128 a = bl::isolated::runtime_f128(0.123456789); - bl::f128 b = bl::isolated::runtime_f128(1.23456789); - bool value = bl::isless(a, b); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_islessequal.cpp b/tests/unit_compile_tests/f128/isolated_f128_islessequal.cpp deleted file mode 100644 index 04699b8..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_islessequal.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_islessequal() -{ - bl::f128 a = bl::isolated::runtime_f128(0.123456789); - bl::f128 b = bl::isolated::runtime_f128(1.23456789); - bool value = bl::islessequal(a, b); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_islessgreater.cpp b/tests/unit_compile_tests/f128/isolated_f128_islessgreater.cpp deleted file mode 100644 index fc0938a..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_islessgreater.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_islessgreater() -{ - bl::f128 a = bl::isolated::runtime_f128(0.123456789); - bl::f128 b = bl::isolated::runtime_f128(1.23456789); - bool value = bl::islessgreater(a, b); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_isnan.cpp b/tests/unit_compile_tests/f128/isolated_f128_isnan.cpp deleted file mode 100644 index df29fa9..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_isnan.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_isnan() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bool value = bl::isnan(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_isnormal.cpp b/tests/unit_compile_tests/f128/isolated_f128_isnormal.cpp deleted file mode 100644 index bc9790f..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_isnormal.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_isnormal() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bool value = bl::isnormal(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_isunordered.cpp b/tests/unit_compile_tests/f128/isolated_f128_isunordered.cpp deleted file mode 100644 index 52bd03a..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_isunordered.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_isunordered() -{ - bl::f128 a = bl::isolated::runtime_f128(0.123456789); - bl::f128 b = bl::isolated::runtime_f128(1.23456789); - bool value = bl::isunordered(a, b); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_ldexp.cpp b/tests/unit_compile_tests/f128/isolated_f128_ldexp.cpp deleted file mode 100644 index 5e0f941..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_ldexp.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_ldexp() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - int exponent = bl::isolated::runtime_i32(7); - bl::f128 value = bl::ldexp(input, exponent); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_lgamma.cpp b/tests/unit_compile_tests/f128/isolated_f128_lgamma.cpp deleted file mode 100644 index 1865367..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_lgamma.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_lgamma() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::lgamma(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_llrint.cpp b/tests/unit_compile_tests/f128/isolated_f128_llrint.cpp deleted file mode 100644 index a2c45a6..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_llrint.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_llrint() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - long long value = bl::llrint(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_llround.cpp b/tests/unit_compile_tests/f128/isolated_f128_llround.cpp deleted file mode 100644 index 24afed1..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_llround.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_llround() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - long long value = bl::llround(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_log.cpp b/tests/unit_compile_tests/f128/isolated_f128_log.cpp deleted file mode 100644 index 33d96c5..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_log.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_log() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::log(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_log10.cpp b/tests/unit_compile_tests/f128/isolated_f128_log10.cpp deleted file mode 100644 index 9aa43c5..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_log10.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_log10() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::log10(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_log1p.cpp b/tests/unit_compile_tests/f128/isolated_f128_log1p.cpp deleted file mode 100644 index 4f77dae..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_log1p.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_log1p() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::log1p(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_log2.cpp b/tests/unit_compile_tests/f128/isolated_f128_log2.cpp deleted file mode 100644 index 43aeb77..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_log2.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_log2() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::log2(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_logb.cpp b/tests/unit_compile_tests/f128/isolated_f128_logb.cpp deleted file mode 100644 index 80da0ee..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_logb.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_logb() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::logb(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_lrint.cpp b/tests/unit_compile_tests/f128/isolated_f128_lrint.cpp deleted file mode 100644 index 29d1f40..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_lrint.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_lrint() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - long value = bl::lrint(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_lround.cpp b/tests/unit_compile_tests/f128/isolated_f128_lround.cpp deleted file mode 100644 index 9ca02f5..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_lround.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_lround() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - long value = bl::lround(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_modf.cpp b/tests/unit_compile_tests/f128/isolated_f128_modf.cpp deleted file mode 100644 index d7d738e..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_modf.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_modf() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 integer_part; - bl::f128 value = bl::modf(input, &integer_part); - - bl::isolated::keep_value(value); - bl::isolated::keep_value(integer_part); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_nearbyint.cpp b/tests/unit_compile_tests/f128/isolated_f128_nearbyint.cpp deleted file mode 100644 index 1aeab56..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_nearbyint.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_nearbyint() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::nearbyint(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_nextafter.cpp b/tests/unit_compile_tests/f128/isolated_f128_nextafter.cpp deleted file mode 100644 index eac3719..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_nextafter.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_nextafter() -{ - bl::f128 from = bl::isolated::runtime_f128(0.123456789); - bl::f128 to = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::nextafter(from, to); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_nexttoward.cpp b/tests/unit_compile_tests/f128/isolated_f128_nexttoward.cpp deleted file mode 100644 index 81de0f0..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_nexttoward.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_nexttoward() -{ - bl::f128 from = bl::isolated::runtime_f128(0.123456789); - long double to = bl::isolated::runtime_long_double(1.23456789L); - bl::f128 value = bl::nexttoward(from, to); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_nexttoward_f128.cpp b/tests/unit_compile_tests/f128/isolated_f128_nexttoward_f128.cpp deleted file mode 100644 index 085b5d4..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_nexttoward_f128.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_nexttoward_f128() -{ - bl::f128 from = bl::isolated::runtime_f128(0.123456789); - bl::f128 to = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::nexttoward(from, to); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_pow.cpp b/tests/unit_compile_tests/f128/isolated_f128_pow.cpp deleted file mode 100644 index 7bf656a..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_pow.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_pow() -{ - bl::f128 x = bl::isolated::runtime_f128(1.23456789); - bl::f128 y = bl::isolated::runtime_f128(2.5); - bl::f128 value = bl::pow(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_pow_double.cpp b/tests/unit_compile_tests/f128/isolated_f128_pow_double.cpp deleted file mode 100644 index 0c34271..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_pow_double.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_pow_double() -{ - bl::f128 x = bl::isolated::runtime_f128(1.23456789); - bl::f128 y = bl::isolated::runtime_f128(2.5); - bl::f128 value = bl::pow(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_remainder.cpp b/tests/unit_compile_tests/f128/isolated_f128_remainder.cpp deleted file mode 100644 index 9f39df9..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_remainder.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_remainder() -{ - bl::f128 x = bl::isolated::runtime_f128(1.23456789); - bl::f128 y = bl::isolated::runtime_f128(0.75); - bl::f128 value = bl::remainder(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_remquo.cpp b/tests/unit_compile_tests/f128/isolated_f128_remquo.cpp deleted file mode 100644 index 6fe57b7..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_remquo.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_remquo() -{ - bl::f128 x = bl::isolated::runtime_f128(1.23456789); - bl::f128 y = bl::isolated::runtime_f128(0.75); - int quotient = 0; - bl::f128 value = bl::remquo(x, y, "ient); - - bl::isolated::keep_value(value); - bl::isolated::keep_value(quotient); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_rint.cpp b/tests/unit_compile_tests/f128/isolated_f128_rint.cpp deleted file mode 100644 index a4938ee..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_rint.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_rint() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::rint(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_round.cpp b/tests/unit_compile_tests/f128/isolated_f128_round.cpp deleted file mode 100644 index cfe7dc6..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_round.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_round() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::round(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_scalbln.cpp b/tests/unit_compile_tests/f128/isolated_f128_scalbln.cpp deleted file mode 100644 index 7dcba62..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_scalbln.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_scalbln() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - long exponent = bl::isolated::runtime_long(7); - bl::f128 value = bl::scalbln(input, exponent); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_scalbn.cpp b/tests/unit_compile_tests/f128/isolated_f128_scalbn.cpp deleted file mode 100644 index e7ef521..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_scalbn.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_scalbn() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - int exponent = bl::isolated::runtime_i32(7); - bl::f128 value = bl::scalbn(input, exponent); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_signbit.cpp b/tests/unit_compile_tests/f128/isolated_f128_signbit.cpp deleted file mode 100644 index 877421e..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_signbit.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_signbit() -{ - bl::f128 input = bl::isolated::runtime_f128(-0.123456789); - bool value = bl::signbit(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_sin.cpp b/tests/unit_compile_tests/f128/isolated_f128_sin.cpp deleted file mode 100644 index 3a8b6b5..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_sin.cpp +++ /dev/null @@ -1,11 +0,0 @@ - -#include -#include "isolated_runtime.h" - -void isolated_f128_sin() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::sin(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_sincos.cpp b/tests/unit_compile_tests/f128/isolated_f128_sincos.cpp deleted file mode 100644 index 9f8e6c8..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_sincos.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include "isolated_runtime.h" - -namespace -{ - struct f128_sincos_pair - { - bl::f128 c; - bl::f128 s; - }; - -} // namespace - -void isolated_f128_sincos() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 sine; - bl::f128 cosine; - bool value = bl::sincos(input, sine, cosine); - f128_sincos_pair out{}; - bool vector_value = bl::sincos(input, out); - f128_sincos_pair returned = bl::sincos(input); - - bl::isolated::keep_value(value); - bl::isolated::keep_value(vector_value); - bl::isolated::keep_value(sine); - bl::isolated::keep_value(cosine); - bl::isolated::keep_value(out.c); - bl::isolated::keep_value(out.s); - bl::isolated::keep_value(returned.c); - bl::isolated::keep_value(returned.s); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_sinh.cpp b/tests/unit_compile_tests/f128/isolated_f128_sinh.cpp deleted file mode 100644 index bd0ce38..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_sinh.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_sinh() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::sinh(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_sqrt.cpp b/tests/unit_compile_tests/f128/isolated_f128_sqrt.cpp deleted file mode 100644 index 0d19e2e..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_sqrt.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_sqrt() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::sqrt(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_tan.cpp b/tests/unit_compile_tests/f128/isolated_f128_tan.cpp deleted file mode 100644 index 484269e..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_tan.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_tan() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::tan(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_tanh.cpp b/tests/unit_compile_tests/f128/isolated_f128_tanh.cpp deleted file mode 100644 index 00996cb..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_tanh.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_tanh() -{ - bl::f128 input = bl::isolated::runtime_f128(0.123456789); - bl::f128 value = bl::tanh(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_tgamma.cpp b/tests/unit_compile_tests/f128/isolated_f128_tgamma.cpp deleted file mode 100644 index 25c73db..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_tgamma.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_tgamma() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::tgamma(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_f128_trunc.cpp b/tests/unit_compile_tests/f128/isolated_f128_trunc.cpp deleted file mode 100644 index e72afd7..0000000 --- a/tests/unit_compile_tests/f128/isolated_f128_trunc.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f128_trunc() -{ - bl::f128 input = bl::isolated::runtime_f128(1.23456789); - bl::f128 value = bl::trunc(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f128/isolated_runtime.cpp b/tests/unit_compile_tests/f128/isolated_runtime.cpp deleted file mode 100644 index fff2f80..0000000 --- a/tests/unit_compile_tests/f128/isolated_runtime.cpp +++ /dev/null @@ -1,93 +0,0 @@ -#include "isolated_runtime.h" - -#include -#include - -#if defined(_MSC_VER) -#include -#pragma intrinsic(_ReadWriteBarrier) -#endif - -#if defined(_MSC_VER) -#define BL_ISOLATED_NOINLINE __declspec(noinline) -#elif defined(__clang__) || defined(__GNUC__) -#define BL_ISOLATED_NOINLINE __attribute__((noinline)) -#else -#define BL_ISOLATED_NOINLINE -#endif - -namespace bl::isolated -{ - BL_ISOLATED_NOINLINE double runtime_f64(double value) noexcept - { - static volatile double sink; - sink = value; - return sink; - } - - BL_ISOLATED_NOINLINE int runtime_i32(int value) noexcept - { - static volatile int sink; - sink = value; - return sink; - } - - BL_ISOLATED_NOINLINE long runtime_long(long value) noexcept - { - static volatile long sink; - sink = value; - return sink; - } - - BL_ISOLATED_NOINLINE long double runtime_long_double(long double value) noexcept - { - static volatile long double sink; - sink = value; - return sink; - } - - BL_ISOLATED_NOINLINE bl::f128 runtime_f128(double value) noexcept - { - return runtime_f128(value, 0.0); - } - - BL_ISOLATED_NOINLINE bl::f128 runtime_f128(double hi, double lo) noexcept - { - static volatile double sink[2]; - sink[0] = hi; - sink[1] = lo; - - return bl::f128{ sink[0], sink[1] }; - } - - BL_ISOLATED_NOINLINE bl::f256 runtime_f256(double value) noexcept - { - return runtime_f256(value, 0.0, 0.0, 0.0); - } - - BL_ISOLATED_NOINLINE bl::f256 runtime_f256(double x0, double x1, double x2, double x3) noexcept - { - static volatile double sink[4]; - sink[0] = x0; - sink[1] = x1; - sink[2] = x2; - sink[3] = x3; - - return bl::f256{ sink[0], sink[1], sink[2], sink[3] }; - } - - BL_ISOLATED_NOINLINE void consume_address(void const* address) noexcept - { - #if defined(__clang__) || defined(__GNUC__) - asm volatile("" : : "g"(address) : "memory"); - #elif defined(_MSC_VER) - auto volatile consumed_address = address; - (void)consumed_address; - _ReadWriteBarrier(); - #else - static volatile void const* sink; - sink = address; - #endif - } - -} // namespace bl::isolated diff --git a/tests/unit_compile_tests/f128/isolated_runtime.h b/tests/unit_compile_tests/f128/isolated_runtime.h deleted file mode 100644 index fc40f92..0000000 --- a/tests/unit_compile_tests/f128/isolated_runtime.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -namespace bl -{ - struct f128; - struct f256; - -} // namespace bl - -namespace bl::isolated -{ - double runtime_f64(double value) noexcept; - int runtime_i32(int value) noexcept; - long runtime_long(long value) noexcept; - long double runtime_long_double(long double value) noexcept; - bl::f128 runtime_f128(double value) noexcept; - bl::f128 runtime_f128(double hi, double lo) noexcept; - bl::f256 runtime_f256(double value) noexcept; - bl::f256 runtime_f256(double x0, double x1, double x2, double x3) noexcept; - - void consume_address(void const* address) noexcept; - - template - void keep_value(T const& value) noexcept - { - consume_address(static_cast(&value)); - } - -} // namespace bl::isolated diff --git a/tests/unit_compile_tests/f128/main.cpp b/tests/unit_compile_tests/f128/main.cpp deleted file mode 100644 index 436de9e..0000000 --- a/tests/unit_compile_tests/f128/main.cpp +++ /dev/null @@ -1,149 +0,0 @@ -void isolated_f128_abs(); -void isolated_f128_acos(); -void isolated_f128_acosh(); -void isolated_f128_asin(); -void isolated_f128_asinh(); -void isolated_f128_atan(); -void isolated_f128_atan2(); -void isolated_f128_atanh(); -void isolated_f128_cbrt(); -void isolated_f128_ceil(); -void isolated_f128_copysign(); -void isolated_f128_cos(); -void isolated_f128_cosh(); -void isolated_f128_erf(); -void isolated_f128_erfc(); -void isolated_f128_exp(); -void isolated_f128_exp2(); -void isolated_f128_expm1(); -void isolated_f128_fabs(); -void isolated_f128_fdim(); -void isolated_f128_floor(); -void isolated_f128_fma(); -void isolated_f128_fmax(); -void isolated_f128_fmin(); -void isolated_f128_fmod(); -void isolated_f128_fpclassify(); -void isolated_f128_frexp(); -void isolated_f128_hypot(); -void isolated_f128_ilogb(); -void isolated_f128_isfinite(); -void isolated_f128_isgreater(); -void isolated_f128_isgreaterequal(); -void isolated_f128_isinf(); -void isolated_f128_isless(); -void isolated_f128_islessequal(); -void isolated_f128_islessgreater(); -void isolated_f128_isnan(); -void isolated_f128_isnormal(); -void isolated_f128_isunordered(); -void isolated_f128_ldexp(); -void isolated_f128_lgamma(); -void isolated_f128_llrint(); -void isolated_f128_llround(); -void isolated_f128_log(); -void isolated_f128_log10(); -void isolated_f128_log1p(); -void isolated_f128_log2(); -void isolated_f128_logb(); -void isolated_f128_lrint(); -void isolated_f128_lround(); -void isolated_f128_modf(); -void isolated_f128_nearbyint(); -void isolated_f128_nextafter(); -void isolated_f128_nexttoward(); -void isolated_f128_nexttoward_f128(); -void isolated_f128_pow(); -void isolated_f128_pow_double(); -void isolated_f128_remainder(); -void isolated_f128_remquo(); -void isolated_f128_rint(); -void isolated_f128_round(); -void isolated_f128_scalbln(); -void isolated_f128_scalbn(); -void isolated_f128_signbit(); -void isolated_f128_sin(); -void isolated_f128_sincos(); -void isolated_f128_sinh(); -void isolated_f128_sqrt(); -void isolated_f128_tan(); -void isolated_f128_tanh(); -void isolated_f128_tgamma(); -void isolated_f128_trunc(); - -int main() -{ - isolated_f128_abs(); - isolated_f128_acos(); - isolated_f128_acosh(); - isolated_f128_asin(); - isolated_f128_asinh(); - isolated_f128_atan(); - isolated_f128_atan2(); - isolated_f128_atanh(); - isolated_f128_cbrt(); - isolated_f128_ceil(); - isolated_f128_copysign(); - isolated_f128_cos(); - isolated_f128_cosh(); - isolated_f128_erf(); - isolated_f128_erfc(); - isolated_f128_exp(); - isolated_f128_exp2(); - isolated_f128_expm1(); - isolated_f128_fabs(); - isolated_f128_fdim(); - isolated_f128_floor(); - isolated_f128_fma(); - isolated_f128_fmax(); - isolated_f128_fmin(); - isolated_f128_fmod(); - isolated_f128_fpclassify(); - isolated_f128_frexp(); - isolated_f128_hypot(); - isolated_f128_ilogb(); - isolated_f128_isfinite(); - isolated_f128_isgreater(); - isolated_f128_isgreaterequal(); - isolated_f128_isinf(); - isolated_f128_isless(); - isolated_f128_islessequal(); - isolated_f128_islessgreater(); - isolated_f128_isnan(); - isolated_f128_isnormal(); - isolated_f128_isunordered(); - isolated_f128_ldexp(); - isolated_f128_lgamma(); - isolated_f128_llrint(); - isolated_f128_llround(); - isolated_f128_log(); - isolated_f128_log10(); - isolated_f128_log1p(); - isolated_f128_log2(); - isolated_f128_logb(); - isolated_f128_lrint(); - isolated_f128_lround(); - isolated_f128_modf(); - isolated_f128_nearbyint(); - isolated_f128_nextafter(); - isolated_f128_nexttoward(); - isolated_f128_nexttoward_f128(); - isolated_f128_pow(); - isolated_f128_pow_double(); - isolated_f128_remainder(); - isolated_f128_remquo(); - isolated_f128_rint(); - isolated_f128_round(); - isolated_f128_scalbln(); - isolated_f128_scalbn(); - isolated_f128_signbit(); - isolated_f128_sin(); - isolated_f128_sincos(); - isolated_f128_sinh(); - isolated_f128_sqrt(); - isolated_f128_tan(); - isolated_f128_tanh(); - isolated_f128_tgamma(); - isolated_f128_trunc(); - return 0; -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_abs.cpp b/tests/unit_compile_tests/f256/isolated_f256_abs.cpp deleted file mode 100644 index 444db9c..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_abs.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_abs() -{ - bl::f256 input = bl::isolated::runtime_f256(-0.123456789); - bl::f256 value = bl::abs(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_acos.cpp b/tests/unit_compile_tests/f256/isolated_f256_acos.cpp deleted file mode 100644 index fa4b4be..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_acos.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_acos() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::acos(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_acosh.cpp b/tests/unit_compile_tests/f256/isolated_f256_acosh.cpp deleted file mode 100644 index faee6ed..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_acosh.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_acosh() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::acosh(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_asin.cpp b/tests/unit_compile_tests/f256/isolated_f256_asin.cpp deleted file mode 100644 index d0631d2..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_asin.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_asin() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::asin(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_asinh.cpp b/tests/unit_compile_tests/f256/isolated_f256_asinh.cpp deleted file mode 100644 index f16db75..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_asinh.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_asinh() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::asinh(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_atan.cpp b/tests/unit_compile_tests/f256/isolated_f256_atan.cpp deleted file mode 100644 index a589b7e..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_atan.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_atan() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::atan(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_atan2.cpp b/tests/unit_compile_tests/f256/isolated_f256_atan2.cpp deleted file mode 100644 index 2b0f971..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_atan2.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_atan2() -{ - bl::f256 y = bl::isolated::runtime_f256(0.123456789); - bl::f256 x = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::atan2(y, x); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_atanh.cpp b/tests/unit_compile_tests/f256/isolated_f256_atanh.cpp deleted file mode 100644 index 2cf52f9..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_atanh.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_atanh() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::atanh(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_cbrt.cpp b/tests/unit_compile_tests/f256/isolated_f256_cbrt.cpp deleted file mode 100644 index 7ffef4a..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_cbrt.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_cbrt() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::cbrt(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_ceil.cpp b/tests/unit_compile_tests/f256/isolated_f256_ceil.cpp deleted file mode 100644 index 1e16e47..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_ceil.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_ceil() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::ceil(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_copysign.cpp b/tests/unit_compile_tests/f256/isolated_f256_copysign.cpp deleted file mode 100644 index 47be3f9..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_copysign.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_copysign() -{ - bl::f256 x = bl::isolated::runtime_f256(0.123456789); - bl::f256 y = bl::isolated::runtime_f256(-1.23456789); - bl::f256 value = bl::copysign(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_cos.cpp b/tests/unit_compile_tests/f256/isolated_f256_cos.cpp deleted file mode 100644 index 397ab0f..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_cos.cpp +++ /dev/null @@ -1,11 +0,0 @@ - -#include -#include "isolated_runtime.h" - -void isolated_f256_cos() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::cos(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_cosh.cpp b/tests/unit_compile_tests/f256/isolated_f256_cosh.cpp deleted file mode 100644 index 8c0bf8a..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_cosh.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_cosh() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::cosh(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_erf.cpp b/tests/unit_compile_tests/f256/isolated_f256_erf.cpp deleted file mode 100644 index b1a89df..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_erf.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_erf() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::erf(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_erfc.cpp b/tests/unit_compile_tests/f256/isolated_f256_erfc.cpp deleted file mode 100644 index fd6fece..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_erfc.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_erfc() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::erfc(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_exp.cpp b/tests/unit_compile_tests/f256/isolated_f256_exp.cpp deleted file mode 100644 index 6cfbaa1..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_exp.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_exp() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::exp(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_exp2.cpp b/tests/unit_compile_tests/f256/isolated_f256_exp2.cpp deleted file mode 100644 index 00b42bc..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_exp2.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_exp2() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::exp2(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_expm1.cpp b/tests/unit_compile_tests/f256/isolated_f256_expm1.cpp deleted file mode 100644 index 38c0a7b..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_expm1.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_expm1() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::expm1(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_f128_interop_f128_first.cpp b/tests/unit_compile_tests/f256/isolated_f256_f128_interop_f128_first.cpp deleted file mode 100644 index b14edc5..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_f128_interop_f128_first.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include -#include - -namespace -{ - [[nodiscard]] constexpr bool check_f128_first_interop() - { - bl::f128_s narrow{ 1.0, 0x1p-60 }; - bl::f256 wide{ narrow }; - bl::f256_s sum = narrow + wide; - bl::f256_s product = wide * narrow; - wide += narrow; - - const bl::f128_s roundtrip = static_cast(wide); - return sum.x0 != 0.0 && - product.x0 != 0.0 && - roundtrip.hi != 0.0; - } - - static_assert(check_f128_first_interop()); - -} // namespace - -void isolated_f256_f128_interop_f128_first() -{ -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_f128_interop_f256_first.cpp b/tests/unit_compile_tests/f256/isolated_f256_f128_interop_f256_first.cpp deleted file mode 100644 index 5e1c9c5..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_f128_interop_f256_first.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include -#include - -namespace -{ - [[nodiscard]] constexpr bool check_f256_first_interop() - { - bl::f128_s narrow{ 1.0, 0x1p-60 }; - bl::f256 wide{ narrow }; - bl::f256_s difference = wide - bl::f128_s{ 0.25, 0.0 }; - bl::f256_s quotient = narrow / wide; - wide *= narrow; - - const bl::f128_s roundtrip = static_cast(wide); - return difference.x0 != 0.0 && - quotient.x0 != 0.0 && - roundtrip.hi != 0.0; - } - - static_assert(check_f256_first_interop()); - -} // namespace - -void isolated_f256_f128_interop_f256_first() -{ -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_fabs.cpp b/tests/unit_compile_tests/f256/isolated_f256_fabs.cpp deleted file mode 100644 index f03f20f..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_fabs.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_fabs() -{ - bl::f256 input = bl::isolated::runtime_f256(-0.123456789); - bl::f256 value = bl::fabs(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_fdim.cpp b/tests/unit_compile_tests/f256/isolated_f256_fdim.cpp deleted file mode 100644 index 2f5c3ba..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_fdim.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_fdim() -{ - bl::f256 x = bl::isolated::runtime_f256(1.23456789); - bl::f256 y = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::fdim(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_floor.cpp b/tests/unit_compile_tests/f256/isolated_f256_floor.cpp deleted file mode 100644 index 6af2abc..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_floor.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_floor() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::floor(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_fma.cpp b/tests/unit_compile_tests/f256/isolated_f256_fma.cpp deleted file mode 100644 index 1d5e6b5..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_fma.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_fma() -{ - bl::f256 x = bl::isolated::runtime_f256(1.23456789); - bl::f256 y = bl::isolated::runtime_f256(0.123456789); - bl::f256 z = bl::isolated::runtime_f256(-0.333333333); - bl::f256 value = bl::fma(x, y, z); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_fmax.cpp b/tests/unit_compile_tests/f256/isolated_f256_fmax.cpp deleted file mode 100644 index d5e3d77..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_fmax.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_fmax() -{ - bl::f256 x = bl::isolated::runtime_f256(1.23456789); - bl::f256 y = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::fmax(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_fmin.cpp b/tests/unit_compile_tests/f256/isolated_f256_fmin.cpp deleted file mode 100644 index dfe9e71..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_fmin.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_fmin() -{ - bl::f256 x = bl::isolated::runtime_f256(1.23456789); - bl::f256 y = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::fmin(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_fmod.cpp b/tests/unit_compile_tests/f256/isolated_f256_fmod.cpp deleted file mode 100644 index 3776e92..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_fmod.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_fmod() -{ - bl::f256 x = bl::isolated::runtime_f256(1.23456789); - bl::f256 y = bl::isolated::runtime_f256(0.75); - bl::f256 value = bl::fmod(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_fpclassify.cpp b/tests/unit_compile_tests/f256/isolated_f256_fpclassify.cpp deleted file mode 100644 index fdf5c28..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_fpclassify.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_fpclassify() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - int value = bl::fpclassify(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_frexp.cpp b/tests/unit_compile_tests/f256/isolated_f256_frexp.cpp deleted file mode 100644 index 485cac7..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_frexp.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_frexp() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - int exponent = 0; - bl::f256 value = bl::frexp(input, &exponent); - - bl::isolated::keep_value(value); - bl::isolated::keep_value(exponent); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_hypot.cpp b/tests/unit_compile_tests/f256/isolated_f256_hypot.cpp deleted file mode 100644 index 6afd8cd..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_hypot.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_hypot() -{ - bl::f256 x = bl::isolated::runtime_f256(1.23456789); - bl::f256 y = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::hypot(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_ilogb.cpp b/tests/unit_compile_tests/f256/isolated_f256_ilogb.cpp deleted file mode 100644 index 9ccb20b..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_ilogb.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_ilogb() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - int value = bl::ilogb(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_isfinite.cpp b/tests/unit_compile_tests/f256/isolated_f256_isfinite.cpp deleted file mode 100644 index 307864c..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_isfinite.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_isfinite() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bool value = bl::isfinite(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_isgreater.cpp b/tests/unit_compile_tests/f256/isolated_f256_isgreater.cpp deleted file mode 100644 index 87a02f9..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_isgreater.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_isgreater() -{ - bl::f256 a = bl::isolated::runtime_f256(1.23456789); - bl::f256 b = bl::isolated::runtime_f256(0.123456789); - bool value = bl::isgreater(a, b); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_isgreaterequal.cpp b/tests/unit_compile_tests/f256/isolated_f256_isgreaterequal.cpp deleted file mode 100644 index 23bfa36..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_isgreaterequal.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_isgreaterequal() -{ - bl::f256 a = bl::isolated::runtime_f256(1.23456789); - bl::f256 b = bl::isolated::runtime_f256(0.123456789); - bool value = bl::isgreaterequal(a, b); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_isinf.cpp b/tests/unit_compile_tests/f256/isolated_f256_isinf.cpp deleted file mode 100644 index 588870e..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_isinf.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_isinf() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bool value = bl::isinf(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_isless.cpp b/tests/unit_compile_tests/f256/isolated_f256_isless.cpp deleted file mode 100644 index 3fa5b53..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_isless.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_isless() -{ - bl::f256 a = bl::isolated::runtime_f256(0.123456789); - bl::f256 b = bl::isolated::runtime_f256(1.23456789); - bool value = bl::isless(a, b); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_islessequal.cpp b/tests/unit_compile_tests/f256/isolated_f256_islessequal.cpp deleted file mode 100644 index 5448ee8..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_islessequal.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_islessequal() -{ - bl::f256 a = bl::isolated::runtime_f256(0.123456789); - bl::f256 b = bl::isolated::runtime_f256(1.23456789); - bool value = bl::islessequal(a, b); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_islessgreater.cpp b/tests/unit_compile_tests/f256/isolated_f256_islessgreater.cpp deleted file mode 100644 index 8595cdd..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_islessgreater.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_islessgreater() -{ - bl::f256 a = bl::isolated::runtime_f256(0.123456789); - bl::f256 b = bl::isolated::runtime_f256(1.23456789); - bool value = bl::islessgreater(a, b); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_isnan.cpp b/tests/unit_compile_tests/f256/isolated_f256_isnan.cpp deleted file mode 100644 index 1a3a664..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_isnan.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_isnan() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bool value = bl::isnan(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_isnormal.cpp b/tests/unit_compile_tests/f256/isolated_f256_isnormal.cpp deleted file mode 100644 index 432962a..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_isnormal.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_isnormal() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bool value = bl::isnormal(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_isunordered.cpp b/tests/unit_compile_tests/f256/isolated_f256_isunordered.cpp deleted file mode 100644 index fd100a5..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_isunordered.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_isunordered() -{ - bl::f256 a = bl::isolated::runtime_f256(0.123456789); - bl::f256 b = bl::isolated::runtime_f256(1.23456789); - bool value = bl::isunordered(a, b); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_ldexp.cpp b/tests/unit_compile_tests/f256/isolated_f256_ldexp.cpp deleted file mode 100644 index 1efa0da..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_ldexp.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_ldexp() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - int exponent = bl::isolated::runtime_i32(7); - bl::f256 value = bl::ldexp(input, exponent); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_lgamma.cpp b/tests/unit_compile_tests/f256/isolated_f256_lgamma.cpp deleted file mode 100644 index 4ae0cfb..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_lgamma.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_lgamma() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::lgamma(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_llrint.cpp b/tests/unit_compile_tests/f256/isolated_f256_llrint.cpp deleted file mode 100644 index 17ded16..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_llrint.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_llrint() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - long long value = bl::llrint(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_llround.cpp b/tests/unit_compile_tests/f256/isolated_f256_llround.cpp deleted file mode 100644 index b55a945..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_llround.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_llround() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - long long value = bl::llround(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_log.cpp b/tests/unit_compile_tests/f256/isolated_f256_log.cpp deleted file mode 100644 index 776fe4f..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_log.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_log() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::log(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_log10.cpp b/tests/unit_compile_tests/f256/isolated_f256_log10.cpp deleted file mode 100644 index 02d489a..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_log10.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_log10() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::log10(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_log1p.cpp b/tests/unit_compile_tests/f256/isolated_f256_log1p.cpp deleted file mode 100644 index 493a83a..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_log1p.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_log1p() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::log1p(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_log2.cpp b/tests/unit_compile_tests/f256/isolated_f256_log2.cpp deleted file mode 100644 index f899e83..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_log2.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_log2() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::log2(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_logb.cpp b/tests/unit_compile_tests/f256/isolated_f256_logb.cpp deleted file mode 100644 index b0b8100..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_logb.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_logb() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::logb(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_lrint.cpp b/tests/unit_compile_tests/f256/isolated_f256_lrint.cpp deleted file mode 100644 index 6f8cc45..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_lrint.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_lrint() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - long value = bl::lrint(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_lround.cpp b/tests/unit_compile_tests/f256/isolated_f256_lround.cpp deleted file mode 100644 index 00645bc..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_lround.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_lround() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - long value = bl::lround(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_modf.cpp b/tests/unit_compile_tests/f256/isolated_f256_modf.cpp deleted file mode 100644 index b1d4388..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_modf.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_modf() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 integer_part; - bl::f256 value = bl::modf(input, &integer_part); - - bl::isolated::keep_value(value); - bl::isolated::keep_value(integer_part); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_nearbyint.cpp b/tests/unit_compile_tests/f256/isolated_f256_nearbyint.cpp deleted file mode 100644 index 814fa40..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_nearbyint.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_nearbyint() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::nearbyint(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_nextafter.cpp b/tests/unit_compile_tests/f256/isolated_f256_nextafter.cpp deleted file mode 100644 index a59e488..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_nextafter.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_nextafter() -{ - bl::f256 from = bl::isolated::runtime_f256(0.123456789); - bl::f256 to = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::nextafter(from, to); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_nexttoward.cpp b/tests/unit_compile_tests/f256/isolated_f256_nexttoward.cpp deleted file mode 100644 index 51ad711..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_nexttoward.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_nexttoward() -{ - bl::f256 from = bl::isolated::runtime_f256(0.123456789); - long double to = bl::isolated::runtime_long_double(1.23456789L); - bl::f256 value = bl::nexttoward(from, to); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_nexttoward_f256.cpp b/tests/unit_compile_tests/f256/isolated_f256_nexttoward_f256.cpp deleted file mode 100644 index db2c7cc..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_nexttoward_f256.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_nexttoward_f256() -{ - bl::f256 from = bl::isolated::runtime_f256(0.123456789); - bl::f256 to = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::nexttoward(from, to); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_pow.cpp b/tests/unit_compile_tests/f256/isolated_f256_pow.cpp deleted file mode 100644 index cfc2ad0..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_pow.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_pow() -{ - bl::f256 x = bl::isolated::runtime_f256(1.23456789); - bl::f256 y = bl::isolated::runtime_f256(2.5); - bl::f256 value = bl::pow(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_pow_double.cpp b/tests/unit_compile_tests/f256/isolated_f256_pow_double.cpp deleted file mode 100644 index dd9551e..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_pow_double.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_pow_double() -{ - bl::f256 x = bl::isolated::runtime_f256(1.23456789); - double y = bl::isolated::runtime_f64(2.5); - bl::f256 value = bl::pow(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_remainder.cpp b/tests/unit_compile_tests/f256/isolated_f256_remainder.cpp deleted file mode 100644 index 06c2148..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_remainder.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_remainder() -{ - bl::f256 x = bl::isolated::runtime_f256(1.23456789); - bl::f256 y = bl::isolated::runtime_f256(0.75); - bl::f256 value = bl::remainder(x, y); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_remquo.cpp b/tests/unit_compile_tests/f256/isolated_f256_remquo.cpp deleted file mode 100644 index e91dc37..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_remquo.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_remquo() -{ - bl::f256 x = bl::isolated::runtime_f256(1.23456789); - bl::f256 y = bl::isolated::runtime_f256(0.75); - int quotient = 0; - bl::f256 value = bl::remquo(x, y, "ient); - - bl::isolated::keep_value(value); - bl::isolated::keep_value(quotient); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_rint.cpp b/tests/unit_compile_tests/f256/isolated_f256_rint.cpp deleted file mode 100644 index 60dffe6..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_rint.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_rint() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::rint(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_round.cpp b/tests/unit_compile_tests/f256/isolated_f256_round.cpp deleted file mode 100644 index e045f92..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_round.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_round() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::round(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_scalbln.cpp b/tests/unit_compile_tests/f256/isolated_f256_scalbln.cpp deleted file mode 100644 index c355c28..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_scalbln.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_scalbln() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - long exponent = bl::isolated::runtime_long(7); - bl::f256 value = bl::scalbln(input, exponent); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_scalbn.cpp b/tests/unit_compile_tests/f256/isolated_f256_scalbn.cpp deleted file mode 100644 index 15d2677..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_scalbn.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_scalbn() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - int exponent = bl::isolated::runtime_i32(7); - bl::f256 value = bl::scalbn(input, exponent); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_signbit.cpp b/tests/unit_compile_tests/f256/isolated_f256_signbit.cpp deleted file mode 100644 index 5b3c619..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_signbit.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_signbit() -{ - bl::f256 input = bl::isolated::runtime_f256(-0.123456789); - bool value = bl::signbit(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_sin.cpp b/tests/unit_compile_tests/f256/isolated_f256_sin.cpp deleted file mode 100644 index 8af26fc..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_sin.cpp +++ /dev/null @@ -1,11 +0,0 @@ - -#include -#include "isolated_runtime.h" - -void isolated_f256_sin() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::sin(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_sincos.cpp b/tests/unit_compile_tests/f256/isolated_f256_sincos.cpp deleted file mode 100644 index 9dd7127..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_sincos.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include "isolated_runtime.h" - -namespace -{ - struct f256_sincos_pair - { - bl::f256 c; - bl::f256 s; - }; - -} // namespace - -void isolated_f256_sincos() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 sine; - bl::f256 cosine; - bool value = bl::sincos(input, sine, cosine); - f256_sincos_pair out{}; - bool vector_value = bl::sincos(input, out); - f256_sincos_pair returned = bl::sincos(input); - - bl::isolated::keep_value(value); - bl::isolated::keep_value(vector_value); - bl::isolated::keep_value(sine); - bl::isolated::keep_value(cosine); - bl::isolated::keep_value(out.c); - bl::isolated::keep_value(out.s); - bl::isolated::keep_value(returned.c); - bl::isolated::keep_value(returned.s); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_sinh.cpp b/tests/unit_compile_tests/f256/isolated_f256_sinh.cpp deleted file mode 100644 index 54c1879..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_sinh.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_sinh() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::sinh(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_sqrt.cpp b/tests/unit_compile_tests/f256/isolated_f256_sqrt.cpp deleted file mode 100644 index 37c130d..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_sqrt.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_sqrt() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::sqrt(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_tan.cpp b/tests/unit_compile_tests/f256/isolated_f256_tan.cpp deleted file mode 100644 index ab1aaca..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_tan.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_tan() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::tan(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_tanh.cpp b/tests/unit_compile_tests/f256/isolated_f256_tanh.cpp deleted file mode 100644 index 2b07747..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_tanh.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_tanh() -{ - bl::f256 input = bl::isolated::runtime_f256(0.123456789); - bl::f256 value = bl::tanh(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_tgamma.cpp b/tests/unit_compile_tests/f256/isolated_f256_tgamma.cpp deleted file mode 100644 index 8162147..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_tgamma.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_tgamma() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::tgamma(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_f256_trunc.cpp b/tests/unit_compile_tests/f256/isolated_f256_trunc.cpp deleted file mode 100644 index d04f106..0000000 --- a/tests/unit_compile_tests/f256/isolated_f256_trunc.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include "isolated_runtime.h" - -void isolated_f256_trunc() -{ - bl::f256 input = bl::isolated::runtime_f256(1.23456789); - bl::f256 value = bl::trunc(input); - - bl::isolated::keep_value(value); -} diff --git a/tests/unit_compile_tests/f256/isolated_runtime.cpp b/tests/unit_compile_tests/f256/isolated_runtime.cpp deleted file mode 100644 index fff2f80..0000000 --- a/tests/unit_compile_tests/f256/isolated_runtime.cpp +++ /dev/null @@ -1,93 +0,0 @@ -#include "isolated_runtime.h" - -#include -#include - -#if defined(_MSC_VER) -#include -#pragma intrinsic(_ReadWriteBarrier) -#endif - -#if defined(_MSC_VER) -#define BL_ISOLATED_NOINLINE __declspec(noinline) -#elif defined(__clang__) || defined(__GNUC__) -#define BL_ISOLATED_NOINLINE __attribute__((noinline)) -#else -#define BL_ISOLATED_NOINLINE -#endif - -namespace bl::isolated -{ - BL_ISOLATED_NOINLINE double runtime_f64(double value) noexcept - { - static volatile double sink; - sink = value; - return sink; - } - - BL_ISOLATED_NOINLINE int runtime_i32(int value) noexcept - { - static volatile int sink; - sink = value; - return sink; - } - - BL_ISOLATED_NOINLINE long runtime_long(long value) noexcept - { - static volatile long sink; - sink = value; - return sink; - } - - BL_ISOLATED_NOINLINE long double runtime_long_double(long double value) noexcept - { - static volatile long double sink; - sink = value; - return sink; - } - - BL_ISOLATED_NOINLINE bl::f128 runtime_f128(double value) noexcept - { - return runtime_f128(value, 0.0); - } - - BL_ISOLATED_NOINLINE bl::f128 runtime_f128(double hi, double lo) noexcept - { - static volatile double sink[2]; - sink[0] = hi; - sink[1] = lo; - - return bl::f128{ sink[0], sink[1] }; - } - - BL_ISOLATED_NOINLINE bl::f256 runtime_f256(double value) noexcept - { - return runtime_f256(value, 0.0, 0.0, 0.0); - } - - BL_ISOLATED_NOINLINE bl::f256 runtime_f256(double x0, double x1, double x2, double x3) noexcept - { - static volatile double sink[4]; - sink[0] = x0; - sink[1] = x1; - sink[2] = x2; - sink[3] = x3; - - return bl::f256{ sink[0], sink[1], sink[2], sink[3] }; - } - - BL_ISOLATED_NOINLINE void consume_address(void const* address) noexcept - { - #if defined(__clang__) || defined(__GNUC__) - asm volatile("" : : "g"(address) : "memory"); - #elif defined(_MSC_VER) - auto volatile consumed_address = address; - (void)consumed_address; - _ReadWriteBarrier(); - #else - static volatile void const* sink; - sink = address; - #endif - } - -} // namespace bl::isolated diff --git a/tests/unit_compile_tests/f256/isolated_runtime.h b/tests/unit_compile_tests/f256/isolated_runtime.h deleted file mode 100644 index fc40f92..0000000 --- a/tests/unit_compile_tests/f256/isolated_runtime.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -namespace bl -{ - struct f128; - struct f256; - -} // namespace bl - -namespace bl::isolated -{ - double runtime_f64(double value) noexcept; - int runtime_i32(int value) noexcept; - long runtime_long(long value) noexcept; - long double runtime_long_double(long double value) noexcept; - bl::f128 runtime_f128(double value) noexcept; - bl::f128 runtime_f128(double hi, double lo) noexcept; - bl::f256 runtime_f256(double value) noexcept; - bl::f256 runtime_f256(double x0, double x1, double x2, double x3) noexcept; - - void consume_address(void const* address) noexcept; - - template - void keep_value(T const& value) noexcept - { - consume_address(static_cast(&value)); - } - -} // namespace bl::isolated diff --git a/tests/unit_compile_tests/f256/main.cpp b/tests/unit_compile_tests/f256/main.cpp deleted file mode 100644 index 4cd4798..0000000 --- a/tests/unit_compile_tests/f256/main.cpp +++ /dev/null @@ -1,149 +0,0 @@ -void isolated_f256_abs(); -void isolated_f256_acos(); -void isolated_f256_acosh(); -void isolated_f256_asin(); -void isolated_f256_asinh(); -void isolated_f256_atan(); -void isolated_f256_atan2(); -void isolated_f256_atanh(); -void isolated_f256_cbrt(); -void isolated_f256_ceil(); -void isolated_f256_copysign(); -void isolated_f256_cos(); -void isolated_f256_cosh(); -void isolated_f256_erf(); -void isolated_f256_erfc(); -void isolated_f256_exp(); -void isolated_f256_exp2(); -void isolated_f256_expm1(); -void isolated_f256_fabs(); -void isolated_f256_fdim(); -void isolated_f256_floor(); -void isolated_f256_fma(); -void isolated_f256_fmax(); -void isolated_f256_fmin(); -void isolated_f256_fmod(); -void isolated_f256_fpclassify(); -void isolated_f256_frexp(); -void isolated_f256_hypot(); -void isolated_f256_ilogb(); -void isolated_f256_isfinite(); -void isolated_f256_isgreater(); -void isolated_f256_isgreaterequal(); -void isolated_f256_isinf(); -void isolated_f256_isless(); -void isolated_f256_islessequal(); -void isolated_f256_islessgreater(); -void isolated_f256_isnan(); -void isolated_f256_isnormal(); -void isolated_f256_isunordered(); -void isolated_f256_ldexp(); -void isolated_f256_lgamma(); -void isolated_f256_llrint(); -void isolated_f256_llround(); -void isolated_f256_log(); -void isolated_f256_log10(); -void isolated_f256_log1p(); -void isolated_f256_log2(); -void isolated_f256_logb(); -void isolated_f256_lrint(); -void isolated_f256_lround(); -void isolated_f256_modf(); -void isolated_f256_nearbyint(); -void isolated_f256_nextafter(); -void isolated_f256_nexttoward(); -void isolated_f256_nexttoward_f256(); -void isolated_f256_pow(); -void isolated_f256_pow_double(); -void isolated_f256_remainder(); -void isolated_f256_remquo(); -void isolated_f256_rint(); -void isolated_f256_round(); -void isolated_f256_scalbln(); -void isolated_f256_scalbn(); -void isolated_f256_signbit(); -void isolated_f256_sin(); -void isolated_f256_sincos(); -void isolated_f256_sinh(); -void isolated_f256_sqrt(); -void isolated_f256_tan(); -void isolated_f256_tanh(); -void isolated_f256_tgamma(); -void isolated_f256_trunc(); - -int main() -{ - isolated_f256_abs(); - isolated_f256_acos(); - isolated_f256_acosh(); - isolated_f256_asin(); - isolated_f256_asinh(); - isolated_f256_atan(); - isolated_f256_atan2(); - isolated_f256_atanh(); - isolated_f256_cbrt(); - isolated_f256_ceil(); - isolated_f256_copysign(); - isolated_f256_cos(); - isolated_f256_cosh(); - isolated_f256_erf(); - isolated_f256_erfc(); - isolated_f256_exp(); - isolated_f256_exp2(); - isolated_f256_expm1(); - isolated_f256_fabs(); - isolated_f256_fdim(); - isolated_f256_floor(); - isolated_f256_fma(); - isolated_f256_fmax(); - isolated_f256_fmin(); - isolated_f256_fmod(); - isolated_f256_fpclassify(); - isolated_f256_frexp(); - isolated_f256_hypot(); - isolated_f256_ilogb(); - isolated_f256_isfinite(); - isolated_f256_isgreater(); - isolated_f256_isgreaterequal(); - isolated_f256_isinf(); - isolated_f256_isless(); - isolated_f256_islessequal(); - isolated_f256_islessgreater(); - isolated_f256_isnan(); - isolated_f256_isnormal(); - isolated_f256_isunordered(); - isolated_f256_ldexp(); - isolated_f256_lgamma(); - isolated_f256_llrint(); - isolated_f256_llround(); - isolated_f256_log(); - isolated_f256_log10(); - isolated_f256_log1p(); - isolated_f256_log2(); - isolated_f256_logb(); - isolated_f256_lrint(); - isolated_f256_lround(); - isolated_f256_modf(); - isolated_f256_nearbyint(); - isolated_f256_nextafter(); - isolated_f256_nexttoward(); - isolated_f256_nexttoward_f256(); - isolated_f256_pow(); - isolated_f256_pow_double(); - isolated_f256_remainder(); - isolated_f256_remquo(); - isolated_f256_rint(); - isolated_f256_round(); - isolated_f256_scalbln(); - isolated_f256_scalbn(); - isolated_f256_signbit(); - isolated_f256_sin(); - isolated_f256_sincos(); - isolated_f256_sinh(); - isolated_f256_sqrt(); - isolated_f256_tan(); - isolated_f256_tanh(); - isolated_f256_tgamma(); - isolated_f256_trunc(); - return 0; -} diff --git a/validation/CMakeLists.txt b/validation/CMakeLists.txt new file mode 100644 index 0000000..7091f06 --- /dev/null +++ b/validation/CMakeLists.txt @@ -0,0 +1,128 @@ +find_package(Catch2 3 CONFIG REQUIRED) +find_package(Python3 COMPONENTS Interpreter REQUIRED) +include(Catch) + +set(FLTX_VALIDATION_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") +set(FLTX_VALIDATION_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}") +set(FLTX_TESTS_SUPPORT_DIR "${FLTX_VALIDATION_SOURCE_DIR}/support") + +include("${PROJECT_SOURCE_DIR}/cmake/validation/fltxValidationCommon.cmake") +include("${PROJECT_SOURCE_DIR}/cmake/validation/fltxValidationDependencies.cmake") +include("${PROJECT_SOURCE_DIR}/cmake/validation/fltxValidationTests.cmake") +include("${PROJECT_SOURCE_DIR}/cmake/validation/fltxValidationPackage.cmake") +include("${PROJECT_SOURCE_DIR}/cmake/validation/fltxValidationRunners.cmake") + +add_custom_target(fltx_compile_contract + DEPENDS + fltx_header_contract + fltx_cxx20_contract + fltx_cxx23_contract + fltx_contract_tests + fltx_contract_tests_fastmath + fltx_constexpr_tests + fltx_constexpr_tests_fastmath + fltx_package_smoke +) + +add_custom_target(fltx_metrics_compile_contract) +if(FLTX_METRICS_TLFLOAT_CONTRACT_TARGET) + add_dependencies(fltx_metrics_compile_contract + ${FLTX_METRICS_TLFLOAT_CONTRACT_TARGET} + ) +endif() +if(FLTX_METRICS_QDPP_CONTRACT_TARGET) + add_dependencies(fltx_metrics_compile_contract + ${FLTX_METRICS_QDPP_CONTRACT_TARGET} + ) +endif() + +if(BUILD_TESTING) + set(FLTX_CI_ACCURACY_DIR + "${FLTX_VALIDATION_BINARY_DIR}/ci_accuracy" + ) + set(FLTX_CI_ACCURACY_COMMANDS) + foreach(precision f32 f64 f128 f256) + # Runtime f32/f64 deliberately delegate to the platform libm and use + # it as their behavioural baseline. Preserve numerical findings in + # the CI CSV without failing CI for the platform's own accuracy. + # Consumer fast-math permits reassociation, signed-zero loss, and + # subnormal flushing, so both optimized runtime lanes remain evidence + # rather than gates for every precision. Runner faults still fail under + # --advisory. Genuine constexpr tests and strict f128/f256 accuracy keep + # gating their documented contracts. + set(FLTX_CI_RUNTIME_ACCURACY_POLICY) + if(precision STREQUAL "f32" OR precision STREQUAL "f64") + set(FLTX_CI_RUNTIME_ACCURACY_POLICY --advisory) + endif() + + list(APPEND FLTX_CI_ACCURACY_COMMANDS + COMMAND fltx_ci_accuracy + --precision "${precision}" + --output "${FLTX_CI_ACCURACY_DIR}/accuracy_${precision}.csv" + --run-id ci-standard + --source-revision ci + --sample-mode standard + ${FLTX_CI_RUNTIME_ACCURACY_POLICY} + COMMAND fltx_constexpr_accuracy + --precision "${precision}" + --output "${FLTX_CI_ACCURACY_DIR}/constexpr_accuracy_${precision}.csv" + --run-id ci-standard + --source-revision ci + --sample-mode standard + COMMAND fltx_accuracy_fastmath + --precision "${precision}" + --output "${FLTX_CI_ACCURACY_DIR}/accuracy_${precision}_fastmath.csv" + --run-id ci-standard + --source-revision ci + --sample-mode standard + --advisory + COMMAND fltx_constexpr_accuracy_fastmath + --precision "${precision}" + --output "${FLTX_CI_ACCURACY_DIR}/constexpr_accuracy_${precision}_fastmath.csv" + --run-id ci-standard + --source-revision ci + --sample-mode standard + --advisory + ) + endforeach() + + # Badge workflows build this target. Strict contracts, genuine constexpr + # checks, and tooling run through CTest, while accuracy uses the standard + # corpus for every type and both runtime/constexpr-algorithm + # libraries. The strict CI runner contains FLTX rows only; external + # comparison rows and dependency smoke checks belong to metrics targets. + # The consumer-fast-math contract executable is still compiled + # by fltx_compile_contract, but its full semantic suite is diagnostic: real + # fast-math permits reassociation, signed-zero loss, and subnormal flushing. + # Performance telemetry and canonical metrics publication remain separate + # release-evidence tasks. + add_custom_target(fltx_ci_checks + COMMAND "${CMAKE_COMMAND}" -E make_directory + "${FLTX_CI_ACCURACY_DIR}" + COMMAND "${CMAKE_CTEST_COMMAND}" + --test-dir "${CMAKE_BINARY_DIR}" + --build-config "$" + --output-on-failure + -L "contracts|constexpr|package|tooling" + -LE "accuracy|benchmark|contracts-fastmath" + ${FLTX_CI_ACCURACY_COMMANDS} + DEPENDS + fltx_compile_contract + fltx_ci_accuracy + fltx_constexpr_accuracy + fltx_accuracy_fastmath + fltx_constexpr_accuracy_fastmath + USES_TERMINAL + COMMENT "Running fltx contracts and standard accuracy corpus" + VERBATIM + ) + + add_test( + NAME fltx.checks.tools + COMMAND "${Python3_EXECUTABLE}" + "${PROJECT_SOURCE_DIR}/validation/_internal/test_checks.py" + ) + set_tests_properties(fltx.checks.tools PROPERTIES LABELS "fltx;tooling") +endif() + +add_subdirectory(benchmarks) diff --git a/validation/COVERAGE.md b/validation/COVERAGE.md new file mode 100644 index 0000000..1a7e2ea --- /dev/null +++ b/validation/COVERAGE.md @@ -0,0 +1,247 @@ +# fltx coverage ledger + +This is an implementation ledger, not a statement of intended coverage. An +entry names only validation coverage that exists today. `—` means that the lane is +not implemented yet. + +Lanes: + +- **C**: behavioural Catch2 contract; +- **A**: differential accuracy row; +- **CE**: genuine constant evaluation (`static_assert`); +- **CA**: fixed-simulation constexpr-algorithm accuracy row; +- **O**: overload/return-type compile check; +- **B**: benchmark row; +- **H**: isolated public-header compile probe. + +**CA** is provided by `fltx_constexpr_accuracy`, which links an isolated +`FLTX_SIMULATE_FIXED_CONSTEVAL_MODE` library to the complete MPFR accuracy +runner. It exercises the constexpr algorithms with the same deterministic +domains, special values, and thresholds as normal runtime accuracy. Cross-path +bit identity is intentionally not a contract. + +Every public header has an **H** probe through `fltx_compile_contract`. +`contracts/overload_matrix.cpp` separately instantiates every ``-shaped +operation family across the native, integer, f128, f256, and mixed-rank +promotion boundaries. Header probes prove self-containment; the matrix proves +public call and return-type contracts. + +## Core and integration + +| Public family | Types exercised | C | CE / CA / O | A / B | Notes | +|---|---|---|---|---|---| +| f128/f256 storage and value construction, assignment, scalar/integer and cross-precision conversion | f128/f256 | `contracts/core.cpp` | CE: `constexpr/core.cpp`; O: `contracts/overloads.cpp`, `contracts/overload_matrix.cpp` | — | Covers representative signed/unsigned integer widths, native floats, storage/value types and both cross-precision directions | +| unary, binary and compound `+ - * /` | f128/f256 | `contracts/core.cpp` | CE: `constexpr/core.cpp`, `constexpr/accuracy.cpp`; CA: all; O: `contracts/overloads.cpp` | A: f32/f64/f128/f256; B: f128/f256 | Every distinct scalar category and cross-precision route is instantiated; runtime fast-math waives NaN, infinity, and signed-zero guarantees for basic f128/f256 arithmetic while genuine constant evaluation remains checked | +| comparison, `<=>`, unordered NaN behaviour | f128/f256 | `contracts/core.cpp` | CE: `constexpr/core.cpp` | B: six f128/f256 relational operators | | +| `approx_eq` and parity tolerances | same-precision f128/f256 | `contracts/approx_comparison.cpp` | CE: default and custom relative-threshold cases; O: accepted same-precision and rejected scalar/mixed/four-argument calls | — | Covers named defaults, scaling, signed zero, infinities, NaNs, invalid tolerances, symmetry, and exact threshold boundaries | +| classification, signed zero, subnormals, infinities and NaNs | all | `contracts/core.cpp` | CE: `constexpr/core.cpp` for f128/f256 | — | Includes unordered comparisons | +| `abs`, `fabs`, `sqr`, `clamp`, `recip` | f128/f256 | `contracts/math.cpp` | CE: `abs`, `clamp`, `recip`; CA: all except `clamp`; O: complete type matrix | A: all except `clamp`; B: f128/f256 helpers | `fabs` and `sqr` are instantiated as constexpr-capable APIs | +| aliases, concepts, rank, `common_float_type_t`, `FloatType` | all | `contracts/core.cpp` | O: `contracts/overloads.cpp`, `contracts/overload_matrix.cpp` | — | Includes cv/ref normalization and every precision-rank boundary | +| `numeric_limits`, `eps`, `highest`, `std::numbers` | f128/f256 storage/value | `contracts/core.cpp` | compile-time forwarding assertions | — | Covers nominal 106/212-bit epsilon, normal/subnormal range, exponent metadata, finite extrema, denormal policy, and constants; sparse arithmetic storage remains unrestricted | +| `std::hash` | f128/f256 storage/value | `contracts/core.cpp` | — | — | Signed zero, every limb, storage/value agreement, unordered containers, and deterministic infinity/NaN hashing | +| runtime/template dispatch helpers | all | `contracts/dispatch.cpp` | — | — | Covers type tags, raw/sparse enums, free/member/callable tables, multiple dimensions, invocation, counts, domain sizes and reports | +| installed `find_package` consumers | f128/f256 | `package/consumer.cpp` | strict, fast-math, injected-no-FMA AUTO variants | — | Includes FMA and cancellation/EFT-sensitive products | + +## Math + +The f128/f256 accuracy runner currently owns these numerical operations: + +`add`, `subtract`, `multiply`, `divide`, `fma`, `sqrt`, `cbrt`, `hypot`, +`sin`, `cos`, `tan`, `atan`, `atan2`, `asin`, `acos`, `exp`, `exp2`, +`expm1`, `log`, `log2`, `log10`, `log1p`, `pow`, `ipow`, `fmod`, +`remainder`, `sinh`, `cosh`, `tanh`, `asinh`, `acosh`, `atanh`, `erf`, +`erfc`, `lgamma`, `tgamma`, `abs`, `fabs`, `sqr`, `recip`, `fmin`, +`fmax`, `fdim`, `copysign`, `floor`, `ceil`, `trunc`, `round`, +`roundeven`, `lround`, `llround`, `round_decimals`, +`round_significant`, `remquo`, `modf`, `ldexp`, `scalbn`, +`scalbln`, `frexp`, `ilogb`, and `logb`. + +The f32/f64 accuracy runner owns the same applicable numerical set. Its +exponent, subnormal, cancellation and argument-reduction samples are generated +at the native type's range so float inputs do not overflow or collapse to +double-only test values. CTest owns the deterministic smoke runs; +`fltx_ci_checks` runs the 4,096-sample standard corpus for all four types through +both the normal and fixed-simulation runners. Explicit full and release metrics +workflows retain the 65,536-sample corpus, and `fltx_native_accuracy_full` +retains a standalone complete f32/f64 orchestration target. Detailed output +remains under the build tree. Native runtime f32/f64 threshold misses are +advisory platform-libm baseline evidence in both the orchestration target and +`fltx_ci_checks`; runner integrity still gates. Runtime and fixed-simulation accuracy under +consumer fast-math are advisory for every precision because reassociation can +invalidate expansion arithmetic and optimized runtime execution cannot +faithfully model the compiler's constant evaluator. Their direct CTest smoke +checks mirror that policy. Genuine f32/f64 numerical constant evaluation gates +the strict consumer, exact native special-value assertions compile in both +consumer profiles, the strict native fixed-simulation remains gating, and +strict f128/f256 accuracy thresholds remain gating. The full consumer-fast-math contract +executable is compiled and remains directly runnable, but its semantic suite is +diagnostic rather than gating because that compiler profile permits +reassociation, signed-zero loss, and subnormal flushing. Native accuracy is +never published in the f128/f256 summary tables. +The fixed-simulation consumer-fast-math accuracy runner reports `-` for its +special-value field because clang may lower the deliberate NaN/infinity probe +construction to a trap in that artificial mode. Real runtime fast-math, all +strict accuracy lanes, and the genuine constexpr corpus retain special-value +ownership. + +| Public family | C | CE | CA | O | A | B | +|---|---|---|---|---|---|---| +| `abs`, `fabs`, `sqr`, `recip`, `fmin`, `fmax`, `fdim`, `copysign`, `clamp` | `contracts/math.cpp` (all types) | `abs`, `clamp`, `recip` | all except `clamp` | complete matrix | all except `clamp` | f128/f256 helpers | +| `floor`, `ceil`, `trunc`, `round`, `roundeven` | `contracts/math.cpp` (all types) | yes | all types | complete matrix | all types | f128/f256 | +| `lround`, `llround` | `contracts/math.cpp` | yes | all types | complete matrix | all types | f128/f256 | +| `round_decimals`, `round_significant` | `contracts/math.cpp` | yes | all types | complete matrix | all types | f128/f256 | +| `fma` | `contracts/math.cpp`, `contracts/edge_cases.cpp`, `package/consumer.cpp` | arithmetic corpus | all types | complete mixed-rank matrix | all types | yes | +| `fmod`, `remainder`, `remquo` | `contracts/math.cpp` (all types), `contracts/edge_cases.cpp` | MPFR corpus plus `remquo` decomposition | all types | complete matrix | all three for all types | f128/f256 | +| `modf`, `frexp`, `ldexp`, `scalbn`, `scalbln`, `ilogb`, `logb` | `contracts/math.cpp` (all types) | yes | all types | complete matrix | all types | f128/f256 | +| `nextafter`, `nexttoward` | `contracts/math.cpp` (all types), `contracts/edge_cases.cpp` | exact nominal steps and boundaries in `constexpr/core.cpp` | — | complete target-type matrix, including extended `long double` where available | — | f128/f256 use binade-relative 106/212-bit steps without rounding ordinary math results | +| `sqrt`, `cbrt`, `hypot` | `contracts/math.cpp` (all types) | MPFR corpus; exact-family checks for all | all types | complete matrix | all types | all | +| `exp`, `exp2`, `expm1` | special values in `contracts/math.cpp` | MPFR corpus | all types | complete matrix | all types | all | +| `log`, `log2`, `log10`, `log1p`, `log_as_double` | `log_as_double` and special values | first four in MPFR corpus; `log_as_double` representative | first four | first four complete | first four for all types | first four | +| `pow`, `ipow` | exact values in `contracts/math.cpp` | MPFR `pow` corpus plus `ipow` | all types | complete exponent/promotion matrix | both for all types | both | +| `sin`, `cos`, `tan`, `sincos` overloads | `sincos` for all types plus sin/cos special values in `contracts/math.cpp` | first three in MPFR corpus plus `sincos` | first three | complete matrix | first three for all types | all four | +| `asin`, `acos`, `atan`, `atan2` | special values and canonical results in `contracts/math.cpp` | MPFR corpus | all types | complete matrix | all types | yes | +| `sinh`, `cosh`, `tanh`, `asinh`, `acosh`, `atanh` | special values and canonical results in `contracts/math.cpp` | MPFR corpus | all types | complete matrix | all types | yes | +| `erf`, `erfc`, `lgamma`, `tgamma` | special values and canonical results in `contracts/math.cpp` | MPFR corpus | all types | complete matrix | all types | all | + +Accuracy domains are assigned explicitly in `accuracy/f128.cpp`, +`accuracy/f256.cpp`, and `accuracy/native.cpp`. The table deliberately does not +claim domains for operations without rows. + +The lack of standalone accuracy rows for `clamp`, `nextafter`, `nexttoward`, +`sincos`, and `log_as_double` is explicit. `clamp` and stepping currently use +exact behavioural contracts; `sincos` is checked semantically while its two +components are independently measured as `sin` and `cos`; `log_as_double` has +behavioural and genuine-constexpr ownership. These are intentional exact or +component-owned contracts rather than missing numerical rows. + +`contracts/math.cpp` applies the same operation-family special-value matrices +to f32, f64, f128 and f256. They cover NaN propagation, both infinities, +positive and negative zero, invalid domains, poles and signed results across +arithmetic helpers, roots and powers, trigonometric/hyperbolic/special +functions, rounding, remainder, decomposition and stepping. Consumer +fast-math excludes runtime f128/f256 `+`, `-`, `*`, and `/` from that matrix; +their genuine constant-evaluation special-value behavior remains covered. + +The rounding contracts include long/long-long minimum `+0.5`-limb witnesses, +the `2^52`/`2^53` integer boundaries, and varied +decimal/significant-figure tie cases. + +Matched-bit scores are relative-error scores in the ordinary range. Near the +component type's absolute spacing limit, the runner preserves the same +accuracy slack relative to the precision that an expansion can physically +represent there. In other words, one underlying float/double ULP is mapped to +the nominal precision before applying the normal threshold. Exact zero remains +strict: a spurious minimum subnormal still scores zero bits. This +resolution-adjusted score prevents underflow from being reported as an +algorithmic precision loss without concealing wrong zeros, infinities, signs, +or multi-ULP errors. + +Accuracy rows for exact families use exact MPFR equality rather than treating +the normal bit threshold as sufficient. Zero results must also carry the +expected sign. Exact rows currently cover absolute value, minimum/maximum, +copy-sign, integer-valued rounding, decomposition and binary scaling families. +Before emitting rows, every runner also compares representative `sin`, `exp`, +`log1p`, and `erfc` references from the 400-decimal-digit oracle with an +independent 800-decimal-digit backend. + +An unfiltered f128/f256 run writes 127 independently gated operation/domain +rows; the native f32/f64 runs retain their 119 numerical rows. Every row keeps +its deterministic seed and worst witness, so no aggregate score can make a +failed domain pass. + +Any current threshold failures are recorded in `KNOWN_FAILURES.md`; they remain +gating failures rather than threshold exceptions. + +## I/O, random, expressions, and numerical edge cases + +| Public family | Implemented owner | Constant evaluation | Known limit | +|---|---|---|---| +| `parse_result`, `from_chars`, `try_parse`, `parse` | `contracts/io.cpp`, `accuracy/f128.cpp`, `accuracy/f256.cpp` | complete-token success, trailing-input rejection and fallback in `constexpr/core.cpp` | Result value/error/consumed/bool state; native, storage and value forms plus fallback, partial, invalid, range and format behavior; deterministic long-decimal accuracy against one shared MPFR oracle | +| `to_chars`, `to_string`, `to_static_string` | `contracts/io.cpp` | fixed-format `to_static_string` | All three `to_chars` forms and all native/storage/value families; f128/f256 `to_chars` and `to_string` benchmarks | +| `precision_info`, `static_string`, `f32_io_string`, `f64_io_string`, `f128_io_string`, `f256_io_string` | `contracts/io.cpp` | construction, mutation, capacity and returned alias types | Focused public string-surface contract rather than exhaustive `std::string` emulation | +| `_dd`, `_qd`, integer literals | `contracts/io.cpp`, `contracts/core.cpp` | decimal and hex literal assertions | | +| stream insertion/extraction | `contracts/io.cpp` | runtime only | | +| `std::formatter` | `contracts/io.cpp` when available, plus header probe | formatter parsing is compile-time through the library | General/fixed/scientific/hex, signs, alternate form, zero fill, alignment, special values, invalid specs, and long f256 precision; platform-dependent availability | +| deterministic formatter/parser round trip | `contracts/io.cpp` | runtime only | Nominal defaults are 33/65 digits; 10,000 independently constructed canonical raw-limb values per type still round-trip exactly at explicit expansion-aware 33/67-digit precision, including signed-zero, sparse limbs, and extreme boundaries | +| `seed_seq`, `mt19937`, `mt19937_64` | `contracts/random.cpp` | `mt19937_64` through array generation | Constructors, seed/generate/param, min/max, discard, comparison, valid/malformed streams and standard-engine equivalence | +| `random_device` | `contracts/random.cpp` | runtime only | | +| `uniform_int_distribution`, `generate_canonical` | `contracts/random.cpp` | f128/f256 canonical generation | Constructors, params, bounds, override calls, equality and streams, including full-width integer ranges | +| uniform real distribution and array helpers | `contracts/random.cpp` | deterministic f128/f256 arrays in `constexpr/core.cpp` | Native/f128/f256 parameters and every engine/seed/default array overload; f128/f256 distribution benchmark | +| exponential, normal, lognormal distributions | `contracts/random.cpp` | f128/f256 samples in `constexpr/core.cpp` | Every accessor, param/reset/override/equality/stream form; native cached-state and extended parameter-only behavior; f128/f256 normal benchmark | +| f256 expression lifetime, routing and materialization | `contracts/expressions.cpp` | — | Covers delayed temporaries and storage members, a compact product-expression shape matrix, independent expected values, and a fusion-sensitive residual | +| numerical edge cases | `contracts/edge_cases.cpp`, fmod `quotient_reduction` accuracy domain | boundary stepping also checked in CE | Covers large expansion limbs, deep-limb and huge-quotient remainder reduction, exact half ties, normal/subnormal stepping, and f128 FMA with an overflowing leading product | + +## Benchmark ownership + +`benchmarks/runtime/operations.cpp` currently owns 77 rows for each of f128 and f256: + +- arithmetic: `add`, `subtract`, `multiply`, `divide`, `fma`, `abs`, + `fabs`, `sqr`, `recip`, `fmin`, `fmax`, `fdim`, `copysign`; +- rounding: `floor`, `ceil`, `trunc`, `round`, `roundeven`, `lround`, + `llround`, `round_decimals`, `round_significant`; +- remainder: `fmod`, `remainder`, `remquo`; +- decomposition: `modf`, `ldexp`, `scalbn`, `scalbln`, `frexp`, `ilogb`, + `logb`; +- stepping: `nextafter`, `nexttoward`; +- comparison: `equal`, `not_equal`, `less`, `less_equal`, `greater`, + `greater_equal`; +- roots: `sqrt`, `cbrt`, `hypot`; +- trigonometric: `sin`, `cos`, `sincos`, `tan`, `atan`, `atan2`, `asin`, + `acos`; +- powers: `exp`, `exp2`, `expm1`, `log`, `log2`, `log10`, `log1p`, `pow`, + `ipow`; +- hyperbolic: `sinh`, `cosh`, `tanh`, `asinh`, `acosh`, `atanh`; +- special: `erf`, `erfc`, `lgamma`, `tgamma`; +- expressions: `product_sum`; +- I/O: `to_string`, `to_chars`, `parse`; +- random: `mt19937_64`, `uniform_real`, `normal`. + +`benchmarks/runtime/workloads.cpp` owns `chained_arithmetic`, `affine_trig`, +`mandelbrot`, `matrix_vector_4x4`, `horner_polynomial`, `newton_root`, +`log_sum_exp`, and `haversine`, bringing the manifest to 85 rows per +precision. `product_sum` is intentionally the same source expression for both +precisions: f256 can route it through its fused expression evaluator, while +f128 provides the eager analogue. Each benchmark uses calibrated equal-work +batches, reports a median, and retains each normalized trial in the detailed +CSV. `to_chars` is compared with qdpp's public buffer-writing API and labelled +`qdpp write`. +Dispatch remains untimed because its call overhead is already included in the +operations it selects. + +The runner uses a normalized implementation model rather than a single +reference. Every logical trial runs FLTX and all available comparisons once, +with a rotating start position. The manifests contain 85 FLTX rows, +75 Boost rows per precision, 71 TLFloat rows per precision, and 60 f128 or 62 +f256 qdpp rows. qdpp's f256-only difference is its public `min`/`max`; +`dd_real` exposes neither. Boost and TLFloat deliberately omit operations for +which they have no matching public API. The internal metrics manifest validates each +enabled implementation independently; disabling one optional implementation +does not weaken the others' manifests. + +Accuracy uses the same samples, domains, seed, and 400-digit MPFR result for +every registered implementation. It records 127 FLTX and 118 Boost rows per +precision and, when enabled, 87 f128 or 91 f256 qdpp rows and 107 TLFloat +rows. These counts are asserted by the internal metrics manifest. +Parse accuracy uses the original exact decimal value rather than a +format-rounded surrogate. Matched bits therefore retain the same numerical +meaning across expansion and IEEE representations; exact-sample ceilings and +underflow adjustment use each implementation's declared precision and range. +Competitor accuracy is informational; only FLTX's source-controlled thresholds +affect the exit code. + +## Release validation + +The remaining release-evidence tasks are: + +1. resolve or explicitly approve every finding in + [KNOWN_FAILURES.md](KNOWN_FAILURES.md); +2. run FMA `AUTO`, `OFF`, and valid `ASSUME` configurations, including the + injected unavailable-FMA `AUTO` path, on every applicable target; +3. repeat the mutation campaign under MinGW and Emscripten and tie every run to + committed test-owner sources; +4. freeze compile-time, linked-size, and clean-library-build budgets, then run + `fltx_compile_benchmarks_full` and `fltx_binary_size` on the release matrix; +5. publish complete, same-fingerprint canonical evidence for Windows MSVC and + MinGW, Linux GCC and Clang, macOS AppleClang, and Emscripten; +6. reconcile the README's numerical and comparative claims with the final + worst-domain and benchmark evidence in `RELEASE_CHECKLIST.md`. diff --git a/validation/KNOWN_FAILURES.md b/validation/KNOWN_FAILURES.md new file mode 100644 index 0000000..f99b7ff --- /dev/null +++ b/validation/KNOWN_FAILURES.md @@ -0,0 +1,44 @@ +# Release findings + +The release suite does not reduce thresholds to hide findings, and the +internal metrics runner never publishes canonical CSVs from a failing run. + +## Current validation status + +`fltx_ci_checks` runs the 4,096-sample standard accuracy corpus for f32, f64, +f128, and f256 through both the normal and fixed-constexpr runners, in addition +to the contract, genuine-constexpr, dependency, in-tree package smoke, header, +standard, and tooling checks. A same-fingerprint result for this expanded +badge gate has not yet been recorded, so this file makes no passing-platform +claim. The standalone installed-package fixture remains a separate target. +Runtime f32/f64 threshold findings are retained as advisory platform-libm +baseline evidence. Native fixed-simulation consumer-fast-math findings are also +advisory because runtime code generation does not reproduce genuine compiler +constant evaluation. Genuine strict native numerical constant evaluation, +native special-value assertions in both consumer profiles, strict native fixed- +simulation, and every f128/f256 threshold remain gating. + +The complete consumer-fast-math contract executable is compiled on every +configured target but is not a badge gate. GCC, Clang, AppleClang, MinGW, and +Emscripten legitimately produce different findings when their fast-math modes +discard signed zero, flush subnormals, assume finite inputs, or reassociate the +error-free transforms used by expansion arithmetic. Run that executable +directly when collecting diagnostic fast-math contract evidence. + +Windows ARM64 presets disable the vendored TLFloat and qdpp comparisons because +their MSVC-compatible paths currently require x64-only integer or FMA +intrinsics. Windows x64 clang-cl also disables qdpp's baseline-unsafe FMA path. +These are explicit dependency support limits; FLTX's own ARM64 and clang-cl +validation remains enabled. + +The isolated public-header probes emit `undefined-inline` warnings under +MinGW and Emscripten for declarations used by some single-header probes. They +are warning-level header-hygiene debt, not hidden test failures. + +## Preserved evidence + +Failed accuracy runs are retained as `.partial.csv` files under their isolated +build trees. Each row records the seed, exact input limbs, observed result, and +MPFR result for its worst witness. The suffix itself makes no completeness +guarantee--an interrupted run uses it too--and a partial file is never a +publishable canonical result. diff --git a/validation/MUTATIONS.md b/validation/MUTATIONS.md new file mode 100644 index 0000000..3b189aa --- /dev/null +++ b/validation/MUTATIONS.md @@ -0,0 +1,44 @@ +# Mutation checks + +Mutation testing verifies that each important defect class has a specific test +owner. Apply one mutation in a disposable worktree, run the narrow owner listed +below, and require that owner to fail. The unmodified control must pass under +the same preset. + +A recorded run includes the source fingerprint, compiler, preset, mutation, +owner command, and failure output. Discard the disposable worktree after every +case so mutations cannot affect one another. + +## Contract owners + +| Mutation | Required owner | Expected detection | +| --- | --- | --- | +| Route `f128 roundeven` through nearest-away-from-zero | `contracts/math.cpp` | `roundeven(2.5)` differs from 2 | +| Implement `f128 signbit` as `x.hi < 0.0` | `contracts/io.cpp` | parsed negative zero loses its sign bit | +| Make `f128 nextafter` return its input | `contracts/math.cpp` | the adjacent value is not greater than 1 | +| Disable complete-input checking in `try_parse` | `contracts/io.cpp` | `1.25tail` is accepted and overwrites the destination | +| Drop low limbs while materializing a product expression | `contracts/expressions.cpp` | delayed and direct materialization lose low-limb information | +| Drop the low limbs in the generic `f256(Expr&&)` constructor | `contracts/expressions.cpp` | direct-list construction loses low-limb information | +| Omit `x3` from `hash_f256` | `contracts/core.cpp` | values differing only in `x3` hash identically | +| Advance a Mersenne Twister engine twice per result | `contracts/random.cpp` | fltx diverges from the corresponding standard engine | +| Return the lower bound from `uniform_real_distribution::max()` | `contracts/random.cpp` | `max()` does not report the upper bound | +| Keep a cached variate after `normal_distribution::reset()` | `contracts/random.cpp` | reset distributions differ from fresh instances | +| Make `f128 isunordered` ignore NaNs | `contracts/core.cpp` | `isunordered(NaN, 1)` returns false | +| Ignore the injected unavailable-FMA probe | `package/consumer.cpp` | the no-FMA `AUTO` consumer selects the FMA path | + +## Accuracy owners + +| Mutation | Required owner | Expected detection | +| --- | --- | --- | +| Discard the low limb of every `f128 + f128` result | `accuracy/f128.cpp`, filter `add` | one or more arithmetic domains miss their threshold | +| Replace the hardware `two_prod` correction with zero | `accuracy/f128.cpp`, filter `multiply` | multiplication domains miss their thresholds | +| Bypass checked/scaled Dekker in an FMA-OFF build | `accuracy/f128.cpp`, filter `atan2` | the extreme-finite domain misses its threshold | +| Perturb the leading sine coefficient | `accuracy/f128.cpp`, filter `sin` | sine domains miss their thresholds | + +## Required configurations + +Run all contract mutations with MSVC, MinGW, and Emscripten release presets. +Run FMA-sensitive mutations in `AUTO` and `OFF` configurations, plus valid +`ASSUME` configurations where the target supports them. Fixed-consteval +dispatch mutations use `fltx_constexpr_accuracy`; runtime dispatch mutations +use `fltx_accuracy`. diff --git a/validation/README.md b/validation/README.md new file mode 100644 index 0000000..a05ac6b --- /dev/null +++ b/validation/README.md @@ -0,0 +1,530 @@ +# fltx validation system + +`validation` contains the repository's correctness tests, numerical accuracy +runner, performance benchmarks, metrics publication pipeline, shared support, +and pinned comparison libraries. Behavioural suites live under `tests`, while +runtime, compile-time, and binary-size measurements live under `benchmarks`. + +The validation executables have five roles. Each role has a strict-consumer +target and a matching `_fastmath` target compiled with the platform's real +consumer fast-math option (`/fp:fast` or `-ffast-math`): + +MinGW/GCC validation deliberately applies only `-ffast-math`, including at +link time, so it measures the compiler's unmodified consumer configuration. +On MinGW, GCC may consequently link `crtfastmath.o` and globally enable DAZ/FTZ, +which flushes binary64 subnormals and can discard low expansion limbs. Consumers +that want fast-math transformations while retaining gradual underflow can add +`-mno-daz-ftz`; the standard fast-math reports do not use that mitigation. + +For f128/f256 basic `+`, `-`, `*`, and `/`, consumer fast-math also selects +finite-input runtime kernels that omit NaN, infinity, and signed-zero handling. +Strict consumers and genuine constant evaluation retain the checked semantics. + +- `fltx_contract_tests` checks public behaviour, I/O, random facilities, + expression fusion, dispatch, and named numerical edge cases. +- `fltx_constexpr_tests` checks genuine compiler constant evaluation, including + the 58-case-per-type MPFR corpus for all four types in the strict consumer. + The fast-math target retains that corpus for f128/f256; native numerical + gates use the strict consumer because fast-math also relaxes the compiler's + constant evaluator. Exact native special-value assertions still compile in + both profiles. Overload and return-type matrices belong to the contract suite. +- `fltx_accuracy` compares deterministic, named domains with an independent + MPFR-backed oracle and writes one CSV row as soon as that domain finishes. +- `fltx_constexpr_accuracy` reuses the complete accuracy runner while forcing + the library's constexpr algorithms at runtime, so they receive the same + domains and threshold reporting as the normal runtime algorithms. +- `fltx_benchmark` measures performance only. A full run uses broad, + operation-specific corpora (81,920 base f128 samples and 40,960 base f256 + samples), calibrates fixed batches to at least 25 ms, and reports the median + of seven trials. Every logical trial runs all registered implementations + once, rotating which implementation runs first to balance ordering effects. + +The initial comparison set is: + +- f128: FLTX, Boost `cpp_double_double`, TLFloat `Quad`, and optional qdpp + `dd_real`; +- f256: FLTX, Boost MPFR-backed 64-decimal-digit numbers, TLFloat `Octuple`, + and optional qdpp `qd_real`. + +Each comparison is registered only where the other library exposes a public +operation with the same intended purpose. Numeric accuracy comparisons use the +same named domains as FLTX, but MPFR evaluates the exact converted inputs +received by each implementation. If conversion collapses a nonzero +cancellation into identical operands, the comparison uses a representable +native-precision neighbour that preserves the intended nonzero result +direction. Parsing remains referenced to the original decimal text. Only FLTX +thresholds gate the process. + +The f128/f256 arithmetic operations share one deterministic paired `general` +corpus: 70% log-random representative magnitudes (including structured operand +relationships), at least 20% broad exponents, and 5% near the finite exponent +limits. Add/subtract also reserve 5% for subnormals; multiply/divide use a +scale-safe broad case instead. Every smoke or larger run contains every +applicable stratum, while the detail report keeps one domain row per operation. + +The vendored TLFloat library and comparisons are enabled by default through +`FLTX_METRICS_TLFLOAT` on supported targets. The Windows ARM64 presets disable +it because upstream TLFloat currently uses the x64-only `_umul128` intrinsic +under MSVC-compatible frontends. Where enabled, `fltx_tlfloat_smoke` +separately verifies its C++ `Quad`/`Octuple` headers and a compiled C-ABI +symbol. + +`fltx_compile_contract` builds every public header in isolation and compiles +the representative constexpr/runtime surface explicitly as both C++20 and +C++23. Comparison-library smoke executables are owned separately by +`fltx_metrics_compile_contract`; they are metrics integration checks, not FLTX +compile contracts. +`fltx_package_tests` installs fltx and builds strict, fast-math, and +injected-no-FMA consumers through `find_package`. Its dedicated install and +nested-build directories are recreated for every invocation, so stale +installed headers or CMake state cannot make the fixture pass. + +## Preset check pipeline + +Run the complete pull-request and branch check target from one CMake build +preset with: + +```powershell +python .\validation\run_preset_checks.py ` + --preset windows-x64-msvc-release +``` + +The command always configures the selected preset and then builds +`fltx_ci_checks`. Success means that preset completed the same strict contracts, +genuine constexpr checks, package checks, first-party Python tooling tests, and +standard FLTX-only accuracy policy used by CI. The complete +consumer-fast-math contract executable is built but remains a manually runnable +diagnostic suite: real fast-math permits reassociation, signed-zero loss, and +subnormal flushing, so those semantic assertions are not badge gates. Runtime +f32/f64 threshold findings remain visible as advisory platform-libm baseline +evidence. The native fixed-simulation consumer-fast-math lane is also advisory +because runtime fast-math code generation cannot faithfully model genuine +compiler constant evaluation. All consumer-fast-math accuracy lanes are +advisory for the same reason: reassociation can invalidate expansion arithmetic +without changing the strict library contract. Genuine strict f32/f64 numerical +evaluation and strict fixed-simulation remain gating; exact native special-value +assertions compile in both consumer profiles, and strict f128/f256 accuracy +remains gating. +The artificial fixed-simulation fast-math runner records `-` for its accuracy +special-value column: clang may emit a trap merely for constructing its +deliberate NaN/infinity probes under fast-math. Real runtime fast-math and every +strict lane retain those probes, while the genuine constexpr corpus remains the +authority for constant-evaluation special values. + +To run that target for every release preset supported by the current host OS +and architecture, use: + +```powershell +python .\validation\run_all_supported_checks.py +``` + +Every selected preset is required. The command runs them in host-matrix order +and stops at the first failure. It shares CMake preset resolution and automatic +Visual Studio developer-environment setup with the metrics pipeline, while +remaining independent of metrics evidence and report generation. + +## Preset metrics pipeline + +The development metrics workflow can be run from one CMake build preset: + +```powershell +python .\validation\metrics\run_preset_metrics.py ` + --preset windows-x64-msvc-release +``` + +To run every release preset supported by the current host OS and architecture, +omit the preset and use the host-matrix entry point. It accepts the same +workflow arguments as the single-preset command: + +```powershell +python .\validation\metrics\run_all_supported_metrics.py --consumer-mode all +python .\validation\metrics\run_all_supported_metrics.py ` + --consumer-mode all --quick +``` + +The host matrix is explicit rather than inferred from installed tools: + +| Host | Presets | +|---|---| +| Windows x64 | MSVC, clang-cl, MinGW, wasm32 Emscripten | +| Windows ARM64 | MSVC, clang-cl | +| Linux x64/ARM64 | native GCC and Clang for the host architecture | +| macOS x64/ARM64 | native AppleClang for the host architecture | + +Every selected preset is required and runs in order; a missing toolchain fails +the command rather than silently producing a partial matrix. The alternate +`vs2026` and `xcode` generator presets are excluded because their native +compiler coverage is already represented by the release matrix. Windows x64 +is the designated automatic wasm32 metrics host so canonical Emscripten +evidence is not overwritten by several hosts. Other hosts can still run the +`wasm32-emscripten-release` preset explicitly with the single-preset command. + +The command configures the preset, builds `fltx_accuracy` and `fltx_benchmark` +plus their `_fastmath` variants, and locates their artifacts through the CMake +File API. It runs strict-consumer metrics by default. Pass +`--consumer-mode fastmath` for only fast-math metrics, or +`--consumer-mode all` to run strict and then fast-math metrics and generate +both sets of data and reports. The modes retain separate evidence and +provenance, including the source fingerprint needed for later comparisons. +After the requested mode finishes, the pipeline also regenerates strict versus +fast-math profile comparisons whenever a compatible pair exists. An `all` run +requires those comparison reports; a focused run simply skips them when the +other mode is unavailable or stale. + +The public commands use mutually exclusive, value-free workflow flags. With no +workflow flag, `--standard` is implied. `--quick` selects the half-sized +`small` sample profile, `--full` runs the full profile without publishing, and +`--release` runs that same full profile and publishes canonical evidence. +`--output-root` remains available for nonrelease isolation and creates +`data/` and `generated/` below the supplied path; it cannot be combined with +`--release`. +The pipeline checks each executable's configuration banner before measurement, +so fast-math evidence cannot be produced by a strict binary (or vice versa). + +```powershell +python .\validation\metrics\run_preset_metrics.py ` + --preset windows-x64-msvc-release ` + --consumer-mode all ` + --full + +# Publish only after the complete evidence has been accepted. +python .\validation\metrics\run_preset_metrics.py ` + --preset windows-x64-msvc-release --consumer-mode all --release +``` + +| Workflow | Internal profile | Accuracy samples | Benchmark base (f128/f256) | Trials | Timing | +|---|---|---:|---:|---:|---:| +| `--quick` | `small` | 2,048 | 4,096 / 2,048 | adaptive 1 / 3 / 7 | 8 or 15 ms target | +| Default / `--standard` | `standard` | 4,096 | 8,192 / 4,096 | adaptive 1 / 3 / 7 | 8 or 15 ms target | +| `--full` | `full` | 65,536 | 81,920 / 40,960 | 7 | 25 ms minimum | +| `--release` | `full` | 65,536 | 81,920 / 40,960 | 7 | 25 ms minimum | + +The quick and standard workflows run the f128 and f256 accuracy phases +concurrently, then benchmark sequentially. They share the same adaptive corpus +and timing policy, with every quick corpus exactly half its standard size. +Cheap primitives use large corpora and seven 15 ms trials; ordinary operations +use three 8 ms trials; operations measured at 10 microseconds or slower use +three single-batch trials. A soft five-second row budget can reduce the trial +count to one or three. In standard mode, the four slow gamma/error functions +use 256 f128 or 128 f256 samples; quick mode uses 128 or 64. + +The remaining public Python command in `validation/metrics/` rebuilds every +report from existing data without running the metrics executables: + +```powershell +python .\validation\metrics\rebuild_tables.py ` + --targets windows/x86_64/MSVC +``` + +Omit `--targets` when all canonical datasets belong to a compatible run. The +supporting Python modules live under `validation/metrics/_internal/` and are invoked by +these entry points or by CMake. Every report build produces both the complete +and `_compact` overview/performance variants. Compact reports hide displayed +speed ratios, narrow the benchmark columns, and colour each nanosecond timing +from the same hidden relative speed ratio used by the complete layout. + +Configure and build are incremental. Before running the expensive phases, the +pipeline validates any existing evidence against the freshly built runners' +source fingerprint, compiler/configuration/flags, host, sample profile, +manifests, summaries, and file hashes. Compatible evidence is reused and all +seven SVGs per consumer mode are regenerated; `--force-rerun` explicitly +bypasses reuse. +Renderer-only Python changes do not alter the runner source fingerprint. + +Canonical release output and the profile-separated unversioned output are: + +```text +validation/metrics/ + data/ # canonical release evidence + generated/ # canonical release reports + _unversioned/ + quick/ + data/ # --quick evidence + generated/ # --quick reports + standard/ + data/ # default/--standard evidence + generated/ # default/--standard reports + full/ + data/ # --full evidence + generated/ # --full reports +``` + +Nonrelease workflows replace only their compatible unversioned profile +snapshot; `--release` publishes canonical data under `validation/metrics/data`. +The unversioned trees are ignored by Git and repository search. Report +filenames are identical across the roots, with `_compact` distinguishing +presentation variants and `_fastmath` identifying consumer-fast-math evidence +and reports. Strict and fast-math data also have separate run metadata and +publication locks. Comparison reports use +names such as `windows_x86_64_MSVC_f256_strict_fastmath_comp.svg`. They show strict +values first and colour the parenthesized `fast-math - strict` delta. Pairing +requires matching source, target, sample policy, host, and build/library +configuration; run IDs and collection times may differ. +Both overview layouts and the profile comparison keep Inf/NaN support in its +existing column and report signed-zero preservation separately in a narrow +`±0` column. A tick or cross summarizes deterministic signed-zero contract +probes for that operation; `-` means the operation has no applicable +accuracy probe (including predicates, integer-return APIs, and benchmark-only +rows whose semantics are covered by the contract suites). +Opposite zero signs are numerically exact in the bits-accuracy columns, so this +semantic distinction cannot distort mean, worst, or domain-pass results. +Consumer-fast-math overviews and strict/fast-math comparisons also show a +narrow `Subnorm` column. Their headline accuracy and domain count exclude the +dedicated subnormal corpus, while a tick or cross reports whether that corpus +passes its normal release threshold; `-` means no separate subnormal corpus is +defined for the operation. Strict overviews retain their existing aggregate +accuracy presentation. +The output target is inferred from the system, target architecture, compiler +ID, and compiler frontend embedded in both runners. This separates x64 from +ARM64 and distinguishes Windows clang-cl from ordinary Clang. On Windows, +MSVC and clang-cl Ninja presets run in the matching x64 or ARM64 Visual Studio +developer environment discovered through `vswhere`; MinGW, Emscripten, and +Visual Studio-generator presets keep their own environments. + +## Quick MSVC run + +```powershell +cmake --preset windows-x64-msvc-release +cmake --build --preset windows-x64-msvc-release --target ` + fltx_compile_contract fltx_accuracy fltx_accuracy_fastmath ` + fltx_constexpr_accuracy fltx_constexpr_accuracy_fastmath ` + fltx_benchmark fltx_benchmark_fastmath + +.\build\windows-x64-msvc-release\validation\fltx_contract_tests.exe +.\build\windows-x64-msvc-release\validation\fltx_constexpr_tests.exe +.\build\windows-x64-msvc-release\validation\fltx_constexpr_accuracy.exe ` + --precision f128 --sample-mode smoke +``` + +Boost comparisons are always enabled in strict metrics because Boost, GMP, and +MPFR are already test dependencies. The vendored qdpp headers are enabled by +default for the strict accuracy and benchmark runners, including Emscripten. +The Windows clang-cl presets explicitly disable qdpp because it treats every +`_MSC_VER` frontend as having baseline-safe x86 FMA intrinsics; clang-cl +correctly rejects those intrinsics when the translation unit does not target +FMA. Both Windows ARM64 presets also disable qdpp because those x86 intrinsics +are unavailable on the target. Metrics builds leave these dependency choices +to the selected preset. Required GitHub checks use the FLTX-only accuracy runner +and do not build these comparison integrations. +Consumer-fast-math runners contain FLTX rows only and do not parse qdpp headers, +because qdpp deliberately rejects aggressive fast-math. The qdpp smoke target +also compiles and executes representative `dd_real` and `qd_real` operations. +To test a different qdpp checkout, override its include directory: + +```powershell +cmake --preset windows-x64-msvc-release ` + -DFLTX_METRICS_QDPP_INCLUDE_DIR=C:/path/to/qdpp/include +cmake --build --preset windows-x64-msvc-release --target ` + fltx_qdpp_smoke fltx_accuracy fltx_benchmark +``` + +`FLTX_METRICS_QDPP=OFF` remains available as an explicit opt-out for a +dependency-isolation build. + +For a direct noncanonical full f128/f256 run: + +```powershell +python validation/metrics/_internal/run_metrics.py ` + --accuracy build/windows-x64-msvc-release/validation/fltx_accuracy.exe ` + --benchmark build/windows-x64-msvc-release/validation/fltx_benchmark.exe ` + --platform windows ` + --architecture x86_64 ` + --compiler MSVC ` + --sample-mode full ` + --output-root validation/metrics/_unversioned/direct-full/data +``` + +For a direct consumer-fast-math run, use `fltx_accuracy_fastmath.exe` and +`fltx_benchmark_fastmath.exe` and add `--consumer-mode fastmath`. The compiled +fltx library is the same target in both runs; only the consumer translation +units and executable link receive the consumer fast-math option. Preset +fast-math accuracy runs are advisory: every strict-threshold miss remains a +visible `FAIL` with its measured margin and worst case, but does not prevent the +benchmark phase or report generation. Strict consumer metrics remain gating. + +`--platform`, `--architecture`, and `--compiler` remain available for explicit +validation, but must be supplied together and may all be omitted to infer the +canonical target from the runners. + +The runners print their configuration and requested sample profile once, +stream rows in real time, and flush each row to a `.partial.csv`. Benchmark +detail rows retain every trial plus total timed iterations and elapsed time. +A complete passing run atomically publishes +the detail files and canonical +`validation/metrics/data///_.csv` +files. Filtered and smoke runs stay under `build/` and cannot replace published +results. The banner records the ordered implementation set for each precision. +The manifest requires 85 FLTX benchmark rows, 75 Boost rows per precision, and, +when enabled, 60 f128 or 62 f256 qdpp rows and 71 TLFloat rows per precision. +Accuracy contributes 127 FLTX and 118 Boost domain rows per precision. When +enabled, qdpp contributes 87 f128 or 91 f256 rows and TLFloat contributes 107 +rows per precision. These are registration checks, not assumptions in the +runner or SVG renderer. + +Operation families follow the public metrics taxonomy used by the original +report: Arithmetic contains only add, subtract, multiply, and divide; +decomposition, scaling, stepping, FMA, and related helpers are +Floating-point utilities; `sqr` is grouped with roots and powers immediately +before `sqrt`; exponentials, logarithms, +trigonometric, hyperbolic, inverse-hyperbolic, special-function, remainder, +comparison, I/O, random, and mixed-workload rows each have distinct groups. +The group is recorded by the C++ operation registration itself, so reports do +not repair or reinterpret incorrectly classified CSV rows. + +Either phase can also be run independently by supplying only `--accuracy` or +only `--benchmark`. A phase-only run retains its CSV and metadata under +`build/metrics/runs//`; it never replaces the combined canonical +results. This makes focused correctness or timing checks cheap while ensuring +that published tables only combine phases measured from the same run. + +All requested accuracy and benchmark phases run even if an earlier phase +fails. In that case nothing is published, but the complete streamed evidence +and failed-run metadata remain together in the staging directory printed by +the command. + +Every accuracy and benchmark build embeds a SHA-256 fingerprint of its source +checkout. Before starting any measured work, the internal metrics runner inspects every +requested executable and rejects stale or differently configured builds. +Rebuild the requested targets after changing source; this preflight avoids +discovering the problem after a long full run. The orchestrator also passes the +profile's sample and trial counts explicitly, so the Python profile is the +single source of truth. +Canonical runs always use the revision computed from that checkout; it cannot +be overridden on the command line. The detail CSVs, +configuration banner, and run metadata retain that identity; generated metrics +and SVG output directories are excluded from the digest. Run metadata also +records the requested sample counts, host/runtime identity, and SHA-256 hashes +of both runner artifacts and every published CSV. The configuration metadata +also records whether `FLTX_SIMULATE_FIXED_CONSTEVAL_MODE` was enabled for the +consumer translation unit. + +## Native accuracy + +f32 and f64 use the same 119 accuracy rows as a native/libm policy baseline, +but they are not merged into the f128/f256 summary tables. The preset metrics +pipeline records the matching strict or fast-math baseline after each requested +f128/f256 metrics mode. Run both complete native suites independently with: + +```powershell +cmake --build --preset windows-x64-msvc-release --target fltx_native_accuracy_full +``` + +The target invokes both precisions and gives every invocation a new directory +under `build//validation/native_accuracy`. Numerical threshold misses +are retained as advisory baseline data; crashes, stale binaries, mode +mismatches, and incomplete manifests still fail. The equivalent direct strict +command is: + +```powershell +python validation/metrics/_internal/run_native_accuracy.py ` + --accuracy build/windows-x64-msvc-release/validation/fltx_accuracy.exe +``` + +Pass `--consumer-mode fastmath` with `fltx_accuracy_fastmath.exe` to record the +native fast-math baseline. Each completed bundle includes f32/f64 CSVs plus a +fingerprinted metadata manifest with the host, compiler configuration, runner +hash, and consumer mode. + +## CI policy + +The recommended local pull-request and branch check command is: + +```powershell +python .\validation\run_preset_checks.py ` + --preset windows-x64-msvc-release +``` + +The underlying CMake command used by GitHub Actions is: + +```powershell +cmake --build --preset windows-x64-msvc-release --target fltx_ci_checks +``` + +It builds isolated public-header and C++ standard probes, both contract +executables, the in-tree package consumer, and FLTX-only accuracy runners. It +runs the strict contract suite, genuine constexpr checks, package and +first-party Python tooling checks, and the 4,096-sample standard accuracy corpus +for all four types through normal and fixed-constexpr runners in both strict and +consumer-fast-math modes. The deterministic domain anchors and explicit ternary +operand tuples run in every profile; full and release metrics workflows retain +the 65,536-sample corpus for deeper evidence. cppdd, qdpp, TLFloat, their +comparison rows, and their dependency smoke checks remain owned by the metrics +targets and cannot fail this gate. The complete consumer-fast-math contract suite stays +available as diagnostic evidence but is not a badge gate because the compiler +profile explicitly relaxes the semantics asserted by that suite. Runtime +f32/f64 numerical threshold misses are advisory because those paths deliberately +delegate to the platform libm; crashes, incomplete output, and runner faults +still fail. Both runtime and fixed-simulation accuracy under consumer fast-math +are advisory for every precision: the compiler may legally reassociate the +error-free transformations underlying expansion arithmetic, and optimized +runtime code cannot faithfully reproduce the compiler's constant evaluator. +The fixed-simulation fast-math runner omits deliberate NaN/infinity accuracy +probes (reported as `-`) because clang can compile those probe constructions to +a trap under fast-math; this does not affect real runtime or strict +special-value coverage. +The genuine f32/f64 constexpr numerical corpus gates the strict consumer. Exact +native special-value assertions are compiled in both consumer profiles, strict +native fixed-simulation remains gating, and strict f128/f256 accuracy +thresholds remain gating. +The Linux GCC/Clang, Windows MSVC/MinGW, macOS AppleClang, and WebAssembly +Emscripten workflows all invoke this same target. Any currently reproducible +gating failure remains recorded in +[KNOWN_FAILURES.md](KNOWN_FAILURES.md); gating thresholds are not reduced to +manufacture a green result. + +Authoritative installed-package variants, compile and binary-size telemetry, +performance, and canonical metrics publication remain outside that pull-request target. +The release matrix configures separate `AUTO`, `OFF`, and `ASSUME` build trees, +then runs `fltx_native_accuracy_full`, `fltx_package_tests`, and a full +internal metrics-runner invocation with qdpp enabled when comparative ratios are +wanted. Package and f128/f256 contract thresholds remain gating; native +accuracy is retained as observational policy evidence for comparing the +consumer-facing extended types against the platform's float/double behavior. + +Compile and size telemetry have distinct opt-in targets: + +```powershell +cmake --build --preset windows-x64-msvc-release --target fltx_compile_benchmarks_full +cmake --build --preset windows-x64-msvc-release --target fltx_binary_size +``` + +The first writes a summary covering public-header cost and expression growth at +25, 100, and 200 functions, plus a separate matrix comparing eager `f256_s` +with public `f256` expressions for 49 individual fused shapes plus the +aggregate all-shapes case. The second reports +dead-code-eliminated linked-size deltas for baseline, arithmetic/expression, +math, I/O, and random-use buckets for both precisions. + +After matching full runs exist for all requested targets: + +```powershell +python validation/metrics/rebuild_tables.py ` + --input validation/metrics/data ` + --targets windows/x86_64/MSVC windows/x86_64/MinGW ` + wasm32/wasm32/Emscripten ` + --output validation/metrics/generated +``` + +Add `--consumer-mode fastmath` to rebuild the corresponding `_fastmath` +reports from consumer-fast-math evidence. + +This creates the complete and compact performance/overview reports plus the +FLTX-only cross-platform accuracy-consistency report. +Performance cells show FLTX time followed by every available implementation's +ratio against FLTX. Accuracy cells show FLTX average/minimum measured bits and +domain pass counts for each target; competitor accuracy remains in the +per-target overview and CSV evidence. Report headlines show uncapped measured +bits accurate for every implementation. Parse rows score +the binary result against the exact decimal input; formatting rows score the +emitted decimal against the binary source with MPFR and bypass every library +parser. Those directional scores are intentionally not expected to match. +Detailed CSV rows and tooltips retain the same measurements and original +threshold margins. + +The compact per-target overview uses a different, implementation-local +presentation: each competitor block shows `implementation speed / FLTX speed`. +Thus `0.49×` means that implementation runs at 49% of FLTX's speed, while +`2.00×` means it runs twice as fast. The FLTX block is the unratioed baseline. +See [COVERAGE.md](COVERAGE.md) for ownership and +[KNOWN_FAILURES.md](KNOWN_FAILURES.md) for findings that currently prevent +canonical publication. diff --git a/validation/_internal/check_pipeline.py b/validation/_internal/check_pipeline.py new file mode 100644 index 0000000..b3ac406 --- /dev/null +++ b/validation/_internal/check_pipeline.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python3 +"""Configure one CMake preset and run the complete fltx CI check target.""" + +from __future__ import annotations + +import argparse +import subprocess +import sys +from pathlib import Path +from typing import Mapping, Sequence + +from preset_support import ( + PipelineError, + PresetSelection, + msvc_environment, + msvc_target_architecture, + needs_msvc_environment, + resolve_preset, +) + + +CHECK_TARGET = "fltx_ci_checks" + + +def _run( + command: Sequence[str], + root: Path, + environment: Mapping[str, str] | None = None, +) -> None: + print(f"> {subprocess.list2cmdline(list(command))}", flush=True) + try: + result = subprocess.run( + command, + cwd=root, + env=dict(environment) if environment is not None else None, + check=False, + ) + except OSError as error: + raise PipelineError(f"cannot run {command[0]}: {error}") from error + if result.returncode: + raise PipelineError( + f"command exited with status {result.returncode}: " + f"{subprocess.list2cmdline(list(command))}" + ) + + +def _build_environment(selection: PresetSelection) -> Mapping[str, str]: + if not needs_msvc_environment(selection): + return selection.environment + return msvc_environment( + msvc_target_architecture(selection), + parent_environment=selection.environment, + ) + + +def run_checks(root: Path, preset: str) -> None: + root = root.resolve() + selection = resolve_preset(root, preset) + environment = _build_environment(selection) + + try: + _run( + [ + "cmake", + "--preset", + selection.configure_name, + "-DFLTX_METRICS_EXTERNAL_COMPARISONS=OFF", + ], + root, + environment, + ) + except PipelineError as error: + hints = f"{selection.compiler_hint} {selection.target_hint}".casefold() + if "mingw" not in hints: + raise + raise PipelineError( + f"{error}\nMinGW preset {selection.configure_name!r} requires " + f"a MinGW compiler and {selection.generator} in the invoking " + "environment or a local CMake user preset; the vcpkg triplet " + "selects dependency binaries but does not provide these tools." + ) from error + + _run( + [ + "cmake", + "--build", + "--preset", + selection.build_name, + "--target", + CHECK_TARGET, + "--parallel", + ], + root, + environment, + ) + + +def parse_args(argv: list[str] | None = None) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--preset", required=True, help="CMake build preset name") + return parser.parse_args(argv) + + +def main(root: Path, argv: list[str] | None = None) -> int: + args = parse_args(argv) + try: + run_checks(root, args.preset) + except PipelineError as error: + print(f"preset checks failed: {error}", file=sys.stderr) + return 1 + print(f"preset checks passed: {args.preset}", flush=True) + return 0 diff --git a/validation/_internal/preset_support.py b/validation/_internal/preset_support.py new file mode 100644 index 0000000..b1f5406 --- /dev/null +++ b/validation/_internal/preset_support.py @@ -0,0 +1,545 @@ +#!/usr/bin/env python3 +"""Shared CMake preset and host-toolchain support for validation workflows.""" + +from __future__ import annotations + +import copy +import json +import os +import platform +import re +import shutil +import subprocess +from dataclasses import dataclass +from pathlib import Path +from typing import Mapping, Sequence + + +WASM_PRESET = "wasm32-emscripten-release" +SUPPORTED_PRESETS = { + ("Windows", "x86_64"): ( + "windows-x64-msvc-release", + "windows-x64-clangcl-release", + "windows-x64-mingw-release", + WASM_PRESET, + ), + ("Windows", "arm64"): ( + "windows-arm64-msvc-release", + "windows-arm64-clangcl-release", + ), + ("Linux", "x86_64"): ( + "linux-x64-gcc-release", + "linux-x64-clang-release", + ), + ("Linux", "arm64"): ( + "linux-arm64-gcc-release", + "linux-arm64-clang-release", + ), + ("Darwin", "x86_64"): ( + "macos-x64-appleclang-release", + ), + ("Darwin", "arm64"): ( + "macos-arm64-appleclang-release", + ), +} +_ARCHITECTURE_ALIASES = { + "amd64": "x86_64", + "x64": "x86_64", + "x86_64": "x86_64", + "aarch64": "arm64", + "arm64": "arm64", +} +_MACRO = re.compile(r"\$\{([^{}]+)\}|\$(p?env)\{([^{}]+)\}") + + +class PipelineError(ValueError): + """The requested preset or host toolchain is unusable.""" + + +@dataclass(frozen=True) +class PresetSelection: + build_name: str + configure_name: str + binary_dir: Path + configuration: str | None + generator: str + compiler_hint: str + target_hint: str + environment: Mapping[str, str] + + +def supported_presets( + host_system: str | None = None, + host_machine: str | None = None, +) -> tuple[str, ...]: + system = host_system or platform.system() + machine = host_machine or platform.machine() + architecture = _ARCHITECTURE_ALIASES.get(machine.casefold(), machine.casefold()) + presets = SUPPORTED_PRESETS.get((system, architecture)) + if presets is None: + raise PipelineError(f"unsupported validation host {system}/{machine}") + return presets + + +def read_json(path: Path) -> dict[str, object]: + try: + value = json.loads(path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError) as error: + raise PipelineError(f"cannot read {path}: {error}") from error + if not isinstance(value, dict): + raise PipelineError(f"{path}: expected a JSON object") + return value + + +def _expand_text( + value: str, + *, + source_dir: Path, + preset_name: str, + generator: str, + environment: Mapping[str, str], + parent_environment: Mapping[str, str], + file_dir: Path | None = None, +) -> str: + fixed = { + "sourceDir": str(source_dir), + "sourceParentDir": str(source_dir.parent), + "sourceDirName": source_dir.name, + "presetName": preset_name, + "generator": generator, + "hostSystemName": platform.system(), + "pathListSep": os.pathsep, + "dollar": "$", + "fileDir": str(file_dir or source_dir), + } + + def replace(match: re.Match[str]) -> str: + cmake_name, environment_kind, environment_name = match.groups() + if cmake_name is not None: + if cmake_name not in fixed: + raise PipelineError( + f"unsupported CMake preset macro ${{{cmake_name}}} in {value!r}" + ) + return fixed[cmake_name] + assert environment_kind is not None and environment_name is not None + values = parent_environment if environment_kind == "penv" else environment + return values.get(environment_name, "") + + expanded = value + for _ in range(20): + updated = _MACRO.sub(replace, expanded) + if updated == expanded: + return updated + expanded = updated + raise PipelineError(f"cyclic CMake preset macro expansion in {value!r}") + + +def _include_path(path: Path, value: object, source_dir: Path) -> Path: + if not isinstance(value, str) or not value: + raise PipelineError(f"{path}: preset include entries must be non-empty strings") + expanded = _expand_text( + value, + source_dir=source_dir, + preset_name="", + generator="", + environment=os.environ, + parent_environment=os.environ, + file_dir=path.parent, + ) + include = Path(expanded) + if not include.is_absolute(): + include = path.parent / include + return include.resolve() + + +def _collect_preset_files(root: Path) -> list[tuple[Path, dict[str, object]]]: + source_dir = root.resolve() + visited: set[Path] = set() + active: set[Path] = set() + documents: list[tuple[Path, dict[str, object]]] = [] + + def visit(path: Path) -> None: + path = path.resolve() + if path in visited: + return + if path in active: + raise PipelineError(f"cyclic CMake preset include involving {path}") + active.add(path) + document = read_json(path) + includes = document.get("include", []) + if isinstance(includes, str): + includes = [includes] + if not isinstance(includes, list): + raise PipelineError(f"{path}: include must be a string or list") + for include in includes: + visit(_include_path(path, include, source_dir)) + active.remove(path) + visited.add(path) + documents.append((path, document)) + + project = source_dir / "CMakePresets.json" + if not project.is_file(): + raise PipelineError(f"missing CMake preset file: {project}") + visit(project) + user = source_dir / "CMakeUserPresets.json" + if user.is_file(): + visit(user) + return documents + + +def _preset_catalog( + documents: Sequence[tuple[Path, dict[str, object]]], + key: str, +) -> dict[str, dict[str, object]]: + catalog: dict[str, dict[str, object]] = {} + for path, document in documents: + values = document.get(key, []) + if not isinstance(values, list): + raise PipelineError(f"{path}: {key} must be a list") + for value in values: + if not isinstance(value, dict) or not isinstance(value.get("name"), str): + raise PipelineError(f"{path}: invalid entry in {key}") + name = value["name"] + if name in catalog: + raise PipelineError(f"duplicate {key} preset {name!r}") + catalog[name] = copy.deepcopy(value) + return catalog + + +def _merge_mapping( + inherited: Mapping[str, object], + child: Mapping[str, object], +) -> dict[str, object]: + result = copy.deepcopy(dict(inherited)) + for key, value in child.items(): + if key == "inherits": + continue + if value is None: + result.pop(key, None) + elif isinstance(value, dict) and isinstance(result.get(key), dict): + result[key] = _merge_mapping(result[key], value) + else: + result[key] = copy.deepcopy(value) + return result + + +def _resolve_preset( + catalog: Mapping[str, dict[str, object]], + name: str, + kind: str, +) -> dict[str, object]: + resolved: dict[str, dict[str, object]] = {} + active: set[str] = set() + + def resolve(current: str) -> dict[str, object]: + if current in resolved: + return copy.deepcopy(resolved[current]) + if current in active: + raise PipelineError(f"cyclic inheritance in {kind} preset {current!r}") + value = catalog.get(current) + if value is None: + raise PipelineError(f"unknown {kind} preset {current!r}") + active.add(current) + parents = value.get("inherits", []) + if isinstance(parents, str): + parents = [parents] + if not isinstance(parents, list) or not all( + isinstance(parent, str) for parent in parents + ): + raise PipelineError(f"{kind} preset {current!r} has invalid inheritance") + + combined: dict[str, object] = {} + # CMake gives earlier parents precedence when multiple parents define + # the same field, so merge them last. + for parent in reversed(parents): + combined = _merge_mapping(combined, resolve(parent)) + combined = _merge_mapping(combined, value) + combined["name"] = current + active.remove(current) + resolved[current] = combined + return copy.deepcopy(combined) + + return resolve(name) + + +def _expanded_environment( + raw: object, + *, + source_dir: Path, + preset_name: str, + generator: str, + parent_environment: Mapping[str, str], +) -> dict[str, str]: + if raw is None: + return dict(parent_environment) + if not isinstance(raw, dict): + raise PipelineError(f"configure preset {preset_name!r} has invalid environment") + + effective = dict(parent_environment) + pending: dict[str, str] = {} + for key, value in raw.items(): + if not isinstance(key, str): + raise PipelineError(f"configure preset {preset_name!r} has invalid environment") + if value is None: + effective.pop(key, None) + elif isinstance(value, str): + pending[key] = value + else: + raise PipelineError(f"configure preset {preset_name!r} has invalid environment") + + for _ in range(max(1, len(pending) + 1)): + changed = False + for key, value in pending.items(): + expanded = _expand_text( + value, + source_dir=source_dir, + preset_name=preset_name, + generator=generator, + environment=effective, + parent_environment=parent_environment, + ) + if effective.get(key) != expanded: + effective[key] = expanded + changed = True + if not changed: + break + return effective + + +def _cache_string(cache: object, name: str) -> str: + if not isinstance(cache, dict): + return "" + value = cache.get(name) + if isinstance(value, dict): + value = value.get("value") + return value if isinstance(value, str) else "" + + +def resolve_preset(root: Path, name: str) -> PresetSelection: + documents = _collect_preset_files(root) + build_catalog = _preset_catalog(documents, "buildPresets") + configure_catalog = _preset_catalog(documents, "configurePresets") + build = _resolve_preset(build_catalog, name, "build") + + configure_name = build.get("configurePreset") + if not isinstance(configure_name, str) or not configure_name: + raise PipelineError( + f"build preset {name!r} does not resolve to a configurePreset" + ) + configure = _resolve_preset(configure_catalog, configure_name, "configure") + binary_value = configure.get("binaryDir") + if not isinstance(binary_value, str) or not binary_value: + raise PipelineError( + f"configure preset {configure_name!r} does not define binaryDir" + ) + generator = configure.get("generator", "") + if not isinstance(generator, str): + raise PipelineError(f"configure preset {configure_name!r} has invalid generator") + environment = _expanded_environment( + configure.get("environment"), + source_dir=root.resolve(), + preset_name=configure_name, + generator=generator, + parent_environment=os.environ, + ) + binary_text = _expand_text( + binary_value, + source_dir=root.resolve(), + preset_name=configure_name, + generator=generator, + environment=environment, + parent_environment=os.environ, + ) + binary_dir = Path(binary_text) + if not binary_dir.is_absolute(): + binary_dir = root / binary_dir + + configuration = build.get("configuration") + if configuration is not None and not isinstance(configuration, str): + raise PipelineError(f"build preset {name!r} has invalid configuration") + cache = configure.get("cacheVariables") + compiler_hint = ( + _cache_string(cache, "CMAKE_CXX_COMPILER") + or environment.get("CXX", "") + ) + target_hint = " ".join( + value + for value in ( + _cache_string(cache, "VCPKG_TARGET_TRIPLET"), + _cache_string(cache, "VCPKG_CHAINLOAD_TOOLCHAIN_FILE"), + _cache_string(cache, "CMAKE_TOOLCHAIN_FILE"), + ) + if value + ) + return PresetSelection( + build_name=name, + configure_name=configure_name, + binary_dir=binary_dir.resolve(), + configuration=configuration, + generator=generator, + compiler_hint=compiler_hint, + target_hint=target_hint, + environment=environment, + ) + + +def needs_msvc_environment( + selection: PresetSelection, + *, + host_system: str | None = None, +) -> bool: + """Identify Windows Ninja presets that rely on the ambient MSVC toolchain.""" + + if (host_system or platform.system()).casefold() != "windows": + return False + generator = selection.generator.casefold() + if generator.startswith("visual studio"): + return False + if generator not in {"ninja", "ninja multi-config"}: + return False + + hints = f"{selection.compiler_hint} {selection.target_hint}".casefold() + alternatives = ("mingw", "emscripten", "gcc", "g++", "wasm32") + return not any(value in hints for value in alternatives) + + +def msvc_target_architecture(selection: PresetSelection) -> str: + hints = f"{selection.compiler_hint} {selection.target_hint}".casefold() + return "arm64" if "arm64" in hints else "x64" + + +def _environment_value(environment: Mapping[str, str], name: str) -> str: + expected = name.casefold() + return next( + ( + value + for key, value in environment.items() + if key.casefold() == expected + ), + "", + ) + + +def _find_vsdevcmd(environment: Mapping[str, str]) -> Path: + candidates: list[Path] = [] + installation = _environment_value(environment, "VSINSTALLDIR") + if installation: + candidates.append(Path(installation) / "Common7" / "Tools" / "VsDevCmd.bat") + + vswhere_candidates = [] + for variable in ("ProgramFiles(x86)", "ProgramFiles"): + parent = _environment_value(environment, variable) + if parent: + vswhere_candidates.append( + Path(parent) / "Microsoft Visual Studio" / "Installer" / "vswhere.exe" + ) + discovered = shutil.which( + "vswhere.exe", + path=_environment_value(environment, "PATH") or None, + ) + if discovered: + vswhere_candidates.append(Path(discovered)) + + for vswhere in vswhere_candidates: + if not vswhere.is_file(): + continue + try: + process = subprocess.run( + [ + str(vswhere), + "-latest", + "-products", + "*", + "-requires", + "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", + "-property", + "installationPath", + ], + env=dict(environment), + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + check=False, + ) + except OSError: + continue + if process.returncode: + continue + paths = [line.strip() for line in process.stdout.splitlines() if line.strip()] + if paths: + candidates.append( + Path(paths[-1]) / "Common7" / "Tools" / "VsDevCmd.bat" + ) + + for candidate in candidates: + if candidate.is_file(): + return candidate.resolve() + raise PipelineError( + "native Windows Ninja builds require the x64 MSVC developer environment, " + "but VsDevCmd.bat could not be found" + ) + + +def msvc_environment( + target_architecture: str, + parent_environment: Mapping[str, str] | None = None, +) -> dict[str, str]: + """Capture a clean native MSVC/clang-cl environment from Visual Studio.""" + + if target_architecture not in {"x64", "arm64"}: + raise PipelineError( + f"unsupported Visual Studio target architecture {target_architecture!r}" + ) + + parent = dict(os.environ if parent_environment is None else parent_environment) + vsdevcmd = _find_vsdevcmd(parent) + command = ( + f'call "{vsdevcmd}" -no_logo -arch={target_architecture} ' + f'-host_arch={target_architecture} ' + ">nul && set" + ) + try: + process = subprocess.run( + command, + shell=True, + executable=_environment_value(parent, "COMSPEC") or "cmd.exe", + env=parent, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + check=False, + ) + except OSError as error: + raise PipelineError( + f"cannot initialize the {target_architecture} Visual Studio " + f"environment: {error}" + ) from error + if process.returncode: + detail = process.stderr.strip() or process.stdout.strip() + suffix = f": {detail}" if detail else "" + raise PipelineError( + f"VsDevCmd.bat failed with status {process.returncode}{suffix}" + ) + + environment: dict[str, str] = {} + for line in process.stdout.splitlines(): + if not line or line.startswith("=") or "=" not in line: + continue + key, value = line.split("=", 1) + if key: + environment[key] = value + if ( + _environment_value(environment, "VSCMD_ARG_TGT_ARCH").casefold() + != target_architecture + ): + raise PipelineError( + f"Visual Studio did not initialize a {target_architecture} target environment" + ) + if not _environment_value(environment, "LIB") or not _environment_value( + environment, + "PATH", + ): + raise PipelineError( + f"Visual Studio returned an incomplete {target_architecture} build environment" + ) + return environment diff --git a/validation/_internal/supported_check_pipeline.py b/validation/_internal/supported_check_pipeline.py new file mode 100644 index 0000000..851a226 --- /dev/null +++ b/validation/_internal/supported_check_pipeline.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +"""Run the complete fltx CI check target for every supported host preset.""" + +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +import check_pipeline +from preset_support import PipelineError, supported_presets + + +def parse_args(argv: list[str] | None = None) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + return parser.parse_args(argv) + + +def main(root: Path, argv: list[str] | None = None) -> int: + parse_args(argv) + try: + presets = supported_presets() + except PipelineError as error: + print(f"all-supported checks failed: {error}", file=sys.stderr) + return 1 + + for index, preset in enumerate(presets, start=1): + print( + f"running check preset {index}/{len(presets)}: {preset}", + flush=True, + ) + try: + check_pipeline.run_checks(root, preset) + except PipelineError as error: + print( + f"all-supported checks failed for {preset}: {error}", + file=sys.stderr, + ) + return 1 + print(f"preset checks passed: {preset}", flush=True) + return 0 diff --git a/validation/_internal/test_checks.py b/validation/_internal/test_checks.py new file mode 100644 index 0000000..8cdf9d3 --- /dev/null +++ b/validation/_internal/test_checks.py @@ -0,0 +1,188 @@ +#!/usr/bin/env python3 +"""Focused tests for the local CI-check orchestration commands.""" + +from __future__ import annotations + +import io +import unittest +from contextlib import redirect_stderr, redirect_stdout +from pathlib import Path +from unittest import mock + +import check_pipeline +import supported_check_pipeline +from preset_support import PipelineError, PresetSelection + + +def selection() -> PresetSelection: + return PresetSelection( + build_name="native-build", + configure_name="native-configure", + binary_dir=Path("build/native"), + configuration=None, + generator="Ninja", + compiler_hint="g++", + target_hint="x64-linux", + environment={"PRESET_ENV": "active"}, + ) + + +class CheckPipelineTests(unittest.TestCase): + def test_preset_checks_configure_then_build_the_ci_target(self) -> None: + root = Path("source") + selected = selection() + with ( + mock.patch.object( + check_pipeline, + "resolve_preset", + return_value=selected, + ), + mock.patch.object( + check_pipeline, + "needs_msvc_environment", + return_value=False, + ), + mock.patch.object(check_pipeline, "_run") as run, + ): + check_pipeline.run_checks(root, "native-build") + + resolved_root = root.resolve() + self.assertEqual( + run.call_args_list, + [ + mock.call( + [ + "cmake", + "--preset", + "native-configure", + "-DFLTX_METRICS_EXTERNAL_COMPARISONS=OFF", + ], + resolved_root, + selected.environment, + ), + mock.call( + [ + "cmake", + "--build", + "--preset", + "native-build", + "--target", + "fltx_ci_checks", + "--parallel", + ], + resolved_root, + selected.environment, + ), + ], + ) + + def test_preset_checks_initialize_the_msvc_environment(self) -> None: + selected = selection() + developer_environment = {"VSCMD_ARG_TGT_ARCH": "x64"} + with ( + mock.patch.object( + check_pipeline, + "resolve_preset", + return_value=selected, + ), + mock.patch.object( + check_pipeline, + "needs_msvc_environment", + return_value=True, + ), + mock.patch.object( + check_pipeline, + "msvc_target_architecture", + return_value="x64", + ), + mock.patch.object( + check_pipeline, + "msvc_environment", + return_value=developer_environment, + ) as environment, + mock.patch.object(check_pipeline, "_run") as run, + ): + check_pipeline.run_checks(Path("source"), "native-build") + + environment.assert_called_once_with( + "x64", + parent_environment=selected.environment, + ) + self.assertTrue(all( + call.args[2] is developer_environment for call in run.call_args_list + )) + + def test_preset_main_reports_a_failed_check(self) -> None: + errors = io.StringIO() + with ( + mock.patch.object( + check_pipeline, + "run_checks", + side_effect=PipelineError("contract failure"), + ), + redirect_stderr(errors), + ): + status = check_pipeline.main( + Path("source"), + ["--preset", "native-build"], + ) + + self.assertEqual(status, 1) + self.assertIn("preset checks failed: contract failure", errors.getvalue()) + + def test_all_supported_checks_run_each_host_preset(self) -> None: + output = io.StringIO() + with ( + mock.patch.object( + supported_check_pipeline, + "supported_presets", + return_value=("first-release", "second-release"), + ), + mock.patch.object(check_pipeline, "run_checks") as run, + redirect_stdout(output), + ): + status = supported_check_pipeline.main(Path("source"), []) + + self.assertEqual(status, 0) + self.assertEqual( + run.call_args_list, + [ + mock.call(Path("source"), "first-release"), + mock.call(Path("source"), "second-release"), + ], + ) + self.assertIn("running check preset 1/2: first-release", output.getvalue()) + self.assertIn("preset checks passed: second-release", output.getvalue()) + + def test_all_supported_checks_stop_at_the_first_failure(self) -> None: + errors = io.StringIO() + with ( + mock.patch.object( + supported_check_pipeline, + "supported_presets", + return_value=( + "first-release", + "second-release", + "third-release", + ), + ), + mock.patch.object( + check_pipeline, + "run_checks", + side_effect=(None, PipelineError("missing toolchain")), + ) as run, + redirect_stdout(io.StringIO()), + redirect_stderr(errors), + ): + status = supported_check_pipeline.main(Path("source"), []) + + self.assertEqual(status, 1) + self.assertEqual(run.call_count, 2) + self.assertIn( + "all-supported checks failed for second-release: missing toolchain", + errors.getvalue(), + ) + + +if __name__ == "__main__": + unittest.main() diff --git a/validation/accuracy/comparison_ops.hpp b/validation/accuracy/comparison_ops.hpp new file mode 100644 index 0000000..e501965 --- /dev/null +++ b/validation/accuracy/comparison_ops.hpp @@ -0,0 +1,579 @@ +#pragma once + +#include "../support/tlfloat_ops.hpp" +#include "runner.hpp" + +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace fltx::tests::accuracy::comparison_ops +{ + template + using qd_value = std::conditional_t, implementations::qd_f128, + implementations::qd_f256>; + + template + using boost_value = std::conditional_t, implementations::cppdd, + implementations::mpfr64>; + + template + using tlfloat_value = std::conditional_t, + implementations::tl_f128, implementations::tl_f256>; + + template [[nodiscard]] auto qdpp(std::string_view api, Eval evaluate) + { + return comparison>(implementations::qdpp_identity, api, + std::move(evaluate)); + } + + template + [[nodiscard]] auto qdpp_if(bool supported, std::string_view api, Eval evaluate) + { + auto out = qdpp(api, std::move(evaluate)); + out.info.enabled = out.info.enabled && supported; + return out; + } + + template + [[nodiscard]] auto boost_impl(std::string_view api, Eval evaluate) + { + return comparison>(implementations::boost_identity, api, + std::move(evaluate)); + } + + template + [[nodiscard]] auto tlfloat_impl(std::string_view api, Eval evaluate) + { + return comparison>(implementations::tlfloat_identity, api, + std::move(evaluate)); + } + + template + void register_comparison_accuracy( + runner& run, + std::size_t samples) + { + using real = mpfr::real; + const std::vector test_domains{ + domains::moderate(samples) + }; + run.predicate( + "comparisons", "equal", test_domains, + [](const auto& x, const auto& y) { return x == y; }, + [](const real& x, const real& y) { return x == y; }, + qdpp("qdpp operator==", + [](const auto& x, const auto& y) { return x == y; }), + boost_impl("Boost operator==", + [](const auto& x, const auto& y) { return x == y; }), + tlfloat_impl("TLFloat operator==", + [](const auto& x, const auto& y) { return x == y; })); + run.predicate( + "comparisons", "not_equal", test_domains, + [](const auto& x, const auto& y) { return x != y; }, + [](const real& x, const real& y) { return x != y; }, + qdpp("qdpp operator!=", + [](const auto& x, const auto& y) { return x != y; }), + boost_impl("Boost operator!=", + [](const auto& x, const auto& y) { return x != y; }), + tlfloat_impl("TLFloat operator!=", + [](const auto& x, const auto& y) { return x != y; })); + run.predicate( + "comparisons", "less", test_domains, + [](const auto& x, const auto& y) { return x < y; }, + [](const real& x, const real& y) { return x < y; }, + qdpp("qdpp operator<", + [](const auto& x, const auto& y) { return x < y; }), + boost_impl("Boost operator<", + [](const auto& x, const auto& y) { return x < y; }), + tlfloat_impl("TLFloat operator<", + [](const auto& x, const auto& y) { return x < y; })); + run.predicate( + "comparisons", "less_equal", test_domains, + [](const auto& x, const auto& y) { return x <= y; }, + [](const real& x, const real& y) { return x <= y; }, + qdpp("qdpp operator<=", + [](const auto& x, const auto& y) { return x <= y; }), + boost_impl("Boost operator<=", + [](const auto& x, const auto& y) { return x <= y; }), + tlfloat_impl("TLFloat operator<=", + [](const auto& x, const auto& y) { return x <= y; })); + run.predicate( + "comparisons", "greater", test_domains, + [](const auto& x, const auto& y) { return x > y; }, + [](const real& x, const real& y) { return x > y; }, + qdpp("qdpp operator>", + [](const auto& x, const auto& y) { return x > y; }), + boost_impl("Boost operator>", + [](const auto& x, const auto& y) { return x > y; }), + tlfloat_impl("TLFloat operator>", + [](const auto& x, const auto& y) { return x > y; })); + run.predicate( + "comparisons", "greater_equal", test_domains, + [](const auto& x, const auto& y) { return x >= y; }, + [](const real& x, const real& y) { return x >= y; }, + qdpp("qdpp operator>=", + [](const auto& x, const auto& y) { return x >= y; }), + boost_impl("Boost operator>=", + [](const auto& x, const auto& y) { return x >= y; }), + tlfloat_impl("TLFloat operator>=", + [](const auto& x, const auto& y) { return x >= y; })); + } + + template [[nodiscard]] auto qd_cbrt(const Value& value) + { +#if FLTX_METRICS_HAS_QDPP + const Value root = ::nroot(value < 0.0 ? -value : value, 3); + return value < 0.0 ? -root : root; +#else + return value; +#endif + } + + template [[nodiscard]] auto qd_sqr(const Value& value) + { +#if FLTX_METRICS_HAS_QDPP + return ::sqr(value); +#else + return value * value; +#endif + } + + template [[nodiscard]] auto qd_inv(const Value& value) + { +#if FLTX_METRICS_HAS_QDPP + return ::inv(value); +#else + return Value{1} / value; +#endif + } + + template [[nodiscard]] auto qd_min(const Value& x, const Value& y) + { +#if FLTX_METRICS_HAS_QDPP + return (::min)(x, y); +#else + return x < y ? x : y; +#endif + } + + template [[nodiscard]] auto qd_max(const Value& x, const Value& y) + { +#if FLTX_METRICS_HAS_QDPP + return (::max)(x, y); +#else + return x < y ? y : x; +#endif + } + + template [[nodiscard]] auto qd_trunc(const Value& value) + { +#if FLTX_METRICS_HAS_QDPP + return ::aint(value); +#else + return value; +#endif + } + + template [[nodiscard]] auto qd_remainder(const Value& x, const Value& y) + { +#if FLTX_METRICS_HAS_QDPP + return ::drem(x, y); +#else + return x - y; +#endif + } + + template [[nodiscard]] auto qd_ipow(const Value& value) + { +#if FLTX_METRICS_HAS_QDPP + return ::npwr(value, 7); +#else + return value; +#endif + } + + template [[nodiscard]] auto qd_remquo(const Value& x, const Value& y) + { +#if FLTX_METRICS_HAS_QDPP + Value remainder{}; + const Value quotient = ::divrem(x, y, remainder); + const double raw = ::to_double(quotient); + const int low = static_cast(std::fmod(std::abs(raw), 8.0)); + return std::pair{remainder, Value{raw < 0.0 ? -low : low}}; +#else + return std::pair{x, y}; +#endif + } + + template + [[nodiscard]] Value qd_parse(const std::string& text) + { +#if FLTX_METRICS_HAS_QDPP + return Value::read(text.c_str()); +#else + return Value{}; +#endif + } + + template + [[nodiscard]] std::string qd_to_string(const Value& value, int digits) + { +#if FLTX_METRICS_HAS_QDPP + return value.to_string( + digits, 0, std::ios_base::scientific, false, false); +#else + (void)digits; + return std::to_string(value); +#endif + } + + template + [[nodiscard]] std::string qd_write_string(const Value& value, int digits) + { +#if FLTX_METRICS_HAS_QDPP + std::array buffer{}; + value.write( + buffer.data(), + static_cast(buffer.size()), + digits, + false, + false); + return std::string{buffer.data()}; +#else + (void)digits; + return std::to_string(value); +#endif + } + + template [[nodiscard]] auto boost_abs(const Value& value) + { + using boost::multiprecision::abs; + return abs(value); + } + + template [[nodiscard]] auto boost_fabs(const Value& value) + { + using boost::multiprecision::fabs; + return fabs(value); + } + + template [[nodiscard]] auto boost_floor(const Value& value) + { + using boost::multiprecision::floor; + return floor(value); + } + + template [[nodiscard]] auto boost_ceil(const Value& value) + { + using boost::multiprecision::ceil; + return ceil(value); + } + + template [[nodiscard]] auto boost_trunc(const Value& value) + { + using boost::multiprecision::trunc; + return trunc(value); + } + + template [[nodiscard]] auto boost_round(const Value& value) + { + using boost::multiprecision::round; + return round(value); + } + + template [[nodiscard]] auto boost_lround_value(const Value& value) + { + using boost::multiprecision::lround; + return Value{lround(value)}; + } + + template [[nodiscard]] auto boost_llround_value(const Value& value) + { + using boost::multiprecision::llround; + return Value{llround(value)}; + } + + template [[nodiscard]] auto boost_fmod(const Value& x, const Value& y) + { + using boost::multiprecision::fmod; + return fmod(x, y); + } + + template [[nodiscard]] auto boost_remainder(const Value& x, const Value& y) + { + using boost::multiprecision::remainder; + return remainder(x, y); + } + + template [[nodiscard]] auto boost_remquo(const Value& x, const Value& y) + { + int quotient = 0; + using boost::multiprecision::remquo; + const Value remainder = remquo(x, y, "ient); + const int low = quotient < 0 ? -((-quotient) & 7) : (quotient & 7); + return std::pair{remainder, Value{low}}; + } + + template [[nodiscard]] auto boost_modf(const Value& value) + { + Value integral{}; + using boost::multiprecision::modf; + const Value fraction = modf(value, &integral); + return std::pair{fraction, integral}; + } + + template [[nodiscard]] auto boost_frexp(const Value& value) + { + int exponent = 0; + using boost::multiprecision::frexp; + const Value fraction = frexp(value, &exponent); + return std::pair{fraction, Value{exponent}}; + } + + template [[nodiscard]] auto boost_ldexp(const Value& value, int exponent) + { + using boost::multiprecision::ldexp; + return ldexp(value, exponent); + } + + template [[nodiscard]] auto boost_scalbn(const Value& value, int exponent) + { + using boost::multiprecision::scalbn; + return scalbn(value, exponent); + } + + template [[nodiscard]] auto boost_scalbln(const Value& value, long exponent) + { + using boost::multiprecision::scalbln; + return scalbln(value, exponent); + } + + template [[nodiscard]] auto boost_logb(const Value& value) + { + using boost::multiprecision::logb; + return logb(value); + } + + template + [[nodiscard]] auto boost_fma(const Value& x, const Value& y, const Value& z) + { + using boost::multiprecision::fma; + return fma(x, y, z); + } + + template [[nodiscard]] auto boost_fmin(const Value& x, const Value& y) + { + using boost::multiprecision::fmin; + return fmin(x, y); + } + + template [[nodiscard]] auto boost_fmax(const Value& x, const Value& y) + { + using boost::multiprecision::fmax; + return fmax(x, y); + } + + template [[nodiscard]] auto boost_fdim(const Value& x, const Value& y) + { + using boost::multiprecision::fdim; + return fdim(x, y); + } + + template [[nodiscard]] auto boost_copysign(const Value& x, const Value& y) + { + using boost::multiprecision::copysign; + return copysign(x, y); + } + + template [[nodiscard]] auto boost_ilogb_value(const Value& value) + { + using boost::multiprecision::ilogb; + return Value{ilogb(value)}; + } + + template [[nodiscard]] auto boost_nextafter(const Value& x, const Value& y) + { + return boost::math::nextafter(x, y); + } + + template [[nodiscard]] auto boost_ipow(const Value& value) + { + using boost::multiprecision::pow; + return pow(value, 7); + } + + template [[nodiscard]] auto boost_sqrt(const Value& value) + { + using boost::multiprecision::sqrt; + return sqrt(value); + } + + template [[nodiscard]] auto boost_cbrt(const Value& value) + { + using boost::multiprecision::cbrt; + return cbrt(value); + } + + template [[nodiscard]] auto boost_hypot(const Value& x, const Value& y) + { + using boost::multiprecision::hypot; + return hypot(x, y); + } + + template [[nodiscard]] auto boost_sin(const Value& value) + { + using boost::multiprecision::sin; + return sin(value); + } + + template [[nodiscard]] auto boost_cos(const Value& value) + { + using boost::multiprecision::cos; + return cos(value); + } + + template [[nodiscard]] auto boost_tan(const Value& value) + { + using boost::multiprecision::tan; + return tan(value); + } + + template [[nodiscard]] auto boost_atan(const Value& value) + { + using boost::multiprecision::atan; + return atan(value); + } + + template [[nodiscard]] auto boost_atan2(const Value& y, const Value& x) + { + using boost::multiprecision::atan2; + return atan2(y, x); + } + + template [[nodiscard]] auto boost_asin(const Value& value) + { + using boost::multiprecision::asin; + return asin(value); + } + + template [[nodiscard]] auto boost_acos(const Value& value) + { + using boost::multiprecision::acos; + return acos(value); + } + + template [[nodiscard]] auto boost_exp(const Value& value) + { + using boost::multiprecision::exp; + return exp(value); + } + + template [[nodiscard]] auto boost_exp2(const Value& value) + { + using boost::multiprecision::exp2; + return exp2(value); + } + + template [[nodiscard]] auto boost_expm1(const Value& value) + { + using boost::multiprecision::expm1; + return expm1(value); + } + + template [[nodiscard]] auto boost_log(const Value& value) + { + using boost::multiprecision::log; + return log(value); + } + + template [[nodiscard]] auto boost_log2(const Value& value) + { + using boost::multiprecision::log2; + return log2(value); + } + + template [[nodiscard]] auto boost_log10(const Value& value) + { + using boost::multiprecision::log10; + return log10(value); + } + + template [[nodiscard]] auto boost_log1p(const Value& value) + { + using boost::multiprecision::log1p; + return log1p(value); + } + + template [[nodiscard]] auto boost_pow(const Value& x, const Value& y) + { + using boost::multiprecision::pow; + return pow(x, y); + } + + template [[nodiscard]] auto boost_sinh(const Value& value) + { + using boost::multiprecision::sinh; + return sinh(value); + } + + template [[nodiscard]] auto boost_cosh(const Value& value) + { + using boost::multiprecision::cosh; + return cosh(value); + } + + template [[nodiscard]] auto boost_tanh(const Value& value) + { + using boost::multiprecision::tanh; + return tanh(value); + } + + template [[nodiscard]] auto boost_asinh(const Value& value) + { + using boost::multiprecision::asinh; + return asinh(value); + } + + template [[nodiscard]] auto boost_acosh(const Value& value) + { + using boost::multiprecision::acosh; + return acosh(value); + } + + template [[nodiscard]] auto boost_atanh(const Value& value) + { + using boost::multiprecision::atanh; + return atanh(value); + } + + template [[nodiscard]] auto boost_erf(const Value& value) + { + using boost::multiprecision::erf; + return erf(value); + } + + template [[nodiscard]] auto boost_erfc(const Value& value) + { + using boost::multiprecision::erfc; + return erfc(value); + } + + template [[nodiscard]] auto boost_lgamma(const Value& value) + { + using boost::multiprecision::lgamma; + return lgamma(value); + } + + template [[nodiscard]] auto boost_tgamma(const Value& value) + { + using boost::multiprecision::tgamma; + return tgamma(value); + } +} // namespace fltx::tests::accuracy::comparison_ops diff --git a/validation/accuracy/f128.cpp b/validation/accuracy/f128.cpp new file mode 100644 index 0000000..4bfa43d --- /dev/null +++ b/validation/accuracy/f128.cpp @@ -0,0 +1,841 @@ +#include "comparison_ops.hpp" +#include "trig_domains.hpp" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace fltx::tests::accuracy +{ + namespace + { + using domains::domain; + using real = mpfr::real; + using namespace comparison_ops; + + [[nodiscard]] std::vector ordinary(std::size_t n) + { + std::vector out; + out.push_back(domains::near_one(n)); + out.push_back(domains::moderate(n)); + return out; + } + + [[nodiscard]] std::vector positive(std::size_t n) + { + std::vector out; + out.push_back(domains::positive(domains::near_one(n), 0x1p-40)); + out.push_back(domains::positive(domains::wide_exponent(n, true), 0x1p-900)); + out.push_back(domains::positive(domains::extreme_finite(n, true), 0x1p-1021)); + return out; + } + + [[nodiscard]] std::vector trig(std::size_t n) + { + std::vector out; + out.push_back(domains::moderate(n)); + out.push_back(domains::argument_reduction_f128(n)); + out.push_back( + trig_domains::quadrant_boundaries(n)); + return out; + } + + [[nodiscard]] std::vector unit(std::size_t n) + { + std::vector out; + out.push_back(domains::bounded(domains::moderate(n), -0.999, 0.999)); + out.push_back(domains::boundary(n, -1.0, 1.0)); + return out; + } + + [[nodiscard]] std::vector exponential(std::size_t n) + { + std::vector out; + out.push_back(domains::moderate(n, -8.0, 8.0)); + out.push_back(domains::interval("boundary", -700.0, 700.0, n, default_seed ^ 0x15u)); + return out; + } + + [[nodiscard]] domain nonzero_moderate(std::size_t n) + { + domain out = domains::moderate(n); + for (sample& value : out.values) + { + if (std::abs(value.limb[0]) < 0.25) + value = make_exact_sample(value.limb[0] < 0.0 ? -0.25 : 0.25); + } + return out; + } + + [[nodiscard]] sample as_sample( + const bl::f128& value, + std::string label) + { + return {{value.hi, value.lo, 0.0, 0.0}, std::move(label)}; + } + + [[nodiscard]] domains::binary_domain fmod_quotient_reduction_inputs() + { + domains::binary_domain out{ + "quotient_reduction", default_seed ^ 0x19u, {} + }; + const bl::f128 decimal_lhs = bl::parse( + "4.6958550912494028428400315673292717414e+19"); + const bl::f128 decimal_rhs = bl::parse( + "2.9410562077176174010123838366180003482e+02"); + const double huge = + std::nextafter(std::ldexp(1.0, 900), 0.0); + + out.values.push_back({ + as_sample(decimal_lhs, "decimal huge-quotient lhs"), + as_sample(decimal_rhs, "decimal huge-quotient rhs") + }); + out.values.push_back({ + make_exact_sample(huge, "maximum binary64 below 2^900"), + make_exact_sample(-7.5, "negative double divisor") + }); + return out; + } + + [[nodiscard]] domain rounding_inputs(std::size_t n) + { + domain out{"boundary", default_seed ^ 0x18u, {}}; + out.values = {make_exact_sample(0.0, "+0"), + make_exact_sample(-0.0, "-0"), + make_exact_sample(-3.5, "-3.5 tie"), + make_exact_sample(-2.5, "-2.5 tie"), + make_exact_sample(-0.5, "-0.5 tie"), + make_exact_sample(0.5, "0.5 tie"), + make_exact_sample(2.5, "2.5 tie"), + make_exact_sample(3.5, "3.5 tie"), + {{2.5, -0x1p-54, 0.0, 0.0}, "just below 2.5"}, + {{2.5, 0x1p-54, 0.0, 0.0}, "just above 2.5"}, + {{-2.5, -0x1p-54, 0.0, 0.0}, "just below -2.5"}, + {{-2.5, 0x1p-54, 0.0, 0.0}, "just above -2.5"}}; + + random_bits rng(out.seed); + for (std::size_t i = 0; i < n; ++i) + { + const double integer = static_cast(static_cast(rng.next() % 33u) - 16); + const double fraction = static_cast(rng.next() % 9u) * 0.125; + out.values.push_back( + make_sample((rng.next() & 1u) != 0 ? integer + fraction : integer - fraction)); + } + return out; + } + + [[nodiscard]] domain long_rounding_inputs(std::size_t n) + { + domain out = rounding_inputs(n); + out.values.push_back( + {{static_cast(std::numeric_limits::min()), 0.5, 0.0, 0.0}, + "long min above half"}); + if constexpr (std::numeric_limits::digits <= 53) + { + out.values.push_back( + {{static_cast(std::numeric_limits::max()), -0.49, 0.0, 0.0}, + "long max below half"}); + } + else + { + out.values.push_back({{0x1p52, 0.5, 0.0, 0.0}, "long two52 half"}); + out.values.push_back({{0x1p53, 1.0, 0.0, 0.0}, "long two53 plus one"}); + out.values.push_back({{-0x1p53, 0.5, 0.0, 0.0}, "negative long two53 below half"}); + } + return out; + } + + [[nodiscard]] domain long_long_rounding_inputs(std::size_t n) + { + domain out = rounding_inputs(n); + out.values.push_back( + {{static_cast(std::numeric_limits::min()), 0.5, 0.0, 0.0}, + "long long min above half"}); + out.values.push_back({{0x1p52, 0.5, 0.0, 0.0}, "long long two52 half"}); + out.values.push_back({{-0x1p52, -0.5, 0.0, 0.0}, "negative long long two52 half"}); + out.values.push_back({{0x1p53, -0.5, 0.0, 0.0}, "long long two53 below half"}); + out.values.push_back({{0x1p53, 1.0, 0.0, 0.0}, "long long two53 plus one"}); + out.values.push_back({{-0x1p53, 0.5, 0.0, 0.0}, "negative long long two53 below half"}); + return out; + } + } // namespace + + int run_f128(csv_writer& output, const options& settings) + { + using Float = bl::f128; + runner run(output, settings); + const std::size_t n = settings.samples; + + constexpr int parse_digits = + std::numeric_limits::max_digits10 + 16; + auto parse_moderate = domains::decimal_text( + "moderate", + n, + parse_digits, + -20, + 20, + default_seed ^ 0x71u); + parse_moderate.values.push_back( + "1.000000000000000000000000000000012325951644078309459558258" + "8325435348386438505485784844495356082916259765625"); + auto parse_wide = domains::decimal_text( + "wide_exponent", + n, + parse_digits, + -300, + 300, + default_seed ^ 0x72u); + parse_wide.values.push_back( + "-4.215228812298638183537364477017984307424253045187e-293"); + parse_wide.values.push_back( + "1.108604482660954417384267803154443052106302458983e-292"); + run.parse( + "io", + "parse", + { + std::move(parse_moderate), + std::move(parse_wide) + }, + [](const std::string& text) { return bl::parse(text); }, + qdpp( + "qdpp read", + [](const std::string& text) { + return qd_parse>(text); + }), + boost_impl( + "Boost string constructor", + [](const std::string& text) { + return boost_value{text}; + }), + tlfloat_impl( + "TLFloat string constructor", + [](const std::string& text) { + return tlfloat_ops::parse>(text); + })); + + constexpr int format_digits = + std::numeric_limits::max_digits10; + run.format( + "io", + "to_string", + {domains::moderate(n), domains::wide_exponent(n)}, + [=](const auto& value) { + return bl::to_string( + value, format_digits, std::ios_base::scientific); + }, + qdpp( + "qdpp to_string", + [=](const auto& value) { + return qd_to_string(value, format_digits); + }), + boost_impl( + "Boost number::str", + [=](const auto& value) { + return value.str( + format_digits, std::ios_base::scientific); + }), + tlfloat_impl( + "tlfloat::to_string", + [=](const auto& value) { + return tlfloat_ops::to_string(value, format_digits); + })); + run.format( + "io", + "to_chars", + {domains::moderate(n), domains::wide_exponent(n)}, + [=](const auto& value) { + std::array buffer{}; + const auto written = bl::to_chars( + buffer.data(), + buffer.data() + buffer.size(), + value, + std::chars_format::scientific, + format_digits); + if (written.ec != std::errc{}) + throw std::runtime_error("bl::to_chars failed"); + return std::string{buffer.data(), written.ptr}; + }, + qdpp( + "qdpp write", + [=](const auto& value) { + return qd_write_string(value, format_digits); + })); + + register_comparison_accuracy(run, n); + + run.binary_pairs( + "arithmetic", "add", + domains::arithmetic( + domains::arithmetic_operation::add, + n, std::numeric_limits::digits), + [](auto x, auto y) { return x + y; }, + [](const real& x, const real& y) { return x + y; }, + qdpp("qdpp operator+", [](auto x, auto y) { return x + y; }), + boost_impl("Boost operator+", [](auto x, auto y) { return x + y; }), + tlfloat_impl("TLFloat operator+", [](auto x, auto y) { return x + y; })); + run.binary_pairs( + "arithmetic", "subtract", + domains::arithmetic( + domains::arithmetic_operation::subtract, + n, std::numeric_limits::digits), + [](auto x, auto y) { return x - y; }, + [](const real& x, const real& y) { return x - y; }, + qdpp("qdpp operator-", [](auto x, auto y) { return x - y; }), + boost_impl("Boost operator-", [](auto x, auto y) { return x - y; }), + tlfloat_impl("TLFloat operator-", [](auto x, auto y) { return x - y; })); + run.binary_pairs( + "arithmetic", "multiply", + domains::arithmetic( + domains::arithmetic_operation::multiply, + n, std::numeric_limits::digits), + [](auto x, auto y) { return x * y; }, + [](const real& x, const real& y) { return x * y; }, + qdpp("qdpp operator*", [](auto x, auto y) { return x * y; }), + boost_impl("Boost operator*", [](auto x, auto y) { return x * y; }), + tlfloat_impl("TLFloat operator*", [](auto x, auto y) { return x * y; })); + run.binary_pairs( + "arithmetic", "divide", + domains::arithmetic( + domains::arithmetic_operation::divide, + n, std::numeric_limits::digits), + [](auto x, auto y) { return x / y; }, + [](const real& x, const real& y) { return x / y; }, + qdpp("qdpp operator/", [](auto x, auto y) { return x / y; }), + boost_impl("Boost operator/", [](auto x, auto y) { return x / y; }), + tlfloat_impl("TLFloat operator/", [](auto x, auto y) { return x / y; })); + run.ternary( + "floating_point_utilities", "fma", + {domains::moderate_ternary(n), domains::fma_cancellation(n), + domains::wide_exponent_ternary(n, false, -300, 300)}, + [](auto x, auto y, auto z) { return bl::fma(x, y, z); }, + [](const real& x, const real& y, const real& z) { return mpfr::fma(x, y, z); }, + boost_impl("boost::multiprecision::fma", + [](auto x, auto y, auto z) { return boost_fma(x, y, z); }), + tlfloat_impl("tlfloat::fma", + [](auto x, auto y, auto z) { return tlfloat_ops::fma(x, y, z); })); + run.unary_exact( + "floating_point_utilities", "abs", {domains::wide_exponent(n), domains::subnormal(n)}, + [](auto x) { return bl::abs(x); }, + [](const real& x) { + using boost::multiprecision::abs; + return abs(x); + }, + qdpp("qdpp abs", [](auto x) { return ::abs(x); }), + boost_impl("boost::multiprecision::abs", [](auto x) { return boost_abs(x); }), + tlfloat_impl("tlfloat::abs", [](auto x) { return tlfloat_ops::abs(x); })); + run.unary_exact( + "floating_point_utilities", "fabs", {domains::moderate(n)}, [](auto x) { return bl::fabs(x); }, + [](const real& x) { + using boost::multiprecision::abs; + return abs(x); + }, + qdpp("qdpp fabs", [](auto x) { return ::fabs(x); }), + boost_impl("boost::multiprecision::fabs", [](auto x) { return boost_fabs(x); }), + tlfloat_impl("tlfloat::abs", [](auto x) { return tlfloat_ops::abs(x); })); + run.unary( + "roots_and_powers", "sqr", + {domains::moderate(n), domains::wide_exponent(n, false, -400, 400)}, + [](auto x) { return bl::sqr(x); }, [](const real& x) { return x * x; }, + qdpp("qdpp sqr", [](auto x) { return qd_sqr(x); })); + run.unary( + "floating_point_utilities", "recip", + {domains::positive(domains::near_one(n), 0.125), + domains::positive(domains::wide_exponent(n, true, -400, 400), 0x1p-400)}, + [](auto x) { return bl::recip(x); }, [](const real& x) { return real{1} / x; }, + qdpp("qdpp inv", [](auto x) { return qd_inv(x); })); + run.binary_exact( + "floating_point_utilities", "fmin", {domains::moderate(n), domains::wide_exponent(n)}, + [](auto x, auto y) { return bl::fmin(x, y); }, + [](const real& x, const real& y) { return x < y ? x : y; }, + boost_impl("boost::multiprecision::fmin", + [](auto x, auto y) { return boost_fmin(x, y); }), + tlfloat_impl("tlfloat::fmin", + [](auto x, auto y) { return tlfloat_ops::fmin(x, y); })); + run.binary_exact( + "floating_point_utilities", "fmax", {domains::moderate(n), domains::wide_exponent(n)}, + [](auto x, auto y) { return bl::fmax(x, y); }, + [](const real& x, const real& y) { return x > y ? x : y; }, + boost_impl("boost::multiprecision::fmax", + [](auto x, auto y) { return boost_fmax(x, y); }), + tlfloat_impl("tlfloat::fmax", + [](auto x, auto y) { return tlfloat_ops::fmax(x, y); })); + run.binary( + "floating_point_utilities", "fdim", {domains::moderate(n), domains::near_equal_cancellation(n)}, + [](auto x, auto y) { return bl::fdim(x, y); }, + [](const real& x, const real& y) { return x > y ? x - y : real{0}; }, + boost_impl("boost::multiprecision::fdim", + [](auto x, auto y) { return boost_fdim(x, y); }), + tlfloat_impl("tlfloat::fdim", + [](auto x, auto y) { return tlfloat_ops::fdim(x, y); })); + run.binary_exact( + "floating_point_utilities", "copysign", {domains::moderate(n)}, + [](auto x, auto y) { return bl::copysign(x, y); }, + [](const real& x, const real& y) { + using boost::multiprecision::abs; + return y < 0 ? -abs(x) : abs(x); + }, + boost_impl("boost::multiprecision::copysign", + [](auto x, auto y) { return boost_copysign(x, y); }), + tlfloat_impl("tlfloat::copysign", + [](auto x, auto y) { return tlfloat_ops::copysign(x, y); })); + + run.unary_exact( + "rounding", "floor", {rounding_inputs(n)}, [](auto x) { return bl::floor(x); }, + [](const real& x) { + using boost::multiprecision::floor; + return floor(x); + }, + qdpp("qdpp floor", [](auto x) { return ::floor(x); }), + boost_impl("boost::multiprecision::floor", + [](auto x) { return boost_floor(x); }), + tlfloat_impl("tlfloat::floor", [](auto x) { return tlfloat_ops::floor(x); })); + run.unary_exact( + "rounding", "ceil", {rounding_inputs(n)}, [](auto x) { return bl::ceil(x); }, + [](const real& x) { + using boost::multiprecision::ceil; + return ceil(x); + }, + qdpp("qdpp ceil", [](auto x) { return ::ceil(x); }), + boost_impl("boost::multiprecision::ceil", [](auto x) { return boost_ceil(x); }), + tlfloat_impl("tlfloat::ceil", [](auto x) { return tlfloat_ops::ceil(x); })); + run.unary_exact( + "rounding", "trunc", {rounding_inputs(n)}, [](auto x) { return bl::trunc(x); }, + [](const real& x) { return mpfr::trunc(x); }, + qdpp("qdpp aint", [](auto x) { return qd_trunc(x); }), + boost_impl("boost::multiprecision::trunc", + [](auto x) { return boost_trunc(x); }), + tlfloat_impl("tlfloat::trunc", [](auto x) { return tlfloat_ops::trunc(x); })); + run.unary_exact( + "rounding", "round", {rounding_inputs(n)}, [](auto x) { return bl::round(x); }, + [](const real& x) { return mpfr::round_away_from_zero(x); }, + qdpp("qdpp round", [](auto x) { return ::round(x); }), + boost_impl("boost::multiprecision::round", + [](auto x) { return boost_round(x); }), + tlfloat_impl("tlfloat::round", [](auto x) { return tlfloat_ops::round(x); })); + run.unary_exact( + "rounding", "roundeven", {rounding_inputs(n)}, [](auto x) { return bl::roundeven(x); }, + [](const real& x) { return mpfr::round_even(x); }, + tlfloat_impl("tlfloat::rint", [](auto x) { return tlfloat_ops::roundeven(x); })); + run.unary( + "rounding", "round_decimals", {domains::moderate(n)}, + [](auto x) { return bl::round_decimals(x, 3); }, + [](const real& x) { return mpfr::round_decimals(x, 3); }); + run.unary( + "rounding", "round_significant", + {domains::wide_exponent(n, false, -100, 100)}, + [](auto x) { return bl::round_significant(x, 7); }, + [](const real& x) { return mpfr::round_significant(x, 7); }); + run.unary_exact( + "rounding", "lround", {long_rounding_inputs(n)}, + [](auto x) { return bl::f128{static_cast(bl::lround(x))}; }, + [](const real& x) { + const real rounded = mpfr::round_away_from_zero(x); + return rounded == 0 ? real{0} : rounded; + }, + boost_impl("boost::multiprecision::lround", + [](auto x) { return boost_lround_value(x); })); + run.unary_exact( + "rounding", "llround", {long_long_rounding_inputs(n)}, + [](auto x) { return bl::f128{static_cast(bl::llround(x))}; }, + [](const real& x) { + const real rounded = mpfr::round_away_from_zero(x); + return rounded == 0 ? real{0} : rounded; + }, + boost_impl("boost::multiprecision::llround", + [](auto x) { return boost_llround_value(x); })); + + run.binary_pair( + "remainders", "remquo", {nonzero_moderate(n)}, + [](auto x, auto y) { + int quotient = 0; + const bl::f128 remainder = bl::remquo(x, y, "ient); + const int low_bits = quotient < 0 ? -((-quotient) & 7) : (quotient & 7); + return std::pair{remainder, bl::f128{static_cast(low_bits)}}; + }, + [](const real& x, const real& y) { + return std::pair{mpfr::remainder(x, y), real{mpfr::remquo_bits(x, y)}}; + }, + qdpp("qdpp divrem", [](auto x, auto y) { return qd_remquo(x, y); }), + boost_impl("boost::multiprecision::remquo", + [](auto x, auto y) { return boost_remquo(x, y); }), + tlfloat_impl("tlfloat::remquo", + [](auto x, auto y) { return tlfloat_ops::remquo(x, y); })); + run.unary_pair_exact( + "floating_point_utilities", "modf", {domains::moderate(n), domains::wide_exponent(n)}, + [](auto x) { + bl::f128 integral{}; + const bl::f128 fractional = bl::modf(x, &integral); + return std::pair{fractional, integral}; + }, + [](const real& x) { + const real integral = mpfr::trunc(x); + real fractional = x == 0 ? x : x - integral; + if (fractional == 0 && x < 0) + fractional = mpfr::signed_zero(true); + return std::pair{fractional, integral}; + }, + boost_impl("boost::multiprecision::modf", [](auto x) { return boost_modf(x); }), + tlfloat_impl("tlfloat::modf", [](auto x) { return tlfloat_ops::modf(x); })); + run.unary_exact( + "floating_point_utilities", "ldexp", {domains::wide_exponent(n, false, -800, 800)}, + [](auto x) { return bl::ldexp(x, 17); }, [](const real& x) { return x * real{131072}; }, + qdpp("qdpp ldexp", [](auto x) { return ::ldexp(x, 17); }), + boost_impl("boost::multiprecision::ldexp", + [](auto x) { return boost_ldexp(x, 17); }), + tlfloat_impl("tlfloat::ldexp", + [](auto x) { return tlfloat_ops::ldexp(x, 17); })); + run.unary_exact( + "floating_point_utilities", "scalbn", {domains::wide_exponent(n, false, -800, 800)}, + [](auto x) { return bl::scalbn(x, 17); }, + [](const real& x) { return x * real{131072}; }, + qdpp("qdpp ldexp", [](auto x) { return ::ldexp(x, 17); }), + boost_impl("boost::multiprecision::scalbn", + [](auto x) { return boost_scalbn(x, 17); })); + run.unary_exact( + "floating_point_utilities", "scalbln", {domains::wide_exponent(n, false, -800, 800)}, + [](auto x) { return bl::scalbln(x, 17L); }, + [](const real& x) { return x * real{131072}; }, + qdpp("qdpp ldexp", [](auto x) { return ::ldexp(x, 17); }), + boost_impl("boost::multiprecision::scalbln", + [](auto x) { return boost_scalbln(x, 17L); })); + run.unary_pair_exact( + "floating_point_utilities", "frexp", {domains::wide_exponent(n), domains::subnormal(n)}, + [](auto x) { + int exponent = 0; + const bl::f128 fraction = bl::frexp(x, &exponent); + return std::pair{fraction, bl::f128{static_cast(exponent)}}; + }, + [](const real& x) { + using boost::multiprecision::frexp; + int exponent = 0; + const real fraction = frexp(x, &exponent); + return std::pair{fraction, real{exponent}}; + }, + boost_impl("boost::multiprecision::frexp", + [](auto x) { return boost_frexp(x); }), + tlfloat_impl("tlfloat::frexp", [](auto x) { return tlfloat_ops::frexp(x); })); + run.unary_exact( + "floating_point_utilities", "ilogb", {nonzero_moderate(n), domains::wide_exponent(n)}, + [](auto x) { return bl::f128{static_cast(bl::ilogb(x))}; }, + [](const real& x) { return real{mpfr::ilogb(x)}; }, + boost_impl("boost::multiprecision::ilogb", + [](auto x) { return boost_ilogb_value(x); }), + tlfloat_impl("tlfloat::ilogb", [](auto x) { return tlfloat_ops::ilogb(x); })); + run.unary_exact( + "floating_point_utilities", "logb", {nonzero_moderate(n), domains::wide_exponent(n)}, + [](auto x) { return bl::logb(x); }, [](const real& x) { return real{mpfr::ilogb(x)}; }, + boost_impl("boost::multiprecision::logb", [](auto x) { return boost_logb(x); })); + + auto sqrt_domains = positive(n); + sqrt_domains.push_back(domains::positive(domains::subnormal(n))); + run.unary( + "roots_and_powers", "sqrt", std::move(sqrt_domains), [](auto x) { return bl::sqrt(x); }, + [](const real& x) { + using boost::multiprecision::sqrt; + return sqrt(x); + }, + qdpp("qdpp sqrt", [](auto x) { return ::sqrt(x); }), + boost_impl("boost::multiprecision::sqrt", [](auto x) { return boost_sqrt(x); }), + tlfloat_impl("tlfloat::sqrt", [](auto x) { return tlfloat_ops::sqrt(x); })); + run.unary( + "roots_and_powers", "cbrt", {domains::moderate(n), domains::wide_exponent(n)}, + [](auto x) { return bl::cbrt(x); }, [](const real& x) { return mpfr::cbrt(x); }, + qdpp("qdpp nroot", [](auto x) { return qd_cbrt(x); }), + boost_impl("boost::multiprecision::cbrt", [](auto x) { return boost_cbrt(x); }), + tlfloat_impl("tlfloat::cbrt", [](auto x) { return tlfloat_ops::cbrt(x); })); + run.binary( + "roots_and_powers", "hypot", {domains::moderate(n), domains::wide_exponent(n)}, + [](auto x, auto y) { return bl::hypot(x, y); }, + [](const real& x, const real& y) { return mpfr::hypot(x, y); }, + boost_impl("boost::multiprecision::hypot", + [](auto x, auto y) { return boost_hypot(x, y); }), + tlfloat_impl("tlfloat::hypot", + [](auto x, auto y) { return tlfloat_ops::hypot(x, y); })); + + run.unary( + "trigonometric", "sin", trig(n), [](auto x) { return bl::sin(x); }, + [](const real& x) { + using boost::multiprecision::sin; + return sin(x); + }, + qdpp("qdpp sin", [](auto x) { return ::sin(x); }), + boost_impl("boost::multiprecision::sin", [](auto x) { return boost_sin(x); }), + tlfloat_impl("tlfloat::sin", [](auto x) { return tlfloat_ops::sin(x); })); + run.unary( + "trigonometric", "cos", trig(n), [](auto x) { return bl::cos(x); }, + [](const real& x) { + using boost::multiprecision::cos; + return cos(x); + }, + qdpp("qdpp cos", [](auto x) { return ::cos(x); }), + boost_impl("boost::multiprecision::cos", [](auto x) { return boost_cos(x); }), + tlfloat_impl("tlfloat::cos", [](auto x) { return tlfloat_ops::cos(x); })); + run.unary( + "trigonometric", "tan", trig(n), [](auto x) { return bl::tan(x); }, + [](const real& x) { + using boost::multiprecision::tan; + return tan(x); + }, + qdpp("qdpp tan", [](auto x) { return ::tan(x); }), + boost_impl("boost::multiprecision::tan", [](auto x) { return boost_tan(x); }), + tlfloat_impl("tlfloat::tan", [](auto x) { return tlfloat_ops::tan(x); })); + run.unary( + "trigonometric", "atan", ordinary(n), [](auto x) { return bl::atan(x); }, + [](const real& x) { + using boost::multiprecision::atan; + return atan(x); + }, + qdpp("qdpp atan", [](auto x) { return ::atan(x); }), + boost_impl("boost::multiprecision::atan", [](auto x) { return boost_atan(x); }), + tlfloat_impl("tlfloat::atan", [](auto x) { return tlfloat_ops::atan(x); })); + run.binary( + "trigonometric", "atan2", {domains::near_one(n), domains::moderate(n), domains::atan2_extreme()}, + [](auto y, auto x) { return bl::atan2(y, x); }, + [](const real& y, const real& x) { + using boost::multiprecision::atan2; + return atan2(y, x); + }, + qdpp("qdpp atan2", [](auto y, auto x) { return ::atan2(y, x); }), + boost_impl("boost::multiprecision::atan2", + [](auto y, auto x) { return boost_atan2(y, x); }), + tlfloat_impl("tlfloat::atan2", + [](auto x, auto y) { return tlfloat_ops::atan2(x, y); })); + run.unary( + "trigonometric", "asin", unit(n), [](auto x) { return bl::asin(x); }, + [](const real& x) { + using boost::multiprecision::asin; + return asin(x); + }, + qdpp("qdpp asin", [](auto x) { return ::asin(x); }), + boost_impl("boost::multiprecision::asin", [](auto x) { return boost_asin(x); }), + tlfloat_impl("tlfloat::asin", [](auto x) { return tlfloat_ops::asin(x); })); + run.unary( + "trigonometric", "acos", unit(n), [](auto x) { return bl::acos(x); }, + [](const real& x) { + using boost::multiprecision::acos; + return acos(x); + }, + qdpp("qdpp acos", [](auto x) { return ::acos(x); }), + boost_impl("boost::multiprecision::acos", [](auto x) { return boost_acos(x); }), + tlfloat_impl("tlfloat::acos", [](auto x) { return tlfloat_ops::acos(x); })); + + run.unary( + "exponentials", "exp", exponential(n), [](auto x) { return bl::exp(x); }, + [](const real& x) { + using boost::multiprecision::exp; + return exp(x); + }, + qdpp("qdpp exp", [](auto x) { return ::exp(x); }), + boost_impl("boost::multiprecision::exp", [](auto x) { return boost_exp(x); }), + tlfloat_impl("tlfloat::exp", [](auto x) { return tlfloat_ops::exp(x); })); + run.unary( + "exponentials", "exp2", exponential(n), [](auto x) { return bl::exp2(x); }, + [](const real& x) { return mpfr::exp2(x); }, + boost_impl("boost::multiprecision::exp2", [](auto x) { return boost_exp2(x); }), + tlfloat_impl("tlfloat::exp2", [](auto x) { return tlfloat_ops::exp2(x); })); + run.unary( + "exponentials", "expm1", + {domains::moderate(n, -8.0, 8.0), domains::near_zero_cancellation(n)}, + [](auto x) { return bl::expm1(x); }, + [](const real& x) { + using boost::multiprecision::expm1; + return expm1(x); + }, + qdpp("qdpp expm1", [](auto x) { return ::expm1(x); }), + boost_impl("boost::multiprecision::expm1", + [](auto x) { return boost_expm1(x); }), + tlfloat_impl("tlfloat::expm1", [](auto x) { return tlfloat_ops::expm1(x); })); + run.unary( + "logarithms", "log", positive(n), [](auto x) { return bl::log(x); }, + [](const real& x) { + using boost::multiprecision::log; + return log(x); + }, + qdpp("qdpp log", [](auto x) { return ::log(x); }), + boost_impl("boost::multiprecision::log", [](auto x) { return boost_log(x); }), + tlfloat_impl("tlfloat::log", [](auto x) { return tlfloat_ops::log(x); })); + run.unary( + "logarithms", "log2", positive(n), [](auto x) { return bl::log2(x); }, + [](const real& x) { return mpfr::log2(x); }, + boost_impl("boost::multiprecision::log2", [](auto x) { return boost_log2(x); }), + tlfloat_impl("tlfloat::log2", [](auto x) { return tlfloat_ops::log2(x); })); + run.unary( + "logarithms", "log10", positive(n), [](auto x) { return bl::log10(x); }, + [](const real& x) { return mpfr::log10(x); }, + qdpp("qdpp log10", [](auto x) { return ::log10(x); }), + boost_impl("boost::multiprecision::log10", + [](auto x) { return boost_log10(x); }), + tlfloat_impl("tlfloat::log10", [](auto x) { return tlfloat_ops::log10(x); })); + run.unary( + "logarithms", "log1p", + {domains::bounded(domains::moderate(n), -0.99, 8.0), + domains::near_zero_cancellation(n)}, + [](auto x) { return bl::log1p(x); }, + [](const real& x) { + using boost::multiprecision::log1p; + return log1p(x); + }, + qdpp("qdpp log1p", [](auto x) { return ::log1p(x); }), + boost_impl("boost::multiprecision::log1p", + [](auto x) { return boost_log1p(x); }), + tlfloat_impl("tlfloat::log1p", [](auto x) { return tlfloat_ops::log1p(x); })); + run.binary( + "roots_and_powers", "pow", + {domains::positive(domains::near_one(n), 0.125), + domains::positive(domains::moderate(n, 0.125, 8.0), 0.125)}, + [](auto x, auto y) { return bl::pow(x, y); }, + [](const real& x, const real& y) { + using boost::multiprecision::pow; + return pow(x, y); + }, + qdpp("qdpp pow", [](auto x, auto y) { return ::pow(x, y); }), + boost_impl("boost::multiprecision::pow", + [](auto x, auto y) { return boost_pow(x, y); }), + tlfloat_impl("tlfloat::pow", + [](auto x, auto y) { return tlfloat_ops::pow(x, y); })); + run.unary( + "roots_and_powers", "ipow", {domains::moderate(n), domains::wide_exponent(n, false, -100, 100)}, + [](auto x) { return bl::ipow(x, 7); }, + [](const real& x) { return x * x * x * x * x * x * x; }, + qdpp("qdpp npwr", [](auto x) { return qd_ipow(x); }), + boost_impl("boost::multiprecision::pow(value, int)", + [](auto x) { return boost_ipow(x); })); + + run.binary( + "remainders", "fmod", + {domains::positive(domains::moderate(n, 0.125, 8.0), 0.125), + domains::positive(domains::wide_exponent(n, true, -300, 300), 0x1p-300)}, + [](auto x, auto y) { return bl::fmod(x, y); }, + [](const real& x, const real& y) { return mpfr::fmod(x, y); }, + qdpp("qdpp fmod", [](auto x, auto y) { return ::fmod(x, y); }), + boost_impl("boost::multiprecision::fmod", + [](auto x, auto y) { return boost_fmod(x, y); }), + tlfloat_impl("tlfloat::fmod", + [](auto x, auto y) { return tlfloat_ops::fmod(x, y); })); + run.binary_pairs( + "remainders", "fmod", {fmod_quotient_reduction_inputs()}, + [](auto x, auto y) { return bl::fmod(x, y); }, + [](const real& x, const real& y) { return mpfr::fmod(x, y); }, + qdpp("qdpp fmod", [](auto x, auto y) { return ::fmod(x, y); }), + boost_impl("boost::multiprecision::fmod", + [](auto x, auto y) { return boost_fmod(x, y); }), + tlfloat_impl("tlfloat::fmod", + [](auto x, auto y) { return tlfloat_ops::fmod(x, y); })); + run.binary( + "remainders", "remainder", {domains::positive(domains::moderate(n, 0.125, 8.0), 0.125)}, + [](auto x, auto y) { return bl::remainder(x, y); }, + [](const real& x, const real& y) { return mpfr::remainder(x, y); }, + qdpp("qdpp drem", [](auto x, auto y) { return qd_remainder(x, y); }), + boost_impl("boost::multiprecision::remainder", + [](auto x, auto y) { return boost_remainder(x, y); }), + tlfloat_impl("tlfloat::remainder", + [](auto x, auto y) { return tlfloat_ops::remainder(x, y); })); + + run.unary( + "hyperbolic", "sinh", ordinary(n), [](auto x) { return bl::sinh(x); }, + [](const real& x) { + using boost::multiprecision::sinh; + return sinh(x); + }, + qdpp("qdpp sinh", [](auto x) { return ::sinh(x); }), + boost_impl("boost::multiprecision::sinh", [](auto x) { return boost_sinh(x); }), + tlfloat_impl("tlfloat::sinh", [](auto x) { return tlfloat_ops::sinh(x); })); + run.unary( + "hyperbolic", "cosh", ordinary(n), [](auto x) { return bl::cosh(x); }, + [](const real& x) { + using boost::multiprecision::cosh; + return cosh(x); + }, + qdpp("qdpp cosh", [](auto x) { return ::cosh(x); }), + boost_impl("boost::multiprecision::cosh", [](auto x) { return boost_cosh(x); }), + tlfloat_impl("tlfloat::cosh", [](auto x) { return tlfloat_ops::cosh(x); })); + run.unary( + "hyperbolic", "tanh", ordinary(n), [](auto x) { return bl::tanh(x); }, + [](const real& x) { + using boost::multiprecision::tanh; + return tanh(x); + }, + qdpp("qdpp tanh", [](auto x) { return ::tanh(x); }), + boost_impl("boost::multiprecision::tanh", [](auto x) { return boost_tanh(x); }), + tlfloat_impl("tlfloat::tanh", [](auto x) { return tlfloat_ops::tanh(x); })); + run.unary( + "inverse_hyperbolic", "asinh", ordinary(n), [](auto x) { return bl::asinh(x); }, + [](const real& x) { + using boost::multiprecision::asinh; + return asinh(x); + }, + qdpp("qdpp asinh", [](auto x) { return ::asinh(x); }), + boost_impl("boost::multiprecision::asinh", + [](auto x) { return boost_asinh(x); }), + tlfloat_impl("tlfloat::asinh", [](auto x) { return tlfloat_ops::asinh(x); })); + run.unary( + "inverse_hyperbolic", "acosh", + {domains::interval("moderate", 1.0, 20.0, n, default_seed ^ 0x25u), + domains::boundary(n, 1.0, 2.0)}, + [](auto x) { return bl::acosh(x); }, + [](const real& x) { + using boost::multiprecision::acosh; + return acosh(x); + }, + qdpp("qdpp acosh", [](auto x) { return ::acosh(x); }), + boost_impl("boost::multiprecision::acosh", + [](auto x) { return boost_acosh(x); }), + tlfloat_impl("tlfloat::acosh", [](auto x) { return tlfloat_ops::acosh(x); })); + run.unary( + "inverse_hyperbolic", "atanh", + {domains::bounded(domains::moderate(n), -0.99, 0.99), + domains::boundary(n, -0.999, 0.999)}, + [](auto x) { return bl::atanh(x); }, + [](const real& x) { + using boost::multiprecision::atanh; + return atanh(x); + }, + qdpp("qdpp atanh", [](auto x) { return ::atanh(x); }), + boost_impl("boost::multiprecision::atanh", + [](auto x) { return boost_atanh(x); }), + tlfloat_impl("tlfloat::atanh", [](auto x) { return tlfloat_ops::atanh(x); })); + + run.unary( + "special_functions", "erf", ordinary(n), [](auto x) { return bl::erf(x); }, + [](const real& x) { return boost::math::erf(x); }, + boost_impl("boost::multiprecision::erf", [](auto x) { return boost_erf(x); }), + tlfloat_impl("tlfloat::erf", [](auto x) { return tlfloat_ops::erf(x); })); + run.unary( + "special_functions", "erfc", ordinary(n), [](auto x) { return bl::erfc(x); }, + [](const real& x) { return boost::math::erfc(x); }, + boost_impl("boost::multiprecision::erfc", [](auto x) { return boost_erfc(x); }), + tlfloat_impl("tlfloat::erfc", [](auto x) { return tlfloat_ops::erfc(x); })); + run.unary( + "special_functions", "lgamma", + {domains::interval("moderate", 0.125, 20.0, n, default_seed ^ 0x35u)}, + [](auto x) { return bl::lgamma(x); }, + [](const real& x) { return boost::math::lgamma(x); }, + boost_impl("boost::multiprecision::lgamma", + [](auto x) { return boost_lgamma(x); }), + tlfloat_impl("tlfloat::lgamma", [](auto x) { return tlfloat_ops::lgamma(x); })); + run.unary( + "special_functions", "tgamma", + {domains::interval("moderate", 0.125, 20.0, n, default_seed ^ 0x36u)}, + [](auto x) { return bl::tgamma(x); }, + [](const real& x) { return boost::math::tgamma(x); }, + boost_impl("boost::multiprecision::tgamma", + [](auto x) { return boost_tgamma(x); }), + tlfloat_impl("tlfloat::tgamma", [](auto x) { return tlfloat_ops::tgamma(x); })); + + run.require_complete(127); + return run.failures(); + } +} // namespace fltx::tests::accuracy diff --git a/validation/accuracy/f256.cpp b/validation/accuracy/f256.cpp new file mode 100644 index 0000000..f6f8d65 --- /dev/null +++ b/validation/accuracy/f256.cpp @@ -0,0 +1,879 @@ +#include "comparison_ops.hpp" +#include "trig_domains.hpp" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace fltx::tests::accuracy +{ + using namespace comparison_ops; + + namespace + { + using domains::domain; + using real = mpfr::real; + + [[nodiscard]] std::vector f256_ordinary(std::size_t n) + { + return {domains::near_one(n), domains::moderate(n)}; + } + + [[nodiscard]] std::vector f256_positive(std::size_t n) + { + return {domains::positive(domains::near_one(n), 0x1p-40), + domains::positive(domains::wide_exponent(n, true), 0x1p-900), + domains::positive(domains::extreme_finite(n, true), 0x1p-1021)}; + } + + [[nodiscard]] std::vector f256_trig(std::size_t n) + { + return { + domains::moderate(n), + domains::argument_reduction(n), + trig_domains::quadrant_boundaries(n) + }; + } + + [[nodiscard]] std::vector f256_unit(std::size_t n) + { + return {domains::bounded(domains::moderate(n), -0.999, 0.999), + domains::boundary(n, -1.0, 1.0)}; + } + + [[nodiscard]] domain nonzero_moderate(std::size_t n) + { + domain out = domains::moderate(n); + for (sample& value : out.values) + { + if (std::abs(value.limb[0]) < 0.25) + value = make_exact_sample(value.limb[0] < 0.0 ? -0.25 : 0.25); + } + return out; + } + + [[nodiscard]] sample as_sample( + const bl::f256& value, + std::string label) + { + return { + {value.x0, value.x1, value.x2, value.x3}, + std::move(label) + }; + } + + [[nodiscard]] domains::binary_domain fmod_quotient_reduction_inputs() + { + domains::binary_domain out{ + "quotient_reduction", default_seed ^ 0x29u, {} + }; + const bl::f256 decimal_lhs = bl::parse( + "4.6958550912494028428400315673292717414e+19"); + const bl::f256 decimal_rhs = bl::parse( + "2.9410562077176174010123838366180003482e+02"); + const double huge = + std::nextafter(std::ldexp(1.0, 900), 0.0); + + out.values.push_back({ + as_sample(decimal_lhs, "decimal huge-quotient lhs"), + as_sample(decimal_rhs, "decimal huge-quotient rhs") + }); + out.values.push_back({ + { + {0x1.e9328bacc51f4p+347, + 0x1.01b37fb1772e0p+286, + 0x1.db9bf356454b2p+233, + 0x1.fd4fa163f9926p+180}, + "scaled-reduction gap 58 lhs" + }, + { + {0x1.1ae92dd483136p+289, + 0x1.c598db95a30c9p+228, + 0x1.bc1bc7c86cee6p+175, + -0x1.94a8873f43546p+122}, + "scaled-reduction gap 58 rhs" + } + }); + out.values.push_back({ + { + {0x1.899570d415f70p+468, + 0x1.02ac417e99aa1p+407, + -0x1.c9ec91f324b36p+354, + 0x1.f18531776d219p+301}, + "scaled-reduction gap 57 lhs" + }, + { + {-0x1.792353d12119dp+411, + 0x1.bdb22bd95e9cdp+350, + 0x1.add1bc4d5c4d2p+297, + 0x1.e325ab49a1c37p+244}, + "scaled-reduction gap 57 rhs" + } + }); + out.values.push_back({ + make_exact_sample(huge, "maximum binary64 below 2^900"), + make_exact_sample(-7.5, "negative double divisor") + }); + return out; + } + + [[nodiscard]] domain rounding_inputs(std::size_t n) + { + domain out{"boundary", default_seed ^ 0x28u, {}}; + out.values = {make_exact_sample(0.0, "+0"), + make_exact_sample(-0.0, "-0"), + make_exact_sample(-3.5, "-3.5 tie"), + make_exact_sample(-2.5, "-2.5 tie"), + make_exact_sample(-0.5, "-0.5 tie"), + make_exact_sample(0.5, "0.5 tie"), + make_exact_sample(2.5, "2.5 tie"), + make_exact_sample(3.5, "3.5 tie"), + {{2.5, -0x1p-54, 0.0, 0.0}, "just below 2.5"}, + {{2.5, 0x1p-54, 0.0, 0.0}, "just above 2.5"}, + {{-2.5, -0x1p-54, 0.0, 0.0}, "just below -2.5"}, + {{-2.5, 0x1p-54, 0.0, 0.0}, "just above -2.5"}, + {{2.5, 0.0, -0x1p-108, 0.0}, "third-limb below tie"}, + {{2.5, 0.0, 0x1p-108, 0.0}, "third-limb above tie"}}; + + random_bits rng(out.seed); + for (std::size_t i = 0; i < n; ++i) + { + const double integer = static_cast(static_cast(rng.next() % 33u) - 16); + const double fraction = static_cast(rng.next() % 9u) * 0.125; + out.values.push_back( + make_sample((rng.next() & 1u) != 0 ? integer + fraction : integer - fraction)); + } + return out; + } + + [[nodiscard]] domain long_rounding_inputs(std::size_t n) + { + domain out = rounding_inputs(n); + out.values.push_back( + {{static_cast(std::numeric_limits::min()), 0.5, 0.0, 0.0}, + "long min above half"}); + if constexpr (std::numeric_limits::digits <= 53) + { + out.values.push_back( + {{static_cast(std::numeric_limits::max()), -0.49, 0.0, 0.0}, + "long max below half"}); + } + else + { + out.values.push_back({{0x1p52, 0.5, 0.0, 0.0}, "long two52 half"}); + out.values.push_back({{0x1p53, 1.0, 0.0, 0.0}, "long two53 plus one"}); + out.values.push_back({{-0x1p53, 0.5, 0.0, 0.0}, "negative long two53 below half"}); + } + return out; + } + + [[nodiscard]] domain long_long_rounding_inputs(std::size_t n) + { + domain out = rounding_inputs(n); + out.values.push_back( + {{static_cast(std::numeric_limits::min()), 0.5, 0.0, 0.0}, + "long long min above half"}); + out.values.push_back({{0x1p52, 0.5, 0.0, 0.0}, "long long two52 half"}); + out.values.push_back({{-0x1p52, -0.5, 0.0, 0.0}, "negative long long two52 half"}); + out.values.push_back({{0x1p53, -0.5, 0.0, 0.0}, "long long two53 below half"}); + out.values.push_back({{0x1p53, 1.0, 0.0, 0.0}, "long long two53 plus one"}); + out.values.push_back({{-0x1p53, 0.5, 0.0, 0.0}, "negative long long two53 below half"}); + return out; + } + } // namespace + + int run_f256(csv_writer& output, const options& settings) + { + using Float = bl::f256; + + runner run(output, settings); + const std::size_t n = settings.samples; + + constexpr int parse_digits = + std::numeric_limits::max_digits10 + 16; + auto parse_moderate = domains::decimal_text( + "moderate", + n, + parse_digits, + -20, + 20, + default_seed ^ 0x71u); + parse_moderate.values.push_back( + "1.000000000000000000000000000000000000000000000000000000000000" + "000151929083932156779959571876312991314467535453337919119460476" + "479853264131690316978544529902908342617601488442127810607473747" + "95028008520603179931640625"); + auto parse_wide = domains::decimal_text( + "wide_exponent", + n, + parse_digits, + -300, + 300, + default_seed ^ 0x72u); + parse_wide.values.push_back( + "1.885122618316319232359250242979669614562582553003321176568" + "9482382071894642432405e-261"); + parse_wide.values.push_back( + "9.128274632081106901901927373690883633796023409942415385737" + "7066691381118551853264239e-261"); + run.parse( + "io", + "parse", + { + std::move(parse_moderate), + std::move(parse_wide) + }, + [](const std::string& text) { return bl::parse(text); }, + qdpp( + "qdpp read", + [](const std::string& text) { + return qd_parse>(text); + }), + boost_impl( + "Boost string constructor", + [](const std::string& text) { + return boost_value{text}; + }), + tlfloat_impl( + "TLFloat string constructor", + [](const std::string& text) { + return tlfloat_ops::parse>(text); + })); + + constexpr int format_digits = + std::numeric_limits::max_digits10; + run.format( + "io", + "to_string", + {domains::moderate(n), domains::wide_exponent(n)}, + [=](const auto& value) { + return bl::to_string( + value, format_digits, std::ios_base::scientific); + }, + qdpp( + "qdpp to_string", + [=](const auto& value) { + return qd_to_string(value, format_digits); + }), + boost_impl( + "Boost number::str", + [=](const auto& value) { + return value.str( + format_digits, std::ios_base::scientific); + }), + tlfloat_impl( + "tlfloat::to_string", + [=](const auto& value) { + return tlfloat_ops::to_string(value, format_digits); + })); + run.format( + "io", + "to_chars", + {domains::moderate(n), domains::wide_exponent(n)}, + [=](const auto& value) { + std::array buffer{}; + const auto written = bl::to_chars( + buffer.data(), + buffer.data() + buffer.size(), + value, + std::chars_format::scientific, + format_digits); + if (written.ec != std::errc{}) + throw std::runtime_error("bl::to_chars failed"); + return std::string{buffer.data(), written.ptr}; + }, + qdpp( + "qdpp write", + [=](const auto& value) { + return qd_write_string(value, format_digits); + })); + + register_comparison_accuracy(run, n); + + run.binary_pairs( + "arithmetic", "add", + domains::arithmetic( + domains::arithmetic_operation::add, + n, std::numeric_limits::digits), + [](auto x, auto y) { return x + y; }, + [](const real& x, const real& y) { return x + y; }, + qdpp("qdpp operator+", [](auto x, auto y) { return x + y; }), + boost_impl("boost::multiprecision::operator+", + [](auto x, auto y) { return x + y; }), + tlfloat_impl("TLFloat operator+", [](auto x, auto y) { return x + y; })); + run.binary_pairs( + "arithmetic", "subtract", + domains::arithmetic( + domains::arithmetic_operation::subtract, + n, std::numeric_limits::digits), + [](auto x, auto y) { return x - y; }, + [](const real& x, const real& y) { return x - y; }, + qdpp("qdpp operator-", [](auto x, auto y) { return x - y; }), + boost_impl("boost::multiprecision::operator-", + [](auto x, auto y) { return x - y; }), + tlfloat_impl("TLFloat operator-", [](auto x, auto y) { return x - y; })); + run.binary_pairs( + "arithmetic", "multiply", + domains::arithmetic( + domains::arithmetic_operation::multiply, + n, std::numeric_limits::digits), + [](auto x, auto y) { return x * y; }, + [](const real& x, const real& y) { return x * y; }, + qdpp("qdpp operator*", [](auto x, auto y) { return x * y; }), + boost_impl("boost::multiprecision::operator*", + [](auto x, auto y) { return x * y; }), + tlfloat_impl("TLFloat operator*", [](auto x, auto y) { return x * y; })); + run.binary_pairs( + "arithmetic", "divide", + domains::arithmetic( + domains::arithmetic_operation::divide, + n, std::numeric_limits::digits), + [](auto x, auto y) { return x / y; }, + [](const real& x, const real& y) { return x / y; }, + qdpp("qdpp operator/", [](auto x, auto y) { return x / y; }), + boost_impl("boost::multiprecision::operator/", + [](auto x, auto y) { return x / y; }), + tlfloat_impl("TLFloat operator/", [](auto x, auto y) { return x / y; })); + run.ternary( + "floating_point_utilities", "fma", + {domains::moderate_ternary(n), domains::fma_cancellation(n), + domains::wide_exponent_ternary(n, false, -300, 300)}, + [](auto x, auto y, auto z) { return bl::fma(x, y, z); }, + [](const real& x, const real& y, const real& z) { return mpfr::fma(x, y, z); }, + boost_impl("boost::multiprecision::fma", + [](auto x, auto y, auto z) { return boost_fma(x, y, z); }), + tlfloat_impl("tlfloat::fma", + [](auto x, auto y, auto z) { return tlfloat_ops::fma(x, y, z); })); + run.unary_exact( + "floating_point_utilities", "abs", {domains::wide_exponent(n), domains::subnormal(n)}, + [](auto x) { return bl::abs(x); }, + [](const real& x) { + using boost::multiprecision::abs; + return abs(x); + }, + qdpp("qdpp abs", [](auto x) { return ::abs(x); }), + boost_impl("boost::multiprecision::abs", [](auto x) { return boost_abs(x); }), + tlfloat_impl("tlfloat::abs", [](auto x) { return tlfloat_ops::abs(x); })); + run.unary_exact( + "floating_point_utilities", "fabs", {domains::moderate(n)}, [](auto x) { return bl::fabs(x); }, + [](const real& x) { + using boost::multiprecision::abs; + return abs(x); + }, + qdpp("qdpp fabs", [](auto x) { return ::fabs(x); }), + boost_impl("boost::multiprecision::fabs", [](auto x) { return boost_fabs(x); }), + tlfloat_impl("tlfloat::abs", [](auto x) { return tlfloat_ops::abs(x); })); + run.unary( + "roots_and_powers", "sqr", + {domains::moderate(n), domains::wide_exponent(n, false, -400, 400)}, + [](auto x) { return bl::sqr(x); }, [](const real& x) { return x * x; }, + qdpp("qdpp sqr", [](auto x) { return qd_sqr(x); })); + run.unary( + "floating_point_utilities", "recip", + {domains::positive(domains::near_one(n), 0.125), + domains::positive(domains::wide_exponent(n, true, -400, 400), 0x1p-400)}, + [](auto x) { return bl::recip(x); }, [](const real& x) { return real{1} / x; }, + qdpp("qdpp inv", [](auto x) { return qd_inv(x); })); + run.binary_exact( + "floating_point_utilities", "fmin", {domains::moderate(n), domains::wide_exponent(n)}, + [](auto x, auto y) { return bl::fmin(x, y); }, + [](const real& x, const real& y) { return x < y ? x : y; }, + qdpp("qdpp min", [](auto x, auto y) { return qd_min(x, y); }), + boost_impl("boost::multiprecision::fmin", + [](auto x, auto y) { return boost_fmin(x, y); }), + tlfloat_impl("tlfloat::fmin", + [](auto x, auto y) { return tlfloat_ops::fmin(x, y); })); + run.binary_exact( + "floating_point_utilities", "fmax", {domains::moderate(n), domains::wide_exponent(n)}, + [](auto x, auto y) { return bl::fmax(x, y); }, + [](const real& x, const real& y) { return x > y ? x : y; }, + qdpp("qdpp max", [](auto x, auto y) { return qd_max(x, y); }), + boost_impl("boost::multiprecision::fmax", + [](auto x, auto y) { return boost_fmax(x, y); }), + tlfloat_impl("tlfloat::fmax", + [](auto x, auto y) { return tlfloat_ops::fmax(x, y); })); + run.binary( + "floating_point_utilities", "fdim", {domains::moderate(n), domains::near_equal_cancellation(n)}, + [](auto x, auto y) { return bl::fdim(x, y); }, + [](const real& x, const real& y) { return x > y ? x - y : real{0}; }, + boost_impl("boost::multiprecision::fdim", + [](auto x, auto y) { return boost_fdim(x, y); }), + tlfloat_impl("tlfloat::fdim", + [](auto x, auto y) { return tlfloat_ops::fdim(x, y); })); + run.binary_exact( + "floating_point_utilities", "copysign", {domains::moderate(n)}, + [](auto x, auto y) { return bl::copysign(x, y); }, + [](const real& x, const real& y) { + using boost::multiprecision::abs; + return y < 0 ? -abs(x) : abs(x); + }, + boost_impl("boost::multiprecision::copysign", + [](auto x, auto y) { return boost_copysign(x, y); }), + tlfloat_impl("tlfloat::copysign", + [](auto x, auto y) { return tlfloat_ops::copysign(x, y); })); + + run.unary_exact( + "rounding", "floor", {rounding_inputs(n)}, [](auto x) { return bl::floor(x); }, + [](const real& x) { + using boost::multiprecision::floor; + return floor(x); + }, + qdpp("qdpp floor", [](auto x) { return ::floor(x); }), + boost_impl("boost::multiprecision::floor", + [](auto x) { return boost_floor(x); }), + tlfloat_impl("tlfloat::floor", [](auto x) { return tlfloat_ops::floor(x); })); + run.unary_exact( + "rounding", "ceil", {rounding_inputs(n)}, [](auto x) { return bl::ceil(x); }, + [](const real& x) { + using boost::multiprecision::ceil; + return ceil(x); + }, + qdpp("qdpp ceil", [](auto x) { return ::ceil(x); }), + boost_impl("boost::multiprecision::ceil", [](auto x) { return boost_ceil(x); }), + tlfloat_impl("tlfloat::ceil", [](auto x) { return tlfloat_ops::ceil(x); })); + run.unary_exact( + "rounding", "trunc", {rounding_inputs(n)}, [](auto x) { return bl::trunc(x); }, + [](const real& x) { return mpfr::trunc(x); }, + qdpp("qdpp aint", [](auto x) { return qd_trunc(x); }), + boost_impl("boost::multiprecision::trunc", + [](auto x) { return boost_trunc(x); }), + tlfloat_impl("tlfloat::trunc", [](auto x) { return tlfloat_ops::trunc(x); })); + run.unary_exact( + "rounding", "round", {rounding_inputs(n)}, [](auto x) { return bl::round(x); }, + [](const real& x) { return mpfr::round_away_from_zero(x); }, + qdpp("qdpp round", [](auto x) { return ::round(x); }), + boost_impl("boost::multiprecision::round", + [](auto x) { return boost_round(x); }), + tlfloat_impl("tlfloat::round", [](auto x) { return tlfloat_ops::round(x); })); + run.unary_exact( + "rounding", "roundeven", {rounding_inputs(n)}, [](auto x) { return bl::roundeven(x); }, + [](const real& x) { return mpfr::round_even(x); }, + tlfloat_impl("tlfloat::rint", [](auto x) { return tlfloat_ops::roundeven(x); })); + run.unary( + "rounding", "round_decimals", {domains::moderate(n)}, + [](auto x) { return bl::round_decimals(x, 3); }, + [](const real& x) { return mpfr::round_decimals(x, 3); }); + run.unary( + "rounding", "round_significant", + {domains::wide_exponent(n, false, -100, 100)}, + [](auto x) { return bl::round_significant(x, 7); }, + [](const real& x) { return mpfr::round_significant(x, 7); }); + run.unary_exact( + "rounding", "lround", {long_rounding_inputs(n)}, + [](auto x) { return bl::f256{static_cast(bl::lround(x))}; }, + [](const real& x) { + const real rounded = mpfr::round_away_from_zero(x); + return rounded == 0 ? real{0} : rounded; + }, + boost_impl("boost::multiprecision::lround", + [](auto x) { return boost_lround_value(x); })); + run.unary_exact( + "rounding", "llround", {long_long_rounding_inputs(n)}, + [](auto x) { return bl::f256{static_cast(bl::llround(x))}; }, + [](const real& x) { + const real rounded = mpfr::round_away_from_zero(x); + return rounded == 0 ? real{0} : rounded; + }, + boost_impl("boost::multiprecision::llround", + [](auto x) { return boost_llround_value(x); })); + + run.binary_pair( + "remainders", "remquo", {nonzero_moderate(n)}, + [](auto x, auto y) { + int quotient = 0; + const bl::f256 remainder = bl::remquo(x, y, "ient); + const int low_bits = quotient < 0 ? -((-quotient) & 7) : (quotient & 7); + return std::pair{remainder, bl::f256{static_cast(low_bits)}}; + }, + [](const real& x, const real& y) { + return std::pair{mpfr::remainder(x, y), real{mpfr::remquo_bits(x, y)}}; + }, + qdpp("qdpp divrem", [](auto x, auto y) { return qd_remquo(x, y); }), + boost_impl("boost::multiprecision::remquo", + [](auto x, auto y) { return boost_remquo(x, y); }), + tlfloat_impl("tlfloat::remquo", + [](auto x, auto y) { return tlfloat_ops::remquo(x, y); })); + run.unary_pair_exact( + "floating_point_utilities", "modf", {domains::moderate(n), domains::wide_exponent(n)}, + [](auto x) { + bl::f256 integral{}; + const bl::f256 fractional = bl::modf(x, &integral); + return std::pair{fractional, integral}; + }, + [](const real& x) { + const real integral = mpfr::trunc(x); + real fractional = x == 0 ? x : x - integral; + if (fractional == 0 && x < 0) + fractional = mpfr::signed_zero(true); + return std::pair{fractional, integral}; + }, + boost_impl("boost::multiprecision::modf", [](auto x) { return boost_modf(x); }), + tlfloat_impl("tlfloat::modf", [](auto x) { return tlfloat_ops::modf(x); })); + run.unary_exact( + "floating_point_utilities", "ldexp", {domains::wide_exponent(n, false, -800, 800)}, + [](auto x) { return bl::ldexp(x, 17); }, [](const real& x) { return x * real{131072}; }, + qdpp("qdpp ldexp", [](auto x) { return ::ldexp(x, 17); }), + boost_impl("boost::multiprecision::ldexp", + [](auto x) { return boost_ldexp(x, 17); }), + tlfloat_impl("tlfloat::ldexp", + [](auto x) { return tlfloat_ops::ldexp(x, 17); })); + run.unary_exact( + "floating_point_utilities", "scalbn", {domains::wide_exponent(n, false, -800, 800)}, + [](auto x) { return bl::scalbn(x, 17); }, + [](const real& x) { return x * real{131072}; }, + qdpp("qdpp ldexp", [](auto x) { return ::ldexp(x, 17); }), + boost_impl("boost::multiprecision::scalbn", + [](auto x) { return boost_scalbn(x, 17); })); + run.unary_exact( + "floating_point_utilities", "scalbln", {domains::wide_exponent(n, false, -800, 800)}, + [](auto x) { return bl::scalbln(x, 17L); }, + [](const real& x) { return x * real{131072}; }, + qdpp("qdpp ldexp", [](auto x) { return ::ldexp(x, 17); }), + boost_impl("boost::multiprecision::scalbln", + [](auto x) { return boost_scalbln(x, 17L); })); + run.unary_pair_exact( + "floating_point_utilities", "frexp", {domains::wide_exponent(n), domains::subnormal(n)}, + [](auto x) { + int exponent = 0; + const bl::f256 fraction = bl::frexp(x, &exponent); + return std::pair{fraction, bl::f256{static_cast(exponent)}}; + }, + [](const real& x) { + using boost::multiprecision::frexp; + int exponent = 0; + const real fraction = frexp(x, &exponent); + return std::pair{fraction, real{exponent}}; + }, + boost_impl("boost::multiprecision::frexp", + [](auto x) { return boost_frexp(x); }), + tlfloat_impl("tlfloat::frexp", [](auto x) { return tlfloat_ops::frexp(x); })); + run.unary_exact( + "floating_point_utilities", "ilogb", {nonzero_moderate(n), domains::wide_exponent(n)}, + [](auto x) { return bl::f256{static_cast(bl::ilogb(x))}; }, + [](const real& x) { return real{mpfr::ilogb(x)}; }, + boost_impl("boost::multiprecision::ilogb", + [](auto x) { return boost_ilogb_value(x); }), + tlfloat_impl("tlfloat::ilogb", [](auto x) { return tlfloat_ops::ilogb(x); })); + run.unary_exact( + "floating_point_utilities", "logb", {nonzero_moderate(n), domains::wide_exponent(n)}, + [](auto x) { return bl::logb(x); }, [](const real& x) { return real{mpfr::ilogb(x)}; }, + boost_impl("boost::multiprecision::logb", [](auto x) { return boost_logb(x); })); + + auto sqrt_domains = f256_positive(n); + sqrt_domains.push_back(domains::positive(domains::subnormal(n))); + run.unary( + "roots_and_powers", "sqrt", std::move(sqrt_domains), [](auto x) { return bl::sqrt(x); }, + [](const real& x) { + using boost::multiprecision::sqrt; + return sqrt(x); + }, + qdpp("qdpp sqrt", [](auto x) { return ::sqrt(x); }), + boost_impl("boost::multiprecision::sqrt", [](auto x) { return boost_sqrt(x); }), + tlfloat_impl("tlfloat::sqrt", [](auto x) { return tlfloat_ops::sqrt(x); })); + run.unary( + "roots_and_powers", "cbrt", {domains::moderate(n), domains::wide_exponent(n)}, + [](auto x) { return bl::cbrt(x); }, [](const real& x) { return mpfr::cbrt(x); }, + qdpp("qdpp nroot", [](auto x) { return qd_cbrt(x); }), + boost_impl("boost::multiprecision::cbrt", [](auto x) { return boost_cbrt(x); }), + tlfloat_impl("tlfloat::cbrt", [](auto x) { return tlfloat_ops::cbrt(x); })); + run.binary( + "roots_and_powers", "hypot", {domains::moderate(n), domains::wide_exponent(n)}, + [](auto x, auto y) { return bl::hypot(x, y); }, + [](const real& x, const real& y) { return mpfr::hypot(x, y); }, + boost_impl("boost::multiprecision::hypot", + [](auto x, auto y) { return boost_hypot(x, y); }), + tlfloat_impl("tlfloat::hypot", + [](auto x, auto y) { return tlfloat_ops::hypot(x, y); })); + + run.unary( + "trigonometric", "sin", f256_trig(n), [](auto x) { return bl::sin(x); }, + [](const real& x) { + using boost::multiprecision::sin; + return sin(x); + }, + qdpp("qdpp sin", [](auto x) { return ::sin(x); }), + boost_impl("boost::multiprecision::sin", [](auto x) { return boost_sin(x); }), + tlfloat_impl("tlfloat::sin", [](auto x) { return tlfloat_ops::sin(x); })); + run.unary( + "trigonometric", "cos", f256_trig(n), [](auto x) { return bl::cos(x); }, + [](const real& x) { + using boost::multiprecision::cos; + return cos(x); + }, + qdpp("qdpp cos", [](auto x) { return ::cos(x); }), + boost_impl("boost::multiprecision::cos", [](auto x) { return boost_cos(x); }), + tlfloat_impl("tlfloat::cos", [](auto x) { return tlfloat_ops::cos(x); })); + run.unary( + "trigonometric", "tan", f256_trig(n), [](auto x) { return bl::tan(x); }, + [](const real& x) { + using boost::multiprecision::tan; + return tan(x); + }, + qdpp("qdpp tan", [](auto x) { return ::tan(x); }), + boost_impl("boost::multiprecision::tan", [](auto x) { return boost_tan(x); }), + tlfloat_impl("tlfloat::tan", [](auto x) { return tlfloat_ops::tan(x); })); + run.unary( + "trigonometric", "atan", f256_ordinary(n), [](auto x) { return bl::atan(x); }, + [](const real& x) { + using boost::multiprecision::atan; + return atan(x); + }, + qdpp("qdpp atan", [](auto x) { return ::atan(x); }), + boost_impl("boost::multiprecision::atan", [](auto x) { return boost_atan(x); }), + tlfloat_impl("tlfloat::atan", [](auto x) { return tlfloat_ops::atan(x); })); + run.binary( + "trigonometric", "atan2", {domains::near_one(n), domains::moderate(n), domains::atan2_extreme()}, + [](auto y, auto x) { return bl::atan2(y, x); }, + [](const real& y, const real& x) { + using boost::multiprecision::atan2; + return atan2(y, x); + }, + qdpp("qdpp atan2", [](auto y, auto x) { return ::atan2(y, x); }), + boost_impl("boost::multiprecision::atan2", + [](auto y, auto x) { return boost_atan2(y, x); }), + tlfloat_impl("tlfloat::atan2", + [](auto x, auto y) { return tlfloat_ops::atan2(x, y); })); + run.unary( + "trigonometric", "asin", f256_unit(n), [](auto x) { return bl::asin(x); }, + [](const real& x) { + using boost::multiprecision::asin; + return asin(x); + }, + qdpp("qdpp asin", [](auto x) { return ::asin(x); }), + boost_impl("boost::multiprecision::asin", [](auto x) { return boost_asin(x); }), + tlfloat_impl("tlfloat::asin", [](auto x) { return tlfloat_ops::asin(x); })); + run.unary( + "trigonometric", "acos", f256_unit(n), [](auto x) { return bl::acos(x); }, + [](const real& x) { + using boost::multiprecision::acos; + return acos(x); + }, + qdpp("qdpp acos", [](auto x) { return ::acos(x); }), + boost_impl("boost::multiprecision::acos", [](auto x) { return boost_acos(x); }), + tlfloat_impl("tlfloat::acos", [](auto x) { return tlfloat_ops::acos(x); })); + + const auto exp_domains = [&] { + return std::vector{ + domains::moderate(n, -8.0, 8.0), + domains::interval("boundary", -700.0, 700.0, n, default_seed ^ 0x45u)}; + }; + run.unary( + "exponentials", "exp", exp_domains(), [](auto x) { return bl::exp(x); }, + [](const real& x) { + using boost::multiprecision::exp; + return exp(x); + }, + qdpp("qdpp exp", [](auto x) { return ::exp(x); }), + boost_impl("boost::multiprecision::exp", [](auto x) { return boost_exp(x); }), + tlfloat_impl("tlfloat::exp", [](auto x) { return tlfloat_ops::exp(x); })); + run.unary( + "exponentials", "exp2", exp_domains(), [](auto x) { return bl::exp2(x); }, + [](const real& x) { return mpfr::exp2(x); }, + boost_impl("boost::multiprecision::exp2", [](auto x) { return boost_exp2(x); }), + tlfloat_impl("tlfloat::exp2", [](auto x) { return tlfloat_ops::exp2(x); })); + run.unary( + "exponentials", "expm1", + {domains::moderate(n, -8.0, 8.0), domains::near_zero_cancellation(n)}, + [](auto x) { return bl::expm1(x); }, + [](const real& x) { + using boost::multiprecision::expm1; + return expm1(x); + }, + qdpp("qdpp expm1", [](auto x) { return ::expm1(x); }), + boost_impl("boost::multiprecision::expm1", + [](auto x) { return boost_expm1(x); }), + tlfloat_impl("tlfloat::expm1", [](auto x) { return tlfloat_ops::expm1(x); })); + run.unary( + "logarithms", "log", f256_positive(n), [](auto x) { return bl::log(x); }, + [](const real& x) { + using boost::multiprecision::log; + return log(x); + }, + qdpp("qdpp log", [](auto x) { return ::log(x); }), + boost_impl("boost::multiprecision::log", [](auto x) { return boost_log(x); }), + tlfloat_impl("tlfloat::log", [](auto x) { return tlfloat_ops::log(x); })); + run.unary( + "logarithms", "log2", f256_positive(n), [](auto x) { return bl::log2(x); }, + [](const real& x) { return mpfr::log2(x); }, + boost_impl("boost::multiprecision::log2", [](auto x) { return boost_log2(x); }), + tlfloat_impl("tlfloat::log2", [](auto x) { return tlfloat_ops::log2(x); })); + run.unary( + "logarithms", "log10", f256_positive(n), [](auto x) { return bl::log10(x); }, + [](const real& x) { return mpfr::log10(x); }, + qdpp("qdpp log10", [](auto x) { return ::log10(x); }), + boost_impl("boost::multiprecision::log10", + [](auto x) { return boost_log10(x); }), + tlfloat_impl("tlfloat::log10", [](auto x) { return tlfloat_ops::log10(x); })); + run.unary( + "logarithms", "log1p", + {domains::bounded(domains::moderate(n), -0.99, 8.0), + domains::near_zero_cancellation(n)}, + [](auto x) { return bl::log1p(x); }, + [](const real& x) { + using boost::multiprecision::log1p; + return log1p(x); + }, + qdpp("qdpp log1p", [](auto x) { return ::log1p(x); }), + boost_impl("boost::multiprecision::log1p", + [](auto x) { return boost_log1p(x); }), + tlfloat_impl("tlfloat::log1p", [](auto x) { return tlfloat_ops::log1p(x); })); + run.binary( + "roots_and_powers", "pow", + {domains::positive(domains::near_one(n), 0.125), + domains::positive(domains::moderate(n, 0.125, 8.0), 0.125)}, + [](auto x, auto y) { return bl::pow(x, y); }, + [](const real& x, const real& y) { + using boost::multiprecision::pow; + return pow(x, y); + }, + qdpp("qdpp pow", [](auto x, auto y) { return ::pow(x, y); }), + boost_impl("boost::multiprecision::pow", + [](auto x, auto y) { return boost_pow(x, y); }), + tlfloat_impl("tlfloat::pow", + [](auto x, auto y) { return tlfloat_ops::pow(x, y); })); + run.unary( + "roots_and_powers", "ipow", {domains::moderate(n), domains::wide_exponent(n, false, -100, 100)}, + [](auto x) { return bl::ipow(x, 7); }, + [](const real& x) { return x * x * x * x * x * x * x; }, + qdpp("qdpp npwr", [](auto x) { return qd_ipow(x); }), + boost_impl("boost::multiprecision::pow(value, int)", + [](auto x) { return boost_ipow(x); })); + + run.binary( + "remainders", "fmod", + {domains::positive(domains::moderate(n, 0.125, 8.0), 0.125), + domains::positive(domains::wide_exponent(n, true, -300, 300), 0x1p-300)}, + [](auto x, auto y) { return bl::fmod(x, y); }, + [](const real& x, const real& y) { return mpfr::fmod(x, y); }, + qdpp("qdpp fmod", [](auto x, auto y) { return ::fmod(x, y); }), + boost_impl("boost::multiprecision::fmod", + [](auto x, auto y) { return boost_fmod(x, y); }), + tlfloat_impl("tlfloat::fmod", + [](auto x, auto y) { return tlfloat_ops::fmod(x, y); })); + run.binary_pairs( + "remainders", "fmod", {fmod_quotient_reduction_inputs()}, + [](auto x, auto y) { return bl::fmod(x, y); }, + [](const real& x, const real& y) { return mpfr::fmod(x, y); }, + qdpp("qdpp fmod", [](auto x, auto y) { return ::fmod(x, y); }), + boost_impl("boost::multiprecision::fmod", + [](auto x, auto y) { return boost_fmod(x, y); }), + tlfloat_impl("tlfloat::fmod", + [](auto x, auto y) { return tlfloat_ops::fmod(x, y); })); + run.binary( + "remainders", "remainder", {domains::positive(domains::moderate(n, 0.125, 8.0), 0.125)}, + [](auto x, auto y) { return bl::remainder(x, y); }, + [](const real& x, const real& y) { return mpfr::remainder(x, y); }, + qdpp("qdpp drem", [](auto x, auto y) { return qd_remainder(x, y); }), + boost_impl("boost::multiprecision::remainder", + [](auto x, auto y) { return boost_remainder(x, y); }), + tlfloat_impl("tlfloat::remainder", + [](auto x, auto y) { return tlfloat_ops::remainder(x, y); })); + + run.unary( + "hyperbolic", "sinh", f256_ordinary(n), [](auto x) { return bl::sinh(x); }, + [](const real& x) { + using boost::multiprecision::sinh; + return sinh(x); + }, + qdpp("qdpp sinh", [](auto x) { return ::sinh(x); }), + boost_impl("boost::multiprecision::sinh", [](auto x) { return boost_sinh(x); }), + tlfloat_impl("tlfloat::sinh", [](auto x) { return tlfloat_ops::sinh(x); })); + run.unary( + "hyperbolic", "cosh", f256_ordinary(n), [](auto x) { return bl::cosh(x); }, + [](const real& x) { + using boost::multiprecision::cosh; + return cosh(x); + }, + qdpp("qdpp cosh", [](auto x) { return ::cosh(x); }), + boost_impl("boost::multiprecision::cosh", [](auto x) { return boost_cosh(x); }), + tlfloat_impl("tlfloat::cosh", [](auto x) { return tlfloat_ops::cosh(x); })); + run.unary( + "hyperbolic", "tanh", f256_ordinary(n), [](auto x) { return bl::tanh(x); }, + [](const real& x) { + using boost::multiprecision::tanh; + return tanh(x); + }, + qdpp("qdpp tanh", [](auto x) { return ::tanh(x); }), + boost_impl("boost::multiprecision::tanh", [](auto x) { return boost_tanh(x); }), + tlfloat_impl("tlfloat::tanh", [](auto x) { return tlfloat_ops::tanh(x); })); + run.unary( + "inverse_hyperbolic", "asinh", f256_ordinary(n), [](auto x) { return bl::asinh(x); }, + [](const real& x) { + using boost::multiprecision::asinh; + return asinh(x); + }, + qdpp("qdpp asinh", [](auto x) { return ::asinh(x); }), + boost_impl("boost::multiprecision::asinh", + [](auto x) { return boost_asinh(x); }), + tlfloat_impl("tlfloat::asinh", [](auto x) { return tlfloat_ops::asinh(x); })); + run.unary( + "inverse_hyperbolic", "acosh", + {domains::interval("moderate", 1.0, 20.0, n, default_seed ^ 0x55u), + domains::boundary(n, 1.0, 2.0)}, + [](auto x) { return bl::acosh(x); }, + [](const real& x) { + using boost::multiprecision::acosh; + return acosh(x); + }, + qdpp("qdpp acosh", [](auto x) { return ::acosh(x); }), + boost_impl("boost::multiprecision::acosh", + [](auto x) { return boost_acosh(x); }), + tlfloat_impl("tlfloat::acosh", [](auto x) { return tlfloat_ops::acosh(x); })); + run.unary( + "inverse_hyperbolic", "atanh", + {domains::bounded(domains::moderate(n), -0.99, 0.99), + domains::boundary(n, -0.999, 0.999)}, + [](auto x) { return bl::atanh(x); }, + [](const real& x) { + using boost::multiprecision::atanh; + return atanh(x); + }, + qdpp("qdpp atanh", [](auto x) { return ::atanh(x); }), + boost_impl("boost::multiprecision::atanh", + [](auto x) { return boost_atanh(x); }), + tlfloat_impl("tlfloat::atanh", [](auto x) { return tlfloat_ops::atanh(x); })); + + run.unary( + "special_functions", "erf", f256_ordinary(n), [](auto x) { return bl::erf(x); }, + [](const real& x) { return boost::math::erf(x); }, + boost_impl("boost::multiprecision::erf", [](auto x) { return boost_erf(x); }), + tlfloat_impl("tlfloat::erf", [](auto x) { return tlfloat_ops::erf(x); })); + run.unary( + "special_functions", "erfc", f256_ordinary(n), [](auto x) { return bl::erfc(x); }, + [](const real& x) { return boost::math::erfc(x); }, + boost_impl("boost::multiprecision::erfc", [](auto x) { return boost_erfc(x); }), + tlfloat_impl("tlfloat::erfc", [](auto x) { return tlfloat_ops::erfc(x); })); + run.unary( + "special_functions", "lgamma", + {domains::interval("moderate", 0.125, 20.0, n, default_seed ^ 0x65u)}, + [](auto x) { return bl::lgamma(x); }, + [](const real& x) { return boost::math::lgamma(x); }, + boost_impl("boost::multiprecision::lgamma", + [](auto x) { return boost_lgamma(x); }), + tlfloat_impl("tlfloat::lgamma", [](auto x) { return tlfloat_ops::lgamma(x); })); + run.unary( + "special_functions", "tgamma", + {domains::interval("moderate", 0.125, 20.0, n, default_seed ^ 0x66u)}, + [](auto x) { return bl::tgamma(x); }, + [](const real& x) { return boost::math::tgamma(x); }, + boost_impl("boost::multiprecision::tgamma", + [](auto x) { return boost_tgamma(x); }), + tlfloat_impl("tlfloat::tgamma", [](auto x) { return tlfloat_ops::tgamma(x); })); + + run.require_complete(127); + return run.failures(); + } +} // namespace fltx::tests::accuracy diff --git a/validation/accuracy/main.cpp b/validation/accuracy/main.cpp new file mode 100644 index 0000000..7e6698d --- /dev/null +++ b/validation/accuracy/main.cpp @@ -0,0 +1,274 @@ +#include "runner.hpp" +#include "../support/config_banner.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef FLTX_ACCURACY_EXPECTS_SIMULATED_CONSTEVAL +#error "accuracy runners must declare their expected consteval execution mode" +#endif + +namespace +{ + [[nodiscard]] bool describes_build(int argc, char** argv) noexcept + { + return argc == 2 && std::string_view{ argv[1] } == "--describe"; + } + + using high_precision_real = boost::multiprecision::number< + boost::multiprecision::mpfr_float_backend<800>, + boost::multiprecision::et_off>; + + template + [[nodiscard]] bool stable_reference( + const char* input, + Evaluate evaluate) + { + using fltx::tests::mpfr::real; + const real low = evaluate(real{ input }); + const real projected = real{ evaluate(high_precision_real{ input }) }; + + using boost::multiprecision::abs; + using boost::multiprecision::ldexp; + const real scale = std::max(abs(projected), real{ 1 }); + return abs(low - projected) <= ldexp(scale, -1200); + } + + void check_oracle_precision() + { + const bool stable = + stable_reference( + "1.23456789012345678901234567890123456789e100", + [](const auto& value) { + using boost::multiprecision::sin; + return sin(value); + }) && + stable_reference( + "0.375", + [](const auto& value) { + using boost::multiprecision::exp; + return exp(value); + }) && + stable_reference( + "1e-80", + [](const auto& value) { + using boost::multiprecision::log1p; + return log1p(value); + }) && + stable_reference( + "3.99221356", + [](const auto& value) { + using boost::multiprecision::erfc; + return erfc(value); + }); + + if (!stable) + throw std::logic_error( + "400-digit MPFR references changed at 800-digit precision"); + } + + void check_accuracy_metric() + { + using fltx::tests::mpfr::real; + using fltx::tests::mpfr::sign_bit; + + const double negative_zero = + fltx::tests::native_fp::signed_zero(true); + + if (!sign_bit(fltx::tests::mpfr::traits::to_real( + bl::f128_s{ negative_zero, 0.0 })) || + !sign_bit(fltx::tests::mpfr::traits::to_real( + bl::f256_s{ negative_zero, 0.0, 0.0, 0.0 }))) + { + throw std::logic_error( + "MPFR expansion conversion did not preserve negative zero"); + } + + const real resolution = fltx::tests::mpfr::absolute_resolution(); + const auto bits = [&](const real& observed, const real& reference) { + return fltx::tests::mpfr::resolution_adjusted_bits( + observed, reference, resolution, 106.0); + }; + + const double zero_at_resolution = bits(real{0}, resolution); + const double wrong_sign = bits(-resolution, resolution); + const double rounded_positive_zero = bits(real{0}, resolution / 4); + const double opposite_zero_sign = bits(real{0}, -resolution / 4); + const double rounded_negative_zero = + bits(fltx::tests::mpfr::signed_zero(true), -resolution / 4); + const double exact = bits(resolution, resolution); + + if (zero_at_resolution != 0.0 || wrong_sign != 0.0 || + !fltx::tests::mpfr::is_exact_score(rounded_positive_zero) || + !fltx::tests::mpfr::is_exact_score(opposite_zero_sign) || + !fltx::tests::mpfr::is_exact_score(rounded_negative_zero) || + !fltx::tests::mpfr::is_exact_score(exact)) + { + throw std::logic_error( + "accuracy metric failed its zero/resolution self-check: " + + fltx::tests::accuracy::number(zero_at_resolution) + "," + + fltx::tests::accuracy::number(wrong_sign) + "," + + fltx::tests::accuracy::number(rounded_positive_zero) + "," + + fltx::tests::accuracy::number(opposite_zero_sign) + "," + + fltx::tests::accuracy::number(rounded_negative_zero) + "," + + fltx::tests::accuracy::number(exact)); + } + } + + [[nodiscard]] BL_NO_INLINE bool runtime_execution_mode_is_consteval() noexcept + { + // Keep the query in a non-constexpr call frame: an argument-free direct + // query may itself be constant-folded by an optimizing compiler. + return bl::detail::is_constant_evaluated(); + } + + void check_execution_mode() + { + constexpr bool expected = + FLTX_ACCURACY_EXPECTS_SIMULATED_CONSTEVAL != 0; + const bool actual = runtime_execution_mode_is_consteval(); + if (actual != expected) + { + throw std::logic_error( + expected + ? "fixed accuracy runner did not enter simulated consteval mode" + : "runtime accuracy runner unexpectedly entered simulated consteval mode"); + } + } + + [[nodiscard]] fltx::tests::accuracy::options parse_arguments(int argc, char** argv) + { + fltx::tests::accuracy::options out; + bool sample_mode_set = false; + bool samples_set = false; + for (int i = 1; i < argc; ++i) + { + const std::string argument = argv[i]; + auto value = [&]() -> std::string { + if (++i >= argc) + throw std::runtime_error("missing value after " + argument); + return argv[i]; + }; + + if (argument == "--precision") + out.precision = value(); + else if (argument == "--output") + out.output = value(); + else if (argument == "--run-id") + out.run_id = value(); + else if (argument == "--source-revision") + out.source_revision = value(); + else if (argument == "--filter") + out.filter = value(); + else if (argument == "--samples") + { + out.samples = static_cast(std::stoull(value())); + samples_set = true; + } + else if (argument == "--sample-mode") + { + out.sample_mode = value(); + sample_mode_set = true; + if (out.sample_mode != "smoke" && out.sample_mode != "small" && + out.sample_mode != "standard" && out.sample_mode != "full") + throw std::runtime_error( + "--sample-mode must be smoke, small, standard or full"); + } + else if (argument == "--advisory") + out.advisory = true; + else if (argument == "--help") + { + std::cout + << "fltx_accuracy --precision f32|f64|f128|f256 --output FILE " + "--run-id ID --source-revision REV " + "[--sample-mode smoke|small|standard|full] [--samples N] " + "[--filter TEXT] [--advisory]\n" + "fltx_accuracy --describe\n"; + std::exit(0); + } + else + throw std::runtime_error("unknown argument: " + argument); + } + + if (out.precision != "f32" && out.precision != "f64" && + out.precision != "f128" && out.precision != "f256") + throw std::runtime_error("--precision must be f32, f64, f128 or f256"); + if (sample_mode_set && !samples_set) + out.samples = out.sample_mode == "smoke" + ? 12 + : out.sample_mode == "small" + ? 2048 + : out.sample_mode == "standard" ? 4096 : 65536; + else if (!sample_mode_set && samples_set) + out.sample_mode = "custom"; + if (out.output.empty() || out.run_id.empty() || out.source_revision.empty()) + throw std::runtime_error("--output, --run-id and --source-revision are required"); + if (out.samples == 0) + throw std::runtime_error("--samples must be greater than zero"); + return out; + } +} + +int main(int argc, char** argv) +{ + try + { + check_execution_mode(); + if (describes_build(argc, argv)) + { + fltx::tests::support::print_config_banner("accuracy"); + return 0; + } + + const auto settings = parse_arguments(argc, argv); + check_accuracy_metric(); + check_oracle_precision(); + fltx::tests::support::print_config_banner( + "accuracy", + settings.sample_mode.c_str(), + settings.samples); + fltx::tests::csv_writer output(settings.output); + output.row({ + "schema_version", "run_id", "source_revision", "source_fingerprint", + "precision", "group", "operation", + "implementation", "implementation_short", "implementation_label", + "api", "domain", "samples", "seed", + "mean_bits", "p01_bits", "worst_bits", "required_worst_bits", + "margin_bits", "pass", "special_support", "signed_zero_support", + "worst_input", "observed", "reference" + }); + + int failures = 0; + if (settings.precision == "f32") + failures = fltx::tests::accuracy::run_f32(output, settings); + else if (settings.precision == "f64") + failures = fltx::tests::accuracy::run_f64(output, settings); + else if (settings.precision == "f128") + failures = fltx::tests::accuracy::run_f128(output, settings); + else + failures = fltx::tests::accuracy::run_f256(output, settings); + if (failures != 0 && !settings.advisory) + return 1; + + output.finish(); + if (failures != 0) + { + std::cerr + << "fltx_accuracy: recorded " << failures + << " advisory threshold failure(s)\n"; + } + return 0; + } + catch (const std::exception& error) + { + std::cerr << "fltx_accuracy: " << error.what() << '\n'; + return 2; + } +} diff --git a/validation/accuracy/native.cpp b/validation/accuracy/native.cpp new file mode 100644 index 0000000..328aaf7 --- /dev/null +++ b/validation/accuracy/native.cpp @@ -0,0 +1,829 @@ +#include "runner.hpp" + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fltx::tests::accuracy +{ + namespace + { + using domains::domain; + using real = mpfr::real; + + [[nodiscard]] std::vector ordinary(std::size_t n) + { + return { domains::near_one(n), domains::moderate(n) }; + } + + [[nodiscard]] domain native_extreme( + std::size_t n, + bool positive, + int exponent_limit, + std::uint64_t seed = default_seed ^ 0x41u) + { + domain out = domains::wide_exponent( + n, positive, -exponent_limit, exponent_limit, seed); + out.name = "extreme_finite"; + return out; + } + + template + [[nodiscard]] domain product_extreme( + int exponent_limit, + std::uint64_t seed = default_seed ^ 0x42u) + { + domain out{ "extreme_finite", seed, {} }; + const Float large = std::ldexp(Float{ 0.75 }, exponent_limit); + const Float small = std::ldexp(Float{ 0.625 }, -exponent_limit); + const Float large_neighbour = std::nextafter(large, Float{ 0 }); + const Float small_neighbour = std::nextafter(small, Float{ 1 }); + out.values = { + make_sample(static_cast(large), "large positive"), + make_sample(static_cast(-large), "large negative"), + make_sample(static_cast(small), "small positive"), + make_sample(static_cast(-small), "small negative"), + make_sample(static_cast(large_neighbour), "large neighbour"), + make_sample(static_cast(-large_neighbour), "negative large neighbour"), + make_sample(static_cast(small_neighbour), "small neighbour"), + make_sample(static_cast(-small_neighbour), "negative small neighbour") + }; + return out; + } + + template + [[nodiscard]] domain atan2_extreme( + int exponent_limit, + std::uint64_t seed = default_seed ^ 0x43u) + { + domain out{ "extreme_finite", seed, {} }; + const Float huge = std::ldexp(Float{ 0.75 }, exponent_limit); + const Float tiny = std::ldexp(Float{ 0.625 }, -exponent_limit); + const Float huge_neighbour = std::nextafter(huge, Float{ 0 }); + const Float tiny_neighbour = std::nextafter(tiny, Float{ 1 }); + out.values = { + make_sample(static_cast(huge), "huge positive"), + make_sample(static_cast(-huge), "huge negative"), + make_sample(static_cast(tiny), "tiny positive"), + make_sample(static_cast(-tiny), "tiny negative"), + make_sample(static_cast(huge_neighbour), "huge neighbour"), + make_sample(static_cast(-huge_neighbour), "negative huge neighbour"), + make_sample(static_cast(tiny_neighbour), "tiny neighbour"), + make_sample(static_cast(-tiny_neighbour), "negative tiny neighbour") + }; + return out; + } + + template + [[nodiscard]] domain native_subnormal( + std::size_t n, + std::uint64_t seed = default_seed ^ 0x44u) + { + domain out{ "subnormal", seed, {} }; + out.values = { + make_exact_sample(0.0, "+0"), + make_exact_sample(-0.0, "-0"), + make_exact_sample( + static_cast(std::numeric_limits::denorm_min()), + "denorm_min"), + make_exact_sample( + static_cast(std::numeric_limits::min()), + "min normal") + }; + + constexpr int first_exponent = + std::is_same_v ? -149 : -1074; + constexpr int exponent_count = + std::is_same_v ? 23 : 52; + random_bits rng(seed); + for (std::size_t i = 0; i < n; ++i) + { + const int exponent = + first_exponent + static_cast(rng.next() % exponent_count); + Float value = static_cast( + std::ldexp(rng.between(0.5, 1.0), exponent)); + if ((rng.next() & 1u) == 0) + value = -value; + out.values.push_back(make_exact_sample(static_cast(value))); + } + return out; + } + + template + [[nodiscard]] domain near_equal_cancellation( + std::size_t n, + std::uint64_t seed = default_seed ^ 0x45u) + { + domain out{ "cancellation", seed, {} }; + out.values.push_back(make_exact_sample(1.0, "one")); + out.values.push_back(make_exact_sample( + static_cast(std::nextafter(Float{ 1 }, Float{ 2 })), + "next value after one")); + + constexpr int first_exponent = + std::is_same_v ? 8 : 20; + constexpr int exponent_count = + std::is_same_v ? 16 : 33; + random_bits rng(seed); + for (std::size_t i = 0; i < n; ++i) + { + const int exponent = + first_exponent + static_cast(rng.next() % exponent_count); + const Float value = static_cast( + 1.0 + std::ldexp(rng.between(0.5, 1.0), -exponent)); + out.values.push_back(make_exact_sample(static_cast(value))); + } + return out; + } + + template + [[nodiscard]] domains::ternary_domain fma_cancellation( + std::size_t n, + std::uint64_t seed = default_seed ^ 0x45u) + { + return domains::zip_ternary( + near_equal_cancellation(n, seed), + near_equal_cancellation( + n, seed ^ domains::ternary_y_seed_mask), + near_equal_cancellation( + n, seed ^ domains::ternary_z_seed_mask)); + } + + template + [[nodiscard]] domain near_zero_cancellation( + std::size_t n, + std::uint64_t seed = default_seed ^ 0x46u) + { + domain out{ "cancellation", seed, {} }; + out.values.push_back(make_exact_sample(0x1p-20, "small positive")); + out.values.push_back(make_exact_sample(-0x1p-20, "small negative")); + + constexpr int first_exponent = + std::is_same_v ? 5 : 20; + constexpr int exponent_count = + std::is_same_v ? 116 : 881; + random_bits rng(seed); + for (std::size_t i = 0; i < n; ++i) + { + const int exponent = + first_exponent + static_cast(rng.next() % exponent_count); + const double sign = (rng.next() & 1u) != 0 ? 1.0 : -1.0; + const Float value = static_cast( + sign * std::ldexp(rng.between(0.5, 1.0), -exponent)); + out.values.push_back(make_exact_sample(static_cast(value))); + } + return out; + } + + [[nodiscard]] std::vector positive( + std::size_t n, + int wide_limit, + int extreme_limit) + { + return { + domains::positive(domains::near_one(n), std::ldexp(1.0, -wide_limit)), + domains::positive( + domains::wide_exponent(n, true, -wide_limit, wide_limit), + std::ldexp(0.5, -wide_limit)), + domains::positive( + native_extreme(n, true, extreme_limit), + std::ldexp(0.5, -extreme_limit)) + }; + } + + template + [[nodiscard]] domain argument_reduction( + std::size_t n, + int max_exponent, + std::uint64_t seed = default_seed ^ 0x4cu) + { + domain out{ "argument_reduction", seed, {} }; + out.values.reserve(n + 18); + + constexpr Float half_pi = + static_cast(1.57079632679489661923132169163975144L); + const auto append_neighborhood = [&](int exponent, bool negative) { + Float anchor = std::ldexp(half_pi, exponent); + if (negative) + anchor = -anchor; + + const Float below = native_fp::next_down(anchor); + const Float above = native_fp::next_up(anchor); + if (!(below < anchor && anchor < above)) + throw std::logic_error("native argument-reduction neighborhood collapsed"); + + const std::string suffix = + " 2^" + std::to_string(exponent) + " * pi/2 anchor"; + out.values.push_back(make_exact_sample( + static_cast(below), "below" + suffix)); + out.values.push_back(make_exact_sample( + static_cast(anchor), "nearest" + suffix)); + out.values.push_back(make_exact_sample( + static_cast(above), "above" + suffix)); + }; + + static constexpr std::array anchor_exponents{ + 0, 20, 53, 56, 100, 159 + }; + for (std::size_t i = 0; i < anchor_exponents.size(); ++i) + { + if (anchor_exponents[i] <= max_exponent) + append_neighborhood(anchor_exponents[i], (i & 1u) != 0); + } + + random_bits rng(seed); + for (std::size_t i = 0; i < n; ++i) + { + const int exponent = static_cast( + rng.next() % static_cast(max_exponent + 1)); + Float anchor = std::ldexp(half_pi, exponent); + if ((rng.next() & 1u) != 0) + anchor = -anchor; + + const bool upward = (rng.next() & 1u) != 0; + const int steps = 1 + static_cast(rng.next() % 16u); + Float value = anchor; + for (int step = 0; step < steps; ++step) + { + value = upward + ? native_fp::next_up(value) + : native_fp::next_down(value); + } + + out.values.push_back(make_exact_sample( + static_cast(value), + "near 2^" + std::to_string(exponent) + " * pi/2")); + } + return out; + } + + template + [[nodiscard]] std::vector trig( + std::size_t n, + int reduction_limit) + { + return { + domains::moderate(n), + argument_reduction(n, reduction_limit) + }; + } + + [[nodiscard]] std::vector unit(std::size_t n) + { + return { + domains::bounded(domains::moderate(n), -0.999, 0.999), + domains::boundary(n, -1.0, 1.0) + }; + } + + [[nodiscard]] std::vector exponential( + std::size_t n, + double limit) + { + return { + domains::moderate(n, -8.0, 8.0), + domains::interval( + "boundary", -limit, limit, n, default_seed ^ 0x47u) + }; + } + + [[nodiscard]] domain nonzero_moderate(std::size_t n) + { + domain out = domains::moderate(n); + for (sample& value : out.values) + { + if (std::abs(value.limb[0]) < 0.25) + value = make_exact_sample(value.limb[0] < 0.0 ? -0.25 : 0.25); + } + return out; + } + + template + [[nodiscard]] domain rounding_inputs(std::size_t n) + { + domain out{ "boundary", default_seed ^ 0x4bu, {} }; + out.values.push_back(make_exact_sample(0.0, "+0")); + out.values.push_back(make_exact_sample(-0.0, "-0")); + const auto append_neighbours = [&](Float tie, std::string label) { + out.values.push_back(make_exact_sample( + static_cast(std::nextafter( + tie, -std::numeric_limits::infinity())), + label + " below")); + out.values.push_back(make_exact_sample( + static_cast(tie), + label + " tie")); + out.values.push_back(make_exact_sample( + static_cast(std::nextafter( + tie, std::numeric_limits::infinity())), + label + " above")); + }; + append_neighbours(Float{ -2.5 }, "-2.5"); + append_neighbours(Float{ -0.5 }, "-0.5"); + append_neighbours(Float{ 0.5 }, "0.5"); + append_neighbours(Float{ 2.5 }, "2.5"); + + random_bits rng(out.seed); + for (std::size_t i = 0; i < n; ++i) + { + const Float integer = static_cast( + static_cast(rng.next() % 33u) - 16); + const Float fraction = + static_cast(rng.next() % 9u) * Float{ 0.125 }; + out.values.push_back(make_exact_sample(static_cast( + (rng.next() & 1u) != 0 + ? integer + fraction + : integer - fraction))); + } + return out; + } + + template + int run_native(csv_writer& output, const options& settings) + { + runner run(output, settings); + const std::size_t n = settings.samples; + constexpr bool single_precision = std::is_same_v; + const int wide_limit = single_precision ? 120 : 900; + const int extreme_limit = single_precision ? 125 : 1021; + const int product_limit = single_precision ? 50 : 400; + const int reduction_limit = single_precision ? 100 : 159; + const int integer_power_limit = single_precision ? 15 : 100; + const double exponential_limit = single_precision ? 80.0 : 700.0; + + run.binary("arithmetic", "add", ordinary(n), + [](auto x, auto y) { return x + y; }, + [](const real& x, const real& y) { return x + y; }); + run.binary("arithmetic", "add", + { domains::wide_exponent(n, false, -wide_limit, wide_limit), + native_extreme(n, false, extreme_limit), + native_subnormal(n) }, + [](auto x, auto y) { return x + y; }, + [](const real& x, const real& y) { return x + y; }); + run.binary("arithmetic", "subtract", + { domains::near_one(n), + near_equal_cancellation(n), + native_subnormal(n) }, + [](auto x, auto y) { return x - y; }, + [](const real& x, const real& y) { return x - y; }); + run.binary("arithmetic", "multiply", ordinary(n), + [](auto x, auto y) { return x * y; }, + [](const real& x, const real& y) { return x * y; }); + run.binary("arithmetic", "multiply", + { domains::wide_exponent( + n, false, -product_limit, product_limit), + product_extreme(product_limit) }, + [](auto x, auto y) { return x * y; }, + [](const real& x, const real& y) { return x * y; }); + run.binary("arithmetic", "divide", + { domains::positive(domains::near_one(n), 0.125), + domains::positive(domains::moderate(n), 0.125), + domains::positive( + domains::wide_exponent( + n, true, -product_limit, product_limit), + std::ldexp(0.5, -product_limit)), + domains::positive(product_extreme(product_limit), + std::ldexp(0.5, -product_limit)) }, + [](auto x, auto y) { return x / y; }, + [](const real& x, const real& y) { return x / y; }); + run.ternary("floating_point_utilities", "fma", + { domains::moderate_ternary(n), + fma_cancellation(n), + domains::wide_exponent_ternary( + n, false, -product_limit, product_limit) }, + [](auto x, auto y, auto z) { return bl::fma(x, y, z); }, + [](const real& x, const real& y, const real& z) { + return mpfr::fma(x, y, z); + }); + run.unary_exact("floating_point_utilities", "abs", + { domains::wide_exponent( + n, false, -wide_limit, wide_limit), + native_subnormal(n) }, + [](auto x) { return bl::abs(x); }, + [](const real& x) { + using boost::multiprecision::abs; + return abs(x); + }); + run.unary_exact("floating_point_utilities", "fabs", { domains::moderate(n) }, + [](auto x) { return bl::fabs(x); }, + [](const real& x) { + using boost::multiprecision::abs; + return abs(x); + }); + run.unary("roots_and_powers", "sqr", + { domains::moderate(n), + domains::wide_exponent( + n, false, -product_limit, product_limit) }, + [](auto x) { return bl::sqr(x); }, + [](const real& x) { return x * x; }); + run.unary("floating_point_utilities", "recip", + { domains::positive(domains::near_one(n), 0.125), + domains::positive( + domains::wide_exponent( + n, true, -product_limit, product_limit), + std::ldexp(0.5, -product_limit)) }, + [](auto x) { return bl::recip(x); }, + [](const real& x) { return real{ 1 } / x; }); + run.binary_exact("floating_point_utilities", "fmin", + { domains::moderate(n), + domains::wide_exponent( + n, false, -wide_limit, wide_limit) }, + [](auto x, auto y) { return bl::fmin(x, y); }, + [](const real& x, const real& y) { + return x < y ? x : y; + }); + run.binary_exact("floating_point_utilities", "fmax", + { domains::moderate(n), + domains::wide_exponent( + n, false, -wide_limit, wide_limit) }, + [](auto x, auto y) { return bl::fmax(x, y); }, + [](const real& x, const real& y) { + return x > y ? x : y; + }); + run.binary("floating_point_utilities", "fdim", + { domains::moderate(n), + near_equal_cancellation(n) }, + [](auto x, auto y) { return bl::fdim(x, y); }, + [](const real& x, const real& y) { + return x > y ? x - y : real{ 0 }; + }); + run.binary_exact("floating_point_utilities", "copysign", { domains::moderate(n) }, + [](auto x, auto y) { return bl::copysign(x, y); }, + [](const real& x, const real& y) { + using boost::multiprecision::abs; + return y < 0 ? -abs(x) : abs(x); + }); + + run.unary_exact("rounding", "floor", { rounding_inputs(n) }, + [](auto x) { return bl::floor(x); }, + [](const real& x) { + using boost::multiprecision::floor; + return floor(x); + }); + run.unary_exact("rounding", "ceil", { rounding_inputs(n) }, + [](auto x) { return bl::ceil(x); }, + [](const real& x) { + using boost::multiprecision::ceil; + return ceil(x); + }); + run.unary_exact("rounding", "trunc", { rounding_inputs(n) }, + [](auto x) { return bl::trunc(x); }, + [](const real& x) { return mpfr::trunc(x); }); + run.unary_exact("rounding", "round", { rounding_inputs(n) }, + [](auto x) { return bl::round(x); }, + [](const real& x) { + return mpfr::round_away_from_zero(x); + }); + run.unary_exact("rounding", "roundeven", { rounding_inputs(n) }, + [](auto x) { return bl::roundeven(x); }, + [](const real& x) { return mpfr::round_even(x); }); + run.unary( + "rounding", "round_decimals", { domains::moderate(n) }, + [](auto x) { return bl::round_decimals(x, 3); }, + [](const real& x) { + return mpfr::round_decimals(x, 3); + }); + run.unary( + "rounding", "round_significant", + { domains::wide_exponent( + n, false, -integer_power_limit, integer_power_limit) }, + [](auto x) { + return bl::round_significant(x, 7); + }, + [](const real& x) { + return mpfr::round_significant(x, 7); + }); + run.unary_exact("rounding", "lround", { rounding_inputs(n) }, + [](auto x) { + return static_cast(bl::lround(x)); + }, + [](const real& x) { + const real rounded = mpfr::round_away_from_zero(x); + return rounded == 0 ? real{ 0 } : rounded; + }); + run.unary_exact("rounding", "llround", { rounding_inputs(n) }, + [](auto x) { + return static_cast(bl::llround(x)); + }, + [](const real& x) { + const real rounded = mpfr::round_away_from_zero(x); + return rounded == 0 ? real{ 0 } : rounded; + }); + + run.binary_pair( + "remainders", "remquo", { nonzero_moderate(n) }, + [](auto x, auto y) { + int quotient = 0; + const Float remainder = bl::remquo(x, y, "ient); + const int low_bits = + quotient < 0 ? -((-quotient) & 7) : (quotient & 7); + return std::pair{ + remainder, + static_cast(low_bits) + }; + }, + [](const real& x, const real& y) { + return std::pair{ + mpfr::remainder(x, y), + real{ mpfr::remquo_bits(x, y) } + }; + }); + run.unary_pair_exact("floating_point_utilities", "modf", + { domains::moderate(n), + domains::wide_exponent( + n, false, -wide_limit, wide_limit) }, + [](auto x) { + Float integral{}; + const Float fractional = bl::modf(x, &integral); + return std::pair{ fractional, integral }; + }, + [](const real& x) { + const real integral = mpfr::trunc(x); + real fractional = x == 0 ? x : x - integral; + if (fractional == 0 && x < 0) + fractional = mpfr::signed_zero(true); + return std::pair{ fractional, integral }; + }); + run.unary_exact("floating_point_utilities", "ldexp", + { domains::wide_exponent( + n, false, -product_limit, product_limit) }, + [](auto x) { return bl::ldexp(x, 17); }, + [](const real& x) { return x * real{ 131072 }; }); + run.unary_exact("floating_point_utilities", "scalbn", + { domains::wide_exponent( + n, false, -product_limit, product_limit) }, + [](auto x) { return bl::scalbn(x, 17); }, + [](const real& x) { return x * real{ 131072 }; }); + run.unary_exact("floating_point_utilities", "scalbln", + { domains::wide_exponent( + n, false, -product_limit, product_limit) }, + [](auto x) { return bl::scalbln(x, 17L); }, + [](const real& x) { return x * real{ 131072 }; }); + run.unary_pair_exact("floating_point_utilities", "frexp", + { domains::wide_exponent( + n, false, -wide_limit, wide_limit), + native_subnormal(n) }, + [](auto x) { + int exponent = 0; + const Float fraction = bl::frexp(x, &exponent); + return std::pair{ + fraction, + static_cast(exponent) + }; + }, + [](const real& x) { + using boost::multiprecision::frexp; + int exponent = 0; + const real fraction = frexp(x, &exponent); + return std::pair{ fraction, real{ exponent } }; + }); + run.unary_exact("floating_point_utilities", "ilogb", + { nonzero_moderate(n), + domains::wide_exponent( + n, false, -wide_limit, wide_limit) }, + [](auto x) { + return static_cast(bl::ilogb(x)); + }, + [](const real& x) { + return real{ mpfr::ilogb(x) }; + }); + run.unary_exact("floating_point_utilities", "logb", + { nonzero_moderate(n), + domains::wide_exponent( + n, false, -wide_limit, wide_limit) }, + [](auto x) { return bl::logb(x); }, + [](const real& x) { + return real{ mpfr::ilogb(x) }; + }); + + auto sqrt_domains = positive(n, wide_limit, extreme_limit); + sqrt_domains.push_back( + domains::positive(native_subnormal(n))); + run.unary("roots_and_powers", "sqrt", std::move(sqrt_domains), + [](auto x) { return bl::sqrt(x); }, + [](const real& x) { + using boost::multiprecision::sqrt; + return sqrt(x); + }); + run.unary("roots_and_powers", "cbrt", + { domains::moderate(n), + domains::wide_exponent( + n, false, -wide_limit, wide_limit) }, + [](auto x) { return bl::cbrt(x); }, + [](const real& x) { return mpfr::cbrt(x); }); + run.binary("roots_and_powers", "hypot", + { domains::moderate(n), + domains::wide_exponent( + n, false, -wide_limit, wide_limit) }, + [](auto x, auto y) { return bl::hypot(x, y); }, + [](const real& x, const real& y) { + return mpfr::hypot(x, y); + }); + + run.unary("trigonometric", "sin", trig(n, reduction_limit), + [](auto x) { return bl::sin(x); }, + [](const real& x) { + using boost::multiprecision::sin; + return sin(x); + }); + run.unary("trigonometric", "cos", trig(n, reduction_limit), + [](auto x) { return bl::cos(x); }, + [](const real& x) { + using boost::multiprecision::cos; + return cos(x); + }); + run.unary("trigonometric", "tan", trig(n, reduction_limit), + [](auto x) { return bl::tan(x); }, + [](const real& x) { + using boost::multiprecision::tan; + return tan(x); + }); + run.unary("trigonometric", "atan", ordinary(n), + [](auto x) { return bl::atan(x); }, + [](const real& x) { + using boost::multiprecision::atan; + return atan(x); + }); + run.binary("trigonometric", "atan2", + { domains::near_one(n), domains::moderate(n), + atan2_extreme(extreme_limit) }, + [](auto y, auto x) { return bl::atan2(y, x); }, + [](const real& y, const real& x) { + using boost::multiprecision::atan2; + return atan2(y, x); + }); + run.unary("trigonometric", "asin", unit(n), + [](auto x) { return bl::asin(x); }, + [](const real& x) { + using boost::multiprecision::asin; + return asin(x); + }); + run.unary("trigonometric", "acos", unit(n), + [](auto x) { return bl::acos(x); }, + [](const real& x) { + using boost::multiprecision::acos; + return acos(x); + }); + + run.unary("exponentials", "exp", exponential(n, exponential_limit), + [](auto x) { return bl::exp(x); }, + [](const real& x) { + using boost::multiprecision::exp; + return exp(x); + }); + run.unary("exponentials", "exp2", exponential(n, exponential_limit), + [](auto x) { return bl::exp2(x); }, + [](const real& x) { return mpfr::exp2(x); }); + run.unary("exponentials", "expm1", + { domains::moderate(n, -8.0, 8.0), + near_zero_cancellation(n) }, + [](auto x) { return bl::expm1(x); }, + [](const real& x) { + using boost::multiprecision::expm1; + return expm1(x); + }); + run.unary("logarithms", "log", + positive(n, wide_limit, extreme_limit), + [](auto x) { return bl::log(x); }, + [](const real& x) { + using boost::multiprecision::log; + return log(x); + }); + run.unary("logarithms", "log2", + positive(n, wide_limit, extreme_limit), + [](auto x) { return bl::log2(x); }, + [](const real& x) { return mpfr::log2(x); }); + run.unary("logarithms", "log10", + positive(n, wide_limit, extreme_limit), + [](auto x) { return bl::log10(x); }, + [](const real& x) { return mpfr::log10(x); }); + run.unary("logarithms", "log1p", + { domains::bounded(domains::moderate(n), -0.99, 8.0), + near_zero_cancellation(n) }, + [](auto x) { return bl::log1p(x); }, + [](const real& x) { + using boost::multiprecision::log1p; + return log1p(x); + }); + run.binary("roots_and_powers", "pow", + { domains::positive(domains::near_one(n), 0.125), + domains::positive( + domains::moderate(n, 0.125, 8.0), 0.125) }, + [](auto x, auto y) { return bl::pow(x, y); }, + [](const real& x, const real& y) { + using boost::multiprecision::pow; + return pow(x, y); + }); + run.unary("roots_and_powers", "ipow", + { domains::moderate(n), + domains::wide_exponent( + n, false, -integer_power_limit, integer_power_limit) }, + [](auto x) { return bl::ipow(x, 7); }, + [](const real& x) { + return x * x * x * x * x * x * x; + }); + + run.binary("remainders", "fmod", + { domains::positive( + domains::moderate(n, 0.125, 8.0), 0.125), + domains::positive( + domains::wide_exponent( + n, true, -product_limit, product_limit), + std::ldexp(0.5, -product_limit)) }, + [](auto x, auto y) { return bl::fmod(x, y); }, + [](const real& x, const real& y) { + return mpfr::fmod(x, y); + }); + run.binary("remainders", "remainder", + { domains::positive( + domains::moderate(n, 0.125, 8.0), 0.125) }, + [](auto x, auto y) { return bl::remainder(x, y); }, + [](const real& x, const real& y) { + return mpfr::remainder(x, y); + }); + + run.unary("hyperbolic", "sinh", ordinary(n), + [](auto x) { return bl::sinh(x); }, + [](const real& x) { + using boost::multiprecision::sinh; + return sinh(x); + }); + run.unary("hyperbolic", "cosh", ordinary(n), + [](auto x) { return bl::cosh(x); }, + [](const real& x) { + using boost::multiprecision::cosh; + return cosh(x); + }); + run.unary("hyperbolic", "tanh", ordinary(n), + [](auto x) { return bl::tanh(x); }, + [](const real& x) { + using boost::multiprecision::tanh; + return tanh(x); + }); + run.unary("inverse_hyperbolic", "asinh", ordinary(n), + [](auto x) { return bl::asinh(x); }, + [](const real& x) { + using boost::multiprecision::asinh; + return asinh(x); + }); + run.unary("inverse_hyperbolic", "acosh", + { domains::interval( + "moderate", 1.0, 20.0, n, default_seed ^ 0x48u), + domains::boundary(n, 1.0, 2.0) }, + [](auto x) { return bl::acosh(x); }, + [](const real& x) { + using boost::multiprecision::acosh; + return acosh(x); + }); + run.unary("inverse_hyperbolic", "atanh", + { domains::bounded(domains::moderate(n), -0.99, 0.99), + domains::boundary(n, -0.999, 0.999) }, + [](auto x) { return bl::atanh(x); }, + [](const real& x) { + using boost::multiprecision::atanh; + return atanh(x); + }); + + run.unary("special_functions", "erf", ordinary(n), + [](auto x) { return bl::erf(x); }, + [](const real& x) { return boost::math::erf(x); }); + run.unary("special_functions", "erfc", ordinary(n), + [](auto x) { return bl::erfc(x); }, + [](const real& x) { return boost::math::erfc(x); }); + run.unary("special_functions", "lgamma", + { domains::interval( + "moderate", 0.125, 20.0, n, default_seed ^ 0x49u) }, + [](auto x) { return bl::lgamma(x); }, + [](const real& x) { return boost::math::lgamma(x); }); + run.unary("special_functions", "tgamma", + { domains::interval( + "moderate", 0.125, 20.0, n, default_seed ^ 0x4au) }, + [](auto x) { return bl::tgamma(x); }, + [](const real& x) { return boost::math::tgamma(x); }); + + run.require_complete(119); + return run.failures(); + } + } + + int run_f32(csv_writer& output, const options& settings) + { + return run_native(output, settings); + } + + int run_f64(csv_writer& output, const options& settings) + { + return run_native(output, settings); + } +} diff --git a/validation/accuracy/runner.hpp b/validation/accuracy/runner.hpp new file mode 100644 index 0000000..9b3fe5d --- /dev/null +++ b/validation/accuracy/runner.hpp @@ -0,0 +1,1653 @@ +#ifndef FLTX_TESTS_ACCURACY_RUNNER_INCLUDED +#define FLTX_TESTS_ACCURACY_RUNNER_INCLUDED + +#include "../support/csv.hpp" +#include "../support/domains.hpp" +#include "../support/implementations.hpp" +#include "../support/mpfr.hpp" +#include "../support/source_identity.hpp" +#include "../support/thresholds.hpp" +#include "special_values.hpp" +#include "signed_zero.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fltx::tests::accuracy +{ + inline constexpr std::string_view schema_version = "6"; +#if !defined(FLTX_TESTS_ENABLE_EXTERNAL_COMPARISONS) || \ + !FLTX_TESTS_ENABLE_EXTERNAL_COMPARISONS || \ + (defined(FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH) && \ + FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH) + inline constexpr bool external_implementations_enabled = false; +#else + inline constexpr bool external_implementations_enabled = true; +#endif +#if defined(FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH) && \ + FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH && \ + FLTX_ACCURACY_EXPECTS_SIMULATED_CONSTEVAL + inline constexpr bool special_value_probes_enabled = false; +#else + inline constexpr bool special_value_probes_enabled = true; +#endif + + struct options + { + std::string precision; + std::string output; + std::string run_id; + std::string source_revision; + std::string filter; + std::string sample_mode = "custom"; + std::size_t samples = 64; + bool advisory = false; + }; + + struct result + { + std::size_t samples = 0; + double mean_bits = 0.0; + double p01_bits = 0.0; + double worst_bits = 0.0; + std::string worst_input; + std::string observed; + std::string reference; + }; + + struct implementation_info + { + std::string id; + std::string short_label; + std::string label; + std::string api; + bool enabled = true; + }; + + [[nodiscard]] inline implementation_info describe( + implementations::identity identity, + std::string_view api) + { + return { + std::string(identity.id), + std::string(identity.short_label), + std::string(identity.label), + std::string(api.empty() ? identity.api : api), + identity.enabled + }; + } + + template + struct implementation_spec + { + using value_type = Value; + + implementation_info info; + Eval evaluate; + }; + + template + [[nodiscard]] auto comparison( + implementations::identity identity, + std::string_view api, + Eval evaluate) + { + implementation_info info = describe(identity, api); + info.enabled = info.enabled && external_implementations_enabled; + return implementation_spec{std::move(info), std::move(evaluate)}; + } + + [[nodiscard]] inline std::string number(double value) + { + if (mpfr::is_exact_score(value)) + return "inf"; + if (native_fp::is_inf(value)) + return value > 0 ? "inf" : "-inf"; + if (native_fp::is_nan(value)) + return "nan"; + std::ostringstream out; + out << std::fixed << std::setprecision(6) << value; + return out.str(); + } + + [[nodiscard]] inline std::string display_score(double value) + { + if (mpfr::is_exact_score(value)) + return "exact"; + if (native_fp::is_inf(value)) + return value > 0 ? "inf" : "-inf"; + if (native_fp::is_nan(value)) + return "nan"; + std::ostringstream out; + out << std::fixed << std::setprecision(2) << value; + return out.str(); + } + + template + class runner + { + public: + runner(csv_writer& output, const options& settings) + : output_(output), settings_(settings) + { + } + + template + void unary( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Reference reference, + Specs... comparisons) + { + unary_impl( + group, + operation, + std::move(test_domains), + std::move(evaluate), + std::move(reference), + false, + std::move(comparisons)...); + } + + template + void unary_exact( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Reference reference, + Specs... comparisons) + { + unary_impl( + group, + operation, + std::move(test_domains), + std::move(evaluate), + std::move(reference), + true, + std::move(comparisons)...); + } + + template + void binary( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Reference reference, + Specs... comparisons) + { + binary_impl( + group, + operation, + std::move(test_domains), + std::move(evaluate), + std::move(reference), + false, + std::move(comparisons)...); + } + + template + void binary_exact( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Reference reference, + Specs... comparisons) + { + binary_impl( + group, + operation, + std::move(test_domains), + std::move(evaluate), + std::move(reference), + true, + std::move(comparisons)...); + } + + template + void binary_pairs( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Reference reference, + Specs... comparisons) + { + if (!selected(operation)) + return; + + for (const domains::binary_domain& domain : test_domains) + { + measure_binary( + primary_info(operation), + group, + operation, + domain, + evaluate, + reference, + false, + true); + (measure_binary_spec( + group, + operation, + domain, + comparisons, + reference, + false), ...); + } + } + + template + void predicate( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Reference reference, + Specs... comparisons) + { + if (!selected(operation)) + return; + + for (const domains::domain& domain : test_domains) + { + measure_predicate( + primary_info(operation), + group, + operation, + domain, + evaluate, + reference, + true); + (measure_predicate_spec( + group, + operation, + domain, + comparisons, + reference), ...); + } + } + + template + void unary_pair( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Reference reference, + Specs... comparisons) + { + unary_pair_impl( + group, + operation, + std::move(test_domains), + std::move(evaluate), + std::move(reference), + false, + std::move(comparisons)...); + } + + template + void unary_pair_exact( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Reference reference, + Specs... comparisons) + { + unary_pair_impl( + group, + operation, + std::move(test_domains), + std::move(evaluate), + std::move(reference), + true, + std::move(comparisons)...); + } + + template + void binary_pair( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Reference reference, + Specs... comparisons) + { + if (!selected(operation)) + return; + + for (const domains::domain& domain : test_domains) + { + measure_binary_pair( + primary_info(operation), + group, + operation, + domain, + evaluate, + reference, + true); + (measure_binary_pair_spec( + group, + operation, + domain, + comparisons, + reference), ...); + } + } + + template + void ternary( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Reference reference, + Specs... comparisons) + { + if (!selected(operation)) + return; + + for (const domains::ternary_domain& domain : test_domains) + { + measure_ternary( + primary_info(operation), + group, + operation, + domain, + evaluate, + reference, + true); + (measure_ternary_spec( + group, + operation, + domain, + comparisons, + reference), ...); + } + } + + template + void parse( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Specs... comparisons) + { + if (!selected(operation)) + return; + + for (const domains::text_domain& domain : test_domains) + { + std::vector expected; + expected.reserve(domain.values.size()); + for (const std::string& text : domain.values) + expected.emplace_back(text); + + measure_parse( + primary_info(operation), + group, + operation, + domain, + evaluate, + expected, + true); + (measure_parse_spec( + group, + operation, + domain, + comparisons, + expected), ...); + } + } + + template + void format( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Specs... comparisons) + { + if (!selected(operation)) + return; + + for (const domains::domain& domain : test_domains) + { + measure_format( + primary_info(operation), + group, + operation, + domain, + evaluate, + true); + (measure_format_spec( + group, + operation, + domain, + comparisons), ...); + } + } + + [[nodiscard]] int failures() const noexcept + { + return failures_; + } + + void require_complete(std::size_t expected_rows) const + { + if (fltx_rows_ == 0) + throw std::runtime_error("accuracy filter matched no operations"); + if (settings_.filter.empty() && fltx_rows_ != expected_rows) + { + throw std::runtime_error( + "accuracy inventory mismatch: expected " + + std::to_string(expected_rows) + " fltx rows, wrote " + + std::to_string(fltx_rows_)); + } + } + + private: + template + void unary_impl( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Reference reference, + bool require_exact, + Specs... comparisons) + { + if (!selected(operation)) + return; + + for (const domains::domain& domain : test_domains) + { + measure_unary( + primary_info(operation), + group, + operation, + domain, + evaluate, + reference, + require_exact, + true); + (measure_unary_spec( + group, + operation, + domain, + comparisons, + reference, + require_exact), ...); + } + } + + template + void binary_impl( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Reference reference, + bool require_exact, + Specs... comparisons) + { + if (!selected(operation)) + return; + + for (const domains::domain& domain : test_domains) + { + measure_binary( + primary_info(operation), + group, + operation, + domain, + evaluate, + reference, + require_exact, + true); + (measure_binary_spec( + group, + operation, + domain, + comparisons, + reference, + require_exact), ...); + } + } + + template + void unary_pair_impl( + std::string_view group, + std::string_view operation, + std::vector test_domains, + Eval evaluate, + Reference reference, + bool require_exact, + Specs... comparisons) + { + if (!selected(operation)) + return; + + for (const domains::domain& domain : test_domains) + { + measure_unary_pair( + primary_info(operation), + group, + operation, + domain, + evaluate, + reference, + require_exact, + true); + (measure_unary_pair_spec( + group, + operation, + domain, + comparisons, + reference, + require_exact), ...); + } + } + + [[nodiscard]] implementation_info primary_info( + std::string_view operation) const + { + return describe( + implementations::primary_identity, + "bl::" + std::string(operation)); + } + + template + void measure_unary_spec( + std::string_view group, + std::string_view operation, + const domains::domain& domain, + const Spec& spec, + Reference reference, + bool require_exact) + { + if constexpr (external_implementations_enabled) + { + if (spec.info.enabled) + { + measure_unary( + spec.info, + group, + operation, + domain, + spec.evaluate, + reference, + require_exact, + false); + } + } + } + + template + void measure_binary_spec( + std::string_view group, + std::string_view operation, + const Domain& domain, + const Spec& spec, + Reference reference, + bool require_exact) + { + if constexpr (external_implementations_enabled) + { + if (spec.info.enabled) + { + measure_binary( + spec.info, + group, + operation, + domain, + spec.evaluate, + reference, + require_exact, + false); + } + } + } + + template + void measure_predicate_spec( + std::string_view group, + std::string_view operation, + const domains::domain& domain, + const Spec& spec, + Reference reference) + { + if constexpr (external_implementations_enabled) + { + if (spec.info.enabled) + { + measure_predicate( + spec.info, + group, + operation, + domain, + spec.evaluate, + reference, + false); + } + } + } + + template + void measure_unary_pair_spec( + std::string_view group, + std::string_view operation, + const domains::domain& domain, + const Spec& spec, + Reference reference, + bool require_exact) + { + if constexpr (external_implementations_enabled) + { + if (spec.info.enabled) + { + measure_unary_pair( + spec.info, + group, + operation, + domain, + spec.evaluate, + reference, + require_exact, + false); + } + } + } + + template + void measure_binary_pair_spec( + std::string_view group, + std::string_view operation, + const domains::domain& domain, + const Spec& spec, + Reference reference) + { + if constexpr (external_implementations_enabled) + { + if (spec.info.enabled) + { + measure_binary_pair( + spec.info, + group, + operation, + domain, + spec.evaluate, + reference, + false); + } + } + } + + template + void measure_ternary_spec( + std::string_view group, + std::string_view operation, + const domains::ternary_domain& domain, + const Spec& spec, + Reference reference) + { + if constexpr (external_implementations_enabled) + { + if (spec.info.enabled) + { + measure_ternary( + spec.info, + group, + operation, + domain, + spec.evaluate, + reference, + false); + } + } + } + + template + void measure_parse_spec( + std::string_view group, + std::string_view operation, + const domains::text_domain& domain, + const Spec& spec, + const std::vector& expected) + { + if constexpr (external_implementations_enabled) + { + if (spec.info.enabled) + { + measure_parse( + spec.info, + group, + operation, + domain, + spec.evaluate, + expected, + false); + } + } + } + + template + void measure_format_spec( + std::string_view group, + std::string_view operation, + const domains::domain& domain, + const Spec& spec) + { + if constexpr (external_implementations_enabled) + { + if (spec.info.enabled) + { + measure_format( + spec.info, + group, + operation, + domain, + spec.evaluate, + false); + } + } + } + + template + [[nodiscard]] static Value project_to_value(const mpfr::real& value) + { + return implementations::value_traits::from_sample( + mpfr::sample_from_real(value)); + } + + template + [[nodiscard]] static mpfr::real native_step(const mpfr::real& value) + { + using boost::multiprecision::ldexp; + const int exponent = value == 0 ? 1 : mpfr::ilogb(value) + 1; + return ldexp( + mpfr::real{ 1 }, + exponent - static_cast( + implementations::value_traits::nominal_bits)); + } + + template + void measure_unary( + const implementation_info& info, + std::string_view group, + std::string_view operation, + const domains::domain& domain, + Eval evaluate, + Reference reference, + bool require_exact, + bool gated) + { + const std::string special = cached_special( + info, operation, gated, + [&] { return special_values::unary(operation, evaluate); }); + const std::string zero = cached_signed_zero( + info, operation, + [&] { return signed_zero::unary(operation, evaluate); }); + result measured{}; + std::vector bits; + bits.reserve(domain.values.size()); + for (std::size_t i = 0; i < domain.values.size(); ++i) + { + const Value input = + implementations::value_traits::from_sample( + domain.values[i]); + require_finite(input, operation, domain.name); + const Value value(evaluate(input)); + const mpfr::real expected = reference( + implementations::value_traits::to_real(input)); + add_sample( + value, + expected, + require_exact, + describe(domain.values[i]), + measured, + bits); + } + finish( + info, group, operation, domain, measured, bits, + special, zero, gated); + } + + template + void measure_binary( + const implementation_info& info, + std::string_view group, + std::string_view operation, + const Domain& domain, + Eval evaluate, + Reference reference, + bool require_exact, + bool gated) + { + const std::string special = cached_special( + info, operation, gated, + [&] { return special_values::binary(operation, evaluate); }); + const std::string zero = cached_signed_zero( + info, operation, + [&] { return signed_zero::binary(operation, evaluate); }); + result measured{}; + std::vector bits; + bits.reserve(domains::binary_size(domain)); + for (std::size_t i = 0; i < domains::binary_size(domain); ++i) + { + const sample& lhs_sample = domains::binary_lhs(domain, i); + const sample& rhs_sample = domains::binary_rhs(domain, i); + const Value lhs = + implementations::value_traits::from_sample(lhs_sample); + Value rhs = + implementations::value_traits::from_sample(rhs_sample); + require_finite(lhs, operation, domain.name); + require_finite(rhs, operation, domain.name); + const mpfr::real lhs_real = + implementations::value_traits::to_real(lhs); + mpfr::real rhs_real = + implementations::value_traits::to_real(rhs); + mpfr::real expected = reference(lhs_real, rhs_real); + std::string input_description = + describe(lhs_sample) + " ; " + describe(rhs_sample); + + // A cancellation input can become two identical operands when + // projected to a narrower implementation. In that case, retain + // the intended ordering but move the right operand to a native + // representable neighbour. The MPFR oracle still uses the exact + // converted values that the implementation receives. + if (domains::preserve_nonzero(domain, i) && + (operation == "add" || operation == "subtract" || + operation == "fdim")) + { + const mpfr::real raw_lhs = + mpfr::input_real(lhs_sample); + const mpfr::real raw_rhs = + mpfr::input_real(rhs_sample); + const mpfr::real raw_expected = reference(raw_lhs, raw_rhs); + if (raw_expected != 0 && expected == 0 && raw_lhs != raw_rhs) + { + bool adapted = false; + mpfr::real step = native_step(rhs_real); + const int direction = operation == "add" + ? (raw_expected > 0 ? 1 : -1) + : (raw_expected > 0 ? -1 : 1); + const mpfr::real candidate_base = operation == "add" + ? -lhs_real + : lhs_real; + for (int attempt = 0; attempt < 16; ++attempt) + { + Value candidate = project_to_value( + candidate_base + direction * step); + const mpfr::real candidate_real = + implementations::value_traits::to_real( + candidate); + const mpfr::real candidate_expected = + reference(lhs_real, candidate_real); + if (candidate_real != lhs_real && + candidate_expected != 0 && + ((candidate_expected > 0) == + (raw_expected > 0))) + { + rhs = std::move(candidate); + rhs_real = candidate_real; + expected = candidate_expected; + input_description += + " [right operand adapted to native precision]"; + adapted = true; + break; + } + step *= 2; + } + if (!adapted) + { + throw std::runtime_error( + "unable to preserve nonzero additive cancellation " + "after native input conversion"); + } + } + } + + const Value value(evaluate(lhs, rhs)); + add_sample( + value, + expected, + require_exact, + std::move(input_description), + measured, + bits); + } + finish( + info, group, operation, domain, measured, bits, + special, zero, gated); + } + + template + void measure_predicate( + const implementation_info& info, + std::string_view group, + std::string_view operation, + const domains::domain& domain, + Eval evaluate, + Reference reference, + bool gated) + { + const std::string special = cached_special( + info, operation, gated, + [&] { + return special_values::predicate( + operation, evaluate); + }); + result measured{}; + std::vector bits; + bits.reserve(domain.values.size() * 2); + for (std::size_t i = 0; i < domain.values.size(); ++i) + { + const sample& lhs_sample = domain.values[i]; + const sample& rhs_sample = + domain.values[(i * 7 + 3) % domain.values.size()]; + const Value lhs = + implementations::value_traits::from_sample(lhs_sample); + const Value rhs = + implementations::value_traits::from_sample(rhs_sample); + require_finite(lhs, operation, domain.name); + require_finite(rhs, operation, domain.name); + const mpfr::real lhs_real = + implementations::value_traits::to_real(lhs); + + const auto add_case = [&](const Value& right, + std::string input) { + const bool observed = + static_cast(evaluate(lhs, right)); + const bool expected = static_cast(reference( + lhs_real, + implementations::value_traits::to_real(right))); + const double sample_bits = observed == expected + ? mpfr::exact_score() + : 0.0; + bits.push_back(sample_bits); + if (bits.size() == 1 || + sample_bits < measured.worst_bits) + { + measured.worst_bits = sample_bits; + measured.worst_input = std::move(input); + measured.observed = observed ? "true" : "false"; + measured.reference = expected ? "true" : "false"; + } + }; + + add_case( + rhs, + describe(lhs_sample) + " ; " + describe(rhs_sample)); + add_case( + lhs, + describe(lhs_sample) + " ; same value"); + } + finish( + info, group, operation, domain, measured, bits, + special, "-", gated); + } + + template + void measure_unary_pair( + const implementation_info& info, + std::string_view group, + std::string_view operation, + const domains::domain& domain, + Eval evaluate, + Reference reference, + bool require_exact, + bool gated) + { + const std::string special = cached_special( + info, operation, gated, + [&] { return special_values::unary_pair(operation, evaluate); }); + const std::string zero = cached_signed_zero( + info, operation, + [&] { return signed_zero::unary_pair(operation, evaluate); }); + result measured{}; + std::vector bits; + bits.reserve(domain.values.size()); + for (std::size_t i = 0; i < domain.values.size(); ++i) + { + const Value input = + implementations::value_traits::from_sample( + domain.values[i]); + require_finite(input, operation, domain.name); + const auto [first_raw, second_raw] = evaluate(input); + const Value first(first_raw); + const Value second(second_raw); + const auto expected = reference( + implementations::value_traits::to_real(input)); + const double first_bits = + score(first, expected.first, require_exact); + const double second_bits = + score(second, expected.second, require_exact); + add_pair_sample( + first, + second, + expected.first, + expected.second, + std::min(first_bits, second_bits), + describe(domain.values[i]), + measured, + bits); + } + finish( + info, group, operation, domain, measured, bits, + special, zero, gated); + } + + template + void measure_binary_pair( + const implementation_info& info, + std::string_view group, + std::string_view operation, + const domains::domain& domain, + Eval evaluate, + Reference reference, + bool gated) + { + const std::string special = cached_special( + info, operation, gated, + [&] { return special_values::binary_pair(operation, evaluate); }); + const std::string zero = cached_signed_zero( + info, operation, + [&] { return signed_zero::binary_pair(operation, evaluate); }); + result measured{}; + std::vector bits; + bits.reserve(domain.values.size()); + for (std::size_t i = 0; i < domain.values.size(); ++i) + { + const sample& lhs_sample = domain.values[i]; + const sample& rhs_sample = + domain.values[(i * 7 + 3) % domain.values.size()]; + const Value lhs = + implementations::value_traits::from_sample(lhs_sample); + const Value rhs = + implementations::value_traits::from_sample(rhs_sample); + require_finite(lhs, operation, domain.name); + require_finite(rhs, operation, domain.name); + const auto [first_raw, second_raw] = evaluate(lhs, rhs); + const Value first(first_raw); + const Value second(second_raw); + const auto expected = reference( + implementations::value_traits::to_real(lhs), + implementations::value_traits::to_real(rhs)); + const double sample_bits = std::min( + score(first, expected.first, false), + score(second, expected.second, false)); + add_pair_sample( + first, + second, + expected.first, + expected.second, + sample_bits, + describe(lhs_sample) + " ; " + describe(rhs_sample), + measured, + bits); + } + finish( + info, group, operation, domain, measured, bits, + special, zero, gated); + } + + template + void measure_ternary( + const implementation_info& info, + std::string_view group, + std::string_view operation, + const domains::ternary_domain& domain, + Eval evaluate, + Reference reference, + bool gated) + { + const std::string special = cached_special( + info, operation, gated, + [&] { return special_values::ternary(operation, evaluate); }); + const std::string zero = cached_signed_zero( + info, operation, + [&] { return signed_zero::ternary(operation, evaluate); }); + result measured{}; + std::vector bits; + bits.reserve(domain.values.size()); + for (std::size_t i = 0; i < domain.values.size(); ++i) + { + const domains::ternary_sample& input = domain.values[i]; + const sample& x_sample = input.x; + const sample& y_sample = input.y; + Value x = + implementations::value_traits::from_sample(x_sample); + Value y = + implementations::value_traits::from_sample(y_sample); + sample z_sample = input.z; + Value z = + implementations::value_traits::from_sample(z_sample); + require_finite(x, operation, domain.name); + require_finite(y, operation, domain.name); + require_finite(z, operation, domain.name); + mpfr::real x_real = + implementations::value_traits::to_real(x); + mpfr::real y_real = + implementations::value_traits::to_real(y); + mpfr::real z_real = + implementations::value_traits::to_real(z); + mpfr::real expected; + std::string input_description = + describe(x_sample) + " ; " + describe(y_sample) + " ; " + + describe(z_sample); + + if (operation == "fma" && domain.name == "cancellation") + { + const mpfr::real raw_x = + mpfr::input_real(x_sample); + const mpfr::real raw_y = + mpfr::input_real(y_sample); + const sample raw_z_sample = mpfr::sample_from_real( + -(raw_x * raw_y), "product cancellation"); + const mpfr::real raw_expected = reference( + raw_x, + raw_y, + mpfr::input_real(raw_z_sample)); + const auto set_cancelling_z = [&] { + const mpfr::real target = -(x_real * y_real); + z_sample = mpfr::sample_from_real( + target, "native product cancellation"); + z = implementations::value_traits::from_sample( + z_sample); + z_real = + implementations::value_traits::to_real(z); + expected = reference(x_real, y_real, z_real); + }; + + set_cancelling_z(); + bool adapted_operands = false; + if (raw_expected != 0 && expected == 0) + { + const mpfr::real base_x = x_real; + const mpfr::real base_y = y_real; + const mpfr::real x_step = native_step(base_x); + const mpfr::real y_step = native_step(base_y); + for (int attempt = 1; attempt <= 16; ++attempt) + { + Value candidate_x = project_to_value( + base_x + attempt * x_step); + Value candidate_y = project_to_value( + base_y + (2 * attempt + 1) * y_step); + x = std::move(candidate_x); + y = std::move(candidate_y); + x_real = + implementations::value_traits::to_real(x); + y_real = + implementations::value_traits::to_real(y); + set_cancelling_z(); + if (expected != 0) + { + adapted_operands = true; + break; + } + } + if (expected == 0) + { + throw std::runtime_error( + "unable to preserve nonzero fma cancellation " + "after native input conversion"); + } + } + input_description = + describe(x_sample) + " ; " + describe(y_sample) + + " ; native product cancellation"; + if (adapted_operands) + { + input_description += + " [operands adapted to native precision]"; + } + } + else + { + expected = reference(x_real, y_real, z_real); + } + + const Value value(evaluate(x, y, z)); + add_sample( + value, + expected, + false, + std::move(input_description), + measured, + bits); + } + finish( + info, group, operation, domain, measured, bits, + special, zero, gated); + } + + template + void measure_parse( + const implementation_info& info, + std::string_view group, + std::string_view operation, + const domains::text_domain& domain, + Eval evaluate, + const std::vector& expected, + bool gated) + { + const std::string special = cached_special( + info, operation, gated, + [&] { return special_values::parse(evaluate); }); + const std::string zero = cached_signed_zero( + info, operation, + [&] { return signed_zero::parse(evaluate); }); + result measured{}; + std::vector bits; + bits.reserve(domain.values.size()); + for (std::size_t i = 0; i < domain.values.size(); ++i) + { + const Value value(evaluate(domain.values[i])); + add_sample( + value, + expected[i], + false, + domain.values[i], + measured, + bits); + } + finish( + info, group, operation, domain, measured, bits, + special, zero, gated); + } + + template + void measure_format( + const implementation_info& info, + std::string_view group, + std::string_view operation, + const domains::domain& domain, + Eval evaluate, + bool gated) + { + const std::string special = cached_special( + info, operation, gated, + [&] { return special_values::format(evaluate); }); + const std::string zero = cached_signed_zero( + info, operation, + [&] { return signed_zero::format(evaluate); }); + result measured{}; + std::vector bits; + bits.reserve(domain.values.size()); + for (std::size_t i = 0; i < domain.values.size(); ++i) + { + const Value input = + implementations::value_traits::from_sample( + domain.values[i]); + require_finite(input, operation, domain.name); + const std::string text = evaluate(input); + + // MPFR parses the formatter output directly. This deliberately + // avoids every library parser, including fltx's, so the row + // measures only the numeric information retained by formatting. + const mpfr::real observed{text}; + const mpfr::real expected = + implementations::value_traits::to_real(input); + const double sample_bits = + normalized_bits(mpfr::resolution_adjusted_bits( + observed, + expected, + implementations::value_traits::absolute_resolution(), + implementations::value_traits::nominal_bits)); + bits.push_back(sample_bits); + if (bits.size() == 1 || sample_bits < measured.worst_bits) + { + measured.worst_bits = sample_bits; + measured.worst_input = describe(domain.values[i]); + measured.observed = text; + measured.reference = mpfr::text(expected); + } + } + finish( + info, group, operation, domain, measured, bits, + special, zero, gated); + } + + template + [[nodiscard]] double score( + const Value& value, + const mpfr::real& expected, + bool require_exact) const + { + const mpfr::real observed = + implementations::value_traits::to_real(value); + if (!require_exact) + { + return normalized_bits(mpfr::resolution_adjusted_bits( + observed, + expected, + implementations::value_traits::absolute_resolution(), + implementations::value_traits::nominal_bits)); + } + + bool matches = false; + if (mpfr::is_nan(expected)) + matches = mpfr::is_nan(observed); + else if (mpfr::is_inf(expected)) + { + matches = + mpfr::is_inf(observed) && + mpfr::sign_bit(observed) == mpfr::sign_bit(expected); + } + else + { + matches = observed == expected; + } + return matches + ? mpfr::exact_score() + : 0.0; + } + + template + void add_sample( + const Value& value, + const mpfr::real& expected, + bool require_exact, + std::string input, + result& measured, + std::vector& bits) + { + const mpfr::real observed = + implementations::value_traits::to_real(value); + const double sample_bits = score(value, expected, require_exact); + bits.push_back(sample_bits); + if (bits.size() == 1 || sample_bits < measured.worst_bits) + { + measured.worst_bits = sample_bits; + measured.worst_input = std::move(input); + measured.observed = mpfr::text(observed); + measured.reference = mpfr::text(expected); + } + } + + template + void add_pair_sample( + const First& first, + const Second& second, + const mpfr::real& expected_first, + const mpfr::real& expected_second, + double sample_bits, + std::string input, + result& measured, + std::vector& bits) + { + bits.push_back(sample_bits); + if (bits.size() == 1 || sample_bits < measured.worst_bits) + { + measured.worst_bits = sample_bits; + measured.worst_input = std::move(input); + measured.observed = + mpfr::text( + implementations::value_traits::to_real(first)) + + " ; " + + mpfr::text( + implementations::value_traits::to_real(second)); + measured.reference = + mpfr::text(expected_first) + " ; " + + mpfr::text(expected_second); + } + } + + template + static void require_finite( + const Value& value, + std::string_view operation, + std::string_view domain) + { + if (!implementations::value_traits::is_finite(value)) + { + throw std::runtime_error( + "non-finite input escaped into accuracy row " + + std::string(operation) + "/" + std::string(domain)); + } + } + + [[nodiscard]] bool selected(std::string_view operation) const + { + return settings_.filter.empty() || + operation.find(settings_.filter) != std::string_view::npos; + } + + template + [[nodiscard]] static double normalized_bits(double bits) + { + const double ceiling = + implementations::value_traits::nominal_bits + 32.0; + if (native_fp::is_nan(bits)) + return 0.0; + if (mpfr::is_exact_score(bits)) + return bits; + return std::clamp(bits, 0.0, ceiling); + } + + template + [[nodiscard]] static double mean_bits(double bits) + { + return mpfr::is_exact_score(bits) + ? implementations::value_traits::nominal_bits + 32.0 + : bits; + } + + template + [[nodiscard]] std::string cached_special( + const implementation_info& info, + std::string_view operation, + bool gated, + Probe probe) + { + if constexpr (special_value_probes_enabled) + return cached_special_enabled( + info, operation, gated, std::move(probe)); + else + return "-"; + } + + template + [[nodiscard]] std::string cached_special_enabled( + const implementation_info& info, + std::string_view operation, + bool gated, + Probe probe) + { + const std::string key = + info.id + '\n' + std::string(operation); + if (const auto found = special_support_.find(key); + found != special_support_.end()) + return found->second; + + // These dd_real functions enter finite-only reduction/Newton code + // for non-finite inputs and can access invalid intermediate state. + // Record that unsupported behavior without letting an + // informational comparison terminate the complete run. + const bool unsafe_ddreal_special = + operation == "tan" || operation == "atan" || + operation == "atan2" || operation == "asin" || + operation == "acos"; + const std::string category = + info.id == "qdpp" && + implementations::precision_name == "f128" && + unsafe_ddreal_special + ? "No" + : probe().category(); + special_support_.emplace(key, category); + #if defined(FLTX_FAST_MATH) + const bool relaxed_basic_arithmetic = + info.id == "fltx" && + (implementations::precision_name == "f128" || + implementations::precision_name == "f256") && + (operation == "add" || operation == "subtract" || + operation == "multiply" || operation == "divide"); + #else + constexpr bool relaxed_basic_arithmetic = false; + #endif + if (gated && !relaxed_basic_arithmetic && + category != "-" && category != "Both") + { + ++failures_; + std::cerr + << "special-value contract failed: " + << implementations::precision_name + << " fltx " << operation + << " supports " << category << " only\n"; + } + return category; + } + + template + [[nodiscard]] std::string cached_signed_zero( + const implementation_info& info, + std::string_view operation, + Probe probe) + { + const std::string key = info.id + '\n' + std::string(operation); + if (const auto found = signed_zero_support_.find(key); + found != signed_zero_support_.end()) + { + return found->second; + } + const std::string category = probe().category(); + signed_zero_support_.emplace(key, category); + return category; + } + + template + void finish( + const implementation_info& info, + std::string_view group, + std::string_view operation, + const Domain& domain, + result& measured, + std::vector& bits, + std::string_view special, + std::string_view zero, + bool gated) + { + if (bits.empty()) + throw std::runtime_error("accuracy domain produced no samples"); + + double total = 0.0; + bool all_exact = true; + for (const double value : bits) + { + total += mean_bits(value); + all_exact = + all_exact && mpfr::is_exact_score(value); + } + std::sort(bits.begin(), bits.end()); + measured.samples = bits.size(); + measured.mean_bits = all_exact + ? mpfr::exact_score() + : total / static_cast(bits.size()); + measured.p01_bits = bits[ + std::min( + bits.size() - 1, + static_cast((bits.size() - 1) * 0.01))]; + + std::string required; + std::string margin; + std::string passed; + if (gated) + { + const double minimum = thresholds::required( + mpfr::traits::precision, + operation, + domain.name); + const double safety = measured.worst_bits - minimum; + const bool ok = safety >= 0.0; + required = number(minimum); + margin = number(safety); + passed = ok ? "yes" : "no"; + failures_ += ok ? 0 : 1; + ++fltx_rows_; + } + + output_.row({ + std::string(schema_version), + settings_.run_id, + settings_.source_revision, + fltx::tests::support::source_fingerprint, + std::string(implementations::precision_name), + std::string(group), + std::string(operation), + info.id, + info.short_label, + info.label, + info.api, + domain.name, + std::to_string(measured.samples), + std::to_string(domain.seed), + number(measured.mean_bits), + number(measured.p01_bits), + number(measured.worst_bits), + required, + margin, + passed, + std::string(special), + std::string(zero), + measured.worst_input, + measured.observed, + measured.reference + }); + + std::cout << std::left + << std::setw(8) + << implementations::precision_name + << std::setw(9) + << info.short_label + << std::setw(32) + << operation + << std::setw(20) + << domain.name + << "mean " + << std::setw(9) + << display_score(measured.mean_bits) + << "worst " + << std::setw(9) + << display_score(measured.worst_bits); + if (gated) + std::cout << (passed == "yes" ? "PASS" : "FAIL"); + else + std::cout << "info"; + std::cout << '\n' << std::flush; + } + + csv_writer& output_; + const options& settings_; + int failures_ = 0; + std::size_t fltx_rows_ = 0; + std::unordered_map special_support_; + std::unordered_map signed_zero_support_; + }; + + int run_f128(csv_writer& output, const options& settings); + int run_f256(csv_writer& output, const options& settings); + int run_f32(csv_writer& output, const options& settings); + int run_f64(csv_writer& output, const options& settings); +} + +#endif diff --git a/validation/accuracy/signed_zero.hpp b/validation/accuracy/signed_zero.hpp new file mode 100644 index 0000000..60bf7a9 --- /dev/null +++ b/validation/accuracy/signed_zero.hpp @@ -0,0 +1,315 @@ +#ifndef FLTX_TESTS_ACCURACY_SIGNED_ZERO_INCLUDED +#define FLTX_TESTS_ACCURACY_SIGNED_ZERO_INCLUDED + +#include "../support/implementations.hpp" +#include "../support/mpfr.hpp" +#include "../support/native_fp.hpp" + +#include +#include +#include +#include +#include + +namespace fltx::tests::accuracy::signed_zero +{ + struct support + { + bool applicable = false; + bool preserved = true; + + [[nodiscard]] std::string category() const + { + if (!applicable) + return "-"; + return preserved ? "yes" : "no"; + } + + void record(bool matches) noexcept + { + applicable = true; + preserved = preserved && matches; + } + }; + + template + [[nodiscard]] Value input_zero(bool negative) + { + return implementations::value_traits::from_sample( + make_exact_sample(native_fp::signed_zero(negative))); + } + + template + [[nodiscard]] Value input(double value) + { + return implementations::value_traits::from_sample( + make_exact_sample(value)); + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION bool matches_zero( + const Value& value, + bool negative) + { + constexpr std::uint64_t sign_mask = UINT64_C(0x8000000000000000); + constexpr std::uint64_t magnitude_mask = ~sign_mask; + const auto components = implementations::observe(value); + for (const double component : components) + { + if ((native_fp::bits(component) & magnitude_mask) != 0) + return false; + } + return ((native_fp::bits(components[0]) & sign_mask) != 0) == negative; + } + + template + FLTX_VALIDATION_PRECISE_FUNCTION void record( + support& result, + Evaluate evaluate, + bool negative) + { + try + { + result.record(matches_zero(Value(evaluate()), negative)); + } + catch (...) + { + result.record(false); + } + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support unary( + std::string_view operation, + Eval evaluate) + { + support result{}; + const auto same_sign = [&] { + record(result, [&] { return evaluate(input_zero(false)); }, false); + record(result, [&] { return evaluate(input_zero(true)); }, true); + }; + const auto positive = [&] { + record(result, [&] { return evaluate(input_zero(false)); }, false); + record(result, [&] { return evaluate(input_zero(true)); }, false); + }; + + if (operation == "abs" || operation == "fabs" || operation == "sqr") + positive(); + else if ( + operation == "floor" || operation == "ceil" || + operation == "trunc" || operation == "round" || + operation == "roundeven" || operation == "round_decimals" || + operation == "round_significant" || operation == "ldexp" || + operation == "scalbn" || operation == "scalbln" || + operation == "sqrt" || operation == "cbrt" || + operation == "sin" || operation == "tan" || + operation == "asin" || operation == "atan" || + operation == "expm1" || operation == "log1p" || + operation == "sinh" || operation == "tanh" || + operation == "asinh" || operation == "atanh" || + operation == "erf" || operation == "ipow") + { + same_sign(); + } + else if (operation == "recip") + { + record(result, [&] { + return evaluate(input(native_fp::positive_infinity())); + }, false); + record(result, [&] { + return evaluate(input(native_fp::negative_infinity())); + }, true); + } + return result; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support binary( + std::string_view operation, + Eval evaluate) + { + support result{}; + const auto zero = [&](bool lhs_negative, bool rhs_negative, + bool expected_negative) { + record(result, [&] { + return evaluate( + input_zero(lhs_negative), + input_zero(rhs_negative)); + }, expected_negative); + }; + const auto zero_value = [&](bool lhs_negative, double rhs, + bool expected_negative) { + record(result, [&] { + return evaluate(input_zero(lhs_negative), input(rhs)); + }, expected_negative); + }; + + if (operation == "add") + { + zero(false, false, false); + zero(true, true, true); + zero(false, true, false); + zero(true, false, false); + } + else if (operation == "subtract") + { + zero(false, false, false); + zero(true, false, true); + zero(false, true, false); + zero(true, true, false); + } + else if (operation == "multiply" || operation == "divide") + { + zero_value(false, 1.0, false); + zero_value(true, 1.0, true); + zero_value(false, -1.0, true); + zero_value(true, -1.0, false); + } + else if (operation == "fmin") + { + zero(false, true, true); + zero(true, false, true); + } + else if (operation == "fmax") + { + zero(false, true, false); + zero(true, false, false); + } + else if (operation == "fdim") + { + record(result, [&] { + return evaluate(input(1.0), input(2.0)); + }, false); + } + else if (operation == "copysign") + { + zero(false, false, false); + zero(false, true, true); + } + else if (operation == "hypot") + { + zero(false, true, false); + zero(true, true, false); + } + else if (operation == "atan2") + { + zero_value(false, 1.0, false); + zero_value(true, 1.0, true); + } + else if (operation == "pow") + { + zero_value(false, 3.0, false); + zero_value(true, 3.0, true); + } + else if (operation == "fmod" || operation == "remainder") + { + zero_value(false, 1.0, false); + zero_value(true, 1.0, true); + } + return result; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support ternary( + std::string_view operation, + Eval evaluate) + { + support result{}; + if (operation != "fma") + return result; + record(result, [&] { + return evaluate( + input_zero(false), input(1.0), + input_zero(false)); + }, false); + record(result, [&] { + return evaluate( + input_zero(true), input(1.0), + input_zero(true)); + }, true); + return result; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support parse(Parse evaluate) + { + support result{}; + record(result, [&] { return evaluate(std::string{"0"}); }, false); + record(result, [&] { return evaluate(std::string{"-0"}); }, true); + return result; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support format(Format evaluate) + { + support result{}; + const auto check = [&](bool negative) { + try + { + const mpfr::real parsed{evaluate(input_zero(negative))}; + result.record( + parsed == 0 && mpfr::sign_bit(parsed) == negative); + } + catch (...) + { + result.record(false); + } + }; + check(false); + check(true); + return result; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support unary_pair( + std::string_view operation, + Eval evaluate) + { + support result{}; + if (operation != "modf" && operation != "frexp") + return result; + for (const bool negative : {false, true}) + { + try + { + const auto [first, second] = evaluate(input_zero(negative)); + bool matches = matches_zero(Value(first), negative); + if (operation == "modf") + matches = matches && matches_zero(Value(second), negative); + result.record(matches); + } + catch (...) + { + result.record(false); + } + } + return result; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support binary_pair( + std::string_view operation, + Eval evaluate) + { + support result{}; + if (operation != "remquo") + return result; + for (const bool negative : {false, true}) + { + try + { + const auto [remainder, quotient] = evaluate( + input_zero(negative), input(1.0)); + (void)quotient; + result.record(matches_zero(Value(remainder), negative)); + } + catch (...) + { + result.record(false); + } + } + return result; + } +} + +#endif diff --git a/validation/accuracy/special_values.hpp b/validation/accuracy/special_values.hpp new file mode 100644 index 0000000..03d4907 --- /dev/null +++ b/validation/accuracy/special_values.hpp @@ -0,0 +1,576 @@ +#ifndef FLTX_TESTS_ACCURACY_SPECIAL_VALUES_INCLUDED +#define FLTX_TESTS_ACCURACY_SPECIAL_VALUES_INCLUDED + +#include "../support/implementations.hpp" +#include "../support/native_fp.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fltx::tests::accuracy::special_values +{ + struct support + { + bool applicable = false; + bool infinity = false; + bool nan = false; + + [[nodiscard]] std::string category() const + { + if (!applicable) + return "-"; + if (infinity && nan) + return "Both"; + if (infinity) + return "Inf"; + if (nan) + return "NaN"; + return "No"; + } + + }; + + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION bool same_value( + const mpfr::real& observed, + double expected) + { + if (native_fp::is_nan(expected)) + return mpfr::is_nan(observed); + if (native_fp::is_inf(expected)) + { + return mpfr::is_inf(observed) && + mpfr::sign_bit(observed) == native_fp::sign_bit(expected); + } + if (expected == 0.0) + { + return observed == 0 && + mpfr::sign_bit(observed) == native_fp::sign_bit(expected); + } + return static_cast(observed) == expected; + } + + template + [[nodiscard]] Value input(double value) + { + return implementations::value_traits::from_sample( + make_exact_sample(value)); + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION bool same_value( + const Value& observed, + double expected) + { + constexpr std::uint64_t sign_mask = UINT64_C(0x8000000000000000); + constexpr std::uint64_t magnitude_mask = ~sign_mask; + constexpr std::uint64_t infinity_bits = UINT64_C(0x7ff0000000000000); + const std::uint64_t expected_bits = native_fp::bits(expected); + const std::uint64_t expected_magnitude = expected_bits & magnitude_mask; + + if (expected_magnitude >= infinity_bits || expected_magnitude == 0) + { + const auto components = implementations::observe(observed); + const std::uint64_t head_bits = native_fp::bits(components[0]); + const std::uint64_t head_magnitude = head_bits & magnitude_mask; + + if (expected_magnitude > infinity_bits) + return head_magnitude > infinity_bits; + if (expected_magnitude == infinity_bits) + { + return head_magnitude == infinity_bits && + ((head_bits ^ expected_bits) & sign_mask) == 0; + } + + for (const double component : components) + { + if ((native_fp::bits(component) & magnitude_mask) != 0) + return false; + } + return ((head_bits ^ expected_bits) & sign_mask) == 0; + } + + return same_value( + implementations::value_traits::to_real(observed), + expected); + } + + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION std::optional unary_expected( + std::string_view operation, + double x) + { + // These operations return integers. Infinity and NaN therefore have + // no representable result category to propagate; any errno, exception, + // or sentinel contract belongs in API tests rather than this column. + if (operation == "lround" || operation == "llround" || + operation == "ilogb") + return std::nullopt; + if (operation == "abs" || operation == "fabs") + return std::fabs(x); + if (operation == "sqr") + return x * x; + if (operation == "recip") + return 1.0 / x; + if (operation == "floor") + return std::floor(x); + if (operation == "ceil") + return std::ceil(x); + if (operation == "trunc") + return std::trunc(x); + if (operation == "round") + return std::round(x); + if (operation == "roundeven") + return std::nearbyint(x); + if (operation == "round_decimals" || + operation == "round_significant") + return x; + if (operation == "ldexp" || operation == "scalbn" || + operation == "scalbln") + return std::ldexp(x, 17); + if (operation == "logb") + return std::logb(x); + if (operation == "sqrt") + return std::sqrt(x); + if (operation == "cbrt") + return std::cbrt(x); + if (operation == "sin") + return std::sin(x); + if (operation == "cos") + return std::cos(x); + if (operation == "tan") + return std::tan(x); + if (operation == "atan") + return std::atan(x); + if (operation == "asin") + return std::asin(x); + if (operation == "acos") + return std::acos(x); + if (operation == "exp") + return std::exp(x); + if (operation == "exp2") + return std::exp2(x); + if (operation == "expm1") + return std::expm1(x); + if (operation == "log") + return std::log(x); + if (operation == "log2") + return std::log2(x); + if (operation == "log10") + return std::log10(x); + if (operation == "log1p") + return std::log1p(x); + if (operation == "ipow") + return std::pow(x, 7); + if (operation == "sinh") + return std::sinh(x); + if (operation == "cosh") + return std::cosh(x); + if (operation == "tanh") + return std::tanh(x); + if (operation == "asinh") + return std::asinh(x); + if (operation == "acosh") + return std::acosh(x); + if (operation == "atanh") + return std::atanh(x); + if (operation == "erf") + return std::erf(x); + if (operation == "erfc") + return std::erfc(x); + if (operation == "lgamma") + return std::lgamma(x); + if (operation == "tgamma") + return std::tgamma(x); + return std::nullopt; + } + + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION std::optional binary_expected( + std::string_view operation, + double x, + double y) + { + if (operation == "add") + return x + y; + if (operation == "subtract") + return x - y; + if (operation == "multiply") + return x * y; + if (operation == "divide") + return x / y; + if (operation == "fmin") + return std::fmin(x, y); + if (operation == "fmax") + return std::fmax(x, y); + if (operation == "fdim") + return std::fdim(x, y); + if (operation == "copysign") + return std::copysign(x, y); + if (operation == "hypot") + return std::hypot(x, y); + if (operation == "atan2") + return std::atan2(x, y); + if (operation == "pow") + return std::pow(x, y); + if (operation == "fmod") + return std::fmod(x, y); + if (operation == "remainder") + return std::remainder(x, y); + return std::nullopt; + } + + [[nodiscard]] inline std::optional predicate_expected( + std::string_view operation, + double x, + double y) + { + const auto bits = [](double value) { + return std::bit_cast(value); + }; + const auto magnitude = [&](double value) { + return bits(value) & 0x7fffffffffffffffULL; + }; + const auto is_nan = [&](double value) { + return magnitude(value) > 0x7ff0000000000000ULL; + }; + const auto equal = [&](double lhs, double rhs) { + if (is_nan(lhs) || is_nan(rhs)) + return false; + return (magnitude(lhs) == 0 && magnitude(rhs) == 0) || + bits(lhs) == bits(rhs); + }; + const auto less = [&](double lhs, double rhs) { + if (is_nan(lhs) || is_nan(rhs) || equal(lhs, rhs)) + return false; + const bool lhs_negative = (bits(lhs) >> 63) != 0; + const bool rhs_negative = (bits(rhs) >> 63) != 0; + if (lhs_negative != rhs_negative) + return lhs_negative; + return lhs_negative + ? magnitude(lhs) > magnitude(rhs) + : magnitude(lhs) < magnitude(rhs); + }; + + // Derive IEEE comparison semantics from encodings so the oracle itself + // remains valid when this consumer translation unit uses fast-math. + if (operation == "equal") + return equal(x, y); + if (operation == "not_equal") + return !equal(x, y); + if (operation == "less") + return less(x, y); + if (operation == "less_equal") + return less(x, y) || equal(x, y); + if (operation == "greater") + return less(y, x); + if (operation == "greater_equal") + return less(y, x) || equal(x, y); + return std::nullopt; + } + + template + [[nodiscard]] std::optional at_value_precision( + std::optional expected) + { + if constexpr (implementations::value_traits::nominal_bits <= 24.0) + { + if (expected && native_fp::is_finite(*expected)) + *expected = static_cast(static_cast(*expected)); + } + return expected; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support unary( + std::string_view operation, + Eval evaluate) + { + const auto expected = [&](double value) { + return at_value_precision(unary_expected(operation, value)); + }; + if (!expected(1.0)) + return {}; + + bool infinity = true; + for (const double value : { + native_fp::positive_infinity(), + native_fp::negative_infinity() }) + { + try + { + infinity = infinity && + same_value(Value(evaluate(input(value))), + *expected(value)); + } + catch (...) + { + infinity = false; + } + } + + bool nan = true; + try + { + const double value = native_fp::quiet_nan(); + nan = same_value( + Value(evaluate(input(value))), + *expected(value)); + } + catch (...) + { + nan = false; + } + return {true, infinity, nan}; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support binary( + std::string_view operation, + Eval evaluate) + { + const auto expected = [&](double x, double y) { + return at_value_precision(binary_expected(operation, x, y)); + }; + if (!expected(1.0, 2.0)) + return {}; + + const double inf = native_fp::positive_infinity(); + const double nan_value = native_fp::quiet_nan(); + const std::pair infinity_cases[] = { + {inf, 1.0}, {-inf, 1.0}, {1.0, inf}, + {1.0, -inf}, {inf, inf}, {inf, -inf} + }; + const std::pair nan_cases[] = { + {nan_value, 1.0}, {1.0, nan_value}, {nan_value, nan_value} + }; + + const auto passes = [&](const auto& cases) { + for (const auto [x, y] : cases) + { + try + { + if (!same_value( + Value(evaluate(input(x), input(y))), + *expected(x, y))) + return false; + } + catch (...) + { + return false; + } + } + return true; + }; + return {true, passes(infinity_cases), passes(nan_cases)}; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support predicate( + std::string_view operation, + Eval evaluate) + { + if (!predicate_expected(operation, 1.0, 2.0)) + return {}; + + const auto matches = [&](double x, double y) { + try + { + return static_cast( + evaluate(input(x), input(y))) == + *predicate_expected(operation, x, y); + } + catch (...) + { + return false; + } + }; + + const double inf = native_fp::positive_infinity(); + const double nan_value = native_fp::quiet_nan(); + const std::pair infinity_cases[] = { + {inf, inf}, {-inf, -inf}, {inf, -inf}, {-inf, inf}, + {inf, 1.0}, {1.0, inf}, {-inf, 1.0}, {1.0, -inf} + }; + const std::pair nan_cases[] = { + {nan_value, nan_value}, {nan_value, 1.0}, {1.0, nan_value}, + {nan_value, inf}, {inf, nan_value} + }; + const auto passes = [&](const auto& cases) { + for (const auto [x, y] : cases) + { + if (!matches(x, y)) + return false; + } + return true; + }; + return {true, passes(infinity_cases), passes(nan_cases)}; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support ternary( + std::string_view operation, + Eval evaluate) + { + if (operation != "fma") + return {}; + + const double inf = native_fp::positive_infinity(); + const double nan_value = native_fp::quiet_nan(); + const auto matches = [&](double x, double y, double z) { + try + { + return same_value( + Value(evaluate( + input(x), input(y), input(z))), + std::fma(x, y, z)); + } + catch (...) + { + return false; + } + }; + return { + true, + matches(inf, 1.0, 0.0) && + matches(-inf, 1.0, 0.0) && + matches(inf, 0.0, 1.0) && + matches(1.0, 1.0, inf), + matches(nan_value, 1.0, 0.0) && + matches(1.0, nan_value, 0.0) && + matches(1.0, 1.0, nan_value) + }; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support parse(Parse evaluate) + { + const auto matches = [&](const char* text, double expected) { + try + { + return same_value(Value(evaluate(std::string{text})), expected); + } + catch (...) + { + return false; + } + }; + + const double inf = native_fp::positive_infinity(); + return { + true, + matches("inf", inf) && matches("-inf", -inf), + matches("nan", native_fp::quiet_nan()) + }; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support format(Format evaluate) + { + const auto matches = [&](double input_value) { + try + { + const std::string text = + evaluate(input(input_value)); + return same_value(mpfr::real{text}, input_value); + } + catch (...) + { + return false; + } + }; + + const double inf = native_fp::positive_infinity(); + return { + true, + matches(inf) && matches(-inf), + matches(native_fp::quiet_nan()) + }; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support unary_pair( + std::string_view operation, + Eval evaluate) + { + if (operation != "modf" && operation != "frexp") + return {}; + + const auto matches = [&](double input_value) { + try + { + const auto [first, second] = evaluate(input(input_value)); + if (operation == "modf") + { + if (native_fp::is_inf(input_value)) + { + return same_value( + Value(first), + std::copysign(0.0, input_value)) && + same_value(Value(second), input_value); + } + return same_value(Value(first), input_value) && + same_value(Value(second), input_value); + } + + int exponent = 0; + const double fraction = std::frexp(input_value, &exponent); + return same_value(Value(first), fraction) && + (!native_fp::is_finite(input_value) || + same_value(Value(second), static_cast(exponent))); + } + catch (...) + { + return false; + } + }; + const double inf = native_fp::positive_infinity(); + const double nan_value = native_fp::quiet_nan(); + return { + true, + matches(inf) && matches(-inf), + matches(nan_value) + }; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION support binary_pair( + std::string_view operation, + Eval evaluate) + { + if (operation != "remquo") + return {}; + + const auto matches = [&](double x, double y) { + try + { + const auto [remainder, quotient] = + evaluate(input(x), input(y)); + int expected_quotient = 0; + const double expected_remainder = + std::remquo(x, y, &expected_quotient); + return same_value(Value(remainder), expected_remainder) && + (native_fp::is_nan(expected_remainder) || + same_value( + Value(quotient), + static_cast(expected_quotient))); + } + catch (...) + { + return false; + } + }; + const double inf = native_fp::positive_infinity(); + const double nan_value = native_fp::quiet_nan(); + return { + true, + matches(inf, 1.0) && matches(1.0, inf) && matches(inf, inf), + matches(nan_value, 1.0) && matches(1.0, nan_value) + }; + } +} + +#endif diff --git a/validation/accuracy/trig_domains.hpp b/validation/accuracy/trig_domains.hpp new file mode 100644 index 0000000..6c60713 --- /dev/null +++ b/validation/accuracy/trig_domains.hpp @@ -0,0 +1,169 @@ +#ifndef FLTX_TESTS_ACCURACY_TRIG_DOMAINS_INCLUDED +#define FLTX_TESTS_ACCURACY_TRIG_DOMAINS_INCLUDED + +#include "../support/domains.hpp" +#include "../support/mpfr.hpp" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fltx::tests::accuracy::trig_domains +{ + template + [[nodiscard]] domains::domain quadrant_boundaries( + std::size_t count, + int max_multiplier_exponent = 159, + std::uint64_t seed = default_seed ^ 0x37u) + { + using mpfr::real; + using boost::multiprecision::abs; + using boost::multiprecision::floor; + using boost::multiprecision::ldexp; + + static const real half_pi = + boost::math::constants::pi() / 2; + static constexpr std::array f128_offset_bits{ + 64, 82, 100 + }; + static constexpr std::array f256_offset_bits{ + 64, 118, 172, 204 + }; + + domains::domain out{ "quadrant_boundaries", seed, {} }; + out.values.reserve(count + 219); + + const auto perturbation = [&](const real& anchor, int offset_bits) { + const real scale = anchor == 0 ? half_pi : abs(anchor); + return ldexp(scale, -offset_bits); + }; + const auto converted = [&](const real& value, std::string label) { + return mpfr::sample_from_real(value, std::move(label)); + }; + const auto append_neighborhood = [&]( + const real& multiplier, + const std::string& label) + { + const real anchor = multiplier * half_pi; + constexpr int deepest_offset = + std::is_same_v + ? f128_offset_bits.back() + : f256_offset_bits.back(); + const real delta = perturbation(anchor, deepest_offset); + sample below = converted(anchor - delta, "below " + label); + sample nearest = converted(anchor, "nearest " + label); + sample above = converted(anchor + delta, "above " + label); + if (!( + mpfr::input_real(below) < + mpfr::input_real(nearest) && + mpfr::input_real(nearest) < + mpfr::input_real(above) + )) + { + throw std::logic_error( + "quadrant-boundary neighborhood collapsed"); + } + out.values.push_back(std::move(below)); + out.values.push_back(std::move(nearest)); + out.values.push_back(std::move(above)); + }; + + for (int multiplier = -16; multiplier <= 16; ++multiplier) + { + append_neighborhood( + real{ multiplier }, + std::to_string(multiplier) + " * pi/2"); + } + + static constexpr std::array large_exponents{ + 20, 53, 56, 100, 159 + }; + static constexpr std::array multiplier_offsets{ + -3, -1, 1, 3 + }; + for (const int exponent : large_exponents) + { + if (exponent > max_multiplier_exponent) + continue; + for (const int offset : multiplier_offsets) + { + const real multiplier = + ldexp(real{ 1 }, exponent) + offset; + const std::string label = + "(2^" + std::to_string(exponent) + + (offset < 0 ? " - " : " + ") + + std::to_string(offset < 0 ? -offset : offset) + + ") * pi/2"; + append_neighborhood(multiplier, label); + append_neighborhood(-multiplier, "-" + label); + } + } + + random_bits rng(seed); + for (std::size_t index = 0; index < count; ++index) + { + const int exponent = static_cast( + rng.next() % + static_cast(max_multiplier_exponent + 1)); + const int coefficient_bits = std::min(exponent + 1, 32); + const std::uint64_t mask = + (std::uint64_t{ 1 } << coefficient_bits) - 1; + const std::uint64_t coefficient = + (rng.next() & mask) | + (std::uint64_t{ 1 } << (coefficient_bits - 1)); + const int shift = exponent - (coefficient_bits - 1); + real multiplier = ldexp(real{ coefficient }, shift); + + // Make the quotient class explicit. This exercises all four + // quadrants even when the large part is highly divisible by four. + const unsigned quadrant = static_cast(index % 4); + multiplier = floor(multiplier / 4) * 4 + quadrant; + if (multiplier == 0) + multiplier = 4 + quadrant; + if (((index / 4) & 1u) != 0) + multiplier = -multiplier; + + int offset_bits; + if constexpr (std::is_same_v) + { + offset_bits = + f128_offset_bits[index % f128_offset_bits.size()]; + } + else + { + offset_bits = + f256_offset_bits[index % f256_offset_bits.size()]; + } + + const real anchor = multiplier * half_pi; + const int relation = static_cast(index % 3) - 1; + const real value = ( + relation == 0 + ? anchor + : anchor + relation * perturbation(anchor, offset_bits) + ); + const std::string relation_label = + relation < 0 ? "below " : + relation > 0 ? "above " : "nearest "; + out.values.push_back(converted( + value, + relation_label + + "random k*pi/2, exponent " + + std::to_string(exponent) + + ", quadrant " + + std::to_string(quadrant) + + ", offset bits " + + std::to_string(offset_bits))); + } + return out; + } +} + +#endif diff --git a/validation/benchmarks/CMakeLists.txt b/validation/benchmarks/CMakeLists.txt new file mode 100644 index 0000000..0ebb2f7 --- /dev/null +++ b/validation/benchmarks/CMakeLists.txt @@ -0,0 +1,12 @@ +add_subdirectory(compile) +add_subdirectory(binary_size) + +if(BUILD_TESTING) + add_test( + NAME fltx.benchmarks.compile.tools + COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/compile/test_measure.py" + ) + set_tests_properties(fltx.benchmarks.compile.tools PROPERTIES + LABELS "fltx;metrics;compile" + ) +endif() diff --git a/validation/benchmarks/binary_size/CMakeLists.txt b/validation/benchmarks/binary_size/CMakeLists.txt new file mode 100644 index 0000000..df91e0c --- /dev/null +++ b/validation/benchmarks/binary_size/CMakeLists.txt @@ -0,0 +1,63 @@ +function(fltx_add_size_probe target precision case_name repeats) + add_executable(${target} EXCLUDE_FROM_ALL probe.cpp) + target_link_libraries(${target} PRIVATE fltx::fltx) + target_compile_features(${target} PRIVATE cxx_std_20) + target_compile_definitions(${target} PRIVATE + FLTX_BENCHMARK_SIZE_PRECISION=${precision} + FLTX_BENCHMARK_SIZE_CASE=${case_name} + FLTX_BENCHMARK_SIZE_REPEATS=${repeats} + ) + + if(MSVC) + target_compile_options(${target} PRIVATE $<$:/Gy> $<$:/Gw>) + target_link_options(${target} PRIVATE $<$:/OPT:REF> $<$:/OPT:ICF>) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options(${target} PRIVATE + $<$:-ffunction-sections> + $<$:-fdata-sections> + ) + if(NOT EMSCRIPTEN) + target_link_options(${target} PRIVATE $<$:-Wl,--gc-sections>) + endif() + endif() +endfunction() + +fltx_add_size_probe(fltx_size_f128_baseline 128 0 0) +fltx_add_size_probe(fltx_size_f128_arithmetic 128 1 32) +fltx_add_size_probe(fltx_size_f128_math 128 2 16) +fltx_add_size_probe(fltx_size_f128_io 128 3 8) +fltx_add_size_probe(fltx_size_f128_random 128 4 16) +fltx_add_size_probe(fltx_size_f256_baseline 256 0 0) +fltx_add_size_probe(fltx_size_f256_arithmetic 256 1 32) +fltx_add_size_probe(fltx_size_f256_math 256 2 16) +fltx_add_size_probe(fltx_size_f256_io 256 3 8) +fltx_add_size_probe(fltx_size_f256_random 256 4 16) + +set(FLTX_BENCHMARK_SIZE_TARGETS + fltx_size_f128_baseline + fltx_size_f128_arithmetic + fltx_size_f128_math + fltx_size_f128_io + fltx_size_f128_random + fltx_size_f256_baseline + fltx_size_f256_arithmetic + fltx_size_f256_math + fltx_size_f256_io + fltx_size_f256_random +) + +set(FLTX_BENCHMARK_SIZE_REPORT_ARGS) +foreach(target IN LISTS FLTX_BENCHMARK_SIZE_TARGETS) + list(APPEND FLTX_BENCHMARK_SIZE_REPORT_ARGS --file "${target}=$") +endforeach() + +add_custom_target(fltx_binary_size + COMMAND "${Python3_EXECUTABLE}" + "${CMAKE_CURRENT_SOURCE_DIR}/report.py" + --output "${CMAKE_CURRENT_BINARY_DIR}/binary_size.csv" + ${FLTX_BENCHMARK_SIZE_REPORT_ARGS} + DEPENDS ${FLTX_BENCHMARK_SIZE_TARGETS} + USES_TERMINAL + VERBATIM + COMMENT "Reporting fltx binary-size probes" +) diff --git a/validation/benchmarks/binary_size/probe.cpp b/validation/benchmarks/binary_size/probe.cpp new file mode 100644 index 0000000..efe24ff --- /dev/null +++ b/validation/benchmarks/binary_size/probe.cpp @@ -0,0 +1,78 @@ +#include + +#include +#include + +#if FLTX_BENCHMARK_SIZE_PRECISION == 128 +using value_type = bl::f128; +#elif FLTX_BENCHMARK_SIZE_PRECISION == 256 +using value_type = bl::f256; +#else +#error "FLTX_BENCHMARK_SIZE_PRECISION must be 128 or 256" +#endif + +#if defined(_MSC_VER) +#define FLTX_BENCHMARK_NOINLINE __declspec(noinline) +#elif defined(__GNUC__) || defined(__clang__) +#define FLTX_BENCHMARK_NOINLINE __attribute__((noinline)) +#else +#define FLTX_BENCHMARK_NOINLINE +#endif + +template +FLTX_BENCHMARK_NOINLINE value_type arithmetic(value_type x) +{ + const value_type a{1.0 + (Index % 7) * 0.001}; + return (x * a + value_type{0.125}) / (a + value_type{0.5}); +} + +template +FLTX_BENCHMARK_NOINLINE value_type math(value_type x) +{ + const value_type a{0.001 * (Index + 1)}; + return bl::sin(x + a) + bl::exp(a) + bl::sqrt(x * x + value_type{1.0}); +} + +template +FLTX_BENCHMARK_NOINLINE value_type io(value_type x) +{ + std::array buffer{}; + const auto result = bl::to_chars(buffer.data(), buffer.data() + buffer.size(), x); + if (result.ec != std::errc{}) + return x + value_type{Index * 0.001}; + return bl::parse( + std::string_view{buffer.data(), static_cast(result.ptr - buffer.data())}); +} + +template +FLTX_BENCHMARK_NOINLINE value_type random(value_type x) +{ + bl::mt19937_64 engine{0x1020304050607080ull + static_cast(Index)}; + bl::uniform_real_distribution distribution{value_type{0.0}, value_type{1.0}}; + return x + distribution(engine); +} + +template +value_type repeat(value_type x) +{ + if constexpr (Index == 0) + return x; + else if constexpr (FLTX_BENCHMARK_SIZE_CASE == 1) + return repeat(arithmetic(x)); + else if constexpr (FLTX_BENCHMARK_SIZE_CASE == 2) + return repeat(math(x)); + else if constexpr (FLTX_BENCHMARK_SIZE_CASE == 3) + return repeat(io(x)); + else + return repeat(random(x)); +} + +int main(int argc, char**) +{ + value_type value{1.25 + argc * 0.001}; +#if FLTX_BENCHMARK_SIZE_CASE != 0 + value = repeat(value); +#endif + volatile double sink = static_cast(value); + return sink == 0.0; +} diff --git a/validation/benchmarks/binary_size/report.py b/validation/benchmarks/binary_size/report.py new file mode 100644 index 0000000..f371b01 --- /dev/null +++ b/validation/benchmarks/binary_size/report.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +"""Write deterministic executable-size deltas for fltx probes.""" + +from __future__ import annotations + +import argparse +import csv +from pathlib import Path + + +def measured_path(path: Path) -> Path: + wasm = path.with_suffix(".wasm") + return wasm if wasm.exists() else path + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("--file", action="append", default=[], metavar="NAME=PATH") + parser.add_argument("--output", required=True, type=Path) + args = parser.parse_args() + + rows = [] + sizes: dict[str, int] = {} + for item in args.file: + name, raw_path = item.split("=", 1) + path = measured_path(Path(raw_path)) + if not path.exists(): + raise FileNotFoundError(path) + sizes[name] = path.stat().st_size + + for name, size in sizes.items(): + precision = "f128" if "_f128_" in name else "f256" + baseline = sizes[f"fltx_size_{precision}_baseline"] + rows.append( + { + "precision": precision, + "case": name.removeprefix(f"fltx_size_{precision}_"), + "bytes": size, + "delta_bytes": size - baseline, + } + ) + + args.output.parent.mkdir(parents=True, exist_ok=True) + with args.output.open("w", newline="", encoding="utf-8") as handle: + writer = csv.DictWriter(handle, fieldnames=rows[0].keys()) + writer.writeheader() + writer.writerows(rows) + + for row in rows: + print( + f"{row['precision']} {row['case']:<12} " + f"{row['bytes']:>9} bytes ({row['delta_bytes']:+d})" + ) + print(f"Wrote {args.output}") + + +if __name__ == "__main__": + main() diff --git a/validation/benchmarks/compile/CMakeLists.txt b/validation/benchmarks/compile/CMakeLists.txt new file mode 100644 index 0000000..71ce5fb --- /dev/null +++ b/validation/benchmarks/compile/CMakeLists.txt @@ -0,0 +1,57 @@ +set(FLTX_BENCHMARK_COMPILE_GROWTH_COUNTS "25;100;200" CACHE STRING + "Repeated-function counts used to measure expression compile growth.") +set(FLTX_BENCHMARK_EXPRESSION_SHAPE_COUNT 64 CACHE STRING + "Repeated functions generated for each detailed f256 expression shape.") +set(FLTX_BENCHMARK_COMPILE_REPEATS 3 CACHE STRING + "Number of compiler runs used to find each median compile time.") +if(MSVC) + set(FLTX_BENCHMARK_CXX20_MAX_COMPILE_REGRESSION_PERCENT 10 CACHE STRING + "Maximum permitted optimized f256-expression compile regression versus C++23.") +else() + set(FLTX_BENCHMARK_CXX20_MAX_COMPILE_REGRESSION_PERCENT 15 CACHE STRING + "Maximum permitted optimized f256-expression compile regression versus C++23.") +endif() +set(FLTX_BENCHMARK_CXX20_MAX_OBJECT_GROWTH_PERCENT 5 CACHE STRING + "Maximum permitted optimized f256-expression object growth versus C++23.") + +add_custom_target(fltx_compile_benchmarks + COMMAND "${Python3_EXECUTABLE}" + "${CMAKE_CURRENT_SOURCE_DIR}/measure.py" + --compiler "${CMAKE_CXX_COMPILER}" + --compiler-id "${CMAKE_CXX_COMPILER_ID}" + --include "${PROJECT_SOURCE_DIR}/include" + --work "${CMAKE_CURRENT_BINARY_DIR}/summary_work" + --output "${CMAKE_CURRENT_BINARY_DIR}/compile_summary.csv" + --scope summary + --growth-counts ${FLTX_BENCHMARK_COMPILE_GROWTH_COUNTS} + --repeats "${FLTX_BENCHMARK_COMPILE_REPEATS}" + --standards 20 23 + --max-compile-regression-percent + "${FLTX_BENCHMARK_CXX20_MAX_COMPILE_REGRESSION_PERCENT}" + --max-object-growth-percent + "${FLTX_BENCHMARK_CXX20_MAX_OBJECT_GROWTH_PERCENT}" + USES_TERMINAL + VERBATIM + COMMENT "Measuring fltx public-header and f256 expression compile times" +) + +add_custom_target(fltx_expression_compile_matrix + COMMAND "${Python3_EXECUTABLE}" + "${CMAKE_CURRENT_SOURCE_DIR}/measure.py" + --compiler "${CMAKE_CXX_COMPILER}" + --compiler-id "${CMAKE_CXX_COMPILER_ID}" + --include "${PROJECT_SOURCE_DIR}/include" + --work "${CMAKE_CURRENT_BINARY_DIR}/expression_work" + --output "${CMAKE_CURRENT_BINARY_DIR}/expression_matrix.csv" + --scope expressions + --shape-count "${FLTX_BENCHMARK_EXPRESSION_SHAPE_COUNT}" + --repeats "${FLTX_BENCHMARK_COMPILE_REPEATS}" + --standards 20 + USES_TERMINAL + VERBATIM + COMMENT "Measuring 49 f256 expression shapes plus the aggregate fused-shape case" +) + +add_custom_target(fltx_compile_benchmarks_full + DEPENDS fltx_compile_benchmarks fltx_expression_compile_matrix +) diff --git a/validation/benchmarks/compile/expression_cases.py b/validation/benchmarks/compile/expression_cases.py new file mode 100644 index 0000000..7359aea --- /dev/null +++ b/validation/benchmarks/compile/expression_cases.py @@ -0,0 +1,83 @@ +"""Declarative f256 expression-shape manifest used by compile benchmarks.""" + +from __future__ import annotations + + +EXPRESSION_CASES: dict[str, str] = { + "pass": "a", + "add": "a + b", + "sub": "a - b", + "mul": "a * b", + "div": "a / b", + "mul_add": "a * b + c", + "mul_sub": "a * b - c", + "value_sub_mul": "c - a * b", + "mul_add_mul": "a * b + c * d", + "mul_sub_mul": "a * b - c * d", + "mul_add_mul_add": "a * b + c * d + e", + "mul_add_mul_sub": "a * b + c * d - e", + "mul_sub_mul_add": "a * b - c * d + e", + "mul_sub_mul_sub": "a * b - c * d - e", + "mul_add_add": "a * b + c + d", + "mul_add_sub": "a * b + c - d", + "mul_sub_add": "a * b - c + d", + "mul_sub_sub": "a * b - c - d", + "three_products": "a * b + c * d + e * f", + "four_products": "a * b + c * d + e * f + g * h", + "add_mul_double": "a + b * s", + "sub_mul_double": "a - b * s", + "mul_double_sub": "a * s - b", + "mul_double_add_mul_double": "a * s + b * t", + "mul_double_add_mul_double_add": "a * s + b * t + c", + "mul_add_div": "(a * b + c) / d", + "mul_sub_div": "(a * b - c) / d", + "value_sub_mul_div": "(c - a * b) / d", + "mul_add_mul_div": "(a * b + c * d) / e", + "mul_sub_mul_div": "(a * b - c * d) / e", + "add_add_sub_div": "(a + b - c) / d", + "add_sub_sub_div": "(a - b - c) / d", + "add_mul_double_div": "(a + b * s) / d", + "sub_mul_double_div": "(a - b * s) / d", + "mul_double_sub_div": "(a * s - b) / d", + "div_add_double": "a / (b + s)", + "div_double_sub": "a / (s - b)", + "mul_add_div_add_double": "(a * b + c) / (d + s)", + "mul_sub_div_add_double": "(a * b - c) / (d + s)", + "value_sub_mul_div_add_double": "(c - a * b) / (d + s)", + "mul_add_mul_div_add_double": "(a * b + c * d) / (e + s)", + "mul_sub_mul_div_add_double": "(a * b - c * d) / (e + s)", + "add_add_add_div_add_double": "(a + b + c) / (d + s)", + "add_sub_add_div_add_double": "(a - b + c) / (d + s)", + "add_add_sub_div_add_double": "(a + b - c) / (d + s)", + "add_sub_sub_div_add_double": "(a - b - c) / (d + s)", + "add_mul_double_div_add_double": "(a + b * s) / (d + t)", + "sub_mul_double_div_add_double": "(a - b * s) / (d + t)", + "mul_double_sub_div_add_double": "(a * s - b) / (d + t)", +} + +EXPRESSION_STRESS_CASES = (*EXPRESSION_CASES, "all_supported_fused_kernels") + + +def validate_manifest() -> None: + if len(EXPRESSION_CASES) != 49: + raise ValueError( + f"expected 49 individual f256 expression shapes, found {len(EXPRESSION_CASES)}" + ) + if len(EXPRESSION_STRESS_CASES) != 50: + raise ValueError("the expression benchmark must define 50 stress cases") + for case_id, expression in EXPRESSION_CASES.items(): + if not case_id.isidentifier() or not expression.strip(): + raise ValueError(f"invalid expression case {case_id!r}") + + +def expression_for(case_id: str, index: int = 0) -> str: + if case_id == "all_supported_fused_kernels": + expressions = tuple(EXPRESSION_CASES.values()) + return expressions[index % len(expressions)] + try: + return EXPRESSION_CASES[case_id] + except KeyError as error: + raise ValueError(f"unknown f256 expression case {case_id!r}") from error + + +validate_manifest() diff --git a/validation/benchmarks/compile/measure.py b/validation/benchmarks/compile/measure.py new file mode 100644 index 0000000..23a31ee --- /dev/null +++ b/validation/benchmarks/compile/measure.py @@ -0,0 +1,271 @@ +#!/usr/bin/env python3 +"""Repeatable public-header and f256 expression compile telemetry.""" + +from __future__ import annotations + +import argparse +import csv +import shutil +import statistics +import subprocess +import time +from dataclasses import dataclass +from pathlib import Path + +from expression_cases import EXPRESSION_STRESS_CASES, expression_for + + +INCLUDE_HEADERS = ( + "fltx/f128.h", + "fltx/f256.h", + "fltx/f128_math.h", + "fltx/f256_math.h", + "fltx/math.h", + "fltx.h", +) + + +@dataclass(frozen=True) +class Probe: + category: str + case: str + style: str = "none" + count: int = 0 + + +def probes_for(scope: str, growth_counts: list[int], shape_count: int) -> list[Probe]: + probes: list[Probe] = [] + if scope in {"summary", "all"}: + probes.append(Probe("include", "empty")) + probes.extend(Probe("include", header) for header in INCLUDE_HEADERS) + for count in growth_counts: + probes.append( + Probe("expression-growth", "all_supported_fused_kernels", "eager", count) + ) + probes.append( + Probe( + "expression-growth", + "all_supported_fused_kernels", + "expression", + count, + ) + ) + if scope in {"expressions", "all"}: + for case_id in EXPRESSION_STRESS_CASES: + probes.append(Probe("expression-shape", case_id, "eager", shape_count)) + probes.append( + Probe("expression-shape", case_id, "expression", shape_count) + ) + return probes + + +def source_for(probe: Probe) -> str: + if probe.category == "include": + if probe.case == "empty": + return "int main() { return 0; }\n" + return f"#include <{probe.case}>\nint main() {{ return 0; }}\n" + + value_type = "bl::f256" if probe.style == "expression" else "bl::f256_s" + safe_case = probe.case.replace("-", "_") + lines = [ + "#include ", + "#if defined(_MSC_VER)", + "#define FLTX_COMPILE_NOINLINE __declspec(noinline)", + "#elif defined(__GNUC__) || defined(__clang__)", + "#define FLTX_COMPILE_NOINLINE __attribute__((noinline))", + "#else", + "#define FLTX_COMPILE_NOINLINE", + "#endif", + "namespace fltx_compile_probe {", + ] + for index in range(probe.count): + expression = expression_for(probe.case, index) + lines.append( + f"FLTX_COMPILE_NOINLINE {value_type} {probe.style}_{safe_case}_{index}(" + f"{value_type} a, {value_type} b, {value_type} c, {value_type} d, " + f"{value_type} e, {value_type} f, {value_type} g, {value_type} h, " + f"double s, double t) {{ return {expression}; }}" + ) + lines.append("}") + return "\n".join(lines) + "\n" + + +def compiler_command( + compiler: Path, + compiler_id: str, + standard: int, + include: Path, + source: Path, + output: Path, + optimized: bool, +) -> list[str]: + if compiler_id == "MSVC": + command = [ + str(compiler), + "/nologo", + "/std:c++20" if standard == 20 else "/std:c++latest", + "/permissive-", + "/Zc:__cplusplus", + "/EHsc", + "/bigobj", + f"/I{include}", + "/c", + str(source), + f"/Fo{output}", + ] + command += ["/O2", "/Ob2", "/DNDEBUG"] if optimized else ["/Od", "/Ob0"] + return command + + command = [ + str(compiler), + f"-std=c++{standard}", + "-pedantic-errors", + "-I", + str(include), + "-c", + str(source), + "-o", + str(output), + ] + command += ["-O2", "-DNDEBUG"] if optimized else ["-O0"] + return command + + +def measure(command: list[str], repeats: int) -> tuple[float, list[float]]: + warmup = subprocess.run(command, capture_output=True, text=True) + if warmup.returncode: + raise RuntimeError( + f"compiler exited with {warmup.returncode} during warmup\n" + f"{' '.join(command)}\n{warmup.stdout}\n{warmup.stderr}" + ) + + samples: list[float] = [] + for _ in range(repeats): + start = time.perf_counter() + result = subprocess.run(command, capture_output=True, text=True) + elapsed = (time.perf_counter() - start) * 1000.0 + if result.returncode: + raise RuntimeError( + f"compiler exited with {result.returncode}\n" + f"{' '.join(command)}\n{result.stdout}\n{result.stderr}" + ) + samples.append(elapsed) + return statistics.median(samples), samples + + +def safe_stem(probe: Probe) -> str: + raw = f"{probe.category}_{probe.case}_{probe.style}_{probe.count}" + return "".join(character if character.isalnum() else "_" for character in raw) + + +def enforce_cxx20_gate(rows: list[dict[str, object]], args: argparse.Namespace) -> None: + if args.scope not in {"summary", "all"} or not {20, 23}.issubset(args.standards): + return + + largest = max(args.growth_counts) + selected = { + int(row["standard"]): row + for row in rows + if row["category"] == "expression-growth" + and row["style"] == "expression" + and row["functions"] == largest + and row["mode"] == "optimized" + } + cxx20 = selected[20] + cxx23 = selected[23] + compile_regression = ( + float(cxx20["median_ms"]) / float(cxx23["median_ms"]) - 1.0 + ) * 100.0 + object_growth = ( + int(cxx20["object_bytes"]) / int(cxx23["object_bytes"]) - 1.0 + ) * 100.0 + print( + f"C++20 optimized expression delta at {largest} functions: " + f"compile={compile_regression:+.2f}% object={object_growth:+.2f}%", + flush=True, + ) + if compile_regression > args.max_compile_regression_percent: + raise RuntimeError( + f"C++20 optimized expression compile regression {compile_regression:.2f}% " + f"exceeds {args.max_compile_regression_percent:.2f}%" + ) + if object_growth > args.max_object_growth_percent: + raise RuntimeError( + f"C++20 optimized expression object growth {object_growth:.2f}% " + f"exceeds {args.max_object_growth_percent:.2f}%" + ) + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--compiler", type=Path, required=True) + parser.add_argument("--compiler-id", required=True) + parser.add_argument("--include", type=Path, required=True) + parser.add_argument("--work", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--scope", choices=("summary", "expressions", "all"), default="summary") + parser.add_argument("--growth-counts", type=int, nargs="+", default=[25, 100, 200]) + parser.add_argument("--shape-count", type=int, default=64) + parser.add_argument("--repeats", type=int, default=3) + parser.add_argument("--standards", type=int, nargs="+", default=[20, 23]) + parser.add_argument("--max-compile-regression-percent", type=float, default=15.0) + parser.add_argument("--max-object-growth-percent", type=float, default=5.0) + args = parser.parse_args() + + if set(args.standards) - {20, 23}: + parser.error("--standards accepts only 20 and 23") + if args.repeats < 1 or args.shape_count < 1 or any(count < 1 for count in args.growth_counts): + parser.error("repeat and function counts must be positive") + + if args.work.exists(): + shutil.rmtree(args.work) + args.work.mkdir(parents=True) + args.output.parent.mkdir(parents=True, exist_ok=True) + + rows: list[dict[str, object]] = [] + for probe in probes_for(args.scope, args.growth_counts, args.shape_count): + stem = safe_stem(probe) + source = args.work / f"{stem}.cpp" + source.write_text(source_for(probe), encoding="utf-8", newline="\n") + for standard in args.standards: + for mode in ("unoptimized", "optimized"): + output = args.work / f"{stem}_cxx{standard}_{mode}.obj" + command = compiler_command( + args.compiler, + args.compiler_id, + standard, + args.include, + source, + output, + mode == "optimized", + ) + median_ms, samples = measure(command, args.repeats) + row: dict[str, object] = { + "category": probe.category, + "case": probe.case, + "style": probe.style, + "standard": standard, + "mode": mode, + "functions": probe.count, + "median_ms": f"{median_ms:.3f}", + "samples_ms": "|".join(f"{sample:.3f}" for sample in samples), + "object_bytes": output.stat().st_size, + } + rows.append(row) + print( + f"{probe.category:<18} {probe.case:<38} {probe.style:<10} " + f"C++{standard:<2} {mode:<11} {median_ms:9.1f} ms " + f"{output.stat().st_size:9d} bytes", + flush=True, + ) + + with args.output.open("w", newline="", encoding="utf-8") as handle: + writer = csv.DictWriter(handle, fieldnames=rows[0].keys()) + writer.writeheader() + writer.writerows(rows) + print(f"Wrote {args.output}", flush=True) + enforce_cxx20_gate(rows, args) + + +if __name__ == "__main__": + main() diff --git a/validation/benchmarks/compile/test_measure.py b/validation/benchmarks/compile/test_measure.py new file mode 100644 index 0000000..5c89635 --- /dev/null +++ b/validation/benchmarks/compile/test_measure.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +"""Unit tests for the compile-probe manifest and source generator.""" + +from __future__ import annotations + +import unittest + +from expression_cases import EXPRESSION_CASES, EXPRESSION_STRESS_CASES, expression_for +from measure import INCLUDE_HEADERS, Probe, probes_for, source_for + + +class CompileProbeTests(unittest.TestCase): + def test_expression_manifest_defines_the_complete_shape_matrix(self) -> None: + self.assertEqual(len(EXPRESSION_CASES), 49) + self.assertEqual(len(set(EXPRESSION_CASES.values())), 49) + self.assertEqual(len(EXPRESSION_STRESS_CASES), 50) + self.assertEqual(expression_for("mul_add"), "a * b + c") + self.assertEqual( + expression_for("all_supported_fused_kernels", 49), + expression_for("all_supported_fused_kernels", 0), + ) + + def test_summary_and_expression_scopes_are_separate(self) -> None: + summary = probes_for("summary", [25, 100], 64) + matrix = probes_for("expressions", [25, 100], 64) + self.assertEqual(sum(probe.category == "include" for probe in summary), len(INCLUDE_HEADERS) + 1) + self.assertEqual(sum(probe.category == "expression-growth" for probe in summary), 4) + self.assertEqual(len(matrix), len(EXPRESSION_STRESS_CASES) * 2) + self.assertTrue(all(probe.category == "expression-shape" for probe in matrix)) + + def test_generated_sources_distinguish_eager_and_expression_types(self) -> None: + eager = source_for(Probe("expression-shape", "mul_add", "eager", 2)) + expression = source_for(Probe("expression-shape", "mul_add", "expression", 2)) + self.assertIn("bl::f256_s eager_mul_add_0", eager) + self.assertIn("bl::f256 expression_mul_add_0", expression) + self.assertEqual(eager.count("return a * b + c;"), 2) + self.assertEqual(expression.count("return a * b + c;"), 2) + + +if __name__ == "__main__": + unittest.main() diff --git a/validation/benchmarks/runtime/integer_observer.hpp b/validation/benchmarks/runtime/integer_observer.hpp new file mode 100644 index 0000000..20c6c64 --- /dev/null +++ b/validation/benchmarks/runtime/integer_observer.hpp @@ -0,0 +1,37 @@ +#ifndef FLTX_TESTS_BENCHMARK_INTEGER_OBSERVER_INCLUDED +#define FLTX_TESTS_BENCHMARK_INTEGER_OBSERVER_INCLUDED + +#include +#include +#include + +namespace fltx::tests::benchmark +{ + class integer_observer + { + public: + void add(const std::array& components) noexcept + { + lane0_ += std::bit_cast(components[0]); + lane1_ += std::bit_cast(components[1]); + lane2_ += std::bit_cast(components[2]); + lane3_ += std::bit_cast(components[3]); + } + + [[nodiscard]] std::uint64_t value() const noexcept + { + return lane0_ ^ + std::rotl(lane1_, 13) ^ + std::rotl(lane2_, 29) ^ + std::rotl(lane3_, 47); + } + + private: + std::uint64_t lane0_ = 0; + std::uint64_t lane1_ = 0; + std::uint64_t lane2_ = 0; + std::uint64_t lane3_ = 0; + }; +} + +#endif diff --git a/validation/benchmarks/runtime/main.cpp b/validation/benchmarks/runtime/main.cpp new file mode 100644 index 0000000..f45adf2 --- /dev/null +++ b/validation/benchmarks/runtime/main.cpp @@ -0,0 +1,188 @@ +#include "runner.hpp" +#include "../../support/config_banner.hpp" + +#include +#include +#include +#include +#include +#include +#include + +namespace +{ + [[nodiscard]] bool describes_build(int argc, char** argv) noexcept + { + return argc == 2 && std::string_view{ argv[1] } == "--describe"; + } + + [[nodiscard]] fltx::tests::benchmark::options parse_arguments(int argc, char** argv) + { + fltx::tests::benchmark::options out; + bool sample_mode_set = false; + bool samples_set = false; + bool trials_set = false; + for (int i = 1; i < argc; ++i) + { + const std::string argument = argv[i]; + auto value = [&]() -> std::string { + if (++i >= argc) + throw std::runtime_error("missing value after " + argument); + return argv[i]; + }; + + if (argument == "--precision") + out.precision = value(); + else if (argument == "--output") + out.output = value(); + else if (argument == "--run-id") + out.run_id = value(); + else if (argument == "--source-revision") + out.source_revision = value(); + else if (argument == "--filter") + out.filter = value(); + else if (argument == "--samples") + { + out.samples = static_cast(std::stoull(value())); + samples_set = true; + } + else if (argument == "--trials") + { + out.trials = static_cast(std::stoull(value())); + trials_set = true; + } + else if (argument == "--sample-mode") + { + out.sample_mode = value(); + sample_mode_set = true; + if (out.sample_mode != "smoke" && out.sample_mode != "small" && + out.sample_mode != "standard" && out.sample_mode != "full") + throw std::runtime_error( + "--sample-mode must be smoke, small, standard or full"); + } + else if (argument == "--help") + { + std::cout + << "fltx_benchmark --precision f128|f256 --output FILE " + "--run-id ID --source-revision REV " + "[--sample-mode smoke|small|standard|full] [--samples N] " + "[--trials N (maximum for small/standard)] " + "[--filter TEXT]\n" + "fltx_benchmark --describe\n"; + std::exit(0); + } + else + throw std::runtime_error("unknown argument: " + argument); + } + + if (out.precision != "f128" && out.precision != "f256") + throw std::runtime_error("--precision must be f128 or f256"); + if (sample_mode_set) + { + if (!samples_set) + { + if (out.sample_mode == "smoke") + out.samples = 12; + else if (out.sample_mode == "small") + out.samples = out.precision == "f128" ? 4096 : 2048; + else if (out.sample_mode == "standard") + out.samples = out.precision == "f128" ? 8192 : 4096; + else + out.samples = out.precision == "f128" ? 81920 : 40960; + } + if (!trials_set) + out.trials = out.sample_mode == "smoke" ? 3 : 7; + out.minimum_trial_ns = out.sample_mode == "smoke" + ? fltx::tests::benchmark::smoke_minimum_trial_ns + : out.sample_mode == "small" || out.sample_mode == "standard" + ? fltx::tests::benchmark::standard_minimum_trial_ns + : fltx::tests::benchmark::full_minimum_trial_ns; + } + else if (samples_set || trials_set) + { + out.sample_mode = "custom"; + } + if (out.output.empty() || out.run_id.empty() || out.source_revision.empty()) + throw std::runtime_error("--output, --run-id and --source-revision are required"); + if (out.samples == 0 || out.trials == 0) + throw std::runtime_error("--samples and --trials must be greater than zero"); + return out; + } +} + +int main(int argc, char** argv) +{ + try + { + if (describes_build(argc, argv)) + { + fltx::tests::support::print_config_banner("benchmark"); + return 0; + } + + const auto settings = parse_arguments(argc, argv); + fltx::tests::support::print_config_banner( + "benchmark", + settings.sample_mode.c_str(), + settings.samples, + settings.trials); + std::cout << "[timing] minimum-trial-ms=" + << settings.minimum_trial_ns / 1'000'000.0 << '\n'; + if (settings.sample_mode == "small" || settings.sample_mode == "standard") + { + std::cout + << "[timing] policy=" + << fltx::tests::benchmark::timing_policy::identity + << " fast-threshold-ns=" + << fltx::tests::benchmark::timing_policy::fast_threshold_ns + << " slow-threshold-ns=" + << fltx::tests::benchmark::timing_policy::slow_threshold_ns + << " fast-trials=" + << fltx::tests::benchmark::timing_policy::fast_trials + << " ordinary-trials=" + << fltx::tests::benchmark::timing_policy::ordinary_trials + << " fast-target-ms=" + << fltx::tests::benchmark::timing_policy::fast_trial_target_ns / + 1'000'000.0 + << " normal-target-ms=" + << fltx::tests::benchmark::timing_policy::normal_trial_target_ns / + 1'000'000.0 + << " maximum-row-ms=" + << fltx::tests::benchmark::timing_policy::maximum_row_ns / + 1'000'000.0 + << '\n'; + } + fltx::tests::csv_writer output(settings.output); + output.row({ + "schema_version", "run_id", "source_revision", "source_fingerprint", + "precision", "group", "operation", + "implementation", "implementation_short", "implementation_label", + "api", "samples", "ns_iter", "trials_ns", "iterations", + "elapsed_ns", "speed_ratio" + }); + const std::size_t first_result_row = output.rows_written(); + + if (settings.precision == "f128") + { + fltx::tests::benchmark::run_operations_f128(output, settings); + fltx::tests::benchmark::run_workloads_f128(output, settings); + } + else + { + fltx::tests::benchmark::run_operations_f256(output, settings); + fltx::tests::benchmark::run_workloads_f256(output, settings); + } + + const std::size_t result_rows = output.rows_written() - first_result_row; + if (result_rows == 0) + throw std::runtime_error("benchmark filter matched no operations"); + + output.finish(); + return 0; + } + catch (const std::exception& error) + { + std::cerr << "fltx_benchmark: " << error.what() << '\n'; + return 2; + } +} diff --git a/validation/benchmarks/runtime/operations.cpp b/validation/benchmarks/runtime/operations.cpp new file mode 100644 index 0000000..59350f6 --- /dev/null +++ b/validation/benchmarks/runtime/operations.cpp @@ -0,0 +1,1227 @@ +#include "../../support/tlfloat_ops.hpp" +#include "runner.hpp" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fltx::tests::benchmark +{ + namespace + { + template + using qd_value = std::conditional_t, + implementations::qd_f128, implementations::qd_f256>; + + template + using boost_value = std::conditional_t, + implementations::cppdd, implementations::mpfr64>; + + template + using tlfloat_value = + std::conditional_t, implementations::tl_f128, + implementations::tl_f256>; + + template + [[nodiscard]] auto qdpp(std::string_view api, Eval evaluate) + { + return implementation>(implementations::qdpp_identity, api, + std::move(evaluate)); + } + + template + [[nodiscard]] auto qdpp_if(bool supported, std::string_view api, Eval evaluate) + { + auto out = qdpp(api, std::move(evaluate)); + out.info.enabled = out.info.enabled && supported; + return out; + } + + template + [[nodiscard]] auto boost_impl(std::string_view api, Eval evaluate) + { + return implementation>(implementations::boost_identity, api, + std::move(evaluate)); + } + + template + [[nodiscard]] auto tlfloat_impl(std::string_view api, Eval evaluate) + { + return implementation>(implementations::tlfloat_identity, + api, std::move(evaluate)); + } + + template [[nodiscard]] auto boost_abs(const Value& value) + { + using boost::multiprecision::abs; + return abs(value); + } + + template [[nodiscard]] auto boost_fabs(const Value& value) + { + using boost::multiprecision::fabs; + return fabs(value); + } + + template [[nodiscard]] auto boost_floor(const Value& value) + { + using boost::multiprecision::floor; + return floor(value); + } + + template [[nodiscard]] auto boost_ceil(const Value& value) + { + using boost::multiprecision::ceil; + return ceil(value); + } + + template [[nodiscard]] auto boost_trunc(const Value& value) + { + using boost::multiprecision::trunc; + return trunc(value); + } + + template [[nodiscard]] auto boost_round(const Value& value) + { + using boost::multiprecision::round; + return round(value); + } + + template [[nodiscard]] auto boost_fmod(const Value& x, const Value& y) + { + using boost::multiprecision::fmod; + return fmod(x, y); + } + + template [[nodiscard]] auto boost_remainder(const Value& x, const Value& y) + { + using boost::multiprecision::remainder; + return remainder(x, y); + } + + template [[nodiscard]] auto boost_fmin(const Value& x, const Value& y) + { + using boost::multiprecision::fmin; + return fmin(x, y); + } + + template [[nodiscard]] auto boost_fmax(const Value& x, const Value& y) + { + using boost::multiprecision::fmax; + return fmax(x, y); + } + + template [[nodiscard]] auto boost_fdim(const Value& x, const Value& y) + { + using boost::multiprecision::fdim; + return fdim(x, y); + } + + template [[nodiscard]] auto boost_copysign(const Value& x, const Value& y) + { + using boost::multiprecision::copysign; + return copysign(x, y); + } + + template [[nodiscard]] auto boost_remquo(const Value& x, const Value& y) + { + int quotient = 0; + using boost::multiprecision::remquo; + const Value remainder = remquo(x, y, "ient); + return std::pair{remainder, quotient}; + } + + template [[nodiscard]] auto boost_modf(const Value& value) + { + Value integral{}; + using boost::multiprecision::modf; + const Value fractional = modf(value, &integral); + return std::pair{fractional, integral}; + } + + template [[nodiscard]] auto boost_frexp(const Value& value) + { + int exponent = 0; + using boost::multiprecision::frexp; + const Value fraction = frexp(value, &exponent); + return std::pair{fraction, exponent}; + } + + template [[nodiscard]] auto boost_ilogb(const Value& value) + { + using boost::multiprecision::ilogb; + return ilogb(value); + } + + template [[nodiscard]] auto boost_logb(const Value& value) + { + using boost::multiprecision::logb; + return logb(value); + } + + template [[nodiscard]] auto boost_nextafter(const Value& x, const Value& y) + { + return boost::math::nextafter(x, y); + } + + template [[nodiscard]] auto boost_lround(const Value& value) + { + using boost::multiprecision::lround; + return lround(value); + } + + template [[nodiscard]] auto boost_llround(const Value& value) + { + using boost::multiprecision::llround; + return llround(value); + } + + template + [[nodiscard]] auto boost_fma(const Value& x, const Value& y, const Value& z) + { + using boost::multiprecision::fma; + return fma(x, y, z); + } + + template [[nodiscard]] auto boost_hypot(const Value& x, const Value& y) + { + using boost::multiprecision::hypot; + return hypot(x, y); + } + + template [[nodiscard]] auto boost_exp2(const Value& value) + { + using boost::multiprecision::exp2; + return exp2(value); + } + + template [[nodiscard]] auto boost_log2(const Value& value) + { + using boost::multiprecision::log2; + return log2(value); + } + + template [[nodiscard]] auto boost_sqrt(const Value& value) + { + using boost::multiprecision::sqrt; + return sqrt(value); + } + + template [[nodiscard]] auto boost_cbrt(const Value& value) + { + using boost::multiprecision::cbrt; + return cbrt(value); + } + + template [[nodiscard]] auto boost_sin(const Value& value) + { + using boost::multiprecision::sin; + return sin(value); + } + + template [[nodiscard]] auto boost_cos(const Value& value) + { + using boost::multiprecision::cos; + return cos(value); + } + + template [[nodiscard]] auto boost_tan(const Value& value) + { + using boost::multiprecision::tan; + return tan(value); + } + + template [[nodiscard]] auto boost_atan(const Value& value) + { + using boost::multiprecision::atan; + return atan(value); + } + + template [[nodiscard]] auto boost_atan2(const Value& y, const Value& x) + { + using boost::multiprecision::atan2; + return atan2(y, x); + } + + template [[nodiscard]] auto boost_asin(const Value& value) + { + using boost::multiprecision::asin; + return asin(value); + } + + template [[nodiscard]] auto boost_acos(const Value& value) + { + using boost::multiprecision::acos; + return acos(value); + } + + template [[nodiscard]] auto boost_exp(const Value& value) + { + using boost::multiprecision::exp; + return exp(value); + } + + template [[nodiscard]] auto boost_expm1(const Value& value) + { + using boost::multiprecision::expm1; + return expm1(value); + } + + template [[nodiscard]] auto boost_log(const Value& value) + { + using boost::multiprecision::log; + return log(value); + } + + template [[nodiscard]] auto boost_log10(const Value& value) + { + using boost::multiprecision::log10; + return log10(value); + } + + template [[nodiscard]] auto boost_log1p(const Value& value) + { + using boost::multiprecision::log1p; + return log1p(value); + } + + template [[nodiscard]] auto boost_pow(const Value& x, const Value& y) + { + using boost::multiprecision::pow; + return pow(x, y); + } + + template [[nodiscard]] auto boost_ipow(const Value& value) + { + using boost::multiprecision::pow; + return pow(value, 7); + } + + template [[nodiscard]] auto boost_sinh(const Value& value) + { + using boost::multiprecision::sinh; + return sinh(value); + } + + template [[nodiscard]] auto boost_cosh(const Value& value) + { + using boost::multiprecision::cosh; + return cosh(value); + } + + template [[nodiscard]] auto boost_tanh(const Value& value) + { + using boost::multiprecision::tanh; + return tanh(value); + } + + template [[nodiscard]] auto boost_asinh(const Value& value) + { + using boost::multiprecision::asinh; + return asinh(value); + } + + template [[nodiscard]] auto boost_acosh(const Value& value) + { + using boost::multiprecision::acosh; + return acosh(value); + } + + template [[nodiscard]] auto boost_atanh(const Value& value) + { + using boost::multiprecision::atanh; + return atanh(value); + } + + template [[nodiscard]] auto boost_erf(const Value& value) + { + using boost::multiprecision::erf; + return erf(value); + } + + template [[nodiscard]] auto boost_erfc(const Value& value) + { + using boost::multiprecision::erfc; + return erfc(value); + } + + template [[nodiscard]] auto boost_lgamma(const Value& value) + { + using boost::multiprecision::lgamma; + return lgamma(value); + } + + template [[nodiscard]] auto boost_tgamma(const Value& value) + { + using boost::multiprecision::tgamma; + return tgamma(value); + } + + template [[nodiscard]] auto magnitude(Value value) + { + return value < Value{0} ? -value : value; + } + + template [[nodiscard]] auto reference_trunc(const Value& value) + { +#if FLTX_METRICS_HAS_QDPP + return ::aint(value); +#else + return value; +#endif + } + + template [[nodiscard]] auto reference_remainder(const Value& x, const Value& y) + { +#if FLTX_METRICS_HAS_QDPP + return ::drem(x, y); +#else + return x - y; +#endif + } + + template [[nodiscard]] auto reference_cbrt(const Value& value) + { +#if FLTX_METRICS_HAS_QDPP + const auto root = ::nroot(magnitude(value), 3); + return value < 0.0 ? -root : root; +#else + return value; +#endif + } + + template [[nodiscard]] auto reference_ipow(const Value& value) + { +#if FLTX_METRICS_HAS_QDPP + return ::npwr(value, 7); +#else + return value; +#endif + } + + template [[nodiscard]] auto reference_sincos(const Value& value) + { +#if FLTX_METRICS_HAS_QDPP + Value sine{}; + Value cosine{}; + ::sincos(value, sine, cosine); + return sine + cosine; +#else + return value; +#endif + } + + template [[nodiscard]] auto reference_sqr(const Value& value) + { +#if FLTX_METRICS_HAS_QDPP + return ::sqr(value); +#else + return value * value; +#endif + } + + template [[nodiscard]] auto reference_recip(const Value& value) + { +#if FLTX_METRICS_HAS_QDPP + return ::inv(value); +#else + return Value{1} / value; +#endif + } + + template [[nodiscard]] auto reference_divrem(const Value& x, const Value& y) + { +#if FLTX_METRICS_HAS_QDPP + Value remainder{}; + const Value quotient = ::divrem(x, y, remainder); + return std::pair{remainder, quotient}; +#else + return std::pair{x, y}; +#endif + } + + template + [[nodiscard]] std::string reference_to_string(const Value& value, int digits) + { +#if FLTX_METRICS_HAS_QDPP + return value.to_string(digits, 0, std::ios_base::scientific); +#else + (void)value; + (void)digits; + return {}; +#endif + } + + template [[nodiscard]] auto reference_parse(const std::string& text) + { +#if FLTX_METRICS_HAS_QDPP + return Value::read(text.c_str()); +#else + (void)text; + return Value{}; +#endif + } + + template [[nodiscard]] auto reference_uniform(Engine& engine) + { +#if FLTX_METRICS_HAS_QDPP + if constexpr (std::is_same_v) + return ::ddrand(engine); + else + return ::qdrand(engine); +#else + (void)engine; + return Value{}; +#endif + } + + template [[nodiscard]] auto reference_min(const Value& x, const Value& y) + { +#if FLTX_METRICS_HAS_QDPP + return (::min)(x, y); +#else + return x < y ? x : y; +#endif + } + + template [[nodiscard]] auto reference_max(const Value& x, const Value& y) + { +#if FLTX_METRICS_HAS_QDPP + return (::max)(x, y); +#else + return x < y ? y : x; +#endif + } + + template void run_operations(csv_writer& output, const options& settings) + { + runner run(output, settings); + + run.binary( + "arithmetic", "add", [](const auto& x, const auto& y) { return x + y; }, + qdpp("qdpp operator+", [](const auto& x, const auto& y) { return x + y; }), + boost_impl("Boost operator+", + [](const auto& x, const auto& y) { return x + y; }), + tlfloat_impl("TLFloat operator+", + [](const auto& x, const auto& y) { return x + y; })); + run.binary( + "arithmetic", "subtract", [](const auto& x, const auto& y) { return x - y; }, + qdpp("qdpp operator-", [](const auto& x, const auto& y) { return x - y; }), + boost_impl("Boost operator-", + [](const auto& x, const auto& y) { return x - y; }), + tlfloat_impl("TLFloat operator-", + [](const auto& x, const auto& y) { return x - y; })); + run.binary( + "arithmetic", "multiply", [](const auto& x, const auto& y) { return x * y; }, + qdpp("qdpp operator*", [](const auto& x, const auto& y) { return x * y; }), + boost_impl("Boost operator*", + [](const auto& x, const auto& y) { return x * y; }), + tlfloat_impl("TLFloat operator*", + [](const auto& x, const auto& y) { return x * y; })); + run.binary( + "arithmetic", "divide", [](const auto& x, const auto& y) { return x / y; }, + qdpp("qdpp operator/", [](const auto& x, const auto& y) { return x / y; }), + boost_impl("boost::multiprecision::operator/", + [](const auto& x, const auto& y) { return x / y; }), + tlfloat_impl("TLFloat operator/", + [](const auto& x, const auto& y) { return x / y; })); + run.ternary( + "floating_point_utilities", "fma", + [](const auto& x, const auto& y, const auto& z) { return bl::fma(x, y, z); }, + boost_impl( + "boost::multiprecision::fma", + [](const auto& x, const auto& y, const auto& z) { return boost_fma(x, y, z); }), + tlfloat_impl("tlfloat::fma", + [](const auto& x, const auto& y, const auto& z) { + return tlfloat_ops::fma(x, y, z); + })); + run.unary( + "floating_point_utilities", "abs", [](const auto& x) { return bl::abs(x); }, + qdpp("qdpp abs", [](const auto& x) { return ::abs(x); }), + boost_impl("boost::multiprecision::abs", + [](const auto& x) { return boost_abs(x); }), + tlfloat_impl("tlfloat::abs", + [](const auto& x) { return tlfloat_ops::abs(x); })); + run.unary( + "floating_point_utilities", "fabs", [](const auto& x) { return bl::fabs(x); }, + qdpp("qdpp fabs", [](const auto& x) { return ::fabs(x); }), + boost_impl("boost::multiprecision::fabs", + [](const auto& x) { return boost_fabs(x); }), + tlfloat_impl("tlfloat::abs", + [](const auto& x) { return tlfloat_ops::abs(x); })); + run.unary( + "roots_and_powers", "sqr", [](const auto& x) { return bl::sqr(x); }, + qdpp("qdpp sqr", [](const auto& x) { return reference_sqr(x); })); + run.unary( + "floating_point_utilities", "recip", [](const auto& x) { return bl::recip(x); }, + qdpp("qdpp inv", [](const auto& x) { return reference_recip(x); })); + run.binary( + "floating_point_utilities", "fmin", [](const auto& x, const auto& y) { return bl::fmin(x, y); }, + qdpp_if(std::is_same_v, "qdpp min", + [](const auto& x, const auto& y) { return reference_min(x, y); }), + boost_impl("boost::multiprecision::fmin", + [](const auto& x, const auto& y) { return boost_fmin(x, y); }), + tlfloat_impl("tlfloat::fmin", [](const auto& x, const auto& y) { + return tlfloat_ops::fmin(x, y); + })); + run.binary( + "floating_point_utilities", "fmax", [](const auto& x, const auto& y) { return bl::fmax(x, y); }, + qdpp_if(std::is_same_v, "qdpp max", + [](const auto& x, const auto& y) { return reference_max(x, y); }), + boost_impl("boost::multiprecision::fmax", + [](const auto& x, const auto& y) { return boost_fmax(x, y); }), + tlfloat_impl("tlfloat::fmax", [](const auto& x, const auto& y) { + return tlfloat_ops::fmax(x, y); + })); + run.binary( + "floating_point_utilities", "fdim", [](const auto& x, const auto& y) { return bl::fdim(x, y); }, + boost_impl("boost::multiprecision::fdim", + [](const auto& x, const auto& y) { return boost_fdim(x, y); }), + tlfloat_impl("tlfloat::fdim", [](const auto& x, const auto& y) { + return tlfloat_ops::fdim(x, y); + })); + run.binary( + "floating_point_utilities", "copysign", + [](const auto& x, const auto& y) { return bl::copysign(x, y); }, + boost_impl( + "boost::multiprecision::copysign", + [](const auto& x, const auto& y) { return boost_copysign(x, y); }), + tlfloat_impl("tlfloat::copysign", [](const auto& x, const auto& y) { + return tlfloat_ops::copysign(x, y); + })); + + run.unary( + "rounding", "floor", [](const auto& x) { return bl::floor(x); }, + qdpp("qdpp floor", [](const auto& x) { return ::floor(x); }), + boost_impl("boost::multiprecision::floor", + [](const auto& x) { return boost_floor(x); }), + tlfloat_impl("tlfloat::floor", + [](const auto& x) { return tlfloat_ops::floor(x); })); + run.unary( + "rounding", "ceil", [](const auto& x) { return bl::ceil(x); }, + qdpp("qdpp ceil", [](const auto& x) { return ::ceil(x); }), + boost_impl("boost::multiprecision::ceil", + [](const auto& x) { return boost_ceil(x); }), + tlfloat_impl("tlfloat::ceil", + [](const auto& x) { return tlfloat_ops::ceil(x); })); + run.unary( + "rounding", "trunc", [](const auto& x) { return bl::trunc(x); }, + qdpp("qdpp aint", [](const auto& x) { return reference_trunc(x); }), + boost_impl("boost::multiprecision::trunc", + [](const auto& x) { return boost_trunc(x); }), + tlfloat_impl("tlfloat::trunc", + [](const auto& x) { return tlfloat_ops::trunc(x); })); + run.unary( + "rounding", "round", [](const auto& x) { return bl::round(x); }, + qdpp("qdpp round", [](const auto& x) { return ::round(x); }), + boost_impl("boost::multiprecision::round", + [](const auto& x) { return boost_round(x); }), + tlfloat_impl("tlfloat::round", + [](const auto& x) { return tlfloat_ops::round(x); })); + run.unary( + "rounding", "roundeven", [](const auto& x) { return bl::roundeven(x); }, + tlfloat_impl("tlfloat::rint", + [](const auto& x) { return tlfloat_ops::roundeven(x); })); + run.unary_result( + "rounding", "lround", [](const auto& x) { return bl::lround(x); }, + boost_impl("boost::multiprecision::lround", + [](const auto& x) { return boost_lround(x); })); + run.unary_result( + "rounding", "llround", [](const auto& x) { return bl::llround(x); }, + boost_impl("boost::multiprecision::llround", + [](const auto& x) { return boost_llround(x); })); + run.unary("rounding", "round_decimals", + [](const auto& x) { return bl::round_decimals(x, 3); }); + run.unary("rounding", "round_significant", + [](const auto& x) { return bl::round_significant(x, 4); }); + + run.binary( + "remainders", "fmod", [](const auto& x, const auto& y) { return bl::fmod(x, y); }, + qdpp("qdpp fmod", [](const auto& x, const auto& y) { return ::fmod(x, y); }), + boost_impl("boost::multiprecision::fmod", + [](const auto& x, const auto& y) { return boost_fmod(x, y); }), + tlfloat_impl("tlfloat::fmod", [](const auto& x, const auto& y) { + return tlfloat_ops::fmod(x, y); + })); + run.binary( + "remainders", "remainder", + [](const auto& x, const auto& y) { return bl::remainder(x, y); }, + qdpp("qdpp drem", + [](const auto& x, const auto& y) { return reference_remainder(x, y); }), + boost_impl( + "boost::multiprecision::remainder", + [](const auto& x, const auto& y) { return boost_remainder(x, y); }), + tlfloat_impl("tlfloat::remainder", [](const auto& x, const auto& y) { + return tlfloat_ops::remainder(x, y); + })); + run.binary_result( + "remainders", "remquo", + [](const auto& x, const auto& y) { + int quotient = 0; + const auto result = bl::remquo(x, y, "ient); + return std::pair{result, quotient}; + }, + qdpp("qdpp divrem", + [](const auto& x, const auto& y) { return reference_divrem(x, y); }), + boost_impl("boost::multiprecision::remquo", + [](const auto& x, const auto& y) { return boost_remquo(x, y); }), + tlfloat_impl("tlfloat::remquo", [](const auto& x, const auto& y) { + return tlfloat_ops::remquo(x, y); + })); + + run.unary_result( + "floating_point_utilities", "modf", + [](const auto& x) { + std::remove_cvref_t integral{}; + const auto fraction = bl::modf(x, &integral); + return std::pair{fraction, integral}; + }, + boost_impl("boost::multiprecision::modf", + [](const auto& x) { return boost_modf(x); }), + tlfloat_impl("tlfloat::modf", + [](const auto& x) { return tlfloat_ops::modf(x); })); + run.unary( + "floating_point_utilities", "ldexp", [](const auto& x) { return bl::ldexp(x, 7); }, + qdpp("qdpp ldexp", [](const auto& x) { return ::ldexp(x, 7); }), + boost_impl("boost::multiprecision::ldexp", + [](const auto& x) { + using boost::multiprecision::ldexp; + return ldexp(x, 7); + }), + tlfloat_impl("tlfloat::ldexp", + [](const auto& x) { return tlfloat_ops::ldexp(x, 7); })); + run.unary( + "floating_point_utilities", "scalbn", [](const auto& x) { return bl::scalbn(x, -7); }, + qdpp("qdpp ldexp", [](const auto& x) { return ::ldexp(x, -7); }), + boost_impl("boost::multiprecision::scalbn", [](const auto& x) { + using boost::multiprecision::scalbn; + return scalbn(x, -7); + })); + run.unary( + "floating_point_utilities", "scalbln", [](const auto& x) { return bl::scalbln(x, -7L); }, + qdpp("qdpp ldexp", [](const auto& x) { return ::ldexp(x, -7); }), + boost_impl("boost::multiprecision::scalbln", [](const auto& x) { + using boost::multiprecision::scalbln; + return scalbln(x, -7L); + })); + run.unary_result( + "floating_point_utilities", "frexp", + [](const auto& x) { + int exponent = 0; + const auto fraction = bl::frexp(x, &exponent); + return std::pair{fraction, exponent}; + }, + boost_impl("boost::multiprecision::frexp", + [](const auto& x) { return boost_frexp(x); }), + tlfloat_impl("tlfloat::frexp", + [](const auto& x) { return tlfloat_ops::frexp(x); })); + run.unary_result( + "floating_point_utilities", "ilogb", [](const auto& x) { return bl::ilogb(x); }, + boost_impl("boost::multiprecision::ilogb", + [](const auto& x) { return boost_ilogb(x); }), + tlfloat_impl("tlfloat::ilogb", + [](const auto& x) { return tlfloat_ops::ilogb(x); })); + run.unary( + "floating_point_utilities", "logb", [](const auto& x) { return bl::logb(x); }, + boost_impl("boost::multiprecision::logb", + [](const auto& x) { return boost_logb(x); })); + + run.binary( + "floating_point_utilities", "nextafter", + [](const auto& x, const auto& y) { return bl::nextafter(x, y); }, + boost_impl( + "boost::math::nextafter", + [](const auto& x, const auto& y) { return boost_nextafter(x, y); }), + tlfloat_impl("tlfloat::nextafter", [](const auto& x, const auto& y) { + return tlfloat_ops::nextafter(x, y); + })); + run.binary( + "floating_point_utilities", "nexttoward", + [](const auto& x, const auto& y) { return bl::nexttoward(x, y); }, + boost_impl( + "boost::math::nextafter (same type)", + [](const auto& x, const auto& y) { return boost_nextafter(x, y); }), + tlfloat_impl( + "tlfloat::nextafter (same type)", + [](const auto& x, const auto& y) { return tlfloat_ops::nextafter(x, y); })); + + run.binary_result( + "comparisons", "equal", [](const auto& x, const auto& y) { return x == y; }, + qdpp("qdpp operator==", [](const auto& x, const auto& y) { return x == y; }), + boost_impl("Boost operator==", + [](const auto& x, const auto& y) { return x == y; }), + tlfloat_impl("TLFloat operator==", + [](const auto& x, const auto& y) { return x == y; })); + run.binary_result( + "comparisons", "not_equal", [](const auto& x, const auto& y) { return x != y; }, + qdpp("qdpp operator!=", [](const auto& x, const auto& y) { return x != y; }), + boost_impl("Boost operator!=", + [](const auto& x, const auto& y) { return x != y; }), + tlfloat_impl("TLFloat operator!=", + [](const auto& x, const auto& y) { return x != y; })); + run.binary_result( + "comparisons", "less", [](const auto& x, const auto& y) { return x < y; }, + qdpp("qdpp operator<", [](const auto& x, const auto& y) { return x < y; }), + boost_impl("Boost operator<", + [](const auto& x, const auto& y) { return x < y; }), + tlfloat_impl("TLFloat operator<", + [](const auto& x, const auto& y) { return x < y; })); + run.binary_result( + "comparisons", "less_equal", [](const auto& x, const auto& y) { return x <= y; }, + qdpp("qdpp operator<=", [](const auto& x, const auto& y) { return x <= y; }), + boost_impl("Boost operator<=", + [](const auto& x, const auto& y) { return x <= y; }), + tlfloat_impl("TLFloat operator<=", + [](const auto& x, const auto& y) { return x <= y; })); + run.binary_result( + "comparisons", "greater", [](const auto& x, const auto& y) { return x > y; }, + qdpp("qdpp operator>", [](const auto& x, const auto& y) { return x > y; }), + boost_impl("Boost operator>", + [](const auto& x, const auto& y) { return x > y; }), + tlfloat_impl("TLFloat operator>", + [](const auto& x, const auto& y) { return x > y; })); + run.binary_result( + "comparisons", "greater_equal", [](const auto& x, const auto& y) { return x >= y; }, + qdpp("qdpp operator>=", [](const auto& x, const auto& y) { return x >= y; }), + boost_impl("Boost operator>=", + [](const auto& x, const auto& y) { return x >= y; }), + tlfloat_impl("TLFloat operator>=", + [](const auto& x, const auto& y) { return x >= y; })); + + run.unary( + "roots_and_powers", "sqrt", [](const auto& x) { return bl::sqrt(x); }, + qdpp("qdpp sqrt", [](const auto& x) { return ::sqrt(x); }), + boost_impl("boost::multiprecision::sqrt", + [](const auto& x) { return boost_sqrt(x); }), + tlfloat_impl("tlfloat::sqrt", + [](const auto& x) { return tlfloat_ops::sqrt(x); })); + run.unary( + "roots_and_powers", "cbrt", [](const auto& x) { return bl::cbrt(x); }, + qdpp("qdpp nroot", [](const auto& x) { return reference_cbrt(x); }), + boost_impl("boost::multiprecision::cbrt", + [](const auto& x) { return boost_cbrt(x); }), + tlfloat_impl("tlfloat::cbrt", + [](const auto& x) { return tlfloat_ops::cbrt(x); })); + run.binary( + "roots_and_powers", "hypot", [](const auto& x, const auto& y) { return bl::hypot(x, y); }, + boost_impl("boost::multiprecision::hypot", + [](const auto& x, const auto& y) { return boost_hypot(x, y); }), + tlfloat_impl("tlfloat::hypot", [](const auto& x, const auto& y) { + return tlfloat_ops::hypot(x, y); + })); + + run.unary( + "trigonometric", "sin", [](const auto& x) { return bl::sin(x); }, + qdpp("qdpp sin", [](const auto& x) { return ::sin(x); }), + boost_impl("boost::multiprecision::sin", + [](const auto& x) { return boost_sin(x); }), + tlfloat_impl("tlfloat::sin", + [](const auto& x) { return tlfloat_ops::sin(x); })); + run.unary( + "trigonometric", "cos", [](const auto& x) { return bl::cos(x); }, + qdpp("qdpp cos", [](const auto& x) { return ::cos(x); }), + boost_impl("boost::multiprecision::cos", + [](const auto& x) { return boost_cos(x); }), + tlfloat_impl("tlfloat::cos", + [](const auto& x) { return tlfloat_ops::cos(x); })); + run.unary( + "trigonometric", "sincos", + [](const auto& x) { + std::remove_cvref_t sine{}; + std::remove_cvref_t cosine{}; + (void)bl::sincos(x, sine, cosine); + return sine + cosine; + }, + qdpp("qdpp sincos", [](const auto& x) { return reference_sincos(x); }), + tlfloat_impl("tlfloat::sincos", + [](const auto& x) { return tlfloat_ops::sincos_sum(x); })); + run.unary( + "trigonometric", "tan", [](const auto& x) { return bl::tan(x); }, + qdpp("qdpp tan", [](const auto& x) { return ::tan(x); }), + boost_impl("boost::multiprecision::tan", + [](const auto& x) { return boost_tan(x); }), + tlfloat_impl("tlfloat::tan", + [](const auto& x) { return tlfloat_ops::tan(x); })); + run.unary( + "trigonometric", "atan", [](const auto& x) { return bl::atan(x); }, + qdpp("qdpp atan", [](const auto& x) { return ::atan(x); }), + boost_impl("boost::multiprecision::atan", + [](const auto& x) { return boost_atan(x); }), + tlfloat_impl("tlfloat::atan", + [](const auto& x) { return tlfloat_ops::atan(x); })); + run.binary( + "trigonometric", "atan2", [](const auto& y, const auto& x) { return bl::atan2(y, x); }, + qdpp("qdpp atan2", + [](const auto& y, const auto& x) { return ::atan2(y, x); }), + boost_impl("boost::multiprecision::atan2", + [](const auto& y, const auto& x) { return boost_atan2(y, x); }), + tlfloat_impl("tlfloat::atan2", [](const auto& x, const auto& y) { + return tlfloat_ops::atan2(x, y); + })); + run.unary( + "trigonometric", "asin", [](const auto& x) { return bl::asin(x); }, + qdpp("qdpp asin", [](const auto& x) { return ::asin(x); }), + boost_impl("boost::multiprecision::asin", + [](const auto& x) { return boost_asin(x); }), + tlfloat_impl("tlfloat::asin", + [](const auto& x) { return tlfloat_ops::asin(x); })); + run.unary( + "trigonometric", "acos", [](const auto& x) { return bl::acos(x); }, + qdpp("qdpp acos", [](const auto& x) { return ::acos(x); }), + boost_impl("boost::multiprecision::acos", + [](const auto& x) { return boost_acos(x); }), + tlfloat_impl("tlfloat::acos", + [](const auto& x) { return tlfloat_ops::acos(x); })); + + run.unary( + "exponentials", "exp", [](const auto& x) { return bl::exp(x); }, + qdpp("qdpp exp", [](const auto& x) { return ::exp(x); }), + boost_impl("boost::multiprecision::exp", + [](const auto& x) { return boost_exp(x); }), + tlfloat_impl("tlfloat::exp", + [](const auto& x) { return tlfloat_ops::exp(x); })); + run.unary( + "exponentials", "exp2", [](const auto& x) { return bl::exp2(x); }, + boost_impl("boost::multiprecision::exp2", + [](const auto& x) { return boost_exp2(x); }), + tlfloat_impl("tlfloat::exp2", + [](const auto& x) { return tlfloat_ops::exp2(x); })); + run.unary( + "exponentials", "expm1", [](const auto& x) { return bl::expm1(x); }, + qdpp("qdpp expm1", [](const auto& x) { return ::expm1(x); }), + boost_impl("boost::multiprecision::expm1", + [](const auto& x) { return boost_expm1(x); }), + tlfloat_impl("tlfloat::expm1", + [](const auto& x) { return tlfloat_ops::expm1(x); })); + run.unary( + "logarithms", "log", [](const auto& x) { return bl::log(x); }, + qdpp("qdpp log", [](const auto& x) { return ::log(x); }), + boost_impl("boost::multiprecision::log", + [](const auto& x) { return boost_log(x); }), + tlfloat_impl("tlfloat::log", + [](const auto& x) { return tlfloat_ops::log(x); })); + run.unary( + "logarithms", "log2", [](const auto& x) { return bl::log2(x); }, + boost_impl("boost::multiprecision::log2", + [](const auto& x) { return boost_log2(x); }), + tlfloat_impl("tlfloat::log2", + [](const auto& x) { return tlfloat_ops::log2(x); })); + run.unary( + "logarithms", "log10", [](const auto& x) { return bl::log10(x); }, + qdpp("qdpp log10", [](const auto& x) { return ::log10(x); }), + boost_impl("boost::multiprecision::log10", + [](const auto& x) { return boost_log10(x); }), + tlfloat_impl("tlfloat::log10", + [](const auto& x) { return tlfloat_ops::log10(x); })); + run.unary( + "logarithms", "log1p", [](const auto& x) { return bl::log1p(x); }, + qdpp("qdpp log1p", [](const auto& x) { return ::log1p(x); }), + boost_impl("boost::multiprecision::log1p", + [](const auto& x) { return boost_log1p(x); }), + tlfloat_impl("tlfloat::log1p", + [](const auto& x) { return tlfloat_ops::log1p(x); })); + run.binary( + "roots_and_powers", "pow", [](const auto& x, const auto& y) { return bl::pow(x, y); }, + qdpp("qdpp pow", [](const auto& x, const auto& y) { return ::pow(x, y); }), + boost_impl("boost::multiprecision::pow", + [](const auto& x, const auto& y) { return boost_pow(x, y); }), + tlfloat_impl("tlfloat::pow", [](const auto& x, const auto& y) { + return tlfloat_ops::pow(x, y); + })); + run.unary( + "roots_and_powers", "ipow", [](const auto& x) { return bl::ipow(x, 7); }, + qdpp("qdpp npwr", [](const auto& x) { return reference_ipow(x); }), + boost_impl("boost::multiprecision::pow(value, int)", + [](const auto& x) { return boost_ipow(x); })); + + run.ternary( + "mixed_workloads", "product_sum", + [](const auto& x, const auto& y, const auto& z) { return x * y + y * z; }, + qdpp("same expression", [](const auto& x, const auto& y, + const auto& z) { return x * y + y * z; }), + boost_impl("same expression", [](const auto& x, const auto& y, + const auto& z) { return x * y + y * z; }), + tlfloat_impl( + "same expression", + [](const auto& x, const auto& y, const auto& z) { return x * y + y * z; })); + + run.unary( + "hyperbolic", "sinh", [](const auto& x) { return bl::sinh(x); }, + qdpp("qdpp sinh", [](const auto& x) { return ::sinh(x); }), + boost_impl("boost::multiprecision::sinh", + [](const auto& x) { return boost_sinh(x); }), + tlfloat_impl("tlfloat::sinh", + [](const auto& x) { return tlfloat_ops::sinh(x); })); + run.unary( + "hyperbolic", "cosh", [](const auto& x) { return bl::cosh(x); }, + qdpp("qdpp cosh", [](const auto& x) { return ::cosh(x); }), + boost_impl("boost::multiprecision::cosh", + [](const auto& x) { return boost_cosh(x); }), + tlfloat_impl("tlfloat::cosh", + [](const auto& x) { return tlfloat_ops::cosh(x); })); + run.unary( + "hyperbolic", "tanh", [](const auto& x) { return bl::tanh(x); }, + qdpp("qdpp tanh", [](const auto& x) { return ::tanh(x); }), + boost_impl("boost::multiprecision::tanh", + [](const auto& x) { return boost_tanh(x); }), + tlfloat_impl("tlfloat::tanh", + [](const auto& x) { return tlfloat_ops::tanh(x); })); + run.unary( + "inverse_hyperbolic", "asinh", [](const auto& x) { return bl::asinh(x); }, + qdpp("qdpp asinh", [](const auto& x) { return ::asinh(x); }), + boost_impl("boost::multiprecision::asinh", + [](const auto& x) { return boost_asinh(x); }), + tlfloat_impl("tlfloat::asinh", + [](const auto& x) { return tlfloat_ops::asinh(x); })); + run.unary( + "inverse_hyperbolic", "acosh", [](const auto& x) { return bl::acosh(x); }, + qdpp("qdpp acosh", [](const auto& x) { return ::acosh(x); }), + boost_impl("boost::multiprecision::acosh", + [](const auto& x) { return boost_acosh(x); }), + tlfloat_impl("tlfloat::acosh", + [](const auto& x) { return tlfloat_ops::acosh(x); })); + run.unary( + "inverse_hyperbolic", "atanh", [](const auto& x) { return bl::atanh(x); }, + qdpp("qdpp atanh", [](const auto& x) { return ::atanh(x); }), + boost_impl("boost::multiprecision::atanh", + [](const auto& x) { return boost_atanh(x); }), + tlfloat_impl("tlfloat::atanh", + [](const auto& x) { return tlfloat_ops::atanh(x); })); + + run.unary( + "special_functions", "erf", [](const auto& x) { return bl::erf(x); }, + boost_impl("boost::multiprecision::erf", + [](const auto& x) { return boost_erf(x); }), + tlfloat_impl("tlfloat::erf", + [](const auto& x) { return tlfloat_ops::erf(x); })); + run.unary( + "special_functions", "erfc", [](const auto& x) { return bl::erfc(x); }, + boost_impl("boost::multiprecision::erfc", + [](const auto& x) { return boost_erfc(x); }), + tlfloat_impl("tlfloat::erfc", + [](const auto& x) { return tlfloat_ops::erfc(x); })); + run.unary( + "special_functions", "lgamma", [](const auto& x) { return bl::lgamma(x); }, + boost_impl("boost::multiprecision::lgamma", + [](const auto& x) { return boost_lgamma(x); }), + tlfloat_impl("tlfloat::lgamma", + [](const auto& x) { return tlfloat_ops::lgamma(x); })); + run.unary( + "special_functions", "tgamma", [](const auto& x) { return bl::tgamma(x); }, + boost_impl("boost::multiprecision::tgamma", + [](const auto& x) { return boost_tgamma(x); }), + tlfloat_impl("tlfloat::tgamma", + [](const auto& x) { return tlfloat_ops::tgamma(x); })); + + const auto values = run.template values(); + const auto qd_values = run.template values>(); + const auto boost_values = run.template values>(); + const auto tlfloat_values = run.template values>(); + constexpr int digits = std::numeric_limits::max_digits10; + run.measured_task( + "io", "to_string", values.size(), + [&](std::size_t batches) { + std::uint64_t checksum = 0; + for (std::size_t batch = 0; batch < batches; ++batch) + { + for (const Float& value : values) + { + checksum += static_cast( + bl::to_string(value, digits, std::ios_base::scientific).size()); + } + } + return checksum; + }, + task(implementations::qdpp_identity, "qdpp to_string", + [&](std::size_t batches) { + std::uint64_t checksum = 0; + for (std::size_t batch = 0; batch < batches; ++batch) + { + for (const auto& value : qd_values) + checksum += static_cast( + reference_to_string(value, digits).size()); + } + return checksum; + }), + task(implementations::boost_identity, "Boost number::str", + [&](std::size_t batches) { + std::uint64_t checksum = 0; + for (std::size_t batch = 0; batch < batches; ++batch) + { + for (const auto& value : boost_values) + { + checksum += static_cast( + value.str(digits, std::ios_base::scientific).size()); + } + } + return checksum; + }), + task(implementations::tlfloat_identity, "tlfloat::to_string", + [&](std::size_t batches) { + std::uint64_t checksum = 0; + for (std::size_t batch = 0; batch < batches; ++batch) + { + for (const auto& value : tlfloat_values) + { + checksum += static_cast( + tlfloat_ops::to_string(value, digits).size()); + } + } + return checksum; + })); + run.measured_task( + "io", "to_chars", values.size(), + [&](std::size_t batches) { + std::array buffer{}; + std::uint64_t checksum = 0; + for (std::size_t batch = 0; batch < batches; ++batch) + { + for (const Float& value : values) + { + const auto result = + bl::to_chars(buffer.data(), buffer.data() + buffer.size(), value, + std::chars_format::scientific, digits); + checksum += static_cast( + result.ptr - buffer.data()); + } + } + return checksum; + }, + task(implementations::qdpp_identity, "qdpp write", [&](std::size_t batches) { + std::array buffer{}; + std::uint64_t checksum = 0; + for (std::size_t batch = 0; batch < batches; ++batch) + { + for (const auto& value : qd_values) + { +#if FLTX_METRICS_HAS_QDPP + value.write(buffer.data(), static_cast(buffer.size()), digits, + false, false); + checksum += static_cast(buffer[0]); + checksum += static_cast(buffer[digits]); +#else + (void)value; +#endif + } + } + return checksum; + })); + + const std::vector texts = samples::decimal_strings(values.size(), digits); + if (digits <= std::numeric_limits::max_digits10 || + texts != samples::decimal_strings(values.size(), digits)) + { + throw std::logic_error( + "parse corpus must be deterministic and exceed double precision"); + } + + run.measured_task( + "io", "parse", texts.size(), + [&](std::size_t batches) { + checksum_accumulator checksum; + for (std::size_t batch = 0; batch < batches; ++batch) + for (const std::string& text : texts) + checksum.add(bl::parse(text)); + return checksum.value(); + }, + task(implementations::qdpp_identity, "qdpp read", + [&](std::size_t batches) { + checksum_accumulator checksum; + for (std::size_t batch = 0; batch < batches; ++batch) + { + for (const std::string& text : texts) + checksum.add(reference_parse>(text)); + } + return checksum.value(); + }), + task(implementations::boost_identity, "Boost string constructor", + [&](std::size_t batches) { + checksum_accumulator checksum; + for (std::size_t batch = 0; batch < batches; ++batch) + { + for (const std::string& text : texts) + checksum.add(boost_value{text}); + } + return checksum.value(); + }), + task(implementations::tlfloat_identity, "TLFloat string constructor", + [&](std::size_t batches) { + checksum_accumulator checksum; + for (std::size_t batch = 0; batch < batches; ++batch) + { + for (const std::string& text : texts) + { + checksum.add(tlfloat_ops::parse>(text)); + } + } + return checksum.value(); + })); + + constexpr std::size_t random_draws = 64; + run.measured_task("random", "mt19937_64", random_draws, [](std::size_t batches) { + bl::mt19937_64 engine{0x1020304050607080ull}; + std::uint64_t checksum = 0; + for (std::size_t batch = 0; batch < batches; ++batch) + for (std::size_t i = 0; i < random_draws; ++i) + checksum += engine(); + return checksum; + }); + run.measured_task( + "random", "uniform_real", random_draws, + [](std::size_t batches) { + bl::mt19937_64 engine{0x1020304050607080ull}; + bl::uniform_real_distribution distribution{Float{0.0}, Float{1.0}}; + checksum_accumulator checksum; + for (std::size_t batch = 0; batch < batches; ++batch) + for (std::size_t i = 0; i < random_draws; ++i) + checksum.add(distribution(engine)); + return checksum.value(); + }, + task(implementations::qdpp_identity, + std::is_same_v ? "qdpp ddrand" : "qdpp qdrand", + [](std::size_t batches) { + bl::mt19937_64 engine{0x1020304050607080ull}; + checksum_accumulator checksum; + for (std::size_t batch = 0; batch < batches; ++batch) + { + for (std::size_t i = 0; i < random_draws; ++i) + { + checksum.add(reference_uniform>(engine)); + } + } + return checksum.value(); + })); + run.measured_task("random", "normal", random_draws, [](std::size_t batches) { + bl::mt19937_64 engine{0x1020304050607080ull}; + bl::normal_distribution distribution{Float{1.0}, Float{0.5}}; + checksum_accumulator checksum; + for (std::size_t batch = 0; batch < batches; ++batch) + for (std::size_t i = 0; i < random_draws; ++i) + checksum.add(distribution(engine)); + return checksum.value(); + }); + } + } // namespace + + void run_operations_f128(csv_writer& output, const options& settings) + { + run_operations(output, settings); + } + + void run_operations_f256(csv_writer& output, const options& settings) + { + run_operations(output, settings); + } +} // namespace fltx::tests::benchmark diff --git a/validation/benchmarks/runtime/runner.hpp b/validation/benchmarks/runtime/runner.hpp new file mode 100644 index 0000000..5bbaf84 --- /dev/null +++ b/validation/benchmarks/runtime/runner.hpp @@ -0,0 +1,966 @@ +#ifndef FLTX_TESTS_BENCHMARK_RUNNER_INCLUDED +#define FLTX_TESTS_BENCHMARK_RUNNER_INCLUDED + +#include "../../support/csv.hpp" +#include "../../support/domains.hpp" +#include "../../support/implementations.hpp" +#include "../../support/source_identity.hpp" +#include "integer_observer.hpp" +#include "samples.hpp" +#include "timing_policy.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fltx::tests::benchmark +{ + inline constexpr std::string_view schema_version = "6"; +#if !defined(FLTX_TESTS_ENABLE_EXTERNAL_COMPARISONS) || \ + !FLTX_TESTS_ENABLE_EXTERNAL_COMPARISONS || \ + (defined(FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH) && \ + FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH) + inline constexpr bool external_implementations_enabled = false; +#else + inline constexpr bool external_implementations_enabled = true; +#endif + inline volatile std::size_t timing_batches = 0; + inline volatile std::uint64_t timing_sink = 0; + inline constexpr double minimum_credible_iteration_ns = 0.001; + inline constexpr double full_minimum_trial_ns = 25'000'000.0; + inline constexpr double standard_minimum_trial_ns = + timing_policy::normal_trial_target_ns; + inline constexpr double smoke_minimum_trial_ns = 3'000'000.0; + inline constexpr std::size_t maximum_batches = 1u << 20; + + struct options + { + std::string precision; + std::string output; + std::string run_id; + std::string source_revision; + std::string filter; + std::string sample_mode = "custom"; + std::size_t samples = 64; + std::size_t trials = 5; + double minimum_trial_ns = full_minimum_trial_ns; + }; + + struct timing_result + { + double median_ns = 0.0; + std::size_t batches = 0; + std::size_t operations = 0; + std::vector trials_ns; + std::vector elapsed_trials_ns; + }; + + struct implementation_info + { + std::string id; + std::string short_label; + std::string label; + std::string api; + bool enabled = true; + }; + + [[nodiscard]] inline implementation_info describe( + implementations::identity identity, + std::string_view api) + { + return { + std::string(identity.id), + std::string(identity.short_label), + std::string(identity.label), + std::string(api.empty() ? identity.api : api), + identity.enabled + }; + } + + template + struct implementation_spec + { + using value_type = Value; + + implementation_info info; + Eval evaluate; + }; + + template + [[nodiscard]] auto implementation( + implementations::identity identity, + std::string_view api, + Eval evaluate) + { + implementation_info info = describe(identity, api); + info.enabled = info.enabled && external_implementations_enabled; + return implementation_spec{std::move(info), std::move(evaluate)}; + } + + template + struct task_spec + { + implementation_info info; + Trial trial; + }; + + template + [[nodiscard]] auto task( + implementations::identity identity, + std::string_view api, + Trial trial) + { + implementation_info info = describe(identity, api); + info.enabled = info.enabled && external_implementations_enabled; + return task_spec{std::move(info), std::move(trial)}; + } + + class checksum_accumulator + { + public: + template + void add(const std::pair& value) + { + add(value.first); + add(value.second); + } + + template + void add(const Value& value) + { + observer_.add(implementations::observe(value)); + } + + [[nodiscard]] std::uint64_t value() const noexcept + { + return observer_.value(); + } + + private: + integer_observer observer_; + }; + + [[nodiscard]] inline std::string number(double value) + { + std::ostringstream out; + out << std::fixed << std::setprecision(6) << value; + return out.str(); + } + + template + [[nodiscard]] double elapsed_ns(std::size_t batches, Trial& trial) + { + std::atomic_signal_fence(std::memory_order_seq_cst); + const auto start = std::chrono::steady_clock::now(); + timing_batches = batches; + const std::uint64_t checksum = trial(timing_batches); + timing_sink = checksum; + std::atomic_signal_fence(std::memory_order_seq_cst); + const auto elapsed = std::chrono::steady_clock::now() - start; + return std::chrono::duration(elapsed).count(); + } + + template + [[nodiscard]] std::size_t calibrated_batches(Trial& trial, double minimum_ns) + { + std::size_t batches = 1; + for (int attempt = 0; attempt < 5; ++attempt) + { + const double elapsed = elapsed_ns(batches, trial); + if (elapsed >= minimum_ns || batches == maximum_batches) + break; + + const double scale = minimum_ns / std::max(elapsed, 1.0); + const auto requested = static_cast( + std::ceil(static_cast(batches) * scale * 1.1)); + batches = std::min( + maximum_batches, + std::max(batches + 1, requested)); + } + return batches; + } + + template + [[nodiscard]] timing_result measure_ns( + std::size_t operations_per_batch, + std::size_t trials, + double minimum_ns, + Trial trial) + { + if (operations_per_batch == 0 || trials == 0) + throw std::runtime_error("benchmark needs samples and trials"); + + const std::size_t batches = calibrated_batches(trial, minimum_ns); + timing_result result; + result.batches = batches * trials; + result.operations = operations_per_batch * batches * trials; + result.trials_ns.reserve(trials); + result.elapsed_trials_ns.reserve(trials); + for (std::size_t i = 0; i < trials; ++i) + { + const double elapsed = elapsed_ns(batches, trial); + result.elapsed_trials_ns.push_back(elapsed); + result.trials_ns.push_back( + elapsed / static_cast(operations_per_batch * batches)); + } + + std::vector sorted = result.trials_ns; + std::sort(sorted.begin(), sorted.end()); + result.median_ns = sorted[sorted.size() / 2]; + return result; + } + + template + class runner + { + public: + runner(csv_writer& output, const options& settings) + : output_(output), settings_(settings) + { + values_ = domains::moderate( + std::min(settings.samples, 4096), -4.0, 4.0).values; + } + + template + [[nodiscard]] std::vector values() const + { + std::vector out; + out.reserve(values_.size()); + for (const sample& value : values_) + out.push_back(implementations::value_traits::from_sample(value)); + return out; + } + + template + void unary( + std::string_view group, + std::string_view operation, + Eval evaluate, + Specs... comparisons) + { + if (!selected(operation)) + return; + + const auto inputs = samples::make( + operation, settings_.samples, settings_.sample_mode); + std::vector measurements; + measurements.push_back(make_unary( + fltx_info(operation), inputs, + implementation( + implementations::primary_identity, + fltx_api(operation), + std::move(evaluate)))); + (add_unary(measurements, inputs, std::move(comparisons)), ...); + run(group, operation, inputs.size(), std::move(measurements)); + } + + template + void unary_result( + std::string_view group, + std::string_view operation, + Eval evaluate, + Specs... comparisons) + { + if (!selected(operation)) + return; + + const auto inputs = samples::make( + operation, settings_.samples, settings_.sample_mode); + std::vector measurements; + measurements.push_back(make_unary_result( + fltx_info(operation), inputs, + implementation( + implementations::primary_identity, + fltx_api(operation), + std::move(evaluate)))); + (add_unary_result(measurements, inputs, std::move(comparisons)), ...); + run(group, operation, inputs.size(), std::move(measurements)); + } + + template + void binary( + std::string_view group, + std::string_view operation, + Eval evaluate, + Specs... comparisons) + { + if (!selected(operation)) + return; + + const auto inputs = samples::make( + operation, settings_.samples, settings_.sample_mode); + std::vector measurements; + measurements.push_back(make_binary( + fltx_info(operation), inputs, + implementation( + implementations::primary_identity, + fltx_api(operation), + std::move(evaluate)))); + (add_binary(measurements, inputs, std::move(comparisons)), ...); + run(group, operation, inputs.size(), std::move(measurements)); + } + + template + void binary_result( + std::string_view group, + std::string_view operation, + Eval evaluate, + Specs... comparisons) + { + if (!selected(operation)) + return; + + const auto inputs = samples::make( + operation, settings_.samples, settings_.sample_mode); + std::vector measurements; + measurements.push_back(make_binary_result( + fltx_info(operation), inputs, + implementation( + implementations::primary_identity, + fltx_api(operation), + std::move(evaluate)))); + (add_binary_result(measurements, inputs, std::move(comparisons)), ...); + run(group, operation, inputs.size(), std::move(measurements)); + } + + template + void ternary( + std::string_view group, + std::string_view operation, + Eval evaluate, + Specs... comparisons) + { + if (!selected(operation)) + return; + + const auto inputs = samples::make( + operation, settings_.samples, settings_.sample_mode); + std::vector measurements; + measurements.push_back(make_ternary( + fltx_info(operation), inputs, + implementation( + implementations::primary_identity, + fltx_api(operation), + std::move(evaluate)))); + (add_ternary(measurements, inputs, std::move(comparisons)), ...); + run(group, operation, inputs.size(), std::move(measurements)); + } + + template + void workload( + std::string_view operation, + std::size_t iterations, + FltxTrial fltx_trial, + Tasks... comparisons) + { + if (!selected(operation)) + return; + + std::vector measurements; + measurements.push_back(make_workload_task( + fltx_info(operation), + iterations, + task( + implementations::primary_identity, + "same workload", + std::move(fltx_trial)))); + (add_workload_task( + measurements, + iterations, + std::move(comparisons)), ...); + run("mixed_workloads", operation, iterations, std::move(measurements)); + } + + template + void measured_task( + std::string_view group, + std::string_view operation, + std::size_t operations_per_batch, + FltxTrial fltx_trial, + Tasks... comparisons) + { + if (!selected(operation)) + return; + + std::vector measurements; + measurements.push_back(make_task( + fltx_info(operation), + operations_per_batch, + task( + implementations::primary_identity, + fltx_api(operation), + std::move(fltx_trial)))); + (add_task( + measurements, + operations_per_batch, + std::move(comparisons)), ...); + run( + group, + operation, + operations_per_batch, + std::move(measurements)); + } + + private: + template + struct input_values + { + using value_type = Value; + + std::vector x; + std::vector y; + std::vector z; + }; + + struct measurement + { + implementation_info info; + std::size_t operations_per_batch; + std::function elapsed; + }; + + template + [[nodiscard]] static measurement make_measurement( + implementation_info info, + std::size_t operations_per_batch, + Trial trial) + { + auto shared_trial = + std::make_shared>(std::move(trial)); + return { + std::move(info), + operations_per_batch, + [shared_trial = std::move(shared_trial)](std::size_t batches) { + return elapsed_ns(batches, *shared_trial); + } + }; + } + + template + [[nodiscard]] static input_values convert_inputs( + const std::vector& inputs) + { + input_values out; + out.x.reserve(inputs.size()); + out.y.reserve(inputs.size()); + out.z.reserve(inputs.size()); + for (const samples::input& input : inputs) + { + out.x.push_back( + implementations::value_traits::from_sample(input.x)); + out.y.push_back( + implementations::value_traits::from_sample(input.y)); + out.z.push_back( + implementations::value_traits::from_sample(input.z)); + } + return out; + } + + [[nodiscard]] implementation_info fltx_info( + std::string_view operation) const + { + return describe( + implementations::primary_identity, + fltx_api(operation)); + } + + [[nodiscard]] static std::string fltx_api(std::string_view operation) + { + return "bl::" + std::string(operation); + } + + template + [[nodiscard]] measurement make_unary( + implementation_info, + const std::vector& inputs, + Spec spec) + { + using value = typename Spec::value_type; + auto converted = convert_inputs(inputs).x; + const std::size_t operations = converted.size(); + return make_measurement( + std::move(spec.info), + operations, + [values = std::move(converted), + evaluate = std::move(spec.evaluate)](std::size_t batches) { + checksum_accumulator checksum; + for (std::size_t batch = 0; batch < batches; ++batch) + { + visit_rotated(values.size(), batch, [&](std::size_t i) { + const value result{ evaluate(values[i]) }; + checksum.add(result); + }); + } + return checksum.value(); + }); + } + + template + [[nodiscard]] measurement make_unary_result( + implementation_info, + const std::vector& inputs, + Spec spec) + { + using value = typename Spec::value_type; + auto converted = convert_inputs(inputs).x; + const std::size_t operations = converted.size(); + return make_measurement( + std::move(spec.info), + operations, + [values = std::move(converted), + evaluate = std::move(spec.evaluate)](std::size_t batches) { + checksum_accumulator checksum; + for (std::size_t batch = 0; batch < batches; ++batch) + { + visit_rotated(values.size(), batch, [&](std::size_t i) { + checksum.add(evaluate(values[i])); + }); + } + return checksum.value(); + }); + } + + template + [[nodiscard]] measurement make_binary( + implementation_info, + const std::vector& inputs, + Spec spec) + { + using value = typename Spec::value_type; + auto converted = convert_inputs(inputs); + const std::size_t operations = converted.x.size(); + return make_measurement( + std::move(spec.info), + operations, + [values = std::move(converted), + evaluate = std::move(spec.evaluate)](std::size_t batches) { + checksum_accumulator checksum; + for (std::size_t batch = 0; batch < batches; ++batch) + { + visit_rotated(values.x.size(), batch, [&](std::size_t i) { + const value result{ + evaluate(values.x[i], values.y[i]) + }; + checksum.add(result); + }); + } + return checksum.value(); + }); + } + + template + [[nodiscard]] measurement make_binary_result( + implementation_info, + const std::vector& inputs, + Spec spec) + { + using value = typename Spec::value_type; + auto converted = convert_inputs(inputs); + const std::size_t operations = converted.x.size(); + return make_measurement( + std::move(spec.info), + operations, + [values = std::move(converted), + evaluate = std::move(spec.evaluate)](std::size_t batches) { + checksum_accumulator checksum; + for (std::size_t batch = 0; batch < batches; ++batch) + { + visit_rotated(values.x.size(), batch, [&](std::size_t i) { + checksum.add(evaluate(values.x[i], values.y[i])); + }); + } + return checksum.value(); + }); + } + + template + [[nodiscard]] measurement make_ternary( + implementation_info, + const std::vector& inputs, + Spec spec) + { + using value = typename Spec::value_type; + auto converted = convert_inputs(inputs); + const std::size_t operations = converted.x.size(); + return make_measurement( + std::move(spec.info), + operations, + [values = std::move(converted), + evaluate = std::move(spec.evaluate)](std::size_t batches) { + checksum_accumulator checksum; + for (std::size_t batch = 0; batch < batches; ++batch) + { + visit_rotated(values.x.size(), batch, [&](std::size_t i) { + const value result{ evaluate( + values.x[i], values.y[i], values.z[i]) }; + checksum.add(result); + }); + } + return checksum.value(); + }); + } + + template + [[nodiscard]] measurement make_task( + implementation_info, + std::size_t operations_per_batch, + Spec spec) + { + return make_measurement( + std::move(spec.info), + operations_per_batch, + std::move(spec.trial)); + } + + template + [[nodiscard]] measurement make_workload_task( + implementation_info, + std::size_t operations_per_batch, + Spec spec) + { + return make_measurement( + std::move(spec.info), + operations_per_batch, + [trial = std::move(spec.trial)](std::size_t batches) { + checksum_accumulator checksum; + for (std::size_t batch = 0; batch < batches; ++batch) + checksum.add(trial(batch)); + return checksum.value(); + }); + } + + template + void add_unary( + std::vector& out, + const std::vector& inputs, + Spec spec) + { + if (spec.info.enabled) + out.push_back(make_unary(spec.info, inputs, std::move(spec))); + } + + template + void add_unary_result( + std::vector& out, + const std::vector& inputs, + Spec spec) + { + if (spec.info.enabled) + out.push_back( + make_unary_result(spec.info, inputs, std::move(spec))); + } + + template + void add_binary( + std::vector& out, + const std::vector& inputs, + Spec spec) + { + if (spec.info.enabled) + out.push_back(make_binary(spec.info, inputs, std::move(spec))); + } + + template + void add_binary_result( + std::vector& out, + const std::vector& inputs, + Spec spec) + { + if (spec.info.enabled) + out.push_back( + make_binary_result(spec.info, inputs, std::move(spec))); + } + + template + void add_ternary( + std::vector& out, + const std::vector& inputs, + Spec spec) + { + if (spec.info.enabled) + out.push_back(make_ternary(spec.info, inputs, std::move(spec))); + } + + template + void add_task( + std::vector& out, + std::size_t operations_per_batch, + Spec spec) + { + if (spec.info.enabled) + out.push_back(make_task( + spec.info, + operations_per_batch, + std::move(spec))); + } + + template + void add_workload_task( + std::vector& out, + std::size_t operations_per_batch, + Spec spec) + { + if (spec.info.enabled) + { + out.push_back(make_workload_task( + spec.info, + operations_per_batch, + std::move(spec))); + } + } + + template + static void visit_rotated( + std::size_t count, + std::size_t batch, + Visit visit) + { + const std::size_t first = batch % count; + for (std::size_t i = first; i < count; ++i) + visit(i); + for (std::size_t i = 0; i < first; ++i) + visit(i); + } + + [[nodiscard]] bool selected(std::string_view operation) const + { + return settings_.filter.empty() || + operation.find(settings_.filter) != std::string_view::npos; + } + + [[nodiscard]] static std::string trial_list( + const std::vector& trials) + { + std::string out; + for (const double trial : trials) + { + if (!out.empty()) + out.push_back('|'); + out += number(trial); + } + return out; + } + + [[nodiscard]] static double total_elapsed(const timing_result& timing) + { + double total = 0.0; + for (const double elapsed : timing.elapsed_trials_ns) + total += elapsed; + return total; + } + + static void append_elapsed( + timing_result& result, + std::size_t operations_per_batch, + std::size_t batches, + double elapsed) + { + const std::size_t operations = operations_per_batch * batches; + result.batches += batches; + result.operations += operations; + result.trials_ns.push_back( + elapsed / static_cast(operations)); + result.elapsed_trials_ns.push_back(elapsed); + } + + static void finish_timing(timing_result& result) + { + std::vector sorted = result.trials_ns; + std::sort(sorted.begin(), sorted.end()); + result.median_ns = sorted[sorted.size() / 2]; + } + + void run( + std::string_view group, + std::string_view operation, + std::size_t samples, + std::vector measurements) + { + if (measurements.empty() || measurements.front().info.id != "fltx") + throw std::logic_error("benchmark operation must start with fltx"); + + std::unordered_set ids; + for (const measurement& value : measurements) + { + if (!ids.insert(value.info.id).second) + { + throw std::logic_error( + "duplicate benchmark implementation " + value.info.id); + } + } + + std::vector results(measurements.size()); + for (timing_result& result : results) + { + result.trials_ns.reserve(settings_.trials); + result.elapsed_trials_ns.reserve(settings_.trials); + } + + if (settings_.sample_mode == "small" || + settings_.sample_mode == "standard") + { + timing_policy::for_each_measurement_primary_first( + measurements.size(), + [&](std::size_t index) { + measurement& value = measurements[index]; + const double pilot = value.elapsed(1); + const double ns_per_iteration = pilot / + static_cast(value.operations_per_batch); + const auto policy = timing_policy::select(ns_per_iteration); + const auto calibration = timing_policy::calibrate_after_pilot( + value.elapsed, + pilot, + policy.target_trial_ns, + maximum_batches); + + std::size_t requested = + std::min(settings_.trials, policy.trials); + if (requested % 2 == 0) + --requested; + requested = std::max(1, requested); + const std::size_t trials = timing_policy::fitting_trials( + requested, + calibration.elapsed_ns); + + if (calibration.elapsed_ns > timing_policy::maximum_row_ns) + { + std::cerr + << "warning: benchmark row exceeded the adaptive " + "five-second budget during calibration; using " + "that measurement as its sole trial: " + << implementations::precision_name << ' ' + << operation << ' ' << value.info.id << '\n'; + append_elapsed( + results[index], + value.operations_per_batch, + calibration.batches, + calibration.elapsed_ns); + return; + } + + for (std::size_t trial = 0; trial < trials; ++trial) + { + append_elapsed( + results[index], + value.operations_per_batch, + calibration.batches, + value.elapsed(calibration.batches)); + } + }); + } + else + { + timing_policy::for_each_measurement_primary_first( + measurements.size(), + [&](std::size_t index) { + measurement& value = measurements[index]; + const auto calibration = timing_policy::calibrate_once( + value.elapsed, + settings_.minimum_trial_ns, + maximum_batches); + for (std::size_t trial = 0; + trial < settings_.trials; + ++trial) + { + append_elapsed( + results[index], + value.operations_per_batch, + calibration.batches, + value.elapsed(calibration.batches)); + } + }); + } + for (timing_result& result : results) + finish_timing(result); + + for (std::size_t i = 0; i < results.size(); ++i) + { + if (results[i].median_ns < minimum_credible_iteration_ns) + { + throw std::runtime_error( + "benchmark produced an implausibly small timing; " + "the workload may have been optimized away: " + + std::string(implementations::precision_name) + + " " + std::string(operation) + " " + + measurements[i].info.id); + } + } + + const double fltx_ns = results.front().median_ns; + for (std::size_t i = 0; i < measurements.size(); ++i) + { + const bool is_fltx = i == 0; + output_.row({ + std::string(schema_version), + settings_.run_id, + settings_.source_revision, + fltx::tests::support::source_fingerprint, + std::string(implementations::precision_name), + std::string(group), + std::string(operation), + measurements[i].info.id, + measurements[i].info.short_label, + measurements[i].info.label, + measurements[i].info.api, + std::to_string(samples), + number(results[i].median_ns), + trial_list(results[i].trials_ns), + std::to_string(results[i].operations), + number(total_elapsed(results[i])), + is_fltx + ? std::string{} + : number(results[i].median_ns / fltx_ns) + }); + } + + std::cout << std::left + << std::setw(8) + << implementations::precision_name + << std::setw(34) + << operation + << std::right + << std::fixed + << std::setprecision(2) + << std::setw(12) + << fltx_ns + << " ns"; + for (std::size_t i = 1; i < measurements.size(); ++i) + { + std::cout << " " + << std::setw(7) + << results[i].median_ns / fltx_ns + << "x " + << measurements[i].info.short_label; + } + if (measurements.size() == 1) + std::cout << " fltx only"; + std::cout << '\n' << std::flush; + } + + csv_writer& output_; + const options& settings_; + std::vector values_; + }; + + void run_operations_f128(csv_writer& output, const options& settings); + void run_operations_f256(csv_writer& output, const options& settings); + void run_workloads_f128(csv_writer& output, const options& settings); + void run_workloads_f256(csv_writer& output, const options& settings); +} + +#endif diff --git a/validation/benchmarks/runtime/samples.hpp b/validation/benchmarks/runtime/samples.hpp new file mode 100644 index 0000000..ed065c7 --- /dev/null +++ b/validation/benchmarks/runtime/samples.hpp @@ -0,0 +1,274 @@ +#ifndef FLTX_TESTS_BENCHMARK_SAMPLES_INCLUDED +#define FLTX_TESTS_BENCHMARK_SAMPLES_INCLUDED + +#include "../../support/samples.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fltx::tests::benchmark::samples +{ + struct input + { + sample x; + sample y; + sample z; + }; + + [[nodiscard]] inline double signed_log( + random_bits& rng, + int minimum_exponent, + int maximum_exponent) + { + const int span = maximum_exponent - minimum_exponent + 1; + const int exponent = minimum_exponent + + static_cast(rng.next() % static_cast(span)); + const double sign = (rng.next() & 1u) != 0 ? 1.0 : -1.0; + return sign * std::ldexp(rng.between(1.0, 2.0), exponent); + } + + [[nodiscard]] inline double positive_log( + random_bits& rng, + int minimum_exponent, + int maximum_exponent) + { + return std::abs(signed_log(rng, minimum_exponent, maximum_exponent)); + } + + [[nodiscard]] inline bool uses_large_adaptive_corpus( + std::string_view operation) + { + constexpr std::string_view operations[] = { + "add", "subtract", "multiply", "divide", + "equal", "not_equal", "less", "less_equal", "greater", + "greater_equal", "abs", "fabs", "fmin", "fmax", "fdim", + "copysign", "fma", "modf", "ldexp", "scalbn", "scalbln", + "frexp", "ilogb", "logb", "nextafter", "nexttoward", + "floor", "ceil", "trunc", "round", "roundeven", "sqrt", "sqr", + }; + return std::find( + std::begin(operations), + std::end(operations), + operation) != std::end(operations); + } + + [[nodiscard]] inline std::size_t count_for( + std::string_view operation, + std::size_t base_count, + std::string_view sample_mode = "custom") + { + const bool adaptive = sample_mode == "small" || sample_mode == "standard"; + if ( + adaptive && + (operation == "erf" || operation == "erfc" || + operation == "lgamma" || operation == "tgamma")) + { + return std::max(1, base_count / 32); + } + + if (adaptive && uses_large_adaptive_corpus(operation)) + return base_count * 10; + + if (operation == "lround" || operation == "llround") + return std::min(base_count, 8192); + + if (operation == "fmod" || operation == "remainder" || operation == "remquo") + return std::max(1, base_count / 2); + + if (operation == "erf" || operation == "erfc" || + operation == "lgamma" || operation == "tgamma" || + operation == "asin" || operation == "acos" || + operation == "atan" || operation == "atan2" || + operation == "asinh" || operation == "acosh" || + operation == "atanh" || operation == "pow" || + operation == "cbrt" || operation == "sin" || + operation == "cos" || operation == "sincos" || + operation == "tan" || operation == "exp" || + operation == "exp2" || operation == "expm1" || + operation == "log" || operation == "log2" || + operation == "log10" || operation == "log1p" || + operation == "sinh" || operation == "cosh" || + operation == "tanh") + { + return std::max(1, base_count / 4); + } + + return base_count; + } + + [[nodiscard]] inline std::vector make( + std::string_view operation, + std::size_t base_count, + std::string_view sample_mode = "custom") + { + const std::size_t count = count_for(operation, base_count, sample_mode); + std::vector out; + out.reserve(count); + random_bits rng(default_seed ^ 0xb3f4219c5d7a0e61ull); + + const auto append = [&](double x, double y = 0.0, double z = 0.0) { + out.push_back({ make_sample(x), make_sample(y), make_sample(z) }); + }; + + for (std::size_t index = 0; index < count; ++index) + { + if (operation == "sin" || operation == "cos" || operation == "sincos" || + operation == "tan") + { + double x = rng.between(-0x1p16, 0x1p16); + if ((index & 1u) != 0) + x += 1.57079632679489661923; + append(x); + } + else if (operation == "exp") + append(rng.between(-40.0, 40.0)); + else if (operation == "exp2") + append(rng.between(-128.0, 128.0)); + else if (operation == "expm1") + append(rng.between(-20.0, 20.0)); + else if (operation == "log1p") + append(rng.between(-0.95, 20.0)); + else if (operation == "asin" || operation == "acos") + append(rng.between(-1.0, 1.0)); + else if (operation == "atanh") + append(rng.between(-0.999, 0.999)); + else if (operation == "acosh") + append(1.0 + positive_log(rng, -20, 20)); + else if (operation == "sinh" || + operation == "cosh" || operation == "tanh") + append(rng.between(-40.0, 40.0)); + else if (operation == "asinh") + append(signed_log(rng, -40, 40)); + else if (operation == "erf" || operation == "erfc") + append(rng.between(-6.0, 6.0)); + else if (operation == "lgamma" || operation == "tgamma") + { + const double magnitude = rng.between(0.125, 35.0); + const double x = index % 5 == 4 ? -magnitude - 0.25 : magnitude; + append(x); + } + else if (operation == "pow") + { + switch (index % 5) + { + case 0: append(positive_log(rng, -12, 12), rng.between(-6.0, 6.0)); break; + case 1: append(rng.between(0.875, 1.125), rng.between(-256.0, 256.0)); break; + case 2: append(positive_log(rng, -32, 32), rng.between(-2.0, 2.0)); break; + case 3: append(rng.between(0.125, 64.0), static_cast(static_cast(rng.next() % 33) - 16)); break; + default: append(-positive_log(rng, -12, 12), static_cast(static_cast(rng.next() % 33) - 16)); break; + } + } + else if (operation == "fma" || operation == "product_sum") + { + const double x = signed_log(rng, -24, 24); + const double y = signed_log(rng, -24, 24); + const double product = x * y; + double z = 0.0; + switch (index % 4) + { + case 0: z = signed_log(rng, -48, 48); break; + case 1: z = -product + std::ldexp(product, -12); break; + case 2: z = -0.5 * product; break; + default: z = signed_log(rng, -12, 12); break; + } + append(x, y, z); + } + else if (operation == "floor" || operation == "ceil" || + operation == "trunc" || operation == "round" || + operation == "roundeven" || operation == "lround" || + operation == "llround" || operation == "modf") + { + switch (index % 4) + { + case 0: append(rng.between(-1.0e6, 1.0e6)); break; + case 1: + append(static_cast( + static_cast(rng.next() % 2'000'001) - 1'000'000) + 0.5); + break; + case 2: + append(static_cast( + static_cast(rng.next() % 2'000'001) - 1'000'000)); + break; + default: append(signed_log(rng, -20, 29)); break; + } + } + else if (operation == "fmod" || operation == "remainder" || + operation == "remquo") + { + append(signed_log(rng, -40, 40), signed_log(rng, -16, 16)); + } + else if (operation == "sqrt" || operation == "recip" || + operation == "log" || operation == "log2" || + operation == "log10" || operation == "ilogb" || + operation == "logb") + { + append(positive_log(rng, -80, 80)); + } + else if (operation == "hypot") + append(signed_log(rng, -80, 80), signed_log(rng, -80, 80)); + else if (operation == "equal" || operation == "not_equal" || + operation == "less" || operation == "less_equal" || + operation == "greater" || operation == "greater_equal") + { + const double x = signed_log(rng, -80, 80); + const double y = index % 5 == 0 ? x : + index % 5 == 1 ? std::nextafter( + x, std::numeric_limits::infinity()) : + index % 5 == 2 ? std::nextafter( + x, -std::numeric_limits::infinity()) : + index % 5 == 3 ? -x : signed_log(rng, -80, 80); + append(x, y); + } + else if (operation == "divide" || operation == "atan2") + { + append(signed_log(rng, -80, 80), signed_log(rng, -80, 80)); + } + else if (operation == "add" || operation == "subtract" || + operation == "multiply" || operation == "fmin" || + operation == "fmax" || operation == "fdim" || + operation == "copysign") + { + const double x = signed_log(rng, -80, 80); + const double y = index % 4 == 1 ? -x : + index % 4 == 2 ? x : signed_log(rng, -80, 80); + append(x, y); + } + else if (operation == "cbrt" || operation == "atan" || + operation == "abs" || operation == "fabs" || + operation == "sqr" || operation == "ipow" || + operation == "frexp" || operation == "nextafter" || + operation == "nexttoward") + { + append(signed_log(rng, -80, 80), signed_log(rng, -80, 80)); + } + else + { + append(rng.between(-4.0, 4.0), rng.between(-4.0, 4.0), + rng.between(-4.0, 4.0)); + } + } + + return out; + } + + [[nodiscard]] inline std::vector decimal_strings( + std::size_t count, + int significant_digits) + { + return fltx::tests::decimal_strings( + count, + significant_digits, + -80, + 80, + default_seed ^ 0x5c7b61e29a40fd83ull); + } +} + +#endif diff --git a/validation/benchmarks/runtime/timing_policy.hpp b/validation/benchmarks/runtime/timing_policy.hpp new file mode 100644 index 0000000..e48d187 --- /dev/null +++ b/validation/benchmarks/runtime/timing_policy.hpp @@ -0,0 +1,111 @@ +#ifndef FLTX_TESTS_BENCHMARK_TIMING_POLICY_INCLUDED +#define FLTX_TESTS_BENCHMARK_TIMING_POLICY_INCLUDED + +#include +#include +#include +#include +#include + +namespace fltx::tests::benchmark::timing_policy +{ + inline constexpr std::string_view identity = "adaptive-v2"; + inline constexpr double fast_threshold_ns = 20.0; + inline constexpr double slow_threshold_ns = 10'000.0; + inline constexpr double fast_trial_target_ns = 15'000'000.0; + inline constexpr double normal_trial_target_ns = 8'000'000.0; + inline constexpr double maximum_row_ns = 5'000'000'000.0; + inline constexpr std::size_t fast_trials = 7; + inline constexpr std::size_t ordinary_trials = 3; + + struct trial_policy + { + std::size_t trials; + double target_trial_ns; + }; + + struct calibration + { + std::size_t batches; + double elapsed_ns; + std::size_t calls; + }; + + template + void for_each_measurement_primary_first( + std::size_t measurement_count, + Measure&& measure) + { + for (std::size_t index = 0; index < measurement_count; ++index) + measure(index); + } + + [[nodiscard]] inline trial_policy select(double ns_per_iteration) noexcept + { + if (ns_per_iteration < fast_threshold_ns) + return { fast_trials, fast_trial_target_ns }; + if (ns_per_iteration < slow_threshold_ns) + return { ordinary_trials, normal_trial_target_ns }; + return { ordinary_trials, 0.0 }; + } + + [[nodiscard]] inline std::size_t fitting_trials( + std::size_t requested, + double estimated_trial_ns) noexcept + { + if (requested == 0 || estimated_trial_ns <= 0.0) + return 1; + while ( + requested > 1 && + static_cast(requested) * estimated_trial_ns > maximum_row_ns) + { + requested -= 2; + } + return std::max(1, requested); + } + + template + [[nodiscard]] calibration calibrate_after_pilot( + Measure&& measure, + double pilot_elapsed_ns, + double target_ns, + std::size_t maximum_batches) + { + std::size_t batches = 1; + double elapsed = pilot_elapsed_ns; + std::size_t calls = 1; + if (target_ns <= 0.0) + return { batches, elapsed, calls }; + + for (int attempt = 1; attempt < 5; ++attempt) + { + if (elapsed >= target_ns || batches == maximum_batches) + break; + const double scale = target_ns / std::max(elapsed, 1.0); + const auto requested = static_cast( + std::ceil(static_cast(batches) * scale * 1.1)); + batches = std::min( + maximum_batches, + std::max(batches + 1, requested)); + elapsed = measure(batches); + ++calls; + } + return { batches, elapsed, calls }; + } + + template + [[nodiscard]] calibration calibrate_once( + Measure&& measure, + double target_ns, + std::size_t maximum_batches) + { + const double pilot_elapsed_ns = measure(1); + return calibrate_after_pilot( + std::forward(measure), + pilot_elapsed_ns, + target_ns, + maximum_batches); + } +} + +#endif diff --git a/validation/benchmarks/runtime/workloads.cpp b/validation/benchmarks/runtime/workloads.cpp new file mode 100644 index 0000000..53a0a22 --- /dev/null +++ b/validation/benchmarks/runtime/workloads.cpp @@ -0,0 +1,504 @@ +#include "../../support/tlfloat_ops.hpp" +#include "runner.hpp" + +#include + +#include + +namespace fltx::tests::benchmark +{ + namespace + { + template + using qd_value = std::conditional_t, + implementations::qd_f128, implementations::qd_f256>; + + template + using boost_value = std::conditional_t, + implementations::cppdd, implementations::mpfr64>; + + template + using tlfloat_value = + std::conditional_t, implementations::tl_f128, + implementations::tl_f256>; + + template [[nodiscard]] Value workload_sin(const Value& value) + { + using boost::multiprecision::sin; + return sin(value); + } + + template [[nodiscard]] Value workload_cos(const Value& value) + { + using boost::multiprecision::cos; + return cos(value); + } + + template [[nodiscard]] Value workload_exp(const Value& value) + { + using boost::multiprecision::exp; + return exp(value); + } + + template [[nodiscard]] Value workload_log(const Value& value) + { + using boost::multiprecision::log; + return log(value); + } + + template [[nodiscard]] Value workload_sqrt(const Value& value) + { + using boost::multiprecision::sqrt; + return sqrt(value); + } + + template + [[nodiscard]] Value workload_atan2(const Value& y, const Value& x) + { + using boost::multiprecision::atan2; + return atan2(y, x); + } + + template + [[nodiscard]] Value matrix_vector_4x4_trial(std::size_t batch) + { + Value x{0.5 + static_cast(batch % 31) * 0x1p-20}; + Value y{-0.75}; + Value z{1.25}; + Value w{1.0}; + + const Value m00{1.0009765625}; + const Value m01{-0.00048828125}; + const Value m02{0.000244140625}; + const Value m03{0.0001220703125}; + const Value m10{0.000244140625}; + const Value m11{0.99951171875}; + const Value m12{-0.0001220703125}; + const Value m13{0.000244140625}; + const Value m20{-0.0001220703125}; + const Value m21{0.000244140625}; + const Value m22{1.00048828125}; + const Value m23{-0.00048828125}; + const Value m30{0.00006103515625}; + const Value m31{-0.0001220703125}; + const Value m32{0.000244140625}; + const Value m33{0.999755859375}; + const Value t0{0.00006103515625}; + const Value t1{-0.000030517578125}; + const Value t2{0.0000152587890625}; + const Value t3{-0.00000762939453125}; + + for (std::size_t i = 0; i < 64; ++i) + { + const Value next_x{m00 * x + m01 * y + m02 * z + m03 * w + t0}; + const Value next_y{m10 * x + m11 * y + m12 * z + m13 * w + t1}; + const Value next_z{m20 * x + m21 * y + m22 * z + m23 * w + t2}; + const Value next_w{m30 * x + m31 * y + m32 * z + m33 * w + t3}; + x = next_x; + y = next_y; + z = next_z; + w = next_w; + } + return Value{x + y + z + w}; + } + + template + [[nodiscard]] Value horner_polynomial_trial(std::size_t batch) + { + // Expanded coefficients of (x - 1)^12 provide a familiar + // Horner evaluation with controlled cancellation near x = 1. + const std::array coefficients{ + Value{1.0}, Value{-12.0}, Value{66.0}, Value{-220.0}, Value{495.0}, + Value{-792.0}, Value{924.0}, Value{-792.0}, Value{495.0}, Value{-220.0}, + Value{66.0}, Value{-12.0}, Value{1.0} + }; + Value x{0.875 + static_cast(batch % 31) * 0x1p-20}; + const Value step{0x1p-20}; + Value total{0.0}; + + for (std::size_t repetition = 0; repetition < 64; ++repetition) + { + Value result{coefficients.front()}; + for (std::size_t i = 1; i < coefficients.size(); ++i) + result = result * x + coefficients[i]; + total += result; + x += step; + } + return total; + } + + template + [[nodiscard]] Value newton_root_trial(std::size_t batch) + { + const Value a{0.25 + static_cast(batch % 31) * 0x1p-20}; + const Value three{3.0}; + const Value one{1.0}; + Value x{1.25}; + + for (std::size_t i = 0; i < 8; ++i) + { + const Value x_squared{x * x}; + const Value numerator{x_squared * x - x - a}; + const Value denominator{three * x_squared - one}; + x -= numerator / denominator; + } + return x; + } + + template + [[nodiscard]] Value log_sum_exp_trial( + std::size_t batch, + Exp evaluate_exp, + Log evaluate_log) + { + std::array values{ + Value{-4.0}, Value{-2.5}, Value{-1.0}, Value{0.25}, + Value{1.5}, Value{3.0}, Value{4.25}, + Value{5.0 + static_cast(batch % 31) * 0x1p-20} + }; + const Value step{0x1p-18}; + Value total{0.0}; + + for (std::size_t repetition = 0; repetition < values.size(); ++repetition) + { + Value maximum{values.front()}; + for (std::size_t i = 1; i < values.size(); ++i) + { + if (values[i] > maximum) + maximum = values[i]; + } + + Value sum{0.0}; + for (const Value& value : values) + { + const Value shifted{value - maximum}; + sum += evaluate_exp(shifted); + } + total += maximum + evaluate_log(sum); + values[repetition] += step; + } + return total; + } + + template + [[nodiscard]] Value haversine_trial( + std::size_t batch, + Sin evaluate_sin, + Cos evaluate_cos, + Sqrt evaluate_sqrt, + Atan2 evaluate_atan2) + { + Value latitude1{0.4 + static_cast(batch % 31) * 0x1p-20}; + Value latitude2{0.7}; + Value longitude1{-1.2}; + Value longitude2{0.3}; + const Value half{0.5}; + const Value one{1.0}; + const Value two{2.0}; + const Value step{0x1p-18}; + Value total{0.0}; + + for (std::size_t i = 0; i < 8; ++i) + { + const Value delta_latitude{latitude2 - latitude1}; + const Value delta_longitude{longitude2 - longitude1}; + const Value half_delta_latitude{delta_latitude * half}; + const Value half_delta_longitude{delta_longitude * half}; + const Value sin_latitude{evaluate_sin(half_delta_latitude)}; + const Value sin_longitude{evaluate_sin(half_delta_longitude)}; + const Value haversine{ + sin_latitude * sin_latitude + + evaluate_cos(latitude1) * evaluate_cos(latitude2) * + sin_longitude * sin_longitude + }; + const Value complement{one - haversine}; + total += two * evaluate_atan2( + evaluate_sqrt(haversine), + evaluate_sqrt(complement)); + latitude1 += step; + longitude2 -= step; + } + return total; + } + + template void run_workloads(csv_writer& output, const options& settings) + { + runner run(output, settings); + using qd = qd_value; + using boost_type = boost_value; + using tl_type = tlfloat_value; + constexpr std::size_t repetitions = 64; + + run.workload( + "chained_arithmetic", repetitions, + [](std::size_t batch) { + Float x{1.125 + static_cast(batch % 31) * 0x1p-20}; + const Float a{0.75}; + const Float b{1.0009765625}; + for (std::size_t i = 0; i < repetitions; ++i) + x = ((x * b + a) / (b + 0.5)) - a * 0.25; + return x; + }, + task(implementations::qdpp_identity, "same workload", + [](std::size_t batch) { + qd x{1.125 + static_cast(batch % 31) * 0x1p-20}; + const qd a{0.75}; + const qd b{1.0009765625}; + for (std::size_t i = 0; i < repetitions; ++i) + x = ((x * b + a) / (b + 0.5)) - a * 0.25; + return x; + }), + task(implementations::boost_identity, "same workload", + [](std::size_t batch) { + boost_type x{1.125 + static_cast(batch % 31) * 0x1p-20}; + const boost_type a{0.75}; + const boost_type b{1.0009765625}; + for (std::size_t i = 0; i < repetitions; ++i) + x = ((x * b + a) / (b + 0.5)) - a * 0.25; + return x; + }), + task(implementations::tlfloat_identity, "same workload", + [](std::size_t batch) { + tl_type x{1.125 + static_cast(batch % 31) * 0x1p-20}; + const tl_type a{0.75}; + const tl_type b{1.0009765625}; + for (std::size_t i = 0; i < repetitions; ++i) + x = ((x * b + a) / (b + 0.5)) - a * 0.25; + return x; + })); + + run.workload( + "affine_trig", repetitions, + [](std::size_t batch) { + Float x{0.125 + static_cast(batch % 31) * 0x1p-20}; + for (std::size_t i = 0; i < repetitions; ++i) + x = bl::sin(x * 1.001 + 0.125) + bl::cos(x - 0.25); + return x; + }, + task(implementations::qdpp_identity, "same workload", + [](std::size_t batch) { + qd x{0.125 + static_cast(batch % 31) * 0x1p-20}; + for (std::size_t i = 0; i < repetitions; ++i) + x = ::sin(x * 1.001 + 0.125) + ::cos(x - 0.25); + return x; + }), + task(implementations::boost_identity, "same workload", + [](std::size_t batch) { + boost_type x{0.125 + static_cast(batch % 31) * 0x1p-20}; + for (std::size_t i = 0; i < repetitions; ++i) + { + x = workload_sin(x * 1.001 + 0.125) + workload_cos(x - 0.25); + } + return x; + }), + task(implementations::tlfloat_identity, "same workload", + [](std::size_t batch) { + tl_type x{0.125 + static_cast(batch % 31) * 0x1p-20}; + for (std::size_t i = 0; i < repetitions; ++i) + { + x = tlfloat_ops::sin(x * 1.001 + 0.125) + tlfloat_ops::cos(x - 0.25); + } + return x; + })); + + run.workload( + "mandelbrot", repetitions, + [](std::size_t batch) { + Float x{0.0}; + Float y{0.0}; + const Float cx{-0.743643887037151 + static_cast(batch % 31) * 0x1p-24}; + const Float cy{0.131825904205330}; + for (std::size_t i = 0; i < repetitions; ++i) + { + const Float next_x{x * x - y * y + cx}; + y = 2.0 * x * y + cy; + x = next_x; + } + return Float{x + y}; + }, + task(implementations::qdpp_identity, "same workload", + [](std::size_t batch) { + qd x{0.0}; + qd y{0.0}; + const qd cx{-0.743643887037151 + + static_cast(batch % 31) * 0x1p-24}; + const qd cy{0.131825904205330}; + for (std::size_t i = 0; i < repetitions; ++i) + { + const qd next_x = x * x - y * y + cx; + y = qd{2} * x * y + cy; + x = next_x; + } + return qd{x + y}; + }), + task(implementations::boost_identity, "same workload", + [](std::size_t batch) { + boost_type x{0.0}; + boost_type y{0.0}; + const boost_type cx{-0.743643887037151 + + static_cast(batch % 31) * 0x1p-24}; + const boost_type cy{0.131825904205330}; + for (std::size_t i = 0; i < repetitions; ++i) + { + const boost_type next_x = x * x - y * y + cx; + y = boost_type{2} * x * y + cy; + x = next_x; + } + return boost_type{x + y}; + }), + task(implementations::tlfloat_identity, "same workload", + [](std::size_t batch) { + tl_type x{0.0}; + tl_type y{0.0}; + const tl_type cx{-0.743643887037151 + + static_cast(batch % 31) * 0x1p-24}; + const tl_type cy{0.131825904205330}; + for (std::size_t i = 0; i < repetitions; ++i) + { + const tl_type next_x = x * x - y * y + cx; + y = tl_type{2} * x * y + cy; + x = next_x; + } + return tl_type{x + y}; + })); + + run.workload( + "matrix_vector_4x4", repetitions, + [](std::size_t batch) { + return matrix_vector_4x4_trial(batch); + }, + task(implementations::qdpp_identity, "same workload", + [](std::size_t batch) { + return matrix_vector_4x4_trial(batch); + }), + task(implementations::boost_identity, "same workload", + [](std::size_t batch) { + return matrix_vector_4x4_trial(batch); + }), + task(implementations::tlfloat_identity, "same workload", + [](std::size_t batch) { + return matrix_vector_4x4_trial(batch); + })); + + run.workload( + "horner_polynomial", repetitions, + [](std::size_t batch) { + return horner_polynomial_trial(batch); + }, + task(implementations::qdpp_identity, "same workload", + [](std::size_t batch) { + return horner_polynomial_trial(batch); + }), + task(implementations::boost_identity, "same workload", + [](std::size_t batch) { + return horner_polynomial_trial(batch); + }), + task(implementations::tlfloat_identity, "same workload", + [](std::size_t batch) { + return horner_polynomial_trial(batch); + })); + + constexpr std::size_t newton_iterations = 8; + run.workload( + "newton_root", newton_iterations, + [](std::size_t batch) { + return newton_root_trial(batch); + }, + task(implementations::qdpp_identity, "same workload", + [](std::size_t batch) { + return newton_root_trial(batch); + }), + task(implementations::boost_identity, "same workload", + [](std::size_t batch) { + return newton_root_trial(batch); + }), + task(implementations::tlfloat_identity, "same workload", + [](std::size_t batch) { + return newton_root_trial(batch); + })); + + constexpr std::size_t formula_repetitions = 8; + run.workload( + "log_sum_exp", formula_repetitions, + [](std::size_t batch) { + return log_sum_exp_trial( + batch, + [](const auto& value) { return bl::exp(value); }, + [](const auto& value) { return bl::log(value); }); + }, + task(implementations::qdpp_identity, "same workload", + [](std::size_t batch) { + return log_sum_exp_trial( + batch, + [](const auto& value) { return ::exp(value); }, + [](const auto& value) { return ::log(value); }); + }), + task(implementations::boost_identity, "same workload", + [](std::size_t batch) { + return log_sum_exp_trial( + batch, + [](const auto& value) { return workload_exp(value); }, + [](const auto& value) { return workload_log(value); }); + }), + task(implementations::tlfloat_identity, "same workload", + [](std::size_t batch) { + return log_sum_exp_trial( + batch, + [](const auto& value) { return tlfloat_ops::exp(value); }, + [](const auto& value) { return tlfloat_ops::log(value); }); + })); + + run.workload( + "haversine", formula_repetitions, + [](std::size_t batch) { + return haversine_trial( + batch, + [](const auto& value) { return bl::sin(value); }, + [](const auto& value) { return bl::cos(value); }, + [](const auto& value) { return bl::sqrt(value); }, + [](const auto& y, const auto& x) { return bl::atan2(y, x); }); + }, + task(implementations::qdpp_identity, "same workload", + [](std::size_t batch) { + return haversine_trial( + batch, + [](const auto& value) { return ::sin(value); }, + [](const auto& value) { return ::cos(value); }, + [](const auto& value) { return ::sqrt(value); }, + [](const auto& y, const auto& x) { return ::atan2(y, x); }); + }), + task(implementations::boost_identity, "same workload", + [](std::size_t batch) { + return haversine_trial( + batch, + [](const auto& value) { return workload_sin(value); }, + [](const auto& value) { return workload_cos(value); }, + [](const auto& value) { return workload_sqrt(value); }, + [](const auto& y, const auto& x) { + return workload_atan2(y, x); + }); + }), + task(implementations::tlfloat_identity, "same workload", + [](std::size_t batch) { + return haversine_trial( + batch, + [](const auto& value) { return tlfloat_ops::sin(value); }, + [](const auto& value) { return tlfloat_ops::cos(value); }, + [](const auto& value) { return tlfloat_ops::sqrt(value); }, + [](const auto& y, const auto& x) { + return tlfloat_ops::atan2(y, x); + }); + })); + } + } // namespace + + void run_workloads_f128(csv_writer& output, const options& settings) + { + run_workloads(output, settings); + } + + void run_workloads_f256(csv_writer& output, const options& settings) + { + run_workloads(output, settings); + } +} // namespace fltx::tests::benchmark diff --git a/tests/extern/qdpp/.gitattributes b/validation/extern/qdpp/.gitattributes similarity index 100% rename from tests/extern/qdpp/.gitattributes rename to validation/extern/qdpp/.gitattributes diff --git a/tests/extern/qdpp/.gitignore b/validation/extern/qdpp/.gitignore similarity index 100% rename from tests/extern/qdpp/.gitignore rename to validation/extern/qdpp/.gitignore diff --git a/tests/extern/qdpp/README.md b/validation/extern/qdpp/README.md similarity index 100% rename from tests/extern/qdpp/README.md rename to validation/extern/qdpp/README.md diff --git a/tests/extern/qdpp/WINDOWS_test.bat b/validation/extern/qdpp/WINDOWS_test.bat similarity index 100% rename from tests/extern/qdpp/WINDOWS_test.bat rename to validation/extern/qdpp/WINDOWS_test.bat diff --git a/tests/extern/qdpp/data/coeff.dat b/validation/extern/qdpp/data/coeff.dat similarity index 100% rename from tests/extern/qdpp/data/coeff.dat rename to validation/extern/qdpp/data/coeff.dat diff --git a/tests/extern/qdpp/include/qd/bits.h b/validation/extern/qdpp/include/qd/bits.h similarity index 100% rename from tests/extern/qdpp/include/qd/bits.h rename to validation/extern/qdpp/include/qd/bits.h diff --git a/tests/extern/qdpp/include/qd/bits.inl.h b/validation/extern/qdpp/include/qd/bits.inl.h similarity index 100% rename from tests/extern/qdpp/include/qd/bits.inl.h rename to validation/extern/qdpp/include/qd/bits.inl.h diff --git a/tests/extern/qdpp/include/qd/c_dd.h b/validation/extern/qdpp/include/qd/c_dd.h similarity index 100% rename from tests/extern/qdpp/include/qd/c_dd.h rename to validation/extern/qdpp/include/qd/c_dd.h diff --git a/tests/extern/qdpp/include/qd/c_qd.h b/validation/extern/qdpp/include/qd/c_qd.h similarity index 100% rename from tests/extern/qdpp/include/qd/c_qd.h rename to validation/extern/qdpp/include/qd/c_qd.h diff --git a/tests/extern/qdpp/include/qd/config.h b/validation/extern/qdpp/include/qd/config.h similarity index 100% rename from tests/extern/qdpp/include/qd/config.h rename to validation/extern/qdpp/include/qd/config.h diff --git a/tests/extern/qdpp/include/qd/dd.h b/validation/extern/qdpp/include/qd/dd.h similarity index 100% rename from tests/extern/qdpp/include/qd/dd.h rename to validation/extern/qdpp/include/qd/dd.h diff --git a/tests/extern/qdpp/include/qd/dd_const.inl.h b/validation/extern/qdpp/include/qd/dd_const.inl.h similarity index 100% rename from tests/extern/qdpp/include/qd/dd_const.inl.h rename to validation/extern/qdpp/include/qd/dd_const.inl.h diff --git a/tests/extern/qdpp/include/qd/dd_inline.h b/validation/extern/qdpp/include/qd/dd_inline.h similarity index 100% rename from tests/extern/qdpp/include/qd/dd_inline.h rename to validation/extern/qdpp/include/qd/dd_inline.h diff --git a/tests/extern/qdpp/include/qd/dd_io.h b/validation/extern/qdpp/include/qd/dd_io.h similarity index 100% rename from tests/extern/qdpp/include/qd/dd_io.h rename to validation/extern/qdpp/include/qd/dd_io.h diff --git a/tests/extern/qdpp/include/qd/dd_math.h b/validation/extern/qdpp/include/qd/dd_math.h similarity index 100% rename from tests/extern/qdpp/include/qd/dd_math.h rename to validation/extern/qdpp/include/qd/dd_math.h diff --git a/tests/extern/qdpp/include/qd/dd_real.h b/validation/extern/qdpp/include/qd/dd_real.h similarity index 100% rename from tests/extern/qdpp/include/qd/dd_real.h rename to validation/extern/qdpp/include/qd/dd_real.h diff --git a/tests/extern/qdpp/include/qd/double_basics.h b/validation/extern/qdpp/include/qd/double_basics.h similarity index 100% rename from tests/extern/qdpp/include/qd/double_basics.h rename to validation/extern/qdpp/include/qd/double_basics.h diff --git a/tests/extern/qdpp/include/qd/double_math.h b/validation/extern/qdpp/include/qd/double_math.h similarity index 100% rename from tests/extern/qdpp/include/qd/double_math.h rename to validation/extern/qdpp/include/qd/double_math.h diff --git a/tests/extern/qdpp/include/qd/fpu.h b/validation/extern/qdpp/include/qd/fpu.h similarity index 100% rename from tests/extern/qdpp/include/qd/fpu.h rename to validation/extern/qdpp/include/qd/fpu.h diff --git a/tests/extern/qdpp/include/qd/qd_config.h b/validation/extern/qdpp/include/qd/qd_config.h similarity index 100% rename from tests/extern/qdpp/include/qd/qd_config.h rename to validation/extern/qdpp/include/qd/qd_config.h diff --git a/tests/extern/qdpp/include/qd/qd_const.inl.h b/validation/extern/qdpp/include/qd/qd_const.inl.h similarity index 100% rename from tests/extern/qdpp/include/qd/qd_const.inl.h rename to validation/extern/qdpp/include/qd/qd_const.inl.h diff --git a/tests/extern/qdpp/include/qd/qd_inline.h b/validation/extern/qdpp/include/qd/qd_inline.h similarity index 100% rename from tests/extern/qdpp/include/qd/qd_inline.h rename to validation/extern/qdpp/include/qd/qd_inline.h diff --git a/tests/extern/qdpp/include/qd/qd_real.h b/validation/extern/qdpp/include/qd/qd_real.h similarity index 100% rename from tests/extern/qdpp/include/qd/qd_real.h rename to validation/extern/qdpp/include/qd/qd_real.h diff --git a/tests/extern/qdpp/include/qd/qd_real.inl.h b/validation/extern/qdpp/include/qd/qd_real.inl.h similarity index 99% rename from tests/extern/qdpp/include/qd/qd_real.inl.h rename to validation/extern/qdpp/include/qd/qd_real.inl.h index c865954..fa8d42f 100644 --- a/tests/extern/qdpp/include/qd/qd_real.inl.h +++ b/validation/extern/qdpp/include/qd/qd_real.inl.h @@ -2410,7 +2410,7 @@ inline QD_CONSTEXPR qd_real atan2(const qd_real &y, const qd_real &x) { if (y.is_zero()) { /* Both x and y is zero. */ - qd_real::error("(qd_real::atan2): Both arguments zero."); + // Keep atan2(0, 0) quiet for benchmark/diagnostic use; dd_real already returns NaN silently here. return qd_real::_nan; } diff --git a/tests/extern/qdpp/include/qd/special_functions.h b/validation/extern/qdpp/include/qd/special_functions.h similarity index 100% rename from tests/extern/qdpp/include/qd/special_functions.h rename to validation/extern/qdpp/include/qd/special_functions.h diff --git a/tests/extern/qdpp/include/qd/special_functions.inl.h b/validation/extern/qdpp/include/qd/special_functions.inl.h similarity index 100% rename from tests/extern/qdpp/include/qd/special_functions.inl.h rename to validation/extern/qdpp/include/qd/special_functions.inl.h diff --git a/tests/extern/qdpp/include/qd/two_basics.h b/validation/extern/qdpp/include/qd/two_basics.h similarity index 100% rename from tests/extern/qdpp/include/qd/two_basics.h rename to validation/extern/qdpp/include/qd/two_basics.h diff --git a/tests/extern/qdpp/include/qd/util.h b/validation/extern/qdpp/include/qd/util.h similarity index 100% rename from tests/extern/qdpp/include/qd/util.h rename to validation/extern/qdpp/include/qd/util.h diff --git a/tests/extern/qdpp/include/qd/util.inl.h b/validation/extern/qdpp/include/qd/util.inl.h similarity index 100% rename from tests/extern/qdpp/include/qd/util.inl.h rename to validation/extern/qdpp/include/qd/util.inl.h diff --git a/tests/extern/qdpp/include/qd_single.h b/validation/extern/qdpp/include/qd_single.h similarity index 100% rename from tests/extern/qdpp/include/qd_single.h rename to validation/extern/qdpp/include/qd_single.h diff --git a/tests/extern/qdpp/precision.txt b/validation/extern/qdpp/precision.txt similarity index 100% rename from tests/extern/qdpp/precision.txt rename to validation/extern/qdpp/precision.txt diff --git a/tests/extern/qdpp/src/c_dd.cpp b/validation/extern/qdpp/src/c_dd.cpp similarity index 100% rename from tests/extern/qdpp/src/c_dd.cpp rename to validation/extern/qdpp/src/c_dd.cpp diff --git a/tests/extern/qdpp/src/c_fpu.cpp b/validation/extern/qdpp/src/c_fpu.cpp similarity index 100% rename from tests/extern/qdpp/src/c_fpu.cpp rename to validation/extern/qdpp/src/c_fpu.cpp diff --git a/tests/extern/qdpp/src/c_qd.cpp b/validation/extern/qdpp/src/c_qd.cpp similarity index 100% rename from tests/extern/qdpp/src/c_qd.cpp rename to validation/extern/qdpp/src/c_qd.cpp diff --git a/tests/extern/qdpp/tests/CmakeLists.txt b/validation/extern/qdpp/tests/CmakeLists.txt similarity index 100% rename from tests/extern/qdpp/tests/CmakeLists.txt rename to validation/extern/qdpp/tests/CmakeLists.txt diff --git a/tests/extern/qdpp/tests/c_test.c b/validation/extern/qdpp/tests/c_test.c similarity index 100% rename from tests/extern/qdpp/tests/c_test.c rename to validation/extern/qdpp/tests/c_test.c diff --git a/tests/extern/qdpp/tests/double_math.cpp b/validation/extern/qdpp/tests/double_math.cpp similarity index 100% rename from tests/extern/qdpp/tests/double_math.cpp rename to validation/extern/qdpp/tests/double_math.cpp diff --git a/tests/extern/qdpp/tests/huge.cpp b/validation/extern/qdpp/tests/huge.cpp similarity index 100% rename from tests/extern/qdpp/tests/huge.cpp rename to validation/extern/qdpp/tests/huge.cpp diff --git a/tests/extern/qdpp/tests/mpreal.h b/validation/extern/qdpp/tests/mpreal.h similarity index 100% rename from tests/extern/qdpp/tests/mpreal.h rename to validation/extern/qdpp/tests/mpreal.h diff --git a/tests/extern/qdpp/tests/mpreal2.h b/validation/extern/qdpp/tests/mpreal2.h similarity index 100% rename from tests/extern/qdpp/tests/mpreal2.h rename to validation/extern/qdpp/tests/mpreal2.h diff --git a/tests/extern/qdpp/tests/pslq.h b/validation/extern/qdpp/tests/pslq.h similarity index 100% rename from tests/extern/qdpp/tests/pslq.h rename to validation/extern/qdpp/tests/pslq.h diff --git a/tests/extern/qdpp/tests/pslq_test.cpp b/validation/extern/qdpp/tests/pslq_test.cpp similarity index 100% rename from tests/extern/qdpp/tests/pslq_test.cpp rename to validation/extern/qdpp/tests/pslq_test.cpp diff --git a/tests/extern/qdpp/tests/qd_more_test.cpp b/validation/extern/qdpp/tests/qd_more_test.cpp similarity index 100% rename from tests/extern/qdpp/tests/qd_more_test.cpp rename to validation/extern/qdpp/tests/qd_more_test.cpp diff --git a/tests/extern/qdpp/tests/qd_test.cpp b/validation/extern/qdpp/tests/qd_test.cpp similarity index 100% rename from tests/extern/qdpp/tests/qd_test.cpp rename to validation/extern/qdpp/tests/qd_test.cpp diff --git a/tests/extern/qdpp/tests/qd_test_acc.cpp b/validation/extern/qdpp/tests/qd_test_acc.cpp similarity index 100% rename from tests/extern/qdpp/tests/qd_test_acc.cpp rename to validation/extern/qdpp/tests/qd_test_acc.cpp diff --git a/tests/extern/qdpp/tests/qd_timer.cpp b/validation/extern/qdpp/tests/qd_timer.cpp similarity index 100% rename from tests/extern/qdpp/tests/qd_timer.cpp rename to validation/extern/qdpp/tests/qd_timer.cpp diff --git a/tests/extern/qdpp/tests/quadt.h b/validation/extern/qdpp/tests/quadt.h similarity index 100% rename from tests/extern/qdpp/tests/quadt.h rename to validation/extern/qdpp/tests/quadt.h diff --git a/tests/extern/qdpp/tests/quadt_test.cpp b/validation/extern/qdpp/tests/quadt_test.cpp similarity index 100% rename from tests/extern/qdpp/tests/quadt_test.cpp rename to validation/extern/qdpp/tests/quadt_test.cpp diff --git a/tests/extern/qdpp/tests/tictoc.cpp b/validation/extern/qdpp/tests/tictoc.cpp similarity index 100% rename from tests/extern/qdpp/tests/tictoc.cpp rename to validation/extern/qdpp/tests/tictoc.cpp diff --git a/tests/extern/qdpp/tests/tictoc.h b/validation/extern/qdpp/tests/tictoc.h similarity index 100% rename from tests/extern/qdpp/tests/tictoc.h rename to validation/extern/qdpp/tests/tictoc.h diff --git a/validation/extern/tlfloat/.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE.md b/validation/extern/tlfloat/.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..e225ac4 --- /dev/null +++ b/validation/extern/tlfloat/.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE.md @@ -0,0 +1,27 @@ +--- +name: Create a new issue +about: Create an issue recognizing the effort we put into processing your issue +title: Enter the title of your issue here +labels: '' +assignees: '' + +--- + +Our project provides only the current and previous versions of +software free of charge. No other materials and services are provided +free of charge unless they are explicitly stated to be free of +charge. + +If you want us to process your issue, you will need to pay a fee. The +specific amount you need to pay will be determined by negotiation, +depending on the nature of the issue and your project. + +By becoming a sponsor of our project, you will receive a substantial +discount on the cost of processing your issue. + +It is still possible to create an issue without paying a fee, but in +that case we will not process your issue. + +If you have any questions, please contact us before creating an issue. + +Simply remove this notice when you create an issue. diff --git a/validation/extern/tlfloat/.github/ISSUE_TEMPLATE/config.yml b/validation/extern/tlfloat/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/validation/extern/tlfloat/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/validation/extern/tlfloat/.github/PULL_REQUEST_TEMPLATE.md b/validation/extern/tlfloat/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..321ad81 --- /dev/null +++ b/validation/extern/tlfloat/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,34 @@ +## NOTICE TO ALL CONTRIBUTORS + +**Please read carefully before submitting this Pull Request.** + +This policy applies strictly to contributions made on behalf of organizations that incorporate this project's deliverables into their products or services and derive annual revenue exceeding **US $1 million** from those products and services. + +If you represent such an organization, by clicking "Create pull request" and submitting your contribution, you and your organization are deemed to have expressly agreed to the following Corporate Contributor License Agreement (CCLA): + +### Corporate Contributor License Agreement (CCLA) Terms: + +1. **Transfer of Intellectual Property:** + You hereby assign to the Project Maintainer all right, title, and interest in and to this contribution, including all Intellectual Property Rights therein. The Project Maintainer shall be the sole and exclusive owner of the contribution. + +2. **Warranties:** + You represent and warrant that this contribution is free from any defects, fit for the particular purpose of the Project, and does not infringe upon the intellectual property rights of any third party. + +3. **Indemnification & Unlimited Liability:** + You agree to defend, indemnify, and hold harmless the Project Maintainer from and against any and all claims, damages, losses, and expenses arising out of or resulting from this contribution. **Your liability under this agreement is UNLIMITED.** + +--- + +### Contribution Status Confirmation + +**Please check one of the following boxes to confirm your status:** +*(Checking the box constitutes a legal representation of your status)* + +- [ ] **[Corporate Contributor - CCLA Accepted]** + I represent an organization that incorporates this project's deliverables into its products or services and derives annual revenue exceeding US $1 million from those products and services. On behalf of my organization, I EXPRESSLY AGREE to the Corporate Contributor License Agreement (CCLA) terms listed above. + +- [ ] **[Authorized Exemption]** + My organization has established a separate agreement with the Project Maintainer. I confirm that the Project Maintainer has explicitly granted us an exemption from the CCLA for this contribution. + +- [ ] **[Individual / Exempt]** + I am an **individual contributor**, or I represent an organization that does **NOT** meet the revenue threshold mentioned above. I contribute under the standard project license. diff --git a/validation/extern/tlfloat/CMakeLists.txt b/validation/extern/tlfloat/CMakeLists.txt new file mode 100644 index 0000000..f0b3cc7 --- /dev/null +++ b/validation/extern/tlfloat/CMakeLists.txt @@ -0,0 +1,448 @@ +option(BUILD_LIBS "Build and install the library" ON) +option(BUILD_TESTS "Build tests" ON) +option(BUILD_UTILS "Build utilities" ON) +option(BUILD_BENCH "Build benchmarking tools" OFF) +option(ENABLE_INTSQRT "Enable fully integer sqrt" OFF) +option(ENABLE_INLINING "Enable extensive function inlining" OFF) +option(ENABLE_LTO "Enable LTO" OFF) +option(ENABLE_ASAN "Enable address sanitizer" OFF) +option(ENABLE_CUDA_TEST "Build CUDA tester" OFF) +option(INSTALL_CONTINUOUS_TESTERS "Install continuous testers" OFF) +option(ENABLE_DOXYGEN "Enable generating documents with Doxygen" OFF) +option(ENABLE_COVERAGE "Enable generating coverage data" OFF) +option(ENABLE_ARCH_OPTIMIZATION "Enable architecture-specific optimization upon building library" ON) +option(BUILD_EXHAUSTIVE_TESTING "Build exhaustive testing with 16-bit and 32-bit arguments" OFF) +option(ENABLE_EXHAUSTIVE_TESTING "Enable exhaustive testing with 16-bit and 32-bit arguments" OFF) +set(SET_COMPILER_SUPPORTS_INT128 "auto" CACHE STRING "Set whether the compiler supports __int128 type") +set(SET_COMPILER_SUPPORTS_ISOFLOAT128 "auto" CACHE STRING "Set whether the compiler supports _Float128 type") +set(SET_COMPILER_SUPPORTS_FLOAT128 "auto" CACHE STRING "Set whether the compiler supports __float128 type") +set(SET_LONGDOUBLE_IS_FLOAT128 "auto" CACHE STRING "Set whether long double is IEEE binary128") + +# To build with "-march=native" option +# CC=gcc-12 CXX=g++-12 CFLAGS="-march=native" CXXFLAGS="-march=native" cmake .. + +# To use clang-19 to Build with LTO enabled +# CXX=clang++-19 CC=clang-19 cmake .. -DENABLE_INLINING=True -DENABLE_LTO=True -DCMAKE_CXX_COMPILER_AR=/usr/bin/llvm-ar-19 -DCMAKE_CXX_COMPILER_RANLIB=/usr/bin/llvm-ranlib-19 + +# To build shared library +# cmake .. -DBUILD_SHARED_LIBS=True -DCMAKE_POSITION_INDEPENDENT_CODE=ON + + +## + + +set(TLFLOAT_VERSION_MAJOR 1) +set(TLFLOAT_VERSION_MINOR 17) +set(TLFLOAT_VERSION_PATCH 1) +set(TLFLOAT_VERSION ${TLFLOAT_VERSION_MAJOR}.${TLFLOAT_VERSION_MINOR}.${TLFLOAT_VERSION_PATCH}) +set(TLFLOAT_SOVERSION ${TLFLOAT_VERSION_MAJOR}) + +message(STATUS "Configuring TLFloat ${TLFLOAT_VERSION_MAJOR}.${TLFLOAT_VERSION_MINOR}.${TLFLOAT_VERSION_PATCH}") + +cmake_minimum_required(VERSION 3.16) + +project(tlfloat) + +# + +enable_language(CXX) +set(CMAKE_CXX_STANDARD 20) + +if(ENABLE_CUDA_TEST) + enable_language(CUDA) + set(CMAKE_CUDA_ARCHITECTURES 50) +endif() + +# CMake configuration + +if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") + message(FATAL_ERROR "In-source build not supported") +endif() + +set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib") +set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin") + +include_directories("${PROJECT_SOURCE_DIR}/src/include") +include_directories("${PROJECT_BINARY_DIR}/include") + +set(TMPDIR "${CMAKE_BINARY_DIR}/tmp") +file(MAKE_DIRECTORY "${TMPDIR}") + +if (NOT EXISTS ${CMAKE_BINARY_DIR}/CMakeCache.txt) + if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE) + endif() +endif() + +include(GNUInstallDirs) + +# Include packages + +find_library(LIB_MPFR mpfr) +message(STATUS "LIB_MPFR : " ${LIB_MPFR}) +if (LIB_MPFR) + find_path(MPFR_INCLUDE_DIR mpfr.h) + message(STATUS "MPFR_INCLUDE_DIR : " ${MPFR_INCLUDE_DIR}) + if (MPFR_INCLUDE_DIR) + include_directories("${MPFR_INCLUDE_DIR}") + endif() +endif() + +find_library(LIBM m) +if (NOT LIBM) + set(LIBM "") +endif() + +find_package(OpenMP) + +# Detect compiler capabilities + +include(CheckCXXSourceCompiles) + +if (SET_COMPILER_SUPPORTS_INT128 STREQUAL "auto") + if (CMAKE_CXX_COMPILER_TARGET) + set(CMAKE_REQUIRED_FLAGS "--target=${CMAKE_CXX_COMPILER_TARGET}") + endif() + CHECK_CXX_SOURCE_COMPILES(" +int main(int argc, char **argv) { + __int128_t i = argc; + __uint128_t u = argc; + return (int)(i % 10) + (int)(u % 10); +}" TLFLOAT_COMPILER_SUPPORTS_INT128) + set(CMAKE_REQUIRED_FLAGS) +else() + if (SET_COMPILER_SUPPORTS_INT128) + set(TLFLOAT_COMPILER_SUPPORTS_INT128 ON) + else() + set(TLFLOAT_COMPILER_SUPPORTS_INT128 OFF) + endif() + message(STATUS "Manually setting TLFLOAT_COMPILER_SUPPORTS_INT128 : " ${TLFLOAT_COMPILER_SUPPORTS_INT128}) +endif() + +if (SET_COMPILER_SUPPORTS_ISOFLOAT128 STREQUAL "auto") + if (CMAKE_CXX_COMPILER_TARGET) + set(CMAKE_REQUIRED_FLAGS "--target=${CMAKE_CXX_COMPILER_TARGET}") + endif() + CHECK_CXX_SOURCE_COMPILES(" +#include +struct s { long long x, y; }; +int main(int argc, char **argv) { + constexpr s a = std::bit_cast(_Float128(0.1234)*_Float128(56.789)); + static_assert((a.x ^ a.y) == 0xc7d695c93a4e2b71LL); + _Float128 i = argc; + return (int)i; +} +" TLFLOAT_COMPILER_SUPPORTS_ISOFLOAT128) + set(CMAKE_REQUIRED_FLAGS) +else() + if (SET_COMPILER_SUPPORTS_ISOFLOAT128) + set(TLFLOAT_COMPILER_SUPPORTS_ISOFLOAT128 ON) + else() + set(TLFLOAT_COMPILER_SUPPORTS_ISOFLOAT128 OFF) + endif() + message(STATUS "Manually setting TLFLOAT_COMPILER_SUPPORTS_ISOFLOAT128 : " ${TLFLOAT_COMPILER_SUPPORTS_ISOFLOAT128}) +endif() + +if (SET_COMPILER_SUPPORTS_FLOAT128 STREQUAL "auto") + if (CMAKE_CXX_COMPILER_TARGET) + set(CMAKE_REQUIRED_FLAGS "--target=${CMAKE_CXX_COMPILER_TARGET}") + endif() + CHECK_CXX_SOURCE_COMPILES(" +#include +struct s { long long x, y; }; +int main(int argc, char **argv) { + constexpr s a = std::bit_cast(__float128(0.1234)*__float128(56.789)); + static_assert((a.x ^ a.y) == 0xc7d695c93a4e2b71LL); + __float128 i = argc; + return (int)i; +} +" TLFLOAT_COMPILER_SUPPORTS_FLOAT128) + set(CMAKE_REQUIRED_FLAGS) +else() + if (SET_COMPILER_SUPPORTS_FLOAT128) + set(TLFLOAT_COMPILER_SUPPORTS_FLOAT128 ON) + else() + set(TLFLOAT_COMPILER_SUPPORTS_FLOAT128 OFF) + endif() + message(STATUS "Manually setting TLFLOAT_COMPILER_SUPPORTS_FLOAT128 : " ${TLFLOAT_COMPILER_SUPPORTS_FLOAT128}) +endif() + +if (SET_LONGDOUBLE_IS_FLOAT128 STREQUAL "auto") + if (CMAKE_CXX_COMPILER_TARGET) + set(CMAKE_REQUIRED_FLAGS "--target=${CMAKE_CXX_COMPILER_TARGET}") + endif() + CHECK_CXX_SOURCE_COMPILES(" +#include +struct s { long long x, y; }; +int main(void) { + constexpr s a = std::bit_cast((long double)0.1234*(long double)56.789); + static_assert((a.x ^ a.y) == 0xc7d695c93a4e2b71LL); +} +" TLFLOAT_LONGDOUBLE_IS_FLOAT128) + set(CMAKE_REQUIRED_FLAGS) +else() + if (SET_LONGDOUBLE_IS_FLOAT128) + set(TLFLOAT_LONGDOUBLE_IS_FLOAT128 ON) + else() + set(TLFLOAT_LONGDOUBLE_IS_FLOAT128 OFF) + endif() + message(STATUS "Manually setting TLFLOAT_LONGDOUBLE_IS_FLOAT128 : " ${TLFLOAT_LONGDOUBLE_IS_FLOAT128}) +endif() + +if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(CMAKE_REQUIRED_FLAGS "-march=armv8.2-a+fp16") + CHECK_CXX_SOURCE_COMPILES(" +#include +#include +int main(int argc, char **argv) { + __fp16 hu = vaddh_f16(__fp16(atof(argv[1])), __fp16(0.2)); + bool b = vceqh_f16(__fp16(atof(argv[1])), __fp16(0.2)); + return (int)hu + (int)b; +}" TLFLOAT_COMPILER_SUPPORTS_ARM_FP16) + set(CMAKE_REQUIRED_FLAGS) +endif() + +if (CMAKE_CXX_COMPILER_TARGET) + set(CMAKE_REQUIRED_FLAGS "--target=${CMAKE_CXX_COMPILER_TARGET}") +endif() +CHECK_CXX_SOURCE_COMPILES(" +#include +#include +#include +int main(int argc, char **argv) { +__fp16 a = (__fp16)(float)atof(argv[1]); +__uint16_t u = std::bit_cast<__uint16_t>(a); +a = std::bit_cast<__fp16>(u); +return (float)a; } +" TLFLOAT_COMPILER_SUPPORTS_FP16) + +CHECK_CXX_SOURCE_COMPILES(" +#include +#include +#include +int main(int argc, char **argv) { +__bf16 a = (__bf16)(float)atof(argv[1]); +__uint16_t u = std::bit_cast<__uint16_t>(a); +a = std::bit_cast<__bf16>(u); +return (float)a; } +" TLFLOAT_COMPILER_SUPPORTS_BF16) + +CHECK_CXX_SOURCE_COMPILES(" +#include +#include +#ifndef __GLIBC__ +#error GLIBC macro not defined +#endif +int main(int argc, char **argv) {}" BUILDING_WITH_GLIBC) +set(CMAKE_REQUIRED_FLAGS) + +if (LIB_MPFR) + if (CMAKE_CXX_COMPILER_TARGET) + set(CMAKE_REQUIRED_FLAGS "--target=${CMAKE_CXX_COMPILER_TARGET}") + endif() + set(CMAKE_REQUIRED_LIBRARIES ${LIB_MPFR}) + CHECK_CXX_SOURCE_COMPILES(" +#define MPFR_WANT_FLOAT128 +#include +int main() {}" TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + + CHECK_CXX_SOURCE_COMPILES(" +#include +int main() { +mpfr_t mx; +mpfr_sinpi(mx, mx, GMP_RNDN); +}" + TLFLOAT_ENABLE_MPFR_SINPI) + set(CMAKE_REQUIRED_LIBRARIES) + set(CMAKE_REQUIRED_FLAGS) +endif() + +if (TLFLOAT_COMPILER_SUPPORTS_FLOAT128) + if (CMAKE_CXX_COMPILER_TARGET) + set(CMAKE_REQUIRED_FLAGS "--target=${CMAKE_CXX_COMPILER_TARGET}") + endif() + set(CMAKE_REQUIRED_LIBRARIES quadmath) + CHECK_CXX_SOURCE_COMPILES(" +#include +#include +int main(int argc, char **argv) { +__float128 f = atof(argv[1]); +printf(\"%g\", (double)sinq(f)); +}" TLFLOAT_ENABLE_LIBQUADMATH) + set(CMAKE_REQUIRED_LIBRARIES) + set(CMAKE_REQUIRED_FLAGS) +endif() + +# Setting up memory-leak checks + +include(CTest) +set(MEMORYCHECK_COMMAND_OPTIONS "--leak-check=full --error-exitcode=1") + +if (ENABLE_VALGRIND AND NOT CMAKE_CROSSCOMPILING) + find_program(VALGRIND "valgrind") + message(STATUS "VALGRIND : " ${VALGRIND}) +endif() + +# Compiler options + +if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fconstexpr-ops-limit=1000000000 -fno-math-errno") + set(INLINE_CXX_FLAGS "--inline-limit=1000000") + set(NOEXCEPT_CXX_FLAGS "-fno-exceptions;-fno-rtti") + if(CMAKE_SYSTEM_PROCESSOR MATCHES "i[3-6]86") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpmath=sse -msse2") + endif() + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -Og") + if (ENABLE_ASAN) + if(CMAKE_SYSTEM_PROCESSOR MATCHES "(arm64|aarch64)") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=hwaddress -static-libasan -fno-exceptions") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=hwaddress -static-libasan") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -static-libasan -fno-exceptions") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -static-libasan") + endif() + endif() + if (COMMAND_GOLD) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") + endif() +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT WIN32) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fconstexpr-steps=1000000000 -fno-math-errno") + set(INLINE_CXX_FLAGS "-mllvm;-inline-threshold=100000") + set(NOEXCEPT_CXX_FLAGS "-fno-exceptions;-fno-rtti") + if(CMAKE_SYSTEM_PROCESSOR MATCHES "i[3-6]86") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpmath=sse -msse2") + endif() + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -Og") + if (ENABLE_ASAN) + if(CMAKE_SYSTEM_PROCESSOR MATCHES "(arm64|aarch64)") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=hwaddress") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=hwaddress") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") + endif() + endif() +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND WIN32) + get_filename_component(COMPILER_BASENAME "${CMAKE_CXX_COMPILER}" NAME_WE) + string(TOLOWER "${COMPILER_BASENAME}" LC_COMPILER_BASENAME) + + if ("${LC_COMPILER_BASENAME}" STREQUAL "clang-cl") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /clang:-fconstexpr-steps=1000000000") + set(INLINE_CXX_FLAGS "/clang:-mllvm;/clang:-inline-threshold=100000") + set(NOEXCEPT_CXX_FLAGS "") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fconstexpr-steps=1000000000 -fno-math-errno") + set(INLINE_CXX_FLAGS "-mllvm;-inline-threshold=100000") + set(NOEXCEPT_CXX_FLAGS "-fno-exceptions;-fno-rtti") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -Og") + endif() + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS True) +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /constexpr:steps1000000000") + set(INLINE_CXX_FLAGS "") + set(NOEXCEPT_CXX_FLAGS "") + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS True) +endif() + +string(TOLOWER "${CMAKE_BUILD_TYPE}" LC_CMAKE_BUILD_TYPE) + +if (WIN32) + add_compile_definitions(_CRT_SECURE_NO_WARNINGS=1 _CRT_NONSTDC_NO_DEPRECATE=1) +endif() + +if (NOT "${LC_CMAKE_BUILD_TYPE}" STREQUAL "release") + add_compile_definitions(DEBUG=1) +endif() + +if (NOT ENABLE_ARCH_OPTIMIZATION) + add_definitions(-DTLFLOAT_DISABLE_ARCH_OPTIMIZATION) +endif() + +if (ENABLE_LTO) + set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) +endif() + +# Setting up for coverage report + +if (ENABLE_COVERAGE) + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage -fprofile-arcs -ftest-coverage") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage -fprofile-arcs -ftest-coverage") + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT WIN32) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-instr-generate -fcoverage-mapping") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping") + endif() +endif() + +# Setting up Doxygen + +if (ENABLE_DOXYGEN AND NOT WIN32) + find_package(Doxygen) + + if (DOXYGEN_FOUND) + configure_file("${PROJECT_SOURCE_DIR}/doxygen.conf.in" "${CMAKE_BINARY_DIR}/doxygen.conf" @ONLY) + + add_custom_target(doc_doxygen ALL + COMMAND "${DOXYGEN_EXECUTABLE}" "${CMAKE_BINARY_DIR}/doxygen.conf" + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" + VERBATIM + ) + + install( + DIRECTORY "${CMAKE_BINARY_DIR}/doc_doxygen/" + DESTINATION "${INSTALL_PREFIX}doc_doxygen" + MESSAGE_NEVER + COMPONENT tlfloat_Documentation + ) + endif() +endif() + +# + +if (ENABLE_INTSQRT) + set(TLFLOAT_ENABLE_INTSQRT True) +endif() + +configure_file("${PROJECT_SOURCE_DIR}/src/include/tlfloat/tlfloatconfig.hpp.in" + "${PROJECT_BINARY_DIR}/include/tlfloat/tlfloatconfig.hpp" @ONLY) + +configure_file("${PROJECT_SOURCE_DIR}/src/include/detect.h.in" + "${PROJECT_BINARY_DIR}/include/detect.h" @ONLY) + +# Install CMake package config + +if (FALSE) + # Currently disabled because I still don't fully understand how this works + + include(CMakePackageConfigHelpers) + + write_basic_package_version_file( + tlfloatConfigVersion.cmake + VERSION "${TLFLOAT_VERSION}" + COMPATIBILITY SameMajorVersion + ) + + install( + EXPORT tlfloatTargets + FILE tlfloatConfigVersion.cmake + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/tlfloat" + COMPONENT tlfloat_Development + ) + + install( + EXPORT tlfloatTargets + NAMESPACE tlfloat:: + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/tlfloat" + COMPONENT tlfloat_Development + ) +endif() + +# + +add_subdirectory("src") + +# Show status + +if(NOT "${CMAKE_BUILD_TYPE}" STREQUAL "") + message(STATUS "CMAKE_BUILD_TYPE : " ${CMAKE_BUILD_TYPE}) +endif() diff --git a/validation/extern/tlfloat/CODE_OF_CONDUCT.md b/validation/extern/tlfloat/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..3ac00aa --- /dev/null +++ b/validation/extern/tlfloat/CODE_OF_CONDUCT.md @@ -0,0 +1,514 @@ + +# Community Guidelines for Sustainability of Open-Source Ecosystem + +Version 1.0.1, 2024-12-29 + +Copyright Naoki Shibata 2024. https://github.com/shibatch/nofreelunch + +This document is licensed under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/). + + +## Preface + +### Free-riding and the burnout problem of OSS developers + +First of all, I would like to start by explaining a few economic +concepts. Suppose you have paid to buy a hamburger. Then, of course, +that hamburger is yours and you have all the right to decide what to +do with it. You can eat all the hamburger without sharing it with your +friends. But what if you are paying for flood control, i.e., the +maintenance of rivers? Flood control is essential to building a modern +city, but it is almost impossible to limit the people who will benefit +from flood control. If you pay for the maintenance of the river, your +friends will automatically benefit from it too. Goods and services +such as parks, public roads, fire protection, police, flood control +and knowledge are called public goods. A public good is defined as a +good that is both non-excludable (anyone can access it) and +non-rivalrous (one person’s use does not prevent another’s use). The +cost of preventing people from using public goods is significantly +high and it is difficult to collect a price for their use. If someone +bears the cost and provides a public good, those who do not bear the +cost can also receive the benefit. As a result, the incentive to bear +the cost of providing public goods does not work, and everyone tries +to get a free ride. In economics, a free rider is someone who enjoys a +benefit without paying for it. + +OSS and free software (hereafter, OSS and free software are +collectively referred to as FOSS) are public goods because they are +both non-excludable and non-rivalrous, and thus they are being +free-ridden by a large number of people and companies. It is +undeniable that FOSS has become popular because they can be free-ridden +as much as people want. But, development and maintenance of FOSS cannot +proceed unless someone contributes resources. If no user pays for it, +it is a natural consequence that maintenance will eventually cease to +continue, which in essence means that the FOSS ecosystem is not +sustainable. FOSS developers have little or no financial incentive to +continue maintenance and development. As a result, FOSS developers tend +to stop maintaining their projects much sooner than users expect, +often abruptly. This problem is called the FOSS developer "burnout" +problem. To make the FOSS ecosystem sustainable, the cost of +maintenance must continue to be supplied from somewhere. Downloading +software may seem like less of an incentive to pay a fee because you +cannot see the face of the developer and the software is only +information and not substance. However, there are real people involved +in the development and maintenance of the software, and real resources +are committed for this purpose. Needless to say, the burden of those +costs should not be placed on the developers and maintainers. + + +### Lack of funds is not the cause of the problem + +Let me explain in simpler language. Imagine that you are offered a +free lunch somewhere. In such a case, a rather large number of people +would say, "Who is covering the cost of this lunch? Let me bear the +cost of what I eat." But when it comes to using FOSS, the number of +such people is much smaller. For some reason, people take it for +granted that I provide a free lunch and that everyone else should +receive the lunch I provide without paying for it. And then there are +those who sell what is provided free of charge to others at a +price. Certainly, as a free lunch provider, I don't forbid that, but +isn't that making too much use of the generosity? If I ask those +people to donate, sometimes they do, but often they look at me as if +donating is something special. And when I stop offering free lunch, +people say I have "burned out." Is it appropriate to call it “burnout” +that I have run out of ingredients to prepare a free lunch? It doesn't +have to be me who provides the ingredients for the free lunch, does +it? It would be fine if the others could supply all the ingredients +and prepare all the lunches instead, but this usually doesn't +happen. Because the lunches prepared by others are not that tasty. Or +they don't want to provide such a good lunch for free. If those who +are making a profit give some of it back, then I can continue to offer +free lunches. I think everyone would be happier that way, don't you? + +The problem of developer "burnout" becomes a problem because there is +still commercial value in the software. If the software has no value +anymore, it would not be called "burnout." In such a case, the project +simply "fades away" without anyone noticing. If no one needs free +lunch anymore, then no one will have a problem when I stop providing +free lunch. In other words, the reason developers "burn out" is not +because the funds are nowhere to be found, but because the funds do +not reach them. In some cases, companies are making huge profits by +using FOSS. If we can get these funds to reach the developers, the +problem can be solved. + + +### Noncommercial license does not solve the problem + +Some may argue that if that is the case, then I should just make the +license noncommercial. However, if I prohibit commercial use, even if +conditionally, adopting the software will require complex +deliberations within the company. The story is relatively simple if +the number of computers that will run the software is known in advance +and only that number of licenses need to be purchased. However, the +use of FOSS is not limited to this. One of the advantages of FOSS is +that it can be easily adopted when the number of computers running the +software is not known in advance. If a license server were to be set +up to monitor software usage, there would be increased hassles with +server maintenance and security. If the company is required to pay, +for example, a certain percentage of the profits earned, the paperwork +for this would become cumbersome, and it would be necessary to publish +the figures on which the payment is based. + +Here, I would like to explain another concept in economics. Consider +the case where farmers graze cows on pastureland. If there are too +many cows, the pasture will become desolate. If the pasture is owned +by one farmer, he/she adjusts the number of cows so that the pasture +does not become desolate. However, if a pasture is owned by multiple +farmers, there is no advantage in reducing the number of cows because +if one farmer reduces the number of cows, the others would increase +it. Therefore, each farmer tries to increase the number of cows to +maximize his/her own profit. As a result, the pastureland becomes +desolate due to the fact that it is common land. This is called the +tragedy of the commons. + +Companies are, after all, organizations that try to maximize +shareholder profit. They try to use as much free stuff as possible, +while they are less likely to use software that is not free for +commercial use because of the complicated procedures to use it. There +used to be many free-of-charge software products that prohibited +commercial use, but many of them were not used much and eventually +abandoned. In other words, whether the license prohibits commercial +use or not, the developers will not be paid after all. From a +different perspective, this means that the pasture of FOSS developers +is being exploited until it becomes desolate. Even if each company is +aware of the fact that it is exploiting FOSS developers, it has little +incentive to stop, because even if one company stops, others will +continue, and the result will be the same. Thus, it is unlikely that a +company will voluntarily offer to make a donation, because even if +only their company makes a donation, the result will not be much +different if other companies do not also make donations. This +structure of the problem is the same as the tragedy of the commons. A +license that prohibits commercial use does not solve this problem. + +FOSS developers have to go around on their own to find companies that +use their software and ask them for donations. There is no way to even +know what a reasonable donation amount would be. In order to maximize +shareholder profit, companies tend to refrain from activities that +would benefit other companies, and as a result, they are often +reluctant to contribute to society as a whole. Often a company needs a +particular reason as to why it makes a particular contribution. In +other words, a company needs an explanation of how its contribution +will specifically benefit the company. However, most FOSS products are +not designed to benefit a specific company. FOSS projects cannot be run +only by members who participate from companies who think only of their +own convenience. It is not surprising that contributions made under a +declaration that only contributions beneficial to a particular +organization can be made are less appreciated. + + +### Code of conduct comes to rescue + +To begin with, the general public only understands that FOSS is +software that can be used for free, and there is no recognition that +the general public is free-riding on various resources provided by +developers. There is a general lack of awareness that if everyone +continues to free-ride, those resources will quickly run out and the +project will not last long. On the other hand, companies need a reason +to pay for software that is labeled as free to use. In other words, +there must be some logical framework for the manager to persuade his +or her bosses to do this. For FOSS developers, the only place to write +such a prohibition on free-riding was in the distribution +license. However, since the distribution license is legally binding, +even the slightest restriction on the conditions of use would prevent +people from using the software, as mentioned above. + +Codes of conduct are not considered legally binding, and their +contents are often unchecked by corporate legal departments. +Nevertheless, their contents are similar to rules, and they are +presented alongside distribution licenses. Incorporating a code of +conduct into FOSS has already been established to some +extent. Originally, a code of conduct was a series of practices that a +company requires its employees to adhere to. Since this has expanded +to FOSS projects, we can expect that there is little risk of companies +completely ignoring it. A code of conduct is a set of rules that +defines the normative behavior and responsibilities of individuals, +parties, and groups. In other words, a code of conduct is a definition +of the behaviors of members that are desirable and undesirable for a +project. By having each member in the project agree to a code of +conduct, the members are made aware that certain behaviors are +undesirable for the project. In other words, members will not be able +to openly engage in behavior that is undesirable for the +project. Since a code of conduct is not legally binding, members would +be able to continue to participate in the project without agreeing to +the code of conduct or while violating it. However, even in that case, +the fact that a particular member did not agree to or violated the +code of conduct is visible. The purpose of having members make a +pledge not to engage in undesirable behavior is not to exclude members +who disagree or violate the code from the project, but to make other +members aware of it. This allows the "name and shame" approach to +discourage members from taking undesirable actions. If a particular +member engages in an undesirable behavior, other members become aware +of it, and the member with the undesirable behavior is excluded from +participation in the overall decision-making process of the +project. In other words, members with undesirable behavior will have +difficulty participating in decision-making within the project. This +assumes, of course, that members do not lie. + + +### How our guidelines work + +Community Guidelines for Sustainability of Open-Source Ecosystem are a +code of conduct aiming to alleviate the burnout problems of FOSS +developers. Our guidelines use the nature of the code of conduct +described above to discourage free-riding on FOSS projects. Since a +code of conduct defines desirable and undesirable behaviors of project +members, it is not possible to directly ask companies to comply with +the code. Therefore, our guidelines ask members representing a company +to pledge that they will make effort to ensure that the company to +which they belong does not free-ride. If a member's company continues +to free-ride, that member can be regarded as not making sufficient +efforts to ensure that the company does not free-ride. In addition, +our guidelines do not require only that each company does not +free-ride on projects that have adopted our guidelines, but also that +they do not free-ride on FOSS projects in general. As there becomes +greater public awareness of the importance of discouraging free-riding +in order to sustain FOSS projects, it will become more difficult for +companies to openly disagree with our guidelines. As more projects +adopt our guidelines, we can expect that free-riding on FOSS projects +in general will be discouraged. + +Now, based on the above, will this scheme really work? What is most +concerning is the part that although prohibiting commercial use of +software in a distribution license does not work, discouraging +free-riding in a code of conduct will work. The reason why prohibiting +commercial use does not work is that it requires a lot of internal +deliberation and procedures within the company before the software can +be used, and a budget must be set aside to purchase the software +license at this point. Distribution licenses are supposed to be +legally binding, which is incompatible with asking licensees to take +some action without legally binding them to do so. On the other hand, +a code of conduct, by its very nature, only prescribes the desired +behavior of project members, not the conditions for the use of the +software. The existence of a code of conduct makes it possible to +check whether each member is behaving in a way that is desirable for +the project. If companies continue to free-ride on FOSS, this will +become visible to the public and subject to social criticism. It would +be a serious PR loss for a company if it were to make the news that +the company gets disciplined in a prominent FOSS project. Therefore, we +can expect that companies will voluntarily make contributions even +without a request from the project side. + +One of the purposes of creating new guidelines is to lower the +workload on the maintainers. Adopting our guidelines will only require +little work on the project. What is required in the project is to +ensure transparency in project management so that public scrutiny can +be conducted. Our guidelines will not work well if the public thinks +that opaque decisions made within the project are inevitable because +they were made for some reason that cannot be disclosed. For the +guidelines to work well, the public must be able to judge the +appropriateness of each decision made within the project. Transparency +in project management would also have positive results in terms of +ensuring diversity in the project. + +What our guidelines require is that each member takes action to +discourage free-riding. Thus, even if a member's company is +free-riding, that company will not be immediately denounced. A +company's free-riding will only be brought to attention if it becomes +a problem over some extended period of time. For companies, it is only +when their own employees participate in a project that they need to +comply with the intent of the code of conduct, which is usually long +after the company has started using the software. Thus, the use of the +software itself can be started easily, and minor violations can be +tolerated. In addition, companies can decide the budget for their +contribution to FOSS projects on their own discretion. + +At first glance, this might seem to mean that companies can continue +to free-ride without worrying about the guidelines by silently +allowing their employees to continue using the software without having +them participate in the project. However, for companies that use FOSS +extensively, not being involved in FOSS projects at all would cause +various practical disadvantages. In addition, if the status of FOSS use +and contribution to the project by each company becomes clear, the +existence of large FOSS user companies that continue to free-ride in +silence will naturally emerge. + +This may also mean that little-known companies will not be subject to +much public scrutiny, and only well-known companies that use FOSS on a +large scale will be significantly affected by the guidelines. However, +this has the advantage of supporting companies that use FOSS on a small +scale, thereby expanding the use of FOSS. Rather than going around +pointing out every minor violation, we can expect to bring long-term +benefits to the FOSS ecosystem by fostering companies that use FOSS on a +large scale. What is important is visibility into the use of FOSS in +each company, and for this purpose, it may be reasonable to mandate a +usage indication in the distribution license. + +You might be wondering why our guidelines target only companies, even +though individuals are also free-riding. This is due to the +limitations of how our guidelines work. The basic stance of our +guidelines is to request uniformly the same content regardless of +whether the member belongs to a company or not. This is because +confusion arises in the definition of the terms if we try to +distinguish between companies and individuals. If members +participating as individuals were asked to donate to the project, they +would effectively be excluded from participating in the project. +Thus, all that a member participating as an individual can do to deter +free-riding is to call out to their friends not to free-ride, which is +effectively the same as doing nothing. If donations were collected +from individual users in a thin and broad base, the total amount could +be large. However, it would be too costly to track the amount of each +individual user's donation, and it would be difficult to establish a +practical mechanism for this purpose. + +You might also wonder whether educational and research institutions +are also included in the scope of free-ride deterrence. It is +ultimately public scrutiny that determines whether the objectives of +the guidelines are being followed. Also, the project has its own +policy and philosophy independent of this. Educational and research +institutions are generally believed to support FOSS operations directly +or indirectly by the nature of their work. Thus, it can be assumed +that whether they are taking specific actions to deter free-riding is +not an issue. In reality, however, in many cases, even educational and +research institutions do not support FOSS operations in their work +content. Some institutions clearly disregard their contribution to FOSS +projects. In such cases, free-riding should be considered a problem +even for educational and research institutions. In addition, if FOSS +plays an important role in a research project with a large research +budget, it is only natural that the research project should make a +commensurate contribution to the associated FOSS project. When +applying for a research budget, the cost of the contribution to the +relevant projects of the FOSS to be used in the research should be +accounted for. I hope that the status of support for FOSS by +educational and research institutions, including indirect ones, will +become visible. + +There is another reason why companies should pay for the maintenance +of FOSS. Public goods such as flood control and public road +construction are usually paid for by taxpayers. However, if we try to +do the same with FOSS maintenance, we will undoubtedly see terrible +results. Because it is difficult to evaluate which FOSS is useful, +large amounts of taxpayer money will be spent on maintenance of +software that no one has ever heard of. There is also a problem that +it is difficult to coordinate among the countries to which the members +belong, since the development of FOSS takes place across countries. By +having companies fund software that is valuable to them, we can expect +that truly valuable software will be funded. + + +## Positioning and purpose of the guidelines + +Our guidelines summarize the standards of practice that the +participating members of the project are expected to follow in order +to facilitate the promotion and operation of the project. Our +guidelines are not a set of rules, and no penalties or other +consequences for violations are set forth in the guidelines. However, +it is possible that your opinion will not be respected within the +community if you disagree with or violate these guidelines. Since +there is no provision in the software distribution license prohibiting +the removal of the guidelines in a derivative project, you can fork +the project to remove the guidelines. + +The guidelines ask members representing companies to pledge that they +will make efforts to ensure that their companies do not engage in +free-riding. However, this is nominal and members are not actually +asked to take any specific action. What actually matters is the +attitude of the company to which the member belongs, not the specific +actions of the member. + + +## The guidelines + +The primary purpose for establishing our guidelines is to improve the +sustainability of the FOSS ecosystem by encouraging companies that +directly benefit from the commercial use of OSS or free software to +contribute to the relevant projects to serve society as a whole. The +members of the project are asked to help raise awareness to make this +happen. + +The second purpose is to prevent conflicts among the members. Although +this project is a software development project, political discussions +may be sometimes required to keep the project moving forward. Some of +the guidelines summarize the items that each member is expected to +follow in order to avoid conflicts among members and to promote calm +and smooth discussions. + + +### Striving to change perceptions about the use of OSS and free software + +* Project members strive to promote the public awareness that use of + open source or free software for free without any contribution is + free-riding and if everyone continues to free-ride, the project will + not last long. + +* Project members strive to promote awareness of the existence, + philosophy, purpose, and content of these guidelines to those who + directly or indirectly use open source or free software. + +* Project members strive to promote the awareness that it is natural + for organizations that make a profit from the commercial use of open + source or free software to make contribution commensurate with the + increased profits from the use of the software to relevant projects, + where the contribution is made in order for the project to serve + society as a whole. This contribution must not be biased to benefit + any specific organizations beyond the purpose or original nature of + the project. On top of that, the contribution herein refers to + providing the following items. + + * Financial support + * Contributing code or documentation + * Providing assistance with tasks necessary to maintain the project + * Providing in-kind equipment, services, and software necessary to + run the project + * Providing any other items needed for the project + +* Project members strive to promote the awareness that organizations + that benefit from the commercial use of open source or free software + should voluntarily and actively offer to contribute to the projects, + not wait until they are asked to do so by the projects. + +* Project members strive to promote that companies should give high + recognition to their members who contribute to open source or free + software projects on the job. + +* Project members strive to promote that if a company agrees with the + objectives of the guidelines, it should indicate this in some way so + that the public is aware of it. + + +### Compliance with laws + +* Each member should comply with the laws of his/her own place of + residence. + * Each member should abide by laws of his/her own place of residence + even if the laws do not have penal provisions. + +* Each member should not follow any request of anti-social groups or + cults. + * The terms "antisocial organization" and "cult" herein refer to + organizations officially recognized as such in each member's place + of residence. The same applies hereinafter. + + +### Maintaining transparency in project operations + +* Each member in the project should disclose information regarding his + or her identity and affiliation when necessary to carry out the + project. In requesting disclosure of the identity and affiliation of + each member, an explanation should be given as to why this is + necessary to carry out the project. + +* In engaging in activities within the project, each member should + make an effort to disclose the basis for decisions in a manner that + the general public can see and understand. + * If the basis for a decision cannot be disclosed, the reason why it + cannot be disclosed should be explained as much as possible. + * If each member notices that the basis for a decision or the reason + why it cannot be disclosed has not been explained in the project, + the member should prompt the person who made the decision to + explain it, even if the matter is not directly related to the + member's own, or if it is a past matter. + + +### Keeping calm and logical discussion + +* Each member should refrain from posting a comment that is considered + likely to cause strong emotions in those who read the comment. + +* Each member should refrain from posting a comment that is not in + line with the project's objectives. + +* Each member of the project should not change the way he/she treats + another member for any of the following reasons. + * Discriminatory reasons (attributes that were determined at the + time of the person's birth and cannot be changed) + * Ideology or beliefs that are not relevant to the purpose of the + project + * Whether or not each member belongs to an antisocial group or + cult is always regarded as relevant to the purpose of the + project. The project may ban a member who is found to be a + member of an anti-social organization or cult for the sole + reason of his/her membership in such an organization. + * Inequalities that existed in the past + +* Each member of the project should treat another member equally at + the time the action is taken. + * In principle, affirmative action is not supported in this project. + Imposing disadvantages on members who do not support affirmative + action is production of new inequalities and should be avoided. If + affirmative action must be taken, the disadvantage for it should + be borne entirely by the supporters of affirmative action. + + +### To resolve the problem throughout the community + +* Each member of the project should listen sincerely to the claims of + other members that there have been violations of the above items and + cooperates in resolving the problem. + +* Project members should not leave it up to the project maintainers to + resolve the problems. + * The relationship between the maintainers and the other members is + not that of parents and children. The maintainers only have the + privileges of the websites related to the project and basically + what you cannot do is not possible for the maintainers either. + + +### Not taking the guidelines as an absolute + +* Each member should understand that each item of these guidelines is + merely a means to achieve the objectives of the guidelines and to + respect basic human rights. + * Each member should always consider first how to achieve the + objectives of the guidelines and respect basic human rights, and + for this purpose, allow deviations from each item of these + guidelines. diff --git a/validation/extern/tlfloat/CONTRIBUTING.md b/validation/extern/tlfloat/CONTRIBUTING.md new file mode 100644 index 0000000..f86473d --- /dev/null +++ b/validation/extern/tlfloat/CONTRIBUTING.md @@ -0,0 +1,51 @@ +# Contributing to Our Project + +Thank you for your interest in contributing to our project. We welcome contributions from the community to help improve this project. + +However, to ensure the sustainability of the project and fairness among stakeholders, we have established specific policies for corporate contributors. + +## Policy for Corporate Contributors + +**In principle, organizations that meet the criteria below are required to agree to the following Corporate Contributor License Agreement (CCLA).** + +Many corporations routinely require their business partners to agree to similar provisions (such as unlimited liability and complete transfer of intellectual property). In fact, this project has explicitly been asked by corporate users of our products to agree to these exact types of clauses in the past. + +**This CCLA was created specifically in response to those experiences.** During funding negotiations, corporate partners presented us with agreements containing the very terms listed in the CCLA. When we expressed concerns about unlimited liability and IP transfer, we were told these were "standard business practices" and non-negotiable. + +**As stated in our Code of Conduct, we believe corporate participants should treat open source maintainers as equal business partners.** This means not demanding contractual terms from maintainers that the corporation's own legal department would refuse to accept if presented by a counterparty. + +If your legal team finds the terms in this CCLA unacceptable for your organization, we encourage you to consider why it was deemed acceptable to demand identical terms from this project's maintainers. + +### Scope of Application + +This policy applies to contributions made on behalf of organizations that: + +1. Incorporate this project's deliverables into their products or services. +2. Derive annual revenue exceeding **US $1 million** from those products or services. + +**NOTE:** Individual contributors and small businesses that do not meet the above criteria are **NOT** required to agree to this CCLA. They may continue to contribute under the standard project license. + +--- + +### Corporate Contributor License Agreement (CCLA) Terms: + +1. **Transfer of Intellectual Property:** + You hereby assign to the Project Maintainer all right, title, and interest in and to this contribution, including all Intellectual Property Rights therein. The Project Maintainer shall be the sole and exclusive owner of the contribution. + +2. **Warranties:** + You represent and warrant that this contribution is free from any defects, fit for the particular purpose of the Project, and does not infringe upon the intellectual property rights of any third party. + +3. **Indemnification & Unlimited Liability:** + You agree to defend, indemnify, and hold harmless the Project Maintainer from and against any and all claims, damages, losses, and expenses arising out of or resulting from this contribution. **Your liability under this agreement is UNLIMITED.** + +--- + +### Authorized Exemption + +We understand that some organizations may prefer not to agree to the terms above. + +Organizations that enter into a separate Maintenance Support Agreement (which includes fair liability caps and mutual respect for IP) with the Project Maintainer are granted an **"Authorized Exemption"** status. + +If your organization cannot accept the terms in this CCLA (such as unlimited liability or complete IP transfer), then it would be inconsistent to demand that the project maintainer accept those same terms in a Maintenance Support Agreement. Organizations seeking an Authorized Exemption are expected to negotiate under terms they themselves would be willing to accept. + +For inquiries regarding CCLA exemption, please contact the maintainers. diff --git a/validation/extern/tlfloat/Jenkinsfile b/validation/extern/tlfloat/Jenkinsfile new file mode 100644 index 0000000..2b543df --- /dev/null +++ b/validation/extern/tlfloat/Jenkinsfile @@ -0,0 +1,344 @@ +pipeline { + agent { label 'jenkinsfile' } + + stages { + stage('Preamble') { + parallel { + stage('x86_64 linux clang-18') { + agent { label 'x86_64 && ubuntu24 && cuda' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + sh ''' + echo "x86_64 clang-18 on" `hostname` + export CC=clang-18 + export CXX=clang++-18 + export CUDACXX=/opt/cuda-12.6/bin/nvcc + mkdir build + cd build + cmake -GNinja -DCMAKE_INSTALL_PREFIX=../../install -DENABLE_CUDA_TEST=True -DENABLE_LTO=True .. + cmake -E time ninja + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j `nproc` + ''' + } + } + + stage('x86_64 linux gcc-13') { + agent { label 'x86_64 && ubuntu24' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + sh ''' + echo "x86_64 gcc-13 on" `hostname` + export CC=gcc-13 + export CXX=g++-13 + mkdir build + cd build + cmake -GNinja -DCMAKE_INSTALL_PREFIX=../../install -DENABLE_ASAN=True .. + cmake -E time ninja + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j `nproc` + ''' + } + } + + stage('cross-s390x linux gcc') { + agent { label 'x86_64 && ubuntu24 && cuda' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + sh ''' + echo "cross-x390x on" `hostname` + mkdir build + cd build + cmake -GNinja .. -DCMAKE_TOOLCHAIN_FILE=../toolchains/s390x-gcc.cmake + cmake -E time ninja + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j `nproc` + ''' + } + } + + stage('cross-ppc64el linux clang') { + agent { label 'x86_64 && ubuntu24 && cuda' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + sh ''' + echo "cross-ppc64el on" `hostname` + mkdir build + cd build + cmake -GNinja .. -DCMAKE_TOOLCHAIN_FILE=../toolchains/ppc64el-llvm.cmake + cmake -E time ninja + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j `nproc` + ''' + } + } + + stage('x86_64 linux emscripten') { + agent { label 'x86_64 && ubuntu24 && emscripten' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + sh '''#!/bin/bash + set -e + echo "emscripten on" `hostname` + ~/opt/emsdk/emsdk install latest + ~/opt/emsdk/emsdk activate latest + source ~/opt/emsdk/emsdk_env.sh + mkdir build + cd build + cmake -GNinja -DCMAKE_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DSET_COMPILER_SUPPORTS_INT128=False -DSET_COMPILER_SUPPORTS_FLOAT128=False -DSET_LONGDOUBLE_IS_FLOAT128=False -DENABLE_INTSQRT=True .. + cmake -E time ninja + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j `nproc` + ''' + } + } + + stage('x86_64 freebsd clang') { + agent { label 'x86_64 && freebsd' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + sh ''' + echo "x86_64 freebsd on" `hostname` + mkdir build + cd build + cmake -GNinja -DCMAKE_INSTALL_PREFIX=../../install -DENABLE_ASAN=False .. + cmake -E time ninja + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j `nproc` + ''' + } + } + + stage('aarch64 linux gcc-14') { + agent { label 'aarch64 && ubuntu24' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + sh ''' + echo "aarch64 gcc-14 on" `hostname` + export CC=gcc-14 + export CXX=g++-14 + mkdir build + cd build + cmake -GNinja -DCMAKE_INSTALL_PREFIX=../../install .. + cmake -E time oomstaller ninja -j `nproc` + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j `nproc` + ''' + } + } + + stage('aarch64 linux clang-19') { + agent { label 'aarch64 && ubuntu24' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + sh ''' + echo "aarch64 clang-19 on" `hostname` + export CC=clang-19 + export CXX=clang++-19 + mkdir build + cd build + cmake -GNinja -DCMAKE_INSTALL_PREFIX=../../install -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld-19" -DENABLE_ASAN=True .. + cmake -E time oomstaller ninja -j `nproc` + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j `nproc` + ''' + } + } + + stage('arm32 linux gcc-12') { + agent { label 'armv7 && debian12' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + sh ''' + echo "arm32 gcc-12 on" `hostname` + export CC=gcc-12 + export CXX=g++-12 + mkdir build + cd build + cmake -GNinja -DCMAKE_INSTALL_PREFIX=../../install .. + cmake -E time oomstaller ninja -j `nproc` + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j `nproc` + ''' + } + } + + stage('x86_64 windows vs2022') { + agent { label 'windows11 && vs2022' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + bat """ + call "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat" + if not %ERRORLEVEL% == 0 exit /b %ERRORLEVEL% + call "winbuild-msvc.bat" -DCMAKE_BUILD_TYPE=Release + if not %ERRORLEVEL% == 0 exit /b %ERRORLEVEL% + ctest -j 4 --output-on-failure + exit /b %ERRORLEVEL% + """ + } + } + + stage('x86_64 windows clang') { + agent { label 'windows11 && vs2022' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + bat """ + call "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat" + if not %ERRORLEVEL% == 0 exit /b %ERRORLEVEL% + call "winbuild-clang.bat" -DCMAKE_BUILD_TYPE=Release + if not %ERRORLEVEL% == 0 exit /b %ERRORLEVEL% + ctest -j 4 --output-on-failure + exit /b %ERRORLEVEL% + """ + } + } + + stage('x86_64 windows clang-cl') { + agent { label 'windows11 && vs2022' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + bat """ + call "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat" + if not %ERRORLEVEL% == 0 exit /b %ERRORLEVEL% + call "winbuild-clang-cl.bat" -DCMAKE_BUILD_TYPE=Release + exit /b %ERRORLEVEL% + """ + } + } + + /* + stage('aarch64 macos gcc-13') { + agent { label 'macos' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + sh ''' + eval "$(/opt/homebrew/bin/brew shellenv)" + export CC=gcc-13 + export CXX=g++-13 + mkdir build + cd build + cmake -GNinja -DCMAKE_INSTALL_PREFIX=../../install -DBUILD_BENCH=True -DENABLE_INLINING=True .. + cmake -E time ninja + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j 8 + ''' + } + } + */ + + stage('aarch64 macos clang-17') { + agent { label 'macos' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + sh ''' + eval "$(/opt/homebrew/bin/brew shellenv)" + export CC=/opt/homebrew/opt/llvm@17/bin/clang-17 + export CXX=/opt/homebrew/opt/llvm@17/bin/clang++ + mkdir build + cd build + cmake -GNinja -DCMAKE_INSTALL_PREFIX=../../install -DBUILD_BENCH=True -DENABLE_INLINING=True .. + cmake -E time ninja + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j 8 + cd .. + mkdir build2 + cd build2 + cmake -GNinja -DCMAKE_INSTALL_PREFIX=../../install2 -DBUILD_LIBS=False -DBUILD_UTILS=False .. + cmake -E time ninja + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j 8 + ''' + } + } + + stage('i386 linux gcc-12') { + agent { label 'i386 && debian12' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + sh ''' + echo "i386 gcc-12 on" `hostname` + export CC=gcc-12 + export CXX=g++-12 + mkdir build + cd build + cmake -GNinja -DCMAKE_INSTALL_PREFIX=../../install .. + cmake -E time ninja + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j `nproc` + ''' + } + } + + stage('riscv linux gcc-14') { + agent { label 'riscv && ubuntu24' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + sh ''' + echo "riscv gcc-14 on" `hostname` + export CC=gcc-14 + export CXX=g++-14 + mkdir build + cd build + cmake -GNinja -DCMAKE_INSTALL_PREFIX=../../install .. + cmake -E time oomstaller ninja -j `nproc` + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j `nproc` + ''' + } + } + + stage('riscv linux clang-20') { + agent { label 'riscv && ubuntu24' } + options { skipDefaultCheckout() } + steps { + cleanWs() + checkout scm + sh ''' + echo "riscv clang-20 on" `hostname` + export CC=clang-20 + export CXX=clang++-20 + mkdir build + cd build + cmake -GNinja -DCMAKE_INSTALL_PREFIX=../../install .. + cmake -E time oomstaller ninja -j `nproc` + export CTEST_OUTPUT_ON_FAILURE=TRUE + ctest -j `nproc` + ''' + } + } + } + } + } +} diff --git a/validation/extern/tlfloat/LICENSE.txt b/validation/extern/tlfloat/LICENSE.txt new file mode 100644 index 0000000..36b7cd9 --- /dev/null +++ b/validation/extern/tlfloat/LICENSE.txt @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/validation/extern/tlfloat/README.adoc b/validation/extern/tlfloat/README.adoc new file mode 100644 index 0000000..5c3e18d --- /dev/null +++ b/validation/extern/tlfloat/README.adoc @@ -0,0 +1,423 @@ +== TLFloat - C++ template library for floating point operations + +Original distribution site : https://github.com/shibatch/tlfloat + +Doxygen-generated reference : +https://shibatch.github.io/tlfloat-doxygen/ + +Introduction video : +https://youtu.be/gKjgknQRuiA + +Some more documataion is available at : +https://github.com/shibatch/tlfloat/wiki + +=== Introduction + +This library implements C{pp} classes with which half, single, double, +quadruple and octuple precision IEEE 754 floating point numbers can be +operated. + +Internally, these classes are implemented as class templates on top of +arbitrary-precision integer class templates so that the templates are +expanded as arbitrary precision floating-point operations by just +changing the template parameters, rather than implementing each +floating-point operation for each precision. The arbitrary-precision +integer class templates are also included in this library. + +=== Features + +* Truly constexpr functions +** Compilable with C{pp}20 standard +** Most of the functions are implemented as templates +*** Completely inlinable functions +*** The functions can be evaluated at compile time +** No malloc required +** Works without libstdc{pp} +* IEEE 754 compliant +** Supports subnormal numbers, NaN, infinity, and signed zero +* Supports a wide range of precisions +** Half, float, double, quad, and octuple precisions +** Returns correctly rounded results for arithmetic oprations, fma and +sqrt +** Returns 1-ulp accuracy results for other math.h functions +*** All functions, including trigonometric functions, return +1ulp-accuracy results for all input range +* Portable +** Compatible with Linux, Windows, microcontrollers, wasm, CUDA (version +12 or later) +** Constexpr functions can be called from CUDA devices with +–expt-relaxed-constexpr compiler option +* C/C{pp}11 API with libquadmath emulation +** Most of libquadmath functions can be used on x86_64 clang and MSVC +** 128-bit integer types can be used on MSVC +** C{pp}11 FP and int classes with overloaded operators are provided +*** C{pp}11 functions in TLFloat are not constexpr +* Moderately optimized +** Optimized for each architecture using intrinsics, etc. +** Library design allows compilers to fully inline operations +** All functions are thread-safe and reentrant +* Implements most of the math.h functions +** Arithmetic operations, comparison, cast operations +** fma, sqrt, hypot, cbrt, fmod, remainder, remquo +** sin, cos, tan, sinpi, cospi, tanpi +** asin, acos, atan, atan2 +** log, log2, log10, log1p +** exp, exp2, exp10, expm1, pow +** sinh, cosh, tanh, asinh, acosh, atanh +** erf, erfc, tgamma +** trunc, floor, ceil, round, rint +** fabs, copysign, fmax, fmin, fdim +** ldexp, frexp, modf, nextafter +** isnan, isinf, finite, fpclassify, signbit +* Implements I/O functions +** Conversion to/from C strings +** printf-family functions +* Provides BigInt template classes in addition to the FP classes +** It provides operations for integers of artibrary length (2^N bits) +** They can be used in the similar way to the ordinary int/uint types +** Data formats are the same as ordinary int/uint +** These classes are internally used to implement the FP classes in +TLFloat + +=== How to build + +[arabic] +. Check out the source code from our GitHub repository : +`++git clone https://github.com/shibatch/tlfloat++` +. Make a separate directory to create an out-of-source build : +`++cd tlfloat && mkdir build && cd build++` +. Run cmake to configure the project : +`++cmake .. -DCMAKE_INSTALL_PREFIX=../../install++` +. Run make to build and install the project : `make && make install` + +=== Compiling hello world example + +Below is a simple C{pp} source code utilizing TLFloat. + +[source,c++] +---- +#include +#include +#include + +using namespace tlfloat; + +Octuple machin() { + return 4 * (4 * atan(1 / Octuple(5)) - atan(1 / Octuple(239))); +} + +int main(int argc, char **argv) { + std::cout << std::setprecision(70) << machin() << std::endl; +} +---- + +To compile this source code, use the following command. + +[source,console] +---- +g++ -std=c++20 -I./install/include hello.cpp +---- + +You have to specify C{pp}20 standard. Note that you do not need to link +any library in this example. This program computes PI in octuple +precision and shows it. + +[source,console] +---- +$ ./a.out +3.141592653589793238462643383279502884197169399375105820974944592307816 +---- + +=== Libquadmath emulation + +In gcc/g{pp} on x86_64 architecture, libquadmath provides math functions +for quadruple precision floating point numbers. However, libquadmath is +not available with clang or Visual Studio. By using the libquadmath +emulation feature of TLFloat library, it is possible to use most of the +features of libquadmath with clang and Visual Studio. + +Below is a simple C source code utilizing this feature. + +[source,c++] +---- +#include +#include + +#define TLFLOAT_LIBQUADMATH_EMULATION +#include + +int main(int argc, char **argv) { + if (argc < 3) exit(-1); + + __float128 q1 = strtoflt128(argv[1], NULL); + __float128 q2 = strtoflt128(argv[2], NULL); + + char str[256]; + quadmath_snprintf(str, sizeof(str), "%.30Qg", powq(q1, q2)); + puts(str); +} +---- + +To compile this source code, use the following command. + +[source,console] +---- +clang quad.c -I./install/include -L./install/lib -ltlfloat -lm +---- + +Below is an example of executing this program. + +[source,console] +---- +$ ./a.out 1.234 2.345 +1.63732181977903314975233575019 +---- + +In order to use the libquadmath emulation feature, define +TLFLOAT_LIBQUADMATH_EMULATION macro, include tlfloat/tlfloat.h instead +of quadmath.h, and link with -ltlfloat -lm. If you need portability, +replace __float128 with tlfloat_quad. + +=== C++11 API + +Besides the C{pp}20 API, TLFloat provides classes that can be used with +C{pp}11 standard. + +Below is a simple C{pp} source code utilizing this feature. + +[source,c++] +---- +#include +#include + +tlfloat_octuple AGM(int N) { + tlfloat_octuple y = tlfloat_sqrto(2) - 1; + tlfloat_octuple a = y * y * 2; + + for(int k=0;k *toHexString to_string_d \ + TLFloat*::getUnpacked detail::UnpackedFloat \ + TLFLOAT_OVERLOAD_OP2 TLFLOAT_OVERLOAD_CMP TLFLOAT_OVERLOAD_CMPQ \ + TLFLOAT_OVERLOAD_OP2I TLFLOAT_OVERLOAD_CMPI TLFLOAT_OVERLOAD_OP2Q +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +FILTER_SOURCE_PATTERNS = +USE_MDFILE_AS_MAINPAGE = README.md +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +SOURCE_TOOLTIPS = YES +USE_HTAGS = NO +VERBATIM_HEADERS = NO +CLANG_ASSISTED_PARSING = NO +CLANG_OPTIONS = +CLANG_DATABASE_PATH = +ALPHABETICAL_INDEX = YES +IGNORE_PREFIX = +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_EXTRA_STYLESHEET = +HTML_EXTRA_FILES = +HTML_COLORSTYLE_HUE = 220 +HTML_COLORSTYLE_SAT = 100 +HTML_COLORSTYLE_GAMMA = 80 +HTML_DYNAMIC_MENUS = YES +HTML_DYNAMIC_SECTIONS = NO +HTML_INDEX_NUM_ENTRIES = 100 +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_NAME = Publisher +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +CHM_INDEX_ENCODING = +BINARY_TOC = NO +TOC_EXPAND = NO +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = org.doxygen.Project +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = +QHG_LOCATION = +GENERATE_ECLIPSEHELP = NO +ECLIPSE_DOC_ID = org.doxygen.Project +DISABLE_INDEX = NO +GENERATE_TREEVIEW = NO +ENUM_VALUES_PER_LINE = 4 +TREEVIEW_WIDTH = 250 +EXT_LINKS_IN_WINDOW = NO +FORMULA_FONTSIZE = 10 +FORMULA_MACROFILE = +USE_MATHJAX = NO +MATHJAX_FORMAT = HTML-CSS +MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/ +MATHJAX_EXTENSIONS = +MATHJAX_CODEFILE = +SEARCHENGINE = YES +SERVER_BASED_SEARCH = NO +EXTERNAL_SEARCH = NO +SEARCHENGINE_URL = +SEARCHDATA_FILE = searchdata.xml +EXTERNAL_SEARCH_ID = +EXTRA_SEARCH_MAPPINGS = +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = +MAKEINDEX_CMD_NAME = makeindex +LATEX_MAKEINDEX_CMD = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4 +EXTRA_PACKAGES = +LATEX_HEADER = +LATEX_FOOTER = +LATEX_EXTRA_STYLESHEET = +LATEX_EXTRA_FILES = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +LATEX_BIB_STYLE = plain +LATEX_EMOJI_DIRECTORY = +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_SUBDIR = +MAN_LINKS = NO +GENERATE_XML = NO +XML_OUTPUT = xml +XML_PROGRAMLISTING = YES +XML_NS_MEMB_FILE_SCOPE = NO +GENERATE_DOCBOOK = NO +DOCBOOK_OUTPUT = docbook +GENERATE_AUTOGEN_DEF = NO +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = YES +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = TLFLOAT_LIBQUADMATH_EMULATION TLFLOAT_ENABLE_INT128_OPT TLFLOAT_DOXYGEN +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +EXTERNAL_PAGES = YES +DIA_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +DOT_NUM_THREADS = 0 +DOT_FONTPATH = +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +UML_LIMIT_NUM_FIELDS = 10 +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +INTERACTIVE_SVG = NO +DOT_PATH = +DOTFILE_DIRS = +MSCFILE_DIRS = +DIAFILE_DIRS = +PLANTUML_JAR_PATH = +PLANTUML_CFG_FILE = +PLANTUML_INCLUDE_PATH = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES diff --git a/validation/extern/tlfloat/src/CMakeLists.txt b/validation/extern/tlfloat/src/CMakeLists.txt new file mode 100644 index 0000000..13c50bc --- /dev/null +++ b/validation/extern/tlfloat/src/CMakeLists.txt @@ -0,0 +1,5 @@ +add_subdirectory("tlfloat") +add_subdirectory("util") +if (BUILD_TESTS) + add_subdirectory("tester") # tester has to come at last +endif() diff --git a/validation/extern/tlfloat/src/include/detect.h.in b/validation/extern/tlfloat/src/include/detect.h.in new file mode 100644 index 0000000..35b2c6f --- /dev/null +++ b/validation/extern/tlfloat/src/include/detect.h.in @@ -0,0 +1,14 @@ +#ifndef __TLFLOAT_DETECT_H_INCLUDED__ +#define __TLFLOAT_DETECT_H_INCLUDED__ + +#cmakedefine TLFLOAT_COMPILER_SUPPORTS_INT128 +#cmakedefine TLFLOAT_COMPILER_SUPPORTS_FLOAT128 +#cmakedefine TLFLOAT_COMPILER_SUPPORTS_ISOFLOAT128 +#cmakedefine TLFLOAT_LONGDOUBLE_IS_FLOAT128 +#cmakedefine TLFLOAT_COMPILER_SUPPORTS_FP16 +#cmakedefine TLFLOAT_COMPILER_SUPPORTS_BF16 +#cmakedefine TLFLOAT_ENABLE_MPFR_WANT_FLOAT128 +#cmakedefine TLFLOAT_ENABLE_MPFR_SINPI +#cmakedefine TLFLOAT_ENABLE_LIBQUADMATH + +#endif diff --git a/validation/extern/tlfloat/src/include/psha2.hpp b/validation/extern/tlfloat/src/include/psha2.hpp new file mode 100644 index 0000000..3812f54 --- /dev/null +++ b/validation/extern/tlfloat/src/include/psha2.hpp @@ -0,0 +1,182 @@ +#ifndef __PSHA2_HPP_INCLUDED__ +#define __PSHA2_HPP_INCLUDED__ + +#include +#include + +struct PSHA2_256_Internal { + // https://github.com/983/SHA-256 + // This is public domain implementation of SHA256 + static inline uint32_t rotr(uint32_t x, int n) { + return (x >> n) | (x << (32 - n)); + } + + static inline uint32_t step1(uint32_t e, uint32_t f, uint32_t g) { + return (rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25)) + ((e & f) ^ ((~ e) & g)); + } + + static inline uint32_t step2(uint32_t a, uint32_t b, uint32_t c) { + return (rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)) + ((a & b) ^ (a & c) ^ (b & c)); + } + + static inline void update_w(uint32_t *w, int i, const uint8_t *buffer) { + int j; + for(j = 0;j < 16;j++) { + if (i < 16) { + w[j] = + ((uint32_t)buffer[0] << 24) | + ((uint32_t)buffer[1] << 16) | + ((uint32_t)buffer[2] << 8) | + ((uint32_t)buffer[3]); + buffer += 4; + } else { + uint32_t a = w[(j + 1) & 15]; + uint32_t b = w[(j + 14) & 15]; + uint32_t s0 = (rotr(a, 7) ^ rotr(a, 18) ^ (a >> 3)); + uint32_t s1 = (rotr(b, 17) ^ rotr(b, 19) ^ (b >> 10)); + w[j] += w[(j + 9) & 15] + s0 + s1; + } + } + } + + uint32_t state[8]; + uint64_t n_bits; + uint8_t buffer_counter; + uint8_t buffer[64]; + + PSHA2_256_Internal() { + state[0] = 0x6a09e667; + state[1] = 0xbb67ae85; + state[2] = 0x3c6ef372; + state[3] = 0xa54ff53a; + state[4] = 0x510e527f; + state[5] = 0x9b05688c; + state[6] = 0x1f83d9ab; + state[7] = 0x5be0cd19; + n_bits = 0; + buffer_counter = 0; + for(int i=0;i<64;i++) buffer[i] = 0; + } + + void block() { + static const uint32_t k[] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, + }; + + uint32_t a = state[0]; + uint32_t b = state[1]; + uint32_t c = state[2]; + uint32_t d = state[3]; + uint32_t e = state[4]; + uint32_t f = state[5]; + uint32_t g = state[6]; + uint32_t h = state[7]; + + uint32_t w[16] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }; + + for(int i = 0;i < 64;i += 16) { + update_w(w, i, buffer); + +#if defined(__clang__) +#pragma clang loop unroll(full) +#endif + for(int j = 0;j < 16;j += 4) { + uint32_t temp; + temp = h + step1(e, f, g) + k[i + j + 0] + w[j + 0]; + h = temp + d; + d = temp + step2(a, b, c); + temp = g + step1(h, e, f) + k[i + j + 1] + w[j + 1]; + g = temp + c; + c = temp + step2(d, a, b); + temp = f + step1(g, h, e) + k[i + j + 2] + w[j + 2]; + f = temp + b; + b = temp + step2(c, d, a); + temp = e + step1(f, g, h) + k[i + j + 3] + w[j + 3]; + e = temp + a; + a = temp + step2(b, c, d); + } + } + + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + state[4] += e; + state[5] += f; + state[6] += g; + state[7] += h; + } + + void append_byte(uint8_t byte) { + buffer[buffer_counter++] = byte; + n_bits += 8; + + if (buffer_counter == 64) { + buffer_counter = 0; + block(); + } + } + + void append(const void *src, size_t n_bytes) { + for(size_t i = 0;i < n_bytes;i++) { + append_byte(((const uint8_t*)src)[i]); + } + } + + void appendWord(const void *src, size_t n_bytes) { +#if !defined(__BYTE_ORDER__) || (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__) + for(size_t i = 0;i < n_bytes;i++) { + append_byte(((const uint8_t*)src)[i]); + } +#else + for(int i = int(n_bytes)-1;i >= 0;i--) { + append_byte(((const uint8_t*)src)[i]); + } +#endif + } + + void finalize() { + uint64_t nb = n_bits; + + append_byte(0x80); + + while(buffer_counter != 64 - 8) { + append_byte(0); + } + + for(int i = 7;i >= 0;i--) { + uint8_t byte = (nb >> 8 * i) & 0xff; + append_byte(byte); + } + } + + void finalize_bytes(void *dst_bytes32) { + uint8_t *ptr = (uint8_t*)dst_bytes32; + finalize(); + + for(int i = 0;i < 8;i++) { + for(int j = 3;j >= 0;j--) { + *ptr++ = (state[i] >> j * 8) & 0xff; + } + } + } +}; + +#endif // #ifndef __PSHA2_HPP_INCLUDED__ diff --git a/validation/extern/tlfloat/src/include/suppress.hpp b/validation/extern/tlfloat/src/include/suppress.hpp new file mode 100644 index 0000000..dbfaaf6 --- /dev/null +++ b/validation/extern/tlfloat/src/include/suppress.hpp @@ -0,0 +1,32 @@ +#ifdef _MSC_VER +#pragma warning (disable : 4101) // unreferenced local variable +#pragma warning (disable : 4244) // possible loss of data +#pragma warning (disable : 4267) // possible loss of data +#pragma warning (disable : 4334) // result of shift converted +#pragma warning (disable : 4805) // unsafe mix of type +#pragma warning (disable : 4996) // deprecation +#endif + +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic ignored "-Wunused" +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-function" +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#pragma GCC diagnostic ignored "-Wattributes" +#pragma GCC diagnostic ignored "-Wrestrict" +#pragma GCC diagnostic ignored "-Wstringop-overflow" +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#pragma GCC diagnostic ignored "-Wformat-truncation" +#pragma GCC diagnostic ignored "-Warray-bounds" +#pragma GCC diagnostic ignored "-Wtautological-compare" +#endif + +#if defined(__clang__) +#pragma clang diagnostic ignored "-Wunknown-warning-option" +#pragma clang diagnostic ignored "-Wunused" +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +#pragma clang diagnostic ignored "-Wtautological-compare" +#pragma clang diagnostic ignored "-Wunqualified-std-cast-call" +#pragma clang diagnostic ignored "-Wbitwise-instead-of-logical" +#pragma clang diagnostic ignored "-Wconstant-evaluated" +#endif diff --git a/validation/extern/tlfloat/src/include/testerutil.hpp b/validation/extern/tlfloat/src/include/testerutil.hpp new file mode 100644 index 0000000..bdf40e9 --- /dev/null +++ b/validation/extern/tlfloat/src/include/testerutil.hpp @@ -0,0 +1,990 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "suppress.hpp" + +#include "psha2.hpp" + +#include + +using namespace std; +using namespace tlfloat; + +#ifndef M_PI +#define M_PI 3.141592653589793238462643383279502884 +#endif + +class RNG { + uint64_t res0 = 0, res1 = 0; + uint32_t nBitsInRes = 0; +public: + virtual uint64_t next64() = 0; + virtual uint32_t next32() { return (uint32_t)next(32); } + + uint64_t next(uint32_t bits) { + if (bits == 64) return next64(); + if (bits > nBitsInRes) { + uint64_t u = next64(); + res0 |= u << nBitsInRes; + res1 = nBitsInRes == 0 ? 0 : (u >> (64 - nBitsInRes)); + nBitsInRes += 64; + } + uint64_t ret = res0 & ((uint64_t(1) << bits) - 1); + res0 >>= bits; + res0 |= res1 << (64 - bits); + res1 >>= bits; + nBitsInRes -= bits; + return ret; + } + + void nextBytes(unsigned char *dst, size_t len) { + while(len >= 8) { + uint64_t u = next64(); + for(int i=0;i<8;i++) dst[i] = (u >> (i * 8)) & 0xff; + dst += 8; + len -= 8; + } + uint64_t u = next(uint32_t(len * 8)); + for(int i=0;i<(int)len;i++) dst[i] = (u >> (i * 8)) & 0xff; + } + +#if !defined(__BYTE_ORDER__) || (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__) + void nextBytesW(unsigned char *dst, size_t len) { nextBytes(dst, len); } +#else + void nextBytesW(unsigned char * const dst, const size_t len_) { + int len = len_, index = 0; + while(len >= 8) { + uint64_t u = next64(); + for(int i=0;i<8;i++) dst[len_-1-i-index] = (u >> (i * 8)) & 0xff; + index += 8; + len -= 8; + } + uint64_t u = next(uint32_t(len * 8)); + for(int i=0;i<(int)len;i++) dst[len_-1-i-index] = (u >> (i * 8)) & 0xff; + } +#endif + + unsigned clz64(uint64_t u) { + unsigned z = 0; + if (u & 0xffffffff00000000ULL) u >>= 32; else z += 32; + if (u & 0x00000000ffff0000ULL) u >>= 16; else z += 16; + if (u & 0x000000000000ff00ULL) u >>= 8; else z += 8; + if (u & 0x00000000000000f0ULL) u >>= 4; else z += 4; + if (u & 0x000000000000000cULL) u >>= 2; else z += 2; + if (u & 0x0000000000000002ULL) u >>= 1; else z += 1; + if (!u) z++; + return z; + } + + uint64_t nextLT(uint64_t bound) { + if (bound == 0) return 0; + + unsigned b = sizeof(uint64_t)*8 - clz64(bound - 1); + uint64_t r = next(b), u = uint64_t(1) << b; + + while(r >= bound) { + r -= bound; + u -= bound; + while(u < bound) { + r = (r << 1) | next(1); + u *= 2; + } + } + return r; + } + + double nextDouble() { + union { + uint64_t u; + double d; + } c; + c.u = next(52); + c.u |= 0x3fe0000000000000ULL; + return c.d; + } + bool nextBool() { return next(1); } + virtual ~RNG() {} +}; + +class LCG64 : public RNG { + uint64_t state = 1; +public: + LCG64(uint64_t seed) { + state = seed; + for(int i=0;i<10;i++) next32(); + } + + LCG64() { + state = chrono::high_resolution_clock::now().time_since_epoch().count(); + for(int i=0;i<10;i++) next32(); + } + + uint32_t next32() { + state = state * 6364136223846793005ULL + 1442695040888963407ULL; + return uint32_t(state >> 32); + } + uint64_t next64() { + uint32_t u = next32(); + return u | (uint64_t(next32()) << 32); + } +}; + +class TLCG64 : public RNG { + uint64_t state = 1; +public: + TLCG64() { + state = chrono::high_resolution_clock::now().time_since_epoch().count(); + for(int i=0;i<10;i++) next32(); + } + + uint32_t next32() { + uint64_t t = chrono::high_resolution_clock::now().time_since_epoch().count(); + state = state * 6364136223846793005ULL + (t << 1) + 1; + return uint32_t(state >> 32); + } + uint64_t next64() { + uint32_t u = next32(); + return u | (uint64_t(next32()) << 32); + } +}; + +shared_ptr createPreferredRNG() { + return shared_ptr(new TLCG64()); +} + +// + +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 +typedef __int128_t INT128; +typedef __uint128_t UINT128; + +void print(char *const buf, UINT128 u) { + if (u == 0) { buf[0] = '0'; buf[1] = '\0'; return; } + char *p = buf; + while(u != 0) { + *p++ = "0123456789" [u % 10]; + u /= 10; + } + for(char *q = buf, *r = p-1;q < r;q++, r--) { + char c = *q; *q = *r; *r = c; + } + *p = '\0'; +} + +string to_string(UINT128 value) { + vector s((1 << 7)/3 + 2); + print(s.data(), value); + return string(s.data()); +} + +string to_string(INT128 value) { + vector s((1 << 7)/3 + 2); + print(s.data(), value >= 0 ? value : -value); + s.data()[s.size()-1] = '\0'; + return (value >= 0 ? "" : "-") + string(s.data()); +} + +ostream& operator<<(ostream &os, INT128 value) { return os << ::to_string(value); } +ostream& operator<<(ostream &os, UINT128 value) { return os << ::to_string(value); } +#endif + +// + +#ifdef __BIGINT_HPP_INCLUDED__ +class CryptUtil { +public: + template + static tlfloat::BigUInt genRand(tlfloat::BigUInt bound, shared_ptr rng) { + tlfloat::BigUInt r = 0; + if (bound == 0) { + rng->nextBytesW((unsigned char *)&r, sizeof(r)); + } else { + unsigned b = (bound - 1).ilogbp1(); + tlfloat::BigUInt u = tlfloat::BigUInt(1) << b; +#if !defined(__BYTE_ORDER__) || (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__) + rng->nextBytesW((unsigned char *)&r, (b >> 6) << 3); +#else + rng->nextBytesW((unsigned char *)&r + sizeof(r) - ((b >> 6) << 3), (b >> 6) << 3); +#endif + r.setWord(b >> 6, rng->next(b & ((1 << 6)-1))); + + while(r >= bound) { + r -= bound; + u -= bound; + while(u < bound) { + r <<= 1; + r.setWord(0, r.getWord(0) | rng->next(1)); + u += u; + } + } + } + return r; + } + + template + static bool millerTest(shared_ptr rng, unsigned s, tlfloat::BigUInt d, const tlfloat::BigUInt& n, const tlfloat::BigUInt& recn) { + tlfloat::BigUInt a = 2 + CryptUtil::genRand(n - 4, rng); + tlfloat::BigUInt x = a.pow(d, n, recn); + if (x == 1 || x == n - 1) return true; + + for(unsigned i=0;i + static bool checkPrimality(const tlfloat::BigUInt& bu, shared_ptr rng, unsigned nloop=64) { + if (bu == 0 || bu == 1 || bu == 4) return false; + if (bu == 2 || bu == 3) return true; + + tlfloat::BigUInt n2 = bu, d = n2 - 1, recn = n2.reciprocal(); + unsigned s = 0; + while((d.getWord(0) & 1) == 0) { d >>= 1; s++; } + + for (unsigned i = 0;i < nloop;i++) if (!CryptUtil::millerTest(rng, s, d, n2, recn)) return false; + return true; + } + + template + static tlfloat::BigUInt genPrime(tlfloat::BigUInt bound, shared_ptr rng) { + tlfloat::BigUInt u = genRand(bound, rng); + u.setWord(0, u.getWord(0) | 1); + for(;;) { + if (checkPrimality(u, rng)) break; + u += 2; + } + return u; + } +}; + +#ifdef __TLFLOAT_H_INCLUDED__ +#ifdef TLFLOAT_INT128_IS_STRUCT +ostream& operator<<(ostream &os, tlfloat_int128_t value) { return os << tlfloat::to_string(value); } +ostream& operator<<(ostream &os, tlfloat_uint128_t value) { return os << tlfloat::to_string(value); } +#endif + +bool equal(tlfloat_int128_t b0, BigInt<7> i0) { + bool b = int64_t(b0 >> 64) == int64_t(i0 >> 64) && + int64_t(b0 & (tlfloat_int128_t)~uint64_t(0)) == int64_t(i0 & BigInt<7>(~uint64_t(0))); + if (!b) { + cerr << "tlfloat_int128 : " << b0 << endl; + cerr << "BigInt<7> : " << i0 << endl; + } + return b; +} + +bool equal(tlfloat_uint128_t b0, BigUInt<7> u0) { + bool b = uint64_t(b0 >> 64) == uint64_t(u0 >> 64) && + uint64_t(b0 & ~uint64_t(0)) == uint64_t(u0 & BigUInt<7>(~uint64_t(0))); + if (!b) { + cerr << "tlfloat_uint128 : " << b0 << endl; + cerr << "BigUInt<7> : " << u0 << endl; + } + return b; +} + +bool equal(BigInt<7> i0, tlfloat_int128_t b0) { return equal(b0, i0); } +bool equal(BigUInt<7> u0, tlfloat_uint128_t b0) { return equal(b0, u0); } +#elif defined(TLFLOAT_COMPILER_SUPPORTS_INT128) +bool equal(__int128_t b0, BigInt<7> i0) { + bool b = int64_t(b0 >> 64) == int64_t(i0 >> 64) && + int64_t(b0 & ~uint64_t(0)) == int64_t(i0 & BigInt<7>(~uint64_t(0))); + if (!b) { + cerr << "int128 : " << b0 << endl; + cerr << "BigInt<7> : " << i0 << endl; + } + return b; +} + +bool equal(__uint128_t b0, BigUInt<7> u0) { + bool b = uint64_t(b0 >> 64) == uint64_t(u0 >> 64) && + uint64_t(b0 & ~uint64_t(0)) == uint64_t(u0 & BigUInt<7>(~uint64_t(0))); + if (!b) { + cerr << "uint128 : " << b0 << endl; + cerr << "BigUInt<7> : " << u0 << endl; + } + return b; +} + +bool equal(BigInt<7> i0, __int128_t b0) { return equal(b0, i0); } +bool equal(BigUInt<7> u0, __uint128_t b0) { return equal(b0, u0); } +#endif + +#endif // #ifdef __BIGINT_HPP_INCLUDED__ + +// + +#ifdef QUADMATH_H +#define ENABLE_QUAD +typedef __float128 quad; +#define M_PIq_ M_PIq + +std::ostream& operator<<(std::ostream &os, const __float128& f) { + char buf[128]; + quadmath_snprintf(buf, sizeof(buf), "%.32Qg", f); + return os << std::string(buf); +} +#endif + +#ifdef TLFLOAT_LONGDOUBLE_IS_FLOAT128 +#define ENABLE_QUAD +typedef long double quad; +#define fabsq fabsl +#define fmaq fmal +#define sqrtq sqrtl +#define ilogbq ilogbl +#define finiteq finitel +#define isnanq isnanl +#define isinfq isinfl +#define truncq truncl +#define floorq floorl +#define ceilq ceill +#define roundq roundl +#define rintq rintl +#define M_PIq_ M_PIl +#endif + +#ifdef _MSC_VER +#define finite__ _finite +#endif + +#ifndef finite__ +#define finite__ isfinite +#endif + +#ifdef __TLFLOAT_HPP_INCLUDED__ +typedef tlfloat::detail::UnpackedFloat ufloat; +typedef tlfloat::detail::UnpackedFloat, 11, 52> udouble; +typedef tlfloat::detail::UnpackedFloat, tlfloat::BigUInt<8>, 15, 112> uquad; +typedef tlfloat::detail::UnpackedFloat, tlfloat::BigUInt<9>, 19, 236> uoctuple; + +typedef tlfloat::detail::UnpackedFloat xfloat; +typedef tlfloat::detail::UnpackedFloat, 0, 62> xdouble; +typedef tlfloat::detail::UnpackedFloat, tlfloat::BigUInt<8>, 0, 126> xquad; +typedef tlfloat::detail::UnpackedFloat, tlfloat::BigUInt<9>, 0, 254> xoctuple; +typedef tlfloat::detail::UnpackedFloat, tlfloat::BigUInt<10>, 0, 510> xsedecuple; + +xfloat xfpi(0x6487ed51U, 0, false, false, false, false); +xdouble xdpi(0x6487ed5110b4611aULL, 0, false, false, false, false); +uint64_t piqa[] = {0x62633145c06e0e69, 0x6487ed5110b4611aULL}; +xquad xqpi(tlfloat::BigUInt<7>(piqa), 0, false, false, false, false); +uint64_t pioa[] = {0x0105DF531D89CD91ULL, 0x948127044533E63AULL, 0x62633145C06E0E68ULL, 0x6487ED5110B4611AULL}; +xoctuple xopi(tlfloat::BigUInt<8>(pioa), 0, false, false, false, false); + +static const Octuple M_PIo_ = (Octuple)xopi.cast((const uoctuple *)nullptr); + +#ifdef ENABLE_QUAD +static_assert(sizeof(quad) == 16, "quad precision FP not supported"); +#else +typedef tlfloat::detail::UnpackedFloat, tlfloat::BigUInt<8>, 0, 126> xquad; +const tlfloat::Quad M_PIq_ = (tlfloat::Quad)xqpi.cast((tlfloat::detail::UnpackedFloat, tlfloat::BigUInt<8>, 15, 112> *)0); +#endif +#endif // #ifdef __TLFLOAT_HPP_INCLUDED__ + +#ifdef MPFR_VERSION_MAJOR +std::string to_string(const mpfr_t& fr, int digits = 51) { + mpfr_t t; + mpfr_inits(t, NULL); + int sign = mpfr_signbit(fr) ? -1 : 1; + char *s = (char *)malloc(digits + 21); + if (mpfr_inf_p(fr)) { + sprintf(s, "%cinf", sign < 0 ? '-' : '+'); + } else if (mpfr_nan_p(fr)) { + sprintf(s, "nan"); + } else { + mpfr_exp_t e; + s[0] = sign < 0 ? '-' : '+'; + s[1] = '0'; + s[2] = '.'; + mpfr_abs(t, fr, GMP_RNDN); + mpfr_get_str(s+3, &e, 10, digits, t, GMP_RNDN); + int ie = e; + char es[32]; + snprintf(es, 30, "e%c%d", ie >= 0 ? '+' : '-', ie >= 0 ? ie : -ie); + strncat(s, es, digits+20); + } + + mpfr_clears(t, NULL); + std::string str = s; + free(s); + return str; +} + +std::ostream& operator<<(std::ostream &os, const mpfr_t& fr) { + return os << to_string(fr); +} + +void mpfr_set_inttype(mpfr_t &rop, uint16_t op, const mpfr_rnd_t rnd) { + mpfr_set_d(rop, op, GMP_RNDN); +} + +template +static void mpfr_set_inttype(mpfr_t &rop, inttype op, const mpfr_rnd_t rnd) { + mpfr_set_d(rop, 0, GMP_RNDN); + for(unsigned u=0;u 4) op >>= 32; + mpfr_add_d(rop, rop, ldexp(d, 32 * u), GMP_RNDN); + } +} + +template +static void mpfr_set_unpacked(mpfr_t &rop, const Unpacked_t& ux, const mpfr_rnd_t rnd) { + if (ux.isnan) { + mpfr_set_nan(rop); + return; + } + if (ux.isinf) { + mpfr_set_inf(rop, ux.sign); + mpfr_setsign(rop, rop, ux.sign, GMP_RNDN); + return; + } + if (ux.iszero) { + mpfr_set_zero(rop, ux.sign); + mpfr_setsign(rop, rop, ux.sign, GMP_RNDN); + return; + } + + mpfr_set_inttype(rop, ux.mant, rnd); + mpfr_set_exp(rop, ux.ilogb() + 1); + mpfr_setsign(rop, rop, ux.sign, GMP_RNDN); +} + +int mpfr_ph(mpfr_t &rop, const mpfr_t &op, int e) { + mpfr_t pi; + mpfr_inits(pi, NULL); + + mpfr_const_pi(pi, GMP_RNDN); + mpfr_mul_d(pi, pi, ldexp(1, -e), GMP_RNDN); + + // + + long int q; + mpfr_remquo(rop, &q, op, pi, GMP_RNDN); + + mpfr_clears(pi, NULL); + + return q; +} + +template +static int mpfr_ph(mpfr_t &rop, const Unpacked_t& ux, int e) { + mpfr_t x; + mpfr_inits(x, NULL); + + mpfr_set_unpacked(x, ux, GMP_RNDN); + int q = mpfr_ph(rop, x, e); + + mpfr_clears(x, NULL); + + return q & 0xff; +} + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) +quad mpfr_sqrt(quad a) { + mpfr_t x; + mpfr_inits(x, NULL); + + mpfr_set_float128(x, a, GMP_RNDN); + mpfr_sqrt(x, x, GMP_RNDN); + quad d = mpfr_get_float128(x, GMP_RNDN); + + mpfr_clears(x, NULL); + + return d; +} +#endif + +template +static double countULP(const Unpacked_t& ux, mpfr_t c, const Unpacked2_t& umin, const Unpacked2_t& umax, bool checkSignedZero=false) { + const int nbmant = umin.nbmant_(); + mpfr_t fra, frb, frc, frd, frmin, frmino2, frmax; + mpfr_inits(fra, frb, frc, frd, frmin, frmino2, frmax, NULL); + + mpfr_set_unpacked(frmin, umin, GMP_RNDN); + mpfr_mul_d(frmino2, frmin, 0.5, GMP_RNDN); + mpfr_set_unpacked(frmax, umax, GMP_RNDN); + + mpfr_abs(fra, c, GMP_RNDN); + bool ciszero = mpfr_cmp(fra, frmino2) < 0; + bool cisinf = mpfr_cmp(fra, frmax) > 0; + + if (ciszero && !ux.iszero) { + mpfr_clears(fra, frb, frc, frd, frmin, frmino2, frmax, NULL); + return 10000; + } + if (checkSignedZero && ciszero && ux.iszero) { + if (mpfr_signbit(c) != ux.sign) { + mpfr_clears(fra, frb, frc, frd, frmin, frmino2, frmax, NULL); + return 10002; + } + } + if (cisinf && ux.isinf && mpfr_signbit(c) == ux.sign) { + mpfr_clears(fra, frb, frc, frd, frmin, frmino2, frmax, NULL); + return 0; + } + if (mpfr_nan_p(c) && ux.isnan) { + mpfr_clears(fra, frb, frc, frd, frmin, frmino2, frmax, NULL); + return 0; + } + if (mpfr_nan_p(c) || ux.isnan) { + mpfr_clears(fra, frb, frc, frd, frmin, frmino2, frmax, NULL); + return 10001; + } + + int e = mpfr_get_exp(c); + + mpfr_set_d(frb, 1, GMP_RNDN); + mpfr_set_exp(frb, e - nbmant); + mpfr_max(frb, frb, frmin, GMP_RNDN); + + mpfr_set_unpacked(frd, ux, GMP_RNDN); + mpfr_sub(fra, frd, c, GMP_RNDN); + mpfr_div(fra, fra, frb, GMP_RNDN); + double u = fabs(mpfr_get_d(fra, GMP_RNDN)); + + mpfr_clears(fra, frb, frc, frd, frmin, frmino2, frmax, NULL); + + return u; +} +#endif // #ifdef MPFR_VERSION_MAJOR + +int64_t rndint(shared_ptr rng, unsigned maxnb = 5) { + unsigned nbits = rng->nextLT(maxnb); + int64_t i = rng->nextLT(1 << nbits) + 1; + if (rng->next(1)) i = -i; + return i; +} + +float rndf(shared_ptr rng) { + uint64_t r = rng->nextLT(1000); + + if (r == 0) { + static float a[] = { +0.0f, -0.0f, (float)+INFINITY, (float)-INFINITY, (float)NAN, + +1.4013e-45f, +2.8026e-45f, +4.2039e-45f, +5.60519e-45f, +7.00649e-4f, + -1.4013e-45f, -2.8026e-45f, -4.2039e-45f, -5.60519e-45f, -7.00649e-4f, + }; + return a[rng->nextLT(sizeof(a)/sizeof(float))]; + } else if (r < 32) { + for(;;) { + float f; + rng->nextBytesW((unsigned char *)&f, sizeof(f)); + if (!isfinite(f)) continue; + if (-1 <= f && f <= 1) continue; + f = rintf(f) * M_PI / 2; + + int32_t u; + memcpy((void *)&u, (void *)&f, sizeof(u)); + u += int(rng->nextLT(5)) - 2; + memcpy((void *)&f, (void *)&u, sizeof(f)); + + return f; + } + } else if (r < 64) { + for(;;) { + float f; + rng->nextBytesW((unsigned char *)&f, sizeof(f)); + if (isfinite(f)) return rndint(rng) + f; + } + } else { + for(;;) { + float f; + rng->nextBytesW((unsigned char *)&f, sizeof(f)); + if (isfinite(f)) return f; + } + } +} + +#ifndef TLFLOAT_FP_NAN +#define TLFLOAT_FP_NAN 0 +#define TLFLOAT_FP_INFINITE 1 +#define TLFLOAT_FP_ZERO 2 +#define TLFLOAT_FP_SUBNORMAL 3 +#define TLFLOAT_FP_NORMAL 4 +#endif + +bool eqquo(int64_t t, long int c) { + if (sizeof(int64_t) == sizeof(long int)) { + return t == c || (c == (1LL << (sizeof(long int)*8-1)) && t == 0); + } else { + return ((t & 7) == (c & 7) && ((t < 0) == (c < 0))) || ((c & 0x7fffffff) == 0); + } +} + +bool cmpfpclass(int sl, int tl) { + if (sl == FP_NAN && tl == TLFLOAT_FP_NAN) return true; + if (sl == FP_INFINITE && tl == TLFLOAT_FP_INFINITE) return true; + if (sl == FP_ZERO && tl == TLFLOAT_FP_ZERO) return true; + if (sl == FP_SUBNORMAL && tl == TLFLOAT_FP_SUBNORMAL) return true; + if (sl == FP_NORMAL && tl == TLFLOAT_FP_NORMAL) return true; + return false; +} + +bool cmpf(float x, float y, int t=0) { + if (isnan(x) && isnan(y)) return true; + uint32_t u, v; + memcpy((void *)&u, (void *)&x, sizeof(u)); + memcpy((void *)&v, (void *)&y, sizeof(v)); + + if (t == 0) return u == v; + + int d = int(int32_t(u) - int32_t(v)); + return -t <= d && d <= t; +} + +double rndd(shared_ptr rng) { + uint64_t r = rng->nextLT(1000); + + if (r == 0) { + static double a[] = { +0.0, -0.0, +INFINITY, -INFINITY, NAN, + +4.94066e-324, +9.88131e-324, +1.4822e-323, +1.97626e-323, +2.47033e-323, + -4.94066e-324, -9.88131e-324, -1.4822e-323, -1.97626e-323, -2.47033e-323, + }; + return a[rng->nextLT(sizeof(a)/sizeof(double))]; + } else if (r < 32) { + for(;;) { + double f; + rng->nextBytesW((unsigned char *)&f, sizeof(f)); + if (!isfinite(f)) continue; + if (-1 <= f && f <= 1) continue; + f = rint(f) * M_PI / 2; + + int64_t u; + memcpy((void *)&u, (void *)&f, sizeof(u)); + u += int(rng->nextLT(5)) - 2; + memcpy((void *)&f, (void *)&u, sizeof(f)); + + return f; + } + } else if (r < 64) { + for(;;) { + double f; + rng->nextBytesW((unsigned char *)&f, sizeof(f)); + if (isfinite(f)) return rndint(rng) + f; + } + } else { + for(;;) { + double f; + rng->nextBytesW((unsigned char *)&f, sizeof(f)); + if (isfinite(f)) return f; + } + } +} + +bool cmpd(double x, double y, int t=0) { + if (isnan(x) && isnan(y)) return true; + uint64_t u, v; + memcpy((void *)&u, (void *)&x, sizeof(u)); + memcpy((void *)&v, (void *)&y, sizeof(v)); + + if (t == 0) return u == v; + + int d = int(int64_t(u) - int64_t(v)); + return -t <= d && d <= t; +} + +#ifdef __TLFLOAT_HPP_INCLUDED__ +Quad rndQ(shared_ptr rng) { + uint64_t r = rng->nextLT(1000); + + if (r == 0) { + Quad pm = Quad::flt_true_min(), nm = -pm; + Quad po = 1, no = -1; + static Quad a[] = { +0.0, -0.0, +INFINITY, -INFINITY, NAN, + pm, nextafter(pm, po), nextafter(nextafter(pm, po), po), + nextafter(nextafter(nextafter(pm, po), po), po), + nextafter(nextafter(nextafter(nextafter(pm, po), po), po), po), + nm, nextafter(nm, no), nextafter(nextafter(nm, no), no), + nextafter(nextafter(nextafter(nm, no), no), no), + nextafter(nextafter(nextafter(nextafter(nm, no), no), no), no), + }; + return a[rng->nextLT(sizeof(a)/sizeof(Quad))]; + } else if (r < 32) { + for(;;) { + Quad f; + rng->nextBytesW((unsigned char *)&f, sizeof(f)); + if (!finite(f)) continue; + if (-1 <= f && f <= 1) continue; + f = rint(f) * M_PIo_ / 2; + + BigInt<7> u; + memcpy((void *)&u, (void *)&f, sizeof(u)); + u += int(rng->nextLT(5)) - 2; + memcpy((void *)&f, (void *)&u, sizeof(f)); + + return f; + } + } else if (r < 64) { + for(;;) { + Quad f; + rng->nextBytesW((unsigned char *)&f, sizeof(f)); + if (finite(f)) return rndint(rng) + f; + } + } else { + for(;;) { + Quad f; + rng->nextBytesW((unsigned char *)&f, sizeof(f)); + if (finite(f)) return f; + } + } +} + +#ifdef ENABLE_QUAD +quad rndq(shared_ptr rng) { return (quad)rndQ(rng); } +typedef quad quad_; + +bool cmpq(quad x, quad y, int t=0) { + if (isnanq(x) && isnanq(y)) return true; + BigUInt<7> u, v; + memcpy((void *)&u, (void *)&x, sizeof(u)); + memcpy((void *)&v, (void *)&y, sizeof(v)); + + if (t == 0) return u == v; + + int d = int(BigInt<7>(u) - BigInt<7>(v)); + return -t <= d && d <= t; +} +#else +typedef Quad quad_; +quad_ rndq(shared_ptr rng) { return rndQ(rng); } +#endif + +bool cmpq(Quad x, Quad y, int t=0) { + if (isnan(x) && isnan(y)) return true; + BigUInt<7> u, v; + memcpy((void *)&u, (void *)&x, sizeof(u)); + memcpy((void *)&v, (void *)&y, sizeof(v)); + + if (t == 0) return u == v; + + int d = int(BigInt<7>(u) - BigInt<7>(v)); + return -t <= d && d <= t; +} + +Octuple rndo(shared_ptr rng) { + uint64_t r = rng->nextLT(1000); + + if (r == 0) { + Octuple pm = Octuple::flt_true_min(), nm = -pm; + Octuple po = 1, no = -1; + static Octuple a[] = { +0.0, -0.0, +INFINITY, -INFINITY, NAN, + pm, nextafter(pm, po), nextafter(nextafter(pm, po), po), + nextafter(nextafter(nextafter(pm, po), po), po), + nextafter(nextafter(nextafter(nextafter(pm, po), po), po), po), + nm, nextafter(nm, no), nextafter(nextafter(nm, no), no), + nextafter(nextafter(nextafter(nm, no), no), no), + nextafter(nextafter(nextafter(nextafter(nm, no), no), no), no), + }; + return a[rng->nextLT(sizeof(a)/sizeof(Octuple))]; + } else if (r < 32) { + for(;;) { + Octuple f; + rng->nextBytesW((unsigned char *)&f, sizeof(f)); + if (!finite(f)) continue; + if (-1 <= f && f <= 1) continue; + f = rint(f) * M_PIo_ / 2; + + BigInt<8> u; + memcpy((void *)&u, (void *)&f, sizeof(u)); + u += int(rng->nextLT(5)) - 2; + memcpy((void *)&f, (void *)&u, sizeof(f)); + + return f; + } + } else if (r < 64) { + for(;;) { + Octuple f; + rng->nextBytesW((unsigned char *)&f, sizeof(f)); + if (finite(f)) return rndint(rng) + f; + } + } else { + for(;;) { + Octuple f; + rng->nextBytesW((unsigned char *)&f, sizeof(f)); + if (finite(f)) return f; + } + } +} + +bool cmpo(Octuple x, Octuple y, int t=0) { + if (isnan(x) && isnan(y)) return true; + BigUInt<8> u, v; + memcpy((void *)&u, (void *)&x, sizeof(u)); + memcpy((void *)&v, (void *)&y, sizeof(v)); + + if (t == 0) return u == v; + + int d = int(BigInt<8>(u) - BigInt<8>(v)); + return -t <= d && d <= t; +} +#endif // #ifdef __TLFLOAT_HPP_INCLUDED__ + +template +vector genTestValues(unsigned n, shared_ptr rng) { + T values[] = { + T("+0.0"), + T("-0.0"), + T::nan(), + T::infinity(false), + T::infinity(true), + T::flt_true_min(false), + nextafter(T::flt_true_min(false), 1), + nextafter(nextafter(T::flt_true_min(false), 1), 1), + nextafter(nextafter(nextafter(T::flt_true_min(false), 1), 1), 1), + nextafter(nextafter(nextafter(nextafter(T::flt_true_min(false), 1), 1), 1), 1), + T::flt_true_min(true), + nextafter(T::flt_true_min(true), -1), + nextafter(nextafter(T::flt_true_min(true), -1), -1), + nextafter(nextafter(nextafter(T::flt_true_min(true), -1), -1), -1), + nextafter(nextafter(nextafter(nextafter(T::flt_true_min(true), -1), -1), -1), -1), + T::flt_max(false), + nextafter(T::flt_max(false), 0), + nextafter(nextafter(T::flt_max(false), 0), 0), + nextafter(nextafter(nextafter(T::flt_max(false), 0), 0), 0), + nextafter(nextafter(nextafter(nextafter(T::flt_max(false), 0), 0), 0), 0), + T::flt_max(true), + nextafter(T::flt_max(true), 0), + nextafter(nextafter(T::flt_max(true), 0), 0), + nextafter(nextafter(nextafter(T::flt_max(true), 0), 0), 0), + nextafter(nextafter(nextafter(nextafter(T::flt_max(true), 0), 0), 0), 0), + nextafter(nextafter(T::flt_min(false), 0), 0), + nextafter(T::flt_min(false), 0), + T::flt_min(false), + nextafter(T::flt_min(false), 1), + nextafter(nextafter(T::flt_min(false), 1), 1), + nextafter(nextafter(T::flt_min(true), 0), 0), + nextafter(T::flt_min(true), 0), + T::flt_min(true), + nextafter(T::flt_min(true), -1), + nextafter(nextafter(T::flt_min(true), -1), -1), + nextafter(T("+1.0"), 0), + nextafter(nextafter(T("+1.0"), 0), 0), + nextafter(nextafter(nextafter(T("+1.0"), 0), 0), 0), + nextafter(T("+1.0"), 3), + nextafter(nextafter(T("+1.0"), 3), 3), + nextafter(nextafter(nextafter(T("+1.0"), 3), 3), 3), + nextafter(T("+2.0"), 0), + nextafter(nextafter(T("+2.0"), 0), 0), + nextafter(nextafter(nextafter(T("+2.0"), 0), 0), 0), + nextafter(T("+2.0"), 3), + nextafter(nextafter(T("+2.0"), 3), 3), + nextafter(nextafter(nextafter(T("+2.0"), 3), 3), 3), + nextafter(T("-1.0"), 0), + nextafter(nextafter(T("-1.0"), 0), 0), + nextafter(nextafter(nextafter(T("-1.0"), 0), 0), 0), + nextafter(T("-1.0"), -3), + nextafter(nextafter(T("-1.0"), -3), -3), + nextafter(nextafter(nextafter(T("-1.0"), -3), -3), -3), + nextafter(T("-2.0"), 0), + nextafter(nextafter(T("-2.0"), 0), 0), + nextafter(nextafter(nextafter(T("-2.0"), 0), 0), 0), + nextafter(T("-2.0"), -3), + nextafter(nextafter(T("-2.0"), -3), -3), + nextafter(nextafter(nextafter(T("-2.0"), -3), -3), -3), + T("+0.25"), + T("-0.25"), + T("+0.5"), + T("-0.5"), + T("+1.0"), + T("-1.0"), + T("+1.5"), + T("-1.5"), + T("+2.0"), + T("-2.0"), + T("+2.5"), + T("-2.5"), + T("+3.0"), + T("-3.0"), + T("+4.0"), + T("-4.0"), + T("+100.0"), + T("-100.0"), + T("+100.5"), + T("-100.5"), + T("+101.0"), + T("-101.0"), + T("+102.0"), + T("-102.0"), + T("+103.0"), + T("-103.0"), + T("+1.234"), + T("-1.234"), + T("+1.234e+10"), + T("-1.234e+10"), + T("+1.234e+30"), + T("-1.234e+30"), + T("+1.234e-10"), + T("-1.234e-10"), + T("+1.234e-30"), + T("-1.234e-30"), + T("0x1.6ac5b262ca1ffp+849"), + T("3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170676"), + T("3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170676e+30"), + T("2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274"), + }; + + vector ret; + for(unsigned i=0;inextBytesW((unsigned char *)&f, sizeof(f)); + ret.push_back(f); + } + + return ret; +} + +#ifdef __BIGINT_HPP_INCLUDED__ +struct converter128 { + BigInt<7> bi; +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + __int128_t i128; + __uint128_t u128; +#endif +#ifdef __TLFLOAT_H_INCLUDED__ + tlfloat_int128_t ti128; + tlfloat_uint128_t tu128; +#endif + + converter128(uint64_t high, uint64_t low) { +#if !defined(__BYTE_ORDER__) || (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__) + uint64_t u[2] = { low, high }; +#else + uint64_t u[2] = { high, low }; +#endif + memcpy(&bi, u, sizeof(bi)); +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + memcpy(&i128, u, sizeof(i128)); + memcpy(&u128, u, sizeof(u128)); +#endif +#ifdef __TLFLOAT_H_INCLUDED__ + memcpy(&ti128, u, sizeof(ti128)); + memcpy(&tu128, u, sizeof(tu128)); +#endif + } +}; +#endif + +size_t fwrite_(const void *ptr, size_t size, size_t nmemb, FILE *fp) { +#if !defined(__BYTE_ORDER__) || (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__) + return fwrite(ptr, size, nmemb, fp); +#else + size_t z = 0; + for(size_t m=0;m +#include +#include +#include +#include + +#include + +#if defined(TLFLOAT_DOXYGEN) +/** All architecture-specific optimizations (e.g., use of intrinsic functions) are disabled if this macro is defined */ +#define TLFLOAT_DISABLE_ARCH_OPTIMIZATION + +/** Functions that require libstdc++ will be disabled if this macro is defined */ +#define TLFLOAT_NO_LIBSTDCXX + +/** TLFLOAT_VERSION_MAJOR is the major version of TLFloat library */ +#define TLFLOAT_VERSION_MAJOR + +/** TLFLOAT_VERSION_MAJOR is the minor version of TLFloat library */ +#define TLFLOAT_VERSION_MINOR + +/** TLFLOAT_VERSION_MAJOR is the patch level of TLFloat library */ +#define TLFLOAT_VERSION_PATCH +#endif + +/*! \cond NO_DOCUMENTATION_WITH_DOXYGEN */ +#define TLFLOAT_NOINLINE +#define TLFLOAT_INLINE +/*! \endcond */ + +#ifndef TLFLOAT_DISABLE_ARCH_OPTIMIZATION +#if defined(__GNUC__) || (defined(__clang__) && !defined(_MSC_VER)) + +#if defined(__x86_64__) && !defined(__CUDA_ARCH__) +#include +#define TLFLOAT_ENABLE_X86INTRIN +#define TLFLOAT_ENABLE_ASM_GNU +#endif + +#if defined(TLFLOAT_COMPILER_SUPPORTS_INT128) && !defined(__CUDA_ARCH__) +#define TLFLOAT_ENABLE_INT128_OPT +#endif + +#if !defined(__CUDA_ARCH__) +#define TLFLOAT_ENABLE_GNUC_CLZ +#ifdef TLFLOAT_ENABLE_INLINING +#undef TLFLOAT_INLINE +#define TLFLOAT_INLINE __attribute__((always_inline)) +#endif +#else +#define TLFLOAT_ENABLE_CUDA_UMUL64HI +#define TLFLOAT_ENABLE_CUDA_CLZ +#endif + +#undef TLFLOAT_NOINLINE +#define TLFLOAT_NOINLINE __attribute__((noinline)) +#endif // #if defined(__GNUC__) || (defined(__clang__) && !defined(_MSC_VER)) + +#ifdef _MSC_VER +#if !defined(__CUDA_ARCH__) + +#if defined(_M_X64) +#include +#define TLFLOAT_ENABLE_X86INTRIN +#endif // #if defined(_M_X64) + +#define TLFLOAT_ENABLE_VCUMUL128 +#define TLFLOAT_ENABLE_VCBITSCANREVERSE + +#ifdef TLFLOAT_ENABLE_INLINING +#undef TLFLOAT_INLINE +#if !defined(__clang__) +#define TLFLOAT_INLINE __forceinline +#else +#define TLFLOAT_INLINE __attribute__((always_inline)) +#endif +#endif // #ifdef TLFLOAT_ENABLE_INLINING +#endif // #if !defined(__CUDA_ARCH__) +#endif // #ifdef _MSC_VER +#endif // #ifndef TLFLOAT_DISABLE_ARCH_OPTIMIZATION + +#if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic ignored "-Wreorder" +#endif +#if defined(__clang__) +#pragma clang diagnostic ignored "-Wreorder" +#endif +#endif + +/// TLFloat library defines all C++ classes and functions in tlfloat namespace +namespace tlfloat { + /** + * This is a simple template struct similar to std::pair. Unlike + * std::pair, the member functions are all constexpr. + */ + template + struct xpair { + firsttype first; + secondtype second; + constexpr TLFLOAT_INLINE xpair(const firsttype& f, const secondtype& s) : first(f), second(s) {} + }; + + namespace detail { + template + struct xarray { T e[N]; }; + + static constexpr TLFLOAT_INLINE xpair adc64_(bool cin, uint64_t lhs, uint64_t rhs) { + uint64_t al = (lhs & 0xffffffff) + (rhs & 0xffffffff) + cin; + lhs >>= 32; rhs >>= 32; + uint64_t ah = (lhs & 0xffffffff) + (rhs & 0xffffffff) + ((al >> 32) != 0); + return xpair((al & 0xffffffff) | (ah << 32), (ah >> 32) != 0); + } + + static constexpr TLFLOAT_INLINE xpair adc64(bool cin, uint64_t lhs, uint64_t rhs) { + if (std::is_constant_evaluated()) return adc64_(cin, lhs, rhs); +#if defined(TLFLOAT_ENABLE_X86INTRIN) + xpair ret(0, false); + ret.second = _addcarry_u64(cin, lhs, rhs, (long long unsigned *)&ret.first); + return ret; +#elif defined(TLFLOAT_ENABLE_INT128_OPT) + __uint128_t a = __uint128_t(lhs) + rhs + cin; + return xpair(uint64_t(a), (a >> 64) != 0); +#else + return adc64_(cin, lhs, rhs); +#endif + } + + static constexpr TLFLOAT_INLINE xpair sbc64_(bool cin, uint64_t lhs, uint64_t rhs) { + uint64_t al = (lhs & 0xffffffff) - (rhs & 0xffffffff) - cin; + lhs >>= 32; rhs >>= 32; + uint64_t ah = (lhs & 0xffffffff) - (rhs & 0xffffffff) - ((al >> 32) != 0); + return xpair((al & 0xffffffff) | (ah << 32), (ah >> 32) != 0); + } + + static constexpr TLFLOAT_INLINE xpair sbc64(bool cin, uint64_t lhs, uint64_t rhs) { + if (std::is_constant_evaluated()) return sbc64_(cin, lhs, rhs); +#if defined(TLFLOAT_ENABLE_X86INTRIN) + xpair ret(0, false); + ret.second = _subborrow_u64(cin, lhs, rhs, (long long unsigned *)&ret.first); + return ret; +#elif defined(TLFLOAT_ENABLE_INT128_OPT) + __uint128_t a = __uint128_t(lhs) - rhs - cin; + return xpair(uint64_t(a), (a >> 64) != 0); +#else + return sbc64_(cin, lhs, rhs); +#endif + } + + static constexpr TLFLOAT_INLINE xpair mul128_(uint64_t lhs, uint64_t rhs) { + uint64_t al = lhs & 0xffffffff, ah = lhs >> 32; + uint64_t bl = rhs & 0xffffffff, bh = rhs >> 32; + uint64_t m = ah * bl + ((al * bl) >> 32) + ((al * bh) & 0xffffffff); + return xpair (ah * bh + (m >> 32) + ((al * bh) >> 32), lhs * rhs); + } + + static constexpr TLFLOAT_INLINE xpair mul128(uint64_t lhs, uint64_t rhs) { + if (std::is_constant_evaluated()) return mul128_(lhs, rhs); +#ifdef TLFLOAT_ENABLE_VCUMUL128 + xpair ret(0, 0); + ret.second = _umul128(lhs, rhs, &ret.first); + return ret; +#elif defined(TLFLOAT_ENABLE_INT128_OPT) + __uint128_t m = lhs * __uint128_t(rhs); + return xpair(uint64_t(m >> 64), uint64_t(m)); +#elif defined(TLFLOAT_ENABLE_CUDA_UMUL64HI) + return xpair(__umul64hi(lhs, rhs), lhs * rhs); +#else + return mul128_(lhs, rhs); +#endif + } + + static constexpr TLFLOAT_INLINE unsigned clz64_(uint64_t u) { + unsigned z = 0; + if (u & 0xffffffff00000000ULL) u >>= 32; else z += 32; + if (u & 0x00000000ffff0000ULL) u >>= 16; else z += 16; + if (u & 0x000000000000ff00ULL) u >>= 8; else z += 8; + if (u & 0x00000000000000f0ULL) u >>= 4; else z += 4; + if (u & 0x000000000000000cULL) u >>= 2; else z += 2; + if (u & 0x0000000000000002ULL) u >>= 1; else z += 1; + if (!u) z++; + return z; + } + + static constexpr TLFLOAT_INLINE unsigned clz64(uint64_t u) { + if (std::is_constant_evaluated()) return clz64_(u); +#ifdef TLFLOAT_ENABLE_VCBITSCANREVERSE + unsigned long idx = 0; + return _BitScanReverse64(&idx, u) ? (63 - idx) : 64; +#elif defined(TLFLOAT_ENABLE_GNUC_CLZ) + return u == 0 ? 64 : __builtin_clzll(u); +#elif defined(TLFLOAT_ENABLE_CUDA_CLZ) + return __clzll(u); +#else + return clz64_(u); +#endif + } + + static constexpr TLFLOAT_INLINE xpair divmod128_64_(uint64_t nh_, uint64_t nl_, uint64_t d_) { + assert(nh_ < d_); + + if (nh_ == 0) return xpair { nl_ / d_, nl_ % d_ }; + + const int s = clz64(d_); + const uint64_t nh = (nh_ << s) | (s == 0 ? 0 : (nl_ >> (64 - s))), nl = nl_ << s, d = d_ << s; + + uint64_t dm0q = nh / (d >> 32), dm0r = nh % (d >> 32); + + if ((dm0q >> 32) || dm0q * (d & 0xffffffff) > (dm0r << 32) + (nl >> 32)) { + dm0q--; + if (!((dm0r += (d >> 32)) >> 32) && + ((dm0q >> 32) || dm0q * (d & 0xffffffff) > (dm0r << 32) + (nl >> 32))) dm0q--; + } + + const uint64_t n2 = (nh << 32) + (nl >> 32) - dm0q * d; + + uint64_t dm1q = n2 / (d >> 32), dm1r = n2 % (d >> 32); + + if ((dm1q >> 32) || dm1q * (d & 0xffffffff) > (dm1r << 32) + (nl & 0xffffffff)) { + dm1q--; + if (!((dm1r += (d >> 32)) >> 32) && + ((dm1q >> 32) || dm1q * (d & 0xffffffff) > (dm1r << 32) + (nl & 0xffffffff))) dm1q--; + } + + return xpair { + ((uint64_t)dm0q << 32) + dm1q, (((n2 << 32) + (nl & 0xffffffff)) - dm1q * d) >> s + }; + } + + static constexpr TLFLOAT_INLINE xpair divmod128_64(uint64_t nh, uint64_t nl, uint64_t d) { + assert(nh < d); + if (std::is_constant_evaluated()) return divmod128_64_(nh, nl, d); +#if defined(__x86_64__) && defined(TLFLOAT_ENABLE_ASM_GNU) + uint64_t r, q; + __asm__("divq %2\n" + : "=d" (r), "=a" (q) + : "rm" (d), "d" (nh), "a" (nl)); + return xpair(q, r); +#elif defined(TLFLOAT_ENABLE_INT128_OPT) + __uint128_t n = (__uint128_t(nh) << 64) | nl; + return xpair { uint64_t(n / d), uint64_t(n % d) }; +#else + return divmod128_64_(nh, nl, d); +#endif + } + + template + class SafeArray { + T* bufPtr; + const int64_t bufSize; + T dummyElm = 0; + public: + SafeArray(T* const bufPtr_, const int64_t bufSize_) : + bufPtr(bufPtr_), bufSize(bufSize_) {} + + T operator[](int64_t pos) const { + if (0 <= pos && pos < bufSize) return bufPtr[pos]; + return 0; + } + + T& operator[](int64_t pos) { + if (0 <= pos && pos < bufSize) return bufPtr[pos]; + return dummyElm; + } + + void strcpyFrom(int64_t pos, const T *p) { + if (pos < 0) return; + while(pos < bufSize-1 && *p != 0) bufPtr[pos++] = *p++; + if (pos < bufSize) bufPtr[pos] = 0; + } + + void memmove(int64_t pos, const T *p, int64_t size) { + if (!(0 <= pos && pos + size <= bufSize)) return; + memcpy(&bufPtr[pos], p, size * sizeof(T)); + } + + void memmove(int64_t dpos, int64_t spos, int64_t size) { + if (!(0 <= dpos && dpos + size <= bufSize)) return; + if (!(0 <= spos && spos + size <= bufSize)) return; + ::memmove(&bufPtr[dpos], &bufPtr[spos], size * sizeof(T)); + } + }; + + template class UnpackedFloat; + + template), int> = 0> + static constexpr TLFLOAT_INLINE T bitmask(int b) { return (T(1) << b) - 1; } + + template), int> = 0> + static constexpr TLFLOAT_INLINE T bitmask(int b) { + T u; + for(int i=0;i<(int)sizeof(T) / 8;i++) { + uint64_t w = 0; + if (i < (b >> 6)) w = 0xffffffffffffffffULL; + if (i == (b >> 6)) w = (1ULL << (b & 63))-1; + u.setWord(i, w); + } + return u; + } + } // namespace detail + + template class TLFloat; + + /** + * This is a trivially copyable template class that represents an + * arbitrary precision unsigned integer. It can represent an + * unsigned integer less than 2^N. The data size of an object is N + * bits, where N must be 7 or greater. + */ + template class BigUInt { + static_assert(N >= 7, "N must be 7 or larger"); + static_assert(sizeof(unsigned long long int) == 8, "unsigned long long int must be 64-bit"); + static_assert(sizeof(long long int) == 8, "long long int must be 64-bit"); + static_assert(sizeof(unsigned int) == 4, "unsigned int must be 32-bit"); + static_assert(sizeof(int) == 4, "int must be 32-bit"); + public: + +#if !defined(__BYTE_ORDER__) || (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__) + BigUInt low = 0, high = 0; +#else + BigUInt high = 0, low = 0; +#endif + + constexpr TLFLOAT_INLINE BigUInt(const BigUInt& h, const BigUInt& l) : low(l), high(h) {} + +#if !defined(TLFLOAT_DOXYGEN) + // Karatsuba algorithm + template= 10), int> = 0> + static constexpr inline BigUInt mul(const BigUInt& lhs, const BigUInt& rhs) { + if (std::is_constant_evaluated()) return BigUInt(lhs.mulhi(rhs), lhs * rhs); + if (lhs.isZero() || rhs.isZero()) return BigUInt(0); + if (lhs.isAllOne() && rhs.isAllOne()) return BigUInt(~BigUInt(1), BigUInt(1)); + auto x0tx1 = lhs.high.adc(lhs.low, false), y0ty1 = rhs.high.adc(rhs.low, false); + BigUInt z1 = BigUInt::mul(x0tx1.first, y0ty1.first); + unsigned z1c = x0tx1.second & y0ty1.second; + if (y0ty1.second) { + auto t = z1.adc(BigUInt(x0tx1.first, 0), false); + z1c += t.second; + z1 = t.first; + } + if (x0tx1.second) { + auto t = z1.adc(BigUInt(y0ty1.first, 0), false); + z1c += t.second; + z1 = t.first; + } + BigUInt z0 = BigUInt::mul(lhs.low, rhs.low), z2 = BigUInt::mul(lhs.high, rhs.high); + auto z0pz2 = z0.adc(z2, false); + z1c -= z0pz2.second; + auto t = z1.sbc(z0pz2.first, false); + return BigUInt(z2, z0) + (BigUInt(z1c - t.second, t.first) << (1 << (N-2))); + } + + template = 0> + static constexpr TLFLOAT_INLINE BigUInt mul(const BigUInt& lhs, const BigUInt& rhs) { + if (std::is_constant_evaluated()) return BigUInt(lhs.mulhi(rhs), lhs * rhs); + BigUInt ret(0); + uint64_t ah = 0, am = 0, al = 0; + const unsigned n = 1 << (N - 7); + for(unsigned i=0;i m = detail::mul128(lhs.getWord(j), rhs.getWord(i - j)); + xpair ub = detail::adc64(false, m.second, al); + al = ub.first; + ub = detail::adc64(ub.second, m.first, am); + am = ub.first; + ah += ub.second; + } + ret.setWord(i, uint64_t(al)); + al = am; am = ah; ah = 0; + } + for(unsigned i=n;i m = detail::mul128(lhs.getWord(j), rhs.getWord(i - j)); + xpair ub = detail::adc64(false, m.second, al); + al = ub.first; + ub = detail::adc64(ub.second, m.first, am); + am = ub.first; + ah += ub.second; + } + ret.setWord(i, uint64_t(al)); + al = am; am = ah; ah = 0; + } + ret.setWord(n*2-1, uint64_t(al)); + return ret; + } + + template = 0> + static constexpr TLFLOAT_INLINE BigUInt mul(const BigUInt& lhs, const BigUInt& rhs) { + xpair m = detail::mul128(lhs.u64, rhs.u64); + return BigUInt(m.first, m.second); + } + + constexpr TLFLOAT_INLINE xpair inc() const { + auto rl = low.inc(); + xpair s(0, false); + s.first.low = rl.first; + s.first.high = high; + if (rl.second) { + auto rh = high.inc(); + s.first.high = rh.first; + s.second = rh.second; + } + return s; + } + constexpr TLFLOAT_INLINE xpair dec() const { + auto rl = low.dec(); + xpair s(0, false); + s.first.low = rl.first; + s.first.high = high; + if (rl.second) { + auto rh = high.dec(); + s.first.high = rh.first; + s.second = rh.second; + } + return s; + } + constexpr TLFLOAT_INLINE xpair adc(const BigUInt& rhs, bool c) const { + auto rl = low.adc(rhs.low, c), rh = high.adc(rhs.high, rl.second); + xpair s(0, false); + s.first.high = rh.first; + s.first.low = rl.first; + s.second = rh.second; + return s; + } + constexpr TLFLOAT_INLINE xpair sbc(const BigUInt& rhs, bool c) const { + auto rl = low.sbc(rhs.low, c), rh = high.sbc(rhs.high, rl.second); + xpair s(0, false); + s.first.high = rh.first; + s.first.low = rl.first; + s.second = rh.second; + return s; + } + + constexpr TLFLOAT_INLINE BigUInt mulhi(const BigUInt& rhs) const { + BigUInt ll = mul(low , rhs.low), lh = mul(low , rhs.high); + BigUInt hl = mul(high, rhs.low); + BigUInt m = hl + ll.high + lh.low, hh = mul(high, rhs.high); + return hh + m.high + lh.high; + } + + constexpr TLFLOAT_INLINE BigUInt mulhiAprx(const BigUInt& rhs) const { + BigUInt hh = mul(high, rhs.high); + BigUInt lh = low.mulhiAprx(rhs.high), hl = high.mulhiAprx(rhs.low); + return hh + hl + lh; + } + constexpr TLFLOAT_INLINE BigUInt mulhiAprx2(const BigUInt& rhs) const { + return mul(high, rhs) + low.mulhiAprx(rhs); + } + + constexpr TLFLOAT_INLINE BigUInt reciprocalAprx() const { + BigUInt x((high + ((~high >> (sizeof(high)*8 - 1)) & 1)).reciprocalAprx()); + BigUInt y((-mulhiAprx2(x)).mulhiAprx2(x)); + return y + y; + } + + /* + In Volume 2: Seminumerical Algorithms, Chapter 4.3: + Multiple-Precision Arithmetic of The Art of Computer Programming, + Donald Ervin Knuth presents "Algorithm D (Division of nonnegative + integers)": + */ + static constexpr TLFLOAT_INLINE xpair div(BigUInt n_, const BigUInt d_) { + assert(n_.high < d_); + + const int s = d_.clz(); + const BigUInt n = n_ << s; + const BigUInt d = d_ << s; + + BigUInt on0 = n.high; + int dm0of = 0; + if (on0.high >= d.high) { + dm0of++; on0 -= d.high; + if (on0.high >= d.high) { + dm0of++; on0 -= d.high; + if (on0.high >= d.high) { dm0of++; on0 -= d.high; } + } + } + + auto dm0 = BigUInt::div(on0, d.high); + BigUInt dm0q = BigUInt(dm0.first) + dm0of, dm0r = dm0.second; + + if (!(dm0q >> (1 << (N-1))).isZero() || + mul(dm0q.low, d.low) > BigUInt(dm0r.low, n.low.high)) { + dm0q--; + if (((dm0r += d.high) >> (1 << (N-1))).isZero() && + (!(dm0q >> (1 << (N-1))).isZero() || + mul(dm0q.low, d.low) > BigUInt(dm0r.low, n.low.high))) dm0q--; + } + + const BigUInt n2 = BigUInt(n.high.low, n.low.high) - dm0q * d; + + BigUInt on1 = n2; + int dm1of = 0; + if (on1.high >= d.high) { + dm1of++; on1 -= d.high; + if (on1.high >= d.high) { + dm1of++; on1 -= d.high; + if (on1.high >= d.high) { dm1of++; on1 -= d.high; } + } + } + + auto dm1 = BigUInt::div(on1, d.high); + BigUInt dm1q = BigUInt(dm1.first) + dm1of, dm1r = dm1.second; + + if (!(dm1q >> (1 << (N-1))).isZero() || + mul(dm1q.low, d.low) > BigUInt(dm1r.low, n.low.low)) { + dm1q--; + if (((dm1r += d.high) >> (1 << (N-1))).isZero() && + (!(dm1q >> (1 << (N-1))).isZero() || + mul(dm1q.low, d.low) > BigUInt(dm1r.low, n.low.low))) dm1q--; + } + + return xpair { + BigUInt(dm0q.low, dm1q.low), (BigUInt(n2.low, n.low.low) - dm1q * d) >> s + }; + } +#endif // #if !defined(TLFLOAT_DOXYGEN) + + public: + template friend class BigUInt; + template friend class BigInt; + template friend class detail::UnpackedFloat; + template friend class TLFloat; + + constexpr TLFLOAT_INLINE BigUInt() = default; + + /** Cast from any primitive unsigned integer */ + template && std::is_unsigned_v && sizeof(T) <= 8), int> = 0> + constexpr TLFLOAT_INLINE BigUInt(T u) : low(u), high(uint64_t(0)) {} + + /** Cast from any primitive signed integer */ + template && !std::is_unsigned_v && sizeof(T) <= 8), int> = 0> + constexpr TLFLOAT_INLINE BigUInt(T i) : BigUInt(i < 0 ? (~BigUInt(0U) - uint64_t(-int64_t(i)) + 1U) : uint64_t(i)) {} + + /** Cast to any primitive unsigned integer */ + template && std::is_unsigned_v && sizeof(T) <= 8 && !std::is_same_v), int> = 0> + constexpr TLFLOAT_INLINE explicit operator T() const { return T(uint64_t(low)); } + + /** Cast to any primitive signed integer */ + template && !std::is_unsigned_v && sizeof(T) <= 8 && !std::is_same_v), int> = 0> + constexpr TLFLOAT_INLINE explicit operator T() const { return uint64_t(low); } + + constexpr TLFLOAT_INLINE explicit operator bool() const { return !isZero(); } + +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + constexpr TLFLOAT_INLINE BigUInt(__uint128_t u) : low(uint64_t(0)), high(uint64_t(0)) { + setWord(0, uint64_t(u & 0xffffffffffffffffULL)); setWord(1, uint64_t(u >> 64)); + } + constexpr TLFLOAT_INLINE explicit operator __uint128_t() const { return (__uint128_t(getWord(1)) << 64) + getWord(0); } + + constexpr TLFLOAT_INLINE explicit BigUInt(__int128_t u) : BigUInt(__uint128_t(u)) {} + constexpr TLFLOAT_INLINE explicit operator __int128_t() const { return __uint128_t(*this); } +#endif + + constexpr TLFLOAT_INLINE BigUInt(const BigUInt& m) = default; + constexpr TLFLOAT_INLINE explicit BigUInt(const BigUInt& h) : low(h.low.low), high(h.low.high) {} + + template* = nullptr> + constexpr TLFLOAT_INLINE BigUInt(const BigUInt& l) : low(BigUInt(l)), high(uint64_t(0)) {} + template (N+1))>* = nullptr> + constexpr TLFLOAT_INLINE explicit BigUInt(const BigUInt& h) : BigUInt(BigUInt(h)) {} + + constexpr TLFLOAT_INLINE BigUInt& operator=(const BigUInt &u) = default; + + constexpr TLFLOAT_INLINE BigUInt(const uint64_t *p) : low(p), high(p + (1 << (N - 7))) {} + + constexpr explicit BigUInt(double d) { + int x = 0; + d = frexp(d, &x); + d = ldexp(d, 53); + x -= 53; + uint64_t l = (uint64_t)fabs(d); + if (x >= 0) { + BigUInt u(l); + u <<= x; + low = u.low; high = u.high; + } else if (x > -60) { + l = l >> -x; + BigUInt u(l); + low = u.low; high = u.high; + } else { + low = high = 0; + } + } + + constexpr explicit operator double() const { + int e0 = ilogbp1(); + double d0 = double((*this << (53 - e0)).getWord(0)); + double d1 = ldexp(d0, e0 - 53); + BigUInt b = *this - BigUInt(d1); + int e1 = b.ilogbp1(); + double d2 = double((b << (64 - e1)).getWord(0)); + double d3 = ldexp(d2, e1 - 64); + return d1 + d3; + } + + constexpr TLFLOAT_INLINE unsigned clz() const { + return high.isZero2() ? low.clz() + (1 << (N-1)) : high.clz(); + } + constexpr TLFLOAT_INLINE unsigned ilogbp1() const { return (1U << N) - clz(); } + constexpr TLFLOAT_INLINE bool isZero() const { return low.isZero() && high.isZero(); } + constexpr TLFLOAT_INLINE bool isZero2() const { return high.isZero2() && low.isZero2(); } + constexpr TLFLOAT_INLINE bool isAllOne() const { return low.isAllOne() && high.isAllOne(); } + constexpr TLFLOAT_INLINE bool msb() const { return high.msb(); } + constexpr TLFLOAT_INLINE uint64_t getWord(unsigned idx) const { + if (idx >= (1 << (N-6))) return 0; + return idx >= (1 << (N-7)) ? high.getWord(idx - (1 << (N-7))) : low.getWord(idx); + } + constexpr TLFLOAT_INLINE void setWord(unsigned idx, uint64_t u) { + if (idx >= (1 << (N-6))) return; + if (idx >= (1 << (N-7))) high.setWord(idx - (1 << (N-7)), u); + else low.setWord(idx, u); + } + constexpr TLFLOAT_INLINE bool bit(unsigned idx) const { + return (getWord(idx >> 6) >> (idx & 63)) & 1; + } + + constexpr TLFLOAT_INLINE BigUInt& operator++() { *this = inc().first; return *this; } + constexpr TLFLOAT_INLINE BigUInt& operator--() { *this = dec().first; return *this; } + constexpr TLFLOAT_INLINE BigUInt operator++(int) { BigUInt t = *this; *this = inc().first; return t; } + constexpr TLFLOAT_INLINE BigUInt operator--(int) { BigUInt t = *this; *this = dec().first; return t; } + + template = 0> + constexpr TLFLOAT_INLINE BigUInt operator+(const BigUInt& rhs) const { return adc(rhs, false).first; } + + template = 0> + constexpr TLFLOAT_INLINE BigUInt operator-(const BigUInt& rhs) const { return sbc(rhs, false).first; } + +#if 1 //!defined(TLFLOAT_ENABLE_INT128_OPT) + template = 0> + constexpr TLFLOAT_INLINE BigUInt operator+(const BigUInt& rhs) const { return adc(rhs, false).first; } + + template = 0> + constexpr TLFLOAT_INLINE BigUInt operator-(const BigUInt& rhs) const { return sbc(rhs, false).first; } +#else + template = 0> + constexpr TLFLOAT_INLINE BigUInt operator+(const BigUInt& rhs) const { + return std::bit_cast(std::bit_cast<__uint128_t>(*this) + std::bit_cast<__uint128_t>(rhs)); + } + + template = 0> + constexpr TLFLOAT_INLINE BigUInt operator-(const BigUInt& rhs) const { + return std::bit_cast(std::bit_cast<__uint128_t>(*this) - std::bit_cast<__uint128_t>(rhs)); + } +#endif + + constexpr TLFLOAT_INLINE BigUInt operator+(const BigUInt& rhs) const { + auto rl = low.adc(rhs, false); + auto rh = high.inc(); + return BigUInt(rl.second ? rh.first : high, rl.first); + } + + constexpr TLFLOAT_INLINE BigUInt operator-(const BigUInt& rhs) const { + auto rl = low.sbc(rhs, false); + auto rh = high.dec(); + return BigUInt(rl.second ? rh.first : high, rl.first); + } + + constexpr TLFLOAT_INLINE BigUInt operator-() const { + BigUInt r = ~*this; + r = r.inc().first; + return r; + } + + constexpr TLFLOAT_INLINE BigUInt operator+() const { return *this; } + + constexpr TLFLOAT_INLINE BigUInt operator*(const BigUInt& rhs) const { + BigUInt ll = mul(low, rhs.low), lh = mul(low, rhs.high); + BigUInt hl = mul(high, rhs.low); + return BigUInt(lh.low + hl.low + ll.high, ll.low); + } + constexpr TLFLOAT_INLINE BigUInt operator*(const BigUInt& rhs) const { + BigUInt ll = mul(low, rhs), hl = mul(high, rhs); + return BigUInt(hl.low + ll.high, ll.low); + } + + constexpr TLFLOAT_INLINE BigUInt operator/(const BigUInt& rhs) const { + return div(*this, rhs).first; + } + + constexpr TLFLOAT_INLINE BigUInt operator%(const BigUInt& rhs) const { + return div(*this, rhs).second; + } + + /** This method returns ((1 << N) / *this) */ + constexpr TLFLOAT_INLINE BigUInt reciprocal() const { + unsigned z = clz(); + BigUInt t0 = (*this << z).reciprocalAprx(); + if (z < (1 << N) - (1 << (N-4))) return t0 >> ((1 << N) - 1 - z); + BigUInt t1 = (-(*this << z).mulhi(t0)).mulhi(t0); + return t1 >> ((1 << N) - 2 - z); + } + + /** This method returns approximation of (((1 << (N*2))-1) / ((1 << ((1 << N)-1)) | *this) - (1 << ((1 << N)))) */ + constexpr TLFLOAT_INLINE BigUInt reciprocal2() const { + BigUInt t0 = ((BigUInt(1) << ((1 << N)-1)) | *this); + BigUInt t1 = t0.reciprocalAprx() << 1; + BigUInt t2 = -t0.mulhi(t1); + return t2.mulhi(t1) + (-t0).mulhi(t1) + (t2 - t0); + } + + constexpr TLFLOAT_INLINE bool eq(BigUInt const& rhs) const { return low.eq(rhs.low) && high.eq(rhs.high); } + constexpr TLFLOAT_INLINE bool operator==(BigUInt const& rhs) const { return eq(rhs); } + constexpr TLFLOAT_INLINE bool operator!=(BigUInt const& rhs) const { return !eq(rhs); } + + constexpr TLFLOAT_INLINE int compare(BigUInt const& rhs) const { + int c = high.compare(rhs.high); + if (c == 0) return low.compare(rhs.low); + return c; + } + constexpr TLFLOAT_INLINE bool operator> (BigUInt const& rhs) const { return compare(rhs) > 0; } + constexpr TLFLOAT_INLINE bool operator< (BigUInt const& rhs) const { return rhs > *this; } + constexpr TLFLOAT_INLINE bool operator<=(BigUInt const& rhs) const { return !(*this > rhs); } + constexpr TLFLOAT_INLINE bool operator>=(BigUInt const& rhs) const { return !(*this < rhs); } + + constexpr TLFLOAT_INLINE BigUInt operator&(const BigUInt& rhs) const { return BigUInt(high & rhs.high, low & rhs.low); } + constexpr TLFLOAT_INLINE BigUInt operator|(const BigUInt& rhs) const { return BigUInt(high | rhs.high, low | rhs.low); } + constexpr TLFLOAT_INLINE BigUInt operator^(const BigUInt& rhs) const { return BigUInt(high ^ rhs.high, low ^ rhs.low); } + constexpr TLFLOAT_INLINE BigUInt operator~() const { return BigUInt(~high, ~low); } + + constexpr TLFLOAT_INLINE BigUInt operator<<(int n) const { + if (n > 0) { + if (n >= (1 << N)) return uint64_t(0); + return BigUInt((high << n) | (low >> ((1 << (N-1)) - n)) , (low << n)); + } else if (n < 0) { + if (n <= -(1 << N)) return uint64_t(0); + return BigUInt((high >> -n) , (high << ((1 << (N-1)) + n)) | (low >> -n)); + } + return *this; + } + constexpr TLFLOAT_INLINE BigUInt operator>>(int n) const { return *this << -n; } + + constexpr TLFLOAT_INLINE BigUInt& operator<<=(int n) { *this = *this << n; return *this; } + constexpr TLFLOAT_INLINE BigUInt& operator>>=(int n) { *this = *this >> n; return *this; } + + // + + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigUInt operator+(const rhstype &rhs) const { return operator+(BigUInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigUInt operator-(const rhstype &rhs) const { return operator-(BigUInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigUInt operator*(const rhstype &rhs) const { return operator*(BigUInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigUInt operator/(const rhstype &rhs) const { return operator/(BigUInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigUInt operator%(const rhstype &rhs) const { return operator%(BigUInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigUInt operator&(const rhstype &rhs) const { return operator&(BigUInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigUInt operator|(const rhstype &rhs) const { return operator|(BigUInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigUInt operator^(const rhstype &rhs) const { return operator^(BigUInt(rhs)); } + + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigUInt operator+(const lhstype c, const BigUInt& rhs) { return BigUInt(c) + rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigUInt operator-(const lhstype c, const BigUInt& rhs) { return BigUInt(c) - rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigUInt operator*(const lhstype c, const BigUInt& rhs) { return BigUInt(c) * rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigUInt operator/(const lhstype c, const BigUInt& rhs) { return BigUInt(c) / rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigUInt operator%(const lhstype c, const BigUInt& rhs) { return BigUInt(c) % rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigUInt operator&(const lhstype c, const BigUInt& rhs) { return BigUInt(c) & rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigUInt operator|(const lhstype c, const BigUInt& rhs) { return BigUInt(c) | rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigUInt operator^(const lhstype c, const BigUInt& rhs) { return BigUInt(c) ^ rhs; } + + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE bool operator==(const rhstype& rhs) const { return operator==(BigUInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE bool operator!=(const rhstype& rhs) const { return operator!=(BigUInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE bool operator> (const rhstype& rhs) const { return operator> (BigUInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE bool operator< (const rhstype& rhs) const { return operator< (BigUInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE bool operator>=(const rhstype& rhs) const { return operator>=(BigUInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE bool operator<=(const rhstype& rhs) const { return operator<=(BigUInt(rhs)); } + + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend bool operator==(const lhstype& lhs, const BigUInt& rhs) { return BigUInt(lhs) == rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend bool operator!=(const lhstype& lhs, const BigUInt& rhs) { return BigUInt(lhs) != rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend bool operator> (const lhstype& lhs, const BigUInt& rhs) { return BigUInt(lhs) > rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend bool operator< (const lhstype& lhs, const BigUInt& rhs) { return BigUInt(lhs) < rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend bool operator>=(const lhstype& lhs, const BigUInt& rhs) { return BigUInt(lhs) >= rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend bool operator<=(const lhstype& lhs, const BigUInt& rhs) { return BigUInt(lhs) <= rhs; } + + // + + template + constexpr TLFLOAT_INLINE BigUInt& operator=(const srctype& s) { + BigUInt n(s); + *this = n; + return *this; + } + + template + constexpr TLFLOAT_INLINE BigUInt& operator+=(const rhstype& rhs) { *this = *this + BigUInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigUInt& operator-=(const rhstype& rhs) { *this = *this - BigUInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigUInt& operator*=(const rhstype& rhs) { *this = *this * BigUInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigUInt& operator/=(const rhstype& rhs) { *this = *this / BigUInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigUInt& operator%=(const rhstype& rhs) { *this = *this % BigUInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigUInt& operator&=(const rhstype& rhs) { *this = *this & BigUInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigUInt& operator|=(const rhstype& rhs) { *this = *this | BigUInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigUInt& operator^=(const rhstype& rhs) { *this = *this ^ BigUInt(rhs); return *this; } + + constexpr TLFLOAT_INLINE BigUInt& operator+=(bool rhs) { if (rhs) *this = this->inc().first; return *this; } + + // + + /** This method performs division and modulo at a time. Give rhs.reciprocal() as the second argument */ + constexpr TLFLOAT_INLINE BigUInt divmod(const BigUInt& rhs, const BigUInt& recip, BigUInt* mod) const { + if (rhs == 1) { *mod = 0; return *this; } + BigUInt q = this->mulhi(recip), m = *this - q * rhs; + if (!(rhs > m)) { q++; m = m - rhs; } + if (mod) *mod = m; + return q; + } + + /** This method performs division and modulo at a time. Give rhs.reciprocal() as the second argument */ + constexpr TLFLOAT_INLINE xpair divmod(const BigUInt& rhs, const BigUInt& recip) const { + if (rhs == 1) return xpair(*this, 0); + BigUInt q = this->mulhi(recip), m = *this - q * rhs; + if (!(rhs > m)) { q++; m = m - rhs; } + return xpair(q, m); + } + + /** This method performs division and modulo at a time. */ + constexpr TLFLOAT_INLINE xpair divmod(const BigUInt& rhs) const { + return div(*this, rhs); + } + + /** This method finds the quotient and remainder of (*this << ((1 + << N)-1)) divided by (rhs | (1 << ((1 << N)-1))) at a time. Give + rhs.reciprocal2() as the second argument. */ + constexpr TLFLOAT_INLINE xpair divmod2(const BigUInt& rhs, const BigUInt& recip2) const { + BigUInt q = (mulhi(recip2) >> 1) + (*this >> 1); + BigUInt rhs2 = rhs | (BigUInt(1) << ((1 << N)-1)); + BigUInt r = (BigUInt(*this) << ((1 << N)-1)) - BigUInt::mul(q, rhs2); + if (r.bit((1 << (N+1))-1)) { + q--; r += rhs2; + } else if (!(rhs2 > r)) { + q++; r -= rhs2; + } + return xpair(q, (BigUInt)r); + } + + /** This method finds the quotient and remainder of (*this << ((1 + << N)-1)) divided by (rhs | (1 << ((1 << N)-1))) at a time. */ + constexpr TLFLOAT_INLINE xpair divmod2(const BigUInt& rhs) const { + return div(BigUInt(*this) << ((1 << N)-1), rhs | (BigUInt(1) << ((1 << N)-1))); + } + + constexpr TLFLOAT_INLINE BigUInt mod(const BigUInt& rhs, const BigUInt& recip) const { + if (rhs == 1) return 0; + BigUInt q = this->mulhi(recip), m = *this - q * rhs; + return m >= rhs ? m - rhs : m; + } + + constexpr BigUInt pow(BigUInt e, const BigUInt& m = 0, BigUInt recm = 0) const { + if (m == 1) return 0; + bool mIsZero = m.isZero(); + if (!mIsZero && recm.isZero()) recm = m.reciprocal(); + BigUInt r = 1, b = *this; + if (!mIsZero) b = b.mod(m, recm); + while(e > 0) { + if (e.getWord(0) & 1) { + r *= b; + if (!mIsZero) r = r.mod(m, recm); + } + e >>= 1; + b *= b; + if (!mIsZero) b = b.mod(m, recm); + } + return r; + } + + constexpr BigUInt gcd(BigUInt b) const { + BigUInt a = *this; + while(!b.isZero()) { + BigUInt t = b; + b = a % b; + a = t; + } + return a; + } + + // + + constexpr TLFLOAT_NOINLINE BigUInt(const char *p_, const char **endptr = nullptr, const int base_ = 10) { + const char *p = p_; + bool success = false; + while(*p == ' ') p++; + bool sign = false; + if (*p == '-') { + p++; sign = true; + } else if (*p == '+') { + p++; + } + int base = base_; + if (*p == '0' && (*(p+1) == 'x' || *(p+1) == 'X') && (base_ == 0 || base_ == 16)) { + base = 16; p += 2; + } else if (*p == '0' && (base_ == 0 || base_ == 8)) { + base = 8; p += 1; success = true; + } else if (base_ == 0) { + base = 10; + } + + if (base < 2 || base > 36) { low = high = 0; return; } + + BigUInt r; + uint64_t u = 0, d = 1; + while(*p != '\0') { + int x = 0; + if (('0' <= *p && *p <= '9')) { + x = *p - '0'; + } else if ('a' <= *p && *p <= 'z') { + x = *p - 'a' + 10; + } else if ('A' <= *p && *p <= 'Z') { + x = *p - 'A' + 10; + } else break; + if (x >= base) break; + u = u * base + x; + d *= base; + if (d >= (~uint64_t(0)) / base - 1) { + r = r * d + u; u = 0; d = 1; + } + p++; + success = true; + } + r = r * d + u; + low = r.low; high = r.high; + if (endptr) *endptr = success ? p : p_; + if (sign) *this = 1 + ~(*this); + } + + class Montgomery { + BigUInt ninv(BigUInt n) { + BigUInt nr(1); + for (int i = 0; i < N; i++) nr *= 2 - n * nr; + return nr; + } + public: + const BigUInt n, nr; + const BigUInt recn; + const BigUInt one; + + constexpr Montgomery(BigUInt n) : n(n), nr(ninv(n)), recn(BigUInt(n).reciprocal()), one(transform(1)) {} + + Montgomery& operator=(const Montgomery&) = delete; + Montgomery(Montgomery&) = delete; + + constexpr BigUInt reduce(const BigUInt& x) const { + BigUInt q = x.low * nr; + BigUInt m = q.mulhi(n); + BigUInt y = x.high - m; + return x.high < m ? y + n : y; + } + + constexpr BigUInt mul(const BigUInt& x, const BigUInt& y) const { + return reduce(BigUInt::mul(x, y)); + } + + constexpr BigUInt transform(const BigUInt& x) const { + return BigUInt(x, 0).mod(n, recn).low; + } + + constexpr BigUInt pow(BigUInt a, BigUInt e) const { + // a is in Montgomery representation + BigUInt r = one; + + for (;;) { + if (e.getWord(0) & 1) r = mul(r, a); + e >>= 1; + if (e.isZero()) break; + a = mul(a, a); + } + + return r; // r is in Montgomery representation + } + }; + }; + + template<> class BigUInt<6> { + public: + uint64_t u64 = 0; + + private: + constexpr TLFLOAT_INLINE xpair inc() const { + xpair s = { 0, false }; + s.first = u64 + 1; + s.second = s.first == 0; + return s; + } + constexpr TLFLOAT_INLINE xpair dec() const { + xpair s = { 0, false }; + s.second = u64 == 0; + s.first = u64 - 1; + return s; + } + constexpr TLFLOAT_INLINE xpair adc(const BigUInt& rhs, bool c) const { + xpair s = { 0, false }; + xpair ub = detail::adc64(c, u64, rhs.u64); + s.first = ub.first; + s.second = ub.second; + return s; + } + constexpr TLFLOAT_INLINE xpair sbc(const BigUInt& rhs, bool c) const { + xpair s = { 0, false }; + xpair ub = detail::sbc64(c, u64, rhs.u64); + s.first = ub.first; + s.second = ub.second; + return s; + } + + constexpr TLFLOAT_INLINE BigUInt reciprocalAprx() const { + BigUInt x(((~0ULL) / (u64 >> 32)) << 31); + return (BigUInt(uint64_t(0)) - mulhi(x)).mulhi(x) << 1; + } + + constexpr TLFLOAT_INLINE BigUInt mulhi(const BigUInt& rhs) const { return detail::mul128(u64, rhs.u64).first; } + constexpr TLFLOAT_INLINE BigUInt mulhiAprx(const BigUInt& rhs) const { return mulhi(rhs); } + + static constexpr TLFLOAT_INLINE xpair div(BigUInt<7> u, BigUInt d) { + assert(u.high.u64 < d.u64); + auto a = detail::divmod128_64(u.high.u64, u.low.u64, d.u64); + return xpair { a.first, a.second }; + } + + public: + template friend class BigUInt; + template friend class BigInt; + + constexpr TLFLOAT_INLINE explicit BigUInt(const uint64_t *p) : u64(*p) {} + + constexpr TLFLOAT_INLINE bool isZero() const { return u64 == 0; } + constexpr TLFLOAT_INLINE bool isZero2() const { return u64 == 0; } + constexpr TLFLOAT_INLINE bool isAllOne() const { return u64 == ~uint64_t(0); } + constexpr TLFLOAT_INLINE bool msb() const { return u64 >> 63; } + constexpr TLFLOAT_INLINE uint64_t getWord(unsigned idx) const { return u64; } + constexpr TLFLOAT_INLINE void setWord(unsigned idx, uint64_t u) { u64 = u; } + + constexpr TLFLOAT_INLINE bool eq(BigUInt const& rhs) const { return u64 == rhs.u64; } + + constexpr TLFLOAT_INLINE BigUInt& operator=(const BigUInt &u) = default; + + constexpr TLFLOAT_INLINE BigUInt operator+(const BigUInt& rhs) const { return u64 + rhs.u64; } + constexpr TLFLOAT_INLINE BigUInt operator-(const BigUInt& rhs) const { return u64 - rhs.u64; } + constexpr TLFLOAT_INLINE BigUInt operator*(const BigUInt& rhs) const { return u64 * rhs.u64; } + constexpr TLFLOAT_INLINE BigUInt operator/(const BigUInt& rhs) const { return u64 / rhs.u64; } + constexpr TLFLOAT_INLINE BigUInt operator%(const BigUInt& rhs) const { return u64 % rhs.u64; } + + constexpr TLFLOAT_INLINE BigUInt operator-() const { return 1 + ~u64; } + constexpr TLFLOAT_INLINE BigUInt& operator++() { *this = u64+1; return *this; } + constexpr TLFLOAT_INLINE BigUInt& operator--() { *this = u64-1; return *this; } + constexpr TLFLOAT_INLINE BigUInt operator++(int) { BigUInt t = *this; *this = u64+1; return t; } + constexpr TLFLOAT_INLINE BigUInt operator--(int) { BigUInt t = *this; *this = u64-1; return t; } + + constexpr TLFLOAT_INLINE bool operator==(BigUInt const& rhs) const { return u64 == rhs.u64; } + constexpr TLFLOAT_INLINE bool operator!=(BigUInt const& rhs) const { return !(*this == rhs); } + constexpr TLFLOAT_INLINE bool operator> (BigUInt const& rhs) const { return u64 > rhs.u64; } + constexpr TLFLOAT_INLINE bool operator>=(BigUInt const& rhs) const { return u64 >= rhs.u64; } + + template + constexpr TLFLOAT_INLINE BigUInt& operator+=(const rhstype& rhs) { *this = *this + BigUInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigUInt& operator-=(const rhstype& rhs) { *this = *this - BigUInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigUInt& operator*=(const rhstype& rhs) { *this = *this * BigUInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigUInt& operator/=(const rhstype& rhs) { *this = *this / BigUInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigUInt& operator%=(const rhstype& rhs) { *this = *this % BigUInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigUInt& operator&=(const rhstype& rhs) { *this = *this & BigUInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigUInt& operator|=(const rhstype& rhs) { *this = *this | BigUInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigUInt& operator^=(const rhstype& rhs) { *this = *this ^ BigUInt(rhs); return *this; } + + constexpr TLFLOAT_INLINE int compare(BigUInt const& rhs) const { + if (u64 > rhs.u64) return +1; + if (u64 < rhs.u64) return -1; + return 0; + } + + constexpr TLFLOAT_INLINE BigUInt operator&(const BigUInt& rhs) const { return u64 & rhs.u64; } + constexpr TLFLOAT_INLINE BigUInt operator|(const BigUInt& rhs) const { return u64 | rhs.u64; } + constexpr TLFLOAT_INLINE BigUInt operator^(const BigUInt& rhs) const { return u64 ^ rhs.u64; } + constexpr TLFLOAT_INLINE BigUInt operator~() const { return ~u64; } + constexpr TLFLOAT_INLINE BigUInt operator<<(int n) const { + return (n > 63 || n < -63) ? 0 : n >= 0 ? (u64 << n) : (u64 >> -n); + } + constexpr TLFLOAT_INLINE BigUInt operator>>(int n) const { return *this << -n; } + constexpr TLFLOAT_INLINE unsigned clz() const { return detail::clz64(u64); } + + // + + constexpr TLFLOAT_INLINE BigUInt() = default; + constexpr TLFLOAT_INLINE BigUInt(const BigUInt &m) = default; + constexpr TLFLOAT_INLINE BigUInt(uint64_t u) : u64(u) {} + constexpr TLFLOAT_INLINE explicit operator unsigned long long int() const { return (unsigned long long)u64; } + constexpr TLFLOAT_INLINE explicit operator unsigned long int() const { return (unsigned long)u64; } + + constexpr TLFLOAT_INLINE BigUInt(const BigUInt<7>& h) : BigUInt(h.low) {} + + constexpr TLFLOAT_INLINE BigUInt reciprocal2() const { + BigUInt t0 = ((BigUInt(1) << ((1 << 6)-1)) | *this); + BigUInt t1 = t0.reciprocalAprx() << 1; + BigUInt t2 = -t0.mulhi(t1); + return t2.mulhi(t1) + (-t0).mulhi(t1) + (t2 - t0); + } + + constexpr TLFLOAT_INLINE xpair divmod2(const BigUInt& rhs, const BigUInt& recip2) const { + BigUInt q = (mulhi(recip2) >> 1) + (*this >> 1); + BigUInt rhs2 = rhs | (BigUInt(1) << ((1 << 6)-1)); + BigUInt<7> r = (BigUInt<7>(*this) << ((1 << 6)-1)) - BigUInt<7>::mul(q, rhs2); + if (r.bit((1 << 7)-1)) { + q--; r += rhs2; + } else if (!(rhs2 > r)) { + q++; r -= rhs2; + } + return xpair(q, (BigUInt)r); + } + + constexpr TLFLOAT_INLINE xpair divmod2(const BigUInt& rhs) const { + return div(BigUInt<7>(*this) << ((1 << 6)-1), rhs | (1ULL << ((1 << 6)-1))); + } + + constexpr TLFLOAT_INLINE xpair divmod(const BigUInt& rhs) const { + return xpair { *this / rhs, *this % rhs }; + } + }; + + /** + * This is a trivially copyable template class that represents an + * arbitrary precision signed integer. It can represent an integer + * between -(2^(N-1)) and 2^(N-1)-1. The data size of an object is + * N bits, where N must be 7 or greater. + */ + template class BigInt { + static_assert(N >= 7, "N must be 7 or larger"); + BigUInt u = 0; + + template friend class BigUInt; + template friend class BigInt; + public: + constexpr TLFLOAT_INLINE BigInt() = default; + + /** Cast from any primitive signed integer */ + template && !std::is_unsigned_v && sizeof(T) <= 8), int> = 0> + constexpr TLFLOAT_INLINE BigInt(T i) : u(i < 0 ? -BigUInt(uint64_t(-int64_t(i))) : BigUInt(uint64_t(i))) {} + + /** Cast from any primitive unsigned integer */ + template && std::is_unsigned_v && sizeof(T) <= 8), int> = 0> + constexpr TLFLOAT_INLINE BigInt(T u) : u(BigUInt(u)) {} + + /** Cast to any primitive signed integer */ + template && !std::is_unsigned_v && sizeof(T) <= 8 && !std::is_same_v), int> = 0> + constexpr TLFLOAT_INLINE explicit operator T() const { return T(u.getWord(0)); } + + /** Cast to any primitive unsigned integer */ + template && std::is_unsigned_v && sizeof(T) <= 8 && !std::is_same_v), int> = 0> + constexpr TLFLOAT_INLINE explicit operator T() const { return int64_t(*this); } + + constexpr TLFLOAT_INLINE explicit operator bool() const { return !u.isZero(); } + +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + constexpr TLFLOAT_INLINE BigInt(__int128_t u) : BigInt(BigUInt(__uint128_t(u))) {} + constexpr TLFLOAT_INLINE explicit operator __int128_t() const { return (__int128_t)BigUInt(*this); } + + constexpr TLFLOAT_INLINE explicit BigInt(__uint128_t u) : BigInt(BigUInt(u)) {} + constexpr TLFLOAT_INLINE explicit operator __uint128_t() const { return (__uint128_t)BigUInt(*this); } +#endif + + constexpr TLFLOAT_INLINE explicit BigInt(const BigUInt& up) : u(up) {} + + template* = nullptr> + constexpr TLFLOAT_INLINE BigInt(const BigInt& l) : BigInt(BigInt(l)) {} + template* = nullptr> + constexpr TLFLOAT_INLINE BigInt(const BigInt& l) : + u(BigUInt(l.u.msb() ? ~BigUInt(0) : BigUInt(0), l.u)) {} + + constexpr TLFLOAT_INLINE BigInt(const BigInt& m) = default; + + template* = nullptr> + constexpr TLFLOAT_INLINE BigInt(const BigInt& h) : u(BigUInt(h.u.low)) {} + template (N+1))>* = nullptr> + constexpr TLFLOAT_INLINE explicit BigInt(const BigInt& h) : BigInt(BigInt(h)) {} + + constexpr TLFLOAT_INLINE BigInt(const uint64_t *p) : u(p) {} + + constexpr TLFLOAT_INLINE explicit BigInt(double d) : u(d < 0 ? -BigUInt(-d) : BigUInt(d)) {} + + constexpr TLFLOAT_INLINE explicit operator double() const { return u.msb() ? -double(-u) : double(u); } + + constexpr TLFLOAT_INLINE operator BigUInt() const { return u; } + + constexpr TLFLOAT_INLINE BigInt abs() const { return BigInt(u.msb() ? -u : u); } + + constexpr TLFLOAT_INLINE BigInt& operator=(const BigInt &ip) = default; + + constexpr TLFLOAT_INLINE BigInt& operator++() { u = u.inc().first; return *this; } + constexpr TLFLOAT_INLINE BigInt operator++(int) { BigInt t = *this; u = u.inc().first; return t; } + constexpr TLFLOAT_INLINE BigInt& operator--() { u = u.dec().first; return *this; } + constexpr TLFLOAT_INLINE BigInt operator--(int) { BigInt t = *this; u = u.dec().first; return t; } + + constexpr TLFLOAT_INLINE BigInt operator+(const BigInt& rhs) const { return BigInt(u + rhs.u); } + constexpr TLFLOAT_INLINE BigInt operator-(const BigInt& rhs) const { return BigInt(u - rhs.u); } + constexpr TLFLOAT_INLINE BigInt operator-() const { return BigInt(-u); } + constexpr TLFLOAT_INLINE BigInt operator+() const { return BigInt(u); } + constexpr TLFLOAT_INLINE BigInt operator*(const BigInt& rhs) const { return BigInt(u * rhs.u); } + + constexpr TLFLOAT_INLINE BigInt operator/(const BigInt& rhs) const { + BigUInt m = abs().u / rhs.abs().u; + return BigInt((u.msb() ^ rhs.u.msb()) ? -m : m); + } + + constexpr TLFLOAT_INLINE BigInt operator%(const BigInt& rhs) const { + BigUInt m = abs().u % rhs.abs().u; + return BigInt(u.msb() ? -m : m); + } + + constexpr TLFLOAT_INLINE bool isNegative() const { return u.msb(); } + constexpr TLFLOAT_INLINE bool isZero() const { return u.isZero(); } + + constexpr TLFLOAT_INLINE BigInt divmod(const BigInt& rhs, const BigUInt& recip, BigInt* mod) const { + BigUInt r, q = abs().u.divmod(rhs.abs().u, recip, &r); + if (u.msb() ^ rhs.u.msb()) { q = -q; r = -r; } + *mod = BigInt(r); + return BigInt(q); + } + + constexpr TLFLOAT_INLINE BigInt pow(BigUInt e, const BigUInt& m = 0, BigUInt recm = 0) const { + BigInt p = (BigInt)abs().u.pow(e, m, recm); + if (isNegative() && (e.getWord(0) & 1) == 1) p = -p; + return p; + } + + constexpr TLFLOAT_INLINE BigUInt reciprocal() const { return u.reciprocal(); } + + constexpr TLFLOAT_INLINE int64_t getWord(unsigned idx) const { return u.getWord(idx); } + + constexpr TLFLOAT_INLINE bool operator==(BigInt const& rhs) const { return u.eq(rhs.u); } + constexpr TLFLOAT_INLINE bool operator!=(BigInt const& rhs) const { return !u.eq(rhs.u); } + + constexpr TLFLOAT_INLINE int compare(BigInt const& rhs) const { + if (u.msb()) { + if (!rhs.u.msb()) return -1; + return u.compare(rhs.u); + } else { + if (rhs.u.msb()) return +1; + return u.compare(rhs.u); + } + } + constexpr TLFLOAT_INLINE bool operator> (BigInt const& rhs) const { return compare(rhs) > 0; } + constexpr TLFLOAT_INLINE bool operator< (BigInt const& rhs) const { return rhs > *this; } + constexpr TLFLOAT_INLINE bool operator<=(BigInt const& rhs) const { return !(*this > rhs); } + constexpr TLFLOAT_INLINE bool operator>=(BigInt const& rhs) const { return !(*this < rhs); } + + constexpr TLFLOAT_INLINE BigInt operator&(const BigInt& rhs) const { return BigInt(u & rhs.u); } + constexpr TLFLOAT_INLINE BigInt operator|(const BigInt& rhs) const { return BigInt(u | rhs.u); } + constexpr TLFLOAT_INLINE BigInt operator^(const BigInt& rhs) const { return BigInt(u ^ rhs.u); } + constexpr TLFLOAT_INLINE BigInt operator~() const { return BigInt(~u); } + + constexpr TLFLOAT_INLINE BigInt operator>>(int n) const { + if (!u.msb()) return BigInt(u >> n); + return BigInt((u >> n) | ((~BigUInt(0)) << ((1 << N) - n))); + } + constexpr TLFLOAT_INLINE BigInt operator<<(int n) const { return BigInt(u << n); } + + constexpr TLFLOAT_INLINE BigInt& operator>>=(int n) { *this = *this >> n; return *this; } + constexpr TLFLOAT_INLINE BigInt& operator<<=(int n) { *this = *this << n; return *this; } + + // + + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigInt operator+(const rhstype &rhs) const { return operator+(BigInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigInt operator-(const rhstype &rhs) const { return operator-(BigInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigInt operator*(const rhstype &rhs) const { return operator*(BigInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigInt operator/(const rhstype &rhs) const { return operator/(BigInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigInt operator%(const rhstype &rhs) const { return operator%(BigInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigInt operator&(const rhstype &rhs) const { return operator&(BigInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigInt operator|(const rhstype &rhs) const { return operator|(BigInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE BigInt operator^(const rhstype &rhs) const { return operator^(BigInt(rhs)); } + + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigInt operator+(const lhstype c, const BigInt& rhs) { return BigInt(c) + rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigInt operator-(const lhstype c, const BigInt& rhs) { return BigInt(c) - rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigInt operator*(const lhstype c, const BigInt& rhs) { return BigInt(c) * rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigInt operator/(const lhstype c, const BigInt& rhs) { return BigInt(c) / rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigInt operator%(const lhstype c, const BigInt& rhs) { return BigInt(c) % rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigInt operator&(const lhstype c, const BigInt& rhs) { return BigInt(c) & rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigInt operator|(const lhstype c, const BigInt& rhs) { return BigInt(c) | rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend BigInt operator^(const lhstype c, const BigInt& rhs) { return BigInt(c) ^ rhs; } + + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE bool operator==(const rhstype& rhs) const { return operator==(BigInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE bool operator!=(const rhstype& rhs) const { return operator!=(BigInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE bool operator> (const rhstype& rhs) const { return operator> (BigInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE bool operator< (const rhstype& rhs) const { return operator< (BigInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE bool operator>=(const rhstype& rhs) const { return operator>=(BigInt(rhs)); } + template || (sizeof(rhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE bool operator<=(const rhstype& rhs) const { return operator<=(BigInt(rhs)); } + + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend bool operator==(const lhstype& lhs, const BigInt& rhs) { return BigInt(lhs) == rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend bool operator!=(const lhstype& lhs, const BigInt& rhs) { return BigInt(lhs) != rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend bool operator> (const lhstype& lhs, const BigInt& rhs) { return BigInt(lhs) > rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend bool operator< (const lhstype& lhs, const BigInt& rhs) { return BigInt(lhs) < rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend bool operator>=(const lhstype& lhs, const BigInt& rhs) { return BigInt(lhs) >= rhs; } + template || (sizeof(lhstype) < (8 << (N - 6)) && !std::is_floating_point_v)), int> = 0> + constexpr TLFLOAT_INLINE friend bool operator<=(const lhstype& lhs, const BigInt& rhs) { return BigInt(lhs) <= rhs; } + + // + + template + constexpr TLFLOAT_INLINE BigInt& operator=(const srctype& s) { + BigInt n(s); + *this = n; + return *this; + } + + template + constexpr TLFLOAT_INLINE BigInt& operator+=(const rhstype& rhs) { *this = *this + BigInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigInt& operator-=(const rhstype& rhs) { *this = *this - BigInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigInt& operator*=(const rhstype& rhs) { *this = *this * BigInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigInt& operator/=(const rhstype& rhs) { *this = *this / BigInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigInt& operator%=(const rhstype& rhs) { *this = *this % BigInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigInt& operator&=(const rhstype& rhs) { *this = *this & BigInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigInt& operator|=(const rhstype& rhs) { *this = *this | BigInt(rhs); return *this; } + template + constexpr TLFLOAT_INLINE BigInt& operator^=(const rhstype& rhs) { *this = *this ^ BigInt(rhs); return *this; } + + // + + constexpr TLFLOAT_INLINE BigInt(const char *p, const char **endptr = nullptr, const int base = 10) { + u = BigUInt(p, endptr, base); + } + + TLFLOAT_NOINLINE static int snprint(char *cbuf, size_t bufsize, BigInt value, char typespec = 'd', + int width = 0, int precision = -1, int base = 10, int nbits = 1 << N, + bool flag_sign = false, bool flag_blank = false, bool flag_alt = false, + bool flag_left = false, bool flag_zero = false, bool flag_upper = false, + bool flag_unsigned = false, bool flag_ptr = false, const char *prefix = "") { + detail::SafeArray buf(cbuf, bufsize); + + if (width > (int)bufsize) width = bufsize; + + if (typespec == 'u' || typespec == 'o' || typespec == 'x' || typespec == 'X') flag_unsigned = true; + + if (nbits < (1 << N)) { + bool signbit = value < 0; + value &= (BigUInt(1) << nbits) - 1; + if (!flag_unsigned && signbit) value |= ~BigUInt(0) & ~((BigUInt(1) << nbits) - 1); + } + + int sign = 0; + if (!flag_unsigned) { + if (value < 0) { + value = -value; + sign = '-'; + } else if (flag_sign) { + sign = '+'; + } else if (flag_blank) { + sign = ' '; + } + } + + int64_t idx = bufsize-1; + const char *digits = flag_upper ? "0123456789ABCDEF" : "0123456789abcdef"; + int length = 0; + + if (flag_ptr && value == 0) { + buf.memmove(idx-5, "(nil)", 5); + idx -= 5; + } else { + if (flag_unsigned) { + BigUInt u = value; + do { + buf[--idx] = digits[int(u % base)]; + u /= base; + } while(u > 0); + } else { + BigInt v = value; + do { + buf[--idx] = digits[int(v % base)]; + v /= base; + } while(v > 0); + } + if (precision == 0 && value == 0) idx++; + length = bufsize-1 - idx; + + for(int i = precision-length;i > 0;i--) buf[--idx] = '0'; + + if (sign) buf[--idx] = sign; + + if (flag_alt) { + if (!(base == 8 && buf[idx] == '0') && !(base != 8 && value == 0)) { + int prefixlen = strlen(prefix); + buf.memmove(idx - prefixlen, prefix, prefixlen); + idx -= prefixlen; + } + } + } + + length = bufsize-1 - idx; + + if (!flag_left) { + for(int i=0;i) == (1 << ( 6-3))); + static_assert(sizeof(BigUInt< 7>) == (1 << ( 7-3))); + static_assert(sizeof(BigUInt< 8>) == (1 << ( 8-3))); + static_assert(sizeof(BigUInt< 9>) == (1 << ( 9-3))); + static_assert(sizeof(BigUInt<10>) == (1 << (10-3))); + + static_assert(sizeof(BigInt< 7>) == (1 << ( 7-3))); + static_assert(sizeof(BigInt< 8>) == (1 << ( 8-3))); + static_assert(sizeof(BigInt< 9>) == (1 << ( 9-3))); + static_assert(sizeof(BigInt<10>) == (1 << (10-3))); + + static_assert(std::is_trivially_copyable_v>); + static_assert(std::is_trivially_copyable_v>); + static_assert(std::is_trivially_copyable_v>); + static_assert(std::is_trivially_copyable_v>); + static_assert(std::is_trivially_copyable_v>); + + static_assert(std::is_trivially_copyable_v>); + static_assert(std::is_trivially_copyable_v>); + static_assert(std::is_trivially_copyable_v>); + static_assert(std::is_trivially_copyable_v>); +} + +#if defined(TLFLOAT_DOXYGEN) || !defined(TLFLOAT_NO_LIBSTDCXX) + +#include +#include +#include +#include + +namespace tlfloat { + +#ifndef TLFLOAT_DOXYGEN + inline std::string toHexString(const uint64_t u) { + char buf[17]; + snprintf(buf, 17, "%016llx", (unsigned long long)u); + return std::string(buf); + } + inline std::string toHexString(uint32_t x) { return toHexString(uint64_t(x)); } + inline std::string toHexString(uint16_t x) { return toHexString(uint64_t(x)); } + inline std::string toHexString(const BigUInt<6> &u) { return toHexString(u.u64); } + + template static std::string toHexString(const BigUInt& u) { return toHexString(u.high) + toHexString(u.low); } + template static std::string toHexString(const BigInt& u) { return toHexString(u.u); } +#endif + + inline std::ostream& operator<<(std::ostream &os, const BigUInt<6>& u) { return os << u.u64; } + + template + std::string to_string(const BigUInt& u) { + std::vector s((1 << N)/3 + 4); + BigInt::snprint(s.data(), s.size() - 1, BigInt(u), 'u'); + return std::string(s.data()); + } + + template static std::ostream& operator<<(std::ostream &os, const BigUInt& u) { + std::vector buf(1000); + std::ios_base::fmtflags f = os.flags(); + char typespec = 'u'; + int base = 10; + if ((f & os.hex) != 0) { typespec = 'x'; base = 16; } + if ((f & os.oct) != 0) { typespec = 'o'; base = 8; } + BigInt::snprint(buf.data(), buf.size(), BigInt(u), typespec, os.width(), -1, base, 1 << N, + false, false, false, (f & std::ios::left) != 0, false, (f & std::ios::uppercase) != 0); + return os << buf.data(); + } + + template + std::string to_string(const BigInt& i) { + std::vector s((1 << N)/3 + 4); + BigInt::snprint(s.data(), s.size() - 1, i, 'd'); + return std::string(s.data()); + } + + template static std::ostream& operator<<(std::ostream &os, const BigInt& d) { + std::vector buf(1000); + std::ios_base::fmtflags f = os.flags(); + char typespec = 'd'; + int base = 10; + if ((f & os.hex) != 0) { typespec = 'x'; base = 16; } + if ((f & os.oct) != 0) { typespec = 'o'; base = 8; } + BigInt::snprint(buf.data(), buf.size(), d, typespec, os.width(), -1, base, 1 << N, + false, false, false, (f & std::ios::left) != 0, false, (f & std::ios::uppercase) != 0); + return os << buf.data(); + } +} +#endif // #if defined(TLFLOAT_DOXYGEN) || !defined(TLFLOAT_NO_LIBSTDCXX) +#endif // #ifndef __BIGINT_HPP_INCLUDED__ + +#if defined(__cplusplus) && defined(__TLFLOAT_H_INCLUDED__) +#warning Include tlfloat/bigint.hpp first, then tlfloat/tlfloat.h. +#endif diff --git a/validation/extern/tlfloat/src/include/tlfloat/rpitab.hpp b/validation/extern/tlfloat/src/include/tlfloat/rpitab.hpp new file mode 100644 index 0000000..bf90dad --- /dev/null +++ b/validation/extern/tlfloat/src/include/tlfloat/rpitab.hpp @@ -0,0 +1,4114 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include + +namespace tlfloat { + namespace detail { +#ifndef __CUDA_ARCH__ + static constexpr uint8_t tlfloat_rpitab[] = { +#else + static __device__ constexpr uint8_t tlfloat_rpitab[] = { +#endif + 0x51, 0x7c, 0xc1, 0xb7, 0x27, 0x22, 0x0a, 0x94, 0xfe, 0x13, 0xab, 0xe8, 0xfa, 0x9a, 0x6e, 0xe0, + 0x6d, 0xb1, 0x4a, 0xcc, 0x9e, 0x21, 0xc8, 0x20, 0xff, 0x28, 0xb1, 0xd5, 0xef, 0x5d, 0xe2, 0xb0, + 0xdb, 0x92, 0x37, 0x1d, 0x21, 0x26, 0xe9, 0x70, 0x03, 0x24, 0x97, 0x75, 0x04, 0xe8, 0xc9, 0x0e, + 0x7f, 0x0e, 0xf5, 0x8e, 0x58, 0x94, 0xd3, 0x9f, 0x74, 0x41, 0x1a, 0xfa, 0x97, 0x5d, 0xa2, 0x42, + 0x74, 0xce, 0x38, 0x13, 0x5a, 0x2f, 0xbf, 0x20, 0x9c, 0xc8, 0xeb, 0x1c, 0xc1, 0xa9, 0x9c, 0xfa, + 0x4e, 0x42, 0x2f, 0xc5, 0xde, 0xfc, 0x94, 0x1d, 0x8f, 0xfc, 0x4b, 0xff, 0xef, 0x02, 0xcc, 0x07, + 0xf7, 0x97, 0x88, 0xc5, 0xad, 0x05, 0x36, 0x8f, 0xb6, 0x9b, 0x3f, 0x67, 0x93, 0xe5, 0x84, 0xdb, + 0xa7, 0xa3, 0x1f, 0xb3, 0x4f, 0x2f, 0xf5, 0x16, 0xba, 0x93, 0xdd, 0x63, 0xf5, 0xf2, 0xf8, 0xbd, + 0x9e, 0x83, 0x9c, 0xfb, 0xc5, 0x29, 0x49, 0x75, 0x35, 0xfd, 0xaf, 0xd8, 0x8f, 0xc6, 0xae, 0x84, + 0x2b, 0x01, 0x98, 0x23, 0x7e, 0x3d, 0xb5, 0xd5, 0xf8, 0x67, 0xde, 0x10, 0x4d, 0x7a, 0x1b, 0x0e, + 0xd4, 0xf1, 0xc8, 0xb0, 0xaf, 0x73, 0x0d, 0x84, 0x32, 0xcc, 0xc2, 0xaf, 0x8a, 0x50, 0x34, 0x20, + 0x46, 0xff, 0xec, 0x40, 0x26, 0xb9, 0x93, 0x98, 0x83, 0x03, 0x0a, 0xab, 0x65, 0x39, 0xd4, 0x64, + 0xb0, 0x71, 0x3d, 0xe0, 0x46, 0x35, 0xa3, 0xe2, 0x0c, 0xe1, 0xb3, 0xe6, 0xee, 0x74, 0x04, 0x95, + 0x41, 0xac, 0xe2, 0x3b, 0x45, 0xcb, 0x0e, 0x53, 0x6e, 0xd7, 0xa2, 0x68, 0xab, 0x8c, 0x82, 0x9f, + 0x52, 0xff, 0x83, 0x82, 0x9f, 0xbf, 0x19, 0xf4, 0x19, 0x61, 0x6f, 0x27, 0xcc, 0x19, 0x3e, 0xdd, + 0xe1, 0x9e, 0x93, 0x77, 0xb5, 0x8f, 0x2f, 0x7c, 0x4f, 0x9d, 0x0f, 0x9a, 0xe5, 0x79, 0x3f, 0x8e, + 0xc3, 0xf8, 0x90, 0xc8, 0x3e, 0x3e, 0x12, 0x35, 0x7d, 0x37, 0x6a, 0xbb, 0x96, 0x98, 0x21, 0x9d, + 0x8a, 0xe3, 0x0a, 0x5a, 0xce, 0x8c, 0xe1, 0xe1, 0x62, 0x56, 0xa0, 0xa6, 0x96, 0x2e, 0x80, 0x06, + 0x23, 0x3e, 0xc3, 0x16, 0xb8, 0xf1, 0xcd, 0x63, 0x4d, 0x80, 0x31, 0x19, 0xbe, 0x69, 0x5a, 0x4b, + 0xd3, 0xda, 0x6a, 0xaa, 0x9b, 0xfb, 0x1f, 0x6b, 0x8c, 0x08, 0x51, 0xfe, 0x3b, 0x26, 0x95, 0x4e, + 0xb2, 0x55, 0xeb, 0xb8, 0x7c, 0x3e, 0x31, 0xab, 0xd8, 0x3d, 0x73, 0x8a, 0x8b, 0xab, 0x24, 0xe0, + 0x6c, 0xeb, 0x1d, 0x9c, 0x42, 0x53, 0xe5, 0x91, 0x92, 0x3b, 0xc5, 0x6b, 0x11, 0xaa, 0x2d, 0x5c, + 0x8f, 0x80, 0x0d, 0x85, 0x78, 0xef, 0xe7, 0x0c, 0xff, 0x98, 0xcf, 0xb5, 0x0f, 0x33, 0x30, 0xab, + 0xcc, 0xa3, 0xfd, 0xd6, 0x6c, 0x3f, 0xbf, 0x5b, 0xb2, 0x91, 0x44, 0xf4, 0x19, 0x30, 0x5f, 0xf3, + 0x66, 0xe2, 0x77, 0x84, 0x9b, 0x36, 0x6a, 0x1f, 0xae, 0xeb, 0xef, 0x0b, 0x6f, 0x1d, 0xac, 0x49, + 0x4d, 0xef, 0x14, 0x11, 0x69, 0x74, 0x43, 0x14, 0x26, 0xac, 0x71, 0x19, 0x65, 0x63, 0x0b, 0x71, + 0x84, 0x65, 0xbe, 0xf0, 0x28, 0x60, 0x0b, 0xd3, 0x8e, 0xf9, 0xad, 0xf0, 0x0c, 0x1a, 0x09, 0x97, + 0x31, 0x09, 0x41, 0x80, 0xa4, 0x41, 0xad, 0xc7, 0x7a, 0xbf, 0xd8, 0x56, 0xf9, 0x74, 0x8f, 0x21, + 0xa5, 0x24, 0x69, 0xb3, 0x88, 0x6c, 0x6e, 0xd5, 0x21, 0x2f, 0xd7, 0x67, 0x30, 0xb5, 0x52, 0x14, + 0x05, 0x5a, 0x4c, 0xe9, 0xf9, 0x53, 0x03, 0x3f, 0xbb, 0xae, 0x41, 0xe1, 0x51, 0xc4, 0x1e, 0x30, + 0xbc, 0x39, 0xc5, 0x2d, 0x46, 0x57, 0xde, 0xeb, 0xb7, 0xb1, 0xd3, 0x16, 0xe5, 0xdf, 0xfa, 0x77, + 0xc0, 0xc6, 0xb3, 0xe0, 0x93, 0x22, 0xe5, 0x2a, 0x9b, 0x6c, 0xe5, 0x69, 0x54, 0x14, 0x46, 0xb0, + 0xe1, 0x3b, 0xe4, 0x89, 0x0a, 0x13, 0x02, 0x4d, 0xa3, 0x09, 0x62, 0x2c, 0xe2, 0x22, 0x62, 0xe4, + 0x48, 0xd9, 0x26, 0xf9, 0x8b, 0x80, 0x56, 0xa1, 0xea, 0x72, 0xa4, 0x94, 0x88, 0x6a, 0xfe, 0xfe, + 0x5f, 0x00, 0x66, 0x4a, 0x0f, 0x77, 0x67, 0x38, 0x7a, 0x9f, 0x09, 0xc0, 0x78, 0xf6, 0x61, 0xf3, + 0xd9, 0x94, 0x7c, 0x63, 0xca, 0x02, 0xc9, 0x9f, 0x38, 0xe0, 0xd9, 0x84, 0x97, 0x79, 0xa2, 0x85, + 0xce, 0x09, 0x44, 0x3d, 0x90, 0x55, 0xcf, 0xda, 0x97, 0x61, 0x49, 0x23, 0x97, 0x99, 0x3d, 0xb6, + 0xaa, 0x86, 0x48, 0x53, 0xb9, 0x0f, 0xf3, 0xb5, 0xcb, 0x65, 0x98, 0xa5, 0x0b, 0x3c, 0xf1, 0x3c, + 0xa0, 0xc4, 0xef, 0xfa, 0x4b, 0xca, 0x74, 0x42, 0x73, 0x71, 0x4b, 0x98, 0xcc, 0xb5, 0xf6, 0xc4, + 0x1b, 0x2f, 0xaf, 0x87, 0x7e, 0xdd, 0xda, 0x4d, 0x24, 0x36, 0x52, 0x33, 0xa1, 0x39, 0x38, 0x99, + 0x2e, 0xc6, 0xdc, 0x0a, 0xcf, 0x84, 0xf2, 0xde, 0x12, 0x98, 0xc6, 0x9c, 0xba, 0x7b, 0x8e, 0x02, + 0x98, 0x00, 0x86, 0x06, 0xb4, 0x04, 0x25, 0xac, 0x77, 0x16, 0x48, 0x55, 0x23, 0x81, 0x73, 0xba, + 0x12, 0x6b, 0x5e, 0xd3, 0x3e, 0xfb, 0xb9, 0x24, 0x37, 0x77, 0x8b, 0x4f, 0xd3, 0x4a, 0x47, 0x7b, + 0x48, 0xda, 0x28, 0xa9, 0xe8, 0xf9, 0x05, 0x67, 0x99, 0xcc, 0x10, 0x3f, 0x25, 0xfa, 0xb4, 0x31, + 0xd9, 0x2f, 0x9f, 0x6e, 0x81, 0xae, 0xa0, 0x3f, 0xc4, 0xc2, 0x94, 0xa9, 0x2a, 0xe0, 0x32, 0x1b, + 0x88, 0x6c, 0x36, 0x99, 0x24, 0x19, 0x3a, 0xa6, 0x2d, 0xea, 0x38, 0xa7, 0x37, 0x2a, 0x22, 0xe0, + 0x84, 0x85, 0xb4, 0xfa, 0x95, 0x6a, 0xb3, 0x0a, 0x4e, 0x83, 0x93, 0xa8, 0x02, 0x2e, 0xed, 0x9d, + 0xda, 0x62, 0xbb, 0x75, 0x0b, 0xfc, 0xc3, 0xbe, 0xb5, 0xa4, 0xdd, 0x13, 0x8e, 0x94, 0xb4, 0xcb, + 0x56, 0x66, 0x63, 0x2a, 0x0a, 0x56, 0xb5, 0x71, 0x48, 0x44, 0xec, 0xc4, 0x28, 0x39, 0x16, 0x5f, + 0x52, 0x02, 0x4a, 0x03, 0xbb, 0xb8, 0x18, 0x79, 0x93, 0xfe, 0x00, 0x54, 0x38, 0xf5, 0x24, 0xe1, + 0x33, 0x1e, 0xf0, 0x32, 0x41, 0xee, 0xcb, 0xcb, 0x9f, 0xd1, 0xfe, 0xca, 0x21, 0xc6, 0x43, 0x06, + 0xef, 0x20, 0x98, 0xce, 0x9c, 0xc9, 0x46, 0x38, 0x6e, 0xf3, 0xdb, 0x8b, 0x9d, 0xef, 0x84, 0x15, + 0x9b, 0x8a, 0xd0, 0x40, 0x2e, 0x49, 0xc0, 0x2d, 0x49, 0x08, 0x88, 0x6c, 0x74, 0x07, 0xd7, 0xc0, + 0x36, 0x25, 0xff, 0xed, 0x87, 0xc8, 0x1c, 0x3b, 0x0c, 0x2c, 0x8a, 0xd2, 0xb1, 0x5d, 0xe5, 0xb0, + 0xdc, 0xc4, 0xe3, 0xde, 0xa0, 0x08, 0x02, 0x79, 0x69, 0x13, 0xba, 0xa4, 0xfb, 0x5b, 0x75, 0xdd, + 0x91, 0x6d, 0xd5, 0x0a, 0x05, 0x17, 0x93, 0x44, 0xbb, 0x41, 0xb2, 0x19, 0x9d, 0x84, 0x8d, 0x4a, + 0x07, 0x55, 0x1d, 0x28, 0xe1, 0x51, 0x8e, 0xd7, 0x76, 0xd7, 0x89, 0x13, 0x2e, 0x26, 0xe1, 0x36, + 0xce, 0x3d, 0x16, 0xcb, 0xab, 0x60, 0x41, 0x9f, 0x81, 0xfb, 0x78, 0x04, 0xc6, 0x20, 0x15, 0xcc, + 0x98, 0xb6, 0x83, 0xda, 0x1c, 0x8a, 0x90, 0x06, 0x2d, 0xe1, 0xec, 0x62, 0x49, 0x7a, 0xa5, 0xd6, + 0xe3, 0x52, 0xe5, 0x27, 0x66, 0x9b, 0xd3, 0x9b, 0x54, 0xf3, 0x4a, 0x49, 0x55, 0xb4, 0x21, 0x6e, + 0xef, 0x31, 0x8c, 0xf7, 0xc6, 0x3b, 0x29, 0x45, 0xb4, 0x1b, 0xed, 0xfe, 0x55, 0xd0, 0xd7, 0x18, + 0x8a, 0xef, 0xd0, 0xd7, 0x00, 0x6d, 0x7d, 0x86, 0x33, 0x26, 0xb2, 0x5b, 0x82, 0xf6, 0x98, 0x32, + 0x94, 0xdf, 0xab, 0x2b, 0x9d, 0x7f, 0xa3, 0xdc, 0xfc, 0xb5, 0x79, 0xdf, 0x3a, 0xef, 0xc9, 0x94, + 0x18, 0x40, 0x55, 0xfb, 0x46, 0x33, 0x0a, 0xe5, 0x82, 0x03, 0x11, 0x7d, 0x0e, 0xf2, 0x6c, 0xd2, + 0x59, 0x9e, 0xc7, 0x8d, 0xab, 0x84, 0xe6, 0x9b, 0x74, 0xa1, 0x27, 0x52, 0x5f, 0x09, 0xda, 0x91, + 0x99, 0x8d, 0x55, 0x78, 0x54, 0x32, 0xa7, 0xd2, 0xe0, 0xe9, 0x07, 0x9f, 0x85, 0xe6, 0xbc, 0x2d, + 0xbb, 0x7c, 0x91, 0x82, 0x45, 0xbd, 0xb9, 0x0b, 0xc4, 0xa9, 0xd3, 0x63, 0x71, 0x37, 0x37, 0x80, + 0x75, 0xf7, 0xac, 0x25, 0x4d, 0xdb, 0xed, 0x62, 0x5d, 0x33, 0x55, 0x67, 0xe7, 0xbb, 0x0e, 0x81, + 0x68, 0x96, 0xf8, 0xd8, 0xe0, 0xcc, 0xc6, 0x3b, 0xd6, 0xe1, 0xed, 0x24, 0x43, 0x50, 0x2e, 0xfb, + 0xfa, 0x40, 0x63, 0x17, 0xf8, 0x56, 0x4d, 0x76, 0x6e, 0xde, 0x2e, 0x1f, 0xb6, 0xef, 0x68, 0x0f, + 0xe3, 0xc8, 0x5b, 0x6d, 0x95, 0x1d, 0x12, 0xd1, 0xcd, 0x57, 0x80, 0x49, 0xa9, 0xd6, 0x82, 0x2b, + 0xdb, 0x5a, 0x16, 0x94, 0xbf, 0x40, 0x25, 0xd3, 0x83, 0xed, 0x07, 0x55, 0x3b, 0x50, 0xac, 0xbd, + 0x95, 0x09, 0x0b, 0x16, 0xdb, 0xee, 0x7e, 0xf2, 0xfd, 0x7f, 0x6d, 0xc4, 0xfe, 0xdf, 0x44, 0xb6, + 0x3b, 0x72, 0x7e, 0x54, 0x83, 0x38, 0x40, 0x1f, 0x0a, 0xb7, 0x42, 0xff, 0xc3, 0xfe, 0x83, 0x9f, + 0x14, 0x19, 0xb3, 0xb0, 0xc3, 0x0c, 0x15, 0x75, 0x5e, 0xa6, 0xd7, 0xf3, 0xd9, 0xb7, 0x36, 0xc7, + 0x9c, 0xb3, 0xca, 0xad, 0xdf, 0x98, 0xa4, 0x6b, 0xc2, 0x0b, 0x6f, 0x98, 0x21, 0x96, 0xe3, 0x9a, + 0xb0, 0x92, 0xe7, 0x38, 0x64, 0xdc, 0x65, 0x98, 0x7e, 0xb6, 0x5f, 0xd1, 0x00, 0x52, 0x72, 0x36, + 0x02, 0xd0, 0x6e, 0xad, 0x23, 0xb7, 0x90, 0xe9, 0x09, 0x31, 0x42, 0x2e, 0x5c, 0xa4, 0xb0, 0xb8, + 0x70, 0x2b, 0x35, 0x80, 0xa9, 0x4c, 0x9b, 0xaa, 0xa8, 0x5b, 0xea, 0x8f, 0x62, 0x78, 0x99, 0xaf, + 0xb7, 0x09, 0xf2, 0x18, 0x2e, 0xd4, 0x97, 0x42, 0xe1, 0xd9, 0x0e, 0x9b, 0x19, 0x50, 0xd2, 0x5b, + 0x84, 0x6a, 0x58, 0xf5, 0x10, 0xfb, 0x8b, 0x72, 0x34, 0xc7, 0xbb, 0xff, 0x93, 0xc0, 0x01, 0x86, + 0x16, 0xa0, 0x46, 0xd0, 0x66, 0xa7, 0xcc, 0xd2, 0x90, 0x69, 0xd1, 0x59, 0x85, 0x2e, 0x97, 0xa1, + 0x7c, 0xda, 0x65, 0xed, 0x08, 0xe8, 0x5f, 0x3e, 0xe0, 0xed, 0xcd, 0xde, 0x8b, 0xd5, 0xc0, 0xd1, + 0x65, 0x2e, 0x35, 0x04, 0x0b, 0xaa, 0x97, 0x2a, 0x80, 0x13, 0xf8, 0x0a, 0x3f, 0xc3, 0x03, 0xf0, + 0xb2, 0x05, 0x8a, 0x46, 0xa0, 0xcb, 0x6f, 0x5f, 0x43, 0x95, 0x7e, 0xed, 0x5b, 0x12, 0xb5, 0x9a, + 0x44, 0xbd, 0xff, 0x79, 0x82, 0xcf, 0x5f, 0xdc, 0xa7, 0xb5, 0x34, 0x54, 0x15, 0x25, 0x2d, 0x62, + 0x27, 0xde, 0x7c, 0x16, 0xcc, 0x2d, 0x6b, 0xca, 0xe3, 0xfa, 0x46, 0xa6, 0x86, 0xd3, 0x1d, 0x10, + 0x2f, 0xab, 0xd2, 0x58, 0x9f, 0x8a, 0x4a, 0x9c, 0x40, 0x00, 0x90, 0x66, 0x43, 0x6e, 0xb8, 0xdb, + 0x6f, 0x64, 0xfa, 0xb0, 0x5f, 0x88, 0xb2, 0xa6, 0xb5, 0x83, 0x80, 0xd6, 0x58, 0x46, 0x68, 0x60, + 0x59, 0x24, 0x2a, 0xa8, 0x87, 0x7d, 0x8f, 0x61, 0xb9, 0x4a, 0x9d, 0x83, 0x51, 0x9a, 0xa0, 0x60, + 0x3d, 0xee, 0x03, 0x66, 0x22, 0xf0, 0x7d, 0x14, 0xa7, 0x64, 0x65, 0x6b, 0x20, 0xf9, 0xf4, 0x6f, + 0x32, 0x3e, 0x6c, 0x32, 0x4d, 0x98, 0xdf, 0x6c, 0xe1, 0xcb, 0xd2, 0x6a, 0x2c, 0x3b, 0xe2, 0xf1, + 0xb4, 0x89, 0xed, 0x78, 0x1e, 0x1d, 0x5d, 0x23, 0x0c, 0x23, 0x2f, 0xba, 0xaa, 0xfa, 0xde, 0xe9, + 0x63, 0x49, 0x37, 0x2e, 0x97, 0x56, 0x76, 0xa2, 0x07, 0x21, 0x1f, 0x0e, 0x43, 0xe2, 0x30, 0xf4, + 0xfe, 0x94, 0xf9, 0xeb, 0x73, 0xe5, 0x3e, 0x11, 0x1a, 0xc8, 0xb7, 0xe2, 0xf0, 0x04, 0x46, 0xeb, + 0xff, 0xf1, 0x35, 0x37, 0x63, 0x7e, 0xd8, 0x60, 0x84, 0x49, 0xba, 0x2e, 0xbe, 0x59, 0x56, 0xb5, + 0xce, 0xb7, 0x66, 0xbd, 0xb9, 0x1f, 0x35, 0x08, 0xe3, 0x54, 0xe7, 0xfb, 0xef, 0xb9, 0x94, 0xdd, + 0x64, 0xda, 0xa8, 0x80, 0x5b, 0x86, 0xd9, 0x71, 0x12, 0x5d, 0x3a, 0x30, 0x3e, 0xf2, 0xc5, 0x6c, + 0x3a, 0x16, 0x0a, 0x86, 0x86, 0x0c, 0x40, 0xca, 0x33, 0x3f, 0x0b, 0x14, 0x80, 0xbb, 0x3d, 0x4f, + 0xdf, 0x7e, 0xfe, 0xf7, 0xa2, 0xab, 0x1b, 0x3f, 0x6c, 0x89, 0xec, 0xf6, 0x5c, 0xdd, 0x45, 0xfe, + 0x4b, 0xe2, 0x13, 0xd4, 0x18, 0xe1, 0xb7, 0x78, 0x9b, 0x62, 0xca, 0x2b, 0x54, 0x6c, 0x5a, 0xd4, + 0x5a, 0x07, 0x66, 0x67, 0x96, 0xc4, 0x89, 0x1a, 0x2b, 0xb7, 0xc4, 0xab, 0x16, 0x71, 0xe7, 0x4c, + 0xdc, 0x90, 0x6b, 0x55, 0x2f, 0x35, 0xce, 0x15, 0x1f, 0x66, 0x2f, 0x88, 0xa5, 0x05, 0xfe, 0xfd, + 0xfa, 0x70, 0xb6, 0x9d, 0xc7, 0x16, 0x43, 0x71, 0x42, 0x6a, 0x74, 0xd4, 0xda, 0x7e, 0x68, 0xf7, + 0x77, 0xe4, 0x9a, 0x97, 0x30, 0x9c, 0x97, 0xa2, 0x10, 0x9c, 0x64, 0x6c, 0x8d, 0x85, 0x7e, 0x40, + 0xb5, 0x25, 0x7d, 0xec, 0x0e, 0x17, 0xc2, 0x5a, 0x29, 0xc6, 0x4c, 0xa7, 0x66, 0x11, 0x2a, 0x6e, + 0x2a, 0x95, 0x6b, 0x63, 0x60, 0x4b, 0x0c, 0x85, 0xdc, 0x38, 0x0d, 0x32, 0x4a, 0xb4, 0xb0, 0x2d, + 0x13, 0x77, 0x29, 0x1f, 0x87, 0x88, 0xbf, 0x88, 0xda, 0xfa, 0x7a, 0xe5, 0xfe, 0x16, 0xde, 0x1a, + 0x77, 0x5e, 0x1a, 0x66, 0x2e, 0xf4, 0x30, 0x2f, 0x6e, 0xcd, 0xc7, 0x33, 0xf7, 0x99, 0xc9, 0x5c, + 0x0b, 0xe4, 0xcd, 0xac, 0x30, 0xde, 0x2b, 0xf0, 0xe3, 0x41, 0xa8, 0x88, 0x1f, 0x6c, 0x24, 0x38, + 0xee, 0xee, 0x8e, 0x16, 0xd0, 0x8c, 0x57, 0xa3, 0x16, 0x10, 0xeb, 0xf9, 0xac, 0xcc, 0x3d, 0x6c, + 0xe0, 0x2a, 0x4f, 0x7d, 0x43, 0x27, 0xfe, 0x03, 0x2b, 0x57, 0x3c, 0xf2, 0x9b, 0x11, 0x44, 0x91, + 0x56, 0x9c, 0x6e, 0x49, 0xb3, 0xd5, 0x74, 0x2a, 0x9c, 0x13, 0x41, 0x4d, 0xf3, 0xe5, 0x52, 0x06, + 0xa8, 0xd8, 0x99, 0xcc, 0x87, 0x6b, 0xd4, 0xa4, 0x02, 0xb4, 0xf8, 0x59, 0x32, 0xd3, 0xc4, 0x3f, + 0xcb, 0xa6, 0x44, 0x1b, 0x68, 0xfc, 0xd9, 0xc9, 0x10, 0xa5, 0x41, 0x3d, 0x90, 0xe7, 0xcc, 0x6e, + 0x4f, 0xa0, 0x2a, 0xa3, 0xee, 0x1d, 0x3a, 0x70, 0xa1, 0x75, 0xb3, 0xef, 0xce, 0xff, 0x2f, 0xea, + 0x2f, 0x52, 0x33, 0xbd, 0xbd, 0x56, 0x5d, 0x51, 0x7b, 0x2a, 0x91, 0xc4, 0x15, 0xaa, 0xdd, 0x20, + 0x84, 0x37, 0x2c, 0xc3, 0x15, 0x10, 0xc1, 0xa3, 0x9c, 0xf3, 0x71, 0xc4, 0xea, 0x4f, 0x72, 0xa0, + 0x7d, 0xa4, 0xf4, 0xab, 0x7f, 0xe5, 0x07, 0x8e, 0x45, 0x2c, 0xe2, 0x95, 0xfd, 0x4a, 0x62, 0xe0, + 0xe9, 0xe7, 0xe2, 0x87, 0xd7, 0x2d, 0x6d, 0xc3, 0x62, 0xa3, 0xb1, 0x21, 0xc2, 0x9d, 0xc3, 0x10, + 0xca, 0x3c, 0x96, 0x43, 0xb0, 0x88, 0x3d, 0xa6, 0x15, 0x0d, 0x16, 0x40, 0x09, 0x5f, 0xa1, 0xc8, + 0x13, 0x44, 0x44, 0x9e, 0x3c, 0x72, 0x62, 0x54, 0x3d, 0xed, 0xf2, 0xe1, 0x1d, 0x62, 0x75, 0x7a, + 0x13, 0x45, 0x33, 0xfb, 0xdf, 0xc9, 0x06, 0x95, 0xd1, 0xb2, 0xd8, 0xc9, 0x9e, 0x85, 0xbe, 0x5e, + 0xee, 0x28, 0xd2, 0x31, 0xee, 0x93, 0xee, 0xf0, 0xb4, 0x8c, 0xca, 0x4d, 0x4a, 0x94, 0xd4, 0x14, + 0x67, 0x34, 0x5a, 0x76, 0x84, 0x90, 0x4f, 0xa2, 0x65, 0x4c, 0x27, 0x31, 0xc1, 0x38, 0x11, 0xbe, + 0x3f, 0x19, 0x5c, 0x87, 0xc7, 0x7a, 0xd3, 0xf3, 0xab, 0x0a, 0x04, 0x78, 0x90, 0x95, 0x4e, 0xda, + 0xa6, 0xbf, 0x37, 0xa8, 0x8c, 0xd2, 0xd5, 0xfc, 0xda, 0xeb, 0x6f, 0xc1, 0x30, 0xee, 0xcb, 0x01, + 0x1b, 0x0b, 0x4f, 0x9d, 0x62, 0x50, 0xd1, 0x41, 0xb6, 0xf6, 0xb9, 0x3d, 0x46, 0x9c, 0xd4, 0xdc, + 0x41, 0x2e, 0x19, 0x35, 0xad, 0x93, 0xa3, 0x76, 0x9a, 0x00, 0x3b, 0x80, 0x69, 0x2a, 0xfa, 0x7e, + 0x26, 0xac, 0x80, 0xc0, 0x38, 0xf0, 0x70, 0x9f, 0xc4, 0xd9, 0x4a, 0xf9, 0xb2, 0x54, 0x78, 0xd7, + 0x53, 0xa5, 0x9c, 0x7e, 0x26, 0x75, 0x59, 0x5d, 0xa3, 0x93, 0x85, 0xd5, 0xe1, 0xd3, 0x9a, 0x5d, + 0x30, 0x29, 0x6e, 0x9a, 0x7c, 0x2b, 0x1d, 0x75, 0xbf, 0x45, 0x18, 0xdd, 0x9b, 0x2c, 0x4a, 0xdb, + 0xa3, 0xfb, 0xd4, 0xca, 0x61, 0xd5, 0x69, 0xc9, 0x12, 0x8f, 0x3f, 0x9f, 0x6c, 0x4b, 0xa7, 0x5d, + 0xd4, 0xa7, 0xec, 0x57, 0x00, 0xf3, 0x30, 0xda, 0x1c, 0x9e, 0xc7, 0x52, 0x91, 0xd5, 0x19, 0x83, + 0x47, 0x0b, 0x19, 0xda, 0x9d, 0xd8, 0xc4, 0x0e, 0x9d, 0x4e, 0xa0, 0x09, 0xe8, 0x66, 0x0d, 0xf2, + 0xfc, 0x31, 0x73, 0x9d, 0xf9, 0x47, 0x9c, 0xda, 0xdf, 0x85, 0xe1, 0x1a, 0x91, 0x3a, 0x3f, 0x51, + 0x23, 0xe0, 0x6a, 0x96, 0x8f, 0x8c, 0xd6, 0xe9, 0xc8, 0x4a, 0x6f, 0xc9, 0x88, 0xe8, 0x5a, 0x15, + 0x92, 0xa4, 0xb6, 0xd9, 0x71, 0x32, 0x59, 0x2f, 0x78, 0x9a, 0x9d, 0xe3, 0x52, 0x0d, 0x25, 0x68, + 0x55, 0x64, 0x97, 0x32, 0x74, 0x43, 0x2b, 0x98, 0x48, 0xcc, 0x16, 0x7d, 0x98, 0x8d, 0x8d, 0x04, + 0x39, 0x45, 0xde, 0xe7, 0x70, 0xb0, 0x70, 0xa1, 0x75, 0xb2, 0x0e, 0xe8, 0x5d, 0xd1, 0xf2, 0xac, + 0xea, 0x2c, 0xbd, 0xc6, 0x15, 0x22, 0x41, 0xf9, 0x99, 0x5d, 0x7c, 0x24, 0x33, 0x96, 0x46, 0x8d, + 0x97, 0xd4, 0xd8, 0x28, 0x79, 0xee, 0xfc, 0xfa, 0xb9, 0xed, 0xb0, 0xda, 0x7f, 0x11, 0x9f, 0x36, + 0x20, 0xd3, 0x77, 0x51, 0x8c, 0x3b, 0xad, 0x13, 0x5e, 0x2f, 0x2e, 0x67, 0x53, 0x84, 0x4a, 0x6e, + 0x2b, 0xf1, 0x00, 0xcb, 0x78, 0xf4, 0x1c, 0xdf, 0x24, 0x28, 0xae, 0x96, 0x97, 0xa7, 0x4a, 0xaa, + 0xec, 0xb7, 0x61, 0x73, 0xeb, 0xaa, 0xb1, 0x82, 0x70, 0x60, 0x17, 0x07, 0x7e, 0x20, 0x50, 0x5d, + 0xfc, 0xd9, 0xb8, 0x92, 0xd3, 0x91, 0x16, 0xfd, 0xfb, 0x0c, 0xec, 0x41, 0xc6, 0x0e, 0x33, 0x0c, + 0xf3, 0x59, 0x06, 0xaa, 0xdd, 0xa8, 0x9b, 0xbc, 0xf4, 0x04, 0xd7, 0xc8, 0xa4, 0x86, 0xb9, 0xef, + 0x05, 0x86, 0xd2, 0xe7, 0x3f, 0xac, 0x56, 0x0c, 0x9a, 0x39, 0x23, 0x33, 0xbd, 0x0d, 0x09, 0xcf, + 0x13, 0x5e, 0x22, 0xaa, 0xf3, 0xac, 0x2e, 0x5a, 0xb8, 0x8e, 0x8a, 0x24, 0x34, 0xc8, 0xa4, 0x06, + 0xb0, 0x2b, 0x56, 0xd5, 0xeb, 0x17, 0xb2, 0x4b, 0x77, 0x06, 0x10, 0x97, 0xf9, 0xae, 0xb6, 0xc4, + 0x53, 0x3b, 0x42, 0x4a, 0xb2, 0x8f, 0x55, 0xcf, 0x05, 0x26, 0xef, 0x7f, 0x2b, 0x88, 0x08, 0x41, + 0xb5, 0x1c, 0xfc, 0x75, 0x18, 0xcf, 0x1c, 0x0e, 0xf5, 0x64, 0x58, 0xe5, 0x64, 0xb5, 0x9b, 0xf9, + 0x0f, 0x6a, 0x82, 0xf4, 0xcc, 0x23, 0xa1, 0xcf, 0xe2, 0xb6, 0x01, 0x98, 0xdb, 0x9d, 0xc5, 0xfc, + 0x43, 0x72, 0xb5, 0x46, 0xe1, 0xa1, 0xb1, 0x18, 0x73, 0xc9, 0xe7, 0xea, 0xb5, 0x47, 0x96, 0xb9, + 0x98, 0x02, 0x8d, 0x78, 0x10, 0xd0, 0x4f, 0xe5, 0xba, 0x0a, 0xd0, 0xea, 0xb5, 0x91, 0xb7, 0xfb, + 0x92, 0x97, 0xa5, 0xe3, 0xdc, 0x52, 0xc8, 0xbf, 0xd6, 0x2c, 0xae, 0x2a, 0xef, 0x10, 0x96, 0x1c, + 0x58, 0x99, 0x4b, 0x2e, 0x7f, 0xa8, 0x1b, 0x31, 0x31, 0x7d, 0x3d, 0x8b, 0x7a, 0x6c, 0xd3, 0x15, + 0x67, 0xf3, 0xf8, 0x3a, 0x01, 0xea, 0x6b, 0x02, 0x37, 0xec, 0x8b, 0x18, 0xd8, 0xdf, 0xe5, 0xda, + 0x28, 0x2d, 0xeb, 0xe4, 0x06, 0x70, 0xca, 0x35, 0xeb, 0x21, 0xa7, 0xec, 0x8e, 0x6f, 0xa2, 0xa1, + 0xaf, 0x9a, 0x29, 0xf1, 0x5a, 0xd5, 0x64, 0xd7, 0x64, 0x09, 0x8a, 0x42, 0xfc, 0xe9, 0x5f, 0xdd, + 0x6d, 0xcf, 0x3b, 0x7a, 0xdc, 0xd7, 0x8a, 0xe7, 0xe5, 0x18, 0xc1, 0x0a, 0x5a, 0xb6, 0xf4, 0xff, + 0x26, 0xa8, 0x7e, 0x1a, 0xfa, 0xd7, 0x6a, 0xd1, 0x68, 0x60, 0xe4, 0xb0, 0x2b, 0x8c, 0x97, 0x5b, + 0x74, 0x8e, 0xc9, 0x03, 0xe8, 0xa2, 0x57, 0x51, 0xe3, 0x1a, 0x1a, 0xb3, 0x13, 0x6a, 0xda, 0x18, + 0xb0, 0xf1, 0x1b, 0xf8, 0xd1, 0x10, 0x4f, 0x7f, 0xca, 0xc7, 0x11, 0xa4, 0x9b, 0xcc, 0x1a, 0xfa, + 0x53, 0x25, 0xee, 0x01, 0x61, 0x5f, 0x09, 0xdf, 0x40, 0x50, 0x05, 0xb9, 0x51, 0x88, 0xae, 0x2f, + 0x8f, 0x0d, 0xe8, 0x86, 0xda, 0x69, 0xc3, 0x4f, 0x42, 0xcb, 0x4b, 0xb5, 0x95, 0x64, 0x8f, 0xc5, + 0x13, 0x61, 0x18, 0x38, 0x78, 0x02, 0x0a, 0x09, 0x7e, 0x4f, 0xd2, 0xfb, 0x95, 0x1c, 0x4e, 0x34, + 0x3c, 0x71, 0x55, 0x3b, 0x28, 0x67, 0xf0, 0xaa, 0xc9, 0x3a, 0x49, 0xa7, 0x1c, 0x05, 0x49, 0x7b, + 0xaa, 0x99, 0xf8, 0x53, 0x1e, 0xda, 0x1c, 0xcc, 0xb8, 0xf1, 0x5b, 0xaa, 0xd4, 0xc5, 0x3e, 0x00, + 0x47, 0x8c, 0xd6, 0x2a, 0x69, 0x17, 0x50, 0x5a, 0x7a, 0xf9, 0xf0, 0x30, 0x64, 0x24, 0xff, 0xe9, + 0x34, 0xd7, 0x29, 0x67, 0x3d, 0x2f, 0xee, 0xf4, 0xe7, 0x03, 0x7d, 0x85, 0x74, 0x52, 0x86, 0x67, + 0x75, 0x4e, 0x9f, 0x1b, 0xb3, 0x6e, 0xdc, 0x1a, 0x7a, 0x86, 0xd0, 0x48, 0x42, 0x37, 0xc4, 0x25, + 0x71, 0xea, 0x84, 0xcd, 0x01, 0x97, 0x57, 0x16, 0xfe, 0x5a, 0x05, 0x7d, 0xcd, 0x99, 0xf1, 0x40, + 0xee, 0x8d, 0x8b, 0x5d, 0x6c, 0x60, 0x57, 0xec, 0xb5, 0xcb, 0xda, 0x96, 0xe4, 0xce, 0x13, 0xbf, + 0xac, 0xa8, 0xea, 0x90, 0xe6, 0x6b, 0x5b, 0x24, 0xb5, 0xac, 0x22, 0xb1, 0x59, 0xdd, 0x79, 0x50, + 0xd2, 0xe2, 0x3e, 0x51, 0x67, 0xd4, 0xdc, 0x9e, 0xbd, 0xbd, 0xc4, 0xa4, 0x1e, 0x9c, 0x4b, 0x58, + 0x1e, 0x63, 0xce, 0x58, 0xe8, 0x41, 0x2e, 0xc4, 0x76, 0xdb, 0xe9, 0xc1, 0x9c, 0x86, 0x37, 0x33, + 0x74, 0x89, 0x6e, 0x08, 0x90, 0x1a, 0x06, 0xf3, 0xc1, 0x50, 0x7f, 0x73, 0x33, 0x3c, 0x40, 0xee, + 0x05, 0x74, 0x05, 0x5f, 0xe6, 0x94, 0x60, 0xdb, 0xd6, 0x6f, 0x0c, 0x62, 0x7c, 0x11, 0xbb, 0x33, + 0x5c, 0xca, 0xce, 0xda, 0x16, 0x03, 0xfd, 0x55, 0xeb, 0x01, 0xc5, 0x2a, 0xb8, 0x2b, 0x57, 0x75, + 0xfa, 0xd8, 0x5e, 0xca, 0xf4, 0xa5, 0xf0, 0x05, 0xcf, 0x59, 0xd3, 0x0f, 0x11, 0xf9, 0x25, 0x6b, + 0x16, 0x4d, 0x62, 0x78, 0xd6, 0xba, 0xe2, 0x09, 0x7c, 0x9d, 0xb7, 0x05, 0xa6, 0x17, 0x6a, 0x36, + 0x07, 0x69, 0x72, 0xaf, 0x0b, 0x2a, 0xc3, 0xc3, 0x40, 0x7d, 0xfb, 0x3b, 0x5a, 0x0f, 0x34, 0xc7, + 0x61, 0xd7, 0x14, 0x2e, 0xa4, 0xbb, 0xe4, 0x95, 0x0b, 0x1b, 0xa7, 0x0c, 0x9c, 0x83, 0x7c, 0x88, + 0xe4, 0x8d, 0x55, 0x13, 0xa3, 0x3f, 0x86, 0xd2, 0xc9, 0x9f, 0xb4, 0xeb, 0x51, 0x2b, 0xc7, 0x61, + 0x4f, 0xcf, 0xd5, 0x45, 0xa5, 0x6e, 0xcd, 0xe7, 0xdd, 0xae, 0x0e, 0x85, 0xf4, 0x46, 0xea, 0x99, + 0xff, 0x6f, 0x1b, 0x7b, 0xf7, 0xb0, 0x59, 0x84, 0x58, 0xe6, 0x00, 0xc1, 0x4f, 0x5d, 0xac, 0x8a, + 0x8b, 0xd8, 0xe6, 0x4b, 0x5b, 0xf7, 0x78, 0x66, 0xf1, 0x33, 0xe5, 0x39, 0xe8, 0xd0, 0x0c, 0xa1, + 0xdc, 0x51, 0xba, 0x4b, 0x14, 0x75, 0x35, 0x1b, 0x93, 0x13, 0x17, 0x49, 0x40, 0xc2, 0xf5, 0x30, + 0xaf, 0xef, 0x75, 0xb0, 0xeb, 0xf1, 0x67, 0xd3, 0xd7, 0x5b, 0xca, 0x46, 0x94, 0x5a, 0x46, 0x3d, + 0x8e, 0x26, 0x01, 0x78, 0xaf, 0xce, 0xc2, 0x85, 0xc5, 0x16, 0xd8, 0x0b, 0x66, 0xea, 0xb1, 0xc7, + 0x19, 0xfa, 0x59, 0xda, 0x2e, 0x14, 0x97, 0xa8, 0x95, 0x82, 0x5c, 0x86, 0xb7, 0xec, 0x1c, 0xca, + 0xef, 0x56, 0xe2, 0x8e, 0xc1, 0x31, 0x56, 0x01, 0x84, 0xd1, 0x54, 0x8b, 0x01, 0x2d, 0x57, 0x85, + 0x69, 0xf2, 0x13, 0xaf, 0xac, 0x85, 0x83, 0x3f, 0x3b, 0xa5, 0xb1, 0xf4, 0x55, 0x80, 0x95, 0x7f, + 0x7e, 0x40, 0xa2, 0x0d, 0xb3, 0xdf, 0xd8, 0xcf, 0xb6, 0xa6, 0xbc, 0xaa, 0xbf, 0xfd, 0x26, 0x9d, + 0x85, 0x94, 0xe0, 0x13, 0x26, 0xeb, 0x23, 0x9a, 0x50, 0xd6, 0xc3, 0x19, 0xf3, 0x84, 0x39, 0x2d, + 0xef, 0xc5, 0x07, 0xdf, 0x7e, 0x34, 0x29, 0x28, 0xf0, 0x9d, 0xb3, 0x2e, 0x8b, 0x8c, 0x38, 0xd4, + 0x20, 0xd1, 0x47, 0xa7, 0x17, 0x0a, 0x6d, 0x97, 0xd2, 0x12, 0x82, 0xe0, 0x16, 0x23, 0xa3, 0x9c, + 0x30, 0x1b, 0x98, 0x24, 0x28, 0x96, 0xef, 0x96, 0x55, 0xad, 0x52, 0xac, 0x91, 0xc5, 0xd1, 0x3d, + 0xe1, 0x23, 0x00, 0x03, 0x6d, 0xb4, 0xa8, 0xd8, 0xf0, 0x78, 0x9a, 0x0c, 0xbc, 0xd5, 0xcd, 0xe1, + 0x00, 0x65, 0xf1, 0x65, 0x34, 0x87, 0xd3, 0x49, 0xa7, 0x98, 0xf9, 0x92, 0xf9, 0x7f, 0x7c, 0x88, + 0x59, 0x96, 0xb7, 0xe6, 0x01, 0x0a, 0xe9, 0xbc, 0x36, 0x7f, 0xd7, 0x74, 0xae, 0x93, 0x0b, 0x7f, + 0x11, 0xc2, 0x1f, 0x96, 0x41, 0x45, 0x66, 0xfa, 0x69, 0x24, 0xcf, 0x71, 0xe7, 0x58, 0x4f, 0x83, + 0x7d, 0x9c, 0xa1, 0x70, 0x6b, 0x62, 0x71, 0x26, 0x0b, 0x1d, 0x34, 0x44, 0x70, 0x3f, 0xe8, 0x06, + 0x59, 0x16, 0xea, 0x98, 0xde, 0x4d, 0xb1, 0xe2, 0x9e, 0x4a, 0x75, 0x96, 0xc7, 0xfd, 0x0f, 0x0d, + 0x3f, 0xdd, 0x22, 0xf2, 0xbd, 0xbe, 0x13, 0x12, 0x73, 0xc5, 0x49, 0x56, 0x14, 0xcb, 0x1a, 0x0e, + 0x89, 0xa9, 0x7b, 0xea, 0xd2, 0x10, 0xc8, 0xe8, 0x91, 0x8d, 0x16, 0x1c, 0x84, 0xab, 0xb7, 0x88, + 0x8b, 0x0f, 0xff, 0xe3, 0x48, 0x19, 0x51, 0xff, 0x6c, 0x72, 0x1f, 0x4b, 0xef, 0xcb, 0x6d, 0x26, + 0xfc, 0xd2, 0x39, 0x51, 0x1b, 0xed, 0xb3, 0x5f, 0x55, 0x90, 0x45, 0x80, 0xde, 0xdd, 0x47, 0xa5, + 0x50, 0x5a, 0x60, 0xf4, 0x72, 0x01, 0xc3, 0x0a, 0x34, 0xad, 0x00, 0xec, 0xe8, 0xc8, 0xa7, 0x00, + 0x74, 0x6f, 0x3a, 0x11, 0x1c, 0x7a, 0x6a, 0xc0, 0x21, 0x0b, 0x07, 0xf8, 0x6d, 0x25, 0x7c, 0x50, + 0x7b, 0xa9, 0x3f, 0x2f, 0x65, 0xcc, 0x0e, 0x82, 0x5f, 0x6f, 0xd2, 0x3d, 0x0f, 0xa0, 0x22, 0xee, + 0x34, 0x23, 0xbf, 0xa9, 0x46, 0x3f, 0x7b, 0xf8, 0x2c, 0x5a, 0xda, 0x52, 0x5d, 0xd7, 0x05, 0x1a, + 0xa8, 0x93, 0x3f, 0x13, 0x2e, 0xdb, 0xe2, 0xcd, 0xde, 0x15, 0x34, 0x74, 0xe9, 0xbf, 0x0d, 0x6b, + 0x0e, 0x8c, 0xfd, 0xab, 0x59, 0x2e, 0x34, 0x76, 0xd3, 0x8d, 0x77, 0xe4, 0xdf, 0x49, 0xbd, 0x7a, + 0x2c, 0xca, 0x90, 0x7a, 0xed, 0x75, 0x83, 0xaa, 0x84, 0x63, 0x8f, 0xa3, 0x5e, 0xf4, 0x7d, 0x63, + 0xc1, 0x4a, 0x4a, 0xe4, 0x9d, 0x55, 0x7d, 0xf6, 0xdd, 0xf8, 0xdf, 0x13, 0x1f, 0x27, 0x86, 0xef, + 0x7e, 0xd7, 0xdc, 0xcf, 0x77, 0x58, 0x3b, 0x15, 0xd6, 0x24, 0xde, 0xe7, 0xb9, 0xdc, 0x68, 0x34, + 0x49, 0x28, 0x85, 0x76, 0xc2, 0x46, 0x10, 0xbb, 0x3f, 0x9d, 0x2c, 0xea, 0x16, 0x6f, 0x07, 0xf5, + 0x48, 0x95, 0x36, 0x17, 0xdb, 0x05, 0x24, 0x90, 0x4f, 0xf4, 0xae, 0xd1, 0x5a, 0xcb, 0x5d, 0x80, + 0x2b, 0x31, 0x22, 0x8c, 0xce, 0x45, 0x97, 0xf5, 0x78, 0x62, 0x16, 0x7e, 0x1f, 0x36, 0x45, 0x7e, + 0xfa, 0x07, 0xf9, 0x4e, 0x01, 0x16, 0xc0, 0x10, 0xa5, 0x46, 0x6b, 0x1f, 0x56, 0x89, 0xdd, 0x4a, + 0x4d, 0xf7, 0xf6, 0x1b, 0x83, 0xd2, 0x68, 0xc5, 0x05, 0x21, 0x92, 0xa2, 0x2d, 0x5d, 0x3b, 0x0f, + 0x83, 0x66, 0x50, 0xb6, 0xa6, 0x8a, 0x9b, 0x55, 0xaf, 0x06, 0x71, 0x99, 0xea, 0x61, 0x48, 0x9f, + 0x94, 0x0d, 0xfb, 0xa3, 0x21, 0x1c, 0xf3, 0xc5, 0x89, 0x57, 0xfc, 0x00, 0xba, 0xfc, 0x22, 0x7c, + 0xc1, 0x96, 0x72, 0xdb, 0xc6, 0xb6, 0xd2, 0x75, 0x27, 0x85, 0x76, 0xb6, 0x0d, 0xec, 0x1f, 0x8e, + 0x97, 0x7e, 0x3b, 0x18, 0xc5, 0xec, 0x94, 0x7e, 0xee, 0x1d, 0xf8, 0xb9, 0x71, 0x5e, 0x5c, 0xbb, + 0xa2, 0x57, 0xf0, 0x2d, 0xc0, 0xce, 0x6c, 0xba, 0x8f, 0xb9, 0x2a, 0x5c, 0xf2, 0x70, 0x2c, 0xd5, + 0xb3, 0xb2, 0x97, 0x0d, 0xbe, 0xfd, 0xd6, 0x6c, 0x82, 0x73, 0x97, 0x05, 0x95, 0x4c, 0xca, 0x45, + 0x8b, 0x5c, 0xd1, 0xc0, 0x75, 0x7c, 0xe8, 0xf9, 0xa9, 0xcc, 0xe5, 0xac, 0x6f, 0x3b, 0x16, 0x43, + 0x51, 0xb5, 0x81, 0x0a, 0x5b, 0xec, 0xf9, 0x04, 0x1a, 0x71, 0x55, 0x3e, 0x1c, 0xc8, 0xbb, 0x9a, + 0xf5, 0xd7, 0xc0, 0x29, 0xbd, 0x6e, 0x9b, 0x64, 0x52, 0xb1, 0x66, 0x83, 0xea, 0x42, 0xf4, 0x2f, + 0x05, 0x2b, 0xea, 0xd6, 0xbc, 0x14, 0xc0, 0xb0, 0x15, 0x61, 0xf2, 0x2d, 0x89, 0x82, 0xf9, 0xd1, + 0xf7, 0x93, 0x6d, 0x86, 0x84, 0x88, 0x10, 0xa5, 0x13, 0xbc, 0x86, 0x68, 0xf1, 0xe1, 0x0c, 0x16, + 0xfa, 0x8e, 0x1e, 0x10, 0x00, 0xe0, 0x8e, 0x9c, 0x94, 0xc3, 0x63, 0x9e, 0x21, 0xe0, 0xa1, 0x32, + 0x3a, 0x49, 0x3e, 0x73, 0x67, 0x01, 0xed, 0xd1, 0xdb, 0x95, 0x6f, 0x2d, 0x69, 0x45, 0x7d, 0xae, + 0xfc, 0x44, 0x37, 0xa0, 0x30, 0x56, 0xa0, 0x9f, 0x48, 0x70, 0x04, 0x1d, 0xda, 0xa8, 0x00, 0x0f, + 0x3e, 0xd0, 0x0d, 0xa0, 0x4d, 0x09, 0xcd, 0x56, 0xa5, 0x1b, 0xc3, 0x43, 0xe3, 0x62, 0xb5, 0x1e, + 0xfb, 0x46, 0x61, 0xc5, 0xa5, 0x5b, 0xd7, 0x1c, 0xe4, 0xed, 0x68, 0xbf, 0x30, 0xbc, 0x42, 0x8d, + 0xd1, 0xa2, 0xe9, 0xd5, 0x86, 0xd3, 0xf6, 0xa7, 0xcf, 0xa0, 0x1c, 0x65, 0x55, 0xe4, 0x3e, 0xcd, + 0x35, 0x00, 0x3d, 0x2c, 0x26, 0x31, 0xf0, 0xa8, 0xa6, 0xa6, 0xef, 0x03, 0x1f, 0x9b, 0x42, 0x80, + 0xf7, 0x94, 0xaf, 0xd1, 0x2c, 0xb2, 0xe5, 0x33, 0x98, 0xde, 0x41, 0x87, 0xc2, 0x35, 0xaa, 0xa7, + 0x05, 0xea, 0x22, 0x81, 0x07, 0xab, 0x02, 0xed, 0x24, 0x86, 0xda, 0xf1, 0x9f, 0xd3, 0xa0, 0x25, + 0x13, 0x8b, 0xe2, 0x70, 0xb8, 0x2c, 0xe5, 0x09, 0xfd, 0xba, 0x16, 0x15, 0xbd, 0x0e, 0x16, 0xeb, + 0xf3, 0xaa, 0x54, 0xaa, 0x2e, 0x82, 0x01, 0x3a, 0x32, 0xa5, 0x0c, 0xed, 0x6f, 0xe3, 0xcc, 0x91, + 0xf4, 0x4e, 0xe4, 0xa9, 0xf6, 0xe8, 0x2e, 0x75, 0x62, 0x41, 0xb0, 0x53, 0xe8, 0xcd, 0x0c, 0x00, + 0x54, 0x84, 0xe6, 0x9b, 0xb2, 0xac, 0x2c, 0xba, 0xaf, 0x0c, 0xb6, 0xe5, 0x63, 0xf0, 0x38, 0xa0, + 0xf9, 0x54, 0x35, 0xc6, 0xfa, 0x4e, 0xef, 0x4e, 0xec, 0xd2, 0x58, 0x1a, 0x5e, 0x24, 0x50, 0x86, + 0x0c, 0xd2, 0x5a, 0x95, 0x15, 0x23, 0xe2, 0xcc, 0x99, 0x6f, 0x06, 0xfb, 0x3f, 0xb3, 0xeb, 0xd7, + 0x19, 0xc9, 0xe4, 0x87, 0xc8, 0x9f, 0xbb, 0xaa, 0x4b, 0x8f, 0x60, 0xe3, 0x14, 0xbb, 0x92, 0xd5, + 0x06, 0x85, 0x53, 0x7d, 0x05, 0x38, 0x74, 0x0b, 0x7a, 0x7b, 0xe5, 0x7a, 0x67, 0xbb, 0x88, 0xf7, + 0xaf, 0x4b, 0x05, 0x49, 0x4c, 0x4a, 0xcb, 0x07, 0xdd, 0x17, 0x4d, 0x9e, 0x2e, 0x31, 0xc1, 0x50, + 0x65, 0xa9, 0x28, 0x9d, 0xd8, 0x7e, 0x42, 0xb7, 0xfb, 0xd7, 0xd4, 0x6e, 0x84, 0x3d, 0xba, 0x28, + 0xec, 0x93, 0xce, 0x2b, 0x64, 0x8b, 0x9e, 0x05, 0x40, 0x4c, 0xb5, 0x57, 0xed, 0xed, 0xdc, 0x0f, + 0xf5, 0xd4, 0xfb, 0x61, 0x70, 0xa4, 0x8b, 0x01, 0x54, 0xbb, 0x4a, 0x08, 0xe7, 0x43, 0x4d, 0x29, + 0xca, 0xae, 0x43, 0x1a, 0x93, 0x61, 0xa2, 0x35, 0xcf, 0xdf, 0x05, 0x5b, 0xce, 0x7d, 0x4e, 0x64, + 0x5a, 0x7a, 0x4a, 0x2b, 0xde, 0x03, 0xe7, 0x57, 0x80, 0xef, 0xdb, 0x5c, 0xd9, 0xb6, 0xfe, 0xd0, + 0x21, 0xbf, 0xd7, 0xdf, 0xfb, 0x36, 0xfd, 0x64, 0x41, 0x68, 0x8f, 0xa7, 0x6b, 0xa7, 0xec, 0xf7, + 0x61, 0x9a, 0xd8, 0x96, 0x64, 0xe2, 0xc2, 0x34, 0x70, 0x57, 0xa5, 0x67, 0x06, 0xaa, 0x9c, 0xfa, + 0xc8, 0xe8, 0xc6, 0xbc, 0x62, 0xf9, 0x19, 0x47, 0xc5, 0x4f, 0x14, 0x83, 0xc6, 0xa6, 0xa0, 0x5c, + 0x0c, 0x18, 0xc3, 0xb9, 0xb9, 0xe5, 0xca, 0xb3, 0xad, 0xe4, 0x68, 0x6f, 0x37, 0x30, 0x4c, 0xb5, + 0xad, 0xa8, 0x89, 0xe2, 0xbb, 0xd5, 0x55, 0xc0, 0x59, 0xc3, 0xee, 0xe4, 0x95, 0x3e, 0x35, 0x09, + 0x94, 0x8e, 0xe6, 0xcc, 0xb3, 0x82, 0x25, 0xd7, 0x6a, 0x18, 0xd9, 0xe7, 0xbf, 0x71, 0x43, 0xb9, + 0x47, 0x7a, 0x90, 0x91, 0x88, 0x5e, 0x7b, 0xb2, 0x8e, 0x08, 0x96, 0x3e, 0x86, 0x2e, 0xe3, 0x12, + 0xe7, 0x01, 0x14, 0xcd, 0x86, 0x32, 0xd9, 0xd5, 0xeb, 0x1f, 0x3f, 0x09, 0xd0, 0x72, 0x59, 0xbc, + 0x3b, 0x31, 0x6b, 0xf6, 0x4f, 0x94, 0x2c, 0xe0, 0x2c, 0x6c, 0x7d, 0x05, 0xc5, 0xeb, 0x34, 0x39, + 0x64, 0xc7, 0x16, 0x9d, 0x55, 0xf0, 0x46, 0x58, 0x1c, 0x77, 0x2d, 0x7d, 0x70, 0x53, 0x4e, 0x4a, + 0x38, 0xc0, 0x9e, 0x06, 0x94, 0x87, 0x88, 0xad, 0xa6, 0xaa, 0x24, 0x00, 0x37, 0x84, 0x59, 0x05, + 0x01, 0x61, 0x48, 0xaa, 0xf3, 0x81, 0x3b, 0x74, 0xd0, 0x91, 0x10, 0x5c, 0xac, 0xd3, 0x0d, 0x23, + 0xff, 0x93, 0xc0, 0xa0, 0xdc, 0x49, 0x6e, 0xe8, 0x61, 0x4e, 0x07, 0x59, 0xcf, 0xf3, 0x1f, 0x70, + 0x68, 0x32, 0x82, 0x6f, 0xef, 0x7d, 0x31, 0x6e, 0x22, 0x77, 0xc1, 0xbc, 0x21, 0x74, 0xa0, 0xe7, + 0x47, 0xf0, 0x06, 0xee, 0xf8, 0x54, 0xd8, 0x72, 0x6d, 0x7f, 0x51, 0x02, 0x45, 0x74, 0x30, 0xe2, + 0x64, 0x74, 0x0d, 0xb0, 0xf4, 0x0e, 0x84, 0x3e, 0x0d, 0xcb, 0xed, 0xcd, 0x9c, 0x0b, 0xa8, 0x7d, + 0xb1, 0xda, 0xe1, 0x84, 0xd8, 0xbc, 0x79, 0x53, 0x4f, 0x49, 0xab, 0xc9, 0x46, 0x35, 0x70, 0xaf, + 0xa0, 0x4b, 0x73, 0x39, 0xcd, 0x2d, 0x71, 0xeb, 0x8e, 0xbf, 0xbc, 0x12, 0xad, 0xea, 0x0a, 0x12, + 0x46, 0x05, 0xc6, 0x35, 0x0e, 0x38, 0x22, 0x34, 0x0c, 0xfa, 0xa5, 0x01, 0xab, 0x17, 0x5f, 0xda, + 0xad, 0x13, 0x1a, 0x4e, 0xdf, 0xce, 0x0c, 0x5b, 0x5a, 0x7e, 0x8b, 0x30, 0xaf, 0xdd, 0x53, 0x79, + 0x53, 0x38, 0x0a, 0xfc, 0x82, 0xb5, 0x25, 0x55, 0x50, 0xdb, 0x10, 0xf9, 0x25, 0x41, 0x2c, 0xa6, + 0x06, 0xf6, 0x8e, 0x68, 0x67, 0x89, 0x5c, 0x19, 0x12, 0xe0, 0x52, 0x45, 0xb0, 0x36, 0x42, 0x6f, + 0x66, 0x0b, 0x77, 0x7a, 0x04, 0xe7, 0xdd, 0xf2, 0x5d, 0xb4, 0x5f, 0xf0, 0x15, 0x0a, 0xc6, 0xda, + 0x4f, 0x41, 0x40, 0x68, 0x9b, 0xf6, 0x08, 0xe6, 0x33, 0xf0, 0xc7, 0x93, 0x1f, 0x9b, 0xa0, 0x28, + 0x3f, 0x66, 0x8a, 0x1c, 0x75, 0xe7, 0x7f, 0x51, 0x15, 0xea, 0x05, 0x74, 0x2e, 0xdd, 0x79, 0x81, + 0x6f, 0x86, 0x5b, 0x94, 0xa0, 0x5c, 0x89, 0x29, 0x7b, 0x67, 0x8b, 0xea, 0xf4, 0x0a, 0xf8, 0x53, + 0x76, 0x3f, 0x5e, 0x12, 0x26, 0x08, 0xfa, 0x09, 0x71, 0x96, 0x3d, 0xd4, 0x22, 0x2b, 0xcc, 0xb3, + 0x0c, 0x45, 0x07, 0xcc, 0x20, 0x01, 0x77, 0x31, 0xa5, 0xc3, 0x0f, 0x5c, 0x52, 0xb0, 0x01, 0x19, + 0x99, 0xad, 0x24, 0x8d, 0x24, 0x6c, 0xc9, 0xbe, 0x1d, 0xb3, 0x68, 0xb9, 0x96, 0x74, 0x5a, 0xd1, + 0x8e, 0xaf, 0x5b, 0x9f, 0xd0, 0x0c, 0x51, 0xaa, 0xcf, 0xac, 0x93, 0x97, 0x66, 0x5b, 0x8c, 0x64, + 0xe7, 0xa4, 0x62, 0x44, 0x35, 0x4f, 0x89, 0x9e, 0xcb, 0x11, 0xba, 0x85, 0xd5, 0x49, 0xcb, 0x75, + 0xbd, 0xfd, 0xd1, 0xef, 0x26, 0x95, 0xb5, 0xb3, 0x30, 0xa9, 0xed, 0x39, 0xa9, 0x0f, 0xf8, 0xc3, + 0xed, 0xe7, 0x21, 0x22, 0x19, 0x5b, 0xc8, 0x78, 0x81, 0xa1, 0x1b, 0xb2, 0x73, 0x64, 0x07, 0x80, + 0xaf, 0x0d, 0x17, 0xdb, 0x34, 0x7c, 0xf8, 0x73, 0x66, 0xfe, 0xe0, 0x4e, 0xa6, 0x5f, 0x49, 0x1a, + 0x3a, 0xe6, 0x76, 0x63, 0xa0, 0xd3, 0xcf, 0x72, 0x15, 0x12, 0xa2, 0x9c, 0xfa, 0x69, 0x96, 0xda, + 0x45, 0x13, 0x2f, 0x89, 0xda, 0x1e, 0x23, 0x4c, 0xaf, 0xd8, 0x05, 0xf0, 0x40, 0xfa, 0x74, 0x4e, + 0x09, 0x32, 0xfa, 0xe4, 0x5a, 0x7b, 0x0a, 0xa2, 0x0f, 0xdf, 0xd5, 0x4c, 0xfe, 0x91, 0x5e, 0xd0, + 0xf9, 0x97, 0xef, 0x7e, 0x73, 0xd3, 0x21, 0xc1, 0x28, 0xe0, 0xf1, 0x5a, 0x37, 0x41, 0x56, 0xc5, + 0xc1, 0x7c, 0x53, 0x48, 0xd4, 0xa4, 0x3d, 0xb5, 0x01, 0x02, 0x86, 0x22, 0x9f, 0xb7, 0x98, 0xb3, + 0xe9, 0xb3, 0xfc, 0x8d, 0x0c, 0xa2, 0xfc, 0xb9, 0xce, 0xd9, 0xe9, 0xce, 0xa0, 0xf5, 0xe2, 0xf1, + 0x24, 0x14, 0xcd, 0x71, 0x3d, 0x41, 0x7f, 0x4c, 0xee, 0xe9, 0xf9, 0x3a, 0x5c, 0x7c, 0xc1, 0x57, + 0x21, 0x48, 0x09, 0x7f, 0xd3, 0x93, 0x03, 0xda, 0x9a, 0x67, 0xa3, 0x3e, 0x06, 0x12, 0x9a, 0x9d, + 0xba, 0x48, 0x79, 0x28, 0x88, 0xb3, 0x61, 0x8a, 0x4f, 0xdd, 0x57, 0xc6, 0x5d, 0xf9, 0x70, 0x3b, + 0xec, 0x8a, 0xf7, 0x52, 0xe8, 0xb5, 0x52, 0x96, 0x91, 0x4d, 0x2d, 0x29, 0x5d, 0x5b, 0x94, 0xbd, + 0x10, 0xbb, 0x27, 0x85, 0x26, 0x21, 0xb7, 0x2c, 0x44, 0xde, 0xf7, 0xc0, 0x98, 0x34, 0xcb, 0xd4, + 0x6c, 0xfc, 0xc4, 0x35, 0x66, 0xfb, 0xda, 0x94, 0xf2, 0x42, 0xb4, 0xa2, 0x2d, 0xe6, 0x3c, 0x5a, + 0x3b, 0x5e, 0x63, 0xcc, 0x21, 0x55, 0x6c, 0x96, 0x18, 0x54, 0x54, 0xcb, 0x23, 0x17, 0x19, 0xc6, + 0x3f, 0x38, 0x8d, 0xe7, 0x76, 0x30, 0xfa, 0x8e, 0x8d, 0x5e, 0x65, 0x02, 0xe5, 0x7f, 0xdb, 0x03, + 0x3b, 0xe7, 0xbe, 0x46, 0xdb, 0x94, 0x70, 0xfb, 0xf7, 0xc9, 0xf2, 0xb8, 0x73, 0x35, 0x35, 0x57, + 0xbf, 0x8e, 0xd6, 0xba, 0xe1, 0xe5, 0xcf, 0x00, 0x7d, 0xdd, 0x60, 0xa3, 0xda, 0x8c, 0xcd, 0x8a, + 0x3a, 0x63, 0x49, 0x2e, 0xa5, 0x7c, 0x81, 0xee, 0x66, 0x49, 0x28, 0xa6, 0x3b, 0xdd, 0xfa, 0xcd, + 0x4e, 0x1a, 0xc0, 0xe4, 0x0a, 0xa4, 0xeb, 0x66, 0xab, 0x87, 0x0a, 0x34, 0x72, 0x89, 0x1d, 0x2b, + 0x33, 0x7d, 0x2c, 0xbe, 0xe4, 0x84, 0x67, 0x99, 0x17, 0xb0, 0x20, 0xff, 0x46, 0xe9, 0x71, 0x85, + 0xe2, 0x9f, 0x9d, 0xc7, 0x21, 0x7d, 0x09, 0xb8, 0x7c, 0xab, 0x9b, 0x4f, 0x16, 0x93, 0x9c, 0x6e, + 0x7b, 0x6f, 0x7e, 0xc3, 0x7f, 0x47, 0xf7, 0xd4, 0xd3, 0x75, 0xb0, 0xe8, 0xba, 0x3e, 0xec, 0xa3, + 0xc5, 0xcf, 0x60, 0xc0, 0xff, 0x0c, 0xe6, 0x3f, 0x15, 0x3f, 0x00, 0xca, 0x32, 0xf5, 0xfc, 0xd0, + 0x41, 0x3a, 0xc7, 0xeb, 0x90, 0x80, 0x08, 0x7f, 0xd1, 0xf9, 0xb0, 0xa3, 0x5b, 0x0e, 0x41, 0x39, + 0x92, 0x52, 0x62, 0x0c, 0x53, 0xd2, 0xa8, 0x23, 0x01, 0xf1, 0xdd, 0xdd, 0x30, 0x36, 0x04, 0x89, + 0x79, 0xe8, 0xde, 0x44, 0x31, 0xac, 0x54, 0x51, 0x23, 0xe0, 0xa1, 0x9f, 0x41, 0xa4, 0x74, 0x26, + 0x92, 0xe4, 0x58, 0x70, 0x41, 0xda, 0x3e, 0x4e, 0xf4, 0x02, 0x71, 0x82, 0x83, 0x3e, 0xb0, 0x8e, + 0x21, 0x79, 0x15, 0xa4, 0xc8, 0x67, 0xf4, 0x31, 0xa1, 0x21, 0x55, 0x08, 0x7a, 0x6a, 0x0d, 0x84, + 0xaa, 0x45, 0x17, 0x2d, 0x50, 0x7f, 0x05, 0x9a, 0x4b, 0x0a, 0x78, 0xf3, 0x5b, 0x2a, 0xc7, 0x01, + 0x3a, 0xb2, 0x4a, 0xb8, 0x17, 0xbb, 0x10, 0x6f, 0x04, 0xab, 0xce, 0x9b, 0x83, 0xc4, 0x6f, 0xdc, + 0x50, 0x3a, 0x09, 0xdd, 0x88, 0xe1, 0x8f, 0x82, 0x6c, 0x9b, 0x45, 0x53, 0x1a, 0xc4, 0xfd, 0x11, + 0x6f, 0xc8, 0x4a, 0xf3, 0x79, 0x6b, 0x4a, 0x8b, 0x58, 0x2e, 0x8b, 0xb9, 0xc6, 0xbe, 0x28, 0x33, + 0x71, 0xad, 0xa5, 0x02, 0x23, 0x1d, 0x37, 0xfb, 0x44, 0xc8, 0xf2, 0x9b, 0x95, 0x62, 0xfe, 0xe3, + 0xdd, 0x0a, 0x8e, 0xcf, 0x09, 0x1d, 0x6a, 0x11, 0xcd, 0x90, 0x28, 0xc4, 0x59, 0xe9, 0xe2, 0x18, + 0xfa, 0x06, 0xa4, 0x8d, 0x1b, 0xae, 0xee, 0x77, 0x7f, 0xed, 0xf6, 0x64, 0x3d, 0xfb, 0xd1, 0xba, + 0xa1, 0x79, 0xb7, 0x8a, 0xc4, 0x71, 0x8a, 0x52, 0xd9, 0x4d, 0x4c, 0xdf, 0xa0, 0x3f, 0x93, 0x5b, + 0x6f, 0x3b, 0xc3, 0x21, 0xed, 0x3f, 0xed, 0xd3, 0x21, 0xb1, 0x12, 0x14, 0x8c, 0xac, 0xf6, 0x8e, + 0x73, 0xcb, 0x97, 0x19, 0x38, 0xe5, 0xd6, 0xd7, 0xb3, 0x3b, 0x31, 0xa3, 0x74, 0xdf, 0x88, 0xde, + 0x65, 0x57, 0x4b, 0x79, 0xbd, 0x60, 0x04, 0x4b, 0x5a, 0x5a, 0x59, 0xf9, 0x59, 0x08, 0x60, 0xaf, + 0x22, 0x6b, 0xc0, 0xcc, 0xba, 0x96, 0x04, 0x32, 0x3e, 0x8a, 0xbf, 0x37, 0x81, 0x96, 0x63, 0x0a, + 0x44, 0xdd, 0xde, 0x63, 0xd4, 0x39, 0xb2, 0x79, 0x85, 0xea, 0x81, 0xbd, 0xae, 0x97, 0x4e, 0x02, + 0x98, 0x07, 0xb7, 0x5f, 0xcd, 0x7c, 0x15, 0x9c, 0x39, 0xdd, 0xf1, 0x4b, 0xfd, 0xe7, 0xde, 0xe1, + 0x2d, 0x9c, 0xd1, 0x41, 0x90, 0x77, 0x5c, 0xa2, 0xcb, 0x64, 0x99, 0x6e, 0x8a, 0x16, 0xd0, 0xea, + 0x69, 0x64, 0xb5, 0xfd, 0x48, 0xfd, 0xd6, 0xe8, 0x5e, 0xc3, 0x56, 0xe2, 0x85, 0xd9, 0x5e, 0xee, + 0xcf, 0x3b, 0xf5, 0x48, 0x5d, 0x01, 0x4b, 0xd8, 0x83, 0x76, 0xad, 0x8e, 0x6a, 0x02, 0xab, 0x1e, + 0x79, 0x2f, 0x6b, 0x67, 0x85, 0x7f, 0x87, 0xf5, 0x5b, 0x61, 0x5a, 0x22, 0x96, 0x1d, 0xf6, 0x78, + 0xc6, 0x2d, 0x2b, 0x87, 0xd8, 0x6f, 0x90, 0xe1, 0x7d, 0x70, 0xaf, 0x76, 0xd3, 0x79, 0x4f, 0x15, + 0x2d, 0x37, 0x22, 0x7b, 0xaf, 0x52, 0xaf, 0x32, 0xfa, 0xb9, 0x9f, 0xd2, 0x70, 0xbb, 0x1b, 0xf3, + 0x62, 0x09, 0x0f, 0x07, 0xd4, 0xed, 0xbe, 0xe5, 0x4e, 0xef, 0x44, 0xa6, 0x9e, 0x8a, 0x70, 0x05, + 0xbb, 0x21, 0x4c, 0x06, 0x67, 0x6b, 0x30, 0x86, 0x50, 0x62, 0x4f, 0x5e, 0xe7, 0xc3, 0x9e, 0xca, + 0x1a, 0xec, 0x1f, 0xf8, 0xa6, 0x1d, 0x6f, 0xd7, 0x1b, 0xb5, 0xb0, 0xd0, 0x95, 0xe9, 0x21, 0x28, + 0x84, 0x0a, 0xbe, 0x3f, 0xeb, 0x6f, 0x77, 0xb5, 0x09, 0xa7, 0x1e, 0x10, 0x24, 0x85, 0xb6, 0x4c, + 0xcf, 0x75, 0xc3, 0xdb, 0x96, 0x88, 0x99, 0x33, 0x7f, 0x60, 0x9b, 0xf4, 0x6b, 0x12, 0xbd, 0x6b, + 0x93, 0xb7, 0x38, 0xe0, 0x42, 0x58, 0x21, 0x60, 0xfd, 0xf8, 0x35, 0x38, 0x79, 0x93, 0xb0, 0x37, + 0x88, 0x9c, 0x6d, 0x13, 0x8b, 0xf7, 0x20, 0x4b, 0xcb, 0x13, 0x91, 0xc9, 0x14, 0x36, 0x20, 0xdb, + 0xee, 0x08, 0x23, 0xef, 0xef, 0xaa, 0xe1, 0xbe, 0x16, 0x9d, 0xe7, 0xc9, 0xd2, 0x2a, 0x23, 0x11, + 0xa5, 0x87, 0xdb, 0x46, 0x0c, 0x03, 0x12, 0x60, 0xf6, 0x33, 0x7e, 0x36, 0xa0, 0x32, 0x80, 0x10, + 0x0a, 0x68, 0x19, 0xb4, 0xd5, 0xdf, 0x87, 0x04, 0x53, 0x95, 0x2a, 0x04, 0x97, 0x2a, 0x6c, 0x9d, + 0x2f, 0x8c, 0x6a, 0x58, 0xb6, 0x6d, 0x75, 0x43, 0x27, 0xb1, 0xe8, 0x1a, 0x95, 0x55, 0xe4, 0x6d, + 0x90, 0x19, 0x46, 0x0b, 0x3a, 0x43, 0xa9, 0xfa, 0x19, 0x6e, 0xe2, 0xcf, 0x7b, 0x25, 0x04, 0x31, + 0x5f, 0x4c, 0xd1, 0xb2, 0x6b, 0x17, 0x29, 0x2c, 0xe2, 0xae, 0x4f, 0x92, 0xb4, 0xcc, 0xb0, 0x59, + 0xc4, 0x25, 0xb9, 0x3e, 0x74, 0xe9, 0x26, 0x9b, 0x4c, 0xb5, 0xbb, 0x0e, 0xc3, 0x76, 0x88, 0xad, + 0x16, 0x62, 0x9c, 0x7c, 0xe2, 0x1f, 0xc4, 0xac, 0xf4, 0xba, 0x73, 0xa8, 0xd9, 0xda, 0xa8, 0x30, + 0x26, 0xca, 0x54, 0x91, 0x00, 0xaf, 0x8c, 0x87, 0x0d, 0xd2, 0xac, 0x42, 0x5e, 0x1d, 0x4a, 0xba, + 0x2e, 0x80, 0x4d, 0x39, 0xf9, 0x4e, 0x53, 0xdd, 0xa6, 0xb8, 0xcf, 0x13, 0x80, 0xa6, 0x21, 0x79, + 0xea, 0x09, 0x14, 0x59, 0x46, 0xc9, 0x10, 0x38, 0x0a, 0xdc, 0xc8, 0x27, 0xae, 0x61, 0x5d, 0xca, + 0x75, 0x34, 0x8b, 0x7e, 0xec, 0xe2, 0x07, 0x68, 0x40, 0xda, 0xc3, 0x30, 0xcd, 0x4f, 0xdc, 0x09, + 0x99, 0xdb, 0xd9, 0x55, 0x37, 0x15, 0x38, 0x7d, 0x67, 0xeb, 0xde, 0x25, 0x12, 0xbc, 0xca, 0x1f, + 0x91, 0x55, 0x43, 0xb0, 0x3f, 0x4e, 0x4c, 0xf4, 0x78, 0x92, 0x1a, 0xd9, 0x33, 0xa0, 0x97, 0xb5, + 0xcb, 0x6e, 0x50, 0xa9, 0xb7, 0x78, 0x30, 0x28, 0x9a, 0xef, 0x74, 0xe3, 0x20, 0x09, 0x2d, 0xef, + 0xbf, 0x18, 0x7c, 0xea, 0x0b, 0x62, 0xa4, 0x3f, 0x0d, 0x02, 0x3a, 0x18, 0xe3, 0xbf, 0x1c, 0x50, + 0x1b, 0x0d, 0x87, 0xae, 0x15, 0x88, 0x9a, 0x78, 0x67, 0xad, 0xab, 0xe5, 0xa9, 0x92, 0x52, 0x73, + 0x98, 0x7a, 0xe8, 0x8e, 0x4e, 0x12, 0x87, 0x3b, 0xde, 0xfb, 0x49, 0x7f, 0x89, 0xb3, 0x42, 0x0b, + 0x70, 0x0c, 0xc5, 0x5e, 0x9a, 0xc6, 0xc6, 0xc7, 0x4a, 0xbd, 0xd0, 0x5f, 0xc0, 0xd0, 0xef, 0xff, + 0x5b, 0x45, 0x76, 0x0c, 0x0a, 0x16, 0xaf, 0x4d, 0xe5, 0x9f, 0x0a, 0x69, 0x07, 0x65, 0xf2, 0x35, + 0xa8, 0xb0, 0x9c, 0x68, 0x25, 0xfa, 0xa3, 0xfd, 0x5d, 0x43, 0x73, 0x9b, 0xf0, 0x13, 0x78, 0x61, + 0x0c, 0xf3, 0xd4, 0x42, 0x2a, 0x32, 0xe8, 0x9b, 0x33, 0xbd, 0x95, 0x60, 0x95, 0x44, 0x99, 0xe4, + 0xb8, 0x24, 0xa2, 0x2b, 0x2e, 0xd4, 0xc2, 0x27, 0x80, 0xb5, 0xac, 0xe1, 0x5e, 0xcc, 0x4e, 0xda, + 0x13, 0x0b, 0xdf, 0x02, 0xca, 0x0d, 0x71, 0x81, 0xfa, 0x07, 0xcb, 0xb5, 0x1b, 0x6d, 0xa3, 0x60, + 0x4e, 0xec, 0xca, 0x99, 0x6b, 0x2d, 0x5a, 0x4f, 0x18, 0x85, 0xfb, 0x70, 0xdd, 0xc1, 0xa3, 0x44, + 0x91, 0xa0, 0xaa, 0xca, 0xf4, 0x9d, 0x76, 0xdc, 0xa5, 0x8b, 0x1c, 0x7f, 0x15, 0xa5, 0x51, 0xfb, + 0x6d, 0x06, 0xb4, 0x2e, 0x09, 0xb6, 0xc1, 0xdf, 0x28, 0x60, 0x8c, 0x45, 0x74, 0x67, 0x13, 0x0d, + 0x96, 0x13, 0xb6, 0xc6, 0xec, 0xab, 0x84, 0xe8, 0x67, 0xba, 0x97, 0x2c, 0xc1, 0x2e, 0xc6, 0x48, + 0xd1, 0x6b, 0x1f, 0x51, 0x1d, 0xa3, 0xc5, 0x53, 0x02, 0x91, 0xb1, 0x65, 0xf7, 0x9f, 0x5a, 0x1a, + 0xc3, 0x40, 0x29, 0x9d, 0xac, 0x36, 0xff, 0x28, 0x85, 0xb8, 0xdd, 0xb6, 0xbc, 0xb6, 0x86, 0xa8, + 0xb2, 0x86, 0x76, 0x0e, 0x03, 0x3a, 0xaa, 0x86, 0x10, 0xa0, 0x77, 0x73, 0x12, 0xc8, 0x5e, 0x67, + 0xf7, 0xb8, 0xfb, 0x2d, 0xd9, 0x7f, 0x5f, 0xcc, 0xed, 0x15, 0x15, 0x76, 0xa7, 0xb5, 0x22, 0x69, + 0xb8, 0xd3, 0xa1, 0xa6, 0x5e, 0x17, 0x6c, 0x29, 0x0e, 0x96, 0x6b, 0x53, 0xca, 0x26, 0x8a, 0x46, + 0xf3, 0x8d, 0xd9, 0x63, 0x3a, 0x18, 0x55, 0x97, 0x49, 0x58, 0x30, 0x26, 0x3b, 0x75, 0x7e, 0x65, + 0xe6, 0x87, 0xa8, 0x8f, 0x7e, 0xa3, 0x64, 0xd1, 0xf0, 0x60, 0x39, 0xf9, 0x3a, 0x18, 0x4d, 0x85, + 0xd7, 0x7e, 0xa4, 0xaa, 0x95, 0x44, 0x34, 0x45, 0x5a, 0x12, 0xc5, 0xd5, 0x3c, 0x20, 0x5e, 0xad, + 0x30, 0x7b, 0xd5, 0x63, 0x28, 0x91, 0x3a, 0x48, 0xfb, 0x9e, 0x7e, 0xfd, 0x86, 0xb3, 0x04, 0x62, + 0x23, 0xa7, 0x62, 0xbc, 0x97, 0xbf, 0xfc, 0x4c, 0x6c, 0x1f, 0x05, 0x5f, 0x43, 0x60, 0xb3, 0x05, + 0xa8, 0xa9, 0x7e, 0xce, 0x37, 0xf3, 0x16, 0x8b, 0x22, 0xf7, 0x0d, 0xd5, 0x78, 0x01, 0x16, 0xd5, + 0xef, 0x41, 0xa0, 0x20, 0x93, 0xe7, 0xd4, 0xf4, 0x42, 0x42, 0x71, 0xf9, 0x0f, 0x93, 0x69, 0xfb, + 0xcd, 0x5b, 0x30, 0x4a, 0x70, 0x57, 0x73, 0x19, 0xd7, 0xa5, 0x9b, 0x35, 0x47, 0xcf, 0x21, 0x59, + 0x70, 0xcf, 0x39, 0xaa, 0x3d, 0x6e, 0xac, 0x05, 0x26, 0x6a, 0x16, 0x6c, 0x43, 0x34, 0xcf, 0x22, + 0x1c, 0x09, 0x39, 0xb2, 0xdd, 0xff, 0x15, 0x09, 0x44, 0x3d, 0x98, 0x3c, 0x8b, 0x82, 0x10, 0x80, + 0x95, 0x66, 0xb2, 0x94, 0x6c, 0xc2, 0xe1, 0x17, 0x80, 0x45, 0xa1, 0xc8, 0xa3, 0xf7, 0xbd, 0xd7, + 0x2f, 0x00, 0x23, 0x20, 0x28, 0xf2, 0xe1, 0x06, 0xf6, 0xa9, 0x1e, 0xcc, 0x5d, 0x6b, 0x76, 0x9c, + 0xac, 0xfb, 0xb2, 0x48, 0x28, 0x23, 0x4b, 0x8b, 0x5f, 0x5f, 0xb2, 0x98, 0xe9, 0x3e, 0x1c, 0x4c, + 0xe3, 0x75, 0x6b, 0x2d, 0xb3, 0xb9, 0xa9, 0x2b, 0x68, 0xb3, 0xbd, 0x3f, 0x15, 0x5c, 0xa3, 0xbd, + 0x4c, 0x79, 0x9f, 0xad, 0x4f, 0x64, 0x27, 0xf0, 0xf8, 0xa5, 0x39, 0x37, 0x1c, 0xb6, 0x25, 0x3a, + 0x46, 0xdf, 0x86, 0x60, 0x08, 0x83, 0x9b, 0x48, 0x48, 0x76, 0xfa, 0x19, 0x9a, 0x7b, 0x2c, 0x7f, + 0xe8, 0xa3, 0x6a, 0x09, 0xf4, 0x1c, 0x0a, 0x4b, 0x8b, 0x4e, 0xdb, 0x66, 0xc5, 0x00, 0x06, 0x9f, + 0xe0, 0x9a, 0x63, 0xc7, 0xf1, 0x26, 0xee, 0xe8, 0x3f, 0x90, 0xb2, 0x35, 0x90, 0xa7, 0x89, 0x32, + 0x7b, 0x4e, 0xbd, 0x79, 0xf1, 0x41, 0xe8, 0xa4, 0xe1, 0xd3, 0x78, 0x88, 0x1c, 0x7d, 0x05, 0xf3, + 0x3f, 0xf4, 0x09, 0xec, 0x25, 0x0a, 0xa0, 0x7f, 0x3a, 0x35, 0x0c, 0x8f, 0x99, 0x30, 0x7f, 0x6b, + 0x07, 0xac, 0xfc, 0x91, 0x56, 0x1c, 0xb6, 0x5f, 0x1d, 0x6e, 0xd6, 0xf6, 0x20, 0x7e, 0xa3, 0x26, + 0x13, 0x13, 0x36, 0x05, 0xb6, 0xfc, 0x04, 0x15, 0xd6, 0x1a, 0x40, 0x56, 0x70, 0x96, 0x9a, 0xac, + 0x30, 0x47, 0x37, 0x80, 0x3c, 0x69, 0xcd, 0xf9, 0x67, 0x15, 0x98, 0xb7, 0xd1, 0x03, 0x77, 0x0e, + 0xa6, 0x13, 0x9c, 0x3a, 0x95, 0x35, 0x3a, 0xb4, 0x17, 0x19, 0x85, 0x21, 0x79, 0x79, 0xf0, 0xd6, + 0x33, 0xbf, 0x46, 0xc1, 0x16, 0xb1, 0x43, 0x89, 0x09, 0xbe, 0xc0, 0xaa, 0x8d, 0x09, 0xcf, 0xbe, + 0xcc, 0x6b, 0x31, 0xf4, 0x1a, 0xb0, 0x3b, 0xa9, 0x68, 0x8f, 0x93, 0xec, 0x26, 0xf3, 0xed, 0x1f, + 0x18, 0xb6, 0x29, 0x03, 0x68, 0x71, 0x88, 0x38, 0xe9, 0x1f, 0xa0, 0xba, 0xd6, 0x91, 0x3b, 0xe2, + 0x91, 0x69, 0x05, 0xfc, 0xfe, 0x0f, 0x6e, 0x0b, 0x76, 0x48, 0xcc, 0x58, 0xe7, 0x84, 0xb1, 0x72, + 0x25, 0x32, 0x6d, 0x0b, 0xf1, 0xd6, 0x9d, 0xe5, 0x8c, 0xee, 0x3e, 0x57, 0xdb, 0x51, 0xda, 0x96, + 0xc4, 0x97, 0xa5, 0xd9, 0x7c, 0x8c, 0x3a, 0x2c, 0xf0, 0x7c, 0x20, 0x30, 0xb8, 0x27, 0x43, 0x1b, + 0x30, 0xd0, 0xcf, 0x5f, 0x6a, 0x87, 0x73, 0x3d, 0x03, 0x07, 0xcd, 0x77, 0x86, 0x99, 0x08, 0x99, + 0xae, 0x28, 0x21, 0x5b, 0xfb, 0xb9, 0xd9, 0xcb, 0xf1, 0xc3, 0x8e, 0xaa, 0x33, 0x79, 0x2c, 0x67, + 0xd3, 0x02, 0x93, 0xc0, 0x44, 0x01, 0xa1, 0xc8, 0xa4, 0xf7, 0x2c, 0x1f, 0x5d, 0xf4, 0xba, 0x21, + 0xf5, 0x13, 0x47, 0xff, 0x86, 0x19, 0x04, 0x7e, 0x8d, 0x58, 0x20, 0xc0, 0xff, 0xa3, 0x44, 0x11, + 0xc1, 0x71, 0x7e, 0xac, 0x83, 0x5f, 0x2f, 0xe9, 0xea, 0xab, 0x58, 0xb7, 0x30, 0x5c, 0x5b, 0x55, + 0x0f, 0xd3, 0xf8, 0xee, 0x2a, 0x7d, 0xfe, 0xc7, 0x75, 0x93, 0x1c, 0x67, 0x52, 0x98, 0x4b, 0xf8, + 0xe5, 0xef, 0xf0, 0xae, 0x74, 0x3a, 0x3a, 0xa2, 0x58, 0x22, 0xf4, 0x7b, 0xe7, 0x22, 0x38, 0x5c, + 0x8e, 0x18, 0x79, 0xdc, 0x48, 0x1a, 0x1d, 0xe5, 0x66, 0x9c, 0x00, 0x31, 0x19, 0xfa, 0xab, 0x93, + 0x1b, 0x36, 0x3f, 0x48, 0x81, 0x7e, 0x15, 0xee, 0xda, 0x9b, 0x08, 0x0c, 0x71, 0xc8, 0xe1, 0xb5, + 0x4d, 0x07, 0x29, 0x3a, 0x62, 0x96, 0x10, 0xb8, 0xeb, 0x7a, 0x61, 0x0f, 0x7d, 0x53, 0x61, 0x7e, + 0xff, 0x79, 0x05, 0xc0, 0x8f, 0x8e, 0x93, 0xa9, 0x44, 0x9d, 0x08, 0x55, 0x22, 0x11, 0x70, 0x7d, + 0xc9, 0x50, 0xef, 0x7b, 0x13, 0x3c, 0xde, 0x89, 0xed, 0x8d, 0xff, 0x19, 0x18, 0x8c, 0x63, 0xc4, + 0xc6, 0x72, 0x4c, 0x54, 0x23, 0x2f, 0xdc, 0x6f, 0x9c, 0xa7, 0xac, 0x29, 0x2b, 0xa3, 0x16, 0x63, + 0x10, 0xc9, 0xe0, 0x1e, 0xb0, 0xc6, 0x87, 0xdd, 0xca, 0xf3, 0x8e, 0xc3, 0xbd, 0x78, 0x6b, 0x71, + 0x92, 0x0f, 0xf6, 0x70, 0xcf, 0x74, 0xde, 0xf5, 0x0f, 0x3f, 0x9d, 0x89, 0x52, 0xa3, 0xf7, 0xc4, + 0x99, 0x9c, 0xe6, 0xf2, 0x50, 0xb3, 0xd8, 0x35, 0x71, 0xb3, 0x9f, 0xb1, 0x2b, 0x5e, 0xcc, 0x09, + 0xaf, 0x50, 0x6e, 0xd9, 0x86, 0xba, 0x8b, 0xe4, 0xb5, 0x1c, 0xbe, 0x29, 0x43, 0xf1, 0x4d, 0x73, + 0x0e, 0xc4, 0x6a, 0x8d, 0x6d, 0x76, 0x25, 0xf6, 0x69, 0x9e, 0xa6, 0xe3, 0xf6, 0x3d, 0x5c, 0x6c, + 0x2e, 0xf9, 0x0b, 0x0e, 0x12, 0xc8, 0x49, 0xfd, 0x6b, 0x5a, 0xfc, 0x1b, 0x36, 0x19, 0x2c, 0x0a, + 0xb9, 0x27, 0x55, 0xa4, 0x26, 0xf6, 0x05, 0x2f, 0x9b, 0xef, 0x05, 0x89, 0x22, 0x04, 0xf1, 0xbc, + 0x59, 0x6e, 0x2c, 0x13, 0xb7, 0x31, 0x8a, 0x80, 0xdf, 0xe6, 0x2d, 0xa5, 0x15, 0x4e, 0x9e, 0x08, + 0xb6, 0xb3, 0x50, 0xa1, 0x04, 0x1c, 0x8c, 0xc6, 0xaf, 0x32, 0x5d, 0xcf, 0x49, 0xe4, 0x96, 0x69, + 0x94, 0x7b, 0xdb, 0x18, 0x3c, 0x65, 0x70, 0xc7, 0xda, 0x23, 0x92, 0x0a, 0x99, 0x86, 0xa0, 0xdd, + 0x8c, 0xe5, 0x0a, 0xde, 0x3a, 0x98, 0x3f, 0x3f, 0xa1, 0xd1, 0xea, 0x05, 0x92, 0xb0, 0xad, 0x7b, + 0x33, 0x8a, 0x71, 0x20, 0xf3, 0x8f, 0xd7, 0x70, 0x95, 0x62, 0xc6, 0x7e, 0xf8, 0xa3, 0xa0, 0x31, + 0x1a, 0x34, 0x8b, 0x0f, 0xad, 0x93, 0x2c, 0x3d, 0x74, 0x94, 0x08, 0x67, 0x8d, 0x14, 0x54, 0x76, + 0x7d, 0xc4, 0x19, 0xd9, 0x4d, 0x81, 0xe8, 0x5d, 0x56, 0x69, 0xd7, 0x58, 0x4e, 0x0b, 0xf2, 0x86, + 0x7a, 0xed, 0x9a, 0x5e, 0x13, 0x48, 0x67, 0xea, 0x7d, 0x94, 0xa2, 0xa1, 0x1c, 0x78, 0xc3, 0x3a, + 0xe6, 0x11, 0xc0, 0xcc, 0xee, 0x78, 0x3a, 0xc5, 0x86, 0xbd, 0xde, 0xb1, 0x6b, 0xac, 0x02, 0xc0, + 0x8d, 0xc9, 0x6c, 0x81, 0x06, 0xb1, 0x0e, 0x83, 0x73, 0xd8, 0x50, 0xa1, 0x0e, 0x31, 0xa0, 0xe5, + 0x9d, 0xb9, 0x1e, 0x03, 0xf3, 0x30, 0x83, 0x16, 0x54, 0xa6, 0x98, 0x28, 0xc8, 0xe0, 0xd5, 0x7d, + 0x84, 0x4f, 0x56, 0x9c, 0xbd, 0xb2, 0xba, 0x98, 0xc1, 0x3c, 0xc9, 0x84, 0x60, 0x23, 0xd9, 0x0f, + 0x85, 0x14, 0xdf, 0x90, 0xd1, 0x48, 0xd9, 0xf7, 0x3c, 0x34, 0x11, 0x3d, 0x6c, 0x72, 0x52, 0xb5, + 0x98, 0xcc, 0x7c, 0x4f, 0x0e, 0x93, 0x64, 0x17, 0x63, 0x5c, 0x09, 0xb3, 0x40, 0x90, 0xbc, 0x5e, + 0x3b, 0xe0, 0x8c, 0xc5, 0x15, 0xc6, 0xe6, 0xb3, 0x13, 0x72, 0xdb, 0x7d, 0xc9, 0xb9, 0x01, 0x44, + 0xf6, 0x79, 0x3b, 0xc1, 0xe1, 0x42, 0xd2, 0x4e, 0x65, 0xa8, 0xce, 0x92, 0x8c, 0x5b, 0x2a, 0x09, + 0xaa, 0x8a, 0x3c, 0x1d, 0xff, 0x68, 0x1b, 0x19, 0xd5, 0x7b, 0x87, 0x56, 0x28, 0xda, 0x53, 0xe5, + 0x50, 0xa6, 0xc1, 0xa4, 0xa9, 0xc2, 0xf8, 0xb8, 0x0a, 0xf3, 0x7a, 0x25, 0x24, 0x62, 0xca, 0x8a, + 0xa3, 0x57, 0x44, 0xd9, 0x0a, 0x1b, 0x87, 0x31, 0x3f, 0x86, 0x15, 0xd6, 0x09, 0xef, 0xfd, 0xd7, + 0xeb, 0x72, 0xbe, 0xf7, 0xd9, 0x67, 0xee, 0xc1, 0xab, 0xda, 0x9e, 0x3e, 0xda, 0x6d, 0x1e, 0x08, + 0xa3, 0x36, 0xee, 0x30, 0x5f, 0xff, 0x28, 0xe2, 0xa2, 0xeb, 0x29, 0x29, 0x3b, 0x01, 0x83, 0xa9, + 0xec, 0x67, 0xe7, 0x76, 0x8f, 0xcf, 0xe0, 0xc4, 0x3a, 0x34, 0x17, 0xa4, 0xb1, 0x7a, 0xda, 0xa0, + 0x22, 0xa1, 0x53, 0x6e, 0xdd, 0x2d, 0x7d, 0xdb, 0x10, 0x3a, 0x10, 0x69, 0x9c, 0x15, 0x02, 0x3c, + 0x9e, 0x25, 0xd4, 0xb2, 0x85, 0x07, 0x9b, 0x50, 0xa4, 0x61, 0x52, 0x15, 0xb0, 0x62, 0x08, 0x37, + 0xf8, 0x1f, 0xeb, 0x2e, 0x43, 0x64, 0x9f, 0x45, 0x15, 0xab, 0xba, 0xe2, 0xcc, 0x8c, 0x78, 0x13, + 0x35, 0x0c, 0xbc, 0x77, 0x43, 0x8f, 0x3d, 0x9b, 0x5f, 0x8f, 0x56, 0xb6, 0x68, 0x7e, 0xd0, 0x00, + 0x4f, 0x7d, 0x1b, 0xa5, 0x8d, 0x3d, 0x00, 0xd7, 0x85, 0x69, 0x0d, 0x0e, 0x6d, 0x4d, 0x7a, 0xa3, + 0x20, 0x51, 0x89, 0xb9, 0x8a, 0xc5, 0x1f, 0xaa, 0x87, 0x9a, 0x36, 0xa4, 0x65, 0xfc, 0xe7, 0x41, + 0xa1, 0x1f, 0xdb, 0xef, 0xbd, 0x0f, 0xc8, 0xa8, 0xed, 0xba, 0x1f, 0x03, 0x95, 0x9a, 0x7b, 0xb9, + 0x2b, 0xb6, 0xe9, 0x3c, 0x92, 0x75, 0x26, 0x6f, 0xd0, 0xaf, 0x67, 0x65, 0xf6, 0xb7, 0x51, 0x5d, + 0x30, 0x87, 0xa3, 0x9d, 0x4c, 0x3b, 0x87, 0x5d, 0xfd, 0x2e, 0xed, 0x5a, 0x81, 0x06, 0xd3, 0xab, + 0xd6, 0x6d, 0xcc, 0xcd, 0x18, 0x3d, 0xab, 0x35, 0x22, 0x7d, 0xed, 0xb3, 0xf4, 0x3f, 0xfc, 0xa0, + 0x41, 0xd5, 0xf1, 0xfe, 0x01, 0x35, 0x60, 0x3a, 0x3b, 0x84, 0x15, 0x01, 0xc3, 0x81, 0x89, 0xeb, + 0x3f, 0xdb, 0xfe, 0x1c, 0xda, 0xe0, 0xcc, 0x8c, 0xed, 0x89, 0xd9, 0x9e, 0x9b, 0xdd, 0xd9, 0xf9, + 0xb0, 0x52, 0x92, 0x94, 0x0a, 0xc3, 0xe9, 0x88, 0x56, 0xca, 0x7a, 0x74, 0xd6, 0xdd, 0x97, 0xb3, + 0x2a, 0x44, 0x3f, 0x32, 0xbc, 0x1c, 0x68, 0x67, 0x2a, 0x24, 0x02, 0x47, 0x11, 0xcd, 0x30, 0x04, + 0xbd, 0x1e, 0xa6, 0xbd, 0x16, 0x75, 0x14, 0xb6, 0x83, 0x46, 0xa6, 0x56, 0x2a, 0x54, 0xca, 0x3d, + 0x6f, 0x99, 0xd9, 0xb3, 0x31, 0xd4, 0x31, 0xc7, 0x7d, 0xfe, 0xe1, 0x55, 0x69, 0xc5, 0xd6, 0x2b, + 0x51, 0x48, 0xae, 0x7f, 0x19, 0x34, 0xe6, 0x8c, 0x0c, 0x2d, 0xa4, 0x18, 0x09, 0x20, 0xb7, 0xa9, + 0xc7, 0x54, 0x94, 0x7a, 0xd1, 0x0a, 0x56, 0x66, 0x71, 0x60, 0xe0, 0x7f, 0x2f, 0x2b, 0xb4, 0xd2, + 0x3e, 0xa6, 0x97, 0x60, 0x25, 0x8e, 0x5f, 0x41, 0x3d, 0xa7, 0x94, 0x5f, 0x7e, 0xc1, 0x66, 0x6d, + 0x14, 0xae, 0xff, 0x96, 0x70, 0x5c, 0x07, 0xc7, 0x05, 0xb5, 0xaf, 0x0d, 0xe4, 0xf5, 0xff, 0x8b, + 0xf7, 0x06, 0x50, 0x2c, 0xfa, 0xad, 0x27, 0x04, 0xd9, 0x7b, 0x3a, 0xb7, 0x1c, 0x98, 0xd6, 0x09, + 0x9c, 0x95, 0x9b, 0x69, 0x53, 0x9d, 0x36, 0xf6, 0x3a, 0x59, 0xcf, 0x64, 0xc9, 0xa9, 0x04, 0xa8, + 0xd5, 0x91, 0xc4, 0x4c, 0xac, 0x21, 0xdc, 0xa4, 0xac, 0xf3, 0x56, 0x46, 0x77, 0x92, 0x1c, 0x6f, + 0x96, 0x5a, 0xc6, 0x04, 0xf1, 0x4f, 0x4d, 0xd3, 0xd9, 0x06, 0x07, 0xb7, 0x26, 0x99, 0x55, 0xe5, + 0x77, 0x84, 0x3b, 0xc1, 0xb1, 0x15, 0x83, 0x91, 0x36, 0x2e, 0x4c, 0x46, 0x5c, 0x26, 0xa5, 0x92, + 0x91, 0x62, 0x1b, 0xcc, 0x49, 0xa2, 0xb2, 0xd0, 0x04, 0xc9, 0x33, 0xb2, 0xb0, 0x7c, 0x20, 0xa2, + 0x86, 0xb3, 0x69, 0x57, 0xf2, 0xa2, 0x5e, 0x08, 0x7d, 0x8a, 0x27, 0xbb, 0xd8, 0x0c, 0xdc, 0xd9, + 0x78, 0x9d, 0xc1, 0xe4, 0x7d, 0xa9, 0x66, 0x84, 0x0a, 0xff, 0xd3, 0x59, 0x86, 0xe1, 0xa4, 0xcb, + 0xab, 0xdd, 0x03, 0x8b, 0x8e, 0xda, 0x3c, 0xa9, 0x28, 0x2a, 0xec, 0xd5, 0xb6, 0x66, 0xf9, 0xab, + 0x75, 0x91, 0xab, 0xd2, 0x6e, 0x86, 0xd3, 0x9f, 0x25, 0xdd, 0xe7, 0xbd, 0x05, 0xbf, 0xb9, 0x9c, + 0x12, 0x9f, 0xcb, 0xbe, 0x18, 0x09, 0x2d, 0x80, 0x46, 0x2a, 0xee, 0xcd, 0x23, 0x26, 0x9a, 0x8a, + 0x2a, 0xf3, 0x60, 0x88, 0xed, 0x72, 0x98, 0xaf, 0x8e, 0xf8, 0x1e, 0xcc, 0xe1, 0xab, 0x28, 0x4a, + 0x56, 0x94, 0xde, 0xbd, 0x7e, 0x49, 0x31, 0x32, 0xaa, 0x11, 0x5a, 0x66, 0xd4, 0xf1, 0x10, 0x57, + 0x2d, 0x43, 0x24, 0xb7, 0x11, 0x07, 0xad, 0x76, 0xf3, 0x67, 0x2c, 0x8e, 0xbb, 0xa5, 0x32, 0x67, + 0x1d, 0x3a, 0x71, 0x09, 0x6c, 0xd3, 0x39, 0x22, 0xb5, 0xaf, 0x07, 0xea, 0xa6, 0x99, 0xfe, 0xdc, + 0xeb, 0x43, 0x44, 0x2e, 0xc2, 0xb3, 0xa4, 0x68, 0xfc, 0xd1, 0x70, 0x09, 0x28, 0x9c, 0xde, 0x57, + 0x99, 0xe2, 0x64, 0x56, 0xde, 0x1f, 0x93, 0xd7, 0x12, 0x33, 0xba, 0xcd, 0xa8, 0x58, 0x68, 0x63, + 0xf9, 0xeb, 0xde, 0x05, 0x24, 0x64, 0xdb, 0x34, 0xd5, 0xe0, 0x95, 0xef, 0xb2, 0xb0, 0x4a, 0x03, + 0x09, 0xd5, 0xfb, 0x5c, 0x92, 0xdf, 0xca, 0x22, 0x47, 0x39, 0xfa, 0xc3, 0x14, 0xb8, 0x47, 0xfb, + 0x3d, 0x63, 0x4a, 0x6d, 0xbf, 0xaa, 0x4e, 0xa0, 0xc7, 0x3d, 0x40, 0xd1, 0x23, 0xda, 0xd9, 0x25, + 0xdc, 0x83, 0x86, 0x22, 0xeb, 0x43, 0x81, 0xaf, 0x70, 0xb7, 0xd0, 0x96, 0xef, 0x90, 0xff, 0x90, + 0x8e, 0xcd, 0x55, 0x38, 0x4f, 0x7d, 0xa2, 0xa1, 0x24, 0x1b, 0x97, 0xea, 0x07, 0x7c, 0x1f, 0x44, + 0x21, 0xc6, 0xb0, 0x08, 0xf8, 0x64, 0x06, 0x24, 0x3a, 0xc0, 0x8f, 0x11, 0x1a, 0x9b, 0x3f, 0x3d, + 0xc7, 0x9a, 0xed, 0xcb, 0x65, 0xa3, 0x5c, 0x38, 0x76, 0xf1, 0x5c, 0x38, 0xdf, 0xea, 0x79, 0xdc, + 0xa4, 0x83, 0x70, 0xa5, 0x5d, 0x80, 0x68, 0x5b, 0x38, 0x9c, 0xa3, 0xdd, 0xb0, 0x05, 0x05, 0x76, + 0x41, 0x92, 0xca, 0x0f, 0x3f, 0xf9, 0xe8, 0x96, 0x30, 0x04, 0x07, 0xef, 0x23, 0xc1, 0xc6, 0xaa, + 0x3f, 0xb4, 0xff, 0x0b, 0xb7, 0x11, 0x7f, 0xff, 0xa2, 0xe1, 0xdc, 0x03, 0xb2, 0xf9, 0x80, 0x2b, + 0x61, 0xda, 0xa2, 0x28, 0x1d, 0xd4, 0x85, 0x70, 0x81, 0x7b, 0x07, 0xb1, 0xd3, 0x29, 0xb4, 0x7c, + 0x53, 0x02, 0x07, 0x9c, 0x3c, 0xdc, 0xf1, 0x01, 0xdd, 0x33, 0x7e, 0xdc, 0x8b, 0xbd, 0x09, 0x78, + 0x4c, 0xca, 0x32, 0xc6, 0x32, 0x32, 0x38, 0x71, 0x72, 0x06, 0xf4, 0xce, 0x71, 0x00, 0x3a, 0x6f, + 0xda, 0x85, 0xc8, 0x2d, 0x0f, 0x51, 0x85, 0x9f, 0xae, 0x75, 0xf6, 0xbe, 0x68, 0x7f, 0x0d, 0x7a, + 0x39, 0x35, 0xb8, 0x51, 0xd3, 0xef, 0x16, 0x0f, 0x07, 0x1e, 0x17, 0x75, 0x3c, 0xa3, 0x0c, 0xb0, + 0xea, 0x24, 0xaf, 0xd6, 0x87, 0xc8, 0x8e, 0x1e, 0x98, 0x0f, 0x34, 0x8f, 0xe7, 0x9c, 0x65, 0x65, + 0xb7, 0x8b, 0xe0, 0x39, 0x40, 0xd1, 0xc8, 0xdc, 0x12, 0x0a, 0x4d, 0xc4, 0xe2, 0xf6, 0xf9, 0xcc, + 0xbd, 0x24, 0x65, 0x34, 0x39, 0xfd, 0x23, 0x43, 0xc3, 0xdc, 0x65, 0x99, 0xdf, 0xc7, 0x09, 0x5a, + 0x36, 0xa0, 0x0d, 0xe3, 0x10, 0x19, 0xa4, 0xf6, 0x9c, 0x80, 0xbc, 0x30, 0xe3, 0x9a, 0x85, 0xeb, + 0x78, 0x2b, 0x1b, 0x13, 0x06, 0x97, 0x7d, 0xe8, 0xa8, 0xa0, 0x4b, 0x39, 0x42, 0xc7, 0x73, 0xa5, + 0xd0, 0x4c, 0xc5, 0x55, 0xd2, 0x09, 0x91, 0x29, 0xf3, 0x7e, 0x06, 0x72, 0xb4, 0x27, 0xca, 0x57, + 0x37, 0x9d, 0xcc, 0x32, 0x41, 0xe4, 0x6e, 0xda, 0x9c, 0xa2, 0xe1, 0x3d, 0x02, 0xc3, 0x61, 0x63, + 0x7e, 0xba, 0x32, 0x6f, 0xc9, 0x85, 0x81, 0xf1, 0xb6, 0x37, 0xba, 0x45, 0xc0, 0x75, 0x22, 0x23, + 0xda, 0xab, 0x3b, 0xc6, 0xcd, 0xa1, 0x74, 0xc3, 0x30, 0x4a, 0x12, 0xa3, 0xf4, 0x71, 0x80, 0x4f, + 0x82, 0x0e, 0x3e, 0xef, 0x0c, 0x1d, 0x9a, 0x13, 0x54, 0x5c, 0x27, 0xf5, 0x35, 0x20, 0x6b, 0xb3, + 0x5c, 0x5c, 0xeb, 0x30, 0x1a, 0x44, 0x38, 0x77, 0x56, 0x84, 0x7a, 0xbc, 0x38, 0xc5, 0x15, 0x3e, + 0xdb, 0x92, 0x79, 0x87, 0xe7, 0x78, 0x9f, 0x80, 0xaa, 0x83, 0x2b, 0xc5, 0x1a, 0xdb, 0x91, 0xc9, + 0xef, 0xe5, 0x7a, 0x4d, 0xbb, 0x6e, 0xb3, 0xdc, 0xdc, 0x44, 0x62, 0xbc, 0xe6, 0xf1, 0xad, 0x28, + 0xfd, 0xe4, 0xba, 0xf6, 0x05, 0x1c, 0x77, 0x2d, 0x61, 0x96, 0xde, 0xcd, 0x44, 0x0f, 0x10, 0x91, + 0x61, 0x93, 0x3a, 0x4f, 0x9d, 0x7f, 0xf6, 0x2a, 0x43, 0x57, 0x21, 0x4a, 0xdf, 0xca, 0xcf, 0x5d, + 0xaf, 0x41, 0x53, 0xa7, 0x77, 0x4c, 0xf3, 0x4f, 0xda, 0x48, 0x20, 0x5a, 0x0b, 0x9f, 0xaa, 0x23, + 0x4d, 0x12, 0xec, 0xac, 0xed, 0xbf, 0x3d, 0xcc, 0x72, 0x57, 0x36, 0xc5, 0x97, 0x4b, 0x72, 0xc6, + 0x03, 0x22, 0xea, 0x43, 0x12, 0x50, 0x8e, 0x58, 0xb9, 0x1a, 0x6e, 0x5a, 0x1e, 0x3a, 0x2f, 0xa1, + 0x48, 0x9e, 0xfb, 0x96, 0x5e, 0xa0, 0x9e, 0x80, 0xcc, 0xe4, 0x8a, 0x63, 0x7f, 0x54, 0x6a, 0x44, + 0x77, 0xc2, 0x6b, 0x93, 0x73, 0xa0, 0x2e, 0x4b, 0x57, 0x16, 0x3a, 0x0a, 0xd2, 0x33, 0x3e, 0x42, + 0x7c, 0x3a, 0x79, 0x09, 0x3d, 0xae, 0xfd, 0x1e, 0x14, 0x56, 0x25, 0x7c, 0xb9, 0x59, 0x37, 0x8d, + 0x89, 0x36, 0xdd, 0x25, 0xb4, 0x64, 0x35, 0x2b, 0x6e, 0x09, 0x8c, 0x27, 0x3f, 0x0b, 0x54, 0xe3, + 0x4a, 0xf2, 0x7d, 0xca, 0xc0, 0xe0, 0x1a, 0x9e, 0x0b, 0x15, 0xb6, 0x75, 0x0e, 0x56, 0xb0, 0x58, + 0x28, 0x90, 0x87, 0x16, 0xcc, 0xc7, 0xfd, 0x3e, 0x4b, 0x56, 0x8d, 0xfb, 0x95, 0x67, 0x5b, 0x0e, + 0xa8, 0xce, 0x47, 0xbc, 0x01, 0x0b, 0x05, 0xae, 0x9e, 0xea, 0x69, 0x2f, 0x68, 0x57, 0x3c, 0x09, + 0xf1, 0x95, 0x02, 0xbd, 0x38, 0x80, 0x58, 0x72, 0x09, 0x93, 0xc0, 0xe0, 0x32, 0xba, 0x58, 0xd8, + 0x17, 0xf1, 0xb1, 0xa6, 0x90, 0x27, 0x75, 0xf1, 0x0a, 0x31, 0x68, 0x18, 0x31, 0x09, 0xa7, 0x41, + 0x46, 0xaf, 0xf8, 0xf7, 0x2e, 0x3a, 0x7e, 0xa6, 0x6a, 0x44, 0x8d, 0xf9, 0xd2, 0xbe, 0x60, 0xe9, + 0x5c, 0xcb, 0x7b, 0x60, 0xbf, 0xc8, 0xe5, 0x6e, 0xe8, 0x00, 0x08, 0x7b, 0x4a, 0xe3, 0xf2, 0x2b, + 0xf0, 0x09, 0xce, 0x63, 0x63, 0x08, 0x42, 0x63, 0x1c, 0x5c, 0x14, 0x0c, 0x86, 0xf5, 0x63, 0x70, + 0xfb, 0xac, 0x0d, 0x1e, 0x4e, 0xe5, 0x34, 0x6f, 0x8a, 0xe3, 0xd1, 0xd5, 0x08, 0x89, 0xe2, 0x76, + 0x43, 0xcf, 0x8b, 0x4a, 0x6d, 0x9c, 0x7d, 0x08, 0xf1, 0xc2, 0x71, 0x28, 0x58, 0x92, 0x0e, 0x69, + 0xcf, 0xba, 0x1a, 0x6a, 0xb2, 0x44, 0x9b, 0x10, 0xf5, 0x3b, 0x00, 0x2f, 0x1e, 0xd1, 0x7e, 0x09, + 0x96, 0x47, 0x3c, 0x3f, 0x91, 0xc3, 0x04, 0xab, 0xfe, 0xf0, 0x7c, 0x70, 0x0e, 0xe6, 0x94, 0x3d, + 0x57, 0xcc, 0x7f, 0xb0, 0xb1, 0x31, 0xf1, 0xdd, 0x13, 0x3b, 0xa0, 0xc1, 0x62, 0x2c, 0x0d, 0x0f, + 0x40, 0x95, 0x26, 0x82, 0x2d, 0x4e, 0xd4, 0x9d, 0x71, 0x2a, 0x67, 0x4a, 0x83, 0xe3, 0x91, 0x86, + 0x37, 0x49, 0x79, 0x00, 0x8e, 0x0b, 0xd4, 0xd4, 0xd4, 0x6c, 0x96, 0x3a, 0x32, 0xcb, 0x65, 0xae, + 0x0b, 0x95, 0x11, 0xa3, 0xbc, 0x0b, 0x08, 0xb2, 0x8e, 0xa2, 0xeb, 0x6c, 0x7d, 0x81, 0x0c, 0x6b, + 0xed, 0x44, 0x08, 0x50, 0x43, 0x2d, 0xa8, 0x3b, 0x85, 0xea, 0x92, 0x54, 0x5d, 0x04, 0x4b, 0x49, + 0x11, 0x03, 0xd5, 0xd2, 0x2a, 0x42, 0x6b, 0x0b, 0x14, 0x57, 0x9a, 0x07, 0x8b, 0x1b, 0x56, 0x67, + 0x64, 0x3c, 0x60, 0xcf, 0xdc, 0xa6, 0x7b, 0x00, 0x99, 0xe5, 0xc1, 0xfe, 0xba, 0x8b, 0x34, 0x28, + 0xf0, 0xab, 0x06, 0x69, 0x82, 0xe6, 0x2d, 0x00, 0x4a, 0x9b, 0x49, 0xec, 0x88, 0x4c, 0xad, 0xf6, + 0xef, 0x43, 0xa6, 0xa1, 0x81, 0xe3, 0x27, 0x3b, 0xa1, 0x4b, 0x92, 0xb3, 0xea, 0x41, 0x3b, 0x17, + 0x63, 0x21, 0x3b, 0x42, 0x9f, 0xc4, 0xf8, 0xa3, 0xe7, 0xd2, 0x36, 0xe8, 0x65, 0x95, 0xf1, 0xc9, + 0xce, 0x81, 0xcd, 0xad, 0xf3, 0x79, 0x4c, 0xe2, 0xe2, 0xb7, 0x04, 0xad, 0xa4, 0x48, 0x6f, 0x64, + 0x98, 0xce, 0xca, 0x71, 0xa8, 0xe8, 0xed, 0x8e, 0x5c, 0x4a, 0x8b, 0xdf, 0xcb, 0xcf, 0x5b, 0x7e, + 0xca, 0x0c, 0xc4, 0x8f, 0x65, 0x08, 0x58, 0x1a, 0x11, 0xa8, 0x52, 0x16, 0x99, 0x8a, 0x3a, 0xe9, + 0xf1, 0x58, 0x1f, 0xb1, 0xcc, 0x74, 0xae, 0xe5, 0xca, 0x7d, 0x3b, 0xbb, 0x2c, 0x06, 0x33, 0xbf, + 0xc0, 0xc1, 0x9a, 0xd9, 0xde, 0x24, 0x76, 0xd8, 0xee, 0xc7, 0xc6, 0xc1, 0xeb, 0x8c, 0x37, 0x2f, + 0x70, 0x37, 0xd8, 0xa8, 0x9d, 0x7d, 0xe4, 0x81, 0x66, 0xab, 0xb3, 0x69, 0xcd, 0xb9, 0x32, 0x42, + 0x3a, 0x3a, 0x14, 0x33, 0x4b, 0xdc, 0x90, 0xfd, 0x70, 0xe0, 0xc9, 0x5d, 0x00, 0xf8, 0x57, 0x39, + 0x2a, 0x96, 0x43, 0xe6, 0x1f, 0x0e, 0xb2, 0xa2, 0x9e, 0xc6, 0xc1, 0xf6, 0x12, 0x49, 0xff, 0x57, + 0xcb, 0xa7, 0x93, 0xae, 0x5b, 0xf4, 0x48, 0x4d, 0x8c, 0x43, 0x03, 0x39, 0x8d, 0xa0, 0x13, 0xf5, + 0x87, 0x53, 0x36, 0x11, 0xd8, 0xa0, 0x5f, 0x72, 0xa1, 0x0e, 0x40, 0xf6, 0xfb, 0x77, 0x77, 0x7e, + 0x07, 0x28, 0xf5, 0x16, 0x5b, 0xa2, 0x45, 0x6f, 0xb7, 0x28, 0x7b, 0x26, 0x8a, 0x8c, 0x92, 0xb9, + 0x58, 0x2f, 0xc0, 0xc4, 0x6f, 0x79, 0xdc, 0x96, 0x4c, 0x0e, 0xb1, 0x40, 0x3f, 0x51, 0x2e, 0xc4, + 0xa6, 0x85, 0x69, 0x8c, 0xae, 0xcc, 0x50, 0x45, 0x79, 0x5b, 0xcb, 0x4b, 0x7f, 0xd1, 0xb3, 0xa7, + 0x45, 0xa6, 0x89, 0xbe, 0x5f, 0x70, 0x0e, 0x3c, 0xab, 0x07, 0xcd, 0x75, 0x88, 0xde, 0xd8, 0x3c, + 0x98, 0xe9, 0x37, 0x12, 0x7c, 0xc9, 0xd1, 0x07, 0xdb, 0x51, 0xa6, 0x74, 0x57, 0x18, 0x87, 0x7f, + 0xc1, 0x84, 0xe8, 0xb4, 0x08, 0xf1, 0x85, 0x1e, 0xb5, 0x4c, 0x11, 0x95, 0x4d, 0x49, 0x95, 0xe5, + 0xbf, 0x90, 0xc3, 0xef, 0x26, 0xc7, 0x42, 0xa7, 0x8b, 0xc1, 0x9e, 0xfb, 0xe2, 0x8c, 0x98, 0x54, + 0x73, 0xd4, 0x94, 0x60, 0xc3, 0xb6, 0x17, 0x3f, 0x60, 0xaa, 0xe8, 0x2d, 0x56, 0x26, 0xa3, 0xd3, + 0xae, 0xf8, 0x42, 0x8f, 0xaa, 0x1d, 0xe2, 0x53, 0x3a, 0x0c, 0x42, 0x26, 0xc1, 0xeb, 0x1b, 0xb2, + 0xd1, 0x3b, 0xb6, 0xf4, 0x36, 0xdc, 0xa3, 0x5b, 0xe5, 0xfe, 0xa5, 0xbf, 0x2c, 0x2c, 0x19, 0x0e, + 0xdf, 0x15, 0xca, 0xa2, 0x99, 0x12, 0x85, 0xec, 0x96, 0xfc, 0xa7, 0x5d, 0x88, 0xbc, 0x42, 0x37, + 0x77, 0x07, 0x59, 0x15, 0x21, 0x99, 0xc8, 0x61, 0x4b, 0x4a, 0x00, 0x6c, 0xd7, 0xb2, 0xca, 0x6b, + 0x72, 0x56, 0x21, 0xab, 0xf0, 0x9c, 0x8d, 0xa2, 0x8d, 0x96, 0x56, 0x64, 0x76, 0x97, 0x83, 0x5e, + 0x95, 0xe6, 0xaa, 0x10, 0xa4, 0xb6, 0x0f, 0x4b, 0xd8, 0xb9, 0xf2, 0x4d, 0x11, 0xc4, 0x30, 0xf7, + 0x33, 0xfe, 0x8d, 0xf1, 0x87, 0x29, 0xd6, 0xa2, 0xbe, 0xa0, 0x45, 0xdd, 0x28, 0xc2, 0x25, 0x33, + 0x0e, 0xcb, 0xd4, 0x69, 0xb2, 0xbb, 0xfb, 0x62, 0xf0, 0x7b, 0x28, 0x5c, 0xcc, 0x5c, 0x2c, 0xa6, + 0x96, 0x2e, 0x68, 0x91, 0x78, 0xf6, 0x56, 0x8b, 0x0a, 0x61, 0xe8, 0x2e, 0xec, 0xa0, 0x9c, 0x29, + 0xfd, 0x50, 0x42, 0x16, 0xff, 0xff, 0xbd, 0x57, 0x82, 0x98, 0x00, 0x36, 0xbd, 0x33, 0x95, 0xb2, + 0x08, 0x3b, 0x77, 0xc8, 0xf3, 0x6f, 0x19, 0xb8, 0x8a, 0x09, 0xbe, 0x10, 0xfa, 0x80, 0xdb, 0xb0, + 0xa1, 0xed, 0x8e, 0x5b, 0x47, 0x31, 0x35, 0x52, 0x81, 0x16, 0xc1, 0x4c, 0x33, 0x2d, 0x10, 0x29, + 0x04, 0x6c, 0xcd, 0x73, 0x18, 0x49, 0x25, 0x54, 0x7e, 0x99, 0x40, 0xcf, 0xa2, 0x7a, 0xc1, 0xb4, + 0x9d, 0x0a, 0x71, 0x57, 0x88, 0xdc, 0x96, 0xa9, 0x11, 0x41, 0xd5, 0x4a, 0xb0, 0xb5, 0x3f, 0x7c, + 0x82, 0x9f, 0x51, 0xa9, 0x12, 0x6f, 0x33, 0xfb, 0x8f, 0x12, 0x91, 0x15, 0xd1, 0x7b, 0xd3, 0x11, + 0x79, 0xf9, 0xc1, 0x9d, 0x53, 0x80, 0x7a, 0x09, 0xfe, 0x46, 0xb7, 0xc9, 0x2c, 0x13, 0xc3, 0xca, + 0x63, 0xc1, 0xb8, 0x0f, 0xd2, 0xa3, 0x10, 0x9d, 0x39, 0x4b, 0xd4, 0x99, 0xfe, 0x9a, 0xd3, 0xab, + 0xb5, 0xcc, 0x6e, 0x98, 0x5e, 0x02, 0x2d, 0x70, 0xdd, 0xdf, 0x56, 0x55, 0x4c, 0xda, 0x0b, 0x6d, + 0x40, 0xb1, 0x54, 0xa5, 0x8f, 0x9d, 0xf4, 0xde, 0xa4, 0xd0, 0x82, 0xff, 0x9d, 0xe6, 0x69, 0x81, + 0xa3, 0xb4, 0xe9, 0x35, 0xc0, 0x85, 0x82, 0x62, 0x7b, 0xe7, 0xe9, 0x04, 0x32, 0x5e, 0xc1, 0xf8, + 0x8e, 0x48, 0x40, 0x4e, 0x83, 0x6a, 0x57, 0x36, 0xf9, 0xfe, 0x19, 0x29, 0xf5, 0x0c, 0x7b, 0x27, + 0x34, 0xbc, 0x28, 0x06, 0x2e, 0x48, 0xb9, 0xac, 0xc7, 0x8d, 0x8d, 0xb5, 0x6b, 0x52, 0x05, 0x99, + 0xce, 0x53, 0x05, 0x1e, 0x53, 0xb6, 0x41, 0x8a, 0xdd, 0xa7, 0x67, 0xff, 0x4c, 0xdf, 0x68, 0x57, + 0xf2, 0xab, 0x3e, 0xac, 0x23, 0x7f, 0x3e, 0x82, 0x08, 0xc9, 0x88, 0xe9, 0xf4, 0x2b, 0xcf, 0x38, + 0x41, 0xa1, 0xd2, 0x6a, 0x99, 0xdd, 0x7b, 0x65, 0xa5, 0xe4, 0x3a, 0xac, 0xca, 0x4c, 0x6e, 0xdc, + 0x37, 0x9b, 0x13, 0xc0, 0x7f, 0x03, 0xa7, 0xbf, 0x34, 0x5e, 0x29, 0x01, 0xb9, 0xd1, 0x97, 0x04, + 0xcc, 0xe0, 0x8c, 0x7f, 0x0f, 0xe8, 0xb3, 0x30, 0x1a, 0x2f, 0x85, 0x4c, 0x13, 0xc3, 0x82, 0xff, + 0xd4, 0x2f, 0x30, 0x65, 0x1c, 0x22, 0xb1, 0x98, 0xa4, 0xe7, 0xf1, 0x74, 0xb8, 0x63, 0xc1, 0x25, + 0x51, 0x02, 0xdc, 0x84, 0x46, 0x5f, 0xe9, 0x63, 0x77, 0xec, 0xaa, 0x5f, 0x12, 0xb3, 0x83, 0xba, + 0xfd, 0xc7, 0x44, 0xbf, 0x3a, 0x98, 0x85, 0x39, 0xf3, 0xb8, 0xcb, 0x75, 0x0c, 0x51, 0xfc, 0xbf, + 0x3e, 0xc7, 0x45, 0x6b, 0xc1, 0xb9, 0x42, 0x2a, 0x4c, 0x70, 0xa7, 0x6c, 0x87, 0xdf, 0x29, 0xbb, + 0xeb, 0x0a, 0x9a, 0x90, 0x01, 0xbe, 0x2a, 0x70, 0x44, 0x72, 0x5d, 0x61, 0x1a, 0xe0, 0x2d, 0xa8, + 0x4f, 0x6d, 0x40, 0x64, 0x41, 0x34, 0x3a, 0x7e, 0x2c, 0x89, 0xd0, 0xc5, 0xd7, 0x62, 0xd0, 0x1f, + 0xe1, 0xab, 0x95, 0x78, 0x24, 0x5d, 0xcf, 0x93, 0x05, 0x94, 0x1e, 0x3e, 0xe6, 0x1c, 0x84, 0xc7, + 0xd3, 0x01, 0x77, 0xeb, 0xc6, 0xfc, 0xbf, 0x6e, 0x4d, 0x1d, 0x05, 0x02, 0x59, 0xc8, 0xb4, 0x25, + 0x92, 0x1b, 0x4c, 0x6c, 0xae, 0x73, 0xaf, 0xa4, 0x3d, 0x85, 0xb7, 0xc6, 0x39, 0x75, 0x68, 0x8e, + 0x22, 0x60, 0xa7, 0x6f, 0xa1, 0x6a, 0x0a, 0x21, 0x15, 0x1d, 0xaf, 0xf5, 0xe8, 0xb8, 0xa6, 0x4d, + 0x49, 0x51, 0x9a, 0x70, 0x48, 0x5f, 0x64, 0x1b, 0x66, 0x8e, 0xd7, 0x7d, 0xbf, 0x47, 0xaa, 0xc1, + 0x5d, 0x49, 0x21, 0xfa, 0x82, 0xd5, 0xbc, 0x0b, 0xaf, 0x5a, 0xef, 0xfb, 0x27, 0xfc, 0x11, 0xde, + 0x1d, 0xd7, 0xcc, 0x6c, 0x97, 0x8d, 0xb2, 0xf2, 0x69, 0x21, 0x08, 0x5d, 0xd2, 0xa8, 0x52, 0x41, + 0x1b, 0x33, 0xaa, 0xfa, 0x53, 0xb5, 0xc3, 0x84, 0xb2, 0x14, 0x02, 0xf7, 0x7c, 0x13, 0x99, 0x59, + 0x27, 0xc5, 0xc5, 0x2c, 0x51, 0xc3, 0x38, 0x32, 0xab, 0x9e, 0x96, 0x69, 0x07, 0x1a, 0xec, 0x0a, + 0x91, 0xf8, 0xa4, 0xb1, 0xa1, 0xf6, 0x1f, 0x70, 0x0c, 0x61, 0xd8, 0x8d, 0x73, 0x0e, 0xa4, 0xcd, + 0x29, 0xa6, 0x39, 0x09, 0xba, 0xcf, 0xd6, 0xbb, 0x2c, 0x62, 0x2a, 0x7d, 0x6e, 0xb2, 0x3d, 0x54, + 0x5d, 0x97, 0x90, 0x73, 0xc4, 0x94, 0x58, 0xab, 0x0d, 0x42, 0x53, 0x77, 0xbe, 0xcc, 0x9f, 0xdd, + 0x23, 0xa9, 0xd3, 0xab, 0x74, 0x07, 0x2d, 0x28, 0xde, 0xfa, 0x7f, 0x9d, 0x85, 0x12, 0x0f, 0x9d, + 0x99, 0xa0, 0x96, 0x75, 0xfc, 0x55, 0xae, 0x00, 0x73, 0xb4, 0x71, 0x56, 0x69, 0x27, 0x19, 0x74, + 0x40, 0x6b, 0xd2, 0x6f, 0x3c, 0x0c, 0x9d, 0x3d, 0x75, 0x73, 0xdf, 0xde, 0x48, 0x6d, 0x5d, 0x22, + 0xfc, 0x1f, 0x8b, 0x68, 0x07, 0x75, 0x39, 0x48, 0x7f, 0x1a, 0x3d, 0xc0, 0xec, 0xf6, 0x03, 0xad, + 0x54, 0x9d, 0xbf, 0xe8, 0x2f, 0xf6, 0x76, 0x41, 0xb4, 0xc5, 0x3f, 0xe5, 0x75, 0xf6, 0x0e, 0xb2, + 0xe4, 0x49, 0xef, 0x45, 0x5c, 0x03, 0xba, 0x22, 0xde, 0xee, 0xa2, 0x52, 0x01, 0xfa, 0xd0, 0xc4, + 0x11, 0x05, 0xec, 0x7b, 0x9b, 0xc5, 0x9a, 0x0d, 0x2f, 0x78, 0xe8, 0x1f, 0x4e, 0x68, 0x28, 0xea, + 0x97, 0xd4, 0xc8, 0xd1, 0x5d, 0x5f, 0x95, 0x68, 0x0e, 0x4e, 0x64, 0x50, 0x2e, 0x44, 0xb2, 0xb6, + 0xed, 0xd1, 0xe2, 0x10, 0x72, 0xe4, 0xb5, 0xc6, 0x3f, 0xca, 0xd3, 0x65, 0xb5, 0xc6, 0x2a, 0xc0, + 0x2e, 0x67, 0xad, 0x42, 0x74, 0x3c, 0x50, 0x02, 0x5c, 0x0d, 0xaf, 0x32, 0x40, 0xf9, 0x7f, 0xfb, + 0xae, 0x5a, 0x39, 0xd0, 0xb9, 0x91, 0x68, 0xa4, 0x0e, 0x74, 0xbd, 0xf3, 0xdf, 0xa9, 0x7f, 0x53, + 0xc1, 0x4b, 0x90, 0x93, 0x67, 0x4a, 0x92, 0x6b, 0x5b, 0xb0, 0xf3, 0x2f, 0x43, 0xa7, 0xa5, 0x06, + 0xea, 0xaa, 0xf8, 0x4f, 0x90, 0x74, 0x45, 0xc0, 0xc1, 0x04, 0xfa, 0x33, 0xfe, 0x28, 0xda, 0x33, + 0x9c, 0x50, 0x75, 0x61, 0xf3, 0x2c, 0x2e, 0x35, 0x04, 0xa5, 0xf9, 0xa8, 0x13, 0xdf, 0xc7, 0x74, + 0x08, 0x84, 0x9d, 0x19, 0xbc, 0x07, 0xb9, 0x6e, 0xa8, 0x88, 0x9e, 0xe6, 0xf2, 0x1b, 0xb2, 0x09, + 0x9c, 0x30, 0xde, 0x9f, 0x78, 0x15, 0xcc, 0x53, 0x2e, 0x0a, 0xf1, 0xb4, 0x82, 0x82, 0x59, 0x89, + 0x34, 0x15, 0xca, 0x31, 0xad, 0xc0, 0x47, 0xba, 0x8e, 0xa2, 0xea, 0x74, 0x87, 0x12, 0xf4, 0x58, + 0xb5, 0x77, 0xd8, 0x68, 0x7a, 0xcf, 0x0d, 0x9e, 0xf0, 0x40, 0x12, 0xad, 0xe5, 0xd6, 0x07, 0x11, + 0xd7, 0x66, 0x81, 0xc7, 0x44, 0xf7, 0x93, 0x21, 0x60, 0xbd, 0x90, 0xd3, 0xc0, 0x2e, 0x1c, 0x2b, + 0x4e, 0x41, 0x85, 0xe8, 0x43, 0x86, 0x4a, 0xa0, 0x3b, 0x86, 0xa5, 0xa5, 0xa6, 0x1e, 0xa4, 0xd2, + 0x83, 0x6c, 0x2f, 0xe0, 0x82, 0x16, 0x4d, 0xd2, 0x43, 0x89, 0x8d, 0xf9, 0x16, 0x46, 0x18, 0xa6, + 0xe2, 0x43, 0xf8, 0x8a, 0xd7, 0xa7, 0x0c, 0x63, 0xda, 0x80, 0xe8, 0xa0, 0xa3, 0x35, 0x78, 0x3a, + 0x91, 0xd6, 0x46, 0xbb, 0x0e, 0x3b, 0xc3, 0x16, 0x21, 0x9d, 0xe5, 0xdf, 0xeb, 0x66, 0xd7, 0x83, + 0x00, 0x53, 0x5a, 0xf7, 0xbf, 0xaa, 0xeb, 0x14, 0x12, 0xb9, 0xac, 0x86, 0xcd, 0x3a, 0xfb, 0x65, + 0xf6, 0xf5, 0x85, 0x05, 0x92, 0xa3, 0x1e, 0x13, 0x44, 0x8b, 0x79, 0x47, 0xc6, 0x2c, 0x77, 0xbf, + 0xa1, 0x19, 0x2e, 0xb3, 0xa0, 0xb1, 0x19, 0x27, 0x54, 0x64, 0x57, 0xd9, 0xe9, 0xec, 0x6a, 0x22, + 0x67, 0x0e, 0x72, 0xdc, 0x3e, 0x4a, 0x7b, 0x32, 0x47, 0xf8, 0x2e, 0x70, 0x16, 0x07, 0xfb, 0x18, + 0x23, 0x63, 0xd1, 0x52, 0x4b, 0xf7, 0xcc, 0x7c, 0x45, 0xde, 0x69, 0x1e, 0x90, 0xeb, 0xa8, 0x49, + 0xe8, 0xa5, 0x44, 0x3f, 0x54, 0x68, 0x57, 0xef, 0x17, 0xf6, 0x24, 0x1b, 0x50, 0xac, 0xb6, 0x02, + 0x1c, 0xc2, 0x29, 0x9c, 0xf9, 0x2b, 0x4c, 0xba, 0x8d, 0xd1, 0x71, 0x6c, 0x4c, 0xe9, 0x68, 0x70, + 0x2f, 0x25, 0x3f, 0x01, 0x19, 0xb9, 0x7f, 0x24, 0xbd, 0x38, 0xb0, 0x02, 0xc6, 0xa7, 0x69, 0xcd, + 0x8e, 0x00, 0xbd, 0x8f, 0x60, 0xe0, 0xa7, 0x42, 0x0c, 0x77, 0x0d, 0x42, 0xd7, 0x4d, 0xcd, 0xeb, + 0x4a, 0x49, 0x17, 0x4f, 0x28, 0x7c, 0x54, 0x9e, 0x43, 0x1d, 0x54, 0xc6, 0x90, 0x82, 0x6f, 0xde, + 0xba, 0xa0, 0x66, 0x22, 0x69, 0x78, 0x12, 0x7d, 0x4d, 0x17, 0xda, 0x1f, 0x9d, 0xd6, 0x21, 0x99, + 0xa4, 0x44, 0xcb, 0x29, 0x9b, 0x4f, 0xd3, 0x80, 0xae, 0x36, 0xb4, 0xc4, 0xa2, 0x5c, 0xd8, 0x1e, + 0x9b, 0x00, 0xcc, 0x4d, 0x4d, 0x4d, 0xb0, 0xf0, 0xb1, 0xb9, 0x5f, 0xe1, 0xd7, 0x2a, 0xa5, 0x21, + 0x7c, 0x04, 0x84, 0xfa, 0x19, 0x62, 0x2f, 0x19, 0x54, 0x6a, 0x15, 0x5e, 0x7f, 0xa8, 0x12, 0x89, + 0x93, 0x32, 0xaa, 0xba, 0xc8, 0x79, 0x29, 0x49, 0x69, 0x43, 0xe0, 0xfb, 0x21, 0xda, 0xf4, 0xe8, + 0x55, 0xe8, 0xb4, 0xf9, 0xbe, 0x76, 0x44, 0x3a, 0x20, 0xcb, 0x90, 0xb9, 0x74, 0xac, 0x38, 0xe4, + 0xab, 0x18, 0xaf, 0xe0, 0xca, 0x02, 0xad, 0x43, 0x50, 0x9c, 0x88, 0x54, 0x37, 0x1b, 0x27, 0x5f, + 0x7d, 0x9f, 0x83, 0xd9, 0xce, 0xbd, 0xc2, 0x64, 0xaa, 0xf4, 0xfe, 0xc7, 0x09, 0xd1, 0x40, 0xcb, + 0x35, 0x72, 0xb6, 0xd5, 0x78, 0x83, 0x2a, 0x88, 0x4c, 0x17, 0x08, 0x18, 0xcd, 0x08, 0x92, 0xc2, + 0x76, 0xf9, 0x1c, 0x88, 0x56, 0x48, 0x72, 0x85, 0x17, 0x77, 0x09, 0x9b, 0x51, 0xf8, 0xb6, 0x6e, + 0x3a, 0x83, 0x6a, 0xe4, 0xe7, 0xcc, 0xf0, 0xb8, 0x7a, 0x12, 0x13, 0xa6, 0xd5, 0x6d, 0x89, 0xfe, + 0x41, 0x02, 0x58, 0x91, 0x53, 0xd2, 0x94, 0xae, 0xff, 0xb4, 0x23, 0xf6, 0x56, 0xf1, 0x37, 0xf0, + 0x75, 0x6b, 0xe2, 0x3b, 0xb2, 0x44, 0x54, 0x07, 0x64, 0xad, 0x33, 0xb4, 0x7c, 0x3e, 0x9a, 0xaa, + 0xf1, 0xc0, 0x01, 0xd8, 0xf9, 0x49, 0x13, 0x63, 0x8c, 0xc1, 0x14, 0x14, 0x5a, 0xa6, 0xd5, 0x51, + 0x79, 0xe9, 0x1c, 0x84, 0xcb, 0x5b, 0x64, 0x83, 0x0f, 0x02, 0x2e, 0xee, 0x1a, 0x65, 0xca, 0x4b, + 0x33, 0x3a, 0xbe, 0xeb, 0xab, 0xaf, 0xac, 0x4c, 0xac, 0x2d, 0x87, 0x68, 0x0c, 0x08, 0x58, 0xb0, + 0xa3, 0x61, 0xe5, 0xd8, 0xad, 0xa9, 0x6c, 0x39, 0x6e, 0x87, 0xbe, 0xc5, 0xb1, 0x6b, 0x49, 0xa1, + 0xc9, 0xa5, 0x6a, 0x39, 0x75, 0xa7, 0x3e, 0xfb, 0x4d, 0x63, 0x2b, 0x9c, 0xb5, 0x38, 0x03, 0x14, + 0x18, 0x4d, 0x12, 0xd2, 0xbf, 0x27, 0xeb, 0x04, 0xe4, 0xd4, 0x18, 0x59, 0x08, 0x4e, 0xe6, 0x49, + 0x73, 0xf1, 0x43, 0x0e, 0x73, 0x71, 0xf7, 0xec, 0x1b, 0x27, 0x8a, 0x88, 0xed, 0xaf, 0x9c, 0x1c, + 0x90, 0x9e, 0x48, 0xc5, 0x7b, 0x02, 0xc2, 0xf5, 0x38, 0x9f, 0x7f, 0x50, 0x5a, 0x25, 0x93, 0xf1, + 0x90, 0x83, 0xf7, 0xab, 0xda, 0x90, 0x29, 0xca, 0x6f, 0xfe, 0xe6, 0x33, 0xb3, 0x81, 0xb9, 0x64, + 0xa7, 0x58, 0x92, 0x5f, 0xb1, 0x6d, 0xb6, 0x9d, 0x33, 0x3f, 0xab, 0x4b, 0xf4, 0xc7, 0xca, 0x34, + 0x1f, 0xbc, 0x24, 0x3c, 0x40, 0x08, 0xa1, 0xf2, 0x36, 0x36, 0x78, 0xcb, 0x42, 0xf6, 0xb0, 0x59, + 0x5b, 0x1f, 0x38, 0xf7, 0xa8, 0x45, 0xa9, 0xf0, 0x8b, 0xce, 0xb8, 0xfc, 0x62, 0x00, 0xbe, 0x74, + 0x0c, 0x50, 0x77, 0xe3, 0xfe, 0xe1, 0x87, 0x06, 0xe0, 0x83, 0x13, 0x17, 0x3f, 0x41, 0x79, 0x28, + 0xb0, 0x93, 0x96, 0xa3, 0x91, 0x17, 0x0f, 0x2c, 0x3b, 0x8e, 0xa1, 0x60, 0x5b, 0x84, 0xa6, 0x8a, + 0xa0, 0xea, 0x83, 0xa1, 0x25, 0x57, 0x5a, 0x18, 0xcc, 0x63, 0xdc, 0x84, 0x56, 0x27, 0xb0, 0x1c, + 0x09, 0x1b, 0xf6, 0x8f, 0xe9, 0x2d, 0x06, 0x98, 0x84, 0xaf, 0xef, 0xfd, 0x43, 0x4b, 0xb8, 0xf6, + 0x96, 0x15, 0xbd, 0x1e, 0x27, 0xe9, 0x42, 0xa0, 0x25, 0x0e, 0x8c, 0x40, 0xad, 0x27, 0x2a, 0xfa, + 0x6d, 0x83, 0x66, 0x34, 0x3d, 0x7d, 0x3b, 0xe0, 0x8e, 0xd3, 0xc0, 0x64, 0xa2, 0x7e, 0xab, 0x45, + 0xd9, 0xf2, 0xd7, 0x79, 0xa1, 0x0b, 0x3e, 0xf7, 0x4a, 0x1f, 0xa5, 0x0c, 0x64, 0xcc, 0x20, 0x7b, + 0x91, 0x70, 0x1a, 0x6d, 0x47, 0xbb, 0xdb, 0x26, 0xc0, 0x26, 0x78, 0x1e, 0x82, 0xf4, 0xe6, 0x1e, + 0xcc, 0x77, 0x76, 0x25, 0x2a, 0x69, 0x45, 0xd3, 0x10, 0x11, 0xee, 0xb3, 0xba, 0x17, 0x97, 0x99, + 0x19, 0xf8, 0x1b, 0x12, 0x8a, 0xe8, 0x38, 0x92, 0x61, 0x44, 0xf3, 0x25, 0xa5, 0x2c, 0x83, 0x18, + 0xb2, 0x6c, 0xc3, 0x2e, 0xff, 0x5a, 0x84, 0xd7, 0x5e, 0x89, 0x5a, 0x35, 0xdb, 0x27, 0x46, 0xf4, + 0x1c, 0xfe, 0x5d, 0x1e, 0x52, 0x86, 0xef, 0xee, 0x55, 0x10, 0x5b, 0x01, 0xd2, 0xae, 0xe4, 0xe6, + 0x7b, 0xed, 0x3f, 0x39, 0xd6, 0x2f, 0x44, 0xad, 0xb9, 0x02, 0x89, 0xb0, 0xe2, 0x35, 0xc9, 0xcf, + 0x6b, 0x6d, 0x54, 0x18, 0xdd, 0xa0, 0x08, 0x35, 0xf6, 0x39, 0x87, 0x7a, 0xc9, 0xe1, 0x9d, 0x86, + 0xda, 0x50, 0x18, 0x0e, 0xec, 0x40, 0x3f, 0x90, 0xef, 0x56, 0xa5, 0x19, 0x74, 0x53, 0x10, 0x3e, + 0x40, 0x37, 0x14, 0x5a, 0x0d, 0x82, 0xdf, 0x2a, 0x11, 0x19, 0x95, 0x53, 0x4d, 0xdc, 0x6b, 0x8b, + 0xdf, 0xef, 0xfc, 0x6b, 0xee, 0x78, 0x6e, 0x9e, 0x70, 0x3b, 0x4b, 0x8d, 0x5d, 0x7d, 0x19, 0x95, + 0x6b, 0x7c, 0x09, 0xaa, 0xda, 0x53, 0x42, 0x5a, 0xd6, 0x0d, 0xf3, 0x89, 0x2e, 0x20, 0xf3, 0x84, + 0x70, 0x76, 0x9d, 0x82, 0x90, 0x2a, 0x88, 0x78, 0x2b, 0x59, 0x93, 0x47, 0x5e, 0x1a, 0xd7, 0x32, + 0x23, 0xf3, 0x11, 0x19, 0x89, 0xf9, 0x21, 0x33, 0xb2, 0xe2, 0x2f, 0xcf, 0x03, 0xd0, 0x32, 0x53, + 0xbe, 0xbe, 0xa0, 0x48, 0xbd, 0x8a, 0xb6, 0x63, 0x39, 0xcc, 0xc7, 0x61, 0xdc, 0xac, 0xc2, 0x05, + 0xe6, 0x12, 0x91, 0x6a, 0x0d, 0x4b, 0x22, 0x30, 0x38, 0xd0, 0x51, 0x20, 0x7d, 0x71, 0xa9, 0xfc, + 0xd6, 0xfd, 0x78, 0x13, 0x5d, 0xfe, 0x5f, 0xf0, 0xc1, 0xfa, 0x14, 0x99, 0xec, 0x94, 0x7f, 0xc7, + 0xd1, 0x1e, 0x6f, 0x7e, 0x0b, 0x0f, 0x31, 0x09, 0x5a, 0x58, 0x93, 0x0c, 0x8b, 0x33, 0xa2, 0x77, + 0x32, 0x77, 0xd0, 0x44, 0xdf, 0xe4, 0x9e, 0x76, 0x0b, 0xc6, 0x34, 0xec, 0xf8, 0x04, 0xce, 0x41, + 0x34, 0xaf, 0x89, 0x13, 0x49, 0xa9, 0xbc, 0xc1, 0x53, 0xd9, 0x77, 0xca, 0x81, 0xc7, 0xef, 0x65, + 0x64, 0x41, 0x8b, 0x2e, 0x28, 0x12, 0xe1, 0x74, 0x33, 0x2d, 0x2f, 0x0c, 0x9e, 0x78, 0xf0, 0x1c, + 0x38, 0x97, 0xab, 0x57, 0xfb, 0x80, 0xb8, 0x50, 0xed, 0x3a, 0x60, 0xd0, 0xb3, 0x9f, 0x46, 0x12, + 0x25, 0x34, 0x56, 0xd3, 0x31, 0xed, 0x38, 0x46, 0x21, 0x7e, 0xcf, 0xe0, 0x75, 0xfe, 0xfc, 0x9d, + 0xc8, 0xfe, 0xc3, 0xe0, 0xf6, 0x22, 0xb0, 0xf5, 0x11, 0x9c, 0x98, 0xac, 0xc0, 0x31, 0xf5, 0x2f, + 0x70, 0xbe, 0x8e, 0xed, 0xfe, 0x23, 0xf5, 0x86, 0x07, 0xb3, 0xf8, 0x3d, 0x09, 0xa3, 0xc6, 0x34, + 0xa5, 0x47, 0x8d, 0xf4, 0xeb, 0x66, 0x5f, 0x0e, 0xc5, 0x89, 0xba, 0x63, 0x2d, 0x64, 0xcc, 0x42, + 0x8a, 0x03, 0xb9, 0xf9, 0x16, 0xe3, 0x91, 0x89, 0x0c, 0xdf, 0x20, 0x39, 0xcb, 0x61, 0x3f, 0xbd, + 0x65, 0xbc, 0x5d, 0xef, 0xb8, 0x13, 0xa1, 0x02, 0xb3, 0x32, 0xde, 0x6a, 0x04, 0xb0, 0xfb, 0x7a, + 0x56, 0x49, 0xf7, 0xcf, 0x2d, 0xf9, 0xb9, 0xd1, 0x6f, 0xad, 0x7a, 0xa8, 0x77, 0x65, 0x3b, 0xe0, + 0xa1, 0xb7, 0x08, 0xe3, 0x0d, 0xff, 0x36, 0x4d, 0x01, 0x05, 0x89, 0xef, 0xb0, 0x0a, 0x23, 0xd6, + 0xa9, 0x01, 0x28, 0x5e, 0xc0, 0x5b, 0x91, 0x35, 0xed, 0x30, 0xa8, 0xcd, 0xe1, 0x66, 0x96, 0x52, + 0x01, 0x24, 0xc3, 0x32, 0x20, 0xba, 0x46, 0x72, 0xdd, 0x5c, 0xf5, 0x89, 0xac, 0x3c, 0x45, 0x40, + 0x71, 0xb9, 0xbc, 0x11, 0x5a, 0x9e, 0x3a, 0x1d, 0xf1, 0xcf, 0x4d, 0xb0, 0xc8, 0xd7, 0x97, 0xd4, + 0x5d, 0x8e, 0xb1, 0x13, 0x73, 0x18, 0x9a, 0xe9, 0x73, 0x16, 0xae, 0x62, 0x19, 0x82, 0xf8, 0x6d, + 0x66, 0x42, 0x66, 0x4a, 0x7f, 0x04, 0x1d, 0x6e, 0x6e, 0x86, 0x61, 0x4c, 0xbe, 0x4f, 0x4d, 0xae, + 0xc7, 0xc9, 0x9a, 0xb6, 0x0f, 0x78, 0x9a, 0x85, 0xf1, 0x05, 0x4b, 0xce, 0x66, 0xea, 0xe0, 0x0b, + 0x0d, 0xf7, 0x08, 0x64, 0x2f, 0x12, 0xaa, 0xd2, 0x4c, 0x8e, 0x61, 0x51, 0x0f, 0xe5, 0xd4, 0x91, + 0xcd, 0x58, 0x8d, 0x4a, 0xb4, 0x62, 0xca, 0xb6, 0x05, 0xf8, 0x4c, 0x87, 0x1b, 0x4d, 0xa8, 0x57, + 0x42, 0x66, 0xea, 0xf7, 0xf0, 0x1b, 0x06, 0x6d, 0x10, 0xca, 0x88, 0xab, 0x1d, 0xad, 0x91, 0x6d, + 0xbb, 0xa8, 0x6f, 0x07, 0xb6, 0x84, 0x29, 0xe2, 0xd6, 0xd2, 0x8a, 0x93, 0x5d, 0xbd, 0x16, 0xdd, + 0x15, 0xfb, 0x5a, 0x03, 0x94, 0xdd, 0xaa, 0x52, 0x7e, 0xc6, 0x55, 0x87, 0xb8, 0xc3, 0xef, 0xcd, + 0x90, 0xb3, 0x49, 0x95, 0xc0, 0x5f, 0xfb, 0x0f, 0x7e, 0x17, 0xcb, 0x7e, 0x4f, 0xaf, 0xfe, 0xee, + 0x8d, 0xe1, 0x31, 0x63, 0x1d, 0xe6, 0xb6, 0x92, 0x03, 0xa9, 0x96, 0x5b, 0xa0, 0x36, 0x7d, 0x54, + 0xf4, 0x89, 0xd2, 0x56, 0x63, 0xe9, 0x89, 0x73, 0x6b, 0xad, 0x25, 0x53, 0x75, 0xb7, 0x58, 0xf8, + 0x1c, 0xf3, 0x4e, 0xda, 0x93, 0xce, 0xf3, 0x67, 0x45, 0x0e, 0x2a, 0x9b, 0x03, 0x25, 0x44, 0x0c, + 0xcf, 0xcc, 0x37, 0x42, 0xd8, 0x78, 0xc9, 0x3c, 0xca, 0xd5, 0x63, 0x52, 0x9d, 0xc0, 0x5b, 0x3a, + 0x3a, 0xc2, 0x1a, 0x0a, 0x33, 0xb5, 0x07, 0x04, 0x3b, 0xa3, 0xb9, 0x70, 0xac, 0xd4, 0xf7, 0x1d, + 0xfd, 0x00, 0x93, 0x23, 0xc9, 0x49, 0xe1, 0xc1, 0x61, 0xe5, 0x95, 0x2a, 0x01, 0x6f, 0x1a, 0x87, + 0xad, 0x02, 0xdd, 0x0c, 0xbc, 0xcb, 0x56, 0x9e, 0x58, 0x18, 0x49, 0x4f, 0x07, 0x48, 0x0c, 0x53, + 0x00, 0xfa, 0x95, 0xc9, 0xf8, 0x37, 0x44, 0x64, 0x9c, 0xd1, 0x10, 0x7a, 0x90, 0xfd, 0x11, 0x18, + 0x45, 0xcd, 0xe5, 0x80, 0x21, 0x7e, 0x8c, 0xca, 0x04, 0x15, 0x3b, 0x52, 0x12, 0xaf, 0x3c, 0x4b, + 0x0a, 0x6f, 0xad, 0xbd, 0x6d, 0xde, 0x8e, 0xb3, 0xd7, 0x06, 0x11, 0xcd, 0x9a, 0xde, 0x8c, 0x10, + 0xae, 0x3c, 0x96, 0xb6, 0x62, 0x5a, 0x80, 0xf4, 0xb2, 0xc7, 0x79, 0x50, 0x0b, 0x26, 0xad, 0x40, + 0x63, 0x17, 0x28, 0x50, 0x06, 0xef, 0x93, 0x7d, 0x81, 0x65, 0x03, 0x47, 0xca, 0x85, 0xce, 0x9f, + 0x7e, 0x09, 0xd0, 0xc4, 0xca, 0xc7, 0x78, 0x9f, 0x6b, 0xb6, 0xc0, 0xd0, 0x30, 0xd5, 0x13, 0x9d, + 0xb4, 0x60, 0x18, 0xdd, 0x18, 0xab, 0xe1, 0x0e, 0x43, 0x62, 0xb8, 0x04, 0xb5, 0x6c, 0xba, 0xe2, + 0x33, 0xf6, 0x05, 0x5c, 0xee, 0xd2, 0xd2, 0x72, 0x43, 0xb8, 0x81, 0x16, 0xc6, 0x5e, 0xe0, 0xa9, + 0xb3, 0xc4, 0xde, 0x26, 0xaf, 0x16, 0x90, 0xef, 0x9a, 0x4c, 0xb0, 0x89, 0xa2, 0x08, 0x17, 0xa9, + 0xa8, 0xc8, 0xb8, 0x55, 0x19, 0x51, 0x85, 0x8f, 0x34, 0xfd, 0x59, 0xd5, 0xb9, 0x98, 0xab, 0xcd, + 0x58, 0x71, 0x7e, 0x3c, 0x9e, 0x28, 0xb7, 0xb1, 0x6b, 0x50, 0x37, 0x17, 0xb5, 0x84, 0x52, 0xd6, + 0x83, 0x80, 0x26, 0x59, 0xbd, 0x81, 0x9a, 0xe5, 0x64, 0x1b, 0x3f, 0x11, 0xf4, 0x79, 0x08, 0xfe, + 0x3c, 0xc4, 0x8f, 0xc9, 0xfc, 0x37, 0x6b, 0x73, 0xc4, 0xdd, 0xf6, 0x80, 0x45, 0xbd, 0x85, 0x75, + 0x74, 0x17, 0xbd, 0x91, 0xe8, 0xf3, 0x7e, 0x44, 0xb3, 0xf0, 0x1b, 0x66, 0x39, 0x87, 0xe8, 0x52, + 0xb8, 0x28, 0x02, 0x7e, 0x71, 0xa8, 0x05, 0xe6, 0x22, 0xd6, 0xea, 0xc3, 0xfe, 0x29, 0x9d, 0x06, + 0xfc, 0xfa, 0x78, 0x32, 0xc5, 0xff, 0x2b, 0x2c, 0x9e, 0xb1, 0x14, 0xe5, 0x7c, 0x25, 0x29, 0x33, + 0x8f, 0xab, 0x42, 0x91, 0xc1, 0xd1, 0xcf, 0x7e, 0xe7, 0x0a, 0xcb, 0xc0, 0xce, 0x96, 0x29, 0x91, + 0x30, 0xe0, 0x03, 0x80, 0xdf, 0x34, 0xd6, 0xd0, 0x0d, 0xcb, 0xd0, 0x60, 0x26, 0x41, 0x56, 0x8d, + 0x57, 0x61, 0xb2, 0x11, 0xe4, 0xa4, 0xd9, 0xcb, 0x45, 0x8a, 0xc0, 0x83, 0x29, 0xb9, 0x5d, 0xf4, + 0xec, 0x6d, 0x94, 0xf7, 0x83, 0x95, 0xb0, 0x2c, 0x9f, 0x22, 0x83, 0xac, 0xdc, 0xb0, 0x97, 0xee, + 0x1b, 0x52, 0x27, 0x47, 0x66, 0x06, 0xeb, 0x5c, 0x4c, 0xd1, 0x8b, 0x4c, 0x77, 0x7f, 0x99, 0x53, + 0x3e, 0xed, 0x5c, 0x51, 0xf4, 0x66, 0x11, 0x6a, 0x2f, 0x3f, 0xb0, 0xb1, 0x75, 0x13, 0xc0, 0x4c, + 0xbb, 0x9b, 0xd5, 0x19, 0xe0, 0x5f, 0x8c, 0x41, 0x63, 0x43, 0x59, 0x3f, 0xe5, 0xc4, 0x5e, 0x17, + 0x96, 0x68, 0x6c, 0x6b, 0x22, 0x2a, 0x32, 0x3c, 0xc4, 0xe9, 0xc0, 0x60, 0x72, 0xc0, 0x92, 0x2b, + 0x75, 0x6d, 0x94, 0xb0, 0x00, 0x98, 0x90, 0xe7, 0x9a, 0xcb, 0x8f, 0x04, 0x8b, 0x4a, 0xef, 0xa8, + 0x11, 0x73, 0x2d, 0xae, 0xfa, 0xfb, 0xcd, 0x17, 0x96, 0xe4, 0xf9, 0x4b, 0x9f, 0x05, 0xfc, 0x79, + 0x73, 0x62, 0x5b, 0x18, 0x4e, 0x7f, 0x70, 0x2b, 0x47, 0x96, 0x37, 0xa4, 0x3f, 0x39, 0x0e, 0xdb, + 0x1c, 0x46, 0xf1, 0xc1, 0x5b, 0x16, 0x13, 0xb7, 0x89, 0xbf, 0x5c, 0xad, 0xe0, 0x8f, 0xf9, 0xa4, + 0x28, 0xd4, 0xc7, 0x09, 0x49, 0xf2, 0x9b, 0xe8, 0xd3, 0x93, 0x47, 0x29, 0xf7, 0x35, 0x65, 0x1e, + 0x0c, 0x28, 0x50, 0x69, 0xa1, 0x60, 0xd3, 0xcf, 0x86, 0x7d, 0xb4, 0x49, 0x32, 0x17, 0x3e, 0x90, + 0x7e, 0x82, 0xcd, 0x7e, 0x44, 0x7d, 0xd3, 0x43, 0x74, 0x4b, 0xd5, 0xc9, 0x88, 0x51, 0x1b, 0xe8, + 0xfa, 0xb8, 0xea, 0x83, 0xa1, 0x95, 0x0b, 0xf3, 0x07, 0x78, 0xf3, 0x20, 0xad, 0x36, 0x7a, 0xe5, + 0xff, 0x97, 0x81, 0x53, 0xfe, 0xc9, 0x3a, 0x85, 0xf0, 0x54, 0xa8, 0x39, 0xf5, 0x90, 0x16, 0xf8, + 0xf2, 0x3d, 0xd2, 0xfe, 0x8e, 0x31, 0xfd, 0xa9, 0x50, 0xb2, 0x6f, 0xe9, 0xfa, 0x41, 0x09, 0x3a, + 0x93, 0x71, 0x3c, 0x12, 0xfd, 0x6c, 0x1e, 0xd0, 0x78, 0xa6, 0x9e, 0x22, 0xa1, 0x3a, 0x13, 0x30, + 0xfd, 0xea, 0x16, 0xe7, 0x26, 0xfc, 0xfd, 0x1f, 0x30, 0xf4, 0x67, 0xa7, 0x60, 0x6d, 0x90, 0x34, + 0x9c, 0x80, 0x20, 0xff, 0xbd, 0xe3, 0x4a, 0x4d, 0xb9, 0xc5, 0x85, 0xda, 0x30, 0xff, 0x41, 0x35, + 0xbb, 0x5c, 0x3e, 0x7d, 0x49, 0x28, 0x8f, 0x29, 0x47, 0x62, 0x39, 0xe7, 0x0a, 0xa3, 0x17, 0x6d, + 0xbf, 0xb2, 0x52, 0x5b, 0x7a, 0x48, 0x42, 0x3c, 0xef, 0xa6, 0x8a, 0x09, 0xaf, 0xc2, 0x5a, 0x5a, + 0x95, 0x6e, 0x1c, 0xcf, 0x7d, 0x8c, 0xb8, 0xc5, 0x7b, 0xe7, 0x2e, 0xbf, 0xc1, 0x2b, 0xf6, 0x20, + 0x8c, 0x89, 0xeb, 0x60, 0x35, 0x63, 0xdd, 0xb3, 0xfe, 0x80, 0xd0, 0xf1, 0x20, 0xce, 0x2f, 0x5f, + 0x27, 0xb0, 0x54, 0x6f, 0x7d, 0x48, 0x9d, 0x07, 0x47, 0xca, 0xd4, 0x6c, 0x17, 0xcb, 0xd7, 0x07, + 0x82, 0x4a, 0x29, 0xc2, 0x12, 0x50, 0x33, 0xf9, 0x89, 0x7a, 0x51, 0x8d, 0x79, 0xa0, 0x55, 0xbd, + 0xb8, 0xec, 0xf4, 0x91, 0xc0, 0xa1, 0x35, 0xe8, 0x2a, 0x35, 0x29, 0xe0, 0xb5, 0x17, 0xc5, 0x06, + 0x3a, 0x78, 0x93, 0x63, 0x4e, 0xbd, 0x37, 0x6f, 0x00, 0xd5, 0x60, 0xe3, 0x3e, 0x29, 0xb7, 0x0b, + 0xb1, 0xfb, 0xdf, 0x2c, 0x44, 0xba, 0xdb, 0xe3, 0x32, 0x64, 0xc2, 0x7a, 0x6a, 0x46, 0xc5, 0xfb, + 0x7b, 0xba, 0x67, 0x98, 0x40, 0x44, 0xf3, 0xce, 0x9a, 0x4c, 0xff, 0x0c, 0x78, 0x89, 0x4c, 0x11, + 0x06, 0x78, 0x25, 0x7f, 0x3b, 0x7b, 0x60, 0xc2, 0xa4, 0x25, 0x4e, 0x51, 0x8c, 0xf4, 0xd1, 0x6a, + 0xf3, 0x93, 0x1a, 0x1c, 0x05, 0xfc, 0x94, 0x1c, 0x0d, 0x45, 0xfd, 0xb9, 0x1c, 0x70, 0x09, 0xa7, + 0x3b, 0x2b, 0xdc, 0xc6, 0x6c, 0xa3, 0x77, 0x8c, 0x25, 0x21, 0xfd, 0x7d, 0xa9, 0x41, 0x50, 0x3c, + 0x90, 0x80, 0x5a, 0x2f, 0x1a, 0x50, 0xf0, 0xcc, 0xb1, 0x23, 0x4e, 0xf6, 0x5d, 0x61, 0xac, 0x2b, + 0xdc, 0xb7, 0x9e, 0x33, 0xa2, 0x24, 0x5d, 0x0c, 0xd5, 0xcd, 0x45, 0x58, 0xb5, 0x85, 0xa4, 0x5e, + 0xa3, 0x09, 0xe2, 0x09, 0x8c, 0x04, 0x1a, 0x53, 0x5f, 0xe7, 0x42, 0x7f, 0xbb, 0xc1, 0xf8, 0x8d, + 0xb5, 0x8a, 0xc7, 0xda, 0x13, 0x23, 0xbd, 0x50, 0xd3, 0xa8, 0x44, 0xa0, 0x48, 0x36, 0x85, 0x22, + 0x63, 0xd2, 0x47, 0x28, 0xa4, 0xe2, 0x30, 0x3c, 0x50, 0x35, 0xc8, 0xca, 0x1a, 0xef, 0x44, 0xb9, + 0xef, 0x9c, 0x36, 0x17, 0x80, 0x53, 0xab, 0x0e, 0xfa, 0x9e, 0x9b, 0x13, 0xfe, 0x97, 0x13, 0x73, + 0x4e, 0x03, 0xc6, 0xbe, 0x0a, 0x35, 0x46, 0xf3, 0xfc, 0xc6, 0x91, 0x8b, 0x25, 0x1b, 0x95, 0xee, + 0xae, 0xa5, 0x59, 0xbf, 0x4a, 0x23, 0xfc, 0xa4, 0x1f, 0x19, 0x24, 0xc8, 0x41, 0xe6, 0x3d, 0x43, + 0xde, 0xfd, 0x73, 0x2d, 0x23, 0x2f, 0xf9, 0x98, 0x45, 0x91, 0x9c, 0xfc, 0xb9, 0xb9, 0x49, 0x61, + 0x2d, 0xd3, 0x8f, 0x15, 0x21, 0x48, 0x89, 0x87, 0x51, 0x72, 0xe2, 0xc5, 0x3a, 0x9c, 0x51, 0xd2, + 0xb7, 0x41, 0x4e, 0xed, 0xc1, 0xc2, 0x00, 0x8a, 0xb1, 0x01, 0x1b, 0x69, 0xce, 0x75, 0xba, 0x7c, + 0x79, 0xd2, 0xa0, 0xc1, 0xe5, 0xe9, 0xe1, 0xbc, 0xd5, 0x29, 0xbc, 0x0d, 0x3d, 0x39, 0xb3, 0x85, + 0x7d, 0xab, 0x93, 0x41, 0xb8, 0xc1, 0xa2, 0x40, 0x65, 0x10, 0x88, 0x5f, 0x8b, 0x99, 0xf9, 0x90, + 0x2c, 0x87, 0x82, 0xd3, 0xff, 0xcd, 0x44, 0x99, 0x9f, 0xe1, 0x2c, 0x8e, 0xe3, 0x7e, 0x07, 0xa8, + 0x69, 0xd2, 0x73, 0x78, 0x3f, 0xc7, 0x4e, 0x09, 0x15, 0x03, 0xb6, 0x45, 0x70, 0xc1, 0xf0, 0x1c, + 0x62, 0x1c, 0x60, 0xef, 0xee, 0x67, 0xe7, 0x11, 0xe8, 0x5e, 0x74, 0x05, 0xf9, 0xf0, 0x70, 0x6e, + 0x69, 0xdd, 0x35, 0x58, 0x7c, 0x7e, 0xea, 0xcb, 0xc8, 0x06, 0x74, 0x3a, 0xaa, 0x88, 0xe1, 0x03, + 0xc6, 0xf1, 0xae, 0xd7, 0xfc, 0xdc, 0x50, 0x57, 0x25, 0x0a, 0x25, 0x8d, 0x10, 0x2c, 0x56, 0x1f, + 0xdf, 0x67, 0xc7, 0x15, 0xc7, 0x43, 0x0f, 0xeb, 0xf9, 0x93, 0x10, 0x31, 0xf5, 0xa7, 0x56, 0x10, + 0x3f, 0x14, 0xbd, 0xcd, 0x1d, 0x7c, 0xb8, 0xf5, 0x8e, 0xa5, 0x29, 0xbf, 0xb4, 0x34, 0x55, 0x7b, + 0x00, 0xc4, 0x62, 0x32, 0x63, 0xce, 0x39, 0xbd, 0x33, 0xb9, 0x39, 0x33, 0x0b, 0xe3, 0x88, 0xb2, + 0x6c, 0x68, 0xb5, 0x74, 0x34, 0x0e, 0x6e, 0x31, 0xb3, 0x92, 0xa0, 0x45, 0x4f, 0x3d, 0x58, 0xe1, + 0x3c, 0x81, 0x4f, 0x7f, 0xc5, 0x31, 0xca, 0xa9, 0x95, 0x44, 0x3e, 0xb2, 0x25, 0x07, 0x84, 0xc3, + 0x92, 0x7b, 0x7f, 0x24, 0x09, 0xe8, 0xdf, 0xbf, 0x21, 0xb4, 0xb8, 0x00, 0x60, 0xf6, 0xc2, 0x18, + 0x97, 0x2b, 0x6c, 0x33, 0x18, 0x45, 0xc4, 0x3c, 0xd9, 0xec, 0xdf, 0xed, 0xa5, 0xb9, 0xac, 0xfc, + 0x2a, 0xdc, 0x3b, 0x2c, 0x74, 0x25, 0xa3, 0x7a, 0x9d, 0xd3, 0xa5, 0x7a, 0xb3, 0x60, 0x3c, 0x0e, + 0x71, 0xc0, 0xd1, 0xbf, 0x3e, 0x07, 0xe1, 0x90, 0x99, 0x42, 0x01, 0x47, 0x35, 0x25, 0xcc, 0x1d, + 0xf7, 0x30, 0x48, 0x5b, 0x42, 0x1c, 0xce, 0xb3, 0xb9, 0x21, 0x97, 0x9e, 0x63, 0x45, 0x25, 0xdf, + 0xd2, 0x5f, 0x95, 0x1c, 0x15, 0x98, 0x14, 0x7e, 0xda, 0x68, 0x88, 0xaf, 0xd6, 0xd4, 0x12, 0xa9, + 0x52, 0xfc, 0x60, 0x28, 0x8e, 0xc5, 0x83, 0xb5, 0x85, 0x45, 0x55, 0x90, 0x02, 0xd7, 0xe1, 0x7d, + 0xa8, 0xd8, 0x8f, 0xa3, 0x3c, 0xec, 0xfb, 0x22, 0xa0, 0xf4, 0x6c, 0x98, 0x91, 0xa9, 0x6d, 0xb4, + 0xde, 0x7a, 0xf6, 0x8c, 0xfe, 0x5d, 0xed, 0x28, 0x8a, 0xf1, 0x36, 0x72, 0x02, 0xba, 0x91, 0x82, + 0xd5, 0x47, 0x37, 0xd3, 0xb2, 0x7c, 0x8f, 0x9e, 0x67, 0x26, 0x7a, 0x24, 0xa7, 0xcb, 0x8f, 0xfa, + 0x94, 0x65, 0xb4, 0x53, 0x9d, 0xae, 0x51, 0x4f, 0x1e, 0x8f, 0x92, 0x95, 0x82, 0x35, 0x4f, 0x29, + 0xea, 0x77, 0xe4, 0xfa, 0x13, 0xdd, 0x1f, 0xe3, 0xc4, 0x4a, 0x05, 0xf1, 0x53, 0xcd, 0x73, 0x5c, + 0x2d, 0x90, 0x85, 0xff, 0xe9, 0xcd, 0xa5, 0x9d, 0xf5, 0x48, 0x26, 0x27, 0x10, 0x0f, 0x8a, 0x36, + 0x60, 0x18, 0x65, 0xa6, 0xb1, 0xcc, 0x3c, 0x7f, 0x23, 0x6e, 0xde, 0x9d, 0xf0, 0x5f, 0x09, 0x93, + 0x22, 0x24, 0x7c, 0xbf, 0x08, 0xcc, 0xf5, 0x6a, 0xd7, 0x23, 0xf4, 0xee, 0x85, 0x8e, 0x36, 0xb5, + 0x2c, 0x79, 0xd3, 0xda, 0xb2, 0x76, 0x13, 0x7d, 0x2e, 0x94, 0xff, 0x03, 0x3c, 0x54, 0x66, 0x9d, + 0x1b, 0x6f, 0x5d, 0x0c, 0xf0, 0x34, 0xe2, 0xe3, 0x0c, 0xb2, 0x0a, 0xdd, 0x63, 0xdd, 0xcb, 0x2a, + 0x9b, 0xb1, 0x5f, 0xec, 0xcc, 0x48, 0x4e, 0xdf, 0x1a, 0x8e, 0x73, 0x76, 0x6e, 0x8a, 0x7a, 0x08, + 0x90, 0xab, 0xed, 0x7d, 0x0b, 0x76, 0x64, 0xba, 0x92, 0x25, 0xd9, 0xb6, 0xa9, 0x11, 0x29, 0x82, + 0xa0, 0x3c, 0xe3, 0x12, 0xd8, 0x5d, 0x74, 0x50, 0x91, 0xe7, 0xc3, 0xe1, 0xc5, 0x31, 0x8c, 0x47, + 0x04, 0x11, 0x70, 0x30, 0x08, 0x97, 0x67, 0xf4, 0xac, 0x51, 0x22, 0xe6, 0x65, 0x21, 0x05, 0x1d, + 0xf0, 0xa1, 0xc4, 0x56, 0x9a, 0xff, 0xb9, 0xd5, 0xd7, 0xb9, 0x98, 0xaa, 0xec, 0x5d, 0x89, 0xd5, + 0x3f, 0x43, 0x62, 0xcb, 0x7c, 0xe0, 0x9e, 0xc5, 0xf5, 0x78, 0x8a, 0x63, 0x57, 0xb5, 0xc7, 0x83, + 0x8b, 0x08, 0x0e, 0x5c, 0xf8, 0x78, 0x0f, 0xb7, 0x09, 0xce, 0x86, 0x15, 0x11, 0xd0, 0x26, 0x81, + 0x95, 0xf5, 0x14, 0x19, 0x03, 0xa4, 0x8f, 0xda, 0xf7, 0x4f, 0x23, 0x60, 0x0b, 0xcb, 0xfa, 0x04, + 0xbb, 0x05, 0x86, 0xbd, 0x17, 0xb7, 0xd7, 0x90, 0x3e, 0x6d, 0xe2, 0x7e, 0xc4, 0x3c, 0xa6, 0x1c, + 0x5d, 0x76, 0x2a, 0x8f, 0xb0, 0xfe, 0x78, 0x7d, 0xf6, 0x67, 0xc4, 0x2d, 0x2e, 0x68, 0x75, 0x5c, + 0xce, 0xd1, 0xa7, 0xc8, 0xf7, 0xef, 0x34, 0xfd, 0x1c, 0x53, 0x94, 0x5f, 0x7a, 0x0b, 0xd2, 0x1b, + 0xba, 0xb3, 0xfe, 0xdb, 0x2c, 0x24, 0xdc, 0xce, 0xc2, 0x82, 0x3d, 0x69, 0xb1, 0x45, 0x20, 0x8e, + 0x94, 0x00, 0xb0, 0xc8, 0x13, 0x8c, 0x08, 0x92, 0x90, 0xed, 0x2d, 0xcf, 0xc8, 0xd7, 0xd1, 0xe4, + 0x1c, 0xad, 0x4f, 0x4d, 0xf8, 0xdc, 0x50, 0x5c, 0xdb, 0x05, 0x43, 0x06, 0xc7, 0x19, 0x1e, 0x81, + 0xa3, 0x73, 0x9a, 0xd2, 0xe3, 0xcb, 0x08, 0xca, 0xd3, 0xd4, 0x2a, 0xf3, 0x2e, 0x14, 0x80, 0x2c, + 0x81, 0x08, 0xd2, 0xde, 0x65, 0xbe, 0x48, 0xdf, 0x7c, 0x8d, 0x02, 0x9c, 0x3e, 0xc1, 0x9d, 0x85, + 0x28, 0xb3, 0xea, 0x5b, 0x99, 0x90, 0x30, 0x43, 0x25, 0xe5, 0x65, 0x67, 0x5f, 0x65, 0xdc, 0x76, + 0x9e, 0x66, 0xae, 0x4e, 0x2e, 0x08, 0x3e, 0xd8, 0xbf, 0x55, 0x7c, 0xb1, 0x1a, 0x05, 0xaf, 0xb0, + 0x53, 0xe9, 0xdd, 0xe1, 0x94, 0x9e, 0x86, 0xe9, 0x6d, 0x3f, 0xf4, 0x0e, 0xf9, 0xd2, 0x11, 0xe1, + 0x30, 0x42, 0x82, 0x3b, 0x29, 0xab, 0xc9, 0x76, 0x9b, 0x14, 0xc2, 0x6e, 0x9c, 0x0d, 0x12, 0xa7, + 0x4e, 0x30, 0x92, 0x15, 0x3e, 0x25, 0xa5, 0xd7, 0x2d, 0xa6, 0x28, 0xcc, 0x08, 0x29, 0x02, 0xf2, + 0xb5, 0x64, 0x55, 0x11, 0x00, 0xa1, 0xce, 0x26, 0x27, 0x18, 0xa8, 0xbb, 0xcf, 0x03, 0x22, 0x0c, + 0x99, 0x34, 0xa5, 0x04, 0xac, 0xd8, 0x79, 0xbd, 0x43, 0xcc, 0x3c, 0xf5, 0x5d, 0x00, 0x12, 0x4d, + 0xc6, 0x1a, 0x92, 0xc2, 0x37, 0x86, 0xea, 0xe6, 0x0d, 0x67, 0x96, 0xfe, 0xcc, 0xdb, 0xcb, 0x44, + 0x45, 0x87, 0xa5, 0xd6, 0xec, 0x0b, 0x57, 0x6d, 0xb6, 0xdf, 0xe1, 0x44, 0x3f, 0x84, 0xbc, 0xd9, + 0xb0, 0x49, 0x5b, 0xb6, 0xfa, 0x12, 0xb3, 0x3e, 0x73, 0xbf, 0x6d, 0x7b, 0x09, 0x68, 0xf6, 0x69, + 0xfc, 0xa0, 0x93, 0x50, 0x34, 0xdd, 0xc7, 0x13, 0x97, 0xa2, 0xe4, 0x14, 0x75, 0x9a, 0xe1, 0xb4, + 0xcb, 0xf1, 0xd2, 0x2e, 0xa6, 0x45, 0x82, 0x82, 0xd0, 0x08, 0xd0, 0xd5, 0x0f, 0x87, 0xc1, 0xf8, + 0x03, 0x9e, 0xbb, 0x0a, 0x67, 0x59, 0xbc, 0xec, 0xd4, 0xf9, 0x51, 0x88, 0x6b, 0xf3, 0xbd, 0xa1, + 0x56, 0x13, 0xac, 0x21, 0x75, 0x92, 0xd9, 0xc6, 0x5b, 0xaf, 0x4a, 0xb8, 0xaa, 0xa4, 0x4e, 0x3e, + 0xca, 0x98, 0xc9, 0x8d, 0xab, 0xb7, 0x52, 0x5e, 0x67, 0xb5, 0xea, 0xa1, 0x9e, 0xd0, 0x05, 0x84, + 0x57, 0xb7, 0x92, 0x57, 0xdd, 0xcc, 0xe7, 0x37, 0x14, 0xd9, 0x28, 0x97, 0x87, 0xff, 0x2f, 0x0a, + 0xf7, 0x57, 0x79, 0x19, 0x60, 0x7f, 0x61, 0x2d, 0x96, 0x69, 0x36, 0x16, 0x35, 0x33, 0xb2, 0xde, + 0x17, 0xb1, 0xa1, 0xcc, 0x87, 0xa6, 0x55, 0xc3, 0x6b, 0xa3, 0x5d, 0x04, 0x5e, 0xbc, 0xc9, 0x12, + 0x21, 0x6d, 0xee, 0xd7, 0x20, 0x69, 0x57, 0x3a, 0xca, 0xc2, 0xe4, 0xd4, 0x8f, 0x14, 0xc1, 0xa7, + 0xec, 0x24, 0xe9, 0xba, 0x5d, 0xfa, 0x84, 0x1b, 0xfb, 0x6e, 0xa5, 0x1a, 0xd5, 0xf3, 0x98, 0xcc, + 0xe3, 0xb6, 0x3b, 0x79, 0x1f, 0xbc, 0x9d, 0xa2, 0xd2, 0x63, 0x9c, 0x74, 0xa1, 0x34, 0x96, 0x82, + 0x35, 0xfc, 0x06, 0x27, 0x2e, 0x77, 0x50, 0xd6, 0x5f, 0x26, 0xd8, 0x9f, 0xd3, 0x0d, 0x2b, 0xe7, + 0xde, 0x4b, 0xe4, 0x34, 0xb8, 0x4d, 0x2b, 0x9e, 0x7f, 0xd4, 0xf8, 0x66, 0x82, 0x92, 0x95, 0x62, + 0x7a, 0x0c, 0x2e, 0x21, 0x2f, 0xb8, 0x4a, 0x17, 0xeb, 0xa4, 0x9d, 0xac, 0x19, 0x13, 0x9d, 0x60, + 0xb7, 0x1a, 0x29, 0xcf, 0x8f, 0x7c, 0x56, 0xe8, 0x57, 0x8a, 0x4a, 0xd6, 0xf7, 0x93, 0x39, 0x38, + 0xc9, 0xbb, 0xb5, 0x36, 0xfe, 0x14, 0xf3, 0x8a, 0xd1, 0x8d, 0x42, 0x18, 0x05, 0xe3, 0xa9, 0x7f, + 0xa7, 0xac, 0x82, 0x21, 0x47, 0x32, 0xda, 0x04, 0x5a, 0x0c, 0x15, 0x55, 0xde, 0x85, 0xd6, 0xcd, + 0x41, 0x93, 0x92, 0x0e, 0x32, 0xf7, 0x0d, 0x62, 0x95, 0x73, 0x0f, 0x81, 0xbe, 0x8c, 0x15, 0xa2, + 0x27, 0x6b, 0x9f, 0xb2, 0xd8, 0xc0, 0x47, 0x05, 0xc5, 0xbc, 0xb9, 0xb1, 0x68, 0x96, 0x54, 0x16, + 0xf0, 0xfd, 0x7e, 0xb0, 0x40, 0x3e, 0x0f, 0xb4, 0x12, 0x66, 0x49, 0x8a, 0x12, 0xfc, 0xed, 0xe5, + 0xfd, 0x7c, 0x1d, 0xab, 0x0a, 0xe0, 0xb7, 0x47, 0x10, 0x5f, 0x9a, 0x3a, 0x43, 0x5c, 0x30, 0xd6, + 0x4f, 0xd1, 0x4a, 0x0b, 0x58, 0x76, 0x27, 0xb8, 0x4d, 0x34, 0x93, 0xe8, 0x6f, 0x91, 0x96, 0x61, + 0x3b, 0xf0, 0xd4, 0xb1, 0x6b, 0x18, 0x42, 0x4b, 0xbe, 0x50, 0x0a, 0x9c, 0xc4, 0x3e, 0x71, 0x6c, + 0xef, 0x5f, 0x19, 0x02, 0x78, 0x3b, 0x2b, 0x7c, 0x7f, 0xd8, 0x88, 0x6a, 0xe4, 0xd4, 0x72, 0x83, + 0x60, 0x85, 0xc0, 0x0e, 0xb4, 0xa9, 0x09, 0xc9, 0xe0, 0xb6, 0x51, 0xd9, 0x25, 0x05, 0x30, 0x31, + 0x22, 0x7a, 0x2b, 0x3c, 0x00, 0x83, 0xf2, 0xff, 0xa9, 0xd3, 0x9e, 0x80, 0xed, 0x46, 0xff, 0x46, + 0x0c, 0x20, 0xb2, 0x1c, 0x29, 0xf6, 0xdf, 0xc4, 0x12, 0xd3, 0x4e, 0xc6, 0xa2, 0xac, 0xe2, 0x46, + 0x07, 0x84, 0x35, 0xd1, 0x94, 0xe5, 0xda, 0x15, 0x78, 0x8e, 0x3b, 0xc4, 0x34, 0xf9, 0xe9, 0xaa, + 0xbf, 0x87, 0x97, 0xdc, 0x4b, 0x94, 0xe1, 0x29, 0x77, 0x54, 0xa3, 0x44, 0xc2, 0x91, 0x52, 0x6c, + 0xbf, 0xad, 0x5e, 0xf1, 0x7b, 0x44, 0xd9, 0xe9, 0x9a, 0x0e, 0x90, 0xa9, 0x8a, 0x63, 0x08, 0x4f, + 0x2f, 0xb2, 0x8c, 0x63, 0x24, 0x4b, 0xee, 0x9f, 0xb6, 0x59, 0xd7, 0x14, 0x5d, 0xc0, 0x3d, 0x0d, + 0x7b, 0x7e, 0x5e, 0xa7, 0x71, 0x63, 0x7f, 0x23, 0x45, 0x1e, 0x61, 0xcf, 0xca, 0xb8, 0x06, 0x3f, + 0x15, 0x03, 0xf0, 0x86, 0xd7, 0x94, 0x5b, 0x24, 0x55, 0xf6, 0xec, 0xb6, 0x43, 0x26, 0x8c, 0x57, + 0x19, 0x5f, 0x95, 0x9e, 0x96, 0x0b, 0x07, 0x7c, 0xfe, 0xbc, 0xe0, 0x21, 0x10, 0x87, 0xe5, 0xfc, + 0x4d, 0xc5, 0x0b, 0x7e, 0x21, 0x28, 0x1d, 0xa0, 0xd8, 0x82, 0xc8, 0xb5, 0xab, 0x9e, 0xa9, 0x92, + 0x27, 0xdf, 0xc1, 0x03, 0x5d, 0xde, 0x4a, 0x64, 0xae, 0xb2, 0x5d, 0x00, 0x52, 0x58, 0xf0, 0xba, + 0x37, 0x8a, 0x31, 0xf7, 0xa4, 0xb0, 0x06, 0xda, 0x69, 0xd9, 0xa3, 0x0a, 0xba, 0x32, 0x9a, 0xba, + 0x72, 0xe4, 0x49, 0xb7, 0x57, 0x51, 0xf3, 0x07, 0xb5, 0x54, 0x73, 0x59, 0xa8, 0xa0, 0x53, 0x94, + 0x10, 0x8b, 0xad, 0x7b, 0x29, 0x2d, 0x84, 0x34, 0x64, 0x8b, 0x54, 0x7a, 0x61, 0xb2, 0x40, 0x39, + 0x5c, 0x0b, 0xb9, 0x50, 0xac, 0xca, 0x74, 0x9c, 0x4d, 0x6d, 0x5b, 0x5a, 0x11, 0x92, 0x64, 0xf3, + 0x71, 0x4f, 0x68, 0xee, 0x5e, 0x94, 0xc7, 0xe2, 0xa6, 0x98, 0x6a, 0x22, 0x5f, 0x1b, 0x43, 0x0e, + 0x32, 0x61, 0xf3, 0x5a, 0xf6, 0x49, 0x40, 0xc0, 0xab, 0x7e, 0x3b, 0xa7, 0x08, 0xb5, 0xa8, 0x2d, + 0xb9, 0x35, 0x10, 0xef, 0xce, 0x1a, 0x64, 0x61, 0x46, 0xfb, 0x02, 0x7e, 0x72, 0x11, 0x38, 0x02, + 0xf4, 0x0d, 0x14, 0xfd, 0xc8, 0xd3, 0x32, 0xa9, 0xf0, 0x50, 0xef, 0x25, 0x7e, 0x8c, 0x92, 0xfb, + 0xaf, 0x19, 0xad, 0x69, 0x54, 0xcd, 0xcb, 0x58, 0x52, 0xc8, 0x8d, 0x95, 0x91, 0x78, 0x31, 0x0d, + 0x48, 0x01, 0x9a, 0x5c, 0x32, 0xec, 0xb3, 0xb5, 0x81, 0x60, 0xf6, 0x5d, 0x39, 0xe1, 0x18, 0xd4, + 0x47, 0xfb, 0xb0, 0x1f, 0x48, 0x28, 0xa1, 0xbb, 0x46, 0xae, 0x9b, 0x81, 0xf5, 0xee, 0x30, 0xf3, + 0x85, 0x81, 0x40, 0x89, 0x53, 0x41, 0x42, 0xa5, 0x2f, 0xf6, 0xb0, 0x9d, 0x6d, 0x90, 0x7e, 0xb7, + 0x91, 0x86, 0x3a, 0xe4, 0xf1, 0xea, 0x84, 0x87, 0xfd, 0xf8, 0x5a, 0xe5, 0x9d, 0xad, 0x05, 0xd3, + 0x32, 0x2d, 0x52, 0xb9, 0xee, 0xab, 0x71, 0x8c, 0xbd, 0x32, 0x3f, 0xa4, 0xe7, 0x93, 0xdf, 0x19, + 0x38, 0x5c, 0x17, 0x64, 0x22, 0x68, 0xe6, 0xfe, 0xef, 0x28, 0xfe, 0x35, 0x1a, 0xc9, 0xf6, 0x0f, + 0x28, 0x4b, 0x69, 0xe4, 0xb1, 0xfb, 0x71, 0x72, 0x0e, 0xce, 0xa3, 0x2e, 0xc4, 0x66, 0xb6, 0xdc, + 0x5b, 0x2e, 0xb2, 0xea, 0xd3, 0xfe, 0x18, 0xc2, 0xbc, 0x98, 0xb7, 0xae, 0x2f, 0x57, 0x52, 0x3f, + 0x73, 0x9e, 0x7a, 0x4e, 0xb5, 0x19, 0xe8, 0x53, 0xf3, 0x20, 0x50, 0xc1, 0xcf, 0x2b, 0x95, 0xa9, + 0x3a, 0xeb, 0xf4, 0x3b, 0x63, 0x1d, 0xb8, 0x00, 0x34, 0x6c, 0xfb, 0x45, 0x66, 0xcb, 0xec, 0x65, + 0xfe, 0xc9, 0x71, 0x31, 0xe7, 0xe8, 0xc3, 0xa6, 0x97, 0x09, 0x88, 0xca, 0xcb, 0x3b, 0xea, 0x27, + 0x5e, 0x68, 0xad, 0x5a, 0x7a, 0xa9, 0x78, 0xb2, 0x62, 0x7d, 0x1e, 0xad, 0x1c, 0xf0, 0x86, 0xca, + 0xd6, 0xc8, 0x5f, 0xeb, 0x68, 0xbe, 0x0a, 0xcb, 0x32, 0x14, 0xe7, 0xcd, 0x15, 0xcf, 0xe6, 0xe4, + 0x50, 0xdc, 0x95, 0xb5, 0xbd, 0xd1, 0x65, 0x57, 0x88, 0x5c, 0xc3, 0xad, 0x54, 0x54, 0xba, 0xcb, + 0xd7, 0x33, 0x4a, 0xe8, 0x8c, 0xa4, 0x2d, 0xb2, 0xd6, 0xaf, 0x90, 0x1d, 0x7c, 0x84, 0x89, 0x47, + 0x44, 0x8e, 0x71, 0x08, 0xc2, 0xab, 0x8e, 0xd3, 0x92, 0x1c, 0xf7, 0xa6, 0xb5, 0xd6, 0x36, 0x84, + 0x94, 0x47, 0x64, 0xfd, 0xfb, 0xe5, 0x42, 0x89, 0x50, 0xa7, 0xf8, 0x0d, 0x27, 0x42, 0x15, 0xc8, + 0xfd, 0x8d, 0x9e, 0x7a, 0x83, 0xd7, 0xfb, 0x61, 0x6a, 0xab, 0x08, 0x84, 0x28, 0x48, 0xfe, 0x3e, + 0x39, 0x48, 0xd5, 0x16, 0xd0, 0x9f, 0xbd, 0x7d, 0x19, 0x01, 0xd5, 0x49, 0x83, 0xcd, 0x89, 0x44, + 0xdb, 0x51, 0x88, 0x2f, 0xbd, 0x24, 0x20, 0x2c, 0xa7, 0xc7, 0x70, 0xba, 0x03, 0x43, 0x4a, 0xbd, + 0x97, 0x0b, 0x93, 0x7a, 0x09, 0xe8, 0x4f, 0xbb, 0x07, 0x79, 0x14, 0x72, 0x69, 0xe3, 0x42, 0xe3, + 0x16, 0x06, 0xac, 0x14, 0xd5, 0xe5, 0x82, 0x8b, 0x94, 0x1d, 0xb0, 0xb0, 0xf2, 0xcd, 0x74, 0x58, + 0x90, 0x59, 0x3c, 0x33, 0x19, 0x1a, 0xfa, 0xe6, 0x88, 0x5e, 0x22, 0xa4, 0x7c, 0x09, 0xd3, 0x98, + 0xed, 0xcc, 0x69, 0xbd, 0xe0, 0x68, 0x61, 0xfc, 0x8d, 0x53, 0x94, 0x47, 0xa0, 0x8b, 0x95, 0xd4, + 0xf6, 0xf8, 0x0f, 0xe2, 0xbd, 0xf3, 0xb7, 0xdc, 0x13, 0x3a, 0x60, 0xbc, 0xf2, 0x4e, 0x07, 0x5a, + 0xd3, 0xe0, 0x88, 0x43, 0x48, 0xab, 0x4b, 0xf6, 0xb2, 0x27, 0x65, 0x82, 0x46, 0x26, 0x9e, 0x6f, + 0xab, 0xdc, 0x9c, 0x80, 0x8d, 0x19, 0x8e, 0x0a, 0x9d, 0xb9, 0x51, 0xeb, 0x3d, 0xd7, 0x6b, 0x7e, + 0x23, 0x96, 0x73, 0x00, 0xc4, 0xbf, 0x74, 0x6d, 0xd6, 0x1d, 0xd3, 0xea, 0x8f, 0xc9, 0x0d, 0xd6, + 0x38, 0x3b, 0x4e, 0x0b, 0x4a, 0x0e, 0xaa, 0x86, 0x7d, 0x06, 0xab, 0xb6, 0xe0, 0x49, 0xcf, 0xd6, + 0xc0, 0x5c, 0x26, 0x1b, 0x3e, 0xaa, 0xdf, 0x26, 0xf4, 0x2f, 0x69, 0xd9, 0x31, 0x97, 0xe8, 0xfd, + 0xcc, 0x3b, 0xd1, 0x75, 0x7e, 0x15, 0xaa, 0xd3, 0xe2, 0xea, 0x9c, 0x3b, 0x5f, 0x23, 0x27, 0x45, + 0x3a, 0x43, 0xef, 0x07, 0x68, 0x7c, 0xa5, 0x96, 0x0a, 0x4e, 0x52, 0x5a, 0x08, 0x30, 0xcb, 0x47, + 0xa9, 0x6b, 0xdd, 0xb6, 0x21, 0x1b, 0xa6, 0x6e, 0x36, 0xa4, 0x02, 0xe0, 0x43, 0xe4, 0xb4, 0x66, + 0xc7, 0x63, 0x46, 0xb0, 0x13, 0x88, 0xd0, 0x92, 0x72, 0xb9, 0xe7, 0xc1, 0xc7, 0xbc, 0xd3, 0xc6, + 0xe9, 0xdd, 0x56, 0x67, 0x6e, 0x0a, 0x51, 0x6b, 0x3c, 0xd7, 0x3a, 0x54, 0xa6, 0x1e, 0x0a, 0x14, + 0xa7, 0xa7, 0xa9, 0x2a, 0xcd, 0x7b, 0x9f, 0x5c, 0x40, 0x06, 0xe9, 0xee, 0x85, 0x15, 0x41, 0xdd, + 0xb4, 0x60, 0x2d, 0xab, 0x56, 0x29, 0x9a, 0xd2, 0x32, 0x41, 0x66, 0x73, 0xa2, 0x4f, 0x50, 0x17, + 0x5a, 0xd4, 0xd1, 0x8a, 0xf4, 0x60, 0x56, 0x49, 0xf5, 0x2d, 0xf9, 0xc4, 0xfd, 0x62, 0x9f, 0xf7, + 0x50, 0xe6, 0xc4, 0xc5, 0x3e, 0x39, 0x58, 0xbb, 0xc5, 0xd2, 0xea, 0x8b, 0x8b, 0xaf, 0xc2, 0x3d, + 0xd7, 0xb3, 0x6b, 0xcf, 0x09, 0xf0, 0xf6, 0x5e, 0x44, 0x87, 0x48, 0x2a, 0xe4, 0x82, 0x66, 0x16, + 0x4b, 0x64, 0x22, 0x59, 0x62, 0x65, 0x1b, 0x7d, 0x6b, 0x63, 0xf3, 0x0d, 0x8f, 0x77, 0x66, 0x02, + 0x67, 0xc4, 0xcb, 0x90, 0x23, 0x48, 0x4f, 0x9c, 0x31, 0x28, 0x39, 0x5f, 0x16, 0x7e, 0x4d, 0x3c, + 0x59, 0xc6, 0x09, 0x56, 0x11, 0xdf, 0xd9, 0x02, 0x50, 0x42, 0x8b, 0x09, 0x7a, 0xd0, 0x06, 0xe1, + 0xb4, 0xda, 0x48, 0x78, 0x4c, 0x51, 0x04, 0xac, 0x5a, 0x80, 0x2c, 0xd8, 0x7f, 0xff, 0x72, 0xc8, + 0x36, 0x27, 0x54, 0x7a, 0xde, 0x55, 0xae, 0x41, 0xf0, 0x77, 0x8e, 0xb6, 0x56, 0x10, 0x08, 0xee, + 0x8c, 0xa0, 0x8a, 0x69, 0xa4, 0x3d, 0x33, 0x0e, 0xa1, 0x5b, 0x31, 0x8c, 0xa6, 0x04, 0x9e, 0x7d, + 0xfb, 0x2a, 0xeb, 0xb3, 0xf3, 0xb6, 0x1d, 0x82, 0x55, 0xc5, 0x5b, 0x12, 0xc5, 0x5f, 0xa6, 0x50, + 0x8a, 0xa2, 0x5c, 0x18, 0x35, 0x65, 0xa9, 0x7b, 0x94, 0x48, 0x2d, 0xbf, 0x7c, 0x4b, 0x95, 0x91, + 0x01, 0xa2, 0xc4, 0x44, 0x44, 0xef, 0xe2, 0x1a, 0x62, 0x0b, 0x44, 0xaf, 0x7a, 0xb4, 0x1c, 0xee, + 0x55, 0x39, 0x54, 0xc0, 0xe7, 0x1d, 0x85, 0x19, 0x39, 0x73, 0x42, 0xa9, 0x5c, 0x08, 0xd4, 0xc9, + 0xd9, 0xd9, 0x5b, 0xc8, 0x21, 0x92, 0x04, 0x82, 0xfd, 0x47, 0x33, 0xc6, 0xe0, 0x38, 0x76, 0xc9, + 0xe4, 0xcc, 0xa5, 0x8e, 0xd3, 0x95, 0xda, 0x51, 0x10, 0xf4, 0xcc, 0x9e, 0x4d, 0x67, 0x6d, 0xc2, + 0xc3, 0x4d, 0x43, 0x68, 0x2f, 0x0a, 0x72, 0x02, 0xa8, 0x67, 0x0e, 0x55, 0x72, 0xc4, 0xb6, 0x84, + 0xfa, 0xab, 0x45, 0x5e, 0x4c, 0x15, 0xa9, 0xd7, 0x83, 0xc2, 0x97, 0xf1, 0x84, 0xfd, 0xff, 0xcb, + 0x4b, 0xe2, 0xa8, 0xdd, 0x30, 0xa0, 0x1e, 0x27, 0xdb, 0x13, 0x3c, 0xf7, 0xf6, 0xbc, 0xf7, 0xec, + 0x94, 0x32, 0x10, 0xf6, 0x5a, 0x0d, 0x66, 0xfd, 0xd5, 0x5b, 0xf3, 0x31, 0x7c, 0x56, 0xe3, 0x8f, + 0xe2, 0xfd, 0x20, 0x69, 0xbd, 0x17, 0x77, 0x01, 0x0d, 0x2a, 0xe0, 0xf5, 0x6d, 0x06, 0x16, 0x17, + 0xa0, 0xa6, 0x3a, 0x4b, 0x9c, 0xc2, 0xcd, 0x0c, 0x60, 0x3d, 0xc3, 0xf8, 0x5b, 0xb4, 0x59, 0xa6, + 0x0c, 0x5d, 0x06, 0x94, 0x38, 0xed, 0x00, 0x27, 0x43, 0x4f, 0xd2, 0x7d, 0x2c, 0xad, 0xca, 0x03, + 0x9c, 0x3d, 0x3a, 0x37, 0xc4, 0x13, 0xeb, 0x30, 0xa3, 0xc3, 0x51, 0x97, 0xa3, 0xfc, 0x73, 0x2b, + 0xca, 0x2b, 0xf5, 0x36, 0x4a, 0x8a, 0x02, 0x62, 0xee, 0x48, 0x0c, 0x84, 0x92, 0x1f, 0x56, 0xdf, + 0x99, 0x19, 0x8e, 0x25, 0x2b, 0x80, 0x91, 0xe4, 0xae, 0x2d, 0xc4, 0xbb, 0xb2, 0x3b, 0x6a, 0x28, + 0x34, 0x75, 0x09, 0xc0, 0x57, 0x4c, 0x2b, 0x71, 0xf4, 0x17, 0x6c, 0x92, 0x2b, 0x22, 0x4f, 0x59, + 0x48, 0x68, 0xe4, 0x68, 0xf5, 0xb8, 0x7d, 0xbe, 0x98, 0xed, 0x78, 0xc1, 0xc6, 0x1d, 0x95, 0x3f, + 0x55, 0x31, 0x98, 0x87, 0x1e, 0xe8, 0xba, 0x83, 0x9a, 0xf5, 0xb0, 0x41, 0x22, 0xc7, 0x0b, 0x3d, + 0xf7, 0xcd, 0x1d, 0x2c, 0x95, 0xf3, 0xe0, 0x9c, 0xae, 0x24, 0x21, 0xc3, 0xb2, 0xed, 0x0a, 0xe5, + 0xda, 0x80, 0xd7, 0x4b, 0xb1, 0x26, 0x7b, 0x92, 0x4e, 0xda, 0xc0, 0x1a, 0x68, 0x06, 0x5a, 0x1c, + 0x2a, 0x14, 0xfe, 0x40, 0x90, 0x02, 0x2f, 0x51, 0xe7, 0x8c, 0xfc, 0x69, 0x4b, 0x7e, 0xd8, 0x71, + 0xc6, 0xe2, 0x73, 0xd1, 0x66, 0x7c, 0x0b, 0x0c, 0xd7, 0x0f, 0x21, 0x6a, 0xae, 0xe9, 0xeb, 0x4c, + 0x80, 0x85, 0x20, 0xec, 0x1a, 0xee, 0x77, 0xdf, 0x84, 0x3b, 0x78, 0x1f, 0x72, 0x1d, 0x42, 0xbf, + 0xe7, 0x61, 0x56, 0x48, 0x1c, 0x00, 0x64, 0xee, 0x0b, 0x9d, 0x5f, 0xa8, 0xf4, 0x1c, 0xca, 0xef, + 0x77, 0xea, 0x9c, 0x58, 0xc1, 0x54, 0xb2, 0x7a, 0xa7, 0xf4, 0x9d, 0xfd, 0xa0, 0xe7, 0x61, 0x78, + 0xb4, 0xd2, 0xc6, 0xa9, 0xeb, 0xe8, 0x78, 0x93, 0x75, 0x2d, 0x8a, 0x94, 0x9a, 0x5a, 0xe0, 0x1f, + 0x61, 0x9f, 0xe5, 0x61, 0x47, 0x91, 0xd5, 0xc4, 0x52, 0xd4, 0x76, 0x06, 0x0b, 0xeb, 0x5a, 0x04, + 0x95, 0xd5, 0x97, 0xcc, 0x4b, 0x3f, 0x0f, 0x7b, 0xb8, 0xc2, 0xa2, 0xf2, 0x78, 0x6a, 0xde, 0xc6, + 0x77, 0xc1, 0x87, 0x44, 0x4f, 0x64, 0x3a, 0x2d, 0xfc, 0x53, 0xe1, 0x4f, 0x46, 0x7a, 0x8c, 0x90, + 0x3f, 0x3c, 0xb8, 0xa7, 0x68, 0xc5, 0x26, 0xc2, 0x35, 0xcc, 0xcf, 0x24, 0x08, 0xc5, 0xe6, 0xe9, + 0x48, 0x5e, 0xbf, 0x22, 0xde, 0xdb, 0x6a, 0x5a, 0x83, 0xb6, 0x2a, 0xd2, 0xd7, 0xb0, 0x0d, 0xef, + 0xbd, 0xd8, 0x95, 0x3a, 0xc9, 0x5a, 0xac, 0x3a, 0xc6, 0x87, 0xe5, 0x5b, 0x96, 0x20, 0x99, 0x24, + 0x82, 0x36, 0x22, 0xdf, 0xa7, 0x71, 0xc2, 0xb2, 0x58, 0xa5, 0x48, 0x17, 0xb7, 0x8f, 0x63, 0x83, + 0xbf, 0x81, 0x6f, 0xfe, 0xb6, 0x12, 0x55, 0x41, 0x5e, 0x83, 0x1f, 0x38, 0x6e, 0x80, 0x6c, 0x90, + 0xa7, 0x3a, 0x0e, 0x68, 0x29, 0x4b, 0xcb, 0xce, 0xde, 0xb3, 0xea, 0x36, 0x18, 0xe7, 0xa5, 0xc9, + 0x0c, 0x1a, 0x70, 0x10, 0xc7, 0xeb, 0x2a, 0x01, 0x54, 0x37, 0x65, 0x57, 0x8c, 0xbd, 0x81, 0xe5, + 0x6a, 0x80, 0x30, 0xf7, 0x0e, 0x85, 0x3e, 0x3e, 0x37, 0x87, 0xac, 0x40, 0x90, 0x01, 0xa7, 0x98, + 0xe5, 0x6e, 0x7b, 0x82, 0x13, 0x73, 0xb7, 0xd0, 0xe8, 0x41, 0xea, 0xe3, 0x76, 0x07, 0x25, 0x7c, + 0xc8, 0x7c, 0x8a, 0x0f, 0xf2, 0x93, 0x3c, 0x80, 0x69, 0xd9, 0x7b, 0xc8, 0xeb, 0x05, 0x17, 0x96, + 0xd8, 0x6c, 0x4c, 0x89, 0x9f, 0x89, 0x47, 0x7a, 0xb4, 0xef, 0xec, 0x0f, 0x6f, 0xa9, 0xca, 0x19, + 0x2d, 0x52, 0xa1, 0xc3, 0xd3, 0xee, 0x5a, 0x9a, 0x79, 0x25, 0x6f, 0xa9, 0xb3, 0xbc, 0x4f, 0x7b, + 0x3f, 0x88, 0xad, 0x36, 0xe9, 0xdc, 0x25, 0xea, 0xbd, 0xd0, 0xcd, 0x4c, 0x76, 0x8c, 0x7e, 0x4d, + 0xef, 0xbd, 0x8f, 0x39, 0xc2, 0x28, 0xe1, 0x3f, 0x2e, 0x46, 0xa1, 0xb6, 0x97, 0xe7, 0x8f, 0x5f, + 0x23, 0xee, 0xc8, 0x76, 0x12, 0x03, 0x4a, 0xd2, 0xdb, 0x82, 0x69, 0x7a, 0xdc, 0x99, 0x19, 0x76, + 0xfe, 0x31, 0x09, 0xcc, 0xbf, 0x8f, 0x70, 0x35, 0xff, 0x39, 0xac, 0x5c, 0x8d, 0x13, 0xf2, 0x74, + 0x20, 0x2f, 0x7f, 0xab, 0x9c, 0xed, 0xdc, 0x5f, 0x15, 0xe1, 0x65, 0xb7, 0x22, 0xf7, 0x17, 0x17, + 0x20, 0xe2, 0xa7, 0x7d, 0xd1, 0x0f, 0x88, 0xe1, 0x27, 0xbc, 0x64, 0x8d, 0xad, 0xe0, 0xc4, 0xe0, + 0x64, 0x02, 0x1e, 0x08, 0xf3, 0x9d, 0x10, 0xfa, 0xea, 0x23, 0xea, 0x85, 0x45, 0x7c, 0xf1, 0x83, + 0xab, 0xcd, 0x97, 0xaf, 0xf8, 0x96, 0x56, 0x7c, 0xb6, 0x54, 0x64, 0x7c, 0x45, 0xbf, 0xc5, 0x35, + 0xba, 0xa9, 0x66, 0x27, 0x78, 0x24, 0xfe, 0x16, 0xf1, 0xc5, 0x21, 0x57, 0x4a, 0x7f, 0x7c, 0x43, + 0x18, 0xc3, 0x98, 0xf7, 0x03, 0x3f, 0xfb, 0x0d, 0xb9, 0xcf, 0x9f, 0x61, 0x5c, 0x04, 0x39, 0xad, + 0x12, 0xb2, 0xdb, 0x27, 0x64, 0x2f, 0x0e, 0x5f, 0x56, 0x50, 0xe1, 0x6a, 0x17, 0xd0, 0xb2, 0xf4, + 0x1c, 0x45, 0x98, 0x92, 0x9e, 0x9b, 0xa5, 0x14, 0x00, 0xa0, 0x5d, 0x84, 0x9c, 0x8a, 0x3e, 0xe5, + 0xaa, 0xa0, 0x11, 0x28, 0xcd, 0xe7, 0xf9, 0x6e, 0x67, 0x8d, 0x76, 0xc5, 0xe4, 0x08, 0x35, 0x90, + 0xd3, 0xbf, 0xb7, 0x74, 0x87, 0x8f, 0xe8, 0x5a, 0x61, 0x8d, 0x72, 0xbf, 0x6a, 0x77, 0x9c, 0x3c, + 0x78, 0x6d, 0xf0, 0xb2, 0x7b, 0x8e, 0xf0, 0x45, 0x34, 0xf4, 0x16, 0x7b, 0x1d, 0x5c, 0x5c, 0x84, + 0x08, 0x0c, 0x44, 0xbe, 0xd4, 0xb9, 0x93, 0x28, 0x04, 0x4c, 0x00, 0xf4, 0x5b, 0xb0, 0x1c, 0x73, + 0x69, 0x5e, 0x4d, 0x7c, 0x40, 0x1c, 0xf7, 0x92, 0x66, 0xaa, 0xb9, 0x70, 0xd5, 0x2a, 0x0d, 0x12, + 0x8d, 0xef, 0x40, 0x3c, 0x95, 0x2c, 0xb0, 0x30, 0x4d, 0x1e, 0x86, 0xd4, 0x4d, 0xb7, 0xa5, 0x1a, + 0x08, 0xc7, 0x1d, 0x24, 0x09, 0x32, 0x60, 0x24, 0x71, 0xdf, 0xb8, 0xc2, 0x82, 0x5a, 0x24, 0x61, + 0x1e, 0x43, 0x4b, 0x49, 0x89, 0x92, 0xea, 0xa9, 0x77, 0x5a, 0x31, 0x54, 0x52, 0xd0, 0x76, 0xb6, + 0xcc, 0x11, 0x13, 0xcd, 0xa0, 0x16, 0xe5, 0xc4, 0xb8, 0x61, 0x04, 0xc1, 0x50, 0x34, 0xf0, 0x95, + 0x3a, 0x95, 0xdd, 0x01, 0x06, 0x4e, 0x14, 0x00, 0xdc, 0xdc, 0x30, 0x51, 0xe7, 0xdb, 0xc0, 0xbe, + 0x75, 0x12, 0x1e, 0x90, 0x61, 0xc5, 0x2e, 0xcc, 0x74, 0x2f, 0xa5, 0xf3, 0xfb, 0xeb, 0xe3, 0xf1, + 0xe8, 0x3d, 0x54, 0xe0, 0x4d, 0xb1, 0x7c, 0x75, 0x6b, 0x83, 0x71, 0x84, 0xcc, 0xab, 0xef, 0x3c, + 0xec, 0x8e, 0x34, 0xb5, 0x8a, 0xe7, 0xf0, 0x20, 0x41, 0x38, 0xb2, 0x0d, 0x4c, 0x5d, 0x20, 0x3c, + 0x2c, 0xdd, 0xf0, 0xc0, 0xe6, 0x36, 0xe4, 0xb7, 0x3e, 0xa0, 0x34, 0x71, 0xa6, 0x4e, 0x3d, 0x0d, + 0x3f, 0x94, 0xb7, 0x27, 0x72, 0x85, 0x8b, 0x2c, 0x91, 0x9e, 0x5a, 0x2e, 0x36, 0x00, 0xe1, 0x64, + 0xe1, 0x2c, 0x4a, 0xe9, 0xec, 0x07, 0xa6, 0x5e, 0x86, 0x01, 0xc4, 0x87, 0x0b, 0xb5, 0xaf, 0xc2, + 0xe2, 0x8b, 0x08, 0x31, 0xd7, 0xc1, 0xee, 0x80, 0x7f, 0x1f, 0x74, 0xbd, 0x97, 0xff, 0x34, 0xc9, + 0x70, 0x64, 0x2b, 0x0c, 0x56, 0x21, 0x6b, 0xc5, 0x11, 0xd6, 0x7d, 0x8f, 0xfa, 0x29, 0xfa, 0x8f, + 0xfd, 0xa3, 0xdf, 0xaf, 0x5e, 0xa9, 0xca, 0x21, 0x92, 0xa0, 0x5b, 0x50, 0x21, 0x95, 0xcb, 0xee, + 0x29, 0xb9, 0x89, 0xdf, 0xc6, 0x02, 0x35, 0x68, 0x9c, 0x8c, 0xbf, 0x62, 0xe9, 0x2d, 0x2c, 0x7e, + 0xd1, 0xa6, 0x6a, 0x6e, 0xc4, 0xec, 0x5f, 0x55, 0x35, 0xd6, 0x95, 0xcb, 0xf4, 0x45, 0x0b, 0x0b, + 0x11, 0x78, 0x85, 0x30, 0xb3, 0xd8, 0xfe, 0x77, 0xe8, 0x46, 0x22, 0xd0, 0x72, 0xee, 0x69, 0x34, + 0x9d, 0x0a, 0x5f, 0xc3, 0xfc, 0xb8, 0xcc, 0xde, 0x7d, 0x37, 0xc7, 0x9c, 0x70, 0x1f, 0x65, 0x24, + 0x8c, 0xca, 0x80, 0xc6, 0x79, 0xf9, 0xfe, 0x9a, 0xe8, 0x2a, 0x3b, 0xc8, 0x86, 0x3c, 0xed, 0x2d, + 0x20, 0x53, 0x26, 0x7a, 0xf5, 0x2f, 0x4c, 0x7f, 0x4b, 0xa7, 0x10, 0x45, 0xdd, 0x25, 0x7e, 0x12, + 0x1c, 0x9f, 0x69, 0x29, 0x88, 0x43, 0x60, 0xde, 0x55, 0xa4, 0xc9, 0x43, 0x12, 0xc9, 0x5e, 0xf7, + 0xff, 0xf6, 0x54, 0xd9, 0x8b, 0x23, 0xa4, 0x92, 0xcd, 0xb6, 0x33, 0xc7, 0xbc, 0x2c, 0x57, 0xcc, + 0x43, 0x23, 0x74, 0x9a, 0x6c, 0x12, 0x48, 0xe3, 0x8f, 0x64, 0xf7, 0x2c, 0x39, 0x1b, 0x5c, 0x13, + 0x71, 0x53, 0x7a, 0x77, 0x87, 0xe5, 0x17, 0x10, 0x61, 0x1e, 0xb8, 0x71, 0x6a, 0x49, 0x52, 0x3c, + 0x69, 0xb3, 0x1e, 0xa3, 0x65, 0xf6, 0xe3, 0xf0, 0xaa, 0x8e, 0x13, 0x7e, 0xba, 0xea, 0x15, 0x03, + 0x22, 0x4e, 0x07, 0x91, 0x2b, 0x6d, 0x1d, 0x68, 0x2e, 0x27, 0x7e, 0xf8, 0x4f, 0xb6, 0x98, 0xaa, + 0xa2, 0x67, 0x49, 0x36, 0x1c, 0x1e, 0xbb, 0xf1, 0x2b, 0x55, 0x6b, 0xde, 0x7b, 0x02, 0x12, 0xea, + 0xd4, 0xac, 0xe3, 0x2c, 0x86, 0x22, 0xac, 0x7f, 0x3a, 0xd9, 0x0d, 0xd0, 0x78, 0x1f, 0xf7, 0xc9, + 0xf6, 0x05, 0x48, 0x75, 0x1b, 0x83, 0x9a, 0xa8, 0x2d, 0x08, 0xb9, 0x4d, 0x39, 0xcd, 0x01, 0xa2, + 0xc0, 0x95, 0xab, 0xe5, 0x76, 0xe3, 0xd6, 0x89, 0xef, 0xb8, 0xe6, 0x33, 0x5a, 0x4e, 0x46, 0x89, + 0xa4, 0x8b, 0xc3, 0xed, 0xf7, 0x1c, 0xde, 0x16, 0xc4, 0xfd, 0xcf, 0x76, 0x1d, 0xb1, 0xb4, 0xf5, + 0x5a, 0xd8, 0xa4, 0x2d, 0xad, 0xd1, 0x65, 0x32, 0x6f, 0x3a, 0xac, 0xf0, 0x8c, 0x87, 0x27, 0x2e, + 0x71, 0x46, 0xa0, 0xf6, 0x50, 0xd9, 0x21, 0xe2, 0x14, 0xb0, 0xf3, 0x73, 0x36, 0xb6, 0x2b, 0xa1, + 0x80, 0x0c, 0x26, 0x66, 0x02, 0xab, 0x8e, 0x49, 0xb3, 0xdf, 0x5e, 0xf0, 0x5e, 0x96, 0x38, 0x4a, + 0x81, 0x98, 0x18, 0xed, 0x74, 0x33, 0xd4, 0xa7, 0x81, 0x57, 0x88, 0x16, 0x08, 0x5b, 0x2a, 0xcd, + 0x7b, 0x21, 0x16, 0x99, 0x2b, 0xb4, 0x57, 0xcb, 0xef, 0x21, 0xca, 0xaa, 0x26, 0x67, 0x6f, 0xd4, + 0x12, 0xb2, 0x71, 0xf8, 0x94, 0x06, 0x43, 0x2d, 0xc8, 0x41, 0xb0, 0x65, 0x04, 0xd8, 0x03, 0x55, + 0xe6, 0x24, 0xf9, 0x34, 0x5e, 0xd4, 0x83, 0xc6, 0x05, 0xe6, 0x24, 0x61, 0xec, 0xac, 0x72, 0x2b, + 0xbe, 0x14, 0x68, 0xf9, 0x35, 0x59, 0x63, 0x7a, 0xad, 0xa5, 0x19, 0x97, 0xf5, 0xe8, 0xba, 0xce, + 0x5c, 0xfb, 0x47, 0x86, 0xc2, 0x69, 0x79, 0xfd, 0xe3, 0x9f, 0x06, 0x92, 0xc2, 0x06, 0xea, 0x26, + 0x2e, 0x44, 0x63, 0x81, 0x4f, 0x7c, 0xcd, 0x3b, 0xc0, 0x46, 0x57, 0x98, 0xa0, 0xea, 0x85, 0xf2, + 0x02, 0xed, 0xbf, 0x52, 0xfd, 0xb7, 0xb1, 0x71, 0x8f, 0x44, 0x51, 0x2e, 0xce, 0x42, 0xb1, 0xf3, + 0xf8, 0x55, 0xea, 0xb6, 0xf9, 0x6e, 0x6c, 0x3c, 0x82, 0x0b, 0x5d, 0x92, 0xbf, 0x7e, 0xd7, 0x43, + 0x06, 0xbe, 0x48, 0x78, 0xf1, 0xc4, 0x72, 0x43, 0xa9, 0x67, 0x4d, 0x64, 0x1e, 0x33, 0x0f, 0xf2, + 0x92, 0x63, 0x00, 0x78, 0xd1, 0xf8, 0x54, 0xea, 0x1d, 0x9d, 0xf6, 0x87, 0xe3, 0x6b, 0x81, 0x8a, + 0x6b, 0xc1, 0xd8, 0x23, 0x6f, 0x54, 0x08, 0x4d, 0x7b, 0x7b, 0x9c, 0x62, 0x49, 0x50, 0xf8, 0x75, + 0x99, 0x92, 0x88, 0x2c, 0x4a, 0x3b, 0x17, 0x94, 0x2a, 0xb2, 0xef, 0x3f, 0xaa, 0xc6, 0xc7, 0x5b, + 0x5a, 0xc3, 0xf6, 0x0e, 0x08, 0x2c, 0xd8, 0x87, 0xb3, 0x6c, 0x63, 0xdd, 0x19, 0x0e, 0x3c, 0xd8, + 0x0c, 0xc6, 0x5f, 0x91, 0x20, 0xa8, 0x28, 0xb0, 0xd6, 0xc3, 0xd2, 0xac, 0xec, 0x13, 0x9a, 0x41, + 0x25, 0x47, 0x82, 0x82, 0xa8, 0x3e, 0xbf, 0xfb, 0xde, 0x2a, 0xc4, 0x40, 0x08, 0x5c, 0xe7, 0x04, + 0x9b, 0xc9, 0x37, 0x1c, 0xca, 0x86, 0x82, 0x5b, 0xb4, 0x95, 0xbe, 0x68, 0x48, 0xaf, 0x81, 0xcb, + 0xd1, 0x68, 0x84, 0x60, 0xd9, 0xf5, 0xe4, 0x12, 0x34, 0x8c, 0x31, 0xd4, 0x41, 0xf9, 0x3f, 0xc4, + 0x33, 0x7a, 0x6e, 0x84, 0xa8, 0x8d, 0x7d, 0x42, 0x61, 0xb6, 0x3f, 0x68, 0x7c, 0xc1, 0xfd, 0xbd, + 0x2f, 0x3f, 0xd8, 0x95, 0xe5, 0x94, 0xd9, 0x73, 0xe2, 0x82, 0x67, 0x9a, 0x0c, 0xcb, 0x92, 0x0d, + 0xe5, 0xbe, 0x2a, 0x20, 0x9c, 0x15, 0xa4, 0x02, 0xc9, 0xdc, 0x04, 0x3e, 0x68, 0xe1, 0x0a, 0xa5, + 0xae, 0x98, 0xf7, 0xc3, 0x20, 0x8c, 0x6a, 0x28, 0x4d, 0xcf, 0xb3, 0x6f, 0x63, 0x6c, 0xc2, 0x55, + 0x3c, 0xed, 0x0f, 0xe2, 0xd7, 0x83, 0x94, 0x75, 0xb8, 0xd7, 0xc1, 0x73, 0xd8, 0x71, 0x61, 0xa6, + 0xe9, 0x88, 0x67, 0x4a, 0xd8, 0x7e, 0x55, 0xc7, 0x4b, 0x40, 0x08, 0x75, 0x09, 0xb3, 0xd3, 0x30, + 0x91, 0x98, 0x8f, 0x0f, 0xf3, 0x46, 0xb0, 0xbb, 0x36, 0xc1, 0x5c, 0xfd, 0xbe, 0x40, 0x59, 0xdb, + 0xbd, 0x28, 0x3e, 0x2a, 0x34, 0xcd, 0x3f, 0x78, 0xa2, 0x17, 0xe3, 0x02, 0x48, 0x15, 0xd8, 0x30, + 0x83, 0xfa, 0xc8, 0xea, 0x20, 0x6d, 0xb4, 0xfd, 0xb7, 0x1e, 0xd3, 0x98, 0x73, 0x0d, 0x13, 0x52, + 0x68, 0x48, 0xa6, 0x52, 0x17, 0x6c, 0x8f, 0x1c, 0x77, 0xea, 0x52, 0x8d, 0x3f, 0x6a, 0x2f, 0xd6, + 0x42, 0xe2, 0x06, 0xb8, 0xa0, 0xe0, 0x30, 0xc4, 0xd5, 0x42, 0x55, 0x56, 0x65, 0x46, 0xbc, 0x19, + 0x19, 0x8a, 0x5f, 0x9c, 0xf4, 0xcf, 0x56, 0xa2, 0x64, 0xa7, 0x6a, 0x42, 0x36, 0x1c, 0x7d, 0x43, + 0x57, 0xc9, 0x2d, 0xb1, 0xe9, 0xdb, 0x3c, 0xf4, 0xf4, 0xdb, 0x5c, 0xc4, 0x17, 0x2c, 0xf4, 0xf4, + 0xf4, 0xbe, 0x4c, 0x7f, 0x47, 0xac, 0xe3, 0x24, 0x63, 0xff, 0xe4, 0xe0, 0xa5, 0x62, 0x02, 0xcf, + 0x1c, 0xfc, 0xdb, 0x7f, 0x81, 0x84, 0x1b, 0x4a, 0x76, 0x3c, 0xb1, 0xa2, 0x24, 0x32, 0x1b, 0xce, + 0x0a, 0xf6, 0x11, 0x40, 0x3b, 0x61, 0x03, 0x9f, 0xbd, 0x95, 0x54, 0xc8, 0x6b, 0x26, 0xae, 0x15, + 0x83, 0x83, 0xef, 0x0c, 0x52, 0x3a, 0x6f, 0xd4, 0x05, 0x04, 0xa3, 0x2c, 0x7b, 0x6b, 0x3f, 0x59, + 0xe2, 0x28, 0x33, 0x32, 0x21, 0xa1, 0x66, 0x6a, 0x59, 0x0b, 0x74, 0x57, 0x75, 0x6c, 0x74, 0x25, + 0xc4, 0xf2, 0x87, 0x1d, 0xfe, 0x7f, 0x01, 0x9f, 0x9c, 0x36, 0x40, 0x5e, 0x01, 0x7d, 0xd3, 0xc9, + 0xd6, 0xcf, 0x5a, 0x47, 0xeb, 0xf2, 0x1e, 0x3f, 0x7d, 0x3c, 0x03, 0xa7, 0xba, 0x69, 0x81, 0xcf, + 0xe5, 0x95, 0x61, 0x91, 0xd4, 0x4b, 0xad, 0xc3, 0x37, 0x97, 0xa6, 0x60, 0xcb, 0x15, 0x87, 0xbc, + 0x0f, 0x91, 0xef, 0x70, 0xa8, 0xb9, 0x5d, 0x94, 0x8d, 0x9e, 0xc5, 0x9a, 0xa0, 0x9a, 0xe2, 0x71, + 0xa4, 0x30, 0x41, 0x26, 0xfd, 0x63, 0x1a, 0xc4, 0xd9, 0x07, 0xdc, 0xf6, 0x7c, 0xbc, 0x67, 0x13, + 0x4f, 0xc1, 0x95, 0x36, 0x5b, 0x9a, 0x14, 0x47, 0x75, 0x4e, 0xaf, 0xec, 0xc3, 0x0b, 0x62, 0xac, + 0x9c, 0x65, 0xfd, 0x7d, 0x67, 0xbd, 0xb8, 0xac, 0xc7, 0x1f, 0x87, 0x84, 0x54, 0xda, 0x65, 0xc2, + 0x8d, 0x95, 0xf2, 0x6e, 0x15, 0xff, 0xd6, 0x99, 0xad, 0x85, 0xc3, 0x9e, 0x62, 0x1a, 0x53, 0x9a, + 0xa4, 0x86, 0x5d, 0x3d, 0x8b, 0xb3, 0x8c, 0x41, 0xbd, 0x85, 0x61, 0xc3, 0xe7, 0x95, 0xbf, 0x64, + 0x9e, 0xbf, 0x4c, 0xf1, 0xca, 0x8d, 0xa4, 0x5e, 0xa3, 0xc2, 0x1a, 0x98, 0x66, 0x7a, 0x3b, 0xc9, + 0xfb, 0xb1, 0x31, 0x2a, 0xb2, 0xa7, 0xfc, 0x9b, 0x6b, 0xb7, 0xf0, 0xd5, 0x0f, 0xc5, 0x4c, 0x2f, + 0x2d, 0xc7, 0xfe, 0x7c, 0xc4, 0xe2, 0x4b, 0xf5, 0x97, 0xf2, 0x38, 0x5b, 0xad, 0x86, 0xed, 0x8b, + 0xaf, 0xa2, 0x7e, 0x21, 0x10, 0x6b, 0x09, 0x0b, 0x3c, 0x35, 0x4d, 0xf6, 0x30, 0x94, 0xb6, 0x17, + 0xb2, 0xe1, 0x15, 0xc3, 0x53, 0x6e, 0x2d, 0xf5, 0x48, 0x09, 0xed, 0x82, 0xaa, 0x6a, 0x09, 0x7b, + 0xc0, 0x1d, 0x06, 0xa4, 0x0d, 0x81, 0xf8, 0x6d, 0xc8, 0x41, 0xc4, 0x04, 0x30, 0x71, 0x9a, 0x70, + 0xbb, 0xd0, 0x01, 0x0f, 0x37, 0x19, 0xfd, 0x8a, 0x21, 0x57, 0x33, 0x50, 0x10, 0x31, 0x21, 0xdf, + 0x44, 0x6a, 0xed, 0x70, 0xa1, 0xbf, 0xae, 0xdf, 0xc4, 0x38, 0x3f, 0x9d, 0x02, 0xfd, 0x8b, 0xbd, + 0x52, 0x9b, 0xf5, 0x82, 0x12, 0xca, 0xee, 0xe5, 0xe5, 0xcd, 0x5f, 0x87, 0x50, 0x8e, 0x3d, 0x89, + 0xdc, 0x72, 0x55, 0x83, 0x7f, 0x80, 0x25, 0xe4, 0x94, 0x81, 0xe0, 0xb5, 0x51, 0x7f, 0x11, 0xd6, + 0x16, 0x2d, 0x9c, 0x4c, 0xa1, 0x8d, 0x2e, 0x10, 0xa9, 0xb5, 0x9c, 0xcc, 0xe9, 0xc2, 0xee, 0x10, + 0x97, 0x02, 0x1a, 0xf6, 0x38, 0x86, 0x77, 0xfb, 0x10, 0xb9, 0x58, 0x34, 0x59, 0xe5, 0x37, 0xd0, + 0x85, 0x4d, 0xc7, 0x87, 0x40, 0x08, 0xda, 0x53, 0xa5, 0x4b, 0xbb, 0x6f, 0x3b, 0x7c, 0x76, 0x98, + 0x0f, 0xf7, 0xfc, 0x50, 0x27, 0xde, 0xbb, 0xb2, 0xcc, 0x6c, 0x9e, 0xdb, 0xc8, 0xb4, 0xf2, 0xd8, + 0x33, 0x7b, 0xb3, 0xfe, 0xdb, 0x93, 0xf4, 0x26, 0x35, 0x87, 0x88, 0x16, 0x0d, 0xe3, 0x66, 0x41, + 0x12, 0xad, 0xbb, 0x29, 0x47, 0x2c, 0x8e, 0x10, 0x92, 0xa8, 0xc0, 0x07, 0x08, 0xba, 0xa4, 0xc0, + 0x96, 0xa2, 0xa6, 0x48, 0x5f, 0x99, 0xe8, 0x07, 0x2a, 0xb0, 0xa5, 0x8e, 0x87, 0x08, 0x23, 0x26, + 0xf4, 0x59, 0x9f, 0x8a, 0x0a, 0xcc, 0x70, 0xb8, 0xe6, 0x25, 0x07, 0x97, 0xf2, 0x69, 0xac, 0x4b, + 0xd0, 0x23, 0x66, 0x27, 0x35, 0x3c, 0x55, 0x6d, 0xd1, 0xe2, 0x74, 0x8d, 0xdc, 0x74, 0xf5, 0xb5, + 0xd9, 0x66, 0x81, 0xa6, 0xa7, 0x35, 0x43, 0x2b, 0x7b, 0x39, 0x95, 0xee, 0x61, 0x80, 0x1d, 0xcf, + 0x5c, 0xc2, 0x4a, 0xdd, 0x45, 0xcb, 0x94, 0x66, 0x92, 0xf7, 0xf2, 0x5c, 0x9c, 0x1c, 0xea, 0xb2, + 0x5c, 0x35, 0x72, 0x28, 0xbc, 0x2e, 0xd1, 0x44, 0x2d, 0x6f, 0x26, 0x91, 0xa1, 0xba, 0x84, 0xff, + 0xe0, 0x9f, 0xa9, 0x74, 0xf2, 0xca, 0x9b, 0xe0, 0xd0, 0x2f, 0x93, 0x76, 0x8b, 0x3b, 0x11, 0x59, + 0xdf, 0x0b, 0x1a, 0x6f, 0x3f, 0x88, 0xdb, 0xb0, 0x20, 0xa6, 0xd1, 0xe6, 0x87, 0x47, 0xa9, 0x9c, + 0xce, 0xaa, 0x13, 0x8c, 0x0d, 0x44, 0xa1, 0x07, 0xb7, 0xdb, 0x00, 0x0e, 0xbc, 0x32, 0x41, 0x51, + 0x81, 0x9d, 0x1f, 0xee, 0xe2, 0x20, 0x58, 0x25, 0x2d, 0x7c, 0x39, 0x94, 0xe9, 0xb5, 0x34, 0x18, + 0x05, 0x93, 0x48, 0xda, 0xc1, 0x7f, 0xa0, 0x55, 0xf2, 0x58, 0xb4, 0x1b, 0x7a, 0x0f, 0x29, 0x27, + 0x5c, 0x42, 0x16, 0xe3, 0xa1, 0xc5, 0xc2, 0x36, 0x00, 0xe1, 0x8a, 0xd2, 0x45, 0x2b, 0x21, 0xcd, + 0xe2, 0x35, 0xdb, 0x8b, 0x96, 0xa0, 0xc3, 0x7b, 0xdd, 0xe8, 0xd8, 0x42, 0x53, 0x32, 0xca, 0x81, + 0x27, 0xb4, 0x7f, 0x80, 0x26, 0x77, 0x41, 0xcd, 0xaf, 0x54, 0xc2, 0xb3, 0x01, 0x7f, 0x12, 0x0f, + 0x54, 0xc3, 0xda, 0xa8, 0x50, 0xa5, 0x57, 0xbe, 0xe5, 0xd9, 0xc1, 0xc0, 0x39, 0x34, 0x9b, 0x06, + 0x86, 0x8d, 0xb9, 0xb5, 0x6b, 0x00, 0xf1, 0x38, 0x18, 0xf0, 0xe1, 0x55, 0x50, 0xf9, 0x87, 0x7c, + 0xaf, 0x27, 0x32, 0x27, 0xf8, 0xcc, 0x98, 0x3b, 0xb5, 0x32, 0x3b, 0x51, 0xf5, 0xd3, 0xf3, 0x1d, + 0x86, 0xc4, 0x7a, 0xe1, 0xac, 0xba, 0x6e, 0x2f, 0xbf, 0x48, 0xf0, 0x6a, 0x46, 0xcc, 0x48, 0x6d, + 0xef, 0xfb, 0xf8, 0x99, 0xe4, 0x3c, 0xa5, 0x5f, 0xee, 0xb6, 0x53, 0x1e, 0x30, 0xef, 0x29, 0xc5, + 0xde, 0x76, 0x3f, 0x26, 0x62, 0x4b, 0xd0, 0x61, 0x7b, 0xf9, 0xb3, 0x2e, 0x3a, 0x77, 0xa2, 0x9d, + 0xa5, 0x43, 0x1d, 0xa2, 0x80, 0x7c, 0x96, 0x9b, 0x94, 0x10, 0xe4, 0x2a, 0x03, 0x64, 0xce, 0x32, + 0x44, 0x83, 0xb4, 0x2c, 0x96, 0x41, 0xbf, 0x64, 0x62, 0x31, 0x6f, 0x02, 0x30, 0x57, 0x4c, 0x5a, + 0xe1, 0xb5, 0x58, 0xeb, 0x1f, 0x74, 0xc8, 0xc5, 0x51, 0xab, 0x5b, 0x68, 0x4b, 0xbd, 0x85, 0xfd, + 0x20, 0xe6, 0x54, 0x0a, 0x46, 0x59, 0x90, 0x17, 0x8e, 0xdc, 0xfa, 0xa1, 0x16, 0xa8, 0x46, 0x5b, + 0x7d, 0x53, 0xdf, 0xa6, 0x7a, 0xa4, 0x96, 0x73, 0xb1, 0xea, 0xc7, 0x5e, 0x79, 0xf0, 0x5b, 0x78, + 0x2f, 0xfb, 0x49, 0xa4, 0xb6, 0xa6, 0x80, 0x6b, 0x61, 0x7c, 0x27, 0xb7, 0x7b, 0x3e, 0x5b, 0x20, + 0x34, 0x84, 0xe7, 0xeb, 0xc7, 0x5d, 0x25, 0xbe, 0x69, 0x82, 0xcc, 0x74, 0x15, 0x64, 0x70, 0x59, + 0x87, 0xf5, 0x37, 0x08, 0x2f, 0x8b, 0xc0, 0x61, 0xb3, 0x05, 0x37, 0x0c, 0xc4, 0x5b, 0x49, 0xa0, + 0x6e, 0xb6, 0x9e, 0x97, 0x66, 0x62, 0xf0, 0xeb, 0xb1, 0x86, 0x17, 0x88, 0xe0, 0x61, 0xc1, 0x2b, + 0x11, 0x55, 0x76, 0xaf, 0xc4, 0x7f, 0xc2, 0x74, 0x05, 0xc6, 0xc7, 0xa6, 0x0a, 0x11, 0x78, 0x72, + 0x62, 0x78, 0x43, 0x91, 0xda, 0x9b, 0xfa, 0x7a, 0x1d, 0x3b, 0x7e, 0x66, 0x7e, 0x62, 0x05, 0xee, + 0x97, 0x90, 0x8c, 0xca, 0xe5, 0x00, 0xdd, 0x40, 0x65, 0xa7, 0x83, 0xf0, 0x92, 0xa7, 0x1f, 0xec, + 0x56, 0x9e, 0xdd, 0x58, 0x2a, 0x52, 0x2d, 0x26, 0x86, 0xa4, 0x86, 0x27, 0xc5, 0x1a, 0x1f, 0x82, + 0xcd, 0x98, 0xf3, 0x28, 0x8f, 0xdb, 0xcd, 0xc4, 0xb5, 0x9f, 0x13, 0x90, 0x44, 0x14, 0x2f, 0xdf, + 0x7f, 0xc0, 0x85, 0xe2, 0xcd, 0x20, 0x76, 0xdd, 0xee, 0x16, 0xa0, 0x09, 0x2a, 0x8d, 0xa3, 0x69, + 0x67, 0x34, 0xc9, 0x07, 0x58, 0xf6, 0xad, 0x34, 0x25, 0xa4, 0x38, 0x26, 0x9c, 0xbb, 0x93, 0xfb, + 0x46, 0x13, 0x63, 0x5d, 0x10, 0x64, 0xa9, 0x38, 0xd8, 0xf7, 0xb4, 0x16, 0x33, 0x57, 0x03, 0xe5, + 0xb1, 0xc5, 0x7a, 0xc9, 0x79, 0xa4, 0xb6, 0x74, 0xa1, 0xae, 0x93, 0xd1, 0x45, 0xdd, 0x33, 0x3d, + 0x67, 0x50, 0xb6, 0x8b, 0x56, 0x5a, 0x8f, 0x95, 0x4f, 0x7c, 0x1c, 0x3f, 0x3b, 0x44, 0xd0, 0xd0, + 0x1a, 0x81, 0xdc, 0x54, 0x17, 0x3c, 0x95, 0x06, 0xe4, 0xaf, 0x1e, 0x6a, 0xde, 0x9a, 0xb4, 0x91, + 0x21, 0xa5, 0x52, 0x1f, 0x99, 0xef, 0x4f, 0x96, 0x77, 0xc2, 0x8b, 0x9e, 0xd7, 0x7a, 0x9a, 0x4b, + 0x1c, 0x61, 0x22, 0x42, 0x0f, 0x71, 0xc4, 0xf2, 0xe5, 0xdf, 0x7a, 0x1f, 0xab, 0x35, 0xb4, 0x6e, + 0xcb, 0x98, 0x0a, 0xf9, 0x81, 0xbe, 0x7c, 0xc5, 0x2e, 0xec, 0xf9, 0x8b, 0xcd, 0x16, 0x59, 0x3d, + 0x81, 0x8b, 0x4d, 0xa9, 0x57, 0x77, 0x15, 0x63, 0x69, 0x17, 0x22, 0xc6, 0xd5, 0xce, 0x39, 0x1a, + 0xec, 0xda, 0x46, 0x41, 0x74, 0x38, 0x7b, 0xe3, 0x9a, 0x04, 0x91, 0x6f, 0x6e, 0x5b, 0x2d, 0xfc, + 0xf8, 0x6a, 0x99, 0x7a, 0x49, 0x2e, 0xb3, 0xf3, 0xde, 0xde, 0x4e, 0xc6, 0x7b, 0x95, 0xc5, 0x83, + 0x46, 0xe1, 0x62, 0x85, 0x37, 0xf9, 0x5f, 0xba, 0xe1, 0x55, 0x50, 0x32, 0xb3, 0x0d, 0xfd, 0xf6, + 0xcf, 0xed, 0x03, 0x99, 0x40, 0x4a, 0x94, 0x4c, 0xa3, 0x5e, 0x19, 0x5f, 0xbc, 0x85, 0xdb, 0xce, + 0xef, 0x67, 0xbc, 0xa6, 0x4f, 0xc6, 0x01, 0xbe, 0xc0, 0xb5, 0xc7, 0x7b, 0x2d, 0x1b, 0x53, 0x6c, + 0x9e, 0xa5, 0xc9, 0x9c, 0x96, 0x57, 0x9a, 0xd0, 0x61, 0xa2, 0x2c, 0x24, 0xec, 0xb0, 0xaa, 0x99, + 0x35, 0xa4, 0x70, 0x6e, 0x9b, 0x1b, 0xe1, 0xc4, 0xaf, 0x02, 0xad, 0x23, 0x13, 0x65, 0x14, 0xf4, + 0xc0, 0xb8, 0x09, 0xfe, 0x37, 0x1b, 0x65, 0x65, 0x6f, 0x98, 0xb3, 0x42, 0x5b, 0x6c, 0x6e, 0xec, + 0x25, 0xac, 0xd5, 0x81, 0xf7, 0x50, 0x5b, 0x39, 0xf2, 0xea, 0x71, 0x40, 0x5f, 0x5d, 0xcf, 0x4f, + 0x7a, 0xd0, 0xa0, 0xfd, 0x0a, 0x99, 0x39, 0xc2, 0xb9, 0xb0, 0xbf, 0x20, 0x4f, 0xfc, 0x1f, 0x84, + 0xbc, 0x78, 0x1b, 0xb2, 0xae, 0x0c, 0xa1, 0xf7, 0x83, 0x30, 0x56, 0xde, 0x82, 0xaa, 0x5d, 0xe5, + 0x4a, 0xa1, 0x48, 0xe1, 0xb8, 0xb1, 0xd1, 0x23, 0xbd, 0xa8, 0x25, 0xc2, 0x3e, 0x74, 0x54, 0xfc, + 0x55, 0x4d, 0xc8, 0x31, 0x9c, 0x59, 0xe6, 0x45, 0x6c, 0xce, 0x90, 0x24, 0x13, 0xf1, 0xed, 0x82, + 0x0f, 0xa8, 0x35, 0x9a, 0xb7, 0x5a, 0x78, 0xd9, 0x62, 0x28, 0xed, 0x47, 0xd6, 0x56, 0x4a, 0xf4, + 0x04, 0x96, 0xc9, 0x35, 0x21, 0xd8, 0xc7, 0xf4, 0xb3, 0x8c, 0x7c, 0x3b, 0x1c, 0xb7, 0xdb, 0x36, + 0x63, 0x79, 0xe5, 0x89, 0xc6, 0x04, 0xe4, 0x4d, 0xf0, 0x50, 0xe5, 0x32, 0xc4, 0xa3, 0x09, 0x6e, + 0xc3, 0x99, 0x39, 0x31, 0xab, 0x93, 0x66, 0x48, 0x4d, 0x96, 0xcc, 0x4a, 0xcb, 0x4b, 0xd7, 0x00, + 0x4f, 0xa7, 0xad, 0xbb, 0x10, 0x14, 0xdd, 0x8f, 0x63, 0x23, 0x07, 0x2b, 0x2b, 0xad, 0x0c, 0x6d, + 0xf1, 0x3b, 0x46, 0xc7, 0xf3, 0x6b, 0x24, 0x1c, 0x9c, 0x22, 0x17, 0xee, 0xfb, 0xb0, 0xbe, 0x27, + 0x07, 0x06, 0x2f, 0x7b, 0x0c, 0x52, 0x0e, 0x30, 0x6d, 0xcd, 0x7c, 0x58, 0x86, 0x76, 0xff, 0x51, + 0x5d, 0x97, 0x3f, 0x45, 0xeb, 0xf8, 0x24, 0x98, 0x4c, 0x04, 0x2b, 0x83, 0xec, 0x40, 0x98, 0x7f, + 0x4d, 0xc0, 0xcf, 0x47, 0xff, 0x27, 0xa1, 0xcc, 0x09, 0x78, 0xf9, 0x9c, 0x20, 0xb7, 0x58, 0x1c, + 0xc1, 0xbb, 0x87, 0x71, 0x3d, 0x4d, 0xbc, 0x51, 0x04, 0x75, 0xea, 0x31, 0x50, 0xf7, 0xaf, 0xfb, + 0x4b, 0x05, 0x16, 0xa7, 0xea, 0xeb, 0x04, 0xfb, 0x97, 0xd3, 0xfa, 0x35, 0x8c, 0xd3, 0x65, 0xb6, + 0x42, 0x3c, 0x05, 0x27, 0x04, 0x1b, 0xe8, 0x08, 0xc3, 0x8e, 0xe5, 0x8d, 0xd3, 0x9b, 0xdc, 0xe3, + 0xda, 0x41, 0x37, 0x5f, 0x1e, 0xf2, 0x75, 0xa4, 0xcc, 0x27, 0xb4, 0x2b, 0xcc, 0xfb, 0x84, 0xa8, + 0x3b, 0x87, 0x16, 0xa2, 0x31, 0xcb, 0x3b, 0xbf, 0xae, 0xea, 0x17, 0xed, 0xa9, 0x41, 0x37, 0x33, + 0xb5, 0xaf, 0x4a, 0x71, 0x45, 0x07, 0x5f, 0x5c, 0x6d, 0x41, 0x41, 0x44, 0x4e, 0xaf, 0xa5, 0x4a, + 0x32, 0x51, 0x56, 0x78, 0xb6, 0xcc, 0x75, 0x35, 0x22, 0x4e, 0x2e, 0x5b, 0x61, 0xb8, 0x2f, 0xd4, + 0xb7, 0xab, 0xb0, 0xfe, 0x49, 0x46, 0x34, 0x37, 0xae, 0xd5, 0xc5, 0xe5, 0xde, 0xd4, 0x96, 0x3c, + 0x71, 0xac, 0x5a, 0x0e, 0x7c, 0xe2, 0x24, 0x6f, 0xb2, 0xaf, 0x10, 0x01, 0x2c, 0x72, 0x69, 0x56, + 0xc2, 0xa4, 0xce, 0x6e, 0xd6, 0x66, 0x4d, 0xeb, 0xde, 0x2f, 0x2f, 0x0e, 0x93, 0xed, 0x37, 0x2c, + 0xd8, 0x89, 0x8e, 0x18, 0xe5, 0x27, 0x07, 0xbe, 0xdd, 0x60, 0x3a, 0x54, 0x6b, 0xb5, 0x7d, 0x9c, + 0xc6, 0x7e, 0xb0, 0x80, 0x40, 0x86, 0x89, 0xc0, 0xe3, 0xf8, 0x75, 0xb1, 0x07, 0x38, 0x26, 0xde, + 0x6c, 0x6e, 0xee, 0x5a, 0x1c, 0x1d, 0x55, 0x81, 0x53, 0x1d, 0x78, 0x91, 0x75, 0x23, 0xf0, 0x32, + 0x5a, 0xc5, 0xe6, 0x08, 0x8e, 0x77, 0x77, 0xe8, 0x4e, 0x08, 0xf4, 0x75, 0x61, 0x90, 0xd9, 0xa6, + 0xff, 0xfa, 0x9e, 0xfb, 0x60, 0x1f, 0xdf, 0x28, 0x72, 0xee, 0x24, 0xbf, 0xf1, 0x96, 0x68, 0x5e, + 0x4f, 0xa5, 0x5e, 0xf1, 0x8f, 0x63, 0x6a, 0x39, 0xa0, 0x40, 0xb1, 0x43, 0x0a, 0x6c, 0x1d, 0xdf, + 0x7e, 0xe6, 0x38, 0x02, 0xaa, 0x78, 0x9f, 0xb9, 0x32, 0x11, 0xda, 0xec, 0xdf, 0x22, 0x00, 0x5e, + 0xba, 0x6c, 0xb1, 0xda, 0x31, 0x3e, 0x19, 0x34, 0x85, 0xc8, 0x32, 0xfa, 0x04, 0x57, 0x1a, 0xa3, + 0xaf, 0xcc, 0xa9, 0x39, 0xb0, 0x4c, 0x47, 0xc9, 0x4f, 0x66, 0xe1, 0x4b, 0xdc, 0x5e, 0x6f, 0xb9, + 0x1c, 0x25, 0x70, 0x25, 0x35, 0x98, 0xf9, 0xfd, 0x20, 0x8c, 0xf1, 0x8f, 0x2e, 0x14, 0x6e, 0x11, + 0xa4, 0x37, 0x51, 0x12, 0x09, 0x53, 0xe2, 0x4e, 0x3b, 0x36, 0x78, 0xfa, 0x52, 0xaa, 0x06, 0x6b, + 0x0c, 0x95, 0x81, 0xa2, 0x76, 0x83, 0xa2, 0xa6, 0x02, 0xcb, 0x2c, 0xc4, 0x8e, 0x37, 0x9c, 0x1c, + 0x36, 0x36, 0xea, 0xf8, 0x04, 0xd6, 0xc2, 0xbe, 0x20, 0x4d, 0x37, 0xcc, 0x32, 0x78, 0xff, 0x02, + 0x62, 0x7b, 0x59, 0xcc, 0xb4, 0x4b, 0x98, 0x34, 0xc4, 0xea, 0xb3, 0xc4, 0xb1, 0x06, 0xbe, 0xa1, + 0x27, 0x15, 0x95, 0xf8, 0x45, 0x0a, 0xcc, 0x45, 0x97, 0x2c, 0xed, 0x12, 0xba, 0x64, 0xbc, 0x3f, + 0xce, 0x76, 0x14, 0xce, 0x1b, 0xc1, 0x37, 0xdf, 0xc7, 0x3a, 0xe4, 0x1c, 0x22, 0xeb, 0x99, 0x37, + 0x07, 0x32, 0xff, 0xde, 0xd3, 0xe7, 0x28, 0x13, 0x1c, 0x91, 0xa7, 0x16, 0xce, 0xcd, 0x92, 0x32, + 0x30, 0x9f, 0xa1, 0xad, 0xe5, 0x3e, 0xa9, 0x51, 0xcb, 0xef, 0x58, 0xe3, 0x35, 0x21, 0xf3, 0x27, + 0xb5, 0x15, 0x45, 0x6c, 0xf6, 0xa0, 0x16, 0x32, 0x85, 0x63, 0x01, 0x9a, 0x88, 0x98, 0xb6, 0x01, + 0xaf, 0x28, 0xca, 0x12, 0xc0, 0x8c, 0x4a, 0xf7, 0xf9, 0xc2, 0x02, 0xda, 0x12, 0x24, 0x23, 0xf6, + 0xad, 0xd7, 0x39, 0xdd, 0xc6, 0x2b, 0x3a, 0x5d, 0xd0, 0x3f, 0x6e, 0xd2, 0xc5, 0x19, 0xc6, 0x0d, + 0x51, 0xf8, 0x2f, 0xf3, 0xec, 0x43, 0xc9, 0x6b, 0x53, 0x8a, 0x2c, 0x16, 0x47, 0x26, 0x2c, 0xf4, + 0xd8, 0x22, 0xb5, 0xda, 0x90, 0x64, 0xcd, 0xd1, 0xd0, 0x38, 0xb2, 0xeb, 0x80, 0x6a, 0x0a, 0x7a, + 0x96, 0x2a, 0xec, 0xc4, 0xca, 0x28, 0xb1, 0x53, 0xf1, 0xa8, 0xdc, 0x8b, 0xac, 0x15, 0xbe, 0xef, + 0x90, 0x1a, 0x70, 0x4a, 0xf1, 0xe8, 0x68, 0x8c, 0xf7, 0xcd, 0x9a, 0x3d, 0xe8, 0x3a, 0x6f, 0x81, + 0x67, 0xb1, 0x9d, 0x3a, 0x52, 0xa4, 0xe2, 0xab, 0x26, 0x9d, 0x1d, 0x51, 0x02, 0x5e, 0x02, 0x8e, + 0x74, 0x41, 0xc2, 0x9a, 0xdc, 0xb2, 0x3b, 0xee, 0x1b, 0xe3, 0x81, 0x11, 0xae, 0xdf, 0xaf, 0x03, + 0x1d, 0x7f, 0xa1, 0x13, 0x9e, 0x96, 0xf2, 0x3a, 0x89, 0xdf, 0xf0, 0xe9, 0xa2, 0x46, 0x12, 0x12, + 0x26, 0x07, 0xaa, 0xf3, 0xd6, 0x9c, 0xd3, 0x1c, 0x97, 0x4a, 0xe0, 0xa9, 0x16, 0xfd, 0x62, 0x7d, + 0x92, 0x08, 0x49, 0x81, 0x5c, 0x98, 0x41, 0xaa, 0x57, 0x37, 0xb4, 0x5f, 0xfa, 0x3b, 0xd1, 0xe9, + 0xb1, 0x90, 0xc8, 0xf3, 0x0d, 0x38, 0xbc, 0xf7, 0x6d, 0xd4, 0x27, 0x93, 0x94, 0xa9, 0x41, 0xfe, + 0x92, 0xa9, 0x3b, 0x5c, 0x2d, 0xaf, 0xb5, 0x68, 0xcc, 0x02, 0x3a, 0x15, 0xb9, 0x80, 0x3e, 0x3d, + 0xb6, 0x0d, 0xfe, 0x3a, 0xcc, 0x93, 0x9b, 0x4f, 0xec, 0x6c, 0x5a, 0x8c, 0xd0, 0xb5, 0x63, 0x70, + 0x0b, 0x4e, 0x9e, 0x96, 0x41, 0x00, 0xe7, 0xcb, 0x90, 0x53, 0xb2, 0x51, 0x73, 0xdc, 0x2b, 0x82, + 0x81, 0xdb, 0x9e, 0x58, 0x9d, 0x87, 0xaf, 0x55, 0xc8, 0x56, 0xfa, 0x04, 0xa7, 0xba, 0xef, 0x38, + 0x9a, 0x52, 0x27, 0x65, 0xd0, 0xd0, 0x74, 0xda, 0x70, 0x60, 0x4b, 0x7d, 0x9d, 0x25, 0xce, 0x25, + 0x19, 0x45, 0x86, 0x5a, 0x3d, 0x2a, 0x56, 0xfd, 0x1e, 0x30, 0xd8, 0x6a, 0xce, 0x45, 0x66, 0x43, + 0x3f, 0xcf, 0x99, 0xd7, 0xdc, 0xfd, 0x8c, 0x97, 0xb3, 0x3f, 0x03, 0x73, 0x7c, 0xe3, 0x56, 0x11, + 0x39, 0xb1, 0xf6, 0xdf, 0xfc, 0x3b, 0x17, 0x84, 0x80, 0xbc, 0x08, 0xd4, 0xf6, 0xa4, 0xfc, 0xc1, + 0x53, 0x5c, 0xce, 0xbb, 0x1d, 0xff, 0x76, 0x90, 0x64, 0x97, 0xde, 0xd7, 0x43, 0xe2, 0xab, 0x15, + 0x4e, 0xd0, 0xc0, 0xe5, 0xb4, 0xae, 0x25, 0xdf, 0x9f, 0x96, 0x3f, 0x3d, 0xb9, 0x8c, 0xf4, 0x84, + 0x36, 0x0a, 0x10, 0x80, 0x1c, 0x30, 0xde, 0x4f, 0xbc, 0x01, 0x24, 0x0b, 0x95, 0xdd, 0x1d, 0x76, + 0x65, 0x61, 0x46, 0xa6, 0x4e, 0x82, 0x34, 0x82, 0x53, 0x8e, 0xb8, 0x4c, 0xc1, 0xe7, 0xac, 0x1c, + 0x93, 0x0b, 0x61, 0xe5, 0x8c, 0x71, 0x91, 0x44, 0x45, 0xad, 0x0e, 0xaa, 0xeb, 0xa2, 0x42, 0x41, + 0x31, 0xfc, 0x66, 0xfa, 0x8a, 0x10, 0xf9, 0x88, 0x61, 0xce, 0xc0, 0xdc, 0xbb, 0x61, 0xfe, 0xdb, + 0x1a, 0xee, 0x2f, 0x49, 0x2b, 0x27, 0x5b, 0x91, 0x20, 0x53, 0xe0, 0xd7, 0xda, 0x08, 0x94, 0x8b, + 0xf5, 0x37, 0x31, 0xc9, 0xa6, 0xc4, 0x58, 0x3e, 0x98, 0xa5, 0x42, 0x41, 0xcc, 0xeb, 0x82, 0xbe, + 0x32, 0x78, 0x53, 0xf7, 0xe9, 0x1a, 0x53, 0xa9, 0x61, 0x2a, 0x2d, 0x8a, 0x90, 0xcb, 0x7f, 0x40, + 0x55, 0x39, 0x17, 0x70, 0x7c, 0x47, 0x92, 0x8c, 0xde, 0xfd, 0x7f, 0xae, 0x74, 0xc0, 0xb6, 0x19, + 0x39, 0x21, 0x5b, 0x07, 0x97, 0xc7, 0xc1, 0xce, 0x36, 0x33, 0x3d, 0xe1, 0x92, 0x89, 0x09, 0xe0, + 0x34, 0xfb, 0xa6, 0x00, 0xcf, 0x13, 0x57, 0x74, 0x82, 0x30, 0x1f, 0xe4, 0x4a, 0x66, 0x99, 0xc2, + 0xc9, 0x16, 0x53, 0xa9, 0xb6, 0x3e, 0x4d, 0x8e, 0x02, 0x94, 0xa1, 0x05, 0x60, 0x39, 0x46, 0xcc, + 0x73, 0x9f, 0x87, 0x87, 0xf9, 0x60, 0x77, 0x20, 0x0e, 0x00, 0xd4, 0xeb, 0xe9, 0x8f, 0x5c, 0xa0, + 0x5c, 0x87, 0x84, 0xc9, 0xee, 0x9c, 0x68, 0x54, 0xd5, 0xff, 0xca, 0xd3, 0xcb, 0xe5, 0x97, 0x41, + 0x47, 0x62, 0x6a, 0x78, 0x1b, 0xc2, 0x24, 0xca, 0x83, 0x4d, 0x08, 0x85, 0x20, 0xe7, 0x04, 0x15, + 0xd5, 0xca, 0x08, 0x49, 0x05, 0x6f, 0x2c, 0x74, 0xc6, 0x5b, 0xc2, 0x1c, 0x98, 0xeb, 0x23, 0x77, + 0xc1, 0x82, 0x1e, 0xdb, 0x44, 0x42, 0xee, 0x47, 0x35, 0x55, 0x25, 0xe0, 0xfa, 0x4e, 0x21, 0x5a, + 0xf9, 0xf6, 0xc0, 0x46, 0x29, 0xe1, 0xc4, 0x5e, 0x7a, 0x1b, 0x6c, 0xed, 0x81, 0x55, 0x12, 0xe9, + 0x6c, 0xac, 0xf2, 0x55, 0x72, 0xbf, 0xf9, 0x0c, 0x4c, 0x9c, 0x00, 0xe5, 0x81, 0xe1, 0x13, 0xdb, + 0x5b, 0xdd, 0x9c, 0x67, 0xff, 0x16, 0x14, 0x81, 0x49, 0xfb, 0x3d, 0x40, 0xa0, 0x28, 0x5c, 0xb5, + 0xd0, 0xbc, 0x55, 0x01, 0xd8, 0x31, 0x08, 0x3b, 0xd7, 0x4b, 0x09, 0x31, 0x2b, 0x2a, 0x02, 0x5a, + 0x95, 0x11, 0x36, 0xbb, 0x78, 0x1e, 0xc9, 0x0e, 0x4e, 0x4a, 0xdd, 0x66, 0x2c, 0xa6, 0x3d, 0x1e, + 0x80, 0x36, 0xb9, 0x6c, 0x02, 0x54, 0x0b, 0x14, 0xbc, 0x68, 0x4f, 0x4e, 0xae, 0x29, 0x74, 0x1a, + 0x7a, 0x09, 0x63, 0x87, 0x6e, 0xef, 0x46, 0x46, 0xc0, 0x3e, 0x28, 0xf8, 0xc8, 0x9e, 0xae, 0xd2, + 0x88, 0x4b, 0x91, 0x00, 0x95, 0x51, 0xdc, 0xbd, 0x76, 0xbe, 0x64, 0x0a, 0xe1, 0x19, 0x93, 0xeb, + 0xde, 0xfe, 0xd6, 0x53, 0xec, 0x1d, 0x36, 0x50, 0x05, 0x9e, 0x5c, 0x2d, 0x58, 0x89, 0x33, 0x80, + 0x43, 0x21, 0xa3, 0x39, 0x90, 0x5c, 0x51, 0x72, 0x4c, 0xa8, 0xec, 0x06, 0xcf, 0x99, 0x35, 0xb2, + 0x8c, 0x02, 0x5c, 0x0d, 0x21, 0x55, 0x0b, 0x4f, 0x29, 0xb3, 0xf7, 0x2b, 0x19, 0x17, 0x82, 0x67, + 0xb1, 0x63, 0xf6, 0xbf, 0x9d, 0x0a, 0x4e, 0x6d, 0x48, 0x7b, 0x28, 0x4b, 0x79, 0x85, 0x34, 0xe2, + 0xeb, 0xdb, 0x1d, 0x55, 0xa0, 0x4e, 0x27, 0x0a, 0xf1, 0xc7, 0x92, 0x79, 0x82, 0x81, 0xbf, 0xfa, + 0x60, 0x9d, 0x16, 0x2e, 0xdf, 0x07, 0xbe, 0x37, 0x94, 0xd3, 0xb0, 0xbf, 0xc3, 0x26, 0xae, 0x77, + 0xc7, 0x70, 0x4a, 0x60, 0x4d, 0x61, 0x07, 0x83, 0x8a, 0x11, 0xad, 0xd5, 0xd1, 0x3a, 0xb8, 0xb4, + 0x4f, 0x0c, 0xcc, 0x05, 0xa0, 0xaf, 0xd6, 0xe7, 0x77, 0x93, 0xd9, 0x4f, 0x20, 0xe6, 0xc7, 0x4f, + 0x82, 0x7f, 0x44, 0xa4, 0xf7, 0x65, 0x40, 0x14, 0x11, 0xac, 0xda, 0x57, 0xa5, 0x6e, 0xdf, 0x9f, + 0xa7, 0xb6, 0x34, 0x4f, 0x21, 0x1e, 0x07, 0x8a, 0x0d, 0x06, 0x9a, 0xe4, 0xbb, 0xbd, 0x68, 0xc2, + 0xf9, 0xd9, 0x10, 0xbe, 0x21, 0x08, 0x3e, 0xaf, 0xe0, 0xe7, 0x1d, 0xfe, 0x15, 0x16, 0x76, 0x1d, + 0x53, 0xcf, 0xb8, 0xf5, 0xd9, 0x59, 0x40, 0xe0, 0x0a, 0x2c, 0x36, 0x4f, 0x11, 0xa4, 0x18, 0xe9, + 0x87, 0xee, 0xf2, 0xa7, 0x2a, 0xd4, 0xef, 0xcf, 0x8d, 0xd5, 0xe6, 0x78, 0x42, 0x70, 0x49, 0xd4, + 0x7c, 0x26, 0xcf, 0x0c, 0x33, 0xc1, 0xf4, 0x4c, 0x35, 0x39, 0x8f, 0x8e, 0xe7, 0x8a, 0xf7, 0xa0, + 0x6a, 0xe5, 0x5b, 0x2f, 0x34, 0x0c, 0x80, 0xbb, 0x8c, 0xd4, 0xa8, 0x44, 0x5e, 0xc4, 0x1e, 0x5d, + 0xd9, 0x12, 0x02, 0x9b, 0x95, 0x25, 0xe4, 0xa0, 0x02, 0xce, 0xe6, 0xcb, 0x75, 0xee, 0xe4, 0xd3, + 0xa6, 0x35, 0x14, 0x25, 0x07, 0x7d, 0x7a, 0xda, 0x58, 0xd5, 0x97, 0x68, 0x5a, 0xf4, 0x00, 0x11, + 0xa0, 0xc7, 0x74, 0x69, 0xdf, 0x83, 0xab, 0xb4, 0xd4, 0xbb, 0xb3, 0x7d, 0xc8, 0xa2, 0x9a, 0xcf, + 0x1f, 0x02, 0x4e, 0xfa, 0x3f, 0x0b, 0xcc, 0x7e, 0xba, 0x74, 0x73, 0xa2, 0x58, 0x40, 0x9b, 0x9a, + 0xd2, 0xd5, 0x5f, 0x63, 0x88, 0x19, 0xf4, 0x11, 0x1f, 0xa6, 0x7c, 0x23, 0xca, 0xc2, 0x2e, 0xeb, + 0x99, 0x8f, 0xf4, 0x16, 0xda, 0x60, 0xd9, 0x6b, 0xab, 0x9e, 0x0a, 0x7a, 0x5f, 0x78, 0xe3, 0x9d, + 0x7f, 0x72, 0xc7, 0xe6, 0x82, 0x6d, 0x6e, 0x67, 0xb1, 0x76, 0x41, 0x2a, 0x51, 0x9c, 0xb5, 0xff, + 0x7a, 0x25, 0x1c, 0xa0, 0x9e, 0x47, 0x12, 0xdf, 0x6c, 0x39, 0x31, 0x57, 0x92, 0x6e, 0xf7, 0x8a, + 0x04, 0xe7, 0x28, 0x3a, 0xf7, 0x38, 0x3a, 0xb3, 0x4b, 0x8f, 0xf6, 0xfd, 0x12, 0x20, 0xf8, 0x5b, + 0x10, 0xd6, 0x42, 0x1d, 0x57, 0xfa, 0x6f, 0xc8, 0xa0, 0x44, 0x9b, 0xee, 0x0d, 0xf8, 0xe5, 0xa2, + 0x92, 0x14, 0x21, 0x06, 0x63, 0x11, 0x4e, 0xdd, 0x0f, 0x87, 0x81, 0x11, 0x91, 0xd9, 0x0d, 0xe8, + 0xb0, 0xe3, 0xda, 0x25, 0x5a, 0x77, 0x88, 0xb0, 0x67, 0xea, 0x57, 0x70, 0x9b, 0x81, 0x03, 0x96, + 0x76, 0x61, 0x52, 0x73, 0x3b, 0x03, 0x82, 0x77, 0x2a, 0xec, 0xa2, 0x4b, 0xfd, 0xf8, 0x2d, 0x12, + 0x47, 0x06, 0x53, 0xb3, 0x85, 0xcd, 0x63, 0xbc, 0x4a, 0x69, 0xe4, 0x54, 0x4f, 0x55, 0xa1, 0x8d, + 0x7a, 0x21, 0xab, 0x83, 0xc0, 0x30, 0x79, 0xbd, 0xc6, 0xc4, 0x94, 0x9f, 0x7a, 0xb3, 0xcf, 0xdd, + 0x5c, 0x3d, 0x37, 0x97, 0xdf, 0x99, 0xac, 0xe9, 0x75, 0xbf, 0x95, 0x07, 0x0a, 0x56, 0xbb, 0x09, + 0x0c, 0x56, 0x9d, 0xad, 0x07, 0xc8, 0x3e, 0xca, 0x5e, 0x31, 0xd0, 0xc9, 0x78, 0x3b, 0x0d, 0x81, + 0x6e, 0x72, 0x2a, 0x29, 0x7a, 0x2a, 0x16, 0x70, 0xe6, 0x3c, 0x5c, 0xb9, 0xb3, 0x6d, 0x72, 0x88, + 0xe4, 0xb6, 0x00, 0xb3, 0xf1, 0x88, 0xab, 0xf5, 0x97, 0xb4, 0xaf, 0x03, 0xd2, 0x54, 0x97, 0x82, + 0xce, 0xe9, 0xaf, 0x52, 0xf6, 0x72, 0xf5, 0x4b, 0x74, 0xfb, 0x63, 0xf3, 0x9d, 0x56, 0x51, 0x01, + 0xc1, 0xa0, 0x45, 0x0b, 0x85, 0xbc, 0x53, 0x3e, 0x75, 0x8a, 0xa6, 0x1c, 0x69, 0x1a, 0x31, 0x99, + 0x66, 0x10, 0x41, 0x1e, 0xbe, 0x32, 0x98, 0x25, 0x6d, 0x63, 0x74, 0x47, 0xe6, 0xaf, 0x58, 0x76, + 0xf4, 0x7f, 0x33, 0x12, 0x7e, 0x23, 0x83, 0xd9, 0x9d, 0x09, 0x60, 0xe5, 0x75, 0x94, 0xa5, 0x66, + 0xe9, 0x72, 0x01, 0x5f, 0xe8, 0x1e, 0xef, 0x48, 0x9d, 0x2d, 0x2e, 0xc8, 0xda, 0x77, 0xb7, 0xec, + 0x43, 0x5e, 0x0e, 0x32, 0x73, 0xd4, 0x4b, 0x8b, 0x47, 0x98, 0x34, 0x47, 0x66, 0xf1, 0x0c, 0xf7, + 0xa0, 0xfe, 0x13, 0xe5, 0xfe, 0x7e, 0x52, 0x46, 0x57, 0xee, 0xd1, 0x70, 0xef, 0x9d, 0xfb, 0x4b, + 0x9f, 0x51, 0xab, 0xb4, 0x23, 0x5c, 0x83, 0x52, 0x18, 0x69, 0xb8, 0x91, 0x0e, 0x77, 0x4d, 0x70, + 0xf0, 0x14, 0x52, 0xa8, 0x6b, 0x0a, 0xe6, 0x00, 0xd5, 0x16, 0x63, 0x72, 0x2a, 0x84, 0xcc, 0x5c, + 0x03, 0x46, 0x3b, 0xda, 0xdf, 0x90, 0x1c, 0x6b, 0xda, 0xc7, 0x4b, 0x29, 0x8c, 0x22, 0x39, 0xbf, + 0xde, 0x05, 0x25, 0xa8, 0x5c, 0xb6, 0xfb, 0x32, 0xc0, 0x45, 0x66, 0xbc, 0xeb, 0xbb, 0xb7, 0x58, + 0xe3, 0x40, 0x5b, 0x2a, 0x1f, 0x29, 0x57, 0xfd, 0x86, 0xd0, 0x7e, 0xd0, 0x11, 0x36, 0xb5, 0x20, + 0x8b, 0x0c, 0xc7, 0x3c, 0x53, 0x33, 0x54, 0xee, 0xeb, 0x2d, 0x11, 0x64, 0xcf, 0xbe, 0x35, 0x87, + 0xfe, 0x43, 0xcb, 0x26, 0x14, 0xf9, 0xe6, 0x53, 0x61, 0x9e, 0xf2, 0x02, 0xb1, 0xf7, 0x60, 0x98, + 0x42, 0x77, 0x46, 0xb6, 0x58, 0xb0, 0xaf, 0xdb, 0x08, 0xae, 0x08, 0xbb, 0x3d, 0x45, 0x64, 0xa7, + 0x8c, 0x6c, 0xe9, 0xcc, 0xa0, 0xe6, 0x88, 0xf1, 0x0f, 0x06, 0xb1, 0x23, 0x29, 0x97, 0x99, 0x17, + 0x7a, 0xc3, 0xe6, 0xff, 0xcb, 0xf7, 0xdf, 0x4e, 0x49, 0xcd, 0x45, 0x21, 0x83, 0xe4, 0xf0, 0x64, + 0x7c, 0x9a, 0xf8, 0x3c, 0x63, 0x5f, 0x92, 0x20, 0x1b, 0x01, 0xd8, 0x77, 0xd4, 0x03, 0x31, 0x48, + 0x2a, 0x43, 0xe5, 0x96, 0xd3, 0x73, 0xfe, 0x19, 0x9b, 0x42, 0xe2, 0xc5, 0x59, 0x4d, 0x4b, 0x16, + 0x35, 0x31, 0x65, 0x7b, 0x92, 0xeb, 0x1f, 0x59, 0xdc, 0x9c, 0x6b, 0xc3, 0x12, 0x49, 0xca, 0x4d, + 0x8d, 0xb4, 0x49, 0xcb, 0xb6, 0x68, 0x05, 0xa8, 0xcd, 0x50, 0x1c, 0x2e, 0x79, 0xa5, 0xb7, 0xe3, + 0xd9, 0x2f, 0x5c, 0x25, 0xf4, 0x4c, 0x7b, 0x0f, 0x86, 0xa3, 0x41, 0xaf, 0xe6, 0x44, 0x0e, 0xa2, + 0x0a, 0xf8, 0x65, 0xec, 0x30, 0xc2, 0x45, 0x4c, 0xb4, 0x48, 0x7c, 0xda, 0xa8, 0xd5, 0x70, 0x29, + 0x86, 0x7a, 0xdf, 0x5b, 0xb3, 0x51, 0x2e, 0x59, 0x0d, 0xdb, 0x44, 0x2b, 0xcc, 0xe3, 0xee, 0x6e, + 0xab, 0xff, 0x6e, 0x47, 0xdf, 0x03, 0x1d, 0x90, 0xda, 0x90, 0xf7, 0xad, 0xf3, 0xa6, 0x68, 0x3a, + 0x8c, 0xfb, 0x4b, 0x4d, 0x66, 0x6c, 0x10, 0x36, 0x20, 0x10, 0x34, 0x77, 0x7d, 0x33, 0x62, 0x13, + 0x34, 0x73, 0x7e, 0x61, 0x24, 0x3c, 0x6c, 0xc3, 0xd1, 0x5b, 0x5e, 0xc9, 0x37, 0xa0, 0x11, 0xff, + 0x46, 0x75, 0x62, 0x17, 0x92, 0x69, 0xaf, 0x73, 0x08, 0xb9, 0x0d, 0x07, 0x13, 0xd5, 0x04, 0xd4, + 0x2c, 0xa7, 0x33, 0x4d, 0x08, 0x82, 0x64, 0x5f, 0xb8, 0xc6, 0xb6, 0x27, 0xbb, 0x5f, 0x9a, 0x89, + 0x9d, 0x33, 0x9f, 0x3b, 0xff, 0xf2, 0xc3, 0x47, 0xb9, 0x5e, 0xd6, 0x2f, 0x43, 0x8d, 0x92, 0xe4, + 0xf5, 0xcf, 0xa4, 0x70, 0xba, 0xaf, 0x40, 0xd1, 0x35, 0xb6, 0x7d, 0xdb, 0xf9, 0x0d, 0x61, 0x58, + 0x6d, 0x2b, 0xbe, 0x30, 0xad, 0xd1, 0xbf, 0x44, 0x34, 0xa3, 0xb9, 0x18, 0xe9, 0x03, 0xfa, 0xd6, + 0xde, 0xf9, 0xe2, 0x43, 0x88, 0xf6, 0x5e, 0x18, 0xb6, 0x19, 0xa0, 0xdb, 0xec, 0xd9, 0xbb, 0xe7, + 0x6d, 0xc9, 0x7f, 0xac, 0x12, 0x1b, 0x32, 0xb4, 0x70, 0xe9, 0x57, 0xa7, 0xc6, 0x82, 0x03, 0x09, + 0xb5, 0xb3, 0x15, 0x25, 0xe9, 0x8e, 0xe9, 0xb3, 0xbf, 0x1a, 0x5c, 0x2d, 0x5f, 0x3c, 0x6e, 0x55, + 0x74, 0x00, 0x84, 0x42, 0x86, 0x11, 0x8f, 0x11, 0x34, 0xe1, 0x61, 0x5f, 0xba, 0x9f, 0x06, 0x37, + 0xa0, 0x8c, 0x4d, 0x89, 0xf1, 0x90, 0x5c, 0x3f, 0x0b, 0xfc, 0xf5, 0xa9, 0x42, 0x5b, 0xcf, 0xf3, + 0x11, 0x5e, 0x81, 0x07, 0x10, 0x63, 0x9e, 0x8f, 0x83, 0x0a, 0x0f, 0x25, 0x20, 0x6f, 0x45, 0x46, + 0xb3, 0x2e, 0xe0, 0x5e, 0x6a, 0xe8, 0x33, 0x21, 0xeb, 0xf1, 0xbb, 0x4f, 0xaa, 0xc8, 0xd8, 0xa6, + 0xc7, 0xd1, 0xec, 0x73, 0x91, 0x1a, 0xc3, 0x66, 0x03, 0xc4, 0x7d, 0xab, 0x31, 0x3b, 0x57, 0xf4, + 0x5b, 0xf8, 0x90, 0x7c, 0xec, 0x95, 0xef, 0xa7, 0x6e, 0x88, 0x51, 0xdb, 0x7c, 0xa0, 0xb0, 0xcf, + 0xbe, 0x11, 0x9c, 0xcd, 0x03, 0x35, 0x52, 0xbd, 0x95, 0xb2, 0x98, 0xf1, 0x4f, 0xe8, 0xcb, 0x09, + 0x0b, 0xaa, 0x1d, 0xa6, 0x54, 0xeb, 0x52, 0x54, 0x99, 0xe4, 0x86, 0x46, 0xdf, 0x45, 0xe0, 0x13, + 0x20, 0x73, 0xe8, 0x07, 0x61, 0xdf, 0x12, 0xaa, 0x69, 0xa9, 0xf4, 0x1d, 0x9f, 0x6d, 0x20, 0x22, + 0xb4, 0x62, 0xeb, 0x68, 0x64, 0xfb, 0xa8, 0x57, 0x94, 0xbe, 0x7f, 0xf3, 0x89, 0x40, 0xb8, 0x95, + 0x17, 0x17, 0x80, 0xf7, 0x68, 0xa4, 0x16, 0xe6, 0x4e, 0x5a, 0xf9, 0xeb, 0xdd, 0x76, 0xe6, 0x29, + 0xc7, 0xfb, 0x45, 0xb0, 0x7a, 0xeb, 0xc8, 0xf2, 0x6c, 0x2a, 0x94, 0x1e, 0xb6, 0x08, 0x9e, 0x71, + 0x3d, 0x1a, 0x99, 0x6b, 0x07, 0xaf, 0x5f, 0xe9, 0x01, 0x4b, 0xd7, 0xd0, 0x5f, 0x7f, 0xac, 0x5b, + 0x10, 0x12, 0xac, 0x79, 0x89, 0x20, 0x4e, 0xc8, 0xdc, 0xe6, 0x40, 0x7b, 0x5a, 0x21, 0xe8, 0x06, + 0x0b, 0xf0, 0x72, 0xaa, 0x34, 0x38, 0x4d, 0x2f, 0xc6, 0xae, 0x35, 0xb4, 0x04, 0xa5, 0x8f, 0x0a, + 0x4e, 0xd3, 0x4c, 0x17, 0x4d, 0x70, 0x49, 0x62, 0x92, 0x95, 0xa6, 0xfb, 0x32, 0x70, 0xb1, 0x0d, + 0xe8, 0x27, 0xaf, 0xee, 0xbf, 0xcb, 0x16, 0x38, 0x7c, 0x81, 0x8e, 0xc4, 0x6c, 0xcb, 0xe9, 0xf5, + 0x64, 0xdd, 0xb4, 0x79, 0x4c, 0x0e, 0x49, 0x06, 0x0b, 0xcd, 0xa3, 0x62, 0x7f, 0x3a, 0xde, 0xdb, + 0x4b, 0x76, 0xed, 0x4a, 0xe7, 0xe6, 0x4b, 0x29, 0x20, 0x17, 0xc7, 0x70, 0x99, 0x3d, 0xde, 0x3b, + 0x23, 0x52, 0xc2, 0x3e, 0x4c, 0x1b, 0xfe, 0xf9, 0x42, 0xd3, 0x92, 0xa4, 0xc8, 0xae, 0x72, 0xf2, + 0x9e, 0xab, 0x4b, 0x0e, 0xb0, 0xda, 0x68, 0xc6, 0xba, 0xed, 0x47, 0x0f, 0x81, 0xca, 0x5b, 0x24, + 0xa9, 0xd3, 0x39, 0x62, 0xea, 0x33, 0x76, 0xac, 0xad, 0x2c, 0x79, 0x01, 0x87, 0x0e, 0x60, 0x19, + 0x86, 0xde, 0x96, 0x92, 0x24, 0x23, 0x90, 0x3c, 0x3f, 0x98, 0xc0, 0xd7, 0x3e, 0xde, 0xc0, 0x3b, + 0x18, 0xbb, 0x53, 0x95, 0xc5, 0xf9, 0x17, 0xf5, 0x76, 0x56, 0x80, 0x70, 0x89, 0x26, 0x94, 0x8b, + 0xfd, 0x7e, 0xa3, 0xdd, 0x96, 0x16, 0x43, 0x06, 0xfc, 0x14, 0x19, 0x64, 0x38, 0xcf, 0x95, 0x5f, + 0xad, 0x59, 0xb4, 0xeb, 0xa9, 0xae, 0x39, 0xef, 0x33, 0x6b, 0x8e, 0x14, 0xe6, 0x8d, 0x4f, 0x94, + 0x53, 0xb5, 0xd8, 0xd9, 0x43, 0x24, 0x2a, 0x64, 0xd0, 0x28, 0x04, 0x44, 0xeb, 0x74, 0x48, 0x09, + 0x64, 0x33, 0xf1, 0x44, 0x2d, 0x2d, 0xf4, 0xc9, 0xbd, 0x50, 0xf3, 0x69, 0x6d, 0xb5, 0x99, 0xce, + 0x56, 0x0e, 0xc9, 0x3f, 0x65, 0x16, 0xbc, 0x7a, 0xeb, 0x0b, 0xc6, 0x88, 0xc7, 0x8f, 0x3c, 0x2b, + 0xbe, 0x13, 0x73, 0x43, 0x5d, 0x3a, 0xdf, 0x96, 0xb8, 0x82, 0x42, 0x4a, 0xf7, 0xf4, 0x60, 0x3b, + 0xd3, 0x60, 0x38, 0x64, 0xa5, 0x97, 0xd6, 0xd8, 0x41, 0x8e, 0x53, 0x9c, 0x88, 0x13, 0x8a, 0x4e, + 0x27, 0x85, 0x60, 0x60, 0x44, 0x2f, 0x59, 0x4a, 0x8e, 0xb2, 0x20, 0xc8, 0x8e, 0x6c, 0x7a, 0x45, + 0x76, 0x26, 0x71, 0x09, 0x0a, 0xf3, 0x09, 0x04, 0x45, 0xab, 0x72, 0x58, 0x9d, 0xe5, 0x9f, 0x22, + 0xef, 0x77, 0x4f, 0xce, 0xba, 0x84, 0x56, 0xbd, 0xa1, 0x08, 0xd1, 0x2e, 0x8b, 0x6e, 0x82, 0x12, + 0x42, 0x5f, 0x9c, 0x5e, 0x1b, 0x00, 0xf0, 0x01, 0xfd, 0xdf, 0xb4, 0x32, 0x38, 0x28, 0x4e, 0x54, + 0x87, 0xb0, 0xc6, 0xaf, 0x35, 0xaf, 0x79, 0x31, 0x32, 0xb1, 0x5b, 0xe4, 0xe1, 0xf5, 0xf7, 0x7a, + 0x10, 0x7c, 0x49, 0xee, 0x71, 0x99, 0x75, 0x28, 0xfc, 0x0d, 0x60, 0xb8, 0xb2, 0xad, 0xc5, 0x9d, + 0x83, 0xeb, 0x8c, 0x86, 0x2f, 0x7a, 0x87, 0xa8, 0x20, 0x66, 0x7f, 0x25, 0x52, 0xe4, 0xef, 0xae, + 0xfa, 0xb3, 0xd1, 0x96, 0xc5, 0x92, 0xcc, 0xa0, 0xca, 0x6e, 0xb6, 0x67, 0x51, 0x79, 0x0e, 0xd1, + 0x2b, 0x86, 0xf9, 0xdc, 0x05, 0xeb, 0x4d, 0xb9, 0xc5, 0xbf, 0x6e, 0xac, 0x23, 0xcf, 0xe4, 0x72, + 0xd9, 0x97, 0x32, 0xbd, 0x8f, 0x4b, 0xd0, 0xe7, 0xae, 0x54, 0xb9, 0x8f, 0xea, 0x55, 0x57, 0x5b, + 0x82, 0xe5, 0x49, 0xed, 0x89, 0xad, 0x0a, 0xfc, 0x44, 0x43, 0x63, 0x64, 0xcf, 0x48, 0x80, 0x04, + 0x95, 0xdf, 0xf0, 0xf7, 0x0c, 0xe4, 0x37, 0xd4, 0xbf, 0x95, 0x45, 0x85, 0x84, 0xc5, 0x23, 0x44, + 0xaf, 0x52, 0x47, 0xd1, 0x91, 0x93, 0x46, 0x29, 0xda, 0xae, 0x94, 0x7b, 0xe0, 0x60, 0x06, 0xfb, + 0x7e, 0x1e, 0x44, 0xf5, 0xe1, 0x68, 0x56, 0x1a, 0x29, 0x3e, 0x31, 0xf2, 0x19, 0xb4, 0xf4, 0x8d, + 0x0b, 0x82, 0xee, 0xc9, 0xa8, 0x81, 0xcc, 0x45, 0x3c, 0x95, 0xb7, 0x53, 0x86, 0xb4, 0xee, 0x87, + 0xda, 0xe3, 0xbf, 0x69, 0xfe, 0x66, 0xd8, 0xe6, 0x1b, 0x2b, 0x73, 0x5d, 0xf8, 0xec, 0x04, 0x28, + 0x8f, 0xd5, 0x04, 0xc4, 0x18, 0x49, 0xc3, 0x63, 0x09, 0x16, 0x1d, 0x90, 0xc4, 0x0a, 0x40, 0xb7, + 0xec, 0xd7, 0x93, 0x12, 0xe5, 0x84, 0xa4, 0x44, 0x13, 0x1d, 0x6b, 0x74, 0x52, 0x55, 0x9a, 0x37, + 0x8c, 0x84, 0x8f, 0x39, 0x47, 0x90, 0x56, 0xbd, 0xc8, 0xb9, 0xae, 0x04, 0xf2, 0xd4, 0x07, 0xcb, + 0xae, 0xd9, 0xac, 0xd1, 0xce, 0xdf, 0x42, 0xde, 0x49, 0x3d, 0xc0, 0x0d, 0x6d, 0xc5, 0x69, 0x60, + 0xa9, 0xaa, 0xa0, 0x1d, 0xf5, 0x1f, 0x7f, 0xa2, 0x4a, 0x57, 0x2a, 0x82, 0x83, 0x7e, 0xe9, 0xb1, + 0x7f, 0x2b, 0x6d, 0x63, 0xb7, 0x89, 0xc6, 0xc4, 0xbd, 0x60, 0xc9, 0x0f, 0x03, 0x18, 0x8f, 0x7c, + 0x47, 0x76, 0xb6, 0xfe, 0x2c, 0xb7, 0xf2, 0xcf, 0x94, 0xae, 0x06, 0x39, 0x76, 0x57, 0x21, 0x38, + 0xc0, 0x6e, 0x80, 0x66, 0x8c, 0x5c, 0x9c, 0x12, 0xc0, 0x1e, 0x2e, 0x2c, 0xb1, 0xed, 0xa1, 0xdf, + 0xb1, 0x7f, 0x5d, 0x0d, 0x1f, 0xd7, 0x03, 0xb1, 0xa8, 0x6e, 0x71, 0x15, 0x60, 0x2e, 0x04, 0x6e, + 0x1e, 0xbf, 0x3f, 0xa8, 0xb5, 0x32, 0xf1, 0x20, 0xa0, 0x2e, 0xee, 0x76, 0xa6, 0xa5, 0x58, 0x11, + 0x21, 0x79, 0xd6, 0x48, 0xbc, 0x68, 0x74, 0xc4, 0xea, 0xb2, 0xae, 0x36, 0x99, 0x82, 0x74, 0x9b, + 0xcd, 0xa9, 0x21, 0x23, 0x06, 0x5c, 0x8a, 0x7a, 0x3e, 0xac, 0xfd, 0x5e, 0x00, 0xf4, 0x75, 0xec, + 0xd5, 0x99, 0x90, 0xb2, 0x29, 0x98, 0xc5, 0x1c, 0x9a, 0x80, 0x78, 0xd2, 0xf3, 0x31, 0x9f, 0x58, + 0xef, 0x5b, 0x3d, 0x25, 0x39, 0x55, 0xa9, 0xe1, 0xc3, 0xdd, 0x26, 0xae, 0xdf, 0xf2, 0xea, 0xe1, + 0x1b, 0x71, 0xb7, 0xb1, 0x77, 0x98, 0x9f, 0x92, 0xa7, 0xd1, 0x17, 0x5d, 0xde, 0x86, 0x4b, 0xca, + 0x86, 0xf1, 0xb8, 0x94, 0x36, 0xef, 0xb6, 0x20, 0x1d, 0x8d, 0x65, 0xa7, 0x50, 0xfb, 0xa0, 0xbd, + 0x14, 0xbd, 0x71, 0xcf, 0xdd, 0x7e, 0xab, 0xf3, 0xff, 0xde, 0x09, 0x52, 0x18, 0x48, 0x21, 0xe6, + 0x75, 0xcd, 0xbb, 0xa4, 0x6a, 0xf2, 0xbc, 0x8e, 0x6d, 0x29, 0x3d, 0x1d, 0x16, 0xb5, 0x48, 0x35, + 0x82, 0xb2, 0x60, 0x60, 0xce, 0x60, 0x28, 0x2a, 0x5b, 0x78, 0x5f, 0xeb, 0x1b, 0x91, 0x9d, 0x69, + 0x7c, 0xd6, 0xe1, 0xdc, 0xf0, 0xfd, 0xd1, 0x0e, 0xf2, 0x41, 0xe0, 0x32, 0x7d, 0x9a, 0xd0, 0x62, + 0xf4, 0x01, 0x9b, 0x49, 0xa6, 0x32, 0xd7, 0x6f, 0x05, 0x40, 0x26, 0xcb, 0xf4, 0xcb, 0xb3, 0x16, + 0xb0, 0x93, 0x91, 0xa3, 0x25, 0x5b, 0xcf, 0x27, 0xf9, 0x9a, 0x91, 0xe7, 0x9b, 0x6b, 0x00, 0xad, + 0xc5, 0x5e, 0xc2, 0xe5, 0x4e, 0x14, 0x55, 0x83, 0xd4, 0x7d, 0x34, 0x34, 0x14, 0x6b, 0xef, 0x4e, + 0x4f, 0xfd, 0xa3, 0x88, 0x61, 0x1a, 0x64, 0xb3, 0xcc, 0x5f, 0xef, 0xfc, 0x3e, 0xc1, 0x5a, 0x75, + 0x31, 0xad, 0x77, 0x91, 0xae, 0x69, 0x1d, 0x69, 0xa1, 0x5b, 0x8a, 0x51, 0x41, 0x40, 0x1e, 0xcb, + 0xe0, 0xb3, 0x68, 0x84, 0xb0, 0x50, 0x54, 0xd0, 0x9a, 0x28, 0x34, 0x08, 0x21, 0x20, 0x43, 0x2c, + 0xd0, 0x43, 0x79, 0x12, 0x79, 0xe5, 0x9c, 0x0d, 0x22, 0x89, 0x06, 0xf7, 0x41, 0x27, 0x98, 0xca, + 0x0f, 0xf0, 0x02, 0x54, 0xac, 0x52, 0x79, 0x07, 0xf1, 0x91, 0x94, 0xdb, 0x66, 0x93, 0x32, 0x54, + 0x10, 0x76, 0x45, 0x5c, 0xbc, 0xba, 0x90, 0x5a, 0xa9, 0x64, 0x47, 0xa7, 0x14, 0xca, 0x49, 0xe4, + 0x07, 0xb4, 0x57, 0x5d, 0xf7, 0x41, 0x6e, 0x74, 0x81, 0xcd, 0xa5, 0xa0, 0xbd, 0x17, 0x02, 0xa7, + 0x80, 0x3c, 0x39, 0xda, 0xfb, 0xa9, 0xf7, 0x96, 0x9a, 0xdf, 0xd1, 0xe6, 0xe7, 0xe8, 0xb9, 0x4e, + 0xe1, 0xf1, 0x5a, 0xfc, 0x22, 0x7b, 0xbd, 0xb2, 0xa7, 0x95, 0x15, 0x97, 0xce, 0x9e, 0xb2, 0xe0, + 0x77, 0xd8, 0xea, 0xb5, 0x50, 0x05, 0xf2, 0x5b, 0x93, 0xf9, 0xca, 0x99, 0x5b, 0x2b, 0x16, 0x07, + 0x2d, 0xb2, 0x90, 0x86, 0x3f, 0x90, 0xf2, 0xb3, 0x41, 0xa0, 0x3c, 0x93, 0xd1, 0x72, 0x4c, 0xa5, + 0x5e, 0xe3, 0x85, 0x68, 0xce, 0x25, 0x1f, 0xe3, 0x7e, 0xdc, 0x30, 0xf7, 0x61, 0x46, 0xff, 0xa1, + 0x43, 0x07, 0xe2, 0x3e, 0x67, 0x3f, 0x1d, 0x2d, 0xf2, 0x62, 0xed, 0x35, 0x4b, 0x35, 0x3e, 0xb5, + 0x16, 0x49, 0xce, 0x4f, 0x70, 0xef, 0x58, 0x4c, 0x30, 0xc0, 0xb6, 0x61, 0x2a, 0xe6, 0xd7, 0x9b, + 0x96, 0xd7, 0x8e, 0x8d, 0xdf, 0xb6, 0xf9, 0xa2, 0xf0, 0x99, 0x9b, 0xb9, 0x7c, 0x12, 0x56, 0xee, + 0x04, 0x61, 0xd3, 0xf3, 0x3e, 0xcf, 0x9e, 0xf6, 0xad, 0x08, 0x45, 0x74, 0xc7, 0x6d, 0x74, 0xfb, + 0x21, 0xbe, 0x45, 0xdf, 0x9f, 0x3d, 0xee, 0x8b, 0xa4, 0xb1, 0xc8, 0x93, 0xb2, 0xed, 0x19, 0x0a, + 0xf3, 0x49, 0x81, 0xd0, 0x02, 0xad, 0xb5, 0xf3, 0x09, 0x48, 0xcc, 0xe8, 0x36, 0x17, 0xd1, 0x4c, + 0x0c, 0xe0, 0x83, 0x57, 0x8d, 0x26, 0xa8, 0x3d, 0xc5, 0x53, 0x09, 0x60, 0x72, 0xfa, 0x6b, 0xbd, + 0x52, 0x55, 0x7a, 0x10, 0x7e, 0x53, 0xb0, 0xeb, 0x4f, 0x14, 0x0a, 0x1a, 0xcf, 0xb4, 0xeb, 0x2c, + 0x74, 0x47, 0x01, 0x1e, 0x48, 0xc8, 0xdd, 0xee, 0x99, 0xfd, 0x9b, 0x45, 0x11, 0xb3, 0x59, 0x0b, + 0xa7, 0x26, 0x79, 0xf8, 0x0f, 0x74, 0xbd, 0x64, 0x3d, 0x28, 0xf6, 0x7f, 0x98, 0x0f, 0x98, 0xb1, + 0xd5, 0xdc, 0xd1, 0x75, 0x8f, 0xd9, 0xc2, 0xbd, 0x24, 0xe8, 0xf8, 0xf1, 0x14, 0x13, 0xf5, 0x47, + 0x54, 0x01, 0x42, 0x07, 0xdf, 0x41, 0x81, 0x98, 0xa3, 0x8d, 0xdb, 0xfd, 0x90, 0xd5, 0x97, 0x49, + 0xb9, 0x41, 0x1d, 0x0b, 0x9b, 0xad, 0x8b, 0xcb, 0x7c, 0xd0, 0xdd, 0x2f, 0xd1, 0x0e, 0x17, 0xed, + 0x9f, 0xfb, 0xa5, 0x17, 0xc5, 0x83, 0xfc, 0x39, 0xd3, 0x73, 0x50, 0xc4, 0x31, 0x25, 0xb9, 0xb7, + 0x75, 0x52, 0xcd, 0x18, 0x04, 0xa7, 0x6b, 0x4e, 0xa3, 0xe8, 0x32, 0x38, 0x4e, 0x4e, 0xe9, 0xac, + 0xc8, 0xac, 0xa0, 0xac, 0xcb, 0x18, 0x57, 0x44, 0x20, 0x01, 0x97, 0xea, 0xfd, 0x61, 0xdd, 0x9d, + 0x0c, 0x4a, 0xb2, 0xd6, 0x1c, 0x9b, 0x41, 0x9e, 0xab, 0x57, 0x8d, 0xa2, 0x0e, 0x70, 0xa4, 0x46, + 0xba, 0x44, 0x78, 0x91, 0x75, 0x3b, 0x58, 0xe2, 0x22, 0x59, 0xff, 0xd9, 0x7e, 0x80, 0x5f, 0xc6, + 0x70, 0x45, 0x55, 0x3a, 0x90, 0x51, 0x8f, 0x6b, 0xc0, 0x53, 0xe9, 0x1c, 0xa6, 0x1f, 0x83, 0xc8, + 0x52, 0x60, 0x1b, 0x90, 0x2c, 0x5b, 0x65, 0x97, 0x4b, 0x9c, 0xf8, 0xbc, 0xc8, 0xa2, 0x59, 0xf2, + 0x12, 0x95, 0x25, 0xe0, 0xae, 0x14, 0x3c, 0x22, 0xf9, 0xc0, 0x6d, 0xfd, 0x69, 0x0d, 0x82, 0x8e, + 0x4b, 0x3b, 0x43, 0x2b, 0xd0, 0x86, 0x45, 0x8b, 0x4d, 0xac, 0xb1, 0x41, 0xfb, 0x18, 0xb1, 0x13, + 0x98, 0x96, 0xa3, 0xa2, 0x09, 0xf6, 0x93, 0xb9, 0x4d, 0x0a, 0xa3, 0xb6, 0xe1, 0x5b, 0x00, 0xf2, + 0x3f, 0x3d, 0x02, 0x52, 0x82, 0x03, 0x35, 0x1c, 0x62, 0x53, 0x91, 0x4e, 0xf8, 0x80, 0xc9, 0x5f, + 0xa9, 0x8b, 0xe8, 0x91, 0xe1, 0x2d, 0x0e, 0xc2, 0x7c, 0xac, 0x53, 0x50, 0x75, 0x0c, 0x17, 0xe2, + 0x92, 0xda, 0xa6, 0xa7, 0xe0, 0x63, 0x50, 0x43, 0x95, 0x58, 0x11, 0xca, 0xe1, 0x39, 0x2c, 0x3c, + 0xed, 0x4d, 0xfe, 0x86, 0xce, 0x7f, 0x5b, 0xf9, 0xbc, 0xd1, 0xb3, 0xbe, 0x49, 0x7b, 0xfc, 0x5b, + 0xd3, 0xf2, 0xd0, 0xfd, 0xf1, 0x8b, 0x56, 0x96, 0x10, 0xd2, 0x06, 0x2f, 0xed, 0x1e, 0x11, 0x57, + 0x71, 0x71, 0xd3, 0x4c, 0x26, 0x7f, 0x4b, 0x1b, 0x7e, 0x9d, 0x40, 0x21, 0x2b, 0xc3, 0x9b, 0x87, + 0x32, 0x20, 0xdb, 0x37, 0xb6, 0x76, 0xc5, 0x5c, 0x3a, 0x23, 0xab, 0x1b, 0x2a, 0xe6, 0x5e, 0x0e, + 0x06, 0x8b, 0x8a, 0xcc, 0xc5, 0x1c, 0xc0, 0x02, 0xee, 0x81, 0x07, 0x64, 0x99, 0x42, 0xcb, 0xe8, + 0x43, 0xfc, 0xd1, 0x97, 0xb3, 0xd3, 0xc1, 0xc3, 0xe0, 0xab, 0xb6, 0x54, 0x2a, 0x5e, 0x19, 0x78, + 0x8b, 0xa4, 0x33, 0x22, 0x41, 0x33, 0x50, 0xbb, 0xad, 0x1c, 0x71, 0x9c, 0x89, 0x8a, 0x94, 0xc6, + 0xd3, 0xcd, 0x33, 0xb9, 0x8a, 0xbf, 0x1a, 0xc0, 0x34, 0x32, 0xfb, 0x47, 0x24, 0x85, 0x2c, 0x0e, + 0xee, 0x4d, 0xe4, 0x3d, 0x01, 0xab, 0x36, 0x0e, 0x63, 0x69, 0xbb, 0x92, 0xc7, 0x81, 0xcd, 0xa1, + 0xeb, 0x27, 0xce, 0xd5, 0x81, 0xfd, 0xb4, 0xd9, 0xc7, 0xfe, 0xe9, 0xbb, 0xff, 0xbd, 0xac, 0x6a, + 0x5d, 0xce, 0x96, 0xc8, 0xc3, 0x5b, 0x7b, 0x32, 0x88, 0x18, 0xdb, 0xf8, 0x82, 0x47, 0x21, 0xb3, + 0x30, 0x3c, 0xbd, 0xbc, 0x99, 0xd6, 0xc5, 0x04, 0xef, 0xfe, 0x8d, 0x19, 0x92, 0xa0, 0x78, 0xea, + 0x4c, 0x5b, 0xd5, 0xa8, 0x43, 0x01, 0x6e, 0xaa, 0xa2, 0x09, 0xc1, 0x35, 0xdb, 0x64, 0xc1, 0xb6, + 0xf5, 0x51, 0x6d, 0xf5, 0x76, 0x15, 0x72, 0x4c, 0xfb, 0x1a, 0x0a, 0xb6, 0x6f, 0xc6, 0xf2, 0x47, + 0xa7, 0x77, 0x01, 0xd7, 0x1b, 0x0b, 0x52, 0xad, 0xc0, 0xc0, 0x82, 0xc3, 0x4c, 0x2e, 0xb2, 0xd4, + 0x70, 0xef, 0xbc, 0xd3, 0xa1, 0x3a, 0xfd, 0xca, 0x93, 0x25, 0x72, 0x39, 0xc3, 0xc1, 0xbb, 0x50, + 0x8a, 0xed, 0x31, 0xc6, 0xf3, 0xa7, 0x07, 0x9b, 0xa6, 0xa8, 0xed, 0x96, 0x30, 0x5b, 0xe5, 0x9c, + 0x2a, 0x67, 0x87, 0x65, 0xee, 0xa3, 0x99, 0xc7, 0x73, 0x53, 0x55, 0x8f, 0x4d, 0x55, 0x9c, 0x71, + 0xe8, 0x10, 0x05, 0x0a, 0x26, 0x26, 0xe5, 0x88, 0x0a, 0xd1, 0x52, 0x8e, 0x05, 0x10, 0x9e, 0xcf, + 0x52, 0x21, 0x71, 0x1b, 0x64, 0x51, 0xcf, 0xe5, 0x64, 0x92, 0x82, 0x4e, 0x03, 0x3b, 0xa7, 0x85, + 0xaa, 0xcb, 0x81, 0x0a, 0xc2, 0xd1, 0xea, 0xe4, 0x5a, 0x54, 0x79, 0xa7, 0xe2, 0x65, 0x18, 0x86, + 0xdf, 0xe5, 0xed, 0x0e, 0xb0, 0xd0, 0x16, 0x7e, 0xa6, 0x9b, 0x27, 0xdb, 0x93, 0x84, 0xa3, 0xdc, + 0xae, 0x48, 0x57, 0x6b, 0x10, 0x3a, 0x6b, 0x64, 0x1a, 0x48, 0xee, 0x2e, 0x78, 0xd9, 0x7c, 0x85, + 0xbf, 0x69, 0xad, 0xfa, 0x13, 0xc7, 0xe1, 0xac, 0xa2, 0x1b, 0x82, 0xc9, 0x2c, 0xd1, 0xdf, 0x55, + 0x82, 0x98, 0x15, 0x11, 0x10, 0x39, 0xc5, 0xf1, 0x03, 0xe3, 0xc1, 0x7b, 0x2f, 0x28, 0x1e, 0xb9, + 0x04, 0xa8, 0xc8, 0x8e, 0x41, 0xaf, 0x28, 0x84, 0x55, 0xb4, 0x43, 0xcf, 0xe2, 0xba, 0x2e, 0x16, + 0x07, 0xbf, 0x5a, 0x3c, 0xe7, 0x4b, 0x2f, 0xd4, 0x34, 0xef, 0x5f, 0x33, 0x8a, 0x55, 0x3e, 0x32, + 0x49, 0x5c, 0x86, 0xf2, 0x30, 0x61, 0x58, 0x70, 0x0c, 0x9b, 0xfd, 0x69, 0x7a, 0x1b, 0x36, 0x8a, + 0xaa, 0x9a, 0xe6, 0x0e, 0xcd, 0xf4, 0xad, 0xb6, 0xe1, 0xf0, 0xc8, 0x71, 0xee, 0x39, 0x58, 0xac, + 0xaa, 0x46, 0xf6, 0x2c, 0xd2, 0x8c, 0x1a, 0x4c, 0x8c, 0x67, 0xcf, 0x47, 0x2f, 0xb9, 0x45, 0x43, + 0x69, 0x00, 0x2e, 0x87, 0x13, 0xf8, 0xa6, 0x35, 0xaa, 0x0b, 0x04, 0xad, 0x9e, 0xe4, 0x1f, 0x28, + 0x34, 0xe8, 0xfd, 0x09, 0x2b, 0x6f, 0xac, 0xc7, 0x45, 0xde, 0xd3, 0x3e, 0xb5, 0xe9, 0x36, 0xfe, + 0x6b, 0xb6, 0x16, 0x74, 0x42, 0x0b, 0x46, 0x40, 0x12, 0x27, 0x53, 0x74, 0x14, 0x08, 0x70, 0x9d, + 0x50, 0xec, 0x47, 0xc9, 0x5a, 0x8a, 0xa8, 0x23, 0x72, 0x60, 0x8d, 0x1c, 0xad, 0x16, 0xfc, 0xfa, + 0x43, 0x32, 0xd3, 0x09, 0x5c, 0xdb, 0xfa, 0x78, 0x4d, 0x2d, 0xb9, 0xef, 0xd3, 0x09, 0x22, 0x6c, + 0x6b, 0x52, 0x9b, 0xd5, 0x40, 0x78, 0xa3, 0x25, 0x51, 0xaa, 0x1c, 0x4e, 0x62, 0x05, 0x43, 0x24, + 0x97, 0xa6, 0x09, 0x83, 0x3f, 0x53, 0x13, 0xa2, 0x9d, 0xe1, 0xed, 0x14, 0xe0, 0xeb, 0x4e, 0x24, + 0x64, 0x7e, 0x34, 0x02, 0x33, 0x69, 0xca, 0x6b, 0x43, 0xfd, 0xff, 0xda, 0xcf, 0x2b, 0x86, 0x81, + 0x34, 0x69, 0xd1, 0x3c, 0xae, 0xa5, 0x1e, 0x41, 0xcc, 0x58, 0xe6, 0x13, 0xed, 0x05, 0x19, 0xdb, + 0xc2, 0xe8, 0x23, 0xdf, 0x7c, 0x96, 0x15, 0x3d, 0xcb, 0x36, 0x2a, 0x0b, 0x3b, 0xd6, 0x1b, 0xba, + 0xba, 0xba, 0x30, 0x54, 0x57, 0x2d, 0x20, 0xb6, 0x53, 0x88, 0x6b, 0xed, 0x3d, 0x51, 0x38, 0xb1, + 0x0e, 0x59, 0x7f, 0x0e, 0xdc, 0x32, 0xf6, 0x41, 0x4a, 0x46, 0xdf, 0x21, 0x29, 0xdb, 0x26, 0xc9, + 0xeb, 0xe8, 0xb1, 0x7a, 0xe1, 0xa1, 0x6d, 0x02, 0x70, 0xc1, 0x88, 0x10, 0x3b, 0x70, 0xcb, 0x9f, + 0x2e, 0xc9, 0x91, 0xd0, 0x8a, 0x61, 0x9a, 0x34, 0x6d, 0x07, 0x7f, 0x3c, 0xd4, 0x5a, 0x9d, 0x38, + 0x45, 0xe7, 0xa8, 0x8b, 0x33, 0x04, 0xde, 0x26, 0x73, 0xa8, 0x7d, 0xf4, 0x5f, 0x3c, 0x2a, 0xe6, + 0x5d, 0x8c, 0x55, 0xc7, 0xdf, 0x2b, 0xb0, 0x18, 0xae, 0x45, 0x4a, 0x83, 0xb9, 0x5e, 0xd4, 0xf5, + 0xda, 0x4b, 0x4b, 0xac, 0x4b, 0x87, 0x47, 0x3b, 0xcc, 0x3a, 0x05, 0x56, 0x3e, 0x30, 0xb7, 0x25, + 0xd9, 0x2d, 0xe9, 0xb0, 0x71, 0x11, 0x92, 0x1d, 0x76, 0x63, 0xea, 0xb9, 0x16, 0xd0, 0xec, 0xe5, + 0xfd, 0x11, 0x0d, 0xae, 0x00, 0x69, 0x62, 0x66, 0x95, 0x30, 0xc9, 0xcc, 0xa4, 0xd6, 0x7e, 0x4f, + 0x81, 0xb7, 0xf3, 0xe7, 0x9d, 0xa7, 0xf8, 0xf8, 0xf7, 0x0c, 0x7f, 0x5e, 0x6a, 0x15, 0x49, 0xb3, + 0x1c, 0x3f, 0xa5, 0xaf, 0xea, 0x79, 0xb3, 0x59, 0x12, 0x48, 0xea, 0xa6, 0x0d, 0x6a, 0x8d, 0xe8, + 0xae, 0xb5, 0xde, 0x5b, 0xd8, 0x31, 0xbd, 0x0e, 0xa8, 0x24, 0xe4, 0x18, 0x54, 0x7b, 0xc3, 0x6e, + 0xc2, 0x03, 0x57, 0x31, 0xd2, 0x31, 0x22, 0xf6, 0x71, 0xa0, 0x72, 0xcb, 0x28, 0x45, 0xdd, 0xe3, + 0xaa, 0x42, 0xb9, 0x30, 0x32, 0xe5, 0x61, 0xd5, 0xfa, 0x85, 0x4d, 0x7a, 0xce, 0x27, 0x60, 0x0a, + 0x54, 0x93, 0x02, 0x4d, 0xcc, 0x98, 0x30, 0x76, 0x5b, 0x99, 0x33, 0x9a, 0x91, 0x97, 0x1d, 0xe6, + 0x2f, 0xe9, 0x1f, 0xb8, 0xe3, 0xda, 0x4d, 0x23, 0xda, 0xe0, 0x8e, 0xf2, 0x76, 0x99, 0x89, 0x68, + 0xe0, 0x58, 0x4d, 0xaa, 0xbf, 0xed, 0x48, 0x14, 0xda, 0x43, 0x2c, 0x76, 0xf5, 0xd2, 0x06, 0xd6, + 0xb5, 0xc4, 0x70, 0xe4, 0x50, 0x44, 0x7a, 0x52, 0x71, 0xd0, 0x53, 0x1a, 0x3e, 0x4c, 0xe8, 0x31, + 0xfe, 0xda, 0xa3, 0x9b, 0x19, 0x57, 0x93, 0x12, 0x2d, 0x27, 0x2d, 0x89, 0xfa, 0xb1, 0x28, 0xf1, + 0xba, 0x84, 0x04, 0x72, 0xe7, 0xad, 0xde, 0x70, 0x09, 0x14, 0x13, 0xa9, 0x6c, 0x8e, 0x47, 0x0a, + 0xb5, 0xf2, 0x0d, 0x56, 0x22, 0xb4, 0xa3, 0xbe, 0x3f, 0x43, 0x07, 0x2d, 0x50, 0x7d, 0x54, 0x02, + 0x74, 0x30, 0xe6, 0xcd, 0x99, 0xd5, 0x17, 0x3b, 0x56, 0x88, 0x3b, 0x3e, 0xd1, 0xd3, 0x42, 0xd8, + 0xb3, 0xc2, 0x87, 0x4c, 0xc8, 0x8a, 0xb9, 0x66, 0xa6, 0xf1, 0x26, 0x02, 0xf3, 0x07, 0xe9, 0x9b, + 0x87, 0xf1, 0x30, 0xca, 0x9c, 0xa2, 0x07, 0x07, 0xde, 0xcd, 0xc3, 0x5f, 0xc8, 0xe7, 0x58, 0x6a, + 0x70, 0x90, 0xc0, 0x48, 0xfa, 0x0d, 0x4d, 0x64, 0xde, 0x50, 0xef, 0x61, 0xc4, 0x93, 0x01, 0x34, + 0xd5, 0x32, 0x2b, 0xe9, 0x84, 0x6c, 0x30, 0x06, 0x9b, 0x9e, 0x73, 0x34, 0xd4, 0x6b, 0x03, 0xe1, + 0x3d, 0x24, 0xbe, 0xc8, 0x8e, 0xcb, 0x66, 0xdf, 0x70, 0x94, 0x98, 0x26, 0x7a, 0xa5, 0xcb, 0x31, + 0x95, 0x66, 0x5a, 0xb2, 0xfd, 0xcc, 0xd7, 0xc2, 0xa7, 0x61, 0xf9, 0x3c, 0x19, 0xab, 0x6a, 0x1c, + 0xe8, 0x32, 0x8e, 0x78, 0x40, 0x78, 0xe4, 0xc4, 0xfc, 0x5a, 0x9d, 0xf6, 0x3a, 0xe5, 0x39, 0x11, + 0xa5, 0x53, 0xaa, 0x8d, 0xc8, 0x80, 0x4b, 0x95, 0x7e, 0xd5, 0x9b, 0x1a, 0xa3, 0x64, 0x4a, 0x27, + 0x3b, 0xe1, 0xac, 0xaf, 0xf0, 0x4d, 0x96, 0x3f, 0xdc, 0xd3, 0xd6, 0xd0, 0x61, 0x08, 0x8a, 0xf0, + 0x9f, 0x79, 0x68, 0x06, 0x04, 0xe6, 0xf6, 0xda, 0x7e, 0x0e, 0xf7, 0x26, 0x7e, 0x06, 0xac, 0xb4, + 0xed, 0xcf, 0xf1, 0xb3, 0x97, 0x4d, 0x25, 0xa1, 0x58, 0xca, 0xd4, 0x90, 0x66, 0x7c, 0x9a, 0xef, + 0x05, 0x13, 0x19, 0x92, 0x60, 0x21, 0xc3, 0x5c, 0x3c, 0x37, 0x3d, 0xc9, 0x0f, 0x5b, 0x90, 0xd0, + 0x1d, 0xb7, 0x93, 0xf6, 0xc7, 0x28, 0xe5, 0x18, 0xeb, 0xd9, 0xd6, 0xe2, 0xa8, 0x7a, 0x1c, 0x5a, + 0x18, 0x81, 0xcb, 0xcc, 0x24, 0x1a, 0xc2, 0x17, 0x31, 0x65, 0x69, 0xa4, 0xe4, 0x56, 0xc8, 0xf7, + 0x45, 0x6e, 0xa3, 0x03, 0xd1, 0x92, 0xee, 0x2b, 0x8e, 0xc6, 0x1a, 0x21, 0x75, 0x89, 0x7b, 0xf1, + 0xda, 0x5d, 0x81, 0x8f, 0x1d, 0xbd, 0x27, 0x7c, 0x84, 0x47, 0xe0, 0xdb, 0x19, 0xd8, 0x1d, 0x50, + 0xe8, 0x85, 0x3e, 0x3f, 0x5b, 0x76, 0x52, 0x98, 0xf4, 0xce, 0xe1, 0xad, 0xdc, 0x0e, 0x8e, 0x30, + 0x89, 0x27, 0x18, 0xaf, 0x9e, 0x4c, 0x9b, 0x8c, 0xb6, 0x9b, 0x19, 0x58, 0x8e, 0x80, 0xc5, 0x41, + 0xa4, 0x6a, 0xf7, 0x24, 0xb6, 0xe3, 0xfb, 0x84, 0x21, 0x42, 0xd9, 0xb8, 0x5e, 0x02, 0xec, 0xf5, + 0x9f, 0xaf, 0xaa, 0xd0, 0xa5, 0x7f, 0x3c, 0x89, 0x06, 0xa4, 0x63, 0x9d, 0xce, 0x64, 0xfc, 0xd2, + 0x03, 0x5a, 0xe4, 0x11, 0x60, 0x80, 0x28, 0x34, 0x2f, 0x93, 0xe5, 0x48, 0xa9, 0x36, 0x99, 0xa2, + 0x8f, 0xde, 0xb6, 0xee, 0x5c, 0xf8, 0x6e, 0x3e, 0xa4, 0x11, 0x6f, 0x99, 0x4c, 0x52, 0x2d, 0xf2, + 0x1e, 0x4e, 0xf4, 0x41, 0x6b, 0xe1, 0xf6, 0x0d, 0x36, 0x02, 0x85, 0x13, 0xa0, 0x38, 0x94, 0x4c, + 0xe4, 0xa6, 0xc0, 0x73, 0x09, 0x10, 0x17, 0x21, 0x93, 0xf0, 0x15, 0x3d, 0xc9, 0x45, 0x76, 0x24, + 0x74, 0xae, 0x5f, 0x9d, 0x54, 0xa7, 0x3d, 0x69, 0xa8, 0x64, 0xf2, 0x9c, 0xfa, 0xa7, 0x1f, 0x87, + 0x7b, 0xdd, 0x9c, 0xa9, 0xa8, 0xc8, 0xa7, 0xd8, 0x84, 0xd1, 0xfe, 0x4a, 0x7b, 0x89, 0x0e, 0x76, + 0x2e, 0xf2, 0x65, 0x48, 0x33, 0x35, 0xa1, 0x39, 0x52, 0xc9, 0x34, 0x57, 0x4e, 0x77, 0xca, 0xd4, + 0xc5, 0xd3, 0xad, 0x5e, 0x23, 0x44, 0x6d, 0x8f, 0x32, 0x7d, 0x46, 0xf5, 0xd1, 0x67, 0x7a, 0xa4, + 0x79, 0x02, 0x18, 0x1c, 0xe9, 0xc8, 0xea, 0xe3, 0x27, 0xe1, 0x53, 0x2e, 0x5e, 0x2a, 0xa2, 0xb8, + 0x94, 0xaa, 0x67, 0xbd, 0xd3, 0xcb, 0x33, 0xe6, 0x48, 0xc6, 0x22, 0x95, 0x89, 0x2f, 0x50, 0xa9, + 0xcb, 0xc5, 0x36, 0xff, 0xd6, 0x4a, 0x30, 0x69, 0x53, 0xa0, 0xb6, 0xbb, 0x1b, 0xe0, 0xf1, 0x4b, + 0x37, 0x2e, 0x48, 0xc5, 0x49, 0x94, 0x29, 0xfa, 0x35, 0xe1, 0x02, 0xa9, 0xb2, 0xf7, 0x5f, 0x43, + 0xdf, 0x2c, 0xf7, 0x2f, 0xbf, 0xf6, 0xc1, 0x34, 0x95, 0x27, 0x04, 0xb8, 0xe9, 0xa5, 0xbc, 0x8a, + 0x47, 0xe1, 0xd5, 0xa3, 0x51, 0xa6, 0x0a, 0x8e, 0x1b, 0xf3, 0x7c, 0x41, 0xd0, 0xb2, 0x5f, 0xc3, + 0x67, 0x1a, 0xb4, 0x0f, 0x9e, 0xfd, 0xb7, 0x9a, 0x84, 0xd8, 0x09, 0xc2, 0x76, 0x10, 0xfe, 0xd4, + 0x06, 0x86, 0xa7, 0xf1, 0xcc, 0xa7, 0xde, 0xf2, 0x4b, 0xee, 0x0e, 0x60, 0x31, 0x1c, 0x08, 0xc2, + 0x13, 0x69, 0xaa, 0xde, 0xe0, 0x42, 0x17, 0x1b, 0xe9, 0x21, 0x35, 0xfc, 0xab, 0x05, 0xf1, 0xbc, + 0xfd, 0xfb, 0xf1, 0xdb, 0xc0, 0xc0, 0xec, 0x47, 0x9b, 0x18, 0x1a, 0x72, 0xe6, 0xd6, 0xcf, 0x94, + 0x63, 0xac, 0xbb, 0x32, 0x08, 0x60, 0xa8, 0x02, 0x2c, 0x77, 0x3b, 0xf6, 0x8e, 0x4f, 0xd9, 0x3b, + 0x24, 0x2c, 0xa9, 0x3b, 0xb2, 0xcb, 0x06, 0x61, 0x13, 0xa7, 0x5f, 0x7b, 0xf4, 0x10, 0x4d, 0xbe, + 0x38, 0x31, 0x7f, 0xde, 0x29, 0xa3, 0x7b, 0x44, 0x1c, 0x10, 0x45, 0xc1, 0x94, 0x3b, 0x05, 0xfd, + 0x0e, 0x4d, 0xc6, 0x7b, 0xab, 0x28, 0x0c, 0xc8, 0xe3, 0x5c, 0x38, 0x72, 0x3b, 0x34, 0xb7, 0x9a, + 0x9c, 0xb5, 0x91, 0x14, 0x23, 0x12, 0x50, 0xfe, 0x22, 0x4f, 0x52, 0x54, 0xab, 0x2b, 0x6d, 0xc1, + 0xb0, 0x9e, 0x00, 0xf5, 0x2c, 0x2f, 0x90, 0x61, 0xd3, 0x64, 0x20, 0x53, 0xff, 0xf6, 0xaa, 0x70, + 0x33, 0xf3, 0xa7, 0xe8, 0x9a, 0x8f, 0xf1, 0xf7, 0x83, 0xd5, 0xe8, 0xf0, 0x38, 0x8f, 0x92, 0x60, + 0xd6, 0xf9, 0x79, 0xc2, 0x7d, 0x25, 0xe6, 0x4b, 0xb4, 0x83, 0x13, 0xd2, 0x3a, 0xf4, 0xbf, 0xe1, + 0x76, 0x83, 0xe0, 0x06, 0xaa, 0xc5, 0xea, 0x5d, 0x0c, 0x61, 0xca, 0xef, 0xa1, 0x99, 0xd0, 0x9f, + 0x7d, 0x7e, 0xd8, 0x79, 0xed, 0x59, 0x85, 0xc0, 0xeb, 0xed, 0x65, 0x96, 0x25, 0x79, 0x51, 0xde, + 0xa0, 0x2f, 0x7e, 0x34, 0x8b, 0xb5, 0x60, 0x74, 0x08, 0x49, 0x38, 0xc7, 0x21, 0x83, 0xef, 0xb9, + 0xf4, 0x8b, 0x21, 0x84, 0x52, 0x33, 0x38, 0x99, 0x6f, 0x01, 0x3f, 0xe5, 0x4d, 0xbc, 0x37, 0x28, + 0x65, 0x09, 0x26, 0x37, 0xe0, 0xcd, 0x0f, 0x6c, 0x6a, 0x9b, 0xc7, 0x63, 0x9e, 0xd5, 0xcf, 0x8f, + 0x81, 0xf7, 0xe5, 0xc6, 0x6a, 0xa1, 0xfb, 0xc5, 0xe9, 0xf9, 0x41, 0xb3, 0x63, 0x3a, 0x6d, 0x44, + 0x87, 0x6e, 0x57, 0x0c, 0x77, 0xc7, 0x8d, 0x48, 0x6e, 0x0c, 0xdf, 0xb0, 0xd0, 0x5c, 0x7e, 0x82, + 0xa3, 0xac, 0xed, 0x91, 0x59, 0x6f, 0x9d, 0x95, 0xa9, 0x47, 0xe4, 0x5a, 0x4c, 0x56, 0x71, 0x05, + 0x87, 0xf6, 0xac, 0xfe, 0xd6, 0x75, 0xcc, 0x47, 0x51, 0xd1, 0x49, 0x30, 0xb8, 0xe6, 0x04, 0xfa, + 0xbd, 0x2d, 0x7e, 0x28, 0xc6, 0xf4, 0xc3, 0xd8, 0x85, 0xc0, 0x89, 0x59, 0xfc, 0xdd, 0x33, 0xd5, + 0x1e, 0xc3, 0xb6, 0x2c, 0xa5, 0xdc, 0x30, 0xfe, 0xa7, 0x3d, 0xc1, 0xc0, 0x1d, 0xdf, 0x35, 0xc8, + 0x7d, 0x27, 0x16, 0xbb, 0x9c, 0x31, 0x94, 0xd0, 0xde, 0xbb, 0x63, 0xb3, 0xb2, 0x74, 0xa3, 0xc4, + 0x41, 0x57, 0xf5, 0xf5, 0xc2, 0x0e, 0xb1, 0xf1, 0x2e, 0xd4, 0x7c, 0xe4, 0x1f, 0xd7, 0x84, 0xbe, + 0x2e, 0x9a, 0xd1, 0x2a, 0xc4, 0xe3, 0xbd, 0xd9, 0xc6, 0xcf, 0xe9, 0x69, 0xc4, 0xcb, 0xc9, 0x11, + 0xb8, 0x1d, 0x14, 0xb1, 0x57, 0x85, 0x75, 0xf8, 0x5d, 0xcc, 0xe8, 0x61, 0x4d, 0x4f, 0x5b, 0xe0, + 0x3a, 0x8d, 0x44, 0x93, 0xf5, 0x1f, 0xfe, 0xbd, 0x0a, 0x7a, 0xf4, 0x1c, 0x01, 0xfb, 0x2d, 0x5f, + 0x53, 0x75, 0xc8, 0x9a, 0x1f, 0xa6, 0xb7, 0xaa, 0xa3, 0xa7, 0x1e, 0x52, 0x58, 0x00, 0x03, 0xea, + 0x90, 0x82, 0x9a, 0x87, 0xff, 0x9f, 0xe4, 0xcd, 0xe1, 0x95, 0x2e, 0x54, 0x3f, 0xaa, 0xfe, 0x75, + 0xbd, 0xcc, 0x4f, 0x0d, 0x9e, 0x75, 0xb3, 0xc7, 0xe2, 0x47, 0x9f, 0xae, 0x4a, 0xc3, 0x1c, 0x1a, + 0x6a, 0xcd, 0xcc, 0x30, 0x4f, 0x4c, 0xd0, 0x80, 0xd4, 0xcb, 0x2e, 0xbf, 0x06, 0x2a, 0x83, 0x03, + 0x23, 0x86, 0x46, 0x76, 0x5b, 0x1f, 0xda, 0xab, 0x82, 0xbe, 0xc5, 0xd6, 0xf6, 0x3f, 0x23, 0x2b, + 0xd7, 0x75, 0x48, 0x13, 0x73, 0x93, 0xb3, 0x30, 0x54, 0xf7, 0x5d, 0x86, 0xc0, 0x6d, 0x45, 0x8c, + 0xb7, 0xad, 0x22, 0xc7, 0x2c, 0xef, 0x51, 0x66, 0xeb, 0x84, 0xc6, 0xc4, 0xe9, 0xa2, 0x8d, 0x9d, + 0x2a, 0x51, 0xe1, 0x5b, 0x39, 0xdf, 0x7a, 0x47, 0x62, 0xdc, 0x9b, 0x0d, 0x76, 0xf1, 0x73, 0x5b, + 0x78, 0xf5, 0xb8, 0xa8, 0x6f, 0x80, 0xe7, 0x3a, 0xb5, 0xfc, 0xac, 0x18, 0xe7, 0x71, 0xe3, 0xa0, + 0x1c, 0x2f, 0x09, 0x5c, 0x7d, 0x2f, 0xed, 0xb5, 0x56, 0x79, 0xa5, 0x12, 0x6e, 0x69, 0x5d, 0x61, + 0x34, 0x05, 0x46, 0x21, 0x8d, 0xc7, 0x1a, 0x56, 0x8b, 0x9a, 0xcc, 0x4c, 0x5c, 0x1c, 0x95, 0xf4, + 0x60, 0x80, 0xc7, 0xbc, 0x4e, 0x9e, 0x35, 0x89, 0x38, 0x15, 0xeb, 0x72, 0x70, 0x6c, 0x5a, 0x85, + 0xb2, 0x7b, 0xe5, 0x82, 0xa0, 0x8a, 0xd3, 0x9f, 0x5f, 0xbb, 0x38, 0x9b, 0x15, 0xb0, 0xd9, 0xbb, + 0x3f, 0x22, 0xa4, 0xfa, 0xe4, 0x63, 0x8b, 0x8d, 0x12, 0xb5, 0xfc, 0xf5, 0x36, 0x1b, 0x5d, 0x19, + 0x77, 0xd2, 0x46, 0x7a, 0xb5, 0xfe, 0x3d, 0x21, 0xb3, 0x6d, 0x0e, 0x59, 0xa9, 0x51, 0x3d, 0xb7, + 0xe7, 0x80, 0xae, 0xf5, 0x06, 0xa9, 0x18, 0x73, 0xbc, 0xb7, 0x8b, 0xdb, 0xec, 0x1f, 0x48, 0x73, + 0x27, 0x88, 0x09, 0x82, 0xb6, 0x55, 0xd3, 0xe3, 0x51, 0xac, 0x60, 0xd6, 0x4d, 0xe9, 0xc2, 0xe4, + 0xfd, 0x19, 0xad, 0x08, 0x45, 0xe1, 0x55, 0x71, 0x5c, 0x88, 0xe5, 0x3c, 0x03, 0x03, 0x46, 0x1b, + 0x56, 0xbc, 0x9d, 0x0d, 0x33, 0x4b, 0x05, 0xbf, 0xf7, 0xfa, 0x0b, 0xed, 0xb2, 0xe2, 0x78, 0x9c, + 0x36, 0x1a, 0x8f, 0xc9, 0x05, 0x33, 0x4a, 0xfe, 0xe2, 0x38, 0x64, 0x23, 0x18, 0x5a, 0xff, 0xdc, + 0x42, 0x10, 0x00, 0xb6, 0x44, 0xfe, 0x1d, 0xc1, 0xd4, 0x33, 0x07, 0xdd, 0x4f, 0xa4, 0xa8, 0xef, + 0x2d, 0xb0, 0xd1, 0xd7, 0x5c, 0x82, 0x60, 0x67, 0x21, 0xeb, 0xef, 0xd8, 0xa0, 0xa6, 0xb4, 0xe2, + 0x8c, 0xc5, 0xd7, 0x77, 0x95, 0xb7, 0x34, 0x24, 0xf2, 0x7d, 0x9c, 0xd4, 0x16, 0x3b, 0x20, 0x6e, + 0xc6, 0x15, 0x6f, 0x43, 0x98, 0x9c, 0x3c, 0x2c, 0x1b, 0x4a, 0xc1, 0x71, 0xc7, 0xa3, 0x94, 0xbb, + 0x5b, 0x9a, 0x9e, 0xea, 0x8e, 0xc6, 0xaa, 0xc2, 0x3d, 0x91, 0x0e, 0xc4, 0xcd, 0x94, 0xaa, 0xc3, + 0x46, 0xc6, 0x62, 0x40, 0x2d, 0x92, 0xe0, 0x2d, 0x0d, 0x7d, 0xb6, 0x85, 0x11, 0x7e, 0x46, 0xfe, + 0x89, 0x49, 0xee, 0x73, 0x4e, 0x32, 0x87, 0x19, 0x5e, 0xec, 0x01, 0xac, 0x63, 0x0b, 0x17, 0x2b, + 0x42, 0x0f, 0x5f, 0x22, 0x1b, 0x3d, 0x4b, 0x5f, 0x78, 0xac, 0x09, 0x68, 0x2d, 0x9f, 0x30, 0xf0, + 0x06, 0x9f, 0x27, 0xe6, 0x59, 0xe0, 0x23, 0x8f, 0x46, 0x6b, 0xbf, 0x89, 0x21, 0x57, 0xa8, 0x2f, + 0x8e, 0x6d, 0x76, 0x58, 0x0e, 0x4c, 0x9f, 0x02, 0x08, 0x8e, 0x1f, 0xff, 0x7f, 0x4d, 0x8f, 0xbc, + 0x49, 0x66, 0x3e, 0xd8, 0x96, 0x54, 0xa3, 0x3f, 0x0b, 0xfd, 0x90, 0x79, 0x16, 0xb8, 0xcc, 0x3b, + 0xa6, 0x6b, 0x56, 0x69, 0x55, 0x92, 0xa5, 0x12, 0x27, 0xa1, 0x07, 0x20, 0x05, 0x19, 0x39, 0x95, + 0xbb, 0xea, 0x41, 0xba, 0xbe, 0x23, 0x0a, 0xf3, 0x2b, 0xa5, 0x1f, 0xce, 0xb1, 0xda, 0x44, 0xdc, + 0xa9, 0x6a, 0x91, 0x25, 0x94, 0x8e, 0x2b, 0x14, 0xea, 0x2b, 0xbb, 0x32, 0x3a, 0xc8, 0xd1, 0x9a, + 0x6a, 0x37, 0xc2, 0xcc, 0xcb, 0xb3, 0xfd, 0x51, 0xd1, 0x45, 0x3e, 0xf1, 0x26, 0xc2, 0x9e, 0xc9, + 0x20, 0x7a, 0x95, 0x2f, 0x0a, 0x21, 0x90, 0xe2, 0xff, 0x83, 0x3f, 0x7a, 0x1d, 0xf2, 0x02, 0x0b, + 0xcd, 0x19, 0xbb, 0x33, 0x35, 0x11, 0x8c, 0xde, 0x42, 0xe8, 0x7c, 0x60, 0x56, 0xba, 0xc4, 0x9b, + 0x17, 0x4f, 0x4a, 0x89, 0x46, 0x6f, 0xee, 0x2b, 0x82, 0x51, 0x10, 0x9f, 0x0d, 0x3e, 0x91, 0xd6, + 0xfb, 0x8f, 0x46, 0x4a, 0xf8, 0x69, 0xcb, 0x53, 0x43, 0x52, 0x05, 0x26, 0xaf, 0xb1, 0x55, 0x1e, + 0x86, 0x8f, 0x1c, 0xb0, 0xbd, 0x46, 0x39, 0x85, 0xf2, 0x17, 0x29, 0x34, 0x84, 0x32, 0xfb, 0x76, + 0x76, 0x33, 0x00, 0x80, 0x4c, 0xaf, 0x6e, 0x38, 0xf2, 0x3e, 0x72, 0xf7, 0x9e, 0x47, 0x13, 0xe0, + 0x53, 0xfb, 0x7b, 0x45, 0x4d, 0xd6, 0x1b, 0x43, 0xbd, 0x80, 0x5b, 0x24, 0x99, 0xe9, 0xdd, 0xe8, + 0xc6, 0xbd, 0x78, 0xfa, 0xfb, 0x47, 0xbe, 0xc4, 0x8f, 0x59, 0x66, 0x2b, 0x79, 0xf7, 0x24, 0xf4, + 0xba, 0x27, 0xf4, 0x8d, 0xad, 0x1e, 0x2f, 0x42, 0x76, 0x73, 0x39, 0x38, 0x3f, 0x8b, 0xee, 0x3e, + 0x57, 0x06, 0x6d, 0x02, 0x49, 0xf1, 0x03, 0xb2, 0xf5, 0x93, 0xff, 0x68, 0xc9, 0x84, 0x49, 0x05, + 0xc2, 0x7f, 0x13, 0x17, 0xd7, 0xd0, 0xb0, 0x65, 0x2d, 0x1a, 0xc3, 0xf4, 0x0d, 0x81, 0x4f, 0xd6, + 0xfe, 0xeb, 0xa5, 0xc9, 0x64, 0xd4, 0xe7, 0x00, 0x0c, 0xfb, 0x00, 0xf1, 0xfd, 0x1b, 0xf7, 0x1c, + 0x83, 0xcf, 0x6f, 0xaf, 0xdb, 0x1b, 0x61, 0x55, 0x37, 0x42, 0xc0, 0xd8, 0xb5, 0x88, 0x9f, 0x44, + 0x74, 0x2f, 0x90, 0x39, 0x8f, 0x0b, 0xdc, 0x0d, 0xf6, 0x8e, 0xfd, 0xa4, 0x36, 0x77, 0x95, 0xda, + 0xcf, 0xc5, 0xb2, 0xb0, 0x5b, 0xe9, 0x58, 0xf5, 0xce, 0x83, 0x32, 0x9b, 0x36, 0xa2, 0xdd, 0x99, + 0xb9, 0xb7, 0x61, 0x2c, 0xe7, 0x88, 0xc2, 0xd4, 0x4b, 0x2b, 0xe8, 0x74, 0xe9, 0xa0, 0x2a, 0x00, + 0x20, 0xff, 0x15, 0x6c, 0x3b, 0x59, 0xa7, 0x9d, 0x64, 0x33, 0x84, 0x56, 0x42, 0xc6, 0xd3, 0x4c, + 0x54, 0xbc, 0xff, 0x83, 0x4f, 0xc8, 0xea, 0x00, 0xf0, 0x78, 0x63, 0xf5, 0x02, 0x92, 0x53, 0x03, + 0x8e, 0x7d, 0x1f, 0x3f, 0x46, 0x90, 0xd7, 0x5c, 0xcc, 0x39, 0x69, 0xc5, 0x27, 0x9c, 0x30, 0xe8, + 0xa4, 0xda, 0xdb, 0x99, 0x2d, 0x4c, 0x4f, 0x3b, 0x8e, 0x03, 0xfc, 0x55, 0x4d, 0x23, 0xe8, 0x65, + 0x51, 0xe5, 0x9b, 0xe4, 0x81, 0x3a, 0xb5, 0x25, 0x68, 0xcf, 0x1c, 0x8a, 0x4c, 0xcf, 0xda, 0x9f, + 0x89, 0x09, 0xfd, 0xfd, 0x86, 0xb5, 0xfd, 0x9a, 0xa2, 0x7a, 0x99, 0x35, 0xda, 0x7f, 0xeb, 0x20, + 0x57, 0x23, 0xbb, 0x54, 0x4c, 0xc4, 0x7a, 0x79, 0xc2, 0x30, 0x05, 0xa8, 0xd8, 0x3e, 0x7b, 0xfb, + 0x6c, 0xa3, 0x4b, 0xdd, 0xa7, 0x6c, 0x83, 0x60, 0x45, 0x57, 0x0e, 0x46, 0x53, 0x27, 0xed, 0x10, + 0x6d, 0x42, 0x37, 0x87, 0x81, 0xe1, 0x4a, 0x56, 0xc1, 0x91, 0xd8, 0xbf, 0x65, 0xc1, 0xe8, 0x8f, + 0x3d, 0x99, 0xbc, 0x41, 0x94, 0x99, 0xc8, 0x99, 0xbe, 0x36, 0x63, 0xae, 0x29, 0x4a, 0xbb, 0x84, + 0x3d, 0x32, 0x50, 0xac, 0x76, 0xd6, 0x24, 0xfc, 0x73, 0xc6, 0xdc, 0xcf, 0xbd, 0x2f, 0xd7, 0x5e, + 0xc3, 0x25, 0x63, 0xd9, 0xc2, 0x92, 0xe1, 0x38, 0x0c, 0x6c, 0x7d, 0xbc, 0xd0, 0xdb, 0xdd, 0x1f, + 0x47, 0xae, 0x92, 0xd7, 0xb5, 0x9e, 0x23, 0x8f, 0x97, 0x23, 0x4d, 0x1c, 0xa7, 0x49, 0x3d, 0x3b, + 0xa5, 0xd5, 0xb6, 0x0b, 0xae, 0x5e, 0x38, 0x45, 0x0e, 0x97, 0x18, 0x31, 0x84, 0x0a, 0x50, 0x93, + 0xa2, 0x53, 0x39, 0xb5, 0x17, 0xb1, 0xbe, 0xa6, 0xf1, 0xab, 0x9c, 0x99, 0x84, 0x31, 0x1b, 0x92, + 0xa9, 0x4a, 0xbe, 0xdc, 0x21, 0xee, 0xa5, 0xe4, 0x85, 0x8d, 0xf4, 0x7b, 0xc9, 0xda, 0xd6, 0x6e, + 0xba, 0xda, 0x27, 0x3d, 0x39, 0xe6, 0xf9, 0xb3, 0x61, 0x1e, 0xbb, 0x3e, 0x76, 0x2f, 0x27, 0x55, + 0x91, 0x79, 0x4e, 0x17, 0xe5, 0xf9, 0x1f, 0xef, 0x66, 0xfc, 0x91, 0x4a, 0x12, 0x11, 0x86, 0x01, + 0x36, 0x70, 0x8d, 0xda, 0xf4, 0x58, 0xae, 0x17, 0x94, 0x59, 0x7b, 0xce, 0xe1, 0x9c, 0x03, 0x5e, + 0x98, 0xdb, 0xac, 0x95, 0x0a, 0xad, 0xbd, 0x53, 0xa6, 0xea, 0xf2, 0x04, 0x18, 0x03, 0xf6, 0xe7, + 0xb0, 0x69, 0x33, 0x8a, 0xce, 0x8e, 0x35, 0x34, 0x0e, 0xb5, 0x86, 0x11, 0x65, 0x49, 0xa9, 0x31, + 0x61, 0x14, 0x3f, 0x1b, 0x32, 0xe5, 0x5c, 0xc1, 0x0e, 0x94, 0xd7, 0x9a, 0xbd, 0x5e, 0xdb, 0x93, + 0x58, 0xbe, 0x8a, 0x8e, 0xbc, 0x25, 0x5b, 0xe1, 0x8c, 0x9b, 0x39, 0xd2, 0x66, 0x07, 0xb3, 0x6e, + 0x43, 0x17, 0x12, 0xd7, 0x91, 0x68, 0xb4, 0x69, 0x45, 0xfa, 0xf9, 0xe4, 0x2b, 0x5d, 0xc2, 0x55, + 0xa9, 0x72, 0x70, 0x45, 0x65, 0x52, 0xa3, 0x1c, 0x55, 0xeb, 0xbf, 0xe6, 0x60, 0x6c, 0x73, 0xcf, + 0x70, 0xe8, 0xa8, 0xa8, 0x57, 0xdb, 0xb4, 0x0b, 0x88, 0x6f, 0xea, 0x6c, 0x2d, 0x0b, 0x09, 0x65, + 0x85, 0xd3, 0x17, 0x1a, 0x27, 0x3b, 0xe5, 0x1f, 0x36, 0xcd, 0x58, 0xb1, 0x34, 0xde, 0x5f, 0xc2, + 0x26, 0xeb, 0x1c, 0x3e, 0x91, 0x41, 0x6d, 0xd8, 0xd7, 0xa6, 0x45, 0x4b, 0x8c, 0xf8, 0xd7, 0x37, + 0x5a, 0xf5, 0x7a, 0xa0, 0xd0, 0x4b, 0x2a, 0x56, 0x8f, 0xe6, 0x55, 0x27, 0xed, 0xa7, 0x1a, 0xd2, + 0x1f, 0x7d, 0x1b, 0x32, 0x9e, 0x8a, 0x85, 0xcd, 0x91, 0x24, 0x2a, 0x2c, 0xfa, 0x1a, 0x84, 0x87, + 0xa0, 0x0b, 0x02, 0x1d, 0x15, 0x34, 0x69, 0x70, 0xd3, 0xc7, 0x47, 0x73, 0xe9, 0xcc, 0x7b, 0xc1, + 0xa4, 0x00, 0x6d, 0xfb, 0xab, 0x8e, 0xcd, 0x5a, 0xc8, 0x07, 0x50, 0x23, 0x9d, 0x62, 0x09, 0x77, + 0x74, 0xc4, 0x05, 0x2b, 0x38, 0xba, 0x3e, 0x04, 0xce, 0x1d, 0xbb, 0x7e, 0x35, 0x48, 0x7e, 0x8e, + 0xbb, 0x43, 0xb5, 0xde, 0x33, 0x4e, 0x61, 0x39, 0x22, 0x03, 0xf4, 0xb2, 0x4d, 0x72, 0xce, 0x90, + 0x3f, 0x9b, 0x54, 0x41, 0xac, 0x47, 0x6b, 0xfc, 0x60, 0xee, 0xa4, 0xa4, 0x71, 0xe6, 0x7c, 0x0a, + 0xe8, 0xbf, 0x5e, 0x02, 0x38, 0xde, 0x41, 0x1b, 0xfa, 0x3e, 0x65, 0xc9, 0x28, 0xe2, 0x32, 0xb8, + 0x91, 0x0f, 0x50, 0x4e, 0xc9, 0x9a, 0x46, 0x05, 0xfa, 0xcb, 0x9b, 0x4d, 0x28, 0xc4, 0x32, 0x37, + 0xb1, 0x37, 0xe6, 0x85, 0x47, 0xaa, 0x54, 0xaa, 0xb5, 0x81, 0x5a, 0x54, 0xcc, 0x7f, 0x21, 0x99, + 0xbd, 0x97, 0x56, 0x0b, 0x58, 0x45, 0xbd, 0x2a, 0x9a, 0x3d, 0x24, 0x6a, 0xca, 0xb3, 0xee, 0x42, + 0x49, 0x45, 0xcc, 0x42, 0x3c, 0xc8, 0x71, 0xe8, 0x05, 0x63, 0x5b, 0xe9, 0x13, 0xa9, 0x55, 0xa5, + 0x5c, 0xd2, 0x60, 0x80, 0x74, 0x0d, 0x00, 0x49, 0xd1, 0x3b, 0x6f, 0x47, 0xf3, 0xe9, 0x4b, 0x64, + 0x1c, 0x2a, 0x47, 0xbc, 0x66, 0x87, 0x1b, 0x33, 0x98, 0x0f, 0x93, 0xd1, 0xcd, 0xe1, 0x8f, 0x93, + 0x8f, 0x4e, 0xa2, 0xd3, 0x1c, 0x42, 0x4d, 0x38, 0xc6, 0xd0, 0x00, 0xba, 0x8b, 0xa6, 0x39, 0x5b, + 0x4c, 0x3c, 0x82, 0x9d, 0x1f, 0x5e, 0x65, 0x0a, 0x51, 0x54, 0x58, 0xf5, 0x90, 0x2c, 0x4b, 0x03, + 0xf2, 0xbc, 0x61, 0x87, 0x0e, 0x72, 0x96, 0x74, 0xb8, 0x38, 0x77, 0x68, 0x32, 0x6f, 0x5c, 0x91, + 0xd2, 0x8e, 0xcb, 0xb4, 0x37, 0xe5, 0xfc, 0xa5, 0x84, 0x4f, 0xa1, 0x12, 0xbc, 0xdd, 0x38, 0x32, + 0x71, 0xe0, 0xd0, 0x74, 0x85, 0xc7, 0x3f, 0xcc, 0xce, 0x81, 0xbf, 0x93, 0x4f, 0xf8, 0x4a, 0xba, + 0x15, 0xfe, 0x3b, 0xe0, 0x71, 0x73, 0xcb, 0x31, 0xe0, 0xb9, 0x48, 0xc0, 0xff, 0xd3, 0xf5, 0xbc, + 0x96, 0xef, 0x9c, 0xd4, 0xd6, 0xc5, 0xd0, 0x38, 0x17, 0xfa, 0x71, 0x4f, 0x88, 0x45, 0xc1, 0xc1, + 0x41, 0x3d, 0xf0, 0x59, 0x7f, 0x1b, 0x2b, 0x77, 0x43, 0x15, 0x76, 0xb2, 0x4f, 0x9e, 0x35, 0x32, + 0x48, 0x46, 0x16, 0x9a, 0x6a, 0xb6, 0xc0, 0x66, 0xdc, 0xa0, 0xf1, 0xa2, 0x3f, 0xb7, 0x33, 0x84, + 0xd0, 0x66, 0x1c, 0x88, 0xcd, 0x98, 0xe7, 0xd2, 0x11, 0x69, 0x24, 0x89, 0x18, 0x69, 0x54, 0xc1, + 0x43, 0x1d, 0x27, 0xd9, 0x75, 0x75, 0x0e, 0xe1, 0x52, 0xc1, 0xb3, 0x4f, 0x69, 0x90, 0x20, 0xcc, + 0x25, 0x8d, 0xa9, 0xfa, 0x00, 0x40, 0xf7, 0x2f, 0x32, 0x91, 0x9a, 0x3c, 0x4f, 0xa7, 0x6a, 0xf7, + 0x7f, 0x53, 0x63, 0xb0, 0x29, 0xb2, 0xfb, 0x47, 0x6b, 0xb4, 0x58, 0xe3, 0xef, 0xa4, 0xf6, 0xd9, + 0x17, 0x93, 0x5f, 0xef, 0x90, 0x44, 0xd5, 0x9f, 0x32, 0x70, 0xe3, 0xa1, 0x3e, 0xa0, 0xa4, 0x17, + 0xcf, 0x88, 0x20, 0x17, 0xbb, 0xc3, 0x6f, 0x84, 0xbf, 0x92, 0x85, 0x84, 0xcd, 0x6d, 0x3e, 0x9b, + 0xa1, 0xb3, 0xcb, 0xc4, 0xf0, 0x4e, 0x12, 0xdc, 0xb1, 0x88, 0x53, 0x1c, 0x79, 0x62, 0x21, 0x0a, + 0x35, 0xc1, 0xb7, 0x2d, 0xd0, 0x67, 0xc7, 0x36, 0x76, 0xb4, 0xac, 0x4f, 0x14, 0xee, 0x78, 0xbd, + 0x2c, 0xa1, 0x62, 0x4d, 0x4d, 0xb9, 0x25, 0x9e, 0x5e, 0xe8, 0x26, 0xdc, 0xf7, 0x69, 0x88, 0x2e, + 0x05, 0xc9, 0xc0, 0x04, 0x88, 0x33, 0xe4, 0xf1, 0xac, 0x92, 0x1f, 0xb9, 0xa2, 0xf8, 0xab, 0xc8, + 0xbb, 0x8a, 0x04, 0x53, 0x10, 0x8e, 0x8f, 0x4f, 0x22, 0xb6, 0x34, 0xf0, 0x25, 0x42, 0x0d, 0x0a, + 0x87, 0xec, 0xa3, 0x68, 0xf8, 0x10, 0x01, 0x30, 0x18, 0x15, 0xda, 0x91, 0xa9, 0xd4, 0xff, 0xed, + 0xa4, 0xff, 0xf6, 0x78, 0xca, 0xd7, 0x4b, 0x27, 0x0d, 0xf3, 0xe9, 0x5f, 0x36, 0x9d, 0x59, 0x16, + 0xa4, 0x04, 0xef, 0xec, 0x7d, 0x01, 0x0a, 0x39, 0xa5, 0x4b, 0x80, 0x68, 0xb3, 0xb4, 0x00, 0xcf, + 0xbd, 0xd0, 0xcf, 0x09, 0xf2, 0x7c, 0xe6, 0x3b, 0xaa, 0xf2, 0xfa, 0xc3, 0xfb, 0x94, 0x68, 0x13, + 0x0f, 0xf0, 0x1b, 0xe1, 0xce, 0x77, 0xa2, 0x1f, 0x41, 0xb4, 0x9a, 0x40, 0x1d, 0x90, 0x0d, 0x22, + 0x64, 0xef, 0x0f, 0xcd, 0x95, 0x11, 0x45, 0x22, 0x27, 0x3c, 0xd7, 0x57, 0xaf, 0x09, 0xab, 0xa8, + 0xe5, 0x06, 0x54, 0x07, 0x4f, 0xbb, 0xd4, 0x83, 0x3b, 0xc4, 0x10, 0xaf, 0x75, 0x5e, 0x17, 0x7d, + 0x69, 0xc4, 0x36, 0x36, 0x4a, 0x15, 0x2e, 0x01, 0x62, 0xdb, 0x2f, 0x92, 0xb2, 0x99, 0xed, 0x07, + 0xad, 0xc1, 0x4a, 0x56, 0xa4, 0x8e, 0x10, 0x11, 0x06, 0xcc, 0xe4, 0x37, 0xb0, 0x5c, 0x77, 0xd8, + 0x48, 0xf3, 0x5f, 0xf7, 0x71, 0xa0, 0xfb, 0x70, 0x84, 0x3f, 0x8a, 0x60, 0xf9, 0x1c, 0x17, 0xf7, + 0x02, 0x9b, 0xe3, 0x70, 0x43, 0x8a, 0xba, 0xdd, 0xb4, 0xfe, 0xa7, 0xb2, 0x70, 0x1b, 0xdf, 0xd3, + 0x77, 0x53, 0x63, 0xa2, 0x42, 0x29, 0x58, 0x05, 0xa8, 0xde, 0x86, 0x7a, 0xf4, 0xd9, 0x0e, 0xb9, + 0xb1, 0x94, 0xdf, 0xa6, 0x3c, 0x6e, 0x88, 0x28, 0xed, 0x71, 0x15, 0x96, 0xb6, 0xde, 0xfe, 0xa5, + 0x83, 0xd3, 0xf8, 0xe0, 0xd0, 0xd2, 0x2b, 0x66, 0xf1, 0x11, 0x1e, 0x3e, 0xaa, 0xea, 0x84, 0xbc, + 0xe8, 0xe9, 0x3f, 0xfe, 0x62, 0x4c, 0x94, 0x76, 0xe7, 0x4a, 0x1e, 0x3f, 0xfb, 0x9b, 0x49, 0x82, + 0xcc, 0xd9, 0xaa, 0xcb, 0x17, 0x8b, 0xa0, 0x63, 0x71, 0x82, 0x6f, 0xaa, 0xb9, 0x46, 0x26, 0x23, + 0x2c, 0xab, 0x99, 0xcc, 0x33, 0xd6, 0x48, 0xa6, 0x3d, 0x08, 0xde, 0x04, 0x39, 0xbc, 0x35, 0x0c, + 0x22, 0xcd, 0x16, 0x9c, 0xd5, 0x12, 0xe1, 0x2b, 0xc6, 0x9e, 0xf8, 0x76, 0xef, 0xb8, 0x29, 0xd3, + 0xf2, 0x46, 0x3f, 0xb3, 0x03, 0x50, 0x3c, 0xe2, 0x3f, 0xd6, 0xa2, 0x74, 0x7e, 0xa7, 0xd1, 0x20, + 0x43, 0x79, 0x2d, 0x39, 0x03, 0x20, 0x4b, 0x3f, 0xb1, 0x07, 0xe9, 0xe1, 0x59, 0x36, 0x37, 0xdc, + 0x26, 0x34, 0x9e, 0x43, 0xfc, 0xab, 0xf7, 0xe4, 0xe4, 0xc7, 0xd6, 0x73, 0x8d, 0x54, 0x60, 0x54, + 0xf2, 0x85, 0xac, 0x44, 0xb7, 0x9d, 0xec, 0x04, 0x14, 0x29, 0xef, 0x56, 0x9f, 0x1c, 0x44, 0x0e, + 0x9f, 0x37, 0x3b, 0xe5, 0xdb, 0x70, 0xbe, 0xa7, 0xb2, 0x66, 0x69, 0x73, 0x4d, 0x19, 0xf0, 0x91, + 0xe3, 0xcd, 0x07, 0x58, 0x84, 0x63, 0x7f, 0x89, 0x0f, 0x85, 0x41, 0xe9, 0x5d, 0x6b, 0xb7, 0x92, + 0x24, 0x54, 0xbc, 0xd2, 0x37, 0xec, 0x1f, 0x40, 0x75, 0xa1, 0x36, 0xbb, 0x51, 0xf3, 0xc0, 0xe1, + 0xc0, 0xc8, 0xfc, 0x78, 0x3d, 0x36, 0x89, 0xd2, 0x02, 0xed, 0xe8, 0x08, 0xba, 0x53, 0xb7, 0x42, + 0x03, 0x41, 0x91, 0xa2, 0x6c, 0x1c, 0x78, 0x7b, 0x18, 0xab, 0xe4, 0x5c, 0x4a, 0x84, 0xc5, 0xaf, + 0xe5, 0x5e, 0xa8, 0xa4, 0x8a, 0x77, 0x4c, 0xcf, 0x87, 0x87, 0xd6, 0xcd, 0x46, 0xf6, 0x48, 0x47, + 0xf6, 0x6a, 0x47, 0x53, 0xdc, 0xa4, 0xea, 0x90, 0x6a, 0xd0, 0x7b, 0x72, 0x0e, 0x60, 0x80, 0x41, + 0xac, 0xdd, 0x0d, 0x98, 0xa2, 0x95, 0xf4, 0x00, 0xaf, 0x65, 0x10, 0x00, 0x34, 0xc6, 0xbd, 0xb2, + 0x1f, 0x63, 0x18, 0xfe, 0xd1, 0xba, 0xd7, 0x50, 0xdf, 0xa0, 0x5a, 0x02, 0x4b, 0xd2, 0x36, 0xfc, + 0x96, 0xd5, 0x22, 0x09, 0x68, 0x75, 0x30, 0xad, 0x6c, 0xd0, 0x4b, 0xe0, 0x74, 0xa9, 0x30, 0x24, + 0x40, 0xa5, 0xb5, 0x75, 0x69, 0x1a, 0x3a, 0x56, 0x3e, 0xe7, 0xe9, 0x96, 0xf6, 0xcc, 0x11, 0x7f, + 0x2a, 0x5d, 0xa1, 0x3c, 0x6a, 0xec, 0xb9, 0x5b, 0xef, 0x6b, 0xd1, 0x78, 0xb1, 0x77, 0x5e, 0xfe, + 0x5c, 0x00, 0xac, 0x0f, 0x8d, 0x8d, 0x60, 0x9d, 0xfe, 0xd6, 0xc4, 0x3b, 0xd9, 0xda, 0x6b, 0xc8, + 0x00, 0x77, 0x85, 0xd3, 0x46, 0x31, 0x9c, 0x66, 0xd9, 0x36, 0x55, 0xaa, 0xd3, 0x8c, 0xbe, 0x4f, + 0xe7, 0xd4, 0xd2, 0x40, 0x2e, 0x67, 0xa9, 0x81, 0x77, 0x65, 0x4c, 0x01, 0x31, 0x77, 0x2e, 0x9b, + 0x03, 0xa0, 0x81, 0x54, 0x3d, 0xd4, 0x32, 0xf2, 0x69, 0x68, 0x60, 0xfd, 0x6b, 0xef, 0xcd, 0xac, + 0x14, 0x89, 0xdb, 0x10, 0xa1, 0x89, 0xb2, 0x54, 0x5a, 0xd7, 0xb8, 0x99, 0x92, 0x19, 0xfe, 0xd1, + 0xe6, 0x5e, 0xf1, 0xfe, 0xac, 0x94, 0x6b, 0x97, 0xc2, 0x1f, 0xa0, 0x85, 0x91, 0xe1, 0x67, 0xb4, + 0x09, 0x88, 0xee, 0xbf, 0x29, 0x66, 0x30, 0x09, 0x64, 0x37, 0x8c, 0x09, 0x3b, 0x5c, 0xee, 0x78, + 0x30, 0x87, 0x28, 0x7f, 0x67, 0x93, 0xe9, 0x07, 0x7e, 0xb7, 0xde, 0xe3, 0xcb, 0xb4, 0x67, 0xa9, + 0x27, 0x8f, 0x99, 0x50, 0xf5, 0x4d, 0x11, 0x7e, 0x68, 0x61, 0xc3, 0xa9, 0xe4, 0x1d, 0x8d, 0xe7, + 0x8e, 0x25, 0x90, 0x4d, 0xaf, 0xd7, 0xe0, 0xf5, 0xb6, 0x53, 0xea, 0xad, 0x4d, 0xc6, 0x95, 0x24, + 0x35, 0xb5, 0xf6, 0xc9, 0x08, 0xd1, 0x3c, 0x8f, 0x63, 0x0e, 0x87, 0x6a, 0x1a, 0x0e, 0x47, 0x78, + 0x57, 0x19, 0xf8, 0xb6, 0x61, 0x91, 0x45, 0x69, 0x3b, 0x10, 0x63, 0xce, 0x62, 0x86, 0x94, 0xc5, + 0xad, 0x5c, 0x5f, 0x31, 0x22, 0x08, 0xe3, 0x18, 0x02, 0x68, 0x72, 0x93, 0x00, 0xc3, 0x0d, 0x2b, + 0x52, 0xc8, 0x48, 0xa6, 0xdd, 0xdc, 0x7d, 0xf5, 0x51, 0x1b, 0x99, 0xe3, 0x37, 0xf9, 0x30, 0x03, + 0x75, 0x3b, 0x75, 0x79, 0xbd, 0x98, 0x0f, 0xb9, 0xe4, 0x7e, 0x4e, 0x9b, 0xa8, 0x9a, 0xc8, 0x26, + 0x82, 0x37, 0x14, 0x08, 0x5b, 0xb4, 0x5e, 0xa1, 0x01, 0x99, 0x6e, 0xdf, 0x6c, 0x24, 0x9d, 0x54, + 0xda, 0x11, 0x85, 0x78, 0x29, 0xab, 0x8f, 0x3c, 0x15, 0x5f, 0x9f, 0xcb, 0x71, 0xdd, 0x70, 0xfb, + 0xfb, 0xc2, 0x82, 0xcc, 0x90, 0x70, 0x4d, 0xd4, 0x5e, 0x1e, 0xf8, 0xe9, 0x16, 0x9a, 0x5a, 0xb8, + 0xfb, 0x2c, 0xd2, 0xdc, 0xf3, 0xb5, 0x62, 0xa2, 0xae, 0xf0, 0xe3, 0x37, 0xac, 0x0b, 0xcc, 0x46, + 0x20, 0x4d, 0x2e, 0xaa, 0x11, 0x9f, 0x22, 0xa3, 0x86, 0x5b, 0xff, 0x03, 0x65, 0x04, 0x98, 0xed, + 0xd4, 0x12, 0x53, 0x56, 0xbd, 0x3a, 0x9e, 0x82, 0xe5, 0x14, 0x9e, 0x8c, 0xc0, 0x6a, 0xfc, 0xce, + 0x9f, 0x82, 0xc0, 0x74, 0x18, 0x59, 0xd7, 0xd4, 0x99, 0xb8, 0xd6, 0x10, 0x16, 0xa6, 0xe5, 0xa6, + 0x1c, 0x51, 0x5d, 0xd9, 0xc8, 0x52, 0x11, 0x40, 0x9d, 0xfd, 0xfa, 0x3b, 0x6e, 0x09, 0x94, 0x1e, + 0x00, 0x3d, 0x0b, 0xf6, 0xbd, 0x8d, 0x4b, 0x83, 0xd0, 0xae, 0xe4, 0xfb, 0xa0, 0x28, 0x95, 0xd6, + 0x22, 0xae, 0x88, 0xbb, 0x31, 0xbf, 0xfd, 0x03, 0xee, 0x23, 0x8c, 0x18, 0x9d, 0x3c, 0x6b, 0xfc, + 0xeb, 0x03, 0x38, 0x84, 0xe3, 0xbd, 0x77, 0xb5, 0x26, 0xe5, 0xc5, 0xc7, 0xf7, 0x0a, 0x01, 0x79, + 0x08, 0xa7, 0x72, 0x74, 0x31, 0xac, 0xf6, 0xda, 0x88, 0x72, 0x41, 0xc7, 0x06, 0xd2, 0x69, 0xe9, + 0x92, 0x0e, 0xc1, 0x36, 0x45, 0x67, 0xa0, 0xdd, 0xc1, 0x8d, 0x7b, 0x25, 0xc5, 0x34, 0x20, 0x65, + 0x11, 0xe4, 0x2b, 0xd6, 0x43, 0x4f, 0x36, 0xfb, 0x26, 0x23, 0x0f, 0xe1, 0x37, 0xc6, 0xf3, 0xa5, + 0x4b, 0x83, 0x5d, 0x99, 0xb6, 0xb2, 0xac, 0x22, 0xaf, 0x8c, 0xc5, 0x33, 0x1c, 0x56, 0x2c, 0xa5, + 0xcd, 0x9b, 0x19, 0xe9, 0x95, 0xf1, 0xc4, 0x90, 0x5f, 0xc5, 0xd9, 0x1b, 0xa0, 0x4c, 0x0b, 0x97, + 0x2a, 0xbe, 0xcc, 0xfe, 0x85, 0xec, 0x72, 0x60, 0xcd, 0xfc, 0xd5, 0xcf, 0xb4, 0x02, 0x8f, 0x1f, + 0xa1, 0x54, 0x9c, 0x53, 0x9f, 0x75, 0x52, 0xb4, 0xd8, 0xbb, 0x64, 0x4a, 0xfa, 0x11, 0x47, 0xbf, + 0xa3, 0xc8, 0xe6, 0xe6, 0xbe, 0x1d, 0xdd, 0xd0, 0x98, 0xcf, 0xd5, 0x90, 0x58, 0xd8, 0x78, 0x78, + 0x6b, 0xfc, 0xc1, 0x4d, 0x35, 0x48, 0xef, 0xdd, 0xd4, 0x03, 0xb2, 0xdd, 0x1b, 0xb5, 0x89, 0x19, + 0x39, 0x19, 0x88, 0x85, 0xe8, 0xba, 0x6e, 0x46, 0x7b, 0x62, 0x6b, 0x54, 0xd3, 0x71, 0x10, 0xae, + 0xec, 0xd6, 0x43, 0x46, 0x87, 0xda, 0xc7, 0x00, 0x94, 0xad, 0xfd, 0xa1, 0x3c, 0xa5, 0xff, 0xa9, + 0xc9, 0xcf, 0x59, 0xd3, 0x97, 0xd1, 0x53, 0x0a, 0x1c, 0x86, 0xc3, 0x3a, 0x64, 0xeb, 0xac, 0x42, + 0xac, 0xa3, 0xcb, 0x3d, 0xaa, 0xac, 0x31, 0x38, 0x2e, 0x4d, 0x3d, 0xaa, 0x4b, 0x2a, 0x62, 0x3a, + 0xd2, 0xfe, 0xdb, 0xfe, 0xc5, 0xb3, 0x31, 0xfe, 0x2f, 0x35, 0x68, 0xb1, 0xfc, 0x30, 0xb4, 0x90, + 0x0f, 0x65, 0x86, 0x28, 0x8b, 0x29, 0xd7, 0x44, 0x50, 0x0f, 0x43, 0xda, 0xcd, 0x98, 0x1e, 0x6a, + 0xec, 0x78, 0x47, 0xe3, 0x9d, 0x5d, 0x76, 0x96, 0x1e, 0x3b, 0x3c, 0x93, 0x1e, 0x73, 0x3b, 0xe0, + 0xf6, 0xf7, 0x63, 0x93, 0x3d, 0x63, 0x59, 0x8e, 0x81, 0xc3, 0x30, 0x7a, 0xf5, 0xbd, 0xec, 0xc3, + 0xdb, 0x06, 0x7a, 0x8e, 0x5b, 0xd1, 0x05, 0x88, 0x27, 0x41, 0xd6, 0xc2, 0x56, 0x02, 0x58, 0x7e, + 0x51, 0x1a, 0x3b, 0xec, 0xbe, 0x76, 0x7f, 0x2e, 0xb3, 0x5f, 0x8f, 0xaf, 0xdf, 0x96, 0x72, 0xfa, + 0x35, 0x05, 0x50, 0x09, 0x2c, 0x0b, 0x3a, 0x8d, 0x9c, 0x1a, 0x18, 0xd3, 0x0c, 0x35, 0x35, 0xd0, + 0xd6, 0x60, 0x3e, 0x71, 0x0d, 0x2d, 0x6f, 0xb7, 0xd4, 0xee, 0x00, 0x59, 0x58, 0x53, 0x90, 0xcd, + 0x31, 0x66, 0x69, 0xd5, 0x09, 0x26, 0x8b, 0x3a, 0x80, 0x54, 0x55, 0xe6, 0xf1, 0x1f, 0x4f, 0x2b, + 0xf9, 0xa2, 0x41, 0xbd, 0x1c, 0xe0, 0x36, 0xad, 0x71, 0x68, 0x32, 0xf6, 0x11, 0xf8, 0x48, 0xd1, + 0xd6, 0x6d, 0x7e, 0x62, 0x17, 0xeb, 0xa3, 0x5c, 0x77, 0xa7, 0x23, 0x5c, 0xc8, 0xd2, 0x32, 0xb4, + 0xad, 0xf2, 0x0c, 0x07, 0xff, 0x7d, 0x86, 0x8c, 0x91, 0x79, 0x71, 0x0a, 0xe8, 0x2a, 0x43, 0xfa, + 0xdc, 0xcc, 0x25, 0x4d, 0x72, 0xc8, 0xce, 0x6b, 0x8a, 0x6e, 0x00, 0x07, 0x00, 0x83, 0x29, 0x50, + 0xec, 0x99, 0x30, 0x4e, 0x4d, 0xea, 0xa6, 0x14, 0x5f, 0x11, 0x47, 0xa1, 0x65, 0xa5, 0xf6, 0x11, + 0xb3, 0x12, 0xaa, 0xe5, 0xfb, 0x83, 0x62, 0xf4, 0x29, 0x19, 0x10, 0xcf, 0x99, 0x01, 0xcd, 0x80, + 0xef, 0x97, 0x23, 0x0c, 0x95, 0xc0, 0xbd, 0xcd, 0xf4, 0x96, 0x62, 0xc2, 0x91, 0x8d, 0xfb, 0x3a, + 0xac, 0x0a, 0x01, 0x0e, 0xa3, 0xa6, 0xb0, 0xe6, 0xef, 0x3a, 0xe3, 0xe4, 0xd2, 0x68, 0xd7, 0x0c, + 0x72, 0xca, 0x94, 0xad, 0xc7, 0x47, 0x23, 0xcf, 0x15, 0xd0, 0xa6, 0x4f, 0x79, 0x66, 0xb5, 0x87, + 0xa6, 0x5e, 0x2e, 0x94, 0x93, 0x44, 0x1f, 0x32, 0xc5, 0x2d, 0xf2, 0x47, 0x67, 0x2c, 0x16, 0x80, + 0x2a, 0xac, 0x0c, 0x0f, 0x94, 0x4b, 0xa9, 0xd9, 0xb4, 0x07, 0xda, 0xef, 0x5f, 0x8e, 0xd3, 0xec, + 0x08, 0x2b, 0x85, 0x66, 0xd2, 0x4f, 0x61, 0x53, 0x97, 0x55, 0xda, 0x91, 0xea, 0x15, 0x85, 0x5a, + 0x5e, 0x78, 0x2a, 0xb8, 0x2e, 0x3b, 0x82, 0x4b, 0xd8, 0x1c, 0x4d, 0xed, 0xb5, 0xdd, 0xa1, 0xf0, + 0x91, 0x73, 0x26, 0xc0, 0xa9, 0x28, 0x49, 0xda, 0xd7, 0x15, 0x1f, 0x81, 0xf7, 0xdb, 0x48, 0x49, + 0x57, 0x83, 0x9b, 0x87, 0x5d, 0xab, 0xbf, 0x9b, 0x15, 0x4f, 0x21, 0xe4, 0xb9, 0x2a, 0x15, 0xfd, + 0x9c, 0x77, 0x71, 0x70, 0x5c, 0xb2, 0x48, 0xf1, 0x6e, 0x4d, 0x93, 0x5a, 0x30, 0x78, 0x40, 0x24, + 0xdd, 0x22, 0x18, 0xff, 0xc8, 0x18, 0x97, 0xc5, 0x17, 0xe1, 0x11, 0x94, 0xd7, 0x3e, 0x47, 0xd5, + 0xa4, 0xcc, 0x34, 0xe3, 0x22, 0x96, 0x07, 0xe7, 0x2e, 0x84, 0xa6, 0x69, 0x7c, 0x97, 0xfb, 0x89, + 0xe8, 0xea, 0x18, 0xcd, 0xe1, 0x95, 0x4d, 0x2e, 0x8d, 0xbe, 0xeb, 0xc1, 0x83, 0x69, 0xb2, 0xc5, + 0xce, 0x72, 0x65, 0x50, 0x02, 0xea, 0xce, 0x57, 0x33, 0xc7, 0xcb, 0xe9, 0x04, 0x59, 0x22, 0x0e, + 0xac, 0xb9, 0xf0, 0xf6, 0x7a, 0xb9, 0x00, 0x17, 0x0a, 0xd7, 0x7c, 0x31, 0xfc, 0x35, 0x39, 0x43, + 0x11, 0x8f, 0x91, 0xed, 0x2c, 0xde, 0x7d, 0xce, 0x28, 0xae, 0xc0, 0xb4, 0x63, 0x80, 0x91, 0xe4, + 0x61, 0xd5, 0x12, 0x7f, 0x3b, 0x82, 0x88, 0x02, 0x9e, 0xda, 0xa7, 0xfc, 0x99, 0x4a, 0xa3, 0x0b, + 0x8b, 0xfd, 0x59, 0x94, 0x03, 0xde, 0xb0, 0x52, 0x90, 0xa6, 0xda, 0xee, 0xa6, 0x54, 0x7c, 0xb1, + 0xca, 0x45, 0xed, 0x5a, 0xf0, 0xc8, 0xcc, 0xb6, 0x5f, 0x41, 0x8c, 0xbb, 0x5a, 0x29, 0x21, 0x60, + 0x4b, 0x9e, 0x8a, 0x97, 0x88, 0xb5, 0xbe, 0x59, 0x95, 0x72, 0x4e, 0x68, 0x5f, 0x72, 0x6e, 0xec, + 0x46, 0x88, 0x42, 0x34, 0xa0, 0x28, 0x48, 0x00, 0xac, 0x94, 0x7a, 0x47, 0x75, 0x2e, 0xf1, 0x9f, + 0x84, 0x74, 0x99, 0x62, 0x6d, 0xfb, 0x2b, 0xaa, 0x5b, 0xd8, 0xfe, 0x8c, 0xca, 0x57, 0xb2, 0xf4, + 0xfd, 0x83, 0x54, 0xb6, 0xd4, 0x5c, 0x06, 0x47, 0xa1, 0xb7, 0x13, 0xaa, 0x24, 0x93, 0xf8, 0xe0, + 0xa8, 0xcf, 0x14, 0xba, 0xa1, 0x88, 0xea, 0x35, 0xba, 0xfa, 0x15, 0xc0, 0x1b, 0x18, 0xfd, 0x32, + 0xeb, 0x9a, 0x01, 0xf9, 0x05, 0x0f, 0x9e, 0xa0, 0x8a, 0xa9, 0xf9, 0xb5, 0x89, 0x89, 0xb2, 0x8b, + 0x42, 0xf3, 0x6f, 0xaf, 0x2f, 0xb5, 0x69, 0xf1, 0x8c, 0xf5, 0x5f, 0xf3, 0xc8, 0x5b, 0xd5, 0xa6, + 0x08, 0xe4, 0x33, 0xe1, 0x28, 0xf2, 0xcb, 0xaa, 0xce, 0x12, 0x86, 0x21, 0xb9, 0x14, 0x98, 0x36, + 0xbd, 0xdc, 0xd2, 0xd8, 0x87, 0x4f, 0xbb, 0xab, 0xfd, 0x6a, 0xe0, 0x9e, 0xae, 0x21, 0x42, 0xf3, + 0x9f, 0xfb, 0xd8, 0xc8, 0x90, 0x77, 0x07, 0x78, 0x1d, 0xbb, 0x63, 0xa0, 0x17, 0x46, 0x16, 0xd8, + 0x94, 0x77, 0x89, 0x23, 0x0c, 0xc7, 0xf9, 0xf3, 0x41, 0xb6, 0x98, 0x1c, 0xc8, 0xd7, 0x79, 0x38, + 0x26, 0xe1, 0x0e, 0xf6, 0xb7, 0xa7, 0x77, 0xcc, 0x24, 0x3b, 0x6d, 0x15, 0x95, 0xcb, 0x6f, 0x9b, + 0x51, 0xa0, 0x9b, 0xe6, 0x5e, 0x0c, 0x65, 0x62, 0xb9, 0x12, 0xca, 0x66, 0x1e, 0x35, 0x3e, 0x23, + 0x3f, 0x39, 0xe3, 0x6f, 0x80, 0x64, 0x3d, 0x08, 0x84, 0x50, 0xf2, 0x39, 0xb3, 0xa7, 0x34, 0xa5, + 0x4d, 0x4a, 0x35, 0x14, 0x11, 0x72, 0xbf, 0xf8, 0xcc, 0x74, 0x6a, 0x3e, 0x46, 0xac, 0xa3, 0x85, + 0x89, 0xb0, 0xaf, 0xd9, 0x1d, 0x50, 0x87, 0xf8, 0x27, 0xf3, 0x01, 0xeb, 0xde, 0xc8, 0x69, 0x8a, + 0x71, 0x0d, 0xd1, 0x7c, 0xa3, 0xbe, 0x73, 0xa3, 0x04, 0xf2, 0xe1, 0xb8, 0x2a, 0x0c, 0x72, 0xdf, + 0xac, 0x45, 0xb1, 0xb5, 0xa5, 0xba, 0xc4, 0x14, 0x54, 0x1a, 0x0b, 0x2a, 0x0d, 0xd9, 0x4b, 0x2a, + 0x2d, 0xbf, 0x06, 0x07, 0xfe, 0x3f, 0xf8, 0x3d, 0x50, 0x85, 0x07, 0x66, 0x1f, 0x63, 0xb4, 0x9b, + 0xbe, 0x42, 0x55, 0x31, 0x87, 0xc2, 0xeb, 0xdd, 0x71, 0x03, 0xe2, 0xd0, 0x3f, 0x75, 0xa2, 0xee, + 0xe8, 0xea, 0x05, 0x51, 0x04, 0x31, 0x3f, 0x40, 0x03, 0xec, 0x71, 0xcd, 0xe6, 0x23, 0x05, 0x1f, + 0x7c, 0x18, 0x64, 0x60, 0x92, 0x99, 0xad, 0x9c, 0x3b, 0xeb, 0xe0, 0xee, 0x91, 0x39, 0xd3, 0x8d, + 0x54, 0x1e, 0xba, 0x0f, 0x93, 0xce, 0x3a, 0x5c, 0x10, 0x73, 0x37, 0x7a, 0x5d, 0x8b, 0x9e, 0x5e, + 0x8a, 0x75, 0x46, 0x03, 0xf0, 0x48, 0x63, 0xee, 0x4d, 0x64, 0x76, 0x69, 0x0c, 0x0e, 0xf0, 0x54, + 0x69, 0x5d, 0xd1, 0x33, 0x18, 0x01, 0x73, 0x06, 0x30, 0x6f, 0x1f, 0x68, 0xd6, 0x82, 0x1c, 0xbf, + 0x85, 0xeb, 0xcf, 0x73, 0xa9, 0x11, 0xe4, 0xf7, 0x64, 0x02, 0x58, 0x02, 0x00, 0x62, 0xb7, 0x97, + 0x82, 0x21, 0x47, 0x1d, 0x47, 0xff, 0x58, 0x7f, 0x2a, 0x7f, 0xb4, 0x50, 0xee, 0x12, 0x26, 0xde, + 0x1e, 0xf9, 0x10, 0x79, 0x80, 0x2a, 0x6e, 0xd5, 0x18, 0x90, 0x3d, 0x6d, 0x1e, 0x87, 0x37, 0x47, + 0xd0, 0xc8, 0x67, 0xf0, 0x16, 0xa9, 0x48, 0xad, 0x46, 0x8c, 0x73, 0xa9, 0x31, 0x33, 0xc6, 0x7b, + 0x3f, 0x06, 0x68, 0xf6, 0xc7, 0x3e, 0x5a, 0x15, 0xd6, 0x8e, 0x09, 0x27, 0x24, 0x9b, 0x49, 0x54, + 0x21, 0xd1, 0x36, 0x91, 0x31, 0xe4, 0xd8, 0x7c, 0xf8, 0xe2, 0x4b, 0x3b, 0x27, 0x3f, 0xb8, 0x6c, + 0x37, 0x18, 0xa6, 0x62, 0x12, 0x29, 0xec, 0x4c, 0xe5, 0xde, 0x0a, 0x26, 0x4c, 0xef, 0x61, 0xe8, + 0xe6, 0xda, 0x1d, 0x1e, 0x17, 0xb9, 0xfe, 0x3c, 0x0b, 0x22, 0xc7, 0x45, 0x40, 0x8a, 0x1c, 0xa2, + 0xfb, 0x0f, 0xc6, 0x55, 0x4e, 0x9d, 0x41, 0xcd, 0x6e, 0x32, 0x6d, 0x84, 0xbb, 0xe5, 0xe3, 0xea, + 0x89, 0x81, 0x0c, 0x71, 0x99, 0xc5, 0xa3, 0xa1, 0x24, 0x7c, 0x33, 0x00, 0x00, 0x05, 0x95, 0xf7, + 0x07, 0x69, 0x61, 0x18, 0xa7, 0xb2, 0xf0, 0x30, 0xb6, 0x57, 0x39, 0xb9, 0x36, 0x35, 0xcd, 0x51, + 0xa0, 0x1c, 0x89, 0x3d, 0xa3, 0x81, 0x4b, 0xaa, 0x1b, 0x80, 0x17, 0x50, 0x6f, 0xa4, 0xb5, 0x54, + 0x4d, 0xc1, 0xe4, 0x26, 0xe2, 0x8d, 0xd0, 0xda, 0x38, 0xc8, 0xbf, 0xcf, 0x4e, 0x33, 0x52, 0xfa, + 0x37, 0x93, 0x60, 0x98, 0x93, 0x39, 0x9c, 0xe6, 0x80, 0xf7, 0x2b, 0xcc, 0x1b, 0xf9, 0xea, 0xef, + 0xfd, 0x15, 0xcf, 0x6f, 0x6c, 0x37, 0xdc, 0xa5, 0x92, 0xc0, 0x86, 0x53, 0xd8, 0xaf, 0xa4, 0x3c, + 0xb2, 0x2c, 0xcf, 0xd7, 0x2d, 0x8d, 0x6c, 0xb7, 0x7b, 0x63, 0x8b, 0x35, 0xa5, 0x1d, 0x57, 0xec, + 0x4b, 0x61, 0x2d, 0xfe, 0x96, 0xd2, 0xfe, 0x6c, 0xfa, 0x27, 0xe5, 0x0b, 0x80, 0xa6, 0x21, 0xdf, + 0xe8, 0xf2, 0xfe, 0x49, 0x88, 0x9b, 0xbf, 0x6d, 0x2b, 0x7f, 0xc0, 0x82, 0x57, 0x38, 0x91, 0x31, + 0x9f, 0xbc, 0x9f, 0x0b, 0xc0, 0xb0, 0x14, 0x2c, 0x93, 0x74, 0x41, 0x1b, 0x36, 0xb5, 0xe7, 0x7d, + 0xe3, 0x5e, 0x1f, 0xcf, 0x3c, 0x7c, 0x08, 0x5a, 0x3d, 0x0a, 0x38, 0x04, 0xa6, 0x21, 0x28, 0x6f, + 0x57, 0x66, 0xf6, 0x5f, 0xc3, 0xfe, 0xf8, 0x7f, 0x20, 0x00, 0xc9, 0xfb, 0xf0, 0x83, 0x31, 0xff, + 0xf6, 0x22, 0xe0, 0x84, 0x46, 0xa1, 0x02, 0xa9, 0xce, 0x19, 0xf2, 0xce, 0x80, 0x26, 0xda, 0x06, + 0xf7, 0x00, 0x8b, 0xab, 0x48, 0x82, 0x0e, 0xe1, 0xfe, 0xae, 0xac, 0x8b, 0xe5, 0x14, 0xfb, 0x01, + 0x12, 0x73, 0x91, 0x08, 0xf2, 0x7c, 0x2d, 0x0e, 0xe7, 0xc0, 0x90, 0x60, 0xb9, 0xa1, 0x8e, 0xd0, + 0x30, 0x10, 0xd0, 0x51, 0xaa, 0x45, 0xb9, 0x0d, 0x90, 0x90, 0xdc, 0x85, 0x7d, 0xf4, 0xdd, 0x8f, + 0x11, 0xed, 0x65, 0x21, 0x2a, 0x87, 0x81, 0x96, 0x3c, 0xd7, 0xa8, 0x86, 0x6a, 0xcb, 0xb9, 0x79, + 0xe6, 0xa0, 0xc9, 0xae, 0xa5, 0x4a, 0x05, 0xa5, 0x98, 0xae, 0xd2, 0x27, 0x0a, 0xae, 0x4c, 0x91, + 0x95, 0x33, 0xc9, 0x49, 0x1b, 0xb1, 0xfb, 0x81, 0x8b, 0x2b, 0x1b, 0xed, 0xb8, 0xfa, 0x10, 0x6c, + 0x16, 0x72, 0x7a, 0x69, 0x33, 0xb4, 0xb4, 0x00, 0x6d, 0xc5, 0x5b, 0x9d, 0x1b, 0x1b, 0xaa, 0xef, + 0x69, 0x9b, 0x26, 0xba, 0xb0, 0xf6, 0xd9, 0x53, 0xb4, 0xd7, 0x14, 0x2b, 0x93, 0x4a, 0x23, 0x76, + 0x44, 0x9c, 0x68, 0x39, 0x47, 0x35, 0xea, 0x76, 0x50, 0xd5, 0x27, 0xbe, 0xc9, 0x9e, 0x30, 0xa2, + 0x93, 0x33, 0xf1, 0xb8, 0x42, 0x7e, 0x0a, 0x76, 0xaa, 0x3a, 0x48, 0x3a, 0x60, 0x40, 0x24, 0xef, + 0x15, 0xfa, 0x60, 0x00, 0x95, 0xcd, 0x74, 0x3c, 0x4a, 0x98, 0xe2, 0x66, 0x1c, 0x07, 0x94, 0x2e, + 0x45, 0xa2, 0x14, 0x7d, 0xa1, 0x85, 0x09, 0xb6, 0x4f, 0x45, 0xb9, 0x57, 0x5b, 0x4c, 0x1c, 0x26, + 0x7b, 0x27, 0xcb, 0xf8, 0x97, 0x40, 0xae, 0x48, 0xc4, 0x09, 0xe4, 0x81, 0x4e, 0x87, 0xab, 0xe4, + 0xce, 0x6a, 0xe7, 0x61, 0xb5, 0xae, 0x25, 0x6b, 0x08, 0x4f, 0x3e, 0x4b, 0x4c, 0x0a, 0x4f, 0x2d, + 0xa4, 0x52, 0x40, 0x50, 0xf5, 0x21, 0x3e, 0x39, 0xd8, 0x78, 0x74, 0xe3, 0x40, 0x2a, 0x9e, 0xf4, + 0xc8, 0x38, 0x86, 0x52, 0x02, 0xba, 0x1b, 0x37, 0x19, 0x14, 0x7b, 0x29, 0x37, 0xf5, 0xf3, 0xaf, + 0xdd, 0x4f, 0xec, 0xa5, 0x6f, 0xf6, 0x73, 0x9b, 0x59, 0xec, 0x86, 0x9e, 0x2e, 0xbc, 0x19, 0xc2, + 0x68, 0x84, 0xc5, 0x7b, 0xe6, 0x25, 0x68, 0x6d, 0x54, 0x00, 0xf5, 0xbf, 0x92, 0x65, 0x81, 0x22, + 0x2c, 0xdf, 0x71, 0x86, 0x3b, 0x90, 0x91, 0x94, 0x4c, 0x23, 0x93, 0x78, 0x4d, 0xee, 0x9e, 0x1d, + 0x72, 0xdd, 0x06, 0xc6, 0x00, 0x2f, 0xac, 0xf7, 0x10, 0x0a, 0xdc, 0xa7, 0xbd, 0xdd, 0x4d, 0xcd, + 0xf9, 0xf6, 0x76, 0x3c, 0x76, 0x7f, 0xe9, 0xd3, 0x82, 0x80, 0x5b, 0xee, 0xe0, 0x37, 0x99, 0x13, + 0x10, 0xa2, 0x2d, 0xb1, 0xaa, 0x5d, 0x6e, 0x90, 0x92, 0x14, 0x80, 0x75, 0xdf, 0x04, 0x25, 0x9c, + 0x56, 0xd1, 0x57, 0xce, 0xfc, 0xb0, 0xe7, 0x62, 0xa2, 0x85, 0xb3, 0x2e, 0x84, 0xe5, 0xd2, 0xff, + 0x04, 0x07, 0x33, 0x36, 0x89, 0x79, 0x45, 0xe2, 0x95, 0x24, 0xde, 0xf8, 0xd9, 0xa1, 0xd5, 0x0d, + 0xfa, 0xdd, 0x0b, 0x4e, 0x0e, 0x65, 0x1e, 0xf4, 0x88, 0x4e, 0xb1, 0xe4, 0xff, 0x05, 0xd5, 0xf0, + 0x61, 0x7c, 0x1e, 0x5b, 0x8b, 0x30, 0x42, 0xb0, 0x8d, 0xf3, 0x99, 0x73, 0xa8, 0x67, 0xb0, 0xe4, + 0xba, 0x75, 0xd5, 0x64, 0x36, 0xc2, 0x84, 0x82, 0x43, 0xcf, 0x59, 0x72, 0x20, 0x43, 0xdf, 0x0b, + 0x11, 0xbe, 0xb3, 0x79, 0x47, 0x7f, 0x3a, 0xf7, 0xf1, 0x5a, 0x8e, 0x71, 0x26, 0x0c, 0x32, 0xbe, + 0xb8, 0x30, 0xd3, 0x3d, 0x4f, 0x38, 0xf4, 0x24, 0xb4, 0x4f, 0x80, 0x4a, 0xf9, 0x4a, 0x4f, 0x22, + 0x7e, 0x6f, 0xe2, 0xdb, 0xa2, 0x96, 0x49, 0xaf, 0x55, 0x7c, 0x26, 0x18, 0xb8, 0xc0, 0x7e, 0x3c, + 0x82, 0x6d, 0x55, 0x6b, 0xb9, 0x8e, 0x6b, 0x14, 0x17, 0xca, 0x65, 0x03, 0x3e, 0xb1, 0xfd, 0x4f, + 0x56, 0xd0, 0xc8, 0x8e, 0xaf, 0xe2, 0x76, 0x31, 0x65, 0x8c, 0x62, 0xde, 0x9a, 0xa5, 0x1e, 0xd5, + 0x28, 0x46, 0x3b, 0x1e, 0xfb, 0xc7, 0xbf, 0x07, 0xbf, 0x09, 0xba, 0xc1, 0xb9, 0xd5, 0x5a, 0xe9, + 0xb1, 0xfd, 0xc3, 0x03, 0x1f, 0x6e, 0xc4, 0x4f, 0xe1, 0x41, 0x36, 0x8a, 0x4e, 0x3a, 0xeb, 0x44, + 0xab, 0x00, 0xc4, 0x6a, 0x35, 0xe2, 0x2a, 0xa3, 0xb5, 0x7b, 0xb4, 0x9c, 0x00, 0x85, 0xba, 0x11, + 0x5f, 0x9b, 0xc2, 0xeb, 0x0c, 0xfb, 0xa2, 0x36, 0x3b, 0x84, 0x33, 0x7b, 0x6f, 0xfb, 0x2a, 0xd6, + 0x47, 0x54, 0xdf, 0x76, 0xff, 0x64, 0x46, 0x41, 0xf7, 0xb0, 0xf2, 0x36, 0xeb, 0xd6, 0x6c, 0x94, + 0x1c, 0xe5, 0x0c, 0x26, 0xed, 0xdc, 0xa8, 0x85, 0xdc, 0x85, 0xa9, 0xd2, 0x86, 0x31, 0x6c, 0xe3, + 0x6c, 0x9b, 0x6a, 0xd4, 0xb1, 0x9d, 0x1d, 0xd0, 0x41, 0x65, 0x12, 0x43, 0x18, 0x93, 0xa3, 0xfe, + 0xc0, 0x6e, 0xe0, 0xcd, 0xb8, 0xb5, 0x2f, 0xf3, 0xc7, 0xaf, 0xc4, 0xaa, 0xfd, 0x71, 0x56, 0xf7, + 0x9d, 0x2c, 0x8d, 0x73, 0x79, 0xa3, 0xba, 0xa5, 0x84, 0x53, 0xfa, 0xc2, 0x1c, 0x66, 0xc3, 0x00, + 0x1d, 0x43, 0xab, 0xfb, 0x81, 0xd5, 0x92, 0x65, 0x95, 0x9b, 0x23, 0x7c, 0x5f, 0x49, 0xbd, 0x74, + 0x55, 0xe5, 0xdb, 0xf8, 0x17, 0x3c, 0xa5, 0x08, 0x0c, 0x9b, 0x87, 0x6f, 0x05, 0x50, 0xf5, 0x12, + 0x4a, 0x76, 0x03, 0x23, 0x93, 0xb8, 0x17, 0xbe, 0xcd, 0x70, 0x78, 0xa8, 0x1d, 0x3a, 0xa3, 0x55, + 0xc2, 0x12, 0x6c, 0x38, 0x8f, 0x8c, 0x06, 0x23, 0x48, 0x3b, 0x35, 0xe4, 0x60, 0x45, 0xfc, 0x22, + 0xe4, 0xb2, 0x03, 0xc9, 0x49, 0x04, 0xe6, 0x21, 0xde, 0x40, 0x02, 0x4e, 0xc2, 0x7f, 0x79, 0x9f, + 0x50, 0xab, 0x75, 0xfc, 0x48, 0xb2, 0xdd, 0x2a, 0x85, 0xbe, 0x97, 0xda, 0xb1, 0xf6, 0xef, 0xea, + 0xfb, 0x32, 0x70, 0x56, 0xf3, 0xbc, 0x33, 0x18, 0xd6, 0xaa, 0xac, 0xaf, 0x8b, 0x6e, 0x02, 0x08, + 0x87, 0x16, 0x03, 0xc2, 0x36, 0x62, 0x56, 0xf2, 0xf4, 0xb6, 0x44, 0x68, 0x99, 0x26, 0x60, 0xfc, + 0x30, 0x2d, 0x60, 0x9b, 0x85, 0xd6, 0xa8, 0x0a, 0xf5, 0xcb, 0xdb, 0x51, 0x1b, 0x93, 0x5f, 0xa4, + 0x22, 0xd9, 0x8f, 0x48, 0x75, 0x98, 0x7e, 0x66, 0xfc, 0xb4, 0x2f, 0x10, 0xfe, 0xb2, 0xab, 0xa0, + 0xb5, 0xc7, 0x89, 0x86, 0x03, 0xb7, 0x96, 0x60, 0x14, 0xb5, 0x41, 0xa7, 0x75, 0x32, 0x63, 0x26, + 0x4c, 0x38, 0x4b, 0x5d, 0x56, 0xaf, 0xf9, 0x25, 0x1d, 0xe3, 0x33, 0xf1, 0x8b, 0x77, 0x38, 0xba, + 0x88, 0xcc, 0xac, 0x1d, 0x36, 0x91, 0xaf, 0x3c, 0x34, 0xbc, 0x75, 0x79, 0x6e, 0xc4, 0xcd, 0xfc, + 0xf1, 0x09, 0xed, 0xa7, 0xf8, 0x5e, 0x20, 0x27, 0x5d, 0x42, 0x95, 0xff, 0x94, 0x69, 0xe9, 0xa4, + 0xc5, 0xc0, 0x1a, 0x0d, 0xdc, 0xb7, 0x73, 0xfd, 0x2b, 0x5f, 0x9b, 0xd5, 0xab, 0x60, 0x10, 0x3c, + 0xd9, 0x22, 0xde, 0x97, 0xc7, 0xf7, 0xe3, 0xf0, 0x56, 0x78, 0x1f, 0x41, 0x33, 0xa2, 0xd2, 0x8d, + 0xaf, 0x2d, 0xa4, 0xce, 0x10, 0x0a, 0x9f, 0xf6, 0xc0, 0xb2, 0x89, 0x33, 0x2f, 0xae, 0x06, 0x68, + 0x1a, 0x54, 0x0e, 0xd1, 0x91, 0xc8, 0xdc, 0x6a, 0x8a, 0xd6, 0x41, 0xb2, 0xf2, 0x2e, 0x17, 0x20, + 0xf3, 0x22, 0xec, 0xac, 0x94, 0x56, 0x36, 0xf9, 0x3b, 0x8e, 0x2e, 0x3d, 0xc5, 0x2b, 0x62, 0xb8, + 0x92, 0xc0, 0x22, 0x75, 0x08, 0x15, 0x50, 0x52, 0xd9, 0xc3, 0xf4, 0x4c, 0x92, 0xe7, 0x31, 0x54, + 0xb9, 0xc7, 0xaa, 0xc0, 0x77, 0xfa, 0x56, 0x67, 0x75, 0xc7, 0x34, 0xec, 0x42, 0xc6, 0x87, 0x7e, + 0x79, 0x11, 0x43, 0x68, 0xea, 0xbb, 0x5b, 0xe4, 0x94, 0xe8, 0x2a, 0x37, 0x4e, 0x30, 0x1d, 0x51, + 0x24, 0x18, 0x4d, 0xa7, 0x8b, 0x7e, 0x57, 0xc9, 0x6b, 0xc3, 0x6d, 0xd6, 0xfa, 0xe6, 0x1d, 0x8e, + 0x0c, 0x68, 0x96, 0x0d, 0x02, 0xa0, 0x5a, 0xa0, 0x70, 0x2a, 0xc9, 0xf8, 0x24, 0x29, 0x41, 0xbc, + 0x3e, 0xdb, 0x69, 0xa7, 0x05, 0x25, 0x70, 0x22, 0x42, 0x93, 0x85, 0x6b, 0xdb, 0xac, 0xaf, 0x15, + 0x97, 0x93, 0x92, 0xb2, 0x97, 0xe3, 0x00, 0x02, 0x12, 0xff, 0xb6, 0x47, 0x6d, 0xc5, 0xd6, 0x07, + 0x54, 0x27, 0x41, 0x8f, 0x5e, 0x0e, 0x18, 0x46, 0x1c, 0x02, 0xba, 0x47, 0x2d, 0x0a, 0xb6, 0x14, + 0xc1, 0x5d, 0x90, 0xae, 0x82, 0x50, 0xa6, 0x92, 0xd5, 0x81, 0x3e, 0x32, 0x0f, 0x02, 0xa0, 0x93, + 0x83, 0x1c, 0x32, 0xb3, 0xee, 0x6f, 0x96, 0xba, 0xe2, 0x6c, 0x1a, 0x7f, 0xf8, 0xac, 0x5f, 0x68, + 0x01, 0x55, 0xef, 0x53, 0x9b, 0x01, 0x7a, 0x80, 0xd6, 0x42, 0x6d, 0xfa, 0xb9, 0xc6, 0xd3, 0xb9, + 0xcd, 0xb5, 0x41, 0x3d, 0xa3, 0x66, 0x18, 0xf7, 0x5d, 0x9e, 0x34, 0x1c, 0x54, 0x4e, 0xa9, 0xca, + 0xc8, 0xb1, 0x55, 0xdf, 0x17, 0xc5, 0xf2, 0x4e, 0xe8, 0xe1, 0xd6, 0x64, 0x78, 0x2b, 0x08, 0x08, + 0xa8, 0xb1, 0x5e, 0xa8, 0x9a, 0x77, 0xac, 0x63, 0x4d, 0x5a, 0x6f, 0x19, 0xa1, 0x03, 0x33, 0x77, + 0xcc, 0xa8, 0x9c, 0x46, 0x82, 0x95, 0x06, 0xdb, 0xf5, 0x71, 0x0b, 0x1c, 0x16, 0xae, 0x06, 0x0f, + 0x27, 0x0a, 0x8a, 0x69, 0xd5, 0xf2, 0x9e, 0x0d, 0xfc, 0x62, 0xa8, 0xfc, 0xc5, 0xd5, 0x2e, 0x92, + 0xb3, 0x12, 0xa5, 0x81, 0xc1, 0xa3, 0x44, 0x9f, 0x45, 0xcd, 0x9b, 0x17, 0x6d, 0x64, 0x15, 0xac, + 0xec, 0xd1, 0x95, 0x44, 0x30, 0xe4, 0x8e, 0x8a, 0x1d, 0x44, 0x88, 0x33, 0x62, 0xe2, 0x7c, 0xfc, + 0xed, 0x74, 0x36, 0xc7, 0x63, 0xf7, 0xf7, 0xaf, 0x89, 0x2c, 0xd9, 0x27, 0x8a, 0x95, 0x00, 0xd1, + 0x19, 0x2f, 0x2f, 0xf7, 0xf0, 0xc8, 0xe4, 0x59, 0x58, 0x9d, 0xcf, 0xd3, 0xf5, 0x9a, 0x53, 0xef, + 0x1b, 0x61, 0x2f, 0x70, 0x3b, 0x62, 0x81, 0x8d, 0xa3, 0x51, 0x91, 0x13, 0xd5, 0x05, 0x18, 0x52, + 0x24, 0x1e, 0x50, 0xe9, 0x2a, 0x82, 0xf4, 0x4a, 0x5c, 0xda, 0x7f, 0xeb, 0xa8, 0x50, 0x50, 0x92, + 0x89, 0x11, 0xf5, 0xf0, 0x80, 0x11, 0xf0, 0x7e, 0x74, 0x45, 0x68, 0x45, 0x39, 0x23, 0x7b, 0x39, + 0x2f, 0xa3, 0x99, 0xe9, 0x3f, 0x45, 0x55, 0xbb, 0x9a, 0x1e, 0xe1, 0x7c, 0x8b, 0x58, 0x35, 0xd2, + 0xe2, 0x6c, 0x2f, 0xe2, 0x13, 0xe6, 0xaa, 0x74, 0xc2, 0x1f, 0x2f, 0x68, 0x6f, 0x6b, 0x7f, 0x4b, + 0x2d, 0x66, 0xa8, 0x3b, 0xeb, 0xee, 0x97, 0xd8, 0xfd, 0xd2, 0xde, 0xa5, 0x2c, 0x01, 0x4e, 0x3c, + 0x61, 0x55, 0xc1, 0x04, 0xf6, 0xb2, 0xb8, 0xb5, 0x1c, 0x2e, 0x62, 0x18, 0x48, 0xd9, 0x93, 0xc1, + 0xc4, 0xd5, 0x0c, 0xc8, 0x71, 0xe7, 0x2e, 0x3e, 0x4f, 0x42, 0x03, 0x2a, 0xc9, 0x8d, 0x16, 0xae, + 0x50, 0x47, 0xe0, 0x79, 0x78, 0x28, 0x69, 0x87, 0x49, 0xf5, 0x3a, 0x67, 0xeb, 0x65, 0xeb, 0xe6, + 0xd5, 0xe4, 0x7f, 0xd4, 0x0c, 0xef, 0x40, 0xf9, 0x38, 0x9b, 0xc6, 0x27, 0xb0, 0x8c, 0xf0, 0xc1, + 0x85, 0x6e, 0x29, 0x81, 0x08, 0xa3, 0x9b, 0x5f, 0x8e, 0xdf, 0xca, 0x70, 0xf3, 0x1e, 0xcc, 0xf6, + 0x97, 0x7d, 0x83, 0xd7, 0x50, 0xa8, 0xb6, 0xbc, 0x69, 0x6d, 0x50, 0x3f, 0x17, 0x6e, 0xc8, 0xc8, + 0x06, 0x28, 0xb6, 0xf5, 0x7b, 0x78, 0xb5, 0xc6, 0x2f, 0xc7, 0xb1, 0xf4, 0x65, 0x0b, 0x4a, 0xe9, + 0xaf, 0x1c, 0x95, 0xed, 0x92, 0x04, 0x01, 0x8e, 0xce, 0xf1, 0x57, 0xc1, 0x2a, 0x22, 0x68, 0x6c, + 0x37, 0x53, 0xa3, 0xc7, 0x1c, 0xd8, 0xbc, 0x67, 0x8a, 0x6f, 0x6a, 0xb5, 0x10, 0xf5, 0x21, 0xc8, + 0x98, 0x14, 0xd9, 0x5e, 0xfa, 0x33, 0x6f, 0x62, 0x13, 0xb3, 0xf1, 0xb6, 0x04, 0x8c, 0x01, 0x84, + 0x97, 0x01, 0x69, 0xb8, 0xfb, 0xda, 0x9b, 0x61, 0x3d, 0x96, 0xcf, 0xd8, 0xe1, 0xa3, 0x07, 0xf2, + 0x63, 0xdd, 0x38, 0x40, 0x7e, 0x02, 0xc0, 0x6b, 0xa1, 0xbe, 0x55, 0xe1, 0x18, 0x4d, 0x26, 0xad, + 0x8a, 0x14, 0x07, 0x88, 0x54, 0x66, 0x18, 0x78, 0x31, 0xcb, 0x07, 0xac, 0x96, 0xf3, 0x07, 0x1f, + 0x6a, 0xb3, 0xd3, 0x8d, 0x2d, 0x65, 0xb2, 0x08, 0x09, 0x4f, 0x1b, 0x41, 0x84, 0xa5, 0x90, 0x8e, + 0xf3, 0x21, 0x57, 0x83, 0x43, 0xc5, 0xe9, 0xcd, 0xfb, 0x04, 0x09, 0x6b, 0x6d, 0xfa, 0xc1, 0x97, + 0x86, 0x98, 0x42, 0x47, 0xfd, 0x22, 0xc5, 0xf7, 0x8e, 0xdf, 0xb4, 0xd0, 0x69, 0x43, 0xce, 0xbe, + 0xf7, 0x9b, 0xee, 0xdf, 0x79, 0x72, 0x4b, 0x0d, 0xc9, 0x25, 0xab, 0x23, 0x0a, 0x90, 0x52, 0x51, + 0xf7, 0xa7, 0x06, 0xde, 0xc4, 0x0b, 0x4e, 0x35, 0x34, 0x38, 0x58, 0xd7, 0xc3, 0xbf, 0xf0, 0x1e, + 0xd8, 0x7c, 0x72, 0xb2, 0xe5, 0x53, 0xca, 0x13, 0xdd, 0x0d, 0xe2, 0x79, 0xe0, 0x14, 0xc6, 0xd4, + 0x5a, 0xb5, 0x20, 0x5a, 0x4c, 0x49, 0xf9, 0x4b, 0xc4, 0x8d, 0xa4, 0xc5, 0x7b, 0xae, 0x45, 0xa1, + 0x98, 0x27, 0xac, 0xa5, 0xb7, 0xb1, 0xed, 0x20, 0x10, 0x5a, 0x1f, 0x4a, 0xda, 0x98, 0xcd, 0xba, + 0xa3, 0xcc, 0xbb, 0xaf, 0xb5, 0xc7, 0x60, 0x57, 0x67, 0x3e, 0xb5, 0xf7, 0x27, 0x8d, 0x70, 0x11, + 0xcf, 0x6f, 0xb1, 0x74, 0x5a, 0xae, 0x86, 0x4a, 0x13, 0xa0, 0x32, 0xe3, 0x7d, 0x9c, 0x20, 0xf6, + 0x00, 0x84, 0x42, 0x67, 0x8a, 0x91, 0x81, 0x0e, 0x7d, 0xe9, 0xc7, 0x29, 0x39, 0xfd, 0x83, 0xd5, + 0x05, 0xda, 0x4d, 0xfa, 0x4d, 0xb7, 0x34, 0x4c, 0x86, 0xcd, 0x9a, 0x0a, 0x08, 0x7d, 0xe2, 0xe0, + 0xcc, 0x56, 0x58, 0x51, 0x75, 0x2f, 0x71, 0x28, 0x06, 0x59, 0x2f, 0x0d, 0x89, 0x1c, 0xb5, 0x4e, + 0xd7, 0x06, 0x6a, 0xa4, 0x84, 0x3e, 0x77, 0xb3, 0xea, 0x1a, 0xac, 0x05, 0x55, 0x50, 0xa3, 0xe0, + 0x5b, 0xb2, 0x2f, 0x62, 0xfe, 0x2a, 0x3d, 0x85, 0xa2, 0x11, 0x13, 0x82, 0x9d, 0x83, 0xbc, 0x8f, + 0x4b, 0x10, 0x2f, 0x85, 0xa8, 0x0d, 0x6e, 0xc4, 0x37, 0x66, 0xc9, 0x70, 0x79, 0x7f, 0xc3, 0xfd, + 0x26, 0x61, 0x2f, 0x7a, 0x4c, 0x28, 0xc8, 0xc6, 0xe5, 0xdd, 0x17, 0x60, 0x59, 0x50, 0x01, 0xb7, + 0x31, 0x52, 0xb7, 0xc4, 0xd1, 0xf8, 0xaa, 0x63, 0xd6, 0xf6, 0x7f, 0xac, 0x7e, 0x6c, 0xc3, 0x7d, + 0x66, 0x77, 0x78, 0x8d, 0xe3, 0x27, 0xd3, 0xac, 0xd1, 0x5b, 0x27, 0x53, 0x9d, 0x11, 0x26, 0xe1, + 0xd3, 0xb5, 0x73, 0xa5, 0x17, 0x4c, 0x1f, 0xf2, 0x2a, 0x78, 0x76, 0x6d, 0xc1, 0x80, 0xe9, 0xc7, + 0x6e, 0xce, 0xa3, 0x50, 0xf9, 0xd5, 0x07, 0xaa, 0xc9, 0x08, 0x4e, 0x1e, 0x4a, 0x9c, 0x59, 0x57, + 0xb5, 0x84, 0x85, 0x79, 0xca, 0x77, 0x00, 0xa9, 0x30, 0x57, 0x4c, 0x1e, 0x0f, 0x16, 0x3e, 0x30, + 0xa6, 0x5a, 0x93, 0xe6, 0x2e, 0x6b, 0xf8, 0x51, 0x68, 0x12, 0xf1, 0x46, 0xe5, 0xc6, 0xcf, 0xb0, + 0x19, 0xfb, 0x58, 0xf3, 0xff, 0x7d, 0x1f, 0x01, 0xfb, 0xfd, 0x92, 0x76, 0xd6, 0xd6, 0x03, 0xd4, + 0x47, 0x70, 0x67, 0xfb, 0x6a, 0x2e, 0xfd, 0x7d, 0x94, 0x81, 0x46, 0xda, 0xd8, 0x6f, 0x92, 0x9e, + 0xa0, 0x4b, 0xfb, 0xbe, 0xa8, 0x07, 0x1c, 0xc9, 0xc0, 0x66, 0xaf, 0xb1, 0x3b, 0xb8, 0x5a, 0x27, + 0xe9, 0x54, 0x59, 0xa4, 0xeb, 0x92, 0xe3, 0xb7, 0x01, 0x20, 0x7a, 0xe6, 0xc3, 0xa2, 0x5c, 0x94, + 0x92, 0xe2, 0x9b, 0x20, 0x66, 0x1f, 0x45, 0x8f, 0xc4, 0x30, 0x2b, 0xdd, 0x97, 0xbf, 0x46, 0xfb, + 0x9e, 0x63, 0x49, 0x84, 0x47, 0x78, 0xcd, 0x5c, 0x70, 0x37, 0xa6, 0xd6, 0x11, 0x48, 0xfe, 0x79, + 0x7d, 0x3a, 0x84, 0x66, 0x29, 0x2e, 0x78, 0x0f, 0x3d, 0xc8, 0x16, 0xb5, 0x05, 0x86, 0x60, 0x9f, + 0x14, 0xd4, 0x3e, 0xcd, 0x89, 0xbd, 0x3c, 0x05, 0xf4, 0xa7, 0x8d, 0x9f, 0x9d, 0x2b, 0x07, 0x87, + 0x2a, 0x2e, 0x2e, 0x3c, 0x9f, 0xae, 0x29, 0x8c, 0xf4, 0x4c, 0xa6, 0xf7, 0x7a, 0x9f, 0x66, 0xdf, + 0xd3, 0xb9, 0x95, 0x48, 0x9c, 0x72, 0x5d, 0x1a, 0x97, 0xb0, 0xae, 0xef, 0xc1, 0xab, 0x77, 0x25, + 0x62, 0x20, 0x3a, 0xa4, 0x23, 0xec, 0x6c, 0x46, 0xe8, 0xde, 0xe9, 0x25, 0x00, 0xe0, 0xd0, 0x0f, + 0xe4, 0x75, 0x2b, 0xd6, 0x06, 0xc4, 0xec, 0xe6, 0x64, 0xff, 0xaa, 0x72, 0x3c, 0x1b, 0x53, 0xd2, + 0xd9, 0x42, 0xc7, 0x9c, 0x38, 0x79, 0xb5, 0x4b, 0x55, 0x30, 0x65, 0x28, 0xcd, 0x4d, 0x2a, 0x06, + 0x73, 0x1b, 0x9b, 0x95, 0xf7, 0x7e, 0x38, 0x4b, 0x02, 0x8e, 0x5c, 0xe7, 0x60, 0x3f, 0x7e, 0xf4, + 0xb7, 0x7a, 0x91, 0xb9, 0xbf, 0xa0, 0x8a, 0xd0, 0xc1, 0xce, 0x65, 0x1e, 0x69, 0x59, 0xd3, 0x06, + 0x8c, 0xe1, 0xcd, 0xc2, 0xf8, 0x08, 0xf3, 0xb9, 0x35, 0x55, 0xd2, 0xd0, 0xd8, 0x2f, 0x0f, 0xea, + 0xa2, 0x42, 0xd6, 0xeb, 0x58, 0x82, 0xa7, 0x7d, 0x1c, 0xd1, 0xfa, 0xad, 0xcb, 0x09, 0x0e, 0xd4, + 0xd2, 0x1a, 0x6d, 0x0b, 0xeb, 0x32, 0x29, 0xba, 0xe5, 0x7b, 0xef, 0xea, 0x94, 0x59, 0xe9, 0xcf, + 0x9a, 0x13, 0x9a, 0x44, 0x55, 0x17, 0x40, 0xa9, 0x28, 0xdd, 0x6c, 0xd8, 0xa3, 0x28, 0xf0, 0xc8, + 0x47, 0x60, 0xa2, 0x5f, 0x72, 0xde, 0x1c, 0x7e, 0xc0, 0x24, 0xf6, 0xc9, 0x85, 0x1f, 0x6f, 0x64, + 0xdd, 0x4d, 0xe7, 0x35, 0x0f, 0x29, 0xdf, 0xeb, 0xde, 0x82, 0xff, 0x98, 0x1b, 0xb4, 0x0c, 0x6b, + 0x25, 0xc9, 0x28, 0x8c, 0x18, 0x90, 0x98, 0x01, 0x7a, 0xf2, 0x41, 0x2c, 0xd4, 0xdb, 0x19, 0x68, + 0xc9, 0xaf, 0x9e, 0x13, 0xf0, 0x6b, 0x30, 0xab, 0x8d, 0x44, 0x0c, 0x4a, 0x08, 0x03, 0x64, 0x1a, + 0xa1, 0x88, 0x28, 0x4c, 0xdd, 0x21, 0x8d, 0x6e, 0x38, 0xf8, 0x29, 0x83, 0x67, 0xf9, 0x61, 0xf7, + 0x8e, 0xc4, 0x09, 0xee, 0xea, 0x8c, 0xb9, 0x27, 0xad, 0x2d, 0xeb, 0xde, 0xeb, 0xc2, 0x3f, 0xdb, + 0xfd, 0xac, 0x80, 0x90, 0x3f, 0x11, 0xd9, 0xcd, 0x6f, 0x84, 0x68, 0xb2, 0x32, 0xd1, 0xab, 0x88, + 0x11, 0x3a, 0x50, 0xa5, 0xbe, 0x64, 0xce, 0x08, 0x0f, 0xca, 0x36, 0x83, 0x78, 0xa7, 0x15, 0xe6, + 0xfe, 0x58, 0x08, 0x7c, 0x3b, 0xd0, 0x85, 0x72, 0xe3, 0x64, 0x22, 0x6a, 0x87, 0x99, 0xb9, 0x49, + 0x33, 0x2a, 0xe9, 0xef, 0x9d, 0x60, 0x42, 0xcb, 0x0c, 0x32, 0x08, 0x5d, 0x50, 0x04, 0xce, 0x3a, + 0xb6, 0xb7, 0xb2, 0x85, 0x5e, 0xb8, 0x30, 0x76, 0x07, 0x7c, 0xe2, 0xca, 0x84, 0x8a, 0x50, 0x89, + 0xd7, 0x78, 0x22, 0x9d, 0x54, 0x00, 0xa8, 0x75, 0x19, 0x53, 0xfd, 0xb2, 0xc2, 0x71, 0xd1, 0x6c, + 0xaa, 0xfc, 0xba, 0x30, 0xce, 0x66, 0x50, 0x1c, 0x59, 0xf3, 0x7b, 0xb4, 0x18, 0x98, 0xc4, 0x42, + 0x2c, 0xc5, 0x09, 0xf8, 0x7d, 0x6d, 0xca, 0xa7, 0x49, 0x02, 0x0e, 0x72, 0xbf, 0xa2, 0x7f, 0xa3, + 0x33, 0x79, 0xe0, 0x8e, 0x70, 0x38, 0x4a, 0x34, 0xf5, 0x3d, 0xde, 0x37, 0xdb, 0x63, 0x34, 0x9b, + 0x12, 0x1f, 0x5b, 0x75, 0x40, 0xe0, 0x6e, 0x48, 0x8c, 0xb2, 0x6f, 0xa3, 0x17, 0x90, 0x86, 0xb3, + 0x29, 0x1e, 0x3f, 0xe3, 0x6d, 0x69, 0xe7, 0x56, 0x49, 0x7d, 0x62, 0xb7, 0x49, 0xd5, 0xf9, 0x00, + 0xa9, 0x02, 0xd8, 0x5a, 0x68, 0x22, 0x09, 0xe2, 0x67, 0x59, 0xaf, 0x3b, 0x84, 0xb8, 0xfb, 0xc0, + 0x69, 0x2c, 0x3c, 0x81, 0x64, 0x87, 0x72, 0x48, 0x32, 0xb3, 0xf7, 0x12, 0x1f, 0xa9, 0x9c, 0x16, + 0x2f, 0x28, 0x56, 0x58, 0xfd, 0x0f, 0x9f, 0x7e, 0x51, 0x93, 0xe6, 0x0c, 0x2b, 0xbf, 0x0f, 0x6d, + 0xbe, 0x2f, 0xfb, 0xa7, 0x66, 0x41, 0xe8, 0xee, 0xc8, 0x1d, 0xa8, 0x6d, 0x95, 0x5b, 0xdf, 0x83, + 0x0f, 0x7f, 0x68, 0x7b, 0x10, 0x7e, 0xc1, 0xae, 0xac, 0xa6, 0xf4, 0x79, 0xc6, 0xe9, 0x20, 0xdd, + 0xf4, 0x57, 0xe8, 0x2e, 0xfe, 0xa1, 0x30, 0x68, 0x39, 0xcd, 0xe3, 0x04, 0x1e, 0x53, 0x95, 0xcd, + 0xd9, 0x69, 0x8f, 0x1f, 0x06, 0x46, 0x25, 0xc1, 0x93, 0x0c, 0xf8, 0x2d, 0x67, 0x68, 0x04, 0xcd, + 0x51, 0x65, 0x81, 0xe4, 0xab, 0x15, 0xc7, 0xb9, 0xd4, 0x43, 0x74, 0xf9, 0xc3, 0xb6, 0x4e, 0x8d, + 0x59, 0xe0, 0xae, 0xd7, 0x85, 0x94, 0xf3, 0x47, 0x75, 0xe0, 0xc3, 0xdd, 0xa7, 0x1c, 0xc9, 0xc7, + 0xb9, 0x0f, 0x55, 0x37, 0xab, 0xe8, 0x8d, 0x68, 0x82, 0xd7, 0x3d, 0x0f, 0x49, 0xc1, 0x0a, 0x95, + 0xf5, 0xe8, 0x46, 0x9c, 0x7a, 0x47, 0xf2, 0xd5, 0xc0, 0xa5, 0x2f, 0x00, 0xa3, 0x0e, 0xb3, 0x00, + 0x01, 0x35, 0xef, 0xce, 0x78, 0xf1, 0x1c, 0x07, 0x64, 0xb2, 0xb1, 0xba, 0x12, 0x7e, 0xda, 0xfc, + 0xa2, 0x8a, 0x39, 0x44, 0x8d, 0xf6, 0x6d, 0xb3, 0x95, 0x5e, 0x64, 0xd6, 0x82, 0xb1, 0xf7, 0xe3, + 0xef, 0x83, 0xa9, 0x66, 0x2d, 0xda, 0xbd, 0xd2, 0x70, 0x6f, 0x18, 0x22, 0xcd, 0x9a, 0xff, 0xec, + 0x7a, 0xd9, 0x56, 0x1b, 0x09, 0xb2, 0x20, 0x3d, 0x23, 0xa2, 0x2a, 0x71, 0xc3, 0xeb, 0x49, 0x5b, + 0x6f, 0xeb, 0x47, 0xc5, 0x26, 0xe8, 0x57, 0x9d, 0x27, 0x2c, 0xea, 0xc4, 0x2a, 0x2f, 0x42, 0xb6, + 0x28, 0x97, 0xad, 0xd4, 0x1f, 0xc4, 0xbc, 0x7b, 0x74, 0x60, 0x67, 0xb2, 0x83, 0xba, 0xa8, 0xa4, + 0xe2, 0xea, 0xcc, 0x96, 0xfd, 0x48, 0xd6, 0x4d, 0xad, 0x39, 0x7a, 0x5e, 0x6e, 0xb5, 0x5e, 0x6d, + 0x53, 0x25, 0x9c, 0xf2, 0x83, 0x0e, 0x9a, 0x97, 0x17, 0xf9, 0x21, 0x5a, 0x28, 0x9c, 0xa6, 0x65, + 0x50, 0xd5, 0x63, 0xaa, 0x08, 0x36, 0x8c, 0xd4, 0xa3, 0x1d, 0xcb, 0x9c, 0x9e, 0xd7, 0x77, 0x95, + 0xfc, 0x61, 0x46, 0x4b, 0x8e, 0x38, 0xaa, 0x3b, 0xe5, 0xa0, 0xc2, 0xe5, 0xa2, 0xc6, 0x2a, 0xdc, + 0x3c, 0x44, 0x83, 0xaf, 0x81, 0x9b, 0xa2, 0xa6, 0xfb, 0x4b, 0xea, 0x1a, 0xed, 0x30, 0x79, 0xae, + 0x8d, 0x2e, 0x0b, 0x0e, 0x7c, 0x62, 0xa7, 0xe4, 0xd8, 0xa8, 0xaa, 0x3a, 0x26, 0x4c, 0xf3, 0xe5, + 0xe1, 0x6e, 0xf1, 0x89, 0xf2, 0x92, 0x2e, 0xf6, 0x9d, 0x47, 0x8d, 0x9f, 0x76, 0x0e, 0x00, 0x9e, + 0x6a, 0x1c, 0x14, 0x66, 0x97, 0xc9, 0xf0, 0x1b, 0xfb, 0xe0, 0x57, 0x6e, 0x8c, 0x73, 0x10, 0x70, + 0xe3, 0x27, 0xae, 0xb4, 0x36, 0xc4, 0x1d, 0x86, 0xf8, 0x68, 0xe3, 0x3d, 0xcb, 0xc8, 0xd2, 0x29, + 0xdd, 0x76, 0x64, 0x4d, 0x36, 0x72, 0xfc, 0xfb, 0x7c, 0xa9, 0x7c, 0xd8, 0x8b, 0x8b, 0x39, 0xad, + 0x91, 0x4e, 0x25, 0xa7, 0xbc, 0xb2, 0x0c, 0x44, 0x98, 0x2a, 0x53, 0xbc, 0x58, 0x7c, 0xc4, 0xff, + 0xf6, 0xb8, 0x5f, 0x5b, 0x60, 0x29, 0x22, 0xfe, 0x39, 0x5f, 0x89, 0xdf, 0xbf, 0x17, 0x1a, 0xa0, + 0x3e, 0x6a, 0x8c, 0x81, 0x8d, 0x0f, 0x29, 0x26, 0x97, 0xf6, 0xa5, 0x3b, 0xcb, 0x41, 0x52, 0x57, + 0xd9, 0xb9, 0x6a, 0x41, 0xe9, 0x33, 0x34, 0x7a, 0x1b, 0x8a, 0x8a, 0x46, 0x27, 0xe3, 0xc8, 0xdd, + 0x1b, 0x98, 0x39, 0x7e, 0xfd, 0x48, 0xa6, 0xd6, 0xa5, 0xc9, 0x13, 0x5c, 0xcc, 0x08, 0x80, 0xd9, + 0xa0, 0x76, 0x0d, 0x43, 0x2a, 0x90, 0xfa, 0xb1, 0xf7, 0x34, 0x6c, 0x0c, 0x1e, 0x4e, 0x28, 0x31, + 0x36, 0x09, 0x48, 0x95, 0x56, 0x10, 0x8e, 0x54, 0x39, 0xed, 0xe8, 0x2f, 0xfc, 0xbf, 0x97, 0xc2, + 0x9f, 0x8e, 0xd6, 0x4b, 0xbd, 0x64, 0x37, 0x7a, 0x3b, 0x11, 0xd0, 0xe1, 0xe1, 0x05, 0x9a, 0xf3, + 0x6d, 0x6b, 0xbe, 0xf7, 0x49, 0x07, 0x3e, 0x29, 0x34, 0x52, 0xcc, 0xe7, 0x87, 0xf2, 0x74, 0xe0, + 0xfb, 0xb6, 0xbf, 0xbc, 0xa3, 0x49, 0xf4, 0x90, 0x25, 0x71, 0x7b, 0x40, 0x45, 0x7f, 0x29, 0x3f, + 0x39, 0x5d, 0x52, 0x0d, 0x6a, 0x60, 0xcc, 0xf1, 0x91, 0x45, 0x51, 0xcc, 0xad, 0xc4, 0x85, 0x62, + 0x4a, 0x7d, 0xed, 0x15, 0x2d, 0x99, 0x69, 0x7f, 0x9c, 0xcb, 0x70, 0xfd, 0xe3, 0xad, 0xc8, 0xe0, + 0x95, 0x1e, 0xf3, 0x84, 0x11, 0x69, 0xce, 0xeb, 0x3e, 0x1c, 0x10, 0xd8, 0xd0, 0xcb, 0x31, 0xb5, + 0x85, 0x5f, 0xe8, 0xc5, 0xb5, 0xe0, 0xeb, 0x59, 0x02, 0xbf, 0x33, 0x0c, 0xae, 0xc0, 0xf7, 0x9b, + 0xc5, 0xd0, 0x29, 0x4f, 0x79, 0x57, 0x4e, 0x72, 0xbe, 0xdf, 0xcf, 0xdc, 0x18, 0xe2, 0x10, 0x1b, + 0x99, 0x2d, 0x74, 0x2b, 0x15, 0x44, 0x46, 0xc1, 0xe5, 0x39, 0x0b, 0xad, 0x50, 0xc1, 0x4f, 0xf3, + 0xe3, 0x3d, 0xde, 0x0a, 0x35, 0xec, 0xfd, 0xc5, 0x39, 0x90, 0x05, 0x3d, 0x6f, 0x35, 0x75, 0x3e, + 0xca, 0x60, 0x43, 0xd9, 0x75, 0xda, 0x22, 0xf7, 0x68, 0xad, 0x7b, 0x98, 0xf0, 0xba, 0xd9, 0x82, + 0x89, 0x0b, 0xf4, 0x4f, 0xbc, 0x9d, 0x64, 0x4d, 0x89, 0x8c, 0x8b, 0xc3, 0x69, 0xd2, 0xfe, 0x87, + 0x12, 0xd1, 0x67, 0xb9, 0x40, 0x1a, 0xfe, 0x4f, 0x79, 0x7d, 0xa0, 0xed, 0xcf, 0x86, 0xb0, 0xea, + 0xac, 0xf8, 0x17, 0xf4, 0x3e, 0xfa, 0x19, 0x03, 0x32, 0x6c, 0xbd, 0xed, 0x3d, 0x88, 0xcb, 0x58, + 0x8c, 0xd9, 0xd4, 0xe9, 0xf8, 0x32, 0x0a, 0xa9, 0xe4, 0x9c, 0x0f, 0xb9, 0xed, 0xa9, 0x80, 0x07, + 0x48, 0xeb, 0x77, 0x06, 0x81, 0xda, 0x7c, 0x2e, 0x70, 0x72, 0x0b, 0x10, 0x2a, 0xd8, 0xe7, 0x4e, + 0xef, 0x6d, 0x7b, 0xc2, 0x9c, 0xa9, 0xf2, 0xb3, 0x9c, 0x3d, 0x18, 0x43, 0xc9, 0x04, 0x62, 0x3f, + 0x7e, 0x5d, 0x6c, 0xf0, 0x42, 0x48, 0x1d, 0x89, 0xe5, 0x70, 0x3c, 0xbd, 0x85, 0x6c, 0x31, 0xac, + 0xa9, 0xb4, 0xbe, 0x50, 0x8a, 0xfc, 0x69, 0xcf, 0x34, 0x6c, 0x86, 0xf6, 0x28, 0x25, 0x37, 0x4d, + 0x6b, 0x60, 0x10, 0x3d, 0xb2, 0x50, 0xa2, 0x21, 0xeb, 0xcb, 0x7a, 0xda, 0x8b, 0xbe, 0x6a, 0xea, + 0x12, 0xe7, 0xdc, 0xfc, 0x65, 0x12, 0xee, 0xe2, 0x44, 0xca, 0xea, 0xb0, 0x4c, 0xe4, 0xed, 0x00, + 0x18, 0x57, 0x8b, 0xb2, 0xea, 0x48, 0x00, 0x78, 0xd1, 0x89, 0x9a, 0x44, 0x6d, 0x34, 0xb8, 0x75, + 0xf3, 0x01, 0xad, 0x3f, 0xd9, 0x2c, 0x23, 0x5f, 0xc7, 0x5f, 0x6a, 0x19, 0x90, 0xe1, 0x6f, 0x21, + 0xd0, 0x21, 0x81, 0x87, 0x12, 0x1a, 0x58, 0xdb, 0x67, 0x5e, 0x73, 0xbb, 0x7f, 0x24, 0x0c, 0x9d, + 0xec, 0xdd, 0xd1, 0x70, 0xd9, 0x23, 0xbe, 0x9c, 0xfd, 0x85, 0x4f, 0x62, 0x84, 0x06, 0xb8, 0xc9, + 0xfd, 0x2e, 0xa9, 0xba, 0x41, 0x9b, 0x66, 0xf3, 0x84, 0x73, 0x38, 0x90, 0x41, 0x94, 0x63, 0xd6, + 0x4e, 0xb3, 0xf9, 0x6d, 0x82, 0x96, 0x66, 0xc4, 0x5d, 0xad, 0x14, 0xd7, 0x6e, 0xda, 0xf9, 0xbf, + 0x8b, 0x77, 0xe1, 0x73, 0xdb, 0xca, 0x3d, 0x31, 0x62, 0x18, 0xe4, 0xe8, 0xa2, 0x4d, 0x60, 0x0e, + 0x04, 0xe0, 0x5e, 0x2b, 0x90, 0x7d, 0x6f, 0x5e, 0x0e, 0x1f, 0xd6, 0x59, 0x6b, 0x08, 0x6c, 0x82, + 0x0f, 0x13, 0x8d, 0xc2, 0xa7, 0x0b, 0x83, 0x29, 0x33, 0x4a, 0xaf, 0x98, 0xc8, 0x54, 0x44, 0x8a, + 0x28, 0x84, 0xc5, 0xa8, 0x15, 0x15, 0x0d, 0x62, 0x41, 0x76, 0x3e, 0xdd, 0x0f, 0x07, 0xe1, 0x4a, + 0x1b, 0x37, 0xce, 0x7c, 0xe6, 0x37, 0xaf, 0xae, 0xf7, 0xae, 0xf8, 0xad, 0x17, 0x30, 0x66, 0xd3, + 0xe8, 0x6c, 0xaa, 0x27, 0x90, 0x1f, 0x69, 0x97, 0xa6, 0x30, 0x6f, 0x84, 0xd1, 0xf8, 0xda, 0xd9, + 0x4d, 0xda, 0x0e, 0x27, 0xe4, 0x64, 0x85, 0x2d, 0x71, 0x27, 0xaa, 0x60, 0x5f, 0xbf, 0x05, 0x0c, + 0x61, 0xa6, 0xae, 0x0f, 0x93, 0x6b, 0xbd, 0x30, 0x03, 0x8c, 0xf0, 0xb8, 0x3f, 0x7f, 0x47, 0x34, + 0x31, 0x79, 0xc9, 0x8d, 0x01, 0x9c, 0xb5, 0x06, 0x0e, 0xf8, 0xe6, 0x3e, 0xda, 0x94, 0x6e, 0x4f, + 0xd0, 0xbf, 0xa2, 0x69, 0xac, 0x81, 0x47, 0x24, 0x71, 0xfb, 0x5c, 0xd3, 0xb0, 0x40, 0x34, 0xe2, + 0x2e, 0xa7, 0xa1, 0x30, 0xd9, 0x06, 0x42, 0x0c, 0xec, 0x5f, 0x5e, 0xd1, 0x79, 0xde, 0x88, 0x62, + 0x5e, 0x8b, 0x8f, 0x91, 0x29, 0x41, 0x9f, 0x82, 0xee, 0xf3, 0x88, 0x09, 0xef, 0x2e, 0xd3, 0x86, + 0x32, 0x2f, 0x9f, 0x94, 0x02, 0x08, 0xd9, 0xa3, 0x11, 0xd8, 0x5a, 0x2c, 0x7c, 0x48, 0x32, 0x35, + 0xc0, 0x27, 0xa9, 0xb1, 0xd7, 0x63, 0xef, 0x61, 0xa4, 0x46, 0x54, 0xa1, 0xa1, 0x45, 0x2a, 0xc2, + 0x68, 0xd2, 0x8a, 0x4b, 0x7a, 0x08, 0x74, 0x5f, 0xf5, 0xb8, 0xa0, 0x02, 0xfd, 0xfb, 0xbc, 0x7c, + 0x63, 0xd3, 0x7c, 0x05, 0x13, 0x92, 0x4a, 0xd4, 0x38, 0x3f, 0x1f, 0x81, 0x59, 0x97, 0x41, 0xd7, + 0xc9, 0xf2, 0xee, 0xc6, 0xf9, 0x4a, 0x8f, 0x31, 0x01, 0x57, 0x0c, 0x4d, 0x0f, 0x59, 0xd1, 0x7f, + 0x23, 0x3c, 0x08, 0xa9, 0x81, 0xd0, 0xb6, 0x58, 0x52, 0x45, 0x69, 0x7f, 0xd1, 0x76, 0x27, 0x63, + 0x63, 0xc0, 0xba, 0xcb, 0xb4, 0xf2, 0xa6, 0xf4, 0xfd, 0xa7, 0x2f, 0xc5, 0x01, 0xb3, 0x49, 0x4b, + 0x69, 0xf1, 0x75, 0x55, 0xf4, 0x90, 0x35, 0xc5, 0x83, 0x8e, 0x9b, 0xaf, 0x03, 0x77, 0x23, 0x8b, + 0x89, 0xa5, 0xc8, 0x35, 0x4b, 0xce, 0xb9, 0xb0, 0x1c, 0x39, 0x92, 0x32, 0x26, 0xe3, 0x71, 0x60, + 0x21, 0x14, 0xcf, 0x22, 0xad, 0xc1, 0xc1, 0xde, 0x6a, 0x0a, 0x87, 0xcb, 0x91, 0x6a, 0x2a, 0x27, + 0x85, 0xea, 0x2f, 0x77, 0xb5, 0x21, 0x49, 0x91, 0xed, 0x05, 0x52, 0xd1, 0x87, 0x9f, 0xaa, 0xd9, + 0x18, 0x7f, 0xf3, 0xf6, 0xca, 0x59, 0x31, 0x46, 0x5a, 0x1f, 0x9d, 0x90, 0xbd, 0x41, 0x94, 0x1d, + 0x37, 0xd9, 0xd5, 0x2f, 0xf2, 0x32, 0xc8, 0x5c, 0xbe, 0xf2, 0x2d, 0xdd, 0x9d, 0x3d, 0xc8, 0x50, + 0x4d, 0x1e, 0xcf, 0x82, 0x0b, 0x35, 0x95, 0x38, 0xdb, 0x80, 0x63, 0x3e, 0x78, 0x96, 0xaf, 0x99, + 0xe2, 0x4e, 0x01, 0x22, 0x18, 0x0b, 0x81, 0x28, 0xee, 0x7d, 0x01, 0x85, 0x9f, 0x20, 0x87, 0x87, + 0x9b, 0x2a, 0x05, 0xa3, 0x3e, 0xc2, 0x0e, 0x9e, 0x6e, 0x68, 0x3a, 0x40, 0x3c, 0xff, 0xa0, 0xbf, + 0x8a, 0x94, 0xaa, 0x4f, 0xd7, 0x43, 0x7c, 0xa8, 0x58, 0x2e, 0x6a, 0xd9, 0x5f, 0xa3, 0x1f, 0x77, + 0x27, 0x6d, 0x03, 0xa5, 0x6c, 0x34, 0x3c, 0x96, 0x53, 0xec, 0x99, 0xff, 0xc8, 0xc2, 0x52, 0xd6, + 0xca, 0x38, 0xef, 0x58, 0x21, 0xf9, 0xca, 0x67, 0xfa, 0x12, 0x57, 0x1c, 0xb1, 0xf0, 0xfc, 0x32, + 0x11, 0xf6, 0x48, 0xb1, 0x79, 0xa4, 0x9e, 0xce, 0xdc, 0x73, 0x46, 0x4a, 0x5c, 0x18, 0xcb, 0x07, + 0x71, 0x40, 0x8d, 0x9f, 0x5b, 0x49, 0x0d, 0x39, 0x8e, 0x64, 0x21, 0xe7, 0xcc, 0xa1, 0x02, 0x20, + 0x0e, 0xc7, 0x63, 0x3a, 0xc2, 0xa3, 0x99, 0x6f, 0x34, 0x7c, 0x39, 0x1e, 0xed, 0x42, 0x2e, 0xbd, + 0x29, 0x86, 0x20, 0x5d, 0x70, 0xec, 0x97, 0xc4, 0xd1, 0x76, 0xe9, 0x57, 0xd0, 0x8f, 0x4a, 0xb0, + 0xc4, 0x62, 0x00, 0x1e, 0x3d, 0xa2, 0x8c, 0xe4, 0xee, 0x97, 0x69, 0x19, 0xa0, 0x09, 0x14, 0x54, + 0x9a, 0x12, 0x4c, 0x10, 0xfc, 0xbd, 0xea, 0xab, 0xc0, 0x2a, 0xbf, 0x9f, 0xfb, 0x49, 0xa5, 0x6c, + 0x49, 0x08, 0x8d, 0x69, 0xd8, 0x92, 0xd5, 0x39, 0x79, 0x9d, 0xe6, 0x9c, 0x70, 0xe6, 0x20, 0xe0, + 0x40, 0x16, 0xf2, 0xd7, 0x98, 0x0f, 0xb0, 0xd9, 0xb1, 0x18, 0x7b, 0xfa, 0xc4, 0xbe, 0x0b, 0xd0, + 0x06, 0xc1, 0x6c, 0xcd, 0x9e, 0x92, 0xee, 0x8b, 0xfc, 0xaa, 0x66, 0x2c, 0xa3, 0x06, 0x08, 0xfb, + 0xe7, 0x13, 0xae, 0xa7, 0x95, 0xc2, 0x4c, 0x67, 0x7e, 0x8e, 0x1d, 0x93, 0x0e, 0x85, 0xfd, 0x16, + 0x66, 0xe7, 0xc4, 0xbe, 0xe2, 0x8b, 0x2f, 0x3c, 0x65, 0xe3, 0x83, 0x9e, 0xf3, 0x80, 0x4a, 0xe7, + 0x1b, 0x48, 0x1c, 0xc5, 0xe9, 0xd6, 0x1b, 0x7f, 0x8e, 0xe1, 0xa1, 0x8b, 0xdc, 0xfe, 0x6f, 0xcf, + 0xe7, 0xe7, 0xad, 0x57, 0xd8, 0x09, 0x67, 0x56, 0x12, 0x52, 0xe9, 0xb9, 0xbd, 0x5a, 0xa9, 0x91, + 0x39, 0xe6, 0x74, 0x78, 0x72, 0x02, 0x2d, 0x71, 0x0f, 0x57, 0x99, 0x84, 0x0e, 0x81, 0x9b, 0xd6, + 0x9e, 0xa0, 0x1a, 0x09, 0x60, 0x1d, 0xf3, 0x51, 0xb7, 0x50, 0x34, 0x3c, 0x6c, 0xdf, 0x60, 0x31, + 0x3a, 0x06, 0x63, 0x68, 0xa6, 0xf6, 0x17, 0xc1, 0xed, 0x65, 0x85, 0x4e, 0x47, 0xd9, 0xb0, 0x69, + 0x8c, 0x61, 0xaf, 0x69, 0xaa, 0xbc, 0x47, 0xa0, 0x25, 0x51, 0xb9, 0x97, 0x32, 0xb9, 0xe2, 0xbc, + 0xf1, 0x14, 0x90, 0x4b, 0x7b, 0xa3, 0xc1, 0xba, 0xff, 0x59, 0x74, 0x1d, 0xd1, 0x3a, 0x10, 0x1f, + 0x14, 0xaa, 0x09, 0xc1, 0x47, 0x41, 0x1c, 0x2e, 0x19, 0x8b, 0x8a, 0xa9, 0x31, 0xea, 0xe0, 0x7f, + 0xd5, 0xc0, 0x1a, 0xad, 0x6c, 0x95, 0xa1, 0xd1, 0xe1, 0xb2, 0x02, 0x9b, 0x4b, 0xef, 0x7f, 0x2b, + 0x47, 0xb0, 0x67, 0x96, 0x6b, 0x2b, 0xa1, 0xec, 0x71, 0x09, 0x27, 0x67, 0x04, 0x35, 0x4a, 0x81, + 0xc7, 0xa2, 0x06, 0x4c, 0xde, 0xec, 0x2f, 0x93, 0x6c, 0x72, 0x54, 0xfa, 0x32, 0x19, 0xcf, 0x3b, + 0x2c, 0x71, 0x3e, 0xdf, 0xb4, 0x54, 0xf7, 0xd4, 0x45, 0x22, 0x86, 0xd7, 0x41, 0xab, 0x2c, 0x0f, + 0x5f, 0xb0, 0xe0, 0x90, 0x5c, 0x78, 0x56, 0x91, 0x34, 0x36, 0x3e, 0x7c, 0x60, 0xdd, 0x7e, 0x67, + 0x21, 0xb2, 0x4e, 0x61, 0x91, 0xd7, 0xeb, 0xa7, 0x62, 0xb6, 0x47, 0x4a, 0xd8, 0x05, 0x7e, 0xf2, + 0x96, 0x71, 0x55, 0x1c, 0xd7, 0xfa, 0xe1, 0x66, 0x31, 0x6c, 0x37, 0x32, 0x49, 0xe7, 0x46, 0xba, + 0x5b, 0x32, 0x6f, 0xdd, 0xdb, 0x11, 0x02, 0x43, 0xa2, 0x6f, 0x0d, 0x5f, 0xc0, 0x23, 0xa2, 0x15, + 0xa0, 0x8b, 0x76, 0x41, 0x2b, 0x9b, 0xf9, 0xe8, 0xb6, 0xdd, 0x07, 0xe1, 0x23, 0x68, 0x57, 0x4a, + 0xfe, 0x47, 0xbe, 0x19, 0x4a, 0x31, 0xaf, 0x74, 0xaf, 0xca, 0x40, 0x4c, 0xf0, 0x1c, 0xbc, 0xc1, + 0x9d, 0x0a, 0xf9, 0x4d, 0x0a, 0x2a, 0xad, 0xec, 0x0a, 0x3e, 0x45, 0xfd, 0xa1, 0xe9, 0xa5, 0x59, + 0x6e, 0x47, 0x9d, 0xe1, 0xc8, 0xdf, 0x21, 0x92, 0xb9, 0xeb, 0x24, 0xe0, 0x14, 0x00, 0x51, 0x42, + 0x24, 0x2f, 0x37, 0xf7, 0x0c, 0x6f, 0xda, 0x4d, 0xa0, 0x1b, 0x84, 0x97, 0x10, 0x2f, 0xd7, 0xe4, + 0x49, 0x3d, 0x2f, 0x63, 0x24, 0x2b, 0xb5, 0x1f, 0x63, 0xad, 0xf4, 0x0a, 0x61, 0x01, 0x45, 0x55, + 0xfa, 0x61, 0xd5, 0x15, 0x3e, 0x93, 0xf8, 0xe1, 0x8e, 0xdd, 0x0e, 0x4f, 0x62, 0xcb, 0xe4, 0xf9, + 0xdb, 0x59, 0x62, 0xcf, 0x96, 0x6c, 0xbb, 0x16, 0xf0, 0xb5, 0xab, 0x47, 0xf0, 0x62, 0xbf, 0x66, + 0x97, 0xd0, 0x97, 0xf7, 0xbf, 0xbd, 0xfc, 0x6a, 0x06, 0xac, 0x43, 0x33, 0x3d, 0x19, 0x3a, 0x70, + 0xec, 0xf3, 0x7d, 0x5d, 0xd4, 0x29, 0x93, 0x58, 0xb4, 0xf1, 0x84, 0xb2, 0xa3, 0x56, 0xb1, 0x57, + 0x93, 0x75, 0xa0, 0x68, 0xf5, 0x74, 0xed, 0xab, 0xbc, 0x30, 0xaf, 0x8e, 0x81, 0x7c, 0x11, 0x00, + 0x07, 0xde, 0xa7, 0xc1, 0x2d, 0xcd, 0x4e, 0xaf, 0xf1, 0x1e, 0x8a, 0xec, 0x5f, 0x96, 0x06, 0x04, + 0x80, 0xc3, 0x49, 0x54, 0x60, 0x96, 0xc6, 0xda, 0xac, 0x82, 0xe5, 0xa6, 0x8d, 0x1a, 0x89, 0x15, + 0x70, 0xcc, 0xd2, 0x3b, 0xa3, 0x58, 0x54, 0xa1, 0x92, 0xeb, 0x27, 0x0f, 0xcb, 0xc1, 0x45, 0x08, + 0x9c, 0xd7, 0x71, 0x27, 0xe2, 0x0e, 0x01, 0x3e, 0xff, 0xd3, 0xb4, 0x20, 0x30, 0xdb, 0x1e, 0x59, + 0x95, 0xc5, 0x28, 0x3b, 0xe5, 0x30, 0x0e, 0xb4, 0x63, 0xc7, 0xdc, 0x33, 0x83, 0x4e, 0x06, 0x0c, + 0x4b, 0x13, 0xce, 0xfc, 0x5e, 0xeb, 0x72, 0xc7, 0x9b, 0x59, 0xbe, 0xb7, 0x24, 0x16, 0x01, 0x74, + 0xa5, 0xe2, 0x76, 0xb8, 0x88, 0x62, 0x4d, 0x27, 0x95, 0xec, 0x88, 0x2a, 0x62, 0xaf, 0xeb, 0x58, + 0x18, 0xb9, 0x6b, 0x17, 0x2c, 0x85, 0x77, 0x67, 0x09, 0x41, 0x25, 0x5f, 0x8c, 0xb9, 0xfe, 0xa1, + 0x5e, 0x2f, 0x4b, 0x0c, 0x75, 0x2f, 0xfa, 0x5c, 0x5b, 0x8a, 0xf3, 0x2d, 0x3d, 0xfa, 0x2b, 0xf2, + 0xf3, 0x9b, 0x8b, 0xc4, 0x3b, 0x67, 0xa0, 0x99, 0x56, 0x4d, 0x38, 0xac, 0xcb, 0x07, 0x0c, 0x23, + 0x6f, 0xd6, 0xe1, 0x59, 0xbb, 0x0a, 0x15, 0x47, 0x73, 0xe6, 0x1c, 0x42, 0x59, 0x98, 0xae, 0x1b, + 0xc3, 0xbf, 0x70, 0x7e, 0x96, 0x82, 0xab, 0x8b, 0x76, 0x58, 0x65, 0xe9, 0x60, 0x3b, 0x56, 0x03, + 0x90, 0xa3, 0x62, 0x2c, 0x21, 0xaf, 0x7e, 0xaa, 0x24, 0xd4, 0x90, 0x7a, 0x3e, 0x8e, 0x17, 0x76, + 0x3d, 0x7e, 0xcc, 0x9d, 0x57, 0x1e, 0xa3, 0x93, 0x4e, 0xe7, 0x48, 0xb6, 0x23, 0x3e, 0xf2, 0x97, + 0xa5, 0x51, 0xeb, 0x6b, 0x53, 0x09, 0x3b, 0xf2, 0xfc, 0x5f, 0x8a, 0x38, 0xbb, 0xb7, 0x90, 0x25, + 0xc4, 0x08, 0x36, 0x0e, 0x8b, 0xb4, 0xab, 0x17, 0xfe, 0x58, 0xf1, 0xf9, 0x69, 0x0b, 0x09, 0x05, + 0xb9, 0xc1, 0xa8, 0x04, 0xbd, 0x2e, 0x89, 0x88, 0x87, 0xfe, 0x64, 0x4f, 0xd2, 0x27, 0xee, 0x8d, + 0xd4, 0xba, 0xa8, 0x6f, 0x77, 0x61, 0x15, 0xd3, 0x8b, 0x25, 0x8f, 0x7c, 0x1e, 0x5f, 0x88, 0x87, + 0x35, 0x2c, 0xe3, 0xc4, 0xea, 0x7e, 0xab, 0x0c, 0x49, 0xe9, 0xa3, 0x30, 0x91, 0x8c, 0xd5, 0x74, + 0xee, 0x81, 0x91, 0x8d, 0x24, 0xac, 0x98, 0x69, 0x7f, 0x77, 0xe5, 0x42, 0xf7, 0xc9, 0xd2, 0x41, + 0x6d, 0x95, 0xb2, 0x5d, 0x57, 0xe1, 0x38, 0xa3, 0xb4, 0xb6, 0x56, 0x78, 0x3c, 0xd8, 0xd6, 0xf8, + 0x13, 0xa9, 0xd9, 0x36, 0x6b, 0x89, 0xe3, 0xd6, 0xce, 0x56, 0xec, 0x63, 0x98, 0x7f, 0x7e, 0xc7, + 0x9b, 0x92, 0x97, 0xc2, 0xf5, 0xd8, 0x05, 0xbd, 0x7a, 0xa6, 0x63, 0x66, 0xec, 0x0a, 0x75, 0x91, + 0x18, 0x08, 0xa4, 0x63, 0xbd, 0x03, 0x9c, 0x05, 0xce, 0x94, 0x5a, 0x8d, 0x07, 0xb8, 0x0e, 0x05, + 0xda, 0x7d, 0xbf, 0x23, 0xca, 0x33, 0x96, 0xaa, 0x96, 0x48, 0xcb, 0x9c, 0x3d, 0x0b, 0xc1, 0x66, + 0xbe, 0x06, 0xe3, 0xfb, 0x64, 0x4d, 0x1a, 0xd0, 0x22, 0x60, 0xb6, 0x2c, 0x34, 0x3a, 0x37, 0x8c, + 0x2a, 0x90, 0x7f, 0xc5, 0xa9, 0x44, 0x10, 0xbf, 0x93, 0xbd, 0x9b, 0xda, 0xfd, 0x9a, 0x92, 0x7f, + 0x6a, 0x49, 0x72, 0x37, 0xc5, 0xa8, 0x54, 0x49, 0x17, 0x50, 0x60, 0x67, 0x83, 0x98, 0x13, 0x28, + 0x36, 0xf2, 0x5a, 0xb9, 0xfb, 0x31, 0x12, 0x53, 0x93, 0x62, 0x25, 0xdc, 0xca, 0xc5, 0x55, 0x21, + 0xc5, 0xd7, 0x47, 0x9c, 0xd2, 0x37, 0x0b, 0xe5, 0xd6, 0x9f, 0x99, 0xe7, 0x38, 0x57, 0xbd, 0x5f, + 0x03, 0xe8, 0x2a, 0xf4, 0x41, 0xe5, 0x9f, 0xf8, 0x3e, 0xbc, 0x5e, 0x4d, 0x3d, 0xa3, 0x42, 0x03, + 0xd2, 0xab, 0x33, 0xdd, 0xfd, 0xaa, 0xa0, 0xa9, 0x0b, 0xd5, 0x1a, 0x06, 0x68, 0x8d, 0xee, 0x27, + 0x86, 0x57, 0xe7, 0x75, 0xf2, 0x50, 0x00, 0x91, 0x03, 0xa1, 0xb2, 0xb8, 0xb8, 0xe7, 0x70, 0xcf, + 0x50, 0x57, 0xc8, 0x7a, 0x0b, 0x9d, 0x39, 0x0b, 0x50, 0x9f, 0xf7, 0x49, 0x1f, 0xd0, 0xb2, 0x2c, + 0xde, 0x64, 0x4e, 0x28, 0xdb, 0x04, 0x6b, 0xaf, 0x73, 0x71, 0x31, 0xd7, 0x73, 0x6e, 0x85, 0x5f, + 0xa8, 0xbd, 0xc8, 0x39, 0x80, 0x51, 0x94, 0x4e, 0xec, 0x34, 0xa2, 0xe1, 0x1d, 0xfb, 0xf5, 0xb4, + 0x70, 0x30, 0xe7, 0x21, 0xee, 0x02, 0xb8, 0x0a, 0x20, 0x93, 0x2a, 0x0f, 0x3a, 0xef, 0x33, 0xeb, + 0xa6, 0x4f, 0x6d, 0xa9, 0x5b, 0x00, 0x61, 0x38, 0x22, 0x43, 0xd9, 0x1b, 0x12, 0x3e, 0x18, 0x61, + 0xa2, 0x5c, 0x19, 0xde, 0xb1, 0x86, 0x04, 0xe5, 0x0f, 0x89, 0x87, 0xe4, 0xf5, 0xb4, 0x33, 0xd6, + 0xc7, 0xd9, 0x58, 0x45, 0x11, 0x0d, 0xc4, 0xee, 0x7a, 0xe8, 0x0d, 0xff, 0x7b, 0xdd, 0x30, 0x5a, + 0x75, 0xab, 0x6b, 0xa6, 0xb4, 0x2f, 0xcb, 0x2e, 0x97, 0x46, 0x0f, 0x52, 0x82, 0x8f, 0xe1, 0x30, + 0xac, 0xdc, 0x90, 0xf7, 0xc4, 0x4b, 0x03, 0xf4, 0x2f, 0xac, 0x17, 0xad, 0xcf, 0xf7, 0xa5, 0x7b, + 0x79, 0x65, 0xcf, 0x59, 0x7e, 0xc0, 0x39, 0xf4, 0x61, 0x70, 0xb4, 0xe7, 0xb8, 0xbd, 0x4b, 0x7f, + 0x53, 0x9f, 0x34, 0x7b, 0xc9, 0x36, 0x3e, 0xe9, 0xb1, 0xe6, 0xd7, 0xe1, 0xee, 0xb7, 0xba, 0xfe, + 0x07, 0xae, 0xfd, 0x82, 0xbe, 0x6c, 0xbb, 0x69, 0x1d, 0x65, 0xc2, 0x7b, 0x7a, 0x43, 0x56, 0x0f, + 0x51, 0x1f, 0x1e, 0x5c, 0x1d, 0x09, 0x1c, 0x53, 0xfe, 0xda, 0x70, 0xb8, 0x1c, 0x48, 0x79, 0xe7, + 0x2f, 0x84, 0xb7, 0x28, 0x6e, 0xcc, 0xec, 0xc4, 0xc6, 0xd1, 0xeb, 0xc1, 0x39, 0x18, 0x59, 0x97, + 0x80, 0x0f, 0xab, 0xab, 0x71, 0x5a, 0x25, 0xd6, 0xda, 0xcb, 0x12, 0xc8, 0xf3, 0xd7, 0xe9, 0xe8, + 0xc4, 0x3a, 0x63, 0x82, 0xf2, 0x9f, 0xee, 0x22, 0x2a, 0x6e, 0xe2, 0xcd, 0x2e, 0xaa, 0x85, 0x7d, + 0xb0, 0x69, 0xde, 0x5e, 0xd4, 0x4e, 0xc1, 0xc4, 0xb9, 0xfd, 0xb0, 0x35, 0x06, 0xcd, 0xf4, 0x8b, + 0x00, 0xc1, 0xdd, 0x30, 0x8b, 0x0c, 0xed, 0x9d, 0x80, 0xb5, 0xde, 0x46, 0x30, 0x82, 0x15, 0xa7, + 0x08, 0xc8, 0x85, 0x39, 0x1f, 0xd8, 0xc0, 0xc3, 0x6c, 0x4c, 0xca, 0xaa, 0xd8, 0xc5, 0xce, 0x36, + 0x33, 0x90, 0x04, 0xae, 0x14, 0xd3, 0xc7, 0xaa, 0xb5, 0x5e, 0x0f, 0x92, 0x34, 0x75, 0x35, 0x87, + 0x9c, 0xc1, 0x68, 0x04, 0x77, 0xb0, 0x35, 0xc0, 0x51, 0x7e, 0x8d, 0x87, 0x8d, 0x03, 0xdb, 0xb4, + 0xa8, 0x9f, 0x41, 0xd7, 0x4f, 0xe4, 0x9c, 0x75, 0x2b, 0x5f, 0x91, 0x60, 0x3f, 0xcc, 0xc7, 0x72, + 0x94, 0xf6, 0x1b, 0x2c, 0x23, 0x29, 0x5a, 0xd1, 0x77, 0x8b, 0x3c, 0x60, 0xbe, 0xa8, 0xff, 0xf6, + 0x9d, 0xd9, 0xe5, 0x41, 0x34, 0x03, 0x3b, 0x5a, 0x05, 0xc1, 0xc6, 0xf4, 0x1f, 0xac, 0x39, 0xd6, + 0x77, 0xaf, 0xd8, 0x8f, 0x73, 0xb6, 0x7c, 0x04, 0xd9, 0xa9, 0xb9, 0xb3, 0xd2, 0x47, 0x7d, 0xbb, + 0xcf, 0x19, 0xa8, 0xbd, 0xe7, 0xd3, 0x6d, 0xf4, 0xdc, 0x76, 0x23, 0xff, 0x2d, 0x3b, 0xdf, 0xbe, + 0xc4, 0x0d, 0x06, 0x8e, 0x81, 0xd0, 0x80, 0xad, 0x7d, 0x3e, 0xf8, 0x2f, 0x54, 0x08, 0x7a, 0xe2, + 0x3d, 0x3f, 0x0e, 0xb2, 0x2a, 0xfb, 0xc4, 0xd0, 0x1c, 0x4d, 0x05, 0x01, 0xeb, 0xe4, 0x47, 0xc2, + 0xa5, 0xf9, 0x2b, 0xa7, 0x93, 0xc5, 0x45, 0x8d, 0x44, 0x8e, 0x0e, 0x0b, 0xbe, 0x0f, 0xbd, 0xe3, + 0xeb, 0x84, 0x25, 0x4a, 0xf7, 0x3b, 0x09, 0xc1, 0x35, 0xb8, 0xfb, 0xb9, 0xd7, 0xc3, 0x7e, 0x5c, + 0x92, 0x00, 0x57, 0x93, 0xda, 0x95, 0xcd, 0x8b, 0x7f, 0x55, 0x8e, 0x6d, 0xd0, 0xfc, 0x63, 0x2a, + 0x08, 0x59, 0xc1, 0xbb, 0xaa, 0xf9, 0x5f, 0x4a, 0xa3, 0x1b, 0x41, 0x29, 0x98, 0xaf, 0x4f, 0x41, + 0x91, 0x13, 0x9a, 0x5d, 0x7d, 0x0c, 0xe9, 0xdf, 0xa4, 0xec, 0x8d, 0x58, 0x33, 0x41, 0xef, 0xd6, + 0x86, 0x27, 0x1e, 0xac, 0x14, 0xdc, 0xe3, 0x48, 0x42, 0xa7, 0x8a, 0xfe, 0x76, 0x5f, 0xb5, 0x5e, + 0xf0, 0x8f, 0x7a, 0x1d, 0x8d, 0x39, 0x72, 0x8c, 0x19, 0x10, 0xa7, 0x7c, 0xd3, 0x3d, 0x1f, 0xd7, + 0xc1, 0xde, 0x11, 0x6c, 0x02, 0xdb, 0x27, 0x84, 0xe0, 0xd4, 0xe9, 0x1b, 0x69, 0x73, 0x4c, 0x01, + 0xa8, 0x5f, 0xed, 0x09, 0xfc, 0x7c, 0x5e, 0x1a, 0xf7, 0x4e, 0xa8, 0xbc, 0x3c, 0x63, 0x83, 0x98, + 0xa7, 0x78, 0x61, 0x2f, 0x17, 0x6b, 0xf5, 0x4b, 0xe5, 0x2c, 0x1d, 0x7c, 0x9c, 0x76, 0x40, 0x39, + 0x7b, 0x31, 0xd3, 0xfe, 0xe1, 0x18, 0x5b, 0xaa, 0xf6, 0x9d, 0x8a, 0x4f, 0x21, 0xbf, 0x9d, 0x27, + 0x6b, 0x10, 0x27, 0x55, 0x6a, 0xd6, 0x88, 0xf4, 0x26, 0xee, 0xb0, 0xd7, 0x03, 0x24, 0x08, 0xb4, + 0x39, 0x0d, 0xd0, 0xd0, 0x1e, 0xef, 0x35, 0xaa, 0x5a, 0xd8, 0x8f, 0xfb, 0x1b, 0x18, 0x65, 0x45, + 0xcb, 0x1b, 0x51, 0x10, 0x27, 0x50, 0xc4, 0x0c, 0x29, 0xd2, 0xac, 0xbb, 0xc9, 0xbe, 0x4e, 0x63, + 0xbe, 0x6b, 0x49, 0xea, 0xb3, 0x87, 0x4a, 0x66, 0x71, 0xe1, 0x24, 0xef, 0x47, 0x5c, 0x2d, 0x4c, + 0x8f, 0x7c, 0xf0, 0xe2, 0x59, 0x78, 0x6b, 0xe3, 0x9c, 0x6b, 0xd8, 0x19, 0x74, 0xe6, 0x12, 0xa3, + 0x65, 0xda, 0x85, 0x13, 0xd7, 0x62, 0x70, 0x51, 0x74, 0x53, 0x18, 0x30, 0xcf, 0xa0, 0xb7, 0x60, + 0x98, 0xb5, 0x98, 0x2d, 0xc9, 0x55, 0x83, 0x6b, 0xe9, 0x2a, 0x4a, 0x50, 0x9c, 0xdc, 0xde, 0xf6, + 0x3e, 0x68, 0x64, 0x6b, 0xc6, 0x45, 0x59, 0x69, 0x0a, 0x8b, 0x47, 0x33, 0x64, 0x32, 0xc8, 0x8a, + 0x4c, 0x9e, 0xff, 0xa5, 0x67, 0x77, 0x0a, 0x78, 0xd8, 0x09, 0x7c, 0x6c, 0x97, 0xe2, 0x37, 0x01, + 0xdf, 0xb9, 0x9d, 0x9d, 0x70, 0x2e, 0x0b, 0x0b, 0x5b, 0xad, 0x92, 0x38, 0x29, 0x12, 0xe9, 0x42, + 0x7b, 0x7c, 0x34, 0x7e, 0x19, 0x9b, 0xbb, 0x97, 0x6c, 0x6e, 0xd3, 0xac, 0x27, 0x2a, 0xa6, 0xda, + 0x14, 0xab, 0x44, 0xf1, 0xa7, 0x42, 0x3d, 0xaa, 0xc0, 0x93, 0xae, 0x43, 0xdf, 0x9f, 0xea, 0x92, + 0xcc, 0x36, 0xb0, 0x01, 0x2f, 0xc4, 0xaa, 0x63, 0x68, 0x7a, 0x8e, 0xb1, 0x4f, 0x15, 0x43, 0x01, + 0x6f, 0x55, 0xa9, 0x2e, 0x35, 0x92, 0xbf, 0xf5, 0x3c, 0xe4, 0x22, 0xa3, 0x87, 0x72, 0x05, 0x7a, + 0xc3, 0xcf, 0x31, 0xfc, 0x16, 0x39, 0x10, 0x02, 0x41, 0xb6, 0xc1, 0xbb, 0x49, 0x0f, 0x22, 0x93, + 0x4a, 0xb2, 0x5c, 0x53, 0x33, 0x11, 0xa9, 0xd6, 0xcf, 0x21, 0x4d, 0x30, 0x8c, 0xf6, 0xd0, 0x37, + 0xd6, 0xbf, 0x53, 0x25, 0x64, 0x29, 0xa9, 0x77, 0x3c, 0x27, 0x05, 0x2d, 0x78, 0x02, 0xa2, 0xba, + 0x7c, 0x92, 0xd6, 0xf3, 0x0e, 0x56, 0x42, 0x0f, 0xa5, 0xc6, 0x15, 0x77, 0xde, 0x0f, 0xd2, 0x87, + 0x32, 0x31, 0xec, 0x52, 0x85, 0xec, 0x88, 0x5c, 0x51, 0x9b, 0x4c, 0xef, 0xbe, 0x75, 0x96, 0xa4, + 0x82, 0x08, 0x95, 0xef, 0x4a, 0x07, 0x6d, 0x5c, 0xb6, 0x99, 0xaa, 0xd1, 0x05, 0x61, 0x91, 0x91, + 0x8f, 0x6b, 0x14, 0xa6, 0xb7, 0xf9, 0x23, 0xf2, 0x3e, 0x32, 0x8d, 0xbe, 0x72, 0x96, 0x5b, 0xf8, + 0x97, 0x12, 0x1d, 0x77, 0x07, 0x38, 0x84, 0x95, 0xc2, 0x3d, 0x87, 0x3c, 0x7f, 0x57, 0x32, 0x68, + 0xb4, 0x94, 0x86, 0xa5, 0xb1, 0xae, 0x6c, 0x5b, 0x92, 0x1c, 0xdb, 0x15, 0xfb, 0xc9, 0x39, 0x4a, + 0x4c, 0xcf, 0xdf, 0x7f, 0x7b, 0x71, 0x9a, 0xd5, 0x8b, 0x38, 0x29, 0x69, 0xd0, 0xe0, 0x30, 0x4d, + 0xd2, 0x0c, 0xb6, 0x2c, 0x58, 0x1d, 0x9b, 0x02, 0xdc, 0x1a, 0xb6, 0x1e, 0x17, 0xd1, 0xb3, 0x61, + 0xb5, 0x19, 0xcb, 0xb7, 0xd7, 0x3f, 0x7c, 0xca, 0xce, 0x08, 0xe0, 0x76, 0x2a, 0x05, 0xb5, 0xfe, + 0x40, 0x29, 0x86, 0x79, 0x0c, 0x0a, 0xc1, 0x71, 0x0f, 0x7e, 0x33, 0x81, 0x25, 0x2a, 0x5b, 0xf1, + 0x70, 0xf5, 0x7c, 0xae, 0xea, 0xc9, 0x38, 0x91, 0xac, 0xb1, 0xae, 0xe9, 0xb8, 0xeb, 0x30, 0x8d, + 0xe0, 0x5f, 0x58, 0x98, 0x38, 0xbd, 0xc7, 0xa0, 0x6f, 0xcf, 0xf0, 0xfa, 0x64, 0xd5, 0x30, 0x73, + 0xd8, 0xfc, 0xb6, 0xc2, 0x74, 0x3d, 0xbd, 0xfa, 0xa2, 0x64, 0x3f, 0x6a, 0x01, 0xa6, 0x4c, 0x73, + 0xb6, 0x43, 0x20, 0xd3, 0x88, 0x80, 0x4c, 0x9a, 0x32, 0xb6, 0x4d, 0xf4, 0xf3, 0xfd, 0x10, 0xa8, + 0x10, 0x54, 0x80, 0xd0, 0xfc, 0x43, 0xfe, 0x15, 0xb6, 0x66, 0x79, 0xad, 0xb5, 0x13, 0x1a, 0xc0, + 0xb1, 0x86, 0xb0, 0x83, 0xe3, 0xdd, 0xee, 0x18, 0x78, 0xe1, 0x45, 0x7c, 0x9d, 0x8b, 0xdc, 0xbb, + 0x35, 0xde, 0x27, 0x05, 0x5f, 0xc8, 0x2f, 0x51, 0xe6, 0x1b, 0xf4, 0x7c, 0x10, 0x5e, 0x85, 0xe9, + 0xfc, 0x05, 0x48, 0x72, 0x04, 0xdc, 0x3a, 0xd9, 0x11, 0x88, 0x71, 0xa2, 0xda, 0x1e, 0xb2, 0xb9, + 0xc9, 0x72, 0xe0, 0xf7, 0xfa, 0x20, 0x6a, 0x53, 0xd6, 0xd3, 0xab, 0xfa, 0x86, 0x5e, 0x49, 0x6f, + 0x20, 0x1b, 0x47, 0xe0, 0xa4, 0x5f, 0x4b, 0x90, 0x11, 0x7c, 0xd2, 0xc2, 0x92, 0xed, 0xaa, 0xb0, + 0x14, 0x0b, 0x5b, 0x8d, 0x36, 0xb1, 0x8a, 0x1c, 0xe8, 0x08, 0xac, 0x71, 0xa1, 0xb3, 0x64, 0x4d, + 0xf2, 0x4c, 0x29, 0x23, 0x0c, 0x0c, 0x80, 0xae, 0xd2, 0xc3, 0x23, 0x23, 0xae, 0x70, 0xc7, 0xb8, + 0xba, 0x04, 0x85, 0xc2, 0xca, 0x81, 0xc4, 0x13, 0x14, 0xc5, 0xaa, 0x5e, 0xfa, 0x94, 0x87, 0x08, + 0xf8, 0xce, 0x1a, 0x0b, 0x67, 0x74, 0x91, 0xe0, 0xec, 0x62, 0x84, 0xf3, 0x1f, 0xa9, 0xae, 0x0d, + 0x22, 0x97, 0x43, 0x5d, 0x71, 0xf2, 0xa4, 0xbd, 0x0f, 0xc6, 0x21, 0xef, 0x1d, 0x50, 0x06, 0xe4, + 0x60, 0x08, 0x1b, 0x5b, 0x0c, 0xf8, 0xd7, 0x4b, 0x0c, 0x71, 0x89, 0x66, 0xec, 0xcd, 0x9e, 0x7f, + 0x3b, 0x6d, 0x51, 0x85, 0x18, 0xe0, 0x5e, 0xcf, 0x99, 0xf5, 0xa8, 0xd4, 0x50, 0x77, 0x0b, 0x52, + 0xb8, 0xde, 0xc7, 0xfa, 0x8e, 0x7c, 0x94, 0x73, 0x44, 0x11, 0x1c, 0xb2, 0x48, 0x89, 0xe8, 0xc3, + 0xa7, 0xd7, 0xdc, 0x46, 0x99, 0x7e, 0xb3, 0x1a, 0x7f, 0x76, 0x76, 0x07, 0x56, 0x9f, 0x92, 0xad, + 0xe0, 0x34, 0x44, 0xdf, 0xf9, 0x0a, 0xc4, 0xbb, 0xf6, 0x50, 0x15, 0x5e, 0x91, 0x54, 0x0a, 0x84, + 0x13, 0xca, 0x72, 0xf8, 0x68, 0x97, 0xd9, 0x94, 0x27, 0x43, 0x15, 0xdc, 0x0f, 0x85, 0x6f, 0x1f, + 0x5b, 0x15, 0x84, 0x98, 0xed, 0x99, 0x4e, 0x51, 0xa9, 0x2f, 0xaf, 0x8e, 0xf4, 0xdf, 0x23, 0x1c, + 0xd9, 0x6e, 0x4a, 0x1d, 0xe5, 0x77, 0xd0, 0x69, 0xac, 0x6f, 0x50, 0x7e, 0x5b, 0xd5, 0xa6, 0x68, + 0x32, 0x53, 0x61, 0x25, 0x85, 0x40, 0x28, 0xfa, 0x36, 0x7f, 0x79, 0x1b, 0xa3, 0x1f, 0x95, 0x97, + 0xcd, 0x02, 0xe8, 0x5e, 0x27, 0xe0, 0xe9, 0x27, 0xcd, 0x2c, 0x4d, 0xac, 0x70, 0x23, 0xfc, 0x55, + 0x6a, 0xf8, 0x5c, 0xf5, 0x2f, 0x61, 0xd0, 0xb2, 0x31, 0xa8, 0xa4, 0xbd, 0xcc, 0x38, 0xe2, 0x20, + 0x26, 0x09, 0xf4, 0x1e, 0xec, 0x11, 0x63, 0x41, 0xaa, 0x34, 0xc3, 0xb6, 0xe2, 0x7d, 0x2e, 0x9f, + 0xba, 0xdc, 0x41, 0x2f, 0x06, 0x93, 0xb7, 0xfd, 0xc1, 0x57, 0x5a, 0x3e, 0x79, 0x10, 0xe4, 0x12, + 0xbd, 0x28, 0xa8, 0x95, 0x28, 0x59, 0x1c, 0x87, 0x41, 0x2f, 0xfe, 0x67, 0x2e, 0x8a, 0xcf, 0x16, + 0xc5, 0x7b, 0x59, 0xfc, 0xd7, 0x1b, 0xd8, 0x95, 0x1a, 0x56, 0x95, 0x23, 0xa8, 0xd6, 0x53, 0xce, + 0x8d, 0xc4, 0xfd, 0xfe, 0xfc, 0x86, 0x3b, 0x5c, 0x9f, 0x8f, 0x93, 0x98, 0xfe, 0x44, 0x2d, 0x9e, + 0xcd, 0x7b, 0xa9, 0xde, 0x26, 0x6c, 0x27, 0xbc, 0x6d, 0xd3, 0x35, 0xe3, 0xd1, 0x78, 0x78, 0x7d, + 0x92, 0x2a, 0xdb, 0xd0, 0x45, 0xd6, 0x52, 0x2b, 0xae, 0x4a, 0xa3, 0x98, 0x00, 0xa0, 0xc2, 0xa2, + 0x2b, 0xa1, 0xf0, 0x06, 0x1b, 0x8d, 0x84, 0x37, 0x03, 0x54, 0x64, 0x3d, 0x7a, 0xce, 0x8e, 0x6c, + 0x02, 0x78, 0xd9, 0xe3, 0xbe, 0x99, 0x75, 0xfd, 0x3f, 0xc7, 0x41, 0x10, 0x33, 0x75, 0x95, 0xbc, + 0x8c, 0xc8, 0x26, 0x28, 0x01, 0xae, 0x99, 0x38, 0x94, 0x54, 0x39, 0xf6, 0x15, 0x0f, 0x25, 0x89, + 0x4a, 0xa0, 0xae, 0x5c, 0xce, 0x27, 0x3e, 0xf2, 0xda, 0x98, 0x98, 0x0b, 0x1d, 0xa3, 0xda, 0x07, + 0xb3, 0xb0, 0x59, 0x45, 0x9c, 0x74, 0xf5, 0x48, 0xc0, 0xc2, 0x49, 0x87, 0x73, 0x2d, 0xf3, 0x05, + 0xb0, 0xcb, 0x5a, 0x71, 0x4a, 0xe0, 0xf7, 0x7a, 0xb2, 0xd7, 0x06, 0xa4, 0x2a, 0xc4, 0xa5, 0x7d, + 0x64, 0xdf, 0x35, 0xc5, 0x6c, 0x89, 0x28, 0xbf, 0xde, 0x45, 0x0b, 0x62, 0xe1, 0xbc, 0xb8, 0x7a, + 0x16, 0x24, 0xed, 0x4a, 0x86, 0x9a, 0xdc, 0x1e, 0x82, 0xdd, 0xc9, 0xb9, 0xd4, 0x9d, 0xcc, 0x54, + 0x00, 0x89, 0x5e, 0xc4, 0x28, 0x43, 0x6c, 0xef, 0x7c, 0x01, 0x0e, 0x32, 0xc6, 0x71, 0x92, 0xd6, + 0xe8, 0x85, 0x0e, 0x0a, 0xf6, 0xf7, 0xcf, 0x79, 0xe2, 0xc3, 0x2a, 0x16, 0x54, 0xb9, 0xa9, 0xe5, + 0xea, 0xea, 0xde, 0xd5, 0xe4, 0x51, 0x93, 0x1a, 0x0a, 0x0e, 0x0a, 0x53, 0x19, 0x31, 0x99, 0x57, + 0xfa, 0x8d, 0xa3, 0x56, 0x5a, 0xf1, 0xec, 0xcd, 0x0b, 0xae, 0xf9, 0x47, 0x1f, 0xff, 0x78, 0x86, + 0x39, 0x4d, 0xf4, 0x05, 0x1f, 0xc9, 0xf0, 0x2c, 0xc6, 0xdc, 0x10, 0xa2, 0x70, 0x51, 0x40, 0x31, + 0x4d, 0xa6, 0x9d, 0x55, 0xc5, 0x0b, 0x06, 0x23, 0x1e, 0x56, 0xd2, 0x90, 0x1d, 0xa9, 0xab, 0xbe, + 0x89, 0x52, 0x97, 0x6c, 0xb5, 0x5f, 0x24, 0xab, 0x84, 0xdf, 0x10, 0xff, 0xea, 0x70, 0x93, 0xb3, + 0xd5, 0x76, 0xc9, 0x7a, 0xcc, 0x63, 0x96, 0x00, 0xf7, 0x80, 0x0c, 0xdf, 0xe8, 0x82, 0x78, 0x25, + 0xef, 0xbb, 0xd5, 0xdb, 0xb2, 0x5f, 0xd5, 0xba, 0xfe, 0x65, 0xa4, 0x1c, 0x0c, 0x0c, 0x47, 0x1a, + 0x9c, 0x29, 0xbe, 0x60, 0xec, 0x04, 0xd7, 0x23, 0x84, 0x37, 0x1c, 0x72, 0xf9, 0x47, 0xe3, 0x7b, + 0x34, 0x8d, 0xb4, 0xb9, 0xeb, 0x29, 0x5f, 0x9f, 0x67, 0x13, 0x44, 0x88, 0x5d, 0x91, 0x66, 0x5a, + 0x53, 0x8b, 0x08, 0x6f, 0x21, 0xe3, 0xf2, 0x2c, 0xb4, 0x2c, 0xb8, 0x93, 0x18, 0x6a, 0x4d, 0xf4, + 0x71, 0x1a, 0x4b, 0xf1, 0xb4, 0xf8, 0xd2, 0xc9, 0xb8, 0xc5, 0x20, 0xef, 0x12, 0x94, 0x79, 0x17, + 0x21, 0x1c, 0x17, 0x85, 0xe8, 0x93, 0x11, 0x6f, 0xec, 0x7c, 0xcc, 0x71, 0xaa, 0x39, 0xa7, 0x64, + 0xe5, 0xb5, 0xb8, 0xe5, 0x00, 0xb4, 0xd1, 0x1e, 0x48, 0x5f, 0x4b, 0xa5, 0xee, 0x02, 0x51, 0x59, + 0xd4, 0x16, 0xf6, 0xe1, 0x86, 0x9c, 0x44, 0xf3, 0x72, 0xf5, 0xd4, 0xdd, 0xc9, 0xaf, 0x35, 0x58, + 0x89, 0x8e, 0x80, 0xe1, 0xb9, 0x6e, 0xd5, 0xaf, 0xf1, 0x3a, 0x86, 0xb9, 0xb0, 0xaf, 0x44, 0xcc, + 0x22, 0x85, 0xaa, 0x64, 0x98, 0xaf, 0x4e, 0xd6, 0x8c, 0x78, 0x70, 0x2d, 0x9d, 0xc0, 0x63, 0xc7, + 0x32, 0xfa, 0x90, 0xaf, 0xc4, 0x81, 0x98, 0x7f, 0x29, 0x5b, 0xc8, 0xb4, 0x60, 0xaa, 0x1f, 0x65, + 0x43, 0x53, 0xce, 0x17, 0x94, 0x97, 0x2c, 0x7a, 0xea, 0xdf, 0xb0, 0x3c, 0x4a, 0x34, 0x30, 0x42, + 0x6f, 0x35, 0xf2, 0x11, 0x8b, 0x29, 0x7a, 0x7f, 0x4e, 0xd8, 0x23, 0xe4, 0xa0, 0x1c, 0xdb, 0x5a, + 0x7a, 0x44, 0x69, 0xbd, 0x9c, 0xbd, 0x3d, 0x7f, 0x99, 0x2e, 0xea, 0x2f, 0xbc, 0xf3, 0x2e, 0x61, + 0xcf, 0x9b, 0x9c, 0xf9, 0x51, 0x22, 0x90, 0xfd, 0x85, 0x6d, 0x39, 0x37, 0x95, 0x82, 0x2e, 0x05, + 0xe3, 0x3b, 0x17, 0x4d, 0x26, 0x0e, 0xc5, 0xf1, 0x80, 0x09, 0xc1, 0x3b, 0xaa, 0x96, 0x21, 0x1b, + 0x46, 0x2f, 0xcf, 0xab, 0xbe, 0x2d, 0xa2, 0xe7, 0x29, 0x1c, 0xfe, 0x4a, 0xe2, 0xf1, 0x42, 0x0a, + 0x29, 0x0b, 0x37, 0xf8, 0xa0, 0x98, 0x20, 0x46, 0xd6, 0xde, 0xc2, 0x84, 0xc8, 0x29, 0x0f, 0x87, + 0xde, 0xf1, 0xad, 0xff, 0x7b, 0xeb, 0xe5, 0x84, 0x1b, 0x6a, 0x87, 0x91, 0x40, 0x82, 0xf7, 0x61, + 0x32, 0xb0, 0x1d, 0x32, 0xf2, 0x69, 0xeb, 0xcf, 0x80, 0xd0, 0xb4, 0x70, 0xc5, 0x25, 0xff, 0xe0, + 0x43, 0x38, 0xa3, 0x5e, 0x1e, 0x44, 0x1c, 0x01, 0x1a, 0x66, 0x8f, 0xa5, 0x52, 0x8c, 0xb8, 0x4f, + 0x8b, 0x82, 0x4a, 0x19, 0xb7, 0x87, 0x43, 0x12, 0xde, 0x24, 0x2d, 0x52, 0xa3, 0x78, 0xe2, 0x7f, + 0xca, 0x6d, 0xe0, 0x6f, 0x9d, 0x7f, 0x47, 0x9a, 0x1c, 0xe9, 0xe6, 0xbd, 0x3e, 0x13, 0x6c, 0x0b, + 0x2c, 0x0b, 0xce, 0xa1, 0x63, 0x45, 0x16, 0x9d, 0x16, 0x53, 0xbc, 0x33, 0xed, 0xcb, 0xa7, 0x71, + 0xdd, 0x22, 0x67, 0xe4, 0x1c, 0x90, 0x8d, 0xd1, 0xcd, 0xa6, 0xb5, 0xe3, 0xdd, 0xfa, 0x21, 0x33, + 0x59, 0x77, 0x4c, 0xf3, 0xc5, 0xab, 0x3f, 0x9e, 0x3c, 0x19, 0x54, 0xc2, 0xf6, 0x09, 0xd4, 0x76, + 0xcc, 0x0b, 0xc9, 0x00, 0x19, 0xab, 0x07, 0xb8, 0xa1, 0x7e, 0x62, 0x9a, 0x5c, 0x57, 0xbd, 0xc5, + 0xa9, 0xd7, 0x70, 0x5a, 0xa9, 0x77, 0xaa, 0x0a, 0x64, 0xbe, 0xd2, 0x5e, 0x1d, 0xb3, 0xc4, 0x2b, + 0x82, 0xba, 0x28, 0x81, 0x45, 0x08, 0x6d, 0xd3, 0x8e, 0x79, 0x6b, 0xd8, 0xd2, 0x31, 0x61, 0xd2, + 0xbd, 0xcf, 0xe5, 0xc3, 0x45, 0x99, 0x2c, 0x7f, 0x80, 0xb1, 0x39, 0x8b, 0xb0, 0xbb, 0x62, 0x3a, + 0x22, 0xb4, 0x84, 0xb5, 0xbb, 0x99, 0xd8, 0x1c, 0x55, 0x86, 0x53, 0xfc, 0x28, 0xc1, 0x7d, 0x49, + 0x0e, 0xf4, 0x27, 0xff, 0x40, 0x94, 0xe1, 0xef, 0x7e, 0x20, 0x17, 0x30, 0x3b, 0x03, 0x7b, 0xc3, + 0x57, 0xec, 0xf7, 0x53, 0xc5, 0xc2, 0xc8, 0x08, 0xae, 0xc0, 0x30, 0x57, 0x11, 0xd6, 0xd6, 0x5f, + 0xbe, 0x27, 0x93, 0x6c, 0xf1, 0xe8, 0xa4, 0xca, 0x5d, 0xb4, 0x3f, 0xde, 0x8d, 0xce, 0x85, 0x0b, + 0x13, 0xe8, 0x55, 0x33, 0x02, 0x11, 0xdb, 0xb8, 0x35, 0x70, 0x97, 0x49, 0xf4, 0xad, 0x4e, 0x07, + 0x1b, 0x2e, 0x17, 0x7e, 0xee, 0xc5, 0xf4, 0x6f, 0x9d, 0x7e, 0x47, 0x58, 0x41, 0x12, 0xca, 0x0c, + 0x5b, 0x6f, 0x02, 0xc3, 0x11, 0x96, 0x1c, 0x28, 0xde, 0x2b, 0x70, 0xe5, 0x8b, 0xaa, 0xe3, 0x1d, + 0xce, 0xa7, 0x1c, 0xa6, 0xaf, 0xd9, 0x50, 0x20, 0x6c, 0xaf, 0x63, 0x5c, 0xc6, 0x3a, 0xf1, 0x6a, + 0x08, 0x54, 0xf9, 0xd5, 0xa2, 0xd8, 0x88, 0x51, 0x19, 0x48, 0xcd, 0xae, 0x72, 0xc2, 0x09, 0x8d, + 0xcc, 0xdc, 0x39, 0x37, 0xca, 0x34, 0xeb, 0xb5, 0x0a, 0x74, 0xf2, 0xd7, 0x10, 0x81, 0xd4, 0x4c, + 0xfb, 0xf9, 0x84, 0xdd, 0xb4, 0xf9, 0x17, 0x94, 0x7b, 0xe7, 0x2a, 0x02, 0x98, 0x02, 0xa9, 0xe2, + 0x5b, 0x89, 0xd5, 0xc3, 0x12, 0x11, 0x5a, 0x25, 0x5c, 0xcb, 0xdc, 0x9a, 0xe7, 0x8b, 0x61, 0x2f, + 0x00, 0xf0, 0xaa, 0x11, 0xae, 0xc2, 0xdb, 0xe5, 0xa4, 0xbe, 0x08, 0x8e, 0xea, 0xb2, 0x56, 0x4d, + 0x00, 0xf1, 0x95, 0xe9, 0x75, 0xe2, 0x55, 0x24, 0xb5, 0xd7, 0x6c, 0xd3, 0xa0, 0x92, 0xf2, 0x09, + 0xdb, 0xf7, 0xa4, 0x07, 0xec, 0xf8, 0x5c, 0xe2, 0x00, 0x09, 0x9a, 0x33, 0x1c, 0xeb, 0x37, 0x17, + 0xd1, 0x49, 0x63, 0xf4, 0x0f, 0x8b, 0x86, 0xfe, 0x6b, 0xc2, 0x06, 0xe6, 0x95, 0xa7, 0xc3, 0xd5, + 0x70, 0xc0, 0xc1, 0x33, 0x36, 0x9b, 0xa8, 0xa9, 0x23, 0xd5, 0xfa, 0x10, 0xc3, 0x58, 0x2f, 0x64, + 0x52, 0x49, 0xde, 0xe4, 0x5c, 0xe1, 0x84, 0xda, 0x12, 0xfa, 0x0a, 0xf2, 0xf2, 0x3d, 0x93, 0xdd, + 0x3b, 0x17, 0x54, 0x15, 0x2d, 0x95, 0xb9, 0xab, 0x2f, 0x4c, 0xa8, 0x1b, 0x14, 0x18, 0x35, 0xb4, + 0xe7, 0x46, 0x69, 0x50, 0x41, 0xba, 0xad, 0x34, 0x7e, 0x01, 0x81, 0xa4, 0xb3, 0xcf, 0x20, 0xdf, + 0x61, 0x8f, 0x48, 0x22, 0x66, 0x23, 0x44, 0x39, 0xa7, 0x44, 0x40, 0x45, 0x36, 0xf4, 0xd6, 0xba, + 0x52, 0x4c, 0x81, 0xd4, 0xe5, 0xda, 0x7a, 0x3b, 0xae, 0x79, 0x2d, 0x0d, 0xcb, 0xa6, 0xb5, 0x9c, + 0xe6, 0xda, 0xeb, 0xfd, 0x96, 0xd1, 0xe2, 0xd7, 0x48, 0xcb, 0xa4, 0x1b, 0x37, 0x54, 0x38, 0xab, + 0xb9, 0xde, 0x1f, 0xd6, 0xbd, 0x61, 0x89, 0x82, 0x16, 0xda, 0xbc, 0x86, 0x2a, 0x77, 0xe0, 0x3e, + 0x4e, 0xec, 0xe2, 0x0e, 0x91, 0x2e, 0x9c, 0xbc, 0xc6, 0x0c, 0x1d, 0xc8, 0xe2, 0x36, 0x45, 0x48, + 0x75, 0x01, 0xfc, 0xf7, 0xbc, 0xe1, 0x46, 0x19, 0x46, 0x0e, 0xf9, 0x7d, 0x35, 0x1c, 0xa2, 0x7c, + 0x54, 0x38, 0xd3, 0x70, 0x74, 0xea, 0x81, 0x5e, 0x23, 0xa0, 0xb7, 0x40, 0x72, 0x60, 0x3b, 0x55, + 0xc9, 0x57, 0xef, 0x89, 0x41, 0xc8, 0x85, 0xf4, 0x4a, 0xfc, 0x41, 0x60, 0x2d, 0xcc, 0xc8, 0x50, + 0xe9, 0x15, 0x6f, 0xce, 0xa8, 0x5d, 0xf8, 0x5a, 0xdc, 0x45, 0x05, 0x4a, 0x90, 0x78, 0x78, 0xb3, + 0x2e, 0xf3, 0x56, 0x02, 0x58, 0xe3, 0xd0, 0x08, 0xc9, 0x42, 0x5e, 0xf9, 0x84, 0xb7, 0x5e, 0xaa, + 0xba, 0xfd, 0x19, 0x55, 0xef, 0x70, 0x5d, 0x8d, 0xbf, 0x1d, 0x51, 0x7d, 0xb7, 0x7f, 0x1c, 0x10, + 0x7b, 0x5b, 0x91, 0x1e, 0x7f, 0xbf, 0xc7, 0x34, 0x29, 0x4d, 0xb9, 0xcd, 0xe7, 0xdc, 0xe4, 0x22, + 0x5b, 0xd6, 0x48, 0xb7, 0xaa, 0xce, 0xe7, 0x0c, 0x18, 0x6d, 0x5f, 0xe3, 0xdf, 0x37, 0x32, 0xb1, + 0xcf, 0x51, 0xc9, 0xf5, 0x2e, 0xc3, 0xa7, 0x77, 0x37, 0xa3, 0x49, 0xdb, 0x93, 0xee, 0x69, 0x5b, + 0xb2, 0xf2, 0xe7, 0x36, 0x05, 0x4e, 0xec, 0x3a, 0x43, 0x18, 0xcc, 0xdf, 0xa3, 0x76, 0xb6, 0x71, + 0xf3, 0xf0, 0x88, 0xc8, 0x2a, 0xbb, 0x6f, 0x06, 0xdc, 0x55, 0x49, 0xef, 0xcf, 0x84, 0x14, 0xd2, + 0x88, 0x12, 0x7f, 0xa0, 0xbd, 0x91, 0x20, 0xb2, 0x8d, 0x3b, 0xd0, 0xf5, 0xed, 0xd7, 0x72, 0x22, + 0x0a, 0xbd, 0x29, 0x9e, 0xab, 0xb1, 0xac, 0x33, 0xb1, 0x9b, 0xab, 0x02, 0x8e, 0x98, 0xe5, 0x46, + 0xd6, 0xbc, 0x6e, 0x03, 0x1e, 0x04, 0xb7, 0xfd, 0x4f, 0xcd, 0x6e, 0x14, 0xca, 0x0b, 0xac, 0xa4, + 0x8b, 0xa3, 0x9f, 0x1a, 0xe7, 0x0a, 0x26, 0xe0, 0xa5, 0x54, 0x98, 0x46, 0x6c, 0x1e, 0x87, 0x72, + 0xc7, 0xfb, 0x25, 0x18, 0xc3, 0x22, 0xe3, 0xa9, 0x34, 0xd3, 0xef, 0x82, 0x3a, 0xc3, 0x44, 0x2f, + 0x22, 0x96, 0x5b, 0x73, 0x38, 0x1e, 0x81, 0xe2, 0xef, 0x59, 0x77, 0x01, 0xd7, 0x06, 0xd8, 0x5f, + 0xff, 0x85, 0x82, 0xa4, 0x77, 0x09, 0xb5, 0x26, 0x12, 0x4e, 0x6f, 0x87, 0xcd, 0x33, 0x6d, 0x90, + 0x94, 0xa8, 0x71, 0x89, 0xc2, 0xcb, 0x7e, 0xf3, 0x34, 0x25, 0x08, 0x89, 0xf1, 0xd5, 0xc2, 0x2d, + 0x9c, 0x4f, 0xdc, 0x14, 0x67, 0x8d, 0xcc, 0x6b, 0x45, 0xbf, 0x15, 0x0f, 0x3f, 0x98, 0x46, 0x70, + 0x30, 0x29, 0x42, 0x36, 0x32, 0x12, 0x73, 0x1a, 0x45, 0xa4, 0xbb, 0x83, 0xb5, 0x90, 0xa3, 0x78, + 0x5f, 0xaf, 0x00, 0xfc, 0x97, 0xad, 0xbe, 0x40, 0x2d, 0x31, 0x63, 0x65, 0x56, 0xfa, 0x14, 0x27, + 0x49, 0x16, 0xea, 0xaa, 0x4e, 0x41, 0x20, 0x00, 0xe8, 0x72, 0x5f, 0x68, 0x62, 0x26, 0x41, 0x53, + 0x1b, 0xe0, 0x4c, 0x8f, 0x88, 0x0c, 0xf5, 0xcb, 0xf6, 0x7d, 0x00, 0x93, 0x08, 0xfa, 0xc3, 0xab, + 0xff, 0x03, 0x5e, 0xdb, 0x00, 0xbf, 0x96, 0xb5, 0xf3, 0x5d, 0x59, 0xbc, 0x90, 0x70, 0xbd, 0x4d, + 0xa7, 0x33, 0xab, 0x1c, 0xcd, 0x12, 0x97, 0x86, 0x10, 0xc4, 0x37, 0xfc, 0x01, 0xc3, 0x97, 0x8d, + 0xad, 0x84, 0x61, 0xf0, 0xec, 0x2b, 0xfa, 0xd4, 0x75, 0x09, 0x6b, 0x7d, 0x4b, 0x7b, 0x5d, 0x7c, + 0x9b, 0x60, 0x27, 0x42, 0xa9, 0x8b, 0xe3, 0x7e, 0xe1, 0x91, 0xa0, 0xa5, 0xf8, 0xaf, 0x62, 0x44, + 0x53, 0xe4, 0xaa, 0xe8, 0x30, 0xa7, 0x45, 0xf6, 0xc2, 0x22, 0xa4, 0xbc, 0xf0, 0x9c, 0x9c, 0x12, + 0x57, 0xcc, 0x99, 0x03, 0xd6, 0x8c, 0x7b, 0x97, 0xe5, 0x04, 0xac, 0xfb, 0xf9, 0x5c, 0x75, 0x9b, + 0x51, 0xb5, 0x44, 0x0b, 0xde, 0x66, 0xf5, 0xa4, 0xa1, 0x04, 0x44, 0xc0, 0x2f, 0xe3, 0xa1, 0x0f, + 0x71, 0xcb, 0x81, 0x36, 0xbf, 0xe8, 0x5c, 0x9c, 0xe8, 0x13, 0xf3, 0xe8, 0xc0, 0xcb, 0x84, 0xe4, + 0x61, 0x3d, 0x12, 0x20, 0x21, 0x70, 0x39, 0x06, 0xc4, 0x7a, 0x4b, 0xd1, 0x1d, 0xe8, 0x7c, 0x1d, + 0x87, 0x57, 0x0e, 0xd9, 0x09, 0x72, 0x7a, 0x2e, 0x32, 0xf0, 0x91, 0x3e, 0x0f, 0xcd, 0xc2, 0xbb, + 0xb7, 0x5e, 0x6d, 0xa8, 0x6a, 0x13, 0xf9, 0x64, 0x61, 0x0f, 0x44, 0xa6, 0x40, 0x82, 0xf8, 0x2e, + 0xec, 0x30, 0x11, 0x18, 0x21, 0x86, 0xd6, 0x33, 0x54, 0x2e, 0xba, 0x28, 0x93, 0xf6, 0xbb, 0x1f, + 0x69, 0xc5, 0xd5, 0x1f, 0x9b, 0x53, 0x12, 0xf7, 0x64, 0x64, 0x61, 0x28, 0xfa, 0xba, 0xa2, 0xc6, + 0x98, 0x9c, 0x02, 0x09, 0x36, 0xa0, 0x6e, 0xef, 0xa8, 0x13, 0x8f, 0x18, 0x8d, 0x90, 0x07, 0xfd, + 0x6b, 0x48, 0x27, 0xff, 0x52, 0x8c, 0x5d, 0x1c, 0xc2, 0x87, 0x72, 0xa1, 0x67, 0xa2, 0x82, 0xb6, + 0xec, 0x96, 0x03, 0xf4, 0x5c, 0xfd, 0x3f, 0xf7, 0xd3, 0x34, 0xb0, 0x35, 0x41, 0x68, 0x72, 0x9f, + 0xc9, 0x8c, 0x6f, 0x0e, 0x7c, 0xf4, 0x5b, 0x65, 0xe3, 0xfd, 0x52, 0x07, 0x25, 0x68, 0x75, 0x5d, + 0xe9, 0x51, 0x0a, 0x6c, 0xa0, 0xf5, 0x9c, 0x81, 0x18, 0xf0, 0x79, 0xbe, 0xbe, 0x69, 0x1c, 0x8b, + 0x9f, 0x1b, 0xb0, 0xe3, 0x09, 0xac, 0x7a, 0x0b, 0x9c, 0xf8, 0xe5, 0x2c, 0x1d, 0xa8, 0x32, 0x5b, + 0x0a, 0x61, 0x6c, 0xe1, 0x2a, 0x5b, 0x9a, 0x51, 0x19, 0xf5, 0x3f, 0x23, 0x33, 0x73, 0xa3, 0x0d, + 0xe3, 0xf6, 0x4f, 0xc8, 0x98, 0x08, 0x4e, 0x94, 0x3f, 0xf7, 0xcb, 0x12, 0x4f, 0xf1, 0x8b, 0xea, + 0x45, 0xbf, 0x0d, 0x54, 0xf3, 0x09, 0xd4, 0x69, 0xe9, 0x9c, 0xb7, 0xe6, 0x82, 0xe5, 0x95, 0x70, + 0x8d, 0x85, 0x6e, 0x06, 0xda, 0x7d, 0x8f, 0x0c, 0x39, 0xda, 0xfe, 0xd5, 0x72, 0x39, 0xbd, 0x55, + 0xa1, 0x8f, 0x4e, 0x77, 0x20, 0x4d, 0x26, 0x35, 0x07, 0x95, 0xe4, 0xbf, 0xf8, 0x79, 0x77, 0x9d, + 0xa6, 0x88, 0x32, 0x53, 0x13, 0x5e, 0xf0, 0x59, 0x8b, 0x32, 0x89, 0xd7, 0x2f, 0x56, 0xda, 0x78, + 0xe7, 0xb1, 0x8f, 0xad, 0xb7, 0x50, 0xf1, 0x5e, 0x56, 0x13, 0x78, 0x34, 0x52, 0x55, 0xe8, 0xdc, + 0x78, 0xb6, 0x02, 0xe4, 0xd8, 0x6d, 0xff, 0x95, 0xda, 0x60, 0x23, 0xe7, 0xea, 0x31, 0xbb, 0x83, + 0xfb, 0xbf, 0x6d, 0xd4, 0xf1, 0x74, 0xbe, 0x76, 0xa4, 0xa7, 0x62, 0x7b, 0x25, 0x97, 0x97, 0x58, + 0x8e, 0xeb, 0xfa, 0xea, 0x66, 0x25, 0x02, 0x09, 0xc7, 0x95, 0x24, 0x2c, 0xe2, 0x7e, 0xf9, 0xdb, + 0xf5, 0x96, 0x90, 0x42, 0xb3, 0x7c, 0x47, 0x5e, 0x11, 0xc7, 0xdf, 0x5a, 0x5f, 0x76, 0xa9, 0x93, + 0xc2, 0x41, 0x9f, 0x85, 0xac, 0x5c, 0xcc, 0xe8, 0x97, 0x38, 0x12, 0x51, 0x81, 0xda, 0x54, 0x1b, + 0xab, 0xd9, 0xae, 0xed, 0xec, 0x66, 0xa6, 0xa4, 0xc1, 0x8e, 0x12, 0x7e, 0xdd, 0xff, 0xc0, 0x71, + 0x30, 0xea, 0xcb, 0xfc, 0xaa, 0x2f, 0x6c, 0x2b, 0x40, 0xb8, 0xf2, 0xda, 0x3e, 0xeb, 0x67, 0xa8, + 0xda, 0x28, 0xfe, 0xd4, 0x60, 0x29, 0xd5, 0xfa, 0xea, 0x60, 0xb6, 0xe2, 0x79, 0x6a, 0xf6, 0x3e, + 0x45, 0x69, 0x54, 0x42, 0xb5, 0x81, 0xf0, 0x45, 0xde, 0x36, 0xaf, 0x0c, 0xc8, 0x5f, 0x09, 0x3b, + 0x27, 0x5a, 0xba, 0xdb, 0xfa, 0x1d, 0xbc, 0x00, 0xbf, 0xb5, 0x66, 0x06, 0x3e, 0x2c, 0x73, 0x75, + 0x85, 0xa1, 0x7d, 0x05, 0xc6, 0xcc, 0xc7, 0x7a, 0xa7, 0x2d, 0xd6, 0x9c, 0xf4, 0xa2, 0x72, 0x1c, + 0x5b, 0x7b, 0xcd, 0x26, 0x02, 0xf0, 0xec, 0x46, 0x7a, 0xbe, 0xa4, 0x5f, 0xac, 0xbb, 0x20, 0xf4, + 0x89, 0x7c, 0x7b, 0x8e, 0x53, 0x9d, 0x73, 0x8d, 0x32, 0xc4, 0xb9, 0xb1, 0x99, 0xe6, 0x9e, 0xab, + 0x2c, 0x9b, 0x61, 0x6f, 0x24, 0x55, 0x94, 0x9f, 0x3a, 0xd7, 0x3c, 0xe4, 0xc6, 0x6e, 0x01, 0x41, + 0x8f, 0xf8, 0x2a, 0x44, 0x47, 0x12, 0x8b, 0x65, 0x43, 0xf4, 0x57, 0xfd, 0x7f, 0xd0, 0xa8, 0x89, + 0x30, 0xd2, 0x01, 0xd5, 0x0c, 0xa0, 0x0d, 0x6b, 0x40, 0xb0, 0x24, 0xd8, 0x86, 0xdf, 0xed, 0x79, + 0x39, 0xf3, 0xca, 0x48, 0xae, 0x42, 0x20, 0x03, 0x17, 0xa8, 0x9c, 0x85, 0x1a, 0x57, 0x39, 0x5c, + 0x10, 0x82, 0x2d, 0xb0, 0x90, 0x4a, 0xf0, 0x54, 0x90, 0x7f, 0x19, 0x88, 0x33, 0x1a, 0xe5, 0x51, + 0xeb, 0xae, 0x71, 0x24, 0x2d, 0x83, 0x2b, 0xf9, 0x94, 0x45, 0x06, 0x0b, 0xd6, 0x47, 0xaf, 0xd2, + 0xc9, 0xea, 0x77, 0xaa, 0xeb, 0x5c, 0x0b, 0x12, 0x77, 0x78, 0xce, 0xe5, 0x46, 0x1f, 0xd6, 0x46, + 0x57, 0x3d, 0xba, 0xe5, 0x4e, 0xb8, 0x65, 0xc3, 0xc4, 0x32, 0x80, 0x3c, 0xa0, 0x02, 0x81, 0x1e, + 0x8d, 0x2d, 0x10, 0x20, 0x4a, 0x1a, 0x0b, 0x27, 0x13, 0x97, 0x8b, 0x8b, 0x58, 0xce, 0x45, 0x37, + 0xc5, 0x85, 0xe2, 0x2d, 0x6c, 0x80, 0xfe, 0xe7, 0xb9, 0x0e, 0x58, 0x0e, 0x43, 0x60, 0x51, 0x7c, + 0xa8, 0xbe, 0x73, 0xce, 0xef, 0xd9, 0x77, 0x89, 0x8d, 0xc2, 0xb3, 0x56, 0xe8, 0x73, 0xc5, 0x0e, + 0x3d, 0xda, 0x79, 0x97, 0x1d, 0x91, 0x22, 0xa5, 0x21, 0xa6, 0xe3, 0xb7, 0x98, 0x99, 0x6f, 0x6a, + 0x31, 0xc5, 0x7b, 0xf5, 0x63, 0x1b, 0x8b, 0x02, 0x2a, 0x47, 0x02, 0xb3, 0x7c, 0x36, 0x5f, 0x2d, + 0x3e, 0xfd, 0x35, 0xae, 0xa6, 0xea, 0x5e, 0x1d, 0x60, 0xe3, 0xb9, 0x61, 0x65, 0xfd, 0xcf, 0x45, + 0xcd, 0x95, 0x50, 0xc9, 0x91, 0xdf, 0x00, 0x75, 0x98, 0x47, 0xf0, 0xab, 0x90, 0x8c, 0xad, 0xf9, + 0x2b, 0xcb, 0x68, 0x07, 0x4c, 0x39, 0x23, 0x57, 0xd8, 0xc5, 0xdb, 0x78, 0xb7, 0x29, 0x73, 0xa7, + 0x12, 0xf2, 0xbd, 0xdc, 0xa0, 0x1e, 0xd7, 0xd8, 0x03, 0x25, 0x10, 0x35, 0x04, 0x84, 0xb4, 0x7e, + 0xeb, 0xa0, 0xa0, 0x27, 0x53, 0x77, 0x68, 0x1a, 0x2f, 0x15, 0x20, 0x5c, 0x72, 0x06, 0xce, 0x6b, + 0xc8, 0x9e, 0x8b, 0xc3, 0x48, 0xed, 0x8d, 0x61, 0x4b, 0x94, 0xd7, 0x72, 0x24, 0x87, 0x6a, 0x96, + 0xe6, 0x97, 0xa6, 0x8b, 0xea, 0x68, 0xaa, 0x67, 0x19, 0xdb, 0x09, 0x75, 0x77, 0x28, 0x33, 0x5d, + 0xfc, 0x01, 0xc3, 0x60, 0x54, 0x9e, 0x18, 0xf6, 0xa3, 0x5a, 0x78, 0x2b, 0x56, 0x2c, 0xee, 0x00, + 0xd2, 0x5c, 0xd9, 0x21, 0x76, 0x93, 0x3e, 0x91, 0x0f, 0x15, 0x2a, 0xae, 0xc9, 0x86, 0x02, 0x5e, + 0x37, 0xfe, 0xaa, 0xf5, 0xac, 0xe7, 0xf3, 0xc7, 0x5e, 0xd8, 0xb2, 0x91, 0xef, 0xc0, 0xde, 0xb3, + 0x97, 0x8f, 0x5d, 0x2b, 0x26, 0x45, 0x72, 0xe4, 0x86, 0x86, 0x6f, 0x70, 0x94, 0x23, 0x4b, 0x13, + 0x9d, 0x54, 0x9a, 0xda, 0xed, 0xe3, 0xef, 0xbc, 0x27, 0x5d, 0xdd, 0x77, 0x2c, 0xe6, 0x08, 0xfa, + 0x3f, 0x8b, 0x5f, 0x09, 0xa5, 0x19, 0x22, 0x20, 0xae, 0x51, 0xb1, 0x63, 0xf5, 0xe3, 0xf0, 0x05, + 0xcf, 0x20, 0x97, 0x7a, 0xe6, 0x0b, 0xed, 0x5d, 0x4d, 0xc4, 0x59, 0x95, 0x34, 0xe8, 0xa2, 0xef, + 0x33, 0x5a, 0x0f, 0x88, 0xea, 0x89, 0x0d, 0xed, 0xe0, 0xdf, 0xbf, 0xdd, 0xc0, 0xba, 0xfc, 0xac, + 0xb0, 0xc0, 0xf4, 0xe4, 0x9a, 0x2f, 0xbb, 0x9f, 0xa3, 0xab, 0x47, 0x89, 0x5f, 0x1e, 0x9c, 0x90, + 0x4b, 0xb1, 0xb8, 0xb1, 0xc8, 0x5a, 0xd8, 0x78, 0xe0, 0xd9, 0x6c, 0x87, 0x15, 0x30, 0xb8, 0xe2, + 0x72, 0x71, 0x0a, 0xde, 0x26, 0x3a, 0xcb, 0x27, 0x39, 0xb0, 0x99, 0x1c, 0xfc, 0xb0, 0x33, 0xe7, + 0x24, 0xf3, 0xcc, 0x5b, 0x49, 0x85, 0xea, 0x60, 0x10, 0x7b, 0x16, 0x03, 0xf5, 0x16, 0x3f, 0xe1, + 0xcc, 0x19, 0xf5, 0xb6, 0x63, 0xb8, 0x56, 0xc6, 0xad, 0x35, 0xb5, 0x99, 0xdb, 0xee, 0x90, 0x9b, + 0x76, 0xd8, 0x59, 0x6c, 0x4e, 0xb9, 0x57, 0x9c, 0x84, 0x7e, 0xdb, 0xa5, 0xa8, 0xc2, 0xbc, 0x11, + 0xc8, 0x41, 0xe8, 0x80, 0x94, 0x30, 0xb6, 0xe2, 0x11, 0xaa, 0xe8, 0x2a, 0x89, 0x52, 0xe6, 0x69, + 0x5c, 0x53, 0x57, 0x21, 0x16, 0xc3, 0xbf, 0x53, 0xe6, 0xd8, 0x17, 0x78, 0x95, 0x51, 0x80, 0x1c, + 0x6e, 0x32, 0x11, 0xe9, 0x0b, 0x74, 0x55, 0x42, 0x54, 0x8c, 0x7a, 0x42, 0xae, 0x45, 0x54, 0x04, + 0xd3, 0x95, 0xa1, 0x11, 0x6e, 0xbc, 0x6c, 0xbf, 0x7d, 0x44, 0xe2, 0x1f, 0x1d, 0x22, 0x09, 0x02, + 0xaa, 0x26, 0x5c, 0x83, 0xbd, 0x42, 0x53, 0xb8, 0xeb, 0xc8, 0xae, 0xb0, 0x9e, 0x27, 0xbe, 0x0e, + 0x9c, 0x3f, 0x96, 0x63, 0x8e, 0x3d, 0x1e, 0xc5, 0x79, 0x02, 0x8d, 0xf5, 0x9b, 0x06, 0x9a, 0xaf, + 0xa8, 0x72, 0xaf, 0x0b, 0x97, 0x05, 0xa4, 0x77, 0x6e, 0x48, 0x32, 0xeb, 0x73, 0xd5, 0x8a, 0xae, + 0x43, 0x09, 0xeb, 0xcc, 0x40, 0x74, 0xef, 0x8b, 0x1f, 0x34, 0xbe, 0x1e, 0x0c, 0x12, 0x98, 0x89, + 0x09, 0x09, 0x95, 0x5a, 0xa9, 0xcc, 0x61, 0x93, 0xf1, 0x39, 0x27, 0x70, 0x5a, 0x87, 0x24, 0x96, + 0x16, 0x9c, 0xf0, 0x12, 0x16, 0x6e, 0x60, 0x99, 0x6d, 0xff, 0x48, 0x73, 0x87, 0x1a, 0xc9, 0xdb, + 0x2b, 0xfa, 0x6a, 0x88, 0x28, 0xe4, 0x0b, 0x7b, 0x71, 0x91, 0xc3, 0xc2, 0x7e, 0x7d, 0x40, 0x38, + 0x95, 0xc5, 0x64, 0x86, 0x93, 0x24, 0x77, 0x65, 0xe9, 0xd5, 0x2c, 0x61, 0x2a, 0xc4, 0x74, 0x39, + 0x6c, 0x69, 0xa7, 0xe3, 0x10, 0x24, 0x95, 0x81, 0xaf, 0x49, 0x1d, 0x57, 0x36, 0x52, 0x3d, 0x01, + 0x7a, 0x7c, 0x44, 0xf1, 0x19, 0x2f, 0x14, 0xe3, 0x94, 0x26, 0x84, 0x70, 0x71, 0x43, 0xeb, 0x25, + 0x77, 0x82, 0x5a, 0xf6, 0xeb, 0xfd, 0xa8, 0x84, 0x03, 0x07, 0x3d, 0xad, 0x71, 0x47, 0x39, 0x81, + 0x83, 0x7a, 0xea, 0x39, 0x6e, 0xff, 0x40, 0xbe, 0xa8, 0x84, 0xb5, 0xd8, 0xaa, 0x69, 0xf4, 0x24, + 0xe2, 0x6c, 0x31, 0x18, 0xb7, 0xf1, 0x0c, 0x19, 0x31, 0x6c, 0x94, 0x52, 0x11, 0xa3, 0x3a, 0xb1, + 0x30, 0x0e, 0x6b, 0x43, 0x26, 0x13, 0xa1, 0xd9, 0xd2, 0x20, 0x37, 0xd8, 0xb7, 0x37, 0xa2, 0xdb, + 0x7d, 0x20, 0xd5, 0xc3, 0xe0, 0xe7, 0x7c, 0x0e, 0x74, 0xbd, 0xf8, 0xdf, 0x38, 0xce, 0x7e, 0xd6, + 0xbb, 0xfb, 0x06, 0xfa, 0xff, 0x9c, 0xaa, 0x8f, 0x56, 0xd6, 0x03, 0xf5, 0x8b, 0xe8, 0xf0, 0x1b, + 0x50, 0xc3, 0xfd, 0x9e, 0x3c, 0x88, 0xfb, 0x3b, 0x46, 0x31, 0x07, 0x71, 0x71, 0xa2, 0x4a, 0xde, + 0x6c, 0x17, 0x7e, 0x71, 0x2c, 0x62, 0x13, 0x6b, 0x2b, 0xd7, 0xed, 0xdd, 0xfc, 0xf6, 0x22, 0x21, + 0x20, 0x59, 0x78, 0x61, 0x43, 0x2c, 0xe5, 0x1a, 0xff, 0x82, 0x20, 0xb0, 0x15, 0xaa, 0x90, 0xa2, + 0xff, 0xdb, 0xc4, 0x61, 0x25, 0xee, 0xe1, 0x57, 0x88, 0xdf, 0x89, 0xce, 0x04, 0xd2, 0xff, 0x49, + 0xf3, 0x56, 0x30, 0x7c, 0xa2, 0xfa, 0x74, 0x50, 0x50, 0x3e, 0x08, 0xb0, 0xf9, 0x4f, 0xb7, 0xa1, + 0xd2, 0xae, 0xa5, 0x4c, 0xa3, 0x6b, 0xc2, 0xb3, 0xdc, 0xcd, 0x57, 0xb7, 0xda, 0x58, 0x81, 0xd1, + 0xd4, 0x4f, 0xcb, 0xc4, 0x4e, 0x6a, 0x5e, 0x26, 0x7d, 0xef, 0x99, 0xa2, 0x55, 0xf2, 0x0b, 0x94, + 0x0b, 0x01, 0x61, 0x01, 0x4b, 0xad, 0xf5, 0x85, 0x8b, 0x6f, 0x45, 0xab, 0xde, 0x20, 0x12, 0x0c, + 0x3e, 0x67, 0xea, 0x36, 0xb6, 0x0e, 0x30, 0xd6, 0xca, 0x68, 0xcd, 0x31, 0xbf, 0xc6, 0x22, 0xb7, + 0x6d, 0xb4, 0x63, 0xe7, 0xe7, 0xe9, 0x0f, 0x25, 0x17, 0xfe, 0xf9, 0x1b, 0xc2, 0x6a, 0xc5, 0xae, + 0x57, 0x8c, 0xf8, 0x60, 0x9b, 0xda, 0x4f, 0x96, 0x25, 0x64, 0x62, 0xae, 0xe3, 0x31, 0x92, 0xe1, + 0x4a, 0xe0, 0x29, 0x36, 0xe7, 0x7f, 0xc1, 0xb1, 0xe6, 0xd1, 0xbc, 0x16, 0xd2, 0x39, 0x6a, 0x24, + 0x96, 0x51, 0x97, 0xcf, 0xd9, 0x80, 0xcd, 0x1b, 0x9a, 0x39, 0x02, 0x5c, 0xfa, 0x03, 0x99, 0xe6, + 0x97, 0xc8, 0xf0, 0x78, 0x55, 0x15, 0xcf, 0xab, 0x04, 0x23, 0xda, 0xfe, 0xbb, 0x27, 0xde, 0x7a, + 0x84, 0xcb, 0x7b, 0xb2, 0x78, 0xc0, 0x10, 0xa4, 0x66, 0x72, 0xe4, 0xbc, 0xb0, 0xd0, 0xf7, 0x9d, + 0xb9, 0x87, 0xa8, 0xcd, 0x7e, 0x6c, 0xd7, 0x41, 0x5f, 0x11, 0x04, 0x14, 0x9b, 0xcd, 0x98, 0xad, + 0x93, 0x07, 0x63, 0x8f, 0xf7, 0x5a, 0xa2, 0x04, 0x05, 0xf0, 0xa5, 0xdc, 0x54, 0x01, 0x1a, 0x76, + 0x30, 0x59, 0xab, 0x27, 0x5a, 0x98, 0xe2, 0xb6, 0x92, 0x86, 0xe0, 0x02, 0x56, 0xe8, 0x9d, 0x16, + 0xd9, 0xb1, 0x3a, 0x6b, 0x49, 0x97, 0x96, 0xe3, 0x53, 0x45, 0x97, 0x6d, 0x94, 0xd5, 0x5b, 0x1d, + 0xc0, 0xc7, 0x3d, 0xaf, 0x92, 0xd4, 0x90, 0x6b, 0x5c, 0x76, 0x8a, 0xe6, 0x7c, 0x1e, 0x8a, 0x86, + 0x41, 0xfa, 0x13, 0xe0, 0x8c, 0x09, 0x12, 0x66, 0x26, 0x0c, 0x95, 0xab, 0x20, 0x84, 0xd2, 0x0e, + 0x9f, 0x37, 0x72, 0x8e, 0x3e, 0x1e, 0x66, 0x34, 0x25, 0xbb, 0xb3, 0x29, 0x9c, 0x70, 0xb4, 0xb9, + 0x03, 0xd7, 0x35, 0x80, 0x06, 0xe6, 0xe8, 0xf9, 0x6e, 0xdf, 0x6d, 0x6c, 0xd9, 0x2a, 0x12, 0xa4, + 0xf3, 0xef, 0x49, 0xb6, 0x73, 0xe8, 0x46, 0x74, 0xa1, 0x92, 0x8c, 0xcb, 0x26, 0x70, 0xfa, 0xb2, + 0x86, 0x2a, 0x8f, 0xd5, 0x99, 0x1f, 0xb8, 0xf7, 0x7d, 0x5c, 0xec, 0x07, 0xed, 0xd2, 0x2e, 0xe0, + 0xd2, 0x41, 0xa6, 0x46, 0x25, 0x98, 0x8f, 0xe1, 0x0f, 0xf9, 0x28, 0x98, 0x0e, 0xfa, 0x8f, 0xe6, + 0x4d, 0x55, 0xcf, 0x58, 0x7e, 0x36, 0xd0, 0x29, 0x07, 0x4f, 0x50, 0x55, 0x38, 0xf9, 0x80, 0x94, + 0x09, 0x3c, 0xa5, 0x5c, 0x3c, 0x9f, 0xb7, 0x6c, 0xbe, 0xbe, 0xb8, 0x53, 0xcd, 0x84, 0x56, 0xec, + 0xc9, 0xa7, 0x18, 0x62, 0x7d, 0x7d, 0xa8, 0x7a, 0x6f, 0xe6, 0x2f, 0xc1, 0xaf, 0x33, 0x05, 0xac, + 0xb0, 0xae, 0x67, 0xbd, 0xe3, 0xd9, 0xc1, 0x10, 0x84, 0xe2, 0x03, 0x4b, 0x77, 0xfa, 0xe0, 0x70, + 0xab, 0xe7, 0xe0, 0x99, 0x93, 0x47, 0x2b, 0x0b, 0x74, 0x11, 0x98, 0xbf, 0xb1, 0x38, 0xba, 0x6a, + 0x1a, 0x0a, 0xe7, 0x3f, 0x43, 0x59, 0x14, 0xe4, 0x1a, 0x99, 0x50, 0x52, 0xee, 0x47, 0xee, 0x47, + 0x00, 0xf3, 0x7c, 0xe0, 0xc0, 0x64, 0x1a, 0xa0, 0xe6, 0x5c, 0xac, 0x70, 0xb8, 0xa0, 0xfa, 0x13, + 0xbe, 0x3f, 0x19, 0xab, 0x7a, 0x3c, 0x66, 0xf8, 0x37, 0xc8, 0xac, 0x42, 0x49, 0xc1, 0xe9, 0xd8, + 0x9b, 0x2c, 0xf1, 0x17, 0xa0, 0x8d, 0x3b, 0x6b, 0x70, 0xa7, 0x9e, 0x2b, 0x41, 0x64, 0x38, 0x1e, + 0x57, 0xbb, 0xd8, 0xea, 0x8c, 0x82, 0xda, 0x2b, 0x0a, 0xf1, 0xf7, 0x96, 0xe4, 0x12, 0x07, 0x57, + 0x1c, 0x67, 0xb1, 0xa8, 0x5e, 0xea, 0xde, 0x1c, 0x84, 0xf8, 0x5f, 0x49, 0x14, 0x81, 0x1a, 0x19, + 0xfb, 0x4b, 0xac, 0x53, 0x6d, 0x76, 0x5d, 0xe9, 0x71, 0xcf, 0x29, 0xec, 0xae, 0xa4, 0xf3, 0x91, + 0xe7, 0xf1, 0x63, 0x02, 0xf0, 0x7e, 0x22, 0x31, 0xfa, 0x9e, 0x90, 0x39, 0x76, 0xc3, 0x2d, 0x2b, + 0x3f, 0x42, 0x8d, 0x5d, 0x98, 0xaa, 0x89, 0xc4, 0x04, 0x35, 0xda, 0xe5, 0x0e, 0x60, 0x0f, 0x29, + 0xda, 0xe2, 0x48, 0x8a, 0xae, 0xcd, 0xed, 0x82, 0x5a, 0x9e, 0xa7, 0x2c, 0x51, 0xf5, 0xe6, 0xe8, + 0x50, 0xb6, 0x68, 0x25, 0xa2, 0x56, 0xe0, 0x04, 0xc4, 0x3b, 0x54, 0x0d, 0xd5, 0x08, 0x0c, 0xfc, + 0xc5, 0x0e, 0xb3, 0xfe, 0x0f, 0x16, 0x65, 0x4f, 0xb9, 0x43, 0x17, 0x67, 0xd6, 0xbb, 0xb3, 0x79, + 0xa7, 0xd1, 0x40, 0x90, 0x16, 0x8c, 0x8c, 0xb5, 0xfc, 0x53, 0x08, 0x68, 0xc1, 0x61, 0xab, 0x39, + 0x21, 0xfe, 0xd6, 0xbb, 0x2c, 0x3f, 0xd5, 0xac, 0xa9, 0x19, 0x3c, 0x51, 0x1c, 0xbc, 0x0e, 0x7c, + 0x34, 0x07, 0xa9, 0xc6, 0x49, 0xb1, 0x27, 0x55, 0x59, 0x00, 0xb4, 0xf9, 0xa2, 0x49, 0xeb, 0x6a, + 0x89, 0xcc, 0x97, 0x51, 0x4f, 0x3a, 0x3f, 0xb9, 0xa0, 0x87, 0x7d, 0xf7, 0x25, 0x50, 0x27, 0xd1, + 0x4c, 0xc9, 0x0e, 0x05, 0xef, 0x65, 0x0f, 0x00, 0x68, 0x29, 0xa0, 0xb2, 0xe3, 0x20, 0x1a, 0xa6, + 0x15, 0x32, 0x0c, 0x82, 0x95, 0xd4, 0xa9, 0x06, 0xdb, 0xb5, 0x3a, 0x65, 0xbb, 0xe1, 0x4a, 0x84, + 0x1c, 0xa1, 0x5a, 0x9c, 0xbd, 0xc9, 0xa8, 0xbe, 0x08, 0xe4, 0x13, 0x5e, 0x5f, 0x91, 0xf8, 0x0d, + 0x44, 0x81, 0xb0, 0x5e, 0x40, 0x6e, 0x40, 0x0c, 0x3d, 0xfa, 0xa2, 0xac, 0x0a, 0xbf, 0x6f, 0x1c, + 0xbb, 0x6f, 0xaf, 0xfc, 0xfa, 0x13, 0x7a, 0x6f, 0x5a, 0xaa, 0x04, 0x2f, 0x31, 0xb2, 0x06, 0x77, + 0xae, 0x4d, 0x5b, 0xba, 0x51, 0xd1, 0x2d, 0xdd, 0xb9, 0x15, 0x0d, 0x1a, 0x9e, 0xd5, 0xde, 0xee, + 0x39, 0x18, 0x60, 0x11, 0xe7, 0x12, 0x98, 0x5f, 0x2f, 0x9a, 0xd2, 0xf8, 0x36, 0xf6, 0x93, 0xa3, + 0x00, 0x06, 0x8f, 0x0d, 0xbc, 0x4d, 0xfe, 0x31, 0xd4, 0x97, 0x06, 0x89, 0xb5, 0x4a, 0xea, 0xe1, + 0x51, 0xb9, 0x53, 0x9a, 0x68, 0x43, 0x6f, 0x47, 0x5b, 0xc2, 0x26, 0x2e, 0xf9, 0x94, 0xdc, 0x5c, + 0x03, 0xad, 0x2e, 0x57, 0x98, 0x1e, 0x3c, 0x7a, 0xa4, 0xb2, 0x3c, 0x66, 0xe7, 0x12, 0xf2, 0xd6, + 0x72, 0x85, 0x5c, 0x43, 0xc0, 0x44, 0xac, 0x4d, 0xe7, 0xbc, 0x5b, 0x83, 0xbe, 0x3d, 0x03, 0x25, + 0x23, 0xb3, 0x5f, 0xe3, 0x4a, 0xd7, 0x3e, 0xfe, 0xbf, 0x95, 0xf9, 0x96, 0x6b, 0x70, 0xb2, 0xa4, + 0x1c, 0xda, 0x5f, 0xe8, 0xa1, 0x2b, 0x00, 0x76, 0x87, 0x0f, 0xf8, 0x98, 0xb3, 0x1e, 0x2a, 0xee, + 0xf7, 0x1b, 0x61, 0x17, 0x23, 0xae, 0x54, 0x15, 0xf0, 0x1c, 0xe3, 0xb9, 0x48, 0x43, 0xb6, 0xb3, + 0x24, 0x9a, 0xed, 0xb9, 0xd3, 0xdd, 0x86, 0xf7, 0xb2, 0xf8, 0xf2, 0xf3, 0x68, 0xdb, 0x27, 0x33, + 0xd8, 0x24, 0xf8, 0xc2, 0xf3, 0x29, 0x2b, 0x8c, 0xa6, 0xa8, 0xba, 0x06, 0x80, 0x7f, 0xc8, 0xf5, + 0xf2, 0x4f, 0x38, 0xf7, 0x6d, 0x44, 0x70, 0x24, 0x67, 0x67, 0xad, 0x2b, 0x1b, 0x7b, 0x60, 0xc7, + 0xfb, 0xad, 0x67, 0xea, 0xa2, 0xcb, 0xb1, 0xd1, 0xf5, 0x2b, 0xb9, 0xb6, 0x1f, 0xd1, 0x73, 0x6c, + 0xfb, 0x1e, 0xc0, 0x8b, 0xe2, 0xd9, 0xeb, 0xb0, 0x9b, 0x4d, 0x4a, 0x1a, 0xe0, 0x70, 0x97, 0x7d, + 0x17, 0xd1, 0x34, 0x05, 0x9d, 0x95, 0x73, 0xc4, 0x4e, 0x31, 0x80, 0xc3, 0xae, 0xdf, 0x08, 0xd5, + 0xda, 0xdf, 0x4e, 0xbc, 0xb4, 0x91, 0x23, 0x61, 0x16, 0xa7, 0x74, 0x4e, 0xbb, 0x31, 0x01, 0x0f, + 0x92, 0xe9, 0x29, 0x9d, 0xc7, 0x9c, 0xd9, 0x82, 0x8c, 0x43, 0xe6, 0x2d, 0xfb, 0xc9, 0x5f, 0x2f, + 0x7d, 0x01, 0x3e, 0x38, 0xb1, 0x89, 0x95, 0x01, 0x02, 0xb3, 0xfb, 0xd1, 0x99, 0xc8, 0x1a, 0x38, + 0x9d, 0x89, 0x68, 0x8a, 0x88, 0x75, 0x58, 0x02, 0x61, 0xc5, 0x0a, 0x59, 0x52, 0x1f, 0x4d, 0xd1, + 0xc2, 0x4e, 0x1e, 0x9a, 0x38, 0x45, 0x98, 0xf5, 0x76, 0x07, 0x49, 0x06, 0x9a, 0x9b, 0xfb, 0x1a, + 0x87, 0xf0, 0xde, 0x27, 0x57, 0x95, 0x7a, 0xb4, 0xe1, 0xaa, 0xad, 0xda, 0xa9, 0xc8, 0x85, 0x80, + 0x07, 0x31, 0xe5, 0x2f, 0xc9, 0xb6, 0xb5, 0x5f, 0x5d, 0xef, 0x27, 0x24, 0x6e, 0xce, 0xcc, 0xef, + 0xa1, 0x52, 0x3e, 0x9f, 0x4f, 0x2d, 0xc7, 0x33, 0x65, 0x70, 0xfa, 0x49, 0x74, 0xbe, 0x37, 0x8e, + 0x3d, 0x40, 0x59, 0x6c, 0x6b, 0xd3, 0x30, 0xf1, 0x1b, 0x59, 0x55, 0x86, 0x8d, 0x2e, 0x2b, 0x65, + 0x02, 0x94, 0x45, 0xe3, 0x73, 0x8f, 0x32, 0x78, 0x18, 0x1b, 0x57, 0x60, 0x46, 0x1f, 0xe5, 0x57, + 0x6c, 0x14, 0x11, 0xe0, 0x73, 0x91, 0xa7, 0xc8, 0xec, 0x5a, 0x51, 0x6a, 0xaf, 0x43, 0x76, 0x2f, + 0x2f, 0x35, 0x91, 0xb9, 0x47, 0x5e, 0x5b, 0xdb, 0x4e, 0x7a, 0xc5, 0x8a, 0xd7, 0x8b, 0x8f, 0x35, + 0x4e, 0xa0, 0x00, 0xd9, 0x31, 0x84, 0xf7, 0xa5, 0xfa, 0x34, 0x9b, 0xf9, 0x6f, 0xab, 0xa1, 0x21, + 0x59, 0x37, 0xa2, 0xd0, 0x1f, 0x2c, 0x37, 0xcf, 0x77, 0x0a, 0x44, 0xcb, 0x0d, 0x82, 0xca, 0x61, + 0xd3, 0xf5, 0xcf, 0xf4, 0x63, 0x03, 0xfc, 0x82, 0xfa, 0xf7, 0x21, 0xb1, 0x4e, 0x48, 0x01, 0xba, + 0x4a, 0x15, 0x31, 0xb3, 0xe9, 0xf6, 0xa3, 0xe0, 0x4d, 0xe0, 0x14, 0x95, 0x8d, 0x0d, 0x60, 0xfc, + 0x93, 0x6a, 0xd0, 0x85, 0xdb, 0xfc, 0xd3, 0xef, 0x8f, 0xc7, 0xe0, 0xc1, 0x09, 0xec, 0xbc, 0x3f, + 0x21, 0x10, 0x32, 0x25, 0x02, 0xe5, 0x10, 0x9f, 0xc5, 0x0a, 0xbb, 0x53, 0xec, 0x84, 0x07, 0xc9, + 0x86, 0x76, 0xd7, 0x3f, 0xad, 0x29, 0x59, 0x25, 0x9c, 0x2a, 0x13, 0xb8, 0xf0, 0xf0, 0xfe, 0xd1, + 0xb6, 0x7a, 0xc2, 0xe9, 0x05, 0x4b, 0x56, 0x0b, 0x3a, 0x76, 0xb1, 0xfd, 0xff, 0x98, 0xa7, 0xce, + 0x4a, 0x48, 0xc1, 0x23, 0xef, 0x70, 0x53, 0x4c, 0x5b, 0xf4, 0xca, 0x69, 0x11, 0x5a, 0x83, 0x6c, + 0x55, 0x5b, 0xa0, 0x93, 0x99, 0xf0, 0x80, 0x89, 0x69, 0xdc, 0xc2, 0xd1, 0xe4, 0x9b, 0xa4, 0xf1, + 0x35, 0xcf, 0x4d, 0xfc, 0xdf, 0x7d, 0xcf, 0xf4, 0xc4, 0xf2, 0xf0, 0xe2, 0x45, 0x97, 0x1a, 0x0d, + 0x1e, 0x48, 0x94, 0x79, 0x71, 0x4e, 0xd2, 0x2b, 0x52, 0x3d, 0xf0, 0x99, 0x45, 0x2f, 0xcc, 0x04, + 0x8b, 0x2f, 0xfe, 0xee, 0x04, 0x44, 0x68, 0xc8, 0xd6, 0x55, 0xca, 0xb0, 0xcc, 0xd9, 0xa0, 0xd6, + 0x88, 0x55, 0xae, 0x6b, 0x37, 0x10, 0x37, 0xef, 0xdc, 0xeb, 0xb6, 0x1d, 0xbe, 0x06, 0x86, 0x22, + 0x72, 0xc8, 0x5e, 0x82, 0x60, 0x6c, 0x52, 0x60, 0xe6, 0x8c, 0xf6, 0x05, 0xe8, 0x70, 0xa7, 0x9c, + 0x6d, 0xdd, 0x1d, 0x4c, 0xc0, 0xe7, 0x52, 0xad, 0xe6, 0x01, 0x80, 0x86, 0xb9, 0xc6, 0x2e, 0xfa, + 0x67, 0xf9, 0x56, 0xfe, 0x2f, 0x85, 0x0f, 0x88, 0xdb, 0xd8, 0x78, 0x3d, 0xeb, 0x43, 0x0f, 0xb2, + 0x94, 0x76, 0x9e, 0x97, 0x17, 0x25, 0x2a, 0x37, 0xba, 0x4a, 0x8f, 0x11, 0x1d, 0x8e, 0x3f, 0x49, + 0x74, 0xc7, 0xa4, 0x07, 0xa2, 0xdc, 0x39, 0xe9, 0x87, 0x6e, 0x88, 0xf2, 0x8e, 0x85, 0xc9, 0x15, + 0xa8, 0x44, 0x75, 0x3b, 0xa6, 0xab, 0xa8, 0x1b, 0xb7, 0xaf, 0xd3, 0x41, 0x9f, 0x61, 0x2b, 0xe5, + 0x8c, 0xc9, 0x59, 0x13, 0xf2, 0xca, 0xf0, 0x38, 0x80, 0x53, 0x05, 0x0a, 0xde, 0xeb, 0x49, 0x1d, + 0xda, 0xaf, 0xc4, 0x9b, 0x40, 0x0a, 0x82, 0x08, 0xc6, 0x1d, 0x91, 0x79, 0xb2, 0x18, 0xfe, 0xea, + 0xf9, 0x29, 0xf9, 0x78, 0x3a, 0xe8, 0x8c, 0xca, 0x96, 0x1b, 0x10, 0x58, 0x1d, 0xfb, 0xdb, 0xe5, + 0x0b, 0x1f, 0xf0, 0x34, 0xfe, 0x76, 0xf8, 0xce, 0x05, 0xa3, 0xe2, 0x9e, 0x77, 0x42, 0x0f, 0xdb, + 0x38, 0x9d, 0xe7, 0x19, 0xd6, 0x11, 0xc1, 0x96, 0x56, 0xe1, 0xbc, 0xa5, 0x63, 0xd2, 0x1f, 0xc7, + 0x71, 0xc5, 0x44, 0xa9, 0x06, 0x03, 0x76, 0x98, 0xd5, 0x6c, 0xd0, 0xdd, 0x45, 0x13, 0x9f, 0xbc, + 0x0c, 0x11, 0x3d, 0xee, 0xec, 0x48, 0x16, 0x63, 0xf6, 0x05, 0x0c, 0x5f, 0x55, 0xbc, 0xfc, 0x1f, + 0x0a, 0xfe, 0xcd, 0x28, 0x7e, 0x4c, 0xe7, 0x88, 0x6b, 0x9f, 0x0c, 0xe1, 0x6c, 0x2d, 0x07, 0x00, + 0x46, 0x47, 0x37, 0x2b, 0x80, 0xd5, 0xe7, 0xa5, 0x3b, 0xdb, 0x73, 0x7c, 0x91, 0xa0, 0x6f, 0x15, + 0xfc, 0x38, 0x6e, 0x8f, 0xc7, 0x82, 0xfe, 0x79, 0x4a, 0x25, 0xa1, 0xf6, 0xa8, 0x1d, 0x8f, 0xa1, + 0x42, 0x90, 0x0a, 0x48, 0xa9, 0x21, 0xb3, 0x49, 0x24, 0x6b, 0xcb, 0x96, 0x81, 0x70, 0x87, 0x1f, + 0x38, 0x58, 0x46, 0x3f, 0x7b, 0x3b, 0xcb, 0x36, 0x99, 0xa6, 0x45, 0xcd, 0x6c, 0xc1, 0x8f, 0x6a, + 0xf0, 0xed, 0xfe, 0x4a, 0x2c, 0xbd, 0x3d, 0x27, 0x61, 0x62, 0x07, 0xbe, 0x50, 0x18, 0x21, 0x1c, + 0xd0, 0x06, 0x2b, 0x56, 0xd1, 0x21, 0xd2, 0x03, 0xab, 0xc2, 0xbe, 0xb1, 0xe2, 0x45, 0x11, 0x50, + 0x57, 0xb6, 0x2a, 0xe0, 0x7d, 0x9d, 0x49, 0xc2, 0xc6, 0x07, 0xba, 0xf5, 0x91, 0x2b, 0xc2, 0x99, + 0x83, 0x73, 0xdc, 0xa0, 0x0a, 0x9a, 0x0f, 0xde, 0xeb, 0x6f, 0xd1, 0x72, 0x1e, 0xeb, 0x19, 0x79, + 0xaa, 0x96, 0xe2, 0xc3, 0xec, 0xa9, 0x55, 0x17, 0xfb, 0x9e, 0x51, 0x48, 0xf7, 0x2e, 0xf7, 0xfc, + 0x58, 0xe4, 0xcb, 0xbe, 0x4f, 0x42, 0x15, 0x90, 0x3c, 0x91, 0x15, 0x68, 0x45, 0xc2, 0x9e, 0x0d, + 0x0e, 0x91, 0x41, 0x7e, 0x7f, 0x69, 0x9b, 0x8b, 0xfd, 0x93, 0xfd, 0x89, 0xce, 0xf3, 0xca, 0x06, + 0x14, 0xf0, 0x2a, 0x1a, 0xfc, 0x84, 0x07, 0xb9, 0x27, 0x07, 0xfa, 0xa1, 0x04, 0x8a, 0xe2, 0x81, + 0x1a, 0x1f, 0x94, 0x18, 0x3b, 0x12, 0xed, 0x8d, 0x87, 0x2a, 0x2d, 0xe7, 0xb7, 0x1d, 0x83, 0x36, + 0x2d, 0x14, 0x33, 0xe3, 0x89, 0x34, 0x15, 0x87, 0xc6, 0xe4, 0x71, 0x3c, 0x45, 0xd0, 0xf7, 0x8d, + 0xb5, 0xd0, 0xf0, 0x29, 0x3e, 0x15, 0x80, 0x4b, 0xd7, 0x26, 0x18, 0x95, 0x21, 0xad, 0xbf, 0x9e, + 0x28, 0xc4, 0xdd, 0x15, 0xf7, 0xf8, 0x7d, 0x92, 0xa5, 0xe8, 0xbb, 0xad, 0x5d, 0xc7, 0xff, 0x92, + 0xfe, 0xe1, 0x76, 0x52, 0xb4, 0xab, 0x4a, 0x14, 0x4e, 0xa2, 0xd4, 0xd0, 0xa3, 0x60, 0xb5, 0x3f, + 0xeb, 0x74, 0xd1, 0x89, 0xc7, 0x78, 0x2b, 0x49, 0x12, 0x75, 0xdf, 0xc6, 0x41, 0x05, 0xd0, 0x84, + 0x99, 0xbd, 0xe2, 0xbb, 0x16, 0xfa, 0x90, 0x96, 0xce, 0x88, 0xa7, 0x0e, 0xff, 0x93, 0xb1, 0xb1, + 0x81, 0x96, 0xfa, 0x17, 0xf5, 0xe0, 0x58, 0x1a, 0x7d, 0xb3, 0xeb, 0x40, 0x9b, 0xf7, 0xb2, 0x2d, + 0x9d, 0x88, 0xe9, 0x6e, 0x85, 0xc4, 0x18, 0xc3, 0xd5, 0xc7, 0xe4, 0xdb, 0x63, 0x2d, 0x96, 0xc8, + 0x91, 0x48, 0x53, 0xdd, 0xd1, 0x71, 0xd8, 0x90, 0x3b, 0x53, 0x24, 0x96, 0x11, 0xa1, 0x18, 0x7d, + 0x06, 0x2a, 0x72, 0x1f, 0x8e, 0x53, 0xfe, 0xf5, 0xf3, 0x80, 0x36, 0xd3, 0xfd, 0xe7, 0x44, 0x1b, + 0x92, 0x81, 0x53, 0x69, 0xc9, 0x19, 0x1d, 0x25, 0x0b, 0x75, 0xf9, 0x1f, 0x6d, 0x1e, 0x57, 0x26, + 0x20, 0xe0, 0x35, 0xd4, 0x1d, 0xd7, 0x4c, 0xf4, 0x6c, 0x76, 0xcd, 0xf5, 0x7e, 0x3b, 0x30, 0x5d, + 0x26, 0x57, 0x53, 0x60, 0xcb, 0x7f, 0x2d, 0xa8, 0xa9, 0x71, 0x2f, 0xbe, 0xed, 0xec, 0x06, 0xb6, + 0xaf, 0x75, 0x8f, 0x99, 0x8e, 0x21, 0x62, 0x22, 0x59, 0x40, 0xa9, 0xdf, 0xfa, 0xd5, 0x4a, 0x81, + 0x37, 0x37, 0xea, 0x37, 0x4c, 0xc6, 0x1a, 0xdc, 0x04, 0x09, 0xed, 0x14, 0x3d, 0xc7, 0x5e, 0x5e, + 0xb7, 0x50, 0x2d, 0xd4, 0x8d, 0x44, 0x9b, 0x44, 0x47, 0x7e, 0xc8, 0xc4, 0xcc, 0x9c, 0x65, 0xb2, + 0x09, 0xe7, 0x7a, 0x42, 0xdc, 0x74, 0xd2, 0xed, 0xa8, 0x7b, 0x87, 0x8f, 0x93, 0x78, 0x47, 0x12, + 0x79, 0x8d, 0x3a, 0xe0, 0x83, 0x05, 0x75, 0x50, 0xea, 0xdb, 0x7d, 0x23, 0xc3, 0xc0, 0x83, 0x40, + 0x87, 0x79, 0x20, 0xdb, 0x5b, 0x9d, 0xa4, 0xad, 0x1c, 0x45, 0xa1, 0x19, 0x27, 0x2e, 0x7e, 0x13, + 0xb3, 0xef, 0xf2, 0xb7, 0x77, 0x39, 0x26, 0x65, 0xc9, 0x08, 0x4e, 0xef, 0x6c, 0x50, 0xd9, 0xeb, + 0x6f, 0xd5, 0xe1, 0xc7, 0xe0, 0xe4, 0x4d, 0xe2, 0x5a, 0xbd, 0x27, 0xa6, 0x11, 0xcf, 0x73, 0x2e, + 0xba, 0x4f, 0x0f, 0x51, 0x63, 0x1a, 0x8c, 0xc2, 0x29, 0x8f, 0x1d, 0x66, 0xb0, 0xaf, 0xf2, 0xf6, + 0x23, 0x05, 0xf2, 0xe5, 0xd3, 0x6b, 0x26, 0x23, 0xbb, 0xf4, 0x68, 0x78, 0x84, 0x8d, 0x3f, 0x64, + 0x21, 0x03, 0xac, 0x6c, 0xf3, 0xab, 0x35, 0x47, 0x4c, 0x53, 0xb8, 0xd8, 0x09, 0xb0, 0x3e, 0x60, + 0xf4, 0xff, 0xa5, 0x62, 0x8e, 0x32, 0x34, 0x08, 0xce, 0xe3, 0xbb, 0x1e, 0xfb, 0x9c, 0xb5, 0x14, + 0xe5, 0xe0, 0x7d, 0x91, 0x2d, 0xf9, 0x9f, 0x09, 0xa2, 0xb0, 0x00, 0x51, 0x41, 0x45, 0x3f, 0x94, + 0xaa, 0x98, 0x11, 0xb6, 0x19, 0xea, 0xd0, 0x3a, 0x41, 0x8e, 0x63, 0x08, 0x7c, 0x8f, 0x2e, 0xce, + 0xab, 0xef, 0x0b, 0xaa, 0xdd, 0xeb, 0xa2, 0xa6, 0xe1, 0x55, 0x9a, 0xa4, 0x98, 0xfa, 0xdb, 0xc2, + 0xb9, 0x58, 0xb3, 0x90, 0xd9, 0x19, 0x54, 0x64, 0xa6, 0xde, 0x95, 0x96, 0xa7, 0xa4, 0x1d, 0x33, + 0xb2, 0x29, 0x3e, 0xea, 0x95, 0x9a, 0x24, 0x63, 0x06, 0xea, 0x9f, 0x88, 0x0c, 0xfa, 0x8b, 0x0f, + 0x6d, 0x41, 0x6b, 0xf7, 0x4e, 0x43, 0x49, 0xac, 0xdc, 0x57, 0xbe, 0x52, 0x10, 0x99, 0xd8, 0x83, + 0xe9, 0x6d, 0x6e, 0x43, 0x4b, 0x86, 0xc5, 0xdc, 0xa4, 0x21, 0x82, 0x85, 0xdf, 0x62, 0xe3, 0x00, + 0x06, 0x97, 0x00, 0xb2, 0x56, 0x77, 0x67, 0x0d, 0x57, 0x6d, 0x2f, 0x6a, 0xc7, 0xe2, 0xdd, 0x75, + 0x14, 0xc9, 0x04, 0x31, 0x95, 0xa6, 0xe0, 0xf7, 0x24, 0x3a, 0xed, 0x26, 0xf6, 0x7c, 0x50, 0x3b, + 0xb4, 0xc3, 0x0c, 0x95, 0x9d, 0xea, 0x46, 0x7d, 0xb3, 0xca, 0x3c, 0x16, 0x73, 0x67, 0x1c, 0xfc, + 0x87, 0xf9, 0x6a, 0x30, 0xf9, 0x7c, 0x6e, 0xed, 0xfb, 0x45, 0xc7, 0x58, 0x58, 0x28, 0x89, 0xa8, + 0x8d, 0x98, 0x58, 0x3c, 0x1d, 0x82, 0x59, 0x3e, 0xf9, 0x94, 0x9e, 0x87, 0x2d, 0x2d, 0xc9, 0x80, + 0xa9, 0xde, 0xe0, 0x06, 0x36, 0x2c, 0x1e, 0x1b, 0xba, 0xc5, 0x20, 0x9d, 0x74, 0x65, 0x41, 0x94, + 0x76, 0x6e, 0xe3, 0x0b, 0x88, 0xb5, 0x0f, 0xcc, 0x73, 0x89, 0x74, 0x9c, 0x43, 0x6a, 0x0b, 0x44, + 0xe1, 0x16, 0xd7, 0xc0, 0xd4, 0xbe, 0xab, 0x59, 0xbf, 0xe8, 0x9f, 0x91, 0xa6, 0x30, 0x44, 0x42, + 0xf1, 0xf2, 0x6a, 0xe9, 0x52, 0x6f, 0xb0, 0x22, 0x05, 0xd6, 0x6f, 0xff, 0x6f, 0x84, 0xf5, 0xa3, + 0x6e, 0x4a, 0x75, 0x65, 0xfd, 0xb3, 0x66, 0xcf, 0xb2, 0x50, 0xc8, 0x3d, 0x58, 0xa5, 0xcd, 0x64, + 0x44, 0x5a, 0x5a, 0x29, 0xc4, 0x1e, 0x7b, 0x79, 0x94, 0x03, 0x72, 0x5c, 0x6b, 0x44, 0x32, 0x3a, + 0x3f, 0x56, 0xac, 0xbb, 0xae, 0x93, 0xd6, 0xd9, 0x36, 0x52, 0x01, 0x4a, 0xb9, 0x69, 0x84, 0x12, + 0x5a, 0x7b, 0xcc, 0x0f, 0xf3, 0x91, 0x69, 0x43, 0x3d, 0x61, 0x05, 0x6f, 0x17, 0x65, 0xcf, 0xce, + 0xc6, 0xc9, 0xab, 0xc4, 0xdb, 0xec, 0x4c, 0x91, 0xf4, 0xea, 0x29, 0xf4, 0x71, 0x3a, 0xd6, 0xef, + 0x75, 0x7e, 0xca, 0x79, 0x1c, 0x06, 0x97, 0x99, 0x74, 0xf3, 0xec, 0x89, 0x23, 0x2a, 0x54, 0xdc, + 0x20, 0xd4, 0x13, 0x00, 0x38, 0x1b, 0x1a, 0xd4, 0x62, 0x23, 0x0f, 0x0c, 0x5f, 0x57, 0x06, 0x28, + 0xf1, 0x5a, 0xe9, 0x07, 0xd5, 0x0c, 0x75, 0x29, 0x94, 0x4d, 0x48, 0x4b, 0x95, 0x9b, 0xa9, 0x33, + 0x89, 0x12, 0x6b, 0xe4, 0x0a, 0x89, 0x28, 0x3e, 0x96, 0xbf, 0xb8, 0x81, 0x75, 0xbd, 0xe9, 0xdd, + 0x74, 0xab, 0x94, 0x12, 0x65, 0x0d, 0x7c, 0x65, 0x1b, 0x63, 0x6c, 0x1d, 0xc9, 0x08, 0x42, 0xdf, + 0x49, 0x69, 0x96, 0x0d, 0x61, 0x71, 0x24, 0x83, 0xca, 0x1e, 0xbd, 0x51, 0xb0, 0x19, 0x83, 0xd9, + 0xcd, 0x20, 0xaa, 0x2f, 0xec, 0x9e, 0x53, 0x43, 0xfc, 0xea, 0x99, 0x84, 0x33, 0x02, 0x67, 0xef, + 0x12, 0x5d, 0xcc, 0x3f, 0xf1, 0x86, 0xab, 0x7d, 0x24, 0xdd, 0xfc, 0xd8, 0x81, 0xf7, 0x27, 0xea, + 0xef, 0xf7, 0x5d, 0x3e, 0x08, 0xb7, 0x1a, 0xb9, 0xf8, 0xce, 0x97, 0xa8, 0xb8, 0x88, 0x9a, 0xa1, + 0x32, 0xa7, 0x27, 0x59, 0xcd, 0xc4, 0x64, 0xdc, 0xb4, 0xcc, 0x45, 0x5d, 0xa4, 0xd1, 0x33, 0x5a, + 0x05, 0x4c, 0xc9, 0x62, 0x48, 0x8d, 0x8c, 0x9d, 0x78, 0x96, 0x6c, 0xaf, 0x4b, 0xf6, 0xe0, 0x7e, + 0x55, 0x4b, 0xdf, 0x75, 0x70, 0x91, 0xb7, 0xb1, 0x4f, 0x8b, 0xaa, 0x86, 0x7f, 0x6c, 0x1d, 0xeb, + 0xa0, 0x05, 0xcd, 0xf4, 0xe7, 0x22, 0x3a, 0xdb, 0xd4, 0xdd, 0x4a, 0xa3, 0x2f, 0xe7, 0x09, 0xff, + 0xa5, 0xf3, 0x40, 0x77, 0x27, 0x6e, 0xbf, 0x79, 0x50, 0xed, 0x5f, 0x33, 0xd2, 0xc8, 0x78, 0xdf, + 0x59, 0xa9, 0xab, 0xe3, 0x2c, 0xc0, 0xd5, 0x6e, 0x3c, 0x31, 0xa7, 0x63, 0x40, 0xcf, 0x93, 0x99, + 0xd3, 0x8d, 0xa4, 0x05, 0x13, 0x9e, 0xbc, 0x33, 0xbd, 0x7d, 0xda, 0x5b, 0x26, 0xe8, 0x13, 0x23, + 0x3c, 0x25, 0x44, 0xf1, 0x4a, 0x6c, 0x55, 0xaa, 0x2a, 0x40, 0x8b, 0x7b, 0x87, 0x66, 0x8a, 0xad, + 0x6d, 0x3d, 0x37, 0x67, 0xb9, 0x69, 0x2a, 0xe7, 0x79, 0x72, 0x7a, 0xfa, 0x22, 0xc8, 0x96, 0x12, + 0x57, 0xfa, 0xa0, 0x63, 0x3e, 0x6f, 0x1c, 0x3c, 0x29, 0x1e, 0xe4, 0xbb, 0xcb, 0x78, 0xc5, 0xee, + 0x0b, 0x27, 0xce, 0xb0, 0xb2, 0xf7, 0x19, 0x83, 0xdb, 0x20, 0x6a, 0xc8, 0x0c, 0x46, 0x7c, 0x5d, + 0x41, 0x06, 0xc3, 0xc1, 0xe9, 0x8f, 0x3e, 0x4e, 0x2e, 0xa2, 0x9b, 0xe1, 0xa1, 0xea, 0xfd, 0x75, + 0x3f, 0xa2, 0xba, 0x43, 0xb7, 0x57, 0x94, 0xb1, 0xcd, 0xf8, 0x96, 0x16, 0xf2, 0xe5, 0x65, 0x12, + 0xea, 0x54, 0xab, 0x93, 0x5c, 0x54, 0x52, 0x08, 0x5b, 0xd3, 0x47, 0x45, 0xb1, 0x11, 0xbc, 0xec, + 0xf7, 0x47, 0x9a, 0x91, 0x3b, 0x7a, 0x0b, 0x72, 0x86, 0x5a, 0xc8, 0x1d, 0xef, 0xb4, 0xff, 0xd8, + 0x48, 0x1d, 0x9f, 0x97, 0xcc, 0x84, 0x7f, 0x93, 0x4f, 0xca, 0xbc, 0x9d, 0xc0, 0x49, 0x31, 0x72, + 0x37, 0x5e, 0x07, 0xbb, 0x00, 0x14, 0xaa, 0xef, 0xc6, 0x5f, 0x2f, 0x50, 0x8f, 0x68, 0xdb, 0x5e, + 0xf4, 0x4b, 0x18, 0xe3, 0x53, 0x4b, 0x33, 0xfe, 0xa4, 0xf7, 0x0e, 0xe7, 0x45, 0x87, 0xc7, 0x7b, + 0x3e, 0x1e, 0xf5, 0x50, 0x07, 0x7c, 0x8c, 0xd4, 0x8e, 0xfb, 0xc8, 0x4c, 0x26, 0x33, 0x8a, 0xe4, + 0xea, 0xb9, 0xec, 0x5d, 0x14, 0xd4, 0xa7, 0xcd, 0xba, 0x41, 0x84, 0x9d, 0x14, 0x47, 0x77, 0xab, + 0x97, 0xc0, 0x27, 0xb4, 0x73, 0xd1, 0xd4, 0xde, 0x79, 0xee, 0x74, 0xa7, 0xee, 0x92, 0xa6, 0xaf, + 0x39, 0xc7, 0xd7, 0x86, 0xca, 0xcc, 0x27, 0x40, 0x64, 0x27, 0x46, 0x74, 0xbc, 0xf3, 0xc2, 0x25, + 0x43, 0x0d, 0x73, 0x4c, 0x9a, 0x1d, 0xc4, 0x1a, 0x4e, 0x0a, 0xb6, 0xb9, 0x17, 0x9e, 0xc9, 0x7e, + 0x4c, 0x18, 0x13, 0x3b, 0xf0, 0xb1, 0xe1, 0x3b, 0x3d, 0x42, 0x03, 0xf3, 0x83, 0x47, 0x6b, 0x95, + 0xc9, 0x03, 0x5e, 0xaa, 0xb6, 0xbb, 0x33, 0x40, 0x5a, 0x7c, 0x45, 0xad, 0x09, 0x59, 0xf5, 0xfe, + 0x6d, 0x2a, 0x04, 0xb2, 0x54, 0x78, 0x8f, 0x29, 0x1d, 0x15, 0xc1, 0x1a, 0x06, 0x96, 0xb5, 0xb9, + 0x21, 0x11, 0xc3, 0xe9, 0xc7, 0x7b, 0xc5, 0xc1, 0x1e, 0x18, 0x3d, 0x85, 0x9c, 0x28, 0xc2, 0xc2, + 0x2e, 0x2d, 0xdd, 0x54, 0x17, 0x56, 0x78, 0x86, 0x81, 0x6e, 0x83, 0x9c, 0x4f, 0x32, 0x76, 0x2f, + 0xf4, 0x5f, 0xea, 0xf0, 0x7e, 0xdf, 0xea, 0x8b, 0x34, 0xcb, 0x4f, 0x09, 0xdf, 0x29, 0x4b, 0xd5, + 0x00, 0x54, 0x43, 0x4c, 0x40, 0x9e, 0x23, 0x2e, 0xcf, 0xad, 0x83, 0x85, 0xa0, 0x42, 0xef, 0xcc, + 0x55, 0xac, 0xd5, 0x46, 0xb7, 0xc4, 0x50, 0x09, 0xef, 0x01, 0x72, 0xbc, 0x48, 0x51, 0x8e, 0xda, + 0xec, 0xad, 0xae, 0x80, 0xac, 0xf6, 0xdc, 0x77, 0x45, 0xa2, 0x40, 0xc2, 0x0e, 0x8a, 0x66, 0x08, + 0x1b, 0x9a, 0xd7, 0x63, 0xee, 0x3d, 0x1b, 0xe6, 0xdf, 0xfa, 0xcc, 0x77, 0x35, 0xdc, 0xd3, 0x29, + 0x9c, 0x24, 0x03, 0xb6, 0x42, 0xa2, 0x93, 0xd5, 0xfc, 0xbc, 0x13, 0x73, 0x3d, 0x6b, 0x8b, 0xe8, + 0xb1, 0x07, 0xb3, 0x65, 0xa0, 0x61, 0x1a, 0x17, 0x4d, 0x06, 0x1a, 0x90, 0x79, 0x29, 0x9f, 0xdb, + 0xc0, 0xb4, 0x9b, 0xe7, 0x83, 0x03, 0xc2, 0xb2, 0xc9, 0x54, 0x4f, 0xaf, 0x79, 0x10, 0x83, 0xbf, + 0x42, 0x2a, 0x9a, 0x77, 0x97, 0x3b, 0x5b, 0x96, 0xb2, 0xf5, 0x74, 0x75, 0x14, 0xa2, 0xf3, 0x93, + 0xec, 0xba, 0x49, 0x7f, 0x6d, 0x76, 0xc8, 0x13, 0x7d, 0x97, 0x68, 0x74, 0x4b, 0x42, 0xed, 0x83, + 0xd2, 0x64, 0x96, 0xf1, 0x8b, 0xd3, 0x54, 0xbd, 0x1f, 0x89, 0x6e, 0xa8, 0x97, 0x8a, 0x1b, 0x5c, + 0xed, 0x1e, 0x8b, 0x99, 0x8e, 0xe0, 0xcc, 0x02, 0x51, 0x2b, 0x7f, 0xa7, 0xe0, 0x7a, 0x41, 0xa6, + 0xb1, 0xd9, 0x50, 0x47, 0x47, 0x0f, 0xcc, 0x1b, 0x22, 0x61, 0x22, 0x11, 0x0b, 0xe1, 0x6b, 0xb0, + 0x0d, 0x2b, 0x12, 0xf6, 0x26, 0x92, 0x00, 0x9c, 0x2f, 0x48, 0xba, 0x07, 0x78, 0xec, 0x1d, 0x51, + 0xa9, 0xe9, 0x14, 0xb8, 0x6a, 0xcd, 0x7c, 0xf5, 0x52, 0xee, 0xff, 0x47, 0x61, 0x40, 0x99, 0x12, + 0x31, 0xf8, 0xe4, 0xfd, 0x47, 0x99, 0xba, 0xe6, 0x4b, 0xd2, 0x86, 0x8e, 0xcb, 0x51, 0x91, 0x15, + 0xe5, 0x93, 0x09, 0x8e, 0xb2, 0xff, 0xce, 0xea, 0xbd, 0x19, 0x21, 0x09, 0xb5, 0xf6, 0xc6, 0x49, + 0x90, 0x50, 0x2f, 0x39, 0x14, 0xa1, 0x13, 0xb3, 0x96, 0x1d, 0x2d, 0xd0, 0xb6, 0x48, 0x19, 0xc6, + 0xd1, 0x23, 0x93, 0xca, 0xa8, 0xb5, 0x26, 0x3b, 0x34, 0x3f, 0x61, 0x6c, 0x03, 0x52, 0xf8, 0x8c, + 0xd7, 0x04, 0xc2, 0xa4, 0x92, 0x2c, 0x38, 0xfe, 0x3f, 0xb7, 0xf3, 0xb6, 0x57, 0x0d, 0x9f, 0x06, + 0xc0, 0x32, 0x00, 0xf0, 0x4e, 0x46, 0x9c, 0xba, 0x88, 0x85, 0x31, 0x1d, 0x7f, 0x5c, 0x81, 0x54, + 0x8a, 0x3f, 0x4d, 0x47, 0xce, 0xab, 0x2c, 0xe9, 0x76, 0x21, 0xb3, 0x80, 0x71, 0x56, 0x03, 0x12, + 0x06, 0x4d, 0xd4, 0x76, 0x64, 0xa0, 0x8c, 0xc6, 0xb0, 0xdd, 0x81, 0xd6, 0x6d, 0x34, 0x1b, 0xf9, + 0x97, 0xe9, 0xaa, 0x7e, 0x2c, 0xc1, 0x12, 0x58, 0x38, 0x26, 0xbe, 0x1d, 0xa9, 0xa0, 0x16, 0xec, + 0xc5, 0xcf, 0x74, 0xcd, 0xbf, 0x6a, 0x59, 0xdf, 0x78, 0x8e, 0xc1, 0x57, 0xf5, 0xaa, 0x8d, 0x5e, + 0x67, 0x1a, 0x24, 0x02, 0x5f, 0xca, 0xea, 0x89, 0xda, 0xd9, 0xad, 0x7a, 0x7c, 0x22, 0x53, 0x27, + 0x15, 0xa4, 0x83, 0x83, 0x22, 0xf7, 0xa8, 0x55, 0xf4, 0x33, 0x43, 0x1e, 0x65, 0xf6, 0x74, 0x80, + 0x15, 0x04, 0x6c, 0x11, 0x98, 0x10, 0xbe, 0xfc, 0x0f, 0x5e, 0x81, 0xfb, 0x47, 0x9d, 0xc0, 0x39, + 0x57, 0x20, 0x52, 0x5e, 0xa3, 0x84, 0xb3, 0x33, 0xf0, 0x2e, 0x16, 0x62, 0x3a, 0x90, 0x1b, 0xd9, + 0x24, 0x7a, 0x95, 0x75, 0xe1, 0x4f, 0xe7, 0x5d, 0xb1, 0x25, 0x63, 0xf8, 0x0c, 0x33, 0x22, 0xcb, + 0xe0, 0xe3, 0x9b, 0x25, 0x97, 0x24, 0x8a, 0x13, 0xc8, 0x06, 0xb7, 0xfc, 0x59, 0xfb, 0x6e, 0x36, + 0xa9, 0x0f, 0xd9, 0x21, 0x26, 0xad, 0x3d, 0x3c, 0x7d, 0xcd, 0xbc, 0xa9, 0xc0, 0xc6, 0xdd, 0xd7, + 0xee, 0x95, 0xfd, 0x4e, 0xb8, 0xdc, 0x62, 0xfa, 0x44, 0x8e, 0xe7, 0xe2, 0x78, 0x74, 0xd2, 0x9a, + 0x64, 0x9f, 0xfb, 0xa1, 0xf6, 0xc7, 0x7e, 0x2f, 0x08, 0xe2, 0x75, 0xc8, 0x49, 0xa7, 0x6d, 0x3d, + 0x66, 0x0b, 0x50, 0xfc, 0x62, 0x6e, 0x3d, 0x0c, 0x1e, 0xea, 0x3f, 0x5a, 0x45, 0x90, 0xec, 0xe8, + 0xf9, 0x53, 0xef, 0x76, 0x84, 0x0b, 0xff, 0xcd, 0x24, 0x1e, 0x64, 0x18, 0xc0, 0xd2, 0xf4, 0x11, + 0xa0, 0xe1, 0x1a, 0x7b, 0xec, 0xd6, 0xe8, 0x33, 0x6a, 0x76, 0xb1, 0xd6, 0x6f, 0x29, 0xf1, 0x08, + 0x7b, 0xa0, 0xdf, 0x54, 0x94, 0xfd, 0x02, 0x8f, 0x42, 0x79, 0x0b, 0xf1, 0x35, 0xca, 0xba, 0x20, + 0x19, 0x9a, 0x89, 0x6e, 0x27, 0x87, 0xd7, 0x4c, 0x89, 0x87, 0x28, 0x41, 0x2c, 0xe1, 0x58, 0xf6, + 0x84, 0x67, 0xcb, 0xbc, 0x9d, 0x9e, 0x63, 0x67, 0xbb, 0x0a, 0x8b, 0x0a, 0xaa, 0x0c, 0x90, 0xf8, + 0x55, 0x05, 0xc4, 0x67, 0x9a, 0x27, 0x1f, 0x92, 0xd0, 0xe1, 0xd1, 0x3f, 0xc5, 0xe4, 0xfc, 0xe0, + 0x00, 0xf8, 0x97, 0xb3, 0xc3, 0x09, 0xb6, 0x2a, 0x21, 0xe9, 0xe1, 0xad, 0xf2, 0x53, 0x30, 0x6b, + 0x49, 0x38, 0x1b, 0x19, 0xa1, 0xf7, 0xb8, 0xe1, 0x0c, 0x16, 0x4a, 0xf6, 0x6c, 0x61, 0x60, 0x7c, + 0x04, 0xf8, 0xb2, 0xca, 0x21, 0x4e, 0x4b, 0x88, 0x36, 0x57, 0xda, 0xd8, 0xc5, 0xc5, 0xfd, 0x68, + 0x59, 0x74, 0x40, 0x2a, 0x68, 0x69, 0x1e, 0x96, 0x43, 0x49, 0xc3, 0xdc, 0xae, 0xd0, 0x19, 0x92, + 0xb3, 0x0f, 0x9f, 0x47, 0xb1, 0x08, 0x63, 0x92, 0x17, 0xdf, 0xda, 0xa0, 0xec, 0x2f, 0x90, 0xe5, + 0x91, 0xef, 0x29, 0xd7, 0x3c, 0x23, 0x3f, 0xf8, 0x4b, 0xda, 0xad, 0x1b, 0xf4, 0x82, 0x72, 0xd9, + 0x82, 0x17, 0x7c, 0x82, 0xaf, 0x46, 0x21, 0xfb, 0x19, 0x85, 0x83, 0x3b, 0x30, 0x98, 0x38, 0x48, + 0x07, 0x97, 0x49, 0x18, 0x9c, 0x3b, 0x93, 0x19, 0xef, 0xba, 0x60, 0xdf, 0x27, 0xd7, 0x2d, 0x1f, + 0xdc, 0x07, 0xfe, 0xe2, 0x56, 0x81, 0xe8, 0xda, 0x95, 0x57, 0x83, 0x2c, 0xec, 0x0d, 0xa1, 0xbf, + 0x9e, 0x5a, 0xc5, 0xb7, 0x40, 0xb5, 0xcd, 0xc4, 0x6e, 0xfd, 0xf1, 0x87, 0x78, 0x98, 0x4d, 0xb4, + 0x2b, 0x8e, 0xee, 0x05, 0x41, 0xe0, 0xdd, 0x48, 0xe2, 0x5b, 0xae, 0x83, 0xd9, 0x1d, 0x6a, 0x12, + 0x64, 0x49, 0x35, 0x2f, 0xcb, 0x88, 0x80, 0xea, 0xed, 0x3a, 0x25, 0x1d, 0x53, 0x7a, 0x35, 0x92, + 0x85, 0x57, 0xd4, 0x8d, 0x4c, 0x82, 0xd5, 0x56, 0x2b, 0xa9, 0x5b, 0xfd, 0xb7, 0x87, 0xe2, 0x09, + 0x8d, 0x80, 0x6e, 0x9f, 0x20, 0x23, 0x05, 0x9e, 0x64, 0xf2, 0xfb, 0x73, 0x70, 0xae, 0x62, 0xf7, + 0x3c, 0xc6, 0x48, 0x1e, 0x30, 0xc5, 0x85, 0x6d, 0x16, 0xca, 0x14, 0xfd, 0xe7, 0x7b, 0xee, 0x1c, + 0x1f, 0x8b, 0x52, 0xd0, 0x81, 0xd9, 0x0d, 0x3d, 0xbe, 0xec, 0x27, 0xd2, 0xb3, 0x55, 0xbd, 0x43, + 0xed, 0x6a, 0x17, 0x57, 0x13, 0x6c, 0x39, 0x89, 0x41, 0xe1, 0xd3, 0x12, 0xbd, 0xda, 0x84, 0x94, + 0x32, 0x25, 0xb7, 0x63, 0x96, 0x5d, 0x68, 0x10, 0x59, 0x15, 0xe7, 0x36, 0x8f, 0x7b, 0x61, 0x09, + 0xe2, 0xfc, 0xdf, 0x50, 0xfe, 0xfa, 0x4c, 0xd7, 0xde, 0xd1, 0xe6, 0xfc, 0x6d, 0x61, 0xce, 0xc3, + 0xaf, 0x00, 0xcd, 0xce, 0x54, 0x05, 0x97, 0x62, 0xf2, 0x69, 0xe5, 0x85, 0x3f, 0xe1, 0xb6, 0xfe, + 0xfb, 0xd6, 0x6f, 0xbd, 0xed, 0x60, 0xaa, 0x87, 0x7c, 0xa6, 0xb1, 0x05, 0xf3, 0x9e, 0x9a, 0x88, + 0x95, 0xa9, 0x5b, 0x07, 0x4a, 0x74, 0x88, 0x63, 0x04, 0x11, 0x5f, 0x9e, 0x8e, 0x22, 0xbf, 0xb8, + 0x80, 0x1d, 0x55, 0xe7, 0x05, 0x6a, 0xb1, 0xdb, 0xf7, 0xb9, 0x26, 0x3e, 0x37, 0x94, 0xd9, 0xb8, + 0x25, 0x0b, 0x56, 0x8b, 0x42, 0x77, 0xd7, 0x30, 0xf9, 0x1d, 0x3f, 0x58, 0xec, 0xd9, 0xd9, 0xc4, + 0x8d, 0xc2, 0xe0, 0xb5, 0x6b, 0xaf, 0x3f, 0x94, 0x06, 0x4d, 0x72, 0x12, 0xc4, 0x77, 0xc5, 0xfb, + 0x07, 0x07, 0xd3, 0x71, 0x0d, 0x98, 0xe4, 0x4f, 0x3c, 0xda, 0x75, 0xa8, 0xb0, 0x53, 0x87, 0x2c, + 0xec, 0x1e, 0xe9, 0xb2, 0xfc, 0x8f, 0x8a, 0xa0, 0xbe, 0x0f, 0x40, 0xe2, 0xf4, 0xe7, 0x21, 0xf9, + 0x7c, 0x7a, 0x4d, 0xc0, 0x27, 0x53, 0xe3, 0xe1, 0x89, 0x60, 0x3d, 0x66, 0x66, 0x8e, 0xb1, 0xe0, + 0xfe, 0x09, 0xba, 0x54, 0xff, 0x08, 0xe0, 0x11, 0x10, 0x5c, 0x48, 0x12, 0x40, 0x8e, 0x47, 0x79, + 0xcd, 0x84, 0x63, 0x55, 0xfd, 0x66, 0xcc, 0x15, 0xd4, 0xcf, 0x24, 0x86, 0xc5, 0xc3, 0x38, 0x2b, + 0xd3, 0xba, 0xde, 0x40, 0xff, 0xe3, 0x75, 0xac, 0x7a, 0x3b, 0x4e, 0x1c, 0xe6, 0xdb, 0x2d, 0x9b, + 0x64, 0xa9, 0x71, 0xee, 0xa9, 0x42, 0xbb, 0xf1, 0x19, 0xe6, 0x99, 0x61, 0xa5, 0x7e, 0x63, 0xc9, + 0x53, 0xd9, 0xe6, 0x77, 0x0a, 0xcb, 0xe8, 0xac, 0x5e, 0x8d, 0xf1, 0x67, 0x47, 0xa4, 0xc1, 0xed, + 0x8b, 0x6e, 0x83, 0x4d, 0x05, 0x31, 0xc3, 0x6b, 0xbe, 0x2d, 0xc4, 0x54, 0x0d, 0x4a, 0x24, 0x3e, + 0xa6, 0xe2, 0xec, 0xb0, 0x5d, 0xad, 0x2e, 0xe9, 0x2d, 0x33, 0x2f, 0xf7, 0x4c, 0x1e, 0x17, 0x91, + 0x68, 0xbf, 0xe0, 0x99, 0xae, 0xda, 0x8f, 0x72, 0xe6, 0x53, 0x2b, 0xef, 0x7f, 0xe4, 0x4c, 0x89, + 0xc0, 0x67, 0xf9, 0x6f, 0xf3, 0x15, 0x35, 0x2e, 0x27, 0xe4, 0xa5, 0x79, 0x56, 0xce, 0x9c, 0xd5, + 0xd1, 0xdc, 0x62, 0x3f, 0x38, 0xe3, 0x27, 0x12, 0x1b, 0xc1, 0x45, 0x30, 0x70, 0x9f, 0x2a, 0x24, + 0xf0, 0x80, 0xd0, 0x99, 0x8d, 0x55, 0xc9, 0x59, 0xe7, 0xca, 0x4a, 0x72, 0xae, 0x55, 0xa4, 0xfb, + 0xae, 0x14, 0xec, 0x37, 0xcc, 0x85, 0x54, 0xe1, 0xcc, 0x68, 0xb7, 0x4b, 0x38, 0x94, 0x32, 0x5b, + 0x1b, 0xc7, 0x84, 0x27, 0xde, 0x14, 0x86, 0x3b, 0xc4, 0x2f, 0x9d, 0xb0, 0x24, 0xed, 0x8b, 0x87, + 0xe5, 0x55, 0x14, 0x46, 0x79, 0x78, 0x09, 0x48, 0xf8, 0xc0, 0x3e, 0xe6, 0xb6, 0x74, 0x54, 0x0d, + 0xe4, 0xe9, 0x5b, 0xd5, 0xa3, 0x0f, 0xff, 0x0b, 0x83, 0xb3, 0xf9, 0x8d, 0xc5, 0x23, 0xb8, 0x03, + 0x1c, 0x16, 0xbc, 0xdd, 0xea, 0x41, 0x56, 0xce, 0x5b, 0x0f, 0x02, 0x56, 0x31, 0x92, 0x04, 0x88, + 0x9c, 0x4a, 0x00, 0xd3, 0x89, 0x7c, 0x7d, 0x3f, 0x36, 0x8e, 0xfc, 0xf3, 0xf7, 0x5d, 0x61, 0x47, + 0xf9, 0x2a, 0xd7, 0x55, 0xf9, 0x84, 0xeb, 0x7e, 0x40, 0x74, 0xb3, 0x29, 0x65, 0x92, 0x63, 0x5a, + 0x50, 0x86, 0x5d, 0x8e, 0x00, 0x90, 0x04, 0x04, 0xd2, 0x28, 0x9a, 0x29, 0x47, 0x32, 0x81, 0x58, + 0x51, 0x62, 0x1c, 0x03, 0xeb, 0xfd, 0x0d, 0x0d, 0x82, 0x47, 0x09, 0xc3, 0x0b, 0x7d, 0x2c, 0xc5, + 0x8e, 0x1a, 0xca, 0xa5, 0x0c, 0xc0, 0xfd, 0x4f, 0x84, 0xfd, 0xbb, 0x7c, 0xb4, 0xc2, 0xb7, 0xae, + 0x29, 0x64, 0x5d, 0x2a, 0x1d, 0x83, 0x33, 0x96, 0x9b, 0x91, 0x69, 0xcb, 0x59, 0x1e, 0xaf, 0xd2, + 0x15, 0xd9, 0xc9, 0x02, 0xa3, 0x70, 0xb8, 0x11, 0x94, 0xdd, 0x46, 0x90, 0xf0, 0x79, 0xb4, 0x76, + 0xbf, 0xa2, 0xa3, 0x99, 0x1f, 0x23, 0x58, 0x5f, 0xa9, 0x8a, 0xa7, 0xce, 0x01, 0x31, 0x4f, 0x6a, + 0xa5, 0x78, 0xd4, 0x56, 0x68, 0x4f, 0xb9, 0xd4, 0x9a, 0x75, 0x2a, 0x83, 0x1d, 0xaa, 0xd1, 0xfb, + 0x11, 0xe9, 0xc2, 0xb1, 0xe4, 0xd8, 0x92, 0x5d, 0x43, 0x33, 0x93, 0x89, 0xea, 0x6b, 0x3c, 0x48, + 0x48, 0x39, 0x71, 0xf2, 0x92, 0xac, 0xb7, 0x65, 0xf4, 0x0b, 0xd4, 0x66, 0x78, 0xb1, 0x68, 0xca, + 0x02, 0xe9, 0xe5, 0x71, 0x53, 0xba, 0x38, 0x75, 0xd1, 0x9f, 0x64, 0xae, 0x14, 0x93, 0xf1, 0xe1, + 0xab, 0x7a, 0x1b, 0x82, 0x5e, 0x8a, 0x19, 0x2a, 0x6a, 0x8e, 0xc3, 0x94, 0x21, 0x33, 0xf7, 0xc6, + 0xdd, 0x33, 0xa9, 0x35, 0x1c, 0x22, 0x9f, 0xf7, 0x82, 0xca, 0xd1, 0x7a, 0x90, 0xa4, 0xbe, 0x54, + 0xd8, 0xfa, 0x08, 0xdd, 0xf0, 0xc0, 0x41, 0xf5, 0x88, 0x89, 0x1d, 0xe7, 0x01, 0x75, 0x6f, 0x5b, + 0x99, 0x9b, 0x58, 0xb2, 0xd6, 0xc3, 0x36, 0x71, 0x0c, 0x1e, 0x8a, 0xdc, 0xc5, 0x13, 0x0c, 0x1b, + 0xbf, 0x26, 0x9a, 0x2e, 0x27, 0x6a, 0x02, 0xa6, 0x95, 0x19, 0xe4, 0x4a, 0x5e, 0xfe, 0x8c, 0xb0, + 0xe4, 0xd7, 0x28, 0xe1, 0x5a, 0xf7, 0x51, 0x0f, 0x03, 0x64, 0xa1, 0x82, 0x19, 0x15, 0x88, 0x51, + 0xc5, 0x83, 0xe2, 0x1d, 0xa0, 0x76, 0x18, 0xa1, 0x3f, 0xc4, 0xa9, 0xe9, 0x06, 0x72, 0xdf, 0x02, + 0x2b, 0xa5, 0xb6, 0x9d, 0x9f, 0xd8, 0xc2, 0xb0, 0x4c, 0x35, 0x9f, 0x4e, 0x62, 0xe1, 0xe8, 0x69, + 0x35, 0xc7, 0xc3, 0xe4, 0xcb, 0x7e, 0x69, 0xdc, 0xfe, 0xff, 0xf9, 0xc7, 0xc2, 0x68, 0x23, 0x09, + 0x92, 0xa1, 0x28, 0xdc, 0xaa, 0xd0, 0x34, 0x34, 0x76, 0x9a, 0x7a, 0xd7, 0x89, 0xaf, 0xf3, 0xfd, + 0xc3, 0x65, 0xc4, 0x84, 0x3c, 0x20, 0xa4, 0x82, 0xd6, 0x6e, 0xa7, 0x57, 0x6b, 0x01, 0x0e, 0xb5, + 0x02, 0x4e, 0x20, 0x48, 0xbd, 0xf0, 0x2f, 0xc8, 0xa4, 0xc4, 0xe1, 0xcf, 0x38, 0x33, 0x8f, 0xe2, + 0xb5, 0x9d, 0xb7, 0x91, 0x5a, 0x89, 0x46, 0x6e, 0x8a, 0xd9, 0xc6, 0xc4, 0x6e, 0x8e, 0x39, 0x2a, + 0xdd, 0x08, 0x94, 0x4f, 0xd2, 0x16, 0x1a, 0xf9, 0xab, 0x00, 0x61, 0xb4, 0x8f, 0x28, 0xda, 0x76, + 0x27, 0xb9, 0x84, 0x76, 0x87, 0x81, 0x8f, 0x71, 0xf2, 0x77, 0x95, 0x04, 0xfb, 0x09, 0xed, 0x53, + 0x51, 0x13, 0x7c, 0x64, 0xcf, 0xf4, 0xdb, 0x8f, 0xbd, 0x05, 0x22, 0x90, 0x66, 0x8c, 0xb6, 0xf5, + 0xcc, 0xa8, 0xd2, 0x03, 0x6d, 0x6f, 0x0c, 0x3e, 0x24, 0x7d, 0x0f, 0x76, 0xa0, 0x15, 0xa5, 0xd7, + 0x9a, 0x3c, 0x94, 0x1d, 0xab, 0x88, 0x45, 0x45, 0x05, 0xe2, 0xab, 0x96, 0x95, 0x1b, 0x9e, 0x23, + 0xf7, 0xa7, 0xc5, 0x8c, 0x7f, 0x0a, 0xc2, 0xe9, 0x17, 0xf7, 0xe9, 0x49, 0x8d, 0x23, 0xdf, 0xea, + 0x1e, 0x29, 0xdb, 0x87, 0xc1, 0x11, 0x5a, 0x58, 0x25, 0xa4, 0x21, 0xb4, 0x52, 0xd8, 0xeb, 0xda, + 0x46, 0xb1, 0xe6, 0x5e, 0x77, 0xb6, 0x61, 0x60, 0xc0, 0x22, 0x5d, 0xd3, 0x1b, 0xb0, 0x51, 0xfc, + 0xb8, 0xbf, 0x53, 0x6b, 0x72, 0x77, 0xff, 0x4c, 0x52, 0x1b, 0xa2, 0xab, 0x56, 0x1b, 0x1e, 0xaf, + 0x4d, 0x3f, 0x1f, 0x12, 0xe5, 0x6c, 0x90, 0x2f, 0x63, 0x75, 0x5e, 0xc2, 0x9c, 0x24, 0x13, 0x0e, + 0x25, 0xbe, 0x3f, 0x38, 0x70, 0x15, 0x55, 0xb2, 0x73, 0x05, 0xba, 0x61, 0xe6, 0x25, 0xed, 0xbc, + 0x7c, 0xc8, 0xd8, 0xe8, 0x8d, 0xc9, 0xf3, 0xf3, 0x2b, 0xa0, 0x44, 0x31, 0xf3, 0x34, 0x88, 0x56, + 0x5c, 0x02, 0x60, 0x25, 0x11, 0x98, 0xd6, 0x6e, 0xea, 0x34, 0x79, 0xfe, 0xfa, 0xf5, 0x5d, 0x19, + 0xc9, 0xb3, 0x8b, 0x49, 0x5d, 0x66, 0x12, 0xde, 0x47, 0x53, 0x0a, 0x47, 0xb6, 0xf8, 0x86, 0x72, + 0xb7, 0x4b, 0xcf, 0x02, 0xae, 0xf6, 0x1a, 0xcb, 0x94, 0x0e, 0x53, 0xda, 0xb2, 0xff, 0x28, 0x0f, + 0x26, 0xbc, 0xfb, 0x9a, 0xcd, 0x5b, 0xf8, 0x17, 0xb0, 0x75, 0xf3, 0x43, 0xaf, 0xdb, 0xae, 0x9d, + 0x82, 0xb9, 0xd1, 0x37, 0xe6, 0x89, 0x84, 0x8a, 0x8e, 0x77, 0x26, 0x8e, 0x02, 0xc3, 0x5c, 0x47, + 0x1e, 0x65, 0x22, 0xff, 0xc6, 0x8f, 0x38, 0x0b, 0x40, 0xef, 0x90, 0x6e, 0xfe, 0xa1, 0x89, 0xd6, + 0x84, 0x3a, 0x5d, 0x2a, 0xad, 0xdb, 0x7a, 0xe5, 0x0f, 0x01, 0x6e, 0xfb, 0x85, 0xe5, 0x44, 0xec, + 0x6c, 0x5d, 0x98, 0x1d, 0xe9, 0x0d, 0x56, 0xf0, 0x00, 0x12, 0xe9, 0x1b, 0xca, 0xdb, 0x65, 0x49, + 0x40, 0x80, 0x15, 0x84, 0x63, 0xf6, 0xff, 0x66, 0x81, 0x96, 0xe7, 0xec, 0xcb, 0x53, 0x94, 0x5c, + 0x96, 0x0d, 0x28, 0xd5, 0x9d, 0xd9, 0x0e, 0xef, 0x38, 0x9d, 0x72, 0x42, 0x43, 0x71, 0x34, 0x67, + 0x85, 0x5a, 0xf4, 0xf5, 0xe4, 0x5c, 0xc3, 0xde, 0x36, 0x5e, 0xde, 0x97, 0x80, 0xc4, 0x7f, 0xc7, + 0x03, 0x1f, 0x56, 0xcd, 0x6f, 0x89, 0x06, 0xdd, 0xa9, 0x16, 0x5f, 0x8d, 0xf4, 0x38, 0x8c, 0x88, + 0xbe, 0xa9, 0xea, 0x0d, 0x56, 0xbc, 0xd1, 0xc6, 0x4a, 0x7e, 0xbb, 0xcd, 0x13, 0x57, 0x2d, 0x40, + 0x9e, 0xe9, 0xe3, 0xc7, 0xd2, 0x92, 0xc2, 0x23, 0xad, 0xd8, 0xb9, 0xe2, 0x87, 0xb6, 0x12, 0x2c, + 0x07, 0x5a, 0xbe, 0xb2, 0x37, 0x0f, 0x66, 0xda, 0x1a, 0x91, 0xa3, 0xda, 0x24, 0xb2, 0x68, 0xc0, + 0xde, 0x90, 0x91, 0xc4, 0x85, 0xa9, 0x28, 0x94, 0x21, 0xca, 0x24, 0x40, 0x1f, 0x09, 0xf0, 0x95, + 0x87, 0xcd, 0x22, 0x57, 0x4e, 0xfd, 0xc2, 0x69, 0x48, 0xa8, 0xd1, 0x31, 0xcb, 0xd2, 0x79, 0xea, + 0x6b, 0xc8, 0xd7, 0xe5, 0xad, 0xfc, 0x77, 0xb2, 0x2b, 0xc1, 0xcc, 0x1f, 0x52, 0x02, 0x11, 0x96, + 0xa9, 0xe9, 0x60, 0x80, 0x1d, 0xbf, 0x40, 0xb5, 0xd3, 0x9f, 0xd9, 0x03, 0x19, 0x53, 0x05, 0x76, + 0x5b, 0x69, 0x9f, 0x5d, 0x6e, 0x0b, 0xf6, 0x50, 0xcc, 0x76, 0xa6, 0x63, 0x23, 0x7b, 0xb4, 0x10, + 0x47, 0x45, 0xf1, 0xa2, 0x45, 0x25, 0x74, 0xc8, 0xf5, 0x58, 0xa3, 0xc8, 0xe8, 0xd0, 0x74, 0x7b, + 0x76, 0x8a, 0x55, 0x4a, 0x94, 0xe0, 0xdb, 0x50, 0x97, 0x17, 0xe9, 0x75, 0x09, 0xe6, 0x7d, 0x4b, + 0x39, 0x61, 0x8c, 0x59, 0x8e, 0x44, 0x32, 0xec, 0xd6, 0xcc, 0x67, 0x6b, 0xa9, 0x61, 0xb9, 0x81, + 0xbc, 0xdb, 0x86, 0xa3, 0x3d, 0x10, 0x95, 0xe4, 0x46, 0x7a, 0x3b, 0x06, 0x33, 0x28, 0x0f, 0xf7, + 0xbe, 0x1f, 0x2c, 0x49, 0x9a, 0xeb, 0x12, 0xeb, 0x9d, 0x27, 0x84, 0x38, 0x81, 0xe0, 0xcf, 0x96, + 0x1e, 0x0f, 0x21, 0x14, 0xc9, 0xe3, 0x68, 0xc6, 0x22, 0x83, 0x5c, 0x22, 0xf0, 0x93, 0xca, 0x33, + 0xfb, 0x93, 0x50, 0xba, 0x57, 0x16, 0x24, 0x34, 0x1e, 0x66, 0xe1, 0x8b, 0x4a, 0x1e, 0x7c, 0xc4, + 0x79, 0xf6, 0x1c, 0x1c, 0x90, 0x8f, 0xaf, 0xac, 0xb4, 0xb9, 0xa6, 0x8b, 0xbc, 0xd6, 0x9b, 0x2e, + 0x53, 0x6c, 0x89, 0x25, 0xcb, 0x61, 0x0f, 0xa9, 0x03, 0xd8, 0x5a, 0xbd, 0xf5, 0x27, 0xe5, 0x94, + 0x38, 0x51, 0xd3, 0x50, 0x18, 0x31, 0xfa, 0x9f, 0x53, 0x4f, 0x2f, 0xc7, 0x95, 0xe1, 0x65, 0xc7, + 0xd6, 0x9f, 0x7e, 0xcd, 0x83, 0x14, 0xd5, 0xf2, 0x38, 0x2a, 0x80, 0x61, 0xf4, 0xce, 0x3c, 0xab, + 0x4f, 0x98, 0x54, 0x48, 0x6c, 0xc9, 0x52, 0x0a, 0xc7, 0x96, 0x7e, 0x95, 0xd0, 0xd8, 0x0e, 0x3f, + 0xe0, 0x88, 0x3e, 0x5b, 0xe6, 0x1d, 0x03, 0xb5, 0xf5, 0x8d, 0x02, 0x6a, 0x27, 0xd5, 0x40, 0x7e, + 0xe8, 0xd4, 0x0a, 0xd4, 0xf2, 0xee, 0xc5, 0xe4, 0x16, 0x9a, 0xcc, 0xc6, 0x1e, 0x9a, 0xc0, 0xfa, + 0xe1, 0xec, 0xc1, 0x8e, 0x97, 0xe5, 0xf2, 0x1a, 0xae, 0x50, 0x74, 0x29, 0x2b, 0x1a, 0x86, 0xfd, + 0xef, 0xda, 0xfd, 0xd6, 0x66, 0x79, 0x84, 0xc8, 0x64, 0x0a, 0x78, 0x0c, 0x70, 0xda, 0x92, 0x54, + 0x94, 0x1c, 0xb2, 0x4c, 0x28, 0xdc, 0x05, 0xe5, 0xce, 0x46, 0xa3, 0xf3, 0xde, 0x58, 0x48, 0x92, + 0x3b, 0x99, 0x33, 0xb4, 0x76, 0xd6, 0x29, 0xc3, 0x77, 0xac, 0xbf, 0xcb, 0xb4, 0xc8, 0x00, 0x1b, + 0x7c, 0x31, 0xb4, 0x19, 0x51, 0xbf, 0x12, 0xce, 0x39, 0xb6, 0xed, 0x1c, 0x79, 0x71, 0x25, 0xa1, + 0x2a, 0x77, 0x32, 0x89, 0x62, 0xfd, 0x39, 0x4e, 0xd3, 0x15, 0xc4, 0x37, 0xcd, 0x38, 0x9d, 0x27, + 0x00, 0xac, 0xdb, 0x86, 0x23, 0x22, 0x6d, 0x24, 0x42, 0xf1, 0x82, 0x7c, 0x97, 0xda, 0x02, 0x47, + 0x7e, 0xc1, 0x84, 0x0d, 0xb2, 0x5f, 0x41, 0x1c, 0x76, 0x67, 0xdb, 0xf8, 0x56, 0xdb, 0x06, 0xdf, + 0xf5, 0x07, 0xc5, 0x75, 0xbf, 0xe9, 0x07, 0x73, 0x24, 0xac, 0xce, 0x1c, 0x5c, 0x7b, 0x38, 0xbf, + 0x5e, 0x1c, 0xf0, 0x20, 0x7d, 0x53, 0x4d, 0xfa, 0x5a, 0x96, 0x06, 0x86, 0xee, 0x38, 0x17, 0x9b, + 0x48, 0x8d, 0xce, 0x1e, 0x98, 0x59, 0x32, 0xab, 0xf1, 0xbe, 0x0e, 0x66, 0x3f, 0x38, 0xf1, 0x5d, + 0x8c, 0xa5, 0x3b, 0xbf, 0x31, 0x85, 0x28, 0x91, 0x02, 0x2a, 0xed, 0x06, 0x63, 0xed, 0x10, 0x24, + 0x7c, 0x3c, 0x25, 0xbd, 0x1e, 0x45, 0x38, 0xd1, 0x71, 0xa8, 0x68, 0xca, 0x51, 0x2e, 0x8c, 0xa5, + 0xec, 0x39, 0xb7, 0x3b, 0x5c, 0x1a, 0x1f, 0xc7, 0xc7, 0x48, 0xbd, 0x28, 0x2a, 0xbc, 0x24, 0xa6, + 0x12, 0xbe, 0xd4, 0x14, 0x05, 0xb1, 0xbe, 0x43, 0x5a, 0x4e, 0x58, 0xc9, 0x6e, 0xb9, 0x89, 0x7a, + 0x45, 0x69, 0x37, 0x4f, 0x6c, 0xd1, 0xc7, 0xf6, 0x43, 0x78, 0x8d, 0x53, 0x04, 0xba, 0xc1, 0xb7, + 0x80, 0xae, 0xe0, 0xcc, 0x90, 0x76, 0xe5, 0xc9, 0x2c, 0x26, 0x0f, 0x92, 0x22, 0xe4, 0x43, 0x1e, + 0xf3, 0xac, 0x22, 0x2c, 0x3d, 0x02, 0x57, 0x86, 0x1c, 0xad, 0x50, 0x70, 0xd3, 0xc1, 0x94, 0xd4, + 0x46, 0x1b, 0xa0, 0x49, 0x09, 0xae, 0x02, 0x48, 0x33, 0x8c, 0x3d, 0x99, 0x10, 0x97, 0xe9, 0x43, + 0x93, 0x4c, 0x9a, 0xf5, 0xe4, 0xa0, 0x8d, 0x9c, 0xdc, 0xaf, 0x1e, 0xf3, 0x20, 0xdd, 0xfe, 0x95, + 0xb3, 0xaf, 0xed, 0x26, 0xe5, 0xef, 0xdd, 0x0d, 0x2b, 0x78, 0x1f, 0x66, 0x9f, 0x11, 0x6c, 0xa7, + 0x24, 0xed, 0x25, 0xb9, 0x9d, 0xef, 0xdc, 0x67, 0x80, 0x92, 0xa2, 0xe9, 0xc6, 0x40, 0x28, 0x5c, + 0x1d, 0x1f, 0xc1, 0x2d, 0x9f, 0xfa, 0x93, 0xd3, 0x98, 0x6f, 0x1b, 0x92, 0xb8, 0x7f, 0xf8, 0xe1, + 0x27, 0x1e, 0x46, 0x2c, 0x08, 0x60, 0xd5, 0xbb, 0xed, 0x9d, 0x83, 0x03, 0xae, 0xdc, 0x47, 0xf8, + 0x43, 0x12, 0xf8, 0x8c, 0xad, 0x33, 0x3d, 0x4f, 0xfd, 0x6f, 0xa2, 0x26, 0x5f, 0x80, 0xd6, 0x54, + 0x67, 0xd4, 0xcf, 0x95, 0x8f, 0x08, 0x6b, 0x6b, 0xe7, 0xfb, 0x1f, 0x1f, 0x5a, 0x0b, 0x62, 0xf6, + 0x84, 0xa1, 0xc1, 0x6d, 0x9b, 0x66, 0x5c, 0x50, 0xb1, 0x86, 0xf5, 0x9e, 0x3d, 0x4c, 0x42, 0xeb, + 0x32, 0x42, 0x75, 0x72, 0x17, 0x40, 0x22, 0xab, 0x4e, 0xc2, 0xbd, 0x06, 0xf3, 0xbb, 0x60, 0xf2, + 0x0c, 0x7a, 0x50, 0xb8, 0x78, 0x54, 0xf4, 0x07, 0xb5, 0x0b, 0x14, 0xab, 0x05, 0x2e, 0x5f, 0x9d, + 0x88, 0x1f, 0xdd, 0x4f, 0xe7, 0x3b, 0x26, 0x4b, 0x69, 0x39, 0x58, 0x2d, 0x55, 0xf6, 0x44, 0x61, + 0xef, 0x24, 0x5a, 0x5f, 0xe3, 0x0f, 0x47, 0xf6, 0xb1, 0x78, 0x73, 0x5d, 0xbe, 0x40, 0x01, 0x07, + 0x9b, 0x1f, 0x8a, 0x65, 0x14, 0x63, 0x5d, 0x3e, 0x15, 0x34, 0xae, 0x37, 0xdf, 0xb9, 0xf4, 0x98, + 0x66, 0xca, 0xa5, 0x61, 0x01, 0x6e, 0xb1, 0xe8, 0x2a, 0x4a, 0x9b, 0x81, 0x76, 0x44, 0xde, 0x7b, + 0xa6, 0xb0, 0xdf, 0xe9, 0x05, 0x87, 0xa8, 0x6e, 0xcd, 0xe2, 0x2d, 0x42, 0xca, 0x44, 0x49, 0x1a, + 0x40, 0x03, 0x8d, 0x29, 0xb7, 0xd2, 0x19, 0x80, 0x04, 0xea, 0xfb, 0x12, 0x72, 0x52, 0xb8, 0x40, + 0xe1, 0xce, 0x2e, 0xf8, 0xda, 0xa4, 0x9f, 0xc9, 0xa7, 0xc9, 0x82, 0x83, 0x58, 0x63, 0xaf, 0xc0, + 0xa3, 0x4b, 0x57, 0x94, 0xe9, 0x07, 0x92, 0xf8, 0x99, 0xc7, 0xe8, 0x46, 0xe3, 0x3f, 0x33, 0x69, + 0xa8, 0xdb, 0x38, 0xbc, 0x1c, 0xa8, 0x8f, 0x89, 0x43, 0x52, 0xee, 0x8a, 0x15, 0xc6, 0xda, 0x6b, + 0xfc, 0xb8, 0x43, 0xb6, 0x23, 0x12, 0x2c, 0xbb, 0xd9, 0xee, 0xe2, 0xe8, 0xe7, 0xf7, 0xbf, 0x36, + 0xb0, 0xc7, 0x08, 0x6f, 0xf2, 0x61, 0x4b, 0x69, 0x19, 0x2b, 0xa6, 0x89, 0x7f, 0x07, 0x2b, 0x42, + 0x32, 0x15, 0x60, 0x1b, 0x2c, 0x90, 0xcd, 0x2f, 0x55, 0xde, 0x70, 0x31, 0x85, 0x0c, 0x0b, 0xed, + 0x15, 0x0e, 0xa8, 0x60, 0xc6, 0x9f, 0x9c, 0xbb, 0x57, 0xb1, 0xc5, 0x43, 0x49, 0x01, 0x32, 0xad, + 0xdb, 0xf7, 0x0c, 0xf3, 0x96, 0x44, 0x89, 0xf8, 0x43, 0xe8, 0xb6, 0x1e, 0x2b, 0x49, 0xfa, 0xfe, + 0x22, 0x9f, 0x07, 0x38, 0x06, 0x69, 0x58, 0x01, 0x3a, 0xc8, 0x18, 0xc7, 0x47, 0x79, 0x12, 0x8f, + 0x53, 0xac, 0xf0, 0x5f, 0x76, 0x44, 0x75, 0x50, 0x57, 0xd2, 0x7b, 0x89, 0xe0, 0xe5, 0xd9, 0xfb, + 0x4e, 0xca, 0xcf, 0x5c, 0x25, 0xd1, 0x92, 0xa3, 0x8f, 0xd5, 0x2c, 0x35, 0xed, 0x19, 0x23, 0xcc, + 0x01, 0xd3, 0xe2, 0x37, 0x08, 0x28, 0xf3, 0x39, 0x61, 0x94, 0xaa, 0x01, 0xa9, 0x8f, 0x50, 0x02, + 0xc7, 0x07, 0x3b, 0xee, 0x62, 0xd7, 0xb9, 0x97, 0x5c, 0xf7, 0xdf, 0xf2, 0x06, 0x39, 0x8e, 0x66, + 0x02, 0x91, 0xf7, 0x50, 0x75, 0xb7, 0x64, 0xaa, 0x7a, 0xad, 0x33, 0xae, 0x93, 0x85, 0x4e, 0x91, + 0x72, 0x74, 0xe2, 0x59, 0x17, 0xb2, 0xd9, 0xe8, 0xc3, 0x16, 0xc9, 0xa6, 0xf8, 0xd0, 0xf1, 0x67, + 0xd0, 0x6b, 0xd4, 0xca, 0x0c, 0x23, 0x00, 0xe4, 0xf4, 0x02, 0xe4, 0x5f, 0xf9, 0xbd, 0xcb, 0xe9, + 0x09, 0x54, 0xb0, 0xdf, 0x4e, 0xa7, 0x3d, 0x26, 0xab, 0x4d, 0xe2, 0x35, 0xeb, 0x2a, 0xe5, 0x4b, + 0xa4, 0x1c, 0x87, 0xc8, 0x6b, 0xca, 0x86, 0x0c, 0xf7, 0x19, 0x54, 0x98, 0x5e, 0x3f, 0x0f, 0xf9, + 0x09, 0x39, 0xad, 0xe9, 0xc8, 0x17, 0xe1, 0x68, 0x81, 0x40, 0x3d, 0x30, 0xf9, 0xae, 0x64, 0x7d, + 0xea, 0x5b, 0x1f, 0x59, 0xa2, 0x21, 0xf4, 0xb1, 0xa7, 0xc7, 0x57, 0x57, 0x55, 0xe0, 0x0c, 0x1c, + 0x78, 0x9e, 0xe7, 0xd2, 0x4c, 0xd6, 0xe3, 0xf9, 0x10, 0x66, 0xc7, 0xd0, 0x50, 0x56, 0x88, 0xdb, + 0x87, 0x84, 0xbd, 0xc8, 0x74, 0x8d, 0xe6, 0x49, 0x30, 0x42, 0x3b, 0xd2, 0xec, 0xb9, 0xe9, 0xa4, + 0xa5, 0xa5, 0xc6, 0xd8, 0x93, 0x5b, 0x13, 0x9a, 0x4f, 0xd8, 0xab, 0xfc, 0x8a, 0xf3, 0x94, 0xca, + 0x72, 0x6b, 0xce, 0xa4, 0x9a, 0x34, 0xde, 0xb1, 0xfa, 0x20, 0x2e, 0xb1, 0x5c, 0xa9, 0x60, 0x3e, + 0x57, 0x03, 0x2d, 0x31, 0x97, 0xe1, 0xae, 0x5b, 0x10, 0xae, 0xbb, 0x5c, 0x08, 0x33, 0x02, 0xb2, + 0x35, 0xbb, 0x3e, 0xe5, 0x01, 0x9d, 0x96, 0xf5, 0xb1, 0xbb, 0x79, 0x58, 0xc2, 0x3b, 0x52, 0x3f, + 0x91, 0xf9, 0x0b, 0x9c, 0x9b, 0xa8, 0x41, 0xfb, 0x4a, 0xe5, 0x42, 0x49, 0x0d, 0x2b, 0x91, 0x25, + 0xb2, 0x25, 0xa9, 0x37, 0x07, 0x80, 0x75, 0x37, 0xa1, 0x73, 0x38, 0xee, 0xea, 0x45, 0x3c, 0x17, + 0x46, 0x34, 0xaa, 0xb2, 0x34, 0xfe, 0x8c, 0x42, 0xcd, 0x79, 0x14, 0x96, 0xaf, 0x26, 0x4d, 0xa1, + 0xca, 0x75, 0x9d, 0xbe, 0x0f, 0xb1, 0x25, 0x56, 0xe6, 0xec, 0x5d, 0x7e, 0x26, 0x04, 0x6f, 0xd4, + 0x2a, 0xd0, 0x50, 0x95, 0x38, 0x2d, 0x0b, 0x8d, 0x9e, 0x8d, 0x46, 0x88, 0xc6, 0x39, 0x80, 0xc2, + 0xdf, 0x85, 0xd0, 0x61, 0x7b, 0xc9, 0xfe, 0x26, 0x02, 0x2c, 0xde, 0xa8, 0x2b, 0x86, 0xa1, 0xd5, + 0x52, 0x50, 0xaf, 0xdc, 0xf3, 0xcf, 0x25, 0x7e, 0xfb, 0xf4, 0xb0, 0xe8, 0x1c, 0x85, 0x70, 0xa7, + 0x39, 0x26, 0xe5, 0xac, 0xa8, 0x2f, 0xc7, 0x1e, 0x46, 0x7f, 0xc4, 0x15, 0x53, 0x9b, 0xa4, 0x84, + 0xc2, 0x0d, 0xd8, 0xe5, 0x91, 0x5e, 0x5e, 0xeb, 0x2f, 0x0e, 0x6f, 0xc2, 0xc1, 0xf1, 0x8a, 0x48, + 0x51, 0x8a, 0x0b, 0x0c, 0x10, 0x6c, 0x86, 0xba, 0x1a, 0xa5, 0xa0, 0x27, 0x7f, 0x3f, 0x4a, 0xae, + 0x55, 0x06, 0x96, 0xed, 0x3a, 0xa1, 0x6c, 0xb5, 0x06, 0xa2, 0x2f, 0x45, 0xaa, 0x23, 0xc0, 0x55, + 0xa5, 0x80, 0x06, 0x7c, 0x90, 0x42, 0x85, 0xb6, 0x80, 0x48, 0xbe, 0x6f, 0xdc, 0x41, 0xaf, 0x34, + 0x04, 0x7b, 0x4a, 0xa2, 0x05, 0x97, 0x3f, 0xdf, 0xe1, 0x44, 0x27, 0x1f, 0x03, 0x3a, 0xf8, 0xfb, + 0xbe, 0xd2, 0xba, 0xf7, 0x72, 0xba, 0x97, 0x63, 0x8c, 0xa0, 0x10, 0xae, 0xe6, 0x8e, 0x2b, 0x45, + 0xff, 0xd4, 0x0d, 0xa9, 0x77, 0xe4, 0x8b, 0x3e, 0x13, 0x90, 0x9e, 0xf9, 0x7a, 0x2a, 0x28, 0x08, + 0x85, 0x33, 0xef, 0x39, 0x9f, 0x4b, 0x8a, 0xc5, 0xfa, 0x36, 0xf2, 0x4e, 0x81, 0x45, 0x9e, 0x96, + 0x40, 0xd7, 0x32, 0xb5, 0xd1, 0x09, 0x7d, 0x1e, 0x7a, 0x0e, 0x05, 0xf6, 0x2a, 0xd6, 0xc5, 0xb9, + 0x8a, 0xaa, 0xda, 0xac, 0x48, 0x7a, 0x04, 0x97, 0x8a, 0x39, 0x48, 0x7b, 0xb6, 0x57, 0xca, 0x2a, + 0x7b, 0xc5, 0x90, 0xfd, 0xc1, 0xd1, 0xe2, 0x8b, 0xb0, 0x86, 0x77, 0xe2, 0x74, 0xce, 0x95, 0x67, + 0x88, 0x9f, 0x8e, 0x58, 0x5d, 0x81, 0x6c, 0xc1, 0x26, 0xd5, 0xaf, 0x37, 0xb1, 0x34, 0xf6, 0x06, + 0x44, 0xb7, 0xa2, 0x9e, 0x40, 0x3b, 0x67, 0xd4, 0x63, 0xb0, 0x40, 0xa6, 0xf4, 0x84, 0x7c, 0xc1, + 0xae, 0x2a, 0x7f, 0x1a, 0x1b, 0xc5, 0xbb, 0x34, 0xf9, 0xd1, 0x88, 0x57, 0x28, 0x03, 0x0e, 0x52, + 0x76, 0xec, 0xef, 0x45, 0xcc, 0x68, 0xe0, 0x19, 0x92, 0x87, 0x29, 0x1c, 0x57, 0x2f, 0xe0, 0x70, + 0x8e, 0xad, 0x3d, 0xa6, 0x2b, 0x73, 0xb8, 0xc9, 0x75, 0x3c, 0x04, 0x9a, 0x5a, 0x9c, 0x1c, 0x77, + 0x53, 0x0f, 0x5c, 0x59, 0xa2, 0xea, 0x80, 0xf6, 0x70, 0x0e, 0x56, 0x91, 0x9a, 0x0a, 0x46, 0xd6, + 0xb0, 0x18, 0x88, 0x81, 0x01, 0x82, 0x56, 0x8d, 0x44, 0x20, 0xf9, 0xf3, 0x0a, 0xa1, 0x6f, 0x13, + 0x8f, 0xe0, 0x10, 0x2d, 0xa2, 0xd2, 0xf6, 0xf1, 0x5d, 0xa3, 0xb7, 0x3c, 0x2a, 0x39, 0xb5, 0xe1, + 0xf5, 0x53, 0x7a, 0xd1, 0x23, 0xab, 0xe0, 0x58, 0x9a, 0x5b, 0x48, 0x98, 0x6b, 0xbb, 0x93, 0x98, + 0x41, 0x82, 0x4c, 0x3c, 0x1a, 0x52, 0x2b, 0x52, 0x2c, 0x39, 0x2a, 0x3d, 0x37, 0xb2, 0x2a, 0xc9, + 0xd7, 0xce, 0xf1, 0x27, 0x85, 0xdd, 0x0d, 0x21, 0xd9, 0x80, 0xbc, 0xd2, 0x87, 0xdd, 0xce, 0xe8, + 0xff, 0xc6, 0xfe, 0x49, 0x6b, 0xae, 0xc1, 0x30, 0xc4, 0x7c, 0x79, 0x12, 0x47, 0x5a, 0xe2, 0x83, + 0x30, 0x25, 0x67, 0xa0, 0xc4, 0x58, 0xc3, 0x63, 0x5b, 0xc3, 0x34, 0x07, 0x82, 0xe1, 0xb3, 0xe9, + 0x9d, 0xbe, 0xe7, 0x3e, 0x19, 0xe5, 0x6a, 0x43, 0x17, 0x20, 0xd6, 0x40, 0xcb, 0xc3, 0xac, 0xe2, + 0x88, 0x7f, 0xfe, 0x9f, 0xe5, 0xdd, 0xac, 0xa7, 0x31, 0x1b, 0x7a, 0x60, 0xd6, 0x76, 0xed, 0x88, + 0x11, 0x84, 0x68, 0x3e, 0x10, 0xce, 0x6b, 0xa0, 0x3d, 0x85, 0xf5, 0xf2, 0xa7, 0xbf, 0x6f, 0x56, + 0xc9, 0x4b, 0xcb, 0x1e, 0xa1, 0xf9, 0xac, 0x3f, 0x08, 0xa5, 0x8e, 0xe4, 0x3f, 0x1d, 0xb5, 0x32, + 0x54, 0x3d, 0xbe, 0xa5, 0x09, 0x22, 0x8d, 0xf1, 0xcd, 0x18, 0x41, 0x85, 0x9e, 0x64, 0xd4, 0xb7, + 0x8a, 0x34, 0x1e, 0x2a, 0xf5, 0x95, 0x4a, 0x10, 0xda, 0x96, 0x2b, 0x39, 0x8a, 0xae, 0xf3, 0x3b, + 0x80, 0x00, 0xd6, 0x80, 0xca, 0x25, 0xae, 0x99, 0x6b, 0x3e, 0x1f, 0x60, 0xb3, 0x59, 0xe9, 0xa2, + 0x9a, 0xe1, 0xfa, 0x2b, 0x16, 0x76, 0x73, 0xe3, 0x09, 0xff, 0xd3, 0xa4, 0xec, 0x74, 0x8e, 0x53, + 0x95, 0xdd, 0xc8, 0x8f, 0xf0, 0x22, 0x39, 0x17, 0x7b, 0x99, 0x39, 0x4b, 0xe0, 0xe8, 0x3b, 0xf8, + 0x5c, 0x98, 0x2c, 0x15, 0x35, 0xb3, 0x0b, 0xd6, 0xb6, 0xfe, 0x95, 0x35, 0x4f, 0x31, 0x73, 0x02, + 0xb6, 0x6c, 0xc6, 0x5e, 0xa9, 0xab, 0xdf, 0x09, 0x4d, 0xc4, 0x85, 0x01, 0xcb, 0xc9, 0x35, 0x2d, + 0x4e, 0x22, 0x80, 0x15, 0x66, 0xab, 0xaa, 0x6d, 0xc3, 0x3b, 0x74, 0xdf, 0xdb, 0xb2, 0x13, 0xb0, + 0x6e, 0xb3, 0xdd, 0x8a, 0xbb, 0x14, 0x4a, 0x4c, 0xad, 0x3a, 0xe4, 0xc4, 0x0f, 0x86, 0xdd, 0x3d, + 0x4f, 0x82, 0xe8, 0xf2, 0xf2, 0x03, 0x0e, 0xc5, 0xcd, 0xa8, 0xf3, 0xe9, 0x77, 0x82, 0x93, 0x11, + 0x86, 0xcc, 0x81, 0x86, 0x8e, 0x4a, 0x06, 0x4b, 0x95, 0x63, 0xc1, 0x1d, 0xd0, 0x2a, 0x2c, 0x4e, + 0x7c, 0x45, 0x71, 0x07, 0x3d, 0xe9, 0xa6, 0xb6, 0x20, 0xd9, 0x63, 0x6c, 0x03, 0x22, 0xf4, 0x76, + 0x90, 0x83, 0xc5, 0x84, 0x23, 0x64, 0x89, 0x09, 0x53, 0x75, 0xbd, 0xd7, 0x54, 0x6c, 0xa0, 0x73, + 0x20, 0x50, 0xc4, 0x70, 0x15, 0xfa, 0x19, 0xa5, 0x1b, 0xfd, 0x18, 0x56, 0x11, 0xd9, 0xb7, 0x52, + 0x19, 0xe4, 0xb2, 0x77, 0xff, 0x61, 0xe2, 0xab, 0x66, 0x18, 0x33, 0x7e, 0x1d, 0xe9, 0x79, 0x8a, + 0xab, 0xbb, 0x0f, 0xc6, 0x9f, 0xb6, 0xdd, 0x6d, 0x4c, 0xbe, 0xae, 0x00, 0x87, 0x88, 0x89, 0xe5, + 0xae, 0x91, 0xd3, 0xb0, 0x03, 0xbe, 0xc0, 0xf7, 0x05, 0x53, 0x81, 0xef, 0x47, 0x43, 0xc3, 0x5d, + 0x30, 0x68, 0xa9, 0x17, 0xbf, 0x0d, 0x66, 0x04, 0xd8, 0x8e, 0x39, 0xbf, 0xec, 0x6f, 0x87, 0x51, + 0xe4, 0xbf, 0xc6, 0x54, 0xfe, 0x25, 0x86, 0xe5, 0x12, 0x91, 0x86, 0xde, 0xc5, 0x27, 0x15, 0x24, + 0xe7, 0xad, 0xaf, 0x9b, 0x46, 0xf5, 0xde, 0x05, 0x52, 0x38, 0x63, 0x4a, 0x17, 0x00, 0x6d, 0x6d, + 0xf3, 0xfd, 0x58, 0x80, 0x2d, 0x38, 0x99, 0xa9, 0x6b, 0x45, 0x8f, 0xcb, 0x09, 0x3c, 0x60, 0x7f, + 0x8f, 0xcb, 0x9b, 0x7a, 0x09, 0xa4, 0x18, 0xa9, 0x35, 0x15, 0x7d, 0x3a, 0xaf, 0x11, 0x75, 0x00, + 0xbf, 0x74, 0x5a, 0xa8, 0xbe, 0x8c, 0x32, 0xef, 0x0e, 0x44, 0x3d, 0x9c, 0x33, 0xff, 0x7c, 0xc8, + 0xf6, 0x4d, 0xf1, 0x24, 0x84, 0x9a, 0x91, 0x6c, 0x31, 0x27, 0xb9, 0x54, 0x0c, 0xc1, 0x1a, 0x13, + 0x13, 0x7b, 0x59, 0x4d, 0x97, 0x8d, 0x4f, 0xd4, 0xb7, 0xf3, 0xf2, 0xc3, 0xf3, 0xad, 0xb4, 0x97, + 0x02, 0x67, 0x08, 0xe2, 0x3d, 0xd2, 0xc8, 0x66, 0x6d, 0xe1, 0x22, 0x07, 0x3d, 0x52, 0xa1, 0xda, + 0x53, 0xc5, 0x5c, 0x0f, 0x24, 0xd0, 0x4d, 0x1a, 0xb5, 0x6a, 0x8e, 0x8f, 0x6e, 0x9b, 0x6d, 0xf7, + 0xd4, 0x5c, 0x69, 0x4c, 0x71, 0x8a, 0xc9, 0x77, 0x1f, 0xe5, 0x24, 0xab, 0xc0, 0x0e, 0x8c, 0x38, + 0x60, 0xdd, 0x4c, 0x23, 0xf8, 0x27, 0x8d, 0x7b, 0xe0, 0xd0, 0xdb, 0xce, 0x00, 0x2b, 0x18, 0x11, + 0xd3, 0x0d, 0x81, 0x07, 0x4c, 0x96, 0x65, 0xd7, 0x91, 0xef, 0x91, 0x86, 0xda, 0x40, 0xed, 0x78, + 0xcb, 0xad, 0xd5, 0x53, 0x82, 0x55, 0xca, 0x8b, 0x15, 0xb6, 0x7d, 0x8a, 0x99, 0x48, 0x36, 0x5f, + 0xbf, 0xbf, 0x20, 0xc0, 0x49, 0x9e, 0xd3, 0x53, 0xe8, 0x06, 0xc7, 0x99, 0x18, 0xbb, 0x7f, 0x38, + 0x95, 0xf2, 0x86, 0x7a, 0x7c, 0x7f, 0x3b, 0xa1, 0x4a, 0x63, 0xb6, 0xa2, 0xc8, 0x9e, 0x1d, 0x82, + 0x51, 0x1c, 0x83, 0xd3, 0xc9, 0x10, 0xfd, 0xac, 0x53, 0xf6, 0x0b, 0x9a, 0x8e, 0x8c, 0x6e, 0x52, + 0x13, 0xba, 0xb0, 0xd2, 0xb2, 0xb2, 0xf6, 0x00, 0x02, 0x67, 0x52, 0xb4, 0xca, 0xfe, 0x53, 0xb2, + 0x68, 0x14, 0x34, 0x99, 0x33, 0x9d, 0xf6, 0xd9, 0xd8, 0x7d, 0x97, 0xea, 0x13, 0xb7, 0x96, 0xf5, + 0x1c, 0xce, 0x36, 0x46, 0x1a, 0x11, 0xf4, 0xe9, 0x20, 0x31, 0x77, 0x66, 0x68, 0x34, 0x04, 0x3d, + 0xa9, 0x74, 0xa7, 0x7f, 0x60, 0xcc, 0x3a, 0x55, 0x3d, 0xd3, 0xfa, 0x40, 0x26, 0xa8, 0x95, 0x97, + 0xf2, 0x48, 0x95, 0xd2, 0x5f, 0x82, 0x7a, 0x73, 0x12, 0x41, 0x88, 0xc0, 0x7b, 0xe7, 0xab, 0xaa, + 0x76, 0x82, 0x80, 0xbd, 0x20, 0x76, 0x7a, 0xc4, 0x10, 0x4a, 0x2f, 0x12, 0x8b, 0x44, 0x8d, 0x13, + 0x54, 0x7a, 0xd2, 0x6c, 0xa3, 0xdf, 0x51, 0xfb, 0x73, 0x58, 0x17, 0xc9, 0xc4, 0xc0, 0xec, 0x6c, + 0x5e, 0x5e, 0xf3, 0x0c, 0xa5, 0x48, 0x73, 0xca, 0x0d, 0x6f, 0x85, 0x58, 0xaa, 0x0b, 0x40, 0x9c, + 0xd0, 0xd4, 0x6b, 0x97, 0x6e, 0x07, 0x1a, 0xa6, 0x35, 0x12, 0x8a, 0xfb, 0xee, 0xe7, 0xdc, 0x27, + 0x9b, 0x5e, 0xa9, 0x9d, 0x88, 0xa6, 0xa9, 0xc3, 0x6b, 0xc4, 0xbb, 0x07, 0xf8, 0xb6, 0x7e, 0x33, + 0x3e, 0xbc, 0x57, 0x06, 0x9e, 0xca, 0x50, 0xca, 0x87, 0xe0, 0x82, 0x43, 0x40, 0xe3, 0x1b, 0x86, + 0x57, 0xd6, 0xa8, 0x9e, 0x99, 0x1d, 0xf7, 0x3e, 0x14, 0x5e, 0x56, 0x10, 0x1f, 0xc8, 0x89, 0x84, + 0x09, 0xbf, 0x98, 0x54, 0xa2, 0xe8, 0xf2, 0xa2, 0x49, 0xd3, 0x73, 0x79, 0xb2, 0xac, 0x6b, 0x01, + 0x9d, 0xd5, 0xa9, 0xea, 0x46, 0x3c, 0x9f, 0x18, 0xee, 0xb7, 0x33, 0x61, 0xb6, 0x6b, 0xaf, 0xde, + 0x99, 0xc4, 0xf6, 0xa0, 0x96, 0xe3, 0x7f, 0x2d, 0x77, 0x06, 0x1a, 0x29, 0x12, 0x6d, 0x21, 0xf8, + 0x68, 0xea, 0x55, 0x29, 0xd6, 0xd1, 0x42, 0xf7, 0x92, 0x87, 0xb8, 0x62, 0x76, 0xf0, 0x04, 0x41, + 0xdf, 0x57, 0x18, 0x03, 0xc4, 0xbf, 0x77, 0x15, 0xc6, 0x55, 0x83, 0x3a, 0x85, 0x27, 0x67, 0xc1, + 0x82, 0x5b, 0x34, 0x9a, 0x6e, 0xf4, 0xba, 0xac, 0x53, 0x55, 0x51, 0x09, 0x2d, 0xcc, 0xce, 0xbb, + 0xa2, 0xaa, 0x9d, 0xec, 0x8e, 0x68, 0x35, 0x00, 0xdb, 0x54, 0xef, 0xca, 0x5c, 0x60, 0xfb, 0x6a, + 0xb6, 0x6d, 0xe7, 0xd4, 0x5e, 0xce, 0x0b, 0xfe, 0x6a, 0xe8, 0x4e, 0x2e, 0x81, 0x2b, 0x42, 0x66, + 0xd6, 0x10, 0x1e, 0x14, 0xb9, 0xcb, 0x1c, 0x18, 0x81, 0xcf, 0xbd, 0xec, 0xd3, 0x80, 0x3b, 0x17, + 0x40, 0x4d, 0x64, 0xa4, 0xf3, 0x11, 0x82, 0xc3, 0x11, 0x87, 0x68, 0x37, 0x95, 0xd6, 0x7c, 0xc2, + 0x40, 0xf1, 0x07, 0xa1, 0x70, 0x09, 0x41, 0xed, 0x1a, 0xe9, 0x03, 0x41, 0xee, 0x02, 0xed, 0xe6, + 0x89, 0xc2, 0xfc, 0xc1, 0x8e, 0x55, 0x6a, 0xcd, 0xb4, 0x09, 0x3d, 0x4d, 0x64, 0xf9, 0x17, 0xaf, + 0x7d, 0x45, 0x36, 0x8d, 0xec, 0x66, 0xf0, 0x00, 0xc1, 0x11, 0xf9, 0x0f, 0x9e, 0x7a, 0xfb, 0x49, + 0xb5, 0xb1, 0xac, 0xe8, 0xd5, 0x9f, 0xc4, 0xba, 0x18, 0x38, 0x92, 0x8d, 0x20, 0x3c, 0xdc, 0x26, + 0x23, 0xa7, 0xdc, 0xb5, 0xec, 0xfe, 0x61, 0x28, 0xb8, 0xbf, 0xcb, 0x55, 0xb0, 0x56, 0xc8, 0xd0, + 0xf7, 0x24, 0x5d, 0x87, 0x77, 0x08, 0x52, 0x09, 0x6f, 0x52, 0xdc, 0x46, 0xd3, 0xa6, 0x0a, 0x92, + 0xb6, 0x5d, 0x54, 0x75, 0x3f, 0x0b, 0x1c, 0x53, 0x46, 0x01, 0x3e, 0x07, 0xa6, 0xf6, 0xfe, 0x8b, + 0x0d, 0xda, 0x9a, 0x99, 0x0e, 0xf3, 0x08, 0xcd, 0x30, 0x2f, 0x28, 0x53, 0x3e, 0x3d, 0x8f, 0x09, + 0xcc, 0xdf, 0xd9, 0xc5, 0x9e, 0xf7, 0xd4, 0x98, 0x66, 0xa0, 0xf9, 0xab, 0x6a, 0x26, 0x3e, 0x52, + 0x44, 0xc6, 0xcc, 0xf0, 0x61, 0xa2, 0xa1, 0xd6, 0xc2, 0x00, 0x0d, 0x27, 0x48, 0x3f, 0xae, 0xf4, + 0x21, 0xa7, 0xc6, 0xab, 0x02, 0x67, 0x24, 0x6e, 0x68, 0x49, 0x42, 0x7b, 0xb8, 0x41, 0xb1, 0x6f, + 0xba, 0x6b, 0xfa, 0xde, 0xc5, 0xfb, 0xd4, 0xfa, 0xd6, 0x70, 0xa6, 0x29, 0xc7, 0xd6, 0xfe, 0xa5, + 0x82, 0xb8, 0xea, 0x21, 0x81, 0xcd, 0x4c, 0xd3, 0xe4, 0xcc, 0xd8, 0x3f, 0x4c, 0x23, 0xe5, 0x83, + 0x3e, 0xf0, 0x0d, 0x3a, 0xed, 0x8f, 0x8b, 0x65, 0x71, 0xc4, 0xa1, 0x29, 0xfc, 0x3f, 0x55, 0x9f, + 0x51, 0x9b, 0xf0, 0x36, 0xaa, 0x82, 0xe5, 0x58, 0xa6, 0xa3, 0xe0, 0x02, 0x09, 0xa8, 0xd6, 0x9a, + 0xa9, 0xe5, 0x1f, 0xb6, 0x5a, 0x54, 0xeb, 0x9b, 0xf1, 0xc1, 0x34, 0x99, 0x2f, 0xb3, 0x7c, 0x44, + 0x38, 0xf0, 0x8a, 0x3c, 0x19, 0x78, 0x99, 0xe5, 0x11, 0x4f, 0x7d, 0x09, 0xad, 0x4c, 0xcc, 0xa5, + 0x84, 0xe0, 0x63, 0x36, 0xc0, 0x0b, 0x50, 0xab, 0x04, 0xfa, 0x2c, 0x18, 0xf2, 0xc2, 0xe3, 0xe6, + 0x8e, 0x80, 0xa5, 0x3c, 0x14, 0x11, 0x8a, 0x83, 0x3e, 0xa7, 0xc2, 0xd7, 0x13, 0x63, 0x9c, 0x44, + 0x85, 0x21, 0xa6, 0x6c, 0x47, 0x4a, 0x0d, 0x52, 0x39, 0x91, 0x2a, 0x92, 0xe9, 0x49, 0x2d, 0x2f, + 0x40, 0x05, 0x83, 0xcd, 0x56, 0x60, 0x78, 0xfd, 0xb3, 0xbe, 0x90, 0xee, 0x7e, 0x21, 0xe3, 0x85, + 0xc1, 0xbd, 0x81, 0x43, 0xd8, 0x09, 0xa2, 0x94, 0x50, 0xf3, 0x9e, 0xe4, 0x06, 0x31, 0xe7, 0xf8, + 0x07, 0xe8, 0x2e, 0xd7, 0xf1, 0x29, 0xb6, 0x51, 0x27, 0x96, 0x2f, 0xbc, 0x8a, 0x83, 0x5e, 0x22, + 0xd0, 0x39, 0x7c, 0x9a, 0x9a, 0x02, 0xe7, 0x5b, 0x07, 0xe9, 0x9b, 0x9d, 0x88, 0x51, 0x02, 0xe6, + 0xb5, 0x91, 0xbc, 0x89, 0x96, 0xe9, 0x1f, 0x62, 0x73, 0xd8, 0x69, 0x55, 0x37, 0x46, 0x69, 0xec, + 0x18, 0x33, 0xa0, 0xe9, 0xaa, 0x17, 0xa1, 0x60, 0xbd, 0x38, 0x98, 0x18, 0x9c, 0x97, 0xb4, 0xe0, + 0xda, 0x24, 0x9a, 0x1c, 0x1a, 0xeb, 0x75, 0x17, 0x25, 0x88, 0x8b, 0xf6, 0x97, 0x77, 0x4a, 0xe0, + 0x73, 0x39, 0x48, 0x55, 0x13, 0x7d, 0xe5, 0xe1, 0xb7, 0x9d, 0x25, 0x1e, 0x80, 0x7c, 0x3c, 0x2c, + 0x0f, 0xc7, 0x1c, 0x59, 0xbc, 0x85, 0x4d, 0x31, 0x32, 0x54, 0x13, 0x91, 0xa2, 0x35, 0x86, 0x44, + 0xdc, 0xe6, 0xc4, 0xcc, 0x02, 0x8d, 0x85, 0x27, 0xa1, 0x38, 0xe1, 0xf8, 0x3c, 0xb8, 0x6a, 0x21, + 0x39, 0xc7, 0x99, 0x33, 0x32, 0xe4, 0xc4, 0x98, 0x87, 0xac, 0xd6, 0xc3, 0x5a, 0xa1, 0x6b, 0x53, + 0x8f, 0x1e, 0x50, 0x55, 0xd6, 0x1c, 0x2e, 0x48, 0xfb, 0xc9, 0xaf, 0xbb, 0xf6, 0xc7, 0x7d, 0xb1, + 0x6c, 0x9d, 0xbf, 0x97, 0x8b, 0xbf, 0x35, 0x59, 0xc4, 0x7f, 0x6e, 0x39, 0xa5, 0xd0, 0x20, 0x9f, + 0x25, 0x66, 0xf1, 0x77, 0x0c, 0xaa, 0xca, 0xa6, 0x8e, 0x60, 0x80, 0xe7, 0x19, 0x5b, 0xc2, 0x41, + 0x7e, 0x3c, 0x9f, 0xee, 0xe3, 0x90, 0x15, 0x3e, 0xcc, 0x4b, 0x8b, 0x10, 0xc6, 0x21, 0x0d, 0x00, + 0xac, 0xbf, 0x63, 0xeb, 0x25, 0xa9, 0x32, 0xf7, 0x5d, 0xb4, 0x1c, 0xab, 0xc1, 0xec, 0x40, 0x27, + 0x3e, 0x71, 0x42, 0x5f, 0xf8, 0x3c, 0x48, 0x49, 0x0b, 0x7a, 0xec, 0x5b, 0x41, 0xa2, 0xc5, 0x6f, + 0x9f, 0x43, 0x77, 0xce, 0xfb, 0x57, 0xf9, 0x98, 0x93, 0x9c, 0x15, 0xbe, 0x0d, 0x2f, 0xef, 0x74, + 0x90, 0x56, 0xfe, 0xc6, 0x37, 0x00, 0x0c, 0x50, 0x70, 0x21, 0x26, 0xf7, 0xfe, 0xef, 0xe0, 0x3f, + 0x08, 0x87, 0x79, 0xb9, 0x7e, 0xa7, 0xa1, 0xc0, 0x02, 0x05, 0x65, 0xd0, 0x88, 0xb9, 0xbc, 0x1e, + 0x94, 0xb0, 0x6b, 0xf7, 0x50, 0xce, 0x4b, 0xd7, 0x65, 0x08, 0x24, 0xed, 0xd5, 0x69, 0xf6, 0xd1, + 0x1a, 0x1c, 0x36, 0x82, 0x9e, 0x1f, 0x9d, 0x95, 0x89, 0xa8, 0xd6, 0x7b, 0x9d, 0x57, 0x35, 0x4d, + 0xe2, 0xad, 0x9a, 0xb0, 0x53, 0x46, 0xd4, 0x59, 0x79, 0x08, 0xe5, 0xf7, 0x65, 0x97, 0xab, 0xd3, + 0x24, 0x77, 0xde, 0x51, 0x08, 0x91, 0xec, 0x35, 0xfe, 0x90, 0xe8, 0xac, 0xc9, 0x39, 0xda, 0x73, + 0xdb, 0x82, 0xc6, 0x31, 0x03, 0x9b, 0x42, 0x6c, 0xef, 0x3d, 0x84, 0x27, 0xe3, 0xd3, 0xee, 0x69, + 0xd3, 0x54, 0x8d, 0xff, 0xa2, 0x85, 0x17, 0xfb, 0x7b, 0x44, 0xbb, 0x20, 0x0b, 0xdf, 0x46, 0xa2, + 0x2f, 0xf5, 0x64, 0x25, 0xcb, 0xb8, 0xa1, 0x3d, 0xa4, 0xb9, 0x57, 0x05, 0x31, 0x6d, 0x4f, 0xc9, + 0x1b, 0x81, 0xde, 0x57, 0xd6, 0xd8, 0x55, 0x62, 0x0a, 0x63, 0x39, 0x79, 0xf4, 0x89, 0xaa, 0xbf, + 0xce, 0x08, 0x30, 0xc8, 0x46, 0xa7, 0x3e, 0x17, 0x2f, 0xed, 0x0a, 0xc8, 0xcc, 0xe8, 0xb7, 0xd9, + 0xb5, 0xb7, 0xc2, 0x5e, 0x0e, 0x4f, 0x43, 0xdc, 0x8f, 0xaa, 0x5d, 0x10, 0x92, 0xe4, 0xa3, 0xe5, + 0x4d, 0xf0, 0x21, 0x02, 0x30, 0xb4, 0x6a, 0x35, 0xf1, 0x8f, 0xa5, 0x31, 0xe0, 0xdc, 0x34, 0x0e, + 0x9b, 0xc2, 0x56, 0x6c, 0x4f, 0x80, 0x09, 0x66, 0x60, 0x4e, 0xd5, 0x46, 0xdd, 0xf1, 0x21, 0x4a, + 0x06, 0xf1, 0x4a, 0xb8, 0xf6, 0xc3, 0x53, 0x9a, 0xf2, 0x0b, 0x37, 0xd6, 0x7a, 0x4d, 0x4b, 0xb7, + 0x7e, 0x78, 0x59, 0xfb, 0xd1, 0x86, 0x91, 0x7a, 0x27, 0xf2, 0x21, 0x8e, 0x1d, 0x9b, 0xdd, 0x98, + 0x1f, 0x05, 0x8b, 0xb6, 0xfa, 0x8e, 0xdf, 0xa0, 0xe0, 0x08, 0x0e, 0x24, 0x34, 0xd7, 0x31, 0x4c, + 0x91, 0xe7, 0x6e, 0xc0, 0x3e, 0xcb, 0xd9, 0x15, 0x59, 0xd0, 0x7e, 0x87, 0x3d, 0x43, 0xc5, 0xca, + 0x65, 0xff, 0x94, 0x62, 0xf4, 0x57, 0xe3, 0x40, 0xca, 0x77, 0xe2, 0x85, 0xf8, 0x84, 0xa6, 0x50, + 0xce, 0x30, 0xb8, 0x7b, 0x35, 0xb6, 0xd4, 0x6e, 0x8b, 0xd3, 0x5c, 0x59, 0x16, 0x7b, 0x37, 0x20, + 0xfb, 0x1f, 0x7b, 0x27, 0xb0, 0x98, 0xd1, 0xaf, 0x5d, 0x62, 0x3f, 0xb6, 0xda, 0x4e, 0x39, 0x22, + 0x8d, 0x3d, 0x51, 0x61, 0xb9, 0x63, 0x2c, 0xa4, 0xb8, 0x59, 0x3f, 0x0e, 0xa8, 0x45, 0x96, 0x93, + 0x7f, 0x22, 0xe8, 0x5c, 0xb9, 0xeb, 0x51, 0xee, 0xd8, 0x76, 0x01, 0x9d, 0x24, 0x29, 0xb8, 0x9f, + 0xd2, 0xd2, 0x2f, 0xaf, 0x1c, 0xe8, 0xdd, 0xed, 0x11, 0x0f, 0xa6, 0x68, 0x3c, 0x2a, 0xab, 0x01, + 0x2f, 0xe1, 0xca, 0xe0, 0xb9, 0xac, 0xd1, 0x45, 0x7f, 0xb7, 0x41, 0xa4, 0xc3, 0xe9, 0x62, 0x12, + 0x5a, 0xf8, 0x98, 0x2e, 0x26, 0xff, 0x46, 0x52, 0xb0, 0x76, 0x69, 0xcd, 0x7a, 0x29, 0xfb, 0x0f, + 0x98, 0x05, 0x44, 0xd2, 0x5a, 0x32, 0xe0, 0x84, 0xdc, 0x38, 0xe9, 0x95, 0x57, 0xc4, 0xfe, 0x59, + 0x2c, 0xb9, 0x37, 0x20, 0x13, 0x99, 0x82, 0xe4, 0xc4, 0x00, 0x0f, 0xba, 0x3e, 0xff, 0x2f, 0xe9, + 0x74, 0xaa, 0x36, 0x17, 0x87, 0xda, 0x51, 0x2d, 0x14, 0x88, 0x04, 0x15, 0xfd, 0xe0, 0xa1, 0x08, + 0x92, 0x98, 0x8a, 0xb1, 0x57, 0x22, 0x31, 0xe6, 0x01, 0x81, 0x6b, 0xbd, 0xf7, 0xb7, 0xb6, 0xdf, + 0x67, 0xd8, 0x57, 0x66, 0xb5, 0x16, 0x33, 0x46, 0x9a, 0x4f, 0x58, 0xeb, 0x0a, 0xe5, 0xb6, 0x00, + 0x44, 0x81, 0xfb, 0x33, 0x4c, 0x4a, 0x83, 0x96, 0xa0, 0x53, 0x16, 0xa9, 0x26, 0xa1, 0x43, 0xce, + 0xc0, 0x8c, 0x73, 0x1f, 0xef, 0x89, 0x30, 0x97, 0xf1, 0xa1, 0x21, 0x48, 0x3f, 0xc8, 0x6a, 0xa8, + 0x32, 0x23, 0x84, 0x29, 0xcb, 0xe0, 0xa3, 0x30, 0x52, 0x66, 0xe4, 0xce, 0x0c, 0xf6, 0x91, 0x8c, + 0x6b, 0xd8, 0xde, 0x80, 0x1f, 0xbc, 0x31, 0x00, 0xcf, 0x84, 0xbd, 0x3a, 0xb2, 0xaa, 0x65, 0x5f, + 0x56, 0x80, 0xba, 0x21, 0xa3, 0x5c, 0x81, 0x3b, 0x78, 0x57, 0x6b, 0x00, 0xf3, 0xcb, 0x8c, 0xef, + 0xe3, 0x91, 0xc6, 0x58, 0x54, 0xba, 0xcd, 0x9b, 0x6e, 0xdd, 0x56, 0x7c, 0x53, 0xd7, 0x3b, 0x79, + 0x64, 0xe0, 0xfc, 0xd7, 0xa7, 0x46, 0x57, 0xe5, 0x92, 0x87, 0xcc, 0x2e, 0xa1, 0x7f, 0xe5, 0xe1, + 0x7a, 0xff, 0x52, 0x6d, 0xf8, 0x34, 0x5c, 0x92, 0x9d, 0xcc, 0xd4, 0x3d, 0x51, 0x79, 0x29, 0x1f, + 0x01, 0x2a, 0x99, 0x44, 0x3a, 0x6b, 0x84, 0x3b, 0xe3, 0xc8, 0x21, 0x0f, 0xf1, 0xd2, 0xd5, 0x5a, + 0xd1, 0xa5, 0x58, 0x8e, 0xff, 0x4f, 0x60, 0xa3, 0x15, 0x13, 0x48, 0x43, 0x63, 0xd6, 0xb1, 0x2d, + 0x06, 0x1c, 0x96, 0xa5, 0xbd, 0x43, 0xee, 0x3e, 0x7d, 0xfe, 0x06, 0x36, 0xa6, 0x99, 0x9d, 0x96, + 0xff, 0xba, 0x1d, 0xfe, 0xb1, 0xfc, 0xa0, 0xc8, 0xf0, 0xec, 0x65, 0x50, 0x99, 0xbb, 0xa2, 0x5b, + 0x1c, 0xf3, 0x1f, 0xd4, 0xba, 0x7f, 0x52, 0xeb, 0x60, 0x93, 0x1c, 0x94, 0xd7, 0xc4, 0xcd, 0x27, + 0xbb, 0xe7, 0xee, 0xda, 0xb0, 0x17, 0x64, 0x56, 0xb7, 0x74, 0x2c, 0x03, 0xf5, 0x8e, 0x5e, 0xea, + 0x24, 0xba, 0x2f, 0x1b, 0x37, 0xfd, 0xba, 0xa6, 0xbc, 0x0f, 0x7d, 0x0d, 0x9c, 0xcf, 0xb9, 0x54, + 0xfa, 0x03, 0x42, 0x37, 0x05, 0x49, 0x71, 0x45, 0x65, 0x6b, 0x69, 0xfc, 0xd2, 0xf9, 0x53, 0x2b, + 0xbc, 0x8b, 0x6f, 0x69, 0x9e, 0x8d, 0xad, 0x93, 0x14, 0xb7, 0xc0, 0x4b, 0xee, 0x8f, 0x95, 0x8a, + 0x0d, 0x3b, 0xa3, 0x8f, 0x68, 0x51, 0xc8, 0x43, 0xf7, 0x70, 0xb2, 0x9b, 0xcc, 0xf7, 0xa6, 0xa7, + 0x34, 0xa2, 0xc9, 0x99, 0xc7, 0x14, 0x46, 0x0a, 0x5e, 0x4d, 0x64, 0x0b, 0x66, 0x0f, 0xd8, 0xd5, + 0x4f, 0x08, 0xa5, 0x95, 0x96, 0x61, 0xd3, 0x55, 0xf4, 0x33, 0x7f, 0xa6, 0xf3, 0x55, 0x14, 0xd2, + 0x4d, 0xce, 0x5d, 0xc2, 0x5b, 0x12, 0x52, 0xec, 0x73, 0x2e, 0x39, 0x75, 0x5d, 0xa7, 0x46, 0x17, + 0x0b, 0x13, 0x94, 0x6f, 0x21, 0x4b, 0xd1, 0xd4, 0xfc, 0x42, 0xfa, 0x22, 0x02, 0x16, 0xe3, 0xb3, + 0x29, 0xbc, 0x2f, 0x15, 0x68, 0xa7, 0x73, 0xfb, 0x8f, 0x87, 0xee, 0x05, 0x94, 0x86, 0x7f, 0x1a, + 0xbc, 0xa9, 0xcc, 0x22, 0x24, 0x4c, 0xd8, 0x5f, 0xb8, 0xe7, 0x05, 0x04, 0xe0, 0x69, 0x20, 0x2f, + 0x0b, 0xf7, 0x6d, 0xc8, 0xa2, 0xd9, 0x5f, 0x64, 0xf9, 0x2e, 0xdb, 0x51, 0xa9, 0x84, 0x12, 0xb9, + 0x91, 0x90, 0xb0, 0xa5, 0xfa, 0x9a, 0x7e, 0x86, 0xc0, 0x58, 0x28, 0xf9, 0x7f, 0x8a, 0x96, 0x3e, + 0xf0, 0xfc, 0xe6, 0x36, 0xad, 0x7a, 0x10, 0x46, 0x30, 0xe1, 0xcb, 0x8b, 0xd3, 0x10, 0xdc, 0x9b, + 0xcd, 0x36, 0xe5, 0x3b, 0xc0, 0xfc, 0xc5, 0xa7, 0x5f, 0x44, 0x94, 0xf6, 0x94, 0x7d, 0xcd, 0x0a, + 0x18, 0xed, 0x66, 0x06, 0x63, 0xa0, 0x30, 0xd6, 0x89, 0x53, 0x26, 0x80, 0x51, 0x82, 0x0e, 0x7e, + 0xa8, 0xf1, 0x6a, 0x4e, 0x6a, 0x2c, 0x58, 0x2f, 0xcc, 0xd9, 0x19, 0x92, 0x54, 0xad, 0xe2, 0xa3, + 0x6a, 0x87, 0x9f, 0x1c, 0x54, 0x89, 0x2a, 0xaf, 0xd0, 0x37, 0xd8, 0xbb, 0xe4, 0x5d, 0x4a, 0x54, + 0x50, 0x8e, 0xcc, 0x47, 0x46, 0x2c, 0x41, 0xbe, 0x81, 0xca, 0xf9, 0xcc, 0xd8, 0xff, 0x52, 0x20, + 0x58, 0x4f, 0xe3, 0x4f, 0xad, 0xc1, 0x4d, 0xad, 0xf2, 0xb5, 0xf8, 0xd6, 0x94, 0x98, 0x2e, 0xb1, + 0xed, 0x8f, 0xfc, 0x53, 0x81, 0x66, 0x86, 0x8e, 0xa0, 0x95, 0x75, 0xb0, 0x2a, 0x05, 0xe2, 0x91, + 0xa4, 0xf1, 0x73, 0x42, 0xc5, 0x8c, 0x6c, 0x56, 0xb6, 0x57, 0x3d, 0xaf, 0x0f, 0x4b, 0xa3, 0xd7, + 0x1c, 0x18, 0x68, 0x1f, 0x99, 0x31, 0xbb, 0x42, 0xdc, 0xd8, 0x7d, 0xe7, 0x0e, 0x27, 0x3a, 0x95, + 0x1a, 0x2e, 0x7c, 0xd9, 0x08, 0x32, 0x5c, 0xea, 0xbe, 0x2a, 0x9b, 0xc1, 0xb1, 0x64, 0xa5, 0xf8, + 0x2a, 0x2d, 0x10, 0xc5, 0xbf, 0xcb, 0x61, 0x3b, 0x73, 0x71, 0x2a, 0x96, 0xfe, 0xd3, 0xf5, 0xaf, + 0x39, 0xdd, 0xb7, 0x9b, 0x1b, 0x15, 0xbb, 0x43, 0xb0, 0x78, 0x51, 0xe5, 0xef, 0x0a, 0xca, 0x50, + 0x98, 0xa4, 0x38, 0xad, 0x68, 0x1d, 0xb2, 0x11, 0xdd, 0x14, 0xa8, 0x4f, 0x1b, 0xd4, 0x79, 0xe3, + 0x25, 0xbe, 0xe1, 0x07, 0x85, 0x7d, 0xc0, 0x8b, 0xd5, 0x8f, 0xc3, 0xfb, 0x25, 0x79, 0xb7, 0x84, + 0xf4, 0x65, 0x52, 0x73, 0xd1, 0x71, 0xd0, 0xaf, 0x52, 0x5e, 0x31, 0x2b, 0x4a, 0xa6, 0x55, 0x1c, + 0xc7, 0xe8, 0x27, 0xb6, 0x0c, 0xc3, 0x45, 0x21, 0x1a, 0xb0, 0x68, 0x30, 0x63, 0xef, 0x5d, 0xdc, + 0x69, 0x24, 0xa9, 0x8f, 0x9c, 0x54, 0xf9, 0xaf, 0x1a, 0xae, 0x18, 0x04, 0xc3, 0x4c, 0x63, 0x70, + 0xac, 0x6e, 0xfc, 0x9a, 0x56, 0xf3, 0x50, 0xd1, 0x90, 0x78, 0x9a, 0xac, 0x82, 0x58, 0x5c, 0x19, + 0x59, 0x70, 0x75, 0x0f, 0x9d, 0xab, 0x2e, 0x20, 0x2a, 0xa1, 0x31, 0x60, 0xf0, 0xeb, 0xdc, 0xc7, + 0x50, 0x4a, 0x41, 0x99, 0x22, 0xe6, 0xfc, 0x5c, 0x42, 0xde, 0x7a, 0x4b, 0xe8, 0xd5, 0xe7, 0x48, + 0x15, 0x4f, 0xe8, 0xb4, 0x77, 0x05, 0x70, 0xe5, 0x0b, 0x9c, 0xaa, 0xa0, 0xb0, 0x0e, 0x54, 0x7b, + 0x20, 0x35, 0x19, 0xe3, 0xc4, 0x54, 0xf5, 0x4f, 0xb0, 0xbd, 0xb0, 0xfd, 0x46, 0x5a, 0x30, 0x78, + 0xc9, 0x0d, 0x8f, 0x98, 0x8a, 0x40, 0x49, 0xb7, 0x37, 0x3f, 0xee, 0xf5, 0x89, 0x6b, 0x73, 0xfa, + 0xf6, 0xfe, 0xe3, 0xe9, 0xd4, 0x8f, 0x56, 0x07, 0x8f, 0x11, 0x40, 0x9f, 0xbf, 0x1c, 0x4b, 0x26, + 0x45, 0x58, 0x32, 0xf6, 0x9b, 0xfa, 0x34, 0x61, 0x9f, 0x45, 0x18, 0x45, 0xad, 0xd9, 0x8f, 0xa3, + 0x8a, 0x3a, 0x81, 0x66, 0xd4, 0x3e, 0x2e, 0xb4, 0xa0, 0x88, 0x71, 0x7f, 0xfa, 0x21, 0xcb, 0xd7, + 0xa6, 0x8d, 0x11, 0x2a, 0xf6, 0xe1, 0x90, 0x40, 0x7b, 0xa7, 0x34, 0x04, 0x3d, 0x85, 0x45, 0x14, + 0x01, 0xac, 0x30, 0x51, 0xcb, 0x5e, 0x72, 0xbe, 0xcd, 0x86, 0xd5, 0x58, 0x1f, 0x58, 0x32, 0xcb, + 0x6b, 0xd2, 0x1a, 0xde, 0x25, 0x18, 0x2a, 0x0c, 0x82, 0x35, 0x3c, 0xee, 0x78, 0x40, 0x22, 0xfd, + 0xb5, 0x07, 0x79, 0x7f, 0xc1, 0x83, 0x0a, 0xb1, 0x26, 0x69, 0x3f, 0xb1, 0x48, 0x06, 0xf3, 0x0e, + 0x57, 0x2b, 0x37, 0x5a, 0x44, 0x0f, 0x74, 0x10, 0x03, 0xe8, 0xf8, 0x4d, 0xb8, 0x5c, 0x7a, 0x35, + 0x09, 0x85, 0x60, 0x69, 0x8e, 0xb6, 0x58, 0x1b, 0x56, 0xcd, 0x1e, 0xee, 0xe8, 0x3a, 0x0d, 0x8d, + 0xc8, 0x95, 0x08, 0x6e, 0x51, 0x65, 0xa4, 0xe8, 0xc5, 0xbd, 0xa1, 0x15, 0x2d, 0x3e, 0x18, 0xb3, + 0x3f, 0x3e, 0xcd, 0xe1, 0x64, 0x02, 0x11, 0x38, 0xf4, 0x66, 0x96, 0x38, 0x19, 0x25, 0xe6, 0x66, + 0x39, 0x34, 0x51, 0xbd, 0xb2, 0xe4, 0xed, 0x71, 0x41, 0x80, 0x8f, 0x04, 0x35, 0xa8, 0x97, 0x39, + 0x72, 0x4a, 0xc1, 0xf0, 0x4c, 0xf8, 0x28, 0x15, 0xcb, 0xc1, 0x82, 0x4f, 0x9a, 0xa7, 0x54, 0xb6, + 0x42, 0x6b, 0xfb, 0x56, 0xb5, 0x3d, 0xcf, 0xab, 0x0d, 0x00, 0xb0, 0xc7, 0x2e, 0x5b, 0xf0, 0xa1, + 0xe4, 0x9c, 0xd8, 0xc0, 0xca, 0x4f, 0x36, 0x85, 0x02, 0x54, 0x2b, 0x30, 0x75, 0xf0, 0x83, 0xb6, + 0x68, 0x51, 0x11, 0xe6, 0xef, 0xb9, 0x7c, 0xaa, 0x5c, 0x54, 0xd0, 0x34, 0xa2, 0x84, 0x61, 0xf0, + 0x13, 0xd1, 0x3a, 0x1b, 0xf7, 0xbd, 0x6a, 0xe0, 0x72, 0xdf, 0x48, 0x59, 0xf5, 0x8e, 0x6d, 0x93, + 0xd4, 0x37, 0x39, 0xa9, 0x7d, 0xdb, 0xb8, 0x0b, 0x79, 0xed, 0x71, 0x1d, 0x60, 0x5d, 0x72, 0xda, + 0x8b, 0x17, 0x68, 0x93, 0x1f, 0xa7, 0x3b, 0x18, 0x30, 0x76, 0xf0, 0x4a, 0x1c, 0xbf, 0x1d, 0x22, + 0xc3, 0x3e, 0x69, 0x3f, 0xf5, 0x96, 0x9c, 0x5d, 0xf6, 0x41, 0x0e, 0x23, 0x69, 0x8b, 0xa6, 0x75, + 0x5a, 0x0b, 0xa4, 0x77, 0x85, 0x4d, 0x3d, 0xee, 0x25, 0x83, 0xd9, 0x88, 0xe1, 0x15, 0x6b, 0x97, + 0xe9, 0x8b, 0x87, 0x66, 0x30, 0xc7, 0x52, 0x43, 0xd4, 0x10, 0x9a, 0x3f, 0x3c, 0x76, 0x69, 0x53, + 0x50, 0xee, 0x4b, 0xf6, 0xe9, 0x9e, 0x0f, 0x76, 0x66, 0xc7, 0xc7, 0x06, 0xfb, 0xcd, 0xa0, 0xd4, + 0x53, 0x4a, 0x2c, 0x4f, 0x09, 0x42, 0x2b, 0xcc, 0x06, 0x8e, 0xcc, 0x74, 0x36, 0xaa, 0xa2, 0x8f, + 0xee, 0x0f, 0xc1, 0x35, 0x6f, 0xe8, 0x77, 0xa3, 0xde, 0xfc, 0xf2, 0x2e, 0x42, 0xb1, 0xb9, 0x0c, + 0x7b, 0x95, 0x17, 0xbb, 0x9d, 0xf5, 0x7f, 0xa5, 0xfd, 0x3e, 0x2a, 0x5b, 0xab, 0x4e, 0x36, 0x8d, + 0x46, 0x0b, 0x67, 0xf6, 0xba, 0xa2, 0x3c, 0x98, 0x84, 0xe0, 0x99, 0x55, 0x65, 0x15, 0x61, 0x70, + 0x14, 0xd2, 0x79, 0x12, 0x10, 0xba, 0x19, 0xc6, 0x5a, 0x56, 0xf7, 0x5d, 0x34, 0x85, 0x69, 0x87, + 0xec, 0x42, 0xef, 0xc5, 0xd1, 0x34, 0x66, 0x64, 0xf2, 0x53, 0x4b, 0x76, 0x37, 0x00, 0x53, 0xdb, + 0x14, 0x46, 0x48, 0xfe, 0x45, 0xfb, 0x0a, 0x13, 0x66, 0xfb, 0x51, 0x36, 0xc5, 0xd6, 0xea, 0x83, + 0x71, 0x05, 0x1b, 0x91, 0x9d, 0x7d, 0x7d, 0x5f, 0x47, 0xd0, 0x15, 0xaa, 0x71, 0x48, 0x0b, 0x77, + 0x67, 0x17, 0xa6, 0x0d, 0xf1, 0x2b, 0xc5, 0x58, 0x2e, 0x53, 0x8c, 0x07, 0xf2, 0x71, 0x87, 0x94, + 0x83, 0xb3, 0xa3, 0x39, 0x5f, 0x35, 0x58, 0x30, 0xfb, 0xfb, 0x9d, 0x9d, 0x1a, 0x18, 0x3d, 0x84, + 0x2d, 0xc1, 0xb8, 0x57, 0x8c, 0x2e, 0xe0, 0x01, 0x14, 0x37, 0xa9, 0x6f, 0x64, 0x1f, 0x09, 0x75, + 0x65, 0x78, 0x30, 0x7c, 0x70, 0x09, 0xf5, 0x3a, 0xe6, 0xb8, 0xb0, 0x86, 0x68, 0xcf, 0x23, 0xf8, + 0xfd, 0xfc, 0x3e, 0xe4, 0x94, 0xeb, 0x21, 0x2d, 0x4d, 0x5b, 0x31, 0xbc, 0xa8, 0xf4, 0x74, 0xf6, + 0x41, 0x70, 0x54, 0x54, 0x66, 0xb0, 0x4e, 0x82, 0x7f, 0x77, 0xb3, 0xb3, 0x36, 0xd1, 0x40, 0x40, + 0xfb, 0xf6, 0x34, 0xc1, 0x63, 0x7b, 0xa7, 0x2d, 0xde, 0x70, 0x1f, 0xe6, 0x9c, 0xdc, 0x0b, 0x77, + 0x78, 0x3e, 0x3e, 0x96, 0x48, 0x14, 0xfc, 0x97, 0x47, 0x95, 0x9a, 0x76, 0xe4, 0xcf, 0x1a, 0x85, + 0x50, 0xbe, 0x38, 0x78, 0xe8, 0x6a, 0x90, 0xb6, 0xe2, 0x1b, 0x89, 0x64, 0xb8, 0x29, 0x4b, 0x95, + 0xe1, 0x22, 0x75, 0x29, 0xad, 0x48, 0xb3, 0x5f, 0x60, 0x83, 0xd9, 0xf6, 0x62, 0xa8, 0x25, 0x12, + 0x2a, 0xa5, 0xb0, 0xb4, 0xe6, 0x96, 0x9f, 0x0d, 0xbe, 0x61, 0x2e, 0x53, 0x1a, 0x16, 0x70, 0x42, + 0x0d, 0x36, 0x1a, 0x3e, 0x63, 0xc3, 0x41, 0x32, 0xed, 0x71, 0x6d, 0x55, 0x1f, 0xc6, 0xc0, 0x19, + 0x22, 0x01, 0x05, 0x54, 0x86, 0x2a, 0x22, 0x4d, 0xa6, 0x71, 0x3c, 0x81, 0xd2, 0x88, 0x0d, 0x6e, + 0xaf, 0xba, 0xfe, 0x7c, 0x82, 0xe6, 0x08, 0xe9, 0x0a, 0x0f, 0xa6, 0x22, 0x17, 0xac, 0x54, 0xd7, + 0x1e, 0xe0, 0xa0, 0x6c, 0xa6, 0x9c, 0x71, 0xbb, 0x0e, 0xac, 0x22, 0x04, 0x86, 0xc0, 0x9a, 0x91, + 0x3b, 0x13, 0xac, 0xec, 0x1a, 0x0f, 0x4a, 0x92, 0xd9, 0x48, 0xe5, 0x5d, 0x7a, 0x5b, 0xbc, 0xec, + 0x37, 0xb3, 0x35, 0x91, 0x1b, 0x3a, 0x7a, 0xfa, 0xd1, 0xcf, 0x36, 0x43, 0xef, 0x8b, 0xef, 0x56, + 0xe8, 0xa0, 0x4a, 0x26, 0x28, 0xb6, 0xf3, 0x79, 0x94, 0x52, 0xf4, 0x55, 0xe3, 0x53, 0xf7, 0xd6, + 0x31, 0x87, 0x53, 0x26, 0x3a, 0x55, 0xf9, 0x6f, 0x17, 0x0b, 0xb3, 0x74, 0xa4, 0x6c, 0x31, 0x28, + 0x39, 0x21, 0x55, 0x3f, 0x3a, 0xa8, 0x65, 0xfc, 0x64, 0x8c, 0x31, 0xde, 0x48, 0x2f, 0xc0, 0x9c, + 0x49, 0xbd, 0x27, 0xec, 0x59, 0xaa, 0xc7, 0x26, 0xca, 0x3e, 0xe3, 0xa1, 0x5b, 0x2c, 0x13, 0x98, + 0x79, 0x04, 0x54, 0xd7, 0xd3, 0x46, 0x5a, 0x73, 0xfe, 0x4c, 0x60, 0xf6, 0x4a, 0xff, 0x66, 0x9a, + 0x4f, 0x6b, 0xd1, 0x29, 0x12, 0xca, 0x22, 0x8c, 0x45, 0x0d, 0xe9, 0x9c, 0xfc, 0x65, 0x75, 0xd8, + 0x11, 0x89, 0x13, 0xb0, 0x2f, 0xf7, 0xa1, 0xc7, 0x23, 0xdf, 0xdc, 0x0e, 0x9a, 0xc8, 0xb5, 0x30, + 0xe9, 0x0f, 0x6f, 0x8c, 0xfe, 0x76, 0x14, 0xcf, 0x7b, 0x6a, 0x4b, 0xce, 0xec, 0x25, 0xba, 0x94, + 0xdd, 0xee, 0x14, 0x55, 0x3b, 0xb8, 0x3c, 0xf6, 0xf4, 0xa2, 0x18, 0x19, 0x5a, 0x38, 0x61, 0xf9, + 0x72, 0x50, 0xa0, 0x2d, 0x2c, 0x43, 0xb4, 0xe7, 0x9b, 0xec, 0x6f, 0x3e, 0x05, 0x82, 0x8d, 0xbe, + 0xd8, 0xcb, 0x4e, 0x51, 0x1a, 0x84, 0x2c, 0xa1, 0xa7, 0xd8, 0x53, 0xc5, 0xd7, 0x41, 0x57, 0x25, + 0x73, 0x99, 0x40, 0x46, 0xde, 0x91, 0xbe, 0x33, 0xb6, 0x32, 0x99, 0xe5, 0xc7, 0xef, 0x61, 0x45, + 0x78, 0xba, 0xdf, 0x63, 0x77, 0x66, 0x1c, 0x01, 0x3f, 0x95, 0x12, 0x78, 0x0d, 0xfa, 0xa6, 0x0b, + 0x6f, 0xd6, 0x35, 0x02, 0xf9, 0x50, 0x20, 0x88, 0xa7, 0x96, 0x98, 0x9d, 0xc1, 0xf5, 0x56, 0xb3, + 0xb0, 0x85, 0x75, 0x4a, 0x4d, 0x98, 0x82, 0xd2, 0xda, 0x8d, 0x5e, 0x51, 0x7f, 0xef, 0x90, 0x4c, + 0xd5, 0x51, 0xdd, 0x63, 0x31, 0x95, 0xe8, 0xa3, 0x48, 0x8a, 0xdc, 0xb9, 0x7a, 0xc6, 0xa9, 0x37, + 0x2b, 0x52, 0xc5, 0xdb, 0xdc, 0x81, 0x23, 0x90, 0xff, 0xd4, 0xb6, 0x81, 0x4e, 0x9e, 0x83, 0xfb, + 0xd3, 0x0d, 0xc4, 0x50, 0x44, 0x40, 0xf5, 0x54, 0xa0, 0x1e, 0x91, 0x9e, 0xc4, 0xb6, 0x2b, 0xc6, + 0x4a, 0xaf, 0x12, 0x42, 0x5c, 0xd1, 0xda, 0xfb, 0x80, 0x80, 0x65, 0xd2, 0x1c, 0x2e, 0x02, 0xfd, + 0xe3, 0x15, 0xb8, 0xe1, 0xee, 0xd0, 0xa3, 0xfa, 0x8d, 0x2f, 0x84, 0x29, 0x37, 0x28, 0x0a, 0x3f, + 0x74, 0x68, 0x02, 0xea, 0x31, 0xa2, 0xf8, 0xd8, 0x1c, 0xff, 0x1b, 0x71, 0x5f, 0x0e, 0x37, 0x4c, + 0x2a, 0xd8, 0x76, 0x3f, 0x12, 0xc1, 0x91, 0xc8, 0x5d, 0xb7, 0x17, 0xe6, 0xee, 0xaa, 0xe9, 0x66, + 0xe0, 0x82, 0xcc, 0x7e, 0xf6, 0x4c, 0xe3, 0xaf, 0x38, 0xa4, 0x31, 0xb9, 0x57, 0x42, 0x1a, 0x70, + 0x70, 0x41, 0xa3, 0x4f, 0x70, 0x46, 0xc7, 0x74, 0xa0, 0xd9, 0x82, 0x3b, 0x15, 0xf1, 0x9e, 0x70, + 0xe2, 0xb0, 0x03, 0x81, 0x25, 0xa1, 0x22, 0xd7, 0x83, 0x43, 0x5f, 0xd8, 0x31, 0xf2, 0x2f, 0x0e, + 0xc4, 0xf3, 0x9f, 0xd6, 0xd1, 0xcd, 0xf0, 0xfd, 0x1f, 0x89, 0x9a, 0x32, 0x26, 0x7b, 0x44, 0x51, + 0xfe, 0xf5, 0xe9, 0xca, 0x05, 0x91, 0x92, 0x67, 0xf0, 0x41, 0xc5, 0x48, 0xc3, 0x3e, 0x94, 0xcc, + 0x55, 0xad, 0x9e, 0x92, 0x06, 0x57, 0xc9, 0x8c, 0xf9, 0xc6, 0x98, 0x91, 0xa8, 0x4c, 0xa6, 0x9e, + 0xa1, 0x1e, 0x4b, 0x93, 0x49, 0xc3, 0xf8, 0x43, 0x0d, 0x92, 0x94, 0xcb, 0x37, 0x07, 0xe7, 0x98, + 0x62, 0x02, 0xda, 0x68, 0xd0, 0x89, 0x8a, 0xbd, 0xc9, 0x4e, 0x35, 0x74, 0x58, 0xb0, 0x8a, 0xe7, + 0x6f, 0xe0, 0xd1, 0x55, 0x95, 0x9b, 0xd2, 0xee, 0x70, 0x61, 0xd2, 0x0c, 0x79, 0x66, 0x17, 0x30, + 0xcd, 0x95, 0x7b, 0x3e, 0x5b, 0x0d, 0x2d, 0x5a, 0x4c, 0x5f, 0x76, 0x6b, 0xee, 0x40, 0xd3, 0x04, + 0xfe, 0x0a, 0x96, 0xa5, 0xfe, 0x34, 0x3d, 0xdc, 0xa4, 0x72, 0xb5, 0xe1, 0x13, 0xb5, 0x9e, 0x88, + 0x80, 0x42, 0xb9, 0x09, 0xf5, 0xbe, 0x44, 0xd3, 0xd5, 0x8e, 0xa2, 0xce, 0xfe, 0x93, 0x34, 0x66, + 0x48, 0xad, 0x75, 0xbf, 0xf7, 0xd6, 0xc4, 0x0c, 0xab, 0x3a, 0xa4, 0x50, 0x2c, 0x5b, 0x5e, 0x18, + 0xf0, 0x90, 0x34, 0x79, 0x15, 0x40, 0x4b, 0x95, 0x59, 0x6f, 0xfa, 0x7c, 0x6e, 0xb6, 0x08, 0x49, + 0xb5, 0xec, 0x3f, 0xdf, 0xc6, 0x67, 0xb1, 0x25, 0x98, 0x60, 0xf9, 0x14, 0xa6, 0x59, 0x7c, 0x4b, + 0xd4, 0x7c, 0x7f, 0xa1, 0xcc, 0xe2, 0xef, 0x10, 0x8a, 0x11, 0xde, 0xd5, 0xf7, 0x7d, 0xc9, 0xd4, + 0x99, 0xb0, 0xa9, 0xeb, 0xf1, 0x6e, 0x4e, 0x9f, 0xee, 0x31, 0xbe, 0xa8, 0x11, 0x65, 0xc2, 0x90, + 0x91, 0x1e, 0x4c, 0x97, 0xae, 0x15, 0x58, 0xa0, 0x13, 0xd6, 0xe1, 0x1c, 0x44, 0x85, 0xb6, 0x52, + 0x87, 0xfa, 0xb1, 0x67, 0xa1, 0x7b, 0x20, 0x6f, 0x87, 0x32, 0xf8, 0x74, 0xfc, 0x4d, 0xab, 0x6e, + 0x46, 0x4a, 0xf2, 0x25, 0x10, 0xc4, 0xef, 0xa5, 0x80, 0x80, 0x29, 0xb5, 0x36, 0x49, 0xe3, 0x8b, + 0xc4, 0x8f, 0xed, 0xef, 0x55, 0xa6, 0x1d, 0x11, 0x9a, 0x38, 0x31, 0x42, 0x42, 0xad, 0x33, 0x3f, + 0x94, 0xd5, 0x12, 0x05, 0x7f, 0x5d, 0x38, 0xde, 0xec, 0x0b, 0xf1, 0x90, 0x7e, 0xd7, 0x0a, 0xa6, + 0x1f, 0x52, 0x78, 0x52, 0x2c, 0xb4, 0xd4, 0x8d, 0x34, 0x24, 0x2c, 0x18, 0x93, 0x01, 0x8a, 0x9a, + 0x05, 0x36, 0x2f, 0x75, 0xf5, 0xe2, 0x1d, 0x91, 0xe5, 0x5a, 0x22, 0x15, 0xd5, 0x28, 0x59, 0x6f, + 0x57, 0x99, 0x85, 0x7e, 0x48, 0x56, 0x72, 0xe1, 0x85, 0xd6, 0x47, 0xfc, 0xfd, 0xae, 0x72, 0x64, + 0x16, 0x98, 0xf5, 0xae, 0xa1, 0x8c, 0x79, 0x7a, 0x65, 0x89, 0x1a, 0xaf, 0x7a, 0x3c, 0x9a, 0xa9, + 0x28, 0x48, 0xe4, 0x19, 0x83, 0x0f, 0xaa, 0x53, 0xc0, 0x05, 0x7a, 0xd4, 0x7d, 0x1a, 0x81, 0xa7, + 0xc0, 0x8d, 0x9e, 0xd0, 0x28, 0xdc, 0x00, 0xbb, 0x10, 0x49, 0x12, 0x01, 0x19, 0x3f, 0xa1, 0xa5, + 0x24, 0xeb, 0x2b, 0x34, 0x9d, 0x5d, 0x28, 0x49, 0x88, 0x67, 0xd1, 0x84, 0x06, 0x2a, 0x6e, 0xfe, + 0x34, 0x90, 0x0d, 0xbf, 0x0f, 0x19, 0xca, 0x6f, 0xe3, 0x4a, 0x74, 0xcf, 0xe2, 0x2e, 0xc0, 0xb8, + 0xbf, 0x89, 0x90, 0xf3, 0x79, 0xdb, 0x4f, 0xba, 0x99, 0x37, 0xaa, 0x28, 0x24, 0x47, 0x22, 0xa0, + 0xaf, 0xcd, 0xad, 0x4c, 0xf4, 0xec, 0x90, 0xbf, 0x3d, 0xf3, 0x03, 0x57, 0xb8, 0x79, 0xdf, 0xcf, + 0x1c, 0x00, 0x62, 0xaa, 0x18, 0xa1, 0x25, 0xf5, 0xce, 0x96, 0x1a, 0x9d, 0x9a, 0x71, 0x2d, 0xf1, + 0x0e, 0x83, 0x0b, 0x7a, 0xb5, 0xfc, 0xc2, 0x5a, 0x64, 0xe4, 0x6c, 0x3e, 0x9f, 0xec, 0x79, 0x9b, + 0xc0, 0x1c, 0xc1, 0x71, 0xee, 0x03, 0xe1, 0xc5, 0xbf, 0xc4, 0x11, 0x8e, 0xc1, 0x44, 0x62, 0x58, + 0xdf, 0xd4, 0x27, 0x86, 0x1d, 0x52, 0xd7, 0x79, 0xc9, 0xec, 0xaa, 0xd0, 0xe3, 0xcb, 0x14, 0x8a, + 0x6f, 0xf9, 0x00, 0x44, 0x3c, 0xac, 0x5c, 0x97, 0xc6, 0xc8, 0x90, 0xb9, 0x35, 0x7b, 0xfe, 0x78, + 0xc9, 0x7c, 0x2a, 0xcb, 0xcb, 0xaf, 0x66, 0xbb, 0xd9, 0x5d, 0x15, 0xa9, 0x07, 0x4e, 0xb6, 0xbe, + 0x8a, 0xc7, 0xc7, 0xee, 0x1a, 0x27, 0x4d, 0x37, 0x5a, 0x94, 0xdc, 0x08, 0xb8, 0x39, 0xcc, 0x27, + 0xac, 0x12, 0xe3, 0x52, 0x81, 0x5d, 0xd1, 0x02, 0xfa, 0xe9, 0xdc, 0x58, 0xcb, 0x02, 0x49, 0xcf, + 0xad, 0x5b, 0xd3, 0x67, 0xc7, 0xc5, 0xeb, 0x18, 0xe9, 0x12, 0x2f, 0x35, 0xda, 0x89, 0x67, 0x15, + 0x02, 0x0e, 0x55, 0x44, 0xd7, 0x02, 0x47, 0x8c, 0xac, 0x66, 0x73, 0x0c, 0x67, 0xbe, 0xe1, 0x72, + 0xf5, 0xa7, 0xd2, 0x94, 0x64, 0x5d, 0x5c, 0x0a, 0xe2, 0x14, 0xc7, 0x4f, 0x77, 0xb1, 0xed, 0x36, + 0x53, 0xca, 0xb9, 0xbe, 0x90, 0x35, 0x3f, 0x00, 0x29, 0x2d, 0x38, 0xb7, 0x13, 0xad, 0x68, 0x33, + 0x9c, 0x56, 0x15, 0x2e, 0xd5, 0x04, 0x82, 0x63, 0x2b, 0x5b, 0xfa, 0x9a, 0x0d, 0xa6, 0x31, 0x50, + 0x2e, 0x3d, 0x62, 0xb1, 0x5c, 0x88, 0xe2, 0x9c, 0x5c, 0xd9, 0xf9, 0x82, 0xa2, 0x2c, 0xfb, 0x3b, + 0x60, 0x45, 0xdf, 0x8e, 0x14, 0x05, 0x5d, 0xbf, 0xda, 0x9f, 0x0e, 0xfb, 0x05, 0x03, 0x7d, 0x71, + 0x6c, 0xf9, 0xe0, 0xc3, 0xc0, 0x4a, 0x18, 0x47, 0x53, 0xcd, 0x4f, 0x16, 0x96, 0x10, 0xf7, 0xa7, + 0xdf, 0x82, 0x44, 0xff, 0x49, 0xd3, 0xb7, 0x5e, 0xdc, 0x4f, 0x18, 0xb9, 0x57, 0x3b, 0x35, 0xdd, + 0x88, 0xe5, 0x44, 0x73, 0x5f, 0x78, 0x12, 0x30, 0x7c, 0x01, 0x14, 0x9f, 0x0d, 0x2c, 0xe8, 0x9b, + 0x30, 0x21, 0xe8, 0x8f, 0x16, 0x3a, 0x67, 0x8f, 0x27, 0x3e, 0xbe, 0x8e, 0xd4, 0xfa, 0x7a, 0x20, + 0xf4, 0xd9, 0x01, 0x41, 0xcb, 0x10, 0x2b, 0xc5, 0xd7, 0x9e, 0x07, 0xa8, 0xbd, 0x94, 0x6f, 0x34, + 0x02, 0x44, 0x3a, 0x76, 0xbe, 0xfa, 0x5f, 0xff, 0x32, 0x1c, 0xcd, 0x66, 0xf5, 0x8d, 0xc1, 0x4c, + 0xb6, 0x7d, 0x97, 0x16, 0xdb, 0xa6, 0x49, 0x49, 0x01, 0xc0, 0x56, 0x13, 0xb1, 0xc4, 0xa2, 0xb8, + 0x31, 0xce, 0xdc, 0x61, 0x07, 0x35, 0xe9, 0x07, 0xb2, 0x99, 0xa3, 0xdc, 0x07, 0x31, 0x2e, 0xa6, + 0x76, 0xfb, 0x67, 0x22, 0x33, 0x99, 0x76, 0x11, 0x5b, 0xc1, 0x90, 0xc5, 0xd6, 0x6e, 0x42, 0x33, + 0x38, 0x5d, 0x6f, 0x47, 0xce, 0xec, 0x15, 0xd7, 0x0d, 0x31, 0xe2, 0xae, 0x47, 0x7f, 0xad, 0x6b, + 0xfd, 0x1c, 0x07, 0x70, 0xec, 0xc2, 0x95, 0xa9, 0x03, 0xc3, 0x39, 0x84, 0x1e, 0xe6, 0xc4, 0xf4, + 0x5f, 0xd9, 0x4b, 0xf6, 0x35, 0x48, 0x72, 0x82, 0x5a, 0xe8, 0x63, 0x21, 0x51, 0x9c, 0x88, 0x90, + 0x73, 0x13, 0x3c, 0x7a, 0x13, 0xdd, 0x19, 0x97, 0x84, 0xc5, 0x36, 0x7e, 0x7d, 0xeb, 0xa0, 0xd4, + 0x23, 0xa0, 0xd1, 0xae, 0x44, 0x0f, 0x7b, 0x9e, 0xdf, 0x3f, 0x56, 0x00, 0x79, 0x87, 0xc7, 0x24, + 0x11, 0x47, 0x74, 0x63, 0x65, 0x60, 0x2d, 0x41, 0xc8, 0x4f, 0x8b, 0x81, 0xfb, 0xf6, 0xad, 0x4c, + 0x4d, 0x82, 0x8b, 0xe8, 0x83, 0x49, 0xc2, 0x93, 0x4e, 0x75, 0xe7, 0xd2, 0xe1, 0x2b, 0xee, 0x75, + 0x57, 0x00, 0xcd, 0x3f, 0xd7, 0xf3, 0xbf, 0xf1, 0xb4, 0x8a, 0xae, 0xd1, 0x0f, 0x0a, 0x8b, 0xe6, + 0x81, 0xe6, 0x66, 0xf9, 0x32, 0x25, 0x4d, 0x75, 0xa3, 0xd0, 0xe5, 0x8d, 0x6d, 0x83, 0xf1, 0xea, + 0x61, 0xf2, 0xdf, 0x0b, 0xad, 0xd8, 0x9f, 0x19, 0xfd, 0xcb, 0x1a, 0x84, 0x0f, 0x63, 0x15, 0x0c, + 0xe0, 0x7f, 0x5d, 0x52, 0x2d, 0xb9, 0x1b, 0x59, 0x5c, 0x18, 0x35, 0x67, 0x83, 0x71, 0xa6, 0x7e, + 0xcc, 0x27, 0x49, 0x1e, 0x28, 0x34, 0x79, 0x1a, 0x93, 0x0c, 0xea, 0x8f, 0x51, 0x7c, 0x69, 0x6a, + 0x7b, 0xa5, 0x96, 0x67, 0x45, 0x61, 0x38, 0xf2, 0x6a, 0xad, 0xb7, 0xf3, 0xf1, 0x12, 0x0f, 0x74, + 0x0c, 0x3a, 0xb3, 0xbe, 0x4a, 0xb3, 0x93, 0xa4, 0xdb, 0x24, 0xe8, 0x01, 0x17, 0xb5, 0x19, 0x3d, + 0x2b, 0xfa, 0x24, 0x1b, 0xf8, 0x61, 0x5f, 0x61, 0x0c, 0xb4, 0xf6, 0x50, 0x53, 0x21, 0x81, 0x00, + 0xdd, 0x28, 0xf8, 0x59, 0x41, 0xec, 0x2f, 0x74, 0xb9, 0xb5, 0x8a, 0x00, 0xe7, 0x11, 0x4b, 0xe6, + 0x2c, 0x8d, 0x29, 0x74, 0x5b, 0x09, 0xfb, 0xc9, 0x5a, 0xb2, 0x27, 0x8c, 0x02, 0x68, 0xb0, 0xcf, + 0xa4, 0x23, 0xd9, 0xbc, 0x17, 0x9c, 0x45, 0x88, 0x70, 0x13, 0x21, 0xba, 0x79, 0x78, 0xf4, 0xe0, + 0x5a, 0xf6, 0x01, 0x25, 0xab, 0x18, 0xd8, 0xf2, 0xcd, 0xf4, 0x75, 0x96, 0xac, 0xb7, 0x76, 0x4e, + 0x30, 0x9b, 0x23, 0x33, 0xe1, 0x87, 0x66, 0x51, 0x1a, 0x7b, 0x1b, 0x4f, 0xa1, 0xb2, 0x77, 0xe1, + 0x00, 0x7d, 0xcb, 0x70, 0x45, 0xbc, 0xc4, 0xa8, 0x85, 0xb8, 0xe5, 0x37, 0x0a, 0x6f, 0xc7, 0xec, + 0xd7, 0xe6, 0xc4, 0xeb, 0x6f, 0x90, 0xef, 0x6a, 0x65, 0xef, 0xd4, 0x74, 0x3c, 0x5d, 0x76, 0xc8, + 0xba, 0x66, 0x15, 0x0d, 0x22, 0x1f, 0x95, 0x16, 0x2f, 0x8e, 0x59, 0x8d, 0xea, 0x31, 0x07, 0x84, + 0x06, 0xeb, 0x5e, 0xc9, 0xb8, 0x4d, 0xfe, 0x4c, 0x58, 0x59, 0xae, 0x06, 0xc9, 0xd3, 0x80, 0x8d, + 0xb1, 0x90, 0xd9, 0x42, 0x1d, 0x4d, 0x0b, 0xf7, 0xa4, 0xa5, 0x4b, 0x69, 0x5b, 0xb4, 0x9e, 0xed, + 0x37, 0x93, 0xdc, 0x32, 0x77, 0x4d, 0x21, 0x5e, 0xde, 0x96, 0x78, 0xb4, 0xcc, 0xfa, 0x8a, 0x3b, + 0x45, 0x19, 0x06, 0x7f, 0x44, 0x34, 0x21, 0x2a, 0xf7, 0x1b, 0x28, 0x30, 0xf7, 0x46, 0x05, 0x8b, + 0x3f, 0xbe, 0x79, 0xaf, 0xfd, 0xf7, 0xbb, 0x79, 0x4d, 0x2d, 0x35, 0x1e, 0x07, 0xbf, 0x92, 0xb8, + 0xae, 0xaa, 0x92, 0x6f, 0xd2, 0x46, 0xbc, 0x76, 0xa8, 0x16, 0x21, 0x2f, 0x27, 0x78, 0x35, 0xf4, + 0xdb, 0x76, 0x31, 0x2a, 0x0d, 0x19, 0xff, 0x29, 0xf3, 0xbc, 0x58, 0x73, 0xd9, 0x50, 0x70, 0xfc, + 0x35, 0xaa, 0xf2, 0xef, 0x14, 0xb5, 0x1f, 0x72, 0x02, 0xf3, 0x36, 0x7e, 0x4c, 0xe5, 0x9b, 0x09, + 0x0a, 0xa4, 0x73, 0xbf, 0xb3, 0x7e, 0x2c, 0x26, 0x6f, 0x99, 0x6d, 0x9f, 0x09, 0x7f, 0xf7, 0xc7, + 0x7c, 0x2a, 0x7c, 0x2f, 0xef, 0x48, 0x3a, 0xce, 0x97, 0x7f, 0x97, 0x81, 0x08, 0x0f, 0xd9, 0x29, + 0xc4, 0xa6, 0x4a, 0xab, 0x23, 0x19, 0x27, 0xdf, 0xfc, 0xa8, 0x19, 0x08, 0xbc, 0xa8, 0xc7, 0x7f, + 0xfb, 0x58, 0x3f, 0x2c, 0x0a, 0x6e, 0x2a, 0xca, 0x5d, 0xf6, 0xd2, 0x5c, 0x39, 0xb4, 0xe0, 0x8d, + 0x90, 0xac, 0xb8, 0x5b, 0xa9, 0x40, 0xca, 0x1e, 0x30, 0x1e, 0x69, 0xfd, 0x4f, 0x29, 0x90, 0x05, + 0xf2, 0x82, 0x63, 0x4e, 0xbb, 0x47, 0x0b, 0x37, 0x54, 0x58, 0x87, 0x71, 0xab, 0xe9, 0x89, 0xbc, + 0xa8, 0x53, 0xfe, 0x72, 0x82, 0x91, 0x49, 0x6d, 0x20, 0x76, 0xb8, 0x28, 0xb8, 0xc0, 0xd0, 0xdf, + 0xd0, 0xfe, 0xff, 0x19, 0xa7, 0x4f, 0xa9, 0x15, 0x72, 0x1b, 0xf3, 0x11, 0xd9, 0x61, 0x67, 0x30, + 0xe2, 0xb6, 0x7b, 0x17, 0x21, 0x6b, 0xca, 0x23, 0x0d, 0xfe, 0xac, 0x3c, 0x43, 0xb4, 0xb0, 0x38, + 0xef, 0x0e, 0x32, 0x79, 0x1d, 0x4f, 0x37, 0xe8, 0xf3, 0x1d, 0xd7, 0xfb, 0xda, 0x4c, 0xcf, 0x74, + 0xbb, 0xda, 0xa3, 0x44, 0x0d, 0x4f, 0x28, 0x19, 0x11, 0x1c, 0x75, 0x69, 0xf3, 0x6d, 0x66, 0x58, + 0x86, 0xdc, 0xd6, 0xb8, 0x75, 0x9d, 0x39, 0xa2, 0xb6, 0xd6, 0xe7, 0x5f, 0x28, 0x2a, 0xe4, 0x85, + 0xf9, 0xc3, 0x67, 0x43, 0xec, 0x9e, 0xef, 0x09, 0xa1, 0x00, 0xf2, 0x1a, 0xb2, 0xb3, 0x01, 0xe8, + 0xb8, 0x66, 0xde, 0xf2, 0x6f, 0x18, 0x02, 0xe4, 0x0d, 0x80, 0x4f, 0xdd, 0xcc, 0x8d, 0x80, 0xfa, + 0xef, 0x9f, 0xdc, 0xe0, 0x7d, 0xea, 0x3b, 0x41, 0x2b, 0x13, 0x7c, 0x45, 0x07, 0x11, 0xa9, 0xae, + 0x5f, 0x1e, 0x9b, 0xa1, 0x20, 0x3a, 0xfe, 0x09, 0x92, 0xae, 0x29, 0x8f, 0xa5, 0x17, 0x80, 0x84, + 0x2c, 0x95, 0xa7, 0xf2, 0x70, 0xcb, 0x6f, 0x68, 0x53, 0x2a, 0xa3, 0xde, 0x2a, 0xaf, 0xd5, 0x53, + 0x1c, 0x8d, 0xf4, 0xda, 0xe5, 0xc1, 0x32, 0xbc, 0x1b, 0x7e, 0xcb, 0x4f, 0x54, 0x7c, 0x94, 0x15, + 0xe1, 0x91, 0x91, 0x9a, 0x0b, 0xe6, 0xe7, 0xad, 0xf0, 0xd7, 0x7a, 0xf2, 0x14, 0x2f, 0x84, 0x01, + 0x06, 0xca, 0x5a, 0x67, 0x8f, 0xfa, 0x40, 0x84, 0x48, 0xd6, 0x2d, 0xbc, 0x04, 0x93, 0x07, 0x34, + 0x1b, 0xf2, 0xc9, 0x8d, 0xe4, 0x10, 0xc9, 0x8b, 0xd1, 0x24, 0x27, 0xf4, 0x2d, 0xff, 0xc1, 0x1f, + 0x9e, 0x8e, 0xac, 0xf7, 0xb8, 0xcd, 0x03, 0xc0, 0x0d, 0x7b, 0xec, 0x8c, 0x75, 0x86, 0x73, 0x71, + 0x0a, 0xb4, 0xe7, 0x38, 0xb7, 0x2b, 0xb0, 0xac, 0x7b, 0x83, 0x46, 0xeb, 0xb4, 0x12, 0x52, 0x90, + 0xb7, 0x51, 0x4b, 0x8f, 0xa9, 0xad, 0x2b, 0x47, 0x16, 0x82, 0xee, 0x68, 0x92, 0x58, 0x33, 0xd4, + 0xef, 0xed, 0xe0, 0xf8, 0x5b, 0x32, 0x9b, 0x0c, 0xe1, 0x80, 0x99, 0x48, 0x42, 0x95, 0xb0, 0x32, + 0x7d, 0x25, 0x94, 0x2c, 0x77, 0xbf, 0x46, 0x65, 0x34, 0x0f, 0x23, 0x59, 0x87, 0xfe, 0x09, 0xca, + 0x3a, 0x2f, 0x9c, 0x09, 0x87, 0x03, 0xa7, 0x72, 0x8d, 0x24, 0x87, 0x1d, 0xd3, 0x9b, 0x88, 0x80, + 0x14, 0xe3, 0x12, 0x27, 0x76, 0x00, 0x2a, 0xff, 0x61, 0x91, 0xc0, 0x82, 0xa5, 0x5b, 0x96, 0xa2, + 0xe0, 0x42, 0x80, 0x52, 0xfe, 0x29, 0xb6, 0x53, 0x13, 0x17, 0xb0, 0xf9, 0xfd, 0xf7, 0x28, 0x92, + 0x61, 0x7b, 0x71, 0x51, 0xdc, 0x83, 0xb4, 0x9a, 0xcb, 0x50, 0x38, 0x64, 0xcc, 0xb1, 0xd4, 0x8b, + 0x85, 0x4b, 0xf2, 0x08, 0x5b, 0x94, 0x56, 0xc6, 0x72, 0x9d, 0x7e, 0x9e, 0xd3, 0xc0, 0xc7, 0x8f, + 0x72, 0x77, 0xd1, 0xf5, 0x4f, 0x3b, 0x40, 0x45, 0x50, 0x6e, 0x3b, 0x70, 0x0d, 0x43, 0xc3, 0x42, + 0x5b, 0x6a, 0x46, 0xcb, 0x8b, 0x70, 0xca, 0x0f, 0xc3, 0xc0, 0x04, 0x4b, 0x92, 0xd4, 0x31, 0x4f, + 0x88, 0xcf, 0x9e, 0x78, 0x1a, 0xad, 0x11, 0x23, 0xdc, 0x5a, 0xb4, 0x80, 0x63, 0x18, 0x51, 0x81, + 0x60, 0xa5, 0x0e, 0x4c, 0x78, 0xcd, 0x9b, 0x05, 0xde, 0xb1, 0xde, 0x6b, 0x9e, 0x48, 0x63, 0x55, + 0x3c, 0x0c, 0x79, 0x52, 0x43, 0x25, 0xcb, 0x69, 0x32, 0x1b, 0x75, 0xa8, 0xf1, 0x72, 0xe3, 0x83, + 0xae, 0x61, 0x07, 0x14, 0xee, 0x1f, 0x38, 0xb1, 0xa2, 0x78, 0x83, 0x3c, 0xb2, 0x3c, 0xcf, 0x2a, + 0x4e, 0x08, 0x56, 0xfc, 0x00, 0xbc, 0x45, 0x9f, 0x61, 0x04, 0x94, 0x61, 0xf8, 0xe9, 0x03, 0xc9, + 0x55, 0x51, 0xe0, 0xaf, 0x65, 0x52, 0x7d, 0x20, 0xd7, 0xca, 0x91, 0x52, 0x09, 0x09, 0x42, 0xc6, + 0xbd, 0x83, 0x65, 0xd8, 0x50, 0x07, 0xfe, 0xfd, 0x94, 0x81, 0xa9, 0xea, 0x91, 0x99, 0xb7, 0x95, + 0x5d, 0xe4, 0x50, 0x0d, 0xb2, 0xdb, 0xd4, 0x68, 0x37, 0x0e, 0xcd, 0xe6, 0xa1, 0x92, 0xe4, 0xe1, + 0x49, 0xad, 0xe9, 0x5f, 0x58, 0xc8, 0xfc, 0x51, 0x9a, 0x70, 0xfd, 0xa4, 0x9d, 0x48, 0x24, 0x72, + 0x8b, 0x8e, 0xae, 0x13, 0x98, 0xa9, 0x81, 0x0b, 0x93, 0xe6, 0x74, 0x5d, 0x45, 0xa0, 0x84, 0x8e, + 0x97, 0x29, 0x97, 0xc1, 0xde, 0x75, 0x01, 0x75, 0xea, 0x3e, 0x33, 0x48, 0x5c, 0x03, 0xb1, 0x89, + 0xf4, 0x93, 0xe1, 0xd3, 0xb2, 0xa2, 0x8b, 0xa9, 0x48, 0x5c, 0x69, 0x26, 0xd0, 0x56, 0x2a, 0xbe, + 0xa5, 0x90, 0xe7, 0x0b, 0x78, 0x38, 0x6e, 0xa4, 0x8c, 0x49, 0xeb, 0x0c, 0x2e, 0xe6, 0x10, 0xaa, + 0x9a, 0x2e, 0x26, 0xdd, 0xb8, 0x76, 0xc0, 0xab, 0x67, 0x66, 0x24, 0xc2, 0x6d, 0xd2, 0x3b, 0xe5, + 0x9a, 0x9d, 0x84, 0xe9, 0x56, 0x88, 0xbf, 0x6b, 0xe2, 0xe1, 0x48, 0xb0, 0x95, 0xc0, 0xe6, 0xbd, + 0x86, 0x02, 0x85, 0x1e, 0x1a, 0xfc, 0x17, 0x4a, 0x77, 0x73, 0xf6, 0xcd, 0xcf, 0x37, 0xf4, 0xa7, + 0x82, 0x7c, 0x68, 0xab, 0xe7, 0xc5, 0xda, 0xe4, 0xcf, 0x4e, 0x33, 0xe1, 0x0b, 0x4d, 0x8d, 0x9d, + 0x36, 0xdb, 0x93, 0xc8, 0xe8, 0x5d, 0xf2, 0x7f, 0x04, 0xcb, 0xbb, 0x13, 0x41, 0x3d, 0x4c, 0x92, + 0x63, 0x91, 0x76, 0xdd, 0xfd, 0xdb, 0xc0, 0x2b, 0x4b, 0xa4, 0x44, 0xd1, 0x6f, 0xff, 0x29, 0xaf, + 0x88, 0x1e, 0x40, 0x46, 0x2b, 0x5a, 0x89, 0xd6, 0x15, 0x9d, 0xfe, 0x77, 0xd0, 0xb9, 0x24, 0x82, + 0x37, 0xe1, 0x43, 0x3b, 0xe0, 0x96, 0xeb, 0xe2, 0x81, 0x5b, 0xcb, 0xc7, 0x79, 0x24, 0xf9, 0x56, + 0x87, 0x52, 0xf1, 0x8e, 0x39, 0x2d, 0x8a, 0xaf, 0xd5, 0x21, 0x34, 0x5d, 0x55, 0x04, 0x10, 0xb7, + 0xf5, 0x01, 0xd4, 0x7c, 0x9d, 0x1e, 0x34, 0x56, 0xb3, 0xef, 0xbb, 0xf0, 0x67, 0x16, 0x79, 0x2c, + 0xc2, 0xb9, 0x6c, 0x8a, 0xd7, 0x8e, 0x9a, 0x48, 0x89, 0xe0, 0x85, 0x62, 0xa8, 0xd3, 0xb3, 0x7d, + 0xb0, 0x44, 0x1c, 0x5a, 0x0c, 0x22, 0x09, 0xd2, 0x19, 0x74, 0x5a, 0x19, 0x38, 0x51, 0xeb, 0x48, + 0x63, 0xb0, 0x00, 0x0d, 0xc4, 0xd6, 0x44, 0x83, 0x78, 0x3a, 0x43, 0x9d, 0x51, 0xac, 0x0a, 0xa7, + 0xe8, 0x5d, 0xb3, 0xa9, 0x2d, 0x4b, 0xe3, 0xc1, 0x68, 0xdd, 0xbb, 0x21, 0x49, 0xb8, 0xde, 0x01, + 0x86, 0x07, 0x5c, 0xd5, 0x2a, 0xa5, 0xc8, 0x32, 0x4f, 0xec, 0x66, 0xf8, 0x66, 0x21, 0x43, 0x49, + 0xe1, 0x9b, 0xdb, 0xcd, 0x61, 0xab, 0xfb, 0xae, 0x17, 0xaa, 0xa9, 0x7c, 0xb2, 0x27, 0x45, 0x47, + 0xa9, 0xbb, 0xa3, 0xa2, 0x21, 0xd0, 0xa7, 0x04, 0xaa, 0x70, 0x77, 0xae, 0x0f, 0x8f, 0x3e, 0x47, + 0xa5, 0xb8, 0xef, 0xde, 0x61, 0xcb, 0xb8, 0x71, 0xc7, 0xaf, 0x15, 0xfc, 0xcf, 0x65, 0xe5, 0xe1, + 0x21, 0x49, 0x69, 0x77, 0x5e, 0x1e, 0xc3, 0xa7, 0xf1, 0x12, 0x14, 0xbe, 0xe3, 0xa9, 0xb1, 0xe9, + 0xc9, 0x92, 0x86, 0xb9, 0x60, 0x32, 0x7c, 0xf6, 0xf0, 0xe8, 0xbf, 0xae, 0x1d, 0x58, 0x9e, 0x6b, + 0x0d, 0xd5, 0xd9, 0x3e, 0x42, 0x57, 0x69, 0xb5, 0xd5, 0xe6, 0x22, 0x2c, 0x12, 0x8e, 0xe1, 0xd1, + 0x57, 0xff, 0xaa, 0x7a, 0xb2, 0x9c, 0x27, 0x81, 0x6d, 0x87, 0xd2, 0xbc, 0xa6, 0xa0, 0x95, 0xc5, + 0xa5, 0x3d, 0x5d, 0xcf, 0xc9, 0x23, 0xc9, 0xa9, 0xb4, 0x07, 0xf1, 0x64, 0xef, 0x1f, 0x7a, 0xb1, + 0x22, 0x31, 0x22, 0x68, 0xc0, 0x54, 0x96, 0x39, 0x1c, 0xb3, 0xfb, 0x87, 0x60, 0xa0, 0x4b, 0xcd, + 0xe4, 0xb9, 0x2d, 0xf5, 0xaf, 0xb8, 0x1a, 0xe0, 0x4e, 0xed, 0x1c, 0x64, 0x0b, 0xb2, 0xc6, 0xa2, + 0xf9, 0xf1, 0x90, 0x9d, 0xfe, 0x92, 0x45, 0x95, 0x0c, 0x24, 0xe1, 0x44, 0x3e, 0xe1, 0x1a, 0xab, + 0x04, 0x48, 0x97, 0xd7, 0x83, 0x7b, 0x81, 0x12, 0xa9, 0x5d, 0xe3, 0xe3, 0xbf, 0x97, 0xd6, 0x99, + 0x51, 0x3d, 0xcb, 0xd8, 0xed, 0x6c, 0x2e, 0x67, 0xf7, 0x90, 0x77, 0xf5, 0xf8, 0x5e, 0x34, 0x4c, + 0xa5, 0xe8, 0xfd, 0x11, 0xf0, 0x96, 0xc8, 0xf3, 0x83, 0x5e, 0x7a, 0x01, 0xfe, 0x42, 0x5a, 0xa0, + 0xeb, 0xd1, 0x02, 0x18, 0x58, 0xc1, 0xf0, 0xc1, 0xc9, 0x19, 0x64, 0x18, 0xd6, 0xa3, 0x10, 0x00, + 0x9c, 0x07, 0xcf, 0x01, 0x2a, 0x8e, 0x97, 0xf5, 0xbc, 0x46, 0x5f, 0xc8, 0x14, 0xa1, 0xb0, 0x80, + 0xd6, 0x43, 0xd3, 0xb6, 0x1f, 0x22, 0xf3, 0x8c, 0x72, 0x1f, 0xbb, 0x19, 0x82, 0xfe, 0xc1, 0x0f, + 0x1a, 0x4e, 0x59, 0xbb, 0xf7, 0x8c, 0x71, 0xbc, 0xa8, 0x12, 0x31, 0xf9, 0xcf, 0xd9, 0x26, 0xf1, + 0xa2, 0xc2, 0x55, 0x2d, 0xc3, 0xe1, 0x2d, 0x88, 0xa1, 0x2c, 0x5a, 0xbf, 0x2c, 0xec, 0xc3, 0x1d, + 0x41, 0x4b, 0xa6, 0xb7, 0x9a, 0x34, 0x7d, 0x1e, 0x7e, 0x0e, 0x57, 0x6f, 0x99, 0xc7, 0x15, 0xcc, + 0xa9, 0x76, 0x11, 0x9f, 0x82, 0xbc, 0x1a, 0x8c, 0x83, 0x33, 0x55, 0x9e, 0x13, 0x85, 0x46, 0xbb, + 0xf1, 0xd1, 0x8a, 0xf6, 0xde, 0xff, 0xe6, 0x70, 0x0d, 0x2d, 0x63, 0x56, 0xda, 0x3c, 0x63, 0x47, + 0x91, 0xb2, 0xaf, 0x43, 0xf3, 0x86, 0x3c, 0xf1, 0x34, 0x37, 0x13, 0xf9, 0x60, 0x50, 0x95, 0xf7, + 0xce, 0x6e, 0x55, 0xda, 0xff, 0x1f, 0xe6, 0x8c, 0x15, 0xea, 0xe4, 0xe2, 0xc3, 0xcd, 0x7b, 0x93, + 0x65, 0xfc, 0x1e, 0xc7, 0xb3, 0xe1, 0x6d, 0xd7, 0xf6, 0xb0, 0x38, 0x77, 0x9d, 0xfc, 0x01, 0xce, + 0x7e, 0xf0, 0xe0, 0xc2, 0xf6, 0x28, 0xb2, 0x33, 0xa2, 0xd8, 0x7c, 0x93, 0x39, 0x15, 0x43, 0x7c, + 0x3b, 0x9d, 0x5b, 0x50, 0xe1, 0x06, 0xec, 0xfd, 0x2b, 0xd6, 0xb6, 0xe9, 0xbe, 0xbd, 0x74, 0xe0, + 0x1d, 0x76, 0x4a, 0x3d, 0x7d, 0xb5, 0xa7, 0x24, 0x6f, 0x52, 0x84, 0x95, 0xef, 0x57, 0xe8, 0x2b, + 0xa2, 0x69, 0x5e, 0x2c, 0x1e, 0x68, 0xe5, 0x10, 0x46, 0x15, 0x75, 0x81, 0x7b, 0x70, 0x10, 0x37, + 0xa0, 0xb8, 0x05, 0x3c, 0x7f, 0x71, 0x33, 0xb9, 0x12, 0xae, 0x6a, 0xc8, 0xcc, 0x97, 0xf9, 0x5e, + 0x90, 0xcc, 0x29, 0xcb, 0x50, 0x29, 0xb5, 0x3d, 0x21, 0xeb, 0x3b, 0x7c, 0x70, 0xff, 0x9a, 0xa0, + 0x2c, 0x4e, 0xab, 0xa6, 0x25, 0x93, 0x7f, 0x48, 0xa0, 0xdd, 0x75, 0xfa, 0x9a, 0x16, 0xae, 0xdc, + 0x8e, 0x92, 0x72, 0x2d, 0x57, 0x60, 0x80, 0x37, 0x25, 0xb3, 0xba, 0x62, 0xa0, 0x47, 0x1d, 0x66, + 0x2a, 0xa9, 0x51, 0x14, 0xd5, 0x96, 0xb2, 0x3a, 0x61, 0x8a, 0xc7, 0x8d, 0xb7, 0xcd, 0x17, 0xca, + 0x74, 0x9d, 0x9c, 0x2e, 0x45, 0x68, 0x04, 0x66, 0x21, 0x3b, 0xe9, 0xb0, 0xb2, 0xde, 0x8b, 0xbb, + 0xee, 0xc1, 0x5d, 0xa1, 0x1c, 0x14, 0x10, 0xbd, 0x64, 0x72, 0x43, 0xb4, 0x21, 0x43, 0x0e, 0xdc, + 0xb7, 0x73, 0x45, 0x90, 0x67, 0xd2, 0xee, 0x4b, 0x9e, 0x9c, 0xe2, 0xec, 0x2a, 0xd9, 0x7a, 0x33, + 0xd5, 0x67, 0xb0, 0xc0, 0x42, 0xef, 0xbe, 0xa7, 0x9f, 0x49, 0x9a, 0x7b, 0x9b, 0xfb, 0xa4, 0x42, + 0x0c, 0xbf, 0x77, 0x7a, 0x3d, 0x8f, 0x5e, 0xf0, 0x86, 0x26, 0x9d, 0xf4, 0xd4, 0xbf, 0xc7, 0x1a, + 0x94, 0x84, 0xda, 0xc8, 0x1a, 0x2c, 0x22, 0x5a, 0xc5, 0x8d, 0x91, 0x4c, 0x22, 0x70, 0xfb, 0xec, + 0x11, 0x13, 0xdd, 0x38, 0x72, 0xb3, 0xc9, 0x6b, 0x29, 0xd5, 0x16, 0xc4, 0xc8, 0x30, 0xc1, 0x17, + 0xe9, 0x97, 0x51, 0xc4, 0x88, 0xd6, 0x27, 0x60, 0x64, 0x0b, 0x74, 0x9c, 0xf3, 0x4e, 0xc5, 0xa4, + 0x89, 0x32, 0x2d, 0xf0, 0x5f, 0xe4, 0x9c, 0xb4, 0x3c, 0xee, 0xa5, 0x5c, 0x98, 0x4b, 0x2f, 0x5a, + 0x60, 0x5a, 0xd4, 0xa5, 0x9b, 0xae, 0x1d, 0xcc, 0x9a, 0x2f, 0xc5, 0xa1, 0x74, 0x10, 0x9b, 0x82, + 0xfa, 0xfa, 0xf5, 0x3a, 0x3b, 0x0c, 0x4e, 0x72, 0xc2, 0x10, 0x99, 0x28, 0xd9, 0x60, 0x7b, 0x2b, + 0xdc, 0xc1, 0xb9, 0x83, 0x5d, 0x0e, 0xe5, 0x2d, 0x3e, 0xc4, 0x85, 0xbc, 0x7e, 0x29, 0x59, 0x32, + 0xd3, 0x97, 0x25, 0x63, 0x1f, 0x51, 0xe9, 0x2d, 0x71, 0xf2, 0xa0, 0x89, 0x0b, 0xcd, 0xdf, 0x5b, + 0x68, 0x73, 0x77, 0x45, 0x6e, 0xb4, 0x60, 0x80, 0x07, 0x2a, 0x40, 0x97, 0x58, 0xef, 0x0b, 0x6a, + 0x10, 0x12, 0x7a, 0xbf, 0x2c, 0xcc, 0xe8, 0x00, 0x03, 0x08, 0xdf, 0xe2, 0xfc, 0xd2, 0x00, 0xe6, + 0xc7, 0x65, 0xec, 0x72, 0x16, 0x04, 0xcc, 0x8b, 0x8d, 0xe9, 0x67, 0x16, 0xc2, 0x57, 0x63, 0x96, + 0x84, 0x73, 0xb3, 0xc5, 0xe5, 0xcd, 0x2c, 0x0c, 0x7b, 0x1c, 0xf8, 0xf3, 0xe2, 0x5f, 0xf3, 0x00, + 0x4e, 0x08, 0xf8, 0x3b, 0xd6, 0x02, 0xdd, 0x07, 0x43, 0xf1, 0xaf, 0x24, 0x02, 0x6e, 0x1f, 0x3e, + 0xb8, 0xf5, 0xc6, 0xa6, 0x5c, 0x47, 0x61, 0x0f, 0x5f, 0x22, 0x48, 0x12, 0xf6, 0xd5, 0xe7, 0xdb, + 0x7c, 0x0a, 0x82, 0x8c, 0x96, 0x7d, 0xa7, 0xf1, 0xad, 0x08, 0x2d, 0x85, 0x7f, 0x7d, 0xd4, 0xff, + 0xed, 0x6e, 0xc9, 0x72, 0x30, 0x66, 0xec, 0x77, 0x03, 0x60, 0x82, 0xd2, 0x85, 0xbb, 0x4d, 0xe4, + 0xee, 0x47, 0xfb, 0x51, 0xaa, 0x87, 0x59, 0xa7, 0x7f, 0x2b, 0xe2, 0xd6, 0x60, 0x07, 0x52, 0x3d, + 0x13, 0x39, 0x9c, 0x86, 0x2f, 0x69, 0x0d, 0x76, 0xfa, 0x9a, 0x2e, 0x93, 0xe9, 0x03, 0xad, 0xa1, + 0x63, 0xd4, 0x84, 0xb1, 0xa1, 0x33, 0x1f, 0x28, 0x43, 0xd7, 0x46, 0xa7, 0xb9, 0x38, 0x57, 0x29, + 0xee, 0xd8, 0xff, 0xf7, 0x57, 0x44, 0x68, 0x08, 0x8c, 0xbc, 0xc0, 0xff, 0x2a, 0xe4, 0xfd, 0x47, + 0x27, 0x64, 0x7f, 0x1b, 0xa9, 0xce, 0xb5, 0x4f, 0x91, 0xa5, 0x14, 0x2c, 0x8f, 0xaa, 0x51, 0x32, + 0x14, 0xa3, 0x20, 0xde, 0x4f, 0x64, 0x73, 0xf7, 0xe1, 0x91, 0x8a, 0x7b, 0x4a, 0xdc, 0x9b, 0xb8, + 0xe3, 0x3f, 0x31, 0xed, 0x99, 0xe5, 0x69, 0x8d, 0x91, 0x8a, 0xd7, 0x7f, 0x07, 0xc9, 0x0f, 0xbb, + 0x1a, 0x72, 0x2b, 0x7c, 0x78, 0xe5, 0xa4, 0x9d, 0x83, 0x49, 0xc7, 0xc8, 0x50, 0xeb, 0x05, 0x2e, + 0x4c, 0xb1, 0x57, 0x57, 0xc2, 0x84, 0x3e, 0x51, 0x44, 0x8f, 0x41, 0xc8, 0x59, 0xe4, 0xfd, 0x68, + 0x4c, 0x2f, 0xaf, 0x15, 0xf5, 0x95, 0x59, 0xf3, 0x7a, 0xe4, 0x62, 0x01, 0xd4, 0xf1, 0x32, 0x6b, + 0x96, 0xbe, 0x27, 0xf5, 0x20, 0xe4, 0x50, 0x33, 0xa6, 0x34, 0x1f, 0xb4, 0x21, 0xc6, 0xd8, 0xf5, + 0xb5, 0x06, 0xe1, 0xf2, 0x17, 0x25, 0x99, 0xa7, 0x25, 0x8a, 0x08, 0x17, 0x5e, 0x9a, 0xf1, 0x69, + 0x2d, 0xeb, 0x86, 0x0e, 0xf2, 0x0f, 0x63, 0xbe, 0x85, 0xdb, 0x0c, 0xf6, 0x3d, 0xa8, 0x32, 0xce, + 0x21, 0xc8, 0xc9, 0x33, 0xc9, 0xde, 0x9a, 0x9c, 0x29, 0x65, 0x34, 0xa8, 0xd8, 0x82, 0x9f, 0x22, + 0xbe, 0x6b, 0x9e, 0x6d, 0x93, 0x5a, 0x52, 0xcf, 0x63, 0xb8, 0x96, 0x31, 0xad, 0xa3, 0x9c, 0x95, + 0x05, 0x20, 0xc7, 0x25, 0x0d, 0x8c, 0x1b, 0xb3, 0x40, 0x8a, 0x53, 0xd7, 0xfb, 0x33, 0x8f, 0x46, + 0x85, 0xb9, 0xc3, 0x55, 0xfd, 0x06, 0x0f, 0x87, 0xc7, 0xc7, 0x46, 0xe7, 0x9b, 0x63, 0x5c, 0x00, + 0xa2, 0x3b, 0x05, 0xe6, 0x0c, 0xc8, 0xea, 0x48, 0x34, 0xfd, 0x43, 0x9a, 0xc2, 0xa8, 0xe6, 0x12, + 0x96, 0xa9, 0xb2, 0x5d, 0x6f, 0x66, 0x8b, 0x1a, 0x8c, 0x54, 0x24, 0xd4, 0x7a, 0xd5, 0x2e, 0xb3, + 0x00, 0xd7, 0x5e, 0xba, 0x46, 0xea, 0x95, 0xa8, 0x71, 0x9f, 0x9c, 0x4a, 0xd0, 0x8c, 0xaf, 0x26, + 0xcf, 0x2f, 0x7e, 0x44, 0xa9, 0x20, 0x35, 0x5f, 0x41, 0xfe, 0x67, 0x03, 0x2d, 0x1d, 0x37, 0x04, + 0x07, 0x23, 0x00, 0x59, 0x61, 0x05, 0xce, 0xc4, 0x40, 0x02, 0x6f, 0xa3, 0x17, 0x97, 0xe5, 0xac, + 0x38, 0x71, 0xf9, 0xec, 0xed, 0x0b, 0xa4, 0x14, 0x57, 0xcb, 0xc4, 0x6c, 0xbb, 0xa9, 0xa9, 0x74, + 0x17, 0xc2, 0xc5, 0x65, 0x7d, 0xad, 0xd8, 0x03, 0x08, 0x9d, 0x7f, 0x98, 0x3e, 0xf4, 0x98, 0x15, + 0xed, 0x61, 0x48, 0xf6, 0xdd, 0xd9, 0xa5, 0x01, 0xc6, 0xd7, 0x53, 0xd6, 0x17, 0xdd, 0xc1, 0xab, + 0x63, 0x10, 0xbe, 0xd4, 0xdf, 0x23, 0x5a, 0x91, 0x67, 0xa2, 0x3a, 0xbf, 0x13, 0x37, 0xaf, 0xb7, + 0x18, 0xe8, 0xec, 0xcf, 0x01, 0xbf, 0x98, 0xe7, 0x3a, 0x10, 0xcf, 0xb4, 0x65, 0xc3, 0xa6, 0xa3, + 0x49, 0x29, 0xbf, 0xf4, 0xe2, 0x9f, 0x97, 0xab, 0xf0, 0x32, 0x25, 0xfa, 0xd0, 0x05, 0x0f, 0xee, + 0xb9, 0x93, 0xf8, 0x3b, 0x79, 0xa0, 0xdc, 0xa6, 0x65, 0x0e, 0x56, 0x4a, 0x9c, 0xcf, 0x0a, 0x4b, + 0xe4, 0x5f, 0x72, 0x51, 0xf5, 0xaf, 0xd8, 0xb8, 0xa4, 0xb0, 0xd7, 0x27, 0x48, 0x24, 0x8c, 0xa0, + 0x82, 0xc4, 0x00, 0x73, 0xe4, 0xd8, 0x54, 0x48, 0x98, 0x3b, 0x98, 0x68, 0x26, 0x9a, 0xb3, 0x0c, + 0xba, 0xd8, 0x9c, 0x9d, 0x8a, 0x04, 0x95, 0x7a, 0x13, 0x51, 0x75, 0xf3, 0x7c, 0xa9, 0x51, 0x34, + 0xe4, 0x12, 0x87, 0xdf, 0xa3, 0x78, 0xbe, 0xd6, 0xe5, 0x20, 0x76, 0xb7, 0xd0, 0x83, 0xe9, 0xb6, + 0x3d, 0x57, 0x46, 0x00, 0xa5, 0xd9, 0xf9, 0xa0, 0x3d, 0x18, 0xb4, 0x34, 0x1e, 0x7d, 0x3a, 0x47, + 0xc7, 0x4d, 0x32, 0xc0, 0xfc, 0x37, 0x47, 0x78, 0x49, 0xa2, 0xa8, 0xb1, 0x30, 0xc3, 0x6c, 0xb1, + 0xbd, 0x5d, 0x60, 0x32, 0xf7, 0xdf, 0x51, 0x8b, 0x47, 0xcf, 0x0a, 0x1f, 0xde, 0x1f, 0xc7, 0x6d, + 0xb0, 0xe1, 0x43, 0x9d, 0x07, 0x8c, 0x43, 0x8c, 0xa6, 0x6b, 0x3d, 0xd4, 0xb9, 0x77, 0x30, 0xb3, + 0x0f, 0xae, 0x83, 0x80, 0x6a, 0x55, 0xe3, 0x6c, 0xc6, 0xee, 0x09, 0x10, 0xf8, 0x13, 0xc0, 0xed, + 0x7a, 0xb5, 0x5b, 0xc6, 0x6f, 0x5f, 0x28, 0xa1, 0x16, 0xc3, 0xe9, 0x58, 0xe8, 0x48, 0x4d, 0xfb, + 0xdf, 0xd9, 0x24, 0xca, 0x3a, 0x90, 0x4b, 0x80, 0x43, 0xa4, 0x3a, 0x1e, 0x86, 0x2a, 0x68, 0xbf, + 0x7b, 0x0b, 0xb6, 0x92, 0xdf, 0x0f, 0xfa, 0x60, 0x7c, 0x3d, 0x53, 0x47, 0x64, 0xd6, 0x73, 0x03, + 0xe4, 0x67, 0x02, 0x87, 0xfc, 0xa8, 0xee, 0xb6, 0x95, 0x1d, 0xd8, 0x95, 0xef, 0x75, 0xb1, 0xad, + 0xd8, 0x5f, 0x11, 0x6e, 0x87, 0x5b, 0x12, 0xc9, 0x39, 0x67, 0x83, 0xce, 0x89, 0x60, 0x68, 0x53, + 0x6f, 0x91, 0x08, 0xa8, 0x0c, 0x71, 0xdb, 0x67, 0xe0, 0xbf, 0xe8, 0xc6, 0xba, 0x87, 0x66, 0xd3, + 0x1d, 0xa8, 0xba, 0xdc, 0x58, 0x0c, 0x0d, 0x99, 0x39, 0x82, 0x83, 0x38, 0xd6, 0x05, 0xa5, 0xaf, + 0x03, 0x8d, 0x69, 0xb0, 0x44, 0x5a, 0xfd, 0x37, 0xc0, 0x9d, 0x72, 0x49, 0x74, 0x03, 0xe6, 0x78, + 0x71, 0xbc, 0x47, 0xb1, 0xb3, 0xc1, 0x48, 0x83, 0x8d, 0x24, 0x2e, 0xe9, 0x37, 0x47, 0x1d, 0x8b, + 0x94, 0xe2, 0x7c, 0xf8, 0x2c, 0x93, 0x2b, 0xe1, 0x3a, 0x5c, 0xbc, 0xa4, 0xab, 0xc0, 0xc3, 0xb2, + 0x20, 0x7d, 0x32, 0x2f, 0x4a, 0x7c, 0x91, 0xf4, 0x79, 0xd8, 0x21, 0x79, 0x59, 0x0a, 0x79, 0x87, + 0x9d, 0xdd, 0xf6, 0xbf, 0xd8, 0xc0, 0xf5, 0x67, 0xe2, 0x49, 0xaf, 0xbc, 0xd9, 0x45, 0x1f, 0x17, + 0x66, 0xe9, 0x61, 0x0a, 0xb7, 0x35, 0x87, 0x56, 0xcf, 0xc9, 0x03, 0xfd, 0x5c, 0x28, 0xd8, 0xe5, + 0xb2, 0xc7, 0xc6, 0x6c, 0xc5, 0x4a, 0x6e, 0x2e, 0xe7, 0xe9, 0xe5, 0x39, 0xc3, 0x4e, 0x0e, 0x91, + 0xe3, 0xd0, 0x9f, 0x54, 0xa8, 0xa7, 0xf3, 0x98, 0x95, 0x1c, 0x7b, 0x61, 0xc2, 0x06, 0x21, 0x8c, + 0x5b, 0xea, 0x19, 0x4d, 0x38, 0xda, 0x14, 0xca, 0x81, 0x29, 0x67, 0x0b, 0xca, 0xd1, 0xf2, 0xe9, + 0x98, 0xd9, 0xaf, 0x17, 0xbe, 0x83, 0x61, 0x0e, 0xf1, 0x58, 0x94, 0xb6, 0xa4, 0x58, 0xaa, 0x08, + 0x6c, 0x82, 0xc3, 0xb2, 0x2f, 0xa4, 0x74, 0x26, 0x6e, 0xb2, 0x83, 0xeb, 0x68, 0x4d, 0x19, 0xf5, + 0x75, 0x0a, 0xf1, 0x05, 0x00, 0x00, 0x55, 0xd6, 0x6c, 0x20, 0xb9, 0x9f, 0x3f, 0xa0, 0x19, 0x90, + 0x76, 0x91, 0x64, 0x71, 0xf5, 0xaa, 0x47, 0xf4, 0x67, 0x10, 0xf1, 0xf2, 0xcf, 0x6a, 0x28, 0xd8, + 0x40, 0xb7, 0x3a, 0x7a, 0x4e, 0xc6, 0xe0, 0x6d, 0xeb, 0xd7, 0xe7, 0x60, 0x68, 0x50, 0x7b, 0xdd, + 0x87, 0x68, 0xf7, 0x4b, 0x9b, 0x54, 0xe3, 0x59, 0xd6, 0xa9, 0x01, 0x5a, 0xc8, 0xc3, 0x86, 0x50, + 0xbb, 0xb8, 0x94, 0xd9, 0x86, 0x00, 0x90, 0x22, 0x79, 0x6a, 0x12, 0x4d, 0xa6, 0xb0, 0x02, 0xd8, + 0xdb, 0x4d, 0x61, 0xe8, 0x12, 0xb8, 0xf0, 0x92, 0xa1, 0x51, 0xb7, 0x14, 0x68, 0xc8, 0x8a, 0x96, + 0x0a, 0xb3, 0x7f, 0xc1, 0xeb, 0x74, 0x89, 0xda, 0xf5, 0xe2, 0x40, 0x40, 0xd6, 0x36, 0x85, 0x5f, + 0x68, 0xed, 0xe9, 0xe8, 0x44, 0x91, 0x52, 0xb0, 0x33, 0xf2, 0x8e, 0x53, 0xe1, 0xce, 0xcf, 0xc6, + 0x2f, 0xf8, 0x00, 0x2a, 0x52, 0x66, 0xb7, 0x87, 0x9d, 0x4e, 0x3d, 0xfa, 0x8d, 0x12, 0x38, 0x00, + 0xcd, 0x9a, 0x01, 0x39, 0x88, 0xa7, 0x04, 0xc4, 0x8b, 0xe7, 0xda, 0xd8, 0x05, 0x04, 0x88, 0x98, + 0xd1, 0x78, 0xfa, 0x6a, 0x4d, 0xc4, 0xc0, 0x10, 0xd4, 0xb2, 0x34, 0xee, 0x35, 0x8c, 0x00, 0xf8, + 0x46, 0x82, 0x95, 0x7a, 0x7f, 0x12, 0x73, 0x68, 0x85, 0x76, 0x5c, 0xdd, 0x08, 0x29, 0x2f, 0xac, + 0xbb, 0xa9, 0xca, 0xd4, 0xec, 0xbd, 0x4b, 0x10, 0x74, 0x29, 0xe9, 0xc5, 0xb2, 0xe1, 0xb0, 0xa4, + 0xc2, 0xd7, 0xd1, 0x0a, 0xaf, 0x69, 0xbe, 0xa0, 0x09, 0x7a, 0x0b, 0xc8, 0xe4, 0xf0, 0x07, 0xd3, + 0x5e, 0x18, 0x64, 0xa0, 0xea, 0x19, 0x89, 0x5b, 0x1f, 0x87, 0xe8, 0xc6, 0x29, 0xf3, 0x25, 0x68, + 0x2f, 0x02, 0x72, 0x73, 0x2e, 0xe9, 0x24, 0x8c, 0x15, 0xf5, 0x97, 0x64, 0x00, 0x64, 0x3a, 0x6c, + 0xfc, 0xb8, 0xda, 0x56, 0x58, 0xf8, 0x6b, 0x84, 0x2a, 0xfb, 0x82, 0x90, 0x6c, 0x90, 0x28, 0x6c, + 0x5c, 0xd1, 0x4e, 0x05, 0x25, 0xa6, 0xed, 0xdd, 0x03, 0x09, 0x8a, 0xb6, 0x15, 0x09, 0xa7, 0x64, + 0xaa, 0xd8, 0x08, 0xd0, 0x8a, 0x17, 0xaf, 0xe4, 0x6c, 0x11, 0x5b, 0x06, 0x98, 0x7f, 0x95, 0x40, + 0x00, 0xbc, 0xb0, 0x38, 0x39, 0x68, 0xfd, 0x38, 0xd1, 0x71, 0xcd, 0x0b, 0x15, 0x39, 0xc4, 0xb2, + 0x5a, 0x92, 0x70, 0xc1, 0x9a, 0xca, 0xc4, 0xb5, 0x53, 0x8e, 0x10, 0x00, 0x0e, 0xa3, 0x05, 0xe7, + 0xbf, 0x07, 0xe4, 0xb2, 0x91, 0xc0, 0x8c, 0xf9, 0x80, 0x6e, 0x8a, 0x44, 0xe0, 0x9b, 0x00, 0x4b, + 0x3d, 0x7c, 0x5e, 0x44, 0x47, 0xf5, 0x7c, 0x2c, 0x42, 0x6c, 0xd4, 0xd7, 0xb6, 0x82, 0x18, 0x78, + 0x79, 0xe4, 0xeb, 0x80, 0x72, 0xf9, 0x67, 0xfa, 0x53, 0xff, 0x14, 0x6b, 0xee, 0x5a, 0xbb, 0xc1, + 0xa5, 0xc7, 0xad, 0x47, 0xca, 0x0f, 0xee, 0x97, 0xe5, 0x6c, 0xd5, 0xdd, 0x44, 0x33, 0xee, 0x28, + 0xb8, 0x70, 0x4e, 0x73, 0xb0, 0x4d, 0xd7, 0xfd, 0x05, 0xd6, 0xbd, 0x70, 0xd3, 0x1e, 0xbc, 0x33, + 0xec, 0xc8, 0x2c, 0xea, 0x6a, 0xa6, 0x3d, 0x59, 0x43, 0x56, 0xba, 0x6a, 0x0a, 0x69, 0x96, 0x60, + 0xc2, 0x26, 0x8d, 0xea, 0xe8, 0x3c, 0xce, 0x0b, 0xb0, 0xfc, 0x9a, 0xe9, 0x13, 0x12, 0xfe, 0x10, + 0xe2, 0xad, 0xdd, 0x4b, 0x04, 0xcb, 0x0c, 0x2b, 0xff, 0xed, 0x00, 0xa3, 0x9e, 0xa6, 0x6f, 0x84, + 0x35, 0x5a, 0xd1, 0x5a, 0x80, 0x06, 0xda, 0x51, 0x35, 0x80, 0xb3, 0x42, 0x12, 0xdc, 0x80, 0x4c, + 0x02, 0xda, 0x1c, 0x8b, 0xa4, 0xb9, 0xaf, 0x83, 0xe6, 0x03, 0x33, 0x96, 0x0f, 0xf1, 0x57, 0x47, + 0xbe, 0xc7, 0x69, 0xe0, 0x16, 0x29, 0xc9, 0x81, 0xd0, 0x1d, 0xb0, 0x34, 0x34, 0x6c, 0x54, 0x0a, + 0x1c, 0x4f, 0xb2, 0x59, 0x98, 0xa7, 0x80, 0xf3, 0x1b, 0x91, 0x1b, 0xbb, 0x16, 0xa3, 0x39, 0x78, + 0x91, 0xed, 0x68, 0x7b, 0x8a, 0x27, 0xd2, 0x74, 0xf5, 0x1a, 0x9d, 0x3b, 0xfd, 0x7c, 0x46, 0xcd, + 0x3d, 0x79, 0xa7, 0xa1, 0xd0, 0xd6, 0xf5, 0xfe, 0x00, 0xd5, 0x98, 0x3f, 0x59, 0xe9, 0x5d, 0x34, + 0x5b, 0x68, 0xee, 0x01, 0x57, 0xde, 0xce, 0xe5, 0xda, 0x49, 0xe9, 0x91, 0x66, 0x98, 0xc7, 0xde, + 0xa3, 0x2f, 0x11, 0xf4, 0x46, 0x1b, 0x18, 0xbf, 0xa3, 0x0b, 0xc8, 0xf7, 0xfa, 0x0f, 0x2d, 0x46, + 0x2f, 0x91, 0x73, 0xfb, 0xef, 0xa1, 0x79, 0xfa, 0xa2, 0xea, 0x9b, 0x68, 0x86, 0xea, 0x77, 0xe9, + 0xdb, 0x6d, 0x9d, 0xac, 0x8e, 0x72, 0x6e, 0xe0, 0xe4, 0xda, 0x50, 0x94, 0x5d, 0x62, 0x10, 0x80, + 0x04, 0x47, 0x11, 0x4f, 0x46, 0x41, 0xdf, 0x39, 0x85, 0x04, 0xc5, 0x30, 0x5c, 0xa8, 0x56, 0x88, + 0x79, 0x63, 0x99, 0xc9, 0xca, 0x90, 0x42, 0x61, 0x1d, 0x89, 0x20, 0x51, 0x2f, 0x13, 0xc3, 0x68, + 0x73, 0x54, 0x4e, 0xa9, 0x9c, 0x0f, 0xd7, 0xce, 0xad, 0x50, 0x70, 0x7b, 0xff, 0x93, 0xce, 0xf5, + 0x94, 0xd2, 0x85, 0x5a, 0x2c, 0x2c, 0x3a, 0x20, 0x92, 0x12, 0x52, 0x31, 0x82, 0xa6, 0x64, 0xf1, + 0x62, 0xb3, 0x82, 0x2e, 0x78, 0xbf, 0x4c, 0x3d, 0x45, 0x26, 0x78, 0x6b, 0x85, 0x2e, 0xb4, 0xe3, + 0x6a, 0x1f, 0x1e, 0x18, 0x18, 0x9a, 0x61, 0xbf, 0x2c, 0x7b, 0xc3, 0x53, 0x9f, 0x0c, 0x5b, 0xad, + 0x7c, 0xf6, 0xc9, 0xd8, 0x8f, 0x2e, 0x86, 0x36, 0x8b, 0x0c, 0x8f, 0xdf, 0xf2, 0xe0, 0x80, 0x30, + 0xcd, 0x3a, 0x10, 0xf6, 0xb1, 0x46, 0x2f, 0x4a, 0x38, 0x93, 0xa4, 0x6b, 0x96, 0x80, 0x83, 0x4f, + 0xe9, 0xc1, 0xb8, 0x4a, 0x32, 0xa7, 0x1c, 0xc6, 0xd8, 0x3b, 0x66, 0x44, 0x6e, 0xb1, 0x89, 0x97, + 0xab, 0xaf, 0xb6, 0x00, 0xa6, 0xfb, 0x29, 0x84, 0xd2, 0xcd, 0x5e, 0x23, 0x20, 0xf0, 0x02, 0x01, + 0xe7, 0xf5, 0xa9, 0xb7, 0x23, 0x84, 0x07, 0x37, 0xd5, 0xde, 0x49, 0x6d, 0x14, 0x22, 0xaa, 0x16, + 0x83, 0x40, 0xbb, 0xde, 0xcd, 0x25, 0xca, 0xe0, 0x46, 0x39, 0x30, 0x16, 0xd2, 0xf6, 0xdf, 0xf3, + 0x10, 0x54, 0x34, 0x6a, 0xcb, 0x9f, 0xb0, 0xe6, 0x5c, 0x04, 0x40, 0xef, 0x44, 0xbc, 0xd3, 0x2a, + 0xaf, 0xf5, 0x3c, 0x43, 0x95, 0x7b, 0xe9, 0x8e, 0xb6, 0x5e, 0x7f, 0x55, 0xd0, 0x97, 0x9d, 0xd9, + 0xca, 0x37, 0xd2, 0x14, 0x90, 0xce, 0xa8, 0x51, 0x75, 0xd2, 0xbb, 0xe5, 0x9d, 0xa1, 0x1c, 0x5e, + 0x16, 0xc4, 0x6f, 0xe7, 0xd1, 0x30, 0x2a, 0x01, 0x21, 0xc3, 0x18, 0x28, 0x41, 0xb6, 0x99, 0xa9, + 0xd2, 0x37, 0x70, 0x1d, 0x36, 0x71, 0xf3, 0xbe, 0xfa, 0x25, 0x41, 0x20, 0x35, 0xa0, 0x29, 0xd9, + 0x8b, 0x36, 0xf2, 0xe9, 0x20, 0x7f, 0xc3, 0x14, 0xaa, 0xe2, 0x11, 0xa5, 0x43, 0x10, 0x8d, 0xd8, + 0x09, 0x81, 0x55, 0x1d, 0x08, 0x83, 0x3b, 0xb7, 0x3b, 0xe8, 0xb5, 0xa7, 0xd8, 0x1e, 0x7b, 0x98, + 0xdd, 0x1a, 0x62, 0x65, 0xb9, 0xb5, 0xc8, 0x2a, 0x73, 0x24, 0x1f, 0x32, 0x3b, 0x14, 0x1f, 0x1d, + 0x29, 0x42, 0x41, 0xe9, 0x7a, 0xee, 0xbc, 0x2f, 0x73, 0xab, 0xba, 0x26, 0x5c, 0xb0, 0x37, 0x49, + 0xb1, 0xb1, 0xf4, 0x7f, 0x27, 0x52, 0x5b, 0xb0, 0xcd, 0x74, 0xe8, 0x22, 0xcd, 0xc1, 0x47, 0x42, + 0xac, 0xa5, 0xfc, 0x4c, 0x91, 0xde, 0xa8, 0xe5, 0x56, 0x41, 0xe8, 0xb6, 0x06, 0x99, 0xd3, 0xce, + 0x35, 0xe2, 0xad, 0x5b, 0x66, 0x6f, 0xfb, 0x81, 0xfd, 0x57, 0x48, 0xd2, 0xa4, 0x15, 0xc3, 0x7d, + 0x4b, 0x0e, 0x51, 0xf1, 0x93, 0x38, 0x47, 0xdc, 0xd6, 0x17, 0xe8, 0x7c, 0x53, 0x55, 0x40, 0x88, + 0x98, 0x4f, 0x8d, 0x68, 0x83, 0x90, 0x3e, 0xa2, 0xe7, 0x18, 0xe9, 0x8c, 0x22, 0xd1, 0x49, 0x55, + 0xe4, 0x5d, 0x48, 0xdb, 0xba, 0x00, 0x00, 0xc1, 0x06, 0x62, 0x20, 0x4f, 0x66, 0x6b, 0x45, 0xcf, + 0x5e, 0x06, 0xa8, 0xc9, 0x68, 0xa7, 0xc3, 0x25, 0x32, 0x7a, 0x96, 0x5c, 0x0e, 0xdd, 0xb5, 0xb3, + 0x52, 0x29, 0x70, 0x7d, 0xb0, 0xae, 0x9e, 0xbb, 0x9f, 0x5f, 0x3d, 0x43, 0x3e, 0xa5, 0x40, 0x4d, + 0x03, 0x1f, 0x3f, 0x22, 0xeb, 0x6e, 0x84, 0x87, 0x9f, 0xc3, 0x04, 0x07, 0x73, 0x3a, 0x63, 0xc8, + 0x5b, 0x18, 0x92, 0xba, 0xac, 0x2a, 0x86, 0x95, 0xff, 0x5b, 0xce, 0xe7, 0x36, 0x1c, 0xab, 0xd8, + 0xed, 0x7b, 0xe4, 0x0e, 0x79, 0x43, 0xa1, 0x2f, 0xc0, 0x60, 0x8d, 0x3c, 0x6f, 0x4e, 0x5f, 0xa8, + 0xa5, 0x48, 0x62, 0xe3, 0xf5, 0x04, 0x03, 0x01, 0x7a, 0x3a, 0x18, 0xad, 0x53, 0xcd, 0xfd, 0x02, + 0xce, 0x2e, 0xc8, 0xa8, 0x90, 0x2c, 0xe9, 0x22, 0x55, 0x2f, 0x83, 0xfe, 0x46, 0x3d, 0x17, 0x21, + 0x14, 0x2a, 0x22, 0x25, 0xf7, 0xc5, 0x46, 0xd9, 0x37, 0x8e, 0x6f, 0x6d, 0xd8, 0x42, 0xfa, 0x68, + 0x56, 0xd5, 0x7f, 0xe8, 0x1b, 0xa8, 0x73, 0xeb, 0x6b, 0xf7, 0x7f, 0xbf, 0xca, 0x59, 0xa4, 0x35, + 0x50, 0x21, 0xd2, 0x7d, 0x0e, 0x36, 0x65, 0xf8, 0x6f, 0x22, 0x2c, 0xd2, 0xdb, 0x6f, 0xe8, 0xc1, + 0x1d, 0x6b, 0xeb, 0x63, 0x8c, 0x13, 0x8b, 0x16, 0x2e, 0x57, 0xeb, 0x87, 0x60, 0x52, 0xf5, 0xc9, + 0x56, 0x21, 0xd2, 0x4d, 0x44, 0xac, 0x9d, 0x84, 0x9a, 0xd8, 0x0e, 0x64, 0xc2, 0xda, 0x18, 0xfa, + 0x32, 0x5f, 0x3e, 0x61, 0x19, 0xf6, 0x1b, 0xc7, 0x2d, 0xbd, 0xda, 0x8b, 0xd4, 0xb1, 0x7f, 0x8c, + 0xd3, 0x3d, 0xd4, 0x69, 0xad, 0xc5, 0xed, 0x84, 0x19, 0xf9, 0xbe, 0xe4, 0xac, 0x5e, 0x7b, 0xb4, + 0x38, 0xf8, 0xb1, 0x2c, 0x28, 0xe5, 0xa3, 0x7d, 0x81, 0x0c, 0xe5, 0x6a, 0xd7, 0x23, 0x9f, 0xdc, + 0x97, 0xa5, 0xe6, 0x09, 0xfc, 0x3c, 0x12, 0xee, 0xb4, 0xee, 0xfc, 0x92, 0x00, 0x17, 0x27, 0x1e, + 0x7a, 0xee, 0x4f, 0x39, 0x40, 0xa3, 0x69, 0x63, 0x07, 0x49, 0x4a, 0xbd, 0xe2, 0x72, 0x85, 0x7f, + 0x90, 0xf1, 0x37, 0xbc, 0xf9, 0xf5, 0xed, 0xb7, 0x0c, 0xde, 0x87, 0x14, 0xb5, 0x8a, 0x36, 0x9a, + 0x17, 0x1c, 0xa1, 0xef, 0xe3, 0xd7, 0x37, 0x1b, 0x54, 0xb6, 0x22, 0x94, 0xfc, 0x66, 0xc8, 0xa2, + 0xc3, 0xed, 0x7a, 0x70, 0x34, 0x25, 0x29, 0x0e, 0x52, 0xa2, 0x86, 0x61, 0xcd, 0x5e, 0x71, 0x05, + 0x76, 0x5e, 0x93, 0x4f, 0xa2, 0xd5, 0x2f, 0xea, 0x54, 0xfa, 0x6f, 0x51, 0xa9, 0xda, 0x95, 0x7e, + 0x2f, 0x9b, 0x69, 0x81, 0xcb, 0xa3, 0x94, 0x63, 0x17, 0x8c, 0x6e, 0x78, 0x40, 0xc8, 0x54, 0x54, + 0xa6, 0x18, 0xaa, 0x0c, 0x60, 0x57, 0xe7, 0xa2, 0x34, 0xc3, 0x82, 0x3a, 0x21, 0x8d, 0xf6, 0xf9, + 0xf9, 0x05, 0x28, 0xbc, 0x96, 0x4f, 0xc1, 0xd0, 0xcb, 0x58, 0xe0, 0x20, 0xb3, 0xc6, 0x3f, 0xcb, + 0xc8, 0xe2, 0xc0, 0x1b, 0x8f, 0x9f, 0x20, 0x33, 0x87, 0x3c, 0x57, 0x00, 0x6c, 0x15, 0xb3, 0x41, + 0x46, 0xd9, 0x53, 0x36, 0xdd, 0x3f, 0xd5, 0xea, 0x99, 0x66, 0x9e, 0x18, 0x6f, 0xa3, 0xcc, 0x04, + 0xbc, 0xfc, 0xcf, 0x61, 0xd3, 0xd1, 0xbd, 0x03, 0xec, 0x10, 0xa8, 0x5f, 0xc2, 0xb9, 0xd6, 0x22, + 0x42, 0xfa, 0xda, 0xcc, 0x30, 0xf6, 0xae, 0x05, 0x26, 0xef, 0x87, 0x48, 0x4f, 0x6f, 0xc2, 0x21, + 0xdd, 0x87, 0x4b, 0x7f, 0xab, 0x65, 0xad, 0x21, 0xfe, 0x50, 0x98, 0x95, 0xb7, 0x62, 0x8a, 0xc9, + 0xdc, 0xda, 0x6e, 0x84, 0x4f, 0x3c, 0x39, 0x0e, 0x42, 0x67, 0x6d, 0x8f, 0x5a, 0x39, 0x3b, 0x5d, + 0xe0, 0xc5, 0xf1, 0x17, 0x06, 0xa2, 0x09, 0x96, 0x7d, 0xfe, 0xc4, 0xce, 0xf5, 0x9f, 0x04, 0x15, + 0x61, 0x54, 0x95, 0x93, 0xcc, 0x18, 0xb8, 0xc6, 0x8a, 0x38, 0x42, 0xbc, 0xee, 0xa0, 0x02, 0x50, + 0x36, 0xee, 0xb0, 0x8a, 0x93, 0x2e, 0x5c, 0x6e, 0x70, 0xa3, 0x3b, 0x16, 0x14, 0x27, 0x45, 0x3e, + 0x27, 0x09, 0x93, 0xc8, 0x1b, 0xb4, 0xaa, 0x2d, 0x00, 0x37, 0xc7, 0x81, 0x5a, 0xb5, 0xca, 0x52, + 0xbc, 0x67, 0xc4, 0xc8, 0xd3, 0x66, 0x2d, 0xe7, 0x72, 0xbe, 0x15, 0xd3, 0xb3, 0x58, 0x1e, 0x1b, + 0x52, 0xef, 0x59, 0x1a, 0x8b, 0x45, 0xa4, 0xbe, 0x59, 0xfc, 0xbb, 0xac, 0x76, 0x97, 0xb8, 0x4c, + 0x0e, 0xfc, 0xc4, 0xd3, 0x76, 0x5a, 0x60, 0x11, 0xbc, 0xf4, 0x7a, 0x73, 0x05, 0xd2, 0x83, 0x09, + 0x65, 0x3d, 0x54, 0x3a, 0x93, 0x65, 0xd8, 0x7d, 0xd6, 0x22, 0x32, 0x9f, 0x12, 0x3d, 0x4e, 0xeb, + 0xb8, 0x75, 0xc0, 0x76, 0x9b, 0x20, 0x9c, 0xec, 0x68, 0xb8, 0x31, 0xdb, 0x54, 0xc9, 0x61, 0xf3, + 0x66, 0xa3, 0x99, 0xd0, 0xf4, 0xfc, 0xba, 0x99, 0xaa, 0xe4, 0x85, 0x74, 0x41, 0x2f, 0x53, 0x63, + 0x3e, 0x35, 0x77, 0x3e, 0xb1, 0xfa, 0x53, 0xff, 0x5e, 0x45, 0x6f, 0x7d, 0x24, 0x79, 0x48, 0x75, + 0x60, 0x6f, 0xf1, 0x51, 0x7c, 0xc3, 0x9e, 0x1b, 0x29, 0x74, 0x68, 0x4e, 0xd5, 0x67, 0x6e, 0xcc, + 0xd6, 0xd7, 0xbb, 0xb3, 0xb9, 0x0b, 0x44, 0x28, 0x25, 0xce, 0x26, 0x58, 0xf3, 0x06, 0x15, 0x6e, + 0xac, 0x59, 0xb9, 0x47, 0x37, 0x3b, 0xe6, 0xfc, 0xcd, 0x84, 0xba, 0xbd, 0x0c, 0xb3, 0x41, 0xdc, + 0xcb, 0xa1, 0xb8, 0x71, 0xfb, 0x34, 0x98, 0x7a, 0x1a, 0xc8, 0x5c, 0xdc, 0xa7, 0xb9, 0xc7, 0xe9, + 0xbf, 0x69, 0x30, 0x64, 0xd9, 0x6a, 0x1c, 0x7a, 0xbe, 0x32, 0x73, 0xd9, 0x57, 0xb4, 0xcb, 0x66, + 0x63, 0x97, 0x9f, 0xc6, 0x36, 0x57, 0xbb, 0xd5, 0x23, 0xc3, 0x4b, 0x0f, 0xde, 0x3b, 0x10, 0x66, + 0x64, 0xb0, 0x4c, 0x13, 0x83, 0xdc, 0x35, 0x70, 0xf2, 0x04, 0x15, 0x1a, 0x75, 0x03, 0xf4, 0x7c, + 0x02, 0x50, 0xa2, 0xf5, 0x82, 0x8f, 0x7a, 0xe7, 0x46, 0xa3, 0x6e, 0xdd, 0xbf, 0x71, 0x62, 0xe2, + 0xad, 0x59, 0x81, 0xa4, 0x25, 0xfc, 0x2e, 0xf6, 0x25, 0x6c, 0xc9, 0x85, 0x73, 0x45, 0x27, 0xba, + 0xa9, 0xf4, 0xb0, 0xe4, 0x20, 0x40, 0x97, 0x6c, 0x14, 0xd8, 0x06, 0x27, 0x05, 0xf4, 0x79, 0x89, + 0x58, 0xb2, 0x65, 0x44, 0xf3, 0x1d, 0xab, 0xe9, 0xd2, 0xbb, 0x45, 0x2e, 0xf7, 0x56, 0xf2, 0x40, + 0x6b, 0xbf, 0x07, 0xf6, 0x97, 0x0b, 0xba, 0xf9, 0xe3, 0x74, 0x55, 0x7a, 0x2a, 0xdc, 0x71, 0xd4, + 0xc1, 0xc8, 0x1e, 0x07, 0x18, 0xe4, 0x5c, 0x52, 0x72, 0xbe, 0x13, 0x8c, 0x6b, 0x1c, 0x92, 0xd5, + 0x3c, 0xfe, 0x74, 0x65, 0x6e, 0xaa, 0x7e, 0x9b, 0xb1, 0xc5, 0xcd, 0x57, 0x37, 0x6d, 0x4d, 0x6b, + 0xe9, 0x39, 0xa8, 0x69, 0xf0, 0x47, 0xcf, 0xac, 0x6b, 0x7a, 0xb3, 0xe7, 0x1f, 0x7e, 0xe5, 0x57, + 0xb1, 0xc7, 0x4f, 0x00, 0xd7, 0x5a, 0xc9, 0x37, 0x5a, 0x20, 0x8f, 0xb1, 0x16, 0x14, 0x88, 0xe7, + 0xf0, 0xe5, 0x70, 0xf1, 0xbd, 0x2a, 0xa3, 0x30, 0x82, 0x0d, 0xf6, 0xf2, 0x45, 0x68, 0xd6, 0x83, + 0xd0, 0x2b, 0xec, 0xcb, 0xf6, 0xf2, 0x25, 0x67, 0x00, 0xc6, 0x83, 0x75, 0x71, 0x7e, 0x00, 0xa5, + 0x3c, 0xae, 0x8b, 0xd8, 0x1b, 0xb8, 0xd7, 0x59, 0xcd, 0x11, 0x2a, 0x1b, 0x59, 0x86, 0x0a, 0x05, + 0xb4, 0x08, 0x91, 0xde, 0x5d, 0xd2, 0xd6, 0x9e, 0x3c, 0xc4, 0x7d, 0xc2, 0x6d, 0xbf, 0x3f, 0x3a, + 0x39, 0x3d, 0xed, 0x54, 0x91, 0xe8, 0x34, 0x0c, 0xcb, 0x48, 0x59, 0x4d, 0x40, 0x31, 0xd9, 0xf1, + 0xa4, 0xde, 0xfe, 0xf6, 0x83, 0x55, 0x14, 0x95, 0xa3, 0x72, 0x59, 0xf4, 0x28, 0x9b, 0xc6, 0x81, + 0x26, 0xe9, 0xf9, 0xeb, 0xb1, 0x8b, 0x16, 0xec, 0xf2, 0x7c, 0x4a, 0xe5, 0xee, 0x05, 0x1e, 0x1b, + 0x84, 0xaa, 0x83, 0x1b, 0x84, 0xcd, 0xd7, 0x80, 0x27, 0x7a, 0xe7, 0x55, 0x7c, 0x97, 0xf8, 0x5b, + 0x99, 0x07, 0x1d, 0x57, 0x83, 0x46, 0x5c, 0x94, 0x01, 0x15, 0xbc, 0x19, 0xac, 0x22, 0xd7, 0x45, + 0x36, 0x30, 0x2e, 0xe2, 0x08, 0xf4, 0x1b, 0xb4, 0x8d, 0x78, 0x3e, 0x4d, 0x4f, 0x15, 0xcd, 0x15, + 0xac, 0x90, 0x37, 0xdb, 0x22, 0xbb, 0xe5, 0xf5, 0xcf, 0x91, 0x8f, 0x7d, 0x60, 0x32, 0x94, 0x39, + 0x0f, 0x09, 0x1d, 0x8c, 0x53, 0x4f, 0xd0, 0x6e, 0x9f, 0xbd, 0xc8, 0xc3, 0xa5, 0xd8, 0x6f, 0x47, + 0x04, 0x12, 0x34, 0xc5, 0xf6, 0x21, 0x48, 0xb8, 0xa2, 0xe2, 0xcd, 0xc3, 0x16, 0x11, 0xf2, 0x30, + 0x6a, 0x53, 0x00, 0xa1, 0xd8, 0x89, 0xcf, 0xb2, 0x54, 0x19, 0x23, 0x04, 0x5e, 0xfb, 0x69, 0x4e, + 0x7b, 0x5f, 0x0d, 0xfd, 0x32, 0x56, 0x43, 0xf6, 0x2e, 0x5d, 0xf1, 0xb2, 0xeb, 0x5f, 0x3d, 0xc2, + 0x02, 0x4d, 0x78, 0x28, 0x0d, 0x0f, 0x76, 0xab, 0x39, 0x7c, 0x43, 0x30, 0xd8, 0x2b, 0xb0, 0xb2, + 0xdd, 0x12, 0xc5, 0xc7, 0x33, 0x70, 0x7d, 0x9d, 0x94, 0x15, 0xe2, 0x05, 0x10, 0xef, 0x90, 0x60, + 0xab, 0x30, 0x0f, 0x58, 0xa4, 0xfd, 0xbc, 0x7d, 0x39, 0xd5, 0xba, 0xcf, 0x65, 0x7d, 0xb9, 0x24, + 0x24, 0xed, 0xdd, 0x9b, 0xc7, 0xe4, 0x99, 0x2f, 0xd4, 0x95, 0x85, 0x2c, 0x48, 0x61, 0x64, 0xd5, + 0x2e, 0x39, 0x32, 0x16, 0xc1, 0xb4, 0x23, 0xd7, 0x1a, 0x82, 0xbf, 0xa2, 0x89, 0x35, 0x79, 0x52, + 0x92, 0xd7, 0x5f, 0x36, 0xeb, 0x36, 0xdf, 0x8b, 0x72, 0x98, 0xe2, 0xca, 0xea, 0x35, 0xc5, 0xb7, + 0xde, 0x76, 0x3e, 0xae, 0xe2, 0xaf, 0x93, 0x7d, 0x71, 0xf7, 0x7c, 0x20, 0x4a, 0xde, 0x8c, 0xed, + 0x10, 0xab, 0x19, 0xc1, 0xbe, 0x46, 0xdb, 0x10, 0x3e, 0x71, 0xaf, 0x39, 0x34, 0xfa, 0x45, 0x10, + 0xe4, 0xcd, 0x12, 0xc1, 0xf7, 0x9c, 0x72, 0x93, 0xe0, 0x4b, 0x75, 0x46, 0xe0, 0x75, 0x0b, 0x87, + 0x4d, 0xbc, 0x48, 0x2c, 0x11, 0x00, 0xcb, 0xa2, 0x18, 0x0d, 0x49, 0x03, 0x39, 0x4d, 0x13, 0xd2, + 0xa0, 0xd3, 0xb2, 0x5e, 0xb1, 0x74, 0xba, 0x14, 0x70, 0x63, 0x7c, 0x32, 0xc3, 0xd5, 0x23, 0x3e, + 0x4f, 0x0e, 0x77, 0xc0, 0x3c, 0x75, 0x5a, 0x50, 0x0f, 0xd6, 0xa6, 0x27, 0x61, 0x57, 0x1b, 0x70, + 0xac, 0xa0, 0xf3, 0x61, 0x79, 0xd8, 0x97, 0xc1, 0x81, 0xd0, 0x71, 0xba, 0x6c, 0xfd, 0xc7, 0x4f, + 0x7b, 0xb4, 0x01, 0x20, 0x63, 0x07, 0x6c, 0xbc, 0x3c, 0x18, 0x80, 0x1a, 0xa0, 0xcd, 0xec, 0xab, + 0xc5, 0x93, 0x45, 0x32, 0x36, 0x61, 0x3e, 0xd5, 0xcc, 0xf1, 0x34, 0x70, 0x0d, 0xbd, 0x4f, 0xdf, + 0x44, 0x5f, 0xf8, 0x05, 0xcf, 0xcd, 0x6d, 0x6c, 0xec, 0xc7, 0x99, 0xef, 0x9f, 0xfc, 0xfa, 0xb7, + 0xa3, 0xb4, 0xec, 0x4f, 0x80, 0x75, 0x9e, 0x3e, 0xfd, 0xa3, 0x57, 0xa9, 0x19, 0x1d, 0x71, 0x84, + 0x2d, 0xa0, 0x04, 0xad, 0x22, 0x84, 0x33, 0x84, 0xf7, 0xc0, 0x62, 0xf0, 0xc3, 0x37, 0x4b, 0x2e, + 0xc9, 0x28, 0x4b, 0x84, 0x1b, 0x4d, 0x46, 0xf7, 0x33, 0x8a, 0x19, 0x58, 0x8e, 0x4d, 0x5e, 0xfa, + 0xe8, 0x20, 0xb7, 0x7f, 0xd8, 0xbf, 0xb6, 0x80, 0x3c, 0x12, 0x16, 0x73, 0x42, 0x31, 0xfd, 0x4c, + 0x41, 0x91, 0x39, 0x39, 0xf5, 0x03, 0xbd, 0x28, 0x18, 0x1e, 0xb7, 0xe8, 0x2f, 0xb7, 0xd5, 0xb2, + 0xf3, 0xf6, 0xf8, 0x3c, 0x8a, 0xf8, 0xb9, 0x88, 0x3b, 0xf1, 0xb4, 0x43, 0x57, 0x14, 0x8e, 0x7d, + 0x25, 0xf5, 0x23, 0xa1, 0x86, 0xc3, 0x1a, 0x7d, 0x8b, 0x40, 0x9c, 0xf3, 0x68, 0xea, 0x10, 0xb2, + 0x45, 0x93, 0x10, 0x7d, 0xaa, 0x63, 0x5f, 0xeb, 0x20, 0xdc, 0x61, 0x34, 0x3e, 0xaa, 0xf1, 0xfb, + 0xe6, 0x12, 0x88, 0x15, 0xe7, 0x69, 0xb1, 0xbd, 0xd0, 0x1c, 0xb6, 0xb4, 0xd4, 0x3e, 0x27, 0x02, + 0x32, 0xfe, 0xed, 0x3e, 0xe6, 0x81, 0x79, 0xf7, 0xf3, 0xab, 0x33, 0x2b, 0xe9, 0x54, 0xad, 0x86, + 0x82, 0x86, 0x52, 0xed, 0x72, 0xf6, 0x75, 0xca, 0xe2, 0xc5, 0xf2, 0x49, 0xcc, 0x1c, 0x22, 0x60, + 0x39, 0x44, 0x87, 0x3f, 0x0e, 0xa5, 0x39, 0x3d, 0xdf, 0xf5, 0x0d, 0x22, 0x30, 0xfe, 0x47, 0xe4, + 0x79, 0xa4, 0x51, 0x98, 0x5c, 0xa1, 0xa0, 0x63, 0xd4, 0xae, 0x33, 0xc7, 0x88, 0x12, 0x73, 0x53, + 0xec, 0x11, 0xb4, 0xa6, 0xee, 0x5d, 0xe9, 0x7b, 0x21, 0xff, 0x2b, 0xcb, 0xfa, 0x1d, 0x62, 0xcf, + 0xf8, 0x3b, 0x2a, 0x14, 0xe3, 0x59, 0x7b, 0x76, 0xa5, 0x4f, 0xe0, 0x50, 0x59, 0x4e, 0x92, 0xf5, + 0x09, 0x17, 0xff, 0xa9, 0xf9, 0x24, 0xe2, 0x94, 0x84, 0x45, 0x80, 0xa2, 0x0c, 0x7d, 0xa4, 0x48, + 0x12, 0x3d, 0xa3, 0xe5, 0x09, 0x49, 0xf9, 0x1e, 0xfa, 0xc1, 0xa3, 0x23, 0x31, 0x95, 0x2d, 0x75, + 0x13, 0x13, 0x2d, 0xac, 0x82, 0x9d, 0xbd, 0xc3, 0x45, 0x0c, 0xbe, 0xad, 0x8b, 0xf0, 0x4b, 0xbd, + 0x5f, 0xf2, 0x5f, 0xa2, 0xfb, 0x98, 0xd5, 0xbd, 0x36, 0xb0, 0xf8, 0x09, 0xde, 0x0c, 0xc7, 0x67, + 0xc1, 0x27, 0x9f, 0xe5, 0x60, 0xb7, 0x70, 0x8f, 0xbf, 0xf5, 0xef, 0x50, 0x49, 0xa1, 0x49, 0x25, + 0x3d, 0x6b, 0xe9, 0x69, 0x4f, 0xee, 0x23, 0x94, 0xac, 0xfa, 0xe5, 0x10, 0x78, 0x34, 0xf8, 0xc6, + 0x97, 0x20, 0xf2, 0x36, 0x86, 0x10, 0x32, 0x87, 0x27, 0x9d, 0xd3, 0xb1, 0x01, 0xcd, 0xaf, 0x61, + 0x08, 0xab, 0x0f, 0x62, 0x5d, 0xf8, 0x10, 0xe1, 0x3b, 0x00, 0x4b, 0x7a, 0xdb, 0x10, 0xba, 0x1e, + 0x3a, 0xbe, 0xd1, 0x47, 0xe8, 0x37, 0xde, 0x13, 0x92, 0x5f, 0x4a, 0x83, 0x24, 0x76, 0xf2, 0x83, + 0x36, 0x22, 0x95, 0xb9, 0xde, 0xfa, 0xe3, 0x96, 0x75, 0x32, 0x0b, 0x39, 0xb5, 0xfa, 0x9a, 0x30, + 0x9e, 0x79, 0x8d, 0xc8, 0x97, 0x73, 0x8b, 0xd8, 0x60, 0xfa, 0x2f, 0xbb, 0x99, 0x54, 0xeb, 0x8b, + 0x49, 0x24, 0x4e, 0x8c, 0x12, 0x22, 0xd5, 0xde, 0xc8, 0x4f, 0x65, 0x20, 0xd2, 0xfe, 0xc5, 0x4e, + 0x65, 0x1a, 0x87, 0x22, 0x73, 0x63, 0xc4, 0x6c, 0xb5, 0x7f, 0xdd, 0x67, 0x54, 0x7d, 0x0c, 0x3e, + 0x10, 0x92, 0x63, 0xb4, 0x4a, 0xd7, 0xc3, 0x5c, 0x65, 0x9a, 0x65, 0x05, 0xf9, 0xd0, 0x78, 0xed, + 0xbd, 0x64, 0x11, 0x54, 0xc9, 0xa0, 0x88, 0xd5, 0xfe, 0x23, 0x60, 0x66, 0x90, 0x19, 0x2c, 0xc1, + 0xd6, 0x45, 0xbe, 0xbb, 0x33, 0xbf, 0xa4, 0xbc, 0x0d, 0xb5, 0xce, 0x9d, 0xc1, 0xe3, 0x17, 0x84, + 0xfc, 0xa1, 0x63, 0x0b, 0xf7, 0x89, 0x52, 0x70, 0xf9, 0x0b, 0x39, 0x7e, 0x21, 0x8d, 0x6e, 0x24, + 0x8e, 0xdd, 0xd6, 0xea, 0x41, 0x94, 0x0e, 0x02, 0xf6, 0xc9, 0x77, 0x77, 0x97, 0x61, 0xd5, 0x86, + 0x55, 0xb6, 0xda, 0x0e, 0x48, 0x2a, 0xac, 0xf7, 0x77, 0xd0, 0xf9, 0x02, 0x47, 0xba, 0xb6, 0x4c, + 0x7d, 0x4e, 0x6a, 0x9e, 0xd1, 0x67, 0xb2, 0x74, 0x32, 0xfb, 0x84, 0xb0, 0x06, 0xf4, 0x9c, 0x0b, + 0xde, 0x89, 0x78, 0x87, 0xc1, 0x45, 0x91, 0x7d, 0x1b, 0x53, 0x86, 0xb2, 0xd1, 0x5f, 0x67, 0xea, + 0x71, 0x25, 0x69, 0x64, 0xf7, 0x39, 0x9d, 0xa4, 0x35, 0x9b, 0xf5, 0x13, 0xc6, 0xbf, 0xda, 0x88, + 0xff, 0x7e, 0x2e, 0x75, 0xfc, 0x67, 0x4e, 0xba, 0x0f, 0x85, 0x97, 0xe7, 0x8c, 0x6d, 0x7c, 0x1f, + 0x4a, 0xba, 0xd6, 0x31, 0x4e, 0x50, 0x5b, 0x34, 0x2a, 0xa3, 0x2f, 0x25, 0x5b, 0xc2, 0x51, 0xdd, + 0x2b, 0x52, 0x7e, 0x5f, 0xd6, 0xbb, 0x9a, 0x1d, 0x45, 0xc0, 0x80, 0x66, 0x82, 0x25, 0x02, 0xe4, + 0x96, 0x94, 0xfc, 0xc3, 0xc0, 0xe1, 0xa1, 0x6c, 0x12, 0xbb, 0xd3, 0xc8, 0xf7, 0x7e, 0xe4, 0x73, + 0x12, 0x98, 0x10, 0xfb, 0xbb, 0xb0, 0xa3, 0x7e, 0xcb, 0x03, 0xa0, 0xdc, 0xc7, 0xc2, 0x4d, 0xd9, + 0x72, 0x73, 0x2b, 0xb5, 0xda, 0x7d, 0x3c, 0xcc, 0x7c, 0x6b, 0xa6, 0xea, 0x1c, 0x98, 0x33, 0x55, + 0x4d, 0x81, 0xa3, 0x28, 0xc3, 0x2c, 0xfd, 0xe1, 0x3a, 0xba, 0xb6, 0x58, 0xab, 0xe4, 0xab, 0x51, + 0xc7, 0x85, 0x09, 0xed, 0x52, 0x53, 0x58, 0xd6, 0x7b, 0x63, 0xfe, 0x9c, 0x11, 0x0d, 0xfb, 0x20, + 0x67, 0xa4, 0x52, 0xbd, 0x8d, 0x97, 0x45, 0xae, 0x04, 0x0e, 0x66, 0xec, 0xb0, 0x8b, 0xa2, 0xdd, + 0x9c, 0x44, 0xa3, 0x98, 0xdd, 0x57, 0x34, 0x0d, 0x65, 0xb8, 0x2e, 0x50, 0xd5, 0x60, 0x47, 0x7f, + 0xcb, 0xd5, 0xac, 0xba, 0x2b, 0x21, 0xa5, 0x55, 0x7d, 0x77, 0xf7, 0x2d, 0x52, 0xf8, 0x0a, 0xd0, + 0x7e, 0x3c, 0x7a, 0xad, 0x93, 0xc1, 0x1a, 0xcc, 0xea, 0xc1, 0x25, 0x1c, 0x31, 0x5a, 0x62, 0x15, + 0x95, 0xbd, 0xc8, 0x61, 0xb3, 0xf5, 0x75, 0x96, 0x65, 0xad, 0x1f, 0x3c, 0x25, 0x06, 0xaa, 0x04, + 0x43, 0x08, 0xf8, 0xc4, 0x31, 0x2d, 0x36, 0x49, 0x11, 0xcf, 0x02, 0xdf, 0xf0, 0x88, 0xde, 0x9a, + 0x85, 0xe6, 0xdc, 0x81, 0x9d, 0x96, 0xb3, 0x82, 0x94, 0x3c, 0x44, 0x6d, 0xc1, 0xa9, 0x61, 0x80, + 0x0c, 0x26, 0x6b, 0xfd, 0x06, 0x79, 0x51, 0xcc, 0xe5, 0xfe, 0x43, 0xa8, 0xc3, 0x46, 0xde, 0x64, + 0xeb, 0xd9, 0x50, 0x49, 0x39, 0x2f, 0x0a, 0xe2, 0x7b, 0x64, 0x1b, 0xcd, 0x1e, 0xd9, 0x10, 0xf9, + 0x17, 0x5d, 0xe4, 0x72, 0xaa, 0x83, 0xeb, 0x78, 0x50, 0x5f, 0x4b, 0xe4, 0xa8, 0x39, 0xc0, 0xd6, + 0xb5, 0x74, 0x8e, 0xa4, 0xfb, 0x0e, 0xc5, 0xdb, 0x49, 0xfc, 0xd3, 0xa0, 0xc3, 0x6e, 0xcb, 0x71, + 0x6d, 0xac, 0x26, 0x0e, 0xc9, 0x11, 0x1f, 0x26, 0x47, 0xf5, 0x10, 0x34, 0xd9, 0x7a, 0x8b, 0x78, + 0x40, 0x54, 0x7f, 0x01, 0x9b, 0x85, 0xe8, 0x16, 0x7a, 0xe9, 0xb5, 0x43, 0x87, 0x33, 0x48, 0x3e, + 0x53, 0x10, 0x3c, 0xa4, 0x0f, 0x38, 0xab, 0x52, 0x21, 0xb3, 0xba, 0xb5, 0xbf, 0x7c, 0x53, 0x49, + 0x15, 0xf1, 0xe7, 0xf9, 0x5b, 0x20, 0xb3, 0xb2, 0xe6, 0x29, 0x19, 0x35, 0x97, 0x8f, 0x0f, 0xa5, + 0x4f, 0xf3, 0xba, 0x72, 0x62, 0xd1, 0xc9, 0x7c, 0x5f, 0x3d, 0xd4, 0xe6, 0x9e, 0xe3, 0xe4, 0x7c, + 0xb5, 0x33, 0x80, 0xf3, 0x72, 0x35, 0xfa, 0xbd, 0xa1, 0xab, 0xb3, 0x27, 0x02, 0x8d, 0x08, 0x7b, + 0xc2, 0x19, 0x35, 0x90, 0x45, 0x8e, 0xd7, 0xab, 0xf0, 0xd1, 0x3a, 0x6b, 0xa9, 0xf2, 0xd6, 0x08, + 0x47, 0x1b, 0xc6, 0xc3, 0x25, 0x2f, 0xd8, 0x93, 0x6a, 0x8e, 0x99, 0x99, 0xe5, 0x7e, 0x3c, 0xdd, + 0xae, 0xc7, 0x7a, 0x0b, 0xc5, 0x34, 0xcc, 0x3c, 0xa0, 0xf9, 0xea, 0x4d, 0xcf, 0x34, 0x29, 0xa2, + 0x2b, 0xd8, 0x9b, 0x27, 0xe4, 0x31, 0x05, 0x4a, 0x02, 0xab, 0x2e, 0x9a, 0x5b, 0x5e, 0xfe, 0xac, + 0x1e, 0x60, 0xae, 0x84, 0xe8, 0x7a, 0x1b, 0x61, 0xac, 0xc8, 0x8d, 0x85, 0xbc, 0x99, 0x3f, 0xc7, + 0x6a, 0x43, 0x7e, 0x1e, 0x02, 0xf1, 0x8e, 0x27, 0x7d, 0xbc, 0x65, 0xac, 0x4d, 0xcc, 0x9b, 0x0a, + 0x5f, 0x1e, 0xf4, 0xc2, 0x73, 0x48, 0x4f, 0x2c, 0x08, 0x68, 0x08, 0x63, 0x5b, 0xb4, 0xb4, 0x53, + 0x29, 0x5c, 0x1a, 0x6f, 0x63, 0xf9, 0xd5, 0xfe, 0x5e, 0xa3, 0x17, 0x8c, 0x2e, 0xee, 0x10, 0x51, + 0x60, 0xd2, 0x43, 0x1a, 0x1a, 0xdf, 0x07, 0xd2, 0x3a, 0xc3, 0x94, 0xb4, 0xd2, 0x48, 0x34, 0xa6, + 0xc6, 0xee, 0xe6, 0xd0, 0x96, 0xac, 0x85, 0xfb, 0x1d, 0x39, 0x6e, 0x0d, 0x0d, 0x1d, 0x60, 0x60, + 0x3a, 0x78, 0xbd, 0x28, 0xdd, 0xe9, 0x88, 0x06, 0x6b, 0x09, 0x3d, 0x1c, 0x42, 0xe0, 0xef, 0x2e, + 0x16, 0x7c, 0x1e, 0x2d, 0xa4, 0x80, 0x84, 0x60, 0xc8, 0x35, 0xa3, 0x39, 0x37, 0x8f, 0x45, 0x39, + 0x0a, 0x30, 0x80, 0x51, 0xab, 0xab, 0x2a, 0x25, 0x00, 0xf4, 0x7a, 0x3e, 0xa7, 0x19, 0xd7, 0x9c, + 0x14, 0xd2, 0xb1, 0x0b, 0xcb, 0xa3, 0xc6, 0xe2, 0x95, 0x5a, 0xec, 0x45, 0x8d, 0xfa, 0x36, 0xd1, + 0xa0, 0x63, 0xf7, 0x03, 0xe4, 0xfb, 0xc8, 0xbc, 0x18, 0x51, 0x3b, 0x32, 0xc6, 0x4d, 0xdc, 0xc6, + 0x5b, 0x11, 0x58, 0x39, 0xa6, 0x17, 0xe2, 0x9f, 0xbb, 0x58, 0x1d, 0x7f, 0xe5, 0x20, 0x8f, 0x90, + 0x98, 0xbb, 0x2e, 0x9c, 0x09, 0x72, 0x8a, 0xfd, 0x63, 0x00, 0x44, 0xde, 0x03, 0xe1, 0xd7, 0xdf, + 0xfb, 0x71, 0x70, 0x5b, 0xcc, 0x74, 0x85, 0x12, 0x99, 0x92, 0xc3, 0x02, 0xe3, 0x91, 0x16, 0x8d, + 0xba, 0xcf, 0xb6, 0x95, 0xf6, 0xdf, 0xff, 0x8a, 0xce, 0xaf, 0x2b, 0x86, 0x38, 0x81, 0xbb, 0xe5, + 0x71, 0x29, 0xfd, 0x8d, 0xcf, 0x2d, 0xc9, 0x53, 0xbf, 0xd9, 0x37, 0xec, 0x8b, 0xa2, 0x7d, 0x47, + 0x47, 0x0f, 0x86, 0x6a, 0x5f, 0x55, 0xc6, 0xeb, 0x8c, 0x61, 0x98, 0x08, 0x73, 0x81, 0x33, 0x30, + 0xe9, 0xd1, 0x14, 0x70, 0x18, 0xfc, 0xcd, 0x34, 0xd4, 0xfa, 0xd6, 0xb4, 0x10, 0x30, 0xce, 0xd8, + 0x7b, 0x2e, 0x30, 0x8c, 0x62, 0x67, 0xf7, 0x73, 0x28, 0xc2, 0xb3, 0x77, 0xaf, 0xa4, 0x33, 0x2a, + 0x10, 0xa6, 0x28, 0x2b, 0x5c, 0x16, 0x20, 0x0b, 0xdc, 0xbf, 0x19, 0x06, 0x9d, 0x17, 0xb4, 0x20, + 0x75, 0x0c, 0xa3, 0x22, 0x18, 0x60, 0x1b, 0xe7, 0x42, 0x07, 0x9c, 0xfd, 0x6f, 0xb6, 0xe7, 0x50, + 0x1f, 0xe0, 0x71, 0xe4, 0x5b, 0xfb, 0x24, 0xe9, 0x15, 0x3c, 0x2e, 0x58, 0x9d, 0x3f, 0xd6, 0x48, + 0x0e, 0x31, 0x77, 0x33, 0xf4, 0x08, 0x33, 0x53, 0xff, 0x52, 0x16, 0x9e, 0xa2, 0xaf, 0x73, 0xf2, + 0x20, 0x6d, 0x1b, 0x34, 0x46, 0xa4, 0xea, 0x71, 0xd1, 0xd4, 0x87, 0x11, 0xc6, 0x32, 0x28, 0xaf, + 0xff, 0xb4, 0xb7, 0x38, 0xf6, 0xcb, 0x7a, 0x37, 0x80, 0xf7, 0x25, 0x8b, 0x1b, 0x8a, 0x72, 0x14, + 0xe0, 0x32, 0x60, 0x96, 0x02, 0xd1, 0x03, 0xba, 0x95, 0x79, 0x01, 0x7c, 0x95, 0xef, 0x2a, 0xf8, + 0xae, 0x12, 0x79, 0x27, 0x22, 0x3b, 0xdc, 0x56, 0x64, 0x5f, 0x40, 0xe0, 0x23, 0x22, 0x90, 0x7b, + 0x35, 0x57, 0x6e, 0x2d, 0x7a, 0xf8, 0xf3, 0x30, 0x3c, 0x27, 0x1c, 0x8b, 0x35, 0x3a, 0x57, 0x49, + 0xdb, 0x22, 0x58, 0x63, 0xd2, 0xaf, 0xa9, 0xd9, 0x25, 0x7c, 0x75, 0x11, 0xf9, 0xa7, 0x80, 0x53, + 0x69, 0x47, 0x57, 0xe8, 0x4c, 0x67, 0xa3, 0x9d, 0x08, 0x77, 0x46, 0x36, 0x7a, 0x19, 0x03, 0x86, + 0xdf, 0x36, 0x74, 0x44, 0x2a, 0x59, 0x16, 0x12, 0x1d, 0xe0, 0x0b, 0x86, 0xb2, 0x26, 0x97, 0xb9, + 0x9d, 0x15, 0x5c, 0xcb, 0x64, 0xb1, 0x48, 0xfa, 0x91, 0x18, 0x57, 0x67, 0x05, 0x16, 0xfa, 0x64, + 0x4e, 0xaf, 0x7d, 0xfe, 0xd9, 0x8d, 0x0f, 0x64, 0x57, 0x62, 0xac, 0x3b, 0xc9, 0xd4, 0x3c, 0xc9, + 0x74, 0x50, 0x37, 0x00, 0x31, 0xd8, 0xc9, 0x2b, 0xa7, 0x3c, 0xf3, 0x1f, 0xf3, 0xe7, 0x39, 0xe8, + 0x07, 0x77, 0x14, 0xd5, 0xb5, 0xdf, 0x07, 0x85, 0x5c, 0x03, 0x0d, 0xa9, 0xb9, 0x2c, 0x23, 0xdf, + 0x20, 0xd7, 0x00, 0x64, 0xef, 0xf9, 0xe7, 0xee, 0x6f, 0x08, 0x46, 0xda, 0xb1, 0xd4, 0x72, 0x19, + 0xad, 0x9e, 0x2a, 0xa2, 0x32, 0x7f, 0x59, 0x2a, 0x87, 0x47, 0xdb, 0x56, 0x5c, 0x85, 0x4a, 0x2e, + 0xa6, 0x11, 0xe4, 0x27, 0xfb, 0x04, 0x61, 0xb3, 0xc6, 0x35, 0x2c, 0xa6, 0x3c, 0xb3, 0xf7, 0xf6, + 0xae, 0x16, 0x30, 0xae, 0x1e, 0x94, 0x1e, 0x81, 0x8f, 0xd1, 0xbb, 0x40, 0x44, 0x7a, 0x68, 0xe5, + 0x6c, 0xf2, 0xf4, 0x7d, 0xcd, 0x55, 0xcf, 0x8e, 0x3f, 0xd3, 0x02, 0x89, 0x5e, 0x14, 0x71, 0x15, + 0xd0, 0x10, 0xe1, 0x23, 0xab, 0xee, 0x8b, 0xad, 0x1c, 0x27, 0xc2, 0xd5, 0x74, 0xf7, 0xc8, 0x4b, + 0x98, 0xfb, 0xac, 0x58, 0xdc, 0x9e, 0x5f, 0xad, 0x5d, 0x2d, 0xc4, 0xe6, 0x70, 0xe8, 0x9e, 0x96, + 0xb0, 0xed, 0x28, 0x64, 0x08, 0x34, 0x37, 0xe4, 0x11, 0xe0, 0xd7, 0xd0, 0x84, 0xa0, 0x4b, 0xb2, + 0x50, 0x03, 0xfe, 0x92, 0x75, 0x55, 0x33, 0x82, 0x1e, 0x74, 0x73, 0x93, 0x3b, 0xf1, 0x8d, 0x8b, + 0x35, 0x9f, 0xac, 0x3d, 0x3c, 0xa9, 0x54, 0xe7, 0xbe, 0x13, 0xbc, 0xc1, 0x6b, 0x91, 0xd4, 0x64, + 0xbd, 0x43, 0x22, 0x76, 0x8d, 0x22, 0x97, 0x5a, 0xd0, 0xb9, 0x64, 0x17, 0x7b, 0x95, 0x14, 0x67, + 0x81, 0x14, 0xec, 0x1d, 0xac, 0x60, 0x39, 0x5d, 0x90, 0x67, 0x2d, 0xd8, 0x6e, 0x09, 0xbf, 0xa7, + 0x50, 0x46, 0xf8, 0xe1, 0xd2, 0x7a, 0xbd, 0x6e, 0xe0, 0xbc, 0xa3, 0xbf, 0x60, 0x7b, 0x6f, 0xdf, + 0x0d, 0x8c, 0x2e, 0xd6, 0x15, 0xf5, 0x8e, 0x76, 0x80, 0xad, 0x1d, 0x94, 0x6f, 0xcc, 0x1e, 0x54, + 0x8f, 0xb1, 0xd6, 0x38, 0x4e, 0xfa, 0x0a, 0xea, 0x32, 0xef, 0xc0, 0xf1, 0xf9, 0x79, 0x54, 0xaa, + 0x80, 0x6c, 0x77, 0x30, 0xc7, 0xa9, 0xd4, 0x5d, 0x28, 0x5d, 0x40, 0x07, 0x01, 0xa7, 0xa3, 0x86, + 0x09, 0x77, 0x9e, 0x28, 0x21, 0x9f, 0xdd, 0xa6, 0xd9, 0x71, 0x5b, 0x11, 0x65, 0x9c, 0x45, 0x36, + 0x4a, 0x9b, 0xb1, 0x52, 0x01, 0xd5, 0x8d, 0x45, 0x9a, 0x49, 0x93, 0x28, 0xef, 0x5f, 0x55, 0xa4, + 0xd1, 0x13, 0xd8, 0xf1, 0x6b, 0x75, 0x09, 0xb4, 0xd5, 0x56, 0x6a, 0x22, 0x68, 0xa3, 0x9d, 0x4f, + 0x4e, 0xba, 0x01, 0xf0, 0xf2, 0x59, 0xa6, 0x39, 0x49, 0x32, 0xc0, 0xca, 0xd4, 0xcf, 0x82, 0x55, + 0x0d, 0x24, 0xa3, 0xda, 0x4f, 0xab, 0x86, 0x43, 0x69, 0xfc, 0xad, 0xc2, 0x2b, 0x54, 0xa6, 0x49, + 0x19, 0x4c, 0x9e, 0x4f, 0x0e, 0x28, 0xad, 0xcf, 0x63, 0xc8, 0x82, 0x1d, 0x5d, 0x6f, 0x8e, 0x53, + 0x8c, 0xcd, 0x98, 0x16, 0x49, 0x45, 0x8e, 0xc0, 0xc2, 0x89, 0xc6, 0x5f, 0xb3, 0x75, 0x9f, 0xf5, + 0xdf, 0xeb, 0x09, 0x24, 0xcf, 0x94, 0x52, 0x50, 0x94, 0xf9, 0x3e, 0xb1, 0xea, 0xf4, 0x9c, 0x5f, + 0x82, 0xeb, 0xbd, 0x44, 0xd6, 0xba, 0xe0, 0x9a, 0xb1, 0x63, 0xde, 0x09, 0xf7, 0x14, 0xd6, 0x0c, + 0x8f, 0x6f, 0x40, 0xdd, 0x14, 0x5e, 0xbf, 0x4e, 0xf0, 0xfa, 0xe9, 0xd0, 0x3c, 0x81, 0x6c, 0x89, + 0x75, 0x3f, 0x22, 0xff, 0x45, 0x33, 0xde, 0x57, 0x8b, 0x64, 0xb1, 0x9a, 0x72, 0x8e, 0xfa, 0xba, + 0x2e, 0xba, 0x18, 0xbe, 0x46, 0x87, 0x56, 0x68, 0xa0, 0xe4, 0xe9, 0xc1, 0x56, 0xbd, 0x03, 0x98, + 0xb0, 0x85, 0x6b, 0x79, 0x2b, 0x2c, 0xde, 0x8b, 0x44, 0xcb, 0x2d, 0xd6, 0x6b, 0xd6, 0x5b, 0x63, + 0x9e, 0xb8, 0xef, 0xa8, 0x62, 0x72, 0xc8, 0x39, 0xad, 0x66, 0xef, 0x4d, 0x27, 0x85, 0x9c, 0x21, + 0x3d, 0x15, 0xbf, 0xcf, 0xd4, 0xd4, 0xbc, 0x3e, 0x10, 0x6f, 0x60, 0xf6, 0x34, 0xee, 0x66, 0xa4, + 0x75, 0x80, 0x8d, 0x23, 0x46, 0xcd, 0x55, 0x2d, 0x28, 0x06, 0xcc, 0x79, 0x6b, 0x20, 0xe5, 0x9b, + 0x47, 0xae, 0x26, 0xad, 0x1c, 0x12, 0x18, 0xf1, 0x36, 0xab, 0x62, 0x05, 0x5e, 0x67, 0x42, 0x55, + 0x97, 0x49, 0x3e, 0x92, 0xd9, 0xd7, 0x8d, 0x21, 0x70, 0x49, 0xc7, 0xb0, 0x3e, 0x59, 0x1a, 0x07, + 0x62, 0xb5, 0xa0, 0x18, 0xbf, 0xc0, 0xad, 0xd0, 0x06, 0x60, 0x75, 0xf8, 0x1e, 0xa7, 0x29, 0xc0, + 0x0e, 0x9e, 0xbb, 0xc3, 0x62, 0x09, 0x70, 0x6f, 0x57, 0x00, 0x69, 0xb3, 0x49, 0x2f, 0xc7, 0xc0, + 0x58, 0x5e, 0x12, 0xbf, 0x85, 0x00, 0xec, 0xcc, 0x5c, 0x9a, 0x00, 0x92, 0xa9, 0x88, 0xa3, 0x51, + 0x7a, 0x17, 0xe2, 0x53, 0x50, 0x3d, 0x70, 0x73, 0x6a, 0xa5, 0xbb, 0x2c, 0xa8, 0x24, 0x6b, 0xcf, + 0x98, 0xc5, 0xc3, 0x18, 0xa0, 0x16, 0x20, 0x98, 0x2b, 0xdc, 0xb1, 0xae, 0xcb, 0x92, 0xb9, 0xa6, + 0x7f, 0x75, 0x4d, 0xa5, 0x17, 0xbd, 0x96, 0xc8, 0xc4, 0xca, 0xb8, 0x0e, 0x2c, 0xec, 0x06, 0x90, + 0x53, 0x0f, 0xf4, 0x4a, 0x5f, 0x19, 0x36, 0x8b, 0xb9, 0xac, 0x14, 0x4e, 0x1f, 0xba, 0x01, 0x9b, + 0x57, 0x1f, 0x41, 0x59, 0x1d, 0x8b, 0x17, 0x3a, 0x4f, 0xf0, 0x7b, 0xea, 0xff, 0x5c, 0x9c, 0xf9, + 0xa4, 0x4a, 0xd0, 0xd0, 0x08, 0x40, 0x52, 0x07, 0xed, 0xc1, 0xcf, 0xf0, 0x12, 0xc5, 0x8c, 0xc2, + 0x2b, 0xf7, 0xd9, 0x49, 0xf0, 0x88, 0x7f, 0x01, 0x27, 0x83, 0xcc, 0x9b, 0x64, 0xc1, 0xf4, 0x1d, + 0x37, 0x84, 0xea, 0x8e, 0xbf, 0x5f, 0x0d, 0xed, 0x5b, 0x17, 0xc2, 0x93, 0x09, 0x2a, 0xa2, 0x50, + 0x9d, 0xa1, 0xdd, 0x5a, 0x73, 0x41, 0xf8, 0x50, 0xf5, 0x67, 0x4b, 0xd2, 0x1b, 0xbf, 0xe4, 0xf5, + 0x5d, 0x47, 0x7e, 0x70, 0x53, 0xa3, 0x72, 0xe8, 0x8a, 0x6f, 0xf2, 0x27, 0x53, 0xe1, 0xbe, 0x5b, + 0xd8, 0xe8, 0x61, 0x0e, 0x3d, 0xf5, 0x82, 0x42, 0x77, 0x6e, 0x12, 0xcf, 0x99, 0xba, 0x5b, 0x34, + 0x63, 0xd6, 0xb6, 0xf5, 0x61, 0x8d, 0xc1, 0x8b, 0x2d, 0x07, 0x58, 0x52, 0xf5, 0xb8, 0x33, 0x40, + 0x45, 0x5f, 0x67, 0xc5, 0x34, 0xe7, 0xa8, 0xfa, 0x99, 0xdc, 0x7c, 0x9e, 0x19, 0x54, 0x72, 0x57, + 0xa5, 0xa8, 0x4d, 0xb9, 0x19, 0x65, 0x3b, 0x23, 0x4f, 0xf6, 0x4c, 0x37, 0xbd, 0xa3, 0x81, 0x4f, + 0x3c, 0x46, 0x79, 0x17, 0xe0, 0xb1, 0x43, 0x37, 0x0e, 0xd1, 0xa2, 0xc6, 0xc6, 0x8f, 0xf3, 0x86, + 0x2b, 0x2e, 0xf3, 0x85, 0x0a, 0xff, 0xfc, 0xf3, 0x61, 0x13, 0xb5, 0x98, 0x0d, 0xb7, 0x9a, 0x5e, + 0x13, 0xaf, 0x6e, 0x99, 0xcc, 0x24, 0xbd, 0x95, 0x76, 0xbc, 0x7e, 0x2b, 0x44, 0x63, 0x78, 0x23, + 0x1b, 0x1e, 0x65, 0x76, 0xc8, 0xfb, 0xaf, 0xe5, 0x1c, 0x79, 0xb8, 0x67, 0x5c, 0xb0, 0xf0, 0xdd, + 0x37, 0xb7, 0xce, 0xe8, 0x70, 0x59, 0xfb, 0xdf, 0x71, 0x56, 0x0d, 0xa7, 0x6c, 0x5a, 0xc1, 0x8f, + 0x4e, 0xab, 0x2e, 0x25, 0x35, 0xe5, 0x1b, 0x68, 0x46, 0x57, 0x61, 0x3c, 0x8b, 0x6e, 0xc4, 0xe7, + 0x53, 0xb1, 0x40, 0xdb, 0x0b, 0x79, 0x83, 0x35, 0x81, 0x1e, 0x60, 0x3d, 0x4c, 0xb6, 0xcc, 0x95, + 0xb3, 0xb9, 0x27, 0x45, 0xa5, 0x23, 0x4d, 0xa8, 0x3e, 0xec, 0x86, 0x34, 0xfb, 0x99, 0x66, 0x82, + 0x3d, 0xab, 0x6d, 0x82, 0x5c, 0x79, 0xa4, 0x92, 0x2a, 0x49, 0xc7, 0xa9, 0x8f, 0x9f, 0x4c, 0xac, + 0xcf, 0x8a, 0xd2, 0xe9, 0x44, 0xd3, 0x91, 0x5a, 0x3f, 0x9d, 0xde, 0xbc, 0xfb, 0x85, 0x80, 0xbd, + 0xc6, 0x0a, 0xa8, 0xc9, 0x63, 0x73, 0xfa, 0x6c, 0xc4, 0xfc, 0x62, 0xb7, 0x33, 0xa2, 0x16, 0x0a, + 0xdf, 0x1b, 0x5f, 0x2d, 0x3a, 0x17, 0xc5, 0x90, 0xf3, 0x73, 0x74, 0x45, 0xfa, 0x86, 0xd6, 0xa8, + 0xcc, 0x37, 0x0f, 0x95, 0x99, 0x65, 0xf3, 0xd2, 0x55, 0x2e, 0x93, 0x4a, 0x17, 0x55, 0x23, 0x24, + 0x96, 0x27, 0x7f, 0xe8, 0x70, 0x61, 0x99, 0xac, 0x83, 0x4f, 0xe4, 0x99, 0xc4, 0x44, 0x63, 0x28, + 0x66, 0xe8, 0xc7, 0x26, 0x8d, 0x85, 0x34, 0xa2, 0x7e, 0x17, 0x67, 0x38, 0xa4, 0x1e, 0xc4, 0xdd, + 0x58, 0x58, 0xe4, 0xd4, 0x2f, 0xeb, 0x24, 0x91, 0x9e, 0x6c, 0x71, 0x51, 0x19, 0x7b, 0xc8, 0xe0, + 0x04, 0xda, 0x82, 0xb9, 0x7e, 0xcd, 0xa8, 0xfa, 0xd5, 0x2f, 0xe2, 0x13, 0xe6, 0x41, 0x84, 0x66, + 0xb3, 0x28, 0xba, 0x37, 0x8f, 0xd0, 0xe4, 0xf8, 0x7b, 0x60, 0xa8, 0xf5, 0x09, 0x0b, 0x46, 0x34, + 0xda, 0xa4, 0x78, 0x72, 0xf0, 0x63, 0x1d, 0xf9, 0xfc, 0x84, 0xf9, 0xaa, 0xd2, 0x03, 0xa0, 0xa2, + 0x4a, 0xd5, 0x33, 0xad, 0x71, 0xb6, 0x7b, 0x91, 0xb2, 0x98, 0x82, 0x38, 0xd8, 0xc1, 0xd2, 0x2a, + 0x70, 0xc7, 0xb3, 0xb9, 0x8f, 0xd9, 0x90, 0x9c, 0x87, 0x86, 0x22, 0xcf, 0x7f, 0x63, 0x0a, 0x23, + 0xf9, 0xbb, 0x72, 0x75, 0x84, 0xad, 0xc6, 0xf2, 0x1a, 0x90, 0x37, 0xb2, 0xb4, 0xc0, 0xa9, 0x0b, + 0xff, 0xce, 0x6a, 0xf3, 0x48, 0xcb, 0x34, 0x0a, 0x9f, 0x6e, 0x71, 0xf1, 0xee, 0x57, 0x9e, 0x46, + 0xef, 0xab, 0xd6, 0x39, 0xff, 0xc6, 0xc6, 0x22, 0xf1, 0x5a, 0x24, 0x51, 0xe7, 0xa7, 0xba, 0x51, + 0xe3, 0xa7, 0x4c, 0x6a, 0xa4, 0x52, 0x0c, 0x2c, 0x19, 0x14, 0x6e, 0x22, 0x89, 0xb4, 0x24, 0xae, + 0x2e, 0x5c, 0x38, 0x11, 0x6d, 0x78, 0x44, 0xf1, 0xa3, 0xd2, 0x9f, 0xad, 0x62, 0x88, 0x32, 0x68, + 0xe2, 0x68, 0xc8, 0x98, 0xce, 0x28, 0x8a, 0x64, 0xa0, 0x0f, 0xac, 0x65, 0x17, 0x2c, 0x3a, 0x14, + 0x7f, 0x9a, 0x89, 0x37, 0x13, 0x8a, 0x4e, 0x46, 0xdb, 0xe0, 0x67, 0x88, 0x21, 0xde, 0x41, 0x97, + 0x11, 0x67, 0xc0, 0xee, 0xa2, 0x13, 0xfc, 0x10, 0x15, 0xcf, 0xa0, 0xe4, 0x66, 0x65, 0x18, 0xfa, + 0x91, 0xa9, 0x1e, 0x1c, 0x06, 0x8d, 0x69, 0x9c, 0xf5, 0x4a, 0x78, 0xc4, 0x9b, 0xc0, 0x0a, 0x97, + 0xfe, 0x89, 0x64, 0x7a, 0xab, 0xf9, 0xcd, 0xaa, 0xeb, 0x24, 0xd7, 0x28, 0x76, 0x09, 0xd0, 0x44, + 0xbe, 0x3e, 0x67, 0x2a, 0x7a, 0xac, 0xc7, 0x8f, 0xff, 0x4e, 0x42, 0x62, 0x05, 0x5a, 0x64, 0x82, + 0x6c, 0x25, 0xa9, 0xaf, 0xe5, 0x78, 0xa3, 0x9c, 0x13, 0x4d, 0xe3, 0x88, 0x91, 0x05, 0x55, 0x9b, + 0xa8, 0x38, 0xfa, 0x68, 0x82, 0x83, 0x58, 0xb2, 0xdd, 0x80, 0xbe, 0xc2, 0xa5, 0x79, 0x73, 0x40, + 0xd8, 0x0d, 0xf7, 0x48, 0x49, 0x52, 0x1f, 0x6e, 0xc0, 0xd4, 0x61, 0x9f, 0x09, 0x9a, 0xb3, 0x99, + 0x60, 0x68, 0x55, 0x01, 0xd7, 0x02, 0xc2, 0x6d, 0x7c, 0x47, 0xae, 0xc3, 0x6b, 0x6a, 0x7d, 0xce, + 0xdd, 0xe7, 0x1c, 0x57, 0x0f, 0xc2, 0x88, 0x04, 0xe1, 0x97, 0x25, 0x0d, 0x8c, 0xe3, 0x89, 0x15, + 0x19, 0x67, 0x11, 0x04, 0x61, 0xbf, 0x5b, 0xe7, 0x7c, 0x21, 0x5c, 0xb9, 0x26, 0xc2, 0x94, 0xc4, + 0x5a, 0xcc, 0xc6, 0x83, 0xc1, 0x21, 0x04, 0x5c, 0x77, 0x88, 0xd8, 0xcb, 0x6a, 0x87, 0xbb, 0xc6, + 0x10, 0x6b, 0x85, 0xbd, 0xcb, 0xc0, 0x97, 0xde, 0x99, 0x89, 0xde, 0xeb, 0x7f, 0xd3, 0xb2, 0x8c, + 0x87, 0xb3, 0x0f, 0xca, 0xf5, 0xf6, 0x46, 0xb1, 0x8d, 0x03, 0xfc, 0xfb, 0x03, 0xd6, 0x0e, 0xf1, + 0xe4, 0x5c, 0x3e, 0x3b, 0x99, 0x26, 0xb4, 0xd6, 0xde, 0xb2, 0xc4, 0x64, 0xa6, 0xed, 0x99, 0x9e, + 0x14, 0x0a, 0x75, 0xbe, 0xfc, 0x36, 0xd0, 0x75, 0xf9, 0x00, 0xbd, 0x2e, 0x79, 0xd0, 0x4a, 0x90, + 0xbe, 0xc6, 0x47, 0xe8, 0x33, 0xd3, 0x5a, 0x6e, 0x83, 0xc5, 0xd1, 0xd7, 0xe2, 0xe0, 0x49, 0x5f, + 0xd7, 0x3b, 0x08, 0x65, 0x6c, 0x5f, 0x0b, 0x92, 0xb8, 0x14, 0x32, 0x3f, 0xaf, 0xce, 0x37, 0x07, + 0x53, 0x6c, 0x10, 0x5b, 0x1f, 0x7b, 0x1b, 0x53, 0x87, 0xda, 0xe0, 0xd8, 0x4d, 0x0f, 0xea, 0xeb, + 0x7a, 0x48, 0xc2, 0xee, 0x40, 0x99, 0x22, 0x2b, 0x08, 0x10, 0xda, 0x2c, 0x67, 0xe9, 0x24, 0x14, + 0x82, 0xfc, 0x5c, 0xfd, 0x76, 0xe5, 0x5c, 0xb4, 0x2b, 0xd0, 0x40, 0x4d, 0xc9, 0x48, 0x7a, 0xbb, + 0xc3, 0xef, 0xb2, 0x45, 0x54, 0xae, 0xc2, 0x23, 0x1f, 0x9c, 0x5d, 0x53, 0x59, 0xc8, 0xd9, 0x36, + 0x81, 0x55, 0xd0, 0xf8, 0x32, 0x7e, 0x14, 0xce, 0xd9, 0x6b, 0x2b, 0x31, 0x2e, 0xf5, 0x47, 0x7f, + 0x6d, 0xd1, 0x2e, 0x09, 0xff, 0xad, 0x5d, 0x14, 0x32, 0x94, 0x97, 0x39, 0xc3, 0xcb, 0xc4, 0x2f, + 0x79, 0x44, 0xfe, 0xc1, 0x1f, 0x8c, 0x23, 0xe1, 0xd6, 0xca, 0xae, 0xb0, 0x40, 0x33, 0xec, 0x7b, + 0x2f, 0xf6, 0xdc, 0xf1, 0xfd, 0xf5, 0xe1, 0x81, 0xd0, 0x79, 0xac, 0xea, 0xce, 0x77, 0xb4, 0x8e, + 0x3e, 0x64, 0xad, 0x5f, 0x60, 0x57, 0xbc, 0x6e, 0xcc, 0xc3, 0x65, 0x80, 0x94, 0x7c, 0xc5, 0x4b, + 0x1b, 0x58, 0x9e, 0x7f, 0xc6, 0x70, 0xa2, 0xa3, 0xf6, 0xda, 0xd5, 0xe6, 0xab, 0xb1, 0x24, 0x97, + 0x72, 0x4c, 0xce, 0xfa, 0x9a, 0xa7, 0x48, 0x1d, 0xb2, 0x5a, 0xef, 0x86, 0xbe, 0xd1, 0xef, 0xb5, + 0x02, 0x1e, 0x89, 0xe9, 0x0b, 0x91, 0x51, 0xe6, 0xd7, 0x27, 0x7e, 0x12, 0xa8, 0x35, 0x1a, 0xd6, + 0xd8, 0x01, 0x0e, 0x0f, 0xc2, 0x68, 0x66, 0x7b, 0x9c, 0x5f, 0xaa, 0xa4, 0x2d, 0xbe, 0x6a, 0x3c, + 0xc3, 0x80, 0x43, 0x1f, 0x95, 0x84, 0xeb, 0x48, 0xa1, 0xfc, 0x36, 0x16, 0x75, 0xec, 0xa6, 0x56, + 0x6f, 0x4d, 0xdc, 0xbe, 0x54, 0x08, 0x7c, 0x67, 0xdd, 0xbd, 0x8d, 0xfc, 0x59, 0x08, 0x0d, 0x97, + 0x7a, 0x12, 0x0d, 0x75, 0x23, 0x3f, 0xd1, 0x72, 0xe6, 0xc3, 0xfc, 0x77, 0xdc, 0x6f, 0x99, 0x9e, + 0x53, 0x61, 0x1f, 0x0b, 0xc2, 0xf3, 0xba, 0x8a, 0x84, 0x67, 0x00, 0x8f, 0xf7, 0xf2, 0x55, 0x2b, + 0x98, 0x73, 0x95, 0x72, 0x32, 0x9e, 0x8c, 0xce, 0x00, 0x51, 0xc4, 0x9e, 0x8f, 0x6b, 0xc7, 0x92, + 0x69, 0x13, 0x2f, 0x2e, 0x3c, 0x6a, 0x4c, 0x70, 0x41, 0x9f, 0x29, 0xe8, 0x06, 0x5f, 0x60, 0x0e, + 0x3f, 0x48, 0x65, 0x74, 0xba, 0xb8, 0x15, 0xa5, 0x2c, 0x91, 0x2a, 0x35, 0x7a, 0x3a, 0x6b, 0xa8, + 0xee, 0x93, 0x44, 0x80, 0x67, 0xba, 0xb9, 0xa6, 0xa9, 0x43, 0x74, 0xe1, 0xc3, 0x2d, 0x82, 0x91, + 0xb0, 0x86, 0xe5, 0x1e, 0x66, 0x2f, 0xaa, 0x6f, 0xb8, 0x77, 0x28, 0x82, 0x0e, 0x78, 0x03, 0x4a, + 0x46, 0xe0, 0xa0, 0xf8, 0xa1, 0xb7, 0x62, 0xb1, 0x4a, 0x0a, 0x12, 0xbb, 0xb9, 0x2e, 0xf1, 0x58, + 0x12, 0x77, 0x83, 0x59, 0xdd, 0xce, 0x3e, 0xf7, 0x57, 0xb3, 0x61, 0x57, 0xb6, 0x6e, 0xaa, 0xef, + 0xc0, 0xdd, 0xf6, 0xef, 0xd8, 0xd0, 0xf1, 0x88, 0xe5, 0x09, 0x59, 0xe7, 0xe1, 0x5d, 0x82, 0x3e, + 0xe5, 0xa2, 0x23, 0x88, 0x59, 0xd9, 0x8b, 0xf7, 0xe5, 0x06, 0x93, 0xfa, 0x21, 0xbb, 0x21, 0x40, + 0xf0, 0x0a, 0xb7, 0xb5, 0x7e, 0x29, 0x2d, 0x20, 0x52, 0xa8, 0x91, 0x3b, 0x76, 0x64, 0x20, 0x23, + 0xfd, 0x60, 0x46, 0x1f, 0x1c, 0xbf, 0xcd, 0xeb, 0x4c, 0xcc, 0xeb, 0x0f, 0xb1, 0xb5, 0x5c, 0x55, + 0xbe, 0x46, 0x79, 0xf0, 0xe3, 0x2e, 0xc4, 0xc4, 0x2c, 0x26, 0xa5, 0x16, 0x17, 0xb3, 0xcd, 0xea, + 0x86, 0x6a, 0x94, 0x0f, 0x65, 0x84, 0xfa, 0xe3, 0x7a, 0x77, 0xee, 0x16, 0x06, 0x2f, 0xdd, 0xb3, + 0xfe, 0x87, 0xb5, 0x96, 0xe2, 0x22, 0xcc, 0x47, 0xd6, 0x27, 0x73, 0xd3, 0xff, 0xb1, 0xfe, 0xb6, + 0xc2, 0xa4, 0xa8, 0x43, 0x4e, 0xee, 0xd4, 0x0f, 0x6d, 0x2d, 0x2e, 0x1b, 0xca, 0x7d, 0x52, 0x4d, + 0xc3, 0x6f, 0xcf, 0xc2, 0xc6, 0xe8, 0x52, 0xbe, 0xb3, 0x80, 0xde, 0xe7, 0x04, 0x27, 0x67, 0xcc, + 0xb5, 0x58, 0x11, 0xf4, 0x49, 0x53, 0xe0, 0x52, 0xe9, 0x1d, 0xe3, 0x49, 0xb4, 0x5c, 0x83, 0x00, + 0x25, 0x7c, 0x25, 0x0d, 0x40, 0xa3, 0x4e, 0x43, 0x90, 0xa8, 0xaf, 0x27, 0xb2, 0x24, 0xe5, 0xee, + 0xc1, 0x81, 0x65, 0xcd, 0xea, 0x4d, 0x15, 0xf4, 0x3e, 0x48, 0xe7, 0xdd, 0xd1, 0x46, 0x34, 0x99, + 0xca, 0x5a, 0x92, 0xbe, 0x5b, 0xaa, 0xec, 0xd9, 0x1f, 0x05, 0xd1, 0x23, 0xa5, 0xe3, 0xe2, 0x9f, + 0x5a, 0x14, 0xac, 0x49, 0x8f, 0x88, 0x2b, 0xfc, 0xaf, 0xb2, 0x25, 0xd7, 0xc3, 0x4e, 0xe3, 0xf7, + 0xfa, 0x42, 0x27, 0x46, 0x03, 0xd6, 0x5e, 0xd2, 0xab, 0x6b, 0x58, 0x37, 0xdc, 0xdb, 0x9f, 0x59, + 0x3b, 0x01, 0xf3, 0x51, 0x1b, 0x8c, 0x87, 0xca, 0xdd, 0x18, 0x85, 0xc6, 0xb8, 0xb1, 0x5b, 0x6a, + 0x14, 0x91, 0x60, 0x56, 0xea, 0xbe, 0xf0, 0x0a, 0xbb, 0x35, 0xe8, 0xcb, 0x3a, 0xad, 0x13, 0xa8, + 0xc8, 0xd8, 0xb3, 0xf6, 0xff, 0xf6, 0xd6, 0xad, 0xcb, 0xe1, 0x4c, 0x07, 0xc3, 0x2e, 0x6b, 0xd3, + 0x5b, 0x33, 0xd1, 0x29, 0x6f, 0x0b, 0x06, 0x40, 0xeb, 0x27, 0x57, 0x56, 0x45, 0x5b, 0xc7, 0x0c, + 0x5d, 0x23, 0xd7, 0x27, 0x39, 0x64, 0x97, 0x7f, 0xd4, 0x21, 0x86, 0xb1, 0xb2, 0x06, 0xbb, 0xbf, + 0xce, 0x64, 0x54, 0x33, 0xe8, 0x7d, 0x6c, 0x88, 0xc3, 0x5f, 0xf2, 0x65, 0xc1, 0x4b, 0xe1, 0xbd, + 0x0a, 0x6b, 0x8d, 0x17, 0x0d, 0x7c, 0x8c, 0xdd, 0xda, 0x95, 0x97, 0xf1, 0xc9, 0x80, 0x1e, 0xdc, + 0x3c, 0x0b, 0xe7, 0x05, 0xeb, 0xa7, 0x48, 0x5b, 0xe3, 0x00, 0xb8, 0x33, 0xa6, 0x2f, 0xff, 0xa7, + 0xdc, 0x7d, 0xec, 0x8a, 0x30, 0xd1, 0x4b, 0x09, 0x2c, 0x46, 0x2c, 0x1b, 0x87, 0x59, 0x39, 0x66, + 0x02, 0xd6, 0x1e, 0x08, 0x82, 0x02, 0x46, 0x43, 0x50, 0xba, 0xc3, 0x34, 0x65, 0xcc, 0x15, 0x15, + 0x85, 0x38, 0x64, 0xcc, 0x02, 0x82, 0x28, 0xc7, 0xd4, 0xd4, 0x29, 0x6b, 0x06, 0x76, 0x41, 0x8c, + 0x34, 0xa3, 0xfc, 0xf7, 0x38, 0x4c, 0x54, 0x52, 0x48, 0xd3, 0x25, 0xaa, 0xee, 0xc8, 0xe0, 0xf5, + 0x02, 0x4c, 0xcc, 0xc0, 0x84, 0xd2, 0x43, 0x0b, 0xd9, 0xb4, 0x7c, 0xc4, 0x9b, 0xb5, 0x52, 0x55, + 0x5d, 0x34, 0x79, 0xc9, 0xbc, 0xf7, 0x57, 0xce, 0xa6, 0x44, 0x09, 0x85, 0xbe, 0xbe, 0xaf, 0x14, + 0xaa, 0x95, 0x7c, 0x5d, 0x03, 0x71, 0xc4, 0x53, 0xda, 0x65, 0x75, 0x4d, 0x33, 0x3d, 0x23, 0x31, + 0x89, 0xdf, 0xe1, 0x78, 0x35, 0x64, 0x48, 0x21, 0xe5, 0x77, 0x1a, 0xc8, 0xa3, 0x31, 0x6d, 0xb3, + 0x4a, 0xdb, 0x0b, 0xf3, 0x3e, 0x56, 0xdc, 0xd8, 0x93, 0x53, 0x40, 0x91, 0x3d, 0xcc, 0xcf, 0xdf, + 0x79, 0x7c, 0x1a, 0x80, 0x98, 0x2c, 0xf6, 0xa5, 0x70, 0x45, 0x42, 0x33, 0xe5, 0xea, 0xe2, 0x5e, + 0x2e, 0x71, 0x0f, 0x4f, 0xfc, 0x62, 0x31, 0x9b, 0x48, 0xf6, 0x8f, 0x51, 0xf6, 0x23, 0xca, 0xb4, + 0x95, 0x97, 0xc2, 0xfe, 0x0d, 0x09, 0x7d, 0x8e, 0xde, 0x3f, 0x1d, 0xfc, 0x49, 0x5a, 0xfb, 0xb2, + 0x6a, 0x10, 0x0c, 0xe5, 0xf1, 0x8a, 0x6a, 0x14, 0x75, 0x14, 0xe4, 0x60, 0x3c, 0xac, 0xc3, 0x4e, + 0xfb, 0xef, 0x69, 0xe9, 0x90, 0x09, 0x9a, 0xcb, 0xa1, 0x60, 0xcd, 0x3f, 0x8e, 0xba, 0x0b, 0x80, + 0x5e, 0xf4, 0x97, 0x6a, 0x0b, 0xe0, 0xc7, 0x0b, 0xbe, 0x18, 0xc3, 0x5a, 0x6e, 0x99, 0x40, 0x9a, + 0xc7, 0x9a, 0x8d, 0x42, 0x03, 0x80, 0x8b, 0x97, 0x35, 0xdd, 0xe6, 0x00, 0xf5, 0x3b, 0x44, 0xd1, + 0x86, 0x87, 0x7f, 0xe3, 0x13, 0x8b, 0xd4, 0x80, 0xca, 0x0f, 0xc8, 0xf8, 0x52, 0x7b, 0xbc, 0x4b, + 0xe3, 0x13, 0xbb, 0x85, 0xf3, 0xe4, 0x6f, 0x50, 0x2a, 0x8b, 0x2c, 0x67, 0xf3, 0x84, 0xc9, 0xa3, + 0x2b, 0x3f, 0xc2, 0x62, 0xe3, 0xe7, 0xb8, 0xeb, 0x2b, 0x9c, 0xfc, 0x3e, 0x3f, 0x4a, 0x53, 0xa8, + 0xed, 0xf0, 0x7e, 0xc0, 0x65, 0xfd, 0x5f, 0xb0, 0x48, 0x43, 0x05, 0x50, 0xc2, 0x70, 0x31, 0x13, + 0x28, 0x22, 0x7a, 0x3f, 0xac, 0xf9, 0x0e, 0x33, 0x06, 0xc6, 0xbf, 0x29, 0xd2, 0xbc, 0x9b, 0xd7, + 0xdd, 0x70, 0x98, 0xe0, 0x14, 0x20, 0x6f, 0xfc, 0xfb, 0xbf, 0x46, 0x4a, 0x91, 0x0e, 0x14, 0xf4, + 0x2a, 0x6f, 0xd6, 0xcd, 0x8c, 0x45, 0xef, 0x13, 0x20, 0x8a, 0xee, 0x9e, 0xfd, 0xf3, 0xe4, 0x76, + 0x0d, 0x7b, 0x02, 0x24, 0xa4, 0x59, 0x4f, 0x51, 0x8f, 0x2d, 0x93, 0xeb, 0xc0, 0xea, 0x37, 0x75, + 0xbc, 0x50, 0x4e, 0xed, 0xfc, 0x6d, 0xac, 0x27, 0x7b, 0x5e, 0xa6, 0xf7, 0x04, 0x54, 0xbd, 0x54, + 0x84, 0xaf, 0x59, 0x45, 0xcf, 0x83, 0x8e, 0xbe, 0x72, 0x99, 0xb4, 0xfd, 0x21, 0x45, 0x51, 0x27, + 0xae, 0x01, 0x80, 0x95, 0x58, 0x28, 0x89, 0xde, 0xfe, 0x9d, 0x9d, 0x1b, 0x17, 0x95, 0xb9, 0x65, + 0xe4, 0xfa, 0xcb, 0x4e, 0xea, 0x94, 0x6e, 0x03, 0xa2, 0x58, 0xf6, 0x7a, 0xc7, 0x9b, 0x75, 0x96, + 0xdd, 0x95, 0x27, 0xd7, 0x5a, 0xa4, 0x7e, 0xf4, 0x7b, 0x62, 0x79, 0x7e, 0x50, 0xf6, 0xa2, 0x64, + 0x60, 0x87, 0x71, 0x98, 0xbd, 0x9a, 0x0a, 0xdb, 0x34, 0x72, 0xe3, 0x8d, 0xac, 0x2f, 0xee, 0x5c, + 0x65, 0xda, 0xc7, 0xbc, 0x6f, 0x2c, 0x00, 0x0a, 0xf0, 0xfe, 0x80, 0x92, 0x63, 0xf7, 0x86, 0xa3, + 0x67, 0x65, 0xb8, 0xe6, 0x94, 0xb0, 0x63, 0x4c, 0x1d, 0xa6, 0xa8, 0xe2, 0x2a, 0xff, 0xcd, 0x31, + 0xa0, 0xc2, 0x54, 0x53, 0xeb, 0x6b, 0x47, 0xde, 0x6d, 0xe9, 0xc7, 0x24, 0x5e, 0x80, 0x77, 0x20, + 0x36, 0x12, 0x34, 0xa8, 0x2f, 0x79, 0xaa, 0xf8, 0x55, 0x31, 0xf6, 0x41, 0x66, 0x0f, 0xb8, 0x87, + 0x67, 0xde, 0xd1, 0xd6, 0x35, 0x63, 0x4f, 0xb2, 0x77, 0x96, 0x29, 0xd0, 0xa7, 0x17, 0x32, 0x38, + 0x87, 0x07, 0xe0, 0xe2, 0x22, 0x90, 0x32, 0x7b, 0x2e, 0xb9, 0xba, 0x45, 0xdc, 0x7e, 0x28, 0xbd, + 0x87, 0x44, 0x3e, 0x74, 0x87, 0xfd, 0x75, 0x8e, 0x29, 0x4d, 0x8c, 0xa5, 0xda, 0xb6, 0x0d, 0x82, + 0xd3, 0xfb, 0xed, 0xae, 0x68, 0x4c, 0x3a, 0x8a, 0xa7, 0x33, 0x5f, 0xfb, 0xec, 0x60, 0x29, 0x88, + 0x04, 0xbc, 0x24, 0x59, 0x88, 0xe0, 0xbf, 0x8f, 0xac, 0x15, 0xba, 0xa0, 0x88, 0x94, 0x16, 0x9f, + 0x93, 0x9f, 0x34, 0x9e, 0xf2, 0xb9, 0x1a, 0x44, 0x2e, 0x10, 0x3d, 0x5c, 0x46, 0x19, 0x00, 0xc8, + 0xf2, 0x49, 0xf5, 0x63, 0x04, 0x7e, 0x67, 0x6a, 0x07, 0x84, 0x73, 0x68, 0x7d, 0x67, 0x06, 0xa4, + 0x3a, 0xbc, 0x13, 0x75, 0x49, 0x39, 0xb5, 0x2e, 0xfb, 0xab, 0x75, 0x65, 0xc9, 0x80, 0x6a, 0x40, + 0xfd, 0x40, 0xae, 0xa3, 0x30, 0x13, 0x73, 0x36, 0x7e, 0x22, 0x3f, 0xd1, 0xeb, 0x93, 0x6c, 0x97, + 0xa0, 0x1b, 0x66, 0x14, 0x8b, 0xda, 0x9c, 0xe0, 0x17, 0x6f, 0x08, 0xc7, 0xf0, 0x18, 0x9b, 0x0e, + 0x24, 0x18, 0xb8, 0x64, 0x27, 0x75, 0x46, 0x26, 0x4e, 0xbc, 0xf1, 0x92, 0x1f, 0x5c, 0x17, 0xab, + 0x7d, 0xfd, 0x86, 0x16, 0xf0, 0xb0, 0x34, 0x21, 0xf2, 0xec, 0xf5, 0x3b, 0x24, 0x3a, 0xf7, 0x42, + 0xb6, 0x2b, 0xb6, 0xa3, 0x00, 0xe6, 0x27, 0x81, 0xd8, 0x05, 0x22, 0xb8, 0xa7, 0x6c, 0xc3, 0x90, + 0xf0, 0xc6, 0xfb, 0x3b, 0x80, 0x4c, 0xfe, 0x80, 0x21, 0xbc, 0x57, 0xe0, 0xac, 0x35, 0x7b, 0x72, + 0x90, 0xfe, 0x2c, 0xfb, 0x63, 0x61, 0xd3, 0x76, 0xee, 0x47, 0x26, 0x09, 0x8a, 0x90, 0xea, 0x47, + 0x87, 0xdc, 0x04, 0xff, 0x4d, 0x8b, 0x61, 0xfb, 0x8c, 0xce, 0x48, 0x78, 0x54, 0x29, 0x63, 0x00, + 0x33, 0x8c, 0xf3, 0xb7, 0x6f, 0xd4, 0x84, 0x52, 0x9b, 0x7b, 0xa8, 0xbd, 0x9d, 0xb0, 0xc5, 0x05, + 0xdb, 0x41, 0xfd, 0x1f, 0xbc, 0xd2, 0x76, 0x99, 0x5f, 0xf5, 0xd5, 0x66, 0x28, 0xb1, 0x7d, 0x2e, + 0x1f, 0x53, 0x67, 0x86, 0xab, 0x8a, 0x04, 0x73, 0x8b, 0x0a, 0x11, 0xdd, 0x02, 0xf6, 0x96, 0xa9, + 0xcb, 0x2d, 0x83, 0x49, 0x2d, 0xb9, 0xa4, 0x5d, 0xc6, 0xd4, 0x0d, 0xba, 0xa8, 0x5a, 0xc4, 0x47, + 0x72, 0xa3, 0xd8, 0xa2, 0x6a, 0xd8, 0xc8, 0xbc, 0x0e, 0xe7, 0x8e, 0xa6, 0xf0, 0x95, 0x2d, 0x51, + 0xdc, 0x71, 0x3d, 0x56, 0x95, 0x72, 0xd0, 0x1b, 0xf4, 0xf7, 0x35, 0x0c, 0xe6, 0xd9, 0x5b, 0xb1, + 0xbd, 0x98, 0x79, 0x35, 0x09, 0xf4, 0xe8, 0xd1, 0xf7, 0x9c, 0x7a, 0xe1, 0x3b, 0x90, 0xf4, 0x82, + 0x0b, 0xe0, 0xad, 0xed, 0xeb, 0x20, 0xda, 0x79, 0xab, 0xc0, 0xc9, 0x4f, 0xa2, 0x74, 0x54, 0x2d, + 0x92, 0x29, 0xb2, 0x2e, 0x61, 0x55, 0x60, 0x4a, 0xde, 0x96, 0x51, 0xca, 0xd0, 0x04, 0xaa, 0xdb, + 0xd3, 0x74, 0x09, 0xf4, 0xa2, 0xd3, 0x7d, 0x51, 0xab, 0xed, 0xb6, 0x9e, 0x22, 0x10, 0x3a, 0x21, + 0x7b, 0x52, 0x0d, 0x31, 0xf4, 0x01, 0xbd, 0x1a, 0xe9, 0xfc, 0x9a, 0x72, 0x25, 0x90, 0xab, 0x90, + 0x96, 0xcc, 0x8d, 0x00, 0x4c, 0x0b, 0xdf, 0x84, 0x26, 0x0b, 0x22, 0x22, 0xb2, 0xb5, 0x16, 0xc3, + 0x50, 0x61, 0x39, 0xbb, 0xdb, 0x7c, 0x5b, 0x36, 0x37, 0xad, 0x52, 0xa7, 0x56, 0xb3, 0xb4, 0xf7, + 0xc0, 0x8d, 0x42, 0x56, 0x9e, 0x1a, 0xf8, 0xee, 0xcd, 0x55, 0x5d, 0xa7, 0x56, 0x6d, 0x7a, 0x77, + 0xe7, 0xb5, 0xbf, 0xb4, 0x5d, 0xe0, 0x9e, 0x10, 0x0c, 0x31, 0x8d, 0xa6, 0x67, 0x1f, 0x12, 0x3b, + 0x9a, 0x3d, 0xec, 0x2d, 0x4d, 0x50, 0x97, 0x4e, 0x62, 0x02, 0x34, 0xf6, 0x21, 0x3c, 0x6a, 0xf5, + 0x14, 0x6d, 0xe1, 0x21, 0xe9, 0xa2, 0xd4, 0xbb, 0x9c, 0x4f, 0xbb, 0x97, 0x18, 0x73, 0xdd, 0x18, + 0x1b, 0x02, 0x32, 0x9e, 0xe8, 0x32, 0xac, 0x04, 0x09, 0x41, 0x82, 0x24, 0x97, 0xeb, 0x9f, 0x08, + 0x5e, 0x8d, 0x18, 0xaf, 0xa7, 0xee, 0xcf, 0x4c, 0xa6, 0x4d, 0xa4, 0x83, 0x69, 0xb7, 0xc8, 0xf0, + 0xc5, 0x47, 0x2d, 0x3e, 0x95, 0x9f, 0x07, 0x4a, 0x98, 0x81, 0xcd, 0x53, 0x09, 0x15, 0xf8, 0xdb, + 0x67, 0x9a, 0x5d, 0x21, 0x23, 0xf0, 0x78, 0x86, 0x63, 0x95, 0xc3, 0x11, 0x48, 0x01, 0xb6, 0x60, + 0xa4, 0x62, 0x69, 0x36, 0x56, 0xe8, 0xe4, 0x2c, 0x34, 0x18, 0xe1, 0x0e, 0x84, 0xb8, 0x05, 0xba, + 0x5a, 0xfc, 0xb7, 0x5a, 0xb7, 0x87, 0xc9, 0x74, 0x15, 0x18, 0xc9, 0xa9, 0x0f, 0xf0, 0x89, 0xc4, + 0xeb, 0xa7, 0x24, 0xc6, 0xcf, 0x26, 0x8e, 0x40, 0x61, 0xf8, 0x9c, 0x32, 0x2e, 0x0b, 0x37, 0x2b, + 0x6d, 0x6b, 0x6c, 0x23, 0x34, 0x83, 0x36, 0x16, 0x01, 0xfc, 0x1d, 0x49, 0x58, 0x7b, 0x22, 0xce, + 0x9f, 0x61, 0x74, 0xf4, 0xf6, 0x7b, 0x94, 0x40, 0x13, 0xe5, 0xb5, 0x27, 0xe9, 0xaf, 0x3f, 0x39, + 0x7e, 0x86, 0x8f, 0xfb, 0x60, 0xac, 0x1a, 0x41, 0x25, 0x94, 0xbb, 0x73, 0x3e, 0x5e, 0x76, 0x10, + 0x13, 0x65, 0x42, 0x84, 0xda, 0x29, 0x1e, 0x81, 0xb0, 0xa1, 0xb9, 0x51, 0x9b, 0xcd, 0xc2, 0x7c, + 0x83, 0xf3, 0x0c, 0xf0, 0x0b, 0x04, 0x01, 0x29, 0x52, 0xf4, 0xf3, 0xf0, 0x7f, 0x08, 0x6d, 0x0b, + 0xc5, 0xa5, 0xd4, 0x45, 0x55, 0x3c, 0x1c, 0x8c, 0x08, 0x30, 0xe1, 0xf1, 0x3c, 0xc1, 0x2d, 0xe2, + 0x19, 0x10, 0x14, 0xba, 0x51, 0x0c, 0x78, 0x89, 0x3b, 0xc9, 0xdd, 0x45, 0xa4, 0x0a, 0xd2, 0x40, + 0x14, 0x78, 0x8e, 0x15, 0x87, 0xba, 0xbb, 0x0b, 0x88, 0xcc, 0xac, 0xcb, 0xba, 0x4b, 0xf5, 0x80, + 0xdc, 0xd5, 0x83, 0xce, 0x8e, 0x6f, 0xd3, 0x4e, 0x81, 0xb9, 0x4a, 0x1b, 0x59, 0x0e, 0xb3, 0xcb, + 0x23, 0xab, 0x15, 0xae, 0xb7, 0x8f, 0x73, 0x19, 0x37, 0x0d, 0x66, 0x59, 0x2e, 0xad, 0x78, 0xf4, + 0x3e, 0x8a, 0xf4, 0x8b, 0x62, 0xf3, 0xf9, 0x9e, 0xc3, 0x41, 0x68, 0x1f, 0xbc, 0xf3, 0xe3, 0xf1, + 0xcb, 0xb9, 0x09, 0x8b, 0x50, 0x58, 0xcd, 0x74, 0xc1, 0x1b, 0xf7, 0x49, 0xce, 0x75, 0xb4, 0x15, + 0xbb, 0xa4, 0xbf, 0x95, 0x1d, 0xf6, 0x26, 0x3c, 0xc7, 0x35, 0xe2, 0xad, 0xc1, 0xb8, 0xef, 0x65, + 0x32, 0xd7, 0x83, 0x08, 0x85, 0xbd, 0xa5, 0x82, 0xb1, 0xe5, 0x2c, 0x62, 0xdb, 0x09, 0xc9, 0xaf, + 0xc3, 0xdb, 0x45, 0x38, 0x83, 0x14, 0x12, 0xda, 0x8a, 0x30, 0xb1, 0x3a, 0x75, 0xef, 0xfb, 0x95, + 0xee, 0xe7, 0x77, 0x2d, 0xcb, 0x22, 0x8d, 0x65, 0x12, 0xb5, 0x28, 0x81, 0xf6, 0x19, 0x1b, 0x0b, + 0xee, 0x11, 0x07, 0x84, 0xf5, 0x79, 0x82, 0xe8, 0x32, 0xdf, 0x0b, 0xfa, 0x8e, 0xba, 0x81, 0x14, + 0x6a, 0x8e, 0x57, 0x68, 0x86, 0x1e, 0x90, 0xdb, 0x99, 0x44, 0x60, 0x3b, 0xda, 0xad, 0x84, 0x9f, + 0x9d, 0x2e, 0xff, 0x87, 0x5d, 0x1b, 0x81, 0x65, 0x02, 0x65, 0xce, 0x96, 0x23, 0x87, 0x7f, 0x73, + 0x02, 0xf2, 0xc5, 0x94, 0xa6, 0x77, 0x98, 0x2e, 0x0c, 0x2a, 0xd6, 0x07, 0x68, 0x22, 0x4f, 0xe7, + 0x2a, 0x10, 0xd6, 0x8f, 0x5f, 0xfa, 0xc2, 0x6e, 0xba, 0x6f, 0x40, 0xef, 0x59, 0x56, 0xd9, 0x5f, + 0x2b, 0x3a, 0x80, 0x86, 0x55, 0x6a, 0xd0, 0xff, 0x84, 0xa9, 0x29, 0x7c, 0xcb, 0x96, 0x1c, 0x78, + 0x3c, 0x81, 0x58, 0xae, 0xd7, 0x22, 0xf4, 0xe0, 0x22, 0x31, 0x65, 0xfa, 0x45, 0x1d, 0xe5, 0x59, + 0xac, 0x63, 0x44, 0xaf, 0x77, 0x2d, 0x52, 0x29, 0x5c, 0x09, 0x5c, 0xbe, 0x78, 0x78, 0xe7, 0x59, + 0x8a, 0x67, 0x73, 0x71, 0x13, 0xe6, 0x83, 0x5c, 0xa3, 0xd0, 0x42, 0x80, 0x68, 0x3f, 0xbf, 0xc4, + 0x78, 0x34, 0x96, 0x33, 0x97, 0xc0, 0xa4, 0x33, 0x44, 0x8a, 0x3c, 0x72, 0x95, 0xb2, 0x58, 0x3a, + 0x6f, 0x82, 0x95, 0x8d, 0xae, 0x98, 0x6f, 0xe2, 0x99, 0x8a, 0xe0, 0xda, 0x15, 0x8e, 0x99, 0x19, + 0x82, 0xb2, 0x79, 0x64, 0xf4, 0xb4, 0xf7, 0x99, 0x3f, 0x14, 0x0f, 0x1d, 0xc8, 0x8e, 0xbd, 0xf6, + 0x3e, 0x8e, 0x48, 0xf0, 0xed, 0x77, 0xdc, 0xc7, 0xad, 0xa6, 0xe3, 0xd6, 0xab, 0xd8, 0x6b, 0x38, + 0x59, 0x5e, 0x60, 0x57, 0x32, 0x66, 0xbd, 0xb7, 0x39, 0xc8, 0x53, 0x74, 0x87, 0xc5, 0xf3, 0x22, + 0xea, 0x65, 0xba, 0x48, 0xed, 0x11, 0x39, 0x8f, 0x09, 0x61, 0x68, 0xab, 0x92, 0xde, 0x64, 0x07, + 0x6f, 0xd0, 0xdb, 0x37, 0xa4, 0x4f, 0x87, 0xaf, 0xd3, 0x3b, 0xe1, 0x0e, 0xd8, 0x21, 0xbf, 0x41, + 0x1f, 0x41, 0x89, 0xbb, 0x21, 0xbb, 0xcb, 0x9d, 0x77, 0x18, 0x9d, 0x5e, 0x5d, 0x0a, 0xe6, 0xa4, + 0xc7, 0x70, 0x60, 0x7e, 0x77, 0x0f, 0x38, 0x34, 0xbf, 0xcf, 0x6e, 0x4d, 0x25, 0xe4, 0xb0, 0x3e, + 0x01, 0x04, 0x6e, 0x9b, 0x2f, 0xbb, 0x71, 0xa2, 0x42, 0xad, 0xd4, 0xbb, 0x12, 0x6d, 0x22, 0x58, + 0x04, 0x2c, 0x43, 0x7d, 0x59, 0x02, 0x61, 0x93, 0xbc, 0x13, 0x95, 0xea, 0x1c, 0x4a, 0x69, 0xb0, + 0x25, 0xbc, 0xb0, 0xbb, 0xb5, 0x2d, 0x5c, 0xe7, 0x59, 0x8c, 0x23, 0x18, 0xbd, 0x22, 0x30, 0xec, + 0x05, 0x2c, 0xd6, 0xc2, 0x9b, 0x41, 0x91, 0x81, 0xfb, 0xf0, 0xdd, 0x17, 0x31, 0x5c, 0x63, 0xb3, + 0x76, 0x39, 0x63, 0xa5, 0xfd, 0x3e, 0x21, 0x72, 0x58, 0xbc, 0xd5, 0x38, 0xf4, 0x47, 0x27, 0xa4, + 0xb9, 0xfb, 0xe4, 0xb2, 0xed, 0x10, 0xbe, 0x25, 0x48, 0x0b, 0x23, 0x68, 0xce, 0x34, 0x88, 0x30, + 0xc7, 0xa4, 0xbc, 0x41, 0x49, 0x77, 0xcc, 0x32, 0x1c, 0xe7, 0x91, 0xf2, 0x38, 0x41, 0xb0, 0xb4, + 0xa0, 0xb3, 0x1d, 0x20, 0x4c, 0x87, 0x97, 0x38, 0x32, 0xdc, 0xd4, 0xd7, 0xf8, 0xc7, 0x08, 0x40, + 0xb6, 0x3a, 0x60, 0x69, 0xf9, 0x0d, 0xfb, 0x38, 0x0c, 0xb6, 0x30, 0xdc, 0x40, 0x05, 0x7a, 0xa5, + 0x88, 0x68, 0x25, 0x64, 0x20, 0x82, 0xd0, 0xa2, 0x5e, 0x78, 0xb0, 0x58, 0x8f, 0xe2, 0x6d, 0x4e, + 0xaa, 0xf8, 0x8f, 0xf5, 0xbb, 0x28, 0x2e, 0x47, 0x53, 0x55, 0x94, 0x90, 0x98, 0x87, 0x8d, 0xfa, + 0x9c, 0x62, 0x17, 0xb8, 0x43, 0x3f, 0xe3, 0x6d, 0xe0, 0xf8, 0xc2, 0xcb, 0x5c, 0xe3, 0xd1, 0x93, + 0xfa, 0xf7, 0x90, 0x90, 0x11, 0x64, 0x4f, 0xdc, 0xa9, 0x56, 0xc8, 0x04, 0x92, 0xf2, 0x24, 0xa8, + 0xec, 0xee, 0xbb, 0x17, 0xa7, 0x2e, 0x9f, 0xd5, 0xfd, 0x0a, 0x0e, 0xca, 0x90, 0xeb, 0x62, 0x89, + 0xfc, 0xd4, 0x27, 0x2f, 0x6c, 0x2c, 0x29, 0x34, 0xc0, 0xcd, 0x97, 0x27, 0x77, 0x2a, 0x14, 0x4a, + 0xa7, 0xaf, 0x97, 0x40, 0xcd, 0xd2, 0x81, 0xa3, 0x27, 0x55, 0xc4, 0x98, 0x12, 0xcb, 0x2a, 0x92, + 0x20, 0x74, 0x50, 0xe7, 0x4a, 0x1f, 0xf5, 0x94, 0xb3, 0x1f, 0xaa, 0x22, 0x8c, 0x5f, 0x9c, 0xb3, + 0x7a, 0xc5, 0x87, 0xf6, 0x61, 0x4d, 0x10, 0x25, 0x62, 0x8c, 0x05, 0xd2, 0xac, 0xf6, 0x8b, 0xaa, + 0xaf, 0x45, 0x31, 0x12, 0xbe, 0x8d, 0x09, 0x6a, 0x0b, 0xc6, 0x91, 0x57, 0xee, 0x09, 0x7a, 0x57, + 0xdd, 0xa7, 0x53, 0xf5, 0x00, 0x31, 0x7c, 0xe8, 0x49, 0xbf, 0xc5, 0x85, 0x4d, 0xd6, 0xd4, 0xb9, + 0xc9, 0x0c, 0x96, 0x53, 0x4a, 0x33, 0x72, 0xf8, 0x22, 0xdf, 0x3b, 0x3e, 0x11, 0x1a, 0x3f, 0x83, + 0xda, 0x6c, 0x7a, 0xb6, 0xf6, 0x4e, 0x12, 0xdb, 0xad, 0x25, 0xf5, 0x46, 0xf4, 0x22, 0x3b, 0x74, + 0xd7, 0x9b, 0x24, 0x45, 0x95, 0x6f, 0xc4, 0x3c, 0x9a, 0x31, 0x43, 0xcc, 0x43, 0x99, 0xae, 0xf3, + 0x1c, 0xbe, 0x2d, 0x86, 0x2a, 0xda, 0xf7, 0x20, 0xec, 0xd4, 0x02, 0x9e, 0x91, 0xf1, 0x21, 0xca, + 0x3d, 0x15, 0x0b, 0xea, 0x7a, 0xb0, 0x6e, 0x55, 0xcf, 0xf1, 0xe0, 0x73, 0x39, 0x62, 0xbf, 0xf0, + 0xc8, 0x9f, 0x33, 0x66, 0xc5, 0xd8, 0xb8, 0x9f, 0xb6, 0x5e, 0xc5, 0x60, 0xe9, 0xad, 0xd2, 0xa5, + 0xd8, 0xec, 0x94, 0x4b, 0x9a, 0x46, 0xf0, 0x6b, 0x5a, 0xf9, 0x43, 0xce, 0x05, 0xd8, 0xae, 0x99, + 0xaa, 0x7e, 0xcf, 0xdd, 0x53, 0xd6, 0x8f, 0xe9, 0xb0, 0xa4, 0xeb, 0xcb, 0xac, 0xb6, 0x9f, 0x24, + 0x14, 0x4a, 0xd1, 0x2c, 0xc9, 0xf6, 0x19, 0x26, 0xa0, 0xad, 0x84, 0x71, 0x11, 0x2f, 0x69, 0x32, + 0xe0, 0xc9, 0x29, 0xa8, 0xca, 0x06, 0x4d, 0x4e, 0xcf, 0x0b, 0xff, 0x99, 0x22, 0x4f, 0x4e, 0x16, + 0x08, 0x64, 0x1e, 0x50, 0xe5, 0x53, 0x75, 0x5f, 0x19, 0x54, 0xfe, 0x8c, 0xd2, 0x3e, 0x4b, 0x4e, + 0x67, 0x4a, 0x7d, 0x12, 0x96, 0xa2, 0x2e, 0x3b, 0x79, 0x96, 0xcc, 0xb3, 0x72, 0xc6, 0xce, 0xda, + 0xc5, 0x75, 0xf1, 0xd4, 0xea, 0xaa, 0xc7, 0x3c, 0x2d, 0xd6, 0x35, 0x2b, 0x69, 0x06, 0xd4, 0xdc, + 0x9a, 0x37, 0xde, 0x60, 0xb0, 0x4a, 0xd9, 0x8a, 0xe0, 0xf9, 0xeb, 0xcf, 0x81, 0xa6, 0xa4, 0x4f, + 0x20, 0x1b, 0x89, 0x35, 0xbc, 0xda, 0x87, 0x8a, 0x56, 0x5c, 0x7e, 0x34, 0xd5, 0x3d, 0x56, 0xec, + 0x29, 0xe5, 0x99, 0xde, 0x27, 0xd6, 0x1d, 0xeb, 0xa9, 0x5d, 0x23, 0xc4, 0x66, 0x91, 0xd1, 0xd0, + 0x16, 0xd5, 0xc5, 0x33, 0x32, 0xc7, 0x3b, 0x78, 0xa6, 0x5d, 0x8d, 0x67, 0x9e, 0xe2, 0x03, 0x11, + 0xe9, 0x82, 0x49, 0x7e, 0x9e, 0x00, 0x29, 0xbf, 0x90, 0x51, 0x33, 0xd5, 0x8b, 0xb0, 0x7e, 0xf0, + 0xfe, 0x01, 0x79, 0xa0, 0xa3, 0xbe, 0x33, 0x9f, 0x1a, 0x1e, 0xc2, 0x3d, 0xc8, 0x73, 0x23, 0xfe, + 0x17, 0xcb, 0xeb, 0xae, 0x39, 0xe8, 0xd7, 0x40, 0x10, 0x67, 0x1a, 0x5f, 0x23, 0x6e, 0x5f, 0xb0, + 0x31, 0x2f, 0x5b, 0xb2, 0xb7, 0xf1, 0xc1, 0x33, 0xdf, 0xfd, 0x88, 0xec, 0xe3, 0x51, 0x29, 0x9f, + 0xf4, 0xd2, 0xd0, 0x63, 0x36, 0xd1, 0x55, 0x66, 0xa3, 0xd8, 0xe5, 0x6c, 0xd9, 0x85, 0x92, 0x8e, + 0xa8, 0xfc, 0x59, 0x1b, 0x4f, 0x6a, 0xb5, 0x62, 0x59, 0xa9, 0x33, 0x07, 0x8a, 0x3e, 0xc9, 0xa7, + 0x00, 0x9e, 0x70, 0xe0, 0xe7, 0x12, 0x58, 0x6b, 0x0e, 0xdd, 0x8c, 0x1e, 0x3c, 0x53, 0x7c, 0xd7, + 0x26, 0x37, 0x37, 0x69, 0xa2, 0x47, 0xaf, 0xad, 0x12, 0x69, 0xe4, 0xbd, 0xee, 0x25, 0xc1, 0xc0, + 0x84, 0x8c, 0x21, 0x13, 0x11, 0xa6, 0x02, 0x3b, 0x45, 0x77, 0x26, 0xad, 0x17, 0xef, 0xbb, 0xe8, + 0xb6, 0xba, 0x1d, 0xb3, 0x41, 0x48, 0xc4, 0xc0, 0x77, 0x08, 0x27, 0xe9, 0xbb, 0x8a, 0xe0, 0x82, + 0xae, 0xad, 0xc3, 0x15, 0x03, 0x99, 0x53, 0x48, 0xac, 0x8f, 0x99, 0x4d, 0x8f, 0xc0, 0xb2, 0xa4, + 0xe6, 0x26, 0xe4, 0x7c, 0x6b, 0x89, 0x8a, 0x47, 0x19, 0x5c, 0x8e, 0x4f, 0xe3, 0x08, 0x1a, 0x66, + 0xaa, 0x49, 0x79, 0x12, 0x19, 0x42, 0xf1, 0xdb, 0xb1, 0xa7, 0xc2, 0x83, 0xd2, 0x1d, 0x6f, 0x8d, + 0x00, 0x7b, 0x1f, 0x9c, 0xb4, 0x0b, 0x92, 0xfa, 0x6d, 0xb5, 0x84, 0x65, 0x17, 0xef, 0x24, 0x96, + 0x39, 0x9f, 0x8e, 0x4b, 0xf4, 0x2b, 0x70, 0xe8, 0x73, 0xa6, 0x76, 0x69, 0x1a, 0xed, 0xc8, 0xb9, + 0x16, 0x21, 0xb6, 0x27, 0x55, 0x4a, 0xa7, 0x48, 0xe1, 0xf4, 0xe3, 0x5d, 0x90, 0x44, 0x7a, 0x51, + 0x67, 0xa1, 0x3b, 0x08, 0x5c, 0xaa, 0x76, 0xe3, 0x74, 0x50, 0xc9, 0xd0, 0x8b, 0x22, 0x9d, 0x9f, + 0xf6, 0x33, 0x4c, 0x99, 0x75, 0xc2, 0x2c, 0x58, 0x09, 0x93, 0xec, 0xa3, 0xce, 0x02, 0x93, 0x35, + 0x31, 0x13, 0x4f, 0x2b, 0x39, 0x55, 0x91, 0x7a, 0xfd, 0x58, 0x2f, 0x09, 0x63, 0xe0, 0x96, 0x29, + 0xc5, 0x1d, 0x80, 0x25, 0xec, 0xc6, 0x78, 0x87, 0x70, 0x76, 0x95, 0x95, 0x8d, 0x35, 0x44, 0xb5, + 0x90, 0xa2, 0x5a, 0xfd, 0x89, 0x4e, 0xaf, 0x8d, 0x03, 0x21, 0xd0, 0x5f, 0x35, 0x68, 0x02, 0x05, + 0x9a, 0x93, 0xf7, 0x94, 0x2e, 0xdd, 0x8d, 0xde, 0x47, 0x6b, 0x59, 0xe6, 0x1a, 0xb8, 0xdf, 0x3b, + 0x35, 0x08, 0x4f, 0x95, 0xf3, 0xa4, 0xad, 0xf2, 0x7d, 0xe2, 0x79, 0xda, 0xce, 0x73, 0x33, 0x60, + 0x5c, 0x8b, 0xd3, 0xcd, 0xef, 0xef, 0xa4, 0xf4, 0x97, 0xff, 0xa3, 0x2b, 0x47, 0x2a, 0x55, 0xbf, + 0x71, 0x2e, 0x53, 0x18, 0x02, 0x0d, 0x40, 0x6a, 0xff, 0x75, 0x10, 0x07, 0x4c, 0x8b, 0x5b, 0xd5, + 0x3a, 0xf6, 0x2f, 0x6a, 0xee, 0x36, 0x5c, 0xab, 0x0e, 0x33, 0x14, 0xc4, 0xda, 0xd4, 0xcf, 0x62, + 0x45, 0x60, 0x93, 0xb4, 0xdf, 0xf2, 0x8a, 0x82, 0xfe, 0xa2, 0x86, 0xaa, 0x14, 0xcc, 0x2b, 0xc2, + 0x38, 0x3e, 0xea, 0x66, 0x54, 0xef, 0xb9, 0xd0, 0xc8, 0xa9, 0xe8, 0x6e, 0x7b, 0x71, 0x62, 0x56, + 0x34, 0x29, 0x20, 0x27, 0xf3, 0xd7, 0x43, 0x9c, 0x1e, 0x47, 0x6c, 0x4f, 0x4d, 0x73, 0x61, 0x11, + 0xa5, 0x4d, 0x12, 0x3b, 0xeb, 0x9c, 0x23, 0x6b, 0x6d, 0x55, 0x1a, 0x57, 0x68, 0xea, 0x04, 0xdd, + 0x0f, 0x20, 0xc2, 0xa4, 0x9d, 0x2c, 0x44, 0x27, 0x40, 0x82, 0xf3, 0x0f, 0x5a, 0x33, 0x5d, 0xdc, + 0xe5, 0x8e, 0xa2, 0x7f, 0x2d, 0xff, 0xd1, 0x44, 0xfe, 0x09, 0x76, 0x17, 0x9d, 0xb8, 0xb9, 0xcb, + 0x1d, 0x23, 0x8f, 0xd1, 0x0b, 0x95, 0x8c, 0xaa, 0x99, 0x35, 0x03, 0xfd, 0xfe, 0xc7, 0x2d, 0xb8, + 0x91, 0x38, 0x33, 0x77, 0x6b, 0xb3, 0x70, 0x78, 0x57, 0xdc, 0x1b, 0x48, 0x9a, 0x8f, 0xdd, 0x72, + 0x9d, 0x31, 0x7b, 0x4c, 0x7c, 0xf5, 0x84, 0x56, 0x92, 0x4e, 0x88, 0x81, 0xa5, 0xee, 0x6c, 0x94, + 0x09, 0x18, 0x50, 0x1c, 0xfa, 0xa4, 0x21, 0x15, 0x7b, 0xbd, 0x83, 0x97, 0x73, 0xe9, 0xba, 0x89, + 0xf7, 0xf6, 0xf3, 0x14, 0x17, 0xc3, 0x48, 0xdb, 0x35, 0x14, 0xa1, 0xbd, 0xc9, 0x35, 0x99, 0x30, + 0x68, 0x67, 0x12, 0x4f, 0xca, 0xe6, 0x0f, 0x9e, 0xb8, 0x03, 0xce, 0x6b, 0x2d, 0x7f, 0x79, 0x9f, + 0x16, 0xb0, 0x11, 0x36, 0xaf, 0xb5, 0x5f, 0x01, 0xe6, 0xc0, 0xd8, 0xc9, 0x72, 0xcf, 0xbe, 0x5c, + 0x52, 0xf5, 0x6f, 0x3b, 0x80, 0x2e, 0xac, 0xca, 0xbf, 0x99, 0x62, 0xa3, 0xa5, 0x30, 0xaf, 0x84, + 0x5b, 0xa6, 0x9f, 0x1f, 0x26, 0x65, 0x51, 0x55, 0x4e, 0xee, 0x3b, 0xe3, 0xcd, 0x82, 0x51, 0x1b, + 0x6d, 0xda, 0x9d, 0xce, 0x54, 0xa9, 0xf8, 0x38, 0x23, 0xef, 0x7b, 0xf8, 0x45, 0x3d, 0xcd, 0xf5, + 0xb7, 0x4b, 0x49, 0x2b, 0x88, 0x9d, 0xc7, 0x2b, 0x1a, 0xe7, 0xa8, 0xab, 0x40, 0xda, 0x1e, 0x8b, + 0xbf, 0x11, 0x7c, 0xff, 0x19, 0x86, 0x58, 0x46, 0x3a, 0x5f, 0x5d, 0x71, 0x2d, 0x83, 0x51, 0x6e, + 0xc2, 0x17, 0xb4, 0xe3, 0xcd, 0x77, 0x37, 0x0d, 0x1b, 0x12, 0x75, 0xd9, 0x49, 0x66, 0xfa, 0xd3, + 0x8f, 0x1a, 0xee, 0xd7, 0x03, 0x3d, 0x60, 0x36, 0x8c, 0xbe, 0x9d, 0x30, 0x99, 0xf5, 0x4d, 0x4c, + 0x4f, 0xaf, 0xd8, 0x6f, 0xff, 0xbe, 0x48, 0xc7, 0xba, 0xcc, 0x9d, 0x62, 0x10, 0x6e, 0x40, 0xdb, + 0xe4, 0xf2, 0xed, 0xc0, 0x67, 0x30, 0x2e, 0x4e, 0xb1, 0xf5, 0x3e, 0x9f, 0x7b, 0x3e, 0x8f, 0x82, + 0x41, 0x2f, 0xb2, 0xca, 0x61, 0x33, 0xdf, 0xd5, 0xe8, 0xce, 0x84, 0x49, 0x3b, 0x04, 0x64, 0x2e, + 0x35, 0x0a, 0x5c, 0x34, 0x43, 0x74, 0x19, 0x75, 0x02, 0x8e, 0x5c, 0x70, 0xa2, 0xc9, 0x74, 0x8b, + 0xda, 0x90, 0x09, 0xd8, 0x45, 0x92, 0x52, 0x88, 0x48, 0xf3, 0x1a, 0x8f, 0xe0, 0x36, 0x44, 0x18, + 0x20, 0x25, 0x9e, 0x6a, 0xfb, 0xde, 0x4b, 0x43, 0x99, 0x30, 0x59, 0x2b, 0xac, 0xcf, 0x24, 0x21, + 0xc6, 0x30, 0x9e, 0x63, 0xc9, 0xf6, 0x20, 0x41, 0xdb, 0x5d, 0xc1, 0xb8, 0x43, 0x81, 0x9d, 0x14, + 0xe3, 0xae, 0x6b, 0xfa, 0xc0, 0xaa, 0xcc, 0x56, 0x98, 0x1d, 0x79, 0xd9, 0xd8, 0x8e, 0xc2, 0x00, + 0xc2, 0x1a, 0xb7, 0x0d, 0x40, 0x10, 0xef, 0x78, 0x03, 0x99, 0xa1, 0xb2, 0xc3, 0xef, 0xeb, 0x29, + 0xab, 0x9f, 0x07, 0x07, 0x84, 0x05, 0x60, 0xc9, 0x2b, 0x06, 0xa4, 0x96, 0xd1, 0xb1, 0xb4, 0x7e, + 0x81, 0x15, 0xa0, 0x85, 0x4c, 0xf8, 0xce, 0xf0, 0x91, 0xb8, 0x7f, 0x43, 0xd2, 0x1f, 0xed, 0xb1, + 0xda, 0x17, 0xba, 0x64, 0xa7, 0x63, 0x04, 0xa0, 0xdd, 0x9c, 0x6d, 0x17, 0x1a, 0x27, 0xd3, 0x07, + 0x96, 0x27, 0x28, 0xe9, 0xdc, 0xab, 0x79, 0x7e, 0x15, 0x8a, 0x88, 0xe9, 0x1c, 0x77, 0x99, 0x30, + 0x71, 0x3a, 0xab, 0x15, 0xdf, 0x71, 0xbf, 0x7a, 0xf7, 0xee, 0xc6, 0xe9, 0xde, 0x39, 0xa3, 0xc8, + 0x45, 0x17, 0x9b, 0xcf, 0x15, 0x50, 0x7b, 0x3c, 0x5a, 0xa8, 0xf9, 0xb1, 0xc1, 0xf9, 0xcf, 0x77, + 0x71, 0x56, 0xb8, 0x7f, 0x53, 0xa3, 0x84, 0x82, 0xea, 0xd0, 0x3f, 0xd8, 0x8b, 0x84, 0x6a, 0xbb, + 0xad, 0xb9, 0x88, 0x41, 0x72, 0x4c, 0x27, 0x39, 0x7a, 0xa8, 0xcc, 0x0a, 0x8f, 0x34, 0xda, 0x62, + 0xea, 0x5a, 0xcd, 0x99, 0xaa, 0x7d, 0x5a, 0x51, 0xa8, 0xbd, 0x1c, 0xba, 0x0f, 0x98, 0x6a, 0xb8, + 0xdd, 0x8f, 0x6f, 0x38, 0x52, 0x81, 0xc5, 0x0c, 0x0c, 0xe1, 0x50, 0xfe, 0xdb, 0x17, 0xfc, 0x18, + 0x95, 0xec, 0x5b, 0x79, 0x49, 0xf7, 0x86, 0xbd, 0x29, 0x0c, 0x78, 0x9f, 0x9c, 0x46, 0x6d, 0xcc, + 0xab, 0x2f, 0xbe, 0xd4, 0x9e, 0x30, 0xe1, 0xf0, 0xa0, 0x0b, 0x2b, 0x67, 0x26, 0xdf, 0x46, 0x91, + 0x7f, 0x8c, 0x9c, 0x7c, 0xd4, 0x2f, 0x8b, 0x82, 0x13, 0xb8, 0x8d, 0x17, 0x12, 0x49, 0x33, 0x58, + 0x7b, 0x12, 0x1e, 0xe8, 0x55, 0x1a, 0xf8, 0xdb, 0x1f, 0x26, 0x8a, 0x9b, 0x01, 0x06, 0x79, 0xe6, + 0x0f, 0xbd, 0xdf, 0x11, 0x40, 0x39, 0x40, 0xde, 0xe4, 0x1d, 0xbc, 0xce, 0xf8, 0x87, 0xda, 0xdc, + 0x58, 0xab, 0xdc, 0xe2, 0xff, 0x9c, 0xc7, 0x26, 0xed, 0xf4, 0x3e, 0x18, 0xe5, 0x8a, 0xaa, 0x2e, + 0x20, 0x6c, 0x28, 0xca, 0x68, 0xdc, 0x78, 0x2f, 0xbe, 0x80, 0xac, 0xa4, 0xa5, 0xc9, 0x75, 0xff, + 0x1a, 0x3d, 0xe3, 0xd7, 0x4e, 0x30, 0xde, 0x9b, 0x47, 0x59, 0x63, 0x1a, 0xfc, 0xc0, 0x68, 0x7a, + 0xec, 0x64, 0x0b, 0xe9, 0x3c, 0x72, 0xfa, 0x8e, 0xf2, 0x6a, 0x41, 0xdc, 0x61, 0x0d, 0x71, 0x57, + 0x01, 0x60, 0x27, 0xe0, 0x30, 0x94, 0xf6, 0x8e, 0x34, 0x8f, 0x66, 0x6b, 0x43, 0x66, 0xd4, 0xe2, + 0x09, 0x08, 0x39, 0x27, 0xc0, 0xbe, 0x9a, 0x5b, 0x1c, 0xab, 0x03, 0xbf, 0x95, 0xfd, 0xcd, 0xa4, + 0x1c, 0xee, 0x7d, 0x5e, 0xa3, 0x56, 0xb3, 0x37, 0x7e, 0x7f, 0x96, 0x9c, 0x70, 0xa2, 0x1e, 0x71, + 0xc9, 0xdd, 0xba, 0x63, 0xeb, 0xcd, 0x1f, 0x67, 0x99, 0x4a, 0xa8, 0x22, 0x12, 0x04, 0x19, 0x48, + 0x9f, 0x1f, 0x6f, 0x2e, 0x46, 0x4a, 0x43, 0x65, 0x67, 0x9b, 0xa4, 0x68, 0x0f, 0x4e, 0x4e, 0x8e, + 0xd6, 0xae, 0xe5, 0x56, 0x89, 0x1e, 0x82, 0xfa, 0x93, 0x82, 0x15, 0x93, 0x0f, 0x6f, 0xdf, 0x77, + 0xbd, 0x9b, 0x83, 0x73, 0x4e, 0x08, 0xa2, 0x54, 0x13, 0xf8, 0xee, 0xa6, 0x36, 0x5a, 0xbd, 0xef, + 0xca, 0x05, 0xd9, 0x89, 0x9f, 0x4d, 0xaf, 0x41, 0xc3, 0xba, 0x0c, 0xe4, 0x4f, 0x63, 0xf7, 0x25, + 0x43, 0x64, 0xd2, 0xbe, 0xae, 0xc1, 0x73, 0x28, 0x4b, 0xf7, 0xec, 0x92, 0xae, 0xc7, 0x58, 0xac, + 0x97, 0xd6, 0xce, 0xf3, 0xfc, 0xd7, 0xd6, 0xc1, 0xdd, 0x2b, 0x34, 0x2e, 0x6f, 0x3e, 0xb6, 0x47, + 0x42, 0x3b, 0x04, 0x05, 0x57, 0x90, 0x01, 0x9d, 0xe7, 0xcb, 0x2f, 0xd3, 0x97, 0x03, 0xbd, 0x63, + 0xaa, 0x9e, 0xab, 0xf8, 0xad, 0x63, 0xe5, 0x2b, 0xb9, 0x25, 0xbe, 0x26, 0x12, 0x99, 0x45, 0x86, + 0xf5, 0x3d, 0xde, 0x52, 0xe7, 0x6e, 0x48, 0x56, 0xda, 0x8a, 0x62, 0xcc, 0xe4, 0x9d, 0x2e, 0x14, + 0xab, 0xbf, 0xe0, 0x40, 0x4f, 0x6e, 0x00, 0xc6, 0xdf, 0x98, 0xf1, 0x56, 0x54, 0x16, 0x47, 0x27, + 0x0e, 0xdc, 0x6c, 0x37, 0x68, 0xf2, 0x2d, 0x08, 0x3a, 0xc2, 0xdb, 0xc7, 0x8d, 0xcc, 0x4b, 0xb5, + 0xad, 0x21, 0xbb, 0xa1, 0x8d, 0x83, 0xcc, 0xd4, 0x6d, 0x08, 0xf2, 0x8b, 0x7f, 0xe8, 0xf0, 0x39, + 0xee, 0xc2, 0xf4, 0x67, 0x4a, 0x7a, 0x61, 0x71, 0xae, 0xc2, 0x93, 0x66, 0xb4, 0x10, 0x4f, 0x0c, + 0xb9, 0xa2, 0x62, 0x1c, 0x4f, 0xa7, 0x6c, 0x7c, 0xb0, 0xa6, 0x37, 0x45, 0xe3, 0xaa, 0x25, 0xaf, + 0xa7, 0xd6, 0x60, 0x9a, 0x64, 0xde, 0x54, 0x0a, 0x4a, 0x73, 0x76, 0x92, 0xc0, 0x01, 0x12, 0x57, + 0xe2, 0x22, 0x55, 0x7e, 0xb3, 0x84, 0x6b, 0x7e, 0x0c, 0x73, 0xd3, 0x7b, 0x4a, 0x27, 0xf1, 0xd3, + 0xb6, 0x7b, 0x96, 0xe1, 0xa8, 0xf9, 0x86, 0xee, 0xf1, 0xca, 0xcf, 0x3a, 0x3c, 0x44, 0x4f, 0xa1, + 0x6d, 0xda, 0x2f, 0x68, 0x5d, 0xd6, 0x92, 0xcf, 0x6a, 0xfe, 0x72, 0x2c, 0x59, 0x69, 0xd2, 0x9c, + 0x51, 0xc4, 0x9b, 0x1f, 0x2b, 0x83, 0xa6, 0xf5, 0x4b, 0xa8, 0x73, 0x11, 0x60, 0x54, 0xb6, 0xc9, + 0x77, 0xe0, 0x19, 0x62, 0x70, 0x7c, 0x03, 0x56, 0xe1, 0xa8, 0x80, 0xb9, 0x2d, 0x3d, 0x5a, 0x1d, + 0x8e, 0x0d, 0x56, 0x33, 0x94, 0x27, 0xcf, 0x68, 0xd6, 0xf3, 0x69, 0xb8, 0x19, 0x09, 0xb5, 0x2b, + 0x20, 0xfe, 0x27, 0xc0, 0x6c, 0x7b, 0xc1, 0xb6, 0xd5, 0xe9, 0x3a, 0xdd, 0x78, 0x0c, 0xdd, 0xfb, + 0x13, 0x9a, 0x16, 0xbb, 0x97, 0x47, 0x8c, 0x44, 0x1b, 0x1a, 0xcf, 0x87, 0x2e, 0x45, 0x7a, 0x7d, + 0x61, 0x22, 0x7c, 0xf8, 0x1f, 0x13, 0x84, 0xf0, 0x24, 0x34, 0xb4, 0x8d, 0x37, 0x4c, 0xae, 0x4a, + 0x57, 0x6f, 0x69, 0xb0, 0xa4, 0x0c, 0xf7, 0x28, 0x21, 0xaa, 0x6d, 0x80, 0x76, 0x09, 0xbc, 0x63, + 0x62, 0xef, 0x39, 0x17, 0x19, 0x48, 0x44, 0xb0, 0xe6, 0xab, 0xd9, 0x89, 0xb0, 0xa0, 0xe0, 0x5a, + 0xac, 0x66, 0x0a, 0x12, 0xf0, 0x04, 0x3b, 0xbb, 0x9a, 0x95, 0xd3, 0x0a, 0xa0, 0x4a, 0x36, 0x3c, + 0xed, 0xba, 0xd2, 0xeb, 0xdc, 0x72, 0xcb, 0xfa, 0x8e, 0xc8, 0xa9, 0x7f, 0x0d, 0x7f, 0x4f, 0x8f, + 0x55, 0xdd, 0xd7, 0x13, 0x4f, 0xc4, 0xdd, 0x0c, 0x87, 0xac, 0xa5, 0x75, 0x95, 0x43, 0xf1, 0xbf, + 0x30, 0x2d, 0xe0, 0xad, 0x38, 0x61, 0x8a, 0xe3, 0x6a, 0x20, 0x3f, 0x6d, 0x52, 0xa3, 0xfb, 0x55, + 0x71, 0x7f, 0xb0, 0x54, 0x72, 0xc0, 0xb7, 0x21, 0xef, 0x25, 0x46, 0x75, 0xa2, 0x1c, 0xea, 0x08, + 0xed, 0xc3, 0xa7, 0x8d, 0x16, 0xf4, 0x33, 0xe2, 0x2c, 0x95, 0xb4, 0xe4, 0x9f, 0xfe, 0x7f, 0xda, + 0x9e, 0xcb, 0x0e, 0x37, 0x67, 0x90, 0x62, 0x4b, 0x11, 0x58, 0x0a, 0x06, 0xa0, 0xbd, 0xf6, 0xe0, + 0xd0, 0x74, 0x0f, 0x18, 0xc5, 0xef, 0xbf, 0xba, 0x3c, 0x18, 0x19, 0x96, 0x7e, 0x0b, 0x95, 0x5e, + 0xbb, 0x91, 0xac, 0x67, 0x5b, 0x4e, 0x81, 0x91, 0x4b, 0x8a, 0x16, 0xc6, 0xd2, 0x0f, 0xcd, 0x54, + 0xb5, 0xbb, 0x0a, 0x39, 0x48, 0xb5, 0xea, 0xbb, 0x52, 0xb1, 0x76, 0xad, 0x0d, 0xe4, 0x9d, 0xa6, + 0x93, 0xd3, 0x47, 0x5b, 0xd7, 0x0f, 0x0a, 0x23, 0xe3, 0x9f, 0x64, 0x06, 0x96, 0x4a, 0xb4, 0x51, + 0x20, 0xc9, 0xec, 0x1b, 0x73, 0x78, 0xd5, 0xc3, 0xe6, 0x0c, 0xde, 0x5d, 0x7d, 0x33, 0x00, 0x6e, + 0x21, 0x86, 0x6d, 0x87, 0x74, 0x8a, 0xd4, 0x0a, 0x06, 0xa2, 0x99, 0x2f, 0x1d, 0x25, 0xfe, 0x9e, + 0x8f, 0x46, 0x47, 0xa5, 0x56, 0xda, 0xe0, 0x86, 0xdd, 0x84, 0x86, 0xdc, 0x46, 0xc7, 0x38, 0xe4, + 0x1c, 0x4f, 0xb1, 0xed, 0x3d, 0x4c, 0x78, 0xe3, 0x5c, 0x90, 0xe0, 0x87, 0x95, 0x50, 0x64, 0x24, + 0x9f, 0x5d, 0x3a, 0x18, 0x4c, 0xcb, 0xad, 0x7c, 0x59, 0xb9, 0x14, 0xbe, 0x6c, 0xbd, 0xca, 0xfe, + 0xef, 0xe8, 0xcb, 0x70, 0x55, 0xb3, 0x73, 0x40, 0xb1, 0xd1, 0x42, 0x71, 0xf1, 0x3f, 0x21, 0xb0, + 0x1c, 0x60, 0x4a, 0x9e, 0xa5, 0x36, 0xa1, 0xee, 0xc6, 0xb2, 0xaf, 0x46, 0x8c, 0x66, 0x37, 0xbe, + 0x59, 0xe7, 0x83, 0x37, 0xb8, 0x88, 0xd7, 0xee, 0x07, 0xb1, 0x8f, 0x9a, 0x03, 0xa7, 0x14, 0xfa, + 0xa3, 0xb6, 0xeb, 0x83, 0x3a, 0x2a, 0xef, 0xfd, 0x83, 0x9d, 0x11, 0xbe, 0x4f, 0x51, 0x36, 0x94, + 0x76, 0xe6, 0x68, 0xff, 0xb0, 0x3d, 0x48, 0xef, 0xc5, 0x84, 0x23, 0x47, 0x9f, 0xc8, 0xbe, 0x01, + 0xdb, 0xdb, 0x53, 0x19, 0x68, 0xe3, 0x34, 0x2e, 0xf4, 0x3c, 0xd9, 0x6a, 0xc6, 0xe0, 0xff, 0xf1, + 0xb5, 0xe6, 0xea, 0x97, 0x61, 0xce, 0x97, 0x3d, 0xa0, 0x68, 0xd4, 0x99, 0x91, 0x93, 0x5b, 0xae, + 0x6d, 0x69, 0xf0, 0x7b, 0x4d, 0x2d, 0x02, 0xfe, 0x24, 0x11, 0x58, 0xec, 0x09, 0x72, 0xbc, 0xba, + 0x16, 0x5b, 0x23, 0x61, 0x89, 0xb6, 0x7d, 0x33, 0xd6, 0xc4, 0xbd, 0x4c, 0x5f, 0x1f, 0x54, 0x7b, + 0x7a, 0x27, 0xdd, 0x21, 0xb2, 0x91, 0x95, 0x7e, 0xcc, 0x93, 0xc3, 0x36, 0xd8, 0x53, 0x4a, 0x61, + 0x20, 0x03, 0x5a, 0xb1, 0xd1, 0xf9, 0x1d, 0x6d, 0x86, 0x28, 0xb6, 0xa2, 0x76, 0x29, 0x21, 0x3b, + 0x6e, 0x72, 0x25, 0x3c, 0x43, 0xa8, 0x87, 0xa4, 0xac, 0x92, 0xa7, 0xad, 0xd8, 0x1b, 0x16, 0x94, + 0x69, 0xf2, 0xdb, 0x1e, 0x54, 0xcc, 0xa5, 0x50, 0xcf, 0x36, 0xd0, 0xe0, 0x13, 0x20, 0xd1, 0xc1, + 0x69, 0xca, 0x7d, 0x14, 0xaa, 0xb1, 0x71, 0xff, 0xaf, 0xe6, 0x58, 0x84, 0x3a, 0x45, 0xb0, 0x52, + 0xec, 0x32, 0x44, 0xf3, 0xe7, 0x49, 0x71, 0xc2, 0x3b, 0x98, 0xb6, 0xc2, 0x10, 0x8f, 0xd8, 0xeb, + 0x5b, 0x64, 0x93, 0x7c, 0x46, 0xa3, 0x70, 0x88, 0xff, 0x5c, 0xe4, 0xe3, 0x77, 0xa5, 0xbb, 0x95, + 0xb8, 0x57, 0x28, 0x45, 0x54, 0xd8, 0x0c, 0xe7, 0xb0, 0x8e, 0x5b, 0x26, 0xd5, 0x85, 0x7f, 0x16, + 0x56, 0x2c, 0x39, 0xbe, 0xde, 0x90, 0x88, 0x6f, 0x07, 0xa7, 0xb8, 0x83, 0x5f, 0x6a, 0xa3, 0x39, + 0x32, 0x10, 0xdc, 0x5e, 0xac, 0xc7, 0x73, 0x76, 0xbd, 0xbb, 0xca, 0xe9, 0xe8, 0xd1, 0x15, 0xfb, + 0x11, 0x4b, 0x92, 0xb9, 0xab, 0x32, 0xf1, 0xb6, 0xb6, 0x60, 0xdb, 0x6b, 0x46, 0x40, 0xf3, 0x8d, + 0x08, 0xcb, 0x86, 0x9a, 0x94, 0x9d, 0x52, 0x57, 0x64, 0x48, 0xdf, 0x6f, 0x34, 0xc8, 0xda, 0x21, + 0x1c, 0x06, 0x27, 0x99, 0xf1, 0x58, 0xab, 0x11, 0x96, 0xfd, 0xac, 0x55, 0xf2, 0xfd, 0x53, 0xdf, + 0xef, 0xd8, 0x78, 0xbd, 0x08, 0xc8, 0xb2, 0xad, 0xfd, 0x79, 0x40, 0x9e, 0x0d, 0xb9, 0xb3, 0x27, + 0x35, 0xff, 0xf2, 0xbb, 0x9d, 0x92, 0xe7, 0x18, 0x5c, 0xb6, 0x6b, 0x97, 0x63, 0x0e, 0x2d, 0x8e, + 0xa0, 0xd8, 0x83, 0x25, 0x89, 0xc0, 0xe4, 0xb0, 0xf0, 0x91, 0xfe, 0x7c, 0x53, 0x4d, 0x01, 0x60, + 0xb4, 0x64, 0x00, 0xed, 0x51, 0x4a, 0x69, 0x27, 0xab, 0x11, 0x3a, 0x1d, 0xf4, 0x99, 0xa3, 0x7e, + 0xef, 0x97, 0x3e, 0x70, 0x90, 0x05, 0x06, 0x16, 0xde, 0xdd, 0x20, 0xf4, 0x01, 0x9c, 0x1f, 0x6c, + 0xc0, 0x63, 0xe5, 0xa4, 0x13, 0xa2, 0xb6, 0x1e, 0x69, 0x6e, 0x91, 0x69, 0x12, 0x5a, 0x51, 0xbb, + 0xb6, 0x16, 0x25, 0xd8, 0xa8, 0xef, 0xa2, 0x01, 0x39, 0x63, 0xa7, 0x52, 0xf1, 0x7b, 0x70, 0x31, + 0xf4, 0x23, 0xfa, 0xa5, 0x99, 0x74, 0xad, 0x1a, 0xfe, 0xbc, 0x8e, 0xf8, 0xb1, 0x0e, 0x19, 0x83, + 0x0a, 0x67, 0x79, 0x4b, 0xdf, 0x43, 0x74, 0xa8, 0x7f, 0xbe, 0x4b, 0xf3, 0xf2, 0x75, 0x43, 0xc8, + 0x1d, 0x1b, 0x93, 0xf3, 0xd7, 0x64, 0x4f, 0x39, 0xe9, 0x49, 0x75, 0x78, 0x1c, 0x7c, 0x15, 0x9b, + 0xeb, 0xd5, 0xde, 0xbc, 0xef, 0x0f, 0x1d, 0x90, 0x48, 0x52, 0x55, 0xee, 0x1f, 0x70, 0xb1, 0xb0, + 0x87, 0xcb, 0x38, 0xf9, 0xd5, 0x48, 0x83, 0x4a, 0x9a, 0x41, 0x9b, 0x33, 0x59, 0x07, 0xa2, 0x06, + 0x23, 0xaa, 0xb4, 0x00, 0x13, 0x64, 0x81, 0x83, 0x3a, 0xfd, 0x56, 0xff, 0x8d, 0xd5, 0xaf, 0x0b, + 0xe3, 0x19, 0xa2, 0xef, 0xc8, 0x83, 0x3a, 0xba, 0xb0, 0x85, 0x2e, 0xd9, 0x3d, 0x58, 0xb0, 0x4c, + 0x43, 0x78, 0xe1, 0xb2, 0x1a, 0x02, 0x2c, 0xd9, 0xc7, 0xc9, 0xca, 0x5d, 0x43, 0x91, 0xd9, 0x35, + 0x0c, 0xbe, 0xa4, 0xa7, 0x54, 0x95, 0x68, 0x2f, 0x56, 0x79, 0xb1, 0x06, 0x77, 0x1e, 0x07, 0x39, + 0x67, 0xd8, 0x1d, 0x9a, 0x46, 0x1c, 0xd7, 0xdd, 0x10, 0x8e, 0x51, 0x5f, 0xf3, 0x59, 0x60, 0xca, + 0x8c, 0x83, 0xd4, 0xb8, 0xb5, 0x0b, 0xd8, 0xd6, 0x75, 0xf3, 0x91, 0xf1, 0x23, 0x33, 0x79, 0x87, + 0x91, 0xfe, 0x55, 0xd1, 0xea, 0x63, 0x46, 0xb0, 0x42, 0xf7, 0x1b, 0x2e, 0x0e, 0x59, 0x9f, 0xef, + 0x77, 0x3c, 0xc5, 0x3e, 0x6d, 0xe1, 0x6f, 0xc0, 0xff, 0xf0, 0x56, 0x1c, 0x1d, 0xd5, 0xca, 0x88, + 0x34, 0x31, 0x78, 0x16, 0x2c, 0xed, 0x68, 0x60, 0xff, 0x6c, 0x36, 0x11, 0x2d, 0xee, 0xb3, 0x97, + 0x30, 0x6d, 0x33, 0x0a, 0x5a, 0x74, 0x2d, 0xc5, 0xd6, 0x42, 0x6a, 0x34, 0x1c, 0x7d, 0xda, 0xd4, + 0xf4, 0x82, 0xee, 0x0f, 0x7f, 0x62, 0xf0, 0x39, 0xb2, 0xf3, 0xba, 0x80, 0xd9, 0xa5, 0x4b, 0x92, + 0x0a, 0x87, 0x07, 0x78, 0xf6, 0x52, 0xa5, 0x51, 0x13, 0x63, 0x60, 0xc0, 0x4b, 0xcb, 0x71, 0xa3, + 0x63, 0x56, 0xa7, 0xf2, 0x08, 0x42, 0x7b, 0x64, 0xc0, 0x43, 0x84, 0x3e, 0x6e, 0xc1, 0x25, 0xe1, + 0xf8, 0x68, 0x64, 0x54, 0x54, 0xda, 0xff, 0xcd, 0x4d, 0x22, 0xb1, 0x90, 0xd4, 0x58, 0xd7, 0x92, + 0x0e, 0x91, 0xfc, 0xd6, 0xe0, 0x7d, 0xfa, 0xea, 0x9c, 0x2f, 0xf4, 0x40, 0x23, 0xc0, 0x28, 0xdb, + 0xcb, 0x48, 0xa4, 0xda, 0x23, 0x63, 0x5d, 0x1d, 0xb5, 0xd1, 0x7b, 0x14, 0xdf, 0xfe, 0xa2, 0xde, + 0x6c, 0x46, 0xa1, 0x3e, 0x1b, 0x57, 0x1a, 0x83, 0x9b, 0xff, 0xf0, 0xd7, 0xde, 0xf6, 0x75, 0x67, + 0xb3, 0x15, 0x27, 0x73, 0xfb, 0xa3, 0x2b, 0xd9, 0xed, 0x3b, 0xb5, 0x2c, 0x9e, 0x58, 0xe1, 0x3b, + 0x90, 0x90, 0x29, 0x7e, 0x23, 0x22, 0xa0, 0x93, 0xf4, 0x04, 0x16, 0xff, 0xe8, 0xfe, 0xc2, 0x96, + 0xec, 0x08, 0x00, 0xb7, 0xf1, 0x86, 0x28, 0x2d, 0x50, 0x67, 0x1d, 0xf4, 0x4d, 0x5c, 0xfb, 0x8c, + 0x04, 0x7d, 0x58, 0xa7, 0x31, 0x20, 0x64, 0x37, 0x9d, 0x43, 0xb5, 0x2b, 0xe3, 0xd0, 0xbc, 0x56, + 0x4a, 0xb7, 0x39, 0xba, 0xd0, 0xd5, 0xae, 0x3c, 0xdd, 0xf3, 0x4c, 0xb6, 0x61, 0xaa, 0xc2, 0xe6, + 0x1b, 0xcb, 0xe9, 0x66, 0xd2, 0x12, 0x17, 0x46, 0xc2, 0xee, 0x80, 0x34, 0x32, 0x62, 0x3b, 0x35, + 0x31, 0xe4, 0x17, 0x95, 0x83, 0x44, 0x57, 0x21, 0x54, 0xb3, 0xbd, 0x01, 0x07, 0xe5, 0xc3, 0xb4, + 0x43, 0xf2, 0xbd, 0x60, 0x5c, 0x20, 0xb9, 0xe9, 0x28, 0x90, 0x2a, 0x4d, 0x0e, 0x31, 0xb8, 0xbc, + 0xc2, 0x00, 0x60, 0xbc, 0x7e, 0x09, 0xe4, 0x0a, 0xf4, 0x99, 0x9d, 0xf6, 0xdc, 0x9a, 0x1d, 0x37, + 0x45, 0xe4, 0x88, 0x22, 0xa3, 0xc0, 0xb1, 0x36, 0x3e, 0x2c, 0x34, 0x53, 0x31, 0xe9, 0x1d, 0x9c, + 0x23, 0x7c, 0x7a, 0x70, 0x5e, 0x3e, 0x4e, 0x8d, 0x62, 0x7b, 0xa3, 0x19, 0xd0, 0x1a, 0x16, 0xe7, + 0xf5, 0x3b, 0x54, 0xff, 0x22, 0x9d, 0xc3, 0x02, 0xcd, 0xee, 0x4c, 0xc7, 0x5e, 0x56, 0xe5, 0x0c, + 0x44, 0xc5, 0xec, 0x90, 0x30, 0x96, 0x7c, 0xd8, 0x22, 0x38, 0x2d, 0xc6, 0xf1, 0x2e, 0xc6, 0x49, + 0xdd, 0x94, 0x99, 0xc7, 0xb6, 0xca, 0x08, 0x33, 0x82, 0x6a, 0xee, 0xc2, 0x27, 0xa1, 0xee, 0xa3, + 0x12, 0xf9, 0xd7, 0x0a, 0x55, 0x23, 0xca, 0x8c, 0x1e, 0xf3, 0x7f, 0x5d, 0x47, 0x1c, 0x26, 0x32, + 0x7c, 0x62, 0x11, 0x4b, 0x95, 0x23, 0x7e, 0x90, 0xab, 0xc4, 0xb1, 0xb9, 0x65, 0xb0, 0x7f, 0xe3, + 0x1b, 0xd8, 0x15, 0xc5, 0xce, 0xd0, 0x3a, 0x4f, 0xce, 0xdd, 0x69, 0x9f, 0xd8, 0x81, 0xf3, 0x72, + 0xb8, 0x22, 0x17, 0xe7, 0x3e, 0xba, 0x90, 0xa3, 0xd0, 0x3b, 0x4a, 0x1f, 0x5a, 0x26, 0x99, 0xca, + 0x7d, 0x6c, 0x7e, 0x20, 0x11, 0x2d, 0xcc, 0x0d, 0x1b, 0x1d, 0x38, 0x73, 0xda, 0xe1, 0x1e, 0x24, + 0xa6, 0xda, 0xcc, 0x29, 0x00, 0x9f, 0x95, 0x08, 0xa7, 0x58, 0xda, 0x50, 0xf0, 0x8b, 0x2c, 0xb3, + 0xb7, 0xaf, 0xa6, 0x82, 0x83, 0x1d, 0x72, 0x3a, 0x9a, 0xb0, 0x02, 0x48, 0xc0, 0xc2, 0x0e, 0x3a, + 0x45, 0xf3, 0x13, 0xd6, 0xa9, 0x44, 0xec, 0x1a, 0xa0, 0x48, 0xbd, 0x47, 0xa8, 0x65, 0x51, 0x71, + }; + }; +} diff --git a/validation/extern/tlfloat/src/include/tlfloat/tlfloat.h b/validation/extern/tlfloat/src/include/tlfloat/tlfloat.h new file mode 100644 index 0000000..a29ee31 --- /dev/null +++ b/validation/extern/tlfloat/src/include/tlfloat/tlfloat.h @@ -0,0 +1,2235 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef __TLFLOAT_H_INCLUDED__ +#define __TLFLOAT_H_INCLUDED__ + +#include +#include +#include +#include + +#include + +#ifndef TLFLOAT_FP_NAN +#define TLFLOAT_FP_NAN 0 +#define TLFLOAT_FP_INFINITE 1 +#define TLFLOAT_FP_ZERO 2 +#define TLFLOAT_FP_SUBNORMAL 3 +#define TLFLOAT_FP_NORMAL 4 +#define TLFLOAT_FP_ILOGB0 ((int)0x80000000) +#define TLFLOAT_FP_ILOGBNAN ((int)2147483647) + +#define TLFLOAT_FLT128_MANT_DIG 113 +#define TLFLOAT_FLT128_MIN_EXP (-16381) +#define TLFLOAT_FLT128_MAX_EXP 16384 +#define TLFLOAT_FLT128_DIG 33 +#define TLFLOAT_FLT128_MIN_10_EXP (-4931) +#define TLFLOAT_FLT128_MAX_10_EXP 4932 + +#define TLFLOAT_FLT256_MANT_DIG 237 +#endif + +#if defined(TLFLOAT_DOXYGEN) +/** Calls to libquadmath functions are replaced to the corresponding + calls to tlfloat functions if this macro is defined */ +#define TLFLOAT_LIBQUADMATH_EMULATION +#endif + +#ifdef __cplusplus +#include + +#ifndef TLFLOAT_NO_LIBSTDCXX +#include +#include +#include +#endif + +extern "C" { +#endif + +#if defined(TLFLOAT_COMPILER_SUPPORTS_INT128) + typedef __int128_t tlfloat_int128_t_; + typedef __uint128_t tlfloat_uint128_t_; +#else +/** tlfloat_int128_t_ and tlfloat_uint128_t_ are types for handling + * 128-bit integer numbers in C. The data size and data structure of + * these types are the same as ordinary integer types. These are POD + * types that can be safely passed with C ABI. If the compiler + * supports __int128_t and __uint128_t, these type are aliases for + * those types. */ + typedef struct { uint64_t e[1 << 1]; } tlfloat_int128_t_; + typedef struct { uint64_t e[1 << 1]; } tlfloat_uint128_t_; +#endif + +#if defined(TLFLOAT_COMPILER_SUPPORTS_FLOAT128) + typedef __float128 tlfloat_quad_; +#elif defined(TLFLOAT_LONGDOUBLE_IS_FLOAT128) + typedef long double tlfloat_quad_; +#elif defined(TLFLOAT_COMPILER_SUPPORTS_ISOFLOAT128) + typedef _Float128 tlfloat_quad_; +#else +/** This type is for handling quadruple-precision IEEE floating-point + * numbers in C. The data size and data structure of this type are the + * same as a quad-precision floating-point number. This is a POD type + * that can be safely passed with C ABI. If the compiler supports + * __float128, this type is an alias for __float128. When compling + * with a compiler on which long double is IEEE float 128, this type + * is an alias for long double. */ + typedef struct { uint64_t e[2]; } tlfloat_quad_; +#endif + +/** This type is for handling octuple-precision IEEE floating-point + * numbers in C. The data size and data structure of this type are the + * same as an octuple-precision floating-point number. This is a POD + * type that can be safely passed with C ABI. */ + typedef struct { uint64_t e[4]; } tlfloat_octuple_; + + // + + /** This function returns TLFLOAT_VERSION_MAJOR * 1000000ULL + TLFLOAT_VERSION_MINOR * 1000ULL + TLFLOAT_VERSION_PATCH */ + uint64_t tlfloat_version(); + + /** The tlfloat_printf family of functions has the functionality to produce output of numbers of the types defined in TLFloat library, + * in addition to the functionality of the standard printf family of functions. + * To output a number of type defined in TLFloat library, + * use _m as the length modifier where m is a decimal integer represents the data size of the corresponding argument in bits. + * For example, use '\%_256g' to output an octuple-precision FP number, and '\%_128d' to output a 128-bit signed integer. + * Q and O modifier have to be used to output an FP number in tlfloat_quad and tlfloat_octuple types, respectively. */ + int tlfloat_printf(const char *fmt, ...); + + /** See explanation for tlfloat_printf() */ + int tlfloat_fprintf(FILE *fp, const char *fmt, ...); + + /** See explanation for tlfloat_printf() */ + int tlfloat_snprintf(char *str, size_t size, const char *fmt, ...); + + /** See explanation for tlfloat_printf() */ + int tlfloat_vprintf(const char *fmt, va_list ap); + + /** See explanation for tlfloat_printf() */ + int tlfloat_vfprintf(FILE *fp, const char *fmt, va_list ap); + + /** See explanation for tlfloat_printf() */ + int tlfloat_vsnprintf(char *str, size_t size, const char *fmt, va_list ap); + +#if defined(TLFLOAT_DOXYGEN) || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 14) + /** This functionality is experimental. Please use tlfloat_printf + functions instead. On systems with GLIBC, printf hooks can be + registered by calling this function. */ + int tlfloat_registerPrintfHook(); + + /** Unregister printf hooks */ + void tlfloat_unregisterPrintfHook(); +#endif + + /** The tlfloat_strtod family of functions provides functionality equivalent to the standard strtod family of functions, + * but corresponds to the types defined in the TLFloat library. */ + double tlfloat_strtod(const char *, const char **); + float tlfloat_strtof(const char *, const char **); + +#if !defined(TLFLOAT_DOXYGEN) + tlfloat_quad_ tlfloat_strtoq_(const char *, const char **); + tlfloat_octuple_ tlfloat_strtoo_(const char *, const char **); + + tlfloat_int128_t_ tlfloat_strtoi128(const char *, const char **, const int); + tlfloat_uint128_t_ tlfloat_strtou128(const char *, const char **, const int); + + // + + double tlfloat_cast_d_q(const tlfloat_quad_ x); + double tlfloat_cast_d_o(const tlfloat_octuple_ x); + + tlfloat_quad_ tlfloat_cast_q_d_(const double x); + tlfloat_quad_ tlfloat_cast_q_o (const tlfloat_octuple_ x); + + tlfloat_octuple_ tlfloat_cast_o_d_(const double x); + tlfloat_octuple_ tlfloat_cast_o_q(const tlfloat_quad_ x); + + int64_t tlfloat_cast_i64_q(const tlfloat_quad_ x); + tlfloat_quad_ tlfloat_cast_q_i64_(const int64_t x); + + int64_t tlfloat_cast_i64_o(const tlfloat_octuple_ x); + tlfloat_octuple_ tlfloat_cast_o_i64_(const int64_t x); + + uint64_t tlfloat_cast_u64_q(const tlfloat_quad_ x); + tlfloat_quad_ tlfloat_cast_q_u64_(const uint64_t x); + + uint64_t tlfloat_cast_u64_o(const tlfloat_octuple_ x); + tlfloat_octuple_ tlfloat_cast_o_u64_(const uint64_t x); + + // + + tlfloat_int128_t_ tlfloat_cast_i128_i64_(const int64_t x); + int64_t tlfloat_cast_i64_i128(const tlfloat_int128_t_ x); + + tlfloat_uint128_t_ tlfloat_cast_u128_u64_(const uint64_t x); + uint64_t tlfloat_cast_u64_u128(const tlfloat_uint128_t_ x); + + tlfloat_int128_t_ tlfloat_cast_i128_d_(const double x); + double tlfloat_cast_d_i128(const tlfloat_int128_t_ x); + + tlfloat_uint128_t_ tlfloat_cast_u128_d_(const double x); + double tlfloat_cast_d_u128(const tlfloat_uint128_t_ x); + + tlfloat_int128_t_ tlfloat_cast_i128_q(const tlfloat_quad_ x); + tlfloat_quad_ tlfloat_cast_q_i128(const tlfloat_int128_t_ x); + + tlfloat_uint128_t_ tlfloat_cast_u128_q(const tlfloat_quad_ x); + tlfloat_quad_ tlfloat_cast_q_u128(const tlfloat_uint128_t_ x); + + tlfloat_int128_t_ tlfloat_cast_i128_o(const tlfloat_octuple_ x); + tlfloat_octuple_ tlfloat_cast_o_i128(const tlfloat_int128_t_ x); + + tlfloat_uint128_t_ tlfloat_cast_u128_o(const tlfloat_octuple_ x); + tlfloat_octuple_ tlfloat_cast_o_u128(const tlfloat_uint128_t_ x); + + int tlfloat_eq_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y); + int tlfloat_ne_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y); + int tlfloat_lt_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y); + int tlfloat_le_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y); + int tlfloat_gt_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y); + int tlfloat_ge_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y); + + tlfloat_int128_t_ tlfloat_add_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y); + tlfloat_int128_t_ tlfloat_sub_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y); + tlfloat_int128_t_ tlfloat_mul_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y); + tlfloat_int128_t_ tlfloat_div_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y); + tlfloat_int128_t_ tlfloat_mod_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y); + + tlfloat_int128_t_ tlfloat_and_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y); + tlfloat_int128_t_ tlfloat_or_i128_i128 (const tlfloat_int128_t_ x, const tlfloat_int128_t_ y); + tlfloat_int128_t_ tlfloat_xor_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y); + tlfloat_int128_t_ tlfloat_not_i128(const tlfloat_int128_t_ x); + + tlfloat_int128_t_ tlfloat_shl_i128_i(const tlfloat_int128_t_ x, const int y); + tlfloat_int128_t_ tlfloat_shr_i128_i(const tlfloat_int128_t_ x, const int y); + + tlfloat_int128_t_ tlfloat_neg_i128(const tlfloat_int128_t_ x); + + int tlfloat_eq_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y); + int tlfloat_ne_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y); + int tlfloat_lt_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y); + int tlfloat_le_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y); + int tlfloat_gt_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y); + int tlfloat_ge_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y); + + tlfloat_uint128_t_ tlfloat_add_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y); + tlfloat_uint128_t_ tlfloat_sub_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y); + tlfloat_uint128_t_ tlfloat_mul_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y); + tlfloat_uint128_t_ tlfloat_div_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y); + tlfloat_uint128_t_ tlfloat_mod_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y); + + tlfloat_uint128_t_ tlfloat_and_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y); + tlfloat_uint128_t_ tlfloat_or_u128_u128 (const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y); + tlfloat_uint128_t_ tlfloat_xor_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y); + tlfloat_uint128_t_ tlfloat_not_u128(const tlfloat_uint128_t_ x); + + tlfloat_uint128_t_ tlfloat_shl_u128_i(const tlfloat_uint128_t_ x, const int y); + tlfloat_uint128_t_ tlfloat_shr_u128_i(const tlfloat_uint128_t_ x, const int y); + + // + + int tlfloat_eq_q_q(const tlfloat_quad_ x, const tlfloat_quad_ y); + int tlfloat_ne_q_q(const tlfloat_quad_ x, const tlfloat_quad_ y); + int tlfloat_lt_q_q(const tlfloat_quad_ x, const tlfloat_quad_ y); + int tlfloat_le_q_q(const tlfloat_quad_ x, const tlfloat_quad_ y); + int tlfloat_gt_q_q(const tlfloat_quad_ x, const tlfloat_quad_ y); + int tlfloat_ge_q_q(const tlfloat_quad_ x, const tlfloat_quad_ y); + + int tlfloat_eq_o_o(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + int tlfloat_ne_o_o(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + int tlfloat_lt_o_o(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + int tlfloat_le_o_o(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + int tlfloat_gt_o_o(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + int tlfloat_ge_o_o(const tlfloat_octuple_ x, const tlfloat_octuple_ y); +#endif // #if !defined(TLFLOAT_DOXYGEN) + + // + + float tlfloat_addf(const float x, const float y); + double tlfloat_add(const double x, const double y); + + float tlfloat_subf(const float x, const float y); + double tlfloat_sub(const double x, const double y); + + float tlfloat_mulf(const float x, const float y); + double tlfloat_mul(const double x, const double y); + + float tlfloat_divf(const float x, const float y); + double tlfloat_div(const double x, const double y); + + float tlfloat_negf(const float x); + double tlfloat_neg(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_fmaf(const float x, const float y, const float z); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_fma(const double x, const double y, const double z); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_sqrtf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_sqrt(const double x); + + // + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_fabsf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_fabs(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_copysignf(const float x, const float y); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_copysign(const double x, const double y); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_fmaxf(const float x, const float y); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_fmax(const double x, const double y); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_fminf(const float x, const float y); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_fmin(const double x, const double y); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_fdimf(const float x, const float y); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_fdim(const double x, const double y); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_ldexpf(const float x, const int y); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_ldexp(const double x, const int y); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_frexpf(const float x, int *y); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_frexp(const double x, int *y); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_modff(const float x, float *y); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_modf(const double x, double *y); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_nextafterf(const float x, const float y); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_nextafter(const double x, const double y); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + int tlfloat_ilogbf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + int tlfloat_ilogb(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + int tlfloat_isnanf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + int tlfloat_isnan(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + int tlfloat_isinff(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + int tlfloat_isinf(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + int tlfloat_finitef(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + int tlfloat_finite(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + int tlfloat_fpclassifyf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + int tlfloat_fpclassify(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + int tlfloat_signbitf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + int tlfloat_signbit(const double x); + + // + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_hypotf(const float x, const float y); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_hypot(const double x, const double y); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_truncf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_trunc(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_floorf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_floor(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_ceilf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_ceil(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_roundf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_round(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_rintf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_rint(const double x); + + // + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_sinf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_sin(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_cosf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_cos(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_tanf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_tan(const double x); + + float tlfloat_sinpif(const float x); + double tlfloat_sinpi(const double x); + + float tlfloat_cospif(const float x); + double tlfloat_cospi(const double x); + + float tlfloat_tanpif(const float x); + double tlfloat_tanpi(const double x); + + void tlfloat_sincosf(const float x, float *s, float *c); + void tlfloat_sincos(const double x, double *s, double *c); + + void tlfloat_sincospif(const float x, float *s, float *c); + void tlfloat_sincospi(const double x, double *s, double *c); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_asinf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_asin(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_acosf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_acos(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_atanf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_atan(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_atan2f(const float y, const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_atan2(const double y, const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_expf(const float a); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_exp(const double a); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_expm1f(const float a); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_expm1(const double a); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_exp2f(const float a); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_exp2(const double a); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_exp10f(const float a); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_exp10(const double a); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_logf(const float a); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_log(const double a); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_log1pf(const float a); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_log1p(const double a); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_log2f(const float a); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_log2(const double a); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_log10f(const float a); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_log10(const double a); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_powf(const float x, const float y); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_pow(const double x, const double y); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_cbrtf(const float a); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_cbrt(const double a); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_sinhf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_sinh(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_coshf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_cosh(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_tanhf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_tanh(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_asinhf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_asinh(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_acoshf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_acosh(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_atanhf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_atanh(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_fmodf(const float x, const float y); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_fmod(const double x, const double y); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_remainderf(const float x, const float y); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_remainder(const double x, const double y); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_remquof(const float x, const float y, int *quo); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_remquo(const double x, const double y, int *quo); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_erff(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_erf(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_erfcf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_erfc(const double x); + + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + float tlfloat_tgammaf(const float x); + /** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ + double tlfloat_tgamma(const double x); + + /** This is experimental implementation of log gamma function. Link with -ltlfloat. */ + float tlfloat_lgammaf(const float x); + /** This is experimental implementation of log gamma function. Link with -ltlfloat. */ + double tlfloat_lgamma(const double x); + +#if !defined(TLFLOAT_DOXYGEN) + tlfloat_quad_ tlfloat_addq(const tlfloat_quad_ x, const tlfloat_quad_ y); + tlfloat_octuple_ tlfloat_addo(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + tlfloat_quad_ tlfloat_subq(const tlfloat_quad_ x, const tlfloat_quad_ y); + tlfloat_octuple_ tlfloat_subo(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + tlfloat_quad_ tlfloat_mulq(const tlfloat_quad_ x, const tlfloat_quad_ y); + tlfloat_octuple_ tlfloat_mulo(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + tlfloat_quad_ tlfloat_divq(const tlfloat_quad_ x, const tlfloat_quad_ y); + tlfloat_octuple_ tlfloat_divo(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + tlfloat_quad_ tlfloat_negq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_nego(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_fmaq(const tlfloat_quad_ x, const tlfloat_quad_ y, const tlfloat_quad_ z); + tlfloat_octuple_ tlfloat_fmao(const tlfloat_octuple_ x, const tlfloat_octuple_ y, const tlfloat_octuple_ z); + tlfloat_quad_ tlfloat_sqrtq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_sqrto(const tlfloat_octuple_ x); + + tlfloat_quad_ tlfloat_fabsq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_fabso(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_copysignq(const tlfloat_quad_ x, const tlfloat_quad_ y); + tlfloat_octuple_ tlfloat_copysigno(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + tlfloat_quad_ tlfloat_fmaxq(const tlfloat_quad_ x, const tlfloat_quad_ y); + tlfloat_octuple_ tlfloat_fmaxo(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + tlfloat_quad_ tlfloat_fminq(const tlfloat_quad_ x, const tlfloat_quad_ y); + tlfloat_octuple_ tlfloat_fmino(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + tlfloat_quad_ tlfloat_fdimq(const tlfloat_quad_ x, const tlfloat_quad_ y); + tlfloat_octuple_ tlfloat_fdimo(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + tlfloat_quad_ tlfloat_ldexpq(const tlfloat_quad_ x, const int y); + tlfloat_octuple_ tlfloat_ldexpo(const tlfloat_octuple_ x, const int y); + tlfloat_quad_ tlfloat_frexpq(const tlfloat_quad_ x, int *y); + tlfloat_octuple_ tlfloat_frexpo(const tlfloat_octuple_ x, int *y); + tlfloat_quad_ tlfloat_modfq(const tlfloat_quad_ x, tlfloat_quad_ *y); + tlfloat_octuple_ tlfloat_modfo(const tlfloat_octuple_ x, tlfloat_octuple_ *y); + tlfloat_quad_ tlfloat_nextafterq(const tlfloat_quad_ x, const tlfloat_quad_ y); + tlfloat_octuple_ tlfloat_nextaftero(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + int tlfloat_ilogbq(const tlfloat_quad_ x); + int tlfloat_ilogbo(const tlfloat_octuple_ x); + int tlfloat_isnanq(const tlfloat_quad_ x); + int tlfloat_isnano(const tlfloat_octuple_ x); + int tlfloat_isinfq(const tlfloat_quad_ x); + int tlfloat_isinfo(const tlfloat_octuple_ x); + int tlfloat_finiteq(const tlfloat_quad_ x); + int tlfloat_finiteo(const tlfloat_octuple_ x); + int tlfloat_fpclassifyq(const tlfloat_quad_ x); + int tlfloat_fpclassifyo(const tlfloat_octuple_ x); + int tlfloat_signbitq(const tlfloat_quad_ x); + int tlfloat_signbito(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_hypotq(const tlfloat_quad_ x, const tlfloat_quad_ y); + tlfloat_octuple_ tlfloat_hypoto(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + tlfloat_quad_ tlfloat_truncq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_trunco(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_floorq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_flooro(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_ceilq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_ceilo(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_roundq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_roundo(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_rintq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_rinto(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_sinq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_sino(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_cosq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_coso(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_tanq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_tano(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_sinpiq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_sinpio(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_cospiq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_cospio(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_tanpiq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_tanpio(const tlfloat_octuple_ x); + void tlfloat_sincosq(const tlfloat_quad_ x, tlfloat_quad_ *s, tlfloat_quad_ *c); + void tlfloat_sincoso(const tlfloat_octuple_ x, tlfloat_octuple_ *s, tlfloat_octuple_ *c); + void tlfloat_sincospiq(const tlfloat_quad_ x, tlfloat_quad_ *s, tlfloat_quad_ *c); + void tlfloat_sincospio(const tlfloat_octuple_ x, tlfloat_octuple_ *s, tlfloat_octuple_ *c); + tlfloat_quad_ tlfloat_asinq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_asino(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_acosq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_acoso(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_atanq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_atano(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_atan2q(const tlfloat_quad_ y, const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_atan2o(const tlfloat_octuple_ y, const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_expq(const tlfloat_quad_ a); + tlfloat_octuple_ tlfloat_expo(const tlfloat_octuple_ a); + tlfloat_quad_ tlfloat_expm1q(const tlfloat_quad_ a); + tlfloat_octuple_ tlfloat_expm1o(const tlfloat_octuple_ a); + tlfloat_quad_ tlfloat_exp2q(const tlfloat_quad_ a); + tlfloat_octuple_ tlfloat_exp2o(const tlfloat_octuple_ a); + tlfloat_quad_ tlfloat_exp10q(const tlfloat_quad_ a); + tlfloat_octuple_ tlfloat_exp10o(const tlfloat_octuple_ a); + tlfloat_quad_ tlfloat_logq(const tlfloat_quad_ a); + tlfloat_octuple_ tlfloat_logo(const tlfloat_octuple_ a); + tlfloat_quad_ tlfloat_log1pq(const tlfloat_quad_ a); + tlfloat_octuple_ tlfloat_log1po(const tlfloat_octuple_ a); + tlfloat_quad_ tlfloat_log2q(const tlfloat_quad_ a); + tlfloat_octuple_ tlfloat_log2o(const tlfloat_octuple_ a); + tlfloat_quad_ tlfloat_log10q(const tlfloat_quad_ a); + tlfloat_octuple_ tlfloat_log10o(const tlfloat_octuple_ a); + tlfloat_quad_ tlfloat_powq(const tlfloat_quad_ x, const tlfloat_quad_ y); + tlfloat_octuple_ tlfloat_powo(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + tlfloat_quad_ tlfloat_cbrtq(const tlfloat_quad_ a); + tlfloat_octuple_ tlfloat_cbrto(const tlfloat_octuple_ a); + tlfloat_quad_ tlfloat_sinhq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_sinho(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_coshq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_cosho(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_tanhq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_tanho(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_asinhq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_asinho(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_acoshq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_acosho(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_atanhq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_atanho(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_erfq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_erfo(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_erfcq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_erfco(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_tgammaq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_tgammao(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_lgammaq(const tlfloat_quad_ x); + tlfloat_octuple_ tlfloat_lgammao(const tlfloat_octuple_ x); + tlfloat_quad_ tlfloat_fmodq(const tlfloat_quad_ x, const tlfloat_quad_ y); + tlfloat_octuple_ tlfloat_fmodo(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + tlfloat_quad_ tlfloat_remainderq(const tlfloat_quad_ x, const tlfloat_quad_ y); + tlfloat_octuple_ tlfloat_remaindero(const tlfloat_octuple_ x, const tlfloat_octuple_ y); + tlfloat_quad_ tlfloat_remquoq(const tlfloat_quad_ x, const tlfloat_quad_ y, int *quo); + tlfloat_octuple_ tlfloat_remquoo(const tlfloat_octuple_ x, const tlfloat_octuple_ y, int *quo); +#endif // #if !defined(TLFLOAT_DOXYGEN) + +#ifdef __cplusplus +} // extern "C" { +#endif + +#if (defined(__cplusplus) && !defined(TLFLOAT_COMPILER_SUPPORTS_FLOAT128) && !defined(TLFLOAT_LONGDOUBLE_IS_FLOAT128) && !defined(TLFLOAT_COMPILER_SUPPORTS_ISOFLOAT128)) || defined(TLFLOAT_DOXYGEN) +/** tlfloat_quad is a trivially copyable type for handling + * quadruple-precision IEEE floating-point numbers in C and C++11. The + * data size and data structure of this type are the same as a + * quad-precision floating-point number. When compling C code, this + * type is an alias for tlfloat_quad_. When compling C++ code without + * IEEE float 128 support, this is a struct encapsulating a + * tlfloat_quad_ variable with operators overloaded. */ +struct tlfloat_quad { + tlfloat_quad_ value; + + tlfloat_quad() { value.e[0] = value.e[1] = 0; } + + // Conversion to/from the corresponding C type + constexpr tlfloat_quad(const tlfloat_quad_& v) : value(v) {} + constexpr operator tlfloat_quad_() const { return value; } + + // Upcast / downcast + explicit tlfloat_quad(const struct tlfloat_octuple& v); + + // Conversion to/from double + tlfloat_quad(const double& d) : value(tlfloat_cast_q_d_(d)) {} + explicit operator double() const { return tlfloat_cast_d_q(value); } + + // Conversion to/from integral types + template::value && (sizeof(T) < 8 || !std::is_unsigned::value)), int>::type = 0> + tlfloat_quad(const T& i) : value(tlfloat_cast_q_i64_(i)) {} + template::value && std::is_unsigned::value && sizeof(T) == 8), int>::type = 0> + tlfloat_quad(const T& u) : value(tlfloat_cast_q_u64_(u)) {} + template::value && (sizeof(T) < 8 || !std::is_unsigned::value)), int>::type = 0> + explicit operator T() const { return tlfloat_cast_i64_q(value); } + template::value && std::is_unsigned::value && sizeof(T) == 8), int>::type = 0> + explicit operator T() const { return tlfloat_cast_u64_q(value); } + + explicit tlfloat_quad(const tlfloat_int128_t_& i); + explicit tlfloat_quad(const tlfloat_uint128_t_& u); + explicit operator tlfloat_int128_t_() const; + explicit operator tlfloat_uint128_t_() const; + +#if !defined(TLFLOAT_COMPILER_SUPPORTS_INT128) + explicit tlfloat_quad(const struct tlfloat_int128_t& i); + explicit tlfloat_quad(const struct tlfloat_uint128_t& u); +#endif + + /** Any non-integer object is memcpy-ed */ + template::value && + !std::is_same::value && !std::is_same::value && +#if !defined(TLFLOAT_COMPILER_SUPPORTS_INT128) + !std::is_same::value && !std::is_same::value && +#endif + !std::is_floating_point::value && !std::is_pointer::value && !std::is_integral::value), int>::type = 0> + tlfloat_quad(const fptype& s) { memcpy(&value, &s, sizeof(tlfloat_quad_)); } + + template::value && + !std::is_same::value && !std::is_same::value && +#if !defined(TLFLOAT_COMPILER_SUPPORTS_INT128) + !std::is_same::value && !std::is_same::value && +#endif + !std::is_floating_point::value && !std::is_pointer::value && !std::is_integral::value), int>::type = 0> + explicit operator fptype() const { + fptype ret; + memcpy(&ret, &value, sizeof(tlfloat_quad_)); + return ret; + } + + // + + tlfloat_quad operator+(const tlfloat_quad& rhs) const { return tlfloat_addq(value, rhs.value); } + tlfloat_quad operator-(const tlfloat_quad& rhs) const { return tlfloat_subq(value, rhs.value); } + tlfloat_quad operator*(const tlfloat_quad& rhs) const { return tlfloat_mulq(value, rhs.value); } + tlfloat_quad operator/(const tlfloat_quad& rhs) const { return tlfloat_divq(value, rhs.value); } + + tlfloat_quad operator-() const { return tlfloat_negq(value); } + tlfloat_quad operator+() const { return *this; } + + bool operator==(const tlfloat_quad& rhs) const { return tlfloat_eq_q_q(value, rhs.value); } + bool operator!=(const tlfloat_quad& rhs) const { return tlfloat_ne_q_q(value, rhs.value); } + bool operator< (const tlfloat_quad& rhs) const { return tlfloat_lt_q_q(value, rhs.value); } + bool operator<=(const tlfloat_quad& rhs) const { return tlfloat_le_q_q(value, rhs.value); } + bool operator> (const tlfloat_quad& rhs) const { return tlfloat_gt_q_q(value, rhs.value); } + bool operator>=(const tlfloat_quad& rhs) const { return tlfloat_ge_q_q(value, rhs.value); } + + tlfloat_quad& operator++() { *this = tlfloat_addq(value, tlfloat_cast_q_i64_(1)); return *this; } + tlfloat_quad& operator--() { *this = tlfloat_subq(value, tlfloat_cast_q_i64_(1)); return *this; } + tlfloat_quad operator++(int) { tlfloat_quad t = *this; *this = tlfloat_addq(value, tlfloat_cast_q_i64_(1)); return t; } + tlfloat_quad operator--(int) { tlfloat_quad t = *this; *this = tlfloat_subq(value, tlfloat_cast_q_i64_(1)); return t; } +}; + +/** This macro is defined iff tlfloat_quad is not an alias of + __float128, but a struct defined in tlfloat.h. */ +#define TLFLOAT_QUAD_IS_STRUCT +#else // #if (defined(__cplusplus) && !defined(TLFLOAT_COMPILER_SUPPORTS_FLOAT128) && !defined(TLFLOAT_LONGDOUBLE_IS_FLOAT128)) && !defined(TLFLOAT_COMPILER_SUPPORTS_ISOFLOAT128)) || defined(TLFLOAT_DOXYGEN) +typedef tlfloat_quad_ tlfloat_quad; +#endif + +#if defined(__cplusplus) || defined(TLFLOAT_DOXYGEN) +/** tlfloat_octuple is a trivially copyable type for handling + * octuple-precision IEEE floating-point numbers in C and older + * C++11. The data size and data structure of this type are the same + * as an octuple-precision floating-point number. When compling C + * code, this type is an alias for tlfloat_octuple_. When compling C++ + * code, this is a struct encapsulating a tlfloat_octuple_ variable + * with operators overloaded. */ +struct tlfloat_octuple { + tlfloat_octuple_ value; + + tlfloat_octuple() { value.e[0] = value.e[1] = value.e[2] = value.e[3] = 0; } + + // Conversion to/from the corresponding C type + constexpr tlfloat_octuple(const tlfloat_octuple_& v) : value(v) {} + constexpr operator tlfloat_octuple_() const { return value; } + + // Upcast / downcast + tlfloat_octuple(const tlfloat_quad& v) : value(tlfloat_cast_o_q(v)) {} + explicit operator tlfloat_quad() const { return tlfloat_cast_q_o(value); } + + // Conversion to/from double + tlfloat_octuple(const double& d) : value(tlfloat_cast_o_d_(d)) {} + explicit operator double() const { return tlfloat_cast_d_o(value); } + + // Conversion to/from integral types + template::value && (sizeof(T) < 8 || !std::is_unsigned::value)), int>::type = 0> + tlfloat_octuple(const T& i) : value(tlfloat_cast_o_i64_(i)) {} + template::value && std::is_unsigned::value && sizeof(T) == 8), int>::type = 0> + tlfloat_octuple(const T& u) : value(tlfloat_cast_o_u64_(u)) {} + template::value && (sizeof(T) < 8 || !std::is_unsigned::value)), int>::type = 0> + explicit operator T() const { return tlfloat_cast_i64_o(value); } + template::value && std::is_unsigned::value && sizeof(T) == 8), int>::type = 0> + explicit operator T() const { return tlfloat_cast_u64_o(value); } + + tlfloat_octuple(const tlfloat_int128_t_& i); + tlfloat_octuple(const tlfloat_uint128_t_& u); + explicit operator tlfloat_int128_t_() const; + explicit operator tlfloat_uint128_t_() const; + +#if !defined(TLFLOAT_COMPILER_SUPPORTS_INT128) + tlfloat_octuple(const struct tlfloat_int128_t& i); + tlfloat_octuple(const struct tlfloat_uint128_t& u); +#endif + + /** Any non-integer object is memcpy-ed */ + template::value && + !std::is_floating_point::value && !std::is_pointer::value && !std::is_integral::value), int>::type = 0> + tlfloat_octuple(const fptype& s) { memcpy(&value, &s, sizeof(tlfloat_octuple_)); } + + template::value && + !std::is_floating_point::value && !std::is_pointer::value && !std::is_integral::value), int>::type = 0> + explicit operator fptype() const { + fptype ret; + memcpy(&ret, &value, sizeof(tlfloat_octuple_)); + return ret; + } + + // + + tlfloat_octuple operator+(const tlfloat_octuple& rhs) const { return tlfloat_addo(value, rhs.value); } + tlfloat_octuple operator-(const tlfloat_octuple& rhs) const { return tlfloat_subo(value, rhs.value); } + tlfloat_octuple operator*(const tlfloat_octuple& rhs) const { return tlfloat_mulo(value, rhs.value); } + tlfloat_octuple operator/(const tlfloat_octuple& rhs) const { return tlfloat_divo(value, rhs.value); } + + tlfloat_octuple operator-() const { return tlfloat_nego(value); } + tlfloat_octuple operator+() const { return *this; } + + bool operator==(const tlfloat_octuple& rhs) const { return tlfloat_eq_o_o(value, rhs.value); } + bool operator!=(const tlfloat_octuple& rhs) const { return tlfloat_ne_o_o(value, rhs.value); } + bool operator< (const tlfloat_octuple& rhs) const { return tlfloat_lt_o_o(value, rhs.value); } + bool operator<=(const tlfloat_octuple& rhs) const { return tlfloat_le_o_o(value, rhs.value); } + bool operator> (const tlfloat_octuple& rhs) const { return tlfloat_gt_o_o(value, rhs.value); } + bool operator>=(const tlfloat_octuple& rhs) const { return tlfloat_ge_o_o(value, rhs.value); } + + tlfloat_octuple& operator++() { *this = tlfloat_addo(value, tlfloat_cast_o_i64_(1)); return *this; } + tlfloat_octuple& operator--() { *this = tlfloat_subo(value, tlfloat_cast_o_i64_(1)); return *this; } + tlfloat_octuple operator++(int) { tlfloat_octuple t = *this; *this = tlfloat_addo(value, tlfloat_cast_o_i64_(1)); return t; } + tlfloat_octuple operator--(int) { tlfloat_octuple t = *this; *this = tlfloat_subo(value, tlfloat_cast_o_i64_(1)); return t; } +}; + +#define TLFLOAT_OCTUPLE_IS_STRUCT +#else // #if defined(__cplusplus) || defined(TLFLOAT_DOXYGEN) +typedef tlfloat_octuple_ tlfloat_octuple; +#endif + +#if (defined(__cplusplus) && !defined(TLFLOAT_COMPILER_SUPPORTS_INT128)) || defined(TLFLOAT_DOXYGEN) +/** tlfloat_int128_t is a trivially copyable type for handling 128-bit + * signed integer in C and C++11. The data size and data structure of + * this type are the same as ordinary integer types. When compling C + * code, this type is an alias for tlfloat_int128_t_. When compling + * C++ code without __int128_t support, this is a struct encapsulating + * a tlfloat_int128_t variable with operators overloaded. */ +struct tlfloat_int128_t { + tlfloat_int128_t_ value; + + tlfloat_int128_t() { value.e[0] = value.e[1] = 0; } + + // Conversion to/from the corresponding C type + tlfloat_int128_t(const tlfloat_int128_t_& v) : value(v) {} + operator tlfloat_int128_t_() const { return value; } + + // Conversion to/from double + explicit tlfloat_int128_t(const double& d) : value(tlfloat_cast_i128_d_(d)) {} + explicit operator double() const { return tlfloat_cast_d_i128(value); } + + // Conversion to/from tlfloat_uint128_ + explicit tlfloat_int128_t(const tlfloat_uint128_t_& d); + explicit operator tlfloat_uint128_t_() const; + + // Conversion to/from integral types + template::value && !std::is_unsigned::value && sizeof(T) <= 8), int>::type = 0> + tlfloat_int128_t(const T& i) : value(tlfloat_cast_i128_i64_(i)) {} + template::value && std::is_unsigned::value && sizeof(T) < 8), int>::type = 0> + explicit tlfloat_int128_t(const T& u) : value(tlfloat_cast_i128_i64_((int64_t)u)) {} + template::value && std::is_unsigned::value && sizeof(T) == 8), int>::type = 0> + explicit tlfloat_int128_t(const T& u) : value((tlfloat_int128_t)tlfloat_cast_u128_u64_(u)) {} + template::value && !std::is_unsigned::value && sizeof(T) <= 8), int>::type = 0> + explicit operator T() const { return tlfloat_cast_i64_i128(value); } + template::value && std::is_unsigned::value && sizeof(T) <= 8), int>::type = 0> + explicit operator T() const { tlfloat_uint128_t_ v; memcpy(&v, &value, sizeof(v)); return tlfloat_cast_u64_u128(v); } + +#ifdef __BIGINT_HPP_INCLUDED__ + tlfloat_int128_t(const tlfloat::BigInt<7>& d) { memcpy((void *)this, (void *)&d, sizeof(*this)); } + operator tlfloat::BigInt<7>() const { tlfloat::BigInt<7> v; memcpy((void *)&v, (void *)this, sizeof(v)); return v; } +#endif + + explicit tlfloat_int128_t(const tlfloat_quad_& f) : value(tlfloat_cast_i128_q(f)) {} + explicit operator tlfloat_quad_() const { return tlfloat_cast_q_i128(value); } + explicit tlfloat_int128_t(const tlfloat_octuple_& f) : value(tlfloat_cast_i128_o(f)) {} + explicit operator tlfloat_octuple_() const { return tlfloat_cast_o_i128(value); } + + // + + tlfloat_int128_t operator+(const tlfloat_int128_t& rhs) const { return tlfloat_add_i128_i128(value, rhs.value); } + tlfloat_int128_t operator-(const tlfloat_int128_t& rhs) const { return tlfloat_sub_i128_i128(value, rhs.value); } + tlfloat_int128_t operator*(const tlfloat_int128_t& rhs) const { return tlfloat_mul_i128_i128(value, rhs.value); } + tlfloat_int128_t operator/(const tlfloat_int128_t& rhs) const { return tlfloat_div_i128_i128(value, rhs.value); } + tlfloat_int128_t operator%(const tlfloat_int128_t& rhs) const { return tlfloat_mod_i128_i128(value, rhs.value); } + + tlfloat_int128_t operator-() const { return tlfloat_neg_i128(value); } + tlfloat_int128_t operator+() const { return *this; } + + tlfloat_int128_t operator&(const tlfloat_int128_t& rhs) const { return tlfloat_and_i128_i128(value, rhs.value); } + tlfloat_int128_t operator|(const tlfloat_int128_t& rhs) const { return tlfloat_or_i128_i128 (value, rhs.value); } + tlfloat_int128_t operator^(const tlfloat_int128_t& rhs) const { return tlfloat_xor_i128_i128(value, rhs.value); } + tlfloat_int128_t operator~() const { return tlfloat_not_i128(value); } + + tlfloat_int128_t operator<<(const int& rhs) const { return tlfloat_shl_i128_i(value, rhs); } + tlfloat_int128_t operator>>(const int& rhs) const { return tlfloat_shr_i128_i(value, rhs); } + tlfloat_int128_t& operator<<=(int n) { *this = *this << n; return *this; } + tlfloat_int128_t& operator>>=(int n) { *this = *this >> n; return *this; } + + bool operator==(const tlfloat_int128_t& rhs) const { return tlfloat_eq_i128_i128(value, rhs.value); } + bool operator!=(const tlfloat_int128_t& rhs) const { return tlfloat_ne_i128_i128(value, rhs.value); } + bool operator< (const tlfloat_int128_t& rhs) const { return tlfloat_lt_i128_i128(value, rhs.value); } + bool operator<=(const tlfloat_int128_t& rhs) const { return tlfloat_le_i128_i128(value, rhs.value); } + bool operator> (const tlfloat_int128_t& rhs) const { return tlfloat_gt_i128_i128(value, rhs.value); } + bool operator>=(const tlfloat_int128_t& rhs) const { return tlfloat_ge_i128_i128(value, rhs.value); } + + tlfloat_int128_t& operator++() { *this = tlfloat_add_i128_i128(value, tlfloat_cast_i128_i64_(1)); return *this; } + tlfloat_int128_t& operator--() { *this = tlfloat_sub_i128_i128(value, tlfloat_cast_i128_i64_(1)); return *this; } + tlfloat_int128_t operator++(int) { tlfloat_int128_t t = *this; *this = tlfloat_add_i128_i128(value, tlfloat_cast_i128_i64_(1)); return t; } + tlfloat_int128_t operator--(int) { tlfloat_int128_t t = *this; *this = tlfloat_sub_i128_i128(value, tlfloat_cast_i128_i64_(1)); return t; } +}; + +/** tlfloat_uint128_t is a trivially copyable type for handling + * 128-bit unsigned integer in C and C++11. The data size and data + * structure of this type are the same as ordinary integer types. When + * compling C code, this type is an alias for tlfloat_uint128_t_. When + * compling C++ code without __uint128_t support, this is a struct + * encapsulating a tlfloat_int128_t variable with operators + * overloaded. */ +struct tlfloat_uint128_t { + tlfloat_uint128_t_ value; + + tlfloat_uint128_t() { value.e[0] = value.e[1] = 0; } + + // Conversion to/from the corresponding C type + tlfloat_uint128_t(const tlfloat_uint128_t_& v) : value(v) {} + operator tlfloat_uint128_t_() const { return value; } + + // Conversion to/from double + explicit tlfloat_uint128_t(const double& d) : value(tlfloat_cast_u128_d_(d)) {} + explicit operator double() const { return tlfloat_cast_d_u128(value); } + + // Conversion to/from tlfloat_int128_t + explicit tlfloat_uint128_t(const tlfloat_int128_t& d) { memcpy((void *)this, (void *)&d, sizeof(*this)); } + explicit operator tlfloat_int128_t() const { tlfloat_int128_t v; memcpy((void *)&v, (void *)this, sizeof(v)); return v; } + + // Conversion to/from integral types + template::value && !std::is_unsigned::value && sizeof(T) <= 8), int>::type = 0> + explicit tlfloat_uint128_t(const T& i) : value(tlfloat_cast_u128_u64_(i)) {} + template::value && std::is_unsigned::value && sizeof(T) <= 8), int>::type = 0> + tlfloat_uint128_t(const T& u) : value(tlfloat_cast_u128_u64_(u)) {} + template::value && !std::is_unsigned::value && sizeof(T) <= 8), int>::type = 0> + explicit operator T() const { tlfloat_int128_t_ v; memcpy(&v, &value, sizeof(v)); return (T)tlfloat_cast_i64_i128(v); } + template::value && std::is_unsigned::value && sizeof(T) <= 8), int>::type = 0> + explicit operator T() const { return (T)tlfloat_cast_u64_u128(value); } + +#ifdef __BIGINT_HPP_INCLUDED__ + tlfloat_uint128_t(const tlfloat::BigUInt<7>& d) { memcpy((void *)this, (void *)&d, sizeof(*this)); } + operator tlfloat::BigUInt<7>() const { tlfloat::BigUInt<7> v; memcpy((void *)&v, (void *)this, sizeof(v)); return v; } +#endif + + explicit tlfloat_uint128_t(const tlfloat_quad_& f) : value(tlfloat_cast_u128_q(f)) {} + explicit operator tlfloat_quad_() const { return tlfloat_cast_q_u128(value); } + explicit tlfloat_uint128_t(const tlfloat_octuple_& f) : value(tlfloat_cast_u128_o(f)) {} + explicit operator tlfloat_octuple_() const { return tlfloat_cast_o_u128(value); } + + // + + tlfloat_uint128_t operator+(const tlfloat_uint128_t& rhs) const { return tlfloat_add_u128_u128(value, rhs.value); } + tlfloat_uint128_t operator-(const tlfloat_uint128_t& rhs) const { return tlfloat_sub_u128_u128(value, rhs.value); } + tlfloat_uint128_t operator*(const tlfloat_uint128_t& rhs) const { return tlfloat_mul_u128_u128(value, rhs.value); } + tlfloat_uint128_t operator/(const tlfloat_uint128_t& rhs) const { return tlfloat_div_u128_u128(value, rhs.value); } + tlfloat_uint128_t operator%(const tlfloat_uint128_t& rhs) const { return tlfloat_mod_u128_u128(value, rhs.value); } + + tlfloat_uint128_t operator-() const { return (tlfloat_uint128_t)tlfloat_neg_i128((tlfloat_int128_t)value); } + tlfloat_uint128_t operator+() const { return *this; } + + tlfloat_uint128_t operator&(const tlfloat_uint128_t& rhs) const { return tlfloat_and_u128_u128(value, rhs.value); } + tlfloat_uint128_t operator|(const tlfloat_uint128_t& rhs) const { return tlfloat_or_u128_u128 (value, rhs.value); } + tlfloat_uint128_t operator^(const tlfloat_uint128_t& rhs) const { return tlfloat_xor_u128_u128(value, rhs.value); } + tlfloat_uint128_t operator~() const { return tlfloat_not_u128(value); } + + tlfloat_uint128_t operator<<(const int& rhs) const { return tlfloat_shl_u128_i(value, rhs); } + tlfloat_uint128_t operator>>(const int& rhs) const { return tlfloat_shr_u128_i(value, rhs); } + tlfloat_uint128_t& operator<<=(int n) { *this = *this << n; return *this; } + tlfloat_uint128_t& operator>>=(int n) { *this = *this >> n; return *this; } + + bool operator==(const tlfloat_uint128_t& rhs) const { return tlfloat_eq_u128_u128(value, rhs.value); } + bool operator!=(const tlfloat_uint128_t& rhs) const { return tlfloat_ne_u128_u128(value, rhs.value); } + bool operator< (const tlfloat_uint128_t& rhs) const { return tlfloat_lt_u128_u128(value, rhs.value); } + bool operator<=(const tlfloat_uint128_t& rhs) const { return tlfloat_le_u128_u128(value, rhs.value); } + bool operator> (const tlfloat_uint128_t& rhs) const { return tlfloat_gt_u128_u128(value, rhs.value); } + bool operator>=(const tlfloat_uint128_t& rhs) const { return tlfloat_ge_u128_u128(value, rhs.value); } + + tlfloat_uint128_t& operator++() { *this = tlfloat_add_u128_u128(value, tlfloat_cast_u128_u64_(1)); return *this; } + tlfloat_uint128_t& operator--() { *this = tlfloat_sub_u128_u128(value, tlfloat_cast_u128_u64_(1)); return *this; } + tlfloat_uint128_t operator++(int) { tlfloat_uint128_t t = *this; *this = tlfloat_add_u128_u128(value, tlfloat_cast_u128_u64_(1)); return t; } + tlfloat_uint128_t operator--(int) { tlfloat_uint128_t t = *this; *this = tlfloat_sub_u128_u128(value, tlfloat_cast_u128_u64_(1)); return t; } +}; + +inline tlfloat_int128_t::tlfloat_int128_t(const tlfloat_uint128_t_& d) { memcpy((void *)this, (void *)&d, sizeof(*this)); } +inline tlfloat_int128_t::operator tlfloat_uint128_t_() const { tlfloat_uint128_t v; memcpy((void *)&v, (void *)this, sizeof(v)); return v; } + +/** This macro is defined iff tlfloat_int128_t and tlfloat_uint128_t + are not aliases of __int128_t and __uint128_t, but structs defined + in tlfloat.h. */ +#define TLFLOAT_INT128_IS_STRUCT +#else +typedef tlfloat_int128_t_ tlfloat_int128_t; +typedef tlfloat_uint128_t_ tlfloat_uint128_t; +#endif // #if (defined(__cplusplus) && !defined(TLFLOAT_COMPILER_SUPPORTS_INT128)) || defined(TLFLOAT_DOXYGEN) + +#if defined(__cplusplus) || defined(TLFLOAT_DOXYGEN) +inline tlfloat_octuple::tlfloat_octuple(const tlfloat_int128_t_& i) : value(tlfloat_cast_o_i128(i)) {} +inline tlfloat_octuple::tlfloat_octuple(const tlfloat_uint128_t_& u) : value(tlfloat_cast_o_u128(u)) {} +inline tlfloat_octuple::operator tlfloat_int128_t_() const { return tlfloat_cast_i128_o(value); } +inline tlfloat_octuple::operator tlfloat_uint128_t_() const { return tlfloat_cast_u128_o(value); } +#if !defined(TLFLOAT_COMPILER_SUPPORTS_INT128) +inline tlfloat_octuple::tlfloat_octuple(const struct tlfloat_int128_t& i) : value(tlfloat_cast_o_i128(i)) {} +inline tlfloat_octuple::tlfloat_octuple(const struct tlfloat_uint128_t& u) : value(tlfloat_cast_o_u128(u)) {} +#endif +#endif + +#if defined(TLFLOAT_COMPILER_SUPPORTS_FLOAT128) || defined(TLFLOAT_DOXYGEN) +#define TLFLOAT_M_Eq 0x1.5bf0a8b1457695355fb8ac404e7ap+1Q +#define TLFLOAT_M_LOG2Eq 0x1.71547652b82fe1777d0ffda0d23ap+0Q +#define TLFLOAT_M_LOG10Eq 0x1.bcb7b1526e50e32a6ab7555f5a68p-2Q +#define TLFLOAT_M_LN2q 0x1.62e42fefa39ef35793c7673007e6p-1Q +#define TLFLOAT_M_LN10q 0x1.26bb1bbb5551582dd4adac5705a6p+1Q +#define TLFLOAT_M_PIq 0x1.921fb54442d18469898cc51701b8p+1Q +#define TLFLOAT_M_PI_2q 0x1.921fb54442d18469898cc51701b8p+0Q +#define TLFLOAT_M_PI_4q 0x1.921fb54442d18469898cc51701b8p-1Q +#define TLFLOAT_M_1_PIq 0x1.45f306dc9c882a53f84eafa3ea6ap-2Q +#define TLFLOAT_M_2_PIq 0x1.45f306dc9c882a53f84eafa3ea6ap-1Q +#define TLFLOAT_M_2_SQRTPIq 0x1.20dd750429b6d11ae3a914fed7fep+0Q +#define TLFLOAT_M_SQRT2q 0x1.6a09e667f3bcc908b2fb1366ea95p+0Q +#define TLFLOAT_M_SQRT1_2q 0x1.6a09e667f3bcc908b2fb1366ea95p-1Q +#define TLFLOAT_FLT128_MAX 0x1.ffffffffffffffffffffffffffffp+16383Q +#define TLFLOAT_FLT128_MIN 0x1p-16382Q +#define TLFLOAT_FLT128_DENORM_MIN 0x0.0000000000000000000000000001p-16382Q +#define TLFLOAT_FLT128_TRUE_MIN 0x0.0000000000000000000000000001p-16382Q +#define TLFLOAT_FLT128_EPSILON 0x1p-112Q +#elif defined(TLFLOAT_LONGDOUBLE_IS_FLOAT128) +#define TLFLOAT_M_Eq 0x1.5bf0a8b1457695355fb8ac404e7ap+1L +#define TLFLOAT_M_LOG2Eq 0x1.71547652b82fe1777d0ffda0d23ap+0L +#define TLFLOAT_M_LOG10Eq 0x1.bcb7b1526e50e32a6ab7555f5a68p-2L +#define TLFLOAT_M_LN2q 0x1.62e42fefa39ef35793c7673007e6p-1L +#define TLFLOAT_M_LN10q 0x1.26bb1bbb5551582dd4adac5705a6p+1L +#define TLFLOAT_M_PIq 0x1.921fb54442d18469898cc51701b8p+1L +#define TLFLOAT_M_PI_2q 0x1.921fb54442d18469898cc51701b8p+0L +#define TLFLOAT_M_PI_4q 0x1.921fb54442d18469898cc51701b8p-1L +#define TLFLOAT_M_1_PIq 0x1.45f306dc9c882a53f84eafa3ea6ap-2L +#define TLFLOAT_M_2_PIq 0x1.45f306dc9c882a53f84eafa3ea6ap-1L +#define TLFLOAT_M_2_SQRTPIq 0x1.20dd750429b6d11ae3a914fed7fep+0L +#define TLFLOAT_M_SQRT2q 0x1.6a09e667f3bcc908b2fb1366ea95p+0L +#define TLFLOAT_M_SQRT1_2q 0x1.6a09e667f3bcc908b2fb1366ea95p-1L +#define TLFLOAT_FLT128_MAX 0x1.ffffffffffffffffffffffffffffp+16383L +#define TLFLOAT_FLT128_MIN 0x1p-16382L +#define TLFLOAT_FLT128_DENORM_MIN 0x0.0000000000000000000000000001p-16382L +#define TLFLOAT_FLT128_TRUE_MIN 0x0.0000000000000000000000000001p-16382L +#define TLFLOAT_FLT128_EPSILON 0x1p-112L +#elif defined(TLFLOAT_COMPILER_SUPPORTS_ISOFLOAT128) +#define TLFLOAT_M_Eq 0x1.5bf0a8b1457695355fb8ac404e7ap+1F128 +#define TLFLOAT_M_LOG2Eq 0x1.71547652b82fe1777d0ffda0d23ap+0F128 +#define TLFLOAT_M_LOG10Eq 0x1.bcb7b1526e50e32a6ab7555f5a68p-2F128 +#define TLFLOAT_M_LN2q 0x1.62e42fefa39ef35793c7673007e6p-1F128 +#define TLFLOAT_M_LN10q 0x1.26bb1bbb5551582dd4adac5705a6p+1F128 +#define TLFLOAT_M_PIq 0x1.921fb54442d18469898cc51701b8p+1F128 +#define TLFLOAT_M_PI_2q 0x1.921fb54442d18469898cc51701b8p+0F128 +#define TLFLOAT_M_PI_4q 0x1.921fb54442d18469898cc51701b8p-1F128 +#define TLFLOAT_M_1_PIq 0x1.45f306dc9c882a53f84eafa3ea6ap-2F128 +#define TLFLOAT_M_2_PIq 0x1.45f306dc9c882a53f84eafa3ea6ap-1F128 +#define TLFLOAT_M_2_SQRTPIq 0x1.20dd750429b6d11ae3a914fed7fep+0F128 +#define TLFLOAT_M_SQRT2q 0x1.6a09e667f3bcc908b2fb1366ea95p+0F128 +#define TLFLOAT_M_SQRT1_2q 0x1.6a09e667f3bcc908b2fb1366ea95p-1F128 +#define TLFLOAT_FLT128_MAX 0x1.ffffffffffffffffffffffffffffp+16383F128 +#define TLFLOAT_FLT128_MIN 0x1p-16382F128 +#define TLFLOAT_FLT128_DENORM_MIN 0x0.0000000000000000000000000001p-16382F128 +#define TLFLOAT_FLT128_TRUE_MIN 0x0.0000000000000000000000000001p-16382F128 +#define TLFLOAT_FLT128_EPSILON 0x1p-112F128 +#elif defined(__cplusplus) +#if !defined(__BYTE_ORDER__) || (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__) +static inline constexpr tlfloat_quad tlfloat_constq(uint64_t h, uint64_t l) { return tlfloat_quad_ { l, h }; } +#else +static inline constexpr tlfloat_quad tlfloat_constq(uint64_t h, uint64_t l) { return tlfloat_quad_ { h, l }; } +#endif + +#define TLFLOAT_M_Eq tlfloat_constq( 0x40005bf0a8b14576, 0x95355fb8ac404e7a ) +#define TLFLOAT_M_LOG2Eq tlfloat_constq( 0x3fff71547652b82f, 0xe1777d0ffda0d23a ) +#define TLFLOAT_M_LOG10Eq tlfloat_constq( 0x3ffdbcb7b1526e50, 0xe32a6ab7555f5a68 ) +#define TLFLOAT_M_LN2q tlfloat_constq( 0x3ffe62e42fefa39e, 0xf35793c7673007e6 ) +#define TLFLOAT_M_LN10q tlfloat_constq( 0x400026bb1bbb5551, 0x582dd4adac5705a6 ) +#define TLFLOAT_M_PIq tlfloat_constq( 0x4000921fb54442d1, 0x8469898cc51701b8 ) +#define TLFLOAT_M_PI_2q tlfloat_constq( 0x3fff921fb54442d1, 0x8469898cc51701b8 ) +#define TLFLOAT_M_PI_4q tlfloat_constq( 0x3ffe921fb54442d1, 0x8469898cc51701b8 ) +#define TLFLOAT_M_1_PIq tlfloat_constq( 0x3ffd45f306dc9c88, 0x2a53f84eafa3ea6a ) +#define TLFLOAT_M_2_PIq tlfloat_constq( 0x3ffe45f306dc9c88, 0x2a53f84eafa3ea6a ) +#define TLFLOAT_M_2_SQRTPIq tlfloat_constq( 0x3fff20dd750429b6, 0xd11ae3a914fed7fe ) +#define TLFLOAT_M_SQRT2q tlfloat_constq( 0x3fff6a09e667f3bc, 0xc908b2fb1366ea95 ) +#define TLFLOAT_M_SQRT1_2q tlfloat_constq( 0x3ffe6a09e667f3bc, 0xc908b2fb1366ea95 ) +#define TLFLOAT_FLT128_MAX tlfloat_constq( 0x7ffeffffffffffff, 0xffffffffffffffff ) +#define TLFLOAT_FLT128_MIN tlfloat_constq( 0x0001000000000000, 0x0000000000000000 ) +#define TLFLOAT_FLT128_DENORM_MIN tlfloat_constq( 0x0000000000000000, 0x0000000000000001 ) +#define TLFLOAT_FLT128_TRUE_MIN tlfloat_constq( 0x0000000000000000, 0x0000000000000001 ) +#define TLFLOAT_FLT128_EPSILON tlfloat_constq( 0x3f8f000000000000, 0x0000000000000000 ) +#elif defined(__STDC_VERSION__) + +#if !defined(__BYTE_ORDER__) || (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__) +#define TLFLOAT_M_Eq ((tlfloat_quad_) { 0x95355fb8ac404e7a, 0x40005bf0a8b14576 }) +#define TLFLOAT_M_LOG2Eq ((tlfloat_quad_) { 0xe1777d0ffda0d23a, 0x3fff71547652b82f }) +#define TLFLOAT_M_LOG10Eq ((tlfloat_quad_) { 0xe32a6ab7555f5a68, 0x3ffdbcb7b1526e50 }) +#define TLFLOAT_M_LN2q ((tlfloat_quad_) { 0xf35793c7673007e6, 0x3ffe62e42fefa39e }) +#define TLFLOAT_M_LN10q ((tlfloat_quad_) { 0x582dd4adac5705a6, 0x400026bb1bbb5551 }) +#define TLFLOAT_M_PIq ((const tlfloat_quad_) { 0x8469898cc51701b8, 0x4000921fb54442d1 }) +#define TLFLOAT_M_PI_2q ((tlfloat_quad_) { 0x8469898cc51701b8, 0x3fff921fb54442d1 }) +#define TLFLOAT_M_PI_4q ((tlfloat_quad_) { 0x8469898cc51701b8, 0x3ffe921fb54442d1 }) +#define TLFLOAT_M_1_PIq ((tlfloat_quad_) { 0x2a53f84eafa3ea6a, 0x3ffd45f306dc9c88 }) +#define TLFLOAT_M_2_PIq ((tlfloat_quad_) { 0x2a53f84eafa3ea6a, 0x3ffe45f306dc9c88 }) +#define TLFLOAT_M_2_SQRTPIq ((tlfloat_quad_) { 0xd11ae3a914fed7fe, 0x3fff20dd750429b6 }) +#define TLFLOAT_M_SQRT2q ((tlfloat_quad_) { 0xc908b2fb1366ea95, 0x3fff6a09e667f3bc }) +#define TLFLOAT_M_SQRT1_2q ((tlfloat_quad_) { 0xc908b2fb1366ea95, 0x3ffe6a09e667f3bc }) +#define TLFLOAT_FLT128_MAX ((tlfloat_quad_) { 0xffffffffffffffff, 0x7ffeffffffffffff }) +#define TLFLOAT_FLT128_MIN ((tlfloat_quad_) { 0x0000000000000000, 0x0001000000000000 }) +#define TLFLOAT_FLT128_DENORM_MIN ((tlfloat_quad_) { 0x0000000000000001, 0x0000000000000000 }) +#define TLFLOAT_FLT128_TRUE_MIN ((tlfloat_quad_) { 0x0000000000000001, 0x0000000000000000 }) +#define TLFLOAT_FLT128_EPSILON ((tlfloat_quad_) { 0x0000000000000000, 0x3f8f000000000000 }) +#else +#define TLFLOAT_M_Eq ((tlfloat_quad_) { 0x40005bf0a8b14576, 0x95355fb8ac404e7a }) +#define TLFLOAT_M_LOG2Eq ((tlfloat_quad_) { 0x3fff71547652b82f, 0xe1777d0ffda0d23a }) +#define TLFLOAT_M_LOG10Eq ((tlfloat_quad_) { 0x3ffdbcb7b1526e50, 0xe32a6ab7555f5a68 }) +#define TLFLOAT_M_LN2q ((tlfloat_quad_) { 0x3ffe62e42fefa39e, 0xf35793c7673007e6 }) +#define TLFLOAT_M_LN10q ((tlfloat_quad_) { 0x400026bb1bbb5551, 0x582dd4adac5705a6 }) +#define TLFLOAT_M_PIq ((const tlfloat_quad_) { 0x4000921fb54442d1, 0x8469898cc51701b8 }) +#define TLFLOAT_M_PI_2q ((tlfloat_quad_) { 0x3fff921fb54442d1, 0x8469898cc51701b8 }) +#define TLFLOAT_M_PI_4q ((tlfloat_quad_) { 0x3ffe921fb54442d1, 0x8469898cc51701b8 }) +#define TLFLOAT_M_1_PIq ((tlfloat_quad_) { 0x3ffd45f306dc9c88, 0x2a53f84eafa3ea6a }) +#define TLFLOAT_M_2_PIq ((tlfloat_quad_) { 0x3ffe45f306dc9c88, 0x2a53f84eafa3ea6a }) +#define TLFLOAT_M_2_SQRTPIq ((tlfloat_quad_) { 0x3fff20dd750429b6, 0xd11ae3a914fed7fe }) +#define TLFLOAT_M_SQRT2q ((tlfloat_quad_) { 0x3fff6a09e667f3bc, 0xc908b2fb1366ea95 }) +#define TLFLOAT_M_SQRT1_2q ((tlfloat_quad_) { 0x3ffe6a09e667f3bc, 0xc908b2fb1366ea95 }) +#define TLFLOAT_FLT128_MAX ((tlfloat_quad_) { 0x7ffeffffffffffff, 0xffffffffffffffff }) +#define TLFLOAT_FLT128_MIN ((tlfloat_quad_) { 0x0001000000000000, 0x0000000000000000 }) +#define TLFLOAT_FLT128_DENORM_MIN ((tlfloat_quad_) { 0x0000000000000000, 0x0000000000000001 }) +#define TLFLOAT_FLT128_TRUE_MIN ((tlfloat_quad_) { 0x0000000000000000, 0x0000000000000001 }) +#define TLFLOAT_FLT128_EPSILON ((tlfloat_quad_) { 0x3f8f000000000000, 0x0000000000000000 }) +#endif + +#endif + +#if defined(__cplusplus) +#if !defined(__BYTE_ORDER__) || (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__) +static inline constexpr tlfloat_octuple tlfloat_consto(uint64_t w0, uint64_t w1, uint64_t w2, uint64_t w3) { return tlfloat_octuple_ { w3, w2, w1, w0 }; } +#else +static inline constexpr tlfloat_octuple tlfloat_consto(uint64_t w0, uint64_t w1, uint64_t w2, uint64_t w3) { return tlfloat_octuple_ { w0, w1, w2, w3 }; } +#endif + +#define TLFLOAT_M_Eo tlfloat_consto(0x400005bf0a8b1457LL, 0x695355fb8ac404e7LL, 0xa79e3b1738b079c5LL, 0xa6d2b53c26c8228dLL) +#define TLFLOAT_M_LOG2Eo tlfloat_consto(0x3ffff71547652b82LL, 0xfe1777d0ffda0d23LL, 0xa7d11d6aef551badLL, 0x2b4b1164a2cd9a34LL) +#define TLFLOAT_M_LOG10Eo tlfloat_consto(0x3fffdbcb7b1526e5LL, 0x0e32a6ab7555f5a6LL, 0x7b8647dc68c048b9LL, 0x34404747e5a89ef2LL) +#define TLFLOAT_M_LN2o tlfloat_consto(0x3fffe62e42fefa39LL, 0xef35793c7673007eLL, 0x5ed5e81e6864ce53LL, 0x16c5b141a2eb7175LL) +#define TLFLOAT_M_LN10o tlfloat_consto(0x4000026bb1bbb555LL, 0x1582dd4adac5705aLL, 0x61451c51fd9f3b4bLL, 0xbf21d078c3d0403eLL) +#define TLFLOAT_M_PIo tlfloat_consto(0x40000921fb54442dLL, 0x18469898cc51701bLL, 0x839a252049c1114cLL, 0xf98e804177d4c762LL) +#define TLFLOAT_M_PI_2o tlfloat_consto(0x3ffff921fb54442dLL, 0x18469898cc51701bLL, 0x839a252049c1114cLL, 0xf98e804177d4c762LL) +#define TLFLOAT_M_PI_4o tlfloat_consto(0x3fffe921fb54442dLL, 0x18469898cc51701bLL, 0x839a252049c1114cLL, 0xf98e804177d4c762LL) +#define TLFLOAT_M_1_PIo tlfloat_consto(0x3fffd45f306dc9c8LL, 0x82a53f84eafa3ea6LL, 0x9bb81b6c52b32788LL, 0x72083fca2c757bd7LL) +#define TLFLOAT_M_2_PIo tlfloat_consto(0x3fffe45f306dc9c8LL, 0x82a53f84eafa3ea6LL, 0x9bb81b6c52b32788LL, 0x72083fca2c757bd7LL) +#define TLFLOAT_M_2_SQRTPIo tlfloat_consto(0x3ffff20dd750429bLL, 0x6d11ae3a914fed7fLL, 0xd8688281341d7587LL, 0xcea2e7342b06199dLL) +#define TLFLOAT_M_SQRT2o tlfloat_consto(0x3ffff6a09e667f3bLL, 0xcc908b2fb1366ea9LL, 0x57d3e3adec175127LL, 0x75099da2f590b066LL) +#define TLFLOAT_M_SQRT1_2o tlfloat_consto(0x3fffe6a09e667f3bLL, 0xcc908b2fb1366ea9LL, 0x57d3e3adec175127LL, 0x75099da2f590b066LL) +#define TLFLOAT_FLT256_MAX tlfloat_consto(0x7fffefffffffffffLL, 0xffffffffffffffffLL, 0xffffffffffffffffLL, 0xffffffffffffffffLL) +#define TLFLOAT_FLT256_MIN tlfloat_consto(0x0000100000000000LL, 0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000000LL) +#define TLFLOAT_FLT256_DENORM_MIN tlfloat_consto(0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000001LL) +#define TLFLOAT_FLT256_TRUE_MIN tlfloat_consto(0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000001LL) +#define TLFLOAT_FLT256_EPSILON tlfloat_consto(0x3ff1300000000000LL, 0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000000LL) + +#elif defined(__STDC_VERSION__) + +#if !defined(__BYTE_ORDER__) || (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__) +#define TLFLOAT_M_Eo ((tlfloat_octuple_) { 0xa6d2b53c26c8228dLL, 0xa79e3b1738b079c5LL, 0x695355fb8ac404e7LL, 0x400005bf0a8b1457LL }) +#define TLFLOAT_M_LOG2Eo ((tlfloat_octuple_) { 0x2b4b1164a2cd9a34LL, 0xa7d11d6aef551badLL, 0xfe1777d0ffda0d23LL, 0x3ffff71547652b82LL }) +#define TLFLOAT_M_LOG10Eo ((tlfloat_octuple_) { 0x34404747e5a89ef2LL, 0x7b8647dc68c048b9LL, 0x0e32a6ab7555f5a6LL, 0x3fffdbcb7b1526e5LL }) +#define TLFLOAT_M_LN2o ((tlfloat_octuple_) { 0x16c5b141a2eb7175LL, 0x5ed5e81e6864ce53LL, 0xef35793c7673007eLL, 0x3fffe62e42fefa39LL }) +#define TLFLOAT_M_LN10o ((tlfloat_octuple_) { 0xbf21d078c3d0403eLL, 0x61451c51fd9f3b4bLL, 0x1582dd4adac5705aLL, 0x4000026bb1bbb555LL }) +#define TLFLOAT_M_PIo ((tlfloat_octuple_) { 0xf98e804177d4c762LL, 0x839a252049c1114cLL, 0x18469898cc51701bLL, 0x40000921fb54442dLL }) +#define TLFLOAT_M_PI_2o ((tlfloat_octuple_) { 0xf98e804177d4c762LL, 0x839a252049c1114cLL, 0x18469898cc51701bLL, 0x3ffff921fb54442dLL }) +#define TLFLOAT_M_PI_4o ((tlfloat_octuple_) { 0xf98e804177d4c762LL, 0x839a252049c1114cLL, 0x18469898cc51701bLL, 0x3fffe921fb54442dLL }) +#define TLFLOAT_M_1_PIo ((tlfloat_octuple_) { 0x72083fca2c757bd7LL, 0x9bb81b6c52b32788LL, 0x82a53f84eafa3ea6LL, 0x3fffd45f306dc9c8LL }) +#define TLFLOAT_M_2_PIo ((tlfloat_octuple_) { 0x72083fca2c757bd7LL, 0x9bb81b6c52b32788LL, 0x82a53f84eafa3ea6LL, 0x3fffe45f306dc9c8LL }) +#define TLFLOAT_M_2_SQRTPIo ((tlfloat_octuple_) { 0xcea2e7342b06199dLL, 0xd8688281341d7587LL, 0x6d11ae3a914fed7fLL, 0x3ffff20dd750429bLL }) +#define TLFLOAT_M_SQRT2o ((tlfloat_octuple_) { 0x75099da2f590b066LL, 0x57d3e3adec175127LL, 0xcc908b2fb1366ea9LL, 0x3ffff6a09e667f3bLL }) +#define TLFLOAT_M_SQRT1_2o ((tlfloat_octuple_) { 0x75099da2f590b066LL, 0x57d3e3adec175127LL, 0xcc908b2fb1366ea9LL, 0x3fffe6a09e667f3bLL }) +#define TLFLOAT_FLT256_MAX ((tlfloat_octuple_) { 0xffffffffffffffffLL, 0xffffffffffffffffLL, 0xffffffffffffffffLL, 0x7fffefffffffffffLL }) +#define TLFLOAT_FLT256_MIN ((tlfloat_octuple_) { 0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000000LL, 0x0000100000000000LL }) +#define TLFLOAT_FLT256_DENORM_MIN ((tlfloat_octuple_) { 0x0000000000000001LL, 0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000000LL }) +#define TLFLOAT_FLT256_TRUE_MIN ((tlfloat_octuple_) { 0x0000000000000001LL, 0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000000LL }) +#define TLFLOAT_FLT256_EPSILON ((tlfloat_octuple_) { 0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000000LL, 0x3ff1300000000000LL }) +#else +#define TLFLOAT_M_Eo ((tlfloat_octuple_) { 0x400005bf0a8b1457LL, 0x695355fb8ac404e7LL, 0xa79e3b1738b079c5LL, 0xa6d2b53c26c8228dLL }) +#define TLFLOAT_M_LOG2Eo ((tlfloat_octuple_) { 0x3ffff71547652b82LL, 0xfe1777d0ffda0d23LL, 0xa7d11d6aef551badLL, 0x2b4b1164a2cd9a34LL }) +#define TLFLOAT_M_LOG10Eo ((tlfloat_octuple_) { 0x3fffdbcb7b1526e5LL, 0x0e32a6ab7555f5a6LL, 0x7b8647dc68c048b9LL, 0x34404747e5a89ef2LL }) +#define TLFLOAT_M_LN2o ((tlfloat_octuple_) { 0x3fffe62e42fefa39LL, 0xef35793c7673007eLL, 0x5ed5e81e6864ce53LL, 0x16c5b141a2eb7175LL }) +#define TLFLOAT_M_LN10o ((tlfloat_octuple_) { 0x4000026bb1bbb555LL, 0x1582dd4adac5705aLL, 0x61451c51fd9f3b4bLL, 0xbf21d078c3d0403eLL }) +#define TLFLOAT_M_PIo ((tlfloat_octuple_) { 0x40000921fb54442dLL, 0x18469898cc51701bLL, 0x839a252049c1114cLL, 0xf98e804177d4c762LL }) +#define TLFLOAT_M_PI_2o ((tlfloat_octuple_) { 0x3ffff921fb54442dLL, 0x18469898cc51701bLL, 0x839a252049c1114cLL, 0xf98e804177d4c762LL }) +#define TLFLOAT_M_PI_4o ((tlfloat_octuple_) { 0x3fffe921fb54442dLL, 0x18469898cc51701bLL, 0x839a252049c1114cLL, 0xf98e804177d4c762LL }) +#define TLFLOAT_M_1_PIo ((tlfloat_octuple_) { 0x3fffd45f306dc9c8LL, 0x82a53f84eafa3ea6LL, 0x9bb81b6c52b32788LL, 0x72083fca2c757bd7LL }) +#define TLFLOAT_M_2_PIo ((tlfloat_octuple_) { 0x3fffe45f306dc9c8LL, 0x82a53f84eafa3ea6LL, 0x9bb81b6c52b32788LL, 0x72083fca2c757bd7LL }) +#define TLFLOAT_M_2_SQRTPIo ((tlfloat_octuple_) { 0x3ffff20dd750429bLL, 0x6d11ae3a914fed7fLL, 0xd8688281341d7587LL, 0xcea2e7342b06199dLL }) +#define TLFLOAT_M_SQRT2o ((tlfloat_octuple_) { 0x3ffff6a09e667f3bLL, 0xcc908b2fb1366ea9LL, 0x57d3e3adec175127LL, 0x75099da2f590b066LL }) +#define TLFLOAT_M_SQRT1_2o ((tlfloat_octuple_) { 0x3fffe6a09e667f3bLL, 0xcc908b2fb1366ea9LL, 0x57d3e3adec175127LL, 0x75099da2f590b066LL }) +#define TLFLOAT_FLT256_MAX ((tlfloat_octuple_) { 0x7fffefffffffffffLL, 0xffffffffffffffffLL, 0xffffffffffffffffLL, 0xffffffffffffffffLL }) +#define TLFLOAT_FLT256_MIN ((tlfloat_octuple_) { 0x0000100000000000LL, 0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000000LL }) +#define TLFLOAT_FLT256_DENORM_MIN ((tlfloat_octuple_) { 0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000001LL }) +#define TLFLOAT_FLT256_TRUE_MIN ((tlfloat_octuple_) { 0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000001LL }) +#define TLFLOAT_FLT256_EPSILON ((tlfloat_octuple_) { 0x3ff1300000000000LL, 0x0000000000000000LL, 0x0000000000000000LL, 0x0000000000000000LL }) +#endif + +#endif + +#if (defined(__cplusplus) && !defined(TLFLOAT_COMPILER_SUPPORTS_FLOAT128) && !defined(TLFLOAT_LONGDOUBLE_IS_FLOAT128) && !defined(TLFLOAT_COMPILER_SUPPORTS_ISOFLOAT128)) || defined(TLFLOAT_DOXYGEN) + +inline tlfloat_quad::tlfloat_quad(const struct tlfloat_octuple& v) : value(tlfloat_cast_q_o(v)) {} +inline tlfloat_quad::tlfloat_quad(const tlfloat_int128_t_& i) : value(tlfloat_cast_q_i128(i)) {} +inline tlfloat_quad::tlfloat_quad(const tlfloat_uint128_t_& u) : value(tlfloat_cast_q_u128(u)) {} +inline tlfloat_quad::operator tlfloat_int128_t_() const { return tlfloat_cast_i128_q(value); } +inline tlfloat_quad::operator tlfloat_uint128_t_() const { return tlfloat_cast_u128_q(value); } + +#if !defined(TLFLOAT_COMPILER_SUPPORTS_INT128) +inline tlfloat_quad::tlfloat_quad(const struct tlfloat_int128_t& i) : value(tlfloat_cast_q_i128(i)) {} +inline tlfloat_quad::tlfloat_quad(const struct tlfloat_uint128_t& u) : value(tlfloat_cast_q_u128(u)) {} +#endif + +/** This function casts a octuple-precision FP number to a double-precision FP number. Link with -ltlfloat. */ +static inline double tlfloat_cast_d_q(const tlfloat_quad x) { return tlfloat_cast_d_q(tlfloat_quad_(x)); } +/** This function casts a quadruple-precision FP number to a octuple-precision FP number. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_cast_o_q(const tlfloat_quad x) { return tlfloat_cast_o_q(tlfloat_quad_(x)); } + /** This function casts a quadruple-precision FP number to a 64-bit signed integer. Link with -ltlfloat. */ +static inline int64_t tlfloat_cast_i64_q(const tlfloat_quad x) { return tlfloat_cast_i64_q(tlfloat_quad_(x)); } + /** This function casts a quadruple-precision FP number to a 64-bit unsigned integer. Link with -ltlfloat. */ +static inline uint64_t tlfloat_cast_u64_q(const tlfloat_quad x){ return tlfloat_cast_u64_q(tlfloat_quad_(x)); } + +/** This function performs addition of two quadruple-precision floating point numbers. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_addq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_addq(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function performs subtraction of two quadruple-precision floating point numbers. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_subq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_subq(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function performs multiplication of two quadruple-precision floating point numbers. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_mulq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_mulq(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function performs division of two quadruple-precision floating point numbers. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_divq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_divq(tlfloat_quad_(x), tlfloat_quad_(y)); } +static inline tlfloat_quad tlfloat_negq(const tlfloat_quad x) { return tlfloat_negq(tlfloat_quad_(x)); } + +/** This function performs ordered comparison of two quad-precision floating point numbers. Link with -ltlfloat. */ +static inline int tlfloat_eq_q_q(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_eq_q_q(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function performs ordered comparison of two quad-precision floating point numbers. Link with -ltlfloat. */ +static inline int tlfloat_ne_q_q(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_ne_q_q(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function performs ordered comparison of two quad-precision floating point numbers. Link with -ltlfloat. */ +static inline int tlfloat_lt_q_q(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_lt_q_q(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function performs ordered comparison of two quad-precision floating point numbers. Link with -ltlfloat. */ +static inline int tlfloat_le_q_q(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_le_q_q(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function performs ordered comparison of two quad-precision floating point numbers. Link with -ltlfloat. */ +static inline int tlfloat_gt_q_q(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_gt_q_q(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function performs ordered comparison of two quad-precision floating point numbers. Link with -ltlfloat. */ +static inline int tlfloat_ge_q_q(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_ge_q_q(tlfloat_quad_(x), tlfloat_quad_(y)); } + +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_fmaq(const tlfloat_quad x, const tlfloat_quad y, const tlfloat_quad z) { return tlfloat_fmaq(tlfloat_quad_(x), tlfloat_quad_(y), tlfloat_quad_(z)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_sqrtq(const tlfloat_quad x) { return tlfloat_sqrtq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_fabsq(const tlfloat_quad x) { return tlfloat_fabsq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_copysignq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_copysignq(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_fmaxq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_fmaxq(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_fminq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_fminq(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_fdimq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_fdimq(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_ldexpq(const tlfloat_quad x, const int y) { return tlfloat_ldexpq(tlfloat_quad_(x), y); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_frexpq(const tlfloat_quad x, int *y) { return tlfloat_frexpq(tlfloat_quad_(x), y); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_modfq(const tlfloat_quad x, tlfloat_quad *y) { return tlfloat_modfq(tlfloat_quad_(x), (tlfloat_quad_ *)y); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_nextafterq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_nextafterq(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline int tlfloat_ilogbq(const tlfloat_quad x) { return tlfloat_ilogbq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline int tlfloat_isnanq(const tlfloat_quad x) { return tlfloat_isnanq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline int tlfloat_isinfq(const tlfloat_quad x) { return tlfloat_isinfq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline int tlfloat_finiteq(const tlfloat_quad x) { return tlfloat_finiteq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline int tlfloat_fpclassifyq(const tlfloat_quad x) { return tlfloat_fpclassifyq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline int tlfloat_signbitq(const tlfloat_quad x) { return tlfloat_signbitq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_hypotq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_hypotq(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_truncq(const tlfloat_quad x) { return tlfloat_truncq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_floorq(const tlfloat_quad x) { return tlfloat_floorq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_ceilq(const tlfloat_quad x) { return tlfloat_ceilq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_roundq(const tlfloat_quad x) { return tlfloat_roundq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_rintq(const tlfloat_quad x) { return tlfloat_rintq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_sinq(const tlfloat_quad x) { return tlfloat_sinq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_cosq(const tlfloat_quad x) { return tlfloat_cosq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_tanq(const tlfloat_quad x) { return tlfloat_tanq(tlfloat_quad_(x)); } +static inline tlfloat_quad tlfloat_sinpiq(const tlfloat_quad x) { return tlfloat_sinpiq(tlfloat_quad_(x)); } +static inline tlfloat_quad tlfloat_cospiq(const tlfloat_quad x) { return tlfloat_cospiq(tlfloat_quad_(x)); } +static inline tlfloat_quad tlfloat_tanpiq(const tlfloat_quad x) { return tlfloat_tanpiq(tlfloat_quad_(x)); } +static inline void tlfloat_sincosq(const tlfloat_quad x, tlfloat_quad *s, tlfloat_quad *c) { + tlfloat_quad_ s_, c_; + tlfloat_sincosq(tlfloat_quad_(x), &s_, &c_); + *s = tlfloat_quad(s_); *c = tlfloat_quad(c_); +} +static inline void tlfloat_sincospiq(const tlfloat_quad x, tlfloat_quad *s, tlfloat_quad *c) { + tlfloat_quad_ s_, c_; + tlfloat_sincospiq(tlfloat_quad_(x), &s_, &c_); + *s = tlfloat_quad(s_); *c = tlfloat_quad(c_); +} +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_asinq(const tlfloat_quad x) { return tlfloat_asinq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_acosq(const tlfloat_quad x) { return tlfloat_acosq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_atanq(const tlfloat_quad x) { return tlfloat_atanq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_atan2q(const tlfloat_quad y, const tlfloat_quad x) { return tlfloat_atan2q(tlfloat_quad_(y), tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_expq(const tlfloat_quad x) { return tlfloat_expq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_expm1q(const tlfloat_quad x) { return tlfloat_expm1q(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_exp2q(const tlfloat_quad x) { return tlfloat_exp2q(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_exp10q(const tlfloat_quad x) { return tlfloat_exp10q(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_logq(const tlfloat_quad x) { return tlfloat_logq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_log1pq(const tlfloat_quad x) { return tlfloat_log1pq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_log2q(const tlfloat_quad x) { return tlfloat_log2q(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_log10q(const tlfloat_quad x) { return tlfloat_log10q(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_powq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_powq(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_cbrtq(const tlfloat_quad x) { return tlfloat_cbrtq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_sinhq(const tlfloat_quad x) { return tlfloat_sinhq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_coshq(const tlfloat_quad x) { return tlfloat_coshq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_tanhq(const tlfloat_quad x) { return tlfloat_tanhq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_asinhq(const tlfloat_quad x) { return tlfloat_asinhq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_acoshq(const tlfloat_quad x) { return tlfloat_acoshq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_atanhq(const tlfloat_quad x) { return tlfloat_atanhq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_erfq(const tlfloat_quad x) { return tlfloat_erfq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_erfcq(const tlfloat_quad x) { return tlfloat_erfcq(tlfloat_quad_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_tgammaq(const tlfloat_quad x) { return tlfloat_tgammaq(tlfloat_quad_(x)); } +/** This is experimental implementation of log gamma function. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_lgammaq(const tlfloat_quad x) { return tlfloat_cast_q_o(tlfloat_lgammao(tlfloat_cast_o_q(tlfloat_quad_(x)))); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_fmodq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_fmodq(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_remainderq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_remainderq(tlfloat_quad_(x), tlfloat_quad_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_remquoq(const tlfloat_quad x, const tlfloat_quad y, int *quo) { return tlfloat_remquoq(tlfloat_quad_(x), tlfloat_quad_(y), quo); } + +#endif // #if (defined(__cplusplus) && !defined(TLFLOAT_COMPILER_SUPPORTS_FLOAT128) && !defined(TLFLOAT_LONGDOUBLE_IS_FLOAT128) && !defined(TLFLOAT_COMPILER_SUPPORTS_ISOFLOAT128)) || defined(TLFLOAT_DOXYGEN) + +/** This function casts a double-precision FP number to a quadruple-precision FP number. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_cast_q_d(const double x) { return tlfloat_cast_q_d_(x); } +/** This function casts a 64-bit signed integer to a quadruple-precision FP number. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_cast_q_i64(const int64_t x) { return tlfloat_cast_q_i64_(x); } +/** This function casts a 64-bit unsigned integer to a quadruple-precision FP number. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_cast_q_u64(const uint64_t x) { return tlfloat_cast_q_u64_(x); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_strtoq(const char *nptr, const char **endptr) { return tlfloat_strtoq_(nptr, endptr); } + +#ifdef TLFLOAT_LIBQUADMATH_EMULATION + +#if defined(TLFLOAT_COMPILER_SUPPORTS_FLOAT128) || defined(TLFLOAT_LONGDOUBLE_IS_FLOAT128) || defined(TLFLOAT_COMPILER_SUPPORTS_ISOFLOAT128) || defined(__STDC_VERSION__) || defined(__cplusplus) || defined(TLFLOAT_DOXYGEN) +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define M_Eq TLFLOAT_M_Eq +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define M_LOG2Eq TLFLOAT_M_LOG2Eq +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define M_LOG10Eq TLFLOAT_M_LOG10Eq +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define M_LN2q TLFLOAT_M_LN2q +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define M_LN10q TLFLOAT_M_LN10q +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define M_PIq TLFLOAT_M_PIq +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define M_PI_2q TLFLOAT_M_PI_2q +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define M_PI_4q TLFLOAT_M_PI_4q +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define M_1_PIq TLFLOAT_M_1_PIq +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define M_2_PIq TLFLOAT_M_2_PIq +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define M_2_SQRTPIq TLFLOAT_M_2_SQRTPIq +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define M_SQRT2q TLFLOAT_M_SQRT2q +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define M_SQRT1_2q TLFLOAT_M_SQRT1_2q +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define FLT128_MAX TLFLOAT_FLT128_MAX +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define FLT128_MIN TLFLOAT_FLT128_MIN +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define FLT128_DENORM_MIN TLFLOAT_FLT128_DENORM_MIN +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define FLT128_EPSILON TLFLOAT_FLT128_EPSILON +#endif + +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define FLT128_MANT_DIG TLFLOAT_FLT128_MANT_DIG +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define FLT128_MIN_EXP TLFLOAT_FLT128_MIN_EXP +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define FLT128_MAX_EXP TLFLOAT_FLT128_MAX_EXP +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define FLT128_DIG TLFLOAT_FLT128_DIG +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define FLT128_MIN_10_EXP TLFLOAT_FLT128_MIN_10_EXP +/** This macro is defined only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. */ +#define FLT128_MAX_10_EXP TLFLOAT_FLT128_MAX_10_EXP + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad strtoflt128(const char *s, const char **sp) { + return tlfloat_strtoq_(s, sp); + } + + /** This function is designed to be used as a replacement for the function of the same name in quadmath.h, + * but it is actually an alias of tlfloat_snprintf. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline int quadmath_snprintf(char *str, size_t size, const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + int ret = tlfloat_vsnprintf(str, size, fmt, ap); + va_end(ap); + return ret; + } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad fmaq(const tlfloat_quad x, const tlfloat_quad y, const tlfloat_quad z) { return tlfloat_fmaq(x, y, z); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad sqrtq(const tlfloat_quad x) { return tlfloat_sqrtq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad fabsq(const tlfloat_quad x) { return tlfloat_fabsq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad copysignq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_copysignq(x, y); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad fmaxq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_fmaxq(x, y); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad fminq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_fminq(x, y); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad fdimq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_fdimq(x, y); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad ldexpq(const tlfloat_quad x, const int y) { return tlfloat_ldexpq(x, y); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad frexpq(const tlfloat_quad x, int *y) { return tlfloat_frexpq(x, y); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad modfq(const tlfloat_quad x, tlfloat_quad *y) { return tlfloat_modfq(x, y); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad nextafterq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_nextafterq(x, y); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline int ilogbq(const tlfloat_quad x) { return tlfloat_ilogbq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline int isnanq(const tlfloat_quad x) { return tlfloat_isnanq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline int isinfq(const tlfloat_quad x) { return tlfloat_isinfq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline int finiteq(const tlfloat_quad x) { return tlfloat_finiteq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline int fpclassifyq(const tlfloat_quad x) { return tlfloat_fpclassifyq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline int signbitq(const tlfloat_quad x) { return tlfloat_signbitq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad hypotq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_hypotq(x, y); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad truncq(const tlfloat_quad x) { return tlfloat_truncq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad floorq(const tlfloat_quad x) { return tlfloat_floorq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad ceilq(const tlfloat_quad x) { return tlfloat_ceilq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad roundq(const tlfloat_quad x) { return tlfloat_roundq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad rintq(const tlfloat_quad x) { return tlfloat_rintq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad sinq(const tlfloat_quad x) { return tlfloat_sinq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad cosq(const tlfloat_quad x) { return tlfloat_cosq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline void sincosq(const tlfloat_quad x, tlfloat_quad *s, tlfloat_quad *c) { tlfloat_sincosq(x, s, c); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad tanq(const tlfloat_quad x) { return tlfloat_tanq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad asinq(const tlfloat_quad x) { return tlfloat_asinq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad acosq(const tlfloat_quad x) { return tlfloat_acosq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad atanq(const tlfloat_quad x) { return tlfloat_atanq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad atan2q(const tlfloat_quad y, const tlfloat_quad x) { return tlfloat_atan2q(y, x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad expq(const tlfloat_quad x) { return tlfloat_expq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad expm1q(const tlfloat_quad x) { return tlfloat_expm1q(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad exp2q(const tlfloat_quad x) { return tlfloat_exp2q(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad exp10q(const tlfloat_quad x) { return tlfloat_exp10q(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad logq(const tlfloat_quad x) { return tlfloat_logq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad log1pq(const tlfloat_quad x) { return tlfloat_log1pq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad log2q(const tlfloat_quad x) { return tlfloat_log2q(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad log10q(const tlfloat_quad x) { return tlfloat_log10q(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad powq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_powq(x, y); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad cbrtq(const tlfloat_quad x) { return tlfloat_cbrtq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad sinhq(const tlfloat_quad x) { return tlfloat_sinhq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad coshq(const tlfloat_quad x) { return tlfloat_coshq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad tanhq(const tlfloat_quad x) { return tlfloat_tanhq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad asinhq(const tlfloat_quad x) { return tlfloat_asinhq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad acoshq(const tlfloat_quad x) { return tlfloat_acoshq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad atanhq(const tlfloat_quad x) { return tlfloat_atanhq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad erfq(const tlfloat_quad x) { return tlfloat_erfq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad erfcq(const tlfloat_quad x) { return tlfloat_erfcq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad tgammaq(const tlfloat_quad x) { return tlfloat_tgammaq(x); } + + /** This is experimental implementation of log gamma function. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad lgammaq(const tlfloat_quad x) { return tlfloat_lgammaq(x); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad fmodq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_fmodq(x, y); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad remainderq(const tlfloat_quad x, const tlfloat_quad y) { return tlfloat_remainderq(x, y); } + + /** This function has the same functionality as the corresponding function in quadmath.h. + * This function is available only if TLFLOAT_LIBQUADMATH_EMULATION macro is defined. + * Link with -ltlfloat. */ + static inline tlfloat_quad remquoq(const tlfloat_quad x, const tlfloat_quad y, int *quo) { return tlfloat_remquoq(x, y, quo); } +#endif // #ifdef TLFLOAT_LIBQUADMATH_EMULATION + +// + +#if defined(__cplusplus) || defined(TLFLOAT_DOXYGEN) +#if !defined(TLFLOAT_DOXYGEN) +#define TLFLOAT_OVERLOAD_OP2(OP, OPA) \ + template::value && sizeof(T) <= 8) || (std::is_integral::value && sizeof(T) <= 8)), int>::type = 0> \ + static inline tlfloat_octuple operator OP(const T& lhs, const tlfloat_octuple& rhs) { return tlfloat_octuple(lhs) OP rhs; } \ + static inline tlfloat_octuple operator OP(const tlfloat_int128_t& lhs, const tlfloat_octuple& rhs) { return tlfloat_octuple(tlfloat_cast_o_i128(lhs)) OP rhs; } \ + static inline tlfloat_octuple operator OP(const tlfloat_uint128_t& lhs, const tlfloat_octuple& rhs) { return tlfloat_octuple(tlfloat_cast_o_u128(lhs)) OP rhs; } \ + template::value && sizeof(T) <= 8) || (std::is_integral::value && sizeof(T) <= 8)), int>::type = 0> \ + static inline tlfloat_octuple operator OP(const tlfloat_octuple& lhs, const T& rhs) { return lhs OP tlfloat_octuple(rhs); } \ + static inline tlfloat_octuple operator OP(const tlfloat_octuple& lhs, const tlfloat_int128_t& rhs) { return lhs OP tlfloat_cast_o_i128(rhs); } \ + static inline tlfloat_octuple operator OP(const tlfloat_octuple& lhs, const tlfloat_uint128_t& rhs) { return lhs OP tlfloat_cast_o_u128(rhs); } \ + static inline tlfloat_octuple operator OP(const tlfloat_quad& lhs, const tlfloat_octuple& rhs) { return tlfloat_octuple(lhs) OP rhs; } \ + static inline tlfloat_octuple operator OP(const tlfloat_octuple& lhs, const tlfloat_quad& rhs) { return lhs OP tlfloat_octuple(rhs); } \ + template \ + static inline tlfloat_octuple& operator OPA(tlfloat_octuple& lhs, const rhstype& rhs) { return (lhs = lhs OP tlfloat_octuple(rhs)); } \ + static_assert(true, "") + +#define TLFLOAT_OVERLOAD_OP2Q(OP, OPA) \ + template::value && sizeof(T) <= 8) || (std::is_integral::value && sizeof(T) <= 8)), int>::type = 0> \ + static inline tlfloat_quad operator OP(const T& lhs, const tlfloat_quad& rhs) { return tlfloat_quad(lhs) OP rhs; } \ + static inline tlfloat_quad operator OP(const tlfloat_int128_t& lhs, const tlfloat_quad& rhs) { return tlfloat_quad(tlfloat_cast_q_i128(lhs)) OP rhs; } \ + static inline tlfloat_quad operator OP(const tlfloat_uint128_t& lhs, const tlfloat_quad& rhs) { return tlfloat_quad(tlfloat_cast_q_u128(lhs)) OP rhs; } \ + template::value && sizeof(T) <= 8) || (std::is_integral::value && sizeof(T) <= 8)), int>::type = 0> \ + static inline tlfloat_quad operator OP(const tlfloat_quad& lhs, const T& rhs) { return lhs OP tlfloat_quad(rhs); } \ + static inline tlfloat_quad operator OP(const tlfloat_quad& lhs, const tlfloat_int128_t& rhs) { return lhs OP tlfloat_cast_q_i128(rhs); } \ + static inline tlfloat_quad operator OP(const tlfloat_quad& lhs, const tlfloat_uint128_t& rhs) { return lhs OP tlfloat_cast_q_u128(rhs); } \ + template \ + static inline tlfloat_quad& operator OPA(tlfloat_quad& lhs, const rhstype& rhs) { return (lhs = lhs OP tlfloat_quad(rhs)); } \ + static_assert(true, "") + +#define TLFLOAT_OVERLOAD_OP2I(OP, OPA) \ + template::value && sizeof(T) <= 8) || (std::is_integral::value && sizeof(T) <= 8)), int>::type = 0> \ + static inline tlfloat_int128_t operator OP(const T& lhs, const tlfloat_int128_t& rhs) { return tlfloat_int128_t(lhs) OP rhs; } \ + template::value && sizeof(T) <= 8) || (std::is_integral::value && sizeof(T) <= 8)), int>::type = 0> \ + static inline tlfloat_uint128_t operator OP(const T& lhs, const tlfloat_uint128_t& rhs) { return tlfloat_uint128_t(lhs) OP rhs; } \ + static inline tlfloat_int128_t operator OP(const tlfloat_int128_t& lhs, const tlfloat_int128_t_& rhs) { return lhs OP (tlfloat_int128_t)rhs; } \ + static inline tlfloat_int128_t operator OP(const tlfloat_int128_t_& lhs, const tlfloat_int128_t& rhs) { return (tlfloat_int128_t)lhs OP rhs; } \ + static inline tlfloat_uint128_t operator OP(const tlfloat_uint128_t& lhs, const tlfloat_uint128_t_& rhs) { return lhs OP (tlfloat_uint128_t)rhs; } \ + static inline tlfloat_uint128_t operator OP(const tlfloat_uint128_t_& lhs, const tlfloat_uint128_t& rhs) { return (tlfloat_uint128_t)lhs OP rhs; } \ + template \ + static inline tlfloat_int128_t& operator OPA(tlfloat_int128_t& lhs, const rhstype& rhs) { return (lhs = lhs OP tlfloat_int128_t(rhs)); } \ + template \ + static inline tlfloat_uint128_t& operator OPA(tlfloat_uint128_t& lhs, const rhstype& rhs) { return (lhs = lhs OP tlfloat_uint128_t(rhs)); } \ + static_assert(true, "") + +#define TLFLOAT_OVERLOAD_CMP(OP) \ + template::value && sizeof(T) <= 8) || (std::is_integral::value && sizeof(T) <= 8)), int>::type = 0> \ + static inline bool operator OP(const T& lhs, const tlfloat_octuple& rhs) { return tlfloat_octuple(lhs) OP rhs; } \ + static inline bool operator OP(const tlfloat_int128_t& lhs, const tlfloat_octuple& rhs) { return tlfloat_octuple(tlfloat_cast_o_i128(lhs)) OP rhs; } \ + static inline bool operator OP(const tlfloat_uint128_t& lhs, const tlfloat_octuple& rhs) { return tlfloat_octuple(tlfloat_cast_o_u128(lhs)) OP rhs; } \ + template::value && sizeof(T) <= 8) || (std::is_integral::value && sizeof(T) <= 8)), int>::type = 0> \ + static inline bool operator OP(const tlfloat_octuple& lhs, const T& rhs) { return lhs OP tlfloat_octuple(rhs); } \ + static inline bool operator OP(const tlfloat_octuple& lhs, const tlfloat_int128_t& rhs) { return lhs OP tlfloat_octuple(tlfloat_cast_o_i128(rhs)); } \ + static inline bool operator OP(const tlfloat_octuple& lhs, const tlfloat_uint128_t& rhs) { return lhs OP tlfloat_octuple(tlfloat_cast_o_u128(rhs)); } \ + static inline bool operator OP(const tlfloat_octuple& lhs, const tlfloat_quad& rhs) { return lhs OP tlfloat_octuple(rhs); } \ + static inline bool operator OP(const tlfloat_quad& lhs, const tlfloat_octuple& rhs) { return tlfloat_octuple(lhs) OP rhs; } \ + static_assert(true, "") + +#define TLFLOAT_OVERLOAD_CMPQ(OP) \ + template::value && sizeof(T) <= 8) || (std::is_integral::value && sizeof(T) <= 8)), int>::type = 0> \ + static inline bool operator OP(const T& lhs, const tlfloat_quad& rhs) { return tlfloat_quad(lhs) OP rhs; } \ + template::value && sizeof(T) <= 8) || (std::is_integral::value && sizeof(T) <= 8)), int>::type = 0> \ + static inline bool operator OP(const tlfloat_quad& lhs, const T& rhs) { return lhs OP tlfloat_quad(rhs); } \ + static_assert(true, "") + +#define TLFLOAT_OVERLOAD_CMPI(OP) \ + template::value && sizeof(T) <= 8), int>::type = 0> \ + static inline bool operator OP(const T& lhs, const tlfloat_int128_t& rhs) { return tlfloat_int128_t(lhs) OP rhs; } \ + template::value && sizeof(T) <= 8), int>::type = 0> \ + static inline bool operator OP(const tlfloat_int128_t& lhs, const T& rhs) { return lhs OP tlfloat_int128_t(rhs); } \ + template::value && sizeof(T) <= 8), int>::type = 0> \ + static inline bool operator OP(const T& lhs, const tlfloat_uint128_t& rhs) { return tlfloat_uint128_t(lhs) OP rhs; } \ + template::value && sizeof(T) <= 8), int>::type = 0> \ + static inline bool operator OP(const tlfloat_uint128_t& lhs, const T& rhs) { return lhs OP tlfloat_uint128_t(rhs); } \ + static inline bool operator OP(const tlfloat_int128_t& lhs, const tlfloat_int128_t_& rhs) { return lhs OP (tlfloat_int128_t)rhs; } \ + static inline bool operator OP(const tlfloat_int128_t_& lhs, const tlfloat_int128_t& rhs) { return (tlfloat_int128_t)lhs OP rhs; } \ + static inline bool operator OP(const tlfloat_uint128_t& lhs, const tlfloat_uint128_t_& rhs) { return lhs OP (tlfloat_uint128_t)rhs; } \ + static inline bool operator OP(const tlfloat_uint128_t_& lhs, const tlfloat_uint128_t& rhs) { return (tlfloat_uint128_t)lhs OP rhs; } \ + static_assert(true, "") + +TLFLOAT_OVERLOAD_OP2(+, +=); +TLFLOAT_OVERLOAD_OP2(-, -=); +TLFLOAT_OVERLOAD_OP2(*, *=); +TLFLOAT_OVERLOAD_OP2(/, /=); +TLFLOAT_OVERLOAD_CMP(==); +TLFLOAT_OVERLOAD_CMP(!=); +TLFLOAT_OVERLOAD_CMP(<); +TLFLOAT_OVERLOAD_CMP(<=); +TLFLOAT_OVERLOAD_CMP(>); +TLFLOAT_OVERLOAD_CMP(>=); + +#ifdef TLFLOAT_QUAD_IS_STRUCT +TLFLOAT_OVERLOAD_OP2Q(+, +=); +TLFLOAT_OVERLOAD_OP2Q(-, -=); +TLFLOAT_OVERLOAD_OP2Q(*, *=); +TLFLOAT_OVERLOAD_OP2Q(/, /=); +TLFLOAT_OVERLOAD_CMPQ(==); +TLFLOAT_OVERLOAD_CMPQ(!=); +TLFLOAT_OVERLOAD_CMPQ(<); +TLFLOAT_OVERLOAD_CMPQ(<=); +TLFLOAT_OVERLOAD_CMPQ(>); +TLFLOAT_OVERLOAD_CMPQ(>=); +#endif + +#ifdef TLFLOAT_INT128_IS_STRUCT +TLFLOAT_OVERLOAD_OP2I(+, +=); +TLFLOAT_OVERLOAD_OP2I(-, -=); +TLFLOAT_OVERLOAD_OP2I(*, *=); +TLFLOAT_OVERLOAD_OP2I(/, /=); +TLFLOAT_OVERLOAD_CMPI(==); +TLFLOAT_OVERLOAD_CMPI(!=); +TLFLOAT_OVERLOAD_CMPI(<); +TLFLOAT_OVERLOAD_CMPI(<=); +TLFLOAT_OVERLOAD_CMPI(>); +TLFLOAT_OVERLOAD_CMPI(>=); +#endif + +#undef TLFLOAT_OVERLOAD_OP2 +#undef TLFLOAT_OVERLOAD_OP2Q +#undef TLFLOAT_OVERLOAD_OP2I +#undef TLFLOAT_OVERLOAD_CMP +#undef TLFLOAT_OVERLOAD_CMPQ +#undef TLFLOAT_OVERLOAD_CMPI +#endif // #if !defined(TLFLOAT_DOXYGEN) + +/** This function casts a octuple-precision FP number to a double-precision FP number. Link with -ltlfloat. */ +static inline double tlfloat_cast_d_o(const tlfloat_octuple x) { return tlfloat_cast_d_o(tlfloat_octuple_(x)); } +/** This function casts a octuple-precision FP number to a quadruple-precision FP number. Link with -ltlfloat. */ +static inline tlfloat_quad tlfloat_cast_q_o(const tlfloat_octuple x) { return tlfloat_cast_q_o(tlfloat_octuple_(x)); } + /** This function casts a octuple-precision FP number to a 64-bit signed integer. Link with -ltlfloat. */ +static inline int64_t tlfloat_cast_i64_o(const tlfloat_octuple x) { return tlfloat_cast_i64_o(tlfloat_octuple_(x)); } + /** This function casts a octuple-precision FP number to a 64-bit unsigned integer. Link with -ltlfloat. */ +static inline uint64_t tlfloat_cast_u64_o(const tlfloat_octuple x) { return tlfloat_cast_u64_o(tlfloat_octuple_(x)); } + +/** This function performs addition of two octuple-precision floating point numbers. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_addo(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_addo(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function performs subtraction of two octuple-precision floating point numbers. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_subo(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_subo(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function performs multiplication of two octuple-precision floating point numbers. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_mulo(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_mulo(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function performs division of two octuple-precision floating point numbers. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_divo(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_divo(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +static inline tlfloat_octuple tlfloat_nego(const tlfloat_octuple x) { return tlfloat_nego(tlfloat_octuple_(x)); } + +/** This function performs ordered comparison of two octuple-precision floating point numbers. Link with -ltlfloat. */ +static inline int tlfloat_eq_o_o(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_eq_o_o(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function performs ordered comparison of two octuple-precision floating point numbers. Link with -ltlfloat. */ +static inline int tlfloat_ne_o_o(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_ne_o_o(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function performs ordered comparison of two octuple-precision floating point numbers. Link with -ltlfloat. */ +static inline int tlfloat_lt_o_o(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_lt_o_o(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function performs ordered comparison of two octuple-precision floating point numbers. Link with -ltlfloat. */ +static inline int tlfloat_le_o_o(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_le_o_o(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function performs ordered comparison of two octuple-precision floating point numbers. Link with -ltlfloat. */ +static inline int tlfloat_gt_o_o(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_gt_o_o(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function performs ordered comparison of two octuple-precision floating point numbers. Link with -ltlfloat. */ +static inline int tlfloat_ge_o_o(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_ge_o_o(tlfloat_octuple_(x), tlfloat_octuple_(y)); } + +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_fmao(const tlfloat_octuple x, const tlfloat_octuple y, const tlfloat_octuple z) { return tlfloat_fmao(tlfloat_octuple_(x), tlfloat_octuple_(y), tlfloat_octuple_(z)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_sqrto(const tlfloat_octuple x) { return tlfloat_sqrto(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_fabso(const tlfloat_octuple x) { return tlfloat_fabso(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_copysigno(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_copysigno(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_fmaxo(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_fmaxo(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_fmino(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_fmino(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_fdimo(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_fdimo(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_ldexpo(const tlfloat_octuple x, const int y) { return tlfloat_ldexpo(tlfloat_octuple_(x), y); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_frexpo(const tlfloat_octuple x, int *y) { return tlfloat_frexpo(tlfloat_octuple_(x), y); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_modfo(const tlfloat_octuple x, tlfloat_octuple *y) { return tlfloat_modfo(tlfloat_octuple_(x), (tlfloat_octuple_ *)y); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_nextaftero(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_nextaftero(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline int tlfloat_ilogbo(const tlfloat_octuple x) { return tlfloat_ilogbo(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline int tlfloat_isnano(const tlfloat_octuple x) { return tlfloat_isnano(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline int tlfloat_isinfo(const tlfloat_octuple x) { return tlfloat_isinfo(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline int tlfloat_finiteo(const tlfloat_octuple x) { return tlfloat_finiteo(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline int tlfloat_signbito(const tlfloat_octuple x) { return tlfloat_signbito(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_hypoto(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_hypoto(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_trunco(const tlfloat_octuple x) { return tlfloat_trunco(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_flooro(const tlfloat_octuple x) { return tlfloat_flooro(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_ceilo(const tlfloat_octuple x) { return tlfloat_ceilo(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_roundo(const tlfloat_octuple x) { return tlfloat_roundo(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_rinto(const tlfloat_octuple x) { return tlfloat_rinto(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_sino(const tlfloat_octuple x) { return tlfloat_sino(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_coso(const tlfloat_octuple x) { return tlfloat_coso(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_tano(const tlfloat_octuple x) { return tlfloat_tano(tlfloat_octuple_(x)); } +static inline tlfloat_octuple tlfloat_sinpio(const tlfloat_octuple x) { return tlfloat_sinpio(tlfloat_octuple_(x)); } +static inline tlfloat_octuple tlfloat_cospio(const tlfloat_octuple x) { return tlfloat_cospio(tlfloat_octuple_(x)); } +static inline tlfloat_octuple tlfloat_tanpio(const tlfloat_octuple x) { return tlfloat_tanpio(tlfloat_octuple_(x)); } +static inline void tlfloat_sincoso(const tlfloat_octuple x, tlfloat_octuple *s, tlfloat_octuple *c) { + tlfloat_octuple_ s_, c_; + tlfloat_sincoso(tlfloat_octuple_(x), &s_, &c_); + *s = tlfloat_octuple(s_); *c = tlfloat_octuple(c_); +} +static inline void tlfloat_sincospio(const tlfloat_octuple x, tlfloat_octuple *s, tlfloat_octuple *c) { + tlfloat_octuple_ s_, c_; + tlfloat_sincospio(tlfloat_octuple_(x), &s_, &c_); + *s = tlfloat_octuple(s_); *c = tlfloat_octuple(c_); +} +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_asino(const tlfloat_octuple x) { return tlfloat_asino(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_acoso(const tlfloat_octuple x) { return tlfloat_acoso(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_atano(const tlfloat_octuple x) { return tlfloat_atano(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_atan2o(const tlfloat_octuple y, const tlfloat_octuple x) { return tlfloat_atan2o(tlfloat_octuple_(y), tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_expo(const tlfloat_octuple x) { return tlfloat_expo(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_expm1o(const tlfloat_octuple x) { return tlfloat_expm1o(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_exp2o(const tlfloat_octuple x) { return tlfloat_exp2o(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_exp10o(const tlfloat_octuple x) { return tlfloat_exp10o(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_logo(const tlfloat_octuple x) { return tlfloat_logo(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_log1po(const tlfloat_octuple x) { return tlfloat_log1po(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_log2o(const tlfloat_octuple x) { return tlfloat_log2o(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_log10o(const tlfloat_octuple x) { return tlfloat_log10o(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_powo(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_powo(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_cbrto(const tlfloat_octuple x) { return tlfloat_cbrto(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_sinho(const tlfloat_octuple x) { return tlfloat_sinho(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_cosho(const tlfloat_octuple x) { return tlfloat_cosho(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_tanho(const tlfloat_octuple x) { return tlfloat_tanho(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_asinho(const tlfloat_octuple x) { return tlfloat_asinho(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_acosho(const tlfloat_octuple x) { return tlfloat_acosho(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_atanho(const tlfloat_octuple x) { return tlfloat_atanho(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_erfo(const tlfloat_octuple x) { return tlfloat_erfo(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_erfco(const tlfloat_octuple x) { return tlfloat_erfco(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_tgammao(const tlfloat_octuple x) { return tlfloat_tgammao(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_lgammao(const tlfloat_octuple x) { return tlfloat_lgammao(tlfloat_octuple_(x)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_fmodo(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_fmodo(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_remaindero(const tlfloat_octuple x, const tlfloat_octuple y) { return tlfloat_remaindero(tlfloat_octuple_(x), tlfloat_octuple_(y)); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_remquoo(const tlfloat_octuple x, const tlfloat_octuple y, int *quo) { return tlfloat_remquoo(tlfloat_octuple_(x), tlfloat_octuple_(y), quo); } + +namespace tlfloat { +#ifndef TLFLOAT_NO_LIBSTDCXX + static inline std::string to_string(const float a, int d=6) { + std::vector buf(1000); + tlfloat_snprintf(buf.data(), buf.size(), "%.*g", d, (double)a); + return std::string(buf.data()); + } + + static inline std::string to_string(const double a, int d=6) { + std::vector buf(1000); + tlfloat_snprintf(buf.data(), buf.size(), "%.*g", d, a); + return std::string(buf.data()); + } + + static inline std::string to_string(const tlfloat_quad& a, int d=6) { + std::vector buf(1000); + tlfloat_snprintf(buf.data(), buf.size(), "%.*Qg", d, a); + return std::string(buf.data()); + } + + static inline std::string to_string(const tlfloat_octuple& a, int d=6) { + std::vector buf(1000); + tlfloat_snprintf(buf.data(), buf.size(), "%.*Og", d, a); + return std::string(buf.data()); + } + + static inline std::string to_string(const tlfloat_int128_t& a) { + std::vector buf(1000); + tlfloat_snprintf(buf.data(), buf.size(), "%Qd", a); + return std::string(buf.data()); + } + + static inline std::string to_string(const tlfloat_uint128_t& a) { + std::vector buf(1000); + tlfloat_snprintf(buf.data(), buf.size(), "%Qu", a); + return std::string(buf.data()); + } +#endif + + // + +#if !defined(TLFLOAT_DOXYGEN) +#define TLFLOAT_POLYFUNC_f_f(OP) \ + static inline float OP ## _(const float &x) { return tlfloat_ ## OP ## f(x); } \ + static inline double OP ## _(const double &x) { return tlfloat_ ## OP(x); } \ + static inline tlfloat_quad OP ## _(const tlfloat_quad &x) { return tlfloat_ ## OP ## q(x); } \ + static inline tlfloat_octuple OP ## _(const tlfloat_octuple &x) { return tlfloat_ ## OP ## o(x); } \ + static_assert(true, "") + +#define TLFLOAT_POLYFUNC_i_f(OP) \ + static inline int OP ## _(const float &x) { return tlfloat_ ## OP ## f(x); } \ + static inline int OP ## _(const double &x) { return tlfloat_ ## OP(x); } \ + static inline int OP ## _(const tlfloat_quad &x) { return tlfloat_ ## OP ## q(x); } \ + static inline int OP ## _(const tlfloat_octuple &x) { return tlfloat_ ## OP ## o(x); } \ + static_assert(true, "") + +#define TLFLOAT_POLYFUNC_f_f_f(OP) \ + static inline float OP ## _(const float &x, const float &y) { return tlfloat_ ## OP ## f(x, y); } \ + static inline double OP ## _(const double &x, const double &y) { return tlfloat_ ## OP(x, y); } \ + static inline tlfloat_quad OP ## _(const tlfloat_quad &x, const tlfloat_quad &y) { return tlfloat_ ## OP ## q(x, y); } \ + static inline tlfloat_octuple OP ## _(const tlfloat_octuple &x, const tlfloat_octuple &y) { return tlfloat_ ## OP ## o(x, y); } \ + static_assert(true, "") + +#define TLFLOAT_POLYFUNC_f_f_i(OP) \ + static inline float OP ## _(const float &x, const int &y) { return tlfloat_ ## OP ## f(x, y); } \ + static inline double OP ## _(const double &x, const int &y) { return tlfloat_ ## OP(x, y); } \ + static inline tlfloat_quad OP ## _(const tlfloat_quad &x, const int &y) { return tlfloat_ ## OP ## q(x, y); } \ + static inline tlfloat_octuple OP ## _(const tlfloat_octuple &x, const int &y) { return tlfloat_ ## OP ## o(x, y); } \ + static_assert(true, "") + +#define TLFLOAT_POLYFUNC_f_f_pf(OP) \ + static inline float OP ## _(const float &x, float *y) { return tlfloat_ ## OP ## f(x, y); } \ + static inline double OP ## _(const double &x, double *y) { return tlfloat_ ## OP(x, y); } \ + static inline tlfloat_quad OP ## _(const tlfloat_quad &x, tlfloat_quad *y) { return tlfloat_ ## OP ## q(x, y); } \ + static inline tlfloat_octuple OP ## _(const tlfloat_octuple &x, tlfloat_octuple *y) { return tlfloat_ ## OP ## o(x, y); } \ + static_assert(true, "") + +#define TLFLOAT_POLYFUNC_f_f_pi(OP) \ + static inline float OP ## _(const float &x, int *y) { return tlfloat_ ## OP ## f(x, y); } \ + static inline double OP ## _(const double &x, int *y) { return tlfloat_ ## OP(x, y); } \ + static inline tlfloat_quad OP ## _(const tlfloat_quad &x, int *y) { return tlfloat_ ## OP ## q(x, y); } \ + static inline tlfloat_octuple OP ## _(const tlfloat_octuple &x, int *y) { return tlfloat_ ## OP ## o(x, y); } \ + static_assert(true, "") + +#define TLFLOAT_POLYFUNC_f_f_f_pi(OP) \ + static inline float OP ## _(const float &x, const float &y, int *z) { return tlfloat_ ## OP ## f(x, y, z); } \ + static inline double OP ## _(const double &x, const double &y, int *z) { return tlfloat_ ## OP(x, y, z); } \ + static inline tlfloat_quad OP ## _(const tlfloat_quad &x, const tlfloat_quad &y, int *z) { return tlfloat_ ## OP ## q(x, y, z); } \ + static inline tlfloat_octuple OP ## _(const tlfloat_octuple &x, const tlfloat_octuple &y, int *z) { return tlfloat_ ## OP ## o(x, y, z); } \ + static_assert(true, "") + +#define TLFLOAT_POLYFUNC_f_f_f_f(OP) \ + static inline float OP ## _(const float &x, const float &y, const float &z) { return tlfloat_ ## OP ## f(x, y, z); } \ + static inline double OP ## _(const double &x, const double &y, const double &z) { return tlfloat_ ## OP(x, y, z); } \ + static inline tlfloat_quad OP ## _(const tlfloat_quad &x, const tlfloat_quad &y, const tlfloat_quad &z) { return tlfloat_ ## OP ## q(x, y, z); } \ + static inline tlfloat_octuple OP ## _(const tlfloat_octuple &x, const tlfloat_octuple &y, const tlfloat_octuple &z) { return tlfloat_ ## OP ## o(x, y, z); } \ + static_assert(true, "") + + TLFLOAT_POLYFUNC_f_f_f(add); + TLFLOAT_POLYFUNC_f_f_f(sub); + TLFLOAT_POLYFUNC_f_f_f(mul); + TLFLOAT_POLYFUNC_f_f_f(div); + TLFLOAT_POLYFUNC_f_f(neg); + TLFLOAT_POLYFUNC_f_f_f_f(fma); + TLFLOAT_POLYFUNC_f_f(sqrt); + TLFLOAT_POLYFUNC_f_f(cbrt); + TLFLOAT_POLYFUNC_f_f(fabs); + TLFLOAT_POLYFUNC_f_f_f(copysign); + TLFLOAT_POLYFUNC_f_f_f(fmax); + TLFLOAT_POLYFUNC_f_f_f(fmin); + TLFLOAT_POLYFUNC_f_f_f(fdim); + TLFLOAT_POLYFUNC_f_f_i(ldexp); + TLFLOAT_POLYFUNC_f_f_pi(frexp); + TLFLOAT_POLYFUNC_f_f_pf(modf); + TLFLOAT_POLYFUNC_f_f_f(nextafter); + TLFLOAT_POLYFUNC_i_f(ilogb); + TLFLOAT_POLYFUNC_i_f(isnan); + TLFLOAT_POLYFUNC_i_f(isinf); + TLFLOAT_POLYFUNC_i_f(finite); + TLFLOAT_POLYFUNC_i_f(fpclassify); + TLFLOAT_POLYFUNC_i_f(signbit); + TLFLOAT_POLYFUNC_f_f_f(hypot); + TLFLOAT_POLYFUNC_f_f(trunc); + TLFLOAT_POLYFUNC_f_f(floor); + TLFLOAT_POLYFUNC_f_f(ceil); + TLFLOAT_POLYFUNC_f_f(round); + TLFLOAT_POLYFUNC_f_f(rint); + TLFLOAT_POLYFUNC_f_f(sin); + TLFLOAT_POLYFUNC_f_f(cos); + TLFLOAT_POLYFUNC_f_f(tan); + TLFLOAT_POLYFUNC_f_f(sinpi); + TLFLOAT_POLYFUNC_f_f(cospi); + TLFLOAT_POLYFUNC_f_f(tanpi); + TLFLOAT_POLYFUNC_f_f(asin); + TLFLOAT_POLYFUNC_f_f(acos); + TLFLOAT_POLYFUNC_f_f(atan); + TLFLOAT_POLYFUNC_f_f_f(atan2); + TLFLOAT_POLYFUNC_f_f(exp); + TLFLOAT_POLYFUNC_f_f(expm1); + TLFLOAT_POLYFUNC_f_f(exp2); + TLFLOAT_POLYFUNC_f_f(exp10); + TLFLOAT_POLYFUNC_f_f(log); + TLFLOAT_POLYFUNC_f_f(log1p); + TLFLOAT_POLYFUNC_f_f(log2); + TLFLOAT_POLYFUNC_f_f(log10); + TLFLOAT_POLYFUNC_f_f_f(pow); + TLFLOAT_POLYFUNC_f_f(sinh); + TLFLOAT_POLYFUNC_f_f(cosh); + TLFLOAT_POLYFUNC_f_f(tanh); + TLFLOAT_POLYFUNC_f_f(asinh); + TLFLOAT_POLYFUNC_f_f(acosh); + TLFLOAT_POLYFUNC_f_f(atanh); + TLFLOAT_POLYFUNC_f_f_f(fmod); + TLFLOAT_POLYFUNC_f_f_f(remainder); + TLFLOAT_POLYFUNC_f_f_f_pi(remquo); + TLFLOAT_POLYFUNC_f_f(erf); + TLFLOAT_POLYFUNC_f_f(erfc); + TLFLOAT_POLYFUNC_f_f(tgamma); + TLFLOAT_POLYFUNC_f_f(lgamma); + +#undef TLFLOAT_POLYFUNC_f_f_f_f +#undef TLFLOAT_POLYFUNC_f_f_f_pi +#undef TLFLOAT_POLYFUNC_f_f_pi +#undef TLFLOAT_POLYFUNC_f_f_pf +#undef TLFLOAT_POLYFUNC_f_f_f +#undef TLFLOAT_POLYFUNC_i_f +#undef TLFLOAT_POLYFUNC_f_f +#endif // #if !defined(TLFLOAT_DOXYGEN) +} // namespace tlfloat { + +static_assert(sizeof(tlfloat_quad) == 16, "sizeof(tlfloat_quad)"); +static_assert(sizeof(tlfloat_octuple) == 32, "sizeof(tlfloat_octuple)"); +#endif // #if defined(__cplusplus) || defined(TLFLOAT_DOXYGEN) + +/** This function casts a double-precision FP number to a octuple-precision FP number. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_cast_o_d(const double x) { return tlfloat_cast_o_d_(x); } + /** This function casts a 64-bit signed integer to a octuple-precision FP number. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_cast_o_i64(const int64_t x) { return tlfloat_cast_o_i64_(x); } + /** This function casts a 64-bit unsigned integer to a octuple-precision FP number. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_cast_o_u64(const uint64_t x) { return tlfloat_cast_o_u64_(x); } +/** This function is for calling the corresponding function defined in tlfloat namespace from C language. Link with -ltlfloat. */ +static inline tlfloat_octuple tlfloat_strtoo(const char *nptr, const char **endptr) { return tlfloat_strtoo_(nptr, endptr); } + +static inline tlfloat_int128_t tlfloat_cast_i128_i64(const int64_t x) { return tlfloat_cast_i128_i64_(x); } +static inline tlfloat_uint128_t tlfloat_cast_u128_u64(const uint64_t x) { return tlfloat_cast_u128_u64_(x); } +static inline tlfloat_int128_t tlfloat_cast_i128_d(const double x) { return tlfloat_cast_i128_d_(x); } +static inline tlfloat_uint128_t tlfloat_cast_u128_d(const double x) { return tlfloat_cast_u128_d_(x); } + +// + +#endif // #ifndef __TLFLOAT_H_INCLUDED__ diff --git a/validation/extern/tlfloat/src/include/tlfloat/tlfloat.hpp b/validation/extern/tlfloat/src/include/tlfloat/tlfloat.hpp new file mode 100644 index 0000000..8f32f10 --- /dev/null +++ b/validation/extern/tlfloat/src/include/tlfloat/tlfloat.hpp @@ -0,0 +1,1951 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef __TLFLOAT_HPP_INCLUDED__ +#define __TLFLOAT_HPP_INCLUDED__ + +#include + +#include + +#ifndef TLFLOAT_FP_NAN +#define TLFLOAT_FP_NAN 0 +#define TLFLOAT_FP_INFINITE 1 +#define TLFLOAT_FP_ZERO 2 +#define TLFLOAT_FP_SUBNORMAL 3 +#define TLFLOAT_FP_NORMAL 4 +#define TLFLOAT_FP_ILOGB0 ((int)0x80000000) +#define TLFLOAT_FP_ILOGBNAN ((int)2147483647) +#endif + +namespace tlfloat { + namespace detail { + static const double LOG10_2_ = 0.30102999566398119521; // log(2)/log(10) + + static constexpr bool xisspace(int c) { return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v'; } + static constexpr bool xisdigit(int c) { return '0' <= c && c <= '9'; } + static constexpr int xtolower(int c) { if ('A' <= c && c <= 'Z') return c - 'A' + 'a'; else return c; } + + static constexpr int xstrncasecmp(const char *p, const char *q, size_t n) { + for(;n>0;n--) { + if (*p == '\0' && *q == '\0') return 0; + if (xtolower(*p) != xtolower(*q)) return *p > *q ? 1 : -1; + p++; q++; + } + return 0; + } + + static constexpr long long xstrtoll(const char *p, const char **endptr=nullptr) { + bool negative = false; + long long r = 0; + while(xisspace(*p)) p++; + if (*p == '-') { + negative = true; p++; + } else if (*p == '+') p++; + while(xisdigit(*p)) { + r = r * 10 + (*p - '0'); + p++; + } + if (endptr) *endptr = p; + return negative ? -r : r; + } + + static constexpr TLFLOAT_INLINE double xsqrt(double d) { + if (std::is_constant_evaluated()) { + if (d == 0) return d; + if (d < 0) return NAN; + if (d == INFINITY) return INFINITY; + + double q = 1; + + if (d < 8.636168555094445E-78) { + d *= 1.157920892373162E77; + q = 2.9387358770557188E-39; + } else if (d > 1.3407807929942597e+154) { + d *= 7.4583407312002070e-155; + q = 1.1579208923731620e+77; + } + + double x = std::bit_cast(0x5fe6ec85e7de30da - (std::bit_cast(d) >> 1)); + + d *= 0.5; + x *= 1.5 - d * x * x; + x *= 1.5 - d * x * x; + x *= 1.5 - d * x * x; + + return (x * d + 0.5 / x) * q; + } + return sqrt(d); + } + + // + + static constexpr TLFLOAT_INLINE int icmp(uint16_t x, uint16_t y) { + return x > y ? 1 : (x < y ? -1 : 0); + } + + static constexpr TLFLOAT_INLINE int icmp(uint32_t x, uint32_t y) { + return x > y ? 1 : (x < y ? -1 : 0); + } + + static constexpr TLFLOAT_INLINE int icmp(uint64_t x, uint64_t y) { + return x > y ? 1 : (x < y ? -1 : 0); + } + + template + static constexpr TLFLOAT_INLINE int icmp(const BigUInt& x, const BigUInt& y) { + return x.compare(y); + } + + // + + static constexpr TLFLOAT_INLINE uint32_t mul(uint16_t x, uint16_t y) { + return uint32_t(x) * uint32_t(y); + } + + static constexpr TLFLOAT_INLINE uint64_t mul(uint32_t x, uint32_t y) { + return uint64_t(x) * uint64_t(y); + } + + static constexpr TLFLOAT_INLINE BigUInt<7> mul(uint64_t x, uint64_t y) { + return BigUInt<7>::mul(BigUInt<6>(x), BigUInt<6>(y)); + } + + template + static constexpr TLFLOAT_INLINE BigUInt mul(const BigUInt& x, const BigUInt& y) { + return BigUInt::mul(x, y); + } + + // + + static constexpr TLFLOAT_INLINE xpair divmod2(uint16_t x_, uint16_t y_) { + uint32_t x = uint32_t(x_) << 15, y = y_ | (uint32_t(1) << 15); + return xpair { uint16_t(x / y), uint16_t(x % y) }; + } + + static constexpr TLFLOAT_INLINE xpair divmod2(uint32_t x_, uint32_t y_) { + uint64_t x = uint64_t(x_) << 31, y = y_ | (uint64_t(1) << 31); + return xpair { uint32_t(x / y), uint32_t(x % y) }; + } + + static constexpr TLFLOAT_INLINE xpair divmod2(uint64_t x, uint64_t y) { +#if defined(_MSC_VER) && !defined(__clang__) // This is required to avoid ICE + auto a = BigUInt<6>(x).divmod2(y, BigUInt<6>(y).reciprocal2()); +#else + auto a = BigUInt<6>(x).divmod2(y); +#endif + return xpair { a.first.u64, a.second.u64 }; + } + + template + static constexpr TLFLOAT_INLINE xpair, BigUInt> divmod2(const BigUInt& x, const BigUInt& y) { +#if defined(_MSC_VER) && !defined(__clang__) // This is required to avoid ICE + return x.divmod2(y, y.reciprocal2()); +#else + return x.divmod2(y); +#endif + } + + // + +#ifndef TLFLOAT_ENABLE_INTSQRT + static constexpr TLFLOAT_INLINE uint32_t isqrt(uint32_t s) { + uint64_t u = xsqrt(double(s) * (double)0x100000000ULL); + return u - (u >> 32); + } + + static constexpr TLFLOAT_INLINE uint64_t isqrt(uint64_t s) { + double d = xsqrt((double)uint64_t(s) * double(1ULL << 32) * double(1ULL << 32)); + return d > 0x1.fffffffffffffp+63 ? UINT64_MAX : uint64_t(d); // nextafter((double)UINT64_MAX, 0) + } + + static constexpr TLFLOAT_INLINE uint64_t isqrt(BigUInt<6> s) { + double d = xsqrt((double)uint64_t(s) * double(1ULL << 32) * double(1ULL << 32)); + return d > 0x1.fffffffffffffp+63 ? UINT64_MAX : uint64_t(d); + } + + template + static constexpr TLFLOAT_INLINE BigUInt isqrt(BigUInt s) { + if (!std::is_constant_evaluated()) assert(s >= (BigUInt(1) << (sizeof(BigUInt) * 8 - 2))); + BigUInt x = BigUInt(isqrt(s.high) | 1, 0); + x = (x >> 1) + s.mulhiAprx(x.reciprocalAprx()); + return x + ((~x >> (sizeof(x)*8 - 1)) & 1); + } +#else // #ifndef TLFLOAT_ENABLE_INTSQRT + static constexpr uint8_t rsqrttab[256] = { + 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfe, 0xfc, 0xfa, 0xf8, 0xf7, 0xf5, 0xf3, 0xf1, 0xf0, 0xee, 0xec, 0xeb, 0xe9, 0xe8, 0xe6, + 0xe5, 0xe4, 0xe2, 0xe1, 0xdf, 0xde, 0xdd, 0xdc, 0xda, 0xd9, 0xd8, 0xd7, 0xd6, 0xd4, 0xd3, 0xd2, + 0xd1, 0xd0, 0xcf, 0xce, 0xcd, 0xcc, 0xcb, 0xca, 0xc9, 0xc8, 0xc7, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2, + 0xc2, 0xc1, 0xc0, 0xbf, 0xbe, 0xbd, 0xbd, 0xbc, 0xbb, 0xba, 0xb9, 0xb9, 0xb8, 0xb7, 0xb6, 0xb6, + 0xb5, 0xb4, 0xb4, 0xb3, 0xb2, 0xb2, 0xb1, 0xb0, 0xb0, 0xaf, 0xae, 0xae, 0xad, 0xac, 0xac, 0xab, + 0xab, 0xaa, 0xa9, 0xa9, 0xa8, 0xa8, 0xa7, 0xa7, 0xa6, 0xa6, 0xa5, 0xa4, 0xa4, 0xa3, 0xa3, 0xa2, + 0xa2, 0xa1, 0xa1, 0xa0, 0xa0, 0x9f, 0x9f, 0x9e, 0x9e, 0x9e, 0x9d, 0x9d, 0x9c, 0x9c, 0x9b, 0x9b, + 0x9a, 0x9a, 0x9a, 0x99, 0x99, 0x98, 0x98, 0x97, 0x97, 0x97, 0x96, 0x96, 0x95, 0x95, 0x95, 0x94, + 0x94, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x91, 0x91, 0x90, 0x90, 0x90, 0x8f, 0x8f, 0x8f, 0x8e, + 0x8e, 0x8e, 0x8d, 0x8d, 0x8d, 0x8c, 0x8c, 0x8c, 0x8b, 0x8b, 0x8b, 0x8a, 0x8a, 0x8a, 0x89, 0x89, + 0x89, 0x89, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x84, + 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, + }; + + static constexpr TLFLOAT_INLINE uint8_t irsqrt(uint8_t s) { + return rsqrttab[s]; + } + + static constexpr TLFLOAT_INLINE uint16_t irsqrt(uint16_t s) { + if (!std::is_constant_evaluated()) assert(s >= (1U << 14)); + uint8_t t = (s + (1 << 7)) >> 8; + t = irsqrt(uint8_t(t)); + uint32_t u = (t * (0xc000ULL - ((uint16_t(t) * t * uint32_t(s) + (1U << 15)) >> 16)) + (1U << 6)) >> 7; + return u > 0xffffU ? 0xffffU : u; + } + + static constexpr TLFLOAT_INLINE uint32_t irsqrt(uint32_t s) { + if (!std::is_constant_evaluated()) assert(s >= (1ULL << 30)); + uint16_t t = (s + (1 << 15)) >> 16; + t = irsqrt(uint16_t(t - (t == 0))); + uint64_t u = (t * (0xc0000000ULL - ((uint32_t(t) * t * uint64_t(s) + (1U << 31)) >> 32)) + (1U << 14)) >> 15; + return u > 0xffffffffU ? 0xffffffffU : u; + } + + static constexpr TLFLOAT_INLINE uint64_t irsqrt(uint64_t s) { + if (!std::is_constant_evaluated()) assert(s >= (1ULL << 62)); + uint32_t t = (s + (1U << 31)) >> 32; + t = irsqrt(uint32_t(t - (t == 0))); + BigUInt<7> u = (t * (0xc000000000000000ULL - ((uint64_t(t) * t * BigUInt<7>(s) + (1ULL << 63)) >> 64)) + (1U << 30)) >> 31; + return u > 0xffffffffffffffffULL ? 0xffffffffffffffffULL : u.low.u64; + } + + template + static constexpr TLFLOAT_INLINE BigUInt irsqrt(BigUInt s) { + if (!std::is_constant_evaluated()) assert(s >= (BigUInt(1) << ((1 << N)-2))); + BigUInt t = (s + (BigUInt(1) << ((1 << (N-1))-1))).high; + t = irsqrt(BigUInt(t - (t == 0))); + BigUInt u = (t * ((BigUInt(0xc) << ((1 << N)-4)) - ((BigUInt::mul(BigUInt::mul(t, t), s) + (BigUInt(1) << ((1 << N)-1))) >> (1 << N))) + (BigUInt(1) << ((1 << (N-1))-2))) >> ((1 << (N-1))-1); + return u.high.isZero() ? u.low : ~BigUInt(0U); + } + + template<> constexpr TLFLOAT_INLINE BigUInt<6> irsqrt(BigUInt<6> s) { return irsqrt(s.u64); } + + static constexpr TLFLOAT_INLINE uint32_t isqrt(uint32_t s) { + if (s == 0) return 0; + if (!std::is_constant_evaluated()) assert(s >= (1U << 30)); + uint64_t u = (uint64_t(s) * irsqrt(s)) >> 31; + return u > 0xffffffffU ? 0xffffffffU : u; + } + + static constexpr TLFLOAT_INLINE uint64_t isqrt(uint64_t s) { + if (s == 0) return 0; + if (!std::is_constant_evaluated()) assert(s >= (1ULL << 62)); + __uint128_t u = (__uint128_t(s) * irsqrt(s)) >> 63; + return u > 0xffffffffffffffffULL ? 0xffffffffffffffffULL : u; + } + + static constexpr TLFLOAT_INLINE uint64_t isqrt(BigUInt<6> s) { return isqrt(s.u64); } + + template + static constexpr TLFLOAT_INLINE BigUInt isqrt(BigUInt s) { + if (!std::is_constant_evaluated()) assert(s >= (BigUInt(1) << (sizeof(BigUInt) * 8 - 2))); + BigUInt u = s.mulhiAprx(irsqrt(s)) << 1; + return u.high.isZero() ? u.low : ~BigUInt(0U); + } +#endif // #ifndef TLFLOAT_ENABLE_INTSQRT + + template + class UnpackedFloat { + template friend class UnpackedFloat; + + static_assert(sizeof(longmant_t) == 2 * sizeof(mant_t)); + + static constexpr size_t sizeof_mant_t() { return sizeof(mant_t); } + + template + static constexpr TLFLOAT_INLINE mant_t mantBits(const floattype& fl) { + return toBits(fl) & ((mant_t(1) << nbmant) - 1); + } + + template + static constexpr TLFLOAT_INLINE mant_t expBits(const floattype& fl) { + return (toBits(fl) >> nbmant) & ((mant_t(1) << nbexp) - 1); + } + + template + static constexpr TLFLOAT_INLINE mant_t toBits(const floattype& f) { + static_assert(sizeof(floattype) == sizeof(mant_t)); + return std::bit_cast(f); + } + + template + static constexpr TLFLOAT_INLINE floattype fromBits(const mant_t& u) { + static_assert(sizeof(floattype) == sizeof(mant_t)); + return std::bit_cast(u); + } + + // + + public: + int32_t exp; + mant_t mant; + bool sign, iszero, isinf, isnan; + + static constexpr TLFLOAT_INLINE int expoffset() { + if constexpr (nbexp != 0) return (1 << (nbexp - 1)) - 1; + return 0; + } + static constexpr TLFLOAT_INLINE int nbexp_() { return nbexp; } + static constexpr TLFLOAT_INLINE int nbmant_() { return nbmant; } + static constexpr TLFLOAT_INLINE longmant_t longmant_t_() { return 0; } + static constexpr TLFLOAT_INLINE UnpackedFloat xUnpackedFloat() { + return UnpackedFloat(0, 0, false, true, false, false); + } + + constexpr TLFLOAT_INLINE int32_t ilogb() const { + if (exp != 0) return exp - expoffset() + 1; + return (sizeof(mant_t) * 8 - nbmant_()) - clz(mant) - expoffset(); + } + + friend constexpr TLFLOAT_INLINE UnpackedFloat fabs(UnpackedFloat x) { x.sign = 0; return x; } + + friend constexpr TLFLOAT_INLINE UnpackedFloat ldexp_(UnpackedFloat x, const int e) { +#if !(defined(__GNUC__) && !defined(__clang__)) + static_assert(x.nbexp_() == 0); +#endif + if (!x.iszero) { + int64_t y = x.exp + (int64_t)e; + if (y < INT32_MIN) return zero(x.sign); + if (y > INT32_MAX) return infinity(x.sign); + x.exp = y; + } + return x; + } + + friend constexpr TLFLOAT_INLINE UnpackedFloat ldexp(UnpackedFloat x, const int e) { + return ldexp_(x.cast((decltype(UnpackedFloat::xUnpackedFloat())*) 0), e).cast((UnpackedFloat*) 0); + } + + friend constexpr TLFLOAT_INLINE xpair frexp_(UnpackedFloat x) { + static_assert(x.nbexp_() == 0); + xpair ret = { x, x.exp - expoffset() + 2 }; + ret.first.exp = expoffset() - 2; + return ret; + } + + friend constexpr TLFLOAT_INLINE int cmp(const UnpackedFloat &lhs, const UnpackedFloat &rhs) { + if (lhs.iszero && rhs.iszero) return 0; + if (rhs.iszero) return lhs.sign ? -1 : 1; + if (lhs.iszero) return rhs.sign ? 1 : -1; + if (!lhs.sign && rhs.sign) return +1; + if ( lhs.sign && !rhs.sign) return -1; + if (lhs.exp > rhs.exp) return lhs.sign ? -1 : 1; + if (lhs.exp < rhs.exp) return rhs.sign ? 1 : -1; + if (lhs.mant > rhs.mant) return lhs.sign ? -1 : 1; + if (lhs.mant < rhs.mant) return lhs.sign ? 1 : -1; + return 0; + } + + static constexpr TLFLOAT_INLINE unsigned clz(uint64_t u) { + return u == 0 ? 64 : clz64(u); + } + +#ifdef TLFLOAT_ENABLE_GNUC_CLZ + static constexpr TLFLOAT_INLINE unsigned clz(uint32_t u) { + return u == 0 ? 32 : __builtin_clz(u); + } +#else + static constexpr TLFLOAT_INLINE unsigned clz(uint32_t u) { + return clz(uint64_t(u)) - 32; + } +#endif + + static constexpr TLFLOAT_INLINE unsigned clz(uint16_t u) { + return clz(uint32_t(u)) - 16; + } + + template + static constexpr TLFLOAT_INLINE unsigned clz(const BigUInt& u) { + return u.clz(); + } + + // + + static constexpr TLFLOAT_INLINE bool bit(const uint64_t x, unsigned b) { return (x >> b) & 1; } + + template + static constexpr TLFLOAT_INLINE bool bit(const BigUInt& x, unsigned b) { return x.bit(b); } + + // + + friend constexpr double to_double(const UnpackedFloat &uf) { + typedef UnpackedFloat, 11, 52> udouble; + return (double)uf.cast((udouble *)nullptr); + } + + static constexpr TLFLOAT_INLINE UnpackedFloat nan() { + return UnpackedFloat((mant_t(3) << (nbmant - 1)), (1 << nbexp) - 2, false, false, false, true); + } + + static constexpr TLFLOAT_INLINE UnpackedFloat infinity(bool sign = false) { + return UnpackedFloat(mant_t(1) << nbmant, (1 << nbexp) - 2, sign, false, true, false); + } + + static constexpr TLFLOAT_INLINE UnpackedFloat flt_true_min(bool sign = false) { + return UnpackedFloat(mant_t(1), 0, sign, false, false, false); + } + + static constexpr TLFLOAT_INLINE UnpackedFloat flt_min(bool sign = false) { + return UnpackedFloat(mant_t(1) << nbmant, 0, sign, false, false, false); + } + + static constexpr TLFLOAT_INLINE UnpackedFloat flt_max(bool sign = false) { + return UnpackedFloat((mant_t(2) << nbmant) - 1, (1 << nbexp) - 3, sign, false, false, false); + } + + static constexpr TLFLOAT_INLINE UnpackedFloat zero(bool sign = false) { + return UnpackedFloat(0, 0, sign, true, false, false); + } + + static constexpr TLFLOAT_INLINE UnpackedFloat faddsub(const UnpackedFloat &lhs, const UnpackedFloat &rhs, bool negateRhs) { + const bool rhssign = rhs.sign != negateRhs; + const int ed = lhs.exp - rhs.exp; + + if (lhs.iszero | lhs.isinf | lhs.isnan | rhs.iszero | rhs.isinf | rhs.isnan | (ed > +nbmant+2) | (ed < -nbmant-2)) { + if (lhs.iszero && rhs.iszero) + return UnpackedFloat(0, 0, lhs.sign && rhssign, true, false, false); + + if (lhs.isnan || rhs.iszero) return lhs; + if (rhs.isnan || lhs.iszero) + return UnpackedFloat(rhs.mant, rhs.exp, rhssign, rhs.iszero, rhs.isinf, rhs.isnan); + + if (lhs.isinf || rhs.isinf) { + if (lhs.isinf && rhs.isinf && lhs.sign == rhssign) return lhs; + if (lhs.isinf && rhs.isinf && lhs.sign != rhssign) return nan(); + if (lhs.isinf) return lhs; + return UnpackedFloat(rhs.mant, rhs.exp, rhssign, rhs.iszero, rhs.isinf, rhs.isnan); + } + + if (ed > +nbmant+2) return lhs; + if (ed < -nbmant-2) + return UnpackedFloat(rhs.mant, rhs.exp, rhssign, rhs.iszero, rhs.isinf, rhs.isnan); + } + + const bool subtract = lhs.sign != rhssign; + + longmant_t lm, rm; + if (ed > 0) { + lm = longmant_t(lhs.mant) << (sizeof(mant_t) * 8 ); + rm = longmant_t(rhs.mant) << (sizeof(mant_t) * 8 - ed); + } else { + lm = longmant_t(lhs.mant) << (sizeof(mant_t) * 8 + ed); + rm = longmant_t(rhs.mant) << (sizeof(mant_t) * 8 ); + } + + int64_t exp = ed > 0 ? lhs.exp : rhs.exp; + + longmant_t am = 0; + bool resultsign = lhs.sign; + + if (!subtract) { + am = lm + rm; + if (bit(am, (sizeof(mant_t) * 8) + nbmant + 1)) { am >>= 1; exp++; } + am += bit(am, sizeof(mant_t) * 8) + ((longmant_t(1) << (sizeof(mant_t) * 8 - 1)) - 1); + if (bit(am, (sizeof(mant_t) * 8) + nbmant + 1)) { am >>= 1; exp++; } + if constexpr (nbexp != 0) { + if (exp >= (1 << nbexp) - 2) { + exp = (1 << nbexp) - 2; + am = longmant_t(1) << (nbmant + sizeof(mant_t) * 8); + } + } + } else { + am = lm < rm ? (rm - lm) : (lm - rm); + resultsign = lm < rm ? rhssign : lhs.sign; + if (am == 0) resultsign = false; + + const int x = clz(am) - (sizeof(mant_t) * 8 - nbmant - 1); + am <<= x; + exp -= x; + + int y = 0; + if constexpr (nbexp != 0) { + if (exp < 0) { + if (exp <= -(int)sizeof(longmant_t) * 8) am = 0; + y = -exp; + exp = 0; + } + } + am += bitmask(sizeof(mant_t) * 8 + y - 1) + bit(am, sizeof(mant_t) * 8 + y); + am >>= y; + + if (bit(am, (sizeof(mant_t) * 8) + nbmant + 1)) { am >>= 1; exp++; } + } + + am >>= sizeof(mant_t) * 8; + if (am == 0) exp = 0; + if constexpr (nbexp == 0) { + if (exp < INT32_MIN) return zero(resultsign); + if (exp > INT32_MAX) return infinity(resultsign); + } + return UnpackedFloat(mant_t(am), exp, resultsign, am == 0, nbexp != 0 && exp == (1 << nbexp) - 2, false); + } + + static constexpr TLFLOAT_INLINE UnpackedFloat fmul(const UnpackedFloat &lhs, const UnpackedFloat &rhs) { + if (int(lhs.isnan) | int(rhs.isnan) | (int(lhs.iszero) & int(rhs.isinf)) | + (int(lhs.isinf) & int(rhs.iszero)) | int(lhs.isinf) | int(rhs.isinf)) { + if (lhs.isnan) return lhs; + if (rhs.isnan) return rhs; + if ((lhs.iszero && rhs.isinf) || (lhs.isinf && rhs.iszero)) return nan(); + if (lhs.isinf || rhs.isinf) return infinity(lhs.sign != rhs.sign); + } + + longmant_t am = mul(lhs.mant, rhs.mant); + + const int x = (int)clz(am) - ((int)sizeof(mant_t)*8 - nbmant) * 2; + am = am << (x + sizeof(mant_t)*8 - nbmant + 1); + + int64_t exp = (int64_t)lhs.exp + rhs.exp - expoffset() - x; + + int y = 0; + if constexpr (nbexp != 0) { + if (exp < 0) { + if (exp <= -(int)sizeof(longmant_t) * 8) am = 0; + y = -exp; + exp = 0; + } + } + am += bitmask(sizeof(mant_t) * 8 + y - 1) + bit(am, sizeof(mant_t) * 8 + y); + am >>= y; + + if (bit(am, (sizeof(mant_t) * 8) + nbmant + 1)) { am >>= 1; exp++; } + if constexpr (nbexp != 0) { + if (exp >= (1 << nbexp) - 2) { + exp = (1 << nbexp) - 2; + am = longmant_t(1) << (nbmant + sizeof(mant_t) * 8); + } + } + am >>= sizeof(mant_t) * 8; + if (am == 0) exp = 0; + if constexpr (nbexp == 0) { + if (exp < INT32_MIN) return zero(lhs.sign != rhs.sign); + if (exp > INT32_MAX) return infinity(lhs.sign != rhs.sign); + } + return UnpackedFloat(mant_t(am), exp, lhs.sign != rhs.sign, am == 0, nbexp != 0 && exp == (1 << nbexp) - 2, false); + } + + static constexpr TLFLOAT_INLINE UnpackedFloat fdiv(const UnpackedFloat &lhs, const UnpackedFloat &rhs) { + if (lhs.isnan | lhs.isinf | rhs.isnan | rhs.iszero | rhs.isinf) { + if (lhs.isnan) return lhs; + if (rhs.isnan) return rhs; + + if (rhs.iszero) { + if (lhs.iszero) return nan(); + return infinity(lhs.sign != rhs.sign); + } + if (rhs.isinf) { + if (lhs.isinf) return nan(); + return zero(lhs.sign != rhs.sign); + } + if (lhs.isinf) return infinity(lhs.sign != rhs.sign); + } + + int64_t exp = (int64_t)lhs.exp - rhs.exp + expoffset() - 1; + int sl = clz(lhs.mant); + int sr = clz(rhs.mant); + exp -= sl + 1 - sr; + + auto p = divmod2(mant_t(lhs.mant << sl), mant_t(rhs.mant << sr)); + longmant_t am = longmant_t(p.first) << (nbmant + 2); + + int c = icmp(p.second, rhs.mant << (sr - 1)); + c = c >= 0 ? c + 2 : p.second != 0 ? 1 : 0; + am += longmant_t(c) << nbmant; + + const int x = clz(am) - nbexp; + am = x >= 0 ? (am << (x & (sizeof(am)*8-1))) : (am >> -x); + exp -= x; + + int y = 0; + if constexpr (nbexp != 0) { + if (exp < 0) { + if (exp <= -(int)sizeof(longmant_t) * 8) am = 0; + y = -exp; + exp = 0; + } + } + am += bitmask(sizeof(mant_t) * 8 + y - 1) + bit(am, sizeof(mant_t) * 8 + y); + am >>= y; + + if (bit(am, (sizeof(mant_t) * 8) + nbmant + 1)) { am >>= 1; exp++; } + if constexpr (nbexp != 0) { + if (exp >= (1 << nbexp) - 2) { + exp = (1 << nbexp) - 2; + am = longmant_t(1) << (nbmant + sizeof(mant_t) * 8); + } + } + am >>= sizeof(mant_t) * 8; + if (am == 0) exp = 0; + if constexpr (nbexp == 0) { + if (exp < INT32_MIN) return zero(lhs.sign != rhs.sign); + if (exp > INT32_MAX) return infinity(lhs.sign != rhs.sign); + } + return UnpackedFloat(mant_t(am), exp, lhs.sign != rhs.sign, am == 0, nbexp != 0 && exp == (1 << nbexp) - 2, false); + } + + static constexpr UnpackedFloat fma(const UnpackedFloat &lhs, const UnpackedFloat &rhs, const UnpackedFloat &zhs) { + if (lhs.isnan | lhs.isinf | rhs.isnan | rhs.isinf | zhs.isnan | zhs.isinf) { + if (lhs.isnan) return lhs; + if (rhs.isnan) return rhs; + if (zhs.isnan) return zhs; + + if (lhs.isinf || rhs.isinf || zhs.isinf) { + if ((lhs.iszero && rhs.isinf) || (lhs.isinf && rhs.iszero)) return nan(); + if (!zhs.isinf) return infinity(lhs.sign != rhs.sign); + if (!(lhs.isinf || rhs.isinf) || ((lhs.sign != rhs.sign) == zhs.sign)) return infinity(zhs.sign); + return nan(); + } + } + + int64_t exp = (int64_t)lhs.exp + rhs.exp - expoffset(); + longmant_t am = mul(lhs.mant, rhs.mant); + const int x = (int)clz(am) - ((int)sizeof(mant_t)*8 - nbmant) * 2; + am = am << (x + sizeof(mant_t)*8 - nbmant + 1); + exp -= x; + if (am == 0) exp = -expoffset(); + + int ed = exp - zhs.exp; + if constexpr (nbexp == 0) { + if (am == 0 && zhs.iszero) { + ed = 0; + } else if (am == 0) { + ed = -(int)sizeof(longmant_t) * 8; + } else if (zhs.iszero) { + ed = +(int)sizeof(longmant_t) * 8; + } + } + const bool subtract = (lhs.sign != rhs.sign) != zhs.sign; + bool resultsign = lhs.sign != rhs.sign; + + const int NGB = 4; + bool amsb = false, zmsb = false; + longmant_t zm = longmant_t(zhs.mant) << (sizeof(mant_t) * 8); + if (ed < 0) { + if (ed <= -(int)sizeof(longmant_t) * 8 + NGB) { + amsb = am != 0; + am = 0; + } else { + amsb = (bitmask(NGB - ed) & am) != 0; + am = (am >> -ed) & ~((longmant_t(1) << NGB) - 1); + } + } else { + if (ed >= (int)sizeof(longmant_t) * 8 - NGB) { + zmsb = zm != 0; + zm = 0; + } else { + zmsb = (bitmask(NGB + ed) & zm) != 0; + zm = (zm >> ed) & ~((longmant_t(1) << NGB) - 1); + } + } + exp = ed > 0 ? exp : zhs.exp; + + if (!subtract) { + am += zm; + if (bit(am, (sizeof(mant_t) * 8) + nbmant + 1)) { am >>= 1; exp++; } + am += ((longmant_t(1) << (sizeof(mant_t) * 8 - 1)) - 1) + (amsb || zmsb || bit(am, sizeof(mant_t) * 8)); + } else { + bool psb = am >= zm ? amsb : zmsb; + bool nsb = am >= zm ? zmsb : amsb; + resultsign = am >= zm ? resultsign : zhs.sign; + am = am >= zm ? (am - zm) : (zm - am); + if (am == 0 && !psb) resultsign = 0; + const int x = clz(am) - (sizeof(mant_t) * 8 - nbmant - 1); + am <<= x; + exp -= x; + const int y = (nbexp != 0 && exp < 0) ? -exp : 0; + am += bitmask(sizeof(mant_t) * 8 + y - 1) + (!nsb && (psb || bit(am, sizeof(mant_t) * 8 + y))); + am >>= y; + } + + if (bit(am, (sizeof(mant_t) * 8) + nbmant + 1)) { am >>= 1; exp++; } + if constexpr (nbexp != 0) { + if (exp < 0) exp = 0; + if (exp >= (1 << nbexp) - 2) { + exp = (1 << nbexp) - 2; + am = longmant_t(1) << (nbmant + sizeof(mant_t) * 8); + } + } + am >>= sizeof(mant_t) * 8; + if (am == 0) exp = 0; + if constexpr (nbexp == 0) { + if (exp < INT32_MIN) return zero(resultsign); + if (exp > INT32_MAX) return infinity(resultsign); + } + return UnpackedFloat(mant_t(am), exp, resultsign, am == 0, nbexp != 0 && exp == (1 << nbexp) - 2, false); + } + + // + + constexpr TLFLOAT_INLINE UnpackedFloat() = default; + constexpr TLFLOAT_INLINE UnpackedFloat(const UnpackedFloat&) = default; + constexpr TLFLOAT_INLINE UnpackedFloat& operator=(const UnpackedFloat&) = default; + + constexpr TLFLOAT_INLINE UnpackedFloat(const mant_t mant_, int32_t exp_, bool sign_, bool iszero_, bool isinf_, bool isnan_) : + exp(exp_), mant(mant_), sign(sign_), iszero(iszero_), isinf(isinf_), isnan(isnan_) { + } + + explicit constexpr TLFLOAT_INLINE UnpackedFloat(const int i) { *this = castFromInt(i); } + + static constexpr uint8_t hexchartab[256] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + }; + + constexpr UnpackedFloat(const char *ptr, const char **endptr=nullptr) { + while(xisspace(*ptr)) ptr++; + + bool positive = true; + if (*ptr == '-') { + positive = false; ptr++; + } else if (*ptr == '+') { + ptr++; + } + + if (xstrncasecmp(ptr, "nan", 3) == 0) { *this = nan(); if (endptr) { *endptr = ptr + 3; } return; } + if (xstrncasecmp(ptr, "inf", 3) == 0) { *this = infinity(!positive); if (endptr) { *endptr = ptr + 3; } return; } + + if (*ptr == '0' && (*(ptr+1) == 'x' || *(ptr+1) == 'X')) { + ptr += 2; + longmant_t m = 0; + exp = 0; + bool bp = false; + int dr = sizeof(mant_t)*2, wd = 0; + uint64_t w = 0; + + while(*ptr != '\0' && dr >= 0) { + int d = hexchartab[(uint8_t)*ptr]; + if (d != 0xff) { + ptr++; + } else if (*ptr == '.') { + if (bp) break; + bp = true; + ptr++; + continue; + } else break; + w = (w << 4) + d; + if (w != 0 || m != 0) dr--; + wd++; + if (w >= (1ULL << 60)) { + if (m != 0) m <<= wd * 4; + m |= w; + w = 0; + wd = 0; + } + if (bp) exp -= 4; + } + + if (m != 0) m <<= wd * 4; + m |= w; + + while(hexchartab[(uint8_t)*ptr] != 0xff) { ptr++; if (!bp) exp += 4; } + if (*ptr == '.' && !bp) ptr++; + while(hexchartab[(uint8_t)*ptr] != 0xff) ptr++; + + if (*ptr == 'p' || *ptr == 'P') { + const char *q; + long long z = xstrtoll(ptr+1, &q); + if (!(ptr+1 == q || xisspace((int)*(ptr+1)))) { + exp += z; + ptr = q; + } + } + + const int x = (int)clz(m) - ((int)sizeof(m) * 8 - nbmant - 1); + exp += nbmant - x - 1; + if (x >= 0) { + mant = x < (int)sizeof(mant_t)*8 ? mant_t(m << x) : 0; + } else { + mant = mant_t((m + (longmant_t(1) << (-x-1))) >> -x); + if (bit(mant, nbmant + 1)) { mant >>= 1; exp++; } + } + + sign = !positive; + isinf = isnan = iszero = false; + + if (mant == 0) { + iszero = true; + exp = 0; + } + + if (endptr) *endptr = ptr; + + return; + } + + bool bp = false; + UnpackedFloat n = castFromInt(0); + int e = 0; + + for(unsigned i=0;;i++) { + char c = ptr[i]; + if (c == '\0') { + ptr += i; + break; + } + if (c == '.' && !bp) { bp = true; continue; } + if ('0' <= c && c <= '9') { + if (n.exp > expoffset() + nbmant) { + if (!bp) e++; + continue; + } + n = fma(n, castFromInt(10), castFromInt(c - '0')); + if (bp) e--; + continue; + } + if (c == 'e' || c == 'E') { + e += xstrtoll(&ptr[i+1], &ptr); + break; + } + } + + n *= UnpackedFloat::exp10i(e); + if (!positive) n = -n; + *this = n; + + if (endptr) *endptr = ptr; + } + + template, int> = 0> + constexpr TLFLOAT_INLINE UnpackedFloat(const floattype &fl) : + exp(int32_t(expBits(fl) - (expBits(fl) != 0))), + mant(mantBits(fl) | (mant_t(expBits(fl) != 0) << nbmant)), + sign(toBits(fl) >> (sizeof(fl) * 8 - 1)), + iszero((toBits(fl) & ((mant_t(1) << (sizeof(mant_t)*8-1))-1)) == 0), + isinf((exp == ((1 << nbexp) - 2)) && mant == (mant_t(1) << nbmant)), + isnan((exp == ((1 << nbexp) - 2)) && mant != (mant_t(1) << nbmant)) { + static_assert(sizeof(floattype) == sizeof(mant_t)); + } + + template + explicit constexpr TLFLOAT_INLINE operator floattype() const { + static_assert(sizeof(floattype) == sizeof(mant_t)); + mant_t m = mant & ((mant_t(1) << nbmant) - 1); + m |= mant_t(sign) << (sizeof(mant_t) * 8 - 1); + m |= mant_t(exp + ((mant >> nbmant) != 0)) << nbmant; + return fromBits(m); + } + + template + constexpr TLFLOAT_INLINE dsttype cast(const dsttype *ptr) const { + typedef decltype(dsttype::mant) dmant_t; + typedef decltype(dsttype::longmant_t_()) dlongmant_t; + if (isnan) return dsttype::nan(); + if constexpr (dsttype::nbmant_() > nbmant && (dsttype::sizeof_mant_t() > sizeof_mant_t() || + nbexp == 0 || dsttype::nbexp_() == 0)) { + int64_t e = (int64_t)exp - expoffset() + dsttype::expoffset(); + const int x = clz(mant) - (sizeof(mant_t) * 8 - nbmant - 1); + e -= x; + int s = dsttype::nbmant_() - nbmant + x; + if constexpr (dsttype::nbexp_() != 0) { if (e < 0) { s += e; e = 0; } } + dmant_t m = s < int(sizeof(dmant_t)*8) ? dmant_t(mant) << s : 0; + if (isinf || isnan) e = (1 << dsttype::nbexp_()) - 2; + if (iszero) e = 0; + return dsttype(m, (int)e, sign, iszero, isinf, isnan); + } else if constexpr (dsttype::nbmant_() < nbmant && (dsttype::sizeof_mant_t() < sizeof_mant_t() || + nbexp == 0 || dsttype::nbexp_() == 0)) { + bool isinf_ = isinf, sb = false; + int64_t e = (int64_t)exp - expoffset() + dsttype::expoffset(); + mant_t m = mant; + if constexpr (dsttype::nbexp_() != 0) { + if (e >= (1 << dsttype::nbexp_()) - 2) isinf_ = true; + if (e < 0) { + sb = (m & bitmask(-e)) != 0; + if (unsigned(-e) >= sizeof(mant_t)*8) { sb = m != 0; m = 0; } + m >>= -e; + e = 0; + } + } + m += bit(m, nbmant - dsttype::nbmant_()) || sb; + m += (mant_t(1) << ((nbmant - dsttype::nbmant_()) - 1)) - 1; + if (bit(m, nbmant + 1)) { m >>= 1; e++; } + m >>= nbmant - dsttype::nbmant_(); + if (isinf_ || isnan) e = (1 << dsttype::nbexp_()) - 2; + if (isinf_) m = mant_t(1) << dsttype::nbmant_(); + if (isnan) m = mant_t(3) << (dsttype::nbmant_() - 1); + bool iszero_ = iszero; + if (dmant_t(m) == 0) iszero_ = true; + if (iszero_) e = 0; + return dsttype(dmant_t(m), (int)e, sign, iszero_, isinf_, isnan); + } else if constexpr (dsttype::nbmant_() < nbmant && dsttype::sizeof_mant_t() == sizeof_mant_t()) { + // BFloat16 <- Half + int64_t e = (int64_t)exp - expoffset() + dsttype::expoffset(); + const int x = clz(mant) - (sizeof(mant_t) * 8 - nbmant - 1); + e -= x; + dlongmant_t m = dlongmant_t(mant) << (dsttype::nbmant_() - nbmant + x + (sizeof(dlongmant_t)-sizeof(dmant_t))*8); + if (isinf || isnan) e = (1 << dsttype::nbexp_()) - 2; + if (iszero) e = 0; + m += bitmask(sizeof(dmant_t) * 8 - 1) + bit(m, sizeof(dmant_t) * 8); + if (bit(m, (sizeof(dmant_t) * 8) + dsttype::nbmant_() + 1)) { m >>= 1; e++; } + m >>= sizeof(dmant_t) * 8; + return dsttype(dmant_t(m), m == 0 ? 0 : e, sign, m == 0, isinf, isnan); + } else if constexpr (dsttype::nbmant_() > nbmant && dsttype::sizeof_mant_t() == sizeof_mant_t()) { + // Half <- BFloat16 + bool isinf_ = isinf, sb = false; + int64_t e = (int64_t)exp - expoffset() + dsttype::expoffset(); + longmant_t m = longmant_t(mant) << (sizeof(mant_t) * 8); + if constexpr (dsttype::nbexp_() != 0) { + if (e >= (1 << dsttype::nbexp_()) - 2) isinf_ = true; + if (e < 0) { + sb = (m & bitmask(-e)) != 0; + if (unsigned(-e) >= sizeof(longmant_t)*8) { sb = m != 0; m = 0; } + m >>= -e; + e = 0; + } + } + m += bit(m, (nbmant + sizeof(mant_t)*8) - dsttype::nbmant_()) || sb; + m += (longmant_t(1) << ((nbmant + sizeof(mant_t)*8 - dsttype::nbmant_()) - 1)) - 1; + if (bit(m, nbmant + sizeof(mant_t)*8 + 1)) { m >>= 1; e++; } + m >>= nbmant + sizeof(mant_t)*8 - dsttype::nbmant_(); + if (isinf_ || isnan) e = (1 << dsttype::nbexp_()) - 2; + if (isinf_) m = longmant_t(1) << dsttype::nbmant_(); + if (isnan) m = longmant_t(3) << (dsttype::nbmant_() - 1); + bool iszero_ = iszero; + if (dmant_t(m) == 0) iszero_ = true; + if (iszero_) e = 0; + return dsttype(dmant_t(m), (int)e, sign, iszero_, isinf_, isnan); + } else { + static_assert(dsttype::nbmant_() == nbmant); + static_assert(dsttype::sizeof_mant_t() == sizeof_mant_t()); + return dsttype(mant, exp, sign, iszero, isinf, isnan); + } + } + + template && sizeof(dsttype) <= 8), int> = 0> + constexpr TLFLOAT_INLINE dsttype castToInt(const dsttype *ptr) const { + if (exp - expoffset() < -1) return 0; + if constexpr (std::is_unsigned_v) { + if (sign && !iszero) return ~dsttype(0); + if (exp - expoffset() >= int(sizeof(dsttype)*8-1)) return ~dsttype(0); + int s = nbmant - (exp - expoffset() + 1); + return dsttype(s > 0 ? (mant >> s) : (dsttype(mant) << -s)); + } else { + if (exp - expoffset() >= int(sizeof(dsttype)*8-2)) + return dsttype(dsttype(1) << (sizeof(dsttype)*8-1)); + int s = nbmant - (exp - expoffset() + 1); + dsttype r = s > 0 ? dsttype(mant >> s) : (dsttype(mant) << -s); + return sign ? -r : r; + } + } + + template + constexpr TLFLOAT_INLINE BigInt castToInt(const BigInt *ptr) const { + if (exp - expoffset() < -1) return 0; + if (exp - expoffset() >= int(sizeof(BigInt)*8-2)) + return BigInt(BigInt(1) << (sizeof(BigInt)*8-1)); + int s = nbmant - (exp - expoffset() + 1); + BigInt r = BigInt(s > 0 ? BigUInt(mant >> s) : (BigUInt(mant) << -s)); + return sign ? -r : r; + } + + template + constexpr TLFLOAT_INLINE BigUInt castToInt(const BigUInt *ptr) const { + if (exp - expoffset() < -1) return 0; + if (sign && !iszero) return ~BigUInt(0); + if (exp - expoffset() >= int(sizeof(BigUInt)*8-1)) return ~BigUInt(0); + int s = nbmant - (exp - expoffset() + 1); + return s > 0 ? BigUInt(mant >> s) : (BigUInt(mant) << -s); + } + + constexpr TLFLOAT_INLINE uint64_t castToInt2() const { + int s = nbmant - (exp - expoffset() + 1); + if (s <= -int(sizeof(uint64_t))*8 || s >= int(sizeof(mant_t))*8) return 0; + return uint64_t(s > 0 ? (mant >> s) : (uint64_t(mant) << -s)); + } + + template && sizeof(srctype) <= 8), int> = 0> + static constexpr TLFLOAT_INLINE UnpackedFloat castFromInt(srctype src) { + if (src == 0) return zero(); + bool sign = false; + uint64_t v = src; + if constexpr (!std::is_unsigned_v) { + sign = src < 0; + v = src < 0 ? -int64_t(src) : src; + } + int x = sizeof(v) * 8 - clz(v); + int s = nbmant - (x - 1) + int(sizeof(mant_t)) * 8; + bool sb = false; + longmant_t u = 0; + if (s >= 0) { + u = longmant_t(v) << s; + } else { + sb = (bitmask(-s) & v) != 0; + u = v >> -s; + } + u += (((u >> (sizeof(mant_t) * 8)) & 1) || sb) + (longmant_t(1) << (sizeof(mant_t) * 8 - 1)) - 1; + if (bit(u, nbmant + sizeof(mant_t) * 8 + 1)) { u >>= 1; x++; } + u >>= sizeof(mant_t) * 8; + return UnpackedFloat(mant_t(u), x + expoffset() - 2, sign, u == 0, false, false); + } + + template + static constexpr TLFLOAT_INLINE UnpackedFloat castFromInt(BigInt src) { + if (src == 0) return zero(); + bool sign = src < 0; + BigUInt v = sign ? -src : src; + int x = sizeof(v) * 8 - clz(v); + int s = nbmant - (x - 1) + int(sizeof(mant_t)) * 8; + bool sb = false; + longmant_t u = 0; + if (s >= 0) { + u = longmant_t(v) << s; + } else { + sb = (bitmask(-s) & v) != 0; + u = longmant_t(v >> -s); + } + u += (((u >> (sizeof(mant_t) * 8)) & 1) || sb) + (longmant_t(1) << (sizeof(mant_t) * 8 - 1)) - 1; + if (bit(u, nbmant + sizeof(mant_t) * 8 + 1)) { u >>= 1; x++; } + u >>= sizeof(mant_t) * 8; + return UnpackedFloat(mant_t(u), x + expoffset() - 2, sign, u == 0, false, false); + } + + template + static constexpr TLFLOAT_INLINE UnpackedFloat castFromInt(BigUInt src) { + if (src == 0) return zero(); + BigUInt v = src; + int x = sizeof(v) * 8 - clz(v); + int s = nbmant - (x - 1) + int(sizeof(mant_t)) * 8; + bool sb = false; + longmant_t u = 0; + if (s >= 0) { + u = longmant_t(v) << s; + } else { + sb = (bitmask(-s) & v) != 0; + u = longmant_t(v >> -s); + } + u += (((u >> (sizeof(mant_t) * 8)) & 1) || sb) + (longmant_t(1) << (sizeof(mant_t) * 8 - 1)) - 1; + if (bit(u, nbmant + sizeof(mant_t) * 8 + 1)) { u >>= 1; x++; } + u >>= sizeof(mant_t) * 8; + return UnpackedFloat(mant_t(u), x + expoffset() - 2, false, u == 0, false, false); + } + +#if defined(TLFLOAT_COMPILER_SUPPORTS_INT128) && !defined(__CUDA_ARCH__) + constexpr TLFLOAT_INLINE __int128_t castToInt(const __int128_t *ptr) const { return __int128_t (castToInt((BigInt<7> *)0)); } + constexpr TLFLOAT_INLINE __uint128_t castToInt(const __uint128_t *ptr) const { return __uint128_t(castToInt((BigUInt<7> *)0)); } + static constexpr TLFLOAT_INLINE UnpackedFloat castFromInt(__int128_t src) { return castFromInt(BigInt <7>(src)); } + static constexpr TLFLOAT_INLINE UnpackedFloat castFromInt(__uint128_t src) { return castFromInt(BigUInt<7>(src)); } +#endif + + friend constexpr UnpackedFloat trunc(const UnpackedFloat &f) { + if (f.iszero || f.isinf || f.isnan) return f; + if (f.exp >= expoffset() + nbmant) return f; + if (f.exp < expoffset() - 1) return zero(f.sign); + int s = nbmant - (f.exp - expoffset() + 1); + UnpackedFloat r = f; + r.mant &= ~bitmask(s); + return r; + } + + friend constexpr UnpackedFloat floor(const UnpackedFloat &f) { + if (f.iszero || f.isinf || f.isnan) return f; + if (f.exp >= expoffset() + nbmant) return f; + if (f.exp < expoffset() - 1) { + if (f.iszero || !f.sign) return zero(f.sign); + return castFromInt(-1); + } + int s = nbmant - (f.exp - expoffset() + 1); + UnpackedFloat r = f; + if (r.sign) r.mant += bitmask(s); + r.mant &= ~bitmask(s); + if (bit(r.mant, nbmant + 1)) { r.mant >>= 1; r.exp++; } + return r; + } + + friend constexpr UnpackedFloat ceil(const UnpackedFloat &f) { + if (f.iszero || f.isinf || f.isnan) return f; + if (f.exp >= expoffset() + nbmant) return f; + if (f.exp < expoffset() - 1) { + if (f.iszero || f.sign) return zero(f.sign); + return castFromInt(1); + } + int s = nbmant - (f.exp - expoffset() + 1); + UnpackedFloat r = f; + if (!r.sign) r.mant += bitmask(s); + r.mant &= ~bitmask(s); + if (bit(r.mant, nbmant + 1)) { r.mant >>= 1; r.exp++; } + return r; + } + + friend constexpr UnpackedFloat round(const UnpackedFloat &f) { + if (f.iszero || f.isinf || f.isnan) return f; + if (f.exp >= expoffset() + nbmant - 1) return f; + if (f.exp < expoffset() - 2) return zero(f.sign); + int s = nbmant - (f.exp - expoffset() + 1); + UnpackedFloat r = f; + r.mant += mant_t(1) << (s - 1); + r.mant &= ~((mant_t(1) << s) - 1); + if (bit(r.mant, nbmant + 1)) { r.mant >>= 1; r.exp++; } + if (r.mant == 0) return zero(f.sign); + return r; + } + + friend constexpr UnpackedFloat rint(const UnpackedFloat &f) { + if (f.iszero || f.isinf || f.isnan) return f; + if (f.exp >= expoffset() + nbmant - 1) return f; + if (f.exp < expoffset() - 2) return zero(f.sign); + int s = nbmant - (f.exp - expoffset() + 1); + UnpackedFloat r = f; + r.mant += bit(r.mant, s) + (mant_t(1) << (s - 1)) - 1; + r.mant &= ~((mant_t(1) << s) - 1); + if (bit(r.mant, nbmant + 1)) { r.mant >>= 1; r.exp++; } + if (r.mant == 0) return zero(f.sign); + return r; + } + + friend constexpr UnpackedFloat sqrt_(const UnpackedFloat &f) { + const int offset = 100000000; + if (f.iszero) return f; + int y = clz(f.mant) - (sizeof(mant_t) * 8 - nbmant - 1); + int x = f.exp - y; + int s0 = sizeof(longmant_t) * 8 - nbmant - 2 + (1 & ~(x + f.expoffset() + offset)) + y; + longmant_t l = longmant_t(f.mant) << s0; + l = isqrt(l); + int s1 = sizeof(longmant_t) * 8 - nbmant - 1 - clz(l); + l += bit(l, s1) + bitmask(s1 - 1); + l -= ~l >> (sizeof(l) * 8 - 1); + mant_t m = mant_t(l >> s1); + if (bit(m, nbmant + 1)) { m >>= 1; x++; } + return UnpackedFloat(mant_t(m), (x + f.expoffset() + offset * 2 + 1) / 2 - offset - 1, false, m == 0, false, false); + } + + friend constexpr TLFLOAT_INLINE bool isint(const UnpackedFloat &f) { + if (f.isinf || f.isnan) return false; + return trunc(f) == f; + } + + friend constexpr TLFLOAT_INLINE bool iseven(const UnpackedFloat &f) { + return isint(ldexp(f, -1)); + } + + friend constexpr TLFLOAT_INLINE UnpackedFloat toward0(UnpackedFloat f) { + static_assert(f.nbexp_() == 0); + if (f.iszero || f.isinf || f.isnan) return f; + f.mant--; + if (!((f.mant >> nbmant) & 1)) { + f.exp--; + f.mant <<= 1; + } + return f; + } + + friend constexpr int32_t intlsb(const UnpackedFloat &f) { + if (f.iszero || f.isinf || f.isnan) return 0; + int s = nbmant - (f.exp - expoffset() + 1); + if (s >= int(sizeof(f.mant)*8) || s <= -int(sizeof(uint16_t)*8)) return 0; + int m = s >= 0 ? uint16_t(f.mant >> s) : (uint16_t(f.mant) << -s); + return f.sign ? -m-1 : m; + } + + // + + constexpr TLFLOAT_INLINE UnpackedFloat operator+() const { return UnpackedFloat(*this); } + constexpr TLFLOAT_INLINE UnpackedFloat operator-() const { return UnpackedFloat(mant, exp, !sign, iszero, isinf, isnan); } + constexpr UnpackedFloat operator+(const UnpackedFloat& rhs) const { return faddsub(*this, rhs, false); } + constexpr UnpackedFloat operator-(const UnpackedFloat& rhs) const { return faddsub(*this, rhs, true); } + constexpr UnpackedFloat operator*(const UnpackedFloat& rhs) const { return fmul(*this, rhs); } + constexpr UnpackedFloat operator/(const UnpackedFloat& rhs) const { return fdiv(*this, rhs); } + + constexpr TLFLOAT_INLINE bool operator==(const UnpackedFloat& rhs) const { + if (isnan || rhs.isnan) return false; + return cmp(*this, rhs) == 0; + } + + constexpr TLFLOAT_INLINE bool operator!=(const UnpackedFloat& rhs) const { + return !((*this) == rhs); + } + + constexpr TLFLOAT_INLINE bool operator>(const UnpackedFloat& rhs) const { + if (isnan || rhs.isnan) return false; + return cmp(*this, rhs) == 1; + } + + constexpr TLFLOAT_INLINE bool operator<(const UnpackedFloat& rhs) const { + if (isnan || rhs.isnan) return false; + return cmp(*this, rhs) == -1; + } + + constexpr TLFLOAT_INLINE bool operator<=(const UnpackedFloat& rhs) const { + if (isnan || rhs.isnan) return false; + return cmp(*this, rhs) != 1; + } + + constexpr TLFLOAT_INLINE bool operator>=(const UnpackedFloat& rhs) const { + if (isnan || rhs.isnan) return false; + return cmp(*this, rhs) != -1; + } + + // + + template + constexpr TLFLOAT_INLINE UnpackedFloat operator+(const rhstype& rhs) const { return *this + UnpackedFloat(rhs); } + template + constexpr TLFLOAT_INLINE UnpackedFloat operator-(const rhstype& rhs) const { return *this - UnpackedFloat(rhs); } + template + constexpr TLFLOAT_INLINE UnpackedFloat operator*(const rhstype& rhs) const { return *this * UnpackedFloat(rhs); } + template + constexpr UnpackedFloat operator/(const rhstype& rhs) const { return *this / UnpackedFloat(rhs); } + + template + constexpr TLFLOAT_INLINE bool operator==(const rhstype& rhs) const { return *this == UnpackedFloat(rhs); } + template + constexpr TLFLOAT_INLINE bool operator!=(const rhstype& rhs) const { return *this != UnpackedFloat(rhs); } + template + constexpr TLFLOAT_INLINE bool operator> (const rhstype& rhs) const { return *this > UnpackedFloat(rhs); } + template + constexpr TLFLOAT_INLINE bool operator< (const rhstype& rhs) const { return *this < UnpackedFloat(rhs); } + template + constexpr TLFLOAT_INLINE bool operator>=(const rhstype& rhs) const { return *this >= UnpackedFloat(rhs); } + template + constexpr TLFLOAT_INLINE bool operator<=(const rhstype& rhs) const { return *this <= UnpackedFloat(rhs); } + + template + constexpr TLFLOAT_INLINE UnpackedFloat& operator=(const srctype& s) { + UnpackedFloat n(s); + *this = n; + return *this; + } + + template + constexpr TLFLOAT_INLINE UnpackedFloat& operator+=(const rhstype& rhs) { *this = *this + UnpackedFloat(rhs); return *this; } + template + constexpr TLFLOAT_INLINE UnpackedFloat& operator-=(const rhstype& rhs) { *this = *this - UnpackedFloat(rhs); return *this; } + template + constexpr TLFLOAT_INLINE UnpackedFloat& operator*=(const rhstype& rhs) { *this = *this * UnpackedFloat(rhs); return *this; } + template + constexpr UnpackedFloat& operator/=(const rhstype& rhs) { *this = *this / UnpackedFloat(rhs); return *this; } + + // + + static constexpr TLFLOAT_INLINE UnpackedFloat exp10i(int a) { + bool negative = a < 0; + if (negative) a = -a; + + UnpackedFloat r = castFromInt(1), d = castFromInt(10); + for(;a;a>>=1) { + if (a & 1) r *= d; + d *= d; + } + + return negative ? castFromInt(1) / r : r; + } + + friend constexpr TLFLOAT_INLINE int ilog10(const UnpackedFloat& a) { // returns floor(log10(a)) + int ret = rint(a.ilogb() * LOG10_2_); + UnpackedFloat e = UnpackedFloat::exp10i(ret); + if (e > a) { + ret--; + } else if (e * castFromInt(10) < a) { + ret++; + } + return ret; + } + + TLFLOAT_NOINLINE friend int snprint(char *cbuf, const size_t bufsize, + UnpackedFloat arg, char typespec, int width = 0, int precision = 6, + bool flag_sign = false, bool flag_blank = false, bool flag_alt = false, + bool flag_left = false, bool flag_zero = false, bool flag_upper = false) { + if (bufsize == 0) return 0; + if (bufsize == 1) { *cbuf = '\0'; return 0; } + if (typespec != 'e' && typespec != 'f' && typespec != 'g' && typespec != 'a') return 0; + + detail::SafeArray buf(cbuf, bufsize); + + if (width > (long)bufsize) width = bufsize; + + int64_t idx = 0; + char prefix = 0; + int length = 0, flag_rtz = 0, mainpos = 0; + + if (arg.sign) { + arg.sign = 0; + prefix = '-'; + } else if (flag_sign) { + prefix = '+'; + } else if (flag_blank) { + prefix = ' '; + } + + UnpackedFloat value = arg; + + if (value.isnan) { + if (prefix) buf[idx++] = prefix; + buf.strcpyFrom(idx, flag_upper ? "NAN" : "nan"); + idx += 3; + flag_zero = false; + } else if (value.isinf) { + if (prefix) buf[idx++] = prefix; + buf.strcpyFrom(idx, flag_upper ? "INF" : "inf"); + idx += 3; + flag_zero = false; + } else if (typespec != 'a') { + if (precision < 0) precision = 6; + if (precision > (long)bufsize/2 - 10) precision = bufsize/2 - 10; + if (typespec == 'g' && precision > 0) precision--; + + UnpackedFloat rounder = value.iszero ? UnpackedFloat::zero() : ldexp(UnpackedFloat::exp10i(-precision), -1); + + if (typespec == 'f') { + UnpackedFloat v = (value + rounder) * UnpackedFloat::exp10i(precision); + if (iseven(v) || !isint(v)) value += rounder; + } + + int exp = 0, e2 = 0; + if (!arg.iszero) { + exp = ilog10(value); + value *= UnpackedFloat::exp10i(-exp); + } + + bool flag_exp = typespec == 'e'; + + if (typespec != 'f') { + UnpackedFloat v = value + rounder; + if (iseven(v) || !isint(v)) value = v; + } + + if (value >= castFromInt(10)) { + value /= castFromInt(10); + exp++; + } else if (!value.iszero && value < castFromInt(1)) { + value *= castFromInt(10); + exp--; + } + + if (typespec == 'g') { + flag_rtz = !flag_alt; + if (exp < -4 || exp > precision) { + typespec = 'e'; + } else { + precision = precision - exp; + typespec = 'f'; + } + } + + if (typespec != 'e') e2 = exp; + + bool flag_dp = precision > 0 || flag_alt; + + if (prefix) buf[idx++] = prefix; + + if (e2 < 0) { + buf[idx++] = '0'; + } else { + for(;e2>=0;e2--) { + int digit = value.castToInt((int *)nullptr); + if (value < castFromInt(digit)) digit--; + buf[idx++] = digit + '0'; + value = (value - castFromInt(digit)) * castFromInt(10); + } + } + + if (flag_dp) buf[idx++] = '.'; + + for(e2++;e2 < 0 && precision > 0;precision--, e2++) buf[idx++] = '0'; + + while (precision-- > 0) { + int digit = value.castToInt((int *)nullptr); + if (value < castFromInt(digit)) digit--; + buf[idx++] = digit + '0'; + value = (value - castFromInt(digit)) * castFromInt(10); + } + + if (flag_rtz && flag_dp) { + while(buf[idx-1] == '0') buf[--idx] = '\0'; + if (buf[idx-1] == '.') buf[--idx] = '\0'; + } + + if (flag_exp || (typespec == 'e' && exp != 0)) { + buf[idx++] = flag_upper ? 'E' : 'e'; + if (arg.iszero) exp = 0; + if (exp < 0){ + buf[idx++] = '-'; exp = -exp; + } else { + buf[idx++] = '+'; + } + + char str[32]; + snprintf(str, sizeof(buf), "%02d", exp); + buf.strcpyFrom(idx, str); + idx += strlen(str); + } + } else { + if (!value.iszero && precision >= 0 && precision < nbmant/4+1) { + int s = nbmant - precision*4 - 1; + if (s < nbmant && s >= 0) value.mant += ((mant_t)1) << s; + if (bit(value.mant, nbmant + 1)) { value.mant >>= 1; value.exp++; } + } + + if (prefix) buf[idx++] = prefix; + + buf.strcpyFrom(idx, flag_upper ? "0X" :"0x"); + idx += 2; + mainpos = idx; + buf.strcpyFrom(idx, value.iszero ? "0" : "1"); + idx += 1; + + mant_t m = value.mant << (sizeof(mant_t)*8 - nbmant); + + if ((!(m == 0 && precision < 0) && precision != 0) || flag_alt) buf.strcpyFrom(idx++, "."); + + const char *digits = flag_upper ? "0123456789ABCDEF" : "0123456789abcdef"; + + const int niter = precision >= 0 ? precision : -1; + for(int i=0;(niter < 0 && m != 0) || i < niter;i++) { + buf[idx++] = digits[(unsigned)((m >> (sizeof(mant_t)*8 - 4)) & 0xf)]; + m <<= 4; + } + + int exp = value.ilogb(); + if (value.iszero) exp = 0; + + char str[32]; + snprintf(str, sizeof(buf), "%c%+d", flag_upper ? 'P' : 'p', exp); + buf.strcpyFrom(idx, str); + idx += strlen(str); + } + + buf[idx] = '\0'; + length = idx; + + if (!flag_zero) mainpos = 0; + + if (!flag_left && length < width) { + int nPad = width - length; + for(int i=width; i-nPad >= mainpos; i--) buf[i] = buf[i-nPad]; + + int i = mainpos; + if (prefix != 0 && flag_zero && typespec != 'a') i++; + while (nPad-- > 0) buf[i++] = flag_zero ? '0' : ' '; + length = width; + } + + if (flag_left) { + while (length < width) buf[length++] = ' '; + buf[length] = '\0'; + } + + return length; + } + }; // class UnpackedFloat + + template + static consteval T const_M_PI_(int exp = 0) { + return ldexp_( + T("0x1.921fb54442d18469898cc51701b839a252049c1114cf98e804177d4c76273644a29410f31c6809bbdf2a33679a748636605614dbe4be286e9fc26adadaa38488p+1"), exp); + } + + template + static consteval T const_M_E_(int exp = 0) { + return ldexp_( + T("0x2.b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfef324e7738926cfbe5f4bf8d8d8c31d763da06c80abb1185eb4f7c7b5757f59584p+0"), exp); + } + } // namespace detail + + /** + * This is a trivially copyable generic template class that + * represents an IEEE 754 floating-point number. By adjusting the + * template parameters, it can represent an IEEE 754 floating-point + * number of any precision. The data size and data structure of the + * object are the same as the corresponding floating-point number + * represented in the IEEE 754 format. + */ + template + class TLFloat { + template friend class TLFloat; + + typedef detail::UnpackedFloat uhalf; + typedef detail::UnpackedFloat ubf16; + typedef detail::UnpackedFloat ufloat; + typedef detail::UnpackedFloat, 11, 52> udouble; + typedef detail::UnpackedFloat, BigUInt<8>, 15, 112> uquad; + typedef detail::UnpackedFloat, BigUInt<9>, 19, 236> uoctuple; + + typedef decltype(Unpacked_t::mant) mant_t; + typedef decltype(Unpacked_t::xUnpackedFloat()) xUnpacked_t; + + public: + mant_t m = 0; + + /** Returns NaN */ + static constexpr TLFLOAT_INLINE TLFloat nan() { return Unpacked_t::nan(); } + + /** Returns infinity of the given sign */ + static constexpr TLFLOAT_INLINE TLFloat infinity(bool sign=false) { return Unpacked_t::infinity(sign); } + + /** Returns the minimum representative number of the given sign */ + static constexpr TLFLOAT_INLINE TLFloat flt_true_min(bool sign=false) { return Unpacked_t::flt_true_min(sign); } + + /** Returns the minimum normalized number of the given sign */ + static constexpr TLFLOAT_INLINE TLFloat flt_min(bool sign=false) { return Unpacked_t::flt_min(sign); } + + /** Returns the maximum representative number of the given sign */ + static constexpr TLFLOAT_INLINE TLFloat flt_max(bool sign=false) { return Unpacked_t::flt_max(sign); } + + /** Returns the absolute value difference between 1.0 and the next representable value */ + static constexpr TLFLOAT_INLINE TLFloat flt_epsilon() { return nextafter(TLFloat(1), 2) - 1; } + + /** Returns zero of the given sign */ + static constexpr TLFLOAT_INLINE TLFloat zero(bool sign=false) { return Unpacked_t::zero(sign); } + + constexpr TLFLOAT_INLINE TLFloat() = default; + constexpr TLFLOAT_INLINE TLFloat(const TLFloat&) = default; + constexpr TLFLOAT_INLINE TLFloat& operator=(const TLFloat&) = default; + + constexpr TLFLOAT_INLINE Unpacked_t getUnpacked() const { return Unpacked_t(m); } + + static constexpr TLFLOAT_INLINE Unpacked_t to_Unpacked_t(TLFloat f = zero()) { return f.getUnpacked(); } + + template + constexpr TLFLOAT_INLINE TLFloat(const detail::UnpackedFloat &tf) : + m(mant_t(tf.cast((Unpacked_t *)0))) {} + + /** Cast from an instance of any TLFloat class */ + template + constexpr TLFLOAT_INLINE TLFloat(const TLFloat& s) : + TLFloat(s.getUnpacked().cast((const Unpacked_t *)nullptr)) {} + + /** Cast from any primitive integer type */ + template), int> = 0> + constexpr TLFLOAT_INLINE TLFloat(const inttype x) : + TLFloat(Unpacked_t::castFromInt(x)) {} + + /** Cast to any primitive integer type */ + template), int> = 0> + constexpr TLFLOAT_INLINE operator inttype() const { + return getUnpacked().castToInt((const inttype *)nullptr); + } + + template constexpr TLFLOAT_INLINE TLFloat(const BigInt x) : TLFloat(Unpacked_t::castFromInt(x)) {} + template constexpr TLFLOAT_INLINE TLFloat(const BigUInt x) : TLFloat(Unpacked_t::castFromInt(x)) {} + + template constexpr TLFLOAT_INLINE operator BigInt () const { return getUnpacked().castToInt((const BigInt *)nullptr); } + template constexpr TLFLOAT_INLINE operator BigUInt() const { return getUnpacked().castToInt((const BigUInt *)nullptr); } + + constexpr TLFloat(const double d) { + if constexpr (sizeof(mant_t) == sizeof(double)) { + m = std::bit_cast(d); + } else { + udouble td(d); + m = mant_t(td.cast((const Unpacked_t *)nullptr)); + } + } + + constexpr TLFloat(const float f) { + if constexpr (sizeof(mant_t) == sizeof(float)) { + m = std::bit_cast(f); + } else { + ufloat tf(f); + m = mant_t(tf.cast((const Unpacked_t *)nullptr)); + } + } + + /** Any non-integer object is bitcast to a TLFloat type of the same size with this constructor */ + template && + (std::is_floating_point_v || (!std::is_pointer_v && !std::is_integral_v))), int> = 0> + constexpr TLFLOAT_INLINE TLFloat(const fptype& s) { + m = std::bit_cast(s); + } + + template && + (std::is_floating_point_v || (!std::is_pointer_v && !std::is_integral_v))), int> = 0> + explicit constexpr TLFLOAT_INLINE operator fptype() const { + return std::bit_cast(m); + } + + /** This works like strtod */ + constexpr TLFloat(const char *ptr, const char **endptr=nullptr) { + *this = TLFloat(xUnpacked_t(ptr, endptr).cast((Unpacked_t *)nullptr)); + } + + explicit constexpr TLFLOAT_INLINE operator Unpacked_t() const { return Unpacked_t(m); } + + explicit constexpr operator double() const { + if constexpr (sizeof(mant_t) == sizeof(double)) { + return std::bit_cast(m); + } else { + Unpacked_t tf(m); + return double(tf.cast((const udouble *)nullptr)); + } + } + + explicit constexpr operator float() const { + if constexpr (sizeof(mant_t) == sizeof(float)) { + return std::bit_cast(m); + } else { + Unpacked_t tf(m); + return float(tf.cast((const ufloat *)nullptr)); + } + } + + constexpr TLFLOAT_INLINE TLFloat operator-() const { + TLFloat n(*this); + n.m ^= mant_t(1) << (sizeof(mant_t)*8-1); + return n; + } + + constexpr TLFLOAT_INLINE TLFloat operator+() const { return TLFloat(*this); } + + /** This function performs addition of two floating point numbers. This function returns correctly rounded results. */ + constexpr TLFloat operator+(const TLFloat& rhs) const { return getUnpacked() + rhs.getUnpacked(); } + + /** This function performs subtraction of floating point numbers. This function returns correctly rounded results. */ + constexpr TLFloat operator-(const TLFloat& rhs) const { return getUnpacked() - rhs.getUnpacked(); } + + /** This function performs multiplication of two floating point numbers. This function returns correctly rounded results. */ + constexpr TLFloat operator*(const TLFloat& rhs) const { return getUnpacked() * rhs.getUnpacked(); } + + /** This function performs division of floating point numbers. This function returns correctly rounded results. */ + constexpr TLFloat operator/(const TLFloat& rhs) const { return getUnpacked() / rhs.getUnpacked(); } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + friend constexpr TLFloat fabs(const TLFloat& u) { + TLFloat n(u); + n.m &= ~(mant_t(1) << (sizeof(mant_t)*8-1)); + return n; + } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + friend constexpr TLFloat copysign(const TLFloat& x, const TLFloat& y) { + TLFloat n(x); + n.m &= ~(mant_t(1) << (sizeof(mant_t)*8-1)); + n.m |= y.m & (mant_t(1) << (sizeof(mant_t)*8-1)); + return n; + } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + friend constexpr TLFloat fmax(const TLFloat& x, const TLFloat& y) { + return isnan(y) ? x : (x > y ? x : y); + } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + friend constexpr TLFloat fmin(const TLFloat& x, const TLFloat& y) { + return isnan(y) ? x : (x < y ? x : y); + } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + friend constexpr TLFloat fdim(const TLFloat& x, const TLFloat& y) { + TLFloat ret = x - y; + if (ret < 0 || x == y) ret = 0; + return ret; + } + + /** This function has the same functionality as the corresponding function in math.h. */ + friend constexpr bool isnan(const TLFloat& u) { return u.getUnpacked().isnan; } + + /** This function has the same functionality as the corresponding function in math.h. */ + friend constexpr bool isinf(const TLFloat& u) { return u.getUnpacked().isinf; } + + /** This function has the same functionality as the corresponding function in math.h. */ + friend constexpr bool finite(const TLFloat& u) { return !(isnan(u) || isinf(u)); } + + /** This function has the same functionality as the corresponding function in math.h. */ + friend constexpr int fpclassify(const TLFloat& u) { + if (isnan(u)) return TLFLOAT_FP_NAN; + if (isinf(u)) return TLFLOAT_FP_INFINITE; + if (u == 0) return TLFLOAT_FP_ZERO; + if (fabs(u) < u.getUnpacked().flt_min()) return TLFLOAT_FP_SUBNORMAL; + return TLFLOAT_FP_NORMAL; + } + + /** This function has the same functionality as the corresponding function in math.h. */ + friend constexpr TLFLOAT_INLINE bool signbit(const TLFloat& u) { + TLFloat n(u); + return Unpacked_t::bit(n.m, sizeof(mant_t) * 8 - 1); + } + friend constexpr TLFLOAT_INLINE bool iszero(const TLFloat& u) { return u.getUnpacked().iszero; } + friend constexpr TLFLOAT_INLINE bool isint(const TLFloat& u) { return isint(u.getUnpacked()); } + friend constexpr TLFLOAT_INLINE bool iseven(const TLFloat& u) { return iseven(u.getUnpacked()); } + + /** This function performs the fused multiply-add operation of floating point numbers. This function returns correctly rounded results. */ + friend constexpr TLFloat fma(const TLFloat& x, const TLFloat& y, const TLFloat& z) { + return Unpacked_t::fma(x.getUnpacked(), y.getUnpacked(), z.getUnpacked()); + } + + /** This function performs ordered comparison of two floating point numbers. */ + constexpr TLFLOAT_INLINE bool operator==(const TLFloat& rhs) const { return getUnpacked() == rhs.getUnpacked(); } + + /** This function performs ordered comparison of two floating point numbers. */ + constexpr TLFLOAT_INLINE bool operator!=(const TLFloat& rhs) const { return getUnpacked() != rhs.getUnpacked(); } + + /** This function performs ordered comparison of two floating point numbers. */ + constexpr TLFLOAT_INLINE bool operator> (const TLFloat& rhs) const { return getUnpacked() > rhs.getUnpacked(); } + + /** This function performs ordered comparison of two floating point numbers. */ + constexpr TLFLOAT_INLINE bool operator< (const TLFloat& rhs) const { return getUnpacked() < rhs.getUnpacked(); } + + /** This function performs ordered comparison of two floating point numbers. */ + constexpr TLFLOAT_INLINE bool operator>=(const TLFloat& rhs) const { return getUnpacked() >= rhs.getUnpacked(); } + + /** This function performs ordered comparison of two floating point numbers. */ + constexpr TLFLOAT_INLINE bool operator<=(const TLFloat& rhs) const { return getUnpacked() <= rhs.getUnpacked(); } + + // + + template + constexpr TLFLOAT_INLINE TLFloat& operator=(const srctype& s) { + TLFloat n(s); + *this = n; + return *this; + } + + template + constexpr TLFLOAT_INLINE TLFloat& operator+=(const rhstype& rhs) { *this = *this + TLFloat(rhs); return *this; } + template + constexpr TLFLOAT_INLINE TLFloat& operator-=(const rhstype& rhs) { *this = *this - TLFloat(rhs); return *this; } + template + constexpr TLFLOAT_INLINE TLFloat& operator*=(const rhstype& rhs) { *this = *this * TLFloat(rhs); return *this; } + template + constexpr TLFloat& operator/=(const rhstype& rhs) { *this = *this / TLFloat(rhs); return *this; } + + constexpr TLFLOAT_INLINE TLFloat& operator++() { *this += 1; return *this; } + constexpr TLFLOAT_INLINE TLFloat& operator--() { *this -= 1; return *this; } + constexpr TLFLOAT_INLINE TLFloat operator++(int) { TLFloat t = *this; *this += 1; return t; } + constexpr TLFLOAT_INLINE TLFloat operator--(int) { TLFloat t = *this; *this -= 1; return t; } + + // + + // Double + int, Double + float, Double + Float + template || sizeof(rhstype) <= sizeof(mant_t)), int> = 0> + constexpr TLFLOAT_INLINE TLFloat operator+(const rhstype& rhs) const { return *this + TLFloat(rhs); } + template || sizeof(rhstype) <= sizeof(mant_t)), int> = 0> + constexpr TLFLOAT_INLINE TLFloat operator-(const rhstype& rhs) const { return *this - TLFloat(rhs); } + template || sizeof(rhstype) <= sizeof(mant_t)), int> = 0> + constexpr TLFLOAT_INLINE TLFloat operator*(const rhstype& rhs) const { return *this * TLFloat(rhs); } + template || sizeof(rhstype) <= sizeof(mant_t)), int> = 0> + constexpr TLFloat operator/(const rhstype& rhs) const { return *this / TLFloat(rhs); } + + // int + Double, float + Double, Float + Double + template || sizeof(lhstype) <= sizeof(mant_t)), int> = 0> + friend constexpr TLFLOAT_INLINE TLFloat operator+(const lhstype& lhs, const TLFloat &rhs) { return TLFloat(lhs) + rhs; } + template || sizeof(lhstype) <= sizeof(mant_t)), int> = 0> + friend constexpr TLFLOAT_INLINE TLFloat operator-(const lhstype& lhs, const TLFloat &rhs) { return TLFloat(lhs) - rhs; } + template || sizeof(lhstype) <= sizeof(mant_t)), int> = 0> + friend constexpr TLFLOAT_INLINE TLFloat operator*(const lhstype& lhs, const TLFloat &rhs) { return TLFloat(lhs) * rhs; } + template || sizeof(lhstype) <= sizeof(mant_t)), int> = 0> + friend constexpr TLFloat operator/(const lhstype& lhs, const TLFloat &rhs) { return TLFloat(lhs) / rhs; } + + // Double == int, Double == float, Double == Float + template || sizeof(rhstype) <= sizeof(mant_t)), int> = 0> + constexpr TLFLOAT_INLINE bool operator==(const rhstype& rhs) const { return *this == TLFloat(rhs); } + template || sizeof(rhstype) <= sizeof(mant_t)), int> = 0> + constexpr TLFLOAT_INLINE bool operator!=(const rhstype& rhs) const { return *this != TLFloat(rhs); } + template || sizeof(rhstype) <= sizeof(mant_t)), int> = 0> + constexpr TLFLOAT_INLINE bool operator> (const rhstype& rhs) const { return *this > TLFloat(rhs); } + template || sizeof(rhstype) <= sizeof(mant_t)), int> = 0> + constexpr TLFLOAT_INLINE bool operator< (const rhstype& rhs) const { return *this < TLFloat(rhs); } + template || sizeof(rhstype) <= sizeof(mant_t)), int> = 0> + constexpr TLFLOAT_INLINE bool operator>=(const rhstype& rhs) const { return *this >= TLFloat(rhs); } + template || sizeof(rhstype) <= sizeof(mant_t)), int> = 0> + constexpr TLFLOAT_INLINE bool operator<=(const rhstype& rhs) const { return *this <= TLFloat(rhs); } + + // int == Double, float == Double, Float == Double + template || sizeof(lhstype) <= sizeof(mant_t)), int> = 0> + friend constexpr TLFLOAT_INLINE bool operator==(const lhstype& lhs, const TLFloat &rhs) { return TLFloat(lhs) == rhs; } + template || sizeof(lhstype) <= sizeof(mant_t)), int> = 0> + friend constexpr TLFLOAT_INLINE bool operator!=(const lhstype& lhs, const TLFloat &rhs) { return TLFloat(lhs) != rhs; } + template || sizeof(lhstype) <= sizeof(mant_t)), int> = 0> + friend constexpr TLFLOAT_INLINE bool operator> (const lhstype& lhs, const TLFloat &rhs) { return TLFloat(lhs) > rhs; } + template || sizeof(lhstype) <= sizeof(mant_t)), int> = 0> + friend constexpr TLFLOAT_INLINE bool operator< (const lhstype& lhs, const TLFloat &rhs) { return TLFloat(lhs) < rhs; } + template || sizeof(lhstype) <= sizeof(mant_t)), int> = 0> + friend constexpr TLFLOAT_INLINE bool operator>=(const lhstype& lhs, const TLFloat &rhs) { return TLFloat(lhs) >= rhs; } + template || sizeof(lhstype) <= sizeof(mant_t)), int> = 0> + friend constexpr TLFLOAT_INLINE bool operator<=(const lhstype& lhs, const TLFloat &rhs) { return TLFloat(lhs) <= rhs; } + + // + + /** This function has the same functionality as the corresponding function in math.h. */ + friend constexpr int32_t ilogb(const TLFloat& f) { + auto u = f.getUnpacked(); + if (u.isinf) return 2147483647; + if (u.isnan) return TLFLOAT_FP_ILOGBNAN; + if (u.exp != 0) return u.exp - Unpacked_t::expoffset() + 1; + if (u.mant == 0) return TLFLOAT_FP_ILOGB0; + return (sizeof(mant_t) * 8 - Unpacked_t::nbmant_()) - Unpacked_t::clz(u.mant) - Unpacked_t::expoffset(); + } + + friend constexpr xpair frexp(const TLFloat& f) { + if (f == 0 || isnan(f) || isinf(f)) return xpair { f, 0 }; + auto p = frexp_(f.getUnpacked().cast((xUnpacked_t *)0)); + return xpair { (TLFloat)p.first.cast((Unpacked_t *)0), p.second }; + } + + /** This function has the same functionality as the corresponding function in math.h. */ + friend constexpr TLFloat frexp(const TLFloat& f, int *exp) { + auto p = frexp(f); + if (exp) *exp = p.second; + return p.first; + } + + /** This function has the same functionality as the corresponding function in math.h. */ + friend constexpr TLFloat ldexp(const TLFloat& f, int exp) { + return (TLFloat)ldexp_(f.getUnpacked().cast((xUnpacked_t *)0), exp).cast((Unpacked_t *)0); + } + + /** Returns 10^a */ + static constexpr TLFloat exp10i(int a) { return TLFloat(Unpacked_t::exp10i(a)); } + + /** This function finds the square root of a floating point number. This function returns correctly rounded results. */ + friend constexpr TLFloat sqrt(const TLFloat& d) { + if (d < 0) return nan(); + if (isinf(d) || isnan(d)) return d; + if (d.getUnpacked().iszero) return d; + + return TLFloat(sqrt_(d.getUnpacked())); + } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + friend constexpr TLFloat hypot(const TLFloat& x, const TLFloat& y) { + auto xx = x.getUnpacked().cast((xUnpacked_t *)0); + auto yy = y.getUnpacked().cast((xUnpacked_t *)0); + if (xx.isinf || yy.isinf) return infinity(false); + if (xx.isnan || yy.isnan) return nan(); + return sqrt_(xx * xx + yy * yy).cast((Unpacked_t *)0); + } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + friend constexpr TLFloat trunc(const TLFloat& d) { return (TLFloat)trunc(d.getUnpacked()); } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + friend constexpr TLFloat floor(const TLFloat& d) { return (TLFloat)floor(d.getUnpacked()); } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + friend constexpr TLFloat ceil (const TLFloat& d) { return (TLFloat)ceil (d.getUnpacked()); } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + friend constexpr TLFloat round(const TLFloat& d) { return (TLFloat)round(d.getUnpacked()); } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + friend constexpr TLFloat rint (const TLFloat& d) { return (TLFloat)rint (d.getUnpacked()); } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + friend constexpr TLFloat modf(const TLFloat& x, TLFloat* iptr) { + if (isnan(x) || iszero(x)) { *iptr = x; return x; } + if (isinf(x)) { *iptr = x; return zero(signbit(x)); } + TLFloat i = trunc(x); + if (iptr) *iptr = i; + return x - i; + } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + friend constexpr TLFloat nextafter(const TLFloat& x, const TLFloat& y) { + if (isnan(x)) return x; + if (isnan(y)) return y; + int c = cmp(x.getUnpacked(), y.getUnpacked()), i = signbit(x) ? 1 : -1; + TLFloat r = x; + if (iszero(x)) { + if (c > 0) { + r.m = (mant_t(1) << (sizeof(mant_t)*8-1)) + 1; + } else if (c < 0) { + r.m = 1; + } else { + r = y; + } + } else { + r.m += c * i; + } + return r; + } + }; // class TLFloat + + // + +#if defined(TLFLOAT_DOXYGEN) || !defined(TLFLOAT_NO_LIBSTDCXX) +#ifndef TLFLOAT_DOXYGEN + template + static std::string to_string_d(const detail::UnpackedFloat &uf) { + std::string s; + char buf[32]; + snprintf(buf, sizeof(buf), "%.18lg", to_double(uf)); + s += std::string(buf) + " : "; + s += "sign = " + std::to_string(uf.sign); + s += ", iszero = " + std::to_string(uf.iszero); + s += ", isinf = " + std::to_string(uf.isinf); + s += ", isnan = " + std::to_string(uf.isnan); + s += ", exp = " + std::to_string(uf.exp - uf.expoffset()) + "(" + std::to_string(uf.exp) + ")"; + s += std::string(", mant = ") + toHexString(uf.mant); + return s; + } + + template + static std::string to_string(Unpacked_t u, int d=6) { + typedef decltype(Unpacked_t::xUnpackedFloat()) xUnpacked_t; + std::vector buf(1000); + snprint(buf.data(), buf.size(), u.cast((xUnpacked_t *)0), 'g', 0, d, false, false, false, false, false, false); + return std::string(buf.data()); + } +#endif + + /** This works like sprintf(str, "%.6g", *this) where the precision can be specified with d */ + template + static std::string to_string(TLFloat a, int d=6) { + typedef decltype(Unpacked_t::xUnpackedFloat()) xUnpacked_t; + std::vector buf(1000); + snprint(buf.data(), buf.size(), a.getUnpacked().cast((xUnpacked_t *)0), 'g', 0, d, false, false, false, false, false, false); + return std::string(buf.data()); + } + + template + static std::ostream& operator<<(std::ostream &os, const TLFloat& a) { + typedef decltype(Unpacked_t::xUnpackedFloat()) xUnpacked_t; + std::vector buf(1000); + std::ios_base::fmtflags f = os.flags(); + char typespec = 'g'; + if ((f & os.fixed) != 0) typespec = 'f'; + if ((f & os.hex) != 0) typespec = 'a'; + snprint(buf.data(), buf.size(), a.getUnpacked().cast((xUnpacked_t *)0), typespec, os.width(), os.precision(), + false, false, false, (f & std::ios::left) != 0, false, (f & std::ios::uppercase) != 0); + return os << buf.data(); + } +#endif // #if defined(TLFLOAT_DOXYGEN) || !defined(TLFLOAT_NO_LIBSTDCXX) + + // + + typedef TLFloat> BFloat16; ///< This class represents a BFloat16 floating-point number. The data size and data structure of the objects are the same as the corresponding floating-point number. + typedef TLFloat> Half; ///< This class represents a half-precision IEEE 754 floating-point number. The data size and data structure of the objects are the same as the corresponding floating-point number. + typedef TLFloat> Float; ///< This class represents a single-precision IEEE 754 floating-point number. The data size and data structure of the objects are the same as the corresponding floating-point number. + typedef TLFloat, 11, 52>> Double; ///< This class represents a double-precision IEEE 754 floating-point number. The data size and data structure of the objects are the same as the corresponding floating-point number. + typedef TLFloat, BigUInt<8>, 15, 112>> Quad; ///< This class represents a quadruple-precision IEEE 754 floating-point number. The data size and data structure of the objects are the same as the corresponding floating-point number. + typedef TLFloat, BigUInt<9>, 19, 236>> Octuple; ///< This class represents a octuple-precision IEEE 754 floating-point number. The data size and data structure of the objects are the same as the corresponding floating-point number. + + static_assert(sizeof(BFloat16) == 2); + static_assert(sizeof(Half) == 2); + static_assert(sizeof(Float) == 4); + static_assert(sizeof(Double) == 8); + static_assert(sizeof(Quad) == 16); + static_assert(sizeof(Octuple) == 32); + + static_assert(std::is_trivially_copyable_v); + static_assert(std::is_trivially_copyable_v); + static_assert(std::is_trivially_copyable_v); + static_assert(std::is_trivially_copyable_v); + static_assert(std::is_trivially_copyable_v); + static_assert(std::is_trivially_copyable_v); +} // namespace tlfloat +#endif // #ifndef __TLFLOAT_HPP_INCLUDED__ diff --git a/validation/extern/tlfloat/src/include/tlfloat/tlfloatconfig.hpp.in b/validation/extern/tlfloat/src/include/tlfloat/tlfloatconfig.hpp.in new file mode 100644 index 0000000..5384d2a --- /dev/null +++ b/validation/extern/tlfloat/src/include/tlfloat/tlfloatconfig.hpp.in @@ -0,0 +1,22 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef __TLFLOATVERSION_HPP_INCLUDED__ +#define __TLFLOATVERSION_HPP_INCLUDED__ + +#define TLFLOAT_VERSION_MAJOR @TLFLOAT_VERSION_MAJOR@ +#define TLFLOAT_VERSION_MINOR @TLFLOAT_VERSION_MINOR@ +#define TLFLOAT_VERSION_PATCH @TLFLOAT_VERSION_PATCH@ + +#cmakedefine TLFLOAT_COMPILER_SUPPORTS_INT128 +#cmakedefine TLFLOAT_COMPILER_SUPPORTS_ISOFLOAT128 +#cmakedefine TLFLOAT_COMPILER_SUPPORTS_FLOAT128 +#cmakedefine TLFLOAT_LONGDOUBLE_IS_FLOAT128 +#cmakedefine TLFLOAT_COMPILER_SUPPORTS_FP16 + +#cmakedefine TLFLOAT_ENABLE_INTSQRT + +#endif diff --git a/validation/extern/tlfloat/src/include/tlfloat/tlmath.hpp b/validation/extern/tlfloat/src/include/tlfloat/tlmath.hpp new file mode 100644 index 0000000..0f1b87a --- /dev/null +++ b/validation/extern/tlfloat/src/include/tlfloat/tlmath.hpp @@ -0,0 +1,1481 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef __TLMATH_HPP_INCLUDED__ +#define __TLMATH_HPP_INCLUDED__ + +#include +#include +#include + +#if defined(__clang_major__) && !defined(_MSC_VER) +#if __clang_major__ < 17 +#warning Unsupported clang version +#endif +#endif + +namespace tlfloat { + namespace detail { + typedef UnpackedFloat xhalf; + typedef UnpackedFloat xfloat; + typedef UnpackedFloat, 0, 62> xdouble; + typedef UnpackedFloat, BigUInt<8>, 0, 126> xquad; + typedef UnpackedFloat, BigUInt<9>, 0, 254> xoctuple; + typedef UnpackedFloat, BigUInt<10>, 0, 510> xsedecuple; + + // + + template + static consteval Unpacked_t constSqrt2O2() { return ldexp_(sqrt_(Unpacked_t(2)), -1); } + + template + static consteval Unpacked_t constOneOthree() { return Unpacked_t(1) / Unpacked_t(3); } + + template + static consteval Unpacked_t constRSqrtPI() { return Unpacked_t(1) / sqrt_(const_M_PI_()); } + + template + static consteval T constLNPI() { + return T("0x1.250d048e7a1bd0bd5f956c6a843f49985e6ddbf3b3f2606e33802ecaefa9308e5aa6c4df523160e6d2402c256db0b866738aa8787561937377769e99dceda3bfp+0"); + } + + template + static consteval T constLN2PI() { + return T("0x1.d67f1c864beb4a6929792002883240479f611f1a268b169bbd8d46267b542aba425f3affc01d0d7f27d57f20b8aad37760b956ae3699b4b79ecdd9c2ee575be5p+0"); + } + + template + static consteval T constLN2() { + return T("0x1.62e42fefa39ef35793c7673007e5ed5e81e6864ce5316c5b141a2eb71755f457cf70ec40dbd75930ab2aa5f695f43621da5d5c6b827042884eae765222d37048p-1"); + } + + template + static consteval T upper(T v) { + typedef decltype(T::mant) mant_t; + v.mant &= ~((mant_t(1) << (sizeof(mant_t)*8/2)) - 1); + return v; + } + + template + static consteval T constLN2U() { return upper(constLN2()); } + + template + static consteval T constLN2L() { + return (constLN2() - constLN2U().cast((const xsedecuple *)nullptr)).cast((const T *)nullptr); + } + + template + static consteval T constLN10() { + return T("0x1.26bb1bbb5551582dd4adac5705a61451c51fd9f3b4bbf21d078c3d0403e05ae52c5e05af635020b998e1978058be1ad058c448308217c5b5f71ef10805ca2dacp+1"); + } + + template + static consteval T constRLN2() { + return T("0x1.71547652b82fe1777d0ffda0d23a7d11d6aef551bad2b4b1164a2cd9a342648fbc3887eeaa2ed9ac49b25eeb82d7c167d52173cc1895213f897f5e06a7be7368p+0"); + } + + template + static consteval T constRLN10() { + return T("0x1.bcb7b1526e50e32a6ab7555f5a67b8647dc68c048b934404747e5a89ef1d4a78ea849df42805e7e52446ab258c8c942a319c77b3fa71b978df4571a5919b4f6p-2"); + } + + template + static consteval T constCbrt2() { + return T("0x1.428a2f98d728ae223ddab715be250d0c288f10291631fbc061800cc36fa2dd3a60b7d03da26f0840f25cc16b0f95075c30967a6b5ac6827ab31f06edf4a3486cp+0"); + } + + template + static consteval T constCbrt4() { + return T("0x1.965fea53d6e3c82b05999ab43dc4def1980762158a0a815f2291ac0cf93041e5875f13657a43adc3896c0b95c0244e271d6f695f41523046622bc574b2caeaecp+0"); + } + + template + static consteval T constEuler() { + return T("0x9.3c467e37db0c7a4d1be3f810152cb56a1cecc3af65cc0190c03df34709affbd8e4b59fa03a9f0eed0649ccb621057d11056ae9132135a08e43b4673d74bafea5p-4"); + } + + // + + template + static consteval xarray genSinCoef() { + xarray a; + for(unsigned k=0;k + static consteval xarray genCosCoef() { + xarray a; + for(unsigned k=0;k + static consteval xarray genTanCoef() { + xarray a; + for(unsigned k=0;k + static consteval xarray genAtanCoef() { + xarray a; + for(unsigned k=0;k + static consteval xarray genExpCoef() { + xarray a; + for(unsigned k=0;k + static consteval xarray genLogCoef() { + xarray a; + for(unsigned k=0;k + static consteval xarray genCbrtCoef() { + xarray a; + for(unsigned k=0;k + static consteval xarray genGammaCoef() { + xarray a; + for(unsigned k=0;k + static constexpr xpair ph(const Unpacked_t &ux, int p) { + typedef decltype(ux.mant) mant_t; + typedef decltype(Unpacked_t::longmant_t_()) longmant_t; + + if (ux.iszero || ux.exp < Unpacked_t::expoffset()-5) return xpair(ux, 0); + + const int mantexp = ux.exp - Unpacked_t::expoffset() - Unpacked_t::nbmant_() + 1; + const int m = (mantexp - 1) < 0 ? 0 : (mantexp - 1); + + int rpiexp = p - (m & ~7) - sizeof(mant_t) * 8; + longmant_t rpih = 0, rpil = 0; + for(unsigned i=0;i> (sizeof(mant_t) * 8)); + int q = 0; + if (-(mantexp + rpiexp) < (int)sizeof(longmant_t)*8) { + longmant_t qm = (rm + (longmant_t(1) << (-(mantexp + rpiexp) - 1))) & (~longmant_t(0) << -(mantexp + rpiexp)); + rm -= qm; + q = int(qm >> -(mantexp + rpiexp)); + } + + int exp = mantexp + rpiexp - p; + for(unsigned j=sizeof(mant_t) * 2;Unpacked_t::clz(rm) > sizeof(mant_t) * 8 || Unpacked_t::clz(~rm) > sizeof(mant_t) * 8;j += sizeof(mant_t)) { + rm = (rm << (sizeof(mant_t) * 8)) + ((ux.mant * rpil) & ((longmant_t(1) << (sizeof(mant_t) * 8)) - 1)); + rpil = 0; + for(unsigned i=0;i> (sizeof(mant_t) * 8)); + exp -= sizeof(mant_t) * 8; + } + + bool sign = ux.sign; + if (rm >> (sizeof(rm) * 8 - 1)) { rm = -rm; q = -q; sign = !sign; } + + int x = sizeof(rm) * 8 - Unpacked_t::clz(rm); + int s = Unpacked_t::nbmant_() - (x - 1); + mant_t u = mant_t(s >= 0 ? (rm << s) : ((rm + (mant_t(1) << (-s - 1))) >> -s)); + if (Unpacked_t::bit(u, Unpacked_t::nbmant_() + 1)) { u >>= 1; x++; } + Unpacked_t r = Unpacked_t(u, x + Unpacked_t::expoffset() - 2 + exp, false, false, false, false) * const_M_PI_(); + + return xpair(sign ? -r : r, sign ? -q & 0xff : q & 0xff); + } + + // + + template + static constexpr Unpacked_t sin_(const Unpacked_t& a) { + const xpair p = ph(a, 1); + + Unpacked_t d = Unpacked_t(0); + + if (p.second & 1) { + constexpr xarray cosCoef = genCosCoef(); + d = cosCoef.e[N+1]; + for(int i=N-0;i>=0;i--) d = Unpacked_t::fma(d, -p.first * p.first, cosCoef.e[i]); + } else { + constexpr xarray sinCoef = genSinCoef(); + d = sinCoef.e[N]; + for(int i=N-1;i>=0;i--) d = Unpacked_t::fma(d, -p.first * p.first, sinCoef.e[i]); + d *= p.first; + } + + return (p.second & 2) ? -d : d; + } + + template + static constexpr tlfloat_t sin(const tlfloat_t& a) { + if (isnan(a)) return a; + if (isinf(a)) return tlfloat_t::nan(); + auto y = sin_(a.getUnpacked().cast((const Unpacked_t *)nullptr)); + return tlfloat_t(y.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr Unpacked_t cos_(const Unpacked_t& a) { + const xpair p = ph(a, 1); + + Unpacked_t d = Unpacked_t(0); + + if (p.second & 1) { + constexpr xarray sinCoef = genSinCoef(); + d = sinCoef.e[N]; + for(int i=N-1;i>=0;i--) d = Unpacked_t::fma(d, -p.first * p.first, sinCoef.e[i]); + d *= -p.first; + } else { + constexpr xarray cosCoef = genCosCoef(); + d = cosCoef.e[N+1]; + for(int i=N-0;i>=0;i--) d = Unpacked_t::fma(d, -p.first * p.first, cosCoef.e[i]); + } + + return (p.second & 2) ? -d : d; + } + + template + static constexpr tlfloat_t cos(const tlfloat_t& a) { + if (isnan(a)) return a; + if (isinf(a)) return tlfloat_t::nan(); + auto y = cos_(a.getUnpacked().cast((const Unpacked_t *)nullptr)); + return tlfloat_t(y.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + // + + template + static constexpr xpair tan_(const Unpacked_t& a) { + const xpair p = ph(a, 1); + + Unpacked_t x = ldexp_(p.first, -1-int(M)), y; + + constexpr xarray tanCoef = genTanCoef(); + Unpacked_t d = tanCoef.e[N-1]; + for(int i=N-1;i>0;i--) d = Unpacked_t::fma(d, x * x, tanCoef.e[i-1]); + d *= x; + + if constexpr (M > 0) { + for(unsigned i=0;i { x, y }; + } + + template + static constexpr tlfloat_t tan(const tlfloat_t& a) { + if (isnan(a)) return a; + if (isinf(a)) return tlfloat_t::nan(); + auto y = tan_(a.getUnpacked().cast((const Unpacked_t *)nullptr)); + return tlfloat_t((y.first / y.second).cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + // + + template + static constexpr Unpacked_t sinpi_(const Unpacked_t& a) { + constexpr xarray sinCoef = genSinCoef(); + const Unpacked_t p = const_M_PI_() * a; + Unpacked_t d = sinCoef.e[N]; + for(int i=N-1;i>=0;i--) d = Unpacked_t::fma(d, -p * p, sinCoef.e[i]); + return d * -p; + } + + template + static constexpr Unpacked_t cospi_(const Unpacked_t& a) { + constexpr xarray cosCoef = genCosCoef(); + const Unpacked_t p = const_M_PI_() * a; + Unpacked_t d = cosCoef.e[N+1]; + for(int i=N-0;i>=0;i--) d = Unpacked_t::fma(d, -p * p, cosCoef.e[i]); + return d; + } + + template + static constexpr tlfloat_t sinpi(const tlfloat_t& a) { + if (isnan(a) || iszero(a)) return a; + if (isinf(a)) return tlfloat_t::nan(); + auto x = ldexp_(a.getUnpacked().cast((const Unpacked_t *)nullptr), 1), y = ldexp_(x - round(x), -1); + int lx = intlsb(ldexp_(x, 1)); + if (((lx >= 0 && (lx & 3) == 0) || (lx < 0 && (lx & 3) == 3)) && isint(x)) return Unpacked_t::zero(x.sign); + Unpacked_t z = ((lx+3)&2) ? sinpi_(y) : cospi_(y); + if ((lx+7)&4) z.sign = !z.sign; + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t cospi(const tlfloat_t& a) { + if (isnan(a)) return a; + if (isinf(a)) return tlfloat_t::nan(); + auto x = ldexp_(a.getUnpacked().cast((const Unpacked_t *)nullptr), 1), y = ldexp_(x - round(x), -1); + int lx = intlsb(ldexp_(x, 1)); + if (!((lx+3)&2) && y.iszero) return Unpacked_t::zero(false); + Unpacked_t z = ((lx+3)&2) ? cospi_(y) : sinpi_(y); + if ((lx+1)&4) z.sign = !z.sign; + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t tanpi(const tlfloat_t& a) { + if (isnan(a) || iszero(a)) return a; + if (isinf(a)) return tlfloat_t::nan(); + auto x = ldexp_(a.getUnpacked().cast((const Unpacked_t *)nullptr), 1), y = ldexp_(x - round(x), -1); + int lx = intlsb(ldexp_(x, 1)); + if (((lx >= 0 && (lx & 3) == 0) || (lx < 0 && (lx & 3) == 3)) && isint(x)) return Unpacked_t::zero(lx & 4); + auto p = tan_(const_M_PI_() * y); + auto z = ((lx+1)&2) ? p.second / p.first : p.first / p.second; + if (z.isinf) z.sign = !(lx & 4); + if ((lx+1)&2) z.sign = !z.sign; + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + // + + template + static constexpr Unpacked_t atan2_(Unpacked_t y, Unpacked_t x) { + constexpr xarray atanCoef = genAtanCoef(); + int q = 0; + if (fabs(y) > fabs(x)) { + Unpacked_t t = x; x = y; y = -t; + q = x.sign ? -1 : 1; + } else if (x.sign) { + q = y.sign? -2 : 2; + } + + Unpacked_t d = y / x, r = atanCoef.e[N]; + + for(unsigned i=0;i=0;i--) r = Unpacked_t::fma(r, d * d, atanCoef.e[i]); + r *= d; + + Unpacked_t qu = Unpacked_t(q); + if (q == 0) qu.sign = r.sign; + if (x.iszero) { r = Unpacked_t(0); qu.sign = r.sign = y.sign; } + + return Unpacked_t::fma(qu, ldexp_(const_M_PI_(), -1), ldexp_(r, M)); + } + + template + static constexpr tlfloat_t atan2(tlfloat_t y, tlfloat_t x) { + if (isnan(y)) return y; + if (isnan(x)) return x; + if (int(isinf(y)) | isinf(x)) { + y = isinf(y) ? (signbit(y) ? -1 : 1) : (signbit(y) ? -0.0 : +0.0); + x = isinf(x) ? (signbit(x) ? -1 : 1) : (signbit(x) ? -0.0 : +0.0); + } + + Unpacked_t z = atan2_(y.getUnpacked().cast((const Unpacked_t *)nullptr), x.getUnpacked().cast((const Unpacked_t *)nullptr)); + return tlfloat_t(z.cast((const decltype(x.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t atan(const tlfloat_t &a) { + if (isnan(a)) return a; + Unpacked_t y = isinf(a) ? Unpacked_t(signbit(a) ? -1 : 1) : a.getUnpacked().cast((const Unpacked_t *)nullptr); + Unpacked_t x = Unpacked_t(isinf(a) ? 0 : 1); + Unpacked_t z = atan2_(y, x); + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t asin(const tlfloat_t &a) { + if (isnan(a)) return a; + if (fabs(a) > 1) return tlfloat_t::nan(); + Unpacked_t y = a.getUnpacked().cast((const Unpacked_t *)nullptr); + Unpacked_t x = sqrt_((Unpacked_t(1) + y) * (Unpacked_t(1) - y)); + Unpacked_t z = atan2_(y, x); + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t acos(const tlfloat_t &a) { + if (isnan(a)) return a; + if (fabs(a) > 1) return tlfloat_t::nan(); + Unpacked_t x = a.getUnpacked().cast((const Unpacked_t *)nullptr); + Unpacked_t y = sqrt_((Unpacked_t(1) + x) * (Unpacked_t(1) - x)); + Unpacked_t z = atan2_(y, x); + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + // + + template + static constexpr Unpacked_t exp_(Unpacked_t d) { + constexpr xarray expCoef = genExpCoef(); + + if (d.exp > 28) return d.sign ? Unpacked_t(0) : Unpacked_t::infinity(); + + int64_t q = rint(d * constRLN2()).castToInt((int64_t *)nullptr); + + d = Unpacked_t::fma(Unpacked_t::castFromInt(-q), constLN2U(), d); + d = Unpacked_t::fma(Unpacked_t::castFromInt(-q), constLN2L(), d); + + d = ldexp_(d, -M); + + Unpacked_t s = expCoef.e[N+1]; + for(int i=N;i>=0;i--) s = Unpacked_t::fma(s, d, expCoef.e[i]); + + if constexpr (M > 0) for(unsigned i=0;i + static constexpr Unpacked_t expm1_(Unpacked_t d) { + constexpr xarray expCoef = genExpCoef(); + + if (d.iszero) return d; + if (d.exp > 28) return d.sign ? Unpacked_t(-1) : Unpacked_t::infinity(); + + int64_t q = rint(d * constRLN2()).castToInt((int64_t *)nullptr); + + d = Unpacked_t::fma(Unpacked_t::castFromInt(-q), constLN2U(), d); + d = Unpacked_t::fma(Unpacked_t::castFromInt(-q), constLN2L(), d); + + d = ldexp_(d, -M); + + Unpacked_t s = expCoef.e[N+1]; + for(int i=N;i>=1;i--) s = Unpacked_t::fma(s, d, expCoef.e[i]); + s *= d; + + if constexpr (M > 0) for(unsigned i=0;i + static constexpr tlfloat_t exp(const tlfloat_t &a) { + if (isnan(a)) return a; + if (isinf(a) && signbit(a)) return 0; + Unpacked_t z = exp_(a.getUnpacked().cast((const Unpacked_t *)nullptr)); + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t exp(const tlfloat_t &a, const Unpacked_t &SCALE) { + if (isnan(a)) return a; + if (isinf(a) && signbit(a)) return 0; + Unpacked_t z = exp_(a.getUnpacked().cast((const Unpacked_t *)nullptr) * SCALE); + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t expm1(const tlfloat_t &a) { + if (isnan(a)) return a; + if (isinf(a) && signbit(a)) return -1; + Unpacked_t z = expm1_(a.getUnpacked().cast((const Unpacked_t *)nullptr)); + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + // + + template + static constexpr Unpacked_t log_(Unpacked_t d) { + constexpr xarray logCoef = genLogCoef(); + + xpair p = frexp_(d); + Unpacked_t fr = p.first; + int e = p.second, m = 0; + + if (fr < constSqrt2O2()) { fr.exp++; e--; } + + if constexpr (M > 0) { + if (fabs(fr - Unpacked_t(1)).ilogb() > T) { + for(unsigned i=0;i=0;i--) y = Unpacked_t::fma(y, x*x, logCoef.e[i]); + y *= x; + + y = Unpacked_t::fma(Unpacked_t(e), constLN2L(), ldexp_(y, m)); + return Unpacked_t::fma(Unpacked_t(e), constLN2U(), y); + } + + template + static constexpr tlfloat_t log(const tlfloat_t &a) { + if (isnan(a)) return a; + if (a == 0) return tlfloat_t::infinity(true); + if (signbit(a)) return tlfloat_t::nan(); + if (isinf(a)) return tlfloat_t::infinity(); + Unpacked_t z = log_(a.getUnpacked().cast((const Unpacked_t *)nullptr)); + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t log(const tlfloat_t &a, const Unpacked_t &SCALE) { + if (isnan(a)) return a; + if (a == 0) return tlfloat_t::infinity(true); + if (signbit(a)) return tlfloat_t::nan(); + if (isinf(a)) return tlfloat_t::infinity(); + Unpacked_t z = log_(a.getUnpacked().cast((const Unpacked_t *)nullptr)) * SCALE; + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr Unpacked_t log1p_(Unpacked_t d) { + constexpr xarray logCoef = genLogCoef(); + + xpair p = frexp_(d + Unpacked_t(1)); + Unpacked_t fr = p.first; + int e = p.second; + + if (fr < constSqrt2O2()) { fr.exp++; e--; } + + fr = e == 0 ? d : (fr - Unpacked_t(1)); + + if constexpr (M > 0) for(unsigned i=0;i=0;i--) y = Unpacked_t::fma(y, x*x, logCoef.e[i]); + y *= x; + + y = Unpacked_t::fma(Unpacked_t(e), constLN2L(), ldexp_(y, M)); + return Unpacked_t::fma(Unpacked_t(e), constLN2U(), y); + } + + template + static constexpr tlfloat_t log1p(const tlfloat_t &a) { + if (isnan(a) || a == 0) return a; + if (a == -1) return tlfloat_t::infinity(true); + if (a < -1) return tlfloat_t::nan(); + if (isinf(a)) return tlfloat_t::infinity(); + Unpacked_t z = log1p_(a.getUnpacked().cast((const Unpacked_t *)nullptr)); + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + // + + template + static constexpr tlfloat_t pow(const tlfloat_t &x, const tlfloat_t &y) { + if (signbit(x) && finite(x) && !iszero(x) && finite(y) && !isint(y)) return tlfloat_t::nan(); + if (x == 1 || iszero(y)) return 1; + if (isnan(x)) return x; + if (isnan(y)) return y; + bool yisoddint = isint(y) && !iseven(y); + if (!signbit(y) && !iszero(y) && iszero(x) && yisoddint) return tlfloat_t::zero(signbit(x)); + if (iszero(x) && !signbit(y) && !iszero(y) && !yisoddint) return 0; + if (isinf(y) && x == -1) return 1; + bool absxlt1 = -1 < x && x < 1; + if (isinf(y) && signbit(y) && absxlt1) return tlfloat_t::infinity(); + bool absxgt1 = x < -1 || 1 < x; + if (isinf(y) && signbit(y) && absxgt1) return 0; + if (isinf(y) && !signbit(y) && absxlt1) return 0; + if (isinf(y) && !signbit(y) && absxgt1) return tlfloat_t::infinity(); + if (isinf(x) && signbit(x) && yisoddint && signbit(y)) return tlfloat_t::zero(true); + if (isinf(x) && signbit(x) && signbit(y) && !iszero(y) && !yisoddint) return 0; + if (isinf(x) && signbit(x) && !signbit(y) && yisoddint) return tlfloat_t::infinity(true); + if (isinf(x) && signbit(x) && !signbit(y) && !iszero(y) && !yisoddint) return tlfloat_t::infinity(false); + if (isinf(x) && !signbit(x) && signbit(y) && !iszero(y)) return 0; + if (isinf(x) && !signbit(x) && !signbit(y) && !iszero(y)) return tlfloat_t::infinity(false); + if (iszero(x) && yisoddint && signbit(y)) return tlfloat_t::infinity(signbit(x)); + if (iszero(x) && signbit(y) && !iszero(y) && !yisoddint) return tlfloat_t::infinity(false); + + Unpacked_t z = log_(fabs(x).getUnpacked().cast((const Unpacked_t *)nullptr)); + z = exp_(z * y.getUnpacked().cast((const Unpacked_t *)nullptr)); + if (signbit(x) && yisoddint) z.sign = !z.sign; + return tlfloat_t(z.cast((const decltype(x.getUnpacked()) *)nullptr)); + } + + // + + template + static constexpr Unpacked_t cbrt_(Unpacked_t d) { + const int eoffset = 1 << 20; + constexpr xarray cbrtCoef = genCbrtCoef(); + + int e = (d * constOneOthree()).ilogb() + 2; + d.exp -= e; + int r = (e + eoffset * 3) % 3; + Unpacked_t q = Unpacked_t(1); + if (r == 1) q = constCbrt2(); + if (r == 2) q = constCbrt4(); + + q.exp += (e + eoffset * 3) / 3 - eoffset; + + if (d.sign) q.sign = !q.sign; + d.sign = false; + + Unpacked_t x = cbrtCoef.e[N+1], y; + for(int i=N;i>=0;i--) x = Unpacked_t::fma(x, d - Unpacked_t(1), cbrtCoef.e[i]); + + if constexpr (M > 0) { + for(unsigned i=0;i(), x); + } + } + y = x * x * d; + + return Unpacked_t::fma(Unpacked_t::fma(y, x, Unpacked_t(-1)), -ldexp_(constOneOthree(), 1) * y, y) * q; + } + + template + static constexpr tlfloat_t cbrt(const tlfloat_t &a) { + if (iszero(a) || isinf(a) || isnan(a)) return a; + Unpacked_t z = cbrt_(a.getUnpacked().cast((const Unpacked_t *)nullptr)); + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + // + + template + static constexpr tlfloat_t sinh(const tlfloat_t &a) { + Unpacked_t x = a.getUnpacked().cast((const Unpacked_t *)nullptr), y = fabs(x); + if (x.isnan || x.isinf) return a; + if (y > Unpacked_t::castFromInt(1ULL << O)) return tlfloat_t::infinity(x.sign); + Unpacked_t d = expm1_(fabs(x)); + d = ldexp_(d * (d + Unpacked_t(2)) / (d + Unpacked_t(1)), -1); + if (x.sign) d.sign = !d.sign; + return tlfloat_t(d.cast((decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t cosh(const tlfloat_t &a) { + Unpacked_t x = a.getUnpacked().cast((const Unpacked_t *)nullptr), y = fabs(x); + if (x.isnan) return a; + if (x.iszero) return 1; + if (y > Unpacked_t::castFromInt(1ULL << O)) return tlfloat_t::infinity(); + Unpacked_t d = exp_(fabs(x)); + d = ldexp_(d + Unpacked_t(1) / d, -1); + return tlfloat_t(d.cast((decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t tanh(const tlfloat_t &a) { + Unpacked_t x = a.getUnpacked().cast((const Unpacked_t *)nullptr), y = fabs(x); + if (x.isnan) return a; + if (y.isinf || y > Unpacked_t::castFromInt(1ULL << O)) return x.sign ? -1 : 1; + Unpacked_t d = expm1_(ldexp_(y, 1)); + d = d / (d + Unpacked_t(2)); + if (x.sign) d.sign = !d.sign; + return tlfloat_t(d.cast((decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t asinh(const tlfloat_t &a) { + Unpacked_t x = a.getUnpacked().cast((const Unpacked_t *)nullptr), y = fabs(x); + if (x.isnan || y.isinf) return a; + bool ygt1 = y > Unpacked_t(1); + Unpacked_t d = ygt1 ? Unpacked_t(1) / y : y; + d = sqrt_(Unpacked_t::fma(d, d, Unpacked_t(1))); + if (ygt1) { + d = log_(Unpacked_t::fma(d, y, y)); + } else { + d = log1p_(d - Unpacked_t(1) + y); + } + if (x.sign) d.sign = !d.sign; + return tlfloat_t(d.cast((decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t acosh(const tlfloat_t &a) { + Unpacked_t x = a.getUnpacked().cast((const Unpacked_t *)nullptr); + if (x.isnan) return a; + if (x < Unpacked_t(1)) return tlfloat_t::nan(); + if (x.isinf) return tlfloat_t::infinity(); + Unpacked_t d = log_(sqrt_((x + Unpacked_t(1))*(x - Unpacked_t(1))) + x); + return tlfloat_t(d.cast((decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t atanh(const tlfloat_t &a) { + Unpacked_t x = a.getUnpacked().cast((const Unpacked_t *)nullptr), y = fabs(x); + if (x.isnan) return a; + if (x.isinf) return tlfloat_t::nan(); + if (y > Unpacked_t(1)) return tlfloat_t::nan(); + if (y == Unpacked_t(1)) return tlfloat_t::infinity(x.sign); + Unpacked_t d = ldexp_(log1p_(ldexp_(y, 1) / (Unpacked_t(1) - y)), -1); + if (x.sign) d.sign = !d.sign; + return tlfloat_t(d.cast((decltype(a.getUnpacked()) *)nullptr)); + } + + // + + template + static constexpr Unpacked_t fmod_(const Unpacked_t &n, const Unpacked_t &d, const Unpacked_t &rd) { + Unpacked_t r = n, d3 = d * Unpacked_t(3), d2 = ldexp_(d, 1); + for(int i=0;i<(1 << 20);i++) { + Unpacked_t q = trunc(toward0(r * rd)); + if (d3 > r && r > d) q = Unpacked_t(2); + if (d2 > r && r >= d) q = Unpacked_t(1); + r = Unpacked_t::fma(q, -d, r); + if (r < d) break; + } + return r; + } + + template + static constexpr tlfloat_t fmod(const tlfloat_t &n, const tlfloat_t &d) { + Unpacked_t un = n.getUnpacked().cast((Unpacked_t *)0); + Unpacked_t ud = d.getUnpacked().cast((Unpacked_t *)0); + if (un.isinf || ud.iszero) return tlfloat_t::nan(); + if (un.isnan || ud.isinf) return n; + if (ud.isnan) return d; + Unpacked_t ur = fmod_(fabs(un), fabs(ud), toward0(Unpacked_t(1) / fabs(ud))); + if (un.sign) ur.sign = !ur.sign; + return tlfloat_t(ur.cast((decltype(n.getUnpacked()) *)nullptr)); + } + + template + static constexpr Unpacked_t remainder_(const Unpacked_t &n, const Unpacked_t &d, const Unpacked_t &rd) { + Unpacked_t r = n, d15 = d * ldexp_(Unpacked_t(3), -1), d05 = ldexp_(d, -1); + bool qisodd = false; + for(int i=0;i<(1 << 20);i++) { + Unpacked_t q = rint(r * rd); + if (fabs(r) < d15) q = Unpacked_t(r.sign ? -1 : 1); + if (fabs(r) < d05 || (!qisodd && fabs(r) == d05)) q = Unpacked_t(0); + if (q.iszero) break; + qisodd = qisodd != (isint(q) && !iseven(q)); + r = Unpacked_t::fma(q, -d, r); + } + return r; + } + + template + static constexpr tlfloat_t remainder(const tlfloat_t &n, const tlfloat_t &d) { + Unpacked_t un = n.getUnpacked().cast((Unpacked_t *)0); + Unpacked_t ud = d.getUnpacked().cast((Unpacked_t *)0); + if (un.isinf || ud.iszero) return tlfloat_t::nan(); + if (un.isnan || ud.isinf) return n; + if (ud.isnan) return d; + Unpacked_t ur = remainder_(fabs(un), fabs(ud), toward0(Unpacked_t(1) / fabs(ud))); + if (un.sign) ur.sign = !ur.sign; + return tlfloat_t(ur.cast((decltype(n.getUnpacked()) *)nullptr)); + } + + template + static constexpr xpair remquo_(const Unpacked_t &n, const Unpacked_t &d, const Unpacked_t &rd) { + Unpacked_t r = n, d15 = d * ldexp_(Unpacked_t(3), -1), d05 = ldexp_(d, -1); + int64_t quo = 0; + bool qisodd = false; + for(int i=0;i<(1 << 20);i++) { + Unpacked_t q = rint(r * rd); + if (fabs(r) < d15) q = Unpacked_t(r.sign ? -1 : 1); + if (fabs(r) < d05 || (!qisodd && fabs(r) == d05)) q = Unpacked_t(0); + if (q.iszero) break; + qisodd = qisodd != (isint(q) && !iseven(q)); + quo += q.sign ? -int64_t(q.castToInt2() & ((1ULL << 63)-1)) : int64_t(q.castToInt2() & ((1ULL << 63)-1)); + r = Unpacked_t::fma(q, -d, r); + } + quo &= (1ULL << 63)-1; + return xpair(r, n.sign != d.sign ? -quo : quo); + } + + template + static constexpr xpair remquo(const tlfloat_t &n, const tlfloat_t &d) { + Unpacked_t un = n.getUnpacked().cast((Unpacked_t *)0); + Unpacked_t ud = d.getUnpacked().cast((Unpacked_t *)0); + if (un.isinf || ud.iszero) return xpair(tlfloat_t::nan(), 0); + if (un.isnan || ud.isinf) return xpair(n, 0); + if (ud.isnan) return xpair(d, 0); + auto p = remquo_(fabs(un), fabs(ud), toward0(Unpacked_t(1) / fabs(ud))); + if (un.sign) p.first.sign = !p.first.sign; + if (un.sign != ud.sign) p.second = -p.second; + return xpair(tlfloat_t(p.first.cast((decltype(n.getUnpacked()) *)nullptr)), p.second); + } + + // + + template + static constexpr Unpacked_t erf_(const Unpacked_t& z) { + Unpacked_t n = Unpacked_t::castFromInt(N*2+1), d = Unpacked_t(1), t; + for(int i=N;i>0;i-=2) { + t = n; + n = n*Unpacked_t(i*2-1) + z*z*Unpacked_t(i*2-0)*d; + d = t; + + t = n; + n = n*Unpacked_t(i*2-3) - z*z*Unpacked_t(i*2-2)*d; + d = t; + } + d = ldexp_(d, 1); + return z * constRSqrtPI() * exp_(-(z*z)) * (d / n); + } + + template + static constexpr Unpacked_t erfc_(const Unpacked_t& z) { + Unpacked_t n = Unpacked_t(1), d = n, t; + for(int i=N;i>0;i-=2) { + t = n; + n = n + ldexp_(Unpacked_t(i), -1) * d; + d = t; + + t = n; + n = z * z * n + ldexp_(Unpacked_t(i - 1), -1) * d; + d = t; + } + return z * constRSqrtPI() * exp_(-(z*z)) * (d / n); + } + + template + static constexpr tlfloat_t erf(const tlfloat_t &a) { + if (isnan(a)) return a; + if (isinf(a)) return signbit(a) ? -1 : 1; + Unpacked_t z; + if (a < (tlfloat_t)(-T * 0.1)) { + z = Unpacked_t(-1) - erfc_(a.getUnpacked().cast((const Unpacked_t *)nullptr)); + } else if (a < (tlfloat_t)(T * 0.1)) { + z = erf_(a.getUnpacked().cast((const Unpacked_t *)nullptr)); + } else { + z = Unpacked_t(1) - erfc_(a.getUnpacked().cast((const Unpacked_t *)nullptr)); + } + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t erfc(const tlfloat_t &a) { + if (isnan(a)) return a; + if (isinf(a)) return signbit(a) ? 2 : 0; + Unpacked_t z; + if (a < (tlfloat_t)(-T * 0.1)) { + z = Unpacked_t(2) + erfc_(a.getUnpacked().cast((const Unpacked_t *)nullptr)); + } else if (a < (tlfloat_t)(T * 0.1)) { + z = Unpacked_t(1) - erf_(a.getUnpacked().cast((const Unpacked_t *)nullptr)); + } else { + z = erfc_(a.getUnpacked().cast((const Unpacked_t *)nullptr)); + } + return tlfloat_t(z.cast((const decltype(a.getUnpacked()) *)nullptr)); + } + + // + + template + static constexpr xpair lgamma_(const Unpacked_t& z) { + constexpr xarray gammaCoef = genGammaCoef(); + const Unpacked_t one = Unpacked_t(1), p5 = Unpacked_t("0x1p-1"); + + const bool reflect = z < Unpacked_t(-1); + Unpacked_t a = reflect ? one - z : z; + const Unpacked_t in = rint(a), fr = a - in; + + Unpacked_t w = Unpacked_t(1); + if (in < Unpacked_t(R)) { + for(int i = in.castToInt((int *)0);i=0;i--) y = Unpacked_t::fma(y, one / (a*a), gammaCoef.e[i]); + y = y/a + (a - p5)*log_(a) - a + p5*constLN2PI(); + + y -= log_(fabs(w)); + bool sign = w.sign; + + if (reflect) { + Unpacked_t s = sin_(const_M_PI_() * fr); + y = constLNPI() - log_(fabs(s)) - y; + sign = sign != s.sign; + sign = sign == iseven(in); + } + return xpair(sign, y); + } + + template + static constexpr tlfloat_t tgamma(const tlfloat_t &z) { + Unpacked_t zu = z.getUnpacked().cast((const Unpacked_t *)nullptr); + if (zu.isnan || (!zu.sign && zu.isinf)) return z; + if (zu.iszero) return tlfloat_t::infinity(zu.sign); + if (zu.sign && isint(zu)) return tlfloat_t::nan(); + + auto p = lgamma_(zu); + Unpacked_t r = exp_(p.second); + r.sign = r.sign != p.first; + return tlfloat_t(r.cast((const decltype(z.getUnpacked()) *)nullptr)); + } + + template + static constexpr tlfloat_t lgamma(const tlfloat_t &z, bool *signptr = nullptr) { + Unpacked_t zu = z.getUnpacked().cast((const Unpacked_t *)nullptr); + if (signptr) *signptr = false; + if (zu.isnan) return z; + if (zu.iszero|| zu.isinf) { if (signptr) *signptr = zu.sign; return tlfloat_t::infinity(); } + if (zu.sign && isint(zu)) return tlfloat_t::infinity(); + + auto p = lgamma_(zu); + if (signptr) *signptr = p.first; + return tlfloat_t(p.second.cast((const decltype(z.getUnpacked()) *)nullptr)); + } + } + + // + + /** Returns 2^exp * PI */ + template + static inline consteval tlfloat_t const_M_PI(int exp = 0) { + typedef decltype(tlfloat_t::to_Unpacked_t()) Unpacked_t; + typedef decltype(Unpacked_t::xUnpackedFloat()) xUnpacked_t; + return detail::const_M_PI_(exp).cast((Unpacked_t *)0); + } + + /** Returns 2^exp * log_2 (e) */ + template + static inline consteval tlfloat_t const_M_LOG2E(int exp = 0) { + typedef decltype(tlfloat_t::to_Unpacked_t()) Unpacked_t; + typedef decltype(Unpacked_t::xUnpackedFloat()) xUnpacked_t; + return ldexp_(detail::constRLN2(), exp).cast((Unpacked_t*)0); + } + + /** Returns 2^exp * log_10 (e) */ + template + static inline consteval tlfloat_t const_M_LOG10E(int exp = 0) { + typedef decltype(tlfloat_t::to_Unpacked_t()) Unpacked_t; + typedef decltype(Unpacked_t::xUnpackedFloat()) xUnpacked_t; + return ldexp_(detail::constRLN10(), exp).cast((Unpacked_t*)0); + } + + /** Returns 2^exp * log 2 */ + template + static inline consteval tlfloat_t const_M_LN2(int exp = 0) { + typedef decltype(tlfloat_t::to_Unpacked_t()) Unpacked_t; + typedef decltype(Unpacked_t::xUnpackedFloat()) xUnpacked_t; + return ldexp_(detail::constLN2(), exp).cast((Unpacked_t*)0); + } + + /** Returns 2^exp * log 10 */ + template + static inline consteval tlfloat_t const_M_LN10(int exp = 0) { + typedef decltype(tlfloat_t::to_Unpacked_t()) Unpacked_t; + typedef decltype(Unpacked_t::xUnpackedFloat()) xUnpacked_t; + return ldexp_(detail::constLN10(), exp).cast((Unpacked_t*)0); + } + + /** Returns 2^exp / PI */ + template + static inline consteval tlfloat_t const_M_1_PI(int exp = 0) { + typedef decltype(tlfloat_t::to_Unpacked_t()) Unpacked_t; + typedef decltype(Unpacked_t::xUnpackedFloat()) xUnpacked_t; + return (xUnpacked_t(1) / detail::const_M_PI_(-exp)).cast((Unpacked_t *)0); + } + + /** Returns 2^exp / sqrt(PI) */ + template + static inline consteval tlfloat_t const_M_1_SQRTPI(int exp = 0) { + typedef decltype(tlfloat_t::to_Unpacked_t()) Unpacked_t; + typedef decltype(Unpacked_t::xUnpackedFloat()) xUnpacked_t; + return (ldexp_(xUnpacked_t(1), exp) / sqrt_(detail::const_M_PI_(0))).cast((Unpacked_t*)0); + } + + /** Returns 2^exp * E */ + template + static inline consteval tlfloat_t const_M_E(int exp = 0) { + typedef decltype(tlfloat_t::to_Unpacked_t()) Unpacked_t; + typedef decltype(Unpacked_t::xUnpackedFloat()) xUnpacked_t; + return detail::const_M_E_(exp).cast((Unpacked_t *)0); + } + + /** Returns the Euler–Mascheroni constant */ + template + static inline consteval tlfloat_t const_Euler() { + typedef decltype(tlfloat_t::to_Unpacked_t()) Unpacked_t; + typedef decltype(Unpacked_t::xUnpackedFloat()) xUnpacked_t; + return detail::constEuler().cast((Unpacked_t*)0); + } + + // + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 sin(const BFloat16& a) { return detail::sin(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half sin(const Half& a) { return detail::sin(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float sin(const Float& a) { return detail::sin(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double sin(const Double& a) { return detail::sin(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad sin(const Quad& a) { return detail::sin(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple sin(const Octuple& a) { return detail::sin(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 cos(const BFloat16& a) { return detail::cos(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half cos(const Half& a) { return detail::cos(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float cos(const Float& a) { return detail::cos(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double cos(const Double& a) { return detail::cos(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad cos(const Quad& a) { return detail::cos(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple cos(const Octuple& a) { return detail::cos(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 tan(const BFloat16& a) { return detail::tan(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half tan(const Half& a) { return detail::tan(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float tan(const Float& a) { return detail::tan(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double tan(const Double& a) { return detail::tan(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad tan(const Quad& a) { return detail::tan(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple tan(const Octuple& a) { return detail::tan(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 atan2(const BFloat16& y, const BFloat16& x) { return detail::atan2(y, x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half atan2(const Half& y, const Half& x) { return detail::atan2(y, x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float atan2(const Float& y, const Float& x) { return detail::atan2(y, x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double atan2(const Double& y, const Double& x) { return detail::atan2(y, x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad atan2(const Quad& y, const Quad& x) { return detail::atan2(y, x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple atan2(const Octuple& y, const Octuple& x) { return detail::atan2(y, x); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 asin(const BFloat16& a) { return detail::asin(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half asin(const Half& a) { return detail::asin(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float asin(const Float& a) { return detail::asin(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double asin(const Double& a) { return detail::asin(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad asin(const Quad& a) { return detail::asin(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple asin(const Octuple& a) { return detail::asin(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 acos(const BFloat16& a) { return detail::acos(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half acos(const Half& a) { return detail::acos(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float acos(const Float& a) { return detail::acos(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double acos(const Double& a) { return detail::acos(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad acos(const Quad& a) { return detail::acos(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple acos(const Octuple& a) { return detail::acos(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 atan(const BFloat16& a) { return detail::atan(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half atan(const Half& a) { return detail::atan(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float atan(const Float& a) { return detail::atan(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double atan(const Double& a) { return detail::atan(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad atan(const Quad& a) { return detail::atan(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple atan(const Octuple& a) { return detail::atan(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 exp(const BFloat16& a) { return detail::exp(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half exp(const Half& a) { return detail::exp(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float exp(const Float& a) { return detail::exp(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double exp(const Double& a) { return detail::exp(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad exp(const Quad& a) { return detail::exp(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple exp(const Octuple& a) { return detail::exp(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 expm1(const BFloat16& a) { return detail::expm1(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half expm1(const Half& a) { return detail::expm1(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float expm1(const Float& a) { return detail::expm1(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double expm1(const Double& a) { return detail::expm1(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad expm1(const Quad& a) { return detail::expm1(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple expm1(const Octuple& a) { return detail::expm1(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 exp2(const BFloat16& a) { return detail::exp(a, detail::constLN2()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half exp2(const Half& a) { return detail::exp(a, detail::constLN2()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float exp2(const Float& a) { return detail::exp(a, detail::constLN2()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double exp2(const Double& a) { return detail::exp(a, detail::constLN2()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad exp2(const Quad& a) { return detail::exp(a, detail::constLN2()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple exp2(const Octuple& a) { return detail::exp(a, detail::constLN2()); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 exp10(const BFloat16& a) { return detail::exp(a, detail::constLN10()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half exp10(const Half& a) { return detail::exp(a, detail::constLN10()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float exp10(const Float& a) { return detail::exp(a, detail::constLN10()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double exp10(const Double& a) { return detail::exp(a, detail::constLN10()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad exp10(const Quad& a) { return detail::exp(a, detail::constLN10()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple exp10(const Octuple& a) { return detail::exp(a, detail::constLN10()); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 log(const BFloat16& a) { return detail::log(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half log(const Half& a) { return detail::log(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float log(const Float& a) { return detail::log(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double log(const Double& a) { return detail::log(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad log(const Quad& a) { return detail::log(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple log(const Octuple& a) { return detail::log(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 log1p(const BFloat16& a) { return detail::log1p(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half log1p(const Half& a) { return detail::log1p(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float log1p(const Float& a) { return detail::log1p(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double log1p(const Double& a) { return detail::log1p(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad log1p(const Quad& a) { return detail::log1p(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple log1p(const Octuple& a) { return detail::log1p(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 log2(const BFloat16& a) { return detail::log(a, detail::constRLN2()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half log2(const Half& a) { return detail::log(a, detail::constRLN2()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float log2(const Float& a) { return detail::log(a, detail::constRLN2()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double log2(const Double& a) { return detail::log(a, detail::constRLN2()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad log2(const Quad& a) { return detail::log(a, detail::constRLN2()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple log2(const Octuple& a) { return detail::log(a, detail::constRLN2()); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 log10(const BFloat16& a) { return detail::log(a, detail::constRLN10()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half log10(const Half& a) { return detail::log(a, detail::constRLN10()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float log10(const Float& a) { return detail::log(a, detail::constRLN10()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double log10(const Double& a) { return detail::log(a, detail::constRLN10()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad log10(const Quad& a) { return detail::log(a, detail::constRLN10()); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple log10(const Octuple& a) { return detail::log(a, detail::constRLN10()); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 pow(const BFloat16& x, const BFloat16& y) { return detail::pow(x, y); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half pow(const Half& x, const Half& y) { return detail::pow(x, y); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float pow(const Float& x, const Float& y) { return detail::pow(x, y); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double pow(const Double& x, const Double& y) { return detail::pow(x, y); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad pow(const Quad& x, const Quad& y) { return detail::pow(x, y); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple pow(const Octuple& x, const Octuple& y) { return detail::pow(x, y); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 cbrt(const BFloat16& a) { return detail::cbrt(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half cbrt(const Half& a) { return detail::cbrt(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float cbrt(const Float& a) { return detail::cbrt(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double cbrt(const Double& a) { return detail::cbrt(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad cbrt(const Quad& a) { return detail::cbrt(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple cbrt(const Octuple& a) { return detail::cbrt(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 sinh(const BFloat16& a) { return detail::sinh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half sinh(const Half& a) { return detail::sinh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float sinh(const Float& a) { return detail::sinh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double sinh(const Double& a) { return detail::sinh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad sinh(const Quad& a) { return detail::sinh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple sinh(const Octuple& a) { return detail::sinh(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 cosh(const BFloat16& a) { return detail::cosh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half cosh(const Half& a) { return detail::cosh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float cosh(const Float& a) { return detail::cosh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double cosh(const Double& a) { return detail::cosh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad cosh(const Quad& a) { return detail::cosh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple cosh(const Octuple& a) { return detail::cosh(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 tanh(const BFloat16& a) { return detail::tanh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half tanh(const Half& a) { return detail::tanh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float tanh(const Float& a) { return detail::tanh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double tanh(const Double& a) { return detail::tanh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad tanh(const Quad& a) { return detail::tanh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple tanh(const Octuple& a) { return detail::tanh(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 asinh(const BFloat16& a) { return detail::asinh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half asinh(const Half& a) { return detail::asinh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float asinh(const Float& a) { return detail::asinh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double asinh(const Double& a) { return detail::asinh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad asinh(const Quad& a) { return detail::asinh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple asinh(const Octuple& a) { return detail::asinh(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 acosh(const BFloat16& a) { return detail::acosh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half acosh(const Half& a) { return detail::acosh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float acosh(const Float& a) { return detail::acosh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double acosh(const Double& a) { return detail::acosh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad acosh(const Quad& a) { return detail::acosh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple acosh(const Octuple& a) { return detail::acosh(a); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 atanh(const BFloat16& a) { return detail::atanh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half atanh(const Half& a) { return detail::atanh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float atanh(const Float& a) { return detail::atanh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double atanh(const Double& a) { return detail::atanh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad atanh(const Quad& a) { return detail::atanh(a); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple atanh(const Octuple& a) { return detail::atanh(a); } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr BFloat16 fmod(const BFloat16& y, const BFloat16& x) { return detail::fmod(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr Half fmod(const Half& y, const Half& x) { return detail::fmod(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr Float fmod(const Float& y, const Float& x) { return detail::fmod(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr Double fmod(const Double& y, const Double& x) { return detail::fmod(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr Quad fmod(const Quad& y, const Quad& x) { return detail::fmod(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr Octuple fmod(const Octuple& y, const Octuple& x) { return detail::fmod(y, x); } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr BFloat16 remainder(const BFloat16& y, const BFloat16& x) { return detail::remainder(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr Half remainder(const Half& y, const Half& x) { return detail::remainder(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr Float remainder(const Float& y, const Float& x) { return detail::remainder(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr Double remainder(const Double& y, const Double& x) { return detail::remainder(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr Quad remainder(const Quad& y, const Quad& x) { return detail::remainder(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr Octuple remainder(const Octuple& y, const Octuple& x) { return detail::remainder(y, x); } + + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr xpair remquo(const BFloat16& y, const BFloat16& x) { return detail::remquo(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr xpair remquo(const Half& y, const Half& x) { return detail::remquo(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr xpair remquo(const Float& y, const Float& x) { return detail::remquo(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr xpair remquo(const Double& y, const Double& x) { return detail::remquo(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr xpair remquo(const Quad& y, const Quad& x) { return detail::remquo(y, x); } + /** This function has the same functionality as the corresponding function in math.h. This function returns correctly rounded results. */ + static inline constexpr xpair remquo(const Octuple& y, const Octuple& x) { return detail::remquo(y, x); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 erf(const BFloat16& x) { return detail::erf(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half erf(const Half& x) { return detail::erf(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float erf(const Float& x) { return detail::erf(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double erf(const Double& x) { return detail::erf(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad erf(const Quad& x) { return detail::erf(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple erf(const Octuple& x) { return detail::erf(x); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 erfc(const BFloat16& x) { return detail::erfc(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half erfc(const Half& x) { return detail::erfc(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float erfc(const Float& x) { return detail::erfc(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double erfc(const Double& x) { return detail::erfc(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad erfc(const Quad& x) { return detail::erfc(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple erfc(const Octuple& x) { return detail::erfc(x); } + + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 tgamma(const BFloat16& x) { return detail::tgamma(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Half tgamma(const Half& x) { return detail::tgamma(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Float tgamma(const Float& x) { return detail::tgamma(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Double tgamma(const Double& x) { return detail::tgamma(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Quad tgamma(const Quad& x) { return detail::tgamma(x); } + /** This function has the same functionality as the corresponding function in math.h. The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple tgamma(const Octuple& x) { return detail::tgamma(x); } + + /** This function has the same functionality as the corresponding function in math.h. This implementation is experimental and has no error bound. */ + static inline constexpr BFloat16 lgamma(const BFloat16& x, bool *sign = 0) { return detail::lgamma(x, sign); } + /** This function has the same functionality as the corresponding function in math.h. This implementation is experimental and has no error bound. */ + static inline constexpr Half lgamma(const Half& x, bool *sign = 0) { return detail::lgamma(x, sign); } + /** This function has the same functionality as the corresponding function in math.h. This implementation is experimental and has no error bound. */ + static inline constexpr Float lgamma(const Float& x, bool *sign = 0) { return detail::lgamma(x, sign); } + /** This function has the same functionality as the corresponding function in math.h. This implementation is experimental and has no error bound. */ + static inline constexpr Double lgamma(const Double& x, bool *sign = 0) { return detail::lgamma(x, sign); } + /** This function has the same functionality as the corresponding function in math.h. This implementation is experimental and has no error bound. */ + static inline constexpr Quad lgamma(const Quad& x, bool *sign = 0) { return detail::lgamma(x, sign); } + /** This function has the same functionality as the corresponding function in math.h. This implementation is experimental and has no error bound. */ + static inline constexpr Octuple lgamma(const Octuple& x, bool *sign = 0) { return detail::lgamma(x, sign); } + + /** This function returns sin(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 sinpi(const BFloat16& a) { return detail::sinpi(a); } + /** This function returns sin(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Half sinpi(const Half& a) { return detail::sinpi(a); } + /** This function returns sin(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Float sinpi(const Float& a) { return detail::sinpi(a); } + /** This function returns sin(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Double sinpi(const Double& a) { return detail::sinpi(a); } + /** This function returns sin(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Quad sinpi(const Quad& a) { return detail::sinpi(a); } + /** This function returns sin(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple sinpi(const Octuple& a) { return detail::sinpi(a); } + + /** This function returns cos(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 cospi(const BFloat16& a) { return detail::cospi(a); } + /** This function returns cos(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Half cospi(const Half& a) { return detail::cospi(a); } + /** This function returns cos(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Float cospi(const Float& a) { return detail::cospi(a); } + /** This function returns cos(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Double cospi(const Double& a) { return detail::cospi(a); } + /** This function returns cos(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Quad cospi(const Quad& a) { return detail::cospi(a); } + /** This function returns cos(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple cospi(const Octuple& a) { return detail::cospi(a); } + + /** This function returns tan(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr BFloat16 tanpi(const BFloat16& a) { return detail::tanpi(a); } + /** This function returns tan(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Half tanpi(const Half& a) { return detail::tanpi(a); } + /** This function returns tan(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Float tanpi(const Float& a) { return detail::tanpi(a); } + /** This function returns tan(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Double tanpi(const Double& a) { return detail::tanpi(a); } + /** This function returns tan(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Quad tanpi(const Quad& a) { return detail::tanpi(a); } + /** This function returns tan(PI * x). The accuracy of the return value is 1ULP. */ + static inline constexpr Octuple tanpi(const Octuple& a) { return detail::tanpi(a); } + + static inline constexpr xpair sincos(const BFloat16& a) { + return { detail::sin(a), detail::cos(a) }; + } + static inline constexpr xpair sincos(const Half& a) { + return { detail::sin(a), detail::cos(a) }; + } + static inline constexpr xpair sincos(const Float& a) { + return { detail::sin(a), detail::cos(a) }; + } + static inline constexpr xpair sincos(const Double& a) { + return { detail::sin(a), detail::cos(a) }; + } + static inline constexpr xpair sincos(const Quad& a) { + return { detail::sin(a), detail::cos(a) }; + } + static inline constexpr xpair sincos(const Octuple& a) { + return { detail::sin(a), detail::cos(a) }; + } + + static inline constexpr xpair sincospi(const BFloat16& a) { + return { detail::sinpi(a), detail::cospi(a) }; + } + static inline constexpr xpair sincospi(const Half& a) { + return { detail::sinpi(a), detail::cospi(a) }; + } + static inline constexpr xpair sincospi(const Float& a) { + return { detail::sinpi(a), detail::cospi(a) }; + } + static inline constexpr xpair sincospi(const Double& a) { + return { detail::sinpi(a), detail::cospi(a) }; + } + static inline constexpr xpair sincospi(const Quad& a) { + return { detail::sinpi(a), detail::cospi(a) }; + } + static inline constexpr xpair sincospi(const Octuple& a) { + return { detail::sinpi(a), detail::cospi(a) }; + } +} +#endif // #ifndef __TLMATH_HPP_INCLUDED__ diff --git a/validation/extern/tlfloat/src/include/tlfloat/tlmathcoef.hpp b/validation/extern/tlfloat/src/include/tlfloat/tlmathcoef.hpp new file mode 100644 index 0000000..cd1b963 --- /dev/null +++ b/validation/extern/tlfloat/src/include/tlfloat/tlmathcoef.hpp @@ -0,0 +1,252 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +namespace tlfloat { + namespace detail { + static constexpr const char *sinCoefStr[] = { + "0x1p+0", // 1 + "0x1.55555555555555555555555555555555555555555555555555555555555555555p-3", // 0.166667 + "0x1.11111111111111111111111111111111111111111111111111111111111111111p-7", // 0.00833333 + "0x1.a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01ap-13", // 0.000198413 + "0x1.71de3a556c7338faac1c88e500171de3a556c7338faac1c88e500171de3a556c7p-19", // 2.75573e-06 + "0x1.ae64567f544e38fe747e4b837dc71e202b72f11b6aaac590f0129fef8e3a91f28p-26", // 2.50521e-08 + "0x1.6124613a86d097ca38331d23af684d3b3757bf4471c732840d301a3425ee6a9fap-33", // 1.6059e-10 + "0x1.ae7f3e733b81f11d8656b0ee8cafe91ebd5ec707db2878187199b98b26ed00c29p-41", // 7.64716e-13 + "0x1.952c77030ad4a6b2605197771affea7748d1ac43a117079e890927198e0c3cf36p-49", // 2.81146e-15 + "0x1.2f49b4681415724ca1ec3b7b9674b57eb741a062878d7ef76b1154a8d61e1ea73p-57", // 8.22064e-18 + "0x1.71b8ef6dcf5718bef146fcee6e45218487a0757f6d2b4571e19b38e15309e5fa2p-66", // 1.95729e-20 + "0x1.761b413163819d97b8704dd7f627984d6ff0465264584e5cf884c736f7f1bb2bap-75", // 3.86817e-23 + "0x1.3f3ccdd165fa8d4e44a419776f10b893fff294c13014bdbff99dad68eee2c1da2p-84", // 6.44695e-26 + "0x1.d1ab1c2dccea320a9a18f15d427734a0749e62d53e1ccbda09a68ca1d127c285p-94", // 9.18369e-29 + "0x1.259f98b4358ad7abe30e7766f1291d666f5d9049ed27987f64aa97ba866741e76p-103", // 1.131e-31 + "0x1.434d2e783f5bc42e1ee46fa6bfc3913b62f2db6e93b6e244b31ba1023acd155d7p-113", // 1.21613e-34 + "0x1.3981254dd0d51b5382cdffa974227d50dc124925687348048ea66d958e5a43436p-123", // 1.15163e-37 + "0x1.0dc59c716d91f2833c7f5a7e0623b3afda3303ff7d9742b4532af69b5e875343ep-133", // 9.67759e-41 + "0x1.9ec8d1c94e85af4c78b15c3d89d2f3fcb2a927344305c831b36193c49a9107539p-144", // 7.26546e-44 + "0x1.1e99449a4bacde0104476aeb4c3ab2f3022f1749c497dc344e5775a5e6d373f61p-154", // 4.90247e-47 + "0x1.65e61c39d0240c7e25cfd1b1b2dca885a152887a1738054011e8d8d92a3dc1833p-165", // 2.98931e-50 + "0x1.95db45257e5122dcbae56def3720370619e16b6b8c9493b419fab93c928f2c86p-176", // 1.65521e-53 + "0x1.a3cb8722206478e02c5e91c64cabec5f43a03d75f74a8d65fce02aa71f1773defp-187", // 8.35965e-57 + "0x1.8da8e0a127eb9b78b454d8b628e52abe2d969b50b8fe645081a8890682562822fp-198", // 3.86663e-60 + "0x1.5a42f0dfeb085d94a3fd410e1231c72d6f18e8c3ad46004619d32fe9cdca266e9p-209", // 1.64397e-63 + "0x1.161872bf7b8233772d91c5d112d44064bd9e588eb2eaeb2337e0d3f566d55a7fcp-220", // 6.44696e-67 + "0x1.9d4f1058674df40f206da45356515f54b343c3e4ccf98ffed6939f55aec0fd65dp-232", // 2.33925e-70 + }; + + static constexpr const char *cosCoefStr[] = { + "0x1p+0", // 1 + "0x1p-1", // 0.5 + "0x1.55555555555555555555555555555555555555555555555555555555555555555p-5", // 0.0416667 + "0x1.6c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16cp-10", // 0.00138889 + "0x1.a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01ap-16", // 2.48016e-05 + "0x1.27e4fb7789f5c72ef016d3ea6678e4b61ddf05c2d95567d3a50ccdf4b1c84456cp-22", // 2.75573e-07 + "0x1.1eed8eff8d897b544da987acfe84bec01cf74b679c71d90b4ab7154a5ed1b6a1bp-29", // 2.08768e-09 + "0x1.93974a8c07c9d20badf145dfa3e4ea8cd188da975d75f096ea801df2747e30b67p-37", // 1.14707e-11 + "0x1.ae7f3e733b81f11d8656b0ee8cafe91ebd5ec707db2878187199b98b26ed00c29p-45", // 4.77948e-14 + "0x1.6827863b97d977bb004886a2c2aa9786799dee7500f806c5cf2494887e43c4669p-53", // 1.56192e-16 + "0x1.e542ba402022507a9cad2bf8f0babbfdf2029a373f48cb25781bbaa7bcfcfdd85p-62", // 4.11032e-19 + "0x1.0ce396db7f8529450c90b7f338ec7577a874b28b381f7852d29f6f2f8235be876p-70", // 8.89679e-22 + "0x1.f2cf01972f577cca4b4067ca9d8a20673feb086ddb20687bf6065ef3f5424ee4ep-80", // 1.61174e-24 + "0x1.88e85fc6a4e59a38f2050ba6b01494676265a363ec684bfff82486a888798c203p-89", // 2.4796e-27 + "0x1.0a18a2635085d373c5c51c354a8d42a4d4eccac2feebe233733a998109cd93b9bp-98", // 3.27989e-30 + "0x1.3932c5047d60e60caded4c2989c574b187db44931f192b328d82c3fa28f6acb29p-108", // 3.76999e-33 + "0x1.434d2e783f5bc42e1ee46fa6bfc3913b62f2db6e93b6e244b31ba1023acd155d7p-118", // 3.80039e-36 + "0x1.2710231c0fd7a13f8a2b4af9d6b70c8856a7cc5f715d70f53af6fdb9ef6403124p-128", // 3.38716e-39 + "0x1.df983290c2ca92b06b8d12a7275bea1c2e9395546d7eaf797768d2db52b7b078ap-139", // 2.68822e-42 + "0x1.5d4acb9c0c3aae913d370a4ec4e78a182aa96461e799145fbf7a97623151b553ep-149", // 1.91196e-45 + "0x1.ca8ed42a12ae3001a07244abad2ab7eb36b1bedc6dbfc6ba16f255d63e1f1ff01p-160", // 1.22562e-48 + "0x1.10af527530de836c4d9225dcb909a4f81963742c4273d33d01747474b27831eap-170", // 7.11741e-52 + "0x1.272b1b03fec6a4fd9f327e7f6de8e232fb8cab36f1e06b6bb5cd9dfd81dc7d78cp-181", // 3.76184e-55 + "0x1.240804f65951062ca46e4f25c6084b63a97a9a0f47dad1ab1f37c4a0c7b74579bp-192", // 1.81732e-58 + "0x1.091b406b6ff267a5cd8de5cec5ee1c7ec90f1235d0a99835abc5b0af018ec56cap-203", // 8.05548e-62 + "0x1.bb36f6e12cd78205f0a05345360246a08e345d236d2666c0210e51cf1be4083bap-215", // 3.28795e-65 + "0x1.56457989358c8e1c86dacc15037b62f224741e3979beab3f09b23ff2f4b7d1d85p-226", // 1.2398e-68 + "0x1.e9d8f6ed83ea9c83b4a7df335cd23818889c2a8a6e31425d70174194f50aa7952p-238", // 4.33194e-72 + }; + + static constexpr const char *tanCoefStr[] = { + "0x1p+0", // 1 + "0x1.55555555555555555555555555555555555555555555555555555555555555555p-2", // 0.333333 + "0x1.11111111111111111111111111111111111111111111111111111111111111111p-3", // 0.133333 + "0x1.ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1bap-5", // 0.0539683 + "0x1.664f4882c10f9f32d6bba49dd81664f4882c10f9f32d6bba49dd81664f4882c1p-6", // 0.0218695 + "0x1.226e355e6c23c8f5b51c3974fb201d943551d033403abcd18e00916ce73a05fc6p-7", // 0.00886324 + "0x1.d6d3d0e157ddfb5fcc0da5c9a3ccbf7803392d31f0f1e489aed531efa6d26e87fp-9", // 0.00359213 + "0x1.7da36452b75e2b6a1d935e8b44c332e280ce9b23015763f9a2e6a037d980b9255p-10", // 0.00145583 + "0x1.355824803674452236558fc7c8c4fa131ee47a6efb5bcc8488abdd1852d67f1e8p-11", // 0.000590027 + "0x1.f57d7734d166421aab5227996a014ee33533957a54b46573823e26625e6342897p-13", // 0.000239129 + "0x1.967e18afcafac8a27ad6f4aec67c988153224339d65502fc723bdbedebd085423p-14", // 9.69154e-05 + "0x1.497d8eea2525933e5a05c9a50c6421139aedab67102ccb01abed979489a855ccep-15", // 3.92783e-05 + "0x1.0b132d39a60504ec9d30b0658500bf1949290cf2324e41fcc351d9c6574b60b28p-16", // 1.59189e-05 + "0x1.b0f72d3ee24e922d11bbab2ac11e2eba4af0306249bcb930bb58b0113e21d2579p-18", // 6.45169e-06 + "0x1.5ef2da474e5b6c7b3c5028bb861fa405ca59dc51e637c80297bd77c8e44004b8dp-19", // 2.61477e-06 + "0x1.1c77df95c1c0d02dc9139620f15ba7a8ac4fc1a4e8925de5e9f6908d90d78776bp-20", // 1.05973e-06 + "0x1.cd299de4ae6bb384dfb0d8b8d524ebda3c47ff027d158d4dc1f56acbc56357845p-22", // 4.29491e-07 + "0x1.75cde6563fed8e86fb51ef870af5f42e294d35c9d7a3de838d564c79c8041626bp-23", // 1.74066e-07 + "0x1.2efe8db3aff1f23114006472b898a2a16d216a7897780f92c0b4105f63325742dp-24", // 7.05464e-08 + "0x1.eb3229047434bca678aab17c61a99ba2a33aa5291c045f64c3f8904afbd676ba5p-26", // 2.85914e-08 + "0x1.8e25ff9327e2b98b1141fe7f008ea28771332489c0d52ecb35be9ef1393114c87p-27", // 1.15876e-08 + "0x1.42ba1a349b4901148f65da823d34eb19beab79bd676ba12dcb664f7b016326d3dp-28", // 4.6963e-09 + "0x1.0597b61cb3092292027ce60a84edabdb6c9c6a4b7302e0adb75164831e95ea83p-29", // 1.90334e-09 + "0x1.a813f6eaa7058527550642834433baebc467a339f0d50e5b96d9f8ca557c1fbc7p-31", // 7.71393e-10 + "0x1.57bea2950f11e4282ba8d79e4a096024115aae4da54d3b6dc85d3a71371cd7707p-32", // 3.12634e-10 + "0x1.16a101c5fde961fd1dd595ffe284dd729619804411fe8fe27d0cf7cc4ba294314p-33", // 1.26706e-10 + }; + + static constexpr const char *atanCoefStr[] = { + "0x1p+0", // 1 + "-0x1.55555555555555555555555555555555555555555555555555555555555555555p-2", // -0.333333 + "0x1.99999999999999999999999999999999999999999999999999999999999999999p-3", // 0.2 + "-0x1.24924924924924924924924924924924924924924924924924924924924924924p-3", // -0.142857 + "0x1.c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c7p-4", // 0.111111 + "-0x1.745d1745d1745d1745d1745d1745d1745d1745d1745d1745d1745d1745d1745d1p-4", // -0.0909091 + "0x1.3b13b13b13b13b13b13b13b13b13b13b13b13b13b13b13b13b13b13b13b13b13bp-4", // 0.0769231 + "-0x1.11111111111111111111111111111111111111111111111111111111111111111p-4", // -0.0666667 + "0x1.e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1ep-5", // 0.0588235 + "-0x1.af286bca1af286bca1af286bca1af286bca1af286bca1af286bca1af286bca1afp-5", // -0.0526316 + "0x1.86186186186186186186186186186186186186186186186186186186186186186p-5", // 0.047619 + "-0x1.642c8590b21642c8590b21642c8590b21642c8590b21642c8590b21642c8590b2p-5", // -0.0434783 + "0x1.47ae147ae147ae147ae147ae147ae147ae147ae147ae147ae147ae147ae147ae1p-5", // 0.04 + "-0x1.2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12fp-5", // -0.037037 + "0x1.1a7b9611a7b9611a7b9611a7b9611a7b9611a7b9611a7b9611a7b9611a7b9611ap-5", // 0.0344828 + "-0x1.08421084210842108421084210842108421084210842108421084210842108421p-5", // -0.0322581 + "0x1.f07c1f07c1f07c1f07c1f07c1f07c1f07c1f07c1f07c1f07c1f07c1f07c1f07c1p-6", // 0.030303 + "-0x1.d41d41d41d41d41d41d41d41d41d41d41d41d41d41d41d41d41d41d41d41d41d4p-6", // -0.0285714 + "0x1.bacf914c1bacf914c1bacf914c1bacf914c1bacf914c1bacf914c1bacf914c1bap-6", // 0.027027 + "-0x1.a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a4p-6", // -0.025641 + "0x1.8f9c18f9c18f9c18f9c18f9c18f9c18f9c18f9c18f9c18f9c18f9c18f9c18f9c1p-6", // 0.0243902 + "-0x1.7d05f417d05f417d05f417d05f417d05f417d05f417d05f417d05f417d05f417dp-6", // -0.0232558 + "0x1.6c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16cp-6", // 0.0222222 + }; + + static constexpr const char *expCoefStr[] = { + "0x1p+0", // 1 + "0x1p+0", // 1 + "0x1p-1", // 0.5 + "0x1.55555555555555555555555555555555555555555555555555555555555555555p-3", // 0.166667 + "0x1.55555555555555555555555555555555555555555555555555555555555555555p-5", // 0.0416667 + "0x1.11111111111111111111111111111111111111111111111111111111111111111p-7", // 0.00833333 + "0x1.6c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16cp-10", // 0.00138889 + "0x1.a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01ap-13", // 0.000198413 + "0x1.a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01ap-16", // 2.48016e-05 + "0x1.71de3a556c7338faac1c88e500171de3a556c7338faac1c88e500171de3a556c7p-19", // 2.75573e-06 + "0x1.27e4fb7789f5c72ef016d3ea6678e4b61ddf05c2d95567d3a50ccdf4b1c84456cp-22", // 2.75573e-07 + "0x1.ae64567f544e38fe747e4b837dc71e202b72f11b6aaac590f0129fef8e3a91f28p-26", // 2.50521e-08 + "0x1.1eed8eff8d897b544da987acfe84bec01cf74b679c71d90b4ab7154a5ed1b6a1bp-29", // 2.08768e-09 + "0x1.6124613a86d097ca38331d23af684d3b3757bf4471c732840d301a3425ee6a9fap-33", // 1.6059e-10 + "0x1.93974a8c07c9d20badf145dfa3e4ea8cd188da975d75f096ea801df2747e30b67p-37", // 1.14707e-11 + "0x1.ae7f3e733b81f11d8656b0ee8cafe91ebd5ec707db2878187199b98b26ed00c29p-41", // 7.64716e-13 + "0x1.ae7f3e733b81f11d8656b0ee8cafe91ebd5ec707db2878187199b98b26ed00c29p-45", // 4.77948e-14 + "0x1.952c77030ad4a6b2605197771affea7748d1ac43a117079e890927198e0c3cf36p-49", // 2.81146e-15 + "0x1.6827863b97d977bb004886a2c2aa9786799dee7500f806c5cf2494887e43c4669p-53", // 1.56192e-16 + "0x1.2f49b4681415724ca1ec3b7b9674b57eb741a062878d7ef76b1154a8d61e1ea73p-57", // 8.22064e-18 + "0x1.e542ba402022507a9cad2bf8f0babbfdf2029a373f48cb25781bbaa7bcfcfdd85p-62", // 4.11032e-19 + "0x1.71b8ef6dcf5718bef146fcee6e45218487a0757f6d2b4571e19b38e15309e5fa2p-66", // 1.95729e-20 + "0x1.0ce396db7f8529450c90b7f338ec7577a874b28b381f7852d29f6f2f8235be876p-70", // 8.89679e-22 + "0x1.761b413163819d97b8704dd7f627984d6ff0465264584e5cf884c736f7f1bb2bap-75", // 3.86817e-23 + "0x1.f2cf01972f577cca4b4067ca9d8a20673feb086ddb20687bf6065ef3f5424ee4ep-80", // 1.61174e-24 + "0x1.3f3ccdd165fa8d4e44a419776f10b893fff294c13014bdbff99dad68eee2c1da2p-84", // 6.44695e-26 + "0x1.88e85fc6a4e59a38f2050ba6b01494676265a363ec684bfff82486a888798c203p-89", // 2.4796e-27 + "0x1.d1ab1c2dccea320a9a18f15d427734a0749e62d53e1ccbda09a68ca1d127c285p-94", // 9.18369e-29 + "0x1.0a18a2635085d373c5c51c354a8d42a4d4eccac2feebe233733a998109cd93b9bp-98", // 3.27989e-30 + "0x1.259f98b4358ad7abe30e7766f1291d666f5d9049ed27987f64aa97ba866741e76p-103", // 1.131e-31 + "0x1.3932c5047d60e60caded4c2989c574b187db44931f192b328d82c3fa28f6acb29p-108", // 3.76999e-33 + "0x1.434d2e783f5bc42e1ee46fa6bfc3913b62f2db6e93b6e244b31ba1023acd155d7p-113", // 1.21613e-34 + "0x1.434d2e783f5bc42e1ee46fa6bfc3913b62f2db6e93b6e244b31ba1023acd155d7p-118", // 3.80039e-36 + "0x1.3981254dd0d51b5382cdffa974227d50dc124925687348048ea66d958e5a43436p-123", // 1.15163e-37 + "0x1.2710231c0fd7a13f8a2b4af9d6b70c8856a7cc5f715d70f53af6fdb9ef6403124p-128", // 3.38716e-39 + "0x1.0dc59c716d91f2833c7f5a7e0623b3afda3303ff7d9742b4532af69b5e875343ep-133", // 9.67759e-41 + "0x1.df983290c2ca92b06b8d12a7275bea1c2e9395546d7eaf797768d2db52b7b078ap-139", // 2.68822e-42 + "0x1.9ec8d1c94e85af4c78b15c3d89d2f3fcb2a927344305c831b36193c49a9107539p-144", // 7.26546e-44 + }; + + static constexpr const char *logCoefStr[] = { + "0x1p+1", // 2 + "0x1.55555555555555555555555555555555555555555555555555555555555555555p-1", // 0.666667 + "0x1.99999999999999999999999999999999999999999999999999999999999999999p-2", // 0.4 + "0x1.24924924924924924924924924924924924924924924924924924924924924924p-2", // 0.285714 + "0x1.c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c7p-3", // 0.222222 + "0x1.745d1745d1745d1745d1745d1745d1745d1745d1745d1745d1745d1745d1745d1p-3", // 0.181818 + "0x1.3b13b13b13b13b13b13b13b13b13b13b13b13b13b13b13b13b13b13b13b13b13bp-3", // 0.153846 + "0x1.11111111111111111111111111111111111111111111111111111111111111111p-3", // 0.133333 + "0x1.e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1ep-4", // 0.117647 + "0x1.af286bca1af286bca1af286bca1af286bca1af286bca1af286bca1af286bca1afp-4", // 0.105263 + "0x1.86186186186186186186186186186186186186186186186186186186186186186p-4", // 0.0952381 + "0x1.642c8590b21642c8590b21642c8590b21642c8590b21642c8590b21642c8590b2p-4", // 0.0869565 + "0x1.47ae147ae147ae147ae147ae147ae147ae147ae147ae147ae147ae147ae147ae1p-4", // 0.08 + "0x1.2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12fp-4", // 0.0740741 + "0x1.1a7b9611a7b9611a7b9611a7b9611a7b9611a7b9611a7b9611a7b9611a7b9611ap-4", // 0.0689655 + "0x1.08421084210842108421084210842108421084210842108421084210842108421p-4", // 0.0645161 + "0x1.f07c1f07c1f07c1f07c1f07c1f07c1f07c1f07c1f07c1f07c1f07c1f07c1f07c1p-5", // 0.0606061 + "0x1.d41d41d41d41d41d41d41d41d41d41d41d41d41d41d41d41d41d41d41d41d41d4p-5", // 0.0571429 + "0x1.bacf914c1bacf914c1bacf914c1bacf914c1bacf914c1bacf914c1bacf914c1bap-5", // 0.0540541 + "0x1.a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a4p-5", // 0.0512821 + "0x1.8f9c18f9c18f9c18f9c18f9c18f9c18f9c18f9c18f9c18f9c18f9c18f9c18f9c1p-5", // 0.0487805 + "0x1.7d05f417d05f417d05f417d05f417d05f417d05f417d05f417d05f417d05f417dp-5", // 0.0465116 + "0x1.6c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16cp-5", // 0.0444444 + "0x1.5c9882b9310572620ae4c415c9882b9310572620ae4c415c9882b9310572620aep-5", // 0.0425532 + "0x1.4e5e0a72f05397829cbc14e5e0a72f05397829cbc14e5e0a72f05397829cbc14ep-5", // 0.0408163 + "0x1.41414141414141414141414141414141414141414141414141414141414141414p-5", // 0.0392157 + "0x1.3521cfb2b78c13521cfb2b78c13521cfb2b78c13521cfb2b78c13521cfb2b78c1p-5", // 0.0377358 + "0x1.29e4129e4129e4129e4129e4129e4129e4129e4129e4129e4129e4129e4129e41p-5", // 0.0363636 + "0x1.1f7047dc11f7047dc11f7047dc11f7047dc11f7047dc11f7047dc11f7047dc11fp-5", // 0.0350877 + "0x1.15b1e5f75270d0456c797dd49c34115b1e5f75270d0456c797dd49c34115b1e5fp-5", // 0.0338983 + "0x1.0c9714fbcda3ac10c9714fbcda3ac10c9714fbcda3ac10c9714fbcda3ac10c971p-5", // 0.0327869 + "0x1.04104104104104104104104104104104104104104104104104104104104104104p-5", // 0.031746 + "0x1.f81f81f81f81f81f81f81f81f81f81f81f81f81f81f81f81f81f81f81f81f81f8p-6", // 0.0307692 + "0x1.e9131abf0b7672a07a44c6afc2dd9ca81e9131abf0b7672a07a44c6afc2dd9ca8p-6", // 0.0298507 + "0x1.dae6076b981dae6076b981dae6076b981dae6076b981dae6076b981dae6076b98p-6", // 0.0289855 + }; + + static constexpr const char *cbrtCoefStr[] = { + "0x1p+0", // 1 + "-0x1.55555555555555555555555555555555555555555555555555555555555555555p-2", // -0.333333 + "0x1.c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c7p-3", // 0.222222 + "-0x1.61f9add3c0ca4587e6b74f0329161f9add3c0ca4587e6b74f0329161f9add3c0cp-3", // -0.17284 + "0x1.26fabb85cb5339f140436c82a23d1a5663075fde49beaee172d4ce7c5010db20ap-3", // 0.144033 + "-0x1.ff4c33f8fa07b9c44d41ab0490ae2da6cdc88409d528625393d743c668a5c0167p-4", // -0.124829 + }; + + static constexpr const char *gammaCoefStr[] = { + "0x1.55555555555555555555555555555555555555555555555555555555555555555p-4", // 0.0833333 + "-0x1.6c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16c16cp-9", // -0.00277778 + "0x1.a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01a01ap-11", // 0.000793651 + "-0x1.38138138138138138138138138138138138138138138138138138138138138138p-11", // -0.000595238 + "0x1.b951e2b18ff23570ea73806e5478ac63fc8d5c3a9ce01b951e2b18ff23570ea73p-11", // 0.000841751 + "-0x1.f6ab0d9993c7c81f6ab0d9993c7c81f6ab0d9993c7c81f6ab0d9993c7c81f6abp-10", // -0.00191753 + "0x1.a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a41a4p-8", // 0.00641026 + "-0x1.e4286cb0f5397dc2064a8ed3175b9fe4286cb0f5397dc2064a8ed3175b9fe4286p-6", // -0.0295507 + "0x1.6fe96381e067ffa1876fe96381e067ffa1876fe96381e067ffa1876fe96381e06p-3", // 0.179644 + "-0x1.6476701181f39edbdb9ce625987d4c0e9162983e954e04476701181f39edbdb9cp+0", // -1.39243 + "0x1.ace44322ce005a74f53910c8b380169d3d4e44322ce005a74f53910c8b380169dp+3", // 13.4029 + "-0x1.39b2525cccc1aab67ee25d73c0f9473b68952525cccc1aab67ee25d73c0f9473bp+7", // -156.848 + "0x1.12234e81b4e81b4e81b4e81b4e81b4e81b4e81b4e81b4e81b4e81b4e81b4e81b4p+11", // 2193.1 + "-0x1.1a198ae1c4ab7eb3feddd849691fe36729b25c5fa4a108591aa839b7978d16bbdp+15", // -36108.8 + "0x1.51a2089a6e11a38433dc9fb888d3995db9600d30469ab0572c127abdcac58108dp+19", // 691472 + "-0x1.d1089b142d3577880c2d3577880c2d3577880c2d3577880c2d3577880c2d35778p+23", // -1.52382e+07 + "0x1.6d29a0f6433b79890cede62433b79890cede62433b79890cede62433b79890cedp+28", // 3.82901e+08 + "-0x1.445119d9e466ed5d4c049ab892ec2c69b51180f27e0f43f1e60cd6fd4a438b9bbp+33", // -1.08823e+10 + "0x1.43779bc9d4024e6a171024e6a171024e6a171024e6a171024e6a171024e6a171p+38", // 3.4732e+11 + "-0x1.6800b7bc07a8c854486b02e295ec854486b02e295ec854486b02e295ec854486bp+43", // -1.23696e+13 + "0x1.bc8cd6f8f1f755c78753cdb5d5c8db31ddd9593d0ae7da3d55812a5a765b9ebafp+48", // 4.88788e+14 + "-0x1.2efaec50eee5379680a13e9fb108c896e406f8bc2a2cc36997aad26cf51c74b9p+54", // -2.13203e+16 + "0x1.c5c266feb5e17db216d6146a5a9e66b907b4cb2fa644d4de8d74a474098596889p+59", // 1.02178e+18 + "-0x1.73c1280b15b1202d69f25ff30d9bdd4413b1b1035a8ae2ac3ea14fa61e9675192p+65", // -5.35755e+19 + "0x1.4befddf3ce358f90064d5699917e7ef88f1e8e2b610c81d2167b2bdaa31141b3bp+71", // 3.06158e+21 + "-0x1.41df01caf2a81099b4c924b8d90c9234d29bdde119739d7a0e2e61e78a27f1333p+77", // -1.89999e+23 + "0x1.51d7fc91b42fbb332f20ec1619c04add8eb0f2f7e904d200cd74ee21a90463d06p+83", // 1.27634e+25 + "-0x1.7eb054866aadf62e4992b56ad97d85de77436bde251628f048136e6f8f2d97d85p+89", // -9.25285e+26 + "0x1.d28166e47cd8fa1ceee1cce20862db968b81d6f1d0dad3abdbf7fb54c66d0ee5p+95", // 7.21882e+28 + "-0x1.31342a0d12ce4cc7f198769e8a306bc22e9631937ac14fa96b8e7d039ab9dc374p+102", // -6.04518e+30 + "0x1.ab9d9181cb599fdab1f7db2b872005987b1a9448be405987b1a9448be405987b1p+108", // 5.42067e+32 + "-0x1.400a6d954abb28dc25cb7384e71e1b1a99958544402feeeada99958544402feeep+115", // -5.19296e+34 + "0x1.feb94900e31a08f00a73200abc4e59d9826bcbb3431848c6801ceb0c52be31b39p+121", // 5.30366e+36 + "-0x1.b1959bd1fa84a486a39cca5b435920df12e1b004135bf4cac31ed2676b3d63991p+128", // -5.76333e+38 + "0x1.86eb77e97a0097e8da4c14c29ffba6dafac985398a2a50786c12225f1a19d211ap+135", // 6.65116e+40 + "-0x1.75a66c437f64a59273b1d1e2d66f326cb2c4a8eee9a081265e60576553decf60bp+142", // -8.13738e+42 + }; + } +} diff --git a/validation/extern/tlfloat/src/tester/CMakeLists.txt b/validation/extern/tlfloat/src/tester/CMakeLists.txt new file mode 100644 index 0000000..4b10141 --- /dev/null +++ b/validation/extern/tlfloat/src/tester/CMakeLists.txt @@ -0,0 +1,246 @@ +if (TLFLOAT_COMPILER_SUPPORTS_INT128) + add_executable(test_bigint3 test_bigint3.cpp) + add_test(NAME test_bigint3 COMMAND test_bigint3) +endif() + +if (BUILD_LIBS) + add_executable(test_bigint4 test_bigint4.cpp) + target_link_libraries(test_bigint4 tlfloat) + add_test(NAME test_bigint4 COMMAND test_bigint4) +endif() + +if (BUILDING_WITH_GLIBC AND BUILD_LIBS) + add_executable(test_printf test_printf.cpp) + target_link_libraries(test_printf tlfloat) + add_test(NAME test_printf COMMAND test_printf) + set_tests_properties(test_printf PROPERTIES COST "2") +endif() + +add_executable(test_bigint2 test_bigint2.cpp) +add_test(NAME test_bigint2 COMMAND test_bigint2) + +if(ENABLE_CUDA_TEST) + add_executable(test_cuda test_cuda.cu) + target_compile_options(test_cuda PRIVATE "--maxrregcount;128;--expt-relaxed-constexpr;--std;c++20") + add_test(NAME test_cuda COMMAND test_cuda) + set_tests_properties(test_cuda PROPERTIES COST "3") +endif() + +add_executable(test_arith test_arith.cpp) +add_executable(test_arith_noopt test_arith.cpp) +target_compile_definitions(test_arith_noopt PRIVATE TLFLOAT_DISABLE_ARCH_OPTIMIZATION=1) +if (TLFLOAT_ENABLE_LIBQUADMATH) + target_link_libraries(test_arith quadmath) + target_link_libraries(test_arith_noopt quadmath) +endif() +add_test(NAME test_arith COMMAND test_arith) +set_tests_properties(test_arith PROPERTIES COST "1") +add_test(NAME test_arith_noopt COMMAND test_arith_noopt) +set_tests_properties(test_arith_noopt PROPERTIES COST "1") + +if (INSTALL_CONTINUOUS_TESTERS) + install( + TARGETS test_arith test_arith_noopt + DESTINATION "${INSTALL_BINDIR}" + COMPONENT tester + ) +endif() + +add_executable(test_hash test_hash.cpp) +add_test(NAME test_hash COMMAND test_hash 73aabab9b968750a42459cef0ec1e1170160b1762713b9eceffa7f0d6555e11f) +set_tests_properties(test_hash PROPERTIES COST "2") + +add_executable(test_hash_noopt test_hash.cpp) +target_compile_definitions(test_hash_noopt PRIVATE TLFLOAT_DISABLE_ARCH_OPTIMIZATION=1) +add_test(NAME test_hash_noopt COMMAND test_hash_noopt 73aabab9b968750a42459cef0ec1e1170160b1762713b9eceffa7f0d6555e11f) +set_tests_properties(test_hash_noopt PROPERTIES COST "2") + +if (BUILD_LIBS) + add_executable(test_printf_hash test_printf_hash.cpp) + target_link_libraries(test_printf_hash tlfloat) + add_test(NAME test_printf_hash COMMAND test_printf_hash 2398daffe3037ec51f353ed9da2221f53d4d86fc554e0f93873381f74e1d352c) + set_tests_properties(test_printf_hash PROPERTIES COST "2") +endif() + +if (LIB_MPFR) + add_executable(test_mpfr test_mpfr.cpp) + target_link_libraries(test_mpfr ${LIB_MPFR}) + if (TLFLOAT_ENABLE_LIBQUADMATH) + target_link_libraries(test_mpfr quadmath) + endif() + add_test(NAME test_mpfr COMMAND test_mpfr) + set_tests_properties(test_mpfr PROPERTIES COST "2") + + add_executable(test_mpfr_noopt test_mpfr.cpp) + target_compile_definitions(test_mpfr_noopt PRIVATE TLFLOAT_DISABLE_ARCH_OPTIMIZATION=1) + target_link_libraries(test_mpfr_noopt ${LIB_MPFR}) + if (TLFLOAT_ENABLE_LIBQUADMATH) + target_link_libraries(test_mpfr_noopt quadmath) + endif() + add_test(NAME test_mpfr_noopt COMMAND test_mpfr_noopt) + set_tests_properties(test_mpfr_noopt PROPERTIES COST "2") + + if (INSTALL_CONTINUOUS_TESTERS) + install( + TARGETS test_mpfr test_mpfr_noopt + DESTINATION "${INSTALL_BINDIR}" + COMPONENT tester + ) + endif() + + add_executable(tester1 tester1.cpp) + target_link_libraries(tester1 ${LIB_MPFR}) + if (TLFLOAT_ENABLE_LIBQUADMATH) + target_link_libraries(tester1 quadmath) + endif() + add_test(NAME tester1 COMMAND tester1) + set_tests_properties(tester1 PROPERTIES COST "2") + + add_executable(tester1_noopt tester1.cpp) + target_compile_definitions(tester1_noopt PRIVATE TLFLOAT_DISABLE_ARCH_OPTIMIZATION=1) + target_link_libraries(tester1_noopt ${LIB_MPFR}) + if (TLFLOAT_ENABLE_LIBQUADMATH) + target_link_libraries(tester1_noopt quadmath) + endif() + add_test(NAME tester1_noopt COMMAND tester1_noopt) + set_tests_properties(tester1_noopt PROPERTIES COST "2") +endif() + +# + +if (LIB_MPFR AND (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_SYSTEM_PROCESSOR MATCHES "(arm64|aarch64)") AND BUILD_EXHAUSTIVE_TESTING) + add_executable(test_exhaustive32 test_exhaustive32.cpp) + target_link_libraries(test_exhaustive32 ${LIB_MPFR}) + if (TLFLOAT_ENABLE_LIBQUADMATH) + target_link_libraries(test_exhaustive32 quadmath) + endif() + + add_executable(test_exhaustive_bf16_mpfr test_exhaustive_bf16_mpfr.cpp) + target_link_libraries(test_exhaustive_bf16_mpfr ${LIB_MPFR}) + + if (OpenMP_CXX_FOUND) + target_compile_options(test_exhaustive32 PRIVATE ${OpenMP_CXX_FLAGS}) + target_link_options(test_exhaustive32 PRIVATE ${OpenMP_CXX_FLAGS}) + target_include_directories(test_exhaustive32 PRIVATE ${OpenMP_CXX_INCLUDE_DIRS}) + + target_compile_options(test_exhaustive_bf16_mpfr PRIVATE ${OpenMP_CXX_FLAGS}) + target_link_options(test_exhaustive_bf16_mpfr PRIVATE ${OpenMP_CXX_FLAGS}) + target_include_directories(test_exhaustive_bf16_mpfr PRIVATE ${OpenMP_CXX_INCLUDE_DIRS}) + endif() + + if (ENABLE_EXHAUSTIVE_TESTING) + add_test(NAME test_exhaustive32 COMMAND test_exhaustive32) + add_test(NAME test_exhaustive_bf16_mpfr COMMAND test_exhaustive_bf16_mpfr) + endif() + + if (INSTALL_CONTINUOUS_TESTERS) + install( + TARGETS test_exhaustive32 test_exhaustive_bf16_mpfr + DESTINATION "${INSTALL_BINDIR}" + COMPONENT tester + ) + endif() +endif() + +# + +if (TLFLOAT_COMPILER_SUPPORTS_ARM_FP16 AND LIB_MPFR AND BUILD_EXHAUSTIVE_TESTING) + add_executable(test_exhaustive16 test_exhaustive16.cpp) + target_link_libraries(test_exhaustive16 ${LIB_MPFR}) + target_compile_options(test_exhaustive16 PRIVATE "-march=armv8.2-a+fp16") + if (OpenMP_CXX_FOUND) + target_compile_options(test_exhaustive16 PRIVATE ${OpenMP_CXX_FLAGS}) + target_link_options(test_exhaustive16 PRIVATE ${OpenMP_CXX_FLAGS}) + target_include_directories(test_exhaustive16 PRIVATE ${OpenMP_CXX_INCLUDE_DIRS}) + endif() + if (ENABLE_EXHAUSTIVE_TESTING) + add_test(NAME test_exhaustive16 COMMAND test_exhaustive16) + endif() + + if (INSTALL_CONTINUOUS_TESTERS) + install( + TARGETS test_exhaustive16 + DESTINATION "${INSTALL_BINDIR}" + COMPONENT tester + ) + endif() +endif() + +if (TLFLOAT_COMPILER_SUPPORTS_FP16 AND BUILD_EXHAUSTIVE_TESTING) + add_executable(test_exhaustive16fma test_exhaustive16fma.cpp) + target_compile_definitions(test_exhaustive16fma PRIVATE TLFLOAT_ENABLE_INLINING=1) + if (OpenMP_CXX_FOUND) + target_compile_options(test_exhaustive16fma PRIVATE ${OpenMP_CXX_FLAGS}) + target_link_options(test_exhaustive16fma PRIVATE ${OpenMP_CXX_FLAGS}) + target_include_directories(test_exhaustive16fma PRIVATE ${OpenMP_CXX_INCLUDE_DIRS}) + endif() + if (ENABLE_EXHAUSTIVE_TESTING) + add_test(NAME test_exhaustive16fma COMMAND test_exhaustive16fma) + endif() + + if (INSTALL_CONTINUOUS_TESTERS) + install( + TARGETS test_exhaustive16fma + DESTINATION "${INSTALL_BINDIR}" + COMPONENT tester + ) + endif() +endif() + +if (TLFLOAT_COMPILER_SUPPORTS_BF16 AND BUILD_EXHAUSTIVE_TESTING) + add_executable(test_exhaustive_bf16 test_exhaustive_bf16.cpp) + if (OpenMP_CXX_FOUND) + target_compile_options(test_exhaustive_bf16 PRIVATE ${OpenMP_CXX_FLAGS}) + target_link_options(test_exhaustive_bf16 PRIVATE ${OpenMP_CXX_FLAGS}) + target_include_directories(test_exhaustive_bf16 PRIVATE ${OpenMP_CXX_INCLUDE_DIRS}) + endif() + if (ENABLE_EXHAUSTIVE_TESTING) + add_test(NAME test_exhaustive_bf16 COMMAND test_exhaustive_bf16) + endif() + + if (INSTALL_CONTINUOUS_TESTERS) + install( + TARGETS test_exhaustive_bf16 + DESTINATION "${INSTALL_BINDIR}" + COMPONENT tester + ) + endif() +endif() + +# + +if (BUILD_LIBS) + add_library(test_octuple_obj OBJECT test_octuple.cpp) + target_compile_definitions(test_octuple_obj PRIVATE TLFLOAT_NO_LIBSTDCXX=1) + target_compile_options(test_octuple_obj PRIVATE ${NOEXCEPT_CXX_FLAGS}) + set_target_properties(test_octuple_obj PROPERTIES LINKER_LANGUAGE C) + + add_executable(test_octuple test_octuple_dummy.c) + target_link_libraries(test_octuple test_octuple_obj tlfloat ${LIBM}) + set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "") + set_target_properties(test_octuple PROPERTIES LINKER_LANGUAGE C) + add_test(NAME test_octuple COMMAND test_octuple) + + add_executable(test_capi test_capi.c) + target_link_libraries(test_capi tlfloat ${LIBM}) + if (TLFLOAT_ENABLE_LIBQUADMATH) + target_link_libraries(test_capi quadmath) + endif() + set_target_properties(test_capi PROPERTIES LINKER_LANGUAGE C) + add_test(NAME test_capi COMMAND test_capi) + + if(NOT (("${CMAKE_SYSTEM_NAME}" STREQUAL "Emscripten") OR + (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND + CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "14.0.0"))) + add_executable(test_cpp11api test_cpp11api.cpp) + target_link_libraries(test_cpp11api tlfloat) + set_target_properties(test_cpp11api PROPERTIES CXX_STANDARD 11) + add_test(NAME test_cpp11api COMMAND test_cpp11api) + set_tests_properties(test_cpp11api PROPERTIES COST "1") + + add_executable(test_cpp11api20 test_cpp11api.cpp) + target_link_libraries(test_cpp11api20 tlfloat) + add_test(NAME test_cpp11api20 COMMAND test_cpp11api20) + set_tests_properties(test_cpp11api20 PROPERTIES COST "1") + endif() +endif() diff --git a/validation/extern/tlfloat/src/tester/test_arith.cpp b/validation/extern/tlfloat/src/tester/test_arith.cpp new file mode 100644 index 0000000..905cd61 --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_arith.cpp @@ -0,0 +1,1460 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#if defined(TLFLOAT_ENABLE_LIBQUADMATH) +#include +#endif + +using namespace std; +using namespace tlfloat; +using namespace tlfloat::detail; + +static_assert(Float::flt_min() == FLT_MIN); +static_assert(Float::flt_true_min() == FLT_TRUE_MIN); +static_assert(Float::flt_max() == FLT_MAX); +static_assert(Float::flt_epsilon() == FLT_EPSILON); + +static_assert(Double::flt_min() == DBL_MIN); +static_assert(Double::flt_true_min() == DBL_TRUE_MIN); +static_assert(Double::flt_max() == DBL_MAX); +static_assert(Double::flt_epsilon() == DBL_EPSILON); + +static void check(const char* msg, double x, double y) { + if (isnan(x) && isnan(y)) return; + + uint64_t u, v; + memcpy((void *)&u, (void *)&x, sizeof(u)); + memcpy((void *)&v, (void *)&y, sizeof(v)); + + if (u == v) return; + + cout << "NG " << msg << endl; + printf("x : %.18g %016llx\n", x, (unsigned long long)u); + printf("y : %.18g %016llx\n", y, (unsigned long long)v); + exit(-1); +} + +static void check(const char* msg, Octuple x, Octuple y) { check(msg, (double)x, (double)y); } + +int main(int argc, char **argv) { + uint64_t niter = 100000; + + if (argc >= 2) niter = strtoull(argv[1], nullptr, 10); + + if (niter == 0) { +#if defined(__GNUC__) + cout << "Build " << __DATE__ << " " << __TIME__ << endl; +#endif + cout << "Testing continuously" << endl; + } + + typedef UnpackedFloat ufloat; + typedef UnpackedFloat, 11, 52> udouble; + + typedef UnpackedFloat xfloat; + typedef UnpackedFloat, 0, 62> xdouble; + + shared_ptr rng = createPreferredRNG(); + + for(uint64_t i=0;niter == 0 || inextLT(65536) - 32768, i2 = (int)rng->nextLT(65536) - 32768; + int it, ic; + + float f1 = rndf(rng), f2 = rndf(rng), f3 = rndf(rng); + ufloat tlf1(f1), tlf2(f2), tlf3(f3); + + double d1 = rndd(rng), d2 = rndd(rng), d3 = rndd(rng); + udouble tld1(d1), tld2(d2), tld3(d3); + +#ifdef ENABLE_QUAD + quad q1 = rndq(rng), q2 = rndq(rng), q3 = rndq(rng); + uquad tlq1(q1), tlq2(q2), tlq3(q3); +#endif + + // + + float f4t = float(ufloat::faddsub(tlf1, tlf2, false)); + float f4c = f1 + f2; + + if (!cmpf(f4t, f4c)) { + cout << "f1: " << f1 << " : " << to_string_d(ufloat(f1 )) << endl; + cout << "f2: " << f2 << " : " << to_string_d(ufloat(f2 )) << endl; + cout << "+t: " << f4t << " : " << to_string_d(ufloat(f4t)) << endl; + cout << "+c: " << f4c << " : " << to_string_d(ufloat(f4c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + float f5t = float(ufloat::faddsub(tlf1, tlf2, true)); + float f5c = f1 - f2; + + if (!cmpf(f5t, f5c)) { + cout << "f1: " << f1 << " : " << to_string_d(ufloat(f1 )) << endl; + cout << "f2: " << f2 << " : " << to_string_d(ufloat(f2 )) << endl; + cout << "-t: " << f5t << " : " << to_string_d(ufloat(f5t)) << endl; + cout << "-c: " << f5c << " : " << to_string_d(ufloat(f5c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + float f6t = float(ufloat::fmul(tlf1, tlf2)); + float f6c = f1 * f2; + + if (!cmpf(f6t, f6c)) { + cout << "f1: " << f1 << " : " << to_string_d(ufloat(f1 )) << endl; + cout << "f2: " << f2 << " : " << to_string_d(ufloat(f2 )) << endl; + cout << "*t: " << f6t << " : " << to_string_d(ufloat(f6t)) << endl; + cout << "*c: " << f6c << " : " << to_string_d(ufloat(f6c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + float f7t = float(ufloat::fdiv(tlf1, tlf2)); + float f7c = f1 / f2; + + if (!cmpf(f7t, f7c)) { + cout << "f1: " << f1 << " : " << to_string_d(ufloat(f1 )) << endl; + cout << "f2: " << f2 << " : " << to_string_d(ufloat(f2 )) << endl; + cout << "/t: " << f7t << " : " << to_string_d(ufloat(f7t)) << endl; + cout << "/c: " << f7c << " : " << to_string_d(ufloat(f7c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tlf1 == tlf2) != (f1 == f2)) { + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1 )) << endl; + cout << "f2 : " << f2 << " : " << to_string_d(ufloat(f2 )) << endl; + cout << "==t: " << (tlf1 == tlf2) << endl; + cout << "==c: " << (f1 == f2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tlf1 != tlf2) != (f1 != f2)) { + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1 )) << endl; + cout << "f2 : " << f2 << " : " << to_string_d(ufloat(f2 )) << endl; + cout << "!=t: " << (tlf1 != tlf2) << endl; + cout << "!=c: " << (f1 != f2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tlf1 < tlf2) != (f1 < f2)) { + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1 )) << endl; + cout << "f2 : " << f2 << " : " << to_string_d(ufloat(f2 )) << endl; + cout << "< t: " << (tlf1 < tlf2) << endl; + cout << "< c: " << (f1 < f2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tlf1 > tlf2) != (f1 > f2)) { + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1 )) << endl; + cout << "f2 : " << f2 << " : " << to_string_d(ufloat(f2 )) << endl; + cout << "> t: " << (tlf1 > tlf2) << endl; + cout << "> c: " << (f1 > f2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tlf1 <= tlf2) != (f1 <= f2)) { + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1 )) << endl; + cout << "f2 : " << f2 << " : " << to_string_d(ufloat(f2 )) << endl; + cout << "<=t: " << (tlf1 <= tlf2) << endl; + cout << "<=c: " << (f1 <= f2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tlf1 >= tlf2) != (f1 >= f2)) { + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1 )) << endl; + cout << "f2 : " << f2 << " : " << to_string_d(ufloat(f2 )) << endl; + cout << ">=t: " << (tlf1 >= tlf2) << endl; + cout << ">=c: " << (f1 >= f2) << endl; + cout << "NG" << endl; + exit(-1); + } + +#if defined(__GLIBC__) || defined(FP_FAST_FMA) + float f8t = float(ufloat::fma(tlf1, tlf2, tlf3)); + float f8c = fmaf(f1, f2, f3); + + if (!cmpf(f8t, f8c)) { + cout << "f1: " << f1 << " : " << to_string_d(ufloat(f1 )) << endl; + cout << "f2: " << f2 << " : " << to_string_d(ufloat(f2 )) << endl; + cout << "f3: " << f3 << " : " << to_string_d(ufloat(f3 )) << endl; + cout << "ft: " << f8t << " : " << to_string_d(ufloat(f8t)) << endl; + cout << "fc: " << f8c << " : " << to_string_d(ufloat(f8c)) << endl; + cout << "NG" << endl; + exit(-1); + } +#endif + + float f9t = float(tld1.cast((const ufloat *)nullptr)); + float f9c = d1; + + if (!cmpf(f9t, f9c)) { + cout << "d1: " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "ct: " << f9t << " : " << to_string_d(ufloat(f9t)) << endl; + cout << "cc: " << f9c << " : " << to_string_d(ufloat(f9c)) << endl; + cout << "NG" << endl; + exit(-1); + } + +#ifdef ENABLE_QUAD + float fat = float(tlq1.cast((const ufloat *)nullptr)); + float fac = q1; + + if (!cmpf(fat, fac)) { + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "ct: " << fat << " : " << to_string_d(ufloat(fat)) << endl; + cout << "cc: " << fac << " : " << to_string_d(ufloat(fac)) << endl; + cout << "NG" << endl; + exit(-1); + } +#endif + + if ((i & 31) == 0 && fabs(f1) > 1e-30 && fabs(f1) < 1e+30) { + float fbt = (float)Float(to_string(Float(tlf1), 9).c_str()); + float fbc = (float)tlf1; + + if (!cmpf(fbt, fbc, 7)) { + cout << "f1: " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "s : " << to_string(Float(tlf1), 9) << endl; + cout << "ct: " << fbt << " : " << to_string_d(ufloat(fbt)) << endl; + cout << "cc: " << fbc << " : " << to_string_d(ufloat(fbc)) << endl; + cout << "NG" << endl; + exit(-1); + } + } + + float fc, ft, fn = f1; + + fc = truncf(fn); + ft = (float)trunc(Float(fn).getUnpacked()); + + if (!cmpf(fc, ft)) { + printf("\ntruncf\nfn = %.10g, fc = %.10g, ft = %.10g\n", fn, fc, ft); + exit(-1); + } + + fc = floorf(fn); + ft = (float)floor(Float(fn).getUnpacked()); + + if (!cmpf(fc, ft)) { + printf("\nfloorf\nfn = %.10g, fc = %.10g, ft = %.10g\n", fn, fc, ft); + exit(-1); + } + + fc = ceilf(fn); + ft = (float)ceil(Float(fn).getUnpacked()); + + if (!cmpf(fc, ft)) { + printf("\nceilf\nfn = %.10g, fc = %.10g, ft = %.10g\n", fn, fc, ft); + exit(-1); + } + + fc = roundf(fn); + ft = (float)round(Float(fn).getUnpacked()); + + if (!cmpf(fc, ft)) { + printf("\nroundf\nfn = %.10g, fc = %.10g, ft = %.10g\n", fn, fc, ft); + exit(-1); + } + + fc = rintf(fn); + ft = (float)rint(Float(fn).getUnpacked()); + + if (!cmpf(fc, ft)) { + printf("\nrintf\nfn = %.10g, fc = %.10g, ft = %.10g\n", fn, fc, ft); + exit(-1); + } + + // + + if ((bool)isnan(f1) != (bool)isnan(Float(f1))) { + printf("\nisnan f1 = %.10g\n", f1); + exit(-1); + } + + if ((bool)isinf(f1) != (bool)isinf(Float(f1))) { + printf("\nisinf f1 = %.10g, c = %d, t = %d\n", f1, isinf(f1), isinf(Float(f1))); + exit(-1); + } + + if ((bool)finite__(f1) != (bool)finite(Float(f1))) { + printf("\nfinite f1 = %.10g\n", f1); + exit(-1); + } + +#ifndef __APPLE__ + if (!cmpf(ldexpf(f1, i1), (float)ldexp(Float(f1), i1))) { + printf("\nldexpf f1 = %.10g, i1 = %d\n", f1, i1); + printf("c = %.10g, t = %.10g\n", ldexpf(f1, i1), (float)ldexp(Float(f1), i1)); + exit(-1); + } +#endif + + if (!cmpf(frexpf(f1, &ic), (float)frexp(Float(f1), &it)) || (!isnan(f1) && !isinf(f1) && ic != it)) { + printf("\nfrexpf f1 = %.10g, it = %d, ic = %d\n", f1, it, ic); + printf("c = %.10g, t = %.10g\n", frexpf(f1, &ic), (float)frexp(Float(f1), &it)); + exit(-1); + } + + // + + double d1t = double(tlf1.cast((const udouble *)nullptr)); + double d1c = f1; + + if (!cmpd(d1t, d1c)) { + cout << "cast float to double" << endl; + cout << "f1: " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "ct: " << d1t << " : " << to_string_d(udouble(d1t)) << endl; + cout << "cc: " << d1c << " : " << to_string_d(udouble(d1c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (f1 >= 0 && f1 < ldexp(1, 16) && tlf1.castToInt((const uint16_t *)nullptr) != uint16_t(float(tlf1))) { + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "ust: " << d1t << " : " << tlf1.castToInt((const uint16_t *)nullptr) << endl; + cout << "usc: " << d1c << " : " << uint16_t(float(tlf1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (f1 >= -ldexp(1, 15) && f1 < ldexp(1, 15) && tlf1.castToInt((const int16_t *)nullptr) != int16_t(float(tlf1))) { + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "sst: " << d1t << " : " << tlf1.castToInt((const int16_t *)nullptr) << endl; + cout << "ssc: " << d1c << " : " << int16_t(float(tlf1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (f1 >= 0 && f1 < ldexp(1, 32) && tlf1.castToInt((const uint32_t *)nullptr) != uint32_t(float(tlf1))) { + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "uit: " << tlf1.castToInt((const uint32_t *)nullptr) << endl; + cout << "uic: " << uint32_t(float(tlf1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (f1 >= -ldexp(1, 31) && f1 < ldexp(1, 31) && tlf1.castToInt((const int32_t *)nullptr) != int32_t(float(tlf1))) { + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "sit: " << tlf1.castToInt((const int32_t *)nullptr) << endl; + cout << "sic: " << int32_t(float(tlf1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (f1 >= 0 && f1 < ldexp(1, 64) && tlf1.castToInt((const uint64_t *)nullptr) != uint64_t(float(tlf1))) { + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "ult: " << tlf1.castToInt((const uint64_t *)nullptr) << endl; + cout << "ulc: " << uint64_t(float(tlf1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (f1 >= -ldexp(1, 63) && f1 < ldexp(1, 63) && tlf1.castToInt((const int64_t *)nullptr) != int64_t(float(tlf1))) { + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "slt: " << tlf1.castToInt((const int64_t *)nullptr) << endl; + cout << "slc: " << int64_t(float(tlf1)) << endl; + cout << "NG" << endl; + exit(-1); + } + +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + if (f1 >= 0 && f1 < ldexp(1, 128) && tlf1.castToInt((const BigUInt<7> *)nullptr) != UINT128(float(tlf1))) { + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "u128t: " << tlf1.castToInt((const BigUInt<7> *)nullptr) << endl; + cout << "u128c: " << UINT128(float(tlf1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (f1 >= -ldexp(1, 127) && f1 < ldexp(1, 127) && tlf1.castToInt((const BigInt<7> *)nullptr) != INT128(float(tlf1))) { + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "s128t: " << tlf1.castToInt((const BigInt<7> *)nullptr) << endl; + cout << "s128c: " << INT128(float(tlf1)) << endl; + cout << "NG" << endl; + exit(-1); + } +#endif + + // + + double d4t = double(udouble::faddsub(tld1, tld2, false)); + double d4c = d1 + d2; + + if (!cmpd(d4t, d4c)) { + cout << "d1: " << d1 << " : " << to_string_d(udouble(d1 )) << endl; + cout << "d2: " << d2 << " : " << to_string_d(udouble(d2 )) << endl; + cout << "+t: " << d4t << " : " << to_string_d(udouble(d4t)) << endl; + cout << "+c: " << d4c << " : " << to_string_d(udouble(d4c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + double d5t = double(udouble::faddsub(tld1, tld2, true)); + double d5c = d1 - d2; + + if (!cmpd(d5t, d5c)) { + cout << "d1: " << d1 << " : " << to_string_d(udouble(d1 )) << endl; + cout << "d2: " << d2 << " : " << to_string_d(udouble(d2 )) << endl; + cout << "-t: " << d5t << " : " << to_string_d(udouble(d5t)) << endl; + cout << "-c: " << d5c << " : " << to_string_d(udouble(d5c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + double d6t = double(udouble::fmul(tld1, tld2)); + double d6c = d1 * d2; + + if (!cmpd(d6t, d6c)) { + cout << "d1: " << d1 << " : " << to_string_d(udouble(d1 )) << endl; + cout << "d2: " << d2 << " : " << to_string_d(udouble(d2 )) << endl; + cout << "*t: " << d6t << " : " << to_string_d(udouble(d6t)) << endl; + cout << "*c: " << d6c << " : " << to_string_d(udouble(d6c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + double d7t = double(udouble::fdiv(tld1, tld2)); + double d7c = d1 / d2; + + if (!cmpd(d7t, d7c)) { + cout << "d1: " << d1 << " : " << to_string_d(udouble(d1 )) << endl; + cout << "d2: " << d2 << " : " << to_string_d(udouble(d2 )) << endl; + cout << "/t: " << d7t << " : " << to_string_d(udouble(d7t)) << endl; + cout << "/c: " << d7c << " : " << to_string_d(udouble(d7c)) << endl; + cout << "NG" << endl; + exit(-1); + } + +#if defined(__GLIBC__) || defined(FP_FAST_FMA) + double d8t = double(udouble::fma(tld1, tld2, tld3)); + double d8c = fma(d1, d2, d3); + + if (!cmpd(d8t, d8c)) { + cout << "d1: " << d1 << " : " << to_string_d(udouble(d1 )) << endl; + cout << "d2: " << d2 << " : " << to_string_d(udouble(d2 )) << endl; + cout << "d3: " << d3 << " : " << to_string_d(udouble(d3 )) << endl; + cout << "ft: " << d8t << " : " << to_string_d(udouble(d8t)) << endl; + cout << "fc: " << d8c << " : " << to_string_d(udouble(d8c)) << endl; + cout << "NG" << endl; + exit(-1); + } +#endif + +#ifdef ENABLE_QUAD + double d9t = double(tlq1.cast((const udouble *)nullptr)); + double d9c = q1; + + if (!cmpf(d9t, d9c)) { + cout << "cast double to quad" << endl; + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "ct: " << d9t << " : " << to_string_d(udouble(d9t)) << endl; + cout << "cc: " << d9c << " : " << to_string_d(udouble(d9c)) << endl; + cout << "NG" << endl; + exit(-1); + } +#endif + + if (d1 >= 0 && d1 < ldexp(1, 16) && tld1.castToInt((const uint16_t *)nullptr) != uint16_t(double(tld1))) { + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "ust: " << tld1.castToInt((const uint16_t *)nullptr) << endl; + cout << "usc: " << uint16_t(double(tld1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (d1 >= -ldexp(1, 15) && d1 < ldexp(1, 15) && tld1.castToInt((const int16_t *)nullptr) != int16_t(double(tld1))) { + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "sst: " << tld1.castToInt((const int16_t *)nullptr) << endl; + cout << "ssc: " << int16_t(double(tld1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (d1 >= 0 && d1 < ldexp(1, 32) && tld1.castToInt((const uint32_t *)nullptr) != uint32_t(double(tld1))) { + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "uit: " << tld1.castToInt((const uint32_t *)nullptr) << endl; + cout << "uic: " << uint32_t(double(tld1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (d1 >= -ldexp(1, 31) && d1 < ldexp(1, 31) && tld1.castToInt((const int32_t *)nullptr) != int32_t(double(tld1))) { + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "sit: " << tld1.castToInt((const int32_t *)nullptr) << endl; + cout << "sic: " << int32_t(double(tld1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (d1 >= 0 && d1 < ldexp(1, 64) && tld1.castToInt((const uint64_t *)nullptr) != uint64_t(double(tld1))) { + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "ult: " << tld1.castToInt((const uint64_t *)nullptr) << endl; + cout << "ulc: " << uint64_t(double(tld1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (d1 >= -ldexp(1, 63) && d1 < ldexp(1, 63) && tld1.castToInt((const int64_t *)nullptr) != int64_t(double(tld1))) { + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "slt: " << tld1.castToInt((const int64_t *)nullptr) << endl; + cout << "slc: " << int64_t(double(tld1)) << endl; + cout << "NG" << endl; + exit(-1); + } + +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + if (d1 >= 0 && d1 < ldexp(1, 128) && tld1.castToInt((const BigUInt<7> *)nullptr) != UINT128(double(tld1))) { + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "u128t: " << tld1.castToInt((const BigUInt<7> *)nullptr) << endl; + cout << "u128c: " << UINT128(double(tld1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (d1 >= -ldexp(1, 127) && d1 < ldexp(1, 127) && tld1.castToInt((const BigInt<7> *)nullptr) != INT128(double(tld1))) { + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "s128t: " << tld1.castToInt((const BigInt<7> *)nullptr) << endl; + cout << "s128c: " << INT128(double(tld1)) << endl; + cout << "NG" << endl; + exit(-1); + } +#endif + + if ((tld1 == tld2) != (d1 == d2)) { + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1 )) << endl; + cout << "d2 : " << d2 << " : " << to_string_d(udouble(d2 )) << endl; + cout << "==t: " << (tld1 == tld2) << endl; + cout << "==c: " << (d1 == d2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tld1 != tld2) != (d1 != d2)) { + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1 )) << endl; + cout << "d2 : " << d2 << " : " << to_string_d(udouble(d2 )) << endl; + cout << "!=t: " << (tld1 != tld2) << endl; + cout << "!=c: " << (d1 != d2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tld1 < tld2) != (d1 < d2)) { + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1 )) << endl; + cout << "d2 : " << d2 << " : " << to_string_d(udouble(d2 )) << endl; + cout << "< t: " << (tld1 < tld2) << endl; + cout << "< c: " << (d1 < d2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tld1 > tld2) != (d1 > d2)) { + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1 )) << endl; + cout << "d2 : " << d2 << " : " << to_string_d(udouble(d2 )) << endl; + cout << "> t: " << (tld1 > tld2) << endl; + cout << "> c: " << (d1 > d2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tld1 <= tld2) != (d1 <= d2)) { + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1 )) << endl; + cout << "d2 : " << d2 << " : " << to_string_d(udouble(d2 )) << endl; + cout << "<=t: " << (tld1 <= tld2) << endl; + cout << "<=c: " << (d1 <= d2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tld1 >= tld2) != (d1 >= d2)) { + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1 )) << endl; + cout << "d2 : " << d2 << " : " << to_string_d(udouble(d2 )) << endl; + cout << ">=t: " << (tld1 >= tld2) << endl; + cout << ">=c: " << (d1 >= d2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((i & 31) == 0 && fabs(d1) > 1e-250 && fabs(d1) < 1e+250) { + double dbt = (double)Double(to_string(Double(tld1), 18).c_str()); + double dbc = (double)tld1; + + if (!cmpd(dbt, dbc, 7)) { + cout << "d1: " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "s : " << to_string(Double(tld1), 18) << endl; + cout << "ct: " << dbt << " : " << to_string_d(udouble(dbt)) << endl; + cout << "cc: " << dbc << " : " << to_string_d(udouble(dbc)) << endl; + cout << "NG" << endl; + exit(-1); + } + } + + double dc, dt, dn = d1; + + dc = trunc(dn); + dt = (double)trunc(Double(dn).getUnpacked()); + + if (!cmpd(dc, dt)) { + printf("\ntrunc\ndn = %.18lg, dc = %.18lg, dt = %.18lg\n", dn, dc, dt); + exit(-1); + } + + dc = floor(dn); + dt = (double)floor(Double(dn).getUnpacked()); + + if (!cmpd(dc, dt)) { + printf("\nfloor\ndn = %.18lg, dc = %.18lg, dt = %.18lg\n", dn, dc, dt); + exit(-1); + } + + dc = ceil(dn); + dt = (double)ceil(Double(dn).getUnpacked()); + + if (!cmpd(dc, dt)) { + printf("\nceil\ndn = %.18lg, dc = %.18lg, dt = %.18lg\n", dn, dc, dt); + exit(-1); + } + + dc = round(dn); + dt = (double)round(Double(dn).getUnpacked()); + + if (!cmpd(dc, dt)) { + printf("\nround\ndn = %.18lg, dc = %.18lg, dt = %.18lg\n", dn, dc, dt); + exit(-1); + } + + dc = rint(dn); + dt = (double)rint(Double(dn).getUnpacked()); + + if (!cmpd(dc, dt)) { + printf("\nrint\ndn = %.18lg, dc = %.18lg, dt = %.18lg\n", dn, dc, dt); + exit(-1); + } + + // + + if ((bool)isnan(d1) != (bool)isnan(Double(d1))) { + printf("\nisnan d1 = %.10g\n", d1); + exit(-1); + } + + if ((bool)isinf(d1) != (bool)isinf(Double(d1))) { + printf("\nisinf d1 = %.10g\n", d1); + exit(-1); + } + + if ((bool)finite__(d1) != (bool)finite(Double(d1))) { + printf("\nfinite d1 = %.10g\n", d1); + exit(-1); + } + + if (!cmpfpclass(fpclassify(d1), fpclassify(Double(d1)))) { + printf("\nfpclassify d1 = %.10g, c = %d, t = %d\n", d1, fpclassify(d1), fpclassify(Double(d1))); + cout << to_string_d(Double(d1).getUnpacked()) << endl; + exit(-1); + } + +#ifndef __APPLE__ + if (!cmpd(ldexp(d1, i1), (double)ldexp(Double(d1), i1))) { + printf("\nldexp d1 = %.18lg, i1 = %d\n", d1, i1); + exit(-1); + } +#endif + + if (!cmpd(frexp(d1, &ic), (double)frexp(Double(d1), &it)) || (!isnan(d1) && !isinf(d1) && ic != it)) { + printf("\nfrexp d1 = %.10g, it = %d, ic = %d\n", d1, it, ic); + printf("c = %.10g, t = %.10g\n", frexp(d1, &ic), (double)frexp(Double(d1), &it)); + exit(-1); + } + + // + +#ifdef ENABLE_QUAD + quad q1t = quad(tlf1.cast((const uquad *)nullptr)); + quad q1c = f1; + + if (!cmpq(q1t, q1c)) { + cout << "cast from float to quad" << endl; + cout << "f1: " << q1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "ct: " << q1t << " : " << to_string_d(uquad(q1t)) << endl; + cout << "cc: " << q1c << " : " << to_string_d(uquad(q1c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + q1t = quad(tld1.cast((const uquad *)nullptr)); + q1c = d1; + + if (!cmpq(q1t, q1c)) { + cout << "cast from double to quad" << endl; + cout << "d1: " << q1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "ct: " << q1t << " : " << to_string_d(uquad(q1t)) << endl; + cout << "cc: " << q1c << " : " << to_string_d(uquad(q1c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (q1 >= 0 && q1 < ldexp(1, 16) && tlq1.castToInt((const uint16_t *)nullptr) != uint16_t(quad(tlq1))) { + cout << "q1 : " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "ust: " << q1t << " : " << tlq1.castToInt((const uint16_t *)nullptr) << endl; + cout << "usc: " << q1c << " : " << uint16_t(quad(tlq1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (q1 >= -ldexp(1, 15) && q1 < ldexp(1, 15) && tlq1.castToInt((const int16_t *)nullptr) != int16_t(quad(tlq1))) { + cout << "q1 : " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "sst: " << q1t << " : " << tlq1.castToInt((const int16_t *)nullptr) << endl; + cout << "ssc: " << q1c << " : " << int16_t(quad(tlq1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (q1 >= 0 && q1 < ldexp(1, 32) && tlq1.castToInt((const uint32_t *)nullptr) != uint32_t(quad(tlq1))) { + cout << "q1 : " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "uit: " << tlq1.castToInt((const uint32_t *)nullptr) << endl; + cout << "uic: " << uint32_t(quad(tlq1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (q1 >= -ldexp(1, 31) && q1 < ldexp(1, 31) && tlq1.castToInt((const int32_t *)nullptr) != int32_t(quad(tlq1))) { + cout << "q1 : " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "sit: " << tlq1.castToInt((const int32_t *)nullptr) << endl; + cout << "sic: " << int32_t(quad(tlq1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (q1 >= 0 && q1 < ldexp(1, 64) && tlq1.castToInt((const uint64_t *)nullptr) != uint64_t(quad(tlq1))) { + cout << "q1 : " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "ult: " << tlq1.castToInt((const uint64_t *)nullptr) << endl; + cout << "ulc: " << uint64_t(quad(tlq1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (q1 >= -ldexp(1, 63) && q1 < ldexp(1, 63) && tlq1.castToInt((const int64_t *)nullptr) != int64_t(quad(tlq1))) { + cout << "q1 : " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "slt: " << tlq1.castToInt((const int64_t *)nullptr) << endl; + cout << "slc: " << int64_t(quad(tlq1)) << endl; + cout << "NG" << endl; + exit(-1); + } + +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + if (q1 >= 0 && q1 < ldexp(1, 128) && tlq1.castToInt((const BigUInt<7> *)nullptr) != UINT128(quad(tlq1))) { + cout << "q1 : " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "u128t: " << tlq1.castToInt((const BigUInt<7> *)nullptr) << endl; + cout << "u128c: " << UINT128(quad(tlq1)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (q1 >= -ldexp(1, 127) && q1 < ldexp(1, 127) && tlq1.castToInt((const BigInt<7> *)nullptr) != INT128(quad(tlq1))) { + cout << "q1 : " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "s128t: " << tlq1.castToInt((const BigInt<7> *)nullptr) << endl; + cout << "s128c: " << INT128(quad(tlq1)) << endl; + cout << "NG" << endl; + exit(-1); + } +#endif + + // + + quad q4t = quad(uquad::faddsub(tlq1, tlq2, false)); + quad q4c = q1 + q2; + + if (!cmpq(d4t, d4c)) { + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1 )) << endl; + cout << "q2: " << q2 << " : " << to_string_d(uquad(q2 )) << endl; + cout << "+t: " << d4t << " : " << to_string_d(uquad(q4t)) << endl; + cout << "+c: " << d4c << " : " << to_string_d(uquad(q4c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + quad q5t = quad(uquad::faddsub(tlq1, tlq2, true)); + quad q5c = q1 - q2; + + if (!cmpq(d5t, d5c)) { + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1 )) << endl; + cout << "q2: " << q2 << " : " << to_string_d(uquad(q2 )) << endl; + cout << "-t: " << d5t << " : " << to_string_d(uquad(q5t)) << endl; + cout << "-c: " << d5c << " : " << to_string_d(uquad(q5c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + quad q6t = quad(uquad::fmul(tlq1, tlq2)); + quad q6c = q1 * q2; + + if (!cmpq(d6t, d6c)) { + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1 )) << endl; + cout << "q2: " << q2 << " : " << to_string_d(uquad(q2 )) << endl; + cout << "*t: " << d6t << " : " << to_string_d(uquad(q6t)) << endl; + cout << "*c: " << d6c << " : " << to_string_d(uquad(q6c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + quad q7t = quad(uquad::fdiv(tlq1, tlq2)); + quad q7c = q1 / q2; + + if (!cmpq(d7t, d7c)) { + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1 )) << endl; + cout << "q2: " << q2 << " : " << to_string_d(uquad(q2 )) << endl; + cout << "/t: " << d7t << " : " << to_string_d(uquad(q7t)) << endl; + cout << "/c: " << d7c << " : " << to_string_d(uquad(q7c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + quad q8t = quad(uquad::fma(tlq1, tlq2, tlq3)); + quad q8c = fmaq(q1, q2, q3); + + if (!cmpq(d8t, d8c)) { + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1 )) << endl; + cout << "q2: " << q2 << " : " << to_string_d(uquad(q2 )) << endl; + cout << "q3: " << q3 << " : " << to_string_d(uquad(q3 )) << endl; + cout << "ft: " << d8t << " : " << to_string_d(uquad(q8t)) << endl; + cout << "fc: " << d8c << " : " << to_string_d(uquad(q8c)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tlq1 == tlq2) != (q1 == q2)) { + cout << "q1 : " << q1 << " : " << to_string_d(uquad(q1 )) << endl; + cout << "q2 : " << q2 << " : " << to_string_d(uquad(q2 )) << endl; + cout << "==t: " << (tlq1 == tlq2) << endl; + cout << "==c: " << (q1 == q2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tlq1 != tlq2) != (q1 != q2)) { + cout << "q1 : " << q1 << " : " << to_string_d(uquad(q1 )) << endl; + cout << "q2 : " << q2 << " : " << to_string_d(uquad(q2 )) << endl; + cout << "!=t: " << (tlq1 != tlq2) << endl; + cout << "!=c: " << (q1 != q2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tlq1 < tlq2) != (q1 < q2)) { + cout << "q1 : " << q1 << " : " << to_string_d(uquad(q1 )) << endl; + cout << "q2 : " << q2 << " : " << to_string_d(uquad(q2 )) << endl; + cout << "< t: " << (tlq1 < tlq2) << endl; + cout << "< c: " << (q1 < q2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tlq1 > tlq2) != (q1 > q2)) { + cout << "q1 : " << q1 << " : " << to_string_d(uquad(q1 )) << endl; + cout << "q2 : " << q2 << " : " << to_string_d(uquad(q2 )) << endl; + cout << "> t: " << (tlq1 > tlq2) << endl; + cout << "> c: " << (q1 > q2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tlq1 <= tlq2) != (q1 <= q2)) { + cout << "q1 : " << q1 << " : " << to_string_d(uquad(q1 )) << endl; + cout << "q2 : " << q2 << " : " << to_string_d(uquad(q2 )) << endl; + cout << "<=t: " << (tlq1 <= tlq2) << endl; + cout << "<=c: " << (q1 <= q2) << endl; + cout << "NG" << endl; + exit(-1); + } + + if ((tlq1 >= tlq2) != (q1 >= q2)) { + cout << "q1 : " << q1 << " : " << to_string_d(uquad(q1 )) << endl; + cout << "q2 : " << q2 << " : " << to_string_d(uquad(q2 )) << endl; + cout << ">=t: " << (tlq1 >= tlq2) << endl; + cout << ">=c: " << (q1 >= q2) << endl; + cout << "NG" << endl; + exit(-1); + } + + static const quad qp1k = (quad)(0x1p+512) * (quad)(0x1p+512), qn1k = (quad)(0x1p-1024); + + if ((i & 3) == 0) { + { + int c = ilogbq(q1), t = ilogb(Quad(q1)); + if (!(t == c) && !(t == TLFLOAT_FP_ILOGB0 && c == FP_ILOGB0) && + !(t == TLFLOAT_FP_ILOGBNAN && c == FP_ILOGBNAN)) { + cout << "ilogb" << endl; + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "c : " << c << endl; + cout << "t : " << t << endl; + cout << "NG" << endl; + exit(-1); + } + } + + if (qn1k * 1e-300 < q1 && q1 < qp1k * 1e+300 && !cmpq((quad)sqrt(Quad(q1)), sqrtq(q1), 1)) { + cout << "sqrtq" << endl; + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "c : " << sqrtq(q1) << " : " << to_string_d(uquad(sqrtq(q1))) << endl; + cout << "t : " << sqrt(Quad(q1)) << " : " << to_string_d(uquad((quad)sqrt(Quad(q1)))) << endl; + cout << "NG" << endl; + exit(-1); + } + + Octuple o1 = Quad(q1); + Octuple o2 = sqrt(o1); + if (!cmpq((quad)(Quad)sqrt(o1), (quad)(Quad)o2)) { + cout << "sqrtq vs sqrto" << endl; + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "c : " << (quad)(Quad)o2 << " : " << to_string_d(Quad(o2).getUnpacked()) << endl; + cout << "t : " << sqrt(Quad(tlq1)) << " : " << to_string_d(sqrt(Quad(tlq1)).getUnpacked()) << endl; + cout << "NG" << endl; + exit(-1); + } + } + + if ((i & 31) == 0 && fabsq(q1) > qn1k * qn1k * qn1k * qn1k && fabsq(q1) < qp1k * qp1k * qp1k * qp1k) { + quad qbt = (quad)Quad(to_string(Quad(tlq1), 36).c_str()); + quad qbc = (quad)tlq1; + + if (!cmpq(qbt, qbc, 7)) { + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "s : " << to_string(Quad(tlq1), 36) << endl; + cout << "ct: " << qbt << " : " << to_string_d(uquad(qbt)) << endl; + cout << "cc: " << qbc << " : " << to_string_d(uquad(qbc)) << endl; + cout << "NG" << endl; + exit(-1); + } + } + + quad qc, qt, qn = q1; + + qc = truncq(qn); + qt = (quad)trunc(Quad(qn).getUnpacked()); + + if (!cmpq(qc, qt)) { + printf("\ntruncq\n"); + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "s : " << to_string(Quad(tlq1), 36) << endl; + cout << "ct: " << qt << " : " << to_string_d(uquad(qt)) << endl; + cout << "cc: " << qc << " : " << to_string_d(uquad(qc)) << endl; + cout << "NG" << endl; + exit(-1); + } + + qc = floorq(qn); + qt = (quad)floor(Quad(qn).getUnpacked()); + + if (!cmpq(qc, qt)) { + printf("\nfloorq\n"); + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "s : " << to_string(Quad(tlq1), 36) << endl; + cout << "ct: " << qt << " : " << to_string_d(uquad(qt)) << endl; + cout << "cc: " << qc << " : " << to_string_d(uquad(qc)) << endl; + cout << "NG" << endl; + exit(-1); + } + + qc = ceilq(qn); + qt = (quad)ceil(Quad(qn).getUnpacked()); + + if (!cmpq(qc, qt)) { + printf("\nceilq\n"); + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "s : " << to_string(Quad(tlq1), 36) << endl; + cout << "ct: " << qt << " : " << to_string_d(uquad(qt)) << endl; + cout << "cc: " << qc << " : " << to_string_d(uquad(qc)) << endl; + cout << "NG" << endl; + exit(-1); + } + + qc = roundq(qn); + qt = (quad)round(Quad(qn).getUnpacked()); + + if (!cmpq(qc, qt)) { + printf("\nroundq\n"); + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "s : " << to_string(Quad(tlq1), 36) << endl; + cout << "ct: " << qt << " : " << to_string_d(uquad(qt)) << endl; + cout << "cc: " << qc << " : " << to_string_d(uquad(qc)) << endl; + cout << "NG" << endl; + exit(-1); + } + + qc = rintq(qn); + qt = (quad)rint(Quad(qn).getUnpacked()); + + if (!cmpq(qc, qt)) { + printf("\nrintq\n"); + cout << "q1: " << q1 << " : " << to_string_d(uquad(q1)) << endl; + cout << "s : " << to_string(Quad(tlq1), 36) << endl; + cout << "ct: " << qt << " : " << to_string_d(uquad(qt)) << endl; + cout << "cc: " << qc << " : " << to_string_d(uquad(qc)) << endl; + cout << "NG" << endl; + exit(-1); + } + + // + + if ((bool)isnanq(q1) != (bool)isnan(Quad(q1))) { + printf("\nisnan q1 = %.10g\n", (double)q1); + exit(-1); + } + + if ((bool)isinfq(q1) != (bool)isinf(Quad(q1))) { + printf("\nisinf q1 = %.10g\n", (double)q1); + exit(-1); + } + + if ((bool)finiteq(q1) != (bool)finite(Quad(q1))) { + printf("\nfinite q1 = %.10g\n", (double)q1); + exit(-1); + } + +#ifdef QUADMATH_H + if (!cmpfpclass(fpclassifyq(q1), fpclassify(Quad(q1)))) { + printf("\nfpclassify q1 = %.10g\n", (double)q1); + exit(-1); + } + + if (!cmpq(ldexpq(q1, i1), (quad)ldexp(Quad(q1), i1))) { + printf("\nldexpq q1 = %.18lg, i1 = %d\n", (double)q1, i1); + exit(-1); + } +#endif +#endif // #ifdef ENABLE_QUAD + + // + + xfloat xf1 = tlf1.cast((const xfloat*)0); + xfloat xf2 = tlf2.cast((const xfloat*)0); + xfloat xf3 = tlf3.cast((const xfloat*)0); + + if (!cmpf((float)xf1.cast((const ufloat*)0), f1)) { + cout << "cast between xfloat and ufloat" << endl; + cout << "f1: " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "t1: " << to_string_d(xf1) << endl; + cout << "t2: " << (float)xf1.cast((const ufloat*)0) << " : " << to_string_d(xf1.cast((const ufloat*)0)) << endl; + cout << "NG" << endl; + exit(-1); + } + + xfloat xf4 = xfloat::faddsub(xf1, xf2, false); + if (!cmpf((float)xf4.cast((const ufloat*)0), f1 + f2, 1)) { + cout << "xfloat add" << endl; + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "f2 : " << f2 << " : " << to_string_d(ufloat(f2)) << endl; + cout << "xf1: " << to_string_d(xf1) << endl; + cout << "xf2: " << to_string_d(xf2) << endl; + cout << "t : " << (float)xf4.cast((const ufloat*)0) << " : " << to_string_d(xf4.cast((const ufloat*)0)) << endl; + cout << "c : " << (f1 + f2) << " : " << to_string_d(ufloat((f1 + f2))) << endl; + cout << "NG" << endl; + exit(-1); + } + + xfloat xf5 = xfloat::faddsub(xf1, xf2, true); + if (!cmpf((float)xf5.cast((const ufloat*)0), f1 - f2, 1)) { + cout << "xfloat sub" << endl; + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "f2 : " << f2 << " : " << to_string_d(ufloat(f2)) << endl; + cout << "xf1: " << to_string_d(xf1) << endl; + cout << "xf2: " << to_string_d(xf2) << endl; + cout << "t : " << (float)xf5.cast((const ufloat*)0) << " : " << to_string_d(xf5.cast((const ufloat*)0)) << endl; + cout << "c : " << (f1 - f2) << " : " << to_string_d(ufloat((f1 - f2))) << endl; + cout << "NG" << endl; + exit(-1); + } + + xfloat xf6 = xfloat::fmul(xf1, xf2); + if (!cmpf((float)xf6.cast((const ufloat*)0), f1 * f2, 1)) { + cout << "xfloat mul" << endl; + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "f2 : " << f2 << " : " << to_string_d(ufloat(f2)) << endl; + cout << "xf1: " << to_string_d(xf1) << endl; + cout << "xf2: " << to_string_d(xf2) << endl; + cout << "t : " << (float)xf6.cast((const ufloat*)0) << " : " << to_string_d(xf6.cast((const ufloat*)0)) << endl; + cout << "c : " << (f1 * f2) << " : " << to_string_d(ufloat((f1 * f2))) << endl; + cout << "NG" << endl; + exit(-1); + } + + xfloat xf7 = xfloat::fdiv(xf1, xf2); + if (!cmpf((float)xf7.cast((const ufloat*)0), f1 / f2, 1)) { + cout << "xfloat div" << endl; + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "f2 : " << f2 << " : " << to_string_d(ufloat(f2)) << endl; + cout << "xf1: " << to_string_d(xf1) << endl; + cout << "xf2: " << to_string_d(xf2) << endl; + cout << "t : " << (float)xf7.cast((const ufloat*)0) << " : " << to_string_d(xf7.cast((const ufloat*)0)) << endl; + cout << "c : " << (f1 / f2) << " : " << to_string_d(ufloat((f1 / f2))) << endl; + cout << "NG" << endl; + exit(-1); + } + + xfloat xf8 = xfloat::fma(xf1, xf2, xf3); + if (!cmpf((float)xf8.cast((const ufloat*)0), fmaf(f1, f2, f3), 1)) { + cout << "xfloat fma" << endl; + cout << "f1 : " << f1 << " : " << to_string_d(ufloat(f1)) << endl; + cout << "f2 : " << f2 << " : " << to_string_d(ufloat(f2)) << endl; + cout << "f3 : " << f3 << " : " << to_string_d(ufloat(f3)) << endl; + cout << "xf1: " << to_string_d(xf1) << endl; + cout << "xf2: " << to_string_d(xf2) << endl; + cout << "xf3: " << to_string_d(xf3) << endl; + cout << "t : " << (float)xf8.cast((const ufloat*)0) << " : " << to_string_d(xf8.cast((const ufloat*)0)) << endl; + cout << "c : " << fmaf(f1, f2, f3) << " : " << to_string_d(ufloat(fma(f1, f2, f3))) << endl; + cout << "NG" << endl; + exit(-1); + } + + xdouble xd1 = tld1.cast((const xdouble*)0); + xdouble xd2 = tld2.cast((const xdouble*)0); + xdouble xd3 = tld3.cast((const xdouble*)0); + + if (!cmpd((double)xd1.cast((const udouble*)0), d1)) { + cout << "cast between xdouble and udouble" << endl; + cout << "d1: " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "t1: " << to_string_d(xd1) << endl; + cout << "t2: " << (double)xd1.cast((const udouble*)0) << " : " << to_string_d(xd1.cast((const udouble*)0)) << endl; + cout << "NG" << endl; + exit(-1); + } + + xdouble xd4 = xdouble::faddsub(xd1, xd2, false); + if (!cmpd((double)xd4.cast((const udouble*)0), d1 + d2, 1)) { + cout << "xdouble add" << endl; + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "d2 : " << d2 << " : " << to_string_d(udouble(d2)) << endl; + cout << "xd1: " << to_string_d(xd1) << endl; + cout << "xd2: " << to_string_d(xd2) << endl; + cout << "t : " << (double)xd4.cast((const udouble*)0) << " : " << to_string_d(xd4.cast((const udouble*)0)) << endl; + cout << "c : " << (d1 + d2) << " : " << to_string_d(udouble((d1 + d2))) << endl; + cout << "NG" << endl; + exit(-1); + } + + xdouble xd5 = xdouble::faddsub(xd1, xd2, true); + if (!cmpd((double)xd5.cast((const udouble*)0), d1 - d2, 1)) { + cout << "xdouble sub" << endl; + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "d2 : " << d2 << " : " << to_string_d(udouble(d2)) << endl; + cout << "xd1: " << to_string_d(xd1) << endl; + cout << "xd2: " << to_string_d(xd2) << endl; + cout << "t : " << (double)xd5.cast((const udouble*)0) << " : " << to_string_d(xd5.cast((const udouble*)0)) << endl; + cout << "c : " << (d1 - d2) << " : " << to_string_d(udouble((d1 - d2))) << endl; + cout << "NG" << endl; + exit(-1); + } + + xdouble xd6 = xdouble::fmul(xd1, xd2); + if (!cmpd((double)xd6.cast((const udouble*)0), d1 * d2, 1)) { + cout << "xdouble mul" << endl; + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "d2 : " << d2 << " : " << to_string_d(udouble(d2)) << endl; + cout << "xd1: " << to_string_d(xd1) << endl; + cout << "xd2: " << to_string_d(xd2) << endl; + cout << "t : " << (double)xd6.cast((const udouble*)0) << " : " << to_string_d(xd6.cast((const udouble*)0)) << endl; + cout << "c : " << (d1 * d2) << " : " << to_string_d(udouble((d1 * d2))) << endl; + cout << "NG" << endl; + exit(-1); + } + + xdouble xd7 = xdouble::fdiv(xd1, xd2); + if (!cmpd((double)xd7.cast((const udouble*)0), d1 / d2, 1)) { + cout << "xdouble div" << endl; + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "d2 : " << d2 << " : " << to_string_d(udouble(d2)) << endl; + cout << "xd1: " << to_string_d(xd1) << endl; + cout << "xd2: " << to_string_d(xd2) << endl; + cout << "t : " << (double)xd7.cast((const udouble*)0) << " : " << to_string_d(xd7.cast((const udouble*)0)) << endl; + cout << "c : " << (d1 / d2) << " : " << to_string_d(udouble((d1 / d2))) << endl; + cout << "NG" << endl; + exit(-1); + } + + xdouble xd8 = xdouble::fma(xd1, xd2, xd3); + if (!cmpd((double)xd8.cast((const udouble*)0), fma(d1, d2, d3), 1)) { + cout << "xdouble fma" << endl; + cout << "d1 : " << d1 << " : " << to_string_d(udouble(d1)) << endl; + cout << "d2 : " << d2 << " : " << to_string_d(udouble(d2)) << endl; + cout << "d3 : " << d3 << " : " << to_string_d(udouble(d3)) << endl; + cout << "xd1: " << to_string_d(xd1) << endl; + cout << "xd2: " << to_string_d(xd2) << endl; + cout << "xd3: " << to_string_d(xd3) << endl; + cout << "t : " << (double)xd8.cast((const udouble*)0) << " : " << to_string_d(xd8.cast((const udouble*)0)) << endl; + cout << "c : " << fma(d1, d2, d3) << " : " << to_string_d(udouble(fma(d1, d2, d3))) << endl; + cout << "NG" << endl; + exit(-1); + } + + // + + { + int16_t i16; + rng->nextBytes((unsigned char *)&i16, sizeof(i16)); + + ufloat uf = ufloat::castFromInt(i16); + if (!cmpf(float(uf), float(i16))) { + cout << "float i16 " << i16 << endl; + } + + udouble ud = udouble::castFromInt(i16); + if (!cmpd(double(ud), double(i16))) { + cout << "double i16 " << i16 << endl; + } + +#ifdef ENABLE_QUAD + uquad uq = uquad::castFromInt(i16); + if (!cmpd(quad(uq), quad(i16))) { + cout << "quad i16 " << i16 << endl; + } +#endif + } + + { + uint16_t u16; + rng->nextBytes((unsigned char *)&u16, sizeof(u16)); + + ufloat uf = ufloat::castFromInt(u16); + if (!cmpf(float(uf), float(u16))) { + cout << "float u16 " << u16 << endl; + } + + udouble ud = udouble::castFromInt(u16); + if (!cmpd(double(ud), double(u16))) { + cout << "double u16 " << u16 << endl; + } + +#ifdef ENABLE_QUAD + uquad uq = uquad::castFromInt(u16); + if (!cmpd(quad(uq), quad(u16))) { + cout << "quad u16 " << u16 << endl; + } +#endif + } + + { + int32_t i32; + rng->nextBytes((unsigned char *)&i32, sizeof(i32)); + + ufloat uf = ufloat::castFromInt(i32); + if (!cmpf(float(uf), float(i32))) { + cout << "float i32 " << i32 << endl; + } + + udouble ud = udouble::castFromInt(i32); + if (!cmpd(double(ud), double(i32))) { + cout << "double i32 " << i32 << endl; + } + +#ifdef ENABLE_QUAD + uquad uq = uquad::castFromInt(i32); + if (!cmpd(quad(uq), quad(i32))) { + cout << "quad i32 " << i32 << endl; + } +#endif + } + + { + uint32_t u32; + rng->nextBytes((unsigned char *)&u32, sizeof(u32)); + + ufloat uf = ufloat::castFromInt(u32); + if (!cmpf(float(uf), float(u32))) { + cout << "float u32 " << u32 << endl; + } + + udouble ud = udouble::castFromInt(u32); + if (!cmpd(double(ud), double(u32))) { + cout << "double u32 " << u32 << endl; + } + +#ifdef ENABLE_QUAD + uquad uq = uquad::castFromInt(u32); + if (!cmpd(quad(uq), quad(u32))) { + cout << "quad u32 " << u32 << endl; + } +#endif + } + + { + int64_t i64; + rng->nextBytes((unsigned char *)&i64, sizeof(i64)); + + ufloat uf = ufloat::castFromInt(i64); + if (!cmpf(float(uf), float(i64))) { + cout << "float i64 " << i64 << endl; + } + + udouble ud = udouble::castFromInt(i64); + if (!cmpd(double(ud), double(i64))) { + cout << "double i64 " << i64 << endl; + } + +#ifdef ENABLE_QUAD + uquad uq = uquad::castFromInt(i64); + if (!cmpd(quad(uq), quad(i64))) { + cout << "quad i64 " << i64 << endl; + } +#endif + } + + { + uint64_t u64; + rng->nextBytes((unsigned char *)&u64, sizeof(u64)); + + ufloat uf = ufloat::castFromInt(u64); + if (!cmpf(float(uf), float(u64))) { + cout << "float u64 " << u64 << endl; + } + + udouble ud = udouble::castFromInt(u64); + if (!cmpd(double(ud), double(u64))) { + cout << "double u64 " << u64 << endl; + } + +#ifdef ENABLE_QUAD + uquad uq = uquad::castFromInt(u64); + if (!cmpd(quad(uq), quad(u64))) { + cout << "quad u64 " << u64 << endl; + } +#endif + } + +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + { + INT128 i128; + rng->nextBytes((unsigned char *)&i128, sizeof(i128)); + + ufloat uf = ufloat::castFromInt(i128); + if (!cmpf(float(uf), float(i128))) { + cout << "float i128 " << i128 << endl; + } + + udouble ud = udouble::castFromInt(i128); + if (!cmpd(double(ud), double(i128))) { + cout << "double i128 " << i128 << endl; + } + +#ifdef ENABLE_QUAD + uquad uq = uquad::castFromInt(i128); + if (!cmpd(quad(uq), quad(i128))) { + cout << "quad i128 " << i128 << endl; + } +#endif + } + + { + UINT128 u128; + rng->nextBytes((unsigned char *)&u128, sizeof(u128)); + + ufloat uf = ufloat::castFromInt(u128); + if (!cmpf(float(uf), float(u128))) { + cout << "float u128 " << u128 << endl; + } + + udouble ud = udouble::castFromInt(u128); + if (!cmpd(double(ud), double(u128))) { + cout << "double u128 " << u128 << endl; + } + +#ifdef ENABLE_QUAD + uquad uq = uquad::castFromInt(u128); + if (!cmpd(quad(uq), quad(u128))) { + cout << "quad u128 " << u128 << endl; + } +#endif + } +#endif // #ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + } + + for(uint64_t i=0;niter == 0 || inextLT(65536) - 32768, i2 = (int)rng->nextLT(65536) - 32768; + + // + + check("(double)Double(Octuple(d1))", (double)Double(Octuple(d1)), d1); + check("(double)(Double)Octuple(i1)", (double)(Double)Octuple(i1), (double)i1); + + check("o1 + o2", o1 + o2, d1 + d2); + check("d1 + o2", d1 + o2, d1 + d2); + check("f1 + o2", f1 + o2, d1 + d2); + check("o1 + f2", o1 + f2, d1 + d2); + check("i1 + o2", i1 + o2, i1 + d2); + check("o1 + i2", o1 + i2, d1 + i2); + o0 = o1; o0 += o2; check("o0 = o1; o0 += o2;", o0, d1 + d2); + o0 = o1; o0 += q2; check("o0 = o1; o0 += q2;", o0, d1 + d2); + o0 = o1; o0 += d2; check("o0 = o1; o0 += d2;", o0, d1 + d2); + o0 = o1; o0 += i2; check("o0 = o1; o0 += i2;", o0, d1 + i2); + + o0 = o1; d0 = d1; check("o0 = o1; o0 ++;", o0++, d0++); check("o0 = o1; o0 ++; (2)", o0, d0); + o0 = o1; d0 = d1; check("o0 = o1; ++ o0;", ++o0, ++d0); check("o0 = o1; ++ o0; (2)", o0, d0); + + check("o1 - o2", o1 - o2, d1 - d2); + check("d1 - o2", d1 - o2, d1 - d2); + check("f1 - o2", f1 - o2, d1 - d2); + check("o1 - f2", o1 - f2, d1 - d2); + check("i1 - o2", i1 - o2, i1 - d2); + check("o1 - i2", o1 - i2, d1 - i2); + o0 = o1; o0 -= o2; check("o0 = o1; o0 -= o2;", o0, d1 - d2); + o0 = o1; o0 -= q2; check("o0 = o1; o0 -= q2;", o0, d1 - d2); + o0 = o1; o0 -= d2; check("o0 = o1; o0 -= d2;", o0, d1 - d2); + o0 = o1; o0 -= i2; check("o0 = o1; o0 -= i2;", o0, d1 - i2); + + o0 = o1; d0 = d1; check("o0 = o1; o0 --;", o0--, d0--); check("o0 = o1; o0 --; (2)", o0, d0); + o0 = o1; d0 = d1; check("o0 = o1; -- o0;", --o0, --d0); check("o0 = o1; -- o0; (2)", o0, d0); + + check("o1 * o2", o1 * o2, d1 * d2); + check("d1 * o2", d1 * o2, d1 * d2); + check("f1 * o2", f1 * o2, d1 * d2); + check("o1 * f2", o1 * f2, d1 * d2); + check("i1 * o2", i1 * o2, i1 * d2); + check("o1 * i2", o1 * i2, d1 * i2); + o0 = o1; o0 *= o2; check("o0 = o1; o0 *= o2;", o0, d1 * d2); + o0 = o1; o0 *= q2; check("o0 = o1; o0 *= q2;", o0, d1 * d2); + o0 = o1; o0 *= d2; check("o0 = o1; o0 *= d2;", o0, d1 * d2); + o0 = o1; o0 *= i2; check("o0 = o1; o0 *= i2;", o0, d1 * i2); + + check("o1 / o2", o1 / o2, d1 / d2); + check("d1 / o2", d1 / o2, d1 / d2); + check("f1 / o2", f1 / o2, d1 / d2); + check("o1 / f2", o1 / f2, d1 / d2); + check("i1 / o2", i1 / o2, i1 / d2); + check("o1 / i2", o1 / i2, d1 / i2); + o0 = o1; o0 /= o2; check("o0 = o1; o0 /= o2;", o0, d1 / d2); + o0 = o1; o0 /= q2; check("o0 = o1; o0 /= q2;", o0, d1 / d2); + o0 = o1; o0 /= d2; check("o0 = o1; o0 /= d2;", o0, d1 / d2); + o0 = o1; o0 /= i2; check("o0 = o1; o0 /= i2;", o0, d1 / i2); + } + + cout << "OK" << endl; + exit(0); +} diff --git a/validation/extern/tlfloat/src/tester/test_bigint2.cpp b/validation/extern/tlfloat/src/tester/test_bigint2.cpp new file mode 100644 index 0000000..a5f1a28 --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_bigint2.cpp @@ -0,0 +1,229 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include + +#include "suppress.hpp" + +#include "tlfloat/bigint.hpp" +#include "testerutil.hpp" + +#define M 9 + +using namespace std; +using namespace tlfloat; + +template +xpair, BigUInt> xdivmod2(BigUInt n, BigUInt d) { + BigUInt xn = BigUInt(n) << ((1 << N) - 1); + BigUInt xd = d | (BigUInt(1) << ((1 << N)-1)); + return xpair, BigUInt>(BigUInt(xn / xd), BigUInt(xn % xd)); +} + +template +BigUInt xreciprocal2(BigUInt d_) { + BigUInt d = d_ | (BigUInt(1) << ((1 << N)-1)); + BigUInt u = (~BigUInt(0)) / d; + return (BigUInt)u; +} + +template +void doTestRec2(BigUInt d) { + auto tr = d.reciprocal2(); + auto cr = xreciprocal2(d); + if (tr != (cr-1) && tr != cr && tr != (cr+1) && tr != (cr+2)) { + cout << "N = " << N << endl; + cout << "d = " << toHexString(d) << endl; + cout << "c r2 = " << toHexString(cr) << endl; + cout << "t r2 = " << toHexString(tr) << endl; + exit(-1); + } +} + +template +void doTestDivmod2(BigUInt n, BigUInt d) { + auto c = xdivmod2(n, d); + + auto t = n.divmod2(d, d.reciprocal2()); + if (c.first != t.first || c.second != t.second) { + cout << "N = " << N << endl; + cout << "n = " << toHexString(n) << " " << n << endl; + cout << "d = " << toHexString(d) << " " << d << endl; + cout << "d.r2 = " << toHexString(d.reciprocal2()) << endl; + cout << "t.q = " << toHexString(t.first ) << endl; + cout << "c.q = " << toHexString(c.first ) << endl; + cout << "t.r = " << toHexString(t.second) << endl; + cout << "c.r = " << toHexString(c.second) << endl; + exit(-1); + } + + t = n.divmod2(d); + if (c.first != t.first || c.second != t.second) { + cout << "N = " << N << endl; + cout << "n = " << toHexString(n) << " " << n << endl; + cout << "d = " << toHexString(d) << " " << d << endl; + cout << "t.q = " << toHexString(t.first ) << endl; + cout << "c.q = " << toHexString(c.first ) << endl; + cout << "t.r = " << toHexString(t.second) << endl; + cout << "c.r = " << toHexString(c.second) << endl; + exit(-1); + } + + if (d != 0) { + t = n.divmod(d); + if (t.second >= d || t.first * d + t.second != n) { + cout << "N = " << N << endl; + cout << "n = " << toHexString(n) << " " << n << endl; + cout << "d = " << toHexString(d) << " " << d << endl; + cout << "t.q = " << toHexString(t.first ) << endl; + cout << "t.r = " << toHexString(t.second) << endl; + exit(-1); + } + + t = n.divmod(d, d.reciprocal()); + if (t.second >= d || t.first * d + t.second != n) { + cout << "N = " << N << endl; + cout << "n = " << toHexString(n) << " " << n << endl; + cout << "d = " << toHexString(d) << " " << d << endl; + cout << "d.r = " << toHexString(d.reciprocal()) << endl; + cout << "t.q = " << toHexString(t.first ) << endl; + cout << "t.r = " << toHexString(t.second) << endl; + exit(-1); + } + } +} + +template +void testLoop() { + cout << "<" << N << ">"; + fflush(stdout); + + for(int i=0;i<(1 << N);i++) { + BigUInt d = BigUInt(1) << i; + doTestRec2(d-1); + doTestRec2(d ); + doTestRec2(d+1); + + for(int j=0;j<(1 << N);j++) { + BigUInt n = BigUInt(1) << j; + doTestDivmod2(n-1, d-1); + doTestDivmod2(n-1, d); + doTestDivmod2(n-1, d+1); + doTestDivmod2(n, d-1); + doTestDivmod2(n, d); + doTestDivmod2(n, d+1); + doTestDivmod2(n+1, d-1); + doTestDivmod2(n+1, d); + doTestDivmod2(n+1, d+1); + } + } +} + +bool checkRNG(shared_ptr rng, int n, int nloop, int thres) { + vector bin(n); + + cout << "[" << n << "]"; + fflush(stdout); + + for(int i=0;inextLT(n)]++; + + for(int i=0;i(uint64_t(n), rng))]++; + + for(int i=0;i n49 = BigUInt(unsigned(n)).pow(49); + BigUInt n50 = n49 * n, recn49 = n49.reciprocal(); + + for(int i=0;i(n50, rng).divmod(n49, recn49, NULL))]++; + } + + for(int i=0;i(); + testLoop<8>(); + testLoop<9>(); + + shared_ptr rng = createPreferredRNG(); + + if (ntest != 1) { + if (argc == 1) { + for(int i=3;i<=23;i+=2) { + if (!checkRNG(rng, i, 10000, (10000/i) * 80 / 100) && + !checkRNG(rng, i, 10000, (10000/i) * 80 / 100)) { + cout << "NG" << endl; + exit(-1); + } + } + ntest = 10; + } else { + for(int i=3;i<=23;i+=2) checkRNG(rng, i, 1000000, (1000000/i) * 98 / 100); + } + } + + for(int i=0;i m = CryptUtil::genPrime(BigUInt(1) << n, rng); + BigUInt a = CryptUtil::genRand(BigUInt(1) << n, rng); + BigUInt ainv = (BigUInt)BigUInt(a).pow(m-2, m); + BigUInt::Montgomery mg(m); + if (mg.reduce(mg.pow(mg.transform(a), m-2)) != ainv) { + cout << "Montgomery" << endl; + cout << "m = " << m << endl; + cout << "a = " << a << endl; + cout << "c ainv = " << ainv << endl; + cout << "t ainv = " << mg.reduce(mg.pow(mg.transform(a), m-2)) << endl; + cout << "NG" << endl; + exit(-1); + } + + if (ntest == 1) { + cout << "m = " << m << endl; + cout << "a = " << a << endl; + cout << "ainv = " << ainv << endl; + cout << "(a * ainv) mod m = " << (a * ainv) % m << endl; + } + if (a.gcd(m) != 1 || (a * ainv) % m != 1) { + cout << "NG" << endl; + exit(-1); + } + } + + if (ntest != 1) cout << endl << "OK" << endl; + + return 0; +} diff --git a/validation/extern/tlfloat/src/tester/test_bigint3.cpp b/validation/extern/tlfloat/src/tester/test_bigint3.cpp new file mode 100644 index 0000000..b88bef6 --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_bigint3.cpp @@ -0,0 +1,333 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#include "suppress.hpp" + +#include "tlfloat/bigint.hpp" +#include "testerutil.hpp" + +using namespace std; +using namespace tlfloat; + +bool success = true; + +void e(const char *mes) { + cerr << mes << endl; + success = false; +} + +void checks(uint64_t high0, uint64_t low0, uint64_t high1, uint64_t low1, double d) { +#if 0 + printf("checks 0x%016llx%016llx 0x%016llx%016llx %.16g\n", + (unsigned long long)high0, (unsigned long long)low0, + (unsigned long long)high1, (unsigned long long)low1, d); +#endif + + converter128 cnv0(high0, low0); + BigInt<7> i0 = cnv0.bi; + __int128_t b0 = cnv0.i128; + + converter128 cnv1(high1, low1); + BigInt<7> i1 = cnv1.bi; + __int128_t b1 = cnv1.i128; + + if (double(i0) != double(b0)) { + cerr << i0 << endl; + e("checks : operator double"); + } + if (double(i1) != double(b1)) { + cerr << i1 << endl; + e("checks : operator double"); + } + if ((high0 != 0 || low0 != 0) && + fabs((double((BigUInt<7>)i0) - (ldexp(double(high0), 64) + double(low0))) / (ldexp(double(high0), 64) + double(low0))) > 1e-14) { + cerr << "i0 = " << i0 << ", hl = " << (ldexp(double(high0), 64) + double(low0)) << endl; + e("checku : operator double 2s"); + } + if (!equal(__int128_t(d), BigInt<7>(d))) { + fprintf(stderr, "%.20g\n", d); + e("checks : cast from double"); + } + + if (BigInt<7>(to_string(i0).c_str()) != i0) e("to/from string"); + + if ((i0 == i1) != (b0 == b1)) e("=="); + if ((i1 == i0) != (b1 == b0)) e("=="); + if ((i0 == i0) != (b0 == b0)) e("=="); + if ((i1 == i1) != (b1 == b1)) e("=="); + + if (!equal(i0++, b0++) || !equal(i1++, b1++)) e("++ suffix"); + if (!equal(++i0, ++b0) || !equal(++i1, ++b1)) e("++ prefix"); + + if (!equal(i0--, b0--) || !equal(i1--, b1--)) e("-- suffix"); + if (!equal(--i0, --b0) || !equal(--i1, --b1)) e("-- prefix"); + + if (!equal(-i0, -b0) || !equal(-i1, -b1)) e("- unary"); + if (!equal(+i0, +b0) || !equal(+i1, +b1)) e("+ unary"); + + if ((long long)(i0) != (long long)(b0)) e("(long long)"); + if (long(i0) != long(b0)) e("(long)"); + if (int(i0) != int(b0)) e("(int)"); + if (short(i0) != short(b0)) e("(short)"); + if (char(i0) != char(b0)) e("(short)"); + + if ((unsigned long long)(i0) != (unsigned long long)(b0)) e("(unsigned long long)"); + if ((unsigned long)(i0) != (unsigned long)(b0)) e("(unsigned long)"); + if ((unsigned int)(i0) != (unsigned int)(b0)) e("(unsigned int)"); + if ((unsigned short)(i0) != (unsigned short)(b0)) e("(unsigned short)"); + if ((unsigned char)(i0) != (unsigned char)(b0)) e("(unsigned char)"); + if ((bool)(i0) != (bool)(b0)) e("(bool)"); + + if (!equal(BigInt<7>((long long)(i0)), __int128_t((long long)(b0)))) e("(long long)2"); + if (!equal(BigInt<7>((long)(i0)), __int128_t((long)(b0)))) e("(long)2"); + if (!equal(BigInt<7>((int)(i0)), __int128_t((int)(b0)))) e("(int)2"); + if (!equal(BigInt<7>((short)(i0)), __int128_t((short)(b0)))) e("(short)2"); + if (!equal(BigInt<7>((char)(i0)), __int128_t((char)(b0)))) e("(char)2"); + + if (!equal(BigInt<7>((unsigned long long)(i0)), __int128_t((unsigned long long)(b0)))) e("(unsigned long long)2"); + if (!equal(BigInt<7>((unsigned long)(i0)), __int128_t((unsigned long)(b0)))) e("(unsigned long)2"); + if (!equal(BigInt<7>((unsigned)(i0)), __int128_t((unsigned)(b0)))) e("(unsigned)2"); + if (!equal(BigInt<7>((unsigned short)(i0)), __int128_t((unsigned short)(b0)))) e("(unsigned short)2"); + if (!equal(BigInt<7>((unsigned char)(i0)), __int128_t((unsigned char)(b0)))) e("(unsigned char)2"); + if (!equal(BigInt<7>((bool)(i0)), __int128_t((bool)(b0)))) e("(bool)2"); + + if ((i0 < i1) != (b0 < b1)) e("<"); + if ((i1 < i0) != (b1 < b0)) e("<"); + if ((i0 < i0) != (b0 < b0)) e("<"); + if ((i1 < i1) != (b1 < b1)) e("<"); + + if (!equal(i0 + i1, b0 + b1)) e("+"); + if (!equal(i1 + i0, b1 + b0)) e("+"); + + if (!equal(i0 - i1, b0 - b1)) e("-"); + if (!equal(i1 - i0, b1 - b0)) e("-"); + + if (!equal(i0 * i1, b0 * b1)) e("*"); + if (!equal(i1 * i0, b1 * b0)) e("*"); + + if (!equal(i0 / i1, b0 / b1)) e("/"); + if (!equal(i1 / i0, b1 / b0)) e("/"); + + if (!equal(i0 % i1, b0 % b1)) e("%"); + if (!equal(i1 % i0, b1 % b0)) e("%"); + + if (!equal(i0 << 3, b0 << 3)) e("<<"); + if (!equal((i0 <<= 3), (b0 <<= 3))) e("<<="); + + if (!equal(i0 >> 3, b0 >> 3)) e(">>"); + if (!equal((i0 >>= 3), (b0 >>= 3))) e(">>="); + + if (!equal(i0 += 3, b0 += 3)) e("+="); + if (!equal(i0 -= 3, b0 -= 3)) e("-="); + if (!equal(i0 *= 3, b0 *= 3)) e("*="); + if (!equal(i0 /= 3, b0 /= 3)) e("/="); + + if (!equal(i1 += i0, b1 += b0)) e("+="); + if (!equal(i1 -= i0, b1 -= b0)) e("-="); + if (!equal(i1 *= i0, b1 *= b0)) e("*="); + //if (!equal(i1 /= i0, b1 /= b0)) e("/="); + + { + stringstream ssc, sst; + ssc << (int64_t)low0 << endl; + sst << BigInt<7>((int64_t)low0) << endl; + if (ssc.str() != sst.str()) { cout << "NG 0s c = <" << ssc.str() << ">, t = <" << sst.str() << ">" << endl; exit(-1); } + } + + { + stringstream ssc, sst; + ssc << setw(20) << (int64_t)low0 << endl; + sst << setw(20) << BigInt<7>((int64_t)low0) << endl; + if (ssc.str() != sst.str()) { cout << "NG 1s c = <" << ssc.str() << ">, t = <" << sst.str() << ">" << endl; exit(-1); } + } + + { + stringstream ssc, sst; + ssc << setw(20) << right << (int64_t)low0 << endl; + sst << setw(20) << right << BigInt<7>((int64_t)low0) << endl; + if (ssc.str() != sst.str()) { cout << "NG 2s c = <" << ssc.str() << ">, t = <" << sst.str() << ">" << endl; exit(-1); } + } +} + +void checku(uint64_t high0, uint64_t low0, uint64_t high1, uint64_t low1, double d) { +#if 0 + printf("checku 0x%016llx%016llx 0x%016llx%016llx %.16g\n", + (unsigned long long)high0, (unsigned long long)low0, + (unsigned long long)high1, (unsigned long long)low1, d); +#endif + + converter128 cnv0(high0, low0); + BigUInt<7> i0 = cnv0.bi; + __uint128_t b0 = cnv0.u128; + + converter128 cnv1(high1, low1); + BigUInt<7> i1 = cnv1.bi; + __uint128_t b1 = cnv1.u128; + + if (double(i0) != double(b0)) { + cerr << i0 << endl; + e("checku : operator double 1u"); + } + if (double(i1) != double(b1)) { + cerr << i1 << endl; + e("checku : operator double 1u"); + } + if ((high0 != 0 || low0 != 0) && + fabs((double(i0) - (ldexp(double(high0), 64) + double(low0))) / (ldexp(double(high0), 64) + double(low0))) > 1e-14) { + cerr << "i0 = " << i0 << ", hl = " << (ldexp(double(high0), 64) + double(low0)) << endl; + e("checku : operator double 2u"); + } + if (!equal(__uint128_t(d), BigUInt<7>(d))) { + fprintf(stderr, "%.20g\n", d); + e("checku : cast from double"); + } + + // + + if (BigUInt<7>(to_string(i0).c_str()) != i0) e("to/from string unsigned"); + + if ((i0 == i1) != (b0 == b1)) e("=="); + if ((i1 == i0) != (b1 == b0)) e("=="); + if ((i0 == i0) != (b0 == b0)) e("=="); + if ((i1 == i1) != (b1 == b1)) e("=="); + + if (!equal(i0++, b0++) || !equal(i1++, b1++)) e("++ suffix"); + if (!equal(++i0, ++b0) || !equal(++i1, ++b1)) e("++ prefix"); + + if (!equal(i0--, b0--) || !equal(i1--, b1--)) e("-- suffix"); + if (!equal(--i0, --b0) || !equal(--i1, --b1)) e("-- prefix"); + + if (!equal(-i0, -b0) || !equal(-i1, -b1)) e("- unary"); + if (!equal(+i0, +b0) || !equal(+i1, +b1)) e("+ unary"); + + if ((long long)(i0) != (long long)(b0)) e("(long long)"); + if (long(i0) != long(b0)) e("(long)"); + if (int(i0) != int(b0)) e("(int)"); + if (short(i0) != short(b0)) e("(short)"); + if (char(i0) != char(b0)) e("(short)"); + + if ((unsigned long long)(i0) != (unsigned long long)(b0)) e("(unsigned long long)"); + if ((unsigned long)(i0) != (unsigned long)(b0)) e("(unsigned long)"); + if ((unsigned int)(i0) != (unsigned int)(b0)) e("(unsigned int)"); + if ((unsigned short)(i0) != (unsigned short)(b0)) e("(unsigned short)"); + if ((unsigned char)(i0) != (unsigned char)(b0)) e("(unsigned char)"); + if ((bool)(i0) != (bool)(b0)) e("(bool)"); + + if (!equal(BigUInt<7>((long long)(i0)), __int128_t((long long)(b0)))) e("(long long)3"); + if (!equal(BigUInt<7>((long)(i0)), __int128_t((long)(b0)))) e("(long)3"); + if (!equal(BigUInt<7>((int)(i0)), __int128_t((int)(b0)))) e("(int)3"); + if (!equal(BigUInt<7>((short)(i0)), __int128_t((short)(b0)))) e("(short)3"); + if (!equal(BigUInt<7>((char)(i0)), __int128_t((char)(b0)))) e("(char)3"); + + if (!equal(BigUInt<7>((unsigned long long)(i0)), __int128_t((unsigned long long)(b0)))) e("(unsigned long long)4"); + if (!equal(BigUInt<7>((unsigned long)(i0)), __int128_t((unsigned long)(b0)))) e("(unsigned long)4"); + if (!equal(BigUInt<7>((unsigned)(i0)), __int128_t((unsigned)(b0)))) e("(unsigned)4"); + if (!equal(BigUInt<7>((unsigned short)(i0)), __int128_t((unsigned short)(b0)))) e("(unsigned short)4"); + if (!equal(BigUInt<7>((unsigned char)(i0)), __int128_t((unsigned char)(b0)))) e("(unsigned char)4"); + if (!equal(BigUInt<7>((bool)(i0)), __int128_t((bool)(b0)))) e("(bool)4"); + + if ((i0 < i1) != (b0 < b1)) e("<"); + if ((i1 < i0) != (b1 < b0)) e("<"); + if ((i0 < i0) != (b0 < b0)) e("<"); + if ((i1 < i1) != (b1 < b1)) e("<"); + + if (!equal(i0 + i1, b0 + b1)) e("+"); + if (!equal(i1 + i0, b1 + b0)) e("+"); + + if (!equal(i0 - i1, b0 - b1)) e("-"); + if (!equal(i1 - i0, b1 - b0)) e("-"); + + if (!equal(i0 * i1, b0 * b1)) e("*"); + if (!equal(i1 * i0, b1 * b0)) e("*"); + + if (!equal(i0 / i1, b0 / b1)) e("/"); + if (!equal(i1 / i0, b1 / b0)) e("/"); + + if (!equal(i0 % i1, b0 % b1)) e("%"); + if (!equal(i1 % i0, b1 % b0)) e("%"); + + if (!equal(i0 << 3, b0 << 3)) e("<<"); + if (!equal((i0 <<= 3), (b0 <<= 3))) e("<<="); + + if (!equal(i0 >> 3, b0 >> 3)) e(">>"); + if (!equal((i0 >>= 3), (b0 >>= 3))) e(">>="); + + if (!equal(i0 += 3, b0 += 3)) e("+="); + if (!equal(i0 -= 3, b0 -= 3)) e("-="); + if (!equal(i0 *= 3, b0 *= 3)) e("*="); + if (!equal(i0 /= 3, b0 /= 3)) e("/="); + + if (!equal(i1 += i0, b1 += b0)) e("+="); + if (!equal(i1 -= i0, b1 -= b0)) e("-="); + if (!equal(i1 *= i0, b1 *= b0)) e("*="); + if (!equal(i1 /= i0, b1 /= b0)) e("/="); + + // + + { + stringstream ssc, sst; + ssc << (uint64_t)low0 << endl; + sst << BigUInt<7>((uint64_t)low0) << endl; + if (ssc.str() != sst.str()) { cout << "NG 0u c = <" << ssc.str() << ">, t = <" << sst.str() << ">" << endl; exit(-1); } + } + + { + stringstream ssc, sst; + ssc << setw(20) << (uint64_t)low0 << endl; + sst << setw(20) << BigUInt<7>((uint64_t)low0) << endl; + if (ssc.str() != sst.str()) { cout << "NG 1u c = <" << ssc.str() << ">, t = <" << sst.str() << ">" << endl; exit(-1); } + } + + { + stringstream ssc, sst; + ssc << setw(20) << hex << (uint64_t)low0 << endl; + sst << setw(20) << hex << BigUInt<7>((uint64_t)low0) << endl; + if (ssc.str() != sst.str()) { cout << "NG 2u c = <" << ssc.str() << ">, t = <" << sst.str() << ">" << endl; exit(-1); } + } + + { + stringstream ssc, sst; + ssc << setw(20) << oct << (uint64_t)low0 << endl; + sst << setw(20) << oct << BigUInt<7>((uint64_t)low0) << endl; + if (ssc.str() != sst.str()) { cout << "NG 3u c = <" << ssc.str() << ">, t = <" << sst.str() << ">" << endl; exit(-1); } + } + + { + stringstream ssc, sst; + ssc << setw(20) << right << (uint64_t)low0 << endl; + sst << setw(20) << right << BigUInt<7>((uint64_t)low0) << endl; + if (ssc.str() != sst.str()) { cout << "NG 4u c = <" << ssc.str() << ">, t = <" << sst.str() << ">" << endl; exit(-1); } + } +} + +int main(int argc, char **argv) { + int n = 10000; + + if (argc != 1) n = atoi(argv[1]); + + shared_ptr rng = createPreferredRNG(); + + for(int i=0;inextDouble(), rng->nextLT(256)-128); + checku(rng->next64(), rng->next64(), rng->next64(), rng->next64(), d0); + + d0 = rng->nextBool() ? -d0 : d0; + checks(rng->next64(), rng->next64(), rng->next64(), rng->next64(), d0); + } + + if (!success) { + cout << "NG" << endl; + return -1; + } + + cout << "OK" << endl; + + return 0; +} diff --git a/validation/extern/tlfloat/src/tester/test_bigint4.cpp b/validation/extern/tlfloat/src/tester/test_bigint4.cpp new file mode 100644 index 0000000..a24354e --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_bigint4.cpp @@ -0,0 +1,327 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "suppress.hpp" + +#include "tlfloat/bigint.hpp" +#include "tlfloat/tlfloat.h" + +#include "testerutil.hpp" + +using namespace std; +using namespace tlfloat; + +bool equal(BigInt<7> i0, tlfloat_uint128_t b0) { return equal((tlfloat_int128_t)b0, i0); } +bool equal(BigUInt<7> u0, tlfloat_int128_t b0) { return equal((tlfloat_uint128_t)b0, u0); } + +bool success = true; + +void e(const char *mes) { + cerr << mes << endl << endl; + success = false; +} + +void checks(uint64_t high0, uint64_t low0, uint64_t high1, uint64_t low1, double d) { +#if 0 + printf("checks 0x%016llx%016llx 0x%016llx%016llx %.16g\n", + (unsigned long long)high0, (unsigned long long)low0, + (unsigned long long)high1, (unsigned long long)low1, d); +#endif + + converter128 cnv0(high0, low0); + BigInt<7> i0 = cnv0.bi; + tlfloat_int128_t b0 = cnv0.ti128; + + converter128 cnv1(high1, low1); + BigInt<7> i1 = cnv1.bi; + tlfloat_int128_t b1 = cnv1.ti128; + + if (!equal(i0, b0)) e("checks : cast with union"); + if (!equal((BigInt<7>)b0, b0)) e("checks : cast BigInt<7> <- tlfloat_int128_t"); + if (!equal(i0, (tlfloat_int128_t)i0)) e("checks : cast tlfloat_int128_t <- BigInt<7>"); + + if (double(i0) != double(b0)) { + cerr << i0 << endl; + e("checks : operator double"); + } + if (double(i1) != double(b1)) { + cerr << i1 << endl; + e("checks : operator double"); + } + if (!equal(tlfloat_int128_t(d), BigInt<7>(d))) { + fprintf(stderr, "%.20g\n", d); + e("checks : cast from double"); + } + + if ((tlfloat_int128_t)tlfloat_quad((tlfloat_int128_t)low0) != low0) { + cerr << i0 << endl; + e("checks : cast tlfloat_quad"); + } + if ((tlfloat_int128_t)tlfloat_octuple(b0) != b0) { + cerr << i0 << endl; + e("checks : cast tlfloat_octuple"); + } + + // + + { + char str[256]; + tlfloat_snprintf(str, sizeof(str), "%Qd", b0); + if (b0 != tlfloat_strtoi128(str, NULL, 10)) e("Qd to/from string signed base 10"); + if (b0 != tlfloat_strtoi128(str, NULL, 0)) e("Qd to/from string signed base 0"); + } + + if ((i0 == i1) != (b0 == b1)) e("=="); + if ((i1 == i0) != (b1 == b0)) e("=="); + if ((i0 == i0) != (b0 == b0)) e("=="); + if ((i1 == i1) != (b1 == b1)) e("=="); + + if (!equal(i0++, b0++) || !equal(i1++, b1++)) e("++ suffix"); + if (!equal(++i0, ++b0) || !equal(++i1, ++b1)) e("++ prefix"); + + if (!equal(i0--, b0--) || !equal(i1--, b1--)) e("-- suffix"); + if (!equal(--i0, --b0) || !equal(--i1, --b1)) e("-- prefix"); + + if (!equal(-i0, -b0) || !equal(-i1, -b1)) e("- unary"); + if (!equal(+i0, +b0) || !equal(+i1, +b1)) e("+ unary"); + + if ((long long)(i0) != (long long)(b0)) e("(long long)"); + if (long(i0) != long(b0)) e("(long)"); + if (int(i0) != int(b0)) e("(int)"); + if (short(i0) != short(b0)) e("(short)"); + if (char(i0) != char(b0)) e("(short)"); + + if ((unsigned long long)(i0) != (unsigned long long)(b0)) e("(unsigned long long) 1s"); + if ((unsigned long)(i0) != (unsigned long)(b0)) e("(unsigned long) 1s"); + if ((unsigned int)(i0) != (unsigned int)(b0)) e("(unsigned int) 1s"); + if ((unsigned short)(i0) != (unsigned short)(b0)) e("(unsigned short) 1s"); + if ((unsigned char)(i0) != (unsigned char)(b0)) e("(unsigned char) 1s"); + if ((bool)(i0) != (bool)(b0)) e("(bool)"); + + if (!equal(BigInt<7>((long long)(i0)), tlfloat_int128_t((long long)(b0)))) e("(long long) 2s"); + if (!equal(BigInt<7>((long)(i0)), tlfloat_int128_t((long)(b0)))) e("(long) 2s"); + if (!equal(BigInt<7>((int)(i0)), tlfloat_int128_t((int)(b0)))) e("(int) 2s"); + if (!equal(BigInt<7>((short)(i0)), tlfloat_int128_t((short)(b0)))) e("(short) 2s"); + if (!equal(BigInt<7>((char)(i0)), tlfloat_int128_t((char)(b0)))) e("(char) 2s"); + + if (!equal(BigInt<7>((unsigned long long)(i0)), tlfloat_int128_t((unsigned long long)(b0)))) e("(unsigned long long) 2s"); + if (!equal(BigInt<7>((unsigned long)(i0)), tlfloat_int128_t((unsigned long)(b0)))) e("(unsigned long) 2s"); + if (!equal(BigInt<7>((unsigned)(i0)), tlfloat_int128_t((unsigned)(b0)))) e("(unsigned) 2s"); + if (!equal(BigInt<7>((unsigned short)(i0)), tlfloat_int128_t((unsigned short)(b0)))) e("(unsigned short) 2s"); + if (!equal(BigInt<7>((unsigned char)(i0)), tlfloat_int128_t((unsigned char)(b0)))) e("(unsigned char) 2s"); + if (!equal(BigInt<7>((bool)(i0)), tlfloat_int128_t((bool)(b0)))) e("(bool) 2s"); + + if ((i0 < i1) != (b0 < b1)) e("<"); + if ((i1 < i0) != (b1 < b0)) e("<"); + if ((i0 < i0) != (b0 < b0)) e("<"); + if ((i1 < i1) != (b1 < b1)) e("<"); + + if (!equal(i0 + i1, b0 + b1)) e("+"); + if (!equal(i1 + i0, b1 + b0)) e("+"); + + if (!equal(i0 - i1, b0 - b1)) e("-"); + if (!equal(i1 - i0, b1 - b0)) e("-"); + + if (!equal(i0 * i1, b0 * b1)) e("*"); + if (!equal(i1 * i0, b1 * b0)) e("*"); + + if (!equal(i0 / i1, b0 / b1)) e("/"); + if (!equal(i1 / i0, b1 / b0)) e("/"); + + if (!equal(i0 % i1, b0 % b1)) e("%"); + if (!equal(i1 % i0, b1 % b0)) e("%"); + + if (!equal(i0 << 3, b0 << 3)) e("<<"); + if (!equal((i0 <<= 3), (b0 <<= 3))) e("<<="); + + if (!equal(i0 >> 3, b0 >> 3)) e(">>"); + if (!equal((i0 >>= 3), (b0 >>= 3))) e(">>="); + + if (!equal(i0 += 3, b0 += 3)) e("+="); + if (!equal(i0 -= 3ULL, b0 -= 3ULL)) e("-="); + if (!equal(i0 *= 3, b0 *= 3)) e("*="); + if (!equal(i0 /= 3, b0 /= 3)) e("/="); + + if (!equal(i1 += i0, b1 += b0)) e("+="); + if (!equal(i1 -= i0, b1 -= tlfloat_int128_t_(b0))) e("-="); + if (!equal(i1 *= i0, b1 *= tlfloat_uint128_t(b0))) e("*="); + if (!equal(i1 /= i0, b1 /= b0)) e("/="); +} + +void checku(uint64_t high0, uint64_t low0, uint64_t high1, uint64_t low1, double d) { +#if 0 + printf("checku 0x%016llx%016llx 0x%016llx%016llx %.16g\n", + (unsigned long long)high0, (unsigned long long)low0, + (unsigned long long)high1, (unsigned long long)low1, d); +#endif + + converter128 cnv0(high0, low0); + BigUInt<7> i0 = cnv0.bi; + tlfloat_uint128_t b0 = cnv0.tu128; + + converter128 cnv1(high1, low1); + BigUInt<7> i1 = cnv1.bi; + tlfloat_uint128_t b1 = cnv1.tu128; + + if (!equal(i0, b0)) e("checku : cast with union"); + if (!equal((BigUInt<7>)b0, b0)) e("checku : cast BigUInt<7> <- tlfloat_uint128_t"); + if (!equal(i0, (tlfloat_uint128_t)i0)) e("checku : cast tlfloat_uint128_t <- BigUInt<7>"); + + if (double(i0) != double(b0)) { + cerr << i0 << endl; + e("checku : operator double"); + } + if (double(i1) != double(b1)) { + cerr << i1 << endl; + e("checku : operator double"); + } + if (!equal(tlfloat_uint128_t(d), BigUInt<7>(d))) { + fprintf(stderr, "%.20g\n", d); + e("checku : cast from double"); + } + + if ((tlfloat_uint128_t)tlfloat_quad((tlfloat_uint128_t)low0) != low0) { + cerr << i0 << endl; + e("checku : cast tlfloat_quad"); + } + if ((tlfloat_uint128_t)tlfloat_octuple(b0) != b0) { + cerr << i0 << endl; + e("checku : cast tlfloat_octuple"); + } + + // + + { + char str[256]; + + tlfloat_snprintf(str, sizeof(str), "%Qu", b0); + if (b0 != tlfloat_strtou128(str, NULL, 10)) e("Qu to/from string unsigned base 10"); + if (b0 != tlfloat_strtou128(str, NULL, 0)) e("Qu to/from string unsigned base 10"); + + tlfloat_snprintf(str, sizeof(str), "%Qo", b0); + if (b0 != tlfloat_strtou128(str, NULL, 8)) e("Qo to/from string unsigned base 8"); + tlfloat_snprintf(str, sizeof(str), "0%Qo", b0); + if (b0 != tlfloat_strtou128(str, NULL, 0)) e("Qo to/from string unsigned base 0"); + + tlfloat_snprintf(str, sizeof(str), "%Qx", b0); + if (b0 != tlfloat_strtou128(str, NULL, 16)) e("Qx to/from string unsigned base 16"); + tlfloat_snprintf(str, sizeof(str), "0x%Qx", b0); + if (b0 != tlfloat_strtou128(str, NULL, 0)) e("Qx to/from string unsigned base 0"); + } + + if ((i0 == i1) != (b0 == b1)) e("=="); + if ((i1 == i0) != (b1 == b0)) e("=="); + if ((i0 == i0) != (b0 == b0)) e("=="); + if ((i1 == i1) != (b1 == b1)) e("=="); + + if (!equal(i0++, b0++) || !equal(i1++, b1++)) e("++ suffix"); + if (!equal(++i0, ++b0) || !equal(++i1, ++b1)) e("++ prefix"); + + if (!equal(i0--, b0--) || !equal(i1--, b1--)) e("-- suffix"); + if (!equal(--i0, --b0) || !equal(--i1, --b1)) e("-- prefix"); + + if (!equal(-i0, -b0) || !equal(-i1, -b1)) e("- unary"); + if (!equal(+i0, +b0) || !equal(+i1, +b1)) e("+ unary"); + + if ((long long)(i0) != (long long)(b0)) e("(long long)"); + if (long(i0) != long(b0)) e("(long)"); + if (int(i0) != int(b0)) e("(int)"); + if (short(i0) != short(b0)) e("(short)"); + if (char(i0) != char(b0)) e("(short)"); + + if ((unsigned long long)(i0) != (unsigned long long)(b0)) e("(unsigned long long) 1u"); + if ((unsigned long)(i0) != (unsigned long)(b0)) e("(unsigned long) 1u"); + if ((unsigned int)(i0) != (unsigned int)(b0)) e("(unsigned int) 1u"); + if ((unsigned short)(i0) != (unsigned short)(b0)) e("(unsigned short) 1u"); + if ((unsigned char)(i0) != (unsigned char)(b0)) e("(unsigned char) 1u"); + if ((bool)(i0) != (bool)(b0)) e("(bool)"); + + if (!equal(BigUInt<7>((long long)(i0)), tlfloat_int128_t((long long)(b0)))) e("(long long)3u"); + if (!equal(BigUInt<7>((long)(i0)), tlfloat_int128_t((long)(b0)))) e("(long)3u"); + if (!equal(BigUInt<7>((int)(i0)), tlfloat_int128_t((int)(b0)))) e("(int)3u"); + if (!equal(BigUInt<7>((short)(i0)), tlfloat_int128_t((short)(b0)))) e("(short)3u"); + if (!equal(BigUInt<7>((char)(i0)), tlfloat_int128_t((char)(b0)))) e("(char)3u"); + + if (!equal(BigUInt<7>((unsigned long long)(i0)), tlfloat_uint128_t((unsigned long long)(b0)))) e("(unsigned long long)4u"); + if (!equal(BigUInt<7>((unsigned long)(i0)), tlfloat_uint128_t((unsigned long)(b0)))) e("(unsigned long)4u"); + if (!equal(BigUInt<7>((unsigned)(i0)), tlfloat_uint128_t((unsigned)(b0)))) e("(unsigned)4u"); + if (!equal(BigUInt<7>((unsigned short)(i0)), tlfloat_uint128_t((unsigned short)(b0)))) e("(unsigned short)4u"); + if (!equal(BigUInt<7>((unsigned char)(i0)), tlfloat_uint128_t((unsigned char)(b0)))) e("(unsigned char)4u"); + if (!equal(BigUInt<7>((bool)(i0)), tlfloat_int128_t((bool)(b0)))) e("(bool)4u"); + + if ((i0 < i1) != (b0 < b1)) e("<"); + if ((i1 < i0) != (b1 < b0)) e("<"); + if ((i0 < i0) != (b0 < b0)) e("<"); + if ((i1 < i1) != (b1 < b1)) e("<"); + + if (!equal(i0 + i1, b0 + b1)) e("+"); + if (!equal(i1 + i0, b1 + b0)) e("+"); + + if (!equal(i0 - i1, b0 - b1)) e("-"); + if (!equal(i1 - i0, b1 - b0)) e("-"); + + if (!equal(i0 * i1, b0 * b1)) e("*"); + if (!equal(i1 * i0, b1 * b0)) e("*"); + + if (!equal(i0 / i1, b0 / b1)) e("/"); + if (!equal(i1 / i0, b1 / b0)) e("/"); + + if (!equal(i0 % i1, b0 % b1)) e("%"); + if (!equal(i1 % i0, b1 % b0)) e("%"); + + if (!equal(i0 << 3, b0 << 3)) e("<<"); + if (!equal((i0 <<= 3), (b0 <<= 3))) e("<<="); + + if (!equal(i0 >> 3, b0 >> 3)) e(">>"); + if (!equal((i0 >>= 3), (b0 >>= 3))) e(">>="); + + if (!equal(i0 += 3, b0 += 3)) e("+="); + if (!equal(i0 -= 3LL, b0 -= 3LL)) e("-="); + if (!equal(i0 *= 3, b0 *= 3)) e("*="); + if (!equal(i0 /= 3, b0 /= 3)) e("/="); + + if (!equal(i1 += i0, b1 += b0)) e("+="); + if (!equal(i1 -= i0, b1 -= tlfloat_uint128_t_(b0))) e("-="); + if (!equal(i1 *= i0, b1 *= tlfloat_int128_t(b0))) e("*="); + if (!equal(i1 /= i0, b1 /= b0)) e("/="); +} + +int main(int argc, char **argv) { + int n = 10000; + + if (argc != 1) n = atoi(argv[1]); + + shared_ptr rng = createPreferredRNG(); + + for(int i=0;inextDouble(), rng->nextLT(256)-128); + checku(rng->next64(), rng->next64(), rng->next64(), rng->next64(), d0); + + d0 = rng->nextBool() ? -d0 : d0; + checks(rng->next64(), rng->next64(), rng->next64(), rng->next64(), d0); + } + + if (!success) { + cout << "NG" << endl; + return -1; + } + + cout << "OK" << endl; + + return 0; +} diff --git a/validation/extern/tlfloat/src/tester/test_capi.c b/validation/extern/tlfloat/src/tester/test_capi.c new file mode 100644 index 0000000..05c01ff --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_capi.c @@ -0,0 +1,650 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include + +#include + +#if defined(TLFLOAT_ENABLE_LIBQUADMATH) +#include +#define TRUE_LIBQUADMATH +#else +#define TLFLOAT_LIBQUADMATH_EMULATION +#endif + +#include "tlfloat/tlfloat.h" + +#ifdef __STDC_VERSION__ +const tlfloat_quad testvar = M_PIq; +#endif + +void checkStr(const char *p, const char *q, const char *mes) { + if (strcmp(p, q) != 0) { + printf("NG : %s\n", mes); + printf("p : %s\n", p); + printf("q : %s\n", q); + exit(-1); + } +} + +void checkInt(const int u, const int v, const char *mes) { + if (u != v) { + printf("NG : %s\n", mes); + printf("u : %d\n", u); + printf("v : %d\n", v); + exit(-1); + } +} + +void checkQuo(const int u, const int v, const char *mes) { + int u2 = u & 0x7, v2 = v & 0x7; + if (u < 0) u2 = -u2; + if (v < 0) v2 = -v2; + if (u2 != v2) { + printf("NG : %s\n", mes); + printf("u : %d %d\n", u, u2); + printf("v : %d %d\n", v, v2); + exit(-1); + } +} + +void checkDouble(const double u, const double v, const char *mes) { + if (isinf(u) && isinf(v)) return; + if (u != v) { + printf("NG : %s\n", mes); + printf("u : %.20g\n", u); + printf("v : %.20g\n", v); + exit(-1); + } +} + +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 +__int128_t rndi128() { + __int128_t r = 0; + for(int i=0;i<8;i++) r = (r << 16) ^ rand(); + r &= ~((~(__uint128_t)0) << (rand() & 127)); + return r; +} + +__uint128_t rndu128() { + __uint128_t r = 0; + for(int i=0;i<8;i++) r = (r << 16) ^ rand(); + r &= ~((~(__uint128_t)0) << (rand() & 127)); + return r; +} + +void checkInt128(const tlfloat_int128_t u_, const __int128_t v, const char *mes) { + __int128_t u; + memcpy(&u, &u_, sizeof(u)); + + if (u != v) { + printf("NG : %s\n", mes); + printf("u : 0x%016llx%016llx\n", (unsigned long long)(u >> 64), (unsigned long long)u); + printf("v : 0x%016llx%016llx\n", (unsigned long long)(v >> 64), (unsigned long long)v); + exit(-1); + } +} + +void checkUInt128(const tlfloat_uint128_t u_, const __uint128_t v, const char *mes) { + __uint128_t u; + memcpy(&u, &u_, sizeof(u)); + + if (u != v) { + printf("NG : %s\n", mes); + printf("u : 0x%016llx%016llx\n", (unsigned long long)(u >> 64), (unsigned long long)u); + printf("v : 0x%016llx%016llx\n", (unsigned long long)(v >> 64), (unsigned long long)v); + exit(-1); + } +} + +void doTestInt128(const __int128_t x, const __int128_t y) { + tlfloat_int128_t x_, y_; + memcpy(&x_, &x, sizeof(x_)); + memcpy(&y_, &y, sizeof(y_)); + + //printf("x : 0x%016llx%016llx\n", (unsigned long long)(x >> 64), (unsigned long long)x); + //printf("y : 0x%016llx%016llx\n", (unsigned long long)(y >> 64), (unsigned long long)y); + + checkInt128(tlfloat_add_i128_i128(x_, y_), x + y, "int128 +"); + checkInt128(tlfloat_sub_i128_i128(x_, y_), x - y, "int128 -"); + checkInt128(tlfloat_mul_i128_i128(x_, y_), x * y, "int128 *"); + if (y != 0) { + checkInt128(tlfloat_div_i128_i128(x_, y_), x / y, "int128 /"); + checkInt128(tlfloat_mod_i128_i128(x_, y_), x % y, "int128 %"); + } + checkInt128(tlfloat_neg_i128 (x_ ), -x , "int128 -"); + + checkInt128(tlfloat_and_i128_i128(x_, y_), x & y, "int128 &"); + checkInt128(tlfloat_or_i128_i128 (x_, y_), x | y, "int128 |"); + checkInt128(tlfloat_xor_i128_i128(x_, y_), x ^ y, "int128 ^"); + checkInt128(tlfloat_not_i128 (x_ ), ~x , "int128 ~"); + + checkInt128(tlfloat_shl_i128_i (x_, (int)(y & 127)), x << (int)(y & 127), "int128 <<"); + checkInt128(tlfloat_shr_i128_i (x_, (int)(y & 127)), x >> (int)(y & 127), "int128 >>"); + + checkInt(tlfloat_eq_i128_i128(x_, y_), x == y, "int128 =="); + checkInt(tlfloat_ne_i128_i128(x_, y_), x != y, "int128 !="); + checkInt(tlfloat_gt_i128_i128(x_, y_), x > y, "int128 >"); + checkInt(tlfloat_ge_i128_i128(x_, y_), x >= y, "int128 >="); + checkInt(tlfloat_lt_i128_i128(x_, y_), x < y, "int128 <"); + checkInt(tlfloat_le_i128_i128(x_, y_), x <= y, "int128 <="); + + checkDouble(tlfloat_cast_d_i128(x_), (double)x, "cast double <= int128"); + checkDouble(tlfloat_cast_d_q(tlfloat_cast_q_i128(x_)), (double)x, "cast double <= quad <= int128"); + checkDouble(tlfloat_cast_d_o(tlfloat_cast_o_i128(x_)), (double)x, "cast double <= octuple <= int128"); + checkInt128(tlfloat_cast_i128_d((double)x), (__int128)(double)x, "cast int128 <= double"); + checkInt128(tlfloat_cast_i128_q(tlfloat_cast_q_d((double)x)), (__int128)(double)x, "cast int128 <= quad <= double"); + checkInt128(tlfloat_cast_i128_o(tlfloat_cast_o_d((double)x)), (__int128)(double)x, "cast int128 <= octuple <= double"); +} + +void doTestUInt128(const __uint128_t x, const __uint128_t y) { + tlfloat_uint128_t x_, y_; + memcpy(&x_, &x, sizeof(x_)); + memcpy(&y_, &y, sizeof(y_)); + + //printf("x : 0x%016llx%016llx\n", (unsigned long long)(x >> 64), (unsigned long long)x); + //printf("y : 0x%016llx%016llx\n", (unsigned long long)(y >> 64), (unsigned long long)y); + + checkUInt128(tlfloat_add_u128_u128(x_, y_), x + y, "uint128 +"); + checkUInt128(tlfloat_sub_u128_u128(x_, y_), x - y, "uint128 -"); + checkUInt128(tlfloat_mul_u128_u128(x_, y_), x * y, "uint128 *"); + if (y != 0) { + checkUInt128(tlfloat_div_u128_u128(x_, y_), x / y, "uint128 /"); + checkUInt128(tlfloat_mod_u128_u128(x_, y_), x % y, "uint128 %"); + } + + checkUInt128(tlfloat_and_u128_u128(x_, y_), x & y, "uint128 &"); + checkUInt128(tlfloat_or_u128_u128 (x_, y_), x | y, "uint128 |"); + checkUInt128(tlfloat_xor_u128_u128(x_, y_), x ^ y, "uint128 ^"); + checkUInt128(tlfloat_not_u128 (x_ ), ~x , "uint128 ~"); + + checkUInt128(tlfloat_shl_u128_i (x_, (int)(y & 127)), x << (int)(y & 127), "uint128 <<"); + checkUInt128(tlfloat_shr_u128_i (x_, (int)(y & 127)), x >> (int)(y & 127), "uint128 >>"); + + checkInt(tlfloat_eq_u128_u128(x_, y_), x == y, "uint128 =="); + checkInt(tlfloat_ne_u128_u128(x_, y_), x != y, "uint128 !="); + checkInt(tlfloat_gt_u128_u128(x_, y_), x > y, "uint128 >"); + checkInt(tlfloat_ge_u128_u128(x_, y_), x >= y, "uint128 >="); + checkInt(tlfloat_lt_u128_u128(x_, y_), x < y, "uint128 <"); + checkInt(tlfloat_le_u128_u128(x_, y_), x <= y, "uint128 <="); + + checkDouble(tlfloat_cast_d_u128(x_), (double)x, "cast double <= uint128"); + checkDouble(tlfloat_cast_d_q(tlfloat_cast_q_u128(x_)), (double)x, "cast double <= quad <= uint128"); + checkDouble(tlfloat_cast_d_o(tlfloat_cast_o_u128(x_)), (double)x, "cast double <= octuple <= uint128"); + checkUInt128(tlfloat_cast_u128_d((double)x), (__uint128_t)(double)x, "cast uint128 <= double"); + checkUInt128(tlfloat_cast_u128_q(tlfloat_cast_q_d((double)x)), (__uint128_t)(double)x, "cast unt128 <= quad <= double"); + checkUInt128(tlfloat_cast_u128_o(tlfloat_cast_o_d((double)x)), (__uint128_t)(double)x, "cast unt128 <= octuple <= double"); +} +#endif + +char buf0[1000], buf1[1000]; + +int main(int argc, char **argv) { + if (tlfloat_version() != TLFLOAT_VERSION_MAJOR * 1000000ULL + TLFLOAT_VERSION_MINOR * 1000ULL + TLFLOAT_VERSION_PATCH) { + printf("NG : tlfloat_version()\n"); + exit(-1); + } + + const char *endptr = NULL, *oneTenth = "0.1"; + + checkInt(tlfloat_snprintf(buf0, sizeof(buf0), "%.8g", tlfloat_strtod(oneTenth, &endptr)), 3, + "Return value of tlfloat_snprintf 1"); + checkStr(buf0, "0.1", "strtod"); + + checkInt(endptr - oneTenth, 3, "tlfloat_strtod endptr"); + + checkInt(tlfloat_snprintf(buf0, sizeof(buf0), "%.8g", tlfloat_sin(tlfloat_strtod("0.1", NULL))), 11, + "Return value of tlfloat_snprintf 2"); + checkStr(buf0, "0.099833417", "sin"); + + tlfloat_snprintf(buf0, sizeof(buf0), "%.8Qg", tlfloat_strtoq("0.1", NULL)); + checkStr(buf0, "0.1", "strtoq"); + + tlfloat_snprintf(buf0, sizeof(buf0), "%.8Qg", tlfloat_sinq(tlfloat_strtoq("0.1", NULL))); + checkStr(buf0, "0.099833417", "sinq"); + + tlfloat_snprintf(buf0, sizeof(buf0), "%.8Qg", strtoflt128("0.1", NULL)); + checkStr(buf0, "0.1", "quadmath strtoflt128"); + + tlfloat_snprintf(buf0, sizeof(buf0), "%.8Qg", sinq(strtoflt128("0.1", NULL))); + checkStr(buf0, "0.099833417", "quadmath sinq val"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.8Qg", strtoflt128("0.1", NULL)); + checkStr(buf0, "0.1", "quadmath_snprintf"); + + { + tlfloat_quad q = tlfloat_strtoq("0.1", NULL); + tlfloat_snprintf(buf0, sizeof(buf0), "%.8Pg", &q); + checkStr(buf0, "0.1", "strtoq ptr"); + + q = tlfloat_sinq(tlfloat_strtoq("0.1", NULL)); + tlfloat_snprintf(buf0, sizeof(buf0), "%.8Pg", &q); + checkStr(buf0, "0.099833417", "sinq ptr"); + + q = strtoflt128("0.1", NULL); + tlfloat_snprintf(buf0, sizeof(buf0), "%.8Pg", &q); + checkStr(buf0, "0.1", "quadmath strtoflt128 ptr"); + + q = sinq(strtoflt128("0.1", NULL)); + tlfloat_snprintf(buf0, sizeof(buf0), "%.8Pg", &q); + checkStr(buf0, "0.099833417", "quadmath sinq val ptr"); + } + +#ifdef TLFLOAT_COMPILER_SUPPORTS_FLOAT128 + tlfloat_snprintf(buf0, sizeof(buf0), "%.8Qg", (__float128)1.0 / (__float128)10.0); + checkStr(buf0, "0.1", "tlfloat_snprintf"); +#elif defined(TLFLOAT_LONGDOUBLE_IS_FLOAT128) + tlfloat_snprintf(buf0, sizeof(buf0), "%.8Lg", strtold("0.1", NULL)); + checkStr(buf0, "0.1", "strtold"); +#endif + + tlfloat_snprintf(buf0, sizeof(buf0), "%.8Og", tlfloat_strtoo("0.1", NULL)); + checkStr(buf0, "0.1", "strtoo"); + + tlfloat_snprintf(buf0, sizeof(buf0), "%.8Og", tlfloat_sino(tlfloat_strtoo("0.1", NULL))); + checkStr(buf0, "0.099833417", "sino"); + + // + + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_cast_q_o(tlfloat_strtoo("0.123", NULL))); + checkStr("0.123", buf1, "tlfloat_cast_q_o"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.12Qg", tlfloat_cast_q_d(tlfloat_strtod("0.123", NULL))); + checkStr("0.123", buf1, "tlfloat_cast_q_d"); + + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_cast_o_q(tlfloat_strtoq("0.123", NULL))); + checkStr("0.123", buf1, "tlfloat_cast_o_q"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.12Og", tlfloat_cast_o_d(tlfloat_strtod("0.123", NULL))); + checkStr("0.123", buf1, "tlfloat_cast_o_d"); + + tlfloat_quad q0 = strtoflt128("0.123", NULL), q1 = strtoflt128("1.234", NULL), q2 = strtoflt128("-0.345", NULL); + tlfloat_octuple o0 = tlfloat_strtoo("0.123", NULL), o1 = tlfloat_strtoo("1.234", NULL), o2 = tlfloat_strtoo("-0.345", NULL); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", fmaq(q0, q1, q2)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_fmaq(q0, q1, q2)); + checkStr(buf0, buf1, "quadmath fmaq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_fmao(o0, o1, o2)); + checkStr(buf0, buf1, "quadmath fmao"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", sqrtq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_sqrtq(q0)); + checkStr(buf0, buf1, "quadmath sqrtq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_sqrto(o0)); + checkStr(buf0, buf1, "quadmath sqrto"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", sinq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_sinq(q0)); + checkStr(buf0, buf1, "quadmath sinq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_sino(o0)); + checkStr(buf0, buf1, "quadmath sino"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", cosq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_cosq(q0)); + checkStr(buf0, buf1, "quadmath cosq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_coso(o0)); + checkStr(buf0, buf1, "quadmath coso"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", tanq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_tanq(q0)); + checkStr(buf0, buf1, "quadmath tanq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_tano(o0)); + checkStr(buf0, buf1, "quadmath tano"); + + tlfloat_snprintf(buf1, sizeof(buf1), "%.6Qg", tlfloat_sinpiq(q0)); + checkStr("0.376871", buf1, "quadmath sinpiq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.6Og", tlfloat_sinpio(o0)); + checkStr("0.376871", buf1, "quadmath sinpio"); + + tlfloat_snprintf(buf1, sizeof(buf1), "%.6Qg", tlfloat_cospiq(q0)); + checkStr("0.926266", buf1, "quadmath cospiq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.6Og", tlfloat_cospio(o0)); + checkStr("0.926266", buf1, "quadmath cospio"); + + tlfloat_snprintf(buf1, sizeof(buf1), "%.6Qg", tlfloat_tanpiq(q0)); + checkStr("0.406871", buf1, "quadmath tanpiq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.6Og", tlfloat_tanpio(o0)); + checkStr("0.406871", buf1, "quadmath tanpio"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", asinq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_asinq(q0)); + checkStr(buf0, buf1, "quadmath asinq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_asino(o0)); + checkStr(buf0, buf1, "quadmath asino"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", acosq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_acosq(q0)); + checkStr(buf0, buf1, "quadmath acosq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_acoso(o0)); + checkStr(buf0, buf1, "quadmath acoso"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", atanq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_atanq(q0)); + checkStr(buf0, buf1, "quadmath atanq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_atano(o0)); + checkStr(buf0, buf1, "quadmath atano"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", atan2q(q0, q1)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_atan2q(q0, q1)); + checkStr(buf0, buf1, "quadmath atan2q"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_atan2o(o0, o1)); + checkStr(buf0, buf1, "quadmath atan2o"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", sinhq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_sinhq(q0)); + checkStr(buf0, buf1, "quadmath sinhq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_sinho(o0)); + checkStr(buf0, buf1, "quadmath sinho"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", coshq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_coshq(q0)); + checkStr(buf0, buf1, "quadmath coshq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_cosho(o0)); + checkStr(buf0, buf1, "quadmath cosho"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", tanhq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_tanhq(q0)); + checkStr(buf0, buf1, "quadmath tanhq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_tanho(o0)); + checkStr(buf0, buf1, "quadmath tanho"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", asinhq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_asinhq(q0)); + checkStr(buf0, buf1, "quadmath asinhq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_asinho(o0)); + checkStr(buf0, buf1, "quadmath asinho"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", acoshq(q1)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_acoshq(q1)); + checkStr(buf0, buf1, "quadmath acoshq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_acosho(o1)); + checkStr(buf0, buf1, "quadmath acosho"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", atanhq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_atanhq(q0)); + checkStr(buf0, buf1, "quadmath atanhq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_atanho(o0)); + checkStr(buf0, buf1, "quadmath atanho"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", expq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_expq(q0)); + checkStr(buf0, buf1, "quadmath expq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_expo(o0)); + checkStr(buf0, buf1, "quadmath expo"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", exp2q(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_exp2q(q0)); + checkStr(buf0, buf1, "quadmath exp2q"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_exp2o(o0)); + checkStr(buf0, buf1, "quadmath exp2o"); + +#ifndef TRUE_LIBQUADMATH + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", exp10q(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_exp10q(q0)); + checkStr(buf0, buf1, "quadmath exp10q"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_exp10o(o0)); + checkStr(buf0, buf1, "quadmath exp10o"); +#endif + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", expm1q(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_expm1q(q0)); + checkStr(buf0, buf1, "quadmath expm1q"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_expm1o(o0)); + checkStr(buf0, buf1, "quadmath expm1o"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", logq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_logq(q0)); + checkStr(buf0, buf1, "quadmath logq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_logo(o0)); + checkStr(buf0, buf1, "quadmath logo"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", log2q(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_log2q(q0)); + checkStr(buf0, buf1, "quadmath log2q"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_log2o(o0)); + checkStr(buf0, buf1, "quadmath log2o"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", log10q(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_log10q(q0)); + checkStr(buf0, buf1, "quadmath log10q"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_log10o(o0)); + checkStr(buf0, buf1, "quadmath log10o"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", log1pq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_log1pq(q0)); + checkStr(buf0, buf1, "quadmath log1pq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_log1po(o0)); + checkStr(buf0, buf1, "quadmath log1po"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", powq(q0, q1)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_powq(q0, q1)); + checkStr(buf0, buf1, "quadmath powq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_powo(o0, o1)); + checkStr(buf0, buf1, "quadmath powo"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", cbrtq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_cbrtq(q0)); + checkStr(buf0, buf1, "quadmath cbrtq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_cbrto(o0)); + checkStr(buf0, buf1, "quadmath cbrto"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", erfq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_erfq(q0)); + checkStr(buf0, buf1, "quadmath erfq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_erfo(o0)); + checkStr(buf0, buf1, "quadmath erfo"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", erfcq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_erfcq(q0)); + checkStr(buf0, buf1, "quadmath erfcq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_erfco(o0)); + checkStr(buf0, buf1, "quadmath erfco"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", tgammaq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_tgammaq(q0)); + checkStr(buf0, buf1, "quadmath tgammaq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_tgammao(o0)); + checkStr(buf0, buf1, "quadmath tgammao"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", lgammaq(q0)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_lgammaq(q0)); + checkStr(buf0, buf1, "quadmath lgammaq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_lgammao(o0)); + checkStr(buf0, buf1, "quadmath lgammao"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", hypotq(q0, q1)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_hypotq(q0, q1)); + checkStr(buf0, buf1, "quadmath hypotq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_hypoto(o0, o1)); + checkStr(buf0, buf1, "quadmath hypoto"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", fmodq(q0, q1)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_fmodq(q0, q1)); + checkStr(buf0, buf1, "quadmath fmodq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_fmodo(o0, o1)); + checkStr(buf0, buf1, "quadmath fmodo"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", remainderq(q0, q1)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_remainderq(q0, q1)); + checkStr(buf0, buf1, "quadmath remainderq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_remaindero(o0, o1)); + checkStr(buf0, buf1, "quadmath remaindero"); + + int cquo = 0, tquo = 0; + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", remquoq(q0, q1, &cquo)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_remquoq(q0, q1, &tquo)); + checkStr(buf0, buf1, "quadmath remquoq remainder"); + checkQuo(cquo, tquo, "quadmath remquoq quo"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_remquoo(o0, o1, &tquo)); + checkStr(buf0, buf1, "quadmath remquoo remainder"); + checkQuo(cquo, tquo, "quadmath remquoo quo"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", fabsq(q2)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_fabsq(q2)); + checkStr(buf0, buf1, "quadmath fabsq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_fabso(o2)); + checkStr(buf0, buf1, "quadmath fabso"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", copysignq(q0, q2)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_copysignq(q0, q2)); + checkStr(buf0, buf1, "quadmath copysignq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_copysigno(o0, o2)); + checkStr(buf0, buf1, "quadmath copysigno"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", fmaxq(q0, q2)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_fmaxq(q0, q2)); + checkStr(buf0, buf1, "quadmath fmaxq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_fmaxo(o0, o2)); + checkStr(buf0, buf1, "quadmath fmaxo"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", fminq(q0, q2)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_fminq(q0, q2)); + checkStr(buf0, buf1, "quadmath fminq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_fmino(o0, o2)); + checkStr(buf0, buf1, "quadmath fmino"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", fdimq(q0, q2)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_fdimq(q0, q2)); + checkStr(buf0, buf1, "quadmath fdimq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Og", tlfloat_fdimo(o0, o2)); + checkStr(buf0, buf1, "quadmath fdimo"); + + quadmath_snprintf(buf0, sizeof(buf0), "%.24Qg", nextafterq(q0, q2)); + tlfloat_snprintf(buf1, sizeof(buf1), "%.24Qg", tlfloat_nextafterq(q0, q2)); + checkStr(buf0, buf1, "quadmath nextafterq"); + +#ifdef __STDC_VERSION__ + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", M_Eq); + checkStr("0x1.5bf0a8b1457695355fb8ac404e7ap+1", buf1, "M_Eq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", M_LOG2Eq); + checkStr("0x1.71547652b82fe1777d0ffda0d23ap+0", buf1, "M_LOG2Eq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", M_LOG10Eq); + checkStr("0x1.bcb7b1526e50e32a6ab7555f5a68p-2", buf1, "M_LOG10Eq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", M_LN2q); + checkStr("0x1.62e42fefa39ef35793c7673007e6p-1", buf1, "M_LN2q"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", M_LN10q); + checkStr("0x1.26bb1bbb5551582dd4adac5705a6p+1", buf1, "M_LN10q"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", M_PIq); + checkStr("0x1.921fb54442d18469898cc51701b8p+1", buf1, "M_PIq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", M_PI_2q); + checkStr("0x1.921fb54442d18469898cc51701b8p+0", buf1, "M_PI_2q"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", M_PI_4q); + checkStr("0x1.921fb54442d18469898cc51701b8p-1", buf1, "M_PI_4q"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", M_1_PIq); + checkStr("0x1.45f306dc9c882a53f84eafa3ea6ap-2", buf1, "M_1_PIq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", M_2_PIq); + checkStr("0x1.45f306dc9c882a53f84eafa3ea6ap-1", buf1, "M_2_PIq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", M_2_SQRTPIq); + checkStr("0x1.20dd750429b6d11ae3a914fed7fep+0", buf1, "M_2_SQRTPIq"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", M_SQRT2q); + checkStr("0x1.6a09e667f3bcc908b2fb1366ea95p+0", buf1, "M_SQRT2q"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", M_SQRT1_2q); + checkStr("0x1.6a09e667f3bcc908b2fb1366ea95p-1", buf1, "M_SQRT1_2q"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", FLT128_MAX); + checkStr("0x1.ffffffffffffffffffffffffffffp+16383", buf1, "FLT128_MAX"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", FLT128_MIN); + checkStr("0x1p-16382", buf1, "FLT128_MIN"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", FLT128_DENORM_MIN); + checkStr("0x1p-16494", buf1, "FLT128_DENORM_MIN"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Qa", FLT128_EPSILON); + checkStr("0x1p-112", buf1, "FLT128_EPSILON"); + + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_M_Eo); + checkStr("0x1.5bf0a8b1457695355fb8ac404e7a79e3b1738b079c5a6d2b53c26c8228dp+1", buf1, "TLFLOAT_M_Eo"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_M_LOG2Eo); + checkStr("0x1.71547652b82fe1777d0ffda0d23a7d11d6aef551bad2b4b1164a2cd9a34p+0", buf1, "TLFLOAT_M_LOG2Eo"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_M_LOG10Eo); + checkStr("0x1.bcb7b1526e50e32a6ab7555f5a67b8647dc68c048b934404747e5a89ef2p-2", buf1, "TLFLOAT_M_LOG10Eo"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_M_LN2o); + checkStr("0x1.62e42fefa39ef35793c7673007e5ed5e81e6864ce5316c5b141a2eb7175p-1", buf1, "TLFLOAT_M_LN2o"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_M_LN10o); + checkStr("0x1.26bb1bbb5551582dd4adac5705a61451c51fd9f3b4bbf21d078c3d0403ep+1", buf1, "TLFLOAT_M_LN10o"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_M_PIo); + checkStr("0x1.921fb54442d18469898cc51701b839a252049c1114cf98e804177d4c762p+1", buf1, "TLFLOAT_M_PIo"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_M_PI_2o); + checkStr("0x1.921fb54442d18469898cc51701b839a252049c1114cf98e804177d4c762p+0", buf1, "TLFLOAT_M_PI_2o"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_M_PI_4o); + checkStr("0x1.921fb54442d18469898cc51701b839a252049c1114cf98e804177d4c762p-1", buf1, "TLFLOAT_M_PI_4o"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_M_1_PIo); + checkStr("0x1.45f306dc9c882a53f84eafa3ea69bb81b6c52b3278872083fca2c757bd7p-2", buf1, "TLFLOAT_M_1_PIo"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_M_2_PIo); + checkStr("0x1.45f306dc9c882a53f84eafa3ea69bb81b6c52b3278872083fca2c757bd7p-1", buf1, "TLFLOAT_M_2_PIo"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_M_2_SQRTPIo); + checkStr("0x1.20dd750429b6d11ae3a914fed7fd8688281341d7587cea2e7342b06199dp+0", buf1, "TLFLOAT_M_2_SQRTPIo"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_M_SQRT2o); + checkStr("0x1.6a09e667f3bcc908b2fb1366ea957d3e3adec17512775099da2f590b066p+0", buf1, "TLFLOAT_M_SQRT2o"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_M_SQRT1_2o); + checkStr("0x1.6a09e667f3bcc908b2fb1366ea957d3e3adec17512775099da2f590b066p-1", buf1, "TLFLOAT_M_SQRT1_2o"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_FLT256_MAX); + checkStr("0x1.fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffp+262143", buf1, "TLFLOAT_FLT256_MAX"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_FLT256_MIN); + checkStr("0x1p-262142", buf1, "TLFLOAT_FLT256_MIN"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_FLT256_DENORM_MIN); + checkStr("0x1p-262378", buf1, "TLFLOAT_FLT256_DENORM_MIN"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_FLT256_TRUE_MIN); + checkStr("0x1p-262378", buf1, "TLFLOAT_FLT256_TRUE_MIN"); + tlfloat_snprintf(buf1, sizeof(buf1), "%Oa", TLFLOAT_FLT256_EPSILON); + checkStr("0x1p-236", buf1, "TLFLOAT_FLT256_EPSILON"); +#endif + + { + float a = tlfloat_strtof("0.1", NULL), s, c; + tlfloat_sincosf(a, &s, &c); + checkInt(s == tlfloat_sinf(a), 1, "sin in tlfloat_sincosf"); + checkInt(c == tlfloat_cosf(a), 1, "cos in tlfloat_sincosf"); + tlfloat_sincospif(a, &s, &c); + checkInt(s == tlfloat_sinpif(a), 1, "sin in tlfloat_sincosf"); + checkInt(c == tlfloat_cospif(a), 1, "cos in tlfloat_sincosf"); + } + + { + double a = tlfloat_strtod("0.1", NULL), s, c; + tlfloat_sincos(a, &s, &c); + checkInt(s == tlfloat_sin(a), 1, "sin in tlfloat_sincos"); + checkInt(c == tlfloat_cos(a), 1, "cos in tlfloat_sincos"); + tlfloat_sincospi(a, &s, &c); + checkInt(s == tlfloat_sinpi(a), 1, "sin in tlfloat_sincos"); + checkInt(c == tlfloat_cospi(a), 1, "cos in tlfloat_sincos"); + } + + { + tlfloat_quad a = tlfloat_strtoq("0.1", NULL), s, c; + tlfloat_sincosq(a, &s, &c); + checkInt(tlfloat_eq_q_q(s, tlfloat_sinq(a)), 1, "sin in tlfloat_sincosq"); + checkInt(tlfloat_eq_q_q(c, tlfloat_cosq(a)), 1, "cos in tlfloat_sincosq"); + tlfloat_sincospiq(a, &s, &c); + checkInt(tlfloat_eq_q_q(s, tlfloat_sinpiq(a)), 1, "sin in tlfloat_sincosq"); + checkInt(tlfloat_eq_q_q(c, tlfloat_cospiq(a)), 1, "cos in tlfloat_sincosq"); + } + + { + tlfloat_octuple a = tlfloat_strtoo("0.1", NULL), s, c; + tlfloat_sincoso(a, &s, &c); + checkInt(tlfloat_eq_o_o(s, tlfloat_sino(a)), 1, "sin in tlfloat_sincoso"); + checkInt(tlfloat_eq_o_o(c, tlfloat_coso(a)), 1, "cos in tlfloat_sincoso"); + tlfloat_sincospio(a, &s, &c); + checkInt(tlfloat_eq_o_o(s, tlfloat_sinpio(a)), 1, "sin in tlfloat_sincoso"); + checkInt(tlfloat_eq_o_o(c, tlfloat_cospio(a)), 1, "cos in tlfloat_sincoso"); + } + + // + +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + srand(time(NULL)); + for(int i=0;i<100000;i++) { + doTestInt128(rndi128(), rndi128()); + doTestUInt128(rndu128(), rndu128()); + } + printf("int128 OK\n"); +#endif + + // + + printf("OK\n"); + exit(0); +} diff --git a/validation/extern/tlfloat/src/tester/test_cpp11api.cpp b/validation/extern/tlfloat/src/tester/test_cpp11api.cpp new file mode 100644 index 0000000..7e08647 --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_cpp11api.cpp @@ -0,0 +1,895 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include +#include + +#include + +#if __cplusplus >= 202002L +#include +#endif + +#define TLFLOAT_LIBQUADMATH_EMULATION +#include + +#include + +using namespace std; +using namespace tlfloat; + +static_assert(is_trivially_copyable::value, "tlfloat_quad not trivially copyable"); +static_assert(is_trivially_copyable::value, "tlfloat_octuple not trivially copyable"); +static_assert(is_trivially_copyable::value, "tlfloat_int128_t not trivially copyable"); +static_assert(is_trivially_copyable::value, "tlfloat_uint128_t not trivially copyable"); + +extern const tlfloat_quad testvar = M_PIq; + +static void check(const string& msg, double x, double y, int t=0) { + uint64_t u, v; + memcpy((void *)&u, (void *)&x, sizeof(u)); + memcpy((void *)&v, (void *)&y, sizeof(v)); + +#if 0 + printf("%s : ", msg.c_str()); + printf("x : %.18g %016llx, ", x, (unsigned long long)u); + printf("y : %.18g %016llx\n", y, (unsigned long long)v); +#endif + + if (isnan(x) && isnan(y)) return; + + if (t == 0 && u == v) return; + + int d = int(int64_t(u) - int64_t(v)); + if (-t <= d && d <= t) return; + + cout << "NG " << msg << endl; + printf("x : %.18g %016llx\n", x, (unsigned long long)u); + printf("y : %.18g %016llx\n", y, (unsigned long long)v); + exit(-1); +} + +static void check(const string& msg, tlfloat_octuple x, double y, int t=0) { + check(msg, double(x), y, t); +} + +static void check(const string& msg, tlfloat_quad x, double y, int t=0) { + check(msg, double(x), y, t); +} + +static void check(const string& msg, int x, int y) { + if (x == y) return; + + cout << "NG " << msg << endl; + printf("x : %d\n", x); + printf("y : %d\n", y); + exit(-1); +} + +static void check_ilogb(const string& msg, int t, int c) { + if (t == TLFLOAT_FP_ILOGB0 && c == FP_ILOGB0) return; + if (t == TLFLOAT_FP_ILOGBNAN && c == FP_ILOGBNAN) return; + if (t == c) return; + + cout << "NG " << msg << endl; + printf("t : %d\n", t); + printf("c : %d\n", c); + exit(-1); +} + +static void check(const string& msg, bool x, bool y) { + check(msg, (int)x, (int)y); +} + +static void checkQuo(const string& msg, int x, int y) { + int x2 = x & 0x7, y2 = y & 0x7; + if (x < 0) x2 = -x2; + if (y < 0) y2 = -y2; + if (x2 == y2) return; + + cout << "NG " << msg << endl; + printf("x : %x %d\n", x, x2); + printf("y : %x %d\n", y, y2); + exit(-1); +} + +static void check(const string& msg, const char* x, const char* y) { + if (strncmp(x, y, strlen(y)) == 0) return; + + cout << "NG " << msg << endl; + printf("x : %s\n", x); + printf("y : %s\n", y); + exit(-1); +} + +static void checkStr(const char *p, const char *q, const char *mes) { + if (strcmp(p, q) != 0) { + printf("NG : %s\n", mes); + printf("p : %s\n", p); + printf("q : %s\n", q); + exit(-1); + } +} + +static double o2d(tlfloat_octuple o) { return (double)o; } +static double q2d(tlfloat_quad q) { return (double)q; } + +void doTest(const string &s1, const string &s2) { + tlfloat_octuple o0; + tlfloat_octuple o1 = tlfloat_strtoo(s1.c_str(), NULL); + tlfloat_octuple o2 = tlfloat_strtoo(s2.c_str(), NULL); + + tlfloat_octuple q0; + tlfloat_quad q1 = tlfloat_strtoq(s1.c_str(), NULL); + tlfloat_quad q2 = strtoflt128(s2.c_str(), NULL); + + double d0; + double d1 = (double)(tlfloat_quad)atof(s1.c_str()); + double d2 = atof(s2.c_str()); + + float f1 = d1, f2 = d2; + + int i1 = atoi(s1.c_str()); + int i2 = atoi(s2.c_str()); + + tlfloat_int128_t j1 = tlfloat_strtoi128(s1.c_str(), NULL, 10); + tlfloat_int128_t j2 = tlfloat_strtoi128(s2.c_str(), NULL, 10); + + long long k1 = strtoll(s1.c_str(), NULL, 10); + long long k2 = strtoll(s2.c_str(), NULL, 10); + + check("tlfloat_stroo", o1, d1); + check("tlfloat_stroq", q1, d1); + + char strx[256], stry[256]; + + snprintf(stry, sizeof(stry), "%.12g %.12g %d\n", d1, d2, 12345678); + tlfloat_snprintf(strx, sizeof(strx), "%.12_256g %.12_256g %d\n", o1, o2, 12345678); + check("tlfloat_snprintf tlfloat_octuple", strx, stry); + tlfloat_snprintf(strx, sizeof(strx), "%.12Qg %.12Qg %d\n", q1, q2, 12345678); + check("tlfloat_snprintf tlfloat_quad", strx, stry); + quadmath_snprintf(strx, sizeof(strx), "%.12Qg %.12Qg %d\n", q1, q2, 12345678); + check("quadmath_snprintf tlfloat_quad", strx, stry); + + check("double(tlfloat_octuple(d1))", double(tlfloat_octuple(d1)), d1); + check("double(tlfloat_quad(d1))", double(tlfloat_quad(d1)), d1); + + check("tlfloat_octuple(q1)", (double)tlfloat_octuple(q1), d1); + check("tlfloat_octuple(d1)", (double)tlfloat_octuple(d1), d1); + check("tlfloat_octuple(f1)", (double)tlfloat_octuple(f1), d1); + check("tlfloat_octuple(i1)", (double)tlfloat_octuple(i1), (double)i1); + check("tlfloat_octuple(j1)", (double)tlfloat_octuple(j1), (double)j1); + check("tlfloat_octuple(k1)", (double)tlfloat_octuple(k1), (double)k1); + + check("tlfloat_quad(o1)", (double)tlfloat_quad(o1), d1); + check("tlfloat_quad(d1)", (double)tlfloat_quad(d1), d1); + check("tlfloat_quad(f1)", (double)tlfloat_quad(f1), d1); + check("tlfloat_quad(i1)", (double)tlfloat_quad(i1), (double)i1); + check("tlfloat_quad(j1)", (double)tlfloat_quad(j1), (double)j1); + check("tlfloat_quad(k1)", (double)tlfloat_quad(k1), (double)k1); + + check("tlfloat_int128_t(o1)", (double)tlfloat_int128_t(o1), (double)o1); + check("o2d(i1)", o2d(i1), (double)i1); + check("o2d(j1)", o2d(j1), (double)j1); + check("o2d(k1)", o2d(k1), (double)k1); + check("tlfloat_int128_t(q1)", (double)tlfloat_int128_t(q1), (double)q1); + check("o2d(q1)", o2d(q1), (double)q1); + check("q2d(d1)", q2d(d1), d1); + check("q2d(i1)", q2d(i1), (double)i1); + + check("o1 + o2", o1 + o2, d1 + d2); + check("d1 + o2", d1 + o2, d1 + d2); + check("f1 + o2", f1 + o2, d1 + d2); + check("o1 + f2", o1 + f2, d1 + d2); + check("i1 + o2", i1 + o2, i1 + d2); + check("j1 + o2", j1 + o2, (double)j1 + d2); + check("k1 + o2", k1 + o2, (double)k1 + d2); + check("o1 + i2", o1 + i2, d1 + i2); + check("o1 + j2", o1 + j2, d1 + (double)j2); + check("o1 + k2", o1 + k2, d1 + (double)k2); + o0 = o1; o0 += o2; check("o0 = o1; o0 += o2;", o0, d1 + d2); + o0 = o1; o0 += q2; check("o0 = o1; o0 += q2;", o0, d1 + d2); + o0 = o1; o0 += d2; check("o0 = o1; o0 += d2;", o0, d1 + d2); + o0 = o1; o0 += i2; check("o0 = o1; o0 += i2;", o0, d1 + i2); + o0 = o1; o0 += j2; check("o0 = o1; o0 += j2;", o0, d1 + (double)j2); + o0 = o1; o0 += k2; check("o0 = o1; o0 += k2;", o0, d1 + (double)k2); + + o0 = o1; d0 = d1; check("o0 = o1; o0 ++;", o0++, d0++); check("o0 = o1; o0 ++; (2)", o0, d0); + o0 = o1; d0 = d1; check("o0 = o1; ++ o0;", ++o0, ++d0); check("o0 = o1; ++ o0; (2)", o0, d0); + + check("o1 - o2", o1 - o2, d1 - d2); + check("d1 - o2", d1 - o2, d1 - d2); + check("f1 - o2", f1 - o2, d1 - d2); + check("o1 - f2", o1 - f2, d1 - d2); + check("i1 - o2", i1 - o2, i1 - d2); + check("j1 - o2", j1 - o2, (double)j1 - d2); + check("k1 - o2", k1 - o2, (double)k1 - d2); + check("o1 - i2", o1 - i2, d1 - i2); + check("o1 - j2", o1 - j2, d1 - (double)j2); + check("o1 - k2", o1 - k2, d1 - (double)k2); + o0 = o1; o0 -= o2; check("o0 = o1; o0 -= o2;", o0, d1 - d2); + o0 = o1; o0 -= q2; check("o0 = o1; o0 -= q2;", o0, d1 - d2); + o0 = o1; o0 -= d2; check("o0 = o1; o0 -= d2;", o0, d1 - d2); + o0 = o1; o0 -= i2; check("o0 = o1; o0 -= i2;", o0, d1 - i2); + o0 = o1; o0 -= j2; check("o0 = o1; o0 -= j2;", o0, d1 - (double)j2); + o0 = o1; o0 -= k2; check("o0 = o1; o0 -= k2;", o0, d1 - (double)k2); + + o0 = o1; d0 = d1; check("o0 = o1; o0 --;", o0--, d0--); check("o0 = o1; o0 --; (2)", o0, d0); + o0 = o1; d0 = d1; check("o0 = o1; -- o0;", --o0, --d0); check("o0 = o1; -- o0; (2)", o0, d0); + + check("o1 * o2", o1 * o2, d1 * d2); + check("d1 * o2", d1 * o2, d1 * d2); + check("f1 * o2", f1 * o2, d1 * d2); + check("o1 * f2", o1 * f2, d1 * d2); + check("i1 * o2", i1 * o2, i1 * d2); + check("j1 * o2", j1 * o2, (double)j1 * d2); + check("k1 * o2", k1 * o2, (double)k1 * d2); + check("o1 * i2", o1 * i2, d1 * i2); + check("o1 * j2", o1 * j2, d1 * (double)j2); + check("o1 * k2", o1 * k2, d1 * (double)k2); + o0 = o1; o0 *= o2; check("o0 = o1; o0 *= o2;", o0, d1 * d2); + o0 = o1; o0 *= q2; check("o0 = o1; o0 *= q2;", o0, d1 * d2); + o0 = o1; o0 *= d2; check("o0 = o1; o0 *= d2;", o0, d1 * d2); + o0 = o1; o0 *= i2; check("o0 = o1; o0 *= i2;", o0, d1 * i2); + o0 = o1; o0 *= j2; check("o0 = o1; o0 *= j2;", o0, d1 * (double)j2); + o0 = o1; o0 *= k2; check("o0 = o1; o0 *= k2;", o0, d1 * (double)k2); + + check("o1 / o2", o1 / o2, d1 / d2); + check("d1 / o2", d1 / o2, d1 / d2); + check("f1 / o2", f1 / o2, d1 / d2); + check("o1 / f2", o1 / f2, d1 / d2); + check("i1 / o2", i1 / o2, i1 / d2); + check("j1 / o2", j1 / o2, (double)j1 / d2); + check("k1 / o2", k1 / o2, (double)k1 / d2); + check("o1 / i2", o1 / i2, d1 / i2); + check("o1 / j2", o1 / j2, d1 / (double)j2); + check("o1 / k2", o1 / k2, d1 / (double)k2); + o0 = o1; o0 /= o2; check("o0 = o1; o0 /= o2;", o0, d1 / d2); + o0 = o1; o0 /= q2; check("o0 = o1; o0 /= q2;", o0, d1 / d2); + o0 = o1; o0 /= d2; check("o0 = o1; o0 /= d2;", o0, d1 / d2); + o0 = o1; o0 /= i2; check("o0 = o1; o0 /= i2;", o0, d1 / i2); + o0 = o1; o0 /= j2; check("o0 = o1; o0 /= j2;", o0, d1 / (double)j2); + o0 = o1; o0 /= k2; check("o0 = o1; o0 /= k2;", o0, d1 / (double)k2); + + check("q1 + q2", q1 + q2, d1 + d2); + check("d1 + q2", d1 + q2, d1 + d2); + check("f1 + q2", f1 + q2, d1 + d2); + check("q1 + f2", q1 + f2, d1 + d2); + check("i1 + q2", i1 + q2, i1 + d2); + check("j1 + q2", (tlfloat_quad)j1 + q2, (double)j1 + d2); + check("k1 + q2", (tlfloat_quad)k1 + q2, (double)k1 + d2); + check("q1 + i2", q1 + i2, d1 + i2); + check("q1 + j2", q1 + (tlfloat_quad)j2, d1 + (double)j2); + check("q1 + k2", q1 + (tlfloat_quad)k2, d1 + (double)k2); + q0 = q1; q0 += o2; check("q0 = q1; q0 += o2;", q0, d1 + d2); + q0 = q1; q0 += q2; check("q0 = q1; q0 += q2;", q0, d1 + d2); + q0 = q1; q0 += d2; check("q0 = q1; q0 += d2;", q0, d1 + d2); + q0 = q1; q0 += i2; check("q0 = q1; q0 += i2;", q0, d1 + i2); + q0 = q1; q0 += j2; check("q0 = q1; q0 += j2;", q0, d1 + (double)j2); + q0 = q1; q0 += k2; check("q0 = q1; q0 += k2;", q0, d1 + (double)k2); + + check("q1 - q2", q1 - q2, d1 - d2); + check("d1 - q2", d1 - q2, d1 - d2); + check("f1 - q2", f1 - q2, d1 - d2); + check("q1 - f2", q1 - f2, d1 - d2); + check("i1 - q2", i1 - q2, i1 - d2); + check("j1 - q2", (tlfloat_quad)j1 - q2, (double)j1 - d2); + check("k1 - q2", (tlfloat_quad)k1 - q2, (double)k1 - d2); + check("q1 - i2", q1 - i2, d1 - i2); + check("q1 - j2", q1 - (tlfloat_quad)j2, d1 - (double)j2); + check("q1 - k2", q1 - (tlfloat_quad)k2, d1 - (double)k2); + q0 = q1; q0 -= o2; check("q0 = q1; q0 -= o2;", q0, d1 - d2); + q0 = q1; q0 -= q2; check("q0 = q1; q0 -= q2;", q0, d1 - d2); + q0 = q1; q0 -= d2; check("q0 = q1; q0 -= d2;", q0, d1 - d2); + q0 = q1; q0 -= i2; check("q0 = q1; q0 -= i2;", q0, d1 - i2); + q0 = q1; q0 -= j2; check("q0 = q1; q0 -= j2;", q0, d1 - (double)j2); + q0 = q1; q0 -= k2; check("q0 = q1; q0 -= k2;", q0, d1 - (double)k2); + + check("q1 * q2", q1 * q2, d1 * d2); + check("d1 * q2", d1 * q2, d1 * d2); + check("f1 * q2", f1 * q2, d1 * d2); + check("q1 * f2", q1 * f2, d1 * d2); + check("i1 * q2", i1 * q2, i1 * d2); + check("j1 * q2", (tlfloat_quad)j1 * q2, (double)j1 * d2); + check("k1 * q2", (tlfloat_quad)k1 * q2, (double)k1 * d2); + check("q1 * i2", q1 * i2, d1 * i2); + check("q1 * j2", q1 * (tlfloat_quad)j2, d1 * (double)j2); + check("q1 * k2", q1 * (tlfloat_quad)k2, d1 * (double)k2); + q0 = q1; q0 *= o2; check("q0 = q1; q0 *= o2;", q0, d1 * d2); + q0 = q1; q0 *= q2; check("q0 = q1; q0 *= q2;", q0, d1 * d2); + q0 = q1; q0 *= d2; check("q0 = q1; q0 *= d2;", q0, d1 * d2); + q0 = q1; q0 *= i2; check("q0 = q1; q0 *= i2;", q0, d1 * i2); + q0 = q1; q0 *= j2; check("q0 = q1; q0 *= j2;", q0, d1 * (double)j2); + q0 = q1; q0 *= k2; check("q0 = q1; q0 *= k2;", q0, d1 * (double)k2); + + check("q1 / q2", q1 / q2, d1 / d2); + check("d1 / q2", d1 / q2, d1 / d2); + check("f1 / q2", f1 / q2, d1 / d2); + check("q1 / f2", q1 / f2, d1 / d2); + check("i1 / q2", i1 / q2, i1 / d2); + check("j1 / q2", (tlfloat_quad)j1 / q2, (double)j1 / d2); + check("k1 / q2", (tlfloat_quad)k1 / q2, (double)k1 / d2); + check("q1 / i2", q1 / i2, d1 / i2); + check("q1 / j2", q1 / (tlfloat_quad)j2, d1 / (double)j2); + check("q1 / k2", q1 / (tlfloat_quad)k2, d1 / (double)k2); + q0 = q1; q0 /= o2; check("q0 = q1; q0 /= o2;", q0, d1 / d2); + q0 = q1; q0 /= q2; check("q0 = q1; q0 /= q2;", q0, d1 / d2); + q0 = q1; q0 /= d2; check("q0 = q1; q0 /= d2;", q0, d1 / d2); + q0 = q1; q0 /= i2; check("q0 = q1; q0 /= i2;", q0, d1 / i2); + q0 = q1; q0 /= j2; check("q0 = q1; q0 /= j2;", q0, d1 / (double)j2); + q0 = q1; q0 /= k2; check("q0 = q1; q0 /= k2;", q0, d1 / (double)k2); + + const int T = 4; + + check("tlfloat_sqrto(o1)", tlfloat_sqrto(o1), sqrt(d1), T); + check("sqrt_(o1)", sqrt_(o1), sqrt(d1), T); + check("tlfloat_fabso(o1)", tlfloat_fabso(o1), fabs(d1), T); + check("fabs_(o1)", fabs_(o1), fabs(d1), T); + check("tlfloat_trunco(o1)", tlfloat_trunco(o1), trunc(d1), T); + check("trunc_(o1)", trunc_(o1), trunc(d1), T); + check("tlfloat_flooro(o1)", tlfloat_flooro(o1), floor(d1), T); + check("floor_(o1)", floor_(o1), floor(d1), T); + check("tlfloat_ceilo(o1)", tlfloat_ceilo(o1), ceil(d1), T); + check("ceil_(o1)", ceil_(o1), ceil(d1), T); + check("tlfloat_roundo(o1)", tlfloat_roundo(o1), round(d1), T); + check("round_(o1)", round_(o1), round(d1), T); + check("tlfloat_rinto(o1)", tlfloat_rinto(o1), rint(d1), T); + check("rint_(o1)", rint_(o1), rint(d1), T); + check("tlfloat_sino(o1)", tlfloat_sino(o1), sin(d1), T); + check("sin_(o1)", sin_(o1), sin(d1), T); + check("tlfloat_coso(o1)", tlfloat_coso(o1), cos(d1), T); + check("cos_(o1)", cos_(o1), cos(d1), T); + check("tlfloat_tano(o1)", tlfloat_tano(o1), tan(d1), T); + check("tan_(o1)", tan_(o1), tan(d1), T); + if (trunc(d1*2) != d1*2) { + check("tlfloat_sinpio(o1)", tlfloat_sinpio(o1), sin(M_PI*d1), T); + check("sinpi_(o1)", sinpi_(o1), sin(M_PI*d1), T); + check("tlfloat_cospio(o1)", tlfloat_cospio(o1), cos(M_PI*d1), T); + check("cospi_(o1)", cospi_(o1), cos(M_PI*d1), T); + check("tlfloat_tanpio(o1)", tlfloat_tanpio(o1), tan(M_PI*d1), T); + check("tanpi_(o1)", tanpi_(o1), tan(M_PI*d1), T); + } + check("tlfloat_asino(o1)", tlfloat_asino(o1), asin(d1), T); + check("asin_(o1)", asin_(o1), asin(d1), T); + check("tlfloat_acoso(o1)", tlfloat_acoso(o1), acos(d1), T); + check("acos_(o1)", acos_(o1), acos(d1), T); + check("tlfloat_atano(o1)", tlfloat_atano(o1), atan(d1), T); + check("atan_(o1)", atan_(o1), atan(d1), T); + check("tlfloat_sinho(o1)", tlfloat_sinho(o1), sinh(d1), T); + check("sinh_(o1)", sinh_(o1), sinh(d1), T); + check("tlfloat_cosho(o1)", tlfloat_cosho(o1), cosh(d1), T); + check("cosh_(o1)", cosh_(o1), cosh(d1), T); + check("tlfloat_tanho(o1)", tlfloat_tanho(o1), tanh(d1), T); + check("tanh_(o1)", tanh_(o1), tanh(d1), T); + check("tlfloat_asinho(o1)", tlfloat_asinho(o1), asinh(d1), T); + check("asinh_(o1)", asinh_(o1), asinh(d1), T); + check("tlfloat_acosho(o1)", tlfloat_acosho(o1), acosh(d1), T); + check("acosh_(o1)", acosh_(o1), acosh(d1), T); + check("tlfloat_atanho(o1)", tlfloat_atanho(o1), atanh(d1), T); + check("atanh_(o1)", atanh_(o1), atanh(d1), T); + check("tlfloat_erfo(o1)", tlfloat_erfo(o1), erf(d1), T); + check("erf_(o1)", erf_(o1), erf(d1), T); + check("tlfloat_erfco(o1)", tlfloat_erfco(o1), erfc(d1), T); + check("erfc_(o1)", erfc_(o1), erfc(d1), T); + check("tlfloat_tgammao(o1)", tlfloat_tgammao(o1), tgamma(d1), T); + check("tgamma_(o1)", tgamma_(o1), tgamma(d1), T); + check("tlfloat_expo(o1)", tlfloat_expo(o1), exp(d1), T); + check("exp_(o1)", exp_(o1), exp(d1), T); + check("tlfloat_exp2o(o1)", tlfloat_exp2o(o1), exp2(d1), T); + check("exp2_(o1)", exp2_(o1), exp2(d1), T); +#ifdef _GNU_SOURCE + check("tlfloat_exp10o(o1)", tlfloat_exp10o(o1), exp10(d1), T); + check("exp10_(o1)", exp10_(o1), exp10(d1), T); +#endif + check("tlfloat_expm1o(o1)", tlfloat_expm1o(o1), expm1(d1), T); + check("expm1_(o1)", expm1_(o1), expm1(d1), T); + check("tlfloat_logo(o1)", tlfloat_logo(o1), log(d1), T); + check("log_(o1)", log_(o1), log(d1), T); + check("tlfloat_log2o(o1)", tlfloat_log2o(o1), log2(d1), T); + check("log2_(o1)", log2_(o1), log2(d1), T); + check("tlfloat_log10o(o1)", tlfloat_log10o(o1), log10(d1), T); + check("log10_(o1)", log10_(o1), log10(d1), T); + check("tlfloat_logp1o(o1)", tlfloat_log1po(o1), log1p(d1), T); + check("logp1_(o1)", log1p_(o1), log1p(d1), T); + check("tlfloat_cbrto(o1)", tlfloat_cbrto(o1), cbrt(d1), T); + check("cbrt_(o1)", cbrt_(o1), cbrt(d1), T); + check("tlfloat_copysigno(o1, o2)", tlfloat_copysigno(o1, o2), copysign(d1, d2), T); + check("copysign_(o1, o2)", copysign_(o1, o2), copysign(d1, d2), T); + check("tlfloat_fmaxo(o1, o2)", tlfloat_fmaxo(o1, o2), fmax(d1, d2), T); + check("fmax_(o1, o2)", fmax_(o1, o2), fmax(d1, d2), T); + check("tlfloat_fmino(o1, o2)", tlfloat_fmino(o1, o2), fmin(d1, d2), T); + check("fmin_(o1, o2)", fmin_(o1, o2), fmin(d1, d2), T); + check("tlfloat_fdimo(o1, o2)", tlfloat_fdimo(o1, o2), fdim(d1, d2), T); + check("fdim_(o1, o2)", fdim_(o1, o2), fdim(d1, d2), T); + check("tlfloat_nextaftero(o1, o2)", tlfloat_nextaftero(o1, o2), nextafter(d1, d2), T); + check("nextafter_(o1, o2)", nextafter_(o1, o2), nextafter(d1, d2), T); + check("tlfloat_hypoto(o1, o2)", tlfloat_hypoto(o1, o2), hypot(d1, d2), T); + check("hypot_(o1, o2)", hypot_(o1, o2), hypot(d1, d2), T); + check("tlfloat_fmodo(o1, o2)", tlfloat_fmodo(o1, o2), fmod(d1, d2), T); + check("fmod_(o1, o2)", fmod_(o1, o2), fmod(d1, d2), T); + check("tlfloat_remaindero(o1, o2)", tlfloat_remaindero(o1, o2), remainder(d1, d2), T); + check("remainder_(o1, o2)", remainder_(o1, o2), remainder(d1, d2), T); + int qt = 0, qc = 0; +#ifndef __i386__ + check("tlfloat_remquoo(o1, o2, &quo) remainder", tlfloat_remquoo(o1, o2, &qt), remquo(d1, d2, &qc), T); + check("remquo_(o1, o2, &quo) remainder", remquo_(o1, o2, &qt), remquo(d1, d2, &qc), T); + checkQuo("tlfloat_remquoo(o1, o2, &quo) quo", qt, qc); +#endif + check_ilogb("tlfloat_ilogbo(o1)", tlfloat_ilogbo(o1), ilogb(d1)); + check_ilogb("ilogb_(o1)", ilogb_(o1), ilogb(d1)); + check("tlfloat_isnano(o1)", (bool)tlfloat_isnano(o1), (bool)isnan(d1)); + check("isnan_(o1)", (bool)isnan_(o1), (bool)isnan(d1)); + check("tlfloat_isinfo(o1)", (bool)tlfloat_isinfo(o1), (bool)isinf(d1)); + check("isinf_(o1)", (bool)isinf_(o1), (bool)isinf(d1)); + check("tlfloat_finiteo(o1)", (bool)tlfloat_finiteo(o1), (bool)finite__(d1)); + check("finite_(o1)", (bool)finite_(o1), (bool)finite__(d1)); + check("tlfloat_signbito(o1)", (bool)tlfloat_signbito(o1), (bool)signbit(d1)); + check("signbit_(o1)", (bool)signbit_(o1), (bool)signbit(d1)); + check("tlfloat_ldexpo(o1, i2)", tlfloat_ldexpo(o1, i2), ldexp(d1, i2), T); + check("ldexp_(o1, i2)", ldexp_(o1, i2), ldexp(d1, i2), T); + check("tlfloat_frexpo(o1, &qt)", tlfloat_frexpo(o1, &qt), frexp(d1, &qc), T); + check("frexp_(o1, &qt)", frexp_(o1, &qt), frexp(d1, &qc), T); + if (!isnan(d1) && !isinf(d1)) check("exp in tlfloat_frexpo(o1, &qt)", qt, qc); + check("tlfloat_powo(o1, o2)", tlfloat_powo(o1, o2), pow(d1, d2), T); + check("pow_(o1, o2)", pow_(o1, o2), pow(d1, d2), T); + check("tlfloat_atan2o(o1, o2)", tlfloat_atan2o(o1, o2), atan2(d1, d2), T); + check("atan2_(o1, o2)", atan2_(o1, o2), atan2(d1, d2), T); + check("tlfloat_fmao(o1, o2, o2)", tlfloat_fmao(o1, o2, o2), fma(d1, d2, d2), T); + check("fma_(o1, o2, o2)", fma_(o1, o2, o2), fma(d1, d2, d2), T); + + check("tlfloat_sqrtq(q1)", tlfloat_sqrtq(q1), sqrt(d1), T); + check("sqrt_(q1)", sqrt_(q1), sqrt(d1), T); + check("tlfloat_fabsq(q1)", tlfloat_fabsq(q1), fabs(d1), T); + check("fabs_(q1)", fabs_(q1), fabs(d1), T); + check("tlfloat_truncq(q1)", tlfloat_truncq(q1), trunc(d1), T); + check("trunc_(q1)", trunc_(q1), trunc(d1), T); + check("tlfloat_floorq(q1)", tlfloat_floorq(q1), floor(d1), T); + check("floor_(q1)", floor_(q1), floor(d1), T); + check("tlfloat_ceilq(q1)", tlfloat_ceilq(q1), ceil(d1), T); + check("ceil_(q1)", ceil_(q1), ceil(d1), T); + check("tlfloat_roundq(q1)", tlfloat_roundq(q1), round(d1), T); + check("round_(q1)", round_(q1), round(d1), T); + check("tlfloat_rintq(q1)", tlfloat_rintq(q1), rint(d1), T); + check("rint_(q1)", rint_(q1), rint(d1), T); + check("tlfloat_sinq(q1)", tlfloat_sinq(q1), sin(d1), T); + check("sin_(q1)", sin_(q1), sin(d1), T); + check("tlfloat_cosq(q1)", tlfloat_cosq(q1), cos(d1), T); + check("cos_(q1)", cos_(q1), cos(d1), T); + check("tlfloat_tanq(q1)", tlfloat_tanq(q1), tan(d1), T); + check("tan_(q1)", tan_(q1), tan(d1), T); + if (trunc(d1*2) != d1*2) { + check("tlfloat_sinpiq(q1)", tlfloat_sinpiq(q1), sin(M_PI*d1), T); + check("sinpi_(q1)", sinpi_(q1), sin(M_PI*d1), T); + check("tlfloat_cospiq(q1)", tlfloat_cospiq(q1), cos(M_PI*d1), T); + check("cospi_(q1)", cospi_(q1), cos(M_PI*d1), T); + check("tlfloat_tanpiq(q1)", tlfloat_tanpiq(q1), tan(M_PI*d1), T); + check("tanpi_(q1)", tanpi_(q1), tan(M_PI*d1), T); + } + check("tlfloat_asinq(q1)", tlfloat_asinq(q1), asin(d1), T); + check("asin_(q1)", asin_(q1), asin(d1), T); + check("tlfloat_acosq(q1)", tlfloat_acosq(q1), acos(d1), T); + check("acos_(q1)", acos_(q1), acos(d1), T); + check("tlfloat_atanq(q1)", tlfloat_atanq(q1), atan(d1), T); + check("atan_(q1)", atan_(q1), atan(d1), T); + check("tlfloat_sinhq(q1)", tlfloat_sinhq(q1), sinh(d1), T); + check("sinh_(q1)", sinh_(q1), sinh(d1), T); + check("tlfloat_coshq(q1)", tlfloat_coshq(q1), cosh(d1), T); + check("cosh_(q1)", cosh_(q1), cosh(d1), T); + check("tlfloat_tanhq(q1)", tlfloat_tanhq(q1), tanh(d1), T); + check("tanh_(q1)", tanh_(q1), tanh(d1), T); + check("tlfloat_asinhq(q1)", tlfloat_asinhq(q1), asinh(d1), T); + check("asinh_(q1)", asinh_(q1), asinh(d1), T); + check("tlfloat_acoshq(q1)", tlfloat_acoshq(q1), acosh(d1), T); + check("acosh_(q1)", acosh_(q1), acosh(d1), T); + check("tlfloat_atanhq(q1)", tlfloat_atanhq(q1), atanh(d1), T); + check("atanh_(q1)", atanh_(q1), atanh(d1), T); + check("tlfloat_erfq(q1)", tlfloat_erfq(q1), erf(d1), T); + check("erf_(q1)", erf_(q1), erf(d1), T); + check("tlfloat_erfcq(q1)", tlfloat_erfcq(q1), erfc(d1), T); + check("erfc_(q1)", erfc_(q1), erfc(d1), T); + check("tlfloat_tgammaq(q1)", tlfloat_tgammaq(q1), tgamma(d1), T); + check("tgamma_(q1)", tgamma_(q1), tgamma(d1), T); + check("tlfloat_expq(q1)", tlfloat_expq(q1), exp(d1), T); + check("exp_(q1)", exp_(q1), exp(d1), T); + check("tlfloat_exp2q(q1)", tlfloat_exp2q(q1), exp2(d1), T); + check("exp2_(q1)", exp2_(q1), exp2(d1), T); +#ifdef _GNU_SOURCE + check("tlfloat_exp10q(q1)", tlfloat_exp10q(q1), exp10(d1), T); + check("exp10_(q1)", exp10_(q1), exp10(d1), T); +#endif + check("tlfloat_expm1q(q1)", tlfloat_expm1q(q1), expm1(d1), T); + check("expm1_(q1)", expm1_(q1), expm1(d1), T); + check("tlfloat_logq(q1)", tlfloat_logq(q1), log(d1), T); + check("log_(q1)", log_(q1), log(d1), T); + check("tlfloat_log2q(q1)", tlfloat_log2q(q1), log2(d1), T); + check("log2_(q1)", log2_(q1), log2(d1), T); + check("tlfloat_log10q(q1)", tlfloat_log10q(q1), log10(d1), T); + check("log10_(q1)", log10_(q1), log10(d1), T); + check("tlfloat_logp1q(q1)", tlfloat_log1pq(q1), log1p(d1), T); + check("logp1_(q1)", log1p_(q1), log1p(d1), T); + check("tlfloat_cbrtq(q1)", tlfloat_cbrtq(q1), cbrt(d1), T); + check("cbrt_(q1)", cbrt_(q1), cbrt(d1), T); + check("tlfloat_copysignq(q1, q2)", tlfloat_copysignq(q1, q2), copysign(d1, d2), T); + check("copysign_(q1, q2)", copysign_(q1, q2), copysign(d1, d2), T); + check("tlfloat_fmaxq(q1, q2)", tlfloat_fmaxq(q1, q2), fmax(d1, d2), T); + check("fmax_(q1, q2)", fmax_(q1, q2), fmax(d1, d2), T); + check("tlfloat_fminq(q1, q2)", tlfloat_fminq(q1, q2), fmin(d1, d2), T); + check("fmin_(q1, q2)", fmin_(q1, q2), fmin(d1, d2), T); + check("tlfloat_fdimq(q1, q2)", tlfloat_fdimq(q1, q2), fdim(d1, d2), T); + check("fdim_(q1, q2)", fdim_(q1, q2), fdim(d1, d2), T); + check("tlfloat_nextafterq(q1, q2)", tlfloat_nextafterq(q1, q2), nextafter(d1, d2), T); + check("nextafter_(q1, q2)", nextafter_(q1, q2), nextafter(d1, d2), T); + check("tlfloat_hypotq(q1, q2)", tlfloat_hypotq(q1, q2), hypot(d1, d2), T); + check("hypot_(q1, q2)", hypot_(q1, q2), hypot(d1, d2), T); + check("tlfloat_fmodq(q1, q2)", tlfloat_fmodq(q1, q2), fmod(d1, d2), T); + check("fmod_(q1, q2)", fmod_(q1, q2), fmod(d1, d2), T); + check("tlfloat_remainderq(q1, q2)", tlfloat_remainderq(q1, q2), remainder(d1, d2), T); + check("remainder_(q1, q2)", remainder_(q1, q2), remainder(d1, d2), T); + qt = qc = 0; +#ifndef __i386__ + check("tlfloat_remquoq(q1, q2, &quo) remainder", tlfloat_remquoq(q1, q2, &qt), remquo(d1, d2, &qc), T); + check("remquo_(q1, q2, &quo) remainder", remquo_(q1, q2, &qt), remquo(d1, d2, &qc), T); + checkQuo("tlfloat_remquoq(q1, q2, &quo) quo", qt, qc); +#endif + check_ilogb("tlfloat_ilogbq(q1)", tlfloat_ilogbq(q1), ilogb(d1)); + check_ilogb("ilogb_(q1)", ilogb_(q1), ilogb(d1)); + check("tlfloat_isnanq(q1)", (bool)tlfloat_isnanq(q1), (bool)isnan(d1)); + check("isnan_(q1)", (bool)isnan_(q1), (bool)isnan(d1)); + check("tlfloat_isinfq(q1)", (bool)tlfloat_isinfq(q1), (bool)isinf(d1)); + check("isinf_(q1)", (bool)isinf_(q1), (bool)isinf(d1)); + check("tlfloat_finiteq(q1)", (bool)tlfloat_finiteq(q1), (bool)finite__(d1)); + check("finite_(q1)", (bool)finite_(q1), (bool)finite__(d1)); + check("tlfloat_signbitq(q1)", (bool)tlfloat_signbitq(q1), (bool)signbit(d1)); + check("signbit_(q1)", (bool)signbit_(q1), (bool)signbit(d1)); + check("tlfloat_ldexpq(q1, i2)", tlfloat_ldexpq(q1, i2), ldexp(d1, i2), T); + check("ldexp_(q1, i2)", ldexp_(q1, i2), ldexp(d1, i2), T); + check("tlfloat_frexpq(q1, &qt)", tlfloat_frexpq(q1, &qt), frexp(d1, &qc), T); + check("frexp_(q1, &qt)", frexp_(q1, &qt), frexp(d1, &qc), T); + if (!isnan(d1) && !isinf(d1)) check("exp in tlfloat_frexpq(q1, &qt)", qt, qc); + check("tlfloat_powq(q1, q2)", tlfloat_powq(q1, q2), pow(d1, d2), T); + check("pow_(q1, q2)", pow_(q1, q2), pow(d1, d2), T); + check("tlfloat_atan2q(q1, q2)", tlfloat_atan2q(q1, q2), atan2(d1, d2), T); + check("atan2_(q1, q2)", atan2_(q1, q2), atan2(d1, d2), T); + check("tlfloat_fmaq(q1, q2, q2)", tlfloat_fmaq(q1, q2, q2), fma(d1, d2, d2), T); + check("fma_(q1, q2, q2)", fma_(q1, q2, q2), fma(d1, d2, d2), T); + + check("sqrtq(q1)", sqrtq(q1), sqrt(d1), T); + check("fabsq(q1)", fabsq(q1), fabs(d1), T); + check("truncq(q1)", truncq(q1), trunc(d1), T); + check("floorq(q1)", floorq(q1), floor(d1), T); + check("ceilq(q1)", ceilq(q1), ceil(d1), T); + check("roundq(q1)", roundq(q1), round(d1), T); + check("rintq(q1)", rintq(q1), rint(d1), T); + check("sinq(q1)", sinq(q1), sin(d1), T); + check("cosq(q1)", cosq(q1), cos(d1), T); + { + tlfloat_quad s, c; + sincosq(q1, &s, &c); + check("sin in sincosq(q1)", s, sin(d1), T); + check("cos in sincosq(q1)", c, cos(d1), T); + } + check("tanq(q1)", tanq(q1), tan(d1), T); + check("asinq(q1)", asinq(q1), asin(d1), T); + check("acosq(q1)", acosq(q1), acos(d1), T); + check("atanq(q1)", atanq(q1), atan(d1), T); + check("sinhq(q1)", sinhq(q1), sinh(d1), T); + check("coshq(q1)", coshq(q1), cosh(d1), T); + check("tanhq(q1)", tanhq(q1), tanh(d1), T); + check("asinhq(q1)", asinhq(q1), asinh(d1), T); + check("acoshq(q1)", acoshq(q1), acosh(d1), T); + check("atanhq(q1)", atanhq(q1), atanh(d1), T); + check("erfq(q1)", erfq(q1), erf(d1), T); + check("erfcq(q1)", erfcq(q1), erfc(d1), T); + check("tgammaq(q1)", tgammaq(q1), tgamma(d1), T); + //check("lgammaq(q1)", lgammaq(q1), lgamma(d1), T); + check("expq(q1)", expq(q1), exp(d1), T); + check("exp2q(q1)", exp2q(q1), exp2(d1), T); +#ifdef _GNU_SOURCE + check("exp10q(q1)", exp10q(q1), exp10(d1), T); +#endif + check("expm1q(q1)", expm1q(q1), expm1(d1), T); + check("logq(q1)", logq(q1), log(d1), T); + check("log2q(q1)", log2q(q1), log2(d1), T); + check("log10q(q1)", log10q(q1), log10(d1), T); + check("logp1q(q1)", log1pq(q1), log1p(d1), T); + check("cbrtq(q1)", cbrtq(q1), cbrt(d1), T); + check("copysignq(q1, q2)", copysignq(q1, q2), copysign(d1, d2), T); + check("fmaxq(q1, q2)", fmaxq(q1, q2), fmax(d1, d2), T); + check("fminq(q1, q2)", fminq(q1, q2), fmin(d1, d2), T); + check("fdimq(q1, q2)", fdimq(q1, q2), fdim(d1, d2), T); + check("nextafterq(q1, q2)", nextafterq(q1, q2), nextafter(d1, d2), T); + check("hypotq(q1, q2)", hypotq(q1, q2), hypot(d1, d2), T); + check("fmodq(q1, q2)", fmodq(q1, q2), fmod(d1, d2), T); + check("remainderq(q1, q2)", remainderq(q1, q2), remainder(d1, d2), T); + qt = qc = 0; +#ifndef __i386__ + check("remquoq(q1, q2, &quo) remainder", remquoq(q1, q2, &qt), remquo(d1, d2, &qc), T); + checkQuo("remquoq(q1, q2, &quo) quo", qt, qc); +#endif + check_ilogb("ilogbq(q1)", ilogbq(q1), ilogb(d1)); + check("isnanq(q1)", (bool)isnanq(q1), (bool)isnan(d1)); + check("isinfq(q1)", (bool)isinfq(q1), (bool)isinf(d1)); + check("finiteq(q1)", (bool)finiteq(q1), (bool)finite_(d1)); + check("signbitq(q1)", (bool)signbitq(q1), (bool)signbit(d1)); + check("ldexpq(q1, i2)", ldexpq(q1, i2), ldexp(d1, i2), T); + check("powq(q1, q2)", powq(q1, q2), pow(d1, d2), T); + check("atan2q(q1, q2)", atan2q(q1, q2), atan2(d1, d2), T); + check("fmaq(q1, q2, q2)", fmaq(q1, q2, q2), fma(d1, d2, d2), T); + + check("+o1 == +o2", +o1 == +o2, +d1 == +d2); + check("-o1 == -o2", -o1 == -o2, -d1 == -d2); + + check("o1 == o2", o1 == o2, d1 == d2); + check("o1 != o2", o1 != o2, d1 != d2); + check("o1 > o2", o1 > o2, d1 > d2); + check("o1 >= o2", o1 >= o2, d1 >= d2); + check("o1 < o2", o1 < o2, d1 < d2); + check("o1 <= o2", o1 <= o2, d1 <= d2); + + check("o1 == q2", o1 == q2, d1 == d2); + check("o1 != q2", o1 != q2, d1 != d2); + check("o1 > q2", o1 > q2, d1 > d2); + check("o1 >= q2", o1 >= q2, d1 >= d2); + check("o1 < q2", o1 < q2, d1 < d2); + check("o1 <= q2", o1 <= q2, d1 <= d2); + + check("o1 == d2", o1 == d2, d1 == d2); + check("o1 != d2", o1 != d2, d1 != d2); + check("o1 > d2", o1 > d2, d1 > d2); + check("o1 >= d2", o1 >= d2, d1 >= d2); + check("o1 < d2", o1 < d2, d1 < d2); + check("o1 <= d2", o1 <= d2, d1 <= d2); + + check("o1 == i2", o1 == i2, d1 == i2); + check("o1 != i2", o1 != i2, d1 != i2); + check("o1 > i2", o1 > i2, d1 > i2); + check("o1 >= i2", o1 >= i2, d1 >= i2); + check("o1 < i2", o1 < i2, d1 < i2); + check("o1 <= i2", o1 <= i2, d1 <= i2); + + check("o1 == j2", o1 == j2, d1 == (double)j2); + check("o1 != j2", o1 != j2, d1 != (double)j2); + check("o1 > j2", o1 > j2, d1 > (double)j2); + check("o1 >= j2", o1 >= j2, d1 >= (double)j2); + check("o1 < j2", o1 < j2, d1 < (double)j2); + check("o1 <= j2", o1 <= j2, d1 <= (double)j2); + + check("o1 == k2", o1 == k2, d1 == (double)k2); + check("o1 != k2", o1 != k2, d1 != (double)k2); + check("o1 > k2", o1 > k2, d1 > (double)k2); + check("o1 >= k2", o1 >= k2, d1 >= (double)k2); + check("o1 < k2", o1 < k2, d1 < (double)k2); + check("o1 <= k2", o1 <= k2, d1 <= (double)k2); + + check("+q1 == +q2", +q1 == +q2, +d1 == +d2); + check("-q1 == -q2", -q1 == -q2, -d1 == -d2); + + check("q1 == o2", q1 == o2, d1 == d2); + check("q1 != o2", q1 != o2, d1 != d2); + check("q1 > o2", q1 > o2, d1 > d2); + check("q1 >= o2", q1 >= o2, d1 >= d2); + check("q1 < o2", q1 < o2, d1 < d2); + check("q1 <= o2", q1 <= o2, d1 <= d2); + + check("q1 == q2", q1 == q2, d1 == d2); + check("q1 != q2", q1 != q2, d1 != d2); + check("q1 > q2", q1 > q2, d1 > d2); + check("q1 >= q2", q1 >= q2, d1 >= d2); + check("q1 < q2", q1 < q2, d1 < d2); + check("q1 <= q2", q1 <= q2, d1 <= d2); + + check("q1 == d2", q1 == d2, d1 == d2); + check("q1 != d2", q1 != d2, d1 != d2); + check("q1 > d2", q1 > d2, d1 > d2); + check("q1 >= d2", q1 >= d2, d1 >= d2); + check("q1 < d2", q1 < d2, d1 < d2); + check("q1 <= d2", q1 <= d2, d1 <= d2); + + check("q1 == i2", q1 == i2, d1 == i2); + check("q1 != i2", q1 != i2, d1 != i2); + check("q1 > i2", q1 > i2, d1 > i2); + check("q1 >= i2", q1 >= i2, d1 >= i2); + check("q1 < i2", q1 < i2, d1 < i2); + check("q1 <= i2", q1 <= i2, d1 <= i2); + + check("q1 == j2", q1 == (tlfloat_quad)j2, d1 == (double)j2); + check("q1 != j2", q1 != (tlfloat_quad)j2, d1 != (double)j2); + check("q1 > j2", q1 > (tlfloat_quad)j2, d1 > (double)j2); + check("q1 >= j2", q1 >= (tlfloat_quad)j2, d1 >= (double)j2); + check("q1 < j2", q1 < (tlfloat_quad)j2, d1 < (double)j2); + check("q1 <= j2", q1 <= (tlfloat_quad)j2, d1 <= (double)j2); + + check("q1 == k2", q1 == (tlfloat_quad)k2, d1 == (double)k2); + check("q1 != k2", q1 != (tlfloat_quad)k2, d1 != (double)k2); + check("q1 > k2", q1 > (tlfloat_quad)k2, d1 > (double)k2); + check("q1 >= k2", q1 >= (tlfloat_quad)k2, d1 >= (double)k2); + check("q1 < k2", q1 < (tlfloat_quad)k2, d1 < (double)k2); + check("q1 <= k2", q1 <= (tlfloat_quad)k2, d1 <= (double)k2); + +#if __cplusplus >= 202002L + o1 = (tlfloat_octuple)tlfloat::Octuple(s1.c_str()); + check("cast Octuple -> tlfloat_octuple", o1, d1); + check("cast tlfloat_octuple -> Octuple", isnan(tlfloat::Octuple(o1)) || tlfloat::Octuple(o1) == tlfloat::Octuple(s1.c_str()), true); + + q1 = (tlfloat_quad)tlfloat::Quad(s1.c_str()); + check("cast Quad -> tlfloat_quad", q1, d1); + check("cast tlfloat_quad -> Quad", isnan(tlfloat::Quad(q1)) || tlfloat::Quad(q1) == tlfloat::Quad(s1.c_str()), true); +#endif +} + +tlfloat_octuple AGMo(int N) { + tlfloat_octuple y = tlfloat_sqrto(2.0) - 1; + tlfloat_octuple a = tlfloat_ldexpo(y * y, 1); + + for(int k=0;k +#include +#include +#include + +#include "tlfloat/tlmath.hpp" +#include "testerutil.hpp" + +using namespace std; +using namespace tlfloat; + +int cudaMultiProcessorCount = -1; +int N = 0, blockSize = 0; +int nLoop = 1 << 4, nThread = 1 << 8, nBlock = 0; + +#define cudaErrorCheck(ans) { gpuAssert((ans), __FILE__, __LINE__); } +inline void gpuAssert(cudaError_t code, const char *file, int line, bool abort=true) { + if (code != cudaSuccess) { + fprintf(stderr,"%s(%d) : GPUassert: %s\n", file, line, cudaGetErrorString(code)); + if (abort) exit(code); + } +} + +int64_t getTime() { + return chrono::duration_cast + (chrono::high_resolution_clock::now() - chrono::system_clock::from_time_t(0)).count(); +} + +template +T rnd(shared_ptr rng) { + for(;;) { + T f; + rng->nextBytes((unsigned char *)&f, sizeof(f)); + f = frexp(f, nullptr); + if (finite(f)) return f; + } +} + +void *cudaMallocManaged_(size_t size) { + void *ptr; + cudaErrorCheck( cudaMallocManaged(&ptr, size) ); + return ptr; +} + +// + +template +using Func1 = T (*)(const T&); + +template func> +__global__ void kern(int n, T *r, T *x) { + int index = threadIdx.x, stride = blockDim.x; + for (int i = index; i < n; i += stride) r[i] = func(x[i]); +} + +template func> +void doTest(const char *mes, T *r, T *x) { + auto t0 = getTime(); + kern<<>>(N, r, x); + cudaErrorCheck( cudaPeekAtLastError() ); + cudaErrorCheck( cudaDeviceSynchronize() ); + + auto t1 = getTime(); + for (int i = 0; i < N; i++) { + if (r[i].m == func(x[i]).m) continue; + cout << mes << " : NG" << endl; + cout << "arg1 : " << to_string(x[i], 75) << endl; + cout << "device : " << to_string(r[i], 75) << endl; + cout << "host : " << to_string(func(x[i]), 75) << endl; + exit(-1); + } + auto t2 = getTime(); + cout << mes << " : OK (D:" << (t1 - t0)/1000.0 << "ms, H:" << (t2 - t1)/1000.0 << "ms)" << endl; +} + +// + +template +using Func2 = T (*)(const T&, const T&); + +template func> +__global__ void kern(int n, T *r, T *x, T *y) { + int index = threadIdx.x, stride = blockDim.x; + for (int i = index; i < n; i += stride) r[i] = func(x[i], y[i]); +} + +template func> +void doTest(const char *mes, T *r, T *x, T *y) { + auto t0 = getTime(); + kern<<>>(N, r, x, y); + cudaErrorCheck( cudaPeekAtLastError() ); + cudaErrorCheck( cudaDeviceSynchronize() ); + + auto t1 = getTime(); + for (int i = 0; i < N; i++) { + if (r[i].m == func(x[i], y[i]).m) continue; + cout << mes << " : NG" << endl; + cout << "arg1 : " << to_string(x[i], 75) << endl; + cout << "arg2 : " << to_string(y[i], 75) << endl; + cout << "device : " << to_string(r[i], 75) << endl; + cout << "host : " << to_string(func(x[i], y[i]), 75) << endl; + exit(-1); + } + auto t2 = getTime(); + cout << mes << " : OK (D:" << (t1 - t0)/1000.0 << "ms, H:" << (t2 - t1)/1000.0 << "ms)" << endl; +} + +// + +template +using Func2i = xpair (*)(const T&, const T&); + +template func> +__global__ void kern(int n, T *r, int64_t *ri, T *x, T *y) { + int index = threadIdx.x, stride = blockDim.x; + for (int i = index; i < n; i += stride) { + xpair p = func(x[i], y[i]); + r[i] = p.first; + ri[i] = p.second; + } +} + +template func> +void doTest(const char *mes, T *r, int64_t *ri, T *x, T *y) { + auto t0 = getTime(); + kern<<>>(N, r, ri, x, y); + cudaErrorCheck( cudaPeekAtLastError() ); + cudaErrorCheck( cudaDeviceSynchronize() ); + + auto t1 = getTime(); + for (int i = 0; i < N; i++) { + auto p = func(x[i], y[i]); + if (r[i].m == p.first.m && ri[i] == p.second) continue; + cout << mes << " : NG" << endl; + cout << "arg1 : " << to_string(x[i], 75) << endl; + cout << "device : " << to_string(r[i], 75) << ", " << ri[i] << endl; + cout << "host : " << to_string(p.first, 75) << p.second << endl; + exit(-1); + } + auto t2 = getTime(); + cout << mes << " : OK (D:" << (t1 - t0)/1000.0 << "ms, H:" << (t2 - t1)/1000.0 << "ms)" << endl; +} + +// + +template +using Func3 = T (*)(const T&, const T&, const T&); + +template func> +__global__ void kern(int n, T *r, T *x, T *y, T *z) { + int index = threadIdx.x, stride = blockDim.x; + for (int i = index; i < n; i += stride) r[i] = func(x[i], y[i], z[i]); +} + +template func> +void doTest(const char *mes, T *r, T *x, T *y, T *z) { + auto t0 = getTime(); + kern<<>>(N, r, x, y, z); + cudaErrorCheck( cudaPeekAtLastError() ); + cudaErrorCheck( cudaDeviceSynchronize() ); + + auto t1 = getTime(); + for (int i = 0; i < N; i++) { + if (r[i].m == func(x[i], y[i], z[i]).m) continue; + cout << mes << " : NG" << endl; + cout << "arg1 : " << to_string(x[i], 75) << endl; + cout << "arg2 : " << to_string(y[i], 75) << endl; + cout << "arg3 : " << to_string(z[i], 75) << endl; + cout << "device : " << to_string(r[i], 75) << endl; + cout << "host : " << to_string(func(x[i], y[i], z[i]), 75) << endl; + exit(-1); + } + auto t2 = getTime(); + cout << mes << " : OK (D:" << (t1 - t0)/1000.0 << "ms, H:" << (t2 - t1)/1000.0 << "ms)" << endl; +} + +// + +template static constexpr T fabs_(const T &a1) { return fabs(a1); } +template static constexpr T copysign_(const T &a1, const T &a2) { return copysign(a1, a2); } +template static constexpr T fmax_(const T &a1, const T &a2) { return fmax(a1, a2); } +template static constexpr T fmin_(const T &a1, const T &a2) { return fmin(a1, a2); } +template static constexpr T fdim_(const T &a1, const T &a2) { return fdim(a1, a2); } +template static constexpr T add_(const T &a1, const T &a2) { return a1 + a2; } +template static constexpr T mul_(const T &a1, const T &a2) { return a1 * a2; } +template static constexpr T div_(const T &a1, const T &a2) { return a1 / a2; } +template static constexpr T fma_(const T &a1, const T &a2, const T &a3) { return fma(a1, a2, a3); } +template static constexpr T sqrt_(const T &a) { return sqrt(a); } +template static constexpr T hypot_(const T &a1, const T &a2) { return hypot(a1, a2); } +template static constexpr T trunc_(const T &a) { return trunc(a); } +template static constexpr T floor_(const T &a) { return floor(a); } +template static constexpr T ceil_(const T &a) { return ceil(a); } +template static constexpr T round_(const T &a) { return round(a); } +template static constexpr T rint_(const T &a) { return rint(a); } +template static constexpr T nextafter_(const T &a1, const T &a2) { return nextafter(a1, a2); } +template static constexpr T lgamma_(const T &a1) { return lgamma(a1, nullptr); } + +int main(int argc, char **argv) { + { + int device; + cudaErrorCheck(cudaGetDevice(&device)); + + cudaDeviceProp devProp; + cudaErrorCheck(cudaGetDeviceProperties(&devProp, device)); + + cudaMultiProcessorCount = devProp.multiProcessorCount; + nBlock = devProp.multiProcessorCount; + } + + if (argc >= 2) nThread = atoi(argv[1]); + if (argc >= 3) nLoop = atoi(argv[2]); + + N = nLoop * nThread * nBlock; + + cout << "N = " << N << ", nLoop = " << nLoop << ", nBlock = " << nBlock << ", nThread = " << nThread << endl; + + auto rng = createPreferredRNG(); + + Octuple *xo = (Octuple *)cudaMallocManaged_(N*sizeof(Octuple)); + Octuple *yo = (Octuple *)cudaMallocManaged_(N*sizeof(Octuple)); + Octuple *zo = (Octuple *)cudaMallocManaged_(N*sizeof(Octuple)); + Octuple *ro = (Octuple *)cudaMallocManaged_(N*sizeof(Octuple)); + + Quad *xq = (Quad *)cudaMallocManaged_(N*sizeof(Quad)); + Quad *yq = (Quad *)cudaMallocManaged_(N*sizeof(Quad)); + Quad *zq = (Quad *)cudaMallocManaged_(N*sizeof(Quad)); + Quad *rq = (Quad *)cudaMallocManaged_(N*sizeof(Quad)); + + Double *xd = (Double *)cudaMallocManaged_(N*sizeof(Double)); + Double *yd = (Double *)cudaMallocManaged_(N*sizeof(Double)); + Double *zd = (Double *)cudaMallocManaged_(N*sizeof(Double)); + Double *rd = (Double *)cudaMallocManaged_(N*sizeof(Double)); + + Float *xf = (Float *)cudaMallocManaged_(N*sizeof(Float)); + Float *yf = (Float *)cudaMallocManaged_(N*sizeof(Float)); + Float *zf = (Float *)cudaMallocManaged_(N*sizeof(Float)); + Float *rf = (Float *)cudaMallocManaged_(N*sizeof(Float)); + + Half *xh = (Half *)cudaMallocManaged_(N*sizeof(Half)); + Half *yh = (Half *)cudaMallocManaged_(N*sizeof(Half)); + Half *zh = (Half *)cudaMallocManaged_(N*sizeof(Half)); + Half *rh = (Half *)cudaMallocManaged_(N*sizeof(Half)); + + int64_t *ri = (int64_t *)cudaMallocManaged_(N*sizeof(int64_t)); + + { + vector v; + v = genTestValues(N, rng); + for(int i=0;i(N, rng); + for(int i=0;i(N, rng); + for(int i=0;i v; + v = genTestValues(N, rng); + for(int i=0;i(N, rng); + for(int i=0;i(N, rng); + for(int i=0;i v; + v = genTestValues(N, rng); + for(int i=0;i(N, rng); + for(int i=0;i(N, rng); + for(int i=0;i v; + v = genTestValues(N, rng); + for(int i=0;i(N, rng); + for(int i=0;i(N, rng); + for(int i=0;i v; + v = genTestValues(N, rng); + for(int i=0;i(N, rng); + for(int i=0;i(N, rng); + for(int i=0;i("Octuple fabs", ro, xo); + doTest("Quad fabs", rq, xq); + doTest("Double fabs", rd, xd); + doTest("Float fabs", rf, xf); + doTest("Half fabs", rh, xh); + + doTest("Octuple copysign", ro, xo, yo); + doTest("Quad copysign", rq, xq, yq); + doTest("Double copysign", rd, xd, yd); + doTest("Float copysign", rf, xf, yf); + doTest("Half copysign", rh, xh, yh); + + doTest("Octuple fmax", ro, xo, yo); + doTest("Quad fmax", rq, xq, yq); + doTest("Double fmax", rd, xd, yd); + doTest("Float fmax", rf, xf, yf); + doTest("Half fmax", rh, xh, yh); + + doTest("Octuple fmin", ro, xo, yo); + doTest("Quad fmin", rq, xq, yq); + doTest("Double fmin", rd, xd, yd); + doTest("Float fmin", rf, xf, yf); + doTest("Half fmin", rh, xh, yh); + + doTest("Octuple fdim", ro, xo, yo); + doTest("Quad fdim", rq, xq, yq); + doTest("Double fdim", rd, xd, yd); + doTest("Float fdim", rf, xf, yf); + doTest("Half fdim", rh, xh, yh); + + doTest("Octuple add_", ro, xo, yo); + doTest("Quad add_", rq, xq, yq); + doTest("Double add_", rd, xd, yd); + doTest("Float add_", rf, xf, yf); + doTest("Half add_", rh, xh, yh); + + doTest("Octuple mul_", ro, xo, yo); + doTest("Quad mul_", rq, xq, yq); + doTest("Double mul_", rd, xd, yd); + doTest("Float mul_", rf, xf, yf); + doTest("Half mul_", rh, xh, yh); + + doTest("Octuple div_", ro, xo, yo); + doTest("Quad div_", rq, xq, yq); + doTest("Double div_", rd, xd, yd); + doTest("Float div_", rf, xf, yf); + doTest("Half div_", rh, xh, yh); + + doTest("Octuple fma", ro, xo, yo, zo); + doTest("Quad fma", rq, xq, yq, zq); + doTest("Double fma", rd, xd, yd, zd); + doTest("Float fma", rf, xf, yf, zf); + doTest("Half fma", rh, xh, yh, zh); + + doTest("Octuple sqrt", ro, xo); + doTest("Quad sqrt", rq, xq); + doTest("Double sqrt", rd, xd); + doTest("Float sqrt", rf, xf); + doTest("Half sqrt", rh, xh); + + doTest("Octuple hypot", ro, xo, yo); + doTest("Quad hypot", rq, xq, yq); + doTest("Double hypot", rd, xd, yd); + doTest("Float hypot", rf, xf, yf); + doTest("Half hypot", rh, xh, yh); + + doTest("Octuple trunc", ro, xo); + doTest("Quad trunc", rq, xq); + doTest("Double trunc", rd, xd); + doTest("Float trunc", rf, xf); + doTest("Half trunc", rh, xh); + + doTest("Octuple floor", ro, xo); + doTest("Quad floor", rq, xq); + doTest("Double floor", rd, xd); + doTest("Float floor", rf, xf); + doTest("Half floor", rh, xh); + + doTest("Octuple ceil", ro, xo); + doTest("Quad ceil", rq, xq); + doTest("Double ceil", rd, xd); + doTest("Float ceil", rf, xf); + doTest("Half ceil", rh, xh); + + doTest("Octuple round", ro, xo); + doTest("Quad round", rq, xq); + doTest("Double round", rd, xd); + doTest("Float round", rf, xf); + doTest("Half round", rh, xh); + + doTest("Octuple rint", ro, xo); + doTest("Quad rint", rq, xq); + doTest("Double rint", rd, xd); + doTest("Float rint", rf, xf); + doTest("Half rint", rh, xh); + + doTest("Octuple nextafter", ro, xo, yo); + doTest("Quad nextafter", rq, xq, yq); + doTest("Double nextafter", rd, xd, yd); + doTest("Float nextafter", rf, xf, yf); + doTest("Half nextafter", rh, xh, yh); + + doTest("Octuple sin", ro, xo); + doTest("Quad sin", rq, xq); + doTest("Double sin", rd, xd); + doTest("Float sin", rf, xf); + doTest("Half sin", rh, xh); + + doTest("Octuple cos", ro, xo); + doTest("Quad cos", rq, xq); + doTest("Double cos", rd, xd); + doTest("Float cos", rf, xf); + doTest("Half cos", rh, xh); + + doTest("Octuple tan", ro, xo); + doTest("Quad tan", rq, xq); + doTest("Double tan", rd, xd); + doTest("Float tan", rf, xf); + doTest("Half tan", rh, xh); + + doTest("Octuple sinpi", ro, xo); + doTest("Quad sinpi", rq, xq); + doTest("Double sinpi", rd, xd); + doTest("Float sinpi", rf, xf); + doTest("Half sinpi", rh, xh); + + doTest("Octuple cospi", ro, xo); + doTest("Quad cospi", rq, xq); + doTest("Double cospi", rd, xd); + doTest("Float cospi", rf, xf); + doTest("Half cospi", rh, xh); + + doTest("Octuple tanpi", ro, xo); + doTest("Quad tanpi", rq, xq); + doTest("Double tanpi", rd, xd); + doTest("Float tanpi", rf, xf); + doTest("Half tanpi", rh, xh); + + doTest("Octuple atan2", ro, xo, yo); + doTest("Quad atan2", rq, xq, yq); + doTest("Double atan2", rd, xd, yd); + doTest("Float atan2", rf, xf, yf); + doTest("Half atan2", rh, xh, yh); + + doTest("Octuple asin", ro, xo); + doTest("Quad asin", rq, xq); + doTest("Double asin", rd, xd); + doTest("Float asin", rf, xf); + doTest("Half asin", rh, xh); + + doTest("Octuple acos", ro, xo); + doTest("Quad acos", rq, xq); + doTest("Double acos", rd, xd); + doTest("Float acos", rf, xf); + doTest("Half acos", rh, xh); + + doTest("Octuple atan", ro, xo); + doTest("Quad atan", rq, xq); + doTest("Double atan", rd, xd); + doTest("Float atan", rf, xf); + doTest("Half atan", rh, xh); + + doTest("Octuple log", ro, xo); + doTest("Quad log", rq, xq); + doTest("Double log", rd, xd); + doTest("Float log", rf, xf); + doTest("Half log", rh, xh); + + doTest("Octuple log2", ro, xo); + doTest("Quad log2", rq, xq); + doTest("Double log2", rd, xd); + doTest("Float log2", rf, xf); + doTest("Half log2", rh, xh); + + doTest("Octuple log10", ro, xo); + doTest("Quad log10", rq, xq); + doTest("Double log10", rd, xd); + doTest("Float log10", rf, xf); + doTest("Half log10", rh, xh); + + doTest("Octuple log1p", ro, xo); + doTest("Quad log1p", rq, xq); + doTest("Double log1p", rd, xd); + doTest("Float log1p", rf, xf); + doTest("Half log1p", rh, xh); + + doTest("Octuple exp", ro, xo); + doTest("Quad exp", rq, xq); + doTest("Double exp", rd, xd); + doTest("Float exp", rf, xf); + doTest("Half exp", rh, xh); + + doTest("Octuple exp2", ro, xo); + doTest("Quad exp2", rq, xq); + doTest("Double exp2", rd, xd); + doTest("Float exp2", rf, xf); + doTest("Half exp2", rh, xh); + + doTest("Octuple exp10", ro, xo); + doTest("Quad exp10", rq, xq); + doTest("Double exp10", rd, xd); + doTest("Float exp10", rf, xf); + doTest("Half exp10", rh, xh); + + doTest("Octuple expm1", ro, xo); + doTest("Quad expm1", rq, xq); + doTest("Double expm1", rd, xd); + doTest("Float expm1", rf, xf); + doTest("Half expm1", rh, xh); + + doTest("Octuple pow", ro, xo, yo); + doTest("Quad pow", rq, xq, yq); + doTest("Double pow", rd, xd, yd); + doTest("Float pow", rf, xf, yf); + doTest("Half pow", rh, xh, yh); + + doTest("Octuple cbrt", ro, xo); + doTest("Quad cbrt", rq, xq); + doTest("Double cbrt", rd, xd); + doTest("Float cbrt", rf, xf); + doTest("Half cbrt", rh, xh); + + doTest("Octuple sinh", ro, xo); + doTest("Quad sinh", rq, xq); + doTest("Double sinh", rd, xd); + doTest("Float sinh", rf, xf); + doTest("Half sinh", rh, xh); + + doTest("Octuple cosh", ro, xo); + doTest("Quad cosh", rq, xq); + doTest("Double cosh", rd, xd); + doTest("Float cosh", rf, xf); + doTest("Half cosh", rh, xh); + + doTest("Octuple tanh", ro, xo); + doTest("Quad tanh", rq, xq); + doTest("Double tanh", rd, xd); + doTest("Float tanh", rf, xf); + doTest("Half tanh", rh, xh); + + doTest("Octuple asinh", ro, xo); + doTest("Quad asinh", rq, xq); + doTest("Double asinh", rd, xd); + doTest("Float asinh", rf, xf); + doTest("Half asinh", rh, xh); + + doTest("Octuple acosh", ro, xo); + doTest("Quad acosh", rq, xq); + doTest("Double acosh", rd, xd); + doTest("Float acosh", rf, xf); + doTest("Half acosh", rh, xh); + + doTest("Octuple atanh", ro, xo); + doTest("Quad atanh", rq, xq); + doTest("Double atanh", rd, xd); + doTest("Float atanh", rf, xf); + doTest("Half atanh", rh, xh); + + doTest("Octuple erf", ro, xo); + doTest("Quad erf", rq, xq); + doTest("Double erf", rd, xd); + doTest("Float erf", rf, xf); + doTest("Half erf", rh, xh); + + doTest("Octuple erfc", ro, xo); + doTest("Quad erfc", rq, xq); + doTest("Double erfc", rd, xd); + doTest("Float erfc", rf, xf); + doTest("Half erfc", rh, xh); + + doTest("Octuple tgamma", ro, xo); + doTest("Quad tgamma", rq, xq); + doTest("Double tgamma", rd, xd); + doTest("Float tgamma", rf, xf); + doTest("Half tgamma", rh, xh); + + doTest("Octuple lgamma", ro, xo); + doTest("Quad lgamma", rq, xq); + doTest("Double lgamma", rd, xd); + doTest("Float lgamma", rf, xf); + doTest("Half lgamma", rh, xh); + + doTest("Octuple fmod", ro, xo, yo); + doTest("Quad fmod", rq, xq, yq); + doTest("Double fmod", rd, xd, yd); + doTest("Float fmod", rf, xf, yf); + doTest("Half fmod", rh, xh, yh); + + doTest("Octuple remainder", ro, xo, yo); + doTest("Quad remainder", rq, xq, yq); + doTest("Double remainder", rd, xd, yd); + doTest("Float remainder", rf, xf, yf); + doTest("Half remainder", rh, xh, yh); + + doTest("Octuple remquo", ro, ri, xo, yo); + doTest("Quad remquo", rq, ri, xq, yq); + doTest("Double remquo", rd, ri, xd, yd); + doTest("Float remquo", rf, ri, xf, yf); + doTest("Half remquo", rh, ri, xh, yh); + + cudaFree(ri); + + cudaFree(rh); + cudaFree(zh); + cudaFree(yh); + cudaFree(xh); + + cudaFree(rf); + cudaFree(zf); + cudaFree(yf); + cudaFree(xf); + + cudaFree(rd); + cudaFree(zd); + cudaFree(yd); + cudaFree(xd); + + cudaFree(rq); + cudaFree(zq); + cudaFree(yq); + cudaFree(xq); + + cudaFree(ro); + cudaFree(zo); + cudaFree(yo); + cudaFree(xo); + + return 0; +} diff --git a/validation/extern/tlfloat/src/tester/test_exhaustive16.cpp b/validation/extern/tlfloat/src/tester/test_exhaustive16.cpp new file mode 100644 index 0000000..41de554 --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_exhaustive16.cpp @@ -0,0 +1,1070 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include + +#include + +#if defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) +#define MPFR_WANT_FLOAT128 +#endif +#include + +#include "suppress.hpp" + +#include "tlfloat/tlmath.hpp" +#include "testerutil.hpp" + +using namespace std; +using namespace tlfloat; +using namespace tlfloat::detail; + +#define TEST_SQRT +#define TEST_TRIG +#define TEST_ROUND +#define TEST_ARITH +#define TEST_COMPARE +#define TEST_INVTRIG +#define TEST_EXP +#define TEST_LOG +#define TEST_FMA +#define TEST_POW +#define TEST_CBRT +#define TEST_HYP +#define TEST_ERF +#define TEST_GAMMA +#define TEST_MODREM + +static void sighandler(int signum) { + cerr << "Caught SIGILL" << endl; + exit(0); +} + +int main(int argc, char **argv) { + signal(SIGILL, sighandler); + + typedef UnpackedFloat uhalf; + typedef TLFloat Half; + + atomic_int progress; + + #pragma omp parallel for + for(uint32_t u32=0;u32 < 0x10000;u32++) { + if ((u32 & 0xff) == 0xff) { + progress++; + int k = progress; + printf(" %d / 256\r", k); + fflush(stdout); + } + uint16_t u = ((u32 << 8) | (u32 >> 8)) & 0xffff; + __fp16 fu; + memcpy((void *)&fu, (void *)&u, sizeof(fu)); + +#ifdef TEST_SQRT + { + __fp16 fw = vsqrth_f16(fu); + __fp16 fx = __fp16(sqrt(Half(fu))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("sqrt u = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "c: " << fw << " : " << to_string_d(uhalf(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(uhalf(fx)) << endl; + exit(-1); + } + } +#endif + + { + mpfr_set_default_prec(32); + + mpfr_t mx, my, mz; + mpfr_inits(mx, my, mz, NULL); + + Half x = Half(fu); + +#ifdef TEST_TRIG + { + Half r = sin(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_sin(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf sin\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = cos(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_cos(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf cos\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = tan(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_tan(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf tan\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + +#ifdef TLFLOAT_ENABLE_MPFR_SINPI + { + Half r = sinpi(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_sinpi(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf sinpi\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = cospi(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_cospi(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf cospi\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = tanpi(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_tanpi(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf tanpi\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif +#endif + +#ifdef TEST_INVTRIG + { + Half r = asin(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_asin(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf asin\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = acos(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_acos(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf acos\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = atan(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_atan(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf atan\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_EXP + { + Half r = exp(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_exp(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf exp\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = expm1(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_expm1(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf expm1\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = exp2(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_exp2(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf exp2\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = exp10(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_exp10(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf exp10\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_LOG + { + Half r = log(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_log(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf log\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = log1p(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_log1p(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf log1p\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = log2(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_log2(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf log2\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = log10(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_log10(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf log10\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_CBRT + { + Half r = cbrt(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_cbrt(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf cbrt\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_HYP + { + Half r = sinh(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_sinh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf sinh\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = cosh(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_cosh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf cosh\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = tanh(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_tanh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf tanh\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = asinh(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_asinh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf asinh\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = acosh(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_acosh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf acosh\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = atanh(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_atanh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf atanh\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_ERF + { + Half r = erf(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_erf(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf erf\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = erfc(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_erfc(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf erfc\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_GAMMA + { + Half r = tgamma(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_gamma(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf tgamma\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Half r = lgamma(x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + int msign = 0; + mpfr_lgamma(mx, &msign, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf lgamma\n"); + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + + mpfr_clears(mx, my, mz, NULL); + } + +#ifdef TEST_ROUND + { + __fp16 fw = vrndh_f16(fu); + __fp16 fx = __fp16(trunc(uhalf(fu))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("trunc u = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "c: " << fw << " : " << to_string_d(uhalf(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(uhalf(fx)) << endl; + exit(-1); + } + } + + { + __fp16 fw = vrndmh_f16(fu); + __fp16 fx = __fp16(floor(uhalf(fu))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("floor u = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "c: " << fw << " : " << to_string_d(uhalf(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(uhalf(fx)) << endl; + exit(-1); + } + } + + { + __fp16 fw = vrndph_f16(fu); + __fp16 fx = __fp16(ceil(uhalf(fu))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("ceil u = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "c: " << fw << " : " << to_string_d(uhalf(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(uhalf(fx)) << endl; + exit(-1); + } + } + + { + __fp16 fw = vrndah_f16(fu); + __fp16 fx = __fp16(round(uhalf(fu))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("round u = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "c: " << fw << " : " << to_string_d(uhalf(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(uhalf(fx)) << endl; + exit(-1); + } + } + + { + __fp16 fw = vrndnh_f16(fu); + __fp16 fx = __fp16(rint(uhalf(fu))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("rint u = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "c: " << fw << " : " << to_string_d(uhalf(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(uhalf(fx)) << endl; + exit(-1); + } + } +#endif + + for(uint32_t v32=0;v32 < 0x10000;v32++) { + uint16_t v = ((v32 << 8) | (v32 >> 8)) & 0xffff; + __fp16 fv; + memcpy((void *)&fv, (void *)&v, sizeof(fv)); + +#ifdef TEST_ARITH + { + __fp16 fw = vaddh_f16(fu, fv); + __fp16 fx = __fp16(uhalf::faddsub(uhalf(fu), uhalf(fv), false)); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("u = %04x, v = %04x, w = %04x, x = %04x\n", (unsigned)u, (unsigned)v, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "v: " << fv << " : " << to_string_d(uhalf(fv)) << endl; + cout << "c: " << fw << " : " << to_string_d(uhalf(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(uhalf(fx)) << endl; + exit(-1); + } + } + + { + __fp16 fw = vsubh_f16(fu, fv); + __fp16 fx = __fp16(uhalf::faddsub(uhalf(fu), uhalf(fv), true)); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("u = %04x, v = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)v, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "v: " << fv << " : " << to_string_d(uhalf(fv)) << endl; + cout << "c: " << fw << " : " << to_string_d(uhalf(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(uhalf(fx)) << endl; + exit(-1); + } + } + + { + __fp16 fw = vmulh_f16(fu, fv); + __fp16 fx = __fp16(uhalf::fmul(uhalf(fu), uhalf(fv))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("u = %04x, v = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)v, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "v: " << fv << " : " << to_string_d(uhalf(fv)) << endl; + cout << "c: " << fw << " : " << to_string_d(uhalf(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(uhalf(fx)) << endl; + exit(-1); + } + } + + { + __fp16 fw = vdivh_f16(fu, fv); + __fp16 fx = __fp16(uhalf::fdiv(uhalf(fu), uhalf(fv))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("u = %04x, v = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)v, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "v: " << fv << " : " << to_string_d(uhalf(fv)) << endl; + cout << "c: " << fw << " : " << to_string_d(uhalf(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(uhalf(fx)) << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_COMPARE + { + bool bc = vceqh_f16(fu, fv); + bool bt = uhalf(fu) == uhalf(fv); + + if (bc != bt) { + printf("== : u = %04x, v = %04x, bc = %d, bt = %d\n", (unsigned)u, (unsigned)v, (int)bc, (int)bt); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "v: " << fv << " : " << to_string_d(uhalf(fv)) << endl; + exit(-1); + } + } + + { + bool bc = vcleh_f16(fu, fv); + bool bt = uhalf(fu) <= uhalf(fv); + + if (bc != bt) { + printf("<= : u = %04x, v = %04x, bc = %d, bt = %d\n", (unsigned)u, (unsigned)v, (int)bc, (int)bt); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "v: " << fv << " : " << to_string_d(uhalf(fv)) << endl; + exit(-1); + } + } + + { + bool bc = vcgeh_f16(fu, fv); + bool bt = uhalf(fu) >= uhalf(fv); + + if (bc != bt) { + printf(">= : u = %04x, v = %04x, bc = %d, bt = %d\n", (unsigned)u, (unsigned)v, (int)bc, (int)bt); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "v: " << fv << " : " << to_string_d(uhalf(fv)) << endl; + exit(-1); + } + } + + { + bool bc = vclth_f16(fu, fv); + bool bt = uhalf(fu) < uhalf(fv); + + if (bc != bt) { + printf("< : u = %04x, v = %04x, bc = %d, bt = %d\n", (unsigned)u, (unsigned)v, (int)bc, (int)bt); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "v: " << fv << " : " << to_string_d(uhalf(fv)) << endl; + exit(-1); + } + } + + { + bool bc = vcgth_f16(fu, fv); + bool bt = uhalf(fu) > uhalf(fv); + + if (bc != bt) { + printf("> : u = %04x, v = %04x, bc = %d, bt = %d\n", (unsigned)u, (unsigned)v, (int)bc, (int)bt); + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "v: " << fv << " : " << to_string_d(uhalf(fv)) << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_INVTRIG + { + mpfr_set_default_prec(32); + + mpfr_t mx, my, mz; + mpfr_inits(mx, my, mz, NULL); + + Half x = Half(fu); + Half y = Half(fv); + + { + Half r = atan2(y, x); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_atan2(mx, my, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf atan2\n"); + cout << "y = " << (__fp16)y << endl; + cout << "x = " << (__fp16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + mpfr_clears(mx, my, mz, NULL); + } +#endif + +#ifdef TEST_POW + { + mpfr_set_default_prec(32); + + mpfr_t mx, my, mz; + mpfr_inits(mx, my, mz, NULL); + + Half x = Half(fu); + Half y = Half(fv); + + { + Half r = pow(x, y); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_pow(mx, mx, my, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.7) { + printf("\nhalf pow\n"); + cout << "x = " << (__fp16)x << endl; + cout << "y = " << (__fp16)y << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + mpfr_clears(mx, my, mz, NULL); + } +#endif + +#ifdef TEST_MODREM + { + mpfr_set_default_prec(32); + + mpfr_t mx, my, mz; + mpfr_inits(mx, my, mz, NULL); + + Half x = Half(fu); + Half y = Half(fv); + + { + Half r = fmod(x, y); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_fmod(mx, mx, my, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.5) { + printf("\nhalf fmod\n"); + cout << "x = " << (__fp16)x << endl; + cout << "y = " << (__fp16)y << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + mpfr_clears(mx, my, mz, NULL); + } + + { + mpfr_set_default_prec(32); + + mpfr_t mx, my, mz; + mpfr_inits(mx, my, mz, NULL); + + Half x = Half(fu); + Half y = Half(fv); + + { + Half r = remainder(x, y); + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_remainder(mx, mx, my, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.5) { + printf("\nhalf remainder\n"); + cout << "x = " << (__fp16)x << endl; + cout << "y = " << (__fp16)y << endl; + cout << "c = " << c << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + mpfr_clears(mx, my, mz, NULL); + } + + { + mpfr_set_default_prec(32); + + mpfr_t mx, my, mz; + mpfr_inits(mx, my, mz, NULL); + + Half x = Half(fu); + Half y = Half(fv); + + { + auto p = remquo(x, y); + Half r = p.first; + uhalf xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + long int mq = 0; + mpfr_remquo(mx, &mq, mx, my, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uhalf::flt_true_min(), uhalf::flt_max()); + if (ulp > 0.5 || mq != p.second) { + printf("\nhalf remquo\n"); + cout << "x = " << (__fp16)x << endl; + cout << "y = " << (__fp16)y << endl; + cout << "c = " << c << ", " << mq << endl; + cout << "r = " << (__fp16)r << " : " << to_string_d(Half(r).getUnpacked()) << ", " << p.second << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + mpfr_clears(mx, my, mz, NULL); + } +#endif + +#ifdef TEST_FMA + __fp16 fz[] = { + 6e-8, -12e-8, 18e-8, -24e-8, 30e-8, -36e-8, + 1e-5, -1e-4, 1e-3, -1e-2, 65504, -32768, + +0.0, -0.0, (__fp16)+INFINITY, (__fp16)-INFINITY + }; + for(unsigned i=0;i +#include + +#include +#include "suppress.hpp" + +#include "tlfloat/tlmath.hpp" +#include "testerutil.hpp" + +using namespace std; +using namespace tlfloat; +using namespace tlfloat::detail; + +int main(int argc, char **argv) { + typedef UnpackedFloat uhalf; + + atomic_int progress; + + #pragma omp parallel for + for(uint32_t u32=0;u32 < 0x10000;u32++) { + if ((u32 & 0xf) == 0xf) { + progress++; + int k = progress; + printf(" %d / 4096\r", k); + fflush(stdout); + } + uint16_t u = ((u32 << 8) | (u32 >> 8)) & 0xffff; + __fp16 fu; + memcpy((void *)&fu, (void *)&u, sizeof(fu)); + + for(uint32_t v32=0;v32 < 0x10000;v32++) { + uint16_t v = ((v32 << 8) | (v32 >> 8)) & 0xffff; + __fp16 fv; + memcpy((void *)&fv, (void *)&v, sizeof(fv)); + + for(uint32_t w32=0;w32 < 0x10000;w32++) { + uint16_t w = ((w32 << 8) | (w32 >> 8)) & 0xffff; + __fp16 fw; + memcpy((void *)&fw, (void *)&w, sizeof(fw)); + + __fp16 fx = __fp16(uhalf::fma(uhalf(fw), uhalf(fu), uhalf(fv))); + __fp16 fy = fma(double(fw), double(fu), double(fv)); + + uint16_t x, y; + memcpy((void *)&x, (void *)&fx, sizeof(x)); + memcpy((void *)&y, (void *)&fy, sizeof(y)); + + if (!(isnan(fx) && isnan(fy)) && x != y) { + cout << "u: " << fu << " : " << to_string_d(uhalf(fu)) << endl; + cout << "v: " << fv << " : " << to_string_d(uhalf(fv)) << endl; + cout << "w: " << fw << " : " << to_string_d(uhalf(fw)) << endl; + cout << "c: " << fy << " : " << to_string_d(uhalf(fy)) << endl; + cout << "t: " << fx << " : " << to_string_d(uhalf(fx)) << endl; + exit(-1); + } + } + } + } + + cout << endl << "OK" << endl; + return 0; +} diff --git a/validation/extern/tlfloat/src/tester/test_exhaustive32.cpp b/validation/extern/tlfloat/src/tester/test_exhaustive32.cpp new file mode 100644 index 0000000..c5381a7 --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_exhaustive32.cpp @@ -0,0 +1,759 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#include + +#if defined(TLFLOAT_ENABLE_LIBQUADMATH) +#include +#endif + +#if defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) +#define MPFR_WANT_FLOAT128 +#endif +#include + +#include "suppress.hpp" + +#include "tlfloat/tlmath.hpp" +#include "testerutil.hpp" + +using namespace std; +using namespace tlfloat; +using namespace tlfloat::detail; + +typedef UnpackedFloat ufloat; +typedef UnpackedFloat uhalf; +typedef UnpackedFloat ubf16; + +#define TEST_CAST +#define TEST_SQRT +#define TEST_TRIG +#define TEST_INVTRIG +#define TEST_EXP +#define TEST_LOG +#define TEST_CBRT +#define TEST_HYP +#define TEST_ERF +#define TEST_GAMMA + +int main(int argc, char **argv) { + double maxulp_sqrt_ = 0, maxulp_sqrt = 0.5; + double maxulp_sin = 0.5, maxulp_cos = 0.5, maxulp_tan = 0.5; + double maxulp_sinpi = 0.5, maxulp_cospi = 0.5, maxulp_tanpi = 0.5; + double maxulp_asin = 0.5, maxulp_acos = 0.5, maxulp_atan = 0.5; + double maxulp_exp = 0.5, maxulp_expm1 = 0.5; + double maxulp_exp2 = 0.5, maxulp_exp10 = 0.5; + double maxulp_log = 0.5, maxulp_log1p = 0.5; + double maxulp_log2 = 0.5, maxulp_log10 = 0.5; + double maxulp_cbrt = 0.5; + double maxulp_sinh = 0.5, maxulp_cosh = 0.5, maxulp_tanh = 0.5; + double maxulp_asinh = 0.5, maxulp_acosh = 0.5, maxulp_atanh = 0.5; + double maxulp_erf = 0.5, maxulp_erfc = 0.5; + double maxulp_tgamma = 0.5, maxulp_lgamma = 0.5; + + atomic_int progress; + + #pragma omp parallel for + for(uint64_t u64=0;u64 < 0x100000000ULL;u64++) { + if ((u64 & 0xfffff) == 0xfffff) { + progress++; + int k = progress; + printf("%5d / 4096\r", k); + fflush(stdout); + } + uint32_t u = ((u64 << 16) | (u64 >> 16)) & 0xffffffff; + float x; + memcpy((void *)&x, (void *)&u, sizeof(x)); + +#ifdef TEST_CAST + { + double cd = (double)x; + double td = (double)(Double)Float(x); + + if (!(isnan((double)cd) && isnan((double)td)) && cd != td) { + printf("cast to double : u = %08x\n", (unsigned)u); + cout << "x: " << (double)x << " : " << to_string_d(ufloat(x)) << endl; + cout << "c: " << (double)cd << " : " << to_string_d(udouble(cd)) << endl; + cout << "t: " << (double)td << " : " << to_string_d(udouble(td)) << endl; + exit(-1); + } + +#if defined(TLFLOAT_COMPILER_SUPPORTS_FP16) + __fp16 cf16 = (__fp16)x; + __fp16 tf16 = (__fp16)(Half)Float(x); + + if (!(isnan((double)cf16) && isnan((double)tf16)) && cf16 != tf16) { + printf("cast to fp16 : u = %08x\n", (unsigned)u); + cout << "x: " << (double)x << " : " << to_string_d(ufloat(x)) << endl; + cout << "c: " << (double)cf16 << " : " << to_string_d(uhalf(cf16)) << endl; + cout << "t: " << (double)tf16 << " : " << to_string_d(uhalf(tf16)) << endl; + exit(-1); + } +#endif + +#if defined(TLFLOAT_COMPILER_SUPPORTS_BF16) + __bf16 cb16 = (__bf16)x; + __bf16 tb16 = (__bf16)(BFloat16)Float(x); + + if (!(isnan((double)cb16) && isnan((double)tb16)) && cb16 != tb16) { + printf("cast to bfloat16 : u = %08x\n", (unsigned)u); + cout << "x: " << (double)x << " : " << to_string_d(ufloat(x)) << endl; + cout << "c: " << (double)cb16 << " : " << to_string_d(ubf16(cb16)) << endl; + cout << "t: " << (double)tb16 << " : " << to_string_d(ubf16(tb16)) << endl; + exit(-1); + } +#endif + } +#endif + +#ifdef TEST_SQRT + if (x >= 0 && finite__(x)) { + mpfr_set_default_prec(32); + mpfr_t mx; + mpfr_inits(mx, NULL); + + auto xfr = sqrt_(Float(x).getUnpacked().cast((const xfloat *)nullptr)); + float r = (float)Float(xfr.cast((const ufloat *)nullptr)); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_sqrt(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::zero(), ufloat::infinity()); + if (ulp > maxulp_sqrt_) { + maxulp_sqrt_ = ulp; + printf("\nsqrt_\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + + mpfr_clears(mx, NULL); + if (ulp > 0.5) { printf("NG\n"); exit(-1); } + } + + { + mpfr_set_default_prec(32); + mpfr_t mx; + mpfr_inits(mx, NULL); + + auto xfr = sqrt(Float(x)).getUnpacked().cast((const ufloat *)nullptr); + float r = (float)Float(xfr.cast((const ufloat *)nullptr)); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_sqrt(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_sqrt) { + maxulp_sqrt = ulp; + printf("\nsqrt\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + + mpfr_clears(mx, NULL); + if (ulp > 0.5) { printf("NG\n"); exit(-1); } + } +#endif + + { + mpfr_set_default_prec(32); + mpfr_t mx; + mpfr_inits(mx, NULL); + +#ifdef TEST_TRIG + { + float r = (float)sin(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_sin(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_sin) { + maxulp_sin = ulp; + printf("\nsin\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)cos(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_cos(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_cos) { + maxulp_cos = ulp; + printf("\ncos\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)tan(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_tan(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_tan) { + maxulp_tan = ulp; + printf("\ntan\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + +#ifdef TLFLOAT_ENABLE_MPFR_SINPI + { + float r = (float)sinpi(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_sinpi(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_sinpi) { + maxulp_sinpi = ulp; + printf("\nsinpi\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)cospi(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_cospi(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_cospi) { + maxulp_cospi = ulp; + printf("\ncospi\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)tanpi(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_tanpi(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_tanpi) { + maxulp_tanpi = ulp; + printf("\ntanpi\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } +#endif +#endif + +#ifdef TEST_INVTRIG + { + float r = (float)atan(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_atan(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_atan) { + maxulp_atan = ulp; + printf("\natan\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)asin(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_asin(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_asin) { + maxulp_asin = ulp; + printf("\nasin\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)acos(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_acos(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_acos) { + maxulp_acos = ulp; + printf("\nacos\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } +#endif + +#ifdef TEST_EXP + { + float r = (float)exp(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_exp(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_exp) { + maxulp_exp = ulp; + printf("\nexp\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)expm1(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_expm1(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_expm1) { + maxulp_expm1 = ulp; + printf("\nexpm1\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)exp2(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_exp2(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_exp2) { + maxulp_exp2 = ulp; + printf("\nexp2\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)exp10(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_exp10(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_exp10) { + maxulp_exp10 = ulp; + printf("\nexp10\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } +#endif + +#ifdef TEST_LOG + { + float r = (float)log(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_log(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_log) { + maxulp_log = ulp; + printf("\nlog\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)log1p(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_log1p(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_log1p) { + maxulp_log1p = ulp; + printf("\nlog1p\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)log2(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_log2(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_log2) { + maxulp_log2 = ulp; + printf("\nlog2\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)log10(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_log10(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_log10) { + maxulp_log10 = ulp; + printf("\nlog10\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } +#endif + +#ifdef TEST_CBRT + { + float r = (float)cbrt(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_cbrt(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_cbrt) { + maxulp_cbrt = ulp; + printf("\ncbrt\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } +#endif + +#ifdef TEST_HYP + { + float r = (float)sinh(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_sinh(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_sinh) { + maxulp_sinh = ulp; + printf("\nsinh\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)cosh(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_cosh(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_cosh) { + maxulp_cosh = ulp; + printf("\ncosh\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)tanh(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_tanh(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_tanh) { + maxulp_tanh = ulp; + printf("\ntanh\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)asinh(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_asinh(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_asinh) { + maxulp_asinh = ulp; + printf("\nasinh\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)acosh(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_acosh(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_acosh) { + maxulp_acosh = ulp; + printf("\nacosh\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)atanh(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_atanh(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_atanh) { + maxulp_atanh = ulp; + printf("\natanh\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } +#endif + +#ifdef TEST_ERF + { + float r = (float)erf(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_erf(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_erf) { + maxulp_erf = ulp; + printf("\nerf\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + + { + float r = (float)erfc(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_erfc(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_erfc) { + maxulp_erfc = ulp; + printf("\nerfc\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } +#endif + +#ifdef TEST_GAMMA + { + float r = (float)tgamma(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_gamma(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_tgamma) { + maxulp_tgamma = ulp; + printf("\ntgamma\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } + +#if 0 + { + float r = (float)lgamma(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + int msign = 0; + mpfr_lgamma(mx, &msign, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > maxulp_lgamma) { + maxulp_lgamma = ulp; + printf("\nlgamma\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + fflush(stdout); + } + if (ulp >= 1.0) { printf("NG\n"); exit(-1); } + } +#endif +#endif + + mpfr_clears(mx, NULL); + } + } +} diff --git a/validation/extern/tlfloat/src/tester/test_exhaustive_bf16.cpp b/validation/extern/tlfloat/src/tester/test_exhaustive_bf16.cpp new file mode 100644 index 0000000..6a40ba1 --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_exhaustive_bf16.cpp @@ -0,0 +1,241 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#include + +#include "suppress.hpp" + +#include "tlfloat/tlmath.hpp" +#include "testerutil.hpp" + +using namespace std; +using namespace tlfloat; +using namespace tlfloat::detail; + +#define TEST_ARITH +#define TEST_COMPARE +#define TEST_CASTFP16 + +typedef UnpackedFloat ubf16; +typedef TLFloat BFloat16; +typedef UnpackedFloat uhalf; +typedef TLFloat Half; + +int main(int argc, char **argv) { + atomic_int progress; + + #pragma omp parallel for + for(uint32_t u32=0;u32 < 0x10000;u32++) { + if ((u32 & 0xff) == 0xff) { + progress++; + int k = progress; + printf(" %d / 256\r", k); + fflush(stdout); + } + uint16_t u = ((u32 << 8) | (u32 >> 8)) & 0xffff; + __bf16 fu; + +#if defined(TEST_CASTFP16) && defined(TLFLOAT_COMPILER_SUPPORTS_FP16) + { + __fp16 gu; + gu = bit_cast<__fp16>(u); + + __bf16 fw = (__bf16)(float)gu; + __bf16 fx = (__bf16)(BFloat16)Half(gu); + + if (!(isnan((double)fw) && isnan((double)fx)) && fw != fx) { + printf("cast from fp16 to bf16 : u = %04x\n", (unsigned)u); + cout << "u: " << (double)gu << " : " << to_string_d(uhalf(gu)) << endl; + cout << "c: " << (double)fw << " : " << to_string_d(ubf16(fw)) << endl; + cout << "t: " << (double)fx << " : " << to_string_d(ubf16(fx)) << endl; + exit(-1); + } + + fu = bit_cast<__bf16>(u); + + __fp16 gw = (__fp16)(float)fu; + __fp16 gx = (__fp16)(Half)BFloat16(fu); + + if (!(isnan((double)gw) && isnan((double)gx)) && gw != gx) { + printf("cast from bf16 to fp16 : u = %04x\n", (unsigned)u); + cout << "u: " << (double)fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "c: " << (double)gw << " : " << to_string_d(uhalf(gw)) << endl; + cout << "t: " << (double)gx << " : " << to_string_d(uhalf(gx)) << endl; + exit(-1); + } + + float hw = (float)fu; + float hx = (float)(Float)BFloat16(fu); + + if (!(isnan((double)hw) && isnan((double)hx)) && hw != hx) { + printf("cast from bf16 to float : u = %04x\n", (unsigned)u); + cout << "u: " << (double)fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "c: " << (double)hw << " : " << to_string_d(ufloat(hw)) << endl; + cout << "t: " << (double)hx << " : " << to_string_d(ufloat(hx)) << endl; + exit(-1); + } + + hw = (float)gu; + hx = (float)(Float)Half(gu); + + if (!(isnan((double)hw) && isnan((double)hx)) && hw != hx) { + printf("cast from half to float : u = %04x\n", (unsigned)u); + cout << "u: " << (double)gu << " : " << to_string_d(uhalf(gu)) << endl; + cout << "c: " << (double)hw << " : " << to_string_d(ufloat(hw)) << endl; + cout << "t: " << (double)hx << " : " << to_string_d(ufloat(hx)) << endl; + exit(-1); + } + } +#endif + + memcpy((void *)&fu, (void *)&u, sizeof(fu)); + + for(uint32_t v32=0;v32 < 0x10000;v32++) { + uint16_t v = ((v32 << 8) | (v32 >> 8)) & 0xffff; + __bf16 fv; + memcpy((void *)&fv, (void *)&v, sizeof(fv)); + +#ifdef TEST_ARITH + { + __bf16 fw = fu + fv; + __bf16 fx = __bf16(ubf16::faddsub(ubf16(fu), ubf16(fv), false)); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan((double)fw) && isnan((double)fx)) && w != x) { + printf("u = %04x, v = %04x, w = %04x, x = %04x\n", (unsigned)u, (unsigned)v, (unsigned)w, (unsigned)x); + cout << "u: " << (double)fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "v: " << (double)fv << " : " << to_string_d(ubf16(fv)) << endl; + cout << "c: " << (double)fw << " : " << to_string_d(ubf16(fw)) << endl; + cout << "t: " << (double)fx << " : " << to_string_d(ubf16(fx)) << endl; + exit(-1); + } + } + + { + __bf16 fw = fu - fv; + __bf16 fx = __bf16(ubf16::faddsub(ubf16(fu), ubf16(fv), true)); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan((double)fw) && isnan((double)fx)) && w != x) { + printf("u = %04x, v = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)v, (unsigned)w, (unsigned)x); + cout << "u: " << (double)fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "v: " << (double)fv << " : " << to_string_d(ubf16(fv)) << endl; + cout << "c: " << (double)fw << " : " << to_string_d(ubf16(fw)) << endl; + cout << "t: " << (double)fx << " : " << to_string_d(ubf16(fx)) << endl; + exit(-1); + } + } + + { + __bf16 fw = fu * fv; + __bf16 fx = __bf16(ubf16::fmul(ubf16(fu), ubf16(fv))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan((double)fw) && isnan((double)fx)) && w != x) { + printf("u = %04x, v = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)v, (unsigned)w, (unsigned)x); + cout << "u: " << (double)fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "v: " << (double)fv << " : " << to_string_d(ubf16(fv)) << endl; + cout << "c: " << (double)fw << " : " << to_string_d(ubf16(fw)) << endl; + cout << "t: " << (double)fx << " : " << to_string_d(ubf16(fx)) << endl; + exit(-1); + } + } + + { + __bf16 fw = fu / fv; + __bf16 fx = __bf16(ubf16::fdiv(ubf16(fu), ubf16(fv))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan((double)fw) && isnan((double)fx)) && w != x) { + printf("u = %04x, v = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)v, (unsigned)w, (unsigned)x); + cout << "u: " << (double)fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "v: " << (double)fv << " : " << to_string_d(ubf16(fv)) << endl; + cout << "c: " << (double)fw << " : " << to_string_d(ubf16(fw)) << endl; + cout << "t: " << (double)fx << " : " << to_string_d(ubf16(fx)) << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_COMPARE + { + bool bc = (fu == fv); + bool bt = ubf16(fu) == ubf16(fv); + + if (bc != bt) { + printf("== : u = %04x, v = %04x, bc = %d, bt = %d\n", (unsigned)u, (unsigned)v, (int)bc, (int)bt); + cout << "u: " << (double)fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "v: " << (double)fv << " : " << to_string_d(ubf16(fv)) << endl; + exit(-1); + } + } + + { + bool bc = (fu <= fv); + bool bt = ubf16(fu) <= ubf16(fv); + + if (bc != bt) { + printf("<= : u = %04x, v = %04x, bc = %d, bt = %d\n", (unsigned)u, (unsigned)v, (int)bc, (int)bt); + cout << "u: " << (double)fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "v: " << (double)fv << " : " << to_string_d(ubf16(fv)) << endl; + exit(-1); + } + } + + { + bool bc = (fu >= fv); + bool bt = ubf16(fu) >= ubf16(fv); + + if (bc != bt) { + printf(">= : u = %04x, v = %04x, bc = %d, bt = %d\n", (unsigned)u, (unsigned)v, (int)bc, (int)bt); + cout << "u: " << (double)fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "v: " << (double)fv << " : " << to_string_d(ubf16(fv)) << endl; + exit(-1); + } + } + + { + bool bc = (fu < fv); + bool bt = ubf16(fu) < ubf16(fv); + + if (bc != bt) { + printf("< : u = %04x, v = %04x, bc = %d, bt = %d\n", (unsigned)u, (unsigned)v, (int)bc, (int)bt); + cout << "u: " << (double)fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "v: " << (double)fv << " : " << to_string_d(ubf16(fv)) << endl; + exit(-1); + } + } + + { + bool bc = (fu > fv); + bool bt = ubf16(fu) > ubf16(fv); + + if (bc != bt) { + printf("> : u = %04x, v = %04x, bc = %d, bt = %d\n", (unsigned)u, (unsigned)v, (int)bc, (int)bt); + cout << "u: " << (double)fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "v: " << (double)fv << " : " << to_string_d(ubf16(fv)) << endl; + exit(-1); + } + } +#endif + } + } + + cout << endl << "OK" << endl; + return 0; +} diff --git a/validation/extern/tlfloat/src/tester/test_exhaustive_bf16_mpfr.cpp b/validation/extern/tlfloat/src/tester/test_exhaustive_bf16_mpfr.cpp new file mode 100644 index 0000000..778b4d1 --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_exhaustive_bf16_mpfr.cpp @@ -0,0 +1,951 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#include + +#if defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) +#define MPFR_WANT_FLOAT128 +#endif + +#include + +#include "suppress.hpp" + +#include "tlfloat/tlmath.hpp" +#include "testerutil.hpp" + +using namespace std; +using namespace tlfloat; +using namespace tlfloat::detail; + +#define TEST_SQRT +#define TEST_TRIG +#define TEST_ROUND +#define TEST_INVTRIG +#define TEST_EXP +#define TEST_LOG +#define TEST_FMA +#define TEST_POW +#define TEST_CBRT +#define TEST_HYP +#define TEST_ERF +#define TEST_GAMMA +#define TEST_MODREM + +int main(int argc, char **argv) { + typedef UnpackedFloat ubf16; + typedef TLFloat BFloat16; + + atomic_int progress; + + #pragma omp parallel for + for(uint32_t u32=0;u32 < 0x10000;u32++) { + if ((u32 & 0xff) == 0xff) { + progress++; + int k = progress; + printf(" %d / 256\r", k); + fflush(stdout); + } + uint16_t u = ((u32 << 8) | (u32 >> 8)) & 0xffff; + BFloat16 fu; + memcpy((void *)&fu, (void *)&u, sizeof(fu)); + + { + mpfr_set_default_prec(32); + + mpfr_t mx, my, mz; + mpfr_inits(mx, my, mz, NULL); + + BFloat16 x = BFloat16(fu); + +#ifdef TEST_SQRT + { + BFloat16 r = sqrt(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_sqrt(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.5) { + printf("\nbf16 sqrt\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_TRIG + { + BFloat16 r = sin(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_sin(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 sin\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = cos(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_cos(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 cos\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = tan(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_tan(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 tan\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + +#ifdef TLFLOAT_ENABLE_MPFR_SINPI + { + BFloat16 r = sinpi(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_sinpi(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 sinpi\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = cospi(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_cospi(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 cospi\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = tanpi(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_tanpi(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 tanpi\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif +#endif + +#ifdef TEST_INVTRIG + { + BFloat16 r = asin(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_asin(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 asin\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = acos(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_acos(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 acos\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = atan(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_atan(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 atan\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_EXP + { + BFloat16 r = exp(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_exp(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 exp\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = expm1(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_expm1(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 expm1\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = exp2(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_exp2(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 exp2\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = exp10(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_exp10(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 exp10\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_LOG + { + BFloat16 r = log(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_log(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 log\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = log1p(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_log1p(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 log1p\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = log2(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_log2(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 log2\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = log10(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_log10(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 log10\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_CBRT + { + BFloat16 r = cbrt(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_cbrt(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 cbrt\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_HYP + { + BFloat16 r = sinh(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_sinh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 sinh\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = cosh(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_cosh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 cosh\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = tanh(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_tanh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 tanh\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = asinh(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_asinh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 asinh\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = acosh(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_acosh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 acosh\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = atanh(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_atanh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 atanh\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_ERF + { + BFloat16 r = erf(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_erf(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 erf\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = erfc(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_erfc(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 erfc\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#ifdef TEST_GAMMA + { + BFloat16 r = tgamma(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_gamma(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 tgamma\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + BFloat16 r = lgamma(x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + int msign = 0; + mpfr_lgamma(mx, &msign, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 lgamma\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + + mpfr_clears(mx, my, mz, NULL); + } + +#ifdef TEST_ROUND + { + BFloat16 fw = trunc((double)fu); + BFloat16 fx = BFloat16(trunc(ubf16(fu))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("trunc u = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "c: " << fw << " : " << to_string_d(ubf16(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(ubf16(fx)) << endl; + exit(-1); + } + } + + { + BFloat16 fw = floor((double)fu); + BFloat16 fx = BFloat16(floor(ubf16(fu))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("floor u = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "c: " << fw << " : " << to_string_d(ubf16(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(ubf16(fx)) << endl; + exit(-1); + } + } + + { + BFloat16 fw = ceil((double)fu); + BFloat16 fx = BFloat16(ceil(ubf16(fu))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("ceil u = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "c: " << fw << " : " << to_string_d(ubf16(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(ubf16(fx)) << endl; + exit(-1); + } + } + + { + BFloat16 fw = round((double)fu); + BFloat16 fx = BFloat16(round(ubf16(fu))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("round u = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "c: " << fw << " : " << to_string_d(ubf16(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(ubf16(fx)) << endl; + exit(-1); + } + } + + { + BFloat16 fw = rint((double)fu); + BFloat16 fx = BFloat16(rint(ubf16(fu))); + uint16_t w, x; + memcpy((void *)&w, (void *)&fw, sizeof(w)); + memcpy((void *)&x, (void *)&fx, sizeof(x)); + + if (!(isnan(fw) && isnan(fx)) && w != x) { + printf("rint u = %04x, y = %04x, z = %04x\n", (unsigned)u, (unsigned)w, (unsigned)x); + cout << "u: " << fu << " : " << to_string_d(ubf16(fu)) << endl; + cout << "c: " << fw << " : " << to_string_d(ubf16(fw)) << endl; + cout << "t: " << fx << " : " << to_string_d(ubf16(fx)) << endl; + exit(-1); + } + } +#endif + + for(uint32_t v32=0;v32 < 0x10000;v32++) { + uint16_t v = ((v32 << 8) | (v32 >> 8)) & 0xffff; + BFloat16 fv; + memcpy((void *)&fv, (void *)&v, sizeof(fv)); + +#ifdef TEST_INVTRIG + { + mpfr_set_default_prec(32); + + mpfr_t mx, my, mz; + mpfr_inits(mx, my, mz, NULL); + + BFloat16 x = BFloat16(fu); + BFloat16 y = BFloat16(fv); + + { + BFloat16 r = atan2(y, x); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_atan2(mx, my, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 atan2\n"); + cout << "y = " << (BFloat16)y << endl; + cout << "x = " << (BFloat16)x << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + mpfr_clears(mx, my, mz, NULL); + } +#endif + +#ifdef TEST_POW + { + mpfr_set_default_prec(32); + + mpfr_t mx, my, mz; + mpfr_inits(mx, my, mz, NULL); + + BFloat16 x = BFloat16(fu); + BFloat16 y = BFloat16(fv); + + { + BFloat16 r = pow(x, y); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_pow(mx, mx, my, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.7) { + printf("\nbf16 pow\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "y = " << (BFloat16)y << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + mpfr_clears(mx, my, mz, NULL); + } +#endif + +#ifdef TEST_MODREM + { + mpfr_set_default_prec(32); + + mpfr_t mx, my, mz; + mpfr_inits(mx, my, mz, NULL); + + BFloat16 x = BFloat16(fu); + BFloat16 y = BFloat16(fv); + + { + BFloat16 r = fmod(x, y); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_fmod(mx, mx, my, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.5) { + printf("\nbf16 fmod\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "y = " << (BFloat16)y << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + mpfr_clears(mx, my, mz, NULL); + } + + { + mpfr_set_default_prec(32); + + mpfr_t mx, my, mz; + mpfr_inits(mx, my, mz, NULL); + + BFloat16 x = BFloat16(fu); + BFloat16 y = BFloat16(fv); + + { + BFloat16 r = remainder(x, y); + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_remainder(mx, mx, my, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.5) { + printf("\nbf16 remainder\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "y = " << (BFloat16)y << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + mpfr_clears(mx, my, mz, NULL); + } + + { + mpfr_set_default_prec(32); + + mpfr_t mx, my, mz; + mpfr_inits(mx, my, mz, NULL); + + BFloat16 x = BFloat16(fu); + BFloat16 y = BFloat16(fv); + + { + auto p = remquo(x, y); + BFloat16 r = p.first; + ubf16 xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + long int mq = 0; + mpfr_remquo(mx, &mq, mx, my, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, mx, ubf16::flt_true_min(), ubf16::flt_max()); + if (ulp > 0.5 || mq != p.second) { + printf("\nbf16 remquo\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "y = " << (BFloat16)y << endl; + cout << "c = " << c << ", " << mq << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << ", " << p.second << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + mpfr_clears(mx, my, mz, NULL); + } +#endif + +#ifdef TEST_FMA + { + mpfr_set_default_prec(32); + + mpfr_t mw, mx, my, mz; + mpfr_inits(mw, mx, my, mz, NULL); + + BFloat16 x = BFloat16(fu); + BFloat16 y = BFloat16(fv); + + BFloat16 fz[] = { + 6e-8, -12e-8, 18e-8, -24e-8, 30e-8, -36e-8, + 1e-5, -1e-4, 1e-3, -1e-2, 65504, -32768, + +0.0, -0.0, (BFloat16)+INFINITY, (BFloat16)-INFINITY + }; + for(unsigned i=0;i 0.5) { + printf("\nbf16 fma\n"); + cout << "x = " << (BFloat16)x << endl; + cout << "y = " << (BFloat16)y << endl; + cout << "z = " << (BFloat16)z << endl; + cout << "c = " << c << endl; + cout << "r = " << (BFloat16)r << " : " << to_string_d(BFloat16(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + mpfr_clears(mw, mx, my, mz, NULL); + } +#endif + } + } + + cout << endl << "OK" << endl; + return 0; +} diff --git a/validation/extern/tlfloat/src/tester/test_hash.cpp b/validation/extern/tlfloat/src/tester/test_hash.cpp new file mode 100644 index 0000000..6b0bfd5 --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_hash.cpp @@ -0,0 +1,587 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include + +#include "tlfloat/tlmath.hpp" +#include "testerutil.hpp" + +using namespace std; +using namespace tlfloat; + +int N = 10000; + +auto sha256 = PSHA2_256_Internal(); + +template +T rnd(shared_ptr rng) { + for(;;) { + T f; + rng->nextBytesW((unsigned char *)&f, sizeof(f)); + if (finite(f)) return f; + } +} + +// + +template +using Func1 = T (*)(const T&); + +template func> +void computeHash(const char *mes, T *r, T *x, FILE *fp=nullptr, int mode=0) { + for (int i = 0; i < N; i++) { + T f = func(x[i]); + if (mode == 0) { + sha256.appendWord((void *)&f.m, sizeof(f.m)); + } else if (mode == 1) { + fwrite_((void *)&x[i].m, sizeof(x[i].m), 1, fp); + fwrite_((void *)&f.m, sizeof(f.m), 1, fp); + } else if (mode == 2) { + T t = 0; + if (fread((void *)&t, sizeof(t), 1, fp) != 1 || t.m != x[i].m) { + cout << mes << " : arg does not match" << endl; + cout << "arg file : " << toHexString(t.m) << " : " << to_string(t, 75) << endl; + cout << "arg host : " << toHexString(x[i].m) << " : " << to_string(x[i], 75) << endl; + } + if (fread((void *)&t, sizeof(t), 1, fp) != 1 || t.m != f.m) { + cout << mes << endl; + cout << "arg1 : " << to_string(x[i], 75) << endl; + cout << "file : " << toHexString(t.m) << " : " << to_string(t, 75) << endl; + cout << "host : " << toHexString(f.m) << " : " << to_string(f, 75) << endl; + } + } + } +} + +template +using Func2 = T (*)(const T&, const T&); + +template func> +void computeHash(const char *mes, T *r, T *x, T *y, FILE *fp=nullptr, int mode=0) { + for (int i = 0; i < N; i++) { + T f = func(x[i], y[i]); + if (mode == 0) { + sha256.appendWord((void *)&f.m, sizeof(f.m)); + } else if (mode == 1) { + fwrite_((void *)&f.m, sizeof(f.m), 1, fp); + } else if (mode == 2) { + T t = 0; + if (fread((void *)&t, sizeof(t), 1, fp) != 1 || t.m != f.m) { + cout << mes << endl; + cout << "arg1 : " << to_string(x[i], 75) << endl; + cout << "arg2 : " << to_string(y[i], 75) << endl; + cout << "file : " << toHexString(t.m) << " : " << to_string(t, 75) << endl; + cout << "host : " << toHexString(f.m) << " : " << to_string(f, 75) << endl; + } + } + } +} + +template +using Func2i = xpair (*)(const T&, const T&); + +template func> +void computeHash(const char *mes, T *r, T *x, T *y, FILE *fp=nullptr, int mode=0) { + for (int i = 0; i < N; i++) { + xpair p = func(x[i], y[i]); + if (mode == 0) { + sha256.appendWord((void *)&p.first.m, sizeof(p.first.m)); + sha256.appendWord((void *)&p.second, sizeof(p.second)); + } else if (mode == 1) { + fwrite_((void *)&p.first.m, sizeof(p.first.m), 1, fp); + fwrite_((void *)&p.second, sizeof(p.second), 1, fp); + } else if (mode == 2) { + T t = 0; + size_t s0 = fread((void *)&t, sizeof(t), 1, fp); + int64_t q = 0; + size_t s1 = fread((void *)&q, sizeof(q), 1, fp); + if (s0 != 1 || s1 != 1 || t.m != p.first.m || q != p.second) { + cout << mes << endl; + cout << "arg1 : " << to_string(x[i], 75) << endl; + cout << "arg2 : " << to_string(y[i], 75) << endl; + cout << "file : " << toHexString(t.m) << " : " << to_string(t, 75) << ", " << q << endl; + cout << "host : " << toHexString(p.first.m) << " : " << to_string(p.first, 75) << ", " << p.second << endl; + } + } + } +} + +template +using Func3 = T (*)(const T&, const T&, const T&); + +template func> +void computeHash(const char *mes, T *r, T *x, T *y, T *z, FILE *fp=nullptr, int mode=0) { + for (int i = 0; i < N; i++) { + T f = func(x[i], y[i], z[i]); + if (mode == 0) { + sha256.appendWord((void *)&f.m, sizeof(f.m)); + } else if (mode == 1) { + fwrite_((void *)&f.m, sizeof(f.m), 1, fp); + } else if (mode == 2) { + T t = 0; + if (fread((void *)&t, sizeof(t), 1, fp) != 1 || t.m != f.m) { + cout << mes << endl; + cout << "arg1 : " << to_string(x[i], 75) << endl; + cout << "arg2 : " << to_string(y[i], 75) << endl; + cout << "arg3 : " << to_string(z[i], 75) << endl; + cout << "file : " << toHexString(t.m) << " : " << to_string(t, 75) << endl; + cout << "host : " << toHexString(f.m) << " : " << to_string(f, 75) << endl; + } + } + } +} + +// + +template static constexpr T fabs_(const T &a1) { return fabs(a1); } +template static constexpr T copysign_(const T &a1, const T &a2) { return copysign(a1, a2); } +template static constexpr T fmax_(const T &a1, const T &a2) { return fmax(a1, a2); } +template static constexpr T fmin_(const T &a1, const T &a2) { return fmin(a1, a2); } +template static constexpr T fdim_(const T &a1, const T &a2) { return fdim(a1, a2); } +template static constexpr T add_(const T &a1, const T &a2) { return a1 + a2; } +template static constexpr T mul_(const T &a1, const T &a2) { return a1 * a2; } +template static constexpr T div_(const T &a1, const T &a2) { return a1 / a2; } +template static constexpr T fma_(const T &a1, const T &a2, const T &a3) { return fma(a1, a2, a3); } +template static constexpr T sqrt_(const T &a) { return sqrt(a); } +template static constexpr T hypot_(const T &a1, const T &a2) { return hypot(a1, a2); } +template static constexpr T trunc_(const T &a) { return trunc(a); } +template static constexpr T floor_(const T &a) { return floor(a); } +template static constexpr T ceil_(const T &a) { return ceil(a); } +template static constexpr T round_(const T &a) { return round(a); } +template static constexpr T rint_(const T &a) { return rint(a); } +template static constexpr T nextafter_(const T &a1, const T &a2) { return nextafter(a1, a2); } +template static constexpr T lgamma_(const T &a1) { return lgamma(a1, nullptr); } + +// + +int main(int argc, char **argv) { + FILE *fp = nullptr; + int mode = 0; + if (argc == 3 && strcmp(argv[1], "r") == 0) { + fp = fopen(argv[2], "rb"); + if (!fp) { + cerr << "Could not open " << argv[2] << endl; + exit(-1); + } + mode = 2; + } else if (argc == 3 && strcmp(argv[1], "w") == 0) { + fp = fopen(argv[2], "wb"); + if (!fp) { + cerr << "Could not open " << argv[2] << endl; + exit(-1); + } + mode = 1; + } + + auto rng = shared_ptr(new LCG64(0)); + + Octuple *xo = (Octuple *)malloc(N*sizeof(Octuple)); + Octuple *yo = (Octuple *)malloc(N*sizeof(Octuple)); + Octuple *zo = (Octuple *)malloc(N*sizeof(Octuple)); + Octuple *ro = (Octuple *)malloc(N*sizeof(Octuple)); + + Quad *xq = (Quad *)malloc(N*sizeof(Quad)); + Quad *yq = (Quad *)malloc(N*sizeof(Quad)); + Quad *zq = (Quad *)malloc(N*sizeof(Quad)); + Quad *rq = (Quad *)malloc(N*sizeof(Quad)); + + Double *xd = (Double *)malloc(N*sizeof(Double)); + Double *yd = (Double *)malloc(N*sizeof(Double)); + Double *zd = (Double *)malloc(N*sizeof(Double)); + Double *rd = (Double *)malloc(N*sizeof(Double)); + + Float *xf = (Float *)malloc(N*sizeof(Float)); + Float *yf = (Float *)malloc(N*sizeof(Float)); + Float *zf = (Float *)malloc(N*sizeof(Float)); + Float *rf = (Float *)malloc(N*sizeof(Float)); + + Half *xh = (Half *)malloc(N*sizeof(Half)); + Half *yh = (Half *)malloc(N*sizeof(Half)); + Half *zh = (Half *)malloc(N*sizeof(Half)); + Half *rh = (Half *)malloc(N*sizeof(Half)); + + for (int i = 0; i < N; i++) { + xo[i] = rnd(rng); + yo[i] = rnd(rng); + zo[i] = rnd(rng); + + xq[i] = rnd(rng); + yq[i] = rnd(rng); + zq[i] = rnd(rng); + + xd[i] = rnd(rng); + yd[i] = rnd(rng); + zd[i] = rnd(rng); + + xf[i] = rnd(rng); + yf[i] = rnd(rng); + zf[i] = rnd(rng); + + xh[i] = rnd(rng); + yh[i] = rnd(rng); + zh[i] = rnd(rng); + } + + computeHash("Octuple fabs", ro, xo, fp, mode); + computeHash("Quad fabs", rq, xq, fp, mode); + computeHash("Double fabs", rd, xd, fp, mode); + computeHash("Float fabs", rf, xf, fp, mode); + computeHash("Half fabs", rh, xh, fp, mode); + + computeHash("Octuple copysign", ro, xo, yo, fp, mode); + computeHash("Quad copysign", rq, xq, yq, fp, mode); + computeHash("Double copysign", rd, xd, yd, fp, mode); + computeHash("Float copysign", rf, xf, yf, fp, mode); + computeHash("Half copysign", rh, xh, yh, fp, mode); + + computeHash("Octuple fmax", ro, xo, yo, fp, mode); + computeHash("Quad fmax", rq, xq, yq, fp, mode); + computeHash("Double fmax", rd, xd, yd, fp, mode); + computeHash("Float fmax", rf, xf, yf, fp, mode); + computeHash("Half fmax", rh, xh, yh, fp, mode); + + computeHash("Octuple fmin", ro, xo, yo, fp, mode); + computeHash("Quad fmin", rq, xq, yq, fp, mode); + computeHash("Double fmin", rd, xd, yd, fp, mode); + computeHash("Float fmin", rf, xf, yf, fp, mode); + computeHash("Half fmin", rh, xh, yh, fp, mode); + + computeHash("Octuple fdim", ro, xo, yo, fp, mode); + computeHash("Quad fdim", rq, xq, yq, fp, mode); + computeHash("Double fdim", rd, xd, yd, fp, mode); + computeHash("Float fdim", rf, xf, yf, fp, mode); + computeHash("Half fdim", rh, xh, yh, fp, mode); + + computeHash("Octuple add_", ro, xo, yo, fp, mode); + computeHash("Quad add_", rq, xq, yq, fp, mode); + computeHash("Double add_", rd, xd, yd, fp, mode); + computeHash("Float add_", rf, xf, yf, fp, mode); + computeHash("Half add_", rh, xh, yh, fp, mode); + + computeHash("Octuple mul_", ro, xo, yo, fp, mode); + computeHash("Quad mul_", rq, xq, yq, fp, mode); + computeHash("Double mul_", rd, xd, yd, fp, mode); + computeHash("Float mul_", rf, xf, yf, fp, mode); + computeHash("Half mul_", rh, xh, yh, fp, mode); + + computeHash("Octuple div_", ro, xo, yo, fp, mode); + computeHash("Quad div_", rq, xq, yq, fp, mode); + computeHash("Double div_", rd, xd, yd, fp, mode); + computeHash("Float div_", rf, xf, yf, fp, mode); + computeHash("Half div_", rh, xh, yh, fp, mode); + + computeHash("Octuple fma", ro, xo, yo, zo, fp, mode); + computeHash("Quad fma", rq, xq, yq, zq, fp, mode); + computeHash("Double fma", rd, xd, yd, zd, fp, mode); + computeHash("Float fma", rf, xf, yf, zf, fp, mode); + computeHash("Half fma", rh, xh, yh, zh, fp, mode); + + computeHash("Octuple sqrt", ro, xo, fp, mode); + computeHash("Quad sqrt", rq, xq, fp, mode); + computeHash("Double sqrt", rd, xd, fp, mode); + computeHash("Float sqrt", rf, xf, fp, mode); + computeHash("Half sqrt", rh, xh, fp, mode); + + computeHash("Octuple hypot", ro, xo, yo, fp, mode); + computeHash("Quad hypot", rq, xq, yq, fp, mode); + computeHash("Double hypot", rd, xd, yd, fp, mode); + computeHash("Float hypot", rf, xf, yf, fp, mode); + computeHash("Half hypot", rh, xh, yh, fp, mode); + + computeHash("Octuple trunc", ro, xo, fp, mode); + computeHash("Quad trunc", rq, xq, fp, mode); + computeHash("Double trunc", rd, xd, fp, mode); + computeHash("Float trunc", rf, xf, fp, mode); + computeHash("Half trunc", rh, xh, fp, mode); + + computeHash("Octuple floor", ro, xo, fp, mode); + computeHash("Quad floor", rq, xq, fp, mode); + computeHash("Double floor", rd, xd, fp, mode); + computeHash("Float floor", rf, xf, fp, mode); + computeHash("Half floor", rh, xh, fp, mode); + + computeHash("Octuple ceil", ro, xo, fp, mode); + computeHash("Quad ceil", rq, xq, fp, mode); + computeHash("Double ceil", rd, xd, fp, mode); + computeHash("Float ceil", rf, xf, fp, mode); + computeHash("Half ceil", rh, xh, fp, mode); + + computeHash("Octuple round", ro, xo, fp, mode); + computeHash("Quad round", rq, xq, fp, mode); + computeHash("Double round", rd, xd, fp, mode); + computeHash("Float round", rf, xf, fp, mode); + computeHash("Half round", rh, xh, fp, mode); + + computeHash("Octuple rint", ro, xo, fp, mode); + computeHash("Quad rint", rq, xq, fp, mode); + computeHash("Double rint", rd, xd, fp, mode); + computeHash("Float rint", rf, xf, fp, mode); + computeHash("Half rint", rh, xh, fp, mode); + + computeHash("Octuple nextafter", ro, xo, yo, fp, mode); + computeHash("Quad nextafter", rq, xq, yq, fp, mode); + computeHash("Double nextafter", rd, xd, yd, fp, mode); + computeHash("Float nextafter", rf, xf, yf, fp, mode); + computeHash("Half nextafter", rh, xh, yh, fp, mode); + + computeHash("Octuple sin", ro, xo, fp, mode); + computeHash("Quad sin", rq, xq, fp, mode); + computeHash("Double sin", rd, xd, fp, mode); + computeHash("Float sin", rf, xf, fp, mode); + computeHash("Half sin", rh, xh, fp, mode); + + computeHash("Octuple cos", ro, xo, fp, mode); + computeHash("Quad cos", rq, xq, fp, mode); + computeHash("Double cos", rd, xd, fp, mode); + computeHash("Float cos", rf, xf, fp, mode); + computeHash("Half cos", rh, xh, fp, mode); + + computeHash("Octuple tan", ro, xo, fp, mode); + computeHash("Quad tan", rq, xq, fp, mode); + computeHash("Double tan", rd, xd, fp, mode); + computeHash("Float tan", rf, xf, fp, mode); + computeHash("Half tan", rh, xh, fp, mode); + + computeHash("Octuple sinpi", ro, xo, fp, mode); + computeHash("Quad sinpi", rq, xq, fp, mode); + computeHash("Double sinpi", rd, xd, fp, mode); + computeHash("Float sinpi", rf, xf, fp, mode); + computeHash("Half sinpi", rh, xh, fp, mode); + + computeHash("Octuple cospi", ro, xo, fp, mode); + computeHash("Quad cospi", rq, xq, fp, mode); + computeHash("Double cospi", rd, xd, fp, mode); + computeHash("Float cospi", rf, xf, fp, mode); + computeHash("Half cospi", rh, xh, fp, mode); + + computeHash("Octuple tanpi", ro, xo, fp, mode); + computeHash("Quad tanpi", rq, xq, fp, mode); + computeHash("Double tanpi", rd, xd, fp, mode); + computeHash("Float tanpi", rf, xf, fp, mode); + computeHash("Half tanpi", rh, xh, fp, mode); + + computeHash("Octuple atan2", ro, xo, yo, fp, mode); + computeHash("Quad atan2", rq, xq, yq, fp, mode); + computeHash("Double atan2", rd, xd, yd, fp, mode); + computeHash("Float atan2", rf, xf, yf, fp, mode); + computeHash("Half atan2", rh, xh, yh, fp, mode); + + computeHash("Octuple asin", ro, xo, fp, mode); + computeHash("Quad asin", rq, xq, fp, mode); + computeHash("Double asin", rd, xd, fp, mode); + computeHash("Float asin", rf, xf, fp, mode); + computeHash("Half asin", rh, xh, fp, mode); + + computeHash("Octuple acos", ro, xo, fp, mode); + computeHash("Quad acos", rq, xq, fp, mode); + computeHash("Double acos", rd, xd, fp, mode); + computeHash("Float acos", rf, xf, fp, mode); + computeHash("Half acos", rh, xh, fp, mode); + + computeHash("Octuple atan", ro, xo, fp, mode); + computeHash("Quad atan", rq, xq, fp, mode); + computeHash("Double atan", rd, xd, fp, mode); + computeHash("Float atan", rf, xf, fp, mode); + computeHash("Half atan", rh, xh, fp, mode); + + computeHash("Octuple log", ro, xo, fp, mode); + computeHash("Quad log", rq, xq, fp, mode); + computeHash("Double log", rd, xd, fp, mode); + computeHash("Float log", rf, xf, fp, mode); + computeHash("Half log", rh, xh, fp, mode); + + computeHash("Octuple log2", ro, xo, fp, mode); + computeHash("Quad log2", rq, xq, fp, mode); + computeHash("Double log2", rd, xd, fp, mode); + computeHash("Float log2", rf, xf, fp, mode); + computeHash("Half log2", rh, xh, fp, mode); + + computeHash("Octuple log10", ro, xo, fp, mode); + computeHash("Quad log10", rq, xq, fp, mode); + computeHash("Double log10", rd, xd, fp, mode); + computeHash("Float log10", rf, xf, fp, mode); + computeHash("Half log10", rh, xh, fp, mode); + + computeHash("Octuple log1p", ro, xo, fp, mode); + computeHash("Quad log1p", rq, xq, fp, mode); + computeHash("Double log1p", rd, xd, fp, mode); + computeHash("Float log1p", rf, xf, fp, mode); + computeHash("Half log1p", rh, xh, fp, mode); + + computeHash("Octuple exp", ro, xo, fp, mode); + computeHash("Quad exp", rq, xq, fp, mode); + computeHash("Double exp", rd, xd, fp, mode); + computeHash("Float exp", rf, xf, fp, mode); + computeHash("Half exp", rh, xh, fp, mode); + + computeHash("Octuple exp2", ro, xo, fp, mode); + computeHash("Quad exp2", rq, xq, fp, mode); + computeHash("Double exp2", rd, xd, fp, mode); + computeHash("Float exp2", rf, xf, fp, mode); + computeHash("Half exp2", rh, xh, fp, mode); + + computeHash("Octuple exp10", ro, xo, fp, mode); + computeHash("Quad exp10", rq, xq, fp, mode); + computeHash("Double exp10", rd, xd, fp, mode); + computeHash("Float exp10", rf, xf, fp, mode); + computeHash("Half exp10", rh, xh, fp, mode); + + computeHash("Octuple expm1", ro, xo, fp, mode); + computeHash("Quad expm1", rq, xq, fp, mode); + computeHash("Double expm1", rd, xd, fp, mode); + computeHash("Float expm1", rf, xf, fp, mode); + computeHash("Half expm1", rh, xh, fp, mode); + + computeHash("Octuple pow", ro, xo, yo, fp, mode); + computeHash("Quad pow", rq, xq, yq, fp, mode); + computeHash("Double pow", rd, xd, yd, fp, mode); + computeHash("Float pow", rf, xf, yf, fp, mode); + computeHash("Half pow", rh, xh, yh, fp, mode); + + computeHash("Octuple cbrt", ro, xo, fp, mode); + computeHash("Quad cbrt", rq, xq, fp, mode); + computeHash("Double cbrt", rd, xd, fp, mode); + computeHash("Float cbrt", rf, xf, fp, mode); + computeHash("Half cbrt", rh, xh, fp, mode); + + computeHash("Octuple sinh", ro, xo, fp, mode); + computeHash("Quad sinh", rq, xq, fp, mode); + computeHash("Double sinh", rd, xd, fp, mode); + computeHash("Float sinh", rf, xf, fp, mode); + computeHash("Half sinh", rh, xh, fp, mode); + + computeHash("Octuple cosh", ro, xo, fp, mode); + computeHash("Quad cosh", rq, xq, fp, mode); + computeHash("Double cosh", rd, xd, fp, mode); + computeHash("Float cosh", rf, xf, fp, mode); + computeHash("Half cosh", rh, xh, fp, mode); + + computeHash("Octuple tanh", ro, xo, fp, mode); + computeHash("Quad tanh", rq, xq, fp, mode); + computeHash("Double tanh", rd, xd, fp, mode); + computeHash("Float tanh", rf, xf, fp, mode); + computeHash("Half tanh", rh, xh, fp, mode); + + computeHash("Octuple asinh", ro, xo, fp, mode); + computeHash("Quad asinh", rq, xq, fp, mode); + computeHash("Double asinh", rd, xd, fp, mode); + computeHash("Float asinh", rf, xf, fp, mode); + computeHash("Half asinh", rh, xh, fp, mode); + + computeHash("Octuple acosh", ro, xo, fp, mode); + computeHash("Quad acosh", rq, xq, fp, mode); + computeHash("Double acosh", rd, xd, fp, mode); + computeHash("Float acosh", rf, xf, fp, mode); + computeHash("Half acosh", rh, xh, fp, mode); + + computeHash("Octuple atanh", ro, xo, fp, mode); + computeHash("Quad atanh", rq, xq, fp, mode); + computeHash("Double atanh", rd, xd, fp, mode); + computeHash("Float atanh", rf, xf, fp, mode); + computeHash("Half atanh", rh, xh, fp, mode); + + computeHash("Octuple erf", ro, xo, fp, mode); + computeHash("Quad erf", rq, xq, fp, mode); + computeHash("Double erf", rd, xd, fp, mode); + computeHash("Float erf", rf, xf, fp, mode); + computeHash("Half erf", rh, xh, fp, mode); + + computeHash("Octuple erfc", ro, xo, fp, mode); + computeHash("Quad erfc", rq, xq, fp, mode); + computeHash("Double erfc", rd, xd, fp, mode); + computeHash("Float erfc", rf, xf, fp, mode); + computeHash("Half erfc", rh, xh, fp, mode); + + computeHash("Octuple tgamma", ro, xo, fp, mode); + computeHash("Quad tgamma", rq, xq, fp, mode); + computeHash("Double tgamma", rd, xd, fp, mode); + computeHash("Float tgamma", rf, xf, fp, mode); + computeHash("Half tgamma", rh, xh, fp, mode); + + computeHash("Octuple lgamma", ro, xo, fp, mode); + computeHash("Quad lgamma", rq, xq, fp, mode); + computeHash("Double lgamma", rd, xd, fp, mode); + computeHash("Float lgamma", rf, xf, fp, mode); + computeHash("Half lgamma", rh, xh, fp, mode); + + computeHash("Octuple fmod", ro, xo, yo, fp, mode); + computeHash("Quad fmod", rq, xq, yq, fp, mode); + computeHash("Double fmod", rd, xd, yd, fp, mode); + computeHash("Float fmod", rf, xf, yf, fp, mode); + computeHash("Half fmod", rh, xh, yh, fp, mode); + + computeHash("Octuple remainder", ro, xo, yo, fp, mode); + computeHash("Quad remainder", rq, xq, yq, fp, mode); + computeHash("Double remainder", rd, xd, yd, fp, mode); + computeHash("Float remainder", rf, xf, yf, fp, mode); + computeHash("Half remainder", rh, xh, yh, fp, mode); + + computeHash("Octuple remquo", ro, xo, yo, fp, mode); + computeHash("Quad remquo", rq, xq, yq, fp, mode); + computeHash("Double remquo", rd, xd, yd, fp, mode); + computeHash("Float remquo", rf, xf, yf, fp, mode); + computeHash("Half remquo", rh, xh, yh, fp, mode); + + free(rh); + free(zh); + free(yh); + free(xh); + + free(rf); + free(zf); + free(yf); + free(xf); + + free(rd); + free(zd); + free(yd); + free(xd); + + free(rq); + free(zq); + free(yq); + free(xq); + + free(ro); + free(zo); + free(yo); + free(xo); + + if (mode == 0) { + uint8_t h[32]; + sha256.finalize_bytes(&h); + + if (argc == 1) { + for(int i=0;i<32;i++) printf("%02x", h[i]); + printf("\n"); + } else { + unsigned int a[32]; + if (sscanf(argv[1], "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + &a[ 0], &a[ 1], &a[ 2], &a[ 3], &a[ 4], &a[ 5], &a[ 6], &a[ 7], &a[ 8], &a[ 9], + &a[10], &a[11], &a[12], &a[13], &a[14], &a[15], &a[16], &a[17], &a[18], &a[19], + &a[20], &a[21], &a[22], &a[23], &a[24], &a[25], &a[26], &a[27], &a[28], &a[29], + &a[30], &a[31]) != 32) { + printf("NG (arg format)\n"); + exit(-1); + } + for(int i=0;i<32;i++) { + if (h[i] != a[i]) { + printf("NG\n"); + exit(-1); + } + } + printf("OK\n"); + } + } + + if (fp) fclose(fp); + + return 0; +} diff --git a/validation/extern/tlfloat/src/tester/test_mpfr.cpp b/validation/extern/tlfloat/src/tester/test_mpfr.cpp new file mode 100644 index 0000000..b4072f1 --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_mpfr.cpp @@ -0,0 +1,4086 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#include + +#if defined(TLFLOAT_ENABLE_LIBQUADMATH) +#include +#endif + +#if defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) +#define MPFR_WANT_FLOAT128 +#endif + +#include + +#include "suppress.hpp" + +#include "tlfloat/tlmath.hpp" +#include "testerutil.hpp" + +using namespace std; +using namespace tlfloat; +using namespace tlfloat::detail; + +#define TEST_FLOAT +#define TEST_DOUBLE +#define TEST_QUAD +#define TEST_OCTUPLE + +#define TEST_SQRT +#define TEST_TRIG +#define TEST_ROUND +#define TEST_ARITH +#define TEST_INVTRIG +#define TEST_EXP +#define TEST_LOG +#define TEST_POW +#define TEST_CBRT +#define TEST_HYP +#define TEST_MODREM +#define TEST_ERF +#define TEST_GAMMA +#define TEST_MISC + +int main(int argc, char **argv) { + uint64_t niter = argc > 1 ? strtoull(argv[1], nullptr, 10) : 100000; + + if (niter == 0) { +#if defined(__GNUC__) + cout << "Build " << __DATE__ << " " << __TIME__ << endl; +#endif + cout << "Testing continuously" << endl; + } + +#ifdef TEST_FLOAT + cout << " "; +#endif +#ifdef TEST_DOUBLE + cout << " "; +#endif +#ifdef TEST_QUAD + cout << " "; +#endif +#ifdef TEST_OCTUPLE + cout << " "; +#endif +#ifdef TEST_SQRT + cout << "[SQRT] "; +#endif +#ifdef TEST_TRIG + cout << "[TRIG] "; +#endif +#ifdef TEST_ROUND + cout << "[ROUND] "; +#endif +#ifdef TEST_ARITH + cout << "[ARITH] "; +#endif +#ifdef TEST_INVTRIG + cout << "[INVTRIG] "; +#endif +#ifdef TEST_EXP + cout << "[EXP] "; +#endif +#ifdef TEST_LOG + cout << "[LOG] "; +#endif +#ifdef TEST_POW + cout << "[POW] "; +#endif +#ifdef TEST_CBRT + cout << "[CBRT] "; +#endif +#ifdef TEST_HYP + cout << "[HYP] "; +#endif +#ifdef TEST_MODREM + cout << "[MODREM] "; +#endif +#ifdef TEST_ERF + cout << "[ERF] "; +#endif +#ifdef TEST_GAMMA + cout << "[GAMMA] "; +#endif +#ifdef TEST_MISC + cout << "[MISC] "; +#endif + cout << endl; + + auto rng = createPreferredRNG(); + + for(uint64_t i=0;niter == 0 || inextLT(7); + + { + float x = rndf(rng), y = rndf(rng); + + { + mpfr_set_default_prec(32); + + mpfr_t mx, my; + mpfr_inits(mx, my, NULL); + +#if defined(TEST_FLOAT) && defined(TEST_SQRT) + { + ufloat xfr = sqrt(Float(x)).getUnpacked().cast((const ufloat *)nullptr); + float r = (float)Float(xfr.cast((const ufloat *)nullptr)); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_sqrt(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.5) { + printf("\nfloat sqrt\n"); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n", c); + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + ufloat xfr = hypot(Float(x), Float(y)).getUnpacked().cast((const ufloat *)nullptr); + float r = (float)Float(xfr.cast((const ufloat *)nullptr)); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_set_d(my, y, GMP_RNDN); + mpfr_hypot(mx, mx, my, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat hypot\n"); + printf("x = %.8g\n", x); + printf("y = %.8g\n", y); + printf("t = %.8g\n", r); + printf("c = %.8g\n", c); + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_FLOAT) && defined(TEST_TRIG) + { + float r = (float)sin(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_sin(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat sin\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)cos(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_cos(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat cos\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)tan(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_tan(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.56) { + printf("\nfloat tan\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + +#ifdef TLFLOAT_ENABLE_MPFR_SINPI + { + float r = (float)sinpi(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_sinpi(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat sinpi\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)cospi(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_cospi(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat cospi\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)tanpi(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_tanpi(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.56) { + printf("\nfloat tanpi\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif +#endif + +#if defined(TEST_FLOAT) && defined(TEST_INVTRIG) + { + float r = (float)atan2(Float(y), Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(my, y, GMP_RNDN); + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_atan2(mx, my, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat atan2\n"); + printf("ulp = %g\n", ulp); + printf("y = %.8g\n", y); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)asin(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_asin(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat asin\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)acos(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_acos(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat acos\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)atan(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_atan(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat atan\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_FLOAT) && defined(TEST_EXP) + { + float r = (float)exp(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_exp(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat exp\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)expm1(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_expm1(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat expm1\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)exp2(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_exp2(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat exp2\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)exp10(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_exp10(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat exp10\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_FLOAT) && defined(TEST_LOG) + { + float r = (float)log(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_log(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat log\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)log1p(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_log1p(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat log1p\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)log2(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_log2(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat log2\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)log10(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_log10(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat log10\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_FLOAT) && defined(TEST_POW) + { + float r = (float)pow(Float(y), Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(my, y, GMP_RNDN); + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_pow(mx, my, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat pow\n"); + printf("ulp = %g\n", ulp); + printf("y = %.8g\n", y); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_FLOAT) && defined(TEST_MODREM) + { + float r = (float)fmod(Float(y), Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(my, y, GMP_RNDN); + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_fmod(mx, my, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.5) { + printf("\nfloat fmod\n"); + printf("ulp = %g\n", ulp); + printf("y = %.8g\n", y); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)remainder(Float(y), Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(my, y, GMP_RNDN); + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_remainder(mx, my, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.5) { + printf("\nfloat remainder\n"); + printf("ulp = %g\n", ulp); + printf("y = %.8g\n", y); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + auto a = remquo(Float(y), Float(x)); + ufloat xfr = Float(a.first).getUnpacked(); + + mpfr_set_d(my, y, GMP_RNDN); + mpfr_set_d(mx, x, GMP_RNDN); + long int q = 0; + mpfr_remquo(mx, &q, my, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.5 || !eqquo(a.second, q)) { + printf("\nfloat remquo\n"); + printf("ulp = %g\n", ulp); + printf("y = %.8g\n", y); + printf("x = %.8g\n", x); + printf("t = %.8g, %ld\n", (float)a.first, (long int)a.second); + printf("c = %.8g, %ld\n\n", c, q); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_FLOAT) && defined(TEST_CBRT) + { + float r = (float)cbrt(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_cbrt(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat cbrt\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_FLOAT) && defined(TEST_HYP) + { + float r = (float)sinh(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_sinh(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat sinh\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)cosh(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_cosh(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat cosh\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)tanh(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_tanh(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat tanh\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)asinh(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_asinh(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat asinh\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)acosh(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_acosh(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat acosh\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)atanh(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_atanh(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat atanh\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_FLOAT) && defined(TEST_ERF) + { + float r = (float)erf(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_erf(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat erf\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)erfc(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_erfc(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat erfc\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_FLOAT) && defined(TEST_GAMMA) + { + float r = (float)tgamma(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_gamma(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55) { + printf("\nfloat tgamma\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + +#if 0 + { + bool rsign = false; + float r = (float)lgamma(Float(x), &rsign); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + int msign = 0; + mpfr_lgamma(mx, &msign, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.55 || (msign == -1) != rsign) { + printf("\nfloat lgamma\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g, sign = %d\n" , r, (int)rsign); + printf("c = %.8g, sign = %d\n\n", c, (int)(msign == -1)); + cout << "NG" << endl; + //exit(-1); + } + } +#endif +#endif + +#if defined(TEST_FLOAT) && defined(TEST_MISC) + { + float r = (float)fabs(Float(x)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_abs(mx, mx, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.5) { + printf("\nfloat fabs\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)copysign(Float(x), Float(y)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_set_d(my, y, GMP_RNDN); + mpfr_copysign(mx, mx, my, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.5 && !isnan(y)) { + printf("\nfloat copysign\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("y = %.8g\n", y); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)fmax(Float(x), Float(y)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_set_d(my, y, GMP_RNDN); + mpfr_max(mx, mx, my, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.5) { + printf("\nfloat fmax\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)fmin(Float(x), Float(y)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_set_d(my, y, GMP_RNDN); + mpfr_min(mx, mx, my, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.5) { + printf("\nfloat fmin\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + float r = (float)fdim(Float(x), Float(y)); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_set_d(my, y, GMP_RNDN); + mpfr_dim(mx, mx, my, GMP_RNDN); + float c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.5) { + printf("\nfloat fdim\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + Float w; + float r = (float)modf(Float(x), &w); + ufloat xfr = Float(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_modf(mx, my, mx, GMP_RNDN); + double ci = mpfr_get_d(mx, GMP_RNDN); + float c = mpfr_get_d(my, GMP_RNDN); + double ulp = countULP(xfr, my, ufloat::flt_true_min(), ufloat::flt_max()); + if (ulp > 0.5 || (!(isnan(w) && isnan(ci)) && double(w) != ci)) { + printf("\nfloat modf\n"); + printf("ulp = %g\n", ulp); + printf("x = %.8g\n", x); + printf("t = %.8g\n", r); + printf("c = %.8g\n", c); + printf("ci = %.8g\n\n", ci); + cout << "NG" << endl; + exit(-1); + } + } +#endif + + mpfr_clears(mx, my, NULL); + } + } + + // + + { + double x = rndd(rng), y = rndd(rng); + + { + mpfr_set_default_prec(64); + + mpfr_t mx, my; + mpfr_inits(mx, my, NULL); + +#if defined(TEST_DOUBLE) && defined(TEST_SQRT) + { + auto xfr = sqrt(Double(x)).getUnpacked().cast((const udouble *)nullptr); + double r = (double)Double(xfr.cast((const udouble *)nullptr)); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_sqrt(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.5) { + printf("\ndouble sqrt\n"); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n", c); + printf("ulp = %g\n", ulp); + exit(-1); + } + } + + { + auto xfr = hypot(Double(x), Double(y)).getUnpacked().cast((const udouble *)nullptr); + double r = (double)Double(xfr.cast((const udouble *)nullptr)); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_set_d(my, y, GMP_RNDN); + mpfr_hypot(mx, mx, my, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble hypot\n"); + printf("x = %.20lg\n", x); + printf("y = %.20lg\n", y); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n", c); + printf("ulp = %g\n", ulp); + exit(-1); + } + } +#endif + +#if defined(TEST_DOUBLE) && defined(TEST_TRIG) + { + double r = (double)sin(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_sin(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.506) { + printf("\ndouble sin\n"); + printf("ulp = %g\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)cos(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_cos(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.506) { + printf("\ndouble cos\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)tan(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_tan(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.51) { + printf("\ndouble tan\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + +#ifdef TLFLOAT_ENABLE_MPFR_SINPI + { + double r = (double)sinpi(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_sinpi(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.506) { + printf("\ndouble sinpi\n"); + printf("ulp = %g\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)cospi(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_cospi(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.506) { + printf("\ndouble cospi\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)tanpi(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_tanpi(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.51) { + printf("\ndouble tanpi\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif +#endif + +#if defined(TEST_DOUBLE) && defined(TEST_INVTRIG) + { + double r = (double)atan2(Double(y), Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(my, y, GMP_RNDN); + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_atan2(mx, my, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.51) { + printf("\ndouble atan2\n"); + printf("ulp = %lg\n", ulp); + printf("y = %.20lg\n", y); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)asin(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_asin(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.51) { + printf("\ndouble asin\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)acos(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_acos(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.51) { + printf("\ndouble acos\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)atan(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_atan(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.51) { + printf("\ndouble atan\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_DOUBLE) && defined(TEST_EXP) + { + double r = (double)exp(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_exp(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble exp\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)expm1(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_expm1(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble expm1\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)exp2(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_exp2(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble exp2\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)exp10(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_exp10(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble exp10\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_DOUBLE) && defined(TEST_LOG) + { + double r = (double)log(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_log(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble log\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)log1p(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_log1p(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble log1p\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)log2(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_log2(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.506) { + printf("\ndouble log2\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)log10(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_log10(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.506) { + printf("\ndouble log10\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_DOUBLE) && defined(TEST_POW) + { + double r = (double)pow(Double(y), Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(my, y, GMP_RNDN); + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_pow(mx, my, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.51) { + printf("\ndouble pow\n"); + printf("ulp = %lg\n", ulp); + printf("y = %.20lg\n", y); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_DOUBLE) && defined(TEST_MODREM) + { + double r = (double)fmod(Double(y), Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(my, y, GMP_RNDN); + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_fmod(mx, my, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.5) { + printf("\ndouble fmod\n"); + printf("ulp = %lg\n", ulp); + printf("y = %.20lg\n", y); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)remainder(Double(y), Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(my, y, GMP_RNDN); + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_remainder(mx, my, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.5) { + printf("\ndouble remainder\n"); + printf("ulp = %lg\n", ulp); + printf("y = %.20lg\n", y); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + auto a = remquo(Double(y), Double(x)); + udouble xfr = Double(a.first).getUnpacked(); + + mpfr_set_d(my, y, GMP_RNDN); + mpfr_set_d(mx, x, GMP_RNDN); + long int q = 0; + mpfr_remquo(mx, &q, my, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.5 || !eqquo(a.second, q)) { + printf("\ndouble remquo\n"); + printf("ulp = %lg\n", ulp); + printf("y = %.20lg\n", y); + printf("x = %.20lg\n", x); + printf("t = %.20lg, %ld\n", (double)a.first, (long int)a.second); + printf("c = %.20lg, %ld\n\n", c, (long int)q); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_DOUBLE) && defined(TEST_CBRT) + { + double r = (double)cbrt(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_cbrt(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble cbrt\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_DOUBLE) && defined(TEST_HYP) + { + double r = (double)sinh(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_sinh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble sinh\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)cosh(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_cosh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble cosh\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)tanh(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_tanh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble tanh\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)asinh(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_asinh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble asinh\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)acosh(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_acosh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble acosh\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)atanh(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_atanh(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble atanh\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_DOUBLE) && defined(TEST_ERF) + { + double r = (double)erf(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_erf(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble erf\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)erfc(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_erfc(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble erfc\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_DOUBLE) && defined(TEST_GAMMA) + { + double r = (double)tgamma(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_gamma(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble tgamma\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + +#if 0 + { + bool rsign = false; + double r = (double)lgamma(Double(x), &rsign); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + int msign = 0; + mpfr_lgamma(mx, &msign, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.505) { + printf("\ndouble lgamma\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg, sign = %d\n" , r, (int)rsign); + printf("c = %.20lg, sign = %d\n\n", c, (int)(msign == -1)); + cout << "NG" << endl; + //exit(-1); + } + } +#endif +#endif + +#if defined(TEST_DOUBLE) && defined(TEST_MISC) + { + double r = (double)fabs(Double(x)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_abs(mx, mx, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.5) { + printf("\ndouble fabs\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)copysign(Double(x), Double(y)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_set_d(my, y, GMP_RNDN); + mpfr_copysign(mx, mx, my, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.5 && !isnan(y)) { + printf("\ndouble copysign\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + + { + double r = (double)fmax(Double(x), Double(y)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_set_d(my, y, GMP_RNDN); + mpfr_max(mx, mx, my, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.5) { + printf("\ndouble fmax\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)fmin(Double(x), Double(y)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_set_d(my, y, GMP_RNDN); + mpfr_min(mx, mx, my, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.5) { + printf("\ndouble fmin\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + double r = (double)fdim(Double(x), Double(y)); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_set_d(my, y, GMP_RNDN); + mpfr_dim(mx, mx, my, GMP_RNDN); + double c = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xfr, mx, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.5) { + printf("\ndouble fdim\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } + + { + Double w; + double r = (double)modf(Double(x), &w); + udouble xfr = Double(r).getUnpacked(); + + mpfr_set_d(mx, x, GMP_RNDN); + mpfr_modf(mx, my, mx, GMP_RNDN); + double ci = mpfr_get_d(mx, GMP_RNDN); + double c = mpfr_get_d(my, GMP_RNDN); + double ulp = countULP(xfr, my, udouble::flt_true_min(), udouble::flt_max()); + if (ulp > 0.5 || (!(isnan(w) && isnan(ci)) && double(w) != ci)) { + printf("\ndouble modf\n"); + printf("ulp = %lg\n", ulp); + printf("x = %.20lg\n", x); + printf("t = %.20lg\n", r); + printf("c = %.20lg\n\n", c); + cout << "NG" << endl; + exit(-1); + } + } +#endif + + mpfr_clears(mx, my, NULL); + } + } + + if ((i & 31) == 0) { + quad_ x = rndq(rng), y = rndq(rng), z = rndq(rng); + + { + mpfr_set_default_prec(128); + + mpfr_t mx, my, mz; + mpfr_inits(mx, my, mz, NULL); + +#if defined(TEST_QUAD) && defined(TEST_ARITH) + { + auto xfr = (Quad(x) + Quad(y)).getUnpacked(); + quad_ r = (quad_)Quad(xfr); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); + mpfr_set_float128(my, y, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, Quad(y).getUnpacked(), GMP_RNDN); +#endif + mpfr_add(mx, mx, my, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.5) { + printf("\nquad add\n"); + cout << "x = " << x << endl; + cout << "y = " << y << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << ", " << to_string(mx, 72) << " : " << to_string_d(Quad(c).getUnpacked()) << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << ", " << " : " << to_string_d(Quad(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + exit(-1); + } + } + + { + auto xfr = (Quad(x) * Quad(y)).getUnpacked(); + quad_ r = (quad_)Quad(xfr); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); + mpfr_set_float128(my, y, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, Quad(y).getUnpacked(), GMP_RNDN); +#endif + mpfr_mul(mx, mx, my, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.5) { + printf("\nquad mul\n"); + cout << "x = " << x << endl; + cout << "y = " << y << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << ", " << to_string(mx, 72) << " : " << to_string_d(Quad(c).getUnpacked()) << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << " : " << to_string_d(Quad(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + exit(-1); + } + } + + { + auto xfr = (Quad(x) / Quad(y)).getUnpacked(); + quad_ r = (quad_)Quad(xfr); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); + mpfr_set_float128(my, y, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, Quad(y).getUnpacked(), GMP_RNDN); +#endif + mpfr_div(mx, mx, my, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.5) { + printf("\nquad div\n"); + cout << "x = " << x << endl; + cout << "y = " << y << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << ", " << to_string(mx, 72) << " : " << to_string_d(Quad(c).getUnpacked()) << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << " : " << to_string_d(Quad(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + exit(-1); + } + } + + { + auto xfr = fma(Quad(x), Quad(y), Quad(z)).getUnpacked(); + quad_ r = (quad_)Quad(xfr); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); + mpfr_set_float128(my, y, GMP_RNDN); + mpfr_set_float128(mz, z, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, Quad(y).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(mz, Quad(z).getUnpacked(), GMP_RNDN); +#endif + mpfr_fma(mx, mx, my, mz, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.5) { + printf("\nquad fma\n"); + cout << "x = " << x << endl; + cout << "y = " << y << endl; + cout << "z = " << z << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << ", " << to_string(mx, 72) << " : " << to_string_d(Quad(c).getUnpacked()) << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << ", " << " : " << to_string_d(Quad(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + exit(-1); + } + } +#endif + +#if defined(TEST_QUAD) && defined(TEST_SQRT) + { + auto xfr = sqrt(Quad(x)).getUnpacked(); + quad_ r = (quad_)Quad(xfr); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_sqrt(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.5) { + printf("\nquad sqrt\n"); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + printf("ulp = %g\n", ulp); + exit(-1); + } + } + + { + auto xfr = hypot(Quad(x), Quad(y)).getUnpacked(); + quad_ r = (quad_)Quad(xfr); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); + mpfr_set_float128(my, y, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, Quad(y).getUnpacked(), GMP_RNDN); +#endif + mpfr_hypot(mx, mx, my, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad hypot\n"); + cout << "x = " << x << endl; + cout << "y = " << y << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + printf("ulp = %g\n", ulp); + exit(-1); + } + } +#endif + +#if defined(TEST_QUAD) && defined(TEST_TRIG) + { + quad_ r = (quad_)sin(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_sin(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad sin\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)cos(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_cos(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad cos\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)tan(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_tan(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad tan\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + +#ifdef TLFLOAT_ENABLE_MPFR_SINPI + { + quad_ r = (quad_)sinpi(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_sinpi(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad sinpi\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)cospi(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_cospi(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad cospi\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)tanpi(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_tanpi(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad tanpi\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } +#endif +#endif + +#if defined(TEST_QUAD) && defined(TEST_INVTRIG) + { + quad_ r = (quad_)atan2(Quad(y), Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(my, y, GMP_RNDN); + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, Quad(y).getUnpacked(), GMP_RNDN); +#endif + mpfr_atan2(mx, my, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad atan2\n"); + printf("ulp = %g\n", ulp); + cout << "y = " << y << endl; + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)asin(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_asin(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad asin\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)acos(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_acos(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad acos\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)atan(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_atan(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad atan\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_QUAD) && defined(TEST_EXP) + { + quad_ r = (quad_)exp(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_exp(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad exp\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)expm1(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_expm1(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad expm1\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)exp2(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_exp2(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad exp2\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)exp10(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_exp10(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad exp10\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_QUAD) && defined(TEST_LOG) + { + quad_ r = (quad_)log(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_log(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad log\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)log1p(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_log1p(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad log1p\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)log2(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_log2(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad log2\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)log10(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_log10(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad log10\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_QUAD) && defined(TEST_POW) + { + quad_ r = (quad_)pow(Quad(y), Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(my, y, GMP_RNDN); + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, Quad(y).getUnpacked(), GMP_RNDN); +#endif + mpfr_pow(mx, my, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad pow\n"); + printf("ulp = %g\n", ulp); + cout << "y = " << y << endl; + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_QUAD) && defined(TEST_MODREM) + { + quad_ r = (quad_)fmod(Quad(y), Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(my, y, GMP_RNDN); + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, Quad(y).getUnpacked(), GMP_RNDN); +#endif + mpfr_fmod(mx, my, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.5) { + printf("\nquad fmod\n"); + printf("ulp = %g\n", ulp); + cout << "y = " << y << endl; + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)remainder(Quad(y), Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(my, y, GMP_RNDN); + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, Quad(y).getUnpacked(), GMP_RNDN); +#endif + mpfr_remainder(mx, my, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.5) { + printf("\nquad remainder\n"); + printf("ulp = %g\n", ulp); + cout << "y = " << y << endl; + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + auto a = remquo(Quad(y), Quad(x)); + uquad xfr = Quad(a.first).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(my, y, GMP_RNDN); + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, Quad(y).getUnpacked(), GMP_RNDN); +#endif + long int q = 0; + mpfr_remquo(mx, &q, my, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.5 || !eqquo(a.second, q)) { + printf("\nquad remquo\n"); + printf("ulp = %g\n", ulp); + cout << "y = " << y << endl; + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << ", " << q << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << a.first << ", " << a.second << endl; + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_QUAD) && defined(TEST_CBRT) + { + quad_ r = (quad_)cbrt(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_cbrt(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad cbrt\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_QUAD) && defined(TEST_HYP) + { + quad_ r = (quad_)sinh(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_sinh(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad sinh\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)cosh(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_cosh(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad cosh\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)tanh(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_tanh(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad tanh\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)asinh(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_asinh(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad asinh\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)acosh(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_acosh(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad acosh\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)atanh(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_atanh(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad atanh\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_QUAD) && defined(TEST_ERF) + { + quad_ r = (quad_)erf(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_erf(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad erf\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)erfc(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_erfc(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad erfc\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_QUAD) && defined(TEST_GAMMA) + { + quad_ r = (quad_)tgamma(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_gamma(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501) { + printf("\nquad tgamma\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + +#if 0 + { + bool rsign = false; + quad_ r = (quad_)lgamma(Quad(x), &rsign); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + int msign = 0; + mpfr_lgamma(mx, &msign, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.501 || (msign == -1) != rsign) { + printf("\nquad lgamma\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << ", sign = " << (msign == -1) << endl; +#else + cout << "c = " << to_string(mx, 72) << ", sign = " << (msign == -1) << endl; +#endif + cout << "r = " << r << ", sign = " << rsign << endl; + cout << "NG" << endl; + //exit(-1); + } + } +#endif +#endif + +#if defined(TEST_QUAD) && defined(TEST_MISC) + { + quad_ r = (quad_)fabs(Quad(x)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_abs(mx, mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.5) { + printf("\nquad fabs\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)copysign(Quad(x), Quad(y)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); + mpfr_set_float128(my, y, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, Quad(y).getUnpacked(), GMP_RNDN); +#endif + mpfr_copysign(mx, mx, my, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.5 && y == y) { + printf("\nquad copysign\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)fmax(Quad(x), Quad(y)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); + mpfr_set_float128(my, y, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, Quad(y).getUnpacked(), GMP_RNDN); +#endif + mpfr_max(mx, mx, my, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.5) { + printf("\nquad fmax\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)fmin(Quad(x), Quad(y)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); + mpfr_set_float128(my, y, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, Quad(y).getUnpacked(), GMP_RNDN); +#endif + mpfr_min(mx, mx, my, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.5) { + printf("\nquad fmin\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + quad_ r = (quad_)fdim(Quad(x), Quad(y)); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); + mpfr_set_float128(my, y, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, Quad(y).getUnpacked(), GMP_RNDN); +#endif + mpfr_dim(mx, mx, my, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(mx, GMP_RNDN); +#endif + double ulp = countULP(xfr, mx, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.5) { + printf("\nquad fdim\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + cout << "NG" << endl; + exit(-1); + } + } + + { + Quad w; + quad_ r = (quad_)modf(Quad(x), &w); + uquad xfr = Quad(r).getUnpacked(); + +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + mpfr_set_float128(mx, x, GMP_RNDN); +#else + mpfr_set_unpacked(mx, Quad(x).getUnpacked(), GMP_RNDN); +#endif + mpfr_modf(mx, my, mx, GMP_RNDN); + double ci = mpfr_get_d(mx, GMP_RNDN); +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + quad_ c = mpfr_get_float128(my, GMP_RNDN); +#endif + double ulp = countULP(xfr, my, uquad::flt_true_min(), uquad::flt_max()); + if (ulp > 0.5 || (!(isnan(w) && isnan(ci)) && double(w) != ci)) { + printf("\nquad modf\n"); + printf("ulp = %g\n", ulp); + cout << "x = " << x << endl; +#if defined(ENABLE_QUAD) && defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) + cout << "c = " << c << endl; +#else + cout << "c = " << to_string(mx, 72) << endl; +#endif + cout << "r = " << r << endl; + printf("ci = %.8g\n", ci); + cout << "NG" << endl; + exit(-1); + } + } +#endif + + mpfr_clears(mx, my, mz, NULL); + } + } + + if ((i & 2047) == 0) { + Octuple x = rndo(rng); + Octuple y = rndo(rng); + Octuple z = rndo(rng); + + { + mpfr_set_default_prec(256); + mpfr_set_emin(-100000000); + mpfr_set_emax( 100000000); + + mpfr_t mx, my, mz; + mpfr_inits(mx, my, mz, NULL); + +#if defined(TEST_OCTUPLE) && defined(TEST_ARITH) + { + uoctuple xfr = (Octuple(x) + Octuple(y)).getUnpacked(); + Octuple r = Octuple(xfr); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_add(mx, mx, my, GMP_RNDN); + double ulp = countULP(xfr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5) { + printf("\noctuple add\n"); + cout << "x = " << x << endl; + cout << "y = " << y << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + exit(-1); + } + } + + { + uoctuple xfr = (Octuple(x) * Octuple(y)).getUnpacked(); + Octuple r = Octuple(xfr); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_mul(mx, mx, my, GMP_RNDN); + double ulp = countULP(xfr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5) { + printf("\noctuple mul\n"); + cout << "x = " << x << endl; + cout << "y = " << y << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + exit(-1); + } + } + + { + uoctuple xfr = (Octuple(x) / Octuple(y)).getUnpacked(); + Octuple r = Octuple(xfr); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_div(mx, mx, my, GMP_RNDN); + double ulp = countULP(xfr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5) { + printf("\noctuple div\n"); + cout << "x = " << x << endl; + cout << "y = " << y << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + exit(-1); + } + } + + { + uoctuple xfr = fma(Octuple(x), Octuple(y), Octuple(z)).getUnpacked(); + Octuple r = Octuple(xfr); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(mz, z.getUnpacked(), GMP_RNDN); + mpfr_fma(mx, mx, my, mz, GMP_RNDN); + double ulp = countULP(xfr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5) { + printf("\noctuple fma\n"); + cout << "x = " << x << endl; + cout << "y = " << y << endl; + cout << "z = " << z << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + exit(-1); + } + } +#endif + +#if defined(TEST_OCTUPLE) && defined(TEST_SQRT) + { + uoctuple xcr = sqrt(Octuple(x)).getUnpacked().cast((const uoctuple *)nullptr); + Octuple r = Octuple(xcr); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_sqrt(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5) { + printf("\noctuple sqrt\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + uoctuple xcr = hypot(Octuple(x), Octuple(y)).getUnpacked().cast((const uoctuple *)nullptr); + Octuple r = Octuple(xcr); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_hypot(mx, mx, my, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple hypot\n"); + cout << "x = " << x << endl; + cout << "y = " << y << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_OCTUPLE) && defined(TEST_TRIG) + { + Octuple r = sin(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_sin(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple sin\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = cos(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_cos(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple cos\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = tan(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_tan(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple tan\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + +#ifdef TLFLOAT_ENABLE_MPFR_SINPI + { + Octuple r = sinpi(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_sinpi(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple sinpi\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = cospi(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_cospi(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple cospi\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = tanpi(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_tanpi(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple tanpi\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif +#endif + +#if defined(TEST_OCTUPLE) && defined(TEST_INVTRIG) + { + Octuple r = atan2(Octuple(y), Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_atan2(mx, my, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple atan2\n"); + cout << "y = " << to_string(y, 72) << endl; + cout << "x = " << to_string(x, 72) << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = asin(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_asin(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple asin\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = acos(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_acos(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple acos\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = atan(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_atan(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple atan\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_OCTUPLE) && defined(TEST_EXP) + { + Octuple r = exp(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_exp(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple exp\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = expm1(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_expm1(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple expm1\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = exp2(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_exp2(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple exp2\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = exp10(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_exp10(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple exp10\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_OCTUPLE) && defined(TEST_LOG) + { + Octuple r = log(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_log(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple log\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = log1p(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_log1p(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple log1p\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = log2(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_log2(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple log2\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = log10(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_log10(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple log10\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_OCTUPLE) && defined(TEST_POW) + { + Octuple r = pow(Octuple(y), Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_pow(mx, my, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple pow\n"); + cout << "y = " << to_string(y, 72) << endl; + cout << "x = " << to_string(x, 72) << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_OCTUPLE) && defined(TEST_MODREM) + { + Octuple r = fmod(Octuple(y), Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_fmod(mx, my, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5) { + printf("\noctuple fmod\n"); + cout << "y = " << to_string(y, 72) << endl; + cout << "x = " << to_string(x, 72) << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = remainder(Octuple(y), Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_remainder(mx, my, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5) { + printf("\noctuple remainder\n"); + cout << "y = " << to_string(y, 72) << endl; + cout << "x = " << to_string(x, 72) << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + auto a = remquo(Octuple(y), Octuple(x)); + uoctuple xcr = a.first.getUnpacked(); + + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + long int q = 0; + mpfr_remquo(mx, &q, my, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5 || !eqquo(a.second, q)) { + printf("\noctuple remquo\n"); + cout << "y = " << to_string(y, 72) << endl; + cout << "x = " << to_string(x, 72) << endl; + cout << "c = " << to_string(mx, 72) << ", " << q << endl; + cout << "r = " << to_string(a.first, 72) << " : " << to_string_d(Octuple(a.first).getUnpacked()) << ", " << a.second << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_OCTUPLE) && defined(TEST_CBRT) + { + Octuple r = cbrt(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_cbrt(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple cbrt\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_OCTUPLE) && defined(TEST_HYP) + { + Octuple r = sinh(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_sinh(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple sinh\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = cosh(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_cosh(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple cosh\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = tanh(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_tanh(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple tanh\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = asinh(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_asinh(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple asinh\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = acosh(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_acosh(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple acosh\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = atanh(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_atanh(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple atanh\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_OCTUPLE) && defined(TEST_ERF) + { + Octuple r = erf(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_erf(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple erf\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = erfc(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_erfc(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple erfc\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + +#if defined(TEST_OCTUPLE) && defined(TEST_GAMMA) + { + Octuple r = tgamma(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_gamma(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002) { + printf("\noctuple tgamma\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + +#if 0 + { + bool rsign = false; + Octuple r = lgamma(Octuple(x), &rsign); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + int msign = 0; + mpfr_lgamma(mx, &msign, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5002 || (msign == -1) != rsign) { + printf("\noctuple lgamma\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << ", sign = " << (msign == -1) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << ", sign = " << rsign << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + //exit(-1); + } + } +#endif +#endif + +#if defined(TEST_OCTUPLE) && defined(TEST_MISC) + { + Octuple r = fabs(Octuple(x)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_abs(mx, mx, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5) { + printf("\noctuple fabs\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = copysign(Octuple(x), Octuple(y)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_copysign(mx, mx, my, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5 && !isnan(y)) { + printf("\noctuple copysign\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = fmax(Octuple(x), Octuple(y)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_max(mx, mx, my, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5) { + printf("\noctuple fmax\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = fmin(Octuple(x), Octuple(y)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_min(mx, mx, my, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5) { + printf("\noctuple fmin\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple r = fdim(Octuple(x), Octuple(y)); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(my, y.getUnpacked(), GMP_RNDN); + mpfr_dim(mx, mx, my, GMP_RNDN); + double ulp = countULP(xcr, mx, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5) { + printf("\noctuple fdim\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } + + { + Octuple w; + Octuple r = modf(Octuple(x), &w); + uoctuple xcr = r.getUnpacked(); + + mpfr_set_unpacked(mx, x.getUnpacked(), GMP_RNDN); + mpfr_modf(mx, my, mx, GMP_RNDN); + double ci = mpfr_get_d(mx, GMP_RNDN); + double ulp = countULP(xcr, my, uoctuple::flt_true_min(), uoctuple::flt_max()); + if (ulp > 0.5 || (!(isnan(w) && isnan(ci)) && double(w) != ci)) { + printf("\noctuple modf\n"); + cout << "x = " << x << endl; + cout << "c = " << to_string(mx, 72) << endl; + cout << "r = " << to_string(r , 72) << " : " << to_string_d(Octuple(r).getUnpacked()) << endl; + printf("ci = %.8g\n", ci); + printf("ulp = %g\n", ulp); + cout << "NG" << endl; + exit(-1); + } + } +#endif + + mpfr_clears(mx, my, mz, NULL); + } + } + } + + cout << "OK" << endl; + + exit(0); +} diff --git a/validation/extern/tlfloat/src/tester/test_octuple.cpp b/validation/extern/tlfloat/src/tester/test_octuple.cpp new file mode 100644 index 0000000..d404722 --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_octuple.cpp @@ -0,0 +1,287 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include + +#include "tlfloat/tlmath.hpp" +#include "tlfloat/tlfloat.h" + +using namespace std; +using namespace tlfloat; + +#if defined(__GLIBC__) +static_assert(Double(const_M_E()) == M_E); +static_assert(Double(const_M_E()) == M_E); +static_assert(Double(const_M_LOG2E()) == M_LOG2E); +static_assert(Double(const_M_LOG2E()) == M_LOG2E); +static_assert(Double(const_M_LOG10E()) == M_LOG10E); +static_assert(Double(const_M_LOG10E()) == M_LOG10E); +static_assert(Double(const_M_LN2()) == M_LN2); +static_assert(Double(const_M_LN2()) == M_LN2); +static_assert(Double(const_M_PI()) == M_PI); +static_assert(Double(const_M_PI()) == M_PI); +static_assert(Double(const_M_PI(-1)) == M_PI_2); +static_assert(Double(const_M_PI(-1)) == M_PI_2); +static_assert(Double(const_M_PI(-2)) == M_PI_4); +static_assert(Double(const_M_PI(-2)) == M_PI_4); +static_assert(Double(const_M_1_PI()) == M_1_PI); +static_assert(Double(const_M_1_PI()) == M_1_PI); +static_assert(Double(const_M_1_PI(1)) == M_2_PI); +static_assert(Double(const_M_1_PI(1)) == M_2_PI); +static_assert(Double(const_M_1_SQRTPI(1)) == M_2_SQRTPI); +static_assert(Double(const_M_1_SQRTPI(1)) == M_2_SQRTPI); +#endif + +static_assert(Double(const_Euler()) == 0.5772156649015328606); +static_assert(Double(const_Euler()) == 0.5772156649015328606); + +template +T AGM(int N) { + T y = sqrt(T(2.0)) - 1; + T a = ldexp(y * y, 1); + + for(int k=0;k +consteval T Machin() { + return 4*(T("0x0.000000000000000000000000000000004p+132")*atan(T("0.2"))-atan(1/T("0x1de00000000000000000000000000000000p-129"))); +} + +int main(int argc, char **argv) { + char buf[1024]; + + // + + snprint(buf, sizeof(buf), AGM(1), 'g', 0, 5); + printf("Half (AGM) : %s\n", buf); + + if (strncmp(buf, "3.1", 3) != 0) { + printf("NG\n"); + return -1; + } + + // + + snprint(buf, sizeof(buf), Machin(), 'g', 0, 5); + printf("Half (Machin) : %s\n", buf); + + if (strncmp(buf, "3.14", 4) != 0) { + printf("NG\n"); + return -1; + } + + // + + tlfloat_snprintf(buf, sizeof(buf), "%.5_16g", const_M_PI()); + printf("Half (const_M_PI()) : %s\n", buf); + + if (strncmp(buf, "3.14", 4) != 0) { + printf("NG\n"); + return -1; + } + + // + + tlfloat_snprintf(buf, sizeof(buf), "%.5_16g", const_M_E()); + printf("Half (const_M_E()) : %s\n", buf); + + if (strncmp(buf, "2.718", 5) != 0) { + printf("NG\n"); + return -1; + } + + // + + snprint(buf, sizeof(buf), AGM(1), 'g', 0, 8); + printf("Float (AGM) : %s\n", buf); + + if (strncmp(buf, "3.141592", 8) != 0) { + printf("NG\n"); + return -1; + } + + // + + snprint(buf, sizeof(buf), Machin(), 'g', 0, 9); + printf("Float (Machin) : %s\n", buf); + + if (strncmp(buf, "3.141592", 8) != 0) { + printf("NG\n"); + return -1; + } + + // + + tlfloat_snprintf(buf, sizeof(buf), "%.16_64g", AGM(2)); + printf("Double (AGM) : %s\n", buf); + + if (strncmp(buf, "3.141592653589", 14) != 0) { + printf("NG\n"); + return -1; + } + + // + + snprint(buf, sizeof(buf), Machin(), 'g', 0, 16); + printf("Double (Machin) : %s\n", buf); + + if (strncmp(buf, "3.141592653589", 14) != 0) { + printf("NG\n"); + return -1; + } + + // + + tlfloat_snprintf(buf, sizeof(buf), "%.35_128g", AGM(2)); + printf("Quad (AGM) : %s\n", buf); + + if (strncmp(buf, "3.14159265358979323846264338327950", 34) != 0) { + printf("NG\n"); + return -1; + } + + // + + snprint(buf, sizeof(buf), Machin(), 'g', 0, 35); + printf("Quad (Machin) : %s\n", buf); + + if (strncmp(buf, "3.14159265358979323846264338327950", 34) != 0) { + printf("NG\n"); + return -1; + } + + // + + tlfloat_snprintf(buf, sizeof(buf), "%.37_128g", const_M_PI()); + printf("Quad (const_M_PI()) : %s\n", buf); + + if (strncmp(buf, "3.141592653589793238462643383279502", 35) != 0) { + printf("NG\n"); + return -1; + } + + // + + tlfloat_snprintf(buf, sizeof(buf), "%.37_128g", const_M_E()); + printf("Quad (const_M_E()) : %s\n", buf); + + if (strncmp(buf, "2.718281828459045235360287471352662", 35) != 0) { + printf("NG\n"); + return -1; + } + + // + + tlfloat_snprintf(buf, sizeof(buf), "%.72_256g", AGM(3)); + printf("Octuple (AGM) : %s\n", buf); + + if (strncmp(buf, "3.14159265358979323846264338327950288419716939937510582097494459230781", 70) != 0) { + printf("NG\n"); + return -1; + } + + // + + snprint(buf, sizeof(buf), Machin(), 'g', 0, 72); + printf("Octuple (Machin) : %s\n", buf); + + if (strncmp(buf, "3.14159265358979323846264338327950288419716939937510582097494459230781", 70) != 0) { + printf("NG\n"); + return -1; + } + + // + + tlfloat_snprintf(buf, sizeof(buf), "%.72_256g", const_M_PI()); + printf("Octuple (const_M_PI()) : %s\n", buf); + + if (strncmp(buf, "3.14159265358979323846264338327950288419716939937510582097494459230781", 70) != 0) { + printf("NG\n"); + return -1; + } + + // + + tlfloat_snprintf(buf, sizeof(buf), "%.72_256g", const_M_E()); + printf("Octuple (const_M_E()) : %s\n", buf); + + if (strncmp(buf, "2.71828182845904523536028747135266249775724709369995957496696762772407", 70) != 0) { + printf("NG\n"); + return -1; + } + + // + + if (fabs((double)Double(const_M_LN10()) - log(10)) > 1e-8 || + fabs((double)Double(const_M_LN10()) - log(10)) > 1e-8) { + printf("NG : const_M_LN10\n"); + return -1; + } + + if (sin(BFloat16("0.1")) != sincos(BFloat16("0.1")).first || cos(BFloat16("0.1")) != sincos(BFloat16("0.1")).second) { + printf("NG : sincos(BFloat16)\n"); + return -1; + } + if (sin(Half("0.1")) != sincos(Half("0.1")).first || cos(Half("0.1")) != sincos(Half("0.1")).second) { + printf("NG : sincos(Half)\n"); + return -1; + } + if (sin(Float("0.1")) != sincos(Float("0.1")).first || cos(Float("0.1")) != sincos(Float("0.1")).second) { + printf("NG : sincos(Float)\n"); + return -1; + } + if (sin(Double("0.1")) != sincos(Double("0.1")).first || cos(Double("0.1")) != sincos(Double("0.1")).second) { + printf("NG : sincos(Double)\n"); + return -1; + } + if (sin(Quad("0.1")) != sincos(Quad("0.1")).first || cos(Quad("0.1")) != sincos(Quad("0.1")).second) { + printf("NG : sincos(Quad)\n"); + return -1; + } + if (sin(Octuple("0.1")) != sincos(Octuple("0.1")).first || cos(Octuple("0.1")) != sincos(Octuple("0.1")).second) { + printf("NG : sincos(Octuple)\n"); + return -1; + } + + if (sinpi(BFloat16("0.1")) != sincospi(BFloat16("0.1")).first || cospi(BFloat16("0.1")) != sincospi(BFloat16("0.1")).second) { + printf("NG : sincospi(BFloat16)\n"); + return -1; + } + if (sinpi(Half("0.1")) != sincospi(Half("0.1")).first || cospi(Half("0.1")) != sincospi(Half("0.1")).second) { + printf("NG : sincospi(Half)\n"); + return -1; + } + if (sinpi(Float("0.1")) != sincospi(Float("0.1")).first || cospi(Float("0.1")) != sincospi(Float("0.1")).second) { + printf("NG : sincospi(Float)\n"); + return -1; + } + if (sinpi(Double("0.1")) != sincospi(Double("0.1")).first || cospi(Double("0.1")) != sincospi(Double("0.1")).second) { + printf("NG : sincospi(Double)\n"); + return -1; + } + if (sinpi(Quad("0.1")) != sincospi(Quad("0.1")).first || cospi(Quad("0.1")) != sincospi(Quad("0.1")).second) { + printf("NG : sincospi(Quad)\n"); + return -1; + } + if (sinpi(Octuple("0.1")) != sincospi(Octuple("0.1")).first || cospi(Octuple("0.1")) != sincospi(Octuple("0.1")).second) { + printf("NG : sincospi(Octuple)\n"); + return -1; + } + + // + + printf("OK\n"); + return 0; +} diff --git a/validation/extern/tlfloat/src/tester/test_octuple_dummy.c b/validation/extern/tlfloat/src/tester/test_octuple_dummy.c new file mode 100644 index 0000000..d7164ff --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_octuple_dummy.c @@ -0,0 +1,7 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +void donothing() {} diff --git a/validation/extern/tlfloat/src/tester/test_printf.cpp b/validation/extern/tlfloat/src/tester/test_printf.cpp new file mode 100644 index 0000000..44c00ac --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_printf.cpp @@ -0,0 +1,1123 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include +#include + +#include "tlfloat/tlfloat.hpp" +#include "tlfloat/tlfloat.h" +#include "testerutil.hpp" + +using namespace tlfloat; + +static const int test_widths[] = { -1, 0, 1, 2, 3, 4, 6, 8, 12, 16, 20, 32 }; +static const int test_precs[] = { 0, 1, 2, 3, 4, 8, 12, 14 }; + +bool xisdigit(int c) { return '0' <= c && c <= '9'; } +bool xisxdigit(int c) { return ('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F'); } +int xtolower(int c) { if ('A' <= c && c <= 'Z') return c - 'A' + 'a'; else return c; } + +int xstrcmp(const char *p, const char *q, int prec) { + for(;;) { + if (*p == '\0' && *q == '\0') return 0; + if (xtolower(*p) == 'e' || xtolower(*p) == 'p') prec = 10000; + if (xisxdigit(*p) && xisxdigit(*q)) { + if (prec > 0 && *p != *q) return *p > *q ? 1 : -1; + prec--; + } else if (*p != *q) { + return *p > *q ? 1 : -1; + } + p++; q++; + } +} + +void doTest(const char *fmt, ...) { + static char strt[1024], strc[1024]; + + va_list ap; + + va_start(ap, fmt); + int rett = tlfloat_vsnprintf(strt, sizeof(strt), fmt, ap); + va_end(ap); + + va_start(ap, fmt); + int retc = vsnprintf(strc, sizeof(strc), fmt, ap); + va_end(ap); + + if (rett != retc || strcmp(strt, strc) != 0) { + printf("%s : c=[%s] t=[%s] retc=%d rett=%d\n", fmt, strc, strt, retc, rett); + exit(-1); + } +} + +template +void testem(double val, int cmpprec=10) { + const char *types[] = { "e", "f", "g", "a" }; + int nbits = sizeof(T) * 8; + for(int i=0;i<4;i++) { + for(int alt=0;alt<2;alt++) { + for(int zero=0;zero<2;zero++) { + for(int left=0;left<2;left++) { + for(int blank=0;blank<2;blank++) { + for(int sign=0;sign<2;sign++) { + char fmt[120], corr0[120], corr1[120], test[120]; + int lc0, lc1, lt; + + snprintf(fmt, 100, "%%%s%s%s%s%s%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types[i]); + lc0 = snprintf(corr0, 100, fmt, val); + lc1 = snprintf(corr1, 100, fmt, strtod(corr0, nullptr)); + + snprintf(fmt, 100, "%%%s%s%s%s%s_%d%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + nbits, + types[i]); + lt = tlfloat_snprintf(test, 8, fmt, T(val)); + lt = tlfloat_snprintf(test, 100, fmt, T(val)); + + if( (lt != lc0 && lt != lc1) || + (xstrcmp(test, corr0, cmpprec) != 0 && xstrcmp(test, corr1, cmpprec) != 0) || + (strtod(corr0, NULL) != tlfloat_strtod(corr0, NULL) && strstr(corr0, "nan") == NULL) ) { + printf("%s : c0=[%s] c1=[%s] t=[%s] lc0=%d lc1=%d lt=%d %g %g <%016llx>\n", fmt, corr0, corr1, test, lc0, lc1, lt, + strtod(corr0, NULL), (double)tlfloat_strtod(corr0, NULL), std::bit_cast(val)); + exit(-1); + } + + for(unsigned w=0;w\n", fmt, corr0, corr1, test, lc0, lc1, lt, + strtod(corr0, NULL), (double)tlfloat_strtod(corr0, NULL), std::bit_cast(val)); + exit(-1); + } + + // + + snprintf(fmt, 100, "%%%s%s%s%s%s*.%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types[i]); + lc0 = snprintf(corr0, 100, fmt, width, val); + lc1 = snprintf(corr1, 100, fmt, width, strtod(corr0, nullptr)); + + snprintf(fmt, 100, "%%%s%s%s%s%s*._%d%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + nbits, types[i]); + lt = tlfloat_snprintf(test, 8, fmt, width, T(val)); + lt = tlfloat_snprintf(test, 100, fmt, width, T(val)); + + if( (lt != lc0 && lt != lc1) || + (xstrcmp(test, corr0, cmpprec) != 0 && xstrcmp(test, corr1, cmpprec) != 0) || + (strtod(corr0, NULL) != tlfloat_strtod(corr0, NULL) && strstr(corr0, "nan") == NULL) ) { + printf("%s : c0=[%s] c1=[%s] t=[%s] lc0=%d lc1=%d lt=%d %g %g <%016llx>\n", fmt, corr0, corr1, test, lc0, lc1, lt, + strtod(corr0, NULL), (double)tlfloat_strtod(corr0, NULL), std::bit_cast(val)); + exit(-1); + } + } + + for(unsigned p=0;p\n", fmt, corr0, corr1, test, lc0, lc1, lt, + strtod(corr0, NULL), (double)tlfloat_strtod(corr0, NULL), std::bit_cast(val)); + exit(-1); + } + + // + + snprintf(fmt, 100, "%%%s%s%s%s%s*.*%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types[i]); + lc0 = snprintf(corr0, 100, fmt, width, prec, val); + lc1 = snprintf(corr1, 100, fmt, width, prec, strtod(corr0, nullptr)); + + snprintf(fmt, 100, "%%%s%s%s%s%s*.*_%d%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + nbits, types[i]); + lt = tlfloat_snprintf(test, 8, fmt, width, prec, T(val)); + lt = tlfloat_snprintf(test, 100, fmt, width, prec, T(val)); + + if( (lt != lc0 && lt != lc1) || + (xstrcmp(test, corr0, cmpprec) != 0 && xstrcmp(test, corr1, cmpprec) != 0) || + (strtod(corr0, NULL) != tlfloat_strtod(corr0, NULL) && strstr(corr0, "nan") == NULL) ) { + printf("%s : c0=[%s] c1=[%s] t=[%s] lc0=%d lc1=%d lt=%d %g %g <%016llx>\n", fmt, corr0, corr1, test, lc0, lc1, lt, + strtod(corr0, NULL), (double)tlfloat_strtod(corr0, NULL), std::bit_cast(val)); + exit(-1); + } + } + + snprintf(fmt, 100, "%%%s%s%s%s%s.%d%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + prec, types[i]); + lc0 = snprintf(corr0, 100, fmt, val); + lc1 = snprintf(corr1, 100, fmt, strtod(corr0, nullptr)); + + snprintf(fmt, 100, "%%%s%s%s%s%s.%d_%d%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + prec, nbits, types[i]); + lt = tlfloat_snprintf(test, 8, fmt, T(val)); + lt = tlfloat_snprintf(test, 100, fmt, T(val)); + + if( (lt != lc0 && lt != lc1) || + (xstrcmp(test, corr0, cmpprec) != 0 && xstrcmp(test, corr1, cmpprec) != 0) || + (strtod(corr0, NULL) != tlfloat_strtod(corr0, NULL) && strstr(corr0, "nan") == NULL) ) { + printf("%s : c0=[%s] c1=[%s] t=[%s] lc0=%d lc1=%d lt=%d %g %g <%016llx>\n", fmt, corr0, corr1, test, lc0, lc1, lt, + strtod(corr0, NULL), (double)tlfloat_strtod(corr0, NULL), std::bit_cast(val)); + exit(-1); + } + + // + + snprintf(fmt, 100, "%%%s%s%s%s%s.*%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types[i]); + lc0 = snprintf(corr0, 100, fmt, prec, val); + lc1 = snprintf(corr1, 100, fmt, prec, strtod(corr0, nullptr)); + + snprintf(fmt, 100, "%%%s%s%s%s%s.*_%d%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + nbits, types[i]); + lt = tlfloat_snprintf(test, 8, fmt, prec, T(val)); + lt = tlfloat_snprintf(test, 100, fmt, prec, T(val)); + + if( (lt != lc0 && lt != lc1) || + (xstrcmp(test, corr0, cmpprec) != 0 && xstrcmp(test, corr1, cmpprec) != 0) || + (strtod(corr0, NULL) != tlfloat_strtod(corr0, NULL) && strstr(corr0, "nan") == NULL) ) { + printf("%s : c0=[%s] c1=[%s] t=[%s] lc0=%d lc1=%d lt=%d %g %g <%016llx>\n", fmt, corr0, corr1, test, lc0, lc1, lt, + strtod(corr0, NULL), (double)tlfloat_strtod(corr0, NULL), std::bit_cast(val)); + exit(-1); + } + } + } + } + } + } + } + } +} + +void testem32(int32_t val) { + const char *types[] = { "d", "u", "x", "o" }; + const int base[] = { 10, 10, 16, 8 }; + for(int i=0;i<4;i++) { + for(int alt=0;alt<2;alt++) { + for(int zero=0;zero<2;zero++) { + for(int left=0;left<2;left++) { + for(int blank=0;blank<2;blank++) { + for(int sign=0;sign<2;sign++) { + char fmt[120], corr[120], test[120]; + + snprintf(fmt, 100, "%%%s%s%s%s%s%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types[i]); + snprintf(corr, 100, fmt, val); + + snprintf(fmt, 100, "%%%s%s%s%s%s_32%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types[i]); + tlfloat_snprintf(test, 8, fmt, val); + tlfloat_snprintf(test, 100, fmt, val); + + if(strcmp(test,corr) != 0) { + printf("%s : c=[%s] t=[%s]\n", fmt, corr, test); + exit(-1); + } + + { + const char *tp = test; + char *cp = test; + if ((unsigned long long)BigUInt<7>(test, &tp, base[i]) != strtoull(test, &cp, base[i]) || tp != cp) { + printf("%s : 0U t=%llu(%d) c=%llu(%d)\n", test, + (unsigned long long)BigUInt<7>(test, nullptr, base[i]), int(tp-test), strtoull(test, nullptr, base[i]), int(cp-test)); + exit(-1); + } + } + { + const char *tp = test; + char *cp = test; + if ((long long)BigInt<7>(test, &tp, base[i]) != strtoll(test, &cp, base[i]) || tp != cp) { + printf("%s : 0S t=%lld(%d) c=%lld(%d)\n", test, + (long long)BigInt<7>(test, nullptr, base[i]), int(tp-test), strtoll(test, nullptr, base[i]), int(cp-test)); + exit(-1); + } + } + + // + + for(unsigned w=0;w(test, &tp, base[i]) != strtoull(test, &cp, base[i]) || tp != cp) { + printf("%s : 0U t=%llu(%d) c=%llu(%d)\n", test, + (unsigned long long)BigUInt<7>(test, nullptr, base[i]), int(tp-test), strtoull(test, nullptr, base[i]), int(cp-test)); + exit(-1); + } + } + { + const char *tp = test; + char *cp = test; + if ((long long)BigInt<7>(test, &tp, base[i]) != strtoll(test, &cp, base[i]) || tp != cp) { + printf("%s : 0S t=%lld(%d) c=%lld(%d)\n", test, + (long long)BigInt<7>(test, nullptr, base[i]), int(tp-test), strtoll(test, nullptr, base[i]), int(cp-test)); + exit(-1); + } + } + + // + + snprintf(fmt, 100, "%%%s%s%s%s%s*.%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types[i]); + snprintf(corr, 100, fmt, width, val); + + snprintf(fmt, 100, "%%%s%s%s%s%s*._32%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types[i]); + tlfloat_snprintf(test, 8, fmt, width, val); + tlfloat_snprintf(test, 100, fmt, width, val); + + if(strcmp(test,corr) != 0) { + printf("%s : c=[%s] t=[%s]\n", fmt, corr, test); + exit(-1); + } + + { + const char *tp = test; + char *cp = test; + if ((unsigned long long)BigUInt<7>(test, &tp, base[i]) != strtoull(test, &cp, base[i]) || tp != cp) { + printf("%s : 0U t=%llu(%d) c=%llu(%d)\n", test, + (unsigned long long)BigUInt<7>(test, nullptr, base[i]), int(tp-test), strtoull(test, nullptr, base[i]), int(cp-test)); + exit(-1); + } + } + { + const char *tp = test; + char *cp = test; + if ((long long)BigInt<7>(test, &tp, base[i]) != strtoll(test, &cp, base[i]) || tp != cp) { + printf("%s : 0S t=%lld(%d) c=%lld(%d)\n", test, + (long long)BigInt<7>(test, nullptr, base[i]), int(tp-test), strtoll(test, nullptr, base[i]), int(cp-test)); + exit(-1); + } + } + } + + for(int prec=4;prec<=12;prec += 1) { + for(unsigned w=0;w(test, &tp, base[i]) != strtoull(test, &cp, base[i]) || tp != cp) { + printf("%s : 0U t=%llu(%d) c=%llu(%d)\n", test, + (unsigned long long)BigUInt<7>(test, nullptr, base[i]), int(tp-test), strtoull(test, nullptr, base[i]), int(cp-test)); + exit(-1); + } + } + { + const char *tp = test; + char *cp = test; + if ((long long)BigInt<7>(test, &tp, base[i]) != strtoll(test, &cp, base[i]) || tp != cp) { + printf("%s : 0S t=%lld(%d) c=%lld(%d)\n", test, + (long long)BigInt<7>(test, nullptr, base[i]), int(tp-test), strtoll(test, nullptr, base[i]), int(cp-test)); + exit(-1); + } + } + + // + + snprintf(fmt, 100, "%%%s%s%s%s%s*.*%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types[i]); + snprintf(corr, 100, fmt, width, prec, val); + + snprintf(fmt, 100, "%%%s%s%s%s%s*.*_32%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types[i]); + tlfloat_snprintf(test, 8, fmt, width, prec, val); + tlfloat_snprintf(test, 100, fmt, width, prec, val); + + if(strcmp(test,corr) != 0) { + printf("%s : c=[%s] t=[%s]\n", fmt, corr, test); + exit(-1); + } + + { + const char *tp = test; + char *cp = test; + if ((unsigned long long)BigUInt<7>(test, &tp, base[i]) != strtoull(test, &cp, base[i]) || tp != cp) { + printf("%s : 0U t=%llu(%d) c=%llu(%d)\n", test, + (unsigned long long)BigUInt<7>(test, nullptr, base[i]), int(tp-test), strtoull(test, nullptr, base[i]), int(cp-test)); + exit(-1); + } + } + { + const char *tp = test; + char *cp = test; + if ((long long)BigInt<7>(test, &tp, base[i]) != strtoll(test, &cp, base[i]) || tp != cp) { + printf("%s : 0S t=%lld(%d) c=%lld(%d)\n", test, + (long long)BigInt<7>(test, nullptr, base[i]), int(tp-test), strtoll(test, nullptr, base[i]), int(cp-test)); + exit(-1); + } + } + } + + snprintf(fmt, 100, "%%%s%s%s%s%s.%d%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + prec, types[i]); + snprintf(corr, 100, fmt, val); + + snprintf(fmt, 100, "%%%s%s%s%s%s.%d_32%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + prec, types[i]); + tlfloat_snprintf(test, 8, fmt, val); + tlfloat_snprintf(test, 100, fmt, val); + + if(strcmp(test,corr) != 0) { + printf("%s : c=[%s] t=[%s]\n", fmt, corr, test); + exit(-1); + } + + { + const char *tp = test; + char *cp = test; + if ((unsigned long long)BigUInt<7>(test, &tp, base[i]) != strtoull(test, &cp, base[i]) || tp != cp) { + printf("%s : 0U t=%llu(%d) c=%llu(%d)\n", test, + (unsigned long long)BigUInt<7>(test, nullptr, base[i]), int(tp-test), strtoull(test, nullptr, base[i]), int(cp-test)); + exit(-1); + } + } + { + const char *tp = test; + char *cp = test; + if ((long long)BigInt<7>(test, &tp, base[i]) != strtoll(test, &cp, base[i]) || tp != cp) { + printf("%s : 0S t=%lld(%d) c=%lld(%d)\n", test, + (long long)BigInt<7>(test, nullptr, base[i]), int(tp-test), strtoll(test, nullptr, base[i]), int(cp-test)); + exit(-1); + } + } + + // + + snprintf(fmt, 100, "%%%s%s%s%s%s.*%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types[i]); + snprintf(corr, 100, fmt, prec, val); + + snprintf(fmt, 100, "%%%s%s%s%s%s.*_32%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types[i]); + tlfloat_snprintf(test, 8, fmt, prec, val); + tlfloat_snprintf(test, 100, fmt, prec, val); + + if(strcmp(test,corr) != 0) { + printf("%s : c=[%s] t=[%s]\n", fmt, corr, test); + exit(-1); + } + + { + const char *tp = test; + char *cp = test; + if ((unsigned long long)BigUInt<7>(test, &tp, base[i]) != strtoull(test, &cp, base[i]) || tp != cp) { + printf("%s : 0U t=%llu(%d) c=%llu(%d)\n", test, + (unsigned long long)BigUInt<7>(test, nullptr, base[i]), int(tp-test), strtoull(test, nullptr, base[i]), int(cp-test)); + exit(-1); + } + } + { + const char *tp = test; + char *cp = test; + if ((long long)BigInt<7>(test, &tp, base[i]) != strtoll(test, &cp, base[i]) || tp != cp) { + printf("%s : 0S t=%lld(%d) c=%lld(%d)\n", test, + (long long)BigInt<7>(test, nullptr, base[i]), int(tp-test), strtoll(test, nullptr, base[i]), int(cp-test)); + exit(-1); + } + } + } + } + } + } + } + } + } +} + +void testem64(int64_t val) { + const char *types[] = { "lld", "llu", "llx", "llo" }; + const char *types2[] = { "d", "u", "x", "o" }; + for(int i=0;i<4;i++) { + for(int alt=0;alt<2;alt++) { + for(int zero=0;zero<2;zero++) { + for(int left=0;left<2;left++) { + for(int blank=0;blank<2;blank++) { + for(int sign=0;sign<2;sign++) { + char fmt[120], corr[120], test[120]; + + snprintf(fmt, 90, "%%%s%s%s%s%s%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types[i]); + snprintf(corr, 98, fmt, val); + + snprintf(fmt, 90, "%%%s%s%s%s%s_64%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types2[i]); + tlfloat_snprintf(test, 8, fmt, val); + tlfloat_snprintf(test, 98, fmt, val); + + if(strcmp(test,corr) != 0) { + printf("%s : c=[%s] t=[%s]\n", fmt, corr, test); + } + + for(unsigned w=0;w(val)); + tlfloat_snprintf(test, 98, fmt, BigInt<7>(val)); + + if(strcmp(test,corr) != 0) { + printf("%s : c=[%s] t=[%s]\n", fmt, corr, test); + } + +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + snprintf(fmt, 90, "%%%s%s%s%s%sQ%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + types2[i]); + tlfloat_snprintf(test, 8, fmt, __int128_t(val)); + tlfloat_snprintf(test, 98, fmt, __int128_t(val)); + + if(strcmp(test,corr) != 0) { + printf("%s(__int128_t) : c=[%s] t=[%s]\n", fmt, corr, test); + } +#endif + + for(unsigned w=0;w(val)); + tlfloat_snprintf(test, 98, fmt, BigInt<7>(val)); + + if(strcmp(test,corr) != 0) { + printf("%s : c=[%s] t=[%s]\n", fmt, corr, test); + exit(-1); + } + +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + snprintf(fmt, 90, "%%%s%s%s%s%s%d.Q%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + width, types2[i]); + tlfloat_snprintf(test, 8, fmt, __int128_t(val)); + tlfloat_snprintf(test, 98, fmt, __int128_t(val)); + + if(strcmp(test,corr) != 0) { + printf("%s(__int128_t) : c=[%s] t=[%s]\n", fmt, corr, test); + } +#endif + } + + for(int prec=0;prec<=12;prec += 2) { + for(unsigned w=0;w(val)); + tlfloat_snprintf(test, 98, fmt, BigInt<7>(val)); + + if(strcmp(test,corr) != 0) { + printf("%s : c=[%s] t=[%s]\n", fmt, corr, test); + exit(-1); + } + +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + snprintf(fmt, 90, "%%%s%s%s%s%s%d.%dQ%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + width, prec, types2[i]); + tlfloat_snprintf(test, 8, fmt, __int128_t(val)); + tlfloat_snprintf(test, 98, fmt, __int128_t(val)); + + if(strcmp(test,corr) != 0) { + printf("%s(__int128_t) : c=[%s] t=[%s]\n", fmt, corr, test); + } +#endif + } + + snprintf(fmt, 90, "%%%s%s%s%s%s.%d%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + prec, types[i]); + snprintf(corr, 98, fmt, val); + + snprintf(fmt, 90, "%%%s%s%s%s%s.%d_128%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + prec, types2[i]); + tlfloat_snprintf(test, 8, fmt, BigInt<7>(val)); + tlfloat_snprintf(test, 98, fmt, BigInt<7>(val)); + + if(strcmp(test,corr) != 0) { + printf("%s : c=[%s] t=[%s]\n", fmt, corr, test); + exit(-1); + } + +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + snprintf(fmt, 90, "%%%s%s%s%s%s.%dQ%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + prec, types2[i]); + tlfloat_snprintf(test, 8, fmt, __int128_t(val)); + tlfloat_snprintf(test, 98, fmt, __int128_t(val)); + + if(strcmp(test,corr) != 0) { + printf("%s(__int128_t) : c=[%s] t=[%s]\n", fmt, corr, test); + } +#endif + } + } + } + } + } + } + } +} + +using namespace std; + +int main(int argc, char **argv) { + auto rng = createPreferredRNG(); + int var; + doTest("head %d [%*g] [%.*g] [%*.*g] %% %d tail", 123, 8, 100.1234567, 7, 101.1234567, 11, 9, 102.1234567, 321); + doTest("head %d [%*d] [%.*d] [%*.*d] %%%d tail", 123, 8, 100, 7, 101, 11, 9, 102, 321); + doTest("head %d [%*s] [%.*s] [%*.*s] %d%% tail", 123, 8, "abc", 7, "def", 11, 9, "ghi", 321); + doTest("head %.8d %hhd %hd %d %ld %lld %jd %zd %td %.4d tail", + 123, (signed char)1, (short int)2, (int)3, (long int)4, (long long int)5, (intmax_t)6, (size_t)7, (ptrdiff_t) 8, 321); + doTest("head %.8d %hhd %hd %d %ld %lld %jd %zd %td %.4d tail", + -123, (signed char)-1, (short int)-2, (int)-3, (long int)-4, (long long int)-5, (intmax_t)-6, (size_t)7, (ptrdiff_t)-8, -321); + doTest("head %10.8d %hhi %hi %i %li %lli %ji %zi %ti %8.5d tail", + 123, (signed char)1, (short int)2, (int)3, (long int)4, (long long int)5, (intmax_t)6, (size_t)7, (ptrdiff_t) 8, 321); + doTest("head %10.8d %hhi %hi %i %li %lli %ji %zi %ti %8.5d tail", + -123, (signed char)-1, (short int)-2, (int)-3, (long int)-4, (long long int)-5, (intmax_t)-6, (size_t)7, (ptrdiff_t)-8, -321); + doTest("head %-10d %hhx %hx %x %lx %llx %jx %zx %tx %-10.9d tail", + 123, (unsigned char)1, (short unsigned)2, (unsigned)3, (long unsigned)4, (long long unsigned)5, (uintmax_t)6, (size_t)7, (ptrdiff_t) 8, 321); + doTest("head %+10d %hhX %hX %X %lX %llX %jX %zX %tX %+10.9d tail", + 123, (unsigned char)1, (short unsigned)2, (unsigned)3, (long unsigned)4, (long long unsigned)5, (uintmax_t)6, (size_t)7, (ptrdiff_t) 8, 321); + doTest("head %d %hhu %hu %u %lu %llu %ju %zu %tu %d tail", + 123, (unsigned char)1, (short unsigned)2, (unsigned)3, (long unsigned)4, (long long unsigned)5, (uintmax_t)6, (size_t)7, (ptrdiff_t) 8, 321); + doTest("head %d %hho %ho %o %lo %llo %jo %zo %to %d tail", + 123, (unsigned char)1, (short unsigned)2, (unsigned)3, (long unsigned)4, (long long unsigned)5, (uintmax_t)6, (size_t)7, (ptrdiff_t) 8, 321); + doTest("head %d %f %F %e %E %g %G %a %A %d tail", + 123, 0.11, 0.21, 0.31, 0.41, 0.51, 0.61, 0.71, 0.81, 321); + doTest("head %d %f %F %e %E %g %G %a %A %d tail", + -123, -0.11, -0.21, -0.31, -0.41, -0.51, -0.61, -0.71, -0.81, -321); + doTest("head %d %Lf %LF %Le %LE %Lg %LG %La %LA %d tail", + 123, 0.11L, 0.21L, 0.31L, 0.41L, 0.51L, 0.61L, 0.71L, 0.81L, 321); + doTest("head %d %Lf %LF %Le %LE %Lg %LG %La %LA %d tail", + -123, -0.11L, -0.21L, -0.31L, -0.41L, -0.51L, -0.61L, -0.71L, -0.81L, -321); + doTest("head %d %c %s %p %p %d tail", 123, 111, "string", NULL, &var, 321); + doTest("head %d %c %s %p %p %d tail", -123, 111, "string", NULL, &var, -321); + + testem32(0); + for(int i=0;i<31;i++) { + testem32(+1 << i); + testem32(-1 << i); + } + + cout << "int32_t OK" << endl; + + testem64(0); + for(int i=0;i<63;i++) { + testem64(+1LL << i); + testem64(-1LL << i); + } + + cout << "int64_t OK" << endl; + + testem128(0); + for(int i=0;i<63;i++) { + testem128(+1LL << i); + testem128(-1LL << i); + } + + cout << "128bit int OK" << endl; + + testem(NAN, 5); + testem(+0.0, 5); + testem(-0.0, 5); + testem(+INFINITY, 5); + testem(-INFINITY, 5); + testem(+1.0, 5); + testem(-1.0, 5); + + cout << "Float OK" << endl; + + testem(NAN); + testem(+0.0); + testem(-0.0); + testem(+INFINITY); + testem(-INFINITY); + testem(+1.0); + testem(-1.0); + testem(+0.1); + testem(-0.1); + testem(+1e+12); + testem(-1e+12); + testem(+1.234567890123456789e+12); + testem(-1.234567890123456789e+12); + testem(+1e-12); + testem(-1e-12); + testem(+1.234567890123456789e-12); + testem(-1.234567890123456789e-12); + testem(+1e+120); + testem(-1e+120); + testem(+1.234567890123456789e+120); + testem(-1.234567890123456789e+120); + testem(+1e-120); + testem(-1e-120); + testem(+1.234567890123456789e-120); + testem(-1.234567890123456789e-120); + + cout << "Double OK" << endl; + + testem(NAN); + testem(+0.0); + testem(-0.0); + testem(+INFINITY); + testem(-INFINITY); + testem(+1.0); + testem(-1.0); + testem(+0.1); + testem(-0.1); + testem(+1e+12); + testem(-1e+12); + testem(+1.234567890123456789e+12); + testem(-1.234567890123456789e+12); + testem(+1e-12); + testem(-1e-12); + testem(+1.234567890123456789e-12); + testem(-1.234567890123456789e-12); + testem(+1e+120); + testem(-1e+120); + testem(+1.234567890123456789e+120); + testem(-1.234567890123456789e+120); + testem(+1e-120); + testem(-1e-120); + testem(+1.234567890123456789e-120); + testem(-1.234567890123456789e-120); + + for(int i=0;i<1000;i++) { + static char str[1024]; + Quad qc = rndQ(rng); + tlfloat_snprintf(str, 8, "%.40_128g", qc); + tlfloat_snprintf(str, sizeof(str), "%.40_128g", qc); + Quad qt = tlfloat_strtoq(str, nullptr); + if (!cmpq(qc, qt, 1)) { + printf("Quad snprintf : %s\n", str); + tlfloat_printf("qc = %.40_128g\n", qc); + tlfloat_printf("qt = %.40_128g\n", qt); + exit(-1); + } + } + + cout << "Quad OK" << endl; + + testem(NAN); + testem(+0.0); + testem(-0.0); + testem(+INFINITY); + testem(-INFINITY); + testem(+1.0); + testem(-1.0); + testem(+0.1); + testem(-0.1); + testem(+1e+12); + testem(-1e+12); + testem(+1.234567890123456789e+12); + testem(-1.234567890123456789e+12); + testem(+1e-12); + testem(-1e-12); + testem(+1.234567890123456789e-12); + testem(-1.234567890123456789e-12); + testem(+1e+120); + testem(-1e+120); + testem(+1.234567890123456789e+120); + testem(-1.234567890123456789e+120); + testem(+1e-120); + testem(-1e-120); + testem(+1.234567890123456789e-120); + testem(-1.234567890123456789e-120); + + for(int i=0;i<1000;i++) { + static char str[1024]; + Octuple oc = rndo(rng); + tlfloat_snprintf(str, 8, "%.80_256g", oc); + tlfloat_snprintf(str, sizeof(str), "%.80_256g", oc); + Octuple ot = tlfloat_strtoo(str, nullptr); + if (!cmpo(oc, ot, 1)) { + printf("Octuple snprintf : %s\n", str); + tlfloat_printf("oc = %.80_256g\n", oc); + tlfloat_printf("ot = %.80_256g\n", ot); + exit(-1); + } + } + + cout << "Octuple OK" << endl; + + cout << "OK" << endl; + + exit(0); +} diff --git a/validation/extern/tlfloat/src/tester/test_printf_hash.cpp b/validation/extern/tlfloat/src/tester/test_printf_hash.cpp new file mode 100644 index 0000000..72c3e67 --- /dev/null +++ b/validation/extern/tlfloat/src/tester/test_printf_hash.cpp @@ -0,0 +1,554 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include +#include +#include + +#include "tlfloat/tlfloat.hpp" +#include "tlfloat/tlfloat.h" +#include "testerutil.hpp" + +using namespace tlfloat; + +FILE *fp = nullptr; +auto sha256 = PSHA2_256_Internal(); + +static const int test_widths[] = { -1, 0, 1, 2, 3, 4, 6, 8, 12, 16, 20, 32 }; +static const int test_precs[] = { 0, 1, 2, 3, 4, 8, 12, 14 }; + +void doTest(const char *fmt, ...) { + static char strt[1024]; + + va_list ap; + + va_start(ap, fmt); + int rett = tlfloat_vsnprintf(strt, sizeof(strt), fmt, ap); + va_end(ap); + + sha256.appendWord((void *)&rett, sizeof(rett)); + sha256.append((void *)strt, strlen(strt)+1); + if (fp) { fwrite((void *)strt, strlen(strt), 1, fp); fputc((int)'\n', fp); } +} + +template +void testem(double val, int cmpprec=10) { + const char *types[] = { "e", "f", "g", "a" }; + int nbits = sizeof(T) * 8; + for(int i=0;i<4;i++) { + for(int alt=0;alt<2;alt++) { + for(int zero=0;zero<2;zero++) { + for(int left=0;left<2;left++) { + for(int blank=0;blank<2;blank++) { + for(int sign=0;sign<2;sign++) { + char fmt[120], test[120]; + int lt; + + snprintf(fmt, 100, "%%%s%s%s%s%s_%d%s", + alt ? "#" : "", + zero ? "0" : "", + left ? "-" : "", + blank ? " " : "", + sign ? "+" : "", + nbits, + types[i]); + lt = tlfloat_snprintf(test, 100, fmt, T(val)); + + sha256.appendWord((void *)<, sizeof(lt)); + sha256.append((void *)test, strlen(test)+1); + if (fp) { fwrite((void *)test, strlen(test), 1, fp); fputc((int)'\n', fp); } + + for(unsigned w=0;w(new LCG64(0)); + int mode = 0; + if (argc >= 3 && strcmp(argv[1], "w") == 0) { + if (strcmp(argv[2], "-") == 0) { + fp = stdout; + } else { + fp = fopen(argv[2], "wb"); + if (!fp) { + cerr << "Could not open " << argv[2] << endl; + exit(-1); + } + } + mode = 1; + } + + for(int i=0;i<1000;i++) { + doTest("%d %.20g %d", 123, rndd(rng), 321); + doTest("%d %.40_128g %d", 123, rndQ(rng), 321); + doTest("%d %.80_256g %d", 123, rndo(rng), 321); + } + + doTest("head %d [%*g] [%.*g] [%*.*g] %d tail", 123, 8, 100.1234567, 7, 101.1234567, 11, 9, 102.1234567, 321); + doTest("head %d [%*d] [%.*d] [%*.*d] %d tail", 123, 8, 100, 7, 101, 11, 9, 102, 321); + doTest("head %d [%*s] [%.*s] [%*.*s] %d tail", 123, 8, "abc", 7, "def", 11, 9, "ghi", 321); + doTest("head %.8d %hhd %hd %d %ld %lld %jd %zd %td %.4d tail", + 123, (signed char)1, (short int)2, (int)3, (long int)4, (long long int)5, (intmax_t)6, (size_t)7, (ptrdiff_t) 8, 321); + doTest("head %.8d %hhd %hd %d %ld %lld %jd %zd %td %.4d tail", + -123, (signed char)-1, (short int)-2, (int)-3, (long int)-4, (long long int)-5, (intmax_t)-6, (size_t)7, (ptrdiff_t)-8, -321); + doTest("head %10.8d %hhi %hi %i %li %lli %ji %zi %ti %8.5d tail", + 123, (signed char)1, (short int)2, (int)3, (long int)4, (long long int)5, (intmax_t)6, (size_t)7, (ptrdiff_t) 8, 321); + doTest("head %10.8d %hhi %hi %i %li %lli %ji %zi %ti %8.5d tail", + -123, (signed char)-1, (short int)-2, (int)-3, (long int)-4, (long long int)-5, (intmax_t)-6, (size_t)7, (ptrdiff_t)-8, -321); + doTest("head %-10d %hhx %hx %x %lx %llx %jx %zx %tx %-10.9d tail", + 123, (unsigned char)1, (short unsigned)2, (unsigned)3, (long unsigned)4, (long long unsigned)5, (uintmax_t)6, (size_t)7, (ptrdiff_t) 8, 321); + doTest("head %+10d %hhX %hX %X %lX %llX %jX %zX %tX %+10.9d tail", + 123, (unsigned char)1, (short unsigned)2, (unsigned)3, (long unsigned)4, (long long unsigned)5, (uintmax_t)6, (size_t)7, (ptrdiff_t) 8, 321); + doTest("head %d %hhu %hu %u %lu %llu %ju %zu %tu %d tail", + 123, (unsigned char)1, (short unsigned)2, (unsigned)3, (long unsigned)4, (long long unsigned)5, (uintmax_t)6, (size_t)7, (ptrdiff_t) 8, 321); + doTest("head %d %hho %ho %o %lo %llo %jo %zo %to %d tail", + 123, (unsigned char)1, (short unsigned)2, (unsigned)3, (long unsigned)4, (long long unsigned)5, (uintmax_t)6, (size_t)7, (ptrdiff_t) 8, 321); + doTest("head %d %f %F %e %E %g %G %a %A %d tail", + 123, 0.11, 0.21, 0.31, 0.41, 0.51, 0.61, 0.71, 0.81, 321); + doTest("head %d %f %F %e %E %g %G %a %A %d tail", + -123, -0.11, -0.21, -0.31, -0.41, -0.51, -0.61, -0.71, -0.81, -321); + + testem32(0); + for(int i=0;i<31;i++) { + testem32(+1 << i); + testem32(-1 << i); + } + + testem64(0); + for(int i=0;i<63;i++) { + testem64(+1LL << i); + testem64(-1LL << i); + } + + double xnan = bit_cast(int64_t(-1)); + + testem(xnan, 5); + testem(+0.0, 5); + testem(-0.0, 5); + testem(+INFINITY, 5); + testem(-INFINITY, 5); + testem(+1.0, 5); + testem(-1.0, 5); + + testem(xnan); + testem(+0.0); + testem(-0.0); + testem(+INFINITY); + testem(-INFINITY); + testem(+1.0); + testem(-1.0); + testem(+0.1); + testem(-0.1); + testem(+1e+12); + testem(-1e+12); + testem(+1.234567890123456789e+12); + testem(-1.234567890123456789e+12); + testem(+1e-12); + testem(-1e-12); + testem(+1.234567890123456789e-12); + testem(-1.234567890123456789e-12); + testem(+1e+120); + testem(-1e+120); + testem(+1.234567890123456789e+120); + testem(-1.234567890123456789e+120); + testem(+1e-120); + testem(-1e-120); + testem(+1.234567890123456789e-120); + testem(-1.234567890123456789e-120); + + testem(xnan); + testem(+0.0); + testem(-0.0); + testem(+INFINITY); + testem(-INFINITY); + testem(+1.0); + testem(-1.0); + testem(+0.1); + testem(-0.1); + testem(+1e+12); + testem(-1e+12); + testem(+1.234567890123456789e+12); + testem(-1.234567890123456789e+12); + testem(+1e-12); + testem(-1e-12); + testem(+1.234567890123456789e-12); + testem(-1.234567890123456789e-12); + testem(+1e+120); + testem(-1e+120); + testem(+1.234567890123456789e+120); + testem(-1.234567890123456789e+120); + testem(+1e-120); + testem(-1e-120); + testem(+1.234567890123456789e-120); + testem(-1.234567890123456789e-120); + + testem(xnan); + testem(+0.0); + testem(-0.0); + testem(+INFINITY); + testem(-INFINITY); + testem(+1.0); + testem(-1.0); + testem(+0.1); + testem(-0.1); + testem(+1e+12); + testem(-1e+12); + testem(+1.234567890123456789e+12); + testem(-1.234567890123456789e+12); + testem(+1e-12); + testem(-1e-12); + testem(+1.234567890123456789e-12); + testem(-1.234567890123456789e-12); + testem(+1e+120); + testem(-1e+120); + testem(+1.234567890123456789e+120); + testem(-1.234567890123456789e+120); + testem(+1e-120); + testem(-1e-120); + testem(+1.234567890123456789e-120); + testem(-1.234567890123456789e-120); + + // + + if (mode == 0) { + uint8_t h[32]; + sha256.finalize_bytes(&h); + + if (argc == 1) { + for(int i=0;i<32;i++) printf("%02x", h[i]); + printf("\n"); + } else { + unsigned int a[32]; + if (sscanf(argv[1], "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + &a[ 0], &a[ 1], &a[ 2], &a[ 3], &a[ 4], &a[ 5], &a[ 6], &a[ 7], &a[ 8], &a[ 9], + &a[10], &a[11], &a[12], &a[13], &a[14], &a[15], &a[16], &a[17], &a[18], &a[19], + &a[20], &a[21], &a[22], &a[23], &a[24], &a[25], &a[26], &a[27], &a[28], &a[29], + &a[30], &a[31]) != 32) { + printf("NG (arg format)\n"); + exit(-1); + } + for(int i=0;i<32;i++) { + if (h[i] != a[i]) { + printf("NG\n"); + exit(-1); + } + } + printf("OK\n"); + } + } + + exit(0); +} diff --git a/validation/extern/tlfloat/src/tester/tester1.cpp b/validation/extern/tlfloat/src/tester/tester1.cpp new file mode 100644 index 0000000..069ae83 --- /dev/null +++ b/validation/extern/tlfloat/src/tester/tester1.cpp @@ -0,0 +1,525 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include + +#include + +#if defined(TLFLOAT_ENABLE_LIBQUADMATH) +#include +#endif + +#if defined(TLFLOAT_ENABLE_MPFR_WANT_FLOAT128) +#define MPFR_WANT_FLOAT128 +#endif +#include + +#include "suppress.hpp" + +#include +#include + +using namespace std; +using namespace tlfloat; + +int mpfr_lgamma_(mpfr_t rop, const mpfr_t op, mpfr_rnd_t rnd) { + int sign; + return mpfr_lgamma(rop, &sign, op, rnd); +} + +template +using Func1 = T (*)(const T&); + +template +using Func2 = T (*)(const T&, const T&); + +template +using Func2i = xpair (*)(const T&, const T&); + +template +using Func3 = T (*)(const T&, const T&, const T&); + +using MPFRFunc1 = int (*)(mpfr_t rop, const mpfr_t op, mpfr_rnd_t rnd); +using MPFRFunc1NR = int (*)(mpfr_t rop, const mpfr_t op); +using MPFRFunc2 = int (*)(mpfr_t rop, const mpfr_t op1, const mpfr_t op2, mpfr_rnd_t rnd); +using MPFRFunc2i = int (*)(mpfr_t rop, long int *ip, const mpfr_t op1, const mpfr_t op2, mpfr_rnd_t rnd); +using MPFRFunc3 = int (*)(mpfr_t rop, const mpfr_t op1, const mpfr_t op2, const mpfr_t op3, mpfr_rnd_t rnd); + +template static constexpr T fabs_(const T &a1) { return fabs(a1); } +template static constexpr T copysign_(const T &a1, const T &a2) { return copysign(a1, a2); } +template static constexpr T fmax_(const T &a1, const T &a2) { return fmax(a1, a2); } +template static constexpr T fmin_(const T &a1, const T &a2) { return fmin(a1, a2); } +template static constexpr T fdim_(const T &a1, const T &a2) { return fdim(a1, a2); } +template static constexpr T add_(const T &a1, const T &a2) { return a1 + a2; } +template static constexpr T sub_(const T &a1, const T &a2) { return a1 - a2; } +template static constexpr T mul_(const T &a1, const T &a2) { return a1 * a2; } +template static constexpr T div_(const T &a1, const T &a2) { return a1 / a2; } +template static constexpr T fma_(const T &a1, const T &a2, const T &a3) { return fma(a1, a2, a3); } +template static constexpr T sqrt_(const T &a) { return sqrt(a); } +template static constexpr T hypot_(const T &a1, const T &a2) { return hypot(a1, a2); } +template static constexpr T trunc_(const T &a) { return trunc(a); } +template static constexpr T floor_(const T &a) { return floor(a); } +template static constexpr T ceil_(const T &a) { return ceil(a); } +template static constexpr T round_(const T &a) { return round(a); } +template static constexpr T rint_(const T &a) { return rint(a); } +template static constexpr T nextafter_(const T &a1, const T &a2) { return nextafter(a1, a2); } +template static constexpr T lgamma_(const T &a1) { return lgamma(a1, nullptr); } + +template func, MPFRFunc1 mpfrFunc> +void doTest(const char *mes, T a1, mpfr_t &mr, mpfr_t &ma1) { + T r = func(a1); + typedef decltype(r.getUnpacked()) Unpacked_t; + + mpfr_set_unpacked(ma1, a1.getUnpacked(), GMP_RNDN); + mpfrFunc(mr, ma1, GMP_RNDN); + double ulp = countULP(r.getUnpacked(), mr, Unpacked_t::flt_true_min(), Unpacked_t::flt_max(), fabs(double(a1)) < 2); + + if (ulp <= 1.0) return; + + cout << mes << endl; + cout << "arg1 : " << to_string(a1, 72) << endl; + cout << "tlfloat : " << to_string(r, 72) << endl; + cout << "mpfr : " << to_string(mr, 72) << endl; + exit(-1); +} + +template func, MPFRFunc1NR mpfrFunc> +void doTest(const char *mes, T a1, mpfr_t &mr, mpfr_t &ma1) { + T r = func(a1); + typedef decltype(r.getUnpacked()) Unpacked_t; + + mpfr_set_unpacked(ma1, a1.getUnpacked(), GMP_RNDN); + mpfrFunc(mr, ma1); + double ulp = countULP(r.getUnpacked(), mr, Unpacked_t::flt_true_min(), Unpacked_t::flt_max(), true); + + if (ulp <= 1.0) return; + + cout << mes << endl; + cout << "arg1 : " << to_string(a1, 72) << endl; + cout << "tlfloat : " << to_string(r, 72) << endl; + cout << "mpfr : " << to_string(mr, 72) << endl; + exit(-1); +} + +template func, MPFRFunc2 mpfrFunc> +void doTest(const char *mes, T a1, T a2, mpfr_t &mr, mpfr_t &ma1, mpfr_t &ma2, bool skipnan = false) { + if (skipnan && isnan(a2)) return; + T r = func(a1, a2); + typedef decltype(r.getUnpacked()) Unpacked_t; + + mpfr_set_unpacked(ma1, a1.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(ma2, a2.getUnpacked(), GMP_RNDN); + mpfrFunc(mr, ma1, ma2, GMP_RNDN); + double ulp = countULP(r.getUnpacked(), mr, Unpacked_t::flt_true_min(), Unpacked_t::flt_max(), true); + + if (ulp <= 1.0) return; + + cout << mes << endl; + cout << "arg1 : " << to_string(a1, 72) << endl; + cout << "arg2 : " << to_string(a2, 72) << endl; + cout << "tlfloat : " << to_string(r, 72) << endl; + cout << "mpfr : " << to_string(mr, 72) << endl; + exit(-1); +} + +template func, MPFRFunc2i mpfrFunc> +void doTest(const char *mes, T a1, T a2, mpfr_t &mr, mpfr_t &ma1, mpfr_t &ma2, bool skipnan = false) { + if (skipnan && isnan(a2)) return; + xpair r = func(a1, a2); + typedef decltype(r.first.getUnpacked()) Unpacked_t; + + mpfr_set_unpacked(ma1, a1.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(ma2, a2.getUnpacked(), GMP_RNDN); + long int mq = 0; + mpfrFunc(mr, &mq, ma1, ma2, GMP_RNDN); + double ulp = countULP(r.first.getUnpacked(), mr, Unpacked_t::flt_true_min(), Unpacked_t::flt_max(), true); + + if (ulp <= 0.5 && eqquo(r.second, mq)) return; + + cout << mes << endl; + cout << "arg1 : " << to_string(a1, 72) << endl; + cout << "arg2 : " << to_string(a2, 72) << endl; + cout << "tlfloat : " << to_string(r.first, 72) << ", " << r.second << endl; + printf("%016llx\n", (long long)r.second); + cout << "mpfr : " << to_string(mr, 72) << ", " << mq << endl; + printf("%016llx\n", (long long)mq); + exit(-1); +} + +template func, MPFRFunc3 mpfrFunc> +void doTest(const char *mes, T a1, T a2, T a3, mpfr_t &mr, mpfr_t &ma1, mpfr_t &ma2, mpfr_t &ma3, bool skipnan = false) { + if (skipnan && isnan(a2)) return; + T r = func(a1, a2, a3); + typedef decltype(r.getUnpacked()) Unpacked_t; + + mpfr_set_unpacked(ma1, a1.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(ma2, a2.getUnpacked(), GMP_RNDN); + mpfr_set_unpacked(ma3, a3.getUnpacked(), GMP_RNDN); + mpfrFunc(mr, ma1, ma2, ma3, GMP_RNDN); + double ulp = countULP(r.getUnpacked(), mr, Unpacked_t::flt_true_min(), Unpacked_t::flt_max(), true); + + if (ulp <= 1.0) return; + + cout << mes << endl; + cout << "arg1 : " << to_string(a1, 72) << endl; + cout << "arg2 : " << to_string(a2, 72) << endl; + cout << "tlfloat : " << to_string(r, 72) << endl; + cout << "mpfr : " << to_string(mr, 72) << endl; + exit(-1); +} + +int main(int argc, char **argv) { + int n = 100; + if (argc >= 2) n = atoi(argv[1]); + + mpfr_set_default_prec(256); + + mpfr_t mr, ma1, ma2, ma3; + mpfr_inits(mr, ma1, ma2, ma3, NULL); + + auto rng = createPreferredRNG(); + + vector hvalues = genTestValues(n, rng); + vector fvalues = genTestValues(n, rng); + vector dvalues = genTestValues(n, rng); + vector qvalues = genTestValues(n, rng); + vector ovalues = genTestValues(n, rng); + + int N = hvalues.size(); + + for(int index0 = 0;index0 < N;index0++) { + doTest("Half fabs", hvalues[index0], mr, ma1); + doTest("Float fabs", fvalues[index0], mr, ma1); + doTest("Double fabs", dvalues[index0], mr, ma1); + doTest("Quad fabs", qvalues[index0], mr, ma1); + doTest("Octuple fabs", ovalues[index0], mr, ma1); + + doTest("Half sqrt", hvalues[index0], mr, ma1); + doTest("Float sqrt", fvalues[index0], mr, ma1); + doTest("Double sqrt", dvalues[index0], mr, ma1); + doTest("Quad sqrt", qvalues[index0], mr, ma1); + doTest("Octuple sqrt", ovalues[index0], mr, ma1); + + doTest("Half trunc", hvalues[index0], mr, ma1); + doTest("Float trunc", fvalues[index0], mr, ma1); + doTest("Double trunc", dvalues[index0], mr, ma1); + doTest("Quad trunc", qvalues[index0], mr, ma1); + doTest("Octuple trunc", ovalues[index0], mr, ma1); + + doTest("Half floor", hvalues[index0], mr, ma1); + doTest("Float floor", fvalues[index0], mr, ma1); + doTest("Double floor", dvalues[index0], mr, ma1); + doTest("Quad floor", qvalues[index0], mr, ma1); + doTest("Octuple floor", ovalues[index0], mr, ma1); + + doTest("Half ceil", hvalues[index0], mr, ma1); + doTest("Float ceil", fvalues[index0], mr, ma1); + doTest("Double ceil", dvalues[index0], mr, ma1); + doTest("Quad ceil", qvalues[index0], mr, ma1); + doTest("Octuple ceil", ovalues[index0], mr, ma1); + + doTest("Half round", hvalues[index0], mr, ma1); + doTest("Float round", fvalues[index0], mr, ma1); + doTest("Double round", dvalues[index0], mr, ma1); + doTest("Quad round", qvalues[index0], mr, ma1); + doTest("Octuple round", ovalues[index0], mr, ma1); + + doTest("Half rint", hvalues[index0], mr, ma1); + doTest("Float rint", fvalues[index0], mr, ma1); + doTest("Double rint", dvalues[index0], mr, ma1); + doTest("Quad rint", qvalues[index0], mr, ma1); + doTest("Octuple rint", ovalues[index0], mr, ma1); + + doTest("Half sin", hvalues[index0], mr, ma1); + doTest("Float sin", fvalues[index0], mr, ma1); + doTest("Double sin", dvalues[index0], mr, ma1); + doTest("Quad sin", qvalues[index0], mr, ma1); + doTest("Octuple sin", ovalues[index0], mr, ma1); + + doTest("Half cos", hvalues[index0], mr, ma1); + doTest("Float cos", fvalues[index0], mr, ma1); + doTest("Double cos", dvalues[index0], mr, ma1); + doTest("Quad cos", qvalues[index0], mr, ma1); + doTest("Octuple cos", ovalues[index0], mr, ma1); + + doTest("Half tan", hvalues[index0], mr, ma1); + doTest("Float tan", fvalues[index0], mr, ma1); + doTest("Double tan", dvalues[index0], mr, ma1); + doTest("Quad tan", qvalues[index0], mr, ma1); + doTest("Octuple tan", ovalues[index0], mr, ma1); + +#ifdef TLFLOAT_ENABLE_MPFR_SINPI + doTest("Half sinpi", hvalues[index0], mr, ma1); + doTest("Float sinpi", fvalues[index0], mr, ma1); + doTest("Double sinpi", dvalues[index0], mr, ma1); + doTest("Quad sinpi", qvalues[index0], mr, ma1); + doTest("Octuple sinpi", ovalues[index0], mr, ma1); + + doTest("Half cospi", hvalues[index0], mr, ma1); + doTest("Float cospi", fvalues[index0], mr, ma1); + doTest("Double cospi", dvalues[index0], mr, ma1); + doTest("Quad cospi", qvalues[index0], mr, ma1); + doTest("Octuple cospi", ovalues[index0], mr, ma1); + + doTest("Half tanpi", hvalues[index0], mr, ma1); + doTest("Float tanpi", fvalues[index0], mr, ma1); + doTest("Double tanpi", dvalues[index0], mr, ma1); + doTest("Quad tanpi", qvalues[index0], mr, ma1); + doTest("Octuple tanpi", ovalues[index0], mr, ma1); +#endif + + doTest("Half asin", hvalues[index0], mr, ma1); + doTest("Float asin", fvalues[index0], mr, ma1); + doTest("Double asin", dvalues[index0], mr, ma1); + doTest("Quad asin", qvalues[index0], mr, ma1); + doTest("Octuple asin", ovalues[index0], mr, ma1); + + doTest("Half acos", hvalues[index0], mr, ma1); + doTest("Float acos", fvalues[index0], mr, ma1); + doTest("Double acos", dvalues[index0], mr, ma1); + doTest("Quad acos", qvalues[index0], mr, ma1); + doTest("Octuple acos", ovalues[index0], mr, ma1); + + doTest("Half atan", hvalues[index0], mr, ma1); + doTest("Float atan", fvalues[index0], mr, ma1); + doTest("Double atan", dvalues[index0], mr, ma1); + doTest("Quad atan", qvalues[index0], mr, ma1); + doTest("Octuple atan", ovalues[index0], mr, ma1); + + doTest("Half log", hvalues[index0], mr, ma1); + doTest("Float log", fvalues[index0], mr, ma1); + doTest("Double log", dvalues[index0], mr, ma1); + doTest("Quad log", qvalues[index0], mr, ma1); + doTest("Octuple log", ovalues[index0], mr, ma1); + + doTest("Half log2", hvalues[index0], mr, ma1); + doTest("Float log2", fvalues[index0], mr, ma1); + doTest("Double log2", dvalues[index0], mr, ma1); + doTest("Quad log2", qvalues[index0], mr, ma1); + doTest("Octuple log2", ovalues[index0], mr, ma1); + + doTest("Half log10", hvalues[index0], mr, ma1); + doTest("Float log10", fvalues[index0], mr, ma1); + doTest("Double log10", dvalues[index0], mr, ma1); + doTest("Quad log10", qvalues[index0], mr, ma1); + doTest("Octuple log10", ovalues[index0], mr, ma1); + + doTest("Half log1p", hvalues[index0], mr, ma1); + doTest("Float log1p", fvalues[index0], mr, ma1); + doTest("Double log1p", dvalues[index0], mr, ma1); + doTest("Quad log1p", qvalues[index0], mr, ma1); + doTest("Octuple log1p", ovalues[index0], mr, ma1); + + doTest("Half exp", hvalues[index0], mr, ma1); + doTest("Float exp", fvalues[index0], mr, ma1); + doTest("Double exp", dvalues[index0], mr, ma1); + doTest("Quad exp", qvalues[index0], mr, ma1); + doTest("Octuple exp", ovalues[index0], mr, ma1); + + doTest("Half exp2", hvalues[index0], mr, ma1); + doTest("Float exp2", fvalues[index0], mr, ma1); + doTest("Double exp2", dvalues[index0], mr, ma1); + doTest("Quad exp2", qvalues[index0], mr, ma1); + doTest("Octuple exp2", ovalues[index0], mr, ma1); + + doTest("Half exp10", hvalues[index0], mr, ma1); + doTest("Float exp10", fvalues[index0], mr, ma1); + doTest("Double exp10", dvalues[index0], mr, ma1); + doTest("Quad exp10", qvalues[index0], mr, ma1); + doTest("Octuple exp10", ovalues[index0], mr, ma1); + + doTest("Half expm1", hvalues[index0], mr, ma1); + doTest("Float expm1", fvalues[index0], mr, ma1); + doTest("Double expm1", dvalues[index0], mr, ma1); + doTest("Quad expm1", qvalues[index0], mr, ma1); + doTest("Octuple expm1", ovalues[index0], mr, ma1); + + doTest("Half sinh", hvalues[index0], mr, ma1); + doTest("Float sinh", fvalues[index0], mr, ma1); + doTest("Double sinh", dvalues[index0], mr, ma1); + doTest("Quad sinh", qvalues[index0], mr, ma1); + doTest("Octuple sinh", ovalues[index0], mr, ma1); + + doTest("Half cosh", hvalues[index0], mr, ma1); + doTest("Float cosh", fvalues[index0], mr, ma1); + doTest("Double cosh", dvalues[index0], mr, ma1); + doTest("Quad cosh", qvalues[index0], mr, ma1); + doTest("Octuple cosh", ovalues[index0], mr, ma1); + + doTest("Half tanh", hvalues[index0], mr, ma1); + doTest("Float tanh", fvalues[index0], mr, ma1); + doTest("Double tanh", dvalues[index0], mr, ma1); + doTest("Quad tanh", qvalues[index0], mr, ma1); + doTest("Octuple tanh", ovalues[index0], mr, ma1); + + doTest("Half asinh", hvalues[index0], mr, ma1); + doTest("Float asinh", fvalues[index0], mr, ma1); + doTest("Double asinh", dvalues[index0], mr, ma1); + doTest("Quad asinh", qvalues[index0], mr, ma1); + doTest("Octuple asinh", ovalues[index0], mr, ma1); + + doTest("Half acosh", hvalues[index0], mr, ma1); + doTest("Float acosh", fvalues[index0], mr, ma1); + doTest("Double acosh", dvalues[index0], mr, ma1); + doTest("Quad acosh", qvalues[index0], mr, ma1); + doTest("Octuple acosh", ovalues[index0], mr, ma1); + + doTest("Half atanh", hvalues[index0], mr, ma1); + doTest("Float atanh", fvalues[index0], mr, ma1); + doTest("Double atanh", dvalues[index0], mr, ma1); + doTest("Quad atanh", qvalues[index0], mr, ma1); + doTest("Octuple atanh", ovalues[index0], mr, ma1); + + doTest("Half erf", hvalues[index0], mr, ma1); + doTest("Float erf", fvalues[index0], mr, ma1); + doTest("Double erf", dvalues[index0], mr, ma1); + doTest("Quad erf", qvalues[index0], mr, ma1); + doTest("Octuple erf", ovalues[index0], mr, ma1); + + doTest("Half erfc", hvalues[index0], mr, ma1); + doTest("Float erfc", fvalues[index0], mr, ma1); + doTest("Double erfc", dvalues[index0], mr, ma1); + doTest("Quad erfc", qvalues[index0], mr, ma1); + doTest("Octuple erfc", ovalues[index0], mr, ma1); + + doTest("Half tgamma", hvalues[index0], mr, ma1); + doTest("Float tgamma", fvalues[index0], mr, ma1); + doTest("Double tgamma", dvalues[index0], mr, ma1); + doTest("Quad tgamma", qvalues[index0], mr, ma1); + doTest("Octuple tgamma", ovalues[index0], mr, ma1); + +#if 0 + doTest("Half lgamma", hvalues[index0], mr, ma1); + doTest("Float lgamma", fvalues[index0], mr, ma1); + doTest("Double lgamma", dvalues[index0], mr, ma1); + doTest("Quad lgamma", qvalues[index0], mr, ma1); + doTest("Octuple lgamma", ovalues[index0], mr, ma1); +#endif + + for(int index1 = 0;index1 < N;index1++) { + doTest("Half copysign", hvalues[index0], hvalues[index1], mr, ma1, ma2, true); + doTest("Float copysign", fvalues[index0], fvalues[index1], mr, ma1, ma2, true); + doTest("Double copysign", dvalues[index0], dvalues[index1], mr, ma1, ma2, true); + doTest("Quad copysign", qvalues[index0], qvalues[index1], mr, ma1, ma2, true); + doTest("Octuple copysign", ovalues[index0], ovalues[index1], mr, ma1, ma2, true); + + doTest("Half fdim", hvalues[index0], hvalues[index1], mr, ma1, ma2); + doTest("Float fdim", fvalues[index0], fvalues[index1], mr, ma1, ma2); + doTest("Double fdim", dvalues[index0], dvalues[index1], mr, ma1, ma2); + doTest("Quad fdim", qvalues[index0], qvalues[index1], mr, ma1, ma2); + doTest("Octuple fdim", ovalues[index0], ovalues[index1], mr, ma1, ma2); + + doTest("Half add", hvalues[index0], hvalues[index1], mr, ma1, ma2); + doTest("Float add", fvalues[index0], fvalues[index1], mr, ma1, ma2); + doTest("Double add", dvalues[index0], dvalues[index1], mr, ma1, ma2); + doTest("Quad add", qvalues[index0], qvalues[index1], mr, ma1, ma2); + doTest("Octuple add", ovalues[index0], ovalues[index1], mr, ma1, ma2); + + doTest("Half sub", hvalues[index0], hvalues[index1], mr, ma1, ma2); + doTest("Float sub", fvalues[index0], fvalues[index1], mr, ma1, ma2); + doTest("Double sub", dvalues[index0], dvalues[index1], mr, ma1, ma2); + doTest("Quad sub", qvalues[index0], qvalues[index1], mr, ma1, ma2); + doTest("Octuple sub", ovalues[index0], ovalues[index1], mr, ma1, ma2); + + doTest("Half mul", hvalues[index0], hvalues[index1], mr, ma1, ma2); + doTest("Float mul", fvalues[index0], fvalues[index1], mr, ma1, ma2); + doTest("Double mul", dvalues[index0], dvalues[index1], mr, ma1, ma2); + doTest("Quad mul", qvalues[index0], qvalues[index1], mr, ma1, ma2); + doTest("Octuple mul", ovalues[index0], ovalues[index1], mr, ma1, ma2); + + doTest("Half div", hvalues[index0], hvalues[index1], mr, ma1, ma2); + doTest("Float div", fvalues[index0], fvalues[index1], mr, ma1, ma2); + doTest("Double div", dvalues[index0], dvalues[index1], mr, ma1, ma2); + doTest("Quad div", qvalues[index0], qvalues[index1], mr, ma1, ma2); + doTest("Octuple div", ovalues[index0], ovalues[index1], mr, ma1, ma2); + + doTest("Half hypot", hvalues[index0], hvalues[index1], mr, ma1, ma2); + doTest("Float hypot", fvalues[index0], fvalues[index1], mr, ma1, ma2); + doTest("Double hypot", dvalues[index0], dvalues[index1], mr, ma1, ma2); + doTest("Quad hypot", qvalues[index0], qvalues[index1], mr, ma1, ma2); + doTest("Octuple hypot", ovalues[index0], ovalues[index1], mr, ma1, ma2); + + doTest("Half atan2", hvalues[index0], hvalues[index1], mr, ma1, ma2); + doTest("Float atan2", fvalues[index0], fvalues[index1], mr, ma1, ma2); + doTest("Double atan2", dvalues[index0], dvalues[index1], mr, ma1, ma2); + doTest("Quad atan2", qvalues[index0], qvalues[index1], mr, ma1, ma2); + doTest("Octuple atan2", ovalues[index0], ovalues[index1], mr, ma1, ma2); + + doTest("Half pow", hvalues[index0], hvalues[index1], mr, ma1, ma2); + doTest("Float pow", fvalues[index0], fvalues[index1], mr, ma1, ma2); + doTest("Double pow", dvalues[index0], dvalues[index1], mr, ma1, ma2); + doTest("Quad pow", qvalues[index0], qvalues[index1], mr, ma1, ma2); + doTest("Octuple pow", ovalues[index0], ovalues[index1], mr, ma1, ma2); + + doTest("Half fmod", hvalues[index0], hvalues[index1], mr, ma1, ma2); + doTest("Float fmod", fvalues[index0], fvalues[index1], mr, ma1, ma2); + doTest("Double fmod", dvalues[index0], dvalues[index1], mr, ma1, ma2); + doTest("Quad fmod", qvalues[index0], qvalues[index1], mr, ma1, ma2); + doTest("Octuple fmod", ovalues[index0], ovalues[index1], mr, ma1, ma2); + + doTest("Half remainder", hvalues[index0], hvalues[index1], mr, ma1, ma2); + doTest("Float remainder", fvalues[index0], fvalues[index1], mr, ma1, ma2); + doTest("Double remainder", dvalues[index0], dvalues[index1], mr, ma1, ma2); + doTest("Quad remainder", qvalues[index0], qvalues[index1], mr, ma1, ma2); + doTest("Octuple remainder", ovalues[index0], ovalues[index1], mr, ma1, ma2); + +#ifndef __i386__ + doTest("Half remquo", hvalues[index0], hvalues[index1], mr, ma1, ma2); + doTest("Float remquo", fvalues[index0], fvalues[index1], mr, ma1, ma2); + doTest("Double remquo", dvalues[index0], dvalues[index1], mr, ma1, ma2); + doTest("Quad remquo", qvalues[index0], qvalues[index1], mr, ma1, ma2); + doTest("Octuple remquo", ovalues[index0], ovalues[index1], mr, ma1, ma2); +#endif + + for(int index2 = 0;index2 < N;index2++) { + doTest("Half fma", hvalues[index0], hvalues[index1], hvalues[index2], mr, ma1, ma2, ma3); + doTest("Float fma", fvalues[index0], fvalues[index1], fvalues[index2], mr, ma1, ma2, ma3); + doTest("Double fma", dvalues[index0], dvalues[index1], dvalues[index2], mr, ma1, ma2, ma3); + doTest("Quad fma", qvalues[index0], qvalues[index1], qvalues[index2], mr, ma1, ma2, ma3); + doTest("Octuple fma", ovalues[index0], ovalues[index1], ovalues[index2], mr, ma1, ma2, ma3); + } + } + + // + + { + stringstream ssc, sst; + ssc << (double)dvalues[index0] << endl; + sst << dvalues[index0] << endl; + if (ssc.str() != sst.str()) { cout << "NG 0 c = <" << ssc.str() << ">, t = <" << sst.str() << ">" << endl; exit(-1); } + } + + { + stringstream ssc, sst; + ssc << setw(20) << (double)dvalues[index0] << endl; + sst << setw(20) << dvalues[index0] << endl; + if (ssc.str() != sst.str()) { cout << "NG 1 c = <" << ssc.str() << ">, t = <" << sst.str() << ">" << endl; exit(-1); } + } + + { + stringstream ssc, sst; + ssc << setprecision(14) << (double)dvalues[index0] << endl; + sst << setprecision(14) << dvalues[index0] << endl; + if (ssc.str() != sst.str()) { cout << "NG 2 c = <" << ssc.str() << ">, t = <" << sst.str() << ">" << endl; exit(-1); } + } + + { + stringstream ssc, sst; + ssc << setw(20) << right << (double)dvalues[index0] << endl; + sst << setw(20) << right << dvalues[index0] << endl; + if (ssc.str() != sst.str()) { cout << "NG 3 c = <" << ssc.str() << ">, t = <" << sst.str() << ">" << endl; exit(-1); } + } + } + + mpfr_clears(mr, ma1, ma2, ma3, NULL); + + cout << "OK" << endl; + + exit(0); +} diff --git a/validation/extern/tlfloat/src/tlfloat/CMakeLists.txt b/validation/extern/tlfloat/src/tlfloat/CMakeLists.txt new file mode 100644 index 0000000..1b9ff8c --- /dev/null +++ b/validation/extern/tlfloat/src/tlfloat/CMakeLists.txt @@ -0,0 +1,62 @@ +if (BUILD_LIBS) + add_library(tlfloat_inline OBJECT arith.cpp misc.cpp trig.cpp logexp.cpp invtrig.cpp hyp.cpp erfgamma.cpp) + set_target_properties(tlfloat_inline PROPERTIES + POSITION_INDEPENDENT_CODE ON + ) + target_compile_options(tlfloat_inline PRIVATE ${NOEXCEPT_CXX_FLAGS}) + if (ENABLE_INLINING AND "${LC_CMAKE_BUILD_TYPE}" STREQUAL "release") + target_compile_options(tlfloat_inline PRIVATE ${INLINE_CXX_FLAGS}) + target_compile_definitions(tlfloat_inline PRIVATE TLFLOAT_ENABLE_INLINING=1) + endif() + + add_library(tlfloat printf.cpp) + target_compile_options(tlfloat PRIVATE ${NOEXCEPT_CXX_FLAGS}) + target_link_libraries(tlfloat PRIVATE tlfloat_inline) + + set(INCLUDEDIR "${PROJECT_SOURCE_DIR}/src/include") + set(VERFILE "${PROJECT_BINARY_DIR}/include/tlfloat/tlfloatconfig.hpp") + set_target_properties(tlfloat PROPERTIES + VERSION ${TLFLOAT_VERSION} + SOVERSION ${TLFLOAT_SOVERSION} + PUBLIC_HEADER "${INCLUDEDIR}/tlfloat/bigint.hpp;${INCLUDEDIR}/tlfloat/rpitab.hpp;${INCLUDEDIR}/tlfloat/tlfloat.hpp;${INCLUDEDIR}/tlfloat/tlmath.hpp;${INCLUDEDIR}/tlfloat/tlmathcoef.hpp;${INCLUDEDIR}/tlfloat/tlfloat.h;${VERFILE}" + ) + install( + TARGETS tlfloat tlfloat_inline + EXPORT tlfloatTargets + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/tlfloat" + COMPONENT tlfloat_Development + ) + +else(BUILD_LIBS) + + set(INCLUDEDIR "${PROJECT_SOURCE_DIR}/src/include") + set(VERFILE "${PROJECT_BINARY_DIR}/include/tlfloat/tlfloatconfig.hpp") + install( + FILES "${INCLUDEDIR}/tlfloat/bigint.hpp" "${INCLUDEDIR}/tlfloat/rpitab.hpp" "${INCLUDEDIR}/tlfloat/tlfloat.hpp" "${INCLUDEDIR}/tlfloat/tlmath.hpp" "${INCLUDEDIR}/tlfloat/tlmathcoef.hpp" "${INCLUDEDIR}/tlfloat/tlfloat.h" "${VERFILE}" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/tlfloat" + ) + +endif(BUILD_LIBS) + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/tlfloat.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/tlfloat.pc" @ONLY) +install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/tlfloat.pc" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" + COMPONENT tlfloat_Development +) + +if (FALSE) + # Currently disabled because I still don't fully understand how this works + + configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/tlfloatConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/tlfloatConfig.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/tlfloat" + ) + + install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/tlfloatConfig.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/tlfloat" + COMPONENT tlfloat_Development + ) +endif() diff --git a/validation/extern/tlfloat/src/tlfloat/arith.cpp b/validation/extern/tlfloat/src/tlfloat/arith.cpp new file mode 100644 index 0000000..c43fa29 --- /dev/null +++ b/validation/extern/tlfloat/src/tlfloat/arith.cpp @@ -0,0 +1,184 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#include "suppress.hpp" + +#define TLFLOAT_NO_LIBSTDCXX +#include "tlfloat/tlmath.hpp" + +#include "tlfloat/tlfloat.h" + +using namespace tlfloat; + +extern "C" { + float tlfloat_addf(const float x, const float y) { return (float)(Float(x) + Float(y)); } + double tlfloat_add(const double x, const double y) { return (double)(Double(x) + Double(y)); } + tlfloat_quad_ tlfloat_addq(const tlfloat_quad_ x, const tlfloat_quad_ y) { return (tlfloat_quad_)(Quad(x) + Quad(y)); } + tlfloat_octuple_ tlfloat_addo(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return (tlfloat_octuple_)(Octuple(x) + Octuple(y)); } + + float tlfloat_subf(const float x, const float y) { return (float)(Float(x) - Float(y)); } + double tlfloat_sub(const double x, const double y) { return (double)(Double(x) - Double(y)); } + tlfloat_quad_ tlfloat_subq(const tlfloat_quad_ x, const tlfloat_quad_ y) { return (tlfloat_quad_)(Quad(x) - Quad(y)); } + tlfloat_octuple_ tlfloat_subo(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return (tlfloat_octuple_)(Octuple(x) - Octuple(y)); } + + float tlfloat_mulf(const float x, const float y) { return (float)(Float(x) * Float(y)); } + double tlfloat_mul(const double x, const double y) { return (double)(Double(x) * Double(y)); } + tlfloat_quad_ tlfloat_mulq(const tlfloat_quad_ x, const tlfloat_quad_ y) { return (tlfloat_quad_)(Quad(x) * Quad(y)); } + tlfloat_octuple_ tlfloat_mulo(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return (tlfloat_octuple_)(Octuple(x) * Octuple(y)); } + + float tlfloat_divf(const float x, const float y) { return (float)(Float(x) / Float(y)); } + double tlfloat_div(const double x, const double y) { return (double)(Double(x) / Double(y)); } + tlfloat_quad_ tlfloat_divq(const tlfloat_quad_ x, const tlfloat_quad_ y) { return (tlfloat_quad_)(Quad(x) / Quad(y)); } + tlfloat_octuple_ tlfloat_divo(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return (tlfloat_octuple_)(Octuple(x) / Octuple(y)); } + + float tlfloat_fmaf(const float x, const float y, const float z) { return (float)fma(Float(x), Float(y), Float(z)); } + double tlfloat_fma(const double x, const double y, const double z) { return (double)fma(Double(x), Double(y), Double(z)); } + tlfloat_quad_ tlfloat_fmaq(const tlfloat_quad_ x, const tlfloat_quad_ y, const tlfloat_quad_ z) { return (tlfloat_quad_)fma(Quad(x), Quad(y), Quad(z)); } + tlfloat_octuple_ tlfloat_fmao(const tlfloat_octuple_ x, const tlfloat_octuple_ y, const tlfloat_octuple_ z) { return (tlfloat_octuple_)fma(Octuple(x), Octuple(y), Octuple(z)); } + + float tlfloat_sqrtf(const float x) { return (float)sqrt(Float(x)); } + double tlfloat_sqrt(const double x) { return (double)sqrt(Double(x)); } + tlfloat_quad_ tlfloat_sqrtq(const tlfloat_quad_ x) { return (tlfloat_quad_)sqrt(Quad(x)); } + tlfloat_octuple_ tlfloat_sqrto(const tlfloat_octuple_ x) { return (tlfloat_octuple_)sqrt(Octuple(x)); } + + // + + float tlfloat_negf(const float x) { return (float)-Float(x); } + double tlfloat_neg(const double x) { return (double)-Double(x); } + tlfloat_quad_ tlfloat_negq(const tlfloat_quad_ x) { return (tlfloat_quad_)-Quad(x); } + tlfloat_octuple_ tlfloat_nego(const tlfloat_octuple_ x) { return (tlfloat_octuple_)-Octuple(x); } + + float tlfloat_fabsf(const float x) { return (float)fabs(Float(x)); } + double tlfloat_fabs(const double x) { return (double)fabs(Double(x)); } + tlfloat_quad_ tlfloat_fabsq(const tlfloat_quad_ x) { return (tlfloat_quad_)fabs(Quad(x)); } + tlfloat_octuple_ tlfloat_fabso(const tlfloat_octuple_ x) { return (tlfloat_octuple_)fabs(Octuple(x)); } + + float tlfloat_copysignf(const float x, const float y) { return (float)copysign(Float(x), Float(y)); } + double tlfloat_copysign(const double x, const double y) { return (double)copysign(Double(x), Double(y)); } + tlfloat_quad_ tlfloat_copysignq(const tlfloat_quad_ x, const tlfloat_quad_ y) { return (tlfloat_quad_)copysign(Quad(x), Quad(y)); } + tlfloat_octuple_ tlfloat_copysigno(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return (tlfloat_octuple_)copysign(Octuple(x), Octuple(y)); } + + float tlfloat_fmaxf(const float x, const float y) { return (float)fmax(Float(x), Float(y)); } + double tlfloat_fmax(const double x, const double y) { return (double)fmax(Double(x), Double(y)); } + tlfloat_quad_ tlfloat_fmaxq(const tlfloat_quad_ x, const tlfloat_quad_ y) { return (tlfloat_quad_)fmax(Quad(x), Quad(y)); } + tlfloat_octuple_ tlfloat_fmaxo(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return (tlfloat_octuple_)fmax(Octuple(x), Octuple(y)); } + + float tlfloat_fminf(const float x, const float y) { return (float)fmin(Float(x), Float(y)); } + double tlfloat_fmin(const double x, const double y) { return (double)fmin(Double(x), Double(y)); } + tlfloat_quad_ tlfloat_fminq(const tlfloat_quad_ x, const tlfloat_quad_ y) { return (tlfloat_quad_)fmin(Quad(x), Quad(y)); } + tlfloat_octuple_ tlfloat_fmino(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return (tlfloat_octuple_)fmin(Octuple(x), Octuple(y)); } + + float tlfloat_fdimf(const float x, const float y) { return (float)fdim(Float(x), Float(y)); } + double tlfloat_fdim(const double x, const double y) { return (double)fdim(Double(x), Double(y)); } + tlfloat_quad_ tlfloat_fdimq(const tlfloat_quad_ x, const tlfloat_quad_ y) { return (tlfloat_quad_)fdim(Quad(x), Quad(y)); } + tlfloat_octuple_ tlfloat_fdimo(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return (tlfloat_octuple_)fdim(Octuple(x), Octuple(y)); } + + float tlfloat_ldexpf(const float x, const int y) { return (float)ldexp(Float(x), y); } + double tlfloat_ldexp(const double x, const int y) { return (double)ldexp(Double(x), y); } + tlfloat_quad_ tlfloat_ldexpq(const tlfloat_quad_ x, const int y) { return (tlfloat_quad_)ldexp(Quad(x), y); } + tlfloat_octuple_ tlfloat_ldexpo(const tlfloat_octuple_ x, const int y) { return (tlfloat_octuple_)ldexp(Octuple(x), y); } + + float tlfloat_frexpf(const float x, int *y) { return (float)frexp(Float(x), y); } + double tlfloat_frexp(const double x, int *y) { return (double)frexp(Double(x), y); } + tlfloat_quad_ tlfloat_frexpq(const tlfloat_quad_ x, int *y) { return (tlfloat_quad_)frexp(Quad(x), y); } + tlfloat_octuple_ tlfloat_frexpo(const tlfloat_octuple_ x, int *y) { return (tlfloat_octuple_)frexp(Octuple(x), y); } + + float tlfloat_modff(const float x, float *y) { + Float z; + float r = (float)modf(Float(x), &z); + *y = (float)z; + return r; + } + double tlfloat_modf(const double x, double *y) { + Double z; + double r = (double)modf(Double(x), &z); + *y = (double)z; + return r; + } + tlfloat_quad_ tlfloat_modfq(const tlfloat_quad_ x, tlfloat_quad_ *y) { + Quad z; + tlfloat_quad_ r = (tlfloat_quad_)modf(Quad(x), &z); + *y = (tlfloat_quad_)z; + return r; + } + tlfloat_octuple_ tlfloat_modfo(const tlfloat_octuple_ x, tlfloat_octuple_ *y) { + Octuple z; + tlfloat_octuple_ r = (tlfloat_octuple_)modf(Octuple(x), &z); + *y = (tlfloat_octuple_)z; + return r; + } + + float tlfloat_nextafterf(const float x, const float y) { return (float)nextafter(Float(x), Float(y)); } + double tlfloat_nextafter(const double x, const double y) { return (double)nextafter(Double(x), Double(y)); } + tlfloat_quad_ tlfloat_nextafterq(const tlfloat_quad_ x, const tlfloat_quad_ y) { return (tlfloat_quad_)nextafter(Quad(x), Quad(y)); } + tlfloat_octuple_ tlfloat_nextaftero(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return (tlfloat_octuple_)nextafter(Octuple(x), Octuple(y)); } + + int tlfloat_ilogbf(const float x) { return ilogb(Float(x)); } + int tlfloat_ilogb(const double x) { return ilogb(Double(x)); } + int tlfloat_ilogbq(const tlfloat_quad_ x) { return ilogb(Quad(x)); } + int tlfloat_ilogbo(const tlfloat_octuple_ x) { return ilogb(Octuple(x)); } + + int tlfloat_isnanf(const float x) { return isnan(Float(x)); } + int tlfloat_isnan(const double x) { return isnan(Double(x)); } + int tlfloat_isnanq(const tlfloat_quad_ x) { return isnan(Quad(x)); } + int tlfloat_isnano(const tlfloat_octuple_ x) { return isnan(Octuple(x)); } + + int tlfloat_isinff(const float x) { return isinf(Float(x)); } + int tlfloat_isinf(const double x) { return isinf(Double(x)); } + int tlfloat_isinfq(const tlfloat_quad_ x) { return isinf(Quad(x)); } + int tlfloat_isinfo(const tlfloat_octuple_ x) { return isinf(Octuple(x)); } + + int tlfloat_finitef(const float x) { return finite(Float(x)); } + int tlfloat_finite(const double x) { return finite(Double(x)); } + int tlfloat_finiteq(const tlfloat_quad_ x) { return finite(Quad(x)); } + int tlfloat_finiteo(const tlfloat_octuple_ x) { return finite(Octuple(x)); } + + int tlfloat_fpclassifyf(const float x) { return fpclassify(Float(x)); } + int tlfloat_fpclassify(const double x) { return fpclassify(Double(x)); } + int tlfloat_fpclassifyq(const tlfloat_quad_ x) { return fpclassify(Quad(x)); } + int tlfloat_fpclassifyo(const tlfloat_octuple_ x) { return fpclassify(Octuple(x)); } + + int tlfloat_signbitf(const float x) { return signbit(Float(x)); } + int tlfloat_signbit(const double x) { return signbit(Double(x)); } + int tlfloat_signbitq(const tlfloat_quad_ x) { return signbit(Quad(x)); } + int tlfloat_signbito(const tlfloat_octuple_ x) { return signbit(Octuple(x)); } + + // + + float tlfloat_hypotf(const float x, const float y) { return (float)hypot(Float(x), Float(y)); } + double tlfloat_hypot(const double x, const double y) { return (double)hypot(Double(x), Double(y)); } + tlfloat_quad_ tlfloat_hypotq(const tlfloat_quad_ x, const tlfloat_quad_ y) { return (tlfloat_quad_)hypot(Quad(x), Quad(y)); } + tlfloat_octuple_ tlfloat_hypoto(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return (tlfloat_octuple_)hypot(Octuple(x), Octuple(y)); } + + float tlfloat_truncf(const float x) { return (float)trunc(Float(x)); } + double tlfloat_trunc(const double x) { return (double)trunc(Double(x)); } + tlfloat_quad_ tlfloat_truncq(const tlfloat_quad_ x) { return (tlfloat_quad_)trunc(Quad(x)); } + tlfloat_octuple_ tlfloat_trunco(const tlfloat_octuple_ x) { return (tlfloat_octuple_)trunc(Octuple(x)); } + + float tlfloat_floorf(const float x) { return (float)floor(Float(x)); } + double tlfloat_floor(const double x) { return (double)floor(Double(x)); } + tlfloat_quad_ tlfloat_floorq(const tlfloat_quad_ x) { return (tlfloat_quad_)floor(Quad(x)); } + tlfloat_octuple_ tlfloat_flooro(const tlfloat_octuple_ x) { return (tlfloat_octuple_)floor(Octuple(x)); } + + float tlfloat_ceilf(const float x) { return (float)ceil(Float(x)); } + double tlfloat_ceil(const double x) { return (double)ceil(Double(x)); } + tlfloat_quad_ tlfloat_ceilq(const tlfloat_quad_ x) { return (tlfloat_quad_)ceil(Quad(x)); } + tlfloat_octuple_ tlfloat_ceilo(const tlfloat_octuple_ x) { return (tlfloat_octuple_)ceil(Octuple(x)); } + + float tlfloat_roundf(const float x) { return (float)round(Float(x)); } + double tlfloat_round(const double x) { return (double)round(Double(x)); } + tlfloat_quad_ tlfloat_roundq(const tlfloat_quad_ x) { return (tlfloat_quad_)round(Quad(x)); } + tlfloat_octuple_ tlfloat_roundo(const tlfloat_octuple_ x) { return (tlfloat_octuple_)round(Octuple(x)); } + + float tlfloat_rintf(const float x) { return (float)rint(Float(x)); } + double tlfloat_rint(const double x) { return (double)rint(Double(x)); } + tlfloat_quad_ tlfloat_rintq(const tlfloat_quad_ x) { return (tlfloat_quad_)rint(Quad(x)); } + tlfloat_octuple_ tlfloat_rinto(const tlfloat_octuple_ x) { return (tlfloat_octuple_)rint(Octuple(x)); } +} diff --git a/validation/extern/tlfloat/src/tlfloat/erfgamma.cpp b/validation/extern/tlfloat/src/tlfloat/erfgamma.cpp new file mode 100644 index 0000000..cf27450 --- /dev/null +++ b/validation/extern/tlfloat/src/tlfloat/erfgamma.cpp @@ -0,0 +1,40 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#include "suppress.hpp" + +#define TLFLOAT_NO_LIBSTDCXX +#include "tlfloat/tlmath.hpp" + +#include "tlfloat/tlfloat.h" + +using namespace tlfloat; + +extern "C" { + float tlfloat_erff(const float a) { return (float)erf(Float(a)); } + double tlfloat_erf(const double a) { return (double)erf(Double(a)); } + tlfloat_quad_ tlfloat_erfq(const tlfloat_quad_ a) { return (tlfloat_quad_)erf(Quad(a)); } + tlfloat_octuple_ tlfloat_erfo(const tlfloat_octuple_ a) { return (tlfloat_octuple_)erf(Octuple(a)); } + + float tlfloat_erfcf(const float a) { return (float)erfc(Float(a)); } + double tlfloat_erfc(const double a) { return (double)erfc(Double(a)); } + tlfloat_quad_ tlfloat_erfcq(const tlfloat_quad_ a) { return (tlfloat_quad_)erfc(Quad(a)); } + tlfloat_octuple_ tlfloat_erfco(const tlfloat_octuple_ a) { return (tlfloat_octuple_)erfc(Octuple(a)); } + + float tlfloat_tgammaf(const float a) { return (float)tgamma(Float(a)); } + double tlfloat_tgamma(const double a) { return (double)tgamma(Double(a)); } + tlfloat_quad_ tlfloat_tgammaq(const tlfloat_quad_ a) { return (tlfloat_quad_)tgamma(Quad(a)); } + tlfloat_octuple_ tlfloat_tgammao(const tlfloat_octuple_ a) { return (tlfloat_octuple_)tgamma(Octuple(a)); } + + float tlfloat_lgammaf(const float a) { return (float)lgamma(Float(a)); } + double tlfloat_lgamma(const double a) { return (double)lgamma(Double(a)); } + tlfloat_quad_ tlfloat_lgammaq(const tlfloat_quad_ a) { return (tlfloat_quad_)lgamma(Quad(a)); } + tlfloat_octuple_ tlfloat_lgammao(const tlfloat_octuple_ a) { return (tlfloat_octuple_)lgamma(Octuple(a)); } +} diff --git a/validation/extern/tlfloat/src/tlfloat/hyp.cpp b/validation/extern/tlfloat/src/tlfloat/hyp.cpp new file mode 100644 index 0000000..a651bbe --- /dev/null +++ b/validation/extern/tlfloat/src/tlfloat/hyp.cpp @@ -0,0 +1,50 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#include "suppress.hpp" + +#define TLFLOAT_NO_LIBSTDCXX +#include "tlfloat/tlmath.hpp" + +#include "tlfloat/tlfloat.h" + +using namespace tlfloat; + +extern "C" { + float tlfloat_sinhf(const float x) { return (float)sinh(Float(x)); } + double tlfloat_sinh(const double x) { return (double)sinh(Double(x)); } + tlfloat_quad_ tlfloat_sinhq(const tlfloat_quad_ x) { return (tlfloat_quad_)sinh(Quad(x)); } + tlfloat_octuple_ tlfloat_sinho(const tlfloat_octuple_ x) { return (tlfloat_octuple_)sinh(Octuple(x)); } + + float tlfloat_coshf(const float x) { return (float)cosh(Float(x)); } + double tlfloat_cosh(const double x) { return (double)cosh(Double(x)); } + tlfloat_quad_ tlfloat_coshq(const tlfloat_quad_ x) { return (tlfloat_quad_)cosh(Quad(x)); } + tlfloat_octuple_ tlfloat_cosho(const tlfloat_octuple_ x) { return (tlfloat_octuple_)cosh(Octuple(x)); } + + float tlfloat_tanhf(const float x) { return (float)tanh(Float(x)); } + double tlfloat_tanh(const double x) { return (double)tanh(Double(x)); } + tlfloat_quad_ tlfloat_tanhq(const tlfloat_quad_ x) { return (tlfloat_quad_)tanh(Quad(x)); } + tlfloat_octuple_ tlfloat_tanho(const tlfloat_octuple_ x) { return (tlfloat_octuple_)tanh(Octuple(x)); } + + float tlfloat_asinhf(const float x) { return (float)asinh(Float(x)); } + double tlfloat_asinh(const double x) { return (double)asinh(Double(x)); } + tlfloat_quad_ tlfloat_asinhq(const tlfloat_quad_ x) { return (tlfloat_quad_)asinh(Quad(x)); } + tlfloat_octuple_ tlfloat_asinho(const tlfloat_octuple_ x) { return (tlfloat_octuple_)asinh(Octuple(x)); } + + float tlfloat_acoshf(const float x) { return (float)acosh(Float(x)); } + double tlfloat_acosh(const double x) { return (double)acosh(Double(x)); } + tlfloat_quad_ tlfloat_acoshq(const tlfloat_quad_ x) { return (tlfloat_quad_)acosh(Quad(x)); } + tlfloat_octuple_ tlfloat_acosho(const tlfloat_octuple_ x) { return (tlfloat_octuple_)acosh(Octuple(x)); } + + float tlfloat_atanhf(const float x) { return (float)atanh(Float(x)); } + double tlfloat_atanh(const double x) { return (double)atanh(Double(x)); } + tlfloat_quad_ tlfloat_atanhq(const tlfloat_quad_ x) { return (tlfloat_quad_)atanh(Quad(x)); } + tlfloat_octuple_ tlfloat_atanho(const tlfloat_octuple_ x) { return (tlfloat_octuple_)atanh(Octuple(x)); } +} diff --git a/validation/extern/tlfloat/src/tlfloat/invtrig.cpp b/validation/extern/tlfloat/src/tlfloat/invtrig.cpp new file mode 100644 index 0000000..ed28a71 --- /dev/null +++ b/validation/extern/tlfloat/src/tlfloat/invtrig.cpp @@ -0,0 +1,40 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#include "suppress.hpp" + +#define TLFLOAT_NO_LIBSTDCXX +#include "tlfloat/tlmath.hpp" + +#include "tlfloat/tlfloat.h" + +using namespace tlfloat; + +extern "C" { + float tlfloat_asinf(const float x) { return (float)asin(Float(x)); } + double tlfloat_asin(const double x) { return (double)asin(Double(x)); } + tlfloat_quad_ tlfloat_asinq(const tlfloat_quad_ x) { return (tlfloat_quad_)asin(Quad(x)); } + tlfloat_octuple_ tlfloat_asino(const tlfloat_octuple_ x) { return (tlfloat_octuple_)asin(Octuple(x)); } + + float tlfloat_acosf(const float x) { return (float)acos(Float(x)); } + double tlfloat_acos(const double x) { return (double)acos(Double(x)); } + tlfloat_quad_ tlfloat_acosq(const tlfloat_quad_ x) { return (tlfloat_quad_)acos(Quad(x)); } + tlfloat_octuple_ tlfloat_acoso(const tlfloat_octuple_ x) { return (tlfloat_octuple_)acos(Octuple(x)); } + + float tlfloat_atanf(const float x) { return (float)atan(Float(x)); } + double tlfloat_atan(const double x) { return (double)atan(Double(x)); } + tlfloat_quad_ tlfloat_atanq(const tlfloat_quad_ x) { return (tlfloat_quad_)atan(Quad(x)); } + tlfloat_octuple_ tlfloat_atano(const tlfloat_octuple_ x) { return (tlfloat_octuple_)atan(Octuple(x)); } + + float tlfloat_atan2f(const float y, const float x) { return (float)atan2(Float(y), Float(x)); } + double tlfloat_atan2(const double y, const double x) { return (double)atan2(Double(y), Double(x)); } + tlfloat_quad_ tlfloat_atan2q(const tlfloat_quad_ y, const tlfloat_quad_ x) { return (tlfloat_quad_)atan2(Quad(y), Quad(x)); } + tlfloat_octuple_ tlfloat_atan2o(const tlfloat_octuple_ y, const tlfloat_octuple_ x) { return (tlfloat_octuple_)atan2(Octuple(y), Octuple(x)); } +} diff --git a/validation/extern/tlfloat/src/tlfloat/logexp.cpp b/validation/extern/tlfloat/src/tlfloat/logexp.cpp new file mode 100644 index 0000000..8a15b5f --- /dev/null +++ b/validation/extern/tlfloat/src/tlfloat/logexp.cpp @@ -0,0 +1,65 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#include "suppress.hpp" + +#define TLFLOAT_NO_LIBSTDCXX +#include "tlfloat/tlmath.hpp" + +#include "tlfloat/tlfloat.h" + +using namespace tlfloat; + +extern "C" { + float tlfloat_expf(const float a) { return (float)exp(Float(a)); } + double tlfloat_exp(const double a) { return (double)exp(Double(a)); } + tlfloat_quad_ tlfloat_expq(const tlfloat_quad_ a) { return (tlfloat_quad_)exp(Quad(a)); } + tlfloat_octuple_ tlfloat_expo(const tlfloat_octuple_ a) { return (tlfloat_octuple_)exp(Octuple(a)); } + + float tlfloat_expm1f(const float a) { return (float)expm1(Float(a)); } + double tlfloat_expm1(const double a) { return (double)expm1(Double(a)); } + tlfloat_quad_ tlfloat_expm1q(const tlfloat_quad_ a) { return (tlfloat_quad_)expm1(Quad(a)); } + tlfloat_octuple_ tlfloat_expm1o(const tlfloat_octuple_ a) { return (tlfloat_octuple_)expm1(Octuple(a)); } + + float tlfloat_exp2f(const float a) { return (float)exp2(Float(a)); } + double tlfloat_exp2(const double a) { return (double)exp2(Double(a)); } + tlfloat_quad_ tlfloat_exp2q(const tlfloat_quad_ a) { return (tlfloat_quad_)exp2(Quad(a)); } + tlfloat_octuple_ tlfloat_exp2o(const tlfloat_octuple_ a) { return (tlfloat_octuple_)exp2(Octuple(a)); } + + float tlfloat_exp10f(const float a) { return (float)exp10(Float(a)); } + double tlfloat_exp10(const double a) { return (double)exp10(Double(a)); } + tlfloat_quad_ tlfloat_exp10q(const tlfloat_quad_ a) { return (tlfloat_quad_)exp10(Quad(a)); } + tlfloat_octuple_ tlfloat_exp10o(const tlfloat_octuple_ a) { return (tlfloat_octuple_)exp10(Octuple(a)); } + + float tlfloat_logf(const float a) { return (float)log(Float(a)); } + double tlfloat_log(const double a) { return (double)log(Double(a)); } + tlfloat_quad_ tlfloat_logq(const tlfloat_quad_ a) { return (tlfloat_quad_)log(Quad(a)); } + tlfloat_octuple_ tlfloat_logo(const tlfloat_octuple_ a) { return (tlfloat_octuple_)log(Octuple(a)); } + + float tlfloat_log1pf(const float a) { return (float)log1p(Float(a)); } + double tlfloat_log1p(const double a) { return (double)log1p(Double(a)); } + tlfloat_quad_ tlfloat_log1pq(const tlfloat_quad_ a) { return (tlfloat_quad_)log1p(Quad(a)); } + tlfloat_octuple_ tlfloat_log1po(const tlfloat_octuple_ a) { return (tlfloat_octuple_)log1p(Octuple(a)); } + + float tlfloat_log2f(const float a) { return (float)log2(Float(a)); } + double tlfloat_log2(const double a) { return (double)log2(Double(a)); } + tlfloat_quad_ tlfloat_log2q(const tlfloat_quad_ a) { return (tlfloat_quad_)log2(Quad(a)); } + tlfloat_octuple_ tlfloat_log2o(const tlfloat_octuple_ a) { return (tlfloat_octuple_)log2(Octuple(a)); } + + float tlfloat_log10f(const float a) { return (float)log10(Float(a)); } + double tlfloat_log10(const double a) { return (double)log10(Double(a)); } + tlfloat_quad_ tlfloat_log10q(const tlfloat_quad_ a) { return (tlfloat_quad_)log10(Quad(a)); } + tlfloat_octuple_ tlfloat_log10o(const tlfloat_octuple_ a) { return (tlfloat_octuple_)log10(Octuple(a)); } + + float tlfloat_powf(const float x, const float y) { return (float)pow(Float(x), Float(y)); } + double tlfloat_pow(const double x, const double y) { return (double)pow(Double(x), Double(y)); } + tlfloat_quad_ tlfloat_powq(const tlfloat_quad_ x, const tlfloat_quad_ y) { return (tlfloat_quad_)pow(Quad(x), Quad(y)); } + tlfloat_octuple_ tlfloat_powo(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return (tlfloat_octuple_)pow(Octuple(x), Octuple(y)); } +} diff --git a/validation/extern/tlfloat/src/tlfloat/misc.cpp b/validation/extern/tlfloat/src/tlfloat/misc.cpp new file mode 100644 index 0000000..726d0cb --- /dev/null +++ b/validation/extern/tlfloat/src/tlfloat/misc.cpp @@ -0,0 +1,212 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#include "suppress.hpp" + +#define TLFLOAT_NO_LIBSTDCXX +#include "tlfloat/tlmath.hpp" + +#include "tlfloat/tlfloat.h" + +using namespace tlfloat; + +extern "C" { + uint64_t tlfloat_version() { + return TLFLOAT_VERSION_MAJOR * 1000000ULL + TLFLOAT_VERSION_MINOR * 1000ULL + TLFLOAT_VERSION_PATCH; + } + + // + + double tlfloat_cast_d_q(const tlfloat_quad_ x) { return (double)Double(Quad(x)); } + double tlfloat_cast_d_o(const tlfloat_octuple_ x) { return (double)Double(Octuple(x)); } + + tlfloat_quad_ tlfloat_cast_q_d_(const double x) { return (tlfloat_quad_)Quad(Double(x)); } + tlfloat_quad_ tlfloat_cast_q_o (const tlfloat_octuple_ x) { return (tlfloat_quad_)Quad(Octuple(x)); } + + tlfloat_octuple_ tlfloat_cast_o_d_(const double x) { return (tlfloat_octuple_)Octuple(Double(x)); } + tlfloat_octuple_ tlfloat_cast_o_q (const tlfloat_quad_ x) { return (tlfloat_octuple_)Octuple(Quad(x)); } + + int64_t tlfloat_cast_i64_q(const tlfloat_quad_ x) { return (int64_t)Quad(x); } + tlfloat_quad_ tlfloat_cast_q_i64_(const int64_t x) { return (tlfloat_quad_)Quad(x); } + + int64_t tlfloat_cast_i64_o(const tlfloat_octuple_ x) { return (int64_t)Octuple(x); } + tlfloat_octuple_ tlfloat_cast_o_i64_(const int64_t x) { return (tlfloat_octuple_)Octuple(x); } + + uint64_t tlfloat_cast_u64_q(const tlfloat_quad_ x) { return (uint64_t)Quad(x); } + tlfloat_quad_ tlfloat_cast_q_u64_(const uint64_t x) { return (tlfloat_quad_)Quad(x); } + + uint64_t tlfloat_cast_u64_o(const tlfloat_octuple_ x) { return (uint64_t)Octuple(x); } + tlfloat_octuple_ tlfloat_cast_o_u64_(const uint64_t x) { return (tlfloat_octuple_)Octuple(x); } + + // + + int tlfloat_eq_q_q(const tlfloat_quad_ x, const tlfloat_quad_ y) { return Quad(x) == Quad(y); } + int tlfloat_ne_q_q(const tlfloat_quad_ x, const tlfloat_quad_ y) { return Quad(x) != Quad(y); } + int tlfloat_lt_q_q(const tlfloat_quad_ x, const tlfloat_quad_ y) { return Quad(x) < Quad(y); } + int tlfloat_le_q_q(const tlfloat_quad_ x, const tlfloat_quad_ y) { return Quad(x) <= Quad(y); } + int tlfloat_gt_q_q(const tlfloat_quad_ x, const tlfloat_quad_ y) { return Quad(x) > Quad(y); } + int tlfloat_ge_q_q(const tlfloat_quad_ x, const tlfloat_quad_ y) { return Quad(x) >= Quad(y); } + + int tlfloat_eq_o_o(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return Octuple(x) == Octuple(y); } + int tlfloat_ne_o_o(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return Octuple(x) != Octuple(y); } + int tlfloat_lt_o_o(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return Octuple(x) < Octuple(y); } + int tlfloat_le_o_o(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return Octuple(x) <= Octuple(y); } + int tlfloat_gt_o_o(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return Octuple(x) > Octuple(y); } + int tlfloat_ge_o_o(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return Octuple(x) >= Octuple(y); } + + // + + tlfloat_int128_t_ tlfloat_cast_i128_i64_(const int64_t x) { return std::bit_cast(BigInt<7>(x)); } + int64_t tlfloat_cast_i64_i128(const tlfloat_int128_t_ x) { return (int64_t)std::bit_cast>(x); } + + tlfloat_uint128_t_ tlfloat_cast_u128_u64_(const uint64_t x) { return std::bit_cast(BigUInt<7>(x)); } + uint64_t tlfloat_cast_u64_u128(const tlfloat_uint128_t_ x) { return (uint64_t)std::bit_cast>(x); } + + tlfloat_int128_t_ tlfloat_cast_i128_d_(const double x) { return std::bit_cast(BigInt<7>(x)); } + double tlfloat_cast_d_i128(const tlfloat_int128_t_ x) { return (double)std::bit_cast>(x); } + + tlfloat_uint128_t_ tlfloat_cast_u128_d_(const double x) { return std::bit_cast(BigUInt<7>(x)); } + double tlfloat_cast_d_u128(const tlfloat_uint128_t_ x) { return (double)std::bit_cast>(x); } + + tlfloat_int128_t_ tlfloat_cast_i128_q(const tlfloat_quad_ x) { return std::bit_cast(BigInt<7>((Quad)x)); } + tlfloat_quad_ tlfloat_cast_q_i128(const tlfloat_int128_t_ x) { return (tlfloat_quad_)(Quad)std::bit_cast>(x); } + + tlfloat_uint128_t_ tlfloat_cast_u128_q(const tlfloat_quad_ x) { return std::bit_cast(BigUInt<7>((Quad)x)); } + tlfloat_quad_ tlfloat_cast_q_u128(const tlfloat_uint128_t_ x) { return (tlfloat_quad_)(Quad)std::bit_cast>(x); } + + tlfloat_int128_t_ tlfloat_cast_i128_o(const tlfloat_octuple_ x) { return std::bit_cast(BigInt<7>((Octuple)x)); } + tlfloat_octuple_ tlfloat_cast_o_i128(const tlfloat_int128_t_ x) { return (tlfloat_octuple_)(Octuple)std::bit_cast>(x); } + + tlfloat_uint128_t_ tlfloat_cast_u128_o(const tlfloat_octuple_ x) { return std::bit_cast(BigUInt<7>((Octuple)x)); } + tlfloat_octuple_ tlfloat_cast_o_u128(const tlfloat_uint128_t_ x) { return (tlfloat_octuple_)(Octuple)std::bit_cast>(x); } + + int tlfloat_eq_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y) { return std::bit_cast>(x) == std::bit_cast>(y); } + int tlfloat_ne_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y) { return std::bit_cast>(x) != std::bit_cast>(y); } + int tlfloat_lt_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y) { return std::bit_cast>(x) < std::bit_cast>(y); } + int tlfloat_le_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y) { return std::bit_cast>(x) <= std::bit_cast>(y); } + int tlfloat_gt_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y) { return std::bit_cast>(x) > std::bit_cast>(y); } + int tlfloat_ge_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y) { return std::bit_cast>(x) >= std::bit_cast>(y); } + + tlfloat_int128_t_ tlfloat_add_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y) { + return std::bit_cast(std::bit_cast>(x) + std::bit_cast>(y)); + } + tlfloat_int128_t_ tlfloat_sub_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y) { + return std::bit_cast(std::bit_cast>(x) - std::bit_cast>(y)); + } + tlfloat_int128_t_ tlfloat_mul_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y) { + return std::bit_cast(std::bit_cast>(x) * std::bit_cast>(y)); + } + tlfloat_int128_t_ tlfloat_div_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y) { + return std::bit_cast(std::bit_cast>(x) / std::bit_cast>(y)); + } + tlfloat_int128_t_ tlfloat_mod_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y) { + return std::bit_cast(std::bit_cast>(x) % std::bit_cast>(y)); + } + tlfloat_int128_t_ tlfloat_and_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y) { + return std::bit_cast(std::bit_cast>(x) & std::bit_cast>(y)); + } + tlfloat_int128_t_ tlfloat_or_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y) { + return std::bit_cast(std::bit_cast>(x) | std::bit_cast>(y)); + } + tlfloat_int128_t_ tlfloat_xor_i128_i128(const tlfloat_int128_t_ x, const tlfloat_int128_t_ y) { + return std::bit_cast(std::bit_cast>(x) ^ std::bit_cast>(y)); + } + tlfloat_int128_t_ tlfloat_not_i128(const tlfloat_int128_t_ x) { + return std::bit_cast(~std::bit_cast>(x)); + } + tlfloat_int128_t_ tlfloat_shl_i128_i(const tlfloat_int128_t_ x, const int y) { + return std::bit_cast(std::bit_cast>(x) << y); + } + tlfloat_int128_t_ tlfloat_shr_i128_i(const tlfloat_int128_t_ x, const int y) { + return std::bit_cast(std::bit_cast>(x) >> y); + } + tlfloat_int128_t_ tlfloat_neg_i128(const tlfloat_int128_t_ x) { + return std::bit_cast(-std::bit_cast>(x)); + } + + int tlfloat_eq_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y) { return std::bit_cast>(x) == std::bit_cast>(y); } + int tlfloat_ne_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y) { return std::bit_cast>(x) != std::bit_cast>(y); } + int tlfloat_lt_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y) { return std::bit_cast>(x) < std::bit_cast>(y); } + int tlfloat_le_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y) { return std::bit_cast>(x) <= std::bit_cast>(y); } + int tlfloat_gt_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y) { return std::bit_cast>(x) > std::bit_cast>(y); } + int tlfloat_ge_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y) { return std::bit_cast>(x) >= std::bit_cast>(y); } + + tlfloat_uint128_t_ tlfloat_add_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y) { + return std::bit_cast(std::bit_cast>(x) + std::bit_cast>(y)); + } + tlfloat_uint128_t_ tlfloat_sub_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y) { + return std::bit_cast(std::bit_cast>(x) - std::bit_cast>(y)); + } + tlfloat_uint128_t_ tlfloat_mul_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y) { + return std::bit_cast(std::bit_cast>(x) * std::bit_cast>(y)); + } + tlfloat_uint128_t_ tlfloat_div_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y) { + return std::bit_cast(std::bit_cast>(x) / std::bit_cast>(y)); + } + tlfloat_uint128_t_ tlfloat_mod_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y) { + return std::bit_cast(std::bit_cast>(x) % std::bit_cast>(y)); + } + tlfloat_uint128_t_ tlfloat_and_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y) { + return std::bit_cast(std::bit_cast>(x) & std::bit_cast>(y)); + } + tlfloat_uint128_t_ tlfloat_or_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y) { + return std::bit_cast(std::bit_cast>(x) | std::bit_cast>(y)); + } + tlfloat_uint128_t_ tlfloat_xor_u128_u128(const tlfloat_uint128_t_ x, const tlfloat_uint128_t_ y) { + return std::bit_cast(std::bit_cast>(x) ^ std::bit_cast>(y)); + } + tlfloat_uint128_t_ tlfloat_not_u128(const tlfloat_uint128_t_ x) { + return std::bit_cast(~std::bit_cast>(x)); + } + tlfloat_uint128_t_ tlfloat_shl_u128_i(const tlfloat_uint128_t_ x, const int y) { + return std::bit_cast(std::bit_cast>(x) << y); + } + tlfloat_uint128_t_ tlfloat_shr_u128_i(const tlfloat_uint128_t_ x, const int y) { + return std::bit_cast(std::bit_cast>(x) >> y); + } + + // + + float tlfloat_cbrtf(const float a) { return (float)cbrt(Float(a)); } + double tlfloat_cbrt(const double a) { return (double)cbrt(Double(a)); } + tlfloat_quad_ tlfloat_cbrtq(const tlfloat_quad_ a) { return (tlfloat_quad_)cbrt(Quad(a)); } + tlfloat_octuple_ tlfloat_cbrto(const tlfloat_octuple_ a) { return (tlfloat_octuple_)cbrt(Octuple(a)); } + + float tlfloat_fmodf(const float x, const float y) { return (float)fmod(Float(x), Float(y)); } + double tlfloat_fmod(const double x, const double y) { return (double)fmod(Double(x), Double(y)); } + tlfloat_quad_ tlfloat_fmodq(const tlfloat_quad_ x, const tlfloat_quad_ y) { return (tlfloat_quad_)fmod(Quad(x), Quad(y)); } + tlfloat_octuple_ tlfloat_fmodo(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return (tlfloat_octuple_)fmod(Octuple(x), Octuple(y)); } + + float tlfloat_remainderf(const float x, const float y) { return (float)remainder(Float(x), Float(y)); } + double tlfloat_remainder(const double x, const double y) { return (double)remainder(Double(x), Double(y)); } + tlfloat_quad_ tlfloat_remainderq(const tlfloat_quad_ x, const tlfloat_quad_ y) { return (tlfloat_quad_)remainder(Quad(x), Quad(y)); } + tlfloat_octuple_ tlfloat_remaindero(const tlfloat_octuple_ x, const tlfloat_octuple_ y) { return (tlfloat_octuple_)remainder(Octuple(x), Octuple(y)); } + + float tlfloat_remquof(const float x, const float y, int *quo) { + auto p = remquo(Float(x), Float(y)); + if (quo) *quo = p.second & 0xffffffff; + return (float)p.first; + } + double tlfloat_remquo(const double x, const double y, int *quo) { + auto p = remquo(Double(x), Double(y)); + if (quo) *quo = p.second & 0xffffffff; + return (double)p.first; + } + tlfloat_quad_ tlfloat_remquoq(const tlfloat_quad_ x, const tlfloat_quad_ y, int *quo) { + auto p = remquo(Quad(x), Quad(y)); + if (quo) *quo = p.second & 0xffffffff; + return (tlfloat_quad_)p.first; + } + tlfloat_octuple_ tlfloat_remquoo(const tlfloat_octuple_ x, const tlfloat_octuple_ y, int *quo) { + auto p = remquo(Octuple(x), Octuple(y)); + if (quo) *quo = p.second & 0xffffffff; + return (tlfloat_octuple_)p.first; + } +} diff --git a/validation/extern/tlfloat/src/tlfloat/printf.cpp b/validation/extern/tlfloat/src/tlfloat/printf.cpp new file mode 100644 index 0000000..f29e59c --- /dev/null +++ b/validation/extern/tlfloat/src/tlfloat/printf.cpp @@ -0,0 +1,545 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include + +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 14) +#include +#endif + +#include "suppress.hpp" + +#define TLFLOAT_NO_LIBSTDCXX +#include "tlfloat/tlmath.hpp" + +#include "tlfloat/tlfloat.h" + +using namespace tlfloat; + +namespace { + static int xvprintf(size_t (*consumer)(const char *ptr, size_t size, void *arg), void *arg, const char *fmt, va_list ap) { + const int xbufsize = 5000; + char *xbuf = (char *)calloc(xbufsize+10, 1); + int outlen = 0; + bool errorflag = false; + + while(*fmt != '\0' && !errorflag) { + // Copy the format string until a '%' is read + + if (*fmt != '%') { + do { + outlen += (*consumer)(fmt++, 1, arg); + } while(*fmt != '%' && *fmt != '\0'); + + if (*fmt == '\0') break; + } + + const char *subfmtstart = fmt; + + if ((*++fmt) == '\0') { + errorflag = true; + outlen += (*consumer)("%", 1, arg); + break; + } + + if (*fmt == '%') { + outlen += (*consumer)("%", 1, arg); + fmt++; + continue; + } + + // Read flags + + bool flag_left = false, flag_sign = false, flag_blank = false; + bool flag_alt = false, flag_zero = false, flag_upper = false, done = false; + do { + switch(*fmt) { + case '-': flag_left = true; break; + case '+': flag_sign = true; break; + case ' ': flag_blank = true; break; + case '#': flag_alt = true; break; + case '0': flag_zero = true; break; + default: done = true; break; + } + } while(!done && (*++fmt) != 0); + + // Read width + + int width = 0; + bool readWidthFromArg = false; + + if (*fmt == '*') { + readWidthFromArg = true; + fmt++; + } else { + while(*fmt >= '0' && *fmt <= '9') { + width = width*10 + *fmt - '0'; + fmt++; + } + } + + // Read precision + + int precision = -1; + bool readPrecFromArg = false; + + if (*fmt == '.') { + precision = 0; + fmt++; + if (*fmt == '*') { + readPrecFromArg = true; + fmt++; + } else { + while(*fmt >= '0' && *fmt <= '9') { + precision = precision*10 + *fmt - '0'; + fmt++; + } + } + } + + // Read size prefix + + bool subfmt_processed = false; + int size_prefix = 0, nbits = 0; + + if (*fmt == '_') { + char *eptr = NULL; + nbits = strtol(fmt+1, &eptr, 10); + if (eptr != fmt+1) { + fmt = eptr; + } else { + nbits = 0; + errorflag = true; + } + } else { + int pl = 0; + if (*fmt == 'h' || *fmt == 'l' || *fmt == 'j' || *fmt == 'z' || *fmt == 't' || *fmt == 'L' || *fmt == 'Q' || *fmt == 'P' || *fmt == 'O') { + size_prefix = *fmt; + pl = 1; + } + if ((*fmt == 'h' && *(fmt+1) == 'h') || (*fmt == 'l' && *(fmt+1) == 'l')) { + size_prefix = *fmt + 256 * *(fmt+1); + pl = 2; + } + fmt += pl; + } + + // Call type-specific function + + va_list ap2; + va_copy(ap2, ap); + + if (readWidthFromArg) width = va_arg(ap, int); + if (width < 0) { + width = -width; + flag_left = true; + } + + if (readPrecFromArg) precision = va_arg(ap, int); + + switch(*fmt) { + case 'E': case 'F': case 'G': case 'A': + flag_upper = true; + // fall through + case 'e': case 'f': case 'g': case 'a': + { + if (nbits == 0) { + if (size_prefix == 'Q') { + Quad value = std::bit_cast(va_arg(ap, tlfloat_quad_)); + typedef decltype(decltype(value.getUnpacked())::xUnpackedFloat()) xUnpacked_t; + int ret = snprint(xbuf, xbufsize, value.getUnpacked().cast((xUnpacked_t *)0), *fmt, width, precision, + flag_sign, flag_blank, flag_alt, flag_left, flag_zero, flag_upper); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + subfmt_processed = true; + } else if (size_prefix == 'P') { + Quad value = std::bit_cast(*(tlfloat_quad_ *)va_arg(ap, tlfloat_quad_ *)); + typedef decltype(decltype(value.getUnpacked())::xUnpackedFloat()) xUnpacked_t; + int ret = snprint(xbuf, xbufsize, value.getUnpacked().cast((xUnpacked_t *)0), *fmt, width, precision, + flag_sign, flag_blank, flag_alt, flag_left, flag_zero, flag_upper); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + subfmt_processed = true; + } else if (size_prefix == 'O') { + Octuple value = std::bit_cast(va_arg(ap, tlfloat_octuple_)); + typedef decltype(decltype(value.getUnpacked())::xUnpackedFloat()) xUnpacked_t; + int ret = snprint(xbuf, xbufsize, value.getUnpacked().cast((xUnpacked_t *)0), *fmt, width, precision, + flag_sign, flag_blank, flag_alt, flag_left, flag_zero, flag_upper); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + subfmt_processed = true; + } else if (size_prefix == 0) { // double and long double + va_arg(ap, double); + } else if (size_prefix == 'L') { + va_arg(ap, long double); + } else errorflag = 1; + } else { + switch(nbits) { + case 16: { + typedef struct { uint16_t e; } arg_t; + Half value = std::bit_cast(va_arg(ap, arg_t)); + typedef decltype(decltype(value.getUnpacked())::xUnpackedFloat()) xUnpacked_t; + int ret = snprint(xbuf, xbufsize, value.getUnpacked().cast((xUnpacked_t *)0), *fmt, width, precision, + flag_sign, flag_blank, flag_alt, flag_left, flag_zero, flag_upper); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + subfmt_processed = true; + break; + } + case 32: { + typedef struct { uint32_t e; } arg_t; + Float value = std::bit_cast(va_arg(ap, arg_t)); + typedef decltype(decltype(value.getUnpacked())::xUnpackedFloat()) xUnpacked_t; + int ret = snprint(xbuf, xbufsize, value.getUnpacked().cast((xUnpacked_t *)0), *fmt, width, precision, + flag_sign, flag_blank, flag_alt, flag_left, flag_zero, flag_upper); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + subfmt_processed = true; + break; + } + case 64: { + typedef struct { uint64_t e[1]; } arg_t; + Double value = std::bit_cast(va_arg(ap, arg_t)); + typedef decltype(decltype(value.getUnpacked())::xUnpackedFloat()) xUnpacked_t; + int ret = snprint(xbuf, xbufsize, value.getUnpacked().cast((xUnpacked_t *)0), *fmt, width, precision, + flag_sign, flag_blank, flag_alt, flag_left, flag_zero, flag_upper); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + subfmt_processed = true; + break; + } + case 128: { + typedef struct { uint64_t e[2]; } arg_t; + Quad value = std::bit_cast(va_arg(ap, arg_t)); + typedef decltype(decltype(value.getUnpacked())::xUnpackedFloat()) xUnpacked_t; + int ret = snprint(xbuf, xbufsize, value.getUnpacked().cast((xUnpacked_t *)0), *fmt, width, precision, + flag_sign, flag_blank, flag_alt, flag_left, flag_zero, flag_upper); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + subfmt_processed = true; + break; + } + case 256: { + typedef struct { uint64_t e[4]; } arg_t; + Octuple value = std::bit_cast(va_arg(ap, arg_t)); + typedef decltype(decltype(value.getUnpacked())::xUnpackedFloat()) xUnpacked_t; + int ret = snprint(xbuf, xbufsize, value.getUnpacked().cast((xUnpacked_t *)0), *fmt, width, precision, + flag_sign, flag_blank, flag_alt, flag_left, flag_zero, flag_upper); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + subfmt_processed = true; + break; + } + default: errorflag = 1; break; + } + } + } + break; + + case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': + { + bool flag_unsigned = (*fmt == 'u') || (*fmt == 'o') || (*fmt == 'x') || (*fmt == 'X'); + bool flag_ptr = false; + if (*fmt == 'X') flag_upper = true; + + char const *prefix = ""; + int base = 10; + if (*fmt == 'o') { base = 8; prefix = "0"; } + if (*fmt == 'x' || *fmt == 'X') { base = 16; prefix = flag_upper ? "0X" : "0x"; } + + if (nbits == 0) { + if (size_prefix == 'Q') { +#ifdef TLFLOAT_COMPILER_SUPPORTS_INT128 + BigInt<7> value = std::bit_cast>(va_arg(ap, __int128_t)); +#else + BigInt<7> value = std::bit_cast>(va_arg(ap, tlfloat_int128_t_)); +#endif + int ret = BigInt<7>::snprint(xbuf, xbufsize, value, tolower(*fmt), width, precision, base, 1 << 7, + flag_sign, flag_blank, flag_alt, flag_left, flag_zero, flag_upper, flag_unsigned, flag_ptr, prefix); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + subfmt_processed = true; + } else { + switch(size_prefix) { + case 0: case 'h': case 'h' + 256*'h': va_arg(ap, int); break; + case 'l': va_arg(ap, long int); break; + case 'j': va_arg(ap, intmax_t); break; + case 'z': va_arg(ap, size_t); break; + case 't': va_arg(ap, std::ptrdiff_t); break; + case 'l' + 256*'l': va_arg(ap, long long int); break; + default: errorflag = 1; break; + } + } + } else { + switch(nbits) { + case 8: case 16: case 32: case 64: { + int64_t value = nbits == 64 ? va_arg(ap, int64_t) : va_arg(ap, int); + int ret = BigInt<7>::snprint(xbuf, xbufsize, BigInt<7>(value), tolower(*fmt), width, precision, base, nbits, + flag_sign, flag_blank, flag_alt, flag_left, flag_zero, flag_upper, flag_unsigned, flag_ptr, prefix); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + subfmt_processed = true; + break; + } + case 128: { + typedef struct { uint64_t e[2]; } arg_t; + BigInt<7> value = std::bit_cast>(va_arg(ap, arg_t)); + int ret = BigInt<7>::snprint(xbuf, xbufsize, value, tolower(*fmt), width, precision, base, nbits, + flag_sign, flag_blank, flag_alt, flag_left, flag_zero, flag_upper, flag_unsigned, flag_ptr, prefix); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + subfmt_processed = true; + break; + } + case 256: { + typedef struct { uint64_t e[4]; } arg_t; + BigInt<8> value = std::bit_cast>(va_arg(ap, arg_t)); + int ret = BigInt<8>::snprint(xbuf, xbufsize, value, tolower(*fmt), width, precision, base, nbits, + flag_sign, flag_blank, flag_alt, flag_left, flag_zero, flag_upper, flag_unsigned, flag_ptr, prefix); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + subfmt_processed = true; + break; + } + case 512: { + typedef struct { uint64_t e[8]; } arg_t; + BigInt<9> value = std::bit_cast>(va_arg(ap, arg_t)); + int ret = BigInt<9>::snprint(xbuf, xbufsize, value, tolower(*fmt), width, precision, base, nbits, + flag_sign, flag_blank, flag_alt, flag_left, flag_zero, flag_upper, flag_unsigned, flag_ptr, prefix); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + subfmt_processed = true; + break; + } + case 1024: { + typedef struct { uint64_t e[16]; } arg_t; + BigInt<10> value = std::bit_cast>(va_arg(ap, arg_t)); + int ret = BigInt<10>::snprint(xbuf, xbufsize, value, tolower(*fmt), width, precision, base, nbits, + flag_sign, flag_blank, flag_alt, flag_left, flag_zero, flag_upper, flag_unsigned, flag_ptr, prefix); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + subfmt_processed = true; + break; + } + default: errorflag = 1; break; + } + } + } + break; + + case 'c': + if (size_prefix == 0) { + va_arg(ap, int); + } else +#if 0 + if (size_prefix == 'l') { + va_arg(ap, wint_t); // wint_t is not defined + } else +#endif + errorflag = 1; + break; + + case 's': + if (size_prefix == 0 || size_prefix == 'l') { + va_arg(ap, void *); + } else errorflag = 1; + break; + + case 'p': case 'n': + { + if ((*fmt == 'p' && size_prefix != 0) || size_prefix == 'L') { errorflag = 1; break; } + va_arg(ap, void *); + } + break; + + default: + errorflag = 1; + } + + if (!subfmt_processed) { + char *subfmt = (char *)calloc(fmt - subfmtstart + 2, 1); + memcpy(subfmt, subfmtstart, fmt - subfmtstart + 1); + subfmt[fmt - subfmtstart + 1] = 0; + int ret = ::vsnprintf(xbuf, xbufsize, subfmt, ap2); + free(subfmt); + if (ret < 0) { errorflag = 1; break; } + outlen += (*consumer)(xbuf, strlen(xbuf), arg); + } + + fmt++; + } + + free(xbuf); + + return errorflag ? -1 : outlen; + } + + // + + struct stream_consumer_t { FILE *fp; }; + + static size_t stream_consumer(const char *ptr, size_t size, void *varg) { + stream_consumer_t *arg = (stream_consumer_t *)varg; + return fwrite(ptr, size, 1, arg->fp); + } + + struct buf_consumer_t { + char *buf; + size_t pos, size; + }; + + static size_t buf_consumer(const char *ptr, size_t size, void *varg) { + buf_consumer_t *arg = (buf_consumer_t *)varg; + + size_t p = 0; + while(p < size) { + if (arg->pos >= arg->size - 1) break; + arg->buf[arg->pos++] = ptr[p++]; + } + + arg->buf[arg->pos] = '\0'; + + return size; + } +} // namespace + +extern "C" { + int tlfloat_vfprintf(FILE *fp, const char *fmt, va_list ap) { + stream_consumer_t arg = { fp }; + return xvprintf(stream_consumer, &arg, fmt, ap); + } + + int tlfloat_vprintf(const char *fmt, va_list ap) { + return tlfloat_vfprintf(stdout, fmt, ap); + } + + int tlfloat_fprintf(FILE *fp, const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + int ret = tlfloat_vfprintf(fp, fmt, ap); + va_end(ap); + return ret; + } + + int tlfloat_printf(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + int ret = tlfloat_vfprintf(stdout, fmt, ap); + va_end(ap); + return ret; + } + + int tlfloat_vsnprintf(char *str, size_t size, const char *fmt, va_list ap) { + buf_consumer_t arg = { str, 0, size }; + return xvprintf(buf_consumer, &arg, fmt, ap); + } + + int tlfloat_snprintf(char *str, size_t size, const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + int ret = tlfloat_vsnprintf(str, size, fmt, ap); + va_end(ap); + return ret; + } + + // + + float tlfloat_strtof(const char *nptr, const char **endptr) { return (float)Float(nptr, endptr); } + double tlfloat_strtod(const char *nptr, const char **endptr) { return (double)Double(nptr, endptr); } + tlfloat_quad_ tlfloat_strtoq_(const char *nptr, const char **endptr) { return (tlfloat_quad_)Quad(nptr, endptr); } + tlfloat_octuple_ tlfloat_strtoo_(const char *nptr, const char **endptr) { return (tlfloat_octuple_)Octuple(nptr, endptr); } + + // + + tlfloat_int128_t_ tlfloat_strtoi128(const char *nptr, const char **endptr, const int base) { + BigInt<7> b = BigInt<7>(nptr, endptr, base); + tlfloat_int128_t_ r; + memcpy(&r, &b, sizeof(r)); + return r; + } + + tlfloat_uint128_t_ tlfloat_strtou128(const char *nptr, const char **endptr, const int base) { + BigUInt<7> b = BigUInt<7>(nptr, endptr, base); + tlfloat_uint128_t_ r; + memcpy(&r, &b, sizeof(r)); + return r; + } + +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 14) + static int pa_quad = -1; + static int printf_Qmodifier = -1, printf_Pmodifier = -1; + + static void tlfloat_quad_va(void *ptr, va_list *ap) { + *(tlfloat_quad *)ptr = va_arg(*ap, tlfloat_quad_); + } + + static int printf_arginfo(const struct printf_info *info, size_t n, int *argtypes, int *s) { + if (info->user & printf_Qmodifier) { + argtypes[0] = pa_quad; + return 1; + } else if (info->user & printf_Pmodifier) { + argtypes[0] = PA_FLAG_PTR | pa_quad; + return 1; + } + return -1; + } + + static int printf_output(FILE *fp, const struct printf_info *info, const void *const *args) { + if (!(info->user & printf_Qmodifier || info->user & printf_Pmodifier)) return -2; + + const int XBUFSIZE = 1000; + char *xbuf = (char *)malloc(XBUFSIZE+10); + int len = -1; + + len = snprint(xbuf, XBUFSIZE, Quad(**(const tlfloat_quad **)args[0]).getUnpacked(), + tolower(info->spec), info->width, info->prec, + info->showsign, info->space, info->alt, info->left, false, isupper(info->spec)); + + size_t wlen = fwrite(xbuf, 1, len, fp); + + free(xbuf); + + return (int)wlen; + } +#endif // #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 14) +} + +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 14) +extern "C" { + int tlfloat_registerPrintfHook() { + if ((printf_Qmodifier = register_printf_modifier(L"Q")) == -1) return -1; + if ((printf_Pmodifier = register_printf_modifier(L"P")) == -1) return -1; + + pa_quad = register_printf_type(tlfloat_quad_va); + if (pa_quad == -1) return -2; + + if (register_printf_specifier('a', printf_output, printf_arginfo)) return -3; + if (register_printf_specifier('e', printf_output, printf_arginfo)) return -4; + if (register_printf_specifier('f', printf_output, printf_arginfo)) return -5; + if (register_printf_specifier('g', printf_output, printf_arginfo)) return -6; + if (register_printf_specifier('A', printf_output, printf_arginfo)) return -7; + if (register_printf_specifier('E', printf_output, printf_arginfo)) return -8; + if (register_printf_specifier('F', printf_output, printf_arginfo)) return -9; + if (register_printf_specifier('G', printf_output, printf_arginfo)) return -10; + + return 0; + } + + void tlfloat_unregisterPrintfHook() { + register_printf_specifier('a', NULL, NULL); + register_printf_specifier('e', NULL, NULL); + register_printf_specifier('f', NULL, NULL); + register_printf_specifier('g', NULL, NULL); + register_printf_specifier('A', NULL, NULL); + register_printf_specifier('E', NULL, NULL); + register_printf_specifier('F', NULL, NULL); + register_printf_specifier('G', NULL, NULL); + } +} +#endif // #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 14) diff --git a/validation/extern/tlfloat/src/tlfloat/tlfloat.pc.in b/validation/extern/tlfloat/src/tlfloat/tlfloat.pc.in new file mode 100644 index 0000000..e3192ed --- /dev/null +++ b/validation/extern/tlfloat/src/tlfloat/tlfloat.pc.in @@ -0,0 +1,9 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: TLFloat +Description: C++ template library for floating point operations +Version: @TLFLOAT_VERSION@ +Cflags: -I${includedir} +Libs: -L${libdir} -ltlfloat diff --git a/validation/extern/tlfloat/src/tlfloat/tlfloatConfig.cmake.in b/validation/extern/tlfloat/src/tlfloat/tlfloatConfig.cmake.in new file mode 100644 index 0000000..ac7d32b --- /dev/null +++ b/validation/extern/tlfloat/src/tlfloat/tlfloatConfig.cmake.in @@ -0,0 +1,3 @@ +@PACKAGE_INIT@ +set(TLFLOAT_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include") +set(TLFLOAT_LIB_DIR "@CMAKE_INSTALL_PREFIX@/lib") diff --git a/validation/extern/tlfloat/src/tlfloat/trig.cpp b/validation/extern/tlfloat/src/tlfloat/trig.cpp new file mode 100644 index 0000000..af73b1a --- /dev/null +++ b/validation/extern/tlfloat/src/tlfloat/trig.cpp @@ -0,0 +1,76 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#include "suppress.hpp" + +#define TLFLOAT_NO_LIBSTDCXX +#include "tlfloat/tlmath.hpp" + +#include "tlfloat/tlfloat.h" + +using namespace tlfloat; + +extern "C" { + float tlfloat_sinf(const float x) { return (float)sin(Float(x)); } + double tlfloat_sin(const double x) { return (double)sin(Double(x)); } + tlfloat_quad_ tlfloat_sinq(const tlfloat_quad_ x) { return (tlfloat_quad_)sin(Quad(x)); } + tlfloat_octuple_ tlfloat_sino(const tlfloat_octuple_ x) { return (tlfloat_octuple_)sin(Octuple(x)); } + + float tlfloat_cosf(const float x) { return (float)cos(Float(x)); } + double tlfloat_cos(const double x) { return (double)cos(Double(x)); } + tlfloat_quad_ tlfloat_cosq(const tlfloat_quad_ x) { return (tlfloat_quad_)cos(Quad(x)); } + tlfloat_octuple_ tlfloat_coso(const tlfloat_octuple_ x) { return (tlfloat_octuple_)cos(Octuple(x)); } + + float tlfloat_tanf(const float x) { return (float)tan(Float(x)); } + double tlfloat_tan(const double x) { return (double)tan(Double(x)); } + tlfloat_quad_ tlfloat_tanq(const tlfloat_quad_ x) { return (tlfloat_quad_)tan(Quad(x)); } + tlfloat_octuple_ tlfloat_tano(const tlfloat_octuple_ x) { return (tlfloat_octuple_)tan(Octuple(x)); } + + float tlfloat_sinpif(const float x) { return (float)sinpi(Float(x)); } + double tlfloat_sinpi(const double x) { return (double)sinpi(Double(x)); } + tlfloat_quad_ tlfloat_sinpiq(const tlfloat_quad_ x) { return (tlfloat_quad_)sinpi(Quad(x)); } + tlfloat_octuple_ tlfloat_sinpio(const tlfloat_octuple_ x) { return (tlfloat_octuple_)sinpi(Octuple(x)); } + + float tlfloat_cospif(const float x) { return (float)cospi(Float(x)); } + double tlfloat_cospi(const double x) { return (double)cospi(Double(x)); } + tlfloat_quad_ tlfloat_cospiq(const tlfloat_quad_ x) { return (tlfloat_quad_)cospi(Quad(x)); } + tlfloat_octuple_ tlfloat_cospio(const tlfloat_octuple_ x) { return (tlfloat_octuple_)cospi(Octuple(x)); } + + float tlfloat_tanpif(const float x) { return (float)tanpi(Float(x)); } + double tlfloat_tanpi(const double x) { return (double)tanpi(Double(x)); } + tlfloat_quad_ tlfloat_tanpiq(const tlfloat_quad_ x) { return (tlfloat_quad_)tanpi(Quad(x)); } + tlfloat_octuple_ tlfloat_tanpio(const tlfloat_octuple_ x) { return (tlfloat_octuple_)tanpi(Octuple(x)); } + + void tlfloat_sincosf(const float x, float *s, float *c) { + auto a = sincos(Float(x)); *s = (float)a.first; *c = (float)a.second; + } + void tlfloat_sincos(const double x, double *s, double *c) { + auto a = sincos(Double(x)); *s = (double)a.first; *c = (double)a.second; + } + void tlfloat_sincosq(const tlfloat_quad_ x, tlfloat_quad_ *s, tlfloat_quad_ *c) { + auto a = sincos(Quad(x)); *s = (tlfloat_quad_)a.first; *c = (tlfloat_quad_)a.second; + } + void tlfloat_sincoso(const tlfloat_octuple_ x, tlfloat_octuple_ *s, tlfloat_octuple_ *c) { + auto a = sincos(Octuple(x)); *s = (tlfloat_octuple_)a.first; *c = (tlfloat_octuple_)a.second; + } + + void tlfloat_sincospif(const float x, float *s, float *c) { + auto a = sincospi(Float(x)); *s = (float)a.first; *c = (float)a.second; + } + void tlfloat_sincospi(const double x, double *s, double *c) { + auto a = sincospi(Double(x)); *s = (double)a.first; *c = (double)a.second; + } + void tlfloat_sincospiq(const tlfloat_quad_ x, tlfloat_quad_ *s, tlfloat_quad_ *c) { + auto a = sincospi(Quad(x)); *s = (tlfloat_quad_)a.first; *c = (tlfloat_quad_)a.second; + } + void tlfloat_sincospio(const tlfloat_octuple_ x, tlfloat_octuple_ *s, tlfloat_octuple_ *c) { + auto a = sincospi(Octuple(x)); *s = (tlfloat_octuple_)a.first; *c = (tlfloat_octuple_)a.second; + } +} diff --git a/validation/extern/tlfloat/src/util/CMakeLists.txt b/validation/extern/tlfloat/src/util/CMakeLists.txt new file mode 100644 index 0000000..3d7f0c0 --- /dev/null +++ b/validation/extern/tlfloat/src/util/CMakeLists.txt @@ -0,0 +1,49 @@ +if (BUILD_UTILS) + if (LIB_MPFR) + add_executable(mkrpitab mkrpitab.cpp) + target_link_libraries(mkrpitab ${LIB_MPFR}) + endif() + + add_executable(genmathcoef genmathcoef.cpp) +endif() + +add_library(donothing OBJECT donothing.cpp) +set_property(TARGET donothing PROPERTY INTERPROCEDURAL_OPTIMIZATION FALSE) + +if (BUILD_BENCH) + add_executable(bench_tlfloat_quad bench.cpp) + target_compile_options(bench_tlfloat_quad PRIVATE ${INLINE_CXX_FLAGS}) + target_compile_definitions(bench_tlfloat_quad PRIVATE TLFLOAT_ENABLE_INLINING=1 CONFIG_TLFLOAT_QUAD=1) + target_link_libraries(bench_tlfloat_quad donothing) + + add_executable(bench_tlfloat_octuple bench.cpp) + target_compile_options(bench_tlfloat_octuple PRIVATE ${INLINE_CXX_FLAGS}) + target_compile_definitions(bench_tlfloat_octuple PRIVATE TLFLOAT_ENABLE_INLINING=1 CONFIG_TLFLOAT_OCTUPLE=1) + target_link_libraries(bench_tlfloat_octuple donothing) + + if (NOT TLFLOAT_COMPILER_SUPPORTS_FLOAT128) + add_executable(bench_tlfloat_quad_capi bench.cpp) + target_compile_options(bench_tlfloat_quad_capi PRIVATE ${INLINE_CXX_FLAGS}) + target_compile_definitions(bench_tlfloat_quad_capi PRIVATE TLFLOAT_ENABLE_INLINING=1 CONFIG_TLFLOAT_QUAD_CAPI=1) + target_link_libraries(bench_tlfloat_quad_capi tlfloat donothing) + endif() + + add_executable(bench_tlfloat_octuple_capi bench.cpp) + target_compile_options(bench_tlfloat_octuple_capi PRIVATE ${INLINE_CXX_FLAGS}) + target_compile_definitions(bench_tlfloat_octuple_capi PRIVATE TLFLOAT_ENABLE_INLINING=1 CONFIG_TLFLOAT_OCTUPLE_CAPI=1) + target_link_libraries(bench_tlfloat_octuple_capi tlfloat donothing) + + if (TLFLOAT_ENABLE_LIBQUADMATH) + add_executable(bench_libquadmath bench.cpp) + target_link_libraries(bench_libquadmath quadmath donothing) + target_compile_options(bench_libquadmath PRIVATE ${INLINE_CXX_FLAGS}) + target_compile_definitions(bench_libquadmath PRIVATE TLFLOAT_ENABLE_INLINING=1 CONFIG_LIBQUADMATH=1) + endif() + + if (TLFLOAT_LONGDOUBLE_IS_FLOAT128) + add_executable(bench_longdouble bench.cpp) + target_compile_options(bench_longdouble PRIVATE ${INLINE_CXX_FLAGS}) + target_compile_definitions(bench_longdouble PRIVATE TLFLOAT_ENABLE_INLINING=1 CONFIG_LONGDOUBLE=1) + target_link_libraries(bench_longdouble donothing) + endif() +endif() diff --git a/validation/extern/tlfloat/src/util/bench.cpp b/validation/extern/tlfloat/src/util/bench.cpp new file mode 100644 index 0000000..488c930 --- /dev/null +++ b/validation/extern/tlfloat/src/util/bench.cpp @@ -0,0 +1,250 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include +#include + +using namespace std; + +#if defined(CONFIG_TLFLOAT_QUAD) + +#include +#define CONFIG "tlfloat quad" +using namespace tlfloat; +typedef Quad real; + +#define FMA fma +#define SQRT sqrt +#define RINT rint +#define SIN sin +#define ATAN atan +#define EXP exp +#define LOG log +#define POW pow + +#elif defined(CONFIG_TLFLOAT_OCTUPLE) + +#include +#define CONFIG "tlfloat octuple" +using namespace tlfloat; +typedef Octuple real; + +#define FMA fma +#define SQRT sqrt +#define RINT rint +#define SIN sin +#define ATAN atan +#define EXP exp +#define LOG log +#define POW pow + +#elif defined(CONFIG_TLFLOAT_QUAD_CAPI) + +#include +#define CONFIG "tlfloat quad C API" +typedef tlfloat_quad real; + +#define FMA tlfloat_fmaq +#define SQRT tlfloat_sqrtq +#define RINT tlfloat_rintq +#define SIN tlfloat_sinq +#define ATAN tlfloat_atanq +#define EXP tlfloat_expq +#define LOG tlfloat_logq +#define POW tlfloat_powq + +#elif defined(CONFIG_TLFLOAT_OCTUPLE_CAPI) + +#include +#define CONFIG "tlfloat octuple C API" +typedef tlfloat_octuple real; + +#define FMA tlfloat_fmao +#define SQRT tlfloat_sqrto +#define RINT tlfloat_rinto +#define SIN tlfloat_sino +#define ATAN tlfloat_atano +#define EXP tlfloat_expo +#define LOG tlfloat_logo +#define POW tlfloat_powo + +#elif defined(CONFIG_LIBQUADMATH) + +#define CONFIG "Libquadmath" +#include +typedef __float128 real; + +#define FMA fmaq +#define SQRT sqrtq +#define RINT rintq +#define SIN sinq +#define ATAN atanq +#define EXP expq +#define LOG logq +#define POW powq + +#elif defined(CONFIG_LONGDOUBLE) + +#define CONFIG "Native long double" +#include +typedef long double real; + +#define FMA fmal +#define SQRT sqrtl +#define RINT rintl +#define SIN sinl +#define ATAN atanl +#define EXP expl +#define LOG logl +#define POW powl + +#else + +#define CONFIG "Native double" +#include +typedef double real; + +#define FMA fma +#define SQRT sqrt +#define RINT rint +#define SIN sin +#define ATAN atan +#define EXP exp +#define LOG log +#define POW pow +#endif + +const int K = 256; + +struct { + real W[K], X[K], Y[K], Z[K], H[K]; + bool B[K]; +} D; + +static void funcAddSub() { + for(int i=0;i= D.Y[i+1]; + } +} + +static void funcFMA() { + for(int i=0;i + (chrono::system_clock::now() - chrono::system_clock::from_time_t(0)).count(); +} + +void measure(const char* mes, void (*func)(void), int opPerCall, int64_t sec_us) { + int64_t N = 10, t0, t1, t2, t3; + + for(;;) { + t0 = timeus(); + for(int64_t i=0;i 100000) break; + N *= 2; + } + + const int64_t M = N * sec_us / (t1 - t0); + + this_thread::sleep_for(chrono::microseconds(sec_us)); + + t2 = timeus(); + for(int64_t i=0;i= 2) sec_us = int64_t(atof(argv[1]) * 1000000); + + for(int i=0;i +#include +#include + +#include "tlfloat/tlfloat.hpp" + +using namespace std; +using namespace tlfloat; +using namespace tlfloat::detail; + +typedef UnpackedFloat, BigUInt<9>, 0, 254> xoctuple; +typedef UnpackedFloat, BigUInt<10>, 0, 510> xsedecuple; + +template +struct yarray { + T e[N]; + int n() { return N; } +}; + +template +static yarray precomputeFactorial() { + yarray a; + a.e[0] = xsedecuple::castFromInt(1); + for(unsigned i=1;i +static yarray aFactorial = precomputeFactorial(); + +template +static xsedecuple factorial(unsigned n) { return aFactorial.e[n]; } + +template +static xsedecuple binomial(unsigned n, unsigned k) { + return factorial(n)/(factorial(k)*factorial(n-k)); +} + +template +static xsedecuple binomial(const xsedecuple &x, unsigned k) { + xsedecuple d = xsedecuple::castFromInt(1); + for(unsigned i=0;i(k); +} + +template +static yarray precomputeBernoulli() { + yarray a; + a.e[0] = xsedecuple::castFromInt(1); + for(unsigned n=1;n<=N;n++) { + xsedecuple s = xsedecuple::castFromInt(0); + for(unsigned k=0;k(n+1, k) * a.e[k]; + a.e[n] = -s / xsedecuple::castFromInt(n + 1); + } + return a; +} + +template +static xsedecuple bernoulli(unsigned n) { + const yarray pc = precomputeBernoulli(); + return pc.e[n]; +} + +template +static yarray genSinCoef() { + yarray a; + for(unsigned i=0;i(i*2+1); + return a; +} + +template +static yarray genCosCoef() { + yarray a; + for(unsigned i=0;i(i*2+0); + return a; +} + +template +static yarray genTanCoef() { + yarray a; + for(unsigned k=1;k<=N;k++) { + xsedecuple p4 = ldexp_(xsedecuple::castFromInt(1), 2*k); + xsedecuple c = (p4 * (p4 - xsedecuple::castFromInt(1)) * bernoulli(2*k)) / factorial(2*k); + if (!(k & 1)) c = -c; + a.e[k-1] = c; + } + return a; +} + +template +static constexpr yarray genAtanCoef() { + yarray a; + for(unsigned i=0;i +static constexpr yarray genExpCoef() { + yarray a; + for(unsigned i=0;i(i); + return a; +} + +template +static constexpr yarray genLogCoef() { + yarray a; + for(unsigned i=0;i +static constexpr yarray genCbrtCoef() { + yarray a; + for(unsigned i=0;i(xsedecuple::castFromInt(-1) / xsedecuple::castFromInt(3), i); + return a; +} + +int main(int argc, char **argv) { + char buf[1024]; + + if (argc > 1) { + xsedecuple x(argv[1]); + snprint(buf, sizeof(buf), x, 'a', 0, -1); + cout << "\"" << buf << "\", // " << to_double(x) << endl; + x.mant &= ~((BigUInt<9>(1) << 250) - 1); + snprint(buf, sizeof(buf), x, 'a', 0, -1); + cout << "\"" << buf << "\", // " << to_double(x) << endl; + return 0; + } + + cout << "namespace tlfloat {" << endl; + cout << " namespace detail {" << endl; + + { + auto coef = genSinCoef<26>(); + + cout << " static constexpr const char *sinCoefStr[] = {" << endl; + + for(int i=0;i(1) << 250) - 1); + snprint(buf, sizeof(buf), o, 'a', 0, -1); + cout << " \"" << buf << "\", // " << to_double(o) << endl; + } + + cout << " };" << endl; + } + + cout << endl; + + { + auto coef = genCosCoef<26>(); + + cout << " static constexpr const char *cosCoefStr[] = {" << endl; + + for(int i=0;i(1) << 250) - 1); + snprint(buf, sizeof(buf), o, 'a', 0, -1); + cout << " \"" << buf << "\", // " << to_double(o) << endl; + } + + cout << " };" << endl; + } + + cout << endl; + + { + auto coef = genTanCoef<26>(); + + cout << " static constexpr const char *tanCoefStr[] = {" << endl; + + for(int i=0;i(1) << 250) - 1); + snprint(buf, sizeof(buf), o, 'a', 0, -1); + cout << " \"" << buf << "\", // " << to_double(o) << endl; + } + + cout << " };" << endl; + } + + cout << endl; + + { + auto coef = genAtanCoef<22>(); + + cout << " static constexpr const char *atanCoefStr[] = {" << endl; + + for(int i=0;i(1) << 250) - 1); + snprint(buf, sizeof(buf), o, 'a', 0, -1); + cout << " \"" << buf << "\", // " << to_double(o) << endl; + } + + cout << " };" << endl; + } + + cout << endl; + + { + auto coef = genExpCoef<36+1>(); + + cout << " static constexpr const char *expCoefStr[] = {" << endl; + + for(int i=0;i(1) << 250) - 1); + snprint(buf, sizeof(buf), o, 'a', 0, -1); + cout << " \"" << buf << "\", // " << to_double(o) << endl; + } + + cout << " };" << endl; + } + + cout << endl; + + { + auto coef = genLogCoef<33+1>(); + + cout << " static constexpr const char *logCoefStr[] = {" << endl; + + for(int i=0;i(1) << 250) - 1); + snprint(buf, sizeof(buf), o, 'a', 0, -1); + cout << " \"" << buf << "\", // " << to_double(o) << endl; + } + + cout << " };" << endl; + } + + cout << endl; + + { + auto coef = genCbrtCoef<4+1>(); + + cout << " static constexpr const char *cbrtCoefStr[] = {" << endl; + + for(int i=0;i(1) << 250) - 1); + snprint(buf, sizeof(buf), o, 'a', 0, -1); + cout << " \"" << buf << "\", // " << to_double(o) << endl; + } + + cout << " };" << endl; + } + + cout << endl; + + { + cout << " static constexpr const char *gammaCoefStr[] = {" << endl; + + static const int N = 36; + + for(int i=1;i<=N;i++) { + auto n = bernoulli(i*2); + auto d = xsedecuple::castFromInt((2*i) * (2*i-1)); + + auto o = n / d; + o.mant &= ~((BigUInt<9>(1) << 250) - 1); + snprint(buf, sizeof(buf), o, 'a', 0, -1); + cout << " \"" << buf << "\", // " << to_double(o) << endl; + } + + cout << " };" << endl; + } + + cout << " }" << endl; + cout << "}" << endl; +} diff --git a/validation/extern/tlfloat/src/util/mkrpitab.cpp b/validation/extern/tlfloat/src/util/mkrpitab.cpp new file mode 100644 index 0000000..eb317a6 --- /dev/null +++ b/validation/extern/tlfloat/src/util/mkrpitab.cpp @@ -0,0 +1,60 @@ +// See https://github.com/shibatch/tlfloat for our project. +// Copyright Naoki Shibata and contributors. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include + +#define N (1 << 19) + +int main(int argc, char **argv) { + static uint8_t table[N / 8]; + + mpfr_set_default_prec(N); + + mpfr_t pi, m, n, o; + mpfr_inits(pi, m, n, o, NULL); + mpfr_const_pi(pi, GMP_RNDN); + + mpfr_d_div(n, 1.0, pi, GMP_RNDN); + + for(int e=0;e < N / 8;e++) { + mpfr_set(m, n, GMP_RNDN); + + mpfr_set_ui_2exp(o, 1, e * 8, GMP_RNDN); + mpfr_mul(m, m, o, GMP_RNDN); + + mpfr_frac(m, m, GMP_RNDN); + + mpfr_set_ui_2exp(o, 1, 8, GMP_RNDN); + mpfr_mul(m, m, o, GMP_RNDN); + + mpfr_trunc(m, m); + + table[e] = (uint8_t)mpfr_get_d(m, GMP_RNDN); + } + + mpfr_clears(pi, m, n, o, NULL); + + printf("#include \n"); + printf("\n"); + printf("namespace tlfloat {\n"); + printf(" namespace detail {\n"); + printf("#ifndef __CUDA_ARCH__\n"); + printf(" static constexpr uint8_t tlfloat_rpitab[] = {\n"); + printf("#else\n"); + printf(" static __device__ constexpr uint8_t tlfloat_rpitab[] = {\n"); + printf("#endif"); + for(int i=0;i", + "tlquad": "TLFloat (tlquad)", + "tloct": "TLFloat (tloct)", +} +BODY_LIGHTNESS = (29 * 1.1) / 255 + + +def _normalized_body_tint(color: str) -> str: + channels = tuple( + int(color[index:index + 2], 16) / 255 + for index in (1, 3, 5) + ) + hue, _, saturation = colorsys.rgb_to_hls(*channels) + normalized = colorsys.hls_to_rgb(hue, BODY_LIGHTNESS, saturation) + return "#" + "".join(f"{round(channel * 255):02x}" for channel in normalized) + + +def _brighter_tint(color: str, factor: float = 1.1) -> str: + channels = tuple( + int(color[index:index + 2], 16) / 255 + for index in (1, 3, 5) + ) + hue, lightness, saturation = colorsys.rgb_to_hls(*channels) + adjusted = colorsys.hls_to_rgb( + hue, + min(1.0, lightness * factor), + saturation, + ) + return "#" + "".join(f"{round(channel * 255):02x}" for channel in adjusted) + + +_IMPLEMENTATION_TINTS = ( + ("#40354f", "#1d1c1f"), + ("#313d4b", "#1c1d1f"), + ("#3e4232", "#1c1c1b"), + ("#493637", "#1e1c1d"), + ("#314641", "#1b1d1d"), + ("#42364a", "#1e1c1f"), +) +IMPLEMENTATION_TINTS = tuple( + (header, _normalized_body_tint(body)) + for header, body in _IMPLEMENTATION_TINTS +) +FLTX_TINT = ("#244b70", _normalized_body_tint("#202428")) +OPERATION_ROW_FILLS = tuple( + _brighter_tint(color) + for color in ("#171a20", "#14171c") +) + +TABLE_GAP = 8 +COMPACT_TABLE_GAP = 3 +MONOSPACE_CHARACTER_WIDTH = 6 +COMPACT_FONT_ADVANCE_EM = 0.5 +COMPACT_FONT_SIZE_INCREMENT = 1 +COMPACT_EXACT_STROKE_WIDTH = 1.1 +COMPACT_EXACT_SCALE = 0.5625 +COMPACT_REFERENCE_MATCH_FONT_SIZE = 14 +COMPACT_ACCURACY_EXTRA_WIDTH = 2 +CELL_PADDING = 8 +GRID_REGULAR = "#000000" +GRID_STRONG = "#000000" +GROUP_ROW_FILL = "#4e555f" +GROUP_ROW_TEXT = "#ffffff" +EXACT_TEXT = "#4ade80" +COMPACT_EXACT_TEXT = "#6ee7a0" +BENCHMARK_SEPARATOR_TEXT = "#cfd3da" +COMPACT_BENCHMARK_UNIT_TEXT = "#b8bdc5" +COLUMN_SPECS = ( + ("mean", ("mean",), 44), + ("worst", ("worst",), 44), + ("pass", ("pass",), 40), + ("benchmark", ("time · speed vs FLTX",), 40), + ("special", (), 40), + ("signed_zero", (), 24), +) +SUBNORMAL_COLUMN_SPEC = ("subnormal", (), 52) +SUBNORMAL_DOMAIN = "subnormal" +MARGIN = 12 +COMPACT_MARGIN = 0 +TITLE_HEIGHT = 54 +HEADER_HEIGHTS = (24, 28, 32) +COMPACT_HEADER_HEIGHTS = (24, 34, 32) +ROW_HEIGHT = 22 +GROUP_ROW_HEIGHT = 18 +FOOTER_HEIGHT = 34 +FONT_SCALE = 1.2 +COMPACT_FONT_ROOT = ( + Path(__file__).resolve().parents[1] / + "assets" / "fonts" / "ubuntu-mono" +) +COMPACT_FONTS = { + 400: COMPACT_FONT_ROOT / "UbuntuMono-Regular.woff2", + 700: COMPACT_FONT_ROOT / "UbuntuMono-Bold.woff2", +} + + +def _font_css(layout: str) -> str: + if layout != "compact": + return ( + "" + ) + + faces = [] + for weight, path in COMPACT_FONTS.items(): + encoded = base64.b64encode(path.read_bytes()).decode("ascii") + faces.append( + "@font-face {" + "font-family:'Ubuntu Mono';" + f"font-weight:{weight};" + "font-style:normal;" + f"src:url(data:font/woff2;base64,{encoded}) format('woff2');" + "}" + ) + faces.append( + "text { font-family:'Ubuntu Mono', Consolas, monospace; }" + ) + return "" + + +def _estimated_character_width(layout: str, font_size: int) -> float: + if layout == "compact": + rendered_size = font_size * FONT_SCALE + COMPACT_FONT_SIZE_INCREMENT + return rendered_size * COMPACT_FONT_ADVANCE_EM + return MONOSPACE_CHARACTER_WIDTH * FONT_SCALE + + +def _fmt_bits(value: str) -> str: + if not value: + return "-" + number = float(value) + if math.isinf(number): + return "exact" + return f"{number:.1f}" + + +def _fmt_bits_compact(value: str) -> str: + if not value: + return "-" + number = float(value) + if math.isinf(number): + return "=" + return f"{number:.1f}" + + +def _fmt_ns(value: str) -> str: + if not value: + return "-" + number = float(value) + if number >= 1000: + return f"{number:,.0f}" + if number >= 100: + return f"{number:.1f}" + if number >= 1: + return f"{number:.2f}" + return f"{number:.3f}" + + +def _fmt_ns_compact(value: str) -> str: + """Use one fewer decimal place for unitless compact FLTX timings.""" + + number = float(value) + if number >= 1000: + return f"{number:.0f}" + if number >= 100: + return f"{number:.0f}" + if number >= 1: + return f"{number:.1f}" + return f"{number:.2f}" + + +def _fmt_ratio(value: str | float) -> str: + return "-" if not value else f"{float(value):.2f}×" + + +def _speed_vs_fltx( + row: dict[str, str], + implementation: str, +) -> float | None: + if implementation == "fltx" or not row["speed_ratio"]: + return None + time_ratio = float(row["speed_ratio"]) + if time_ratio <= 0: + raise MetricsError("benchmark time ratio must be positive") + return 1.0 / time_ratio + + +def _domain_style( + row: dict[str, str] | None, + body_fill: str = "#33363d", +) -> tuple[str, str, str]: + if row is None or not row["domains_total"]: + return "-", body_fill, "#a5abb5" + passed = int(row["domains_passed"]) + total = int(row["domains_total"]) + margin = float(row["min_margin_bits"]) + text = f"{passed}/{total}" + if passed != total: + return text, body_fill, "#f87171" + if margin < 4: + return text, body_fill, "#fbbf24" + return text, body_fill, "#4ade80" + + +def _special_style( + row: dict[str, str] | None, + body_fill: str = "#33363d", +) -> tuple[str, str, str]: + category = "-" if row is None else row.get("special_support", "-") + if category not in SUPPORT: + raise MetricsError(f"malformed special_support category {category!r}") + return category, body_fill, SUPPORT[category] + + +def _boolean_support_style( + row: dict[str, str] | None, + field: str, + label: str, + body_fill: str = "#33363d", +) -> tuple[str, str, str]: + category = "-" if row is None else row.get(field, "-") + styles = { + "yes": ("✓", "#4ade80"), + "no": ("✗", "#f87171"), + "-": ("-", "#a5abb5"), + } + if category not in styles: + raise MetricsError( + f"malformed {label} support category {category!r}" + ) + text, foreground = styles[category] + return text, body_fill, foreground + + +def _signed_zero_style( + row: dict[str, str] | None, + body_fill: str = "#33363d", +) -> tuple[str, str, str]: + return _boolean_support_style( + row, "signed_zero_support", "signed-zero", body_fill, + ) + + +def _subnormal_style( + row: dict[str, str] | None, + body_fill: str = "#33363d", +) -> tuple[str, str, str]: + return _boolean_support_style( + row, "subnormal_support", "subnormal", body_fill, + ) + + +def _column_specs(consumer_mode: str) -> tuple[tuple[str, tuple[str, ...], int], ...]: + return ( + COLUMN_SPECS + (SUBNORMAL_COLUMN_SPEC,) + if consumer_mode == "fastmath" + else COLUMN_SPECS + ) + + +def _display_row( + dataset: Dataset, + target: Target, + precision: str, + group: str, + operation: str, + implementation: str, + row: dict[str, str] | None, + *, + normal_only: bool, +) -> dict[str, str] | None: + """Return report values while retaining subnormal evidence separately.""" + + if row is None: + return None + display = dict(row) + details = [ + detail + for ( + detail_target, detail_precision, detail_group, + detail_operation, detail_implementation, _, + ), detail in dataset.accuracy.items() + if ( + detail_target, detail_precision, detail_group, + detail_operation, detail_implementation, + ) == (target, precision, group, operation, implementation) + ] + subnormal = [ + detail for detail in details + if detail["domain"] == SUBNORMAL_DOMAIN + ] + if implementation == "fltx" and subnormal: + display["subnormal_support"] = ( + "yes" if all(detail["pass"] == "yes" for detail in subnormal) + else "no" + ) + else: + display["subnormal_support"] = "-" + + primary = [ + detail for detail in details + if detail["domain"] != SUBNORMAL_DOMAIN + ] + if not normal_only or not subnormal or not primary: + return display + + counts = [int(detail["samples"]) for detail in primary] + exact = [math.isinf(float(detail["mean_bits"])) for detail in primary] + means = [float(detail["mean_bits"]) for detail in primary] + total = sum(counts) + nominal_bits = next( + item.nominal_bits + for item in IMPLEMENTATIONS[precision] + if item.id == implementation + ) + pooled = [ + nominal_bits + 32.0 if is_exact else mean + for mean, is_exact in zip(means, exact) + ] + display.update({ + "samples": str(total), + "mean_bits": ( + "inf" if all(exact) + else str(sum(value * count for value, count in zip(pooled, counts)) / total) + ), + "p01_bits": str(min(float(detail["p01_bits"]) for detail in primary)), + "worst_bits": str(min(float(detail["worst_bits"]) for detail in primary)), + "domains_passed": str(sum(detail["pass"] == "yes" for detail in primary)), + "domains_total": str(len(primary)), + "min_margin_bits": str(min(float(detail["margin_bits"]) for detail in primary)), + "accuracy_pass": ( + "yes" if all(detail["pass"] == "yes" for detail in primary) + else "no" + ), + }) + return display + + +def _accuracy_style( + value: str | None, + body_fill: str, + layout: str = "full", +) -> tuple[str, str, str]: + exact = bool(value) and math.isinf(float(value)) + text = ( + "-" + if value is None + else ( + _fmt_bits_compact(value) + if layout == "compact" + else _fmt_bits(value) + ) + ) + exact_text = ( + COMPACT_EXACT_TEXT + if layout == "compact" + else EXACT_TEXT + ) + return text, body_fill, exact_text if exact else "#e7e9ee" + + +def _benchmark_text( + row: dict[str, str] | None, + implementation: str, + layout: str = "full", +) -> str: + if row is None or not row["ns_iter"]: + return "-" + if layout == "compact": + return f"{_fmt_ns_compact(row['ns_iter'])} ns" + timing = f"{_fmt_ns(row['ns_iter'])} ns" + speed_ratio = _speed_vs_fltx(row, implementation) + if speed_ratio is None: + return timing + return f"{timing} · {_fmt_ratio(speed_ratio)}" + + +def _benchmark_style( + row: dict[str, str] | None, + implementation: str, + body_fill: str, + layout: str = "full", +) -> tuple[str, str, str]: + text = _benchmark_text(row, implementation, layout) + if text == "-": + return text, body_fill, "#a5abb5" + return text, body_fill, "#e7e9ee" + + +def _fastest_competitor( + dataset: Dataset, + target: Target, + precision: str, + group: str, + operation: str, +) -> tuple[dict[str, str], float] | None: + candidates = [] + for implementation in dataset.implementations[(target, precision)]: + if implementation == "fltx": + continue + row = dataset.canonical.get( + (target, precision, group, operation, implementation) + ) + if row is None or not row["ns_iter"] or not row["speed_ratio"]: + continue + ratio = float(row["speed_ratio"]) + if ratio <= 0: + raise MetricsError("benchmark time ratio must be positive") + candidates.append((row, ratio)) + return min(candidates, key=lambda candidate: candidate[1]) if candidates else None + + +def _benchmark_spans( + row: dict[str, str] | None, + implementation: str, + *, + fltx_speed_ratio: float | None = None, + layout: str = "full", +) -> tuple[tuple[str, str], ...]: + """Keep the timing neutral while colouring only the relative speed.""" + + text = _benchmark_text(row, implementation, layout) + if text == "-": + return ((text, "#a5abb5"),) + speed_ratio = ( + fltx_speed_ratio + if implementation == "fltx" + else _speed_vs_fltx(row, implementation) + ) + if layout == "compact": + text_color = ( + _ratio_color(speed_ratio) + if speed_ratio is not None + else "#e7e9ee" + ) + if text.endswith(" ns"): + return ( + (text[:-3], text_color), + (" ns", COMPACT_BENCHMARK_UNIT_TEXT), + ) + return (( + text, + text_color, + ),) + if implementation == "fltx" and fltx_speed_ratio is not None: + return ((text, _ratio_color(fltx_speed_ratio)),) + if speed_ratio is None: + return ((text, "#e7e9ee"),) + timing, ratio = text.split(" · ", 1) + return ( + (timing, "#e7e9ee"), + (" · ", BENCHMARK_SEPARATOR_TEXT), + (ratio, _ratio_color(speed_ratio)), + ) + + +def _tooltip( + dataset: Dataset, + target: Target, + precision: str, + group: str, + operation: str, + implementation: str, + row: dict[str, str] | None, +) -> str: + if row is None: + return f"{implementation}: {operation} is unavailable" + lines = [ + row["implementation_label"], + f"API: {row['api']}", + ] + if row["mean_bits"]: + lines.extend(( + f"mean: {_fmt_bits(row['mean_bits'])} bits", + f"p01: {_fmt_bits(row['p01_bits'])} bits", + f"worst: {_fmt_bits(row['worst_bits'])} bits", + f"domains: {row['domains_passed']}/{row['domains_total']}", + f"minimum threshold margin: {_fmt_bits(row['min_margin_bits'])} bits", + f"special values: {row['special_support']}", + f"signed zero: {row.get('signed_zero_support', '-')}", + f"subnormal support: {row.get('subnormal_support', '-')}", + )) + details = sorted( + ( + domain, + detail, + ) + for ( + detail_target, detail_precision, detail_group, + detail_operation, detail_implementation, domain, + ), detail in dataset.accuracy.items() + if ( + detail_target, detail_precision, detail_group, + detail_operation, detail_implementation, + ) == (target, precision, group, operation, implementation) + ) + for domain, detail in details: + fltx = dataset.accuracy.get( + (target, precision, group, operation, "fltx", domain) + ) + required = "-" if fltx is None else fltx["required_worst_bits"] + margin = "-" + if required and detail["worst_bits"]: + margin = _fmt_bits( + str(float(detail["worst_bits"]) - float(required)) + ) + lines.append( + f"{domain}: mean {_fmt_bits(detail['mean_bits'])}, " + f"p01 {_fmt_bits(detail['p01_bits'])}, " + f"worst {_fmt_bits(detail['worst_bits'])}, " + f"required {_fmt_bits(required)}, margin {margin}, " + f"n={detail['samples']}, seed={detail['seed']}" + ) + if row["ns_iter"]: + benchmark = f"benchmark: {_fmt_ns(row['ns_iter'])} ns/iteration" + speed_ratio = _speed_vs_fltx(row, implementation) + if speed_ratio is not None: + benchmark += f", speed vs FLTX {_fmt_ratio(speed_ratio)}" + elif implementation == "fltx": + fastest = _fastest_competitor( + dataset, target, precision, group, operation, + ) + if fastest is None: + benchmark += " (no available competitor)" + else: + competitor, _ = fastest + benchmark += ( + f", speed vs fastest competitor " + f"{competitor['implementation_short']} " + f"({competitor['implementation_label']}): " + f"{competitor['speed_ratio']}×" + ) + else: + benchmark += " (FLTX baseline)" + lines.append(benchmark) + return "\n".join(lines) + + +def _rect( + parts: list[str], + x: int, + y: int, + width: int, + height: int, + fill: str, +) -> None: + parts.append( + f'' + ) + + +def _line( + parts: list[str], + x1: int, + y1: int, + x2: int, + y2: int, + *, + stroke: str = GRID_REGULAR, + stroke_width: int = 1, +) -> None: + parts.append( + f'' + ) + + +def _text( + parts: list[str], + x: float, + y: float, + value: str, + *, + fill: str = "#e7e9ee", + anchor: str = "middle", + weight: str = "normal", + size: int = 11, + font_size_increment: int = 0, +) -> None: + rendered_size = size * FONT_SCALE + font_size_increment + parts.append( + f'' + f'{html.escape(value)}' + ) + + +def _infinity_mark( + parts: list[str], + x: float, + y: float, + *, + stroke: str = COMPACT_EXACT_TEXT, +) -> None: + """Draw a centered, subtly variable-width compact exact marker.""" + + base = ( + f'M {x:g} {y:g} ' + f'C {x - 2.2:g} {y - 2.3:g} {x - 3.7:g} {y - 4.5:g} ' + f'{x - 6.4:g} {y - 4.5:g} ' + f'C {x - 11:g} {y - 4.5:g} {x - 11:g} {y + 4.5:g} ' + f'{x - 6.4:g} {y + 4.5:g} ' + f'C {x - 3.7:g} {y + 4.5:g} {x - 2.2:g} {y + 2.3:g} ' + f'{x:g} {y:g} ' + f'C {x + 2.2:g} {y - 2.3:g} {x + 3.7:g} {y - 4.5:g} ' + f'{x + 6.4:g} {y - 4.5:g} ' + f'C {x + 11:g} {y - 4.5:g} {x + 11:g} {y + 4.5:g} ' + f'{x + 6.4:g} {y + 4.5:g} ' + f'C {x + 3.7:g} {y + 4.5:g} {x + 2.2:g} {y + 2.3:g} ' + f'{x:g} {y:g} Z' + ) + left_lobe = ( + f'M {x - 4:g} {y - 4.3:g} ' + f'C {x - 8:g} {y - 5.6:g} {x - 10.5:g} {y - 3.6:g} ' + f'{x - 10.5:g} {y:g} ' + f'C {x - 10.5:g} {y + 3.6:g} {x - 8:g} {y + 5.6:g} ' + f'{x - 4:g} {y + 4.3:g}' + ) + right_lobe = ( + f'M {x + 4:g} {y - 4.3:g} ' + f'C {x + 8:g} {y - 5.6:g} {x + 10.5:g} {y - 3.6:g} ' + f'{x + 10.5:g} {y:g} ' + f'C {x + 10.5:g} {y + 3.6:g} {x + 8:g} {y + 5.6:g} ' + f'{x + 4:g} {y + 4.3:g}' + ) + descending_crossing = ( + f'M {x - 3.2:g} {y - 3.7:g} ' + f'C {x - 1.8:g} {y - 2.3:g} {x - 0.7:g} {y - 0.8:g} ' + f'{x:g} {y:g} ' + f'C {x + 0.7:g} {y + 0.8:g} {x + 1.8:g} {y + 2.3:g} ' + f'{x + 3.2:g} {y + 3.7:g}' + ) + ascending_crossing = ( + f'M {x - 3.2:g} {y + 3.7:g} ' + f'C {x - 1.8:g} {y + 2.3:g} {x - 0.7:g} {y + 0.8:g} ' + f'{x:g} {y:g} ' + f'C {x + 0.7:g} {y - 0.8:g} {x + 1.8:g} {y - 2.3:g} ' + f'{x + 3.2:g} {y - 3.7:g}' + ) + parts.append( + f'' + f'' + f'' + f'' + f'' + f'' + f'' + ) + + +def _text_spans( + parts: list[str], + x: float, + y: float, + spans: tuple[tuple[str, str], ...], + *, + anchor: str = "middle", + weight: str = "normal", + size: int = 11, + font_size_increment: int = 0, +) -> None: + rendered_size = size * FONT_SCALE + font_size_increment + parts.append( + f'' + + "".join( + f'{html.escape(value)}' + for value, fill in spans + ) + + "" + ) + + +def _text_lines( + parts: list[str], + x: float, + y: int, + height: int, + lines: tuple[str, ...], + *, + fill: str = "#e7e9ee", + weight: str = "normal", + size: int = 9, + line_height: int = 14, + font_size_increment: int = 0, +) -> None: + if not lines: + return + rendered_size = size * FONT_SCALE + font_size_increment + text_block_height = rendered_size + (len(lines) - 1) * line_height + first_baseline = ( + y + (height - text_block_height) / 2 + rendered_size * 0.8 + ) + for index, line in enumerate(lines): + _text( + parts, + x, + first_baseline + index * line_height, + line, + fill=fill, + weight=weight, + size=size, + font_size_increment=font_size_increment, + ) + + +def _implementation_order(dataset: Dataset, target: Target, precision: str) -> tuple[str, ...]: + declared = dataset.implementations[(target, precision)] + return ("fltx",) + tuple(item for item in declared if item != "fltx") + + +def _implementation_tint( + implementation: str, + implementations: tuple[str, ...], +) -> tuple[str, str]: + if implementation == "fltx": + return FLTX_TINT + competitors = tuple(item for item in implementations if item != "fltx") + return IMPLEMENTATION_TINTS[ + competitors.index(implementation) % len(IMPLEMENTATION_TINTS) + ] + + +def _column_header_lines( + key: str, + lines: tuple[str, ...], + layout: str, + implementation: str, +) -> tuple[str, ...]: + if layout == "compact": + return { + "mean": ("avg",), + "worst": ("min",), + "benchmark": ("(ns)",), + }.get(key, lines) + if key == "benchmark" and implementation == "fltx": + return ("time",) + return lines + + +def _column_widths( + dataset: Dataset, + target: Target, + precision: str, + operations: list[tuple[str, str]], + implementation: str, + layout: str = "full", +) -> tuple[int, ...]: + column_specs = _column_specs(dataset.consumer_mode) + visible = {} + for key, lines, _ in column_specs: + visible[key] = list( + _column_header_lines(key, lines, layout, implementation) + ) + bits_formatter = ( + _fmt_bits_compact if layout == "compact" else _fmt_bits + ) + for group, operation in operations: + row = dataset.canonical.get( + (target, precision, group, operation, implementation) + ) + row = _display_row( + dataset, target, precision, group, operation, implementation, row, + normal_only=dataset.consumer_mode == "fastmath", + ) + visible["mean"].append( + "-" if row is None else bits_formatter(row["mean_bits"]) + ) + visible["worst"].append( + "-" if row is None else bits_formatter(row["worst_bits"]) + ) + visible["pass"].append(_domain_style(row)[0]) + visible["benchmark"].append( + _benchmark_text(row, implementation, layout) + ) + visible["special"].append(_special_style(row)[0]) + visible["signed_zero"].append(_signed_zero_style(row)[0]) + if dataset.consumer_mode == "fastmath": + visible["subnormal"].append(_subnormal_style(row)[0]) + + def required_width(lines: tuple[str, ...] | list[str]) -> int: + return ( + math.ceil( + max((len(value) for value in lines), default=0) + * _estimated_character_width(layout, 9) + ) + + CELL_PADDING + ) + + widths = [ + max( + ( + 28 + if layout == "compact" and key in {"mean", "worst"} + else minimum + ), + required_width(visible[key]), + ) + for key, _, minimum in column_specs + ] + + # Second-level headers span one or more leaf columns. Apply their width + # constraints after sizing the leaf content so each retains real padding. + accuracy_required = required_width( + ("bits", "accurate") if layout == "compact" else ("bits accurate",) + ) + accuracy_deficit = max(0, accuracy_required - widths[0] - widths[1]) + widths[0] += (accuracy_deficit + 1) // 2 + widths[1] += accuracy_deficit // 2 + if layout == "compact": + widths[0] += (COMPACT_ACCURACY_EXTRA_WIDTH + 1) // 2 + widths[1] += COMPACT_ACCURACY_EXTRA_WIDTH // 2 + widths[2] = max(widths[2], required_width(("domain",))) + benchmark_group_header = ( + ("bench",) if layout == "compact" else ("performance",) + ) + widths[3] = max(widths[3], required_width(benchmark_group_header)) + widths[4] = max(widths[4], required_width(("Inf/", "NaN"))) + widths[5] = max(widths[5], required_width(("±0",))) + if dataset.consumer_mode == "fastmath": + widths[6] = max(widths[6], required_width(("Subnorm",))) + return tuple(widths) + + +def _operation_width( + operations: list[tuple[str, str]], + layout: str = "full", +) -> int: + font_size = 9 if layout == "compact" else 10 + longest = max( + len("operation"), + *(len(operation) for _, operation in operations), + ) + return ( + math.ceil( + longest * _estimated_character_width(layout, font_size) + ) + + CELL_PADDING + + 4 + ) + + +def _block_x( + index: int, + operation_width: int, + block_widths: tuple[int, ...], + *, + margin: int = MARGIN, + table_gap: int = TABLE_GAP, +) -> int: + return ( + margin + operation_width + table_gap + + sum(width + table_gap for width in block_widths[:index]) + ) + + +def _grouped_operations( + operations: list[tuple[str, str]], +) -> list[tuple[str, list[tuple[str, str]]]]: + grouped: list[tuple[str, list[tuple[str, str]]]] = [] + for group, operation in operations: + report_group = _report_group(group) + if not grouped or grouped[-1][0] != report_group: + grouped.append((report_group, [])) + grouped[-1][1].append((group, operation)) + return grouped + + +def render_overview( + dataset: Dataset, + target: Target, + precision: str, + layout: str = "full", +) -> str: + if layout not in {"full", "compact"}: + raise ValueError(f"unsupported overview layout {layout!r}") + margin = COMPACT_MARGIN if layout == "compact" else MARGIN + table_gap = COMPACT_TABLE_GAP if layout == "compact" else TABLE_GAP + font_size_increment = ( + COMPACT_FONT_SIZE_INCREMENT if layout == "compact" else 0 + ) + header_heights = ( + COMPACT_HEADER_HEIGHTS + if layout == "compact" + else HEADER_HEIGHTS + ) + title_height = 0 if layout == "compact" else TITLE_HEIGHT + footer_height = 0 if layout == "compact" else FOOTER_HEIGHT + add_text = partial( + _text, + font_size_increment=font_size_increment, + ) + add_text_spans = partial( + _text_spans, + font_size_increment=font_size_increment, + ) + add_text_lines = partial( + _text_lines, + font_size_increment=font_size_increment, + ) + implementations = _implementation_order(dataset, target, precision) + keys = { + (group, operation) + for ( + row_target, row_precision, group, operation, implementation, + ) in dataset.canonical + if row_target == target and row_precision == precision + and (group, operation) not in REPORT_EXCLUDED_OPERATIONS + } + operations = sorted( + keys, + key=lambda value: ( + GROUP_ORDER.get(value[0], len(GROUP_ORDER)), + value[0], + OPERATION_ORDER.get(value[0], {}).get( + value[1], len(OPERATION_ORDER.get(value[0], {})), + ), + value[1], + ), + ) + if not operations: + raise MetricsError(f"{target.label} {precision}: no canonical operations") + + column_widths_by_implementation = { + implementation: _column_widths( + dataset, target, precision, operations, implementation, layout, + ) + for implementation in implementations + } + block_widths = tuple( + sum(column_widths_by_implementation[implementation]) + for implementation in implementations + ) + operation_width = _operation_width(operations, layout) + width = ( + margin * 2 + operation_width + + len(implementations) * table_gap + sum(block_widths) + ) + title_mode = ( + " consumer fast-math" if dataset.consumer_mode == "fastmath" else "" + ) + title = f"{precision}{title_mode} metrics overview — {target.label}" + subtitle = ( + "Accuracy excludes the subnormal domain; support is reported separately. " + "Speed is relative to FLTX." + if dataset.consumer_mode == "fastmath" + else + "Accuracy is MPFR-relative; domain pass counts use FLTX release " + "thresholds; speed is implementation ÷ FLTX." + ) + if layout == "full": + character_width = _estimated_character_width("full", 10) + width = max( + width, + math.ceil(len(title) * character_width * 1.5) + margin * 2, + math.ceil(len(subtitle) * character_width) + margin * 2, + ) + header_height = sum(header_heights) + body_y = title_height + header_height + operation_groups = _grouped_operations(operations) + body_height = ( + ROW_HEIGHT * len(operations) + + GROUP_ROW_HEIGHT * len(operation_groups) + ) + height = body_y + body_height + footer_height + parts = [ + '', + f'', + _font_css(layout), + f'', + ] + if layout == "full": + add_text( + parts, margin, 23, + title, + anchor="start", weight="bold", size=15, + ) + add_text( + parts, margin, 42, + subtitle, + anchor="start", fill="#aeb4bf", size=10, + ) + + header_y = title_height + _rect(parts, margin, header_y, operation_width, header_height, "#2B2B2B") + add_text( + parts, margin + operation_width / 2, + header_y + header_height / 2 + 4, + "operation", weight="bold", size=10, + ) + + labels: dict[str, tuple[str, str]] = {} + for implementation in implementations: + candidates = [ + row for ( + row_target, row_precision, _, _, row_implementation, + ), row in dataset.canonical.items() + if ( + row_target == target and row_precision == precision and + row_implementation == implementation + ) + ] + if not candidates: + raise MetricsError( + f"{target.label} {precision}: missing implementation {implementation}" + ) + labels[implementation] = ( + candidates[0]["implementation_short"], + candidates[0]["implementation_label"], + ) + + for index, implementation in enumerate(implementations): + column_widths = column_widths_by_implementation[implementation] + block_width = block_widths[index] + x = _block_x( + index, + operation_width, + block_widths, + margin=margin, + table_gap=table_gap, + ) + header_fill, _ = _implementation_tint( + implementation, implementations + ) + parts.append( + f'' + ) + _rect(parts, x, header_y, block_width, header_heights[0], header_fill) + label = ( + f"bl::{precision}" + if implementation == "fltx" + else PRIMARY_HEADER_LABELS.get( + labels[implementation][0], + labels[implementation][0], + ) + ) + add_text( + parts, x + block_width / 2, header_y + 16, + label, + weight="normal" if layout == "compact" else "bold", + fill="#ffffff", + size=10, + ) + + second_y = header_y + header_heights[0] + accuracy_width = column_widths[0] + column_widths[1] + accuracy_header = ( + ("bits", "accurate") if layout == "compact" else ("bits accurate",) + ) + benchmark_header = ( + ("bench", "(ns)") + if layout == "compact" + else ("performance",) + ) + groups = ( + (accuracy_header, accuracy_width, False), + (("domain",), column_widths[2], False), + ( + benchmark_header, + column_widths[3], + layout == "compact", + ), + (("Inf/", "NaN"), column_widths[4], True), + (("±0",), column_widths[5], True), + ) + if dataset.consumer_mode == "fastmath": + groups += ((("Subnorm",), column_widths[6], True),) + group_x = x + for group_lines, group_width, spans_subheader in groups: + group_height = ( + header_heights[1] + header_heights[2] + if spans_subheader + else header_heights[1] + ) + _rect(parts, group_x, second_y, group_width, group_height, header_fill) + add_text_lines( + parts, + group_x + group_width / 2, + second_y, + group_height, + group_lines, + size=9, + ) + group_x += group_width + + third_y = second_y + header_heights[1] + column_x = x + for (key, header_lines, _), column_width in zip( + _column_specs(dataset.consumer_mode), column_widths + ): + if ( + key in {"special", "signed_zero", "subnormal"} or + ( + layout == "compact" and + key == "benchmark" + ) + ): + column_x += column_width + continue + _rect(parts, column_x, third_y, column_width, header_heights[2], header_fill) + add_text_lines( + parts, + column_x + column_width / 2, + third_y, + header_heights[2], + _column_header_lines( + key, header_lines, layout, implementation, + ), + size=9, + ) + column_x += column_width + parts.append("") + + group_spans: list[tuple[int, int, int]] = [] + y = body_y + row_index = 0 + for report_group, group_operations in operation_groups: + group_y = y + parts.append( + f'' + ) + _rect( + parts, margin, group_y, operation_width, + GROUP_ROW_HEIGHT, GROUP_ROW_FILL, + ) + add_text( + parts, + margin + 7, + group_y + 13, + GROUP_LABELS.get( + report_group, + report_group.replace("_", " ").title(), + ), + anchor="start", + fill=GROUP_ROW_TEXT, + weight="normal", + size=9 if layout == "compact" else 10, + ) + for index in range(len(implementations)): + x = _block_x( + index, + operation_width, + block_widths, + margin=margin, + table_gap=table_gap, + ) + _rect( + parts, x, group_y, block_widths[index], + GROUP_ROW_HEIGHT, GROUP_ROW_FILL, + ) + parts.append("") + y += GROUP_ROW_HEIGHT + operations_y = y + + for group, operation in group_operations: + fastest = _fastest_competitor( + dataset, target, precision, group, operation, + ) + fltx_speed_ratio = None if fastest is None else fastest[1] + parts.append('') + _rect( + parts, margin, y, operation_width, ROW_HEIGHT, + OPERATION_ROW_FILLS[row_index % 2], + ) + add_text( + parts, margin + 7, y + 15, operation, + anchor="start", fill="#f1f2f4", + size=9 if layout == "compact" else 10, + ) + + for index, implementation in enumerate(implementations): + column_widths = column_widths_by_implementation[implementation] + x = _block_x( + index, + operation_width, + block_widths, + margin=margin, + table_gap=table_gap, + ) + row = dataset.canonical.get( + (target, precision, group, operation, implementation) + ) + row = _display_row( + dataset, + target, + precision, + group, + operation, + implementation, + row, + normal_only=dataset.consumer_mode == "fastmath", + ) + body_fill = OPERATION_ROW_FILLS[row_index % 2] + tooltip = _tooltip( + dataset, + target, + precision, + group, + operation, + implementation, + row, + ) + values: list[tuple[str, str, str]] = [ + _accuracy_style( + None if row is None else row["mean_bits"], + body_fill, + layout, + ), + _accuracy_style( + None if row is None else row["worst_bits"], + body_fill, + layout, + ), + _domain_style(row, body_fill), + _benchmark_style(row, implementation, body_fill, layout), + _special_style(row, body_fill), + _signed_zero_style(row, body_fill), + ] + if dataset.consumer_mode == "fastmath": + values.append(_subnormal_style(row, body_fill)) + parts.append("") + parts.append(f"{html.escape(tooltip)}") + column_x = x + for column_index, ( + column_width, (value, fill, text_fill), + ) in enumerate(zip(column_widths, values)): + _rect( + parts, column_x, y, column_width, ROW_HEIGHT, fill, + ) + if column_index == 3: + add_text_spans( + parts, + column_x + column_width / 2, + y + 15, + _benchmark_spans( + row, + implementation, + fltx_speed_ratio=( + fltx_speed_ratio + if implementation == "fltx" + else None + ), + layout=layout, + ), + size=9, + ) + else: + compact_accuracy_marker = ( + layout == "compact" and + column_index in {0, 1} + ) + drawn_exact = ( + compact_accuracy_marker and + value == "∞" + ) + if drawn_exact: + _infinity_mark( + parts, + column_x + column_width / 2, + y + ROW_HEIGHT / 2, + stroke=text_fill, + ) + else: + add_text( + parts, + column_x + column_width / 2, + y + 15, + value, + fill=text_fill, + size=( + COMPACT_REFERENCE_MATCH_FONT_SIZE + if compact_accuracy_marker and value == "=" + else 9 + ), + ) + column_x += column_width + parts.append("") + parts.append("") + y += ROW_HEIGHT + row_index += 1 + + group_spans.append((group_y, operations_y, y)) + + grid_bottom = y + + # The operation index and each implementation are separate tables. Draw + # every grid segment once so adjacent cells never create doubled borders. + _line(parts, margin, header_y, margin + operation_width, header_y, stroke=GRID_STRONG) + _line(parts, margin, header_y, margin, grid_bottom, stroke=GRID_STRONG) + _line( + parts, + margin + operation_width, + header_y, + margin + operation_width, + grid_bottom, + stroke=GRID_STRONG, + ) + + for index, implementation in enumerate(implementations): + column_widths = column_widths_by_implementation[implementation] + block_width = block_widths[index] + x = _block_x( + index, + operation_width, + block_widths, + margin=margin, + table_gap=table_gap, + ) + right = x + block_width + second_y = header_y + header_heights[0] + third_y = second_y + header_heights[1] + + _line(parts, x, header_y, right, header_y, stroke=GRID_STRONG) + _line(parts, x, header_y, x, grid_bottom, stroke=GRID_STRONG) + _line(parts, right, header_y, right, grid_bottom, stroke=GRID_STRONG) + _line(parts, x, second_y, right, second_y, stroke=GRID_REGULAR) + special_x = x + sum(column_widths[:4]) + third_row_right = ( + x + sum(column_widths[:3]) + if layout == "compact" + else special_x + ) + _line( + parts, + x, + third_y, + third_row_right, + third_y, + stroke=GRID_REGULAR, + ) + boundaries = [] + position = x + for column_width in column_widths[:-1]: + position += column_width + boundaries.append(position) + + # Mean/worst is a third-level subdivision. The remaining boundaries + # also divide second-level groups. Body dividers stop at group rows. + _line(parts, boundaries[0], third_y, boundaries[0], body_y) + for boundary in boundaries[1:]: + _line(parts, boundary, second_y, boundary, body_y) + for _, operations_y, operations_end in group_spans: + _line( + parts, + boundaries[0], + operations_y, + boundaries[0], + operations_end, + ) + for boundary in boundaries[1:]: + _line( + parts, + boundary, + operations_y, + boundary, + operations_end, + ) + + for group_y, operations_y, operations_end in group_spans: + for left, right in ( + (margin, margin + operation_width), + *( + ( + _block_x( + index, + operation_width, + block_widths, + margin=margin, + table_gap=table_gap, + ), + _block_x( + index, + operation_width, + block_widths, + margin=margin, + table_gap=table_gap, + ) + + block_widths[index], + ) + for index in range(len(implementations)) + ), + ): + _line(parts, left, group_y, right, group_y, stroke=GRID_STRONG) + _line( + parts, + left, + operations_y, + right, + operations_y, + stroke=GRID_STRONG, + ) + operation_y = operations_y + ROW_HEIGHT + while operation_y < operations_end: + _line( + parts, + left, + operation_y, + right, + operation_y, + stroke=GRID_REGULAR, + ) + operation_y += ROW_HEIGHT + + _line( + parts, + margin, + grid_bottom, + margin + operation_width, + grid_bottom, + stroke=GRID_STRONG, + ) + for index in range(len(implementations)): + x = _block_x( + index, + operation_width, + block_widths, + margin=margin, + table_gap=table_gap, + ) + _line( + parts, + x, + grid_bottom, + x + block_widths[index], + grid_bottom, + stroke=GRID_STRONG, + ) + + if layout == "full": + footer_y = grid_bottom + 20 + add_text( + parts, margin, footer_y, + "Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –.", + anchor="start", fill="#aeb4bf", size=10, + ) + parts.append("") + return "\n".join(parts) + "\n" + + +def parse_args(argv: list[str] | None = None) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--input", type=Path, default=Path(__file__).parents[1] / "data") + parser.add_argument("--target", type=_target, required=True) + parser.add_argument("--output", type=Path, default=Path(__file__).parents[1] / "generated") + parser.add_argument( + "--layout", + choices=("full", "compact"), + default="full", + ) + parser.add_argument( + "--consumer-mode", + choices=CONSUMER_MODES, + default="strict", + ) + return parser.parse_args(argv) + + +def main(argv: list[str] | None = None) -> int: + try: + args = parse_args(argv) + dataset = load(args.input, (args.target,), args.consumer_mode) + args.output.mkdir(parents=True, exist_ok=True) + mode_suffix = consumer_mode_suffix(args.consumer_mode) + layout_suffix = "_compact" if args.layout == "compact" else "" + for precision in PRECISIONS: + path = ( + args.output / + f"{args.target.platform}_{args.target.architecture}_" + f"{args.target.compiler}_{precision}" + f"{mode_suffix}_overview{layout_suffix}.svg" + ) + path.write_text( + render_overview(dataset, args.target, precision, args.layout), + encoding="utf-8", + newline="\n", + ) + print(path) + return 0 + except (MetricsError, OSError, ValueError) as error: + print(f"overview failed: {error}", file=sys.stderr) + return 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/validation/metrics/_internal/build_performance.py b/validation/metrics/_internal/build_performance.py new file mode 100644 index 0000000..0306fe4 --- /dev/null +++ b/validation/metrics/_internal/build_performance.py @@ -0,0 +1,1105 @@ +#!/usr/bin/env python3 +"""Build the cross-target FLTX performance comparison SVG.""" + +from __future__ import annotations + +import argparse +import base64 +import csv +import html +import json +import math +import re +import sys +from dataclasses import dataclass +from pathlib import Path + +from build_tables import ( + GROUP_LABELS, + GROUP_ORDER, + OPERATION_ORDER, + REPORT_EXCLUDED_OPERATIONS, + Target, + _OPERATIONS_BY_GROUP, + _ratio_color, + _report_group, + architecture_label, + compiler_label_lines, + platform_label, +) +from run_metrics import ( + CANONICAL_FIELDS, + CONSUMER_MODES, + MINIMUM_CREDIBLE_BENCHMARK_NS, + SCHEMA_VERSION, + MetricsError, + _safe_component, + consumer_mode_suffix, +) + + +PRECISIONS = ("f128", "f256") +PRECISION_LABELS = {"f128": "bl::f128", "f256": "bl::f256"} +CANONICAL_FILE_RE = re.compile( + r"(?P.+)_(?Pf128|f256)" + r"(?P_fastmath)?\.csv$", + re.IGNORECASE, +) + +PLATFORM_ORDER = { + "windows": 0, + "linux": 1, + "macos": 2, + "wasm32": 3, +} +COMPILER_ORDER = { + "msvc": 0, + "clangcl": 1, + "mingw": 2, + "gcc": 3, + "clang": 4, + "appleclang": 5, + "nodejs": 5, + "node": 5, + "chrome": 6, + "browser": 6, + "emscripten": 7, +} +ARCHITECTURE_ORDER = {"x86_64": 0, "arm64": 1, "wasm32": 2} + +PAGE = "#0f1115" +FUNCTION_HEADER = "#2b2b2b" +HEADER = "#244b70" +PLATFORM_HEADER = "#293f57" +LEAF_HEADER = "#313d4b" +GROUP = "#4e555f" +GRID = "#000000" +INK = "#f1f2f4" +MUTED = "#aeb4bf" +WHITE = "#ffffff" +BODY_TEXT = "#e7e9ee" +BODY_ROW_FILLS = ("#191d23", "#16191f") +CELL_PADDING = 8 + +COMPACT_FONT_ROOT = ( + Path(__file__).resolve().parents[1] / + "assets" / "fonts" / "ubuntu-mono" +) +COMPACT_FONTS = { + 400: COMPACT_FONT_ROOT / "UbuntuMono-Regular.woff2", + 700: COMPACT_FONT_ROOT / "UbuntuMono-Bold.woff2", +} + +TABLE_TITLE = "fltx performance" +TABLE_DESCRIPTION = ( + "Columns identify the target platform and build toolchain. FLTX time per " + "iteration; the second line shows FLTX speed versus the fastest available " + "competitor for each target." +) + + +def _font_css(layout: str) -> str: + if layout != "compact": + return ( + "" + ) + + faces = [] + for weight, path in COMPACT_FONTS.items(): + encoded = base64.b64encode(path.read_bytes()).decode("ascii") + faces.append( + "@font-face {" + "font-family:'Ubuntu Mono';" + f"font-weight:{weight};" + "font-style:normal;" + f"src:url(data:font/woff2;base64,{encoded}) format('woff2');" + "}" + ) + return ( + "" + ) + + +@dataclass(frozen=True) +class ColumnKey: + precision: str + target: Target + + +@dataclass +class PerformanceDataset: + columns: tuple[ColumnKey, ...] + rows: dict[tuple[ColumnKey, str, str, str], dict[str, str]] + implementations: dict[tuple[ColumnKey, str, str], tuple[str, ...]] + run_ids: dict[ColumnKey, str] + sources: dict[ColumnKey, Path] + consumer_mode: str = "strict" + + +@dataclass(frozen=True) +class ResultCell: + fltx: dict[str, str] + competitor: dict[str, str] | None + fltx_ns: float + competitor_ns: float | None + fltx_speed_ratio: float | None + + +_CANONICAL_GROUP_BY_OPERATION: dict[str, str] = {} +for _group, _operations in _OPERATIONS_BY_GROUP.items(): + for _operation in _operations: + if _operation in _CANONICAL_GROUP_BY_OPERATION: + raise RuntimeError(f"duplicate report operation {_operation!r}") + _CANONICAL_GROUP_BY_OPERATION[_operation] = _group + + +def _normalized_key(value: str) -> str: + return re.sub(r"[^a-z0-9]", "", value.casefold()) + + +def _column_sort_key(column: ColumnKey) -> tuple[int, int, str, int, str, int, str]: + platform_key = column.target.platform.casefold() + compiler_key = _normalized_key(column.target.compiler) + return ( + PRECISIONS.index(column.precision), + PLATFORM_ORDER.get(platform_key, len(PLATFORM_ORDER)), + platform_label(column.target.platform).casefold(), + ARCHITECTURE_ORDER.get( + column.target.architecture.casefold(), len(ARCHITECTURE_ORDER) + ), + column.target.architecture.casefold(), + COMPILER_ORDER.get(compiler_key, len(COMPILER_ORDER)), + column.target.compiler.casefold(), + ) + + +def _canonical_group(group: str, operation: str) -> str: + return _CANONICAL_GROUP_BY_OPERATION.get(operation, group) + + +def _read_canonical(path: Path, column: ColumnKey) -> list[dict[str, str]]: + try: + with path.open(newline="", encoding="utf-8") as stream: + reader = csv.DictReader(stream) + if tuple(reader.fieldnames or ()) != CANONICAL_FIELDS: + raise MetricsError(f"{path}: incompatible schema/header") + rows = list(reader) + except OSError as error: + raise MetricsError(f"cannot read {path}: {error}") from error + + if not rows: + raise MetricsError(f"{path}: contains no rows") + if any(None in row or any(value is None for value in row.values()) for row in rows): + raise MetricsError(f"{path}: malformed row width") + + seen: set[tuple[str, str, str]] = set() + run_ids: set[str] = set() + normalized: list[dict[str, str]] = [] + for source_row in rows: + row = dict(source_row) + if row["precision"] != column.precision: + raise MetricsError( + f"{path}: row precision {row['precision']!r} does not match " + f"{column.precision!r}" + ) + group = _canonical_group(row["group"], row["operation"]) + operation = row["operation"] + implementation = row["implementation"] + if not group or not operation or not implementation: + raise MetricsError(f"{path}: empty benchmark identity") + row["group"] = group + key = (group, operation, implementation) + if key in seen: + raise MetricsError(f"{path}: duplicate canonical row {key}") + seen.add(key) + + run_id = row["run_id"] + if not run_id: + raise MetricsError(f"{path}: empty run_id") + run_ids.add(run_id) + if row["ns_iter"]: + _positive_float(row["ns_iter"], path, key) + normalized.append(row) + + if len(run_ids) != 1: + raise MetricsError(f"{path}: rows contain multiple run IDs") + if not any( + row["implementation"] == "fltx" and row["ns_iter"] + for row in normalized + ): + raise MetricsError(f"{path}: contains no FLTX benchmark timings") + return normalized + + +def _positive_float( + value: str, + source: Path, + identity: tuple[str, str, str], +) -> float: + try: + result = float(value) + except ValueError as error: + raise MetricsError( + f"{source}: invalid benchmark timing {value!r} for {identity}" + ) from error + if not math.isfinite(result) or result <= 0.0: + raise MetricsError( + f"{source}: benchmark timing must be positive and finite for {identity}" + ) + if result < MINIMUM_CREDIBLE_BENCHMARK_NS: + raise MetricsError( + f"{source}: implausibly small benchmark timing for {identity}; " + "the workload may have been optimized away" + ) + return result + + +def discover( + input_root: Path, + consumer_mode: str = "strict", +) -> PerformanceDataset: + """Load every canonical platform/architecture/compiler CSV independently.""" + + if not input_root.is_dir(): + raise MetricsError(f"metrics input directory does not exist: {input_root}") + + rows: dict[tuple[ColumnKey, str, str, str], dict[str, str]] = {} + implementation_lists: dict[tuple[ColumnKey, str, str], list[str]] = {} + run_ids: dict[ColumnKey, str] = {} + sources: dict[ColumnKey, Path] = {} + + for platform_dir in sorted(input_root.iterdir(), key=lambda path: path.name.casefold()): + if not platform_dir.is_dir(): + continue + for architecture_dir in sorted( + platform_dir.iterdir(), key=lambda path: path.name.casefold() + ): + if not architecture_dir.is_dir(): + continue + for path in sorted( + architecture_dir.iterdir(), key=lambda item: item.name.casefold() + ): + if not path.is_file(): + continue + match = CANONICAL_FILE_RE.fullmatch(path.name) + if match is None: + continue + observed_mode = ( + "fastmath" if match.group("consumer_suffix") else "strict" + ) + if observed_mode != consumer_mode: + continue + try: + target = Target( + _safe_component(platform_dir.name, "platform"), + _safe_component(architecture_dir.name, "architecture"), + _safe_component(match.group("compiler"), "compiler"), + ) + except MetricsError as error: + raise MetricsError(f"{path}: {error}") from error + column = ColumnKey(match.group("precision").casefold(), target) + if column in sources: + raise MetricsError( + f"duplicate performance source for {column.precision} " + f"{column.target.label}: {sources[column]} and {path}" + ) + + source_rows = _read_canonical(path, column) + sources[column] = path + run_ids[column] = source_rows[0]["run_id"] + for row in source_rows: + group = row["group"] + operation = row["operation"] + implementation = row["implementation"] + rows[(column, group, operation, implementation)] = row + key = (column, group, operation) + values = implementation_lists.setdefault(key, []) + if implementation not in values: + values.append(implementation) + + columns = tuple(sorted(sources, key=_column_sort_key)) + implementations = { + key: tuple(values) + for key, values in implementation_lists.items() + } + return PerformanceDataset( + columns, + rows, + implementations, + run_ids, + sources, + consumer_mode, + ) + + +def operations(dataset: PerformanceDataset) -> list[tuple[str, str]]: + pairs = { + (group, operation) + for (column, group, operation, implementation), row in dataset.rows.items() + if ( + implementation == "fltx" + and row["ns_iter"] + and (group, operation) not in REPORT_EXCLUDED_OPERATIONS + ) + } + return sorted( + pairs, + key=lambda item: ( + GROUP_ORDER.get(item[0], len(GROUP_ORDER)), + item[0], + OPERATION_ORDER.get(item[0], {}).get( + item[1], len(OPERATION_ORDER.get(item[0], {})), + ), + item[1], + ), + ) + + +def _result_cell( + dataset: PerformanceDataset, + column: ColumnKey, + group: str, + operation: str, +) -> ResultCell | None: + fltx = dataset.rows.get((column, group, operation, "fltx")) + if fltx is None or not fltx["ns_iter"]: + return None + fltx_ns = float(fltx["ns_iter"]) + + candidates: list[tuple[float, str, str, dict[str, str]]] = [] + for implementation in dataset.implementations.get( + (column, group, operation), (), + ): + if implementation == "fltx": + continue + row = dataset.rows.get((column, group, operation, implementation)) + if row is None or not row["ns_iter"]: + continue + competitor_ns = float(row["ns_iter"]) + candidates.append(( + competitor_ns, + row["implementation_short"], + implementation, + row, + )) + if not candidates: + return ResultCell(fltx, None, fltx_ns, None, None) + + competitor_ns, _, _, competitor = min(candidates) + return ResultCell( + fltx, + competitor, + fltx_ns, + competitor_ns, + competitor_ns / fltx_ns, + ) + + +def _format_ns(value: float, layout: str) -> str: + if layout == "compact": + if value >= 100.0: + return f"{value:,.0f}ns" + if value >= 1.0: + return f"{value:.1f}ns" + return f"{value:.2f}ns" + if value >= 100.0: + return f"{value:,.0f}ns" + if value >= 10.0: + return f"{value:.1f}ns" + if value >= 1.0: + return f"{value:.2f}ns" + return f"{value:.3f}ns" + + +def _format_ratio(value: float, layout: str) -> str: + return f"{value:.1f}×" if layout == "compact" else f"{value:.2f}×" + + +def _result_lines(cell: ResultCell, layout: str) -> tuple[str, ...]: + lines = [_format_ns(cell.fltx_ns, layout)] + if cell.competitor is not None and cell.fltx_speed_ratio is not None: + lines.append( + f"{_format_ratio(cell.fltx_speed_ratio, layout)} " + f"{cell.competitor['implementation_short']}" + ) + return tuple(lines) + + +def _tooltip( + column: ColumnKey, + group: str, + operation: str, + cell: ResultCell, +) -> str: + lines = [ + f"{column.target.label}; {PRECISION_LABELS[column.precision]}; " + f"{group} / {operation}", + f"{cell.fltx['implementation_label']} ({cell.fltx['api']}): " + f"{cell.fltx_ns:g} ns", + ] + if ( + cell.competitor is not None + and cell.competitor_ns is not None + and cell.fltx_speed_ratio is not None + ): + lines.append( + f"Fastest competitor: {cell.competitor['implementation_label']} " + f"({cell.competitor['api']}): {cell.competitor_ns:g} ns; " + f"FLTX speed vs fastest competitor: " + f"{cell.fltx_speed_ratio:.6g}×" + ) + else: + lines.append("No competitor benchmark is available.") + return "\n".join(lines) + + +def _svg_text( + x: float, + y: float, + value: str, + size: int, + color: str, + *, + weight: int = 400, + anchor: str = "start", + css_class: str = "", +) -> str: + class_attribute = ( + f' class="{html.escape(css_class, quote=True)}"' if css_class else "" + ) + return ( + f'' + f"{html.escape(value)}" + ) + + +def _svg_rect( + x: float, + y: float, + width: float, + height: float, + fill: str, + *, + stroke: str = GRID, + css_class: str = "", +) -> str: + class_attribute = ( + f' class="{html.escape(css_class, quote=True)}"' if css_class else "" + ) + return ( + f'' + ) + + +def _precision_spans( + columns: tuple[ColumnKey, ...], +) -> list[tuple[int, int]]: + spans: list[tuple[int, int]] = [] + index = 0 + while index < len(columns): + precision = columns[index].precision + count = 1 + while ( + index + count < len(columns) + and columns[index + count].precision == precision + ): + count += 1 + spans.append((index, count)) + index += count + return spans + + +def _reference_legend( + dataset: PerformanceDataset, + operation_rows: list[tuple[str, str]], +) -> list[str]: + lines: list[str] = [] + for precision in PRECISIONS: + references: dict[str, str] = {} + for column in dataset.columns: + if column.precision != precision: + continue + for group, operation in operation_rows: + cell = _result_cell(dataset, column, group, operation) + if cell is None or cell.competitor is None: + continue + short = cell.competitor["implementation_short"] + label = cell.competitor["implementation_label"] + existing = references.get(short) + if existing is not None and existing != label: + raise MetricsError( + f"ambiguous implementation short name {short!r}" + ) + references[short] = label + if references: + if lines: + lines.append("") + lines.extend( + f"{short} = {references[short]}" + for short in sorted(references, key=str.casefold) + ) + return lines + + +def _operation_width( + operation_rows: list[tuple[str, str]], + layout: str, +) -> int: + longest = max([len("Function")] + [len(operation) for _, operation in operation_rows]) + if layout == "compact": + return max(96, math.ceil(longest * 6.0) + 16) + natural = max(210, min(720, longest * 8 + 34)) + return round(natural * 0.75) + + +def _column_width( + dataset: PerformanceDataset, + column: ColumnKey, + operation_rows: list[tuple[str, str]], + layout: str, +) -> int: + if layout == "full": + return 116 + values = [ + *compiler_label_lines(column.target.compiler), + platform_label(column.target.platform), + architecture_label(column.target.architecture), + PRECISION_LABELS[column.precision], + ] + for group, operation in operation_rows: + cell = _result_cell(dataset, column, group, operation) + if cell is not None: + values.extend(_result_lines(cell, layout)) + return max(78, math.ceil(max(map(len, values), default=0) * 6.0) + 12) + + +def _grouped_operations( + operation_rows: list[tuple[str, str]], +) -> list[tuple[str, list[tuple[str, str]]]]: + grouped: list[tuple[str, list[tuple[str, str]]]] = [] + for group, operation in operation_rows: + report_group = _report_group(group) + if not grouped or grouped[-1][0] != report_group: + grouped.append((report_group, [])) + grouped[-1][1].append((group, operation)) + return grouped + + +def render(dataset: PerformanceDataset, layout: str = "full") -> str: + if layout not in {"full", "compact"}: + raise ValueError(f"unsupported performance layout {layout!r}") + + compact = layout == "compact" + table_title = ( + "fltx consumer fast-math performance" + if dataset.consumer_mode == "fastmath" + else TABLE_TITLE + ) + table_description = ( + TABLE_DESCRIPTION[:-1] + " with consumer fast-math enabled." + if dataset.consumer_mode == "fastmath" + else TABLE_DESCRIPTION + ) + margin = 0 if compact else 18 + type_gap = 6 if compact else 16 + header_height = 28 if compact else 34 + group_height = 20 if compact else 28 + row_height = 30 if compact else 40 + operation_rows = operations(dataset) + grouped = _grouped_operations(operation_rows) + legend = [] if compact else _reference_legend(dataset, operation_rows) + legend_height = 0 + if legend: + legend_height = 8 + sum(8 if not line else 15 for line in legend) + title_height = 0 if compact else 62 + legend_height + + operation_width = _operation_width(operation_rows, layout) + column_widths = tuple( + _column_width(dataset, column, operation_rows, layout) + for column in dataset.columns + ) + boundaries = { + index + for index in range(1, len(dataset.columns)) + if dataset.columns[index].precision != dataset.columns[index - 1].precision + } + column_x: list[int] = [] + x = margin + operation_width + for index, width in enumerate(column_widths): + if index in boundaries: + x += type_gap + column_x.append(x) + x += width + table_width = x - margin + width = margin * 2 + table_width + if not compact: + width = max( + width, + margin * 2 + math.ceil(len(table_description) * 8.3), + margin * 2 + max( + [0] + [math.ceil(len(line) * 7.6) for line in legend] + ), + ) + height = ( + margin * 2 + + title_height + + header_height * 4 + + group_height * len(grouped) + + row_height * len(operation_rows) + ) + if not dataset.columns: + width = max(width, 640 if not compact else 320) + height = max(height, margin * 2 + title_height + 56) + + parts = [ + ( + f'' + ), + f'{html.escape(table_title)}', + f'{html.escape(table_description)}', + _font_css(layout), + f'', + ] + if not compact: + parts.extend([ + _svg_text(margin, margin + 26, table_title, 26, INK, weight=700), + _svg_text( + margin, + margin + 50, + table_description, + 15, + MUTED, + ), + ]) + legend_y = margin + 76 + for line in legend: + if not line: + legend_y += 8 + continue + short, _, label = line.partition(" = ") + short_width = math.ceil(len(short) * 8.2) + parts.append( + _svg_text(margin, legend_y, short, 13, INK, weight=700) + ) + parts.append( + _svg_text( + margin + short_width + 8, + legend_y, + "=", + 13, + INK, + weight=650, + ) + ) + parts.append( + _svg_text( + margin + short_width + 22, + legend_y, + label, + 13, + MUTED, + weight=600, + ) + ) + legend_y += 15 + + y = margin + title_height + if not dataset.columns: + parts.append( + _svg_text( + margin, + y + 32, + "No canonical performance metrics were found.", + 16, + MUTED, + ) + ) + parts.append("") + return "\n".join(parts) + "\n" + + parts.append( + _svg_rect( + margin, + y, + operation_width, + header_height * 4, + FUNCTION_HEADER, + css_class="function-header-cell", + ) + ) + parts.append( + _svg_text( + margin + CELL_PADDING, + y + header_height * 2 + 5, + "Function", + 12 if compact else 14, + WHITE, + weight=700, + ) + ) + + for start, count in _precision_spans(dataset.columns): + span_width = sum(column_widths[start:start + count]) + parts.append( + _svg_rect( + column_x[start], + y, + span_width, + header_height, + HEADER, + css_class="precision-header-cell", + ) + ) + parts.append( + _svg_text( + column_x[start] + span_width / 2, + y + header_height // 2 + 5, + PRECISION_LABELS[dataset.columns[start].precision], + 12 if compact else 14, + WHITE, + weight=700, + anchor="middle", + css_class="precision-header", + ) + ) + + platform_y = y + header_height + index = 0 + while index < len(dataset.columns): + column = dataset.columns[index] + count = 1 + while ( + index + count < len(dataset.columns) + and dataset.columns[index + count].precision == column.precision + and dataset.columns[index + count].target.platform + == column.target.platform + ): + count += 1 + span_width = sum(column_widths[index:index + count]) + parts.append( + _svg_rect( + column_x[index], + platform_y, + span_width, + header_height, + PLATFORM_HEADER, + css_class="platform-header-cell", + ) + ) + parts.append( + _svg_text( + column_x[index] + span_width / 2, + platform_y + header_height // 2 + 5, + platform_label(column.target.platform), + 12 if compact else 14, + WHITE, + weight=700, + anchor="middle", + css_class="platform-header", + ) + ) + index += count + + architecture_y = platform_y + header_height + index = 0 + while index < len(dataset.columns): + column = dataset.columns[index] + count = 1 + while ( + index + count < len(dataset.columns) + and dataset.columns[index + count].precision == column.precision + and dataset.columns[index + count].target.platform + == column.target.platform + and dataset.columns[index + count].target.architecture + == column.target.architecture + ): + count += 1 + span_width = sum(column_widths[index:index + count]) + parts.append( + _svg_rect( + column_x[index], + architecture_y, + span_width, + header_height, + LEAF_HEADER, + css_class="architecture-header-cell", + ) + ) + parts.append( + _svg_text( + column_x[index] + span_width / 2, + architecture_y + header_height // 2 + 5, + architecture_label(column.target.architecture), + 12 if compact else 14, + WHITE, + weight=700, + anchor="middle", + css_class="architecture-header", + ) + ) + index += count + + toolchain_y = architecture_y + header_height + for index, column in enumerate(dataset.columns): + parts.append( + _svg_rect( + column_x[index], + toolchain_y, + column_widths[index], + header_height, + LEAF_HEADER, + css_class="toolchain-header-cell", + ) + ) + labels = compiler_label_lines(column.target.compiler) + center_x = column_x[index] + column_widths[index] / 2 + accessible_label = ( + labels[0] if len(labels) == 1 else f"{labels[0]} ({labels[1]})" + ) + parts.append( + f'' + ) + if len(labels) == 1: + parts.append( + _svg_text( + center_x, + toolchain_y + header_height // 2 + 5, + labels[0], + 12 if compact else 14, + WHITE, + weight=700, + anchor="middle", + css_class="toolchain-header-primary", + ) + ) + else: + parts.extend([ + _svg_text( + center_x, + toolchain_y + (11 if compact else 14), + labels[0], + 11 if compact else 13, + WHITE, + weight=700, + anchor="middle", + css_class="toolchain-header-primary", + ), + _svg_text( + center_x, + toolchain_y + (23 if compact else 29), + labels[1], + 10 if compact else 11, + MUTED, + weight=700, + anchor="middle", + css_class="toolchain-header-environment", + ), + ]) + parts.append("") + + y += header_height * 4 + row_index = 0 + for report_group, rows_in_group in grouped: + spans = _precision_spans(dataset.columns) + for span_index, (start, count) in enumerate(spans): + span_x = margin if span_index == 0 else column_x[start] + span_width = sum(column_widths[start:start + count]) + if span_index == 0: + span_width += operation_width + parts.append( + _svg_rect(span_x, y, span_width, group_height, GROUP) + ) + parts.append( + _svg_text( + margin + CELL_PADDING, + y + group_height // 2 + 5, + GROUP_LABELS.get(report_group, report_group), + 11 if compact else 13, + WHITE, + weight=700, + css_class="group-label", + ) + ) + y += group_height + + for group, operation in rows_in_group: + body_fill = BODY_ROW_FILLS[row_index % len(BODY_ROW_FILLS)] + parts.append( + _svg_rect( + margin, + y, + operation_width, + row_height, + body_fill, + ) + ) + parts.append( + _svg_text( + margin + CELL_PADDING, + y + row_height // 2 + 5, + operation, + 11 if compact else 14, + BODY_TEXT, + weight=400, + css_class="operation-label", + ) + ) + for index, column in enumerate(dataset.columns): + cell = _result_cell(dataset, column, group, operation) + if cell is None: + parts.append( + _svg_rect( + column_x[index], + y, + column_widths[index], + row_height, + body_fill, + ) + ) + continue + + parts.append("") + parts.append( + f"{html.escape(_tooltip(column, group, operation, cell))}" + ) + parts.append( + _svg_rect( + column_x[index], + y, + column_widths[index], + row_height, + body_fill, + ) + ) + lines = _result_lines(cell, layout) + if len(lines) == 1: + baselines = (y + row_height // 2 + 5,) + else: + first = y + (12 if compact else 17) + baselines = (first, first + (13 if compact else 16)) + for line_index, (line, baseline) in enumerate( + zip(lines, baselines) + ): + foreground = ( + _ratio_color(cell.fltx_speed_ratio) + if line_index > 0 + and cell.fltx_speed_ratio is not None + else BODY_TEXT + ) + parts.append( + _svg_text( + column_x[index] + column_widths[index] / 2, + baseline, + line, + 11 if compact else (14 if line == lines[0] else 12), + foreground, + weight=400, + anchor="middle", + css_class="result-line", + ) + ) + parts.append("") + y += row_height + row_index += 1 + + parts.append("") + return "\n".join(parts) + "\n" + + +def _write_atomic(path: Path, text: str) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + partial = path.with_suffix(".partial" + path.suffix) + partial.write_text(text, encoding="utf-8", newline="\n") + partial.replace(path) + + +def build( + input_root: Path, + output: Path, + layout: str = "full", + consumer_mode: str = "strict", +) -> tuple[Path, Path]: + dataset = discover(input_root, consumer_mode) + suffix = consumer_mode_suffix(consumer_mode) + if layout == "compact": + suffix += "_compact" + svg_path = output / f"performance_table{suffix}.svg" + metadata_path = output / f"performance_run{suffix}.json" + _write_atomic(svg_path, render(dataset, layout)) + metadata = { + "schema_version": SCHEMA_VERSION, + "consumer_mode": consumer_mode, + "layout": layout, + "output": svg_path.name, + "sources": [ + { + "platform": column.target.platform, + "architecture": column.target.architecture, + "compiler": column.target.compiler, + "precision": column.precision, + "run_id": dataset.run_ids[column], + "file": dataset.sources[column] + .relative_to(input_root) + .as_posix(), + } + for column in dataset.columns + ], + } + _write_atomic( + metadata_path, + json.dumps(metadata, indent=2, sort_keys=True) + "\n", + ) + return svg_path, metadata_path + + +def parse_args(argv: list[str] | None = None) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--input", + type=Path, + default=Path(__file__).parents[1] / "data", + ) + parser.add_argument( + "--output", + type=Path, + default=Path(__file__).parents[1] / "generated", + ) + parser.add_argument( + "--layout", + choices=("full", "compact"), + default="full", + ) + parser.add_argument( + "--consumer-mode", + choices=CONSUMER_MODES, + default="strict", + ) + return parser.parse_args(argv) + + +def main(argv: list[str] | None = None) -> int: + args = parse_args(argv) + try: + outputs = build( + args.input, + args.output, + args.layout, + args.consumer_mode, + ) + except (MetricsError, OSError, ValueError) as error: + print(f"performance table build failed: {error}", file=sys.stderr) + return 1 + for output in outputs: + print(output) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/validation/metrics/_internal/build_profile_comparison.py b/validation/metrics/_internal/build_profile_comparison.py new file mode 100644 index 0000000..48c3bdf --- /dev/null +++ b/validation/metrics/_internal/build_profile_comparison.py @@ -0,0 +1,898 @@ +#!/usr/bin/env python3 +"""Compare strict and consumer-fast-math FLTX metrics as overview-style SVGs.""" + +from __future__ import annotations + +import argparse +import copy +import html +import math +import sys +from dataclasses import dataclass +from functools import partial +from pathlib import Path + +import build_overview as overview +import build_tables +from run_metrics import MetricsError, PRECISIONS, metrics_stem, run_metadata_stem + + +IMPROVEMENT_TEXT = "#4ade80" +REGRESSION_TEXT = "#f87171" +NEUTRAL_TEXT = "#e7e9ee" +MUTED_TEXT = "#a5abb5" +COMPARISON_SUFFIX = "_strict_fastmath_comp.svg" +_RUN_SPECIFIC_METADATA = { + "consumer_mode", + "created_utc", + "executables", + "implementations", + "outputs", + "phases", + "run_id", + "source_revision", +} +_SPECIAL_MEMBERS = { + "Both": frozenset(("Inf", "NaN")), + "Inf": frozenset(("Inf",)), + "NaN": frozenset(("NaN",)), + "No": frozenset(), + "-": frozenset(), +} + + +@dataclass(frozen=True) +class Comparison: + strict: build_tables.Dataset + fastmath: build_tables.Dataset + strict_metadata: dict[str, object] + fastmath_metadata: dict[str, object] + fingerprint: str + + +@dataclass(frozen=True) +class BuildResult: + outputs: tuple[Path, ...] + skipped: str | None = None + + +def output_paths(output: Path, target: build_tables.Target) -> tuple[Path, ...]: + return tuple( + output + / ( + f"{target.platform}_{target.architecture}_{target.compiler}_{precision}" + f"{COMPARISON_SUFFIX}" + ) + for precision in PRECISIONS + ) + + +def _evidence_paths( + input_root: Path, + target: build_tables.Target, + consumer_mode: str, +) -> tuple[Path, ...]: + detail = input_root / target.platform / target.architecture / "detail" + paths = [ + detail / f"{run_metadata_stem(target.compiler, consumer_mode)}.json" + ] + for precision in PRECISIONS: + stem = metrics_stem(target.compiler, precision, consumer_mode) + paths.extend(( + input_root / target.platform / target.architecture / f"{stem}.csv", + detail / f"{stem}_accuracy.csv", + detail / f"{stem}_benchmark.csv", + )) + return tuple(paths) + + +def _normalized_metadata(metadata: dict[str, object]) -> dict[str, object]: + normalized = copy.deepcopy(metadata) + for field in _RUN_SPECIFIC_METADATA: + normalized.pop(field, None) + configuration = normalized.get("configuration") + consumer = ( + configuration.get("consumer") + if isinstance(configuration, dict) + else None + ) + if not isinstance(consumer, dict): + raise MetricsError("comparison metadata has invalid consumer configuration") + consumer.pop("fast-math", None) + return normalized + + +def _compatibility_reason( + strict: dict[str, object], + fastmath: dict[str, object], +) -> str | None: + strict_fingerprint = str(strict.get("source_fingerprint", "")) + fastmath_fingerprint = str(fastmath.get("source_fingerprint", "")) + if strict_fingerprint != fastmath_fingerprint: + return "strict and fast-math source fingerprints differ" + if _normalized_metadata(strict) != _normalized_metadata(fastmath): + return "strict and fast-math run environments or sample profiles differ" + return None + + +def _fltx_rows( + dataset: build_tables.Dataset, + target: build_tables.Target, + precision: str, +) -> dict[tuple[str, str], dict[str, str]]: + rows: dict[tuple[str, str], dict[str, str]] = {} + for ( + row_target, + row_precision, + group, + operation, + implementation, + ), row in dataset.canonical.items(): + if ( + row_target != target + or row_precision != precision + or implementation != "fltx" + or (group, operation) in build_tables.REPORT_EXCLUDED_OPERATIONS + ): + continue + display = overview._display_row( + dataset, + target, + precision, + group, + operation, + implementation, + row, + normal_only=True, + ) + assert display is not None + rows[(group, operation)] = display + return rows + + +def _ordered_operations( + rows: dict[tuple[str, str], dict[str, str]], +) -> list[tuple[str, str]]: + return sorted( + rows, + key=lambda value: ( + build_tables.GROUP_ORDER.get(value[0], len(build_tables.GROUP_ORDER)), + value[0], + build_tables.OPERATION_ORDER.get(value[0], {}).get( + value[1], len(build_tables.OPERATION_ORDER.get(value[0], {})), + ), + value[1], + ), + ) + + +def _comparison_rows( + comparison: Comparison, + target: build_tables.Target, + precision: str, +) -> tuple[ + dict[tuple[str, str], dict[str, str]], + dict[tuple[str, str], dict[str, str]], + list[tuple[str, str]], +]: + strict = _fltx_rows(comparison.strict, target, precision) + fastmath = _fltx_rows(comparison.fastmath, target, precision) + if not strict: + raise MetricsError(f"{target.label} {precision}: no strict FLTX operations") + if set(strict) != set(fastmath): + missing = sorted(set(strict) - set(fastmath)) + extra = sorted(set(fastmath) - set(strict)) + raise MetricsError( + f"{target.label} {precision}: strict/fast-math operation mismatch " + f"(missing {missing[:5]}, unexpected {extra[:5]})" + ) + for key in strict: + left = strict[key] + right = fastmath[key] + for field in ("mean_bits", "worst_bits", "domains_total", "ns_iter"): + if bool(left[field]) != bool(right[field]): + raise MetricsError( + f"{target.label} {precision} {key[1]}: " + f"strict/fast-math {field} availability differs" + ) + if left["domains_total"] != right["domains_total"]: + raise MetricsError( + f"{target.label} {precision} {key[1]}: " + "strict/fast-math domain totals differ" + ) + if ( + left.get("special_support", "-") == "-" + ) != ( + right.get("special_support", "-") == "-" + ): + raise MetricsError( + f"{target.label} {precision} {key[1]}: " + "strict/fast-math special-value applicability differs" + ) + if ( + left.get("signed_zero_support", "-") == "-" + ) != ( + right.get("signed_zero_support", "-") == "-" + ): + raise MetricsError( + f"{target.label} {precision} {key[1]}: " + "strict/fast-math signed-zero applicability differs" + ) + if ( + left.get("subnormal_support", "-") == "-" + ) != ( + right.get("subnormal_support", "-") == "-" + ): + raise MetricsError( + f"{target.label} {precision} {key[1]}: " + "strict/fast-math subnormal applicability differs" + ) + return strict, fastmath, _ordered_operations(strict) + + +def load_comparison( + input_root: Path, + target: build_tables.Target, +) -> Comparison: + detail = input_root / target.platform / target.architecture / "detail" + strict_path = detail / f"{run_metadata_stem(target.compiler, 'strict')}.json" + fastmath_path = detail / f"{run_metadata_stem(target.compiler, 'fastmath')}.json" + strict_metadata = build_tables._metadata(strict_path, target) + fastmath_metadata = build_tables._metadata(fastmath_path, target) + strict = build_tables.load(input_root, (target,), "strict") + fastmath = build_tables.load(input_root, (target,), "fastmath") + reason = _compatibility_reason(strict_metadata, fastmath_metadata) + if reason is not None: + raise MetricsError(reason) + fingerprint = str(strict_metadata["source_fingerprint"]) + comparison = Comparison( + strict, + fastmath, + strict_metadata, + fastmath_metadata, + fingerprint, + ) + for precision in PRECISIONS: + _comparison_rows(comparison, target, precision) + return comparison + + +def _small_delta(value: float) -> str: + magnitude = abs(value) + if magnitude >= 0.05: + return f"{magnitude:.1f}" + if magnitude >= 0.0005: + return f"{magnitude:.3f}".rstrip("0").rstrip(".") + return f"{magnitude:.3g}" + + +def _accuracy_spans( + strict_value: str, + fastmath_value: str, +) -> tuple[tuple[str, str], ...]: + if not strict_value: + return (("-", MUTED_TEXT),) + strict = float(strict_value) + fastmath = float(fastmath_value) + strict_exact = math.isinf(strict) + fastmath_exact = math.isinf(fastmath) + base = overview._fmt_bits(strict_value) + base_color = overview.EXACT_TEXT if strict_exact else NEUTRAL_TEXT + if strict == fastmath: + return ((base, base_color),) + if strict_exact: + return ( + (base, base_color), + (f" (\u2192 {overview._fmt_bits(fastmath_value)})", REGRESSION_TEXT), + ) + if fastmath_exact: + return ( + (base, base_color), + (" (\u2192 exact)", IMPROVEMENT_TEXT), + ) + delta = fastmath - strict + sign = "+" if delta > 0 else "-" + color = IMPROVEMENT_TEXT if delta > 0 else REGRESSION_TEXT + return ( + (base, base_color), + (f" ({sign}{_small_delta(delta)})", color), + ) + + +def _domain_spans( + strict_row: dict[str, str], + fastmath_row: dict[str, str], +) -> tuple[tuple[str, str], ...]: + base, _, base_color = overview._domain_style(strict_row) + if base == "-": + return ((base, base_color),) + strict = int(strict_row["domains_passed"]) + fastmath = int(fastmath_row["domains_passed"]) + delta = fastmath - strict + if delta == 0: + return ((base, base_color),) + sign = "+" if delta > 0 else "-" + color = IMPROVEMENT_TEXT if delta > 0 else REGRESSION_TEXT + return ((base, base_color), (f" ({sign}{abs(delta)})", color)) + + +def _performance_spans( + strict_value: str, + fastmath_value: str, +) -> tuple[tuple[str, str], ...]: + if not strict_value: + return (("-", MUTED_TEXT),) + strict = float(strict_value) + fastmath = float(fastmath_value) + base = f"{overview._fmt_ns(strict_value)} ns" + if strict == fastmath: + return ((base, NEUTRAL_TEXT),) + delta = fastmath - strict + sign = "+" if delta > 0 else "-" + color = REGRESSION_TEXT if delta > 0 else IMPROVEMENT_TEXT + return ( + (base, NEUTRAL_TEXT), + ( + f" ({sign}{overview._fmt_ns(str(abs(delta)))} ns)", + color, + ), + ) + + +def _special_spans( + strict_value: str, + fastmath_value: str, +) -> tuple[tuple[str, str], ...]: + if strict_value not in _SPECIAL_MEMBERS or fastmath_value not in _SPECIAL_MEMBERS: + raise MetricsError("malformed special-value support category") + spans: list[tuple[str, str]] = [ + (strict_value, overview.SUPPORT[strict_value]) + ] + if strict_value == fastmath_value: + return tuple(spans) + removed = _SPECIAL_MEMBERS[strict_value] - _SPECIAL_MEMBERS[fastmath_value] + added = _SPECIAL_MEMBERS[fastmath_value] - _SPECIAL_MEMBERS[strict_value] + spans.append((" (", NEUTRAL_TEXT)) + changes: list[tuple[str, str]] = [] + for capability in ("Inf", "NaN"): + if capability in removed: + changes.append((f"-{capability}", REGRESSION_TEXT)) + for capability in ("Inf", "NaN"): + if capability in added: + changes.append((f"+{capability}", IMPROVEMENT_TEXT)) + for index, change in enumerate(changes): + if index: + spans.append((" ", NEUTRAL_TEXT)) + spans.append(change) + spans.append((")", NEUTRAL_TEXT)) + return tuple(spans) + + +def _boolean_support_spans( + strict_value: str, + fastmath_value: str, + label: str, +) -> tuple[tuple[str, str], ...]: + symbols = {"yes": "✓", "no": "✗", "-": "-"} + colors = {"yes": IMPROVEMENT_TEXT, "no": REGRESSION_TEXT, "-": MUTED_TEXT} + if strict_value not in symbols or fastmath_value not in symbols: + raise MetricsError(f"malformed {label} support category") + spans = [(symbols[strict_value], colors[strict_value])] + if strict_value != fastmath_value: + spans.extend(( + (" (", NEUTRAL_TEXT), + (symbols[fastmath_value], colors[fastmath_value]), + (")", NEUTRAL_TEXT), + )) + return tuple(spans) + + +def _signed_zero_spans( + strict_value: str, + fastmath_value: str, +) -> tuple[tuple[str, str], ...]: + return _boolean_support_spans( + strict_value, fastmath_value, "signed-zero", + ) + + +def _subnormal_spans( + strict_value: str, + fastmath_value: str, +) -> tuple[tuple[str, str], ...]: + return _boolean_support_spans( + strict_value, fastmath_value, "subnormal", + ) + + +def _plain(spans: tuple[tuple[str, str], ...]) -> str: + return "".join(text for text, _ in spans) + + +def _cell_spans( + strict_row: dict[str, str], + fastmath_row: dict[str, str], +) -> tuple[tuple[tuple[str, str], ...], ...]: + return ( + _accuracy_spans(strict_row["mean_bits"], fastmath_row["mean_bits"]), + _accuracy_spans(strict_row["worst_bits"], fastmath_row["worst_bits"]), + _domain_spans(strict_row, fastmath_row), + _performance_spans(strict_row["ns_iter"], fastmath_row["ns_iter"]), + _special_spans( + strict_row.get("special_support", "-"), + fastmath_row.get("special_support", "-"), + ), + _signed_zero_spans( + strict_row.get("signed_zero_support", "-"), + fastmath_row.get("signed_zero_support", "-"), + ), + _subnormal_spans( + strict_row.get("subnormal_support", "-"), + fastmath_row.get("subnormal_support", "-"), + ), + ) + + +def _column_widths( + strict: dict[tuple[str, str], dict[str, str]], + fastmath: dict[tuple[str, str], dict[str, str]], + operations: list[tuple[str, str]], +) -> tuple[int, ...]: + visible = { + "mean": ["mean"], + "worst": ["worst"], + "pass": ["pass"], + "benchmark": ["time"], + "special": ["Inf/", "NaN"], + "signed_zero": ["±0"], + "subnormal": ["Subnorm"], + } + keys = tuple(visible) + for operation in operations: + values = _cell_spans(strict[operation], fastmath[operation]) + for key, spans in zip(keys, values): + visible[key].append(_plain(spans)) + + def required(lines: list[str] | tuple[str, ...]) -> int: + return ( + math.ceil( + max(map(len, lines), default=0) + * overview._estimated_character_width("full", 9) + ) + + overview.CELL_PADDING + ) + + widths = [ + max(minimum, required(visible[key])) + for (key, _, minimum) in overview._column_specs("fastmath") + ] + accuracy_width = required(("bits accurate",)) + deficit = max(0, accuracy_width - widths[0] - widths[1]) + widths[0] += (deficit + 1) // 2 + widths[1] += deficit // 2 + widths[2] = max(widths[2], required(("domain",))) + widths[3] = max(widths[3], required(("performance",))) + widths[4] = max(widths[4], required(("Inf/", "NaN"))) + widths[5] = max(widths[5], required(("±0",))) + widths[6] = max(widths[6], required(("Subnorm",))) + return tuple(widths) + + +def _tooltip( + comparison: Comparison, + operation: str, + strict: dict[str, str], + fastmath: dict[str, str], +) -> str: + return "\n".join(( + f"fltx {operation}", + f"strict run: {comparison.strict_metadata['run_id']}", + f"fast-math run: {comparison.fastmath_metadata['run_id']}", + f"source fingerprint: {comparison.fingerprint}", + f"mean bits: {strict['mean_bits'] or '-'} -> {fastmath['mean_bits'] or '-'}", + f"worst bits: {strict['worst_bits'] or '-'} -> {fastmath['worst_bits'] or '-'}", + ( + f"domains: {strict['domains_passed'] or '-'}/" + f"{strict['domains_total'] or '-'} -> " + f"{fastmath['domains_passed'] or '-'}/" + f"{fastmath['domains_total'] or '-'}" + ), + f"time: {strict['ns_iter'] or '-'} ns -> {fastmath['ns_iter'] or '-'} ns", + ( + f"special values: {strict.get('special_support', '-')} -> " + f"{fastmath.get('special_support', '-')}" + ), + ( + f"signed zero: {strict.get('signed_zero_support', '-')} -> " + f"{fastmath.get('signed_zero_support', '-')}" + ), + ( + f"subnormal support: {strict.get('subnormal_support', '-')} -> " + f"{fastmath.get('subnormal_support', '-')}" + ), + )) + + +def render_comparison( + comparison: Comparison, + target: build_tables.Target, + precision: str, +) -> str: + strict, fastmath, operations = _comparison_rows( + comparison, target, precision, + ) + column_widths = _column_widths(strict, fastmath, operations) + operation_width = overview._operation_width(operations, "full") + block_width = sum(column_widths) + width = ( + overview.MARGIN * 2 + + operation_width + + overview.TABLE_GAP + + block_width + ) + header_height = sum(overview.HEADER_HEIGHTS) + body_y = overview.TITLE_HEIGHT + header_height + operation_groups = overview._grouped_operations(operations) + body_height = ( + overview.ROW_HEIGHT * len(operations) + + overview.GROUP_ROW_HEIGHT * len(operation_groups) + ) + height = body_y + body_height + overview.FOOTER_HEIGHT + parts = [ + '', + ( + f'' + ), + overview._font_css("full"), + f'', + ] + add_text = partial(overview._text, parts) + add_spans = partial(overview._text_spans, parts) + add_lines = partial(overview._text_lines, parts) + add_text( + overview.MARGIN, + 23, + f"{precision} strict vs consumer fast-math \u2014 {target.label}", + anchor="start", + weight="bold", + size=15, + ) + add_text( + overview.MARGIN, + 42, + ( + "Strict first; deltas are fast-math - strict. Accuracy excludes " + "the separate subnormal domain." + ), + anchor="start", + fill="#aeb4bf", + size=10, + ) + + header_y = overview.TITLE_HEIGHT + overview._rect( + parts, + overview.MARGIN, + header_y, + operation_width, + header_height, + "#2B2B2B", + ) + add_text( + overview.MARGIN + operation_width / 2, + header_y + header_height / 2 + 4, + "operation", + weight="bold", + size=10, + ) + block_x = overview.MARGIN + operation_width + overview.TABLE_GAP + header_fill = overview.FLTX_TINT[0] + overview._rect( + parts, block_x, header_y, block_width, + overview.HEADER_HEIGHTS[0], header_fill, + ) + add_text( + block_x + block_width / 2, + header_y + 16, + f"bl::{precision}", + weight="bold", + fill="#ffffff", + size=10, + ) + + second_y = header_y + overview.HEADER_HEIGHTS[0] + groups = ( + (("bits accurate",), column_widths[0] + column_widths[1], False), + (("domain",), column_widths[2], False), + (("performance",), column_widths[3], False), + (("Inf/", "NaN"), column_widths[4], True), + (("±0",), column_widths[5], True), + (("Subnorm",), column_widths[6], True), + ) + group_x = block_x + for lines, group_width, spans_subheader in groups: + group_height = ( + overview.HEADER_HEIGHTS[1] + overview.HEADER_HEIGHTS[2] + if spans_subheader + else overview.HEADER_HEIGHTS[1] + ) + overview._rect( + parts, group_x, second_y, group_width, group_height, header_fill, + ) + add_lines( + group_x + group_width / 2, + second_y, + group_height, + lines, + size=9, + ) + group_x += group_width + + third_y = second_y + overview.HEADER_HEIGHTS[1] + column_x = block_x + leaf_headers = ( + ("mean",), ("worst",), ("pass",), ("time",), (), (), (), + ) + for lines, column_width in zip(leaf_headers, column_widths): + if lines: + overview._rect( + parts, + column_x, + third_y, + column_width, + overview.HEADER_HEIGHTS[2], + header_fill, + ) + add_lines( + column_x + column_width / 2, + third_y, + overview.HEADER_HEIGHTS[2], + lines, + size=9, + ) + column_x += column_width + + group_spans: list[tuple[int, int, int]] = [] + y = body_y + row_index = 0 + for report_group, group_operations in operation_groups: + group_y = y + for left, table_width in ( + (overview.MARGIN, operation_width), + (block_x, block_width), + ): + overview._rect( + parts, + left, + group_y, + table_width, + overview.GROUP_ROW_HEIGHT, + overview.GROUP_ROW_FILL, + ) + add_text( + overview.MARGIN + 7, + group_y + 13, + build_tables.GROUP_LABELS.get( + report_group, + report_group.replace("_", " ").title(), + ), + anchor="start", + fill=overview.GROUP_ROW_TEXT, + size=10, + ) + y += overview.GROUP_ROW_HEIGHT + operations_y = y + for group, operation in group_operations: + body_fill = overview.OPERATION_ROW_FILLS[row_index % 2] + overview._rect( + parts, + overview.MARGIN, + y, + operation_width, + overview.ROW_HEIGHT, + body_fill, + ) + add_text( + overview.MARGIN + 7, + y + 15, + operation, + anchor="start", + fill="#f1f2f4", + size=10, + ) + strict_row = strict[(group, operation)] + fastmath_row = fastmath[(group, operation)] + values = _cell_spans(strict_row, fastmath_row) + tooltip = _tooltip( + comparison, operation, strict_row, fastmath_row, + ) + column_x = block_x + for column_width, spans in zip(column_widths, values): + parts.append("") + parts.append(f"{html.escape(tooltip)}") + overview._rect( + parts, + column_x, + y, + column_width, + overview.ROW_HEIGHT, + body_fill, + ) + add_spans( + column_x + column_width / 2, + y + 15, + spans, + size=9, + ) + parts.append("") + column_x += column_width + y += overview.ROW_HEIGHT + row_index += 1 + group_spans.append((group_y, operations_y, y)) + + grid_bottom = y + for left, right in ( + (overview.MARGIN, overview.MARGIN + operation_width), + (block_x, block_x + block_width), + ): + overview._line(parts, left, header_y, right, header_y, stroke=overview.GRID_STRONG) + overview._line(parts, left, header_y, left, grid_bottom, stroke=overview.GRID_STRONG) + overview._line(parts, right, header_y, right, grid_bottom, stroke=overview.GRID_STRONG) + overview._line(parts, left, grid_bottom, right, grid_bottom, stroke=overview.GRID_STRONG) + + overview._line( + parts, + block_x, + second_y, + block_x + block_width, + second_y, + stroke=overview.GRID_REGULAR, + ) + overview._line( + parts, + block_x, + third_y, + block_x + sum(column_widths[:4]), + third_y, + stroke=overview.GRID_REGULAR, + ) + boundaries: list[int] = [] + position = block_x + for column_width in column_widths[:-1]: + position += column_width + boundaries.append(position) + overview._line(parts, boundaries[0], third_y, boundaries[0], body_y) + for boundary in boundaries[1:]: + overview._line(parts, boundary, second_y, boundary, body_y) + + for group_y, operations_y, operations_end in group_spans: + for left, right in ( + (overview.MARGIN, overview.MARGIN + operation_width), + (block_x, block_x + block_width), + ): + overview._line(parts, left, group_y, right, group_y, stroke=overview.GRID_STRONG) + overview._line( + parts, left, operations_y, right, operations_y, + stroke=overview.GRID_STRONG, + ) + operation_y = operations_y + overview.ROW_HEIGHT + while operation_y < operations_end: + overview._line( + parts, left, operation_y, right, operation_y, + stroke=overview.GRID_REGULAR, + ) + operation_y += overview.ROW_HEIGHT + for boundary in boundaries: + overview._line( + parts, boundary, operations_y, boundary, operations_end, + stroke=overview.GRID_REGULAR, + ) + + add_text( + overview.MARGIN, + grid_bottom + 20, + "Deltas: green improves under fast-math; red regresses.", + anchor="start", + fill="#aeb4bf", + size=10, + ) + parts.append("") + return "\n".join(parts) + "\n" + + +def _clear_outputs(paths: tuple[Path, ...]) -> None: + for path in paths: + try: + path.unlink(missing_ok=True) + except OSError as error: + raise MetricsError(f"cannot remove stale comparison {path}: {error}") from error + + +def build( + input_root: Path, + output: Path, + target: build_tables.Target, + *, + required: bool = False, +) -> BuildResult: + paths = output_paths(output, target) + evidence = ( + *_evidence_paths(input_root, target, "strict"), + *_evidence_paths(input_root, target, "fastmath"), + ) + missing = [path for path in evidence if not path.is_file()] + if missing: + reason = "paired strict/fast-math evidence is incomplete" + if required: + raise MetricsError(f"{reason}: missing {missing[0]}") + _clear_outputs(paths) + return BuildResult((), reason) + + try: + comparison = load_comparison(input_root, target) + except MetricsError as error: + reason = str(error) + if required: + raise + _clear_outputs(paths) + return BuildResult((), reason) + + rendered = tuple( + render_comparison(comparison, target, precision) + for precision in PRECISIONS + ) + output.mkdir(parents=True, exist_ok=True) + partial_paths: list[Path] = [] + for content, path in zip(rendered, paths): + partial_path = path.with_suffix(".partial" + path.suffix) + partial_paths.append(partial_path) + try: + partial_path.write_text( + content, + encoding="utf-8", + newline="\n", + ) + partial_path.replace(path) + except OSError as error: + _clear_outputs((*paths, *partial_paths)) + raise MetricsError(f"cannot write {path}: {error}") from error + return BuildResult(paths) + + +def parse_args(argv: list[str] | None = None) -> argparse.Namespace: + metrics_dir = Path(__file__).resolve().parents[1] + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--input", type=Path, default=metrics_dir / "data") + parser.add_argument( + "--output", + type=Path, + default=metrics_dir / "generated" / "profile_comparison", + ) + parser.add_argument("--target", type=build_tables._target, required=True) + parser.add_argument("--required", action="store_true", help=argparse.SUPPRESS) + return parser.parse_args(argv) + + +def main(argv: list[str] | None = None) -> int: + args = parse_args(argv) + try: + result = build( + args.input.resolve(), + args.output.resolve(), + args.target, + required=args.required, + ) + except (MetricsError, OSError, ValueError) as error: + print(f"profile comparison failed: {error}", file=sys.stderr) + return 1 + if result.skipped is not None: + print(f"profile comparison skipped: {result.skipped}", flush=True) + else: + for path in result.outputs: + print(path, flush=True) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/validation/metrics/_internal/build_tables.py b/validation/metrics/_internal/build_tables.py new file mode 100644 index 0000000..ce6676d --- /dev/null +++ b/validation/metrics/_internal/build_tables.py @@ -0,0 +1,616 @@ +#!/usr/bin/env python3 +"""Build target-specific accuracy SVG tables.""" + +from __future__ import annotations + +import argparse +import csv +import json +import math +import sys +from dataclasses import dataclass +from pathlib import Path +from typing import Iterable + +from run_metrics import ( + ACCURACY_FIELDS, + BENCHMARK_FIELDS, + CANONICAL_FIELDS, + CONSUMER_MODES, + SCHEMA_VERSION, + MetricsError, + _format, + _require_source_fingerprint, + _safe_component, + _validate_completeness, + _validate_identity, + _validate_implementations, + aggregate, + consumer_mode_suffix, + metrics_stem, + require_consumer_mode, + run_metadata_stem, +) +from svg_table import Cell, Column, Row, Table, WHITE, write + + +PRECISIONS = ("f128", "f256") +MISSING = "#e5e7eb" +RESULT_RED = "#b91c1c" +RESULT_AMBER = "#92400e" +RESULT_LIGHT_GREEN = "#15803d" +RESULT_DARK_GREEN = "#047857" +RATIO_COLOR_STOPS: tuple[tuple[float, str], ...] = ( + (0.10, "#FF0000"), + (0.45, "#FA5B11"), + (0.55, "#F19A51"), + (0.97, "#D7DA81"), + (1.00, "#9BE885"), + (2.00, "#90F086"), + (3.00, "#86F58A"), + (4.00, "#7CF98E"), + (8.00, "#72FD92"), + (20.00, "#70FF98"), +) +GROUP_ORDER = { + name: index + for index, name in enumerate(( + "arithmetic", "io", "rounding", "remainders", + "floating_point_utilities", "roots_and_powers", "exponentials", + "logarithms", "trigonometric", "hyperbolic", "inverse_hyperbolic", + "special_functions", "comparisons", "random", "mixed_workloads", + )) +} + +GROUP_LABELS = { + "arithmetic": "Arithmetic", + "mixed_workloads": "Mixed Workloads", + "io": "IO", + "rounding": "Rounding", + "remainders": "Remainders", + "floating_point_utilities": "Float Utils", + "roots_and_powers": "Roots & powers", + "exponentials": "Exponentials", + "logarithms": "Logarithms", + "trigonometric": "Trigonometric", + "hyperbolic": "Hyperbolic", + "inverse_hyperbolic": "Hyperbolic", + "special_functions": "Special", + "comparisons": "Comparisons", + "random": "Random", +} + +_OPERATIONS_BY_GROUP = { + "arithmetic": ("add", "subtract", "multiply", "divide"), + "io": ("to_string", "to_chars", "parse"), + "rounding": ( + "floor", "ceil", "trunc", "round", "roundeven", "lround", "llround", + "round_decimals", "round_significant", + ), + "remainders": ("fmod", "remainder", "remquo"), + "floating_point_utilities": ( + "abs", "fabs", "fma", "recip", "fmin", "fmax", "fdim", + "copysign", "ldexp", "scalbn", "scalbln", "frexp", "modf", "ilogb", + "logb", "nextafter", "nexttoward", + ), + "roots_and_powers": ("sqr", "sqrt", "cbrt", "hypot", "pow", "ipow"), + "exponentials": ("exp", "exp2", "expm1"), + "logarithms": ("log", "log2", "log10", "log1p"), + "trigonometric": ( + "sin", "cos", "sincos", "tan", "asin", "acos", "atan", "atan2", + ), + "hyperbolic": ("sinh", "cosh", "tanh"), + "inverse_hyperbolic": ("asinh", "acosh", "atanh"), + "special_functions": ("erfc", "erf", "tgamma", "lgamma"), + "comparisons": ( + "equal", "not_equal", "less", "greater", "less_equal", "greater_equal", + ), + "random": ("uniform_real", "normal"), + "mixed_workloads": ( + "product_sum", "chained_arithmetic", "affine_trig", "mandelbrot", + "matrix_vector_4x4", "horner_polynomial", "newton_root", + "log_sum_exp", "haversine", + ), +} +REPORT_EXCLUDED_OPERATIONS = frozenset({ + ("random", "mt19937_64"), +}) +REPORT_GROUP_ALIASES = { + "inverse_hyperbolic": "hyperbolic", +} + + +def _report_group(group: str) -> str: + return REPORT_GROUP_ALIASES.get(group, group) + + +OPERATION_ORDER = { + group: {operation: index for index, operation in enumerate(operations)} + for group, operations in _OPERATIONS_BY_GROUP.items() +} + +PLATFORM_LABELS = { + "windows": "Windows", + "wasm32": "WebAssembly", + "linux": "Linux", + "macos": "macOS", +} +ARCHITECTURE_LABELS = { + "x86_64": "x64", + "arm64": "ARM64", + "wasm32": "wasm32", +} +COMPILER_LABEL_LINES = { + "msvc": ("MSVC",), + "clangcl": ("Clang", "clang-cl"), + "mingw": ("GCC", "MinGW-w64"), + "gcc": ("GCC",), + "clang": ("Clang",), + "appleclang": ("Apple Clang",), + "emscripten": ("Clang", "Emscripten"), +} + + +def platform_label(value: str) -> str: + return PLATFORM_LABELS.get( + value.casefold(), value[:1].upper() + value[1:], + ) + + +def architecture_label(value: str) -> str: + return ARCHITECTURE_LABELS.get(value.casefold(), value) + + +def compiler_label_lines(value: str) -> tuple[str, ...]: + key = "".join( + character for character in value.casefold() if character.isalnum() + ) + return COMPILER_LABEL_LINES.get(key, (value,)) + + +def compiler_label(value: str) -> str: + lines = compiler_label_lines(value) + return lines[0] if len(lines) == 1 else f"{lines[0]} ({lines[1]})" + + +@dataclass(frozen=True) +class Target: + platform: str + architecture: str + compiler: str + + @property + def label(self) -> str: + return ( + f"{platform_label(self.platform)} / " + f"{architecture_label(self.architecture)} / " + f"{compiler_label(self.compiler)}" + ) + + @property + def identity(self) -> str: + return f"{self.platform}/{self.architecture}/{self.compiler}" + + +@dataclass +class Dataset: + canonical: dict[tuple[Target, str, str, str, str], dict[str, str]] + accuracy: dict[tuple[Target, str, str, str, str, str], dict[str, str]] + implementations: dict[tuple[Target, str], tuple[str, ...]] + revisions: set[str] + fingerprints: set[str] + runs: dict[Target, str] + consumer_mode: str = "strict" + + +def _target(value: str) -> Target: + parts = value.replace("\\", "/").split("/") + if len(parts) != 3 or not all(parts): + raise argparse.ArgumentTypeError( + "target must be PLATFORM/ARCHITECTURE/COMPILER" + ) + try: + return Target( + _safe_component(parts[0], "platform"), + _safe_component(parts[1], "architecture"), + _safe_component(parts[2], "compiler"), + ) + except MetricsError as error: + raise argparse.ArgumentTypeError(str(error)) from error + + +def _read(path: Path, fields: tuple[str, ...]) -> list[dict[str, str]]: + try: + with path.open(newline="", encoding="utf-8") as stream: + reader = csv.DictReader(stream) + if tuple(reader.fieldnames or ()) != fields: + raise MetricsError(f"{path}: incompatible schema/header") + rows = list(reader) + except OSError as error: + raise MetricsError(f"cannot read {path}: {error}") from error + if not rows: + raise MetricsError(f"{path}: contains no rows") + if any(None in row or any(value is None for value in row.values()) for row in rows): + raise MetricsError(f"{path}: malformed row width") + return rows + + +def _index( + rows: Iterable[dict[str, str]], + fields: tuple[str, ...], + source: Path, +) -> dict[tuple[str, ...], dict[str, str]]: + result: dict[tuple[str, ...], dict[str, str]] = {} + for row in rows: + key = tuple(row[field] for field in fields) + if key in result: + raise MetricsError(f"{source}: duplicate row {key}") + result[key] = row + return result + + +def _metadata(path: Path, target: Target) -> dict[str, object]: + try: + value = json.loads(path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError) as error: + raise MetricsError(f"cannot read {path}: {error}") from error + required = { + "schema_version", "run_id", "source_revision", "source_fingerprint", + "platform", "architecture", "compiler", "precisions", "implementations", "status", + "configuration", + } + if not isinstance(value, dict) or not required.issubset(value): + raise MetricsError(f"{path}: incomplete metadata") + if ( + value["schema_version"] != SCHEMA_VERSION + or value["status"] != "complete" + or value["platform"] != target.platform + or value["architecture"] != target.architecture + or value["compiler"] != target.compiler + or set(value["precisions"]) != set(PRECISIONS) + ): + raise MetricsError(f"{path}: incompatible or incomplete run") + return value + + +def load( + input_root: Path, + targets: Iterable[Target], + consumer_mode: str = "strict", +) -> Dataset: + targets = tuple(targets) + if not targets or len(set(targets)) != len(targets): + raise MetricsError("requested targets must be non-empty and unique") + + canonical: dict[tuple[Target, str, str, str, str], dict[str, str]] = {} + accuracy: dict[tuple[Target, str, str, str, str, str], dict[str, str]] = {} + implementations: dict[tuple[Target, str], tuple[str, ...]] = {} + revisions: set[str] = set() + fingerprints: set[str] = set() + runs: dict[Target, str] = {} + + for target in targets: + detail = input_root / target.platform / target.architecture / "detail" + metadata_path = detail / ( + f"{run_metadata_stem(target.compiler, consumer_mode)}.json" + ) + metadata = _metadata(metadata_path, target) + configuration = require_consumer_mode( + metadata["configuration"], + consumer_mode, + metadata_path, + ) + run_id = str(metadata["run_id"]) + revision = str(metadata["source_revision"]) + fingerprint = str(metadata["source_fingerprint"]) + _require_source_fingerprint(configuration, fingerprint, metadata_path) + if not run_id or not revision: + raise MetricsError(f"{metadata_path}: empty run identity") + revisions.add(revision) + fingerprints.add(fingerprint) + runs[target] = run_id + + for precision in PRECISIONS: + stem = metrics_stem(target.compiler, precision, consumer_mode) + canonical_path = ( + input_root / target.platform / target.architecture / f"{stem}.csv" + ) + accuracy_path = detail / f"{stem}_accuracy.csv" + benchmark_path = detail / f"{stem}_benchmark.csv" + canonical_rows = _read(canonical_path, CANONICAL_FIELDS) + accuracy_rows = _read(accuracy_path, ACCURACY_FIELDS) + benchmark_rows = _read(benchmark_path, BENCHMARK_FIELDS) + for rows, path in ( + (accuracy_rows, accuracy_path), + (benchmark_rows, benchmark_path), + ): + _validate_identity( + rows, path, run_id=run_id, revision=revision, + fingerprint=fingerprint, precision=precision, + ) + qdpp_enabled = configuration["harness"]["qdpp"] == "on" + tlfloat_enabled = configuration["harness"]["tlfloat"] == "on" + _validate_completeness( + accuracy_rows, benchmark_rows, precision=precision, + accuracy_path=accuracy_path, benchmark_path=benchmark_path, + qdpp_enabled=qdpp_enabled, + tlfloat_enabled=tlfloat_enabled, + consumer_mode=consumer_mode, + ) + _validate_implementations( + benchmark_rows, precision=precision, + benchmark_path=benchmark_path, + qdpp_enabled=qdpp_enabled, + tlfloat_enabled=tlfloat_enabled, + consumer_mode=consumer_mode, + ) + + try: + declared = tuple( + str(item["id"]) + for item in metadata["implementations"][precision] + ) + except (KeyError, TypeError) as error: + raise MetricsError( + f"{metadata_path}: invalid implementation metadata" + ) from error + observed_order = tuple(dict.fromkeys( + row["implementation"] for row in benchmark_rows + )) + if declared != observed_order or not declared or declared[0] != "fltx": + raise MetricsError( + f"{metadata_path}: implementation order does not match rows" + ) + implementations[(target, precision)] = declared + + expected_rows = aggregate( + accuracy_rows, benchmark_rows, + accuracy_path=accuracy_path, benchmark_path=benchmark_path, + run_id=run_id, + ) + expected = { + (row["group"], row["operation"], row["implementation"]): { + field: str(_format(row[field])) for field in CANONICAL_FIELDS + } + for row in expected_rows + } + observed = _index( + canonical_rows, + ("group", "operation", "implementation"), + canonical_path, + ) + if observed != expected: + raise MetricsError(f"{canonical_path}: canonical summary is inconsistent") + + canonical.update({ + (target, precision, group, operation, implementation): row + for (group, operation, implementation), row in observed.items() + }) + accuracy.update({ + ( + target, precision, group, operation, implementation, domain, + ): row + for (group, operation, implementation, domain), row in _index( + accuracy_rows, + ("group", "operation", "implementation", "domain"), + accuracy_path, + ).items() + }) + + if len(revisions) != 1 or len(fingerprints) != 1: + raise MetricsError("requested targets were not built from the same source") + return Dataset( + canonical, + accuracy, + implementations, + revisions, + fingerprints, + runs, + consumer_mode, + ) + + +def _mix_channel(a: int, b: int, t: float) -> int: + return round(a + (b - a) * t) + + +def _mix_color(a: str, b: str, t: float) -> str: + t = max(0.0, min(1.0, t)) + left = tuple(int(a[index:index + 2], 16) for index in (1, 3, 5)) + right = tuple(int(b[index:index + 2], 16) for index in (1, 3, 5)) + mixed = tuple(_mix_channel(x, y, t) for x, y in zip(left, right)) + return f"#{mixed[0]:02X}{mixed[1]:02X}{mixed[2]:02X}" + + +def _ratio_color_from_stops( + ratio: float | None, + stops: tuple[tuple[float, str], ...], +) -> str: + if ratio is None or math.isnan(ratio): + return "#FFFFFF" + if ratio <= stops[0][0]: + return stops[0][1] + if ratio >= stops[-1][0] or math.isinf(ratio): + return stops[-1][1] + low_ratio, low_color = stops[0] + for high_ratio, high_color in stops[1:]: + if ratio <= high_ratio: + t = ( + (math.log(ratio) - math.log(low_ratio)) + / (math.log(high_ratio) - math.log(low_ratio)) + ) + t = max(0.0, min(1.0, t)) + t = t * t * (3.0 - 2.0 * t) + return _mix_color(low_color, high_color, t) + low_ratio, low_color = high_ratio, high_color + return stops[-1][1] + + +def _ratio_color(ratio: float | None) -> str: + """Vivid ratio palette used for result text on dark reports.""" + + return _ratio_color_from_stops(ratio, RATIO_COLOR_STOPS) + + +def _margin_text_color(margin: float, passed: bool) -> str: + if not passed or margin < 0: + return RESULT_RED + if margin < 4: + return RESULT_AMBER + if margin <= 16: + return RESULT_LIGHT_GREEN + return RESULT_DARK_GREEN + + +def _fmt(value: float) -> str: + return f"{value:.1f}" + + +def _columns(targets: tuple[Target, ...]) -> tuple[Column, ...]: + return tuple( + Column(target.label, precision) + for precision in PRECISIONS + for target in targets + ) + + +def _operations(dataset: Dataset) -> list[tuple[str, str]]: + pairs = { + (key[2], key[3]) + for key in dataset.canonical + if (key[2], key[3]) not in REPORT_EXCLUDED_OPERATIONS + } + return sorted( + pairs, + key=lambda item: ( + GROUP_ORDER.get(item[0], len(GROUP_ORDER)), + item[0], + OPERATION_ORDER.get(item[0], {}).get( + item[1], len(OPERATION_ORDER.get(item[0], {})), + ), + item[1], + ), + ) + + +def accuracy_table(dataset: Dataset, targets: tuple[Target, ...]) -> Table: + rows = [] + for group, operation in _operations(dataset): + cells = [] + for precision in PRECISIONS: + for target in targets: + fltx = dataset.canonical.get( + (target, precision, group, operation, "fltx") + ) + if fltx is None or not fltx["worst_bits"]: + cells.append(Cell(("—",), MISSING, tooltip="No accuracy result")) + continue + passed = fltx["accuracy_pass"] == "yes" + margin = float(fltx["min_margin_bits"]) + exact = math.isinf(float(fltx["worst_bits"])) + lines = ( + ("exact",) + if exact + else ( + f"avg {_fmt(float(fltx['mean_bits']))}b", + f"min {_fmt(float(fltx['worst_bits']))}b", + ) + ) + ( + f"{'✓' if passed else '!'} " + f"{fltx['domains_passed']}/{fltx['domains_total']} domains", + ) + tooltip = [ + f"{target.label}; {precision}; {group} / {operation}", + f"{fltx['implementation_label']} ({fltx['api']}): " + f"mean {fltx['mean_bits']} bits; p01 {fltx['p01_bits']} bits; " + f"worst {fltx['worst_bits']} bits; " + f"margin {fltx['min_margin_bits']} bits", + ] + cells.append(Cell( + lines, WHITE, + _margin_text_color(margin, passed), + tooltip="\n".join(tooltip), + )) + rows.append(Row(GROUP_LABELS.get(group, group), operation, tuple(cells))) + return Table( + ( + "fltx consumer fast-math accuracy consistency" + if dataset.consumer_mode == "fastmath" + else "fltx accuracy consistency" + ), + ( + "FLTX MPFR-relative average and minimum tested bits accurate by target " + "with consumer fast-math enabled." + if dataset.consumer_mode == "fastmath" + else "FLTX MPFR-relative average and minimum tested bits accurate by target." + ), + _columns(targets), + tuple(rows), + ( + "✓ All FLTX domains pass · ! At least one FLTX domain failed · — Not applicable", + "Competitor results remain available in the per-target overview and CSV data.", + ), + ) + + +def build( + input_root: Path, + targets: tuple[Target, ...], + output: Path, + consumer_mode: str = "strict", +) -> list[Path]: + dataset = load(input_root, targets, consumer_mode) + suffix = consumer_mode_suffix(consumer_mode) + path = output / f"accuracy_table{suffix}.svg" + write(accuracy_table(dataset, targets), path) + metadata = { + "schema_version": SCHEMA_VERSION, + "consumer_mode": consumer_mode, + "source_revision": next(iter(dataset.revisions)), + "source_fingerprint": next(iter(dataset.fingerprints)), + "targets": [target.identity for target in targets], + "run_ids": { + target.identity: dataset.runs[target] + for target in targets + }, + "outputs": [path.name], + } + (output / f"tables_run{suffix}.json").write_text( + json.dumps(metadata, indent=2, sort_keys=True) + "\n", + encoding="utf-8", + ) + return [path] + + +def parse_args(argv: list[str] | None = None) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--input", type=Path, default=Path(__file__).parents[1] / "data") + parser.add_argument("--targets", type=_target, nargs="+", required=True) + parser.add_argument("--output", type=Path, default=Path(__file__).parents[1] / "generated") + parser.add_argument( + "--consumer-mode", + choices=CONSUMER_MODES, + default="strict", + ) + return parser.parse_args(argv) + + +def main(argv: list[str] | None = None) -> int: + args = parse_args(argv) + try: + outputs = build( + args.input, + tuple(args.targets), + args.output, + args.consumer_mode, + ) + except (MetricsError, OSError, ValueError) as error: + print(f"table build failed: {error}", file=sys.stderr) + return 1 + for output in outputs: + print(output) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/validation/metrics/_internal/manifest.py b/validation/metrics/_internal/manifest.py new file mode 100644 index 0000000..e243a55 --- /dev/null +++ b/validation/metrics/_internal/manifest.py @@ -0,0 +1,359 @@ +"""Explicit release manifests for the metrics implementations.""" + +from __future__ import annotations + +from dataclasses import dataclass + + +Operation = tuple[str, str] +AccuracyRow = tuple[str, str, str] + + +@dataclass(frozen=True) +class Implementation: + id: str + short_label: str + label: str + nominal_bits: float + + +def _accuracy_rows(*, paired_arithmetic: bool) -> frozenset[AccuracyRow]: + arithmetic = { + operation: ("general", "subnormal") + for operation in ("add", "subtract", "multiply", "divide") + } if paired_arithmetic else { + "add": ( + "near_one", "moderate", "wide_exponent", "extreme_finite", "subnormal", + ), + "subtract": ("near_one", "cancellation", "subnormal"), + "multiply": ("near_one", "moderate", "wide_exponent", "extreme_finite"), + "divide": ("near_one", "moderate", "wide_exponent", "extreme_finite"), + } + operations = { + ("arithmetic", operation): domains + for operation, domains in arithmetic.items() + } | { + ("io", "to_string"): ("moderate", "wide_exponent"), + ("io", "to_chars"): ("moderate", "wide_exponent"), + ("io", "parse"): ("moderate", "wide_exponent"), + ("floating_point_utilities", "fma"): ("moderate", "cancellation", "wide_exponent"), + ("floating_point_utilities", "abs"): ("wide_exponent", "subnormal"), + ("floating_point_utilities", "fabs"): ("moderate",), + ("roots_and_powers", "sqr"): ("moderate", "wide_exponent"), + ("floating_point_utilities", "recip"): ("near_one", "wide_exponent"), + ("floating_point_utilities", "fmin"): ("moderate", "wide_exponent"), + ("floating_point_utilities", "fmax"): ("moderate", "wide_exponent"), + ("floating_point_utilities", "fdim"): ("moderate", "cancellation"), + ("floating_point_utilities", "copysign"): ("moderate",), + ("rounding", "floor"): ("boundary",), + ("rounding", "ceil"): ("boundary",), + ("rounding", "trunc"): ("boundary",), + ("rounding", "round"): ("boundary",), + ("rounding", "roundeven"): ("boundary",), + ("rounding", "lround"): ("boundary",), + ("rounding", "llround"): ("boundary",), + ("rounding", "round_decimals"): ("moderate",), + ("rounding", "round_significant"): ("wide_exponent",), + ("remainders", "remquo"): ("moderate",), + ("floating_point_utilities", "modf"): ("moderate", "wide_exponent"), + ("floating_point_utilities", "ldexp"): ("wide_exponent",), + ("floating_point_utilities", "scalbn"): ("wide_exponent",), + ("floating_point_utilities", "scalbln"): ("wide_exponent",), + ("floating_point_utilities", "frexp"): ("wide_exponent", "subnormal"), + ("floating_point_utilities", "ilogb"): ("moderate", "wide_exponent"), + ("floating_point_utilities", "logb"): ("moderate", "wide_exponent"), + ("roots_and_powers", "sqrt"): ("near_one", "wide_exponent", "extreme_finite", "subnormal"), + ("roots_and_powers", "cbrt"): ("moderate", "wide_exponent"), + ("roots_and_powers", "hypot"): ("moderate", "wide_exponent"), + ("trigonometric", "sin"): ( + "moderate", "argument_reduction", "quadrant_boundaries", + ), + ("trigonometric", "cos"): ( + "moderate", "argument_reduction", "quadrant_boundaries", + ), + ("trigonometric", "tan"): ( + "moderate", "argument_reduction", "quadrant_boundaries", + ), + ("trigonometric", "atan"): ("near_one", "moderate"), + ("trigonometric", "atan2"): ("near_one", "moderate", "extreme_finite"), + ("trigonometric", "asin"): ("moderate", "boundary"), + ("trigonometric", "acos"): ("moderate", "boundary"), + ("exponentials", "exp"): ("moderate", "boundary"), + ("exponentials", "exp2"): ("moderate", "boundary"), + ("exponentials", "expm1"): ("moderate", "cancellation"), + ("logarithms", "log"): ("near_one", "wide_exponent", "extreme_finite"), + ("logarithms", "log2"): ("near_one", "wide_exponent", "extreme_finite"), + ("logarithms", "log10"): ("near_one", "wide_exponent", "extreme_finite"), + ("logarithms", "log1p"): ("moderate", "cancellation"), + ("roots_and_powers", "pow"): ("near_one", "moderate"), + ("roots_and_powers", "ipow"): ("moderate", "wide_exponent"), + ("remainders", "fmod"): ( + "moderate", + "wide_exponent", + ) + (("quotient_reduction",) if paired_arithmetic else ()), + ("remainders", "remainder"): ("moderate",), + ("hyperbolic", "sinh"): ("near_one", "moderate"), + ("hyperbolic", "cosh"): ("near_one", "moderate"), + ("hyperbolic", "tanh"): ("near_one", "moderate"), + ("inverse_hyperbolic", "asinh"): ("near_one", "moderate"), + ("inverse_hyperbolic", "acosh"): ("moderate", "boundary"), + ("inverse_hyperbolic", "atanh"): ("moderate", "boundary"), + ("special_functions", "erf"): ("near_one", "moderate"), + ("special_functions", "erfc"): ("near_one", "moderate"), + ("special_functions", "lgamma"): ("moderate",), + ("special_functions", "tgamma"): ("moderate",), + } + return frozenset( + (group, operation, domain) + for (group, operation), domains in operations.items() + for domain in domains + ) + + +_ALL_ACCURACY = _accuracy_rows(paired_arithmetic=True) +_NATIVE_ACCURACY = _accuracy_rows(paired_arithmetic=False) +_NATIVE_EXCLUDED_ACCURACY = frozenset({ + ("io", "to_string", "moderate"), + ("io", "to_string", "wide_exponent"), + ("io", "to_chars", "moderate"), + ("io", "to_chars", "wide_exponent"), + ("io", "parse", "moderate"), + ("io", "parse", "wide_exponent"), + ("trigonometric", "sin", "quadrant_boundaries"), + ("trigonometric", "cos", "quadrant_boundaries"), + ("trigonometric", "tan", "quadrant_boundaries"), +}) +_COMPARISON_ACCURACY = frozenset({ + ("comparisons", operation, "moderate") + for operation in ( + "equal", "not_equal", "less", "less_equal", "greater", "greater_equal", + ) +}) +EXPECTED_ACCURACY = { + "f32": _NATIVE_ACCURACY - _NATIVE_EXCLUDED_ACCURACY, + "f64": _NATIVE_ACCURACY - _NATIVE_EXCLUDED_ACCURACY, + "f128": _ALL_ACCURACY | _COMPARISON_ACCURACY, + "f256": _ALL_ACCURACY | _COMPARISON_ACCURACY, +} + +_BENCHMARK_OPERATIONS = frozenset({ + ("arithmetic", "add"), ("arithmetic", "subtract"), + ("arithmetic", "multiply"), ("arithmetic", "divide"), + ("floating_point_utilities", "fma"), ("floating_point_utilities", "abs"), ("floating_point_utilities", "fabs"), + ("roots_and_powers", "sqr"), ("floating_point_utilities", "recip"), ("floating_point_utilities", "fmin"), + ("floating_point_utilities", "fmax"), ("floating_point_utilities", "fdim"), ("floating_point_utilities", "copysign"), + ("rounding", "floor"), ("rounding", "ceil"), ("rounding", "trunc"), + ("rounding", "round"), ("rounding", "roundeven"), ("rounding", "lround"), + ("rounding", "llround"), ("rounding", "round_decimals"), + ("rounding", "round_significant"), + ("remainders", "fmod"), ("remainders", "remainder"), ("remainders", "remquo"), + ("floating_point_utilities", "modf"), ("floating_point_utilities", "ldexp"), + ("floating_point_utilities", "scalbn"), ("floating_point_utilities", "scalbln"), + ("floating_point_utilities", "frexp"), ("floating_point_utilities", "ilogb"), + ("floating_point_utilities", "logb"), ("floating_point_utilities", "nextafter"), + ("floating_point_utilities", "nexttoward"), ("comparisons", "equal"), + ("comparisons", "not_equal"), ("comparisons", "less"), + ("comparisons", "less_equal"), ("comparisons", "greater"), + ("comparisons", "greater_equal"), ("roots_and_powers", "sqrt"), ("roots_and_powers", "cbrt"), + ("roots_and_powers", "hypot"), ("trigonometric", "sin"), ("trigonometric", "cos"), ("trigonometric", "sincos"), + ("trigonometric", "tan"), ("trigonometric", "atan"), ("trigonometric", "atan2"), ("trigonometric", "asin"), + ("trigonometric", "acos"), ("exponentials", "exp"), ("exponentials", "exp2"), + ("exponentials", "expm1"), ("logarithms", "log"), ("logarithms", "log2"), + ("logarithms", "log10"), ("logarithms", "log1p"), ("roots_and_powers", "pow"), + ("roots_and_powers", "ipow"), ("mixed_workloads", "product_sum"), + ("hyperbolic", "sinh"), ("hyperbolic", "cosh"), ("hyperbolic", "tanh"), + ("inverse_hyperbolic", "asinh"), ("inverse_hyperbolic", "acosh"), ("inverse_hyperbolic", "atanh"), + ("special_functions", "erf"), ("special_functions", "erfc"), ("special_functions", "lgamma"), + ("special_functions", "tgamma"), ("io", "to_string"), ("io", "to_chars"), + ("io", "parse"), ("random", "mt19937_64"), ("random", "uniform_real"), + ("random", "normal"), ("mixed_workloads", "chained_arithmetic"), + ("mixed_workloads", "affine_trig"), ("mixed_workloads", "mandelbrot"), + ("mixed_workloads", "matrix_vector_4x4"), + ("mixed_workloads", "horner_polynomial"), + ("mixed_workloads", "newton_root"), + ("mixed_workloads", "log_sum_exp"), + ("mixed_workloads", "haversine"), +}) + +EXPECTED_BENCHMARK = { + precision: _BENCHMARK_OPERATIONS + for precision in ("f128", "f256") +} + +_NO_QDPP = frozenset({ + ("floating_point_utilities", "fma"), ("floating_point_utilities", "fdim"), ("floating_point_utilities", "copysign"), + ("rounding", "roundeven"), ("rounding", "lround"), ("rounding", "llround"), + ("rounding", "round_decimals"), ("rounding", "round_significant"), + ("floating_point_utilities", "modf"), ("floating_point_utilities", "frexp"), + ("floating_point_utilities", "ilogb"), ("floating_point_utilities", "logb"), + ("floating_point_utilities", "nextafter"), ("floating_point_utilities", "nexttoward"), ("roots_and_powers", "hypot"), + ("exponentials", "exp2"), ("logarithms", "log2"), ("special_functions", "erf"), + ("special_functions", "erfc"), ("special_functions", "lgamma"), ("special_functions", "tgamma"), + ("random", "mt19937_64"), ("random", "normal"), +}) + +_BOOST_UNAVAILABLE = frozenset({ + ("roots_and_powers", "sqr"), ("floating_point_utilities", "recip"), ("rounding", "roundeven"), + ("rounding", "round_decimals"), ("rounding", "round_significant"), + ("trigonometric", "sincos"), ("io", "to_chars"), ("random", "mt19937_64"), + ("random", "uniform_real"), ("random", "normal"), +}) + +_TLFLOAT_UNAVAILABLE = frozenset({ + ("roots_and_powers", "sqr"), ("floating_point_utilities", "recip"), + ("rounding", "lround"), ("rounding", "llround"), + ("rounding", "round_decimals"), + ("rounding", "round_significant"), + ("floating_point_utilities", "scalbn"), ("floating_point_utilities", "scalbln"), + ("floating_point_utilities", "logb"), ("roots_and_powers", "ipow"), ("io", "to_chars"), + ("random", "mt19937_64"), ("random", "uniform_real"), + ("random", "normal"), +}) + +IMPLEMENTATIONS = { + "f128": ( + Implementation("fltx", "fltx", "fltx bl::f128", 106.0), + Implementation("qdpp", "ddreal", "qdpp dd_real", 106.0), + Implementation( + "cppdd", "cppdd", "boost::multiprecision::cpp_double_double", 106.0, + ), + Implementation("tlfloat", "tlquad", "TLFloat Quad", 113.0), + ), + "f256": ( + Implementation("fltx", "fltx", "fltx bl::f256", 212.0), + Implementation("qdpp", "qdreal", "qdpp qd_real", 212.0), + Implementation( + "mpfr64", "mpfr64", + "boost::multiprecision::mpfr_float_backend<64>", + 214.0, + ), + Implementation("tlfloat", "tloct", "TLFloat Octuple", 237.0), + ), +} + + +def enabled_implementations( + precision: str, *, qdpp: bool, tlfloat: bool, +) -> tuple[Implementation, ...]: + return tuple( + implementation + for implementation in IMPLEMENTATIONS[precision] + if (qdpp or implementation.id != "qdpp") + and (tlfloat or implementation.id != "tlfloat") + ) + + +def benchmark_manifest( + precision: str, *, qdpp: bool, tlfloat: bool, +) -> dict[str, frozenset[Operation]]: + qd_missing = set(_NO_QDPP) + if precision == "f128": + qd_missing.update({("floating_point_utilities", "fmin"), ("floating_point_utilities", "fmax")}) + return { + implementation.id: ( + EXPECTED_BENCHMARK[precision] + if implementation.id == "fltx" + else EXPECTED_BENCHMARK[precision] - qd_missing + if implementation.id == "qdpp" + else EXPECTED_BENCHMARK[precision] - _TLFLOAT_UNAVAILABLE + if implementation.id == "tlfloat" + else EXPECTED_BENCHMARK[precision] - _BOOST_UNAVAILABLE + ) + for implementation in enabled_implementations( + precision, qdpp=qdpp, tlfloat=tlfloat, + ) + } + + +def accuracy_manifest( + precision: str, *, qdpp: bool, tlfloat: bool, +) -> dict[str, frozenset[AccuracyRow]]: + benchmark = benchmark_manifest( + precision, qdpp=qdpp, tlfloat=tlfloat, + ) + return { + implementation: frozenset( + row for row in EXPECTED_ACCURACY[precision] if row[:2] in operations + ) + for implementation, operations in benchmark.items() + } + + +def api_name( + implementation: str, + precision: str, + group: str, + operation: str, +) -> str: + """Return stable noteworthy API labels used by fixture tests and reports.""" + + if implementation == "fltx": + return f"bl::{operation}" + if implementation == "qdpp": + special = { + ("remainders", "remquo"): "qdpp divrem", + ("io", "to_string"): "qdpp to_string", + ("io", "to_chars"): "qdpp write", + ("io", "parse"): "qdpp read", + ("random", "uniform_real"): + "qdpp ddrand" if precision == "f128" else "qdpp qdrand", + ("floating_point_utilities", "recip"): "qdpp inv", + ("roots_and_powers", "sqr"): "qdpp sqr", + } + return special.get((group, operation), f"qdpp {operation}") + if implementation == "tlfloat": + special = { + ("arithmetic", "add"): "TLFloat operator+", + ("arithmetic", "subtract"): "TLFloat operator-", + ("arithmetic", "multiply"): "TLFloat operator*", + ("arithmetic", "divide"): "TLFloat operator/", + ("floating_point_utilities", "abs"): "tlfloat::fabs", + ("floating_point_utilities", "fabs"): "tlfloat::fabs", + ("rounding", "roundeven"): "tlfloat::rint", + ("floating_point_utilities", "nexttoward"): "tlfloat::nextafter", + ("comparisons", "equal"): "TLFloat operator==", + ("comparisons", "not_equal"): "TLFloat operator!=", + ("comparisons", "less"): "TLFloat operator<", + ("comparisons", "less_equal"): "TLFloat operator<=", + ("comparisons", "greater"): "TLFloat operator>", + ("comparisons", "greater_equal"): "TLFloat operator>=", + ("mixed_workloads", "product_sum"): "same expression", + ("mixed_workloads", "chained_arithmetic"): "same workload", + ("mixed_workloads", "affine_trig"): "same workload", + ("mixed_workloads", "mandelbrot"): "same workload", + ("mixed_workloads", "matrix_vector_4x4"): "same workload", + ("mixed_workloads", "horner_polynomial"): "same workload", + ("mixed_workloads", "newton_root"): "same workload", + ("mixed_workloads", "log_sum_exp"): "same workload", + ("mixed_workloads", "haversine"): "same workload", + ("io", "to_string"): "tlfloat::to_string", + ("io", "parse"): "TLFloat string constructor", + } + return special.get((group, operation), f"tlfloat::{operation}") + boost = "boost::multiprecision" + special = { + ("roots_and_powers", "ipow"): f"{boost}::pow(value, int)", + ("floating_point_utilities", "nexttoward"): "boost::math::nextafter", + ("io", "to_string"): f"{boost}::number::str", + ("io", "parse"): f"{boost} string constructor", + } + return special.get((group, operation), f"{boost}::{operation}") + + +assert len(EXPECTED_BENCHMARK["f128"]) == 85 +assert len(EXPECTED_ACCURACY["f32"]) == 119 +assert len(EXPECTED_ACCURACY["f64"]) == 119 +_ALL = {"qdpp": True, "tlfloat": True} +assert len(benchmark_manifest("f128", **_ALL)["qdpp"]) == 60 +assert len(benchmark_manifest("f256", **_ALL)["qdpp"]) == 62 +assert len(benchmark_manifest("f128", **_ALL)["cppdd"]) == 75 +assert len(benchmark_manifest("f256", **_ALL)["mpfr64"]) == 75 +assert len(benchmark_manifest("f128", **_ALL)["tlfloat"]) == 71 +assert len(benchmark_manifest("f256", **_ALL)["tlfloat"]) == 71 +assert len(accuracy_manifest("f128", **_ALL)["fltx"]) == 127 +assert len(accuracy_manifest("f128", **_ALL)["qdpp"]) == 91 +assert len(accuracy_manifest("f256", **_ALL)["qdpp"]) == 95 +assert len(accuracy_manifest("f128", **_ALL)["cppdd"]) == 118 +assert len(accuracy_manifest("f256", **_ALL)["mpfr64"]) == 118 +assert len(accuracy_manifest("f128", **_ALL)["tlfloat"]) == 111 +assert len(accuracy_manifest("f256", **_ALL)["tlfloat"]) == 111 diff --git a/validation/metrics/_internal/preset_pipeline.py b/validation/metrics/_internal/preset_pipeline.py new file mode 100644 index 0000000..e8771db --- /dev/null +++ b/validation/metrics/_internal/preset_pipeline.py @@ -0,0 +1,722 @@ +#!/usr/bin/env python3 +"""Incrementally build runners, reuse compatible evidence, and render reports.""" + +from __future__ import annotations + +import argparse +import json +import subprocess +import sys +import uuid +from dataclasses import dataclass +from pathlib import Path +from typing import Mapping, Sequence + +VALIDATION_INTERNAL = Path(__file__).resolve().parents[2] / "_internal" +sys.path.insert(0, str(VALIDATION_INTERNAL)) + +from preset_support import ( + PipelineError, + PresetSelection, + msvc_environment, + msvc_target_architecture, + needs_msvc_environment, + read_json, + resolve_preset, +) + +import build_profile_comparison +from build_tables import Target +import run_metrics + + +RUNNER_SETS = { + "strict": ("fltx_accuracy", "fltx_benchmark"), + "fastmath": ("fltx_accuracy_fastmath", "fltx_benchmark_fastmath"), +} +RUNNER_TARGETS = tuple( + target + for targets in RUNNER_SETS.values() + for target in targets +) +DEFAULT_WORKFLOW = "standard" + + +@dataclass(frozen=True) +class MetricsWorkflow: + sample_mode: str + canonical_publication: bool = False + + +@dataclass(frozen=True) +class MetricsPaths: + data: Path + generated: Path + + +METRICS_WORKFLOWS = { + "quick": MetricsWorkflow("small"), + "standard": MetricsWorkflow("standard"), + "full": MetricsWorkflow("full"), + "release": MetricsWorkflow("full", canonical_publication=True), +} + + +def prepare_file_api_query(binary_dir: Path) -> None: + query = binary_dir / ".cmake" / "api" / "v1" / "query" / "client-fltx-metrics" + query.mkdir(parents=True, exist_ok=True) + (query / "query.json").write_text( + json.dumps( + {"requests": [{"kind": "codemodel", "version": {"major": 2}}]}, + indent=2, + ) + + "\n", + encoding="utf-8", + ) + + +def _codemodel_path(binary_dir: Path) -> Path: + reply = binary_dir / ".cmake" / "api" / "v1" / "reply" + indexes = sorted( + reply.glob("index-*.json"), + key=lambda path: path.stat().st_mtime_ns, + reverse=True, + ) + for index_path in indexes: + index = read_json(index_path) + client = index.get("reply", {}) + if not isinstance(client, dict): + continue + response = client.get("client-fltx-metrics", {}) + if not isinstance(response, dict): + continue + query = response.get("query.json", {}) + if not isinstance(query, dict): + continue + responses = query.get("responses", []) + if not isinstance(responses, list): + continue + for item in responses: + if ( + isinstance(item, dict) + and item.get("kind") == "codemodel" + and isinstance(item.get("jsonFile"), str) + ): + return reply / item["jsonFile"] + raise PipelineError( + f"CMake did not produce a File API codemodel under {reply}" + ) + + +def discover_runner_artifacts( + binary_dir: Path, + configuration: str | None, +) -> dict[str, Path]: + codemodel_path = _codemodel_path(binary_dir) + codemodel = read_json(codemodel_path) + configurations = codemodel.get("configurations") + if not isinstance(configurations, list) or not configurations: + raise PipelineError(f"{codemodel_path}: missing configurations") + + selected: dict[str, object] | None = None + if configuration is not None: + selected = next( + ( + value + for value in configurations + if isinstance(value, dict) + and str(value.get("name", "")).casefold() == configuration.casefold() + ), + None, + ) + if selected is None: + names = [ + str(value.get("name", "")) + for value in configurations + if isinstance(value, dict) + ] + raise PipelineError( + f"CMake File API has no {configuration!r} configuration " + f"(available: {', '.join(names)})" + ) + elif len(configurations) == 1 and isinstance(configurations[0], dict): + selected = configurations[0] + else: + raise PipelineError( + "multi-config build preset must specify its configuration" + ) + assert selected is not None + + targets = selected.get("targets") + if not isinstance(targets, list): + raise PipelineError(f"{codemodel_path}: selected configuration has no targets") + reply = codemodel_path.parent + artifacts: dict[str, Path] = {} + for target_name in RUNNER_TARGETS: + references = [ + value + for value in targets + if isinstance(value, dict) and value.get("name") == target_name + ] + if len(references) != 1 or not isinstance(references[0].get("jsonFile"), str): + raise PipelineError( + f"CMake File API expected one {target_name!r} target, " + f"found {len(references)}" + ) + target_path = reply / references[0]["jsonFile"] + target = read_json(target_path) + if target.get("type") != "EXECUTABLE": + raise PipelineError(f"{target_path}: {target_name} is not an executable") + values = target.get("artifacts") + if not isinstance(values, list) or not values: + raise PipelineError(f"{target_path}: {target_name} has no artifact") + candidates = [ + value["path"] + for value in values + if isinstance(value, dict) and isinstance(value.get("path"), str) + ] + name_on_disk = target.get("nameOnDisk") + if isinstance(name_on_disk, str): + named = [value for value in candidates if Path(value).name == name_on_disk] + if named: + candidates = named + if len(candidates) != 1: + raise PipelineError( + f"{target_path}: cannot identify the primary {target_name} artifact" + ) + artifact = Path(candidates[0]) + if not artifact.is_absolute(): + artifact = binary_dir / artifact + artifact = artifact.resolve() + if not artifact.is_file(): + raise PipelineError(f"built runner artifact does not exist: {artifact}") + artifacts[target_name] = artifact + return artifacts + + +def _run( + command: Sequence[str], + root: Path, + environment: Mapping[str, str] | None = None, +) -> None: + print(f"> {subprocess.list2cmdline(list(command))}", flush=True) + try: + result = subprocess.run( + command, + cwd=root, + env=dict(environment) if environment is not None else None, + check=False, + ) + except OSError as error: + raise PipelineError(f"cannot run {command[0]}: {error}") from error + if result.returncode: + raise PipelineError( + f"command exited with status {result.returncode}: " + f"{subprocess.list2cmdline(list(command))}" + ) + + +def metrics_paths( + root: Path, + workflow: str, + output_root: Path | None = None, +) -> MetricsPaths: + policy = METRICS_WORKFLOWS.get(workflow) + if policy is None: + raise PipelineError(f"unsupported metrics workflow {workflow!r}") + + metrics = (root / "validation" / "metrics").resolve() + canonical = MetricsPaths( + data=metrics / "data", + generated=metrics / "generated", + ) + if policy.canonical_publication: + if output_root is not None: + raise PipelineError("--release cannot be combined with --output-root") + return canonical + + selected = ( + output_root.resolve() + if output_root is not None + else metrics / "_unversioned" / workflow + ) + paths = MetricsPaths( + data=selected / "data", + generated=selected / "generated", + ) + if paths == canonical: + raise PipelineError("canonical metrics output requires --release") + return paths + + +def existing_runner_artifacts( + root: Path, + selection: PresetSelection, + sample_mode: str, + environment: Mapping[str, str] | None = None, +) -> dict[str, Path] | None: + """Return source-current runner artifacts without invoking CMake.""" + + try: + artifacts = discover_runner_artifacts( + selection.binary_dir, + selection.configuration, + ) + identities = set() + for consumer_mode, (accuracy_target, benchmark_target) in RUNNER_SETS.items(): + identities.add( + run_metrics.validate_runner_artifacts( + root, + { + "fltx_accuracy": artifacts[accuracy_target], + "fltx_benchmark": artifacts[benchmark_target], + }, + sample_mode=sample_mode, + consumer_mode=consumer_mode, + environment=environment, + ) + ) + if len(identities) != 1: + raise PipelineError( + "strict and consumer-fast-math runners identify different targets" + ) + platform_name, architecture_name, compiler_name = next(iter(identities)) + except (PipelineError, run_metrics.MetricsError, OSError) as error: + print( + f"existing metrics runners cannot be reused: {error}; " + "configuring/building", + flush=True, + ) + return None + + print( + "existing metrics runners match the current source fingerprint " + f"for {platform_name}/{architecture_name}/{compiler_name}; " + "CMake configure/build skipped", + flush=True, + ) + return artifacts + + +def run_pipeline( + root: Path, + preset: str, + *, + workflow: str = DEFAULT_WORKFLOW, + output_root: Path | None = None, + force_rerun: bool = False, + consumer_mode: str = "strict", +) -> list[Path]: + root = root.resolve() + if consumer_mode == "all": + requested_modes = tuple(RUNNER_SETS) + elif consumer_mode in RUNNER_SETS: + requested_modes = (consumer_mode,) + else: + raise PipelineError(f"unsupported consumer mode {consumer_mode!r}") + policy = METRICS_WORKFLOWS.get(workflow) + if policy is None: + raise PipelineError(f"unsupported metrics workflow {workflow!r}") + selected_sample_mode = policy.sample_mode + selected_paths = metrics_paths(root, workflow, output_root) + selection = resolve_preset(root, preset) + environment = selection.environment + artifacts = existing_runner_artifacts( + root, + selection, + selected_sample_mode, + environment, + ) + if artifacts is None: + cmake_environment: Mapping[str, str] | None = None + if needs_msvc_environment(selection): + cmake_environment = msvc_environment( + msvc_target_architecture(selection), + parent_environment=selection.environment, + ) + environment = cmake_environment + prepare_file_api_query(selection.binary_dir) + try: + _run( + [ + "cmake", + "--preset", + selection.configure_name, + "-DFLTX_METRICS_EXTERNAL_COMPARISONS=ON", + ], + root, + cmake_environment, + ) + except PipelineError as error: + hints = f"{selection.compiler_hint} {selection.target_hint}".casefold() + if "mingw" not in hints: + raise + raise PipelineError( + f"{error}\nMinGW preset {selection.configure_name!r} requires " + f"a MinGW compiler and {selection.generator} in the invoking " + "environment or a local CMake user preset; the vcpkg triplet " + "selects dependency binaries but does not provide these tools." + ) from error + _run( + [ + "cmake", + "--build", + "--preset", + selection.build_name, + "--target", + *RUNNER_TARGETS, + ], + root, + cmake_environment, + ) + artifacts = discover_runner_artifacts( + selection.binary_dir, + selection.configuration, + ) + + generated: list[Path] = [] + output = selected_paths.generated + comparison_target: str | None = None + comparison_input_root: str | None = None + comparison_identity: tuple[str, str, str] | None = None + for mode in requested_modes: + accuracy_target, benchmark_target = RUNNER_SETS[mode] + handoff = ( + root + / "build" + / "metrics" + / "pipeline" + / uuid.uuid4().hex + / f"{mode}_run_result.json" + ) + _run( + [ + sys.executable, + str( + root + / "validation" + / "metrics" + / "_internal" + / "run_metrics.py" + ), + "--accuracy", + str(artifacts[accuracy_target]), + "--benchmark", + str(artifacts[benchmark_target]), + "--consumer-mode", + mode, + "--sample-mode", + selected_sample_mode, + "--output-root", + str(selected_paths.data), + *( + ["--canonical-publication"] + if policy.canonical_publication + else [] + ), + "--result-file", + str(handoff), + *([] if force_rerun else ["--reuse-compatible"]), + ], + root, + environment, + ) + result = read_json(handoff) + expected_fields = { + "schema_version", + "run_id", + "sample_mode", + "consumer_mode", + "platform", + "architecture", + "compiler", + "target", + "input_root", + "metadata", + } + if ( + set(result) != expected_fields + or result.get("sample_mode") != selected_sample_mode + or result.get("consumer_mode") != mode + ): + raise PipelineError(f"{handoff}: invalid metrics result handoff") + target = result.get("target") + input_root = result.get("input_root") + if not isinstance(target, str) or not isinstance(input_root, str): + raise PipelineError(f"{handoff}: invalid metrics target or input root") + identity = ( + str(result["platform"]), + str(result["architecture"]), + str(result["compiler"]), + ) + if comparison_target is None: + comparison_target = target + comparison_input_root = input_root + comparison_identity = identity + elif ( + comparison_target != target + or comparison_input_root != input_root + or comparison_identity != identity + ): + raise PipelineError( + "consumer modes produced incompatible metrics targets" + ) + + native_handoff = handoff.with_name(f"{mode}_native_result.json") + _run( + [ + sys.executable, + str( + root + / "validation" + / "metrics" + / "_internal" + / "run_native_accuracy.py" + ), + "--accuracy", + str(artifacts[accuracy_target]), + "--consumer-mode", + mode, + "--sample-mode", + selected_sample_mode, + "--output-root", + str(selected_paths.data / "native" / mode), + "--result-file", + str(native_handoff), + *([] if force_rerun else ["--reuse-compatible"]), + ], + root, + environment, + ) + native_result = read_json(native_handoff) + native_fields = { + "schema_version", + "run_id", + "sample_mode", + "consumer_mode", + "platform", + "architecture", + "compiler", + "target", + "run_directory", + "metadata", + } + if ( + set(native_result) != native_fields + or native_result.get("sample_mode") != selected_sample_mode + or native_result.get("consumer_mode") != mode + or native_result.get("target") != target + or native_result.get("platform") != result["platform"] + or native_result.get("architecture") != result["architecture"] + or native_result.get("compiler") != result["compiler"] + ): + raise PipelineError(f"{native_handoff}: invalid native result handoff") + native_directory = Path(str(native_result["run_directory"])) + native_outputs = [ + Path(str(native_result["metadata"])), + *(native_directory / f"{precision}_accuracy.csv" + for precision in ("f32", "f64")), + ] + missing_native = [path for path in native_outputs if not path.is_file()] + if missing_native: + raise PipelineError( + "native baseline did not create complete evidence: " + + ", ".join(str(path) for path in missing_native) + ) + + _run( + [ + sys.executable, + str(root / "validation" / "metrics" / "rebuild_tables.py"), + "--input", + input_root, + "--output", + str(output), + "--targets", + target, + "--consumer-mode", + mode, + ], + root, + environment, + ) + mode_suffix = run_metrics.consumer_mode_suffix(mode) + mode_outputs = [ + output / "accuracy" / f"accuracy_table{mode_suffix}.svg", + output / "performance" / f"performance_table{mode_suffix}.svg", + output + / "performance" + / f"performance_table{mode_suffix}_compact.svg", + ] + for precision in run_metrics.PRECISIONS: + base = ( + f"{result['platform']}_{result['architecture']}_" + f"{result['compiler']}_{precision}" + f"{mode_suffix}_overview" + ) + mode_outputs.extend( + ( + output / "overview" / f"{base}.svg", + output / "overview" / f"{base}_compact.svg", + ) + ) + missing = [path for path in mode_outputs if not path.is_file()] + if missing: + raise PipelineError( + "renderers did not create expected outputs: " + + ", ".join(str(path) for path in missing) + ) + generated.extend(mode_outputs) + + assert comparison_target is not None + assert comparison_input_root is not None + assert comparison_identity is not None + comparison_output = output / "profile_comparison" + _run( + [ + sys.executable, + str( + root + / "validation" + / "metrics" + / "_internal" + / "build_profile_comparison.py" + ), + "--input", + comparison_input_root, + "--output", + str(comparison_output), + "--target", + comparison_target, + *(["--required"] if consumer_mode == "all" else []), + ], + root, + environment, + ) + platform_name, architecture_name, compiler_name = comparison_identity + comparison_outputs = build_profile_comparison.output_paths( + comparison_output, + Target(platform_name, architecture_name, compiler_name), + ) + existing_comparisons = tuple( + path for path in comparison_outputs if path.is_file() + ) + if existing_comparisons and len(existing_comparisons) != len( + comparison_outputs + ): + raise PipelineError( + "profile comparison renderer created an incomplete output set" + ) + if consumer_mode == "all" and not existing_comparisons: + raise PipelineError( + "profile comparison renderer did not create required outputs" + ) + generated.extend(existing_comparisons) + return generated + + +def add_workflow_arguments(parser: argparse.ArgumentParser) -> None: + """Add the metrics workflow arguments shared by public entry points.""" + + modes = parser.add_mutually_exclusive_group() + modes.add_argument( + "--quick", + action="store_const", + const="quick", + dest="workflow", + help="run the half-sized small profile without publishing", + ) + modes.add_argument( + "--standard", + action="store_const", + const="standard", + dest="workflow", + help="run the standard development profile (default)", + ) + modes.add_argument( + "--full", + action="store_const", + const="full", + dest="workflow", + help="run the full profile without publishing", + ) + modes.add_argument( + "--release", + action="store_const", + const="release", + dest="workflow", + help=( + "publish the full canonical metrics profile; this flag takes no " + "value and cannot be combined with --output-root" + ), + ) + parser.set_defaults(workflow=DEFAULT_WORKFLOW) + parser.add_argument( + "--output-root", + type=Path, + metavar="PATH", + help=( + "development metrics root; data and generated directories are " + "created below PATH (not allowed with --release)" + ), + ) + parser.add_argument( + "--force-rerun", + action="store_true", + help=( + "rerun metrics phases even when compatible evidence exists; this " + "flag takes no value and source-current executables are still reused" + ), + ) + parser.add_argument( + "--consumer-mode", + choices=("strict", "fastmath", "all"), + default="strict", + metavar="{strict,fastmath,all}", + help=( + "consumer profile; allowed values are strict, fastmath, and all " + "(default: strict)" + ), + ) + + +def parse_args(argv: list[str] | None = None) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--preset", + required=True, + metavar="PRESET", + help="CMakePresets.json preset name", + ) + add_workflow_arguments(parser) + return parser.parse_args(argv) + + +def run_pipeline_from_args( + root: Path, + preset: str, + args: argparse.Namespace, +) -> list[Path]: + """Forward parsed public workflow arguments to one preset run.""" + + return run_pipeline( + root, + preset, + workflow=args.workflow, + output_root=args.output_root, + force_rerun=args.force_rerun, + consumer_mode=args.consumer_mode, + ) + + +def main(root: Path, argv: list[str] | None = None) -> int: + args = parse_args(argv) + try: + outputs = run_pipeline_from_args(root, args.preset, args) + except PipelineError as error: + print(f"preset metrics failed: {error}", file=sys.stderr) + return 1 + print("generated metrics reports:", flush=True) + for output in outputs: + print(output, flush=True) + return 0 diff --git a/validation/metrics/_internal/report_pipeline.py b/validation/metrics/_internal/report_pipeline.py new file mode 100644 index 0000000..5694f89 --- /dev/null +++ b/validation/metrics/_internal/report_pipeline.py @@ -0,0 +1,129 @@ +"""Aggregate report generation from existing complete metrics data.""" + +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +import build_overview +import build_performance +import build_tables +from run_metrics import CONSUMER_MODES, MetricsError, consumer_mode_suffix + + +def _available_targets( + input_root: Path, + consumer_mode: str, +) -> tuple[build_tables.Target, ...]: + dataset = build_performance.discover(input_root, consumer_mode) + return tuple(dict.fromkeys(column.target for column in dataset.columns)) + + +def rebuild( + input_root: Path, + output: Path, + targets: tuple[build_tables.Target, ...] | None = None, + consumer_mode: str = "strict", +) -> list[Path]: + selected = targets or _available_targets(input_root, consumer_mode) + if not selected: + raise MetricsError(f"no complete metrics data found under {input_root}") + + output.mkdir(parents=True, exist_ok=True) + outputs = list( + build_tables.build( + input_root, + selected, + output / "accuracy", + consumer_mode, + ) + ) + for layout in ("full", "compact"): + outputs.extend( + build_performance.build( + input_root, + output / "performance", + layout, + consumer_mode, + ) + ) + + for target in selected: + dataset = build_tables.load(input_root, (target,), consumer_mode) + for layout in ("full", "compact"): + mode_suffix = consumer_mode_suffix(consumer_mode) + layout_suffix = "_compact" if layout == "compact" else "" + for precision in build_tables.PRECISIONS: + path = ( + output + / "overview" + / ( + f"{target.platform}_{target.architecture}_{target.compiler}_{precision}" + f"{mode_suffix}_overview{layout_suffix}.svg" + ) + ) + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text( + build_overview.render_overview( + dataset, + target, + precision, + layout, + ), + encoding="utf-8", + newline="\n", + ) + outputs.append(path) + return outputs + + +def parse_args( + metrics_dir: Path, + argv: list[str] | None = None, +) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--input", + type=Path, + default=metrics_dir / "data", + help="metrics data directory (default: validation/metrics/data)", + ) + parser.add_argument( + "--output", + type=Path, + default=metrics_dir / "generated", + help="report output directory (default: validation/metrics/generated)", + ) + parser.add_argument( + "--targets", + type=build_tables._target, + nargs="+", + help=( + "optional platform/architecture/compiler targets; defaults to all " + "available data" + ), + ) + parser.add_argument( + "--consumer-mode", + choices=CONSUMER_MODES, + default="strict", + ) + return parser.parse_args(argv) + + +def main(metrics_dir: Path, argv: list[str] | None = None) -> int: + args = parse_args(metrics_dir, argv) + try: + outputs = rebuild( + args.input, + args.output, + tuple(args.targets) if args.targets else None, + args.consumer_mode, + ) + except (MetricsError, OSError, ValueError) as error: + print(f"table rebuild failed: {error}", file=sys.stderr) + return 1 + for output in outputs: + print(output) + return 0 diff --git a/validation/metrics/_internal/run_metrics.py b/validation/metrics/_internal/run_metrics.py new file mode 100644 index 0000000..4e62ec8 --- /dev/null +++ b/validation/metrics/_internal/run_metrics.py @@ -0,0 +1,2400 @@ +#!/usr/bin/env python3 +"""Run streamed metrics applications and publish canonical metrics CSV files.""" + +from __future__ import annotations + +import argparse +from concurrent.futures import Future, ThreadPoolExecutor +import csv +import hashlib +import json +import math +import os +import platform as host_platform +import shutil +import subprocess +import sys +import uuid +from collections import defaultdict +from collections.abc import Collection +from contextlib import contextmanager +from datetime import datetime, timezone +from pathlib import Path +from typing import Iterable, Mapping + +from manifest import ( + accuracy_manifest, + benchmark_manifest, + enabled_implementations, +) +from source_fingerprint import source_identity, valid_fingerprint + + +SCHEMA_VERSION = "6" +PRECISIONS = ("f128", "f256") +CONSUMER_MODES = ("strict", "fastmath") +MINIMUM_CREDIBLE_BENCHMARK_NS = 0.001 +ADAPTIVE_SAMPLE_MODES = frozenset(("small", "standard")) +DURABLE_SAMPLE_MODES = ADAPTIVE_SAMPLE_MODES | {"full"} +_ADAPTIVE_PROFILE = { + "benchmark_trials": 7, + "benchmark_minimum_trial_ms": 8, + "benchmark_policy": "adaptive-v2", + "benchmark_fast_threshold_ns": 20, + "benchmark_slow_threshold_ns": 10_000, + "benchmark_fast_trials": 7, + "benchmark_ordinary_trials": 3, + "benchmark_fast_minimum_trial_ms": 15, + "benchmark_maximum_row_ms": 5_000, + "benchmark_corpus_policy": "adaptive-v1", + "accuracy_parallel": True, +} +SAMPLE_PROFILES = { + "smoke": { + "accuracy_samples": 12, + "benchmark_samples": {"f128": 12, "f256": 12}, + "benchmark_trials": 3, + "benchmark_minimum_trial_ms": 3, + }, + "small": { + "accuracy_samples": 2048, + "benchmark_samples": {"f128": 4096, "f256": 2048}, + **_ADAPTIVE_PROFILE, + }, + "standard": { + "accuracy_samples": 4096, + "benchmark_samples": {"f128": 8192, "f256": 4096}, + **_ADAPTIVE_PROFILE, + }, + "full": { + "accuracy_samples": 65536, + "benchmark_samples": {"f128": 81920, "f256": 40960}, + "benchmark_trials": 7, + "benchmark_minimum_trial_ms": 25, + }, +} + + +def _expected_benchmark_trials( + sample_mode: str, + profile: Mapping[str, object], +) -> int | tuple[int, ...]: + if sample_mode in ADAPTIVE_SAMPLE_MODES: + return (1, 3, 7) + return int(profile["benchmark_trials"]) + + +CANONICAL_TARGETS = { + ("windows", "x86_64", "MSVC"): ("windows", "msvc", frozenset(("", "msvc"))), + ("windows", "x86_64", "ClangCL"): ("windows", "clang", frozenset(("msvc",))), + ("windows", "x86_64", "MinGW"): ("windows", "gnu", frozenset(("", "gnu"))), + ("windows", "arm64", "MSVC"): ("windows", "msvc", frozenset(("", "msvc"))), + ("windows", "arm64", "ClangCL"): ("windows", "clang", frozenset(("msvc",))), + ("linux", "x86_64", "GCC"): ("linux", "gnu", frozenset(("", "gnu"))), + ("linux", "x86_64", "Clang"): ("linux", "clang", frozenset(("", "gnu"))), + ("linux", "arm64", "GCC"): ("linux", "gnu", frozenset(("", "gnu"))), + ("linux", "arm64", "Clang"): ("linux", "clang", frozenset(("", "gnu"))), + ("macos", "x86_64", "AppleClang"): ("darwin", "appleclang", frozenset(("", "gnu"))), + ("macos", "arm64", "AppleClang"): ("darwin", "appleclang", frozenset(("", "gnu"))), + ("wasm32", "wasm32", "Emscripten"): ("emscripten", "clang", frozenset(("", "gnu"))), +} +REQUIRED_CONFIGURATION_FIELDS = { + "harness": { + "qdpp", + "tlfloat", + }, + "consumer": { + "fma", + "simd", + "fast-math", + "simulated-consteval", + "x86", + "arm64", + "tu-x86-fma", + "has-x86-fma", + }, + "library": { + "fma", + "simd", + "fast-math-request", + "fast-math", + "x86", + "arm64", + "tu-x86-fma", + "runtime-fma", + }, + "library_strategy": { + "compiled-x86-backend", + "runtime-check", + "msvc-guarded", + "scalar-x86", + "baseline-arm64", + "runtime-path", + "sse2", + "neon", + "wasm-simd", + "f256-simd", + "trig-simd", + }, +} +BUILD_CONFIGURATION_FIELDS = { + "compiler-id", + "compiler-version", + "config", + "system", + "processor", + "architecture", + "frontend-variant", + "optimized", + "flags-hash", + "source-fingerprint", +} +CONFIGURATION_FIELDS = { + **REQUIRED_CONFIGURATION_FIELDS, + "build": BUILD_CONFIGURATION_FIELDS, +} +RUN_CONFIGURATION_FIELDS = { + "sample-mode", + "samples", + "trials", +} +HOST_FIELDS = { + "os", + "os-release", + "machine", + "processor", + "python", + "node", +} +EXECUTABLE_FIELDS = { + "path", + "sha256", + "wasm-sha256", +} +ACCURACY_FIELDS = ( + "schema_version", + "run_id", + "source_revision", + "source_fingerprint", + "precision", + "group", + "operation", + "implementation", + "implementation_short", + "implementation_label", + "api", + "domain", + "samples", + "seed", + "mean_bits", + "p01_bits", + "worst_bits", + "required_worst_bits", + "margin_bits", + "pass", + "special_support", + "signed_zero_support", + "worst_input", + "observed", + "reference", +) +BENCHMARK_FIELDS = ( + "schema_version", + "run_id", + "source_revision", + "source_fingerprint", + "precision", + "group", + "operation", + "implementation", + "implementation_short", + "implementation_label", + "api", + "samples", + "ns_iter", + "trials_ns", + "iterations", + "elapsed_ns", + "speed_ratio", +) +CANONICAL_FIELDS = ( + "group", + "operation", + "precision", + "implementation", + "implementation_short", + "implementation_label", + "api", + "samples", + "mean_bits", + "p01_bits", + "worst_bits", + "domains_passed", + "domains_total", + "min_margin_bits", + "accuracy_pass", + "special_support", + "signed_zero_support", + "ns_iter", + "speed_ratio", + "run_id", +) + + +class MetricsError(ValueError): + """A metrics file is incomplete, inconsistent, or malformed.""" + + +def consumer_mode_suffix(consumer_mode: str) -> str: + if consumer_mode not in CONSUMER_MODES: + raise MetricsError(f"unsupported consumer mode {consumer_mode!r}") + return "" if consumer_mode == "strict" else "_fastmath" + + +def accuracy_policy_arguments(consumer_mode: str) -> tuple[str, ...]: + if consumer_mode not in CONSUMER_MODES: + raise MetricsError(f"unsupported consumer mode {consumer_mode!r}") + return ("--advisory",) if consumer_mode == "fastmath" else () + + +def metrics_stem(compiler: str, precision: str, consumer_mode: str) -> str: + return f"{compiler}_{precision}{consumer_mode_suffix(consumer_mode)}" + + +def run_metadata_stem(compiler: str, consumer_mode: str) -> str: + return f"{compiler}{consumer_mode_suffix(consumer_mode)}_run" + + +def _validate_configuration(configuration: object, source: Path | str) -> dict[str, dict[str, str]]: + """Validate and normalize the configuration emitted by a metrics executable.""" + + if not isinstance(configuration, dict): + raise MetricsError(f"{source}: incomplete configuration metadata") + sections = set(configuration) + if sections != set(CONFIGURATION_FIELDS): + raise MetricsError(f"{source}: incomplete configuration metadata") + + normalized: dict[str, dict[str, str]] = {} + for section, required_fields in CONFIGURATION_FIELDS.items(): + values = configuration.get(section) + if not isinstance(values, dict): + raise MetricsError(f"{source}: invalid {section} configuration fields") + actual_fields = set(values) + if actual_fields != required_fields: + missing = sorted(required_fields - actual_fields) + unexpected = sorted(actual_fields - required_fields) + details = [] + if missing: + details.append(f"missing {', '.join(missing)}") + if unexpected: + details.append(f"unexpected {', '.join(unexpected)}") + raise MetricsError( + f"{source}: invalid {section} configuration fields " + f"({'; '.join(details)}); rebuild the metrics executable" + ) + if not all(isinstance(value, str) and value for value in values.values()): + raise MetricsError(f"{source}: empty or non-string {section} configuration value") + normalized[section] = dict(sorted(values.items())) + + if normalized["consumer"]["fma"] not in {"AUTO", "OFF", "ASSUME"}: + raise MetricsError(f"{source}: invalid consumer FMA mode") + if normalized["library"]["fma"] not in {"AUTO", "OFF", "ASSUME"}: + raise MetricsError(f"{source}: invalid library FMA mode") + if normalized["library"]["fast-math-request"] not in {"AUTO", "ON", "OFF"}: + raise MetricsError(f"{source}: invalid internal fast-math request") + if normalized["harness"]["qdpp"] not in {"on", "off"}: + raise MetricsError(f"{source}: invalid qdpp harness state") + if normalized["harness"]["tlfloat"] not in {"on", "off"}: + raise MetricsError(f"{source}: invalid TLFloat harness state") + for section, fields in ( + ("consumer", ("simd", "fast-math", "simulated-consteval")), + ("library", ("simd", "fast-math")), + ): + for field in fields: + if normalized[section][field] not in {"on", "off"}: + raise MetricsError(f"{source}: invalid {section} {field} value") + if normalized["library"]["runtime-fma"] not in {"available", "unavailable"}: + raise MetricsError(f"{source}: invalid runtime FMA availability") + if normalized["build"]["optimized"] not in {"0", "1"}: + raise MetricsError(f"{source}: invalid build optimized flag") + if not valid_fingerprint(normalized["build"]["source-fingerprint"]): + raise MetricsError(f"{source}: invalid build source fingerprint") + if not valid_fingerprint(normalized["build"]["flags-hash"]): + raise MetricsError(f"{source}: invalid build flags hash") + for section, values in normalized.items(): + if section in {"build", "harness"}: + continue + for field, value in values.items(): + if field not in { + "fma", + "simd", + "fast-math", + "fast-math-request", + "simulated-consteval", + "runtime-fma", + } and value not in {"0", "1"}: + raise MetricsError(f"{source}: invalid {section} {field} flag") + return normalized + + +def require_consumer_mode( + configuration: object, + consumer_mode: str, + source: Path | str, +) -> dict[str, dict[str, str]]: + """Require evidence to match the requested consumer compiler mode.""" + + normalized = _validate_configuration(configuration, source) + if consumer_mode not in CONSUMER_MODES: + raise MetricsError(f"unsupported consumer mode {consumer_mode!r}") + expected = "on" if consumer_mode == "fastmath" else "off" + observed = normalized["consumer"]["fast-math"] + if observed != expected: + raise MetricsError( + f"{source}: consumer fast-math is {observed}, expected {expected} " + f"for {consumer_mode!r} evidence" + ) + return normalized + + +def _parse_configuration(lines: Iterable[str], runner_name: str) -> dict[str, dict[str, str]]: + expected_heading = f"[fltx {runner_name}]" + headings = 0 + sections: dict[str, dict[str, str]] = {} + prefixes = { + "[harness] ": "harness", + "[consumer] ": "consumer", + "[fltx lib] ": "library", + "[fltx lib strategy] ": "library_strategy", + "[build] ": "build", + } + for raw_line in lines: + line = raw_line.strip() + if line == expected_heading: + headings += 1 + for prefix, section in prefixes.items(): + if not line.startswith(prefix): + continue + if section in sections: + raise MetricsError(f"{runner_name}: duplicate {prefix.strip()} banner") + values: dict[str, str] = {} + for item in line[len(prefix):].split(): + if item.count("=") != 1: + raise MetricsError(f"{runner_name}: malformed configuration item {item!r}") + key, value = item.split("=", 1) + if not key or not value or key in values: + raise MetricsError(f"{runner_name}: malformed configuration item {item!r}") + values[key] = value + sections[section] = values + if headings != 1: + raise MetricsError(f"{runner_name}: expected one {expected_heading} banner") + return _validate_configuration(sections, runner_name) + + +def _parse_run_configuration( + lines: Iterable[str], + runner_name: str, +) -> dict[str, str]: + prefix = "[run] " + matches = [line.strip()[len(prefix):] for line in lines if line.strip().startswith(prefix)] + if len(matches) != 1: + raise MetricsError(f"{runner_name}: expected one [run] banner") + + values: dict[str, str] = {} + for item in matches[0].split(): + if item.count("=") != 1: + raise MetricsError(f"{runner_name}: malformed run item {item!r}") + key, value = item.split("=", 1) + if not key or not value or key in values: + raise MetricsError(f"{runner_name}: malformed run item {item!r}") + values[key] = value + if set(values) != RUN_CONFIGURATION_FIELDS: + raise MetricsError(f"{runner_name}: invalid run configuration fields") + if values["sample-mode"] not in SAMPLE_PROFILES and values["sample-mode"] != "custom": + raise MetricsError(f"{runner_name}: invalid sample mode") + for field in ("samples", "trials"): + try: + number = int(values[field]) + except ValueError as error: + raise MetricsError(f"{runner_name}: invalid run {field}") from error + if number < 0: + raise MetricsError(f"{runner_name}: invalid run {field}") + return values + + +def _validate_run_configuration( + observed: Mapping[str, str], + *, + runner_name: str, + sample_mode: str, + samples: int, + trials: int, +) -> None: + expected = { + "sample-mode": sample_mode, + "samples": str(samples), + "trials": str(trials), + } + if observed != expected: + raise MetricsError( + f"{runner_name}: run configuration mismatch " + f"(expected {expected}, got {dict(observed)})" + ) + + +def _require_matching_configuration( + expected: dict[str, dict[str, str]] | None, + observed: dict[str, dict[str, str]], + source: str, +) -> dict[str, dict[str, str]]: + if expected is None: + return observed + if observed != expected: + differences = [] + for section in sorted(set(expected) | set(observed)): + if section not in expected or section not in observed: + differences.append( + f"{section}: " + f"{'present' if section in expected else 'missing'} != " + f"{'present' if section in observed else 'missing'}" + ) + continue + for field in sorted(set(expected[section]) | set(observed[section])): + before = expected[section].get(field, "") + after = observed[section].get(field, "") + if before != after: + differences.append(f"{section}.{field}: {before} != {after}") + detail = "; ".join(differences) or "configuration objects differ" + raise MetricsError(f"{source}: configuration mismatch ({detail})") + return expected + + +def _require_source_fingerprint( + configuration: Mapping[str, Mapping[str, str]], + expected: str, + source: Path | str, +) -> None: + """Reject an executable built from any source tree other than ``expected``.""" + + if not valid_fingerprint(expected): + raise MetricsError(f"{source}: invalid published source fingerprint") + observed = configuration.get("build", {}).get("source-fingerprint") + if observed != expected: + raise MetricsError( + f"{source}: stale executable source fingerprint " + f"({observed or ''} != {expected}); rebuild " + "the requested metrics executable" + ) + + +def _validate_target_labels( + platform: str, + architecture: str, + compiler: str, + configuration: Mapping[str, Mapping[str, str]], + source: Path | str, +) -> None: + """Reject misleading output labels when the executable reports its build identity.""" + + build = configuration.get("build") + if build is None: + return + + system = build["system"].casefold() + reported_architecture = build["architecture"] + compiler_id = build["compiler-id"].casefold() + frontend_variant = build["frontend-variant"].casefold() + + expected = CANONICAL_TARGETS.get((platform, architecture, compiler)) + if expected is None: + raise MetricsError( + f"{source}: unsupported canonical target label " + f"{platform}/{architecture}/{compiler}" + ) + + expected_system, expected_compiler_id, expected_frontends = expected + if ( + system != expected_system + or reported_architecture != architecture + or compiler_id != expected_compiler_id + or frontend_variant not in expected_frontends + ): + raise MetricsError( + f"{source}: target label {platform}/{architecture}/{compiler} does not " + f"match reported {build['system']}/{build['architecture']}/" + f"{build['compiler-id']}/{build['frontend-variant']} build" + ) + + +def infer_canonical_target( + configuration: Mapping[str, Mapping[str, str]], + source: Path | str, +) -> tuple[str, str, str]: + """Return the canonical output labels reported by a metrics runner.""" + + build = configuration.get("build") + if build is None: + raise MetricsError(f"{source}: target inference requires build identity") + + identity = ( + build.get("system", "").casefold(), + build.get("architecture", ""), + build.get("compiler-id", "").casefold(), + build.get("frontend-variant", "").casefold(), + ) + matches = [ + target + for target, (expected_system, expected_compiler, expected_frontends) + in CANONICAL_TARGETS.items() + if ( + identity[0] == expected_system + and identity[1] == target[1] + and identity[2] == expected_compiler + and identity[3] in expected_frontends + ) + ] + if len(matches) != 1: + raise MetricsError( + f"{source}: unsupported canonical build identity " + f"{build.get('system', '')}/" + f"{build.get('architecture', '')}/" + f"{build.get('compiler-id', '')}/" + f"{build.get('frontend-variant', '')}" + ) + return matches[0] + + +def _validate_publishable_build( + configuration: Mapping[str, Mapping[str, str]], + source: Path | str, +) -> None: + """Require an identified optimized Release build for canonical publication.""" + + build = configuration.get("build") + if build is None: + raise MetricsError(f"{source}: canonical publication requires build identity") + if build["config"] != "Release" or build["optimized"] != "1": + raise MetricsError( + f"{source}: canonical publication requires an optimized Release build " + f"(reported config={build['config']!r}, optimized={build['optimized']!r})" + ) + + +def _sha256_file(path: Path) -> str: + digest = hashlib.sha256() + try: + with path.open("rb") as stream: + for block in iter(lambda: stream.read(1024 * 1024), b""): + digest.update(block) + except OSError as error: + raise MetricsError(f"cannot hash executable artifact {path}: {error}") from error + return digest.hexdigest() + + +def _output_hashes( + staged_outputs: Iterable[tuple[Path, Path]], + root: Path, +) -> dict[str, str]: + hashes = {} + for staged, final in staged_outputs: + try: + name = final.relative_to(root).as_posix() + except ValueError as error: + raise MetricsError(f"published output escapes target root: {final}") from error + if name in hashes: + raise MetricsError(f"duplicate published output path: {name}") + hashes[name] = _sha256_file(staged) + return dict(sorted(hashes.items())) + + +def _verify_output_hashes( + root: Path, + outputs: object, + expected_names: Iterable[str], + source: Path | str, +) -> None: + expected = set(expected_names) + if not isinstance(outputs, dict) or set(outputs) != expected: + raise MetricsError(f"{source}: incomplete published output hash manifest") + for name, digest in outputs.items(): + if not valid_fingerprint(digest): + raise MetricsError(f"{source}: invalid output hash for {name}") + path = root.joinpath(*name.split("/")) + if _sha256_file(path) != digest: + raise MetricsError(f"{source}: published output hash mismatch for {name}") + + +def _executable_identity(path: Path) -> dict[str, str]: + try: + resolved = path.resolve(strict=True) + except OSError as error: + raise MetricsError(f"cannot resolve executable artifact {path}: {error}") from error + if not resolved.is_file(): + raise MetricsError(f"executable artifact is not a file: {resolved}") + + wasm_hash = "not-present" + if resolved.suffix.lower() in {".js", ".mjs"}: + wasm = resolved.with_suffix(".wasm") + if wasm.is_file(): + wasm_hash = _sha256_file(wasm) + return { + "path": str(resolved), + "sha256": _sha256_file(resolved), + "wasm-sha256": wasm_hash, + } + + +def _run_provenance( + runners: tuple[tuple[str, Path], ...], +) -> dict[str, object]: + executables = { + name: _executable_identity(executable) + for name, executable in runners + } + uses_node = any( + Path(values["path"]).suffix.lower() in {".js", ".mjs"} + for values in executables.values() + ) + node_version = "not-used" + if uses_node: + node = shutil.which("node") + if not node: + raise MetricsError("Node.js is required to run WebAssembly metrics applications") + try: + node_version = subprocess.check_output( + [node, "--version"], + text=True, + encoding="utf-8", + errors="replace", + ).strip() + except (OSError, subprocess.CalledProcessError) as error: + raise MetricsError(f"cannot identify Node.js runtime: {error}") from error + if not node_version: + raise MetricsError("Node.js returned an empty version") + + host = { + "os": host_platform.system() or "unknown", + "os-release": host_platform.release() or "unknown", + "machine": host_platform.machine() or "unknown", + "processor": host_platform.processor() or "unknown", + "python": f"{host_platform.python_implementation()} {host_platform.python_version()}", + "node": node_version, + } + return { + "host": host, + "executables": executables, + } + + +def _inspect_runner( + executable: Path, + runner_name: str, + environment: Mapping[str, str] | None = None, +) -> dict[str, dict[str, str]]: + command = [*_runner_command(executable), "--describe"] + try: + process = subprocess.run( + command, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + encoding="utf-8", + errors="replace", + env=dict(environment) if environment is not None else None, + check=False, + ) + except OSError as error: + raise MetricsError( + f"cannot inspect {runner_name} executable: {error}" + ) from error + + lines = process.stdout.splitlines(keepends=True) + if process.returncode != 0: + detail = process.stdout.strip() + suffix = f": {detail}" if detail else "" + raise MetricsError( + f"{runner_name} executable does not support metrics preflight; " + f"rebuild this metrics executable{suffix}" + ) + return _parse_configuration(lines, runner_name) + + +def _preflight_runners( + runners: tuple[tuple[str, Path], ...], + *, + fingerprint: str, + platform: str | None, + architecture: str | None, + compiler: str | None, + publishable: bool, + environment: Mapping[str, str] | None = None, +) -> dict[str, dict[str, str]]: + configuration: dict[str, dict[str, str]] | None = None + for runner_name, executable in runners: + observed = _inspect_runner(executable, runner_name, environment) + configuration = _accept_runner_configuration( + configuration, + observed, + source=f"{runner_name} preflight", + fingerprint=fingerprint, + platform=platform, + architecture=architecture, + compiler=compiler, + publishable=publishable, + ) + assert configuration is not None + return configuration + + +def validate_runner_artifacts( + root: Path, + artifacts: Mapping[str, Path], + *, + sample_mode: str, + consumer_mode: str = "strict", + environment: Mapping[str, str] | None = None, +) -> tuple[str, str, str]: + """Validate existing runners without configuring, building, or measuring.""" + + if sample_mode not in SAMPLE_PROFILES: + raise MetricsError(f"unsupported sample mode {sample_mode!r}") + expected = {"fltx_accuracy", "fltx_benchmark"} + if set(artifacts) != expected: + raise MetricsError( + "existing runner artifact set is incomplete " + f"({', '.join(sorted(artifacts)) or 'none'})" + ) + + identity = source_identity(root.resolve()) + configuration = _preflight_runners( + ( + ("accuracy", artifacts["fltx_accuracy"]), + ("benchmark", artifacts["fltx_benchmark"]), + ), + fingerprint=identity.fingerprint, + platform=None, + architecture=None, + compiler=None, + publishable=sample_mode == "full", + environment=environment, + ) + require_consumer_mode(configuration, consumer_mode, "existing metrics runners") + return infer_canonical_target(configuration, "existing metrics runners") + + +def _validate_provenance( + host: object, + executables: object, + source: Path | str, +) -> None: + if ( + not isinstance(host, dict) + or set(host) != HOST_FIELDS + or not all(isinstance(value, str) and value for value in host.values()) + ): + raise MetricsError(f"{source}: invalid host provenance") + if ( + not isinstance(executables, dict) + or not executables + or not set(executables).issubset({"accuracy", "benchmark"}) + ): + raise MetricsError(f"{source}: invalid executable provenance") + for name, identity in executables.items(): + if ( + not isinstance(identity, dict) + or set(identity) != EXECUTABLE_FIELDS + or not isinstance(identity["path"], str) + or not identity["path"] + or not valid_fingerprint(identity["sha256"]) + or ( + identity["wasm-sha256"] != "not-present" + and not valid_fingerprint(identity["wasm-sha256"]) + ) + ): + raise MetricsError(f"{source}: invalid {name} executable provenance") + + +def _accept_runner_configuration( + expected: dict[str, dict[str, str]] | None, + observed: dict[str, dict[str, str]], + *, + source: str, + fingerprint: str, + platform: str | None, + architecture: str | None, + compiler: str | None, + publishable: bool, +) -> dict[str, dict[str, str]]: + candidate = _require_matching_configuration(expected, observed, source) + _require_source_fingerprint(candidate, fingerprint, source) + if platform is not None and architecture is not None and compiler is not None: + _validate_target_labels(platform, architecture, compiler, candidate, source) + if publishable: + _validate_publishable_build(candidate, source) + return candidate + + +def _read_csv( + path: Path, + fields: tuple[str, ...], + *, + allow_partial: bool = False, +) -> list[dict[str, str]]: + if path.name.endswith(".partial.csv") and not allow_partial: + raise MetricsError(f"refusing partial file: {path}") + try: + with path.open(newline="", encoding="utf-8") as stream: + reader = csv.DictReader(stream) + if tuple(reader.fieldnames or ()) != fields: + raise MetricsError( + f"{path}: expected header {','.join(fields)}, " + f"got {','.join(reader.fieldnames or [])}" + ) + rows = list(reader) + except OSError as error: + raise MetricsError(f"cannot read {path}: {error}") from error + if not rows: + raise MetricsError(f"{path}: contains no rows") + if any(None in row or any(value is None for value in row.values()) for row in rows): + raise MetricsError(f"{path}: malformed row width") + return rows + + +def _float( + row: Mapping[str, str], + field: str, + source: Path, + *, + allow_infinity: bool = False, +) -> float: + try: + value = float(row[field]) + except (KeyError, TypeError, ValueError) as error: + raise MetricsError(f"{source}: invalid {field!r}: {row.get(field)!r}") from error + if value != value or value == float("-inf") or (value == float("inf") and not allow_infinity): + qualifier = "a number or +inf" if allow_infinity else "finite" + raise MetricsError(f"{source}: {field!r} must be {qualifier}") + return value + + +def _int(row: Mapping[str, str], field: str, source: Path) -> int: + try: + value = int(row[field]) + except (KeyError, TypeError, ValueError) as error: + raise MetricsError(f"{source}: invalid {field!r}: {row.get(field)!r}") from error + if value < 0: + raise MetricsError(f"{source}: {field!r} must not be negative") + return value + + +def _optional_float(row: Mapping[str, str], field: str, source: Path) -> float | None: + if row.get(field, "") == "": + return None + return _float(row, field, source) + + +def _trials( + row: Mapping[str, str], + field: str, + source: Path, + *, + optional: bool = False, +) -> list[float] | None: + raw = row.get(field, "") + if raw == "" and optional: + return None + if not raw or any(not item for item in raw.split("|")): + raise MetricsError(f"{source}: invalid {field!r} trial list") + values = [] + for item in raw.split("|"): + try: + value = float(item) + except ValueError as error: + raise MetricsError(f"{source}: invalid {field!r} trial {item!r}") from error + if not math.isfinite(value) or value <= 0: + raise MetricsError(f"{source}: {field!r} trials must be finite and positive") + values.append(value) + return values + + +def _benchmark_values( + row: Mapping[str, str], + source: Path, + *, + expected_trials: int | Collection[int] | None = None, +) -> tuple[float, float | None]: + time = _float(row, "ns_iter", source) + trials = _trials(row, "trials_ns", source) + assert trials is not None + valid_trial_count = ( + expected_trials is None + or ( + len(trials) == expected_trials + if isinstance(expected_trials, int) + else len(trials) in expected_trials + ) + ) + if time < MINIMUM_CREDIBLE_BENCHMARK_NS: + raise MetricsError( + f"{source}: implausibly small benchmark timing; " + "the workload may have been optimized away" + ) + if not valid_trial_count: + raise MetricsError(f"{source}: invalid benchmark trials") + if not math.isclose( + time, + sorted(trials)[len(trials) // 2], + rel_tol=2e-5, + abs_tol=2e-6, + ): + raise MetricsError(f"{source}: median does not match its trials") + if _int(row, "iterations", source) <= 0: + raise MetricsError(f"{source}: invalid iteration count") + if _float(row, "elapsed_ns", source) <= 0: + raise MetricsError(f"{source}: invalid elapsed time") + ratio = _optional_float(row, "speed_ratio", source) + if row["implementation"] == "fltx": + if ratio is not None: + raise MetricsError(f"{source}: FLTX speed ratio must be empty") + elif ratio is None or ratio <= 0: + raise MetricsError(f"{source}: comparison speed ratio must be positive") + return time, ratio + + +def _validate_identity( + rows: Iterable[Mapping[str, str]], + path: Path, + *, + run_id: str, + revision: str, + fingerprint: str, + precision: str, +) -> None: + if not valid_fingerprint(fingerprint): + raise MetricsError(f"{path}: invalid expected source fingerprint") + seen: set[tuple[str, ...]] = set() + accuracy = tuple(rows) + for row in accuracy: + if row["schema_version"] != SCHEMA_VERSION: + raise MetricsError(f"{path}: unsupported schema version {row['schema_version']!r}") + if row["run_id"] != run_id or row["source_revision"] != revision: + raise MetricsError(f"{path}: mixed run ID or source revision") + if row["source_fingerprint"] != fingerprint: + raise MetricsError(f"{path}: mixed or stale source fingerprint") + if row["precision"] != precision: + raise MetricsError(f"{path}: expected precision {precision}, got {row['precision']!r}") + if ( + not row["group"] or not row["operation"] or not row["implementation"] + or not row["implementation_short"] or not row["implementation_label"] + or not row["api"] or ("domain" in row and not row["domain"]) + ): + raise MetricsError(f"{path}: result identity fields must not be empty") + key = ( + row["group"], row["operation"], row["implementation"], + row.get("domain", ""), + ) + if key in seen: + raise MetricsError(f"{path}: duplicate result {key}") + seen.add(key) + if _int(row, "samples", path) == 0: + raise MetricsError(f"{path}: samples must be greater than zero") + if "seed" in row: + _int(row, "seed", path) + + +def _validate_completeness( + accuracy_rows: Iterable[Mapping[str, str]], + benchmark_rows: Iterable[Mapping[str, str]], + *, + precision: str, + accuracy_path: Path, + benchmark_path: Path, + qdpp_enabled: bool, + tlfloat_enabled: bool, + consumer_mode: str = "strict", +) -> None: + for source, expected, rows, domain_field in ( + ( + accuracy_path, + accuracy_manifest( + precision, qdpp=qdpp_enabled, tlfloat=tlfloat_enabled, + ), + accuracy_rows, + True, + ), + ( + benchmark_path, + benchmark_manifest( + precision, qdpp=qdpp_enabled, tlfloat=tlfloat_enabled, + ), + benchmark_rows, + False, + ), + ): + if consumer_mode == "fastmath": + expected = {"fltx": expected["fltx"]} + observed: dict[str, set[tuple[str, ...]]] = defaultdict(set) + for row in rows: + key = (row["group"], row["operation"]) + if domain_field: + key += (row["domain"],) + observed[row["implementation"]].add(key) + if set(observed) != set(expected): + raise MetricsError( + f"{source}: implementation manifest mismatch " + f"(expected {sorted(expected)}, got {sorted(observed)})" + ) + for implementation, expected_rows in expected.items(): + missing = sorted(expected_rows - observed[implementation]) + extra = sorted(observed[implementation] - expected_rows) + if missing or extra: + raise MetricsError( + f"{source}: incomplete {implementation} manifest " + f"(missing {missing[:5]}, unexpected {extra[:5]})" + ) + + +def _validate_implementations( + benchmark_rows: Iterable[Mapping[str, str]], + *, + precision: str, + benchmark_path: Path, + qdpp_enabled: bool, + tlfloat_enabled: bool, + consumer_mode: str = "strict", +) -> None: + expected = { + item.id: item + for item in enabled_implementations( + precision, qdpp=qdpp_enabled, tlfloat=tlfloat_enabled, + ) + } + if consumer_mode == "fastmath": + expected = {"fltx": expected["fltx"]} + observed: dict[str, tuple[str, str]] = {} + fltx_times: dict[tuple[str, str], float] = {} + parsed: list[tuple[Mapping[str, str], float, float | None]] = [] + for row in benchmark_rows: + implementation = row["implementation"] + if implementation not in expected: + raise MetricsError( + f"{benchmark_path}: unexpected implementation {implementation!r}" + ) + identity = (row["implementation_short"], row["implementation_label"]) + previous = observed.setdefault(implementation, identity) + if previous != identity: + raise MetricsError( + f"{benchmark_path}: inconsistent identity for {implementation}" + ) + expected_identity = expected[implementation] + if identity != (expected_identity.short_label, expected_identity.label): + raise MetricsError( + f"{benchmark_path}: incorrect label for {implementation}" + ) + time, ratio = _benchmark_values(row, benchmark_path) + parsed.append((row, time, ratio)) + if implementation == "fltx": + fltx_times[(row["group"], row["operation"])] = time + for row, time, ratio in parsed: + if row["implementation"] == "fltx": + continue + key = (row["group"], row["operation"]) + if key not in fltx_times or ratio is None or not math.isclose( + ratio, time / fltx_times[key], rel_tol=2e-5, abs_tol=2e-6, + ): + raise MetricsError( + f"{benchmark_path}: inconsistent speed ratio for " + f"{row['implementation']} {key}" + ) + + +def _accuracy_values( + row: Mapping[str, str], + source: Path, +) -> tuple[float, float, float, float | None, bool | None, bool]: + mean, p01, worst = ( + _float(row, field, source, allow_infinity=True) + for field in ("mean_bits", "p01_bits", "worst_bits") + ) + exact = math.isinf(mean) + if exact and not (math.isinf(p01) and math.isinf(worst)): + raise MetricsError(f"{source}: inconsistent exact metrics for {row['operation']}") + if not exact and math.isinf(worst): + raise MetricsError(f"{source}: non-exact result has exact worst bits") + if min(mean, p01, worst) < 0 or p01 < worst or mean < worst: + raise MetricsError(f"{source}: invalid accuracy ordering for {row['operation']}") + if row["implementation"] not in {"fltx", "native"}: + if any(row[field] for field in ("required_worst_bits", "margin_bits", "pass")): + raise MetricsError(f"{source}: competitor threshold fields must be empty") + return mean, p01, worst, None, None, exact + required = _float(row, "required_worst_bits", source) + margin = _float(row, "margin_bits", source, allow_infinity=True) + if row["pass"] not in {"yes", "no"}: + raise MetricsError(f"{source}: pass must be 'yes' or 'no'") + if exact != math.isinf(margin): + raise MetricsError(f"{source}: inconsistent exact margin for {row['operation']}") + expected_margin = worst - required + if math.isfinite(expected_margin) and not math.isclose( + margin, expected_margin, rel_tol=1e-8, abs_tol=1e-5, + ): + raise MetricsError(f"{source}: inconsistent margin for {row['operation']}") + passed = row["pass"] == "yes" + if passed != (margin >= 0): + raise MetricsError(f"{source}: inconsistent pass flag for {row['operation']}") + return mean, p01, worst, margin, passed, exact + + +def _accuracy_summary( + detail: list[dict[str, str]], + source: Path, + thresholds: Mapping[str, float], +) -> dict[str, object]: + counts = [_int(row, "samples", source) for row in detail] + total = sum(counts) + precision = detail[0]["precision"] + if total <= 0: + raise MetricsError(f"{source}: invalid accuracy samples or precision") + + implementation_id = detail[0]["implementation"] + try: + implementation = next( + item + for item in enabled_implementations( + precision, qdpp=True, tlfloat=True, + ) + if item.id == implementation_id + ) + except (KeyError, StopIteration) as error: + raise MetricsError( + f"{source}: unknown implementation {implementation_id!r}" + ) from error + + values = [_accuracy_values(row, source) for row in detail] + means, p01s, worsts, margins, passes, exact = zip(*values) + all_exact = all(exact) + pooled = [ + implementation.nominal_bits + 32.0 if is_exact else mean + for mean, is_exact in zip(means, exact) + ] + domains = {row["domain"] for row in detail} + if not domains.issubset(thresholds): + raise MetricsError( + f"{source}: accuracy domain lacks an FLTX threshold for " + f"{detail[0]['implementation']} {detail[0]['operation']}" + ) + evaluated_margins: list[float] = [] + evaluated_passes: list[bool] = [] + for row, worst, recorded_margin, recorded_pass in zip( + detail, worsts, margins, passes, + ): + margin = worst - thresholds[row["domain"]] + passed = margin >= 0 + if row["implementation"] == "fltx": + if recorded_margin is None or recorded_pass is None: + raise MetricsError(f"{source}: FLTX threshold result is missing") + if math.isfinite(margin) and not math.isclose( + recorded_margin, margin, rel_tol=1e-8, abs_tol=1e-5, + ): + raise MetricsError( + f"{source}: FLTX threshold result disagrees with aggregation" + ) + if recorded_pass != passed: + raise MetricsError(f"{source}: FLTX pass result disagrees with aggregation") + evaluated_margins.append(margin) + evaluated_passes.append(passed) + + special = {row["special_support"] for row in detail} + if not special.issubset({"Both", "Inf", "NaN", "No", "-"}): + raise MetricsError(f"{source}: malformed special_support category") + if len(special) != 1: + raise MetricsError( + f"{source}: inconsistent special_support for " + f"{detail[0]['implementation']} {detail[0]['operation']}" + ) + signed_zero = {row["signed_zero_support"] for row in detail} + if not signed_zero.issubset({"yes", "no", "-"}): + raise MetricsError(f"{source}: malformed signed_zero_support category") + if len(signed_zero) != 1: + raise MetricsError( + f"{source}: inconsistent signed_zero_support for " + f"{detail[0]['implementation']} {detail[0]['operation']}" + ) + return { + "samples": total, + "mean_bits": ( + math.inf + if all_exact + else sum(value * count for value, count in zip(pooled, counts)) / total + ), + "p01_bits": min(p01s), + "worst_bits": min(worsts), + "domains_passed": sum(evaluated_passes), + "domains_total": len(evaluated_passes), + "min_margin_bits": min(evaluated_margins), + "accuracy_pass": "yes" if all(evaluated_passes) else "no", + "special_support": special.pop(), + "signed_zero_support": signed_zero.pop(), + } + + +def _benchmark_summary( + row: dict[str, str], + source: Path, + expected_trials: int | Collection[int] | None, +) -> dict[str, object]: + time, ratio = _benchmark_values( + row, source, expected_trials=expected_trials, + ) + return { + "ns_iter": time, + "speed_ratio": ratio if ratio is not None else "", + } + + +def aggregate( + accuracy_rows: list[dict[str, str]], + benchmark_rows: list[dict[str, str]], + *, + accuracy_path: Path, + benchmark_path: Path, + run_id: str, + expected_trials: int | Collection[int] | None = None, +) -> list[dict[str, object]]: + """Merge detailed rows into one conservative summary row per operation.""" + + accuracy_by_key: dict[tuple[str, str, str, str], list[dict[str, str]]] = defaultdict(list) + benchmark_by_key: dict[tuple[str, str, str, str], dict[str, str]] = {} + thresholds: dict[tuple[str, str, str, str], float] = {} + for row in accuracy_rows: + accuracy_by_key[ + (row["group"], row["operation"], row["precision"], row["implementation"]) + ].append(row) + if row["implementation"] == "fltx": + threshold_key = ( + row["group"], row["operation"], row["precision"], row["domain"], + ) + required = _float(row, "required_worst_bits", accuracy_path) + previous = thresholds.setdefault(threshold_key, required) + if previous != required: + raise MetricsError( + f"{accuracy_path}: inconsistent FLTX threshold {threshold_key}" + ) + for row in benchmark_rows: + key = ( + row["group"], row["operation"], row["precision"], row["implementation"], + ) + if key in benchmark_by_key: + raise MetricsError(f"{benchmark_path}: duplicate benchmark result {key}") + benchmark_by_key[key] = row + + results: list[dict[str, object]] = [] + keys = sorted(set(accuracy_by_key) | set(benchmark_by_key)) + for group, operation, precision, implementation in keys: + key = (group, operation, precision, implementation) + detail = accuracy_by_key.get(key, []) + benchmark = benchmark_by_key.get(key) + identity = detail[0] if detail else benchmark + assert identity is not None + operation_thresholds = { + domain: required + for (threshold_group, threshold_operation, threshold_precision, domain), required + in thresholds.items() + if (threshold_group, threshold_operation, threshold_precision) == + (group, operation, precision) + } + accuracy_values = _accuracy_summary( + detail, accuracy_path, operation_thresholds, + ) if detail else dict.fromkeys( + ("samples", "mean_bits", "p01_bits", "worst_bits", "domains_passed", + "domains_total", "min_margin_bits", "accuracy_pass", + "special_support", "signed_zero_support"), + "", + ) + if not detail: + accuracy_values["special_support"] = "-" + accuracy_values["signed_zero_support"] = "-" + benchmark_values = ( + _benchmark_summary(benchmark, benchmark_path, expected_trials) + if benchmark + else dict.fromkeys( + ("ns_iter", "speed_ratio"), "" + ) + ) + results.append( + { + "group": group, + "operation": operation, + "precision": precision, + "implementation": implementation, + "implementation_short": identity["implementation_short"], + "implementation_label": identity["implementation_label"], + "api": identity["api"], + **accuracy_values, + **benchmark_values, + "run_id": run_id, + } + ) + return results + + +def _format(value: object) -> object: + if isinstance(value, float): + return f"{value:.12g}" + return value + + +def _atomic_csv(path: Path, rows: list[dict[str, object]]) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + partial = path.with_suffix(".partial.csv") + with partial.open("w", newline="", encoding="utf-8") as stream: + writer = csv.DictWriter(stream, fieldnames=CANONICAL_FIELDS, lineterminator="\n") + writer.writeheader() + writer.writerows({key: _format(row[key]) for key in CANONICAL_FIELDS} for row in rows) + stream.flush() + os.fsync(stream.fileno()) + partial.replace(path) + + +def merge_precision( + accuracy_path: Path, + benchmark_path: Path, + output_path: Path, + *, + run_id: str, + revision: str, + fingerprint: str, + precision: str, + qdpp_enabled: bool, + tlfloat_enabled: bool, + consumer_mode: str = "strict", + require_complete: bool = False, + expected_trials: int | Collection[int] | None = None, +) -> None: + accuracy = _read_csv(accuracy_path, ACCURACY_FIELDS) + benchmark = _read_csv(benchmark_path, BENCHMARK_FIELDS) + _validate_identity( + accuracy, accuracy_path, + run_id=run_id, revision=revision, fingerprint=fingerprint, + precision=precision, + ) + _validate_identity( + benchmark, benchmark_path, + run_id=run_id, revision=revision, fingerprint=fingerprint, + precision=precision, + ) + if require_complete: + _validate_completeness( + accuracy, + benchmark, + precision=precision, + accuracy_path=accuracy_path, + benchmark_path=benchmark_path, + qdpp_enabled=qdpp_enabled, + tlfloat_enabled=tlfloat_enabled, + consumer_mode=consumer_mode, + ) + _validate_implementations( + benchmark, + precision=precision, + benchmark_path=benchmark_path, + qdpp_enabled=qdpp_enabled, + tlfloat_enabled=tlfloat_enabled, + consumer_mode=consumer_mode, + ) + rows = aggregate( + accuracy, + benchmark, + accuracy_path=accuracy_path, + benchmark_path=benchmark_path, + run_id=run_id, + expected_trials=expected_trials, + ) + _atomic_csv(output_path, rows) + + +def _run( + command: list[str], + runner_name: str, + *, + sample_mode: str, + samples: int, + trials: int, +) -> tuple[dict[str, dict[str, str]], int]: + print("+", subprocess.list2cmdline(command), flush=True) + process = subprocess.Popen( + command, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + encoding="utf-8", + errors="replace", + bufsize=1, + ) + lines = [] + assert process.stdout is not None + for line in process.stdout: + lines.append(line) + sys.stdout.write(line) + sys.stdout.flush() + return_code = process.wait() + run_configuration = _parse_run_configuration(lines, runner_name) + _validate_run_configuration( + run_configuration, + runner_name=runner_name, + sample_mode=sample_mode, + samples=samples, + trials=trials, + ) + return _parse_configuration(lines, runner_name), return_code + + +def _runner_command(executable: Path) -> list[str]: + if executable.suffix.lower() in {".js", ".mjs"}: + node = shutil.which("node") + if not node: + raise MetricsError("Node.js is required to run a WebAssembly metrics application") + return [node, str(executable)] + return [str(executable)] + + +def _safe_component(value: str, label: str) -> str: + if ( + not value + or value in {".", ".."} + or any(not (character.isalnum() or character in "._-") for character in value) + ): + raise MetricsError(f"{label} must be a simple file-name component") + return value + + +def _write_json(path: Path, value: object) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + writing = path.with_suffix(path.suffix + ".writing") + with writing.open("w", encoding="utf-8", newline="\n") as stream: + stream.write(json.dumps(value, indent=2, sort_keys=True) + "\n") + stream.flush() + os.fsync(stream.fileno()) + writing.replace(path) + + +def _result_handoff( + *, + run_id: str, + sample_mode: str, + consumer_mode: str, + platform: str, + architecture: str, + compiler: str, + input_root: Path, + metadata: Path, +) -> dict[str, object]: + return { + "schema_version": 1, + "run_id": run_id, + "sample_mode": sample_mode, + "consumer_mode": consumer_mode, + "platform": platform, + "architecture": architecture, + "compiler": compiler, + "target": f"{platform}/{architecture}/{compiler}", + "input_root": str(input_root.resolve()), + "metadata": str(metadata.resolve()), + } + + +def _read_metadata(path: Path) -> dict[str, object]: + try: + value = json.loads(path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError) as error: + raise MetricsError(f"cannot read reusable metadata {path}: {error}") from error + if not isinstance(value, dict): + raise MetricsError(f"{path}: reusable metadata is not an object") + return value + + +def _benchmark_host_identity(host: object) -> dict[str, object]: + if not isinstance(host, dict): + return {} + # Python renders/orchestrates the run but is not in the timed C++/Node path. + return { + field: host.get(field) + for field in ("os", "os-release", "machine", "processor", "node") + } + + +def _validate_reusable_candidate( + metadata_path: Path, + *, + sample_mode: str, + consumer_mode: str = "strict", + platform: str, + architecture: str, + compiler: str, + fingerprint: str, + configuration: Mapping[str, Mapping[str, str]], + host: object, +) -> dict[str, object]: + """Return a handoff for complete evidence matching the freshly built runners.""" + + metadata = _read_metadata(metadata_path) + expected_profile = SAMPLE_PROFILES[sample_mode] + required = { + "schema_version": SCHEMA_VERSION, + "status": "complete", + "source_fingerprint": fingerprint, + "platform": platform, + "architecture": architecture, + "compiler": compiler, + "sample_mode": sample_mode, + "precisions": list(PRECISIONS), + "phases_requested": ["accuracy", "benchmark"], + } + for field, expected in required.items(): + if metadata.get(field) != expected: + raise MetricsError( + f"{metadata_path}: reusable {field} mismatch " + f"({metadata.get(field)!r} != {expected!r})" + ) + observed_consumer_mode = metadata.get("consumer_mode", "strict") + if observed_consumer_mode != consumer_mode: + raise MetricsError( + f"{metadata_path}: reusable consumer_mode mismatch " + f"({observed_consumer_mode!r} != {consumer_mode!r})" + ) + for field, expected in expected_profile.items(): + if metadata.get(field) != expected: + raise MetricsError(f"{metadata_path}: reusable sample profile changed") + if metadata.get("configuration") != configuration: + raise MetricsError(f"{metadata_path}: reusable build configuration changed") + if _benchmark_host_identity(metadata.get("host")) != _benchmark_host_identity(host): + raise MetricsError(f"{metadata_path}: reusable host identity changed") + + run_id = metadata.get("run_id") + revision = metadata.get("source_revision") + if not isinstance(run_id, str) or not run_id: + raise MetricsError(f"{metadata_path}: reusable run ID is missing") + if not isinstance(revision, str) or not revision: + raise MetricsError(f"{metadata_path}: reusable source revision is missing") + + phases = metadata.get("phases") + expected_phases = { + f"{precision}.{runner}" + for precision in PRECISIONS + for runner in ("accuracy", "benchmark") + } + if ( + not isinstance(phases, dict) + or set(phases) != expected_phases + or any( + not isinstance(phase, dict) or phase.get("status") != "passed" + for phase in phases.values() + ) + ): + raise MetricsError(f"{metadata_path}: reusable phases are incomplete") + + input_root = metadata_path.parents[3] + target_root = input_root / platform / architecture + expected_outputs = { + f"{metrics_stem(compiler, precision, consumer_mode)}.csv" + for precision in PRECISIONS + } | { + f"detail/{metrics_stem(compiler, precision, consumer_mode)}_{runner}.csv" + for precision in PRECISIONS + for runner in ("accuracy", "benchmark") + } + _verify_output_hashes( + target_root, + metadata.get("outputs"), + expected_outputs, + metadata_path, + ) + + normalized = require_consumer_mode( + configuration, + consumer_mode, + "current runners", + ) + qdpp_enabled = normalized["harness"]["qdpp"] == "on" + tlfloat_enabled = normalized["harness"]["tlfloat"] == "on" + for precision in PRECISIONS: + stem = metrics_stem(compiler, precision, consumer_mode) + accuracy_path = target_root / "detail" / f"{stem}_accuracy.csv" + benchmark_path = target_root / "detail" / f"{stem}_benchmark.csv" + canonical_path = target_root / f"{stem}.csv" + accuracy_rows = _read_csv(accuracy_path, ACCURACY_FIELDS) + benchmark_rows = _read_csv(benchmark_path, BENCHMARK_FIELDS) + canonical_rows = _read_csv(canonical_path, CANONICAL_FIELDS) + for rows, path in ( + (accuracy_rows, accuracy_path), + (benchmark_rows, benchmark_path), + ): + _validate_identity( + rows, + path, + run_id=run_id, + revision=revision, + fingerprint=fingerprint, + precision=precision, + ) + _validate_completeness( + accuracy_rows, + benchmark_rows, + precision=precision, + accuracy_path=accuracy_path, + benchmark_path=benchmark_path, + qdpp_enabled=qdpp_enabled, + tlfloat_enabled=tlfloat_enabled, + consumer_mode=consumer_mode, + ) + _validate_implementations( + benchmark_rows, + precision=precision, + benchmark_path=benchmark_path, + qdpp_enabled=qdpp_enabled, + tlfloat_enabled=tlfloat_enabled, + consumer_mode=consumer_mode, + ) + expected_rows = aggregate( + accuracy_rows, + benchmark_rows, + accuracy_path=accuracy_path, + benchmark_path=benchmark_path, + run_id=run_id, + expected_trials=_expected_benchmark_trials( + sample_mode, expected_profile, + ), + ) + expected_summary = { + (str(row["group"]), str(row["operation"]), str(row["implementation"])): { + field: str(_format(row[field])) + for field in CANONICAL_FIELDS + } + for row in expected_rows + } + observed_summary = { + (row["group"], row["operation"], row["implementation"]): row + for row in canonical_rows + } + if len(observed_summary) != len(canonical_rows) or observed_summary != expected_summary: + raise MetricsError(f"{canonical_path}: reusable canonical summary is inconsistent") + + return _result_handoff( + run_id=run_id, + sample_mode=sample_mode, + consumer_mode=consumer_mode, + platform=platform, + architecture=architecture, + compiler=compiler, + input_root=input_root, + metadata=metadata_path, + ) + + +def _find_reusable_run( + root: Path, + output_root: Path, + *, + sample_mode: str, + consumer_mode: str, + platform: str, + architecture: str, + compiler: str, + fingerprint: str, + configuration: Mapping[str, Mapping[str, str]], + host: object, +) -> tuple[dict[str, object] | None, str]: + if sample_mode in DURABLE_SAMPLE_MODES: + candidates = [ + output_root + / platform + / architecture + / "detail" + / f"{run_metadata_stem(compiler, consumer_mode)}.json" + ] + else: + candidates = list( + (root / "build" / "metrics" / "runs").glob( + f"*/{platform}/{architecture}/detail/" + f"{run_metadata_stem(compiler, consumer_mode)}.json" + ) + ) + candidates.sort( + key=lambda path: path.stat().st_mtime if path.exists() else 0, + reverse=True, + ) + if not candidates: + return None, "no previous complete evidence exists" + + rejection = "no compatible evidence exists" + for candidate in candidates: + try: + return ( + _validate_reusable_candidate( + candidate, + sample_mode=sample_mode, + consumer_mode=consumer_mode, + platform=platform, + architecture=architecture, + compiler=compiler, + fingerprint=fingerprint, + configuration=configuration, + host=host, + ), + "", + ) + except (MetricsError, OSError) as error: + rejection = str(error) + return None, rejection + + +@contextmanager +def _publication_lock(path: Path): + """Hold a non-blocking OS lock while replacing one target's result set.""" + + path.parent.mkdir(parents=True, exist_ok=True) + try: + stream = path.open("a+b") + except OSError as error: + raise MetricsError(f"cannot open publication lock {path}: {error}") from error + + try: + stream.seek(0, os.SEEK_END) + if stream.tell() == 0: + stream.write(b"\0") + stream.flush() + stream.seek(0) + + try: + if os.name == "nt": + import msvcrt + + msvcrt.locking(stream.fileno(), msvcrt.LK_NBLCK, 1) + else: + import fcntl + + fcntl.flock(stream.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB) + except OSError as error: + raise MetricsError( + f"another metrics publication is already active for {path.parent}" + ) from error + + yield + finally: + stream.close() + + +def _publish_transaction( + staged_outputs: Iterable[tuple[Path, Path]], + metadata_partial: Path, + final_metadata: Path, + *, + replace=os.replace, +) -> None: + """Publish a complete result set and roll back atomically on failure.""" + + outputs = list(staged_outputs) + destinations = [final for _, final in outputs] + if len(set(destinations)) != len(destinations) or final_metadata in destinations: + raise MetricsError("publish destinations must be unique") + sources = [staged for staged, _ in outputs] + [metadata_partial] + if len(set(sources)) != len(sources) or any(not source.is_file() for source in sources): + raise MetricsError("publish sources must be unique complete files") + + backup_directory = metadata_partial.parent / ".rollback" + backup_directory.mkdir(parents=False, exist_ok=False) + publications = [*outputs, (metadata_partial, final_metadata)] + backups: list[tuple[Path, Path]] = [] + installed: list[tuple[Path, Path]] = [] + + try: + # Removing the published commit marker first makes an in-progress + # replacement unreadable as a complete run. The staged marker is + # always installed last. + ordered_destinations = [final_metadata, *destinations] + for index, final in enumerate(ordered_destinations): + if not final.exists(): + continue + backup = backup_directory / f"{index:04d}.previous" + replace(final, backup) + backups.append((backup, final)) + + for staged, final in publications: + final.parent.mkdir(parents=True, exist_ok=True) + replace(staged, final) + installed.append((final, staged)) + except (OSError, MetricsError) as publish_error: + rollback_errors: list[str] = [] + for final, staged in reversed(installed): + try: + if final.exists(): + os.replace(final, staged) + except OSError as error: + rollback_errors.append(f"{final}: {error}") + for backup, final in reversed(backups): + try: + if backup.exists(): + final.parent.mkdir(parents=True, exist_ok=True) + os.replace(backup, final) + except OSError as error: + rollback_errors.append(f"{final}: {error}") + try: + backup_directory.rmdir() + except OSError: + pass + if rollback_errors: + raise MetricsError( + f"publish failed: {publish_error}; rollback failed: " + + "; ".join(rollback_errors) + ) from publish_error + raise + + # The metadata marker commits the set. Backup cleanup failure is harmless + # and leaves the files only under .staging. + for backup, _ in backups: + try: + backup.unlink() + except OSError: + pass + try: + backup_directory.rmdir() + except OSError: + pass + + +def parse_args(argv: list[str] | None = None) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--accuracy", type=Path, help="fltx_accuracy executable") + parser.add_argument("--benchmark", type=Path, help="fltx_benchmark executable") + parser.add_argument("--output-root", type=Path) + parser.add_argument( + "--platform", + help="Output folder, for example windows or wasm32", + ) + parser.add_argument("--architecture", help="Target architecture, for example x86_64") + parser.add_argument("--compiler", help="File prefix, for example MSVC or Emscripten") + parser.add_argument("--precision", action="append", choices=PRECISIONS, dest="precisions") + parser.add_argument( + "--sample-mode", + choices=tuple(SAMPLE_PROFILES), + default="full", + ) + parser.add_argument( + "--consumer-mode", + choices=CONSUMER_MODES, + default="strict", + help="consumer compiler mode represented by these runners", + ) + parser.add_argument("--result-file", type=Path, help=argparse.SUPPRESS) + parser.add_argument("--reuse-compatible", action="store_true", help=argparse.SUPPRESS) + parser.add_argument("--canonical-publication", action="store_true", help=argparse.SUPPRESS) + args = parser.parse_args(argv) + if args.accuracy is None and args.benchmark is None: + parser.error("at least one of --accuracy or --benchmark is required") + explicit_identity = (args.platform, args.architecture, args.compiler) + if any(value is not None for value in explicit_identity) and not all( + value is not None for value in explicit_identity + ): + parser.error( + "--platform, --architecture, and --compiler must be supplied together" + ) + return args + + +def main(argv: list[str] | None = None) -> int: + args = parse_args(argv) + platform: str | None = None + architecture: str | None = None + compiler: str | None = None + if ( + args.platform is not None + and args.architecture is not None + and args.compiler is not None + ): + try: + platform = _safe_component(args.platform, "platform") + architecture = _safe_component(args.architecture, "architecture") + compiler = _safe_component(args.compiler, "compiler") + if (platform, architecture, compiler) not in CANONICAL_TARGETS: + raise MetricsError( + "unsupported canonical target label " + f"{platform}/{architecture}/{compiler}" + ) + except MetricsError as error: + print(f"metrics failed: {error}", file=sys.stderr) + return 1 + precisions = tuple(dict.fromkeys(args.precisions or PRECISIONS)) + profile = SAMPLE_PROFILES[args.sample_mode] + runners = tuple( + (name, executable) + for name, executable in ( + ("accuracy", args.accuracy), + ("benchmark", args.benchmark), + ) + if executable is not None + ) + runner_names = {name for name, _ in runners} + root = Path(__file__).resolve().parents[3] + identity = source_identity(root) + revision = identity.revision + fingerprint = identity.fingerprint + run_id = uuid.uuid4().hex + complete_run = ( + runner_names == {"accuracy", "benchmark"} + and args.sample_mode == "full" + and set(precisions) == set(PRECISIONS) + ) + complete_suite = ( + runner_names == {"accuracy", "benchmark"} + and set(precisions) == set(PRECISIONS) + ) + durable_run = complete_suite and args.sample_mode in DURABLE_SAMPLE_MODES + canonical_output_root = (root / "validation" / "metrics" / "data").resolve() + output_root = ( + args.output_root.resolve() + if args.output_root is not None + else root / "build" / "metrics" / "data" + ) + if output_root == canonical_output_root and not args.canonical_publication: + print( + "metrics failed: canonical data may only be written by " + "run_preset_metrics.py --release", + file=sys.stderr, + ) + return 1 + if args.canonical_publication and ( + args.sample_mode != "full" or output_root != canonical_output_root + ): + print( + "metrics failed: canonical publication requires the full profile " + "and canonical output root", + file=sys.stderr, + ) + return 1 + if complete_run and revision == "unknown": + print( + "metrics failed: a full published run requires a known source revision", + file=sys.stderr, + ) + return 1 + try: + provenance = _run_provenance(runners) + configuration = _preflight_runners( + runners, + fingerprint=fingerprint, + platform=platform, + architecture=architecture, + compiler=compiler, + publishable=complete_run, + ) + configuration = require_consumer_mode( + configuration, + args.consumer_mode, + "metrics runner preflight", + ) + if platform is None or architecture is None or compiler is None: + platform, architecture, compiler = infer_canonical_target( + configuration, + "metrics runner preflight", + ) + except MetricsError as error: + print(f"metrics failed: {error}", file=sys.stderr) + return 1 + assert platform is not None and architecture is not None and compiler is not None + if args.reuse_compatible and complete_suite: + reusable, rejection = _find_reusable_run( + root, + output_root, + sample_mode=args.sample_mode, + consumer_mode=args.consumer_mode, + platform=platform, + architecture=architecture, + compiler=compiler, + fingerprint=fingerprint, + configuration=configuration, + host=provenance["host"], + ) + if reusable is not None: + if args.result_file is not None: + try: + _write_json(args.result_file.resolve(), reusable) + except OSError as error: + print( + f"metrics failed: cannot write result file " + f"{args.result_file}: {error}", + file=sys.stderr, + ) + return 1 + print( + f"reusing compatible {args.sample_mode} metrics run " + f"{reusable['run_id']} for {reusable['target']}; " + "runner phases skipped", + flush=True, + ) + return 0 + print( + f"no reusable {args.sample_mode} metrics evidence: {rejection}; " + "running metrics", + flush=True, + ) + + target = ( + output_root / platform + / architecture + if durable_run + else root / "build" / "metrics" / "runs" / run_id / platform / architecture + ) + detail = target / "detail" + staging = detail / ".staging" / run_id + metadata = { + "schema_version": SCHEMA_VERSION, + "run_id": run_id, + "source_revision": revision, + "source_fingerprint": fingerprint, + "platform": platform, + "architecture": architecture, + "compiler": compiler, + "precisions": list(precisions), + "implementations": { + precision: [ + { + "id": implementation.id, + "short_label": implementation.short_label, + "label": implementation.label, + } + for implementation in enabled_implementations( + precision, + qdpp=configuration["harness"]["qdpp"] == "on", + tlfloat=configuration["harness"]["tlfloat"] == "on", + ) + if args.consumer_mode != "fastmath" or implementation.id == "fltx" + ] + for precision in precisions + }, + "sample_mode": args.sample_mode, + "consumer_mode": args.consumer_mode, + "phases_requested": sorted(runner_names), + **profile, + **provenance, + "created_utc": datetime.now(timezone.utc).isoformat(), + "status": "running", + "phases": {}, + "configuration": configuration, + } + metadata_stem = run_metadata_stem(compiler, args.consumer_mode) + metadata_partial = staging / f"{metadata_stem}.partial.json" + _write_json(metadata_partial, metadata) + staged_outputs: list[tuple[Path, Path]] = [] + phase_errors: list[str] = [] + phases = metadata["phases"] + assert isinstance(phases, dict) + + outputs_by_precision = { + precision: { + "accuracy": staging + / f"{metrics_stem(compiler, precision, args.consumer_mode)}_accuracy.csv", + "benchmark": staging + / f"{metrics_stem(compiler, precision, args.consumer_mode)}_benchmark.csv", + } + for precision in precisions + } + passed_by_precision: dict[str, dict[str, bool]] = { + precision: {} for precision in precisions + } + stop_phases = False + + parallel_accuracy = ( + bool(profile.get("accuracy_parallel", False)) + and "accuracy" in runner_names + and len(precisions) > 1 + ) + if parallel_accuracy: + accuracy_executable = next( + executable for name, executable in runners if name == "accuracy" + ) + requested_samples = int(profile["accuracy_samples"]) + for precision in precisions: + phases[f"{precision}.accuracy"] = {"status": "running"} + _write_json(metadata_partial, metadata) + + def run_accuracy(precision: str): + output = outputs_by_precision[precision]["accuracy"] + return _run( + [ + *_runner_command(accuracy_executable), + "--run-id", + run_id, + "--source-revision", + revision, + "--precision", + precision, + "--sample-mode", + args.sample_mode, + "--samples", + str(requested_samples), + *accuracy_policy_arguments(args.consumer_mode), + "--output", + str(output), + ], + "accuracy", + sample_mode=args.sample_mode, + samples=requested_samples, + trials=0, + ) + + with ThreadPoolExecutor(max_workers=len(precisions)) as executor: + futures: dict[str, Future] = { + precision: executor.submit(run_accuracy, precision) + for precision in precisions + } + for precision in precisions: + output = outputs_by_precision[precision]["accuracy"] + phase_name = f"{precision}.accuracy" + phase = phases[phase_name] + assert isinstance(phase, dict) + try: + observed, return_code = futures[precision].result() + configuration = _accept_runner_configuration( + configuration, + observed, + source=f"accuracy/{precision}", + fingerprint=fingerprint, + platform=platform, + architecture=architecture, + compiler=compiler, + publishable=complete_run, + ) + metadata["configuration"] = configuration + phase["return_code"] = return_code + if return_code: + raise MetricsError( + "accuracy/" + f"{precision}: runner exited with status {return_code}" + ) + phase["status"] = "passed" + phase["output"] = output.name + passed_by_precision[precision]["accuracy"] = True + except (MetricsError, OSError) as error: + partial = output.with_name( + output.stem + ".partial" + output.suffix + ) + phase["status"] = "failed" + phase["error"] = str(error) + if partial.is_file(): + phase["output"] = partial.name + elif output.is_file(): + phase["output"] = output.name + phase_errors.append(f"{phase_name}: {error}") + passed_by_precision[precision]["accuracy"] = False + stop_phases = True + _write_json(metadata_partial, metadata) + + # Gate every precision's accuracy before starting any benchmarks. A failed + # accuracy phase must not spend several more minutes producing benchmark + # evidence that cannot be published with that run. + for runner_name, executable in runners: + if parallel_accuracy and runner_name == "accuracy": + continue + if stop_phases: + break + for precision in precisions: + outputs = outputs_by_precision[precision] + passed = passed_by_precision[precision] + output = outputs[runner_name] + phase_name = f"{precision}.{runner_name}" + phase: dict[str, object] = {"status": "running"} + phases[phase_name] = phase + _write_json(metadata_partial, metadata) + common = [ + "--run-id", + run_id, + "--source-revision", + revision, + "--precision", + precision, + ] + try: + requested_samples = profile[f"{runner_name}_samples"] + if isinstance(requested_samples, dict): + requested_samples = requested_samples[precision] + requested_trials = ( + profile["benchmark_trials"] if runner_name == "benchmark" else 0 + ) + observed, return_code = _run( + [ + *_runner_command(executable), + *common, + "--sample-mode", + args.sample_mode, + "--samples", + str(requested_samples), + *( + ["--trials", str(requested_trials)] + if runner_name == "benchmark" + else [] + ), + *( + accuracy_policy_arguments(args.consumer_mode) + if runner_name == "accuracy" + else () + ), + "--output", + str(output), + ], + runner_name, + sample_mode=args.sample_mode, + samples=requested_samples, + trials=requested_trials, + ) + configuration = _accept_runner_configuration( + configuration, + observed, + source=f"{runner_name}/{precision}", + fingerprint=fingerprint, + platform=platform, + architecture=architecture, + compiler=compiler, + publishable=complete_run, + ) + metadata["configuration"] = configuration + phase["return_code"] = return_code + if return_code: + raise MetricsError( + f"{runner_name}/{precision}: runner exited with status {return_code}" + ) + phase["status"] = "passed" + phase["output"] = output.name + passed[runner_name] = True + except (MetricsError, OSError) as error: + partial = output.with_name( + output.stem + ".partial" + output.suffix + ) + phase["status"] = "failed" + phase["error"] = str(error) + if partial.is_file(): + phase["output"] = partial.name + elif output.is_file(): + phase["output"] = output.name + phase_errors.append(f"{phase_name}: {error}") + passed[runner_name] = False + stop_phases = True + _write_json(metadata_partial, metadata) + if stop_phases: + break + if stop_phases: + break + + for precision in precisions: + outputs = outputs_by_precision[precision] + accuracy = outputs["accuracy"] + benchmark = outputs["benchmark"] + passed = passed_by_precision[precision] + all_requested_passed = ( + set(passed) == runner_names and all(passed.values()) + ) + if ( + runner_names == {"accuracy", "benchmark"} + and all_requested_passed + ): + canonical = staging / ( + f"{metrics_stem(compiler, precision, args.consumer_mode)}.csv" + ) + try: + merge_precision( + accuracy, + benchmark, + canonical, + run_id=run_id, + revision=revision, + fingerprint=fingerprint, + precision=precision, + qdpp_enabled=configuration["harness"]["qdpp"] == "on", + tlfloat_enabled=( + configuration["harness"]["tlfloat"] == "on" + ), + consumer_mode=args.consumer_mode, + require_complete=complete_run, + expected_trials=_expected_benchmark_trials( + args.sample_mode, profile, + ), + ) + staged_outputs.extend( + ( + (accuracy, detail / accuracy.name), + (benchmark, detail / benchmark.name), + (canonical, target / canonical.name), + ) + ) + except (MetricsError, OSError) as error: + phase_errors.append(f"{precision}.merge: {error}") + elif all_requested_passed: + staged_outputs.extend( + (outputs[name], detail / outputs[name].name) + for name, _ in runners + ) + + if phase_errors: + metadata["status"] = "failed" + metadata["errors"] = phase_errors + _write_json(metadata_partial, metadata) + print("metrics failed:", file=sys.stderr) + for error in phase_errors: + print(f" {error}", file=sys.stderr) + print(f"partial evidence remains in {staging}", file=sys.stderr) + return 1 + try: + metadata["outputs"] = _output_hashes(staged_outputs, target) + except MetricsError as error: + metadata["status"] = "failed" + metadata["error"] = f"cannot hash published outputs: {error}" + _write_json(metadata_partial, metadata) + print(f"metrics failed: {metadata['error']}", file=sys.stderr) + return 1 + metadata["status"] = "complete" + final_metadata = detail / f"{metadata_stem}.json" + _write_json(metadata_partial, metadata) + try: + with _publication_lock(detail / f".{metadata_stem}.publish.lock"): + _publish_transaction( + staged_outputs, + metadata_partial, + final_metadata, + ) + except (MetricsError, OSError) as error: + metadata["status"] = "failed" + metadata["error"] = f"publish failed: {error}" + _write_json(metadata_partial, metadata) + print(f"metrics failed: {metadata['error']}", file=sys.stderr) + return 1 + try: + staging.rmdir() + staging.parent.rmdir() + except OSError: + pass + action = "published" if args.canonical_publication else "completed" + if args.result_file is not None: + try: + _write_json( + args.result_file.resolve(), + _result_handoff( + run_id=run_id, + sample_mode=args.sample_mode, + consumer_mode=args.consumer_mode, + platform=platform, + architecture=architecture, + compiler=compiler, + input_root=target.parents[1], + metadata=final_metadata, + ), + ) + except OSError as error: + print( + f"metrics failed: cannot write result file {args.result_file}: {error}", + file=sys.stderr, + ) + return 1 + print(f"{action} run {run_id} to {target}", flush=True) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/validation/metrics/_internal/run_native_accuracy.py b/validation/metrics/_internal/run_native_accuracy.py new file mode 100644 index 0000000..1607c8b --- /dev/null +++ b/validation/metrics/_internal/run_native_accuracy.py @@ -0,0 +1,463 @@ +#!/usr/bin/env python3 +"""Record native f32/f64 accuracy baselines without publishing summary tables.""" + +from __future__ import annotations + +import argparse +import sys +import uuid +from pathlib import Path + +from manifest import EXPECTED_ACCURACY +from run_metrics import ( + ACCURACY_FIELDS, + MetricsError, + SAMPLE_PROFILES, + _accuracy_values, + _benchmark_host_identity, + _preflight_runners, + _read_metadata, + _require_matching_configuration, + _read_csv, + _require_source_fingerprint, + _run, + _run_provenance, + _runner_command, + _sha256_file, + _validate_identity, + _validate_provenance, + _verify_output_hashes, + _write_json, + infer_canonical_target, + require_consumer_mode, +) +from source_fingerprint import source_identity + + +NATIVE_PRECISIONS = ("f32", "f64") +NATIVE_SCHEMA_VERSION = 2 +NATIVE_POLICY = "native-float-libm-baseline-v1" + + +def _validate_accuracy_evidence( + evidence: Path, + *, + precision: str, + run_id: str, + revision: str, + fingerprint: str, + allow_partial: bool = False, +) -> None: + rows = _read_csv( + evidence, + ACCURACY_FIELDS, + allow_partial=allow_partial, + ) + _validate_identity( + rows, + evidence, + run_id=run_id, + revision=revision, + fingerprint=fingerprint, + precision=precision, + ) + observed = { + (row["group"], row["operation"], row["domain"]) + for row in rows + } + expected = EXPECTED_ACCURACY[precision] + if observed != expected: + missing = sorted(expected - observed) + extra = sorted(observed - expected) + raise MetricsError( + f"{evidence}: native accuracy manifest mismatch " + f"(missing {missing[:5]}; unexpected {extra[:5]})" + ) + for row in rows: + _accuracy_values(row, evidence) + + +def _run_precision( + executable: Path, + output: Path, + *, + precision: str, + run_id: str, + revision: str, + fingerprint: str, + sample_mode: str, + consumer_mode: str, +) -> dict[str, dict[str, str]]: + command = [ + *_runner_command(executable), + "--precision", + precision, + "--output", + str(output), + "--run-id", + run_id, + "--source-revision", + revision, + "--sample-mode", + sample_mode, + "--advisory", + ] + configuration, return_code = _run( + command, + "accuracy", + sample_mode=sample_mode, + samples=SAMPLE_PROFILES[sample_mode]["accuracy_samples"], + trials=0, + ) + _require_source_fingerprint(configuration, fingerprint, f"native/{precision}") + configuration = require_consumer_mode( + configuration, + consumer_mode, + f"native/{precision}", + ) + + partial = output.with_name(output.stem + ".partial" + output.suffix) + evidence = partial if partial.is_file() else output + _validate_accuracy_evidence( + evidence, + precision=precision, + run_id=run_id, + revision=revision, + fingerprint=fingerprint, + allow_partial=evidence == partial, + ) + if return_code: + raise MetricsError(f"accuracy/{precision}: runner exited with status {return_code}") + return configuration + + +def _result_handoff( + *, + run_id: str, + sample_mode: str, + consumer_mode: str, + platform: str, + architecture: str, + compiler: str, + run_directory: Path, + metadata: Path, +) -> dict[str, object]: + return { + "schema_version": NATIVE_SCHEMA_VERSION, + "run_id": run_id, + "sample_mode": sample_mode, + "consumer_mode": consumer_mode, + "platform": platform, + "architecture": architecture, + "compiler": compiler, + "target": f"{platform}/{architecture}/{compiler}", + "run_directory": str(run_directory.resolve()), + "metadata": str(metadata.resolve()), + } + + +def _validate_reusable_candidate( + metadata_path: Path, + *, + sample_mode: str, + consumer_mode: str, + platform: str, + architecture: str, + compiler: str, + fingerprint: str, + configuration: dict[str, dict[str, str]], + host: object, +) -> dict[str, object]: + metadata = _read_metadata(metadata_path) + required = { + "schema_version": NATIVE_SCHEMA_VERSION, + "status": "complete", + "source_fingerprint": fingerprint, + "sample_mode": sample_mode, + "accuracy_samples": SAMPLE_PROFILES[sample_mode]["accuracy_samples"], + "consumer_mode": consumer_mode, + "platform": platform, + "architecture": architecture, + "compiler": compiler, + "target": f"{platform}/{architecture}/{compiler}", + "precisions": list(NATIVE_PRECISIONS), + "policy": NATIVE_POLICY, + "thresholds": "advisory", + } + for field, expected in required.items(): + if metadata.get(field) != expected: + raise MetricsError( + f"{metadata_path}: reusable {field} mismatch " + f"({metadata.get(field)!r} != {expected!r})" + ) + if metadata.get("configuration") != configuration: + raise MetricsError( + f"{metadata_path}: reusable build configuration changed" + ) + _validate_provenance( + metadata.get("host"), + metadata.get("executables"), + metadata_path, + ) + executables = metadata.get("executables") + if not isinstance(executables, dict) or set(executables) != {"accuracy"}: + raise MetricsError( + f"{metadata_path}: reusable executable provenance is incomplete" + ) + if _benchmark_host_identity( + metadata.get("host") + ) != _benchmark_host_identity(host): + raise MetricsError(f"{metadata_path}: reusable host identity changed") + + run_id = metadata.get("run_id") + revision = metadata.get("source_revision") + if not isinstance(run_id, str) or not run_id: + raise MetricsError(f"{metadata_path}: reusable run ID is missing") + if not isinstance(revision, str) or not revision: + raise MetricsError(f"{metadata_path}: reusable source revision is missing") + + run_directory = metadata_path.parent + expected_outputs = { + f"{precision}_accuracy.csv" for precision in NATIVE_PRECISIONS + } + _verify_output_hashes( + run_directory, + metadata.get("outputs"), + expected_outputs, + metadata_path, + ) + for precision in NATIVE_PRECISIONS: + _validate_accuracy_evidence( + run_directory / f"{precision}_accuracy.csv", + precision=precision, + run_id=run_id, + revision=revision, + fingerprint=fingerprint, + ) + + return _result_handoff( + run_id=run_id, + sample_mode=sample_mode, + consumer_mode=consumer_mode, + platform=platform, + architecture=architecture, + compiler=compiler, + run_directory=run_directory, + metadata=metadata_path, + ) + + +def _find_reusable_run( + output_root: Path, + *, + sample_mode: str, + consumer_mode: str, + platform: str, + architecture: str, + compiler: str, + fingerprint: str, + configuration: dict[str, dict[str, str]], + host: object, +) -> tuple[dict[str, object] | None, str]: + candidates = list(output_root.glob("*/native_accuracy_run.json")) + candidates.sort(key=lambda path: path.stat().st_mtime, reverse=True) + if not candidates: + return None, "no previous complete native evidence exists" + + rejection = "no compatible native evidence exists" + for candidate in candidates: + try: + return ( + _validate_reusable_candidate( + candidate, + sample_mode=sample_mode, + consumer_mode=consumer_mode, + platform=platform, + architecture=architecture, + compiler=compiler, + fingerprint=fingerprint, + configuration=configuration, + host=host, + ), + "", + ) + except (MetricsError, OSError) as error: + rejection = str(error) + return None, rejection + + +def parse_args(argv: list[str] | None = None) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--accuracy", required=True, type=Path) + parser.add_argument( + "--output-root", + type=Path, + default=Path(__file__).resolve().parents[3] / "build" / "metrics" / "native", + help="Parent for an invocation-specific result directory.", + ) + parser.add_argument( + "--sample-mode", + choices=tuple(SAMPLE_PROFILES), + default="full", + ) + parser.add_argument( + "--consumer-mode", + choices=("strict", "fastmath"), + default="strict", + ) + parser.add_argument( + "--reuse-compatible", + action="store_true", + help=argparse.SUPPRESS, + ) + parser.add_argument("--result-file", type=Path) + return parser.parse_args(argv) + + +def main(argv: list[str] | None = None) -> int: + args = parse_args(argv) + root = Path(__file__).resolve().parents[3] + identity = source_identity(root) + revision = identity.revision + accuracy = args.accuracy.resolve() + output_root = args.output_root.resolve() + try: + provenance = _run_provenance((("accuracy", accuracy),)) + configuration = _preflight_runners( + (("accuracy", accuracy),), + fingerprint=identity.fingerprint, + platform=None, + architecture=None, + compiler=None, + publishable=False, + ) + configuration = require_consumer_mode( + configuration, + args.consumer_mode, + "native accuracy preflight", + ) + platform, architecture, compiler = infer_canonical_target( + configuration, + "native accuracy preflight", + ) + except (MetricsError, OSError) as error: + print(f"native accuracy failed: {error}", file=sys.stderr) + return 1 + + if args.reuse_compatible: + reusable, rejection = _find_reusable_run( + output_root, + sample_mode=args.sample_mode, + consumer_mode=args.consumer_mode, + platform=platform, + architecture=architecture, + compiler=compiler, + fingerprint=identity.fingerprint, + configuration=configuration, + host=provenance["host"], + ) + if reusable is not None: + if args.result_file is not None: + _write_json(args.result_file.resolve(), reusable) + print( + f"reusing compatible native {args.sample_mode} accuracy run " + f"{reusable['run_id']} for {reusable['target']}; " + "f32/f64 phases skipped", + flush=True, + ) + return 0 + print( + f"no reusable native {args.sample_mode} accuracy evidence: " + f"{rejection}; running f32/f64 accuracy", + flush=True, + ) + + run_id = uuid.uuid4().hex + run_directory = output_root / run_id + run_directory.mkdir(parents=True, exist_ok=False) + + failures = [] + for precision in NATIVE_PRECISIONS: + output = run_directory / f"{precision}_accuracy.csv" + try: + observed_configuration = _run_precision( + accuracy, + output, + precision=precision, + run_id=run_id, + revision=revision, + fingerprint=identity.fingerprint, + sample_mode=args.sample_mode, + consumer_mode=args.consumer_mode, + ) + configuration = _require_matching_configuration( + configuration, + observed_configuration, + f"native/{precision}", + ) + except (MetricsError, OSError) as error: + print(f"{precision}: {error}", file=sys.stderr) + failures.append(precision) + + if failures: + print( + f"native accuracy failed for {', '.join(failures)}; " + f"complete streamed evidence remains in {run_directory}", + file=sys.stderr, + ) + return 1 + + outputs = { + path.name: _sha256_file(path) + for path in sorted(run_directory.glob("*_accuracy.csv")) + } + metadata = run_directory / "native_accuracy_run.json" + _write_json( + metadata, + { + "schema_version": NATIVE_SCHEMA_VERSION, + "status": "complete", + "run_id": run_id, + "source_revision": revision, + "source_fingerprint": identity.fingerprint, + "sample_mode": args.sample_mode, + "accuracy_samples": SAMPLE_PROFILES[ + args.sample_mode + ]["accuracy_samples"], + "consumer_mode": args.consumer_mode, + "platform": platform, + "architecture": architecture, + "compiler": compiler, + "target": f"{platform}/{architecture}/{compiler}", + "precisions": list(NATIVE_PRECISIONS), + "policy": NATIVE_POLICY, + "thresholds": "advisory", + "configuration": configuration, + "host": provenance["host"], + "executables": provenance["executables"], + "outputs": outputs, + }, + ) + if args.result_file is not None: + _write_json( + args.result_file.resolve(), + _result_handoff( + run_id=run_id, + sample_mode=args.sample_mode, + consumer_mode=args.consumer_mode, + platform=platform, + architecture=architecture, + compiler=compiler, + run_directory=run_directory, + metadata=metadata, + ), + ) + print( + f"native accuracy baseline recorded; detailed CSVs are in {run_directory}", + flush=True, + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/validation/metrics/_internal/source_fingerprint.py b/validation/metrics/_internal/source_fingerprint.py new file mode 100644 index 0000000..d1942d2 --- /dev/null +++ b/validation/metrics/_internal/source_fingerprint.py @@ -0,0 +1,356 @@ +#!/usr/bin/env python3 +"""Identify the build- and result-affecting source inputs for metrics runners.""" + +from __future__ import annotations + +import argparse +import hashlib +import os +import stat +import subprocess +from dataclasses import dataclass +from pathlib import Path + + +_HASH_FORMAT = b"fltx-runner-source-fingerprint-v3\0" +_RUNNER_ROOT_FILES = { + "CMakeLists.txt", + "CMakePresets.json", + "vcpkg-configuration.json", + "vcpkg.json", +} +_RUNNER_PREFIXES = ( + "cmake/", + "include/", + "src/", + "validation/extern/qdpp/", + "validation/extern/tlfloat/", + "validation/accuracy/", + "validation/benchmarks/runtime/", + "validation/support/", +) + + +@dataclass(frozen=True) +class SourceIdentity: + revision: str + fingerprint: str + + +def valid_fingerprint(value: object) -> bool: + return ( + isinstance(value, str) + and len(value) == 64 + and all(character in "0123456789abcdef" for character in value) + ) + + +def _included(path: str) -> bool: + normalized = path.replace("\\", "/").lstrip("./") + return ( + normalized in _RUNNER_ROOT_FILES + or normalized == "validation/CMakeLists.txt" + or any(normalized.startswith(prefix) for prefix in _RUNNER_PREFIXES) + ) + + +def _git(root: Path, *arguments: str) -> bytes: + return subprocess.check_output( + ["git", *arguments], + cwd=root, + stderr=subprocess.DEVNULL, + ) + + +def _git_paths(root: Path, *arguments: str) -> list[str]: + return [ + os.fsdecode(path) + for path in _git(root, *arguments).split(b"\0") + if path + ] + + +def _fallback_paths(root: Path) -> list[str]: + paths: list[str] = [] + for directory, names, files in os.walk(root): + relative_directory = Path(directory).relative_to(root) + names[:] = [ + name + for name in names + if name not in {".git", ".vs", "__pycache__", "build", "vcpkg_installed"} + and not name.startswith("cmake-build-") + ] + for name in files: + path = (relative_directory / name).as_posix() + if _included(path): + paths.append(path) + return paths + + +def _index_modes(root: Path) -> dict[str, str]: + modes: dict[str, str] = {} + for entry in _git(root, "ls-files", "--stage", "-z").split(b"\0"): + if not entry: + continue + metadata, raw_path = entry.split(b"\t", 1) + mode, _, stage = metadata.split() + if stage == b"0": + modes[os.fsdecode(raw_path)] = mode.decode("ascii") + return modes + + +def _worktree_mode(path: Path) -> str: + mode = path.lstat().st_mode + if stat.S_ISLNK(mode): + return "120000" + if stat.S_ISREG(mode): + return "100755" if mode & stat.S_IXUSR else "100644" + return f"special-{stat.S_IFMT(mode):o}" + + +def _clean_blob_ids(root: Path, paths: list[str]) -> dict[str, str]: + """Hash working files through the same clean filters Git uses for blobs.""" + + regular = [ + path + for path in paths + if "\n" not in path and "\r" not in path + ] + identities: dict[str, str] = {} + if regular: + output = subprocess.check_output( + ["git", "hash-object", "--stdin-paths"], + cwd=root, + input=b"".join(os.fsencode(path) + b"\n" for path in regular), + stderr=subprocess.DEVNULL, + ).splitlines() + if len(output) != len(regular): + raise subprocess.CalledProcessError(1, ["git", "hash-object", "--stdin-paths"]) + identities.update( + (path, blob.decode("ascii")) + for path, blob in zip(regular, output) + ) + + # --stdin-paths is line-delimited. Preserve unusual but valid Git paths by + # hashing those few files separately rather than making the common case + # pay for one Git process per source file. + for path in paths: + if "\n" not in path and "\r" not in path: + continue + identities[path] = _git( + root, + "hash-object", + f"--path={path}", + "--", + path, + ).decode("ascii").strip() + return identities + + +def _gitlink_state(root: Path, path: str) -> str: + candidate = root.joinpath(*path.replace("\\", "/").split("/")) + try: + submodule_root = _git( + candidate, + "rev-parse", + "--show-toplevel", + ).decode(errors="surrogateescape").strip() + if os.path.normcase(str(Path(submodule_root).resolve())) != os.path.normcase( + str(candidate.resolve()) + ): + return "missing" + head = _git( + candidate, + "rev-parse", + "--verify", + "HEAD", + ).decode("ascii").strip() + status = _git( + candidate, + "status", + "--porcelain=v1", + "-z", + "--untracked-files=all", + ) + if not status: + return head + + digest = hashlib.sha256() + digest.update(_git(candidate, "diff", "--binary", "HEAD", "--")) + untracked = _git_paths( + candidate, + "ls-files", + "--others", + "--exclude-standard", + "-z", + ) + for nested_path, blob in sorted( + _clean_blob_ids(candidate, untracked).items() + ): + digest.update(nested_path.encode("utf-8", errors="surrogateescape")) + digest.update(b"\0") + digest.update(blob.encode("ascii")) + digest.update(b"\0") + return f"{head}-dirty-{digest.hexdigest()}" + except (OSError, UnicodeError, subprocess.CalledProcessError): + return "missing" + + +def _hash_git_tree(root: Path) -> str: + modes = _index_modes(root) + paths = sorted(set(_git_paths( + root, + "ls-files", + "--cached", + "--others", + "--exclude-standard", + "-z", + ))) + + files: list[str] = [] + identities: dict[str, str] = {} + for path in paths: + if not _included(path): + continue + candidate = root.joinpath(*path.replace("\\", "/").split("/")) + if modes.get(path) == "160000": + identities[path] = f"gitlink:{_gitlink_state(root, path)}" + elif not candidate.exists() and not candidate.is_symlink(): + identities[path] = "missing" + elif candidate.is_symlink(): + target = os.fsencode(os.readlink(candidate)) + blob = subprocess.check_output( + ["git", "hash-object", "--stdin"], + cwd=root, + input=target, + stderr=subprocess.DEVNULL, + ).decode("ascii").strip() + identities[path] = f"blob:{blob}" + elif candidate.is_file(): + files.append(path) + else: + identities[path] = "special" + + identities.update( + (path, f"blob:{blob}") + for path, blob in _clean_blob_ids(root, files).items() + ) + + digest = hashlib.sha256() + digest.update(_HASH_FORMAT) + for path in paths: + if not _included(path): + continue + candidate = root.joinpath(*path.replace("\\", "/").split("/")) + mode = modes.get(path) + if mode is None: + try: + mode = _worktree_mode(candidate) + except FileNotFoundError: + mode = "missing" + digest.update(mode.encode("ascii")) + digest.update(b"\0") + digest.update(path.replace("\\", "/").encode( + "utf-8", + errors="surrogateescape", + )) + digest.update(b"\0") + digest.update(identities[path].encode("ascii")) + digest.update(b"\0") + return digest.hexdigest() + + +def _hash_fallback_tree(root: Path, paths: list[str]) -> str: + digest = hashlib.sha256() + digest.update(_HASH_FORMAT) + + for path in sorted(set(paths)): + normalized = path.replace("\\", "/") + if not _included(normalized): + continue + digest.update(normalized.encode("utf-8", errors="surrogateescape")) + digest.update(b"\0") + candidate = root.joinpath(*normalized.split("/")) + try: + mode = candidate.lstat().st_mode + except FileNotFoundError: + digest.update(b"missing\0") + continue + + if stat.S_ISLNK(mode): + digest.update(b"symlink\0") + digest.update(os.fsencode(os.readlink(candidate))) + elif stat.S_ISREG(mode): + digest.update(b"file\0") + with candidate.open("rb") as stream: + for block in iter(lambda: stream.read(1024 * 1024), b""): + digest.update(block) + else: + digest.update(b"special\0") + digest.update(b"\0") + return digest.hexdigest() + + +def _git_is_dirty(root: Path) -> bool: + changed = _git_paths(root, "diff", "--name-only", "-z", "HEAD", "--") + if any(_included(path) for path in changed): + return True + return any( + _included(path) + for path in _git_paths(root, "ls-files", "--others", "--exclude-standard", "-z") + ) + + +def source_identity(root: Path) -> SourceIdentity: + """Return a content fingerprint and a readable revision for ``root``.""" + + root = root.resolve() + try: + revision = _git(root, "rev-parse", "--verify", "HEAD").decode("ascii").strip() + fingerprint = _hash_git_tree(root) + readable_revision = ( + f"{revision}-dirty-{fingerprint[:12]}" + if _git_is_dirty(root) + else revision + ) + return SourceIdentity(readable_revision, fingerprint) + except (OSError, UnicodeError, subprocess.CalledProcessError): + fingerprint = _hash_fallback_tree(root, _fallback_paths(root)) + return SourceIdentity("unknown", fingerprint) + + +def write_header(path: Path, identity: SourceIdentity) -> bool: + """Atomically update the generated C++ header, returning whether it changed.""" + + content = ( + "#pragma once\n\n" + f"#define FLTX_METRICS_BUILD_SOURCE_FINGERPRINT \"{identity.fingerprint}\"\n" + ) + try: + if path.read_text(encoding="utf-8") == content: + return False + except OSError: + pass + + path.parent.mkdir(parents=True, exist_ok=True) + temporary = path.with_suffix(path.suffix + ".writing") + temporary.write_text(content, encoding="utf-8", newline="\n") + os.replace(temporary, path) + return True + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", required=True, type=Path) + parser.add_argument("--output", required=True, type=Path) + args = parser.parse_args() + + identity = source_identity(args.root) + changed = write_header(args.output, identity) + state = "updated" if changed else "unchanged" + print(f"fltx source fingerprint {identity.fingerprint} ({state})") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/validation/metrics/_internal/supported_preset_pipeline.py b/validation/metrics/_internal/supported_preset_pipeline.py new file mode 100644 index 0000000..a1d9c5e --- /dev/null +++ b/validation/metrics/_internal/supported_preset_pipeline.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +"""Run metrics for every supported preset on the current host.""" + +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +VALIDATION_INTERNAL = Path(__file__).resolve().parents[2] / "_internal" +sys.path.insert(0, str(VALIDATION_INTERNAL)) + +import preset_pipeline +from preset_support import ( + SUPPORTED_PRESETS, + WASM_PRESET, + supported_presets as _supported_presets, +) + + +def supported_presets( + host_system: str | None = None, + host_machine: str | None = None, +) -> tuple[str, ...]: + return _supported_presets(host_system, host_machine) + + +def parse_args(argv: list[str] | None = None) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + preset_pipeline.add_workflow_arguments(parser) + return parser.parse_args(argv) + + +def main(root: Path, argv: list[str] | None = None) -> int: + args = parse_args(argv) + try: + presets = supported_presets() + except preset_pipeline.PipelineError as error: + print(f"all-supported metrics failed: {error}", file=sys.stderr) + return 1 + + for index, preset in enumerate(presets, start=1): + print( + f"running metrics preset {index}/{len(presets)}: {preset}", + flush=True, + ) + try: + outputs = preset_pipeline.run_pipeline_from_args(root, preset, args) + except preset_pipeline.PipelineError as error: + print( + f"all-supported metrics failed for {preset}: {error}", + file=sys.stderr, + ) + return 1 + print(f"generated metrics reports for {preset}:", flush=True) + for output in outputs: + print(output, flush=True) + return 0 diff --git a/validation/metrics/_internal/svg_table.py b/validation/metrics/_internal/svg_table.py new file mode 100644 index 0000000..a10a68b --- /dev/null +++ b/validation/metrics/_internal/svg_table.py @@ -0,0 +1,188 @@ +#!/usr/bin/env python3 +"""Small, dependency-free SVG table renderer used by metrics.""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from html import escape +from pathlib import Path + + +PAGE = "#f5f7fb" +INK = "#111827" +MUTED = "#4b5563" +GRID = "#000000" +HEADER = "#3b4b63" +GROUP = "#dbe2ea" +WHITE = "#ffffff" +FONT_SCALE = 1.2 + + +@dataclass(frozen=True) +class Column: + heading: str + subheading: str = "" + + +@dataclass(frozen=True) +class Cell: + lines: tuple[str, ...] = () + fill: str = WHITE + foreground: str = INK + tooltip: str = "" + + +@dataclass(frozen=True) +class Row: + group: str + label: str + cells: tuple[Cell, ...] + + +@dataclass(frozen=True) +class Table: + title: str + description: str + columns: tuple[Column, ...] + rows: tuple[Row, ...] + legend: tuple[str, ...] = field(default_factory=tuple) + + +def _text( + x: float, + y: float, + value: str, + *, + size: int = 12, + color: str = INK, + weight: int = 400, + anchor: str = "start", +) -> str: + rendered_size = size * FONT_SCALE + return ( + f'' + f"{escape(value)}" + ) + + +def _rect(x: float, y: float, width: float, height: float, fill: str) -> str: + return ( + f'' + ) + + +def render(table: Table) -> str: + """Render a compact table. Text and symbols always carry the color meaning.""" + + label_width = max(220, min(430, 18 + max([12] + [len(r.label) for r in table.rows]) * 7)) + column_width = 142 + margin = 18 + title_height = 78 + len(table.legend) * 16 + header_height = 52 + group_height = 28 + def row_height(row: Row) -> int: + line_count = max((len(cell.lines) for cell in row.cells), default=1) + return max(48, 16 + line_count * 17) + groups = [] + for row in table.rows: + if row.group not in groups: + groups.append(row.group) + width = margin * 2 + label_width + max(1, len(table.columns)) * column_width + height = ( + margin * 2 + + title_height + + header_height + + len(groups) * group_height + + sum(row_height(row) for row in table.rows) + ) + parts = [ + ( + f'' + ), + f'{escape(table.title)}', + f'{escape(table.description)}', + f'', + _text(margin, margin + 26, table.title, size=24, weight=700), + _text(margin, margin + 50, table.description, size=12, color=MUTED), + ] + for index, line in enumerate(table.legend): + parts.append(_text(margin, margin + 70 + index * 16, line, size=11, color=MUTED)) + + y = margin + title_height + parts.append(_rect(margin, y, label_width, header_height, HEADER)) + parts.append(_text(margin + 12, y + 31, "Operation", size=13, color=WHITE, weight=700)) + x = margin + label_width + for column in table.columns: + parts.append(_rect(x, y, column_width, header_height, HEADER)) + parts.append( + _text( + x + column_width / 2, + y + 22, + column.heading, + size=12, + color=WHITE, + weight=700, + anchor="middle", + ) + ) + if column.subheading: + parts.append( + _text( + x + column_width / 2, + y + 40, + column.subheading, + size=10, + color="#e2e8f0", + weight=600, + anchor="middle", + ) + ) + x += column_width + y += header_height + + for group in groups: + parts.append(_rect(margin, y, label_width + len(table.columns) * column_width, group_height, GROUP)) + parts.append(_text(margin + 12, y + 19, group, size=12, weight=700)) + y += group_height + for row in (candidate for candidate in table.rows if candidate.group == group): + if len(row.cells) != len(table.columns): + raise ValueError(f"row {row.label!r} has the wrong cell count") + height = row_height(row) + parts.append(_rect(margin, y, label_width, height, WHITE)) + parts.append(_text(margin + 12, y + 29, row.label, size=12, weight=600)) + x = margin + label_width + for cell in row.cells: + parts.append("") + if cell.tooltip: + parts.append(f"{escape(cell.tooltip)}") + parts.append(_rect(x, y, column_width, height, cell.fill)) + line_count = len(cell.lines) + baseline = y + 28 if line_count <= 1 else y + 19 + for line_index, line in enumerate(cell.lines): + parts.append( + _text( + x + column_width / 2, + baseline + line_index * 17, + line, + size=11, + color=cell.foreground, + weight=650, + anchor="middle", + ) + ) + parts.append("") + x += column_width + y += height + parts.append("") + return "\n".join(parts) + "\n" + + +def write(table: Table, path: Path) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + partial = path.with_suffix(".partial" + path.suffix) + partial.write_text(render(table), encoding="utf-8", newline="\n") + partial.replace(path) diff --git a/validation/metrics/_internal/test_tools.py b/validation/metrics/_internal/test_tools.py new file mode 100644 index 0000000..be168a2 --- /dev/null +++ b/validation/metrics/_internal/test_tools.py @@ -0,0 +1,3785 @@ +#!/usr/bin/env python3 +"""Focused tests for the normalized metrics tools.""" + +from __future__ import annotations + +import copy +import colorsys +import csv +import json +import io +import math +import re +import subprocess +import tempfile +import threading +import unittest +from contextlib import redirect_stderr, redirect_stdout +from pathlib import Path +from unittest import mock + +import build_tables +import build_performance +import build_overview +import build_profile_comparison +import manifest +import preset_pipeline +import report_pipeline +import run_metrics +import run_native_accuracy +import source_fingerprint +import supported_preset_pipeline +from svg_table import Cell, Column, Row, Table, WHITE, render + + +FINGERPRINT = "a" * 64 + + +def accuracy_row( + implementation: str = "fltx", + *, + group: str = "arithmetic", + operation: str = "add", + domain: str = "moderate", +) -> dict[str, str]: + identity = { + "fltx": ("fltx", "fltx bl::f128"), + "qdpp": ("ddreal", "qdpp dd_real"), + "cppdd": ("cppdd", "boost::multiprecision::cpp_double_double"), + "tlfloat": ("tlquad", "TLFloat Quad"), + }[implementation] + gated = implementation == "fltx" + return { + "schema_version": run_metrics.SCHEMA_VERSION, + "run_id": "run", + "source_revision": "rev", + "source_fingerprint": FINGERPRINT, + "precision": "f128", + "group": group, + "operation": operation, + "implementation": implementation, + "implementation_short": identity[0], + "implementation_label": identity[1], + "api": f"<{implementation} & api>", + "domain": domain, + "samples": "4", + "seed": "7", + "mean_bits": "110", + "p01_bits": "105", + "worst_bits": "100", + "required_worst_bits": "90" if gated else "", + "margin_bits": "10" if gated else "", + "pass": "yes" if gated else "", + "special_support": "Both", + "signed_zero_support": "yes", + "worst_input": "1", + "observed": "1", + "reference": "1", + } + + +def benchmark_row( + implementation: str = "fltx", + *, + ns: float = 10.0, + ratio: float | None = None, + group: str = "arithmetic", + operation: str = "add", +) -> dict[str, str]: + identity = { + "fltx": ("fltx", "fltx bl::f128"), + "qdpp": ("ddreal", "qdpp dd_real"), + "cppdd": ("cppdd", "boost::multiprecision::cpp_double_double"), + "tlfloat": ("tlquad", "TLFloat Quad"), + }[implementation] + return { + "schema_version": run_metrics.SCHEMA_VERSION, + "run_id": "run", + "source_revision": "rev", + "source_fingerprint": FINGERPRINT, + "precision": "f128", + "group": group, + "operation": operation, + "implementation": implementation, + "implementation_short": identity[0], + "implementation_label": identity[1], + "api": f"<{implementation} & api>", + "samples": "16", + "ns_iter": str(ns), + "trials_ns": f"{ns}|{ns}|{ns}", + "iterations": "48", + "elapsed_ns": str(ns * 48), + "speed_ratio": "" if ratio is None else str(ratio), + } + + +def synthetic_dataset(order: tuple[str, ...]) -> tuple[build_tables.Dataset, build_tables.Target]: + target = build_tables.Target("windows", "x86_64", "MSVC") + rows = { + "fltx": { + **benchmark_row(), + **{ + "mean_bits": "110", "p01_bits": "105", "worst_bits": "100", + "domains_passed": "1", "domains_total": "1", + "min_margin_bits": "10", "accuracy_pass": "yes", + "special_support": "Both", + "signed_zero_support": "yes", + "run_id": "run", + }, + }, + "qdpp": { + **benchmark_row("qdpp", ns=8, ratio=0.8), + **{ + "mean_bits": "100", "p01_bits": "95", "worst_bits": "90", + "domains_passed": "1", "domains_total": "1", + "min_margin_bits": "0", "accuracy_pass": "yes", + "special_support": "Both", "signed_zero_support": "yes", + "run_id": "run", + }, + }, + "cppdd": { + **benchmark_row("cppdd", ns=20, ratio=2), + **{ + "mean_bits": "108", "p01_bits": "102", "worst_bits": "98", + "domains_passed": "1", "domains_total": "1", + "min_margin_bits": "8", "accuracy_pass": "yes", + "special_support": "Both", "signed_zero_support": "yes", + "run_id": "run", + }, + }, + "tlfloat": { + **benchmark_row("tlfloat", ns=12, ratio=1.2), + **{ + "mean_bits": "112", "p01_bits": "108", "worst_bits": "101", + "domains_passed": "1", "domains_total": "1", + "min_margin_bits": "11", "accuracy_pass": "yes", + "special_support": "Both", "signed_zero_support": "yes", + "run_id": "run", + }, + }, + } + canonical = { + (target, "f128", "arithmetic", "add", implementation): + rows[implementation] + for implementation in order + } + return ( + build_tables.Dataset( + canonical=canonical, + accuracy={}, + implementations={(target, "f128"): order, (target, "f256"): ("fltx",)}, + revisions={"rev"}, + fingerprints={FINGERPRINT}, + runs={target: "run"}, + ), + target, + ) + + +def synthetic_performance_dataset( + order: tuple[str, ...], +) -> tuple[build_performance.PerformanceDataset, build_tables.Target]: + source, target = synthetic_dataset(order) + column = build_performance.ColumnKey("f128", target) + rows = { + (column, group, operation, implementation): row + for ( + row_target, + precision, + group, + operation, + implementation, + ), row in source.canonical.items() + if row_target == target and precision == "f128" + } + return ( + build_performance.PerformanceDataset( + columns=(column,), + rows=rows, + implementations={ + (column, "arithmetic", "add"): order, + }, + run_ids={column: "run"}, + sources={column: Path("windows/x86_64/MSVC_f128.csv")}, + ), + target, + ) + + +def write_canonical(path: Path, rows: list[dict[str, str]]) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + with path.open("w", newline="", encoding="utf-8") as stream: + writer = csv.DictWriter(stream, fieldnames=run_metrics.CANONICAL_FIELDS) + writer.writeheader() + writer.writerows({ + field: row.get(field, "") + for field in run_metrics.CANONICAL_FIELDS + } for row in rows) + + +class SourceFingerprintTests(unittest.TestCase): + def test_report_tool_changes_do_not_invalidate_runner_sources(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + (root / "include").mkdir() + (root / "validation" / "metrics").mkdir(parents=True) + header = root / "include" / "value.hpp" + renderer = root / "validation" / "metrics" / "_internal" / "build_tables.py" + renderer.parent.mkdir() + header.write_text("#pragma once\n", encoding="utf-8") + renderer.write_text("COLOUR = 'before'\n", encoding="utf-8") + subprocess.run(["git", "init", "-q"], cwd=root, check=True) + subprocess.run( + ["git", "config", "user.email", "metrics@example.invalid"], + cwd=root, + check=True, + ) + subprocess.run( + ["git", "config", "user.name", "Metrics Test"], + cwd=root, + check=True, + ) + subprocess.run(["git", "add", "."], cwd=root, check=True) + subprocess.run( + ["git", "commit", "-qm", "initial"], + cwd=root, + check=True, + ) + + initial = source_fingerprint.source_identity(root) + renderer.write_text("COLOUR = 'new'\n", encoding="utf-8") + report_only = source_fingerprint.source_identity(root) + self.assertEqual(report_only.fingerprint, initial.fingerprint) + self.assertEqual(report_only.revision, initial.revision) + subprocess.run(["git", "add", "."], cwd=root, check=True) + subprocess.run( + ["git", "commit", "-qm", "renderer"], + cwd=root, + check=True, + ) + committed_report = source_fingerprint.source_identity(root) + self.assertEqual(committed_report.fingerprint, initial.fingerprint) + self.assertNotEqual(committed_report.revision, initial.revision) + + header.write_text("#pragma once\n#define VALUE 1\n", encoding="utf-8") + runner_changed = source_fingerprint.source_identity(root) + self.assertNotEqual(runner_changed.fingerprint, initial.fingerprint) + self.assertIn("-dirty-", runner_changed.revision) + + def test_runner_scope_includes_build_inputs_but_not_local_presets(self) -> None: + self.assertTrue(source_fingerprint._included("include/fltx/fltx.hpp")) + self.assertTrue(source_fingerprint._included("validation/accuracy/main.cpp")) + self.assertTrue(source_fingerprint._included("validation/CMakeLists.txt")) + self.assertTrue(source_fingerprint._included("vcpkg.json")) + self.assertFalse(source_fingerprint._included("validation/metrics/_internal/build_tables.py")) + self.assertFalse(source_fingerprint._included("validation/metrics/_internal/build_performance.py")) + self.assertFalse(source_fingerprint._included("CMakeUserPresets.json")) + + +class ManifestTests(unittest.TestCase): + def test_operation_families_match_the_public_metrics_taxonomy(self) -> None: + operations = manifest.EXPECTED_BENCHMARK["f128"] + arithmetic = { + operation + for group, operation in operations + if group == "arithmetic" + } + self.assertEqual( + arithmetic, + {"add", "subtract", "multiply", "divide"}, + ) + self.assertEqual( + tuple(build_tables.OPERATION_ORDER["arithmetic"]), + ("add", "subtract", "multiply", "divide"), + ) + self.assertEqual( + tuple(build_tables.GROUP_ORDER), + ( + "arithmetic", "io", "rounding", "remainders", + "floating_point_utilities", "roots_and_powers", + "exponentials", "logarithms", "trigonometric", "hyperbolic", + "inverse_hyperbolic", "special_functions", "comparisons", + "random", "mixed_workloads", + ), + ) + self.assertIn(("roots_and_powers", "sqr"), operations) + self.assertNotIn(("floating_point_utilities", "sqr"), operations) + roots = tuple(build_tables.OPERATION_ORDER["roots_and_powers"]) + self.assertLess(roots.index("sqr"), roots.index("sqrt")) + self.assertFalse({ + "remainder", "decomposition", "stepping", "comparison", + "roots", "powers", "trig", "special", "expressions", "workloads", + } & {group for group, _ in operations}) + + def test_current_counts_are_derived_per_implementation(self) -> None: + self.assertEqual( + {key: len(value) for key, value in + manifest.benchmark_manifest( + "f128", qdpp=True, tlfloat=True, + ).items()}, + {"fltx": 85, "qdpp": 60, "cppdd": 75, "tlfloat": 71}, + ) + self.assertEqual( + {key: len(value) for key, value in + manifest.accuracy_manifest( + "f256", qdpp=True, tlfloat=True, + ).items()}, + {"fltx": 127, "qdpp": 95, "mpfr64": 118, "tlfloat": 111}, + ) + + def test_extended_accuracy_separates_arithmetic_subnormal_evidence(self) -> None: + rows = manifest.accuracy_manifest( + "f256", qdpp=True, tlfloat=True, + )["fltx"] + arithmetic = { + row for row in rows + if row[0] == "arithmetic" + } + self.assertEqual( + arithmetic, + { + ("arithmetic", "add", "general"), + ("arithmetic", "add", "subnormal"), + ("arithmetic", "subtract", "general"), + ("arithmetic", "subtract", "subnormal"), + ("arithmetic", "multiply", "general"), + ("arithmetic", "multiply", "subnormal"), + ("arithmetic", "divide", "general"), + ("arithmetic", "divide", "subnormal"), + }, + ) + + def test_fmod_quotient_reduction_domain_is_extended_precision_only(self) -> None: + quotient_reduction = ("remainders", "fmod", "quotient_reduction") + for precision in ("f128", "f256"): + self.assertIn( + quotient_reduction, + manifest.accuracy_manifest( + precision, qdpp=True, tlfloat=True, + )["fltx"], + ) + for precision in ("f32", "f64"): + self.assertNotIn( + quotient_reduction, + manifest.EXPECTED_ACCURACY[precision], + ) + + def test_native_accuracy_uses_precision_specific_domains(self) -> None: + rows = manifest.EXPECTED_ACCURACY["f64"] + self.assertIn(("arithmetic", "add", "near_one"), rows) + self.assertNotIn(("arithmetic", "add", "general"), rows) + + def test_native_accuracy_rows_are_threshold_gated_baselines(self) -> None: + row = accuracy_row() + row["implementation"] = "native" + row["implementation_short"] = "float" + row["implementation_label"] = "native float" + + _, _, _, margin, passed, _ = run_metrics._accuracy_values( + row, + Path("native.csv"), + ) + + self.assertEqual(margin, 10.0) + self.assertIs(passed, True) + + def test_trig_accuracy_requires_quadrant_boundaries(self) -> None: + for precision in ("f128", "f256"): + rows = manifest.accuracy_manifest( + precision, + qdpp=True, + tlfloat=True, + )["fltx"] + for operation in ("sin", "cos", "tan"): + self.assertIn( + ( + "trigonometric", + operation, + "quadrant_boundaries", + ), + rows, + ) + + def test_qdpp_disabled_keeps_boost(self) -> None: + self.assertEqual( + tuple(manifest.benchmark_manifest( + "f128", qdpp=False, tlfloat=True, + )), + ("fltx", "cppdd", "tlfloat"), + ) + + def test_formatter_accuracy_rows_follow_supported_apis(self) -> None: + accuracy = manifest.accuracy_manifest( + "f128", qdpp=True, tlfloat=True, + ) + formatter_rows = { + ("io", operation, domain) + for operation in ("to_string", "to_chars") + for domain in ("moderate", "wide_exponent") + } + self.assertTrue(formatter_rows <= accuracy["fltx"]) + self.assertTrue(formatter_rows <= accuracy["qdpp"]) + self.assertIn(("io", "to_string", "moderate"), accuracy["cppdd"]) + self.assertNotIn(("io", "to_chars", "moderate"), accuracy["cppdd"]) + self.assertIn(("io", "to_string", "moderate"), accuracy["tlfloat"]) + self.assertNotIn(("io", "to_chars", "moderate"), accuracy["tlfloat"]) + + def test_comparison_accuracy_covers_every_enabled_implementation(self) -> None: + accuracy = manifest.accuracy_manifest( + "f256", qdpp=True, tlfloat=True, + ) + rows = { + ("comparisons", operation, "moderate") + for operation in ( + "equal", "not_equal", "less", "less_equal", + "greater", "greater_equal", + ) + } + for implementation_rows in accuracy.values(): + self.assertTrue(rows <= implementation_rows) + + def test_noteworthy_public_api_labels(self) -> None: + self.assertEqual( + manifest.api_name("qdpp", "f128", "io", "parse"), + "qdpp read", + ) + self.assertEqual( + manifest.api_name("cppdd", "f128", "roots_and_powers", "ipow"), + "boost::multiprecision::pow(value, int)", + ) + self.assertEqual( + manifest.api_name("tlfloat", "f128", "rounding", "roundeven"), + "tlfloat::rint", + ) + + +class ValidationTests(unittest.TestCase): + @staticmethod + def configuration_banner(*, simulated_consteval: str = "off"): + consumer = { + "fma": "AUTO", + "simd": "off", + "fast-math": "off", + "simulated-consteval": simulated_consteval, + "x86": "1", + "arm64": "0", + "tu-x86-fma": "0", + "has-x86-fma": "0", + } + return { + "harness": {"qdpp": "off", "tlfloat": "off"}, + "build": { + "compiler-id": "MSVC", + "compiler-version": "test", + "config": "Release", + "system": "Windows", + "processor": "x64", + "architecture": "x86_64", + "frontend-variant": "MSVC", + "optimized": "1", + "flags-hash": FINGERPRINT, + "source-fingerprint": FINGERPRINT, + }, + "consumer": consumer, + "library": { + "fma": "AUTO", + "simd": "off", + "fast-math-request": "AUTO", + "fast-math": "off", + "x86": "1", + "arm64": "0", + "tu-x86-fma": "0", + "runtime-fma": "unavailable", + }, + "library_strategy": { + field: "0" + for field in run_metrics.REQUIRED_CONFIGURATION_FIELDS[ + "library_strategy" + ] + }, + } + + def test_configuration_requires_the_execution_mode(self) -> None: + configuration = run_metrics._validate_configuration( + self.configuration_banner(simulated_consteval="on"), + "configuration banner", + ) + self.assertEqual(configuration["consumer"]["simulated-consteval"], "on") + + incomplete = self.configuration_banner() + del incomplete["consumer"]["simulated-consteval"] + with self.assertRaisesRegex( + run_metrics.MetricsError, + "missing simulated-consteval", + ): + run_metrics._validate_configuration(incomplete, "configuration banner") + + def test_consumer_modes_are_verified_and_named_independently(self) -> None: + strict = self.configuration_banner() + self.assertEqual( + run_metrics.require_consumer_mode( + strict, + "strict", + "strict runner", + )["consumer"]["fast-math"], + "off", + ) + + fastmath = self.configuration_banner() + fastmath["consumer"]["fast-math"] = "on" + self.assertEqual( + run_metrics.require_consumer_mode( + fastmath, + "fastmath", + "fast-math runner", + )["consumer"]["fast-math"], + "on", + ) + + with self.assertRaisesRegex(run_metrics.MetricsError, "expected off"): + run_metrics.require_consumer_mode( + fastmath, + "strict", + "mislabelled runner", + ) + + self.assertEqual( + run_metrics.metrics_stem("MSVC", "f128", "strict"), + "MSVC_f128", + ) + self.assertEqual( + run_metrics.metrics_stem("MSVC", "f128", "fastmath"), + "MSVC_f128_fastmath", + ) + self.assertEqual( + run_metrics.run_metadata_stem("MSVC", "fastmath"), + "MSVC_fastmath_run", + ) + + def test_fastmath_accuracy_is_advisory(self) -> None: + self.assertEqual(run_metrics.accuracy_policy_arguments("strict"), ()) + self.assertEqual( + run_metrics.accuracy_policy_arguments("fastmath"), + ("--advisory",), + ) + + def test_metrics_runner_accepts_either_phase_independently(self) -> None: + common = [ + "--platform", "windows", + "--architecture", "x86_64", + "--compiler", "MSVC", + ] + accuracy = run_metrics.parse_args([ + "--accuracy", "accuracy.exe", *common, + ]) + benchmark = run_metrics.parse_args([ + "--benchmark", "benchmark.exe", *common, + ]) + self.assertEqual(accuracy.accuracy, Path("accuracy.exe")) + self.assertIsNone(accuracy.benchmark) + self.assertIsNone(benchmark.accuracy) + self.assertEqual(benchmark.benchmark, Path("benchmark.exe")) + + def test_metrics_runner_can_infer_target(self) -> None: + args = run_metrics.parse_args([ + "--accuracy", "accuracy.exe", + "--benchmark", "benchmark.exe", + ]) + self.assertIsNone(args.platform) + self.assertIsNone(args.compiler) + + def test_preset_pipeline_can_explicitly_force_a_rerun(self) -> None: + args = preset_pipeline.parse_args([ + "--preset", "native-release", + "--force-rerun", + ]) + self.assertTrue(args.force_rerun) + self.assertEqual(args.workflow, "standard") + + def test_preset_metrics_help_describes_every_public_option(self) -> None: + output = io.StringIO() + with redirect_stdout(output), self.assertRaises(SystemExit) as exit_status: + preset_pipeline.parse_args(["--help"]) + + self.assertEqual(exit_status.exception.code, 0) + help_text = output.getvalue() + for expected in ( + "--preset PRESET", + "CMakePresets.json preset name", + "--quick", + "--standard", + "--full", + "--release", + "--output-root PATH", + "--force-rerun", + "--consumer-mode {strict,fastmath,all}", + ): + self.assertIn(expected, help_text) + self.assertNotIn("--sample-mode", help_text) + + def test_all_supported_metrics_help_omits_preset(self) -> None: + output = io.StringIO() + with redirect_stdout(output), self.assertRaises(SystemExit) as exit_status: + supported_preset_pipeline.parse_args(["--help"]) + + self.assertEqual(exit_status.exception.code, 0) + help_text = output.getvalue() + self.assertNotIn("--preset", help_text) + for expected in ( + "--quick", + "--standard", + "--full", + "--release", + "--output-root PATH", + "--force-rerun", + "--consumer-mode {strict,fastmath,all}", + ): + self.assertIn(expected, help_text) + self.assertNotIn("--sample-mode", help_text) + + def test_native_accuracy_runner_supports_compatible_reuse(self) -> None: + args = run_native_accuracy.parse_args([ + "--accuracy", "accuracy.exe", + "--reuse-compatible", + ]) + self.assertTrue(args.reuse_compatible) + + def test_native_accuracy_reuses_matching_complete_evidence(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + output_root = Path(temporary) + run_directory = output_root / "cached-run" + run_directory.mkdir() + outputs = {} + for precision in run_native_accuracy.NATIVE_PRECISIONS: + path = run_directory / f"{precision}_accuracy.csv" + path.write_text(f"{precision}\n", encoding="utf-8") + outputs[path.name] = run_metrics._sha256_file(path) + + configuration = self.configuration_banner() + host = { + "os": "Windows", + "os-release": "11", + "machine": "AMD64", + "processor": "test-cpu", + "python": "CPython test", + "node": "not-used", + } + metadata_path = run_directory / "native_accuracy_run.json" + metadata_path.write_text( + json.dumps({ + "schema_version": run_native_accuracy.NATIVE_SCHEMA_VERSION, + "status": "complete", + "run_id": "cached-run", + "source_revision": "revision", + "source_fingerprint": FINGERPRINT, + "sample_mode": "standard", + "accuracy_samples": 4096, + "consumer_mode": "strict", + "platform": "windows", + "architecture": "x86_64", + "compiler": "MSVC", + "target": "windows/x86_64/MSVC", + "precisions": list(run_native_accuracy.NATIVE_PRECISIONS), + "policy": run_native_accuracy.NATIVE_POLICY, + "thresholds": "advisory", + "configuration": configuration, + "host": host, + "executables": { + "accuracy": { + "path": "C:/test/accuracy.exe", + "sha256": FINGERPRINT, + "wasm-sha256": "not-present", + }, + }, + "outputs": outputs, + }), + encoding="utf-8", + ) + + with mock.patch.object( + run_native_accuracy, + "_validate_accuracy_evidence", + ) as validate_evidence: + reusable, rejection = run_native_accuracy._find_reusable_run( + output_root, + sample_mode="standard", + consumer_mode="strict", + platform="windows", + architecture="x86_64", + compiler="MSVC", + fingerprint=FINGERPRINT, + configuration=configuration, + host=host, + ) + + self.assertEqual(rejection, "") + self.assertIsNotNone(reusable) + assert reusable is not None + self.assertEqual(reusable["run_id"], "cached-run") + self.assertEqual(validate_evidence.call_count, 2) + + stale, rejection = run_native_accuracy._find_reusable_run( + output_root, + sample_mode="standard", + consumer_mode="strict", + platform="windows", + architecture="x86_64", + compiler="MSVC", + fingerprint="b" * 64, + configuration=configuration, + host=host, + ) + self.assertIsNone(stale) + self.assertIn("source_fingerprint mismatch", rejection) + + def test_native_accuracy_reuse_skips_both_runner_phases(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + output_root = Path(temporary) + result_file = output_root / "result.json" + run_directory = output_root / "cached-run" + metadata = run_directory / "native_accuracy_run.json" + reusable = run_native_accuracy._result_handoff( + run_id="cached-run", + sample_mode="standard", + consumer_mode="strict", + platform="windows", + architecture="x86_64", + compiler="MSVC", + run_directory=run_directory, + metadata=metadata, + ) + configuration = self.configuration_banner() + identity = source_fingerprint.SourceIdentity( + revision="revision", + fingerprint=FINGERPRINT, + ) + + with ( + mock.patch.object( + run_native_accuracy, + "source_identity", + return_value=identity, + ), + mock.patch.object( + run_native_accuracy, + "_run_provenance", + return_value={"host": {}, "executables": {}}, + ), + mock.patch.object( + run_native_accuracy, + "_preflight_runners", + return_value=configuration, + ), + mock.patch.object( + run_native_accuracy, + "_find_reusable_run", + return_value=(reusable, ""), + ), + mock.patch.object( + run_native_accuracy, + "_run_precision", + ) as run_precision, + redirect_stdout(io.StringIO()) as output, + ): + status = run_native_accuracy.main([ + "--accuracy", "accuracy.exe", + "--sample-mode", "standard", + "--output-root", str(output_root), + "--result-file", str(result_file), + "--reuse-compatible", + ]) + + self.assertEqual(status, 0) + run_precision.assert_not_called() + self.assertEqual( + json.loads(result_file.read_text(encoding="utf-8")), + reusable, + ) + self.assertIn("f32/f64 phases skipped", output.getvalue()) + + def test_preset_pipeline_defaults_to_local_standard_profile(self) -> None: + args = preset_pipeline.parse_args([ + "--preset", "native-release", + ]) + self.assertEqual(args.workflow, "standard") + self.assertEqual( + run_metrics.SAMPLE_PROFILES["standard"], + { + "accuracy_samples": 4096, + "benchmark_samples": {"f128": 8192, "f256": 4096}, + "benchmark_trials": 7, + "benchmark_minimum_trial_ms": 8, + "benchmark_policy": "adaptive-v2", + "benchmark_fast_threshold_ns": 20, + "benchmark_slow_threshold_ns": 10_000, + "benchmark_fast_trials": 7, + "benchmark_ordinary_trials": 3, + "benchmark_fast_minimum_trial_ms": 15, + "benchmark_maximum_row_ms": 5_000, + "benchmark_corpus_policy": "adaptive-v1", + "accuracy_parallel": True, + }, + ) + + def test_small_profile_halves_standard_sample_counts(self) -> None: + small = run_metrics.SAMPLE_PROFILES["small"] + standard = run_metrics.SAMPLE_PROFILES["standard"] + + self.assertEqual(small["accuracy_samples"], 2048) + self.assertEqual( + small["benchmark_samples"], + {"f128": 4096, "f256": 2048}, + ) + self.assertEqual( + { + key: value + for key, value in small.items() + if key not in {"accuracy_samples", "benchmark_samples"} + }, + { + key: value + for key, value in standard.items() + if key not in {"accuracy_samples", "benchmark_samples"} + }, + ) + + def test_public_workflow_flags_map_to_internal_sample_modes(self) -> None: + cases = ( + ((), "standard", "standard", False), + (("--quick",), "quick", "small", False), + (("--standard",), "standard", "standard", False), + (("--full",), "full", "full", False), + (("--release",), "release", "full", True), + ) + for flags, workflow, sample_mode, canonical in cases: + with self.subTest(flags=flags): + args = preset_pipeline.parse_args([ + "--preset", "native-release", *flags, + ]) + policy = preset_pipeline.METRICS_WORKFLOWS[args.workflow] + self.assertEqual(args.workflow, workflow) + self.assertEqual(policy.sample_mode, sample_mode) + self.assertEqual(policy.canonical_publication, canonical) + + def test_preset_pipeline_release_flag_selects_publication_profile(self) -> None: + args = preset_pipeline.parse_args([ + "--preset", "native-release", + "--release", + ]) + self.assertEqual(args.workflow, "release") + self.assertEqual( + preset_pipeline.METRICS_WORKFLOWS[args.workflow].sample_mode, + "full", + ) + self.assertEqual( + run_metrics.SAMPLE_PROFILES["full"], + { + "accuracy_samples": 65536, + "benchmark_samples": {"f128": 81920, "f256": 40960}, + "benchmark_trials": 7, + "benchmark_minimum_trial_ms": 25, + }, + ) + + def test_preset_pipeline_rejects_removed_report_options(self) -> None: + for removed in ( + ("--mode", "quick"), + ("--sample-mode", "standard"), + ("--layout", "compact"), + ): + with self.subTest(option=removed[0]), redirect_stderr(io.StringIO()): + with self.assertRaises(SystemExit): + preset_pipeline.parse_args([ + "--preset", "native-release", *removed, + ]) + + def test_preset_pipeline_rejects_conflicting_workflow_flags(self) -> None: + for flags in ( + ("--quick", "--standard"), + ("--quick", "--full"), + ("--standard", "--release"), + ("--full", "--release"), + ): + with self.subTest(flags=flags), redirect_stderr(io.StringIO()): + with self.assertRaises(SystemExit): + preset_pipeline.parse_args([ + "--preset", "native-release", *flags, + ]) + + def test_compatible_evidence_handoff_reuses_the_existing_run(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + input_root = Path(temporary) + metadata_path = ( + input_root / "windows" / "x86_64" / "detail" / "MSVC_run.json" + ) + metadata_path.parent.mkdir(parents=True) + configuration = {"build": {"source-fingerprint": FINGERPRINT}} + profile = run_metrics.SAMPLE_PROFILES["full"] + metadata = { + "schema_version": run_metrics.SCHEMA_VERSION, + "run_id": "cached", + "source_revision": "revision", + "source_fingerprint": FINGERPRINT, + "platform": "windows", + "architecture": "x86_64", + "compiler": "MSVC", + "precisions": list(run_metrics.PRECISIONS), + "sample_mode": "full", + "phases_requested": ["accuracy", "benchmark"], + "configuration": configuration, + "host": {"machine": "test"}, + "status": "complete", + "outputs": {}, + "phases": { + f"{precision}.{runner}": {"status": "passed"} + for precision in run_metrics.PRECISIONS + for runner in ("accuracy", "benchmark") + }, + **profile, + } + metadata_path.write_text(json.dumps(metadata), encoding="utf-8") + summary = {field: "" for field in run_metrics.CANONICAL_FIELDS} + summary.update({ + "group": "arithmetic", + "operation": "add", + "implementation": "fltx", + "run_id": "cached", + }) + + def rows_for( + path: Path, + fields: tuple[str, ...], + **_: object, + ) -> list[dict[str, str]]: + if fields == run_metrics.CANONICAL_FIELDS: + return [dict(summary)] + return [{"placeholder": "row"}] + + with ( + mock.patch.object(run_metrics, "_verify_output_hashes"), + mock.patch.object( + run_metrics, + "_validate_configuration", + return_value={ + "harness": {"qdpp": "off", "tlfloat": "off"}, + "consumer": {"fast-math": "off"}, + }, + ), + mock.patch.object(run_metrics, "_read_csv", side_effect=rows_for), + mock.patch.object(run_metrics, "_validate_identity"), + mock.patch.object(run_metrics, "_validate_completeness"), + mock.patch.object(run_metrics, "_validate_implementations"), + mock.patch.object(run_metrics, "aggregate", return_value=[summary]), + ): + result = run_metrics._validate_reusable_candidate( + metadata_path, + sample_mode="full", + platform="windows", + architecture="x86_64", + compiler="MSVC", + fingerprint=FINGERPRINT, + configuration=configuration, + host={"machine": "test"}, + ) + self.assertEqual(result["run_id"], "cached") + self.assertEqual(result["input_root"], str(input_root.resolve())) + + def test_metrics_runner_requires_complete_explicit_target(self) -> None: + with redirect_stderr(io.StringIO()): + with self.assertRaises(SystemExit): + run_metrics.parse_args([ + "--accuracy", "accuracy.exe", + "--platform", "windows", + ]) + + def test_canonical_target_inference_covers_supported_builds(self) -> None: + identities = { + ("Windows", "x86_64", "MSVC", "MSVC"): + ("windows", "x86_64", "MSVC"), + ("Windows", "x86_64", "Clang", "MSVC"): + ("windows", "x86_64", "ClangCL"), + ("Windows", "arm64", "MSVC", "MSVC"): + ("windows", "arm64", "MSVC"), + ("Windows", "arm64", "Clang", "MSVC"): + ("windows", "arm64", "ClangCL"), + ("Windows", "x86_64", "GNU", "GNU"): + ("windows", "x86_64", "MinGW"), + ("Emscripten", "wasm32", "Clang", "GNU"): + ("wasm32", "wasm32", "Emscripten"), + ("Linux", "x86_64", "GNU", "GNU"): + ("linux", "x86_64", "GCC"), + ("Linux", "arm64", "GNU", "GNU"): + ("linux", "arm64", "GCC"), + ("Linux", "x86_64", "Clang", "GNU"): + ("linux", "x86_64", "Clang"), + ("Linux", "arm64", "Clang", "GNU"): + ("linux", "arm64", "Clang"), + ("Darwin", "x86_64", "AppleClang", "GNU"): + ("macos", "x86_64", "AppleClang"), + ("Darwin", "arm64", "AppleClang", "GNU"): + ("macos", "arm64", "AppleClang"), + } + for (system, architecture, compiler_id, frontend), expected in identities.items(): + configuration = { + "build": { + "system": system, + "architecture": architecture, + "compiler-id": compiler_id, + "frontend-variant": frontend, + "processor": "test", + }, + } + self.assertEqual( + run_metrics.infer_canonical_target(configuration, "test"), + expected, + ) + + def test_canonical_target_inference_rejects_unknown_build(self) -> None: + with self.assertRaisesRegex( + run_metrics.MetricsError, + "unsupported canonical build identity", + ): + run_metrics.infer_canonical_target( + { + "build": { + "system": "Windows", + "compiler-id": "Clang", + "processor": "x86_64", + }, + }, + "test", + ) + + def test_explicit_target_rejects_wrong_architecture_or_frontend(self) -> None: + configuration = self.configuration_banner() + with self.assertRaisesRegex(run_metrics.MetricsError, "does not match"): + run_metrics._validate_target_labels( + "windows", "arm64", "MSVC", configuration, "test" + ) + + clang = self.configuration_banner() + clang["build"]["compiler-id"] = "Clang" + clang["build"]["frontend-variant"] = "GNU" + with self.assertRaisesRegex(run_metrics.MetricsError, "does not match"): + run_metrics._validate_target_labels( + "windows", "x86_64", "ClangCL", clang, "test" + ) + + def test_noncanonical_full_profile_has_an_isolated_output_root(self) -> None: + args = preset_pipeline.parse_args([ + "--preset", "windows-x64-msvc-release", + "--full", + "--output-root", "build/metrics/verification/msvc", + ]) + self.assertEqual(args.workflow, "full") + self.assertEqual( + args.output_root, + Path("build/metrics/verification/msvc"), + ) + + root = Path("C:/source/fltx") + with self.assertRaisesRegex( + preset_pipeline.PipelineError, + "canonical metrics output requires --release", + ): + preset_pipeline.metrics_paths( + root, + "standard", + root / "validation" / "metrics", + ) + + def test_duplicate_implementation_operation_is_rejected(self) -> None: + rows = [benchmark_row(), benchmark_row()] + with self.assertRaisesRegex(run_metrics.MetricsError, "duplicate"): + run_metrics._validate_identity( + rows, Path("benchmark.csv"), run_id="run", revision="rev", + fingerprint=FINGERPRINT, precision="f128", + ) + + def test_missing_enabled_implementation_is_rejected(self) -> None: + accuracy = [ + { + "group": group, "operation": operation, "domain": domain, + "implementation": implementation, + } + for implementation, expected in + manifest.accuracy_manifest( + "f128", qdpp=False, tlfloat=False, + ).items() + for group, operation, domain in expected + ] + benchmark = [ + { + "group": group, "operation": operation, + "implementation": implementation, + } + for implementation, expected in + manifest.benchmark_manifest( + "f128", qdpp=False, tlfloat=False, + ).items() + for group, operation in expected + if not (implementation == "cppdd" and operation == "add") + ] + with self.assertRaisesRegex(run_metrics.MetricsError, "incomplete cppdd"): + run_metrics._validate_completeness( + accuracy, benchmark, precision="f128", + accuracy_path=Path("accuracy.csv"), + benchmark_path=Path("benchmark.csv"), + qdpp_enabled=False, + tlfloat_enabled=False, + ) + + def test_normalized_aggregation_keeps_one_row_per_implementation(self) -> None: + result = run_metrics.aggregate( + [accuracy_row(), accuracy_row("cppdd")], + [benchmark_row(), benchmark_row("cppdd", ns=20, ratio=2)], + accuracy_path=Path("accuracy.csv"), + benchmark_path=Path("benchmark.csv"), + run_id="run", + expected_trials=3, + ) + self.assertEqual([row["implementation"] for row in result], ["cppdd", "fltx"]) + cppdd = result[0] + self.assertEqual(cppdd["speed_ratio"], 2) + self.assertEqual(cppdd["accuracy_pass"], "yes") + self.assertEqual(cppdd["domains_passed"], 1) + + def test_accuracy_aggregation_requires_stable_signed_zero_support(self) -> None: + preserved = accuracy_row(domain="moderate") + lost = accuracy_row(domain="wide_exponent") + lost["signed_zero_support"] = "no" + thresholds = {"moderate": 90.0, "wide_exponent": 90.0} + with self.assertRaisesRegex( + run_metrics.MetricsError, "inconsistent signed_zero_support", + ): + run_metrics._accuracy_summary( + [preserved, lost], Path("accuracy.csv"), thresholds, + ) + + def test_standard_accepts_only_policy_compliant_trial_counts(self) -> None: + for count in (1, 3, 7): + row = benchmark_row() + row["trials_ns"] = "|".join([row["ns_iter"]] * count) + run_metrics._benchmark_values( + row, + Path("benchmark.csv"), + expected_trials=(1, 3, 7), + ) + + row = benchmark_row() + row["trials_ns"] = "10|10|10|10|10" + with self.assertRaisesRegex(run_metrics.MetricsError, "invalid benchmark trials"): + run_metrics._benchmark_values( + row, + Path("benchmark.csv"), + expected_trials=(1, 3, 7), + ) + + def test_metrics_reject_implausibly_small_benchmark_timings(self) -> None: + row = benchmark_row(ns=0.0001) + with self.assertRaisesRegex( + run_metrics.MetricsError, + "workload may have been optimized away", + ): + run_metrics._benchmark_values(row, Path("benchmark.csv")) + + with self.assertRaisesRegex( + run_metrics.MetricsError, + "workload may have been optimized away", + ): + build_performance._positive_float( + "0.0001", + Path("canonical.csv"), + ("mixed_workloads", "mandelbrot", "qdpp"), + ) + + def test_trial_rotation_is_balanced_for_any_count(self) -> None: + for count in range(1, 6): + for trials in range(1, 12): + first_positions = [ + trial % count for trial in range(trials) + ] + counts = [first_positions.count(index) for index in range(count)] + self.assertLessEqual(max(counts) - min(counts), 1) + + +class RenderingTests(unittest.TestCase): + def test_all_headline_accuracy_is_uncapped_bits_accurate(self) -> None: + dataset, target = synthetic_dataset(("fltx", "cppdd", "qdpp")) + fltx = dataset.canonical[ + (target, "f128", "arithmetic", "add", "fltx") + ] + fltx["mean_bits"] = "118.5" + fltx["worst_bits"] = "114" + + cell = build_tables.accuracy_table(dataset, (target,)).rows[0].cells[0] + self.assertEqual(cell.lines[:2], ("avg 118.5b", "min 114.0b")) + + overview = build_overview.render_overview(dataset, target, "f128") + self.assertIn(">118.5", overview) + self.assertIn(">114.0", overview) + self.assertIn(">bits accurate", overview) + + tooltip = build_overview._tooltip( + dataset, + target, + "f128", + "arithmetic", + "add", + "fltx", + dataset.canonical[ + (target, "f128", "arithmetic", "add", "fltx") + ], + ) + self.assertNotIn("nominal", tooltip) + self.assertNotIn("capped", tooltip) + self.assertIn("mean: 118.5 bits", tooltip) + + def test_multiline_overview_headers_have_real_line_spacing(self) -> None: + parts: list[str] = [] + build_overview._text_lines( + parts, + 20, + 10, + 60, + ("Inf/", "NaN"), + ) + baselines = [ + float(re.search(r' y="([^"]+)"', line).group(1)) + for line in parts + ] + self.assertEqual(len(baselines), 2) + self.assertEqual(baselines[1] - baselines[0], 14) + + def test_all_svg_fonts_are_scaled_without_changing_layout_constants(self) -> None: + table_svg = render(Table( + "x", "y", (Column("c"),), (Row("g", "op", (Cell(("a",)),)),), + )) + self.assertIn('font-size="28.8"', table_svg) + self.assertIn('font-size="13.2"', table_svg) + self.assertIn('stroke="#000000"', table_svg) + + dataset, target = synthetic_dataset(("fltx", "cppdd")) + overview_svg = build_overview.render_overview(dataset, target, "f128") + self.assertIn('font-size="18"', overview_svg) + self.assertIn('font-size="10.8"', overview_svg) + self.assertEqual(build_overview.CELL_PADDING, 8) + self.assertEqual(build_overview.ROW_HEIGHT, 22) + + def test_float_utilities_use_the_compact_group_label(self) -> None: + self.assertEqual( + build_tables.GROUP_LABELS["floating_point_utilities"], + "Float Utils", + ) + self.assertEqual( + build_tables.GROUP_LABELS["inverse_hyperbolic"], + "Hyperbolic", + ) + self.assertEqual( + build_tables.GROUP_LABELS["special_functions"], + "Special", + ) + self.assertEqual( + build_overview._grouped_operations([ + ("hyperbolic", "sinh"), + ("inverse_hyperbolic", "asinh"), + ]), + [( + "hyperbolic", + [ + ("hyperbolic", "sinh"), + ("inverse_hyperbolic", "asinh"), + ], + )], + ) + + def test_reports_hide_the_raw_random_engine_benchmark(self) -> None: + dataset, target = synthetic_dataset(("fltx",)) + source = dataset.canonical[ + (target, "f128", "arithmetic", "add", "fltx") + ] + row = dict(source) + row["group"] = "random" + row["operation"] = "mt19937_64" + dataset.canonical[ + (target, "f128", "random", "mt19937_64", "fltx") + ] = row + self.assertNotIn( + ("random", "mt19937_64"), + build_tables._operations(dataset), + ) + self.assertNotIn( + ">mt19937_64<", + build_overview.render_overview( + dataset, + target, + "f128", + "compact", + ), + ) + performance, _ = synthetic_performance_dataset(("fltx",)) + column = performance.columns[0] + performance_row = dict(performance.rows[ + (column, "arithmetic", "add", "fltx") + ]) + performance_row["group"] = "random" + performance_row["operation"] = "mt19937_64" + performance.rows[ + (column, "random", "mt19937_64", "fltx") + ] = performance_row + performance.implementations[ + (column, "random", "mt19937_64") + ] = ("fltx",) + self.assertNotIn( + ("random", "mt19937_64"), + build_performance.operations(performance), + ) + self.assertNotIn( + ">mt19937_64<", + build_performance.render(performance), + ) + + def test_overview_uses_metrics_directories_by_default(self) -> None: + args = build_overview.parse_args( + ["--target", "windows/x86_64/MSVC"] + ) + self.assertEqual(args.input, Path(build_overview.__file__).parents[1] / "data") + self.assertEqual(args.output, Path(build_overview.__file__).parents[1] / "generated") + self.assertEqual(args.layout, "full") + + def test_performance_uses_metrics_directories_by_default(self) -> None: + args = build_performance.parse_args([]) + self.assertEqual( + args.input, + Path(build_performance.__file__).parents[1] / "data", + ) + self.assertEqual( + args.output, + Path(build_performance.__file__).parents[1] / "generated", + ) + self.assertEqual(args.layout, "full") + + def test_performance_table_shows_only_the_fastest_competitor(self) -> None: + dataset, _ = synthetic_performance_dataset( + ("fltx", "cppdd", "qdpp", "tlfloat"), + ) + column = dataset.columns[0] + dataset.rows[ + (column, "arithmetic", "add", "qdpp") + ]["speed_ratio"] = "99" + dataset.rows[ + (column, "arithmetic", "add", "qdpp") + ]["worst_bits"] = "" + svg = build_performance.render(dataset) + self.assertIn(">0.80× ddreal<", svg) + self.assertNotIn("× cppdd<", svg) + self.assertNotIn("× tlquad<", svg) + self.assertIn("Fastest competitor: qdpp dd_real", svg) + self.assertIn("FLTX speed vs fastest competitor: 0.8×", svg) + + def test_fastest_comparison_colours_ratio_text_on_dark_rows(self) -> None: + dataset, _ = synthetic_performance_dataset( + ("fltx", "cppdd", "qdpp"), + ) + svg = build_performance.render(dataset) + self.assertIn( + f'fill="{build_tables._ratio_color(0.8)}" font-size="12" ' + 'font-weight="400"', + svg, + ) + self.assertIn(f'fill="{build_performance.BODY_ROW_FILLS[0]}"', svg) + self.assertNotIn( + f'height="40" fill="{build_tables._ratio_color(0.8)}"', + svg, + ) + + def test_performance_headers_name_the_measured_fltx_type(self) -> None: + dataset, _ = synthetic_performance_dataset(("fltx", "qdpp")) + svg = build_performance.render(dataset) + self.assertIn(">bl::f128<", svg) + self.assertNotIn(">vs bl::f128<", svg) + self.assertIn("; bl::f128; arithmetic / add", svg) + + def test_compact_performance_uses_overview_dark_theme_and_font(self) -> None: + dataset, _ = synthetic_performance_dataset(("fltx", "cppdd")) + svg = build_performance.render(dataset, "compact") + self.assertIn("font-family:'Ubuntu Mono'", svg) + self.assertIn(f'fill="{build_performance.PAGE}"', svg) + self.assertIn(f'stroke="{build_performance.GRID}"', svg) + self.assertEqual(build_performance.PAGE, "#0f1115") + self.assertEqual(build_performance.GROUP, build_overview.GROUP_ROW_FILL) + self.assertEqual(build_performance.BODY_ROW_FILLS, build_overview.OPERATION_ROW_FILLS) + self.assertEqual(build_performance.CELL_PADDING, build_overview.CELL_PADDING) + + def test_accuracy_table_reports_only_fltx_consistency(self) -> None: + dataset, target = synthetic_dataset(("fltx", "cppdd")) + cell = build_tables.accuracy_table(dataset, (target,)).rows[0].cells[0] + self.assertEqual(cell.fill, WHITE) + self.assertEqual( + cell.foreground, + build_tables._margin_text_color(10.0, True), + ) + self.assertEqual( + cell.lines, + ("avg 110.0b", "min 100.0b", "✓ 1/1 domains"), + ) + self.assertNotIn("cppdd", "\n".join(cell.lines)) + self.assertIn("mean 110 bits", cell.tooltip) + self.assertIn("p01 105 bits", cell.tooltip) + self.assertNotIn("cppdd", cell.tooltip) + + def test_dynamic_row_height_grows_with_implementation_lines(self) -> None: + one = render(Table( + "x", "y", (Column("c"),), (Row("g", "op", (Cell(("a",)),)),), + )) + many = render(Table( + "x", "y", (Column("c"),), + (Row("g", "op", (Cell(("a", "b", "c", "d")),)),), + )) + height = lambda svg: int(re.search(r']+height="(\d+)"', svg).group(1)) + self.assertGreater(height(many), height(one)) + + def test_xml_escapes_arbitrary_labels_and_api_names(self) -> None: + dataset, _ = synthetic_performance_dataset(("fltx", "cppdd")) + svg = build_performance.render(dataset) + self.assertIn("<cppdd & api>", svg) + self.assertNotIn("", svg) + + def test_nanosecond_format_is_fixed_not_scientific(self) -> None: + self.assertEqual( + build_performance._format_ns(8770, "full"), + "8,770ns", + ) + + def test_report_labels_name_compiler_then_environment(self) -> None: + self.assertEqual( + build_tables.platform_label("windows"), + "Windows", + ) + self.assertEqual( + build_tables.compiler_label_lines("MSVC"), + ("MSVC",), + ) + self.assertEqual( + build_tables.compiler_label_lines("ClangCL"), + ("Clang", "clang-cl"), + ) + self.assertEqual( + build_tables.compiler_label_lines("MinGW"), + ("GCC", "MinGW-w64"), + ) + self.assertEqual( + build_tables.compiler_label_lines("Emscripten"), + ("Clang", "Emscripten"), + ) + self.assertEqual(build_tables.compiler_label("GCC"), "GCC") + self.assertEqual(build_tables.compiler_label("Clang"), "Clang") + self.assertEqual( + build_tables.compiler_label("AppleClang"), + "Apple Clang", + ) + self.assertEqual( + build_tables.Target("windows", "x86_64", "ClangCL").label, + "Windows / x64 / Clang (clang-cl)", + ) + self.assertEqual( + build_tables.Target("windows", "x86_64", "MinGW").label, + "Windows / x64 / GCC (MinGW-w64)", + ) + self.assertEqual( + build_tables.Target("wasm32", "wasm32", "Emscripten").label, + "WebAssembly / wasm32 / Clang (Emscripten)", + ) + + def test_performance_discovery_combines_independent_precisions_and_runs( + self, + ) -> None: + source, target = synthetic_dataset(("fltx", "cppdd")) + add_rows = [ + dict(source.canonical[ + (target, "f128", "arithmetic", "add", implementation) + ]) + for implementation in ("fltx", "cppdd") + ] + f256_abs_rows = [] + for row in add_rows: + candidate = dict(row) + candidate["precision"] = "f256" + candidate["group"] = "arithmetic" + candidate["operation"] = "abs" + candidate["run_id"] = "different-run" + f256_abs_rows.append(candidate) + + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + write_canonical( + root / "windows" / "x86_64" / "MSVC_f128.csv", + add_rows, + ) + write_canonical( + root / "wasm32" / "wasm32" / "Emscripten_f256.csv", + f256_abs_rows, + ) + dataset = build_performance.discover(root) + _, metadata_path = build_performance.build( + root, + root / "generated", + ) + metadata = json.loads(metadata_path.read_text(encoding="utf-8")) + + self.assertEqual(len(dataset.columns), 2) + self.assertEqual(set(dataset.run_ids.values()), {"run", "different-run"}) + self.assertNotIn("source_revision", metadata) + self.assertEqual( + { + ( + source["platform"], source["architecture"], + source["compiler"], source["precision"], + ) + for source in metadata["sources"] + }, + { + ("windows", "x86_64", "MSVC", "f128"), + ("wasm32", "wasm32", "Emscripten", "f256"), + }, + ) + self.assertEqual( + build_performance.operations(dataset), + [ + ("arithmetic", "add"), + ("floating_point_utilities", "abs"), + ], + ) + svg = build_performance.render(dataset) + for text in ( + "bl::f128", + "bl::f256", + "Windows", + "x64", + "WebAssembly", + "MSVC", + "Clang", + "Emscripten", + ): + self.assertIn(f">{text}<", svg) + self.assertEqual(svg.count('class="precision-header"'), 2) + self.assertEqual(svg.count('class="platform-header"'), 2) + self.assertEqual(svg.count('class="architecture-header"'), 2) + self.assertEqual(svg.count('class="toolchain-header"'), 2) + for css_class in ("operation-label", "result-line"): + body_text = re.findall( + rf']+class="{css_class}"[^>]*>', + svg, + ) + self.assertTrue(body_text) + self.assertTrue(all('font-weight="400"' in text for text in body_text)) + precision_cells = [ + (int(x), int(width)) + for x, width in re.findall( + r']+width="(\d+)"[^>]+' + r'class="precision-header-cell"/>', + svg, + ) + ] + self.assertEqual(len(precision_cells), 2) + self.assertGreater( + precision_cells[1][0], + precision_cells[0][0] + precision_cells[0][1], + ) + self.assertEqual(svg.count('class="result-line"'), 4) + + def test_performance_reports_keep_consumer_modes_separate(self) -> None: + source, target = synthetic_dataset(("fltx",)) + strict_rows = [dict(source.canonical[ + (target, "f128", "arithmetic", "add", "fltx") + ])] + fastmath_rows = [dict(strict_rows[0])] + fastmath_rows[0]["run_id"] = "fastmath-run" + + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + write_canonical( + root / "windows" / "x86_64" / "MSVC_f128.csv", + strict_rows, + ) + write_canonical( + root / "windows" / "x86_64" / "MSVC_f128_fastmath.csv", + fastmath_rows, + ) + strict = build_performance.discover(root) + fastmath = build_performance.discover(root, "fastmath") + svg_path, metadata_path = build_performance.build( + root, + root / "generated", + "compact", + "fastmath", + ) + svg = svg_path.read_text(encoding="utf-8") + metadata = json.loads(metadata_path.read_text(encoding="utf-8")) + + self.assertEqual(set(strict.run_ids.values()), {"run"}) + self.assertEqual(set(fastmath.run_ids.values()), {"fastmath-run"}) + self.assertEqual(svg_path.name, "performance_table_fastmath_compact.svg") + self.assertIn("consumer fast-math performance", svg) + self.assertEqual(metadata["consumer_mode"], "fastmath") + + def test_performance_discovery_keeps_architectures_separate(self) -> None: + source, target = synthetic_dataset(("fltx",)) + rows = [dict(source.canonical[ + (target, "f128", "arithmetic", "add", "fltx") + ])] + arm_rows = [dict(rows[0])] + arm_rows[0]["run_id"] = "arm-run" + + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + write_canonical( + root / "linux" / "x86_64" / "GCC_f128.csv", + rows, + ) + write_canonical( + root / "linux" / "arm64" / "GCC_f128.csv", + arm_rows, + ) + dataset = build_performance.discover(root) + + self.assertEqual(len(dataset.columns), 2) + self.assertEqual( + {column.target.architecture for column in dataset.columns}, + {"x86_64", "arm64"}, + ) + self.assertEqual(set(dataset.run_ids.values()), {"run", "arm-run"}) + + def test_performance_discovery_rejects_a_malformed_present_csv(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + path = ( + Path(temporary) / "windows" / "x86_64" / "MSVC_f128.csv" + ) + path.parent.mkdir(parents=True) + path.write_text("wrong\nvalue\n", encoding="utf-8") + with self.assertRaisesRegex( + run_metrics.MetricsError, + "incompatible schema", + ): + build_performance.discover(Path(temporary)) + + def test_performance_keeps_a_neutral_fltx_only_result(self) -> None: + dataset, _ = synthetic_performance_dataset(("fltx",)) + svg = build_performance.render(dataset) + self.assertIn(">10.0ns<", svg) + self.assertIn("No competitor benchmark is available.", svg) + self.assertNotIn("× vs", svg) + + def test_compact_performance_keeps_coverage_while_reducing_size(self) -> None: + dataset, _ = synthetic_performance_dataset( + ("fltx", "cppdd", "qdpp"), + ) + full = build_performance.render(dataset, "full") + compact = build_performance.render(dataset, "compact") + + dimensions = lambda svg: tuple( + int(value) + for value in re.search( + r']+width="(\d+)" height="(\d+)"', + svg, + ).groups() + ) + full_width, full_height = dimensions(full) + compact_width, compact_height = dimensions(compact) + self.assertLess(compact_width, full_width) + self.assertLess(compact_height, full_height) + self.assertEqual( + full.count('class="operation-label"'), + compact.count('class="operation-label"'), + ) + self.assertIn(">0.8× ddreal<", compact) + self.assertNotIn('font-size="24"', compact) + + def test_overview_has_one_body_row_per_operation_and_fltx_first(self) -> None: + dataset, target = synthetic_dataset(("fltx", "qdpp", "cppdd", "tlfloat")) + svg = build_overview.render_overview(dataset, target, "f128") + self.assertEqual(svg.count('class="body-row"'), 1) + self.assertLess(svg.find(">bl::f128<"), svg.find(">qdpp (dd_real)<")) + self.assertLess( + svg.find(">bl::f128<"), + svg.find(">boost (cpp_double_double)<"), + ) + self.assertIn(">TLFloat (tlquad)<", svg) + self.assertIn("<cppdd & api>", svg) + + def test_overview_uses_qualified_competitor_primary_headers(self) -> None: + self.assertEqual( + build_overview.PRIMARY_HEADER_LABELS, + { + "ddreal": "qdpp (dd_real)", + "qdreal": "qdpp (qd_real)", + "cppdd": "boost (cpp_double_double)", + "mpfr64": "mpfr_float_backend<64>", + "tlquad": "TLFloat (tlquad)", + "tloct": "TLFloat (tloct)", + }, + ) + + def test_overview_formats_exact_unavailable_and_fixed_numbers(self) -> None: + self.assertEqual(build_overview._fmt_bits("inf"), "exact") + self.assertEqual(build_overview._fmt_bits(""), "-") + self.assertEqual(build_overview._fmt_bits_compact("240.6"), "240.6") + self.assertEqual(build_overview._fmt_bits_compact("215.4"), "215.4") + self.assertEqual(build_overview._fmt_bits_compact("inf"), "=") + self.assertEqual(build_overview._fmt_ns("8770"), "8,770") + self.assertNotIn("e", build_overview._fmt_ns("8770").lower()) + self.assertEqual(build_overview._fmt_ns_compact("8770"), "8770") + self.assertEqual(build_overview._fmt_ns_compact("361.1"), "361") + self.assertEqual(build_overview._fmt_ns_compact("11.22"), "11.2") + self.assertEqual(build_overview._fmt_ns_compact("1.70"), "1.7") + self.assertEqual(build_overview._fmt_ns_compact("0.123"), "0.12") + self.assertEqual( + build_overview._benchmark_text( + {"ns_iter": "8770", "speed_ratio": ""}, "fltx" + ), + "8,770 ns", + ) + + def test_overview_domain_colours_cover_pass_near_and_failure(self) -> None: + row = { + "domains_passed": "4", "domains_total": "4", + "min_margin_bits": "8", + } + self.assertEqual( + build_overview._domain_style(row, "#123456"), + ("4/4", "#123456", "#4ade80"), + ) + row["min_margin_bits"] = "2" + self.assertEqual(build_overview._domain_style(row)[2], "#fbbf24") + row["domains_passed"] = "3" + self.assertEqual(build_overview._domain_style(row)[2], "#f87171") + self.assertEqual(build_overview._domain_style(None)[0], "-") + + def test_ratio_green_scale_brightens_above_unchanged_one_x(self) -> None: + self.assertEqual(build_tables._ratio_color(1.0), "#9BE885") + + def luminance(color: str) -> float: + red, green, blue = ( + int(color[index:index + 2], 16) + for index in (1, 3, 5) + ) + return 0.2126 * red + 0.7152 * green + 0.0722 * blue + + green_scale = tuple( + build_tables._ratio_color(ratio) + for ratio in (1.0, 2.0, 3.0, 4.0, 8.0, 20.0) + ) + self.assertTrue(all( + luminance(left) < luminance(right) + for left, right in zip(green_scale, green_scale[1:]) + )) + self.assertEqual(green_scale[-1], "#70FF98") + + def test_overview_accepts_all_special_support_categories(self) -> None: + for category in ("Both", "Inf", "NaN", "No", "-"): + text, fill, foreground = build_overview._special_style( + {"special_support": category}, + "#123456", + ) + self.assertEqual(text, category) + self.assertEqual(fill, "#123456") + self.assertEqual(foreground, build_overview.SUPPORT[category]) + with self.assertRaises(run_metrics.MetricsError): + build_overview._special_style({"special_support": "maybe"}) + + def test_overview_formats_signed_zero_as_a_thin_status_column(self) -> None: + expected = { + "yes": ("✓", "#4ade80"), + "no": ("✗", "#f87171"), + "-": ("-", "#a5abb5"), + } + for category, (text, foreground) in expected.items(): + self.assertEqual( + build_overview._signed_zero_style( + {"signed_zero_support": category}, "#123456", + ), + (text, "#123456", foreground), + ) + with self.assertRaises(run_metrics.MetricsError): + build_overview._signed_zero_style( + {"signed_zero_support": "maybe"} + ) + + def test_fastmath_overview_separates_subnormal_support_from_accuracy(self) -> None: + dataset, target = synthetic_dataset(("fltx",)) + dataset.consumer_mode = "fastmath" + general = accuracy_row(domain="general") + subnormal = accuracy_row(domain="subnormal") + subnormal.update({ + "mean_bits": "0", + "p01_bits": "0", + "worst_bits": "0", + "margin_bits": "-90", + "pass": "no", + }) + dataset.accuracy.update({ + (target, "f128", "arithmetic", "add", "fltx", "general"): + general, + (target, "f128", "arithmetic", "add", "fltx", "subnormal"): + subnormal, + }) + canonical = dataset.canonical[ + (target, "f128", "arithmetic", "add", "fltx") + ] + canonical.update({ + "mean_bits": "55", + "p01_bits": "0", + "worst_bits": "0", + "domains_passed": "1", + "domains_total": "2", + "min_margin_bits": "-90", + "accuracy_pass": "no", + }) + + display = build_overview._display_row( + dataset, + target, + "f128", + "arithmetic", + "add", + "fltx", + canonical, + normal_only=True, + ) + self.assertIsNotNone(display) + assert display is not None + self.assertEqual(display["mean_bits"], "110.0") + self.assertEqual(display["worst_bits"], "100.0") + self.assertEqual(display["domains_passed"], "1") + self.assertEqual(display["domains_total"], "1") + self.assertEqual(display["subnormal_support"], "no") + + svg = build_overview.render_overview(dataset, target, "f128") + self.assertIn(">Subnorm", svg) + self.assertIn(">110.0", svg) + self.assertIn(">100.0", svg) + self.assertIn(">✗", svg) + + dataset.consumer_mode = "strict" + strict_svg = build_overview.render_overview(dataset, target, "f128") + self.assertNotIn(">Subnorm", strict_svg) + self.assertIn(">55.0", strict_svg) + + def test_overview_shows_implementation_speed_relative_to_fltx(self) -> None: + row = {"ns_iter": "348.1", "speed_ratio": "2.05"} + text, fill, foreground = build_overview._benchmark_style( + row, "cppdd", "#123456" + ) + self.assertEqual(text, "348.1 ns · 0.49×") + self.assertEqual(fill, "#123456") + self.assertEqual(foreground, "#e7e9ee") + self.assertEqual( + build_overview._benchmark_spans(row, "cppdd"), + ( + ("348.1 ns", "#e7e9ee"), + (" · ", build_overview.BENCHMARK_SEPARATOR_TEXT), + ("0.49×", build_tables._ratio_color(1 / 2.05)), + ), + ) + + def test_overview_treats_fltx_as_baseline_not_a_self_comparison(self) -> None: + row = {"ns_iter": "10", "speed_ratio": ""} + text, fill, _ = build_overview._benchmark_style( + row, "fltx", "#142434" + ) + self.assertEqual(text, "10.00 ns") + self.assertEqual(fill, "#142434") + self.assertNotIn("×", text) + + def test_overview_colours_only_the_speed_ratio_text(self) -> None: + dataset, target = synthetic_dataset(("fltx", "cppdd")) + svg = build_overview.render_overview(dataset, target, "f128") + ratio_color = build_tables._ratio_color(1 / 2) + self.assertIn( + '20.00 ns', + svg, + ) + self.assertIn( + f' · ' + f'0.50×', + svg, + ) + + def test_compact_overview_hides_ratios_and_colours_timings(self) -> None: + row = {"ns_iter": "348.1", "speed_ratio": "2.05"} + self.assertEqual( + build_overview._benchmark_text(row, "cppdd", "compact"), + "348 ns", + ) + self.assertEqual( + build_overview._benchmark_spans( + row, + "cppdd", + layout="compact", + ), + ( + ("348", build_tables._ratio_color(1 / 2.05)), + (" ns", build_overview.COMPACT_BENCHMARK_UNIT_TEXT), + ), + ) + self.assertEqual( + build_overview._benchmark_text( + {"ns_iter": "10", "speed_ratio": ""}, + "fltx", + "compact", + ), + "10.0 ns", + ) + + dataset, target = synthetic_dataset(("fltx", "cppdd")) + full = build_overview.render_overview( + dataset, target, "f128", "full", + ) + compact = build_overview.render_overview( + dataset, target, "f128", "compact", + ) + self.assertIn( + f' · ', + full, + ) + self.assertNotIn( + f' · ', + compact, + ) + full_width = int(re.search(r']+width="(\d+)"', full).group(1)) + compact_width = int(re.search(r']+width="(\d+)"', compact).group(1)) + self.assertLess(compact_width, full_width) + full_height = int(re.search(r']+height="(\d+)"', full).group(1)) + compact_height = int( + re.search(r']+height="(\d+)"', compact).group(1) + ) + self.assertEqual( + compact_height, + full_height + - build_overview.TITLE_HEIGHT + - build_overview.FOOTER_HEIGHT + + 6, + ) + self.assertNotIn("metrics overview", compact) + self.assertNotIn("Accuracy is MPFR-relative", compact) + self.assertNotIn("Text: green pass", compact) + self.assertIn("metrics overview", full) + self.assertIn("Text: green pass", full) + self.assertIn("@font-face", compact) + self.assertIn("font-family:'Ubuntu Mono'", compact) + self.assertIn('font-size="11.8"', compact) + self.assertNotIn("@font-face", full) + self.assertIn( + f'fill="{build_overview.OPERATION_ROW_FILLS[0]}"', + compact, + ) + for body_fill in ( + build_overview.FLTX_TINT[1], + *(fill for _, fill in build_overview.IMPLEMENTATION_TINTS), + ): + self.assertNotIn(f'fill="{body_fill}"', compact) + compact_fltx_header = compact.split( + 'data-implementation="fltx"', 1, + )[1].split("", 1)[0] + compact_competitor_header = compact.split( + 'data-implementation="cppdd"', 1, + )[1].split("", 1)[0] + self.assertIn(">bench<", compact_fltx_header) + self.assertIn(">(ns)<", compact_fltx_header) + self.assertIn(">(ns)<", compact_competitor_header) + self.assertNotIn(">performance<", compact) + self.assertNotIn(">time · speed vs FLTX<", compact) + self.assertEqual(compact_fltx_header.count("]+height="66" fill="#244b70"/>', + ) + self.assertEqual(compact_competitor_header.count("]+height="66" fill="#40354f"/>', + ) + compact_operations = sorted({ + (group, operation) + for ( + row_target, + row_precision, + group, + operation, + _, + ) in dataset.canonical + if row_target == target and row_precision == "f128" + }) + compact_third_y = sum(build_overview.COMPACT_HEADER_HEIGHTS[:2]) + for implementation in ("fltx", "cppdd"): + table_x = int(re.search( + rf'data-implementation="{implementation}"[^>]+data-x="(\d+)"', + compact, + ).group(1)) + widths = build_overview._column_widths( + dataset, + target, + "f128", + compact_operations, + implementation, + "compact", + ) + divider = ( + f'bits<", compact_fltx_header) + self.assertIn(">accurate<", compact_fltx_header) + self.assertIn(">avg<", compact_fltx_header) + self.assertIn(">min<", compact_fltx_header) + self.assertRegex( + compact_fltx_header, + r'font-size="13" font-weight="normal"[^>]*>bl::f128', + ) + self.assertRegex( + compact, + r'font-size="13" font-weight="bold">operation', + ) + self.assertRegex( + compact, + r'font-size="11\.8" font-weight="normal">Arithmetic', + ) + self.assertRegex( + compact, + r'font-size="11\.8" font-weight="normal">add', + ) + self.assertRegex( + full.split( + 'data-implementation="fltx"', 1, + )[1].split("", 1)[0], + r'font-size="12" font-weight="bold"[^>]*>bl::f128', + ) + self.assertRegex( + full, + r'font-size="12" font-weight="bold">operation', + ) + self.assertRegex( + full, + r'font-size="12" font-weight="normal">Arithmetic', + ) + self.assertRegex( + full, + r'font-size="12" font-weight="normal">add', + ) + competitor = dataset.canonical[ + (target, "f128", "arithmetic", "add", "cppdd") + ] + tooltip = build_overview._tooltip( + dataset, + target, + "f128", + "arithmetic", + "add", + "cppdd", + competitor, + ) + self.assertIn("benchmark: 20.00 ns/iteration", tooltip) + + def test_compact_overview_sizes_text_for_ubuntu_mono(self) -> None: + self.assertEqual(build_overview.COMPACT_MARGIN, 0) + self.assertEqual(build_overview.COMPACT_TABLE_GAP, 3) + self.assertEqual( + build_overview.COMPACT_HEADER_HEIGHTS, + ( + build_overview.HEADER_HEIGHTS[0], + build_overview.HEADER_HEIGHTS[1] + 6, + build_overview.HEADER_HEIGHTS[2], + ), + ) + self.assertEqual( + build_overview._block_x( + 0, + 100, + (200,), + margin=build_overview.COMPACT_MARGIN, + table_gap=build_overview.COMPACT_TABLE_GAP, + ), + 103, + ) + self.assertAlmostEqual( + build_overview._estimated_character_width("compact", 9), + 5.9, + ) + self.assertAlmostEqual( + build_overview._estimated_character_width("compact", 10), + 6.5, + ) + self.assertEqual( + build_overview._estimated_character_width("full", 9), + ( + build_overview.MONOSPACE_CHARACTER_WIDTH + * build_overview.FONT_SCALE + ), + ) + operations = [("group", "long_operation")] + self.assertEqual( + build_overview._operation_width(operations, "compact"), + ( + math.ceil( + len("long_operation") + * build_overview._estimated_character_width("compact", 9) + ) + + build_overview.CELL_PADDING + + 4 + ), + ) + + def test_overview_judges_fltx_against_the_fastest_competitor(self) -> None: + dataset, target = synthetic_dataset(("fltx", "cppdd", "qdpp")) + fastest = build_overview._fastest_competitor( + dataset, target, "f128", "arithmetic", "add", + ) + self.assertIsNotNone(fastest) + competitor, ratio = fastest + self.assertEqual(competitor["implementation"], "qdpp") + self.assertEqual(ratio, 0.8) + self.assertEqual( + build_overview._benchmark_spans( + dataset.canonical[ + (target, "f128", "arithmetic", "add", "fltx") + ], + "fltx", + fltx_speed_ratio=ratio, + ), + (("10.00 ns", build_tables._ratio_color(0.8)),), + ) + self.assertEqual( + build_overview._benchmark_spans( + dataset.canonical[ + (target, "f128", "arithmetic", "add", "fltx") + ], + "fltx", + fltx_speed_ratio=ratio, + layout="compact", + ), + ( + ("10.0", build_tables._ratio_color(0.8)), + (" ns", build_overview.COMPACT_BENCHMARK_UNIT_TEXT), + ), + ) + tooltip = build_overview._tooltip( + dataset, + target, + "f128", + "arithmetic", + "add", + "fltx", + dataset.canonical[ + (target, "f128", "arithmetic", "add", "fltx") + ], + ) + self.assertIn( + "speed vs fastest competitor ddreal (qdpp dd_real): 0.8×", + tooltip, + ) + + def test_overview_colours_every_exact_accuracy_value_green(self) -> None: + self.assertEqual( + build_overview._accuracy_style("inf", "#123456"), + ("exact", "#123456", build_overview.EXACT_TEXT), + ) + self.assertEqual( + build_overview._accuracy_style("100", "#123456"), + ("100.0", "#123456", "#e7e9ee"), + ) + self.assertEqual( + build_overview._accuracy_style( + "100.4", + "#123456", + "compact", + ), + ("100.4", "#123456", "#e7e9ee"), + ) + self.assertEqual( + build_overview._accuracy_style( + "inf", + "#123456", + "compact", + ), + ("=", "#123456", build_overview.COMPACT_EXACT_TEXT), + ) + self.assertEqual( + build_overview._accuracy_style("", "#123456", "compact"), + ("-", "#123456", "#e7e9ee"), + ) + dataset, target = synthetic_dataset(("fltx",)) + exact = dataset.canonical[ + (target, "f128", "arithmetic", "add", "fltx") + ] + exact["mean_bits"] = "inf" + exact["p01_bits"] = "inf" + exact["worst_bits"] = "inf" + compact = build_overview.render_overview( + dataset, target, "f128", "compact", + ) + self.assertEqual( + compact.count( + 'font-size="17.8" font-weight="normal">=' + ), + 2, + ) + parts = [] + build_overview._infinity_mark(parts, 14, 11) + mark = "".join(parts) + self.assertIn('class="exact-mark"', mark) + self.assertIn('stroke="#6ee7a0"', mark) + self.assertIn('stroke-width="1.1"', mark) + self.assertIn('stroke-width="1.65"', mark) + self.assertIn('stroke-width="1.45"', mark) + self.assertIn( + 'transform="translate(14 11) scale(0.5625) translate(-14 -11)"', + mark, + ) + self.assertIn('M 14 11 ', mark) + self.assertIn('C 3 6.5 3 15.5', mark) + + def test_overview_reordering_does_not_change_competitor_tints(self) -> None: + before = ("qdpp", "cppdd", "fltx") + after = ("fltx", "qdpp", "cppdd") + self.assertEqual( + build_overview._implementation_tint("qdpp", before), + build_overview._implementation_tint("qdpp", after), + ) + self.assertEqual( + build_overview._implementation_tint("cppdd", before), + build_overview._implementation_tint("cppdd", after), + ) + self.assertEqual( + build_overview._implementation_tint("fltx", after), + ("#244b70", "#1c2023"), + ) + self.assertEqual( + build_overview._implementation_tint("qdpp", after), + ("#40354f", "#1f1e22"), + ) + body_tints = ( + build_overview.FLTX_TINT[1], + *(body for _, body in build_overview.IMPLEMENTATION_TINTS), + ) + for body in body_tints: + channels = [int(body[index:index + 2], 16) for index in (1, 3, 5)] + self.assertAlmostEqual( + (min(channels) + max(channels)) / 2, + 29 * 1.1, + delta=0.5, + ) + source_tints = ( + "#202428", + *(body for _, body in build_overview._IMPLEMENTATION_TINTS), + ) + for source, normalized in zip(source_tints, body_tints): + def saturation(color: str) -> float: + channels = ( + int(color[index:index + 2], 16) / 255 + for index in (1, 3, 5) + ) + return colorsys.rgb_to_hls(*channels)[2] + + self.assertAlmostEqual( + saturation(normalized), + saturation(source), + delta=0.025, + ) + self.assertEqual( + build_overview.OPERATION_ROW_FILLS, + ("#191d23", "#16191f"), + ) + + def test_overview_uses_gapped_subtables_and_clear_group_dividers(self) -> None: + dataset, target = synthetic_dataset(("fltx", "qdpp", "cppdd")) + for implementation in ("fltx", "qdpp", "cppdd"): + source = dataset.canonical[ + (target, "f128", "arithmetic", "add", implementation) + ] + row = dict(source) + row["group"] = "rounding" + row["operation"] = "round" + dataset.canonical[ + (target, "f128", "rounding", "round", implementation) + ] = row + svg = build_overview.render_overview(dataset, target, "f128") + positions = [ + (int(x), int(width)) + for x, width in re.findall( + r'class="implementation-table"[^>]+data-x="(\d+)" ' + r'data-width="(\d+)"', + svg, + ) + ] + self.assertEqual(len(positions), 3) + for (left_x, width), (right_x, _) in zip(positions, positions[1:]): + self.assertEqual( + right_x - (left_x + width), + build_overview.TABLE_GAP, + ) + self.assertEqual(svg.count('class="group-row"'), 2) + self.assertIn(">Arithmetic<", svg) + self.assertIn(">Rounding<", svg) + self.assertIn(f'fill="{build_overview.GROUP_ROW_FILL}"', svg) + self.assertEqual(build_overview.GRID_REGULAR, "#000000") + self.assertEqual(build_overview.GRID_STRONG, "#000000") + self.assertEqual(build_overview.GROUP_ROW_FILL, "#4e555f") + self.assertIn('stroke="#000000"', svg) + self.assertEqual(build_overview.GROUP_ROW_TEXT, "#ffffff") + self.assertRegex( + svg, + r'fill="#ffffff"[^>]+font-weight="normal"[^>]*>Arithmetic', + ) + self.assertNotIn('stroke-width="2"', svg) + self.assertNotIn('stroke-width="3"', svg) + self.assertIn('stroke-width="1"', svg) + self.assertIn(">performance<", svg) + self.assertIn(">time · speed vs FLTX<", svg) + self.assertIn("speed is implementation ÷ FLTX", svg) + self.assertIn(">Inf/<", svg) + self.assertIn(">±0<", svg) + self.assertIn(">✓", svg) + fltx_header = svg.split( + 'data-implementation="fltx"', 1, + )[1].split("", 1)[0] + qdpp_header = svg.split( + 'data-implementation="qdpp"', 1, + )[1].split("", 1)[0] + self.assertIn(">performance<", fltx_header) + self.assertIn(">time<", fltx_header) + self.assertNotIn(">time · speed vs FLTX<", fltx_header) + self.assertIn(">performance<", qdpp_header) + self.assertIn(">time · speed vs FLTX<", qdpp_header) + self.assertRegex( + svg, + r']+height="84" fill="#2B2B2B"/>', + ) + self.assertEqual(fltx_header.count("]+height="28" fill="#244b70"/>', + ) + self.assertEqual(qdpp_header.count(" int: + return ( + math.ceil( + max(map(len, lines), default=0) + * build_overview.MONOSPACE_CHARACTER_WIDTH + * build_overview.FONT_SCALE + ) + + build_overview.CELL_PADDING + ) + + operation_rows = [ + ("arithmetic", "add"), + ("rounding", "round"), + ] + fltx_widths = build_overview._column_widths( + dataset, target, "f128", operation_rows, "fltx", + ) + qdpp_widths = build_overview._column_widths( + dataset, target, "f128", operation_rows, "qdpp", + ) + self.assertGreaterEqual( + fltx_widths[0] + fltx_widths[1], required("bits accurate") + ) + self.assertGreaterEqual( + qdpp_widths[0] + qdpp_widths[1], required("bits accurate") + ) + for widths in (fltx_widths, qdpp_widths): + self.assertGreaterEqual(widths[2], required("domain")) + self.assertGreaterEqual(widths[3], required("performance")) + self.assertGreaterEqual(widths[4], required("Inf/", "NaN")) + self.assertGreaterEqual(fltx_widths[3], required("time")) + self.assertGreaterEqual( + qdpp_widths[3], required("time · speed vs FLTX") + ) + self.assertLess(fltx_widths[3], qdpp_widths[3]) + fltx_x = positions[0][0] + full_third_y = sum(build_overview.HEADER_HEIGHTS[:2]) + build_overview.TITLE_HEIGHT + self.assertIn( + ( + f' tuple[ + build_profile_comparison.Comparison, + build_tables.Target, + ]: + strict, target = synthetic_dataset(("fltx",)) + fastmath, _ = synthetic_dataset(("fltx",)) + fastmath_row = fastmath.canonical[ + (target, "f128", "arithmetic", "add", "fltx") + ] + fastmath_row.update(fastmath_changes) + strict.runs[target] = "strict-run" + fastmath.runs[target] = "fastmath-run" + return ( + build_profile_comparison.Comparison( + strict, + fastmath, + {"run_id": "strict-run"}, + {"run_id": "fastmath-run"}, + FINGERPRINT, + ), + target, + ) + + @staticmethod + def metadata(mode: str, run_id: str) -> dict[str, object]: + configuration = ValidationTests.configuration_banner() + configuration["consumer"]["fast-math"] = ( + "on" if mode == "fastmath" else "off" + ) + return { + "schema_version": run_metrics.SCHEMA_VERSION, + "run_id": run_id, + "source_revision": f"revision-{run_id}", + "source_fingerprint": FINGERPRINT, + "platform": "windows", + "compiler": "MSVC", + "precisions": list(run_metrics.PRECISIONS), + "implementations": {}, + "sample_mode": "full", + "consumer_mode": mode, + "accuracy_samples": 65536, + "benchmark_samples": {"f128": 81920, "f256": 40960}, + "benchmark_trials": 7, + "benchmark_minimum_trial_ms": 25, + "phases_requested": ["accuracy", "benchmark"], + "host": {"processor": "test-cpu", "os": "Windows"}, + "executables": {}, + "created_utc": run_id, + "status": "complete", + "phases": {}, + "outputs": {}, + "configuration": configuration, + } + + def test_comparison_formats_improvements_regressions_and_exact_matches(self) -> None: + self.assertEqual( + build_profile_comparison._accuracy_spans("100", "101.25"), + ( + ("100.0", build_profile_comparison.NEUTRAL_TEXT), + (" (+1.2)", build_profile_comparison.IMPROVEMENT_TEXT), + ), + ) + self.assertEqual( + build_profile_comparison._accuracy_spans("inf", "219"), + ( + ("exact", build_overview.EXACT_TEXT), + (" (\u2192 219.0)", build_profile_comparison.REGRESSION_TEXT), + ), + ) + self.assertEqual( + build_profile_comparison._accuracy_spans("219", "inf"), + ( + ("219.0", build_profile_comparison.NEUTRAL_TEXT), + (" (\u2192 exact)", build_profile_comparison.IMPROVEMENT_TEXT), + ), + ) + self.assertEqual( + build_profile_comparison._accuracy_spans("inf", "inf"), + (("exact", build_overview.EXACT_TEXT),), + ) + self.assertEqual( + build_profile_comparison._accuracy_spans("100", "100"), + (("100.0", build_profile_comparison.NEUTRAL_TEXT),), + ) + tiny = build_profile_comparison._accuracy_spans("100", "100.0001") + self.assertEqual(tiny[1][0], " (+0.0001)") + + faster = build_profile_comparison._performance_spans("100", "90") + slower = build_profile_comparison._performance_spans("100", "110") + self.assertEqual(faster[-1][1], build_profile_comparison.IMPROVEMENT_TEXT) + self.assertEqual(slower[-1][1], build_profile_comparison.REGRESSION_TEXT) + self.assertIn("-10.00 ns", faster[-1][0]) + self.assertIn("+10.00 ns", slower[-1][0]) + self.assertEqual( + build_profile_comparison._performance_spans("100", "100"), + (("100.0 ns", build_profile_comparison.NEUTRAL_TEXT),), + ) + + def test_comparison_formats_domain_and_special_support_changes(self) -> None: + strict = { + "domains_passed": "3", + "domains_total": "3", + "min_margin_bits": "10", + } + fastmath = {**strict, "domains_passed": "2"} + self.assertEqual( + build_profile_comparison._domain_spans(strict, fastmath), + ( + ("3/3", "#4ade80"), + (" (-1)", build_profile_comparison.REGRESSION_TEXT), + ), + ) + self.assertEqual( + build_profile_comparison._special_spans("Both", "Inf"), + ( + ("Both", build_overview.SUPPORT["Both"]), + (" (", build_profile_comparison.NEUTRAL_TEXT), + ("-NaN", build_profile_comparison.REGRESSION_TEXT), + (")", build_profile_comparison.NEUTRAL_TEXT), + ), + ) + swapped = build_profile_comparison._special_spans("Inf", "NaN") + self.assertIn(("-Inf", build_profile_comparison.REGRESSION_TEXT), swapped) + self.assertIn(("+NaN", build_profile_comparison.IMPROVEMENT_TEXT), swapped) + self.assertEqual( + build_profile_comparison._special_spans("Both", "Both"), + (("Both", build_overview.SUPPORT["Both"]),), + ) + self.assertEqual( + build_profile_comparison._signed_zero_spans("yes", "no"), + ( + ("✓", build_profile_comparison.IMPROVEMENT_TEXT), + (" (", build_profile_comparison.NEUTRAL_TEXT), + ("✗", build_profile_comparison.REGRESSION_TEXT), + (")", build_profile_comparison.NEUTRAL_TEXT), + ), + ) + self.assertEqual( + build_profile_comparison._subnormal_spans("yes", "no"), + ( + ("✓", build_profile_comparison.IMPROVEMENT_TEXT), + (" (", build_profile_comparison.NEUTRAL_TEXT), + ("✗", build_profile_comparison.REGRESSION_TEXT), + (")", build_profile_comparison.NEUTRAL_TEXT), + ), + ) + + def test_comparison_metadata_allows_separate_compatible_runs(self) -> None: + strict = self.metadata("strict", "strict-run") + fastmath = self.metadata("fastmath", "fastmath-run") + self.assertIsNone( + build_profile_comparison._compatibility_reason(strict, fastmath) + ) + + different_host = copy.deepcopy(fastmath) + different_host["host"]["processor"] = "other-cpu" + self.assertIn( + "environments", + build_profile_comparison._compatibility_reason( + strict, different_host, + ), + ) + different_profile = copy.deepcopy(fastmath) + different_profile["accuracy_samples"] = 4096 + self.assertIn( + "sample profiles", + build_profile_comparison._compatibility_reason( + strict, different_profile, + ), + ) + different_source = copy.deepcopy(fastmath) + different_source["source_fingerprint"] = "b" * 64 + self.assertIn( + "fingerprints", + build_profile_comparison._compatibility_reason( + strict, different_source, + ), + ) + + def test_comparison_rejects_row_shape_mismatches(self) -> None: + comparison, target = self.comparison(domains_total="2") + with self.assertRaisesRegex(run_metrics.MetricsError, "domain totals"): + build_profile_comparison.render_comparison( + comparison, target, "f128", + ) + + def test_comparison_renders_one_fltx_block_with_colored_deltas(self) -> None: + comparison, target = self.comparison(ns_iter="9", mean_bits="109") + svg = build_profile_comparison.render_comparison( + comparison, target, "f128", + ) + self.assertIn("f128 strict vs consumer fast-math", svg) + self.assertEqual(svg.count(">bl::f128"), 1) + self.assertIn(">±0", svg) + self.assertIn(">Subnorm", svg) + self.assertIn(">✓", svg) + self.assertIn(">100.0", svg) + self.assertIn("> (-1.0)", svg) + self.assertIn("> (-1.00 ns)", svg) + self.assertIn(f'fill="{build_profile_comparison.REGRESSION_TEXT}"', svg) + self.assertIn(f'fill="{build_profile_comparison.IMPROVEMENT_TEXT}"', svg) + self.assertIn("strict run: strict-run", svg) + self.assertIn("fast-math run: fastmath-run", svg) + self.assertIn(FINGERPRINT, svg) + + def test_comparison_uses_normal_accuracy_and_reports_subnormal_loss(self) -> None: + comparison, target = self.comparison() + for dataset, passed in ( + (comparison.strict, True), + (comparison.fastmath, False), + ): + general = accuracy_row(domain="general") + subnormal = accuracy_row(domain="subnormal") + if not passed: + subnormal.update({ + "mean_bits": "0", + "p01_bits": "0", + "worst_bits": "0", + "margin_bits": "-90", + "pass": "no", + }) + dataset.accuracy.update({ + (target, "f128", "arithmetic", "add", "fltx", "general"): + general, + (target, "f128", "arithmetic", "add", "fltx", "subnormal"): + subnormal, + }) + dataset.canonical[ + (target, "f128", "arithmetic", "add", "fltx") + ].update({ + "domains_passed": "2" if passed else "1", + "domains_total": "2", + }) + + strict, fastmath, _ = build_profile_comparison._comparison_rows( + comparison, target, "f128", + ) + key = ("arithmetic", "add") + self.assertEqual(strict[key]["mean_bits"], "110.0") + self.assertEqual(fastmath[key]["mean_bits"], "110.0") + self.assertEqual(strict[key]["subnormal_support"], "yes") + self.assertEqual(fastmath[key]["subnormal_support"], "no") + + svg = build_profile_comparison.render_comparison( + comparison, target, "f128", + ) + self.assertIn(">✗", svg) + self.assertIn("subnormal support: yes -> no", svg) + + def test_optional_comparison_clears_stale_outputs(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + target = build_tables.Target("windows", "x86_64", "MSVC") + output = root / "generated" / "profile_comparison" + paths = build_profile_comparison.output_paths(output, target) + output.mkdir(parents=True) + for path in paths: + path.write_text("stale", encoding="utf-8") + + result = build_profile_comparison.build( + root / "data", output, target, + ) + + self.assertFalse(result.outputs) + self.assertIsNotNone(result.skipped) + self.assertTrue(all(not path.exists() for path in paths)) + with self.assertRaisesRegex(run_metrics.MetricsError, "incomplete"): + build_profile_comparison.build( + root / "data", output, target, required=True, + ) + + +class PresetPipelineTests(unittest.TestCase): + def test_checked_in_preset_surface_is_uniform(self) -> None: + root = Path(__file__).resolve().parents[3] + presets = json.loads( + (root / "CMakePresets.json").read_text(encoding="utf-8") + ) + matrix = { + preset + for host_presets in supported_preset_pipeline.SUPPORTED_PRESETS.values() + for preset in host_presets + } + configure = { + value["name"] + for value in presets["configurePresets"] + if not value.get("hidden", False) + } + self.assertEqual(configure, matrix | {"vs2026", "xcode"}) + build = {value["name"] for value in presets["buildPresets"]} + tests = {value["name"] for value in presets["testPresets"]} + self.assertTrue(matrix.issubset(build)) + self.assertTrue(matrix.issubset(tests)) + self.assertFalse({ + "native-release", "clang-release", "mingw-release", + "macos-release", "wasm32-release", + } & (configure | build | tests)) + + public_presets = { + value["name"]: value + for value in presets["configurePresets"] + if value["name"] in matrix + } + for name, value in public_presets.items(): + cache = value["cacheVariables"] + if name == "wasm32-emscripten-release": + self.assertNotIn("CMAKE_C_COMPILER", cache) + self.assertNotIn("CMAKE_CXX_COMPILER", cache) + self.assertTrue( + cache["VCPKG_CHAINLOAD_TOOLCHAIN_FILE"].endswith( + "/Emscripten.cmake" + ) + ) + else: + self.assertIn("CMAKE_C_COMPILER", cache) + self.assertIn("CMAKE_CXX_COMPILER", cache) + for name in ( + "windows-x64-clangcl-release", + "windows-arm64-clangcl-release", + ): + cache = public_presets[name]["cacheVariables"] + self.assertEqual(cache["CMAKE_LINKER"], "lld-link.exe") + self.assertEqual(cache["CMAKE_AR"], "llvm-lib.exe") + self.assertEqual(cache["FLTX_METRICS_QDPP"], "OFF") + self.assertEqual( + public_presets[name]["environment"]["PATH"], + "$env{PROGRAMFILES}/LLVM/bin;$penv{PATH}", + ) + + def test_supported_presets_are_selected_by_host_and_architecture(self) -> None: + self.assertEqual( + supported_preset_pipeline.supported_presets("Windows", "AMD64"), + ( + "windows-x64-msvc-release", + "windows-x64-clangcl-release", + "windows-x64-mingw-release", + "wasm32-emscripten-release", + ), + ) + self.assertEqual( + supported_preset_pipeline.supported_presets("Linux", "aarch64"), + ( + "linux-arm64-gcc-release", + "linux-arm64-clang-release", + ), + ) + self.assertEqual( + supported_preset_pipeline.supported_presets("Darwin", "arm64"), + ( + "macos-arm64-appleclang-release", + ), + ) + + def test_supported_presets_reject_an_unknown_host(self) -> None: + with self.assertRaisesRegex( + preset_pipeline.PipelineError, + "unsupported validation host Plan9/mips64", + ): + supported_preset_pipeline.supported_presets("Plan9", "mips64") + + def test_all_supported_pipeline_forwards_workflow_arguments(self) -> None: + root = Path("source") + output = io.StringIO() + with ( + mock.patch.object( + supported_preset_pipeline, + "supported_presets", + return_value=("first-release", "second-release"), + ), + mock.patch.object( + preset_pipeline, + "run_pipeline", + side_effect=((Path("first.svg"),), (Path("second.svg"),)), + ) as run, + redirect_stdout(output), + ): + status = supported_preset_pipeline.main( + root, + [ + "--consumer-mode", "all", + "--full", + "--output-root", "staging", + "--force-rerun", + ], + ) + + self.assertEqual(status, 0) + self.assertEqual( + run.call_args_list, + [ + mock.call( + root, + "first-release", + workflow="full", + output_root=Path("staging"), + force_rerun=True, + consumer_mode="all", + ), + mock.call( + root, + "second-release", + workflow="full", + output_root=Path("staging"), + force_rerun=True, + consumer_mode="all", + ), + ], + ) + self.assertIn("running metrics preset 1/2: first-release", output.getvalue()) + self.assertIn("generated metrics reports for second-release", output.getvalue()) + + def test_all_supported_pipeline_does_not_accept_a_preset(self) -> None: + with redirect_stderr(io.StringIO()), self.assertRaises(SystemExit): + supported_preset_pipeline.parse_args([ + "--preset", "windows-x64-msvc-release", + ]) + + def test_all_supported_pipeline_stops_at_the_first_failed_preset(self) -> None: + errors = io.StringIO() + with ( + mock.patch.object( + supported_preset_pipeline, + "supported_presets", + return_value=( + "first-release", + "second-release", + "third-release", + ), + ), + mock.patch.object( + preset_pipeline, + "run_pipeline_from_args", + side_effect=( + (), + preset_pipeline.PipelineError("missing toolchain"), + ), + ) as run, + redirect_stdout(io.StringIO()), + redirect_stderr(errors), + ): + status = supported_preset_pipeline.main(Path("source"), []) + + self.assertEqual(status, 1) + self.assertEqual(run.call_count, 2) + self.assertIn( + "all-supported metrics failed for second-release: missing toolchain", + errors.getvalue(), + ) + + def test_report_rebuild_uses_matching_category_layouts(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + output = root / "generated" + target = build_tables.Target("windows", "x86_64", "MSVC") + + def build_accuracy(_input, _targets, destination, _consumer_mode): + path = destination / "accuracy_table.svg" + path.parent.mkdir(parents=True) + path.write_text("", encoding="utf-8") + return [path] + + def build_performance(_input, destination, layout, _consumer_mode): + suffix = "_compact" if layout == "compact" else "" + svg = destination / f"performance_table{suffix}.svg" + metadata = destination / f"performance_run{suffix}.json" + destination.mkdir(parents=True, exist_ok=True) + svg.write_text("", encoding="utf-8") + metadata.write_text("{}", encoding="utf-8") + return svg, metadata + + with ( + mock.patch.object( + report_pipeline.build_tables, + "build", + side_effect=build_accuracy, + ), + mock.patch.object( + report_pipeline.build_performance, + "build", + side_effect=build_performance, + ), + mock.patch.object( + report_pipeline.build_tables, + "load", + return_value=mock.sentinel.dataset, + ), + mock.patch.object( + report_pipeline.build_overview, + "render_overview", + return_value="", + ), + ): + outputs = report_pipeline.rebuild(root / "data", output, (target,)) + + self.assertEqual(len(outputs), 9) + self.assertEqual( + {path.parent.name for path in outputs}, + {"accuracy", "performance", "overview"}, + ) + self.assertIn( + "windows_x86_64_MSVC_f128_overview_compact.svg", + {path.name for path in outputs}, + ) + + def test_pipeline_defaults_to_strict_and_accepts_all(self) -> None: + strict = preset_pipeline.parse_args(["--preset", "native-release"]) + all_modes = preset_pipeline.parse_args([ + "--preset", + "native-release", + "--consumer-mode", + "all", + ]) + + self.assertEqual(strict.consumer_mode, "strict") + self.assertEqual(all_modes.consumer_mode, "all") + + def test_pipeline_all_generates_both_local_layouts(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + input_root = root / "evidence" + commands: list[list[str]] = [] + environments: list[dict[str, str]] = [] + selection = preset_pipeline.PresetSelection( + build_name="mingw-release", + configure_name="mingw-release", + binary_dir=root / "build", + configuration=None, + generator="Ninja", + compiler_hint="g++.exe", + target_hint="x64-mingw-static", + environment={"FLTX_PRESET_ENV": "active"}, + ) + + def fake_run(command, command_root, environment=None) -> None: + commands.append(list(command)) + environments.append(dict(environment or {})) + script = Path(command[1]).name + if script == "run_metrics.py": + consumer_mode = command[command.index("--consumer-mode") + 1] + handoff = Path(command[command.index("--result-file") + 1]) + handoff.parent.mkdir(parents=True, exist_ok=True) + handoff.write_text( + json.dumps({ + "schema_version": run_metrics.SCHEMA_VERSION, + "run_id": "run", + "sample_mode": "standard", + "consumer_mode": consumer_mode, + "platform": "windows", + "architecture": "x86_64", + "compiler": "MSVC", + "target": "windows/x86_64/MSVC", + "input_root": str(input_root), + "metadata": "metadata.json", + }), + encoding="utf-8", + ) + return + + if script == "run_native_accuracy.py": + consumer_mode = command[command.index("--consumer-mode") + 1] + output_root = Path(command[command.index("--output-root") + 1]) + run_directory = output_root / "native-run" + run_directory.mkdir(parents=True, exist_ok=True) + for precision in ("f32", "f64"): + (run_directory / f"{precision}_accuracy.csv").write_text( + "evidence\n", + encoding="utf-8", + ) + metadata = run_directory / "native_accuracy_run.json" + metadata.write_text("{}", encoding="utf-8") + handoff = Path(command[command.index("--result-file") + 1]) + handoff.parent.mkdir(parents=True, exist_ok=True) + handoff.write_text( + json.dumps({ + "schema_version": run_native_accuracy.NATIVE_SCHEMA_VERSION, + "run_id": "native-run", + "sample_mode": "standard", + "consumer_mode": consumer_mode, + "platform": "windows", + "architecture": "x86_64", + "compiler": "MSVC", + "target": "windows/x86_64/MSVC", + "run_directory": str(run_directory), + "metadata": str(metadata), + }), + encoding="utf-8", + ) + return + + if script == "build_profile_comparison.py": + self.assertIn("--required", command) + output = Path(command[command.index("--output") + 1]) + for precision in run_metrics.PRECISIONS: + path = ( + output + / f"windows_x86_64_MSVC_{precision}_strict_fastmath_comp.svg" + ) + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text("", encoding="utf-8") + return + + self.assertEqual(script, "rebuild_tables.py") + output = Path(command[command.index("--output") + 1]) + consumer_mode = command[command.index("--consumer-mode") + 1] + mode_suffix = run_metrics.consumer_mode_suffix(consumer_mode) + generated = ( + output / "accuracy" / f"accuracy_table{mode_suffix}.svg", + output / "performance" / f"performance_table{mode_suffix}.svg", + output / "performance" / f"performance_table{mode_suffix}_compact.svg", + output / "overview" / f"windows_x86_64_MSVC_f128{mode_suffix}_overview.svg", + output / "overview" / f"windows_x86_64_MSVC_f128{mode_suffix}_overview_compact.svg", + output / "overview" / f"windows_x86_64_MSVC_f256{mode_suffix}_overview.svg", + output / "overview" / f"windows_x86_64_MSVC_f256{mode_suffix}_overview_compact.svg", + ) + for path in generated: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text("", encoding="utf-8") + + with ( + mock.patch.object( + preset_pipeline, + "resolve_preset", + return_value=selection, + ), + mock.patch.object( + preset_pipeline, + "existing_runner_artifacts", + return_value={ + "fltx_accuracy": Path("accuracy.exe"), + "fltx_benchmark": Path("benchmark.exe"), + "fltx_accuracy_fastmath": Path("accuracy-fastmath.exe"), + "fltx_benchmark_fastmath": Path("benchmark-fastmath.exe"), + }, + ), + mock.patch.object( + preset_pipeline, + "_run", + side_effect=fake_run, + ), + ): + outputs = preset_pipeline.run_pipeline( + root, + "native-release", + consumer_mode="all", + ) + + metrics_command = commands[0] + self.assertEqual( + metrics_command[metrics_command.index("--sample-mode") + 1], + "standard", + ) + self.assertEqual( + Path(metrics_command[metrics_command.index("--output-root") + 1]), + root.resolve() + / "validation" + / "metrics" + / "_unversioned" + / "standard" + / "data", + ) + self.assertEqual(len(commands), 7) + self.assertEqual( + environments, + [dict(selection.environment)] * len(commands), + ) + self.assertEqual( + [Path(command[1]).name for command in commands], + [ + "run_metrics.py", + "run_native_accuracy.py", + "rebuild_tables.py", + "run_metrics.py", + "run_native_accuracy.py", + "rebuild_tables.py", + "build_profile_comparison.py", + ], + ) + self.assertTrue(all( + "--reuse-compatible" in command + for command in commands + if Path(command[1]).name == "run_native_accuracy.py" + )) + self.assertEqual( + [ + command[command.index("--consumer-mode") + 1] + for command in commands[:6] + ], + ["strict", "strict", "strict", "fastmath", "fastmath", "fastmath"], + ) + self.assertEqual(len(outputs), 16) + generated_root = ( + root.resolve() + / "validation" + / "metrics" + / "_unversioned" + / "standard" + / "generated" + ) + self.assertTrue(all( + generated_root in path.parents + for path in outputs + )) + + def test_metrics_fail_fast_gates_all_accuracy_before_benchmarks(self) -> None: + configuration = ValidationTests.configuration_banner() + identity = source_fingerprint.SourceIdentity( + revision="test-revision", + fingerprint=FINGERPRINT, + ) + with ( + mock.patch.object( + run_metrics, + "source_identity", + return_value=identity, + ), + mock.patch.object( + run_metrics, + "_run_provenance", + return_value={"host": {}, "executables": {}}, + ), + mock.patch.object( + run_metrics, + "_preflight_runners", + return_value=configuration, + ), + mock.patch.object( + run_metrics, + "_accept_runner_configuration", + return_value=configuration, + ), + mock.patch.object(run_metrics, "_write_json"), + mock.patch.object( + run_metrics, + "_run", + side_effect=[ + (configuration, 0), + (configuration, 1), + ], + ) as run, + redirect_stderr(io.StringIO()), + ): + status = run_metrics.main([ + "--accuracy", "accuracy.exe", + "--benchmark", "benchmark.exe", + "--platform", "windows", + "--architecture", "x86_64", + "--compiler", "MSVC", + "--sample-mode", "smoke", + ]) + + self.assertEqual(status, 1) + self.assertEqual(run.call_count, 2) + first_command = run.call_args_list[0].args[0] + second_command = run.call_args_list[1].args[0] + self.assertEqual( + first_command[first_command.index("--precision") + 1], + "f128", + ) + self.assertEqual( + second_command[second_command.index("--precision") + 1], + "f256", + ) + self.assertTrue(all(call.args[1] == "accuracy" for call in run.call_args_list)) + + def test_standard_runs_both_accuracy_precisions_before_benchmarks(self) -> None: + configuration = ValidationTests.configuration_banner() + identity = source_fingerprint.SourceIdentity( + revision="test-revision", + fingerprint=FINGERPRINT, + ) + lock = threading.Lock() + accuracy_started: set[str] = set() + both_accuracy_started = threading.Event() + benchmark_saw_both = False + + def fake_run(command, runner_name, **kwargs): + nonlocal benchmark_saw_both + precision = command[command.index("--precision") + 1] + if runner_name == "accuracy": + with lock: + accuracy_started.add(precision) + if len(accuracy_started) == 2: + both_accuracy_started.set() + both_accuracy_started.wait(timeout=2) + return configuration, 0 + benchmark_saw_both = both_accuracy_started.is_set() + return configuration, 1 + + with ( + mock.patch.object(run_metrics, "source_identity", return_value=identity), + mock.patch.object( + run_metrics, + "_run_provenance", + return_value={"host": {}, "executables": {}}, + ), + mock.patch.object( + run_metrics, "_preflight_runners", return_value=configuration, + ), + mock.patch.object( + run_metrics, + "_accept_runner_configuration", + return_value=configuration, + ), + mock.patch.object(run_metrics, "_write_json"), + mock.patch.object(run_metrics, "_run", side_effect=fake_run) as run, + redirect_stderr(io.StringIO()), + ): + status = run_metrics.main([ + "--accuracy", "accuracy.exe", + "--benchmark", "benchmark.exe", + "--platform", "windows", + "--architecture", "x86_64", + "--compiler", "MSVC", + "--sample-mode", "standard", + ]) + + self.assertEqual(status, 1) + self.assertEqual(accuracy_started, {"f128", "f256"}) + self.assertTrue(benchmark_saw_both) + self.assertEqual( + [call.args[1] for call in run.call_args_list].count("benchmark"), + 1, + ) + + def test_standard_accuracy_failure_prevents_all_benchmarks(self) -> None: + configuration = ValidationTests.configuration_banner() + identity = source_fingerprint.SourceIdentity( + revision="test-revision", + fingerprint=FINGERPRINT, + ) + + def fake_run(command, runner_name, **kwargs): + precision = command[command.index("--precision") + 1] + return configuration, int(runner_name == "accuracy" and precision == "f128") + + with ( + mock.patch.object(run_metrics, "source_identity", return_value=identity), + mock.patch.object( + run_metrics, + "_run_provenance", + return_value={"host": {}, "executables": {}}, + ), + mock.patch.object( + run_metrics, "_preflight_runners", return_value=configuration, + ), + mock.patch.object( + run_metrics, + "_accept_runner_configuration", + return_value=configuration, + ), + mock.patch.object(run_metrics, "_write_json"), + mock.patch.object(run_metrics, "_run", side_effect=fake_run) as run, + redirect_stderr(io.StringIO()), + ): + status = run_metrics.main([ + "--accuracy", "accuracy.exe", + "--benchmark", "benchmark.exe", + "--platform", "windows", + "--architecture", "x86_64", + "--compiler", "MSVC", + "--sample-mode", "standard", + ]) + + self.assertEqual(status, 1) + self.assertEqual(run.call_count, 2) + self.assertTrue(all(call.args[1] == "accuracy" for call in run.call_args_list)) + + def test_existing_valid_runners_skip_cmake_preparation(self) -> None: + selection = preset_pipeline.PresetSelection( + build_name="native-release", + configure_name="native-release", + binary_dir=Path("build/native-release"), + configuration="Release", + generator="Ninja", + compiler_hint="", + target_hint="", + environment={"FLTX_PRESET_ENV": "active"}, + ) + artifacts = { + "fltx_accuracy": Path("accuracy.exe"), + "fltx_benchmark": Path("benchmark.exe"), + "fltx_accuracy_fastmath": Path("accuracy-fastmath.exe"), + "fltx_benchmark_fastmath": Path("benchmark-fastmath.exe"), + } + with ( + mock.patch.object( + preset_pipeline, + "discover_runner_artifacts", + return_value=artifacts, + ) as discover, + mock.patch.object( + run_metrics, + "validate_runner_artifacts", + return_value=("windows", "x86_64", "MSVC"), + ) as validate, + ): + observed = preset_pipeline.existing_runner_artifacts( + Path("."), + selection, + "full", + selection.environment, + ) + self.assertIs(observed, artifacts) + discover.assert_called_once_with( + selection.binary_dir, + selection.configuration, + ) + self.assertEqual(validate.call_count, 2) + validate.assert_has_calls([ + mock.call( + Path("."), + { + "fltx_accuracy": artifacts["fltx_accuracy"], + "fltx_benchmark": artifacts["fltx_benchmark"], + }, + sample_mode="full", + consumer_mode="strict", + environment=selection.environment, + ), + mock.call( + Path("."), + { + "fltx_accuracy": artifacts["fltx_accuracy_fastmath"], + "fltx_benchmark": artifacts["fltx_benchmark_fastmath"], + }, + sample_mode="full", + consumer_mode="fastmath", + environment=selection.environment, + ), + ]) + + def test_stale_existing_runners_fall_back_to_cmake(self) -> None: + selection = preset_pipeline.PresetSelection( + build_name="native-release", + configure_name="native-release", + binary_dir=Path("build/native-release"), + configuration="Release", + generator="Ninja", + compiler_hint="", + target_hint="", + environment={}, + ) + with ( + mock.patch.object( + preset_pipeline, + "discover_runner_artifacts", + return_value={ + "fltx_accuracy": Path("accuracy.exe"), + "fltx_benchmark": Path("benchmark.exe"), + }, + ), + mock.patch.object( + run_metrics, + "validate_runner_artifacts", + side_effect=run_metrics.MetricsError("stale fingerprint"), + ), + ): + observed = preset_pipeline.existing_runner_artifacts( + Path("."), + selection, + "smoke", + ) + self.assertIsNone(observed) + + def test_visual_studio_bootstrap_is_limited_to_windows_ninja(self) -> None: + def selection( + generator: str, + *, + compiler: str = "", + target: str = "", + ) -> preset_pipeline.PresetSelection: + return preset_pipeline.PresetSelection( + build_name="build", + configure_name="configure", + binary_dir=Path("build"), + configuration="Release", + generator=generator, + compiler_hint=compiler, + target_hint=target, + environment={}, + ) + + native = selection("Ninja") + self.assertTrue( + preset_pipeline.needs_msvc_environment( + native, + host_system="Windows", + ) + ) + self.assertFalse( + preset_pipeline.needs_msvc_environment( + native, + host_system="Linux", + ) + ) + self.assertFalse( + preset_pipeline.needs_msvc_environment( + selection("Visual Studio 18 2026"), + host_system="Windows", + ) + ) + self.assertFalse( + preset_pipeline.needs_msvc_environment( + selection("Ninja", target="x64-mingw-static"), + host_system="Windows", + ) + ) + self.assertTrue( + preset_pipeline.needs_msvc_environment( + selection("Ninja", compiler="clang-cl.exe"), + host_system="Windows", + ) + ) + self.assertFalse( + preset_pipeline.needs_msvc_environment( + selection("Ninja", target="wasm32-emscripten"), + host_system="Windows", + ) + ) + + def test_visual_studio_bootstrap_preserves_preset_environment(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + selection = preset_pipeline.PresetSelection( + build_name="windows-x64-clangcl-release", + configure_name="windows-x64-clangcl-release", + binary_dir=root / "build", + configuration=None, + generator="Ninja", + compiler_hint="clang-cl.exe", + target_hint="x64-windows", + environment={"PATH": "preset-llvm-path"}, + ) + initialized = {"PATH": "initialized-msvc-and-llvm-path"} + with ( + mock.patch.object( + preset_pipeline, + "resolve_preset", + return_value=selection, + ), + mock.patch.object( + preset_pipeline, + "existing_runner_artifacts", + return_value=None, + ), + mock.patch.object( + preset_pipeline, + "needs_msvc_environment", + return_value=True, + ), + mock.patch.object( + preset_pipeline, + "msvc_environment", + return_value=initialized, + ) as bootstrap, + mock.patch.object(preset_pipeline, "prepare_file_api_query"), + mock.patch.object( + preset_pipeline, + "_run", + side_effect=preset_pipeline.PipelineError("stop after configure"), + ) as run, + ): + with self.assertRaisesRegex( + preset_pipeline.PipelineError, + "stop after configure", + ): + preset_pipeline.run_pipeline(root, selection.build_name) + + bootstrap.assert_called_once_with( + "x64", + parent_environment=selection.environment, + ) + run.assert_called_once_with( + [ + "cmake", + "--preset", + selection.configure_name, + "-DFLTX_METRICS_EXTERNAL_COMPARISONS=ON", + ], + root.resolve(), + initialized, + ) + + def test_resolves_included_and_inherited_build_preset(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + (root / "base-presets.json").write_text( + json.dumps({ + "version": 5, + "configurePresets": [{ + "name": "base-config", + "generator": "Ninja", + "binaryDir": "${sourceDir}/out/$env{FLTX_TEST_OUTPUT}", + "environment": {"FLTX_TEST_OUTPUT": "release"}, + }], + "buildPresets": [{ + "name": "base-build", + "configurePreset": "release-config", + "configuration": "Release", + }], + }), + encoding="utf-8", + ) + (root / "CMakePresets.json").write_text( + json.dumps({ + "version": 5, + "include": ["base-presets.json"], + "configurePresets": [{ + "name": "release-config", + "inherits": "base-config", + }], + "buildPresets": [{ + "name": "native-release", + "inherits": "base-build", + }], + }), + encoding="utf-8", + ) + + selection = preset_pipeline.resolve_preset(root, "native-release") + self.assertEqual(selection.configure_name, "release-config") + self.assertEqual(selection.configuration, "Release") + self.assertEqual(selection.binary_dir, (root / "out" / "release").resolve()) + self.assertEqual(selection.environment["FLTX_TEST_OUTPUT"], "release") + + def test_mingw_configure_failure_explains_toolchain_requirement(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + selection = preset_pipeline.PresetSelection( + build_name="mingw-release", + configure_name="mingw-release", + binary_dir=root / "build", + configuration=None, + generator="Ninja", + compiler_hint="", + target_hint="x64-mingw-static", + environment={"FLTX_PRESET_ENV": "active"}, + ) + with ( + mock.patch.object( + preset_pipeline, + "resolve_preset", + return_value=selection, + ), + mock.patch.object( + preset_pipeline, + "existing_runner_artifacts", + return_value=None, + ), + mock.patch.object(preset_pipeline, "prepare_file_api_query"), + mock.patch.object( + preset_pipeline, + "_run", + side_effect=preset_pipeline.PipelineError("configure failed"), + ) as run, + ): + with self.assertRaises(preset_pipeline.PipelineError) as raised: + preset_pipeline.run_pipeline(root, "mingw-release") + + message = str(raised.exception) + self.assertIn("configure failed", message) + self.assertIn("requires a MinGW compiler and Ninja", message) + self.assertIn("vcpkg triplet", message) + run.assert_called_once_with( + [ + "cmake", + "--preset", + "mingw-release", + "-DFLTX_METRICS_EXTERNAL_COMPARISONS=ON", + ], + root.resolve(), + None, + ) + + def test_file_api_selects_configured_runner_artifacts(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + binary = Path(temporary) + reply = binary / ".cmake" / "api" / "v1" / "reply" + reply.mkdir(parents=True) + targets = [] + for name in preset_pipeline.RUNNER_TARGETS: + artifact = binary / "tests" / "Release" / f"{name}.exe" + artifact.parent.mkdir(parents=True, exist_ok=True) + artifact.write_text("", encoding="utf-8") + target_json = f"target-{name}.json" + (reply / target_json).write_text( + json.dumps({ + "type": "EXECUTABLE", + "nameOnDisk": artifact.name, + "artifacts": [{ + "path": artifact.relative_to(binary).as_posix(), + }], + }), + encoding="utf-8", + ) + targets.append({"name": name, "jsonFile": target_json}) + codemodel_name = "codemodel-v2-test.json" + (reply / codemodel_name).write_text( + json.dumps({ + "configurations": [ + {"name": "Debug", "targets": []}, + {"name": "Release", "targets": targets}, + ], + }), + encoding="utf-8", + ) + (reply / "index-test.json").write_text( + json.dumps({ + "reply": { + "client-fltx-metrics": { + "query.json": { + "responses": [{ + "kind": "codemodel", + "jsonFile": codemodel_name, + }], + }, + }, + }, + }), + encoding="utf-8", + ) + + artifacts = preset_pipeline.discover_runner_artifacts( + binary, + "Release", + ) + self.assertEqual(set(artifacts), set(preset_pipeline.RUNNER_TARGETS)) + self.assertTrue(all(path.is_file() for path in artifacts.values())) + + def test_preset_output_paths_separate_workflow_evidence_and_reports(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + resolved_root = root.resolve() + self.assertEqual( + preset_pipeline.metrics_paths(root, "standard"), + preset_pipeline.MetricsPaths( + data=( + resolved_root + / "validation" + / "metrics" + / "_unversioned" + / "standard" + / "data" + ), + generated=( + resolved_root + / "validation" + / "metrics" + / "_unversioned" + / "standard" + / "generated" + ), + ), + ) + self.assertEqual( + preset_pipeline.metrics_paths(root, "quick"), + preset_pipeline.MetricsPaths( + data=( + resolved_root + / "validation" + / "metrics" + / "_unversioned" + / "quick" + / "data" + ), + generated=( + resolved_root + / "validation" + / "metrics" + / "_unversioned" + / "quick" + / "generated" + ), + ), + ) + self.assertEqual( + preset_pipeline.metrics_paths(root, "full"), + preset_pipeline.MetricsPaths( + data=( + resolved_root + / "validation" + / "metrics" + / "_unversioned" + / "full" + / "data" + ), + generated=( + resolved_root + / "validation" + / "metrics" + / "_unversioned" + / "full" + / "generated" + ), + ), + ) + self.assertEqual( + preset_pipeline.metrics_paths(root, "release"), + preset_pipeline.MetricsPaths( + data=resolved_root / "validation" / "metrics" / "data", + generated=( + resolved_root / "validation" / "metrics" / "generated" + ), + ), + ) + + def test_custom_output_root_is_noncanonical_and_release_rejects_it(self) -> None: + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + custom = root / "staging" + resolved_custom = custom.resolve() + self.assertEqual( + preset_pipeline.metrics_paths(root, "quick", custom), + preset_pipeline.MetricsPaths( + data=resolved_custom / "data", + generated=resolved_custom / "generated", + ), + ) + with self.assertRaisesRegex( + preset_pipeline.PipelineError, + "--release cannot be combined with --output-root", + ): + preset_pipeline.metrics_paths(root, "release", custom) + + +if __name__ == "__main__": + unittest.main() diff --git a/validation/metrics/assets/fonts/ubuntu-mono/LICENCE.txt b/validation/metrics/assets/fonts/ubuntu-mono/LICENCE.txt new file mode 100644 index 0000000..ae78a8f --- /dev/null +++ b/validation/metrics/assets/fonts/ubuntu-mono/LICENCE.txt @@ -0,0 +1,96 @@ +------------------------------- +UBUNTU FONT LICENCE Version 1.0 +------------------------------- + +PREAMBLE +This licence allows the licensed fonts to be used, studied, modified and +redistributed freely. The fonts, including any derivative works, can be +bundled, embedded, and redistributed provided the terms of this licence +are met. The fonts and derivatives, however, cannot be released under +any other licence. The requirement for fonts to remain under this +licence does not require any document created using the fonts or their +derivatives to be published under this licence, as long as the primary +purpose of the document is not to be a vehicle for the distribution of +the fonts. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this licence and clearly marked as such. This may +include source files, build scripts and documentation. + +"Original Version" refers to the collection of Font Software components +as received under this licence. + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to +a new environment. + +"Copyright Holder(s)" refers to all individuals and companies who have a +copyright ownership of the Font Software. + +"Substantially Changed" refers to Modified Versions which can be easily +identified as dissimilar to the Font Software by users of the Font +Software comparing the Original Version with the Modified Version. + +To "Propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification and with or without charging +a redistribution fee), making available to the public, and in some +countries other activities as well. + +PERMISSION & CONDITIONS +This licence does not grant any rights under trademark law and all such +rights are reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of the Font Software, to propagate the Font Software, subject to +the below conditions: + +1) Each copy of the Font Software must contain the above copyright +notice and this licence. These can be included either as stand-alone +text files, human-readable headers or in the appropriate machine- +readable metadata fields within text or binary files as long as those +fields can be easily viewed by the user. + +2) The font name complies with the following: +(a) The Original Version must retain its name, unmodified. +(b) Modified Versions which are Substantially Changed must be renamed to +avoid use of the name of the Original Version or similar names entirely. +(c) Modified Versions which are not Substantially Changed must be +renamed to both (i) retain the name of the Original Version and (ii) add +additional naming elements to distinguish the Modified Version from the +Original Version. The name of such Modified Versions must be the name of +the Original Version, with "derivative X" where X represents the name of +the new work, appended to that name. + +3) The name(s) of the Copyright Holder(s) and any contributor to the +Font Software shall not be used to promote, endorse or advertise any +Modified Version, except (i) as required by this licence, (ii) to +acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with +their explicit written permission. + +4) The Font Software, modified or unmodified, in part or in whole, must +be distributed entirely under this licence, and must not be distributed +under any other licence. The requirement for fonts to remain under this +licence does not affect any document created using the Font Software, +except any version of the Font Software extracted from a document +created using the Font Software may only be distributed under this +licence. + +TERMINATION +This licence becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER +DEALINGS IN THE FONT SOFTWARE. diff --git a/validation/metrics/assets/fonts/ubuntu-mono/README.md b/validation/metrics/assets/fonts/ubuntu-mono/README.md new file mode 100644 index 0000000..c139212 --- /dev/null +++ b/validation/metrics/assets/fonts/ubuntu-mono/README.md @@ -0,0 +1,15 @@ +# Ubuntu Mono report font + +The WOFF2 files in this directory are report-specific subsets of Ubuntu Mono +Regular and Bold from Canonical's official Ubuntu Font Family 0.83 package: + +https://design.ubuntu.com/font + +They contain printable ASCII and the small set of symbols used by the metrics +SVG reports: + +`U+0020-007E,U+00B7,U+00D7,U+2013-2014,U+2212,U+221E,U+2264-2265,U+2713` + +The subsets are embedded into compact overview SVGs so their layout and +appearance do not depend on locally installed fonts. Ubuntu Mono is +distributed under the Ubuntu Font Licence 1.0; see `LICENCE.txt`. diff --git a/validation/metrics/assets/fonts/ubuntu-mono/UbuntuMono-Bold.woff2 b/validation/metrics/assets/fonts/ubuntu-mono/UbuntuMono-Bold.woff2 new file mode 100644 index 0000000..45f6474 Binary files /dev/null and b/validation/metrics/assets/fonts/ubuntu-mono/UbuntuMono-Bold.woff2 differ diff --git a/validation/metrics/assets/fonts/ubuntu-mono/UbuntuMono-Regular.woff2 b/validation/metrics/assets/fonts/ubuntu-mono/UbuntuMono-Regular.woff2 new file mode 100644 index 0000000..797de57 Binary files /dev/null and b/validation/metrics/assets/fonts/ubuntu-mono/UbuntuMono-Regular.woff2 differ diff --git a/validation/metrics/data/.gitkeep b/validation/metrics/data/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/validation/metrics/data/.gitkeep @@ -0,0 +1 @@ + diff --git a/validation/metrics/data/native/fastmath/3367bd3ec38c41b18c33145d45209071/f32_accuracy.csv b/validation/metrics/data/native/fastmath/3367bd3ec38c41b18c33145d45209071/f32_accuracy.csv new file mode 100644 index 0000000..6be8b33 --- /dev/null +++ b/validation/metrics/data/native/fastmath/3367bd3ec38c41b18c33145d45209071/f32_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,near_one,4099,10322096095657499359,38.457645,24.037482,24.000509,20.000000,4.000509,yes,Both,no,"[1.1885061456019219,3.2987672193893811e-17,-1.831183659922398e-33,1.0165111307816044e-49] ; [0.81220021471607706,2.2543084474582116e-17,-1.2513925714875483e-33,6.9466242285517913e-50]",2.000706195831298828125,2.00070631504058837890625 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,moderate,4099,10322096095657499356,41.522382,24.071404,24.000368,20.000000,4.000368,yes,Both,no,"[6.8051724535006084,1.8888147861053107e-16,-1.0485028323932781e-32,5.8203599295385438e-49] ; [1.1968659760618667,3.3219704100358647e-17,-1.8440640181726446e-33,1.0236611659290266e-49]",8.0020389556884765625,8.002038478851318359375 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,wide_exponent,4096,10322096095657499357,46.805352,24.393682,24.006151,20.000000,4.006151,yes,Both,no,"[6.8663278648288954e-15,1.9057888225395823e-31,-1.0579253154283554e-47,5.8726652176119575e-64] ; [-3.2984332805285199e-15,-9.154991433081627e-32,5.0820411396266402e-48,-2.821099542652883e-64]",3.567894203281192500032403813747805543243885040283203125e-15,3.567894415039429313607488580828430713154375553131103515625e-15 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,extreme_finite,4096,10322096095657499295,47.155091,24.409642,24.030594,20.000000,4.030594,yes,Both,no,"[223002548.53621882,6.1895640983749784e-09,-3.4358982872045742e-25,1.9073066943623286e-41] ; [279175322748.44623,7.748671780562106e-06,-4.3013769105216293e-22,2.3877438418260673e-38]",279398318080,279398334384 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,no,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.77817428112030029296875,-0.77817428112030029296875 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000016215026915,0,0,0]",-1.6689300537109375e-06,-1.6689300537109375e-06 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,near_one,4099,10322096095657499359,26.016181,24.166616,24.014549,20.000000,4.014549,yes,Both,no,"[1.4059396726628588,3.902266489560654e-17,-2.1661930524667106e-33,1.2024787013157959e-49] ; [1.4325550147665504,3.9761389035901386e-17,-2.2072004799367987e-33,1.2252423963947649e-49]",2.0140857696533203125,2.014085888497646692485432140529155731201171875 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,moderate,4099,10322096095657499356,25.989725,24.178659,24.028212,20.000000,4.028212,yes,Both,no,"[-1.4739640396494451,-4.0910720357208028e-17,2.2710011847286731e-33,-1.2606589021183906e-49] ; [2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49]",-4.02748775482177734375,-4.0274875194135120182181708514690399169921875 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,wide_exponent,4096,10322096095657499357,25.942256,24.179837,24.024630,20.000000,4.024630,yes,Both,no,"[-1122057943862.8401,-3.1143364106002161e-05,1.7288039947384127e-21,-9.5967900001126686e-38] ; [-8694665162187.9277,-0.00024132543636168146,1.3396252793822586e-20,-7.4364141477004576e-37]",9755918009047724494684160,9755918580702648912052224 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,extreme_finite,8,10322096095657499292,40.953446,25.906891,25.906891,20.000000,5.906891,yes,Both,no,"large neighbour [844424863023104,0.023437498137354851,-1.3010425035850288e-18,7.2222367174802835e-35] ; negative small neighbour [-5.5511156525213747e-16,-1.5407441024465825e-32,8.5528478879580846e-49,-4.7477843256638533e-65]",-0.46875,-0.468750007450577044210149324499070644378662109375 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,near_one,4099,10322096095657499359,25.952819,24.167429,24.029610,20.000000,4.029610,yes,Both,yes,"[1.2982596956909869,3.6033945152474569e-17,2.0002857788178657e-33,1.1103816637369289e-49] ; [1.2798202945460211,3.5522148959688557e-17,1.9718753829605394e-33,1.0946107259271694e-49]",1.01440775394439697265625,1.0144078131795243086497270702039165563127339636105403630860948828655528161513261 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,moderate,4099,10322096095657499356,26.239727,24.172640,24.024913,20.000000,4.024913,yes,Both,yes,"[6.5374711177505596,1.8145127394371573e-16,1.0072569108993997e-32,5.5913990709666165e-49] ; [3.2450059050955762,9.0067006772042607e-17,4.99972323386958e-33,2.775403925497677e-49]",2.0146253108978271484375,2.0146254289230677898843256855109580140862879734170743102717224833311181385074994 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,wide_exponent,4096,10322096095657499357,25.917644,24.144253,24.027945,20.000000,4.027945,yes,Both,yes,"[0.027902000922864607,7.7443609644191634e-19,4.2989839268532189e-35,2.3864154690429567e-51] ; [14499.326437201289,4.0243715130342775e-13,2.2339749567081166e-29,1.2401052166866692e-45]",1.924365506056346930563449859619140625e-06,1.9243653935555734717265282397956262784302341636296406554453298274232840831100044e-06 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,extreme_finite,8,10322096095657499292,25.430169,24.584963,24.584963,20.000000,4.584963,yes,Both,yes,"large positive [844424930131968,0.0234375,1.3010426069826053e-18,7.2222372914521344e-35] ; small negative [5.5511151231257827e-16,1.5407439555097887e-32,8.5528470722950261e-49,4.7477838728798994e-65]",1521180780720166262527502581760,1521180720273875281796043846451.2 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,moderate,4099,10322096095657499356,25.971753,24.150757,24.027403,20.000000,4.027403,yes,Both,yes,"[-1.9749460259140985,-5.4815763759044581e-17,3.0428861518852258e-33,-1.6891411335680094e-49] ; [-6.4158772339979464,-1.7807636570882208e-16,9.885224067575198e-33,-5.4874016817003646e-49] ; [3.4130940773098271,9.4732390746028102e-17,-5.2587040692013754e-33,2.9191671686586848e-49]",16.0841045379638671875,16.0841054786133099696598947048187255859375 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; next value after one [1.0000001192092896,0,0,0] ; native product cancellation",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,wide_exponent,4096,10322096095657499357,32.556508,24.197422,24.009758,20.000000,4.009758,yes,Both,yes,"[0.0072982921122313887,2.0256829858598637e-19,-1.124479945746528e-35,6.2421176324852115e-52] ; [1.9523314176984748e-12,5.4188082290698013e-29,-3.0080428309707814e-45,1.6697992050011997e-61] ; [-2.3939769383437016e-07,-6.6446207934270406e-24,3.6885054973828883e-40,-2.0475318648254738e-56]",-2.39397678569730487652122974395751953125e-07,-2.3939769274275411635131445493727566081466591810245070348628360079601407051086426e-07 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",3588998231833025183056134144,3588998231833025183056134144 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fabs,native,float,native float,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,moderate,4099,10322096095657499356,25.964756,24.164418,24.008593,20.000000,4.008593,yes,Both,yes,"[-4.0059402826070123,-1.1118717842559279e-16,6.1721282765599288e-33,-3.4262194617884094e-49]",16.0475597381591796875,16.0475587873306722030974924564361572265625 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,wide_exponent,4096,10322096095657499357,25.989404,24.167423,24.020149,20.000000,4.020149,yes,Both,yes,"[797963256397175.88,0.022147929501425297,-1.2294570640128564e-18,6.8248577012755909e-35]",636745309315666385691207532544,636745346742277146199547969536 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,near_one,4099,10322096095657499359,26.024612,24.188379,24.024049,20.000000,4.024049,yes,Both,yes,"[0.99957607711604157,2.774380939196801e-17,1.5400907988887275e-33,8.5492213246980834e-50]",1.0004241466522216796875,1.0004240880080409757745092099607730518546575501261053598713520202379186199441578 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,wide_exponent,4096,10322096095657499357,25.897082,24.141136,24.016290,20.000000,4.016290,yes,Both,yes,"[1.4835519773135318e-08,4.1176839086041523e-25,2.2857737417304193e-41,1.2688593185763538e-57]",67405800,67405796.027411572915787349932438540624582792272908782750245310659982961460931995 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Inf,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Inf,no,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",-4402.79248046875,-4402.79248046875 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Inf,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055850982666015625,-7.055850982666015625 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Inf,no,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",3588998231833025183056134144,3588998231833025183056134144 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,moderate,4099,10322096095657499356,48.522678,24.128146,24.008521,20.000000,4.008521,yes,Both,yes,"[6.6457375410806137,1.8445627084308674e-16,-1.0239379946324441e-32,5.6839976871472472e-49] ; [2.6220427968328792,7.27763071149101e-17,-4.0398965903082395e-33,2.2425931058324353e-49]",4.0236949920654296875,4.0236947536468505859375 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000016215026915,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,copysign,native,float,native float,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,floor,native,float,native float,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,ceil,native,float,native float,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,trunc,native,float,native float,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round,native,float,native float,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,roundeven,native,float,native float,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_decimals,native,float,native float,bl::round_decimals,moderate,4099,10322096095657499356,26.229396,24.222837,24.047915,20.000000,4.047915,yes,NaN,yes,"[4.1022214313758827,1.1385951713060679e-16,-6.3204728745551046e-33,3.5085672559249129e-49]",4.10200023651123046875,4.102 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_significant,native,float,native float,bl::round_significant,wide_exponent,4096,10322096095657499357,26.031860,24.190158,24.023953,20.000000,4.023953,yes,NaN,yes,"[259.8694582017871,7.2128263973122191e-15,-4.0039229694600715e-31,2.2226237347600494e-47]",259.869384765625,259.8694 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,lround,native,float,native float,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,llround,native,float,native float,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remquo,native,float,native float,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.944149017333984375 ; 1,-0.944149017333984375 ; 1 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,NaN,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,NaN,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0 ; 3588998231833025183056134144,0 ; 3588998231833025183056134144 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ldexp,native,float,native float,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbn,native,float,native float,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbln,native,float,native float,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0.724792420864105224609375 ; 92,0.724792420864105224609375 ; 92 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,-,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,near_one,4099,10322096095657499359,25.904846,24.145989,24.002397,20.000000,4.002397,yes,Both,yes,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",1.00001394748687744140625,1.0000140069934242844029017485374012760134473363250144717592753776502313379618068 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,wide_exponent,4096,10322096095657499357,25.966753,24.215195,24.033944,20.000000,4.033944,yes,Both,yes,"[8.4482670931604627e+31,2344865161252447,0.13016616458319236,7.2256736473703873e-18]",9191445835546624,9191445300433280.2040066177032811142195637421096986523537003168905974560430072948 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,extreme_finite,4096,10322096095657499295,25.972131,24.206633,24.003202,20.000000,4.003202,yes,Both,yes,"[3.2519120367544908e+32,9025869043151310,0.50103638144790075,2.7813106342916602e-17]",18033057994899456,18033059067370500.361343159063133250828533418772371371727970165496211972696634283 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,subnormal,4100,10322096095657499290,27.589271,24.195086,24.031452,20.000000,4.031452,yes,Both,yes,"[1.8779781629341901e-40,0,0,0]",1.370393513549582123487035494914521027709497502655722200870513916015625e-20,1.3703934336292589277694998548128719273180184126519025205252581878215739867341933e-20 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,moderate,4099,10322096095657499356,25.612822,23.399203,22.959143,20.000000,2.959143,yes,Both,yes,"[-1.3107925921174228,-3.6381802906921357e-17,2.0195957632319271e-33,-1.1211008583877508e-49]",-1.0944049358367919921875,-1.0944048016260133167401477577509673709480743051163502096548202710331859650845724 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,wide_exponent,4096,10322096095657499357,25.485859,23.259136,22.884042,20.000000,2.884042,yes,Both,yes,"[0.13220588448365292,3.6694504236171299e-18,-2.0369541740101359e-34,1.1307367120461853e-50]",0.50942885875701904296875,0.50942892456832680642725488647785089467768581077622050151162156924742112505750114 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,moderate,4099,10322096095657499356,25.982984,24.167535,24.008992,20.000000,4.008992,yes,Both,yes,"[3.0841394791368018,8.5602066522327873e-17,-4.7518692604291353e-33,2.6378173314684702e-49] ; [2.5731327818230003,7.1418781494941861e-17,-3.9645387803178756e-33,2.2007611179641204e-49]",4.016582012176513671875,4.0165817742570609994234301662245381486745983183743907579567512422082641230482559 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,wide_exponent,4096,10322096095657499357,50.914162,24.589271,24.043824,20.000000,4.043824,yes,Both,yes,"[-1.2969861059349299e-29,-3.599859593569704e-46,1.9983235030994217e-62,-1.1092923818952892e-78] ; [2.7588817734603815e-32,7.6574351677860018e-49,-4.250730416425209e-65,2.3596293898948734e-81]",1.2969890834882488924611555657595108221020467658335037497430164421530207619071007e-29,1.2969890084946579252781730919118729168609820257308054473541529684278323820094086e-29 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,moderate,4099,10322096095657499356,26.149035,24.214150,24.040329,20.000000,4.040329,yes,Both,yes,"[-5.7483236179995885,-1.5954803084249315e-16,8.8566948687470254e-33,-4.9164532826812132e-49]",0.509722173213958740234375,0.5097222027582440476609190572223045086789238470780369932414545068400613217789304 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,argument_reduction,4111,10322096095657499282,26.207700,24.232934,24.054458,20.000000,4.054458,yes,Both,yes,"near 2^94 * pi/2 [3.1112832252188646e+28,0,0,0]",-0.031775273382663726806640625,-0.031775275206458036754431969895458660655905161590001855338797800351243967744526865 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,moderate,4099,10322096095657499356,26.060912,24.256137,24.035729,20.000000,4.035729,yes,Both,-,"[4.4588502387206184,1.2375795495957516e-16,-6.8699465538321711e-33,3.8135864210043619e-49]",-0.25083100795745849609375,-0.25083099337247927050646438955413445736165895666786844698074070181158501850594916 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,argument_reduction,4111,10322096095657499282,26.627755,24.245703,24.076319,20.000000,4.076319,yes,Both,-,"near 2^70 * pi/2 [1.8544669218107189e+21,0,0,0]",-0.5190365314483642578125,-0.51903650210542794358474489503209069334133171874228756988100493423128724002299192 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,moderate,4099,10322096095657499356,25.924307,24.163895,24.015719,20.000000,4.015719,yes,Both,yes,"[-6.036496878364936,-1.6754644556096587e-16,9.3006960777944832e-33,-5.1629234653041607e-49]",0.2518171370029449462890625,0.25181715184977206019891708487262388659629088175425587483011094843357962067832389 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,argument_reduction,4111,10322096095657499282,25.898518,24.161857,24.046469,18.000000,6.046469,yes,Both,yes,"near 2^28 * pi/2 [-421657632,0,0,0]",0.507759034633636474609375,0.50775906393914719153658437245770373295759245731279909404632772755040921670373447 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,near_one,4099,10322096095657499359,26.067892,24.219203,24.021836,20.000000,4.021836,yes,NaN,yes,"[0.55072017619471925,1.5285555493425008e-17,-8.4851878264929949e-34,4.7102254466208054e-50]",0.503395974636077880859375,0.5033959450820623349182906770633407385222001692931760800454776223514541494398828 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,moderate,4099,10322096095657499356,25.911836,24.243607,24.056379,20.000000,4.056379,yes,NaN,yes,"[1.6967153744323316,4.7093311873256703e-17,-2.6142039573771427e-33,1.4511747122731526e-49]",1.03822672367095947265625,1.0382266641595175302821692627692631092810194067716353711556189103095518619306749 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,near_one,4099,10322096095657499359,25.920195,24.158254,24.013805,20.000000,4.013805,yes,NaN,yes,"[1.3550416411741315,3.7609960733934508e-17,-2.0877722181031071e-33,1.1589463933554018e-49] ; [0.85964036308882719,2.3859813099958637e-17,-1.3244856933413505e-33,7.3523725626709088e-50]",1.005465030670166015625,1.0054649713105136693080409087559014886644835427733168442408504661900474402910144 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,moderate,4099,10322096095657499356,25.938612,24.172853,24.023930,20.000000,4.023930,yes,NaN,yes,"[-1.5221127970798687,-4.2247116834866724e-17,2.3451860917049052e-33,-1.3018397980207348e-49] ; [-0.70678002618891433,-1.9617086460502596e-17,1.0889670532256199e-33,-6.0449814777464578e-50]",-2.005512237548828125,-2.005512355120225239725146453473468772246503385569443728906464376660394150359798 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,extreme_finite,8,10322096095657499293,32.824184,25.098912,25.098912,20.000000,5.098912,yes,NaN,yes,"huge positive [3.1901471898837981e+37,8.8544371553805848e+20,-49152,2.7284841053187847e-12] ; tiny negative [-1.4693679385278594e-38,-4.0783152924990778e-55,2.2639197697066781e-71,-1.256727927116218e-87]",1.57079637050628662109375,1.5707963267948966192313216916397514420985846996875529104874722961539082031435651 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,moderate,4099,10322096095657499356,25.877130,23.894387,23.461405,20.000000,3.461405,yes,Both,yes,"[0.50525718509116591,1.4023704006137669e-17,-7.7847195390710439e-34,4.3213874362630044e-50]",0.5296800136566162109375,0.52967996779738378444136497299823480300062150306901044995137540581814602542442563 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,boundary,4105,10322096095657499355,24.992759,24.113237,24.113237,20.000000,4.113237,yes,Both,yes,"[0.99999910479106313,2.7755550768589574e-17,-1.5407425762220303e-33,8.5528394157098913e-50]",1.5694591999053955078125,1.5694591134201073494139739317636003811920117017421147249498608268896329577376014 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,moderate,4099,10322096095657499356,25.920877,24.113823,23.808727,20.000000,3.808727,yes,Both,-,"[-0.61518495487317537,-1.707481253257968e-17,9.4784250074140707e-34,-5.2615828402069857e-50]",2.233417034149169921875,2.2334168821543518003502700866744511755619367949446568069567781212742346589702698 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,boundary,4105,10322096095657499355,25.983148,24.584962,24.584962,20.000000,4.584962,yes,Both,-,"[0.9999995073211686,2.7755561941044354e-17,-1.5407431964178572e-33,8.5528428584883254e-50]",0.0009765625,0.00097656253880511143898187133876924251895712227894022748398387476387013216099532872 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,moderate,4099,10322096095657499356,25.945177,24.173984,24.007691,20.000000,4.007691,yes,Both,-,"[0.69706560262123496,1.9347457042607623e-17,-1.0739996138324561e-33,5.9618954985765975e-50]",2.007852077484130859375,2.0078521965251381745368245393757138670217404209691449932482836198723071521808851 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,boundary,4099,10322096095657499289,25.985101,24.189213,24.012647,20.000000,4.012647,yes,Both,-,"[-55.445402102948194,-1.538919050607329e-15,8.5427168150927155e-32,-4.7421604504842094e-48]",8.32470122137760864279645685032325255932328378349893682752735912799835205078125e-25,8.3247007295174246704446931992286856723729842657502269685404369668574123561739996e-25 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,moderate,4099,10322096095657499356,25.945545,24.176633,24.015565,20.000000,4.015565,yes,Both,-,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",16.047374725341796875,16.047373779108025107147981190408654763758177217950870805754027309567667903729689 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,boundary,4099,10322096095657499289,25.953108,24.184447,24.013981,20.000000,4.013981,yes,Both,-,"[12.008718688899336,3.3330889961656162e-16,-1.8502360733339086e-32,1.0270873448036725e-48]",4120.82763671875,4120.8278799704215331782631104353597855518360018117915418683951931281930912686669 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,moderate,4099,10322096095657499356,25.980116,23.586262,22.527963,20.000000,2.527963,yes,Both,yes,"[0.34057363208584057,9.4528171980479295e-18,-5.2473676504227349e-34,2.9128741920862649e-50]",0.4057538211345672607421875,0.40575375404270745997458287046382846533769495983882253541892972745121909455076655 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,cancellation,4098,10322096095657499288,46.577665,23.566651,22.781883,20.000000,2.781883,yes,Both,yes,"[0.00067049616781304463,0,0,0]",0.0006707208813168108463287353515625,0.00067072097432296308285210370663059393442257906709442662111659198408734521169141739 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,near_one,4099,10322096095657499359,25.915814,24.153165,23.953904,20.000000,3.953904,yes,Both,-,"[0.93845537367659526,2.6047369085974028e-17,1.4459194445078942e-33,8.0264652952294025e-50]",-0.06351993978023529052734375,-0.063519943689242454447435124366623484973123162314765713955967040355554375738192851 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,wide_exponent,4096,10322096095657499357,25.934124,24.148103,24.055764,20.000000,4.055764,yes,Both,-,"[3.2617843787809539e-29,9.0532702967131949e-46,5.0255745657830058e-62,2.7897542974514332e-78]",-65.59268951416015625,-65.59269327555488150776766062278388871045172786432349789542906836393403051939105 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,extreme_finite,4096,10322096095657499295,25.928931,24.171772,24.028998,20.000000,4.028998,yes,Both,-,"[1.925072119386236e+28,534314847751.63684,2.9660432318647614e-05,1.6464847440249349e-21]",65.12734222412109375,65.127346028765523545207426082299833753247218536882252197810633399468572469932133 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,near_one,4099,10322096095657499359,25.997641,24.168133,23.675086,20.000000,3.675086,yes,Both,-,"[1.0239856815956481,2.8421312014849322e-17,1.5776997494470658e-33,8.7579929389073653e-50]",0.0341954641044139862060546875,0.034195461551375619696170753702097836731645774772968144626738312328832836284482893 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,wide_exponent,4096,10322096095657499357,25.972931,24.199454,24.028872,20.000000,4.028872,yes,Both,-,"[279.54938708294071,7.7590541514832776e-15,4.307140284145071e-31,2.3909431568741984e-47]",8.1269588470458984375,8.1269593218526276965603717987343564084569415244724976083039632724987237766261338 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,extreme_finite,4096,10322096095657499295,26.022657,24.191270,24.003063,20.000000,4.003063,yes,Both,-,"[5.0098439803322917e-20,1.3905110341861625e-36,7.7188868307440791e-53,4.2848429419839901e-69]",-64.113800048828125,-64.113796235451863124774831376509181438042251966024731816806674549792684463109039 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,near_one,4099,10322096095657499359,25.962169,24.152799,23.987576,20.000000,3.987576,yes,Both,-,"[1.1548157158417363,3.2052574923161943e-17,1.7792753339108649e-33,9.8769622142772787e-50]",0.0625126659870147705078125,0.062512669745286719885701932573165067686690137111581665627621599315275165176273273 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,wide_exponent,4096,10322096095657499357,25.952914,24.154037,24.048450,20.000000,4.048450,yes,Both,-,"[23432401020772320,0.65037977838778627,3.6103330235836354e-17,2.0041374246735552e-33]",16.3698177337646484375,16.369816790271109973117205087238363001448077217226902449637697819144005794863329 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,extreme_finite,4096,10322096095657499295,25.880532,24.163613,24.027658,20.000000,4.027658,yes,Both,-,"[4.8264741762657366e-33,1.3396156895622393e-49,7.4363609135055201e-66,4.1280095527981953e-82]",-32.316371917724609375,-32.316370028094117653165372508074257172256480666024940344680625927328493584980905 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,moderate,4099,10322096095657499356,25.852828,23.555276,23.169104,20.000000,3.169104,yes,Both,yes,"[0.6489272591876778,1.8011349611426414e-17,-9.9983075215894855e-34,5.5501756088757656e-50]",0.500124990940093994140625,0.50012493791477858658519920495659102199166970636399639754750147511225772771010193 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,cancellation,4098,10322096095657499288,46.640460,23.927588,22.843491,20.000000,2.843491,yes,Both,yes,"[-3.0161881082333463e-08,0,0,0]",-3.016187832827199599705636501312255859375e-08,-3.0161882335855243245304754558762072997310887274723990939098277461580018360871778e-08 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,near_one,4099,10322096095657499359,25.935116,24.183020,24.022132,20.000000,4.022132,yes,Both,yes,"[1.0032222542802387,2.7845011137956863e-17,1.545708624315182e-33,8.5804065203819558e-50] ; [1.1098483278340112,3.0804479185076206e-17,1.7099921026428991e-33,9.4923630214066531e-50]",1.00357687473297119140625,1.0035768158257674189368635854208332740856335659539134346018913304416269618692691 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,moderate,4099,10322096095657499356,25.910732,24.173665,24.033763,20.000000,4.033763,yes,Both,yes,"[1.5010856767109688,4.1663497005488793e-17,2.312788683094746e-33,1.2838556235321408e-49] ; [6.8472618406345225,1.900496937777419e-16,1.054987729275047e-32,5.8563583386908427e-49]",16.1396617889404296875,16.139662728687068635103760006664480606823689561120066764019143935355322552829973 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,moderate,4099,10322096095657499356,24.296761,22.240676,21.817420,20.000000,1.817420,yes,Both,yes,"[-2.0174902967783854,-5.5996604486030095e-17,3.108435980060947e-33,-1.7255285978184637e-49]",-136.0443267822265625,-136.04428997082654660356838684633834963763840941785070423709212066151322168144796 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,wide_exponent,4096,10322096095657499357,24.307980,22.194400,21.763685,20.000000,1.763685,yes,Both,yes,"[8.3253759191734602,2.3107560085315504e-16,-1.282727262481326e-32,7.1205667056058241e-49]",2772213.75,2772214.528582891558413966128826065404980229940407596127199381800655092889207728 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[30287485871.102478,8.4064660430267718e-07,4.666526078348927e-23,2.590442348598358e-39] ; [2.0009290447377264e-12,5.5536937402726095e-29,3.0829193310836276e-45,1.7113640122155147e-61]",1.12052207790203084414315526373684406280517578125e-12,1.12052207790203084414315526373684406280517578125e-12 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remainder,native,float,native float,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,near_one,4099,10322096095657499359,25.942025,24.196051,24.011707,20.000000,4.011707,yes,Both,yes,"[1.4459245913717083,4.0132469330314787e-17,-2.2277995742789206e-33,1.2366771908072897e-49]",2.0051238536834716796875,2.0051239722322748219797119221081131107158513029013343848994792963571293595758708 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,moderate,4099,10322096095657499356,25.936329,24.161474,24.011590,20.000000,4.011590,yes,Both,yes,"[-6.9355339383837169,-1.9249973666156986e-16,1.0685881993797711e-32,-5.9318561139707965e-49]",-514.08355712890625,-514.08358752550603806804367819424003815790834626890985544825401905207447930345975 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,near_one,4099,10322096095657499359,25.882807,24.206821,24.037830,20.000000,4.037830,yes,Both,-,"[1.3363709947474058,3.7091746195244852e-17,-2.0590055324756691e-33,1.1429776749925342e-49]",2.03400325775146484375,2.0340033758498468053419313401516481710439729679668859465095831820284475316728875 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,moderate,4099,10322096095657499356,25.970199,24.157896,24.042107,20.000000,4.042107,yes,Both,-,"[-2.0865014257806518,-5.791204809537242e-17,3.2147644599340952e-33,-1.7845527610827445e-49]",4.09039974212646484375,4.0903995053326148905358860858142744104816455202766888280678248016451416423900309 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,near_one,4099,10322096095657499359,25.960144,23.951896,23.585735,20.000000,3.585735,yes,Both,yes,"[0.88614226956034992,2.4595388768987312e-17,-1.3653183455468349e-33,7.5790393158461086e-50]",0.70948302745819091796875,0.70948308381265723135205564231795018723276975370790990618793629403010330001580195 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,moderate,4099,10322096095657499356,26.364861,24.367323,23.664024,20.000000,3.664024,yes,Both,yes,"[0.98775382689116853,2.741567603190466e-17,-1.5218757383142301e-33,8.4481074264743387e-50]",0.7564029693603515625,0.75640291245249735018763313924583594579849914862813856260689384074903424534412451 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,near_one,4099,10322096095657499359,25.557868,23.335878,22.898759,20.000000,2.898759,yes,Both,yes,"[0.57890999870085935,1.6067980243585338e-17,-8.9195208128252867e-34,4.9513286875109623e-50]",0.550656378269195556640625,0.55065644868454699918532056874039300539183901870314239434476919100760017958369078 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,moderate,4099,10322096095657499356,25.758179,23.643520,23.178168,20.000000,3.178168,yes,Both,yes,"[-0.71131392647961711,-1.9742927472854918e-17,1.0959526326934043e-33,-6.0837592335738726e-50]",-0.661910712718963623046875,-0.66191064298001016538523218063742045913680409778040236139504261769759961805182207 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,moderate,4099,10322096095657499286,25.987251,23.739051,23.010583,20.000000,3.010583,yes,Both,-,"[1.2554365019814742,3.4845362761367464e-17,-1.9343062019543092e-33,1.073755641042456e-49]",0.700352489948272705078125,0.70035257282658160606822099851014095184653107534774288487363940920358700564424369 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,boundary,4101,10322096095657499355,25.658763,23.793907,23.793907,20.000000,3.793907,yes,Both,-,"[1.9999994915125949,5.5511137117897206e-17,-3.0814871275706815e-33,1.7105689795575038e-49]",1.3169577121734619140625,1.3169576216227113023399862811927493515571819731899743868099047486919155844722929 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,moderate,4099,10322096095657499356,25.561446,23.249029,22.606628,20.000000,2.606628,yes,Both,yes,"[-0.13966164066443998,-3.8763892280646578e-18,2.15182828670316e-34,-1.1945046544687754e-50]",-0.14058049023151397705078125,-0.14058046821990765766624665138807069884802640321892146574846765659067668817307699 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,boundary,4105,10322096095657499355,26.088438,25.637514,25.637514,20.000000,5.637514,yes,Both,yes,"[0.99899949151259504,2.7727805926652667e-17,-1.5392024281053832e-33,8.5442898762077182e-50]",3.7999393939971923828125,3.7999393211997930734222062320257072616372641916906079170097936373745998626952477 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,near_one,4099,10322096095657499359,24.857511,22.598092,22.085996,20.000000,2.085996,yes,Both,yes,"[0.53604224621822094,1.4878161098081403e-17,-8.259038507586138e-34,4.5846873561939605e-50]",0.551595985889434814453125,0.55159586198878604402024477717780943885722591386846885979528200458339895826755766 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,moderate,4099,10322096095657499356,36.747937,22.921316,22.304962,20.000000,2.304962,yes,Both,yes,"[-0.24896518890527197,-6.9101721263196129e-18,3.8359160993815049e-34,-2.1293611870318335e-50]",-0.2752292454242706298828125,-0.2752291923074717000217600512613630869391188036657604244357750914377283598292848 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,near_one,4099,10322096095657499359,25.245567,22.988275,22.581085,20.000000,2.581085,yes,Both,-,"[0.97201166685381302,2.6978743318634508e-17,-1.4976211003900068e-33,8.3134671390872429e-50]",0.16924555599689483642578125,0.16924552902364932725242710149144848803577038425156278163465453073213314786810873 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,moderate,4099,10322096095657499356,31.106913,22.475584,21.855256,20.000000,1.855256,yes,Both,-,"[1.6346453250862929,4.537052192516691e-17,-2.5185699040290393e-33,1.3980871482905051e-49]",0.0207921527326107025146484375,0.020792147252217579097299115967243302029187028434209797344924817170102319462039264 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,lgamma,native,float,native float,bl::lgamma,moderate,4099,10322096095657499287,25.215770,22.768927,22.134517,20.000000,2.134517,yes,Both,-,"[1.6354152637709984,4.5391892016549652e-17,-2.5197561824036125e-33,1.3987456650730382e-49]",-0.107594527304172515869140625,-0.1075945506729870651185251078111303116984586515628732861915874500496795356566364 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,tgamma,native,float,native float,bl::tgamma,moderate,4099,10322096095657499284,24.655427,22.096602,21.497773,20.000000,1.497773,yes,Both,-,"[19.230534417261044,5.3375455214724321e-16,-2.962932966461791e-32,1.6447581998933986e-48]",12563186288951296,12563190531484946.097539947606450335009162437627518611106355880665925445522889534 diff --git a/validation/metrics/data/native/fastmath/3367bd3ec38c41b18c33145d45209071/f64_accuracy.csv b/validation/metrics/data/native/fastmath/3367bd3ec38c41b18c33145d45209071/f64_accuracy.csv new file mode 100644 index 0000000..f1ed4e5 --- /dev/null +++ b/validation/metrics/data/native/fastmath/3367bd3ec38c41b18c33145d45209071/f64_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,near_one,4099,10322096095657499359,68.804804,53.029455,53.001693,48.000000,5.001693,yes,Both,no,"[1.4297151598371682,3.9682567227671501e-17,-2.2028249906198284e-33,1.222813511902914e-49] ; [0.57263374255596289,1.5893779141572608e-17,-8.8228197756404827e-34,4.8976488285171109e-50]",2.00234890239313134685517070465721189975738525390625,2.0023489023931311248105657796259038150310516357421875 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-15.0558510431143677266163649619556963443756103515625,-15.0558510431143677266163649619556963443756103515625 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,wide_exponent,4096,10322096095657499357,82.842054,53.932557,53.150426,48.000000,5.150426,yes,Both,no,"[-2.5801269239800948e-52,-7.1612907936449556e-69,3.9753149625703952e-85,-2.2067431007912725e-101] ; [6.2882455610389305e-52,1.745338751590589e-68,-9.6885763389319921e-85,5.3782402636604011e-101]",3.7081186370588353126400687774493756982129860731379218490790094277487448813887287e-52,3.7081186370588356835606838461915142713865122279018731858354873035278451266926346e-52 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,extreme_finite,4096,10322096095657499295,83.051539,53.922063,53.033213,48.000000,5.033213,yes,Both,no,"[4.044152691012953e+59,1.1224778581655917e+43,-6.2310038138368535e+26,34589019503.244186] ; [-3.2763861007278913e+51,-9.0937982164748556e+34,5.0480720806127841e+18,-280.22429269318661]",404415265824909244971463481926668921988920568307135488720896,404415265824909201094180361492905708699283935084133453135872 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,no,"+0 [0,0,0,0] ; min normal [2.2250738585072014e-308,0,0,0]",2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308,2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.7781742597549925477551369112916290760040283203125,-0.7781742597549925477551369112916290760040283203125 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",-9.65894031423886190168559551239013671875e-14,-9.65894031423886190168559551239013671875e-14 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [2.2250738585072014e-308,0,0,0]",-2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308,-2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,near_one,4099,10322096095657499359,54.941335,53.192655,53.017782,48.000000,5.017782,yes,Both,no,"[0.61590653178072707,1.7094840314999723e-17,-9.489542660001528e-34,5.267754377148175e-50] ; [0.81645463695581544,2.2661168412757988e-17,-1.2579475468376116e-33,6.9830116513492445e-50]",0.50285974380374887093836377971456386148929595947265625,0.50285974380374892608309676348753773569247609448642907343737535469374577701273665 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,moderate,4099,10322096095657499356,54.943506,53.177920,53.014990,48.000000,5.014990,yes,Both,no,"[-1.8309845685969375,-5.0820030644741984e-17,2.8210784066974295e-33,-1.5660131006941688e-49] ; [4.4139715148669616,1.2251232014612206e-16,-6.8007999313236564e-33,3.7752023348123534e-49]",-8.0819137299478551739184695179574191570281982421875,-8.0819137299478542859205922880040108996859918106071002798056202021115268507855944 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,wide_exponent,4096,10322096095657499357,54.949502,53.147252,53.012976,48.000000,5.012976,yes,Both,no,"[-9580440436661.9609,-0.00026591063897079994,1.4761005693908477e-20,-8.1940041940001134e-37] ; [3.5476231799149722e+112,9.8466323425887909e+95,-5.465978970880409e+79,3.0342278527941741e+63]",-3.3987792566896694596919030454680074525269527091652711616914422309578532569280119e+125,-3.3987792566896690857302928923045025855537603060392874444605126408265807925080287e+125 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,extreme_finite,8,10322096095657499292,69.953445,54.906891,54.906891,48.000000,6.906891,yes,Both,no,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,-2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [-2.4203699467808244e-121,-6.7178761075670899e-138,3.729170365600104e-154,-2.0701054013195242e-170]",-0.46875,-0.46875000000000001387778780781444442934375177282579434799116745646516135614945142 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,near_one,4099,10322096095657499359,54.949938,53.186535,53.032508,48.000000,5.032508,yes,Both,yes,"[0.79583533097289294,2.2088867706407193e-17,1.2261784757776169e-33,6.8066578805404505e-50] ; [0.78671878189697564,2.1835832639176979e-17,1.212132207893789e-33,6.7286854304670572e-50]",1.01158806588287486505350898369215428829193115234375,1.0115880658828749748599930078884108617347838241152708567193976201713984484334261 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,moderate,4099,10322096095657499356,55.299598,53.162157,53.017700,48.000000,5.017700,yes,Both,yes,"[5.6982279612785671,1.5815759705435825e-16,8.7795102884568185e-33,4.8736072335891048e-49] ; [5.6630083746783413,1.571800571553245e-16,8.725245923286967e-33,4.8434844597749865e-49]",1.0062192361850825772506823341245763003826141357421875,1.0062192361850826876012316258994293315599871850773075711644181221348221597609452 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,wide_exponent,4096,10322096095657499357,54.940111,53.173252,53.006391,48.000000,5.006391,yes,Both,yes,"[1.1797107595829603e-08,3.2743551192175876e-25,1.8176322220773076e-41,1.0089885716254063e-57] ; [2.9273558682385512e-68,8.1250447154750139e-85,4.5103058596146572e-101,2.5037227067229757e-117]",402995335272583736023300876476329416171344205099568646324224,402995335272583691479603215316671542832621087480350248383875.97791882737549902199 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,extreme_finite,8,10322096095657499292,54.565310,53.447459,53.447459,48.000000,5.447459,yes,Both,yes,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [2.4203699467808244e-121,6.7178761075670899e-138,3.729170365600104e-154,2.0701054013195242e-170]",8.0016173194558218715832353057948522675740813308632367068153019530691147107160091e+240,8.0016173194558225230457526744094465773333433188328184012700026520990852868662071e+240 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,moderate,4099,10322096095657499356,54.957904,53.175116,53.010971,48.000000,5.010971,yes,Both,yes,"[-2.0766790938067476,-5.7639423617548914e-17,3.1996307613162919e-33,-1.7761518707561329e-49] ; [1.7605984240305848,4.8866422686937992e-17,-2.7126313799051833e-33,1.5058129076457224e-49] ; [-0.3659974929680736,-1.0158471091205978e-17,5.6390842502229579e-34,-3.1303205861993077e-50]",-4.02219543274149682332563315867446362972259521484375,-4.0221954327414963801553326667348806266375851488013985258768850927779681114770938 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; next value after one [1.0000000000000002,0,0,0] ; native product cancellation",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,wide_exponent,4096,10322096095657499357,67.731490,53.261032,53.076165,48.000000,5.076165,yes,Both,yes,"[9.3280228061672898e+101,2.5890464234088722e+85,-1.4372094755459709e+69,7.9781152548029138e+52] ; [-1.157500052342858e+78,-3.212708022789662e+61,1.7834112091495225e+45,-9.8999209338619524e+28] ; [1.8812092993044754e+65,5.2214046955669652e+48,-2.8984618569521754e+32,16089695447930460]",-1.0797186886394012091182337394342607583764140817913341512476728655410802178495674e+180,-1.0797186886394010954097576163349944382733983701060212581740083991443274190535586e+180 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fabs,native,double,native double,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,moderate,4099,10322096095657499356,54.987841,53.178902,53.024599,48.000000,5.024599,yes,Both,yes,"[-4.0291701907573039,-1.1183193789780232e-16,6.2079196171295382e-33,-3.4460876469796998e-49]",16.234212426087250236150794080458581447601318359375,16.234212426087248464261717100553537863564519292427420360394943465998096598923439 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,wide_exponent,4096,10322096095657499357,54.966048,53.184279,53.034276,48.000000,5.034276,yes,Both,yes,"[2.9507000691330746e-25,8.1898378887864514e-42,-4.5462732960391003e-58,2.5236886447505548e-74]",8.7066308979819320541420161769186049656218085566280656265540977462941222974600937e-50,8.7066308979819311102069574980521020700209525169860268542733130882306736168377202e-50 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,near_one,4099,10322096095657499359,55.022120,53.212652,53.036371,48.000000,5.036371,yes,Both,yes,"[0.9803714880397002,2.7210774967692536e-17,1.5105014443513052e-33,8.384967411241868e-50]",1.02002150429685389809719708864577114582061767578125,1.0200215042968537876713460424605364405111022006296562878115184748990877637517355 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,wide_exponent,4096,10322096095657499357,54.902665,53.142478,53.019012,48.000000,5.019012,yes,Both,yes,"[5.654455339035485e-101,1.5694266272779603e-117,8.7120678853189764e-134,4.8361691791892627e-150]",1.7685169305282301591156520034137992060834685455134402926455624168717720163565455e+100,1.7685169305282303528900122951557431771119667320589594598759928180992244301081954e+100 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Inf,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Inf,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166,-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Inf,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143677266163649619556963443756103515625,-7.0558510431143677266163649619556963443756103515625 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Inf,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,copysign,native,double,native double,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,floor,native,double,native double,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,ceil,native,double,native double,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,trunc,native,double,native double,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round,native,double,native double,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,roundeven,native,double,native double,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_decimals,native,double,native double,bl::round_decimals,moderate,4099,10322096095657499356,55.241937,53.207435,53.013030,48.000000,5.013030,yes,NaN,yes,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",4.0039999999999995594635038287378847599029541015625,4.004 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_significant,native,double,native double,bl::round_significant,wide_exponent,4096,10322096095657499357,62.492824,53.239040,53.008690,48.000000,5.008690,yes,NaN,yes,"[1.4846549805182609e+20,4120.7453574894662,-2.2874731872510136e-13,1.2698027003493837e-29]",148465500000000016384,148465500000000000000 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,lround,native,double,native double,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,llround,native,double,native double,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remquo,native,double,native double,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.9441489568856322733836350380443036556243896484375 ; 1,-0.9441489568856322733836350380443036556243896484375 ; 1 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,NaN,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,NaN,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ldexp,native,double,native double,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbn,native,double,native double,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbln,native,double,native double,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.7247924004236494521791200895677320659160614013671875 ; -815,0.7247924004236494521791200895677320659160614013671875 ; -815 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,NaN,-,"lower endpoint [-8,0,0,0]",3,3 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,NaN,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,near_one,4099,10322096095657499359,54.920710,53.127507,53.001106,48.000000,5.001106,yes,Both,yes,"[1.0010388911274162,2.7784410636872319e-17,1.5423446207347879e-33,8.5617325492325808e-50]",1.0005193107218952608405970750027336180210113525390625,1.0005193107218951498457515954360620198623563387038363607072361122298411008899428 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,wide_exponent,4096,10322096095657499357,55.009451,53.211448,53.027507,48.000000,5.027507,yes,Both,yes,"[6.0219100959119555e-185,1.6714158101760344e-201,9.2782215808997173e-218,5.1504476133444428e-234]",7.7600967106808367478172926221258513837894764415588410983624981464748121495074265e-93,7.7600967106808375930900190108944118736382926995509918646504739659308953242516058e-93 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,extreme_finite,4096,10322096095657499295,54.924178,53.221411,53.017887,48.000000,5.017887,yes,Both,yes,"[2.3783259304591718e+282,6.6011805201470536e+265,3.664391301587163e+249,2.0341457971291071e+233]",1.542182197556168240060235866024934642345121301250108457830389998905645354877265e+141,1.5421821975561680709533351179752169384434445730363281277866248379626469712289668e+141 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,subnormal,4100,10322096095657499290,56.222608,53.192031,53.028655,48.000000,5.028655,yes,Both,yes,"[1.3924978593053044e-312,0,0,0]",1.1800414650787929320982458320284728300669497402903960639237252491051024255975799e-156,1.1800414650787930605326941577347439698813910767655579114793014150350187021874733e-156 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,moderate,4099,10322096095657499356,54.622083,52.468769,52.153023,48.000000,4.153023,yes,Both,yes,"[1.4533648333973588,4.033897753045631e-17,-2.2392630822074716e-33,1.2430407160299148e-49]",1.132726034706547313390956333023495972156524658203125,1.1327260347065475395950816870103535936661188861328342251597491513525714564878517 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,wide_exponent,4096,10322096095657499357,54.524419,52.302376,51.828370,48.000000,3.828370,yes,Both,yes,"[1.2341102646685055e-66,3.4253440769030517e-83,-1.9014479307205854e-99,1.0555156364059267e-115]",1.0726334135393147944540533616877040596517305799361325444193308170648393229384965e-22,1.0726334135393145261932376031478166833239128206765371006626749066582454186154407e-22 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,moderate,4099,10322096095657499356,54.875942,52.699142,52.296238,48.000000,4.296238,yes,Both,yes,"[-6.832833876256192,-1.8964923732145955e-16,1.0527647493844247e-32,-5.8440183214016046e-49] ; [4.4299110555054249,1.2295473127159131e-16,-6.8253586822159713e-33,3.7888351801606942e-49]",8.1432015043349768035341185168363153934478759765625,8.1432015043349753310215069499059937406110597175203571183027746754807131183654083 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,wide_exponent,4096,10322096095657499357,83.835524,53.981284,52.722096,48.000000,4.722096,yes,Both,yes,"[3.0900587929049188e-234,8.5766360483211479e-251,-4.7609894073381275e-267,2.6428800300116337e-283] ; [2.970069684721122e-242,8.2435993717964229e-259,-4.5761169141769325e-275,2.540255180747926e-291]",3.0900587929049193702454679907420486743297512979591235842153811313882487753757378e-234,3.0900587929049189543018606534397317978098396795986767283237714870956245237140656e-234 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,moderate,4099,10322096095657499356,55.113078,53.212981,52.982939,48.000000,4.982939,yes,Both,yes,"[-5.7279546273043369,-1.5898267778103705e-16,8.8253114694534815e-33,-4.8990319964378645e-49]",0.52713934110892768369893701674300245940685272216796875,0.52713934110892774291936789618839698785354771358638292015523278457552217658095189 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,argument_reduction,4114,10322096095657499282,55.226584,53.204656,53.024608,48.000000,5.024608,yes,Both,yes,"near 2^103 * pi/2 [1.5929767251982753e+31,0,0,0]",0.53627726761951810541262375409132800996303558349609375,0.53627726761951816394442418574940086586529943280164825512056702720586559068997775 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,moderate,4099,10322096095657499356,55.056788,53.175990,52.886447,48.000000,4.886447,yes,Both,-,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",0.5080030849914536350553362353821285068988800048828125,0.50800308499145369607356162136795610710790846414906949175872788247360372736565953 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,argument_reduction,4114,10322096095657499282,57.678400,53.190606,52.957009,48.000000,4.957009,yes,Both,-,"near 2^96 * pi/2 [-1.2445130665611575e+29,0,0,0]",-0.50225325592115044326391171125578694045543670654296875,-0.50225325592115050071185754648530613739144383428589081390350064471629529975977222 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,moderate,4099,10322096095657499356,54.966272,53.114050,52.830853,48.000000,4.830853,yes,Both,yes,"[-5.7949723984622032,-1.6084279459600013e-16,8.9285686952767023e-33,-4.956351271221794e-49]",0.5310948062764977439798030900419689714908599853515625,0.53109480627649781027783431456712262944491608720831668267909314089793071391325448 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,argument_reduction,4114,10322096095657499282,54.822185,53.100114,52.859084,45.000000,7.859084,yes,Both,yes,"near 2^104 * pi/2 [-3.185953450396556e+31,0,0,0]",-1.3480441969403991198106496085529215633869171142578125,-1.3480441969403989547915221380501138540709149655202515743993920841096117436418514 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,near_one,4099,10322096095657499359,55.076264,53.013973,52.693509,48.000000,4.693509,yes,Both,yes,"[0.69084897511107168,1.9174910967675087e-17,-1.0644213825725161e-33,5.9087256341767488e-50]",0.6045578974549419282169537837035022675991058349609375,0.60455789745494184521062137483289791333043169413541191538511529635270202509108926 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,moderate,4099,10322096095657499356,54.861464,53.032964,52.752464,48.000000,4.752464,yes,Both,yes,"[2.7271853311214098,7.5694598675774267e-17,-4.2018943144802738e-33,2.3325199074887691e-49]",1.219341175070450589146275888197124004364013671875,1.2193411750704504284332317205702958914241077638601847892988778474321517604825199 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,near_one,4099,10322096095657499359,54.993800,53.170510,53.040656,48.000000,5.040656,yes,Both,yes,"[1.3489527984700374,3.7440961399849353e-17,-2.0783908705107242e-33,1.1537386993058641e-49] ; [0.85379739020999446,2.3697638024400127e-17,-1.3154831681960814e-33,7.302398509190685e-50]",1.0065123671465141530489972865325398743152618408203125,1.0065123671465142616892414740655812810119461135218360142280212527802839300485563 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,moderate,4099,10322096095657499356,54.890567,53.179569,53.060948,48.000000,5.060948,yes,Both,yes,"[-4.7266626831272092,-1.311912435111087e-16,7.2825769587619272e-33,-4.0426423091110703e-49] ; [2.8962761555613667,8.0387811839426525e-17,-4.4624199801683043e-33,2.4771407037650929e-49]",-1.0210524446594291259060582888196222484111785888671875,-1.0210524446594292345764275054094005619467300994098247323364498554603476784958796 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,extreme_finite,8,10322096095657499293,62.132485,54.509980,54.509980,48.000000,6.509980,yes,Both,yes,"huge positive [1.6853373139334212e+307,4.6777507254719996e+290,-2.5966732794380218e+274,1.4414432311305024e+258] ; tiny negative [-2.7813423231340017e-308,-0,0,-0]",1.5707963267948965579989817342720925807952880859375,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,moderate,4099,10322096095657499356,54.899662,52.925254,52.422752,48.000000,4.422752,yes,Both,yes,"[-0.50335035028515207,-1.3970778708492839e-17,7.7553400970558289e-34,-4.3050785697750387e-50]",-0.527471766697775290566596595454029738903045654296875,-0.5274717666977753779398223907170077140407553909392966159005201438307403789636427 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,boundary,4105,10322096095657499355,54.919616,53.086611,53.066141,48.000000,5.066141,yes,Both,yes,"[-0.9999991973384238,-2.7755553337294841e-17,1.5407427188138168e-33,-8.552840207253314e-50]",-1.5695293132325520701897403341718018054962158203125,-1.5695293132325522366341318908043706690745267178940372928026218495677083294449175 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,moderate,4099,10322096095657499356,54.885315,52.858563,52.325679,48.000000,4.325679,yes,Both,-,"[-0.50414043989940849,-1.3992708100524456e-17,7.7675133550305953e-34,-4.3118360854191824e-50]",2.0991827056155738517873032833449542522430419921875,2.0991827056155742237087238848295169418258006344663652219436700791519481199702843 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,boundary,4105,10322096095657499355,54.933501,53.208019,53.015630,48.000000,5.015630,yes,Both,-,"[0.99999951942877319,2.7755562277097889e-17,-1.5407432150725758e-33,8.5528429620428158e-50]",0.00098037876895050468130377030462341281236149370670318603515625,0.00098037876895050478897482934485258576844002644995119255737105648210814670714088092 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,moderate,4099,10322096095657499356,54.974015,53.157024,53.019599,48.000000,5.019599,yes,Both,-,"[-2.7628513559780572,-7.6684529725591843e-17,4.2568465266952151e-33,-2.3630245131163269e-49]",0.063111558041546500508189865286112762987613677978515625,0.063111558041546493595944022576030893684783578049870680283049711049275225101317397 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,boundary,4099,10322096095657499289,54.951337,53.166873,53.022036,48.000000,5.022036,yes,Both,-,"[326.47996564801747,9.061639373531479e-15,-5.0302203366722636e-31,2.7923332183556269e-47]",6.1439480220514836164654240272397757603181465874882434277975712709632833055792003e+141,6.1439480220514842882409559528883970846034473863532678303012402569115463152702114e+141 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,moderate,4099,10322096095657499356,54.935841,53.180629,53.025408,48.000000,5.025408,yes,Both,-,"[5.0109819009809229,1.3908268706122392e-16,-7.7206400751053074e-33,4.2858161881128051e-49]",32.244515813988982699811458587646484375,32.244515813988979182444910558923716242085594124376112958709781738645907303764812 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,boundary,4099,10322096095657499289,54.972599,53.164620,53.020447,48.000000,5.020447,yes,Both,-,"[-250.99202946082733,-6.9664282526201528e-15,3.8671445227290451e-31,-2.1466964443434239e-47]",2.7788842653856641449312255150961427650361335071502829578141633319949134903163359e-76,2.7788842653856638407547596404961219062300898310358581460949384897692395968312002e-76 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,moderate,4099,10322096095657499356,55.059494,52.612144,51.837138,48.000000,3.837138,yes,Both,yes,"[-0.32815107029056989,-9.1080218447994713e-18,5.0559677804426335e-34,-2.80662592080518e-50]",-0.2797457975256689710619184552342630922794342041015625,-0.27974579752566904060118051629266816207002563378260620564372138557529344923417983 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,cancellation,4098,10322096095657499288,83.154283,53.027983,51.974659,48.000000,3.974659,yes,Both,yes,"[4.0836650763983235e-12,0,0,0]",4.083665076406660708951440610569317006713074835744237134349532425403594970703125e-12,4.0836650764066616317750966948397766703517255100972299064045015820960692117527006e-12 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,near_one,4099,10322096095657499359,54.918146,53.166316,53.041728,48.000000,5.041728,yes,Both,-,"[1.1335639126739003,3.1462718893368611e-17,1.7465317466363379e-33,9.695198791772263e-50]",0.125366574619705295479121787138865329325199127197265625,0.12536657461970530900080502001741556309701459949497062977512985254006361141481408 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,wide_exponent,4096,10322096095657499357,54.929145,53.171869,53.045970,48.000000,5.045970,yes,Both,-,"[4.6261311118266506e+112,1.2840093188211806e+96,7.1276835479426902e+79,3.9566591935839502e+63]",259.421251321115732935140840709209442138671875,259.42125132111570503685832403601672523060244723042283551553508070299190699694996 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,extreme_finite,4096,10322096095657499295,54.890700,53.179074,53.016960,48.000000,5.016960,yes,Both,-,"[2.0331470333148491e-224,5.6431166220861893e-241,3.1325590022425128e-257,1.7389195651432225e-273]",-515.069475975312570881214924156665802001953125,-515.06947597531262739711907680169329239742647250082611831496163075456316319684835 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,near_one,4099,10322096095657499359,54.995094,53.183432,52.964126,48.000000,4.964126,yes,Both,-,"[0.95724233546017334,2.656881202434606e-17,1.4748653423183355e-33,8.1871473063173968e-50]",-0.063043891274832619675549949533888138830661773681640625,-0.063043891274832612500047979104758712783348150384731080505578135007330599360108535 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,wide_exponent,4096,10322096095657499357,54.961217,53.191544,53.045986,48.000000,5.045986,yes,Both,-,"[1.6478667181302047e-79,4.5737489299541154e-96,2.5389406854448656e-112,1.4093952035692334e-128]",-261.71171993614638040526187978684902191162109375,-261.71171993614635226097107489196965564142826014659637604512890701616180385411886 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,extreme_finite,4096,10322096095657499295,54.951425,53.191636,53.032071,48.000000,5.032071,yes,Both,-,"[3.0682846229157043e-158,8.5162005861608278e-175,4.7274409865410026e-191,2.624256915407243e-207]",-523.24720667460906042833812534809112548828125,-523.24720667460911724330320979055400330344628738302026449859537432674608012400159 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,near_one,4099,10322096095657499359,54.958860,53.143778,53.018669,48.000000,5.018669,yes,Both,-,"[0.74875470021249213,2.0782117699305384e-17,1.1536392785119411e-33,6.4039844455795532e-50]",-0.1256604383656476919828293148384545929729938507080078125,-0.12566043836564767821108349467351605169970965007622302204561391695316098182502685 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,wide_exponent,4096,10322096095657499357,55.006875,53.165767,53.021068,48.000000,5.021068,yes,Both,-,"[4.6201923918188489e+258,1.2823609928988147e+242,7.1185335009872046e+225,3.9515798971807595e+209]",258.66466006061358484657830558717250823974609375,258.66466006061361314780285273352542290302251199814003016169435342215632974918998 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,extreme_finite,4096,10322096095657499295,54.953390,53.178424,53.029150,48.000000,5.029150,yes,Both,-,"[2.8445937992650119e+257,7.8953338291249174e+240,4.3827907020981923e+224,2.4329375747912342e+208]",257.45402025901483966663363389670848846435546875,257.45402025901486767802909135885153181987420064870956774702074158124472305183714 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,moderate,4099,10322096095657499356,54.942690,53.047619,52.277793,48.000000,4.277793,yes,Both,yes,"[1.8167026837397302,5.0423628709654062e-17,-2.7990736789304006e-33,1.5537980229853868e-49]",1.035566939745749426293741635163314640522003173828125,1.0355669397457496159618991192935896670346648660028939511409663282242925434700808 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,cancellation,4098,10322096095657499288,83.171912,53.575868,52.537975,48.000000,4.537975,yes,Both,yes,"[-3.3317353930316975e-08,0,0,0]",-3.331735448534001895552398068121868757174297570600174367427825927734375e-08,-3.3317354485340024050756419560216456335223016311658126282401740088069247520016174e-08 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,near_one,4099,10322096095657499359,54.959214,53.190567,53.032687,48.000000,5.032687,yes,Both,yes,"[1.0146951632466654,2.8163448330305746e-17,1.563385439457318e-33,8.6785325562461659e-50] ; [0.67203279182024089,1.86526569695489e-17,1.0354304619014043e-33,5.7477936960060001e-50]",1.009851987115524707405711524188518524169921875,1.0098519871155248170101935707300539046159555693972004409710861335008920239838475 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,moderate,4099,10322096095657499356,54.935083,53.163311,53.017201,48.000000,5.017201,yes,Both,yes,"[5.9546289339047043,1.652741536380038e-16,9.1745585372173701e-33,5.0929030643950102e-49] ; [5.055011828311212,1.4030476303859041e-16,7.7884789195009855e-33,4.3234743116188276e-49]",8258.471810015818846295587718486785888671875,8258.4718100158197523034186342284236047260743845763155702907245462782899967304707 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,moderate,4099,10322096095657499356,53.278021,51.216249,50.843118,48.000000,2.843118,yes,Both,yes,"[-0.12598239680403012,-3.4967139407324243e-18,1.9410661637644512e-34,-1.0775081736660592e-50]",-5.036966535935927210927633319859086924452640232630074024200439453125e-07,-5.0369665359359247171059931113138371384365138382213074202619030423806648231460384e-07 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,wide_exponent,4096,10322096095657499357,53.261106,51.258453,50.915855,48.000000,2.915855,yes,Both,yes,"[3178858.3859193348,8.8231044301760176e-11,-4.8978068435268183e-27,2.7188289639250675e-43]",3280184465858375893424625758878219769323978752,3280184465858377437606968244219065735294846924.9874778095912486192020477914613844 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.1588709556304993e+103,8.7676281669016289e+86,4.8670113311231216e+70,2.7017340204622107e+54] ; [5.476364839089647e-60,1.5199965839012416e-76,8.4376760239937101e-93,4.6838510980827309e-109]",4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60,4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remainder,native,double,native double,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,near_one,4099,10322096095657499359,54.924799,52.983593,52.654993,48.000000,4.654993,yes,Both,yes,"[1.4755959292519478,4.095601439246665e-17,-2.2735155087697884e-33,1.262054632339298e-49]",2.0724994727921046688834394444711506366729736328125,2.072499472792104961138580290412029520398475094027248170955683086677283903718196 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,moderate,4099,10322096095657499356,54.840090,52.839907,52.382195,48.000000,4.382195,yes,Both,yes,"[-4.8693204451967098,-1.3515079181338512e-16,7.5023760433770639e-33,-4.1646553113766992e-49]",-65.112354096910877387927030213177204132080078125,-65.112354096910888480990202630806761852448902953289356801355801975240320907331551 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,near_one,4099,10322096095657499359,54.876574,52.853190,52.621517,48.000000,4.621517,yes,Both,-,"[0.98058054916848769,2.7216577579660886e-17,-1.5108235540218166e-33,8.3867554791051488e-50]",1.520548407211194774646401128848083317279815673828125,1.5205484072111945551914719285992945947565561251918943368316691032158941972807884 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,moderate,4099,10322096095657499356,54.744398,52.689522,52.208160,48.000000,4.208160,yes,Both,-,"[-2.8630251231866755,-7.9464910296053056e-17,4.4111886530225384e-33,-2.4487016042754264e-49]",8.785762981329629184301666100509464740753173828125,8.7857629813296308730208849350993320141187458453483631911030801892035180406191378 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,near_one,4099,10322096095657499359,54.955827,52.958304,52.476216,48.000000,4.476216,yes,Both,yes,"[0.89084068064074273,2.4725795873002463e-17,-1.3725573940194504e-33,7.6192241072994848e-50]",0.711808711646828573549328211811371147632598876953125,0.7118087116468284599310366212933242511249465496496718227001725734620301911684374 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,moderate,4099,10322096095657499356,55.336545,53.363803,52.830364,48.000000,4.830364,yes,Both,yes,"[0.67537377842904966,1.8745387976000496e-17,-1.0405780668243656e-33,5.7763686435417271e-50]",0.588503635448117012884949872386641800403594970703125,0.58850363544811708637439156576610391440217714992619984433185413295933594686347521 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,near_one,4099,10322096095657499359,54.586548,52.369737,51.895905,48.000000,3.895905,yes,Both,yes,"[0.53254928863989415,1.478121204989397e-17,-8.2052209748295468e-34,4.5548126241965174e-50]",0.51013370703315696896851250130566768348217010498046875,0.51013370703315709071599184668017064813861078342675097769291318040468214812208369 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,moderate,4099,10322096095657499356,54.727697,52.598947,51.750916,48.000000,3.750916,yes,Both,yes,"[-0.12598239680403012,-3.4967139407324243e-18,1.9410661637644512e-34,-1.0775081736660592e-50]",-0.1256514984566571013768765396889648400247097015380859375,-0.12565149845665706821878409248510840880181855230517373980735012913432134271301342 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,moderate,4099,10322096095657499286,54.952709,52.808130,51.870988,48.000000,3.870988,yes,Both,-,"[1.1775265887662758,3.268292827391594e-17,-1.8142669740937001e-33,1.0071204837279191e-49]",0.58738281392912294887054258651915006339550018310546875,0.58738281392912280624478083650309327648102437309781099318842251949855802008569812 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,boundary,4101,10322096095657499355,54.339815,51.870916,51.455052,48.000000,3.455052,yes,Both,-,"[1.0000005503151308,2.7755590889942139e-17,-1.5407448034045001e-33,8.5528517790561814e-50]",0.00104910922245869653833538759357679737149737775325775146484375,0.0010491092224586968782004774758273759261911295412788923059743654980738407419350006 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,moderate,4099,10322096095657499356,54.578729,52.340848,51.786806,48.000000,3.786806,yes,Both,yes,"[-0.49545345377814692,-1.3751595800363862e-17,7.6336691414512835e-34,-4.2375376216048829e-50]",-0.54326232788789219352310055910493247210979461669921875,-0.54326232788789205368437589517863805325010858337223961824526704311193509051969914 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,boundary,4105,10322096095657499355,55.375335,53.840397,53.427151,48.000000,5.427151,yes,Both,yes,"[-0.5,0,0,0]",-0.54930614433405489105410879346891306340694427490234375,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,near_one,4099,10322096095657499359,54.019854,51.750997,51.093455,48.000000,3.093455,yes,Both,yes,"[0.51751407869686006,1.4363901143423232e-17,-7.9735668864340423e-34,4.4262187728538973e-50]",0.53575539526306104054498291588970459997653961181640625,0.53575539526306126354449913496849026907542658974119733621009662651072178280690274 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,moderate,4099,10322096095657499356,59.546056,52.095594,51.417655,48.000000,3.417655,yes,Both,yes,"[-0.51697425326334745,-1.4348917977784133e-17,7.9652495586968923e-34,-4.4216017284753286e-50]",-0.53528925503141955299923893107916228473186492919921875,-0.53528925503141937503523518533749845780941284936029851836201775604219807148329816 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,near_one,4099,10322096095657499359,54.238757,52.047080,51.413451,48.000000,3.413451,yes,Both,-,"[1.3127470131510215,3.6436048987704181e-17,-2.0226070256259654e-33,1.1227724448092754e-49]",0.06338166370075233591041552472233888693153858184814453125,0.063381663700752357043981488713887430626454842957042886947643364361888596761458652 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,moderate,4099,10322096095657499356,56.954094,51.522059,50.938586,48.000000,2.938586,yes,Both,-,"[4.4724300649764519,1.2413487085406605e-16,-6.8908695890527197e-33,3.82520103872781e-49]",2.532797278373559493889186606889983577328706587650231085717678070068359375e-10,2.5327972783735583201867808196745632452377777984379745134701129911583856224598831e-10 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,lgamma,native,double,native double,bl::lgamma,moderate,4099,10322096095657499287,54.454740,52.093832,51.363446,48.000000,3.363446,yes,Both,-,"[1.1903429521686997,3.3038653817449295e-17,-1.8340137085376015e-33,1.0180821233483081e-49]",-0.0825234979651145172940829297658638097345829010009765625,-0.082523497965114488807540710102364103239432281521113914990549637246092147129738611 +6,3367bd3ec38c41b18c33145d45209071,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,tgamma,native,double,native double,bl::tgamma,moderate,4099,10322096095657499284,53.611781,51.017778,50.584862,48.000000,2.584862,yes,Both,-,"[16.268960066207903,4.5155435130528063e-16,-2.5066301884439958e-32,1.3914592747155096e-48]",2739547473402.04345703125,2739547473402.0450792820033714382601954608901884806869470278424770198729645511427 diff --git a/validation/metrics/data/native/fastmath/3367bd3ec38c41b18c33145d45209071/native_accuracy_run.json b/validation/metrics/data/native/fastmath/3367bd3ec38c41b18c33145d45209071/native_accuracy_run.json new file mode 100644 index 0000000..f7de699 --- /dev/null +++ b/validation/metrics/data/native/fastmath/3367bd3ec38c41b18c33145d45209071/native_accuracy_run.json @@ -0,0 +1,90 @@ +{ + "accuracy_samples": 4096, + "architecture": "x86_64", + "compiler": "ClangCL", + "configuration": { + "build": { + "architecture": "x86_64", + "compiler-id": "Clang", + "compiler-version": "22.1.8", + "config": "Release", + "flags-hash": "47db04c453478949a87df17aee6c905f188a5d962d12b76bf2ba37d99f614ec7", + "frontend-variant": "MSVC", + "optimized": "1", + "processor": "AMD64", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Windows" + }, + "consumer": { + "arm64": "0", + "fast-math": "on", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "1" + }, + "harness": { + "qdpp": "off", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "available", + "simd": "on", + "tu-x86-fma": "0", + "x86": "1" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "0", + "f256-simd": "1", + "msvc-guarded": "0", + "neon": "0", + "runtime-check": "1", + "runtime-path": "1", + "scalar-x86": "0", + "sse2": "1", + "trig-simd": "1", + "wasm-simd": "0" + } + }, + "consumer_mode": "fastmath", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-clangcl-release\\validation\\fltx_accuracy_fastmath.exe", + "sha256": "10a63056d8021ca117fcea276fdd5aa23ffd765928873a5fe6256d81b2d5869c", + "wasm-sha256": "not-present" + } + }, + "host": { + "machine": "AMD64", + "node": "not-used", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "outputs": { + "f32_accuracy.csv": "74589606b242fe627770674416845ca58c69709fa7cf96ec3a5cba87f64e018b", + "f64_accuracy.csv": "42c4145423fb43b9384ce5fde9a6318d57d68d2fcd52e1164e5c2ab5504d8091" + }, + "platform": "windows", + "policy": "native-float-libm-baseline-v1", + "precisions": [ + "f32", + "f64" + ], + "run_id": "3367bd3ec38c41b18c33145d45209071", + "sample_mode": "standard", + "schema_version": 2, + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete", + "target": "windows/x86_64/ClangCL", + "thresholds": "advisory" +} diff --git a/validation/metrics/data/native/fastmath/93be61bd5e944160977414cf0b20521a/f32_accuracy.csv b/validation/metrics/data/native/fastmath/93be61bd5e944160977414cf0b20521a/f32_accuracy.csv new file mode 100644 index 0000000..c663136 --- /dev/null +++ b/validation/metrics/data/native/fastmath/93be61bd5e944160977414cf0b20521a/f32_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,near_one,4099,10322096095657499359,38.457645,24.037482,24.000509,20.000000,4.000509,yes,Both,yes,"[1.1885061456019219,3.2987672193893811e-17,-1.831183659922398e-33,1.0165111307816044e-49] ; [0.81220021471607706,2.2543084474582116e-17,-1.2513925714875483e-33,6.9466242285517913e-50]",2.000706195831298828125,2.00070631504058837890625 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,moderate,4099,10322096095657499356,41.522382,24.071404,24.000368,20.000000,4.000368,yes,Both,yes,"[6.8051724535006084,1.8888147861053107e-16,-1.0485028323932781e-32,5.8203599295385438e-49] ; [1.1968659760618667,3.3219704100358647e-17,-1.8440640181726446e-33,1.0236611659290266e-49]",8.0020389556884765625,8.002038478851318359375 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,wide_exponent,4096,10322096095657499357,46.805352,24.393682,24.006151,20.000000,4.006151,yes,Both,yes,"[6.8663278648288954e-15,1.9057888225395823e-31,-1.0579253154283554e-47,5.8726652176119575e-64] ; [-3.2984332805285199e-15,-9.154991433081627e-32,5.0820411396266402e-48,-2.821099542652883e-64]",3.567894203281192500032403813747805543243885040283203125e-15,3.567894415039429313607488580828430713154375553131103515625e-15 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,extreme_finite,4096,10322096095657499295,47.155091,24.409642,24.030594,20.000000,4.030594,yes,Both,yes,"[223002548.53621882,6.1895640983749784e-09,-3.4358982872045742e-25,1.9073066943623286e-41] ; [279175322748.44623,7.748671780562106e-06,-4.3013769105216293e-22,2.3877438418260673e-38]",279398318080,279398334384 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.77817428112030029296875,-0.77817428112030029296875 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000016689300537,0,0,0]",-1.6689300537109375e-06,-1.6689300537109375e-06 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,near_one,4099,10322096095657499359,26.016181,24.166616,24.014549,20.000000,4.014549,yes,Both,yes,"[1.4059396726628588,3.902266489560654e-17,-2.1661930524667106e-33,1.2024787013157959e-49] ; [1.4325550147665504,3.9761389035901386e-17,-2.2072004799367987e-33,1.2252423963947649e-49]",2.0140857696533203125,2.014085888497646692485432140529155731201171875 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,moderate,4099,10322096095657499356,25.989725,24.178659,24.028212,20.000000,4.028212,yes,Both,yes,"[-1.4739640396494451,-4.0910720357208028e-17,2.2710011847286731e-33,-1.2606589021183906e-49] ; [2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49]",-4.02748775482177734375,-4.0274875194135120182181708514690399169921875 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,wide_exponent,4096,10322096095657499357,25.942256,24.179837,24.024630,20.000000,4.024630,yes,Both,yes,"[-1122057943862.8401,-3.1143364106002161e-05,1.7288039947384127e-21,-9.5967900001126686e-38] ; [-8694665162187.9277,-0.00024132543636168146,1.3396252793822586e-20,-7.4364141477004576e-37]",9755918009047724494684160,9755918580702648912052224 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,extreme_finite,8,10322096095657499292,40.953446,25.906891,25.906891,20.000000,5.906891,yes,Both,yes,"large neighbour [844424863023104,0.023437498137354851,-1.3010425035850288e-18,7.2222367174802835e-35] ; negative small neighbour [-5.5511156525213747e-16,-1.5407441024465825e-32,8.5528478879580846e-49,-4.7477843256638533e-65]",-0.46875,-0.468750007450577044210149324499070644378662109375 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,near_one,4099,10322096095657499359,25.952819,24.167429,24.029610,20.000000,4.029610,yes,Both,yes,"[1.2982596956909869,3.6033945152474569e-17,2.0002857788178657e-33,1.1103816637369289e-49] ; [1.2798202945460211,3.5522148959688557e-17,1.9718753829605394e-33,1.0946107259271694e-49]",1.01440775394439697265625,1.0144078131795243086497270702039165563127339636105403630860948828655528161513261 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,moderate,4099,10322096095657499356,26.239727,24.172640,24.024913,20.000000,4.024913,yes,Both,yes,"[6.5374711177505596,1.8145127394371573e-16,1.0072569108993997e-32,5.5913990709666165e-49] ; [3.2450059050955762,9.0067006772042607e-17,4.99972323386958e-33,2.775403925497677e-49]",2.0146253108978271484375,2.0146254289230677898843256855109580140862879734170743102717224833311181385074994 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,wide_exponent,4096,10322096095657499357,25.917644,24.144253,24.027945,20.000000,4.027945,yes,Both,yes,"[0.027902000922864607,7.7443609644191634e-19,4.2989839268532189e-35,2.3864154690429567e-51] ; [14499.326437201289,4.0243715130342775e-13,2.2339749567081166e-29,1.2401052166866692e-45]",1.924365506056346930563449859619140625e-06,1.9243653935555734717265282397956262784302341636296406554453298274232840831100044e-06 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,extreme_finite,8,10322096095657499292,25.430169,24.584963,24.584963,20.000000,4.584963,yes,Both,yes,"large positive [844424930131968,0.0234375,1.3010426069826053e-18,7.2222372914521344e-35] ; small negative [5.5511151231257827e-16,1.5407439555097887e-32,8.5528470722950261e-49,4.7477838728798994e-65]",1521180780720166262527502581760,1521180720273875281796043846451.2 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,moderate,4099,10322096095657499356,25.971753,24.150757,24.027403,20.000000,4.027403,yes,Both,yes,"[-1.9749460259140985,-5.4815763759044581e-17,3.0428861518852258e-33,-1.6891411335680094e-49] ; [-6.4158772339979464,-1.7807636570882208e-16,9.885224067575198e-33,-5.4874016817003646e-49] ; [3.4130940773098271,9.4732390746028102e-17,-5.2587040692013754e-33,2.9191671686586848e-49]",16.0841045379638671875,16.0841054786133099696598947048187255859375 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; next value after one [1.0000001192092896,0,0,0] ; native product cancellation",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,wide_exponent,4096,10322096095657499357,32.556508,24.197422,24.009758,20.000000,4.009758,yes,Both,yes,"[0.0072982921122313887,2.0256829858598637e-19,-1.124479945746528e-35,6.2421176324852115e-52] ; [1.9523314176984748e-12,5.4188082290698013e-29,-3.0080428309707814e-45,1.6697992050011997e-61] ; [-2.3939769383437016e-07,-6.6446207934270406e-24,3.6885054973828883e-40,-2.0475318648254738e-56]",-2.39397678569730487652122974395751953125e-07,-2.3939769274275411635131445493727566081466591810245070348628360079601407051086426e-07 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",3588998231833025183056134144,3588998231833025183056134144 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fabs,native,float,native float,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,moderate,4099,10322096095657499356,25.964756,24.164418,24.008593,20.000000,4.008593,yes,Both,yes,"[-4.0059402826070123,-1.1118717842559279e-16,6.1721282765599288e-33,-3.4262194617884094e-49]",16.0475597381591796875,16.0475587873306722030974924564361572265625 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,wide_exponent,4096,10322096095657499357,25.989404,24.167423,24.020149,20.000000,4.020149,yes,Both,yes,"[797963256397175.88,0.022147929501425297,-1.2294570640128564e-18,6.8248577012755909e-35]",636745309315666385691207532544,636745346742277146199547969536 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,near_one,4099,10322096095657499359,26.024612,24.188379,24.024049,20.000000,4.024049,yes,Both,yes,"[0.99957607711604157,2.774380939196801e-17,1.5400907988887275e-33,8.5492213246980834e-50]",1.0004241466522216796875,1.0004240880080409757745092099607730518546575501261053598713520202379186199441578 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,wide_exponent,4096,10322096095657499357,25.897082,24.141136,24.016290,20.000000,4.016290,yes,Both,yes,"[1.4835519773135318e-08,4.1176839086041523e-25,2.2857737417304193e-41,1.2688593185763538e-57]",67405800,67405796.027411572915787349932438540624582792272908782750245310659982961460931995 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",-4402.79248046875,-4402.79248046875 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055850982666015625,-7.055850982666015625 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",3588998231833025183056134144,3588998231833025183056134144 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,moderate,4099,10322096095657499356,48.522678,24.128146,24.008521,20.000000,4.008521,yes,Both,yes,"[6.6457375410806137,1.8445627084308674e-16,-1.0239379946324441e-32,5.6839976871472472e-49] ; [2.6220427968328792,7.27763071149101e-17,-4.0398965903082395e-33,2.2425931058324353e-49]",4.0236949920654296875,4.0236947536468505859375 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000016689300537,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,copysign,native,float,native float,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,floor,native,float,native float,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,ceil,native,float,native float,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,trunc,native,float,native float,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round,native,float,native float,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,roundeven,native,float,native float,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_decimals,native,float,native float,bl::round_decimals,moderate,4099,10322096095657499356,26.229396,24.222837,24.047915,20.000000,4.047915,yes,Both,yes,"[4.1022214313758827,1.1385951713060679e-16,-6.3204728745551046e-33,3.5085672559249129e-49]",4.10200023651123046875,4.102 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_significant,native,float,native float,bl::round_significant,wide_exponent,4096,10322096095657499357,26.031860,24.190158,24.023953,20.000000,4.023953,yes,Both,yes,"[259.8694582017871,7.2128263973122191e-15,-4.0039229694600715e-31,2.2226237347600494e-47]",259.869384765625,259.8694 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,lround,native,float,native float,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,llround,native,float,native float,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remquo,native,float,native float,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.944149017333984375 ; 1,-0.944149017333984375 ; 1 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0 ; 3588998231833025183056134144,0 ; 3588998231833025183056134144 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ldexp,native,float,native float,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbn,native,float,native float,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbln,native,float,native float,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0.724792420864105224609375 ; 92,0.724792420864105224609375 ; 92 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,-,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,near_one,4099,10322096095657499359,25.904846,24.145989,24.002397,20.000000,4.002397,yes,Both,yes,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",1.00001394748687744140625,1.0000140069934242844029017485374012760134473363250144717592753776502313379618068 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,wide_exponent,4096,10322096095657499357,25.966753,24.215195,24.033944,20.000000,4.033944,yes,Both,yes,"[8.4482670931604627e+31,2344865161252447,0.13016616458319236,7.2256736473703873e-18]",9191445835546624,9191445300433280.2040066177032811142195637421096986523537003168905974560430072948 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,extreme_finite,4096,10322096095657499295,25.972131,24.206633,24.003202,20.000000,4.003202,yes,Both,yes,"[3.2519120367544908e+32,9025869043151310,0.50103638144790075,2.7813106342916602e-17]",18033057994899456,18033059067370500.361343159063133250828533418772371371727970165496211972696634283 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,subnormal,4100,10322096095657499290,27.589271,24.195086,24.031452,20.000000,4.031452,yes,Both,yes,"[1.8779781629341901e-40,0,0,0]",1.370393513549582123487035494914521027709497502655722200870513916015625e-20,1.3703934336292589277694998548128719273180184126519025205252581878215739867341933e-20 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,moderate,4099,10322096095657499356,25.612822,23.399203,22.959143,20.000000,2.959143,yes,Both,yes,"[-1.3107925921174228,-3.6381802906921357e-17,2.0195957632319271e-33,-1.1211008583877508e-49]",-1.0944049358367919921875,-1.0944048016260133167401477577509673709480743051163502096548202710331859650845724 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,wide_exponent,4096,10322096095657499357,25.485859,23.259136,22.884042,20.000000,2.884042,yes,Both,yes,"[0.13220588448365292,3.6694504236171299e-18,-2.0369541740101359e-34,1.1307367120461853e-50]",0.50942885875701904296875,0.50942892456832680642725488647785089467768581077622050151162156924742112505750114 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,moderate,4099,10322096095657499356,25.856040,23.678531,23.290258,20.000000,3.290258,yes,Both,yes,"[-4.0306514937478397,-1.118730523149658e-16,6.2102019257584848e-33,-3.4473545827742784e-49] ; [-2.2104277053726928,-6.1351693319352886e-17,3.4057031261443485e-33,-1.8905450128416648e-49]",4.5969715118408203125,4.5969710637092377047543434259916048511551894991606684689004135731001292217488477 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,wide_exponent,4096,10322096095657499357,26.811332,0.000000,0.000000,20.000000,-20.000000,no,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",inf,3588998231833025183056134144.000000000000000000002700556028996954107080842659447 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,moderate,4099,10322096095657499356,26.149035,24.214150,24.040329,20.000000,4.040329,yes,Both,yes,"[-5.7483236179995885,-1.5954803084249315e-16,8.8566948687470254e-33,-4.9164532826812132e-49]",0.509722173213958740234375,0.5097222027582440476609190572223045086789238470780369932414545068400613217789304 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,argument_reduction,4111,10322096095657499282,26.207700,24.232934,24.054458,20.000000,4.054458,yes,Both,yes,"near 2^94 * pi/2 [3.1112832252188646e+28,0,0,0]",-0.031775273382663726806640625,-0.031775275206458036754431969895458660655905161590001855338797800351243967744526865 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,moderate,4099,10322096095657499356,26.060912,24.256137,24.035729,20.000000,4.035729,yes,Both,-,"[4.4588502387206184,1.2375795495957516e-16,-6.8699465538321711e-33,3.8135864210043619e-49]",-0.25083100795745849609375,-0.25083099337247927050646438955413445736165895666786844698074070181158501850594916 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,argument_reduction,4111,10322096095657499282,26.627755,24.245703,24.076319,20.000000,4.076319,yes,Both,-,"near 2^70 * pi/2 [1.8544669218107189e+21,0,0,0]",-0.5190365314483642578125,-0.51903650210542794358474489503209069334133171874228756988100493423128724002299192 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,moderate,4099,10322096095657499356,25.924307,24.163895,24.015719,20.000000,4.015719,yes,Both,yes,"[-6.036496878364936,-1.6754644556096587e-16,9.3006960777944832e-33,-5.1629234653041607e-49]",0.2518171370029449462890625,0.25181715184977206019891708487262388659629088175425587483011094843357962067832389 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,argument_reduction,4111,10322096095657499282,25.898518,24.161857,24.046469,18.000000,6.046469,yes,Both,yes,"near 2^28 * pi/2 [-421657632,0,0,0]",0.507759034633636474609375,0.50775906393914719153658437245770373295759245731279909404632772755040921670373447 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,near_one,4099,10322096095657499359,26.067892,24.219203,24.021836,20.000000,4.021836,yes,Both,yes,"[0.55072017619471925,1.5285555493425008e-17,-8.4851878264929949e-34,4.7102254466208054e-50]",0.503395974636077880859375,0.5033959450820623349182906770633407385222001692931760800454776223514541494398828 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,moderate,4099,10322096095657499356,25.911836,24.243607,24.056379,20.000000,4.056379,yes,Both,yes,"[1.6967153744323316,4.7093311873256703e-17,-2.6142039573771427e-33,1.4511747122731526e-49]",1.03822672367095947265625,1.0382266641595175302821692627692631092810194067716353711556189103095518619306749 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,near_one,4099,10322096095657499359,25.920195,24.158254,24.013805,20.000000,4.013805,yes,Both,yes,"[1.3550416411741315,3.7609960733934508e-17,-2.0877722181031071e-33,1.1589463933554018e-49] ; [0.85964036308882719,2.3859813099958637e-17,-1.3244856933413505e-33,7.3523725626709088e-50]",1.005465030670166015625,1.0054649713105136693080409087559014886644835427733168442408504661900474402910144 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,moderate,4099,10322096095657499356,25.938612,24.172853,24.023930,20.000000,4.023930,yes,Both,yes,"[-1.5221127970798687,-4.2247116834866724e-17,2.3451860917049052e-33,-1.3018397980207348e-49] ; [-0.70678002618891433,-1.9617086460502596e-17,1.0889670532256199e-33,-6.0449814777464578e-50]",-2.005512237548828125,-2.005512355120225239725146453473468772246503385569443728906464376660394150359798 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,extreme_finite,8,10322096095657499293,32.824184,25.098912,25.098912,20.000000,5.098912,yes,Both,yes,"huge positive [3.1901471898837981e+37,8.8544371553805848e+20,-49152,2.7284841053187847e-12] ; tiny negative [-1.4693679385278594e-38,-4.0783152924990778e-55,2.2639197697066781e-71,-1.256727927116218e-87]",1.57079637050628662109375,1.5707963267948966192313216916397514420985846996875529104874722961539082031435651 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,moderate,4099,10322096095657499356,25.877130,23.894387,23.461405,20.000000,3.461405,yes,Both,yes,"[0.50525718509116591,1.4023704006137669e-17,-7.7847195390710439e-34,4.3213874362630044e-50]",0.5296800136566162109375,0.52967996779738378444136497299823480300062150306901044995137540581814602542442563 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,boundary,4105,10322096095657499355,24.992759,24.113237,24.113237,20.000000,4.113237,yes,Both,yes,"[0.99999910479106313,2.7755550768589574e-17,-1.5407425762220303e-33,8.5528394157098913e-50]",1.5694591999053955078125,1.5694591134201073494139739317636003811920117017421147249498608268896329577376014 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,moderate,4099,10322096095657499356,25.920877,24.113823,23.808727,20.000000,3.808727,yes,Both,-,"[-0.61518495487317537,-1.707481253257968e-17,9.4784250074140707e-34,-5.2615828402069857e-50]",2.233417034149169921875,2.2334168821543518003502700866744511755619367949446568069567781212742346589702698 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,boundary,4105,10322096095657499355,25.983148,24.584962,24.584962,20.000000,4.584962,yes,Both,-,"[0.9999995073211686,2.7755561941044354e-17,-1.5407431964178572e-33,8.5528428584883254e-50]",0.0009765625,0.00097656253880511143898187133876924251895712227894022748398387476387013216099532872 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,moderate,4099,10322096095657499356,25.945177,24.173984,24.007691,20.000000,4.007691,yes,Both,-,"[0.69706560262123496,1.9347457042607623e-17,-1.0739996138324561e-33,5.9618954985765975e-50]",2.007852077484130859375,2.0078521965251381745368245393757138670217404209691449932482836198723071521808851 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,boundary,4099,10322096095657499289,25.985101,24.189213,24.012647,20.000000,4.012647,yes,Both,-,"[-55.445402102948194,-1.538919050607329e-15,8.5427168150927155e-32,-4.7421604504842094e-48]",8.32470122137760864279645685032325255932328378349893682752735912799835205078125e-25,8.3247007295174246704446931992286856723729842657502269685404369668574123561739996e-25 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,moderate,4099,10322096095657499356,25.945545,24.176633,24.015565,20.000000,4.015565,yes,Both,-,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",16.047374725341796875,16.047373779108025107147981190408654763758177217950870805754027309567667903729689 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,boundary,4099,10322096095657499289,25.953108,24.184447,24.013981,20.000000,4.013981,yes,Both,-,"[12.008718688899336,3.3330889961656162e-16,-1.8502360733339086e-32,1.0270873448036725e-48]",4120.82763671875,4120.8278799704215331782631104353597855518360018117915418683951931281930912686669 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,moderate,4099,10322096095657499356,25.980116,23.586262,22.527963,20.000000,2.527963,yes,Both,yes,"[0.34057363208584057,9.4528171980479295e-18,-5.2473676504227349e-34,2.9128741920862649e-50]",0.4057538211345672607421875,0.40575375404270745997458287046382846533769495983882253541892972745121909455076655 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,cancellation,4098,10322096095657499288,46.577665,23.566651,22.781883,20.000000,2.781883,yes,Both,yes,"[0.00067049614153802395,0,0,0]",0.0006707208813168108463287353515625,0.00067072097432296308285210370663059393442257906709442662111659198408734521169141739 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,near_one,4099,10322096095657499359,25.915814,24.153165,23.953904,20.000000,3.953904,yes,Both,-,"[0.93845537367659526,2.6047369085974028e-17,1.4459194445078942e-33,8.0264652952294025e-50]",-0.06351993978023529052734375,-0.063519943689242454447435124366623484973123162314765713955967040355554375738192851 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,wide_exponent,4096,10322096095657499357,25.934124,24.148103,24.055764,20.000000,4.055764,yes,Both,-,"[3.2617843787809539e-29,9.0532702967131949e-46,5.0255745657830058e-62,2.7897542974514332e-78]",-65.59268951416015625,-65.59269327555488150776766062278388871045172786432349789542906836393403051939105 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,extreme_finite,4096,10322096095657499295,25.928931,24.171772,24.028998,20.000000,4.028998,yes,Both,-,"[1.925072119386236e+28,534314847751.63684,2.9660432318647614e-05,1.6464847440249349e-21]",65.12734222412109375,65.127346028765523545207426082299833753247218536882252197810633399468572469932133 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,near_one,4099,10322096095657499359,25.997641,24.168133,23.675086,20.000000,3.675086,yes,Both,-,"[1.0239856815956481,2.8421312014849322e-17,1.5776997494470658e-33,8.7579929389073653e-50]",0.0341954641044139862060546875,0.034195461551375619696170753702097836731645774772968144626738312328832836284482893 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,wide_exponent,4096,10322096095657499357,25.972931,24.199454,24.028872,20.000000,4.028872,yes,Both,-,"[279.54938708294071,7.7590541514832776e-15,4.307140284145071e-31,2.3909431568741984e-47]",8.1269588470458984375,8.1269593218526276965603717987343564084569415244724976083039632724987237766261338 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,extreme_finite,4096,10322096095657499295,26.022657,24.191270,24.003063,20.000000,4.003063,yes,Both,-,"[5.0098439803322917e-20,1.3905110341861625e-36,7.7188868307440791e-53,4.2848429419839901e-69]",-64.113800048828125,-64.113796235451863124774831376509181438042251966024731816806674549792684463109039 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,near_one,4099,10322096095657499359,25.962169,24.152799,23.987576,20.000000,3.987576,yes,Both,-,"[1.1548157158417363,3.2052574923161943e-17,1.7792753339108649e-33,9.8769622142772787e-50]",0.0625126659870147705078125,0.062512669745286719885701932573165067686690137111581665627621599315275165176273273 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,wide_exponent,4096,10322096095657499357,25.952914,24.154037,24.048450,20.000000,4.048450,yes,Both,-,"[23432401020772320,0.65037977838778627,3.6103330235836354e-17,2.0041374246735552e-33]",16.3698177337646484375,16.369816790271109973117205087238363001448077217226902449637697819144005794863329 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,extreme_finite,4096,10322096095657499295,25.880532,24.163613,24.027658,20.000000,4.027658,yes,Both,-,"[4.8264741762657366e-33,1.3396156895622393e-49,7.4363609135055201e-66,4.1280095527981953e-82]",-32.316371917724609375,-32.316370028094117653165372508074257172256480666024940344680625927328493584980905 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,moderate,4099,10322096095657499356,25.852828,23.555276,23.169104,20.000000,3.169104,yes,Both,yes,"[0.6489272591876778,1.8011349611426414e-17,-9.9983075215894855e-34,5.5501756088757656e-50]",0.500124990940093994140625,0.50012493791477858658519920495659102199166970636399639754750147511225772771010193 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,cancellation,4098,10322096095657499288,46.640460,23.927588,22.843491,20.000000,2.843491,yes,Both,yes,"[-3.0161881880985675e-08,0,0,0]",-3.016187832827199599705636501312255859375e-08,-3.0161882335855243245304754558762072997310887274723990939098277461580018360871778e-08 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,near_one,4099,10322096095657499359,25.935116,24.183020,24.022132,20.000000,4.022132,yes,Both,yes,"[1.0032222542802387,2.7845011137956863e-17,1.545708624315182e-33,8.5804065203819558e-50] ; [1.1098483278340112,3.0804479185076206e-17,1.7099921026428991e-33,9.4923630214066531e-50]",1.00357687473297119140625,1.0035768158257674189368635854208332740856335659539134346018913304416269618692691 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,moderate,4099,10322096095657499356,25.910732,24.173665,24.033763,20.000000,4.033763,yes,Both,yes,"[1.5010856767109688,4.1663497005488793e-17,2.312788683094746e-33,1.2838556235321408e-49] ; [6.8472618406345225,1.900496937777419e-16,1.054987729275047e-32,5.8563583386908427e-49]",16.1396617889404296875,16.139662728687068635103760006664480606823689561120066764019143935355322552829973 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,moderate,4099,10322096095657499356,24.296761,22.240676,21.817420,20.000000,1.817420,yes,Both,yes,"[-2.0174902967783854,-5.5996604486030095e-17,3.108435980060947e-33,-1.7255285978184637e-49]",-136.0443267822265625,-136.04428997082654660356838684633834963763840941785070423709212066151322168144796 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,wide_exponent,4096,10322096095657499357,24.307980,22.194400,21.763685,20.000000,1.763685,yes,Both,yes,"[8.3253759191734602,2.3107560085315504e-16,-1.282727262481326e-32,7.1205667056058241e-49]",2772213.75,2772214.528582891558413966128826065404980229940407596127199381800655092889207728 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[30287485871.102478,8.4064660430267718e-07,4.666526078348927e-23,2.590442348598358e-39] ; [2.0009290447377264e-12,5.5536937402726095e-29,3.0829193310836276e-45,1.7113640122155147e-61]",1.12052207790203084414315526373684406280517578125e-12,1.12052207790203084414315526373684406280517578125e-12 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remainder,native,float,native float,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,near_one,4099,10322096095657499359,25.942025,24.196051,24.011707,20.000000,4.011707,yes,Both,yes,"[1.4459245913717083,4.0132469330314787e-17,-2.2277995742789206e-33,1.2366771908072897e-49]",2.0051238536834716796875,2.0051239722322748219797119221081131107158513029013343848994792963571293595758708 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,moderate,4099,10322096095657499356,25.936329,24.161474,24.011590,20.000000,4.011590,yes,Both,yes,"[-6.9355339383837169,-1.9249973666156986e-16,1.0685881993797711e-32,-5.9318561139707965e-49]",-514.08355712890625,-514.08358752550603806804367819424003815790834626890985544825401905207447930345975 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,near_one,4099,10322096095657499359,25.882807,24.206821,24.037830,20.000000,4.037830,yes,Both,-,"[1.3363709947474058,3.7091746195244852e-17,-2.0590055324756691e-33,1.1429776749925342e-49]",2.03400325775146484375,2.0340033758498468053419313401516481710439729679668859465095831820284475316728875 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,moderate,4099,10322096095657499356,25.970199,24.157896,24.042107,20.000000,4.042107,yes,Both,-,"[-2.0865014257806518,-5.791204809537242e-17,3.2147644599340952e-33,-1.7845527610827445e-49]",4.09039974212646484375,4.0903995053326148905358860858142744104816455202766888280678248016451416423900309 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,near_one,4099,10322096095657499359,25.960144,23.951896,23.585735,20.000000,3.585735,yes,Both,yes,"[0.88614226956034992,2.4595388768987312e-17,-1.3653183455468349e-33,7.5790393158461086e-50]",0.70948302745819091796875,0.70948308381265723135205564231795018723276975370790990618793629403010330001580195 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,moderate,4099,10322096095657499356,26.364861,24.367323,23.664024,20.000000,3.664024,yes,Both,yes,"[0.98775382689116853,2.741567603190466e-17,-1.5218757383142301e-33,8.4481074264743387e-50]",0.7564029693603515625,0.75640291245249735018763313924583594579849914862813856260689384074903424534412451 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,near_one,4099,10322096095657499359,25.557868,23.335878,22.898759,20.000000,2.898759,yes,Both,yes,"[0.57890999870085935,1.6067980243585338e-17,-8.9195208128252867e-34,4.9513286875109623e-50]",0.550656378269195556640625,0.55065644868454699918532056874039300539183901870314239434476919100760017958369078 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,moderate,4099,10322096095657499356,25.758179,23.643520,23.178168,20.000000,3.178168,yes,Both,yes,"[-0.71131392647961711,-1.9742927472854918e-17,1.0959526326934043e-33,-6.0837592335738726e-50]",-0.661910712718963623046875,-0.66191064298001016538523218063742045913680409778040236139504261769759961805182207 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,moderate,4099,10322096095657499286,25.987251,23.739051,23.010583,20.000000,3.010583,yes,Both,-,"[1.2554365019814742,3.4845362761367464e-17,-1.9343062019543092e-33,1.073755641042456e-49]",0.700352489948272705078125,0.70035257282658160606822099851014095184653107534774288487363940920358700564424369 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,boundary,4101,10322096095657499355,25.658763,23.793907,23.793907,20.000000,3.793907,yes,Both,-,"[1.9999994915125949,5.5511137117897206e-17,-3.0814871275706815e-33,1.7105689795575038e-49]",1.3169577121734619140625,1.3169576216227113023399862811927493515571819731899743868099047486919155844722929 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,moderate,4099,10322096095657499356,25.561446,23.249029,22.606628,20.000000,2.606628,yes,Both,yes,"[-0.13966164066443998,-3.8763892280646578e-18,2.15182828670316e-34,-1.1945046544687754e-50]",-0.14058049023151397705078125,-0.14058046821990765766624665138807069884802640321892146574846765659067668817307699 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,boundary,4105,10322096095657499355,26.088438,25.637514,25.637514,20.000000,5.637514,yes,Both,yes,"[0.99899949151259504,2.7727805926652667e-17,-1.5392024281053832e-33,8.5442898762077182e-50]",3.7999393939971923828125,3.7999393211997930734222062320257072616372641916906079170097936373745998626952477 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,near_one,4099,10322096095657499359,24.857511,22.598092,22.085996,20.000000,2.085996,yes,Both,yes,"[0.53604224621822094,1.4878161098081403e-17,-8.259038507586138e-34,4.5846873561939605e-50]",0.551595985889434814453125,0.55159586198878604402024477717780943885722591386846885979528200458339895826755766 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,moderate,4099,10322096095657499356,36.747937,22.921316,22.304962,20.000000,2.304962,yes,Both,yes,"[-0.24896518890527197,-6.9101721263196129e-18,3.8359160993815049e-34,-2.1293611870318335e-50]",-0.2752292454242706298828125,-0.2752291923074717000217600512613630869391188036657604244357750914377283598292848 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,near_one,4099,10322096095657499359,25.245567,22.988275,22.581085,20.000000,2.581085,yes,Both,-,"[0.97201166685381302,2.6978743318634508e-17,-1.4976211003900068e-33,8.3134671390872429e-50]",0.16924555599689483642578125,0.16924552902364932725242710149144848803577038425156278163465453073213314786810873 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,moderate,4099,10322096095657499356,31.106913,22.475584,21.855256,20.000000,1.855256,yes,Both,-,"[1.6346453250862929,4.537052192516691e-17,-2.5185699040290393e-33,1.3980871482905051e-49]",0.0207921527326107025146484375,0.020792147252217579097299115967243302029187028434209797344924817170102319462039264 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,lgamma,native,float,native float,bl::lgamma,moderate,4099,10322096095657499287,25.215770,22.768927,22.134517,20.000000,2.134517,yes,Both,-,"[1.6354152637709984,4.5391892016549652e-17,-2.5197561824036125e-33,1.3987456650730382e-49]",-0.107594527304172515869140625,-0.1075945506729870651185251078111303116984586515628732861915874500496795356566364 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,tgamma,native,float,native float,bl::tgamma,moderate,4099,10322096095657499284,24.655427,22.096602,21.497773,20.000000,1.497773,yes,Both,-,"[19.230534417261044,5.3375455214724321e-16,-2.962932966461791e-32,1.6447581998933986e-48]",12563186288951296,12563190531484946.097539947606450335009162437627518611106355880665925445522889534 diff --git a/validation/metrics/data/native/fastmath/93be61bd5e944160977414cf0b20521a/f64_accuracy.csv b/validation/metrics/data/native/fastmath/93be61bd5e944160977414cf0b20521a/f64_accuracy.csv new file mode 100644 index 0000000..4277a9e --- /dev/null +++ b/validation/metrics/data/native/fastmath/93be61bd5e944160977414cf0b20521a/f64_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,near_one,4099,10322096095657499359,68.804804,53.029455,53.001693,48.000000,5.001693,yes,Both,yes,"[1.4297151598371682,3.9682567227671501e-17,-2.2028249906198284e-33,1.222813511902914e-49] ; [0.57263374255596289,1.5893779141572608e-17,-8.8228197756404827e-34,4.8976488285171109e-50]",2.00234890239313134685517070465721189975738525390625,2.0023489023931311248105657796259038150310516357421875 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-15.0558510431143677266163649619556963443756103515625,-15.0558510431143677266163649619556963443756103515625 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,wide_exponent,4096,10322096095657499357,82.842054,53.932557,53.150426,48.000000,5.150426,yes,Both,yes,"[-2.5801269239800948e-52,-7.1612907936449556e-69,3.9753149625703952e-85,-2.2067431007912725e-101] ; [6.2882455610389305e-52,1.745338751590589e-68,-9.6885763389319921e-85,5.3782402636604011e-101]",3.7081186370588353126400687774493756982129860731379218490790094277487448813887287e-52,3.7081186370588356835606838461915142713865122279018731858354873035278451266926346e-52 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,extreme_finite,4096,10322096095657499295,83.051539,53.922063,53.033213,48.000000,5.033213,yes,Both,yes,"[4.044152691012953e+59,1.1224778581655917e+43,-6.2310038138368535e+26,34589019503.244186] ; [-3.2763861007278913e+51,-9.0937982164748556e+34,5.0480720806127841e+18,-280.22429269318661]",404415265824909244971463481926668921988920568307135488720896,404415265824909201094180361492905708699283935084133453135872 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [2.2250738585072014e-308,0,0,0]",2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308,2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.7781742597549925477551369112916290760040283203125,-0.7781742597549925477551369112916290760040283203125 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",-9.65894031423886190168559551239013671875e-14,-9.65894031423886190168559551239013671875e-14 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [2.2250738585072014e-308,0,0,0]",-2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308,-2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,near_one,4099,10322096095657499359,54.941335,53.192655,53.017782,48.000000,5.017782,yes,Both,yes,"[0.61590653178072707,1.7094840314999723e-17,-9.489542660001528e-34,5.267754377148175e-50] ; [0.81645463695581544,2.2661168412757988e-17,-1.2579475468376116e-33,6.9830116513492445e-50]",0.50285974380374887093836377971456386148929595947265625,0.50285974380374892608309676348753773569247609448642907343737535469374577701273665 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,moderate,4099,10322096095657499356,54.943506,53.177920,53.014990,48.000000,5.014990,yes,Both,yes,"[-1.8309845685969375,-5.0820030644741984e-17,2.8210784066974295e-33,-1.5660131006941688e-49] ; [4.4139715148669616,1.2251232014612206e-16,-6.8007999313236564e-33,3.7752023348123534e-49]",-8.0819137299478551739184695179574191570281982421875,-8.0819137299478542859205922880040108996859918106071002798056202021115268507855944 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,wide_exponent,4096,10322096095657499357,54.949502,53.147252,53.012976,48.000000,5.012976,yes,Both,yes,"[-9580440436661.9609,-0.00026591063897079994,1.4761005693908477e-20,-8.1940041940001134e-37] ; [3.5476231799149722e+112,9.8466323425887909e+95,-5.465978970880409e+79,3.0342278527941741e+63]",-3.3987792566896694596919030454680074525269527091652711616914422309578532569280119e+125,-3.3987792566896690857302928923045025855537603060392874444605126408265807925080287e+125 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,extreme_finite,8,10322096095657499292,69.953445,54.906891,54.906891,48.000000,6.906891,yes,Both,yes,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,-2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [-2.4203699467808244e-121,-6.7178761075670899e-138,3.729170365600104e-154,-2.0701054013195242e-170]",-0.46875,-0.46875000000000001387778780781444442934375177282579434799116745646516135614945142 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,near_one,4099,10322096095657499359,54.949938,53.186535,53.032508,48.000000,5.032508,yes,Both,yes,"[0.79583533097289294,2.2088867706407193e-17,1.2261784757776169e-33,6.8066578805404505e-50] ; [0.78671878189697564,2.1835832639176979e-17,1.212132207893789e-33,6.7286854304670572e-50]",1.01158806588287486505350898369215428829193115234375,1.0115880658828749748599930078884108617347838241152708567193976201713984484334261 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,moderate,4099,10322096095657499356,55.299598,53.162157,53.017700,48.000000,5.017700,yes,Both,yes,"[5.6982279612785671,1.5815759705435825e-16,8.7795102884568185e-33,4.8736072335891048e-49] ; [5.6630083746783413,1.571800571553245e-16,8.725245923286967e-33,4.8434844597749865e-49]",1.0062192361850825772506823341245763003826141357421875,1.0062192361850826876012316258994293315599871850773075711644181221348221597609452 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,wide_exponent,4096,10322096095657499357,54.940111,53.173252,53.006391,48.000000,5.006391,yes,Both,yes,"[1.1797107595829603e-08,3.2743551192175876e-25,1.8176322220773076e-41,1.0089885716254063e-57] ; [2.9273558682385512e-68,8.1250447154750139e-85,4.5103058596146572e-101,2.5037227067229757e-117]",402995335272583736023300876476329416171344205099568646324224,402995335272583691479603215316671542832621087480350248383875.97791882737549902199 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,extreme_finite,8,10322096095657499292,54.565310,53.447459,53.447459,48.000000,5.447459,yes,Both,yes,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [2.4203699467808244e-121,6.7178761075670899e-138,3.729170365600104e-154,2.0701054013195242e-170]",8.0016173194558218715832353057948522675740813308632367068153019530691147107160091e+240,8.0016173194558225230457526744094465773333433188328184012700026520990852868662071e+240 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,moderate,4099,10322096095657499356,54.957904,53.175116,53.010971,48.000000,5.010971,yes,Both,yes,"[-2.0766790938067476,-5.7639423617548914e-17,3.1996307613162919e-33,-1.7761518707561329e-49] ; [1.7605984240305848,4.8866422686937992e-17,-2.7126313799051833e-33,1.5058129076457224e-49] ; [-0.3659974929680736,-1.0158471091205978e-17,5.6390842502229579e-34,-3.1303205861993077e-50]",-4.02219543274149682332563315867446362972259521484375,-4.0221954327414963801553326667348806266375851488013985258768850927779681114770938 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; next value after one [1.0000000000000002,0,0,0] ; native product cancellation",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,wide_exponent,4096,10322096095657499357,67.731490,53.261032,53.076165,48.000000,5.076165,yes,Both,yes,"[9.3280228061672898e+101,2.5890464234088722e+85,-1.4372094755459709e+69,7.9781152548029138e+52] ; [-1.157500052342858e+78,-3.212708022789662e+61,1.7834112091495225e+45,-9.8999209338619524e+28] ; [1.8812092993044754e+65,5.2214046955669652e+48,-2.8984618569521754e+32,16089695447930460]",-1.0797186886394012091182337394342607583764140817913341512476728655410802178495674e+180,-1.0797186886394010954097576163349944382733983701060212581740083991443274190535586e+180 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fabs,native,double,native double,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,moderate,4099,10322096095657499356,54.987841,53.178902,53.024599,48.000000,5.024599,yes,Both,yes,"[-4.0291701907573039,-1.1183193789780232e-16,6.2079196171295382e-33,-3.4460876469796998e-49]",16.234212426087250236150794080458581447601318359375,16.234212426087248464261717100553537863564519292427420360394943465998096598923439 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,wide_exponent,4096,10322096095657499357,54.966048,53.184279,53.034276,48.000000,5.034276,yes,Both,yes,"[2.9507000691330746e-25,8.1898378887864514e-42,-4.5462732960391003e-58,2.5236886447505548e-74]",8.7066308979819320541420161769186049656218085566280656265540977462941222974600937e-50,8.7066308979819311102069574980521020700209525169860268542733130882306736168377202e-50 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,near_one,4099,10322096095657499359,55.022120,53.212652,53.036371,48.000000,5.036371,yes,Both,yes,"[0.9803714880397002,2.7210774967692536e-17,1.5105014443513052e-33,8.384967411241868e-50]",1.02002150429685389809719708864577114582061767578125,1.0200215042968537876713460424605364405111022006296562878115184748990877637517355 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,wide_exponent,4096,10322096095657499357,54.902665,53.142478,53.019012,48.000000,5.019012,yes,Both,yes,"[5.654455339035485e-101,1.5694266272779603e-117,8.7120678853189764e-134,4.8361691791892627e-150]",1.7685169305282301591156520034137992060834685455134402926455624168717720163565455e+100,1.7685169305282303528900122951557431771119667320589594598759928180992244301081954e+100 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166,-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143677266163649619556963443756103515625,-7.0558510431143677266163649619556963443756103515625 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,copysign,native,double,native double,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,floor,native,double,native double,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,ceil,native,double,native double,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,trunc,native,double,native double,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round,native,double,native double,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,roundeven,native,double,native double,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_decimals,native,double,native double,bl::round_decimals,moderate,4099,10322096095657499356,55.241937,53.207435,53.013030,48.000000,5.013030,yes,Both,yes,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",4.0039999999999995594635038287378847599029541015625,4.004 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_significant,native,double,native double,bl::round_significant,wide_exponent,4096,10322096095657499357,62.492824,53.239040,53.008690,48.000000,5.008690,yes,Both,yes,"[1.4846549805182609e+20,4120.7453574894662,-2.2874731872510136e-13,1.2698027003493837e-29]",148465500000000016384,148465500000000000000 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,lround,native,double,native double,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,llround,native,double,native double,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remquo,native,double,native double,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.9441489568856322733836350380443036556243896484375 ; 1,-0.9441489568856322733836350380443036556243896484375 ; 1 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ldexp,native,double,native double,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbn,native,double,native double,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbln,native,double,native double,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.7247924004236494521791200895677320659160614013671875 ; -815,0.7247924004236494521791200895677320659160614013671875 ; -815 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,near_one,4099,10322096095657499359,54.920710,53.127507,53.001106,48.000000,5.001106,yes,Both,yes,"[1.0010388911274162,2.7784410636872319e-17,1.5423446207347879e-33,8.5617325492325808e-50]",1.0005193107218952608405970750027336180210113525390625,1.0005193107218951498457515954360620198623563387038363607072361122298411008899428 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,wide_exponent,4096,10322096095657499357,55.009451,53.211448,53.027507,48.000000,5.027507,yes,Both,yes,"[6.0219100959119555e-185,1.6714158101760344e-201,9.2782215808997173e-218,5.1504476133444428e-234]",7.7600967106808367478172926221258513837894764415588410983624981464748121495074265e-93,7.7600967106808375930900190108944118736382926995509918646504739659308953242516058e-93 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,extreme_finite,4096,10322096095657499295,54.924178,53.221411,53.017887,48.000000,5.017887,yes,Both,yes,"[2.3783259304591718e+282,6.6011805201470536e+265,3.664391301587163e+249,2.0341457971291071e+233]",1.542182197556168240060235866024934642345121301250108457830389998905645354877265e+141,1.5421821975561680709533351179752169384434445730363281277866248379626469712289668e+141 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,subnormal,4100,10322096095657499290,56.222608,53.192031,53.028655,48.000000,5.028655,yes,Both,yes,"[1.3924978593053044e-312,0,0,0]",1.1800414650787929320982458320284728300669497402903960639237252491051024255975799e-156,1.1800414650787930605326941577347439698813910767655579114793014150350187021874733e-156 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,moderate,4099,10322096095657499356,54.622083,52.468769,52.153023,48.000000,4.153023,yes,Both,yes,"[1.4533648333973588,4.033897753045631e-17,-2.2392630822074716e-33,1.2430407160299148e-49]",1.132726034706547313390956333023495972156524658203125,1.1327260347065475395950816870103535936661188861328342251597491513525714564878517 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,wide_exponent,4096,10322096095657499357,54.524419,52.302376,51.828370,48.000000,3.828370,yes,Both,yes,"[1.2341102646685055e-66,3.4253440769030517e-83,-1.9014479307205854e-99,1.0555156364059267e-115]",1.0726334135393147944540533616877040596517305799361325444193308170648393229384965e-22,1.0726334135393145261932376031478166833239128206765371006626749066582454186154407e-22 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,moderate,4099,10322096095657499356,54.875942,52.699142,52.296238,48.000000,4.296238,yes,Both,yes,"[-6.832833876256192,-1.8964923732145955e-16,1.0527647493844247e-32,-5.8440183214016046e-49] ; [4.4299110555054249,1.2295473127159131e-16,-6.8253586822159713e-33,3.7888351801606942e-49]",8.1432015043349768035341185168363153934478759765625,8.1432015043349753310215069499059937406110597175203571183027746754807131183654083 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,wide_exponent,4096,10322096095657499357,83.835524,53.981284,52.722096,48.000000,4.722096,yes,Both,yes,"[3.0900587929049188e-234,8.5766360483211479e-251,-4.7609894073381275e-267,2.6428800300116337e-283] ; [2.970069684721122e-242,8.2435993717964229e-259,-4.5761169141769325e-275,2.540255180747926e-291]",3.0900587929049193702454679907420486743297512979591235842153811313882487753757378e-234,3.0900587929049189543018606534397317978098396795986767283237714870956245237140656e-234 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,moderate,4099,10322096095657499356,55.113078,53.212981,52.982939,48.000000,4.982939,yes,Both,yes,"[-5.7279546273043369,-1.5898267778103705e-16,8.8253114694534815e-33,-4.8990319964378645e-49]",0.52713934110892768369893701674300245940685272216796875,0.52713934110892774291936789618839698785354771358638292015523278457552217658095189 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,argument_reduction,4114,10322096095657499282,55.226584,53.204656,53.024608,48.000000,5.024608,yes,Both,yes,"near 2^103 * pi/2 [1.5929767251982753e+31,0,0,0]",0.53627726761951810541262375409132800996303558349609375,0.53627726761951816394442418574940086586529943280164825512056702720586559068997775 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,moderate,4099,10322096095657499356,55.056788,53.175990,52.886447,48.000000,4.886447,yes,Both,-,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",0.5080030849914536350553362353821285068988800048828125,0.50800308499145369607356162136795610710790846414906949175872788247360372736565953 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,argument_reduction,4114,10322096095657499282,57.678400,53.190606,52.957009,48.000000,4.957009,yes,Both,-,"near 2^96 * pi/2 [-1.2445130665611575e+29,0,0,0]",-0.50225325592115044326391171125578694045543670654296875,-0.50225325592115050071185754648530613739144383428589081390350064471629529975977222 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,moderate,4099,10322096095657499356,54.966272,53.114050,52.830853,48.000000,4.830853,yes,Both,yes,"[-5.7949723984622032,-1.6084279459600013e-16,8.9285686952767023e-33,-4.956351271221794e-49]",0.5310948062764977439798030900419689714908599853515625,0.53109480627649781027783431456712262944491608720831668267909314089793071391325448 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,argument_reduction,4114,10322096095657499282,54.822185,53.100114,52.859084,45.000000,7.859084,yes,Both,yes,"near 2^104 * pi/2 [-3.185953450396556e+31,0,0,0]",-1.3480441969403991198106496085529215633869171142578125,-1.3480441969403989547915221380501138540709149655202515743993920841096117436418514 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,near_one,4099,10322096095657499359,55.076264,53.013973,52.693509,48.000000,4.693509,yes,Both,yes,"[0.69084897511107168,1.9174910967675087e-17,-1.0644213825725161e-33,5.9087256341767488e-50]",0.6045578974549419282169537837035022675991058349609375,0.60455789745494184521062137483289791333043169413541191538511529635270202509108926 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,moderate,4099,10322096095657499356,54.861464,53.032964,52.752464,48.000000,4.752464,yes,Both,yes,"[2.7271853311214098,7.5694598675774267e-17,-4.2018943144802738e-33,2.3325199074887691e-49]",1.219341175070450589146275888197124004364013671875,1.2193411750704504284332317205702958914241077638601847892988778474321517604825199 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,near_one,4099,10322096095657499359,54.993800,53.170510,53.040656,48.000000,5.040656,yes,Both,yes,"[1.3489527984700374,3.7440961399849353e-17,-2.0783908705107242e-33,1.1537386993058641e-49] ; [0.85379739020999446,2.3697638024400127e-17,-1.3154831681960814e-33,7.302398509190685e-50]",1.0065123671465141530489972865325398743152618408203125,1.0065123671465142616892414740655812810119461135218360142280212527802839300485563 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,moderate,4099,10322096095657499356,54.890567,53.179569,53.060948,48.000000,5.060948,yes,Both,yes,"[-4.7266626831272092,-1.311912435111087e-16,7.2825769587619272e-33,-4.0426423091110703e-49] ; [2.8962761555613667,8.0387811839426525e-17,-4.4624199801683043e-33,2.4771407037650929e-49]",-1.0210524446594291259060582888196222484111785888671875,-1.0210524446594292345764275054094005619467300994098247323364498554603476784958796 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,extreme_finite,8,10322096095657499293,62.132485,54.509980,54.509980,48.000000,6.509980,yes,Both,yes,"huge positive [1.6853373139334212e+307,4.6777507254719996e+290,-2.5966732794380218e+274,1.4414432311305024e+258] ; tiny negative [-2.7813423231340017e-308,-0,0,-0]",1.5707963267948965579989817342720925807952880859375,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,moderate,4099,10322096095657499356,54.899662,52.925254,52.422752,48.000000,4.422752,yes,Both,yes,"[-0.50335035028515207,-1.3970778708492839e-17,7.7553400970558289e-34,-4.3050785697750387e-50]",-0.527471766697775290566596595454029738903045654296875,-0.5274717666977753779398223907170077140407553909392966159005201438307403789636427 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,boundary,4105,10322096095657499355,54.919616,53.086611,53.066141,48.000000,5.066141,yes,Both,yes,"[-0.9999991973384238,-2.7755553337294841e-17,1.5407427188138168e-33,-8.552840207253314e-50]",-1.5695293132325520701897403341718018054962158203125,-1.5695293132325522366341318908043706690745267178940372928026218495677083294449175 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,moderate,4099,10322096095657499356,54.885315,52.858563,52.325679,48.000000,4.325679,yes,Both,-,"[-0.50414043989940849,-1.3992708100524456e-17,7.7675133550305953e-34,-4.3118360854191824e-50]",2.0991827056155738517873032833449542522430419921875,2.0991827056155742237087238848295169418258006344663652219436700791519481199702843 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,boundary,4105,10322096095657499355,54.933501,53.208019,53.015630,48.000000,5.015630,yes,Both,-,"[0.99999951942877319,2.7755562277097889e-17,-1.5407432150725758e-33,8.5528429620428158e-50]",0.00098037876895050468130377030462341281236149370670318603515625,0.00098037876895050478897482934485258576844002644995119255737105648210814670714088092 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,moderate,4099,10322096095657499356,54.974015,53.157024,53.019599,48.000000,5.019599,yes,Both,-,"[-2.7628513559780572,-7.6684529725591843e-17,4.2568465266952151e-33,-2.3630245131163269e-49]",0.063111558041546500508189865286112762987613677978515625,0.063111558041546493595944022576030893684783578049870680283049711049275225101317397 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,boundary,4099,10322096095657499289,54.951337,53.166873,53.022036,48.000000,5.022036,yes,Both,-,"[326.47996564801747,9.061639373531479e-15,-5.0302203366722636e-31,2.7923332183556269e-47]",6.1439480220514836164654240272397757603181465874882434277975712709632833055792003e+141,6.1439480220514842882409559528883970846034473863532678303012402569115463152702114e+141 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,moderate,4099,10322096095657499356,54.935841,53.180629,53.025408,48.000000,5.025408,yes,Both,-,"[5.0109819009809229,1.3908268706122392e-16,-7.7206400751053074e-33,4.2858161881128051e-49]",32.244515813988982699811458587646484375,32.244515813988979182444910558923716242085594124376112958709781738645907303764812 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,boundary,4099,10322096095657499289,54.972599,53.164620,53.020447,48.000000,5.020447,yes,Both,-,"[-250.99202946082733,-6.9664282526201528e-15,3.8671445227290451e-31,-2.1466964443434239e-47]",2.7788842653856641449312255150961427650361335071502829578141633319949134903163359e-76,2.7788842653856638407547596404961219062300898310358581460949384897692395968312002e-76 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,moderate,4099,10322096095657499356,55.059494,52.612144,51.837138,48.000000,3.837138,yes,Both,yes,"[-0.32815107029056989,-9.1080218447994713e-18,5.0559677804426335e-34,-2.80662592080518e-50]",-0.2797457975256689710619184552342630922794342041015625,-0.27974579752566904060118051629266816207002563378260620564372138557529344923417983 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,cancellation,4098,10322096095657499288,83.154283,53.027983,51.974659,48.000000,3.974659,yes,Both,yes,"[4.0836650763983235e-12,0,0,0]",4.083665076406660708951440610569317006713074835744237134349532425403594970703125e-12,4.0836650764066616317750966948397766703517255100972299064045015820960692117527006e-12 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,near_one,4099,10322096095657499359,54.918146,53.166316,53.041728,48.000000,5.041728,yes,Both,-,"[1.1335639126739003,3.1462718893368611e-17,1.7465317466363379e-33,9.695198791772263e-50]",0.125366574619705295479121787138865329325199127197265625,0.12536657461970530900080502001741556309701459949497062977512985254006361141481408 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,wide_exponent,4096,10322096095657499357,54.929145,53.171869,53.045970,48.000000,5.045970,yes,Both,-,"[4.6261311118266506e+112,1.2840093188211806e+96,7.1276835479426902e+79,3.9566591935839502e+63]",259.421251321115732935140840709209442138671875,259.42125132111570503685832403601672523060244723042283551553508070299190699694996 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,extreme_finite,4096,10322096095657499295,54.890700,53.179074,53.016960,48.000000,5.016960,yes,Both,-,"[2.0331470333148491e-224,5.6431166220861893e-241,3.1325590022425128e-257,1.7389195651432225e-273]",-515.069475975312570881214924156665802001953125,-515.06947597531262739711907680169329239742647250082611831496163075456316319684835 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,near_one,4099,10322096095657499359,54.995094,53.183432,52.964126,48.000000,4.964126,yes,Both,-,"[0.95724233546017334,2.656881202434606e-17,1.4748653423183355e-33,8.1871473063173968e-50]",-0.063043891274832619675549949533888138830661773681640625,-0.063043891274832612500047979104758712783348150384731080505578135007330599360108535 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,wide_exponent,4096,10322096095657499357,54.961217,53.191544,53.045986,48.000000,5.045986,yes,Both,-,"[1.6478667181302047e-79,4.5737489299541154e-96,2.5389406854448656e-112,1.4093952035692334e-128]",-261.71171993614638040526187978684902191162109375,-261.71171993614635226097107489196965564142826014659637604512890701616180385411886 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,extreme_finite,4096,10322096095657499295,54.951425,53.191636,53.032071,48.000000,5.032071,yes,Both,-,"[3.0682846229157043e-158,8.5162005861608278e-175,4.7274409865410026e-191,2.624256915407243e-207]",-523.24720667460906042833812534809112548828125,-523.24720667460911724330320979055400330344628738302026449859537432674608012400159 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,near_one,4099,10322096095657499359,54.958860,53.143778,53.018669,48.000000,5.018669,yes,Both,-,"[0.74875470021249213,2.0782117699305384e-17,1.1536392785119411e-33,6.4039844455795532e-50]",-0.1256604383656476919828293148384545929729938507080078125,-0.12566043836564767821108349467351605169970965007622302204561391695316098182502685 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,wide_exponent,4096,10322096095657499357,55.006875,53.165767,53.021068,48.000000,5.021068,yes,Both,-,"[4.6201923918188489e+258,1.2823609928988147e+242,7.1185335009872046e+225,3.9515798971807595e+209]",258.66466006061358484657830558717250823974609375,258.66466006061361314780285273352542290302251199814003016169435342215632974918998 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,extreme_finite,4096,10322096095657499295,54.953390,53.178424,53.029150,48.000000,5.029150,yes,Both,-,"[2.8445937992650119e+257,7.8953338291249174e+240,4.3827907020981923e+224,2.4329375747912342e+208]",257.45402025901483966663363389670848846435546875,257.45402025901486767802909135885153181987420064870956774702074158124472305183714 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,moderate,4099,10322096095657499356,54.942690,53.047619,52.277793,48.000000,4.277793,yes,Both,yes,"[1.8167026837397302,5.0423628709654062e-17,-2.7990736789304006e-33,1.5537980229853868e-49]",1.035566939745749426293741635163314640522003173828125,1.0355669397457496159618991192935896670346648660028939511409663282242925434700808 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,cancellation,4098,10322096095657499288,83.171912,53.575868,52.537975,48.000000,4.537975,yes,Both,yes,"[-3.3317353930316975e-08,0,0,0]",-3.331735448534001895552398068121868757174297570600174367427825927734375e-08,-3.3317354485340024050756419560216456335223016311658126282401740088069247520016174e-08 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,near_one,4099,10322096095657499359,54.959214,53.190567,53.032687,48.000000,5.032687,yes,Both,yes,"[1.0146951632466654,2.8163448330305746e-17,1.563385439457318e-33,8.6785325562461659e-50] ; [0.67203279182024089,1.86526569695489e-17,1.0354304619014043e-33,5.7477936960060001e-50]",1.009851987115524707405711524188518524169921875,1.0098519871155248170101935707300539046159555693972004409710861335008920239838475 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,moderate,4099,10322096095657499356,54.935083,53.163311,53.017201,48.000000,5.017201,yes,Both,yes,"[5.9546289339047043,1.652741536380038e-16,9.1745585372173701e-33,5.0929030643950102e-49] ; [5.055011828311212,1.4030476303859041e-16,7.7884789195009855e-33,4.3234743116188276e-49]",8258.471810015818846295587718486785888671875,8258.4718100158197523034186342284236047260743845763155702907245462782899967304707 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,moderate,4099,10322096095657499356,53.278021,51.216249,50.843118,48.000000,2.843118,yes,Both,yes,"[-0.12598239680403012,-3.4967139407324243e-18,1.9410661637644512e-34,-1.0775081736660592e-50]",-5.036966535935927210927633319859086924452640232630074024200439453125e-07,-5.0369665359359247171059931113138371384365138382213074202619030423806648231460384e-07 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,wide_exponent,4096,10322096095657499357,53.261106,51.258453,50.915855,48.000000,2.915855,yes,Both,yes,"[3178858.3859193348,8.8231044301760176e-11,-4.8978068435268183e-27,2.7188289639250675e-43]",3280184465858375893424625758878219769323978752,3280184465858377437606968244219065735294846924.9874778095912486192020477914613844 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.1588709556304993e+103,8.7676281669016289e+86,4.8670113311231216e+70,2.7017340204622107e+54] ; [5.476364839089647e-60,1.5199965839012416e-76,8.4376760239937101e-93,4.6838510980827309e-109]",4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60,4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remainder,native,double,native double,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,near_one,4099,10322096095657499359,54.924799,52.983593,52.654993,48.000000,4.654993,yes,Both,yes,"[1.4755959292519478,4.095601439246665e-17,-2.2735155087697884e-33,1.262054632339298e-49]",2.0724994727921046688834394444711506366729736328125,2.072499472792104961138580290412029520398475094027248170955683086677283903718196 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,moderate,4099,10322096095657499356,54.840090,52.839907,52.382195,48.000000,4.382195,yes,Both,yes,"[-4.8693204451967098,-1.3515079181338512e-16,7.5023760433770639e-33,-4.1646553113766992e-49]",-65.112354096910877387927030213177204132080078125,-65.112354096910888480990202630806761852448902953289356801355801975240320907331551 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,near_one,4099,10322096095657499359,54.876574,52.853190,52.621517,48.000000,4.621517,yes,Both,-,"[0.98058054916848769,2.7216577579660886e-17,-1.5108235540218166e-33,8.3867554791051488e-50]",1.520548407211194774646401128848083317279815673828125,1.5205484072111945551914719285992945947565561251918943368316691032158941972807884 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,moderate,4099,10322096095657499356,54.744398,52.689522,52.208160,48.000000,4.208160,yes,Both,-,"[-2.8630251231866755,-7.9464910296053056e-17,4.4111886530225384e-33,-2.4487016042754264e-49]",8.785762981329629184301666100509464740753173828125,8.7857629813296308730208849350993320141187458453483631911030801892035180406191378 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,near_one,4099,10322096095657499359,54.955827,52.958304,52.476216,48.000000,4.476216,yes,Both,yes,"[0.89084068064074273,2.4725795873002463e-17,-1.3725573940194504e-33,7.6192241072994848e-50]",0.711808711646828573549328211811371147632598876953125,0.7118087116468284599310366212933242511249465496496718227001725734620301911684374 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,moderate,4099,10322096095657499356,55.336545,53.363803,52.830364,48.000000,4.830364,yes,Both,yes,"[0.67537377842904966,1.8745387976000496e-17,-1.0405780668243656e-33,5.7763686435417271e-50]",0.588503635448117012884949872386641800403594970703125,0.58850363544811708637439156576610391440217714992619984433185413295933594686347521 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,near_one,4099,10322096095657499359,54.586548,52.369737,51.895905,48.000000,3.895905,yes,Both,yes,"[0.53254928863989415,1.478121204989397e-17,-8.2052209748295468e-34,4.5548126241965174e-50]",0.51013370703315696896851250130566768348217010498046875,0.51013370703315709071599184668017064813861078342675097769291318040468214812208369 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,moderate,4099,10322096095657499356,54.727697,52.598947,51.750916,48.000000,3.750916,yes,Both,yes,"[-0.12598239680403012,-3.4967139407324243e-18,1.9410661637644512e-34,-1.0775081736660592e-50]",-0.1256514984566571013768765396889648400247097015380859375,-0.12565149845665706821878409248510840880181855230517373980735012913432134271301342 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,moderate,4099,10322096095657499286,54.952709,52.808130,51.870988,48.000000,3.870988,yes,Both,-,"[1.1775265887662758,3.268292827391594e-17,-1.8142669740937001e-33,1.0071204837279191e-49]",0.58738281392912294887054258651915006339550018310546875,0.58738281392912280624478083650309327648102437309781099318842251949855802008569812 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,boundary,4101,10322096095657499355,54.339815,51.870916,51.455052,48.000000,3.455052,yes,Both,-,"[1.0000005503151308,2.7755590889942139e-17,-1.5407448034045001e-33,8.5528517790561814e-50]",0.00104910922245869653833538759357679737149737775325775146484375,0.0010491092224586968782004774758273759261911295412788923059743654980738407419350006 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,moderate,4099,10322096095657499356,54.578729,52.340848,51.786806,48.000000,3.786806,yes,Both,yes,"[-0.49545345377814692,-1.3751595800363862e-17,7.6336691414512835e-34,-4.2375376216048829e-50]",-0.54326232788789219352310055910493247210979461669921875,-0.54326232788789205368437589517863805325010858337223961824526704311193509051969914 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,boundary,4105,10322096095657499355,55.375335,53.840397,53.427151,48.000000,5.427151,yes,Both,yes,"[-0.5,0,0,0]",-0.54930614433405489105410879346891306340694427490234375,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,near_one,4099,10322096095657499359,54.019854,51.750997,51.093455,48.000000,3.093455,yes,Both,yes,"[0.51751407869686006,1.4363901143423232e-17,-7.9735668864340423e-34,4.4262187728538973e-50]",0.53575539526306104054498291588970459997653961181640625,0.53575539526306126354449913496849026907542658974119733621009662651072178280690274 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,moderate,4099,10322096095657499356,59.546056,52.095594,51.417655,48.000000,3.417655,yes,Both,yes,"[-0.51697425326334745,-1.4348917977784133e-17,7.9652495586968923e-34,-4.4216017284753286e-50]",-0.53528925503141955299923893107916228473186492919921875,-0.53528925503141937503523518533749845780941284936029851836201775604219807148329816 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,near_one,4099,10322096095657499359,54.238757,52.047080,51.413451,48.000000,3.413451,yes,Both,-,"[1.3127470131510215,3.6436048987704181e-17,-2.0226070256259654e-33,1.1227724448092754e-49]",0.06338166370075233591041552472233888693153858184814453125,0.063381663700752357043981488713887430626454842957042886947643364361888596761458652 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,moderate,4099,10322096095657499356,56.954094,51.522059,50.938586,48.000000,2.938586,yes,Both,-,"[4.4724300649764519,1.2413487085406605e-16,-6.8908695890527197e-33,3.82520103872781e-49]",2.532797278373559493889186606889983577328706587650231085717678070068359375e-10,2.5327972783735583201867808196745632452377777984379745134701129911583856224598831e-10 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,lgamma,native,double,native double,bl::lgamma,moderate,4099,10322096095657499287,54.454740,52.093832,51.363446,48.000000,3.363446,yes,Both,-,"[1.1903429521686997,3.3038653817449295e-17,-1.8340137085376015e-33,1.0180821233483081e-49]",-0.0825234979651145172940829297658638097345829010009765625,-0.082523497965114488807540710102364103239432281521113914990549637246092147129738611 +6,93be61bd5e944160977414cf0b20521a,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,tgamma,native,double,native double,bl::tgamma,moderate,4099,10322096095657499284,53.611781,51.017778,50.584862,48.000000,2.584862,yes,Both,-,"[16.268960066207903,4.5155435130528063e-16,-2.5066301884439958e-32,1.3914592747155096e-48]",2739547473402.04345703125,2739547473402.0450792820033714382601954608901884806869470278424770198729645511427 diff --git a/validation/metrics/data/native/fastmath/93be61bd5e944160977414cf0b20521a/native_accuracy_run.json b/validation/metrics/data/native/fastmath/93be61bd5e944160977414cf0b20521a/native_accuracy_run.json new file mode 100644 index 0000000..3c09281 --- /dev/null +++ b/validation/metrics/data/native/fastmath/93be61bd5e944160977414cf0b20521a/native_accuracy_run.json @@ -0,0 +1,90 @@ +{ + "accuracy_samples": 4096, + "architecture": "x86_64", + "compiler": "MSVC", + "configuration": { + "build": { + "architecture": "x86_64", + "compiler-id": "MSVC", + "compiler-version": "19.51.36244.0", + "config": "Release", + "flags-hash": "a7783233a2a1c2360aa486f3fcd069edd7b754c80c337bb23b401ee04591097b", + "frontend-variant": "MSVC", + "optimized": "1", + "processor": "AMD64", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Windows" + }, + "consumer": { + "arm64": "0", + "fast-math": "on", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "1" + }, + "harness": { + "qdpp": "on", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "available", + "simd": "on", + "tu-x86-fma": "0", + "x86": "1" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "0", + "f256-simd": "1", + "msvc-guarded": "1", + "neon": "0", + "runtime-check": "1", + "runtime-path": "1", + "scalar-x86": "0", + "sse2": "1", + "trig-simd": "1", + "wasm-simd": "0" + } + }, + "consumer_mode": "fastmath", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-msvc-release\\validation\\fltx_accuracy_fastmath.exe", + "sha256": "6320c964a4a5b80fa3059f7bb596a67e64c84fbf97db3e2015c14cc384ac5602", + "wasm-sha256": "not-present" + } + }, + "host": { + "machine": "AMD64", + "node": "not-used", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "outputs": { + "f32_accuracy.csv": "a53fc13e54765313fe73bde43eb2331ff6da6c4f354823c6bfd771d48cb75474", + "f64_accuracy.csv": "e4cf6db7e008071aae418b54dd37a96d8d3cdfd5fdf7ac6995bbbb85eb66aad9" + }, + "platform": "windows", + "policy": "native-float-libm-baseline-v1", + "precisions": [ + "f32", + "f64" + ], + "run_id": "93be61bd5e944160977414cf0b20521a", + "sample_mode": "standard", + "schema_version": 2, + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete", + "target": "windows/x86_64/MSVC", + "thresholds": "advisory" +} diff --git a/validation/metrics/data/native/fastmath/c5d9341113ee43d4baa77cdad227c7b4/f32_accuracy.csv b/validation/metrics/data/native/fastmath/c5d9341113ee43d4baa77cdad227c7b4/f32_accuracy.csv new file mode 100644 index 0000000..ef526fd --- /dev/null +++ b/validation/metrics/data/native/fastmath/c5d9341113ee43d4baa77cdad227c7b4/f32_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,near_one,4099,10322096095657499359,38.457645,24.037482,24.000509,20.000000,4.000509,yes,Both,yes,"[1.1885061456019219,3.2987672193893811e-17,-1.831183659922398e-33,1.0165111307816044e-49] ; [0.81220021471607706,2.2543084474582116e-17,-1.2513925714875483e-33,6.9466242285517913e-50]",2.000706195831298828125,2.00070631504058837890625 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,moderate,4099,10322096095657499356,41.522382,24.071404,24.000368,20.000000,4.000368,yes,Both,yes,"[6.8051724535006084,1.8888147861053107e-16,-1.0485028323932781e-32,5.8203599295385438e-49] ; [1.1968659760618667,3.3219704100358647e-17,-1.8440640181726446e-33,1.0236611659290266e-49]",8.0020389556884765625,8.002038478851318359375 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,wide_exponent,4096,10322096095657499357,46.805352,24.393682,24.006151,20.000000,4.006151,yes,Both,yes,"[6.8663278648288954e-15,1.9057888225395823e-31,-1.0579253154283554e-47,5.8726652176119575e-64] ; [-3.2984332805285199e-15,-9.154991433081627e-32,5.0820411396266402e-48,-2.821099542652883e-64]",3.567894203281192500032403813747805543243885040283203125e-15,3.567894415039429313607488580828430713154375553131103515625e-15 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,extreme_finite,4096,10322096095657499295,47.155091,24.409642,24.030594,20.000000,4.030594,yes,Both,yes,"[223002548.53621882,6.1895640983749784e-09,-3.4358982872045742e-25,1.9073066943623286e-41] ; [279175322748.44623,7.748671780562106e-06,-4.3013769105216293e-22,2.3877438418260673e-38]",279398318080,279398334384 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.77817428112030029296875,-0.77817428112030029296875 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000016689300537,0,0,0]",-1.6689300537109375e-06,-1.6689300537109375e-06 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,near_one,4099,10322096095657499359,26.016181,24.166616,24.014549,20.000000,4.014549,yes,Both,yes,"[1.4059396726628588,3.902266489560654e-17,-2.1661930524667106e-33,1.2024787013157959e-49] ; [1.4325550147665504,3.9761389035901386e-17,-2.2072004799367987e-33,1.2252423963947649e-49]",2.0140857696533203125,2.014085888497646692485432140529155731201171875 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,moderate,4099,10322096095657499356,25.989725,24.178659,24.028212,20.000000,4.028212,yes,Both,yes,"[-1.4739640396494451,-4.0910720357208028e-17,2.2710011847286731e-33,-1.2606589021183906e-49] ; [2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49]",-4.02748775482177734375,-4.0274875194135120182181708514690399169921875 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,wide_exponent,4096,10322096095657499357,25.942256,24.179837,24.024630,20.000000,4.024630,yes,Both,yes,"[-1122057943862.8401,-3.1143364106002161e-05,1.7288039947384127e-21,-9.5967900001126686e-38] ; [-8694665162187.9277,-0.00024132543636168146,1.3396252793822586e-20,-7.4364141477004576e-37]",9755918009047724494684160,9755918580702648912052224 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,extreme_finite,8,10322096095657499292,40.953446,25.906891,25.906891,20.000000,5.906891,yes,Both,yes,"large neighbour [844424863023104,0.023437498137354851,-1.3010425035850288e-18,7.2222367174802835e-35] ; negative small neighbour [-5.5511156525213747e-16,-1.5407441024465825e-32,8.5528478879580846e-49,-4.7477843256638533e-65]",-0.46875,-0.468750007450577044210149324499070644378662109375 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,near_one,4099,10322096095657499359,25.952819,24.167429,24.029610,20.000000,4.029610,yes,Both,yes,"[1.2982596956909869,3.6033945152474569e-17,2.0002857788178657e-33,1.1103816637369289e-49] ; [1.2798202945460211,3.5522148959688557e-17,1.9718753829605394e-33,1.0946107259271694e-49]",1.01440775394439697265625,1.0144078131795243086497270702039165563127339636105403630860948828655528161513261 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,moderate,4099,10322096095657499356,26.239727,24.172640,24.024913,20.000000,4.024913,yes,Both,yes,"[6.5374711177505596,1.8145127394371573e-16,1.0072569108993997e-32,5.5913990709666165e-49] ; [3.2450059050955762,9.0067006772042607e-17,4.99972323386958e-33,2.775403925497677e-49]",2.0146253108978271484375,2.0146254289230677898843256855109580140862879734170743102717224833311181385074994 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,wide_exponent,4096,10322096095657499357,25.917644,24.144253,24.027945,20.000000,4.027945,yes,Both,yes,"[0.027902000922864607,7.7443609644191634e-19,4.2989839268532189e-35,2.3864154690429567e-51] ; [14499.326437201289,4.0243715130342775e-13,2.2339749567081166e-29,1.2401052166866692e-45]",1.924365506056346930563449859619140625e-06,1.9243653935555734717265282397956262784302341636296406554453298274232840831100044e-06 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,extreme_finite,8,10322096095657499292,25.430169,24.584963,24.584963,20.000000,4.584963,yes,Both,yes,"large positive [844424930131968,0.0234375,1.3010426069826053e-18,7.2222372914521344e-35] ; small negative [5.5511151231257827e-16,1.5407439555097887e-32,8.5528470722950261e-49,4.7477838728798994e-65]",1521180780720166262527502581760,1521180720273875281796043846451.2 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,moderate,4099,10322096095657499356,25.971753,24.150757,24.027403,20.000000,4.027403,yes,Both,yes,"[-1.9749460259140985,-5.4815763759044581e-17,3.0428861518852258e-33,-1.6891411335680094e-49] ; [-6.4158772339979464,-1.7807636570882208e-16,9.885224067575198e-33,-5.4874016817003646e-49] ; [3.4130940773098271,9.4732390746028102e-17,-5.2587040692013754e-33,2.9191671686586848e-49]",16.0841045379638671875,16.0841054786133099696598947048187255859375 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; next value after one [1.0000001192092896,0,0,0] ; native product cancellation",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,wide_exponent,4096,10322096095657499357,32.556508,24.197422,24.009758,20.000000,4.009758,yes,Both,yes,"[0.0072982921122313887,2.0256829858598637e-19,-1.124479945746528e-35,6.2421176324852115e-52] ; [1.9523314176984748e-12,5.4188082290698013e-29,-3.0080428309707814e-45,1.6697992050011997e-61] ; [-2.3939769383437016e-07,-6.6446207934270406e-24,3.6885054973828883e-40,-2.0475318648254738e-56]",-2.39397678569730487652122974395751953125e-07,-2.3939769274275411635131445493727566081466591810245070348628360079601407051086426e-07 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",3588998231833025183056134144,3588998231833025183056134144 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fabs,native,float,native float,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,moderate,4099,10322096095657499356,25.964756,24.164418,24.008593,20.000000,4.008593,yes,Both,yes,"[-4.0059402826070123,-1.1118717842559279e-16,6.1721282765599288e-33,-3.4262194617884094e-49]",16.0475597381591796875,16.0475587873306722030974924564361572265625 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,wide_exponent,4096,10322096095657499357,25.989404,24.167423,24.020149,20.000000,4.020149,yes,Both,yes,"[797963256397175.88,0.022147929501425297,-1.2294570640128564e-18,6.8248577012755909e-35]",636745309315666385691207532544,636745346742277146199547969536 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,near_one,4099,10322096095657499359,26.024612,24.188379,24.024049,20.000000,4.024049,yes,Both,yes,"[0.99957607711604157,2.774380939196801e-17,1.5400907988887275e-33,8.5492213246980834e-50]",1.0004241466522216796875,1.0004240880080409757745092099607730518546575501261053598713520202379186199441578 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,wide_exponent,4096,10322096095657499357,25.897082,24.141136,24.016290,20.000000,4.016290,yes,Both,yes,"[1.4835519773135318e-08,4.1176839086041523e-25,2.2857737417304193e-41,1.2688593185763538e-57]",67405800,67405796.027411572915787349932438540624582792272908782750245310659982961460931995 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,no,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",-4402.79248046875,-4402.79248046875 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055850982666015625,-7.055850982666015625 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,no,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",3588998231833025183056134144,3588998231833025183056134144 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,moderate,4099,10322096095657499356,48.522678,24.128146,24.008521,20.000000,4.008521,yes,Both,yes,"[6.6457375410806137,1.8445627084308674e-16,-1.0239379946324441e-32,5.6839976871472472e-49] ; [2.6220427968328792,7.27763071149101e-17,-4.0398965903082395e-33,2.2425931058324353e-49]",4.0236949920654296875,4.0236947536468505859375 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000016689300537,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,copysign,native,float,native float,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,floor,native,float,native float,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,no,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,ceil,native,float,native float,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,no,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,trunc,native,float,native float,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,no,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round,native,float,native float,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,roundeven,native,float,native float,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_decimals,native,float,native float,bl::round_decimals,moderate,4099,10322096095657499356,26.229396,24.222837,24.047915,20.000000,4.047915,yes,Both,yes,"[4.1022214313758827,1.1385951713060679e-16,-6.3204728745551046e-33,3.5085672559249129e-49]",4.10200023651123046875,4.102 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_significant,native,float,native float,bl::round_significant,wide_exponent,4096,10322096095657499357,26.031860,24.190158,24.023953,20.000000,4.023953,yes,Both,yes,"[259.8694582017871,7.2128263973122191e-15,-4.0039229694600715e-31,2.2226237347600494e-47]",259.869384765625,259.8694 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,lround,native,float,native float,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,llround,native,float,native float,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remquo,native,float,native float,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.944149017333984375 ; 1,-0.944149017333984375 ; 1 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",0 ; -8,-0 ; -8 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0 ; 3588998231833025183056134144,0 ; 3588998231833025183056134144 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ldexp,native,float,native float,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbn,native,float,native float,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbln,native,float,native float,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0.724792420864105224609375 ; 92,0.724792420864105224609375 ; 92 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,-,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,near_one,4099,10322096095657499359,25.904846,24.145989,24.002397,20.000000,4.002397,yes,Both,yes,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",1.00001394748687744140625,1.0000140069934242844029017485374012760134473363250144717592753776502313379618068 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,wide_exponent,4096,10322096095657499357,25.966753,24.215195,24.033944,20.000000,4.033944,yes,Both,yes,"[8.4482670931604627e+31,2344865161252447,0.13016616458319236,7.2256736473703873e-18]",9191445835546624,9191445300433280.2040066177032811142195637421096986523537003168905974560430072948 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,extreme_finite,4096,10322096095657499295,25.972131,24.206633,24.003202,20.000000,4.003202,yes,Both,yes,"[3.2519120367544908e+32,9025869043151310,0.50103638144790075,2.7813106342916602e-17]",18033057994899456,18033059067370500.361343159063133250828533418772371371727970165496211972696634283 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,moderate,4099,10322096095657499356,26.085409,24.111702,23.691553,20.000000,3.691553,yes,Both,yes,"[0.12581300317204658,3.4920123229710991e-18,-1.9384562416186464e-34,1.0760593758366834e-50]",0.5010817050933837890625,0.50108166810711645089209254243838069927329761408922790474888496443902402861654973 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,wide_exponent,4096,10322096095657499357,25.932419,24.028888,23.767643,20.000000,3.767643,yes,Both,yes,"[7.162186340732675e+20,19879.060455343031,-1.1035095312718641e-12,6.1257084475566886e-29]",8947092,8947091.3735183523613709653827916776567723666436134613915808566062692932024921705 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,moderate,4099,10322096095657499356,25.982984,24.167535,24.008992,20.000000,4.008992,yes,Both,yes,"[3.0841394791368018,8.5602066522327873e-17,-4.7518692604291353e-33,2.6378173314684702e-49] ; [2.5731327818230003,7.1418781494941861e-17,-3.9645387803178756e-33,2.2007611179641204e-49]",4.016582012176513671875,4.0165817742570609994234301662245381486745983183743907579567512422082641230482559 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,wide_exponent,4096,10322096095657499357,50.914162,24.589271,24.043824,20.000000,4.043824,yes,Both,yes,"[-1.2969861059349299e-29,-3.599859593569704e-46,1.9983235030994217e-62,-1.1092923818952892e-78] ; [2.7588817734603815e-32,7.6574351677860018e-49,-4.250730416425209e-65,2.3596293898948734e-81]",1.2969890834882488924611555657595108221020467658335037497430164421530207619071007e-29,1.2969890084946579252781730919118729168609820257308054473541529684278323820094086e-29 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,moderate,4099,10322096095657499356,26.149143,24.214150,24.040329,20.000000,4.040329,yes,Both,yes,"[-5.7483236179995885,-1.5954803084249315e-16,8.8566948687470254e-33,-4.9164532826812132e-49]",0.509722173213958740234375,0.5097222027582440476609190572223045086789238470780369932414545068400613217789304 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,argument_reduction,4111,10322096095657499282,26.207717,24.232934,24.054458,20.000000,4.054458,yes,Both,yes,"near 2^94 * pi/2 [3.1112832252188646e+28,0,0,0]",-0.031775273382663726806640625,-0.031775275206458036754431969895458660655905161590001855338797800351243967744526865 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,moderate,4099,10322096095657499356,26.060966,24.256137,24.035729,20.000000,4.035729,yes,Both,-,"[4.4588502387206184,1.2375795495957516e-16,-6.8699465538321711e-33,3.8135864210043619e-49]",-0.25083100795745849609375,-0.25083099337247927050646438955413445736165895666786844698074070181158501850594916 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,argument_reduction,4111,10322096095657499282,26.627892,24.245703,24.076319,20.000000,4.076319,yes,Both,-,"near 2^70 * pi/2 [1.8544669218107189e+21,0,0,0]",-0.5190365314483642578125,-0.51903650210542794358474489503209069334133171874228756988100493423128724002299192 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,moderate,4099,10322096095657499356,25.924307,24.163895,24.015719,20.000000,4.015719,yes,Both,yes,"[-6.036496878364936,-1.6754644556096587e-16,9.3006960777944832e-33,-5.1629234653041607e-49]",0.2518171370029449462890625,0.25181715184977206019891708487262388659629088175425587483011094843357962067832389 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,argument_reduction,4111,10322096095657499282,25.898518,24.161857,24.046469,18.000000,6.046469,yes,Both,yes,"near 2^28 * pi/2 [-421657632,0,0,0]",0.507759034633636474609375,0.50775906393914719153658437245770373295759245731279909404632772755040921670373447 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,near_one,4099,10322096095657499359,26.067892,24.219203,24.021836,20.000000,4.021836,yes,Both,yes,"[0.55072017619471925,1.5285555493425008e-17,-8.4851878264929949e-34,4.7102254466208054e-50]",0.503395974636077880859375,0.5033959450820623349182906770633407385222001692931760800454776223514541494398828 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,moderate,4099,10322096095657499356,25.911836,24.243607,24.056379,20.000000,4.056379,yes,Both,yes,"[1.6967153744323316,4.7093311873256703e-17,-2.6142039573771427e-33,1.4511747122731526e-49]",1.03822672367095947265625,1.0382266641595175302821692627692631092810194067716353711556189103095518619306749 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,near_one,4099,10322096095657499359,25.920195,24.158254,24.013805,20.000000,4.013805,yes,Both,yes,"[1.3550416411741315,3.7609960733934508e-17,-2.0877722181031071e-33,1.1589463933554018e-49] ; [0.85964036308882719,2.3859813099958637e-17,-1.3244856933413505e-33,7.3523725626709088e-50]",1.005465030670166015625,1.0054649713105136693080409087559014886644835427733168442408504661900474402910144 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,moderate,4099,10322096095657499356,25.938612,24.172853,24.023930,20.000000,4.023930,yes,Both,yes,"[-1.5221127970798687,-4.2247116834866724e-17,2.3451860917049052e-33,-1.3018397980207348e-49] ; [-0.70678002618891433,-1.9617086460502596e-17,1.0889670532256199e-33,-6.0449814777464578e-50]",-2.005512237548828125,-2.005512355120225239725146453473468772246503385569443728906464376660394150359798 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,extreme_finite,8,10322096095657499293,32.824184,25.098912,25.098912,20.000000,5.098912,yes,Both,yes,"huge positive [3.1901471898837981e+37,8.8544371553805848e+20,-49152,2.7284841053187847e-12] ; tiny negative [-1.4693679385278594e-38,-4.0783152924990778e-55,2.2639197697066781e-71,-1.256727927116218e-87]",1.57079637050628662109375,1.5707963267948966192313216916397514420985846996875529104874722961539082031435651 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,moderate,4099,10322096095657499356,25.904535,24.175867,24.017308,20.000000,4.017308,yes,Both,yes,"[-0.84210224938382328,-2.3373032658863904e-17,1.2974639506593224e-33,-7.2023717582154888e-50]",-1.00116932392120361328125,-1.0011693828839335652379006580708530490028888139345574452409663917082896115428421 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,boundary,4105,10322096095657499355,25.358925,24.717543,24.717543,20.000000,4.717543,yes,Both,yes,"[-0.99999928983607478,-2.7755555904620388e-17,1.5407428613290135e-33,-8.5528409983715774e-50]",-1.5696003437042236328125,-1.5696002868101387248982831177317988458122594291620956459638041678924528508701691 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,moderate,4099,10322096095657499356,25.924528,24.156658,24.022047,20.000000,4.022047,yes,Both,-,"[-0.43222210483323253,-1.1996573313445073e-17,6.6594359545952125e-34,-3.6967295639041067e-50]",2.0177516937255859375,2.0177518121690504519787760397825428925725024155764716881166634386351140067679032 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,boundary,4105,10322096095657499355,25.983148,24.584962,24.584962,20.000000,4.584962,yes,Both,-,"[0.9999995073211686,2.7755561941044354e-17,-1.5407431964178572e-33,8.5528428584883254e-50]",0.0009765625,0.00097656253880511143898187133876924251895712227894022748398387476387013216099532872 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,moderate,4099,10322096095657499356,25.945177,24.173984,24.007691,20.000000,4.007691,yes,Both,-,"[0.69706560262123496,1.9347457042607623e-17,-1.0739996138324561e-33,5.9618954985765975e-50]",2.007852077484130859375,2.0078521965251381745368245393757138670217404209691449932482836198723071521808851 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,boundary,4099,10322096095657499289,25.985101,24.189213,24.012647,20.000000,4.012647,yes,Both,-,"[-55.445402102948194,-1.538919050607329e-15,8.5427168150927155e-32,-4.7421604504842094e-48]",8.32470122137760864279645685032325255932328378349893682752735912799835205078125e-25,8.3247007295174246704446931992286856723729842657502269685404369668574123561739996e-25 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,moderate,4099,10322096095657499356,25.945548,24.176633,24.015565,20.000000,4.015565,yes,Both,-,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",16.047374725341796875,16.047373779108025107147981190408654763758177217950870805754027309567667903729689 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,boundary,4099,10322096095657499289,25.953110,24.184447,24.013981,20.000000,4.013981,yes,Both,-,"[12.008718688899336,3.3330889961656162e-16,-1.8502360733339086e-32,1.0270873448036725e-48]",4120.82763671875,4120.8278799704215331782631104353597855518360018117915418683951931281930912686669 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,moderate,4099,10322096095657499356,26.012367,23.778343,23.013322,20.000000,3.013322,yes,Both,yes,"[0.69706560262123496,1.9347457042607623e-17,-1.0739996138324561e-33,5.9618954985765975e-50]",1.007852077484130859375,1.0078521965251381745368245393757138670217404209691449932482836198723071521808851 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,cancellation,4098,10322096095657499288,42.799740,23.514463,23.291656,20.000000,3.291656,yes,Both,yes,"[0.0054612625390291214,0,0,0]",0.005476201884448528289794921875,0.0054762024177739916479654641857302427102624314390951127462041563273500046648971111 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,near_one,4099,10322096095657499359,25.916133,24.154099,24.017833,20.000000,4.017833,yes,Both,-,"[0.60298066792523497,1.6736075523361287e-17,9.2903881939506089e-34,5.1572014403148452e-50]",-0.505870163440704345703125,-0.5058701336589060195170170247744151956093362852705136778543315680321875195340302 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,wide_exponent,4096,10322096095657499357,25.934129,24.148103,24.055764,20.000000,4.055764,yes,Both,-,"[3.2617843787809539e-29,9.0532702967131949e-46,5.0255745657830058e-62,2.7897542974514332e-78]",-65.59268951416015625,-65.59269327555488150776766062278388871045172786432349789542906836393403051939105 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,extreme_finite,4096,10322096095657499295,25.928931,24.171772,24.028998,20.000000,4.028998,yes,Both,-,"[1.925072119386236e+28,534314847751.63684,2.9660432318647614e-05,1.6464847440249349e-21]",65.12734222412109375,65.127346028765523545207426082299833753247218536882252197810633399468572469932133 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,near_one,4099,10322096095657499359,26.000930,24.185085,24.016593,20.000000,4.016593,yes,Both,-,"[1.0447451831795096,2.8997503930802959e-17,1.6096848260317964e-33,8.9355457812511994e-50]",0.06315113604068756103515625,0.063151139761744771149852463189190938814143421682274297701996017779757132852336139 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,wide_exponent,4096,10322096095657499357,25.973207,24.199454,24.028872,20.000000,4.028872,yes,Both,-,"[279.54938708294071,7.7590541514832776e-15,4.307140284145071e-31,2.3909431568741984e-47]",8.1269588470458984375,8.1269593218526276965603717987343564084569415244724976083039632724987237766261338 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,extreme_finite,4096,10322096095657499295,26.022657,24.191270,24.003063,20.000000,4.003063,yes,Both,-,"[5.0098439803322917e-20,1.3905110341861625e-36,7.7188868307440791e-53,4.2848429419839901e-69]",-64.113800048828125,-64.113796235451863124774831376509181438042251966024731816806674549792684463109039 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,near_one,4099,10322096095657499359,25.962693,24.152799,24.013122,20.000000,4.013122,yes,Both,-,"[1.1548157158417363,3.2052574923161943e-17,1.7792753339108649e-33,9.8769622142772787e-50]",0.062512673437595367431640625,0.062512669745286719885701932573165067686690137111581665627621599315275165176273273 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,wide_exponent,4096,10322096095657499357,25.952915,24.154037,24.048450,20.000000,4.048450,yes,Both,-,"[23432401020772320,0.65037977838778627,3.6103330235836354e-17,2.0041374246735552e-33]",16.3698177337646484375,16.369816790271109973117205087238363001448077217226902449637697819144005794863329 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,extreme_finite,4096,10322096095657499295,25.880534,24.163613,24.027658,20.000000,4.027658,yes,Both,-,"[4.8264741762657366e-33,1.3396156895622393e-49,7.4363609135055201e-66,4.1280095527981953e-82]",-32.316371917724609375,-32.316370028094117653165372508074257172256480666024940344680625927328493584980905 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,moderate,4099,10322096095657499356,25.977474,24.138654,24.035083,20.000000,4.035083,yes,Both,yes,"[6.41522527712225,1.7805827027046056e-16,-9.8842195689597157e-33,5.4868440729548083e-49]",2.00353527069091796875,2.0035353872419348516649268305141943266470640149817520365666861820328868458962913 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,cancellation,4098,10322096095657499288,46.683655,24.504409,24.016252,20.000000,4.016252,yes,Both,yes,"[-1.1965551038883859e-07,0,0,0]",-1.196555245996933081187307834625244140625e-07,-1.1965551754755974717708527518014233670876945163456733519223050444765622173963702e-07 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,near_one,4099,10322096095657499359,25.935116,24.183020,24.022132,20.000000,4.022132,yes,Both,yes,"[1.0032222542802387,2.7845011137956863e-17,1.545708624315182e-33,8.5804065203819558e-50] ; [1.1098483278340112,3.0804479185076206e-17,1.7099921026428991e-33,9.4923630214066531e-50]",1.00357687473297119140625,1.0035768158257674189368635854208332740856335659539134346018913304416269618692691 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,moderate,4099,10322096095657499356,25.910732,24.173665,24.033763,20.000000,4.033763,yes,Both,yes,"[1.5010856767109688,4.1663497005488793e-17,2.312788683094746e-33,1.2838556235321408e-49] ; [6.8472618406345225,1.900496937777419e-16,1.054987729275047e-32,5.8563583386908427e-49]",16.1396617889404296875,16.139662728687068635103760006664480606823689561120066764019143935355322552829973 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,moderate,4099,10322096095657499356,24.296761,22.240676,21.817420,20.000000,1.817420,yes,Inf,yes,"[-2.0174902967783854,-5.5996604486030095e-17,3.108435980060947e-33,-1.7255285978184637e-49]",-136.0443267822265625,-136.04428997082654660356838684633834963763840941785070423709212066151322168144796 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,wide_exponent,4096,10322096095657499357,24.307980,22.194400,21.763685,20.000000,1.763685,yes,Inf,yes,"[8.3253759191734602,2.3107560085315504e-16,-1.282727262481326e-32,7.1205667056058241e-49]",2772213.75,2772214.528582891558413966128826065404980229940407596127199381800655092889207728 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[30287485871.102478,8.4064660430267718e-07,4.666526078348927e-23,2.590442348598358e-39] ; [2.0009290447377264e-12,5.5536937402726095e-29,3.0829193310836276e-45,1.7113640122155147e-61]",1.12052207790203084414315526373684406280517578125e-12,1.12052207790203084414315526373684406280517578125e-12 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remainder,native,float,native float,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,near_one,4099,10322096095657499359,25.942025,24.196051,24.011707,20.000000,4.011707,yes,Both,yes,"[1.4459245913717083,4.0132469330314787e-17,-2.2277995742789206e-33,1.2366771908072897e-49]",2.0051238536834716796875,2.0051239722322748219797119221081131107158513029013343848994792963571293595758708 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,moderate,4099,10322096095657499356,25.936329,24.161474,24.011590,20.000000,4.011590,yes,Both,yes,"[-6.9355339383837169,-1.9249973666156986e-16,1.0685881993797711e-32,-5.9318561139707965e-49]",-514.08355712890625,-514.08358752550603806804367819424003815790834626890985544825401905207447930345975 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,near_one,4099,10322096095657499359,25.882807,24.206821,24.037830,20.000000,4.037830,yes,Both,-,"[1.3363709947474058,3.7091746195244852e-17,-2.0590055324756691e-33,1.1429776749925342e-49]",2.03400325775146484375,2.0340033758498468053419313401516481710439729679668859465095831820284475316728875 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,moderate,4099,10322096095657499356,25.970199,24.157896,24.042107,20.000000,4.042107,yes,Both,-,"[-2.0865014257806518,-5.791204809537242e-17,3.2147644599340952e-33,-1.7845527610827445e-49]",4.09039974212646484375,4.0903995053326148905358860858142744104816455202766888280678248016451416423900309 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,near_one,4099,10322096095657499359,26.024295,24.249528,24.044767,20.000000,4.044767,yes,Both,yes,"[0.55269132694010847,1.5340265916988462e-17,-8.5155582124565656e-34,4.7270843975025598e-50]",0.502534568309783935546875,0.50253459734799192816357753205665166662298333512757568712234730160451307986898536 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,moderate,4099,10322096095657499356,26.373493,24.515597,24.134985,20.000000,4.134985,yes,Both,yes,"[0.12581300317204658,3.4920123229710991e-18,-1.9384562416186464e-34,1.0760593758366834e-50]",0.125153362751007080078125,0.12515335595759218985762670776642522877909887236869724246011118582427483165407333 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,near_one,4099,10322096095657499359,25.862572,24.142028,24.004617,20.000000,4.004617,yes,Both,yes,"[1.1824685676334994,3.2820095742056004e-17,-1.8218812981616319e-33,1.0113472826765068e-49]",1.004701137542724609375,1.0047011972362246447295975654012007117273041453861923879146230140240858536400124 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,moderate,4099,10322096095657499356,25.903170,24.184962,24.015426,20.000000,4.015426,yes,Both,yes,"[-3.7892785359163863,-1.0517360693230688e-16,5.8383079999561539e-33,-3.2409119832022847e-49]",-2.0422961711883544921875,-2.0422960507526673863576248163047145653164418594230029359825384783793900330048419 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,moderate,4099,10322096095657499286,26.003928,23.806249,23.434312,20.000000,3.434312,yes,Both,-,"[4.6289619994850053,1.2847950479857887e-16,-7.1320452209910275e-33,3.9590804085060258e-49]",2.21360301971435546875,2.2136028244293943935065449407209143524231855323671898139914664237507877804709825 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,boundary,4101,10322096095657499355,25.752912,23.793907,23.793907,20.000000,3.793907,yes,Both,-,"[1.9999994915125949,5.5511137117897206e-17,-3.0814871275706815e-33,1.7105689795575038e-49]",1.3169577121734619140625,1.3169576216227113023399862811927493515571819731899743868099047486919155844722929 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,moderate,4099,10322096095657499356,25.928263,24.165641,24.032275,20.000000,4.032275,yes,Both,yes,"[0.12588044826400613,3.4938843003208855e-18,-1.9394953977963011e-34,1.0766362233939903e-50]",0.12655173242092132568359375,0.1265517397971169012907382368115123955615277371105684603589329831006293410227905 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,boundary,4105,10322096095657499355,26.088438,25.637514,25.637514,20.000000,5.637514,yes,Both,yes,"[0.99899949151259504,2.7727805926652667e-17,-1.5392024281053832e-33,8.5442898762077182e-50]",3.7999393939971923828125,3.7999393211997930734222062320257072616372641916906079170097936373745998626952477 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,near_one,4099,10322096095657499359,26.103955,24.216306,23.832036,20.000000,3.832036,yes,Both,yes,"[0.82702049455505422,2.2954429872297628e-17,-1.2742268280684159e-33,7.07337981558318e-50]",0.75783145427703857421875,0.75783140352952517711597272820328209450854836624944561227614555251248356400115264 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,moderate,4099,10322096095657499356,36.995843,24.543849,23.839199,20.000000,3.839199,yes,Both,yes,"[0.81787985777320493,2.2700726236924011e-17,-1.2601434471972712e-33,6.9952013470446281e-50]",0.75258743762969970703125,0.75258738748294499172523085430305904644591529960072519201515925937266508496163585 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,near_one,4099,10322096095657499359,25.275950,22.280489,21.719563,20.000000,1.719563,yes,Both,-,"[1.2910531439083783,3.5833923159544432e-17,-1.9891823277187433e-33,1.1042180102054063e-49]",0.067876659333705902099609375,0.067876639678375413016438196935378921537412180996987644893091865009030873594530663 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,moderate,4099,10322096095657499356,30.016921,19.071068,17.549803,20.000000,-2.450197,no,Both,-,"[7.9809268400704028,2.2151521839237639e-16,-1.2296564788204311e-32,6.8259646758296938e-49]",1.5260096886555648966520980028175065741589842762283152355351489859458524733781815e-29,1.526001735527136942344300633012790460062604901742459336875657298074386356511999e-29 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,lgamma,native,float,native float,bl::lgamma,moderate,4099,10322096095657499287,25.009417,22.713394,21.494844,20.000000,1.494844,yes,Both,-,"[1.4517946932072958,4.0295397385683879e-17,-2.2368438982003291e-33,1.2416977991371476e-49]",-0.1214393675327301025390625,-0.12143932643985334787613032455513282403867052851105351797395249405986985300137986 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,tgamma,native,float,native float,bl::tgamma,moderate,4099,10322096095657499284,24.535163,22.100955,21.465845,20.000000,1.465845,yes,Both,-,"[17.542208048618924,4.8689408195853669e-16,-2.7028051017204773e-32,1.5003582275022061e-48]",96518560284672,96518593607958.354720117264241334993885666808714814451519813490315313195821331912 diff --git a/validation/metrics/data/native/fastmath/c5d9341113ee43d4baa77cdad227c7b4/f64_accuracy.csv b/validation/metrics/data/native/fastmath/c5d9341113ee43d4baa77cdad227c7b4/f64_accuracy.csv new file mode 100644 index 0000000..46b4f16 --- /dev/null +++ b/validation/metrics/data/native/fastmath/c5d9341113ee43d4baa77cdad227c7b4/f64_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,near_one,4099,10322096095657499359,68.804804,53.029455,53.001693,48.000000,5.001693,yes,Both,yes,"[1.4297151598371682,3.9682567227671501e-17,-2.2028249906198284e-33,1.222813511902914e-49] ; [0.57263374255596289,1.5893779141572608e-17,-8.8228197756404827e-34,4.8976488285171109e-50]",2.00234890239313134685517070465721189975738525390625,2.0023489023931311248105657796259038150310516357421875 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-15.0558510431143677266163649619556963443756103515625,-15.0558510431143677266163649619556963443756103515625 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,wide_exponent,4096,10322096095657499357,82.842054,53.932557,53.150426,48.000000,5.150426,yes,Both,yes,"[-2.5801269239800948e-52,-7.1612907936449556e-69,3.9753149625703952e-85,-2.2067431007912725e-101] ; [6.2882455610389305e-52,1.745338751590589e-68,-9.6885763389319921e-85,5.3782402636604011e-101]",3.7081186370588353126400687774493756982129860731379218490790094277487448813887287e-52,3.7081186370588356835606838461915142713865122279018731858354873035278451266926346e-52 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,extreme_finite,4096,10322096095657499295,83.051539,53.922063,53.033213,48.000000,5.033213,yes,Both,yes,"[4.044152691012953e+59,1.1224778581655917e+43,-6.2310038138368535e+26,34589019503.244186] ; [-3.2763861007278913e+51,-9.0937982164748556e+34,5.0480720806127841e+18,-280.22429269318661]",404415265824909244971463481926668921988920568307135488720896,404415265824909201094180361492905708699283935084133453135872 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,subnormal,4100,10322096095657499290,0.065029,0.000000,0.000000,48.000000,-48.000000,no,Both,yes,"-0 [0,0,0,0] ; [-5.0977693337899818e-320,0,0,0]",0,-5.0977693337899818428138368048143081200626870433746029193431930720419698840140139e-320 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.7781742597549925477551369112916290760040283203125,-0.7781742597549925477551369112916290760040283203125 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",-9.65894031423886190168559551239013671875e-14,-9.65894031423886190168559551239013671875e-14 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,subnormal,4100,10322096095657499290,0.065029,0.000000,0.000000,48.000000,-48.000000,no,Both,yes,"-0 [0,0,0,0] ; [-5.0977693337899818e-320,0,0,0]",0,5.0977693337899818428138368048143081200626870433746029193431930720419698840140139e-320 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,near_one,4099,10322096095657499359,54.941335,53.192655,53.017782,48.000000,5.017782,yes,Both,yes,"[0.61590653178072707,1.7094840314999723e-17,-9.489542660001528e-34,5.267754377148175e-50] ; [0.81645463695581544,2.2661168412757988e-17,-1.2579475468376116e-33,6.9830116513492445e-50]",0.50285974380374887093836377971456386148929595947265625,0.50285974380374892608309676348753773569247609448642907343737535469374577701273665 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,moderate,4099,10322096095657499356,54.943506,53.177920,53.014990,48.000000,5.014990,yes,Both,yes,"[-1.8309845685969375,-5.0820030644741984e-17,2.8210784066974295e-33,-1.5660131006941688e-49] ; [4.4139715148669616,1.2251232014612206e-16,-6.8007999313236564e-33,3.7752023348123534e-49]",-8.0819137299478551739184695179574191570281982421875,-8.0819137299478542859205922880040108996859918106071002798056202021115268507855944 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,wide_exponent,4096,10322096095657499357,54.949502,53.147252,53.012976,48.000000,5.012976,yes,Both,yes,"[-9580440436661.9609,-0.00026591063897079994,1.4761005693908477e-20,-8.1940041940001134e-37] ; [3.5476231799149722e+112,9.8466323425887909e+95,-5.465978970880409e+79,3.0342278527941741e+63]",-3.3987792566896694596919030454680074525269527091652711616914422309578532569280119e+125,-3.3987792566896690857302928923045025855537603060392874444605126408265807925080287e+125 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,extreme_finite,8,10322096095657499292,69.953445,54.906891,54.906891,48.000000,6.906891,yes,Both,yes,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,-2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [-2.4203699467808244e-121,-6.7178761075670899e-138,3.729170365600104e-154,-2.0701054013195242e-170]",-0.46875,-0.46875000000000001387778780781444442934375177282579434799116745646516135614945142 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,near_one,4099,10322096095657499359,54.949938,53.186535,53.032508,48.000000,5.032508,yes,Both,yes,"[0.79583533097289294,2.2088867706407193e-17,1.2261784757776169e-33,6.8066578805404505e-50] ; [0.78671878189697564,2.1835832639176979e-17,1.212132207893789e-33,6.7286854304670572e-50]",1.01158806588287486505350898369215428829193115234375,1.0115880658828749748599930078884108617347838241152708567193976201713984484334261 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,moderate,4099,10322096095657499356,55.299598,53.162157,53.017700,48.000000,5.017700,yes,Both,yes,"[5.6982279612785671,1.5815759705435825e-16,8.7795102884568185e-33,4.8736072335891048e-49] ; [5.6630083746783413,1.571800571553245e-16,8.725245923286967e-33,4.8434844597749865e-49]",1.0062192361850825772506823341245763003826141357421875,1.0062192361850826876012316258994293315599871850773075711644181221348221597609452 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,wide_exponent,4096,10322096095657499357,54.940111,53.173252,53.006391,48.000000,5.006391,yes,Both,yes,"[1.1797107595829603e-08,3.2743551192175876e-25,1.8176322220773076e-41,1.0089885716254063e-57] ; [2.9273558682385512e-68,8.1250447154750139e-85,4.5103058596146572e-101,2.5037227067229757e-117]",402995335272583736023300876476329416171344205099568646324224,402995335272583691479603215316671542832621087480350248383875.97791882737549902199 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,extreme_finite,8,10322096095657499292,54.565310,53.447459,53.447459,48.000000,5.447459,yes,Both,yes,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [2.4203699467808244e-121,6.7178761075670899e-138,3.729170365600104e-154,2.0701054013195242e-170]",8.0016173194558218715832353057948522675740813308632367068153019530691147107160091e+240,8.0016173194558225230457526744094465773333433188328184012700026520990852868662071e+240 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,moderate,4099,10322096095657499356,54.554330,52.138614,51.686686,48.000000,3.686686,yes,Both,yes,"[4.0140439461245272,1.1141210027111679e-16,-6.1846139471420251e-33,3.4331504012674736e-49] ; [4.6948493690620925,1.303082466669906e-16,-7.2335607874113641e-33,4.0154328681048868e-49] ; [-2.3905498163718608,-6.6351086191236997e-17,3.6832251799199798e-33,-2.0446006998131482e-49]",16.454781871478392218932640389539301395416259765625,16.454781871478387679000955424923571552661145956803454037161577039327653437794652 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,cancellation,4098,10322096095657499291,84.914658,inf,48.446122,48.000000,0.446122,yes,Both,yes,"[1.0000000254699517,0,0,0] ; [1.0000005920751864,0,0,0] ; native product cancellation",-1.8906731719479861355648296906882387020083845056983573584830082836560904979705811e-17,-1.8906731719479812051841720593644548787048514882844219009427888522623106837272644e-17 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,wide_exponent,4096,10322096095657499357,67.585226,52.547530,51.967526,48.000000,3.967526,yes,Both,yes,"[-9.1922411412689644e+18,-255.13594407358576,1.4162889975998558e-14,-7.8619832732932151e-31] ; [5.4898291290292038e+49,1.5237336750765229e+33,-84584210473333136,4.6953668993617379] ; [-6.8892614570882749e+59,-1.9121541730805144e+43,1.0614587947935319e+27,-58922799683.532417]",-504638332472916393329054620441347832996909059386484212491501063634944,-504638332472916278725994882779552093420758202664753051535811771629568 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fabs,native,double,native double,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,moderate,4099,10322096095657499356,54.987841,53.178902,53.024599,48.000000,5.024599,yes,Both,yes,"[-4.0291701907573039,-1.1183193789780232e-16,6.2079196171295382e-33,-3.4460876469796998e-49]",16.234212426087250236150794080458581447601318359375,16.234212426087248464261717100553537863564519292427420360394943465998096598923439 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,wide_exponent,4096,10322096095657499357,54.966048,53.184279,53.034276,48.000000,5.034276,yes,Both,yes,"[2.9507000691330746e-25,8.1898378887864514e-42,-4.5462732960391003e-58,2.5236886447505548e-74]",8.7066308979819320541420161769186049656218085566280656265540977462941222974600937e-50,8.7066308979819311102069574980521020700209525169860268542733130882306736168377202e-50 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,near_one,4099,10322096095657499359,55.022120,53.212652,53.036371,48.000000,5.036371,yes,Both,yes,"[0.9803714880397002,2.7210774967692536e-17,1.5105014443513052e-33,8.384967411241868e-50]",1.02002150429685389809719708864577114582061767578125,1.0200215042968537876713460424605364405111022006296562878115184748990877637517355 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,wide_exponent,4096,10322096095657499357,54.902665,53.142478,53.019012,48.000000,5.019012,yes,Both,yes,"[5.654455339035485e-101,1.5694266272779603e-117,8.7120678853189764e-134,4.8361691791892627e-150]",1.7685169305282301591156520034137992060834685455134402926455624168717720163565455e+100,1.7685169305282303528900122951557431771119667320589594598759928180992244301081954e+100 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166,-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143677266163649619556963443756103515625,-7.0558510431143677266163649619556963443756103515625 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,copysign,native,double,native double,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,floor,native,double,native double,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,no,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,ceil,native,double,native double,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,no,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,trunc,native,double,native double,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,no,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round,native,double,native double,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,roundeven,native,double,native double,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_decimals,native,double,native double,bl::round_decimals,moderate,4099,10322096095657499356,55.241937,53.207435,53.013030,48.000000,5.013030,yes,Both,yes,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",4.0039999999999995594635038287378847599029541015625,4.004 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_significant,native,double,native double,bl::round_significant,wide_exponent,4096,10322096095657499357,62.492824,53.239040,53.008690,48.000000,5.008690,yes,Both,yes,"[1.4846549805182609e+20,4120.7453574894662,-2.2874731872510136e-13,1.2698027003493837e-29]",148465500000000016384,148465500000000000000 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,lround,native,double,native double,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,llround,native,double,native double,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remquo,native,double,native double,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.9441489568856322733836350380443036556243896484375 ; 1,-0.9441489568856322733836350380443036556243896484375 ; 1 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",0 ; -8,-0 ; -8 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ldexp,native,double,native double,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbn,native,double,native double,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbln,native,double,native double,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.7247924004236494521791200895677320659160614013671875 ; -815,0.7247924004236494521791200895677320659160614013671875 ; -815 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,near_one,4099,10322096095657499359,54.920710,53.127507,53.001106,48.000000,5.001106,yes,Both,yes,"[1.0010388911274162,2.7784410636872319e-17,1.5423446207347879e-33,8.5617325492325808e-50]",1.0005193107218952608405970750027336180210113525390625,1.0005193107218951498457515954360620198623563387038363607072361122298411008899428 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,wide_exponent,4096,10322096095657499357,55.009451,53.211448,53.027507,48.000000,5.027507,yes,Both,yes,"[6.0219100959119555e-185,1.6714158101760344e-201,9.2782215808997173e-218,5.1504476133444428e-234]",7.7600967106808367478172926221258513837894764415588410983624981464748121495074265e-93,7.7600967106808375930900190108944118736382926995509918646504739659308953242516058e-93 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,extreme_finite,4096,10322096095657499295,54.924178,53.221411,53.017887,48.000000,5.017887,yes,Both,yes,"[2.3783259304591718e+282,6.6011805201470536e+265,3.664391301587163e+249,2.0341457971291071e+233]",1.542182197556168240060235866024934642345121301250108457830389998905645354877265e+141,1.5421821975561680709533351179752169384434445730363281277866248379626469712289668e+141 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,moderate,4099,10322096095657499356,55.046807,53.154188,52.692972,48.000000,4.692972,yes,Both,yes,"[-1.026902362492109,-2.8502266172017703e-17,1.5821936079084388e-33,-8.7829388645734799e-50]",-1.008888219657574580878645065240561962127685546875,-1.0088882196575747194514136639017574465308922854914415696696230333755816053111867 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,wide_exponent,4096,10322096095657499357,54.974662,53.039682,52.723772,48.000000,4.723772,yes,Both,yes,"[2.002422411599337e+53,5.5578386659575401e+36,-3.0852202270490126e+20,17126.412660545335]",585039558198610304,585039558198610225.34100378147917539852092834729511392201546883422518707173366654 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,moderate,4099,10322096095657499356,54.875942,52.699142,52.296238,48.000000,4.296238,yes,Both,yes,"[-6.832833876256192,-1.8964923732145955e-16,1.0527647493844247e-32,-5.8440183214016046e-49] ; [4.4299110555054249,1.2295473127159131e-16,-6.8253586822159713e-33,3.7888351801606942e-49]",8.1432015043349768035341185168363153934478759765625,8.1432015043349753310215069499059937406110597175203571183027746754807131183654083 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,wide_exponent,4096,10322096095657499357,83.835524,53.981284,52.722096,48.000000,4.722096,yes,Both,yes,"[3.0900587929049188e-234,8.5766360483211479e-251,-4.7609894073381275e-267,2.6428800300116337e-283] ; [2.970069684721122e-242,8.2435993717964229e-259,-4.5761169141769325e-275,2.540255180747926e-291]",3.0900587929049193702454679907420486743297512979591235842153811313882487753757378e-234,3.0900587929049189543018606534397317978098396795986767283237714870956245237140656e-234 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,moderate,4099,10322096095657499356,55.119448,53.286087,53.039550,48.000000,5.039550,yes,Both,yes,"[-6.2195443657144018,-1.7262703393734485e-16,9.5827253874994272e-33,-5.3194811819309447e-49]",0.0635979907313855841177741012870683334767818450927734375,0.063597990731385577247913600517210215030362027688523651204123610577863803139799732 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,argument_reduction,4114,10322096095657499282,55.232801,53.244266,53.035224,48.000000,5.035224,yes,Both,yes,"near 2^32 * pi/2 [-6746518852.260994,0,0,0]",1.552177995945118398166302775553759829563205130398273468017578125e-05,1.5521779959451182299964044512799051330689624190070061035685086340903998302805766e-05 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,moderate,4099,10322096095657499356,55.064454,53.228976,53.034133,48.000000,5.034133,yes,Both,-,"[4.1844906090946523,1.1614294551361571e-16,-6.4472286128500595e-33,3.5789308255041227e-49]",-0.50371892599878986818140447212499566376209259033203125,-0.50371892599878992279786139952002581707904055298349253880993038665240233830314629 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,argument_reduction,4114,10322096095657499282,57.684459,53.229042,53.057722,48.000000,5.057722,yes,Both,-,"near 2^96 * pi/2 [-1.2445130665611575e+29,0,0,0]",-0.502253255921150554286214173771440982818603515625,-0.50225325592115050071185754648530613739144383428589081390350064471629529975977222 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,moderate,4099,10322096095657499356,54.965439,53.108816,52.837672,48.000000,4.837672,yes,Both,yes,"[-2.232968427699566,-6.197732404232731e-17,3.440432607822303e-33,-1.9098237479377461e-49]",1.28272349966451404412737247184850275516510009765625,1.2827234996645138847564885315917437713989560234224938491038236128612612496872465 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,argument_reduction,4114,10322096095657499282,54.836136,53.156556,53.028205,45.000000,8.028205,yes,Both,yes,"near 2^79 * pi/2 [-9.4948811840908286e+23,0,0,0]",-0.50984786877362353596510047282208688557147979736328125,-0.50984786877362348045650552914101529913692633601847796081734940649152066052837848 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,near_one,4099,10322096095657499359,55.076264,53.013973,52.693509,48.000000,4.693509,yes,Both,yes,"[0.69084897511107168,1.9174910967675087e-17,-1.0644213825725161e-33,5.9087256341767488e-50]",0.6045578974549419282169537837035022675991058349609375,0.60455789745494184521062137483289791333043169413541191538511529635270202509108926 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,moderate,4099,10322096095657499356,54.861463,53.032964,52.752464,48.000000,4.752464,yes,Both,yes,"[2.7271853311214098,7.5694598675774267e-17,-4.2018943144802738e-33,2.3325199074887691e-49]",1.219341175070450589146275888197124004364013671875,1.2193411750704504284332317205702958914241077638601847892988778474321517604825199 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,near_one,4099,10322096095657499359,54.993803,53.170510,53.040656,48.000000,5.040656,yes,Both,yes,"[1.3489527984700374,3.7440961399849353e-17,-2.0783908705107242e-33,1.1537386993058641e-49] ; [0.85379739020999446,2.3697638024400127e-17,-1.3154831681960814e-33,7.302398509190685e-50]",1.0065123671465141530489972865325398743152618408203125,1.0065123671465142616892414740655812810119461135218360142280212527802839300485563 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,moderate,4099,10322096095657499356,54.890626,53.179569,53.060948,48.000000,5.060948,yes,Both,yes,"[-4.7266626831272092,-1.311912435111087e-16,7.2825769587619272e-33,-4.0426423091110703e-49] ; [2.8962761555613667,8.0387811839426525e-17,-4.4624199801683043e-33,2.4771407037650929e-49]",-1.0210524446594291259060582888196222484111785888671875,-1.0210524446594292345764275054094005619467300994098247323364498554603476784958796 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,extreme_finite,8,10322096095657499293,62.132485,54.509980,54.509980,48.000000,6.509980,yes,Both,yes,"huge positive [1.6853373139334212e+307,4.6777507254719996e+290,-2.5966732794380218e+274,1.4414432311305024e+258] ; tiny negative [-2.7813423231340017e-308,-0,0,-0]",1.5707963267948965579989817342720925807952880859375,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,moderate,4099,10322096095657499356,54.898778,52.921476,52.422752,48.000000,4.422752,yes,Both,yes,"[-0.50335035028515207,-1.3970778708492839e-17,7.7553400970558289e-34,-4.3050785697750387e-50]",-0.527471766697775290566596595454029738903045654296875,-0.5274717666977753779398223907170077140407553909392966159005201438307403789636427 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,boundary,4105,10322096095657499355,54.919616,53.086611,53.066141,48.000000,5.066141,yes,Both,yes,"[-0.9999991973384238,-2.7755553337294841e-17,1.5407427188138168e-33,-8.552840207253314e-50]",-1.5695293132325520701897403341718018054962158203125,-1.5695293132325522366341318908043706690745267178940372928026218495677083294449175 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,moderate,4099,10322096095657499356,54.885654,52.861237,52.325679,48.000000,4.325679,yes,Both,-,"[-0.50414043989940849,-1.3992708100524456e-17,7.7675133550305953e-34,-4.3118360854191824e-50]",2.0991827056155738517873032833449542522430419921875,2.0991827056155742237087238848295169418258006344663652219436700791519481199702843 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,boundary,4105,10322096095657499355,54.933501,53.208019,53.015630,48.000000,5.015630,yes,Both,-,"[0.99999951942877319,2.7755562277097889e-17,-1.5407432150725758e-33,8.5528429620428158e-50]",0.00098037876895050468130377030462341281236149370670318603515625,0.00098037876895050478897482934485258576844002644995119255737105648210814670714088092 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,moderate,4099,10322096095657499356,54.974199,53.158758,53.019599,48.000000,5.019599,yes,Both,-,"[-2.7628513559780572,-7.6684529725591843e-17,4.2568465266952151e-33,-2.3630245131163269e-49]",0.063111558041546500508189865286112762987613677978515625,0.063111558041546493595944022576030893684783578049870680283049711049275225101317397 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,boundary,4099,10322096095657499289,54.951607,53.169177,53.022036,48.000000,5.022036,yes,Both,-,"[326.47996564801747,9.061639373531479e-15,-5.0302203366722636e-31,2.7923332183556269e-47]",6.1439480220514836164654240272397757603181465874882434277975712709632833055792003e+141,6.1439480220514842882409559528883970846034473863532678303012402569115463152702114e+141 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,moderate,4099,10322096095657499356,54.935842,53.180629,53.025408,48.000000,5.025408,yes,Both,-,"[5.0109819009809229,1.3908268706122392e-16,-7.7206400751053074e-33,4.2858161881128051e-49]",32.244515813988982699811458587646484375,32.244515813988979182444910558923716242085594124376112958709781738645907303764812 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,boundary,4099,10322096095657499289,54.972606,53.164620,53.020447,48.000000,5.020447,yes,Both,-,"[-250.99202946082733,-6.9664282526201528e-15,3.8671445227290451e-31,-2.1466964443434239e-47]",2.7788842653856641449312255150961427650361335071502829578141633319949134903163359e-76,2.7788842653856638407547596404961219062300898310358581460949384897692395968312002e-76 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,moderate,4099,10322096095657499356,55.079607,52.742105,52.069820,48.000000,4.069820,yes,Both,yes,"[0.22945102518139038,6.3685452795056546e-18,-3.5352528013375154e-34,1.962459528957747e-50]",0.257909259836876014748696661627036519348621368408203125,0.25790925983687596018681194203452833842202602062990407635094999633494016409955893 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,cancellation,4098,10322096095657499288,76.448711,52.361124,52.050168,48.000000,4.050168,yes,Both,yes,"[-2.0909442431168455e-28,0,0,0]",-2.0909442431168459376494291507228931385860662207337082237136920152161951018832814e-28,-2.0909442431168454892339205665628280516014256752064451016842981803628056331115582e-28 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,near_one,4099,10322096095657499359,54.918227,53.166316,53.041728,48.000000,5.041728,yes,Both,-,"[1.1335639126739003,3.1462718893368611e-17,1.7465317466363379e-33,9.695198791772263e-50]",0.125366574619705295479121787138865329325199127197265625,0.12536657461970530900080502001741556309701459949497062977512985254006361141481408 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,wide_exponent,4096,10322096095657499357,54.929145,53.171869,53.045970,48.000000,5.045970,yes,Both,-,"[4.6261311118266506e+112,1.2840093188211806e+96,7.1276835479426902e+79,3.9566591935839502e+63]",259.421251321115732935140840709209442138671875,259.42125132111570503685832403601672523060244723042283551553508070299190699694996 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,extreme_finite,4096,10322096095657499295,54.890700,53.179074,53.016960,48.000000,5.016960,yes,Both,-,"[2.0331470333148491e-224,5.6431166220861893e-241,3.1325590022425128e-257,1.7389195651432225e-273]",-515.069475975312570881214924156665802001953125,-515.06947597531262739711907680169329239742647250082611831496163075456316319684835 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,near_one,4099,10322096095657499359,54.995861,53.187566,53.019233,48.000000,5.019233,yes,Both,-,"[1.4195991778008823,3.9401792323337023e-17,2.1872388524433752e-33,1.2141614671686702e-49]",0.505483643936027959853163338266313076019287109375,0.50548364393602801522994455993418454780195288621099385724841685838532575193733228 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,wide_exponent,4096,10322096095657499357,54.961217,53.191544,53.045986,48.000000,5.045986,yes,Both,-,"[1.6478667181302047e-79,4.5737489299541154e-96,2.5389406854448656e-112,1.4093952035692334e-128]",-261.71171993614638040526187978684902191162109375,-261.71171993614635226097107489196965564142826014659637604512890701616180385411886 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,extreme_finite,4096,10322096095657499295,54.951425,53.191636,53.032071,48.000000,5.032071,yes,Both,-,"[3.0682846229157043e-158,8.5162005861608278e-175,4.7274409865410026e-191,2.624256915407243e-207]",-523.24720667460906042833812534809112548828125,-523.24720667460911724330320979055400330344628738302026449859537432674608012400159 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,near_one,4099,10322096095657499359,54.958112,53.143081,53.018669,48.000000,5.018669,yes,Both,-,"[0.74875470021249213,2.0782117699305384e-17,1.1536392785119411e-33,6.4039844455795532e-50]",-0.1256604383656476919828293148384545929729938507080078125,-0.12566043836564767821108349467351605169970965007622302204561391695316098182502685 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,wide_exponent,4096,10322096095657499357,55.006875,53.165767,53.021068,48.000000,5.021068,yes,Both,-,"[4.6201923918188489e+258,1.2823609928988147e+242,7.1185335009872046e+225,3.9515798971807595e+209]",258.66466006061358484657830558717250823974609375,258.66466006061361314780285273352542290302251199814003016169435342215632974918998 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,extreme_finite,4096,10322096095657499295,54.953390,53.178424,53.029150,48.000000,5.029150,yes,Both,-,"[2.8445937992650119e+257,7.8953338291249174e+240,4.3827907020981923e+224,2.4329375747912342e+208]",257.45402025901483966663363389670848846435546875,257.45402025901486767802909135885153181987420064870956774702074158124472305183714 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,moderate,4099,10322096095657499356,54.959306,53.124311,53.027379,48.000000,5.027379,yes,Both,yes,"[6.4021109691987137,1.7769427510524221e-16,-9.864013778295833e-33,5.475627605941909e-49]",2.001765225637418321724680936313234269618988037109375,2.0017652256374185397874546144576830053673472448209221871064631219426441727909283 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,cancellation,4098,10322096095657499288,83.183549,53.987083,53.147787,48.000000,5.147787,yes,Both,yes,"[3.1953685246800882e-08,0,0,0]",3.1953684736281895160448819626086702783140935935080051422119140625e-08,3.1953684736281891958290169482972474912634475149295662224530800762968705228371108e-08 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,near_one,4099,10322096095657499359,54.959216,53.190567,53.032687,48.000000,5.032687,yes,Both,yes,"[1.0146951632466654,2.8163448330305746e-17,1.563385439457318e-33,8.6785325562461659e-50] ; [0.67203279182024089,1.86526569695489e-17,1.0354304619014043e-33,5.7477936960060001e-50]",1.009851987115524707405711524188518524169921875,1.0098519871155248170101935707300539046159555693972004409710861335008920239838475 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,moderate,4099,10322096095657499356,54.934515,53.163295,51.544293,48.000000,3.544293,yes,Both,yes,"[4.8746218874848095,1.3529793639568437e-16,7.5105442085379375e-33,4.1691895538919707e-49] ; upper endpoint [8,0,0,0]",318806.7246159983915276825428009033203125,318806.72461599848861202218910752969331394204069607599640906241960083392617731566 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,moderate,4099,10322096095657499356,53.278021,51.216249,50.843118,48.000000,2.843118,yes,Inf,yes,"[-0.12598239680403012,-3.4967139407324243e-18,1.9410661637644512e-34,-1.0775081736660592e-50]",-5.036966535935927210927633319859086924452640232630074024200439453125e-07,-5.0369665359359247171059931113138371384365138382213074202619030423806648231460384e-07 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,wide_exponent,4096,10322096095657499357,53.261106,51.258453,50.915855,48.000000,2.915855,yes,Inf,yes,"[3178858.3859193348,8.8231044301760176e-11,-4.8978068435268183e-27,2.7188289639250675e-43]",3280184465858375893424625758878219769323978752,3280184465858377437606968244219065735294846924.9874778095912486192020477914613844 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.1588709556304993e+103,8.7676281669016289e+86,4.8670113311231216e+70,2.7017340204622107e+54] ; [5.476364839089647e-60,1.5199965839012416e-76,8.4376760239937101e-93,4.6838510980827309e-109]",4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60,4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remainder,native,double,native double,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,near_one,4099,10322096095657499359,54.925027,52.983593,52.654993,48.000000,4.654993,yes,Both,yes,"[1.4755959292519478,4.095601439246665e-17,-2.2735155087697884e-33,1.262054632339298e-49]",2.0724994727921046688834394444711506366729736328125,2.072499472792104961138580290412029520398475094027248170955683086677283903718196 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,moderate,4099,10322096095657499356,54.834485,52.816036,52.372772,48.000000,4.372772,yes,Both,yes,"[-4.9457633001919792,-1.3727250725548088e-16,7.6201549101529364e-33,-4.2300357162311155e-49]",-70.285499863740909631815156899392604827880859375,-70.285499863740921684683962274930479722778438577605829741424016420435749772886443 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,near_one,4099,10322096095657499359,54.867700,52.806953,52.555697,48.000000,4.555697,yes,Both,-,"[1.4489040565134639,4.0215166100350915e-17,-2.2323901671867327e-33,1.2392254817787567e-49]",2.24663622332004297987850804929621517658233642578125,2.2466362233200426404943290683585496609798120974353391573364879492599058374097048 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,moderate,4099,10322096095657499356,54.757799,52.742892,52.224844,48.000000,4.224844,yes,Both,-,"[-2.7831989915427577,-7.7249290063107149e-17,4.2881970232004435e-33,-2.3804275346430945e-49]",8.116254244465199718661096994765102863311767578125,8.1162542444651981765659860122604536067229682150365564635338760616491926011030202 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,near_one,4099,10322096095657499359,54.957464,52.958304,52.587189,48.000000,4.587189,yes,Both,yes,"[0.63164064184364299,1.7531549596595613e-17,-9.7319650097491624e-34,5.4023258143349531e-50]",0.559180890600668334400324965827167034149169921875,0.55918089060066825175256349584410551988799504685528248603277429300680295289939666 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,moderate,4099,10322096095657499356,55.337079,53.366180,52.815171,48.000000,4.815171,yes,Both,yes,"[-0.90950053058162084,-2.5243710749012794e-17,1.401307445026578e-33,-7.7788189502357886e-50]",-0.7208924382452133183818432371481321752071380615234375,-0.72089243824521340935638969305309450551713412005667581668201295126021631664261271 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,near_one,4099,10322096095657499359,54.258376,52.080700,51.634176,48.000000,3.634176,yes,Both,yes,"[0.79188358526673819,2.1979184729646278e-17,-1.2200898474671472e-33,6.7728592038471104e-50]",0.72631784732193438447467315199901349842548370361328125,0.72631784732193459229635852840518155981992007046780729911536441213723551933788868 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,moderate,4099,10322096095657499356,54.673318,52.354089,50.978920,48.000000,2.978920,yes,Both,yes,"[0.26530457278232333,7.3636811310318998e-18,-4.0876641688347148e-34,2.2691094385877768e-50]",0.2622868991029132512693422540905885398387908935546875,0.26228689910291313307616683229618152015365884950216715944642521155937562589327641 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,moderate,4099,10322096095657499286,54.942220,52.683208,51.462718,48.000000,3.462718,yes,Both,-,"[1.0169010415408872,2.8224673752099894e-17,-1.5667841331057305e-33,8.69739909595674e-50]",0.1835954651539408455374058348752441816031932830810546875,0.18359546515394090469902356818101868577050561801338786071005416558637260776062088 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,boundary,4101,10322096095657499355,54.122919,51.380612,50.892826,48.000000,2.892826,yes,Both,-,"[1.0000004784732373,2.775558889592903e-17,-1.5407446927145369e-33,8.5528511646034525e-50]",0.00097823637133060922267679959674069323227740824222564697265625,0.00097823637133060969060211558665469414717087253344931890695562029519397310248549682 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,moderate,4099,10322096095657499356,54.389048,51.796068,51.050443,48.000000,3.050443,yes,Both,yes,"[-0.14662654054075797,-4.0697040332370861e-18,2.2591395605548382e-34,-1.2540743779847697e-50]",-0.1476910984344122768074925033943145535886287689208984375,-0.14769109843441221347308114909969154678376641106018727585121519885612519881701409 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,boundary,4105,10322096095657499355,55.375335,53.840397,53.427151,48.000000,5.427151,yes,Both,yes,"[-0.5,0,0,0]",-0.54930614433405489105410879346891306340694427490234375,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,near_one,4099,10322096095657499359,55.131197,53.226265,52.909585,48.000000,4.909585,yes,Both,yes,"[0.82266315494831599,2.283348940335983e-17,-1.2675132834072306e-33,7.0361121562846938e-50]",0.75534142520150826527469689608551561832427978515625,0.75534142520150835455818926054274013477949273460778658484922104863788928343365273 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,moderate,4099,10322096095657499356,59.766809,53.443944,52.892710,48.000000,4.892710,yes,Both,yes,"[0.22945102518139038,6.3685452795056546e-18,-3.5352528013375154e-34,1.962459528957747e-50]",0.25443499105294209439165342701016925275325775146484375,0.25443499105294212482044152307161617587897965795413196995183827967925968259422636 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,near_one,4099,10322096095657499359,54.504325,52.030408,51.416011,48.000000,3.416011,yes,Both,-,"[1.4171280217980677,3.9333203966042888e-17,-2.1834314337689169e-33,1.2120479252302846e-49]",0.045057028848666698384040074643053230829536914825439453125,0.045057028848666713380921770188418775180784369819168540822693433627584730980683186 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,moderate,4099,10322096095657499356,57.259651,52.117956,51.704092,48.000000,3.704092,yes,Both,-,"[1.2494329362879579,3.4678730339797679e-17,-1.9250562444005181e-33,1.0686208831159439e-49]",0.0772340893897989488880995168074150569736957550048828125,0.077234089389798927834491217736226376663789083869112553446942539303117662664711823 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,lgamma,native,double,native double,bl::lgamma,moderate,4099,10322096095657499287,54.054386,49.691963,42.954379,48.000000,-5.045621,no,Both,-,"[1.9980464602004848,5.5456929609634243e-17,-3.0784780063816265e-33,1.7088985817435157e-49]",-0.000824694886130128423928908887319266796112060546875,-0.00082469488613003165481098263861670595600473230058300022886763087074162031943339488 +6,c5d9341113ee43d4baa77cdad227c7b4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,tgamma,native,double,native double,bl::tgamma,moderate,4099,10322096095657499284,53.401158,51.044818,50.580874,48.000000,2.580874,yes,Both,-,"[18.308810195400913,5.0817156581064761e-16,-2.8209188641139949e-32,1.5659245367694002e-48]",863228303211144.125,863228303211144.63758440505114972868884503676101564745281598139807432829532816527 diff --git a/validation/metrics/data/native/fastmath/c5d9341113ee43d4baa77cdad227c7b4/native_accuracy_run.json b/validation/metrics/data/native/fastmath/c5d9341113ee43d4baa77cdad227c7b4/native_accuracy_run.json new file mode 100644 index 0000000..93102b6 --- /dev/null +++ b/validation/metrics/data/native/fastmath/c5d9341113ee43d4baa77cdad227c7b4/native_accuracy_run.json @@ -0,0 +1,90 @@ +{ + "accuracy_samples": 4096, + "architecture": "x86_64", + "compiler": "MinGW", + "configuration": { + "build": { + "architecture": "x86_64", + "compiler-id": "GNU", + "compiler-version": "13.1.0", + "config": "Release", + "flags-hash": "58af7dec3ba5f6621e8a5a7b2fb270d74cd1bcbd3a5216604c9df63e81c05960", + "frontend-variant": "GNU", + "optimized": "1", + "processor": "AMD64", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Windows" + }, + "consumer": { + "arm64": "0", + "fast-math": "on", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "1" + }, + "harness": { + "qdpp": "on", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "available", + "simd": "on", + "tu-x86-fma": "0", + "x86": "1" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "1", + "f256-simd": "1", + "msvc-guarded": "0", + "neon": "0", + "runtime-check": "1", + "runtime-path": "0", + "scalar-x86": "0", + "sse2": "1", + "trig-simd": "1", + "wasm-simd": "0" + } + }, + "consumer_mode": "fastmath", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-mingw-release\\validation\\fltx_accuracy_fastmath.exe", + "sha256": "50f20f4e1b6b6fd08e7b96e2d30e297ad9921e0e193c2aa4d6a5ea4b54206307", + "wasm-sha256": "not-present" + } + }, + "host": { + "machine": "AMD64", + "node": "not-used", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "outputs": { + "f32_accuracy.csv": "c91181fa77008ed3332d76d5148fa66c6a6d5934abf434977e6064433f299f3a", + "f64_accuracy.csv": "9bfa341029cd5d01e70c2f116f1196eadaa97a3fe4c9937479205c6fac0b35fd" + }, + "platform": "windows", + "policy": "native-float-libm-baseline-v1", + "precisions": [ + "f32", + "f64" + ], + "run_id": "c5d9341113ee43d4baa77cdad227c7b4", + "sample_mode": "standard", + "schema_version": 2, + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete", + "target": "windows/x86_64/MinGW", + "thresholds": "advisory" +} diff --git a/validation/metrics/data/native/fastmath/d3503db8b5214fffb112436fc383eea4/f32_accuracy.csv b/validation/metrics/data/native/fastmath/d3503db8b5214fffb112436fc383eea4/f32_accuracy.csv new file mode 100644 index 0000000..6f6a7c8 --- /dev/null +++ b/validation/metrics/data/native/fastmath/d3503db8b5214fffb112436fc383eea4/f32_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,near_one,4099,10322096095657499359,38.457645,24.037482,24.000509,20.000000,4.000509,yes,No,no,"[1.1885061456019219,3.2987672193893811e-17,-1.831183659922398e-33,1.0165111307816044e-49] ; [0.81220021471607706,2.2543084474582116e-17,-1.2513925714875483e-33,6.9466242285517913e-50]",2.000706195831298828125,2.00070631504058837890625 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,moderate,4099,10322096095657499356,41.522382,24.071404,24.000368,20.000000,4.000368,yes,No,no,"[6.8051724535006084,1.8888147861053107e-16,-1.0485028323932781e-32,5.8203599295385438e-49] ; [1.1968659760618667,3.3219704100358647e-17,-1.8440640181726446e-33,1.0236611659290266e-49]",8.0020389556884765625,8.002038478851318359375 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,wide_exponent,4096,10322096095657499357,46.805352,24.393682,24.006151,20.000000,4.006151,yes,No,no,"[6.8663278648288954e-15,1.9057888225395823e-31,-1.0579253154283554e-47,5.8726652176119575e-64] ; [-3.2984332805285199e-15,-9.154991433081627e-32,5.0820411396266402e-48,-2.821099542652883e-64]",3.567894203281192500032403813747805543243885040283203125e-15,3.567894415039429313607488580828430713154375553131103515625e-15 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,extreme_finite,4096,10322096095657499295,47.155091,24.409642,24.030594,20.000000,4.030594,yes,No,no,"[223002548.53621882,6.1895640983749784e-09,-3.4358982872045742e-25,1.9073066943623286e-41] ; [279175322748.44623,7.748671780562106e-06,-4.3013769105216293e-22,2.3877438418260673e-38]",279398318080,279398334384 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,No,no,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,20.000000,inf,yes,No,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.77817428112030029296875,-0.77817428112030029296875 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,No,yes,"one [1,0,0,0] ; [1.0000016689300537,0,0,0]",-1.6689300537109375e-06,-1.6689300537109375e-06 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,No,yes,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,near_one,4099,10322096095657499359,26.016181,24.166616,24.014549,20.000000,4.014549,yes,No,no,"[1.4059396726628588,3.902266489560654e-17,-2.1661930524667106e-33,1.2024787013157959e-49] ; [1.4325550147665504,3.9761389035901386e-17,-2.2072004799367987e-33,1.2252423963947649e-49]",2.0140857696533203125,2.014085888497646692485432140529155731201171875 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,moderate,4099,10322096095657499356,25.989725,24.178659,24.028212,20.000000,4.028212,yes,No,no,"[-1.4739640396494451,-4.0910720357208028e-17,2.2710011847286731e-33,-1.2606589021183906e-49] ; [2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49]",-4.02748775482177734375,-4.0274875194135120182181708514690399169921875 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,wide_exponent,4096,10322096095657499357,25.942256,24.179837,24.024630,20.000000,4.024630,yes,No,no,"[-1122057943862.8401,-3.1143364106002161e-05,1.7288039947384127e-21,-9.5967900001126686e-38] ; [-8694665162187.9277,-0.00024132543636168146,1.3396252793822586e-20,-7.4364141477004576e-37]",9755918009047724494684160,9755918580702648912052224 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,extreme_finite,8,10322096095657499292,40.953446,25.906891,25.906891,20.000000,5.906891,yes,No,no,"large neighbour [844424863023104,0.023437498137354851,-1.3010425035850288e-18,7.2222367174802835e-35] ; negative small neighbour [-5.5511156525213747e-16,-1.5407441024465825e-32,8.5528478879580846e-49,-4.7477843256638533e-65]",-0.46875,-0.468750007450577044210149324499070644378662109375 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,near_one,4099,10322096095657499359,25.952819,24.167429,24.029610,20.000000,4.029610,yes,No,yes,"[1.2982596956909869,3.6033945152474569e-17,2.0002857788178657e-33,1.1103816637369289e-49] ; [1.2798202945460211,3.5522148959688557e-17,1.9718753829605394e-33,1.0946107259271694e-49]",1.01440775394439697265625,1.0144078131795243086497270702039165563127339636105403630860948828655528161513261 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,moderate,4099,10322096095657499356,26.239727,24.172640,24.024913,20.000000,4.024913,yes,No,yes,"[6.5374711177505596,1.8145127394371573e-16,1.0072569108993997e-32,5.5913990709666165e-49] ; [3.2450059050955762,9.0067006772042607e-17,4.99972323386958e-33,2.775403925497677e-49]",2.0146253108978271484375,2.0146254289230677898843256855109580140862879734170743102717224833311181385074994 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,wide_exponent,4096,10322096095657499357,25.917644,24.144253,24.027945,20.000000,4.027945,yes,No,yes,"[0.027902000922864607,7.7443609644191634e-19,4.2989839268532189e-35,2.3864154690429567e-51] ; [14499.326437201289,4.0243715130342775e-13,2.2339749567081166e-29,1.2401052166866692e-45]",1.924365506056346930563449859619140625e-06,1.9243653935555734717265282397956262784302341636296406554453298274232840831100044e-06 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,extreme_finite,8,10322096095657499292,25.430169,24.584963,24.584963,20.000000,4.584963,yes,No,yes,"large positive [844424930131968,0.0234375,1.3010426069826053e-18,7.2222372914521344e-35] ; small negative [5.5511151231257827e-16,1.5407439555097887e-32,8.5528470722950261e-49,4.7477838728798994e-65]",1521180780720166262527502581760,1521180720273875281796043846451.2 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,moderate,4099,10322096095657499356,25.971753,24.150757,24.027403,20.000000,4.027403,yes,Both,yes,"[-1.9749460259140985,-5.4815763759044581e-17,3.0428861518852258e-33,-1.6891411335680094e-49] ; [-6.4158772339979464,-1.7807636570882208e-16,9.885224067575198e-33,-5.4874016817003646e-49] ; [3.4130940773098271,9.4732390746028102e-17,-5.2587040692013754e-33,2.9191671686586848e-49]",16.0841045379638671875,16.0841054786133099696598947048187255859375 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; next value after one [1.0000001192092896,0,0,0] ; native product cancellation",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,wide_exponent,4096,10322096095657499357,32.556508,24.197422,24.009758,20.000000,4.009758,yes,Both,yes,"[0.0072982921122313887,2.0256829858598637e-19,-1.124479945746528e-35,6.2421176324852115e-52] ; [1.9523314176984748e-12,5.4188082290698013e-29,-3.0080428309707814e-45,1.6697992050011997e-61] ; [-2.3939769383437016e-07,-6.6446207934270406e-24,3.6885054973828883e-40,-2.0475318648254738e-56]",-2.39397678569730487652122974395751953125e-07,-2.3939769274275411635131445493727566081466591810245070348628360079601407051086426e-07 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,NaN,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",3588998231833025183056134144,3588998231833025183056134144 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,NaN,yes,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fabs,native,float,native float,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,moderate,4099,10322096095657499356,25.964756,24.164418,24.008593,20.000000,4.008593,yes,NaN,yes,"[-4.0059402826070123,-1.1118717842559279e-16,6.1721282765599288e-33,-3.4262194617884094e-49]",16.0475597381591796875,16.0475587873306722030974924564361572265625 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,wide_exponent,4096,10322096095657499357,25.989404,24.167423,24.020149,20.000000,4.020149,yes,NaN,yes,"[797963256397175.88,0.022147929501425297,-1.2294570640128564e-18,6.8248577012755909e-35]",636745309315666385691207532544,636745346742277146199547969536 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,near_one,4099,10322096095657499359,26.024612,24.188379,24.024049,20.000000,4.024049,yes,NaN,no,"[0.99957607711604157,2.774380939196801e-17,1.5400907988887275e-33,8.5492213246980834e-50]",1.0004241466522216796875,1.0004240880080409757745092099607730518546575501261053598713520202379186199441578 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,wide_exponent,4096,10322096095657499357,25.897082,24.141136,24.016290,20.000000,4.016290,yes,NaN,no,"[1.4835519773135318e-08,4.1176839086041523e-25,2.2857737417304193e-41,1.2688593185763538e-57]",67405800,67405796.027411572915787349932438540624582792272908782750245310659982961460931995 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,No,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",-4402.79248046875,-4402.79248046875 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,NaN,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055850982666015625,-7.055850982666015625 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,NaN,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",3588998231833025183056134144,3588998231833025183056134144 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,moderate,4099,10322096095657499356,48.522678,24.128146,24.008521,20.000000,4.008521,yes,-,yes,"[6.6457375410806137,1.8445627084308674e-16,-1.0239379946324441e-32,5.6839976871472472e-49] ; [2.6220427968328792,7.27763071149101e-17,-4.0398965903082395e-33,2.2425931058324353e-49]",4.0236949920654296875,4.0236947536468505859375 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,-,yes,"one [1,0,0,0] ; [1.0000016689300537,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,copysign,native,float,native float,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,floor,native,float,native float,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,NaN,yes,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,ceil,native,float,native float,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,trunc,native,float,native float,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round,native,float,native float,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,NaN,yes,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,roundeven,native,float,native float,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,NaN,yes,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_decimals,native,float,native float,bl::round_decimals,moderate,4099,10322096095657499356,26.229396,24.222837,24.047915,20.000000,4.047915,yes,Both,yes,"[4.1022214313758827,1.1385951713060679e-16,-6.3204728745551046e-33,3.5085672559249129e-49]",4.10200023651123046875,4.102 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_significant,native,float,native float,bl::round_significant,wide_exponent,4096,10322096095657499357,26.031860,24.190158,24.023953,20.000000,4.023953,yes,NaN,yes,"[259.8694582017871,7.2128263973122191e-15,-4.0039229694600715e-31,2.2226237347600494e-47]",259.869384765625,259.8694 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,lround,native,float,native float,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,llround,native,float,native float,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remquo,native,float,native float,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.944149017333984375 ; 1,-0.944149017333984375 ; 1 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,NaN,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,NaN,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0 ; 3588998231833025183056134144,0 ; 3588998231833025183056134144 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ldexp,native,float,native float,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,NaN,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbn,native,float,native float,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,NaN,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbln,native,float,native float,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,NaN,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0.724792420864105224609375 ; 92,0.724792420864105224609375 ; 92 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,-,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,NaN,-,"lower endpoint [-8,0,0,0]",3,3 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,NaN,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,near_one,4099,10322096095657499359,25.904846,24.145989,24.002397,20.000000,4.002397,yes,NaN,yes,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",1.00001394748687744140625,1.0000140069934242844029017485374012760134473363250144717592753776502313379618068 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,wide_exponent,4096,10322096095657499357,25.966753,24.215195,24.033944,20.000000,4.033944,yes,NaN,yes,"[8.4482670931604627e+31,2344865161252447,0.13016616458319236,7.2256736473703873e-18]",9191445835546624,9191445300433280.2040066177032811142195637421096986523537003168905974560430072948 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,extreme_finite,4096,10322096095657499295,25.972131,24.206633,24.003202,20.000000,4.003202,yes,NaN,yes,"[3.2519120367544908e+32,9025869043151310,0.50103638144790075,2.7813106342916602e-17]",18033057994899456,18033059067370500.361343159063133250828533418772371371727970165496211972696634283 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,subnormal,4100,10322096095657499290,27.589271,24.195086,24.031452,20.000000,4.031452,yes,NaN,yes,"[1.8779781629341901e-40,0,0,0]",1.370393513549582123487035494914521027709497502655722200870513916015625e-20,1.3703934336292589277694998548128719273180184126519025205252581878215739867341933e-20 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,moderate,4099,10322096095657499356,26.121671,24.307590,24.011464,20.000000,4.011464,yes,NaN,yes,"[-0.12734564822864947,-3.5345517687315605e-18,1.9620703776876749e-34,-1.0891678546219169e-50]",-0.503108203411102294921875,-0.50310817366085437588363001613632148997996157892580724817608234206272558983482038 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,wide_exponent,4096,10322096095657499357,25.961382,24.184600,24.005421,20.000000,4.005421,yes,NaN,yes,"[-4.7851378793851705e-07,-1.3281425624248529e-23,7.3726722639436296e-40,-4.0926552502227485e-56]",-0.0078216455876827239990234375,-0.0078216460521407890323068501659743654531084116067288348014097193957698386594415734 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,moderate,4099,10322096095657499356,25.920822,23.829802,23.432741,20.000000,3.432741,yes,No,yes,"[-3.4039723624121567,-9.4479212298441604e-17,5.2446498421089063e-33,-2.9113655054029998e-49] ; [2.1132959491270853,5.8655745514199089e-17,-3.2560479598208786e-33,1.807469707138453e-49]",4.00662517547607421875,4.0066255293274870942068556648048777674027128914889773952995489983515655060881798 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,wide_exponent,4096,10322096095657499357,50.908019,24.428796,23.810260,20.000000,3.810260,yes,No,yes,"[1.3016435237790612e-26,3.6127865248843406e-43,-2.0054993914910505e-59,1.1132758001525525e-75] ; [-3.5587193322648507e-29,-9.87743035214775e-46,5.4830753005429e-62,-3.0437182222081139e-78]",1.3016482270058686551256361387989705019141775665936222594609716907143592834472656e-26,1.3016483154952332663243636760967048106736841157205171156309047712621084297282463e-26 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,moderate,4099,10322096095657499356,26.149142,24.214150,24.040329,20.000000,4.040329,yes,NaN,yes,"[-5.7483236179995885,-1.5954803084249315e-16,8.8566948687470254e-33,-4.9164532826812132e-49]",0.509722173213958740234375,0.5097222027582440476609190572223045086789238470780369932414545068400613217789304 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,argument_reduction,4111,10322096095657499282,26.207717,24.232934,24.054458,20.000000,4.054458,yes,NaN,yes,"near 2^94 * pi/2 [3.1112832252188646e+28,0,0,0]",-0.031775273382663726806640625,-0.031775275206458036754431969895458660655905161590001855338797800351243967744526865 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,moderate,4099,10322096095657499356,26.060965,24.256137,24.035729,20.000000,4.035729,yes,NaN,-,"[4.4588502387206184,1.2375795495957516e-16,-6.8699465538321711e-33,3.8135864210043619e-49]",-0.25083100795745849609375,-0.25083099337247927050646438955413445736165895666786844698074070181158501850594916 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,argument_reduction,4111,10322096095657499282,26.627890,24.245703,24.076319,20.000000,4.076319,yes,NaN,-,"near 2^70 * pi/2 [1.8544669218107189e+21,0,0,0]",-0.5190365314483642578125,-0.51903650210542794358474489503209069334133171874228756988100493423128724002299192 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,moderate,4099,10322096095657499356,25.852746,23.939094,23.685570,20.000000,3.685570,yes,NaN,yes,"[7.3913821288133494,2.0515206558028713e-16,-1.1388227337832242e-32,6.3217361000635033e-49]",2.0052521228790283203125,2.0052519742505502539863888610136632712742923325354975736539410668457866583704449 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,argument_reduction,4111,10322096095657499282,25.835514,23.939203,23.695474,18.000000,5.695474,yes,NaN,yes,"near 2^97 * pi/2 [-2.4890248801231579e+29,0,0,0]",-0.52050912380218505859375,-0.52050916211815582205576854961366966548306784253462927311031735282020254938006464 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,near_one,4099,10322096095657499359,26.050622,24.020781,23.596965,20.000000,3.596965,yes,NaN,yes,"[0.71922710578923366,1.9962562319543011e-17,-1.1081448158835611e-33,6.1514394460646721e-50]",0.62351381778717041015625,0.62351386692907070779012292156054631631024307694194481327290115652451841596639583 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,moderate,4099,10322096095657499356,25.890838,24.033313,23.738430,20.000000,3.738430,yes,NaN,yes,"[2.740373616415912,7.606064712550631e-17,-4.2222140853313167e-33,2.3437996462157366e-49]",1.220897674560546875,1.2208975873237565513867594923724470425971932151710826740434483130843362665757323 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,near_one,4099,10322096095657499359,25.753284,23.664727,23.186166,20.000000,3.186166,yes,No,yes,"[0.75874883563427742,2.1059510680717581e-17,-1.1690376822536031e-33,6.4894627574618896e-50] ; [1.2024228110630841,3.337393725441851e-17,-1.8526256781125355e-33,1.0284138419261654e-49]",0.5629141330718994140625,0.56291419205272246525123187856361583474888387525815698747343271879709705597995345 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,moderate,4099,10322096095657499356,25.805113,23.622066,23.093975,20.000000,3.093975,yes,No,yes,"[-6.7041652599716528,-1.8607796581281568e-16,1.0329402101040035e-32,-5.7339700215930573e-49] ; [-3.3155640780338107,-9.2025389476330397e-17,5.1084353123359792e-33,-2.8357512517818035e-49]",-2.030076503753662109375,-2.030076730496361815048882948110558869916254104068486839776277606909444568084838 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,extreme_finite,8,10322096095657499293,32.824184,25.098912,25.098912,20.000000,5.098912,yes,No,yes,"huge positive [3.1901471898837981e+37,8.8544371553805848e+20,-49152,2.7284841053187847e-12] ; tiny negative [-1.4693679385278594e-38,-4.0783152924990778e-55,2.2639197697066781e-71,-1.256727927116218e-87]",1.57079637050628662109375,1.5707963267948966192313216916397514420985846996875529104874722961539082031435651 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,moderate,4099,10322096095657499356,25.892206,24.071556,23.875711,20.000000,3.875711,yes,NaN,yes,"[-0.12634655031145781,-3.50682123094353e-18,1.9466768369189202e-34,-1.0806227229259281e-50]",-0.12668512761592864990234375,-0.12668513584631758078515417624326368013544374285528004332252620415520568525994363 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,boundary,4105,10322096095657499355,25.358925,24.717543,24.717543,20.000000,4.717543,yes,NaN,yes,"[-0.99999928983607478,-2.7755555904620388e-17,1.5407428613290135e-33,-8.5528409983715774e-50]",-1.5696003437042236328125,-1.5696002868101387248982831177317988458122594291620956459638041678924528508701691 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,moderate,4099,10322096095657499356,25.891020,23.834915,23.233461,20.000000,3.233461,yes,NaN,-,"[-0.50561083532054285,-1.4033519771820625e-17,7.7901683836038157e-34,-4.3244121525919475e-50]",2.10088634490966796875,2.100886131883129287630282622919342773294860395034021966989680726379996798074407 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,boundary,4105,10322096095657499355,25.982187,24.584962,24.310484,20.000000,4.310484,yes,NaN,-,"[-1,0,0,0]",3.141592502593994140625,3.141592653589793238462643383279502884197169399375105820974944592307816406286209 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,moderate,4099,10322096095657499356,25.945177,24.173984,24.007691,20.000000,4.007691,yes,NaN,-,"[0.69706560262123496,1.9347457042607623e-17,-1.0739996138324561e-33,5.9618954985765975e-50]",2.007852077484130859375,2.0078521965251381745368245393757138670217404209691449932482836198723071521808851 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,boundary,4099,10322096095657499289,25.985100,24.189213,24.012647,20.000000,4.012647,yes,NaN,-,"[-55.445402102948194,-1.538919050607329e-15,8.5427168150927155e-32,-4.7421604504842094e-48]",8.32470122137760864279645685032325255932328378349893682752735912799835205078125e-25,8.3247007295174246704446931992286856723729842657502269685404369668574123561739996e-25 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,moderate,4099,10322096095657499356,25.945545,24.176633,24.015565,20.000000,4.015565,yes,NaN,-,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",16.047374725341796875,16.047373779108025107147981190408654763758177217950870805754027309567667903729689 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,boundary,4099,10322096095657499289,25.953108,24.184447,24.013981,20.000000,4.013981,yes,NaN,-,"[12.008718688899336,3.3330889961656162e-16,-1.8502360733339086e-32,1.0270873448036725e-48]",4120.82763671875,4120.8278799704215331782631104353597855518360018117915418683951931281930912686669 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,moderate,4099,10322096095657499356,26.081834,24.050893,23.696269,20.000000,3.696269,yes,NaN,yes,"[1.6346453250862929,4.537052192516691e-17,-2.5185699040290393e-33,1.3980871482905051e-49]",4.12763881683349609375,4.1276391205119756417580591652446801308216360859055035530288964538801271100865379 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,cancellation,4098,10322096095657499288,46.696525,24.485159,24.016252,20.000000,4.016252,yes,NaN,yes,"[-1.1965551038883859e-07,0,0,0]",-1.196554961779838777147233486175537109375e-07,-1.1965550323011829523677667765761457423866745044376741105251334473664474539150728e-07 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,near_one,4099,10322096095657499359,25.911420,24.149004,23.791538,20.000000,3.791538,yes,NaN,-,"[0.98386586207801563,2.730776333054229e-17,1.51588538002913e-33,8.4148542580049779e-50]",-0.0162657164037227630615234375,-0.016265715283494616429682100731196418471765423103845053838921650067906120819226043 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,wide_exponent,4096,10322096095657499357,25.934073,24.148103,24.055764,20.000000,4.055764,yes,NaN,-,"[3.2617843787809539e-29,9.0532702967131949e-46,5.0255745657830058e-62,2.7897542974514332e-78]",-65.59268951416015625,-65.59269327555488150776766062278388871045172786432349789542906836393403051939105 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,extreme_finite,4096,10322096095657499295,25.928908,24.171772,24.028998,20.000000,4.028998,yes,NaN,-,"[1.925072119386236e+28,534314847751.63684,2.9660432318647614e-05,1.6464847440249349e-21]",65.12734222412109375,65.127346028765523545207426082299833753247218536882252197810633399468572469932133 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,near_one,4099,10322096095657499359,25.997641,24.168133,23.675086,20.000000,3.675086,yes,NaN,-,"[1.0239856815956481,2.8421312014849322e-17,1.5776997494470658e-33,8.7579929389073653e-50]",0.0341954641044139862060546875,0.034195461551375619696170753702097836731645774772968144626738312328832836284482893 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,wide_exponent,4096,10322096095657499357,25.972931,24.199454,24.028872,20.000000,4.028872,yes,NaN,-,"[279.54938708294071,7.7590541514832776e-15,4.307140284145071e-31,2.3909431568741984e-47]",8.1269588470458984375,8.1269593218526276965603717987343564084569415244724976083039632724987237766261338 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,extreme_finite,4096,10322096095657499295,26.022657,24.191270,24.003063,20.000000,4.003063,yes,NaN,-,"[5.0098439803322917e-20,1.3905110341861625e-36,7.7188868307440791e-53,4.2848429419839901e-69]",-64.113800048828125,-64.113796235451863124774831376509181438042251966024731816806674549792684463109039 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,near_one,4099,10322096095657499359,25.936041,24.087575,23.886435,20.000000,3.886435,yes,NaN,-,"[0.74782015069601115,2.0756178739534147e-17,1.1521993769932985e-33,6.3959913864836042e-50]",-0.1262028515338897705078125,-0.12620284339555404617201840368672443589899010161928869855986447839671506825302528 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,wide_exponent,4096,10322096095657499357,25.951082,24.149006,23.956267,20.000000,3.956267,yes,NaN,-,"[0.54583076440008993,1.5149847054643226e-17,8.4098545098072611e-34,4.6684070552678653e-50]",-0.26294195652008056640625,-0.2629419726750062648874905383120679265265441493437994181320568202191380910398945 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,extreme_finite,4096,10322096095657499295,25.879264,24.160691,23.980680,20.000000,3.980680,yes,NaN,-,"[3.3720516904229503,9.3593235673343497e-17,5.1954682596857258e-33,2.8840642428061424e-49]",0.5278942584991455078125,0.52789422661000368121110961342477919791929563744217358133476513892599287328236552 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,moderate,4099,10322096095657499356,25.954076,24.084004,23.647008,20.000000,3.647008,yes,NaN,yes,"[1.8078124361518777,5.0176874770487759e-17,-2.7853760836964313e-33,1.5461943301800126e-49]",1.0324056148529052734375,1.032405693447327095603589566278373265083861662204948974115159316925995706506831 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,cancellation,4098,10322096095657499288,46.683647,24.504409,24.016252,20.000000,4.016252,yes,NaN,yes,"[-1.1965551038883859e-07,0,0,0]",-1.196555245996933081187307834625244140625e-07,-1.1965551754755974717708527518014233670876945163456733519223050444765622173963702e-07 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,near_one,4099,10322096095657499359,25.935113,24.183020,24.022132,20.000000,4.022132,yes,No,yes,"[1.0032222542802387,2.7845011137956863e-17,1.545708624315182e-33,8.5804065203819558e-50] ; [1.1098483278340112,3.0804479185076206e-17,1.7099921026428991e-33,9.4923630214066531e-50]",1.00357687473297119140625,1.0035768158257674189368635854208332740856335659539134346018913304416269618692691 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,moderate,4099,10322096095657499356,25.910731,24.173665,24.033763,20.000000,4.033763,yes,No,yes,"[1.5010856767109688,4.1663497005488793e-17,2.312788683094746e-33,1.2838556235321408e-49] ; [6.8472618406345225,1.900496937777419e-16,1.054987729275047e-32,5.8563583386908427e-49]",16.1396617889404296875,16.139662728687068635103760006664480606823689561120066764019143935355322552829973 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,moderate,4099,10322096095657499356,24.296761,22.240676,21.817420,20.000000,1.817420,yes,NaN,yes,"[-2.0174902967783854,-5.5996604486030095e-17,3.108435980060947e-33,-1.7255285978184637e-49]",-136.0443267822265625,-136.04428997082654660356838684633834963763840941785070423709212066151322168144796 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,wide_exponent,4096,10322096095657499357,24.307980,22.194400,21.763685,20.000000,1.763685,yes,NaN,yes,"[8.3253759191734602,2.3107560085315504e-16,-1.282727262481326e-32,7.1205667056058241e-49]",2772213.75,2772214.528582891558413966128826065404980229940407596127199381800655092889207728 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,No,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,No,yes,"[30287485871.102478,8.4064660430267718e-07,4.666526078348927e-23,2.590442348598358e-39] ; [2.0009290447377264e-12,5.5536937402726095e-29,3.0829193310836276e-45,1.7113640122155147e-61]",1.12052207790203084414315526373684406280517578125e-12,1.12052207790203084414315526373684406280517578125e-12 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remainder,native,float,native float,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,NaN,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,near_one,4099,10322096095657499359,25.529316,23.361140,23.020443,20.000000,3.020443,yes,NaN,yes,"[0.70944205358080048,1.9690972563068967e-17,-1.09306855583907e-33,6.0677493909315204e-50]",0.770469188690185546875,0.7704690981354063654714500516807083249740764906991128041118997725210624314315962 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,moderate,4099,10322096095657499356,25.564722,23.386851,23.051853,20.000000,3.051853,yes,NaN,yes,"[-6.2539872895448347,-1.7358301711414378e-16,9.6357931142012508e-33,-5.3489396879553845e-49]",-260.04022216796875,-260.04025207279614242456253420762007990089694478682673757384711825719656661791232 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,near_one,4099,10322096095657499359,25.697399,23.608047,23.206251,20.000000,3.206251,yes,NaN,-,"[1.3953830473521402,3.8729659683549029e-17,-2.1499279958286393e-33,1.1934497811275864e-49]",2.142129421234130859375,2.1421291998900342817831142388797898504754547155416439660953907321061610583047276 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,moderate,4099,10322096095657499356,25.707338,23.435763,23.133034,20.000000,3.133034,yes,NaN,-,"[-6.2519511890647177,-1.7352650397330687e-16,9.6326560046936999e-33,-5.3471982423523578e-49]",259.513275146484375,259.51324693523434611492872216708326007958146865749754287925268958549988607875452 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,near_one,4099,10322096095657499359,25.811593,23.252304,22.770851,20.000000,2.770851,yes,NaN,yes,"[0.55053801611222186,1.5280499535481103e-17,-8.4823812060325649e-34,4.7086674592925286e-50]",0.5009233951568603515625,0.50092332516266426581462294437658074146517932243358578851398059164045274937370487 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,moderate,4099,10322096095657499356,26.321153,23.811602,22.788821,20.000000,2.788821,yes,NaN,yes,"[-0.26867117952962438,-7.4571232391747006e-18,4.1395349587995404e-34,-2.2979035112499992e-50]",-0.2623879015445709228515625,-0.2623879377542869002962259728363187454606902033574049042581323579935890415468469 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,near_one,4099,10322096095657499359,25.609004,23.443455,23.090762,20.000000,3.090762,yes,NaN,yes,"[1.3953690800643999,3.8729272013438006e-17,-2.1499064758144785e-33,1.1934378351199806e-49]",1.13528728485107421875,1.1352874119359033108648409985060760802390820483064754866465702177133212273123448 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,moderate,4099,10322096095657499356,25.804320,23.740800,23.164290,20.000000,3.164290,yes,NaN,yes,"[-0.28498036411816408,-7.9097940452511638e-18,4.3908177345403997e-34,-2.4373934729096101e-50]",-0.281257450580596923828125,-0.28125748050033681800965652296148653111020713782363887294267066034968006146088286 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,moderate,4099,10322096095657499286,26.033027,23.915055,22.976072,20.000000,2.976072,yes,Both,-,"[1.6675308902096515,4.6283279714610978e-17,-2.5692381397163776e-33,1.4262136692291136e-49]",1.0992603302001953125,1.0992601969666530400360984003096511694477122935216436866752244351652074528316848 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,boundary,4101,10322096095657499355,25.752857,23.793907,23.793907,20.000000,3.793907,yes,Both,-,"[1.9999994915125949,5.5511137117897206e-17,-3.0814871275706815e-33,1.7105689795575038e-49]",1.3169577121734619140625,1.3169576216227113023399862811927493515571819731899743868099047486919155844722929 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,moderate,4099,10322096095657499356,25.711955,23.567857,23.131742,20.000000,3.131742,yes,NaN,yes,"[0.13604771814260808,3.7760827282409281e-18,-2.0961469938912281e-34,1.1635953278084244e-50]",0.1368965208530426025390625,0.13689653574817252755090928457855299024525581690408985396836385461294028098218013 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,boundary,4105,10322096095657499355,26.088438,25.637514,25.637514,20.000000,5.637514,yes,NaN,yes,"[0.99899949151259504,2.7727805926652667e-17,-1.5392024281053832e-33,8.5442898762077182e-50]",3.7999393939971923828125,3.7999393211997930734222062320257072616372641916906079170097936373745998626952477 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,near_one,4099,10322096095657499359,26.093806,24.216306,23.832036,20.000000,3.832036,yes,NaN,yes,"[0.82702049455505422,2.2954429872297628e-17,-1.2742268280684159e-33,7.07337981558318e-50]",0.75783145427703857421875,0.75783140352952517711597272820328209450854836624944561227614555251248356400115264 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,moderate,4099,10322096095657499356,36.993599,24.499379,23.839199,20.000000,3.839199,yes,NaN,yes,"[0.81787985777320493,2.2700726236924011e-17,-1.2601434471972712e-33,6.9952013470446281e-50]",0.75258743762969970703125,0.75258738748294499172523085430305904644591529960072519201515925937266508496163585 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,near_one,4099,10322096095657499359,25.515231,23.034851,22.454135,20.000000,2.454135,yes,NaN,-,"[1.4104525202089766,3.9147921576914618e-17,-2.1731461950455288e-33,1.2063384708080487e-49]",0.0460776872932910919189453125,0.046077679274249055471348924218681269569113928158561199352966180410867689146380014 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,moderate,4099,10322096095657499356,31.481348,23.091183,22.460533,20.000000,2.460533,yes,NaN,-,"[1.8617235593836767,5.1673209027871445e-17,-2.868439320950569e-33,1.5923036894297355e-49]",0.008466559462249279022216796875,0.0084665579953074810854123449452929773475160244983938211579514117629784265616586852 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,lgamma,native,float,native float,bl::lgamma,moderate,4099,10322096095657499287,25.229736,22.875595,22.383754,20.000000,2.383754,yes,NaN,-,"[8.7425466956298532,2.4265441588372109e-16,-1.3470025977053773e-32,7.4773664910120344e-49]",10.0574245452880859375,10.057422707457986379801366104572257517578790020298668763257226690664594301820651 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,tgamma,native,float,native float,bl::tgamma,moderate,4099,10322096095657499284,25.954376,24.168618,24.020748,20.000000,4.020748,yes,NaN,-,"[0.4414856138169595,1.2253687337508964e-17,-6.8021629093300919e-34,3.7759589395947546e-50]",2.00635814666748046875,2.0063580287867931569119828375944428366303226782250476941651785755335234918772241 diff --git a/validation/metrics/data/native/fastmath/d3503db8b5214fffb112436fc383eea4/f64_accuracy.csv b/validation/metrics/data/native/fastmath/d3503db8b5214fffb112436fc383eea4/f64_accuracy.csv new file mode 100644 index 0000000..37818b9 --- /dev/null +++ b/validation/metrics/data/native/fastmath/d3503db8b5214fffb112436fc383eea4/f64_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,near_one,4099,10322096095657499359,68.804804,53.029455,53.001693,48.000000,5.001693,yes,No,no,"[1.4297151598371682,3.9682567227671501e-17,-2.2028249906198284e-33,1.222813511902914e-49] ; [0.57263374255596289,1.5893779141572608e-17,-8.8228197756404827e-34,4.8976488285171109e-50]",2.00234890239313134685517070465721189975738525390625,2.0023489023931311248105657796259038150310516357421875 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-15.0558510431143677266163649619556963443756103515625,-15.0558510431143677266163649619556963443756103515625 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,wide_exponent,4096,10322096095657499357,82.842054,53.932557,53.150426,48.000000,5.150426,yes,No,no,"[-2.5801269239800948e-52,-7.1612907936449556e-69,3.9753149625703952e-85,-2.2067431007912725e-101] ; [6.2882455610389305e-52,1.745338751590589e-68,-9.6885763389319921e-85,5.3782402636604011e-101]",3.7081186370588353126400687774493756982129860731379218490790094277487448813887287e-52,3.7081186370588356835606838461915142713865122279018731858354873035278451266926346e-52 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,extreme_finite,4096,10322096095657499295,83.051539,53.922063,53.033213,48.000000,5.033213,yes,No,no,"[4.044152691012953e+59,1.1224778581655917e+43,-6.2310038138368535e+26,34589019503.244186] ; [-3.2763861007278913e+51,-9.0937982164748556e+34,5.0480720806127841e+18,-280.22429269318661]",404415265824909244971463481926668921988920568307135488720896,404415265824909201094180361492905708699283935084133453135872 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,No,no,"+0 [0,0,0,0] ; min normal [2.2250738585072014e-308,0,0,0]",2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308,2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,48.000000,inf,yes,No,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.7781742597549925477551369112916290760040283203125,-0.7781742597549925477551369112916290760040283203125 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,No,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",-9.65894031423886190168559551239013671875e-14,-9.65894031423886190168559551239013671875e-14 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,No,yes,"+0 [0,0,0,0] ; min normal [2.2250738585072014e-308,0,0,0]",-2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308,-2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,near_one,4099,10322096095657499359,54.941335,53.192655,53.017782,48.000000,5.017782,yes,No,no,"[0.61590653178072707,1.7094840314999723e-17,-9.489542660001528e-34,5.267754377148175e-50] ; [0.81645463695581544,2.2661168412757988e-17,-1.2579475468376116e-33,6.9830116513492445e-50]",0.50285974380374887093836377971456386148929595947265625,0.50285974380374892608309676348753773569247609448642907343737535469374577701273665 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,moderate,4099,10322096095657499356,54.943506,53.177920,53.014990,48.000000,5.014990,yes,No,no,"[-1.8309845685969375,-5.0820030644741984e-17,2.8210784066974295e-33,-1.5660131006941688e-49] ; [4.4139715148669616,1.2251232014612206e-16,-6.8007999313236564e-33,3.7752023348123534e-49]",-8.0819137299478551739184695179574191570281982421875,-8.0819137299478542859205922880040108996859918106071002798056202021115268507855944 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,wide_exponent,4096,10322096095657499357,54.949502,53.147252,53.012976,48.000000,5.012976,yes,No,no,"[-9580440436661.9609,-0.00026591063897079994,1.4761005693908477e-20,-8.1940041940001134e-37] ; [3.5476231799149722e+112,9.8466323425887909e+95,-5.465978970880409e+79,3.0342278527941741e+63]",-3.3987792566896694596919030454680074525269527091652711616914422309578532569280119e+125,-3.3987792566896690857302928923045025855537603060392874444605126408265807925080287e+125 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,extreme_finite,8,10322096095657499292,69.953445,54.906891,54.906891,48.000000,6.906891,yes,No,no,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,-2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [-2.4203699467808244e-121,-6.7178761075670899e-138,3.729170365600104e-154,-2.0701054013195242e-170]",-0.46875,-0.46875000000000001387778780781444442934375177282579434799116745646516135614945142 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,near_one,4099,10322096095657499359,54.949938,53.186535,53.032508,48.000000,5.032508,yes,No,yes,"[0.79583533097289294,2.2088867706407193e-17,1.2261784757776169e-33,6.8066578805404505e-50] ; [0.78671878189697564,2.1835832639176979e-17,1.212132207893789e-33,6.7286854304670572e-50]",1.01158806588287486505350898369215428829193115234375,1.0115880658828749748599930078884108617347838241152708567193976201713984484334261 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,moderate,4099,10322096095657499356,55.299598,53.162157,53.017700,48.000000,5.017700,yes,No,yes,"[5.6982279612785671,1.5815759705435825e-16,8.7795102884568185e-33,4.8736072335891048e-49] ; [5.6630083746783413,1.571800571553245e-16,8.725245923286967e-33,4.8434844597749865e-49]",1.0062192361850825772506823341245763003826141357421875,1.0062192361850826876012316258994293315599871850773075711644181221348221597609452 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,wide_exponent,4096,10322096095657499357,54.940111,53.173252,53.006391,48.000000,5.006391,yes,No,yes,"[1.1797107595829603e-08,3.2743551192175876e-25,1.8176322220773076e-41,1.0089885716254063e-57] ; [2.9273558682385512e-68,8.1250447154750139e-85,4.5103058596146572e-101,2.5037227067229757e-117]",402995335272583736023300876476329416171344205099568646324224,402995335272583691479603215316671542832621087480350248383875.97791882737549902199 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,extreme_finite,8,10322096095657499292,54.565310,53.447459,53.447459,48.000000,5.447459,yes,No,yes,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [2.4203699467808244e-121,6.7178761075670899e-138,3.729170365600104e-154,2.0701054013195242e-170]",8.0016173194558218715832353057948522675740813308632367068153019530691147107160091e+240,8.0016173194558225230457526744094465773333433188328184012700026520990852868662071e+240 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,moderate,4099,10322096095657499356,54.957904,53.175116,53.010971,48.000000,5.010971,yes,Both,yes,"[-2.0766790938067476,-5.7639423617548914e-17,3.1996307613162919e-33,-1.7761518707561329e-49] ; [1.7605984240305848,4.8866422686937992e-17,-2.7126313799051833e-33,1.5058129076457224e-49] ; [-0.3659974929680736,-1.0158471091205978e-17,5.6390842502229579e-34,-3.1303205861993077e-50]",-4.02219543274149682332563315867446362972259521484375,-4.0221954327414963801553326667348806266375851488013985258768850927779681114770938 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; next value after one [1.0000000000000002,0,0,0] ; native product cancellation",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,wide_exponent,4096,10322096095657499357,67.731490,53.261032,53.076165,48.000000,5.076165,yes,Both,yes,"[9.3280228061672898e+101,2.5890464234088722e+85,-1.4372094755459709e+69,7.9781152548029138e+52] ; [-1.157500052342858e+78,-3.212708022789662e+61,1.7834112091495225e+45,-9.8999209338619524e+28] ; [1.8812092993044754e+65,5.2214046955669652e+48,-2.8984618569521754e+32,16089695447930460]",-1.0797186886394012091182337394342607583764140817913341512476728655410802178495674e+180,-1.0797186886394010954097576163349944382733983701060212581740083991443274190535586e+180 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fabs,native,double,native double,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,moderate,4099,10322096095657499356,54.987841,53.178902,53.024599,48.000000,5.024599,yes,NaN,yes,"[-4.0291701907573039,-1.1183193789780232e-16,6.2079196171295382e-33,-3.4460876469796998e-49]",16.234212426087250236150794080458581447601318359375,16.234212426087248464261717100553537863564519292427420360394943465998096598923439 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,wide_exponent,4096,10322096095657499357,54.966048,53.184279,53.034276,48.000000,5.034276,yes,NaN,yes,"[2.9507000691330746e-25,8.1898378887864514e-42,-4.5462732960391003e-58,2.5236886447505548e-74]",8.7066308979819320541420161769186049656218085566280656265540977462941222974600937e-50,8.7066308979819311102069574980521020700209525169860268542733130882306736168377202e-50 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,near_one,4099,10322096095657499359,55.022120,53.212652,53.036371,48.000000,5.036371,yes,NaN,no,"[0.9803714880397002,2.7210774967692536e-17,1.5105014443513052e-33,8.384967411241868e-50]",1.02002150429685389809719708864577114582061767578125,1.0200215042968537876713460424605364405111022006296562878115184748990877637517355 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,wide_exponent,4096,10322096095657499357,54.902665,53.142478,53.019012,48.000000,5.019012,yes,NaN,no,"[5.654455339035485e-101,1.5694266272779603e-117,8.7120678853189764e-134,4.8361691791892627e-150]",1.7685169305282301591156520034137992060834685455134402926455624168717720163565455e+100,1.7685169305282303528900122951557431771119667320589594598759928180992244301081954e+100 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,No,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166,-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143677266163649619556963443756103515625,-7.0558510431143677266163649619556963443756103515625 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,No,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,-,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,-,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,copysign,native,double,native double,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,floor,native,double,native double,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,ceil,native,double,native double,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,trunc,native,double,native double,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round,native,double,native double,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,roundeven,native,double,native double,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,NaN,yes,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_decimals,native,double,native double,bl::round_decimals,moderate,4099,10322096095657499356,55.241937,53.207435,53.013030,48.000000,5.013030,yes,Both,yes,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",4.0039999999999995594635038287378847599029541015625,4.004 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_significant,native,double,native double,bl::round_significant,wide_exponent,4096,10322096095657499357,62.492824,53.239040,53.008690,48.000000,5.008690,yes,NaN,yes,"[1.4846549805182609e+20,4120.7453574894662,-2.2874731872510136e-13,1.2698027003493837e-29]",148465500000000016384,148465500000000000000 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,lround,native,double,native double,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,llround,native,double,native double,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remquo,native,double,native double,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.9441489568856322733836350380443036556243896484375 ; 1,-0.9441489568856322733836350380443036556243896484375 ; 1 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,NaN,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,NaN,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ldexp,native,double,native double,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbn,native,double,native double,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,NaN,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbln,native,double,native double,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,NaN,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.7247924004236494521791200895677320659160614013671875 ; -815,0.7247924004236494521791200895677320659160614013671875 ; -815 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,NaN,-,"lower endpoint [-8,0,0,0]",3,3 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,NaN,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,near_one,4099,10322096095657499359,54.920710,53.127507,53.001106,48.000000,5.001106,yes,Both,yes,"[1.0010388911274162,2.7784410636872319e-17,1.5423446207347879e-33,8.5617325492325808e-50]",1.0005193107218952608405970750027336180210113525390625,1.0005193107218951498457515954360620198623563387038363607072361122298411008899428 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,wide_exponent,4096,10322096095657499357,55.009451,53.211448,53.027507,48.000000,5.027507,yes,Both,yes,"[6.0219100959119555e-185,1.6714158101760344e-201,9.2782215808997173e-218,5.1504476133444428e-234]",7.7600967106808367478172926221258513837894764415588410983624981464748121495074265e-93,7.7600967106808375930900190108944118736382926995509918646504739659308953242516058e-93 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,extreme_finite,4096,10322096095657499295,54.924178,53.221411,53.017887,48.000000,5.017887,yes,Both,yes,"[2.3783259304591718e+282,6.6011805201470536e+265,3.664391301587163e+249,2.0341457971291071e+233]",1.542182197556168240060235866024934642345121301250108457830389998905645354877265e+141,1.5421821975561680709533351179752169384434445730363281277866248379626469712289668e+141 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,subnormal,4100,10322096095657499290,56.222608,53.192031,53.028655,48.000000,5.028655,yes,Both,yes,"[1.3924978593053044e-312,0,0,0]",1.1800414650787929320982458320284728300669497402903960639237252491051024255975799e-156,1.1800414650787930605326941577347439698813910767655579114793014150350187021874733e-156 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,moderate,4099,10322096095657499356,55.052793,53.116805,52.795960,48.000000,4.795960,yes,NaN,yes,"[-1.2955868644776452,-3.595975918362485e-17,1.9961676302818115e-33,-1.108095632075152e-49]",-1.0901564919878674597697454373701475560665130615234375,-1.0901564919878673203510029086759947228550111840346692511489378863404002956095594 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,wide_exponent,4096,10322096095657499357,54.971032,52.971514,52.692184,48.000000,4.692184,yes,NaN,yes,"[5.0568441057755949e-212,1.403556189543019e-228,-7.7913019899290503e-245,4.3250414305135156e-261]",3.6979399552103718774606322255403937872671041622337230893862043577331672210196079e-71,3.6979399552103723856573794799277777321642698544383075056927659107091310783951395e-71 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,moderate,4099,10322096095657499356,54.923504,52.789849,52.424057,48.000000,4.424057,yes,No,yes,"[-6.2709718016193445,-1.740544320233224e-16,9.6619618985173348e-33,-5.3634662813924676e-49] ; [-5.3610573122247516,-1.487992316091744e-16,8.2600166489518399e-33,-4.5852303337267308e-49]",8.250213502792728803569843876175582408905029296875,8.2502135027927274381957536723288747155497400971352314257258500952647980972838636 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,wide_exponent,4096,10322096095657499357,83.837536,54.035311,52.870848,48.000000,4.870848,yes,No,yes,"[-6.0910535591726071e+67,-1.6906069764046092e+51,9.3847539539815793e+34,-5.2095849600761631e+18] ; [-2.0765337907433747e+68,-5.7635390647386284e+51,3.199406886499683e+35,-1.7760275952681165e+19]",216402447276044998568913181889759307152884828615443948991619776118784,216402447276044972293408789817849584977782616860227994636912077401231.68193597334 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,moderate,4099,10322096095657499356,55.112966,53.228307,53.032249,48.000000,5.032249,yes,Both,yes,"[6.845669939342903,1.9000550964106974e-16,-1.054742458045764e-32,5.8549968098607017e-49]",0.5332896734434948715630753213190473616123199462890625,0.53328967344349481366480902448257864122289462695617986129699565304628825690920461 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,argument_reduction,4114,10322096095657499282,55.226797,53.207790,53.035224,48.000000,5.035224,yes,Both,yes,"near 2^32 * pi/2 [-6746518852.260994,0,0,0]",1.552177995945118398166302775553759829563205130398273468017578125e-05,1.5521779959451182299964044512799051330689624190070061035685086340903998302805766e-05 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,moderate,4099,10322096095657499356,55.057291,53.182311,53.019050,48.000000,5.019050,yes,NaN,-,"[4.1703741527293232,1.1575113514154309e-16,-6.425478768031961e-33,3.5668572362545842e-49]",-0.5158630820803253858031212075729854404926300048828125,-0.51586308208032532928210231425377438229361670583951189416945773701567475764188083 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,argument_reduction,4114,10322096095657499282,57.678342,53.190606,52.979067,48.000000,4.979067,yes,NaN,-,"near 2^79 * pi/2 [-9.4948811840908353e+23,0,0,0]",-0.745347332069614676441915435134433209896087646484375,-0.74534733206961459248228582313963179667616055019306098816172876386801808552691865 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,moderate,4099,10322096095657499356,54.969724,53.132839,52.869936,48.000000,4.869936,yes,Both,yes,"[-5.4190175767417283,-1.504079521136772e-16,8.3493185761661204e-33,-4.6348028615950778e-49]",1.171394426032865254683201783336699008941650390625,1.17139442603286539700342824263106267546295820092344956492971294934043639632559 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,argument_reduction,4114,10322096095657499282,54.827554,53.139505,52.972774,45.000000,7.972774,yes,Both,yes,"near 2^56 * pi/2 [1.1318780403245514e+17,0,0,0]",0.522592664810813456455207415274344384670257568359375,0.52259266481081339733044326036721286195238985482366781021170783895485683809552821 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,near_one,4099,10322096095657499359,55.076072,53.014920,52.693509,48.000000,4.693509,yes,Both,yes,"[0.69084897511107168,1.9174910967675087e-17,-1.0644213825725161e-33,5.9087256341767488e-50]",0.6045578974549419282169537837035022675991058349609375,0.60455789745494184521062137483289791333043169413541191538511529635270202509108926 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,moderate,4099,10322096095657499356,54.861977,53.033501,52.752464,48.000000,4.752464,yes,Both,yes,"[2.7271853311214098,7.5694598675774267e-17,-4.2018943144802738e-33,2.3325199074887691e-49]",1.219341175070450589146275888197124004364013671875,1.2193411750704504284332317205702958914241077638601847892988778474321517604825199 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,near_one,4099,10322096095657499359,54.838619,52.751194,52.248773,48.000000,4.248773,yes,Both,yes,"[0.59489597012990947,1.6511680082373622e-17,-9.1658237013478981e-34,5.0880542564457055e-50] ; [0.9827038432180496,2.7275510828207716e-17,-1.514095006494449e-33,8.4049156884005658e-50]",0.5443561036464952263003169719013385474681854248046875,0.54435610364649532802709488187226757993115819436852768877331163091566878475501425 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,moderate,4099,10322096095657499356,54.688974,52.519520,52.099626,48.000000,4.099626,yes,Both,yes,"[7.2268073197298062,2.0058419702234115e-16,-1.1134659695507596e-32,6.1809777826591337e-49] ; [-3.4860951202332409,-9.6758576712908686e-17,5.3711799848315359e-33,-2.9816038442828851e-49]",2.0202519567665166988490454968996345996856689453125,2.0202519567665162801950553581438161288676585407404135979123700891377137944995722 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,extreme_finite,8,10322096095657499293,62.132485,54.509980,54.509980,48.000000,6.509980,yes,Both,yes,"huge positive [1.6853373139334212e+307,4.6777507254719996e+290,-2.5966732794380218e+274,1.4414432311305024e+258] ; tiny negative [-2.7813423231340017e-308,-0,0,-0]",1.5707963267948965579989817342720925807952880859375,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,moderate,4099,10322096095657499356,54.904043,52.938943,52.589446,48.000000,4.589446,yes,Both,yes,"[-0.50849837219306782,-1.4113665019828909e-17,7.8346579334303605e-34,-4.3491088138782666e-50]",-0.5334399670827416617413518906687386333942413330078125,-0.53343996708274174046131026004280749537274330119370511541043251593585195021558839 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,boundary,4105,10322096095657499355,55.110061,53.667935,53.116968,48.000000,5.116968,yes,Both,yes,"[-0.5,0,0,0]",-0.5235987755982989266811955531011335551738739013671875,-0.52359877559829887307710723054658381403286156656251763682915743205130273438103483 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,moderate,4099,10322096095657499356,54.885086,52.851324,52.325679,48.000000,4.325679,yes,Both,-,"[-0.50414043989940849,-1.3992708100524456e-17,7.7675133550305953e-34,-4.3118360854191824e-50]",2.0991827056155738517873032833449542522430419921875,2.0991827056155742237087238848295169418258006344663652219436700791519481199702843 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,boundary,4105,10322096095657499355,54.933501,53.208019,53.015630,48.000000,5.015630,yes,Both,-,"[0.99999951942877319,2.7755562277097889e-17,-1.5407432150725758e-33,8.5528429620428158e-50]",0.00098037876895050468130377030462341281236149370670318603515625,0.00098037876895050478897482934485258576844002644995119255737105648210814670714088092 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,moderate,4099,10322096095657499356,54.974193,53.158758,53.019599,48.000000,5.019599,yes,Both,-,"[-2.7628513559780572,-7.6684529725591843e-17,4.2568465266952151e-33,-2.3630245131163269e-49]",0.063111558041546500508189865286112762987613677978515625,0.063111558041546493595944022576030893684783578049870680283049711049275225101317397 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,boundary,4099,10322096095657499289,54.951607,53.169177,53.022036,48.000000,5.022036,yes,Both,-,"[326.47996564801747,9.061639373531479e-15,-5.0302203366722636e-31,2.7923332183556269e-47]",6.1439480220514836164654240272397757603181465874882434277975712709632833055792003e+141,6.1439480220514842882409559528883970846034473863532678303012402569115463152702114e+141 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,moderate,4099,10322096095657499356,54.935840,53.180629,53.025408,48.000000,5.025408,yes,Both,-,"[5.0109819009809229,1.3908268706122392e-16,-7.7206400751053074e-33,4.2858161881128051e-49]",32.244515813988982699811458587646484375,32.244515813988979182444910558923716242085594124376112958709781738645907303764812 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,boundary,4099,10322096095657499289,54.972594,53.164620,53.020447,48.000000,5.020447,yes,Both,-,"[-250.99202946082733,-6.9664282526201528e-15,3.8671445227290451e-31,-2.1466964443434239e-47]",2.7788842653856641449312255150961427650361335071502829578141633319949134903163359e-76,2.7788842653856638407547596404961219062300898310358581460949384897692395968312002e-76 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,moderate,4099,10322096095657499356,55.160352,53.074802,52.774099,48.000000,4.774099,yes,NaN,yes,"[1.1247730073775273,3.1218722256685296e-17,-1.7329872124374921e-33,9.6200115231453559e-50]",2.07951774176679560213187869521789252758026123046875,2.0795177417667953321244599118601324113680341242828252673035167248488970008616959 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,cancellation,4098,10322096095657499288,83.185282,54.009897,53.256008,48.000000,5.256008,yes,NaN,yes,"[-2.6135637191554461e-13,0,0,0]",-2.613563719155104787236903237814843246715479363473377816262654960155487060546875e-13,-2.613563719155104544253233803744968410008370675484631317282483699807610007520621e-13 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,near_one,4099,10322096095657499359,54.918179,53.166316,53.041728,48.000000,5.041728,yes,Both,-,"[1.1335639126739003,3.1462718893368611e-17,1.7465317466363379e-33,9.695198791772263e-50]",0.125366574619705295479121787138865329325199127197265625,0.12536657461970530900080502001741556309701459949497062977512985254006361141481408 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,wide_exponent,4096,10322096095657499357,54.929145,53.171869,53.045970,48.000000,5.045970,yes,Both,-,"[4.6261311118266506e+112,1.2840093188211806e+96,7.1276835479426902e+79,3.9566591935839502e+63]",259.421251321115732935140840709209442138671875,259.42125132111570503685832403601672523060244723042283551553508070299190699694996 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,extreme_finite,4096,10322096095657499295,54.890700,53.179074,53.016960,48.000000,5.016960,yes,Both,-,"[2.0331470333148491e-224,5.6431166220861893e-241,3.1325590022425128e-257,1.7389195651432225e-273]",-515.069475975312570881214924156665802001953125,-515.06947597531262739711907680169329239742647250082611831496163075456316319684835 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,near_one,4099,10322096095657499359,54.995769,53.184677,53.012248,48.000000,5.012248,yes,Both,-,"[1.4195991778008823,3.9401792323337023e-17,2.1872388524433752e-33,1.2141614671686702e-49]",0.50548364393602807087546580078196711838245391845703125,0.50548364393602801522994455993418454780195288621099385724841685838532575193733228 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,wide_exponent,4096,10322096095657499357,54.961217,53.191544,53.045986,48.000000,5.045986,yes,Both,-,"[1.6478667181302047e-79,4.5737489299541154e-96,2.5389406854448656e-112,1.4093952035692334e-128]",-261.71171993614638040526187978684902191162109375,-261.71171993614635226097107489196965564142826014659637604512890701616180385411886 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,extreme_finite,4096,10322096095657499295,54.951425,53.191636,53.032071,48.000000,5.032071,yes,Both,-,"[3.0682846229157043e-158,8.5162005861608278e-175,4.7274409865410026e-191,2.624256915407243e-207]",-523.24720667460906042833812534809112548828125,-523.24720667460911724330320979055400330344628738302026449859537432674608012400159 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,near_one,4099,10322096095657499359,54.955225,53.126150,52.852739,48.000000,4.852739,yes,Both,-,"[0.7455349426338852,2.0692751474368365e-17,1.1486784564844957e-33,6.3764463513998652e-50]",-0.12753199669462900178729114486486651003360748291015625,-0.12753199669462901746777475598863742165495644525200611269098846875624730934604523 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,wide_exponent,4096,10322096095657499357,55.006875,53.165767,53.021068,48.000000,5.021068,yes,Both,-,"[4.6201923918188489e+258,1.2823609928988147e+242,7.1185335009872046e+225,3.9515798971807595e+209]",258.66466006061358484657830558717250823974609375,258.66466006061361314780285273352542290302251199814003016169435342215632974918998 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,extreme_finite,4096,10322096095657499295,54.953390,53.178424,53.029150,48.000000,5.029150,yes,Both,-,"[2.8445937992650119e+257,7.8953338291249174e+240,4.3827907020981923e+224,2.4329375747912342e+208]",257.45402025901483966663363389670848846435546875,257.45402025901486767802909135885153181987420064870956774702074158124472305183714 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,moderate,4099,10322096095657499356,54.936699,53.007742,52.675708,48.000000,4.675708,yes,NaN,yes,"[-0.64921040208983594,-1.8019208405657293e-17,1.0002670028739942e-33,-5.55259728681753e-50]",-1.04756867140333032040189209510572254657745361328125,-1.0475686714033304660196836535959538533168949468560481809233559462876987015169756 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,cancellation,4098,10322096095657499288,83.183549,53.987083,53.147787,48.000000,5.147787,yes,NaN,yes,"[3.1953685246800882e-08,0,0,0]",3.1953684736281895160448819626086702783140935935080051422119140625e-08,3.1953684736281891958290169482972474912634475149295662224530800762968705228371108e-08 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,near_one,4099,10322096095657499359,54.959213,53.190567,53.032687,48.000000,5.032687,yes,No,yes,"[1.0146951632466654,2.8163448330305746e-17,1.563385439457318e-33,8.6785325562461659e-50] ; [0.67203279182024089,1.86526569695489e-17,1.0354304619014043e-33,5.7477936960060001e-50]",1.009851987115524707405711524188518524169921875,1.0098519871155248170101935707300539046159555693972004409710861335008920239838475 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,moderate,4099,10322096095657499356,54.935067,53.163311,53.017201,48.000000,5.017201,yes,No,yes,"[5.9546289339047043,1.652741536380038e-16,9.1745585372173701e-33,5.0929030643950102e-49] ; [5.055011828311212,1.4030476303859041e-16,7.7884789195009855e-33,4.3234743116188276e-49]",8258.471810015818846295587718486785888671875,8258.4718100158197523034186342284236047260743845763155702907245462782899967304707 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,moderate,4099,10322096095657499356,53.278021,51.216249,50.843118,48.000000,2.843118,yes,NaN,yes,"[-0.12598239680403012,-3.4967139407324243e-18,1.9410661637644512e-34,-1.0775081736660592e-50]",-5.036966535935927210927633319859086924452640232630074024200439453125e-07,-5.0369665359359247171059931113138371384365138382213074202619030423806648231460384e-07 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,wide_exponent,4096,10322096095657499357,53.261106,51.258453,50.915855,48.000000,2.915855,yes,NaN,yes,"[3178858.3859193348,8.8231044301760176e-11,-4.8978068435268183e-27,2.7188289639250675e-43]",3280184465858375893424625758878219769323978752,3280184465858377437606968244219065735294846924.9874778095912486192020477914613844 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,No,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,No,yes,"[3.1588709556304993e+103,8.7676281669016289e+86,4.8670113311231216e+70,2.7017340204622107e+54] ; [5.476364839089647e-60,1.5199965839012416e-76,8.4376760239937101e-93,4.6838510980827309e-109]",4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60,4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remainder,native,double,native double,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,near_one,4099,10322096095657499359,54.536032,52.333906,51.932913,48.000000,3.932913,yes,Both,yes,"[0.99647323650485897,2.7657688264761087e-17,-1.5353101159721376e-33,8.5226832034609322e-50]",1.169766410528877198515829149982891976833343505859375,1.169766410528876926411978375688658167452094179807831858979594951194415729758019 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,moderate,4099,10322096095657499356,54.578055,52.420782,51.922916,48.000000,3.922916,yes,Both,yes,"[-0.8847453255155191,-2.4556615782920207e-17,1.3631660124535765e-33,-7.5670914670621173e-50]",-1.0047740516603607119350272114388644695281982421875,-1.004774051660360476585482736279205233973070401043921323909411027818209611025896 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,near_one,4099,10322096095657499359,54.769719,52.562860,52.222299,48.000000,4.222299,yes,Both,-,"[1.4069918410475255,3.9051868434767531e-17,-2.1678141745455643e-33,1.2033786048446317e-49]",2.16426572173509601526575352181680500507354736328125,2.1642657217350956033274385667375135871921430567966953648960818301142604532597531 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,moderate,4099,10322096095657499356,54.622355,52.410098,52.078527,48.000000,4.078527,yes,Both,-,"[-2.7857207811510634,-7.7319283785267183e-17,4.2920824552965077e-33,-2.3825843827299285e-49]",8.1365916105786357803708597202785313129425048828125,8.1365916105786340693949523396784115709375119347391037715734195861036762034376516 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,near_one,4099,10322096095657499359,54.818246,52.326336,51.700293,48.000000,3.700293,yes,Both,yes,"[0.59755606903073177,1.6585512658560447e-17,-9.2068090143729001e-34,5.1108056755416187e-50]",0.5353082380185723021526200682274065911769866943359375,0.53530823801857215584571718742120500189084014316461358374166582778443072893549416 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,moderate,4099,10322096095657499356,55.293584,52.761106,51.767935,48.000000,3.767935,yes,Both,yes,"[0.16360496396960933,4.5409499485507357e-18,-2.5207335932757234e-34,1.3992882371004064e-50]",0.1621607097520810503166188709656125865876674652099609375,0.16216070975208100802595473397547243338613734194285459759344908362070067288340099 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,near_one,4099,10322096095657499359,54.604607,52.455662,51.991407,48.000000,3.991407,yes,NaN,yes,"[0.52279406422019059,1.4510450180865458e-17,-8.0549179442365494e-34,4.4713776815788749e-50]",0.5015059667225651995892121703946031630039215087890625,0.50150596672256508756726471065800509425375886860108398095845348065621209400134675 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,moderate,4099,10322096095657499356,54.778037,52.741625,52.125057,48.000000,4.125057,yes,NaN,yes,"[0.62454339223343247,1.7334561348376422e-17,-9.6226145653724018e-34,5.341624123784917e-50]",0.589756443441564304208668545470573008060455322265625,0.58975644344156442428767747551197846232670425451581946071191931520010028768183699 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,moderate,4099,10322096095657499286,55.002831,52.945654,52.287792,48.000000,4.287792,yes,Both,-,"[1.9006299452673154,5.2753078163195617e-17,-2.9283840998315168e-33,1.6255797262895814e-49]",1.257585663556603616797247013892047107219696044921875,1.2575856635566033880564485556366592611799279174320157848461131769348979779019656 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,boundary,4101,10322096095657499355,54.579940,52.351457,51.889584,48.000000,3.889584,yes,Both,-,"[1.0000005037046935,2.7755589596242622e-17,-1.5407447315897506e-33,8.5528513804042393e-50]",0.00100369781430906875215047779903443370130844414234161376953125,0.0010036978143090685115581279523956869563516806020321949975653097389006040250657005 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,moderate,4099,10322096095657499356,54.696918,52.658163,52.125597,48.000000,4.125597,yes,NaN,yes,"[-0.00049529971188322364,-1.3747328605574028e-20,7.6313003724981667e-37,-4.2362226906889992e-53]",-0.000495299752385836076877534406293079882743768393993377685546875,-0.00049529975238583597606842045723157836113176734228034591402175350588557156416625414 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,boundary,4105,10322096095657499355,55.374878,53.836747,52.893317,48.000000,4.893317,yes,NaN,yes,"[-0.5,0,0,0]",-0.5493061443340547800318063309532590210437774658203125,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,near_one,4099,10322096095657499359,55.115492,53.213627,52.909585,48.000000,4.909585,yes,NaN,yes,"[0.82266315494831599,2.283348940335983e-17,-1.2675132834072306e-33,7.0361121562846938e-50]",0.75534142520150826527469689608551561832427978515625,0.75534142520150835455818926054274013477949273460778658484922104863788928343365273 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,moderate,4099,10322096095657499356,59.765044,53.406412,52.892710,48.000000,4.892710,yes,NaN,yes,"[0.22945102518139038,6.3685452795056546e-18,-3.5352528013375154e-34,1.962459528957747e-50]",0.25443499105294209439165342701016925275325775146484375,0.25443499105294212482044152307161617587897965795413196995183827967925968259422636 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,near_one,4099,10322096095657499359,54.504745,52.032877,51.416011,48.000000,3.416011,yes,NaN,-,"[1.4171280217980677,3.9333203966042888e-17,-2.1834314337689169e-33,1.2120479252302846e-49]",0.045057028848666698384040074643053230829536914825439453125,0.045057028848666713380921770188418775180784369819168540822693433627584730980683186 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,moderate,4099,10322096095657499356,57.264712,52.149453,51.704092,48.000000,3.704092,yes,NaN,-,"[1.2494329362879579,3.4678730339797679e-17,-1.9250562444005181e-33,1.0686208831159439e-49]",0.0772340893897989488880995168074150569736957550048828125,0.077234089389798927834491217736226376663789083869112553446942539303117662664711823 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,lgamma,native,double,native double,bl::lgamma,moderate,4099,10322096095657499287,54.198393,51.886051,51.395136,48.000000,3.395136,yes,Both,-,"[8.2052194245086465,2.277405881797769e-16,-1.2642142231943204e-32,7.0177986932447056e-49]",8.9415885247122854906365319038741290569305419921875,8.9415885247122885101518456528958954554849052667331447452053057718047284642291731 +6,d3503db8b5214fffb112436fc383eea4,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,tgamma,native,double,native double,bl::tgamma,moderate,4099,10322096095657499284,52.932238,50.618304,49.844713,48.000000,1.844713,yes,NaN,-,"[6.7363262375311228,1.869706122573401e-16,-1.0378953932818074e-32,5.7614768138692232e-49]",441.80032379819891730221570469439029693603515625,441.80032379819935429292541077876940471345719058780329289775691651691759874496618 diff --git a/validation/metrics/data/native/fastmath/d3503db8b5214fffb112436fc383eea4/native_accuracy_run.json b/validation/metrics/data/native/fastmath/d3503db8b5214fffb112436fc383eea4/native_accuracy_run.json new file mode 100644 index 0000000..e5f2c1c --- /dev/null +++ b/validation/metrics/data/native/fastmath/d3503db8b5214fffb112436fc383eea4/native_accuracy_run.json @@ -0,0 +1,90 @@ +{ + "accuracy_samples": 4096, + "architecture": "wasm32", + "compiler": "Emscripten", + "configuration": { + "build": { + "architecture": "wasm32", + "compiler-id": "Clang", + "compiler-version": "21.0.0", + "config": "Release", + "flags-hash": "da56489796c4636d9f457ea868fb77ff630a44c5ac085227cf6d448694171e39", + "frontend-variant": "GNU", + "optimized": "1", + "processor": "x86", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Emscripten" + }, + "consumer": { + "arm64": "0", + "fast-math": "on", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "0" + }, + "harness": { + "qdpp": "on", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "unavailable", + "simd": "on", + "tu-x86-fma": "0", + "x86": "0" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "0", + "f256-simd": "1", + "msvc-guarded": "0", + "neon": "0", + "runtime-check": "0", + "runtime-path": "0", + "scalar-x86": "0", + "sse2": "0", + "trig-simd": "1", + "wasm-simd": "1" + } + }, + "consumer_mode": "fastmath", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\wasm32-emscripten-release\\validation\\fltx_accuracy_fastmath.js", + "sha256": "7db88bdb4a9eac0bf8c66ddf94468f9b019964af177b84fe063bb04f802a5b87", + "wasm-sha256": "fe853fecb27b3fa46b4bd23eb647d1ef2835b966f99e2d5fa6ab0f2fca86a9ea" + } + }, + "host": { + "machine": "AMD64", + "node": "v22.17.1", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "outputs": { + "f32_accuracy.csv": "d23e183b7eda35ae21d10b4e4aa193d7e32e24166b2bb672f655affcd42c85ed", + "f64_accuracy.csv": "efd65328784a4fd680dc2df59972b3abb98ce614ec189238bebe06f25f031042" + }, + "platform": "wasm32", + "policy": "native-float-libm-baseline-v1", + "precisions": [ + "f32", + "f64" + ], + "run_id": "d3503db8b5214fffb112436fc383eea4", + "sample_mode": "standard", + "schema_version": 2, + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete", + "target": "wasm32/wasm32/Emscripten", + "thresholds": "advisory" +} diff --git a/validation/metrics/data/native/strict/19e76954d837453282d2eb0484d1febb/f32_accuracy.csv b/validation/metrics/data/native/strict/19e76954d837453282d2eb0484d1febb/f32_accuracy.csv new file mode 100644 index 0000000..ec93ce9 --- /dev/null +++ b/validation/metrics/data/native/strict/19e76954d837453282d2eb0484d1febb/f32_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,near_one,4099,10322096095657499359,38.457645,24.037482,24.000509,20.000000,4.000509,yes,Both,yes,"[1.1885061456019219,3.2987672193893811e-17,-1.831183659922398e-33,1.0165111307816044e-49] ; [0.81220021471607706,2.2543084474582116e-17,-1.2513925714875483e-33,6.9466242285517913e-50]",2.000706195831298828125,2.00070631504058837890625 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,moderate,4099,10322096095657499356,41.522382,24.071404,24.000368,20.000000,4.000368,yes,Both,yes,"[6.8051724535006084,1.8888147861053107e-16,-1.0485028323932781e-32,5.8203599295385438e-49] ; [1.1968659760618667,3.3219704100358647e-17,-1.8440640181726446e-33,1.0236611659290266e-49]",8.0020389556884765625,8.002038478851318359375 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,wide_exponent,4096,10322096095657499357,46.805352,24.393682,24.006151,20.000000,4.006151,yes,Both,yes,"[6.8663278648288954e-15,1.9057888225395823e-31,-1.0579253154283554e-47,5.8726652176119575e-64] ; [-3.2984332805285199e-15,-9.154991433081627e-32,5.0820411396266402e-48,-2.821099542652883e-64]",3.567894203281192500032403813747805543243885040283203125e-15,3.567894415039429313607488580828430713154375553131103515625e-15 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,extreme_finite,4096,10322096095657499295,47.155091,24.409642,24.030594,20.000000,4.030594,yes,Both,yes,"[223002548.53621882,6.1895640983749784e-09,-3.4358982872045742e-25,1.9073066943623286e-41] ; [279175322748.44623,7.748671780562106e-06,-4.3013769105216293e-22,2.3877438418260673e-38]",279398318080,279398334384 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.77817428112030029296875,-0.77817428112030029296875 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000016689300537,0,0,0]",-1.6689300537109375e-06,-1.6689300537109375e-06 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,near_one,4099,10322096095657499359,26.016181,24.166616,24.014549,20.000000,4.014549,yes,Both,yes,"[1.4059396726628588,3.902266489560654e-17,-2.1661930524667106e-33,1.2024787013157959e-49] ; [1.4325550147665504,3.9761389035901386e-17,-2.2072004799367987e-33,1.2252423963947649e-49]",2.0140857696533203125,2.014085888497646692485432140529155731201171875 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,moderate,4099,10322096095657499356,25.989725,24.178659,24.028212,20.000000,4.028212,yes,Both,yes,"[-1.4739640396494451,-4.0910720357208028e-17,2.2710011847286731e-33,-1.2606589021183906e-49] ; [2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49]",-4.02748775482177734375,-4.0274875194135120182181708514690399169921875 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,wide_exponent,4096,10322096095657499357,25.942256,24.179837,24.024630,20.000000,4.024630,yes,Both,yes,"[-1122057943862.8401,-3.1143364106002161e-05,1.7288039947384127e-21,-9.5967900001126686e-38] ; [-8694665162187.9277,-0.00024132543636168146,1.3396252793822586e-20,-7.4364141477004576e-37]",9755918009047724494684160,9755918580702648912052224 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,extreme_finite,8,10322096095657499292,40.953446,25.906891,25.906891,20.000000,5.906891,yes,Both,yes,"large neighbour [844424863023104,0.023437498137354851,-1.3010425035850288e-18,7.2222367174802835e-35] ; negative small neighbour [-5.5511156525213747e-16,-1.5407441024465825e-32,8.5528478879580846e-49,-4.7477843256638533e-65]",-0.46875,-0.468750007450577044210149324499070644378662109375 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,near_one,4099,10322096095657499359,25.952819,24.167429,24.029610,20.000000,4.029610,yes,Both,yes,"[1.2982596956909869,3.6033945152474569e-17,2.0002857788178657e-33,1.1103816637369289e-49] ; [1.2798202945460211,3.5522148959688557e-17,1.9718753829605394e-33,1.0946107259271694e-49]",1.01440775394439697265625,1.0144078131795243086497270702039165563127339636105403630860948828655528161513261 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,moderate,4099,10322096095657499356,26.239727,24.172640,24.024913,20.000000,4.024913,yes,Both,yes,"[6.5374711177505596,1.8145127394371573e-16,1.0072569108993997e-32,5.5913990709666165e-49] ; [3.2450059050955762,9.0067006772042607e-17,4.99972323386958e-33,2.775403925497677e-49]",2.0146253108978271484375,2.0146254289230677898843256855109580140862879734170743102717224833311181385074994 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,wide_exponent,4096,10322096095657499357,25.917644,24.144253,24.027945,20.000000,4.027945,yes,Both,yes,"[0.027902000922864607,7.7443609644191634e-19,4.2989839268532189e-35,2.3864154690429567e-51] ; [14499.326437201289,4.0243715130342775e-13,2.2339749567081166e-29,1.2401052166866692e-45]",1.924365506056346930563449859619140625e-06,1.9243653935555734717265282397956262784302341636296406554453298274232840831100044e-06 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,extreme_finite,8,10322096095657499292,25.430169,24.584963,24.584963,20.000000,4.584963,yes,Both,yes,"large positive [844424930131968,0.0234375,1.3010426069826053e-18,7.2222372914521344e-35] ; small negative [5.5511151231257827e-16,1.5407439555097887e-32,8.5528470722950261e-49,4.7477838728798994e-65]",1521180780720166262527502581760,1521180720273875281796043846451.2 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,moderate,4099,10322096095657499356,25.971753,24.150757,24.027403,20.000000,4.027403,yes,Both,yes,"[-1.9749460259140985,-5.4815763759044581e-17,3.0428861518852258e-33,-1.6891411335680094e-49] ; [-6.4158772339979464,-1.7807636570882208e-16,9.885224067575198e-33,-5.4874016817003646e-49] ; [3.4130940773098271,9.4732390746028102e-17,-5.2587040692013754e-33,2.9191671686586848e-49]",16.0841045379638671875,16.0841054786133099696598947048187255859375 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; next value after one [1.0000001192092896,0,0,0] ; native product cancellation",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,wide_exponent,4096,10322096095657499357,32.556508,24.197422,24.009758,20.000000,4.009758,yes,Both,yes,"[0.0072982921122313887,2.0256829858598637e-19,-1.124479945746528e-35,6.2421176324852115e-52] ; [1.9523314176984748e-12,5.4188082290698013e-29,-3.0080428309707814e-45,1.6697992050011997e-61] ; [-2.3939769383437016e-07,-6.6446207934270406e-24,3.6885054973828883e-40,-2.0475318648254738e-56]",-2.39397678569730487652122974395751953125e-07,-2.3939769274275411635131445493727566081466591810245070348628360079601407051086426e-07 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",3588998231833025183056134144,3588998231833025183056134144 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fabs,native,float,native float,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,moderate,4099,10322096095657499356,25.964756,24.164418,24.008593,20.000000,4.008593,yes,Both,yes,"[-4.0059402826070123,-1.1118717842559279e-16,6.1721282765599288e-33,-3.4262194617884094e-49]",16.0475597381591796875,16.0475587873306722030974924564361572265625 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,wide_exponent,4096,10322096095657499357,25.989404,24.167423,24.020149,20.000000,4.020149,yes,Both,yes,"[797963256397175.88,0.022147929501425297,-1.2294570640128564e-18,6.8248577012755909e-35]",636745309315666385691207532544,636745346742277146199547969536 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,near_one,4099,10322096095657499359,26.024612,24.188379,24.024049,20.000000,4.024049,yes,Both,yes,"[0.99957607711604157,2.774380939196801e-17,1.5400907988887275e-33,8.5492213246980834e-50]",1.0004241466522216796875,1.0004240880080409757745092099607730518546575501261053598713520202379186199441578 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,wide_exponent,4096,10322096095657499357,25.897082,24.141136,24.016290,20.000000,4.016290,yes,Both,yes,"[1.4835519773135318e-08,4.1176839086041523e-25,2.2857737417304193e-41,1.2688593185763538e-57]",67405800,67405796.027411572915787349932438540624582792272908782750245310659982961460931995 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",-4402.79248046875,-4402.79248046875 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055850982666015625,-7.055850982666015625 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",3588998231833025183056134144,3588998231833025183056134144 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,moderate,4099,10322096095657499356,48.522678,24.128146,24.008521,20.000000,4.008521,yes,Both,yes,"[6.6457375410806137,1.8445627084308674e-16,-1.0239379946324441e-32,5.6839976871472472e-49] ; [2.6220427968328792,7.27763071149101e-17,-4.0398965903082395e-33,2.2425931058324353e-49]",4.0236949920654296875,4.0236947536468505859375 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000016689300537,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,copysign,native,float,native float,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,floor,native,float,native float,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,ceil,native,float,native float,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,trunc,native,float,native float,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round,native,float,native float,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,roundeven,native,float,native float,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_decimals,native,float,native float,bl::round_decimals,moderate,4099,10322096095657499356,26.229396,24.222837,24.047915,20.000000,4.047915,yes,Both,yes,"[4.1022214313758827,1.1385951713060679e-16,-6.3204728745551046e-33,3.5085672559249129e-49]",4.10200023651123046875,4.102 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_significant,native,float,native float,bl::round_significant,wide_exponent,4096,10322096095657499357,26.031860,24.190158,24.023953,20.000000,4.023953,yes,Both,yes,"[259.8694582017871,7.2128263973122191e-15,-4.0039229694600715e-31,2.2226237347600494e-47]",259.869384765625,259.8694 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,lround,native,float,native float,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,llround,native,float,native float,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remquo,native,float,native float,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.944149017333984375 ; 1,-0.944149017333984375 ; 1 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0 ; 3588998231833025183056134144,0 ; 3588998231833025183056134144 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ldexp,native,float,native float,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbn,native,float,native float,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbln,native,float,native float,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0.724792420864105224609375 ; 92,0.724792420864105224609375 ; 92 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,-,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,near_one,4099,10322096095657499359,25.904846,24.145989,24.002397,20.000000,4.002397,yes,Both,yes,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",1.00001394748687744140625,1.0000140069934242844029017485374012760134473363250144717592753776502313379618068 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,wide_exponent,4096,10322096095657499357,25.966753,24.215195,24.033944,20.000000,4.033944,yes,Both,yes,"[8.4482670931604627e+31,2344865161252447,0.13016616458319236,7.2256736473703873e-18]",9191445835546624,9191445300433280.2040066177032811142195637421096986523537003168905974560430072948 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,extreme_finite,4096,10322096095657499295,25.972131,24.206633,24.003202,20.000000,4.003202,yes,Both,yes,"[3.2519120367544908e+32,9025869043151310,0.50103638144790075,2.7813106342916602e-17]",18033057994899456,18033059067370500.361343159063133250828533418772371371727970165496211972696634283 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,subnormal,4100,10322096095657499290,27.589271,24.195086,24.031452,20.000000,4.031452,yes,Both,yes,"[1.8779781629341901e-40,0,0,0]",1.370393513549582123487035494914521027709497502655722200870513916015625e-20,1.3703934336292589277694998548128719273180184126519025205252581878215739867341933e-20 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,moderate,4099,10322096095657499356,26.121671,24.307590,24.011464,20.000000,4.011464,yes,Both,yes,"[-0.12734564822864947,-3.5345517687315605e-18,1.9620703776876749e-34,-1.0891678546219169e-50]",-0.503108203411102294921875,-0.50310817366085437588363001613632148997996157892580724817608234206272558983482038 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,wide_exponent,4096,10322096095657499357,25.961382,24.184600,24.005421,20.000000,4.005421,yes,Both,yes,"[-4.7851378793851705e-07,-1.3281425624248529e-23,7.3726722639436296e-40,-4.0926552502227485e-56]",-0.0078216455876827239990234375,-0.0078216460521407890323068501659743654531084116067288348014097193957698386594415734 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,moderate,4099,10322096095657499356,25.920822,23.829802,23.432741,20.000000,3.432741,yes,Both,yes,"[-3.4039723624121567,-9.4479212298441604e-17,5.2446498421089063e-33,-2.9113655054029998e-49] ; [2.1132959491270853,5.8655745514199089e-17,-3.2560479598208786e-33,1.807469707138453e-49]",4.00662517547607421875,4.0066255293274870942068556648048777674027128914889773952995489983515655060881798 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,wide_exponent,4096,10322096095657499357,50.908019,24.428796,23.810260,20.000000,3.810260,yes,Both,yes,"[1.3016435237790612e-26,3.6127865248843406e-43,-2.0054993914910505e-59,1.1132758001525525e-75] ; [-3.5587193322648507e-29,-9.87743035214775e-46,5.4830753005429e-62,-3.0437182222081139e-78]",1.3016482270058686551256361387989705019141775665936222594609716907143592834472656e-26,1.3016483154952332663243636760967048106736841157205171156309047712621084297282463e-26 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,moderate,4099,10322096095657499356,26.149142,24.214150,24.040329,20.000000,4.040329,yes,Both,yes,"[-5.7483236179995885,-1.5954803084249315e-16,8.8566948687470254e-33,-4.9164532826812132e-49]",0.509722173213958740234375,0.5097222027582440476609190572223045086789238470780369932414545068400613217789304 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,argument_reduction,4111,10322096095657499282,26.207717,24.232934,24.054458,20.000000,4.054458,yes,Both,yes,"near 2^94 * pi/2 [3.1112832252188646e+28,0,0,0]",-0.031775273382663726806640625,-0.031775275206458036754431969895458660655905161590001855338797800351243967744526865 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,moderate,4099,10322096095657499356,26.060965,24.256137,24.035729,20.000000,4.035729,yes,Both,-,"[4.4588502387206184,1.2375795495957516e-16,-6.8699465538321711e-33,3.8135864210043619e-49]",-0.25083100795745849609375,-0.25083099337247927050646438955413445736165895666786844698074070181158501850594916 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,argument_reduction,4111,10322096095657499282,26.627890,24.245703,24.076319,20.000000,4.076319,yes,Both,-,"near 2^70 * pi/2 [1.8544669218107189e+21,0,0,0]",-0.5190365314483642578125,-0.51903650210542794358474489503209069334133171874228756988100493423128724002299192 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,moderate,4099,10322096095657499356,25.852746,23.939094,23.685570,20.000000,3.685570,yes,Both,yes,"[7.3913821288133494,2.0515206558028713e-16,-1.1388227337832242e-32,6.3217361000635033e-49]",2.0052521228790283203125,2.0052519742505502539863888610136632712742923325354975736539410668457866583704449 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,argument_reduction,4111,10322096095657499282,25.835514,23.939203,23.695474,18.000000,5.695474,yes,Both,yes,"near 2^97 * pi/2 [-2.4890248801231579e+29,0,0,0]",-0.52050912380218505859375,-0.52050916211815582205576854961366966548306784253462927311031735282020254938006464 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,near_one,4099,10322096095657499359,26.050622,24.020781,23.596965,20.000000,3.596965,yes,Both,yes,"[0.71922710578923366,1.9962562319543011e-17,-1.1081448158835611e-33,6.1514394460646721e-50]",0.62351381778717041015625,0.62351386692907070779012292156054631631024307694194481327290115652451841596639583 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,moderate,4099,10322096095657499356,25.890838,24.033313,23.738430,20.000000,3.738430,yes,Both,yes,"[2.740373616415912,7.606064712550631e-17,-4.2222140853313167e-33,2.3437996462157366e-49]",1.220897674560546875,1.2208975873237565513867594923724470425971932151710826740434483130843362665757323 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,near_one,4099,10322096095657499359,25.753284,23.664727,23.186166,20.000000,3.186166,yes,Both,yes,"[0.75874883563427742,2.1059510680717581e-17,-1.1690376822536031e-33,6.4894627574618896e-50] ; [1.2024228110630841,3.337393725441851e-17,-1.8526256781125355e-33,1.0284138419261654e-49]",0.5629141330718994140625,0.56291419205272246525123187856361583474888387525815698747343271879709705597995345 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,moderate,4099,10322096095657499356,25.805113,23.622066,23.093975,20.000000,3.093975,yes,Both,yes,"[-6.7041652599716528,-1.8607796581281568e-16,1.0329402101040035e-32,-5.7339700215930573e-49] ; [-3.3155640780338107,-9.2025389476330397e-17,5.1084353123359792e-33,-2.8357512517818035e-49]",-2.030076503753662109375,-2.030076730496361815048882948110558869916254104068486839776277606909444568084838 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,extreme_finite,8,10322096095657499293,32.824184,25.098912,25.098912,20.000000,5.098912,yes,Both,yes,"huge positive [3.1901471898837981e+37,8.8544371553805848e+20,-49152,2.7284841053187847e-12] ; tiny negative [-1.4693679385278594e-38,-4.0783152924990778e-55,2.2639197697066781e-71,-1.256727927116218e-87]",1.57079637050628662109375,1.5707963267948966192313216916397514420985846996875529104874722961539082031435651 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,moderate,4099,10322096095657499356,25.892206,24.071556,23.875711,20.000000,3.875711,yes,Both,yes,"[-0.12634655031145781,-3.50682123094353e-18,1.9466768369189202e-34,-1.0806227229259281e-50]",-0.12668512761592864990234375,-0.12668513584631758078515417624326368013544374285528004332252620415520568525994363 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,boundary,4105,10322096095657499355,25.358925,24.717543,24.717543,20.000000,4.717543,yes,Both,yes,"[-0.99999928983607478,-2.7755555904620388e-17,1.5407428613290135e-33,-8.5528409983715774e-50]",-1.5696003437042236328125,-1.5696002868101387248982831177317988458122594291620956459638041678924528508701691 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,moderate,4099,10322096095657499356,25.891020,23.834915,23.233461,20.000000,3.233461,yes,Both,-,"[-0.50561083532054285,-1.4033519771820625e-17,7.7901683836038157e-34,-4.3244121525919475e-50]",2.10088634490966796875,2.100886131883129287630282622919342773294860395034021966989680726379996798074407 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,boundary,4105,10322096095657499355,25.982187,24.584962,24.310484,20.000000,4.310484,yes,Both,-,"[-1,0,0,0]",3.141592502593994140625,3.141592653589793238462643383279502884197169399375105820974944592307816406286209 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,moderate,4099,10322096095657499356,25.945177,24.173984,24.007691,20.000000,4.007691,yes,Both,-,"[0.69706560262123496,1.9347457042607623e-17,-1.0739996138324561e-33,5.9618954985765975e-50]",2.007852077484130859375,2.0078521965251381745368245393757138670217404209691449932482836198723071521808851 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,boundary,4099,10322096095657499289,25.985100,24.189213,24.012647,20.000000,4.012647,yes,Both,-,"[-55.445402102948194,-1.538919050607329e-15,8.5427168150927155e-32,-4.7421604504842094e-48]",8.32470122137760864279645685032325255932328378349893682752735912799835205078125e-25,8.3247007295174246704446931992286856723729842657502269685404369668574123561739996e-25 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,moderate,4099,10322096095657499356,25.945545,24.176633,24.015565,20.000000,4.015565,yes,Both,-,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",16.047374725341796875,16.047373779108025107147981190408654763758177217950870805754027309567667903729689 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,boundary,4099,10322096095657499289,25.953108,24.184447,24.013981,20.000000,4.013981,yes,Both,-,"[12.008718688899336,3.3330889961656162e-16,-1.8502360733339086e-32,1.0270873448036725e-48]",4120.82763671875,4120.8278799704215331782631104353597855518360018117915418683951931281930912686669 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,moderate,4099,10322096095657499356,26.081834,24.050893,23.696269,20.000000,3.696269,yes,Both,yes,"[1.6346453250862929,4.537052192516691e-17,-2.5185699040290393e-33,1.3980871482905051e-49]",4.12763881683349609375,4.1276391205119756417580591652446801308216360859055035530288964538801271100865379 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,cancellation,4098,10322096095657499288,46.696525,24.485159,24.016252,20.000000,4.016252,yes,Both,yes,"[-1.1965551038883859e-07,0,0,0]",-1.196554961779838777147233486175537109375e-07,-1.1965550323011829523677667765761457423866745044376741105251334473664474539150728e-07 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,near_one,4099,10322096095657499359,25.911420,24.149004,23.791538,20.000000,3.791538,yes,Both,-,"[0.98386586207801563,2.730776333054229e-17,1.51588538002913e-33,8.4148542580049779e-50]",-0.0162657164037227630615234375,-0.016265715283494616429682100731196418471765423103845053838921650067906120819226043 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,wide_exponent,4096,10322096095657499357,25.934073,24.148103,24.055764,20.000000,4.055764,yes,Both,-,"[3.2617843787809539e-29,9.0532702967131949e-46,5.0255745657830058e-62,2.7897542974514332e-78]",-65.59268951416015625,-65.59269327555488150776766062278388871045172786432349789542906836393403051939105 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,extreme_finite,4096,10322096095657499295,25.928908,24.171772,24.028998,20.000000,4.028998,yes,Both,-,"[1.925072119386236e+28,534314847751.63684,2.9660432318647614e-05,1.6464847440249349e-21]",65.12734222412109375,65.127346028765523545207426082299833753247218536882252197810633399468572469932133 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,near_one,4099,10322096095657499359,25.997641,24.168133,23.675086,20.000000,3.675086,yes,Both,-,"[1.0239856815956481,2.8421312014849322e-17,1.5776997494470658e-33,8.7579929389073653e-50]",0.0341954641044139862060546875,0.034195461551375619696170753702097836731645774772968144626738312328832836284482893 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,wide_exponent,4096,10322096095657499357,25.972931,24.199454,24.028872,20.000000,4.028872,yes,Both,-,"[279.54938708294071,7.7590541514832776e-15,4.307140284145071e-31,2.3909431568741984e-47]",8.1269588470458984375,8.1269593218526276965603717987343564084569415244724976083039632724987237766261338 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,extreme_finite,4096,10322096095657499295,26.022657,24.191270,24.003063,20.000000,4.003063,yes,Both,-,"[5.0098439803322917e-20,1.3905110341861625e-36,7.7188868307440791e-53,4.2848429419839901e-69]",-64.113800048828125,-64.113796235451863124774831376509181438042251966024731816806674549792684463109039 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,near_one,4099,10322096095657499359,25.936041,24.087575,23.886435,20.000000,3.886435,yes,Both,-,"[0.74782015069601115,2.0756178739534147e-17,1.1521993769932985e-33,6.3959913864836042e-50]",-0.1262028515338897705078125,-0.12620284339555404617201840368672443589899010161928869855986447839671506825302528 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,wide_exponent,4096,10322096095657499357,25.951082,24.149006,23.956267,20.000000,3.956267,yes,Both,-,"[0.54583076440008993,1.5149847054643226e-17,8.4098545098072611e-34,4.6684070552678653e-50]",-0.26294195652008056640625,-0.2629419726750062648874905383120679265265441493437994181320568202191380910398945 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,extreme_finite,4096,10322096095657499295,25.879264,24.160691,23.980680,20.000000,3.980680,yes,Both,-,"[3.3720516904229503,9.3593235673343497e-17,5.1954682596857258e-33,2.8840642428061424e-49]",0.5278942584991455078125,0.52789422661000368121110961342477919791929563744217358133476513892599287328236552 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,moderate,4099,10322096095657499356,25.954076,24.084004,23.647008,20.000000,3.647008,yes,Both,yes,"[1.8078124361518777,5.0176874770487759e-17,-2.7853760836964313e-33,1.5461943301800126e-49]",1.0324056148529052734375,1.032405693447327095603589566278373265083861662204948974115159316925995706506831 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,cancellation,4098,10322096095657499288,46.683647,24.504409,24.016252,20.000000,4.016252,yes,Both,yes,"[-1.1965551038883859e-07,0,0,0]",-1.196555245996933081187307834625244140625e-07,-1.1965551754755974717708527518014233670876945163456733519223050444765622173963702e-07 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,near_one,4099,10322096095657499359,25.935113,24.183020,24.022132,20.000000,4.022132,yes,Both,yes,"[1.0032222542802387,2.7845011137956863e-17,1.545708624315182e-33,8.5804065203819558e-50] ; [1.1098483278340112,3.0804479185076206e-17,1.7099921026428991e-33,9.4923630214066531e-50]",1.00357687473297119140625,1.0035768158257674189368635854208332740856335659539134346018913304416269618692691 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,moderate,4099,10322096095657499356,25.910731,24.173665,24.033763,20.000000,4.033763,yes,Both,yes,"[1.5010856767109688,4.1663497005488793e-17,2.312788683094746e-33,1.2838556235321408e-49] ; [6.8472618406345225,1.900496937777419e-16,1.054987729275047e-32,5.8563583386908427e-49]",16.1396617889404296875,16.139662728687068635103760006664480606823689561120066764019143935355322552829973 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,moderate,4099,10322096095657499356,24.296761,22.240676,21.817420,20.000000,1.817420,yes,Both,yes,"[-2.0174902967783854,-5.5996604486030095e-17,3.108435980060947e-33,-1.7255285978184637e-49]",-136.0443267822265625,-136.04428997082654660356838684633834963763840941785070423709212066151322168144796 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,wide_exponent,4096,10322096095657499357,24.307980,22.194400,21.763685,20.000000,1.763685,yes,Both,yes,"[8.3253759191734602,2.3107560085315504e-16,-1.282727262481326e-32,7.1205667056058241e-49]",2772213.75,2772214.528582891558413966128826065404980229940407596127199381800655092889207728 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[30287485871.102478,8.4064660430267718e-07,4.666526078348927e-23,2.590442348598358e-39] ; [2.0009290447377264e-12,5.5536937402726095e-29,3.0829193310836276e-45,1.7113640122155147e-61]",1.12052207790203084414315526373684406280517578125e-12,1.12052207790203084414315526373684406280517578125e-12 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remainder,native,float,native float,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,near_one,4099,10322096095657499359,25.529316,23.361140,23.020443,20.000000,3.020443,yes,Both,yes,"[0.70944205358080048,1.9690972563068967e-17,-1.09306855583907e-33,6.0677493909315204e-50]",0.770469188690185546875,0.7704690981354063654714500516807083249740764906991128041118997725210624314315962 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,moderate,4099,10322096095657499356,25.564722,23.386851,23.051853,20.000000,3.051853,yes,Both,yes,"[-6.2539872895448347,-1.7358301711414378e-16,9.6357931142012508e-33,-5.3489396879553845e-49]",-260.04022216796875,-260.04025207279614242456253420762007990089694478682673757384711825719656661791232 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,near_one,4099,10322096095657499359,25.697399,23.608047,23.206251,20.000000,3.206251,yes,Both,-,"[1.3953830473521402,3.8729659683549029e-17,-2.1499279958286393e-33,1.1934497811275864e-49]",2.142129421234130859375,2.1421291998900342817831142388797898504754547155416439660953907321061610583047276 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,moderate,4099,10322096095657499356,25.707338,23.435763,23.133034,20.000000,3.133034,yes,Both,-,"[-6.2519511890647177,-1.7352650397330687e-16,9.6326560046936999e-33,-5.3471982423523578e-49]",259.513275146484375,259.51324693523434611492872216708326007958146865749754287925268958549988607875452 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,near_one,4099,10322096095657499359,25.811593,23.252304,22.770851,20.000000,2.770851,yes,Both,yes,"[0.55053801611222186,1.5280499535481103e-17,-8.4823812060325649e-34,4.7086674592925286e-50]",0.5009233951568603515625,0.50092332516266426581462294437658074146517932243358578851398059164045274937370487 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,moderate,4099,10322096095657499356,26.321153,23.811602,22.788821,20.000000,2.788821,yes,Both,yes,"[-0.26867117952962438,-7.4571232391747006e-18,4.1395349587995404e-34,-2.2979035112499992e-50]",-0.2623879015445709228515625,-0.2623879377542869002962259728363187454606902033574049042581323579935890415468469 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,near_one,4099,10322096095657499359,25.609004,23.443455,23.090762,20.000000,3.090762,yes,Both,yes,"[1.3953690800643999,3.8729272013438006e-17,-2.1499064758144785e-33,1.1934378351199806e-49]",1.13528728485107421875,1.1352874119359033108648409985060760802390820483064754866465702177133212273123448 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,moderate,4099,10322096095657499356,25.804320,23.740800,23.164290,20.000000,3.164290,yes,Both,yes,"[-0.28498036411816408,-7.9097940452511638e-18,4.3908177345403997e-34,-2.4373934729096101e-50]",-0.281257450580596923828125,-0.28125748050033681800965652296148653111020713782363887294267066034968006146088286 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,moderate,4099,10322096095657499286,26.033027,23.915055,22.976072,20.000000,2.976072,yes,Both,-,"[1.6675308902096515,4.6283279714610978e-17,-2.5692381397163776e-33,1.4262136692291136e-49]",1.0992603302001953125,1.0992601969666530400360984003096511694477122935216436866752244351652074528316848 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,boundary,4101,10322096095657499355,25.752857,23.793907,23.793907,20.000000,3.793907,yes,Both,-,"[1.9999994915125949,5.5511137117897206e-17,-3.0814871275706815e-33,1.7105689795575038e-49]",1.3169577121734619140625,1.3169576216227113023399862811927493515571819731899743868099047486919155844722929 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,moderate,4099,10322096095657499356,25.711955,23.567857,23.131742,20.000000,3.131742,yes,Both,yes,"[0.13604771814260808,3.7760827282409281e-18,-2.0961469938912281e-34,1.1635953278084244e-50]",0.1368965208530426025390625,0.13689653574817252755090928457855299024525581690408985396836385461294028098218013 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,boundary,4105,10322096095657499355,26.088438,25.637514,25.637514,20.000000,5.637514,yes,Both,yes,"[0.99899949151259504,2.7727805926652667e-17,-1.5392024281053832e-33,8.5442898762077182e-50]",3.7999393939971923828125,3.7999393211997930734222062320257072616372641916906079170097936373745998626952477 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,near_one,4099,10322096095657499359,26.093806,24.216306,23.832036,20.000000,3.832036,yes,Both,yes,"[0.82702049455505422,2.2954429872297628e-17,-1.2742268280684159e-33,7.07337981558318e-50]",0.75783145427703857421875,0.75783140352952517711597272820328209450854836624944561227614555251248356400115264 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,moderate,4099,10322096095657499356,36.993599,24.499379,23.839199,20.000000,3.839199,yes,Both,yes,"[0.81787985777320493,2.2700726236924011e-17,-1.2601434471972712e-33,6.9952013470446281e-50]",0.75258743762969970703125,0.75258738748294499172523085430305904644591529960072519201515925937266508496163585 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,near_one,4099,10322096095657499359,25.515231,23.034851,22.454135,20.000000,2.454135,yes,Both,-,"[1.4104525202089766,3.9147921576914618e-17,-2.1731461950455288e-33,1.2063384708080487e-49]",0.0460776872932910919189453125,0.046077679274249055471348924218681269569113928158561199352966180410867689146380014 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,moderate,4099,10322096095657499356,31.481348,23.091183,22.460533,20.000000,2.460533,yes,Both,-,"[1.8617235593836767,5.1673209027871445e-17,-2.868439320950569e-33,1.5923036894297355e-49]",0.008466559462249279022216796875,0.0084665579953074810854123449452929773475160244983938211579514117629784265616586852 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,lgamma,native,float,native float,bl::lgamma,moderate,4099,10322096095657499287,25.229736,22.875595,22.383754,20.000000,2.383754,yes,Both,-,"[8.7425466956298532,2.4265441588372109e-16,-1.3470025977053773e-32,7.4773664910120344e-49]",10.0574245452880859375,10.057422707457986379801366104572257517578790020298668763257226690664594301820651 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,tgamma,native,float,native float,bl::tgamma,moderate,4099,10322096095657499284,25.954376,24.168618,24.020748,20.000000,4.020748,yes,Both,-,"[0.4414856138169595,1.2253687337508964e-17,-6.8021629093300919e-34,3.7759589395947546e-50]",2.00635814666748046875,2.0063580287867931569119828375944428366303226782250476941651785755335234918772241 diff --git a/validation/metrics/data/native/strict/19e76954d837453282d2eb0484d1febb/f64_accuracy.csv b/validation/metrics/data/native/strict/19e76954d837453282d2eb0484d1febb/f64_accuracy.csv new file mode 100644 index 0000000..83481ae --- /dev/null +++ b/validation/metrics/data/native/strict/19e76954d837453282d2eb0484d1febb/f64_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,near_one,4099,10322096095657499359,68.804804,53.029455,53.001693,48.000000,5.001693,yes,Both,yes,"[1.4297151598371682,3.9682567227671501e-17,-2.2028249906198284e-33,1.222813511902914e-49] ; [0.57263374255596289,1.5893779141572608e-17,-8.8228197756404827e-34,4.8976488285171109e-50]",2.00234890239313134685517070465721189975738525390625,2.0023489023931311248105657796259038150310516357421875 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-15.0558510431143677266163649619556963443756103515625,-15.0558510431143677266163649619556963443756103515625 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,wide_exponent,4096,10322096095657499357,82.842054,53.932557,53.150426,48.000000,5.150426,yes,Both,yes,"[-2.5801269239800948e-52,-7.1612907936449556e-69,3.9753149625703952e-85,-2.2067431007912725e-101] ; [6.2882455610389305e-52,1.745338751590589e-68,-9.6885763389319921e-85,5.3782402636604011e-101]",3.7081186370588353126400687774493756982129860731379218490790094277487448813887287e-52,3.7081186370588356835606838461915142713865122279018731858354873035278451266926346e-52 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,extreme_finite,4096,10322096095657499295,83.051539,53.922063,53.033213,48.000000,5.033213,yes,Both,yes,"[4.044152691012953e+59,1.1224778581655917e+43,-6.2310038138368535e+26,34589019503.244186] ; [-3.2763861007278913e+51,-9.0937982164748556e+34,5.0480720806127841e+18,-280.22429269318661]",404415265824909244971463481926668921988920568307135488720896,404415265824909201094180361492905708699283935084133453135872 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [2.2250738585072014e-308,0,0,0]",2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308,2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.7781742597549925477551369112916290760040283203125,-0.7781742597549925477551369112916290760040283203125 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",-9.65894031423886190168559551239013671875e-14,-9.65894031423886190168559551239013671875e-14 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [2.2250738585072014e-308,0,0,0]",-2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308,-2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,near_one,4099,10322096095657499359,54.941335,53.192655,53.017782,48.000000,5.017782,yes,Both,yes,"[0.61590653178072707,1.7094840314999723e-17,-9.489542660001528e-34,5.267754377148175e-50] ; [0.81645463695581544,2.2661168412757988e-17,-1.2579475468376116e-33,6.9830116513492445e-50]",0.50285974380374887093836377971456386148929595947265625,0.50285974380374892608309676348753773569247609448642907343737535469374577701273665 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,moderate,4099,10322096095657499356,54.943506,53.177920,53.014990,48.000000,5.014990,yes,Both,yes,"[-1.8309845685969375,-5.0820030644741984e-17,2.8210784066974295e-33,-1.5660131006941688e-49] ; [4.4139715148669616,1.2251232014612206e-16,-6.8007999313236564e-33,3.7752023348123534e-49]",-8.0819137299478551739184695179574191570281982421875,-8.0819137299478542859205922880040108996859918106071002798056202021115268507855944 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,wide_exponent,4096,10322096095657499357,54.949502,53.147252,53.012976,48.000000,5.012976,yes,Both,yes,"[-9580440436661.9609,-0.00026591063897079994,1.4761005693908477e-20,-8.1940041940001134e-37] ; [3.5476231799149722e+112,9.8466323425887909e+95,-5.465978970880409e+79,3.0342278527941741e+63]",-3.3987792566896694596919030454680074525269527091652711616914422309578532569280119e+125,-3.3987792566896690857302928923045025855537603060392874444605126408265807925080287e+125 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,extreme_finite,8,10322096095657499292,69.953445,54.906891,54.906891,48.000000,6.906891,yes,Both,yes,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,-2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [-2.4203699467808244e-121,-6.7178761075670899e-138,3.729170365600104e-154,-2.0701054013195242e-170]",-0.46875,-0.46875000000000001387778780781444442934375177282579434799116745646516135614945142 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,near_one,4099,10322096095657499359,54.949938,53.186535,53.032508,48.000000,5.032508,yes,Both,yes,"[0.79583533097289294,2.2088867706407193e-17,1.2261784757776169e-33,6.8066578805404505e-50] ; [0.78671878189697564,2.1835832639176979e-17,1.212132207893789e-33,6.7286854304670572e-50]",1.01158806588287486505350898369215428829193115234375,1.0115880658828749748599930078884108617347838241152708567193976201713984484334261 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,moderate,4099,10322096095657499356,55.299598,53.162157,53.017700,48.000000,5.017700,yes,Both,yes,"[5.6982279612785671,1.5815759705435825e-16,8.7795102884568185e-33,4.8736072335891048e-49] ; [5.6630083746783413,1.571800571553245e-16,8.725245923286967e-33,4.8434844597749865e-49]",1.0062192361850825772506823341245763003826141357421875,1.0062192361850826876012316258994293315599871850773075711644181221348221597609452 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,wide_exponent,4096,10322096095657499357,54.940111,53.173252,53.006391,48.000000,5.006391,yes,Both,yes,"[1.1797107595829603e-08,3.2743551192175876e-25,1.8176322220773076e-41,1.0089885716254063e-57] ; [2.9273558682385512e-68,8.1250447154750139e-85,4.5103058596146572e-101,2.5037227067229757e-117]",402995335272583736023300876476329416171344205099568646324224,402995335272583691479603215316671542832621087480350248383875.97791882737549902199 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,extreme_finite,8,10322096095657499292,54.565310,53.447459,53.447459,48.000000,5.447459,yes,Both,yes,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [2.4203699467808244e-121,6.7178761075670899e-138,3.729170365600104e-154,2.0701054013195242e-170]",8.0016173194558218715832353057948522675740813308632367068153019530691147107160091e+240,8.0016173194558225230457526744094465773333433188328184012700026520990852868662071e+240 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,moderate,4099,10322096095657499356,54.957904,53.175116,53.010971,48.000000,5.010971,yes,Both,yes,"[-2.0766790938067476,-5.7639423617548914e-17,3.1996307613162919e-33,-1.7761518707561329e-49] ; [1.7605984240305848,4.8866422686937992e-17,-2.7126313799051833e-33,1.5058129076457224e-49] ; [-0.3659974929680736,-1.0158471091205978e-17,5.6390842502229579e-34,-3.1303205861993077e-50]",-4.02219543274149682332563315867446362972259521484375,-4.0221954327414963801553326667348806266375851488013985258768850927779681114770938 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; next value after one [1.0000000000000002,0,0,0] ; native product cancellation",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,wide_exponent,4096,10322096095657499357,67.731490,53.261032,53.076165,48.000000,5.076165,yes,Both,yes,"[9.3280228061672898e+101,2.5890464234088722e+85,-1.4372094755459709e+69,7.9781152548029138e+52] ; [-1.157500052342858e+78,-3.212708022789662e+61,1.7834112091495225e+45,-9.8999209338619524e+28] ; [1.8812092993044754e+65,5.2214046955669652e+48,-2.8984618569521754e+32,16089695447930460]",-1.0797186886394012091182337394342607583764140817913341512476728655410802178495674e+180,-1.0797186886394010954097576163349944382733983701060212581740083991443274190535586e+180 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fabs,native,double,native double,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,moderate,4099,10322096095657499356,54.987841,53.178902,53.024599,48.000000,5.024599,yes,Both,yes,"[-4.0291701907573039,-1.1183193789780232e-16,6.2079196171295382e-33,-3.4460876469796998e-49]",16.234212426087250236150794080458581447601318359375,16.234212426087248464261717100553537863564519292427420360394943465998096598923439 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,wide_exponent,4096,10322096095657499357,54.966048,53.184279,53.034276,48.000000,5.034276,yes,Both,yes,"[2.9507000691330746e-25,8.1898378887864514e-42,-4.5462732960391003e-58,2.5236886447505548e-74]",8.7066308979819320541420161769186049656218085566280656265540977462941222974600937e-50,8.7066308979819311102069574980521020700209525169860268542733130882306736168377202e-50 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,near_one,4099,10322096095657499359,55.022120,53.212652,53.036371,48.000000,5.036371,yes,Both,yes,"[0.9803714880397002,2.7210774967692536e-17,1.5105014443513052e-33,8.384967411241868e-50]",1.02002150429685389809719708864577114582061767578125,1.0200215042968537876713460424605364405111022006296562878115184748990877637517355 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,wide_exponent,4096,10322096095657499357,54.902665,53.142478,53.019012,48.000000,5.019012,yes,Both,yes,"[5.654455339035485e-101,1.5694266272779603e-117,8.7120678853189764e-134,4.8361691791892627e-150]",1.7685169305282301591156520034137992060834685455134402926455624168717720163565455e+100,1.7685169305282303528900122951557431771119667320589594598759928180992244301081954e+100 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166,-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143677266163649619556963443756103515625,-7.0558510431143677266163649619556963443756103515625 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,copysign,native,double,native double,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,floor,native,double,native double,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,ceil,native,double,native double,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,trunc,native,double,native double,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round,native,double,native double,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,roundeven,native,double,native double,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_decimals,native,double,native double,bl::round_decimals,moderate,4099,10322096095657499356,55.241937,53.207435,53.013030,48.000000,5.013030,yes,Both,yes,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",4.0039999999999995594635038287378847599029541015625,4.004 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_significant,native,double,native double,bl::round_significant,wide_exponent,4096,10322096095657499357,62.492824,53.239040,53.008690,48.000000,5.008690,yes,Both,yes,"[1.4846549805182609e+20,4120.7453574894662,-2.2874731872510136e-13,1.2698027003493837e-29]",148465500000000016384,148465500000000000000 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,lround,native,double,native double,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,llround,native,double,native double,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remquo,native,double,native double,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.9441489568856322733836350380443036556243896484375 ; 1,-0.9441489568856322733836350380443036556243896484375 ; 1 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ldexp,native,double,native double,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbn,native,double,native double,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbln,native,double,native double,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.7247924004236494521791200895677320659160614013671875 ; -815,0.7247924004236494521791200895677320659160614013671875 ; -815 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,near_one,4099,10322096095657499359,54.920710,53.127507,53.001106,48.000000,5.001106,yes,Both,yes,"[1.0010388911274162,2.7784410636872319e-17,1.5423446207347879e-33,8.5617325492325808e-50]",1.0005193107218952608405970750027336180210113525390625,1.0005193107218951498457515954360620198623563387038363607072361122298411008899428 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,wide_exponent,4096,10322096095657499357,55.009451,53.211448,53.027507,48.000000,5.027507,yes,Both,yes,"[6.0219100959119555e-185,1.6714158101760344e-201,9.2782215808997173e-218,5.1504476133444428e-234]",7.7600967106808367478172926221258513837894764415588410983624981464748121495074265e-93,7.7600967106808375930900190108944118736382926995509918646504739659308953242516058e-93 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,extreme_finite,4096,10322096095657499295,54.924178,53.221411,53.017887,48.000000,5.017887,yes,Both,yes,"[2.3783259304591718e+282,6.6011805201470536e+265,3.664391301587163e+249,2.0341457971291071e+233]",1.542182197556168240060235866024934642345121301250108457830389998905645354877265e+141,1.5421821975561680709533351179752169384434445730363281277866248379626469712289668e+141 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,subnormal,4100,10322096095657499290,56.222608,53.192031,53.028655,48.000000,5.028655,yes,Both,yes,"[1.3924978593053044e-312,0,0,0]",1.1800414650787929320982458320284728300669497402903960639237252491051024255975799e-156,1.1800414650787930605326941577347439698813910767655579114793014150350187021874733e-156 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,moderate,4099,10322096095657499356,55.052793,53.116805,52.795960,48.000000,4.795960,yes,Both,yes,"[-1.2955868644776452,-3.595975918362485e-17,1.9961676302818115e-33,-1.108095632075152e-49]",-1.0901564919878674597697454373701475560665130615234375,-1.0901564919878673203510029086759947228550111840346692511489378863404002956095594 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,wide_exponent,4096,10322096095657499357,54.971032,52.971514,52.692184,48.000000,4.692184,yes,Both,yes,"[5.0568441057755949e-212,1.403556189543019e-228,-7.7913019899290503e-245,4.3250414305135156e-261]",3.6979399552103718774606322255403937872671041622337230893862043577331672210196079e-71,3.6979399552103723856573794799277777321642698544383075056927659107091310783951395e-71 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,moderate,4099,10322096095657499356,54.923504,52.789849,52.424057,48.000000,4.424057,yes,Both,yes,"[-6.2709718016193445,-1.740544320233224e-16,9.6619618985173348e-33,-5.3634662813924676e-49] ; [-5.3610573122247516,-1.487992316091744e-16,8.2600166489518399e-33,-4.5852303337267308e-49]",8.250213502792728803569843876175582408905029296875,8.2502135027927274381957536723288747155497400971352314257258500952647980972838636 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,wide_exponent,4096,10322096095657499357,83.837536,54.035311,52.870848,48.000000,4.870848,yes,Both,yes,"[-6.0910535591726071e+67,-1.6906069764046092e+51,9.3847539539815793e+34,-5.2095849600761631e+18] ; [-2.0765337907433747e+68,-5.7635390647386284e+51,3.199406886499683e+35,-1.7760275952681165e+19]",216402447276044998568913181889759307152884828615443948991619776118784,216402447276044972293408789817849584977782616860227994636912077401231.68193597334 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,moderate,4099,10322096095657499356,55.112966,53.228307,53.032249,48.000000,5.032249,yes,Both,yes,"[6.845669939342903,1.9000550964106974e-16,-1.054742458045764e-32,5.8549968098607017e-49]",0.5332896734434948715630753213190473616123199462890625,0.53328967344349481366480902448257864122289462695617986129699565304628825690920461 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,argument_reduction,4114,10322096095657499282,55.226797,53.207790,53.035224,48.000000,5.035224,yes,Both,yes,"near 2^32 * pi/2 [-6746518852.260994,0,0,0]",1.552177995945118398166302775553759829563205130398273468017578125e-05,1.5521779959451182299964044512799051330689624190070061035685086340903998302805766e-05 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,moderate,4099,10322096095657499356,55.057291,53.182311,53.019050,48.000000,5.019050,yes,Both,-,"[4.1703741527293232,1.1575113514154309e-16,-6.425478768031961e-33,3.5668572362545842e-49]",-0.5158630820803253858031212075729854404926300048828125,-0.51586308208032532928210231425377438229361670583951189416945773701567475764188083 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,argument_reduction,4114,10322096095657499282,57.678342,53.190606,52.979067,48.000000,4.979067,yes,Both,-,"near 2^79 * pi/2 [-9.4948811840908353e+23,0,0,0]",-0.745347332069614676441915435134433209896087646484375,-0.74534733206961459248228582313963179667616055019306098816172876386801808552691865 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,moderate,4099,10322096095657499356,54.969724,53.132839,52.869936,48.000000,4.869936,yes,Both,yes,"[-5.4190175767417283,-1.504079521136772e-16,8.3493185761661204e-33,-4.6348028615950778e-49]",1.171394426032865254683201783336699008941650390625,1.17139442603286539700342824263106267546295820092344956492971294934043639632559 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,argument_reduction,4114,10322096095657499282,54.827554,53.139505,52.972774,45.000000,7.972774,yes,Both,yes,"near 2^56 * pi/2 [1.1318780403245514e+17,0,0,0]",0.522592664810813456455207415274344384670257568359375,0.52259266481081339733044326036721286195238985482366781021170783895485683809552821 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,near_one,4099,10322096095657499359,55.076072,53.014920,52.693509,48.000000,4.693509,yes,Both,yes,"[0.69084897511107168,1.9174910967675087e-17,-1.0644213825725161e-33,5.9087256341767488e-50]",0.6045578974549419282169537837035022675991058349609375,0.60455789745494184521062137483289791333043169413541191538511529635270202509108926 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,moderate,4099,10322096095657499356,54.861977,53.033501,52.752464,48.000000,4.752464,yes,Both,yes,"[2.7271853311214098,7.5694598675774267e-17,-4.2018943144802738e-33,2.3325199074887691e-49]",1.219341175070450589146275888197124004364013671875,1.2193411750704504284332317205702958914241077638601847892988778474321517604825199 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,near_one,4099,10322096095657499359,54.838619,52.751194,52.248773,48.000000,4.248773,yes,Both,yes,"[0.59489597012990947,1.6511680082373622e-17,-9.1658237013478981e-34,5.0880542564457055e-50] ; [0.9827038432180496,2.7275510828207716e-17,-1.514095006494449e-33,8.4049156884005658e-50]",0.5443561036464952263003169719013385474681854248046875,0.54435610364649532802709488187226757993115819436852768877331163091566878475501425 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,moderate,4099,10322096095657499356,54.688974,52.519520,52.099626,48.000000,4.099626,yes,Both,yes,"[7.2268073197298062,2.0058419702234115e-16,-1.1134659695507596e-32,6.1809777826591337e-49] ; [-3.4860951202332409,-9.6758576712908686e-17,5.3711799848315359e-33,-2.9816038442828851e-49]",2.0202519567665166988490454968996345996856689453125,2.0202519567665162801950553581438161288676585407404135979123700891377137944995722 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,extreme_finite,8,10322096095657499293,62.132485,54.509980,54.509980,48.000000,6.509980,yes,Both,yes,"huge positive [1.6853373139334212e+307,4.6777507254719996e+290,-2.5966732794380218e+274,1.4414432311305024e+258] ; tiny negative [-2.7813423231340017e-308,-0,0,-0]",1.5707963267948965579989817342720925807952880859375,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,moderate,4099,10322096095657499356,54.904043,52.938943,52.589446,48.000000,4.589446,yes,Both,yes,"[-0.50849837219306782,-1.4113665019828909e-17,7.8346579334303605e-34,-4.3491088138782666e-50]",-0.5334399670827416617413518906687386333942413330078125,-0.53343996708274174046131026004280749537274330119370511541043251593585195021558839 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,boundary,4105,10322096095657499355,55.110061,53.667935,53.116968,48.000000,5.116968,yes,Both,yes,"[-0.5,0,0,0]",-0.5235987755982989266811955531011335551738739013671875,-0.52359877559829887307710723054658381403286156656251763682915743205130273438103483 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,moderate,4099,10322096095657499356,54.885086,52.851324,52.325679,48.000000,4.325679,yes,Both,-,"[-0.50414043989940849,-1.3992708100524456e-17,7.7675133550305953e-34,-4.3118360854191824e-50]",2.0991827056155738517873032833449542522430419921875,2.0991827056155742237087238848295169418258006344663652219436700791519481199702843 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,boundary,4105,10322096095657499355,54.933501,53.208019,53.015630,48.000000,5.015630,yes,Both,-,"[0.99999951942877319,2.7755562277097889e-17,-1.5407432150725758e-33,8.5528429620428158e-50]",0.00098037876895050468130377030462341281236149370670318603515625,0.00098037876895050478897482934485258576844002644995119255737105648210814670714088092 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,moderate,4099,10322096095657499356,54.974193,53.158758,53.019599,48.000000,5.019599,yes,Both,-,"[-2.7628513559780572,-7.6684529725591843e-17,4.2568465266952151e-33,-2.3630245131163269e-49]",0.063111558041546500508189865286112762987613677978515625,0.063111558041546493595944022576030893684783578049870680283049711049275225101317397 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,boundary,4099,10322096095657499289,54.951607,53.169177,53.022036,48.000000,5.022036,yes,Both,-,"[326.47996564801747,9.061639373531479e-15,-5.0302203366722636e-31,2.7923332183556269e-47]",6.1439480220514836164654240272397757603181465874882434277975712709632833055792003e+141,6.1439480220514842882409559528883970846034473863532678303012402569115463152702114e+141 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,moderate,4099,10322096095657499356,54.935840,53.180629,53.025408,48.000000,5.025408,yes,Both,-,"[5.0109819009809229,1.3908268706122392e-16,-7.7206400751053074e-33,4.2858161881128051e-49]",32.244515813988982699811458587646484375,32.244515813988979182444910558923716242085594124376112958709781738645907303764812 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,boundary,4099,10322096095657499289,54.972594,53.164620,53.020447,48.000000,5.020447,yes,Both,-,"[-250.99202946082733,-6.9664282526201528e-15,3.8671445227290451e-31,-2.1466964443434239e-47]",2.7788842653856641449312255150961427650361335071502829578141633319949134903163359e-76,2.7788842653856638407547596404961219062300898310358581460949384897692395968312002e-76 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,moderate,4099,10322096095657499356,55.160352,53.074802,52.774099,48.000000,4.774099,yes,Both,yes,"[1.1247730073775273,3.1218722256685296e-17,-1.7329872124374921e-33,9.6200115231453559e-50]",2.07951774176679560213187869521789252758026123046875,2.0795177417667953321244599118601324113680341242828252673035167248488970008616959 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,cancellation,4098,10322096095657499288,83.185282,54.009897,53.256008,48.000000,5.256008,yes,Both,yes,"[-2.6135637191554461e-13,0,0,0]",-2.613563719155104787236903237814843246715479363473377816262654960155487060546875e-13,-2.613563719155104544253233803744968410008370675484631317282483699807610007520621e-13 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,near_one,4099,10322096095657499359,54.918179,53.166316,53.041728,48.000000,5.041728,yes,Both,-,"[1.1335639126739003,3.1462718893368611e-17,1.7465317466363379e-33,9.695198791772263e-50]",0.125366574619705295479121787138865329325199127197265625,0.12536657461970530900080502001741556309701459949497062977512985254006361141481408 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,wide_exponent,4096,10322096095657499357,54.929145,53.171869,53.045970,48.000000,5.045970,yes,Both,-,"[4.6261311118266506e+112,1.2840093188211806e+96,7.1276835479426902e+79,3.9566591935839502e+63]",259.421251321115732935140840709209442138671875,259.42125132111570503685832403601672523060244723042283551553508070299190699694996 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,extreme_finite,4096,10322096095657499295,54.890700,53.179074,53.016960,48.000000,5.016960,yes,Both,-,"[2.0331470333148491e-224,5.6431166220861893e-241,3.1325590022425128e-257,1.7389195651432225e-273]",-515.069475975312570881214924156665802001953125,-515.06947597531262739711907680169329239742647250082611831496163075456316319684835 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,near_one,4099,10322096095657499359,54.995769,53.184677,53.012248,48.000000,5.012248,yes,Both,-,"[1.4195991778008823,3.9401792323337023e-17,2.1872388524433752e-33,1.2141614671686702e-49]",0.50548364393602807087546580078196711838245391845703125,0.50548364393602801522994455993418454780195288621099385724841685838532575193733228 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,wide_exponent,4096,10322096095657499357,54.961217,53.191544,53.045986,48.000000,5.045986,yes,Both,-,"[1.6478667181302047e-79,4.5737489299541154e-96,2.5389406854448656e-112,1.4093952035692334e-128]",-261.71171993614638040526187978684902191162109375,-261.71171993614635226097107489196965564142826014659637604512890701616180385411886 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,extreme_finite,4096,10322096095657499295,54.951425,53.191636,53.032071,48.000000,5.032071,yes,Both,-,"[3.0682846229157043e-158,8.5162005861608278e-175,4.7274409865410026e-191,2.624256915407243e-207]",-523.24720667460906042833812534809112548828125,-523.24720667460911724330320979055400330344628738302026449859537432674608012400159 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,near_one,4099,10322096095657499359,54.955225,53.126150,52.852739,48.000000,4.852739,yes,Both,-,"[0.7455349426338852,2.0692751474368365e-17,1.1486784564844957e-33,6.3764463513998652e-50]",-0.12753199669462900178729114486486651003360748291015625,-0.12753199669462901746777475598863742165495644525200611269098846875624730934604523 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,wide_exponent,4096,10322096095657499357,55.006875,53.165767,53.021068,48.000000,5.021068,yes,Both,-,"[4.6201923918188489e+258,1.2823609928988147e+242,7.1185335009872046e+225,3.9515798971807595e+209]",258.66466006061358484657830558717250823974609375,258.66466006061361314780285273352542290302251199814003016169435342215632974918998 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,extreme_finite,4096,10322096095657499295,54.953390,53.178424,53.029150,48.000000,5.029150,yes,Both,-,"[2.8445937992650119e+257,7.8953338291249174e+240,4.3827907020981923e+224,2.4329375747912342e+208]",257.45402025901483966663363389670848846435546875,257.45402025901486767802909135885153181987420064870956774702074158124472305183714 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,moderate,4099,10322096095657499356,54.936699,53.007742,52.675708,48.000000,4.675708,yes,Both,yes,"[-0.64921040208983594,-1.8019208405657293e-17,1.0002670028739942e-33,-5.55259728681753e-50]",-1.04756867140333032040189209510572254657745361328125,-1.0475686714033304660196836535959538533168949468560481809233559462876987015169756 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,cancellation,4098,10322096095657499288,83.183549,53.987083,53.147787,48.000000,5.147787,yes,Both,yes,"[3.1953685246800882e-08,0,0,0]",3.1953684736281895160448819626086702783140935935080051422119140625e-08,3.1953684736281891958290169482972474912634475149295662224530800762968705228371108e-08 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,near_one,4099,10322096095657499359,54.959213,53.190567,53.032687,48.000000,5.032687,yes,Both,yes,"[1.0146951632466654,2.8163448330305746e-17,1.563385439457318e-33,8.6785325562461659e-50] ; [0.67203279182024089,1.86526569695489e-17,1.0354304619014043e-33,5.7477936960060001e-50]",1.009851987115524707405711524188518524169921875,1.0098519871155248170101935707300539046159555693972004409710861335008920239838475 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,moderate,4099,10322096095657499356,54.935067,53.163311,53.017201,48.000000,5.017201,yes,Both,yes,"[5.9546289339047043,1.652741536380038e-16,9.1745585372173701e-33,5.0929030643950102e-49] ; [5.055011828311212,1.4030476303859041e-16,7.7884789195009855e-33,4.3234743116188276e-49]",8258.471810015818846295587718486785888671875,8258.4718100158197523034186342284236047260743845763155702907245462782899967304707 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,moderate,4099,10322096095657499356,53.278021,51.216249,50.843118,48.000000,2.843118,yes,Both,yes,"[-0.12598239680403012,-3.4967139407324243e-18,1.9410661637644512e-34,-1.0775081736660592e-50]",-5.036966535935927210927633319859086924452640232630074024200439453125e-07,-5.0369665359359247171059931113138371384365138382213074202619030423806648231460384e-07 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,wide_exponent,4096,10322096095657499357,53.261106,51.258453,50.915855,48.000000,2.915855,yes,Both,yes,"[3178858.3859193348,8.8231044301760176e-11,-4.8978068435268183e-27,2.7188289639250675e-43]",3280184465858375893424625758878219769323978752,3280184465858377437606968244219065735294846924.9874778095912486192020477914613844 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.1588709556304993e+103,8.7676281669016289e+86,4.8670113311231216e+70,2.7017340204622107e+54] ; [5.476364839089647e-60,1.5199965839012416e-76,8.4376760239937101e-93,4.6838510980827309e-109]",4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60,4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remainder,native,double,native double,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,near_one,4099,10322096095657499359,54.536032,52.333906,51.932913,48.000000,3.932913,yes,Both,yes,"[0.99647323650485897,2.7657688264761087e-17,-1.5353101159721376e-33,8.5226832034609322e-50]",1.169766410528877198515829149982891976833343505859375,1.169766410528876926411978375688658167452094179807831858979594951194415729758019 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,moderate,4099,10322096095657499356,54.578055,52.420782,51.922916,48.000000,3.922916,yes,Both,yes,"[-0.8847453255155191,-2.4556615782920207e-17,1.3631660124535765e-33,-7.5670914670621173e-50]",-1.0047740516603607119350272114388644695281982421875,-1.004774051660360476585482736279205233973070401043921323909411027818209611025896 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,near_one,4099,10322096095657499359,54.769719,52.562860,52.222299,48.000000,4.222299,yes,Both,-,"[1.4069918410475255,3.9051868434767531e-17,-2.1678141745455643e-33,1.2033786048446317e-49]",2.16426572173509601526575352181680500507354736328125,2.1642657217350956033274385667375135871921430567966953648960818301142604532597531 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,moderate,4099,10322096095657499356,54.622355,52.410098,52.078527,48.000000,4.078527,yes,Both,-,"[-2.7857207811510634,-7.7319283785267183e-17,4.2920824552965077e-33,-2.3825843827299285e-49]",8.1365916105786357803708597202785313129425048828125,8.1365916105786340693949523396784115709375119347391037715734195861036762034376516 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,near_one,4099,10322096095657499359,54.818246,52.326336,51.700293,48.000000,3.700293,yes,Both,yes,"[0.59755606903073177,1.6585512658560447e-17,-9.2068090143729001e-34,5.1108056755416187e-50]",0.5353082380185723021526200682274065911769866943359375,0.53530823801857215584571718742120500189084014316461358374166582778443072893549416 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,moderate,4099,10322096095657499356,55.293584,52.761106,51.767935,48.000000,3.767935,yes,Both,yes,"[0.16360496396960933,4.5409499485507357e-18,-2.5207335932757234e-34,1.3992882371004064e-50]",0.1621607097520810503166188709656125865876674652099609375,0.16216070975208100802595473397547243338613734194285459759344908362070067288340099 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,near_one,4099,10322096095657499359,54.604607,52.455662,51.991407,48.000000,3.991407,yes,Both,yes,"[0.52279406422019059,1.4510450180865458e-17,-8.0549179442365494e-34,4.4713776815788749e-50]",0.5015059667225651995892121703946031630039215087890625,0.50150596672256508756726471065800509425375886860108398095845348065621209400134675 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,moderate,4099,10322096095657499356,54.778037,52.741625,52.125057,48.000000,4.125057,yes,Both,yes,"[0.62454339223343247,1.7334561348376422e-17,-9.6226145653724018e-34,5.341624123784917e-50]",0.589756443441564304208668545470573008060455322265625,0.58975644344156442428767747551197846232670425451581946071191931520010028768183699 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,moderate,4099,10322096095657499286,55.002831,52.945654,52.287792,48.000000,4.287792,yes,Both,-,"[1.9006299452673154,5.2753078163195617e-17,-2.9283840998315168e-33,1.6255797262895814e-49]",1.257585663556603616797247013892047107219696044921875,1.2575856635566033880564485556366592611799279174320157848461131769348979779019656 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,boundary,4101,10322096095657499355,54.579940,52.351457,51.889584,48.000000,3.889584,yes,Both,-,"[1.0000005037046935,2.7755589596242622e-17,-1.5407447315897506e-33,8.5528513804042393e-50]",0.00100369781430906875215047779903443370130844414234161376953125,0.0010036978143090685115581279523956869563516806020321949975653097389006040250657005 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,moderate,4099,10322096095657499356,54.696918,52.658163,52.125597,48.000000,4.125597,yes,Both,yes,"[-0.00049529971188322364,-1.3747328605574028e-20,7.6313003724981667e-37,-4.2362226906889992e-53]",-0.000495299752385836076877534406293079882743768393993377685546875,-0.00049529975238583597606842045723157836113176734228034591402175350588557156416625414 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,boundary,4105,10322096095657499355,55.374878,53.836747,52.893317,48.000000,4.893317,yes,Both,yes,"[-0.5,0,0,0]",-0.5493061443340547800318063309532590210437774658203125,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,near_one,4099,10322096095657499359,55.115492,53.213627,52.909585,48.000000,4.909585,yes,Both,yes,"[0.82266315494831599,2.283348940335983e-17,-1.2675132834072306e-33,7.0361121562846938e-50]",0.75534142520150826527469689608551561832427978515625,0.75534142520150835455818926054274013477949273460778658484922104863788928343365273 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,moderate,4099,10322096095657499356,59.765044,53.406412,52.892710,48.000000,4.892710,yes,Both,yes,"[0.22945102518139038,6.3685452795056546e-18,-3.5352528013375154e-34,1.962459528957747e-50]",0.25443499105294209439165342701016925275325775146484375,0.25443499105294212482044152307161617587897965795413196995183827967925968259422636 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,near_one,4099,10322096095657499359,54.504745,52.032877,51.416011,48.000000,3.416011,yes,Both,-,"[1.4171280217980677,3.9333203966042888e-17,-2.1834314337689169e-33,1.2120479252302846e-49]",0.045057028848666698384040074643053230829536914825439453125,0.045057028848666713380921770188418775180784369819168540822693433627584730980683186 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,moderate,4099,10322096095657499356,57.264712,52.149453,51.704092,48.000000,3.704092,yes,Both,-,"[1.2494329362879579,3.4678730339797679e-17,-1.9250562444005181e-33,1.0686208831159439e-49]",0.0772340893897989488880995168074150569736957550048828125,0.077234089389798927834491217736226376663789083869112553446942539303117662664711823 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,lgamma,native,double,native double,bl::lgamma,moderate,4099,10322096095657499287,54.198393,51.886051,51.395136,48.000000,3.395136,yes,Both,-,"[8.2052194245086465,2.277405881797769e-16,-1.2642142231943204e-32,7.0177986932447056e-49]",8.9415885247122854906365319038741290569305419921875,8.9415885247122885101518456528958954554849052667331447452053057718047284642291731 +6,19e76954d837453282d2eb0484d1febb,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,tgamma,native,double,native double,bl::tgamma,moderate,4099,10322096095657499284,52.932238,50.618304,49.844713,48.000000,1.844713,yes,Both,-,"[6.7363262375311228,1.869706122573401e-16,-1.0378953932818074e-32,5.7614768138692232e-49]",441.80032379819891730221570469439029693603515625,441.80032379819935429292541077876940471345719058780329289775691651691759874496618 diff --git a/validation/metrics/data/native/strict/19e76954d837453282d2eb0484d1febb/native_accuracy_run.json b/validation/metrics/data/native/strict/19e76954d837453282d2eb0484d1febb/native_accuracy_run.json new file mode 100644 index 0000000..19c9573 --- /dev/null +++ b/validation/metrics/data/native/strict/19e76954d837453282d2eb0484d1febb/native_accuracy_run.json @@ -0,0 +1,90 @@ +{ + "accuracy_samples": 4096, + "architecture": "wasm32", + "compiler": "Emscripten", + "configuration": { + "build": { + "architecture": "wasm32", + "compiler-id": "Clang", + "compiler-version": "21.0.0", + "config": "Release", + "flags-hash": "da56489796c4636d9f457ea868fb77ff630a44c5ac085227cf6d448694171e39", + "frontend-variant": "GNU", + "optimized": "1", + "processor": "x86", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Emscripten" + }, + "consumer": { + "arm64": "0", + "fast-math": "off", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "0" + }, + "harness": { + "qdpp": "on", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "unavailable", + "simd": "on", + "tu-x86-fma": "0", + "x86": "0" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "0", + "f256-simd": "1", + "msvc-guarded": "0", + "neon": "0", + "runtime-check": "0", + "runtime-path": "0", + "scalar-x86": "0", + "sse2": "0", + "trig-simd": "1", + "wasm-simd": "1" + } + }, + "consumer_mode": "strict", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\wasm32-emscripten-release\\validation\\fltx_accuracy.js", + "sha256": "d32ec2162f0ace54c144d6bfc8e0f5c8809f805e8c5e138d23fe924fb99c3c51", + "wasm-sha256": "05641fd05498b8fbf7e07b0738660bbf107c295fb6bb3304ad595ce546a7bf4f" + } + }, + "host": { + "machine": "AMD64", + "node": "v22.17.1", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "outputs": { + "f32_accuracy.csv": "bff40f46587fe7c702eed257bc49f93e722f5f7b0a63020bc86aa1ffd0565a06", + "f64_accuracy.csv": "d9257e34d7cc6cc174b11178a8825d89b48d4feb989f58b0b484dc75cb3d4b65" + }, + "platform": "wasm32", + "policy": "native-float-libm-baseline-v1", + "precisions": [ + "f32", + "f64" + ], + "run_id": "19e76954d837453282d2eb0484d1febb", + "sample_mode": "standard", + "schema_version": 2, + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete", + "target": "wasm32/wasm32/Emscripten", + "thresholds": "advisory" +} diff --git a/validation/metrics/data/native/strict/24cea465cb7d4d59a5d6b1d1aac99687/f32_accuracy.csv b/validation/metrics/data/native/strict/24cea465cb7d4d59a5d6b1d1aac99687/f32_accuracy.csv new file mode 100644 index 0000000..e459c2d --- /dev/null +++ b/validation/metrics/data/native/strict/24cea465cb7d4d59a5d6b1d1aac99687/f32_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,near_one,4099,10322096095657499359,38.457645,24.037482,24.000509,20.000000,4.000509,yes,Both,yes,"[1.1885061456019219,3.2987672193893811e-17,-1.831183659922398e-33,1.0165111307816044e-49] ; [0.81220021471607706,2.2543084474582116e-17,-1.2513925714875483e-33,6.9466242285517913e-50]",2.000706195831298828125,2.00070631504058837890625 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,moderate,4099,10322096095657499356,41.522382,24.071404,24.000368,20.000000,4.000368,yes,Both,yes,"[6.8051724535006084,1.8888147861053107e-16,-1.0485028323932781e-32,5.8203599295385438e-49] ; [1.1968659760618667,3.3219704100358647e-17,-1.8440640181726446e-33,1.0236611659290266e-49]",8.0020389556884765625,8.002038478851318359375 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,wide_exponent,4096,10322096095657499357,46.805352,24.393682,24.006151,20.000000,4.006151,yes,Both,yes,"[6.8663278648288954e-15,1.9057888225395823e-31,-1.0579253154283554e-47,5.8726652176119575e-64] ; [-3.2984332805285199e-15,-9.154991433081627e-32,5.0820411396266402e-48,-2.821099542652883e-64]",3.567894203281192500032403813747805543243885040283203125e-15,3.567894415039429313607488580828430713154375553131103515625e-15 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,extreme_finite,4096,10322096095657499295,47.155091,24.409642,24.030594,20.000000,4.030594,yes,Both,yes,"[223002548.53621882,6.1895640983749784e-09,-3.4358982872045742e-25,1.9073066943623286e-41] ; [279175322748.44623,7.748671780562106e-06,-4.3013769105216293e-22,2.3877438418260673e-38]",279398318080,279398334384 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.77817428112030029296875,-0.77817428112030029296875 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000016689300537,0,0,0]",-1.6689300537109375e-06,-1.6689300537109375e-06 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,near_one,4099,10322096095657499359,26.016181,24.166616,24.014549,20.000000,4.014549,yes,Both,yes,"[1.4059396726628588,3.902266489560654e-17,-2.1661930524667106e-33,1.2024787013157959e-49] ; [1.4325550147665504,3.9761389035901386e-17,-2.2072004799367987e-33,1.2252423963947649e-49]",2.0140857696533203125,2.014085888497646692485432140529155731201171875 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,moderate,4099,10322096095657499356,25.989725,24.178659,24.028212,20.000000,4.028212,yes,Both,yes,"[-1.4739640396494451,-4.0910720357208028e-17,2.2710011847286731e-33,-1.2606589021183906e-49] ; [2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49]",-4.02748775482177734375,-4.0274875194135120182181708514690399169921875 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,wide_exponent,4096,10322096095657499357,25.942256,24.179837,24.024630,20.000000,4.024630,yes,Both,yes,"[-1122057943862.8401,-3.1143364106002161e-05,1.7288039947384127e-21,-9.5967900001126686e-38] ; [-8694665162187.9277,-0.00024132543636168146,1.3396252793822586e-20,-7.4364141477004576e-37]",9755918009047724494684160,9755918580702648912052224 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,extreme_finite,8,10322096095657499292,40.953446,25.906891,25.906891,20.000000,5.906891,yes,Both,yes,"large neighbour [844424863023104,0.023437498137354851,-1.3010425035850288e-18,7.2222367174802835e-35] ; negative small neighbour [-5.5511156525213747e-16,-1.5407441024465825e-32,8.5528478879580846e-49,-4.7477843256638533e-65]",-0.46875,-0.468750007450577044210149324499070644378662109375 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,near_one,4099,10322096095657499359,25.952819,24.167429,24.029610,20.000000,4.029610,yes,Both,yes,"[1.2982596956909869,3.6033945152474569e-17,2.0002857788178657e-33,1.1103816637369289e-49] ; [1.2798202945460211,3.5522148959688557e-17,1.9718753829605394e-33,1.0946107259271694e-49]",1.01440775394439697265625,1.0144078131795243086497270702039165563127339636105403630860948828655528161513261 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,moderate,4099,10322096095657499356,26.239727,24.172640,24.024913,20.000000,4.024913,yes,Both,yes,"[6.5374711177505596,1.8145127394371573e-16,1.0072569108993997e-32,5.5913990709666165e-49] ; [3.2450059050955762,9.0067006772042607e-17,4.99972323386958e-33,2.775403925497677e-49]",2.0146253108978271484375,2.0146254289230677898843256855109580140862879734170743102717224833311181385074994 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,wide_exponent,4096,10322096095657499357,25.917644,24.144253,24.027945,20.000000,4.027945,yes,Both,yes,"[0.027902000922864607,7.7443609644191634e-19,4.2989839268532189e-35,2.3864154690429567e-51] ; [14499.326437201289,4.0243715130342775e-13,2.2339749567081166e-29,1.2401052166866692e-45]",1.924365506056346930563449859619140625e-06,1.9243653935555734717265282397956262784302341636296406554453298274232840831100044e-06 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,extreme_finite,8,10322096095657499292,25.430169,24.584963,24.584963,20.000000,4.584963,yes,Both,yes,"large positive [844424930131968,0.0234375,1.3010426069826053e-18,7.2222372914521344e-35] ; small negative [5.5511151231257827e-16,1.5407439555097887e-32,8.5528470722950261e-49,4.7477838728798994e-65]",1521180780720166262527502581760,1521180720273875281796043846451.2 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,moderate,4099,10322096095657499356,25.971753,24.150757,24.027403,20.000000,4.027403,yes,Both,yes,"[-1.9749460259140985,-5.4815763759044581e-17,3.0428861518852258e-33,-1.6891411335680094e-49] ; [-6.4158772339979464,-1.7807636570882208e-16,9.885224067575198e-33,-5.4874016817003646e-49] ; [3.4130940773098271,9.4732390746028102e-17,-5.2587040692013754e-33,2.9191671686586848e-49]",16.0841045379638671875,16.0841054786133099696598947048187255859375 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; next value after one [1.0000001192092896,0,0,0] ; native product cancellation",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,wide_exponent,4096,10322096095657499357,32.556508,24.197422,24.009758,20.000000,4.009758,yes,Both,yes,"[0.0072982921122313887,2.0256829858598637e-19,-1.124479945746528e-35,6.2421176324852115e-52] ; [1.9523314176984748e-12,5.4188082290698013e-29,-3.0080428309707814e-45,1.6697992050011997e-61] ; [-2.3939769383437016e-07,-6.6446207934270406e-24,3.6885054973828883e-40,-2.0475318648254738e-56]",-2.39397678569730487652122974395751953125e-07,-2.3939769274275411635131445493727566081466591810245070348628360079601407051086426e-07 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",3588998231833025183056134144,3588998231833025183056134144 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fabs,native,float,native float,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,moderate,4099,10322096095657499356,25.964756,24.164418,24.008593,20.000000,4.008593,yes,Both,yes,"[-4.0059402826070123,-1.1118717842559279e-16,6.1721282765599288e-33,-3.4262194617884094e-49]",16.0475597381591796875,16.0475587873306722030974924564361572265625 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,wide_exponent,4096,10322096095657499357,25.989404,24.167423,24.020149,20.000000,4.020149,yes,Both,yes,"[797963256397175.88,0.022147929501425297,-1.2294570640128564e-18,6.8248577012755909e-35]",636745309315666385691207532544,636745346742277146199547969536 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,near_one,4099,10322096095657499359,26.024612,24.188379,24.024049,20.000000,4.024049,yes,Both,yes,"[0.99957607711604157,2.774380939196801e-17,1.5400907988887275e-33,8.5492213246980834e-50]",1.0004241466522216796875,1.0004240880080409757745092099607730518546575501261053598713520202379186199441578 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,wide_exponent,4096,10322096095657499357,25.897082,24.141136,24.016290,20.000000,4.016290,yes,Both,yes,"[1.4835519773135318e-08,4.1176839086041523e-25,2.2857737417304193e-41,1.2688593185763538e-57]",67405800,67405796.027411572915787349932438540624582792272908782750245310659982961460931995 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,no,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",-4402.79248046875,-4402.79248046875 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055850982666015625,-7.055850982666015625 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,no,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",3588998231833025183056134144,3588998231833025183056134144 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,moderate,4099,10322096095657499356,48.522678,24.128146,24.008521,20.000000,4.008521,yes,Both,yes,"[6.6457375410806137,1.8445627084308674e-16,-1.0239379946324441e-32,5.6839976871472472e-49] ; [2.6220427968328792,7.27763071149101e-17,-4.0398965903082395e-33,2.2425931058324353e-49]",4.0236949920654296875,4.0236947536468505859375 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000016689300537,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,copysign,native,float,native float,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,floor,native,float,native float,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,ceil,native,float,native float,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,trunc,native,float,native float,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round,native,float,native float,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,roundeven,native,float,native float,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_decimals,native,float,native float,bl::round_decimals,moderate,4099,10322096095657499356,26.229396,24.222837,24.047915,20.000000,4.047915,yes,Both,yes,"[4.1022214313758827,1.1385951713060679e-16,-6.3204728745551046e-33,3.5085672559249129e-49]",4.10200023651123046875,4.102 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_significant,native,float,native float,bl::round_significant,wide_exponent,4096,10322096095657499357,26.031860,24.190158,24.023953,20.000000,4.023953,yes,Both,yes,"[259.8694582017871,7.2128263973122191e-15,-4.0039229694600715e-31,2.2226237347600494e-47]",259.869384765625,259.8694 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,lround,native,float,native float,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,llround,native,float,native float,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remquo,native,float,native float,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.944149017333984375 ; 1,-0.944149017333984375 ; 1 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0 ; 3588998231833025183056134144,0 ; 3588998231833025183056134144 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ldexp,native,float,native float,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbn,native,float,native float,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbln,native,float,native float,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0.724792420864105224609375 ; 92,0.724792420864105224609375 ; 92 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,-,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,near_one,4099,10322096095657499359,25.904846,24.145989,24.002397,20.000000,4.002397,yes,Both,yes,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",1.00001394748687744140625,1.0000140069934242844029017485374012760134473363250144717592753776502313379618068 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,wide_exponent,4096,10322096095657499357,25.966753,24.215195,24.033944,20.000000,4.033944,yes,Both,yes,"[8.4482670931604627e+31,2344865161252447,0.13016616458319236,7.2256736473703873e-18]",9191445835546624,9191445300433280.2040066177032811142195637421096986523537003168905974560430072948 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,extreme_finite,4096,10322096095657499295,25.972131,24.206633,24.003202,20.000000,4.003202,yes,Both,yes,"[3.2519120367544908e+32,9025869043151310,0.50103638144790075,2.7813106342916602e-17]",18033057994899456,18033059067370500.361343159063133250828533418772371371727970165496211972696634283 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,subnormal,4100,10322096095657499290,27.589271,24.195086,24.031452,20.000000,4.031452,yes,Both,yes,"[1.8779781629341901e-40,0,0,0]",1.370393513549582123487035494914521027709497502655722200870513916015625e-20,1.3703934336292589277694998548128719273180184126519025205252581878215739867341933e-20 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,moderate,4099,10322096095657499356,25.612822,23.399203,22.959143,20.000000,2.959143,yes,Both,yes,"[-1.3107925921174228,-3.6381802906921357e-17,2.0195957632319271e-33,-1.1211008583877508e-49]",-1.0944049358367919921875,-1.0944048016260133167401477577509673709480743051163502096548202710331859650845724 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,wide_exponent,4096,10322096095657499357,25.485859,23.259136,22.884042,20.000000,2.884042,yes,Both,yes,"[0.13220588448365292,3.6694504236171299e-18,-2.0369541740101359e-34,1.1307367120461853e-50]",0.50942885875701904296875,0.50942892456832680642725488647785089467768581077622050151162156924742112505750114 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,moderate,4099,10322096095657499356,25.982984,24.167535,24.008992,20.000000,4.008992,yes,Both,yes,"[3.0841394791368018,8.5602066522327873e-17,-4.7518692604291353e-33,2.6378173314684702e-49] ; [2.5731327818230003,7.1418781494941861e-17,-3.9645387803178756e-33,2.2007611179641204e-49]",4.016582012176513671875,4.0165817742570609994234301662245381486745983183743907579567512422082641230482559 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,wide_exponent,4096,10322096095657499357,50.914162,24.589271,24.043824,20.000000,4.043824,yes,Both,yes,"[-1.2969861059349299e-29,-3.599859593569704e-46,1.9983235030994217e-62,-1.1092923818952892e-78] ; [2.7588817734603815e-32,7.6574351677860018e-49,-4.250730416425209e-65,2.3596293898948734e-81]",1.2969890834882488924611555657595108221020467658335037497430164421530207619071007e-29,1.2969890084946579252781730919118729168609820257308054473541529684278323820094086e-29 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,moderate,4099,10322096095657499356,26.149035,24.214150,24.040329,20.000000,4.040329,yes,Both,yes,"[-5.7483236179995885,-1.5954803084249315e-16,8.8566948687470254e-33,-4.9164532826812132e-49]",0.509722173213958740234375,0.5097222027582440476609190572223045086789238470780369932414545068400613217789304 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,argument_reduction,4111,10322096095657499282,26.207700,24.232934,24.054458,20.000000,4.054458,yes,Both,yes,"near 2^94 * pi/2 [3.1112832252188646e+28,0,0,0]",-0.031775273382663726806640625,-0.031775275206458036754431969895458660655905161590001855338797800351243967744526865 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,moderate,4099,10322096095657499356,26.060912,24.256137,24.035729,20.000000,4.035729,yes,Both,-,"[4.4588502387206184,1.2375795495957516e-16,-6.8699465538321711e-33,3.8135864210043619e-49]",-0.25083100795745849609375,-0.25083099337247927050646438955413445736165895666786844698074070181158501850594916 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,argument_reduction,4111,10322096095657499282,26.627755,24.245703,24.076319,20.000000,4.076319,yes,Both,-,"near 2^70 * pi/2 [1.8544669218107189e+21,0,0,0]",-0.5190365314483642578125,-0.51903650210542794358474489503209069334133171874228756988100493423128724002299192 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,moderate,4099,10322096095657499356,25.924307,24.163895,24.015719,20.000000,4.015719,yes,Both,yes,"[-6.036496878364936,-1.6754644556096587e-16,9.3006960777944832e-33,-5.1629234653041607e-49]",0.2518171370029449462890625,0.25181715184977206019891708487262388659629088175425587483011094843357962067832389 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,argument_reduction,4111,10322096095657499282,25.898518,24.161857,24.046469,18.000000,6.046469,yes,Both,yes,"near 2^28 * pi/2 [-421657632,0,0,0]",0.507759034633636474609375,0.50775906393914719153658437245770373295759245731279909404632772755040921670373447 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,near_one,4099,10322096095657499359,26.067892,24.219203,24.021836,20.000000,4.021836,yes,Both,yes,"[0.55072017619471925,1.5285555493425008e-17,-8.4851878264929949e-34,4.7102254466208054e-50]",0.503395974636077880859375,0.5033959450820623349182906770633407385222001692931760800454776223514541494398828 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,moderate,4099,10322096095657499356,25.911836,24.243607,24.056379,20.000000,4.056379,yes,Both,yes,"[1.6967153744323316,4.7093311873256703e-17,-2.6142039573771427e-33,1.4511747122731526e-49]",1.03822672367095947265625,1.0382266641595175302821692627692631092810194067716353711556189103095518619306749 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,near_one,4099,10322096095657499359,25.920195,24.158254,24.013805,20.000000,4.013805,yes,Both,yes,"[1.3550416411741315,3.7609960733934508e-17,-2.0877722181031071e-33,1.1589463933554018e-49] ; [0.85964036308882719,2.3859813099958637e-17,-1.3244856933413505e-33,7.3523725626709088e-50]",1.005465030670166015625,1.0054649713105136693080409087559014886644835427733168442408504661900474402910144 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,moderate,4099,10322096095657499356,25.938612,24.172853,24.023930,20.000000,4.023930,yes,Both,yes,"[-1.5221127970798687,-4.2247116834866724e-17,2.3451860917049052e-33,-1.3018397980207348e-49] ; [-0.70678002618891433,-1.9617086460502596e-17,1.0889670532256199e-33,-6.0449814777464578e-50]",-2.005512237548828125,-2.005512355120225239725146453473468772246503385569443728906464376660394150359798 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,extreme_finite,8,10322096095657499293,32.824184,25.098912,25.098912,20.000000,5.098912,yes,Both,yes,"huge positive [3.1901471898837981e+37,8.8544371553805848e+20,-49152,2.7284841053187847e-12] ; tiny negative [-1.4693679385278594e-38,-4.0783152924990778e-55,2.2639197697066781e-71,-1.256727927116218e-87]",1.57079637050628662109375,1.5707963267948966192313216916397514420985846996875529104874722961539082031435651 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,moderate,4099,10322096095657499356,25.877130,23.894387,23.461405,20.000000,3.461405,yes,Both,yes,"[0.50525718509116591,1.4023704006137669e-17,-7.7847195390710439e-34,4.3213874362630044e-50]",0.5296800136566162109375,0.52967996779738378444136497299823480300062150306901044995137540581814602542442563 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,boundary,4105,10322096095657499355,24.992759,24.113237,24.113237,20.000000,4.113237,yes,Both,yes,"[0.99999910479106313,2.7755550768589574e-17,-1.5407425762220303e-33,8.5528394157098913e-50]",1.5694591999053955078125,1.5694591134201073494139739317636003811920117017421147249498608268896329577376014 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,moderate,4099,10322096095657499356,25.920877,24.113823,23.808727,20.000000,3.808727,yes,Both,-,"[-0.61518495487317537,-1.707481253257968e-17,9.4784250074140707e-34,-5.2615828402069857e-50]",2.233417034149169921875,2.2334168821543518003502700866744511755619367949446568069567781212742346589702698 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,boundary,4105,10322096095657499355,25.983148,24.584962,24.584962,20.000000,4.584962,yes,Both,-,"[0.9999995073211686,2.7755561941044354e-17,-1.5407431964178572e-33,8.5528428584883254e-50]",0.0009765625,0.00097656253880511143898187133876924251895712227894022748398387476387013216099532872 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,moderate,4099,10322096095657499356,25.945177,24.173984,24.007691,20.000000,4.007691,yes,Both,-,"[0.69706560262123496,1.9347457042607623e-17,-1.0739996138324561e-33,5.9618954985765975e-50]",2.007852077484130859375,2.0078521965251381745368245393757138670217404209691449932482836198723071521808851 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,boundary,4099,10322096095657499289,25.985101,24.189213,24.012647,20.000000,4.012647,yes,Both,-,"[-55.445402102948194,-1.538919050607329e-15,8.5427168150927155e-32,-4.7421604504842094e-48]",8.32470122137760864279645685032325255932328378349893682752735912799835205078125e-25,8.3247007295174246704446931992286856723729842657502269685404369668574123561739996e-25 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,moderate,4099,10322096095657499356,25.945545,24.176633,24.015565,20.000000,4.015565,yes,Both,-,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",16.047374725341796875,16.047373779108025107147981190408654763758177217950870805754027309567667903729689 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,boundary,4099,10322096095657499289,25.953108,24.184447,24.013981,20.000000,4.013981,yes,Both,-,"[12.008718688899336,3.3330889961656162e-16,-1.8502360733339086e-32,1.0270873448036725e-48]",4120.82763671875,4120.8278799704215331782631104353597855518360018117915418683951931281930912686669 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,moderate,4099,10322096095657499356,25.980116,23.586262,22.527963,20.000000,2.527963,yes,Both,yes,"[0.34057363208584057,9.4528171980479295e-18,-5.2473676504227349e-34,2.9128741920862649e-50]",0.4057538211345672607421875,0.40575375404270745997458287046382846533769495983882253541892972745121909455076655 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,cancellation,4098,10322096095657499288,46.577665,23.566651,22.781883,20.000000,2.781883,yes,Both,yes,"[0.00067049614153802395,0,0,0]",0.0006707208813168108463287353515625,0.00067072097432296308285210370663059393442257906709442662111659198408734521169141739 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,near_one,4099,10322096095657499359,25.915814,24.153165,23.953904,20.000000,3.953904,yes,Both,-,"[0.93845537367659526,2.6047369085974028e-17,1.4459194445078942e-33,8.0264652952294025e-50]",-0.06351993978023529052734375,-0.063519943689242454447435124366623484973123162314765713955967040355554375738192851 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,wide_exponent,4096,10322096095657499357,25.934124,24.148103,24.055764,20.000000,4.055764,yes,Both,-,"[3.2617843787809539e-29,9.0532702967131949e-46,5.0255745657830058e-62,2.7897542974514332e-78]",-65.59268951416015625,-65.59269327555488150776766062278388871045172786432349789542906836393403051939105 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,extreme_finite,4096,10322096095657499295,25.928931,24.171772,24.028998,20.000000,4.028998,yes,Both,-,"[1.925072119386236e+28,534314847751.63684,2.9660432318647614e-05,1.6464847440249349e-21]",65.12734222412109375,65.127346028765523545207426082299833753247218536882252197810633399468572469932133 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,near_one,4099,10322096095657499359,25.997641,24.168133,23.675086,20.000000,3.675086,yes,Both,-,"[1.0239856815956481,2.8421312014849322e-17,1.5776997494470658e-33,8.7579929389073653e-50]",0.0341954641044139862060546875,0.034195461551375619696170753702097836731645774772968144626738312328832836284482893 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,wide_exponent,4096,10322096095657499357,25.972931,24.199454,24.028872,20.000000,4.028872,yes,Both,-,"[279.54938708294071,7.7590541514832776e-15,4.307140284145071e-31,2.3909431568741984e-47]",8.1269588470458984375,8.1269593218526276965603717987343564084569415244724976083039632724987237766261338 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,extreme_finite,4096,10322096095657499295,26.022657,24.191270,24.003063,20.000000,4.003063,yes,Both,-,"[5.0098439803322917e-20,1.3905110341861625e-36,7.7188868307440791e-53,4.2848429419839901e-69]",-64.113800048828125,-64.113796235451863124774831376509181438042251966024731816806674549792684463109039 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,near_one,4099,10322096095657499359,25.962169,24.152799,23.987576,20.000000,3.987576,yes,Both,-,"[1.1548157158417363,3.2052574923161943e-17,1.7792753339108649e-33,9.8769622142772787e-50]",0.0625126659870147705078125,0.062512669745286719885701932573165067686690137111581665627621599315275165176273273 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,wide_exponent,4096,10322096095657499357,25.952914,24.154037,24.048450,20.000000,4.048450,yes,Both,-,"[23432401020772320,0.65037977838778627,3.6103330235836354e-17,2.0041374246735552e-33]",16.3698177337646484375,16.369816790271109973117205087238363001448077217226902449637697819144005794863329 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,extreme_finite,4096,10322096095657499295,25.880532,24.163613,24.027658,20.000000,4.027658,yes,Both,-,"[4.8264741762657366e-33,1.3396156895622393e-49,7.4363609135055201e-66,4.1280095527981953e-82]",-32.316371917724609375,-32.316370028094117653165372508074257172256480666024940344680625927328493584980905 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,moderate,4099,10322096095657499356,25.852828,23.555276,23.169104,20.000000,3.169104,yes,Both,yes,"[0.6489272591876778,1.8011349611426414e-17,-9.9983075215894855e-34,5.5501756088757656e-50]",0.500124990940093994140625,0.50012493791477858658519920495659102199166970636399639754750147511225772771010193 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,cancellation,4098,10322096095657499288,46.640460,23.927588,22.843491,20.000000,2.843491,yes,Both,yes,"[-3.0161881880985675e-08,0,0,0]",-3.016187832827199599705636501312255859375e-08,-3.0161882335855243245304754558762072997310887274723990939098277461580018360871778e-08 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,near_one,4099,10322096095657499359,25.935116,24.183020,24.022132,20.000000,4.022132,yes,Both,yes,"[1.0032222542802387,2.7845011137956863e-17,1.545708624315182e-33,8.5804065203819558e-50] ; [1.1098483278340112,3.0804479185076206e-17,1.7099921026428991e-33,9.4923630214066531e-50]",1.00357687473297119140625,1.0035768158257674189368635854208332740856335659539134346018913304416269618692691 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,moderate,4099,10322096095657499356,25.910732,24.173665,24.033763,20.000000,4.033763,yes,Both,yes,"[1.5010856767109688,4.1663497005488793e-17,2.312788683094746e-33,1.2838556235321408e-49] ; [6.8472618406345225,1.900496937777419e-16,1.054987729275047e-32,5.8563583386908427e-49]",16.1396617889404296875,16.139662728687068635103760006664480606823689561120066764019143935355322552829973 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,moderate,4099,10322096095657499356,24.296761,22.240676,21.817420,20.000000,1.817420,yes,Both,yes,"[-2.0174902967783854,-5.5996604486030095e-17,3.108435980060947e-33,-1.7255285978184637e-49]",-136.0443267822265625,-136.04428997082654660356838684633834963763840941785070423709212066151322168144796 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,wide_exponent,4096,10322096095657499357,24.307980,22.194400,21.763685,20.000000,1.763685,yes,Both,yes,"[8.3253759191734602,2.3107560085315504e-16,-1.282727262481326e-32,7.1205667056058241e-49]",2772213.75,2772214.528582891558413966128826065404980229940407596127199381800655092889207728 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[30287485871.102478,8.4064660430267718e-07,4.666526078348927e-23,2.590442348598358e-39] ; [2.0009290447377264e-12,5.5536937402726095e-29,3.0829193310836276e-45,1.7113640122155147e-61]",1.12052207790203084414315526373684406280517578125e-12,1.12052207790203084414315526373684406280517578125e-12 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remainder,native,float,native float,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,near_one,4099,10322096095657499359,25.942025,24.196051,24.011707,20.000000,4.011707,yes,Both,yes,"[1.4459245913717083,4.0132469330314787e-17,-2.2277995742789206e-33,1.2366771908072897e-49]",2.0051238536834716796875,2.0051239722322748219797119221081131107158513029013343848994792963571293595758708 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,moderate,4099,10322096095657499356,25.936329,24.161474,24.011590,20.000000,4.011590,yes,Both,yes,"[-6.9355339383837169,-1.9249973666156986e-16,1.0685881993797711e-32,-5.9318561139707965e-49]",-514.08355712890625,-514.08358752550603806804367819424003815790834626890985544825401905207447930345975 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,near_one,4099,10322096095657499359,25.882807,24.206821,24.037830,20.000000,4.037830,yes,Both,-,"[1.3363709947474058,3.7091746195244852e-17,-2.0590055324756691e-33,1.1429776749925342e-49]",2.03400325775146484375,2.0340033758498468053419313401516481710439729679668859465095831820284475316728875 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,moderate,4099,10322096095657499356,25.970199,24.157896,24.042107,20.000000,4.042107,yes,Both,-,"[-2.0865014257806518,-5.791204809537242e-17,3.2147644599340952e-33,-1.7845527610827445e-49]",4.09039974212646484375,4.0903995053326148905358860858142744104816455202766888280678248016451416423900309 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,near_one,4099,10322096095657499359,25.960144,23.951896,23.585735,20.000000,3.585735,yes,Both,yes,"[0.88614226956034992,2.4595388768987312e-17,-1.3653183455468349e-33,7.5790393158461086e-50]",0.70948302745819091796875,0.70948308381265723135205564231795018723276975370790990618793629403010330001580195 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,moderate,4099,10322096095657499356,26.364861,24.367323,23.664024,20.000000,3.664024,yes,Both,yes,"[0.98775382689116853,2.741567603190466e-17,-1.5218757383142301e-33,8.4481074264743387e-50]",0.7564029693603515625,0.75640291245249735018763313924583594579849914862813856260689384074903424534412451 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,near_one,4099,10322096095657499359,25.557868,23.335878,22.898759,20.000000,2.898759,yes,Both,yes,"[0.57890999870085935,1.6067980243585338e-17,-8.9195208128252867e-34,4.9513286875109623e-50]",0.550656378269195556640625,0.55065644868454699918532056874039300539183901870314239434476919100760017958369078 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,moderate,4099,10322096095657499356,25.758179,23.643520,23.178168,20.000000,3.178168,yes,Both,yes,"[-0.71131392647961711,-1.9742927472854918e-17,1.0959526326934043e-33,-6.0837592335738726e-50]",-0.661910712718963623046875,-0.66191064298001016538523218063742045913680409778040236139504261769759961805182207 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,moderate,4099,10322096095657499286,25.987251,23.739051,23.010583,20.000000,3.010583,yes,Both,-,"[1.2554365019814742,3.4845362761367464e-17,-1.9343062019543092e-33,1.073755641042456e-49]",0.700352489948272705078125,0.70035257282658160606822099851014095184653107534774288487363940920358700564424369 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,boundary,4101,10322096095657499355,25.658763,23.793907,23.793907,20.000000,3.793907,yes,Both,-,"[1.9999994915125949,5.5511137117897206e-17,-3.0814871275706815e-33,1.7105689795575038e-49]",1.3169577121734619140625,1.3169576216227113023399862811927493515571819731899743868099047486919155844722929 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,moderate,4099,10322096095657499356,25.561446,23.249029,22.606628,20.000000,2.606628,yes,Both,yes,"[-0.13966164066443998,-3.8763892280646578e-18,2.15182828670316e-34,-1.1945046544687754e-50]",-0.14058049023151397705078125,-0.14058046821990765766624665138807069884802640321892146574846765659067668817307699 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,boundary,4105,10322096095657499355,26.088438,25.637514,25.637514,20.000000,5.637514,yes,Both,yes,"[0.99899949151259504,2.7727805926652667e-17,-1.5392024281053832e-33,8.5442898762077182e-50]",3.7999393939971923828125,3.7999393211997930734222062320257072616372641916906079170097936373745998626952477 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,near_one,4099,10322096095657499359,24.857511,22.598092,22.085996,20.000000,2.085996,yes,Both,yes,"[0.53604224621822094,1.4878161098081403e-17,-8.259038507586138e-34,4.5846873561939605e-50]",0.551595985889434814453125,0.55159586198878604402024477717780943885722591386846885979528200458339895826755766 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,moderate,4099,10322096095657499356,36.747937,22.921316,22.304962,20.000000,2.304962,yes,Both,yes,"[-0.24896518890527197,-6.9101721263196129e-18,3.8359160993815049e-34,-2.1293611870318335e-50]",-0.2752292454242706298828125,-0.2752291923074717000217600512613630869391188036657604244357750914377283598292848 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,near_one,4099,10322096095657499359,25.245567,22.988275,22.581085,20.000000,2.581085,yes,Both,-,"[0.97201166685381302,2.6978743318634508e-17,-1.4976211003900068e-33,8.3134671390872429e-50]",0.16924555599689483642578125,0.16924552902364932725242710149144848803577038425156278163465453073213314786810873 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,moderate,4099,10322096095657499356,31.106913,22.475584,21.855256,20.000000,1.855256,yes,Both,-,"[1.6346453250862929,4.537052192516691e-17,-2.5185699040290393e-33,1.3980871482905051e-49]",0.0207921527326107025146484375,0.020792147252217579097299115967243302029187028434209797344924817170102319462039264 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,lgamma,native,float,native float,bl::lgamma,moderate,4099,10322096095657499287,25.215770,22.768927,22.134517,20.000000,2.134517,yes,Both,-,"[1.6354152637709984,4.5391892016549652e-17,-2.5197561824036125e-33,1.3987456650730382e-49]",-0.107594527304172515869140625,-0.1075945506729870651185251078111303116984586515628732861915874500496795356566364 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,tgamma,native,float,native float,bl::tgamma,moderate,4099,10322096095657499284,24.655427,22.096602,21.497773,20.000000,1.497773,yes,Both,-,"[19.230534417261044,5.3375455214724321e-16,-2.962932966461791e-32,1.6447581998933986e-48]",12563186288951296,12563190531484946.097539947606450335009162437627518611106355880665925445522889534 diff --git a/validation/metrics/data/native/strict/24cea465cb7d4d59a5d6b1d1aac99687/f64_accuracy.csv b/validation/metrics/data/native/strict/24cea465cb7d4d59a5d6b1d1aac99687/f64_accuracy.csv new file mode 100644 index 0000000..14dc222 --- /dev/null +++ b/validation/metrics/data/native/strict/24cea465cb7d4d59a5d6b1d1aac99687/f64_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,near_one,4099,10322096095657499359,68.804804,53.029455,53.001693,48.000000,5.001693,yes,Both,yes,"[1.4297151598371682,3.9682567227671501e-17,-2.2028249906198284e-33,1.222813511902914e-49] ; [0.57263374255596289,1.5893779141572608e-17,-8.8228197756404827e-34,4.8976488285171109e-50]",2.00234890239313134685517070465721189975738525390625,2.0023489023931311248105657796259038150310516357421875 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-15.0558510431143677266163649619556963443756103515625,-15.0558510431143677266163649619556963443756103515625 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,wide_exponent,4096,10322096095657499357,82.842054,53.932557,53.150426,48.000000,5.150426,yes,Both,yes,"[-2.5801269239800948e-52,-7.1612907936449556e-69,3.9753149625703952e-85,-2.2067431007912725e-101] ; [6.2882455610389305e-52,1.745338751590589e-68,-9.6885763389319921e-85,5.3782402636604011e-101]",3.7081186370588353126400687774493756982129860731379218490790094277487448813887287e-52,3.7081186370588356835606838461915142713865122279018731858354873035278451266926346e-52 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,extreme_finite,4096,10322096095657499295,83.051539,53.922063,53.033213,48.000000,5.033213,yes,Both,yes,"[4.044152691012953e+59,1.1224778581655917e+43,-6.2310038138368535e+26,34589019503.244186] ; [-3.2763861007278913e+51,-9.0937982164748556e+34,5.0480720806127841e+18,-280.22429269318661]",404415265824909244971463481926668921988920568307135488720896,404415265824909201094180361492905708699283935084133453135872 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [2.2250738585072014e-308,0,0,0]",2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308,2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.7781742597549925477551369112916290760040283203125,-0.7781742597549925477551369112916290760040283203125 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",-9.65894031423886190168559551239013671875e-14,-9.65894031423886190168559551239013671875e-14 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [2.2250738585072014e-308,0,0,0]",-2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308,-2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,near_one,4099,10322096095657499359,54.941335,53.192655,53.017782,48.000000,5.017782,yes,Both,yes,"[0.61590653178072707,1.7094840314999723e-17,-9.489542660001528e-34,5.267754377148175e-50] ; [0.81645463695581544,2.2661168412757988e-17,-1.2579475468376116e-33,6.9830116513492445e-50]",0.50285974380374887093836377971456386148929595947265625,0.50285974380374892608309676348753773569247609448642907343737535469374577701273665 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,moderate,4099,10322096095657499356,54.943506,53.177920,53.014990,48.000000,5.014990,yes,Both,yes,"[-1.8309845685969375,-5.0820030644741984e-17,2.8210784066974295e-33,-1.5660131006941688e-49] ; [4.4139715148669616,1.2251232014612206e-16,-6.8007999313236564e-33,3.7752023348123534e-49]",-8.0819137299478551739184695179574191570281982421875,-8.0819137299478542859205922880040108996859918106071002798056202021115268507855944 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,wide_exponent,4096,10322096095657499357,54.949502,53.147252,53.012976,48.000000,5.012976,yes,Both,yes,"[-9580440436661.9609,-0.00026591063897079994,1.4761005693908477e-20,-8.1940041940001134e-37] ; [3.5476231799149722e+112,9.8466323425887909e+95,-5.465978970880409e+79,3.0342278527941741e+63]",-3.3987792566896694596919030454680074525269527091652711616914422309578532569280119e+125,-3.3987792566896690857302928923045025855537603060392874444605126408265807925080287e+125 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,extreme_finite,8,10322096095657499292,69.953445,54.906891,54.906891,48.000000,6.906891,yes,Both,yes,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,-2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [-2.4203699467808244e-121,-6.7178761075670899e-138,3.729170365600104e-154,-2.0701054013195242e-170]",-0.46875,-0.46875000000000001387778780781444442934375177282579434799116745646516135614945142 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,near_one,4099,10322096095657499359,54.949938,53.186535,53.032508,48.000000,5.032508,yes,Both,yes,"[0.79583533097289294,2.2088867706407193e-17,1.2261784757776169e-33,6.8066578805404505e-50] ; [0.78671878189697564,2.1835832639176979e-17,1.212132207893789e-33,6.7286854304670572e-50]",1.01158806588287486505350898369215428829193115234375,1.0115880658828749748599930078884108617347838241152708567193976201713984484334261 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,moderate,4099,10322096095657499356,55.299598,53.162157,53.017700,48.000000,5.017700,yes,Both,yes,"[5.6982279612785671,1.5815759705435825e-16,8.7795102884568185e-33,4.8736072335891048e-49] ; [5.6630083746783413,1.571800571553245e-16,8.725245923286967e-33,4.8434844597749865e-49]",1.0062192361850825772506823341245763003826141357421875,1.0062192361850826876012316258994293315599871850773075711644181221348221597609452 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,wide_exponent,4096,10322096095657499357,54.940111,53.173252,53.006391,48.000000,5.006391,yes,Both,yes,"[1.1797107595829603e-08,3.2743551192175876e-25,1.8176322220773076e-41,1.0089885716254063e-57] ; [2.9273558682385512e-68,8.1250447154750139e-85,4.5103058596146572e-101,2.5037227067229757e-117]",402995335272583736023300876476329416171344205099568646324224,402995335272583691479603215316671542832621087480350248383875.97791882737549902199 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,extreme_finite,8,10322096095657499292,54.565310,53.447459,53.447459,48.000000,5.447459,yes,Both,yes,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [2.4203699467808244e-121,6.7178761075670899e-138,3.729170365600104e-154,2.0701054013195242e-170]",8.0016173194558218715832353057948522675740813308632367068153019530691147107160091e+240,8.0016173194558225230457526744094465773333433188328184012700026520990852868662071e+240 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,moderate,4099,10322096095657499356,54.957904,53.175116,53.010971,48.000000,5.010971,yes,Both,yes,"[-2.0766790938067476,-5.7639423617548914e-17,3.1996307613162919e-33,-1.7761518707561329e-49] ; [1.7605984240305848,4.8866422686937992e-17,-2.7126313799051833e-33,1.5058129076457224e-49] ; [-0.3659974929680736,-1.0158471091205978e-17,5.6390842502229579e-34,-3.1303205861993077e-50]",-4.02219543274149682332563315867446362972259521484375,-4.0221954327414963801553326667348806266375851488013985258768850927779681114770938 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; next value after one [1.0000000000000002,0,0,0] ; native product cancellation",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,wide_exponent,4096,10322096095657499357,67.731490,53.261032,53.076165,48.000000,5.076165,yes,Both,yes,"[9.3280228061672898e+101,2.5890464234088722e+85,-1.4372094755459709e+69,7.9781152548029138e+52] ; [-1.157500052342858e+78,-3.212708022789662e+61,1.7834112091495225e+45,-9.8999209338619524e+28] ; [1.8812092993044754e+65,5.2214046955669652e+48,-2.8984618569521754e+32,16089695447930460]",-1.0797186886394012091182337394342607583764140817913341512476728655410802178495674e+180,-1.0797186886394010954097576163349944382733983701060212581740083991443274190535586e+180 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fabs,native,double,native double,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,moderate,4099,10322096095657499356,54.987841,53.178902,53.024599,48.000000,5.024599,yes,Both,yes,"[-4.0291701907573039,-1.1183193789780232e-16,6.2079196171295382e-33,-3.4460876469796998e-49]",16.234212426087250236150794080458581447601318359375,16.234212426087248464261717100553537863564519292427420360394943465998096598923439 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,wide_exponent,4096,10322096095657499357,54.966048,53.184279,53.034276,48.000000,5.034276,yes,Both,yes,"[2.9507000691330746e-25,8.1898378887864514e-42,-4.5462732960391003e-58,2.5236886447505548e-74]",8.7066308979819320541420161769186049656218085566280656265540977462941222974600937e-50,8.7066308979819311102069574980521020700209525169860268542733130882306736168377202e-50 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,near_one,4099,10322096095657499359,55.022120,53.212652,53.036371,48.000000,5.036371,yes,Both,yes,"[0.9803714880397002,2.7210774967692536e-17,1.5105014443513052e-33,8.384967411241868e-50]",1.02002150429685389809719708864577114582061767578125,1.0200215042968537876713460424605364405111022006296562878115184748990877637517355 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,wide_exponent,4096,10322096095657499357,54.902665,53.142478,53.019012,48.000000,5.019012,yes,Both,yes,"[5.654455339035485e-101,1.5694266272779603e-117,8.7120678853189764e-134,4.8361691791892627e-150]",1.7685169305282301591156520034137992060834685455134402926455624168717720163565455e+100,1.7685169305282303528900122951557431771119667320589594598759928180992244301081954e+100 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166,-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143677266163649619556963443756103515625,-7.0558510431143677266163649619556963443756103515625 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,copysign,native,double,native double,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,floor,native,double,native double,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,ceil,native,double,native double,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,trunc,native,double,native double,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round,native,double,native double,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,roundeven,native,double,native double,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_decimals,native,double,native double,bl::round_decimals,moderate,4099,10322096095657499356,55.241937,53.207435,53.013030,48.000000,5.013030,yes,Both,yes,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",4.0039999999999995594635038287378847599029541015625,4.004 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_significant,native,double,native double,bl::round_significant,wide_exponent,4096,10322096095657499357,62.492824,53.239040,53.008690,48.000000,5.008690,yes,Both,yes,"[1.4846549805182609e+20,4120.7453574894662,-2.2874731872510136e-13,1.2698027003493837e-29]",148465500000000016384,148465500000000000000 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,lround,native,double,native double,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,llround,native,double,native double,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remquo,native,double,native double,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.9441489568856322733836350380443036556243896484375 ; 1,-0.9441489568856322733836350380443036556243896484375 ; 1 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ldexp,native,double,native double,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbn,native,double,native double,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbln,native,double,native double,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.7247924004236494521791200895677320659160614013671875 ; -815,0.7247924004236494521791200895677320659160614013671875 ; -815 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,near_one,4099,10322096095657499359,54.920710,53.127507,53.001106,48.000000,5.001106,yes,Both,yes,"[1.0010388911274162,2.7784410636872319e-17,1.5423446207347879e-33,8.5617325492325808e-50]",1.0005193107218952608405970750027336180210113525390625,1.0005193107218951498457515954360620198623563387038363607072361122298411008899428 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,wide_exponent,4096,10322096095657499357,55.009451,53.211448,53.027507,48.000000,5.027507,yes,Both,yes,"[6.0219100959119555e-185,1.6714158101760344e-201,9.2782215808997173e-218,5.1504476133444428e-234]",7.7600967106808367478172926221258513837894764415588410983624981464748121495074265e-93,7.7600967106808375930900190108944118736382926995509918646504739659308953242516058e-93 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,extreme_finite,4096,10322096095657499295,54.924178,53.221411,53.017887,48.000000,5.017887,yes,Both,yes,"[2.3783259304591718e+282,6.6011805201470536e+265,3.664391301587163e+249,2.0341457971291071e+233]",1.542182197556168240060235866024934642345121301250108457830389998905645354877265e+141,1.5421821975561680709533351179752169384434445730363281277866248379626469712289668e+141 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,subnormal,4100,10322096095657499290,56.222608,53.192031,53.028655,48.000000,5.028655,yes,Both,yes,"[1.3924978593053044e-312,0,0,0]",1.1800414650787929320982458320284728300669497402903960639237252491051024255975799e-156,1.1800414650787930605326941577347439698813910767655579114793014150350187021874733e-156 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,moderate,4099,10322096095657499356,54.622083,52.468769,52.153023,48.000000,4.153023,yes,Both,yes,"[1.4533648333973588,4.033897753045631e-17,-2.2392630822074716e-33,1.2430407160299148e-49]",1.132726034706547313390956333023495972156524658203125,1.1327260347065475395950816870103535936661188861328342251597491513525714564878517 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,wide_exponent,4096,10322096095657499357,54.524419,52.302376,51.828370,48.000000,3.828370,yes,Both,yes,"[1.2341102646685055e-66,3.4253440769030517e-83,-1.9014479307205854e-99,1.0555156364059267e-115]",1.0726334135393147944540533616877040596517305799361325444193308170648393229384965e-22,1.0726334135393145261932376031478166833239128206765371006626749066582454186154407e-22 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,moderate,4099,10322096095657499356,54.875942,52.699142,52.296238,48.000000,4.296238,yes,Both,yes,"[-6.832833876256192,-1.8964923732145955e-16,1.0527647493844247e-32,-5.8440183214016046e-49] ; [4.4299110555054249,1.2295473127159131e-16,-6.8253586822159713e-33,3.7888351801606942e-49]",8.1432015043349768035341185168363153934478759765625,8.1432015043349753310215069499059937406110597175203571183027746754807131183654083 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,wide_exponent,4096,10322096095657499357,83.835524,53.981284,52.722096,48.000000,4.722096,yes,Both,yes,"[3.0900587929049188e-234,8.5766360483211479e-251,-4.7609894073381275e-267,2.6428800300116337e-283] ; [2.970069684721122e-242,8.2435993717964229e-259,-4.5761169141769325e-275,2.540255180747926e-291]",3.0900587929049193702454679907420486743297512979591235842153811313882487753757378e-234,3.0900587929049189543018606534397317978098396795986767283237714870956245237140656e-234 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,moderate,4099,10322096095657499356,55.113078,53.212981,52.982939,48.000000,4.982939,yes,Both,yes,"[-5.7279546273043369,-1.5898267778103705e-16,8.8253114694534815e-33,-4.8990319964378645e-49]",0.52713934110892768369893701674300245940685272216796875,0.52713934110892774291936789618839698785354771358638292015523278457552217658095189 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,argument_reduction,4114,10322096095657499282,55.226584,53.204656,53.024608,48.000000,5.024608,yes,Both,yes,"near 2^103 * pi/2 [1.5929767251982753e+31,0,0,0]",0.53627726761951810541262375409132800996303558349609375,0.53627726761951816394442418574940086586529943280164825512056702720586559068997775 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,moderate,4099,10322096095657499356,55.056788,53.175990,52.886447,48.000000,4.886447,yes,Both,-,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",0.5080030849914536350553362353821285068988800048828125,0.50800308499145369607356162136795610710790846414906949175872788247360372736565953 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,argument_reduction,4114,10322096095657499282,57.678400,53.190606,52.957009,48.000000,4.957009,yes,Both,-,"near 2^96 * pi/2 [-1.2445130665611575e+29,0,0,0]",-0.50225325592115044326391171125578694045543670654296875,-0.50225325592115050071185754648530613739144383428589081390350064471629529975977222 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,moderate,4099,10322096095657499356,54.966272,53.114050,52.830853,48.000000,4.830853,yes,Both,yes,"[-5.7949723984622032,-1.6084279459600013e-16,8.9285686952767023e-33,-4.956351271221794e-49]",0.5310948062764977439798030900419689714908599853515625,0.53109480627649781027783431456712262944491608720831668267909314089793071391325448 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,argument_reduction,4114,10322096095657499282,54.822185,53.100114,52.859084,45.000000,7.859084,yes,Both,yes,"near 2^104 * pi/2 [-3.185953450396556e+31,0,0,0]",-1.3480441969403991198106496085529215633869171142578125,-1.3480441969403989547915221380501138540709149655202515743993920841096117436418514 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,near_one,4099,10322096095657499359,55.076264,53.013973,52.693509,48.000000,4.693509,yes,Both,yes,"[0.69084897511107168,1.9174910967675087e-17,-1.0644213825725161e-33,5.9087256341767488e-50]",0.6045578974549419282169537837035022675991058349609375,0.60455789745494184521062137483289791333043169413541191538511529635270202509108926 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,moderate,4099,10322096095657499356,54.861464,53.032964,52.752464,48.000000,4.752464,yes,Both,yes,"[2.7271853311214098,7.5694598675774267e-17,-4.2018943144802738e-33,2.3325199074887691e-49]",1.219341175070450589146275888197124004364013671875,1.2193411750704504284332317205702958914241077638601847892988778474321517604825199 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,near_one,4099,10322096095657499359,54.993800,53.170510,53.040656,48.000000,5.040656,yes,Both,yes,"[1.3489527984700374,3.7440961399849353e-17,-2.0783908705107242e-33,1.1537386993058641e-49] ; [0.85379739020999446,2.3697638024400127e-17,-1.3154831681960814e-33,7.302398509190685e-50]",1.0065123671465141530489972865325398743152618408203125,1.0065123671465142616892414740655812810119461135218360142280212527802839300485563 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,moderate,4099,10322096095657499356,54.890567,53.179569,53.060948,48.000000,5.060948,yes,Both,yes,"[-4.7266626831272092,-1.311912435111087e-16,7.2825769587619272e-33,-4.0426423091110703e-49] ; [2.8962761555613667,8.0387811839426525e-17,-4.4624199801683043e-33,2.4771407037650929e-49]",-1.0210524446594291259060582888196222484111785888671875,-1.0210524446594292345764275054094005619467300994098247323364498554603476784958796 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,extreme_finite,8,10322096095657499293,62.132485,54.509980,54.509980,48.000000,6.509980,yes,Both,yes,"huge positive [1.6853373139334212e+307,4.6777507254719996e+290,-2.5966732794380218e+274,1.4414432311305024e+258] ; tiny negative [-2.7813423231340017e-308,-0,0,-0]",1.5707963267948965579989817342720925807952880859375,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,moderate,4099,10322096095657499356,54.899662,52.925254,52.422752,48.000000,4.422752,yes,Both,yes,"[-0.50335035028515207,-1.3970778708492839e-17,7.7553400970558289e-34,-4.3050785697750387e-50]",-0.527471766697775290566596595454029738903045654296875,-0.5274717666977753779398223907170077140407553909392966159005201438307403789636427 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,boundary,4105,10322096095657499355,54.919616,53.086611,53.066141,48.000000,5.066141,yes,Both,yes,"[-0.9999991973384238,-2.7755553337294841e-17,1.5407427188138168e-33,-8.552840207253314e-50]",-1.5695293132325520701897403341718018054962158203125,-1.5695293132325522366341318908043706690745267178940372928026218495677083294449175 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,moderate,4099,10322096095657499356,54.885315,52.858563,52.325679,48.000000,4.325679,yes,Both,-,"[-0.50414043989940849,-1.3992708100524456e-17,7.7675133550305953e-34,-4.3118360854191824e-50]",2.0991827056155738517873032833449542522430419921875,2.0991827056155742237087238848295169418258006344663652219436700791519481199702843 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,boundary,4105,10322096095657499355,54.933501,53.208019,53.015630,48.000000,5.015630,yes,Both,-,"[0.99999951942877319,2.7755562277097889e-17,-1.5407432150725758e-33,8.5528429620428158e-50]",0.00098037876895050468130377030462341281236149370670318603515625,0.00098037876895050478897482934485258576844002644995119255737105648210814670714088092 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,moderate,4099,10322096095657499356,54.974015,53.157024,53.019599,48.000000,5.019599,yes,Both,-,"[-2.7628513559780572,-7.6684529725591843e-17,4.2568465266952151e-33,-2.3630245131163269e-49]",0.063111558041546500508189865286112762987613677978515625,0.063111558041546493595944022576030893684783578049870680283049711049275225101317397 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,boundary,4099,10322096095657499289,54.951337,53.166873,53.022036,48.000000,5.022036,yes,Both,-,"[326.47996564801747,9.061639373531479e-15,-5.0302203366722636e-31,2.7923332183556269e-47]",6.1439480220514836164654240272397757603181465874882434277975712709632833055792003e+141,6.1439480220514842882409559528883970846034473863532678303012402569115463152702114e+141 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,moderate,4099,10322096095657499356,54.935841,53.180629,53.025408,48.000000,5.025408,yes,Both,-,"[5.0109819009809229,1.3908268706122392e-16,-7.7206400751053074e-33,4.2858161881128051e-49]",32.244515813988982699811458587646484375,32.244515813988979182444910558923716242085594124376112958709781738645907303764812 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,boundary,4099,10322096095657499289,54.972599,53.164620,53.020447,48.000000,5.020447,yes,Both,-,"[-250.99202946082733,-6.9664282526201528e-15,3.8671445227290451e-31,-2.1466964443434239e-47]",2.7788842653856641449312255150961427650361335071502829578141633319949134903163359e-76,2.7788842653856638407547596404961219062300898310358581460949384897692395968312002e-76 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,moderate,4099,10322096095657499356,55.059494,52.612144,51.837138,48.000000,3.837138,yes,Both,yes,"[-0.32815107029056989,-9.1080218447994713e-18,5.0559677804426335e-34,-2.80662592080518e-50]",-0.2797457975256689710619184552342630922794342041015625,-0.27974579752566904060118051629266816207002563378260620564372138557529344923417983 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,cancellation,4098,10322096095657499288,83.154283,53.027983,51.974659,48.000000,3.974659,yes,Both,yes,"[4.0836650763983235e-12,0,0,0]",4.083665076406660708951440610569317006713074835744237134349532425403594970703125e-12,4.0836650764066616317750966948397766703517255100972299064045015820960692117527006e-12 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,near_one,4099,10322096095657499359,54.918146,53.166316,53.041728,48.000000,5.041728,yes,Both,-,"[1.1335639126739003,3.1462718893368611e-17,1.7465317466363379e-33,9.695198791772263e-50]",0.125366574619705295479121787138865329325199127197265625,0.12536657461970530900080502001741556309701459949497062977512985254006361141481408 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,wide_exponent,4096,10322096095657499357,54.929145,53.171869,53.045970,48.000000,5.045970,yes,Both,-,"[4.6261311118266506e+112,1.2840093188211806e+96,7.1276835479426902e+79,3.9566591935839502e+63]",259.421251321115732935140840709209442138671875,259.42125132111570503685832403601672523060244723042283551553508070299190699694996 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,extreme_finite,4096,10322096095657499295,54.890700,53.179074,53.016960,48.000000,5.016960,yes,Both,-,"[2.0331470333148491e-224,5.6431166220861893e-241,3.1325590022425128e-257,1.7389195651432225e-273]",-515.069475975312570881214924156665802001953125,-515.06947597531262739711907680169329239742647250082611831496163075456316319684835 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,near_one,4099,10322096095657499359,54.995094,53.183432,52.964126,48.000000,4.964126,yes,Both,-,"[0.95724233546017334,2.656881202434606e-17,1.4748653423183355e-33,8.1871473063173968e-50]",-0.063043891274832619675549949533888138830661773681640625,-0.063043891274832612500047979104758712783348150384731080505578135007330599360108535 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,wide_exponent,4096,10322096095657499357,54.961217,53.191544,53.045986,48.000000,5.045986,yes,Both,-,"[1.6478667181302047e-79,4.5737489299541154e-96,2.5389406854448656e-112,1.4093952035692334e-128]",-261.71171993614638040526187978684902191162109375,-261.71171993614635226097107489196965564142826014659637604512890701616180385411886 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,extreme_finite,4096,10322096095657499295,54.951425,53.191636,53.032071,48.000000,5.032071,yes,Both,-,"[3.0682846229157043e-158,8.5162005861608278e-175,4.7274409865410026e-191,2.624256915407243e-207]",-523.24720667460906042833812534809112548828125,-523.24720667460911724330320979055400330344628738302026449859537432674608012400159 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,near_one,4099,10322096095657499359,54.958860,53.143778,53.018669,48.000000,5.018669,yes,Both,-,"[0.74875470021249213,2.0782117699305384e-17,1.1536392785119411e-33,6.4039844455795532e-50]",-0.1256604383656476919828293148384545929729938507080078125,-0.12566043836564767821108349467351605169970965007622302204561391695316098182502685 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,wide_exponent,4096,10322096095657499357,55.006875,53.165767,53.021068,48.000000,5.021068,yes,Both,-,"[4.6201923918188489e+258,1.2823609928988147e+242,7.1185335009872046e+225,3.9515798971807595e+209]",258.66466006061358484657830558717250823974609375,258.66466006061361314780285273352542290302251199814003016169435342215632974918998 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,extreme_finite,4096,10322096095657499295,54.953390,53.178424,53.029150,48.000000,5.029150,yes,Both,-,"[2.8445937992650119e+257,7.8953338291249174e+240,4.3827907020981923e+224,2.4329375747912342e+208]",257.45402025901483966663363389670848846435546875,257.45402025901486767802909135885153181987420064870956774702074158124472305183714 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,moderate,4099,10322096095657499356,54.942690,53.047619,52.277793,48.000000,4.277793,yes,Both,yes,"[1.8167026837397302,5.0423628709654062e-17,-2.7990736789304006e-33,1.5537980229853868e-49]",1.035566939745749426293741635163314640522003173828125,1.0355669397457496159618991192935896670346648660028939511409663282242925434700808 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,cancellation,4098,10322096095657499288,83.171912,53.575868,52.537975,48.000000,4.537975,yes,Both,yes,"[-3.3317353930316975e-08,0,0,0]",-3.331735448534001895552398068121868757174297570600174367427825927734375e-08,-3.3317354485340024050756419560216456335223016311658126282401740088069247520016174e-08 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,near_one,4099,10322096095657499359,54.959214,53.190567,53.032687,48.000000,5.032687,yes,Both,yes,"[1.0146951632466654,2.8163448330305746e-17,1.563385439457318e-33,8.6785325562461659e-50] ; [0.67203279182024089,1.86526569695489e-17,1.0354304619014043e-33,5.7477936960060001e-50]",1.009851987115524707405711524188518524169921875,1.0098519871155248170101935707300539046159555693972004409710861335008920239838475 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,moderate,4099,10322096095657499356,54.935083,53.163311,53.017201,48.000000,5.017201,yes,Both,yes,"[5.9546289339047043,1.652741536380038e-16,9.1745585372173701e-33,5.0929030643950102e-49] ; [5.055011828311212,1.4030476303859041e-16,7.7884789195009855e-33,4.3234743116188276e-49]",8258.471810015818846295587718486785888671875,8258.4718100158197523034186342284236047260743845763155702907245462782899967304707 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,moderate,4099,10322096095657499356,53.278021,51.216249,50.843118,48.000000,2.843118,yes,Both,yes,"[-0.12598239680403012,-3.4967139407324243e-18,1.9410661637644512e-34,-1.0775081736660592e-50]",-5.036966535935927210927633319859086924452640232630074024200439453125e-07,-5.0369665359359247171059931113138371384365138382213074202619030423806648231460384e-07 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,wide_exponent,4096,10322096095657499357,53.261106,51.258453,50.915855,48.000000,2.915855,yes,Both,yes,"[3178858.3859193348,8.8231044301760176e-11,-4.8978068435268183e-27,2.7188289639250675e-43]",3280184465858375893424625758878219769323978752,3280184465858377437606968244219065735294846924.9874778095912486192020477914613844 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.1588709556304993e+103,8.7676281669016289e+86,4.8670113311231216e+70,2.7017340204622107e+54] ; [5.476364839089647e-60,1.5199965839012416e-76,8.4376760239937101e-93,4.6838510980827309e-109]",4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60,4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remainder,native,double,native double,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,near_one,4099,10322096095657499359,54.924799,52.983593,52.654993,48.000000,4.654993,yes,Both,yes,"[1.4755959292519478,4.095601439246665e-17,-2.2735155087697884e-33,1.262054632339298e-49]",2.0724994727921046688834394444711506366729736328125,2.072499472792104961138580290412029520398475094027248170955683086677283903718196 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,moderate,4099,10322096095657499356,54.840090,52.839907,52.382195,48.000000,4.382195,yes,Both,yes,"[-4.8693204451967098,-1.3515079181338512e-16,7.5023760433770639e-33,-4.1646553113766992e-49]",-65.112354096910877387927030213177204132080078125,-65.112354096910888480990202630806761852448902953289356801355801975240320907331551 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,near_one,4099,10322096095657499359,54.876574,52.853190,52.621517,48.000000,4.621517,yes,Both,-,"[0.98058054916848769,2.7216577579660886e-17,-1.5108235540218166e-33,8.3867554791051488e-50]",1.520548407211194774646401128848083317279815673828125,1.5205484072111945551914719285992945947565561251918943368316691032158941972807884 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,moderate,4099,10322096095657499356,54.744398,52.689522,52.208160,48.000000,4.208160,yes,Both,-,"[-2.8630251231866755,-7.9464910296053056e-17,4.4111886530225384e-33,-2.4487016042754264e-49]",8.785762981329629184301666100509464740753173828125,8.7857629813296308730208849350993320141187458453483631911030801892035180406191378 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,near_one,4099,10322096095657499359,54.955827,52.958304,52.476216,48.000000,4.476216,yes,Both,yes,"[0.89084068064074273,2.4725795873002463e-17,-1.3725573940194504e-33,7.6192241072994848e-50]",0.711808711646828573549328211811371147632598876953125,0.7118087116468284599310366212933242511249465496496718227001725734620301911684374 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,moderate,4099,10322096095657499356,55.336545,53.363803,52.830364,48.000000,4.830364,yes,Both,yes,"[0.67537377842904966,1.8745387976000496e-17,-1.0405780668243656e-33,5.7763686435417271e-50]",0.588503635448117012884949872386641800403594970703125,0.58850363544811708637439156576610391440217714992619984433185413295933594686347521 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,near_one,4099,10322096095657499359,54.586548,52.369737,51.895905,48.000000,3.895905,yes,Both,yes,"[0.53254928863989415,1.478121204989397e-17,-8.2052209748295468e-34,4.5548126241965174e-50]",0.51013370703315696896851250130566768348217010498046875,0.51013370703315709071599184668017064813861078342675097769291318040468214812208369 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,moderate,4099,10322096095657499356,54.727697,52.598947,51.750916,48.000000,3.750916,yes,Both,yes,"[-0.12598239680403012,-3.4967139407324243e-18,1.9410661637644512e-34,-1.0775081736660592e-50]",-0.1256514984566571013768765396889648400247097015380859375,-0.12565149845665706821878409248510840880181855230517373980735012913432134271301342 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,moderate,4099,10322096095657499286,54.952709,52.808130,51.870988,48.000000,3.870988,yes,Both,-,"[1.1775265887662758,3.268292827391594e-17,-1.8142669740937001e-33,1.0071204837279191e-49]",0.58738281392912294887054258651915006339550018310546875,0.58738281392912280624478083650309327648102437309781099318842251949855802008569812 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,boundary,4101,10322096095657499355,54.339815,51.870916,51.455052,48.000000,3.455052,yes,Both,-,"[1.0000005503151308,2.7755590889942139e-17,-1.5407448034045001e-33,8.5528517790561814e-50]",0.00104910922245869653833538759357679737149737775325775146484375,0.0010491092224586968782004774758273759261911295412788923059743654980738407419350006 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,moderate,4099,10322096095657499356,54.578729,52.340848,51.786806,48.000000,3.786806,yes,Both,yes,"[-0.49545345377814692,-1.3751595800363862e-17,7.6336691414512835e-34,-4.2375376216048829e-50]",-0.54326232788789219352310055910493247210979461669921875,-0.54326232788789205368437589517863805325010858337223961824526704311193509051969914 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,boundary,4105,10322096095657499355,55.375335,53.840397,53.427151,48.000000,5.427151,yes,Both,yes,"[-0.5,0,0,0]",-0.54930614433405489105410879346891306340694427490234375,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,near_one,4099,10322096095657499359,54.019854,51.750997,51.093455,48.000000,3.093455,yes,Both,yes,"[0.51751407869686006,1.4363901143423232e-17,-7.9735668864340423e-34,4.4262187728538973e-50]",0.53575539526306104054498291588970459997653961181640625,0.53575539526306126354449913496849026907542658974119733621009662651072178280690274 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,moderate,4099,10322096095657499356,59.546056,52.095594,51.417655,48.000000,3.417655,yes,Both,yes,"[-0.51697425326334745,-1.4348917977784133e-17,7.9652495586968923e-34,-4.4216017284753286e-50]",-0.53528925503141955299923893107916228473186492919921875,-0.53528925503141937503523518533749845780941284936029851836201775604219807148329816 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,near_one,4099,10322096095657499359,54.238757,52.047080,51.413451,48.000000,3.413451,yes,Both,-,"[1.3127470131510215,3.6436048987704181e-17,-2.0226070256259654e-33,1.1227724448092754e-49]",0.06338166370075233591041552472233888693153858184814453125,0.063381663700752357043981488713887430626454842957042886947643364361888596761458652 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,moderate,4099,10322096095657499356,56.954094,51.522059,50.938586,48.000000,2.938586,yes,Both,-,"[4.4724300649764519,1.2413487085406605e-16,-6.8908695890527197e-33,3.82520103872781e-49]",2.532797278373559493889186606889983577328706587650231085717678070068359375e-10,2.5327972783735583201867808196745632452377777984379745134701129911583856224598831e-10 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,lgamma,native,double,native double,bl::lgamma,moderate,4099,10322096095657499287,54.454740,52.093832,51.363446,48.000000,3.363446,yes,Both,-,"[1.1903429521686997,3.3038653817449295e-17,-1.8340137085376015e-33,1.0180821233483081e-49]",-0.0825234979651145172940829297658638097345829010009765625,-0.082523497965114488807540710102364103239432281521113914990549637246092147129738611 +6,24cea465cb7d4d59a5d6b1d1aac99687,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,tgamma,native,double,native double,bl::tgamma,moderate,4099,10322096095657499284,53.611781,51.017778,50.584862,48.000000,2.584862,yes,Both,-,"[16.268960066207903,4.5155435130528063e-16,-2.5066301884439958e-32,1.3914592747155096e-48]",2739547473402.04345703125,2739547473402.0450792820033714382601954608901884806869470278424770198729645511427 diff --git a/validation/metrics/data/native/strict/24cea465cb7d4d59a5d6b1d1aac99687/native_accuracy_run.json b/validation/metrics/data/native/strict/24cea465cb7d4d59a5d6b1d1aac99687/native_accuracy_run.json new file mode 100644 index 0000000..c86d416 --- /dev/null +++ b/validation/metrics/data/native/strict/24cea465cb7d4d59a5d6b1d1aac99687/native_accuracy_run.json @@ -0,0 +1,90 @@ +{ + "accuracy_samples": 4096, + "architecture": "x86_64", + "compiler": "ClangCL", + "configuration": { + "build": { + "architecture": "x86_64", + "compiler-id": "Clang", + "compiler-version": "22.1.8", + "config": "Release", + "flags-hash": "47db04c453478949a87df17aee6c905f188a5d962d12b76bf2ba37d99f614ec7", + "frontend-variant": "MSVC", + "optimized": "1", + "processor": "AMD64", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Windows" + }, + "consumer": { + "arm64": "0", + "fast-math": "off", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "1" + }, + "harness": { + "qdpp": "off", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "available", + "simd": "on", + "tu-x86-fma": "0", + "x86": "1" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "0", + "f256-simd": "1", + "msvc-guarded": "0", + "neon": "0", + "runtime-check": "1", + "runtime-path": "1", + "scalar-x86": "0", + "sse2": "1", + "trig-simd": "1", + "wasm-simd": "0" + } + }, + "consumer_mode": "strict", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-clangcl-release\\validation\\fltx_accuracy.exe", + "sha256": "b840de3d873ffb6fbdccf0325c947a1fee921b18063a0d5cd763620f758ce962", + "wasm-sha256": "not-present" + } + }, + "host": { + "machine": "AMD64", + "node": "not-used", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "outputs": { + "f32_accuracy.csv": "c59d1c8fa4adf8524ebde29852a6287018e9ea0697a9ac542fa1b8d8fb3ab996", + "f64_accuracy.csv": "3e01754887e39bf9d3475dee8265c761af7642d6ef1312d3556676f0b61cd1c0" + }, + "platform": "windows", + "policy": "native-float-libm-baseline-v1", + "precisions": [ + "f32", + "f64" + ], + "run_id": "24cea465cb7d4d59a5d6b1d1aac99687", + "sample_mode": "standard", + "schema_version": 2, + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete", + "target": "windows/x86_64/ClangCL", + "thresholds": "advisory" +} diff --git a/validation/metrics/data/native/strict/909f5fff11e64c6f859d03680f2b8789/f32_accuracy.csv b/validation/metrics/data/native/strict/909f5fff11e64c6f859d03680f2b8789/f32_accuracy.csv new file mode 100644 index 0000000..0db06b1 --- /dev/null +++ b/validation/metrics/data/native/strict/909f5fff11e64c6f859d03680f2b8789/f32_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,near_one,4099,10322096095657499359,38.457645,24.037482,24.000509,20.000000,4.000509,yes,Both,yes,"[1.1885061456019219,3.2987672193893811e-17,-1.831183659922398e-33,1.0165111307816044e-49] ; [0.81220021471607706,2.2543084474582116e-17,-1.2513925714875483e-33,6.9466242285517913e-50]",2.000706195831298828125,2.00070631504058837890625 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,moderate,4099,10322096095657499356,41.522382,24.071404,24.000368,20.000000,4.000368,yes,Both,yes,"[6.8051724535006084,1.8888147861053107e-16,-1.0485028323932781e-32,5.8203599295385438e-49] ; [1.1968659760618667,3.3219704100358647e-17,-1.8440640181726446e-33,1.0236611659290266e-49]",8.0020389556884765625,8.002038478851318359375 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,wide_exponent,4096,10322096095657499357,46.805352,24.393682,24.006151,20.000000,4.006151,yes,Both,yes,"[6.8663278648288954e-15,1.9057888225395823e-31,-1.0579253154283554e-47,5.8726652176119575e-64] ; [-3.2984332805285199e-15,-9.154991433081627e-32,5.0820411396266402e-48,-2.821099542652883e-64]",3.567894203281192500032403813747805543243885040283203125e-15,3.567894415039429313607488580828430713154375553131103515625e-15 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,extreme_finite,4096,10322096095657499295,47.155091,24.409642,24.030594,20.000000,4.030594,yes,Both,yes,"[223002548.53621882,6.1895640983749784e-09,-3.4358982872045742e-25,1.9073066943623286e-41] ; [279175322748.44623,7.748671780562106e-06,-4.3013769105216293e-22,2.3877438418260673e-38]",279398318080,279398334384 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.77817428112030029296875,-0.77817428112030029296875 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000016689300537,0,0,0]",-1.6689300537109375e-06,-1.6689300537109375e-06 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,near_one,4099,10322096095657499359,26.016181,24.166616,24.014549,20.000000,4.014549,yes,Both,yes,"[1.4059396726628588,3.902266489560654e-17,-2.1661930524667106e-33,1.2024787013157959e-49] ; [1.4325550147665504,3.9761389035901386e-17,-2.2072004799367987e-33,1.2252423963947649e-49]",2.0140857696533203125,2.014085888497646692485432140529155731201171875 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,moderate,4099,10322096095657499356,25.989725,24.178659,24.028212,20.000000,4.028212,yes,Both,yes,"[-1.4739640396494451,-4.0910720357208028e-17,2.2710011847286731e-33,-1.2606589021183906e-49] ; [2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49]",-4.02748775482177734375,-4.0274875194135120182181708514690399169921875 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,wide_exponent,4096,10322096095657499357,25.942256,24.179837,24.024630,20.000000,4.024630,yes,Both,yes,"[-1122057943862.8401,-3.1143364106002161e-05,1.7288039947384127e-21,-9.5967900001126686e-38] ; [-8694665162187.9277,-0.00024132543636168146,1.3396252793822586e-20,-7.4364141477004576e-37]",9755918009047724494684160,9755918580702648912052224 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,extreme_finite,8,10322096095657499292,40.953446,25.906891,25.906891,20.000000,5.906891,yes,Both,yes,"large neighbour [844424863023104,0.023437498137354851,-1.3010425035850288e-18,7.2222367174802835e-35] ; negative small neighbour [-5.5511156525213747e-16,-1.5407441024465825e-32,8.5528478879580846e-49,-4.7477843256638533e-65]",-0.46875,-0.468750007450577044210149324499070644378662109375 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,near_one,4099,10322096095657499359,25.952819,24.167429,24.029610,20.000000,4.029610,yes,Both,yes,"[1.2982596956909869,3.6033945152474569e-17,2.0002857788178657e-33,1.1103816637369289e-49] ; [1.2798202945460211,3.5522148959688557e-17,1.9718753829605394e-33,1.0946107259271694e-49]",1.01440775394439697265625,1.0144078131795243086497270702039165563127339636105403630860948828655528161513261 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,moderate,4099,10322096095657499356,26.239727,24.172640,24.024913,20.000000,4.024913,yes,Both,yes,"[6.5374711177505596,1.8145127394371573e-16,1.0072569108993997e-32,5.5913990709666165e-49] ; [3.2450059050955762,9.0067006772042607e-17,4.99972323386958e-33,2.775403925497677e-49]",2.0146253108978271484375,2.0146254289230677898843256855109580140862879734170743102717224833311181385074994 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,wide_exponent,4096,10322096095657499357,25.917644,24.144253,24.027945,20.000000,4.027945,yes,Both,yes,"[0.027902000922864607,7.7443609644191634e-19,4.2989839268532189e-35,2.3864154690429567e-51] ; [14499.326437201289,4.0243715130342775e-13,2.2339749567081166e-29,1.2401052166866692e-45]",1.924365506056346930563449859619140625e-06,1.9243653935555734717265282397956262784302341636296406554453298274232840831100044e-06 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,extreme_finite,8,10322096095657499292,25.430169,24.584963,24.584963,20.000000,4.584963,yes,Both,yes,"large positive [844424930131968,0.0234375,1.3010426069826053e-18,7.2222372914521344e-35] ; small negative [5.5511151231257827e-16,1.5407439555097887e-32,8.5528470722950261e-49,4.7477838728798994e-65]",1521180780720166262527502581760,1521180720273875281796043846451.2 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,moderate,4099,10322096095657499356,25.971753,24.150757,24.027403,20.000000,4.027403,yes,Both,yes,"[-1.9749460259140985,-5.4815763759044581e-17,3.0428861518852258e-33,-1.6891411335680094e-49] ; [-6.4158772339979464,-1.7807636570882208e-16,9.885224067575198e-33,-5.4874016817003646e-49] ; [3.4130940773098271,9.4732390746028102e-17,-5.2587040692013754e-33,2.9191671686586848e-49]",16.0841045379638671875,16.0841054786133099696598947048187255859375 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; next value after one [1.0000001192092896,0,0,0] ; native product cancellation",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,wide_exponent,4096,10322096095657499357,32.556508,24.197422,24.009758,20.000000,4.009758,yes,Both,yes,"[0.0072982921122313887,2.0256829858598637e-19,-1.124479945746528e-35,6.2421176324852115e-52] ; [1.9523314176984748e-12,5.4188082290698013e-29,-3.0080428309707814e-45,1.6697992050011997e-61] ; [-2.3939769383437016e-07,-6.6446207934270406e-24,3.6885054973828883e-40,-2.0475318648254738e-56]",-2.39397678569730487652122974395751953125e-07,-2.3939769274275411635131445493727566081466591810245070348628360079601407051086426e-07 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",3588998231833025183056134144,3588998231833025183056134144 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fabs,native,float,native float,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,moderate,4099,10322096095657499356,25.964756,24.164418,24.008593,20.000000,4.008593,yes,Both,yes,"[-4.0059402826070123,-1.1118717842559279e-16,6.1721282765599288e-33,-3.4262194617884094e-49]",16.0475597381591796875,16.0475587873306722030974924564361572265625 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,wide_exponent,4096,10322096095657499357,25.989404,24.167423,24.020149,20.000000,4.020149,yes,Both,yes,"[797963256397175.88,0.022147929501425297,-1.2294570640128564e-18,6.8248577012755909e-35]",636745309315666385691207532544,636745346742277146199547969536 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,near_one,4099,10322096095657499359,26.024612,24.188379,24.024049,20.000000,4.024049,yes,Both,yes,"[0.99957607711604157,2.774380939196801e-17,1.5400907988887275e-33,8.5492213246980834e-50]",1.0004241466522216796875,1.0004240880080409757745092099607730518546575501261053598713520202379186199441578 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,wide_exponent,4096,10322096095657499357,25.897082,24.141136,24.016290,20.000000,4.016290,yes,Both,yes,"[1.4835519773135318e-08,4.1176839086041523e-25,2.2857737417304193e-41,1.2688593185763538e-57]",67405800,67405796.027411572915787349932438540624582792272908782750245310659982961460931995 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,no,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",-4402.79248046875,-4402.79248046875 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055850982666015625,-7.055850982666015625 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,no,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",3588998231833025183056134144,3588998231833025183056134144 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,moderate,4099,10322096095657499356,48.522678,24.128146,24.008521,20.000000,4.008521,yes,Both,yes,"[6.6457375410806137,1.8445627084308674e-16,-1.0239379946324441e-32,5.6839976871472472e-49] ; [2.6220427968328792,7.27763071149101e-17,-4.0398965903082395e-33,2.2425931058324353e-49]",4.0236949920654296875,4.0236947536468505859375 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000016689300537,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,copysign,native,float,native float,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,floor,native,float,native float,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,ceil,native,float,native float,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,trunc,native,float,native float,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round,native,float,native float,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,roundeven,native,float,native float,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_decimals,native,float,native float,bl::round_decimals,moderate,4099,10322096095657499356,26.229396,24.222837,24.047915,20.000000,4.047915,yes,Both,yes,"[4.1022214313758827,1.1385951713060679e-16,-6.3204728745551046e-33,3.5085672559249129e-49]",4.10200023651123046875,4.102 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_significant,native,float,native float,bl::round_significant,wide_exponent,4096,10322096095657499357,26.031860,24.190158,24.023953,20.000000,4.023953,yes,Both,yes,"[259.8694582017871,7.2128263973122191e-15,-4.0039229694600715e-31,2.2226237347600494e-47]",259.869384765625,259.8694 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,lround,native,float,native float,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,llround,native,float,native float,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remquo,native,float,native float,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.944149017333984375 ; 1,-0.944149017333984375 ; 1 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0 ; 3588998231833025183056134144,0 ; 3588998231833025183056134144 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ldexp,native,float,native float,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbn,native,float,native float,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbln,native,float,native float,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0.724792420864105224609375 ; 92,0.724792420864105224609375 ; 92 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,-,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,near_one,4099,10322096095657499359,25.904846,24.145989,24.002397,20.000000,4.002397,yes,Both,yes,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",1.00001394748687744140625,1.0000140069934242844029017485374012760134473363250144717592753776502313379618068 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,wide_exponent,4096,10322096095657499357,25.966753,24.215195,24.033944,20.000000,4.033944,yes,Both,yes,"[8.4482670931604627e+31,2344865161252447,0.13016616458319236,7.2256736473703873e-18]",9191445835546624,9191445300433280.2040066177032811142195637421096986523537003168905974560430072948 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,extreme_finite,4096,10322096095657499295,25.972131,24.206633,24.003202,20.000000,4.003202,yes,Both,yes,"[3.2519120367544908e+32,9025869043151310,0.50103638144790075,2.7813106342916602e-17]",18033057994899456,18033059067370500.361343159063133250828533418772371371727970165496211972696634283 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,subnormal,4100,10322096095657499290,27.589271,24.195086,24.031452,20.000000,4.031452,yes,Both,yes,"[1.8779781629341901e-40,0,0,0]",1.370393513549582123487035494914521027709497502655722200870513916015625e-20,1.3703934336292589277694998548128719273180184126519025205252581878215739867341933e-20 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,moderate,4099,10322096095657499356,26.085409,24.111702,23.691553,20.000000,3.691553,yes,Both,yes,"[0.12581300317204658,3.4920123229710991e-18,-1.9384562416186464e-34,1.0760593758366834e-50]",0.5010817050933837890625,0.50108166810711645089209254243838069927329761408922790474888496443902402861654973 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,wide_exponent,4096,10322096095657499357,25.932419,24.028888,23.767643,20.000000,3.767643,yes,Both,yes,"[7.162186340732675e+20,19879.060455343031,-1.1035095312718641e-12,6.1257084475566886e-29]",8947092,8947091.3735183523613709653827916776567723666436134613915808566062692932024921705 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,moderate,4099,10322096095657499356,25.982984,24.167535,24.008992,20.000000,4.008992,yes,Both,yes,"[3.0841394791368018,8.5602066522327873e-17,-4.7518692604291353e-33,2.6378173314684702e-49] ; [2.5731327818230003,7.1418781494941861e-17,-3.9645387803178756e-33,2.2007611179641204e-49]",4.016582012176513671875,4.0165817742570609994234301662245381486745983183743907579567512422082641230482559 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,wide_exponent,4096,10322096095657499357,50.914162,24.589271,24.043824,20.000000,4.043824,yes,Both,yes,"[-1.2969861059349299e-29,-3.599859593569704e-46,1.9983235030994217e-62,-1.1092923818952892e-78] ; [2.7588817734603815e-32,7.6574351677860018e-49,-4.250730416425209e-65,2.3596293898948734e-81]",1.2969890834882488924611555657595108221020467658335037497430164421530207619071007e-29,1.2969890084946579252781730919118729168609820257308054473541529684278323820094086e-29 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,moderate,4099,10322096095657499356,26.149143,24.214150,24.040329,20.000000,4.040329,yes,Both,yes,"[-5.7483236179995885,-1.5954803084249315e-16,8.8566948687470254e-33,-4.9164532826812132e-49]",0.509722173213958740234375,0.5097222027582440476609190572223045086789238470780369932414545068400613217789304 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,argument_reduction,4111,10322096095657499282,26.207717,24.232934,24.054458,20.000000,4.054458,yes,Both,yes,"near 2^94 * pi/2 [3.1112832252188646e+28,0,0,0]",-0.031775273382663726806640625,-0.031775275206458036754431969895458660655905161590001855338797800351243967744526865 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,moderate,4099,10322096095657499356,26.060966,24.256137,24.035729,20.000000,4.035729,yes,Both,-,"[4.4588502387206184,1.2375795495957516e-16,-6.8699465538321711e-33,3.8135864210043619e-49]",-0.25083100795745849609375,-0.25083099337247927050646438955413445736165895666786844698074070181158501850594916 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,argument_reduction,4111,10322096095657499282,26.627892,24.245703,24.076319,20.000000,4.076319,yes,Both,-,"near 2^70 * pi/2 [1.8544669218107189e+21,0,0,0]",-0.5190365314483642578125,-0.51903650210542794358474489503209069334133171874228756988100493423128724002299192 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,moderate,4099,10322096095657499356,25.924307,24.163895,24.015719,20.000000,4.015719,yes,Both,yes,"[-6.036496878364936,-1.6754644556096587e-16,9.3006960777944832e-33,-5.1629234653041607e-49]",0.2518171370029449462890625,0.25181715184977206019891708487262388659629088175425587483011094843357962067832389 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,argument_reduction,4111,10322096095657499282,25.898518,24.161857,24.046469,18.000000,6.046469,yes,Both,yes,"near 2^28 * pi/2 [-421657632,0,0,0]",0.507759034633636474609375,0.50775906393914719153658437245770373295759245731279909404632772755040921670373447 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,near_one,4099,10322096095657499359,26.067892,24.219203,24.021836,20.000000,4.021836,yes,Both,yes,"[0.55072017619471925,1.5285555493425008e-17,-8.4851878264929949e-34,4.7102254466208054e-50]",0.503395974636077880859375,0.5033959450820623349182906770633407385222001692931760800454776223514541494398828 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,moderate,4099,10322096095657499356,25.911836,24.243607,24.056379,20.000000,4.056379,yes,Both,yes,"[1.6967153744323316,4.7093311873256703e-17,-2.6142039573771427e-33,1.4511747122731526e-49]",1.03822672367095947265625,1.0382266641595175302821692627692631092810194067716353711556189103095518619306749 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,near_one,4099,10322096095657499359,25.920195,24.158254,24.013805,20.000000,4.013805,yes,Both,yes,"[1.3550416411741315,3.7609960733934508e-17,-2.0877722181031071e-33,1.1589463933554018e-49] ; [0.85964036308882719,2.3859813099958637e-17,-1.3244856933413505e-33,7.3523725626709088e-50]",1.005465030670166015625,1.0054649713105136693080409087559014886644835427733168442408504661900474402910144 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,moderate,4099,10322096095657499356,25.938612,24.172853,24.023930,20.000000,4.023930,yes,Both,yes,"[-1.5221127970798687,-4.2247116834866724e-17,2.3451860917049052e-33,-1.3018397980207348e-49] ; [-0.70678002618891433,-1.9617086460502596e-17,1.0889670532256199e-33,-6.0449814777464578e-50]",-2.005512237548828125,-2.005512355120225239725146453473468772246503385569443728906464376660394150359798 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,extreme_finite,8,10322096095657499293,32.824184,25.098912,25.098912,20.000000,5.098912,yes,Both,yes,"huge positive [3.1901471898837981e+37,8.8544371553805848e+20,-49152,2.7284841053187847e-12] ; tiny negative [-1.4693679385278594e-38,-4.0783152924990778e-55,2.2639197697066781e-71,-1.256727927116218e-87]",1.57079637050628662109375,1.5707963267948966192313216916397514420985846996875529104874722961539082031435651 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,moderate,4099,10322096095657499356,25.904535,24.175867,24.017308,20.000000,4.017308,yes,Both,yes,"[-0.84210224938382328,-2.3373032658863904e-17,1.2974639506593224e-33,-7.2023717582154888e-50]",-1.00116932392120361328125,-1.0011693828839335652379006580708530490028888139345574452409663917082896115428421 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,boundary,4105,10322096095657499355,25.358925,24.717543,24.717543,20.000000,4.717543,yes,Both,yes,"[-0.99999928983607478,-2.7755555904620388e-17,1.5407428613290135e-33,-8.5528409983715774e-50]",-1.5696003437042236328125,-1.5696002868101387248982831177317988458122594291620956459638041678924528508701691 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,moderate,4099,10322096095657499356,25.924528,24.156658,24.022047,20.000000,4.022047,yes,Both,-,"[-0.43222210483323253,-1.1996573313445073e-17,6.6594359545952125e-34,-3.6967295639041067e-50]",2.0177516937255859375,2.0177518121690504519787760397825428925725024155764716881166634386351140067679032 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,boundary,4105,10322096095657499355,25.983148,24.584962,24.584962,20.000000,4.584962,yes,Both,-,"[0.9999995073211686,2.7755561941044354e-17,-1.5407431964178572e-33,8.5528428584883254e-50]",0.0009765625,0.00097656253880511143898187133876924251895712227894022748398387476387013216099532872 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,moderate,4099,10322096095657499356,25.945177,24.173984,24.007691,20.000000,4.007691,yes,Both,-,"[0.69706560262123496,1.9347457042607623e-17,-1.0739996138324561e-33,5.9618954985765975e-50]",2.007852077484130859375,2.0078521965251381745368245393757138670217404209691449932482836198723071521808851 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,boundary,4099,10322096095657499289,25.985101,24.189213,24.012647,20.000000,4.012647,yes,Both,-,"[-55.445402102948194,-1.538919050607329e-15,8.5427168150927155e-32,-4.7421604504842094e-48]",8.32470122137760864279645685032325255932328378349893682752735912799835205078125e-25,8.3247007295174246704446931992286856723729842657502269685404369668574123561739996e-25 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,moderate,4099,10322096095657499356,25.945548,24.176633,24.015565,20.000000,4.015565,yes,Both,-,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",16.047374725341796875,16.047373779108025107147981190408654763758177217950870805754027309567667903729689 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,boundary,4099,10322096095657499289,25.953110,24.184447,24.013981,20.000000,4.013981,yes,Both,-,"[12.008718688899336,3.3330889961656162e-16,-1.8502360733339086e-32,1.0270873448036725e-48]",4120.82763671875,4120.8278799704215331782631104353597855518360018117915418683951931281930912686669 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,moderate,4099,10322096095657499356,26.012367,23.778343,23.013322,20.000000,3.013322,yes,Both,yes,"[0.69706560262123496,1.9347457042607623e-17,-1.0739996138324561e-33,5.9618954985765975e-50]",1.007852077484130859375,1.0078521965251381745368245393757138670217404209691449932482836198723071521808851 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,cancellation,4098,10322096095657499288,42.799740,23.514463,23.291656,20.000000,3.291656,yes,Both,yes,"[0.0054612625390291214,0,0,0]",0.005476201884448528289794921875,0.0054762024177739916479654641857302427102624314390951127462041563273500046648971111 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,near_one,4099,10322096095657499359,25.916133,24.154099,24.017833,20.000000,4.017833,yes,Both,-,"[0.60298066792523497,1.6736075523361287e-17,9.2903881939506089e-34,5.1572014403148452e-50]",-0.505870163440704345703125,-0.5058701336589060195170170247744151956093362852705136778543315680321875195340302 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,wide_exponent,4096,10322096095657499357,25.934129,24.148103,24.055764,20.000000,4.055764,yes,Both,-,"[3.2617843787809539e-29,9.0532702967131949e-46,5.0255745657830058e-62,2.7897542974514332e-78]",-65.59268951416015625,-65.59269327555488150776766062278388871045172786432349789542906836393403051939105 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,extreme_finite,4096,10322096095657499295,25.928931,24.171772,24.028998,20.000000,4.028998,yes,Both,-,"[1.925072119386236e+28,534314847751.63684,2.9660432318647614e-05,1.6464847440249349e-21]",65.12734222412109375,65.127346028765523545207426082299833753247218536882252197810633399468572469932133 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,near_one,4099,10322096095657499359,26.000930,24.185085,24.016593,20.000000,4.016593,yes,Both,-,"[1.0447451831795096,2.8997503930802959e-17,1.6096848260317964e-33,8.9355457812511994e-50]",0.06315113604068756103515625,0.063151139761744771149852463189190938814143421682274297701996017779757132852336139 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,wide_exponent,4096,10322096095657499357,25.973207,24.199454,24.028872,20.000000,4.028872,yes,Both,-,"[279.54938708294071,7.7590541514832776e-15,4.307140284145071e-31,2.3909431568741984e-47]",8.1269588470458984375,8.1269593218526276965603717987343564084569415244724976083039632724987237766261338 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,extreme_finite,4096,10322096095657499295,26.022657,24.191270,24.003063,20.000000,4.003063,yes,Both,-,"[5.0098439803322917e-20,1.3905110341861625e-36,7.7188868307440791e-53,4.2848429419839901e-69]",-64.113800048828125,-64.113796235451863124774831376509181438042251966024731816806674549792684463109039 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,near_one,4099,10322096095657499359,25.962693,24.152799,24.013122,20.000000,4.013122,yes,Both,-,"[1.1548157158417363,3.2052574923161943e-17,1.7792753339108649e-33,9.8769622142772787e-50]",0.062512673437595367431640625,0.062512669745286719885701932573165067686690137111581665627621599315275165176273273 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,wide_exponent,4096,10322096095657499357,25.952915,24.154037,24.048450,20.000000,4.048450,yes,Both,-,"[23432401020772320,0.65037977838778627,3.6103330235836354e-17,2.0041374246735552e-33]",16.3698177337646484375,16.369816790271109973117205087238363001448077217226902449637697819144005794863329 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,extreme_finite,4096,10322096095657499295,25.880534,24.163613,24.027658,20.000000,4.027658,yes,Both,-,"[4.8264741762657366e-33,1.3396156895622393e-49,7.4363609135055201e-66,4.1280095527981953e-82]",-32.316371917724609375,-32.316370028094117653165372508074257172256480666024940344680625927328493584980905 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,moderate,4099,10322096095657499356,25.977474,24.138654,24.035083,20.000000,4.035083,yes,Both,yes,"[6.41522527712225,1.7805827027046056e-16,-9.8842195689597157e-33,5.4868440729548083e-49]",2.00353527069091796875,2.0035353872419348516649268305141943266470640149817520365666861820328868458962913 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,cancellation,4098,10322096095657499288,46.683655,24.504409,24.016252,20.000000,4.016252,yes,Both,yes,"[-1.1965551038883859e-07,0,0,0]",-1.196555245996933081187307834625244140625e-07,-1.1965551754755974717708527518014233670876945163456733519223050444765622173963702e-07 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,near_one,4099,10322096095657499359,25.935116,24.183020,24.022132,20.000000,4.022132,yes,Both,yes,"[1.0032222542802387,2.7845011137956863e-17,1.545708624315182e-33,8.5804065203819558e-50] ; [1.1098483278340112,3.0804479185076206e-17,1.7099921026428991e-33,9.4923630214066531e-50]",1.00357687473297119140625,1.0035768158257674189368635854208332740856335659539134346018913304416269618692691 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,moderate,4099,10322096095657499356,25.910732,24.173665,24.033763,20.000000,4.033763,yes,Both,yes,"[1.5010856767109688,4.1663497005488793e-17,2.312788683094746e-33,1.2838556235321408e-49] ; [6.8472618406345225,1.900496937777419e-16,1.054987729275047e-32,5.8563583386908427e-49]",16.1396617889404296875,16.139662728687068635103760006664480606823689561120066764019143935355322552829973 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,moderate,4099,10322096095657499356,24.296761,22.240676,21.817420,20.000000,1.817420,yes,Both,yes,"[-2.0174902967783854,-5.5996604486030095e-17,3.108435980060947e-33,-1.7255285978184637e-49]",-136.0443267822265625,-136.04428997082654660356838684633834963763840941785070423709212066151322168144796 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,wide_exponent,4096,10322096095657499357,24.307980,22.194400,21.763685,20.000000,1.763685,yes,Both,yes,"[8.3253759191734602,2.3107560085315504e-16,-1.282727262481326e-32,7.1205667056058241e-49]",2772213.75,2772214.528582891558413966128826065404980229940407596127199381800655092889207728 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[30287485871.102478,8.4064660430267718e-07,4.666526078348927e-23,2.590442348598358e-39] ; [2.0009290447377264e-12,5.5536937402726095e-29,3.0829193310836276e-45,1.7113640122155147e-61]",1.12052207790203084414315526373684406280517578125e-12,1.12052207790203084414315526373684406280517578125e-12 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remainder,native,float,native float,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,near_one,4099,10322096095657499359,25.942025,24.196051,24.011707,20.000000,4.011707,yes,Both,yes,"[1.4459245913717083,4.0132469330314787e-17,-2.2277995742789206e-33,1.2366771908072897e-49]",2.0051238536834716796875,2.0051239722322748219797119221081131107158513029013343848994792963571293595758708 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,moderate,4099,10322096095657499356,25.936329,24.161474,24.011590,20.000000,4.011590,yes,Both,yes,"[-6.9355339383837169,-1.9249973666156986e-16,1.0685881993797711e-32,-5.9318561139707965e-49]",-514.08355712890625,-514.08358752550603806804367819424003815790834626890985544825401905207447930345975 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,near_one,4099,10322096095657499359,25.882807,24.206821,24.037830,20.000000,4.037830,yes,Both,-,"[1.3363709947474058,3.7091746195244852e-17,-2.0590055324756691e-33,1.1429776749925342e-49]",2.03400325775146484375,2.0340033758498468053419313401516481710439729679668859465095831820284475316728875 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,moderate,4099,10322096095657499356,25.970199,24.157896,24.042107,20.000000,4.042107,yes,Both,-,"[-2.0865014257806518,-5.791204809537242e-17,3.2147644599340952e-33,-1.7845527610827445e-49]",4.09039974212646484375,4.0903995053326148905358860858142744104816455202766888280678248016451416423900309 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,near_one,4099,10322096095657499359,26.024295,24.249528,24.044767,20.000000,4.044767,yes,Both,yes,"[0.55269132694010847,1.5340265916988462e-17,-8.5155582124565656e-34,4.7270843975025598e-50]",0.502534568309783935546875,0.50253459734799192816357753205665166662298333512757568712234730160451307986898536 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,moderate,4099,10322096095657499356,26.373493,24.515597,24.134985,20.000000,4.134985,yes,Both,yes,"[0.12581300317204658,3.4920123229710991e-18,-1.9384562416186464e-34,1.0760593758366834e-50]",0.125153362751007080078125,0.12515335595759218985762670776642522877909887236869724246011118582427483165407333 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,near_one,4099,10322096095657499359,25.862572,24.142028,24.004617,20.000000,4.004617,yes,Both,yes,"[1.1824685676334994,3.2820095742056004e-17,-1.8218812981616319e-33,1.0113472826765068e-49]",1.004701137542724609375,1.0047011972362246447295975654012007117273041453861923879146230140240858536400124 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,moderate,4099,10322096095657499356,25.903170,24.184962,24.015426,20.000000,4.015426,yes,Both,yes,"[-3.7892785359163863,-1.0517360693230688e-16,5.8383079999561539e-33,-3.2409119832022847e-49]",-2.0422961711883544921875,-2.0422960507526673863576248163047145653164418594230029359825384783793900330048419 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,moderate,4099,10322096095657499286,26.003928,23.806249,23.434312,20.000000,3.434312,yes,Both,-,"[4.6289619994850053,1.2847950479857887e-16,-7.1320452209910275e-33,3.9590804085060258e-49]",2.21360301971435546875,2.2136028244293943935065449407209143524231855323671898139914664237507877804709825 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,boundary,4101,10322096095657499355,25.752912,23.793907,23.793907,20.000000,3.793907,yes,Both,-,"[1.9999994915125949,5.5511137117897206e-17,-3.0814871275706815e-33,1.7105689795575038e-49]",1.3169577121734619140625,1.3169576216227113023399862811927493515571819731899743868099047486919155844722929 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,moderate,4099,10322096095657499356,25.928263,24.165641,24.032275,20.000000,4.032275,yes,Both,yes,"[0.12588044826400613,3.4938843003208855e-18,-1.9394953977963011e-34,1.0766362233939903e-50]",0.12655173242092132568359375,0.1265517397971169012907382368115123955615277371105684603589329831006293410227905 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,boundary,4105,10322096095657499355,26.088438,25.637514,25.637514,20.000000,5.637514,yes,Both,yes,"[0.99899949151259504,2.7727805926652667e-17,-1.5392024281053832e-33,8.5442898762077182e-50]",3.7999393939971923828125,3.7999393211997930734222062320257072616372641916906079170097936373745998626952477 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,near_one,4099,10322096095657499359,26.103955,24.216306,23.832036,20.000000,3.832036,yes,Both,yes,"[0.82702049455505422,2.2954429872297628e-17,-1.2742268280684159e-33,7.07337981558318e-50]",0.75783145427703857421875,0.75783140352952517711597272820328209450854836624944561227614555251248356400115264 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,moderate,4099,10322096095657499356,36.995843,24.543849,23.839199,20.000000,3.839199,yes,Both,yes,"[0.81787985777320493,2.2700726236924011e-17,-1.2601434471972712e-33,6.9952013470446281e-50]",0.75258743762969970703125,0.75258738748294499172523085430305904644591529960072519201515925937266508496163585 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,near_one,4099,10322096095657499359,25.972588,24.227042,24.021810,20.000000,4.021810,yes,Both,-,"[0.81039037874816289,2.249285143552279e-17,-1.2486040776595203e-33,6.9311449782922823e-50]",0.2517682611942291259765625,0.25176824641282984037817837806060692012476374094013638058349086181666369634690185 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,moderate,4099,10322096095657499356,31.823870,24.247776,24.020492,20.000000,4.020492,yes,Both,-,"[2.7148354940083514,7.5351821837942075e-17,-4.1828663775967986e-33,2.3219572806691949e-49]",0.000123356920084916055202484130859375,0.00012335692733386574559616820102605246743514675650446693253988640699356263123476232 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,lgamma,native,float,native float,bl::lgamma,moderate,4099,10322096095657499287,25.009417,22.713394,21.494844,20.000000,1.494844,yes,Both,-,"[1.4517946932072958,4.0295397385683879e-17,-2.2368438982003291e-33,1.2416977991371476e-49]",-0.1214393675327301025390625,-0.12143932643985334787613032455513282403867052851105351797395249405986985300137986 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,tgamma,native,float,native float,bl::tgamma,moderate,4099,10322096095657499284,24.535163,22.100955,21.465845,20.000000,1.465845,yes,Both,-,"[17.542208048618924,4.8689408195853669e-16,-2.7028051017204773e-32,1.5003582275022061e-48]",96518560284672,96518593607958.354720117264241334993885666808714814451519813490315313195821331912 diff --git a/validation/metrics/data/native/strict/909f5fff11e64c6f859d03680f2b8789/f64_accuracy.csv b/validation/metrics/data/native/strict/909f5fff11e64c6f859d03680f2b8789/f64_accuracy.csv new file mode 100644 index 0000000..dd9b2a8 --- /dev/null +++ b/validation/metrics/data/native/strict/909f5fff11e64c6f859d03680f2b8789/f64_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,near_one,4099,10322096095657499359,68.804804,53.029455,53.001693,48.000000,5.001693,yes,Both,yes,"[1.4297151598371682,3.9682567227671501e-17,-2.2028249906198284e-33,1.222813511902914e-49] ; [0.57263374255596289,1.5893779141572608e-17,-8.8228197756404827e-34,4.8976488285171109e-50]",2.00234890239313134685517070465721189975738525390625,2.0023489023931311248105657796259038150310516357421875 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-15.0558510431143677266163649619556963443756103515625,-15.0558510431143677266163649619556963443756103515625 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,wide_exponent,4096,10322096095657499357,82.842054,53.932557,53.150426,48.000000,5.150426,yes,Both,yes,"[-2.5801269239800948e-52,-7.1612907936449556e-69,3.9753149625703952e-85,-2.2067431007912725e-101] ; [6.2882455610389305e-52,1.745338751590589e-68,-9.6885763389319921e-85,5.3782402636604011e-101]",3.7081186370588353126400687774493756982129860731379218490790094277487448813887287e-52,3.7081186370588356835606838461915142713865122279018731858354873035278451266926346e-52 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,extreme_finite,4096,10322096095657499295,83.051539,53.922063,53.033213,48.000000,5.033213,yes,Both,yes,"[4.044152691012953e+59,1.1224778581655917e+43,-6.2310038138368535e+26,34589019503.244186] ; [-3.2763861007278913e+51,-9.0937982164748556e+34,5.0480720806127841e+18,-280.22429269318661]",404415265824909244971463481926668921988920568307135488720896,404415265824909201094180361492905708699283935084133453135872 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [2.2250738585072014e-308,0,0,0]",2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308,2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.7781742597549925477551369112916290760040283203125,-0.7781742597549925477551369112916290760040283203125 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",-9.65894031423886190168559551239013671875e-14,-9.65894031423886190168559551239013671875e-14 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [2.2250738585072014e-308,0,0,0]",-2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308,-2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,near_one,4099,10322096095657499359,54.941335,53.192655,53.017782,48.000000,5.017782,yes,Both,yes,"[0.61590653178072707,1.7094840314999723e-17,-9.489542660001528e-34,5.267754377148175e-50] ; [0.81645463695581544,2.2661168412757988e-17,-1.2579475468376116e-33,6.9830116513492445e-50]",0.50285974380374887093836377971456386148929595947265625,0.50285974380374892608309676348753773569247609448642907343737535469374577701273665 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,moderate,4099,10322096095657499356,54.943506,53.177920,53.014990,48.000000,5.014990,yes,Both,yes,"[-1.8309845685969375,-5.0820030644741984e-17,2.8210784066974295e-33,-1.5660131006941688e-49] ; [4.4139715148669616,1.2251232014612206e-16,-6.8007999313236564e-33,3.7752023348123534e-49]",-8.0819137299478551739184695179574191570281982421875,-8.0819137299478542859205922880040108996859918106071002798056202021115268507855944 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,wide_exponent,4096,10322096095657499357,54.949502,53.147252,53.012976,48.000000,5.012976,yes,Both,yes,"[-9580440436661.9609,-0.00026591063897079994,1.4761005693908477e-20,-8.1940041940001134e-37] ; [3.5476231799149722e+112,9.8466323425887909e+95,-5.465978970880409e+79,3.0342278527941741e+63]",-3.3987792566896694596919030454680074525269527091652711616914422309578532569280119e+125,-3.3987792566896690857302928923045025855537603060392874444605126408265807925080287e+125 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,extreme_finite,8,10322096095657499292,69.953445,54.906891,54.906891,48.000000,6.906891,yes,Both,yes,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,-2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [-2.4203699467808244e-121,-6.7178761075670899e-138,3.729170365600104e-154,-2.0701054013195242e-170]",-0.46875,-0.46875000000000001387778780781444442934375177282579434799116745646516135614945142 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,near_one,4099,10322096095657499359,54.949938,53.186535,53.032508,48.000000,5.032508,yes,Both,yes,"[0.79583533097289294,2.2088867706407193e-17,1.2261784757776169e-33,6.8066578805404505e-50] ; [0.78671878189697564,2.1835832639176979e-17,1.212132207893789e-33,6.7286854304670572e-50]",1.01158806588287486505350898369215428829193115234375,1.0115880658828749748599930078884108617347838241152708567193976201713984484334261 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,moderate,4099,10322096095657499356,55.299598,53.162157,53.017700,48.000000,5.017700,yes,Both,yes,"[5.6982279612785671,1.5815759705435825e-16,8.7795102884568185e-33,4.8736072335891048e-49] ; [5.6630083746783413,1.571800571553245e-16,8.725245923286967e-33,4.8434844597749865e-49]",1.0062192361850825772506823341245763003826141357421875,1.0062192361850826876012316258994293315599871850773075711644181221348221597609452 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,wide_exponent,4096,10322096095657499357,54.940111,53.173252,53.006391,48.000000,5.006391,yes,Both,yes,"[1.1797107595829603e-08,3.2743551192175876e-25,1.8176322220773076e-41,1.0089885716254063e-57] ; [2.9273558682385512e-68,8.1250447154750139e-85,4.5103058596146572e-101,2.5037227067229757e-117]",402995335272583736023300876476329416171344205099568646324224,402995335272583691479603215316671542832621087480350248383875.97791882737549902199 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,extreme_finite,8,10322096095657499292,54.565310,53.447459,53.447459,48.000000,5.447459,yes,Both,yes,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [2.4203699467808244e-121,6.7178761075670899e-138,3.729170365600104e-154,2.0701054013195242e-170]",8.0016173194558218715832353057948522675740813308632367068153019530691147107160091e+240,8.0016173194558225230457526744094465773333433188328184012700026520990852868662071e+240 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,moderate,4099,10322096095657499356,54.554330,52.138614,51.686686,48.000000,3.686686,yes,Both,yes,"[4.0140439461245272,1.1141210027111679e-16,-6.1846139471420251e-33,3.4331504012674736e-49] ; [4.6948493690620925,1.303082466669906e-16,-7.2335607874113641e-33,4.0154328681048868e-49] ; [-2.3905498163718608,-6.6351086191236997e-17,3.6832251799199798e-33,-2.0446006998131482e-49]",16.454781871478392218932640389539301395416259765625,16.454781871478387679000955424923571552661145956803454037161577039327653437794652 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,cancellation,4098,10322096095657499291,84.914658,inf,48.446122,48.000000,0.446122,yes,Both,yes,"[1.0000000254699517,0,0,0] ; [1.0000005920751864,0,0,0] ; native product cancellation",-1.8906731719479861355648296906882387020083845056983573584830082836560904979705811e-17,-1.8906731719479812051841720593644548787048514882844219009427888522623106837272644e-17 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,wide_exponent,4096,10322096095657499357,67.585226,52.547530,51.967526,48.000000,3.967526,yes,Both,yes,"[-9.1922411412689644e+18,-255.13594407358576,1.4162889975998558e-14,-7.8619832732932151e-31] ; [5.4898291290292038e+49,1.5237336750765229e+33,-84584210473333136,4.6953668993617379] ; [-6.8892614570882749e+59,-1.9121541730805144e+43,1.0614587947935319e+27,-58922799683.532417]",-504638332472916393329054620441347832996909059386484212491501063634944,-504638332472916278725994882779552093420758202664753051535811771629568 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fabs,native,double,native double,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,moderate,4099,10322096095657499356,54.987841,53.178902,53.024599,48.000000,5.024599,yes,Both,yes,"[-4.0291701907573039,-1.1183193789780232e-16,6.2079196171295382e-33,-3.4460876469796998e-49]",16.234212426087250236150794080458581447601318359375,16.234212426087248464261717100553537863564519292427420360394943465998096598923439 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,wide_exponent,4096,10322096095657499357,54.966048,53.184279,53.034276,48.000000,5.034276,yes,Both,yes,"[2.9507000691330746e-25,8.1898378887864514e-42,-4.5462732960391003e-58,2.5236886447505548e-74]",8.7066308979819320541420161769186049656218085566280656265540977462941222974600937e-50,8.7066308979819311102069574980521020700209525169860268542733130882306736168377202e-50 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,near_one,4099,10322096095657499359,55.022120,53.212652,53.036371,48.000000,5.036371,yes,Both,yes,"[0.9803714880397002,2.7210774967692536e-17,1.5105014443513052e-33,8.384967411241868e-50]",1.02002150429685389809719708864577114582061767578125,1.0200215042968537876713460424605364405111022006296562878115184748990877637517355 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,wide_exponent,4096,10322096095657499357,54.902665,53.142478,53.019012,48.000000,5.019012,yes,Both,yes,"[5.654455339035485e-101,1.5694266272779603e-117,8.7120678853189764e-134,4.8361691791892627e-150]",1.7685169305282301591156520034137992060834685455134402926455624168717720163565455e+100,1.7685169305282303528900122951557431771119667320589594598759928180992244301081954e+100 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166,-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143677266163649619556963443756103515625,-7.0558510431143677266163649619556963443756103515625 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,copysign,native,double,native double,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,floor,native,double,native double,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,ceil,native,double,native double,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,trunc,native,double,native double,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round,native,double,native double,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,roundeven,native,double,native double,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_decimals,native,double,native double,bl::round_decimals,moderate,4099,10322096095657499356,55.241937,53.207435,53.013030,48.000000,5.013030,yes,Both,yes,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",4.0039999999999995594635038287378847599029541015625,4.004 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_significant,native,double,native double,bl::round_significant,wide_exponent,4096,10322096095657499357,62.492824,53.239040,53.008690,48.000000,5.008690,yes,Both,yes,"[1.4846549805182609e+20,4120.7453574894662,-2.2874731872510136e-13,1.2698027003493837e-29]",148465500000000016384,148465500000000000000 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,lround,native,double,native double,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,llround,native,double,native double,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remquo,native,double,native double,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.9441489568856322733836350380443036556243896484375 ; 1,-0.9441489568856322733836350380443036556243896484375 ; 1 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ldexp,native,double,native double,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbn,native,double,native double,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbln,native,double,native double,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.7247924004236494521791200895677320659160614013671875 ; -815,0.7247924004236494521791200895677320659160614013671875 ; -815 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,near_one,4099,10322096095657499359,54.920710,53.127507,53.001106,48.000000,5.001106,yes,Both,yes,"[1.0010388911274162,2.7784410636872319e-17,1.5423446207347879e-33,8.5617325492325808e-50]",1.0005193107218952608405970750027336180210113525390625,1.0005193107218951498457515954360620198623563387038363607072361122298411008899428 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,wide_exponent,4096,10322096095657499357,55.009451,53.211448,53.027507,48.000000,5.027507,yes,Both,yes,"[6.0219100959119555e-185,1.6714158101760344e-201,9.2782215808997173e-218,5.1504476133444428e-234]",7.7600967106808367478172926221258513837894764415588410983624981464748121495074265e-93,7.7600967106808375930900190108944118736382926995509918646504739659308953242516058e-93 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,extreme_finite,4096,10322096095657499295,54.924178,53.221411,53.017887,48.000000,5.017887,yes,Both,yes,"[2.3783259304591718e+282,6.6011805201470536e+265,3.664391301587163e+249,2.0341457971291071e+233]",1.542182197556168240060235866024934642345121301250108457830389998905645354877265e+141,1.5421821975561680709533351179752169384434445730363281277866248379626469712289668e+141 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,subnormal,4100,10322096095657499290,56.222608,53.192031,53.028655,48.000000,5.028655,yes,Both,yes,"[1.3924978593053044e-312,0,0,0]",1.1800414650787929320982458320284728300669497402903960639237252491051024255975799e-156,1.1800414650787930605326941577347439698813910767655579114793014150350187021874733e-156 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,moderate,4099,10322096095657499356,55.046807,53.154188,52.692972,48.000000,4.692972,yes,Both,yes,"[-1.026902362492109,-2.8502266172017703e-17,1.5821936079084388e-33,-8.7829388645734799e-50]",-1.008888219657574580878645065240561962127685546875,-1.0088882196575747194514136639017574465308922854914415696696230333755816053111867 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,wide_exponent,4096,10322096095657499357,54.974662,53.039682,52.723772,48.000000,4.723772,yes,Both,yes,"[2.002422411599337e+53,5.5578386659575401e+36,-3.0852202270490126e+20,17126.412660545335]",585039558198610304,585039558198610225.34100378147917539852092834729511392201546883422518707173366654 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,moderate,4099,10322096095657499356,54.875942,52.699142,52.296238,48.000000,4.296238,yes,Both,yes,"[-6.832833876256192,-1.8964923732145955e-16,1.0527647493844247e-32,-5.8440183214016046e-49] ; [4.4299110555054249,1.2295473127159131e-16,-6.8253586822159713e-33,3.7888351801606942e-49]",8.1432015043349768035341185168363153934478759765625,8.1432015043349753310215069499059937406110597175203571183027746754807131183654083 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,wide_exponent,4096,10322096095657499357,83.835524,53.981284,52.722096,48.000000,4.722096,yes,Both,yes,"[3.0900587929049188e-234,8.5766360483211479e-251,-4.7609894073381275e-267,2.6428800300116337e-283] ; [2.970069684721122e-242,8.2435993717964229e-259,-4.5761169141769325e-275,2.540255180747926e-291]",3.0900587929049193702454679907420486743297512979591235842153811313882487753757378e-234,3.0900587929049189543018606534397317978098396795986767283237714870956245237140656e-234 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,moderate,4099,10322096095657499356,55.119448,53.286087,53.039550,48.000000,5.039550,yes,Both,yes,"[-6.2195443657144018,-1.7262703393734485e-16,9.5827253874994272e-33,-5.3194811819309447e-49]",0.0635979907313855841177741012870683334767818450927734375,0.063597990731385577247913600517210215030362027688523651204123610577863803139799732 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,argument_reduction,4114,10322096095657499282,55.232801,53.244266,53.035224,48.000000,5.035224,yes,Both,yes,"near 2^32 * pi/2 [-6746518852.260994,0,0,0]",1.552177995945118398166302775553759829563205130398273468017578125e-05,1.5521779959451182299964044512799051330689624190070061035685086340903998302805766e-05 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,moderate,4099,10322096095657499356,55.064454,53.228976,53.034133,48.000000,5.034133,yes,Both,-,"[4.1844906090946523,1.1614294551361571e-16,-6.4472286128500595e-33,3.5789308255041227e-49]",-0.50371892599878986818140447212499566376209259033203125,-0.50371892599878992279786139952002581707904055298349253880993038665240233830314629 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,argument_reduction,4114,10322096095657499282,57.684459,53.229042,53.057722,48.000000,5.057722,yes,Both,-,"near 2^96 * pi/2 [-1.2445130665611575e+29,0,0,0]",-0.502253255921150554286214173771440982818603515625,-0.50225325592115050071185754648530613739144383428589081390350064471629529975977222 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,moderate,4099,10322096095657499356,54.965439,53.108816,52.837672,48.000000,4.837672,yes,Both,yes,"[-2.232968427699566,-6.197732404232731e-17,3.440432607822303e-33,-1.9098237479377461e-49]",1.28272349966451404412737247184850275516510009765625,1.2827234996645138847564885315917437713989560234224938491038236128612612496872465 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,argument_reduction,4114,10322096095657499282,54.836136,53.156556,53.028205,45.000000,8.028205,yes,Both,yes,"near 2^79 * pi/2 [-9.4948811840908286e+23,0,0,0]",-0.50984786877362353596510047282208688557147979736328125,-0.50984786877362348045650552914101529913692633601847796081734940649152066052837848 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,near_one,4099,10322096095657499359,55.076264,53.013973,52.693509,48.000000,4.693509,yes,Both,yes,"[0.69084897511107168,1.9174910967675087e-17,-1.0644213825725161e-33,5.9087256341767488e-50]",0.6045578974549419282169537837035022675991058349609375,0.60455789745494184521062137483289791333043169413541191538511529635270202509108926 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,moderate,4099,10322096095657499356,54.861463,53.032964,52.752464,48.000000,4.752464,yes,Both,yes,"[2.7271853311214098,7.5694598675774267e-17,-4.2018943144802738e-33,2.3325199074887691e-49]",1.219341175070450589146275888197124004364013671875,1.2193411750704504284332317205702958914241077638601847892988778474321517604825199 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,near_one,4099,10322096095657499359,54.993803,53.170510,53.040656,48.000000,5.040656,yes,Both,yes,"[1.3489527984700374,3.7440961399849353e-17,-2.0783908705107242e-33,1.1537386993058641e-49] ; [0.85379739020999446,2.3697638024400127e-17,-1.3154831681960814e-33,7.302398509190685e-50]",1.0065123671465141530489972865325398743152618408203125,1.0065123671465142616892414740655812810119461135218360142280212527802839300485563 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,moderate,4099,10322096095657499356,54.890626,53.179569,53.060948,48.000000,5.060948,yes,Both,yes,"[-4.7266626831272092,-1.311912435111087e-16,7.2825769587619272e-33,-4.0426423091110703e-49] ; [2.8962761555613667,8.0387811839426525e-17,-4.4624199801683043e-33,2.4771407037650929e-49]",-1.0210524446594291259060582888196222484111785888671875,-1.0210524446594292345764275054094005619467300994098247323364498554603476784958796 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,extreme_finite,8,10322096095657499293,62.132485,54.509980,54.509980,48.000000,6.509980,yes,Both,yes,"huge positive [1.6853373139334212e+307,4.6777507254719996e+290,-2.5966732794380218e+274,1.4414432311305024e+258] ; tiny negative [-2.7813423231340017e-308,-0,0,-0]",1.5707963267948965579989817342720925807952880859375,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,moderate,4099,10322096095657499356,54.898778,52.921476,52.422752,48.000000,4.422752,yes,Both,yes,"[-0.50335035028515207,-1.3970778708492839e-17,7.7553400970558289e-34,-4.3050785697750387e-50]",-0.527471766697775290566596595454029738903045654296875,-0.5274717666977753779398223907170077140407553909392966159005201438307403789636427 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,boundary,4105,10322096095657499355,54.919616,53.086611,53.066141,48.000000,5.066141,yes,Both,yes,"[-0.9999991973384238,-2.7755553337294841e-17,1.5407427188138168e-33,-8.552840207253314e-50]",-1.5695293132325520701897403341718018054962158203125,-1.5695293132325522366341318908043706690745267178940372928026218495677083294449175 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,moderate,4099,10322096095657499356,54.885654,52.861237,52.325679,48.000000,4.325679,yes,Both,-,"[-0.50414043989940849,-1.3992708100524456e-17,7.7675133550305953e-34,-4.3118360854191824e-50]",2.0991827056155738517873032833449542522430419921875,2.0991827056155742237087238848295169418258006344663652219436700791519481199702843 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,boundary,4105,10322096095657499355,54.933501,53.208019,53.015630,48.000000,5.015630,yes,Both,-,"[0.99999951942877319,2.7755562277097889e-17,-1.5407432150725758e-33,8.5528429620428158e-50]",0.00098037876895050468130377030462341281236149370670318603515625,0.00098037876895050478897482934485258576844002644995119255737105648210814670714088092 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,moderate,4099,10322096095657499356,54.974199,53.158758,53.019599,48.000000,5.019599,yes,Both,-,"[-2.7628513559780572,-7.6684529725591843e-17,4.2568465266952151e-33,-2.3630245131163269e-49]",0.063111558041546500508189865286112762987613677978515625,0.063111558041546493595944022576030893684783578049870680283049711049275225101317397 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,boundary,4099,10322096095657499289,54.951607,53.169177,53.022036,48.000000,5.022036,yes,Both,-,"[326.47996564801747,9.061639373531479e-15,-5.0302203366722636e-31,2.7923332183556269e-47]",6.1439480220514836164654240272397757603181465874882434277975712709632833055792003e+141,6.1439480220514842882409559528883970846034473863532678303012402569115463152702114e+141 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,moderate,4099,10322096095657499356,54.935842,53.180629,53.025408,48.000000,5.025408,yes,Both,-,"[5.0109819009809229,1.3908268706122392e-16,-7.7206400751053074e-33,4.2858161881128051e-49]",32.244515813988982699811458587646484375,32.244515813988979182444910558923716242085594124376112958709781738645907303764812 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,boundary,4099,10322096095657499289,54.972606,53.164620,53.020447,48.000000,5.020447,yes,Both,-,"[-250.99202946082733,-6.9664282526201528e-15,3.8671445227290451e-31,-2.1466964443434239e-47]",2.7788842653856641449312255150961427650361335071502829578141633319949134903163359e-76,2.7788842653856638407547596404961219062300898310358581460949384897692395968312002e-76 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,moderate,4099,10322096095657499356,55.079607,52.742105,52.069820,48.000000,4.069820,yes,Both,yes,"[0.22945102518139038,6.3685452795056546e-18,-3.5352528013375154e-34,1.962459528957747e-50]",0.257909259836876014748696661627036519348621368408203125,0.25790925983687596018681194203452833842202602062990407635094999633494016409955893 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,cancellation,4098,10322096095657499288,76.448711,52.361124,52.050168,48.000000,4.050168,yes,Both,yes,"[-2.0909442431168455e-28,0,0,0]",-2.0909442431168459376494291507228931385860662207337082237136920152161951018832814e-28,-2.0909442431168454892339205665628280516014256752064451016842981803628056331115582e-28 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,near_one,4099,10322096095657499359,54.918227,53.166316,53.041728,48.000000,5.041728,yes,Both,-,"[1.1335639126739003,3.1462718893368611e-17,1.7465317466363379e-33,9.695198791772263e-50]",0.125366574619705295479121787138865329325199127197265625,0.12536657461970530900080502001741556309701459949497062977512985254006361141481408 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,wide_exponent,4096,10322096095657499357,54.929145,53.171869,53.045970,48.000000,5.045970,yes,Both,-,"[4.6261311118266506e+112,1.2840093188211806e+96,7.1276835479426902e+79,3.9566591935839502e+63]",259.421251321115732935140840709209442138671875,259.42125132111570503685832403601672523060244723042283551553508070299190699694996 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,extreme_finite,4096,10322096095657499295,54.890700,53.179074,53.016960,48.000000,5.016960,yes,Both,-,"[2.0331470333148491e-224,5.6431166220861893e-241,3.1325590022425128e-257,1.7389195651432225e-273]",-515.069475975312570881214924156665802001953125,-515.06947597531262739711907680169329239742647250082611831496163075456316319684835 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,near_one,4099,10322096095657499359,54.995861,53.187566,53.019233,48.000000,5.019233,yes,Both,-,"[1.4195991778008823,3.9401792323337023e-17,2.1872388524433752e-33,1.2141614671686702e-49]",0.505483643936027959853163338266313076019287109375,0.50548364393602801522994455993418454780195288621099385724841685838532575193733228 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,wide_exponent,4096,10322096095657499357,54.961217,53.191544,53.045986,48.000000,5.045986,yes,Both,-,"[1.6478667181302047e-79,4.5737489299541154e-96,2.5389406854448656e-112,1.4093952035692334e-128]",-261.71171993614638040526187978684902191162109375,-261.71171993614635226097107489196965564142826014659637604512890701616180385411886 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,extreme_finite,4096,10322096095657499295,54.951425,53.191636,53.032071,48.000000,5.032071,yes,Both,-,"[3.0682846229157043e-158,8.5162005861608278e-175,4.7274409865410026e-191,2.624256915407243e-207]",-523.24720667460906042833812534809112548828125,-523.24720667460911724330320979055400330344628738302026449859537432674608012400159 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,near_one,4099,10322096095657499359,54.958112,53.143081,53.018669,48.000000,5.018669,yes,Both,-,"[0.74875470021249213,2.0782117699305384e-17,1.1536392785119411e-33,6.4039844455795532e-50]",-0.1256604383656476919828293148384545929729938507080078125,-0.12566043836564767821108349467351605169970965007622302204561391695316098182502685 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,wide_exponent,4096,10322096095657499357,55.006875,53.165767,53.021068,48.000000,5.021068,yes,Both,-,"[4.6201923918188489e+258,1.2823609928988147e+242,7.1185335009872046e+225,3.9515798971807595e+209]",258.66466006061358484657830558717250823974609375,258.66466006061361314780285273352542290302251199814003016169435342215632974918998 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,extreme_finite,4096,10322096095657499295,54.953390,53.178424,53.029150,48.000000,5.029150,yes,Both,-,"[2.8445937992650119e+257,7.8953338291249174e+240,4.3827907020981923e+224,2.4329375747912342e+208]",257.45402025901483966663363389670848846435546875,257.45402025901486767802909135885153181987420064870956774702074158124472305183714 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,moderate,4099,10322096095657499356,54.959306,53.124311,53.027379,48.000000,5.027379,yes,Both,yes,"[6.4021109691987137,1.7769427510524221e-16,-9.864013778295833e-33,5.475627605941909e-49]",2.001765225637418321724680936313234269618988037109375,2.0017652256374185397874546144576830053673472448209221871064631219426441727909283 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,cancellation,4098,10322096095657499288,83.183549,53.987083,53.147787,48.000000,5.147787,yes,Both,yes,"[3.1953685246800882e-08,0,0,0]",3.1953684736281895160448819626086702783140935935080051422119140625e-08,3.1953684736281891958290169482972474912634475149295662224530800762968705228371108e-08 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,near_one,4099,10322096095657499359,54.959216,53.190567,53.032687,48.000000,5.032687,yes,Both,yes,"[1.0146951632466654,2.8163448330305746e-17,1.563385439457318e-33,8.6785325562461659e-50] ; [0.67203279182024089,1.86526569695489e-17,1.0354304619014043e-33,5.7477936960060001e-50]",1.009851987115524707405711524188518524169921875,1.0098519871155248170101935707300539046159555693972004409710861335008920239838475 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,moderate,4099,10322096095657499356,54.934515,53.163295,51.544293,48.000000,3.544293,yes,Both,yes,"[4.8746218874848095,1.3529793639568437e-16,7.5105442085379375e-33,4.1691895538919707e-49] ; upper endpoint [8,0,0,0]",318806.7246159983915276825428009033203125,318806.72461599848861202218910752969331394204069607599640906241960083392617731566 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,moderate,4099,10322096095657499356,53.278021,51.216249,50.843118,48.000000,2.843118,yes,Both,yes,"[-0.12598239680403012,-3.4967139407324243e-18,1.9410661637644512e-34,-1.0775081736660592e-50]",-5.036966535935927210927633319859086924452640232630074024200439453125e-07,-5.0369665359359247171059931113138371384365138382213074202619030423806648231460384e-07 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,wide_exponent,4096,10322096095657499357,53.261106,51.258453,50.915855,48.000000,2.915855,yes,Both,yes,"[3178858.3859193348,8.8231044301760176e-11,-4.8978068435268183e-27,2.7188289639250675e-43]",3280184465858375893424625758878219769323978752,3280184465858377437606968244219065735294846924.9874778095912486192020477914613844 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.1588709556304993e+103,8.7676281669016289e+86,4.8670113311231216e+70,2.7017340204622107e+54] ; [5.476364839089647e-60,1.5199965839012416e-76,8.4376760239937101e-93,4.6838510980827309e-109]",4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60,4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remainder,native,double,native double,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,near_one,4099,10322096095657499359,54.925027,52.983593,52.654993,48.000000,4.654993,yes,Both,yes,"[1.4755959292519478,4.095601439246665e-17,-2.2735155087697884e-33,1.262054632339298e-49]",2.0724994727921046688834394444711506366729736328125,2.072499472792104961138580290412029520398475094027248170955683086677283903718196 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,moderate,4099,10322096095657499356,54.834485,52.816036,52.372772,48.000000,4.372772,yes,Both,yes,"[-4.9457633001919792,-1.3727250725548088e-16,7.6201549101529364e-33,-4.2300357162311155e-49]",-70.285499863740909631815156899392604827880859375,-70.285499863740921684683962274930479722778438577605829741424016420435749772886443 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,near_one,4099,10322096095657499359,54.867700,52.806953,52.555697,48.000000,4.555697,yes,Both,-,"[1.4489040565134639,4.0215166100350915e-17,-2.2323901671867327e-33,1.2392254817787567e-49]",2.24663622332004297987850804929621517658233642578125,2.2466362233200426404943290683585496609798120974353391573364879492599058374097048 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,moderate,4099,10322096095657499356,54.757799,52.742892,52.224844,48.000000,4.224844,yes,Both,-,"[-2.7831989915427577,-7.7249290063107149e-17,4.2881970232004435e-33,-2.3804275346430945e-49]",8.116254244465199718661096994765102863311767578125,8.1162542444651981765659860122604536067229682150365564635338760616491926011030202 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,near_one,4099,10322096095657499359,54.957464,52.958304,52.587189,48.000000,4.587189,yes,Both,yes,"[0.63164064184364299,1.7531549596595613e-17,-9.7319650097491624e-34,5.4023258143349531e-50]",0.559180890600668334400324965827167034149169921875,0.55918089060066825175256349584410551988799504685528248603277429300680295289939666 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,moderate,4099,10322096095657499356,55.337079,53.366180,52.815171,48.000000,4.815171,yes,Both,yes,"[-0.90950053058162084,-2.5243710749012794e-17,1.401307445026578e-33,-7.7788189502357886e-50]",-0.7208924382452133183818432371481321752071380615234375,-0.72089243824521340935638969305309450551713412005667581668201295126021631664261271 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,near_one,4099,10322096095657499359,54.258376,52.080700,51.634176,48.000000,3.634176,yes,Both,yes,"[0.79188358526673819,2.1979184729646278e-17,-1.2200898474671472e-33,6.7728592038471104e-50]",0.72631784732193438447467315199901349842548370361328125,0.72631784732193459229635852840518155981992007046780729911536441213723551933788868 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,moderate,4099,10322096095657499356,54.673318,52.354089,50.978920,48.000000,2.978920,yes,Both,yes,"[0.26530457278232333,7.3636811310318998e-18,-4.0876641688347148e-34,2.2691094385877768e-50]",0.2622868991029132512693422540905885398387908935546875,0.26228689910291313307616683229618152015365884950216715944642521155937562589327641 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,moderate,4099,10322096095657499286,54.942220,52.683208,51.462718,48.000000,3.462718,yes,Both,-,"[1.0169010415408872,2.8224673752099894e-17,-1.5667841331057305e-33,8.69739909595674e-50]",0.1835954651539408455374058348752441816031932830810546875,0.18359546515394090469902356818101868577050561801338786071005416558637260776062088 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,boundary,4101,10322096095657499355,54.122919,51.380612,50.892826,48.000000,2.892826,yes,Both,-,"[1.0000004784732373,2.775558889592903e-17,-1.5407446927145369e-33,8.5528511646034525e-50]",0.00097823637133060922267679959674069323227740824222564697265625,0.00097823637133060969060211558665469414717087253344931890695562029519397310248549682 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,moderate,4099,10322096095657499356,54.389048,51.796068,51.050443,48.000000,3.050443,yes,Both,yes,"[-0.14662654054075797,-4.0697040332370861e-18,2.2591395605548382e-34,-1.2540743779847697e-50]",-0.1476910984344122768074925033943145535886287689208984375,-0.14769109843441221347308114909969154678376641106018727585121519885612519881701409 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,boundary,4105,10322096095657499355,55.375335,53.840397,53.427151,48.000000,5.427151,yes,Both,yes,"[-0.5,0,0,0]",-0.54930614433405489105410879346891306340694427490234375,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,near_one,4099,10322096095657499359,55.131197,53.226265,52.909585,48.000000,4.909585,yes,Both,yes,"[0.82266315494831599,2.283348940335983e-17,-1.2675132834072306e-33,7.0361121562846938e-50]",0.75534142520150826527469689608551561832427978515625,0.75534142520150835455818926054274013477949273460778658484922104863788928343365273 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,moderate,4099,10322096095657499356,59.766809,53.443944,52.892710,48.000000,4.892710,yes,Both,yes,"[0.22945102518139038,6.3685452795056546e-18,-3.5352528013375154e-34,1.962459528957747e-50]",0.25443499105294209439165342701016925275325775146484375,0.25443499105294212482044152307161617587897965795413196995183827967925968259422636 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,near_one,4099,10322096095657499359,54.504325,52.030408,51.416011,48.000000,3.416011,yes,Both,-,"[1.4171280217980677,3.9333203966042888e-17,-2.1834314337689169e-33,1.2120479252302846e-49]",0.045057028848666698384040074643053230829536914825439453125,0.045057028848666713380921770188418775180784369819168540822693433627584730980683186 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,moderate,4099,10322096095657499356,57.259651,52.117956,51.704092,48.000000,3.704092,yes,Both,-,"[1.2494329362879579,3.4678730339797679e-17,-1.9250562444005181e-33,1.0686208831159439e-49]",0.0772340893897989488880995168074150569736957550048828125,0.077234089389798927834491217736226376663789083869112553446942539303117662664711823 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,lgamma,native,double,native double,bl::lgamma,moderate,4099,10322096095657499287,54.054386,49.691963,42.954379,48.000000,-5.045621,no,Both,-,"[1.9980464602004848,5.5456929609634243e-17,-3.0784780063816265e-33,1.7088985817435157e-49]",-0.000824694886130128423928908887319266796112060546875,-0.00082469488613003165481098263861670595600473230058300022886763087074162031943339488 +6,909f5fff11e64c6f859d03680f2b8789,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,tgamma,native,double,native double,bl::tgamma,moderate,4099,10322096095657499284,53.401158,51.044818,50.580874,48.000000,2.580874,yes,Both,-,"[18.308810195400913,5.0817156581064761e-16,-2.8209188641139949e-32,1.5659245367694002e-48]",863228303211144.125,863228303211144.63758440505114972868884503676101564745281598139807432829532816527 diff --git a/validation/metrics/data/native/strict/909f5fff11e64c6f859d03680f2b8789/native_accuracy_run.json b/validation/metrics/data/native/strict/909f5fff11e64c6f859d03680f2b8789/native_accuracy_run.json new file mode 100644 index 0000000..23616c8 --- /dev/null +++ b/validation/metrics/data/native/strict/909f5fff11e64c6f859d03680f2b8789/native_accuracy_run.json @@ -0,0 +1,90 @@ +{ + "accuracy_samples": 4096, + "architecture": "x86_64", + "compiler": "MinGW", + "configuration": { + "build": { + "architecture": "x86_64", + "compiler-id": "GNU", + "compiler-version": "13.1.0", + "config": "Release", + "flags-hash": "58af7dec3ba5f6621e8a5a7b2fb270d74cd1bcbd3a5216604c9df63e81c05960", + "frontend-variant": "GNU", + "optimized": "1", + "processor": "AMD64", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Windows" + }, + "consumer": { + "arm64": "0", + "fast-math": "off", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "1" + }, + "harness": { + "qdpp": "on", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "available", + "simd": "on", + "tu-x86-fma": "0", + "x86": "1" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "1", + "f256-simd": "1", + "msvc-guarded": "0", + "neon": "0", + "runtime-check": "1", + "runtime-path": "0", + "scalar-x86": "0", + "sse2": "1", + "trig-simd": "1", + "wasm-simd": "0" + } + }, + "consumer_mode": "strict", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-mingw-release\\validation\\fltx_accuracy.exe", + "sha256": "584fc271904637a6892f1a93ada6148ed0970d8a0f0993548ae0f7e5c47afe70", + "wasm-sha256": "not-present" + } + }, + "host": { + "machine": "AMD64", + "node": "not-used", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "outputs": { + "f32_accuracy.csv": "47221f99114cad4016579954d095a736097c75b3d65d94a2c9ea25c49dfb9ef9", + "f64_accuracy.csv": "9d87f398bbd49e2a02af496cd9762df88186ef96d264999dc0f7119ba3043a27" + }, + "platform": "windows", + "policy": "native-float-libm-baseline-v1", + "precisions": [ + "f32", + "f64" + ], + "run_id": "909f5fff11e64c6f859d03680f2b8789", + "sample_mode": "standard", + "schema_version": 2, + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete", + "target": "windows/x86_64/MinGW", + "thresholds": "advisory" +} diff --git a/validation/metrics/data/native/strict/d41bd002f1d24cc895b59fbe85745167/f32_accuracy.csv b/validation/metrics/data/native/strict/d41bd002f1d24cc895b59fbe85745167/f32_accuracy.csv new file mode 100644 index 0000000..854da17 --- /dev/null +++ b/validation/metrics/data/native/strict/d41bd002f1d24cc895b59fbe85745167/f32_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,near_one,4099,10322096095657499359,38.457645,24.037482,24.000509,20.000000,4.000509,yes,Both,yes,"[1.1885061456019219,3.2987672193893811e-17,-1.831183659922398e-33,1.0165111307816044e-49] ; [0.81220021471607706,2.2543084474582116e-17,-1.2513925714875483e-33,6.9466242285517913e-50]",2.000706195831298828125,2.00070631504058837890625 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,moderate,4099,10322096095657499356,41.522382,24.071404,24.000368,20.000000,4.000368,yes,Both,yes,"[6.8051724535006084,1.8888147861053107e-16,-1.0485028323932781e-32,5.8203599295385438e-49] ; [1.1968659760618667,3.3219704100358647e-17,-1.8440640181726446e-33,1.0236611659290266e-49]",8.0020389556884765625,8.002038478851318359375 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,wide_exponent,4096,10322096095657499357,46.805352,24.393682,24.006151,20.000000,4.006151,yes,Both,yes,"[6.8663278648288954e-15,1.9057888225395823e-31,-1.0579253154283554e-47,5.8726652176119575e-64] ; [-3.2984332805285199e-15,-9.154991433081627e-32,5.0820411396266402e-48,-2.821099542652883e-64]",3.567894203281192500032403813747805543243885040283203125e-15,3.567894415039429313607488580828430713154375553131103515625e-15 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,extreme_finite,4096,10322096095657499295,47.155091,24.409642,24.030594,20.000000,4.030594,yes,Both,yes,"[223002548.53621882,6.1895640983749784e-09,-3.4358982872045742e-25,1.9073066943623286e-41] ; [279175322748.44623,7.748671780562106e-06,-4.3013769105216293e-22,2.3877438418260673e-38]",279398318080,279398334384 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,add,native,float,native float,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.77817428112030029296875,-0.77817428112030029296875 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000016689300537,0,0,0]",-1.6689300537109375e-06,-1.6689300537109375e-06 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,subtract,native,float,native float,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [1.1754943508222875e-38,0,0,0]",-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38,-1.1754943508222875079687365372222456778186655567720875215087517062784172594547272e-38 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,near_one,4099,10322096095657499359,26.016181,24.166616,24.014549,20.000000,4.014549,yes,Both,yes,"[1.4059396726628588,3.902266489560654e-17,-2.1661930524667106e-33,1.2024787013157959e-49] ; [1.4325550147665504,3.9761389035901386e-17,-2.2072004799367987e-33,1.2252423963947649e-49]",2.0140857696533203125,2.014085888497646692485432140529155731201171875 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,moderate,4099,10322096095657499356,25.989725,24.178659,24.028212,20.000000,4.028212,yes,Both,yes,"[-1.4739640396494451,-4.0910720357208028e-17,2.2710011847286731e-33,-1.2606589021183906e-49] ; [2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49]",-4.02748775482177734375,-4.0274875194135120182181708514690399169921875 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,wide_exponent,4096,10322096095657499357,25.942256,24.179837,24.024630,20.000000,4.024630,yes,Both,yes,"[-1122057943862.8401,-3.1143364106002161e-05,1.7288039947384127e-21,-9.5967900001126686e-38] ; [-8694665162187.9277,-0.00024132543636168146,1.3396252793822586e-20,-7.4364141477004576e-37]",9755918009047724494684160,9755918580702648912052224 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,multiply,native,float,native float,bl::multiply,extreme_finite,8,10322096095657499292,40.953446,25.906891,25.906891,20.000000,5.906891,yes,Both,yes,"large neighbour [844424863023104,0.023437498137354851,-1.3010425035850288e-18,7.2222367174802835e-35] ; negative small neighbour [-5.5511156525213747e-16,-1.5407441024465825e-32,8.5528478879580846e-49,-4.7477843256638533e-65]",-0.46875,-0.468750007450577044210149324499070644378662109375 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,near_one,4099,10322096095657499359,25.952819,24.167429,24.029610,20.000000,4.029610,yes,Both,yes,"[1.2982596956909869,3.6033945152474569e-17,2.0002857788178657e-33,1.1103816637369289e-49] ; [1.2798202945460211,3.5522148959688557e-17,1.9718753829605394e-33,1.0946107259271694e-49]",1.01440775394439697265625,1.0144078131795243086497270702039165563127339636105403630860948828655528161513261 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,moderate,4099,10322096095657499356,26.239727,24.172640,24.024913,20.000000,4.024913,yes,Both,yes,"[6.5374711177505596,1.8145127394371573e-16,1.0072569108993997e-32,5.5913990709666165e-49] ; [3.2450059050955762,9.0067006772042607e-17,4.99972323386958e-33,2.775403925497677e-49]",2.0146253108978271484375,2.0146254289230677898843256855109580140862879734170743102717224833311181385074994 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,wide_exponent,4096,10322096095657499357,25.917644,24.144253,24.027945,20.000000,4.027945,yes,Both,yes,"[0.027902000922864607,7.7443609644191634e-19,4.2989839268532189e-35,2.3864154690429567e-51] ; [14499.326437201289,4.0243715130342775e-13,2.2339749567081166e-29,1.2401052166866692e-45]",1.924365506056346930563449859619140625e-06,1.9243653935555734717265282397956262784302341636296406554453298274232840831100044e-06 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,arithmetic,divide,native,float,native float,bl::divide,extreme_finite,8,10322096095657499292,25.430169,24.584963,24.584963,20.000000,4.584963,yes,Both,yes,"large positive [844424930131968,0.0234375,1.3010426069826053e-18,7.2222372914521344e-35] ; small negative [5.5511151231257827e-16,1.5407439555097887e-32,8.5528470722950261e-49,4.7477838728798994e-65]",1521180780720166262527502581760,1521180720273875281796043846451.2 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,moderate,4099,10322096095657499356,25.971753,24.150757,24.027403,20.000000,4.027403,yes,Both,yes,"[-1.9749460259140985,-5.4815763759044581e-17,3.0428861518852258e-33,-1.6891411335680094e-49] ; [-6.4158772339979464,-1.7807636570882208e-16,9.885224067575198e-33,-5.4874016817003646e-49] ; [3.4130940773098271,9.4732390746028102e-17,-5.2587040692013754e-33,2.9191671686586848e-49]",16.0841045379638671875,16.0841054786133099696598947048187255859375 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; next value after one [1.0000001192092896,0,0,0] ; native product cancellation",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fma,native,float,native float,bl::fma,wide_exponent,4096,10322096095657499357,32.556508,24.197422,24.009758,20.000000,4.009758,yes,Both,yes,"[0.0072982921122313887,2.0256829858598637e-19,-1.124479945746528e-35,6.2421176324852115e-52] ; [1.9523314176984748e-12,5.4188082290698013e-29,-3.0080428309707814e-45,1.6697992050011997e-61] ; [-2.3939769383437016e-07,-6.6446207934270406e-24,3.6885054973828883e-40,-2.0475318648254738e-56]",-2.39397678569730487652122974395751953125e-07,-2.3939769274275411635131445493727566081466591810245070348628360079601407051086426e-07 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",3588998231833025183056134144,3588998231833025183056134144 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,abs,native,float,native float,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fabs,native,float,native float,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,moderate,4099,10322096095657499356,25.964756,24.164418,24.008593,20.000000,4.008593,yes,Both,yes,"[-4.0059402826070123,-1.1118717842559279e-16,6.1721282765599288e-33,-3.4262194617884094e-49]",16.0475597381591796875,16.0475587873306722030974924564361572265625 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqr,native,float,native float,bl::sqr,wide_exponent,4096,10322096095657499357,25.989404,24.167423,24.020149,20.000000,4.020149,yes,Both,yes,"[797963256397175.88,0.022147929501425297,-1.2294570640128564e-18,6.8248577012755909e-35]",636745309315666385691207532544,636745346742277146199547969536 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,near_one,4099,10322096095657499359,26.024612,24.188379,24.024049,20.000000,4.024049,yes,Both,yes,"[0.99957607711604157,2.774380939196801e-17,1.5400907988887275e-33,8.5492213246980834e-50]",1.0004241466522216796875,1.0004240880080409757745092099607730518546575501261053598713520202379186199441578 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,recip,native,float,native float,bl::recip,wide_exponent,4096,10322096095657499357,25.897082,24.141136,24.016290,20.000000,4.016290,yes,Both,yes,"[1.4835519773135318e-08,4.1176839086041523e-25,2.2857737417304193e-41,1.2688593185763538e-57]",67405800,67405796.027411572915787349932438540624582792272908782750245310659982961460931995 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmin,native,float,native float,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",-4402.79248046875,-4402.79248046875 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055850982666015625,-7.055850982666015625 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fmax,native,float,native float,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22] ; [-4402.7923228221107,-1.2220203523599956e-13,6.7835756587530693e-30,-3.7656409428172107e-46]",3588998231833025183056134144,3588998231833025183056134144 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,moderate,4099,10322096095657499356,48.522678,24.128146,24.008521,20.000000,4.008521,yes,Both,yes,"[6.6457375410806137,1.8445627084308674e-16,-1.0239379946324441e-32,5.6839976871472472e-49] ; [2.6220427968328792,7.27763071149101e-17,-4.0398965903082395e-33,2.2425931058324353e-49]",4.0236949920654296875,4.0236947536468505859375 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,fdim,native,float,native float,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,20.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000016689300537,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,copysign,native,float,native float,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,floor,native,float,native float,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,ceil,native,float,native float,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,trunc,native,float,native float,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round,native,float,native float,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,roundeven,native,float,native float,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_decimals,native,float,native float,bl::round_decimals,moderate,4099,10322096095657499356,26.229396,24.222837,24.047915,20.000000,4.047915,yes,Both,yes,"[4.1022214313758827,1.1385951713060679e-16,-6.3204728745551046e-33,3.5085672559249129e-49]",4.10200023651123046875,4.102 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,round_significant,native,float,native float,bl::round_significant,wide_exponent,4096,10322096095657499357,26.031860,24.190158,24.023953,20.000000,4.023953,yes,Both,yes,"[259.8694582017871,7.2128263973122191e-15,-4.0039229694600715e-31,2.2226237347600494e-47]",259.869384765625,259.8694 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,lround,native,float,native float,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,rounding,llround,native,float,native float,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,20.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remquo,native,float,native float,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.944149017333984375 ; 1,-0.944149017333984375 ; 1 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,modf,native,float,native float,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0 ; 3588998231833025183056134144,0 ; 3588998231833025183056134144 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ldexp,native,float,native float,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbn,native,float,native float,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,scalbln,native,float,native float,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[24903677249.671288,6.9121589701046891e-07,-3.8370190192397675e-23,2.1299734305423132e-39]",3264174876524544,3264174876524544 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",0.724792420864105224609375 ; 92,0.724792420864105224609375 ; 92 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,frexp,native,float,native float,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,20.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,ilogb,native,float,native float,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,-,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,floating_point_utilities,logb,native,float,native float,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,-,"[3.5889981306167907e+27,99614708998.68515,-5.5297271760837513e-06,3.069615215391814e-22]",91,91 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,near_one,4099,10322096095657499359,25.904846,24.145989,24.002397,20.000000,4.002397,yes,Both,yes,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",1.00001394748687744140625,1.0000140069934242844029017485374012760134473363250144717592753776502313379618068 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,wide_exponent,4096,10322096095657499357,25.966753,24.215195,24.033944,20.000000,4.033944,yes,Both,yes,"[8.4482670931604627e+31,2344865161252447,0.13016616458319236,7.2256736473703873e-18]",9191445835546624,9191445300433280.2040066177032811142195637421096986523537003168905974560430072948 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,extreme_finite,4096,10322096095657499295,25.972131,24.206633,24.003202,20.000000,4.003202,yes,Both,yes,"[3.2519120367544908e+32,9025869043151310,0.50103638144790075,2.7813106342916602e-17]",18033057994899456,18033059067370500.361343159063133250828533418772371371727970165496211972696634283 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,sqrt,native,float,native float,bl::sqrt,subnormal,4100,10322096095657499290,27.589271,24.195086,24.031452,20.000000,4.031452,yes,Both,yes,"[1.8779781629341901e-40,0,0,0]",1.370393513549582123487035494914521027709497502655722200870513916015625e-20,1.3703934336292589277694998548128719273180184126519025205252581878215739867341933e-20 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,moderate,4099,10322096095657499356,25.612822,23.399203,22.959143,20.000000,2.959143,yes,Both,yes,"[-1.3107925921174228,-3.6381802906921357e-17,2.0195957632319271e-33,-1.1211008583877508e-49]",-1.0944049358367919921875,-1.0944048016260133167401477577509673709480743051163502096548202710331859650845724 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,cbrt,native,float,native float,bl::cbrt,wide_exponent,4096,10322096095657499357,25.485859,23.259136,22.884042,20.000000,2.884042,yes,Both,yes,"[0.13220588448365292,3.6694504236171299e-18,-2.0369541740101359e-34,1.1307367120461853e-50]",0.50942885875701904296875,0.50942892456832680642725488647785089467768581077622050151162156924742112505750114 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,moderate,4099,10322096095657499356,25.982984,24.167535,24.008992,20.000000,4.008992,yes,Both,yes,"[3.0841394791368018,8.5602066522327873e-17,-4.7518692604291353e-33,2.6378173314684702e-49] ; [2.5731327818230003,7.1418781494941861e-17,-3.9645387803178756e-33,2.2007611179641204e-49]",4.016582012176513671875,4.0165817742570609994234301662245381486745983183743907579567512422082641230482559 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,hypot,native,float,native float,bl::hypot,wide_exponent,4096,10322096095657499357,50.914162,24.589271,24.043824,20.000000,4.043824,yes,Both,yes,"[-1.2969861059349299e-29,-3.599859593569704e-46,1.9983235030994217e-62,-1.1092923818952892e-78] ; [2.7588817734603815e-32,7.6574351677860018e-49,-4.250730416425209e-65,2.3596293898948734e-81]",1.2969890834882488924611555657595108221020467658335037497430164421530207619071007e-29,1.2969890084946579252781730919118729168609820257308054473541529684278323820094086e-29 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,moderate,4099,10322096095657499356,26.149035,24.214150,24.040329,20.000000,4.040329,yes,Both,yes,"[-5.7483236179995885,-1.5954803084249315e-16,8.8566948687470254e-33,-4.9164532826812132e-49]",0.509722173213958740234375,0.5097222027582440476609190572223045086789238470780369932414545068400613217789304 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,sin,native,float,native float,bl::sin,argument_reduction,4111,10322096095657499282,26.207700,24.232934,24.054458,20.000000,4.054458,yes,Both,yes,"near 2^94 * pi/2 [3.1112832252188646e+28,0,0,0]",-0.031775273382663726806640625,-0.031775275206458036754431969895458660655905161590001855338797800351243967744526865 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,moderate,4099,10322096095657499356,26.060912,24.256137,24.035729,20.000000,4.035729,yes,Both,-,"[4.4588502387206184,1.2375795495957516e-16,-6.8699465538321711e-33,3.8135864210043619e-49]",-0.25083100795745849609375,-0.25083099337247927050646438955413445736165895666786844698074070181158501850594916 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,cos,native,float,native float,bl::cos,argument_reduction,4111,10322096095657499282,26.627755,24.245703,24.076319,20.000000,4.076319,yes,Both,-,"near 2^70 * pi/2 [1.8544669218107189e+21,0,0,0]",-0.5190365314483642578125,-0.51903650210542794358474489503209069334133171874228756988100493423128724002299192 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,moderate,4099,10322096095657499356,25.924307,24.163895,24.015719,20.000000,4.015719,yes,Both,yes,"[-6.036496878364936,-1.6754644556096587e-16,9.3006960777944832e-33,-5.1629234653041607e-49]",0.2518171370029449462890625,0.25181715184977206019891708487262388659629088175425587483011094843357962067832389 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,tan,native,float,native float,bl::tan,argument_reduction,4111,10322096095657499282,25.898518,24.161857,24.046469,18.000000,6.046469,yes,Both,yes,"near 2^28 * pi/2 [-421657632,0,0,0]",0.507759034633636474609375,0.50775906393914719153658437245770373295759245731279909404632772755040921670373447 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,near_one,4099,10322096095657499359,26.067892,24.219203,24.021836,20.000000,4.021836,yes,Both,yes,"[0.55072017619471925,1.5285555493425008e-17,-8.4851878264929949e-34,4.7102254466208054e-50]",0.503395974636077880859375,0.5033959450820623349182906770633407385222001692931760800454776223514541494398828 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan,native,float,native float,bl::atan,moderate,4099,10322096095657499356,25.911836,24.243607,24.056379,20.000000,4.056379,yes,Both,yes,"[1.6967153744323316,4.7093311873256703e-17,-2.6142039573771427e-33,1.4511747122731526e-49]",1.03822672367095947265625,1.0382266641595175302821692627692631092810194067716353711556189103095518619306749 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,near_one,4099,10322096095657499359,25.920195,24.158254,24.013805,20.000000,4.013805,yes,Both,yes,"[1.3550416411741315,3.7609960733934508e-17,-2.0877722181031071e-33,1.1589463933554018e-49] ; [0.85964036308882719,2.3859813099958637e-17,-1.3244856933413505e-33,7.3523725626709088e-50]",1.005465030670166015625,1.0054649713105136693080409087559014886644835427733168442408504661900474402910144 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,moderate,4099,10322096095657499356,25.938612,24.172853,24.023930,20.000000,4.023930,yes,Both,yes,"[-1.5221127970798687,-4.2247116834866724e-17,2.3451860917049052e-33,-1.3018397980207348e-49] ; [-0.70678002618891433,-1.9617086460502596e-17,1.0889670532256199e-33,-6.0449814777464578e-50]",-2.005512237548828125,-2.005512355120225239725146453473468772246503385569443728906464376660394150359798 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,atan2,native,float,native float,bl::atan2,extreme_finite,8,10322096095657499293,32.824184,25.098912,25.098912,20.000000,5.098912,yes,Both,yes,"huge positive [3.1901471898837981e+37,8.8544371553805848e+20,-49152,2.7284841053187847e-12] ; tiny negative [-1.4693679385278594e-38,-4.0783152924990778e-55,2.2639197697066781e-71,-1.256727927116218e-87]",1.57079637050628662109375,1.5707963267948966192313216916397514420985846996875529104874722961539082031435651 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,moderate,4099,10322096095657499356,25.877130,23.894387,23.461405,20.000000,3.461405,yes,Both,yes,"[0.50525718509116591,1.4023704006137669e-17,-7.7847195390710439e-34,4.3213874362630044e-50]",0.5296800136566162109375,0.52967996779738378444136497299823480300062150306901044995137540581814602542442563 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,asin,native,float,native float,bl::asin,boundary,4105,10322096095657499355,24.992759,24.113237,24.113237,20.000000,4.113237,yes,Both,yes,"[0.99999910479106313,2.7755550768589574e-17,-1.5407425762220303e-33,8.5528394157098913e-50]",1.5694591999053955078125,1.5694591134201073494139739317636003811920117017421147249498608268896329577376014 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,moderate,4099,10322096095657499356,25.920877,24.113823,23.808727,20.000000,3.808727,yes,Both,-,"[-0.61518495487317537,-1.707481253257968e-17,9.4784250074140707e-34,-5.2615828402069857e-50]",2.233417034149169921875,2.2334168821543518003502700866744511755619367949446568069567781212742346589702698 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,trigonometric,acos,native,float,native float,bl::acos,boundary,4105,10322096095657499355,25.983148,24.584962,24.584962,20.000000,4.584962,yes,Both,-,"[0.9999995073211686,2.7755561941044354e-17,-1.5407431964178572e-33,8.5528428584883254e-50]",0.0009765625,0.00097656253880511143898187133876924251895712227894022748398387476387013216099532872 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,moderate,4099,10322096095657499356,25.945177,24.173984,24.007691,20.000000,4.007691,yes,Both,-,"[0.69706560262123496,1.9347457042607623e-17,-1.0739996138324561e-33,5.9618954985765975e-50]",2.007852077484130859375,2.0078521965251381745368245393757138670217404209691449932482836198723071521808851 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp,native,float,native float,bl::exp,boundary,4099,10322096095657499289,25.985101,24.189213,24.012647,20.000000,4.012647,yes,Both,-,"[-55.445402102948194,-1.538919050607329e-15,8.5427168150927155e-32,-4.7421604504842094e-48]",8.32470122137760864279645685032325255932328378349893682752735912799835205078125e-25,8.3247007295174246704446931992286856723729842657502269685404369668574123561739996e-25 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,moderate,4099,10322096095657499356,25.945545,24.176633,24.015565,20.000000,4.015565,yes,Both,-,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",16.047374725341796875,16.047373779108025107147981190408654763758177217950870805754027309567667903729689 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,exp2,native,float,native float,bl::exp2,boundary,4099,10322096095657499289,25.953108,24.184447,24.013981,20.000000,4.013981,yes,Both,-,"[12.008718688899336,3.3330889961656162e-16,-1.8502360733339086e-32,1.0270873448036725e-48]",4120.82763671875,4120.8278799704215331782631104353597855518360018117915418683951931281930912686669 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,moderate,4099,10322096095657499356,25.980116,23.586262,22.527963,20.000000,2.527963,yes,Both,yes,"[0.34057363208584057,9.4528171980479295e-18,-5.2473676504227349e-34,2.9128741920862649e-50]",0.4057538211345672607421875,0.40575375404270745997458287046382846533769495983882253541892972745121909455076655 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,exponentials,expm1,native,float,native float,bl::expm1,cancellation,4098,10322096095657499288,46.577665,23.566651,22.781883,20.000000,2.781883,yes,Both,yes,"[0.00067049614153802395,0,0,0]",0.0006707208813168108463287353515625,0.00067072097432296308285210370663059393442257906709442662111659198408734521169141739 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,near_one,4099,10322096095657499359,25.915814,24.153165,23.953904,20.000000,3.953904,yes,Both,-,"[0.93845537367659526,2.6047369085974028e-17,1.4459194445078942e-33,8.0264652952294025e-50]",-0.06351993978023529052734375,-0.063519943689242454447435124366623484973123162314765713955967040355554375738192851 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,wide_exponent,4096,10322096095657499357,25.934124,24.148103,24.055764,20.000000,4.055764,yes,Both,-,"[3.2617843787809539e-29,9.0532702967131949e-46,5.0255745657830058e-62,2.7897542974514332e-78]",-65.59268951416015625,-65.59269327555488150776766062278388871045172786432349789542906836393403051939105 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log,native,float,native float,bl::log,extreme_finite,4096,10322096095657499295,25.928931,24.171772,24.028998,20.000000,4.028998,yes,Both,-,"[1.925072119386236e+28,534314847751.63684,2.9660432318647614e-05,1.6464847440249349e-21]",65.12734222412109375,65.127346028765523545207426082299833753247218536882252197810633399468572469932133 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,near_one,4099,10322096095657499359,25.997641,24.168133,23.675086,20.000000,3.675086,yes,Both,-,"[1.0239856815956481,2.8421312014849322e-17,1.5776997494470658e-33,8.7579929389073653e-50]",0.0341954641044139862060546875,0.034195461551375619696170753702097836731645774772968144626738312328832836284482893 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,wide_exponent,4096,10322096095657499357,25.972931,24.199454,24.028872,20.000000,4.028872,yes,Both,-,"[279.54938708294071,7.7590541514832776e-15,4.307140284145071e-31,2.3909431568741984e-47]",8.1269588470458984375,8.1269593218526276965603717987343564084569415244724976083039632724987237766261338 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log2,native,float,native float,bl::log2,extreme_finite,4096,10322096095657499295,26.022657,24.191270,24.003063,20.000000,4.003063,yes,Both,-,"[5.0098439803322917e-20,1.3905110341861625e-36,7.7188868307440791e-53,4.2848429419839901e-69]",-64.113800048828125,-64.113796235451863124774831376509181438042251966024731816806674549792684463109039 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,near_one,4099,10322096095657499359,25.962169,24.152799,23.987576,20.000000,3.987576,yes,Both,-,"[1.1548157158417363,3.2052574923161943e-17,1.7792753339108649e-33,9.8769622142772787e-50]",0.0625126659870147705078125,0.062512669745286719885701932573165067686690137111581665627621599315275165176273273 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,wide_exponent,4096,10322096095657499357,25.952914,24.154037,24.048450,20.000000,4.048450,yes,Both,-,"[23432401020772320,0.65037977838778627,3.6103330235836354e-17,2.0041374246735552e-33]",16.3698177337646484375,16.369816790271109973117205087238363001448077217226902449637697819144005794863329 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log10,native,float,native float,bl::log10,extreme_finite,4096,10322096095657499295,25.880532,24.163613,24.027658,20.000000,4.027658,yes,Both,-,"[4.8264741762657366e-33,1.3396156895622393e-49,7.4363609135055201e-66,4.1280095527981953e-82]",-32.316371917724609375,-32.316370028094117653165372508074257172256480666024940344680625927328493584980905 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,moderate,4099,10322096095657499356,25.852828,23.555276,23.169104,20.000000,3.169104,yes,Both,yes,"[0.6489272591876778,1.8011349611426414e-17,-9.9983075215894855e-34,5.5501756088757656e-50]",0.500124990940093994140625,0.50012493791477858658519920495659102199166970636399639754750147511225772771010193 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,logarithms,log1p,native,float,native float,bl::log1p,cancellation,4098,10322096095657499288,46.640460,23.927588,22.843491,20.000000,2.843491,yes,Both,yes,"[-3.0161881880985675e-08,0,0,0]",-3.016187832827199599705636501312255859375e-08,-3.0161882335855243245304754558762072997310887274723990939098277461580018360871778e-08 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,near_one,4099,10322096095657499359,25.935116,24.183020,24.022132,20.000000,4.022132,yes,Both,yes,"[1.0032222542802387,2.7845011137956863e-17,1.545708624315182e-33,8.5804065203819558e-50] ; [1.1098483278340112,3.0804479185076206e-17,1.7099921026428991e-33,9.4923630214066531e-50]",1.00357687473297119140625,1.0035768158257674189368635854208332740856335659539134346018913304416269618692691 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,pow,native,float,native float,bl::pow,moderate,4099,10322096095657499356,25.910732,24.173665,24.033763,20.000000,4.033763,yes,Both,yes,"[1.5010856767109688,4.1663497005488793e-17,2.312788683094746e-33,1.2838556235321408e-49] ; [6.8472618406345225,1.900496937777419e-16,1.054987729275047e-32,5.8563583386908427e-49]",16.1396617889404296875,16.139662728687068635103760006664480606823689561120066764019143935355322552829973 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,moderate,4099,10322096095657499356,24.296761,22.240676,21.817420,20.000000,1.817420,yes,Both,yes,"[-2.0174902967783854,-5.5996604486030095e-17,3.108435980060947e-33,-1.7255285978184637e-49]",-136.0443267822265625,-136.04428997082654660356838684633834963763840941785070423709212066151322168144796 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,roots_and_powers,ipow,native,float,native float,bl::ipow,wide_exponent,4096,10322096095657499357,24.307980,22.194400,21.763685,20.000000,1.763685,yes,Both,yes,"[8.3253759191734602,2.3107560085315504e-16,-1.282727262481326e-32,7.1205667056058241e-49]",2772213.75,2772214.528582891558413966128826065404980229940407596127199381800655092889207728 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,fmod,native,float,native float,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,20.000000,inf,yes,Both,yes,"[30287485871.102478,8.4064660430267718e-07,4.666526078348927e-23,2.590442348598358e-39] ; [2.0009290447377264e-12,5.5536937402726095e-29,3.0829193310836276e-45,1.7113640122155147e-61]",1.12052207790203084414315526373684406280517578125e-12,1.12052207790203084414315526373684406280517578125e-12 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,remainders,remainder,native,float,native float,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,20.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,near_one,4099,10322096095657499359,25.942025,24.196051,24.011707,20.000000,4.011707,yes,Both,yes,"[1.4459245913717083,4.0132469330314787e-17,-2.2277995742789206e-33,1.2366771908072897e-49]",2.0051238536834716796875,2.0051239722322748219797119221081131107158513029013343848994792963571293595758708 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,sinh,native,float,native float,bl::sinh,moderate,4099,10322096095657499356,25.936329,24.161474,24.011590,20.000000,4.011590,yes,Both,yes,"[-6.9355339383837169,-1.9249973666156986e-16,1.0685881993797711e-32,-5.9318561139707965e-49]",-514.08355712890625,-514.08358752550603806804367819424003815790834626890985544825401905207447930345975 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,near_one,4099,10322096095657499359,25.882807,24.206821,24.037830,20.000000,4.037830,yes,Both,-,"[1.3363709947474058,3.7091746195244852e-17,-2.0590055324756691e-33,1.1429776749925342e-49]",2.03400325775146484375,2.0340033758498468053419313401516481710439729679668859465095831820284475316728875 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,cosh,native,float,native float,bl::cosh,moderate,4099,10322096095657499356,25.970199,24.157896,24.042107,20.000000,4.042107,yes,Both,-,"[-2.0865014257806518,-5.791204809537242e-17,3.2147644599340952e-33,-1.7845527610827445e-49]",4.09039974212646484375,4.0903995053326148905358860858142744104816455202766888280678248016451416423900309 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,near_one,4099,10322096095657499359,25.960144,23.951896,23.585735,20.000000,3.585735,yes,Both,yes,"[0.88614226956034992,2.4595388768987312e-17,-1.3653183455468349e-33,7.5790393158461086e-50]",0.70948302745819091796875,0.70948308381265723135205564231795018723276975370790990618793629403010330001580195 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,hyperbolic,tanh,native,float,native float,bl::tanh,moderate,4099,10322096095657499356,26.364861,24.367323,23.664024,20.000000,3.664024,yes,Both,yes,"[0.98775382689116853,2.741567603190466e-17,-1.5218757383142301e-33,8.4481074264743387e-50]",0.7564029693603515625,0.75640291245249735018763313924583594579849914862813856260689384074903424534412451 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,near_one,4099,10322096095657499359,25.557868,23.335878,22.898759,20.000000,2.898759,yes,Both,yes,"[0.57890999870085935,1.6067980243585338e-17,-8.9195208128252867e-34,4.9513286875109623e-50]",0.550656378269195556640625,0.55065644868454699918532056874039300539183901870314239434476919100760017958369078 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,asinh,native,float,native float,bl::asinh,moderate,4099,10322096095657499356,25.758179,23.643520,23.178168,20.000000,3.178168,yes,Both,yes,"[-0.71131392647961711,-1.9742927472854918e-17,1.0959526326934043e-33,-6.0837592335738726e-50]",-0.661910712718963623046875,-0.66191064298001016538523218063742045913680409778040236139504261769759961805182207 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,moderate,4099,10322096095657499286,25.987251,23.739051,23.010583,20.000000,3.010583,yes,Both,-,"[1.2554365019814742,3.4845362761367464e-17,-1.9343062019543092e-33,1.073755641042456e-49]",0.700352489948272705078125,0.70035257282658160606822099851014095184653107534774288487363940920358700564424369 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,acosh,native,float,native float,bl::acosh,boundary,4101,10322096095657499355,25.658763,23.793907,23.793907,20.000000,3.793907,yes,Both,-,"[1.9999994915125949,5.5511137117897206e-17,-3.0814871275706815e-33,1.7105689795575038e-49]",1.3169577121734619140625,1.3169576216227113023399862811927493515571819731899743868099047486919155844722929 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,moderate,4099,10322096095657499356,25.561446,23.249029,22.606628,20.000000,2.606628,yes,Both,yes,"[-0.13966164066443998,-3.8763892280646578e-18,2.15182828670316e-34,-1.1945046544687754e-50]",-0.14058049023151397705078125,-0.14058046821990765766624665138807069884802640321892146574846765659067668817307699 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,inverse_hyperbolic,atanh,native,float,native float,bl::atanh,boundary,4105,10322096095657499355,26.088438,25.637514,25.637514,20.000000,5.637514,yes,Both,yes,"[0.99899949151259504,2.7727805926652667e-17,-1.5392024281053832e-33,8.5442898762077182e-50]",3.7999393939971923828125,3.7999393211997930734222062320257072616372641916906079170097936373745998626952477 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,near_one,4099,10322096095657499359,24.857511,22.598092,22.085996,20.000000,2.085996,yes,Both,yes,"[0.53604224621822094,1.4878161098081403e-17,-8.259038507586138e-34,4.5846873561939605e-50]",0.551595985889434814453125,0.55159586198878604402024477717780943885722591386846885979528200458339895826755766 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erf,native,float,native float,bl::erf,moderate,4099,10322096095657499356,36.747937,22.921316,22.304962,20.000000,2.304962,yes,Both,yes,"[-0.24896518890527197,-6.9101721263196129e-18,3.8359160993815049e-34,-2.1293611870318335e-50]",-0.2752292454242706298828125,-0.2752291923074717000217600512613630869391188036657604244357750914377283598292848 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,near_one,4099,10322096095657499359,25.245567,22.988275,22.581085,20.000000,2.581085,yes,Both,-,"[0.97201166685381302,2.6978743318634508e-17,-1.4976211003900068e-33,8.3134671390872429e-50]",0.16924555599689483642578125,0.16924552902364932725242710149144848803577038425156278163465453073213314786810873 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,erfc,native,float,native float,bl::erfc,moderate,4099,10322096095657499356,31.106913,22.475584,21.855256,20.000000,1.855256,yes,Both,-,"[1.6346453250862929,4.537052192516691e-17,-2.5185699040290393e-33,1.3980871482905051e-49]",0.0207921527326107025146484375,0.020792147252217579097299115967243302029187028434209797344924817170102319462039264 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,lgamma,native,float,native float,bl::lgamma,moderate,4099,10322096095657499287,25.215770,22.768927,22.134517,20.000000,2.134517,yes,Both,-,"[1.6354152637709984,4.5391892016549652e-17,-2.5197561824036125e-33,1.3987456650730382e-49]",-0.107594527304172515869140625,-0.1075945506729870651185251078111303116984586515628732861915874500496795356566364 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f32,special_functions,tgamma,native,float,native float,bl::tgamma,moderate,4099,10322096095657499284,24.655427,22.096602,21.497773,20.000000,1.497773,yes,Both,-,"[19.230534417261044,5.3375455214724321e-16,-2.962932966461791e-32,1.6447581998933986e-48]",12563186288951296,12563190531484946.097539947606450335009162437627518611106355880665925445522889534 diff --git a/validation/metrics/data/native/strict/d41bd002f1d24cc895b59fbe85745167/f64_accuracy.csv b/validation/metrics/data/native/strict/d41bd002f1d24cc895b59fbe85745167/f64_accuracy.csv new file mode 100644 index 0000000..6ba6af4 --- /dev/null +++ b/validation/metrics/data/native/strict/d41bd002f1d24cc895b59fbe85745167/f64_accuracy.csv @@ -0,0 +1,120 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,near_one,4099,10322096095657499359,68.804804,53.029455,53.001693,48.000000,5.001693,yes,Both,yes,"[1.4297151598371682,3.9682567227671501e-17,-2.2028249906198284e-33,1.222813511902914e-49] ; [0.57263374255596289,1.5893779141572608e-17,-8.8228197756404827e-34,4.8976488285171109e-50]",2.00234890239313134685517070465721189975738525390625,2.0023489023931311248105657796259038150310516357421875 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-15.0558510431143677266163649619556963443756103515625,-15.0558510431143677266163649619556963443756103515625 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,wide_exponent,4096,10322096095657499357,82.842054,53.932557,53.150426,48.000000,5.150426,yes,Both,yes,"[-2.5801269239800948e-52,-7.1612907936449556e-69,3.9753149625703952e-85,-2.2067431007912725e-101] ; [6.2882455610389305e-52,1.745338751590589e-68,-9.6885763389319921e-85,5.3782402636604011e-101]",3.7081186370588353126400687774493756982129860731379218490790094277487448813887287e-52,3.7081186370588356835606838461915142713865122279018731858354873035278451266926346e-52 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,extreme_finite,4096,10322096095657499295,83.051539,53.922063,53.033213,48.000000,5.033213,yes,Both,yes,"[4.044152691012953e+59,1.1224778581655917e+43,-6.2310038138368535e+26,34589019503.244186] ; [-3.2763861007278913e+51,-9.0937982164748556e+34,5.0480720806127841e+18,-280.22429269318661]",404415265824909244971463481926668921988920568307135488720896,404415265824909201094180361492905708699283935084133453135872 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,add,native,double,native double,bl::add,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [2.2250738585072014e-308,0,0,0]",2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308,2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,near_one,4099,10322096095657499359,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.5,0,0,0] ; [1.2781742597549925,3.5476462316580208e-17,-1.9693392648057033e-33,1.093202897542835e-49]",-0.7781742597549925477551369112916290760040283203125,-0.7781742597549925477551369112916290760040283203125 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",-9.65894031423886190168559551239013671875e-14,-9.65894031423886190168559551239013671875e-14 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,subtract,native,double,native double,bl::subtract,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0] ; min normal [2.2250738585072014e-308,0,0,0]",-2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308,-2.2250738585072013830902327173324040642192159804623318305533274168872044348139182e-308 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,near_one,4099,10322096095657499359,54.941335,53.192655,53.017782,48.000000,5.017782,yes,Both,yes,"[0.61590653178072707,1.7094840314999723e-17,-9.489542660001528e-34,5.267754377148175e-50] ; [0.81645463695581544,2.2661168412757988e-17,-1.2579475468376116e-33,6.9830116513492445e-50]",0.50285974380374887093836377971456386148929595947265625,0.50285974380374892608309676348753773569247609448642907343737535469374577701273665 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,moderate,4099,10322096095657499356,54.943506,53.177920,53.014990,48.000000,5.014990,yes,Both,yes,"[-1.8309845685969375,-5.0820030644741984e-17,2.8210784066974295e-33,-1.5660131006941688e-49] ; [4.4139715148669616,1.2251232014612206e-16,-6.8007999313236564e-33,3.7752023348123534e-49]",-8.0819137299478551739184695179574191570281982421875,-8.0819137299478542859205922880040108996859918106071002798056202021115268507855944 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,wide_exponent,4096,10322096095657499357,54.949502,53.147252,53.012976,48.000000,5.012976,yes,Both,yes,"[-9580440436661.9609,-0.00026591063897079994,1.4761005693908477e-20,-8.1940041940001134e-37] ; [3.5476231799149722e+112,9.8466323425887909e+95,-5.465978970880409e+79,3.0342278527941741e+63]",-3.3987792566896694596919030454680074525269527091652711616914422309578532569280119e+125,-3.3987792566896690857302928923045025855537603060392874444605126408265807925080287e+125 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,multiply,native,double,native double,bl::multiply,extreme_finite,8,10322096095657499292,69.953445,54.906891,54.906891,48.000000,6.906891,yes,Both,yes,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,-2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [-2.4203699467808244e-121,-6.7178761075670899e-138,3.729170365600104e-154,-2.0701054013195242e-170]",-0.46875,-0.46875000000000001387778780781444442934375177282579434799116745646516135614945142 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,near_one,4099,10322096095657499359,54.949938,53.186535,53.032508,48.000000,5.032508,yes,Both,yes,"[0.79583533097289294,2.2088867706407193e-17,1.2261784757776169e-33,6.8066578805404505e-50] ; [0.78671878189697564,2.1835832639176979e-17,1.212132207893789e-33,6.7286854304670572e-50]",1.01158806588287486505350898369215428829193115234375,1.0115880658828749748599930078884108617347838241152708567193976201713984484334261 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,moderate,4099,10322096095657499356,55.299598,53.162157,53.017700,48.000000,5.017700,yes,Both,yes,"[5.6982279612785671,1.5815759705435825e-16,8.7795102884568185e-33,4.8736072335891048e-49] ; [5.6630083746783413,1.571800571553245e-16,8.725245923286967e-33,4.8434844597749865e-49]",1.0062192361850825772506823341245763003826141357421875,1.0062192361850826876012316258994293315599871850773075711644181221348221597609452 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,wide_exponent,4096,10322096095657499357,54.940111,53.173252,53.006391,48.000000,5.006391,yes,Both,yes,"[1.1797107595829603e-08,3.2743551192175876e-25,1.8176322220773076e-41,1.0089885716254063e-57] ; [2.9273558682385512e-68,8.1250447154750139e-85,4.5103058596146572e-101,2.5037227067229757e-117]",402995335272583736023300876476329416171344205099568646324224,402995335272583691479603215316671542832621087480350248383875.97791882737549902199 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,arithmetic,divide,native,double,native double,bl::divide,extreme_finite,8,10322096095657499292,54.565310,53.447459,53.447459,48.000000,5.447459,yes,Both,yes,"large neighbour [1.9366874085651812e+120,5.3753873812267293e+103,2.9839394184587194e+87,1.6564191232297351e+71] ; negative small neighbour [2.4203699467808244e-121,6.7178761075670899e-138,3.729170365600104e-154,2.0701054013195242e-170]",8.0016173194558218715832353057948522675740813308632367068153019530691147107160091e+240,8.0016173194558225230457526744094465773333433188328184012700026520990852868662071e+240 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,moderate,4099,10322096095657499356,54.957904,53.175116,53.010971,48.000000,5.010971,yes,Both,yes,"[-2.0766790938067476,-5.7639423617548914e-17,3.1996307613162919e-33,-1.7761518707561329e-49] ; [1.7605984240305848,4.8866422686937992e-17,-2.7126313799051833e-33,1.5058129076457224e-49] ; [-0.3659974929680736,-1.0158471091205978e-17,5.6390842502229579e-34,-3.1303205861993077e-50]",-4.02219543274149682332563315867446362972259521484375,-4.0221954327414963801553326667348806266375851488013985258768850927779681114770938 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; next value after one [1.0000000000000002,0,0,0] ; native product cancellation",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fma,native,double,native double,bl::fma,wide_exponent,4096,10322096095657499357,67.731490,53.261032,53.076165,48.000000,5.076165,yes,Both,yes,"[9.3280228061672898e+101,2.5890464234088722e+85,-1.4372094755459709e+69,7.9781152548029138e+52] ; [-1.157500052342858e+78,-3.212708022789662e+61,1.7834112091495225e+45,-9.8999209338619524e+28] ; [1.8812092993044754e+65,5.2214046955669652e+48,-2.8984618569521754e+32,16089695447930460]",-1.0797186886394012091182337394342607583764140817913341512476728655410802178495674e+180,-1.0797186886394010954097576163349944382733983701060212581740083991443274190535586e+180 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,abs,native,double,native double,bl::abs,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fabs,native,double,native double,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,moderate,4099,10322096095657499356,54.987841,53.178902,53.024599,48.000000,5.024599,yes,Both,yes,"[-4.0291701907573039,-1.1183193789780232e-16,6.2079196171295382e-33,-3.4460876469796998e-49]",16.234212426087250236150794080458581447601318359375,16.234212426087248464261717100553537863564519292427420360394943465998096598923439 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqr,native,double,native double,bl::sqr,wide_exponent,4096,10322096095657499357,54.966048,53.184279,53.034276,48.000000,5.034276,yes,Both,yes,"[2.9507000691330746e-25,8.1898378887864514e-42,-4.5462732960391003e-58,2.5236886447505548e-74]",8.7066308979819320541420161769186049656218085566280656265540977462941222974600937e-50,8.7066308979819311102069574980521020700209525169860268542733130882306736168377202e-50 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,near_one,4099,10322096095657499359,55.022120,53.212652,53.036371,48.000000,5.036371,yes,Both,yes,"[0.9803714880397002,2.7210774967692536e-17,1.5105014443513052e-33,8.384967411241868e-50]",1.02002150429685389809719708864577114582061767578125,1.0200215042968537876713460424605364405111022006296562878115184748990877637517355 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,recip,native,double,native double,bl::recip,wide_exponent,4096,10322096095657499357,54.902665,53.142478,53.019012,48.000000,5.019012,yes,Both,yes,"[5.654455339035485e-101,1.5694266272779603e-117,8.7120678853189764e-134,4.8361691791892627e-150]",1.7685169305282301591156520034137992060834685455134402926455624168717720163565455e+100,1.7685169305282303528900122951557431771119667320589594598759928180992244301081954e+100 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmin,native,double,native double,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166,-3.1692452985045241056289448838789250811620807452183878678033111223535286078570851e+166 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143677266163649619556963443756103515625,-7.0558510431143677266163649619556963443756103515625 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fmax,native,double,native double,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,fdim,native,double,native double,bl::fdim,cancellation,4098,10322096095657499291,inf,inf,inf,48.000000,inf,yes,Both,yes,"one [1,0,0,0] ; [1.0000000000000966,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,copysign,native,double,native double,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,floor,native,double,native double,bl::floor,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,ceil,native,double,native double,bl::ceil,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,trunc,native,double,native double,bl::trunc,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round,native,double,native double,bl::round,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,roundeven,native,double,native double,bl::roundeven,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_decimals,native,double,native double,bl::round_decimals,moderate,4099,10322096095657499356,55.241937,53.207435,53.013030,48.000000,5.013030,yes,Both,yes,"[4.0042653279985281,1.1114068909630426e-16,-6.1695476003711535e-33,3.4247868987264693e-49]",4.0039999999999995594635038287378847599029541015625,4.004 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,round_significant,native,double,native double,bl::round_significant,wide_exponent,4096,10322096095657499357,62.492824,53.239040,53.008690,48.000000,5.008690,yes,Both,yes,"[1.4846549805182609e+20,4120.7453574894662,-2.2874731872510136e-13,1.2698027003493837e-29]",148465500000000016384,148465500000000000000 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,lround,native,double,native double,bl::lround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,rounding,llround,native,double,native double,bl::llround,boundary,4110,10322096095657499285,inf,inf,inf,48.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remquo,native,double,native double,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.9441489568856322733836350380443036556243896484375 ; 1,-0.9441489568856322733836350380443036556243896484375 ; 1 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,modf,native,double,native double,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0,3.3171656910739545986884397617408918598017836683062139403392488975951643122923809e-246 ; 0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ldexp,native,double,native double,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbn,native,double,native double,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,scalbln,native,double,native double,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[2.5973599488308777e+103,7.2091220460781472e+86,-4.0018666414443889e+70,2.2214822434054531e+54]",3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108,3.4044116321316080421064676424304545138713485399893932702176543287460077145178309e+108 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.7247924004236494521791200895677320659160614013671875 ; -815,0.7247924004236494521791200895677320659160614013671875 ; -815 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,frexp,native,double,native double,bl::frexp,subnormal,4100,10322096095657499290,inf,inf,inf,48.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,ilogb,native,double,native double,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,floating_point_utilities,logb,native,double,native double,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,near_one,4099,10322096095657499359,54.920710,53.127507,53.001106,48.000000,5.001106,yes,Both,yes,"[1.0010388911274162,2.7784410636872319e-17,1.5423446207347879e-33,8.5617325492325808e-50]",1.0005193107218952608405970750027336180210113525390625,1.0005193107218951498457515954360620198623563387038363607072361122298411008899428 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,wide_exponent,4096,10322096095657499357,55.009451,53.211448,53.027507,48.000000,5.027507,yes,Both,yes,"[6.0219100959119555e-185,1.6714158101760344e-201,9.2782215808997173e-218,5.1504476133444428e-234]",7.7600967106808367478172926221258513837894764415588410983624981464748121495074265e-93,7.7600967106808375930900190108944118736382926995509918646504739659308953242516058e-93 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,extreme_finite,4096,10322096095657499295,54.924178,53.221411,53.017887,48.000000,5.017887,yes,Both,yes,"[2.3783259304591718e+282,6.6011805201470536e+265,3.664391301587163e+249,2.0341457971291071e+233]",1.542182197556168240060235866024934642345121301250108457830389998905645354877265e+141,1.5421821975561680709533351179752169384434445730363281277866248379626469712289668e+141 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,sqrt,native,double,native double,bl::sqrt,subnormal,4100,10322096095657499290,56.222608,53.192031,53.028655,48.000000,5.028655,yes,Both,yes,"[1.3924978593053044e-312,0,0,0]",1.1800414650787929320982458320284728300669497402903960639237252491051024255975799e-156,1.1800414650787930605326941577347439698813910767655579114793014150350187021874733e-156 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,moderate,4099,10322096095657499356,54.622083,52.468769,52.153023,48.000000,4.153023,yes,Both,yes,"[1.4533648333973588,4.033897753045631e-17,-2.2392630822074716e-33,1.2430407160299148e-49]",1.132726034706547313390956333023495972156524658203125,1.1327260347065475395950816870103535936661188861328342251597491513525714564878517 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,cbrt,native,double,native double,bl::cbrt,wide_exponent,4096,10322096095657499357,54.524419,52.302376,51.828370,48.000000,3.828370,yes,Both,yes,"[1.2341102646685055e-66,3.4253440769030517e-83,-1.9014479307205854e-99,1.0555156364059267e-115]",1.0726334135393147944540533616877040596517305799361325444193308170648393229384965e-22,1.0726334135393145261932376031478166833239128206765371006626749066582454186154407e-22 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,moderate,4099,10322096095657499356,54.875942,52.699142,52.296238,48.000000,4.296238,yes,Both,yes,"[-6.832833876256192,-1.8964923732145955e-16,1.0527647493844247e-32,-5.8440183214016046e-49] ; [4.4299110555054249,1.2295473127159131e-16,-6.8253586822159713e-33,3.7888351801606942e-49]",8.1432015043349768035341185168363153934478759765625,8.1432015043349753310215069499059937406110597175203571183027746754807131183654083 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,hypot,native,double,native double,bl::hypot,wide_exponent,4096,10322096095657499357,83.835524,53.981284,52.722096,48.000000,4.722096,yes,Both,yes,"[3.0900587929049188e-234,8.5766360483211479e-251,-4.7609894073381275e-267,2.6428800300116337e-283] ; [2.970069684721122e-242,8.2435993717964229e-259,-4.5761169141769325e-275,2.540255180747926e-291]",3.0900587929049193702454679907420486743297512979591235842153811313882487753757378e-234,3.0900587929049189543018606534397317978098396795986767283237714870956245237140656e-234 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,moderate,4099,10322096095657499356,55.113078,53.212981,52.982939,48.000000,4.982939,yes,Both,yes,"[-5.7279546273043369,-1.5898267778103705e-16,8.8253114694534815e-33,-4.8990319964378645e-49]",0.52713934110892768369893701674300245940685272216796875,0.52713934110892774291936789618839698785354771358638292015523278457552217658095189 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,sin,native,double,native double,bl::sin,argument_reduction,4114,10322096095657499282,55.226584,53.204656,53.024608,48.000000,5.024608,yes,Both,yes,"near 2^103 * pi/2 [1.5929767251982753e+31,0,0,0]",0.53627726761951810541262375409132800996303558349609375,0.53627726761951816394442418574940086586529943280164825512056702720586559068997775 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,moderate,4099,10322096095657499356,55.056788,53.175990,52.886447,48.000000,4.886447,yes,Both,-,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",0.5080030849914536350553362353821285068988800048828125,0.50800308499145369607356162136795610710790846414906949175872788247360372736565953 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,cos,native,double,native double,bl::cos,argument_reduction,4114,10322096095657499282,57.678400,53.190606,52.957009,48.000000,4.957009,yes,Both,-,"near 2^96 * pi/2 [-1.2445130665611575e+29,0,0,0]",-0.50225325592115044326391171125578694045543670654296875,-0.50225325592115050071185754648530613739144383428589081390350064471629529975977222 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,moderate,4099,10322096095657499356,54.966272,53.114050,52.830853,48.000000,4.830853,yes,Both,yes,"[-5.7949723984622032,-1.6084279459600013e-16,8.9285686952767023e-33,-4.956351271221794e-49]",0.5310948062764977439798030900419689714908599853515625,0.53109480627649781027783431456712262944491608720831668267909314089793071391325448 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,tan,native,double,native double,bl::tan,argument_reduction,4114,10322096095657499282,54.822185,53.100114,52.859084,45.000000,7.859084,yes,Both,yes,"near 2^104 * pi/2 [-3.185953450396556e+31,0,0,0]",-1.3480441969403991198106496085529215633869171142578125,-1.3480441969403989547915221380501138540709149655202515743993920841096117436418514 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,near_one,4099,10322096095657499359,55.076264,53.013973,52.693509,48.000000,4.693509,yes,Both,yes,"[0.69084897511107168,1.9174910967675087e-17,-1.0644213825725161e-33,5.9087256341767488e-50]",0.6045578974549419282169537837035022675991058349609375,0.60455789745494184521062137483289791333043169413541191538511529635270202509108926 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan,native,double,native double,bl::atan,moderate,4099,10322096095657499356,54.861464,53.032964,52.752464,48.000000,4.752464,yes,Both,yes,"[2.7271853311214098,7.5694598675774267e-17,-4.2018943144802738e-33,2.3325199074887691e-49]",1.219341175070450589146275888197124004364013671875,1.2193411750704504284332317205702958914241077638601847892988778474321517604825199 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,near_one,4099,10322096095657499359,54.993800,53.170510,53.040656,48.000000,5.040656,yes,Both,yes,"[1.3489527984700374,3.7440961399849353e-17,-2.0783908705107242e-33,1.1537386993058641e-49] ; [0.85379739020999446,2.3697638024400127e-17,-1.3154831681960814e-33,7.302398509190685e-50]",1.0065123671465141530489972865325398743152618408203125,1.0065123671465142616892414740655812810119461135218360142280212527802839300485563 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,moderate,4099,10322096095657499356,54.890567,53.179569,53.060948,48.000000,5.060948,yes,Both,yes,"[-4.7266626831272092,-1.311912435111087e-16,7.2825769587619272e-33,-4.0426423091110703e-49] ; [2.8962761555613667,8.0387811839426525e-17,-4.4624199801683043e-33,2.4771407037650929e-49]",-1.0210524446594291259060582888196222484111785888671875,-1.0210524446594292345764275054094005619467300994098247323364498554603476784958796 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,atan2,native,double,native double,bl::atan2,extreme_finite,8,10322096095657499293,62.132485,54.509980,54.509980,48.000000,6.509980,yes,Both,yes,"huge positive [1.6853373139334212e+307,4.6777507254719996e+290,-2.5966732794380218e+274,1.4414432311305024e+258] ; tiny negative [-2.7813423231340017e-308,-0,0,-0]",1.5707963267948965579989817342720925807952880859375,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,moderate,4099,10322096095657499356,54.899662,52.925254,52.422752,48.000000,4.422752,yes,Both,yes,"[-0.50335035028515207,-1.3970778708492839e-17,7.7553400970558289e-34,-4.3050785697750387e-50]",-0.527471766697775290566596595454029738903045654296875,-0.5274717666977753779398223907170077140407553909392966159005201438307403789636427 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,asin,native,double,native double,bl::asin,boundary,4105,10322096095657499355,54.919616,53.086611,53.066141,48.000000,5.066141,yes,Both,yes,"[-0.9999991973384238,-2.7755553337294841e-17,1.5407427188138168e-33,-8.552840207253314e-50]",-1.5695293132325520701897403341718018054962158203125,-1.5695293132325522366341318908043706690745267178940372928026218495677083294449175 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,moderate,4099,10322096095657499356,54.885315,52.858563,52.325679,48.000000,4.325679,yes,Both,-,"[-0.50414043989940849,-1.3992708100524456e-17,7.7675133550305953e-34,-4.3118360854191824e-50]",2.0991827056155738517873032833449542522430419921875,2.0991827056155742237087238848295169418258006344663652219436700791519481199702843 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,trigonometric,acos,native,double,native double,bl::acos,boundary,4105,10322096095657499355,54.933501,53.208019,53.015630,48.000000,5.015630,yes,Both,-,"[0.99999951942877319,2.7755562277097889e-17,-1.5407432150725758e-33,8.5528429620428158e-50]",0.00098037876895050468130377030462341281236149370670318603515625,0.00098037876895050478897482934485258576844002644995119255737105648210814670714088092 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,moderate,4099,10322096095657499356,54.974015,53.157024,53.019599,48.000000,5.019599,yes,Both,-,"[-2.7628513559780572,-7.6684529725591843e-17,4.2568465266952151e-33,-2.3630245131163269e-49]",0.063111558041546500508189865286112762987613677978515625,0.063111558041546493595944022576030893684783578049870680283049711049275225101317397 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp,native,double,native double,bl::exp,boundary,4099,10322096095657499289,54.951337,53.166873,53.022036,48.000000,5.022036,yes,Both,-,"[326.47996564801747,9.061639373531479e-15,-5.0302203366722636e-31,2.7923332183556269e-47]",6.1439480220514836164654240272397757603181465874882434277975712709632833055792003e+141,6.1439480220514842882409559528883970846034473863532678303012402569115463152702114e+141 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,moderate,4099,10322096095657499356,54.935841,53.180629,53.025408,48.000000,5.025408,yes,Both,-,"[5.0109819009809229,1.3908268706122392e-16,-7.7206400751053074e-33,4.2858161881128051e-49]",32.244515813988982699811458587646484375,32.244515813988979182444910558923716242085594124376112958709781738645907303764812 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,exp2,native,double,native double,bl::exp2,boundary,4099,10322096095657499289,54.972599,53.164620,53.020447,48.000000,5.020447,yes,Both,-,"[-250.99202946082733,-6.9664282526201528e-15,3.8671445227290451e-31,-2.1466964443434239e-47]",2.7788842653856641449312255150961427650361335071502829578141633319949134903163359e-76,2.7788842653856638407547596404961219062300898310358581460949384897692395968312002e-76 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,moderate,4099,10322096095657499356,55.059494,52.612144,51.837138,48.000000,3.837138,yes,Both,yes,"[-0.32815107029056989,-9.1080218447994713e-18,5.0559677804426335e-34,-2.80662592080518e-50]",-0.2797457975256689710619184552342630922794342041015625,-0.27974579752566904060118051629266816207002563378260620564372138557529344923417983 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,exponentials,expm1,native,double,native double,bl::expm1,cancellation,4098,10322096095657499288,83.154283,53.027983,51.974659,48.000000,3.974659,yes,Both,yes,"[4.0836650763983235e-12,0,0,0]",4.083665076406660708951440610569317006713074835744237134349532425403594970703125e-12,4.0836650764066616317750966948397766703517255100972299064045015820960692117527006e-12 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,near_one,4099,10322096095657499359,54.918146,53.166316,53.041728,48.000000,5.041728,yes,Both,-,"[1.1335639126739003,3.1462718893368611e-17,1.7465317466363379e-33,9.695198791772263e-50]",0.125366574619705295479121787138865329325199127197265625,0.12536657461970530900080502001741556309701459949497062977512985254006361141481408 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,wide_exponent,4096,10322096095657499357,54.929145,53.171869,53.045970,48.000000,5.045970,yes,Both,-,"[4.6261311118266506e+112,1.2840093188211806e+96,7.1276835479426902e+79,3.9566591935839502e+63]",259.421251321115732935140840709209442138671875,259.42125132111570503685832403601672523060244723042283551553508070299190699694996 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log,native,double,native double,bl::log,extreme_finite,4096,10322096095657499295,54.890700,53.179074,53.016960,48.000000,5.016960,yes,Both,-,"[2.0331470333148491e-224,5.6431166220861893e-241,3.1325590022425128e-257,1.7389195651432225e-273]",-515.069475975312570881214924156665802001953125,-515.06947597531262739711907680169329239742647250082611831496163075456316319684835 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,near_one,4099,10322096095657499359,54.995094,53.183432,52.964126,48.000000,4.964126,yes,Both,-,"[0.95724233546017334,2.656881202434606e-17,1.4748653423183355e-33,8.1871473063173968e-50]",-0.063043891274832619675549949533888138830661773681640625,-0.063043891274832612500047979104758712783348150384731080505578135007330599360108535 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,wide_exponent,4096,10322096095657499357,54.961217,53.191544,53.045986,48.000000,5.045986,yes,Both,-,"[1.6478667181302047e-79,4.5737489299541154e-96,2.5389406854448656e-112,1.4093952035692334e-128]",-261.71171993614638040526187978684902191162109375,-261.71171993614635226097107489196965564142826014659637604512890701616180385411886 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log2,native,double,native double,bl::log2,extreme_finite,4096,10322096095657499295,54.951425,53.191636,53.032071,48.000000,5.032071,yes,Both,-,"[3.0682846229157043e-158,8.5162005861608278e-175,4.7274409865410026e-191,2.624256915407243e-207]",-523.24720667460906042833812534809112548828125,-523.24720667460911724330320979055400330344628738302026449859537432674608012400159 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,near_one,4099,10322096095657499359,54.958860,53.143778,53.018669,48.000000,5.018669,yes,Both,-,"[0.74875470021249213,2.0782117699305384e-17,1.1536392785119411e-33,6.4039844455795532e-50]",-0.1256604383656476919828293148384545929729938507080078125,-0.12566043836564767821108349467351605169970965007622302204561391695316098182502685 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,wide_exponent,4096,10322096095657499357,55.006875,53.165767,53.021068,48.000000,5.021068,yes,Both,-,"[4.6201923918188489e+258,1.2823609928988147e+242,7.1185335009872046e+225,3.9515798971807595e+209]",258.66466006061358484657830558717250823974609375,258.66466006061361314780285273352542290302251199814003016169435342215632974918998 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log10,native,double,native double,bl::log10,extreme_finite,4096,10322096095657499295,54.953390,53.178424,53.029150,48.000000,5.029150,yes,Both,-,"[2.8445937992650119e+257,7.8953338291249174e+240,4.3827907020981923e+224,2.4329375747912342e+208]",257.45402025901483966663363389670848846435546875,257.45402025901486767802909135885153181987420064870956774702074158124472305183714 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,moderate,4099,10322096095657499356,54.942690,53.047619,52.277793,48.000000,4.277793,yes,Both,yes,"[1.8167026837397302,5.0423628709654062e-17,-2.7990736789304006e-33,1.5537980229853868e-49]",1.035566939745749426293741635163314640522003173828125,1.0355669397457496159618991192935896670346648660028939511409663282242925434700808 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,logarithms,log1p,native,double,native double,bl::log1p,cancellation,4098,10322096095657499288,83.171912,53.575868,52.537975,48.000000,4.537975,yes,Both,yes,"[-3.3317353930316975e-08,0,0,0]",-3.331735448534001895552398068121868757174297570600174367427825927734375e-08,-3.3317354485340024050756419560216456335223016311658126282401740088069247520016174e-08 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,near_one,4099,10322096095657499359,54.959214,53.190567,53.032687,48.000000,5.032687,yes,Both,yes,"[1.0146951632466654,2.8163448330305746e-17,1.563385439457318e-33,8.6785325562461659e-50] ; [0.67203279182024089,1.86526569695489e-17,1.0354304619014043e-33,5.7477936960060001e-50]",1.009851987115524707405711524188518524169921875,1.0098519871155248170101935707300539046159555693972004409710861335008920239838475 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,pow,native,double,native double,bl::pow,moderate,4099,10322096095657499356,54.935083,53.163311,53.017201,48.000000,5.017201,yes,Both,yes,"[5.9546289339047043,1.652741536380038e-16,9.1745585372173701e-33,5.0929030643950102e-49] ; [5.055011828311212,1.4030476303859041e-16,7.7884789195009855e-33,4.3234743116188276e-49]",8258.471810015818846295587718486785888671875,8258.4718100158197523034186342284236047260743845763155702907245462782899967304707 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,moderate,4099,10322096095657499356,53.278021,51.216249,50.843118,48.000000,2.843118,yes,Both,yes,"[-0.12598239680403012,-3.4967139407324243e-18,1.9410661637644512e-34,-1.0775081736660592e-50]",-5.036966535935927210927633319859086924452640232630074024200439453125e-07,-5.0369665359359247171059931113138371384365138382213074202619030423806648231460384e-07 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,roots_and_powers,ipow,native,double,native double,bl::ipow,wide_exponent,4096,10322096095657499357,53.261106,51.258453,50.915855,48.000000,2.915855,yes,Both,yes,"[3178858.3859193348,8.8231044301760176e-11,-4.8978068435268183e-27,2.7188289639250675e-43]",3280184465858375893424625758878219769323978752,3280184465858377437606968244219065735294846924.9874778095912486192020477914613844 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,fmod,native,double,native double,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,48.000000,inf,yes,Both,yes,"[3.1588709556304993e+103,8.7676281669016289e+86,4.8670113311231216e+70,2.7017340204622107e+54] ; [5.476364839089647e-60,1.5199965839012416e-76,8.4376760239937101e-93,4.6838510980827309e-109]",4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60,4.6892243444523955957558442880674244285503596296225054633906873454385660969115419e-60 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,remainders,remainder,native,double,native double,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,48.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,near_one,4099,10322096095657499359,54.924799,52.983593,52.654993,48.000000,4.654993,yes,Both,yes,"[1.4755959292519478,4.095601439246665e-17,-2.2735155087697884e-33,1.262054632339298e-49]",2.0724994727921046688834394444711506366729736328125,2.072499472792104961138580290412029520398475094027248170955683086677283903718196 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,sinh,native,double,native double,bl::sinh,moderate,4099,10322096095657499356,54.840090,52.839907,52.382195,48.000000,4.382195,yes,Both,yes,"[-4.8693204451967098,-1.3515079181338512e-16,7.5023760433770639e-33,-4.1646553113766992e-49]",-65.112354096910877387927030213177204132080078125,-65.112354096910888480990202630806761852448902953289356801355801975240320907331551 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,near_one,4099,10322096095657499359,54.876574,52.853190,52.621517,48.000000,4.621517,yes,Both,-,"[0.98058054916848769,2.7216577579660886e-17,-1.5108235540218166e-33,8.3867554791051488e-50]",1.520548407211194774646401128848083317279815673828125,1.5205484072111945551914719285992945947565561251918943368316691032158941972807884 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,cosh,native,double,native double,bl::cosh,moderate,4099,10322096095657499356,54.744398,52.689522,52.208160,48.000000,4.208160,yes,Both,-,"[-2.8630251231866755,-7.9464910296053056e-17,4.4111886530225384e-33,-2.4487016042754264e-49]",8.785762981329629184301666100509464740753173828125,8.7857629813296308730208849350993320141187458453483631911030801892035180406191378 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,near_one,4099,10322096095657499359,54.955827,52.958304,52.476216,48.000000,4.476216,yes,Both,yes,"[0.89084068064074273,2.4725795873002463e-17,-1.3725573940194504e-33,7.6192241072994848e-50]",0.711808711646828573549328211811371147632598876953125,0.7118087116468284599310366212933242511249465496496718227001725734620301911684374 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,hyperbolic,tanh,native,double,native double,bl::tanh,moderate,4099,10322096095657499356,55.336545,53.363803,52.830364,48.000000,4.830364,yes,Both,yes,"[0.67537377842904966,1.8745387976000496e-17,-1.0405780668243656e-33,5.7763686435417271e-50]",0.588503635448117012884949872386641800403594970703125,0.58850363544811708637439156576610391440217714992619984433185413295933594686347521 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,near_one,4099,10322096095657499359,54.586548,52.369737,51.895905,48.000000,3.895905,yes,Both,yes,"[0.53254928863989415,1.478121204989397e-17,-8.2052209748295468e-34,4.5548126241965174e-50]",0.51013370703315696896851250130566768348217010498046875,0.51013370703315709071599184668017064813861078342675097769291318040468214812208369 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,asinh,native,double,native double,bl::asinh,moderate,4099,10322096095657499356,54.727697,52.598947,51.750916,48.000000,3.750916,yes,Both,yes,"[-0.12598239680403012,-3.4967139407324243e-18,1.9410661637644512e-34,-1.0775081736660592e-50]",-0.1256514984566571013768765396889648400247097015380859375,-0.12565149845665706821878409248510840880181855230517373980735012913432134271301342 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,moderate,4099,10322096095657499286,54.952709,52.808130,51.870988,48.000000,3.870988,yes,Both,-,"[1.1775265887662758,3.268292827391594e-17,-1.8142669740937001e-33,1.0071204837279191e-49]",0.58738281392912294887054258651915006339550018310546875,0.58738281392912280624478083650309327648102437309781099318842251949855802008569812 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,acosh,native,double,native double,bl::acosh,boundary,4101,10322096095657499355,54.339815,51.870916,51.455052,48.000000,3.455052,yes,Both,-,"[1.0000005503151308,2.7755590889942139e-17,-1.5407448034045001e-33,8.5528517790561814e-50]",0.00104910922245869653833538759357679737149737775325775146484375,0.0010491092224586968782004774758273759261911295412788923059743654980738407419350006 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,moderate,4099,10322096095657499356,54.578729,52.340848,51.786806,48.000000,3.786806,yes,Both,yes,"[-0.49545345377814692,-1.3751595800363862e-17,7.6336691414512835e-34,-4.2375376216048829e-50]",-0.54326232788789219352310055910493247210979461669921875,-0.54326232788789205368437589517863805325010858337223961824526704311193509051969914 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,inverse_hyperbolic,atanh,native,double,native double,bl::atanh,boundary,4105,10322096095657499355,55.375335,53.840397,53.427151,48.000000,5.427151,yes,Both,yes,"[-0.5,0,0,0]",-0.54930614433405489105410879346891306340694427490234375,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,near_one,4099,10322096095657499359,54.019854,51.750997,51.093455,48.000000,3.093455,yes,Both,yes,"[0.51751407869686006,1.4363901143423232e-17,-7.9735668864340423e-34,4.4262187728538973e-50]",0.53575539526306104054498291588970459997653961181640625,0.53575539526306126354449913496849026907542658974119733621009662651072178280690274 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erf,native,double,native double,bl::erf,moderate,4099,10322096095657499356,59.546056,52.095594,51.417655,48.000000,3.417655,yes,Both,yes,"[-0.51697425326334745,-1.4348917977784133e-17,7.9652495586968923e-34,-4.4216017284753286e-50]",-0.53528925503141955299923893107916228473186492919921875,-0.53528925503141937503523518533749845780941284936029851836201775604219807148329816 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,near_one,4099,10322096095657499359,54.238757,52.047080,51.413451,48.000000,3.413451,yes,Both,-,"[1.3127470131510215,3.6436048987704181e-17,-2.0226070256259654e-33,1.1227724448092754e-49]",0.06338166370075233591041552472233888693153858184814453125,0.063381663700752357043981488713887430626454842957042886947643364361888596761458652 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,erfc,native,double,native double,bl::erfc,moderate,4099,10322096095657499356,56.954094,51.522059,50.938586,48.000000,2.938586,yes,Both,-,"[4.4724300649764519,1.2413487085406605e-16,-6.8908695890527197e-33,3.82520103872781e-49]",2.532797278373559493889186606889983577328706587650231085717678070068359375e-10,2.5327972783735583201867808196745632452377777984379745134701129911583856224598831e-10 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,lgamma,native,double,native double,bl::lgamma,moderate,4099,10322096095657499287,54.454740,52.093832,51.363446,48.000000,3.363446,yes,Both,-,"[1.1903429521686997,3.3038653817449295e-17,-1.8340137085376015e-33,1.0180821233483081e-49]",-0.0825234979651145172940829297658638097345829010009765625,-0.082523497965114488807540710102364103239432281521113914990549637246092147129738611 +6,d41bd002f1d24cc895b59fbe85745167,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f64,special_functions,tgamma,native,double,native double,bl::tgamma,moderate,4099,10322096095657499284,53.611781,51.017778,50.584862,48.000000,2.584862,yes,Both,-,"[16.268960066207903,4.5155435130528063e-16,-2.5066301884439958e-32,1.3914592747155096e-48]",2739547473402.04345703125,2739547473402.0450792820033714382601954608901884806869470278424770198729645511427 diff --git a/validation/metrics/data/native/strict/d41bd002f1d24cc895b59fbe85745167/native_accuracy_run.json b/validation/metrics/data/native/strict/d41bd002f1d24cc895b59fbe85745167/native_accuracy_run.json new file mode 100644 index 0000000..1f1bdca --- /dev/null +++ b/validation/metrics/data/native/strict/d41bd002f1d24cc895b59fbe85745167/native_accuracy_run.json @@ -0,0 +1,90 @@ +{ + "accuracy_samples": 4096, + "architecture": "x86_64", + "compiler": "MSVC", + "configuration": { + "build": { + "architecture": "x86_64", + "compiler-id": "MSVC", + "compiler-version": "19.51.36244.0", + "config": "Release", + "flags-hash": "a7783233a2a1c2360aa486f3fcd069edd7b754c80c337bb23b401ee04591097b", + "frontend-variant": "MSVC", + "optimized": "1", + "processor": "AMD64", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Windows" + }, + "consumer": { + "arm64": "0", + "fast-math": "off", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "1" + }, + "harness": { + "qdpp": "on", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "available", + "simd": "on", + "tu-x86-fma": "0", + "x86": "1" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "0", + "f256-simd": "1", + "msvc-guarded": "1", + "neon": "0", + "runtime-check": "1", + "runtime-path": "1", + "scalar-x86": "0", + "sse2": "1", + "trig-simd": "1", + "wasm-simd": "0" + } + }, + "consumer_mode": "strict", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-msvc-release\\validation\\fltx_accuracy.exe", + "sha256": "4ba63c29232cb5d0d74635804780276bdf11d4529a230167a9310b851eb0b829", + "wasm-sha256": "not-present" + } + }, + "host": { + "machine": "AMD64", + "node": "not-used", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "outputs": { + "f32_accuracy.csv": "be0f3493662b24ed004f894ee5f3e889390473194908a051ea0def9856da357e", + "f64_accuracy.csv": "79d7bc3ad17a54cb6a87e9efbf825c5adeb1c89055510000f679389db49f7b66" + }, + "platform": "windows", + "policy": "native-float-libm-baseline-v1", + "precisions": [ + "f32", + "f64" + ], + "run_id": "d41bd002f1d24cc895b59fbe85745167", + "sample_mode": "standard", + "schema_version": 2, + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete", + "target": "windows/x86_64/MSVC", + "thresholds": "advisory" +} diff --git a/validation/metrics/data/wasm32/wasm32/Emscripten_f128.csv b/validation/metrics/data/wasm32/wasm32/Emscripten_f128.csv new file mode 100644 index 0000000..4147d44 --- /dev/null +++ b/validation/metrics/data/wasm32/wasm32/Emscripten_f128.csv @@ -0,0 +1,292 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,4096,120.266239506,106.483519,105.736235,2,2,15.736235,yes,Both,no,2.388581,1.315114,07cb9aa0af7241f981735eab48f97723 +arithmetic,add,f128,fltx,fltx,fltx bl::f128,bl::add,4096,120.266239506,106.483519,105.736235,2,2,15.736235,yes,Both,no,1.816254,,07cb9aa0af7241f981735eab48f97723 +arithmetic,add,f128,qdpp,ddreal,qdpp dd_real,qdpp operator+,4096,120.266239506,106.483519,105.736235,2,2,15.736235,yes,NaN,no,0.926275,0.509992,07cb9aa0af7241f981735eab48f97723 +arithmetic,add,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,4096,127.004869623,113.252951,113.031307,2,2,23.031307,yes,No,no,30.923462,17.02596,07cb9aa0af7241f981735eab48f97723 +arithmetic,divide,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator/,4100,110.909104952,105.971646,105.124683,2,2,15.124683,yes,NaN,no,5.823508,2.302496,07cb9aa0af7241f981735eab48f97723 +arithmetic,divide,f128,fltx,fltx,fltx bl::f128,bl::divide,4100,110.909104952,105.971646,105.124683,2,2,15.124683,yes,Both,yes,2.529215,,07cb9aa0af7241f981735eab48f97723 +arithmetic,divide,f128,qdpp,ddreal,qdpp dd_real,qdpp operator/,4100,110.735880117,106.129356,105.462052,2,2,15.462052,yes,NaN,no,13.223796,5.228418,07cb9aa0af7241f981735eab48f97723 +arithmetic,divide,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,4100,114.962938068,113.147176,113.003421,2,2,23.003421,yes,No,no,97.207031,38.433669,07cb9aa0af7241f981735eab48f97723 +arithmetic,multiply,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,4100,108.546950295,105.172405,104.685792,2,2,14.685792,yes,Both,no,3.142016,1.956819,07cb9aa0af7241f981735eab48f97723 +arithmetic,multiply,f128,fltx,fltx,fltx bl::f128,bl::multiply,4100,108.702461473,105.665876,105.380753,2,2,15.380753,yes,Both,yes,1.605675,,07cb9aa0af7241f981735eab48f97723 +arithmetic,multiply,f128,qdpp,ddreal,qdpp dd_real,qdpp operator*,4100,108.702461473,105.665876,105.380753,2,2,15.380753,yes,NaN,no,1.750554,1.090229,07cb9aa0af7241f981735eab48f97723 +arithmetic,multiply,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,4100,114.973330655,113.125729,113.004612,2,2,23.004612,yes,No,no,43.775228,27.262814,07cb9aa0af7241f981735eab48f97723 +arithmetic,subtract,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,4096,120.053476095,106.530508,105.744857,2,2,15.744857,yes,Both,no,2.403518,1.329231,07cb9aa0af7241f981735eab48f97723 +arithmetic,subtract,f128,fltx,fltx,fltx bl::f128,bl::subtract,4096,120.053476095,106.530508,105.744857,2,2,15.744857,yes,Both,no,1.808202,,07cb9aa0af7241f981735eab48f97723 +arithmetic,subtract,f128,qdpp,ddreal,qdpp dd_real,qdpp operator-,4096,120.053476095,106.530508,105.744857,2,2,15.744857,yes,NaN,no,0.91877,0.508112,07cb9aa0af7241f981735eab48f97723 +arithmetic,subtract,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,4096,127.171548646,113.274079,113.01331,2,2,23.01331,yes,No,no,30.689087,16.972159,07cb9aa0af7241f981735eab48f97723 +comparisons,equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.487466,1.341205,07cb9aa0af7241f981735eab48f97723 +comparisons,equal,f128,fltx,fltx,fltx bl::f128,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.109053,,07cb9aa0af7241f981735eab48f97723 +comparisons,equal,f128,qdpp,ddreal,qdpp dd_real,qdpp operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.802459,0.723554,07cb9aa0af7241f981735eab48f97723 +comparisons,equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,4.388152,3.956667,07cb9aa0af7241f981735eab48f97723 +comparisons,greater,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.781024,0.856796,07cb9aa0af7241f981735eab48f97723 +comparisons,greater,f128,fltx,fltx,fltx bl::f128,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.078702,,07cb9aa0af7241f981735eab48f97723 +comparisons,greater,f128,qdpp,ddreal,qdpp dd_real,qdpp operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.515762,0.729187,07cb9aa0af7241f981735eab48f97723 +comparisons,greater,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.280096,2.540092,07cb9aa0af7241f981735eab48f97723 +comparisons,greater_equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.77769,0.85216,07cb9aa0af7241f981735eab48f97723 +comparisons,greater_equal,f128,fltx,fltx,fltx bl::f128,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.086099,,07cb9aa0af7241f981735eab48f97723 +comparisons,greater_equal,f128,qdpp,ddreal,qdpp dd_real,qdpp operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.493462,0.715912,07cb9aa0af7241f981735eab48f97723 +comparisons,greater_equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.270219,2.526352,07cb9aa0af7241f981735eab48f97723 +comparisons,less,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.762595,0.860897,07cb9aa0af7241f981735eab48f97723 +comparisons,less,f128,fltx,fltx,fltx bl::f128,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.047395,,07cb9aa0af7241f981735eab48f97723 +comparisons,less,f128,qdpp,ddreal,qdpp dd_real,qdpp operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.497976,0.73165,07cb9aa0af7241f981735eab48f97723 +comparisons,less,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.280239,2.579004,07cb9aa0af7241f981735eab48f97723 +comparisons,less_equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.63943,0.309117,07cb9aa0af7241f981735eab48f97723 +comparisons,less_equal,f128,fltx,fltx,fltx bl::f128,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.068569,,07cb9aa0af7241f981735eab48f97723 +comparisons,less_equal,f128,qdpp,ddreal,qdpp dd_real,qdpp operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.520536,0.735067,07cb9aa0af7241f981735eab48f97723 +comparisons,less_equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.26689,2.546152,07cb9aa0af7241f981735eab48f97723 +comparisons,not_equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.198586,1.076133,07cb9aa0af7241f981735eab48f97723 +comparisons,not_equal,f128,fltx,fltx,fltx bl::f128,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.11379,,07cb9aa0af7241f981735eab48f97723 +comparisons,not_equal,f128,qdpp,ddreal,qdpp dd_real,qdpp operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.804375,0.722196,07cb9aa0af7241f981735eab48f97723 +comparisons,not_equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,4.386144,3.938035,07cb9aa0af7241f981735eab48f97723 +exponentials,exp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,8198,100.3727745,0,0,1,2,-80,no,Both,-,309.828404,2.622688,07cb9aa0af7241f981735eab48f97723 +exponentials,exp,f128,fltx,fltx,fltx bl::f128,bl::exp,8198,106.9878975,104.337314,103.64511,2,2,23.64511,yes,Both,-,118.133904,,07cb9aa0af7241f981735eab48f97723 +exponentials,exp,f128,qdpp,ddreal,qdpp dd_real,qdpp exp,8198,106.824486,104.205832,103.671903,2,2,23.671903,yes,Both,-,148.026982,1.253044,07cb9aa0af7241f981735eab48f97723 +exponentials,exp,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,8198,114.9390545,113.155192,113.027016,2,2,33.027016,yes,No,-,971.855469,8.226728,07cb9aa0af7241f981735eab48f97723 +exponentials,exp2,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,8198,101.653295,96.37431,95.216729,2,2,15.216729,yes,Both,-,701.049805,6.279175,07cb9aa0af7241f981735eab48f97723 +exponentials,exp2,f128,fltx,fltx,fltx bl::f128,bl::exp2,8198,108.8963935,106.013023,105.117537,2,2,25.117537,yes,Both,-,111.646793,,07cb9aa0af7241f981735eab48f97723 +exponentials,exp2,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,8198,114.9915935,113.141516,113.011731,2,2,33.011731,yes,No,-,2862.133789,25.635611,07cb9aa0af7241f981735eab48f97723 +exponentials,expm1,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,8197,120.35002086,101.057168,100.341101,2,2,20.341101,yes,Both,no,323.127093,2.732681,07cb9aa0af7241f981735eab48f97723 +exponentials,expm1,f128,fltx,fltx,fltx bl::f128,bl::expm1,8197,121.61686848,105.111574,104.102752,2,2,24.102752,yes,Both,yes,118.245443,,07cb9aa0af7241f981735eab48f97723 +exponentials,expm1,f128,qdpp,ddreal,qdpp dd_real,qdpp expm1,8197,121.518391029,104.81583,0,1,2,-80,no,NaN,no,150.350516,1.271512,07cb9aa0af7241f981735eab48f97723 +exponentials,expm1,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,8197,128.181752377,113.238852,113.009736,2,2,33.009736,yes,No,no,1041.015625,8.803854,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,abs,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,1.228841,1.517721,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,abs,f128,fltx,fltx,fltx bl::f128,bl::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,0.809662,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,abs,f128,qdpp,ddreal,qdpp dd_real,qdpp abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,3.395209,4.193365,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,abs,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,8196,inf,inf,inf,2,2,inf,yes,No,yes,2.706636,3.342919,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,copysign,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,no,0.871318,2.262811,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,copysign,f128,fltx,fltx,fltx bl::f128,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,0.38506,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,copysign,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::copysign,4099,inf,inf,inf,1,1,inf,yes,No,no,6.483471,16.837564,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fabs,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,0.650049,0.805331,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fabs,f128,fltx,fltx,fltx bl::f128,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,0.807183,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fabs,f128,qdpp,ddreal,qdpp dd_real,qdpp fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,3.403426,4.216426,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fabs,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,4099,inf,inf,inf,1,1,inf,yes,No,yes,2.697353,3.341688,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fdim,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,8197,137.996123973,inf,106.227061,2,2,16.227061,yes,No,yes,3.36202,1.109805,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fdim,f128,fltx,fltx,fltx bl::f128,bl::fdim,8197,137.996123973,inf,106.227061,2,2,16.227061,yes,Both,yes,3.029378,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fdim,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,8197,inf,inf,inf,2,2,inf,yes,No,yes,29.233398,9.649966,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fma,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,12293,75.7644862641,0,0,2,3,-90,no,Both,no,15.813927,2.008288,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fma,f128,fltx,fltx,fltx bl::f128,bl::fma,12293,117.44188202,104.680325,99.5802,3,3,9.5802,yes,Both,no,7.874333,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fma,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,12293,128.420266387,113.182994,113.025245,3,3,23.025245,yes,No,no,61.557007,7.817425,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fmax,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,yes,2.923823,0.995237,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fmax,f128,fltx,fltx,fltx bl::f128,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,yes,2.937816,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fmax,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,8195,inf,inf,inf,2,2,inf,yes,No,no,10.252441,3.489818,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fmin,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,no,2.912977,0.996788,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fmin,f128,fltx,fltx,fltx bl::f128,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,yes,2.922363,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fmin,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,8195,inf,inf,inf,2,2,inf,yes,No,no,11.236666,3.845061,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,frexp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,no,2.793579,0.773836,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,frexp,f128,fltx,fltx,fltx bl::f128,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,3.610041,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,frexp,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,8196,inf,inf,inf,2,2,inf,yes,No,no,10.804443,2.992887,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,ilogb,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,2.119123,1.017389,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,ilogb,f128,fltx,fltx,fltx bl::f128,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,2.082902,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,ilogb,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.56506,0.751384,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,ldexp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,2.069445,1.142663,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,ldexp,f128,fltx,fltx,fltx bl::f128,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.811072,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,ldexp,f128,qdpp,ddreal,qdpp dd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,1.901832,1.050114,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,ldexp,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::ldexp,4096,inf,inf,inf,1,1,inf,yes,No,no,11.592079,6.400673,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,logb,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,97.200928,50.759865,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,logb,f128,fltx,fltx,fltx bl::f128,bl::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,1.914917,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,modf,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,8195,inf,inf,inf,2,2,inf,yes,NaN,no,7.032471,1.01516,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,modf,f128,fltx,fltx,fltx bl::f128,bl::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,6.927448,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,modf,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,8195,inf,inf,inf,2,2,inf,yes,No,no,32.895101,4.748516,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,nextafter,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter,,,,,,,,,-,-,23.27124,4.280359,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,nextafter,f128,fltx,fltx,fltx bl::f128,bl::nextafter,,,,,,,,,-,-,5.43675,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,nextafter,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter,,,,,,,,,-,-,14.336722,2.637002,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,nexttoward,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter (same type),,,,,,,,,-,-,23.309326,4.289084,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,nexttoward,f128,fltx,fltx,fltx bl::f128,bl::nexttoward,,,,,,,,,-,-,5.43457,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,nexttoward,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter (same type),,,,,,,,,-,-,14.28493,2.62853,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,recip,f128,fltx,fltx,fltx bl::f128,bl::recip,8195,109.025331959,105.925795,105.189487,2,2,15.189487,yes,Both,yes,48.166726,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,recip,f128,qdpp,ddreal,qdpp dd_real,qdpp inv,8195,109.417670682,106.810343,106.471075,2,2,16.471075,yes,NaN,no,13.566946,0.281666,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,scalbln,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,no,2.056448,1.090628,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,scalbln,f128,fltx,fltx,fltx bl::f128,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.885564,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,scalbln,f128,qdpp,ddreal,qdpp dd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,1.905276,1.010454,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,scalbn,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,no,2.074372,1.103238,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,scalbn,f128,fltx,fltx,fltx bl::f128,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.880258,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,scalbn,f128,qdpp,ddreal,qdpp dd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,1.904412,1.012846,07cb9aa0af7241f981735eab48f97723 +hyperbolic,cosh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,8198,104.0385055,101.138682,100.616889,2,2,20.616889,yes,Both,-,334.446364,2.487688,07cb9aa0af7241f981735eab48f97723 +hyperbolic,cosh,f128,fltx,fltx,fltx bl::f128,bl::cosh,8198,107.9070545,105.118172,104.370708,2,2,24.370708,yes,Both,-,134.440613,,07cb9aa0af7241f981735eab48f97723 +hyperbolic,cosh,f128,qdpp,ddreal,qdpp dd_real,qdpp cosh,8198,107.6737085,104.881438,104.111506,2,2,24.111506,yes,NaN,-,183.207371,1.362738,07cb9aa0af7241f981735eab48f97723 +hyperbolic,cosh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,8198,114.913131,113.167572,113.010341,2,2,33.010341,yes,No,-,1051.591797,7.82198,07cb9aa0af7241f981735eab48f97723 +hyperbolic,sinh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,8198,103.5471475,100.590468,99.932085,2,2,19.932085,yes,Both,no,334.476725,2.475104,07cb9aa0af7241f981735eab48f97723 +hyperbolic,sinh,f128,fltx,fltx,fltx bl::f128,bl::sinh,8198,107.4201585,104.726423,103.568829,2,2,23.568829,yes,Both,yes,135.136414,,07cb9aa0af7241f981735eab48f97723 +hyperbolic,sinh,f128,qdpp,ddreal,qdpp dd_real,qdpp sinh,8198,106.988346,104.381391,103.645559,2,2,23.645559,yes,NaN,no,184.022588,1.361754,07cb9aa0af7241f981735eab48f97723 +hyperbolic,sinh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,8198,114.9589025,113.141428,113.003172,2,2,33.003172,yes,No,no,1119.885254,8.287072,07cb9aa0af7241f981735eab48f97723 +hyperbolic,tanh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,8198,105.787236,101.155017,100.345784,2,2,20.345784,yes,Both,no,350.176532,2.471806,07cb9aa0af7241f981735eab48f97723 +hyperbolic,tanh,f128,fltx,fltx,fltx bl::f128,bl::tanh,8198,109.217494,105.123457,103.771823,2,2,23.771823,yes,Both,yes,141.668294,,07cb9aa0af7241f981735eab48f97723 +hyperbolic,tanh,f128,qdpp,ddreal,qdpp dd_real,qdpp tanh,8198,109.266952,105.403737,104.022939,2,2,24.022939,yes,Both,no,187.546705,1.323844,07cb9aa0af7241f981735eab48f97723 +hyperbolic,tanh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,8198,115.2023705,113.224776,113.018718,2,2,33.018718,yes,Inf,no,1086.560059,7.669748,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,acosh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,8200,105.608077901,101.710952,100.384388,2,2,20.384388,yes,Both,-,726.123047,4.295196,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,acosh,f128,fltx,fltx,fltx bl::f128,bl::acosh,8200,108.031519376,104.331717,103.672888,2,2,23.672888,yes,Both,-,169.054688,,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,acosh,f128,qdpp,ddreal,qdpp dd_real,qdpp acosh,8200,107.21812779,103.93482,0,0,2,-80,no,NaN,-,199.986683,1.18297,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,acosh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,8200,114.902573821,113.201891,113.024351,2,2,33.024351,yes,No,-,5874.755859,34.750624,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,asinh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,8198,104.4629695,100.780938,99.800033,2,2,19.800033,yes,Both,no,611.907087,4.226301,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,asinh,f128,fltx,fltx,fltx bl::f128,bl::asinh,8198,108.081857,105.155677,103.818628,2,2,23.818628,yes,Both,yes,144.785493,,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,asinh,f128,qdpp,ddreal,qdpp dd_real,qdpp asinh,8198,107.0725635,103.961722,0,1,2,-80,no,NaN,no,205.77567,1.421245,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,asinh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,8198,114.8781205,113.122222,113.007648,2,2,33.007648,yes,No,no,6172.558594,42.632438,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,atanh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,8204,106.72715846,102.147896,101.316477,2,2,21.316477,yes,Both,no,2622.509766,15.597038,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,atanh,f128,fltx,fltx,fltx bl::f128,bl::atanh,8204,108.11583849,104.54201,103.139045,2,2,23.139045,yes,Both,yes,168.141526,,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,atanh,f128,qdpp,ddreal,qdpp dd_real,qdpp atanh,8204,107.608291622,104.408425,0,1,2,-80,no,Both,no,206.474609,1.227981,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,atanh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,8204,115.135452038,113.183849,113.00948,2,2,33.00948,yes,No,no,1477.685547,8.788344,07cb9aa0af7241f981735eab48f97723 +io,parse,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,8195,107.103916819,0,0,1,2,-106,no,Both,no,2353.647231,9.188579,07cb9aa0af7241f981735eab48f97723 +io,parse,f128,fltx,fltx,fltx bl::f128,bl::parse,8195,109.936763821,107.051396,106.003381,2,2,0.003381,yes,Both,yes,256.149196,,07cb9aa0af7241f981735eab48f97723 +io,parse,f128,qdpp,ddreal,qdpp dd_real,qdpp read,8195,102.529802279,0,0,0,2,-106,no,NaN,yes,254.118891,0.992074,07cb9aa0af7241f981735eab48f97723 +io,parse,f128,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,8195,114.932563094,113.157032,113.020059,2,2,7.020059,yes,No,no,1621.993169,6.33222,07cb9aa0af7241f981735eab48f97723 +io,to_chars,f128,fltx,fltx,fltx bl::f128,bl::to_chars,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,239.070505,,07cb9aa0af7241f981735eab48f97723 +io,to_chars,f128,qdpp,ddreal,qdpp dd_real,qdpp write,8195,109.446520281,102.378174,102.257899,2,2,12.257899,yes,Both,no,1299.158331,5.434206,07cb9aa0af7241f981735eab48f97723 +io,to_string,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,8195,110.768659892,106.034942,105.994061,2,2,15.994061,yes,Both,no,1160.331788,3.95052,07cb9aa0af7241f981735eab48f97723 +io,to_string,f128,fltx,fltx,fltx bl::f128,bl::to_string,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,293.716237,,07cb9aa0af7241f981735eab48f97723 +io,to_string,f128,qdpp,ddreal,qdpp dd_real,qdpp to_string,8195,109.446520281,102.378174,102.257899,2,2,12.257899,yes,Both,no,1278.116614,4.351535,07cb9aa0af7241f981735eab48f97723 +io,to_string,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,8195,110.6557863,107.628363,107.30463,2,2,17.30463,yes,Both,yes,2108.416687,7.178414,07cb9aa0af7241f981735eab48f97723 +logarithms,log,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,12291,105.262026681,95.715279,87.939907,3,3,7.939907,yes,Both,-,342.897386,2.207805,07cb9aa0af7241f981735eab48f97723 +logarithms,log,f128,fltx,fltx,fltx bl::f128,bl::log,12291,108.40767633,104.625423,103.727726,3,3,23.727726,yes,Both,-,155.311415,,07cb9aa0af7241f981735eab48f97723 +logarithms,log,f128,qdpp,ddreal,qdpp dd_real,qdpp log,12291,101.531624606,62.215356,61.346954,2,3,-18.653046,no,NaN,-,175.199219,1.128051,07cb9aa0af7241f981735eab48f97723 +logarithms,log,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log,12291,115.112527379,113.162642,113.007854,3,3,33.007854,yes,No,-,1358.898926,8.749511,07cb9aa0af7241f981735eab48f97723 +logarithms,log10,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,12291,102.940499823,95.718828,87.939938,3,3,7.939938,yes,Both,-,356.475361,2.191088,07cb9aa0af7241f981735eab48f97723 +logarithms,log10,f128,fltx,fltx,fltx bl::f128,bl::log10,12291,107.503050022,104.469291,103.762278,3,3,23.762278,yes,Both,-,162.693278,,07cb9aa0af7241f981735eab48f97723 +logarithms,log10,f128,qdpp,ddreal,qdpp dd_real,qdpp log10,12291,101.344497492,62.215356,61.346954,2,3,-18.653046,no,NaN,-,201.318359,1.23741,07cb9aa0af7241f981735eab48f97723 +logarithms,log10,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,12291,114.873180067,113.138717,113.007632,3,3,33.007632,yes,No,-,1428.503418,8.780347,07cb9aa0af7241f981735eab48f97723 +logarithms,log1p,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,8197,119.744590367,101.291508,100.173624,2,2,20.173624,yes,Both,no,472.005208,2.989074,07cb9aa0af7241f981735eab48f97723 +logarithms,log1p,f128,fltx,fltx,fltx bl::f128,bl::log1p,8197,121.372231555,105.150365,103.619384,2,2,23.619384,yes,Both,yes,157.910156,,07cb9aa0af7241f981735eab48f97723 +logarithms,log1p,f128,qdpp,ddreal,qdpp dd_real,qdpp log1p,8197,120.89136722,104.605109,103.7953,2,2,23.7953,yes,NaN,no,171.380859,1.085306,07cb9aa0af7241f981735eab48f97723 +logarithms,log1p,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,8197,128.112358976,113.130249,113.010769,2,2,33.010769,yes,No,no,1393.294271,8.823335,07cb9aa0af7241f981735eab48f97723 +logarithms,log2,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,12291,106.566326163,95.715106,87.939906,3,3,7.939906,yes,Both,-,356.126052,2.189913,07cb9aa0af7241f981735eab48f97723 +logarithms,log2,f128,fltx,fltx,fltx bl::f128,bl::log2,12291,108.785650924,104.550799,103.716432,3,3,23.716432,yes,Both,-,162.621094,,07cb9aa0af7241f981735eab48f97723 +logarithms,log2,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,12291,116.314749653,113.191847,113.016527,3,3,33.016527,yes,No,-,1434.505208,8.821151,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,affine_trig,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,934.794463,3.850459,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,affine_trig,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,242.774843,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,affine_trig,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,315.421512,1.299235,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,affine_trig,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,2044.223485,8.420244,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,chained_arithmetic,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,26.487837,0.86596,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,chained_arithmetic,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,30.587839,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,chained_arithmetic,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,41.955188,1.37163,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,chained_arithmetic,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,181.086072,5.920198,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,haversine,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,5943.682796,10.402396,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,haversine,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,571.37633,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,haversine,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,954.211111,1.670022,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,haversine,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,6555.357143,11.472924,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,horner_polynomial,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,115.838862,0.664307,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,horner_polynomial,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,174.37549,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,horner_polynomial,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,97.559331,0.559478,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,horner_polynomial,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,774.822231,4.443412,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,log_sum_exp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,2602.941176,2.656328,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,log_sum_exp,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,979.902184,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,log_sum_exp,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,1137.874871,1.161213,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,log_sum_exp,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,8965.202703,9.149079,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,mandelbrot,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,19.82361,0.929567,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,mandelbrot,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,21.32563,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,mandelbrot,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,15.202366,0.712868,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,mandelbrot,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,210.170541,9.855303,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,matrix_vector_4x4,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,80.099839,1.15573,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,matrix_vector_4x4,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,69.306735,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,matrix_vector_4x4,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,59.979869,0.865426,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,matrix_vector_4x4,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,796.360887,11.490382,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,newton_root,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,36.493333,0.914805,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,newton_root,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,39.891933,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,newton_root,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,48.503966,1.215884,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,newton_root,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,282.978103,7.093617,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,product_sum,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same expression,,,,,,,,,-,-,8.681399,1.424121,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,product_sum,f128,fltx,fltx,fltx bl::f128,bl::product_sum,,,,,,,,,-,-,6.095968,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,product_sum,f128,qdpp,ddreal,qdpp dd_real,same expression,,,,,,,,,-,-,4.995246,0.819434,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,product_sum,f128,tlfloat,tlquad,TLFloat Quad,same expression,,,,,,,,,-,-,101.148571,16.5927,07cb9aa0af7241f981735eab48f97723 +random,mt19937_64,f128,fltx,fltx,fltx bl::f128,bl::mt19937_64,,,,,,,,,-,-,1.737649,,07cb9aa0af7241f981735eab48f97723 +random,normal,f128,fltx,fltx,fltx bl::f128,bl::normal,,,,,,,,,-,-,48.963562,,07cb9aa0af7241f981735eab48f97723 +random,uniform_real,f128,fltx,fltx,fltx bl::f128,bl::uniform_real,,,,,,,,,-,-,5.852447,,07cb9aa0af7241f981735eab48f97723 +random,uniform_real,f128,qdpp,ddreal,qdpp dd_real,qdpp ddrand,,,,,,,,,-,-,18.328649,3.131793,07cb9aa0af7241f981735eab48f97723 +remainders,fmod,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,8197,106.658013851,0,0,1,3,-90,no,NaN,no,41.41008,2.011109,07cb9aa0af7241f981735eab48f97723 +remainders,fmod,f128,fltx,fltx,fltx bl::f128,bl::fmod,8197,inf,inf,inf,3,3,inf,yes,Both,yes,20.590672,,07cb9aa0af7241f981735eab48f97723 +remainders,fmod,f128,qdpp,ddreal,qdpp dd_real,qdpp fmod,8197,106.654304615,0,0,1,3,-90,no,NaN,no,29.541016,1.43468,07cb9aa0af7241f981735eab48f97723 +remainders,fmod,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,8197,inf,inf,inf,3,3,inf,yes,No,no,182.948812,8.885033,07cb9aa0af7241f981735eab48f97723 +remainders,remainder,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remainder,4099,134.409394,100.966202,95.502103,1,1,5.502103,yes,NaN,no,50.159543,2.197651,07cb9aa0af7241f981735eab48f97723 +remainders,remainder,f128,fltx,fltx,fltx bl::f128,bl::remainder,4099,137.991491,inf,103.120938,1,1,13.120938,yes,Both,yes,22.824164,,07cb9aa0af7241f981735eab48f97723 +remainders,remainder,f128,qdpp,ddreal,qdpp dd_real,qdpp drem,4099,134.409394,100.966202,95.502103,1,1,5.502103,yes,NaN,no,26.51868,1.161869,07cb9aa0af7241f981735eab48f97723 +remainders,remainder,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::remainder,4099,inf,inf,inf,1,1,inf,yes,No,no,176.285807,7.723648,07cb9aa0af7241f981735eab48f97723 +remainders,remquo,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remquo,4099,inf,inf,inf,1,1,inf,yes,NaN,no,50.618868,2.218894,07cb9aa0af7241f981735eab48f97723 +remainders,remquo,f128,fltx,fltx,fltx bl::f128,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,22.812661,,07cb9aa0af7241f981735eab48f97723 +remainders,remquo,f128,qdpp,ddreal,qdpp dd_real,qdpp divrem,4099,inf,inf,inf,1,1,inf,yes,NaN,no,27.083547,1.187216,07cb9aa0af7241f981735eab48f97723 +remainders,remquo,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::remquo,4099,inf,inf,inf,1,1,inf,yes,No,no,181.57959,7.959597,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,cbrt,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,8195,108.3957186,105.429716,104.600252,2,2,14.600252,yes,Both,no,388.623047,20.593778,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,cbrt,f128,fltx,fltx,fltx bl::f128,bl::cbrt,8195,108.521255256,104.960828,104.098992,2,2,14.098992,yes,Both,yes,18.870897,,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,cbrt,f128,qdpp,ddreal,qdpp dd_real,qdpp nroot,8195,101.532616467,89.370444,89.005643,1,2,-0.994357,no,NaN,no,75.54796,4.003411,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,cbrt,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,8195,115.032863938,113.203933,113.021191,2,2,23.021191,yes,No,no,853.623047,45.234896,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,hypot,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,8195,121.944215111,104.898769,104.258205,2,2,14.258205,yes,Both,yes,59.552002,5.474655,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,hypot,f128,fltx,fltx,fltx bl::f128,bl::hypot,8195,122.379344938,105.55647,104.375984,2,2,14.375984,yes,Both,yes,10.877763,,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,hypot,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,8195,128.957366847,113.150622,113.012814,2,2,23.012814,yes,No,yes,217.062988,19.954744,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,ipow,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",8195,106.377664118,103.455996,102.733123,2,2,12.733123,yes,Both,no,10.159415,0.385628,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,ipow,f128,fltx,fltx,fltx bl::f128,bl::ipow,8195,106.491467825,103.779117,103.190083,2,2,13.190083,yes,Both,no,26.345083,,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,ipow,f128,qdpp,ddreal,qdpp dd_real,qdpp npwr,8195,106.475948653,103.777298,103.184609,2,2,13.184609,yes,NaN,no,7.763225,0.294675,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,pow,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,8198,102.607987,98.689822,97.605813,2,2,17.605813,yes,Inf,no,564.013672,2.338287,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,pow,f128,fltx,fltx,fltx bl::f128,bl::pow,8198,107.1276135,102.267431,101.314349,2,2,21.314349,yes,Both,yes,241.208065,,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,pow,f128,qdpp,ddreal,qdpp dd_real,qdpp pow,8198,106.783703,101.68773,101.002017,2,2,21.002017,yes,No,no,300.917271,1.247542,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,pow,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,8198,114.938032,113.162316,113.016553,2,2,33.016553,yes,No,no,6434.375,26.675621,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,sqr,f128,fltx,fltx,fltx bl::f128,bl::sqr,8195,108.712755765,105.598081,105.370295,2,2,15.370295,yes,Both,yes,1.204857,,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,sqr,f128,qdpp,ddreal,qdpp dd_real,qdpp sqr,8195,108.650116271,105.598081,105.370295,2,2,15.370295,yes,NaN,yes,1.240104,1.029254,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,sqrt,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,16391,113.67775725,54.379751,52.841425,2,4,-37.158575,no,Both,no,3.116862,0.549444,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,sqrt,f128,fltx,fltx,fltx bl::f128,bl::sqrt,16391,109.760683649,105.75112,104.669867,4,4,14.669867,yes,Both,yes,5.67276,,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,sqrt,f128,qdpp,ddreal,qdpp dd_real,qdpp sqrt,16391,92.6308818592,52.16202,51.323685,2,4,-38.676315,no,NaN,no,5.436824,0.958409,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,sqrt,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,16391,115.160671533,113.1397,113.011246,4,4,23.011246,yes,No,no,154.057617,27.157436,07cb9aa0af7241f981735eab48f97723 +rounding,ceil,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ceil,4108,inf,inf,inf,1,1,inf,yes,Both,no,2.099809,1.395423,07cb9aa0af7241f981735eab48f97723 +rounding,ceil,f128,fltx,fltx,fltx bl::f128,bl::ceil,4108,inf,inf,inf,1,1,inf,yes,Both,yes,1.504783,,07cb9aa0af7241f981735eab48f97723 +rounding,ceil,f128,qdpp,ddreal,qdpp dd_real,qdpp ceil,4108,inf,inf,inf,1,1,inf,yes,Both,no,0.367785,0.244411,07cb9aa0af7241f981735eab48f97723 +rounding,ceil,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::ceil,4108,inf,inf,inf,1,1,inf,yes,No,no,5.933447,3.943058,07cb9aa0af7241f981735eab48f97723 +rounding,floor,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::floor,4108,inf,inf,inf,1,1,inf,yes,Both,no,0.36981,0.453485,07cb9aa0af7241f981735eab48f97723 +rounding,floor,f128,fltx,fltx,fltx bl::f128,bl::floor,4108,inf,inf,inf,1,1,inf,yes,Both,yes,0.815484,,07cb9aa0af7241f981735eab48f97723 +rounding,floor,f128,qdpp,ddreal,qdpp dd_real,qdpp floor,4108,inf,inf,inf,1,1,inf,yes,Both,no,0.369205,0.452743,07cb9aa0af7241f981735eab48f97723 +rounding,floor,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::floor,4108,inf,inf,inf,1,1,inf,yes,No,no,5.773981,7.080434,07cb9aa0af7241f981735eab48f97723 +rounding,llround,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::llround,4114,inf,inf,inf,1,1,inf,yes,-,-,622.515869,102.847473,07cb9aa0af7241f981735eab48f97723 +rounding,llround,f128,fltx,fltx,fltx bl::f128,bl::llround,4114,inf,inf,inf,1,1,inf,yes,-,-,6.052807,,07cb9aa0af7241f981735eab48f97723 +rounding,lround,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lround,4110,inf,inf,inf,1,1,inf,yes,-,-,10.752651,1.606847,07cb9aa0af7241f981735eab48f97723 +rounding,lround,f128,fltx,fltx,fltx bl::f128,bl::lround,4110,inf,inf,inf,1,1,inf,yes,-,-,6.691771,,07cb9aa0af7241f981735eab48f97723 +rounding,round,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::round,4108,inf,inf,inf,1,1,inf,yes,Both,no,6.023849,0.677654,07cb9aa0af7241f981735eab48f97723 +rounding,round,f128,fltx,fltx,fltx bl::f128,bl::round,4108,inf,inf,inf,1,1,inf,yes,Both,yes,8.889271,,07cb9aa0af7241f981735eab48f97723 +rounding,round,f128,qdpp,ddreal,qdpp dd_real,qdpp round,4108,130.441577,0,0,0,1,-80,no,Both,no,7.251616,0.815772,07cb9aa0af7241f981735eab48f97723 +rounding,round,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::round,4108,inf,inf,inf,1,1,inf,yes,No,no,7.727661,0.869324,07cb9aa0af7241f981735eab48f97723 +rounding,round_decimals,f128,fltx,fltx,fltx bl::f128,bl::round_decimals,4099,110.177573,107.236356,107.022726,1,1,17.022726,yes,Both,yes,93.118286,,07cb9aa0af7241f981735eab48f97723 +rounding,round_significant,f128,fltx,fltx,fltx bl::f128,bl::round_significant,4096,121.33026,107.34042,107.049597,1,1,17.049597,yes,Both,yes,144.793701,,07cb9aa0af7241f981735eab48f97723 +rounding,roundeven,f128,fltx,fltx,fltx bl::f128,bl::roundeven,4108,inf,inf,inf,1,1,inf,yes,Both,yes,10.027466,,07cb9aa0af7241f981735eab48f97723 +rounding,roundeven,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::rint,4108,inf,inf,inf,1,1,inf,yes,No,no,8.382339,0.835938,07cb9aa0af7241f981735eab48f97723 +rounding,trunc,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::trunc,4108,inf,inf,inf,1,1,inf,yes,Both,no,4.67216,1.47391,07cb9aa0af7241f981735eab48f97723 +rounding,trunc,f128,fltx,fltx,fltx bl::f128,bl::trunc,4108,inf,inf,inf,1,1,inf,yes,Both,yes,3.169909,,07cb9aa0af7241f981735eab48f97723 +rounding,trunc,f128,qdpp,ddreal,qdpp dd_real,qdpp aint,4108,inf,inf,inf,1,1,inf,yes,Both,no,0.99691,0.314492,07cb9aa0af7241f981735eab48f97723 +rounding,trunc,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::trunc,4108,inf,inf,inf,1,1,inf,yes,No,no,4.336695,1.368082,07cb9aa0af7241f981735eab48f97723 +special_functions,erf,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,8198,110.0907445,102.183057,101.184994,2,2,21.184994,yes,Both,no,917.345861,1.132048,07cb9aa0af7241f981735eab48f97723 +special_functions,erf,f128,fltx,fltx,fltx bl::f128,bl::erf,8198,110.8988915,104.260004,103.47754,2,2,23.47754,yes,Both,yes,810.341797,,07cb9aa0af7241f981735eab48f97723 +special_functions,erf,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,8198,115.2497885,113.304511,113.036088,2,2,33.036088,yes,Inf,no,40416.796875,49.876234,07cb9aa0af7241f981735eab48f97723 +special_functions,erfc,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,8198,106.2951605,99.620228,99.060329,2,2,19.060329,yes,Both,-,903.315034,1.115941,07cb9aa0af7241f981735eab48f97723 +special_functions,erfc,f128,fltx,fltx,fltx bl::f128,bl::erfc,8198,107.1893035,100.123363,99.167646,2,2,19.167646,yes,Both,-,809.465144,,07cb9aa0af7241f981735eab48f97723 +special_functions,erfc,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,8198,115.0926585,113.21381,113.051599,2,2,33.051599,yes,Inf,-,40504.296875,50.038346,07cb9aa0af7241f981735eab48f97723 +special_functions,lgamma,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lgamma,4099,105.139668,100.764251,92.065791,1,1,12.065791,yes,Both,-,2432.449777,3.595523,07cb9aa0af7241f981735eab48f97723 +special_functions,lgamma,f128,fltx,fltx,fltx bl::f128,bl::lgamma,4099,107.30017,103.199673,102.168212,1,1,22.168212,yes,Both,-,676.52181,,07cb9aa0af7241f981735eab48f97723 +special_functions,lgamma,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::lgamma,4099,114.971639,113.175643,113.01385,1,1,33.01385,yes,No,-,26769.140625,39.568777,07cb9aa0af7241f981735eab48f97723 +special_functions,tgamma,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tgamma,4099,100.75719,97.38341,96.496549,1,1,16.496549,yes,Both,-,1885.983456,3.192533,07cb9aa0af7241f981735eab48f97723 +special_functions,tgamma,f128,fltx,fltx,fltx bl::f128,bl::tgamma,4099,105.565044,98.349598,97.317514,1,1,17.317514,yes,Both,-,590.748355,,07cb9aa0af7241f981735eab48f97723 +special_functions,tgamma,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::tgamma,4099,115.005599,113.180213,113.028818,1,1,33.028818,yes,No,-,29530.078125,49.987576,07cb9aa0af7241f981735eab48f97723 +trigonometric,acos,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,8204,106.950408772,104.069369,103.207374,2,2,23.207374,yes,Both,-,3072.485352,15.198988,07cb9aa0af7241f981735eab48f97723 +trigonometric,acos,f128,fltx,fltx,fltx bl::f128,bl::acos,8204,106.470630111,95.825547,81.584963,2,2,1.584963,yes,Both,-,202.150657,,07cb9aa0af7241f981735eab48f97723 +trigonometric,acos,f128,qdpp,ddreal,qdpp dd_real,qdpp acos,8204,108.084372446,104.368701,103.255774,2,2,23.255774,yes,No,-,287.901088,1.424191,07cb9aa0af7241f981735eab48f97723 +trigonometric,acos,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,8204,114.925291168,113.171158,113.019157,2,2,33.019157,yes,No,-,2162.255859,10.696259,07cb9aa0af7241f981735eab48f97723 +trigonometric,asin,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,8204,106.772574098,104.035972,103.400759,2,2,23.400759,yes,Both,no,3263.110352,16.591812,07cb9aa0af7241f981735eab48f97723 +trigonometric,asin,f128,fltx,fltx,fltx bl::f128,bl::asin,8204,108.580073592,105.096123,104.081582,2,2,24.081582,yes,Both,yes,196.669922,,07cb9aa0af7241f981735eab48f97723 +trigonometric,asin,f128,qdpp,ddreal,qdpp dd_real,qdpp asin,8204,108.046482253,103.529678,102.915775,2,2,22.915775,yes,No,no,286.813151,1.458348,07cb9aa0af7241f981735eab48f97723 +trigonometric,asin,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,8204,115.030420086,113.199623,113.012058,2,2,33.012058,yes,No,no,2166.455078,11.015691,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,8198,106.7154905,104.209213,103.565475,2,2,23.565475,yes,Both,no,328.898738,2.308747,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan,f128,fltx,fltx,fltx bl::f128,bl::atan,8198,108.728555,105.953468,104.92639,2,2,24.92639,yes,Both,yes,142.457682,,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan,f128,qdpp,ddreal,qdpp dd_real,qdpp atan,8198,107.1650095,103.455087,102.91505,2,2,22.91505,yes,No,no,206.598772,1.450247,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,8198,114.987901,113.253632,113.035851,2,2,33.035851,yes,Inf,no,1883.154297,13.219043,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan2,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,8206,106.694157984,0,0,2,3,-80,no,Both,no,366.85902,2.474553,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan2,f128,fltx,fltx,fltx bl::f128,bl::atan2,8206,108.727143624,105.799026,104.520841,3,3,24.520841,yes,Both,yes,148.252651,,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan2,f128,qdpp,ddreal,qdpp dd_real,qdpp atan2,8206,106.853599154,0,0,2,3,-80,no,No,no,206.549944,1.393229,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan2,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,8206,114.953607052,113.169783,113.0059,3,3,33.0059,yes,Inf,no,1903.092448,12.836819,07cb9aa0af7241f981735eab48f97723 +trigonometric,cos,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,12524,63.2693933828,0,0,1,3,-80,no,Both,-,612.932478,5.731003,07cb9aa0af7241f981735eab48f97723 +trigonometric,cos,f128,fltx,fltx,fltx bl::f128,bl::cos,12524,113.520718505,100.266388,99.209588,3,3,19.209588,yes,Both,-,106.950298,,07cb9aa0af7241f981735eab48f97723 +trigonometric,cos,f128,qdpp,ddreal,qdpp dd_real,qdpp cos,12524,63.5643252523,0,0,1,3,-80,no,Both,-,163.544171,1.52916,07cb9aa0af7241f981735eab48f97723 +trigonometric,cos,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,12524,117.223146672,113.213457,113.01099,3,3,33.01099,yes,No,-,992.099609,9.276268,07cb9aa0af7241f981735eab48f97723 +trigonometric,sin,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,12524,51.3516367719,0,0,1,3,-80,no,Both,no,611.138916,5.697735,07cb9aa0af7241f981735eab48f97723 +trigonometric,sin,f128,fltx,fltx,fltx bl::f128,bl::sin,12524,110.553532277,98.777563,98.619216,3,3,18.619216,yes,Both,yes,107.259971,,07cb9aa0af7241f981735eab48f97723 +trigonometric,sin,f128,qdpp,ddreal,qdpp dd_real,qdpp sin,12524,52.4625291042,0,0,1,3,-80,no,Both,no,161.90625,1.509475,07cb9aa0af7241f981735eab48f97723 +trigonometric,sin,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,12524,116.147164931,113.247632,113.016004,3,3,33.016004,yes,No,no,983.916016,9.173189,07cb9aa0af7241f981735eab48f97723 +trigonometric,sincos,f128,fltx,fltx,fltx bl::f128,bl::sincos,,,,,,,,,-,-,116.824588,,07cb9aa0af7241f981735eab48f97723 +trigonometric,sincos,f128,qdpp,ddreal,qdpp dd_real,qdpp sincos,,,,,,,,,-,-,166.794922,1.427738,07cb9aa0af7241f981735eab48f97723 +trigonometric,sincos,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sincos,,,,,,,,,-,-,1987.483724,17.012546,07cb9aa0af7241f981735eab48f97723 +trigonometric,tan,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,12524,41.1613259056,0,0,1,3,-75,no,Both,no,1214.794922,10.412803,07cb9aa0af7241f981735eab48f97723 +trigonometric,tan,f128,fltx,fltx,fltx bl::f128,bl::tan,12524,106.671100353,98.776698,98.614153,3,3,23.614153,yes,Both,yes,116.663587,,07cb9aa0af7241f981735eab48f97723 +trigonometric,tan,f128,qdpp,ddreal,qdpp dd_real,qdpp tan,12524,42.6288393164,0,0,1,3,-75,no,No,no,185.873811,1.593246,07cb9aa0af7241f981735eab48f97723 +trigonometric,tan,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,12524,114.951330489,113.144915,113.016302,3,3,38.016302,yes,No,no,1260.754395,10.806751,07cb9aa0af7241f981735eab48f97723 diff --git a/validation/metrics/data/wasm32/wasm32/Emscripten_f128_fastmath.csv b/validation/metrics/data/wasm32/wasm32/Emscripten_f128_fastmath.csv new file mode 100644 index 0000000..31e4ed5 --- /dev/null +++ b/validation/metrics/data/wasm32/wasm32/Emscripten_f128_fastmath.csv @@ -0,0 +1,86 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f128,fltx,fltx,fltx bl::f128,bl::add,4096,120.266239506,106.483519,105.736235,2,2,15.736235,yes,No,no,0.926152,,680cbf9c13134cc08ab2b5bd2bd1191c +arithmetic,divide,f128,fltx,fltx,fltx bl::f128,bl::divide,4100,110.909104952,105.971646,105.124683,2,2,15.124683,yes,No,no,2.490718,,680cbf9c13134cc08ab2b5bd2bd1191c +arithmetic,multiply,f128,fltx,fltx,fltx bl::f128,bl::multiply,4100,108.702461473,105.665876,105.380753,2,2,15.380753,yes,No,no,2.028785,,680cbf9c13134cc08ab2b5bd2bd1191c +arithmetic,subtract,f128,fltx,fltx,fltx bl::f128,bl::subtract,4096,120.053476095,106.530508,105.744857,2,2,15.744857,yes,No,no,0.923213,,680cbf9c13134cc08ab2b5bd2bd1191c +comparisons,equal,f128,fltx,fltx,fltx bl::f128,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.115677,,680cbf9c13134cc08ab2b5bd2bd1191c +comparisons,greater,f128,fltx,fltx,fltx bl::f128,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.102405,,680cbf9c13134cc08ab2b5bd2bd1191c +comparisons,greater_equal,f128,fltx,fltx,fltx bl::f128,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.173572,,680cbf9c13134cc08ab2b5bd2bd1191c +comparisons,less,f128,fltx,fltx,fltx bl::f128,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.152808,,680cbf9c13134cc08ab2b5bd2bd1191c +comparisons,less_equal,f128,fltx,fltx,fltx bl::f128,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.170292,,680cbf9c13134cc08ab2b5bd2bd1191c +comparisons,not_equal,f128,fltx,fltx,fltx bl::f128,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.114032,,680cbf9c13134cc08ab2b5bd2bd1191c +exponentials,exp,f128,fltx,fltx,fltx bl::f128,bl::exp,8198,106.9987285,104.374273,103.64511,2,2,23.64511,yes,NaN,-,121.788025,,680cbf9c13134cc08ab2b5bd2bd1191c +exponentials,exp2,f128,fltx,fltx,fltx bl::f128,bl::exp2,8198,108.8963935,106.013023,105.117537,2,2,25.117537,yes,NaN,-,115.408573,,680cbf9c13134cc08ab2b5bd2bd1191c +exponentials,expm1,f128,fltx,fltx,fltx bl::f128,bl::expm1,8197,121.61686848,105.111574,104.102752,2,2,24.102752,yes,NaN,yes,121.780396,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,abs,f128,fltx,fltx,fltx bl::f128,bl::abs,8196,inf,inf,inf,2,2,inf,yes,NaN,yes,0.812795,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,copysign,f128,fltx,fltx,fltx bl::f128,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,No,yes,0.385447,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,fabs,f128,fltx,fltx,fltx bl::f128,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,NaN,yes,0.812937,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,fdim,f128,fltx,fltx,fltx bl::f128,bl::fdim,8197,137.996123973,inf,106.227061,2,2,16.227061,yes,No,yes,3.088129,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,fma,f128,fltx,fltx,fltx bl::f128,bl::fma,12293,117.187792693,104.040192,99.5802,3,3,9.5802,yes,Both,no,7.590419,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,fmax,f128,fltx,fltx,fltx bl::f128,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,No,yes,0.974309,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,fmin,f128,fltx,fltx,fltx bl::f128,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,No,yes,1.031455,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,frexp,f128,fltx,fltx,fltx bl::f128,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,3.496782,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,ilogb,f128,fltx,fltx,fltx bl::f128,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.845929,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,ldexp,f128,fltx,fltx,fltx bl::f128,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,NaN,yes,2.904016,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,logb,f128,fltx,fltx,fltx bl::f128,bl::logb,8195,inf,inf,inf,2,2,inf,yes,NaN,-,1.983617,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,modf,f128,fltx,fltx,fltx bl::f128,bl::modf,8195,inf,inf,inf,2,2,inf,yes,NaN,yes,6.810724,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,nextafter,f128,fltx,fltx,fltx bl::f128,bl::nextafter,,,,,,,,,-,-,5.917627,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,nexttoward,f128,fltx,fltx,fltx bl::f128,bl::nexttoward,,,,,,,,,-,-,5.904433,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,recip,f128,fltx,fltx,fltx bl::f128,bl::recip,8195,109.025331959,105.925795,105.189487,2,2,15.189487,yes,NaN,no,32.824326,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,scalbln,f128,fltx,fltx,fltx bl::f128,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,NaN,yes,3.00978,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,scalbn,f128,fltx,fltx,fltx bl::f128,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,NaN,yes,3.019962,,680cbf9c13134cc08ab2b5bd2bd1191c +hyperbolic,cosh,f128,fltx,fltx,fltx bl::f128,bl::cosh,8198,107.9070545,105.118172,104.370708,2,2,24.370708,yes,Both,-,139.153856,,680cbf9c13134cc08ab2b5bd2bd1191c +hyperbolic,sinh,f128,fltx,fltx,fltx bl::f128,bl::sinh,8198,107.4201585,104.726423,103.568829,2,2,23.568829,yes,Both,yes,140.209961,,680cbf9c13134cc08ab2b5bd2bd1191c +hyperbolic,tanh,f128,fltx,fltx,fltx bl::f128,bl::tanh,8198,109.217494,105.123457,103.771823,2,2,23.771823,yes,NaN,yes,146.486119,,680cbf9c13134cc08ab2b5bd2bd1191c +inverse_hyperbolic,acosh,f128,fltx,fltx,fltx bl::f128,bl::acosh,8200,108.031519376,104.331717,103.672888,2,2,23.672888,yes,NaN,-,165.884165,,680cbf9c13134cc08ab2b5bd2bd1191c +inverse_hyperbolic,asinh,f128,fltx,fltx,fltx bl::f128,bl::asinh,8198,108.081857,105.155677,103.818628,2,2,23.818628,yes,NaN,yes,142.642107,,680cbf9c13134cc08ab2b5bd2bd1191c +inverse_hyperbolic,atanh,f128,fltx,fltx,fltx bl::f128,bl::atanh,8204,108.11583849,104.54201,103.139045,2,2,23.139045,yes,NaN,yes,163.069661,,680cbf9c13134cc08ab2b5bd2bd1191c +io,parse,f128,fltx,fltx,fltx bl::f128,bl::parse,8195,109.907318229,106.715617,106.003381,2,2,0.003381,yes,Both,yes,282.75799,,680cbf9c13134cc08ab2b5bd2bd1191c +io,to_chars,f128,fltx,fltx,fltx bl::f128,bl::to_chars,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,219.817842,,680cbf9c13134cc08ab2b5bd2bd1191c +io,to_string,f128,fltx,fltx,fltx bl::f128,bl::to_string,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,254.208343,,680cbf9c13134cc08ab2b5bd2bd1191c +logarithms,log,f128,fltx,fltx,fltx bl::f128,bl::log,12291,108.40767633,104.625423,103.727726,3,3,23.727726,yes,NaN,-,144.369612,,680cbf9c13134cc08ab2b5bd2bd1191c +logarithms,log10,f128,fltx,fltx,fltx bl::f128,bl::log10,12291,107.503050022,104.469291,103.762278,3,3,23.762278,yes,NaN,-,148.4375,,680cbf9c13134cc08ab2b5bd2bd1191c +logarithms,log1p,f128,fltx,fltx,fltx bl::f128,bl::log1p,8197,121.372231555,105.150365,103.619384,2,2,23.619384,yes,NaN,yes,152.109712,,680cbf9c13134cc08ab2b5bd2bd1191c +logarithms,log2,f128,fltx,fltx,fltx bl::f128,bl::log2,12291,108.785650924,104.550799,103.716432,3,3,23.716432,yes,NaN,-,148.693427,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,affine_trig,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,233.701087,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,chained_arithmetic,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,20.29797,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,haversine,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,551.58782,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,horner_polynomial,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,98.520878,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,log_sum_exp,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,965.639013,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,mandelbrot,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,15.092775,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,matrix_vector_4x4,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,49.691219,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,newton_root,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,30.129882,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,product_sum,f128,fltx,fltx,fltx bl::f128,bl::product_sum,,,,,,,,,-,-,7.539445,,680cbf9c13134cc08ab2b5bd2bd1191c +random,mt19937_64,f128,fltx,fltx,fltx bl::f128,bl::mt19937_64,,,,,,,,,-,-,1.738011,,680cbf9c13134cc08ab2b5bd2bd1191c +random,normal,f128,fltx,fltx,fltx bl::f128,bl::normal,,,,,,,,,-,-,40.864702,,680cbf9c13134cc08ab2b5bd2bd1191c +random,uniform_real,f128,fltx,fltx,fltx bl::f128,bl::uniform_real,,,,,,,,,-,-,5.827391,,680cbf9c13134cc08ab2b5bd2bd1191c +remainders,fmod,f128,fltx,fltx,fltx bl::f128,bl::fmod,8197,inf,inf,inf,3,3,inf,yes,No,yes,20.511512,,680cbf9c13134cc08ab2b5bd2bd1191c +remainders,remainder,f128,fltx,fltx,fltx bl::f128,bl::remainder,4099,137.991491,inf,103.120938,1,1,13.120938,yes,No,yes,22.835104,,680cbf9c13134cc08ab2b5bd2bd1191c +remainders,remquo,f128,fltx,fltx,fltx bl::f128,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,22.600911,,680cbf9c13134cc08ab2b5bd2bd1191c +roots_and_powers,cbrt,f128,fltx,fltx,fltx bl::f128,bl::cbrt,8195,108.521255256,104.960828,104.098992,2,2,14.098992,yes,NaN,yes,18.259215,,680cbf9c13134cc08ab2b5bd2bd1191c +roots_and_powers,hypot,f128,fltx,fltx,fltx bl::f128,bl::hypot,8195,122.379786777,105.55647,104.375984,2,2,14.375984,yes,No,yes,11.565531,,680cbf9c13134cc08ab2b5bd2bd1191c +roots_and_powers,ipow,f128,fltx,fltx,fltx bl::f128,bl::ipow,8195,106.491467825,103.779117,103.190083,2,2,13.190083,yes,Both,no,26.582746,,680cbf9c13134cc08ab2b5bd2bd1191c +roots_and_powers,pow,f128,fltx,fltx,fltx bl::f128,bl::pow,8198,107.1276135,102.267431,101.314349,2,2,21.314349,yes,No,yes,241.251149,,680cbf9c13134cc08ab2b5bd2bd1191c +roots_and_powers,sqr,f128,fltx,fltx,fltx bl::f128,bl::sqr,8195,108.712755765,105.598081,105.370295,2,2,15.370295,yes,Both,yes,1.230516,,680cbf9c13134cc08ab2b5bd2bd1191c +roots_and_powers,sqrt,f128,fltx,fltx,fltx bl::f128,bl::sqrt,16391,109.760683649,105.75112,104.669867,4,4,14.669867,yes,NaN,yes,4.944255,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,ceil,f128,fltx,fltx,fltx bl::f128,bl::ceil,4108,inf,inf,inf,1,1,inf,yes,Both,yes,1.514958,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,floor,f128,fltx,fltx,fltx bl::f128,bl::floor,4108,inf,inf,inf,1,1,inf,yes,Both,yes,0.761136,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,llround,f128,fltx,fltx,fltx bl::f128,bl::llround,4114,inf,inf,inf,1,1,inf,yes,-,-,6.273768,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,lround,f128,fltx,fltx,fltx bl::f128,bl::lround,4110,inf,inf,inf,1,1,inf,yes,-,-,6.760378,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,round,f128,fltx,fltx,fltx bl::f128,bl::round,4108,inf,inf,inf,1,1,inf,yes,Both,yes,8.782349,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,round_decimals,f128,fltx,fltx,fltx bl::f128,bl::round_decimals,4099,110.177573,107.236356,107.022726,1,1,17.022726,yes,NaN,yes,93.270597,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,round_significant,f128,fltx,fltx,fltx bl::f128,bl::round_significant,4096,121.33026,107.34042,107.049597,1,1,17.049597,yes,NaN,yes,140.171814,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,roundeven,f128,fltx,fltx,fltx bl::f128,bl::roundeven,4108,inf,inf,inf,1,1,inf,yes,NaN,yes,10.331055,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,trunc,f128,fltx,fltx,fltx bl::f128,bl::trunc,4108,inf,inf,inf,1,1,inf,yes,Both,yes,2.298459,,680cbf9c13134cc08ab2b5bd2bd1191c +special_functions,erf,f128,fltx,fltx,fltx bl::f128,bl::erf,8198,110.8988915,104.260004,103.47754,2,2,23.47754,yes,Both,yes,814.523237,,680cbf9c13134cc08ab2b5bd2bd1191c +special_functions,erfc,f128,fltx,fltx,fltx bl::f128,bl::erfc,8198,107.1893035,100.123363,99.167646,2,2,19.167646,yes,Both,-,813.301282,,680cbf9c13134cc08ab2b5bd2bd1191c +special_functions,lgamma,f128,fltx,fltx,fltx bl::f128,bl::lgamma,4099,107.30017,103.199673,102.168212,1,1,22.168212,yes,NaN,-,657.828125,,680cbf9c13134cc08ab2b5bd2bd1191c +special_functions,tgamma,f128,fltx,fltx,fltx bl::f128,bl::tgamma,4099,105.565044,98.349598,97.317514,1,1,17.317514,yes,Both,-,593.503289,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,acos,f128,fltx,fltx,fltx bl::f128,bl::acos,8204,106.470630111,95.825547,81.584963,2,2,1.584963,yes,NaN,-,202.055664,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,asin,f128,fltx,fltx,fltx bl::f128,bl::asin,8204,108.580073592,105.096123,104.081582,2,2,24.081582,yes,NaN,yes,196.608887,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,atan,f128,fltx,fltx,fltx bl::f128,bl::atan,8198,108.728555,105.953468,104.92639,2,2,24.92639,yes,NaN,yes,142.117513,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,atan2,f128,fltx,fltx,fltx bl::f128,bl::atan2,8206,108.727143624,105.799026,104.520841,3,3,24.520841,yes,No,yes,148.882185,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,cos,f128,fltx,fltx,fltx bl::f128,bl::cos,12524,113.520718505,100.266388,99.209588,3,3,19.209588,yes,Both,-,106.911058,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,sin,f128,fltx,fltx,fltx bl::f128,bl::sin,12524,110.553532277,98.777563,98.619216,3,3,18.619216,yes,NaN,yes,107.149465,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,sincos,f128,fltx,fltx,fltx bl::f128,bl::sincos,,,,,,,,,-,-,118.104677,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,tan,f128,fltx,fltx,fltx bl::f128,bl::tan,12524,106.671100353,98.776698,98.614153,3,3,23.614153,yes,NaN,yes,116.382496,,680cbf9c13134cc08ab2b5bd2bd1191c diff --git a/validation/metrics/data/wasm32/wasm32/Emscripten_f256.csv b/validation/metrics/data/wasm32/wasm32/Emscripten_f256.csv new file mode 100644 index 0000000..b738f9b --- /dev/null +++ b/validation/metrics/data/wasm32/wasm32/Emscripten_f256.csv @@ -0,0 +1,294 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f256,fltx,fltx,fltx bl::f256,bl::add,4096,227.373862582,215.583815,215.297307,2,2,25.297307,yes,Both,no,10.155579,,07cb9aa0af7241f981735eab48f97723 +arithmetic,add,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator+,4096,225.042084562,214.179406,214.011982,2,2,24.011982,yes,Both,yes,94.700928,9.325015,07cb9aa0af7241f981735eab48f97723 +arithmetic,add,f256,qdpp,qdreal,qdpp qd_real,qdpp operator+,4096,227.373636161,215.583815,215.297307,2,2,25.297307,yes,NaN,no,22.873779,2.252336,07cb9aa0af7241f981735eab48f97723 +arithmetic,add,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,4096,253.089090895,237.252454,237.007687,2,2,47.007687,yes,No,no,59.771729,5.885605,07cb9aa0af7241f981735eab48f97723 +arithmetic,divide,f256,fltx,fltx,fltx bl::f256,bl::divide,4100,219.220520548,215.287455,214.762066,2,2,24.762066,yes,Both,yes,91.455078,,07cb9aa0af7241f981735eab48f97723 +arithmetic,divide,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,4100,215.996290938,214.166285,214.002285,2,2,24.002285,yes,Both,yes,241.745605,2.643326,07cb9aa0af7241f981735eab48f97723 +arithmetic,divide,f256,qdpp,qdreal,qdpp qd_real,qdpp operator/,4100,218.667860159,172.169377,172.169377,1,2,-17.830623,no,NaN,no,234.033203,2.558996,07cb9aa0af7241f981735eab48f97723 +arithmetic,divide,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,4100,239.032664965,237.154132,237.0253,2,2,47.0253,yes,No,no,261.638184,2.860838,07cb9aa0af7241f981735eab48f97723 +arithmetic,multiply,f256,fltx,fltx,fltx bl::f256,bl::multiply,4100,220.046096951,215.608028,215.221541,2,2,25.221541,yes,Both,yes,24.861925,,07cb9aa0af7241f981735eab48f97723 +arithmetic,multiply,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator*,4100,215.992910439,214.146637,214.012662,2,2,24.012662,yes,Both,yes,187.490234,7.54126,07cb9aa0af7241f981735eab48f97723 +arithmetic,multiply,f256,qdpp,qdreal,qdpp qd_real,qdpp operator*,4100,220.046096951,215.608028,215.221541,2,2,25.221541,yes,Both,no,31.213379,1.255469,07cb9aa0af7241f981735eab48f97723 +arithmetic,multiply,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,4100,239.007243732,237.076391,237.006898,2,2,47.006898,yes,No,no,111.009521,4.465041,07cb9aa0af7241f981735eab48f97723 +arithmetic,subtract,f256,fltx,fltx,fltx bl::f256,bl::subtract,4096,227.447841785,215.602949,215.220788,2,2,25.220788,yes,Both,no,10.070246,,07cb9aa0af7241f981735eab48f97723 +arithmetic,subtract,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator-,4096,225.206569338,214.220914,214.046715,2,2,24.046715,yes,Both,yes,101.44043,10.073282,07cb9aa0af7241f981735eab48f97723 +arithmetic,subtract,f256,qdpp,qdreal,qdpp qd_real,qdpp operator-,4096,227.446239681,215.602917,214.95904,2,2,24.95904,yes,NaN,no,23.742947,2.357733,07cb9aa0af7241f981735eab48f97723 +arithmetic,subtract,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,4096,253.263648725,237.248925,237.000122,2,2,47.000122,yes,No,no,60.048828,5.962995,07cb9aa0af7241f981735eab48f97723 +comparisons,equal,f256,fltx,fltx,fltx bl::f256,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.789768,,07cb9aa0af7241f981735eab48f97723 +comparisons,equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.421286,8.130593,07cb9aa0af7241f981735eab48f97723 +comparisons,equal,f256,qdpp,qdreal,qdpp qd_real,qdpp operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.544999,0.690074,07cb9aa0af7241f981735eab48f97723 +comparisons,equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,4.586435,5.807316,07cb9aa0af7241f981735eab48f97723 +comparisons,greater,f256,fltx,fltx,fltx bl::f256,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.585869,,07cb9aa0af7241f981735eab48f97723 +comparisons,greater,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.541197,4.124677,07cb9aa0af7241f981735eab48f97723 +comparisons,greater,f256,qdpp,qdreal,qdpp qd_real,qdpp operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.270868,0.80137,07cb9aa0af7241f981735eab48f97723 +comparisons,greater,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.466997,3.44732,07cb9aa0af7241f981735eab48f97723 +comparisons,greater_equal,f256,fltx,fltx,fltx bl::f256,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.361888,,07cb9aa0af7241f981735eab48f97723 +comparisons,greater_equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.503079,4.775048,07cb9aa0af7241f981735eab48f97723 +comparisons,greater_equal,f256,qdpp,qdreal,qdpp qd_real,qdpp operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.09978,0.807541,07cb9aa0af7241f981735eab48f97723 +comparisons,greater_equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.272156,3.871212,07cb9aa0af7241f981735eab48f97723 +comparisons,less,f256,fltx,fltx,fltx bl::f256,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.318947,,07cb9aa0af7241f981735eab48f97723 +comparisons,less,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.446591,4.887679,07cb9aa0af7241f981735eab48f97723 +comparisons,less,f256,qdpp,qdreal,qdpp qd_real,qdpp operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.100787,0.834595,07cb9aa0af7241f981735eab48f97723 +comparisons,less,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.220215,3.957864,07cb9aa0af7241f981735eab48f97723 +comparisons,less_equal,f256,fltx,fltx,fltx bl::f256,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.256546,,07cb9aa0af7241f981735eab48f97723 +comparisons,less_equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.562382,5.222556,07cb9aa0af7241f981735eab48f97723 +comparisons,less_equal,f256,qdpp,qdreal,qdpp qd_real,qdpp operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.104634,0.879104,07cb9aa0af7241f981735eab48f97723 +comparisons,less_equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.406212,4.302439,07cb9aa0af7241f981735eab48f97723 +comparisons,not_equal,f256,fltx,fltx,fltx bl::f256,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.734721,,07cb9aa0af7241f981735eab48f97723 +comparisons,not_equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.432137,8.754533,07cb9aa0af7241f981735eab48f97723 +comparisons,not_equal,f256,qdpp,qdreal,qdpp qd_real,qdpp operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.541455,0.736954,07cb9aa0af7241f981735eab48f97723 +comparisons,not_equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,4.452112,6.059597,07cb9aa0af7241f981735eab48f97723 +exponentials,exp,f256,fltx,fltx,fltx bl::f256,bl::exp,8198,216.736722,209.997559,208.947269,2,2,28.947269,yes,Both,-,1031.054688,,07cb9aa0af7241f981735eab48f97723 +exponentials,exp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,8198,215.9253875,214.166296,214.006279,2,2,34.006279,yes,Both,-,3163.346354,3.068068,07cb9aa0af7241f981735eab48f97723 +exponentials,exp,f256,qdpp,qdreal,qdpp qd_real,qdpp exp,8198,216.5656735,209.985759,209.146866,2,2,29.146866,yes,Both,-,2209.716797,2.143162,07cb9aa0af7241f981735eab48f97723 +exponentials,exp,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,8198,238.9537585,237.149815,237.00489,2,2,57.00489,yes,No,-,4394.384766,4.262029,07cb9aa0af7241f981735eab48f97723 +exponentials,exp2,f256,fltx,fltx,fltx bl::f256,bl::exp2,8198,218.030361,214.973213,214.202868,2,2,34.202868,yes,Both,-,873.730469,,07cb9aa0af7241f981735eab48f97723 +exponentials,exp2,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,8198,215.974328,214.175518,214.035382,2,2,34.035382,yes,Both,-,3612.369792,4.134421,07cb9aa0af7241f981735eab48f97723 +exponentials,exp2,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,8198,238.9480035,237.174822,237.026426,2,2,57.026426,yes,No,-,16602.050781,19.001341,07cb9aa0af7241f981735eab48f97723 +exponentials,expm1,f256,fltx,fltx,fltx bl::f256,bl::expm1,8197,227.154452503,207.540568,207,2,2,27,yes,Both,yes,1032.971191,,07cb9aa0af7241f981735eab48f97723 +exponentials,expm1,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,8197,227.498351143,214.242848,214.018319,2,2,34.018319,yes,Both,yes,3551.72526,3.438358,07cb9aa0af7241f981735eab48f97723 +exponentials,expm1,f256,qdpp,qdreal,qdpp qd_real,qdpp expm1,8197,226.789374223,203.377948,0,1,2,-180,no,NaN,no,2187.158203,2.117347,07cb9aa0af7241f981735eab48f97723 +exponentials,expm1,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,8197,250.1283524,237.239921,237.036552,2,2,57.036552,yes,No,no,4506.982422,4.363125,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,abs,f256,fltx,fltx,fltx bl::f256,bl::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,3.211385,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,abs,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,67.891235,21.140795,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,abs,f256,qdpp,qdreal,qdpp qd_real,qdpp abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,3.236442,1.007802,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,abs,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,8196,inf,inf,inf,2,2,inf,yes,No,yes,5.203296,1.620265,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,copysign,f256,fltx,fltx,fltx bl::f256,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,0.698238,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,copysign,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,73.608398,105.420219,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,copysign,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::copysign,4099,inf,inf,inf,1,1,inf,yes,No,no,8.743427,12.522131,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fabs,f256,fltx,fltx,fltx bl::f256,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,3.094694,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fabs,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,67.728882,21.885484,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fabs,f256,qdpp,qdreal,qdpp qd_real,qdpp fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,3.142592,1.015477,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fabs,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,4099,inf,inf,inf,1,1,inf,yes,No,yes,5.201098,1.68065,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fdim,f256,fltx,fltx,fltx bl::f256,bl::fdim,8197,inf,inf,inf,2,2,inf,yes,Both,yes,7.061867,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fdim,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,8197,243.650598918,214.093805,214.003121,2,2,24.003121,yes,No,yes,71.795247,10.166611,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fdim,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,8197,inf,inf,inf,2,2,inf,yes,No,yes,57.901001,8.199107,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fma,f256,fltx,fltx,fltx bl::f256,bl::fma,12293,229.715460613,215.654212,215.096656,3,3,25.096656,yes,Both,no,31.48298,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fma,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,12293,228.257765839,214.164686,214.017731,3,3,24.017731,yes,Both,yes,214.956055,6.827691,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fma,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,12293,251.060726483,237.157442,237.018361,3,3,47.018361,yes,No,no,144.881592,4.601902,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fmax,f256,fltx,fltx,fltx bl::f256,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,yes,1.180177,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fmax,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,no,75.718587,64.158659,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fmax,f256,qdpp,qdreal,qdpp qd_real,qdpp max,8195,inf,inf,inf,2,2,inf,yes,Inf,yes,1.541578,1.306226,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fmax,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,8195,inf,inf,inf,2,2,inf,yes,No,no,12.197478,10.335294,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fmin,f256,fltx,fltx,fltx bl::f256,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,yes,1.167173,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fmin,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,no,76.494954,65.538687,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fmin,f256,qdpp,qdreal,qdpp qd_real,qdpp min,8195,inf,inf,inf,2,2,inf,yes,Inf,no,3.314775,2.840004,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,fmin,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,8195,inf,inf,inf,2,2,inf,yes,No,no,13.565732,11.622731,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,frexp,f256,fltx,fltx,fltx bl::f256,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,12.405599,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,frexp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,110.166016,8.880346,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,frexp,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,8196,inf,inf,inf,2,2,inf,yes,No,no,43.503906,3.506796,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,ilogb,f256,fltx,fltx,fltx bl::f256,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.344994,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,ilogb,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,41.466878,30.83052,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,ilogb,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.080385,0.803263,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,ldexp,f256,fltx,fltx,fltx bl::f256,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,2.942383,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,ldexp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,55.805054,18.965939,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,ldexp,f256,qdpp,qdreal,qdpp qd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,3.908852,1.328465,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,ldexp,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::ldexp,4096,inf,inf,inf,1,1,inf,yes,No,no,38.279785,13.009791,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,logb,f256,fltx,fltx,fltx bl::f256,bl::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,1.257671,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,logb,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,123.498535,98.196234,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,modf,f256,fltx,fltx,fltx bl::f256,bl::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,13.863678,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,modf,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,301.027832,21.713418,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,modf,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,8195,inf,inf,inf,2,2,inf,yes,No,no,71.245117,5.138977,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,nextafter,f256,fltx,fltx,fltx bl::f256,bl::nextafter,,,,,,,,,-,-,6.699387,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,nextafter,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter,,,,,,,,,-,-,817.595215,122.0403,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,nextafter,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter,,,,,,,,,-,-,18.111683,2.703484,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,nexttoward,f256,fltx,fltx,fltx bl::f256,bl::nexttoward,,,,,,,,,-,-,6.697026,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,nexttoward,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter (same type),,,,,,,,,-,-,814.09668,121.560933,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,nexttoward,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter (same type),,,,,,,,,-,-,18.183816,2.715208,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,recip,f256,fltx,fltx,fltx bl::f256,bl::recip,8195,217.92444534,215.148048,214.625136,2,2,24.625136,yes,Both,yes,87.694336,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,recip,f256,qdpp,qdreal,qdpp qd_real,qdpp inv,8195,217.927920075,215.148048,214.625136,2,2,24.625136,yes,NaN,no,231.254883,2.637056,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,scalbln,f256,fltx,fltx,fltx bl::f256,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,2.970028,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,scalbln,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,57.728882,19.437151,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,scalbln,f256,qdpp,qdreal,qdpp qd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,3.923152,1.320914,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,scalbn,f256,fltx,fltx,fltx bl::f256,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,2.957711,,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,scalbn,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,55.822144,18.87343,07cb9aa0af7241f981735eab48f97723 +floating_point_utilities,scalbn,f256,qdpp,qdreal,qdpp qd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,3.909421,1.321773,07cb9aa0af7241f981735eab48f97723 +hyperbolic,cosh,f256,fltx,fltx,fltx bl::f256,bl::cosh,8198,217.5106305,214.737937,214.159072,2,2,34.159072,yes,Both,-,1325.895182,,07cb9aa0af7241f981735eab48f97723 +hyperbolic,cosh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,8198,215.916289,214.168922,214.000831,2,2,34.000831,yes,Both,-,3724.479167,2.80903,07cb9aa0af7241f981735eab48f97723 +hyperbolic,cosh,f256,qdpp,qdreal,qdpp qd_real,qdpp cosh,8198,217.2651715,214.536693,213.837789,2,2,33.837789,yes,NaN,-,2486.669922,1.875465,07cb9aa0af7241f981735eab48f97723 +hyperbolic,cosh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,8198,238.9208895,237.131226,237.021921,2,2,57.021921,yes,No,-,4679.296875,3.52916,07cb9aa0af7241f981735eab48f97723 +hyperbolic,sinh,f256,fltx,fltx,fltx bl::f256,bl::sinh,8198,217.022625,214.597984,213.844482,2,2,33.844482,yes,Both,yes,1332.438151,,07cb9aa0af7241f981735eab48f97723 +hyperbolic,sinh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,8198,215.9712865,214.162104,214.011597,2,2,34.011597,yes,Both,yes,3869.498698,2.904074,07cb9aa0af7241f981735eab48f97723 +hyperbolic,sinh,f256,qdpp,qdreal,qdpp qd_real,qdpp sinh,8198,216.7792535,214.156966,212.946933,2,2,32.946933,yes,NaN,no,2505.126953,1.880107,07cb9aa0af7241f981735eab48f97723 +hyperbolic,sinh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,8198,238.9375005,237.151916,237.012513,2,2,57.012513,yes,No,no,4969.628906,3.729726,07cb9aa0af7241f981735eab48f97723 +hyperbolic,tanh,f256,fltx,fltx,fltx bl::f256,bl::tanh,8198,219.128554,215.222392,214.042672,2,2,34.042672,yes,Both,yes,1277.455357,,07cb9aa0af7241f981735eab48f97723 +hyperbolic,tanh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,8198,216.1972415,214.274158,214.03864,2,2,34.03864,yes,Both,yes,3840.852865,3.006644,07cb9aa0af7241f981735eab48f97723 +hyperbolic,tanh,f256,qdpp,qdreal,qdpp qd_real,qdpp tanh,8198,218.9438785,214.599863,212.926362,2,2,32.926362,yes,Both,no,2509.472656,1.964431,07cb9aa0af7241f981735eab48f97723 +hyperbolic,tanh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,8198,239.191819,237.196358,237.059834,2,2,57.059834,yes,Inf,no,4813.525391,3.768058,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,acosh,f256,fltx,fltx,fltx bl::f256,bl::acosh,8200,217.720725959,214.442677,213.709421,2,2,33.709421,yes,Both,-,2438.574219,,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,acosh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,8200,215.92850099,214.197277,214.011139,2,2,34.011139,yes,Both,-,8638.183594,3.542309,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,acosh,f256,qdpp,qdreal,qdpp qd_real,qdpp acosh,8200,216.979759158,213.614093,0,0,2,-180,no,NaN,-,7321.386719,3.002323,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,acosh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,8200,238.873033639,237.183996,237.009868,2,2,57.009868,yes,No,-,33907.03125,13.904449,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,asinh,f256,fltx,fltx,fltx bl::f256,bl::asinh,8198,217.1921705,213.881562,212.956798,2,2,32.956798,yes,Both,yes,2636.523438,,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,asinh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,8198,215.877188,214.126921,214.013004,2,2,34.013004,yes,Both,yes,15910.15625,6.034521,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,asinh,f256,qdpp,qdreal,qdpp qd_real,qdpp asinh,8198,216.859989,213.748418,0,1,2,-180,no,NaN,no,6687.597656,2.536521,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,asinh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,8198,238.8906575,237.158686,237.026506,2,2,57.026506,yes,No,no,36447.070312,13.823913,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,atanh,f256,fltx,fltx,fltx bl::f256,bl::atanh,8204,218.285376518,214.164921,213.300563,2,2,33.300563,yes,Both,yes,2280.517578,,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,atanh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,8204,216.191466866,214.156626,214.025325,2,2,34.025325,yes,Both,yes,6536.376953,2.866181,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,atanh,f256,qdpp,qdreal,qdpp qd_real,qdpp atanh,8204,217.671569049,213.781125,0,1,2,-180,no,Both,no,7169.238281,3.143689,07cb9aa0af7241f981735eab48f97723 +inverse_hyperbolic,atanh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,8204,239.146882959,237.181152,237.021503,2,2,57.021503,yes,No,no,7818.945312,3.428584,07cb9aa0af7241f981735eab48f97723 +io,parse,f256,fltx,fltx,fltx bl::f256,bl::parse,8195,219.729492211,212.275332,212.017147,2,2,0.017147,yes,Both,yes,458.316663,,07cb9aa0af7241f981735eab48f97723 +io,parse,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,8195,215.952962068,214.158596,214.005374,2,2,2.005374,yes,Both,yes,611.368626,1.333944,07cb9aa0af7241f981735eab48f97723 +io,parse,f256,qdpp,qdreal,qdpp qd_real,qdpp read,8195,200.912792804,0,0,1,2,-212,no,NaN,yes,3160.014638,6.894828,07cb9aa0af7241f981735eab48f97723 +io,parse,f256,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,8195,238.941820354,237.169709,237.016125,2,2,25.016125,yes,No,no,10553.842401,23.027403,07cb9aa0af7241f981735eab48f97723 +io,to_chars,f256,fltx,fltx,fltx bl::f256,bl::to_chars,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,398.892413,,07cb9aa0af7241f981735eab48f97723 +io,to_chars,f256,qdpp,qdreal,qdpp qd_real,qdpp write,8195,218.809785834,210.961812,208.71213,2,2,18.71213,yes,Both,no,4990.363503,12.51055,07cb9aa0af7241f981735eab48f97723 +io,to_string,f256,fltx,fltx,fltx bl::f256,bl::to_string,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,452.207856,,07cb9aa0af7241f981735eab48f97723 +io,to_string,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,8195,220.316769484,217.209596,216.955609,2,2,26.955609,yes,Both,yes,1060.807514,2.345841,07cb9aa0af7241f981735eab48f97723 +io,to_string,f256,qdpp,qdreal,qdpp qd_real,qdpp to_string,8195,218.809785834,210.961812,208.71213,2,2,18.71213,yes,Both,no,5031.86143,11.12732,07cb9aa0af7241f981735eab48f97723 +io,to_string,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,8195,216.91531064,213.966069,213.625754,2,2,23.625754,yes,Both,yes,13338.058063,29.495414,07cb9aa0af7241f981735eab48f97723 +logarithms,log,f256,fltx,fltx,fltx bl::f256,bl::log,12291,217.776072084,214.333783,213.252927,3,3,33.252927,yes,Both,-,1719.101562,,07cb9aa0af7241f981735eab48f97723 +logarithms,log,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,12291,215.87148618,214.161037,214.022652,3,3,34.022652,yes,Both,-,5508.349609,3.204203,07cb9aa0af7241f981735eab48f97723 +logarithms,log,f256,qdpp,qdreal,qdpp qd_real,qdpp log,12291,205.146984954,62.240702,61.593641,2,3,-118.406359,no,NaN,-,6967.041016,4.052722,07cb9aa0af7241f981735eab48f97723 +logarithms,log,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log,12291,238.863547738,237.168312,237.020732,3,3,57.020732,yes,No,-,6650.830078,3.868783,07cb9aa0af7241f981735eab48f97723 +logarithms,log10,f256,fltx,fltx,fltx bl::f256,bl::log10,12291,217.44848007,214.245682,213.257193,3,3,33.257193,yes,Both,-,1766.210938,,07cb9aa0af7241f981735eab48f97723 +logarithms,log10,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,12291,215.897541443,214.144149,214.004904,3,3,34.004904,yes,Both,-,10907.324219,6.17555,07cb9aa0af7241f981735eab48f97723 +logarithms,log10,f256,qdpp,qdreal,qdpp qd_real,qdpp log10,12291,203.084268265,62.240702,61.593641,2,3,-118.406359,no,NaN,-,7263.769531,4.112629,07cb9aa0af7241f981735eab48f97723 +logarithms,log10,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,12291,238.843380382,237.128968,237.019945,3,3,57.019945,yes,No,-,6770.996094,3.833628,07cb9aa0af7241f981735eab48f97723 +logarithms,log1p,f256,fltx,fltx,fltx bl::f256,bl::log1p,8197,226.82219119,207.415037,207,2,2,27,yes,Both,yes,1756.621094,,07cb9aa0af7241f981735eab48f97723 +logarithms,log1p,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,8197,227.392838761,214.139415,214.010728,2,2,34.010728,yes,Both,yes,5577.34375,3.175041,07cb9aa0af7241f981735eab48f97723 +logarithms,log1p,f256,qdpp,qdreal,qdpp qd_real,qdpp log1p,8197,226.391603943,203.445411,203,2,2,23,yes,NaN,no,6783.886719,3.861895,07cb9aa0af7241f981735eab48f97723 +logarithms,log1p,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,8197,250.055921912,237.123379,237.006206,2,2,57.006206,yes,No,no,7403.466797,4.214607,07cb9aa0af7241f981735eab48f97723 +logarithms,log2,f256,fltx,fltx,fltx bl::f256,bl::log2,12291,218.61302666,214.28538,213.192358,3,3,33.192358,yes,Both,-,1771.113281,,07cb9aa0af7241f981735eab48f97723 +logarithms,log2,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,12291,217.32440772,214.194225,214.010454,3,3,34.010454,yes,Both,-,5881.689453,3.3209,07cb9aa0af7241f981735eab48f97723 +logarithms,log2,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,12291,240.319993979,237.187476,237.019864,3,3,57.019864,yes,No,-,6767.675781,3.821142,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,affine_trig,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,1793.419894,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,affine_trig,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,6087.946429,3.394602,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,affine_trig,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,3953.835227,2.204634,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,affine_trig,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,11450,6.38445,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,chained_arithmetic,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,142.700717,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,chained_arithmetic,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,823.390437,5.770051,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,chained_arithmetic,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,336.778549,2.360034,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,chained_arithmetic,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,518.272901,3.631887,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,haversine,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,4755.869565,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,haversine,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,22212.5,4.670544,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,haversine,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,16325,3.4326,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,haversine,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,33937.5,7.135919,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,horner_polynomial,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,485.67514,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,horner_polynomial,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,2620.673077,5.395938,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,horner_polynomial,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,769.094122,1.583557,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,horner_polynomial,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,1889.311594,3.890073,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,log_sum_exp,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,8837.5,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,log_sum_exp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,27850,3.151344,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,log_sum_exp,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,19437.5,2.199434,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,log_sum_exp,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,40612.5,4.595474,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,mandelbrot,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,110.988956,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,mandelbrot,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,809.935662,7.297444,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,mandelbrot,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,227.94938,2.053802,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,mandelbrot,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,531.882296,4.792209,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,matrix_vector_4x4,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,536.458333,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,matrix_vector_4x4,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,3379.358553,6.299387,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,matrix_vector_4x4,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,969.95789,1.808077,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,matrix_vector_4x4,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,2085.229492,3.88703,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,newton_root,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,237.98945,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,newton_root,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,945.604631,3.973305,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,newton_root,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,437.83701,1.839733,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,newton_root,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,741.047183,3.113782,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,product_sum,f256,fltx,fltx,fltx bl::f256,bl::product_sum,,,,,,,,,-,-,47.814387,,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,product_sum,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same expression,,,,,,,,,-,-,403.515625,8.439209,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,product_sum,f256,qdpp,qdreal,qdpp qd_real,same expression,,,,,,,,,-,-,100.208101,2.095773,07cb9aa0af7241f981735eab48f97723 +mixed_workloads,product_sum,f256,tlfloat,tloct,TLFloat Octuple,same expression,,,,,,,,,-,-,250.615777,5.24143,07cb9aa0af7241f981735eab48f97723 +random,mt19937_64,f256,fltx,fltx,fltx bl::f256,bl::mt19937_64,,,,,,,,,-,-,1.73515,,07cb9aa0af7241f981735eab48f97723 +random,normal,f256,fltx,fltx,fltx bl::f256,bl::normal,,,,,,,,,-,-,271.406578,,07cb9aa0af7241f981735eab48f97723 +random,uniform_real,f256,fltx,fltx,fltx bl::f256,bl::uniform_real,,,,,,,,,-,-,11.010469,,07cb9aa0af7241f981735eab48f97723 +random,uniform_real,f256,qdpp,qdreal,qdpp qd_real,qdpp qdrand,,,,,,,,,-,-,37.585847,3.413646,07cb9aa0af7241f981735eab48f97723 +remainders,fmod,f256,fltx,fltx,fltx bl::f256,bl::fmod,8199,243.996795284,217.724535,217.724535,3,3,27.724535,yes,Both,yes,77.97433,,07cb9aa0af7241f981735eab48f97723 +remainders,fmod,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,8199,inf,inf,inf,3,3,inf,yes,Both,yes,219.011374,2.808762,07cb9aa0af7241f981735eab48f97723 +remainders,fmod,f256,qdpp,qdreal,qdpp qd_real,qdpp fmod,8199,199.825156745,0,0,1,3,-190,no,NaN,no,315.834263,4.05049,07cb9aa0af7241f981735eab48f97723 +remainders,fmod,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,8199,inf,inf,inf,3,3,inf,yes,No,no,609.577288,7.817666,07cb9aa0af7241f981735eab48f97723 +remainders,remainder,f256,fltx,fltx,fltx bl::f256,bl::remainder,4099,inf,inf,inf,1,1,inf,yes,Both,yes,105.60928,,07cb9aa0af7241f981735eab48f97723 +remainders,remainder,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remainder,4099,inf,inf,inf,1,1,inf,yes,Both,yes,251.39591,2.380434,07cb9aa0af7241f981735eab48f97723 +remainders,remainder,f256,qdpp,qdreal,qdpp qd_real,qdpp drem,4099,241.943486,210.446918,205.498921,1,1,15.498921,yes,NaN,no,321.349159,3.042812,07cb9aa0af7241f981735eab48f97723 +remainders,remainder,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::remainder,4099,inf,inf,inf,1,1,inf,yes,No,no,644.930013,6.106755,07cb9aa0af7241f981735eab48f97723 +remainders,remquo,f256,fltx,fltx,fltx bl::f256,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,104.358803,,07cb9aa0af7241f981735eab48f97723 +remainders,remquo,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,342.176232,3.278844,07cb9aa0af7241f981735eab48f97723 +remainders,remquo,f256,qdpp,qdreal,qdpp qd_real,qdpp divrem,4099,inf,inf,inf,1,1,inf,yes,NaN,no,322.930439,3.094425,07cb9aa0af7241f981735eab48f97723 +remainders,remquo,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::remquo,4099,inf,inf,inf,1,1,inf,yes,No,no,652.278646,6.250346,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,cbrt,f256,fltx,fltx,fltx bl::f256,bl::cbrt,8195,219.28474431,215.534477,214.867489,2,2,24.867489,yes,Both,yes,351.210938,,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,cbrt,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,8195,216.025881329,214.197213,214.058038,2,2,24.058038,yes,Both,yes,766.292318,2.181858,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,cbrt,f256,qdpp,qdreal,qdpp qd_real,qdpp nroot,8195,217.231109033,193.080864,175.955036,1,2,-14.044964,no,NaN,no,1143.75,3.25659,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,cbrt,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,8195,239.048520642,237.214089,237.01811,2,2,47.01811,yes,No,no,3252.766927,9.261576,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,hypot,f256,fltx,fltx,fltx bl::f256,bl::hypot,8195,229.930731323,215.484839,213.870154,2,2,23.870154,yes,Both,yes,171.974534,,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,hypot,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,8195,228.685697033,213.212997,212.858237,2,2,22.858237,yes,Both,no,1248.779297,7.26142,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,hypot,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,8195,251.869264053,237.145904,237.032531,2,2,47.032531,yes,No,yes,766.048177,4.454428,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,ipow,f256,fltx,fltx,fltx bl::f256,bl::ipow,8195,217.175762701,214.383216,213.656994,2,2,23.656994,yes,Both,no,109.827303,,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,ipow,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",8195,215.968901433,214.179832,214.011863,2,2,24.011863,yes,Both,yes,563.781738,5.133348,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,ipow,f256,qdpp,qdreal,qdpp qd_real,qdpp npwr,8195,215.047018926,212.773859,212.051585,2,2,22.051585,yes,Both,no,136.660767,1.244324,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,pow,f256,fltx,fltx,fltx bl::f256,bl::pow,8198,216.837164,212.047897,211.143117,2,2,31.143117,yes,Both,yes,2689.876302,,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,pow,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,8198,215.92977,214.172189,214.02831,2,2,34.02831,yes,Both,yes,7383.789062,2.745029,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,pow,f256,qdpp,qdreal,qdpp qd_real,qdpp pow,8198,216.368144,211.658837,210.563451,2,2,30.563451,yes,No,no,7474.414062,2.77872,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,pow,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,8198,238.924537,237.150631,237.009078,2,2,57.009078,yes,No,no,34717.382812,12.906684,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,sqr,f256,fltx,fltx,fltx bl::f256,bl::sqr,8195,220.120699598,216.278909,215.25119,2,2,25.25119,yes,Both,yes,22.543213,,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,sqr,f256,qdpp,qdreal,qdpp qd_real,qdpp sqr,8195,216.730548985,214.989743,214.72076,2,2,24.72076,yes,Both,yes,14.665039,0.65053,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,sqrt,f256,fltx,fltx,fltx bl::f256,bl::sqrt,16391,217.906343684,211.19589,209.568118,4,4,19.568118,yes,Both,yes,119.519043,,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,sqrt,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,16391,216.204737595,214.147252,214.030797,4,4,24.030797,yes,Both,yes,280.593262,2.347687,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,sqrt,f256,qdpp,qdreal,qdpp qd_real,qdpp sqrt,16391,151.77622045,0,0,1,4,-190,no,NaN,no,441.777344,3.696293,07cb9aa0af7241f981735eab48f97723 +roots_and_powers,sqrt,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,16391,239.159067378,237.129126,237.014769,4,4,47.014769,yes,No,no,557.124023,4.661383,07cb9aa0af7241f981735eab48f97723 +rounding,ceil,f256,fltx,fltx,fltx bl::f256,bl::ceil,4110,inf,inf,inf,1,1,inf,yes,Both,yes,0.993219,,07cb9aa0af7241f981735eab48f97723 +rounding,ceil,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ceil,4110,inf,inf,inf,1,1,inf,yes,Both,yes,63.427124,63.860135,07cb9aa0af7241f981735eab48f97723 +rounding,ceil,f256,qdpp,qdreal,qdpp qd_real,qdpp ceil,4110,inf,inf,inf,1,1,inf,yes,Both,no,0.985926,0.992657,07cb9aa0af7241f981735eab48f97723 +rounding,ceil,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::ceil,4110,inf,inf,inf,1,1,inf,yes,No,no,7.012939,7.060816,07cb9aa0af7241f981735eab48f97723 +rounding,floor,f256,fltx,fltx,fltx bl::f256,bl::floor,4110,inf,inf,inf,1,1,inf,yes,Both,yes,0.990982,,07cb9aa0af7241f981735eab48f97723 +rounding,floor,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::floor,4110,inf,inf,inf,1,1,inf,yes,Both,yes,62.894897,63.467254,07cb9aa0af7241f981735eab48f97723 +rounding,floor,f256,qdpp,qdreal,qdpp qd_real,qdpp floor,4110,inf,inf,inf,1,1,inf,yes,Both,no,0.987674,0.996663,07cb9aa0af7241f981735eab48f97723 +rounding,floor,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::floor,4110,inf,inf,inf,1,1,inf,yes,No,no,7.010333,7.074129,07cb9aa0af7241f981735eab48f97723 +rounding,llround,f256,fltx,fltx,fltx bl::f256,bl::llround,4116,inf,inf,inf,1,1,inf,yes,-,-,6.50047,,07cb9aa0af7241f981735eab48f97723 +rounding,llround,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::llround,4116,inf,inf,inf,1,1,inf,yes,-,-,320.553153,49.312303,07cb9aa0af7241f981735eab48f97723 +rounding,lround,f256,fltx,fltx,fltx bl::f256,bl::lround,4112,inf,inf,inf,1,1,inf,yes,-,-,6.629689,,07cb9aa0af7241f981735eab48f97723 +rounding,lround,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lround,4112,inf,inf,inf,1,1,inf,yes,-,-,191.092936,28.823817,07cb9aa0af7241f981735eab48f97723 +rounding,round,f256,fltx,fltx,fltx bl::f256,bl::round,4110,inf,inf,inf,1,1,inf,yes,Both,yes,12.179871,,07cb9aa0af7241f981735eab48f97723 +rounding,round,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::round,4110,inf,inf,inf,1,1,inf,yes,Both,yes,158.040771,12.975571,07cb9aa0af7241f981735eab48f97723 +rounding,round,f256,qdpp,qdreal,qdpp qd_real,qdpp round,4110,229.692457,0,0,0,1,-180,no,Both,no,8.586789,0.704998,07cb9aa0af7241f981735eab48f97723 +rounding,round,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::round,4110,inf,inf,inf,1,1,inf,yes,No,no,12.130762,0.995968,07cb9aa0af7241f981735eab48f97723 +rounding,round_decimals,f256,fltx,fltx,fltx bl::f256,bl::round_decimals,4099,220.044956,215.606687,215.330917,1,1,25.330917,yes,Both,yes,145.74707,,07cb9aa0af7241f981735eab48f97723 +rounding,round_significant,f256,fltx,fltx,fltx bl::f256,bl::round_significant,4096,229.647449,215.594292,215.06782,1,1,25.06782,yes,Both,yes,207.988281,,07cb9aa0af7241f981735eab48f97723 +rounding,roundeven,f256,fltx,fltx,fltx bl::f256,bl::roundeven,4110,inf,inf,inf,1,1,inf,yes,Both,yes,8.064173,,07cb9aa0af7241f981735eab48f97723 +rounding,roundeven,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::rint,4110,inf,inf,inf,1,1,inf,yes,No,no,18.282582,2.267137,07cb9aa0af7241f981735eab48f97723 +rounding,trunc,f256,fltx,fltx,fltx bl::f256,bl::trunc,4110,inf,inf,inf,1,1,inf,yes,Both,yes,2.898633,,07cb9aa0af7241f981735eab48f97723 +rounding,trunc,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::trunc,4110,inf,inf,inf,1,1,inf,yes,Both,yes,63.571777,21.931642,07cb9aa0af7241f981735eab48f97723 +rounding,trunc,f256,qdpp,qdreal,qdpp qd_real,qdpp aint,4110,inf,inf,inf,1,1,inf,yes,Both,no,2.545459,0.878158,07cb9aa0af7241f981735eab48f97723 +rounding,trunc,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::trunc,4110,inf,inf,inf,1,1,inf,yes,No,no,6.19222,2.136255,07cb9aa0af7241f981735eab48f97723 +special_functions,erf,f256,fltx,fltx,fltx bl::f256,bl::erf,8198,212.782396,196.847186,196.755396,2,2,16.755396,yes,Both,yes,15377.34375,,07cb9aa0af7241f981735eab48f97723 +special_functions,erf,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,8198,216.2639365,214.293135,214.06938,2,2,34.06938,yes,Both,yes,38046.875,2.474216,07cb9aa0af7241f981735eab48f97723 +special_functions,erf,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,8198,239.239293,237.303421,237.090794,2,2,57.090794,yes,Inf,no,441801.5625,28.730681,07cb9aa0af7241f981735eab48f97723 +special_functions,erfc,f256,fltx,fltx,fltx bl::f256,bl::erfc,8198,208.160201,191.066815,189.779688,2,2,9.779688,yes,Both,-,10046.09375,,07cb9aa0af7241f981735eab48f97723 +special_functions,erfc,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,8198,216.0696585,214.211875,214.017843,2,2,34.017843,yes,Both,-,81827.34375,8.14519,07cb9aa0af7241f981735eab48f97723 +special_functions,erfc,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,8198,239.0529915,237.201029,237.018916,2,2,57.018916,yes,Inf,-,441520.3125,43.949452,07cb9aa0af7241f981735eab48f97723 +special_functions,lgamma,f256,fltx,fltx,fltx bl::f256,bl::lgamma,4099,211.903615,199.617279,199.225949,1,1,19.225949,yes,Both,-,10612.5,,07cb9aa0af7241f981735eab48f97723 +special_functions,lgamma,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lgamma,4099,215.890428,214.160879,214.017847,1,1,34.017847,yes,Both,-,29853.125,2.813015,07cb9aa0af7241f981735eab48f97723 +special_functions,lgamma,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::lgamma,4099,238.928241,237.162122,237.008749,1,1,57.008749,yes,No,-,141894.53125,13.370509,07cb9aa0af7241f981735eab48f97723 +special_functions,tgamma,f256,fltx,fltx,fltx bl::f256,bl::tgamma,4099,209.040528,202.582542,202.45702,1,1,22.45702,yes,Both,-,9843.75,,07cb9aa0af7241f981735eab48f97723 +special_functions,tgamma,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tgamma,4099,215.948239,214.171703,214.004992,1,1,34.004992,yes,Both,-,32862.5,3.338413,07cb9aa0af7241f981735eab48f97723 +special_functions,tgamma,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::tgamma,4099,238.919522,237.194896,237.040555,1,1,57.040555,yes,No,-,158108.59375,16.061825,07cb9aa0af7241f981735eab48f97723 +trigonometric,acos,f256,fltx,fltx,fltx bl::f256,bl::acos,8204,216.029308016,205.510139,192.466318,2,2,12.466318,yes,Both,-,1382.991536,,07cb9aa0af7241f981735eab48f97723 +trigonometric,acos,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,8204,215.919006178,214.16827,214.01241,2,2,34.01241,yes,Both,-,11961.328125,8.64888,07cb9aa0af7241f981735eab48f97723 +trigonometric,acos,f256,qdpp,qdreal,qdpp qd_real,qdpp acos,8204,217.309476759,213.570151,212.546937,2,2,32.546937,yes,Both,-,8697.949219,6.289228,07cb9aa0af7241f981735eab48f97723 +trigonometric,acos,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,8204,238.937618214,237.176311,237.031977,2,2,57.031977,yes,No,-,11096.972656,8.023891,07cb9aa0af7241f981735eab48f97723 +trigonometric,asin,f256,fltx,fltx,fltx bl::f256,bl::asin,8204,217.91775033,214.870821,214.404436,2,2,34.404436,yes,Both,yes,1337.760417,,07cb9aa0af7241f981735eab48f97723 +trigonometric,asin,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,8204,216.0174187,214.166642,214.033964,2,2,34.033964,yes,Both,yes,11602.148438,8.672815,07cb9aa0af7241f981735eab48f97723 +trigonometric,asin,f256,qdpp,qdreal,qdpp qd_real,qdpp asin,8204,217.158469204,212.8709,212.306181,2,2,32.306181,yes,Both,no,8641.210938,6.459461,07cb9aa0af7241f981735eab48f97723 +trigonometric,asin,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,8204,239.01952962,237.164907,237.026679,2,2,57.026679,yes,No,no,11113.574219,8.307597,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan,f256,fltx,fltx,fltx bl::f256,bl::atan,8198,218.142465,215.364973,214.678988,2,2,34.678988,yes,Both,yes,880.642361,,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,8198,215.9607655,214.196468,214.022743,2,2,34.022743,yes,Both,yes,3805.273438,4.32102,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan,f256,qdpp,qdreal,qdpp qd_real,qdpp atan,8198,216.701054,213.055129,212.444445,2,2,32.444445,yes,NaN,no,6091.748047,6.917392,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,8198,238.9817475,237.221991,237.005716,2,2,57.005716,yes,Inf,no,10086.132812,11.453154,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan2,f256,fltx,fltx,fltx bl::f256,bl::atan2,8206,217.911773079,215.258136,214.277602,3,3,34.277602,yes,Both,yes,934.309896,,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan2,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,8206,215.939645852,214.132014,214.011485,3,3,34.011485,yes,Both,yes,3973.925781,4.253327,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan2,f256,qdpp,qdreal,qdpp qd_real,qdpp atan2,8206,216.286940872,0,0,2,3,-180,no,NaN,no,6033.984375,6.458226,07cb9aa0af7241f981735eab48f97723 +trigonometric,atan2,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,8206,238.987771942,237.174621,237.005636,3,3,57.005636,yes,Inf,no,10175.488281,10.890914,07cb9aa0af7241f981735eab48f97723 +trigonometric,cos,f256,fltx,fltx,fltx bl::f256,bl::cos,12518,226.780465244,215.246584,208.674366,3,3,28.674366,yes,Both,-,861.611328,,07cb9aa0af7241f981735eab48f97723 +trigonometric,cos,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,12518,219.362111864,214.240603,214.013567,3,3,34.013567,yes,Both,-,2750.813802,3.192639,07cb9aa0af7241f981735eab48f97723 +trigonometric,cos,f256,qdpp,qdreal,qdpp qd_real,qdpp cos,12518,161.941146628,0,0,1,3,-180,no,Both,-,1955.878906,2.270025,07cb9aa0af7241f981735eab48f97723 +trigonometric,cos,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,12518,241.656141716,237.245286,237.010092,3,3,57.010092,yes,No,-,5592.382812,6.49061,07cb9aa0af7241f981735eab48f97723 +trigonometric,sin,f256,fltx,fltx,fltx bl::f256,bl::sin,12518,222.290222968,208.567012,202.92477,3,3,22.92477,yes,Both,yes,887.879774,,07cb9aa0af7241f981735eab48f97723 +trigonometric,sin,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,12518,218.487703853,214.163948,214.02345,3,3,34.02345,yes,Both,yes,3655.729167,4.11737,07cb9aa0af7241f981735eab48f97723 +trigonometric,sin,f256,qdpp,qdreal,qdpp qd_real,qdpp sin,12518,142.802514066,0,0,1,3,-180,no,Both,no,1946.523438,2.192328,07cb9aa0af7241f981735eab48f97723 +trigonometric,sin,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,12518,241.18040008,237.214941,237.023215,3,3,57.023215,yes,No,no,5586.279297,6.291707,07cb9aa0af7241f981735eab48f97723 +trigonometric,sincos,f256,fltx,fltx,fltx bl::f256,bl::sincos,,,,,,,,,-,-,1061.682129,,07cb9aa0af7241f981735eab48f97723 +trigonometric,sincos,f256,qdpp,qdreal,qdpp qd_real,qdpp sincos,,,,,,,,,-,-,2099.072266,1.977119,07cb9aa0af7241f981735eab48f97723 +trigonometric,sincos,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sincos,,,,,,,,,-,-,11212.402344,10.560979,07cb9aa0af7241f981735eab48f97723 +trigonometric,tan,f256,fltx,fltx,fltx bl::f256,bl::tan,12518,217.050653666,208.567009,202.92477,3,3,32.92477,yes,Both,yes,1122.644043,,07cb9aa0af7241f981735eab48f97723 +trigonometric,tan,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,12518,215.979315837,214.143677,214.006668,3,3,44.006668,yes,Both,yes,4370.117188,3.892701,07cb9aa0af7241f981735eab48f97723 +trigonometric,tan,f256,qdpp,qdreal,qdpp qd_real,qdpp tan,12518,111.509729272,0,0,1,3,-170,no,Both,no,2338.085938,2.08266,07cb9aa0af7241f981735eab48f97723 +trigonometric,tan,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,12518,238.954881373,237.180286,237.008972,3,3,67.008972,yes,No,no,6600.683594,5.879587,07cb9aa0af7241f981735eab48f97723 diff --git a/validation/metrics/data/wasm32/wasm32/Emscripten_f256_fastmath.csv b/validation/metrics/data/wasm32/wasm32/Emscripten_f256_fastmath.csv new file mode 100644 index 0000000..34a6065 --- /dev/null +++ b/validation/metrics/data/wasm32/wasm32/Emscripten_f256_fastmath.csv @@ -0,0 +1,86 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f256,fltx,fltx,fltx bl::f256,bl::add,4096,227.373862582,215.583815,215.297307,2,2,25.297307,yes,No,no,10.074552,,680cbf9c13134cc08ab2b5bd2bd1191c +arithmetic,divide,f256,fltx,fltx,fltx bl::f256,bl::divide,4100,219.220520548,215.287455,214.762066,2,2,24.762066,yes,No,yes,91.736654,,680cbf9c13134cc08ab2b5bd2bd1191c +arithmetic,multiply,f256,fltx,fltx,fltx bl::f256,bl::multiply,4100,220.046096951,215.608028,215.221541,2,2,25.221541,yes,NaN,no,30.540161,,680cbf9c13134cc08ab2b5bd2bd1191c +arithmetic,subtract,f256,fltx,fltx,fltx bl::f256,bl::subtract,4096,227.447841785,215.602949,215.220788,2,2,25.220788,yes,No,no,10.183993,,680cbf9c13134cc08ab2b5bd2bd1191c +comparisons,equal,f256,fltx,fltx,fltx bl::f256,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.779622,,680cbf9c13134cc08ab2b5bd2bd1191c +comparisons,greater,f256,fltx,fltx,fltx bl::f256,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.604681,,680cbf9c13134cc08ab2b5bd2bd1191c +comparisons,greater_equal,f256,fltx,fltx,fltx bl::f256,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.599876,,680cbf9c13134cc08ab2b5bd2bd1191c +comparisons,less,f256,fltx,fltx,fltx bl::f256,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.594211,,680cbf9c13134cc08ab2b5bd2bd1191c +comparisons,less_equal,f256,fltx,fltx,fltx bl::f256,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.629858,,680cbf9c13134cc08ab2b5bd2bd1191c +comparisons,not_equal,f256,fltx,fltx,fltx bl::f256,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.79349,,680cbf9c13134cc08ab2b5bd2bd1191c +exponentials,exp,f256,fltx,fltx,fltx bl::f256,bl::exp,8198,216.4305135,209.786789,209.697661,2,2,29.697661,yes,Both,-,1040.917969,,680cbf9c13134cc08ab2b5bd2bd1191c +exponentials,exp2,f256,fltx,fltx,fltx bl::f256,bl::exp2,8198,218.030361,214.973213,214.202868,2,2,34.202868,yes,Both,-,883.085938,,680cbf9c13134cc08ab2b5bd2bd1191c +exponentials,expm1,f256,fltx,fltx,fltx bl::f256,bl::expm1,8197,227.989217153,214.88315,213.793932,2,2,33.793932,yes,NaN,yes,1030.761719,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,abs,f256,fltx,fltx,fltx bl::f256,bl::abs,8196,inf,inf,inf,2,2,inf,yes,NaN,yes,3.338686,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,copysign,f256,fltx,fltx,fltx bl::f256,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,No,yes,0.693467,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,fabs,f256,fltx,fltx,fltx bl::f256,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,NaN,yes,3.214951,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,fdim,f256,fltx,fltx,fltx bl::f256,bl::fdim,8197,inf,inf,inf,2,2,inf,yes,No,yes,6.046627,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,fma,f256,fltx,fltx,fltx bl::f256,bl::fma,12293,229.715460613,215.654212,215.096656,3,3,25.096656,yes,Both,no,28.236258,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,fmax,f256,fltx,fltx,fltx bl::f256,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,No,yes,1.173223,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,fmin,f256,fltx,fltx,fltx bl::f256,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,No,yes,1.171445,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,frexp,f256,fltx,fltx,fltx bl::f256,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,9.133301,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,ilogb,f256,fltx,fltx,fltx bl::f256,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.344642,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,ldexp,f256,fltx,fltx,fltx bl::f256,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,NaN,yes,7.562585,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,logb,f256,fltx,fltx,fltx bl::f256,bl::logb,8195,inf,inf,inf,2,2,inf,yes,NaN,-,1.258774,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,modf,f256,fltx,fltx,fltx bl::f256,bl::modf,8195,inf,inf,inf,2,2,inf,yes,NaN,yes,13.089097,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,nextafter,f256,fltx,fltx,fltx bl::f256,bl::nextafter,,,,,,,,,-,-,6.829317,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,nexttoward,f256,fltx,fltx,fltx bl::f256,bl::nexttoward,,,,,,,,,-,-,6.810861,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,recip,f256,fltx,fltx,fltx bl::f256,bl::recip,8195,217.927920075,215.148048,214.625136,2,2,24.625136,yes,NaN,no,89.907837,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,scalbln,f256,fltx,fltx,fltx bl::f256,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,NaN,yes,7.202947,,680cbf9c13134cc08ab2b5bd2bd1191c +floating_point_utilities,scalbn,f256,fltx,fltx,fltx bl::f256,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,NaN,yes,7.18811,,680cbf9c13134cc08ab2b5bd2bd1191c +hyperbolic,cosh,f256,fltx,fltx,fltx bl::f256,bl::cosh,8198,217.5106305,214.737937,214.159072,2,2,34.159072,yes,Both,-,1289.355469,,680cbf9c13134cc08ab2b5bd2bd1191c +hyperbolic,sinh,f256,fltx,fltx,fltx bl::f256,bl::sinh,8198,217.022625,214.597984,213.844482,2,2,33.844482,yes,NaN,yes,1293.863932,,680cbf9c13134cc08ab2b5bd2bd1191c +hyperbolic,tanh,f256,fltx,fltx,fltx bl::f256,bl::tanh,8198,219.128554,215.222392,214.042672,2,2,34.042672,yes,NaN,yes,1261.369978,,680cbf9c13134cc08ab2b5bd2bd1191c +inverse_hyperbolic,acosh,f256,fltx,fltx,fltx bl::f256,bl::acosh,8200,217.720725959,214.442677,213.709421,2,2,33.709421,yes,Both,-,2423.681641,,680cbf9c13134cc08ab2b5bd2bd1191c +inverse_hyperbolic,asinh,f256,fltx,fltx,fltx bl::f256,bl::asinh,8198,217.1921705,213.881562,212.956798,2,2,32.956798,yes,NaN,yes,2643.391927,,680cbf9c13134cc08ab2b5bd2bd1191c +inverse_hyperbolic,atanh,f256,fltx,fltx,fltx bl::f256,bl::atanh,8204,218.285376518,214.164921,213.300563,2,2,33.300563,yes,NaN,yes,2273.55957,,680cbf9c13134cc08ab2b5bd2bd1191c +io,parse,f256,fltx,fltx,fltx bl::f256,bl::parse,8195,219.729662732,212.275332,212.017147,2,2,0.017147,yes,Both,yes,554.891437,,680cbf9c13134cc08ab2b5bd2bd1191c +io,to_chars,f256,fltx,fltx,fltx bl::f256,bl::to_chars,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,371.082378,,680cbf9c13134cc08ab2b5bd2bd1191c +io,to_string,f256,fltx,fltx,fltx bl::f256,bl::to_string,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,407.772627,,680cbf9c13134cc08ab2b5bd2bd1191c +logarithms,log,f256,fltx,fltx,fltx bl::f256,bl::log,12291,217.713430044,214.333783,213.252927,3,3,33.252927,yes,Both,-,1726.523438,,680cbf9c13134cc08ab2b5bd2bd1191c +logarithms,log10,f256,fltx,fltx,fltx bl::f256,bl::log10,12291,217.407206146,214.245682,213.257193,3,3,33.257193,yes,NaN,-,1777.480469,,680cbf9c13134cc08ab2b5bd2bd1191c +logarithms,log1p,f256,fltx,fltx,fltx bl::f256,bl::log1p,8197,227.627482935,214.787129,214.020088,2,2,34.020088,yes,NaN,yes,1766.777344,,680cbf9c13134cc08ab2b5bd2bd1191c +logarithms,log2,f256,fltx,fltx,fltx bl::f256,bl::log2,12291,218.589512067,214.28538,213.192358,3,3,33.192358,yes,NaN,-,1755.761719,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,affine_trig,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,1799.587674,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,chained_arithmetic,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,142.109375,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,haversine,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,4750,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,horner_polynomial,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,473.25494,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,log_sum_exp,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,9212.5,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,mandelbrot,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,127.581398,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,matrix_vector_4x4,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,560.712449,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,newton_root,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,250.279107,,680cbf9c13134cc08ab2b5bd2bd1191c +mixed_workloads,product_sum,f256,fltx,fltx,fltx bl::f256,bl::product_sum,,,,,,,,,-,-,49.108615,,680cbf9c13134cc08ab2b5bd2bd1191c +random,mt19937_64,f256,fltx,fltx,fltx bl::f256,bl::mt19937_64,,,,,,,,,-,-,1.758452,,680cbf9c13134cc08ab2b5bd2bd1191c +random,normal,f256,fltx,fltx,fltx bl::f256,bl::normal,,,,,,,,,-,-,265.853818,,680cbf9c13134cc08ab2b5bd2bd1191c +random,uniform_real,f256,fltx,fltx,fltx bl::f256,bl::uniform_real,,,,,,,,,-,-,11.405088,,680cbf9c13134cc08ab2b5bd2bd1191c +remainders,fmod,f256,fltx,fltx,fltx bl::f256,bl::fmod,8199,243.996795284,217.724535,217.724535,3,3,27.724535,yes,No,yes,75.512695,,680cbf9c13134cc08ab2b5bd2bd1191c +remainders,remainder,f256,fltx,fltx,fltx bl::f256,bl::remainder,4099,inf,inf,inf,1,1,inf,yes,No,yes,103.171503,,680cbf9c13134cc08ab2b5bd2bd1191c +remainders,remquo,f256,fltx,fltx,fltx bl::f256,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,101.808966,,680cbf9c13134cc08ab2b5bd2bd1191c +roots_and_powers,cbrt,f256,fltx,fltx,fltx bl::f256,bl::cbrt,8195,219.28474431,215.534477,214.867489,2,2,24.867489,yes,NaN,yes,351.226562,,680cbf9c13134cc08ab2b5bd2bd1191c +roots_and_powers,hypot,f256,fltx,fltx,fltx bl::f256,bl::hypot,8195,229.931215146,215.484839,213.870154,2,2,23.870154,yes,No,yes,173.40933,,680cbf9c13134cc08ab2b5bd2bd1191c +roots_and_powers,ipow,f256,fltx,fltx,fltx bl::f256,bl::ipow,8195,217.175762701,214.383216,213.656994,2,2,23.656994,yes,Both,no,109.857856,,680cbf9c13134cc08ab2b5bd2bd1191c +roots_and_powers,pow,f256,fltx,fltx,fltx bl::f256,bl::pow,8198,216.837164,212.047897,211.143117,2,2,31.143117,yes,No,yes,2626.790365,,680cbf9c13134cc08ab2b5bd2bd1191c +roots_and_powers,sqr,f256,fltx,fltx,fltx bl::f256,bl::sqr,8195,220.120699598,216.278909,215.25119,2,2,25.25119,yes,Both,yes,23.358561,,680cbf9c13134cc08ab2b5bd2bd1191c +roots_and_powers,sqrt,f256,fltx,fltx,fltx bl::f256,bl::sqrt,16391,217.906343684,211.19589,209.568118,4,4,19.568118,yes,NaN,yes,118.790283,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,ceil,f256,fltx,fltx,fltx bl::f256,bl::ceil,4110,inf,inf,inf,1,1,inf,yes,Both,yes,0.941186,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,floor,f256,fltx,fltx,fltx bl::f256,bl::floor,4110,inf,inf,inf,1,1,inf,yes,Both,yes,0.941429,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,llround,f256,fltx,fltx,fltx bl::f256,bl::llround,4116,inf,inf,inf,1,1,inf,yes,-,-,6.521846,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,lround,f256,fltx,fltx,fltx bl::f256,bl::lround,4112,inf,inf,inf,1,1,inf,yes,-,-,6.7004,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,round,f256,fltx,fltx,fltx bl::f256,bl::round,4110,inf,inf,inf,1,1,inf,yes,Both,yes,13.432465,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,round_decimals,f256,fltx,fltx,fltx bl::f256,bl::round_decimals,4099,220.044956,215.606687,215.330917,1,1,25.330917,yes,NaN,yes,140.899658,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,round_significant,f256,fltx,fltx,fltx bl::f256,bl::round_significant,4096,229.647449,215.594292,215.06782,1,1,25.06782,yes,NaN,yes,211.691895,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,roundeven,f256,fltx,fltx,fltx bl::f256,bl::roundeven,4110,inf,inf,inf,1,1,inf,yes,NaN,yes,8.162486,,680cbf9c13134cc08ab2b5bd2bd1191c +rounding,trunc,f256,fltx,fltx,fltx bl::f256,bl::trunc,4110,inf,inf,inf,1,1,inf,yes,Both,yes,2.869931,,680cbf9c13134cc08ab2b5bd2bd1191c +special_functions,erf,f256,fltx,fltx,fltx bl::f256,bl::erf,8198,212.782396,196.847186,196.755396,2,2,16.755396,yes,NaN,yes,15769.53125,,680cbf9c13134cc08ab2b5bd2bd1191c +special_functions,erfc,f256,fltx,fltx,fltx bl::f256,bl::erfc,8198,208.160201,191.066815,189.779688,2,2,9.779688,yes,Both,-,14825,,680cbf9c13134cc08ab2b5bd2bd1191c +special_functions,lgamma,f256,fltx,fltx,fltx bl::f256,bl::lgamma,4099,211.903615,199.617279,199.225949,1,1,19.225949,yes,NaN,-,11231.25,,680cbf9c13134cc08ab2b5bd2bd1191c +special_functions,tgamma,f256,fltx,fltx,fltx bl::f256,bl::tgamma,4099,209.040528,202.582542,202.45702,1,1,22.45702,yes,NaN,-,11903.90625,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,acos,f256,fltx,fltx,fltx bl::f256,bl::acos,8204,216.029308016,205.510139,192.466318,2,2,12.466318,yes,Both,-,1335.560826,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,asin,f256,fltx,fltx,fltx bl::f256,bl::asin,8204,217.91775033,214.870821,214.404436,2,2,34.404436,yes,NaN,yes,1343.277995,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,atan,f256,fltx,fltx,fltx bl::f256,bl::atan,8198,218.142465,215.364973,214.678988,2,2,34.678988,yes,NaN,yes,906.08724,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,atan2,f256,fltx,fltx,fltx bl::f256,bl::atan2,8206,217.911773079,215.258136,214.277602,3,3,34.277602,yes,No,yes,950.651042,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,cos,f256,fltx,fltx,fltx bl::f256,bl::cos,12518,226.780465244,215.246584,208.674366,3,3,28.674366,yes,NaN,-,874.697266,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,sin,f256,fltx,fltx,fltx bl::f256,bl::sin,12518,222.290222968,208.567012,202.92477,3,3,22.92477,yes,NaN,yes,851.708984,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,sincos,f256,fltx,fltx,fltx bl::f256,bl::sincos,,,,,,,,,-,-,1035.229492,,680cbf9c13134cc08ab2b5bd2bd1191c +trigonometric,tan,f256,fltx,fltx,fltx bl::f256,bl::tan,12518,217.050653666,208.567009,202.92477,3,3,32.92477,yes,NaN,yes,1119.030762,,680cbf9c13134cc08ab2b5bd2bd1191c diff --git a/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f128_accuracy.csv b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f128_accuracy.csv new file mode 100644 index 0000000..a3ec772 --- /dev/null +++ b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f128_accuracy.csv @@ -0,0 +1,448 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,moderate,4097,10322096095657499311,109.950521,107.250365,107.040693,106.000000,1.040693,yes,Both,yes,-2.472067804890653694736606692562736837036787645394e-04,-0.00024720678048906536947366066925627220254736992061971280405933562914519934341009422,-0.0002472067804890653694736606692562736837036787645394 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,qdpp,ddreal,qdpp dd_real,qdpp read,moderate,4097,10322096095657499311,106.830416,104.375370,103.521956,,,,NaN,yes,-8.588723799651326893003606507151380025417593648874e-19,-8.5887237996513268930036065071519698388651731130205141161512619653494877453463251e-19,-8.588723799651326893003606507151380025417593648874e-19 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,moderate,4097,10322096095657499311,107.925004,106.160305,106.000000,,,,Both,no,1.0000000000000000000000000000000123259516440783094595582588325435348386438505485784844495356082916259765625,1,1.0000000000000000000000000000000123259516440783094595582588325435348386438505486 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,moderate,4097,10322096095657499311,114.919497,113.157032,113.020059,,,,No,no,-2.472067804890653694736606692562736837036787645394e-04,-0.00024720678048906536947366066925627370718013897314772300404210327361966695130200689,-0.0002472067804890653694736606692562736837036787645394 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,wide_exponent,4098,10322096095657499308,109.923010,107.051396,106.003381,106.000000,0.003381,yes,Both,yes,-4.215228812298638183537364477017984307424253045187e-293,-4.2152288122986381835373644770182307620164082432452873068526743823738143144126931e-293,-4.215228812298638183537364477017984307424253045187e-293 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,qdpp,ddreal,qdpp dd_real,qdpp read,wide_exponent,4098,10322096095657499308,98.230238,0.000000,0.000000,,,,NaN,yes,9.801547763699694900556401135347989457052087638272e-278,nan,9.801547763699694900556401135347989457052087638272e-278 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,wide_exponent,4098,10322096095657499308,106.283030,0.000000,0.000000,,,,Both,no,4.106386782837618869142465736384079482165950265901e-297,0,4.106386782837618869142465736384079482165950265901e-297 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,wide_exponent,4098,10322096095657499308,114.945626,113.184622,113.027719,,,,No,no,-6.994944574485638725989218380619056352714442512346e+274,-6.9949445744856387259892183806190570134846365830973741407546647660305377989961645e+274,-6.994944574485638725989218380619056352714442512346e+274 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,qdpp,ddreal,qdpp dd_real,qdpp to_string,moderate,4099,10322096095657499356,113.984289,107.925749,107.763341,,,,Both,no,"[2.8197433737124644,7.8263600425744884e-17,-4.3445025591362587e-33,2.4116833858479951e-49]",2.819743373712464496453993615178836e+00,2.8197433737124644964539936151788462379117802656936538548058089354714228491616268 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,moderate,4099,10322096095657499356,112.006721,106.046153,106.003594,,,,Both,no,"[4.0283050850804027,1.1180792639177158e-16,-6.2065867107869756e-33,3.4453477353241089e-49]",4.028305085080402859429446057471084e+00,4.0283050850804028594294460574710344708404448549180543678577390200729047009531314 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,moderate,4099,10322096095657499356,110.801332,107.893373,107.362665,,,,Both,yes,"[1.008688938141546,2.7996742095236117e-17,-1.5541313844311742e-33,8.6271622314403006e-50]",1.00868893814154606005353659707718,1.0086889381415460600535365970771848347585370420395131047593302586751207172710565 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,qdpp,ddreal,qdpp dd_real,qdpp to_string,wide_exponent,4096,10322096095657499357,104.905428,102.378174,102.257899,,,,Both,no,"[5.1062396004606193e+260,1.4172661934210349e+244,-7.8674077997944175e+227,4.3672886417236531e+211]",5.106239600460619422853136150472774e+260,5.106239600460619422853136150471931817526062608103033112808468173689091334840783e+260 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,wide_exponent,4096,10322096095657499357,109.529692,106.034942,105.994061,,,,Both,no,"[1.570745732098147e-207,4.3596951940176515e-224,-2.4201169923730179e-240,1.3434348036095544e-256]",1.570745732098147052789232581064327e-207,1.570745732098147052789232581064346440801824340244516345502860090506962770321629e-207 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,wide_exponent,4096,10322096095657499357,110.510134,107.628363,107.304630,,,,Both,yes,"[-1.0005623436112949e+24,-27771183.786254175,1.5416103830298108e-09,-8.5576567112045135e-26]",-1000562343611294930157871.78625418,-1000562343611294930157871.786254175007343292236328125 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,qdpp,ddreal,qdpp dd_real,qdpp write,moderate,4099,10322096095657499356,113.984289,107.925749,107.763341,,,,Both,no,"[2.8197433737124644,7.8263600425744884e-17,-4.3445025591362587e-33,2.4116833858479951e-49]",2.819743373712464496453993615178836e+00,2.8197433737124644964539936151788462379117802656936538548058089354714228491616268 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,qdpp,ddreal,qdpp dd_real,qdpp write,wide_exponent,4096,10322096095657499357,104.905428,102.378174,102.257899,,,,Both,no,"[5.1062396004606193e+260,1.4172661934210349e+244,-7.8674077997944175e+227,4.3672886417236531e+211]",5.106239600460619422853136150472774e+260,5.106239600460619422853136150471931817526062608103033112808468173689091334840783e+260 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,qdpp,ddreal,qdpp dd_real,qdpp operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,qdpp,ddreal,qdpp dd_real,qdpp operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,qdpp,ddreal,qdpp dd_real,qdpp operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,tlfloat,tlquad,TLFloat Quad,TLFloat operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,qdpp,ddreal,qdpp dd_real,qdpp operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,qdpp,ddreal,qdpp dd_real,qdpp operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,tlfloat,tlquad,TLFloat Quad,TLFloat operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,qdpp,ddreal,qdpp dd_real,qdpp operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,general,3845,10322096095657499292,119.108587,106.483519,105.736235,90.000000,15.736235,yes,Both,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,qdpp,ddreal,qdpp dd_real,qdpp operator+,general,3845,10322096095657499292,119.108587,106.483519,105.736235,,,,NaN,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,general,3845,10322096095657499292,119.108587,106.483519,105.736235,,,,Both,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,general,3845,10322096095657499292,125.830155,113.252951,113.031307,,,,No,no,"representative lhs [66971.586500767997,1.8588349332206987e-12,-1.0318606709195925e-28,5.7279773753004665e-45] ; representative rhs [2.1043957799031432,5.8408716194312071e-17,-3.2423350778860755e-33,1.7998575285094606e-49]",66973.690896547901769622371152765318940018706501688624296419333203900237094785552,66973.690896547901769622371152765325250905948269783067590247855466190074480437033 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,subnormal,251,10322096095657499292,inf,inf,inf,90.000000,inf,yes,Both,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312,7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,qdpp,ddreal,qdpp dd_real,qdpp operator+,subnormal,251,10322096095657499292,inf,inf,inf,,,,NaN,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312,7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,subnormal,251,10322096095657499292,inf,inf,inf,,,,Both,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,subnormal,251,10322096095657499292,inf,inf,inf,,,,No,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312,7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,general,3844,10322096095657499292,118.876961,106.530508,105.744857,90.000000,15.744857,yes,Both,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,qdpp,ddreal,qdpp dd_real,qdpp operator-,general,3844,10322096095657499292,118.876961,106.530508,105.744857,,,,NaN,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,general,3844,10322096095657499292,118.876961,106.530508,105.744857,,,,Both,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,general,3844,10322096095657499292,126.002774,113.274079,113.013310,,,,No,no,"representative lhs [547185574853.96362,1.5187450598640562e-05,-8.4307286699839347e-22,4.6799945418917936e-38] ; representative rhs [-7665751255.1039944,-2.1276733861164116e-07,1.1810959910743055e-23,-6.556399817915812e-40]",554851326109.06763281659977318970354064704610802527540158735064323991537094116211,554851326109.06763281659977318970348770748690463150420981719435076229274272918701 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,subnormal,252,10322096095657499292,inf,inf,inf,90.000000,inf,yes,Both,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310,-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,qdpp,ddreal,qdpp dd_real,qdpp operator-,subnormal,252,10322096095657499292,inf,inf,inf,,,,NaN,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310,-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,subnormal,252,10322096095657499292,inf,inf,inf,,,,Both,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,subnormal,252,10322096095657499292,inf,inf,inf,,,,No,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310,-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,general,4092,10322096095657499292,108.673668,105.665876,105.380753,90.000000,15.380753,yes,Both,yes,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60037994384765625,-156159778640594921198000750.60038290050850297752267811067325203046404306830015704 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,qdpp,ddreal,qdpp dd_real,qdpp operator*,general,4092,10322096095657499292,108.673668,105.665876,105.380753,,,,NaN,no,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60037994384765625,-156159778640594921198000750.60038290050850297752267811067325203046404306830015704 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,general,4092,10322096095657499292,108.517210,105.172405,104.685792,,,,Both,no,"broad lhs [-8038039671158.3145,-0.00022310041789425956,1.2384561037485062e-20,-6.8748124068457664e-37] ; broad rhs [2.5635359082663138e-69,7.1152414745265618e-86,-3.9497524553936191e-102,2.1925530587738712e-118]",-2.0605803329083492881294378674856916780067042740122006434502346656412091808499997e-56,-2.0605803329083492881294378674857548356708679074621085271346648345255418966878113e-56 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,general,4092,10322096095657499292,114.944521,113.125729,113.004612,,,,No,no,"structured lhs [6.7508285404035795e-17,1.8737313202131732e-33,-1.0401298268309784e-49,5.7738804117356459e-66] ; balanced-product rhs [14812996567977088,0.41114324633653965,-2.2823034925097943e-17,1.2669329432833911e-33]",1.0000000000000000329652822598848238397673215012480593411198684057546474598932029,1.000000000000000032965282259884823743778146023579451637148032704768423970088877 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,subnormal,8,10322096095657499292,123.430323,107.640342,107.640342,90.000000,17.640342,yes,Both,yes,"extreme lhs [5.3610920538229009e+270,1.4880019588222884e+254,-8.2600701768591933e+237,4.5852600476843326e+221] ; extreme rhs [2.8682136140660301e-295,7.9608919846980822e-312,-0,0]",1.5376757215036059473819023136396346852543747719615695276077139367073548105554037e-24,1.5376757215036059473819023136396286054027234522232977278134529923886643804961882e-24 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,qdpp,ddreal,qdpp dd_real,qdpp operator*,subnormal,8,10322096095657499292,123.430323,107.640342,107.640342,,,,NaN,no,"extreme lhs [5.3610920538229009e+270,1.4880019588222884e+254,-8.2600701768591933e+237,4.5852600476843326e+221] ; extreme rhs [2.8682136140660301e-295,7.9608919846980822e-312,-0,0]",1.5376757215036059473819023136396346852543747719615695276077139367073548105554037e-24,1.5376757215036059473819023136396286054027234522232977278134529923886643804961882e-24 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,subnormal,8,10322096095657499292,123.759111,108.124902,108.124902,,,,Both,no,"extreme lhs [4.6055401956920925e+270,1.2782941915235026e+254,-7.0959582183699609e+237,3.9390480979062175e+221] ; extreme rhs [-2.5697135742832743e-293,-7.1323879421527558e-310,0,-0]",-1.1834919157777218149998406915973471377624231448348574550693011367000657931522837e-22,-1.1834919157777218149998406915973504822263386136173231246119304206039636122242069e-22 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,subnormal,8,10322096095657499292,129.709469,113.478226,113.478226,,,,No,no,"extreme lhs [4.6055401956920925e+270,1.2782941915235026e+254,-7.0959582183699609e+237,3.9390480979062175e+221] ; extreme rhs [-2.5697135742832743e-293,-7.1323879421527558e-310,0,-0]",-1.1834919157777218149998406915973504004146571440971208102163557649738436437344127e-22,-1.1834919157777218149998406915973504822263386136173231246119304206039636122242069e-22 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,general,4096,10322096095657499292,110.882649,105.971646,105.124683,90.000000,15.124683,yes,Both,yes,"representative lhs [3.8069729471352109e-08,1.05664725500865e-24,-5.8655705570878625e-41,3.2560457425211756e-57] ; representative rhs [-10239996542.103203,-2.8421699832812405e-07,1.5777212776686647e-23,-8.7581124445438569e-40]",-3.717748274115425677507007818785488818087130701795158032304321273801830518128672e-18,-3.7177482741154256775070078187854047565702465103661629499646177206025402808246684e-18 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,qdpp,ddreal,qdpp dd_real,qdpp operator/,general,4096,10322096095657499292,110.709255,106.129356,105.462052,,,,NaN,no,"representative lhs [2304839803122757,0.06397215543748494,-3.5511679950797592e-18,1.9712942362247516e-34] ; representative rhs [-8.3386726388707522e-25,-2.3144465896215306e-41,1.284775946531497e-57,-7.1319391866192352e-74]",-2764036799308726961546172644065389051904,-2764036799308726961546172644065339586378.6678437169004336514100795996282854437548 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator/,general,4096,10322096095657499292,110.882649,105.971646,105.124683,,,,NaN,no,"representative lhs [3.8069729471352109e-08,1.05664725500865e-24,-5.8655705570878625e-41,3.2560457425211756e-57] ; representative rhs [-10239996542.103203,-2.8421699832812405e-07,1.5777212776686647e-23,-8.7581124445438569e-40]",-3.717748274115425677507007818785488818087130701795158032304321273801830518128672e-18,-3.7177482741154256775070078187854047565702465103661629499646177206025402808246684e-18 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,general,4096,10322096095657499292,114.933605,113.147176,113.003421,,,,No,no,"representative lhs [-3.9611127833857948e-14,-1.0994296538129874e-30,6.1030605780942182e-47,-3.3878791872411597e-63] ; representative rhs [196137443940584.88,0.0054439076563490806,-3.0219758120059617e-19,1.6775335631746611e-35]",-2.019559704563968272888412224331062020056879659920556289291944695251743532234808e-28,-2.0195597045639682728884122243310618260409213965686229269660661328516718265119011e-28 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,subnormal,4,10322096095657499292,inf,inf,inf,90.000000,inf,yes,Both,yes,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,qdpp,ddreal,qdpp dd_real,qdpp operator/,subnormal,4,10322096095657499292,inf,inf,inf,,,,NaN,no,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator/,subnormal,4,10322096095657499292,inf,inf,inf,,,,NaN,no,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,subnormal,4,10322096095657499292,inf,inf,inf,,,,No,no,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,moderate,4099,10322096095657499356,109.099094,104.680325,99.580200,90.000000,9.580200,yes,Both,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50] ; [-2.2467526986846895,-6.2359914417961224e-17,3.4616706400237409e-33,-1.9216132241116296e-49] ; [-0.82478157060333857,-2.2892287249258141e-17,1.2707772195229639e-33,-7.0542306414176576e-50]",-0.0025616587031475578614921195531973426573882576399799792521563357797220739087151742,-0.0025616587031475578614921195531946393591985326302623011385541559314120186541712416 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,moderate,4099,10322096095657499356,108.177888,103.664946,99.580200,,,,Both,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50] ; [-2.2467526986846895,-6.2359914417961224e-17,3.4616706400237409e-33,-1.9216132241116296e-49] ; [-0.82478157060333857,-2.2892287249258141e-17,1.2707772195229639e-33,-7.0542306414176576e-50]",-0.0025616587031475578614921195531973426573882576399799792521563357797220739087151742,-0.0025616587031475578614921195531946393591985326302623011385541559314120186541712416 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,moderate,4099,10322096095657499356,114.897442,113.182994,113.025245,,,,No,no,"[-7.5997781556486999,-2.1093621726111233e-16,1.1709312256531064e-32,-6.4999740348631675e-49] ; [7.5770165974677148,2.1030445711189046e-16,-1.1674242523345727e-32,6.4805064222382565e-49] ; [-6.6174929362548802,-1.8367232557811253e-16,1.019586224216343e-32,-5.6598405085780568e-49]",-64.201138158677660631610513778239055170095124556316768571493974662039994072415539,-64.201138158677660631610513778239061245199688185888259072502568550744850022381024 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,cancellation,4098,10322096095657499352,123.613534,107.447694,107.008989,90.000000,17.008989,yes,Both,no,"one plus a low-limb delta [1,2.3375830000300188e-20,0,0] ; one plus a low-limb delta [1,9.1191608041326794e-20,0,0] ; native product cancellation",6.0206627557371401035138369829719396083930638942820518512027281512011279702649282e-36,6.0206627557371401035138369829719764831182728766548123483364806462892589095319671e-36 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,cancellation,4098,10322096095657499352,0.067350,0.000000,0.000000,,,,Both,no,"next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; one plus a low-limb delta [1,1.5333665360408769e-34,0,0] ; native product cancellation",0,1.5333665360408772917815245989544684211394174303105262982511956907436790017967341e-34 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,wide_exponent,4096,10322096095657499357,119.616115,106.579100,105.347039,90.000000,15.347039,yes,Both,no,"[1.6938644702759635e-90,4.701418338737172e-107,-2.6098114440304809e-123,1.448736377546434e-139] ; [79428146.335863903,2.2045739216343092e-09,-1.2237843636432928e-25,6.7933678884651449e-42] ; [9.2909522372705566e-90,2.5787572736275956e-106,-1.4314978500504758e-122,7.9464093641372402e-139]",1.3454052430915206938868087189563345722550509265256751578481158995824810109214383e-82,1.3454052430915206938868087189563606478535306154783196089715180736698264946825388e-82 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,wide_exponent,4096,10322096095657499357,119.061442,105.416426,104.112253,,,,Both,no,"[8.5721586263015062e-78,2.3792519694147713e-94,-1.3207501589145139e-110,7.331636181021139e-127] ; [8.4624728507206641e+70,2.3488080510338416e+54,-1.3038503893413553e+38,7.2378236145662375e+21] ; [-3.7357185346303535e-07,-1.0368701826663922e-23,5.7557857517176024e-40,-3.1951029331831484e-56]",3.5184474300843906574404451871894785272491595392222950262976866790968099472984533e-07,3.518447430084390657440445187189639014267579136229292612265977276091417324873532e-07 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,wide_exponent,4096,10322096095657499357,125.365166,113.230161,113.032601,,,,No,no,"[-1.3853028727925241e-16,-3.8449878636340866e-33,2.1343970278054273e-49,-1.1848283619805429e-65] ; [-2.7840252040715031e-18,-7.7272222067423321e-35,4.2894700051600743e-51,-2.3811341815838518e-67] ; [-1.0194028502696682e-51,-2.8294112893447415e-68,1.5706387797824414e-84,-8.7187966834181365e-101]",3.8567181131270467416103884341803196252968876035993596157940944011043867018129791e-34,3.8567181131270467416103884341803192622066121759357700299162474901344372908142603e-34 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,qdpp,ddreal,qdpp dd_real,qdpp abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,subnormal,4100,10322096095657499350,inf,inf,inf,90.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,qdpp,ddreal,qdpp dd_real,qdpp abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,qdpp,ddreal,qdpp dd_real,qdpp fabs,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fabs,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0]",8,8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,moderate,4099,10322096095657499356,108.710750,105.621789,105.403238,90.000000,15.403238,yes,Both,yes,"[-2.0216112865291063,-5.6110984928667459e-17,3.114785370110088e-33,-1.7290532173309048e-49]",4.0869121938218684213523234559135312039828584030511109615650764542715833727015706,4.086912193821868421352323455913607387135084308816614946511827134127630171714709 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,qdpp,ddreal,qdpp dd_real,qdpp sqr,moderate,4099,10322096095657499356,108.649492,105.621789,105.403238,,,,NaN,yes,"[-2.0216112865291063,-5.6110984928667459e-17,3.114785370110088e-33,-1.7290532173309048e-49]",4.0869121938218684213523234559135312039828584030511109615650764542715833727015706,4.086912193821868421352323455913607387135084308816614946511827134127630171714709 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,wide_exponent,4096,10322096095657499357,108.714763,105.598081,105.370295,90.000000,15.370295,yes,Both,yes,"[4.07867604911808e+17,11.320600149295146,-6.2841954691612277e-16,3.4884292505539414e-32]",166355983136494714602069966978531328,166355983136494714602069966978534500.62754285635655510754919878168120152773808347 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,qdpp,ddreal,qdpp dd_real,qdpp sqr,wide_exponent,4096,10322096095657499357,108.650741,105.598081,105.370295,,,,NaN,yes,"[4.07867604911808e+17,11.320600149295146,-6.2841954691612277e-16,3.4884292505539414e-32]",166355983136494714602069966978531328,166355983136494714602069966978534500.62754285635655510754919878168120152773808347 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,near_one,4099,10322096095657499359,109.041603,106.207316,105.235269,90.000000,15.235269,yes,Both,yes,"[0.7943239392491388,2.2046918159133699e-17,1.2238498081148352e-33,6.7937311782608489e-50]",1.2589322197002942275560659685836243624199496927685685911021398405984506041477289,1.2589322197002942275560659685835979972909064819121737721490343315675812064184067 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,qdpp,ddreal,qdpp dd_real,qdpp inv,near_one,4099,10322096095657499359,109.434551,106.961274,106.471075,,,,NaN,no,"[0.9803714880397002,2.7210774967692536e-17,1.5105014443513052e-33,8.384967411241868e-50]",1.0200215042968537593600620503816682811592574829905761410992441748021852809813481,1.0200215042968537593600620503816592108504513295376801423995312564714541690785466 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,wide_exponent,4096,10322096095657499357,109.009049,105.925795,105.189487,90.000000,15.189487,yes,Both,yes,"[3.5001788065165318e+43,9.7149477532491364e+26,53928793393.438126,2.9936494057824018e-06]",2.8569969000961575149593584421158660998363524565146662142923865841595715918551683e-44,2.8569969000961575149593584421158043381809410343861907578030166512899574822804677e-44 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,qdpp,ddreal,qdpp dd_real,qdpp inv,wide_exponent,4096,10322096095657499357,109.400778,106.810343,106.537753,,,,NaN,no,"[1.1327896146203641e-35,3.1441227805194653e-52,1.745338751590589e-68,9.6885763389319921e-85]",88277645477455545568826197921745920,88277645477455545568826197921745170.465683891467476748857561440448137587439147607 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,cancellation,4098,10322096095657499352,137.992247,inf,106.227061,90.000000,16.227061,yes,Both,yes,"one plus a low-limb delta [1.0000000000000002,-9.2098754789066345e-17,0,0] ; one plus a low-limb delta [1,9.3157411673208082e-33,0,0]",1.299458501359649542526809416735399539516537488861303804737012764889933880863069e-16,1.2994585013596495425268094167353858549612218168195955651903009493027143470550428e-16 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,cancellation,4098,10322096095657499352,137.992247,inf,106.227061,,,,No,yes,"one plus a low-limb delta [1.0000000000000002,-9.2098754789066345e-17,0,0] ; one plus a low-limb delta [1,9.3157411673208082e-33,0,0]",1.299458501359649542526809416735399539516537488861303804737012764889933880863069e-16,1.2994585013596495425268094167353858549612218168195955651903009493027143470550428e-16 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,tlfloat,tlquad,TLFloat Quad,tlfloat::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,qdpp,ddreal,qdpp dd_real,qdpp floor,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::floor,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,tlfloat,tlquad,TLFloat Quad,tlfloat::floor,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,qdpp,ddreal,qdpp dd_real,qdpp ceil,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ceil,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,tlfloat,tlquad,TLFloat Quad,tlfloat::ceil,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,qdpp,ddreal,qdpp dd_real,qdpp aint,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::trunc,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,tlfloat,tlquad,TLFloat Quad,tlfloat::trunc,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,qdpp,ddreal,qdpp dd_real,qdpp round,boundary,4108,10322096095657499334,130.441577,0.000000,0.000000,,,,Both,no,"just below -2.5 [-2.5,-5.5511151231257827e-17,0,0]",-4,-3 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::round,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,tlfloat,tlquad,TLFloat Quad,tlfloat::round,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,tlfloat,tlquad,TLFloat Quad,tlfloat::rint,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,moderate,4099,10322096095657499356,110.177573,107.236356,107.022726,90.000000,17.022726,yes,Both,yes,"[-4.0306514937478397,-1.118730523149658e-16,6.2102019257584848e-33,-3.4473545827742784e-49]",-4.0309999999999999999999999999999755453119381486340322364144762336268801306005116,-4.031 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,wide_exponent,4096,10322096095657499357,121.330260,107.340420,107.049597,90.000000,17.049597,yes,Both,yes,"[1.9564201098655394e-06,5.4301566295310004e-23,-3.0143424587131265e-39,1.6732962008842592e-55]",1.9564199999999999999999999999999883500964702027617153338260327688823346504976789e-06,1.95642e-06 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,boundary,4110,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lround,boundary,4110,10322096095657499334,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,boundary,4114,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::llround,boundary,4114,10322096095657499334,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,qdpp,ddreal,qdpp dd_real,qdpp divrem,moderate,4099,10322096095657499356,inf,inf,inf,,,,NaN,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,NaN,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,tlfloat,tlquad,TLFloat Quad,tlfloat::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,NaN,no,"lower endpoint [-8,0,0,0]",0 ; -8,-0 ; -8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0]",0 ; -8,-0 ; -8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,NaN,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,qdpp,ddreal,qdpp dd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,tlfloat,tlquad,TLFloat Quad,tlfloat::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,qdpp,ddreal,qdpp dd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,qdpp,ddreal,qdpp dd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,90.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,near_one,4099,10322096095657499359,109.483067,105.751120,104.669867,90.000000,14.669867,yes,Both,yes,"[1.0434745107555559,2.8962235686257217e-17,1.6077270451751567e-33,8.9246779143301406e-50]",1.0215060013311502277290127699241048631609354594130696894861318971964303514710082,1.0215060013311502277290127699240732060505168443174685619534358207641504292216177 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,near_one,4099,10322096095657499359,107.972082,104.206672,103.521359,,,,NaN,no,"[0.71443151353648249,1.9829457896150051e-17,1.1007560361070452e-33,6.1104234789058085e-50]",0.84524050632733078181601151278838316443423641967351333616263828890646792046936753,0.84524050632733078181601151278844123367639711927686107208563401334537132439409523 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,near_one,4099,10322096095657499359,109.483067,105.751120,104.669867,,,,Both,no,"[1.0434745107555559,2.8962235686257217e-17,1.6077270451751567e-33,8.9246779143301406e-50]",1.0215060013311502277290127699241048631609354594130696894861318971964303514710082,1.0215060013311502277290127699240732060505168443174685619534358207641504292216177 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,near_one,4099,10322096095657499359,114.893514,113.139700,113.011246,,,,No,no,"[1.0026950548444753,2.7830378414153015e-17,1.5448963449711814e-33,8.5758974642312711e-50]",1.0013466207285443899676629818717478499906807043598557441898300032149648347568061,1.0013466207285443899676629818717477543132417661775742648846457214830114205814083 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,wide_exponent,4096,10322096095657499357,109.554369,105.974012,105.134919,90.000000,15.134919,yes,Both,yes,"[1.1645444442808547e-62,3.2322601380997815e-79,1.7942648134482328e-95,9.9601705408249462e-112]",1.0791406045001062461937244900901782471018853969286737164352073021695624156016746e-31,1.0791406045001062461937244900901540193152963432252732200525801490754009153911073e-31 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,wide_exponent,4096,10322096095657499357,108.067737,104.201417,103.244333,,,,NaN,no,"[3.9723050169707548e-164,1.1025361226687388e-180,6.120304944338899e-197,3.3974517334661164e-213]",1.9930642280094123730625261552127116945974136006779439913897992305033810507934317e-82,1.9930642280094123730625261552128776075292011527767378186913898640893150824459982e-82 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,wide_exponent,4096,10322096095657499357,109.554369,105.974012,105.134919,,,,Both,no,"[1.1645444442808547e-62,3.2322601380997815e-79,1.7942648134482328e-95,9.9601705408249462e-112]",1.0791406045001062461937244900901782471018853969286737164352073021695624156016746e-31,1.0791406045001062461937244900901540193152963432252732200525801490754009153911073e-31 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,wide_exponent,4096,10322096095657499357,115.008272,113.213152,113.048418,,,,No,no,"[3.2184369798376745e+141,8.9329570958020924e+124,4.9587873228740766e+108,2.75267993003707e+92]",56731269859202645932411245930365626819033560927736571074222411518836736,56731269859202645932411245930365621536311029635164147191486159156902261.890013455 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,extreme_finite,4096,10322096095657499354,109.462818,106.258948,105.096134,90.000000,15.096134,yes,Both,yes,"[1.3220615149200299e+307,3.6694578345875804e+290,2.0369582879251504e+274,1.1307389957277705e+258]",3.6360163846165902232928621254916330482868374851642045295187667520670879059664215e+153,3.6360163846165902232928621254915491917111449494286729393569803221869869190043071e+153 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,extreme_finite,4096,10322096095657499354,98.018754,55.311139,55.311139,,,,NaN,no,"[4.4501477170144028e-308,0,0,0]",2.1095373229725998297233013881191508973971792115572731090863056832759011817789658e-154,2.1095373229725997825305399118428952353362442939022476368457472326927562550301553e-154 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,extreme_finite,4096,10322096095657499354,99.075519,54.379751,54.379751,,,,Both,no,"[4.4501477170144028e-308,0,0,0]",2.1095373229725996925287841451839082884122437148964001557167765265107074071004867e-154,2.1095373229725997825305399118428952353362442939022476368457472326927562550301553e-154 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,extreme_finite,4096,10322096095657499354,114.998426,113.400132,113.089186,,,,No,no,"[1.2100084684275982e+307,3.3584481540993534e+290,1.864313233845479e+274,1.0349017386643172e+258]",3.4785175986727424967005535821835381192527716211870969057349865948795513924365055e+153,3.4785175986727424967005535821835378043641146296572772642207472485040396982804778e+153 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,subnormal,4100,10322096095657499350,110.541921,106.676978,106.144003,90.000000,16.144003,yes,Both,yes,"[5.286502410501338e-321,0,0,0]",7.270833797097371433415766444926166782823457282008099611199997713021735881592136e-161,7.2708337970973714334157664449260856763342269024386693898476408490529091738730871e-161 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,subnormal,4100,10322096095657499350,56.489013,52.162020,51.323685,,,,NaN,no,"[5.1770240563198253e-309,0,0,0]",7.195153963828591352238458761709602619213650099991020059560595770173924131530711e-155,7.1951539638285887991167129335566258269313433605509295014794829442494538209863893e-155 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,subnormal,4100,10322096095657499350,136.578782,54.515132,52.841425,,,,Both,no,"[2.263904812256912e-308,0,0,0]",1.5046277985790747059564841186059718159262730280015049711723204760454486187728132e-154,1.5046277985790745195010238479916653610108386215550057104965609984240748383811917e-154 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,subnormal,4100,10322096095657499350,115.742102,113.201028,113.029721,,,,No,no,"[5.1036981215400768e-321,0,0,0]",7.1440171623114657809764193124266200207508412052377533613543800940930551984685869e-161,7.1440171623114657809764193124266193468344611432730978748031256979804843976617916e-161 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,moderate,4099,10322096095657499356,108.610701,105.262130,104.145913,90.000000,14.145913,yes,Both,yes,"[1.6964706245890131,4.7086518700473565e-17,-2.6138268605354378e-33,1.4509653814750655e-49]",1.1926566882763817482150483893442911492962655061893681865360980877757701712482685,1.1926566882763817482150483893442380031413103085426413998889005940961998748757684 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,qdpp,ddreal,qdpp dd_real,qdpp nroot,moderate,4099,10322096095657499356,107.503128,104.080117,103.018188,,,,NaN,no,"[7.7570819110982878,2.1530227354011577e-16,-1.1951677066919007e-32,6.6345135312889697e-49]",1.9795484049074845800164972757971712489223706094688856655986914918725350087669312,1.9795484049074845800164972757969784957350204626750435952829757873726542357407338 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,moderate,4099,10322096095657499356,108.562563,105.559722,104.600252,,,,Both,no,"[-5.4359803461266463,-1.5087876354199076e-16,8.3754538605646392e-33,-4.6493108588422589e-49]",-1.7582985823855373734893631229630491426724707896779619814085811736574516128683854,-1.7582985823855373734893631229629919580574226691808687607708137148977336669671777 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,moderate,4099,10322096095657499356,115.120076,113.301989,113.021191,,,,No,no,"[-0.12734564822864947,-3.5345517687315605e-18,1.9620703776876749e-34,-1.0891678546219169e-50]",-0.50310816950005327602384340490057847852046360556811795630525693376382473723240629,-0.50310816950005327602384340490057852626159976956627613790876407903204245377117839 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,wide_exponent,4096,10322096095657499357,108.431744,104.960828,104.098992,90.000000,14.098992,yes,Both,yes,"[-2.5001199884633103e-152,-6.9392269387938695e-169,3.8520447602740479e-185,-2.1383143923714698e-201]",-2.924064517250494778351708273248051030213396603265547295321735382086652135025762e-51,-2.9240645172504947783517082732479164231406536255075333497671770581858568226329801e-51 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,qdpp,ddreal,qdpp dd_real,qdpp nroot,wide_exponent,4096,10322096095657499357,95.557732,89.370444,89.005643,,,,NaN,no,"[-3.4549134864131214e-250,-9.5893112517595507e-267,5.3231370710002672e-283,-2.9549346697301067e-299]",-7.0169070814352191767828847049923788864839571517004742553964479142878370319723312e-84,-7.0169070814352191767828846937002129458982875040557676645893689632408040463794305e-84 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,wide_exponent,4096,10322096095657499357,108.228752,105.429716,104.688938,,,,Both,no,"[-2.5093388050492908e+220,-6.9648142948777493e+203,3.8662485962058509e+187,-2.1461991052162126e+171]",-29276541249127547258888263930375634305818369506660520834833227626443702272,-29276541249127547258888263930374738922229461259377145616398423692846763008.357894 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,wide_exponent,4096,10322096095657499357,114.945588,113.203933,113.028879,,,,No,no,"[-6.0253985814299791e+20,-16723.840594118297,9.2835964438754955e-13,-5.1534312616594e-29]",-8446211.0069017797205775974332527170734424995574270785166082209372007127967663109,-8446211.0069017797205775974332527162762210477168824322444258883093409908788493932 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,moderate,4099,10322096095657499356,108.682153,105.556470,104.448638,90.000000,14.448638,yes,Both,yes,"[2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49] ; [7.6161438781938315,2.1139045731071814e-16,-1.1734527644620026e-32,6.5139713870787798e-49]",8.0914622723995239714248451353921972400978668058729318673943800913073154390531272,8.0914622723995239714248451353919049231629452774327450009049705044051673057483058 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,moderate,4099,10322096095657499356,107.822875,104.898769,104.258205,,,,Both,yes,"[-1.3812728338831572,-3.8338022586658006e-17,2.128187769715351e-33,-1.1813815313318215e-49] ; [5.7084223966267196,1.5844054947552254e-16,-8.7952173030993197e-33,4.8823263782412195e-49]",5.8731593627223457932834487849635333739185201884555156890126582230893248492975545,5.8731593627223457932834487849632912571541598546275170519229698090249476736042578 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,moderate,4099,10322096095657499356,114.999147,113.150622,113.012814,,,,No,yes,"[-4.3730961569334426,-1.2137780105818237e-16,6.7378214706582879e-33,-3.7402422662692824e-49] ; [-6.7563038999618339,-1.8752510377755921e-16,1.0409734395453408e-32,-5.7785634030324038e-49]",8.0480812860224973255103414066425067013553335932596541895380453632323838886186707,8.0480812860224973255103414066425074695044837774480341865898326900589136068326501 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,wide_exponent,4096,10322096095657499357,136.086569,107.303893,104.375984,90.000000,14.375984,yes,Both,yes,"[-1.0904439541376617e-171,-3.0265899623673255e-188,1.6800949311597954e-204,-9.3264003806481111e-221] ; [-6.6064316563514781e-178,-1.8336531338734802e-194,1.0178819642012061e-210,-5.6503799650342919e-227]",1.0904439541378618053723797776842685378887910042683910204594308964030285890648591e-171,1.090443954137861805372379777684227109194726424167261957374676671431464584983977e-171 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,wide_exponent,4096,10322096095657499357,136.075898,106.558614,104.375984,,,,Both,yes,"[-1.0904439541376617e-171,-3.0265899623673255e-188,1.6800949311597954e-204,-9.3264003806481111e-221] ; [-6.6064316563514781e-178,-1.8336531338734802e-194,1.0178819642012061e-210,-5.6503799650342919e-227]",1.0904439541378618053723797776842685378887910042683910204594308964030285890648591e-171,1.090443954137861805372379777684227109194726424167261957374676671431464584983977e-171 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,wide_exponent,4096,10322096095657499357,142.925810,113.798728,113.017880,,,,No,yes,"[-2.5387398996340912e+175,-7.0464187252708178e+158,3.9115481549727536e+142,-2.1713454117904006e+126] ; [-1.2492509467162383e+176,-3.4673679114478559e+159,1.9247758450679253e+143,-1.0684652302183768e+127]",1.2747862293935241998715278949185518204872807338309159207365404839623318589574331e+176,1.2747862293935241998715278949185519417327664706045321099892601682646620979899304e+176 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,moderate,4099,10322096095657499356,109.289129,105.940176,105.022316,80.000000,25.022316,yes,Both,yes,"[-2.6398923795068718,-7.3271732556525522e-17,4.0673982269215659e-33,-2.2578595809239299e-49]",-0.48091697577772919399226624691062015405871262531310584383165433654955256415064468,-0.48091697577772919399226624691060848051161030920422183238229214193978802883324422 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,qdpp,ddreal,qdpp dd_real,qdpp sin,moderate,4099,10322096095657499356,106.651984,101.732710,97.389662,,,,Both,no,"[6.2844284435634243,1.7442792886633375e-16,-9.6826951382541352e-33,5.3749755414579021e-49]",0.0012431360636500376406651182820628737826713630510232888601894262622072011672310493,0.0012431360636500376406651182820688621589555923240867697280247701026819500889579145 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,moderate,4099,10322096095657499356,105.208184,98.842806,94.535168,,,,Both,no,"[6.2844284435634243,1.7442792886633375e-16,-9.6826951382541352e-33,5.3749755414579021e-49]",0.0012431360636500376406651182821121730753493691312774912955712974681383737457496252,0.0012431360636500376406651182820688621589555923240867697280247701026819500889579145 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,moderate,4099,10322096095657499356,115.094324,113.249179,113.045938,,,,No,no,"[6.5381038876502018,1.8146883683651254e-16,-1.0073544045392099e-32,5.5919402693849756e-49]",0.2521666211082424428698227592038028825451917195456792597336083477088111096803269,0.25216662110824244286982275920380290606693590184617967372759389209466870282434292 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,argument_reduction,4110,10322096095657499353,107.878813,98.777563,98.619216,80.000000,18.619216,yes,Both,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107778446817142530158141594307620809510923605317049154659252158834084e-08,2.983455547010777844681714253021942987548016308835936187833122791508178595472033e-08 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,qdpp,ddreal,qdpp dd_real,qdpp sin,argument_reduction,4110,10322096095657499353,15.652408,0.000000,0.000000,,,,Both,no,"below 2^159 * pi/2 [1.1478607017620547e+48,4.4745582552647293e+31,0,0]",0,0.021365912798790453936390424940051299694178385353250054265686403111677266065263432 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,argument_reduction,4110,10322096095657499353,13.903457,0.000000,0.000000,,,,Both,no,"below 2^159 * pi/2 [1.1478607017620547e+48,4.4745582552647293e+31,0,0]",0,0.021365912798790453936390424940051299694178385353250054265686403111677266065263432 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,argument_reduction,4110,10322096095657499353,115.121400,113.247632,113.016004,,,,No,no,"near 2^76 * pi/2 [-1.1868601480113558e+23,-4626584.798117674,-0,-0]",-2.991546159228189837237259988878058058522824214333998724226921577853581648471192e-08,-2.9915461592281898372372599888780577736253933802297625994170074222835607860644083e-08 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,quadrant_boundaries,4315,10322096095657499369,114.302289,100.269139,100.230956,80.000000,20.230956,yes,Both,yes,"below random k*pi/2, exponent 43, quadrant 2, offset bits 64 [-15189111743596.248,-2.2040936843613776e-05,0,0]",8.2340339752651274439911770999089811880423371828520810609536481004607152164951472e-07,8.2340339752651274439911770999034465622958436535312599533652322394306622926203602e-07 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,qdpp,ddreal,qdpp dd_real,qdpp sin,quadrant_boundaries,4315,10322096095657499369,36.047007,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,0,0]",0,-2.3958158477746716437132754143003601519786715229456446471729141723273547177369775e-32 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,quadrant_boundaries,4315,10322096095657499369,35.860103,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,0,0]",-1.9721522630525295135293214132069655741830160877725575119256973138760586841205045e-31,-2.3958158477746716437132754143003601519786715229456446471729141723273547177369775e-32 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,quadrant_boundaries,4315,10322096095657499369,118.124335,113.301358,113.056664,,,,No,no,"below random k*pi/2, exponent 98, quadrant 2, offset bits 64 [5.2509035675505552e+29,24361744657474.965,0,0]",0.00050104453726438394320632816150931384605222803849832956072091239859583674922988063,0.00050104453726438394320632816150931379966169648997739743564579442804004531880567156 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,moderate,4099,10322096095657499356,109.267445,105.979013,105.328054,80.000000,25.328054,yes,Both,-,"[1.3052020301228939,3.6226633640748349e-17,-2.010982138630954e-33,1.1163193362090118e-49]",0.26248277312553705702695162816852912212589596287237225345705224528736199118839068,0.26248277312553705702695162816852396749826395623085371572470338778345559864971624 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,qdpp,ddreal,qdpp dd_real,qdpp cos,moderate,4099,10322096095657499356,106.561680,101.428179,96.274235,,,,Both,-,"[-7.8532640731814176,-2.1797186481268875e-16,1.2099869151776452e-32,-6.7167766636269399e-49]",0.00071756073148736779053384844771750344546407180118876038357207392812321016320464828,0.00071756073148736779053384844771001440463095337439754636415552650561600172620895545 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,moderate,4099,10322096095657499356,105.096924,98.858609,93.965626,,,,Both,-,"[-1.5710057703990365,-4.3604169452899814e-17,2.4205176448133145e-33,-1.3436572103915992e-49]",-0.00020944360260871006193062533305160960273584796505827979128681216249836620751229033,-0.00020944360260871006193062533304078043778399835827433173896692012466864520641420855 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,moderate,4099,10322096095657499356,115.039634,113.213457,113.010990,,,,No,-,"[5.2369706645778571,1.4535513527752112e-16,-8.0688308966304143e-33,4.4791009216229662e-49]",0.50085098214838463855968162916383300055843951821959226717067697020859201942344363,0.50085098214838463855968162916383295269424197487894136066019138473249540678149535 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,argument_reduction,4110,10322096095657499353,117.900119,105.731702,99.209588,80.000000,19.209588,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1273107444367091e-17,-0,-0]",-4.076748699943230335115082501060544610987236354894355627499358880133086316429937e-20,-4.0767486999432303351150825010549823398817902769691808721665498735571977321034076e-20 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,qdpp,ddreal,qdpp dd_real,qdpp cos,argument_reduction,4110,10322096095657499353,54.253594,0.000000,0.000000,,,,Both,-,"near 2^126 * pi/2 [1.3362857300812084e+38,5.211837175288784e+21,0,0]",1,0.12389438145972806630180177273660243986440796037880327575695354625393002465936553 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,argument_reduction,4110,10322096095657499353,53.212790,0.000000,0.000000,,,,Both,-,"near 2^126 * pi/2 [1.3362857300812084e+38,5.211837175288784e+21,0,0]",1,0.12389438145972806630180177273660243986440796037880327575695354625393002465936553 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,argument_reduction,4110,10322096095657499353,118.819573,113.370594,113.060433,,,,No,-,"near 2^80 * pi/2 [-1.8989762368181692e+24,-73976767.197321281,-0,-0]",-0.12942023716847009375826722037243897339068070281783466012127372257569724641607101,-0.12942023716847009375826722037243896143922841764928503089856138759520111599980159 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,quadrant_boundaries,4315,10322096095657499369,113.389741,100.266388,100.241282,80.000000,20.241282,yes,Both,-,"below random k*pi/2, exponent 32, quadrant 1, offset bits 64 [6759185830.8093033,2.5452908459680444e-07,0,0]",3.6641619809983954738175143693267979746715518809894967024037216566072372430296582e-10,3.6641619809983954738175143693292433300620783220933192304310816115127405346807142e-10 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,qdpp,ddreal,qdpp dd_real,qdpp cos,quadrant_boundaries,4315,10322096095657499369,31.587720,0.000000,0.000000,,,,Both,-,"nearest -15 * pi/2 [-23.56194490192345,8.5787174003973557e-16,0,0]",-1.232595164407830945955825883254353483864385054857848444953560829131386480552052e-32,1.0134821928809237200253698176522341586156194979036934117710462075918197333039617e-32 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,quadrant_boundaries,4315,10322096095657499369,33.114490,0.000000,0.000000,,,,Both,-,"nearest -15 * pi/2 [-23.56194490192345,8.5787174003973557e-16,0,0]",9.8607613152626475676466070660348278709150804388627875596284866173206592926506306e-32,1.0134821928809237200253698176522341586156194979036934117710462075918197333039617e-32 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,quadrant_boundaries,4315,10322096095657499369,117.776775,113.250616,113.050939,,,,No,-,"below random k*pi/2, exponent 125, quadrant 1, offset bits 64 [1.0722390890202377e+38,7.0208708334792359e+21,0,0]",0.25132271638165246986440048084991865200928286725260385276945855894414915722434589,0.25132271638165246986440048084991867537117391753101066720201827935805516002807079 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,moderate,4099,10322096095657499356,106.960558,104.350958,103.620775,75.000000,28.620775,yes,Both,yes,"[-0.74034095519374787,-2.0548589363227007e-17,1.1406758517311103e-33,-6.3320229711289496e-50]",-0.91371494862285871708430404946513545989607925828816605091651051903742924986673302,-0.91371494862285871708430404946519405338684144421692519093677434779171315299426252 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,qdpp,ddreal,qdpp dd_real,qdpp tan,moderate,4099,10322096095657499356,105.907276,100.656538,96.270873,,,,No,no,"[-7.8532640731814176,-2.1797186481268875e-16,1.2099869151776452e-32,-6.7167766636269399e-49]",-1393.6099046006247994846045908772556716069187365135489617157943387226737286255229,-1393.6099046006247994846045908918344363597240914228696915168530552614615473019289 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,moderate,4099,10322096095657499356,103.349908,97.873923,93.965781,,,,Both,no,"[-1.5710057703990365,-4.3604169452899814e-17,2.4205176448133145e-33,-1.3436572103915992e-49]",4774.554895023094650399553453252461839481804223695521544653525003454319630691316,4774.5548950230946503995534534993010818968099560510757877602371533385327275377315 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,moderate,4099,10322096095657499356,114.964744,113.144915,113.030226,,,,No,no,"[7.8233413976025243,2.1714134372803685e-16,-1.2053765970245592e-32,6.6911842568049228e-49]",32.626609890158811177010429275027148128590854752867790147209289244780577865512328,32.626609890158811177010429275027151205279743971652782283113637869256027936993481 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,argument_reduction,4110,10322096095657499353,106.601035,98.776698,98.614153,75.000000,23.614153,yes,Both,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107791724696498071933228039119120966041628715515577584130136247446007e-08,2.9834555470107791724696498071994731788491203878271025995398127676131094640315383e-08 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,qdpp,ddreal,qdpp dd_real,qdpp tan,argument_reduction,4110,10322096095657499353,14.675028,0.000000,0.000000,,,,No,no,"below 2^159 * pi/2 [1.1478607017620547e+48,4.4745582552647293e+31,0,0]",0,0.02137079126254257846132915638081114263722266664450390178599097407419423953862763 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,argument_reduction,4110,10322096095657499353,12.950427,0.000000,0.000000,,,,Both,no,"below 2^159 * pi/2 [1.1478607017620547e+48,4.4745582552647293e+31,0,0]",0,0.02137079126254257846132915638081114263722266664450390178599097407419423953862763 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,argument_reduction,4110,10322096095657499353,114.901636,113.184394,113.016302,,,,No,no,"near 2^28 * pi/2 [421657428.26631308,1.6436931070387506e-08,0,0]",-2.801550183192147675953312924187040410984604348447289725904902692584357714526975e-17,-2.8015501831921476759533129241870406777328880187547368316806178088235260252825752e-17 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,quadrant_boundaries,4315,10322096095657499369,106.462869,100.252704,100.193377,75.000000,25.193377,yes,Both,yes,"below random k*pi/2, exponent 35, quadrant 3, offset bits 64 [-59550109601.544846,-4.5998843808876405e-07,0,0]",309768431.94980647490490283626492826519224603465385570189027930609881877899169922,309768431.94980647490490283626514197542933150294098619645159482100231149999767842 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,qdpp,ddreal,qdpp dd_real,qdpp tan,quadrant_boundaries,4315,10322096095657499369,9.143753,0.000000,0.000000,,,,No,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,0,0]",0,-2.3958158477746716437132754143003601519786715229456446471729141730149459091184131e-32 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,quadrant_boundaries,4315,10322096095657499369,8.956412,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,0,0]",-1.9721522630525295135293214132069655741830160877725575119256973863858620655932743e-31,-2.3958158477746716437132754143003601519786715229456446471729141730149459091184131e-32 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,quadrant_boundaries,4315,10322096095657499369,114.985922,113.201255,113.030213,,,,No,no,"above random k*pi/2, exponent 73, quadrant 3, offset bits 100 [-1.8700734696156561e+22,-823589.80510121852,0,0]",-67624126.695955066322084141067273598883454782996848099821396438358078739838674664,-67624126.695955066322084141067273605260463639168624432485484257712303362119330611 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,near_one,4099,10322096095657499359,108.638031,106.152026,105.321909,80.000000,25.321909,yes,Both,yes,"[0.68327775494803278,1.8964767393937287e-17,-1.0527560708704801e-33,5.8439701459716004e-50]",0.59941459668283531301680476878329138003111794710527586828655022266332252911524847,0.5994145966828353130168047687833032015572049547180395358634521660952312280617229 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,qdpp,ddreal,qdpp dd_real,qdpp atan,near_one,4099,10322096095657499359,106.243323,103.455087,102.915050,,,,No,no,"[0.82949361478016381,2.3023072747712198e-17,-1.2780372731065025e-33,7.0945320346599422e-50]",0.69246792939021322038407456593241406837897508348741171878136551514140717422662874,0.69246792939021322038407456593234164436460581542817857965304164345048779801772283 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,near_one,4099,10322096095657499359,106.583307,104.209213,103.565475,,,,Both,no,"[0.59922936585146047,1.6631955974995573e-17,-9.232590233996015e-34,5.1251171273558688e-50]",0.53985266485908503628140184552645633503401709334955396726761503380272178009846584,0.53985266485908503628140184552649230671320267202579643720050843055093098479341871 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,near_one,4099,10322096095657499359,115.096489,113.278798,113.091826,,,,Inf,no,"[0.55993379075339322,1.5541284669001543e-17,-8.6271460358897341e-34,4.789028082924215e-50]",0.51043791759628196772972085185796332214599303086125967899625004231756652747775682,0.51043791759628196772972085185796336826828859446251053237503140908095741580338084 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,moderate,4099,10322096095657499356,108.819079,105.953468,104.926390,80.000000,24.926390,yes,Both,yes,"[1.7923972346284831,4.9749016978975022e-17,-2.7616252051262958e-33,1.5330099440581923e-49]",1.0618989131564895436407540480874589123331650567714808343216437342988039960189894,1.0618989131564895436407540480874313641834035736707386450972798475694004675512729 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,qdpp,ddreal,qdpp dd_real,qdpp atan,moderate,4099,10322096095657499356,108.086696,103.905207,102.931677,,,,No,no,"[0.12343094012777023,3.4258967920244917e-18,-1.901754749247526e-34,1.0556859549024222e-50]",0.1228097768819786507373908614024102305211643226125052350510620111296352513496899,0.12280977688197865073739086140239753323881629570359025212171798984403624884920169 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,moderate,4099,10322096095657499356,106.847674,104.726352,103.681417,,,,Both,no,"[0.2857560326209736,7.9313231710335552e-18,-4.4027688001122307e-34,2.444027646992936e-50]",0.27833825477622709162386907260361096838828187272939914113340062647161676778750916,0.27833825477622709162386907260362808257597424159856848418749771732394908517032952 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,moderate,4099,10322096095657499356,114.879313,113.253632,113.035851,,,,Inf,no,"[-1.5734601079176329,-4.3672291003483491e-17,2.4242991505098727e-33,-1.3457563677376342e-49]",-1.004652131404238346511320335870031739283046009993498654158329194945736828614713,-1.0046521314042383465113203358700316449130358715858571333899916584587287045766648 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,near_one,4099,10322096095657499359,108.593233,105.799026,104.761376,80.000000,24.761376,yes,Both,yes,"[1.0818954035110564,3.0028629680352481e-17,-1.666923803453484e-33,9.2532859344489846e-50] ; [0.65275323882187208,1.8117541878467149e-17,-1.0057256071542369e-33,5.5828986275887446e-50]",1.0279228914914060327533533251293914713081558101296952640517443772205652408047172,1.0279228914914060327533533251293615731716847356252552579150219391046313458442121 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,qdpp,ddreal,qdpp dd_real,qdpp atan2,near_one,4099,10322096095657499359,106.350992,103.419886,102.642972,,,,No,no,"[1.476075414430174,4.096932277958748e-17,-2.2742542726598969e-33,1.2624647286795781e-49] ; [1.2978450665872434,3.6022436883033177e-17,-1.9996469415324945e-33,1.1100270378053248e-49]",0.84956211104165360553223476933504451308109752486204940520923474826710947160890441,0.84956211104165360553223476933515180861659947245602880194423528508728550858684757 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,near_one,4099,10322096095657499359,106.569751,104.232681,103.492572,,,,Both,no,"[1.0507333108929335,2.916370786234894e-17,-1.6189109976110749e-33,8.986761321833486e-50] ; [1.2650802084969899,3.5113029386773794e-17,-1.9491646844768004e-33,1.0820037557461861e-49]",0.69310320015039092381296369548557195305017378886812875991225074484222701265423439,0.6931032001503909238129636954856205298991193123179607682885119797622283795278364 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,near_one,4099,10322096095657499359,114.968209,113.174887,113.027946,,,,Inf,no,"[1.3372324738194741,3.7115657042770924e-17,-2.0603328511487564e-33,1.1437144848684724e-49] ; [0.83447791299898855,2.3161414813815632e-17,-1.2857168004596149e-33,7.1371619750882627e-50]",1.0128922965936482719447380487334569972731678420777069662816424218111611629811186,1.0128922965936482719447380487334570929399651157625544908533628582220778293271098 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,moderate,4099,10322096095657499356,108.845358,105.968236,104.520841,80.000000,24.520841,yes,Both,yes,"[0.17246963902978685,4.7869941074914726e-18,-2.6573155384409922e-34,1.4751064472356924e-50] ; [4.1006496155849739,1.1381589047856838e-16,-6.318051108876087e-33,3.5072229059163668e-49]",0.042034327541476674060107604306532306204552005274371072135952080023324484159275016,0.042034327541476674060107604306530861776728203971856534731213306751945145807618236 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,qdpp,ddreal,qdpp dd_real,qdpp atan2,moderate,4099,10322096095657499356,107.564752,103.665904,102.550989,,,,No,no,"[2.8442686066031122,7.8944312381732168e-17,-4.3822896634699942e-33,2.4326594424806081e-49] ; [3.3541671593836817,9.3096840219733015e-17,-5.1679127765898456e-33,2.8687678769122846e-49]",0.70332051680921338830497515483357031683036089048871214131875652169831325544180345,0.70332051680921338830497515483347564310608417324445344576897132904002133808898828 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,moderate,4099,10322096095657499356,106.907337,104.397894,103.797834,,,,Both,no,"[-3.5238869981928165,-9.7807512039272306e-17,5.4294075923651156e-33,-3.0139266595591938e-49] ; [7.9565118293460007,2.2083756571605885e-16,-1.2258947508006982e-32,6.8050828905302684e-49]",-0.41692842657219323684505272794546436184874938931135096281838735396592376947211278,-0.41692842657219323684505272794544071355295017425024689522295410346435459957843127 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,moderate,4099,10322096095657499356,114.931792,113.169783,113.005900,,,,Inf,no,"[6.15799117025648,1.7091858956642891e-16,-9.4878876736553216e-33,5.2668356751746757e-49] ; [-2.8723638314665259,-7.9724111519866743e-17,4.4255772113569871e-33,-2.4566888586524599e-49]",2.0072413975928422432930791156337093117686276911278999771622954148125308679317946,2.007241397592842243293079115633709504270091951029495114195079457907970865310122 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,extreme_finite,8,10322096095657499351,116.769509,109.692678,109.692678,80.000000,29.692678,yes,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397529394834895588573302312846062338790031898128063,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,qdpp,ddreal,qdpp dd_real,qdpp atan2,extreme_finite,8,10322096095657499351,0.000000,0.000000,0.000000,,,,No,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",nan,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,extreme_finite,8,10322096095657499351,61.209588,0.000000,0.000000,,,,Both,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",nan,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,extreme_finite,8,10322096095657499351,118.649421,114.802646,114.802646,,,,Inf,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397513987395340490686477865022521659371483593314878,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,moderate,4099,10322096095657499356,107.979933,105.096123,104.081582,80.000000,24.081582,yes,Both,yes,"[-0.03158561470140564,-8.766769172109845e-19,4.8665344932251859e-35,-2.7014693222555596e-51]",-0.031590868964255888487475098364116757608941970863589142199408956157005365361634119,-0.031590868964255888487475098364115285691415570498034097956857353613513937214419265 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,qdpp,ddreal,qdpp dd_real,qdpp asin,moderate,4099,10322096095657499356,106.599123,103.529678,102.915775,,,,No,no,"[-0.10554476052982042,-2.9294555817188768e-18,1.6261745182204894e-34,-9.0270819609355425e-51]",-0.10574170549366163348617680261698371755978694639300921390196759527477232687431297,-0.10574170549366163348617680261697266377760660648065099953828496646958802067675318 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,moderate,4099,10322096095657499356,106.560348,104.035972,103.400759,,,,Both,no,"[0.77551087952722153,2.1524750857460682e-17,-1.1948637000636465e-33,6.6328259554973373e-50]",0.88752389947216120426546925487707632516297288791292438061445452669555311597804348,0.88752389947216120426546925487701003484539739138090360219417015197676704073814142 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,moderate,4099,10322096095657499356,114.947518,113.199623,113.012058,,,,No,no,"[0.12474215398466793,3.4622902873778762e-18,-1.9219571974914841e-34,1.0669005664995424e-50]",0.12506795106413992402354933757400079832840734406034132627003412512726624817097076,0.12506795106413992402354933757400081027177335071584045641110721623291972191179353 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,boundary,4105,10322096095657499355,109.179337,106.113879,105.956528,80.000000,25.956528,yes,Both,yes,"[0.99999942350312121,2.7755559614626202e-17,-1.5407430672757073e-33,8.5528421416053841e-50]",1.5697225512744511775996984093823162316469799617556662501159018933971633913415644,1.5697225512744511775996984093822962914427098056014529298362837222126251898438199 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,qdpp,ddreal,qdpp dd_real,qdpp asin,boundary,4105,10322096095657499355,109.491726,107.373224,104.443140,,,,No,no,"[-0.5,0,0,0]",-0.52359877559829887307710723054660280208862930374996608114978422659525902904675831,-0.52359877559829887307710723054658381403286156656251763682915743205130273438103483 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,boundary,4105,10322096095657499355,106.984490,105.491449,105.009265,,,,Both,no,"[-0.5,0,0,0]",-0.52359877559829887307710723054659663911280726459523630202036795482783970712148403,-0.52359877559829887307710723054658381403286156656251763682915743205130273438103483 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,boundary,4105,10322096095657499355,115.113201,113.662197,113.650342,,,,No,no,"[-0.99999926068382938,-2.7755555095483036e-17,1.5407428164128676e-33,-8.5528407490368807e-50]",-1.569580336448152538387862341824414705980941808225034533535579205101276496769902,-1.5695803364481525383878623418244146096819702328353660760934473597656326582483983 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,moderate,4099,10322096095657499356,108.568133,105.119090,102.606898,80.000000,22.606898,yes,Both,-,"[0.99447363321554472,2.7602188124463265e-17,-1.5322292392907091e-33,8.5055809023221692e-50]",0.10518045845827819297865791404046697400704440931878221279239664668822551440996449,0.10518045845827819297865791404048059412910636761979542748882605088251354897169005 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,qdpp,ddreal,qdpp dd_real,qdpp acos,moderate,4099,10322096095657499356,107.974979,104.368701,103.255774,,,,No,-,"[0.72162924858693034,2.0029235175604019e-17,-1.1118459028793836e-33,6.1719846060591867e-50]",0.76464343130433414989879945681264064919498472149418082086597743974448748716099544,0.76464343130433414989879945681257749914661788899034141150068638257917579976285277 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,moderate,4099,10322096095657499356,106.813887,104.069369,103.207374,,,,Both,-,"[0.81600939572498932,2.2648810486108598e-17,-1.2572615441024725e-33,6.9792035711917082e-50]",0.61632303539989168984516624921595656278370886181782137943079526360735942436264168,0.61632303539989168984516624921600920000348738182990386606044905403511780016821062 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,moderate,4099,10322096095657499356,114.898379,113.171158,113.047621,,,,No,-,"[-0.45715822972539222,-1.2688689813450177e-17,7.0436377916095346e-34,-3.9100044266823978e-50]",2.0455936847846887489751794724924589062213555121293704269540512834458156551931118,2.0455936847846887489751794724924590968089464877104280431708665030765709283604497 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,boundary,4105,10322096095657499355,104.376193,95.825547,81.584963,80.000000,1.584963,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863439534155160504671268531080086442146964698096667234494817e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,qdpp,ddreal,qdpp dd_real,qdpp acos,boundary,4105,10322096095657499355,108.193606,104.398963,103.657807,,,,No,-,"[0.99999942444749224,2.7755559640837763e-17,-1.5407430687307413e-33,8.5528421496824451e-50]",0.0010728956733501991057269846146837220280149238995691775727282821254002248166289912,0.0010728956733501991057269846146837890856807201566556401310231651304607235195055812 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,boundary,4105,10322096095657499355,107.086731,104.648615,104.149340,,,,Both,-,"[0.99999934503035492,2.7755557436569404e-17,-1.540742946369267e-33,8.5528414704398147e-50]",0.0011445258551427070941068738473539623713411732011302531058393685780530564521928483,0.0011445258551427070941068738473540132517027939037678964817350591380117937533213228 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,boundary,4105,10322096095657499355,114.952164,113.210243,113.019157,,,,No,-,"[0.99999951327014636,2.7755562106161656e-17,-1.5407432055837087e-33,8.5528429093690223e-50]",0.00098664065707865998773786346026427739790392738317321398040088536942829912436176039,0.00098664065707865998773786346026427749166071876813272361725882961213506150597977497 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,moderate,4099,10322096095657499356,107.422628,104.784889,104.123120,80.000000,24.123120,yes,Both,-,"[-7.4260131889231964,-2.0611327058781538e-16,1.1441584934369385e-32,-6.3513555161706011e-49]",0.00059555715897935043401591506055704088046193962180369225037771615963253651893083429,0.00059555715897935043401591506055701391914881720026106459729557182617396144915233455 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,qdpp,ddreal,qdpp dd_real,qdpp exp,moderate,4099,10322096095657499356,107.183101,104.642582,104.151117,,,,Both,-,"[7.0128923877089875,1.946468649513252e-16,-1.0805071557003232e-32,5.9980196126536888e-49]",1110.8629089138827070531587501812802675668025626929731218203722953319356747670099,1110.8629089138827070531587501813295906438271160742762402009248472719277541922193 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,moderate,4099,10322096095657499356,103.684388,101.106308,100.622692,,,,Both,-,"[6.2894204955453095,1.7456648614259411e-16,-9.6903866121708154e-33,5.3792451671757032e-49]",538.84097784188683014615383865455606418723372617967866426199469165325695030333009,538.84097784188683014615383865483212958439419934285301934539232895991755161454027 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,moderate,4099,10322096095657499356,114.936433,113.201931,113.034174,,,,No,-,"[-2.7524176726202221,-7.6394936838203922e-17,4.2407708921279276e-33,-2.3541007433002956e-49]",0.063773491250200208373748723374130927612358133134113120172047880385269533762629401,0.063773491250200208373748723374130933609760256587112174195050990978697911747191691 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,boundary,4099,10322096095657499339,106.553167,104.337314,103.645110,80.000000,23.645110,yes,Both,-,"[689.56791103874002,1.913935429694702e-14,-1.0624475908464504e-30,5.8977688890762846e-47]",2.9890877290907641503012149009532296945711450367253589288612016829881349927374169e+299,2.9890877290907641503012149009534181687133803867116344877486422688909796071e+299 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,qdpp,ddreal,qdpp dd_real,qdpp exp,boundary,4099,10322096095657499339,106.465871,104.205832,103.671903,,,,Both,-,"[-691.72846210951673,-1.9199321635563391e-14,1.0657764468493198e-30,-5.916247751976521e-47]",3.8560790678697117391860011259094120626236002993183762117458020113940637583794245e-301,3.8560790678697117391858770802322620870928440430316970424756971515036688492717273e-301 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,boundary,4099,10322096095657499339,97.061161,0.000000,0.000000,,,,Both,-,"lower endpoint [-700,0,0,0]",0,9.8596765437597708567053729478494651051156001814009417105864667677931867965946372e-305 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,boundary,4099,10322096095657499339,114.941676,113.155192,113.027016,,,,No,-,"[-106.03442153664571,-2.943046404819841e-15,1.6337189405856384e-31,-9.0689619180219691e-48]",8.9091410513973682950278649000499914419415317652051246328683034651881238681163385e-47,8.9091410513973682950278649000499922839443594814782326173403842131731778025563998e-47 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,moderate,4099,10322096095657499356,108.902998,106.013023,105.332281,80.000000,25.332281,yes,Both,-,"[2.5050708699436939,6.9529683953231499e-17,-3.8596728009893943e-33,2.1425488055889476e-49]",5.6767722797494772853116587667814582973149425261925085601171598811975904652626923,5.6767722797494772853116587667815694514029231846505256411149926048833678443740637 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,moderate,4099,10322096095657499356,103.839952,101.142179,100.414694,,,,Both,-,"[3.8148963235585232,1.0588464337431334e-16,-5.8777784514193096e-33,3.2628224852056573e-49]",14.073373823089690423486976994593612874034538497537247478418910573427780263955356,14.073373823089690423486976994601941307827954000551175451985943856849500024740817 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,moderate,4099,10322096095657499356,114.965914,113.164112,113.011731,,,,No,-,"[-7.9959423366658164,-2.2193198214353661e-16,1.2319699823822672e-32,-6.8388072004392078e-49]",0.0039172520189509527584047035166407065909139982295504516955430206336675765627867302,0.003917252018950952758404703516640706216751198658792221393620632776629080535929414 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,boundary,4099,10322096095657499339,108.889789,106.068713,105.117537,80.000000,25.117537,yes,Both,-,"[-300.54967496719229,-8.341929229804598e-15,4.6307009503613316e-31,-2.5705554076223722e-47]",3.3537651522202066232694855987502461915822095092416702651658002446064688733175029e-91,3.3537651522202066232694855987503223996548021083914718227771648387284160913978918e-91 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,boundary,4099,10322096095657499339,99.466638,96.374310,95.216729,,,,Both,-,"[698.97202361981408,1.9400370854788909e-14,-1.0769369204626738e-30,5.9782008258328567e-47]",2.5795576573742430042352146252587791727029440720160246133153522460811619953466992e+210,2.579557657374243004235214625314813457457020895250501024774331309230444404594941e+210 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,boundary,4099,10322096095657499339,115.017273,113.141516,113.031247,,,,No,-,"[-623.98297046261791,-1.7319006519539934e-14,9.6139799008132156e-31,-5.3368309220831554e-47]",1.4534801573612130574507922601992539191333162412583157547920661290709870204156299e-188,1.4534801573612130574507922601992540560995029614644815271939387362904115301725391e-188 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,moderate,4099,10322096095657499356,108.703910,105.111574,104.102752,80.000000,24.102752,yes,Both,yes,"[0.34499201425549764,9.5754519384565927e-18,-5.3154436066330483e-34,2.9506639390902969e-50]",0.41197864392194338236442692612392088638530541488783931021803297713515523703620147,0.41197864392194338236442692612390197063088901255454253734406676554091755929509722 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,qdpp,ddreal,qdpp dd_real,qdpp expm1,moderate,4099,10322096095657499356,108.515673,104.815830,0.000000,,,,NaN,no,"midpoint [0,0,0,0]",1,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,moderate,4099,10322096095657499356,106.120620,101.057168,100.341101,,,,Both,no,"[0.55778275215845952,1.5481581354627725e-17,-8.5940040387576104e-34,4.7706305787751426e-50]",0.74679512561239122148963802326995846614536066819091057793767438922893919794887552,0.74679512561239122148963802327042353821810425608280027454957470110002731722314746 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,moderate,4099,10322096095657499356,115.099931,113.238852,113.025470,,,,No,no,"[-0.13544667321528081,-3.759400380312106e-18,2.086886430503535e-34,-1.1584546824614156e-50]",-0.12667426665988540296635337345058074378660986274343523857272835609845049436444908,-0.1266742666598854029663533734505807318017844144056911301472125012780803029716347 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,cancellation,4098,10322096095657499336,134.532978,106.243436,104.431991,80.000000,24.431991,yes,Both,yes,"[5.2823021564447655e-10,1.4661333692780236e-26,-8.1386751187185946e-43,4.5178722533726315e-59]",5.2823021578399014295181730840717304111038933843651099389423600846862121746910786e-10,5.2823021578399014295181730840715373648809557706009947616651919887543783634460306e-10 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,qdpp,ddreal,qdpp dd_real,qdpp expm1,cancellation,4098,10322096095657499336,134.524282,105.740631,104.431991,,,,NaN,no,"[5.2823021564447655e-10,1.4661333692780236e-26,-8.1386751187185946e-43,4.5178722533726315e-59]",5.2823021578399014295181730840717304111038933843651099389423600846862121746910786e-10,5.2823021578399014295181730840715373648809557706009947616651919887543783634460306e-10 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,cancellation,4098,10322096095657499336,134.582894,106.579660,104.032519,,,,Both,no,"[9.640978373446825e-32,2.675909042528464e-48,-1.485427915408879e-64,8.245781365539434e-81]",9.6409783734468253031264825210279822527089990205713589968491374709281993532281666e-32,9.6409783734468253031264825210284469950289853675378445109860829891746497320528387e-32 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,cancellation,4098,10322096095657499336,141.266766,113.673411,113.009736,,,,No,no,"[-1.1160763165924209e-16,-3.0977340597993533e-33,1.7195878386774018e-49,-9.5456300568253038e-66]",-1.1160763165924208772961271662821860972007309068079894040911997121794737926855797e-16,-1.1160763165924208772961271662821862039521037829862229931689764596843753080637539e-16 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,near_one,4099,10322096095657499359,107.587097,104.625423,103.727726,80.000000,23.727726,yes,Both,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.16836588841698423133590420499408908570076543035915070334582452268043853416124023,0.16836588841698423133590420499409911099841188934514465011564788537156738257109514 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,qdpp,ddreal,qdpp dd_real,qdpp log,near_one,4099,10322096095657499359,106.923076,104.385424,103.808455,,,,NaN,-,"[0.77475982437177127,2.1503904889302074e-17,1.193706516372632e-33,6.6264022956099125e-50]",-0.25520220169539351832309414949750706201598804890020712154580239967166521708463733,-0.25520220169539351832309414949752143099061691759341383698037737188365038894452933 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,near_one,4099,10322096095657499359,101.676721,95.715279,87.939907,,,,Both,-,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",2.8031904738997079030831457992482622568319573100854233424378291784917482942773859e-05,2.8031904738997079030831458086911024069529667493434989217092636151341185760406095e-05 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,near_one,4099,10322096095657499359,114.903817,113.175281,113.007854,,,,No,-,"[1.2848659065765915,3.5662192825930181e-17,1.9796493791984882e-33,1.0989261607355295e-49]",0.25065436004336111863518701227037801362273786683129506989659931978979784481659232,0.25065436004336111863518701227037803762883557789306170721707519765093430995709876 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,wide_exponent,4096,10322096095657499357,108.459773,105.569923,104.766295,80.000000,24.766295,yes,Both,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-282.39686865150220367499305723086940567546238559138028340316645126151229305833112,-282.39686865150220367499305723087759150499758429977321630947871340522978294577768 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,qdpp,ddreal,qdpp dd_real,qdpp log,wide_exponent,4096,10322096095657499357,102.976131,98.351588,98.120928,,,,NaN,-,"[8.0137486442110252e-232,2.224262064590428e-248,1.2347134784542901e-264,6.8540366629748501e-281]",-532.1185829274821218054391355886238273235190505944474623515813571650312496785773,-532.11858292748212180543913559016789345023301543283440496688357322042108585689832 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,wide_exponent,4096,10322096095657499357,106.876407,104.641553,102.373621,,,,Both,-,"[9.8724575378275929,2.740157417032594e-16,1.5210929277434915e-32,8.443761954876569e-49]",2.2897488131137169994105625805515515334956951130684182404586939334895090425447961,2.2897488131137169994105625805519000770341292764626019169410782736436637403671614 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,wide_exponent,4096,10322096095657499357,114.899153,113.162642,113.028614,,,,No,-,"[5.458701172842345e+224,1.5150939316594794e+208,8.4104608369910374e+191,4.6687436344678076e+175]",517.47627171169320427846349718798625199324761647559864417169039332508595485649039,517.47627171169320427846349718798630084579140073034479946317933618634716552824299 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,extreme_finite,4096,10322096095657499354,109.176760,105.259872,105.032438,80.000000,25.032438,yes,Both,-,"[7.8173980412642063e+300,2.1697638245177804e+284,1.2044608779891888e+268,6.6861009950191438e+251]",692.83187966610744796102335261136963360047942862056461746020352698849364969646558,692.8318796661074479610233526113529337163936151304127833135311352796511576817801 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,qdpp,ddreal,qdpp dd_real,qdpp log,extreme_finite,4096,10322096095657499354,94.691718,62.215356,61.346954,,,,NaN,-,"[2.1523458449921256e+307,5.9739597851663649e+290,3.316213850838226e+274,1.8408684858907265e+258]",707.66018188719877629754369976107280238225878803524147544123587549869114354805788,707.66018188719877653884049364052149288115177810739831253518763758437695437450931 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,extreme_finite,4096,10322096095657499354,107.235578,105.227151,105.035096,,,,Both,-,"[1.0069214736271378e+301,2.7947685100258519e+284,1.5514081741640217e+268,8.6120453777428592e+251]",693.08501062139424109343845505927377090986957133212151413101387298354438826208934,693.08501062139424109343845505925709567645795181068156897691159852775850423690577 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,extreme_finite,4096,10322096095657499354,115.534765,113.325557,113.285384,,,,No,-,"[8.3193845738370037e+270,2.3090930761462968e+254,1.2818041495700743e+238,7.1154423995638221e+221]",623.81656339099882949900267018734779984904540997696515824943850779191190092376473,623.8165633909988294990026701873478491389845554944656387436301881745302964002462 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,near_one,4099,10322096095657499359,107.303954,104.550799,103.716432,80.000000,23.716432,yes,Both,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.24290063227404771615686474809384021893054758987931141292077052724202035349776452,0.24290063227404771615686474809385479604744883847615479262644004599544797468667503 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,near_one,4099,10322096095657499359,101.669543,95.715106,87.939906,,,,Both,-,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",4.044148995362291804383621503107805429122385032546069087176404383881042495577085e-05,4.0441489953622918043836215167309566516349824665253487483127010580011294770046154e-05 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,near_one,4099,10322096095657499359,114.998512,113.191847,113.016527,,,,No,-,"[0.70667685256571555,1.9614222817202363e-17,1.0888080890893083e-33,6.044099049525344e-50]",-0.50087744106456204019778665744575576721811844484718549777154507969979119197390105,-0.50087744106456204019778665744575581490148587894479768852119248604151503539540518 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,wide_exponent,4096,10322096095657499357,107.967820,105.222704,104.386734,80.000000,24.386734,yes,Both,-,"[2.2828060842783888e+123,6.336059688800657e+106,3.5172196759528967e+90,1.952449133453769e+74]",409.78796398443927791610862116022677480269364161366471002376221655083554651355371,409.78796398443927791610862116024222810248381363533512220222949171648044838642357 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,wide_exponent,4096,10322096095657499357,106.811573,104.492642,102.312914,,,,Both,-,"[9.8724575378275929,2.740157417032594e-16,1.5210929277434915e-32,8.443761954876569e-49]",3.3034092575605493779172148119355486815283475477783179543435034724099819136711176,3.303409257560549377917214811936073134270919791794568551577162714286004123950989 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,wide_exponent,4096,10322096095657499357,114.953722,113.209249,113.024836,,,,No,-,"[4.3538032635725136e+156,1.2084231569765884e+140,6.7080960618281417e+123,3.7237413496194703e+107]",520.34305901999576558624497846294523008272872419599112042989887041283258994894823,520.34305901999576558624497846294527933471433297529398191461768706821030235939582 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,extreme_finite,4096,10322096095657499354,111.086264,105.070160,104.606169,80.000000,24.606169,yes,Both,-,"[8.4825748870998104e+300,2.3543874869413368e+284,1.3069475984458161e+268,7.2550165788654925e+251]",999.66293072781110639078474847446915088682993473501091851417255096379221868119203,999.66293072781110639078474847443677221631807677679365605314190636576738889243849 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,extreme_finite,4096,10322096095657499354,111.221449,105.074551,104.624242,,,,Both,-,"[1.9230330816353472e-151,5.3374890108685769e-168,2.9629015967750232e-184,1.6447407862191361e-200]",-500.66775874664477275846631739014346365552647448470350839775516726959381230699364,-500.66775874664477275846631739012744910850453672628085794632227477319599271088726 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,extreme_finite,4096,10322096095657499354,118.992979,113.866301,113.813514,,,,No,-,"[4.6410253113118828e+270,1.2881432896216468e+254,7.1506316957717187e+237,3.9693979746300949e+221]",899.13502918531497655348899194015066466036407709017719390075728484040817889422215,899.13502918531497655348899194015061539480716298928420272988309606906902968233412 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,near_one,4099,10322096095657499359,107.290148,104.469291,103.762278,80.000000,23.762278,yes,Both,-,"[0.75767388015401582,2.1029674672601745e-17,1.1673814510949479e-33,6.4802688276296867e-50]",-0.12051768424391546599899037931433572311869461807102196510180994458742362307468454,-0.12051768424391546599899037931434272948211001876788467720396858894260414574766305 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,qdpp,ddreal,qdpp dd_real,qdpp log10,near_one,4099,10322096095657499359,106.634449,104.214607,103.495982,,,,NaN,-,"[1.4285637374785782,3.9650608837332131e-17,2.201050943580592e-33,1.2218287179680498e-49]",0.15489962184001986679735197991693269478090345830246767504947428883759971696143509,0.15489962184001986679735197991694352545131380484784002570762181823234214383384175 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,near_one,4099,10322096095657499359,101.609942,95.718828,87.939938,,,,Both,-,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",1.2174101545384046086252384657457743119885332315350708330878957913257906519677656e-05,1.2174101545384046086252384698466606762194093124850392369685309026219998762457263e-05 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,near_one,4099,10322096095657499359,114.872088,113.157276,113.007632,,,,No,-,"[0.56152363038163511,1.5585411583019934e-17,8.6516413938641703e-34,4.8026257381340422e-50]",-0.25063196277134080699268976739835896943757206564298147783154726746356196712822717,-0.25063196277134080699268976739835899344521197849814681069469218834374690481796137 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,wide_exponent,4096,10322096095657499357,107.892624,105.170494,104.368159,80.000000,24.368159,yes,Both,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-122.64340176210480714781256202313334304453302289297190638109238264297218279352819,-122.64340176210480714781256202313802791680273253425717918726194907203719295819875 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,qdpp,ddreal,qdpp dd_real,qdpp log10,wide_exponent,4096,10322096095657499357,102.782053,98.347329,98.113779,,,,NaN,-,"[8.0137486442110252e-232,2.224262064590428e-248,1.2347134784542901e-264,6.8540366629748501e-281]",-231.09616428358339128264900503515342528697795196117676197503174056633798438831207,-231.09616428358339128264900503582733567809457849116273501127310924457513100144675 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,wide_exponent,4096,10322096095657499357,103.649650,103.003493,102.765232,,,,Both,-,"[3.905695425475696e-145,1.0840482471340662e-161,6.0176766188639109e-178,3.3404815685055882e-194]",-144.40830162694489898876145691151228884311488012943396616534789608787825443414476,-144.4083016269448989887614569114955326687050779095882138658826009601337648743421 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,wide_exponent,4096,10322096095657499357,114.973047,113.138717,113.026133,,,,No,-,"[2.4824071579503231e+32,6890063958126866,0.38247538237261935,2.1231648793119637e-17]",32.39487301485368150686302398006636790049855942982417088318864681383349446441855,32.39487301485368150686302398006636483698472419625684766314706515101750626242056 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,extreme_finite,4096,10322096095657499354,107.326534,105.011900,104.460171,80.000000,24.460171,yes,Both,-,"[1.574269563896497e-151,4.3694757920112377e-168,2.4255463149165589e-184,1.3464486830575322e-200]",-150.80292090089107415382716149653340039225497975448655319083077208652809986233478,-150.80292090089107415382716149652799577485650407769540271244758516976318786368256 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,qdpp,ddreal,qdpp dd_real,qdpp log10,extreme_finite,4096,10322096095657499354,94.613116,62.215356,61.346954,,,,NaN,-,"[2.1523458449921256e+307,5.9739597851663649e+290,3.316213850838226e+274,1.8408684858907265e+258]",307.33291205626194574151945445801460621459670399432857056272721391065871898717887,307.33291205626194584631332054080635133639070942553915332220471130808137777079125 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,extreme_finite,4096,10322096095657499354,103.562882,103.052180,102.780151,,,,Both,-,"[8.6806348536685748e-302,2.4093605285094229e-318,0,0]",-301.06144851176328304846286031809826768270144426070608633955877353471919377625454,-301.06144851176328304846286031806369391941670085227560113406940501162511205637408 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,extreme_finite,4096,10322096095657499354,114.774406,113.144122,113.082184,,,,No,-,"[7.3681209041005966e+270,2.0450643689886018e+254,1.1352387746458314e+238,6.3018411302952568e+221]",270.86735674362105667777608200997211613184077567666338331782646957519855579477053,270.86735674362105667777608200997209149259660762788172218869818982891320765553073 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,moderate,4099,10322096095657499356,108.140237,105.150365,103.619384,80.000000,23.619384,yes,Both,yes,"[0.016967775842366306,4.7095038542183959e-19,-2.6142998067570899e-35,1.4512279193674093e-51]",0.016825431060362116060527975223933686830025480890723928219206553105394405175920802,0.016825431060362116060527975223934766829053970731436945963748330916850378472668862 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,qdpp,ddreal,qdpp dd_real,qdpp log1p,moderate,4099,10322096095657499356,107.230437,104.605109,103.795300,,,,NaN,no,"[0.66217882122731719,1.8379154343642823e-17,-1.0202480162725859e-33,5.6635141924698313e-50]",0.50812928464502640442230979621768527602171153983600486964570326804679911703033213,0.50812928464502640442230979621765640411464564063690635215521073475052601939406968 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,moderate,4099,10322096095657499356,104.843175,101.291508,100.173624,,,,Both,no,"[0.50978045786818238,1.4149250045730266e-17,-7.854411590974145e-34,4.3600742965911016e-50]",0.41196424811609458603720091262173995084781993126662968922408673659585343074240882,0.41196424811609458603720091262202808439485668228344707426199018895324808168027625 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,moderate,4099,10322096095657499356,114.969880,113.130249,113.010769,,,,No,no,"[6.4127308474812379,1.7798903593994158e-16,-9.8803762915678819e-33,5.4847106254295907e-49]",2.0031989068380659308358767184051391841716466064575456726443683664874674185685244,2.0031989068380659308358767184051393756381315180978687804239195286771249857338303 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,cancellation,4098,10322096095657499336,134.607455,106.537373,104.621883,80.000000,24.621883,yes,Both,yes,"[9.5757892125536038e-15,2.657815415683552e-31,-1.4753839348477804e-47,8.1900260731503383e-64]",9.5757892125535581941894138318495891727756910760066238894863215461528382537839935e-15,9.5757892125535581941894138318498959687222096513961541169989695977230888612152571e-15 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,qdpp,ddreal,qdpp dd_real,qdpp log1p,cancellation,4098,10322096095657499336,134.555631,105.766536,104.089611,,,,NaN,no,"[2.3924534883532117e-12,6.6403923702862736e-29,-3.6861582510185196e-45,2.0462288813463789e-61]",2.3924534883503498722859585505722919346198673253770991772356315936388669371903705e-12,2.3924534883503498722859585505721810813857978873366089282898811577288643891844246e-12 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,cancellation,4098,10322096095657499336,134.649642,107.170004,104.032519,,,,Both,no,"[9.640978373446825e-32,2.675909042528464e-48,-1.485427915408879e-64,8.245781365539434e-81]",9.6409783734468253031264825210279822527089990205713589968491374709281993532281666e-32,9.6409783734468253031264825210275175103890126736048734827121919974874555365422483e-32 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,cancellation,4098,10322096095657499336,141.258045,113.598062,113.115444,,,,No,no,"[2.6730589512739875e-23,7.4192289847118885e-40,-4.1184994218967311e-56,2.2862264425475737e-72]",2.6730589512739876209542699187290419021144006266392741070944842875474854548228371e-23,2.6730589512739876209542699187290416645031710677328282365395176678854623522396858e-23 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,near_one,4099,10322096095657499359,108.254105,105.091738,103.817818,80.000000,23.817818,yes,Both,yes,"[0.50824794006286333,1.4106714131902435e-17,7.8307994155215805e-34,4.3469669061666386e-50] ; [1.4195792076051643,3.9401238039059714e-17,2.1872080834850324e-33,1.2141443869656723e-49]",0.38260537918836910980295595469486016694478510077047130768040772007699407142311543,0.38260537918836910980295595469483876398615466016654421485472691554230336671157279 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,qdpp,ddreal,qdpp dd_real,qdpp pow,near_one,4099,10322096095657499359,108.260195,105.213264,104.146088,,,,No,no,"[0.5595859812437316,1.5531631015856295e-17,8.6217871818929345e-34,4.7860533213777892e-50] ; [1.2982038560619356,3.6032395291428086e-17,2.0001997442469269e-33,1.1103339049561439e-49]",0.47063014492835036533591438775807217830872650433682840639058639451049181889885631,0.47063014492835036533591438775805120904364905202333737103157535856690798348325443 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,near_one,4099,10322096095657499359,103.218318,100.596655,99.961241,,,,Inf,no,"[1.3001872815938884,3.6087446408758173e-17,2.0032556951464871e-33,1.1120302984815517e-49] ; [1.4964387904107816,4.1534520001406718e-17,2.3056290211157914e-33,1.2798812127433564e-49]",1.4811630565057160695975467044776770686909168775065531267436775252066549768414916,1.4811630565057160695975467044788773163012774987744976567649309696218580203568102 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,near_one,4099,10322096095657499359,114.926370,113.162316,113.016553,,,,No,no,"[1.0072931928427433,2.7958002381055039e-17,1.5519808982986127e-33,8.6152246353477663e-50] ; [1.2932802742744287,3.5895738444825207e-17,1.9926137653683677e-33,1.1061228407484956e-49]",1.0094422126013183565427786981156641075907671648540197459770146736708130476289913,1.0094422126013183565427786981156642036875925766244874388795772114241665281807993 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,moderate,4099,10322096095657499356,106.001122,102.267431,101.314349,80.000000,21.314349,yes,Both,yes,"[6.7554035072711907,1.875001128601503e-16,1.0408347120857714e-32,5.7777933109335954e-49] ; [7.5615146099912893,2.09874190526296e-16,1.1650357929843036e-32,6.4672478094180065e-49]",1876810.3436059515909373438747938277987921279160005681718725867312969057820737362,1876810.3436059515909373438747932324627118494928000187634317695110360784386875593 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,qdpp,ddreal,qdpp dd_real,qdpp pow,moderate,4099,10322096095657499356,105.307211,101.687730,101.002017,,,,No,no,"[4.5236763170044476,1.2555724007724666e-16,6.9698269421073854e-33,3.8690311743901836e-49] ; [7.9474533276739914,2.205861417879371e-16,1.2244990676309858e-32,6.797335292579786e-49]",161990.02774912685537580110147647898976617011060412333264824091827449592528864741,161990.0277491268553758011014764151852239818531721937823617363018533884000846154 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,moderate,4099,10322096095657499356,101.997656,98.689822,97.605813,,,,Inf,no,"[5.3841638638994409,1.4944056725139767e-16,8.2956179287772921e-33,4.6049930140109008e-49] ; [7.900171020724815,2.1927379414212786e-16,1.2172140747675356e-32,6.7568954585236242e-49]",596979.42152351974794327492916693170559841450560851008888541002761485287919640541,596979.42152351974794327492916940731307384283545223626923271842061389321561692216 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,moderate,4099,10322096095657499356,114.949694,113.202145,113.025976,,,,No,no,"[1.1675387080838069,3.2405708896393795e-17,1.7988782073038331e-33,9.9857800212257048e-50] ; [4.5155188621659903,1.2533082522264678e-16,6.9572583928726882e-33,3.8620542280169357e-49]",2.0126338344774562612903904708133934296318506834439464451373504273658677360403502,2.0126338344774562612903904708133936199830988498706095749550332038551540854633581 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,moderate,4099,10322096095657499356,106.519662,103.850741,103.190083,90.000000,13.190083,yes,Both,no,"[0.71581135775056381,1.9867756266571774e-17,-1.1028820227394361e-33,6.1222250754524372e-50]",0.096291975196169784525310139181526871816045133452422261028615229900944061380840822,0.096291975196169784525310139181535194812644791471494678467075788752285130394604154 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,qdpp,ddreal,qdpp dd_real,qdpp npwr,moderate,4099,10322096095657499356,106.491385,103.850741,103.184609,,,,NaN,no,"[-2.8929326812399925,-8.0295011785080708e-17,4.4572685423172447e-33,-2.474281081309007e-49]",-1695.7752558459658673075077886364494173602264988659071916102076549304200625556405,-1695.7752558459658673075077886365965488884921735244318698449135638215709140023681 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",moderate,4099,10322096095657499356,106.373891,103.455996,102.759509,,,,Both,no,"[-0.36144099270550889,-1.0032002803625731e-17,5.5688802478447044e-34,-3.0913495362687196e-50]",-0.00080586416602977375312522760475390522692055461405400605181073388411962243882413759,-0.00080586416602977375312522760475399910564780802927688413249709532873387989737341996 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,wide_exponent,4096,10322096095657499357,106.463253,103.779117,103.294727,90.000000,13.294727,yes,Both,no,"[-4.2985314788901945e+20,-11930.821549849798,6.62293639366862e-13,-3.6764682374394009e-29]",-2.7116946263909823534882310466348560028692459166343819479015128601692309145311966e+144,-2.7116946263909823534882310466350739893700446173843466311067792915601894946997725e+144 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,qdpp,ddreal,qdpp dd_real,qdpp npwr,wide_exponent,4096,10322096095657499357,106.460501,103.777298,103.294727,,,,NaN,no,"[-4.2985314788901945e+20,-11930.821549849798,6.62293639366862e-13,-3.6764682374394009e-29]",-2.7116946263909823534882310466348560028692459166343819479015128601692309145311966e+144,-2.7116946263909823534882310466350739893700446173843466311067792915601894946997725e+144 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",wide_exponent,4096,10322096095657499357,106.381440,103.527280,102.733123,,,,Both,no,"[25243192839578.898,0.00070063934763883447,-3.8893296785349167e-20,2.1590116797337115e-36]",6.5314558416850667205793051431029262199911942560992371852825518724937704498574181e+93,6.5314558416850667205793051431037011424970252237504699458471391554570588684096988e+93 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,qdpp,ddreal,qdpp dd_real,qdpp fmod,moderate,4099,10322096095657499356,135.004363,101.709365,95.502103,,,,NaN,no,"[2.666045778311009,7.3997635194639449e-17,4.1076939180450772e-33,2.2802281829631827e-49] ; [0.22214166730181911,6.1656698441775213e-18,3.4226343116214427e-34,1.8999437088170993e-50]",0.00034577068917962528864980778995916839279651382077593419427617715822265154201886617,0.00034577068917962528864980778996533136861855297550571332369244892564197346729315541 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,moderate,4099,10322096095657499356,135.004363,101.709365,95.502103,,,,NaN,no,"[2.666045778311009,7.3997635194639449e-17,4.1076939180450772e-33,2.2802281829631827e-49] ; [0.22214166730181911,6.1656698441775213e-18,3.4226343116214427e-34,1.8999437088170993e-50]",0.00034577068917962528864980778995916839279651382077593419427617715822265154201886617,0.00034577068917962528864980778996533136861855297550571332369244892564197346729315541 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144,572114432512329142864001791218144 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,qdpp,ddreal,qdpp dd_real,qdpp fmod,wide_exponent,4096,10322096095657499357,78.323405,0.000000,0.000000,,,,NaN,no,"[1.2347084998878686e+21,34270.045131897481,1.9023696580187922e-12,1.0560272978403741e-28] ; [3.0778362709487343e-89,8.5427117350842915e-106,4.7421576305130505e-122,2.6324262938987323e-138]",1.4551915228366851806640625e-11,1.496236298527499726192933808693620496158132324462865624527799753897426005495429e-89 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,wide_exponent,4096,10322096095657499357,78.330828,0.000000,0.000000,,,,NaN,no,"[1.2347084998878686e+21,34270.045131897481,1.9023696580187922e-12,1.0560272978403741e-28] ; [3.0778362709487343e-89,8.5427117350842915e-106,4.7421576305130505e-122,2.6324262938987323e-138]",-1.4551915228366851806640625e-11,1.496236298527499726192933808693620496158132324462865624527799753897426005495429e-89 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144,572114432512329142864001791218144 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,quotient_reduction,2,10322096095657499335,inf,inf,inf,90.000000,inf,yes,Both,yes,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,0,0] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,0,0]",134.96799785736229470766307175341820151552670393203375029736457157980566989863291,134.96799785736229470766307175341820151552670393203375029736457157980566989863291 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,qdpp,ddreal,qdpp dd_real,qdpp fmod,quotient_reduction,2,10322096095657499335,24.892057,0.000000,0.000000,,,,NaN,no,"maximum binary64 below 2^900 [8.452712498170643e+270,0,0,0] ; negative double divisor [-7.5,0,0,0]",0,0.5 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,quotient_reduction,2,10322096095657499335,24.892057,0.000000,0.000000,,,,NaN,no,"maximum binary64 below 2^900 [8.452712498170643e+270,0,0,0] ; negative double divisor [-7.5,0,0,0]",0,0.5 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,quotient_reduction,2,10322096095657499335,inf,inf,inf,,,,No,no,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,0,0] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,0,0]",134.96799785736229470766307175341820151552670393203375029736457157980566989863291,134.96799785736229470766307175341820151552670393203375029736457157980566989863291 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,moderate,4099,10322096095657499356,137.991491,inf,103.120938,90.000000,13.120938,yes,Both,yes,"[4.651496856054143,1.2910497271407093e-16,7.1667656650382064e-33,3.9783541267092195e-49] ; [1.1968567583256404,3.3219448256783813e-17,1.8440498160012704e-33,1.0236532821401969e-49]",-0.13593017724841871918057204650149481280191019956683356060646777679554175755072265,-0.13593017724841871918057204650150713875355427787629311886530032033038040140127123 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,qdpp,ddreal,qdpp dd_real,qdpp drem,moderate,4099,10322096095657499356,134.409394,100.966202,95.502103,,,,NaN,no,"[2.666045778311009,7.3997635194639449e-17,4.1076939180450772e-33,2.2802281829631827e-49] ; [0.22214166730181911,6.1656698441775213e-18,3.4226343116214427e-34,1.8999437088170993e-50]",0.00034577068917962528864980778995916839279651382077593419427617715822265154201886617,0.00034577068917962528864980778996533136861855297550571332369244892564197346729315541 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remainder,moderate,4099,10322096095657499356,134.409394,100.966202,95.502103,,,,NaN,no,"[2.666045778311009,7.3997635194639449e-17,4.1076939180450772e-33,2.2802281829631827e-49] ; [0.22214166730181911,6.1656698441775213e-18,3.4226343116214427e-34,1.8999437088170993e-50]",0.00034577068917962528864980778995916839279651382077593419427617715822265154201886617,0.00034577068917962528864980778996533136861855297550571332369244892564197346729315541 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,tlfloat,tlquad,TLFloat Quad,tlfloat::remainder,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,near_one,4099,10322096095657499359,107.411772,104.726423,103.815855,80.000000,23.815855,yes,Both,yes,"[0.51829726641315743,1.4385638969304155e-17,-7.9856338038331893e-34,4.4329172576202887e-50]",0.54181616064164601141836335700755281177762270906400557918307925851265915984100729,0.54181616064164601141836335700752246129643265188541540400851198947696500079557021 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,qdpp,ddreal,qdpp dd_real,qdpp sinh,near_one,4099,10322096095657499359,107.090908,104.381391,103.645559,,,,NaN,no,"[0.70605664046588912,1.9597008473367903e-17,-1.0878525010453667e-33,6.0387944702831416e-50]",0.76619976927372938814837145149464280564137290853475812074181692276457489310104165,0.76619976927372938814837145149469110262141228326110030876169141933709498395269912 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,near_one,4099,10322096095657499359,103.314713,100.590468,99.932085,,,,Both,no,"[0.556376029442197,1.5442536955906277e-17,-8.5723300435360125e-34,4.7585990945098258e-50]",0.58552836632655900670708376199067605028722445297766704511594490836778881259760965,0.58552836632655900670708376199116021458707057522670375998661998280538289617921361 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,near_one,4099,10322096095657499359,114.943677,113.141428,113.021471,,,,No,no,"[0.88382018328015488,2.4530937927651344e-17,-1.3617406051464522e-33,7.559178867002926e-50]",1.0034630059833739039108480399599084583957300102559614242164711890692549607628781,1.0034630059833739039108480399599085535982428899557028619169496230290414232934836 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,moderate,4099,10322096095657499356,107.428545,104.869846,103.568829,80.000000,23.568829,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50]",0.12683416188096790784216939618227372193425686465939287968000771713444896349187729,0.12683416188096790784216939618228215357757794097427308352934774394732010797034323 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,qdpp,ddreal,qdpp dd_real,qdpp sinh,moderate,4099,10322096095657499356,106.885784,104.435203,103.870123,,,,NaN,no,"[-0.2542586325750964,-7.057094702364497e-18,3.9174745127626403e-34,-2.17463520122565e-50]",-0.25700703019627618270770115594239598265277418504551841190443166735831240221621385,-0.25700703019627618270770115594240984773141934339998680690421520718433231060336277 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,moderate,4099,10322096095657499356,103.779582,101.002087,100.236433,,,,Both,no,"[-0.53059214692798662,-1.4726890455118619e-17,8.1750664322025707e-34,-4.5380734904357627e-50]",-0.55584104592641476129020046112854089859321241383858441232520679895282023075253619,-0.5558410459264147612902004611289130996470591645326795565000699081687663834429277 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,moderate,4099,10322096095657499356,114.974128,113.192568,113.003172,,,,No,no,"[-4.1591464579851021,-1.1543950401108066e-16,6.4081797652204933e-33,-3.5572543606424108e-49]",-32.000618655313629721674682365518236008420232252926831380721182706899571868142118,-32.0006186553136297216746823655182329336415739416390744160297430115592657339984 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,near_one,4099,10322096095657499359,108.151971,105.591524,104.831618,80.000000,24.831618,yes,Both,-,"[1.4994043079684287,4.1616829648217466e-17,-2.3101981243676942e-33,1.2824175745594325e-49]",2.3511416377389521966137617451012654144360692751585280356211248541098424169604186,2.3511416377389521966137617451013305498775090885888924794020061506206886998298218 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,qdpp,ddreal,qdpp dd_real,qdpp cosh,near_one,4099,10322096095657499359,107.863612,105.297250,104.470578,,,,NaN,-,"[1.4489040565134639,4.0215166100350915e-17,-2.2323901671867327e-33,1.2392254817787567e-49]",2.2466362233200427213995508459808834140324823472328528703239550884385167250911763,2.24663622332004272139955084598096335238256731634234766524569758842515233906734 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,near_one,4099,10322096095657499359,104.244078,101.474027,101.018845,,,,Both,-,"[1.4459858354426181,4.0134169194755932e-17,-2.2278939357109857e-33,1.2367295719245473e-49]",2.2407748785941455468149928931172890798881812171960175770167589259784790556295775,2.2407748785941455468149928931181614399296154393447339518228073553103157037095686 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,near_one,4099,10322096095657499359,114.895079,113.182096,113.010341,,,,No,-,"[1.3229625356615966,3.6719586695199608e-17,-2.0383465301865082e-33,1.1315096249889291e-49]",2.0104364576665678758598407499062611809762474391010385287739734136349539772581352,2.0104364576665678758598407499062609887609457666528309771732843508256939227761068 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,moderate,4099,10322096095657499356,107.662138,105.118172,104.370708,80.000000,24.370708,yes,Both,-,"[-7.2839693641636938,-2.0217076246896986e-16,1.122273176995369e-32,-6.2298676050974111e-49]",728.37982867708396528583195554001745260585065072868172597435332260573659368674271,728.37982867708396528583195554004522697642161075015288462613983940694317570296734 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,qdpp,ddreal,qdpp dd_real,qdpp cosh,moderate,4099,10322096095657499356,107.483805,104.881438,104.111506,,,,NaN,-,"[7.0128923877089875,1.946468649513252e-16,-1.0805071557003232e-32,5.9980196126536888e-49]",555.43190455748570319974002005868170632481445737714788744485670812789379624518915,555.43190455748570319974002005870705438166427560668951714415596620645132619201956 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,moderate,4099,10322096095657499356,103.832933,101.138682,100.616889,,,,Both,-,"[6.2894204955453095,1.7456648614259411e-16,-9.6903866121708154e-33,5.3792451671757032e-49]",269.42141683849341758232407964909905497460624068820139994447256104326271497484413,269.42141683849341758232407964923764454985239125085761375472047443911151216271434 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,moderate,4099,10322096095657499356,114.931183,113.167572,113.012441,,,,No,-,"[2.0680399334084143,5.7399638747857426e-17,-3.1863200271518802e-33,1.7687629289841357e-49]",4.0178692533490240404296040425970871191188024353226664008220687178646150783389857,4.0178692533490240404296040425970867355340668113774081960274487118933383171930497 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,near_one,4099,10322096095657499359,108.508993,105.293208,103.771823,80.000000,23.771823,yes,Both,yes,"[0.51172914905977851,1.4203337091450122e-17,-7.884435932720214e-34,4.3767411543439516e-50]",0.47129137278430720759814686288642179705346521613436667069278209179356009528305549,0.47129137278430720759814686288639457893398171528583227402623085761363208890619784 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,qdpp,ddreal,qdpp dd_real,qdpp tanh,near_one,4099,10322096095657499359,108.592328,105.735071,105.098015,,,,Both,no,"[0.58416164284675398,1.6213742649783091e-17,-9.0004352025680418e-34,4.9962451967689124e-50]",0.52568361604852371688202223691267621130986870473801164119274069051399034258054144,0.52568361604852371688202223691268831922667016929762092801084851574231028090029755 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,near_one,4099,10322096095657499359,104.549583,101.155017,100.345784,,,,Both,no,"[0.556376029442197,1.5442536955906277e-17,-8.5723300435360125e-34,4.7585990945098258e-50]",0.50528364840645601747577363559900197677740795879784146166067930320588141857029996,0.50528364840645601747577363559931562602749387840749911387652478785100115049351614 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,near_one,4099,10322096095657499359,115.041332,113.224776,113.018718,,,,Inf,no,"[0.552774916573326,1.5342585995373914e-17,-8.5168461146777975e-34,4.7277993268522986e-50]",0.50259706445063723172976483018675200373774673231800013130307827226899634702472763,0.50259706445063723172976483018675195596328587350834779271290641898064907256890663 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,moderate,4099,10322096095657499356,109.925995,105.123457,103.815933,80.000000,23.815933,yes,Both,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.48322034922123225518708897646637636069385959299582733007677741617069688828678409,0.48322034922123225518708897646634929399270770971586954580993858000068003447759588 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,qdpp,ddreal,qdpp dd_real,qdpp tanh,moderate,4099,10322096095657499356,109.941576,105.403737,104.022939,,,,Both,no,"[-0.2542586325750964,-7.057094702364497e-18,3.9174745127626403e-34,-2.17463520122565e-50]",-0.24891764507154159340917437775173972890450198659567844774309803106940482131381742,-0.24891764507154159340917437775175180789991987808388789206287063251566640478939434 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,moderate,4099,10322096095657499356,107.024889,102.226945,100.639803,,,,Both,no,"[-0.53059214692798662,-1.4726890455118619e-17,8.1750664322025707e-34,-4.5380734904357627e-50]",-0.48583360068250018583086622934612463370687351803631456906975097116002659802802555,-0.48583360068250018583086622934637060713264426066036289533463488732206999871421232 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,moderate,4099,10322096095657499356,115.363409,113.532562,113.121187,,,,Inf,no,"[-0.5998341324142249,-1.6648741619058185e-17,9.2419081382567522e-34,-5.1302896032816304e-50]",-0.53693152879880785898041492583469711473728507809526835316606195460550324423387725,-0.53693152879880785898041492583469706719845615505246020917703587632005152396862512 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,near_one,4099,10322096095657499359,107.942783,105.155677,104.205601,80.000000,24.205601,yes,Both,yes,"[0.54780977077077553,1.5204775515608602e-17,-8.4403459308427531e-34,4.6853331941114368e-50]",0.52356044719022625228591770335188992100790509674337745785256442894450845670917261,0.52356044719022625228591770335191230591271180851991336042503192896063029229750644 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,qdpp,ddreal,qdpp dd_real,qdpp asinh,near_one,4099,10322096095657499359,106.712531,103.961722,103.072032,,,,NaN,no,"[0.52823964483236285,1.4661595405317608e-17,-8.1388203983610065e-34,4.517952899774639e-50]",0.50632644493980583852529647906712821803145603212361033746932194310463870579042123,0.5063264449398058385252964790670807220011452357647174662076578948536130292071603 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,near_one,4099,10322096095657499359,103.814763,100.780938,99.800033,,,,Both,no,"[0.5576392959998614,1.5477599646370227e-17,-8.5917937466652033e-34,4.769403620189074e-50]",0.53216330948166039562825976302834831342044029859942942121705690004980493501562933,0.53216330948166039562825976302883052907969987597028703665857651454611260317937864 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,near_one,4099,10322096095657499359,114.884758,113.122222,113.007648,,,,No,no,"[1.1779140555896355,3.2693682638630247e-17,-1.8148639612597521e-33,1.0074518781764974e-49]",1.0017569054609729283589884138505580828278717088605237274331326762110317037113294,1.0017569054609729283589884138505579868722109578149090755180498437202003300766939 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,moderate,4099,10322096095657499356,108.220931,105.311170,103.818628,80.000000,23.818628,yes,Both,yes,"[-0.065200541635407561,-1.8096785635415158e-18,1.0045734042071851e-34,-5.5765026163844551e-51]",-0.065154433999027981604796867967127986881415212588611420145090880769980952458286794,-0.065154433999027981604796867967124344186568215933203026966926467120453192197675953 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,qdpp,ddreal,qdpp dd_real,qdpp asinh,moderate,4099,10322096095657499356,107.432596,104.625661,0.000000,,,,NaN,no,"midpoint [0,0,0,0]",-0.5,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,moderate,4099,10322096095657499356,105.111176,101.672387,100.007734,,,,Both,no,"[0.4300835480404146,1.1937216438673698e-17,-6.6264862700747261e-34,3.6784388146997172e-50]",0.417820251288375409972859501512898045290567648359341993891738758094139827292679,0.4178202512883754099728595015132258850600119393786524691588748596799786548401261 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,moderate,4099,10322096095657499356,114.871483,113.164718,113.024305,,,,No,no,"[3.7333993131913807,1.0362264694062042e-16,-5.7522124253040164e-33,3.1931193385537162e-49]",2.0279383819186585084121279272279713196675799418072996533879457279437663955179438,2.0279383819186585084121279272279715116885312926883178850691969552555567203716169 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,moderate,4099,10322096095657499387,108.351907,105.741626,104.602282,80.000000,24.602282,yes,Both,-,"[1.0163605766345611,2.8209672837524767e-17,-1.5659514150681434e-33,8.6927765822649907e-50]",0.18064417420571660663002643085721230147927409837472224057688179881691649397712496,0.18064417420571660663002643085721816825671862302878034638011489993285710967947058 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,qdpp,ddreal,qdpp dd_real,qdpp acosh,moderate,4099,10322096095657499387,107.772625,105.082067,0.000000,,,,NaN,-,"lower endpoint [1,0,0,0]",-0.5,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,moderate,4099,10322096095657499387,105.538766,102.217591,100.384388,,,,Both,-,"[1.1709254555463331,3.249971002168098e-17,-1.8040963179855585e-33,1.0014746354345175e-49]",0.57665699913917249167543347514105386745673957917489461428525946025923365478860205,0.5766569991391724916754334751414023697075837995469982943468518144667513041144549 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,moderate,4099,10322096095657499387,115.059144,113.267306,113.024351,,,,No,-,"[3.8699921915058342,1.0741386090323363e-16,-5.9626670769326946e-33,3.3099451384925286e-49]",2.0292730557141128075372232618212138749815878457667406971551750687385697394238271,2.0292730557141128075372232618212136828403580686083850658195804537308812685715241 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,boundary,4101,10322096095657499355,107.711288,104.331717,103.672888,80.000000,23.672888,yes,Both,-,"[1.0000006976642144,2.7755594979700771e-17,-1.54074503043171e-33,8.5528530393103596e-50]",0.0011812401392645466366367223496664025691107131134376936381879814208025359246329034,0.0011812401392645466366367223496664756307232078155433668789257650353131882010275132 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,qdpp,ddreal,qdpp dd_real,qdpp acosh,boundary,4101,10322096095657499355,106.663901,103.934820,0.000000,,,,NaN,-,"[1,0,0,0]",-0.5,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,boundary,4101,10322096095657499355,105.677356,101.710952,101.079624,,,,Both,-,"[1.9999990658472695,5.5511125303311079e-17,-3.0814864717294043e-33,1.7105686154924606e-49]",1.3169573575913183806206053356776144386291410718207369817816534095233915735434493,1.3169573575913183806206053356781059946048036439182701968030728549965132899787948 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,boundary,4101,10322096095657499355,114.746080,113.201891,113.036560,,,,No,-,"[1.0000004817944794,2.7755588988112018e-17,-1.5407446978317207e-33,8.5528511930095289e-50]",0.00098162563206491441874298495040138570975940288164826724838384161703782738019139625,0.00098162563206491441874298495040138580192116085770131138514473092172470104226838173 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,moderate,4099,10322096095657499356,107.718351,104.542010,103.139045,80.000000,23.139045,yes,Both,yes,"[-0.28874902442031025,-8.0143953812370009e-18,4.4488831403494138e-34,-2.4696262481412955e-50]",-0.29720096062669683272865803517211421035379945494633700815507025452637257512122915,-0.29720096062669683272865803517208759673932197508207544978047397151679963698000212 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,qdpp,ddreal,qdpp dd_real,qdpp atanh,moderate,4099,10322096095657499356,107.222255,104.408425,103.554334,,,,Both,no,"[-0.084655633592085944,-2.3496658394541165e-18,1.3043265575685784e-34,-7.2404668792135272e-51]",-0.084858738000380082551010311704664761059101588266307168112619662759567307208641296,-0.084858738000380082551010311704670459233783125377342399423042080577740336303080062 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,moderate,4099,10322096095657499356,105.624336,102.147896,101.316477,,,,Both,no,"[0.62764313350169854,1.7420596451536667e-17,-9.6703736415996537e-34,5.3681357368160785e-50]",0.73751780205133126725673321943555768093904551298771999434742818041454981425886217,0.73751780205133126725673321943579128155966759716208171117997200450929687036778351 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,moderate,4099,10322096095657499356,114.908941,113.183849,113.009480,,,,No,no,"[-0.46396013668772096,-1.2877480656473566e-17,7.1484377619910142e-34,-3.9681800967311743e-50]",-0.50234596747773904865253807286233097224104131869860818047026432546942747991991496,-0.50234596747773904865253807286233092418371010656600101473678518793597466683589449 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,boundary,4105,10322096095657499355,108.512745,106.655151,106.203619,80.000000,26.203619,yes,Both,yes,"[-0.99899927667986499,-2.7727799963846583e-17,1.539202097103153e-33,-8.544288038776232e-50]",-3.799839456997147855581613541852042024176399900088711456868967222127997374059305,-3.799839456997147855581613541852082695691985906489816947756475473707459623001287 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,qdpp,ddreal,qdpp dd_real,qdpp atanh,boundary,4105,10322096095657499355,107.993764,105.426852,0.000000,,,,Both,no,"[-0,0,0,0]",-0.25,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,boundary,4105,10322096095657499355,107.828369,106.269551,104.585034,,,,Both,no,"[-0.5,0,0,0]",-0.54930614433405484569762261846124479796810281996701244989017928624722153507775602,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,boundary,4105,10322096095657499355,115.361632,113.939200,113.173250,,,,No,no,"[-0.5,0,0,0]",-0.54930614433405484569762261846126280541308284062223852328394245531764986632816683,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,near_one,4099,10322096095657499359,107.766481,104.260004,103.477540,80.000000,23.477540,yes,Both,yes,"[0.63773432238017391,1.7700683207504784e-17,-9.8258530242838391e-34,5.4544441320713228e-50]",0.63288603898704082304852473006912003275150944031003931863308835424966614091601969,0.6328860389870408230485247300690752116994000610050783793434311866968213898036298 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,near_one,4099,10322096095657499359,106.197191,102.183057,101.184994,,,,Both,no,"[0.53548819375999224,1.4862783053182011e-17,-8.2505019778256258e-34,4.5799486302487013e-50]",0.55112665424029227785508649938232538753270271835738832653895855062664566048624692,0.55112665424029227785508649938251660744941249076854316599667893359729852255925888 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,near_one,4099,10322096095657499359,115.124806,113.304511,113.099781,,,,Inf,no,"[0.50289575568916656,1.3958161173809507e-17,-7.748335958296108e-34,4.3011904917156829e-50]",0.52304092944980720556572922310906538941879260415288739219076647612942224975507433,0.52304092944980720556572922310906534241757921999581684753101762682302235845555926 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,moderate,4099,10322096095657499356,114.031302,105.136563,103.642929,80.000000,23.642929,yes,Both,yes,"[0.57618201352237719,1.5992263444685661e-17,-8.8774895460806198e-34,4.9279966474639169e-50]",0.58483862789646320066419155791433430439304208383200808363911138388832600121247651,0.58483862789646320066419155791429737215979664256706430739228534678145335856964206 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,moderate,4099,10322096095657499356,113.984298,103.700474,101.648786,,,,Both,no,"[-0.5716770143103389,-1.5867224598407584e-17,8.8080790430253763e-34,-4.8894660781425438e-50]",-0.58118187967003879843073421984341735301833588689049142915266289071210548122792261,-0.58118187967003879843073421984356356345148985854257440755257771327766377011312792 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,moderate,4099,10322096095657499356,115.374771,113.586571,113.036088,,,,Inf,no,"[0.2267593093247573,6.2938351565110877e-18,-3.4937803519769427e-34,1.9394376948738926e-50]",0.25155171091007438344002347195342211717096167376876435890978837978420765923021074,0.25155171091007438344002347195342214079608489454741680081317269235003386899327349 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,near_one,4099,10322096095657499359,105.308687,102.381484,101.601777,80.000000,21.601777,yes,Both,-,"[0.9902100102210416,2.74838488140428e-17,-1.5256600879333559e-33,8.4691147868762635e-50]",0.16140301992014431339678047519482652144140492984788687432496615166421793929885098,0.16140301992014431339678047519478457172356343218546211428730930584097639007690213 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,near_one,4099,10322096095657499359,103.755339,101.145295,100.349669,,,,Both,-,"[1.3269384103584123,3.6829939385985342e-17,-2.0444723350934913e-33,1.1349101298149763e-49]",0.060576462988822571448810903007093159144687718926563865599815508636641347983697869,0.060576462988822571448810903007055658100102621540510399378637298350232657879135663 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,near_one,4099,10322096095657499359,114.982303,113.213810,113.071281,,,,Inf,-,"[0.80083449033122145,2.2227622251991859e-17,-1.2338809003415918e-33,6.8494149260222667e-50]",0.25740285684031596236392165679791925931975478436236106519156635466784809572471371,0.25740285684031596236392165679791928291183093915807724913103163989411993536165529 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,moderate,4099,10322096095657499356,109.069920,100.123363,99.167646,80.000000,19.167646,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804815742671822427612167381748211215236610271972494957,0.0048523201680211414554273497804747585214492493110494604164051752716872765694644792 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,moderate,4099,10322096095657499356,108.834982,99.620228,99.060329,,,,Both,-,"[6.9490746956892782,1.9287556817485724e-16,-1.070674483376928e-32,5.9434373166185492e-49]",8.5740965398686050033209262286348904843349839873934226306933761725669491073941353e-23,8.5740965398686050033209262286219169640957175473792335532635992276588891700122152e-23 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,moderate,4099,10322096095657499356,115.203014,113.242670,113.051599,,,,Inf,-,"[7.5037321448425516,2.0827040494560277e-16,-1.1561329945930663e-32,6.4178273506302694e-49]",2.6241573054106070556560136630867966813651251129676318065538857582990160319181036e-26,2.624157305410607055656013663086796437546133956840801798010299652149670834993565e-26 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,moderate,4099,10322096095657499371,107.300170,103.199673,102.168212,80.000000,22.168212,yes,Both,-,"[16.10862066659595,4.4710403897518653e-16,-2.4819259923657773e-32,1.3777456910700632e-48]",28.197381657001775717891747205953291356104893832451631814899496025761393980246794,28.197381657001775717891747205948342415185062324244223614602442709080412981510555 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lgamma,moderate,4099,10322096095657499371,105.139668,100.764251,92.065791,,,,Both,-,"[0.99874974000558037,2.7720873929814604e-17,-1.5388176249805709e-33,8.5421537897621465e-50]",0.00072295607710545662058194796458275488909819673752452280824622669615210185075152016,0.00072295607710545662058194796472224625027501458658803985557334948681356598407441761 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::lgamma,moderate,4099,10322096095657499371,114.971639,113.175643,113.013850,,,,No,-,"[17.500019022698545,4.8572310125945387e-16,-2.6963048530529103e-32,1.4967498646339452e-48]",32.081168794062295073979477959328457529686036531915204354297578928385120677901909,32.081168794062295073979477959328454469896577802020991166202567137045500772062679 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,moderate,4099,10322096095657499368,105.565044,98.349598,97.317514,80.000000,17.317514,yes,Both,-,"[16.916625286240897,4.6953067229351934e-16,-2.6064188157399712e-32,1.4468530905253747e-48]",16565261246416.8279913958728258930306644070018506909036659635603427886962890625,16565261246416.827991395872825976920133201596664513013387683984998603514086978856 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tgamma,moderate,4099,10322096095657499368,100.757190,97.383410,96.496549,,,,Both,-,"[16.868177199116474,4.6818596774790482e-16,-2.5989542060006744e-32,1.4427093997241705e-48]",14465982228876.97039145927965612579112197888520086053176783025264739990234375,14465982228876.970391459279656255208345090859253988616153313666634359989655775049 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::tgamma,moderate,4099,10322096095657499368,115.005599,113.180213,113.028818,,,,No,-,"[19.355750178950849,5.3722998768909317e-16,-2.9822255092576032e-32,1.655467712501137e-48]",18139783686946539.5291010872149636591610377678307486348785459995269775390625,18139783686946539.529101087214963657448786918022005302501784474121108477330902841 diff --git a/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f128_benchmark.csv b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f128_benchmark.csv new file mode 100644 index 0000000..24a00c4 --- /dev/null +++ b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f128_benchmark.csv @@ -0,0 +1,292 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,81920,1.816254,1.815456|1.820409|1.818226|1.830362|1.816254|1.812439|1.815725,59637760,108445900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,qdpp,ddreal,qdpp dd_real,qdpp operator+,81920,0.926275,0.928069|0.926196|0.928524|0.928313|0.926275|0.922488|0.925918,123289600,114232800.000000,0.509992 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,81920,2.388581,2.382310|2.400166|2.387360|2.388461|2.393105|2.388581|2.391214,29245440,69901600.000000,1.315114 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,81920,30.923462,31.037903|30.923462|30.884094,983040,30423600.000000,17.025960 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,81920,1.808202,1.812251|1.807110|1.805267|1.813953|1.808202|1.809270|1.806547,59637760,107881300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,qdpp,ddreal,qdpp dd_real,qdpp operator-,81920,0.918770,0.927734|0.924225|0.918617|0.933418|0.915248|0.918770|0.916646,55050240,50761500.000000,0.508112 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,81920,2.403518,2.397062|2.400348|2.403518|2.404597|2.404128|2.402039|2.405302,29818880,71637700.000000,1.329231 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,81920,30.689087,30.672607|30.689087|30.770569,983040,30189900.000000,16.972159 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,81920,1.605675,1.606032|1.600868|1.602764|1.605450|1.625282|1.614577|1.605675,37273600,59960700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,qdpp,ddreal,qdpp dd_real,qdpp operator*,81920,1.750554,1.755981|1.751120|1.749006|1.750554|1.746826|1.758968|1.749006,32112640,56249700.000000,1.090229 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,81920,3.142016,3.135579|3.139537|3.161214|3.142016|3.141239|3.198131|3.210523,18923520,59820600.000000,1.956819 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,81920,43.775228,43.787842|43.646647|43.775228,737280,32246100.000000,27.262814 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,81920,2.529215,2.530518|2.535997|2.523926|2.523817|2.521756|2.538032|2.529215,25804800,65261300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,qdpp,ddreal,qdpp dd_real,qdpp operator/,81920,13.223796,13.236572|13.222168|13.259277|13.307617|13.223796|13.221924|13.195557,8601600,113869100.000000,5.228418 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::operator/,81920,5.823508,5.823508|5.825877|5.813850|5.816974|5.826919|5.825985|5.817081,19496960,113500700.000000,2.302496 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,81920,97.207031,97.445068|97.070312|97.207031,245760,23897900.000000,38.433669 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,81920,7.874333,7.864286|7.866962|7.874333|7.879310|7.863863|7.914429|7.905086,14909440,117504000.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,81920,15.813927,15.819280|15.820876|15.811768|15.798528|15.813927|15.861065|15.798434,7454720,117916500.000000,2.008288 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,81920,61.557007,61.286621|61.557007|61.676025,491520,30231700.000000,7.817425 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,81920,0.809662,0.809771|0.809662|0.809133|0.810428|0.807972|0.811160|0.808204,141639680,114653900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,qdpp,ddreal,qdpp dd_real,qdpp abs,81920,3.395209,3.431098|3.405680|3.392307|3.390408|3.390110|3.396701|3.395209,25804800,87741900.000000,4.193365 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,81920,1.228841,1.242010|1.230863|1.229865|1.227164|1.225746|1.228841|1.225833,56770560,69830400.000000,1.517721 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,81920,2.706636,2.709245|2.684789|2.696028|2.728671|2.703752|2.713581|2.706636,33259520,90003600.000000,3.342919 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,81920,0.807183,0.809009|0.807056|0.807153|0.808457|0.809141|0.806748|0.807183,143360000,115809200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,qdpp,ddreal,qdpp dd_real,qdpp fabs,81920,3.403426,3.405825|3.405951|3.404688|3.402436|3.403426|3.397722|3.395975,33259520,113158500.000000,4.216426 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fabs,81920,0.650049,0.647302|0.650464|0.648511|0.649658|0.651062|0.650049|0.651746,57344000,37263700.000000,0.805331 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,81920,2.697353,2.695644|2.697353|2.699899|2.697911|2.691214|2.698050|2.694685,40140800,108235400.000000,3.341688 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,81920,1.204857,1.203276|1.206159|1.204857|1.204369|1.205450|1.204625|1.206427,60211200,72555900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,qdpp,ddreal,qdpp dd_real,qdpp sqr,81920,1.240104,1.253695|1.247917|1.238851|1.242627|1.237272|1.240104|1.235889,43008000,53430400.000000,1.029254 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,8192,48.166726,48.398105|48.155629|48.166726,540672,26082100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,qdpp,ddreal,qdpp dd_real,qdpp inv,8192,13.566946,13.556384|13.420895|13.592659|13.671182|13.473186|13.662958|13.566946,8085504,109667400.000000,0.281666 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,81920,2.922363,3.077661|2.974973|2.954459|2.922363|2.917004|2.913878|2.903815,23511040,69405100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,81920,2.912977,2.979709|2.932671|2.944200|2.912977|2.907064|2.902398|2.903456,25804800,75506600.000000,0.996788 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,81920,11.236666,11.366812|11.275353|11.236666|11.241549|11.185303|11.173753|11.169903,7454720,83758400.000000,3.845061 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,81920,2.937816,3.083347|2.979052|2.952792|2.937816|2.918016|2.914980|2.908787,23511040,69508000.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,81920,2.923823,2.960922|2.937065|2.923823|2.920161|2.926158|2.916233|2.912757,26378240,77239700.000000,0.995237 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,81920,10.252441,10.338949|10.222900|10.258952|10.184408|10.177409|10.488770|10.252441,8601600,88380000.000000,3.489818 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,81920,3.029378,3.204252|3.077361|3.033103|3.005684|3.012977|3.029378|2.983179,22364160,68197700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,81920,3.362020,3.450487|3.377855|3.352729|3.357578|3.381822|3.362020|3.360765,20643840,69726800.000000,1.109805 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,81920,29.233398,29.233398|29.136353|29.279175,983040,28720800.000000,9.649966 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,81920,0.385060,0.385912|0.385394|0.385060|0.385485|0.384779|0.384858|0.384844,301629440,116184700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::copysign,81920,0.871318,0.871476|0.869109|0.871318|0.870515|0.869981|0.873067|0.872723,132464640,115399200.000000,2.262811 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,tlfloat,tlquad,TLFloat Quad,tlfloat::copysign,81920,6.483471,6.539126|6.489032|6.483471|6.470857|6.514802|6.454762|6.475152,15482880,100477700.000000,16.837564 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,81920,0.815484,0.821652|0.811768|0.815553|0.813715|0.815484|0.822556|0.812677,141639680,115606400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,qdpp,ddreal,qdpp dd_real,qdpp floor,81920,0.369205,0.368345|0.369116|0.369846|0.368018|0.369205|0.370650|0.369730,102645760,37904300.000000,0.452743 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::floor,81920,0.369810,0.370092|0.370480|0.371002|0.368208|0.369810|0.369196|0.367996,99205120,36660300.000000,0.453485 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,tlfloat,tlquad,TLFloat Quad,tlfloat::floor,81920,5.773981,5.851440|5.793402|5.771207|5.776478|5.773981|5.750067|5.760221,12615680,72948900.000000,7.080434 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,81920,1.504783,1.524727|1.517282|1.515305|1.502256|1.504542|1.504491|1.504783,40714240,61498200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,qdpp,ddreal,qdpp dd_real,qdpp ceil,81920,0.367785,0.369075|0.375831|0.367563|0.367265|0.368361|0.366364|0.367785,100925440,37230600.000000,0.244411 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ceil,81920,2.099809,2.109835|2.100230|2.094747|2.099809|2.089323|2.101751|2.094346,34979840,73407900.000000,1.395423 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,tlfloat,tlquad,TLFloat Quad,tlfloat::ceil,81920,5.933447,6.009277|5.911670|6.028809|5.915820|5.903711|5.933447|5.999658,14336000,85406500.000000,3.943058 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,81920,3.169909,3.184268|3.169845|3.169909|3.164769|3.170295|3.180413|3.168046,21790720,69131200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,qdpp,ddreal,qdpp dd_real,qdpp aint,81920,0.996910,0.997339|0.997167|0.997701|0.996769|0.996836|0.996910|0.995566,114114560,113760600.000000,0.314492 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::trunc,81920,4.672160,4.740031|4.681600|4.672160|4.653402|4.688232|4.630819|4.640828,17203200,80380900.000000,1.473910 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,tlfloat,tlquad,TLFloat Quad,tlfloat::trunc,81920,4.336695,4.392553|4.345493|4.335348|4.338631|4.336695|4.324699|4.329539,16629760,72227700.000000,1.368082 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,81920,8.889271,8.873513|8.889271|8.865079|8.908414|8.894487|8.899814|8.880560,12615680,112119400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,qdpp,ddreal,qdpp dd_real,qdpp round,81920,7.251616,7.500639|7.461519|7.256441|7.251616|7.203776|7.180176|7.183431,12042240,87801000.000000,0.815772 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::round,81920,6.023849,6.192177|6.090345|6.047942|6.023849|6.015561|6.011642|5.996222,10895360,65960100.000000,0.677654 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,tlfloat,tlquad,TLFloat Quad,tlfloat::round,81920,7.727661,7.765978|7.766927|7.727661|7.723660|7.722711|7.711995|7.746107,10321920,79869600.000000,0.869324 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,81920,10.027466,10.060486|10.043152|10.033997|10.027466|9.994324|9.991882|9.997681,11468800,114932100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,tlfloat,tlquad,TLFloat Quad,tlfloat::rint,81920,8.382339,8.461990|8.400040|8.390274|8.370514|8.382339|8.359528|8.337860,9175040,76942600.000000,0.835938 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,8192,6.691771,6.694784|6.691771|6.670988,3883008,25961200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lround,8192,10.752651,10.861019|10.752651|10.710549,1204224,12975200.000000,1.606847 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,8192,6.052807,6.057675|6.047865|6.059076|6.063317|6.031454|6.052807|6.043882,18980864,114850700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::llround,8192,622.515869,623.077393|621.862793|622.515869,49152,30596400.000000,102.847473 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,8192,93.118286,92.882284|93.118286|93.166097,294912,27443200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,8192,144.793701,144.953918|144.793701|143.974304,196608,28424400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,4096,20.590672,20.590672|20.552695|20.609661,1216512,25041100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,qdpp,ddreal,qdpp dd_real,qdpp fmod,4096,29.541016,29.586029|29.541016|29.457855,786432,23222000.000000,1.434680 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,4096,41.410080,41.443589|41.395240|41.410080,626688,25955100.000000,2.011109 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,4096,182.948812,182.948812|181.994629|182.999674,147456,26932500.000000,8.885033 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,4096,22.824164,22.824164|22.853190|22.754720,1105920,25226800.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,qdpp,ddreal,qdpp dd_real,qdpp drem,4096,26.518680,26.518680|26.535269|26.480494,958464,25410300.000000,1.161869 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remainder,4096,50.159543,50.080623|50.265148|50.159543,528384,26508200.000000,2.197651 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,tlfloat,tlquad,TLFloat Quad,tlfloat::remainder,4096,176.285807,177.272542|176.285807|175.990804,147456,26028400.000000,7.723648 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,4096,22.812661,22.905488|22.812661|22.810515,1118208,25543100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,qdpp,ddreal,qdpp dd_real,qdpp divrem,4096,27.083547,27.150044|27.083547|27.019300,933888,25293700.000000,1.187216 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remquo,4096,50.618868,50.528593|50.618868|50.785224,528384,26759600.000000,2.218894 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,tlfloat,tlquad,TLFloat Quad,tlfloat::remquo,4096,181.579590,181.579590|181.675212|180.765788,147456,26739700.000000,7.959597 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,81920,6.927448,6.931784|6.925428|6.920966|6.952199|6.919535|6.927448|6.955777,16629760,115299200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,81920,7.032471,7.120226|7.001411|7.034709|7.039049|7.008192|7.032471|6.988118,10321920,72584000.000000,1.015160 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,81920,32.895101,32.944743|32.886556|32.895101,737280,24263000.000000,4.748516 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,81920,1.811072,1.824115|1.814400|1.808547|1.811072|1.808162|1.806992|1.811741,41861120,75858500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,qdpp,ddreal,qdpp dd_real,qdpp ldexp,81920,1.901832,1.890339|1.901832|1.902777|1.885802|1.884236|1.953793|1.927283,60784640,115890800.000000,1.050114 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ldexp,81920,2.069445,2.049987|2.099330|2.081343|2.078372|2.056694|2.069445|2.064238,47595520,98586700.000000,1.142663 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,tlfloat,tlquad,TLFloat Quad,tlfloat::ldexp,81920,11.592079,11.726825|11.617619|11.532640|11.592079|11.605412|11.573768|11.513202,7454720,86433800.000000,6.400673 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,81920,1.880258,1.889047|1.872296|1.858286|1.880258|1.890494|1.873742|1.885517,37273600,70019200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,qdpp,ddreal,qdpp dd_real,qdpp ldexp,81920,1.904412,1.926868|1.904412|1.888773|1.931348|1.893829|1.912876|1.898090,60784640,115978800.000000,1.012846 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbn,81920,2.074372,2.072180|2.090535|2.074372|2.068445|2.097418|2.086079|2.059223,47595520,98918800.000000,1.103238 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,81920,1.885564,1.908992|1.880892|1.892911|1.879519|1.888263|1.885564|1.880857,59637760,112604600.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,qdpp,ddreal,qdpp dd_real,qdpp ldexp,81920,1.905276,1.940411|1.888531|1.902351|1.905276|1.951985|1.894992|1.912289,60784640,116323000.000000,1.010454 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbln,81920,2.056448,2.055703|2.061395|2.056448|2.056358|2.054263|2.084987|2.078626,54476800,112438400.000000,1.090628 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,81920,3.610041,3.605269|3.610041|3.605025|3.612438|3.605713|3.612527|3.621693,31539200,113868700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,81920,2.793579,2.807566|2.794749|2.790604|2.793579|2.794266|2.784093|2.792536,27525120,76902800.000000,0.773836 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,81920,10.804443,10.747199|10.789281|10.906597|10.883982|10.852822|10.804443|10.803544,10895360,117962300.000000,2.992887 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,81920,2.082902,2.082902|2.081251|2.084722|2.078498|2.083333|2.079073|2.083238,29245440,60884900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,81920,2.119123,2.171936|2.078283|2.086541|2.161524|2.203710|2.058339|2.119123,38993920,82886900.000000,1.017389 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,81920,1.565060,1.573093|1.568761|1.565020|1.566595|1.562795|1.565060|1.562303,35553280,55684700.000000,0.751384 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,81920,1.914917,1.911621|1.887598|1.950635|1.910669|1.914917|1.915845|1.920117,28672000,54933100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,81920,97.200928,97.409668|96.978760|97.200928,245760,23887000.000000,50.759865 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f128,bl::nextafter,81920,5.436750,5.438974|5.466352|5.435137|5.427508|5.436750|5.444205|5.433698,16056320,87352400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter,81920,23.271240,23.271240|23.307617|23.259277,1228800,28605700.000000,4.280359 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter,81920,14.336722,14.349452|14.386422|14.349976|14.336722|14.325213|14.316929|14.330967,8028160,115141800.000000,2.637002 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f128,bl::nexttoward,81920,5.434570,5.438034|5.453607|5.423188|5.418206|5.434570|5.419328|5.438562,21217280,115256800.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter (same type),81920,23.309326,23.309326|23.270996|23.367432,1228800,28650600.000000,4.289084 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter (same type),81920,14.284930,14.322510|14.289376|14.293998|14.275426|14.284406|14.284930|14.272287,8028160,114714300.000000,2.628530 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,81920,1.109053,1.106847|1.108608|1.109053|1.111258|1.110496|1.112843|1.107899,103792640,115165400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,qdpp,ddreal,qdpp dd_real,qdpp operator==,81920,0.802459,0.803286|0.802158|0.801987|0.802459|0.802775|0.803466|0.802138,143933440,115522400.000000,0.723554 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator==,81920,1.487466,1.487466|1.492682|1.485279|1.488560|1.486912|1.487086|1.501497,44154880,65787500.000000,1.341205 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator==,81920,4.388152,4.386419|4.388152|4.417685|4.388703|4.381773|4.388743|4.384017,17776640,78053400.000000,3.956667 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,81920,1.113790,1.114766|1.112793|1.116333|1.117350|1.113790|1.113146|1.113112,103219200,115034700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,qdpp,ddreal,qdpp dd_real,qdpp operator!=,81920,0.804375,0.802615|0.805537|0.807228|0.804468|0.804375|0.803453|0.802963,142786560,114854200.000000,0.722196 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator!=,81920,1.198586,1.201763|1.198310|1.197116|1.200424|1.195462|1.198586|1.206238,53329920,63979900.000000,1.076133 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator!=,81920,4.386144,4.395949|4.414732|4.397366|4.386144|4.380001|4.372716|4.369487,17776640,78004900.000000,3.938035 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,81920,2.047395,2.077184|2.065489|2.053242|2.045190|2.044205|2.047218|2.047395,35553280,73036200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,qdpp,ddreal,qdpp dd_real,qdpp operator<,81920,1.497976,1.523918|1.509731|1.502753|1.497976|1.497966|1.491593|1.489152,72826880,109376500.000000,0.731650 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<,81920,1.762595,1.784348|1.767618|1.760054|1.762595|1.764036|1.757933|1.759814,34979840,61746400.000000,0.860897 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,tlfloat,tlquad,TLFloat Quad,TLFloat operator<,81920,5.280239,5.334008|5.288667|5.270124|5.280239|5.275472|5.264137|5.286749,12042240,63650800.000000,2.579004 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,81920,2.068569,2.074478|2.060392|2.064073|2.083605|2.075350|2.068569|2.052971,36126720,74727800.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,qdpp,ddreal,qdpp dd_real,qdpp operator<=,81920,1.520536,1.591099|1.542002|1.529287|1.520536|1.512578|1.503668|1.499705,44154880,67486800.000000,0.735067 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<=,81920,0.639430,0.639173|0.641006|0.639067|0.641871|0.639430|0.639855|0.639122,179486720,114859300.000000,0.309117 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator<=,81920,5.266890,5.294467|5.246638|5.252519|5.266890|5.268721|5.214178|5.269942,12615680,66346500.000000,2.546152 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,81920,2.078702,2.100830|2.082423|2.083450|2.077191|2.078702|2.075215|2.071611,36126720,75192200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,qdpp,ddreal,qdpp dd_real,qdpp operator>,81920,1.515762,1.579056|1.530106|1.520004|1.514832|1.508408|1.512146|1.515762,45875200,69994500.000000,0.729187 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>,81920,1.781024,1.860537|1.804236|1.784871|1.781024|1.770852|1.772849|1.763768,37847040,67790200.000000,0.856796 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,tlfloat,tlquad,TLFloat Quad,TLFloat operator>,81920,5.280096,5.326427|5.287309|5.282482|5.267556|5.280096|5.256625|5.258290,12615680,66608600.000000,2.540092 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,81920,2.086099,2.103354|2.087671|2.088726|2.080223|2.080471|2.079002|2.086099,33832960,70592700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,qdpp,ddreal,qdpp dd_real,qdpp operator>=,81920,1.493462,1.551544|1.530701|1.512014|1.493462|1.491533|1.481331|1.477292,46448640,69924300.000000,0.715912 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>=,81920,1.777690,1.805420|1.774283|1.777836|1.772534|1.784668|1.777690|1.772898,38420480,68417700.000000,0.852160 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator>=,81920,5.270219,5.324208|5.267889|5.282593|5.269886|5.250577|5.276878|5.270219,12615680,66578800.000000,2.526352 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,81920,5.672760,5.663605|5.718193|5.672760|5.672264|5.675125|5.673218|5.663528,18350080,104172600.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,81920,5.436824,5.476685|5.441801|5.433021|5.415462|5.434523|5.436824|5.444571,14909440,81113500.000000,0.958409 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,81920,3.116862,3.119565|3.104713|3.110264|3.116862|3.117356|3.121541|3.106922,24084480,74996400.000000,0.549444 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,81920,154.057617,154.127197|154.057617|153.901367,245760,37854100.000000,27.157436 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,2048,18.870897,18.870897|18.766433|18.880052,1277952,24075500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,qdpp,ddreal,qdpp dd_real,qdpp nroot,2048,75.547960,75.547960|75.649233|75.460250,331776,25066500.000000,4.003411 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,2048,388.623047,387.963867|388.847656|388.623047,61440,23868100.000000,20.593778 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,2048,853.623047,853.623047|852.314453|854.365234,30720,26217500.000000,45.234896 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,8192,10.877763,10.877763|10.895684|10.824001,2310144,25101600.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,8192,59.552002,59.552002|59.564209|59.459093,442368,26332000.000000,5.474655 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,8192,217.062988,216.748047|217.133789|217.062988,122880,26662700.000000,19.954744 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,2048,107.259971,107.259971|107.952560|106.622636,233472,25046500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,qdpp,ddreal,qdpp dd_real,qdpp sin,2048,161.906250,161.906250|161.753906|163.966797,153600,24966500.000000,1.509475 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,2048,611.138916,611.138916|611.041260|612.622070,49152,30061400.000000,5.697735 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,2048,983.916016,983.232422|983.916016|985.117188,30720,30231200.000000,9.173189 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,2048,106.950298,106.950298|107.453999|106.685598,233472,24988500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,qdpp,ddreal,qdpp dd_real,qdpp cos,2048,163.544171,163.544171|163.020207|164.823092,159744,26165400.000000,1.529160 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,2048,612.932478,614.292690|612.932478|610.742188,43008,26349100.000000,5.731003 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,2048,992.099609,990.878906|992.099609|993.007812,30720,30474100.000000,9.276268 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,fltx,fltx,fltx bl::f128,bl::sincos,2048,116.824588,116.824588|116.460357|116.951277,227328,26539500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,qdpp,ddreal,qdpp dd_real,qdpp sincos,2048,166.794922,167.355469|166.406250|166.794922,153600,25628500.000000,1.427738 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,tlfloat,tlquad,TLFloat Quad,tlfloat::sincos,2048,1987.483724,1987.483724|1986.962891|1991.601562,18432,36655400.000000,17.012546 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,2048,116.663587,117.547772|116.550095|116.663587,227328,26579300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,qdpp,ddreal,qdpp dd_real,qdpp tan,2048,185.873811,185.720958|185.929008|185.873811,141312,26261600.000000,1.593246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,2048,1214.794922,1212.414551|1216.906738|1214.794922,24576,29852600.000000,10.412803 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,2048,1260.754395,1258.996582|1261.450195|1260.754395,24576,30975600.000000,10.806751 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,2048,142.457682,142.457682|142.500000|141.863607,184320,26223900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,qdpp,ddreal,qdpp dd_real,qdpp atan,2048,206.598772,207.082403|206.598772|205.691964,129024,26638000.000000,1.450247 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,2048,328.898738,328.898738|328.992638|328.846154,79872,26270900.000000,2.308747 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,2048,1883.154297,1881.901042|1883.154297|1887.386068,18432,34728600.000000,13.219043 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,2048,148.252651,148.615374|148.252651|147.961426,172032,25508300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,qdpp,ddreal,qdpp dd_real,qdpp atan2,2048,206.549944,206.549944|205.894252|206.852214,129024,26634700.000000,1.393229 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,2048,366.859020,367.493786|366.859020|366.463956,67584,24799200.000000,2.474553 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,2048,1903.092448,1903.092448|1901.969401|1906.477865,18432,35091700.000000,12.836819 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,2048,196.669922,196.120605|196.669922|196.918945,122880,24154500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,qdpp,ddreal,qdpp dd_real,qdpp asin,2048,286.813151,286.477865|286.813151|286.858724,92160,26423800.000000,1.458348 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,2048,3263.110352,3263.110352|3260.766602|3272.729492,12288,40126900.000000,16.591812 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,2048,2166.455078,2171.386719|2166.455078|2146.508789,12288,26559900.000000,11.015691 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,2048,202.150657,202.150657|202.352628|201.966442,135168,27325100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,qdpp,ddreal,qdpp dd_real,qdpp acos,2048,287.901088,288.368443|287.318638|287.901088,86016,24760800.000000,1.424191 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,2048,3072.485352,3072.485352|3066.625977|3086.669922,12288,37788800.000000,15.198988 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,2048,2162.255859,2164.697266|2162.255859|2158.227539,12288,26563300.000000,10.696259 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,2048,118.133904,118.133904|119.025735|117.767693,208896,24714300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,qdpp,ddreal,qdpp dd_real,qdpp exp,2048,148.026982,148.026982|147.692419|149.446615,165888,24615900.000000,1.253044 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,2048,309.828404,308.925084|310.581752|309.828404,86016,26645900.000000,2.622688 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,2048,971.855469,969.902344|971.855469|974.042969,30720,29857800.000000,8.226728 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,2048,111.646793,112.199322|111.646793|111.392373,233472,26089600.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,2048,701.049805,700.846354|701.049805|702.628581,36864,25860400.000000,6.279175 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,2048,2862.133789,2862.133789|2854.345703|2864.501953,12288,35147700.000000,25.635611 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,2048,118.245443,119.377984|118.245443|117.891439,221184,26211400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,qdpp,ddreal,qdpp dd_real,qdpp expm1,2048,150.350516,149.851772|150.350516|150.798689,172032,25862200.000000,1.271512 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,2048,323.127093,323.141044|321.229771|323.127093,86016,27740100.000000,2.732681 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,2048,1041.015625,1044.055176|1039.758301|1041.015625,24576,25598600.000000,8.803854 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,2048,155.311415,155.311415|154.765263|155.763527,165888,25759100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,qdpp,ddreal,qdpp dd_real,qdpp log,2048,175.199219,174.974609|175.199219|175.912109,153600,26935600.000000,1.128051 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,2048,342.897386,342.897386|344.610126|342.596905,79872,27425500.000000,2.207805 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,2048,1358.898926,1358.898926|1362.048340|1357.446289,24576,33410200.000000,8.749511 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,2048,162.621094,162.816406|162.484375|162.621094,153600,24981600.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,2048,356.126052,355.543870|356.411508|356.126052,79872,28436600.000000,2.189913 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,2048,1434.505208,1434.505208|1436.702474|1434.082031,18432,26451700.000000,8.821151 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,2048,162.693278,163.057454|162.148031|162.693278,147456,23981200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,qdpp,ddreal,qdpp dd_real,qdpp log10,2048,201.318359,201.311384|201.318359|202.534412,129024,26026900.000000,1.237410 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,2048,356.475361,355.100661|356.475361|356.877254,79872,28446500.000000,2.191088 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,2048,1428.503418,1426.550293|1428.503418|1431.579590,24576,35116100.000000,8.780347 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,2048,157.910156,158.738426|157.573785|157.910156,165888,26222600.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,qdpp,ddreal,qdpp dd_real,qdpp log1p,2048,171.380859,171.800781|171.380859|171.302734,153600,26341600.000000,1.085306 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,2048,472.005208,467.214627|472.005208|472.325304,55296,26017600.000000,2.989074 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,2048,1393.294271,1401.774089|1388.102214|1393.294271,18432,25701400.000000,8.823335 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,2048,241.208065,241.208065|241.279871|239.769072,104448,25146100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,qdpp,ddreal,qdpp dd_real,qdpp pow,2048,300.917271,300.917271|302.556501|296.316964,86016,25798800.000000,1.247542 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,2048,564.013672,564.349365|564.013672|562.213135,49152,27698400.000000,2.338287 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,2048,6434.375000,6462.597656|6434.375000|6410.937500,6144,39542600.000000,26.675621 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,8192,26.345083,26.485959|26.291636|26.345083,909312,23982400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,qdpp,ddreal,qdpp dd_real,qdpp npwr,8192,7.763225,7.817040|7.754517|7.763225|7.773050|7.792254|7.758462|7.753251,9404416,73101600.000000,0.294675 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",8192,10.159415,10.175352|10.176369|10.150260|10.135227|10.159415|10.170379|10.141556,6193152,62912300.000000,0.385628 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,fltx,fltx,fltx bl::f128,bl::product_sum,8192,6.095968,6.096661|6.110370|6.095968|6.093696|6.091463|6.096238|6.095352,18178048,110833500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,qdpp,ddreal,qdpp dd_real,same expression,8192,4.995246,5.016533|5.005225|4.963507|4.992162|4.995246|5.021330|4.977556,16343040,81648800.000000,0.819434 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,cppdd,cppdd,boost::multiprecision::cpp_double_double,same expression,8192,8.681399,8.658304|8.681399|8.682828|8.660614|8.683818|8.670401|8.691406,6365184,55221400.000000,1.424121 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,tlfloat,tlquad,TLFloat Quad,same expression,8192,101.148571,101.799982|100.421697|101.148571,270336,27337300.000000,16.592700 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,2048,135.136414,135.136414|136.380005|134.620667,196608,26616600.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,qdpp,ddreal,qdpp dd_real,qdpp sinh,2048,184.022588,184.179688|183.699898|184.022588,141312,25996800.000000,1.361754 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,2048,334.476725,333.146159|334.476725|335.355632,73728,24649200.000000,2.475104 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,2048,1119.885254,1119.885254|1117.468262|1121.887207,24576,27518900.000000,8.287072 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,2048,134.440613,134.440613|134.492493|133.522034,196608,26375300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,qdpp,ddreal,qdpp dd_real,qdpp cosh,2048,183.207371,183.867612|183.207371|182.547130,141312,25889400.000000,1.362738 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,2048,334.446364,332.493239|334.446364|334.656701,79872,26666500.000000,2.487688 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,2048,1051.591797,1052.607422|1049.912109|1051.591797,30720,32298100.000000,7.821980 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,2048,141.668294,141.668294|142.322591|140.732422,184320,26095000.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,qdpp,ddreal,qdpp dd_real,qdpp tanh,2048,187.546705,187.030825|187.546705|187.812075,141312,26490800.000000,1.323844 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,2048,350.176532,350.627254|349.545523|350.176532,79872,27964500.000000,2.471806 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,2048,1086.560059,1087.280273|1086.560059|1085.729980,24576,26702400.000000,7.669748 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,2048,144.785493,144.785493|144.915140|144.239965,178176,25772600.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,qdpp,ddreal,qdpp dd_real,qdpp asinh,2048,205.775670,204.710751|205.961682|205.775670,129024,26512200.000000,1.421245 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,2048,611.907087,612.709263|611.907087|611.390904,43008,26321000.000000,4.226301 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,2048,6172.558594,6197.412109|6172.558594|6157.861328,6144,37945000.000000,42.632438 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,2048,169.054688,169.062500|169.007812|169.054688,153600,25964800.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,qdpp,ddreal,qdpp dd_real,qdpp acosh,2048,199.986683,199.986683|199.520597|200.073242,135168,27014700.000000,1.182970 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,2048,726.123047,725.569661|726.123047|728.914388,36864,26795300.000000,4.295196 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,2048,5874.755859,5865.283203|5874.755859|5878.125000,6144,36082000.000000,34.750624 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,2048,168.141526,166.704853|168.141526|168.800706,159744,26818200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,qdpp,ddreal,qdpp dd_real,qdpp atanh,2048,206.474609,208.171387|206.357422|206.474609,122880,25436300.000000,1.227981 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,2048,2622.509766,2624.853516|2621.484375|2622.509766,12288,32230800.000000,15.597038 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,2048,1477.685547,1476.025391|1477.685547|1477.864583,18432,27227600.000000,8.788344 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,256,810.341797,810.341797|810.576172|809.707031,30720,24889600.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,256,917.345861,914.189189|933.931588|917.345861,28416,26194500.000000,1.132048 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,256,40416.796875,40656.640625|40416.796875|40362.890625,768,31087700.000000,49.876234 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,256,809.465144,809.465144|819.140625|806.881010,29952,24315900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,256,903.315034,903.315034|902.702703|905.278716,28416,25681400.000000,1.115941 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,256,40504.296875,40490.625000|40504.296875|40512.500000,768,31105900.000000,50.038346 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,256,676.521810,677.693685|676.521810|674.894206,36864,24933700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lgamma,256,2432.449777,2427.064732|2432.505580|2432.449777,10752,26134600.000000,3.595523 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::lgamma,256,26769.140625,26906.250000|26769.140625|26696.484375,768,20575200.000000,39.568777 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,256,590.748355,594.257127|590.748355|589.816338,43776,25898200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tgamma,256,1885.983456,1885.983456|1908.915441|1853.906250,13056,24583600.000000,3.192533 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::tgamma,256,29530.078125,29530.078125|29609.765625|29525.390625,768,22698300.000000,49.987576 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,4099,293.716237,293.716237|294.008992|292.018959,86079,25242500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,qdpp,ddreal,qdpp dd_real,qdpp to_string,4099,1278.116614,1282.800683|1278.116614|1273.042205,24594,31430800.000000,4.351535 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,4099,1160.331788,1266.796780|1160.331788|1135.935594,12297,14605000.000000,3.950520 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,4099,2108.416687,2127.494511|2108.416687|2103.878995,12297,25986800.000000,7.178414 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,4099,239.070505,237.881191|239.070505|239.375457,98376,23489800.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,qdpp,ddreal,qdpp dd_real,qdpp write,4099,1299.158331,1300.975848|1299.158331|1299.133935,24594,31966200.000000,5.434206 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,4099,256.149196,256.149196|256.393158|255.661272,110673,28339800.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,qdpp,ddreal,qdpp dd_real,qdpp read,4099,254.118891,254.118891|252.667317|254.635277,73782,18726400.000000,0.992074 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,4099,2353.647231,2353.647231|2357.794584|2300.756282,12297,28743000.000000,9.188579 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,4099,1621.993169,1621.310076|1621.993169|1651.622347,24594,40128600.000000,6.332220 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,mt19937_64,fltx,fltx,fltx bl::f128,bl::mt19937_64,64,1.737649,1.734555|1.754845|1.737649,15125952,26354700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,uniform_real,fltx,fltx,fltx bl::f128,bl::uniform_real,64,5.852447,5.852447|5.846200|5.867932,4514112,26432500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,uniform_real,qdpp,ddreal,qdpp dd_real,qdpp ddrand,64,18.328649,18.321420|18.328649|18.334297,1327872,24337400.000000,3.131793 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,normal,fltx,fltx,fltx bl::f128,bl::normal,64,48.963562,49.058242|48.954598|48.963562,535488,26234700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f128,same workload,64,30.587839,30.587839|30.692975|30.533169,784704,24015600.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,qdpp,ddreal,qdpp dd_real,same workload,64,41.955188,41.960283|41.955188|41.867052,588864,24689600.000000,1.371630 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,26.487837,26.487837|26.538114|26.482719,996480,26409600.000000,0.865960 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,tlfloat,tlquad,TLFloat Quad,same workload,64,181.086072,181.086072|181.131723|180.554864,144576,26157300.000000,5.920198 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f128,same workload,64,242.774843,242.774843|242.336443|242.780463,106752,25901300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,qdpp,ddreal,qdpp dd_real,same workload,64,315.421512,315.421512|315.606831|315.276163,82560,26042300.000000,1.299235 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,934.794463,933.053691|934.794463|936.640101,28608,26743600.000000,3.850459 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,tlfloat,tlquad,TLFloat Quad,same workload,64,2044.223485,2041.193182|2045.265152|2044.223485,12672,25896000.000000,8.420244 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f128,same workload,64,21.325630,21.320494|21.325630|21.363788,1226496,26169300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,qdpp,ddreal,qdpp dd_real,same workload,64,15.202366,15.202366|15.169192|15.215671,1736256,26383700.000000,0.712868 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,19.823610,19.798237|19.823610|19.840828,1324224,26247300.000000,0.929567 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,tlfloat,tlquad,TLFloat Quad,same workload,64,210.170541,210.673114|210.170541|210.087176,125952,26489000.000000,9.855303 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f128,same workload,64,69.306735,69.411271|69.296439|69.306735,378816,26266400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,qdpp,ddreal,qdpp dd_real,same workload,64,59.979869,59.918724|59.979869|60.126618,318912,19137400.000000,0.865426 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,80.099839,80.151039|80.099839|80.078811,328128,26286300.000000,1.155730 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,tlfloat,tlquad,TLFloat Quad,same workload,64,796.360887,796.360887|801.774194|795.372984,29760,23743600.000000,11.490382 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f128,same workload,64,174.375490,174.375490|174.875098|174.218750,122496,21374300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,qdpp,ddreal,qdpp dd_real,same workload,64,97.559331,97.532362|97.559331|97.766653,177984,17374700.000000,0.559478 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,115.838862,115.838862|115.723202|116.251309,137472,15938200.000000,0.664307 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,tlfloat,tlquad,TLFloat Quad,same workload,64,774.822231,778.040793|774.316991|774.822231,32064,24872900.000000,4.443412 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,fltx,fltx,fltx bl::f128,same workload,8,39.891933,39.891933|39.955269|39.872635,606288,24194900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,qdpp,ddreal,qdpp dd_real,same workload,8,48.503966,48.477379|48.580401|48.503966,541632,26280300.000000,1.215884 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,8,36.493333,36.493333|36.527746|36.476334,723576,26409900.000000,0.914805 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,tlfloat,tlquad,TLFloat Quad,same workload,8,282.978103,282.978103|282.113242|283.421871,92616,26195300.000000,7.093617 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f128,same workload,8,979.902184,979.902184|983.359873|979.617834,26376,25873800.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,qdpp,ddreal,qdpp dd_real,same workload,8,1137.874871,1137.525853|1139.348501|1137.874871,23208,26416500.000000,1.161213 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,8,2602.941176,2602.029412|2602.941176|2607.411765,10200,26562100.000000,2.656328 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,tlfloat,tlquad,TLFloat Quad,same workload,8,8965.202703,8942.229730|8965.202703|8971.171171,2664,23868200.000000,9.149079 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,fltx,fltx,fltx bl::f128,same workload,8,571.376330,573.410904|570.964096|571.376330,45120,25804900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,qdpp,ddreal,qdpp dd_real,same workload,8,954.211111,953.077778|954.211111|956.122222,27000,25770700.000000,1.670022 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,8,5943.682796,5946.034946|5943.682796|5940.793011,4464,26531800.000000,10.402396 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,tlfloat,tlquad,TLFloat Quad,same workload,8,6555.357143,6555.505952|6555.357143|6541.145833,4032,26412300.000000,11.472924 diff --git a/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f128_fastmath_accuracy.csv b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f128_fastmath_accuracy.csv new file mode 100644 index 0000000..e337e6d --- /dev/null +++ b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f128_fastmath_accuracy.csv @@ -0,0 +1,128 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,moderate,4097,10322096095657499311,109.950521,107.250365,107.040693,106.000000,1.040693,yes,Both,yes,-2.472067804890653694736606692562736837036787645394e-04,-0.00024720678048906536947366066925627220254736992061971280405933562914519934341009422,-0.0002472067804890653694736606692562736837036787645394 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,wide_exponent,4098,10322096095657499308,109.864126,106.715617,106.003381,106.000000,0.003381,yes,Both,yes,-4.215228812298638183537364477017984307424253045187e-293,-4.2152288122986381835373644770182307620164082432452873068526743823738143144126931e-293,-4.215228812298638183537364477017984307424253045187e-293 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,general,3845,10322096095657499292,119.108587,106.483519,105.736235,90.000000,15.736235,yes,No,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,subnormal,251,10322096095657499292,inf,inf,inf,90.000000,inf,yes,No,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312,7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,general,3844,10322096095657499292,118.876961,106.530508,105.744857,90.000000,15.744857,yes,No,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,subnormal,252,10322096095657499292,inf,inf,inf,90.000000,inf,yes,No,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310,-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,general,4092,10322096095657499292,108.673668,105.665876,105.380753,90.000000,15.380753,yes,No,no,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60037994384765625,-156159778640594921198000750.60038290050850297752267811067325203046404306830015704 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,subnormal,8,10322096095657499292,123.430323,107.640342,107.640342,90.000000,17.640342,yes,No,no,"extreme lhs [5.3610920538229009e+270,1.4880019588222884e+254,-8.2600701768591933e+237,4.5852600476843326e+221] ; extreme rhs [2.8682136140660301e-295,7.9608919846980822e-312,-0,0]",1.5376757215036059473819023136396346852543747719615695276077139367073548105554037e-24,1.5376757215036059473819023136396286054027234522232977278134529923886643804961882e-24 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,general,4096,10322096095657499292,110.882649,105.971646,105.124683,90.000000,15.124683,yes,No,no,"representative lhs [3.8069729471352109e-08,1.05664725500865e-24,-5.8655705570878625e-41,3.2560457425211756e-57] ; representative rhs [-10239996542.103203,-2.8421699832812405e-07,1.5777212776686647e-23,-8.7581124445438569e-40]",-3.717748274115425677507007818785488818087130701795158032304321273801830518128672e-18,-3.7177482741154256775070078187854047565702465103661629499646177206025402808246684e-18 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,subnormal,4,10322096095657499292,inf,inf,inf,90.000000,inf,yes,No,no,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,moderate,4099,10322096095657499356,108.612832,104.040192,99.580200,90.000000,9.580200,yes,Both,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50] ; [-2.2467526986846895,-6.2359914417961224e-17,3.4616706400237409e-33,-1.9216132241116296e-49] ; [-0.82478157060333857,-2.2892287249258141e-17,1.2707772195229639e-33,-7.0542306414176576e-50]",-0.0025616587031475578614921195531973426573882576399799792521563357797220739087151742,-0.0025616587031475578614921195531946393591985326302623011385541559314120186541712416 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,cancellation,4098,10322096095657499352,123.613534,107.447694,107.008989,90.000000,17.008989,yes,Both,no,"one plus a low-limb delta [1,2.3375830000300188e-20,0,0] ; one plus a low-limb delta [1,9.1191608041326794e-20,0,0] ; native product cancellation",6.0206627557371401035138369829719396083930638942820518512027281512011279702649282e-36,6.0206627557371401035138369829719764831182728766548123483364806462892589095319671e-36 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,wide_exponent,4096,10322096095657499357,119.340155,105.683979,104.553392,90.000000,14.553392,yes,Both,no,"[3.0625553234591342e+33,85002985857316864,-4.7186136030339867,2.6193567331989002e-16] ; [1.0150122363330037e+54,2.8172248876329288e+37,-1.5638739678985485e+21,86812.444338643574] ; [-7.5623099842645636e+83,-2.0989626659708059e+67,1.1651583397946951e+51,-6.4679280808704617e+34]",3.1077748967593748592488972694277407012434687833576651691188907589840517078014413e+87,3.1077748967593748592488972694278451113557788176351935238451751156331429585888739e+87 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,NaN,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,subnormal,4100,10322096095657499350,inf,inf,inf,90.000000,inf,yes,NaN,yes,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,NaN,yes,"lower endpoint [-8,0,0,0]",8,8 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,moderate,4099,10322096095657499356,108.710750,105.621789,105.403238,90.000000,15.403238,yes,Both,yes,"[-2.0216112865291063,-5.6110984928667459e-17,3.114785370110088e-33,-1.7290532173309048e-49]",4.0869121938218684213523234559135312039828584030511109615650764542715833727015706,4.086912193821868421352323455913607387135084308816614946511827134127630171714709 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,wide_exponent,4096,10322096095657499357,108.714763,105.598081,105.370295,90.000000,15.370295,yes,Both,yes,"[4.07867604911808e+17,11.320600149295146,-6.2841954691612277e-16,3.4884292505539414e-32]",166355983136494714602069966978531328,166355983136494714602069966978534500.62754285635655510754919878168120152773808347 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,near_one,4099,10322096095657499359,109.041603,106.207316,105.235269,90.000000,15.235269,yes,NaN,no,"[0.7943239392491388,2.2046918159133699e-17,1.2238498081148352e-33,6.7937311782608489e-50]",1.2589322197002942275560659685836243624199496927685685911021398405984506041477289,1.2589322197002942275560659685835979972909064819121737721490343315675812064184067 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,wide_exponent,4096,10322096095657499357,109.009049,105.925795,105.189487,90.000000,15.189487,yes,NaN,no,"[3.5001788065165318e+43,9.7149477532491364e+26,53928793393.438126,2.9936494057824018e-06]",2.8569969000961575149593584421158660998363524565146662142923865841595715918551683e-44,2.8569969000961575149593584421158043381809410343861907578030166512899574822804677e-44 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,No,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,No,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,cancellation,4098,10322096095657499352,137.992247,inf,106.227061,90.000000,16.227061,yes,No,yes,"one plus a low-limb delta [1.0000000000000002,-9.2098754789066345e-17,0,0] ; one plus a low-limb delta [1,9.3157411673208082e-33,0,0]",1.299458501359649542526809416735399539516537488861303804737012764889933880863069e-16,1.2994585013596495425268094167353858549612218168195955651903009493027143470550428e-16 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,NaN,yes,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,moderate,4099,10322096095657499356,110.177573,107.236356,107.022726,90.000000,17.022726,yes,NaN,yes,"[-4.0306514937478397,-1.118730523149658e-16,6.2102019257584848e-33,-3.4473545827742784e-49]",-4.0309999999999999999999999999999755453119381486340322364144762336268801306005116,-4.031 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,wide_exponent,4096,10322096095657499357,121.330260,107.340420,107.049597,90.000000,17.049597,yes,NaN,yes,"[1.9564201098655394e-06,5.4301566295310004e-23,-3.0143424587131265e-39,1.6732962008842592e-55]",1.9564199999999999999999999999999883500964702027617153338260327688823346504976789e-06,1.95642e-06 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,boundary,4110,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,boundary,4114,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,NaN,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,NaN,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,NaN,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,NaN,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,NaN,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,90.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,NaN,-,"lower endpoint [-8,0,0,0]",3,3 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,NaN,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,near_one,4099,10322096095657499359,109.483067,105.751120,104.669867,90.000000,14.669867,yes,NaN,yes,"[1.0434745107555559,2.8962235686257217e-17,1.6077270451751567e-33,8.9246779143301406e-50]",1.0215060013311502277290127699241048631609354594130696894861318971964303514710082,1.0215060013311502277290127699240732060505168443174685619534358207641504292216177 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,wide_exponent,4096,10322096095657499357,109.554369,105.974012,105.134919,90.000000,15.134919,yes,NaN,yes,"[1.1645444442808547e-62,3.2322601380997815e-79,1.7942648134482328e-95,9.9601705408249462e-112]",1.0791406045001062461937244900901782471018853969286737164352073021695624156016746e-31,1.0791406045001062461937244900901540193152963432252732200525801490754009153911073e-31 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,extreme_finite,4096,10322096095657499354,109.462818,106.258948,105.096134,90.000000,15.096134,yes,NaN,yes,"[1.3220615149200299e+307,3.6694578345875804e+290,2.0369582879251504e+274,1.1307389957277705e+258]",3.6360163846165902232928621254916330482868374851642045295187667520670879059664215e+153,3.6360163846165902232928621254915491917111449494286729393569803221869869190043071e+153 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,subnormal,4100,10322096095657499350,110.541921,106.676978,106.144003,90.000000,16.144003,yes,NaN,yes,"[5.286502410501338e-321,0,0,0]",7.270833797097371433415766444926166782823457282008099611199997713021735881592136e-161,7.2708337970973714334157664449260856763342269024386693898476408490529091738730871e-161 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,moderate,4099,10322096095657499356,108.610701,105.262130,104.145913,90.000000,14.145913,yes,NaN,yes,"[1.6964706245890131,4.7086518700473565e-17,-2.6138268605354378e-33,1.4509653814750655e-49]",1.1926566882763817482150483893442911492962655061893681865360980877757701712482685,1.1926566882763817482150483893442380031413103085426413998889005940961998748757684 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,wide_exponent,4096,10322096095657499357,108.431744,104.960828,104.098992,90.000000,14.098992,yes,NaN,yes,"[-2.5001199884633103e-152,-6.9392269387938695e-169,3.8520447602740479e-185,-2.1383143923714698e-201]",-2.924064517250494778351708273248051030213396603265547295321735382086652135025762e-51,-2.9240645172504947783517082732479164231406536255075333497671770581858568226329801e-51 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,moderate,4099,10322096095657499356,108.682153,105.556470,104.448638,90.000000,14.448638,yes,No,yes,"[2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49] ; [7.6161438781938315,2.1139045731071814e-16,-1.1734527644620026e-32,6.5139713870787798e-49]",8.0914622723995239714248451353921972400978668058729318673943800913073154390531272,8.0914622723995239714248451353919049231629452774327450009049705044051673057483058 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,wide_exponent,4096,10322096095657499357,136.087453,107.303893,104.375984,90.000000,14.375984,yes,No,yes,"[-1.0904439541376617e-171,-3.0265899623673255e-188,1.6800949311597954e-204,-9.3264003806481111e-221] ; [-6.6064316563514781e-178,-1.8336531338734802e-194,1.0178819642012061e-210,-5.6503799650342919e-227]",1.0904439541378618053723797776842685378887910042683910204594308964030285890648591e-171,1.090443954137861805372379777684227109194726424167261957374676671431464584983977e-171 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,moderate,4099,10322096095657499356,109.289129,105.940176,105.022316,80.000000,25.022316,yes,NaN,yes,"[-2.6398923795068718,-7.3271732556525522e-17,4.0673982269215659e-33,-2.2578595809239299e-49]",-0.48091697577772919399226624691062015405871262531310584383165433654955256415064468,-0.48091697577772919399226624691060848051161030920422183238229214193978802883324422 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,argument_reduction,4110,10322096095657499353,107.878813,98.777563,98.619216,80.000000,18.619216,yes,NaN,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107778446817142530158141594307620809510923605317049154659252158834084e-08,2.983455547010777844681714253021942987548016308835936187833122791508178595472033e-08 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,quadrant_boundaries,4315,10322096095657499369,114.302289,100.269139,100.230956,80.000000,20.230956,yes,NaN,yes,"below random k*pi/2, exponent 43, quadrant 2, offset bits 64 [-15189111743596.248,-2.2040936843613776e-05,0,0]",8.2340339752651274439911770999089811880423371828520810609536481004607152164951472e-07,8.2340339752651274439911770999034465622958436535312599533652322394306622926203602e-07 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,moderate,4099,10322096095657499356,109.267445,105.979013,105.328054,80.000000,25.328054,yes,Both,-,"[1.3052020301228939,3.6226633640748349e-17,-2.010982138630954e-33,1.1163193362090118e-49]",0.26248277312553705702695162816852912212589596287237225345705224528736199118839068,0.26248277312553705702695162816852396749826395623085371572470338778345559864971624 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,argument_reduction,4110,10322096095657499353,117.900119,105.731702,99.209588,80.000000,19.209588,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1273107444367091e-17,-0,-0]",-4.076748699943230335115082501060544610987236354894355627499358880133086316429937e-20,-4.0767486999432303351150825010549823398817902769691808721665498735571977321034076e-20 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,quadrant_boundaries,4315,10322096095657499369,113.389741,100.266388,100.241282,80.000000,20.241282,yes,Both,-,"below random k*pi/2, exponent 32, quadrant 1, offset bits 64 [6759185830.8093033,2.5452908459680444e-07,0,0]",3.6641619809983954738175143693267979746715518809894967024037216566072372430296582e-10,3.6641619809983954738175143693292433300620783220933192304310816115127405346807142e-10 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,moderate,4099,10322096095657499356,106.960558,104.350958,103.620775,75.000000,28.620775,yes,NaN,yes,"[-0.74034095519374787,-2.0548589363227007e-17,1.1406758517311103e-33,-6.3320229711289496e-50]",-0.91371494862285871708430404946513545989607925828816605091651051903742924986673302,-0.91371494862285871708430404946519405338684144421692519093677434779171315299426252 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,argument_reduction,4110,10322096095657499353,106.601035,98.776698,98.614153,75.000000,23.614153,yes,NaN,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107791724696498071933228039119120966041628715515577584130136247446007e-08,2.9834555470107791724696498071994731788491203878271025995398127676131094640315383e-08 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,quadrant_boundaries,4315,10322096095657499369,106.462869,100.252704,100.193377,75.000000,25.193377,yes,NaN,yes,"below random k*pi/2, exponent 35, quadrant 3, offset bits 64 [-59550109601.544846,-4.5998843808876405e-07,0,0]",309768431.94980647490490283626492826519224603465385570189027930609881877899169922,309768431.94980647490490283626514197542933150294098619645159482100231149999767842 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,near_one,4099,10322096095657499359,108.638031,106.152026,105.321909,80.000000,25.321909,yes,NaN,yes,"[0.68327775494803278,1.8964767393937287e-17,-1.0527560708704801e-33,5.8439701459716004e-50]",0.59941459668283531301680476878329138003111794710527586828655022266332252911524847,0.5994145966828353130168047687833032015572049547180395358634521660952312280617229 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,moderate,4099,10322096095657499356,108.819079,105.953468,104.926390,80.000000,24.926390,yes,NaN,yes,"[1.7923972346284831,4.9749016978975022e-17,-2.7616252051262958e-33,1.5330099440581923e-49]",1.0618989131564895436407540480874589123331650567714808343216437342988039960189894,1.0618989131564895436407540480874313641834035736707386450972798475694004675512729 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,near_one,4099,10322096095657499359,108.593233,105.799026,104.761376,80.000000,24.761376,yes,No,yes,"[1.0818954035110564,3.0028629680352481e-17,-1.666923803453484e-33,9.2532859344489846e-50] ; [0.65275323882187208,1.8117541878467149e-17,-1.0057256071542369e-33,5.5828986275887446e-50]",1.0279228914914060327533533251293914713081558101296952640517443772205652408047172,1.0279228914914060327533533251293615731716847356252552579150219391046313458442121 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,moderate,4099,10322096095657499356,108.845358,105.968236,104.520841,80.000000,24.520841,yes,No,yes,"[0.17246963902978685,4.7869941074914726e-18,-2.6573155384409922e-34,1.4751064472356924e-50] ; [4.1006496155849739,1.1381589047856838e-16,-6.318051108876087e-33,3.5072229059163668e-49]",0.042034327541476674060107604306532306204552005274371072135952080023324484159275016,0.042034327541476674060107604306530861776728203971856534731213306751945145807618236 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,extreme_finite,8,10322096095657499351,116.769509,109.692678,109.692678,80.000000,29.692678,yes,No,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397529394834895588573302312846062338790031898128063,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,moderate,4099,10322096095657499356,107.979933,105.096123,104.081582,80.000000,24.081582,yes,NaN,yes,"[-0.03158561470140564,-8.766769172109845e-19,4.8665344932251859e-35,-2.7014693222555596e-51]",-0.031590868964255888487475098364116757608941970863589142199408956157005365361634119,-0.031590868964255888487475098364115285691415570498034097956857353613513937214419265 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,boundary,4105,10322096095657499355,109.179337,106.113879,105.956528,80.000000,25.956528,yes,NaN,yes,"[0.99999942350312121,2.7755559614626202e-17,-1.5407430672757073e-33,8.5528421416053841e-50]",1.5697225512744511775996984093823162316469799617556662501159018933971633913415644,1.5697225512744511775996984093822962914427098056014529298362837222126251898438199 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,moderate,4099,10322096095657499356,108.568133,105.119090,102.606898,80.000000,22.606898,yes,NaN,-,"[0.99447363321554472,2.7602188124463265e-17,-1.5322292392907091e-33,8.5055809023221692e-50]",0.10518045845827819297865791404046697400704440931878221279239664668822551440996449,0.10518045845827819297865791404048059412910636761979542748882605088251354897169005 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,boundary,4105,10322096095657499355,104.376193,95.825547,81.584963,80.000000,1.584963,yes,NaN,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863439534155160504671268531080086442146964698096667234494817e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,moderate,4099,10322096095657499356,107.422628,104.784889,104.123120,80.000000,24.123120,yes,NaN,-,"[-7.4260131889231964,-2.0611327058781538e-16,1.1441584934369385e-32,-6.3513555161706011e-49]",0.00059555715897935043401591506055704088046193962180369225037771615963253651893083429,0.00059555715897935043401591506055701391914881720026106459729557182617396144915233455 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,boundary,4099,10322096095657499339,106.574829,104.374273,103.645110,80.000000,23.645110,yes,NaN,-,"[689.56791103874002,1.913935429694702e-14,-1.0624475908464504e-30,5.8977688890762846e-47]",2.9890877290907641503012149009532296945711450367253589288612016829881349927374169e+299,2.9890877290907641503012149009534181687133803867116344877486422688909796071e+299 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,moderate,4099,10322096095657499356,108.902998,106.013023,105.332281,80.000000,25.332281,yes,NaN,-,"[2.5050708699436939,6.9529683953231499e-17,-3.8596728009893943e-33,2.1425488055889476e-49]",5.6767722797494772853116587667814582973149425261925085601171598811975904652626923,5.6767722797494772853116587667815694514029231846505256411149926048833678443740637 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,boundary,4099,10322096095657499339,108.889789,106.068713,105.117537,80.000000,25.117537,yes,NaN,-,"[-300.54967496719229,-8.341929229804598e-15,4.6307009503613316e-31,-2.5705554076223722e-47]",3.3537651522202066232694855987502461915822095092416702651658002446064688733175029e-91,3.3537651522202066232694855987503223996548021083914718227771648387284160913978918e-91 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,moderate,4099,10322096095657499356,108.703910,105.111574,104.102752,80.000000,24.102752,yes,NaN,yes,"[0.34499201425549764,9.5754519384565927e-18,-5.3154436066330483e-34,2.9506639390902969e-50]",0.41197864392194338236442692612392088638530541488783931021803297713515523703620147,0.41197864392194338236442692612390197063088901255454253734406676554091755929509722 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,cancellation,4098,10322096095657499336,134.532978,106.243436,104.431991,80.000000,24.431991,yes,NaN,yes,"[5.2823021564447655e-10,1.4661333692780236e-26,-8.1386751187185946e-43,4.5178722533726315e-59]",5.2823021578399014295181730840717304111038933843651099389423600846862121746910786e-10,5.2823021578399014295181730840715373648809557706009947616651919887543783634460306e-10 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,near_one,4099,10322096095657499359,107.587097,104.625423,103.727726,80.000000,23.727726,yes,NaN,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.16836588841698423133590420499408908570076543035915070334582452268043853416124023,0.16836588841698423133590420499409911099841188934514465011564788537156738257109514 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,wide_exponent,4096,10322096095657499357,108.459773,105.569923,104.766295,80.000000,24.766295,yes,NaN,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-282.39686865150220367499305723086940567546238559138028340316645126151229305833112,-282.39686865150220367499305723087759150499758429977321630947871340522978294577768 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,extreme_finite,4096,10322096095657499354,109.176760,105.259872,105.032438,80.000000,25.032438,yes,NaN,-,"[7.8173980412642063e+300,2.1697638245177804e+284,1.2044608779891888e+268,6.6861009950191438e+251]",692.83187966610744796102335261136963360047942862056461746020352698849364969646558,692.8318796661074479610233526113529337163936151304127833135311352796511576817801 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,near_one,4099,10322096095657499359,107.303954,104.550799,103.716432,80.000000,23.716432,yes,NaN,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.24290063227404771615686474809384021893054758987931141292077052724202035349776452,0.24290063227404771615686474809385479604744883847615479262644004599544797468667503 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,wide_exponent,4096,10322096095657499357,107.967820,105.222704,104.386734,80.000000,24.386734,yes,NaN,-,"[2.2828060842783888e+123,6.336059688800657e+106,3.5172196759528967e+90,1.952449133453769e+74]",409.78796398443927791610862116022677480269364161366471002376221655083554651355371,409.78796398443927791610862116024222810248381363533512220222949171648044838642357 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,extreme_finite,4096,10322096095657499354,111.086264,105.070160,104.606169,80.000000,24.606169,yes,NaN,-,"[8.4825748870998104e+300,2.3543874869413368e+284,1.3069475984458161e+268,7.2550165788654925e+251]",999.66293072781110639078474847446915088682993473501091851417255096379221868119203,999.66293072781110639078474847443677221631807677679365605314190636576738889243849 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,near_one,4099,10322096095657499359,107.290148,104.469291,103.762278,80.000000,23.762278,yes,NaN,-,"[0.75767388015401582,2.1029674672601745e-17,1.1673814510949479e-33,6.4802688276296867e-50]",-0.12051768424391546599899037931433572311869461807102196510180994458742362307468454,-0.12051768424391546599899037931434272948211001876788467720396858894260414574766305 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,wide_exponent,4096,10322096095657499357,107.892624,105.170494,104.368159,80.000000,24.368159,yes,NaN,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-122.64340176210480714781256202313334304453302289297190638109238264297218279352819,-122.64340176210480714781256202313802791680273253425717918726194907203719295819875 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,extreme_finite,4096,10322096095657499354,107.326534,105.011900,104.460171,80.000000,24.460171,yes,NaN,-,"[1.574269563896497e-151,4.3694757920112377e-168,2.4255463149165589e-184,1.3464486830575322e-200]",-150.80292090089107415382716149653340039225497975448655319083077208652809986233478,-150.80292090089107415382716149652799577485650407769540271244758516976318786368256 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,moderate,4099,10322096095657499356,108.140237,105.150365,103.619384,80.000000,23.619384,yes,NaN,yes,"[0.016967775842366306,4.7095038542183959e-19,-2.6142998067570899e-35,1.4512279193674093e-51]",0.016825431060362116060527975223933686830025480890723928219206553105394405175920802,0.016825431060362116060527975223934766829053970731436945963748330916850378472668862 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,cancellation,4098,10322096095657499336,134.607455,106.537373,104.621883,80.000000,24.621883,yes,NaN,yes,"[9.5757892125536038e-15,2.657815415683552e-31,-1.4753839348477804e-47,8.1900260731503383e-64]",9.5757892125535581941894138318495891727756910760066238894863215461528382537839935e-15,9.5757892125535581941894138318498959687222096513961541169989695977230888612152571e-15 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,near_one,4099,10322096095657499359,108.254105,105.091738,103.817818,80.000000,23.817818,yes,No,yes,"[0.50824794006286333,1.4106714131902435e-17,7.8307994155215805e-34,4.3469669061666386e-50] ; [1.4195792076051643,3.9401238039059714e-17,2.1872080834850324e-33,1.2141443869656723e-49]",0.38260537918836910980295595469486016694478510077047130768040772007699407142311543,0.38260537918836910980295595469483876398615466016654421485472691554230336671157279 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,moderate,4099,10322096095657499356,106.001122,102.267431,101.314349,80.000000,21.314349,yes,No,yes,"[6.7554035072711907,1.875001128601503e-16,1.0408347120857714e-32,5.7777933109335954e-49] ; [7.5615146099912893,2.09874190526296e-16,1.1650357929843036e-32,6.4672478094180065e-49]",1876810.3436059515909373438747938277987921279160005681718725867312969057820737362,1876810.3436059515909373438747932324627118494928000187634317695110360784386875593 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,moderate,4099,10322096095657499356,106.519662,103.850741,103.190083,90.000000,13.190083,yes,Both,no,"[0.71581135775056381,1.9867756266571774e-17,-1.1028820227394361e-33,6.1222250754524372e-50]",0.096291975196169784525310139181526871816045133452422261028615229900944061380840822,0.096291975196169784525310139181535194812644791471494678467075788752285130394604154 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,wide_exponent,4096,10322096095657499357,106.463253,103.779117,103.294727,90.000000,13.294727,yes,Both,no,"[-4.2985314788901945e+20,-11930.821549849798,6.62293639366862e-13,-3.6764682374394009e-29]",-2.7116946263909823534882310466348560028692459166343819479015128601692309145311966e+144,-2.7116946263909823534882310466350739893700446173843466311067792915601894946997725e+144 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,No,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,No,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144,572114432512329142864001791218144 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,quotient_reduction,2,10322096095657499335,inf,inf,inf,90.000000,inf,yes,No,yes,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,0,0] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,0,0]",134.96799785736229470766307175341820151552670393203375029736457157980566989863291,134.96799785736229470766307175341820151552670393203375029736457157980566989863291 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,moderate,4099,10322096095657499356,137.991491,inf,103.120938,90.000000,13.120938,yes,No,yes,"[4.651496856054143,1.2910497271407093e-16,7.1667656650382064e-33,3.9783541267092195e-49] ; [1.1968567583256404,3.3219448256783813e-17,1.8440498160012704e-33,1.0236532821401969e-49]",-0.13593017724841871918057204650149481280191019956683356060646777679554175755072265,-0.13593017724841871918057204650150713875355427787629311886530032033038040140127123 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,near_one,4099,10322096095657499359,107.411772,104.726423,103.815855,80.000000,23.815855,yes,Both,yes,"[0.51829726641315743,1.4385638969304155e-17,-7.9856338038331893e-34,4.4329172576202887e-50]",0.54181616064164601141836335700755281177762270906400557918307925851265915984100729,0.54181616064164601141836335700752246129643265188541540400851198947696500079557021 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,moderate,4099,10322096095657499356,107.428545,104.869846,103.568829,80.000000,23.568829,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50]",0.12683416188096790784216939618227372193425686465939287968000771713444896349187729,0.12683416188096790784216939618228215357757794097427308352934774394732010797034323 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,near_one,4099,10322096095657499359,108.151971,105.591524,104.831618,80.000000,24.831618,yes,Both,-,"[1.4994043079684287,4.1616829648217466e-17,-2.3101981243676942e-33,1.2824175745594325e-49]",2.3511416377389521966137617451012654144360692751585280356211248541098424169604186,2.3511416377389521966137617451013305498775090885888924794020061506206886998298218 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,moderate,4099,10322096095657499356,107.662138,105.118172,104.370708,80.000000,24.370708,yes,Both,-,"[-7.2839693641636938,-2.0217076246896986e-16,1.122273176995369e-32,-6.2298676050974111e-49]",728.37982867708396528583195554001745260585065072868172597435332260573659368674271,728.37982867708396528583195554004522697642161075015288462613983940694317570296734 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,near_one,4099,10322096095657499359,108.508993,105.293208,103.771823,80.000000,23.771823,yes,NaN,yes,"[0.51172914905977851,1.4203337091450122e-17,-7.884435932720214e-34,4.3767411543439516e-50]",0.47129137278430720759814686288642179705346521613436667069278209179356009528305549,0.47129137278430720759814686288639457893398171528583227402623085761363208890619784 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,moderate,4099,10322096095657499356,109.925995,105.123457,103.815933,80.000000,23.815933,yes,NaN,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.48322034922123225518708897646637636069385959299582733007677741617069688828678409,0.48322034922123225518708897646634929399270770971586954580993858000068003447759588 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,near_one,4099,10322096095657499359,107.942783,105.155677,104.205601,80.000000,24.205601,yes,NaN,yes,"[0.54780977077077553,1.5204775515608602e-17,-8.4403459308427531e-34,4.6853331941114368e-50]",0.52356044719022625228591770335188992100790509674337745785256442894450845670917261,0.52356044719022625228591770335191230591271180851991336042503192896063029229750644 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,moderate,4099,10322096095657499356,108.220931,105.311170,103.818628,80.000000,23.818628,yes,NaN,yes,"[-0.065200541635407561,-1.8096785635415158e-18,1.0045734042071851e-34,-5.5765026163844551e-51]",-0.065154433999027981604796867967127986881415212588611420145090880769980952458286794,-0.065154433999027981604796867967124344186568215933203026966926467120453192197675953 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,moderate,4099,10322096095657499387,108.351907,105.741626,104.602282,80.000000,24.602282,yes,NaN,-,"[1.0163605766345611,2.8209672837524767e-17,-1.5659514150681434e-33,8.6927765822649907e-50]",0.18064417420571660663002643085721230147927409837472224057688179881691649397712496,0.18064417420571660663002643085721816825671862302878034638011489993285710967947058 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,boundary,4101,10322096095657499355,107.711288,104.331717,103.672888,80.000000,23.672888,yes,NaN,-,"[1.0000006976642144,2.7755594979700771e-17,-1.54074503043171e-33,8.5528530393103596e-50]",0.0011812401392645466366367223496664025691107131134376936381879814208025359246329034,0.0011812401392645466366367223496664756307232078155433668789257650353131882010275132 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,moderate,4099,10322096095657499356,107.718351,104.542010,103.139045,80.000000,23.139045,yes,NaN,yes,"[-0.28874902442031025,-8.0143953812370009e-18,4.4488831403494138e-34,-2.4696262481412955e-50]",-0.29720096062669683272865803517211421035379945494633700815507025452637257512122915,-0.29720096062669683272865803517208759673932197508207544978047397151679963698000212 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,boundary,4105,10322096095657499355,108.512745,106.655151,106.203619,80.000000,26.203619,yes,NaN,yes,"[-0.99899927667986499,-2.7727799963846583e-17,1.539202097103153e-33,-8.544288038776232e-50]",-3.799839456997147855581613541852042024176399900088711456868967222127997374059305,-3.799839456997147855581613541852082695691985906489816947756475473707459623001287 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,near_one,4099,10322096095657499359,107.766481,104.260004,103.477540,80.000000,23.477540,yes,Both,yes,"[0.63773432238017391,1.7700683207504784e-17,-9.8258530242838391e-34,5.4544441320713228e-50]",0.63288603898704082304852473006912003275150944031003931863308835424966614091601969,0.6328860389870408230485247300690752116994000610050783793434311866968213898036298 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,moderate,4099,10322096095657499356,114.031302,105.136563,103.642929,80.000000,23.642929,yes,Both,yes,"[0.57618201352237719,1.5992263444685661e-17,-8.8774895460806198e-34,4.9279966474639169e-50]",0.58483862789646320066419155791433430439304208383200808363911138388832600121247651,0.58483862789646320066419155791429737215979664256706430739228534678145335856964206 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,near_one,4099,10322096095657499359,105.308687,102.381484,101.601777,80.000000,21.601777,yes,Both,-,"[0.9902100102210416,2.74838488140428e-17,-1.5256600879333559e-33,8.4691147868762635e-50]",0.16140301992014431339678047519482652144140492984788687432496615166421793929885098,0.16140301992014431339678047519478457172356343218546211428730930584097639007690213 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,moderate,4099,10322096095657499356,109.069920,100.123363,99.167646,80.000000,19.167646,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804815742671822427612167381748211215236610271972494957,0.0048523201680211414554273497804747585214492493110494604164051752716872765694644792 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,moderate,4099,10322096095657499371,107.300170,103.199673,102.168212,80.000000,22.168212,yes,NaN,-,"[16.10862066659595,4.4710403897518653e-16,-2.4819259923657773e-32,1.3777456910700632e-48]",28.197381657001775717891747205953291356104893832451631814899496025761393980246794,28.197381657001775717891747205948342415185062324244223614602442709080412981510555 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,moderate,4099,10322096095657499368,105.565044,98.349598,97.317514,80.000000,17.317514,yes,Both,-,"[16.916625286240897,4.6953067229351934e-16,-2.6064188157399712e-32,1.4468530905253747e-48]",16565261246416.8279913958728258930306644070018506909036659635603427886962890625,16565261246416.827991395872825976920133201596664513013387683984998603514086978856 diff --git a/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f128_fastmath_benchmark.csv b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f128_fastmath_benchmark.csv new file mode 100644 index 0000000..39d2914 --- /dev/null +++ b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f128_fastmath_benchmark.csv @@ -0,0 +1,86 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,81920,0.926152,0.928186|0.924999|0.926565|0.925898|0.926152|0.926152|0.925073,123863040,114715300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,81920,0.923213,0.929914|0.926725|0.923188|0.923088|0.923213|0.923387|0.918604,56197120,51927100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,81920,2.028785,2.029192|2.026535|2.028785|2.026607|2.032231|2.026391|2.038167,29245440,59359500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,81920,2.490718,2.498337|2.493539|2.488698|2.490718|2.494823|2.481037|2.488719,33259520,82844100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,81920,7.590419,7.590419|7.587019|7.595738,3440640,26118100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,81920,0.812795,0.813331|0.814666|0.812795|0.812065|0.813946|0.810790|0.812393,141066240,114666400.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,81920,0.812937,0.812545|0.812417|0.812937|0.818546|0.814085|0.811629|0.812968,135905280,110571100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,81920,1.230516,1.228288|1.231346|1.231097|1.228300|1.238824|1.230315|1.230516,59064320,72722400.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,8192,32.824326,32.909012|32.824326|32.818604,786432,25834800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,81920,1.031455,1.011833|1.027235|1.035247|1.020625|1.032001|1.039753|1.031455,53903360,55429200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,81920,0.974309,0.965254|0.981901|0.974309|0.990098|0.964503|0.968890|0.982559,52183040,50897200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,81920,3.088129,3.223877|3.113701|3.098551|3.088129|3.079208|3.066531|3.066876,22364160,69446700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,81920,0.385447,0.383623|0.384119|0.385447|0.387151|0.385903|0.385367|0.385648,104366080,40214600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,81920,0.761136,0.761136|0.840729|0.840370|0.758870|0.745004|0.825243|0.742650,87736320,69111200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,81920,1.514958,1.564734|1.482784|1.471928|1.458184|1.553857|1.557628|1.514958,64225280,97292800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,81920,2.298459,2.311264|2.288918|2.297637|2.306755|2.290537|2.302196|2.298459,28098560,64609700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,81920,8.782349,8.766590|8.746948|8.792392|8.777743|8.849321|8.818970|8.782349,12615680,110899600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,81920,10.331055,10.345886|10.323853|10.293030|10.307678|10.433350|10.335083|10.331055,11468800,118570900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,8192,6.760378,6.784174|6.737509|6.760378,3883008,26251800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,8192,6.273768,6.273768|6.267377|6.304357,4177920,26245000.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,8192,93.270597,93.270597|93.084162|93.515847,270336,25219700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,8192,140.171814,141.932678|140.138245|140.171814,196608,27672100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,4096,20.511512,20.504360|20.520143|20.511512,1216512,24953100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,4096,22.835104,22.950316|22.813707|22.835104,1093632,25007400.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,4096,22.600911,22.600911|22.693414|22.566189,1105920,25016100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,81920,6.810724,6.807188|6.810724|6.836990|6.810176|6.813881|6.807525|6.836779,16629760,113375200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,81920,2.904016,2.908991|2.914577|2.905958|2.810225|2.904016|2.899669|2.902758,37847040,109465500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,81920,3.019962,3.022537|3.016224|3.019962|3.020058|3.019066|3.018074|3.023567,36700160,110831800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,81920,3.009780,3.030550|3.019637|3.054545|2.999377|3.006665|3.007448|3.009780,38420480,115964000.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,81920,3.496782,3.506192|3.497203|3.496782|3.496005|3.483287|3.472590|3.506303,31539200,110199600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,81920,1.845929,1.848122|1.841860|1.853796|1.841159|1.845929|1.840888|1.858317,30965760,57198500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,81920,1.983617,1.979305|1.987357|1.981747|1.986941|1.990785|1.982526|1.983617,26951680,53488600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f128,bl::nextafter,81920,5.917627,5.940283|5.917187|5.886816|5.914404|5.917627|5.923389|5.922803,14336000,84833300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f128,bl::nexttoward,81920,5.904433,5.903033|5.913158|5.904433|6.033756|5.914953|5.901669|5.901525,19496960,115512600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,81920,1.115677,1.116966|1.113076|1.117708|1.114183|1.117012|1.112985|1.115677,61358080,68437100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,81920,1.114032,1.127515|1.113897|1.115678|1.112990|1.111960|1.114032|1.114043,62504960,69738700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,81920,2.152808,2.176848|2.155781|2.152808|2.155762|2.145209|2.146350|2.150682,35553280,76609400.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,81920,2.170292,2.194096|2.171414|2.165626|2.170292|2.167378|2.166551|2.170568,35553280,77231500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,81920,2.102405,2.139578|2.102405|2.100102|2.109257|2.098054|2.098743|2.103409,35553280,74923700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,81920,2.173572,2.184198|2.170230|2.175373|2.173572|2.166828|2.172071|2.179455,34979840,76064800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,81920,4.944255,4.946007|4.937212|4.941657|4.936054|4.944255|4.946884|4.944599,22364160,110532200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,2048,18.259215,18.259215|18.298444|18.239391,1437696,26260500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,8192,11.565531,11.726327|11.565531|11.433919,2138112,24749200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,2048,107.149465,107.149465|107.152035|106.527549,233472,24968200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,2048,106.911058,107.332983|106.366436|106.911058,239616,25607800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,fltx,fltx,fltx bl::f128,bl::sincos,2048,118.104677,118.653663|118.104677|116.832506,227328,26793700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,2048,116.382496,117.542494|116.382496|116.057855,227328,26520300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,2048,142.117513,142.254232|141.962891|142.117513,184320,26194000.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,2048,148.882185,150.455148|148.882185|148.390416,172032,25674500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,2048,196.608887,196.230469|196.608887|196.667480,122880,24146200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,2048,202.055664,202.055664|201.962891|202.836914,122880,24856800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,2048,121.788025,121.788025|121.806335|121.701050,196608,23940000.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,2048,115.408573,115.628959|115.408573|115.110325,227328,26229700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,2048,121.780396,121.780396|122.755432|121.519470,196608,23989800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,2048,144.369612,144.534617|144.369612|144.081695,178176,25715900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,2048,148.693427,148.317955|148.693427|149.153085,178176,26498600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,2048,148.437500,148.152950|148.486328|148.437500,178176,26434000.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,2048,152.109712,152.109712|152.771417|151.919450,178176,27130300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,2048,241.251149,241.251149|240.113741|242.078355,104448,25187400.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,8192,26.582746,26.614603|26.582746|26.503251,1007616,26769200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,fltx,fltx,fltx bl::f128,bl::product_sum,8192,7.539445,7.534802|7.547009|7.536047|7.544711|7.548732|7.527813|7.539445,14622720,110252300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,2048,140.209961,140.118815|141.246745|140.209961,184320,25901600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,2048,139.153856,139.153856|139.785471|138.879788,190464,26526500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,2048,146.486119,146.486119|147.748675|145.117188,172032,25194200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,2048,142.642107,142.394599|142.770070|142.642107,178176,25408300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,2048,165.884165,166.199669|165.884165|165.762094,159744,26509300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,2048,163.069661,162.507234|163.093171|163.069661,165888,27021500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,256,814.523237,814.523237|815.374599|812.209535,29952,24382000.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,256,813.301282,813.301282|812.409856|815.484776,29952,24372900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,256,657.828125,656.492188|657.828125|658.007812,38400,25245800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,256,593.503289,593.503289|593.256579|594.209156,43776,25987900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,4099,254.208343,254.490255|254.208343|253.953539,110673,28135000.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,4099,219.817842,220.978016|219.161855|219.817842,110673,24346500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,4099,282.757990,282.757990|283.538668|282.257868,98376,27825800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,mt19937_64,fltx,fltx,fltx bl::f128,bl::mt19937_64,64,1.738011,1.750199|1.738011|1.731860,10436928,18160500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,uniform_real,fltx,fltx,fltx bl::f128,bl::uniform_real,64,5.827391,5.827391|5.841717|5.824937,4523328,26377100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,normal,fltx,fltx,fltx bl::f128,bl::normal,64,40.864702,40.864702|40.920772|40.793679,642048,26233900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f128,same workload,64,20.297970,20.318727|20.252537|20.297970,1300800,26392900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f128,same workload,64,233.701087,233.586957|233.869565|233.701087,110400,25802600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f128,same workload,64,15.092775,15.092775|15.037646|15.246998,1746816,26422000.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f128,same workload,64,49.691219,49.691219|49.590358|49.805603,532416,26458800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f128,same workload,64,98.520878,98.984458|98.520878|98.472519,179904,17749200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,fltx,fltx,fltx bl::f128,same workload,8,30.129882,30.129882|30.082297|30.534521,876336,26508200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f128,same workload,8,965.639013,964.439462|974.372197|965.639013,26760,25907700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,fltx,fltx,fltx bl::f128,same workload,8,551.587820,551.711971|550.143753|551.587820,45912,25304300.000000, diff --git a/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f256_accuracy.csv b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f256_accuracy.csv new file mode 100644 index 0000000..913afbd --- /dev/null +++ b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f256_accuracy.csv @@ -0,0 +1,452 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,moderate,4097,10322096095657499311,219.944958,215.547580,215.029639,212.000000,3.029639,yes,Both,yes,-6.32659778225233051069632927545029475138801079375645295548611539482289480950893866e-02,-0.063265977822523305106963292754502947513880107937564529554861153949406008699572901,-0.063265977822523305106963292754502947513880107937564529554861153948228948095089387 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,qdpp,qdreal,qdpp qd_real,qdpp read,moderate,4097,10322096095657499311,215.900782,213.359466,212.624295,,,,NaN,yes,-4.63882622312234493417843178551748957461733884891010882745196058285158589332107375e-20,-4.638826223122344934178431785517489574617338848910108827451960582394374055047182e-20,-4.6388262231223449341784317855174895746173388489101088274519605828515858933210737e-20 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,moderate,4097,10322096095657499311,215.940112,214.179279,214.005374,,,,Both,yes,3.27924571850188479709697729061957092921603976290473696084676388411920809973612135e+04,32792.457185018847970969772906195709292160397629047369608467638839951179746222626,32792.457185018847970969772906195709292160397629047369608467638841192080997361213 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,moderate,4097,10322096095657499311,238.934823,237.169709,237.016125,,,,No,no,-5.50310983261151208909435524852066623206545235447780617289527732284019451304374918e+11,-550310983261.15120890943552485206662320654523544778061728952773228401944884035039,-550310983261.15120890943552485206662320654523544778061728952773228401945130437492 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,wide_exponent,4098,10322096095657499308,219.514079,212.275332,212.017147,212.000000,0.017147,yes,Both,yes,2.47163553801407265315232159817868248210487207087397698019878061850401032407603178e-277,2.4716355380140726531523215981786824821048720708495655738821672043746801610949361e-277,2.4716355380140726531523215981786824821048720708739769801987806185040103240760318e-277 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,qdpp,qdreal,qdpp qd_real,qdpp read,wide_exponent,4098,10322096095657499308,185.928461,0.000000,0.000000,,,,NaN,yes,5.95931860969641614490760034996604418110933850056329521007406471645258405470130332e-279,nan,5.9593186096964161449076003499660441811093385005632952100740647164525840547013033e-279 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,wide_exponent,4098,10322096095657499308,215.965809,214.158596,214.010809,,,,Both,yes,4.67754409985637411064587241203832249167095915858300940438608874596758932966859234e-10,4.6775440998563741106458724120383224916709591585830094043860887461439270142288485e-10,4.6775440998563741106458724120383224916709591585830094043860887459675893296685923e-10 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,wide_exponent,4098,10322096095657499308,238.948816,237.180769,237.050336,,,,No,no,-9.82792416239779920528610383546388843899472112754392449895974148140668994861206983e-209,-9.8279241623977992052861038354638884389947211275439244989597414814066899056386218e-209,-9.8279241623977992052861038354638884389947211275439244989597414814066899486120698e-209 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,qdpp,qdreal,qdpp qd_real,qdpp to_string,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,,,,Both,no,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,moderate,4099,10322096095657499356,220.421856,217.506231,217.050134,,,,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,moderate,4099,10322096095657499356,217.101379,214.109787,213.625754,,,,Both,yes,"[-1.0120359112545216,-2.8089639260556788e-17,1.5592882130242451e-33,-8.6557883806306642e-50]",-1.0120359112545216643274079497272660582288297275418200429251556668,-1.0120359112545216643274079497272660582288297275418200429251556667501762953126709 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,qdpp,qdreal,qdpp qd_real,qdpp to_string,wide_exponent,4096,10322096095657499357,217.212996,210.961812,208.712130,,,,Both,no,"[9.8542816649002571e-272,2.7351125988784467e-288,-1.5182924911086008e-304,8.428759918051666e-321]",9.85428166490025732860398154818749194460276526114239480670541674162e-272,9.8542816649002573286039815481874919446027652611423923940117031119134885993969883e-272 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,wide_exponent,4096,10322096095657499357,220.211606,217.209596,216.955609,,,,Both,yes,"[-1.0005623436112949e+24,-27771183.786254175,1.5416103830298108e-09,-8.5576567112045135e-26]",-1.00056234361129493015787178625417346573290920651736114849688038987e+24,-1000562343611294930157871.7862541734657329092065173611484968803898748988958608631 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,wide_exponent,4096,10322096095657499357,216.729106,213.966069,213.645520,,,,Both,yes,"[-1.0029053037863911e+73,-2.7836213994558466e+56,1.5452202847575905e+40,-8.5776956912785892e+23]",-1.002905303786391175276514736134567164601647246691591077312663009e+73,-10029053037863911752765147361345671646016472466915910773126630089512976384 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,qdpp,qdreal,qdpp qd_real,qdpp write,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,,,,Both,no,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,qdpp,qdreal,qdpp qd_real,qdpp write,wide_exponent,4096,10322096095657499357,217.212996,210.961812,208.712130,,,,Both,no,"[9.8542816649002571e-272,2.7351125988784467e-288,-1.5182924911086008e-304,8.428759918051666e-321]",9.85428166490025732860398154818749194460276526114239480670541674162e-272,9.8542816649002573286039815481874919446027652611423923940117031119134885993969883e-272 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,qdpp,qdreal,qdpp qd_real,qdpp operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,qdpp,qdreal,qdpp qd_real,qdpp operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,qdpp,qdreal,qdpp qd_real,qdpp operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,tlfloat,tloct,TLFloat Octuple,TLFloat operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,qdpp,qdreal,qdpp qd_real,qdpp operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,qdpp,qdreal,qdpp qd_real,qdpp operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,tlfloat,tloct,TLFloat Octuple,TLFloat operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,qdpp,qdreal,qdpp qd_real,qdpp operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,general,3770,10322096095657499292,225.979394,215.583815,215.297307,190.000000,25.297307,yes,Both,no,"representative lhs [-4.4462634936433036e+21,-123408.6026048271,6.8505536024347558e-12,-3.8028211704259384e-28] ; representative rhs [-1.5864490641473432e+22,-440328.06960285309,2.4443118063091801e-11,-1.3568656233637788e-27]",-20310754135116736403992.672207680164858397009037806754206012036634323297640103087,-20310754135116736403992.672207680164858397009037806754206012036634009406784094328 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,qdpp,qdreal,qdpp qd_real,qdpp operator+,general,3770,10322096095657499292,225.979148,215.583815,215.297307,,,,NaN,no,"representative lhs [-4.4462634936433036e+21,-123408.6026048271,6.8505536024347558e-12,-3.8028211704259384e-28] ; representative rhs [-1.5864490641473432e+22,-440328.06960285309,2.4443118063091801e-11,-1.3568656233637788e-27]",-20310754135116736403992.672207680164858397009037806754206012036634323297640103087,-20310754135116736403992.672207680164858397009037806754206012036634009406784094328 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator+,general,3770,10322096095657499292,223.282430,214.179406,214.011982,,,,Both,yes,"representative lhs [1839126521648.5967,5.1046015238326211e-05,-2.8336230716478179e-21,1.5729767886262335e-37] ; representative rhs [378235839901.0448,1.0498153454914361e-05,-5.8276458408470292e-22,3.2349932959347012e-38]",2217362361549.6415410363561932405683908522995717267139530293433997786912098314276,2217362361549.6415410363561932405683908522995717267139530293433998622151070218087 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,general,3770,10322096095657499292,251.753596,237.252454,237.007687,,,,No,no,"representative lhs [62135357.136479288,1.7246026034056585e-09,-9.5734675931472475e-26,5.3143420737074274e-42] ; representative rhs [-565957625994804.25,-0.015708479683540617,8.719957913261643e-19,-4.8405490245327049e-35]",-565957563859447.12922918961932314491369166283033247612036449157122254744835860639,-565957563859447.12922918961932314491369166283033247612036449157122254744580965934 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,subnormal,326,10322096095657499292,243.500079,219.782158,216.532998,190.000000,26.532998,yes,Both,no,"broad lhs [-4.0912052790212279e-223,-1.1355375748093388e-239,6.3034998044016954e-256,-3.4991453092834664e-272] ; broad rhs [9.6732779190304605e-272,2.6848739673264345e-288,-1.4904044483712489e-304,8.2755995678408796e-321]",-4.0912052790212280311833034891221488165122802908340538768476180849661443443505261e-223,-4.0912052790212280311833034891221488165122802908340538768476180849392956046772617e-223 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,qdpp,qdreal,qdpp qd_real,qdpp operator+,subnormal,326,10322096095657499292,243.500079,219.782158,216.532998,,,,NaN,no,"broad lhs [-4.0912052790212279e-223,-1.1355375748093388e-239,6.3034998044016954e-256,-3.4991453092834664e-272] ; broad rhs [9.6732779190304605e-272,2.6848739673264345e-288,-1.4904044483712489e-304,8.2755995678408796e-321]",-4.0912052790212280311833034891221488165122802908340538768476180849661443443505261e-223,-4.0912052790212280311833034891221488165122802908340538768476180849392956046772617e-223 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator+,subnormal,326,10322096095657499292,245.391464,215.478126,214.860355,,,,Both,yes,"broad lhs [-6.9688197085765511e-265,-1.9342360237308151e-281,1.0737166843026808e-297,-5.9603249241910803e-314] ; broad rhs [7.5706271798833126e-227,2.1012711514898676e-243,-1.1664398066823332e-259,6.475041651090214e-276]",7.5706271798833128589493143999584390922823152154190751436541880413193723254995517e-227,7.5706271798833128589493143999584390922823152154190751436541880411609851505089632e-227 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,subnormal,326,10322096095657499292,268.533311,239.229805,237.927733,,,,No,no,"broad lhs [1.0442940275936825e-262,2.8984981847826123e-279,-1.6089897107899388e-295,8.931687116517412e-312] ; broad rhs [2.3634881419299421e-239,6.5599973839978789e-256,-3.6415300685976198e-272,2.0214552635109516e-288]",2.363488141929942143733794549283321928828920127322018608246875184884809475467298e-239,2.3634881419299421437337945492833219288289201273220186082468751848848094698416956e-239 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,general,3791,10322096095657499292,226.123353,215.602949,215.220788,190.000000,25.220788,yes,Both,no,"representative lhs [155.03656083289641,4.3031289873845084e-15,-2.388716439863108e-31,1.3260039954183278e-47] ; representative rhs [2246405305209.4082,6.2350272312089677e-05,-3.4611353956265177e-21,1.9213161037848301e-37]",-2246405305054.3717046423758949106196822642348296102031142477192627199056314953875,-2246405305054.3717046423758949106196822642348296102031142477192626832977015519632 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,qdpp,qdreal,qdpp qd_real,qdpp operator-,general,3791,10322096095657499292,226.121622,215.602917,214.959040,,,,NaN,no,"representative lhs [-13777.629901790066,-3.8240604854328413e-13,2.1227799992433967e-29,-1.1783796156868957e-45] ; representative rhs [7.7752724229543192e+20,21580.716166742284,-1.1979703988108816e-12,6.6500715978961103e-29]",-777527242295431957022.34606853234900270537189607974110951719324325739708729160804,-777527242295431957022.34606853234900270537189607974110951719324327258845155054311 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator-,general,3791,10322096095657499292,223.541382,214.220914,214.046715,,,,Both,yes,"extreme lhs [-4.252941070652636e+270,-1.1804282747531303e+254,6.552693247747378e+237,-3.6374754584774671e+221] ; extreme rhs [4.4779550465712955e+270,1.2428821989849669e+254,-6.8993821710492778e+237,3.8299264709936042e+221]",-8.7308961172239317176190432327170580782021961210607087161308584689659299006598005e+270,-8.7308961172239317176190432327170580782021961210607087161308584686448766840125609e+270 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,general,3791,10322096095657499292,252.005853,237.248925,237.000122,,,,No,no,"representative lhs [1.3878961076205298e-17,3.852185536169866e-34,-2.1383925386918945e-50,1.1870463160711911e-66] ; representative rhs [2.5596121212896439e-24,7.1043507779135037e-41,-3.9437069043266069e-57,2.1891971037782992e-73]",1.3878958516593177248260844131745516632854659836193439237091032443574096862512889e-17,1.3878958516593177248260844131745516632854659836193439237091032443574096799676493e-17 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,subnormal,305,10322096095657499292,243.910586,244.000000,216.728701,190.000000,26.728701,yes,Both,no,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239320146546075137762e-238,8.2656349351104667692680102118096923996066568310632957805469239319672919306477601e-238 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,qdpp,qdreal,qdpp qd_real,qdpp operator-,subnormal,305,10322096095657499292,243.910586,244.000000,216.728701,,,,NaN,no,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239320146546075137762e-238,8.2656349351104667692680102118096923996066568310632957805469239319672919306477601e-238 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator-,subnormal,305,10322096095657499292,245.904029,246.000000,216.728701,,,,Both,yes,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239322479705121395809e-238,8.2656349351104667692680102118096923996066568310632957805469239322006078352735648e-238 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,subnormal,305,10322096095657499292,268.897431,269.000000,237.716330,,,,No,no,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239319672919078689777e-238,8.2656349351104667692680102118096923996066568310632957805469239319672919306477601e-238 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,general,4000,10322096095657499292,220.010524,216.259138,215.221541,190.000000,25.221541,yes,Both,yes,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60038241930403290903625769183688852217377918301809189,-156159778640594921198000750.60038241930403290903625769183688852217632267056740194 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,qdpp,qdreal,qdpp qd_real,qdpp operator*,general,4000,10322096095657499292,220.010524,216.259138,215.221541,,,,Both,no,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60038241930403290903625769183688852217377918301809189,-156159778640594921198000750.60038241930403290903625769183688852217632267056740194 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator*,general,4000,10322096095657499292,215.959021,214.146637,214.012662,,,,Both,yes,"structured lhs [-1.1022409972597686e+20,-3059.333334608973,1.6982711540430701e-13,-9.427298686376762e-30] ; balanced-product rhs [-9.0724261072311291e-21,-2.5181040883645947e-37,1.3978285686525564e-53,-7.7595073069844723e-70]",1.000000000000000088520617930547062213152525880726620878119303628883372473544684,1.0000000000000000885206179305470622131525258807266208781193036288457221016484325 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,general,4000,10322096095657499292,238.976836,237.170485,237.006898,,,,No,no,"representative lhs [-1.0168921687957512e-16,-2.8224427483951354e-33,1.5667704624772934e-49,-8.6973232087244803e-66] ; representative rhs [-4.1345258950916926e+22,-1147561.4611599329,6.370245781761224e-11,-3.5361967697162955e-27]",4204367.0044019860517179602758477836413196189733707121724545268060512669316657157,4204367.0044019860517179602758477836413196189733707121724545268060512669127198166 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,subnormal,100,10322096095657499292,221.469015,215.608028,215.608028,190.000000,25.608028,yes,Both,yes,"extreme lhs [-5.3809439414843993e+270,-1.4935119645133053e+254,8.2906568527791063e+237,-4.6022390636108503e+221] ; extreme rhs [-4.596668242019171e-261,-1.2758317297132313e-277,7.0822888093748442e-294,-3.931460051606543e-310]",24734414127.906804259564005392277744744307358869933187588284984254854603209456978,24734414127.906804259564005392277744744307358869933187588284984255162792737796103 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,qdpp,qdreal,qdpp qd_real,qdpp operator*,subnormal,100,10322096095657499292,221.469015,215.608028,215.608028,,,,Both,no,"extreme lhs [-5.3809439414843993e+270,-1.4935119645133053e+254,8.2906568527791063e+237,-4.6022390636108503e+221] ; extreme rhs [-4.596668242019171e-261,-1.2758317297132313e-277,7.0822888093748442e-294,-3.931460051606543e-310]",24734414127.906804259564005392277744744307358869933187588284984254854603209456978,24734414127.906804259564005392277744744307358869933187588284984255162792737796103 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator*,subnormal,100,10322096095657499292,217.348488,214.292349,214.292349,,,,Both,yes,"extreme lhs [-5.9542134868631228e-272,-1.652626226662269e-288,9.173918439699219e-305,-5.0938168086232519e-321] ; extreme rhs [4.2949102582549815e+270,1.1920770643533644e+254,-6.6173570198633482e+237,3.6733710628085992e+221]",-0.25572812584568589864154296747923216874038792137305578267444519266559147574620585,-0.25572812584568589864154296747923216874038792137305578267444519265766000955097554 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,subnormal,100,10322096095657499292,240.223553,237.076391,237.076391,,,,No,no,"extreme lhs [-8.6746891312209087e-272,-2.4077099012367622e-288,1.3365474844855075e-304,-7.4208660005355231e-321] ; extreme rhs [-2.6248964316441233e+255,-7.2855511391692975e+238,4.0442933108948961e+222,-2.2450337760465101e+206]",2.2770160546163824124244516741669496270247267859218074430231396140145617261766692e-16,2.2770160546163824124244516741669496270247267859218074430231396140145617163984162e-16 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,general,4045,10322096095657499292,219.218459,215.287455,214.762066,190.000000,24.762066,yes,Both,yes,"representative lhs [2268851457486.2539,6.2973278188889589e-05,-3.49571916907152e-21,1.940513954563361e-37] ; representative rhs [0.00093095878597111432,2.5839296979055357e-20,-1.4343691223137255e-36,7.9623481270203769e-53]",2437112675315200.8552398842775006307979109182413214802574225974607596074455830965,2437112675315200.8552398842775006307979109182413214802574225974607050251573596225 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,qdpp,qdreal,qdpp qd_real,qdpp operator/,general,4045,10322096095657499292,219.206438,214.806774,214.013421,,,,NaN,no,"broad lhs [-4.1408453630726265e-99,-1.1493154658738865e-115,6.3799824638548856e-132,-3.5416017140382148e-148] ; broad rhs [3.6617819725500985e+81,1.0163486642706106e+65,-5.6418684406012752e+48,3.1318661223307815e+32]",-1.1308279395424801511446934119645693613341712224082609557731723080505494810403134e-180,-1.1308279395424801511446934119645693613341712224082609557731723080079957823561001e-180 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,general,4045,10322096095657499292,215.966511,214.166285,214.002285,,,,Both,yes,"structured lhs [1.421739367690595e-13,3.9461194525652748e-30,-2.1905363370795932e-46,1.2159919388519087e-62] ; near-equal divisor [1.421739367690595e-13,3.9461194525652748e-30,-2.1905363370795932e-46,1.2158435023359357e-62]",1.000000000000000000000000000000000000000000000000000010440487148873603784702549,1.0000000000000000000000000000000000000000000000000000104404871488356816123738149 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,general,4045,10322096095657499292,238.999926,237.154132,237.025300,,,,No,no,"representative lhs [-4.6265730361291875e+23,-12841319.774551351,7.1283644401406169e-10,-3.9570371646816632e-26] ; representative rhs [1547.4435613354531,4.2950186777564266e-14,-2.3842143136201403e-30,1.3235048133109718e-46]",-298981698055367349746.41814433326396950592089524800971303493694163568117583736658,-298981698055367349746.41814433326396950592089524800971303493694163568117716757507 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,subnormal,55,10322096095657499292,219.372138,215.374456,215.374456,190.000000,25.374456,yes,Both,yes,"extreme lhs [-6.5972954615428272e-272,-1.8311173304149739e-288,1.0164743105084273e-304,-5.6422296755070355e-321] ; extreme rhs [6.3421732060336743e-272,1.760306679874833e-288,-9.7716650319925213e-305,5.4248407913368871e-321]",-1.0402263147380523166730438190618890627910384611501752613620202130066222580107113,-1.040226314738052316673043819061889062791038461150175261362020212991383268138225 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,qdpp,qdreal,qdpp qd_real,qdpp operator/,subnormal,55,10322096095657499292,179.057908,172.169377,172.169377,,,,NaN,no,"extreme lhs [8.1288457198866801e-272,2.256207920460962e-288,-1.2524469908187019e-304,6.9515036369863389e-321] ; extreme rhs [-8.4431682373195252e-272,-2.3434499444639837e-288,1.3008760427002295e-304,-7.2232397421990245e-321]",-0.96277197035545108689276081728873001290166886469504048045287321788626803206842898,-0.96277197035545108689276081728873001290166886469504062346622680022515994107671364 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,subnormal,55,10322096095657499292,218.186470,214.206957,214.206957,,,,Both,yes,"extreme lhs [-6.5972954615428272e-272,-1.8311173304149739e-288,1.0164743105084273e-304,-5.6422296755070355e-321] ; extreme rhs [6.3421732060336743e-272,1.760306679874833e-288,-9.7716650319925213e-305,5.4248407913368871e-321]",-1.0402263147380523166730438190618890627910384611501752613620202130256133935022309,-1.040226314738052316673043819061889062791038461150175261362020212991383268138225 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,subnormal,55,10322096095657499292,241.440467,237.221787,237.221787,,,,No,no,"extreme lhs [8.1717524039455344e-272,2.2681169175990763e-288,-1.2590578122301667e-304,6.9910288886536386e-321] ; extreme rhs [8.1073110278598673e-272,2.2502308427318672e-288,-1.2491290461612942e-304,6.931741011152689e-321]",1.0079485511119804779080183242564760679498572504876789996787264200987624042534109,1.0079485511119804779080183242564760679498572504876789996787264200987624081669073 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,moderate,4099,10322096095657499356,219.883649,215.654212,215.160161,190.000000,25.160161,yes,Both,no,"[1.2843679126351581,3.5648370717432602e-17,-1.9788820980433443e-33,1.0985002341331286e-49] ; [-2.3308777059725987,-6.4694852418906121e-17,3.5912857365098039e-33,-1.9935640563405487e-49] ; [5.2042205184851724,1.4444613612122271e-16,-8.0183713069960479e-33,4.451090222510361e-49]",2.2105159846573199203800006655584861882250236763069688164874765011598446438714347,2.2105159846573199203800006655584861882250236763069688164874765011222755061934085 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,moderate,4099,10322096095657499356,215.978389,214.164686,214.038759,,,,Both,yes,"[4.9845060765167126,1.3834783531332142e-16,-7.6798476085949372e-33,4.2631718203372733e-49] ; [-1.8344589332917707,-5.0916463636745698e-17,2.8264315131002303e-33,-1.5689846716849977e-49] ; [1.1247730073775273,3.1218722256685296e-17,-1.7329872124374921e-33,9.6200115231453559e-50]",-8.0190986927356709087174259178039082808363580425011987458457247106202380902722945,-8.0190986927356709087174259178039082808363580425011987458457247103237283321300853 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,moderate,4099,10322096095657499356,238.995329,237.157442,237.018361,,,,No,no,"[-0.84550812208603965,-2.3467564616187476e-17,1.302711528438498e-33,-7.2315016665852497e-50] ; [4.7189100901806977,1.3097606583136461e-16,-7.2706321980400619e-33,4.0360116349225438e-49] ; [4.997053192184298,1.3869608773099112e-16,-7.6991795012188515e-33,4.2739031764875987e-49]",1.0071763835427521666104437874229887686470986916744027421719680838786588428377016,1.0071763835427521666104437874229887686470986916744027421719680838786588383350389 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,Both,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,cancellation,4098,10322096095657499352,inf,inf,inf,,,,Both,yes,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,wide_exponent,4096,10322096095657499357,225.262959,215.958051,215.096656,190.000000,25.096656,yes,Both,no,"[5.0695695241027842e+79,1.4070882026492271e+63,-7.8109086012980007e+46,4.3359252862018586e+30] ; [-1.285263546577847e-53,-3.5673229553052827e-70,1.9802620406268915e-86,-1.0992662561475861e-102] ; [-9312.4534885580761,-2.5847250696870095e-13,1.4348106423461901e-29,-7.9647990555497543e-46]",-651573290617131278652235925.796582770520137295580825262259286558273807300279549,-651573290617131278652235925.79658277052013729558082526225928655828537955033923283 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,wide_exponent,4096,10322096095657499357,222.795239,214.207199,214.017731,,,,Both,yes,"[-7.3362225804227161e+81,-2.0362108056400696e+65,1.1303240597060724e+49,-6.2745589818673089e+32] ; [4.697530874614766e+74,1.3038267339712156e+58,-7.2376923008833117e+41,4.0177263187964394e+25] ; [1.3845075017784626e-80,3.84278026560176e-97,-2.1331715647231242e-113,1.1841480933156424e-129]",-3.4462132074581718803444481231787333071891997137766508509269936657892888506715951e+156,-3.4462132074581718803444481231787333071891997137766508509269936656599927318479792e+156 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,wide_exponent,4096,10322096095657499357,245.186928,237.226957,237.054841,,,,No,no,"[-7.7238642392071697e+37,-2.1438029793616669e+21,119004.97139736659,-6.606102964510729e-12] ; [7.7217688161659949e+38,2.1432213826350063e+22,-1189726.8629351733,6.6043107812284359e-11] ; [8.411674119728479e-53,2.3347085708415258e-69,-1.2960236055689777e-85,7.1943762368019562e-102]",-59641894022609612945325167753430528720789835656430133782624366680451826843648,-59641894022609612945325167753430528720789835656430133782624366680451826583671.804 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,qdpp,qdreal,qdpp qd_real,qdpp abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246,3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,qdpp,qdreal,qdpp qd_real,qdpp abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,qdpp,qdreal,qdpp qd_real,qdpp fabs,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fabs,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0]",8,8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,moderate,4099,10322096095657499356,220.145544,216.285104,215.251190,190.000000,25.251190,yes,Both,yes,"[-0.36144099270550889,-1.0032002803625731e-17,5.5688802478447044e-34,-3.0913495362687196e-50]",0.13063959120794373790137808981865083109327726640612337325102002398854548322121324,0.13063959120794373790137808981865083109327726640612337325102002399063002164712949 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,qdpp,qdreal,qdpp qd_real,qdpp sqr,moderate,4099,10322096095657499356,216.750989,214.989743,214.720760,,,,Both,yes,"[-3.0351966116712088,-8.4243629063540904e-17,4.6764608332162063e-33,-2.5959572453971881e-49]",9.212418471500387180002010799680797528619143723193698328246365177142909479711308,9.2124184715003871800020107996807975286191437231936983282463651773552262335669417 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,wide_exponent,4096,10322096095657499357,220.095837,216.278909,215.290405,190.000000,25.290405,yes,Both,yes,"[6.7502995556670522e-41,1.8735844974546312e-57,-1.0400483238274423e-73,5.7734279791801363e-90]",4.5566544091238805246854811871109707929263286794390254922251627617554550230494986e-81,4.5566544091238805246854811871109707929263286794390254922251627618262131586719535e-81 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,qdpp,qdreal,qdpp qd_real,qdpp sqr,wide_exponent,4096,10322096095657499357,216.710094,215.051659,214.774024,,,,Both,yes,"[-1.1572176183879363e+79,-3.211924111090437e+62,1.7829760507406462e+46,-9.8975053194374838e+29]",1.3391526163074474528650888471418397717788406774304758993556136673441243150413775e+158,1.3391526163074474528650888471418397717788406774304758993556136673738688113319e+158 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,near_one,4099,10322096095657499359,217.971795,215.406773,214.634335,190.000000,24.634335,yes,Both,yes,"[0.98524730223011503,2.7346105997142351e-17,1.5180138255933757e-33,8.426669504365412e-50]",1.0149735987467228735600712240168282012518927505403262882885405865459789646852313,1.0149735987467228735600712240168282012518927505403262882885405865211429570599582 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,qdpp,qdreal,qdpp qd_real,qdpp inv,near_one,4099,10322096095657499359,217.977278,215.406773,214.634335,,,,NaN,no,"[0.98524730223011503,2.7346105997142351e-17,1.5180138255933757e-33,8.426669504365412e-50]",1.0149735987467228735600712240168282012518927505403262882885405865459789646852313,1.0149735987467228735600712240168282012518927505403262882885405865211429570599582 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,wide_exponent,4096,10322096095657499357,217.877061,215.148048,214.625136,190.000000,24.625136,yes,Both,yes,"[2.2537520677334854e+105,6.2554185934856772e+88,3.4724548755780555e+72,1.9275996774193202e+56]",4.4370452913468106284563119957364553561271971862592280260566035243063949187169959e-106,4.4370452913468106284563119957364553561271971862592280260566035241971276114030617e-106 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,qdpp,qdreal,qdpp qd_real,qdpp inv,wide_exponent,4096,10322096095657499357,217.878526,215.148048,214.625136,,,,NaN,no,"[2.2537520677334854e+105,6.2554185934856772e+88,3.4724548755780555e+72,1.9275996774193202e+56]",4.4370452913468106284563119957364553561271971862592280260566035243063949187169959e-106,4.4370452913468106284563119957364553561271971862592280260566035241971276114030617e-106 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,qdpp,qdreal,qdpp qd_real,qdpp min,moderate,4099,10322096095657499356,inf,inf,inf,,,,Inf,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,qdpp,qdreal,qdpp qd_real,qdpp min,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Inf,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643637975124707203e+166,-3.1692452985045241935931724109976666181468122346931195036563377643637975124707203e+166 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,qdpp,qdreal,qdpp qd_real,qdpp max,moderate,4099,10322096095657499356,inf,inf,inf,,,,Inf,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820587966479345926073,-7.0558510431143679224555721217306640518626870807672704477968820587966479345926073 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,qdpp,qdreal,qdpp qd_real,qdpp max,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Inf,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246,3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,moderate,4099,10322096095657499356,241.301771,214.093805,214.003121,,,,No,yes,"[1.3512114356810514,3.7503651175747926e-17,-2.0818708521412835e-33,1.1556704771716239e-49] ; [-2.6574506527362001,-7.3759072536822014e-17,4.0944510302688427e-33,-2.2728769035023315e-49]",4.0086620884172515790939164253351213814054256785823302622262501699878791447368772,4.0086620884172515790939164253351213814054256785823302622262501698359500608047204 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,Both,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,tlfloat,tloct,TLFloat Octuple,tlfloat::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,qdpp,qdreal,qdpp qd_real,qdpp floor,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::floor,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,tlfloat,tloct,TLFloat Octuple,tlfloat::floor,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,qdpp,qdreal,qdpp qd_real,qdpp ceil,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ceil,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,tlfloat,tloct,TLFloat Octuple,tlfloat::ceil,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,qdpp,qdreal,qdpp qd_real,qdpp aint,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::trunc,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,tlfloat,tloct,TLFloat Octuple,tlfloat::trunc,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,qdpp,qdreal,qdpp qd_real,qdpp round,boundary,4110,10322096095657499382,229.692457,0.000000,0.000000,,,,Both,no,"just below -2.5 [-2.5,-5.5511151231257827e-17,0,0]",-4,-3 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::round,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,tlfloat,tloct,TLFloat Octuple,tlfloat::round,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,tlfloat,tloct,TLFloat Octuple,tlfloat::rint,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,moderate,4099,10322096095657499356,220.044956,215.606687,215.330917,190.000000,25.330917,yes,Both,yes,"[4.0249001329210348,1.1171341998464465e-16,-6.2013405513286293e-33,3.4424355318133533e-49]",4.0249999999999999999999999999999999999999999999999999999999999999392283664271373,4.025 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,wide_exponent,4096,10322096095657499357,229.647449,215.594292,215.067820,190.000000,25.067820,yes,Both,yes,"[3.0148718470081313e-08,8.3679503521064993e-25,-4.6451455749144106e-41,2.5785737850028193e-57]",3.0148720000000000000000000000000000000000000000000000000000000000546265902778824e-08,3.014872e-08 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,boundary,4112,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lround,boundary,4112,10322096095657499382,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,boundary,4116,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::llround,boundary,4116,10322096095657499382,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,qdpp,qdreal,qdpp qd_real,qdpp divrem,moderate,4099,10322096095657499356,inf,inf,inf,,,,NaN,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.9441489568856320775444278782693359481373129192327295522031179412033520654073927 ; 1,-0.9441489568856320775444278782693359481373129192327295522031179412033520654073927 ; 1 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,tlfloat,tloct,TLFloat Octuple,tlfloat::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0]",0 ; -8,-0 ; -8 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 ; 0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,qdpp,qdreal,qdpp qd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14,1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,tlfloat,tloct,TLFloat Octuple,tlfloat::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,qdpp,qdreal,qdpp qd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14,1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,qdpp,qdreal,qdpp qd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14,1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815,0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738111930089468594567 ; -815,0.72479240042364947229615036515952308640740981938027711987583738111930089468594567 ; -815 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815,0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,near_one,4099,10322096095657499359,217.932663,211.994703,210.121730,190.000000,20.121730,yes,Both,yes,"[0.68844842180625743,1.9108282228903967e-17,1.0607227445782445e-33,5.88819406887178e-50]",0.82972792034874748204635533162847142244462757631213868214367401578005505462467425,0.82972792034874748204635533162847142244462757631213868214367401531661654544094597 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,near_one,4099,10322096095657499359,217.589527,213.954821,212.634327,,,,NaN,no,"[0.92271144976513408,2.5610387415362759e-17,1.4216620889053044e-33,7.8918099216968261e-50]",0.96057870565879926219334849623588972708054926243562340391213612034854002041473267,0.96057870565879926219334849623588972708054926243562340391213612025451957730893959 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,near_one,4099,10322096095657499359,215.930506,214.147252,214.039856,,,,Both,yes,"[1.0547078163563617,2.927402254927385e-17,1.6250346928799925e-33,9.020754659250188e-50]",1.0269896865871447065036301993509151661723964081071594655630640292574526428023742,1.0269896865871447065036301993509151661723964081071594655630640292195081210834103 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,near_one,4099,10322096095657499359,238.936641,237.129126,237.015136,,,,No,no,"[1.004250926374979,2.7873562524066115e-17,1.5472935446273548e-33,8.5892045954958072e-50]",1.0021232091788808899186300306859360530174763231010496743360102827344110032442819,1.0021232091788808899186300306859360530174763231010496743360102827344110077343784 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,wide_exponent,4096,10322096095657499357,217.922910,211.307570,210.087010,190.000000,20.087010,yes,Both,yes,"[3.9723050169707548e-164,1.1025361226687388e-180,6.120304944338899e-197,3.3974517334661164e-213]",1.9930642280094123730625261552128791429300322769194722961440719680011680513374133e-82,1.9930642280094123730625261552128791429300322769194722961440719668608407694664803e-82 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,wide_exponent,4096,10322096095657499357,216.863728,186.950448,174.763835,,,,NaN,no,"[8.1014827670798251e+270,2.2486131754039865e+254,1.2482310604044958e+238,6.9290743165667288e+221]",2.8463103778540781766373144723494913048207803575850039003471672847143362615202286e+135,2.846310377854078176637314472349491304820780357585003970351614769472664981471086e+135 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,wide_exponent,4096,10322096095657499357,215.957082,214.207986,214.030797,,,,Both,yes,"[1.2961858591599819e-147,3.5976384625823808e-164,1.9970905277180044e-180,1.1086079430666665e-196]",3.6002581284679880325511139217386037773904401119124396309706748839432497852866192e-74,3.6002581284679880325511139217386037773904401119124396309706748840771075796334657e-74 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,wide_exponent,4096,10322096095657499357,238.979636,237.193860,237.059682,,,,No,no,"[1.3021434303237256e+30,36141740442744.586,0.0020062696194780619,1.1137033625752479e-19]",1141114994347075.2829460391518194856039517836022377655235840679242233012131762761,1141114994347075.2829460391518194856039517836022377655235840679242233012082188731 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,extreme_finite,4096,10322096095657499354,217.427345,211.612729,209.568118,190.000000,19.568118,yes,Both,yes,"[4.8277532298172217e+270,1.3399706982378861e+254,7.4383316075337441e+237,4.1291035077405081e+221]",2.1972148802102223696810058497941079031647215249309110296216736160980628789995527e+135,2.1972148802102223696810058497941079031647215249309110296216736142967757213404226e+135 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,extreme_finite,4096,10322096095657499354,163.993368,54.592035,53.599911,,,,NaN,no,"[2.1763916177226809e+307,6.0407002114922805e+290,3.3532622298283912e+274,1.8614344675806867e+258]",4.6651812587751413465079049826861912199302720105752317948976263085835518779964629e+153,4.6651812587751410047744754248043022846154236189465970833612617831419496642565065e+153 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,extreme_finite,4096,10322096095657499354,216.198711,214.402185,214.043797,,,,Both,yes,"[1.1667387299631971e+307,3.2383505043176361e+290,1.7976456458499635e+274,9.9789379306989474e+257]",3.4157557435554392146975726809832843561134137037327812181683553223146977070959883e+153,3.4157557435554392146975726809832843561134137037327812181683553224405565128983162e+153 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,extreme_finite,4096,10322096095657499354,238.983582,237.375285,237.014769,,,,No,no,"[1.1341420973881531e+307,3.1478766742924855e+290,1.747422581239991e+274,9.7001439172128056e+257]",3.3677026255121652856496237964988544939728879131737426810293064315009323411409691e+153,3.3677026255121652856496237964988544939728879131737426810293064315009323562340825e+153 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,subnormal,4100,10322096095657499350,218.342012,211.195890,209.632889,190.000000,19.632889,yes,Both,yes,"[4.425628238965193e-310,0,0,0]",2.1037177184606286876991106431236613762063141625286376505723061307058915210366628e-155,2.103717718460628687699110643123661376206314162528637650572306129056970991449237e-155 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,subnormal,4100,10322096095657499350,8.749730,0.000000,0.000000,,,,NaN,no,"denorm_min [4.9406564584124654e-324,0,0,0]",nan,2.2227587494850774834427134142705600969125245614649077934835905829686756089538688e-162 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,subnormal,4100,10322096095657499350,216.732337,214.212856,214.055628,,,,Both,yes,"[8.5994229286435167e-314,0,0,0]",2.9324772682228104087482168194097837709600668584029318334371596371749066895316448e-157,2.9324772682228104087482168194097837709600668584029318334371596370677375033086664e-157 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,subnormal,4100,10322096095657499350,239.736010,237.207953,237.054005,,,,No,no,"[8.518088594509375e-314,0,0,0]",2.9185764671341703577228289063953812719307811982170640964694179548498818196453975e-157,2.9185764671341703577228289063953812719307811982170640964694179548498818069160869e-157 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,moderate,4099,10322096095657499356,219.366145,215.645937,214.867489,190.000000,24.867489,yes,Both,yes,"[-1.2848792715143134,-3.5662563777469718e-17,1.9796699711454989e-33,-1.0989375915623761e-49]",-1.0871449203062734502700851412094476938994915993466528215032956944502419014728132,-1.0871449203062734502700851412094476938994915993466528215032956944728741702814207 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,qdpp,qdreal,qdpp qd_real,qdpp nroot,moderate,4099,10322096095657499356,217.448286,213.933191,213.007518,,,,NaN,no,"[4.9307698076638697,1.3685635423987457e-16,-7.5970537771682706e-33,4.2172120113638637e-49]",1.702047108046510717162243828279782709421211900354532191946871259424910030546838,1.7020471080465107171622438282797827094212119003545321919468712595535332836322498 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,moderate,4099,10322096095657499356,216.130545,214.270505,214.058038,,,,Both,yes,"[1.08235892126355,3.0041494882381005e-17,-1.66763796562891e-33,9.2572503309013566e-50]",1.026732006042320468680651010947841052348239066716007904979973209646575880838089,1.0267320060423204686806510109478410523482390667160079049799732096840357908630305 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,moderate,4099,10322096095657499356,239.151308,237.292046,237.089188,,,,No,no,"[-1.1692570952148476,-3.2453403720346318e-17,1.8015258018892098e-33,-1.0000477123568495e-49]",-1.0535051702378269574281216560731222434668908310525842708385576971662323213714434,-1.0535051702378269574281216560731222434668908310525842708385576971662323258555871 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,wide_exponent,4096,10322096095657499357,219.203284,215.534477,214.994538,190.000000,24.994538,yes,Both,yes,"[-7.6088562828244072e-186,-2.1118818590638597e-202,1.1723299326104384e-218,-6.5077384182068346e-235]",-1.9668585456638661019202110587595283938653583370130934674169942595500144363610602e-62,-1.9668585456638661019202110587595283938653583370130934674169942595125198730852026e-62 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,qdpp,qdreal,qdpp qd_real,qdpp nroot,wide_exponent,4096,10322096095657499357,217.013773,193.080864,175.955036,,,,NaN,no,"[4.1224543035610892e+270,1.1442109214446464e+254,-6.3516465500770637e+237,3.5258721220882492e+221]",1.6034371816028772328365310906199661077000502443653116982541080279089017265381339e+90,1.6034371816028772328365310906199661077000502443653116809834811603775103881162661e+90 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,wide_exponent,4096,10322096095657499357,215.921141,214.197213,214.065070,,,,Both,yes,"[-0.12830329361016818,-3.5611317675312609e-18,1.9768252410186431e-34,-1.097358449119536e-50]",-0.50436615390268535404089632551005127105110727672530970119929369006913042688642626,-0.50436615390268535404089632551005127105110727672530970119929369005081829876718497 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,wide_exponent,4096,10322096095657499357,238.945658,237.214089,237.018110,,,,No,no,"[-4.3275027175810356e+124,-1.2011232890466005e+108,6.6675736545651648e+91,-3.701246894841173e+75]",-351085141467799062026079474481743690346530.23735342928603100241725240364618103901,-351085141467799062026079474481743690346530.23735342928603100241725240364775086642 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,moderate,4099,10322096095657499356,219.112713,215.484839,215.004532,190.000000,25.004532,yes,Both,yes,"[-1.9786093179304824,-5.4917440537607455e-17,3.0485303469167366e-33,-1.6922742912077385e-49] ; [-3.6930721609963868,-1.0250334361850929e-16,5.6900786093166561e-33,-3.1586281419952212e-49]",4.1897108276500243736137575509880054584975437763794929781439711577595180004814865,4.1897108276500243736137575509880054584975437763794929781439711578388357929538313 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,moderate,4099,10322096095657499356,215.332826,213.212997,212.858237,,,,Both,no,"[-4.1181898278466704,-1.1430272916631208e-16,6.3450760848966547e-33,-3.5222247812253553e-49] ; [-0.29183739289082489,-8.1001148258492941e-18,4.4964669908827382e-34,-2.4960405913725049e-50]",4.1285174726612340729075027344867939797791962652739738709468541901339059552816537,4.1285174726612340729075027344867939797791962652739738709468541904799090853606315 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,moderate,4099,10322096095657499356,238.968375,237.145904,237.032531,,,,No,yes,"[4.0719252522259577,1.130186292393464e-16,-6.273794219654816e-33,3.4826553972104968e-49] ; [6.9165665963393774,1.9197328716523069e-16,-1.0656658176190808e-32,5.9156336363834818e-49]",8.0261739790084984863179315713520228190931521667884108836594047322786481436734721,8.0261739790084984863179315713520228190931521667884108836594047322786481081425252 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,wide_exponent,4096,10322096095657499357,240.756673,216.570761,213.870154,190.000000,23.870154,yes,Both,yes,"[1.7122842369183985e-262,4.7525434613238062e-279,-2.6381915881467134e-295,1.4644905222663036e-311] ; [-3.0144374372983699e-265,-8.3667446229517548e-282,4.6444762607798811e-298,-2.578202241195858e-314]",1.712286890340601098411983682624579480459337744664421226746119949951155747074881e-262,1.7122868903406010984119836826245794804593377446644212267461199567085975614133203e-262 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,wide_exponent,4096,10322096095657499357,242.048348,213.564620,212.901798,,,,Both,no,"[2.0746421074685233e-152,5.7582885889210324e-169,-3.1964922869282166e-185,1.7744096674922142e-201] ; [-7.279699168678378e-177,-2.0205224073528366e-193,1.1216152492070844e-209,-6.22621537220194e-226]",2.0746421074685233100584491712753701754641505878649616115468392385981506866084677e-152,2.0746421074685233100584491712753701754641505878649616115468392387668510326020281e-152 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,wide_exponent,4096,10322096095657499357,264.779602,237.619098,237.123492,,,,No,yes,"[-5.8206807436614042e+100,-1.6155634451512924e+84,8.9681786727485303e+67,-4.9783392257188476e+51] ; [-1.1764315868807219e+127,-3.2652535866282193e+110,1.8125798565572611e+94,-1.0061839453608174e+78]",1.1764315868807219672309501172354356665435885041612716474525928710031014683926205e+127,1.1764315868807219672309501172354356665435885041612716474525928710031014635029139e+127 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,moderate,4099,10322096095657499356,219.189484,215.451091,214.398633,180.000000,34.398633,yes,Both,yes,"[3.0788955469009238,8.5456518164631729e-17,-4.7437897035336035e-33,2.6333322764213759e-49]",0.062656038467969832209321794216397982020542964949257118477705660287113605590702679,0.062656038467969832209321794216397982020542964949257118477705660288918880291683339 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,qdpp,qdreal,qdpp qd_real,qdpp sin,moderate,4099,10322096095657499356,215.822232,210.420642,206.091602,,,,Both,no,"[6.2844284435634243,1.7442792886633375e-16,-9.6826951382541352e-33,5.3749755414579021e-49]",0.0012431360636500376406651182820591794712990979962505727492757516488097839454018745,0.0012431360636500376406651182820591794712990979962505727492757516374658267718386587 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,moderate,4099,10322096095657499356,216.111863,214.253516,214.033060,,,,Both,yes,"[-3.3942824750153715,-9.4210263896093202e-17,5.229720206672739e-33,-2.9030778928977535e-49]",0.25000926250273050053822356824913638945347894252925707129808557785874427075500306,0.25000926250273050053822356824913638945347894252925707129808557784946347821100132 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,moderate,4099,10322096095657499356,239.122689,237.223688,237.023215,,,,No,no,"[-0.2542586325750964,-7.057094702364497e-18,3.9174745127626403e-34,-2.17463520122565e-50]",-0.25152794533412479121432085191262991371979722577009702759735904083121861113384005,-0.25152794533412479121432085191262991371979722577009702759735904083121861001314106 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,argument_reduction,4104,10322096095657499353,217.652696,208.567012,202.924770,180.000000,22.924770,yes,Both,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275296757802517104071329784271370594664228509e-21,-6.8137244848422015805151924052161601275296757802517104071329778687414703031432792e-21 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,qdpp,qdreal,qdpp qd_real,qdpp sin,argument_reduction,4104,10322096095657499353,88.230225,40.279439,0.000000,,,,Both,no,"near 2^1 * pi/2 [-3.1415926535897931,-1.2249332901226919e-16,2.9947698097183397e-33,-1.1124542208633653e-49]",nan,2.8649097533874029339333136826679753341136299243487502272333149857764811341394381e-20 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,argument_reduction,4104,10322096095657499353,216.255236,214.163948,214.023450,,,,Both,yes,"near 2^38 * pi/2 [-431777206544.70459,-1.6831417444764681e-05,4.1159802853722918e-22,-1.526636448658668e-38]",2.3089903510325325006386196751055921516200574630826998306833157055830958404977762e-41,2.308990351032532500638619675105592151620057463082699830683315705496809151689719e-41 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,argument_reduction,4104,10322096095657499353,239.104262,237.214941,237.045994,,,,No,no,"near 2^17 * pi/2 [205887.41614566068,8.0276309101467462e-12,-1.9626523424970111e-28,7.2905799818501507e-45]",1.7856472546522194647219768390344687583313151766319381994892472778246360738909141e-15,1.7856472546522194647219768390344687583313151766319381994892472778246360817223464e-15 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,quadrant_boundaries,4315,10322096095657499369,229.646501,212.548934,212.379963,180.000000,32.379963,yes,Both,yes,"below random k*pi/2, exponent 29, quadrant 0, offset bits 64 [1210367998.9931121,9.2232933347751439e-08,-3.3682212462958211e-24,-1.2421712039970458e-40]",-6.5614180700763253419843351526898064698409162314387092951719910697284566769595525e-11,-6.5614180700763253419843351526898064698409162314387092951719910704945087391437157e-11 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,qdpp,qdreal,qdpp qd_real,qdpp sin,quadrant_boundaries,4315,10322096095657499369,125.341761,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,2.3958158477746717e-32,-8.8996337669069223e-49]",0,4.5377855837122526092708693051625351219021961543624546765551091357096606382618939e-65 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,quadrant_boundaries,4315,10322096095657499369,222.867917,214.285019,214.046460,,,,Both,yes,"nearest random k*pi/2, exponent 110, quadrant 0, offset bits 64 [2.3958472744262744e+33,-1.1362463713298696e+17,-1.0799874208711815,-1.4055471566517733e-17]",1.2444660859606272253391060495552887818726965386080203390531029581974118261588645e-32,1.2444660859606272253391060495552887818726965386080203390531029582431815281246263e-32 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,quadrant_boundaries,4315,10322096095657499369,245.109723,237.306997,237.025592,,,,No,no,"above random k*pi/2, exponent 45, quadrant 0, offset bits 64 [71008329207360.312,0.00018419250007644126,9.9975864273387123e-21,-5.0484480854277783e-37]",3.849369239549790973603895914004220428153380218149354682948043798834805017807928e-06,3.8493692395497909736038959140042204281533802181493546829480437988348050006850545e-06 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,moderate,4099,10322096095657499356,219.189230,215.566675,214.659688,180.000000,34.659688,yes,Both,-,"[-4.7784826804074854,-1.3262953736402309e-16,7.3624183063460464e-33,-4.086963160313565e-49]",0.066045590163581850028962366060015702301220111028377965182485758811610101682177111,0.066045590163581850028962366060015702301220111028377965182485758813198059701212943 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,qdpp,qdreal,qdpp qd_real,qdpp cos,moderate,4099,10322096095657499356,215.686188,210.052851,204.977148,,,,Both,-,"[-7.8532640731814176,-2.1797186481268875e-16,1.2099869151776452e-32,-6.7167766636269399e-49]",0.00071756073148736779053384844772211427066765802073545435213970629886211777832677292,0.00071756073148736779053384844772211427066765802073545435213970631303926297890189555 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,moderate,4099,10322096095657499356,216.120883,214.240603,214.013567,,,,Both,-,"[4.1844906090946523,1.1614294551361571e-16,-6.4472286128500595e-33,3.5789308255041227e-49]",-0.50371892599878982246573291031148002251894889016964463243380922417755824218756977,-0.50371892599878982246573291031148002251894889016964463243380922419651155550858383 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,moderate,4099,10322096095657499356,239.067815,237.245286,237.010092,,,,No,-,"[5.2397671900876901,1.4543275445277032e-16,-8.0731396264061184e-33,4.4814927471249036e-49]",0.50326950712812592968794481966604337941872165780963347935211430198430026256742876,0.50326950712812592968794481966604337941872165780963347935211430198430026030458995 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,argument_reduction,4104,10322096095657499353,232.574321,215.615638,208.674366,180.000000,28.674366,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1226611923604276e-17,1.4973849048591698e-33,-5.5622711043168264e-50]",5.7280337633839673822029261537694370705065754439038807480055172644370212115109926e-21,5.7280337633839673822029261537694370705065754439038807480055172731619522921872359e-21 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,qdpp,qdreal,qdpp qd_real,qdpp cos,argument_reduction,4104,10322096095657499353,171.117172,59.081747,0.000000,,,,Both,-,"near 2^1 * pi/2 [-3.1415926535897931,-1.2249332901226919e-16,2.9947698097183397e-33,-1.1124542208633653e-49]",nan,-0.99999999999999999999999999999999999999958961460524728650516585944623061007015234 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,argument_reduction,4104,10322096095657499353,220.717219,214.493171,214.041954,,,,Both,-,"near 2^141 * pi/2 [-4.3787410803301036e+42,-1.7069085141238271e+26,4174300709.8400016,-1.5505348827814887e-07]",-0.50223149274818510667692305468001365951868474886708229103242086146123920208083042,-0.50223149274818510667692305468001365951868474886708229103242086147976835272541265 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,argument_reduction,4104,10322096095657499353,242.372537,237.522147,237.089415,,,,No,-,"near 2^101 * pi/2 [-3.9824418129956972e+30,-155367227019273.69,0.0037963217468348336,-1.4102032608038723e-19]",-0.12796355163596045244521468824295994843174882941415195039635122541573286692737788,-0.12796355163596045244521468824295994843174882941415195039635122541573286747195671 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,quadrant_boundaries,4315,10322096095657499369,228.481158,215.246584,214.418649,180.000000,34.418649,yes,Both,-,"below random k*pi/2, exponent 17, quadrant 1, offset bits 118 [331709.77271825873,-2.2171970577571149e-11,3.7150708281135636e-28,2.3902355434839523e-45]",9.9820278769371660928200388523257556042420348105086346022094664206029498329582703e-31,9.9820278769371660928200388523257556042420348105086346022094664208865938945946123e-31 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,qdpp,qdreal,qdpp qd_real,qdpp cos,quadrant_boundaries,4315,10322096095657499369,102.159146,0.000000,0.000000,,,,Both,-,"nearest -15 * pi/2 [-23.56194490192345,8.5787174003973557e-16,1.0134821928809237e-32,-1.5011289986392192e-49]",4.7477838728798993737366211347809785771104829168099724831398899954145041153224056e-65,4.9360988814966255254518116119110190032717402209517122386947518068669726695188e-66 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,quadrant_boundaries,4315,10322096095657499369,221.152248,214.294337,214.025139,,,,Both,-,"below random k*pi/2, exponent 73, quadrant 3, offset bits 204 [-1.9192238427797983e+22,1133685.8239386391,1.0538603815339718e-10,6.0690196840656462e-27]",7.4725966267385822752552347677857979100547939987353655458257277978202160866649243e-40,7.4725966267385822752552347677857979100547939987353655458257277980991393478431325e-40 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,quadrant_boundaries,4315,10322096095657499369,243.433538,237.253610,237.015566,,,,No,-,"above random k*pi/2, exponent 100, quadrant 1, offset bits 118 [-2.554242725948489e+30,264652064691155.38,0.0027003722178381893,4.2925035746281268e-20]",7.686394611076617817566687569806359335255530534267980437190604478331327415039497e-06,7.6863946110766178175666875698063593352555305342679804371906044783313273806102253e-06 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,moderate,4099,10322096095657499356,216.913680,214.380555,213.767876,170.000000,43.767876,yes,Both,yes,"[-1.8439090508145544,-5.11787570882259e-17,2.8409917245523164e-33,-1.5770672126837562e-49]",3.5699982842328020406977403126653024345054964874710955004250341281438081184333917,3.5699982842328020406977403126653024345054964874710955004250341283030748914299905 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,qdpp,qdreal,qdpp qd_real,qdpp tan,moderate,4099,10322096095657499356,214.805664,209.359111,204.976458,,,,Both,no,"[-7.8532640731814176,-2.1797186481268875e-16,1.2099869151776452e-32,-6.7167766636269399e-49]",-1393.6099046006247994846045908683346807355130478214578999987000937844082099410509,-1393.6099046006247994846045908683346807355130478214578999987000662371041150253087 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,moderate,4099,10322096095657499356,215.950557,214.173890,214.033824,,,,Both,yes,"[-5.8190346919196703,-1.6151065740154431e-16,8.9656425284769973e-33,-4.9769313828368341e-49]",0.50062891605128433684619177292383033963900736585257698545687677483023119814763453,0.50062891605128433684619177292383033963900736585257698545687677484880560527251444 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,moderate,4099,10322096095657499356,238.986350,237.180286,237.008972,,,,No,no,"[7.7918605780474639,2.162675754604344e-16,-1.2005262087801638e-32,6.6642591932684281e-49]",16.076889102680307739918047039830552345360218572643739213205451093129248731177196,16.076889102680307739918047039830552345360218572643739213205451093129248658834938 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,argument_reduction,4104,10322096095657499353,216.861788,208.567009,202.924770,170.000000,32.924770,yes,Both,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275298339501045587830768442951450110146372361e-21,-6.8137244848422015805151924052161601275298339501045587830768437367494218513576644e-21 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,qdpp,qdreal,qdpp qd_real,qdpp tan,argument_reduction,4104,10322096095657499353,86.791809,40.279439,0.000000,,,,Both,no,"near 2^1 * pi/2 [-3.1415926535897931,-1.2249332901226919e-16,2.9947698097183397e-33,-1.1124542208633653e-49]",nan,-2.8649097533874029339333136826679753341148056414688250156538506124880451124939137e-20 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,argument_reduction,4104,10322096095657499353,216.069442,214.143677,214.023450,,,,Both,yes,"near 2^38 * pi/2 [-431777206544.70459,-1.6831417444764681e-05,4.1159802853722918e-22,-1.526636448658668e-38]",2.3089903510325325006386196751055921516200574630826998306833157055830958404977762e-41,2.308990351032532500638619675105592151620057463082699830683315705496809151689719e-41 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,argument_reduction,4104,10322096095657499353,238.931540,237.203609,237.030406,,,,No,no,"near 2^102 * pi/2 [-7.9648836259913944e+30,-310484850001344.44,0.0075916732929860228,-2.8204065216077446e-19]",-9.7020068364479704729019010913725962546149990050125552215463152474642265648020523e-07,-9.7020068364479704729019010913725962546149990050125552215463152474642265217890728e-07 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,quadrant_boundaries,4315,10322096095657499369,217.360401,212.539526,212.267358,170.000000,42.267358,yes,Both,yes,"above random k*pi/2, exponent 45, quadrant 0, offset bits 64 [74082575456598.641,0.0077401429536521011,-4.4453663865375208e-20,-1.4406648841189425e-36]",4.0160244626898690108548055606217396545568030741292099390402822024483364340948252e-06,4.0160244626898690108548055606217396545568030741292099390402822019413987321784571e-06 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,qdpp,qdreal,qdpp qd_real,qdpp tan,quadrant_boundaries,4315,10322096095657499369,36.893810,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,2.3958158477746717e-32,-8.8996337669069223e-49]",0,4.5377855837122526092708693051625351219021961543624546765551091357096606382618939e-65 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,quadrant_boundaries,4315,10322096095657499369,215.920916,214.200339,214.006668,,,,Both,yes,"above random k*pi/2, exponent 144, quadrant 2, offset bits 172 [-4.4696686901385167e+43,2.0188248772911221e+27,-52555629829.22261,1.2831941213003397e-06]",7.4664829630051754541202666277260882282154324742969316489227519401151418469649252e-09,7.4664829630051754541202666277260882282154324742969316489227519398328556104206349e-09 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,quadrant_boundaries,4315,10322096095657499369,238.947188,237.196450,237.053707,,,,No,no,"below random k*pi/2, exponent 102, quadrant 3, offset bits 204 [9.9343530058996466e+30,87688409581458.625,0.0032087146332879252,1.4984467354529784e-19]",2588058620050218384135716160595.2714079053792228534200347072058457423853626569361,2588058620050218384135716160595.2714079053792228534200347072058457423853739470342 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,near_one,4099,10322096095657499359,218.093670,215.379730,214.678988,180.000000,34.678988,yes,Both,yes,"[1.2911786355365591,3.5837406251919532e-17,-1.9893756781863299e-33,1.1043253412758746e-49]",0.91180735486029865720200031963596732813600677958830230748545472972914611914911937,0.91180735486029865720200031963596732813600677958830230748545472975077769821487466 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,qdpp,qdreal,qdpp qd_real,qdpp atan,near_one,4099,10322096095657499359,215.912440,213.055129,212.444445,,,,NaN,no,"[0.55588756341428947,1.5428979300133024e-17,-8.5648040327363084e-34,4.7544213192731213e-50]",0.50735217275163531758761222414286179663047784248280668428448483712789395698768449,0.50735217275163531758761222414286179663047784248280668428448483718453865357351711 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,near_one,4099,10322096095657499359,216.034093,214.196468,214.022743,,,,Both,yes,"[0.54921480960087321,1.5243773177100273e-17,-8.4619939816900486e-34,4.6973502763558986e-50]",0.50224017774039295847895566589446898154246751335846360124013365955899684908805543,0.50224017774039295847895566589446898154246751335846360124013365954021899193610862 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,near_one,4099,10322096095657499359,239.069181,237.249601,237.023004,,,,Inf,no,"[0.55638113561490443,1.5442678680668965e-17,-8.5724087165833602e-34,4.7586427668241172e-50]",0.50772915105953358733326116359313553998641358497921735346375362562181669630230885,0.50772915105953358733326116359313553998641358497921735346375362562181669403975783 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,moderate,4099,10322096095657499356,218.191260,215.364973,214.819019,180.000000,34.819019,yes,Both,yes,"[-1.6564773418506284,-4.5976482117311103e-17,2.5522074518952777e-33,-1.4167597383570195e-49]",-1.0276674796068157926881872460477795215568000040373694878361657581086397348641996,-1.0276674796068157926881872460477795215568000040373694878361657581307647820337298 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,qdpp,qdreal,qdpp qd_real,qdpp atan,moderate,4099,10322096095657499356,217.489668,213.839909,212.640547,,,,NaN,no,"[-0.14215205099130479,-3.9455120002058972e-18,2.1901991332817212e-34,-1.2158047531417144e-50]",-0.14120599646931357536554312007949499478728116324929113684654037846650539302747977,-0.14120599646931357536554312007949499478728116324929113684654037848026703215980269 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,moderate,4099,10322096095657499356,215.887438,214.230925,214.039595,,,,Both,yes,"[0.55778275215845952,1.5481581354627725e-17,-8.5940040387576104e-34,4.7706305787751426e-50]",0.50879880948542119345425761615829870587435545150631385296139718830959300455778602,0.50879880948542119345425761615829870587435545150631385296139718832839516313373038 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,moderate,4099,10322096095657499356,238.894314,237.221991,237.005716,,,,Inf,no,"[1.5597260113585101,4.3291093247924408e-17,-2.4031384242520164e-33,1.3340098049830031e-49]",1.0006760568417267039616046413236068242743619066341858284652430030107293262785856,1.0006760568417267039616046413236068242743619066341858284652430030107293307915712 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,near_one,4099,10322096095657499359,217.767500,215.258136,214.277602,180.000000,34.277602,yes,Both,yes,"[0.58860603672544787,1.6337099360148818e-17,-9.0689119326130649e-34,5.0342574179424254e-50] ; [0.85887750789320882,2.3838639614892877e-17,-1.3233103288097723e-33,7.3458479788444792e-50]",0.60080560244689944505254047976488516114993445003563706360562245792394141734857901,0.60080560244689944505254047976488516114993445003563706360562245794276700036835792 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,qdpp,qdreal,qdpp qd_real,qdpp atan2,near_one,4099,10322096095657499359,215.974246,212.996470,211.809679,,,,NaN,no,"[1.1174479589589783,3.1015411321416117e-17,-1.7217011883627962e-33,9.55736150422435e-50] ; [1.3143457009666371,3.6480421488256283e-17,-2.0250701942146223e-33,1.1241397780496056e-49]",0.70460629627893242601473568553458627124468553386584437351835905477710968633262149,0.7046062962789324260147356855345862712446855338658443735183590548992558624971532 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,near_one,4099,10322096095657499359,215.994476,214.132014,214.011485,,,,Both,yes,"[0.88505385327289043,2.4565179148419448e-17,-1.3636413747308533e-33,7.5697302577884725e-50] ; [0.5621158127315895,1.5601847945012334e-17,-8.6607654076266884e-34,4.8076905832121144e-50]",1.0049524547607640479472056483133780888177778504413203924398100730281741617591277,1.0049524547607640479472056483133780888177778504413203924398100730660418713400554 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,near_one,4099,10322096095657499359,239.055181,237.179498,237.044590,,,,Inf,no,"[1.2012076032854226,3.3340208463056926e-17,-1.8507533540744151e-33,1.0273744932978252e-49] ; [0.76012008050901414,2.1097570371525879e-17,-1.1711504195058775e-33,6.5011908051741811e-50]",1.0066101070031341858676864823590644902717426393400127313649714321821731001027106,1.0066101070031341858676864823590644902717426393400127313649714321821731045217664 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,moderate,4099,10322096095657499356,218.042610,215.273196,214.779064,180.000000,34.779064,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50] ; [1.7502476823940025,4.8579131894765996e-17,-2.6966835372935758e-33,1.4969600766154699e-49]",0.072148061051439749393843263001597933397921930324099767924159658763635157216424841,0.072148061051439749393843263001597933397921930324099767924159658765232080678489465 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,qdpp,qdreal,qdpp qd_real,qdpp atan2,moderate,4099,10322096095657499356,217.021762,213.386622,212.468937,,,,NaN,no,"[6.7618103531033285,1.8767793855410188e-16,-1.0418218429847463e-32,5.7832729881953999e-49] ; [7.0897074644814957,1.9677891162310489e-16,-1.0923423922232494e-32,6.0637183731018753e-49]",0.76173029626598310551501424329948959389659190646440275476402648474030549713666102,0.76173029626598310551501424329948959389659190646440275476402648482391929514145413 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,moderate,4099,10322096095657499356,215.885980,214.176678,214.024743,,,,Both,yes,"[-6.1873351720195728,-1.7173304922622958e-16,9.5330992670022754e-33,-5.2919331511315645e-49] ; [-2.9810460413895985,-8.2740648815460241e-17,4.5930286693674072e-33,-2.5496430907475705e-49]",-2.0197766333272617088389945956184684603975351443001694011101920891561200649612965,-2.0197766333272617088389945956184684603975351443001694011101920892315312586125163 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,moderate,4099,10322096095657499356,238.917136,237.174621,237.005636,,,,Inf,no,"[0.76646160167214816,2.1273582941687357e-17,-1.1809210799067136e-33,6.5554288658881889e-50] ; [6.0904320632745925,1.6904344766406877e-16,-9.3837963879333393e-33,5.2090534041389854e-49]",0.12518871466835654554530119732890413946159769433425644201628387442095021006944253,0.12518871466835654554530119732890413946159769433425644201628387442095020950481812 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,extreme_finite,8,10322096095657499351,224.796125,218.394834,218.394834,180.000000,38.394834,yes,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961510720871532843,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,qdpp,qdreal,qdpp qd_real,qdpp atan2,extreme_finite,8,10322096095657499351,0.000000,0.000000,0.000000,,,,NaN,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",nan,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,extreme_finite,8,10322096095657499351,215.343090,215.217830,215.217830,,,,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961795587903905637,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,extreme_finite,8,10322096095657499351,240.641147,237.801100,237.801100,,,,Inf,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961539081990612658,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,moderate,4099,10322096095657499356,217.555374,214.870821,214.404436,180.000000,34.404436,yes,Both,yes,"[-0.03874370615484779,-1.0753538658105852e-18,5.9694131072129129e-35,-3.313689937563487e-51]",-0.038753405574689053897038748698475312191059300104201567727902220547827930480850877,-0.038753405574689053897038748698475312191059300104201567727902220546715831868900725 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,qdpp,qdreal,qdpp qd_real,qdpp asin,moderate,4099,10322096095657499356,216.037525,212.870900,212.306181,,,,Both,no,"[0.64009750269274901,1.7766274637363827e-17,-9.8622635821076372e-34,5.4746560518890359e-50]",0.69462516701961480722974231918740821973366171540487976328936493811989540428405727,0.69462516701961480722974231918740821973366171540487976328936493820524897961929294 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,moderate,4099,10322096095657499356,215.935045,214.166642,214.033964,,,,Both,yes,"[0.84375728252726911,2.3418969056423187e-17,-1.3000139329712549e-33,7.2165270035909608e-50]",1.0042455644826932465957119672506687191893308602737032036527706880936208304894104,1.004245564482693246595711967250668719189330860273703203652770688056364795135486 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,moderate,4099,10322096095657499356,238.937265,237.164907,237.026679,,,,No,no,"[0.47970695404606045,1.3314542636368455e-17,-7.3910558986247961e-34,4.1028602174724127e-50]",0.50032069928561683298565717027151869152759847529322634267318689099093861195294037,0.50032069928561683298565717027151869152759847529322634267318689099093861417680444 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,boundary,4105,10322096095657499355,218.279597,215.666103,215.450088,180.000000,35.450088,yes,Both,yes,"[-0.9999994386132145,-2.7755560034015539e-17,1.5407430905564922e-33,-8.5528422708397013e-50]",-1.5697367166420567598613352554733454843585688705175173404668956843884396097624371,-1.5697367166420567598613352554733454843585688705175173404668956844102612619924983 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,qdpp,qdreal,qdpp qd_real,qdpp asin,boundary,4105,10322096095657499355,218.277775,215.666103,215.450088,,,,Both,no,"[-0.9999994386132145,-2.7755560034015539e-17,1.5407430905564922e-33,-8.5528422708397013e-50]",-1.5697367166420567598613352554733454843585688705175173404668956843884396097624371,-1.5697367166420567598613352554733454843585688705175173404668956844102612619924983 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,boundary,4105,10322096095657499355,216.099672,214.664889,214.650939,,,,Both,yes,"[-0.99999947688320301,-2.7755561096221099e-17,1.5407431495207457e-33,-8.5528425981570605e-50]",-1.5697734711427425137462071034426176291214099285341417990546489811401920566969057,-1.5697734711427425137462071034426176291214099285341417990546489811022198556486962 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,boundary,4105,10322096095657499355,239.101674,237.664178,237.650522,,,,No,no,"[-0.9999993776284537,-2.7755558341348399e-17,1.5407429965945906e-33,-8.5528417492463684e-50]",-1.5696806461857352124904427955206761227928221161521898973451622133707907230815616,-1.5696806461857352124904427955206761227928221161521898973451622133707907276092422 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,moderate,4099,10322096095657499356,217.952479,214.769937,210.665918,180.000000,30.665918,yes,Both,-,"[0.99887415790514178,2.7724327220233818e-17,-1.5390093211072774e-33,8.5432179170301514e-50]",0.04745636757503406782865420252660601887412863134878995249846597602032373476016398,0.047456367575034067828654202526606018874128631348789952498465976002146233476892292 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,qdpp,qdreal,qdpp qd_real,qdpp acos,moderate,4099,10322096095657499356,217.260546,213.570151,212.546937,,,,Both,-,"[0.89299145762104437,2.4785491926111579e-17,-1.3758711906514997e-33,7.6376193738986172e-50]",0.46684777086844833965955081731885474094574942061107130280412927846357664071765522,0.4668477708684483396595508173188547409457494206110713028041292785121246988832701 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,moderate,4099,10322096095657499356,215.926972,214.168270,214.013336,,,,Both,-,"[0.53747900055361064,1.4918039041678395e-17,-8.2811752131641796e-34,4.5969756963050055e-50]",1.0033516021070022662907094076805447931131779362238745906466256800975035278625521,1.0033516021070022662907094076805447931131779362238745906466256800597446123647365 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,moderate,4099,10322096095657499356,238.960587,237.176311,237.031977,,,,No,-,"[-0.43157298548501555,-1.1978556632292069e-17,6.6494346874735147e-34,-3.691177745387139e-50]",2.0170321133877162215411750564956245308378105477034926055582254990416861890253464,2.0170321133877162215411750564956245308378105477034926055582254990416861800927487 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,boundary,4105,10322096095657499355,214.108948,205.510139,192.466318,180.000000,12.466318,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863435425504615922399221269664356222070824068253018899150618e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,qdpp,qdreal,qdpp qd_real,qdpp acos,boundary,4105,10322096095657499355,217.358336,214.000060,212.999289,,,,Both,-,"[0.99999929870750148,2.7755556150851942e-17,-1.5407428749976105e-33,8.5528410742475333e-50]",0.0011843078826538607100081236986459475260528356367755210592184107363613993035457458,0.0011843078826538607100081236986459475260528356367755210592184107362713895304423971 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,boundary,4105,10322096095657499355,215.911052,214.202890,214.012410,,,,Both,-,"[0.99999951622208461,2.7755562188094402e-17,-1.5407432101318897e-33,8.5528429346164987e-50]",0.00098364419824795302810500421007198327569768241949960764096598619232602573162558328,0.00098364419824795302810500421007198327569768241949960764096598619236306677869978476 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,boundary,4105,10322096095657499355,238.914683,237.209342,237.050442,,,,No,-,"[0.9999994975875568,2.7755561670882356e-17,-1.5407431814208536e-33,8.5528427752382321e-50]",0.0010024095822028012190197504178633007438852888266898375115002944522469310012326441,0.0010024095822028012190197504178633007438852888266898375115002944522469309968498442 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,moderate,4099,10322096095657499356,217.426949,215.046491,214.489012,180.000000,34.489012,yes,Both,-,"[7.2668058682815229,2.0169437976118373e-16,-1.1196287217417818e-32,6.2151879295467938e-49]",1431.9692420599845796068868376110150600143493093499559422817931161935390354934173,1431.969242059984579606886837611015060014349309349955942281793116154785851743886 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,qdpp,qdreal,qdpp qd_real,qdpp exp,moderate,4099,10322096095657499356,217.181000,214.662285,213.965214,,,,Both,-,"[7.2613602585082351,2.0154323372734803e-16,-1.118789692707556e-32,6.2105303827861612e-49]",1424.1924901565322249615420147030581519801331801363157732704846149025457025018372,1424.1924901565322249615420147030581519801331801363157732704846148471314937641764 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,moderate,4099,10322096095657499356,215.924822,214.186790,214.006279,,,,Both,-,"[3.4699495991506186,9.6310448481646233e-17,-5.3463038708149298e-33,2.9677948270106668e-49]",32.135122766454513464552390234864268716902997252088065619897983850263564532528178,32.135122766454513464552390234864268716902997252088065619897983849048300268542509 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,moderate,4099,10322096095657499356,238.962861,237.190217,237.015623,,,,No,-,"[-7.6245813926123454,-2.1162464538016916e-16,1.1747527693959878e-32,-6.5211878641279631e-49]",0.00048829960656918900534550546413689941129718423073002179902260395749341738412942277,0.00048829960656918900534550546413689941129718423073002179902260395749341738194229393 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,boundary,4099,10322096095657499291,216.046495,209.997559,208.947269,180.000000,28.947269,yes,Both,-,"[-598.1978245522032,-1.6603324952463394e-14,9.2166968237791214e-31,-5.1162945123745648e-47]",1.6068883808423147630418247005358373818912600411129986867468220248358416751446546e-260,1.6068883808423147630418247005358373818912600411129986867468220268856735884602638e-260 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,qdpp,qdreal,qdpp qd_real,qdpp exp,boundary,4099,10322096095657499291,215.950347,209.985759,209.146866,,,,Both,-,"[-640.25011431199152,-1.7770510460701536e-14,9.8646149364065219e-31,-5.4759613157298725e-47]",8.7681569761502387526320190127434504584347761919285432440366104766613210385006508e-279,8.7681569761502387526320190127434504584347761740787370131900179841668905806350565e-279 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,boundary,4099,10322096095657499291,215.925953,214.166296,214.022891,,,,Both,-,"[-213.48363419693817,-5.9253611516523799e-15,3.289236189891953e-31,-1.8258928757241849e-47]",1.9285712648723698827364885753401467489945482612892346646561462430777724772501659e-93,1.9285712648723698827364885753401467489945482612892346646561462431498708742994428e-93 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,boundary,4099,10322096095657499291,238.944656,237.149815,237.004890,,,,No,-,"[-1.3839315575301043,-3.8411816991881907e-17,2.1322841821037556e-33,-1.1836554970078048e-49]",0.25059139930250338491880855140531431523927782048990968130858850759821856519740631,0.2505913993025033849188085514053143152392778204899096813085885075982185663282049 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,moderate,4099,10322096095657499356,218.020692,214.999773,214.215827,180.000000,34.215827,yes,Both,-,"[3.1052035729833225,8.6186712571859683e-17,-4.7843236357014531e-33,2.6558331288070464e-49]",8.6051692793502790320283451340709447945359060261526288089250361316953685910209515,8.6051692793502790320283451340709447945359060261526288089250361314139388957083351 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,moderate,4099,10322096095657499356,215.951076,214.175518,214.035382,,,,Both,-,"[7.0184440832206558,1.9480095545589426e-16,-1.0813625298305666e-32,6.0027678929240134e-49]",129.6469164692491677500327633275603595045395867946892632855310581663474322548835,129.6469164692491677500327633275603595045395867946892632855310581615424462315035 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,moderate,4099,10322096095657499356,238.939517,237.174822,237.050228,,,,No,-,"[1.0265636690801578,2.8492865541411778e-17,-1.5816717680812041e-33,8.7800420716166679e-50]",2.0371661763637205453633549726338999372030557043909456864394369311660295529176797,2.0371661763637205453633549726338999372030557043909456864394369311660295618260332 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,boundary,4099,10322096095657499291,218.040030,214.973213,214.202868,180.000000,34.202868,yes,Both,-,"[104.10886087905146,2.8896013603855037e-15,-1.6040509811440805e-31,8.9042716596936548e-48]",21872072611204943785318953704535.848957757329524240581979950526538377674145297079,21872072611204943785318953704535.848957757329524240581979950526537655899871393765 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,boundary,4099,10322096095657499291,215.997580,214.178351,214.040135,,,,Both,-,"[101.01867420310816,2.8038314504349505e-15,-1.5564391167205152e-31,8.6399727190517872e-48]",2568331375911613125415057676345.8059016688827604346296714291621286371854710902734,2568331375911613125415057676345.8059016688827604346296714291621287320601044697817 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,boundary,4099,10322096095657499291,238.956490,237.176073,237.026426,,,,No,-,"[-183.99722039427581,-5.1069487637188608e-15,2.8349260515308288e-31,-1.5737000877596046e-47]",4.0861804585463969756716858253333793248054096194328922530438741816953664456998308e-56,4.0861804585463969756716858253333793248054096194328922530438741816953664638655892e-56 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,moderate,4099,10322096095657499356,218.319190,214.883150,213.793932,180.000000,33.793932,yes,Both,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.69414327255271665612631015596788634386741426622153124768599904822325391377881959,0.69414327255271665612631015596788634386741426622153124768599904819284068360567441 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,qdpp,qdreal,qdpp qd_real,qdpp expm1,moderate,4099,10322096095657499356,218.078857,214.447716,0.000000,,,,NaN,no,"midpoint [0,0,0,0]",1,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,moderate,4099,10322096095657499356,216.131673,214.242848,214.018319,,,,Both,yes,"[3.4965342970959128,9.70483220756855e-17,-5.3872640834831953e-33,2.9905323126095925e-49]",32.000882287565481685038228589636231258591535037593573530748202339964185962910206,32.000882287565481685038228589636231258591535037593573530748202341164316010951542 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,moderate,4099,10322096095657499356,239.116206,237.239921,237.036552,,,,No,no,"[6.9511685393403209,1.9293368401064106e-16,-1.0709970910718406e-32,5.9452281490726156e-49]",1043.369402155250824878423084038542130172916017601225886298348705509618197426875,1043.3694021552508248784230840385421301729160176012258862983487055096181928208548 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,cancellation,4098,10322096095657499336,235.991871,207.540568,207.000000,180.000000,27.000000,yes,Both,yes,"[3.6665372155917779e-270,1.0176685093487508e-286,-5.6491950525747228e-303,3.1359334672835601e-319]",3.666537215591778022742232576640266061184048842008439989892382592756081591049904e-270,3.6665372155917780227422325766402660611840488420084399108418792581566345227988971e-270 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,qdpp,qdreal,qdpp qd_real,qdpp expm1,cancellation,4098,10322096095657499336,235.502017,203.377948,203.000000,,,,NaN,no,"[-3.8216415740076992e-266,-1.0607186168320179e-282,5.8881711552772772e-299,-3.2685915951514981e-315]",-3.8216415740076992733056703378630837378959866245250661120987138937707022352653822e-266,-3.8216415740076992733056703378630837378959866245250661119722330884353431199561806e-266 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,cancellation,4098,10322096095657499336,238.867803,214.409929,214.038287,,,,Both,yes,"[-6.7120113773945228e-52,-1.8629573931823525e-68,1.0341490959033542e-84,-5.740680685835965e-101]",-6.712011377394522981785014978692529479776471498143080594571376035118230062021051e-52,-6.7120113773945229817850149786925294797764714981430805945713760353664908412007537e-52 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,cancellation,4098,10322096095657499336,261.143186,237.455118,237.087032,,,,No,no,"[-3.8952556529180725e-40,-1.0811506281677353e-56,6.0015916023988555e-73,-3.3315525906900986e-89]",-3.895255652918072567680506372460482734240287686521220025487368643809197114855518e-40,-3.8952556529180725676805063724604827342402876865212200254873686438091971314600946e-40 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,near_one,4099,10322096095657499359,216.923081,214.333783,213.252927,180.000000,33.252927,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.50793426433422243038604118757996243390013385433953431736902408052282282785799521,-0.50793426433422243038604118757996243390013385433953431736902408049044259492262108 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,qdpp,qdreal,qdpp qd_real,qdpp log,near_one,4099,10322096095657499359,216.102232,213.556747,212.785342,,,,NaN,-,"[1.30472165290815,3.6213300494640499e-17,2.0102420003409726e-33,1.1159084769235398e-49]",0.26598972523382481362994009301903610226436363952412425984605998695011843922211341,0.26598972523382481362994009301903610226436363952412425984605998697356582512954988 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,near_one,4099,10322096095657499359,215.950049,214.169987,214.022652,,,,Both,-,"[1.2874823082863105,3.5734812561425147e-17,1.9836805843179232e-33,1.1011639291058213e-49]",0.25268861232449768303287208416041654713719635429237966672910076356984301208098884,0.25268861232449768303287208416041654713719635429237966672910076357929117870962672 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,near_one,4099,10322096095657499359,238.922548,237.172288,237.020732,,,,No,-,"[1.2848264058251369,3.5661096459836307e-17,1.9795885186544464e-33,1.0988923763468863e-49]",0.25062361647825247046091044906137751740083075171705262981159748405128009249095062,0.25062361647825247046091044906137751740083075171705262981159748405128009360954388 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,wide_exponent,4096,10322096095657499357,218.159247,215.423349,214.787811,180.000000,34.787811,yes,Both,-,"[2.1976393587320462e-253,6.0996745397169545e-270,3.3859995583568084e-286,1.87960733552917e-302]",-581.7666447619842216491153422494362059260947919882070310469834418271313947370462,-581.76664476198422164911534224943620592609479198820703104698344181433242395383818 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,qdpp,qdreal,qdpp qd_real,qdpp log,wide_exponent,4096,10322096095657499357,219.248609,198.315059,182.885308,,,,NaN,-,"[8.1014827670798251e+270,2.2486131754039865e+254,1.2482310604044958e+238,6.9290743165667288e+221]",623.79002221098189400061212646729526801709293054916946038793492571079055836917961,623.79002221098189400061212646729526801709293054916946044302521634436080423769015 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,wide_exponent,4096,10322096095657499357,215.922997,214.161037,214.024145,,,,Both,-,"[4.2620000526591127e+112,1.1829426473539441e+96,6.5666508195169289e+79,3.6452234672506739e+63]",259.33926896136503531476005673839606499505614715572250820030983367844490106121051,259.33926896136503531476005673839606499505614715572250820030983366875809051992411 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,wide_exponent,4096,10322096095657499357,238.891947,237.168312,237.029110,,,,No,-,"[4.0479342938723756e-223,1.1235274638067215e-239,6.2368302955846473e-256,3.4621362974188981e-272]",-512.07826903756965473896626715773821631241155436371017077009210067703398041970383,-512.07826903756965473896626715773821631241155436371017077009210067703398269199759 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,extreme_finite,4096,10322096095657499354,218.246513,215.340501,214.977417,180.000000,34.977417,yes,Both,-,"[6.7255270714277703e+270,1.8667087518597276e+254,1.0362315182919788e+238,5.7522404522501946e+221]",623.60388540574258032454540371734224443628132982427335034944077135074873546872386,623.60388540574258032454540371734224443628132982427335034944077133871895125605538 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,qdpp,qdreal,qdpp qd_real,qdpp log,extreme_finite,4096,10322096095657499354,180.082090,62.240702,61.593641,,,,NaN,-,"[2.1750866125911697e+307,6.0370780946316363e+290,3.3512515510601061e+274,1.8603183166488491e+258]",707.67069203480079974332779745736534057362405436989841765137044290539718915086942,707.67069203480079994670286771340075022955779980128755279708076731836065554625776 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,extreme_finite,4096,10322096095657499354,215.741355,214.353327,214.285392,,,,Both,-,"[1.0075597185049971e-271,2.7965399954227229e-288,1.5523915461017184e-304,8.6165048634713397e-321]",-623.99302891435394122737400533549424989714640717618230616015013795393555869980229,-623.99302891435394122737400533549424989714640717618230616015013793448871373169198 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,extreme_finite,4096,10322096095657499354,238.776105,237.339073,237.285267,,,,No,-,"[7.7437783365788433e+270,2.1493302517158317e+254,1.1931179664891499e+238,6.6231351874510007e+221]",623.74486483406474436961766281025043784462223397426216741261126488422867258269335,623.74486483406474436961766281025043784462223397426216741261126488422867490021597 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,near_one,4099,10322096095657499359,216.831239,214.285380,213.192358,180.000000,33.192358,yes,Both,-,"[0.7496369857674211,2.0806606042739792e-17,1.1549986546477316e-33,6.4115304990049557e-50]",-0.41573596010411493045014267590719729760119796965409081364143571035067957416967793,-0.41573596010411493045014267590719729760119796965409081364143571037831861478590789 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,near_one,4099,10322096095657499359,216.011174,214.194225,214.010454,,,,Both,-,"[0.84070967041985378,2.3334380828128714e-17,1.2953183430380163e-33,7.1904612433005627e-50]",-0.2503204268218643143737732495500269147452501235616383620107211692911966773483109,-0.25032042682186431437377324955002691474525012356163836201072116930063577090736059 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,near_one,4099,10322096095657499359,239.011917,237.187476,237.019864,,,,No,-,"[0.70583601885804559,1.959088499364896e-17,1.087512579636627e-33,6.036907527410412e-50]",-0.50259504206925858952155266234103500116929985813117258806089289885593823424307108,-0.50259504206925858952155266234103500116929985813117258806089289885593823648762265 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,wide_exponent,4096,10322096095657499357,217.896906,215.177253,214.398808,180.000000,34.398808,yes,Both,-,"[1.7649452349949291e+168,4.8987070927345696e+151,2.7193287026242405e+135,1.5095306685887436e+119]",558.90354335945887268941714779171120602057251916893271728873264701130834705779937,558.90354335945887268941714779171120602057251916893271728873264699520691310276205 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,wide_exponent,4096,10322096095657499357,215.991634,214.211323,214.021430,,,,Both,-,"[6.4253617293081178e+155,1.7833961333557962e+139,9.8998372463954056e+122,5.4955136254949441e+106]",517.58263238369809866937110146938845548682933182383309502125833012837118648537698,517.58263238369809866937110146938845548682933182383309502125833014774029382250725 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,wide_exponent,4096,10322096095657499357,238.962302,237.188437,237.038715,,,,No,-,"[3.5891513914548225e-156,9.9618962841464057e-173,5.5299633117935652e-189,3.0697462970427998e-205]",-516.3771400246925614573224211990488725433698671805238582152642425975984165061167,-516.37714002469256145732242119904887254336986718052385821526424259759841422995179 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,extreme_finite,4096,10322096095657499354,221.112240,215.319712,214.786513,180.000000,34.786513,yes,Both,-,"[6.8101574227838104e+300,1.8901983930241257e+284,1.0492708885224276e+268,5.8246234975324753e+251]",999.34611661399737932538483694865739304704641025692614772050877622807059417985481,999.34611661399737932538483694865739304704641025692614772050877625007617254075152 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,extreme_finite,4096,10322096095657499354,219.971377,214.877327,214.815152,,,,Both,-,"[1.1004277016223889e-271,3.0543004281912948e-288,1.695477329750225e-304,9.4119505532757467e-321]",-900.10444935156029673708481095997044639503503777325192083508132873842538505530364,-900.10444935156029673708481095997044639503503777325192083508132875785609939278478 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,extreme_finite,4096,10322096095657499354,242.986721,237.879178,237.813342,,,,No,-,"[5.3028389146690505e+270,1.4718334647359639e+254,8.1703170048184277e+237,4.5354370286179322e+221]",899.32735054371464126504766215010086793763896785913590289802765629264265015706112,899.32735054371464126504766215010086793763896785913590289802765629264264783983466 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,near_one,4099,10322096095657499359,216.850749,214.245682,213.257193,180.000000,33.257193,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.22059304816994049352958242449187881883781348866027603462218270842444120257078286,-0.2205930481699404935295824244918788188378134886602760346221827084104201683981848 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,qdpp,qdreal,qdpp qd_real,qdpp log10,near_one,4099,10322096095657499359,215.726975,213.289006,212.669210,,,,NaN,-,"[1.3015859464676423,3.6126267157422572e-17,2.0054106795965072e-33,1.1132265551586125e-49]",0.11447285077352897129228038687318627560357562795876254689499109361157840237707265,0.11447285077352897129228038687318627560357562795876254689499109362251522127743891 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,near_one,4099,10322096095657499359,215.948509,214.160208,214.004904,,,,Both,-,"[1.1548157158417363,3.2052574923161943e-17,1.7792753339108649e-33,9.8769622142772787e-50]",0.062512685545452607071551872862036252686540209936771988439097880251720697483459773,0.06251268554545260707155187286203625268654020993677198843909788025408701452391967 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,near_one,4099,10322096095657499359,238.958266,237.152635,237.019945,,,,No,-,"[0.7495965567981705,2.0805483913426695e-17,1.1549363639577312e-33,6.4111847162136648e-50]",-0.12517241700686969827684919239182967493738565725808191459997705897873585882208558,-0.12517241700686969827684919239182967493738565725808191459997705897873585938106475 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,wide_exponent,4096,10322096095657499357,217.861615,215.189987,214.497524,180.000000,34.497524,yes,Both,-,"[7.1469640060920858e+234,1.9836809989326703e+218,1.1011641592632406e+202,6.1126890175302627e+185]",234.85412159489045596003203173344408775668279869668572611682025536536168793387694,234.85412159489045596003203173344408775668279869668572611682025535904325560762789 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,qdpp,qdreal,qdpp qd_real,qdpp log10,wide_exponent,4096,10322096095657499357,216.139128,198.315057,182.885308,,,,NaN,-,"[8.1014827670798251e+270,2.2486131754039865e+254,1.2482310604044958e+238,6.9290743165667288e+221]",270.9085645125363317880005551595953172485088402709057018385553128700286754971209,270.90856451253633178800055515959531724850884027090570186248072209436947046554362 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,wide_exponent,4096,10322096095657499357,215.969447,214.155173,214.015352,,,,Both,-,"[10.021612533904657,2.7815562447532518e-16,1.5440738936074737e-32,8.571331942028158e-49]",1.0009376075822620669594461139776613372841714757547811188893586984207809467928981,1.000937607582262066959446113977661337284171475754781118889358698383165469979518 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,wide_exponent,4096,10322096095657499357,239.002817,237.144835,237.026072,,,,No,-,"[1.1120370415213245e-260,3.0865228193325391e-277,1.7133643500269686e-293,9.5110827548592716e-310]",-259.95388074633275189091615220567999501526078782561121881855869444663541118363614,-259.95388074633275189091615220567999501526078782561121881855869444663541233958603 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,extreme_finite,4096,10322096095657499354,217.633514,215.073798,214.220407,180.000000,34.220407,yes,Both,-,"[5.3758239790954964e+270,1.4920908894809616e+254,8.2827683016759667e+237,4.5978600380780314e+221]",270.73044504015011560346372915336203436416099326519770095672238014262874150583956,270.73044504015011560346372915336203436416099326519770095672238013380264152658546 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,qdpp,qdreal,qdpp qd_real,qdpp log10,extreme_finite,4096,10322096095657499354,177.377442,62.240702,61.593641,,,,NaN,-,"[2.1750866125911697e+307,6.0370780946316363e+290,3.3512515510601061e+274,1.8603183166488491e+258]",307.3374765553694932184865016124271803173606726714839567405622958159722812564444,307.3374765553694933068111723813095195789475383928117615171795613459742174333761 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,extreme_finite,4096,10322096095657499354,215.774631,214.144149,214.083242,,,,Both,-,"[1.0704536782707779e-271,2.9711058010272682e-288,1.6492950344489211e-304,9.1550364174382985e-321]",-270.97043212118285841925561066273687400765354325005690405748633653277437492999232,-270.97043212118285841925561066273687400765354325005690405748633652305933528126596 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,extreme_finite,4096,10322096095657499354,238.568974,237.128968,237.082099,,,,No,-,"[7.3799185819446756e+270,2.0483388823835035e+254,1.137056494728563e+238,6.3119315037361179e+221]",270.86805157054835280159779316282272669037880739803758696775863651413772687711934,270.86805157054835280159779316282272669037880739803758696775863651413772803572193 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,moderate,4099,10322096095657499356,217.570462,214.787129,214.020088,180.000000,34.020088,yes,Both,yes,"[-0.25462100474624672,-7.0671525505618592e-18,3.9230577400860884e-34,-2.1777345149887542e-50]",-0.29386247149453246058352428487213904837677656724718288204078215844233971612393252,-0.29386247149453246058352428487213904837677656724718288204078215843133248548523474 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,qdpp,qdreal,qdpp qd_real,qdpp log1p,moderate,4099,10322096095657499356,217.195222,214.097582,213.044815,,,,NaN,no,"[0.63529998410703725,1.7633116747490719e-17,-9.7883461044838246e-34,5.4336236090989502e-50]",0.4918262640375245274757241097327722059938982066786883208516416152176455627804291,0.49182626403752452747572410973277220599389820667868832085164161525386419144512343 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,moderate,4099,10322096095657499356,215.916477,214.139415,214.010728,,,,Both,yes,"[6.41522527712225,1.7805827027046056e-16,-9.8842195689597157e-33,5.4868440729548083e-49]",2.0035353563990952644690935484747843529003715927775366089476216527818344375259587,2.003535356399095264469093548474784352900371592777536608947621652706299381724742 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,moderate,4099,10322096095657499356,238.982401,237.123379,237.006206,,,,No,no,"[1.7276029251355596,4.7950613622381721e-17,-2.6617937644236434e-33,1.4775923620333994e-49]",1.0034231740848004098518884695801641614754221665384765735216332616039977910239888,1.0034231740848004098518884695801641614754221665384765735216332616039977865001517 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,cancellation,4098,10322096095657499336,236.076178,207.415037,207.000000,180.000000,27.000000,yes,Both,yes,"[-5.0621342944708729e-265,-1.4050245118665463e-281,7.7994528161848061e-298,-4.3295660482073704e-314]",-5.0621342944708730086760504274075663829189583933818324664504818055859676107573498e-265,-5.0621342944708730086760504274075663829189583933818324664512723106193136052280323e-265 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,qdpp,qdreal,qdpp qd_real,qdpp log1p,cancellation,4098,10322096095657499336,235.590230,203.445411,203.000000,,,,NaN,no,"[3.8562355730696869e-262,1.0703203804001379e-278,-5.9414716502289462e-295,3.2981793131207609e-311]",3.8562355730696870232090014097598983536869063470484289063758982684620955043081289e-262,3.8562355730696870232090014097598983536869063470484289063759109165426290402196599e-262 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,cancellation,4098,10322096095657499336,238.872001,214.422148,214.038287,,,,Both,yes,"[-6.7120113773945228e-52,-1.8629573931823525e-68,1.0341490959033542e-84,-5.740680685835965e-101]",-6.7120113773945229817850149786925294797764714981430850996810490629669129817421558e-52,-6.7120113773945229817850149786925294797764714981430850996810490627186522025624531e-52 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,cancellation,4098,10322096095657499336,261.132145,237.419995,237.015621,,,,No,no,"[-9.7261871007756405e-35,-2.6995592152733285e-51,1.4985563985677344e-67,-8.3186590869462584e-84]",-9.7261871007756407664559632195888426285653472784067580211618203539513215255828672e-35,-9.7261871007756407664559632195888426285653472784067580211618203539513214820185222e-35 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,near_one,4099,10322096095657499359,218.148772,215.130203,214.362894,180.000000,34.362894,yes,Both,yes,"[1.423134563497126,3.9499918988359527e-17,2.1926859765852584e-33,1.2171852284888254e-49] ; [1.1927685344842596,3.310597725082075e-17,1.8377509098288919e-33,1.0201566868089328e-49]",1.5233053480043329261431287201279001410110702760486984367539772844096336550706452,1.5233053480043329261431287201279001410110702760486984367539772843646426383376926 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,qdpp,qdreal,qdpp qd_real,qdpp pow,near_one,4099,10322096095657499359,217.612889,214.507067,213.884045,,,,No,no,"[0.56465331452162981,1.5672277767820592e-17,8.6998618130776872e-34,4.8293934479680041e-50] ; [1.308724409763804,3.6324399315218581e-17,2.0164092237716969e-33,1.1193319736489387e-49]",0.47331567754885921919725130297346743650975597253860946110241115439086285093499742,0.47331567754885921919725130297346743650975597253860946110241115437138066828954228 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,near_one,4099,10322096095657499359,215.924402,214.174611,214.034283,,,,Both,yes,"[1.0020188856745866,2.7811610949629213e-17,1.5438545414097733e-33,8.5701142927262127e-50] ; [0.67487318784050987,1.8731493796067807e-17,1.0398067849008878e-33,5.772087168792116e-50]",1.0013620450437589245492610014243773686942214248275520503466520165881255161776408,1.001362045043758924549261001424377368694221424827552050346652016550984655411922 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,near_one,4099,10322096095657499359,238.916883,237.150631,237.018583,,,,No,no,"[1.0001982067740443,2.7761076958733429e-17,1.5410493413988385e-33,8.5545423045221195e-50] ; [0.76444938074723401,2.1217732591650551e-17,1.1778207626795018e-33,6.5382186480417261e-50]",1.0001515155089267348056115423971138300622949553626290284157870717867518582721827,1.0001515155089267348056115423971138300622949553626290284157870717867518627427509 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,moderate,4099,10322096095657499356,215.525556,212.047897,211.143117,180.000000,31.143117,yes,Both,yes,"[7.7504743381693961,2.1511887655005213e-16,1.1941496488868227e-32,6.6288621752109849e-49] ; [6.7867863554598733,1.8837116187608508e-16,1.0456700054511108e-32,5.8046345810586807e-49]",1085628.0458183651737754568233825992695775685017622680386092038233740053608370142,1085628.0458183651737754568233825992695775685017622680386092038236727288616449863 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,qdpp,qdreal,qdpp qd_real,qdpp pow,moderate,4099,10322096095657499356,215.123399,211.658837,210.563451,,,,No,no,"[3.9373570792794448,1.0928361213967244e-16,6.0664591205834804e-33,3.3675612968095294e-49] ; [6.6779325302611943,1.853498612997327e-16,1.0288984181302124e-32,5.7115335690428171e-49]",9434.9046319695249985422135793070845456275754612092834675473473550955018842531657,9434.9046319695249985422135793070845456275754612092834675473473512155814273180929 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,moderate,4099,10322096095657499356,215.935138,214.172189,214.028310,,,,Both,yes,"[2.5648686096017479,7.1189404637954309e-17,3.951805806920689e-33,2.1936928978453724e-49] ; [7.3758515152288862,2.0472100446058645e-16,1.1364298638826622e-32,6.3084530037708211e-49]",1040.4078088056214822957453194310414746378121362243328657421409210248312127986565,1040.4078088056214822957453194310414746378121362243328657421409210635803831145731 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,moderate,4099,10322096095657499356,238.932191,237.171612,237.009078,,,,No,no,"[0.7371316742375349,2.0459513922975039e-17,1.1357311714962925e-33,6.3045744818984312e-50] ; [2.2636267388646147,6.2828263116116299e-17,3.48766921543599e-33,1.9360453326266958e-49]",0.50138517166343568386581893387404724257046263632975310595489929845043169244947956,0.5013851716634356838658189338740472425704626363297531059548992984504316901935288 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,moderate,4099,10322096095657499356,217.158561,214.415804,213.656994,190.000000,23.656994,yes,Both,no,"[-5.6684636004037738,-1.5733147008544706e-16,8.7336510293493687e-33,-4.848150230912434e-49]",-188043.1576659602046428792992413117498177671151403368538232084353655121126605512,-188043.15766596020464287929924131174981776711514033685382320843537457138843934032 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,qdpp,qdreal,qdpp qd_real,qdpp npwr,moderate,4099,10322096095657499356,215.059104,212.801524,212.059765,,,,Both,no,"[-1.6564773418506284,-4.5976482117311103e-17,2.5522074518952777e-33,-1.4167597383570195e-49]",-34.22145718343254248282859373100912991782148871976998320056340727210943023192857,-34.221457183432542482828593731009129917821488719769983200563407277097680277445128 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",moderate,4099,10322096095657499356,215.987832,214.179832,214.020519,,,,Both,yes,"[-3.6234270472721093,-1.0057030339827603e-16,5.5827733213151837e-33,-3.0990617412935871e-49]",-8200.430509244412297875363007517859232142760219202884340409240903826050512248695,-8200.430509244412297875363007517859232142760219202884340409240904133122939385402 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,wide_exponent,4096,10322096095657499357,217.192977,214.383216,213.812882,190.000000,23.812882,yes,Both,no,"[3156983632.9860682,8.7623897942647695e-08,-4.8641034501666178e-24,2.7001198222668209e-40]",3125405070844307632059635814309662493597686949184087401837672866916,3125405070844307632059635814309662493597686949184087401837672867051.1497698219492 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,qdpp,qdreal,qdpp qd_real,qdpp npwr,wide_exponent,4096,10322096095657499357,215.034925,212.773859,212.051585,,,,Both,no,"[-9.5596245569648417e-08,-2.6533288224786072e-24,1.4728933753086521e-40,-8.1762006904276382e-57]",-7.2960172719911353618163838397248732636061880909367939710334008019108463679922758e-50,-7.2960172719911353618163838397248732636061880909367939710334008029803890701495117e-50 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",wide_exponent,4096,10322096095657499357,215.949957,214.206986,214.011863,,,,Both,yes,"[14787987098817744,0.41044909412418074,-2.2784501736660175e-17,1.2647939216325996e-33]",1.5465481333355751493406420880783518941005745731747866016820925042744984697072011e+113,1.5465481333355751493406420880783518941005745731747866016820925043327588542346558e+113 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,qdpp,qdreal,qdpp qd_real,qdpp fmod,moderate,4099,10322096095657499356,242.308487,211.105419,205.498921,,,,NaN,no,"[7.1899788224367311,1.9956200088091322e-16,1.1077916410912782e-32,6.1494789321341235e-49] ; [0.17529801831962688,4.8654974027403064e-18,2.7008936213880932e-34,1.4992971427641406e-50]",0.00276007133202904605284920081045968802292893049314657639401489600084294546258242,0.002760071332029046052849200810459688022928930493146576394014895962860674479543225 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,qdpp,qdreal,qdpp qd_real,qdpp fmod,wide_exponent,4096,10322096095657499357,157.385566,0.000000,0.000000,,,,NaN,no,"[1.2347084998878686e+21,34270.045131897481,1.9023696580187922e-12,1.0560272978403741e-28] ; [3.0778362709487343e-89,8.5427117350842915e-106,4.7421576305130505e-122,2.6324262938987323e-138]",0,1.4962362985274997261929338086936228014751652950478652582390850983028923547154329e-89 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,quotient_reduction,4,10322096095657499383,237.431134,217.724535,217.724535,190.000000,27.724535,yes,Both,yes,"scaled-reduction gap 58 lhs [5.4783870128486342e+104,1.2515701024950248e+86,2.5644796350277343e+70,3.0488942297143002e+54] ; scaled-reduction gap 58 rhs [1.0992042367473471e+87,7.6430960252403863e+68,8.308036160429468e+52,-8.4044243641695015e+36]",8.2176097775156019844573783110329841337664065872688377479267466170896765365317513e+86,8.217609777515601984457378311032984133766406587268837747926746617066064704117403e+86 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,qdpp,qdreal,qdpp qd_real,qdpp fmod,quotient_reduction,4,10322096095657499383,123.173400,0.000000,0.000000,,,,NaN,no,"maximum binary64 below 2^900 [8.452712498170643e+270,0,0,0] ; negative double divisor [-7.5,0,0,0]",2.5082282550565593277172994055176394775153826727023953721515087619155560275540737e+204,0.5 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,quotient_reduction,4,10322096095657499383,inf,inf,inf,,,,Both,yes,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,6.4695626425683503e-14,-4.5490848564960626e-30] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,-1.0491094474424749e-30,9.613833942740628e-48]",134.96799785736252690998070323801097276000000000069696182420374612820625148544072,134.96799785736252690998070323801097276000000000069696182420374612820625148544072 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,quotient_reduction,4,10322096095657499383,inf,inf,inf,,,,No,no,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,6.4695626425683503e-14,-4.5490848564960626e-30] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,-1.0491094474424749e-30,9.613833942740628e-48]",134.96799785736252690998070323801097275999999999972664787995535221851974311276988,134.96799785736252690998070323801097275999999999972664787995535221851974311276988 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,qdpp,qdreal,qdpp qd_real,qdpp drem,moderate,4099,10322096095657499356,241.943486,210.446918,205.498921,,,,NaN,no,"[7.1899788224367311,1.9956200088091322e-16,1.1077916410912782e-32,6.1494789321341235e-49] ; [0.17529801831962688,4.8654974027403064e-18,2.7008936213880932e-34,1.4992971427641406e-50]",0.00276007133202904605284920081045968802292893049314657639401489600084294546258242,0.002760071332029046052849200810459688022928930493146576394014895962860674479543225 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remainder,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,tlfloat,tloct,TLFloat Octuple,tlfloat::remainder,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,near_one,4099,10322096095657499359,217.088527,214.653889,213.844482,180.000000,33.844482,yes,Both,yes,"[0.76562636076402268,2.1250400349504614e-17,-1.1796341875261248e-33,6.5482851781324668e-50]",0.84264914336815803011264269143612462086913967383298160440244808238970820494154117,0.84264914336815803011264269143612462086913967383298160440244808235405953256955333 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,qdpp,qdreal,qdpp qd_real,qdpp sinh,near_one,4099,10322096095657499359,216.789555,214.156966,212.946933,,,,NaN,no,"[0.53019894096351738,1.4715976797239277e-17,-8.1690081350723071e-34,4.534710459953743e-50]",0.55539122289270886779105567524999850401374993402945589954958343593492898173560863,0.55539122289270886779105567524999850401374993402945589954958343589115814564205908 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,near_one,4099,10322096095657499359,215.975034,214.162104,214.012511,,,,Both,yes,"[1.4504430962981512,4.0257883035470264e-17,-2.2347614334322787e-33,1.2405417989704175e-49]",2.0152687650487900870785030962782558225880631209188005099886950034018742263533812,2.0152687650487900870785030962782558225880631209188005099886950033259906440226229 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,near_one,4099,10322096095657499359,238.935804,237.151916,237.012513,,,,No,no,"[0.88298360331457626,2.4507718169158206e-17,-1.3604516496211864e-33,7.5520237264935862e-50]",1.0022782039402745822682661730648698672338759932522803568394909240974045054810381,1.0022782039402745822682661730648698672338759932522803568394909240974045099800009 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,moderate,4099,10322096095657499356,216.956723,214.597984,213.993459,180.000000,33.993459,yes,Both,yes,"[0.054297296667996875,1.5070527233928231e-18,-8.3658231641737974e-35,4.6439647484041155e-51]",0.054323980450469496887448171808625498827811228200332436943033541994792104072246549,0.054323980450469496887448171808625498827811228200332436943033541996864828986916269 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,qdpp,qdreal,qdpp qd_real,qdpp sinh,moderate,4099,10322096095657499356,216.768952,214.332225,213.240650,,,,NaN,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50]",-0.37418270126396680750781067812470790778554307856767686653750348529134531402422982,-0.3741827012639668075078106781247079077855430785676768665375034852672877442450651 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,moderate,4099,10322096095657499356,215.967539,214.177379,214.011597,,,,Both,yes,"[-5.5514961198525494,-1.5408497033443795e-16,8.5534340906988609e-33,-4.7481097335538075e-49]",-128.8094102575669040651947452858902507112406883868292013207128384184002201202949,-128.80941025756690406519474528589025071124068838682920132071283842325352333323063 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,moderate,4099,10322096095657499356,238.939197,237.158124,237.030088,,,,No,no,"[-5.5510124539006611,-1.5407154590753761e-16,8.5526888853070031e-33,-4.7476960614617498e-49]",-128.74712271806391331797118607582008799679652337863704645234129240331062931682242,-128.74712271806391331797118607582008799679652337863704645234129240331062988773716 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,near_one,4099,10322096095657499359,217.861158,215.239353,214.487635,180.000000,34.487635,yes,Both,-,"[1.4303433203278892,3.9700002183670459e-17,-2.2037928250989968e-33,1.2233507679643134e-49]",2.2096804236627024779285628784238115118483853203461617013356271627432691873521909,2.2096804236627024779285628784238115118483853203461617013356271626834118164339315 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,qdpp,qdreal,qdpp qd_real,qdpp cosh,near_one,4099,10322096095657499359,217.575031,214.997764,214.207070,,,,NaN,-,"[1.4762075238667678,4.0972989553044397e-17,-2.2744578194757946e-33,1.2625777198603775e-49]",2.302409864481417699686931953389152575418423805138517988848533827927814693594248,2.3024098644814176996869319533891525754184238051385179888485338280035728255131427 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,near_one,4099,10322096095657499359,215.895184,214.199617,214.003441,,,,Both,-,"[1.3180360250850454,3.6582848558370944e-17,-2.0307560387939318e-33,1.1272960558328004e-49]",2.0018685354727893365634159209739845210019868831427185249101991568056016815303039,2.0018685354727893365634159209739845210019868831427185249101991568814560681262869 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,near_one,4099,10322096095657499359,238.918901,237.169391,237.024615,,,,No,-,"[1.3282510733457995,3.6866373102789604e-17,-2.0464948126569296e-33,1.1360328303938347e-49]",2.0196883083061335896151725290956785491903675387304527995513844467881401418108314,2.0196883083061335896151725290956785491903675387304527995513844467881401328207091 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,moderate,4099,10322096095657499356,217.160103,214.737937,214.159072,180.000000,34.159072,yes,Both,-,"[6.9851955939094275,1.9387812449671103e-16,-1.0762397889369559e-32,5.9743309684776362e-49]",540.25933261817616200059910469729467236382875532751465730859323173250980707379319,540.25933261817616200059910469729467236382875532751465730859323171413182761114806 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,qdpp,qdreal,qdpp qd_real,qdpp cosh,moderate,4099,10322096095657499356,216.955312,214.536693,213.837789,,,,NaN,-,"[-6.7926478357212208,-1.8853385063469843e-16,1.0465731094794119e-32,-5.8096478154879388e-49]",445.63574988022346778368624832716917203617809044632604045304376455196844104441602,445.6357498802234677836862483271691720361780904463260404530437645330279442492149 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,moderate,4099,10322096095657499356,215.937394,214.168922,214.000831,,,,Both,-,"[-0.024915825742571229,-6.9155308542376918e-19,3.8388907909401814e-35,-2.1310124725616338e-51]",1.000310415244491850132172673423459542053002904846742529807535702649493788255194,1.0003104152444918501321726734234595420530029048467425298075357026874659704667725 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,moderate,4099,10322096095657499356,238.922878,237.131226,237.021921,,,,No,-,"[1.3188743183318685,3.6606115869971215e-17,-2.0320476340469193e-33,1.128013035226982e-49]",2.0033230139496671007944620881086192005631920629659234114985427470911686576898421,2.0033230139496671007944620881086192005631920629659234114985427470911686487559028 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,near_one,4099,10322096095657499359,218.404442,215.222392,214.209524,180.000000,34.209524,yes,Both,yes,"[0.51562981029195787,1.4311602189230828e-17,-7.9445351348799311e-34,4.4101029133436116e-50]",0.47432005334068853744838691469119725073611186863535411854720463894651210203082909,0.47432005334068853744838691469119725073611186863535411854720463896209252928278415 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,qdpp,qdreal,qdpp qd_real,qdpp tanh,near_one,4099,10322096095657499359,218.125341,214.939214,214.034113,,,,Both,no,"[0.50145288441688241,1.3918113451108005e-17,-7.7261050063826027e-34,4.2888498343788288e-50]",0.4632590074710471540677760580947758421609680024744328209862896713814575412529895,0.46325900747104715406777605809477584216096800247443282098628967139864199252464697 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,near_one,4099,10322096095657499359,216.043702,214.274158,214.038640,,,,Both,yes,"[0.55314229628883105,1.5352782830847263e-17,-8.5225064954382105e-34,4.7309414693764765e-50]",0.50287159194838804027667682401213462167675591678250746227332787661254617641690965,0.50287159194838804027667682401213462167675591678250746227332787663114160978543072 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,near_one,4099,10322096095657499359,239.022015,237.196358,237.059834,,,,Inf,no,"[0.5576392959998614,1.5477599646370227e-17,-8.5917937466652033e-34,4.769403620189074e-50]",0.50622378780329080187492227056864090769531648311133563532633056169725103618142473,0.50622378780329080187492227056864090769531648311133563532633056169725103398244205 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,moderate,4099,10322096095657499356,219.852666,215.378850,214.042672,180.000000,34.042672,yes,Both,yes,"[-0.049004188243731761,-1.3601394522814103e-18,7.5502906831193558e-35,-4.1912532795059553e-51]",-0.048964999496442407695752174462954719514280073534987354591187902322123112147473692,-0.048964999496442407695752174462954719514280073534987354591187902320317513639311405 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,qdpp,qdreal,qdpp qd_real,qdpp tanh,moderate,4099,10322096095657499356,219.762416,214.599863,212.926362,,,,Both,no,"[0.4300835480404146,1.1937216438673698e-17,-6.6264862700747261e-34,3.6784388146997172e-50]",0.40539112864517538062152182337242215635371996648169563288338521428356954926607425,0.40539112864517538062152182337242215635371996648169563288338521425116153227311076 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,moderate,4099,10322096095657499356,216.350781,214.574367,214.097308,,,,Both,yes,"[-0.55244142124230144,-1.5333329640496203e-17,8.5117078055231293e-34,-4.7249469922867211e-50]",-0.50234776953455832738474068141498014652395776826959763064097809403595245870991342,-0.50234776953455832738474068141498014652395776826959763064097809405378826341441138 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,moderate,4099,10322096095657499356,239.361623,237.532781,237.128013,,,,Inf,no,"[-0.57881872838935244,-1.6065446983552846e-17,8.918114571017569e-34,-4.9505480664944029e-50]",-0.52180632683237750628821439192870733596394500691724064619963052884427795607515043,-0.52180632683237750628821439192870733596394500691724064619963052884427795391310627 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,near_one,4099,10322096095657499359,216.635189,213.881562,212.956798,180.000000,32.956798,yes,Both,yes,"[1.1332197959754742,3.1453167736324843e-17,-1.7460015509132478e-33,9.6922556142756011e-50]",0.97250944030282146673684576741712972459065785505278761629557943342964766102358922,0.97250944030282146673684576741712972459065785505278761629557943335352570304596911 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,qdpp,qdreal,qdpp qd_real,qdpp asinh,near_one,4099,10322096095657499359,216.415989,213.748418,212.729910,,,,NaN,no,"[0.51219531759267378,1.4216275867414523e-17,-7.8916183962132866e-34,4.380728222515721e-50]",0.49209295889781557619335492062425050518716114803411505818752064220215925285806896,0.49209295889781557619335492062425050518716114803411505818752064215708140967221009 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,near_one,4099,10322096095657499359,215.876528,214.126921,214.013004,,,,Both,yes,"[1.1875368477178503,3.2960768773178392e-17,-1.8296902200664262e-33,1.015682105124608e-49]",1.0079699008676541316864431653897165142746758838264996787682714615557319327196561,1.0079699008676541316864431653897165142746758838264996787682714615177904855312488 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,near_one,4099,10322096095657499359,238.909508,237.158686,237.032021,,,,No,no,"[0.53019894096351738,1.4715976797239277e-17,-8.1690081350723071e-34,4.534710459953743e-50]",0.5080581849197998622111617267798195476409931094147435536188404419103933361747497,0.50805818491979986221116172677981954764099310941474355361884044191039333392483875 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,moderate,4099,10322096095657499356,217.749152,214.561309,213.166747,180.000000,33.166747,yes,Both,yes,"[-1.1129700329637249,-3.089112390785367e-17,1.7148018509523894e-33,-9.519062487985893e-50]",-0.95904342784556441854164089194266034008522852163619683195211288936138295400619663,-0.95904342784556441854164089194266034008522852163619683195211288929648167565369013 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,qdpp,qdreal,qdpp qd_real,qdpp asinh,moderate,4099,10322096095657499356,217.303989,214.201948,0.000000,,,,NaN,no,"midpoint [0,0,0,0]",0.010530563626045119041838075907720498032440480253679950729852028848942674760935307,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,moderate,4099,10322096095657499356,215.877848,214.173161,214.033343,,,,Both,yes,"[-3.6635680838067728,-1.0168444097310361e-16,5.6446203807238641e-33,-3.1333937559740255e-49]",-2.0097113700181062349692108160003517092300304063443186921409136491157467461994281,-2.0097113700181062349692108160003517092300304063443186921409136490411573171997093 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,moderate,4099,10322096095657499356,238.871807,237.170538,237.026506,,,,No,no,"[3.7225679300655514,1.0332201566724962e-16,-5.7355240372230841e-33,3.1838554222080507e-49]",2.0251321587728640177526991897930401616261596463681306941092379777810078632497695,2.0251321587728640177526991897930401616261596463681306941092379777810078722523164 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,moderate,4099,10322096095657499275,218.344248,215.313498,214.386548,180.000000,34.386548,yes,Both,-,"[1.2091565801750435,3.3560836892183684e-17,-1.8630006921695854e-33,1.0341731316696386e-49]",0.63599796632531509013285885414670992566643851908950877932499299079883667837099078,0.63599796632531509013285885414670992566643851908950877932499299078035785994962717 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,qdpp,qdreal,qdpp qd_real,qdpp acosh,moderate,4099,10322096095657499275,217.694736,214.740758,0.000000,,,,NaN,-,"lower endpoint [1,0,0,0]",0.010530563626045119041838075907720498032440480253679950729852028848942674760935307,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,moderate,4099,10322096095657499275,216.070027,214.284491,214.051325,,,,Both,-,"[3.9804489193453434,1.1047965096503807e-16,-6.1328526126968082e-33,3.4044170886242721e-49]",2.0583757948565598827690570382144203121626552510542194966987158277315739908333351,2.0583757948565598827690570382144203121626552510542194966987158278070232872093508 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,moderate,4099,10322096095657499275,239.001647,237.267792,237.031139,,,,No,-,"[3.8470512568523638,1.0677712205676603e-16,-5.9273209705316151e-33,3.290324107913864e-49]",2.0231171805463747601489123488705841544306082856720398407062424076130979843332333,2.0231171805463747601489123488705841544306082856720398407062424076130979753684794 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,boundary,4101,10322096095657499355,217.097508,214.442677,213.709421,180.000000,33.709421,yes,Both,-,"[1.0000006102559529,2.7755592553634159e-17,-1.5407448957579594e-33,8.552852291720866e-50]",0.0011047677501095367049219422532381969737795314787741324983406649673871900506886361,0.0011047677501095367049219422532381969737795314787741324983406649674385145712399472 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,qdpp,qdreal,qdpp qd_real,qdpp acosh,boundary,4101,10322096095657499355,216.265131,213.614093,0.000000,,,,NaN,-,"[1,0,0,0]",0.010530563626045119041838075907720498032440480253679950729852028848942674760935307,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,boundary,4101,10322096095657499355,215.787044,214.197277,214.011139,,,,Both,-,"[1.0000004798826352,2.7755588935047681e-17,-1.5407446948860582e-33,8.5528511766578175e-50]",0.00097967606567821465227959033002276095886277869454081491023270410424438341810175862,0.00097967606567821465227959033002276095886277869454081491023270410428130755329103443 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,boundary,4101,10322096095657499355,238.744483,237.183996,237.009868,,,,No,-,"[1.0000004776948863,2.7755588874325452e-17,-1.5407446915152973e-33,8.5528511579463359e-50]",0.00097744038008420457683225652626186507017705275000499519763155267944135176427726761,0.00097744038008420457683225652626186507017705275000499519763155267944135175988174397 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,moderate,4099,10322096095657499356,217.309730,214.164921,213.300563,180.000000,33.300563,yes,Both,yes,"[0.0664478289398438,1.8442977406342098e-18,-1.0237909079581275e-34,5.6831811920850375e-51]",0.066545884848946356015107328012468534613321875154290452987163116978656391412156697,0.066545884848946356015107328012468534613321875154290452987163116974551954049134186 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,qdpp,qdreal,qdpp qd_real,qdpp atanh,moderate,4099,10322096095657499356,216.761561,213.781125,212.510651,,,,Both,no,"[-0.2731802849224898,-7.5822760548652169e-18,4.2090087275876802e-34,-2.336469200108038e-50]",-0.28029737430197434584944109663332529015622293813932679199027623014585727329302096,-0.28029737430197434584944109663332529015622293813932679199027623011596639445887419 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,moderate,4099,10322096095657499356,215.932351,214.156626,214.025325,,,,Both,yes,"[0.12618792670327883,3.5024185413922945e-18,-1.9442328532638911e-34,1.0792660394631177e-50]",0.12686417947725704533840398589369902988592505310826906137934256718603520690203447,0.12686417947725704533840398589369902988592505310826906137934256719076995026763113 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,moderate,4099,10322096095657499356,238.915006,237.181152,237.021503,,,,No,no,"[-0.7623611238227983,-2.1159771818679515e-17,1.174603293445626e-33,-6.5203581059193663e-50]",-1.0018287711046037863407528808033263139274032426947019005363253548223660872400857,-1.0018287711046037863407528808033263139274032426947019005363253548223660917090963 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,boundary,4105,10322096095657499355,219.259597,215.988400,215.075845,180.000000,35.075845,yes,Both,yes,"[0.5,0,0,0]",0.54930614433405484569762261846126285232374527891137472586734716682864483823413374,0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,qdpp,qdreal,qdpp qd_real,qdpp atanh,boundary,4105,10322096095657499355,218.580247,215.278441,0.000000,,,,Both,no,"[-0,0,0,0]",0.0052652818130225595209190379538602490162202401268399753649260144244713373804676535,0 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,boundary,4105,10322096095657499355,216.450204,214.939072,214.927397,,,,Both,yes,"[0.99899936812791412,2.7727802502039826e-17,-1.5392022380011819e-33,8.5442888209174113e-50]",3.7998851729337611663249931195429297240812819127904226139496092933273189181688645,3.7998851729337611663249931195429297240812819127904226139496092934032076288278974 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,boundary,4105,10322096095657499355,239.378421,237.945757,237.372096,,,,No,no,"[-0.5,0,0,0]",-0.54930614433405484569762261846126285232374527891137472586734716681874714853103911,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,near_one,4099,10322096095657499359,206.773984,196.847186,196.755396,180.000000,16.755396,yes,Both,yes,"midpoint [1,0,0,0]",0.84270079294971486934122063508260925929606699796630290845993292736409039503759438,0.84270079294971486934122063508260925929606699796630290845993789783471725409601084 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,near_one,4099,10322096095657499359,216.124506,214.293135,214.075088,,,,Both,yes,"[0.50336696437385697,1.3971239842088173e-17,-7.7555960776233127e-34,4.3052206675349773e-50]",0.52345372074479726111600097852706905117450908422992738618016813909422569460796212,0.52345372074479726111600097852706905117450908422992738618016813911309932932453575 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,near_one,4099,10322096095657499359,239.118725,237.303421,237.115344,,,,Inf,no,"[0.50440030951221848,1.3999920931213008e-17,-7.7715172803821719e-34,4.3140587104762828e-50]",0.52435827293177729902931721378772892866957455051554486973327695504018796785804493,0.52435827293177729902931721378772892866957455051554486973327695504018797004982547 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,moderate,4099,10322096095657499356,218.790808,197.061585,196.771033,180.000000,16.771033,yes,Both,yes,"[-1.0144931263435488,-2.8157840679764146e-17,1.5630741523200512e-33,-8.6768045655108495e-50]",-0.84863022897531701967121795328975048026375710416395760800302401037790857858953723,-0.84863022897531701967121795328975048026375710416395760800302896186126856971311395 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,moderate,4099,10322096095657499356,216.403367,214.532827,214.069380,,,,Both,yes,"[0.49346633937062734,1.3696442296169046e-17,-7.6030527963283613e-34,4.2205421359622138e-50]",0.51473949480729290589930415570243436715546197426142443535432835089464450449797338,0.51473949480729290589930415570243436715546197426142443535432835087601149756190686 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,moderate,4099,10322096095657499356,239.359861,237.617935,237.090794,,,,Inf,no,"[-0.47786661764019733,-1.3263463040097327e-17,7.362701026690414e-34,-4.0871201016314884e-50]",-0.50083582704760106751455089603854051657987806254960622390375258121165593721448514,-0.5008358270476010675145508960385405165798780625496062239037525812116559393438727 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,near_one,4099,10322096095657499359,204.316189,192.489437,192.327065,180.000000,12.327065,yes,Both,-,"upper endpoint [1.5,0,0,0]",0.033894853524689272933023738354052141318589520742363219550036458011854403217248196,0.033894853524689272933023738354052141318589520742363219550032153557867145576249274 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,near_one,4099,10322096095657499359,215.962914,214.214759,214.049312,,,,Both,-,"[1.3096161398234563,3.6349149796317988e-17,-2.0177831514710525e-33,1.1200946567319361e-49]",0.064014780147894919119338175302722908573997859037616218424476112030574651226502498,0.06401478014789491911933817530272290857399785903761621842447611203292437484990314 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,near_one,4099,10322096095657499359,238.949059,237.201029,237.018916,,,,Inf,-,"[1.0806471778377253,2.9993984458290972e-17,-1.665000607292187e-33,9.2426100511532716e-50]",0.12644653397051708186289826438531152353975365396358757108160639230306320626900367,0.12644653397051708186289826438531152353975365396358757108160639230306320570393172 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,moderate,4099,10322096095657499356,212.004213,191.066815,189.779688,180.000000,9.779688,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804748240804760826674822248354380927724048326045650379,0.0048523201680211414554273497804748240804760826674822248354416949961916711523801507 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,moderate,4099,10322096095657499356,216.176403,214.211875,214.017843,,,,Both,-,"[2.0385700159174238,5.6581684224549895e-17,-3.1409144299082644e-33,1.7435577592307763e-49]",0.0039394074968276384481347790714740376120684431886149943479747901319899962283757329,0.0039394074968276384481347790714740376120684431886149943479747901321377846972976984 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,moderate,4099,10322096095657499356,239.156924,237.247098,237.053891,,,,Inf,-,"[2.7148354940083514,7.5351821837942075e-17,-4.1828663775967986e-33,2.3219572806691949e-49]",0.00012335686434239937630508063868305400773768378433940295041562371963596822400780945,0.00012335686434239937630508063868305400773768378433940295041562371963596822454587035 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,moderate,4099,10322096095657499323,211.903615,199.617279,199.225949,180.000000,19.225949,yes,Both,-,"[1.7460150498866698,4.8461652743155553e-17,-2.6901621343420086e-33,1.4933399707606258e-49]",-0.085381213564840179500933244532026946446305041549633331800426988753669607008088582,-0.085381213564840179500933244532026946446305041549633331800426897893008666204246091 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lgamma,moderate,4099,10322096095657499323,215.890428,214.160879,214.017847,,,,Both,-,"[7.74079219922106,2.1485014321035056e-16,-1.1926578791807172e-32,6.6205811898352019e-49]",8.0072162948217682208947020187449574175934900903935011829091132045478040802147141,8.0072162948217682208947020187449574175934900903935011829091132048481971689346261 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::lgamma,moderate,4099,10322096095657499323,238.928241,237.162122,237.008749,,,,No,-,"[1.1318513409309559,3.1415185478860126e-17,-1.7438931120750193e-33,9.6805514275545252e-50]",-0.062652393316471695509535673477178105406035057306309915447779751850677317855172516,-0.062652393316471695509535673477178105406035057306309915447779751850677317573207638 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,moderate,4099,10322096095657499320,209.040528,202.582542,202.457020,180.000000,22.457020,yes,Both,-,"[14.307075507958793,3.9710111609966271e-16,-2.2043540109909649e-32,1.2236622887134923e-48]",13896751262.208085922946362879642934303109153237904876709680644672275751079246188,13896751262.208085922946362879642934303109153237904876709680646247264671220863527 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tgamma,moderate,4099,10322096095657499320,215.948239,214.171703,214.004992,,,,Both,-,"[10.766069372828035,2.9881845256063508e-16,-1.6587756310783857e-32,9.2080544915517407e-49]",2098826.7589879936401111657394716259122087725619967530347101090490263605459620521,2098826.7589879936401111657394716259122087725619967530347101090489469177047214057 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::tgamma,moderate,4099,10322096095657499320,238.919522,237.194896,237.040555,,,,No,-,"[9.228183461064674,2.561335438484767e-16,-1.4218267887970798e-32,7.8927241897568378e-49]",65913.214264422430470574974300151351193626993297660765946673758139122704576039683,65913.214264422430470574974300151351193626993297660765946673758139122704866211491 diff --git a/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f256_benchmark.csv b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f256_benchmark.csv new file mode 100644 index 0000000..dbb6af0 --- /dev/null +++ b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f256_benchmark.csv @@ -0,0 +1,294 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,40960,10.155579,10.154053|10.171570|10.146790|10.148804|10.167114|10.155579|10.181396,11468800,116531700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,qdpp,qdreal,qdpp qd_real,qdpp operator+,40960,22.873779,22.907959|22.823975|22.873779,1228800,28100900.000000,2.252336 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator+,40960,94.700928,94.877930|94.700928|94.604492,245760,23280300.000000,9.325015 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,40960,59.771729,60.059204|59.744263|59.771729,491520,29421600.000000,5.885605 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,40960,10.070246,10.068803|10.168346|10.070246,2703360,27310600.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,qdpp,qdreal,qdpp qd_real,qdpp operator-,40960,23.742947,23.789334|23.742947|23.712294,1105920,26263600.000000,2.357733 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator-,40960,101.440430,101.440430|101.622314|100.843506,245760,24896000.000000,10.073282 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,40960,60.048828,60.048828|60.095825|59.742432,491520,29472700.000000,5.962995 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,40960,24.861925,24.861925|24.849989|24.893121,1105920,27502400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,qdpp,qdreal,qdpp qd_real,qdpp operator*,40960,31.213379,31.113979|31.265695|31.213379,860160,26835000.000000,1.255469 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator*,40960,187.490234,188.173828|187.397461|187.490234,122880,23063000.000000,7.541260 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,40960,111.009521,110.260010|111.009521|111.367188,245760,27249600.000000,4.465041 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,40960,91.455078,91.455078|91.289876|91.538900,368640,33704000.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,qdpp,qdreal,qdpp qd_real,qdpp operator/,40960,234.033203,233.859863|234.033203|234.389648,122880,28765500.000000,2.558996 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,40960,241.745605,244.750977|240.490723|241.745605,122880,29777400.000000,2.643326 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,40960,261.638184,266.440430|261.638184|260.893555,122880,32316300.000000,2.860838 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,40960,31.482980,31.535645|31.446010|31.482980,860160,27084900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,40960,214.956055,215.561523|214.956055|213.984375,122880,26398800.000000,6.827691 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,40960,144.881592,144.989014|144.881592|143.458252,245760,35498300.000000,4.601902 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,40960,3.211385,3.247233|3.230937|3.211385|3.217794|3.196655|3.193542|3.187968,34406400,110520800.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,qdpp,qdreal,qdpp qd_real,qdpp abs,40960,3.236442,3.272663|3.260245|3.251637|3.236442|3.228107|3.219710|3.216953,33259520,107788200.000000,1.007802 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,40960,67.891235,67.937622|67.891235|67.871704,491520,33374300.000000,21.140795 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,40960,5.203296,5.391206|5.234142|5.210348|5.203296|5.193917|5.181672|5.185973,18063360,94447000.000000,1.620265 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,40960,3.094694,3.155407|3.133091|3.103996|3.094694|3.080207|3.074235|3.063037,34693120,107571800.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,qdpp,qdreal,qdpp qd_real,qdpp fabs,40960,3.142592,3.292750|3.223843|3.170497|3.142592|3.117516|3.094631|3.080256,30679040,96954900.000000,1.015477 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fabs,40960,67.728882,67.721558|67.809448|67.728882,491520,33302100.000000,21.885484 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,40960,5.201098,5.308788|5.243873|5.207386|5.201098|5.195112|5.176617|5.191333,20930560,109210300.000000,1.680650 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,40960,22.543213,22.547119|22.479736|22.543213,1228800,27676700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,qdpp,qdreal,qdpp qd_real,qdpp sqr,40960,14.665039,14.655273|14.667806|14.665039,1843200,27026300.000000,0.650530 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,4096,87.694336,87.753906|87.694336|87.426758,307200,26918400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,qdpp,qdreal,qdpp qd_real,qdpp inv,4096,231.254883,229.729004|231.542969|231.254883,122880,28365900.000000,2.637056 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,40960,1.167173,1.164218|1.172936|1.169669|1.167173|1.165938|1.169496|1.166264,100925440,117876500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,qdpp,qdreal,qdpp qd_real,qdpp min,40960,3.314775,3.294906|3.317970|3.314576|3.315886|3.297109|3.314775|3.327101,35266560,116794400.000000,2.840004 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,40960,76.494954,76.562500|76.265462|76.494954,368640,28179200.000000,65.538687 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,40960,13.565732,13.789179|13.598284|13.545852|13.566662|13.565732|13.526553|13.550618,6021120,81838100.000000,11.622731 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,40960,1.180177,1.179256|1.186202|1.180177|1.171083|1.184974|1.181662|1.167421,98058240,115579500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,qdpp,qdreal,qdpp qd_real,qdpp max,40960,1.541578,1.750531|1.600130|1.559836|1.541578|1.524340|1.522111|1.500191,65945600,103616700.000000,1.306226 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,40960,75.718587,76.360677|75.718587|75.572103,368640,27973800.000000,64.158659 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,40960,12.197478,12.343113|12.294391|12.387801|12.153639|12.169136|12.141962|12.197478,6594560,80724500.000000,10.335294 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,40960,7.061867,7.456912|7.174039|7.077175|7.061867|7.058897|7.046756|7.029270,10608640,75631900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,40960,71.795247,71.795247|71.709798|72.104492,368640,26494100.000000,10.166611 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,40960,57.901001,57.901001|57.864990|58.005981,491520,28470800.000000,8.199107 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,40960,0.698238,0.697887|0.697883|0.698458|0.699342|0.698610|0.696579|0.698238,165437440,115498900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::copysign,40960,73.608398,73.815918|73.608398|73.138021,368640,27102700.000000,105.420219 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,tlfloat,tloct,TLFloat Octuple,tlfloat::copysign,40960,8.743427,8.910131|8.757324|8.745555|8.730469|8.736103|8.717072|8.743427,11182080,97987100.000000,12.522131 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,40960,0.990982,0.989993|0.990946|0.994261|0.990970|0.990982|0.996480|0.992019,116121600,115220000.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,qdpp,qdreal,qdpp qd_real,qdpp floor,40960,0.987674,0.992833|0.986915|0.988847|0.987674|0.987986|0.987663|0.985215,116981760,115596900.000000,0.996663 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::floor,40960,62.894897,62.964478|62.862549|62.894897,491520,30920200.000000,63.467254 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,tlfloat,tloct,TLFloat Octuple,tlfloat::floor,40960,7.010333,7.096244|7.028479|7.019769|6.992517|6.989548|7.003009|7.010333,10608640,74472500.000000,7.074129 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,40960,0.993219,0.993845|0.996280|0.993219|0.991482|0.992438|0.992365|0.999329,116408320,115725800.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,qdpp,qdreal,qdpp qd_real,qdpp ceil,40960,0.985926,0.985500|0.985926|0.984109|0.984337|1.000599|0.992681|0.991445,116695040,115438000.000000,0.992657 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ceil,40960,63.427124,63.577881|63.358154|63.427124,491520,31189100.000000,63.860135 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,tlfloat,tloct,TLFloat Octuple,tlfloat::ceil,40960,7.012939,7.100123|7.049625|7.013646|7.012939|7.010627|7.000218|6.981522,10895360,76530100.000000,7.060816 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,40960,2.898633,2.950801|2.932617|2.914941|2.898633|2.881816|2.861113|2.852441,35840000,103896900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,qdpp,qdreal,qdpp qd_real,qdpp aint,40960,2.545459,2.602327|2.547738|2.556722|2.531494|2.545459|2.511849|2.527979,43008000,109508000.000000,0.878158 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::trunc,40960,63.571777,63.571777|63.918457|63.418579,491520,31278500.000000,21.931642 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,tlfloat,tloct,TLFloat Octuple,tlfloat::trunc,40960,6.192220,6.252151|6.182513|6.192220|6.194080|6.218727|6.187802|6.181989,12042240,74678200.000000,2.136255 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,40960,12.179871,12.182770|12.179871|12.144318,1966080,23925200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,qdpp,qdreal,qdpp qd_real,qdpp round,40960,8.586789,8.609905|8.603827|8.579621|8.586789|8.664551|8.581127|8.573128,13475840,115890200.000000,0.704998 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::round,40960,158.040771,158.114014|157.941895|158.040771,245760,38838000.000000,12.975571 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,tlfloat,tloct,TLFloat Octuple,tlfloat::round,40960,12.130762,12.187402|12.169434|12.090039|12.130762|12.086230|12.121191|12.135156,7168000,86958300.000000,0.995968 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,40960,8.064173,8.034304|8.216735|8.104430|8.329766|8.064173|8.047291|8.049161,13475840,109435100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,tlfloat,tloct,TLFloat Octuple,tlfloat::rint,40960,18.282582,18.365146|18.259055|18.282582,1351680,24738800.000000,2.267137 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,4096,6.629689,6.733275|6.616057|6.629689,3895296,25941400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lround,4096,191.092936,191.092936|190.930176|191.251628,147456,28177600.000000,28.823817 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,4096,6.500470,6.491051|6.500470|6.505745,3981312,25874900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::llround,4096,320.553153,320.884487|320.553153|320.127651,86016,27570000.000000,49.312303 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,4096,145.747070,145.354818|145.747070|150.345052,184320,27122500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,4096,207.988281,208.984375|207.988281|206.618652,122880,25542300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,2048,77.974330,79.694475|77.876674|77.974330,215040,16883900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,qdpp,qdreal,qdpp qd_real,qdpp fmod,2048,315.834263,316.782924|315.614537|315.834263,86016,27187700.000000,4.050490 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,2048,219.011374,228.087661|219.011374|212.853286,104448,22976900.000000,2.808762 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,2048,609.577288,607.484654|609.577288|610.477121,43008,26199600.000000,7.817666 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,2048,105.609280,105.323457|105.609280|105.687881,251904,26586000.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,qdpp,qdreal,qdpp qd_real,qdpp drem,2048,321.349159,321.349159|320.699369|321.495643,79872,25653400.000000,3.042812 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remainder,2048,251.395910,251.637178|251.395910|249.764476,104448,26209400.000000,2.380434 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,tlfloat,tloct,TLFloat Octuple,tlfloat::remainder,2048,644.930013,644.930013|644.360352|646.411133,36864,23785900.000000,6.106755 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,2048,104.358803,104.381431|104.307593|104.358803,251904,26286000.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,qdpp,qdreal,qdpp qd_real,qdpp divrem,2048,322.930439,322.930439|322.532302|322.979267,79872,25783800.000000,3.094425 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remquo,2048,342.176232,342.172476|342.176232|342.386569,79872,27335800.000000,3.278844 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,tlfloat,tloct,TLFloat Octuple,tlfloat::remquo,2048,652.278646,652.384440|651.603190|652.278646,36864,24038600.000000,6.250346 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,40960,13.863678,13.926086|13.848572|13.863678,1966080,27288100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,40960,301.027832,301.330566|300.664062|301.027832,122880,36987800.000000,21.713418 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,40960,71.245117,71.242676|72.228190|71.245117,368640,26384300.000000,5.138977 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,40960,2.942383,2.898998|2.944661|2.882216|2.916468|3.005208|2.942383|2.976490,38707200,113724100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,qdpp,qdreal,qdpp qd_real,qdpp ldexp,40960,3.908852,3.901582|3.894097|3.923608|3.912179|3.908852|3.920201|3.898711,26091520,101977700.000000,1.328465 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ldexp,40960,55.805054,55.875854|55.705566|55.805054,491520,27424600.000000,18.965939 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,tlfloat,tloct,TLFloat Octuple,tlfloat::ldexp,40960,38.279785,38.231445|38.279785|38.308105,614400,23515000.000000,13.009791 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,40960,2.957711,2.884123|2.981196|2.891766|3.060090|2.957711|2.897578|2.971934,26378240,77794700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,qdpp,qdreal,qdpp qd_real,qdpp ldexp,40960,3.909421,3.966808|3.896765|3.903837|3.928110|3.909421|3.895390|3.916156,24944640,97699200.000000,1.321773 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbn,40960,55.822144,56.000366|55.739136|55.822144,491520,27453300.000000,18.873430 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,40960,2.970028,2.954922|2.933617|3.042545|2.964649|2.970028|3.020859|3.046360,36700160,109749100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,qdpp,qdreal,qdpp qd_real,qdpp ldexp,40960,3.923152,3.906813|3.945054|3.943787|3.923152|3.949233|3.921509|3.922847,29818880,117198400.000000,1.320914 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbln,40960,57.728882,57.980957|57.728882|57.578125,491520,28391500.000000,19.437151 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,40960,12.405599,12.237956|12.405599|12.414686,2211840,27322300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,40960,110.166016,111.717529|110.166016|109.989014,245760,27187000.000000,8.880346 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,40960,43.503906,43.639160|43.503906|43.481445,614400,26751900.000000,3.506796 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,40960,1.344994,1.349962|1.342333|1.355557|1.341197|1.348029|1.344994|1.343333,41287680,55593300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,40960,41.466878,41.466878|41.461995|41.468099,737280,30571800.000000,30.830520 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,40960,1.080385,1.080385|1.081073|1.080494|1.079931|1.079070|1.080964|1.077865,44728320,48305200.000000,0.803263 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,40960,1.257671,1.258110|1.263847|1.257478|1.257671|1.258102|1.256839|1.254752,90890240,114350300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,40960,123.498535,123.359375|123.498535|123.834229,245760,30367100.000000,98.196234 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f256,bl::nextafter,40960,6.699387,6.698840|6.723885|6.693662|6.701366|6.868812|6.699387|6.683476,16629760,111821900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter,40960,817.595215,818.020020|817.058105|817.595215,122880,100461500.000000,122.040300 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter,40960,18.111683,18.134766|18.111683|18.073509,1351680,24474400.000000,2.703484 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f256,bl::nexttoward,40960,6.697026,6.704846|6.684115|6.697026|6.689784|6.695370|6.737909|6.762157,16916480,113512500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter (same type),40960,814.096680,813.273926|814.414062|814.096680,122880,100015500.000000,121.560933 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter (same type),40960,18.183816,18.183816|18.161399|18.202459,1351680,24577000.000000,2.715208 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,40960,0.789768,0.788738|0.789330|0.791049|0.790289|0.789768|0.788016|0.790028,145367040,114782200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,qdpp,qdreal,qdpp qd_real,qdpp operator==,40960,0.544999,0.543545|0.544999|0.544767|0.544331|0.545329|0.551738|0.549610,211886080,115760000.000000,0.690074 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator==,40960,6.421286,6.422952|6.419348|6.427060|6.410745|6.453606|6.421286|6.413070,18063360,116039200.000000,8.130593 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator==,40960,4.586435,4.648668|4.584454|4.571418|4.586435|4.601820|4.574044|4.653274,15196160,69946000.000000,5.807316 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,40960,0.734721,0.734890|0.733897|0.734070|0.734721|0.735518|0.740922|0.733861,157122560,115549700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,qdpp,qdreal,qdpp qd_real,qdpp operator!=,40960,0.541455,0.541396|0.542480|0.541455|0.540556|0.542384|0.540908|0.542635,212459520,115086700.000000,0.736954 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator!=,40960,6.432137,6.432137|6.396872|6.429114|6.409544|6.442871|6.435082|6.432795,18063360,116065900.000000,8.754533 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator!=,40960,4.452112,4.460265|4.446492|4.424888|4.452112|4.455382|4.456211|4.438246,15196160,67587300.000000,6.059597 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,40960,1.318947,1.318947|1.306188|1.369121|1.353893|1.327466|1.307266|1.301528,78561280,104199300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,qdpp,qdreal,qdpp qd_real,qdpp operator<,40960,1.100787,1.142913|1.125624|1.109691|1.100787|1.091404|1.082812|1.076740,87736320,96885600.000000,0.834595 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<,40960,6.446591,6.453489|6.446591|6.445119|6.445933|6.465735|6.464727|6.437950,18063360,116533300.000000,4.887679 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,tlfloat,tloct,TLFloat Octuple,TLFloat operator<,40960,5.220215,5.271545|5.281982|5.321716|5.212463|5.220215|5.208069|5.216248,11468800,60182100.000000,3.957864 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,40960,1.256546,1.276544|1.267377|1.258930|1.253900|1.254940|1.256546|1.251122,85442560,107649800.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,qdpp,qdreal,qdpp qd_real,qdpp operator<=,40960,1.104634,1.164668|1.134728|1.115496|1.104634|1.092844|1.088677|1.080461,95764480,106456000.000000,0.879104 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<=,40960,6.562382,6.545489|6.552577|6.563209|6.564351|6.568210|6.555333|6.562382,17776640,116593300.000000,5.222556 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator<=,40960,5.406212,5.473007|5.406212|5.392566|5.420047|5.399076|5.400516|5.422301,11182080,60564900.000000,4.302439 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,40960,1.585869,1.629363|1.421684|1.585869|1.578662|1.391443|1.644003|1.593452,83722240,129703400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,qdpp,qdreal,qdpp qd_real,qdpp operator>,40960,1.270868,1.201729|1.270868|1.263877|1.607473|1.492462|1.283983|1.267878,81715200,109594900.000000,0.801370 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>,40960,6.541197,6.552577|6.553798|6.541197|6.542102|6.534345|6.524698|6.509262,17776640,116203300.000000,4.124677 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,tlfloat,tloct,TLFloat Octuple,TLFloat operator>,40960,5.466997,5.566594|5.466997|5.514198|5.443209|5.440142|5.440956|5.489971,11182080,61281100.000000,3.447320 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,40960,1.361888,1.639689|1.474345|1.370738|1.361888|1.339742|1.329926|1.349050,68812800,96980600.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,qdpp,qdreal,qdpp qd_real,qdpp operator>=,40960,1.099780,1.096471|1.113232|1.099780|1.073785|1.053142|1.169364|1.204523,100065280,111648500.000000,0.807541 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>=,40960,6.503079,6.605264|6.511309|6.488037|6.503079|6.478980|6.475988|6.516428,17776640,115749000.000000,4.775048 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator>=,40960,5.272156,5.307129|5.260742|5.249817|5.236267|5.272156|5.312256|5.366516,11468800,60628800.000000,3.871212 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,40960,119.519043,120.205078|119.519043|119.492188,245760,29427000.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,40960,441.777344,443.325195|441.777344|441.093750,122880,54321000.000000,3.696293 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,40960,280.593262,280.593262|281.237793|280.295410,122880,34493500.000000,2.347687 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,40960,557.124023,557.124023|556.789551|557.397461,122880,68456900.000000,4.661383 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,1024,351.210938,350.105469|352.253906|351.210938,76800,26971400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,qdpp,qdreal,qdpp qd_real,qdpp nroot,1024,1143.750000,1143.750000|1140.457589|1148.939732,21504,24608800.000000,3.256590 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,1024,766.292318,766.292318|766.837565|766.056315,36864,28252400.000000,2.181858 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,1024,3252.766927,3259.212240|3252.473958|3252.766927,9216,29996400.000000,9.261576 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,4096,171.974534,177.520282|171.974534|171.150090,159744,27723300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,4096,1248.779297,1247.485352|1250.305176|1248.779297,24576,30691900.000000,7.261420 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,4096,766.048177,766.048177|767.529297|765.690104,36864,28253400.000000,4.454428 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,1024,887.879774,888.834635|887.706163|887.879774,27648,24555300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,qdpp,qdreal,qdpp qd_real,qdpp sin,1024,1946.523438,1947.128906|1946.523438|1943.847656,15360,29888000.000000,2.192328 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,1024,3655.729167,3655.957031|3655.729167|3650.455729,9216,33675700.000000,4.117370 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,1024,5586.279297,5598.339844|5581.738281|5586.279297,6144,34337500.000000,6.291707 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,1024,861.611328,878.085938|861.611328|860.927734,30720,26630400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,qdpp,qdreal,qdpp qd_real,qdpp cos,1024,1955.878906,1962.265625|1955.878906|1951.562500,15360,30052900.000000,2.270025 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,1024,2750.813802,2755.110677|2743.164062|2750.813802,9216,25341200.000000,3.192639 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,1024,5592.382812,5595.117188|5584.472656|5592.382812,6144,34349000.000000,6.490610 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,fltx,fltx,fltx bl::f256,bl::sincos,1024,1061.682129,1061.022949|1061.682129|1061.682129,24576,26086500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,qdpp,qdreal,qdpp qd_real,qdpp sincos,1024,2099.072266,2104.394531|2098.925781|2099.072266,12288,25814600.000000,1.977119 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,tlfloat,tloct,TLFloat Octuple,tlfloat::sincos,1024,11212.402344,11214.648438|11202.441406|11212.402344,3072,34436600.000000,10.560979 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,1024,1122.644043,1122.326660|1122.644043|1131.152344,24576,27657200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,qdpp,qdreal,qdpp qd_real,qdpp tan,1024,2338.085938,2340.698242|2338.085938|2331.884766,12288,28715700.000000,2.082660 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,1024,4370.117188,4376.513672|4360.595703|4370.117188,6144,26843600.000000,3.892701 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,1024,6600.683594,6600.683594|6599.462891|6601.269531,6144,40553300.000000,5.879587 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,1024,880.642361,882.378472|880.642361|879.329427,27648,24351900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,qdpp,qdreal,qdpp qd_real,qdpp atan,1024,6091.748047,6091.113281|6091.748047|6131.835938,6144,37508500.000000,6.917392 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,1024,3805.273438,3811.914062|3805.273438|3796.484375,6144,23375200.000000,4.321020 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,1024,10086.132812,10111.523438|10083.398438|10086.132812,3072,31007800.000000,11.453154 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,1024,934.309896,935.394965|934.309896|934.266493,27648,25841400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,qdpp,qdreal,qdpp qd_real,qdpp atan2,1024,6033.984375,6033.984375|6057.080078|6032.128906,6144,37116300.000000,6.458226 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,1024,3973.925781,3973.925781|3963.476562|3980.810547,6144,24408500.000000,4.253327 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,1024,10175.488281,10175.488281|10191.894531|10131.542969,3072,31230900.000000,10.890914 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,1024,1337.760417,1341.878255|1337.760417|1337.613932,18432,24682000.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,qdpp,qdreal,qdpp qd_real,qdpp asin,1024,8641.210938,8652.832031|8641.210938|8633.300781,3072,26549600.000000,6.459461 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,1024,11602.148438,11647.851562|11602.148438|11597.363281,3072,35683700.000000,8.672815 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,1024,11113.574219,11146.093750|11113.574219|11101.367188,3072,34161700.000000,8.307597 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,1024,1382.991536,1382.991536|1384.651693|1372.509766,18432,25437100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,qdpp,qdreal,qdpp qd_real,qdpp acos,1024,8697.949219,8697.949219|8680.175781|8702.636719,3072,26706700.000000,6.289228 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,1024,11961.328125,12029.492188|11959.667969|11961.328125,3072,36813300.000000,8.648880 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,1024,11096.972656,11096.972656|11097.753906|11086.425781,3072,34079900.000000,8.023891 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,1024,1031.054688,1031.054688|1032.812500|1030.230035,27648,28515200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,qdpp,qdreal,qdpp qd_real,qdpp exp,1024,2209.716797,2210.034180|2207.153320|2209.716797,12288,27143800.000000,2.143162 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,1024,3163.346354,3162.662760|3163.346354|3166.210938,9216,29160100.000000,3.068068 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,1024,4394.384766,4394.384766|4409.863281|4391.699219,6144,27025300.000000,4.262029 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,1024,873.730469,873.730469|873.925781|871.181641,30720,26816900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,1024,3612.369792,3612.369792|3619.205729|3596.679688,9216,33264400.000000,4.134421 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,1024,16602.050781,16602.050781|16626.074219|16593.066406,3072,51016900.000000,19.001341 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,1024,1032.971191,1032.995605|1032.971191|1031.604004,24576,25375300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,qdpp,qdreal,qdpp qd_real,qdpp expm1,1024,2187.158203,2193.481445|2187.158203|2182.641602,12288,26883200.000000,2.117347 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,1024,3551.725260,3559.342448|3546.451823|3551.725260,9216,32739900.000000,3.438358 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,1024,4506.982422,4506.982422|4510.839844|4505.371094,6144,27695500.000000,4.363125 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,1024,1719.101562,1723.691406|1719.101562|1717.675781,15360,26421600.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,qdpp,qdreal,qdpp qd_real,qdpp log,1024,6967.041016,6967.041016|6974.658203|6959.179688,6144,42805000.000000,4.052722 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,1024,5508.349609,5504.785156|5508.349609|5510.498047,6144,33840400.000000,3.204203 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,1024,6650.830078,6650.390625|6650.830078|6667.431641,6144,40895800.000000,3.868783 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,1024,1771.113281,1771.113281|1767.988281|1785.585938,15360,27262400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,1024,5881.689453,5963.330078|5881.689453|5855.664062,6144,36251000.000000,3.320900 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,1024,6767.675781,6761.669922|6809.228516|6767.675781,6144,41653400.000000,3.821142 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,1024,1766.210938,1766.210938|1770.957031|1765.507812,15360,27149700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,qdpp,qdreal,qdpp qd_real,qdpp log10,1024,7263.769531,7267.041016|7262.207031|7263.769531,6144,44632100.000000,4.112629 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,1024,10907.324219,10907.324219|10866.503906|10925.390625,3072,33484000.000000,6.175550 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,1024,6770.996094,6773.144531|6770.996094|6760.986328,6144,41584900.000000,3.833628 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,1024,1756.621094,1757.070312|1753.046875|1756.621094,15360,26965700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,qdpp,qdreal,qdpp qd_real,qdpp log1p,1024,6783.886719,6791.601562|6783.886719|6781.005859,6144,41690100.000000,3.861895 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,1024,5577.343750,5579.003906|5577.343750|5565.087891,6144,34245500.000000,3.175041 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,1024,7403.466797,7416.113281|7399.804688|7403.466797,6144,45505300.000000,4.214607 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,1024,2689.876302,2725.488281|2687.467448|2689.876302,9216,24891900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,qdpp,qdreal,qdpp qd_real,qdpp pow,1024,7474.414062,7474.414062|7477.392578|7462.988281,6144,45905500.000000,2.778720 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,1024,7383.789062,7388.281250|7383.789062|7375.585938,3072,22679200.000000,2.745029 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,1024,34717.382812,34876.757812|34717.382812|34716.015625,3072,106813600.000000,12.906684 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,4096,109.827303,109.827303|109.778475|110.026470,233472,25653300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,qdpp,qdreal,qdpp qd_real,qdpp npwr,4096,136.660767,136.877441|136.660767|136.415100,196608,26866700.000000,1.244324 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",4096,563.781738,566.357422|563.781738|560.949707,49152,27706800.000000,5.133348 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,fltx,fltx,fltx bl::f256,bl::product_sum,4096,47.814387,47.814387|48.090154|47.493675,540672,25843800.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,qdpp,qdreal,qdpp qd_real,same expression,4096,100.208101,100.279018|100.208101|99.958147,258048,25843100.000000,2.095773 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same expression,4096,403.515625,413.000488|402.510579|403.515625,73728,29958800.000000,8.439209 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,tlfloat,tloct,TLFloat Octuple,same expression,4096,250.615777,249.812826|256.380208|250.615777,110592,27899000.000000,5.241430 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,1024,1332.438151,1338.883464|1332.340495|1332.438151,18432,24598500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,qdpp,qdreal,qdpp qd_real,qdpp sinh,1024,2505.126953,2505.126953|2509.497070|2501.147461,12288,30784600.000000,1.880107 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,1024,3869.498698,3880.533854|3862.923177|3869.498698,9216,35675000.000000,2.904074 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,1024,4969.628906,4970.605469|4964.160156|4969.628906,6144,30524200.000000,3.729726 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,1024,1325.895182,1327.343750|1325.895182|1325.032552,18432,24442500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,qdpp,qdreal,qdpp qd_real,qdpp cosh,1024,2486.669922,2487.280273|2486.669922|2482.397461,12288,30541200.000000,1.875465 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,1024,3724.479167,3724.479167|3713.834635|3725.683594,9216,34295800.000000,2.809030 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,1024,4679.296875,4711.132812|4679.296875|4677.441406,6144,28811000.000000,3.529160 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,1024,1277.455357,1277.455357|1278.822545|1275.767299,21504,27468100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,qdpp,qdreal,qdpp qd_real,qdpp tanh,1024,2509.472656,2509.472656|2504.223633|2510.717773,12288,30820000.000000,1.964431 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,1024,3840.852865,3844.140625|3840.852865|3839.778646,9216,35404100.000000,3.006644 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,1024,4813.525391,4813.525391|4809.765625|4818.212891,6144,29576200.000000,3.768058 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,1024,2636.523438,2759.342448|2636.523438|2619.140625,9216,24622100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,qdpp,qdreal,qdpp qd_real,qdpp asinh,1024,6687.597656,6688.671875|6687.597656|6686.328125,6144,41088200.000000,2.536521 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,1024,15910.156250,15942.675781|15910.156250|15858.593750,3072,48856500.000000,6.034521 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,1024,36447.070312,36447.070312|36342.187500|36484.277344,3072,111896100.000000,13.823913 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,1024,2438.574219,2449.975586|2438.574219|2432.104492,12288,29985400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,qdpp,qdreal,qdpp qd_real,qdpp acosh,1024,7321.386719,7321.386719|7304.687500|7368.310547,6144,45044500.000000,3.002323 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,1024,8638.183594,8638.183594|8591.015625|8641.308594,3072,26491400.000000,3.542309 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,1024,33907.031250,33907.031250|33899.609375|33955.566406,3072,104204500.000000,13.904449 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,1024,2280.517578,2287.231445|2272.436523|2280.517578,12288,28017400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,qdpp,qdreal,qdpp qd_real,qdpp atanh,1024,7169.238281,7169.238281|7167.041016|7182.177734,6144,44069800.000000,3.143689 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,1024,6536.376953,6536.376953|6537.109375|6525.000000,6144,40137700.000000,2.866181 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,1024,7818.945312,7818.261719|7818.945312|7832.910156,3072,24033400.000000,3.428584 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,128,15377.343750,15786.718750|15377.343750|15172.656250,384,5931100.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,128,38046.875000,38046.875000|39089.062500|37831.250000,384,14715800.000000,2.474216 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,128,441801.562500,441801.562500|441852.343750|440726.562500,384,169520700.000000,28.730681 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,128,10046.093750,10217.968750|10046.093750|9999.218750,384,3873700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,128,81827.343750,81827.343750|82047.656250|81655.468750,384,31427900.000000,8.145190 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,128,441520.312500,440806.250000|441520.312500|442532.812500,384,169582000.000000,43.949452 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,128,10612.500000,10653.125000|10612.500000|10612.500000,384,4080400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lgamma,128,29853.125000,29853.125000|34866.406250|27883.593750,384,11853200.000000,2.813015 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::lgamma,128,141894.531250,141894.531250|142142.187500|141880.468750,384,54517400.000000,13.370509 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,128,9843.750000,9889.062500|9784.375000|9843.750000,384,3778200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tgamma,128,32862.500000,32862.500000|32932.031250|32781.250000,384,12617700.000000,3.338413 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::tgamma,128,158108.593750,158108.593750|157765.625000|158300.000000,384,60694300.000000,16.061825 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,4099,452.207856,455.232984|450.978287|452.207856,61485,27840800.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,qdpp,qdreal,qdpp qd_real,qdpp to_string,4099,5031.861430,5039.912174|5019.516955|5031.861430,12297,61859200.000000,11.127320 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,4099,1060.807514,1060.807514|1066.784582|1047.145645,24594,26026500.000000,2.345841 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,4099,13338.058063,13408.075140|13338.058063|13321.688217,12297,164238000.000000,29.495414 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,4099,398.892413,399.502318|398.892413|396.979751,61485,24499200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,qdpp,qdreal,qdpp qd_real,qdpp write,4099,4990.363503,4985.045133|4996.828495|4990.363503,12297,61371200.000000,12.510550 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,4099,458.316663,458.994877|457.828739|458.316663,61485,28183500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,qdpp,qdreal,qdpp qd_real,qdpp read,4099,3160.014638,3161.161259|3160.014638|3154.671871,12297,38841500.000000,6.894828 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,4099,611.368626,609.685289|615.644060|611.368626,49188,30114500.000000,1.333944 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,4099,10553.842401,10484.923152|10563.161747|10553.842401,12297,129536300.000000,23.027403 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,mt19937_64,fltx,fltx,fltx bl::f256,bl::mt19937_64,64,1.735150,1.748484|1.735150|1.733925,15186816,26412700.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,uniform_real,fltx,fltx,fltx bl::f256,bl::uniform_real,64,11.010469,10.548942|11.083802|11.010469,2466816,26841600.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,uniform_real,qdpp,qdreal,qdpp qd_real,qdpp qdrand,64,37.585847,37.585847|37.556777|37.653070,660480,24833100.000000,3.413646 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,normal,fltx,fltx,fltx bl::f256,bl::normal,64,271.406578,272.218947|271.003669|271.406578,91584,24869000.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f256,same workload,64,142.700717,143.017084|142.558352|142.700717,170688,24367200.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,qdpp,qdreal,qdpp qd_real,same workload,64,336.778549,336.199846|337.403549|336.778549,77760,26189100.000000,2.360034 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,823.390437,823.522214|823.013931|823.390437,31872,26240500.000000,5.770051 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,tlfloat,tloct,TLFloat Octuple,same workload,64,518.272901,517.408158|518.272901|519.376193,50304,26075200.000000,3.631887 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f256,same workload,64,1793.419894,1793.419894|1794.476232|1791.131162,13632,24442300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,qdpp,qdreal,qdpp qd_real,same workload,64,3953.835227,3947.111742|3959.659091|3953.835227,6336,25049600.000000,2.204634 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,6087.946429,6096.800595|6069.642857|6087.946429,4032,24533900.000000,3.394602 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,tlfloat,tloct,TLFloat Octuple,same workload,64,11450.000000,11450.000000|11425.000000|11485.937500,192,2199100.000000,6.384450 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f256,same workload,64,110.988956,111.255020|110.515813|110.988956,239040,26514300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,qdpp,qdreal,qdpp qd_real,same workload,64,227.949380,228.582128|227.882231|227.949380,116160,26500500.000000,2.053802 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,809.935662,810.551471|807.261029|809.935662,32640,26413900.000000,7.297444 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,tlfloat,tloct,TLFloat Octuple,same workload,64,531.882296,531.347276|531.882296|534.083171,49344,26272600.000000,4.792209 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f256,same workload,64,536.458333,536.111111|538.392002|536.458333,50112,26909500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,qdpp,qdreal,qdpp qd_real,same workload,64,969.957890,975.520833|969.957890|967.021277,27072,26282400.000000,1.808077 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,3379.358553,3389.514803|3379.358553|3377.549342,7296,24676100.000000,6.299387 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,tlfloat,tloct,TLFloat Octuple,same workload,64,2085.229492,2089.379883|2085.229492|2078.588867,12288,25613100.000000,3.887030 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f256,same workload,64,485.675140,488.141325|485.675140|484.870569,51456,25019400.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,qdpp,qdreal,qdpp qd_real,same workload,64,769.094122,767.903646|769.168527|769.094122,32256,24795900.000000,1.583557 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,2620.673077,2620.132212|2637.740385|2620.673077,9984,26219800.000000,5.395938 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,tlfloat,tloct,TLFloat Octuple,same workload,64,1889.311594,1892.187500|1889.311594|1874.750906,13248,24978000.000000,3.890073 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,fltx,fltx,fltx bl::f256,same workload,8,237.989450,238.769850|237.989450|237.790951,110328,26278300.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,qdpp,qdreal,qdpp qd_real,same workload,8,437.837010,439.935662|437.106822|437.837010,58752,25750600.000000,1.839733 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,8,945.604631,945.400943|948.295455|945.604631,27984,26485000.000000,3.973305 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,tlfloat,tloct,TLFloat Octuple,same workload,8,741.047183,736.490156|741.047183|741.089613,35352,26144300.000000,3.113782 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f256,same workload,8,8837.500000,8900.000000|8837.500000|8825.000000,24,212500.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,qdpp,qdreal,qdpp qd_real,same workload,8,19437.500000,19437.500000|19650.000000|19112.500000,24,465600.000000,2.199434 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,8,27850.000000,28075.000000|27850.000000|27775.000000,24,669600.000000,3.151344 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,tlfloat,tloct,TLFloat Octuple,same workload,8,40612.500000,40775.000000|40550.000000|40612.500000,24,975500.000000,4.595474 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,fltx,fltx,fltx bl::f256,same workload,8,4755.869565,4755.869565|4721.358696|4777.065217,5520,26227900.000000, +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,qdpp,qdreal,qdpp qd_real,same workload,8,16325.000000,16650.000000|16325.000000|16262.500000,24,393900.000000,3.432600 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,8,22212.500000,22525.000000|22212.500000|22075.000000,24,534500.000000,4.670544 +6,07cb9aa0af7241f981735eab48f97723,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,tlfloat,tloct,TLFloat Octuple,same workload,8,33937.500000,33937.500000|34175.000000|33837.500000,24,815600.000000,7.135919 diff --git a/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f256_fastmath_accuracy.csv b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f256_fastmath_accuracy.csv new file mode 100644 index 0000000..9466f23 --- /dev/null +++ b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f256_fastmath_accuracy.csv @@ -0,0 +1,128 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,moderate,4097,10322096095657499311,219.944958,215.547580,215.029639,212.000000,3.029639,yes,Both,yes,-6.32659778225233051069632927545029475138801079375645295548611539482289480950893866e-02,-0.063265977822523305106963292754502947513880107937564529554861153949406008699572901,-0.063265977822523305106963292754502947513880107937564529554861153948228948095089387 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,wide_exponent,4098,10322096095657499308,219.514420,212.275332,212.017147,212.000000,0.017147,yes,Both,yes,2.47163553801407265315232159817868248210487207087397698019878061850401032407603178e-277,2.4716355380140726531523215981786824821048720708495655738821672043746801610949361e-277,2.4716355380140726531523215981786824821048720708739769801987806185040103240760318e-277 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,general,3770,10322096095657499292,225.979394,215.583815,215.297307,190.000000,25.297307,yes,No,no,"representative lhs [-4.4462634936433036e+21,-123408.6026048271,6.8505536024347558e-12,-3.8028211704259384e-28] ; representative rhs [-1.5864490641473432e+22,-440328.06960285309,2.4443118063091801e-11,-1.3568656233637788e-27]",-20310754135116736403992.672207680164858397009037806754206012036634323297640103087,-20310754135116736403992.672207680164858397009037806754206012036634009406784094328 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,subnormal,326,10322096095657499292,243.500079,219.782158,216.532998,190.000000,26.532998,yes,No,no,"broad lhs [-4.0912052790212279e-223,-1.1355375748093388e-239,6.3034998044016954e-256,-3.4991453092834664e-272] ; broad rhs [9.6732779190304605e-272,2.6848739673264345e-288,-1.4904044483712489e-304,8.2755995678408796e-321]",-4.0912052790212280311833034891221488165122802908340538768476180849661443443505261e-223,-4.0912052790212280311833034891221488165122802908340538768476180849392956046772617e-223 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,general,3791,10322096095657499292,226.123353,215.602949,215.220788,190.000000,25.220788,yes,No,no,"representative lhs [155.03656083289641,4.3031289873845084e-15,-2.388716439863108e-31,1.3260039954183278e-47] ; representative rhs [2246405305209.4082,6.2350272312089677e-05,-3.4611353956265177e-21,1.9213161037848301e-37]",-2246405305054.3717046423758949106196822642348296102031142477192627199056314953875,-2246405305054.3717046423758949106196822642348296102031142477192626832977015519632 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,subnormal,305,10322096095657499292,243.910586,244.000000,216.728701,190.000000,26.728701,yes,No,no,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239320146546075137762e-238,8.2656349351104667692680102118096923996066568310632957805469239319672919306477601e-238 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,general,4000,10322096095657499292,220.010524,216.259138,215.221541,190.000000,25.221541,yes,NaN,no,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60038241930403290903625769183688852217377918301809189,-156159778640594921198000750.60038241930403290903625769183688852217632267056740194 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,subnormal,100,10322096095657499292,221.469015,215.608028,215.608028,190.000000,25.608028,yes,NaN,no,"extreme lhs [-5.3809439414843993e+270,-1.4935119645133053e+254,8.2906568527791063e+237,-4.6022390636108503e+221] ; extreme rhs [-4.596668242019171e-261,-1.2758317297132313e-277,7.0822888093748442e-294,-3.931460051606543e-310]",24734414127.906804259564005392277744744307358869933187588284984254854603209456978,24734414127.906804259564005392277744744307358869933187588284984255162792737796103 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,general,4045,10322096095657499292,219.218459,215.287455,214.762066,190.000000,24.762066,yes,No,yes,"representative lhs [2268851457486.2539,6.2973278188889589e-05,-3.49571916907152e-21,1.940513954563361e-37] ; representative rhs [0.00093095878597111432,2.5839296979055357e-20,-1.4343691223137255e-36,7.9623481270203769e-53]",2437112675315200.8552398842775006307979109182413214802574225974607596074455830965,2437112675315200.8552398842775006307979109182413214802574225974607050251573596225 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,subnormal,55,10322096095657499292,219.372138,215.374456,215.374456,190.000000,25.374456,yes,No,yes,"extreme lhs [-6.5972954615428272e-272,-1.8311173304149739e-288,1.0164743105084273e-304,-5.6422296755070355e-321] ; extreme rhs [6.3421732060336743e-272,1.760306679874833e-288,-9.7716650319925213e-305,5.4248407913368871e-321]",-1.0402263147380523166730438190618890627910384611501752613620202130066222580107113,-1.040226314738052316673043819061889062791038461150175261362020212991383268138225 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,moderate,4099,10322096095657499356,219.883649,215.654212,215.160161,190.000000,25.160161,yes,Both,no,"[1.2843679126351581,3.5648370717432602e-17,-1.9788820980433443e-33,1.0985002341331286e-49] ; [-2.3308777059725987,-6.4694852418906121e-17,3.5912857365098039e-33,-1.9935640563405487e-49] ; [5.2042205184851724,1.4444613612122271e-16,-8.0183713069960479e-33,4.451090222510361e-49]",2.2105159846573199203800006655584861882250236763069688164874765011598446438714347,2.2105159846573199203800006655584861882250236763069688164874765011222755061934085 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,Both,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,wide_exponent,4096,10322096095657499357,225.262959,215.958051,215.096656,190.000000,25.096656,yes,Both,no,"[5.0695695241027842e+79,1.4070882026492271e+63,-7.8109086012980007e+46,4.3359252862018586e+30] ; [-1.285263546577847e-53,-3.5673229553052827e-70,1.9802620406268915e-86,-1.0992662561475861e-102] ; [-9312.4534885580761,-2.5847250696870095e-13,1.4348106423461901e-29,-7.9647990555497543e-46]",-651573290617131278652235925.796582770520137295580825262259286558273807300279549,-651573290617131278652235925.79658277052013729558082526225928655828537955033923283 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,NaN,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,NaN,yes,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,NaN,yes,"lower endpoint [-8,0,0,0]",8,8 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,moderate,4099,10322096095657499356,220.145544,216.285104,215.251190,190.000000,25.251190,yes,Both,yes,"[-0.36144099270550889,-1.0032002803625731e-17,5.5688802478447044e-34,-3.0913495362687196e-50]",0.13063959120794373790137808981865083109327726640612337325102002398854548322121324,0.13063959120794373790137808981865083109327726640612337325102002399063002164712949 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,wide_exponent,4096,10322096095657499357,220.095837,216.278909,215.290405,190.000000,25.290405,yes,Both,yes,"[6.7502995556670522e-41,1.8735844974546312e-57,-1.0400483238274423e-73,5.7734279791801363e-90]",4.5566544091238805246854811871109707929263286794390254922251627617554550230494986e-81,4.5566544091238805246854811871109707929263286794390254922251627618262131586719535e-81 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,near_one,4099,10322096095657499359,217.977278,215.406773,214.634335,190.000000,24.634335,yes,NaN,no,"[0.98524730223011503,2.7346105997142351e-17,1.5180138255933757e-33,8.426669504365412e-50]",1.0149735987467228735600712240168282012518927505403262882885405865459789646852313,1.0149735987467228735600712240168282012518927505403262882885405865211429570599582 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,wide_exponent,4096,10322096095657499357,217.878526,215.148048,214.625136,190.000000,24.625136,yes,NaN,no,"[2.2537520677334854e+105,6.2554185934856772e+88,3.4724548755780555e+72,1.9275996774193202e+56]",4.4370452913468106284563119957364553561271971862592280260566035243063949187169959e-106,4.4370452913468106284563119957364553561271971862592280260566035241971276114030617e-106 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,No,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,No,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,No,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,NaN,yes,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,moderate,4099,10322096095657499356,220.044956,215.606687,215.330917,190.000000,25.330917,yes,NaN,yes,"[4.0249001329210348,1.1171341998464465e-16,-6.2013405513286293e-33,3.4424355318133533e-49]",4.0249999999999999999999999999999999999999999999999999999999999999392283664271373,4.025 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,wide_exponent,4096,10322096095657499357,229.647449,215.594292,215.067820,190.000000,25.067820,yes,NaN,yes,"[3.0148718470081313e-08,8.3679503521064993e-25,-4.6451455749144106e-41,2.5785737850028193e-57]",3.0148720000000000000000000000000000000000000000000000000000000000546265902778824e-08,3.014872e-08 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,boundary,4112,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,boundary,4116,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,NaN,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,NaN,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,NaN,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,NaN,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,NaN,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815,0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,NaN,-,"lower endpoint [-8,0,0,0]",3,3 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,NaN,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,near_one,4099,10322096095657499359,217.932663,211.994703,210.121730,190.000000,20.121730,yes,NaN,yes,"[0.68844842180625743,1.9108282228903967e-17,1.0607227445782445e-33,5.88819406887178e-50]",0.82972792034874748204635533162847142244462757631213868214367401578005505462467425,0.82972792034874748204635533162847142244462757631213868214367401531661654544094597 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,wide_exponent,4096,10322096095657499357,217.922910,211.307570,210.087010,190.000000,20.087010,yes,NaN,yes,"[3.9723050169707548e-164,1.1025361226687388e-180,6.120304944338899e-197,3.3974517334661164e-213]",1.9930642280094123730625261552128791429300322769194722961440719680011680513374133e-82,1.9930642280094123730625261552128791429300322769194722961440719668608407694664803e-82 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,extreme_finite,4096,10322096095657499354,217.427345,211.612729,209.568118,190.000000,19.568118,yes,NaN,yes,"[4.8277532298172217e+270,1.3399706982378861e+254,7.4383316075337441e+237,4.1291035077405081e+221]",2.1972148802102223696810058497941079031647215249309110296216736160980628789995527e+135,2.1972148802102223696810058497941079031647215249309110296216736142967757213404226e+135 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,subnormal,4100,10322096095657499350,218.342012,211.195890,209.632889,190.000000,19.632889,yes,NaN,yes,"[4.425628238965193e-310,0,0,0]",2.1037177184606286876991106431236613762063141625286376505723061307058915210366628e-155,2.103717718460628687699110643123661376206314162528637650572306129056970991449237e-155 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,moderate,4099,10322096095657499356,219.366145,215.645937,214.867489,190.000000,24.867489,yes,NaN,yes,"[-1.2848792715143134,-3.5662563777469718e-17,1.9796699711454989e-33,-1.0989375915623761e-49]",-1.0871449203062734502700851412094476938994915993466528215032956944502419014728132,-1.0871449203062734502700851412094476938994915993466528215032956944728741702814207 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,wide_exponent,4096,10322096095657499357,219.203284,215.534477,214.994538,190.000000,24.994538,yes,NaN,yes,"[-7.6088562828244072e-186,-2.1118818590638597e-202,1.1723299326104384e-218,-6.5077384182068346e-235]",-1.9668585456638661019202110587595283938653583370130934674169942595500144363610602e-62,-1.9668585456638661019202110587595283938653583370130934674169942595125198730852026e-62 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,moderate,4099,10322096095657499356,219.112713,215.484839,215.004532,190.000000,25.004532,yes,No,yes,"[-1.9786093179304824,-5.4917440537607455e-17,3.0485303469167366e-33,-1.6922742912077385e-49] ; [-3.6930721609963868,-1.0250334361850929e-16,5.6900786093166561e-33,-3.1586281419952212e-49]",4.1897108276500243736137575509880054584975437763794929781439711577595180004814865,4.1897108276500243736137575509880054584975437763794929781439711578388357929538313 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,wide_exponent,4096,10322096095657499357,240.757641,216.577812,213.870154,190.000000,23.870154,yes,No,yes,"[1.7122842369183985e-262,4.7525434613238062e-279,-2.6381915881467134e-295,1.4644905222663036e-311] ; [-3.0144374372983699e-265,-8.3667446229517548e-282,4.6444762607798811e-298,-2.578202241195858e-314]",1.712286890340601098411983682624579480459337744664421226746119949951155747074881e-262,1.7122868903406010984119836826245794804593377446644212267461199567085975614133203e-262 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,moderate,4099,10322096095657499356,219.189484,215.451091,214.398633,180.000000,34.398633,yes,NaN,yes,"[3.0788955469009238,8.5456518164631729e-17,-4.7437897035336035e-33,2.6333322764213759e-49]",0.062656038467969832209321794216397982020542964949257118477705660287113605590702679,0.062656038467969832209321794216397982020542964949257118477705660288918880291683339 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,argument_reduction,4104,10322096095657499353,217.652696,208.567012,202.924770,180.000000,22.924770,yes,NaN,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275296757802517104071329784271370594664228509e-21,-6.8137244848422015805151924052161601275296757802517104071329778687414703031432792e-21 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,quadrant_boundaries,4315,10322096095657499369,229.646501,212.548934,212.379963,180.000000,32.379963,yes,NaN,yes,"below random k*pi/2, exponent 29, quadrant 0, offset bits 64 [1210367998.9931121,9.2232933347751439e-08,-3.3682212462958211e-24,-1.2421712039970458e-40]",-6.5614180700763253419843351526898064698409162314387092951719910697284566769595525e-11,-6.5614180700763253419843351526898064698409162314387092951719910704945087391437157e-11 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,moderate,4099,10322096095657499356,219.189230,215.566675,214.659688,180.000000,34.659688,yes,NaN,-,"[-4.7784826804074854,-1.3262953736402309e-16,7.3624183063460464e-33,-4.086963160313565e-49]",0.066045590163581850028962366060015702301220111028377965182485758811610101682177111,0.066045590163581850028962366060015702301220111028377965182485758813198059701212943 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,argument_reduction,4104,10322096095657499353,232.574321,215.615638,208.674366,180.000000,28.674366,yes,NaN,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1226611923604276e-17,1.4973849048591698e-33,-5.5622711043168264e-50]",5.7280337633839673822029261537694370705065754439038807480055172644370212115109926e-21,5.7280337633839673822029261537694370705065754439038807480055172731619522921872359e-21 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,quadrant_boundaries,4315,10322096095657499369,228.481158,215.246584,214.418649,180.000000,34.418649,yes,NaN,-,"below random k*pi/2, exponent 17, quadrant 1, offset bits 118 [331709.77271825873,-2.2171970577571149e-11,3.7150708281135636e-28,2.3902355434839523e-45]",9.9820278769371660928200388523257556042420348105086346022094664206029498329582703e-31,9.9820278769371660928200388523257556042420348105086346022094664208865938945946123e-31 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,moderate,4099,10322096095657499356,216.913680,214.380555,213.767876,170.000000,43.767876,yes,NaN,yes,"[-1.8439090508145544,-5.11787570882259e-17,2.8409917245523164e-33,-1.5770672126837562e-49]",3.5699982842328020406977403126653024345054964874710955004250341281438081184333917,3.5699982842328020406977403126653024345054964874710955004250341283030748914299905 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,argument_reduction,4104,10322096095657499353,216.861788,208.567009,202.924770,170.000000,32.924770,yes,NaN,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275298339501045587830768442951450110146372361e-21,-6.8137244848422015805151924052161601275298339501045587830768437367494218513576644e-21 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,quadrant_boundaries,4315,10322096095657499369,217.360401,212.539526,212.267358,170.000000,42.267358,yes,NaN,yes,"above random k*pi/2, exponent 45, quadrant 0, offset bits 64 [74082575456598.641,0.0077401429536521011,-4.4453663865375208e-20,-1.4406648841189425e-36]",4.0160244626898690108548055606217396545568030741292099390402822024483364340948252e-06,4.0160244626898690108548055606217396545568030741292099390402822019413987321784571e-06 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,near_one,4099,10322096095657499359,218.093670,215.379730,214.678988,180.000000,34.678988,yes,NaN,yes,"[1.2911786355365591,3.5837406251919532e-17,-1.9893756781863299e-33,1.1043253412758746e-49]",0.91180735486029865720200031963596732813600677958830230748545472972914611914911937,0.91180735486029865720200031963596732813600677958830230748545472975077769821487466 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,moderate,4099,10322096095657499356,218.191260,215.364973,214.819019,180.000000,34.819019,yes,NaN,yes,"[-1.6564773418506284,-4.5976482117311103e-17,2.5522074518952777e-33,-1.4167597383570195e-49]",-1.0276674796068157926881872460477795215568000040373694878361657581086397348641996,-1.0276674796068157926881872460477795215568000040373694878361657581307647820337298 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,near_one,4099,10322096095657499359,217.767500,215.258136,214.277602,180.000000,34.277602,yes,No,yes,"[0.58860603672544787,1.6337099360148818e-17,-9.0689119326130649e-34,5.0342574179424254e-50] ; [0.85887750789320882,2.3838639614892877e-17,-1.3233103288097723e-33,7.3458479788444792e-50]",0.60080560244689944505254047976488516114993445003563706360562245792394141734857901,0.60080560244689944505254047976488516114993445003563706360562245794276700036835792 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,moderate,4099,10322096095657499356,218.042610,215.273196,214.779064,180.000000,34.779064,yes,No,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50] ; [1.7502476823940025,4.8579131894765996e-17,-2.6966835372935758e-33,1.4969600766154699e-49]",0.072148061051439749393843263001597933397921930324099767924159658763635157216424841,0.072148061051439749393843263001597933397921930324099767924159658765232080678489465 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,extreme_finite,8,10322096095657499351,224.796125,218.394834,218.394834,180.000000,38.394834,yes,No,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961510720871532843,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,moderate,4099,10322096095657499356,217.555374,214.870821,214.404436,180.000000,34.404436,yes,NaN,yes,"[-0.03874370615484779,-1.0753538658105852e-18,5.9694131072129129e-35,-3.313689937563487e-51]",-0.038753405574689053897038748698475312191059300104201567727902220547827930480850877,-0.038753405574689053897038748698475312191059300104201567727902220546715831868900725 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,boundary,4105,10322096095657499355,218.279597,215.666103,215.450088,180.000000,35.450088,yes,NaN,yes,"[-0.9999994386132145,-2.7755560034015539e-17,1.5407430905564922e-33,-8.5528422708397013e-50]",-1.5697367166420567598613352554733454843585688705175173404668956843884396097624371,-1.5697367166420567598613352554733454843585688705175173404668956844102612619924983 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,moderate,4099,10322096095657499356,217.952479,214.769937,210.665918,180.000000,30.665918,yes,Both,-,"[0.99887415790514178,2.7724327220233818e-17,-1.5390093211072774e-33,8.5432179170301514e-50]",0.04745636757503406782865420252660601887412863134878995249846597602032373476016398,0.047456367575034067828654202526606018874128631348789952498465976002146233476892292 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,boundary,4105,10322096095657499355,214.108948,205.510139,192.466318,180.000000,12.466318,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863435425504615922399221269664356222070824068253018899150618e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,moderate,4099,10322096095657499356,217.426949,215.046491,214.489012,180.000000,34.489012,yes,Both,-,"[7.2668058682815229,2.0169437976118373e-16,-1.1196287217417818e-32,6.2151879295467938e-49]",1431.9692420599845796068868376110150600143493093499559422817931161935390354934173,1431.969242059984579606886837611015060014349309349955942281793116154785851743886 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,boundary,4099,10322096095657499291,215.434078,209.786789,209.697661,180.000000,29.697661,yes,Both,-,"[-597.80646087806576,-1.6592462428412662e-14,9.2106669116257879e-31,-5.1129472387200158e-47]",2.3765819510090894413033090759508481028066320772852749999499635353825343537510016e-260,2.3765819510090894413033090759508481028066320772852749999499635336015223825620741e-260 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,moderate,4099,10322096095657499356,218.020692,214.999773,214.215827,180.000000,34.215827,yes,Both,-,"[3.1052035729833225,8.6186712571859683e-17,-4.7843236357014531e-33,2.6558331288070464e-49]",8.6051692793502790320283451340709447945359060261526288089250361316953685910209515,8.6051692793502790320283451340709447945359060261526288089250361314139388957083351 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,boundary,4099,10322096095657499291,218.040030,214.973213,214.202868,180.000000,34.202868,yes,Both,-,"[104.10886087905146,2.8896013603855037e-15,-1.6040509811440805e-31,8.9042716596936548e-48]",21872072611204943785318953704535.848957757329524240581979950526538377674145297079,21872072611204943785318953704535.848957757329524240581979950526537655899871393765 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,moderate,4099,10322096095657499356,218.319190,214.883150,213.793932,180.000000,33.793932,yes,NaN,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.69414327255271665612631015596788634386741426622153124768599904822325391377881959,0.69414327255271665612631015596788634386741426622153124768599904819284068360567441 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,cancellation,4098,10322096095657499336,237.661604,215.412773,214.546935,180.000000,34.546935,yes,NaN,yes,"[-1.8771301503505452e-45,-5.2100827828431429e-62,2.8921769328577834e-78,-1.6054807110742383e-94]",-1.8771301503505452689720437817964125752929175652204807623509469569952921589010939e-45,-1.8771301503505452689720437817964125752929175652204807623509469570440934657796658e-45 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,near_one,4099,10322096095657499359,216.923081,214.333783,213.252927,180.000000,33.252927,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.50793426433422243038604118757996243390013385433953431736902408052282282785799521,-0.50793426433422243038604118757996243390013385433953431736902408049044259492262108 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,wide_exponent,4096,10322096095657499357,218.148959,215.403634,214.787811,180.000000,34.787811,yes,Both,-,"[2.1976393587320462e-253,6.0996745397169545e-270,3.3859995583568084e-286,1.87960733552917e-302]",-581.7666447619842216491153422494362059260947919882070310469834418271313947370462,-581.76664476198422164911534224943620592609479198820703104698344181433242395383818 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,extreme_finite,4096,10322096095657499354,218.068829,215.219537,214.521350,180.000000,34.521350,yes,Both,-,"[8.1158327768444521e-302,2.2525984397404538e-318,0,0]",-693.28688126658498966039805511058164533043712351742374530978111274691415502382465,-693.28688126658498966039805511058164533043712351742374530978111272856771039468536 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,near_one,4099,10322096095657499359,216.831239,214.285380,213.192358,180.000000,33.192358,yes,NaN,-,"[0.7496369857674211,2.0806606042739792e-17,1.1549986546477316e-33,6.4115304990049557e-50]",-0.41573596010411493045014267590719729760119796965409081364143571035067957416967793,-0.41573596010411493045014267590719729760119796965409081364143571037831861478590789 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,wide_exponent,4096,10322096095657499357,217.890794,215.181850,214.398808,180.000000,34.398808,yes,NaN,-,"[1.7649452349949291e+168,4.8987070927345696e+151,2.7193287026242405e+135,1.5095306685887436e+119]",558.90354335945887268941714779171120602057251916893271728873264701130834705779937,558.90354335945887268941714779171120602057251916893271728873264699520691310276205 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,extreme_finite,4096,10322096095657499354,221.047791,215.288948,214.786513,180.000000,34.786513,yes,NaN,-,"[6.8101574227838104e+300,1.8901983930241257e+284,1.0492708885224276e+268,5.8246234975324753e+251]",999.34611661399737932538483694865739304704641025692614772050877622807059417985481,999.34611661399737932538483694865739304704641025692614772050877625007617254075152 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,near_one,4099,10322096095657499359,216.850749,214.245682,213.257193,180.000000,33.257193,yes,NaN,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.22059304816994049352958242449187881883781348866027603462218270842444120257078286,-0.2205930481699404935295824244918788188378134886602760346221827084104201683981848 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,wide_exponent,4096,10322096095657499357,217.856250,215.189987,214.497524,180.000000,34.497524,yes,NaN,-,"[7.1469640060920858e+234,1.9836809989326703e+218,1.1011641592632406e+202,6.1126890175302627e+185]",234.85412159489045596003203173344408775668279869668572611682025536536168793387694,234.85412159489045596003203173344408775668279869668572611682025535904325560762789 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,extreme_finite,4096,10322096095657499354,217.515027,215.019309,214.220407,180.000000,34.220407,yes,NaN,-,"[5.3758239790954964e+270,1.4920908894809616e+254,8.2827683016759667e+237,4.5978600380780314e+221]",270.73044504015011560346372915336203436416099326519770095672238014262874150583956,270.73044504015011560346372915336203436416099326519770095672238013380264152658546 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,moderate,4099,10322096095657499356,217.570462,214.787129,214.020088,180.000000,34.020088,yes,NaN,yes,"[-0.25462100474624672,-7.0671525505618592e-18,3.9230577400860884e-34,-2.1777345149887542e-50]",-0.29386247149453246058352428487213904837677656724718288204078215844233971612393252,-0.29386247149453246058352428487213904837677656724718288204078215843133248548523474 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,cancellation,4098,10322096095657499336,237.686958,215.352335,214.282284,180.000000,34.282284,yes,NaN,yes,"[2.3793998245681706e-09,6.604161175061603e-26,-3.6660458974444604e-42,2.0350642823377176e-58]",2.3793998217373988960371956621746788271543095626976396103307776265392201663265882e-09,2.3793998217373988960371956621746788271543095626976396103307776264649058652515956e-09 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,near_one,4099,10322096095657499359,218.148772,215.130203,214.362894,180.000000,34.362894,yes,No,yes,"[1.423134563497126,3.9499918988359527e-17,2.1926859765852584e-33,1.2171852284888254e-49] ; [1.1927685344842596,3.310597725082075e-17,1.8377509098288919e-33,1.0201566868089328e-49]",1.5233053480043329261431287201279001410110702760486984367539772844096336550706452,1.5233053480043329261431287201279001410110702760486984367539772843646426383376926 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,moderate,4099,10322096095657499356,215.525556,212.047897,211.143117,180.000000,31.143117,yes,No,yes,"[7.7504743381693961,2.1511887655005213e-16,1.1941496488868227e-32,6.6288621752109849e-49] ; [6.7867863554598733,1.8837116187608508e-16,1.0456700054511108e-32,5.8046345810586807e-49]",1085628.0458183651737754568233825992695775685017622680386092038233740053608370142,1085628.0458183651737754568233825992695775685017622680386092038236727288616449863 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,moderate,4099,10322096095657499356,217.158561,214.415804,213.656994,190.000000,23.656994,yes,Both,no,"[-5.6684636004037738,-1.5733147008544706e-16,8.7336510293493687e-33,-4.848150230912434e-49]",-188043.1576659602046428792992413117498177671151403368538232084353655121126605512,-188043.15766596020464287929924131174981776711514033685382320843537457138843934032 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,wide_exponent,4096,10322096095657499357,217.192977,214.383216,213.812882,190.000000,23.812882,yes,Both,no,"[3156983632.9860682,8.7623897942647695e-08,-4.8641034501666178e-24,2.7001198222668209e-40]",3125405070844307632059635814309662493597686949184087401837672866916,3125405070844307632059635814309662493597686949184087401837672867051.1497698219492 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,No,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,No,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,quotient_reduction,4,10322096095657499383,237.431134,217.724535,217.724535,190.000000,27.724535,yes,No,yes,"scaled-reduction gap 58 lhs [5.4783870128486342e+104,1.2515701024950248e+86,2.5644796350277343e+70,3.0488942297143002e+54] ; scaled-reduction gap 58 rhs [1.0992042367473471e+87,7.6430960252403863e+68,8.308036160429468e+52,-8.4044243641695015e+36]",8.2176097775156019844573783110329841337664065872688377479267466170896765365317513e+86,8.217609777515601984457378311032984133766406587268837747926746617066064704117403e+86 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,No,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,near_one,4099,10322096095657499359,217.088527,214.653889,213.844482,180.000000,33.844482,yes,NaN,yes,"[0.76562636076402268,2.1250400349504614e-17,-1.1796341875261248e-33,6.5482851781324668e-50]",0.84264914336815803011264269143612462086913967383298160440244808238970820494154117,0.84264914336815803011264269143612462086913967383298160440244808235405953256955333 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,moderate,4099,10322096095657499356,216.956723,214.597984,213.993459,180.000000,33.993459,yes,NaN,yes,"[0.054297296667996875,1.5070527233928231e-18,-8.3658231641737974e-35,4.6439647484041155e-51]",0.054323980450469496887448171808625498827811228200332436943033541994792104072246549,0.054323980450469496887448171808625498827811228200332436943033541996864828986916269 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,near_one,4099,10322096095657499359,217.861158,215.239353,214.487635,180.000000,34.487635,yes,Both,-,"[1.4303433203278892,3.9700002183670459e-17,-2.2037928250989968e-33,1.2233507679643134e-49]",2.2096804236627024779285628784238115118483853203461617013356271627432691873521909,2.2096804236627024779285628784238115118483853203461617013356271626834118164339315 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,moderate,4099,10322096095657499356,217.160103,214.737937,214.159072,180.000000,34.159072,yes,Both,-,"[6.9851955939094275,1.9387812449671103e-16,-1.0762397889369559e-32,5.9743309684776362e-49]",540.25933261817616200059910469729467236382875532751465730859323173250980707379319,540.25933261817616200059910469729467236382875532751465730859323171413182761114806 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,near_one,4099,10322096095657499359,218.404442,215.222392,214.209524,180.000000,34.209524,yes,NaN,yes,"[0.51562981029195787,1.4311602189230828e-17,-7.9445351348799311e-34,4.4101029133436116e-50]",0.47432005334068853744838691469119725073611186863535411854720463894651210203082909,0.47432005334068853744838691469119725073611186863535411854720463896209252928278415 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,moderate,4099,10322096095657499356,219.852666,215.378850,214.042672,180.000000,34.042672,yes,NaN,yes,"[-0.049004188243731761,-1.3601394522814103e-18,7.5502906831193558e-35,-4.1912532795059553e-51]",-0.048964999496442407695752174462954719514280073534987354591187902322123112147473692,-0.048964999496442407695752174462954719514280073534987354591187902320317513639311405 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,near_one,4099,10322096095657499359,216.635189,213.881562,212.956798,180.000000,32.956798,yes,NaN,yes,"[1.1332197959754742,3.1453167736324843e-17,-1.7460015509132478e-33,9.6922556142756011e-50]",0.97250944030282146673684576741712972459065785505278761629557943342964766102358922,0.97250944030282146673684576741712972459065785505278761629557943335352570304596911 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,moderate,4099,10322096095657499356,217.749152,214.561309,213.166747,180.000000,33.166747,yes,NaN,yes,"[-1.1129700329637249,-3.089112390785367e-17,1.7148018509523894e-33,-9.519062487985893e-50]",-0.95904342784556441854164089194266034008522852163619683195211288936138295400619663,-0.95904342784556441854164089194266034008522852163619683195211288929648167565369013 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,moderate,4099,10322096095657499275,218.344248,215.313498,214.386548,180.000000,34.386548,yes,Both,-,"[1.2091565801750435,3.3560836892183684e-17,-1.8630006921695854e-33,1.0341731316696386e-49]",0.63599796632531509013285885414670992566643851908950877932499299079883667837099078,0.63599796632531509013285885414670992566643851908950877932499299078035785994962717 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,boundary,4101,10322096095657499355,217.097508,214.442677,213.709421,180.000000,33.709421,yes,Both,-,"[1.0000006102559529,2.7755592553634159e-17,-1.5407448957579594e-33,8.552852291720866e-50]",0.0011047677501095367049219422532381969737795314787741324983406649673871900506886361,0.0011047677501095367049219422532381969737795314787741324983406649674385145712399472 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,moderate,4099,10322096095657499356,217.309730,214.164921,213.300563,180.000000,33.300563,yes,NaN,yes,"[0.0664478289398438,1.8442977406342098e-18,-1.0237909079581275e-34,5.6831811920850375e-51]",0.066545884848946356015107328012468534613321875154290452987163116978656391412156697,0.066545884848946356015107328012468534613321875154290452987163116974551954049134186 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,boundary,4105,10322096095657499355,219.259597,215.988400,215.075845,180.000000,35.075845,yes,NaN,yes,"[0.5,0,0,0]",0.54930614433405484569762261846126285232374527891137472586734716682864483823413374,0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,near_one,4099,10322096095657499359,206.773984,196.847186,196.755396,180.000000,16.755396,yes,NaN,yes,"midpoint [1,0,0,0]",0.84270079294971486934122063508260925929606699796630290845993292736409039503759438,0.84270079294971486934122063508260925929606699796630290845993789783471725409601084 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,moderate,4099,10322096095657499356,218.790808,197.061585,196.771033,180.000000,16.771033,yes,NaN,yes,"[-1.0144931263435488,-2.8157840679764146e-17,1.5630741523200512e-33,-8.6768045655108495e-50]",-0.84863022897531701967121795328975048026375710416395760800302401037790857858953723,-0.84863022897531701967121795328975048026375710416395760800302896186126856971311395 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,near_one,4099,10322096095657499359,204.316189,192.489437,192.327065,180.000000,12.327065,yes,Both,-,"upper endpoint [1.5,0,0,0]",0.033894853524689272933023738354052141318589520742363219550036458011854403217248196,0.033894853524689272933023738354052141318589520742363219550032153557867145576249274 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,moderate,4099,10322096095657499356,212.004213,191.066815,189.779688,180.000000,9.779688,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804748240804760826674822248354380927724048326045650379,0.0048523201680211414554273497804748240804760826674822248354416949961916711523801507 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,moderate,4099,10322096095657499323,211.903615,199.617279,199.225949,180.000000,19.225949,yes,NaN,-,"[1.7460150498866698,4.8461652743155553e-17,-2.6901621343420086e-33,1.4933399707606258e-49]",-0.085381213564840179500933244532026946446305041549633331800426988753669607008088582,-0.085381213564840179500933244532026946446305041549633331800426897893008666204246091 +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,moderate,4099,10322096095657499320,209.040528,202.582542,202.457020,180.000000,22.457020,yes,NaN,-,"[14.307075507958793,3.9710111609966271e-16,-2.2043540109909649e-32,1.2236622887134923e-48]",13896751262.208085922946362879642934303109153237904876709680644672275751079246188,13896751262.208085922946362879642934303109153237904876709680646247264671220863527 diff --git a/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f256_fastmath_benchmark.csv b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f256_fastmath_benchmark.csv new file mode 100644 index 0000000..6ec6d80 --- /dev/null +++ b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_f256_fastmath_benchmark.csv @@ -0,0 +1,86 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,40960,10.074552,10.098609|10.083246|10.066990|10.080864|10.074552|10.067109|10.065144,11755520,118456200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,40960,10.183993,10.067028|10.183993|10.189320,2703360,27430400.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,40960,30.540161,30.545349|30.406799|30.540161,983040,29980200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,40960,91.736654,91.736654|92.100423|91.394857,368640,33820500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,40960,28.236258,28.227190|28.322754|28.236258,860160,24309900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,40960,3.338686,3.374108|3.357670|3.341927|3.338686|3.328058|3.308358|3.315956,33259520,111014400.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,40960,3.214951,3.298541|3.249870|3.236006|3.214951|3.209912|3.203304|3.190224,31252480,100913400.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,40960,23.358561,23.359104|23.358561|23.348796,1105920,25829300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,4096,89.907837,89.907837|90.126546|89.881388,294912,26533800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,40960,1.171445,1.167714|1.182439|1.171445|1.183975|1.168973|1.175837|1.170631,45588480,53540500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,40960,1.173223,1.180810|1.174742|1.172067|1.172627|1.173223|1.175374|1.172684,98631680,115843300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,40960,6.046627,6.046627|6.242172|6.176990|6.055230|5.992839|5.983809|5.979159,18063360,109610600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,40960,0.693467,0.690120|0.690192|0.697623|0.692145|0.697409|0.693467|0.696158,58777600,40784200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,40960,0.941429,0.940941|0.941429|0.943589|0.940832|0.941739|0.940464|0.945611,121856000,114798900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,40960,0.941186,0.949622|0.943035|0.955061|0.941186|0.940099|0.940413|0.941090,57917440,54694800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,40960,2.869931,2.912636|2.899732|2.879057|2.869931|2.862471|2.848365|2.843638,36126720,103817000.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,40960,13.432465,12.251434|13.432465|13.445129,1966080,25643600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,40960,8.162486,8.220622|8.415426|8.162486|8.168081|8.109283|8.115845|8.129018,13762560,112697200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,4096,6.700400,6.746393|6.700400|6.675435,3809280,25550400.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,4096,6.521846,6.545571|6.521846|6.510289,3919872,25580700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,4096,140.899658,141.215515|140.899658|140.808105,196608,27716700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,4096,211.691895,212.023926|211.691895|211.015625,122880,25998600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,2048,75.512695,78.582086|75.512695|75.432671,221184,16922600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,2048,103.171503,103.220331|103.171503|103.157552,258048,26626200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,2048,101.808966,101.877558|101.808966|101.805478,258048,26277200.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,40960,13.089097,13.087086|13.100873|13.089097,2088960,27349400.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,40960,7.562585,7.568406|7.580801|7.618784|7.555542|7.548171|7.562585|7.554603,14909440,112862100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,40960,7.188110,7.187282|7.197484|7.187500|7.187587|7.199402|7.220372|7.188110,16056320,115531500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,40960,7.202947,7.219505|7.226474|7.193404|7.184703|7.208052|7.189187|7.202947,15769600,113595800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,40960,9.133301,9.133301|9.119975|9.133911,2949120,26922700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,40960,1.344642,1.346932|1.341730|1.346713|1.343716|1.377088|1.344642|1.343598,41574400,56092300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,40960,1.258774,1.272003|1.264435|1.258087|1.255035|1.258774|1.254242|1.259689,45875200,57817600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f256,bl::nextafter,40960,6.829317,6.816613|6.822903|6.830103|6.808089|6.829317|6.855758|6.863000,16916480,115577700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f256,bl::nexttoward,40960,6.810861,6.794475|6.841151|6.826130|6.804530|6.870655|6.810861|6.802958,16916480,115396400.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,40960,0.779622,0.780809|0.774287|0.779622|0.777464|0.776186|0.782493|0.781024,61931520,48234800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,40960,0.793490,0.795125|0.793490|0.797975|0.789259|0.791999|0.793170|0.797467,63365120,50316300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,40960,1.594211,1.828586|1.662893|1.620772|1.594211|1.581790|1.566363|1.557590,26091520,42537400.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,40960,1.629858,1.765796|1.659814|1.639771|1.629858|1.618213|1.618433|1.608911,28672000,47271100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,40960,1.604681,1.849281|1.660132|1.632890|1.604681|1.598686|1.588050|1.585295,28958720,47653700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,40960,1.599876,1.754238|1.708280|1.599876|1.577274|1.604281|1.578508|1.565495,27811840,45245700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,40960,118.790283,118.780518|118.790283|118.800049,245760,29193900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,1024,351.226562,351.671875|351.226562|350.496094,76800,26966900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,4096,173.409330,173.409330|173.401818|173.469426,159744,27703900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,1024,851.708984,852.265625|851.708984|850.917969,30720,26162100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,1024,874.697266,860.068359|877.041016|874.697266,30720,26744900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,fltx,fltx,fltx bl::f256,bl::sincos,1024,1035.229492,1034.582520|1035.571289|1035.229492,24576,25439300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,1024,1119.030762,1119.030762|1117.993164|1120.483398,24576,27504700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,1024,906.087240,906.087240|898.806424|906.434462,27648,24987600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,1024,950.651042,951.573351|950.651042|949.522569,27648,26281700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,1024,1343.277995,1342.529297|1343.603516|1343.277995,18432,24756700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,1024,1335.560826,1334.291295|1335.560826|1336.244420,21504,28715700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,1024,1040.917969,1040.917969|1043.337674|1038.172743,27648,28776300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,1024,883.085938,884.755859|882.705078|883.085938,30720,27141600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,1024,1030.761719,1036.089410|1030.761719|1030.696615,27648,28547000.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,1024,1726.523438,1728.867188|1726.523438|1724.316406,15360,26520100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,1024,1755.761719,1763.593750|1755.507812|1755.761719,15360,27007300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,1024,1777.480469,1774.003906|1786.796875|1777.480469,15360,27332000.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,1024,1766.777344,1766.777344|1767.480469|1765.273438,15360,27133600.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,1024,2626.790365,2686.360677|2626.790365|2602.864583,9216,24318000.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,4096,109.857856,110.473633|109.747993|109.857856,221184,24336100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,fltx,fltx,fltx bl::f256,bl::product_sum,4096,49.108615,49.108615|49.104275|49.187283,552960,27168800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,1024,1293.863932,1298.079427|1291.992188|1293.863932,18432,23862900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,1024,1289.355469,1290.094866|1287.723214|1289.355469,21504,27719900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,1024,1261.369978,1261.369978|1261.802455|1260.016741,21504,27117900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,1024,2643.391927,2713.834635|2643.391927|2632.324219,9216,24543900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,1024,2423.681641,2435.791016|2423.681641|2422.778320,12288,29828100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,1024,2273.559570,2289.941406|2268.725586|2273.559570,12288,27984800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,128,15769.531250,16018.750000|15537.500000|15769.531250,384,6057700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,128,14825.000000,14996.093750|14825.000000|14747.656250,384,5704800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,128,11231.250000,11056.250000|11231.250000|11264.843750,384,4294700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,128,11903.906250,11903.906250|12772.656250|11677.343750,384,4653300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,4099,407.772627,410.724567|407.772627|405.425714,61485,25084300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,4099,371.082378,372.143612|370.818086|371.082378,73782,27398800.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,4099,554.891437,556.818736|554.086363|554.891437,49188,27312400.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,mt19937_64,fltx,fltx,fltx bl::f256,bl::mt19937_64,64,1.758452,1.751419|1.758452|1.790036,14846016,26227500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,uniform_real,fltx,fltx,fltx bl::f256,bl::uniform_real,64,11.405088,11.398648|11.478453|11.405088,2375808,27149300.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,normal,fltx,fltx,fltx bl::f256,bl::normal,64,265.853818,280.717181|265.471365|265.853818,91776,24842000.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f256,same workload,64,142.109375,143.125000|141.979167|142.109375,161280,22967000.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f256,same workload,64,1799.587674,1802.929688|1799.587674|1797.374132,13824,24882700.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f256,same workload,64,127.581398,127.692395|127.581398|127.402095,210816,26891400.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f256,same workload,64,560.712449,558.686986|560.712449|561.895576,46656,26147500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f256,same workload,64,473.254940,474.720790|472.820017|473.254940,55872,26460900.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,fltx,fltx,fltx bl::f256,same workload,8,250.279107,248.288334|250.279107|254.625199,105336,26446100.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f256,same workload,8,9212.500000,9262.500000|9212.500000|9212.500000,24,221500.000000, +6,680cbf9c13134cc08ab2b5bd2bd1191c,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,fltx,fltx,fltx bl::f256,same workload,8,4750.000000,4825.000000|4750.000000|4725.000000,24,114400.000000, diff --git a/validation/metrics/data/wasm32/wasm32/detail/Emscripten_fastmath_run.json b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_fastmath_run.json new file mode 100644 index 0000000..f34f396 --- /dev/null +++ b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_fastmath_run.json @@ -0,0 +1,154 @@ +{ + "accuracy_parallel": true, + "accuracy_samples": 4096, + "architecture": "wasm32", + "benchmark_corpus_policy": "adaptive-v1", + "benchmark_fast_minimum_trial_ms": 15, + "benchmark_fast_threshold_ns": 20, + "benchmark_fast_trials": 7, + "benchmark_maximum_row_ms": 5000, + "benchmark_minimum_trial_ms": 8, + "benchmark_ordinary_trials": 3, + "benchmark_policy": "adaptive-v2", + "benchmark_samples": { + "f128": 8192, + "f256": 4096 + }, + "benchmark_slow_threshold_ns": 10000, + "benchmark_trials": 7, + "compiler": "Emscripten", + "configuration": { + "build": { + "architecture": "wasm32", + "compiler-id": "Clang", + "compiler-version": "21.0.0", + "config": "Release", + "flags-hash": "da56489796c4636d9f457ea868fb77ff630a44c5ac085227cf6d448694171e39", + "frontend-variant": "GNU", + "optimized": "1", + "processor": "x86", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Emscripten" + }, + "consumer": { + "arm64": "0", + "fast-math": "on", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "0" + }, + "harness": { + "qdpp": "on", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "unavailable", + "simd": "on", + "tu-x86-fma": "0", + "x86": "0" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "0", + "f256-simd": "1", + "msvc-guarded": "0", + "neon": "0", + "runtime-check": "0", + "runtime-path": "0", + "scalar-x86": "0", + "sse2": "0", + "trig-simd": "1", + "wasm-simd": "1" + } + }, + "consumer_mode": "fastmath", + "created_utc": "2026-08-15T16:12:35.687992+00:00", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\wasm32-emscripten-release\\validation\\fltx_accuracy_fastmath.js", + "sha256": "7db88bdb4a9eac0bf8c66ddf94468f9b019964af177b84fe063bb04f802a5b87", + "wasm-sha256": "fe853fecb27b3fa46b4bd23eb647d1ef2835b966f99e2d5fa6ab0f2fca86a9ea" + }, + "benchmark": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\wasm32-emscripten-release\\validation\\fltx_benchmark_fastmath.js", + "sha256": "2398e2abed87d2401299222eccb87a4fecd82acfc6222b8adba9f49a39f36206", + "wasm-sha256": "9c4f417e947a51c528aacadb7b37418d22f5f0c408b4624d5a4b31398c12be44" + } + }, + "host": { + "machine": "AMD64", + "node": "v22.17.1", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "implementations": { + "f128": [ + { + "id": "fltx", + "label": "fltx bl::f128", + "short_label": "fltx" + } + ], + "f256": [ + { + "id": "fltx", + "label": "fltx bl::f256", + "short_label": "fltx" + } + ] + }, + "outputs": { + "Emscripten_f128_fastmath.csv": "c2c0ea50d872f8c8a7948dc259c60db00554c7e9aaf9d2fd3ff138af2267e722", + "Emscripten_f256_fastmath.csv": "66e148d035471b5cb597d112045aec66f110f8aa1d63267f1225288837df204b", + "detail/Emscripten_f128_fastmath_accuracy.csv": "711a4b6f3732eff8cc70edb3cb055dece61292d72fcf277290d4174b0cea72d6", + "detail/Emscripten_f128_fastmath_benchmark.csv": "3d0ae3485e024a5ce8c3269376200b21c5c9e631df13fd4a9ab44e7d153810ba", + "detail/Emscripten_f256_fastmath_accuracy.csv": "823daad2f3fe424e95a99c261cd34dc1a71d778515c40db05828b7f8483fe0d6", + "detail/Emscripten_f256_fastmath_benchmark.csv": "5d2235e907d9ac2adb346b8d68d3f9593fd1a67f522a93e6d4d6de65f012be52" + }, + "phases": { + "f128.accuracy": { + "output": "Emscripten_f128_fastmath_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f128.benchmark": { + "output": "Emscripten_f128_fastmath_benchmark.csv", + "return_code": 0, + "status": "passed" + }, + "f256.accuracy": { + "output": "Emscripten_f256_fastmath_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f256.benchmark": { + "output": "Emscripten_f256_fastmath_benchmark.csv", + "return_code": 0, + "status": "passed" + } + }, + "phases_requested": [ + "accuracy", + "benchmark" + ], + "platform": "wasm32", + "precisions": [ + "f128", + "f256" + ], + "run_id": "680cbf9c13134cc08ab2b5bd2bd1191c", + "sample_mode": "standard", + "schema_version": "6", + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete" +} diff --git a/validation/metrics/data/wasm32/wasm32/detail/Emscripten_run.json b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_run.json new file mode 100644 index 0000000..476c9a4 --- /dev/null +++ b/validation/metrics/data/wasm32/wasm32/detail/Emscripten_run.json @@ -0,0 +1,184 @@ +{ + "accuracy_parallel": true, + "accuracy_samples": 4096, + "architecture": "wasm32", + "benchmark_corpus_policy": "adaptive-v1", + "benchmark_fast_minimum_trial_ms": 15, + "benchmark_fast_threshold_ns": 20, + "benchmark_fast_trials": 7, + "benchmark_maximum_row_ms": 5000, + "benchmark_minimum_trial_ms": 8, + "benchmark_ordinary_trials": 3, + "benchmark_policy": "adaptive-v2", + "benchmark_samples": { + "f128": 8192, + "f256": 4096 + }, + "benchmark_slow_threshold_ns": 10000, + "benchmark_trials": 7, + "compiler": "Emscripten", + "configuration": { + "build": { + "architecture": "wasm32", + "compiler-id": "Clang", + "compiler-version": "21.0.0", + "config": "Release", + "flags-hash": "da56489796c4636d9f457ea868fb77ff630a44c5ac085227cf6d448694171e39", + "frontend-variant": "GNU", + "optimized": "1", + "processor": "x86", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Emscripten" + }, + "consumer": { + "arm64": "0", + "fast-math": "off", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "0" + }, + "harness": { + "qdpp": "on", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "unavailable", + "simd": "on", + "tu-x86-fma": "0", + "x86": "0" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "0", + "f256-simd": "1", + "msvc-guarded": "0", + "neon": "0", + "runtime-check": "0", + "runtime-path": "0", + "scalar-x86": "0", + "sse2": "0", + "trig-simd": "1", + "wasm-simd": "1" + } + }, + "consumer_mode": "strict", + "created_utc": "2026-08-15T16:06:44.184257+00:00", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\wasm32-emscripten-release\\validation\\fltx_accuracy.js", + "sha256": "d32ec2162f0ace54c144d6bfc8e0f5c8809f805e8c5e138d23fe924fb99c3c51", + "wasm-sha256": "05641fd05498b8fbf7e07b0738660bbf107c295fb6bb3304ad595ce546a7bf4f" + }, + "benchmark": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\wasm32-emscripten-release\\validation\\fltx_benchmark.js", + "sha256": "9d25f5070a17a24514de58a76d4f9917bd61b72d2165d732f3e0121f74a6c81b", + "wasm-sha256": "d46a1abc64c0142e5cef5b10d5f7f14bd025ab3432975c00574f9114a1904bb2" + } + }, + "host": { + "machine": "AMD64", + "node": "v22.17.1", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "implementations": { + "f128": [ + { + "id": "fltx", + "label": "fltx bl::f128", + "short_label": "fltx" + }, + { + "id": "qdpp", + "label": "qdpp dd_real", + "short_label": "ddreal" + }, + { + "id": "cppdd", + "label": "boost::multiprecision::cpp_double_double", + "short_label": "cppdd" + }, + { + "id": "tlfloat", + "label": "TLFloat Quad", + "short_label": "tlquad" + } + ], + "f256": [ + { + "id": "fltx", + "label": "fltx bl::f256", + "short_label": "fltx" + }, + { + "id": "qdpp", + "label": "qdpp qd_real", + "short_label": "qdreal" + }, + { + "id": "mpfr64", + "label": "boost::multiprecision::mpfr_float_backend<64>", + "short_label": "mpfr64" + }, + { + "id": "tlfloat", + "label": "TLFloat Octuple", + "short_label": "tloct" + } + ] + }, + "outputs": { + "Emscripten_f128.csv": "7402cbda244543ebd2cd98080535b08b8db551efe7774a86764d3f7e0f1f1210", + "Emscripten_f256.csv": "8a3a93e7d8a65d9fd8eb291a76ac7451147104fe56e792b74fd8af781d872d2e", + "detail/Emscripten_f128_accuracy.csv": "95dd3fa6656c5b8faa4e2c8115b429a5efca7827a7dc7af1f9b67a1b053690e2", + "detail/Emscripten_f128_benchmark.csv": "4b344056c5be90d9354c2acea6690d6facd03c33b1c096a91adf97092102c923", + "detail/Emscripten_f256_accuracy.csv": "0942365526a91aaaa90acf43bac023b57d5503c89448b9fa69bc7663f40c7a4b", + "detail/Emscripten_f256_benchmark.csv": "b9d0442547d657a0895da6ff78eb81100520439200ccfd0c738d1d59920f346b" + }, + "phases": { + "f128.accuracy": { + "output": "Emscripten_f128_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f128.benchmark": { + "output": "Emscripten_f128_benchmark.csv", + "return_code": 0, + "status": "passed" + }, + "f256.accuracy": { + "output": "Emscripten_f256_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f256.benchmark": { + "output": "Emscripten_f256_benchmark.csv", + "return_code": 0, + "status": "passed" + } + }, + "phases_requested": [ + "accuracy", + "benchmark" + ], + "platform": "wasm32", + "precisions": [ + "f128", + "f256" + ], + "run_id": "07cb9aa0af7241f981735eab48f97723", + "sample_mode": "standard", + "schema_version": "6", + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete" +} diff --git a/validation/metrics/data/windows/x86_64/ClangCL_f128.csv b/validation/metrics/data/windows/x86_64/ClangCL_f128.csv new file mode 100644 index 0000000..e99ef19 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/ClangCL_f128.csv @@ -0,0 +1,232 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,4096,120.266239506,106.483519,105.736235,2,2,15.736235,yes,Both,no,2.236468,1.190252,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,add,f128,fltx,fltx,fltx bl::f128,bl::add,4096,120.266239506,106.483519,105.736235,2,2,15.736235,yes,Both,no,1.878988,,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,add,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,4096,127.004869623,113.252951,113.031307,2,2,23.031307,yes,No,no,20.256551,10.780567,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,divide,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator/,4100,110.909104952,105.971646,105.124683,2,2,15.124683,yes,NaN,no,5.345657,3.132583,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,divide,f128,fltx,fltx,fltx bl::f128,bl::divide,4100,110.909104952,105.971646,105.124683,2,2,15.124683,yes,Both,yes,1.706469,,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,divide,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,4100,114.962938068,113.147176,113.003421,2,2,23.003421,yes,No,no,63.138428,36.999451,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,multiply,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,4100,108.546950295,105.172405,104.685792,2,2,14.685792,yes,Both,no,2.313054,1.932295,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,multiply,f128,fltx,fltx,fltx bl::f128,bl::multiply,4100,108.702461473,105.665876,105.380753,2,2,15.380753,yes,Both,yes,1.19705,,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,multiply,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,4100,114.973330655,113.125729,113.004612,2,2,23.004612,yes,No,no,22.750488,19.005459,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,subtract,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,4096,120.053476095,106.530508,105.744857,2,2,15.744857,yes,Both,no,2.272722,1.214281,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,subtract,f128,fltx,fltx,fltx bl::f128,bl::subtract,4096,120.053476095,106.530508,105.744857,2,2,15.744857,yes,Both,no,1.87166,,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,subtract,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,4096,127.171548646,113.274079,113.01331,2,2,23.01331,yes,No,no,20.279338,10.834945,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.817757,1.251622,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,equal,f128,fltx,fltx,fltx bl::f128,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.653358,,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,3.60842,5.522885,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,greater,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.0269,0.916154,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,greater,f128,fltx,fltx,fltx bl::f128,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.120882,,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,greater,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.313128,4.740132,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,greater_equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.044108,0.936651,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,greater_equal,f128,fltx,fltx,fltx bl::f128,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.114725,,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,greater_equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.600083,5.023737,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,less,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.60967,1.612631,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,less,f128,fltx,fltx,fltx bl::f128,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.998164,,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,less,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.117155,5.126567,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,less_equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.944537,0.952005,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,less_equal,f128,fltx,fltx,fltx bl::f128,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.992156,,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,less_equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.273471,5.315162,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,not_equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.920377,1.268197,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,not_equal,f128,fltx,fltx,fltx bl::f128,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.725736,,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,not_equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,3.643288,5.020126,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,exp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,8198,100.3727745,0,0,1,2,-80,no,Both,-,336.88777,3.656885,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,exp,f128,fltx,fltx,fltx bl::f128,bl::exp,8198,106.989164,104.344345,103.64511,2,2,23.64511,yes,Both,-,92.124245,,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,exp,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,8198,114.9390545,113.155192,113.027016,2,2,33.027016,yes,No,-,692.03404,7.511964,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,exp2,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,8198,101.653295,96.37431,95.216729,2,2,15.216729,yes,Both,-,750.626628,8.270925,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,exp2,f128,fltx,fltx,fltx bl::f128,bl::exp2,8198,108.8963935,106.013023,105.117537,2,2,25.117537,yes,Both,-,90.754862,,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,exp2,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,8198,114.9915935,113.141516,113.011731,2,2,33.011731,yes,No,-,1588.916016,17.507778,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,expm1,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,8197,120.348697197,101.057168,100.341101,2,2,20.341101,yes,Both,no,350.183105,3.708029,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,expm1,f128,fltx,fltx,fltx bl::f128,bl::expm1,8197,121.61686848,105.111574,104.102752,2,2,24.102752,yes,Both,yes,94.439142,,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,expm1,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,8197,128.181752377,113.238852,113.009736,2,2,33.009736,yes,No,no,742.919922,7.866653,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,abs,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,3.313621,1.084016,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,abs,f128,fltx,fltx,fltx bl::f128,bl::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,3.056801,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,abs,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,8196,inf,inf,inf,2,2,inf,yes,No,yes,0.411061,0.134474,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,copysign,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,no,1.395378,3.060391,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,copysign,f128,fltx,fltx,fltx bl::f128,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,0.455948,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,copysign,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::copysign,4099,inf,inf,inf,1,1,inf,yes,No,no,0.504689,1.106901,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fabs,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,3.380781,1.094161,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fabs,f128,fltx,fltx,fltx bl::f128,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,3.08984,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fabs,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,4099,inf,inf,inf,1,1,inf,yes,No,yes,0.41078,0.132945,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fdim,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,8197,137.996123973,inf,106.227061,2,2,16.227061,yes,No,yes,3.277927,1.201194,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fdim,f128,fltx,fltx,fltx bl::f128,bl::fdim,8197,137.996123973,inf,106.227061,2,2,16.227061,yes,Both,yes,2.728891,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fdim,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,8197,inf,inf,inf,2,2,inf,yes,No,yes,22.645264,8.29834,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fma,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,12293,75.7644862641,0,0,2,3,-90,no,Both,no,15.279635,2.300933,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fma,f128,fltx,fltx,fltx bl::f128,bl::fma,12293,117.44188202,104.680325,99.5802,3,3,9.5802,yes,Both,no,6.640625,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fma,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,12293,128.420266387,113.182994,113.025245,3,3,23.025245,yes,No,no,38.679606,5.824694,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fmax,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,yes,2.48715,3.534999,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fmax,f128,fltx,fltx,fltx bl::f128,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,yes,0.703579,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fmax,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,8195,inf,inf,inf,2,2,inf,yes,No,no,5.924873,8.421055,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fmin,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,no,2.370384,3.154373,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fmin,f128,fltx,fltx,fltx bl::f128,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,yes,0.751459,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fmin,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,8195,inf,inf,inf,2,2,inf,yes,No,no,6.073746,8.0826,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,frexp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,no,4.011572,1.629589,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,frexp,f128,fltx,fltx,fltx bl::f128,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,2.461708,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,frexp,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,8196,inf,inf,inf,2,2,inf,yes,No,no,14.018636,5.694679,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,ilogb,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,4.049551,2.897852,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,ilogb,f128,fltx,fltx,fltx bl::f128,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.397432,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,ilogb,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,0.640567,0.458389,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,ldexp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,3.675173,2.547482,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,ldexp,f128,fltx,fltx,fltx bl::f128,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.442669,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,ldexp,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::ldexp,4096,inf,inf,inf,1,1,inf,yes,No,no,11.306831,7.837439,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,logb,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,71.890869,55.798365,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,logb,f128,fltx,fltx,fltx bl::f128,bl::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,1.288405,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,modf,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,8195,inf,inf,inf,2,2,inf,yes,NaN,no,7.702778,1.311243,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,modf,f128,fltx,fltx,fltx bl::f128,bl::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,5.874407,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,modf,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,8195,inf,inf,inf,2,2,inf,yes,No,no,24.458008,4.163485,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,nextafter,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter,,,,,,,,,-,-,29.264526,6.781085,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,nextafter,f128,fltx,fltx,fltx bl::f128,bl::nextafter,,,,,,,,,-,-,4.315611,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,nextafter,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter,,,,,,,,,-,-,7.142334,1.654999,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,nexttoward,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter (same type),,,,,,,,,-,-,29.318237,6.830419,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,nexttoward,f128,fltx,fltx,fltx bl::f128,bl::nexttoward,,,,,,,,,-,-,4.292304,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,nexttoward,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter (same type),,,,,,,,,-,-,7.14883,1.665499,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,recip,f128,fltx,fltx,fltx bl::f128,bl::recip,8195,109.025331959,105.925795,105.189487,2,2,15.189487,yes,Both,yes,38.055617,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,scalbln,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,no,3.690464,2.690623,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,scalbln,f128,fltx,fltx,fltx bl::f128,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.371602,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,scalbn,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,no,3.690678,2.69454,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,scalbn,f128,fltx,fltx,fltx bl::f128,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.369687,,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,cosh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,8198,104.0385055,101.138682,100.616889,2,2,20.616889,yes,Both,-,367.150879,3.468249,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,cosh,f128,fltx,fltx,fltx bl::f128,bl::cosh,8198,107.9070545,105.118172,104.370708,2,2,24.370708,yes,Both,-,105.860596,,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,cosh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,8198,114.913131,113.167572,113.010341,2,2,33.010341,yes,No,-,752.400716,7.107467,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,sinh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,8198,103.5471475,100.590468,99.932085,2,2,19.932085,yes,Both,no,366.780599,3.446311,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,sinh,f128,fltx,fltx,fltx bl::f128,bl::sinh,8198,107.4201585,104.726423,103.568829,2,2,23.568829,yes,Both,yes,106.427002,,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,sinh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,8198,114.9589025,113.141428,113.003172,2,2,33.003172,yes,No,no,799.430339,7.511537,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,tanh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,8198,105.787236,101.155017,100.345784,2,2,20.345784,yes,Both,no,384.342448,3.439497,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,tanh,f128,fltx,fltx,fltx bl::f128,bl::tanh,8198,109.217494,105.123457,103.771823,2,2,23.771823,yes,Both,yes,111.74379,,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,tanh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,8198,115.2023705,113.224776,113.018718,2,2,33.018718,yes,Inf,no,785.359701,7.028218,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,acosh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,8200,105.6097898,101.710952,100.384388,2,2,20.384388,yes,Both,-,714.18457,5.359287,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,acosh,f128,fltx,fltx,fltx bl::f128,bl::acosh,8200,108.031519376,104.331717,103.672888,2,2,23.672888,yes,Both,-,133.261108,,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,acosh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,8200,114.902573821,113.201891,113.024351,2,2,33.024351,yes,No,-,2780.151367,20.862436,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,asinh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,8198,104.463884,100.780938,99.800033,2,2,19.800033,yes,Both,no,653.75279,5.459662,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,asinh,f128,fltx,fltx,fltx bl::f128,bl::asinh,8198,108.081857,105.155677,103.818628,2,2,23.818628,yes,Both,yes,119.74236,,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,asinh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,8198,114.8781205,113.122222,113.007648,2,2,33.007648,yes,No,no,2921.533203,24.398494,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,atanh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,8204,106.728043765,102.148131,101.316477,2,2,21.316477,yes,Both,no,2514.208984,19.360931,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,atanh,f128,fltx,fltx,fltx bl::f128,bl::atanh,8204,108.11583849,104.54201,103.139045,2,2,23.139045,yes,Both,yes,129.859924,,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,atanh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,8204,115.135452038,113.183849,113.00948,2,2,33.00948,yes,No,no,953.75,7.344452,1bd8465fefb349c8bd408bdef2fbe2ea +io,parse,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,8195,107.103916819,0,0,1,2,-106,no,Both,no,765.698951,3.762362,1bd8465fefb349c8bd408bdef2fbe2ea +io,parse,f128,fltx,fltx,fltx bl::f128,bl::parse,8195,109.936763821,107.051396,106.003381,2,2,0.003381,yes,Both,yes,203.515492,,1bd8465fefb349c8bd408bdef2fbe2ea +io,parse,f128,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,8195,114.932563094,113.157032,113.020059,2,2,7.020059,yes,No,no,1045.515166,5.137276,1bd8465fefb349c8bd408bdef2fbe2ea +io,to_chars,f128,fltx,fltx,fltx bl::f128,bl::to_chars,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,157.44781,,1bd8465fefb349c8bd408bdef2fbe2ea +io,to_string,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,8195,110.768659892,106.034942,105.994061,2,2,15.994061,yes,Both,no,658.233716,3.493327,1bd8465fefb349c8bd408bdef2fbe2ea +io,to_string,f128,fltx,fltx,fltx bl::f128,bl::to_string,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,188.426039,,1bd8465fefb349c8bd408bdef2fbe2ea +io,to_string,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,8195,110.6557863,107.628363,107.30463,2,2,17.30463,yes,Both,yes,1642.315199,8.715967,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,12291,105.261925298,95.715279,87.939907,3,3,7.939907,yes,Both,-,373.06722,3.029472,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log,f128,fltx,fltx,fltx bl::f128,bl::log,12291,108.40767633,104.625423,103.727726,3,3,23.727726,yes,Both,-,123.145967,,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log,12291,115.112527379,113.162642,113.007854,3,3,33.007854,yes,No,-,856.816406,6.95773,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log10,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,12291,102.940505826,95.718828,87.939938,3,3,7.939938,yes,Both,-,384.521484,3.012624,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log10,f128,fltx,fltx,fltx bl::f128,bl::log10,12291,107.503050022,104.469291,103.762278,3,3,23.762278,yes,Both,-,127.636719,,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log10,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,12291,114.873180067,113.138717,113.007632,3,3,33.007632,yes,No,-,901.230469,7.060903,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log1p,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,8197,119.746353582,101.291508,100.173624,2,2,20.173624,yes,Both,no,490.901693,3.944025,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log1p,f128,fltx,fltx,fltx bl::f128,bl::log1p,8197,121.372231555,105.150365,103.619384,2,2,23.619384,yes,Both,yes,124.467199,,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log1p,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,8197,128.112358976,113.130249,113.010769,2,2,33.010769,yes,No,no,898.203125,7.216384,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log2,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,12291,106.566480905,95.715106,87.939906,3,3,7.939906,yes,Both,-,384.391276,3.011062,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log2,f128,fltx,fltx,fltx bl::f128,bl::log2,12291,108.785650924,104.550799,103.716432,3,3,23.716432,yes,Both,-,127.659697,,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log2,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,12291,116.314749653,113.191847,113.016527,3,3,33.016527,yes,No,-,899.667969,7.047392,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,affine_trig,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,830.324836,4.430726,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,affine_trig,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,187.401541,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,affine_trig,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,1392.29798,7.429491,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,chained_arithmetic,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,25.64452,1.051987,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,chained_arithmetic,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,24.377232,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,chained_arithmetic,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,150.268688,6.164305,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,haversine,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,5521.34901,12.750497,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,haversine,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,433.030094,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,haversine,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,4262.939453,9.844442,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,horner_polynomial,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,107.193201,0.643426,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,horner_polynomial,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,166.597524,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,horner_polynomial,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,601.777251,3.612162,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,log_sum_exp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,2834.92268,3.421719,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,log_sum_exp,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,828.508277,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,log_sum_exp,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,6136.875,7.407138,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,mandelbrot,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,18.182509,0.91606,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,mandelbrot,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,19.848594,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,mandelbrot,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,152.246202,7.670377,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,matrix_vector_4x4,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,81.430931,1.489845,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,matrix_vector_4x4,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,54.657334,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,matrix_vector_4x4,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,575.520833,10.529618,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,newton_root,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,34.713948,1.089521,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,newton_root,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,31.86166,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,newton_root,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,222.386707,6.979759,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,product_sum,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same expression,,,,,,,,,-,-,6.977016,1.506609,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,product_sum,f128,fltx,fltx,fltx bl::f128,bl::product_sum,,,,,,,,,-,-,4.63094,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,product_sum,f128,tlfloat,tlquad,TLFloat Quad,same expression,,,,,,,,,-,-,65.073395,14.051877,1bd8465fefb349c8bd408bdef2fbe2ea +random,mt19937_64,f128,fltx,fltx,fltx bl::f128,bl::mt19937_64,,,,,,,,,-,-,1.380801,,1bd8465fefb349c8bd408bdef2fbe2ea +random,normal,f128,fltx,fltx,fltx bl::f128,bl::normal,,,,,,,,,-,-,43.952602,,1bd8465fefb349c8bd408bdef2fbe2ea +random,uniform_real,f128,fltx,fltx,fltx bl::f128,bl::uniform_real,,,,,,,,,-,-,7.327998,,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,fmod,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,8197,106.658013851,0,0,1,3,-90,no,NaN,no,36.458471,1.938902,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,fmod,f128,fltx,fltx,fltx bl::f128,bl::fmod,8197,inf,inf,inf,3,3,inf,yes,Both,yes,18.803665,,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,fmod,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,8197,inf,inf,inf,3,3,inf,yes,No,no,126.045496,6.703241,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,remainder,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remainder,4099,134.409394,100.966202,95.502103,1,1,5.502103,yes,NaN,no,41.498162,1.710405,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,remainder,f128,fltx,fltx,fltx bl::f128,bl::remainder,4099,137.991491,inf,103.120938,1,1,13.120938,yes,Both,yes,24.262184,,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,remainder,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::remainder,4099,inf,inf,inf,1,1,inf,yes,No,no,119.725206,4.934643,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,remquo,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remquo,4099,inf,inf,inf,1,1,inf,yes,NaN,no,41.399069,1.754491,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,remquo,f128,fltx,fltx,fltx bl::f128,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,23.596054,,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,remquo,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::remquo,4099,inf,inf,inf,1,1,inf,yes,No,no,120.003734,5.085754,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,cbrt,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,8195,108.394414444,105.391162,104.600252,2,2,14.600252,yes,Both,no,352.351262,15.65504,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,cbrt,f128,fltx,fltx,fltx bl::f128,bl::cbrt,8195,108.037583359,104.101707,103.019576,2,2,13.019576,yes,Both,yes,22.507209,,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,cbrt,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,8195,115.032863938,113.203933,113.021191,2,2,23.021191,yes,No,no,576.135254,25.59781,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,hypot,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,8195,121.944215111,104.898769,104.258205,2,2,14.258205,yes,Both,yes,61.05239,5.935593,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,hypot,f128,fltx,fltx,fltx bl::f128,bl::hypot,8195,122.379344938,105.55647,104.375984,2,2,14.375984,yes,Both,yes,10.285811,,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,hypot,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,8195,128.957366847,113.150622,113.012814,2,2,23.012814,yes,No,yes,111.96167,10.88506,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,ipow,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",8195,106.377664118,103.455996,102.733123,2,2,12.733123,yes,Both,no,9.007568,0.374085,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,ipow,f128,fltx,fltx,fltx bl::f128,bl::ipow,8195,106.491467825,103.779117,103.190083,2,2,13.190083,yes,Both,no,24.078924,,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,pow,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,8198,102.607858,98.689822,97.605813,2,2,17.605813,yes,Inf,no,602.697754,3.128185,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,pow,f128,fltx,fltx,fltx bl::f128,bl::pow,8198,107.1276135,102.267431,101.314349,2,2,21.314349,yes,Both,yes,192.666903,,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,pow,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,8198,114.938032,113.162316,113.016553,2,2,33.016553,yes,No,no,3218.62793,16.705661,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,sqr,f128,fltx,fltx,fltx bl::f128,bl::sqr,8195,108.712755765,105.598081,105.370295,2,2,15.370295,yes,Both,yes,1.095979,,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,sqrt,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,16391,113.552288395,54.203493,52.856137,2,4,-37.143863,no,Both,no,2.949909,0.795737,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,sqrt,f128,fltx,fltx,fltx bl::f128,bl::sqrt,16391,109.749936251,105.75112,104.669867,4,4,14.669867,yes,Both,yes,3.70714,,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,sqrt,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,16391,115.16223339,113.1397,113.011246,4,4,23.011246,yes,No,no,72.987671,19.688406,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,ceil,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ceil,4108,inf,inf,inf,1,1,inf,yes,Both,no,2.147013,1.165226,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,ceil,f128,fltx,fltx,fltx bl::f128,bl::ceil,4108,inf,inf,inf,1,1,inf,yes,Both,yes,1.842573,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,ceil,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::ceil,4108,inf,inf,inf,1,1,inf,yes,No,no,4.82522,2.61874,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,floor,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::floor,4108,inf,inf,inf,1,1,inf,yes,Both,no,1.453287,1.071259,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,floor,f128,fltx,fltx,fltx bl::f128,bl::floor,4108,inf,inf,inf,1,1,inf,yes,Both,yes,1.356617,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,floor,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::floor,4108,inf,inf,inf,1,1,inf,yes,No,no,5.106779,3.76435,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,llround,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::llround,4114,inf,inf,inf,1,1,inf,yes,-,-,384.928385,96.838561,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,llround,f128,fltx,fltx,fltx bl::f128,bl::llround,4114,inf,inf,inf,1,1,inf,yes,-,-,3.974949,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,lround,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lround,4110,inf,inf,inf,1,1,inf,yes,-,-,10.112169,2.383806,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,lround,f128,fltx,fltx,fltx bl::f128,bl::lround,4110,inf,inf,inf,1,1,inf,yes,-,-,4.242026,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,round,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::round,4108,inf,inf,inf,1,1,inf,yes,Both,no,6.632543,0.888058,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,round,f128,fltx,fltx,fltx bl::f128,bl::round,4108,inf,inf,inf,1,1,inf,yes,Both,yes,7.46859,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,round,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::round,4108,inf,inf,inf,1,1,inf,yes,No,no,3.899979,0.522184,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,round_decimals,f128,fltx,fltx,fltx bl::f128,bl::round_decimals,4099,110.177573,107.236356,107.022726,1,1,17.022726,yes,Both,yes,78.601074,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,round_significant,f128,fltx,fltx,fltx bl::f128,bl::round_significant,4096,121.33026,107.34042,107.049597,1,1,17.049597,yes,Both,yes,110.710449,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,roundeven,f128,fltx,fltx,fltx bl::f128,bl::roundeven,4108,inf,inf,inf,1,1,inf,yes,Both,yes,9.696838,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,roundeven,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::rint,4108,inf,inf,inf,1,1,inf,yes,No,no,4.104741,0.423307,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,trunc,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::trunc,4108,inf,inf,inf,1,1,inf,yes,Both,no,5.241804,2.489356,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,trunc,f128,fltx,fltx,fltx bl::f128,bl::trunc,4108,inf,inf,inf,1,1,inf,yes,Both,yes,2.105687,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,trunc,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::trunc,4108,inf,inf,inf,1,1,inf,yes,No,no,2.420058,1.149297,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,erf,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,8198,110.091104,102.183057,101.184994,2,2,21.184994,yes,Both,no,1109.349798,1.992576,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,erf,f128,fltx,fltx,fltx bl::f128,bl::erf,8198,110.8988915,104.260004,103.47754,2,2,23.47754,yes,Both,yes,556.741649,,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,erf,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,8198,115.2497885,113.304511,113.036088,2,2,33.036088,yes,Inf,no,20283.59375,36.432686,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,erfc,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,8198,106.2952345,99.620228,99.060329,2,2,19.060329,yes,Both,-,1101.587702,1.98987,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,erfc,f128,fltx,fltx,fltx bl::f128,bl::erfc,8198,107.1893035,100.123363,99.167646,2,2,19.167646,yes,Both,-,553.597862,,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,erfc,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,8198,115.0926585,113.21381,113.051599,2,2,33.051599,yes,Inf,-,20282.8125,36.63817,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,lgamma,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lgamma,4099,105.130791,100.729534,92.065791,1,1,12.065791,yes,Both,-,2623.102679,4.92123,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,lgamma,f128,fltx,fltx,fltx bl::f128,bl::lgamma,4099,107.30017,103.199673,102.168212,1,1,22.168212,yes,Both,-,533.017744,,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,lgamma,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::lgamma,4099,114.971639,113.175643,113.01385,1,1,33.01385,yes,No,-,13353.515625,25.052666,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,tgamma,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tgamma,4099,100.757166,97.38341,96.496549,1,1,16.496549,yes,Both,-,1898.190789,4.050963,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,tgamma,f128,fltx,fltx,fltx bl::f128,bl::tgamma,4099,105.565044,98.349598,97.317514,1,1,17.317514,yes,Both,-,468.577665,,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,tgamma,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::tgamma,4099,115.005599,113.180213,113.028818,1,1,33.028818,yes,No,-,14975.390625,31.95925,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,acos,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,8204,106.956932498,104.122161,102.539984,2,2,22.539984,yes,Both,-,1935.172526,11.966423,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,acos,f128,fltx,fltx,fltx bl::f128,bl::acos,8204,106.470630111,95.825547,81.584963,2,2,1.584963,yes,Both,-,161.716872,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,acos,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,8204,114.925291168,113.171158,113.019157,2,2,33.019157,yes,No,-,1364.84375,8.439712,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,asin,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,8204,106.761451076,104.076665,103.158102,2,2,23.158102,yes,Both,no,2015.087891,12.815575,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,asin,f128,fltx,fltx,fltx bl::f128,bl::asin,8204,108.580073592,105.096123,104.081582,2,2,24.081582,yes,Both,yes,157.237413,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,asin,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,8204,115.030420086,113.199623,113.012058,2,2,33.012058,yes,No,no,1359.887695,8.648627,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,atan,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,8198,106.716552,104.193031,103.565475,2,2,23.565475,yes,Both,no,326.140485,2.984626,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,atan,f128,fltx,fltx,fltx bl::f128,bl::atan,8198,108.728555,105.953468,104.92639,2,2,24.92639,yes,Both,yes,109.273489,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,atan,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,8198,114.987901,113.253632,113.035851,2,2,33.035851,yes,Inf,no,1207.69043,11.051998,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,atan2,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,8206,106.701442375,0,0,2,3,-80,no,Both,no,331.361607,2.851826,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,atan2,f128,fltx,fltx,fltx bl::f128,bl::atan2,8206,108.727143624,105.799026,104.520841,3,3,24.520841,yes,Both,yes,116.192801,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,atan2,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,8206,114.953607052,113.169783,113.0059,3,3,33.0059,yes,Inf,no,1205.810547,10.37767,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,cos,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,12524,63.2693933828,0,0,1,3,-80,no,Both,-,566.363525,6.72078,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,cos,f128,fltx,fltx,fltx bl::f128,bl::cos,12524,113.520718505,100.266388,99.209588,3,3,19.209588,yes,Both,-,84.270508,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,cos,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,12524,117.223146672,113.213457,113.01099,3,3,33.01099,yes,No,-,653.620257,7.756216,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,sin,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,12524,51.3516367719,0,0,1,3,-80,no,Both,no,570.269775,6.727122,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,sin,f128,fltx,fltx,fltx bl::f128,bl::sin,12524,110.553532277,98.777563,98.619216,3,3,18.619216,yes,Both,yes,84.771729,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,sin,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,12524,116.147164931,113.247632,113.016004,3,3,33.016004,yes,No,no,653.083147,7.704021,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,sincos,f128,fltx,fltx,fltx bl::f128,bl::sincos,,,,,,,,,-,-,94.938908,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,sincos,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sincos,,,,,,,,,-,-,1333.02002,14.040819,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,tan,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,12524,41.1613259056,0,0,1,3,-75,no,Both,no,1131.555176,11.800718,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,tan,f128,fltx,fltx,fltx bl::f128,bl::tan,12524,106.705038797,98.776698,98.614153,3,3,23.614153,yes,Both,yes,95.888672,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,tan,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,12524,114.951330489,113.144915,113.016302,3,3,38.016302,yes,No,no,819.132487,8.542537,1bd8465fefb349c8bd408bdef2fbe2ea diff --git a/validation/metrics/data/windows/x86_64/ClangCL_f128_fastmath.csv b/validation/metrics/data/windows/x86_64/ClangCL_f128_fastmath.csv new file mode 100644 index 0000000..7e4f69d --- /dev/null +++ b/validation/metrics/data/windows/x86_64/ClangCL_f128_fastmath.csv @@ -0,0 +1,86 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f128,fltx,fltx,fltx bl::f128,bl::add,4096,120.266239506,106.483519,105.736235,2,2,15.736235,yes,NaN,no,0.923151,,081f2f75d252445da1de5098f50b7f37 +arithmetic,divide,f128,fltx,fltx,fltx bl::f128,bl::divide,4100,110.909104952,105.971646,105.124683,2,2,15.124683,yes,NaN,no,1.594951,,081f2f75d252445da1de5098f50b7f37 +arithmetic,multiply,f128,fltx,fltx,fltx bl::f128,bl::multiply,4100,108.546308757,105.172405,104.685792,2,2,14.685792,yes,NaN,no,2.488773,,081f2f75d252445da1de5098f50b7f37 +arithmetic,subtract,f128,fltx,fltx,fltx bl::f128,bl::subtract,4096,120.053476095,106.530508,105.744857,2,2,15.744857,yes,NaN,no,0.922846,,081f2f75d252445da1de5098f50b7f37 +comparisons,equal,f128,fltx,fltx,fltx bl::f128,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.855078,,081f2f75d252445da1de5098f50b7f37 +comparisons,greater,f128,fltx,fltx,fltx bl::f128,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.081597,,081f2f75d252445da1de5098f50b7f37 +comparisons,greater_equal,f128,fltx,fltx,fltx bl::f128,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.224121,,081f2f75d252445da1de5098f50b7f37 +comparisons,less,f128,fltx,fltx,fltx bl::f128,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.130316,,081f2f75d252445da1de5098f50b7f37 +comparisons,less_equal,f128,fltx,fltx,fltx bl::f128,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.134671,,081f2f75d252445da1de5098f50b7f37 +comparisons,not_equal,f128,fltx,fltx,fltx bl::f128,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.933284,,081f2f75d252445da1de5098f50b7f37 +exponentials,exp,f128,fltx,fltx,fltx bl::f128,bl::exp,8198,106.989164,104.344345,103.64511,2,2,23.64511,yes,Both,-,92.029918,,081f2f75d252445da1de5098f50b7f37 +exponentials,exp2,f128,fltx,fltx,fltx bl::f128,bl::exp2,8198,108.8963935,106.013023,105.117537,2,2,25.117537,yes,Both,-,90.386963,,081f2f75d252445da1de5098f50b7f37 +exponentials,expm1,f128,fltx,fltx,fltx bl::f128,bl::expm1,8197,121.61686848,105.111574,104.102752,2,2,24.102752,yes,Both,yes,93.958333,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,abs,f128,fltx,fltx,fltx bl::f128,bl::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,3.122038,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,copysign,f128,fltx,fltx,fltx bl::f128,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,0.457148,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,fabs,f128,fltx,fltx,fltx bl::f128,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,3.14085,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,fdim,f128,fltx,fltx,fltx bl::f128,bl::fdim,8197,137.996123973,inf,106.227061,2,2,16.227061,yes,NaN,yes,2.759536,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,fma,f128,fltx,fltx,fltx bl::f128,bl::fma,12293,117.232340894,104.340724,99.5802,3,3,9.5802,yes,Both,no,5.556675,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,fmax,f128,fltx,fltx,fltx bl::f128,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,Inf,yes,0.728835,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,fmin,f128,fltx,fltx,fltx bl::f128,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,Inf,yes,0.805319,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,frexp,f128,fltx,fltx,fltx bl::f128,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,2.412404,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,ilogb,f128,fltx,fltx,fltx bl::f128,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.733809,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,ldexp,f128,fltx,fltx,fltx bl::f128,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.434586,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,logb,f128,fltx,fltx,fltx bl::f128,bl::logb,8195,inf,inf,inf,2,2,inf,yes,NaN,-,1.676126,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,modf,f128,fltx,fltx,fltx bl::f128,bl::modf,8195,inf,inf,inf,2,2,inf,yes,NaN,yes,5.824463,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,nextafter,f128,fltx,fltx,fltx bl::f128,bl::nextafter,,,,,,,,,-,-,4.229083,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,nexttoward,f128,fltx,fltx,fltx bl::f128,bl::nexttoward,,,,,,,,,-,-,4.199166,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,recip,f128,fltx,fltx,fltx bl::f128,bl::recip,8195,109.025331959,105.925795,105.189487,2,2,15.189487,yes,Both,yes,23.631727,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,scalbln,f128,fltx,fltx,fltx bl::f128,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.36331,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,scalbn,f128,fltx,fltx,fltx bl::f128,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.362952,,081f2f75d252445da1de5098f50b7f37 +hyperbolic,cosh,f128,fltx,fltx,fltx bl::f128,bl::cosh,8198,107.9070545,105.118172,104.370708,2,2,24.370708,yes,Both,-,105.259146,,081f2f75d252445da1de5098f50b7f37 +hyperbolic,sinh,f128,fltx,fltx,fltx bl::f128,bl::sinh,8198,107.4201585,104.726423,103.568829,2,2,23.568829,yes,Both,yes,106.16862,,081f2f75d252445da1de5098f50b7f37 +hyperbolic,tanh,f128,fltx,fltx,fltx bl::f128,bl::tanh,8198,109.217494,105.123457,103.771823,2,2,23.771823,yes,Both,yes,111.31656,,081f2f75d252445da1de5098f50b7f37 +inverse_hyperbolic,acosh,f128,fltx,fltx,fltx bl::f128,bl::acosh,8200,108.031519376,104.331717,103.672888,2,2,23.672888,yes,Both,-,132.61261,,081f2f75d252445da1de5098f50b7f37 +inverse_hyperbolic,asinh,f128,fltx,fltx,fltx bl::f128,bl::asinh,8198,108.081857,105.155677,103.818628,2,2,23.818628,yes,Both,yes,119.052734,,081f2f75d252445da1de5098f50b7f37 +inverse_hyperbolic,atanh,f128,fltx,fltx,fltx bl::f128,bl::atanh,8204,108.11583849,104.54201,103.139045,2,2,23.139045,yes,Both,yes,129.354581,,081f2f75d252445da1de5098f50b7f37 +io,parse,f128,fltx,fltx,fltx bl::f128,bl::parse,8195,109.936763821,107.051396,106.003381,2,2,0.003381,yes,Both,yes,202.515248,,081f2f75d252445da1de5098f50b7f37 +io,to_chars,f128,fltx,fltx,fltx bl::f128,bl::to_chars,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,154.330324,,081f2f75d252445da1de5098f50b7f37 +io,to_string,f128,fltx,fltx,fltx bl::f128,bl::to_string,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,186.144995,,081f2f75d252445da1de5098f50b7f37 +logarithms,log,f128,fltx,fltx,fltx bl::f128,bl::log,12291,108.40767633,104.625423,103.727726,3,3,23.727726,yes,Both,-,122.792969,,081f2f75d252445da1de5098f50b7f37 +logarithms,log10,f128,fltx,fltx,fltx bl::f128,bl::log10,12291,107.503050022,104.469291,103.762278,3,3,23.762278,yes,Both,-,127.244658,,081f2f75d252445da1de5098f50b7f37 +logarithms,log1p,f128,fltx,fltx,fltx bl::f128,bl::log1p,8197,121.372231555,105.150365,103.619384,2,2,23.619384,yes,Both,yes,123.897879,,081f2f75d252445da1de5098f50b7f37 +logarithms,log2,f128,fltx,fltx,fltx bl::f128,bl::log2,12291,108.785650924,104.550799,103.716432,3,3,23.716432,yes,Both,-,126.889936,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,affine_trig,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,179.93571,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,chained_arithmetic,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,14.169038,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,haversine,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,411.277529,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,horner_polynomial,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,86.424366,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,log_sum_exp,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,793.13266,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,mandelbrot,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,12.479378,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,matrix_vector_4x4,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,54.424413,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,newton_root,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,22.994348,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,product_sum,f128,fltx,fltx,fltx bl::f128,bl::product_sum,,,,,,,,,-,-,5.056453,,081f2f75d252445da1de5098f50b7f37 +random,mt19937_64,f128,fltx,fltx,fltx bl::f128,bl::mt19937_64,,,,,,,,,-,-,1.367528,,081f2f75d252445da1de5098f50b7f37 +random,normal,f128,fltx,fltx,fltx bl::f128,bl::normal,,,,,,,,,-,-,41.813786,,081f2f75d252445da1de5098f50b7f37 +random,uniform_real,f128,fltx,fltx,fltx bl::f128,bl::uniform_real,,,,,,,,,-,-,7.230124,,081f2f75d252445da1de5098f50b7f37 +remainders,fmod,f128,fltx,fltx,fltx bl::f128,bl::fmod,8197,inf,inf,inf,3,3,inf,yes,Both,yes,18.335173,,081f2f75d252445da1de5098f50b7f37 +remainders,remainder,f128,fltx,fltx,fltx bl::f128,bl::remainder,4099,137.991491,inf,103.120938,1,1,13.120938,yes,Both,yes,23.680799,,081f2f75d252445da1de5098f50b7f37 +remainders,remquo,f128,fltx,fltx,fltx bl::f128,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,23.070204,,081f2f75d252445da1de5098f50b7f37 +roots_and_powers,cbrt,f128,fltx,fltx,fltx bl::f128,bl::cbrt,8195,108.037583359,104.101707,103.019576,2,2,13.019576,yes,Both,yes,22.460679,,081f2f75d252445da1de5098f50b7f37 +roots_and_powers,hypot,f128,fltx,fltx,fltx bl::f128,bl::hypot,8195,122.379344938,105.55647,104.375984,2,2,14.375984,yes,Both,yes,10.391093,,081f2f75d252445da1de5098f50b7f37 +roots_and_powers,ipow,f128,fltx,fltx,fltx bl::f128,bl::ipow,8195,106.491467825,103.779117,103.190083,2,2,13.190083,yes,Both,no,23.844401,,081f2f75d252445da1de5098f50b7f37 +roots_and_powers,pow,f128,fltx,fltx,fltx bl::f128,bl::pow,8198,107.1276135,102.267431,101.314349,2,2,21.314349,yes,Both,yes,191.81907,,081f2f75d252445da1de5098f50b7f37 +roots_and_powers,sqr,f128,fltx,fltx,fltx bl::f128,bl::sqr,8195,108.712755765,105.598081,105.370295,2,2,15.370295,yes,Both,yes,1.100421,,081f2f75d252445da1de5098f50b7f37 +roots_and_powers,sqrt,f128,fltx,fltx,fltx bl::f128,bl::sqrt,16391,109.749936251,105.75112,104.669867,4,4,14.669867,yes,Both,yes,3.820936,,081f2f75d252445da1de5098f50b7f37 +rounding,ceil,f128,fltx,fltx,fltx bl::f128,bl::ceil,4108,inf,inf,inf,1,1,inf,yes,Both,yes,1.987404,,081f2f75d252445da1de5098f50b7f37 +rounding,floor,f128,fltx,fltx,fltx bl::f128,bl::floor,4108,inf,inf,inf,1,1,inf,yes,Both,yes,1.566313,,081f2f75d252445da1de5098f50b7f37 +rounding,llround,f128,fltx,fltx,fltx bl::f128,bl::llround,4114,inf,inf,inf,1,1,inf,yes,-,-,4.079395,,081f2f75d252445da1de5098f50b7f37 +rounding,lround,f128,fltx,fltx,fltx bl::f128,bl::lround,4110,inf,inf,inf,1,1,inf,yes,-,-,4.436278,,081f2f75d252445da1de5098f50b7f37 +rounding,round,f128,fltx,fltx,fltx bl::f128,bl::round,4108,inf,inf,inf,1,1,inf,yes,Both,yes,7.50376,,081f2f75d252445da1de5098f50b7f37 +rounding,round_decimals,f128,fltx,fltx,fltx bl::f128,bl::round_decimals,4099,110.177573,107.236356,107.022726,1,1,17.022726,yes,Both,yes,77.678571,,081f2f75d252445da1de5098f50b7f37 +rounding,round_significant,f128,fltx,fltx,fltx bl::f128,bl::round_significant,4096,121.33026,107.34042,107.049597,1,1,17.049597,yes,Both,yes,109.494629,,081f2f75d252445da1de5098f50b7f37 +rounding,roundeven,f128,fltx,fltx,fltx bl::f128,bl::roundeven,4108,inf,inf,inf,1,1,inf,yes,Both,yes,9.543922,,081f2f75d252445da1de5098f50b7f37 +rounding,trunc,f128,fltx,fltx,fltx bl::f128,bl::trunc,4108,inf,inf,inf,1,1,inf,yes,Both,yes,2.197614,,081f2f75d252445da1de5098f50b7f37 +special_functions,erf,f128,fltx,fltx,fltx bl::f128,bl::erf,8198,110.8988915,104.260004,103.47754,2,2,23.47754,yes,Both,yes,554.694121,,081f2f75d252445da1de5098f50b7f37 +special_functions,erfc,f128,fltx,fltx,fltx bl::f128,bl::erfc,8198,107.1893035,100.123363,99.167646,2,2,19.167646,yes,Both,-,549.549788,,081f2f75d252445da1de5098f50b7f37 +special_functions,lgamma,f128,fltx,fltx,fltx bl::f128,bl::lgamma,4099,107.30017,103.199673,102.168212,1,1,22.168212,yes,Both,-,528.509004,,081f2f75d252445da1de5098f50b7f37 +special_functions,tgamma,f128,fltx,fltx,fltx bl::f128,bl::tgamma,4099,105.565044,98.349598,97.317514,1,1,17.317514,yes,Both,-,464.805238,,081f2f75d252445da1de5098f50b7f37 +trigonometric,acos,f128,fltx,fltx,fltx bl::f128,bl::acos,8204,106.470630111,95.825547,81.584963,2,2,1.584963,yes,Both,-,162.935697,,081f2f75d252445da1de5098f50b7f37 +trigonometric,asin,f128,fltx,fltx,fltx bl::f128,bl::asin,8204,108.580073592,105.096123,104.081582,2,2,24.081582,yes,Both,yes,156.886574,,081f2f75d252445da1de5098f50b7f37 +trigonometric,atan,f128,fltx,fltx,fltx bl::f128,bl::atan,8198,108.728555,105.953468,104.92639,2,2,24.92639,yes,Both,yes,108.881711,,081f2f75d252445da1de5098f50b7f37 +trigonometric,atan2,f128,fltx,fltx,fltx bl::f128,bl::atan2,8206,108.727143624,105.799026,104.520841,3,3,24.520841,yes,Both,yes,116.049533,,081f2f75d252445da1de5098f50b7f37 +trigonometric,cos,f128,fltx,fltx,fltx bl::f128,bl::cos,12524,113.520718505,100.266388,99.209588,3,3,19.209588,yes,Both,-,84.142578,,081f2f75d252445da1de5098f50b7f37 +trigonometric,sin,f128,fltx,fltx,fltx bl::f128,bl::sin,12524,110.553532277,98.777563,98.619216,3,3,18.619216,yes,Both,yes,84.344217,,081f2f75d252445da1de5098f50b7f37 +trigonometric,sincos,f128,fltx,fltx,fltx bl::f128,bl::sincos,,,,,,,,,-,-,94.104004,,081f2f75d252445da1de5098f50b7f37 +trigonometric,tan,f128,fltx,fltx,fltx bl::f128,bl::tan,12524,106.705038797,98.776698,98.614153,3,3,23.614153,yes,Both,yes,96.101518,,081f2f75d252445da1de5098f50b7f37 diff --git a/validation/metrics/data/windows/x86_64/ClangCL_f256.csv b/validation/metrics/data/windows/x86_64/ClangCL_f256.csv new file mode 100644 index 0000000..23206e7 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/ClangCL_f256.csv @@ -0,0 +1,232 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f256,fltx,fltx,fltx bl::f256,bl::add,4096,227.373862582,215.583815,215.297307,2,2,25.297307,yes,Both,no,9.497606,,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,add,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator+,4096,225.042084562,214.179406,214.011982,2,2,24.011982,yes,Both,yes,49.073242,5.166906,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,add,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,4096,253.089090895,237.252454,237.007687,2,2,47.007687,yes,No,no,35.835775,3.773138,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,divide,f256,fltx,fltx,fltx bl::f256,bl::divide,4100,219.220520548,215.287455,214.762066,2,2,24.762066,yes,Both,yes,96.092936,,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,divide,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,4100,215.996290938,214.166285,214.002285,2,2,24.002285,yes,Both,yes,179.785156,1.870951,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,divide,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,4100,239.032664965,237.154132,237.0253,2,2,47.0253,yes,No,no,149.171143,1.552363,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,multiply,f256,fltx,fltx,fltx bl::f256,bl::multiply,4100,220.046096951,215.608028,215.221541,2,2,25.221541,yes,Both,yes,34.876883,,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,multiply,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator*,4100,215.992910439,214.146637,214.012662,2,2,24.012662,yes,Both,yes,64.393717,1.846315,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,multiply,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,4100,239.007243732,237.076391,237.006898,2,2,47.006898,yes,No,no,40.406494,1.158547,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,subtract,f256,fltx,fltx,fltx bl::f256,bl::subtract,4096,227.447841785,215.602949,215.220788,2,2,25.220788,yes,Both,no,18.871489,,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,subtract,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator-,4096,225.206569338,214.220914,214.046715,2,2,24.046715,yes,Both,yes,48.816528,2.586787,1bd8465fefb349c8bd408bdef2fbe2ea +arithmetic,subtract,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,4096,253.263648725,237.248925,237.000122,2,2,47.000122,yes,No,no,35.657959,1.889515,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,equal,f256,fltx,fltx,fltx bl::f256,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.733802,,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.047507,8.241336,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,4.237549,5.774787,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,greater,f256,fltx,fltx,fltx bl::f256,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.808347,,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,greater,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.39388,7.909821,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,greater,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.853136,7.240871,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,greater_equal,f256,fltx,fltx,fltx bl::f256,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.789589,,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,greater_equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.62143,8.385918,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,greater_equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.778216,7.318003,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,less,f256,fltx,fltx,fltx bl::f256,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.856641,,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,less,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.343061,7.404574,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,less,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.873986,6.857,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,less_equal,f256,fltx,fltx,fltx bl::f256,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.796284,,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,less_equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.46875,8.12367,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,less_equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.827825,7.318774,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,not_equal,f256,fltx,fltx,fltx bl::f256,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.643373,,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,not_equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.839572,9.076491,1bd8465fefb349c8bd408bdef2fbe2ea +comparisons,not_equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,4.147689,6.446785,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,exp,f256,fltx,fltx,fltx bl::f256,bl::exp,8198,216.760981,210.609597,209.17081,2,2,29.17081,yes,Both,-,1016.015625,,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,exp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,8198,215.9253875,214.166296,214.006279,2,2,34.006279,yes,Both,-,1267.801339,1.247817,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,exp,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,8198,238.9537585,237.149815,237.00489,2,2,57.00489,yes,No,-,2341.748047,2.304835,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,exp2,f256,fltx,fltx,fltx bl::f256,bl::exp2,8198,218.030361,214.973213,214.202868,2,2,34.202868,yes,Both,-,863.642578,,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,exp2,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,8198,215.974328,214.175518,214.035382,2,2,34.035382,yes,Both,-,1486.165365,1.720811,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,exp2,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,8198,238.9480035,237.174822,237.026426,2,2,57.026426,yes,No,-,5540.185547,6.414906,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,expm1,f256,fltx,fltx,fltx bl::f256,bl::expm1,8197,227.154452503,207.540568,207,2,2,27,yes,Both,yes,1015.766059,,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,expm1,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,8197,227.498351143,214.242848,214.018319,2,2,34.018319,yes,Both,yes,1391.127232,1.369535,1bd8465fefb349c8bd408bdef2fbe2ea +exponentials,expm1,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,8197,250.1283524,237.239921,237.036552,2,2,57.036552,yes,No,no,2485.961914,2.447376,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,abs,f256,fltx,fltx,fltx bl::f256,bl::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,2.093952,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,abs,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,37.767334,18.036386,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,abs,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,8196,inf,inf,inf,2,2,inf,yes,No,yes,0.99307,0.474256,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,copysign,f256,fltx,fltx,fltx bl::f256,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,0.739969,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,copysign,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,40.089518,54.17727,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,copysign,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::copysign,4099,inf,inf,inf,1,1,inf,yes,No,no,0.998089,1.348825,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fabs,f256,fltx,fltx,fltx bl::f256,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,1.972689,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fabs,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,38.204346,19.366632,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fabs,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,4099,inf,inf,inf,1,1,inf,yes,No,yes,0.994173,0.503968,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fdim,f256,fltx,fltx,fltx bl::f256,bl::fdim,8197,inf,inf,inf,2,2,inf,yes,Both,yes,8.442938,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fdim,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,8197,243.650598918,214.093805,214.003121,2,2,24.003121,yes,No,yes,43.075195,5.10192,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fdim,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,8197,inf,inf,inf,2,2,inf,yes,No,yes,56.57959,6.70141,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fma,f256,fltx,fltx,fltx bl::f256,bl::fma,12293,229.715460613,215.654212,215.096656,3,3,25.096656,yes,Both,no,21.158447,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fma,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,12293,228.257765839,214.164686,214.017731,3,3,24.017731,yes,Both,yes,85.113118,4.022654,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fma,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,12293,251.060726483,237.157442,237.018361,3,3,47.018361,yes,No,no,77.08903,3.643416,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fmax,f256,fltx,fltx,fltx bl::f256,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,yes,1.001742,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fmax,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,no,45.46582,45.38675,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fmax,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,8195,inf,inf,inf,2,2,inf,yes,No,no,6.858878,6.84695,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fmin,f256,fltx,fltx,fltx bl::f256,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,yes,1.046501,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fmin,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,no,46.73584,44.659135,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,fmin,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,8195,inf,inf,inf,2,2,inf,yes,No,no,6.418377,6.133177,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,frexp,f256,fltx,fltx,fltx bl::f256,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,13.949606,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,frexp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,69.702759,4.996755,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,frexp,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,8196,inf,inf,inf,2,2,inf,yes,No,no,43.679688,3.131249,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,ilogb,f256,fltx,fltx,fltx bl::f256,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.080697,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,ilogb,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,32.128906,29.729811,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,ilogb,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,0.66535,0.615668,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,ldexp,f256,fltx,fltx,fltx bl::f256,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,3.197277,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,ldexp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,39.850667,12.463938,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,ldexp,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::ldexp,4096,inf,inf,inf,1,1,inf,yes,No,no,31.535993,9.86339,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,logb,f256,fltx,fltx,fltx bl::f256,bl::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,0.973943,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,logb,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,72.115072,74.044423,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,modf,f256,fltx,fltx,fltx bl::f256,bl::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,20.226385,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,modf,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,169.399414,8.37517,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,modf,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,8195,inf,inf,inf,2,2,inf,yes,No,no,42.958008,2.12386,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,nextafter,f256,fltx,fltx,fltx bl::f256,bl::nextafter,,,,,,,,,-,-,5.723766,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,nextafter,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter,,,,,,,,,-,-,457.414551,79.914964,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,nextafter,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter,,,,,,,,,-,-,17.897525,3.126879,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,nexttoward,f256,fltx,fltx,fltx bl::f256,bl::nexttoward,,,,,,,,,-,-,5.740843,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,nexttoward,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter (same type),,,,,,,,,-,-,452.209473,78.77057,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,nexttoward,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter (same type),,,,,,,,,-,-,17.867803,3.112401,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,recip,f256,fltx,fltx,fltx bl::f256,bl::recip,8195,217.92444534,215.148048,214.625136,2,2,24.625136,yes,Both,yes,86.288086,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,scalbln,f256,fltx,fltx,fltx bl::f256,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,3.18991,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,scalbln,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,38.636068,12.11196,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,scalbn,f256,fltx,fltx,fltx bl::f256,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,3.199967,,1bd8465fefb349c8bd408bdef2fbe2ea +floating_point_utilities,scalbn,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,39.518229,12.349575,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,cosh,f256,fltx,fltx,fltx bl::f256,bl::cosh,8198,217.5106305,214.737937,214.159072,2,2,34.159072,yes,Both,-,1291.936384,,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,cosh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,8198,215.916289,214.168922,214.000831,2,2,34.000831,yes,Both,-,1466.308594,1.13497,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,cosh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,8198,238.9208895,237.131226,237.021921,2,2,57.021921,yes,No,-,2539.086914,1.965334,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,sinh,f256,fltx,fltx,fltx bl::f256,bl::sinh,8198,217.022625,214.597984,213.844482,2,2,33.844482,yes,Both,yes,1293.568638,,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,sinh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,8198,215.9712865,214.162104,214.011597,2,2,34.011597,yes,Both,yes,1489.92513,1.151794,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,sinh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,8198,238.9375005,237.151916,237.012513,2,2,57.012513,yes,No,no,2742.30957,2.119957,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,tanh,f256,fltx,fltx,fltx bl::f256,bl::tanh,8198,219.128554,215.222392,214.042672,2,2,34.042672,yes,Both,yes,1271.833147,,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,tanh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,8198,216.1972415,214.274158,214.03864,2,2,34.03864,yes,Both,yes,1518.636068,1.194053,1bd8465fefb349c8bd408bdef2fbe2ea +hyperbolic,tanh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,8198,239.191819,237.196358,237.059834,2,2,57.059834,yes,Inf,no,2679.980469,2.107179,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,acosh,f256,fltx,fltx,fltx bl::f256,bl::acosh,8200,217.720725959,214.442677,213.709421,2,2,33.709421,yes,Both,-,2491.577148,,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,acosh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,8200,215.92850099,214.197277,214.011139,2,2,34.011139,yes,Both,-,3746.191406,1.503542,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,acosh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,8200,238.873033639,237.183996,237.009868,2,2,57.009868,yes,No,-,10240.429688,4.110019,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,asinh,f256,fltx,fltx,fltx bl::f256,bl::asinh,8198,217.1921705,213.881562,212.956798,2,2,32.956798,yes,Both,yes,2693.237305,,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,asinh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,8198,215.877188,214.126921,214.013004,2,2,34.013004,yes,Both,yes,6233.59375,2.314536,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,asinh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,8198,238.8906575,237.158686,237.026506,2,2,57.026506,yes,No,no,10872.753906,4.037058,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,atanh,f256,fltx,fltx,fltx bl::f256,bl::atanh,8204,218.285376518,214.164921,213.300563,2,2,33.300563,yes,Both,yes,2341.650391,,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,atanh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,8204,216.191466866,214.156626,214.025325,2,2,34.025325,yes,Both,yes,2952.246094,1.260754,1bd8465fefb349c8bd408bdef2fbe2ea +inverse_hyperbolic,atanh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,8204,239.146882959,237.181152,237.021503,2,2,57.021503,yes,No,no,3750.813802,1.601782,1bd8465fefb349c8bd408bdef2fbe2ea +io,parse,f256,fltx,fltx,fltx bl::f256,bl::parse,8195,219.729492211,212.275332,212.017147,2,2,0.017147,yes,Both,yes,347.723022,,1bd8465fefb349c8bd408bdef2fbe2ea +io,parse,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,8195,215.952962068,214.158596,214.005374,2,2,2.005374,yes,Both,yes,355.111003,1.021247,1bd8465fefb349c8bd408bdef2fbe2ea +io,parse,f256,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,8195,238.941820354,237.169709,237.016125,2,2,25.016125,yes,No,no,6776.018541,19.486827,1bd8465fefb349c8bd408bdef2fbe2ea +io,to_chars,f256,fltx,fltx,fltx bl::f256,bl::to_chars,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,253.747526,,1bd8465fefb349c8bd408bdef2fbe2ea +io,to_string,f256,fltx,fltx,fltx bl::f256,bl::to_string,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,290.592218,,1bd8465fefb349c8bd408bdef2fbe2ea +io,to_string,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,8195,220.316769484,217.209596,216.955609,2,2,26.955609,yes,Both,yes,462.454257,1.59142,1bd8465fefb349c8bd408bdef2fbe2ea +io,to_string,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,8195,216.91531064,213.966069,213.625754,2,2,23.625754,yes,Both,yes,8590.143938,29.560819,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log,f256,fltx,fltx,fltx bl::f256,bl::log,12291,217.776072084,214.333783,213.252927,3,3,33.252927,yes,Both,-,1790.351562,,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,12291,215.87148618,214.161037,214.022652,3,3,34.022652,yes,Both,-,2383.081055,1.331069,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log,12291,238.863547738,237.168312,237.020732,3,3,57.020732,yes,No,-,3073.925781,1.71694,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log10,f256,fltx,fltx,fltx bl::f256,bl::log10,12291,217.44848007,214.245682,213.257193,3,3,33.257193,yes,Both,-,1847.011719,,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log10,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,12291,215.897541443,214.144149,214.004904,3,3,34.004904,yes,Both,-,4601.708984,2.491435,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log10,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,12291,238.843380382,237.128968,237.019945,3,3,57.019945,yes,No,-,3088.997396,1.67243,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log1p,f256,fltx,fltx,fltx bl::f256,bl::log1p,8197,226.82219119,207.415037,207,2,2,27,yes,Both,yes,1818.964844,,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log1p,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,8197,227.392838761,214.139415,214.010728,2,2,34.010728,yes,Both,yes,2469.506836,1.357644,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log1p,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,8197,250.055921912,237.123379,237.006206,2,2,57.006206,yes,No,no,3551.39974,1.952429,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log2,f256,fltx,fltx,fltx bl::f256,bl::log2,12291,218.61302666,214.28538,213.192358,3,3,33.192358,yes,Both,-,1827.207031,,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log2,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,12291,217.32440772,214.194225,214.010454,3,3,34.010454,yes,Both,-,2601.196289,1.423591,1bd8465fefb349c8bd408bdef2fbe2ea +logarithms,log2,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,12291,240.319993979,237.187476,237.019864,3,3,57.019864,yes,No,-,3089.322917,1.690735,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,affine_trig,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,1851.710304,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,affine_trig,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,2326.71875,1.256524,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,affine_trig,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,5363.6875,2.896613,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,chained_arithmetic,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,151.691846,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,chained_arithmetic,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,302.93956,1.997072,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,chained_arithmetic,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,283.242754,1.867225,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,haversine,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,4891.647982,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,haversine,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,10187.5,2.082631,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,haversine,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,15700,3.209552,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,horner_polynomial,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,442.219939,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,horner_polynomial,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,744.173729,1.682814,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,horner_polynomial,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,1050.863821,2.376337,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,log_sum_exp,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,8950,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,log_sum_exp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,11262.5,1.25838,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,log_sum_exp,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,21212.5,2.370112,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,mandelbrot,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,128.355991,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,mandelbrot,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,242.173889,1.886736,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,mandelbrot,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,274.7125,2.140239,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,matrix_vector_4x4,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,594.191576,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,matrix_vector_4x4,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,950.812922,1.600179,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,matrix_vector_4x4,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,1078.248031,1.814647,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,newton_root,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,246.195284,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,newton_root,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,323.217937,1.312852,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,newton_root,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,406.724713,1.652041,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,product_sum,f256,fltx,fltx,fltx bl::f256,bl::product_sum,,,,,,,,,-,-,58.569336,,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,product_sum,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same expression,,,,,,,,,-,-,138.186646,2.359368,1bd8465fefb349c8bd408bdef2fbe2ea +mixed_workloads,product_sum,f256,tlfloat,tloct,TLFloat Octuple,same expression,,,,,,,,,-,-,115.120014,1.965534,1bd8465fefb349c8bd408bdef2fbe2ea +random,mt19937_64,f256,fltx,fltx,fltx bl::f256,bl::mt19937_64,,,,,,,,,-,-,1.373261,,1bd8465fefb349c8bd408bdef2fbe2ea +random,normal,f256,fltx,fltx,fltx bl::f256,bl::normal,,,,,,,,,-,-,292.533967,,1bd8465fefb349c8bd408bdef2fbe2ea +random,uniform_real,f256,fltx,fltx,fltx bl::f256,bl::uniform_real,,,,,,,,,-,-,14.855558,,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,fmod,f256,fltx,fltx,fltx bl::f256,bl::fmod,8199,243.996795284,217.724535,217.724535,3,3,27.724535,yes,Both,yes,69.10676,,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,fmod,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,8199,inf,inf,inf,3,3,inf,yes,Both,yes,192.213077,2.781393,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,fmod,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,8199,inf,inf,inf,3,3,inf,yes,No,no,336.783854,4.873385,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,remainder,f256,fltx,fltx,fltx bl::f256,bl::remainder,4099,inf,inf,inf,1,1,inf,yes,Both,yes,100.491688,,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,remainder,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remainder,4099,inf,inf,inf,1,1,inf,yes,Both,yes,234.100021,2.329546,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,remainder,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::remainder,4099,inf,inf,inf,1,1,inf,yes,No,no,364.973958,3.631882,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,remquo,f256,fltx,fltx,fltx bl::f256,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,100.221605,,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,remquo,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,266.070198,2.654819,1bd8465fefb349c8bd408bdef2fbe2ea +remainders,remquo,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::remquo,4099,inf,inf,inf,1,1,inf,yes,No,no,367.696126,3.668831,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,cbrt,f256,fltx,fltx,fltx bl::f256,bl::cbrt,8195,219.286640743,215.522484,215.009723,2,2,25.009723,yes,Both,yes,341.947428,,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,cbrt,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,8195,216.025881329,214.197213,214.058038,2,2,24.058038,yes,Both,yes,423.344727,1.23804,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,cbrt,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,8195,239.048520642,237.214089,237.01811,2,2,47.01811,yes,No,no,1698.258464,4.966431,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,hypot,f256,fltx,fltx,fltx bl::f256,bl::hypot,8195,229.93090326,215.484839,213.870154,2,2,23.870154,yes,Both,yes,165.495418,,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,hypot,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,8195,228.685697033,213.212997,212.858237,2,2,22.858237,yes,Both,no,451.616211,2.728874,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,hypot,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,8195,251.869264053,237.145904,237.032531,2,2,47.032531,yes,No,yes,295.632935,1.786351,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,ipow,f256,fltx,fltx,fltx bl::f256,bl::ipow,8195,217.175762701,214.383216,213.656994,2,2,23.656994,yes,Both,no,127.689855,,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,ipow,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",8195,215.968901433,214.179832,214.011863,2,2,24.011863,yes,Both,yes,172.241211,1.348903,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,pow,f256,fltx,fltx,fltx bl::f256,bl::pow,8198,216.837164,212.047897,211.143117,2,2,31.143117,yes,Both,yes,2682.275391,,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,pow,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,8198,215.92977,214.172189,214.02831,2,2,34.02831,yes,Both,yes,3051.171875,1.137531,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,pow,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,8198,238.924537,237.150631,237.009078,2,2,57.009078,yes,No,no,10860.742188,4.049078,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,sqr,f256,fltx,fltx,fltx bl::f256,bl::sqr,8195,220.120699598,216.278909,215.25119,2,2,25.25119,yes,Both,yes,23.220703,,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,sqrt,f256,fltx,fltx,fltx bl::f256,bl::sqrt,16391,217.892674432,211.30757,209.568118,4,4,19.568118,yes,Both,yes,109.785156,,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,sqrt,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,16391,216.210876714,214.147252,214.030797,4,4,24.030797,yes,Both,yes,134.02832,1.220824,1bd8465fefb349c8bd408bdef2fbe2ea +roots_and_powers,sqrt,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,16391,239.156039966,237.129126,237.014769,4,4,47.014769,yes,No,no,197.775879,1.801481,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,ceil,f256,fltx,fltx,fltx bl::f256,bl::ceil,4110,inf,inf,inf,1,1,inf,yes,Both,yes,1.503392,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,ceil,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ceil,4110,inf,inf,inf,1,1,inf,yes,Both,yes,42.572754,28.317795,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,ceil,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::ceil,4110,inf,inf,inf,1,1,inf,yes,No,no,5.665973,3.768792,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,floor,f256,fltx,fltx,fltx bl::f256,bl::floor,4110,inf,inf,inf,1,1,inf,yes,Both,yes,1.50249,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,floor,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::floor,4110,inf,inf,inf,1,1,inf,yes,Both,yes,42.655762,28.390039,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,floor,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::floor,4110,inf,inf,inf,1,1,inf,yes,No,no,6.133156,4.081993,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,llround,f256,fltx,fltx,fltx bl::f256,bl::llround,4116,inf,inf,inf,1,1,inf,yes,-,-,6.321766,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,llround,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::llround,4116,inf,inf,inf,1,1,inf,yes,-,-,210.540217,33.304018,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,lround,f256,fltx,fltx,fltx bl::f256,bl::lround,4112,inf,inf,inf,1,1,inf,yes,-,-,6.653992,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,lround,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lround,4112,inf,inf,inf,1,1,inf,yes,-,-,121.458605,18.253495,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,round,f256,fltx,fltx,fltx bl::f256,bl::round,4110,inf,inf,inf,1,1,inf,yes,Both,yes,8.862986,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,round,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::round,4110,inf,inf,inf,1,1,inf,yes,Both,yes,82.8125,9.343634,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,round,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::round,4110,inf,inf,inf,1,1,inf,yes,No,no,6.855347,0.77348,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,round_decimals,f256,fltx,fltx,fltx bl::f256,bl::round_decimals,4099,220.044956,215.606687,215.330917,1,1,25.330917,yes,Both,yes,117.815484,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,round_significant,f256,fltx,fltx,fltx bl::f256,bl::round_significant,4096,229.647449,215.594292,215.06782,1,1,25.06782,yes,Both,yes,161.127178,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,roundeven,f256,fltx,fltx,fltx bl::f256,bl::roundeven,4110,inf,inf,inf,1,1,inf,yes,Both,yes,8.308207,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,roundeven,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::rint,4110,inf,inf,inf,1,1,inf,yes,No,no,12.635803,1.520882,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,trunc,f256,fltx,fltx,fltx bl::f256,bl::trunc,4110,inf,inf,inf,1,1,inf,yes,Both,yes,4.191612,,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,trunc,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::trunc,4110,inf,inf,inf,1,1,inf,yes,Both,yes,42.025553,10.026108,1bd8465fefb349c8bd408bdef2fbe2ea +rounding,trunc,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::trunc,4110,inf,inf,inf,1,1,inf,yes,No,no,3.116304,0.743462,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,erf,f256,fltx,fltx,fltx bl::f256,bl::erf,8198,212.782396,196.847186,196.755396,2,2,16.755396,yes,Both,yes,10458.59375,,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,erf,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,8198,216.2639365,214.293135,214.06938,2,2,34.06938,yes,Both,yes,16671.09375,1.594009,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,erf,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,8198,239.239293,237.303421,237.090794,2,2,57.090794,yes,Inf,no,126758.59375,12.120042,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,erfc,f256,fltx,fltx,fltx bl::f256,bl::erfc,8198,208.160201,191.066815,189.779688,2,2,9.779688,yes,Both,-,10510.9375,,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,erfc,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,8198,216.0696585,214.211875,214.017843,2,2,34.017843,yes,Both,-,27447.65625,2.611342,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,erfc,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,8198,239.0529915,237.201029,237.018916,2,2,57.018916,yes,Inf,-,127011.71875,12.083767,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,lgamma,f256,fltx,fltx,fltx bl::f256,bl::lgamma,4099,211.903615,199.617279,199.225949,1,1,19.225949,yes,Both,-,9634.375,,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,lgamma,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lgamma,4099,215.890428,214.160879,214.017847,1,1,34.017847,yes,Both,-,12676.5625,1.315764,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,lgamma,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::lgamma,4099,238.928241,237.162122,237.008749,1,1,57.008749,yes,No,-,45237.5,4.695427,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,tgamma,f256,fltx,fltx,fltx bl::f256,bl::tgamma,4099,209.040528,202.582542,202.45702,1,1,22.45702,yes,Both,-,10653.90625,,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,tgamma,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tgamma,4099,215.948239,214.171703,214.004992,1,1,34.004992,yes,Both,-,14798.4375,1.389015,1bd8465fefb349c8bd408bdef2fbe2ea +special_functions,tgamma,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::tgamma,4099,238.919522,237.194896,237.040555,1,1,57.040555,yes,No,-,50621.875,4.751485,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,acos,f256,fltx,fltx,fltx bl::f256,bl::acos,8204,216.029308016,205.510139,192.466318,2,2,12.466318,yes,Both,-,1424.21875,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,acos,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,8204,215.919006178,214.16827,214.01241,2,2,34.01241,yes,Both,-,6264.501953,4.398553,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,acos,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,8204,238.937618214,237.176311,237.031977,2,2,57.031977,yes,No,-,5074.121094,3.56274,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,asin,f256,fltx,fltx,fltx bl::f256,bl::asin,8204,217.91775033,214.870821,214.404436,2,2,34.404436,yes,Both,yes,1404.508464,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,asin,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,8204,216.0174187,214.166642,214.033964,2,2,34.033964,yes,Both,yes,6062.695312,4.316596,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,asin,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,8204,239.01952962,237.164907,237.026679,2,2,57.026679,yes,No,no,5038.427734,3.587325,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,atan,f256,fltx,fltx,fltx bl::f256,bl::atan,8198,218.142465,215.364973,214.678988,2,2,34.678988,yes,Both,yes,921.321615,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,atan,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,8198,215.9607655,214.196468,214.022743,2,2,34.022743,yes,Both,yes,2006.210938,2.177536,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,atan,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,8198,238.9817475,237.221991,237.005716,2,2,57.005716,yes,Inf,no,4610.15625,5.003851,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,atan2,f256,fltx,fltx,fltx bl::f256,bl::atan2,8206,217.911773079,215.258136,214.277602,3,3,34.277602,yes,Both,yes,983.062066,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,atan2,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,8206,215.939645852,214.132014,214.011485,3,3,34.011485,yes,Both,yes,2055.46875,2.090884,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,atan2,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,8206,238.987771942,237.174621,237.005636,3,3,57.005636,yes,Inf,no,4577.148438,4.656012,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,cos,f256,fltx,fltx,fltx bl::f256,bl::cos,12518,226.780465244,215.246584,208.674366,3,3,28.674366,yes,Both,-,919.912109,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,cos,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,12518,219.362111864,214.240603,214.013567,3,3,34.013567,yes,Both,-,1307.33817,1.421156,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,cos,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,12518,241.656141716,237.245286,237.010092,3,3,57.010092,yes,No,-,2608.496094,2.835593,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,sin,f256,fltx,fltx,fltx bl::f256,bl::sin,12518,222.290222968,208.567012,202.92477,3,3,22.92477,yes,Both,yes,912.858073,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,sin,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,12518,218.487703853,214.163948,214.02345,3,3,34.02345,yes,Both,yes,1694.140625,1.855864,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,sin,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,12518,241.18040008,237.214941,237.023215,3,3,57.023215,yes,No,no,2624.365234,2.874889,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,sincos,f256,fltx,fltx,fltx bl::f256,bl::sincos,,,,,,,,,-,-,1018.663194,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,sincos,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sincos,,,,,,,,,-,-,5237.744141,5.141782,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,tan,f256,fltx,fltx,fltx bl::f256,bl::tan,12518,217.050653666,208.567009,202.92477,3,3,32.92477,yes,Both,yes,1106.860352,,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,tan,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,12518,215.979315837,214.143677,214.006668,3,3,44.006668,yes,Both,yes,1905.097656,1.721173,1bd8465fefb349c8bd408bdef2fbe2ea +trigonometric,tan,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,12518,238.954881373,237.180286,237.008972,3,3,67.008972,yes,No,no,3179.752604,2.872768,1bd8465fefb349c8bd408bdef2fbe2ea diff --git a/validation/metrics/data/windows/x86_64/ClangCL_f256_fastmath.csv b/validation/metrics/data/windows/x86_64/ClangCL_f256_fastmath.csv new file mode 100644 index 0000000..2bbcffc --- /dev/null +++ b/validation/metrics/data/windows/x86_64/ClangCL_f256_fastmath.csv @@ -0,0 +1,86 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f256,fltx,fltx,fltx bl::f256,bl::add,4096,227.373862582,215.583815,215.297307,2,2,25.297307,yes,Both,no,9.454694,,081f2f75d252445da1de5098f50b7f37 +arithmetic,divide,f256,fltx,fltx,fltx bl::f256,bl::divide,4100,219.220520548,215.287455,214.762066,2,2,24.762066,yes,Both,yes,96.948242,,081f2f75d252445da1de5098f50b7f37 +arithmetic,multiply,f256,fltx,fltx,fltx bl::f256,bl::multiply,4100,220.046096951,215.608028,215.221541,2,2,25.221541,yes,Both,yes,34.991281,,081f2f75d252445da1de5098f50b7f37 +arithmetic,subtract,f256,fltx,fltx,fltx bl::f256,bl::subtract,4096,227.447841785,215.602949,215.220788,2,2,25.220788,yes,Both,no,18.681308,,081f2f75d252445da1de5098f50b7f37 +comparisons,equal,f256,fltx,fltx,fltx bl::f256,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.734277,,081f2f75d252445da1de5098f50b7f37 +comparisons,greater,f256,fltx,fltx,fltx bl::f256,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.785446,,081f2f75d252445da1de5098f50b7f37 +comparisons,greater_equal,f256,fltx,fltx,fltx bl::f256,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.690875,,081f2f75d252445da1de5098f50b7f37 +comparisons,less,f256,fltx,fltx,fltx bl::f256,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.84071,,081f2f75d252445da1de5098f50b7f37 +comparisons,less_equal,f256,fltx,fltx,fltx bl::f256,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.692103,,081f2f75d252445da1de5098f50b7f37 +comparisons,not_equal,f256,fltx,fltx,fltx bl::f256,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.644019,,081f2f75d252445da1de5098f50b7f37 +exponentials,exp,f256,fltx,fltx,fltx bl::f256,bl::exp,8198,216.760981,210.609597,209.17081,2,2,29.17081,yes,Both,-,1011.979167,,081f2f75d252445da1de5098f50b7f37 +exponentials,exp2,f256,fltx,fltx,fltx bl::f256,bl::exp2,8198,218.030361,214.973213,214.202868,2,2,34.202868,yes,Both,-,858.320312,,081f2f75d252445da1de5098f50b7f37 +exponentials,expm1,f256,fltx,fltx,fltx bl::f256,bl::expm1,8197,227.154452503,207.540568,207,2,2,27,yes,Both,yes,1011.371528,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,abs,f256,fltx,fltx,fltx bl::f256,bl::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,1.524058,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,copysign,f256,fltx,fltx,fltx bl::f256,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,0.649669,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,fabs,f256,fltx,fltx,fltx bl::f256,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,1.708089,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,fdim,f256,fltx,fltx,fltx bl::f256,bl::fdim,8197,inf,inf,inf,2,2,inf,yes,No,yes,8.144748,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,fma,f256,fltx,fltx,fltx bl::f256,bl::fma,12293,229.715460613,215.654212,215.096656,3,3,25.096656,yes,Both,no,20.321156,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,fmax,f256,fltx,fltx,fltx bl::f256,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,Inf,yes,0.962298,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,fmin,f256,fltx,fltx,fltx bl::f256,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,Inf,yes,0.959492,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,frexp,f256,fltx,fltx,fltx bl::f256,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,6.404739,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,ilogb,f256,fltx,fltx,fltx bl::f256,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.083036,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,ldexp,f256,fltx,fltx,fltx bl::f256,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,3.228769,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,logb,f256,fltx,fltx,fltx bl::f256,bl::logb,8195,inf,inf,inf,2,2,inf,yes,NaN,-,0.969486,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,modf,f256,fltx,fltx,fltx bl::f256,bl::modf,8195,inf,inf,inf,2,2,inf,yes,NaN,yes,20.556419,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,nextafter,f256,fltx,fltx,fltx bl::f256,bl::nextafter,,,,,,,,,-,-,5.661203,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,nexttoward,f256,fltx,fltx,fltx bl::f256,bl::nexttoward,,,,,,,,,-,-,5.651279,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,recip,f256,fltx,fltx,fltx bl::f256,bl::recip,8195,217.92444534,215.148048,214.625136,2,2,24.625136,yes,Both,yes,81.338266,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,scalbln,f256,fltx,fltx,fltx bl::f256,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,3.252441,,081f2f75d252445da1de5098f50b7f37 +floating_point_utilities,scalbn,f256,fltx,fltx,fltx bl::f256,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,3.236709,,081f2f75d252445da1de5098f50b7f37 +hyperbolic,cosh,f256,fltx,fltx,fltx bl::f256,bl::cosh,8198,217.5106305,214.737937,214.159072,2,2,34.159072,yes,Both,-,1314.0625,,081f2f75d252445da1de5098f50b7f37 +hyperbolic,sinh,f256,fltx,fltx,fltx bl::f256,bl::sinh,8198,217.022625,214.597984,213.844482,2,2,33.844482,yes,Both,yes,1315.359933,,081f2f75d252445da1de5098f50b7f37 +hyperbolic,tanh,f256,fltx,fltx,fltx bl::f256,bl::tanh,8198,219.128554,215.222392,214.042672,2,2,34.042672,yes,Both,yes,1260.839844,,081f2f75d252445da1de5098f50b7f37 +inverse_hyperbolic,acosh,f256,fltx,fltx,fltx bl::f256,bl::acosh,8200,217.720725959,214.442677,213.709421,2,2,33.709421,yes,Both,-,2489.941406,,081f2f75d252445da1de5098f50b7f37 +inverse_hyperbolic,asinh,f256,fltx,fltx,fltx bl::f256,bl::asinh,8198,217.1921705,213.881562,212.956798,2,2,32.956798,yes,Both,yes,2675.537109,,081f2f75d252445da1de5098f50b7f37 +inverse_hyperbolic,atanh,f256,fltx,fltx,fltx bl::f256,bl::atanh,8204,218.285376518,214.164921,213.300563,2,2,33.300563,yes,Both,yes,2330.34668,,081f2f75d252445da1de5098f50b7f37 +io,parse,f256,fltx,fltx,fltx bl::f256,bl::parse,8195,219.729492211,212.275332,212.017147,2,2,0.017147,yes,Both,yes,354.891437,,081f2f75d252445da1de5098f50b7f37 +io,to_chars,f256,fltx,fltx,fltx bl::f256,bl::to_chars,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,256.474479,,081f2f75d252445da1de5098f50b7f37 +io,to_string,f256,fltx,fltx,fltx bl::f256,bl::to_string,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,300.292754,,081f2f75d252445da1de5098f50b7f37 +logarithms,log,f256,fltx,fltx,fltx bl::f256,bl::log,12291,217.776072084,214.333783,213.252927,3,3,33.252927,yes,Both,-,1769.257812,,081f2f75d252445da1de5098f50b7f37 +logarithms,log10,f256,fltx,fltx,fltx bl::f256,bl::log10,12291,217.44848007,214.245682,213.257193,3,3,33.257193,yes,Both,-,1807.011719,,081f2f75d252445da1de5098f50b7f37 +logarithms,log1p,f256,fltx,fltx,fltx bl::f256,bl::log1p,8197,226.82219119,207.415037,207,2,2,27,yes,Both,yes,1812.714844,,081f2f75d252445da1de5098f50b7f37 +logarithms,log2,f256,fltx,fltx,fltx bl::f256,bl::log2,12291,218.61302666,214.28538,213.192358,3,3,33.192358,yes,Both,-,1798.925781,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,affine_trig,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,1840.349265,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,chained_arithmetic,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,151.306099,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,haversine,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,4850.884956,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,horner_polynomial,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,434.448935,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,log_sum_exp,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,8837.5,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,mandelbrot,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,125.520833,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,matrix_vector_4x4,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,594.861261,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,newton_root,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,244.132369,,081f2f75d252445da1de5098f50b7f37 +mixed_workloads,product_sum,f256,fltx,fltx,fltx bl::f256,bl::product_sum,,,,,,,,,-,-,58.042399,,081f2f75d252445da1de5098f50b7f37 +random,mt19937_64,f256,fltx,fltx,fltx bl::f256,bl::mt19937_64,,,,,,,,,-,-,1.368892,,081f2f75d252445da1de5098f50b7f37 +random,normal,f256,fltx,fltx,fltx bl::f256,bl::normal,,,,,,,,,-,-,290.425027,,081f2f75d252445da1de5098f50b7f37 +random,uniform_real,f256,fltx,fltx,fltx bl::f256,bl::uniform_real,,,,,,,,,-,-,14.343955,,081f2f75d252445da1de5098f50b7f37 +remainders,fmod,f256,fltx,fltx,fltx bl::f256,bl::fmod,8199,243.996795284,217.724535,217.724535,3,3,27.724535,yes,Both,yes,68.531474,,081f2f75d252445da1de5098f50b7f37 +remainders,remainder,f256,fltx,fltx,fltx bl::f256,bl::remainder,4099,inf,inf,inf,1,1,inf,yes,Both,yes,100.164653,,081f2f75d252445da1de5098f50b7f37 +remainders,remquo,f256,fltx,fltx,fltx bl::f256,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,99.508146,,081f2f75d252445da1de5098f50b7f37 +roots_and_powers,cbrt,f256,fltx,fltx,fltx bl::f256,bl::cbrt,8195,219.286640743,215.522484,215.009723,2,2,25.009723,yes,Both,yes,341.630046,,081f2f75d252445da1de5098f50b7f37 +roots_and_powers,hypot,f256,fltx,fltx,fltx bl::f256,bl::hypot,8195,229.93090326,215.484839,213.870154,2,2,23.870154,yes,Both,yes,165.072867,,081f2f75d252445da1de5098f50b7f37 +roots_and_powers,ipow,f256,fltx,fltx,fltx bl::f256,bl::ipow,8195,217.175762701,214.383216,213.656994,2,2,23.656994,yes,Both,no,127.079504,,081f2f75d252445da1de5098f50b7f37 +roots_and_powers,pow,f256,fltx,fltx,fltx bl::f256,bl::pow,8198,216.837164,212.047897,211.143117,2,2,31.143117,yes,Both,yes,2624.560547,,081f2f75d252445da1de5098f50b7f37 +roots_and_powers,sqr,f256,fltx,fltx,fltx bl::f256,bl::sqr,8195,220.120699598,216.278909,215.25119,2,2,25.25119,yes,Both,yes,23.214355,,081f2f75d252445da1de5098f50b7f37 +roots_and_powers,sqrt,f256,fltx,fltx,fltx bl::f256,bl::sqrt,16391,217.892674432,211.30757,209.568118,4,4,19.568118,yes,Both,yes,109.141846,,081f2f75d252445da1de5098f50b7f37 +rounding,ceil,f256,fltx,fltx,fltx bl::f256,bl::ceil,4110,inf,inf,inf,1,1,inf,yes,Both,yes,1.599898,,081f2f75d252445da1de5098f50b7f37 +rounding,floor,f256,fltx,fltx,fltx bl::f256,bl::floor,4110,inf,inf,inf,1,1,inf,yes,Both,yes,1.487427,,081f2f75d252445da1de5098f50b7f37 +rounding,llround,f256,fltx,fltx,fltx bl::f256,bl::llround,4116,inf,inf,inf,1,1,inf,yes,-,-,6.568478,,081f2f75d252445da1de5098f50b7f37 +rounding,lround,f256,fltx,fltx,fltx bl::f256,bl::lround,4112,inf,inf,inf,1,1,inf,yes,-,-,6.562383,,081f2f75d252445da1de5098f50b7f37 +rounding,round,f256,fltx,fltx,fltx bl::f256,bl::round,4110,inf,inf,inf,1,1,inf,yes,Both,yes,8.790894,,081f2f75d252445da1de5098f50b7f37 +rounding,round_decimals,f256,fltx,fltx,fltx bl::f256,bl::round_decimals,4099,220.044956,215.606687,215.330917,1,1,25.330917,yes,Both,yes,117.58355,,081f2f75d252445da1de5098f50b7f37 +rounding,round_significant,f256,fltx,fltx,fltx bl::f256,bl::round_significant,4096,229.647449,215.594292,215.06782,1,1,25.06782,yes,Both,yes,160.874721,,081f2f75d252445da1de5098f50b7f37 +rounding,roundeven,f256,fltx,fltx,fltx bl::f256,bl::roundeven,4110,inf,inf,inf,1,1,inf,yes,Both,yes,8.362935,,081f2f75d252445da1de5098f50b7f37 +rounding,trunc,f256,fltx,fltx,fltx bl::f256,bl::trunc,4110,inf,inf,inf,1,1,inf,yes,Both,yes,4.281944,,081f2f75d252445da1de5098f50b7f37 +special_functions,erf,f256,fltx,fltx,fltx bl::f256,bl::erf,8198,212.782396,196.847186,196.755396,2,2,16.755396,yes,Both,yes,10403.125,,081f2f75d252445da1de5098f50b7f37 +special_functions,erfc,f256,fltx,fltx,fltx bl::f256,bl::erfc,8198,208.160201,191.066815,189.779688,2,2,9.779688,yes,Both,-,10389.0625,,081f2f75d252445da1de5098f50b7f37 +special_functions,lgamma,f256,fltx,fltx,fltx bl::f256,bl::lgamma,4099,211.903615,199.617279,199.225949,1,1,19.225949,yes,Both,-,9572.65625,,081f2f75d252445da1de5098f50b7f37 +special_functions,tgamma,f256,fltx,fltx,fltx bl::f256,bl::tgamma,4099,209.040528,202.582542,202.45702,1,1,22.45702,yes,Both,-,10572.65625,,081f2f75d252445da1de5098f50b7f37 +trigonometric,acos,f256,fltx,fltx,fltx bl::f256,bl::acos,8204,216.029308016,205.510139,192.466318,2,2,12.466318,yes,Both,-,1401.967076,,081f2f75d252445da1de5098f50b7f37 +trigonometric,asin,f256,fltx,fltx,fltx bl::f256,bl::asin,8204,217.91775033,214.870821,214.404436,2,2,34.404436,yes,Both,yes,1381.487165,,081f2f75d252445da1de5098f50b7f37 +trigonometric,atan,f256,fltx,fltx,fltx bl::f256,bl::atan,8198,218.142465,215.364973,214.678988,2,2,34.678988,yes,Both,yes,915.505642,,081f2f75d252445da1de5098f50b7f37 +trigonometric,atan2,f256,fltx,fltx,fltx bl::f256,bl::atan2,8206,217.911773079,215.258136,214.277602,3,3,34.277602,yes,Both,yes,977.918837,,081f2f75d252445da1de5098f50b7f37 +trigonometric,cos,f256,fltx,fltx,fltx bl::f256,bl::cos,12518,226.780465244,215.246584,208.674366,3,3,28.674366,yes,Both,-,909.775391,,081f2f75d252445da1de5098f50b7f37 +trigonometric,sin,f256,fltx,fltx,fltx bl::f256,bl::sin,12518,222.290222968,208.567012,202.92477,3,3,22.92477,yes,Both,yes,910.253906,,081f2f75d252445da1de5098f50b7f37 +trigonometric,sincos,f256,fltx,fltx,fltx bl::f256,bl::sincos,,,,,,,,,-,-,1017.437066,,081f2f75d252445da1de5098f50b7f37 +trigonometric,tan,f256,fltx,fltx,fltx bl::f256,bl::tan,12518,217.050653666,208.567009,202.92477,3,3,32.92477,yes,Both,yes,1104.150391,,081f2f75d252445da1de5098f50b7f37 diff --git a/validation/metrics/data/windows/x86_64/MSVC_f128.csv b/validation/metrics/data/windows/x86_64/MSVC_f128.csv new file mode 100644 index 0000000..f5c43a4 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/MSVC_f128.csv @@ -0,0 +1,292 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,4096,120.266239506,106.483519,105.736235,2,2,15.736235,yes,Both,no,4.205704,2.201033,ff1951e869c9480085d12c8d2f11f164 +arithmetic,add,f128,fltx,fltx,fltx bl::f128,bl::add,4096,120.266239506,106.483519,105.736235,2,2,15.736235,yes,Both,no,1.910787,,ff1951e869c9480085d12c8d2f11f164 +arithmetic,add,f128,qdpp,ddreal,qdpp dd_real,qdpp operator+,4096,120.266239506,106.483519,105.736235,2,2,15.736235,yes,NaN,no,1.85258,0.969538,ff1951e869c9480085d12c8d2f11f164 +arithmetic,add,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,4096,127.004869623,113.252951,113.031307,2,2,23.031307,yes,No,no,162.133789,84.851859,ff1951e869c9480085d12c8d2f11f164 +arithmetic,divide,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator/,4100,110.909104952,105.971646,105.124683,2,2,15.124683,yes,NaN,no,6.342515,3.786294,ff1951e869c9480085d12c8d2f11f164 +arithmetic,divide,f128,fltx,fltx,fltx bl::f128,bl::divide,4100,110.909104952,105.971646,105.124683,2,2,15.124683,yes,Both,yes,1.675125,,ff1951e869c9480085d12c8d2f11f164 +arithmetic,divide,f128,qdpp,ddreal,qdpp dd_real,qdpp operator/,4100,110.735880117,106.129356,105.462052,2,2,15.462052,yes,NaN,no,10.518927,6.279488,ff1951e869c9480085d12c8d2f11f164 +arithmetic,divide,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,4100,114.962938068,113.147176,113.003421,2,2,23.003421,yes,No,no,231.254883,138.052325,ff1951e869c9480085d12c8d2f11f164 +arithmetic,multiply,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,4100,108.546950295,105.172405,104.685792,2,2,14.685792,yes,Both,no,5.507186,3.388671,ff1951e869c9480085d12c8d2f11f164 +arithmetic,multiply,f128,fltx,fltx,fltx bl::f128,bl::multiply,4100,108.702461473,105.665876,105.380753,2,2,15.380753,yes,Both,yes,1.625176,,ff1951e869c9480085d12c8d2f11f164 +arithmetic,multiply,f128,qdpp,ddreal,qdpp dd_real,qdpp operator*,4100,108.702461473,105.665876,105.380753,2,2,15.380753,yes,NaN,no,0.77656,0.477832,ff1951e869c9480085d12c8d2f11f164 +arithmetic,multiply,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,4100,114.973330655,113.125729,113.004612,2,2,23.004612,yes,No,no,134.572754,82.805045,ff1951e869c9480085d12c8d2f11f164 +arithmetic,subtract,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,4096,120.053476095,106.530508,105.744857,2,2,15.744857,yes,Both,no,4.263051,1.988988,ff1951e869c9480085d12c8d2f11f164 +arithmetic,subtract,f128,fltx,fltx,fltx bl::f128,bl::subtract,4096,120.053476095,106.530508,105.744857,2,2,15.744857,yes,Both,no,2.143327,,ff1951e869c9480085d12c8d2f11f164 +arithmetic,subtract,f128,qdpp,ddreal,qdpp dd_real,qdpp operator-,4096,120.053476095,106.530508,105.744857,2,2,15.744857,yes,NaN,no,1.867144,0.871143,ff1951e869c9480085d12c8d2f11f164 +arithmetic,subtract,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,4096,127.171548646,113.274079,113.01331,2,2,23.01331,yes,No,no,162.232666,75.691993,ff1951e869c9480085d12c8d2f11f164 +comparisons,equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,4.995891,7.273348,ff1951e869c9480085d12c8d2f11f164 +comparisons,equal,f128,fltx,fltx,fltx bl::f128,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.686876,,ff1951e869c9480085d12c8d2f11f164 +comparisons,equal,f128,qdpp,ddreal,qdpp dd_real,qdpp operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.543185,0.790805,ff1951e869c9480085d12c8d2f11f164 +comparisons,equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,66.171265,96.336487,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.055267,2.44943,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater,f128,fltx,fltx,fltx bl::f128,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.063855,,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater,f128,qdpp,ddreal,qdpp dd_real,qdpp operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.971802,0.955398,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,66.221313,32.08623,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater_equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.033447,2.451503,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater_equal,f128,fltx,fltx,fltx bl::f128,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.053209,,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater_equal,f128,qdpp,ddreal,qdpp dd_real,qdpp operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.967371,0.958193,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater_equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,65.947266,32.119118,ff1951e869c9480085d12c8d2f11f164 +comparisons,less,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,5.028839,2.417415,ff1951e869c9480085d12c8d2f11f164 +comparisons,less,f128,fltx,fltx,fltx bl::f128,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.080254,,ff1951e869c9480085d12c8d2f11f164 +comparisons,less,f128,qdpp,ddreal,qdpp dd_real,qdpp operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.956411,0.940467,ff1951e869c9480085d12c8d2f11f164 +comparisons,less,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,66.68457,32.055968,ff1951e869c9480085d12c8d2f11f164 +comparisons,less_equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,4.979695,2.426766,ff1951e869c9480085d12c8d2f11f164 +comparisons,less_equal,f128,fltx,fltx,fltx bl::f128,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.051988,,ff1951e869c9480085d12c8d2f11f164 +comparisons,less_equal,f128,qdpp,ddreal,qdpp dd_real,qdpp operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.982939,0.96635,ff1951e869c9480085d12c8d2f11f164 +comparisons,less_equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,66.425171,32.371127,ff1951e869c9480085d12c8d2f11f164 +comparisons,not_equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,4.959503,7.209204,ff1951e869c9480085d12c8d2f11f164 +comparisons,not_equal,f128,fltx,fltx,fltx bl::f128,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.68794,,ff1951e869c9480085d12c8d2f11f164 +comparisons,not_equal,f128,qdpp,ddreal,qdpp dd_real,qdpp operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.550572,0.800319,ff1951e869c9480085d12c8d2f11f164 +comparisons,not_equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,67.123413,97.571547,ff1951e869c9480085d12c8d2f11f164 +exponentials,exp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,8198,100.3727745,0,0,1,2,-80,no,Both,-,367.594401,3.320052,ff1951e869c9480085d12c8d2f11f164 +exponentials,exp,f128,fltx,fltx,fltx bl::f128,bl::exp,8198,106.989164,104.344345,103.64511,2,2,23.64511,yes,Both,-,110.719477,,ff1951e869c9480085d12c8d2f11f164 +exponentials,exp,f128,qdpp,ddreal,qdpp dd_real,qdpp exp,8198,106.825636,104.212593,103.677417,2,2,23.677417,yes,Both,-,103.412156,0.934001,ff1951e869c9480085d12c8d2f11f164 +exponentials,exp,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,8198,114.9390545,113.155192,113.027016,2,2,33.027016,yes,No,-,3212.451172,29.014328,ff1951e869c9480085d12c8d2f11f164 +exponentials,exp2,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,8198,101.653295,96.37431,95.216729,2,2,15.216729,yes,Both,-,831.795247,8.630168,ff1951e869c9480085d12c8d2f11f164 +exponentials,exp2,f128,fltx,fltx,fltx bl::f128,bl::exp2,8198,108.8963935,106.013023,105.117537,2,2,25.117537,yes,Both,-,96.38228,,ff1951e869c9480085d12c8d2f11f164 +exponentials,exp2,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,8198,114.9915935,113.141516,113.011731,2,2,33.011731,yes,No,-,7336.328125,76.116981,ff1951e869c9480085d12c8d2f11f164 +exponentials,expm1,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,8197,120.348697197,101.057168,100.341101,2,2,20.341101,yes,Both,no,390.052379,3.461751,ff1951e869c9480085d12c8d2f11f164 +exponentials,expm1,f128,fltx,fltx,fltx bl::f128,bl::expm1,8197,121.61686848,105.111574,104.102752,2,2,24.102752,yes,Both,yes,112.674873,,ff1951e869c9480085d12c8d2f11f164 +exponentials,expm1,f128,qdpp,ddreal,qdpp dd_real,qdpp expm1,8197,121.518391029,104.81583,0,1,2,-80,no,NaN,no,105.247237,0.934079,ff1951e869c9480085d12c8d2f11f164 +exponentials,expm1,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,8197,128.181752377,113.238852,113.009736,2,2,33.009736,yes,No,no,3627.099609,32.190847,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,abs,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,4.693663,1.344742,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,abs,f128,fltx,fltx,fltx bl::f128,bl::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,3.490382,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,abs,f128,qdpp,ddreal,qdpp dd_real,qdpp abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,2.967204,0.850109,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,abs,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,8196,inf,inf,inf,2,2,inf,yes,No,yes,2.807066,0.804229,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,copysign,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,no,2.617955,1.600545,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,copysign,f128,fltx,fltx,fltx bl::f128,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,1.635665,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,copysign,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::copysign,4099,inf,inf,inf,1,1,inf,yes,No,no,6.011926,3.675525,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fabs,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,4.321488,1.232915,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fabs,f128,fltx,fltx,fltx bl::f128,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,3.505099,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fabs,f128,qdpp,ddreal,qdpp dd_real,qdpp fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,2.991343,0.853426,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fabs,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,4099,inf,inf,inf,1,1,inf,yes,No,yes,2.788783,0.795636,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fdim,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,8197,137.996123973,inf,106.227061,2,2,16.227061,yes,No,yes,8.272044,2.196267,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fdim,f128,fltx,fltx,fltx bl::f128,bl::fdim,8197,137.996123973,inf,106.227061,2,2,16.227061,yes,Both,yes,3.766412,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fdim,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,8197,inf,inf,inf,2,2,inf,yes,No,yes,283.262939,75.207642,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fma,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,12293,75.7644862641,0,0,2,3,-90,no,Both,no,11.884478,2.036087,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fma,f128,fltx,fltx,fltx bl::f128,bl::fma,12293,117.44188202,104.680325,99.5802,3,3,9.5802,yes,Both,no,5.836921,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fma,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,12293,128.420266387,113.182994,113.025245,3,3,23.025245,yes,No,no,231.793213,39.711552,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fmax,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,yes,6.451849,1.991331,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fmax,f128,fltx,fltx,fltx bl::f128,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,yes,3.239968,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fmax,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,8195,inf,inf,inf,2,2,inf,yes,No,no,98.110352,30.281271,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fmin,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,no,6.42807,2.02288,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fmin,f128,fltx,fltx,fltx bl::f128,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,yes,3.177683,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fmin,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,8195,inf,inf,inf,2,2,inf,yes,No,no,98.17627,30.895552,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,frexp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,no,4.200694,1.58086,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,frexp,f128,fltx,fltx,fltx bl::f128,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,2.65722,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,frexp,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,8196,inf,inf,inf,2,2,inf,yes,No,no,210.336914,79.156747,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,ilogb,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,5.626458,2.424051,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,ilogb,f128,fltx,fltx,fltx bl::f128,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,2.321098,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,ilogb,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,33.294067,14.344105,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,ldexp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,4.165612,2.123202,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,ldexp,f128,fltx,fltx,fltx bl::f128,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.961948,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,ldexp,f128,qdpp,ddreal,qdpp dd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,4.071236,2.075099,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,ldexp,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::ldexp,4096,inf,inf,inf,1,1,inf,yes,No,no,60.831909,31.005874,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,logb,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,79.411011,31.642366,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,logb,f128,fltx,fltx,fltx bl::f128,bl::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,2.509642,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,modf,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,8195,inf,inf,inf,2,2,inf,yes,NaN,no,15.434047,2.621811,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,modf,f128,fltx,fltx,fltx bl::f128,bl::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,5.886789,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,modf,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,8195,inf,inf,inf,2,2,inf,yes,No,no,311.843262,52.97341,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,nextafter,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter,,,,,,,,,-,-,63.670044,10.862539,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,nextafter,f128,fltx,fltx,fltx bl::f128,bl::nextafter,,,,,,,,,-,-,5.861433,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,nextafter,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter,,,,,,,,,-,-,180.418701,30.780648,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,nexttoward,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter (same type),,,,,,,,,-,-,63.704224,10.886768,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,nexttoward,f128,fltx,fltx,fltx bl::f128,bl::nexttoward,,,,,,,,,-,-,5.851528,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,nexttoward,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter (same type),,,,,,,,,-,-,180.222168,30.799166,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,recip,f128,fltx,fltx,fltx bl::f128,bl::recip,8195,109.025331959,105.925795,105.189487,2,2,15.189487,yes,Both,yes,24.316129,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,recip,f128,qdpp,ddreal,qdpp dd_real,qdpp inv,8195,109.417670682,106.810343,106.471075,2,2,16.471075,yes,NaN,no,10.870229,0.447038,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,scalbln,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,no,4.168776,1.905349,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,scalbln,f128,fltx,fltx,fltx bl::f128,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,2.187933,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,scalbln,f128,qdpp,ddreal,qdpp dd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,4.095603,1.871905,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,scalbn,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,no,4.171242,1.91141,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,scalbn,f128,fltx,fltx,fltx bl::f128,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,2.182285,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,scalbn,f128,qdpp,ddreal,qdpp dd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,4.115137,1.885701,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,cosh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,8198,104.0385055,101.138682,100.616889,2,2,20.616889,yes,Both,-,400.563743,3.021278,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,cosh,f128,fltx,fltx,fltx bl::f128,bl::cosh,8198,107.9070545,105.118172,104.370708,2,2,24.370708,yes,Both,-,132.580879,,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,cosh,f128,qdpp,ddreal,qdpp dd_real,qdpp cosh,8198,107.6737085,104.881438,104.111506,2,2,24.111506,yes,NaN,-,135.221915,1.01992,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,cosh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,8198,114.913131,113.167572,113.010341,2,2,33.010341,yes,No,-,3635.546875,27.421351,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,sinh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,8198,103.5471475,100.590468,99.932085,2,2,19.932085,yes,Both,no,400.563743,3.047873,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,sinh,f128,fltx,fltx,fltx bl::f128,bl::sinh,8198,107.4201585,104.726423,103.568829,2,2,23.568829,yes,Both,yes,131.424028,,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,sinh,f128,qdpp,ddreal,qdpp dd_real,qdpp sinh,8198,106.988346,104.381391,103.645559,2,2,23.645559,yes,NaN,no,135.218548,1.028872,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,sinh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,8198,114.9589025,113.141428,113.003172,2,2,33.003172,yes,No,no,4157.8125,31.636623,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,tanh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,8198,105.787236,101.155017,100.345784,2,2,20.345784,yes,Both,no,423.912464,3.026218,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,tanh,f128,fltx,fltx,fltx bl::f128,bl::tanh,8198,109.217494,105.123457,103.771823,2,2,23.771823,yes,Both,yes,140.079973,,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,tanh,f128,qdpp,ddreal,qdpp dd_real,qdpp tanh,8198,109.266952,105.403737,104.022939,2,2,24.022939,yes,Both,no,139.045174,0.992613,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,tanh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,8198,115.2023705,113.224776,113.018718,2,2,33.018718,yes,Inf,no,3958.056641,28.255693,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,acosh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,8200,105.6097898,101.710952,100.384388,2,2,20.384388,yes,Both,-,796.362305,5.577423,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,acosh,f128,fltx,fltx,fltx bl::f128,bl::acosh,8200,108.031519376,104.331717,103.672888,2,2,23.672888,yes,Both,-,142.783203,,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,acosh,f128,qdpp,ddreal,qdpp dd_real,qdpp acosh,8200,107.223721607,103.93482,0,0,2,-80,no,NaN,-,153.665865,1.076218,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,acosh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,8200,114.902573821,113.201891,113.024351,2,2,33.024351,yes,No,-,13196.582031,92.423911,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,asinh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,8198,104.463884,100.780938,99.800033,2,2,19.800033,yes,Both,no,750.048828,5.71094,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,asinh,f128,fltx,fltx,fltx bl::f128,bl::asinh,8198,108.081857,105.155677,103.818628,2,2,23.818628,yes,Both,yes,131.335449,,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,asinh,f128,qdpp,ddreal,qdpp dd_real,qdpp asinh,8198,107.0728735,103.961722,0,1,2,-80,no,NaN,no,165.631104,1.26113,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,asinh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,8198,114.8781205,113.122222,113.007648,2,2,33.007648,yes,No,no,13852.050781,105.470769,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,atanh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,8204,106.728043765,102.148131,101.316477,2,2,21.316477,yes,Both,no,2771.142578,19.402514,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,atanh,f128,fltx,fltx,fltx bl::f128,bl::atanh,8204,108.11583849,104.54201,103.139045,2,2,23.139045,yes,Both,yes,142.823893,,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,atanh,f128,qdpp,ddreal,qdpp dd_real,qdpp atanh,8204,107.596922443,104.396151,0,1,2,-80,no,Both,no,159.940279,1.119843,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,atanh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,8204,115.135452038,113.183849,113.00948,2,2,33.00948,yes,No,no,5409.082031,37.872389,ff1951e869c9480085d12c8d2f11f164 +io,parse,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,8195,107.103916819,0,0,1,2,-106,no,Both,no,809.075384,3.578291,ff1951e869c9480085d12c8d2f11f164 +io,parse,f128,fltx,fltx,fltx bl::f128,bl::parse,8195,109.936763821,107.051396,106.003381,2,2,0.003381,yes,Both,yes,226.106638,,ff1951e869c9480085d12c8d2f11f164 +io,parse,f128,qdpp,ddreal,qdpp dd_real,qdpp read,8195,102.529802279,0,0,0,2,-106,no,NaN,yes,191.102043,0.845185,ff1951e869c9480085d12c8d2f11f164 +io,parse,f128,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,8195,114.932563094,113.157032,113.020059,2,2,7.020059,yes,No,no,8375.847768,37.043794,ff1951e869c9480085d12c8d2f11f164 +io,to_chars,f128,fltx,fltx,fltx bl::f128,bl::to_chars,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,207.456364,,ff1951e869c9480085d12c8d2f11f164 +io,to_chars,f128,qdpp,ddreal,qdpp dd_real,qdpp write,8195,109.446520281,102.378174,102.257899,2,2,12.257899,yes,Both,no,414.475075,1.99789,ff1951e869c9480085d12c8d2f11f164 +io,to_string,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,8195,110.768659892,106.034942,105.994061,2,2,15.994061,yes,Both,no,637.045621,2.562003,ff1951e869c9480085d12c8d2f11f164 +io,to_string,f128,fltx,fltx,fltx bl::f128,bl::to_string,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,248.651433,,ff1951e869c9480085d12c8d2f11f164 +io,to_string,f128,qdpp,ddreal,qdpp dd_real,qdpp to_string,8195,109.446520281,102.378174,102.257899,2,2,12.257899,yes,Both,no,414.194519,1.665764,ff1951e869c9480085d12c8d2f11f164 +io,to_string,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,8195,110.6557863,107.628363,107.30463,2,2,17.30463,yes,Both,yes,11176.09173,44.946822,ff1951e869c9480085d12c8d2f11f164 +logarithms,log,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,12291,105.261925298,95.715279,87.939907,3,3,7.939907,yes,Both,-,408.06108,3.256482,ff1951e869c9480085d12c8d2f11f164 +logarithms,log,f128,fltx,fltx,fltx bl::f128,bl::log,12291,108.40767633,104.625423,103.727726,3,3,23.727726,yes,Both,-,125.30733,,ff1951e869c9480085d12c8d2f11f164 +logarithms,log,f128,qdpp,ddreal,qdpp dd_real,qdpp log,12291,101.630249595,62.621586,62.08936,2,3,-17.91064,no,NaN,-,123.656529,0.986826,ff1951e869c9480085d12c8d2f11f164 +logarithms,log,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log,12291,115.112527379,113.162642,113.007854,3,3,33.007854,yes,No,-,5040.380859,40.22415,ff1951e869c9480085d12c8d2f11f164 +logarithms,log10,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,12291,102.940505826,95.718828,87.939938,3,3,7.939938,yes,Both,-,419.224964,3.229883,ff1951e869c9480085d12c8d2f11f164 +logarithms,log10,f128,fltx,fltx,fltx bl::f128,bl::log10,12291,107.503050022,104.469291,103.762278,3,3,23.762278,yes,Both,-,129.795714,,ff1951e869c9480085d12c8d2f11f164 +logarithms,log10,f128,qdpp,ddreal,qdpp dd_real,qdpp log10,12291,101.446526142,62.621586,62.08936,2,3,-17.91064,no,NaN,-,145.685041,1.122418,ff1951e869c9480085d12c8d2f11f164 +logarithms,log10,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,12291,114.873180067,113.138717,113.007632,3,3,33.007632,yes,No,-,5262.402344,40.54373,ff1951e869c9480085d12c8d2f11f164 +logarithms,log1p,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,8197,119.746353582,101.291508,100.173624,2,2,20.173624,yes,Both,no,541.015625,3.932797,ff1951e869c9480085d12c8d2f11f164 +logarithms,log1p,f128,fltx,fltx,fltx bl::f128,bl::log1p,8197,121.372231555,105.150365,103.619384,2,2,23.619384,yes,Both,yes,137.565104,,ff1951e869c9480085d12c8d2f11f164 +logarithms,log1p,f128,qdpp,ddreal,qdpp dd_real,qdpp log1p,8197,120.891020948,104.605109,103.7953,2,2,23.7953,yes,NaN,no,128.549657,0.934464,ff1951e869c9480085d12c8d2f11f164 +logarithms,log1p,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,8197,128.112358976,113.130249,113.010769,2,2,33.010769,yes,No,no,5480.029297,39.835897,ff1951e869c9480085d12c8d2f11f164 +logarithms,log2,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,12291,106.566480905,95.715106,87.939906,3,3,7.939906,yes,Both,-,419.418945,3.589146,ff1951e869c9480085d12c8d2f11f164 +logarithms,log2,f128,fltx,fltx,fltx bl::f128,bl::log2,12291,108.785650924,104.550799,103.716432,3,3,23.716432,yes,Both,-,116.85758,,ff1951e869c9480085d12c8d2f11f164 +logarithms,log2,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,12291,116.314749653,113.191847,113.016527,3,3,33.016527,yes,No,-,5237.304688,44.817843,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,affine_trig,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,981.870229,5.623736,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,affine_trig,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,174.593949,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,affine_trig,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,229.891304,1.31672,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,affine_trig,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,7420.746528,42.502885,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,chained_arithmetic,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,52.281203,2.587712,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,chained_arithmetic,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,20.203644,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,chained_arithmetic,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,37.802793,1.871088,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,chained_arithmetic,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,988.872768,48.945268,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,haversine,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,6172.149123,14.790247,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,haversine,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,417.312095,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,haversine,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,765.725524,1.834899,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,haversine,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,22487.5,53.886528,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,horner_polynomial,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,246.732955,3.169032,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,horner_polynomial,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,77.857521,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,horner_polynomial,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,77.866181,1.000111,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,horner_polynomial,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,3859.288194,49.568598,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,log_sum_exp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,3144.560185,3.864098,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,log_sum_exp,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,813.788947,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,log_sum_exp,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,906.363449,1.113757,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,log_sum_exp,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,34300,42.14852,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,mandelbrot,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,59.167292,4.584389,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,mandelbrot,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,12.906256,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,mandelbrot,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,11.761939,0.911336,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,mandelbrot,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,1056.775,81.880834,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,matrix_vector_4x4,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,264.807968,4.815387,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,matrix_vector_4x4,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,54.992045,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,matrix_vector_4x4,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,57.219444,1.040504,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,matrix_vector_4x4,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,4517.604167,82.15014,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,newton_root,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,78.219845,3.040677,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,newton_root,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,25.72448,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,newton_root,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,42.51193,1.652587,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,newton_root,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,1264.455782,49.153794,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,product_sum,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same expression,,,,,,,,,-,-,25.648717,5.125641,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,product_sum,f128,fltx,fltx,fltx bl::f128,bl::product_sum,,,,,,,,,-,-,5.004002,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,product_sum,f128,qdpp,ddreal,qdpp dd_real,same expression,,,,,,,,,-,-,3.003574,0.600234,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,product_sum,f128,tlfloat,tlquad,TLFloat Quad,same expression,,,,,,,,,-,-,420.381673,84.009096,ff1951e869c9480085d12c8d2f11f164 +random,mt19937_64,f128,fltx,fltx,fltx bl::f128,bl::mt19937_64,,,,,,,,,-,-,2.135,,ff1951e869c9480085d12c8d2f11f164 +random,normal,f128,fltx,fltx,fltx bl::f128,bl::normal,,,,,,,,,-,-,46.95361,,ff1951e869c9480085d12c8d2f11f164 +random,uniform_real,f128,fltx,fltx,fltx bl::f128,bl::uniform_real,,,,,,,,,-,-,8.909321,,ff1951e869c9480085d12c8d2f11f164 +random,uniform_real,f128,qdpp,ddreal,qdpp dd_real,qdpp ddrand,,,,,,,,,-,-,18.890425,2.120299,ff1951e869c9480085d12c8d2f11f164 +remainders,fmod,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,8197,106.658013851,0,0,1,3,-90,no,NaN,no,50.605809,2.823965,ff1951e869c9480085d12c8d2f11f164 +remainders,fmod,f128,fltx,fltx,fltx bl::f128,bl::fmod,8197,inf,inf,inf,3,3,inf,yes,Both,yes,17.920127,,ff1951e869c9480085d12c8d2f11f164 +remainders,fmod,f128,qdpp,ddreal,qdpp dd_real,qdpp fmod,8197,106.654304615,0,0,1,3,-90,no,NaN,no,18.945093,1.057196,ff1951e869c9480085d12c8d2f11f164 +remainders,fmod,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,8197,inf,inf,inf,3,3,inf,yes,No,no,616.168213,34.384143,ff1951e869c9480085d12c8d2f11f164 +remainders,remainder,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remainder,4099,134.409394,100.966202,95.502103,1,1,5.502103,yes,NaN,no,51.148596,2.348405,ff1951e869c9480085d12c8d2f11f164 +remainders,remainder,f128,fltx,fltx,fltx bl::f128,bl::remainder,4099,137.991491,inf,103.120938,1,1,13.120938,yes,Both,yes,21.780141,,ff1951e869c9480085d12c8d2f11f164 +remainders,remainder,f128,qdpp,ddreal,qdpp dd_real,qdpp drem,4099,134.409394,100.966202,95.502103,1,1,5.502103,yes,NaN,no,19.313315,0.88674,ff1951e869c9480085d12c8d2f11f164 +remainders,remainder,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::remainder,4099,inf,inf,inf,1,1,inf,yes,No,no,680.12085,31.22665,ff1951e869c9480085d12c8d2f11f164 +remainders,remquo,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remquo,4099,inf,inf,inf,1,1,inf,yes,NaN,no,51.101472,2.421131,ff1951e869c9480085d12c8d2f11f164 +remainders,remquo,f128,fltx,fltx,fltx bl::f128,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,21.106445,,ff1951e869c9480085d12c8d2f11f164 +remainders,remquo,f128,qdpp,ddreal,qdpp dd_real,qdpp divrem,4099,inf,inf,inf,1,1,inf,yes,NaN,no,19.831819,0.93961,ff1951e869c9480085d12c8d2f11f164 +remainders,remquo,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::remquo,4099,inf,inf,inf,1,1,inf,yes,No,no,692.346191,32.802596,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,cbrt,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,8195,108.394414444,105.391162,104.600252,2,2,14.600252,yes,Both,no,427.583008,19.449634,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,cbrt,f128,fltx,fltx,fltx bl::f128,bl::cbrt,8195,108.037583359,104.101707,103.019576,2,2,13.019576,yes,Both,yes,21.984116,,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,cbrt,f128,qdpp,ddreal,qdpp dd_real,qdpp nroot,8195,101.532243779,89.370444,89.005643,1,2,-0.994357,no,NaN,no,65.998535,3.002101,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,cbrt,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,8195,115.032863938,113.203933,113.021191,2,2,23.021191,yes,No,no,3220.703125,146.501371,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,hypot,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,8195,121.944215111,104.898769,104.258205,2,2,14.258205,yes,Both,yes,57.436009,6.466075,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,hypot,f128,fltx,fltx,fltx bl::f128,bl::hypot,8195,122.379344938,105.55647,104.375984,2,2,14.375984,yes,Both,yes,8.88267,,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,hypot,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,8195,128.957366847,113.150622,113.012814,2,2,23.012814,yes,No,yes,446.870931,50.308174,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,ipow,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",8195,106.377664118,103.455996,102.733123,2,2,12.733123,yes,Both,no,18.950625,1.23909,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,ipow,f128,fltx,fltx,fltx bl::f128,bl::ipow,8195,106.491467825,103.779117,103.190083,2,2,13.190083,yes,Both,no,15.29398,,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,ipow,f128,qdpp,ddreal,qdpp dd_real,qdpp npwr,8195,106.475948653,103.777298,103.184609,2,2,13.184609,yes,NaN,no,7.294329,0.476941,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,pow,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,8198,102.607858,98.689822,97.605813,2,2,17.605813,yes,Inf,no,661.307199,3.267485,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,pow,f128,fltx,fltx,fltx bl::f128,bl::pow,8198,107.1276135,102.267431,101.314349,2,2,21.314349,yes,Both,yes,202.390253,,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,pow,f128,qdpp,ddreal,qdpp dd_real,qdpp pow,8198,106.7895465,101.68773,101.002017,2,2,21.002017,yes,No,no,219.943576,1.08673,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,pow,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,8198,114.938032,113.162316,113.016553,2,2,33.016553,yes,No,no,16199.951172,80.043139,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,sqr,f128,fltx,fltx,fltx bl::f128,bl::sqr,8195,108.712755765,105.598081,105.370295,2,2,15.370295,yes,Both,yes,1.613014,,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,sqr,f128,qdpp,ddreal,qdpp dd_real,qdpp sqr,8195,108.650116271,105.598081,105.370295,2,2,15.370295,yes,NaN,yes,0.7778,0.482203,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,sqrt,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,16391,113.552288395,54.203493,52.856137,2,4,-37.143863,no,Both,no,5.870047,1.431486,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,sqrt,f128,fltx,fltx,fltx bl::f128,bl::sqrt,16391,109.749936251,105.75112,104.669867,4,4,14.669867,yes,Both,yes,4.100666,,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,sqrt,f128,qdpp,ddreal,qdpp dd_real,qdpp sqrt,16391,92.6395526585,52.16202,52.038891,2,4,-37.961109,no,NaN,no,4.974426,1.213078,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,sqrt,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,16391,115.16223339,113.1397,113.011246,4,4,23.011246,yes,No,no,409.595947,99.885234,ff1951e869c9480085d12c8d2f11f164 +rounding,ceil,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ceil,4108,inf,inf,inf,1,1,inf,yes,Both,no,6.346664,3.268162,ff1951e869c9480085d12c8d2f11f164 +rounding,ceil,f128,fltx,fltx,fltx bl::f128,bl::ceil,4108,inf,inf,inf,1,1,inf,yes,Both,yes,1.941968,,ff1951e869c9480085d12c8d2f11f164 +rounding,ceil,f128,qdpp,ddreal,qdpp dd_real,qdpp ceil,4108,inf,inf,inf,1,1,inf,yes,Both,no,1.358696,0.699649,ff1951e869c9480085d12c8d2f11f164 +rounding,ceil,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::ceil,4108,inf,inf,inf,1,1,inf,yes,No,no,53.61145,27.606766,ff1951e869c9480085d12c8d2f11f164 +rounding,floor,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::floor,4108,inf,inf,inf,1,1,inf,yes,Both,no,4.676684,3.390964,ff1951e869c9480085d12c8d2f11f164 +rounding,floor,f128,fltx,fltx,fltx bl::f128,bl::floor,4108,inf,inf,inf,1,1,inf,yes,Both,yes,1.379161,,ff1951e869c9480085d12c8d2f11f164 +rounding,floor,f128,qdpp,ddreal,qdpp dd_real,qdpp floor,4108,inf,inf,inf,1,1,inf,yes,Both,no,1.316901,0.954857,ff1951e869c9480085d12c8d2f11f164 +rounding,floor,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::floor,4108,inf,inf,inf,1,1,inf,yes,No,no,54.04541,39.187172,ff1951e869c9480085d12c8d2f11f164 +rounding,llround,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::llround,4114,inf,inf,inf,1,1,inf,yes,-,-,444.262695,101.682351,ff1951e869c9480085d12c8d2f11f164 +rounding,llround,f128,fltx,fltx,fltx bl::f128,bl::llround,4114,inf,inf,inf,1,1,inf,yes,-,-,4.369123,,ff1951e869c9480085d12c8d2f11f164 +rounding,lround,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lround,4110,inf,inf,inf,1,1,inf,yes,-,-,29.282029,6.725088,ff1951e869c9480085d12c8d2f11f164 +rounding,lround,f128,fltx,fltx,fltx bl::f128,bl::lround,4110,inf,inf,inf,1,1,inf,yes,-,-,4.354148,,ff1951e869c9480085d12c8d2f11f164 +rounding,round,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::round,4108,inf,inf,inf,1,1,inf,yes,Both,no,13.605632,1.320498,ff1951e869c9480085d12c8d2f11f164 +rounding,round,f128,fltx,fltx,fltx bl::f128,bl::round,4108,inf,inf,inf,1,1,inf,yes,Both,yes,10.303406,,ff1951e869c9480085d12c8d2f11f164 +rounding,round,f128,qdpp,ddreal,qdpp dd_real,qdpp round,4108,130.441577,0,0,0,1,-80,no,Both,no,3.703238,0.359419,ff1951e869c9480085d12c8d2f11f164 +rounding,round,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::round,4108,inf,inf,inf,1,1,inf,yes,No,no,52.491455,5.094573,ff1951e869c9480085d12c8d2f11f164 +rounding,round_decimals,f128,fltx,fltx,fltx bl::f128,bl::round_decimals,4099,110.177573,107.236356,107.022726,1,1,17.022726,yes,Both,yes,83.590933,,ff1951e869c9480085d12c8d2f11f164 +rounding,round_significant,f128,fltx,fltx,fltx bl::f128,bl::round_significant,4096,121.33026,107.34042,107.049597,1,1,17.049597,yes,Both,yes,129.050022,,ff1951e869c9480085d12c8d2f11f164 +rounding,roundeven,f128,fltx,fltx,fltx bl::f128,bl::roundeven,4108,inf,inf,inf,1,1,inf,yes,Both,yes,9.584263,,ff1951e869c9480085d12c8d2f11f164 +rounding,roundeven,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::rint,4108,inf,inf,inf,1,1,inf,yes,No,no,64.60022,6.740238,ff1951e869c9480085d12c8d2f11f164 +rounding,trunc,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::trunc,4108,inf,inf,inf,1,1,inf,yes,Both,no,8.627777,2.487189,ff1951e869c9480085d12c8d2f11f164 +rounding,trunc,f128,fltx,fltx,fltx bl::f128,bl::trunc,4108,inf,inf,inf,1,1,inf,yes,Both,yes,3.468887,,ff1951e869c9480085d12c8d2f11f164 +rounding,trunc,f128,qdpp,ddreal,qdpp dd_real,qdpp aint,4108,inf,inf,inf,1,1,inf,yes,Both,no,4.698816,1.35456,ff1951e869c9480085d12c8d2f11f164 +rounding,trunc,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::trunc,4108,inf,inf,inf,1,1,inf,yes,No,no,48.332113,13.933034,ff1951e869c9480085d12c8d2f11f164 +special_functions,erf,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,8198,110.091104,102.183057,101.184994,2,2,21.184994,yes,Both,no,1228.367457,2.149175,ff1951e869c9480085d12c8d2f11f164 +special_functions,erf,f128,fltx,fltx,fltx bl::f128,bl::erf,8198,110.8988915,104.260004,103.47754,2,2,23.47754,yes,Both,yes,571.552906,,ff1951e869c9480085d12c8d2f11f164 +special_functions,erf,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,8198,115.2497885,113.304511,113.036088,2,2,33.036088,yes,Inf,no,95173.4375,166.517284,ff1951e869c9480085d12c8d2f11f164 +special_functions,erfc,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,8198,106.2952345,99.620228,99.060329,2,2,19.060329,yes,Both,-,1210.602679,2.157763,ff1951e869c9480085d12c8d2f11f164 +special_functions,erfc,f128,fltx,fltx,fltx bl::f128,bl::erfc,8198,107.1893035,100.123363,99.167646,2,2,19.167646,yes,Both,-,561.045259,,ff1951e869c9480085d12c8d2f11f164 +special_functions,erfc,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,8198,115.0926585,113.21381,113.051599,2,2,33.051599,yes,Inf,-,95079.6875,169.468837,ff1951e869c9480085d12c8d2f11f164 +special_functions,lgamma,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lgamma,4099,105.130791,100.729534,92.065791,1,1,12.065791,yes,Both,-,2926.171875,5.486146,ff1951e869c9480085d12c8d2f11f164 +special_functions,lgamma,f128,fltx,fltx,fltx bl::f128,bl::lgamma,4099,107.30017,103.199673,102.168212,1,1,22.168212,yes,Both,-,533.374763,,ff1951e869c9480085d12c8d2f11f164 +special_functions,lgamma,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::lgamma,4099,114.971639,113.175643,113.01385,1,1,33.01385,yes,No,-,62138.28125,116.500227,ff1951e869c9480085d12c8d2f11f164 +special_functions,tgamma,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tgamma,4099,100.757166,97.38341,96.496549,1,1,16.496549,yes,Both,-,2136.856618,4.520574,ff1951e869c9480085d12c8d2f11f164 +special_functions,tgamma,f128,fltx,fltx,fltx bl::f128,bl::tgamma,4099,105.565044,98.349598,97.317514,1,1,17.317514,yes,Both,-,472.695879,,ff1951e869c9480085d12c8d2f11f164 +special_functions,tgamma,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::tgamma,4099,115.005599,113.180213,113.028818,1,1,33.028818,yes,No,-,69246.484375,146.492676,ff1951e869c9480085d12c8d2f11f164 +trigonometric,acos,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,8204,106.956932498,104.122161,102.539984,2,2,22.539984,yes,Both,-,2242.700195,13.182812,ff1951e869c9480085d12c8d2f11f164 +trigonometric,acos,f128,fltx,fltx,fltx bl::f128,bl::acos,8204,106.470630111,95.825547,81.584963,2,2,1.584963,yes,Both,-,170.123047,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,acos,f128,qdpp,ddreal,qdpp dd_real,qdpp acos,8204,108.077772253,104.37615,103.255774,2,2,23.255774,yes,No,-,245.746528,1.444522,ff1951e869c9480085d12c8d2f11f164 +trigonometric,acos,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,8204,114.925291168,113.171158,113.019157,2,2,33.019157,yes,No,-,6193.066406,36.403453,ff1951e869c9480085d12c8d2f11f164 +trigonometric,asin,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,8204,106.761451076,104.076665,103.158102,2,2,23.158102,yes,Both,no,2310.351562,13.910579,ff1951e869c9480085d12c8d2f11f164 +trigonometric,asin,f128,fltx,fltx,fltx bl::f128,bl::asin,8204,108.580073592,105.096123,104.081582,2,2,24.081582,yes,Both,yes,166.085938,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,asin,f128,qdpp,ddreal,qdpp dd_real,qdpp asin,8204,108.039530841,103.502594,102.376736,2,2,22.376736,yes,No,no,247.043186,1.487442,ff1951e869c9480085d12c8d2f11f164 +trigonometric,asin,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,8204,115.030420086,113.199623,113.012058,2,2,33.012058,yes,No,no,6149.267578,37.024613,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,8198,106.716552,104.193031,103.565475,2,2,23.565475,yes,Both,no,384.798177,3.155051,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan,f128,fltx,fltx,fltx bl::f128,bl::atan,8198,108.728555,105.953468,104.92639,2,2,24.92639,yes,Both,yes,121.962603,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan,f128,qdpp,ddreal,qdpp dd_real,qdpp atan,8198,107.1653275,103.455087,102.91505,2,2,22.91505,yes,No,no,182.215948,1.494031,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,8198,114.987901,113.253632,113.035851,2,2,33.035851,yes,Inf,no,5589.355469,45.828437,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan2,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,8206,106.701442375,0,0,2,3,-80,no,Both,no,386.405436,3.262641,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan2,f128,fltx,fltx,fltx bl::f128,bl::atan2,8206,108.727143624,105.799026,104.520841,3,3,24.520841,yes,Both,yes,118.433315,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan2,f128,qdpp,ddreal,qdpp dd_real,qdpp atan2,8206,106.831723501,0,0,2,3,-80,no,No,no,178.384001,1.506198,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan2,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,8206,114.953607052,113.169783,113.0059,3,3,33.0059,yes,Inf,no,5634.863281,47.578363,ff1951e869c9480085d12c8d2f11f164 +trigonometric,cos,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,12524,63.2693933828,0,0,1,3,-80,no,Both,-,646.686663,6.203869,ff1951e869c9480085d12c8d2f11f164 +trigonometric,cos,f128,fltx,fltx,fltx bl::f128,bl::cos,12524,113.520718505,100.266388,99.209588,3,3,19.209588,yes,Both,-,104.239258,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,cos,f128,qdpp,ddreal,qdpp dd_real,qdpp cos,12524,63.5643252523,0,0,1,3,-80,no,Both,-,115.867705,1.111555,ff1951e869c9480085d12c8d2f11f164 +trigonometric,cos,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,12524,117.223146672,113.213457,113.01099,3,3,33.01099,yes,No,-,3385.9375,32.482364,ff1951e869c9480085d12c8d2f11f164 +trigonometric,sin,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,12524,51.3516367719,0,0,1,3,-80,no,Both,no,640.332031,6.179262,ff1951e869c9480085d12c8d2f11f164 +trigonometric,sin,f128,fltx,fltx,fltx bl::f128,bl::sin,12524,110.553532277,98.777563,98.619216,3,3,18.619216,yes,Both,yes,103.625977,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,sin,f128,qdpp,ddreal,qdpp dd_real,qdpp sin,12524,52.4625291042,0,0,1,3,-80,no,Both,no,115.763566,1.117129,ff1951e869c9480085d12c8d2f11f164 +trigonometric,sin,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,12524,116.147164931,113.247632,113.016004,3,3,33.016004,yes,No,no,3361.328125,32.437119,ff1951e869c9480085d12c8d2f11f164 +trigonometric,sincos,f128,fltx,fltx,fltx bl::f128,bl::sincos,,,,,,,,,-,-,92.818778,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,sincos,f128,qdpp,ddreal,qdpp dd_real,qdpp sincos,,,,,,,,,-,-,133.869934,1.442272,ff1951e869c9480085d12c8d2f11f164 +trigonometric,sincos,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sincos,,,,,,,,,-,-,6959.228516,74.976515,ff1951e869c9480085d12c8d2f11f164 +trigonometric,tan,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,12524,41.1613259056,0,0,1,3,-75,no,Both,no,1299.34082,12.128643,ff1951e869c9480085d12c8d2f11f164 +trigonometric,tan,f128,fltx,fltx,fltx bl::f128,bl::tan,12524,106.705038797,98.776698,98.614153,3,3,23.614153,yes,Both,yes,107.129945,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,tan,f128,qdpp,ddreal,qdpp dd_real,qdpp tan,12524,42.6351998414,0,0,1,3,-75,no,No,no,152.950614,1.427711,ff1951e869c9480085d12c8d2f11f164 +trigonometric,tan,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,12524,114.951330489,113.144915,113.016302,3,3,38.016302,yes,No,no,4658.59375,43.485449,ff1951e869c9480085d12c8d2f11f164 diff --git a/validation/metrics/data/windows/x86_64/MSVC_f128_fastmath.csv b/validation/metrics/data/windows/x86_64/MSVC_f128_fastmath.csv new file mode 100644 index 0000000..54b035c --- /dev/null +++ b/validation/metrics/data/windows/x86_64/MSVC_f128_fastmath.csv @@ -0,0 +1,86 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f128,fltx,fltx,fltx bl::f128,bl::add,4096,120.266239506,106.483519,105.736235,2,2,15.736235,yes,NaN,no,1.856564,,38734516d65c4154a947aaeb3ae92c72 +arithmetic,divide,f128,fltx,fltx,fltx bl::f128,bl::divide,4100,110.909104952,105.971646,105.124683,2,2,15.124683,yes,NaN,no,1.845349,,38734516d65c4154a947aaeb3ae92c72 +arithmetic,multiply,f128,fltx,fltx,fltx bl::f128,bl::multiply,4100,108.702461473,105.665876,105.380753,2,2,15.380753,yes,NaN,no,2.435891,,38734516d65c4154a947aaeb3ae92c72 +arithmetic,subtract,f128,fltx,fltx,fltx bl::f128,bl::subtract,4096,120.053476095,106.530508,105.744857,2,2,15.744857,yes,NaN,no,1.852747,,38734516d65c4154a947aaeb3ae92c72 +comparisons,equal,f128,fltx,fltx,fltx bl::f128,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.670391,,38734516d65c4154a947aaeb3ae92c72 +comparisons,greater,f128,fltx,fltx,fltx bl::f128,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.020836,,38734516d65c4154a947aaeb3ae92c72 +comparisons,greater_equal,f128,fltx,fltx,fltx bl::f128,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.134365,,38734516d65c4154a947aaeb3ae92c72 +comparisons,less,f128,fltx,fltx,fltx bl::f128,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.016535,,38734516d65c4154a947aaeb3ae92c72 +comparisons,less_equal,f128,fltx,fltx,fltx bl::f128,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.00302,,38734516d65c4154a947aaeb3ae92c72 +comparisons,not_equal,f128,fltx,fltx,fltx bl::f128,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.667387,,38734516d65c4154a947aaeb3ae92c72 +exponentials,exp,f128,fltx,fltx,fltx bl::f128,bl::exp,8198,106.989164,104.344345,103.64511,2,2,23.64511,yes,Both,-,100.127429,,38734516d65c4154a947aaeb3ae92c72 +exponentials,exp2,f128,fltx,fltx,fltx bl::f128,bl::exp2,8198,108.8963935,106.013023,105.117537,2,2,25.117537,yes,Both,-,96.116536,,38734516d65c4154a947aaeb3ae92c72 +exponentials,expm1,f128,fltx,fltx,fltx bl::f128,bl::expm1,8197,121.61686848,105.111574,104.102752,2,2,24.102752,yes,Both,yes,100.329306,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,abs,f128,fltx,fltx,fltx bl::f128,bl::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,3.391583,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,copysign,f128,fltx,fltx,fltx bl::f128,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,1.635555,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,fabs,f128,fltx,fltx,fltx bl::f128,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,3.421861,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,fdim,f128,fltx,fltx,fltx bl::f128,bl::fdim,8197,137.996123973,inf,106.227061,2,2,16.227061,yes,Both,yes,4.67447,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,fma,f128,fltx,fltx,fltx bl::f128,bl::fma,12293,117.44188202,104.680325,99.5802,3,3,9.5802,yes,Both,no,6.14975,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,fmax,f128,fltx,fltx,fltx bl::f128,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,yes,1.054276,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,fmin,f128,fltx,fltx,fltx bl::f128,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,yes,1.402224,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,frexp,f128,fltx,fltx,fltx bl::f128,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,2.733057,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,ilogb,f128,fltx,fltx,fltx bl::f128,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,2.015686,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,ldexp,f128,fltx,fltx,fltx bl::f128,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,2.314134,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,logb,f128,fltx,fltx,fltx bl::f128,bl::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,2.221237,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,modf,f128,fltx,fltx,fltx bl::f128,bl::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,5.983097,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,nextafter,f128,fltx,fltx,fltx bl::f128,bl::nextafter,,,,,,,,,-,-,6.769767,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,nexttoward,f128,fltx,fltx,fltx bl::f128,bl::nexttoward,,,,,,,,,-,-,6.790324,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,recip,f128,fltx,fltx,fltx bl::f128,bl::recip,8195,109.025331959,105.925795,105.189487,2,2,15.189487,yes,Both,yes,25.573425,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,scalbln,f128,fltx,fltx,fltx bl::f128,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,2.286806,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,scalbn,f128,fltx,fltx,fltx bl::f128,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,2.287543,,38734516d65c4154a947aaeb3ae92c72 +hyperbolic,cosh,f128,fltx,fltx,fltx bl::f128,bl::cosh,8198,107.9070545,105.118172,104.370708,2,2,24.370708,yes,Both,-,107.177734,,38734516d65c4154a947aaeb3ae92c72 +hyperbolic,sinh,f128,fltx,fltx,fltx bl::f128,bl::sinh,8198,107.4201585,104.726423,103.568829,2,2,23.568829,yes,Both,yes,110.564031,,38734516d65c4154a947aaeb3ae92c72 +hyperbolic,tanh,f128,fltx,fltx,fltx bl::f128,bl::tanh,8198,109.217494,105.123457,103.771823,2,2,23.771823,yes,Both,yes,113.227143,,38734516d65c4154a947aaeb3ae92c72 +inverse_hyperbolic,acosh,f128,fltx,fltx,fltx bl::f128,bl::acosh,8200,108.031519376,104.331717,103.672888,2,2,23.672888,yes,Both,-,133.358765,,38734516d65c4154a947aaeb3ae92c72 +inverse_hyperbolic,asinh,f128,fltx,fltx,fltx bl::f128,bl::asinh,8198,108.081857,105.155677,103.818628,2,2,23.818628,yes,Both,yes,119.083659,,38734516d65c4154a947aaeb3ae92c72 +inverse_hyperbolic,atanh,f128,fltx,fltx,fltx bl::f128,bl::atanh,8204,108.11583849,104.54201,103.139045,2,2,23.139045,yes,Both,yes,130.92152,,38734516d65c4154a947aaeb3ae92c72 +io,parse,f128,fltx,fltx,fltx bl::f128,bl::parse,8195,109.936763821,107.051396,106.003381,2,2,0.003381,yes,Both,yes,226.225909,,38734516d65c4154a947aaeb3ae92c72 +io,to_chars,f128,fltx,fltx,fltx bl::f128,bl::to_chars,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,180.934374,,38734516d65c4154a947aaeb3ae92c72 +io,to_string,f128,fltx,fltx,fltx bl::f128,bl::to_string,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,213.526581,,38734516d65c4154a947aaeb3ae92c72 +logarithms,log,f128,fltx,fltx,fltx bl::f128,bl::log,12291,108.40767633,104.625423,103.727726,3,3,23.727726,yes,Both,-,114.752692,,38734516d65c4154a947aaeb3ae92c72 +logarithms,log10,f128,fltx,fltx,fltx bl::f128,bl::log10,12291,107.503050022,104.469291,103.762278,3,3,23.762278,yes,Both,-,116.713735,,38734516d65c4154a947aaeb3ae92c72 +logarithms,log1p,f128,fltx,fltx,fltx bl::f128,bl::log1p,8197,121.372231555,105.150365,103.619384,2,2,23.619384,yes,Both,yes,120.789931,,38734516d65c4154a947aaeb3ae92c72 +logarithms,log2,f128,fltx,fltx,fltx bl::f128,bl::log2,12291,108.785650924,104.550799,103.716432,3,3,23.716432,yes,Both,-,116.827228,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,affine_trig,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,174.252289,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,chained_arithmetic,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,20.069826,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,haversine,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,439.17992,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,horner_polynomial,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,85.292458,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,log_sum_exp,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,947.517197,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,mandelbrot,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,15.609773,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,matrix_vector_4x4,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,67.599529,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,newton_root,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,31.279791,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,product_sum,f128,fltx,fltx,fltx bl::f128,bl::product_sum,,,,,,,,,-,-,5.567415,,38734516d65c4154a947aaeb3ae92c72 +random,mt19937_64,f128,fltx,fltx,fltx bl::f128,bl::mt19937_64,,,,,,,,,-,-,2.069919,,38734516d65c4154a947aaeb3ae92c72 +random,normal,f128,fltx,fltx,fltx bl::f128,bl::normal,,,,,,,,,-,-,58.926334,,38734516d65c4154a947aaeb3ae92c72 +random,uniform_real,f128,fltx,fltx,fltx bl::f128,bl::uniform_real,,,,,,,,,-,-,9.03491,,38734516d65c4154a947aaeb3ae92c72 +remainders,fmod,f128,fltx,fltx,fltx bl::f128,bl::fmod,8197,inf,inf,inf,3,3,inf,yes,Both,yes,17.879577,,38734516d65c4154a947aaeb3ae92c72 +remainders,remainder,f128,fltx,fltx,fltx bl::f128,bl::remainder,4099,137.991491,inf,103.120938,1,1,13.120938,yes,Both,yes,22.46176,,38734516d65c4154a947aaeb3ae92c72 +remainders,remquo,f128,fltx,fltx,fltx bl::f128,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,22.250137,,38734516d65c4154a947aaeb3ae92c72 +roots_and_powers,cbrt,f128,fltx,fltx,fltx bl::f128,bl::cbrt,8195,108.037583359,104.101707,103.019576,2,2,13.019576,yes,Both,yes,23.969278,,38734516d65c4154a947aaeb3ae92c72 +roots_and_powers,hypot,f128,fltx,fltx,fltx bl::f128,bl::hypot,8195,122.379344938,105.55647,104.375984,2,2,14.375984,yes,Both,yes,8.769317,,38734516d65c4154a947aaeb3ae92c72 +roots_and_powers,ipow,f128,fltx,fltx,fltx bl::f128,bl::ipow,8195,106.491467825,103.779117,103.190083,2,2,13.190083,yes,Both,no,15.106392,,38734516d65c4154a947aaeb3ae92c72 +roots_and_powers,pow,f128,fltx,fltx,fltx bl::f128,bl::pow,8198,107.1276135,102.267431,101.314349,2,2,21.314349,yes,Both,yes,195.877511,,38734516d65c4154a947aaeb3ae92c72 +roots_and_powers,sqr,f128,fltx,fltx,fltx bl::f128,bl::sqr,8195,108.712755765,105.598081,105.370295,2,2,15.370295,yes,Both,yes,2.161878,,38734516d65c4154a947aaeb3ae92c72 +roots_and_powers,sqrt,f128,fltx,fltx,fltx bl::f128,bl::sqrt,16391,109.749936251,105.75112,104.669867,4,4,14.669867,yes,Both,yes,4.282252,,38734516d65c4154a947aaeb3ae92c72 +rounding,ceil,f128,fltx,fltx,fltx bl::f128,bl::ceil,4108,inf,inf,inf,1,1,inf,yes,Both,yes,3.327026,,38734516d65c4154a947aaeb3ae92c72 +rounding,floor,f128,fltx,fltx,fltx bl::f128,bl::floor,4108,inf,inf,inf,1,1,inf,yes,Both,yes,2.853442,,38734516d65c4154a947aaeb3ae92c72 +rounding,llround,f128,fltx,fltx,fltx bl::f128,bl::llround,4114,inf,inf,inf,1,1,inf,yes,-,-,4.365725,,38734516d65c4154a947aaeb3ae92c72 +rounding,lround,f128,fltx,fltx,fltx bl::f128,bl::lround,4110,inf,inf,inf,1,1,inf,yes,-,-,4.552053,,38734516d65c4154a947aaeb3ae92c72 +rounding,round,f128,fltx,fltx,fltx bl::f128,bl::round,4108,inf,inf,inf,1,1,inf,yes,Both,yes,9.965242,,38734516d65c4154a947aaeb3ae92c72 +rounding,round_decimals,f128,fltx,fltx,fltx bl::f128,bl::round_decimals,4099,110.177573,107.236356,107.022726,1,1,17.022726,yes,Both,yes,83.557129,,38734516d65c4154a947aaeb3ae92c72 +rounding,round_significant,f128,fltx,fltx,fltx bl::f128,bl::round_significant,4096,121.33026,107.34042,107.049597,1,1,17.049597,yes,Both,yes,128.565809,,38734516d65c4154a947aaeb3ae92c72 +rounding,roundeven,f128,fltx,fltx,fltx bl::f128,bl::roundeven,4108,inf,inf,inf,1,1,inf,yes,Both,yes,10.097778,,38734516d65c4154a947aaeb3ae92c72 +rounding,trunc,f128,fltx,fltx,fltx bl::f128,bl::trunc,4108,inf,inf,inf,1,1,inf,yes,Both,yes,3.966581,,38734516d65c4154a947aaeb3ae92c72 +special_functions,erf,f128,fltx,fltx,fltx bl::f128,bl::erf,8198,110.8988915,104.260004,103.47754,2,2,23.47754,yes,Both,yes,565.193966,,38734516d65c4154a947aaeb3ae92c72 +special_functions,erfc,f128,fltx,fltx,fltx bl::f128,bl::erfc,8198,107.1893035,100.123363,99.167646,2,2,19.167646,yes,Both,-,560.361494,,38734516d65c4154a947aaeb3ae92c72 +special_functions,lgamma,f128,fltx,fltx,fltx bl::f128,bl::lgamma,4099,107.30017,103.199673,102.168212,1,1,22.168212,yes,Both,-,526.921107,,38734516d65c4154a947aaeb3ae92c72 +special_functions,tgamma,f128,fltx,fltx,fltx bl::f128,bl::tgamma,4099,105.565044,98.349598,97.317514,1,1,17.317514,yes,Both,-,473.56404,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,acos,f128,fltx,fltx,fltx bl::f128,bl::acos,8204,106.470630111,95.825547,81.584963,2,2,1.584963,yes,Both,-,162.599534,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,asin,f128,fltx,fltx,fltx bl::f128,bl::asin,8204,108.580073592,105.096123,104.081582,2,2,24.081582,yes,Both,yes,157.613571,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,atan,f128,fltx,fltx,fltx bl::f128,bl::atan,8198,108.728555,105.953468,104.92639,2,2,24.92639,yes,Both,yes,116.881975,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,atan2,f128,fltx,fltx,fltx bl::f128,bl::atan2,8206,108.727143624,105.799026,104.520841,3,3,24.520841,yes,Both,yes,118.184989,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,cos,f128,fltx,fltx,fltx bl::f128,bl::cos,12524,113.520718505,100.266388,99.209588,3,3,19.209588,yes,Both,-,86.450195,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,sin,f128,fltx,fltx,fltx bl::f128,bl::sin,12524,110.553532277,98.777563,98.619216,3,3,18.619216,yes,Both,yes,87.1875,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,sincos,f128,fltx,fltx,fltx bl::f128,bl::sincos,,,,,,,,,-,-,93.025527,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,tan,f128,fltx,fltx,fltx bl::f128,bl::tan,12524,106.705038797,98.776698,98.614153,3,3,23.614153,yes,Both,yes,93.185147,,38734516d65c4154a947aaeb3ae92c72 diff --git a/validation/metrics/data/windows/x86_64/MSVC_f256.csv b/validation/metrics/data/windows/x86_64/MSVC_f256.csv new file mode 100644 index 0000000..3d42646 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/MSVC_f256.csv @@ -0,0 +1,294 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f256,fltx,fltx,fltx bl::f256,bl::add,4096,227.373862582,215.583815,215.297307,2,2,25.297307,yes,Both,no,10.68201,,ff1951e869c9480085d12c8d2f11f164 +arithmetic,add,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator+,4096,225.042084562,214.179406,214.011982,2,2,24.011982,yes,Both,yes,49.575195,4.640999,ff1951e869c9480085d12c8d2f11f164 +arithmetic,add,f256,qdpp,qdreal,qdpp qd_real,qdpp operator+,4096,227.373636161,215.583815,215.297307,2,2,25.297307,yes,NaN,no,23.446045,2.194909,ff1951e869c9480085d12c8d2f11f164 +arithmetic,add,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,4096,253.089090895,237.252454,237.007687,2,2,47.007687,yes,No,no,407.944336,38.189847,ff1951e869c9480085d12c8d2f11f164 +arithmetic,divide,f256,fltx,fltx,fltx bl::f256,bl::divide,4100,219.220520548,215.287455,214.762066,2,2,24.762066,yes,Both,yes,80.729167,,ff1951e869c9480085d12c8d2f11f164 +arithmetic,divide,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,4100,215.996290938,214.166285,214.002285,2,2,24.002285,yes,Both,yes,118.088379,1.462772,ff1951e869c9480085d12c8d2f11f164 +arithmetic,divide,f256,qdpp,qdreal,qdpp qd_real,qdpp operator/,4100,218.684214784,173.30748,173.30748,1,2,-16.69252,no,NaN,no,265.427246,3.287873,ff1951e869c9480085d12c8d2f11f164 +arithmetic,divide,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,4100,239.032664965,237.154132,237.0253,2,2,47.0253,yes,No,no,723.69873,8.964526,ff1951e869c9480085d12c8d2f11f164 +arithmetic,multiply,f256,fltx,fltx,fltx bl::f256,bl::multiply,4100,220.046096951,215.608028,215.221541,2,2,25.221541,yes,Both,yes,18.814872,,ff1951e869c9480085d12c8d2f11f164 +arithmetic,multiply,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator*,4100,215.992910439,214.146637,214.012662,2,2,24.012662,yes,Both,yes,64.522705,3.429346,ff1951e869c9480085d12c8d2f11f164 +arithmetic,multiply,f256,qdpp,qdreal,qdpp qd_real,qdpp operator*,4100,220.046096951,215.608028,215.221541,2,2,25.221541,yes,Both,no,19.555886,1.039385,ff1951e869c9480085d12c8d2f11f164 +arithmetic,multiply,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,4100,239.007243732,237.076391,237.006898,2,2,47.006898,yes,No,no,355.053711,18.870908,ff1951e869c9480085d12c8d2f11f164 +arithmetic,subtract,f256,fltx,fltx,fltx bl::f256,bl::subtract,4096,227.447841785,215.602949,215.220788,2,2,25.220788,yes,Both,no,10.664854,,ff1951e869c9480085d12c8d2f11f164 +arithmetic,subtract,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator-,4096,225.206569338,214.220914,214.046715,2,2,24.046715,yes,Both,yes,49.455566,4.637247,ff1951e869c9480085d12c8d2f11f164 +arithmetic,subtract,f256,qdpp,qdreal,qdpp qd_real,qdpp operator-,4096,227.446239681,215.602917,214.95904,2,2,24.95904,yes,NaN,no,25.208062,2.363657,ff1951e869c9480085d12c8d2f11f164 +arithmetic,subtract,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,4096,253.263648725,237.248925,237.000122,2,2,47.000122,yes,No,no,407.089844,38.171158,ff1951e869c9480085d12c8d2f11f164 +comparisons,equal,f256,fltx,fltx,fltx bl::f256,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.776943,,ff1951e869c9480085d12c8d2f11f164 +comparisons,equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.497116,8.362413,ff1951e869c9480085d12c8d2f11f164 +comparisons,equal,f256,qdpp,qdreal,qdpp qd_real,qdpp operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.045025,1.345048,ff1951e869c9480085d12c8d2f11f164 +comparisons,equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,210.803223,271.324018,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater,f256,fltx,fltx,fltx bl::f256,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.078716,,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.670473,3.208939,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater,f256,qdpp,qdreal,qdpp qd_real,qdpp operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.982015,0.95348,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,211.523438,101.756772,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater_equal,f256,fltx,fltx,fltx bl::f256,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.087081,,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater_equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.479899,3.104766,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater_equal,f256,qdpp,qdreal,qdpp qd_real,qdpp operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.911961,0.916094,ff1951e869c9480085d12c8d2f11f164 +comparisons,greater_equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,211.154785,101.172295,ff1951e869c9480085d12c8d2f11f164 +comparisons,less,f256,fltx,fltx,fltx bl::f256,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.106333,,ff1951e869c9480085d12c8d2f11f164 +comparisons,less,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.517075,3.094038,ff1951e869c9480085d12c8d2f11f164 +comparisons,less,f256,qdpp,qdreal,qdpp qd_real,qdpp operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.90813,0.905901,ff1951e869c9480085d12c8d2f11f164 +comparisons,less,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,211.179199,100.259169,ff1951e869c9480085d12c8d2f11f164 +comparisons,less_equal,f256,fltx,fltx,fltx bl::f256,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.058219,,ff1951e869c9480085d12c8d2f11f164 +comparisons,less_equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.497803,3.157002,ff1951e869c9480085d12c8d2f11f164 +comparisons,less_equal,f256,qdpp,qdreal,qdpp qd_real,qdpp operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.928641,0.937043,ff1951e869c9480085d12c8d2f11f164 +comparisons,less_equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,211.26709,102.645568,ff1951e869c9480085d12c8d2f11f164 +comparisons,not_equal,f256,fltx,fltx,fltx bl::f256,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.778757,,ff1951e869c9480085d12c8d2f11f164 +comparisons,not_equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.469498,8.30747,ff1951e869c9480085d12c8d2f11f164 +comparisons,not_equal,f256,qdpp,qdreal,qdpp qd_real,qdpp operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.100451,1.413087,ff1951e869c9480085d12c8d2f11f164 +comparisons,not_equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,210.705566,270.566636,ff1951e869c9480085d12c8d2f11f164 +exponentials,exp,f256,fltx,fltx,fltx bl::f256,bl::exp,8198,216.760981,210.609597,209.17081,2,2,29.17081,yes,Both,-,980.414497,,ff1951e869c9480085d12c8d2f11f164 +exponentials,exp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,8198,215.9253875,214.166296,214.006279,2,2,34.006279,yes,Both,-,1258.705357,1.28385,ff1951e869c9480085d12c8d2f11f164 +exponentials,exp,f256,qdpp,qdreal,qdpp qd_real,qdpp exp,8198,216.587915,210.542771,209.17081,2,2,29.17081,yes,Both,-,1981.757812,2.021347,ff1951e869c9480085d12c8d2f11f164 +exponentials,exp,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,8198,238.9537585,237.149815,237.00489,2,2,57.00489,yes,No,-,11230.957031,11.455315,ff1951e869c9480085d12c8d2f11f164 +exponentials,exp2,f256,fltx,fltx,fltx bl::f256,bl::exp2,8198,218.030361,214.973213,214.202868,2,2,34.202868,yes,Both,-,831.171875,,ff1951e869c9480085d12c8d2f11f164 +exponentials,exp2,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,8198,215.974328,214.175518,214.035382,2,2,34.035382,yes,Both,-,1483.365885,1.784668,ff1951e869c9480085d12c8d2f11f164 +exponentials,exp2,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,8198,238.9480035,237.174822,237.026426,2,2,57.026426,yes,No,-,31826.074219,38.290605,ff1951e869c9480085d12c8d2f11f164 +exponentials,expm1,f256,fltx,fltx,fltx bl::f256,bl::expm1,8197,227.154452503,207.540568,207,2,2,27,yes,Both,yes,987.109375,,ff1951e869c9480085d12c8d2f11f164 +exponentials,expm1,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,8197,227.498351143,214.242848,214.018319,2,2,34.018319,yes,Both,yes,1395.61942,1.413845,ff1951e869c9480085d12c8d2f11f164 +exponentials,expm1,f256,qdpp,qdreal,qdpp qd_real,qdpp expm1,8197,226.789374223,203.377948,0,1,2,-180,no,NaN,no,1993.925781,2.019964,ff1951e869c9480085d12c8d2f11f164 +exponentials,expm1,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,8197,250.1283524,237.239921,237.036552,2,2,57.036552,yes,No,no,12076.367188,12.234072,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,abs,f256,fltx,fltx,fltx bl::f256,bl::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,2.642708,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,abs,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,38.546143,14.585849,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,abs,f256,qdpp,qdreal,qdpp qd_real,qdpp abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,1.96985,0.745391,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,abs,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,8196,inf,inf,inf,2,2,inf,yes,No,yes,5.95837,2.254646,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,copysign,f256,fltx,fltx,fltx bl::f256,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,0.863137,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,copysign,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,67.51709,78.222872,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,copysign,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::copysign,4099,inf,inf,inf,1,1,inf,yes,No,no,12.214661,14.151467,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fabs,f256,fltx,fltx,fltx bl::f256,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,2.651716,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fabs,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,38.415527,14.487045,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fabs,f256,qdpp,qdreal,qdpp qd_real,qdpp fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,1.963158,0.740335,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fabs,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,4099,inf,inf,inf,1,1,inf,yes,No,yes,5.936831,2.238864,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fdim,f256,fltx,fltx,fltx bl::f256,bl::fdim,8197,inf,inf,inf,2,2,inf,yes,Both,yes,8.222961,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fdim,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,8197,243.650598918,214.093805,214.003121,2,2,24.003121,yes,No,yes,43.814453,5.328306,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fdim,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,8197,inf,inf,inf,2,2,inf,yes,No,yes,819.091797,99.610317,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fma,f256,fltx,fltx,fltx bl::f256,bl::fma,12293,229.715460613,215.654212,215.096656,3,3,25.096656,yes,Both,no,24.559191,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fma,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,12293,228.257765839,214.164686,214.017731,3,3,24.017731,yes,Both,yes,84.177246,3.427525,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fma,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,12293,251.060726483,237.157442,237.018361,3,3,47.018361,yes,No,no,616.706543,25.111029,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fmax,f256,fltx,fltx,fltx bl::f256,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,yes,3.649925,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fmax,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,no,45.259766,12.400191,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fmax,f256,qdpp,qdreal,qdpp qd_real,qdpp max,8195,inf,inf,inf,2,2,inf,yes,Inf,yes,1.435154,0.393201,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fmax,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,8195,inf,inf,inf,2,2,inf,yes,No,no,321.394043,88.054978,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fmin,f256,fltx,fltx,fltx bl::f256,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,yes,3.406242,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fmin,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,no,45.634766,13.397395,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fmin,f256,qdpp,qdreal,qdpp qd_real,qdpp min,8195,inf,inf,inf,2,2,inf,yes,Inf,no,1.674989,0.491741,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,fmin,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,8195,inf,inf,inf,2,2,inf,yes,No,no,321.396484,94.355162,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,frexp,f256,fltx,fltx,fltx bl::f256,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,7.27916,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,frexp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,67.567139,9.282272,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,frexp,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,8196,inf,inf,inf,2,2,inf,yes,No,no,652.392578,89.624709,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,ilogb,f256,fltx,fltx,fltx bl::f256,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.621009,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,ilogb,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,33.586775,20.719674,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,ilogb,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,103.430176,63.806053,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,ldexp,f256,fltx,fltx,fltx bl::f256,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,3.940501,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,ldexp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,39.772542,10.093269,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,ldexp,f256,qdpp,qdreal,qdpp qd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,8.623255,2.188365,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,ldexp,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::ldexp,4096,inf,inf,inf,1,1,inf,yes,No,no,188.140869,47.745412,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,logb,f256,fltx,fltx,fltx bl::f256,bl::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,2.237106,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,logb,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,75.667318,33.823758,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,modf,f256,fltx,fltx,fltx bl::f256,bl::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,18.387118,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,modf,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,177.680664,9.663323,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,modf,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,8195,inf,inf,inf,2,2,inf,yes,No,no,845.15625,45.964584,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,nextafter,f256,fltx,fltx,fltx bl::f256,bl::nextafter,,,,,,,,,-,-,6.867414,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,nextafter,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter,,,,,,,,,-,-,504.421387,73.451429,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,nextafter,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter,,,,,,,,,-,-,558.07373,81.264027,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,nexttoward,f256,fltx,fltx,fltx bl::f256,bl::nexttoward,,,,,,,,,-,-,6.861614,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,nexttoward,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter (same type),,,,,,,,,-,-,507.907715,74.021606,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,nexttoward,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter (same type),,,,,,,,,-,-,558.093262,81.335562,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,recip,f256,fltx,fltx,fltx bl::f256,bl::recip,8195,217.92444534,215.148048,214.625136,2,2,24.625136,yes,Both,yes,74.495443,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,recip,f256,qdpp,qdreal,qdpp qd_real,qdpp inv,8195,217.927920075,215.148048,214.625136,2,2,24.625136,yes,NaN,no,256.540256,3.443704,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,scalbln,f256,fltx,fltx,fltx bl::f256,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,3.943422,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,scalbln,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,40.113932,10.172367,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,scalbln,f256,qdpp,qdreal,qdpp qd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,8.609957,2.183372,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,scalbn,f256,fltx,fltx,fltx bl::f256,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,3.951307,,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,scalbn,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,40.130208,10.156185,ff1951e869c9480085d12c8d2f11f164 +floating_point_utilities,scalbn,f256,qdpp,qdreal,qdpp qd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,8.604838,2.177719,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,cosh,f256,fltx,fltx,fltx bl::f256,bl::cosh,8198,217.5106305,214.737937,214.159072,2,2,34.159072,yes,Both,-,1212.472098,,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,cosh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,8198,215.916289,214.168922,214.000831,2,2,34.000831,yes,Both,-,1459.244792,1.203529,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,cosh,f256,qdpp,qdreal,qdpp qd_real,qdpp cosh,8198,217.2651715,214.536693,213.837789,2,2,33.837789,yes,NaN,-,2325.585938,1.918053,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,cosh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,8198,238.9208895,237.131226,237.021921,2,2,57.021921,yes,No,-,11962.402344,9.866126,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,sinh,f256,fltx,fltx,fltx bl::f256,bl::sinh,8198,217.022625,214.597984,213.844482,2,2,33.844482,yes,Both,yes,1213.071987,,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,sinh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,8198,215.9712865,214.162104,214.011597,2,2,34.011597,yes,Both,yes,1511.409505,1.245936,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,sinh,f256,qdpp,qdreal,qdpp qd_real,qdpp sinh,8198,216.7792535,214.156966,212.946933,2,2,32.946933,yes,NaN,no,2327.978516,1.919077,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,sinh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,8198,238.9375005,237.151916,237.012513,2,2,57.012513,yes,No,no,12967.675781,10.689947,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,tanh,f256,fltx,fltx,fltx bl::f256,bl::tanh,8198,219.128554,215.222392,214.042672,2,2,34.042672,yes,Both,yes,1196.428571,,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,tanh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,8198,216.1972415,214.274158,214.03864,2,2,34.03864,yes,Both,yes,1527.750651,1.276926,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,tanh,f256,qdpp,qdreal,qdpp qd_real,qdpp tanh,8198,218.9438785,214.599863,212.926362,2,2,32.926362,yes,Both,no,2331.079102,1.948365,ff1951e869c9480085d12c8d2f11f164 +hyperbolic,tanh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,8198,239.191819,237.196358,237.059834,2,2,57.059834,yes,Inf,no,12752.734375,10.659002,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,acosh,f256,fltx,fltx,fltx bl::f256,bl::acosh,8200,217.720725959,214.442677,213.709421,2,2,33.709421,yes,Both,-,2348.803711,,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,acosh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,8200,215.92850099,214.197277,214.011139,2,2,34.011139,yes,Both,-,3722.298177,1.584763,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,acosh,f256,qdpp,qdreal,qdpp qd_real,qdpp acosh,8200,216.978273731,213.580529,0,0,2,-180,no,NaN,-,6784.130859,2.888335,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,acosh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,8200,238.873033639,237.183996,237.009868,2,2,57.009868,yes,No,-,58647.558594,24.969119,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,asinh,f256,fltx,fltx,fltx bl::f256,bl::asinh,8198,217.1921705,213.881562,212.956798,2,2,32.956798,yes,Both,yes,2549.755859,,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,asinh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,8198,215.877188,214.126921,214.013004,2,2,34.013004,yes,Both,yes,6188.964844,2.427277,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,asinh,f256,qdpp,qdreal,qdpp qd_real,qdpp asinh,8198,216.858092,213.748418,0,1,2,-180,no,NaN,no,6325.830078,2.480955,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,asinh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,8198,238.8906575,237.158686,237.026506,2,2,57.026506,yes,No,no,62471.777344,24.501082,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,atanh,f256,fltx,fltx,fltx bl::f256,bl::atanh,8204,218.285376518,214.164921,213.300563,2,2,33.300563,yes,Both,yes,2158.374023,,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,atanh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,8204,216.191466866,214.156626,214.025325,2,2,34.025325,yes,Both,yes,2931.901042,1.358384,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,atanh,f256,qdpp,qdreal,qdpp qd_real,qdpp atanh,8204,217.671399672,213.75435,0,1,2,-180,no,Both,no,6639.257812,3.076046,ff1951e869c9480085d12c8d2f11f164 +inverse_hyperbolic,atanh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,8204,239.146882959,237.181152,237.021503,2,2,57.021503,yes,No,no,17703.613281,8.202292,ff1951e869c9480085d12c8d2f11f164 +io,parse,f256,fltx,fltx,fltx bl::f256,bl::parse,8195,219.729492211,212.275332,212.017147,2,2,0.017147,yes,Both,yes,415.457429,,ff1951e869c9480085d12c8d2f11f164 +io,parse,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,8195,215.952962068,214.158596,214.005374,2,2,2.005374,yes,Both,yes,371.127104,0.893298,ff1951e869c9480085d12c8d2f11f164 +io,parse,f256,qdpp,qdreal,qdpp qd_real,qdpp read,8195,200.912792804,0,0,1,2,-212,no,NaN,yes,3518.345938,8.468608,ff1951e869c9480085d12c8d2f11f164 +io,parse,f256,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,8195,238.941820354,237.169709,237.016125,2,2,25.016125,yes,No,no,38309.246158,92.209799,ff1951e869c9480085d12c8d2f11f164 +io,to_chars,f256,fltx,fltx,fltx bl::f256,bl::to_chars,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,316.132855,,ff1951e869c9480085d12c8d2f11f164 +io,to_chars,f256,qdpp,qdreal,qdpp qd_real,qdpp write,8195,218.810795964,211.111082,209.060322,2,2,19.060322,yes,Both,no,3909.197365,12.365679,ff1951e869c9480085d12c8d2f11f164 +io,to_string,f256,fltx,fltx,fltx bl::f256,bl::to_string,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,346.795386,,ff1951e869c9480085d12c8d2f11f164 +io,to_string,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,8195,220.316769484,217.209596,216.955609,2,2,26.955609,yes,Both,yes,489.158331,1.41051,ff1951e869c9480085d12c8d2f11f164 +io,to_string,f256,qdpp,qdreal,qdpp qd_real,qdpp to_string,8195,218.810795964,211.111082,209.060322,2,2,19.060322,yes,Both,no,3918.07758,11.297952,ff1951e869c9480085d12c8d2f11f164 +io,to_string,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,8195,216.91531064,213.966069,213.625754,2,2,23.625754,yes,Both,yes,45010.661137,129.790254,ff1951e869c9480085d12c8d2f11f164 +logarithms,log,f256,fltx,fltx,fltx bl::f256,bl::log,12291,217.776072084,214.333783,213.252927,3,3,33.252927,yes,Both,-,1662.636719,,ff1951e869c9480085d12c8d2f11f164 +logarithms,log,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,12291,215.87148618,214.161037,214.022652,3,3,34.022652,yes,Both,-,2383.544922,1.433593,ff1951e869c9480085d12c8d2f11f164 +logarithms,log,f256,qdpp,qdreal,qdpp qd_real,qdpp log,12291,205.251158749,62.810233,62.111566,2,3,-117.888434,no,NaN,-,6291.845703,3.784258,ff1951e869c9480085d12c8d2f11f164 +logarithms,log,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log,12291,238.863547738,237.168312,237.020732,3,3,57.020732,yes,No,-,14826.171875,8.917265,ff1951e869c9480085d12c8d2f11f164 +logarithms,log10,f256,fltx,fltx,fltx bl::f256,bl::log10,12291,217.44848007,214.245682,213.257193,3,3,33.257193,yes,Both,-,1686.992188,,ff1951e869c9480085d12c8d2f11f164 +logarithms,log10,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,12291,215.897541443,214.144149,214.004904,3,3,34.004904,yes,Both,-,4590.478516,2.721102,ff1951e869c9480085d12c8d2f11f164 +logarithms,log10,f256,qdpp,qdreal,qdpp qd_real,qdpp log10,12291,203.187461519,62.810233,62.111566,2,3,-117.888434,no,NaN,-,6677.392578,3.958164,ff1951e869c9480085d12c8d2f11f164 +logarithms,log10,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,12291,238.843380382,237.128968,237.019945,3,3,57.019945,yes,No,-,14941.992188,8.857179,ff1951e869c9480085d12c8d2f11f164 +logarithms,log1p,f256,fltx,fltx,fltx bl::f256,bl::log1p,8197,226.82219119,207.415037,207,2,2,27,yes,Both,yes,1691.621094,,ff1951e869c9480085d12c8d2f11f164 +logarithms,log1p,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,8197,227.392838761,214.139415,214.010728,2,2,34.010728,yes,Both,yes,2443.774414,1.444635,ff1951e869c9480085d12c8d2f11f164 +logarithms,log1p,f256,qdpp,qdreal,qdpp qd_real,qdpp log1p,8197,226.390836655,203.445411,203,2,2,23,yes,NaN,no,6246.679688,3.692718,ff1951e869c9480085d12c8d2f11f164 +logarithms,log1p,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,8197,250.055921912,237.123379,237.006206,2,2,57.006206,yes,No,no,18046.972656,10.668449,ff1951e869c9480085d12c8d2f11f164 +logarithms,log2,f256,fltx,fltx,fltx bl::f256,bl::log2,12291,218.61302666,214.28538,213.192358,3,3,33.192358,yes,Both,-,1672.734375,,ff1951e869c9480085d12c8d2f11f164 +logarithms,log2,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,12291,217.32440772,214.194225,214.010454,3,3,34.010454,yes,Both,-,2624.707031,1.569112,ff1951e869c9480085d12c8d2f11f164 +logarithms,log2,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,12291,240.319993979,237.187476,237.019864,3,3,57.019864,yes,No,-,14805.957031,8.85135,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,affine_trig,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,1809.699675,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,affine_trig,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,2349.258475,1.298148,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,affine_trig,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,3698.125,2.043502,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,affine_trig,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,28640.625,15.826176,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,chained_arithmetic,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,155.188347,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,chained_arithmetic,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,315.7943,2.03491,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,chained_arithmetic,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,352.8125,2.273447,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,chained_arithmetic,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,2783.244681,17.934624,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,haversine,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,4666.861702,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,haversine,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,10237.5,2.193658,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,haversine,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,15800,3.385573,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,haversine,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,81812.5,17.530517,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,horner_polynomial,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,395.633129,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,horner_polynomial,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,772.628348,1.952891,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,horner_polynomial,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,769.220526,1.944277,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,horner_polynomial,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,10118.75,25.576094,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,log_sum_exp,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,8562.5,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,log_sum_exp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,10950,1.278832,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,log_sum_exp,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,17637.5,2.059854,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,log_sum_exp,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,113437.5,13.248175,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,mandelbrot,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,124.059383,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,mandelbrot,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,257.151442,2.072809,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,mandelbrot,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,197.651734,1.593203,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,mandelbrot,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,2816.178385,22.700245,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,matrix_vector_4x4,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,557.157258,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,matrix_vector_4x4,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,964.973958,1.73196,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,matrix_vector_4x4,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,893.158482,1.603064,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,matrix_vector_4x4,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,12346.875,22.160485,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,newton_root,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,218.119919,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,newton_root,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,318.850954,1.461815,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,newton_root,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,443.630151,2.033882,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,newton_root,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,3379.513889,15.493834,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,product_sum,f256,fltx,fltx,fltx bl::f256,bl::product_sum,,,,,,,,,-,-,42.869016,,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,product_sum,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same expression,,,,,,,,,-,-,136.309814,3.179681,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,product_sum,f256,qdpp,qdreal,qdpp qd_real,same expression,,,,,,,,,-,-,78.630859,1.834212,ff1951e869c9480085d12c8d2f11f164 +mixed_workloads,product_sum,f256,tlfloat,tloct,TLFloat Octuple,same expression,,,,,,,,,-,-,1112.561035,25.952568,ff1951e869c9480085d12c8d2f11f164 +random,mt19937_64,f256,fltx,fltx,fltx bl::f256,bl::mt19937_64,,,,,,,,,-,-,2.1342,,ff1951e869c9480085d12c8d2f11f164 +random,normal,f256,fltx,fltx,fltx bl::f256,bl::normal,,,,,,,,,-,-,265.448944,,ff1951e869c9480085d12c8d2f11f164 +random,uniform_real,f256,fltx,fltx,fltx bl::f256,bl::uniform_real,,,,,,,,,-,-,19.658358,,ff1951e869c9480085d12c8d2f11f164 +random,uniform_real,f256,qdpp,qdreal,qdpp qd_real,qdpp qdrand,,,,,,,,,-,-,38.235089,1.944979,ff1951e869c9480085d12c8d2f11f164 +remainders,fmod,f256,fltx,fltx,fltx bl::f256,bl::fmod,8199,243.996795284,217.724535,217.724535,3,3,27.724535,yes,Both,yes,67.9641,,ff1951e869c9480085d12c8d2f11f164 +remainders,fmod,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,8199,inf,inf,inf,3,3,inf,yes,Both,yes,196.747622,2.894876,ff1951e869c9480085d12c8d2f11f164 +remainders,fmod,f256,qdpp,qdreal,qdpp qd_real,qdpp fmod,8199,199.825156745,0,0,1,3,-190,no,NaN,no,330.528846,4.863286,ff1951e869c9480085d12c8d2f11f164 +remainders,fmod,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,8199,inf,inf,inf,3,3,inf,yes,No,no,1572.167969,23.13233,ff1951e869c9480085d12c8d2f11f164 +remainders,remainder,f256,fltx,fltx,fltx bl::f256,bl::remainder,4099,inf,inf,inf,1,1,inf,yes,Both,yes,98.269931,,ff1951e869c9480085d12c8d2f11f164 +remainders,remainder,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remainder,4099,inf,inf,inf,1,1,inf,yes,Both,yes,235.955489,2.401096,ff1951e869c9480085d12c8d2f11f164 +remainders,remainder,f256,qdpp,qdreal,qdpp qd_real,qdpp drem,4099,241.943486,210.446918,205.498921,1,1,15.498921,yes,NaN,no,333.379657,3.392489,ff1951e869c9480085d12c8d2f11f164 +remainders,remainder,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::remainder,4099,inf,inf,inf,1,1,inf,yes,No,no,1714.746094,17.449347,ff1951e869c9480085d12c8d2f11f164 +remainders,remquo,f256,fltx,fltx,fltx bl::f256,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,97.306685,,ff1951e869c9480085d12c8d2f11f164 +remainders,remquo,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,264.579504,2.719027,ff1951e869c9480085d12c8d2f11f164 +remainders,remquo,f256,qdpp,qdreal,qdpp qd_real,qdpp divrem,4099,inf,inf,inf,1,1,inf,yes,NaN,no,332.654748,3.418622,ff1951e869c9480085d12c8d2f11f164 +remainders,remquo,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::remquo,4099,inf,inf,inf,1,1,inf,yes,No,no,1751.822917,18.00311,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,cbrt,f256,fltx,fltx,fltx bl::f256,bl::cbrt,8195,219.286640743,215.522484,215.009723,2,2,25.009723,yes,Both,yes,344.021739,,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,cbrt,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,8195,216.025881329,214.197213,214.058038,2,2,24.058038,yes,Both,yes,426.130022,1.238672,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,cbrt,f256,qdpp,qdreal,qdpp qd_real,qdpp nroot,8195,217.239688891,194.539411,177.132937,1,2,-12.867063,no,NaN,no,1148.095703,3.337277,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,cbrt,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,8195,239.048520642,237.214089,237.01811,2,2,47.01811,yes,No,no,8044.628906,23.384071,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,hypot,f256,fltx,fltx,fltx bl::f256,bl::hypot,8195,229.93090326,215.484839,213.870154,2,2,23.870154,yes,Both,yes,172.300212,,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,hypot,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,8195,228.685697033,213.212997,212.858237,2,2,22.858237,yes,Both,no,461.186523,2.676645,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,hypot,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,8195,251.869264053,237.145904,237.032531,2,2,47.032531,yes,No,yes,1318.981934,7.655138,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,ipow,f256,fltx,fltx,fltx bl::f256,bl::ipow,8195,217.175762701,214.383216,213.656994,2,2,23.656994,yes,Both,no,111.141807,,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,ipow,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",8195,215.968901433,214.179832,214.011863,2,2,24.011863,yes,Both,yes,171.844482,1.546173,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,ipow,f256,qdpp,qdreal,qdpp qd_real,qdpp npwr,8195,215.047018926,212.773859,212.051585,2,2,22.051585,yes,Both,no,114.941406,1.034187,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,pow,f256,fltx,fltx,fltx bl::f256,bl::pow,8198,216.837164,212.047897,211.143117,2,2,31.143117,yes,Both,yes,2498.291016,,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,pow,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,8198,215.92977,214.172189,214.02831,2,2,34.02831,yes,Both,yes,3035.839844,1.215167,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,pow,f256,qdpp,qdreal,qdpp qd_real,qdpp pow,8198,216.363994,211.658837,210.563451,2,2,30.563451,yes,No,no,6758.886719,2.705404,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,pow,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,8198,238.924537,237.150631,237.009078,2,2,57.009078,yes,No,no,63641.015625,25.47382,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,sqr,f256,fltx,fltx,fltx bl::f256,bl::sqr,8195,220.120699598,216.278909,215.25119,2,2,25.25119,yes,Both,yes,18.253729,,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,sqr,f256,qdpp,qdreal,qdpp qd_real,qdpp sqr,8195,216.730548985,214.989743,214.72076,2,2,24.72076,yes,Both,yes,12.512837,0.685495,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,sqrt,f256,fltx,fltx,fltx bl::f256,bl::sqrt,16391,217.892674432,211.30757,209.568118,4,4,19.568118,yes,Both,yes,122.967529,,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,sqrt,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,16391,216.210876714,214.147252,214.030797,4,4,24.030797,yes,Both,yes,136.289062,1.108334,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,sqrt,f256,qdpp,qdreal,qdpp qd_real,qdpp sqrt,16391,152.311603682,0,0,1,4,-190,no,NaN,no,442.270508,3.596645,ff1951e869c9480085d12c8d2f11f164 +roots_and_powers,sqrt,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,16391,239.156039966,237.129126,237.014769,4,4,47.014769,yes,No,no,1343.259277,10.923691,ff1951e869c9480085d12c8d2f11f164 +rounding,ceil,f256,fltx,fltx,fltx bl::f256,bl::ceil,4110,inf,inf,inf,1,1,inf,yes,Both,yes,4.883401,,ff1951e869c9480085d12c8d2f11f164 +rounding,ceil,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ceil,4110,inf,inf,inf,1,1,inf,yes,Both,yes,43.532715,8.914426,ff1951e869c9480085d12c8d2f11f164 +rounding,ceil,f256,qdpp,qdreal,qdpp qd_real,qdpp ceil,4110,inf,inf,inf,1,1,inf,yes,Both,no,2.240415,0.458782,ff1951e869c9480085d12c8d2f11f164 +rounding,ceil,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::ceil,4110,inf,inf,inf,1,1,inf,yes,No,no,158.969727,32.553078,ff1951e869c9480085d12c8d2f11f164 +rounding,floor,f256,fltx,fltx,fltx bl::f256,bl::floor,4110,inf,inf,inf,1,1,inf,yes,Both,yes,4.899373,,ff1951e869c9480085d12c8d2f11f164 +rounding,floor,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::floor,4110,inf,inf,inf,1,1,inf,yes,Both,yes,44.061035,8.993199,ff1951e869c9480085d12c8d2f11f164 +rounding,floor,f256,qdpp,qdreal,qdpp qd_real,qdpp floor,4110,inf,inf,inf,1,1,inf,yes,Both,no,2.207721,0.450613,ff1951e869c9480085d12c8d2f11f164 +rounding,floor,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::floor,4110,inf,inf,inf,1,1,inf,yes,No,no,159.675293,32.590966,ff1951e869c9480085d12c8d2f11f164 +rounding,llround,f256,fltx,fltx,fltx bl::f256,bl::llround,4116,inf,inf,inf,1,1,inf,yes,-,-,6.775219,,ff1951e869c9480085d12c8d2f11f164 +rounding,llround,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::llround,4116,inf,inf,inf,1,1,inf,yes,-,-,216.196289,31.909862,ff1951e869c9480085d12c8d2f11f164 +rounding,lround,f256,fltx,fltx,fltx bl::f256,bl::lround,4112,inf,inf,inf,1,1,inf,yes,-,-,7.207559,,ff1951e869c9480085d12c8d2f11f164 +rounding,lround,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lround,4112,inf,inf,inf,1,1,inf,yes,-,-,124.829102,17.319193,ff1951e869c9480085d12c8d2f11f164 +rounding,round,f256,fltx,fltx,fltx bl::f256,bl::round,4110,inf,inf,inf,1,1,inf,yes,Both,yes,12.893636,,ff1951e869c9480085d12c8d2f11f164 +rounding,round,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::round,4110,inf,inf,inf,1,1,inf,yes,Both,yes,83.55306,6.480178,ff1951e869c9480085d12c8d2f11f164 +rounding,round,f256,qdpp,qdreal,qdpp qd_real,qdpp round,4110,229.692457,0,0,0,1,-180,no,Both,no,5.578578,0.432661,ff1951e869c9480085d12c8d2f11f164 +rounding,round,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::round,4110,inf,inf,inf,1,1,inf,yes,No,no,175.554199,13.61557,ff1951e869c9480085d12c8d2f11f164 +rounding,round_decimals,f256,fltx,fltx,fltx bl::f256,bl::round_decimals,4099,220.044956,215.606687,215.330917,1,1,25.330917,yes,Both,yes,129.347229,,ff1951e869c9480085d12c8d2f11f164 +rounding,round_significant,f256,fltx,fltx,fltx bl::f256,bl::round_significant,4096,229.647449,215.594292,215.06782,1,1,25.06782,yes,Both,yes,194.191673,,ff1951e869c9480085d12c8d2f11f164 +rounding,roundeven,f256,fltx,fltx,fltx bl::f256,bl::roundeven,4110,inf,inf,inf,1,1,inf,yes,Both,yes,9.115397,,ff1951e869c9480085d12c8d2f11f164 +rounding,roundeven,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::rint,4110,inf,inf,inf,1,1,inf,yes,No,no,199.523926,21.888671,ff1951e869c9480085d12c8d2f11f164 +rounding,trunc,f256,fltx,fltx,fltx bl::f256,bl::trunc,4110,inf,inf,inf,1,1,inf,yes,Both,yes,6.774944,,ff1951e869c9480085d12c8d2f11f164 +rounding,trunc,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::trunc,4110,inf,inf,inf,1,1,inf,yes,Both,yes,42.578125,6.284646,ff1951e869c9480085d12c8d2f11f164 +rounding,trunc,f256,qdpp,qdreal,qdpp qd_real,qdpp aint,4110,inf,inf,inf,1,1,inf,yes,Both,no,5.955642,0.879069,ff1951e869c9480085d12c8d2f11f164 +rounding,trunc,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::trunc,4110,inf,inf,inf,1,1,inf,yes,No,no,144.438477,21.319507,ff1951e869c9480085d12c8d2f11f164 +special_functions,erf,f256,fltx,fltx,fltx bl::f256,bl::erf,8198,212.782396,196.847186,196.755396,2,2,16.755396,yes,Both,yes,8938.28125,,ff1951e869c9480085d12c8d2f11f164 +special_functions,erf,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,8198,216.2639365,214.293135,214.06938,2,2,34.06938,yes,Both,yes,16748.4375,1.873787,ff1951e869c9480085d12c8d2f11f164 +special_functions,erf,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,8198,239.239293,237.303421,237.090794,2,2,57.090794,yes,Inf,no,780978.90625,87.374618,ff1951e869c9480085d12c8d2f11f164 +special_functions,erfc,f256,fltx,fltx,fltx bl::f256,bl::erfc,8198,208.160201,191.066815,189.779688,2,2,9.779688,yes,Both,-,8904.785156,,ff1951e869c9480085d12c8d2f11f164 +special_functions,erfc,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,8198,216.0696585,214.211875,214.017843,2,2,34.017843,yes,Both,-,27628.125,3.102616,ff1951e869c9480085d12c8d2f11f164 +special_functions,erfc,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,8198,239.0529915,237.201029,237.018916,2,2,57.018916,yes,Inf,-,778829.6875,87.461929,ff1951e869c9480085d12c8d2f11f164 +special_functions,lgamma,f256,fltx,fltx,fltx bl::f256,bl::lgamma,4099,211.903615,199.617279,199.225949,1,1,19.225949,yes,Both,-,8275.683594,,ff1951e869c9480085d12c8d2f11f164 +special_functions,lgamma,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lgamma,4099,215.890428,214.160879,214.017847,1,1,34.017847,yes,Both,-,12619.53125,1.524893,ff1951e869c9480085d12c8d2f11f164 +special_functions,lgamma,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::lgamma,4099,238.928241,237.162122,237.008749,1,1,57.008749,yes,No,-,251897.65625,30.43829,ff1951e869c9480085d12c8d2f11f164 +special_functions,tgamma,f256,fltx,fltx,fltx bl::f256,bl::tgamma,4099,209.040528,202.582542,202.45702,1,1,22.45702,yes,Both,-,9276.5625,,ff1951e869c9480085d12c8d2f11f164 +special_functions,tgamma,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tgamma,4099,215.948239,214.171703,214.004992,1,1,34.004992,yes,Both,-,14727.34375,1.587586,ff1951e869c9480085d12c8d2f11f164 +special_functions,tgamma,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::tgamma,4099,238.919522,237.194896,237.040555,1,1,57.040555,yes,No,-,279385.9375,30.117399,ff1951e869c9480085d12c8d2f11f164 +trigonometric,acos,f256,fltx,fltx,fltx bl::f256,bl::acos,8204,216.029308016,205.510139,192.466318,2,2,12.466318,yes,Both,-,1347.516741,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,acos,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,8204,215.919006178,214.16827,214.01241,2,2,34.01241,yes,Both,-,6267.089844,4.650844,ff1951e869c9480085d12c8d2f11f164 +trigonometric,acos,f256,qdpp,qdreal,qdpp qd_real,qdpp acos,8204,217.31889624,213.570151,212.546937,2,2,32.546937,yes,Both,-,8330.175781,6.181872,ff1951e869c9480085d12c8d2f11f164 +trigonometric,acos,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,8204,238.937618214,237.176311,237.031977,2,2,57.031977,yes,No,-,22167.1875,16.450399,ff1951e869c9480085d12c8d2f11f164 +trigonometric,asin,f256,fltx,fltx,fltx bl::f256,bl::asin,8204,217.91775033,214.870821,214.404436,2,2,34.404436,yes,Both,yes,1334.207589,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,asin,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,8204,216.0174187,214.166642,214.033964,2,2,34.033964,yes,Both,yes,6068.017578,4.548031,ff1951e869c9480085d12c8d2f11f164 +trigonometric,asin,f256,qdpp,qdreal,qdpp qd_real,qdpp asin,8204,217.153695198,212.882268,212.306181,2,2,32.306181,yes,Both,no,8279.199219,6.205331,ff1951e869c9480085d12c8d2f11f164 +trigonometric,asin,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,8204,239.01952962,237.164907,237.026679,2,2,57.026679,yes,No,no,22050.292969,16.526883,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan,f256,fltx,fltx,fltx bl::f256,bl::atan,8198,218.142465,215.364973,214.678988,2,2,34.678988,yes,Both,yes,880.121528,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,8198,215.9607655,214.196468,214.022743,2,2,34.022743,yes,Both,yes,1993.769531,2.265334,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan,f256,qdpp,qdreal,qdpp qd_real,qdpp atan,8198,216.700414,213.068799,212.444445,2,2,32.444445,yes,NaN,no,6178.515625,7.020071,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,8198,238.9817475,237.221991,237.005716,2,2,57.005716,yes,Inf,no,20588.867188,23.393209,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan2,f256,fltx,fltx,fltx bl::f256,bl::atan2,8206,217.911773079,215.258136,214.277602,3,3,34.277602,yes,Both,yes,940.440538,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan2,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,8206,215.939645852,214.132014,214.011485,3,3,34.011485,yes,Both,yes,2047.5,2.177171,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan2,f256,qdpp,qdreal,qdpp qd_real,qdpp atan2,8206,216.283152069,0,0,2,3,-180,no,NaN,no,6096.191406,6.482272,ff1951e869c9480085d12c8d2f11f164 +trigonometric,atan2,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,8206,238.987771942,237.174621,237.005636,3,3,57.005636,yes,Inf,no,20739.160156,22.052601,ff1951e869c9480085d12c8d2f11f164 +trigonometric,cos,f256,fltx,fltx,fltx bl::f256,bl::cos,12518,226.780465244,215.246584,208.674366,3,3,28.674366,yes,Both,-,882.480469,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,cos,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,12518,219.362111864,214.240603,214.013567,3,3,34.013567,yes,Both,-,1303.459821,1.477041,ff1951e869c9480085d12c8d2f11f164 +trigonometric,cos,f256,qdpp,qdreal,qdpp qd_real,qdpp cos,12518,161.941146628,0,0,1,3,-180,no,Both,-,1801.71875,2.041653,ff1951e869c9480085d12c8d2f11f164 +trigonometric,cos,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,12518,241.656141716,237.245286,237.010092,3,3,57.010092,yes,No,-,13347.460938,15.124936,ff1951e869c9480085d12c8d2f11f164 +trigonometric,sin,f256,fltx,fltx,fltx bl::f256,bl::sin,12518,222.290222968,208.567012,202.92477,3,3,22.92477,yes,Both,yes,883.662109,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,sin,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,12518,218.487703853,214.163948,214.02345,3,3,34.02345,yes,Both,yes,1689.902344,1.912385,ff1951e869c9480085d12c8d2f11f164 +trigonometric,sin,f256,qdpp,qdreal,qdpp qd_real,qdpp sin,12518,142.802514066,0,0,1,3,-180,no,Both,no,1792.832031,2.028866,ff1951e869c9480085d12c8d2f11f164 +trigonometric,sin,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,12518,241.18040008,237.214941,237.023215,3,3,57.023215,yes,No,no,13353.710938,15.111784,ff1951e869c9480085d12c8d2f11f164 +trigonometric,sincos,f256,fltx,fltx,fltx bl::f256,bl::sincos,,,,,,,,,-,-,1175.640191,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,sincos,f256,qdpp,qdreal,qdpp qd_real,qdpp sincos,,,,,,,,,-,-,1935.410156,1.646261,ff1951e869c9480085d12c8d2f11f164 +trigonometric,sincos,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sincos,,,,,,,,,-,-,26866.894531,22.852991,ff1951e869c9480085d12c8d2f11f164 +trigonometric,tan,f256,fltx,fltx,fltx bl::f256,bl::tan,12518,217.050653666,208.567009,202.92477,3,3,32.92477,yes,Both,yes,1113.916016,,ff1951e869c9480085d12c8d2f11f164 +trigonometric,tan,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,12518,215.979315837,214.143677,214.006668,3,3,44.006668,yes,Both,yes,1892.207031,1.698698,ff1951e869c9480085d12c8d2f11f164 +trigonometric,tan,f256,qdpp,qdreal,qdpp qd_real,qdpp tan,12518,111.509729272,0,0,1,3,-170,no,Both,no,2203.662109,1.978302,ff1951e869c9480085d12c8d2f11f164 +trigonometric,tan,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,12518,238.954881373,237.180286,237.008972,3,3,67.008972,yes,No,no,17299.609375,15.530443,ff1951e869c9480085d12c8d2f11f164 diff --git a/validation/metrics/data/windows/x86_64/MSVC_f256_fastmath.csv b/validation/metrics/data/windows/x86_64/MSVC_f256_fastmath.csv new file mode 100644 index 0000000..a857122 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/MSVC_f256_fastmath.csv @@ -0,0 +1,86 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f256,fltx,fltx,fltx bl::f256,bl::add,4096,227.373862582,215.583815,215.297307,2,2,25.297307,yes,Both,no,10.642618,,38734516d65c4154a947aaeb3ae92c72 +arithmetic,divide,f256,fltx,fltx,fltx bl::f256,bl::divide,4100,219.220520548,215.287455,214.762066,2,2,24.762066,yes,Both,yes,80.507812,,38734516d65c4154a947aaeb3ae92c72 +arithmetic,multiply,f256,fltx,fltx,fltx bl::f256,bl::multiply,4100,220.046096951,215.608028,215.221541,2,2,25.221541,yes,Both,yes,18.663885,,38734516d65c4154a947aaeb3ae92c72 +arithmetic,subtract,f256,fltx,fltx,fltx bl::f256,bl::subtract,4096,227.447841785,215.602949,215.220788,2,2,25.220788,yes,Both,no,10.650442,,38734516d65c4154a947aaeb3ae92c72 +comparisons,equal,f256,fltx,fltx,fltx bl::f256,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.774325,,38734516d65c4154a947aaeb3ae92c72 +comparisons,greater,f256,fltx,fltx,fltx bl::f256,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.094857,,38734516d65c4154a947aaeb3ae92c72 +comparisons,greater_equal,f256,fltx,fltx,fltx bl::f256,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.014286,,38734516d65c4154a947aaeb3ae92c72 +comparisons,less,f256,fltx,fltx,fltx bl::f256,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.021346,,38734516d65c4154a947aaeb3ae92c72 +comparisons,less_equal,f256,fltx,fltx,fltx bl::f256,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,2.046704,,38734516d65c4154a947aaeb3ae92c72 +comparisons,not_equal,f256,fltx,fltx,fltx bl::f256,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.77455,,38734516d65c4154a947aaeb3ae92c72 +exponentials,exp,f256,fltx,fltx,fltx bl::f256,bl::exp,8198,216.760981,210.609597,209.17081,2,2,29.17081,yes,Both,-,1006.835938,,38734516d65c4154a947aaeb3ae92c72 +exponentials,exp2,f256,fltx,fltx,fltx bl::f256,bl::exp2,8198,218.030361,214.973213,214.202868,2,2,34.202868,yes,Both,-,826.152344,,38734516d65c4154a947aaeb3ae92c72 +exponentials,expm1,f256,fltx,fltx,fltx bl::f256,bl::expm1,8197,227.154452503,207.540568,207,2,2,27,yes,Both,yes,1009.309896,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,abs,f256,fltx,fltx,fltx bl::f256,bl::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,2.316043,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,copysign,f256,fltx,fltx,fltx bl::f256,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,0.867482,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,fabs,f256,fltx,fltx,fltx bl::f256,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,2.304641,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,fdim,f256,fltx,fltx,fltx bl::f256,bl::fdim,8197,inf,inf,inf,2,2,inf,yes,Both,yes,7.918498,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,fma,f256,fltx,fltx,fltx bl::f256,bl::fma,12293,229.715460613,215.654212,215.096656,3,3,25.096656,yes,Both,no,24.520399,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,fmax,f256,fltx,fltx,fltx bl::f256,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,yes,4.105489,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,fmin,f256,fltx,fltx,fltx bl::f256,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,yes,4.329351,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,frexp,f256,fltx,fltx,fltx bl::f256,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,10.398387,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,ilogb,f256,fltx,fltx,fltx bl::f256,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.555755,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,ldexp,f256,fltx,fltx,fltx bl::f256,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,4.945054,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,logb,f256,fltx,fltx,fltx bl::f256,bl::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,2.093436,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,modf,f256,fltx,fltx,fltx bl::f256,bl::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,18.23675,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,nextafter,f256,fltx,fltx,fltx bl::f256,bl::nextafter,,,,,,,,,-,-,8.15083,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,nexttoward,f256,fltx,fltx,fltx bl::f256,bl::nexttoward,,,,,,,,,-,-,8.116064,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,recip,f256,fltx,fltx,fltx bl::f256,bl::recip,8195,217.92444534,215.148048,214.625136,2,2,24.625136,yes,Both,yes,74.480975,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,scalbln,f256,fltx,fltx,fltx bl::f256,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,4.871324,,38734516d65c4154a947aaeb3ae92c72 +floating_point_utilities,scalbn,f256,fltx,fltx,fltx bl::f256,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,4.864172,,38734516d65c4154a947aaeb3ae92c72 +hyperbolic,cosh,f256,fltx,fltx,fltx bl::f256,bl::cosh,8198,217.5106305,214.737937,214.159072,2,2,34.159072,yes,Both,-,1244.503348,,38734516d65c4154a947aaeb3ae92c72 +hyperbolic,sinh,f256,fltx,fltx,fltx bl::f256,bl::sinh,8198,217.022625,214.597984,213.844482,2,2,33.844482,yes,Both,yes,1241.782924,,38734516d65c4154a947aaeb3ae92c72 +hyperbolic,tanh,f256,fltx,fltx,fltx bl::f256,bl::tanh,8198,219.128554,215.222392,214.042672,2,2,34.042672,yes,Both,yes,1222.251674,,38734516d65c4154a947aaeb3ae92c72 +inverse_hyperbolic,acosh,f256,fltx,fltx,fltx bl::f256,bl::acosh,8200,217.720725959,214.442677,213.709421,2,2,33.709421,yes,Both,-,2413.354492,,38734516d65c4154a947aaeb3ae92c72 +inverse_hyperbolic,asinh,f256,fltx,fltx,fltx bl::f256,bl::asinh,8198,217.1921705,213.881562,212.956798,2,2,32.956798,yes,Both,yes,2613.476562,,38734516d65c4154a947aaeb3ae92c72 +inverse_hyperbolic,atanh,f256,fltx,fltx,fltx bl::f256,bl::atanh,8204,218.285376518,214.164921,213.300563,2,2,33.300563,yes,Both,yes,2192.626953,,38734516d65c4154a947aaeb3ae92c72 +io,parse,f256,fltx,fltx,fltx bl::f256,bl::parse,8195,219.729492211,212.275332,212.017147,2,2,0.017147,yes,Both,yes,430.329349,,38734516d65c4154a947aaeb3ae92c72 +io,to_chars,f256,fltx,fltx,fltx bl::f256,bl::to_chars,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,299.856672,,38734516d65c4154a947aaeb3ae92c72 +io,to_string,f256,fltx,fltx,fltx bl::f256,bl::to_string,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,355.387493,,38734516d65c4154a947aaeb3ae92c72 +logarithms,log,f256,fltx,fltx,fltx bl::f256,bl::log,12291,217.776072084,214.333783,213.252927,3,3,33.252927,yes,Both,-,1670.195312,,38734516d65c4154a947aaeb3ae92c72 +logarithms,log10,f256,fltx,fltx,fltx bl::f256,bl::log10,12291,217.44848007,214.245682,213.257193,3,3,33.257193,yes,Both,-,1719.257812,,38734516d65c4154a947aaeb3ae92c72 +logarithms,log1p,f256,fltx,fltx,fltx bl::f256,bl::log1p,8197,226.82219119,207.415037,207,2,2,27,yes,Both,yes,1723.984375,,38734516d65c4154a947aaeb3ae92c72 +logarithms,log2,f256,fltx,fltx,fltx bl::f256,bl::log2,12291,218.61302666,214.28538,213.192358,3,3,33.192358,yes,Both,-,1704.042969,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,affine_trig,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,1804.626623,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,chained_arithmetic,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,155.240629,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,haversine,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,4656.673729,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,horner_polynomial,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,394.940243,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,log_sum_exp,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,8662.5,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,mandelbrot,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,123.980917,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,matrix_vector_4x4,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,557.211538,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,newton_root,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,219.373504,,38734516d65c4154a947aaeb3ae92c72 +mixed_workloads,product_sum,f256,fltx,fltx,fltx bl::f256,bl::product_sum,,,,,,,,,-,-,42.935689,,38734516d65c4154a947aaeb3ae92c72 +random,mt19937_64,f256,fltx,fltx,fltx bl::f256,bl::mt19937_64,,,,,,,,,-,-,2.076955,,38734516d65c4154a947aaeb3ae92c72 +random,normal,f256,fltx,fltx,fltx bl::f256,bl::normal,,,,,,,,,-,-,265.443979,,38734516d65c4154a947aaeb3ae92c72 +random,uniform_real,f256,fltx,fltx,fltx bl::f256,bl::uniform_real,,,,,,,,,-,-,19.162196,,38734516d65c4154a947aaeb3ae92c72 +remainders,fmod,f256,fltx,fltx,fltx bl::f256,bl::fmod,8199,243.996795284,217.724535,217.724535,3,3,27.724535,yes,Both,yes,67.385101,,38734516d65c4154a947aaeb3ae92c72 +remainders,remainder,f256,fltx,fltx,fltx bl::f256,bl::remainder,4099,inf,inf,inf,1,1,inf,yes,Both,yes,96.136068,,38734516d65c4154a947aaeb3ae92c72 +remainders,remquo,f256,fltx,fltx,fltx bl::f256,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,96.763238,,38734516d65c4154a947aaeb3ae92c72 +roots_and_powers,cbrt,f256,fltx,fltx,fltx bl::f256,bl::cbrt,8195,219.286640743,215.522484,215.009723,2,2,25.009723,yes,Both,yes,344.421387,,38734516d65c4154a947aaeb3ae92c72 +roots_and_powers,hypot,f256,fltx,fltx,fltx bl::f256,bl::hypot,8195,229.93090326,215.484839,213.870154,2,2,23.870154,yes,Both,yes,172.597249,,38734516d65c4154a947aaeb3ae92c72 +roots_and_powers,ipow,f256,fltx,fltx,fltx bl::f256,bl::ipow,8195,217.175762701,214.383216,213.656994,2,2,23.656994,yes,Both,no,111.808697,,38734516d65c4154a947aaeb3ae92c72 +roots_and_powers,pow,f256,fltx,fltx,fltx bl::f256,bl::pow,8198,216.837164,212.047897,211.143117,2,2,31.143117,yes,Both,yes,2549.389648,,38734516d65c4154a947aaeb3ae92c72 +roots_and_powers,sqr,f256,fltx,fltx,fltx bl::f256,bl::sqr,8195,220.120699598,216.278909,215.25119,2,2,25.25119,yes,Both,yes,18.2676,,38734516d65c4154a947aaeb3ae92c72 +roots_and_powers,sqrt,f256,fltx,fltx,fltx bl::f256,bl::sqrt,16391,217.892674432,211.30757,209.568118,4,4,19.568118,yes,Both,yes,122.149658,,38734516d65c4154a947aaeb3ae92c72 +rounding,ceil,f256,fltx,fltx,fltx bl::f256,bl::ceil,4110,inf,inf,inf,1,1,inf,yes,Both,yes,5.166603,,38734516d65c4154a947aaeb3ae92c72 +rounding,floor,f256,fltx,fltx,fltx bl::f256,bl::floor,4110,inf,inf,inf,1,1,inf,yes,Both,yes,5.186086,,38734516d65c4154a947aaeb3ae92c72 +rounding,llround,f256,fltx,fltx,fltx bl::f256,bl::llround,4116,inf,inf,inf,1,1,inf,yes,-,-,6.885068,,38734516d65c4154a947aaeb3ae92c72 +rounding,lround,f256,fltx,fltx,fltx bl::f256,bl::lround,4112,inf,inf,inf,1,1,inf,yes,-,-,8.276418,,38734516d65c4154a947aaeb3ae92c72 +rounding,round,f256,fltx,fltx,fltx bl::f256,bl::round,4110,inf,inf,inf,1,1,inf,yes,Both,yes,12.870199,,38734516d65c4154a947aaeb3ae92c72 +rounding,round_decimals,f256,fltx,fltx,fltx bl::f256,bl::round_decimals,4099,220.044956,215.606687,215.330917,1,1,25.330917,yes,Both,yes,126.870728,,38734516d65c4154a947aaeb3ae92c72 +rounding,round_significant,f256,fltx,fltx,fltx bl::f256,bl::round_significant,4096,229.647449,215.594292,215.06782,1,1,25.06782,yes,Both,yes,179.817708,,38734516d65c4154a947aaeb3ae92c72 +rounding,roundeven,f256,fltx,fltx,fltx bl::f256,bl::roundeven,4110,inf,inf,inf,1,1,inf,yes,Both,yes,9.571359,,38734516d65c4154a947aaeb3ae92c72 +rounding,trunc,f256,fltx,fltx,fltx bl::f256,bl::trunc,4110,inf,inf,inf,1,1,inf,yes,Both,yes,7.590284,,38734516d65c4154a947aaeb3ae92c72 +special_functions,erf,f256,fltx,fltx,fltx bl::f256,bl::erf,8198,212.782396,196.847186,196.755396,2,2,16.755396,yes,Both,yes,8880.133929,,38734516d65c4154a947aaeb3ae92c72 +special_functions,erfc,f256,fltx,fltx,fltx bl::f256,bl::erfc,8198,208.160201,191.066815,189.779688,2,2,9.779688,yes,Both,-,8882.226562,,38734516d65c4154a947aaeb3ae92c72 +special_functions,lgamma,f256,fltx,fltx,fltx bl::f256,bl::lgamma,4099,211.903615,199.617279,199.225949,1,1,19.225949,yes,Both,-,8335.058594,,38734516d65c4154a947aaeb3ae92c72 +special_functions,tgamma,f256,fltx,fltx,fltx bl::f256,bl::tgamma,4099,209.040528,202.582542,202.45702,1,1,22.45702,yes,Both,-,9361.230469,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,acos,f256,fltx,fltx,fltx bl::f256,bl::acos,8204,216.029308016,205.510139,192.466318,2,2,12.466318,yes,Both,-,1347.893415,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,asin,f256,fltx,fltx,fltx bl::f256,bl::asin,8204,217.91775033,214.870821,214.404436,2,2,34.404436,yes,Both,yes,1336.983817,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,atan,f256,fltx,fltx,fltx bl::f256,bl::atan,8198,218.142465,215.364973,214.678988,2,2,34.678988,yes,Both,yes,879.902344,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,atan2,f256,fltx,fltx,fltx bl::f256,bl::atan2,8206,217.911773079,215.258136,214.277602,3,3,34.277602,yes,Both,yes,959.364149,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,cos,f256,fltx,fltx,fltx bl::f256,bl::cos,12518,226.780465244,215.246584,208.674366,3,3,28.674366,yes,Both,-,881.650391,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,sin,f256,fltx,fltx,fltx bl::f256,bl::sin,12518,222.290222968,208.567012,202.92477,3,3,22.92477,yes,Both,yes,881.894531,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,sincos,f256,fltx,fltx,fltx bl::f256,bl::sincos,,,,,,,,,-,-,1081.335449,,38734516d65c4154a947aaeb3ae92c72 +trigonometric,tan,f256,fltx,fltx,fltx bl::f256,bl::tan,12518,217.050653666,208.567009,202.92477,3,3,32.92477,yes,Both,yes,1143.798828,,38734516d65c4154a947aaeb3ae92c72 diff --git a/validation/metrics/data/windows/x86_64/MinGW_f128.csv b/validation/metrics/data/windows/x86_64/MinGW_f128.csv new file mode 100644 index 0000000..5bcb4e3 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/MinGW_f128.csv @@ -0,0 +1,292 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,4096,120.266239506,106.483519,105.736235,2,2,15.736235,yes,Both,no,7.205388,3.983626,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,add,f128,fltx,fltx,fltx bl::f128,bl::add,4096,120.266239506,106.483519,105.736235,2,2,15.736235,yes,Both,no,1.808751,,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,add,f128,qdpp,ddreal,qdpp dd_real,qdpp operator+,4096,120.266239506,106.483519,105.736235,2,2,15.736235,yes,NaN,no,0.925775,0.511831,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,add,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,4096,127.004869623,113.252951,113.031307,2,2,23.031307,yes,No,no,48.25887,26.680768,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,divide,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator/,4100,110.909104952,105.971646,105.124683,2,2,15.124683,yes,NaN,no,116.009521,50.343001,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,divide,f128,fltx,fltx,fltx bl::f128,bl::divide,4100,110.909104952,105.971646,105.124683,2,2,15.124683,yes,Both,yes,2.304382,,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,divide,f128,qdpp,ddreal,qdpp dd_real,qdpp operator/,4100,110.735880117,106.129356,105.462052,2,2,15.462052,yes,NaN,no,13.060547,5.6677,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,divide,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,4100,114.962938068,113.147176,113.003421,2,2,23.003421,yes,No,no,103.261719,44.811018,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,multiply,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,4100,108.546950295,105.172405,104.685792,2,2,14.685792,yes,Both,no,113.341064,69.783903,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,multiply,f128,fltx,fltx,fltx bl::f128,bl::multiply,4100,108.702461473,105.665876,105.380753,2,2,15.380753,yes,Both,yes,1.624172,,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,multiply,f128,qdpp,ddreal,qdpp dd_real,qdpp operator*,4100,108.702461473,105.665876,105.380753,2,2,15.380753,yes,NaN,no,1.733134,1.067087,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,multiply,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,4100,114.973330655,113.125729,113.004612,2,2,23.004612,yes,No,no,36.112061,22.234135,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,subtract,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,4096,120.053476095,106.530508,105.744857,2,2,15.744857,yes,Both,no,7.260648,4.065219,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,subtract,f128,fltx,fltx,fltx bl::f128,bl::subtract,4096,120.053476095,106.530508,105.744857,2,2,15.744857,yes,Both,no,1.786041,,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,subtract,f128,qdpp,ddreal,qdpp dd_real,qdpp operator-,4096,120.053476095,106.530508,105.744857,2,2,15.744857,yes,NaN,no,0.928556,0.519896,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,subtract,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,4096,127.171548646,113.274079,113.01331,2,2,23.01331,yes,No,no,47.496745,26.593308,1bc36f9be0894bcfb934a2e01311a61e +comparisons,equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.204562,1.269247,1bc36f9be0894bcfb934a2e01311a61e +comparisons,equal,f128,fltx,fltx,fltx bl::f128,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.949037,,1bc36f9be0894bcfb934a2e01311a61e +comparisons,equal,f128,qdpp,ddreal,qdpp dd_real,qdpp operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.450268,0.474448,1bc36f9be0894bcfb934a2e01311a61e +comparisons,equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,7.02846,7.40589,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.212173,0.969189,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater,f128,fltx,fltx,fltx bl::f128,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.250709,,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater,f128,qdpp,ddreal,qdpp dd_real,qdpp operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.701363,0.560772,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,7.647001,6.114133,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater_equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.971259,0.840327,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater_equal,f128,fltx,fltx,fltx bl::f128,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.155811,,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater_equal,f128,qdpp,ddreal,qdpp dd_real,qdpp operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.801565,0.693508,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater_equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,7.714327,6.674383,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.068196,0.966451,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less,f128,fltx,fltx,fltx bl::f128,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.105277,,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less,f128,qdpp,ddreal,qdpp dd_real,qdpp operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.838337,0.758486,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,7.292074,6.597507,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less_equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.156155,1.130476,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less_equal,f128,fltx,fltx,fltx bl::f128,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.022715,,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less_equal,f128,qdpp,ddreal,qdpp dd_real,qdpp operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.919082,0.898669,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less_equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,7.777992,7.605237,1bc36f9be0894bcfb934a2e01311a61e +comparisons,not_equal,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.138673,1.104876,1bc36f9be0894bcfb934a2e01311a61e +comparisons,not_equal,f128,fltx,fltx,fltx bl::f128,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.030589,,1bc36f9be0894bcfb934a2e01311a61e +comparisons,not_equal,f128,qdpp,ddreal,qdpp dd_real,qdpp operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.487349,0.472884,1bc36f9be0894bcfb934a2e01311a61e +comparisons,not_equal,f128,tlfloat,tlquad,TLFloat Quad,TLFloat operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.938224,6.732287,1bc36f9be0894bcfb934a2e01311a61e +exponentials,exp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,8198,100.3727745,0,0,1,2,-80,no,Both,-,2563.549805,23.690142,1bc36f9be0894bcfb934a2e01311a61e +exponentials,exp,f128,fltx,fltx,fltx bl::f128,bl::exp,8198,106.9878975,104.337314,103.64511,2,2,23.64511,yes,Both,-,108.21167,,1bc36f9be0894bcfb934a2e01311a61e +exponentials,exp,f128,qdpp,ddreal,qdpp dd_real,qdpp exp,8198,106.824486,104.205832,103.671903,2,2,23.671903,yes,Both,-,234.339021,2.165561,1bc36f9be0894bcfb934a2e01311a61e +exponentials,exp,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,8198,114.9390545,113.155192,113.027016,2,2,33.027016,yes,No,-,1519.596354,14.042814,1bc36f9be0894bcfb934a2e01311a61e +exponentials,exp2,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,8198,101.653295,96.37431,95.216729,2,2,15.216729,yes,Both,-,5542.041016,54.450993,1bc36f9be0894bcfb934a2e01311a61e +exponentials,exp2,f128,fltx,fltx,fltx bl::f128,bl::exp2,8198,108.8963935,106.013023,105.117537,2,2,25.117537,yes,Both,-,101.780349,,1bc36f9be0894bcfb934a2e01311a61e +exponentials,exp2,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,8198,114.9915935,113.141516,113.011731,2,2,33.011731,yes,No,-,2704.907227,26.575928,1bc36f9be0894bcfb934a2e01311a61e +exponentials,expm1,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,8197,120.349538301,101.057168,100.341101,2,2,20.341101,yes,Both,no,2590.74707,23.655149,1bc36f9be0894bcfb934a2e01311a61e +exponentials,expm1,f128,fltx,fltx,fltx bl::f128,bl::expm1,8197,121.61686848,105.111574,104.102752,2,2,24.102752,yes,Both,yes,109.521484,,1bc36f9be0894bcfb934a2e01311a61e +exponentials,expm1,f128,qdpp,ddreal,qdpp dd_real,qdpp expm1,8197,121.518391029,104.81583,0,1,2,-80,no,NaN,no,233.832751,2.13504,1bc36f9be0894bcfb934a2e01311a61e +exponentials,expm1,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,8197,128.181752377,113.238852,113.009736,2,2,33.009736,yes,No,no,1708.219401,15.597117,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,abs,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,3.31262,1.157666,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,abs,f128,fltx,fltx,fltx bl::f128,bl::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,2.861464,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,abs,f128,qdpp,ddreal,qdpp dd_real,qdpp abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,2.756561,0.963339,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,abs,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,8196,inf,inf,inf,2,2,inf,yes,No,yes,2.554102,0.892586,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,copysign,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,no,4.910724,4.770218,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,copysign,f128,fltx,fltx,fltx bl::f128,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,1.029455,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,copysign,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::copysign,4099,inf,inf,inf,1,1,inf,yes,No,no,4.710449,4.575674,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fabs,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,3.229126,1.045901,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fabs,f128,fltx,fltx,fltx bl::f128,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,3.08741,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fabs,f128,qdpp,ddreal,qdpp dd_real,qdpp fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,2.779865,0.900387,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fabs,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,4099,inf,inf,inf,1,1,inf,yes,No,yes,2.682224,0.868762,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fdim,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,8197,137.996123973,inf,106.227061,2,2,16.227061,yes,No,yes,5.168627,1.591714,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fdim,f128,fltx,fltx,fltx bl::f128,bl::fdim,8197,137.996123973,inf,106.227061,2,2,16.227061,yes,Both,yes,3.247208,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fdim,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,8197,inf,inf,inf,2,2,inf,yes,No,yes,53.481445,16.469978,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fma,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,12293,75.7644862641,0,0,2,3,-90,no,Both,no,121.090088,15.170242,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fma,f128,fltx,fltx,fltx bl::f128,bl::fma,12293,117.44188202,104.680325,99.5802,3,3,9.5802,yes,Both,no,7.98208,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fma,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,12293,128.420266387,113.182994,113.025245,3,3,23.025245,yes,No,no,78.414307,9.823794,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fmax,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,yes,2.30832,0.939588,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fmax,f128,fltx,fltx,fltx bl::f128,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,yes,2.456736,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fmax,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,8195,inf,inf,inf,2,2,inf,yes,No,no,13.310198,5.417837,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fmin,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,no,2.418854,1.041176,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fmin,f128,fltx,fltx,fltx bl::f128,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,yes,2.323194,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fmin,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,8195,inf,inf,inf,2,2,inf,yes,No,no,13.060913,5.621964,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,frexp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,no,9.048011,4.93335,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,frexp,f128,fltx,fltx,fltx bl::f128,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,1.83405,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,frexp,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,8196,inf,inf,inf,2,2,inf,yes,No,no,30.725708,16.752929,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,ilogb,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,9.153522,6.232654,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,ilogb,f128,fltx,fltx,fltx bl::f128,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.46864,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,ilogb,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.760012,1.198396,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,ldexp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,9.356578,7.372227,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,ldexp,f128,fltx,fltx,fltx bl::f128,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.269166,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,ldexp,f128,qdpp,ddreal,qdpp dd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,9.148055,7.207928,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,ldexp,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::ldexp,4096,inf,inf,inf,1,1,inf,yes,No,no,8.847019,6.970736,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,logb,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,30.100403,20.472843,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,logb,f128,fltx,fltx,fltx bl::f128,bl::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,1.47026,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,modf,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,8195,inf,inf,inf,2,2,inf,yes,NaN,no,11.423272,2.059762,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,modf,f128,fltx,fltx,fltx bl::f128,bl::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,5.545918,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,modf,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,8195,inf,inf,inf,2,2,inf,yes,No,no,69.005737,12.442617,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,nextafter,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter,,,,,,,,,-,-,32.284851,6.45567,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,nextafter,f128,fltx,fltx,fltx bl::f128,bl::nextafter,,,,,,,,,-,-,5.001007,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,nextafter,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter,,,,,,,,,-,-,18.156072,3.630483,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,nexttoward,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter (same type),,,,,,,,,-,-,32.36084,6.931225,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,nexttoward,f128,fltx,fltx,fltx bl::f128,bl::nexttoward,,,,,,,,,-,-,4.668849,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,nexttoward,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter (same type),,,,,,,,,-,-,18.402876,3.94163,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,recip,f128,fltx,fltx,fltx bl::f128,bl::recip,8195,109.025331959,105.925795,105.189487,2,2,15.189487,yes,Both,yes,31.696112,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,recip,f128,qdpp,ddreal,qdpp dd_real,qdpp inv,8195,109.417670682,106.810343,106.471075,2,2,16.471075,yes,NaN,no,12.923825,0.407742,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,scalbln,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,no,9.32595,7.501304,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,scalbln,f128,fltx,fltx,fltx bl::f128,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.243244,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,scalbln,f128,qdpp,ddreal,qdpp dd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,9.141686,7.353092,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,scalbn,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,no,9.368896,7.515841,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,scalbn,f128,fltx,fltx,fltx bl::f128,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.246553,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,scalbn,f128,qdpp,ddreal,qdpp dd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,9.136538,7.32944,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,cosh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,8198,104.0385055,101.138682,100.616889,2,2,20.616889,yes,Both,-,2738.452148,22.152798,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,cosh,f128,fltx,fltx,fltx bl::f128,bl::cosh,8198,107.9070545,105.118172,104.370708,2,2,24.370708,yes,Both,-,123.616536,,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,cosh,f128,qdpp,ddreal,qdpp dd_real,qdpp cosh,8198,107.6737085,104.881438,104.111506,2,2,24.111506,yes,NaN,-,274.185181,2.21803,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,cosh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,8198,114.913131,113.167572,113.010341,2,2,33.010341,yes,No,-,1678.369141,13.577222,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,sinh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,8198,103.5471475,100.590468,99.932085,2,2,19.932085,yes,Both,no,2737.426758,22.000981,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,sinh,f128,fltx,fltx,fltx bl::f128,bl::sinh,8198,107.4201585,104.726423,103.568829,2,2,23.568829,yes,Both,yes,124.42294,,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,sinh,f128,qdpp,ddreal,qdpp dd_real,qdpp sinh,8198,106.988346,104.381391,103.645559,2,2,23.645559,yes,NaN,no,276.196289,2.219818,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,sinh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,8198,114.9589025,113.141428,113.003172,2,2,33.003172,yes,No,no,1897.526042,15.250612,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,tanh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,8198,105.787236,101.155017,100.345784,2,2,20.345784,yes,Both,no,2914.941406,22.537973,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,tanh,f128,fltx,fltx,fltx bl::f128,bl::tanh,8198,109.217494,105.123457,103.771823,2,2,23.771823,yes,Both,yes,129.334677,,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,tanh,f128,qdpp,ddreal,qdpp dd_real,qdpp tanh,8198,109.266952,105.403737,104.022939,2,2,24.022939,yes,Both,no,281.332397,2.175228,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,tanh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,8198,115.2023705,113.224776,113.018718,2,2,33.018718,yes,Inf,no,1823.079427,14.095828,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,acosh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,8200,105.609996589,101.710952,100.384388,2,2,20.384388,yes,Both,-,6087.353516,37.384596,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,acosh,f128,fltx,fltx,fltx bl::f128,bl::acosh,8200,108.031519376,104.331717,103.672888,2,2,23.672888,yes,Both,-,162.830529,,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,acosh,f128,qdpp,ddreal,qdpp dd_real,qdpp acosh,8200,107.218718687,103.93482,0,0,2,-80,no,NaN,-,318.565151,1.956422,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,acosh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,8200,114.902573821,113.201891,113.024351,2,2,33.024351,yes,No,-,4750.488281,29.174433,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,asinh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,8198,104.4640275,100.780938,99.800033,2,2,19.800033,yes,Both,no,5298.583984,38.913984,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,asinh,f128,fltx,fltx,fltx bl::f128,bl::asinh,8198,108.081857,105.155677,103.818628,2,2,23.818628,yes,Both,yes,136.161436,,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,asinh,f128,qdpp,ddreal,qdpp dd_real,qdpp asinh,8198,107.072517,103.961722,0,1,2,-80,no,NaN,no,320.779855,2.355879,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,asinh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,8198,114.8781205,113.122222,113.007648,2,2,33.007648,yes,No,no,4953.759766,36.381518,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,atanh,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,8204,106.727454744,102.148131,101.316477,2,2,21.316477,yes,Both,no,22893.994141,142.319577,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,atanh,f128,fltx,fltx,fltx bl::f128,bl::atanh,8204,108.11583849,104.54201,103.139045,2,2,23.139045,yes,Both,yes,160.863281,,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,atanh,f128,qdpp,ddreal,qdpp dd_real,qdpp atanh,8204,107.60676374,104.409168,0,1,2,-80,no,Both,no,318.09082,1.977399,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,atanh,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,8204,115.135452038,113.183849,113.00948,2,2,33.00948,yes,No,no,2444.042969,15.193293,1bc36f9be0894bcfb934a2e01311a61e +io,parse,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,8195,107.103916819,0,0,1,2,-106,no,Both,no,630.06221,2.982039,1bc36f9be0894bcfb934a2e01311a61e +io,parse,f128,fltx,fltx,fltx bl::f128,bl::parse,8195,109.936763821,107.051396,106.003381,2,2,0.003381,yes,Both,yes,211.285679,,1bc36f9be0894bcfb934a2e01311a61e +io,parse,f128,qdpp,ddreal,qdpp dd_real,qdpp read,8195,102.529802279,0,0,0,2,-106,no,NaN,yes,258.244558,1.222253,1bc36f9be0894bcfb934a2e01311a61e +io,parse,f128,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,8195,114.932563094,113.157032,113.020059,2,2,7.020059,yes,No,no,3821.590632,18.087315,1bc36f9be0894bcfb934a2e01311a61e +io,to_chars,f128,fltx,fltx,fltx bl::f128,bl::to_chars,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,202.259975,,1bc36f9be0894bcfb934a2e01311a61e +io,to_chars,f128,qdpp,ddreal,qdpp dd_real,qdpp write,8195,109.446520281,102.378174,102.257899,2,2,12.257899,yes,Both,no,477.091974,2.358806,1bc36f9be0894bcfb934a2e01311a61e +io,to_string,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,8195,110.768659892,106.034942,105.994061,2,2,15.994061,yes,Both,no,425.880296,1.701114,1bc36f9be0894bcfb934a2e01311a61e +io,to_string,f128,fltx,fltx,fltx bl::f128,bl::to_string,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,250.353745,,1bc36f9be0894bcfb934a2e01311a61e +io,to_string,f128,qdpp,ddreal,qdpp dd_real,qdpp to_string,8195,109.446520281,102.378174,102.257899,2,2,12.257899,yes,Both,no,468.567943,1.871623,1bc36f9be0894bcfb934a2e01311a61e +io,to_string,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,8195,110.6557863,107.628363,107.30463,2,2,17.30463,yes,Both,yes,5198.999756,20.766615,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,12291,105.262046357,95.715279,87.939907,3,3,7.939907,yes,Both,-,2859.741211,19.642841,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log,f128,fltx,fltx,fltx bl::f128,bl::log,12291,108.40767633,104.625423,103.727726,3,3,23.727726,yes,Both,-,145.586948,,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log,f128,qdpp,ddreal,qdpp dd_real,qdpp log,12291,101.536842445,62.215356,61.346954,2,3,-18.653046,no,NaN,-,293.665365,2.017113,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log,12291,115.112527379,113.162642,113.007854,3,3,33.007854,yes,No,-,2220.043945,15.248922,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log10,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,12291,102.940511829,95.718828,87.939938,3,3,7.939938,yes,Both,-,3007.983398,20.068766,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log10,f128,fltx,fltx,fltx bl::f128,bl::log10,12291,107.503050022,104.469291,103.762278,3,3,23.762278,yes,Both,-,149.883823,,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log10,f128,qdpp,ddreal,qdpp dd_real,qdpp log10,12291,101.344272677,62.215356,61.346954,2,3,-18.653046,no,NaN,-,326.046317,2.175327,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log10,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,12291,114.873180067,113.138717,113.007632,3,3,33.007632,yes,No,-,2273.4375,15.167998,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log1p,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,8197,119.746793136,101.291508,100.173624,2,2,20.173624,yes,Both,no,3851.123047,25.472778,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log1p,f128,fltx,fltx,fltx bl::f128,bl::log1p,8197,121.372231555,105.150365,103.619384,2,2,23.619384,yes,Both,yes,151.185826,,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log1p,f128,qdpp,ddreal,qdpp dd_real,qdpp log1p,8197,120.890348596,104.605109,103.7953,2,2,23.7953,yes,NaN,no,276.846313,1.831166,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log1p,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,8197,128.112358976,113.130249,113.010769,2,2,33.010769,yes,No,no,2313.085938,15.299622,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log2,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,12291,106.566425211,95.715106,87.939906,3,3,7.939906,yes,Both,-,3023.388672,20.037617,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log2,f128,fltx,fltx,fltx bl::f128,bl::log2,12291,108.785650924,104.550799,103.716432,3,3,23.716432,yes,Both,-,150.885641,,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log2,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,12291,116.314749653,113.191847,113.016527,3,3,33.016527,yes,No,-,2333.862305,15.467756,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,affine_trig,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,10848.4375,50.914066,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,affine_trig,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,213.073484,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,affine_trig,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,426.765673,2.002904,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,affine_trig,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,3828.169643,17.966429,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,chained_arithmetic,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,251.322343,10.723944,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,chained_arithmetic,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,23.435626,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,chained_arithmetic,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,38.092227,1.625398,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,chained_arithmetic,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,285.52126,12.183215,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,haversine,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,70800,130.936761,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,haversine,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,540.719043,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,haversine,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,1358.70563,2.512776,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,haversine,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,11137.5,20.597573,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,horner_polynomial,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,1477.8125,12.978875,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,horner_polynomial,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,113.862916,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,horner_polynomial,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,98.379801,0.86402,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,horner_polynomial,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,962.075893,8.449423,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,log_sum_exp,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,21400,23.574864,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,log_sum_exp,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,907.746479,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,log_sum_exp,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,1761.44,1.940454,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,log_sum_exp,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,14350,15.808379,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,mandelbrot,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,468.734002,26.29796,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,mandelbrot,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,17.823968,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,mandelbrot,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,16.199329,0.908851,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,mandelbrot,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,361.354437,20.273512,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,matrix_vector_4x4,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,2018.428309,27.999232,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,matrix_vector_4x4,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,72.088703,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,matrix_vector_4x4,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,90.106213,1.249935,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,matrix_vector_4x4,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,1325.060096,18.380967,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,newton_root,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,,,,,,,,,-,-,523.978025,15.621146,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,newton_root,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,33.542868,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,newton_root,f128,qdpp,ddreal,qdpp dd_real,same workload,,,,,,,,,-,-,52.597147,1.568058,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,newton_root,f128,tlfloat,tlquad,TLFloat Quad,same workload,,,,,,,,,-,-,421.036122,12.55218,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,product_sum,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,same expression,,,,,,,,,-,-,234.790039,46.098839,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,product_sum,f128,fltx,fltx,fltx bl::f128,bl::product_sum,,,,,,,,,-,-,5.093188,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,product_sum,f128,qdpp,ddreal,qdpp dd_real,same expression,,,,,,,,,-,-,5.682192,1.115646,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,product_sum,f128,tlfloat,tlquad,TLFloat Quad,same expression,,,,,,,,,-,-,128.656684,25.260543,1bc36f9be0894bcfb934a2e01311a61e +random,mt19937_64,f128,fltx,fltx,fltx bl::f128,bl::mt19937_64,,,,,,,,,-,-,5.049237,,1bc36f9be0894bcfb934a2e01311a61e +random,normal,f128,fltx,fltx,fltx bl::f128,bl::normal,,,,,,,,,-,-,100.520833,,1bc36f9be0894bcfb934a2e01311a61e +random,uniform_real,f128,fltx,fltx,fltx bl::f128,bl::uniform_real,,,,,,,,,-,-,21.32868,,1bc36f9be0894bcfb934a2e01311a61e +random,uniform_real,f128,qdpp,ddreal,qdpp dd_real,qdpp ddrand,,,,,,,,,-,-,24.343333,1.141343,1bc36f9be0894bcfb934a2e01311a61e +remainders,fmod,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,8197,106.658013851,0,0,1,3,-90,no,NaN,no,213.525391,12.044896,1bc36f9be0894bcfb934a2e01311a61e +remainders,fmod,f128,fltx,fltx,fltx bl::f128,bl::fmod,8197,inf,inf,inf,3,3,inf,yes,Both,yes,17.727458,,1bc36f9be0894bcfb934a2e01311a61e +remainders,fmod,f128,qdpp,ddreal,qdpp dd_real,qdpp fmod,8197,106.654304615,0,0,1,3,-90,no,NaN,no,23.996829,1.353653,1bc36f9be0894bcfb934a2e01311a61e +remainders,fmod,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,8197,inf,inf,inf,3,3,inf,yes,No,no,288.522339,16.275449,1bc36f9be0894bcfb934a2e01311a61e +remainders,remainder,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remainder,4099,134.409394,100.966202,95.502103,1,1,5.502103,yes,NaN,no,218.686523,11.018599,1bc36f9be0894bcfb934a2e01311a61e +remainders,remainder,f128,fltx,fltx,fltx bl::f128,bl::remainder,4099,137.991491,inf,103.120938,1,1,13.120938,yes,Both,yes,19.847036,,1bc36f9be0894bcfb934a2e01311a61e +remainders,remainder,f128,qdpp,ddreal,qdpp dd_real,qdpp drem,4099,134.409394,100.966202,95.502103,1,1,5.502103,yes,NaN,no,26.290189,1.324641,1bc36f9be0894bcfb934a2e01311a61e +remainders,remainder,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::remainder,4099,inf,inf,inf,1,1,inf,yes,No,no,301.864624,15.209557,1bc36f9be0894bcfb934a2e01311a61e +remainders,remquo,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remquo,4099,inf,inf,inf,1,1,inf,yes,NaN,no,219.606934,10.972664,1bc36f9be0894bcfb934a2e01311a61e +remainders,remquo,f128,fltx,fltx,fltx bl::f128,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,20.014004,,1bc36f9be0894bcfb934a2e01311a61e +remainders,remquo,f128,qdpp,ddreal,qdpp dd_real,qdpp divrem,4099,inf,inf,inf,1,1,inf,yes,NaN,no,26.392541,1.318704,1bc36f9be0894bcfb934a2e01311a61e +remainders,remquo,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::remquo,4099,inf,inf,inf,1,1,inf,yes,No,no,318.767439,15.92722,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,cbrt,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,8195,108.3957186,105.429716,104.600252,2,2,14.600252,yes,Both,no,2245.410156,31.233416,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,cbrt,f128,fltx,fltx,fltx bl::f128,bl::cbrt,8195,108.530914443,105.003065,103.988941,2,2,13.988941,yes,Both,yes,71.891276,,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,cbrt,f128,qdpp,ddreal,qdpp dd_real,qdpp nroot,8195,101.532983832,89.370444,89.005643,1,2,-0.994357,no,NaN,no,150.863211,2.098491,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,cbrt,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,8195,115.032863938,113.203933,113.021191,2,2,23.021191,yes,No,no,1585.563151,22.055015,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,hypot,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,8195,121.944215111,104.898769,104.258205,2,2,14.258205,yes,Both,yes,488.968913,53.782722,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,hypot,f128,fltx,fltx,fltx bl::f128,bl::hypot,8195,122.379344938,105.55647,104.375984,2,2,14.375984,yes,Both,yes,9.091561,,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,hypot,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,8195,128.957366847,113.150622,113.012814,2,2,23.012814,yes,No,yes,210.510254,23.154467,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,ipow,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",8195,106.377664118,103.455996,102.733123,2,2,12.733123,yes,Both,no,580.26123,31.895339,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,ipow,f128,fltx,fltx,fltx bl::f128,bl::ipow,8195,106.491467825,103.779117,103.190083,2,2,13.190083,yes,Both,no,18.192665,,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,ipow,f128,qdpp,ddreal,qdpp dd_real,qdpp npwr,8195,106.475948653,103.777298,103.184609,2,2,13.184609,yes,NaN,no,10.964369,0.602681,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,pow,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,8198,102.6075455,98.689822,97.605813,2,2,17.605813,yes,Inf,no,4411.71875,20.028522,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,pow,f128,fltx,fltx,fltx bl::f128,bl::pow,8198,107.1276135,102.267431,101.314349,2,2,21.314349,yes,Both,yes,220.27181,,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,pow,f128,qdpp,ddreal,qdpp dd_real,qdpp pow,8198,106.79005,101.68773,101.002017,2,2,21.002017,yes,No,no,462.314453,2.098836,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,pow,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,8198,114.938032,113.162316,113.016553,2,2,33.016553,yes,No,no,5569.628906,25.285255,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,sqr,f128,fltx,fltx,fltx bl::f128,bl::sqr,8195,108.712755765,105.598081,105.370295,2,2,15.370295,yes,Both,yes,1.226281,,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,sqr,f128,qdpp,ddreal,qdpp dd_real,qdpp sqr,8195,108.650116271,105.598081,105.370295,2,2,15.370295,yes,NaN,yes,1.408709,1.148765,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,sqrt,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,16391,113.552288395,54.203493,52.856137,2,4,-37.143863,no,Both,no,27.647095,5.414286,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,sqrt,f128,fltx,fltx,fltx bl::f128,bl::sqrt,16391,109.749936251,105.75112,104.669867,4,4,14.669867,yes,Both,yes,5.106323,,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,sqrt,f128,qdpp,ddreal,qdpp dd_real,qdpp sqrt,16391,92.6291834271,52.16202,49.046704,2,4,-40.953296,no,NaN,no,5.385068,1.054588,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,sqrt,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,16391,115.16223339,113.1397,113.011246,4,4,23.011246,yes,No,no,132.178955,25.885348,1bc36f9be0894bcfb934a2e01311a61e +rounding,ceil,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ceil,4108,inf,inf,inf,1,1,inf,yes,Both,no,3.188322,1.880228,1bc36f9be0894bcfb934a2e01311a61e +rounding,ceil,f128,fltx,fltx,fltx bl::f128,bl::ceil,4108,inf,inf,inf,1,1,inf,yes,Both,yes,1.695711,,1bc36f9be0894bcfb934a2e01311a61e +rounding,ceil,f128,qdpp,ddreal,qdpp dd_real,qdpp ceil,4108,inf,inf,inf,1,1,inf,yes,Both,no,0.924828,0.545393,1bc36f9be0894bcfb934a2e01311a61e +rounding,ceil,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::ceil,4108,inf,inf,inf,1,1,inf,yes,No,no,7.435981,4.385171,1bc36f9be0894bcfb934a2e01311a61e +rounding,floor,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::floor,4108,inf,inf,inf,1,1,inf,yes,Both,no,0.983716,0.912953,1bc36f9be0894bcfb934a2e01311a61e +rounding,floor,f128,fltx,fltx,fltx bl::f128,bl::floor,4108,inf,inf,inf,1,1,inf,yes,Both,yes,1.07751,,1bc36f9be0894bcfb934a2e01311a61e +rounding,floor,f128,qdpp,ddreal,qdpp dd_real,qdpp floor,4108,inf,inf,inf,1,1,inf,yes,Both,no,0.969734,0.899977,1bc36f9be0894bcfb934a2e01311a61e +rounding,floor,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::floor,4108,inf,inf,inf,1,1,inf,yes,No,no,7.21431,6.695352,1bc36f9be0894bcfb934a2e01311a61e +rounding,llround,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::llround,4114,inf,inf,inf,1,1,inf,yes,-,-,160.266113,49.680384,1bc36f9be0894bcfb934a2e01311a61e +rounding,llround,f128,fltx,fltx,fltx bl::f128,bl::llround,4114,inf,inf,inf,1,1,inf,yes,-,-,3.225944,,1bc36f9be0894bcfb934a2e01311a61e +rounding,lround,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lround,4110,inf,inf,inf,1,1,inf,yes,-,-,19.346469,5.699979,1bc36f9be0894bcfb934a2e01311a61e +rounding,lround,f128,fltx,fltx,fltx bl::f128,bl::lround,4110,inf,inf,inf,1,1,inf,yes,-,-,3.39413,,1bc36f9be0894bcfb934a2e01311a61e +rounding,round,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::round,4108,inf,inf,inf,1,1,inf,yes,Both,no,8.829901,0.877987,1bc36f9be0894bcfb934a2e01311a61e +rounding,round,f128,fltx,fltx,fltx bl::f128,bl::round,4108,inf,inf,inf,1,1,inf,yes,Both,yes,10.056988,,1bc36f9be0894bcfb934a2e01311a61e +rounding,round,f128,qdpp,ddreal,qdpp dd_real,qdpp round,4108,130.441577,0,0,0,1,-80,no,Both,no,10.476956,1.041759,1bc36f9be0894bcfb934a2e01311a61e +rounding,round,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::round,4108,inf,inf,inf,1,1,inf,yes,No,no,10.157006,1.009945,1bc36f9be0894bcfb934a2e01311a61e +rounding,round_decimals,f128,fltx,fltx,fltx bl::f128,bl::round_decimals,4099,110.177573,107.236356,107.022726,1,1,17.022726,yes,Both,yes,79.360727,,1bc36f9be0894bcfb934a2e01311a61e +rounding,round_significant,f128,fltx,fltx,fltx bl::f128,bl::round_significant,4096,121.33026,107.34042,107.049597,1,1,17.049597,yes,Both,yes,113.731689,,1bc36f9be0894bcfb934a2e01311a61e +rounding,roundeven,f128,fltx,fltx,fltx bl::f128,bl::roundeven,4108,inf,inf,inf,1,1,inf,yes,Both,yes,7.796094,,1bc36f9be0894bcfb934a2e01311a61e +rounding,roundeven,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::rint,4108,inf,inf,inf,1,1,inf,yes,No,no,10.331055,1.325158,1bc36f9be0894bcfb934a2e01311a61e +rounding,trunc,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::trunc,4108,inf,inf,inf,1,1,inf,yes,Both,no,6.098348,2.246601,1bc36f9be0894bcfb934a2e01311a61e +rounding,trunc,f128,fltx,fltx,fltx bl::f128,bl::trunc,4108,inf,inf,inf,1,1,inf,yes,Both,yes,2.714478,,1bc36f9be0894bcfb934a2e01311a61e +rounding,trunc,f128,qdpp,ddreal,qdpp dd_real,qdpp aint,4108,inf,inf,inf,1,1,inf,yes,Both,no,3.505132,1.291273,1bc36f9be0894bcfb934a2e01311a61e +rounding,trunc,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::trunc,4108,inf,inf,inf,1,1,inf,yes,No,no,5.748254,2.117628,1bc36f9be0894bcfb934a2e01311a61e +special_functions,erf,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,8198,110.089223,102.183057,101.184994,2,2,21.184994,yes,Both,no,8003.046875,10.148576,1bc36f9be0894bcfb934a2e01311a61e +special_functions,erf,f128,fltx,fltx,fltx bl::f128,bl::erf,8198,110.8988915,104.260004,103.47754,2,2,23.47754,yes,Both,yes,788.58817,,1bc36f9be0894bcfb934a2e01311a61e +special_functions,erf,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,8198,115.2497885,113.304511,113.036088,2,2,33.036088,yes,Inf,no,34451.5625,43.687648,1bc36f9be0894bcfb934a2e01311a61e +special_functions,erfc,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,8198,106.293768,99.620228,99.060329,2,2,19.060329,yes,Both,-,7994.84375,10.110837,1bc36f9be0894bcfb934a2e01311a61e +special_functions,erfc,f128,fltx,fltx,fltx bl::f128,bl::erfc,8198,107.1893035,100.123363,99.167646,2,2,19.167646,yes,Both,-,790.720274,,1bc36f9be0894bcfb934a2e01311a61e +special_functions,erfc,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,8198,115.0926585,113.21381,113.051599,2,2,33.051599,yes,Inf,-,34464.0625,43.585657,1bc36f9be0894bcfb934a2e01311a61e +special_functions,lgamma,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lgamma,4099,105.133098,100.76058,92.065791,1,1,12.065791,yes,Both,-,21707.03125,35.214267,1bc36f9be0894bcfb934a2e01311a61e +special_functions,lgamma,f128,fltx,fltx,fltx bl::f128,bl::lgamma,4099,107.30017,103.199673,102.168212,1,1,22.168212,yes,Both,-,616.427176,,1bc36f9be0894bcfb934a2e01311a61e +special_functions,lgamma,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::lgamma,4099,114.971639,113.175643,113.01385,1,1,33.01385,yes,No,-,25001.5625,40.558826,1bc36f9be0894bcfb934a2e01311a61e +special_functions,tgamma,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tgamma,4099,100.755821,97.38341,96.496549,1,1,16.496549,yes,Both,-,17561.71875,31.300151,1bc36f9be0894bcfb934a2e01311a61e +special_functions,tgamma,f128,fltx,fltx,fltx bl::f128,bl::tgamma,4099,105.565044,98.349598,97.317514,1,1,17.317514,yes,Both,-,561.074561,,1bc36f9be0894bcfb934a2e01311a61e +special_functions,tgamma,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::tgamma,4099,115.005599,113.180213,113.028818,1,1,33.028818,yes,No,-,27765.625,49.486516,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,acos,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,8204,106.944366195,104.125181,103.073651,2,2,23.073651,yes,Both,-,24821.777344,127.742943,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,acos,f128,fltx,fltx,fltx bl::f128,bl::acos,8204,106.470630111,95.825547,81.584963,2,2,1.584963,yes,Both,-,194.310361,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,acos,f128,qdpp,ddreal,qdpp dd_real,qdpp acos,8204,108.077772253,104.37615,103.255774,2,2,23.255774,yes,No,-,412.384588,2.122299,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,acos,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,8204,114.925291168,113.171158,113.019157,2,2,33.019157,yes,No,-,2980.078125,15.336692,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,asin,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,8204,106.750455707,104.045565,103.474829,2,2,23.474829,yes,Both,no,25445.849609,134.447569,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,asin,f128,fltx,fltx,fltx bl::f128,bl::asin,8204,108.580073592,105.096123,104.081582,2,2,24.081582,yes,Both,yes,189.262251,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,asin,f128,qdpp,ddreal,qdpp dd_real,qdpp asin,8204,108.039883083,103.502594,102.376736,2,2,22.376736,yes,No,no,402.83647,2.128457,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,asin,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,8204,115.030420086,113.199623,113.012058,2,2,33.012058,yes,No,no,2953.808594,15.606961,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,8198,106.716552,104.193031,103.565475,2,2,23.565475,yes,Both,no,4407.861328,32.185948,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan,f128,fltx,fltx,fltx bl::f128,bl::atan,8198,108.728555,105.953468,104.92639,2,2,24.92639,yes,Both,yes,136.94987,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan,f128,qdpp,ddreal,qdpp dd_real,qdpp atan,8198,107.1654575,103.455087,102.91505,2,2,22.91505,yes,No,no,314.777483,2.298487,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,8198,114.987901,113.253632,113.035851,2,2,33.035851,yes,Inf,no,2631.225586,19.213056,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan2,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,8206,106.701442375,0,0,2,3,-80,no,Both,no,4226.318359,29.33393,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan2,f128,fltx,fltx,fltx bl::f128,bl::atan2,8206,108.727143624,105.799026,104.520841,3,3,24.520841,yes,Both,yes,144.076102,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan2,f128,qdpp,ddreal,qdpp dd_real,qdpp atan2,8206,106.832156079,0,0,2,3,-80,no,No,no,316.929408,2.199736,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan2,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,8206,114.953607052,113.169783,113.0059,3,3,33.0059,yes,Inf,no,2594.165039,18.005519,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,cos,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,12524,63.2693933828,0,0,1,3,-80,no,Both,-,6894.482422,68.168424,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,cos,f128,fltx,fltx,fltx bl::f128,bl::cos,12524,113.520718505,100.266388,99.209588,3,3,19.209588,yes,Both,-,101.138944,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,cos,f128,qdpp,ddreal,qdpp dd_real,qdpp cos,12524,63.5638236043,0,0,1,3,-80,no,Both,-,243.706597,2.409622,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,cos,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,12524,117.223146672,113.213457,113.01099,3,3,33.01099,yes,No,-,1842.513021,18.217641,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,sin,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,12524,51.3516367719,0,0,1,3,-80,no,Both,no,6912.548828,68.319439,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,sin,f128,fltx,fltx,fltx bl::f128,bl::sin,12524,110.553532277,98.777563,98.619216,3,3,18.619216,yes,Both,yes,101.179824,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,sin,f128,qdpp,ddreal,qdpp dd_real,qdpp sin,12524,52.4625291042,0,0,1,3,-80,no,Both,no,243.431181,2.405926,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,sin,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,12524,116.147164931,113.247632,113.016004,3,3,33.016004,yes,No,no,1845.035807,18.235215,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,sincos,f128,fltx,fltx,fltx bl::f128,bl::sincos,,,,,,,,,-,-,107.06936,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,sincos,f128,qdpp,ddreal,qdpp dd_real,qdpp sincos,,,,,,,,,-,-,239.100477,2.233136,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,sincos,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::sincos,,,,,,,,,-,-,3738.598633,34.91754,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,tan,f128,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,12524,41.1613259056,0,0,1,3,-75,no,Both,no,13896.533203,128.978621,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,tan,f128,fltx,fltx,fltx bl::f128,bl::tan,12524,106.705038797,98.776698,98.614153,3,3,23.614153,yes,Both,yes,107.74292,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,tan,f128,qdpp,ddreal,qdpp dd_real,qdpp tan,12524,42.6351998414,0,0,1,3,-75,no,No,no,262.258732,2.434116,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,tan,f128,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,12524,114.951330489,113.144915,113.016302,3,3,38.016302,yes,No,no,2194.360352,20.366632,1bc36f9be0894bcfb934a2e01311a61e diff --git a/validation/metrics/data/windows/x86_64/MinGW_f128_fastmath.csv b/validation/metrics/data/windows/x86_64/MinGW_f128_fastmath.csv new file mode 100644 index 0000000..c66bcd3 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/MinGW_f128_fastmath.csv @@ -0,0 +1,86 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f128,fltx,fltx,fltx bl::f128,bl::add,4096,119.432860003,0,0,1,2,-90,no,NaN,no,1.821623,,1f47748c24e4435f9d017479a2e54bbd +arithmetic,divide,f128,fltx,fltx,fltx bl::f128,bl::divide,4100,110.827986668,54,54,1,2,-36,no,NaN,no,2.110766,,1f47748c24e4435f9d017479a2e54bbd +arithmetic,multiply,f128,fltx,fltx,fltx bl::f128,bl::multiply,4100,108.568796219,54,54,1,2,-36,no,NaN,no,2.169176,,1f47748c24e4435f9d017479a2e54bbd +arithmetic,subtract,f128,fltx,fltx,fltx bl::f128,bl::subtract,4096,119.347466226,0,0,1,2,-90,no,NaN,no,1.824364,,1f47748c24e4435f9d017479a2e54bbd +comparisons,equal,f128,fltx,fltx,fltx bl::f128,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.818484,,1f47748c24e4435f9d017479a2e54bbd +comparisons,greater,f128,fltx,fltx,fltx bl::f128,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.059767,,1f47748c24e4435f9d017479a2e54bbd +comparisons,greater_equal,f128,fltx,fltx,fltx bl::f128,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.008519,,1f47748c24e4435f9d017479a2e54bbd +comparisons,less,f128,fltx,fltx,fltx bl::f128,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.209771,,1f47748c24e4435f9d017479a2e54bbd +comparisons,less_equal,f128,fltx,fltx,fltx bl::f128,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.149067,,1f47748c24e4435f9d017479a2e54bbd +comparisons,not_equal,f128,fltx,fltx,fltx bl::f128,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.922221,,1f47748c24e4435f9d017479a2e54bbd +exponentials,exp,f128,fltx,fltx,fltx bl::f128,bl::exp,8198,106.8743695,104.276578,103.64511,2,2,23.64511,yes,Both,-,110.194227,,1f47748c24e4435f9d017479a2e54bbd +exponentials,exp2,f128,fltx,fltx,fltx bl::f128,bl::exp2,8198,108.8963935,106.013023,105.117537,2,2,25.117537,yes,Both,-,101.621344,,1f47748c24e4435f9d017479a2e54bbd +exponentials,expm1,f128,fltx,fltx,fltx bl::f128,bl::expm1,8197,121.61686848,105.111574,104.102752,2,2,24.102752,yes,Both,yes,108.707242,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,abs,f128,fltx,fltx,fltx bl::f128,bl::abs,8196,104.426061469,0,0,1,2,-90,no,Both,no,0.537497,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,copysign,f128,fltx,fltx,fltx bl::f128,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,1.034325,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,fabs,f128,fltx,fltx,fltx bl::f128,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,no,0.376619,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,fdim,f128,fltx,fltx,fltx bl::f128,bl::fdim,8197,137.996123973,inf,106.227061,2,2,16.227061,yes,Both,yes,2.752651,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,fma,f128,fltx,fltx,fltx bl::f128,bl::fma,12293,117.44188202,104.680325,99.5802,3,3,9.5802,yes,Both,no,8.214162,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,fmax,f128,fltx,fltx,fltx bl::f128,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,Inf,yes,0.820997,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,fmin,f128,fltx,fltx,fltx bl::f128,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,Inf,yes,0.818994,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,frexp,f128,fltx,fltx,fltx bl::f128,bl::frexp,8196,70.6163984505,0,0,1,2,-90,no,Both,yes,1.816078,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,ilogb,f128,fltx,fltx,fltx bl::f128,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.19319,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,ldexp,f128,fltx,fltx,fltx bl::f128,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.291592,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,logb,f128,fltx,fltx,fltx bl::f128,bl::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,1.24016,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,modf,f128,fltx,fltx,fltx bl::f128,bl::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,5.55057,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,nextafter,f128,fltx,fltx,fltx bl::f128,bl::nextafter,,,,,,,,,-,-,4.415737,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,nexttoward,f128,fltx,fltx,fltx bl::f128,bl::nexttoward,,,,,,,,,-,-,4.582252,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,recip,f128,fltx,fltx,fltx bl::f128,bl::recip,8195,109.025331959,105.925795,105.189487,2,2,15.189487,yes,Inf,yes,31.71638,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,scalbln,f128,fltx,fltx,fltx bl::f128,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.257744,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,scalbn,f128,fltx,fltx,fltx bl::f128,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.256482,,1f47748c24e4435f9d017479a2e54bbd +hyperbolic,cosh,f128,fltx,fltx,fltx bl::f128,bl::cosh,8198,107.9070545,105.118172,104.370708,2,2,24.370708,yes,Both,-,123.605526,,1f47748c24e4435f9d017479a2e54bbd +hyperbolic,sinh,f128,fltx,fltx,fltx bl::f128,bl::sinh,8198,107.4201585,104.726423,103.568829,2,2,23.568829,yes,Both,yes,124.67804,,1f47748c24e4435f9d017479a2e54bbd +hyperbolic,tanh,f128,fltx,fltx,fltx bl::f128,bl::tanh,8198,109.217494,105.123457,103.771823,2,2,23.771823,yes,Both,yes,129.320502,,1f47748c24e4435f9d017479a2e54bbd +inverse_hyperbolic,acosh,f128,fltx,fltx,fltx bl::f128,bl::acosh,8200,108.031852794,104.331717,103.672888,2,2,23.672888,yes,Both,-,163.232422,,1f47748c24e4435f9d017479a2e54bbd +inverse_hyperbolic,asinh,f128,fltx,fltx,fltx bl::f128,bl::asinh,8198,108.081857,105.155677,103.818628,2,2,23.818628,yes,Both,yes,138.372171,,1f47748c24e4435f9d017479a2e54bbd +inverse_hyperbolic,atanh,f128,fltx,fltx,fltx bl::f128,bl::atanh,8204,108.11583849,104.54201,103.139045,2,2,23.139045,yes,Both,yes,163.423978,,1f47748c24e4435f9d017479a2e54bbd +io,parse,f128,fltx,fltx,fltx bl::f128,bl::parse,8195,109.907318229,106.715617,106.003381,2,2,0.003381,yes,Both,yes,199.426689,,1f47748c24e4435f9d017479a2e54bbd +io,to_chars,f128,fltx,fltx,fltx bl::f128,bl::to_chars,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,199.984475,,1f47748c24e4435f9d017479a2e54bbd +io,to_string,f128,fltx,fltx,fltx bl::f128,bl::to_string,8195,113.981524548,110.936216,110.695372,2,2,20.695372,yes,Both,yes,240.581714,,1f47748c24e4435f9d017479a2e54bbd +logarithms,log,f128,fltx,fltx,fltx bl::f128,bl::log,12291,108.387070195,104.535157,103.727726,3,3,23.727726,yes,Both,-,138.11744,,1f47748c24e4435f9d017479a2e54bbd +logarithms,log10,f128,fltx,fltx,fltx bl::f128,bl::log10,12291,107.485335382,104.429728,103.762278,3,3,23.762278,yes,Both,-,144.788411,,1f47748c24e4435f9d017479a2e54bbd +logarithms,log1p,f128,fltx,fltx,fltx bl::f128,bl::log1p,8197,121.372231555,105.150365,103.619384,2,2,23.619384,yes,Both,yes,150.549316,,1f47748c24e4435f9d017479a2e54bbd +logarithms,log2,f128,fltx,fltx,fltx bl::f128,bl::log2,12291,108.772162753,104.466398,103.716432,3,3,23.716432,yes,Both,-,143.079427,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,affine_trig,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,217.339819,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,chained_arithmetic,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,22.793631,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,haversine,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,532.112488,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,horner_polynomial,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,101.755137,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,log_sum_exp,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,900.184124,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,mandelbrot,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,17.984836,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,matrix_vector_4x4,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,80.671738,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,newton_root,f128,fltx,fltx,fltx bl::f128,same workload,,,,,,,,,-,-,30.100806,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,product_sum,f128,fltx,fltx,fltx bl::f128,bl::product_sum,,,,,,,,,-,-,7.491246,,1f47748c24e4435f9d017479a2e54bbd +random,mt19937_64,f128,fltx,fltx,fltx bl::f128,bl::mt19937_64,,,,,,,,,-,-,5.103804,,1f47748c24e4435f9d017479a2e54bbd +random,normal,f128,fltx,fltx,fltx bl::f128,bl::normal,,,,,,,,,-,-,108.64367,,1f47748c24e4435f9d017479a2e54bbd +random,uniform_real,f128,fltx,fltx,fltx bl::f128,bl::uniform_real,,,,,,,,,-,-,21.126511,,1f47748c24e4435f9d017479a2e54bbd +remainders,fmod,f128,fltx,fltx,fltx bl::f128,bl::fmod,8197,inf,inf,inf,3,3,inf,yes,Both,yes,18.802717,,1f47748c24e4435f9d017479a2e54bbd +remainders,remainder,f128,fltx,fltx,fltx bl::f128,bl::remainder,4099,137.991491,inf,103.120938,1,1,13.120938,yes,Both,yes,20.000919,,1f47748c24e4435f9d017479a2e54bbd +remainders,remquo,f128,fltx,fltx,fltx bl::f128,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,20.164356,,1f47748c24e4435f9d017479a2e54bbd +roots_and_powers,cbrt,f128,fltx,fltx,fltx bl::f128,bl::cbrt,8195,108.530914443,105.003065,103.988941,2,2,13.988941,yes,Both,yes,73.364672,,1f47748c24e4435f9d017479a2e54bbd +roots_and_powers,hypot,f128,fltx,fltx,fltx bl::f128,bl::hypot,8195,122.379786777,105.55647,104.375984,2,2,14.375984,yes,Both,no,8.943954,,1f47748c24e4435f9d017479a2e54bbd +roots_and_powers,ipow,f128,fltx,fltx,fltx bl::f128,bl::ipow,8195,106.491467825,103.779117,103.190083,2,2,13.190083,yes,Both,no,18.201144,,1f47748c24e4435f9d017479a2e54bbd +roots_and_powers,pow,f128,fltx,fltx,fltx bl::f128,bl::pow,8198,107.1276135,102.267431,101.314349,2,2,21.314349,yes,Both,yes,219.243707,,1f47748c24e4435f9d017479a2e54bbd +roots_and_powers,sqr,f128,fltx,fltx,fltx bl::f128,bl::sqr,8195,108.712755765,105.598081,105.370295,2,2,15.370295,yes,Both,yes,1.457811,,1f47748c24e4435f9d017479a2e54bbd +roots_and_powers,sqrt,f128,fltx,fltx,fltx bl::f128,bl::sqrt,16391,116.463121566,105.75112,104.669867,4,4,14.669867,yes,Both,yes,5.191481,,1f47748c24e4435f9d017479a2e54bbd +rounding,ceil,f128,fltx,fltx,fltx bl::f128,bl::ceil,4108,inf,inf,inf,1,1,inf,yes,Both,no,1.511504,,1f47748c24e4435f9d017479a2e54bbd +rounding,floor,f128,fltx,fltx,fltx bl::f128,bl::floor,4108,inf,inf,inf,1,1,inf,yes,Both,yes,1.010621,,1f47748c24e4435f9d017479a2e54bbd +rounding,llround,f128,fltx,fltx,fltx bl::f128,bl::llround,4114,inf,inf,inf,1,1,inf,yes,-,-,3.248772,,1f47748c24e4435f9d017479a2e54bbd +rounding,lround,f128,fltx,fltx,fltx bl::f128,bl::lround,4110,inf,inf,inf,1,1,inf,yes,-,-,3.408705,,1f47748c24e4435f9d017479a2e54bbd +rounding,round,f128,fltx,fltx,fltx bl::f128,bl::round,4108,inf,inf,inf,1,1,inf,yes,Both,yes,10.187217,,1f47748c24e4435f9d017479a2e54bbd +rounding,round_decimals,f128,fltx,fltx,fltx bl::f128,bl::round_decimals,4099,110.177573,107.236356,107.022726,1,1,17.022726,yes,Both,yes,78.226144,,1f47748c24e4435f9d017479a2e54bbd +rounding,round_significant,f128,fltx,fltx,fltx bl::f128,bl::round_significant,4096,121.33026,107.34042,107.049597,1,1,17.049597,yes,Both,yes,112.694092,,1f47748c24e4435f9d017479a2e54bbd +rounding,roundeven,f128,fltx,fltx,fltx bl::f128,bl::roundeven,4108,inf,inf,inf,1,1,inf,yes,Both,yes,6.738462,,1f47748c24e4435f9d017479a2e54bbd +rounding,trunc,f128,fltx,fltx,fltx bl::f128,bl::trunc,4108,inf,inf,inf,1,1,inf,yes,Both,yes,1.624202,,1f47748c24e4435f9d017479a2e54bbd +special_functions,erf,f128,fltx,fltx,fltx bl::f128,bl::erf,8198,110.8988915,104.260004,103.47754,2,2,23.47754,yes,Both,yes,785.819404,,1f47748c24e4435f9d017479a2e54bbd +special_functions,erfc,f128,fltx,fltx,fltx bl::f128,bl::erfc,8198,107.1893035,100.123363,99.167646,2,2,19.167646,yes,Both,-,782.821801,,1f47748c24e4435f9d017479a2e54bbd +special_functions,lgamma,f128,fltx,fltx,fltx bl::f128,bl::lgamma,4099,107.30017,103.199673,102.168212,1,1,22.168212,yes,Both,-,621.732955,,1f47748c24e4435f9d017479a2e54bbd +special_functions,tgamma,f128,fltx,fltx,fltx bl::f128,bl::tgamma,4099,105.565044,98.349598,97.317514,1,1,17.317514,yes,Both,-,564.507004,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,acos,f128,fltx,fltx,fltx bl::f128,bl::acos,8204,106.470630111,95.825547,81.584963,2,2,1.584963,yes,Both,-,194.495739,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,asin,f128,fltx,fltx,fltx bl::f128,bl::asin,8204,108.580073592,105.096123,104.081582,2,2,24.081582,yes,Both,yes,189.293324,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,atan,f128,fltx,fltx,fltx bl::f128,bl::atan,8198,108.728555,105.953468,104.92639,2,2,24.92639,yes,Both,yes,137.018019,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,atan2,f128,fltx,fltx,fltx bl::f128,bl::atan2,8206,108.727143624,105.799026,104.520841,3,3,24.520841,yes,Both,yes,144.128418,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,cos,f128,fltx,fltx,fltx bl::f128,bl::cos,12524,113.520718505,100.266388,99.209588,3,3,19.209588,yes,Both,-,101.039163,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,sin,f128,fltx,fltx,fltx bl::f128,bl::sin,12524,110.553532277,98.777563,98.619216,3,3,18.619216,yes,Both,yes,101.540411,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,sincos,f128,fltx,fltx,fltx bl::f128,bl::sincos,,,,,,,,,-,-,107.501221,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,tan,f128,fltx,fltx,fltx bl::f128,bl::tan,12524,106.705038797,98.776698,98.614153,3,3,23.614153,yes,Both,yes,108.02124,,1f47748c24e4435f9d017479a2e54bbd diff --git a/validation/metrics/data/windows/x86_64/MinGW_f256.csv b/validation/metrics/data/windows/x86_64/MinGW_f256.csv new file mode 100644 index 0000000..fe23323 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/MinGW_f256.csv @@ -0,0 +1,294 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f256,fltx,fltx,fltx bl::f256,bl::add,4096,227.373862582,215.583815,215.297307,2,2,25.297307,yes,Both,no,10.516871,,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,add,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator+,4096,225.042084562,214.179406,214.011982,2,2,24.011982,yes,Both,yes,58.004761,5.515401,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,add,f256,qdpp,qdreal,qdpp qd_real,qdpp operator+,4096,227.373636161,215.583815,215.297307,2,2,25.297307,yes,NaN,no,21.912842,2.083589,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,add,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,4096,253.089090895,237.252454,237.007687,2,2,47.007687,yes,No,no,126.029053,11.983512,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,divide,f256,fltx,fltx,fltx bl::f256,bl::divide,4100,219.220520548,215.287455,214.762066,2,2,24.762066,yes,Both,yes,107.009277,,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,divide,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,4100,215.996290938,214.166285,214.002285,2,2,24.002285,yes,Both,yes,111.942139,1.046098,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,divide,f256,qdpp,qdreal,qdpp qd_real,qdpp operator/,4100,218.667860159,172.169377,172.169377,1,2,-17.830623,no,NaN,no,304.470215,2.845269,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,divide,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,4100,239.032664965,237.154132,237.0253,2,2,47.0253,yes,No,no,337.341309,3.152449,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,multiply,f256,fltx,fltx,fltx bl::f256,bl::multiply,4100,220.046096951,215.608028,215.221541,2,2,25.221541,yes,Both,yes,23.15625,,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,multiply,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator*,4100,215.992910439,214.146637,214.012662,2,2,24.012662,yes,Both,yes,88.928223,3.840355,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,multiply,f256,qdpp,qdreal,qdpp qd_real,qdpp operator*,4100,220.046096951,215.608028,215.221541,2,2,25.221541,yes,Both,no,36.888021,1.593005,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,multiply,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,4100,239.007243732,237.076391,237.006898,2,2,47.006898,yes,No,no,121.015625,5.226046,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,subtract,f256,fltx,fltx,fltx bl::f256,bl::subtract,4096,227.447841785,215.602949,215.220788,2,2,25.220788,yes,Both,no,10.410927,,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,subtract,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator-,4096,225.206569338,214.220914,214.046715,2,2,24.046715,yes,Both,yes,58.461914,5.615438,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,subtract,f256,qdpp,qdreal,qdpp qd_real,qdpp operator-,4096,227.446239681,215.602917,214.95904,2,2,24.95904,yes,NaN,no,22.178467,2.130307,1bc36f9be0894bcfb934a2e01311a61e +arithmetic,subtract,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,4096,253.263648725,237.248925,237.000122,2,2,47.000122,yes,No,no,125.196533,12.025493,1bc36f9be0894bcfb934a2e01311a61e +comparisons,equal,f256,fltx,fltx,fltx bl::f256,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.666876,,1bc36f9be0894bcfb934a2e01311a61e +comparisons,equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.560872,9.838213,1bc36f9be0894bcfb934a2e01311a61e +comparisons,equal,f256,qdpp,qdreal,qdpp qd_real,qdpp operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.497504,0.746022,1bc36f9be0894bcfb934a2e01311a61e +comparisons,equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator==,8198,inf,inf,inf,1,1,inf,yes,Both,-,64.830322,97.214891,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater,f256,fltx,fltx,fltx bl::f256,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.68559,,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.531077,9.526212,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater,f256,qdpp,qdreal,qdpp qd_real,qdpp operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.526507,0.767961,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator>,8198,inf,inf,inf,1,1,inf,yes,Both,-,64.672852,94.331655,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater_equal,f256,fltx,fltx,fltx bl::f256,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.685543,,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater_equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.429084,9.378095,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater_equal,f256,qdpp,qdreal,qdpp qd_real,qdpp operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.560411,0.817471,1bc36f9be0894bcfb934a2e01311a61e +comparisons,greater_equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator>=,8198,inf,inf,inf,1,1,inf,yes,Both,-,64.590454,94.217988,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less,f256,fltx,fltx,fltx bl::f256,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.701605,,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.591167,9.394419,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less,f256,qdpp,qdreal,qdpp qd_real,qdpp operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.51754,0.737653,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator<,8198,inf,inf,inf,1,1,inf,yes,Both,-,64.667969,92.171535,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less_equal,f256,fltx,fltx,fltx bl::f256,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.712379,,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less_equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.341812,8.902306,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less_equal,f256,qdpp,qdreal,qdpp qd_real,qdpp operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.512244,0.719061,1bc36f9be0894bcfb934a2e01311a61e +comparisons,less_equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator<=,8198,inf,inf,inf,1,1,inf,yes,Both,-,64.580078,90.654165,1bc36f9be0894bcfb934a2e01311a61e +comparisons,not_equal,f256,fltx,fltx,fltx bl::f256,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.73972,,1bc36f9be0894bcfb934a2e01311a61e +comparisons,not_equal,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,6.338465,8.568741,1bc36f9be0894bcfb934a2e01311a61e +comparisons,not_equal,f256,qdpp,qdreal,qdpp qd_real,qdpp operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.483169,0.653179,1bc36f9be0894bcfb934a2e01311a61e +comparisons,not_equal,f256,tlfloat,tloct,TLFloat Octuple,TLFloat operator!=,8198,inf,inf,inf,1,1,inf,yes,Both,-,64.596558,87.325746,1bc36f9be0894bcfb934a2e01311a61e +exponentials,exp,f256,fltx,fltx,fltx bl::f256,bl::exp,8198,216.736722,209.997559,208.947269,2,2,28.947269,yes,Both,-,1077.91748,,1bc36f9be0894bcfb934a2e01311a61e +exponentials,exp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,8198,215.9253875,214.166296,214.006279,2,2,34.006279,yes,Both,-,1343.540737,1.246423,1bc36f9be0894bcfb934a2e01311a61e +exponentials,exp,f256,qdpp,qdreal,qdpp qd_real,qdpp exp,8198,216.5656735,209.985759,209.146866,2,2,29.146866,yes,Both,-,2824.739583,2.620553,1bc36f9be0894bcfb934a2e01311a61e +exponentials,exp,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,8198,238.9537585,237.149815,237.00489,2,2,57.00489,yes,No,-,4114.095052,3.816707,1bc36f9be0894bcfb934a2e01311a61e +exponentials,exp2,f256,fltx,fltx,fltx bl::f256,bl::exp2,8198,218.030361,214.973213,214.202868,2,2,34.202868,yes,Both,-,908.691406,,1bc36f9be0894bcfb934a2e01311a61e +exponentials,exp2,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,8198,215.974328,214.175518,214.035382,2,2,34.035382,yes,Both,-,1682.666016,1.851746,1bc36f9be0894bcfb934a2e01311a61e +exponentials,exp2,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,8198,238.9480035,237.174822,237.026426,2,2,57.026426,yes,No,-,10137.402344,11.156045,1bc36f9be0894bcfb934a2e01311a61e +exponentials,expm1,f256,fltx,fltx,fltx bl::f256,bl::expm1,8197,227.154452503,207.540568,207,2,2,27,yes,Both,yes,1072.973633,,1bc36f9be0894bcfb934a2e01311a61e +exponentials,expm1,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,8197,227.498351143,214.242848,214.018319,2,2,34.018319,yes,Both,yes,1528.141276,1.424211,1bc36f9be0894bcfb934a2e01311a61e +exponentials,expm1,f256,qdpp,qdreal,qdpp qd_real,qdpp expm1,8197,226.789374223,203.377948,0,1,2,-180,no,NaN,no,2809.228516,2.618171,1bc36f9be0894bcfb934a2e01311a61e +exponentials,expm1,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,8197,250.1283524,237.239921,237.036552,2,2,57.036552,yes,No,no,4255.924479,3.966476,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,abs,f256,fltx,fltx,fltx bl::f256,bl::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,1.582144,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,abs,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,39.743245,25.11987,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,abs,f256,qdpp,qdreal,qdpp qd_real,qdpp abs,8196,inf,inf,inf,2,2,inf,yes,Both,yes,1.413042,0.893118,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,abs,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,8196,inf,inf,inf,2,2,inf,yes,No,yes,4.956119,3.132534,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,copysign,f256,fltx,fltx,fltx bl::f256,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,0.682812,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,copysign,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,57.91748,84.822052,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,copysign,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::copysign,4099,inf,inf,inf,1,1,inf,yes,No,no,7.622962,11.164079,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fabs,f256,fltx,fltx,fltx bl::f256,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,1.600566,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fabs,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,40.098063,25.052431,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fabs,f256,qdpp,qdreal,qdpp qd_real,qdpp fabs,4099,inf,inf,inf,1,1,inf,yes,Both,yes,1.450021,0.905943,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fabs,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,4099,inf,inf,inf,1,1,inf,yes,No,yes,4.933986,3.082651,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fdim,f256,fltx,fltx,fltx bl::f256,bl::fdim,8197,inf,inf,inf,2,2,inf,yes,Both,yes,5.472039,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fdim,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,8197,243.650598918,214.093805,214.003121,2,2,24.003121,yes,No,yes,50.682129,9.262019,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fdim,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,8197,inf,inf,inf,2,2,inf,yes,No,yes,235.983887,43.125402,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fma,f256,fltx,fltx,fltx bl::f256,bl::fma,12293,229.715460613,215.654212,215.096656,3,3,25.096656,yes,Both,no,38.162435,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fma,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,12293,228.257765839,214.164686,214.017731,3,3,24.017731,yes,Both,yes,117.897949,3.089372,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fma,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,12293,251.060726483,237.157442,237.018361,3,3,47.018361,yes,No,no,215.080566,5.635924,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fmax,f256,fltx,fltx,fltx bl::f256,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,yes,1.632334,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fmax,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,8195,inf,inf,inf,2,2,inf,yes,Both,no,61.538696,37.699824,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fmax,f256,qdpp,qdreal,qdpp qd_real,qdpp max,8195,inf,inf,inf,2,2,inf,yes,Inf,yes,1.305177,0.799577,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fmax,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,8195,inf,inf,inf,2,2,inf,yes,No,no,98.581543,60.393005,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fmin,f256,fltx,fltx,fltx bl::f256,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,yes,1.528652,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fmin,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,8195,inf,inf,inf,2,2,inf,yes,Both,no,61.613159,40.30555,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fmin,f256,qdpp,qdreal,qdpp qd_real,qdpp min,8195,inf,inf,inf,2,2,inf,yes,Inf,no,1.266353,0.828412,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,fmin,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,8195,inf,inf,inf,2,2,inf,yes,No,no,99.047038,64.793713,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,frexp,f256,fltx,fltx,fltx bl::f256,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,10.66624,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,frexp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,98.38501,9.223964,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,frexp,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,8196,inf,inf,inf,2,2,inf,yes,No,no,223.164062,20.922468,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,ilogb,f256,fltx,fltx,fltx bl::f256,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,1.066212,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,ilogb,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,45.313965,42.499969,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,ilogb,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,31.930804,29.947902,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,ldexp,f256,fltx,fltx,fltx bl::f256,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.704102,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,ldexp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,48.025879,28.182521,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,ldexp,f256,qdpp,qdreal,qdpp qd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,18.555749,10.888875,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,ldexp,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::ldexp,4096,inf,inf,inf,1,1,inf,yes,No,no,66.085205,38.780086,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,logb,f256,fltx,fltx,fltx bl::f256,bl::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,1.077894,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,logb,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,98.890381,91.744082,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,modf,f256,fltx,fltx,fltx bl::f256,bl::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,14.709925,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,modf,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,235.214844,15.990214,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,modf,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,8195,inf,inf,inf,2,2,inf,yes,No,no,315.603027,21.455108,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,nextafter,f256,fltx,fltx,fltx bl::f256,bl::nextafter,,,,,,,,,-,-,4.644847,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,nextafter,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter,,,,,,,,,-,-,763.554688,164.387472,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,nextafter,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter,,,,,,,,,-,-,163.660889,35.234935,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,nexttoward,f256,fltx,fltx,fltx bl::f256,bl::nexttoward,,,,,,,,,-,-,4.443498,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,nexttoward,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter (same type),,,,,,,,,-,-,731.032715,164.517391,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,nexttoward,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter (same type),,,,,,,,,-,-,163.737793,36.84885,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,recip,f256,fltx,fltx,fltx bl::f256,bl::recip,8195,217.92444534,215.148048,214.625136,2,2,24.625136,yes,Both,yes,100.988188,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,recip,f256,qdpp,qdreal,qdpp qd_real,qdpp inv,8195,217.927920075,215.148048,214.625136,2,2,24.625136,yes,NaN,no,302.472796,2.99513,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,scalbln,f256,fltx,fltx,fltx bl::f256,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.697666,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,scalbln,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,47.709961,28.103265,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,scalbln,f256,qdpp,qdreal,qdpp qd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,18.555537,10.930027,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,scalbn,f256,fltx,fltx,fltx bl::f256,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,1.706172,,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,scalbn,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,47.525879,27.855266,1bc36f9be0894bcfb934a2e01311a61e +floating_point_utilities,scalbn,f256,qdpp,qdreal,qdpp qd_real,qdpp ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,no,18.565452,10.881348,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,cosh,f256,fltx,fltx,fltx bl::f256,bl::cosh,8198,217.5106305,214.737937,214.159072,2,2,34.159072,yes,Both,-,1360.867746,,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,cosh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,8198,215.916289,214.168922,214.000831,2,2,34.000831,yes,Both,-,1566.422526,1.151047,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,cosh,f256,qdpp,qdreal,qdpp qd_real,qdpp cosh,8198,217.2651715,214.536693,213.837789,2,2,33.837789,yes,NaN,-,3250.358073,2.388445,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,cosh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,8198,238.9208895,237.131226,237.021921,2,2,57.021921,yes,No,-,4438.916016,3.261828,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,sinh,f256,fltx,fltx,fltx bl::f256,bl::sinh,8198,217.022625,214.597984,213.844482,2,2,33.844482,yes,Both,yes,1361.425781,,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,sinh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,8198,215.9712865,214.162104,214.011597,2,2,34.011597,yes,Both,yes,1596.126302,1.172393,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,sinh,f256,qdpp,qdreal,qdpp qd_real,qdpp sinh,8198,216.7792535,214.156966,212.946933,2,2,32.946933,yes,NaN,no,3267.675781,2.400187,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,sinh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,8198,238.9375005,237.151916,237.012513,2,2,57.012513,yes,No,no,4810.791016,3.533642,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,tanh,f256,fltx,fltx,fltx bl::f256,bl::tanh,8198,219.128554,215.222392,214.042672,2,2,34.042672,yes,Both,yes,1315.513393,,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,tanh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,8198,216.1972415,214.274158,214.03864,2,2,34.03864,yes,Both,yes,1645.377604,1.250749,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,tanh,f256,qdpp,qdreal,qdpp qd_real,qdpp tanh,8198,218.9438785,214.599863,212.926362,2,2,32.926362,yes,Both,no,3233.854167,2.458245,1bc36f9be0894bcfb934a2e01311a61e +hyperbolic,tanh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,8198,239.191819,237.196358,237.059834,2,2,57.059834,yes,Inf,no,4700.537109,3.573158,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,acosh,f256,fltx,fltx,fltx bl::f256,bl::acosh,8200,217.720725959,214.442677,213.709421,2,2,33.709421,yes,Both,-,2547.802734,,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,acosh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,8200,215.92850099,214.197277,214.011139,2,2,34.011139,yes,Both,-,4438.525391,1.742099,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,acosh,f256,qdpp,qdreal,qdpp qd_real,qdpp acosh,8200,216.979723149,213.614093,0,0,2,-180,no,NaN,-,9531.835938,3.741199,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,acosh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,8200,238.873033639,237.183996,237.009868,2,2,57.009868,yes,No,-,18247.558594,7.162077,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,asinh,f256,fltx,fltx,fltx bl::f256,bl::asinh,8198,217.1921705,213.881562,212.956798,2,2,32.956798,yes,Both,yes,2757.845052,,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,asinh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,8198,215.877188,214.126921,214.013004,2,2,34.013004,yes,Both,yes,7274.853516,2.637876,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,asinh,f256,qdpp,qdreal,qdpp qd_real,qdpp asinh,8198,216.859306,213.748418,0,1,2,-180,no,NaN,no,8725.976562,3.164056,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,asinh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,8198,238.8906575,237.158686,237.026506,2,2,57.026506,yes,No,no,19422.851562,7.042764,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,atanh,f256,fltx,fltx,fltx bl::f256,bl::atanh,8204,218.285376518,214.164921,213.300563,2,2,33.300563,yes,Both,yes,2427.34375,,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,atanh,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,8204,216.191466866,214.156626,214.025325,2,2,34.025325,yes,Both,yes,3489.84375,1.437721,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,atanh,f256,qdpp,qdreal,qdpp qd_real,qdpp atanh,8204,217.674580345,213.781125,0,1,2,-180,no,Both,no,9354.589844,3.853838,1bc36f9be0894bcfb934a2e01311a61e +inverse_hyperbolic,atanh,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,8204,239.146882959,237.181152,237.021503,2,2,57.021503,yes,No,no,6364.892578,2.622164,1bc36f9be0894bcfb934a2e01311a61e +io,parse,f256,fltx,fltx,fltx bl::f256,bl::parse,8195,219.729492211,212.275332,212.017147,2,2,0.017147,yes,Both,yes,386.740668,,1bc36f9be0894bcfb934a2e01311a61e +io,parse,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,8195,215.952962068,214.158596,214.005374,2,2,2.005374,yes,Both,yes,319.042972,0.824953,1bc36f9be0894bcfb934a2e01311a61e +io,parse,f256,qdpp,qdreal,qdpp qd_real,qdpp read,8195,200.912792804,0,0,1,2,-212,no,NaN,yes,2395.852647,6.194985,1bc36f9be0894bcfb934a2e01311a61e +io,parse,f256,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,8195,238.941820354,237.169709,237.016125,2,2,25.016125,yes,No,no,10590.851427,27.384892,1bc36f9be0894bcfb934a2e01311a61e +io,to_chars,f256,fltx,fltx,fltx bl::f256,bl::to_chars,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,308.155299,,1bc36f9be0894bcfb934a2e01311a61e +io,to_chars,f256,qdpp,qdreal,qdpp qd_real,qdpp write,8195,218.809785834,210.961812,208.71213,2,2,18.71213,yes,Both,no,4158.916809,13.496172,1bc36f9be0894bcfb934a2e01311a61e +io,to_string,f256,fltx,fltx,fltx bl::f256,bl::to_string,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,347.366954,,1bc36f9be0894bcfb934a2e01311a61e +io,to_string,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,8195,220.316769484,217.209596,216.955609,2,2,26.955609,yes,Both,yes,513.613076,1.478589,1bc36f9be0894bcfb934a2e01311a61e +io,to_string,f256,qdpp,qdreal,qdpp qd_real,qdpp to_string,8195,218.809785834,210.961812,208.71213,2,2,18.71213,yes,Both,no,4156.745548,11.966439,1bc36f9be0894bcfb934a2e01311a61e +io,to_string,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,8195,216.91531064,213.966069,213.625754,2,2,23.625754,yes,Both,yes,14336.252745,41.271205,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log,f256,fltx,fltx,fltx bl::f256,bl::log,12291,217.776072084,214.333783,213.252927,3,3,33.252927,yes,Both,-,1781.660156,,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,12291,215.87148618,214.161037,214.022652,3,3,34.022652,yes,Both,-,2809.545898,1.576926,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log,f256,qdpp,qdreal,qdpp qd_real,qdpp log,12291,205.148754869,62.240702,61.593641,2,3,-118.406359,no,NaN,-,8948.925781,5.022802,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log,12291,238.863547738,237.168312,237.020732,3,3,57.020732,yes,No,-,5255.322266,2.949677,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log10,f256,fltx,fltx,fltx bl::f256,bl::log10,12291,217.44848007,214.245682,213.257193,3,3,33.257193,yes,Both,-,1826.367188,,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log10,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,12291,215.897541443,214.144149,214.004904,3,3,34.004904,yes,Both,-,5529.980469,3.027858,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log10,f256,qdpp,qdreal,qdpp qd_real,qdpp log10,12291,203.08529515,62.240702,61.593641,2,3,-118.406359,no,NaN,-,9338.183594,5.112983,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log10,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,12291,238.843380382,237.128968,237.019945,3,3,57.019945,yes,No,-,5439.550781,2.978345,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log1p,f256,fltx,fltx,fltx bl::f256,bl::log1p,8197,226.82219119,207.415037,207,2,2,27,yes,Both,yes,1835,,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log1p,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,8197,227.392838761,214.139415,214.010728,2,2,34.010728,yes,Both,yes,2912.239583,1.587052,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log1p,f256,qdpp,qdreal,qdpp qd_real,qdpp log1p,8197,226.3896182,203.445411,203,2,2,23,yes,NaN,no,8933.789062,4.86855,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log1p,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,8197,250.055921912,237.123379,237.006206,2,2,57.006206,yes,No,no,6412.451172,3.494524,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log2,f256,fltx,fltx,fltx bl::f256,bl::log2,12291,218.61302666,214.28538,213.192358,3,3,33.192358,yes,Both,-,1830.195312,,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log2,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,12291,217.32440772,214.194225,214.010454,3,3,34.010454,yes,Both,-,3085.579427,1.685929,1bc36f9be0894bcfb934a2e01311a61e +logarithms,log2,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,12291,240.319993979,237.187476,237.019864,3,3,57.019864,yes,No,-,5412.792969,2.957495,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,affine_trig,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,1834.4375,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,affine_trig,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,3071.540179,1.674377,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,affine_trig,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,5131.069712,2.797081,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,affine_trig,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,13073.4375,7.126674,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,chained_arithmetic,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,164.733213,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,chained_arithmetic,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,466.484375,2.831757,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,chained_arithmetic,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,417.581687,2.534897,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,chained_arithmetic,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,1016.709422,6.171854,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,haversine,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,4722.575431,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,haversine,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,12525,2.652155,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,haversine,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,21975,4.653181,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,haversine,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,35600,7.53826,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,horner_polynomial,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,422.572272,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,horner_polynomial,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,1191.606748,2.819889,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,horner_polynomial,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,872.012579,2.063582,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,horner_polynomial,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,2410.128348,5.70347,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,log_sum_exp,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,9212.5,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,log_sum_exp,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,12925,1.402985,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,log_sum_exp,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,26262.5,2.850746,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,log_sum_exp,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,38675,4.1981,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,mandelbrot,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,117.370217,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,mandelbrot,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,537.590492,4.580297,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,mandelbrot,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,304.32719,2.592883,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,mandelbrot,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,963.853433,8.212078,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,matrix_vector_4x4,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,528.529199,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,matrix_vector_4x4,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,1976.42663,3.739484,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,matrix_vector_4x4,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,1378.873698,2.608888,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,matrix_vector_4x4,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,4422.933468,8.368381,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,newton_root,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,236.779745,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,newton_root,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,,,,,,,,,-,-,464.354167,1.961123,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,newton_root,f256,qdpp,qdreal,qdpp qd_real,same workload,,,,,,,,,-,-,631.033237,2.665064,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,newton_root,f256,tlfloat,tloct,TLFloat Octuple,same workload,,,,,,,,,-,-,1333.72093,5.632749,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,product_sum,f256,fltx,fltx,fltx bl::f256,bl::product_sum,,,,,,,,,-,-,46.246338,,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,product_sum,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same expression,,,,,,,,,-,-,210.300293,4.547393,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,product_sum,f256,qdpp,qdreal,qdpp qd_real,same expression,,,,,,,,,-,-,118.12066,2.554162,1bc36f9be0894bcfb934a2e01311a61e +mixed_workloads,product_sum,f256,tlfloat,tloct,TLFloat Octuple,same expression,,,,,,,,,-,-,372.338867,8.051208,1bc36f9be0894bcfb934a2e01311a61e +random,mt19937_64,f256,fltx,fltx,fltx bl::f256,bl::mt19937_64,,,,,,,,,-,-,5.052864,,1bc36f9be0894bcfb934a2e01311a61e +random,normal,f256,fltx,fltx,fltx bl::f256,bl::normal,,,,,,,,,-,-,367.940771,,1bc36f9be0894bcfb934a2e01311a61e +random,uniform_real,f256,fltx,fltx,fltx bl::f256,bl::uniform_real,,,,,,,,,-,-,42.444796,,1bc36f9be0894bcfb934a2e01311a61e +random,uniform_real,f256,qdpp,qdreal,qdpp qd_real,qdpp qdrand,,,,,,,,,-,-,50.42577,1.188032,1bc36f9be0894bcfb934a2e01311a61e +remainders,fmod,f256,fltx,fltx,fltx bl::f256,bl::fmod,8199,243.996795284,217.724535,217.724535,3,3,27.724535,yes,Both,yes,69.569499,,1bc36f9be0894bcfb934a2e01311a61e +remainders,fmod,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,8199,inf,inf,inf,3,3,inf,yes,Both,yes,290.108817,4.170058,1bc36f9be0894bcfb934a2e01311a61e +remainders,fmod,f256,qdpp,qdreal,qdpp qd_real,qdpp fmod,8199,199.825156745,0,0,1,3,-190,no,NaN,no,413.285689,5.940616,1bc36f9be0894bcfb934a2e01311a61e +remainders,fmod,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,8199,inf,inf,inf,3,3,inf,yes,No,no,694.698661,9.985679,1bc36f9be0894bcfb934a2e01311a61e +remainders,remainder,f256,fltx,fltx,fltx bl::f256,bl::remainder,4099,inf,inf,inf,1,1,inf,yes,Both,yes,99.110874,,1bc36f9be0894bcfb934a2e01311a61e +remainders,remainder,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remainder,4099,inf,inf,inf,1,1,inf,yes,Both,yes,330.367338,3.333311,1bc36f9be0894bcfb934a2e01311a61e +remainders,remainder,f256,qdpp,qdreal,qdpp qd_real,qdpp drem,4099,241.943486,210.446918,205.498921,1,1,15.498921,yes,NaN,no,425.595703,4.294137,1bc36f9be0894bcfb934a2e01311a61e +remainders,remainder,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::remainder,4099,inf,inf,inf,1,1,inf,yes,No,no,737.434896,7.440504,1bc36f9be0894bcfb934a2e01311a61e +remainders,remquo,f256,fltx,fltx,fltx bl::f256,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,99.992051,,1bc36f9be0894bcfb934a2e01311a61e +remainders,remquo,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,367.606608,3.676358,1bc36f9be0894bcfb934a2e01311a61e +remainders,remquo,f256,qdpp,qdreal,qdpp qd_real,qdpp divrem,4099,inf,inf,inf,1,1,inf,yes,NaN,no,424.575195,4.246089,1bc36f9be0894bcfb934a2e01311a61e +remainders,remquo,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::remquo,4099,inf,inf,inf,1,1,inf,yes,No,no,750.838216,7.508979,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,cbrt,f256,fltx,fltx,fltx bl::f256,bl::cbrt,8195,219.287553022,215.522484,214.867489,2,2,24.867489,yes,Both,yes,382.333519,,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,cbrt,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,8195,216.025881329,214.197213,214.058038,2,2,24.058038,yes,Both,yes,483.857996,1.265539,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,cbrt,f256,qdpp,qdreal,qdpp qd_real,qdpp nroot,8195,217.232905662,193.082937,175.955036,1,2,-14.044964,no,NaN,no,1452.099609,3.797992,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,cbrt,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,8195,239.048520642,237.214089,237.01811,2,2,47.01811,yes,No,no,3073.958333,8.039992,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,hypot,f256,fltx,fltx,fltx bl::f256,bl::hypot,8195,229.930731323,215.484839,213.870154,2,2,23.870154,yes,Both,yes,175.20419,,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,hypot,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,8195,228.685697033,213.212997,212.858237,2,2,22.858237,yes,Both,no,583.410645,3.32989,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,hypot,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,8195,251.869264053,237.145904,237.032531,2,2,47.032531,yes,No,yes,570.324707,3.2552,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,ipow,f256,fltx,fltx,fltx bl::f256,bl::ipow,8195,217.175762701,214.383216,213.656994,2,2,23.656994,yes,Both,no,121.609318,,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,ipow,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",8195,215.968901433,214.179832,214.011863,2,2,24.011863,yes,Both,yes,272.244263,2.238679,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,ipow,f256,qdpp,qdreal,qdpp qd_real,qdpp npwr,8195,215.047018926,212.773859,212.051585,2,2,22.051585,yes,Both,no,144.393921,1.187359,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,pow,f256,fltx,fltx,fltx bl::f256,bl::pow,8198,216.837164,212.047897,211.143117,2,2,31.143117,yes,Both,yes,2712.353516,,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,pow,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,8198,215.92977,214.172189,214.02831,2,2,34.02831,yes,Both,yes,3571.940104,1.316915,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,pow,f256,qdpp,qdreal,qdpp qd_real,qdpp pow,8198,216.3644855,211.658837,210.563451,2,2,30.563451,yes,No,no,9603.125,3.540514,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,pow,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,8198,238.924537,237.150631,237.009078,2,2,57.009078,yes,No,no,20410.839844,7.52514,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,sqr,f256,fltx,fltx,fltx bl::f256,bl::sqr,8195,220.120699598,216.278909,215.25119,2,2,25.25119,yes,Both,yes,22.753906,,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,sqr,f256,qdpp,qdreal,qdpp qd_real,qdpp sqr,8195,216.730548985,214.989743,214.72076,2,2,24.72076,yes,Both,yes,15.036903,0.660849,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,sqrt,f256,fltx,fltx,fltx bl::f256,bl::sqrt,16391,217.892674432,211.30757,209.568118,4,4,19.568118,yes,Both,yes,120.250244,,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,sqrt,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,16391,216.210876714,214.147252,214.030797,4,4,24.030797,yes,Both,yes,148.713379,1.236699,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,sqrt,f256,qdpp,qdreal,qdpp qd_real,qdpp sqrt,16391,152.282582581,0,0,1,4,-190,no,NaN,no,599.777832,4.987747,1bc36f9be0894bcfb934a2e01311a61e +roots_and_powers,sqrt,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,16391,239.156039966,237.129126,237.014769,4,4,47.014769,yes,No,no,511.679688,4.255124,1bc36f9be0894bcfb934a2e01311a61e +rounding,ceil,f256,fltx,fltx,fltx bl::f256,bl::ceil,4110,inf,inf,inf,1,1,inf,yes,Both,yes,1.411047,,1bc36f9be0894bcfb934a2e01311a61e +rounding,ceil,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ceil,4110,inf,inf,inf,1,1,inf,yes,Both,yes,50.606079,35.864217,1bc36f9be0894bcfb934a2e01311a61e +rounding,ceil,f256,qdpp,qdreal,qdpp qd_real,qdpp ceil,4110,inf,inf,inf,1,1,inf,yes,Both,no,1.325837,0.939612,1bc36f9be0894bcfb934a2e01311a61e +rounding,ceil,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::ceil,4110,inf,inf,inf,1,1,inf,yes,No,no,49.517578,35.092803,1bc36f9be0894bcfb934a2e01311a61e +rounding,floor,f256,fltx,fltx,fltx bl::f256,bl::floor,4110,inf,inf,inf,1,1,inf,yes,Both,yes,1.396501,,1bc36f9be0894bcfb934a2e01311a61e +rounding,floor,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::floor,4110,inf,inf,inf,1,1,inf,yes,Both,yes,50.177734,35.931032,1bc36f9be0894bcfb934a2e01311a61e +rounding,floor,f256,qdpp,qdreal,qdpp qd_real,qdpp floor,4110,inf,inf,inf,1,1,inf,yes,Both,no,1.324383,0.948358,1bc36f9be0894bcfb934a2e01311a61e +rounding,floor,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::floor,4110,inf,inf,inf,1,1,inf,yes,No,no,49.332031,35.325445,1bc36f9be0894bcfb934a2e01311a61e +rounding,llround,f256,fltx,fltx,fltx bl::f256,bl::llround,4116,inf,inf,inf,1,1,inf,yes,-,-,4.807818,,1bc36f9be0894bcfb934a2e01311a61e +rounding,llround,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::llround,4116,inf,inf,inf,1,1,inf,yes,-,-,261.572266,54.405608,1bc36f9be0894bcfb934a2e01311a61e +rounding,lround,f256,fltx,fltx,fltx bl::f256,bl::lround,4112,inf,inf,inf,1,1,inf,yes,-,-,5.08619,,1bc36f9be0894bcfb934a2e01311a61e +rounding,lround,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lround,4112,inf,inf,inf,1,1,inf,yes,-,-,164.379883,32.318867,1bc36f9be0894bcfb934a2e01311a61e +rounding,round,f256,fltx,fltx,fltx bl::f256,bl::round,4110,inf,inf,inf,1,1,inf,yes,Both,yes,10.205627,,1bc36f9be0894bcfb934a2e01311a61e +rounding,round,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::round,4110,inf,inf,inf,1,1,inf,yes,Both,yes,119.742432,11.732981,1bc36f9be0894bcfb934a2e01311a61e +rounding,round,f256,qdpp,qdreal,qdpp qd_real,qdpp round,4110,229.692457,0,0,0,1,-180,no,Both,no,11.540039,1.130753,1bc36f9be0894bcfb934a2e01311a61e +rounding,round,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::round,4110,inf,inf,inf,1,1,inf,yes,No,no,58.972778,5.778457,1bc36f9be0894bcfb934a2e01311a61e +rounding,round_decimals,f256,fltx,fltx,fltx bl::f256,bl::round_decimals,4099,220.044956,215.606687,215.330917,1,1,25.330917,yes,Both,yes,127.529907,,1bc36f9be0894bcfb934a2e01311a61e +rounding,round_significant,f256,fltx,fltx,fltx bl::f256,bl::round_significant,4096,229.647449,215.594292,215.06782,1,1,25.06782,yes,Both,yes,163.258714,,1bc36f9be0894bcfb934a2e01311a61e +rounding,roundeven,f256,fltx,fltx,fltx bl::f256,bl::roundeven,4110,inf,inf,inf,1,1,inf,yes,Both,yes,9.118402,,1bc36f9be0894bcfb934a2e01311a61e +rounding,roundeven,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::rint,4110,inf,inf,inf,1,1,inf,yes,No,no,64.431763,7.066124,1bc36f9be0894bcfb934a2e01311a61e +rounding,trunc,f256,fltx,fltx,fltx bl::f256,bl::trunc,4110,inf,inf,inf,1,1,inf,yes,Both,yes,2.790801,,1bc36f9be0894bcfb934a2e01311a61e +rounding,trunc,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::trunc,4110,inf,inf,inf,1,1,inf,yes,Both,yes,49.686523,17.80368,1bc36f9be0894bcfb934a2e01311a61e +rounding,trunc,f256,qdpp,qdreal,qdpp qd_real,qdpp aint,4110,inf,inf,inf,1,1,inf,yes,Both,no,2.251709,0.806833,1bc36f9be0894bcfb934a2e01311a61e +rounding,trunc,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::trunc,4110,inf,inf,inf,1,1,inf,yes,No,no,38.387451,13.754995,1bc36f9be0894bcfb934a2e01311a61e +special_functions,erf,f256,fltx,fltx,fltx bl::f256,bl::erf,8198,212.782396,196.847186,196.755396,2,2,16.755396,yes,Both,yes,12755.46875,,1bc36f9be0894bcfb934a2e01311a61e +special_functions,erf,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,8198,216.2639365,214.293135,214.06938,2,2,34.06938,yes,Both,yes,27657.03125,2.168249,1bc36f9be0894bcfb934a2e01311a61e +special_functions,erf,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,8198,239.239293,237.303421,237.090794,2,2,57.090794,yes,Inf,no,231077.34375,18.115943,1bc36f9be0894bcfb934a2e01311a61e +special_functions,erfc,f256,fltx,fltx,fltx bl::f256,bl::erfc,8198,208.160201,191.066815,189.779688,2,2,9.779688,yes,Both,-,12796.09375,,1bc36f9be0894bcfb934a2e01311a61e +special_functions,erfc,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,8198,216.0696585,214.211875,214.017843,2,2,34.017843,yes,Both,-,44818.75,3.502534,1bc36f9be0894bcfb934a2e01311a61e +special_functions,erfc,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,8198,239.0529915,237.201029,237.018916,2,2,57.018916,yes,Inf,-,231271.09375,18.07357,1bc36f9be0894bcfb934a2e01311a61e +special_functions,lgamma,f256,fltx,fltx,fltx bl::f256,bl::lgamma,4099,211.903615,199.617279,199.225949,1,1,19.225949,yes,Both,-,9141.40625,,1bc36f9be0894bcfb934a2e01311a61e +special_functions,lgamma,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lgamma,4099,215.890428,214.160879,214.017847,1,1,34.017847,yes,Both,-,17618.75,1.927357,1bc36f9be0894bcfb934a2e01311a61e +special_functions,lgamma,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::lgamma,4099,238.928241,237.162122,237.008749,1,1,57.008749,yes,No,-,82210.9375,8.993248,1bc36f9be0894bcfb934a2e01311a61e +special_functions,tgamma,f256,fltx,fltx,fltx bl::f256,bl::tgamma,4099,209.040528,202.582542,202.45702,1,1,22.45702,yes,Both,-,10132.8125,,1bc36f9be0894bcfb934a2e01311a61e +special_functions,tgamma,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tgamma,4099,215.948239,214.171703,214.004992,1,1,34.004992,yes,Both,-,20492.1875,2.022359,1bc36f9be0894bcfb934a2e01311a61e +special_functions,tgamma,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::tgamma,4099,238.919522,237.194896,237.040555,1,1,57.040555,yes,No,-,91828.90625,9.062529,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,acos,f256,fltx,fltx,fltx bl::f256,bl::acos,8204,216.029308016,205.510139,192.466318,2,2,12.466318,yes,Both,-,1417.692057,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,acos,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,8204,215.919006178,214.16827,214.01241,2,2,34.01241,yes,Both,-,7174.755859,5.06087,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,acos,f256,qdpp,qdreal,qdpp qd_real,qdpp acos,8204,217.318990171,213.570151,212.546937,2,2,32.546937,yes,Both,-,11462.597656,8.085393,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,acos,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,8204,238.937618214,237.176311,237.031977,2,2,57.031977,yes,No,-,8827.734375,6.226835,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,asin,f256,fltx,fltx,fltx bl::f256,bl::asin,8204,217.91775033,214.870821,214.404436,2,2,34.404436,yes,Both,yes,1399.902344,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,asin,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,8204,216.0174187,214.166642,214.033964,2,2,34.033964,yes,Both,yes,6991.796875,4.994489,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,asin,f256,qdpp,qdreal,qdpp qd_real,qdpp asin,8204,217.153509834,212.882268,212.306181,2,2,32.306181,yes,Both,no,11469.433594,8.193024,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,asin,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,8204,239.01952962,237.164907,237.026679,2,2,57.026679,yes,No,no,8844.53125,6.317963,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan,f256,fltx,fltx,fltx bl::f256,bl::atan,8198,218.142465,215.364973,214.678988,2,2,34.678988,yes,Both,yes,908.44184,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,8198,215.9607655,214.196468,214.022743,2,2,34.022743,yes,Both,yes,3097.070312,3.409211,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan,f256,qdpp,qdreal,qdpp qd_real,qdpp atan,8198,216.7002175,213.068799,212.444445,2,2,32.444445,yes,NaN,no,8332.128906,9.17189,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,8198,238.9817475,237.221991,237.005716,2,2,57.005716,yes,Inf,no,8061.621094,8.874119,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan2,f256,fltx,fltx,fltx bl::f256,bl::atan2,8206,217.911773079,215.258136,214.277602,3,3,34.277602,yes,Both,yes,972.873264,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan2,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,8206,215.939645852,214.132014,214.011485,3,3,34.011485,yes,Both,yes,3143.977865,3.231642,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan2,f256,qdpp,qdreal,qdpp qd_real,qdpp atan2,8206,216.283414812,0,0,2,3,-180,no,NaN,no,8261.71875,8.492081,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,atan2,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,8206,238.987771942,237.174621,237.005636,3,3,57.005636,yes,Inf,no,8180.566406,8.408666,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,cos,f256,fltx,fltx,fltx bl::f256,bl::cos,12518,226.780465244,215.246584,208.674366,3,3,28.674366,yes,Both,-,897.490234,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,cos,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,12518,219.362111864,214.240603,214.013567,3,3,34.013567,yes,Both,-,1681.119792,1.873134,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,cos,f256,qdpp,qdreal,qdpp qd_real,qdpp cos,12518,161.941146628,0,0,1,3,-180,no,Both,-,2542.895508,2.833341,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,cos,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,12518,241.656141716,237.245286,237.010092,3,3,57.010092,yes,No,-,6087.109375,6.782368,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,sin,f256,fltx,fltx,fltx bl::f256,bl::sin,12518,222.290222968,208.567012,202.92477,3,3,22.92477,yes,Both,yes,897.829861,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,sin,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,12518,218.487703853,214.163948,214.02345,3,3,34.02345,yes,Both,yes,2134.667969,2.377586,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,sin,f256,qdpp,qdreal,qdpp qd_real,qdpp sin,12518,142.802514066,0,0,1,3,-180,no,Both,no,2524.316406,2.811575,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,sin,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,12518,241.18040008,237.214941,237.023215,3,3,57.023215,yes,No,no,6093.066406,6.786438,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,sincos,f256,fltx,fltx,fltx bl::f256,bl::sincos,,,,,,,,,-,-,1114.880371,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,sincos,f256,qdpp,qdreal,qdpp qd_real,qdpp sincos,,,,,,,,,-,-,2723.681641,2.443026,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,sincos,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::sincos,,,,,,,,,-,-,12232.421875,10.971959,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,tan,f256,fltx,fltx,fltx bl::f256,bl::tan,12518,217.050653666,208.567009,202.92477,3,3,32.92477,yes,Both,yes,1208.59375,,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,tan,f256,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,12518,215.979315837,214.143677,214.006668,3,3,44.006668,yes,Both,yes,2387.060547,1.975073,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,tan,f256,qdpp,qdreal,qdpp qd_real,qdpp tan,12518,111.509729272,0,0,1,3,-170,no,Both,no,3023.697917,2.501832,1bc36f9be0894bcfb934a2e01311a61e +trigonometric,tan,f256,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,12518,238.954881373,237.180286,237.008972,3,3,67.008972,yes,No,no,7095.410156,5.870798,1bc36f9be0894bcfb934a2e01311a61e diff --git a/validation/metrics/data/windows/x86_64/MinGW_f256_fastmath.csv b/validation/metrics/data/windows/x86_64/MinGW_f256_fastmath.csv new file mode 100644 index 0000000..1535d66 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/MinGW_f256_fastmath.csv @@ -0,0 +1,86 @@ +group,operation,precision,implementation,implementation_short,implementation_label,api,samples,mean_bits,p01_bits,worst_bits,domains_passed,domains_total,min_margin_bits,accuracy_pass,special_support,signed_zero_support,ns_iter,speed_ratio,run_id +arithmetic,add,f256,fltx,fltx,fltx bl::f256,bl::add,4096,225.710829056,0,0,1,2,-190,no,Both,no,10.462325,,1f47748c24e4435f9d017479a2e54bbd +arithmetic,divide,f256,fltx,fltx,fltx bl::f256,bl::divide,4100,218.512556671,54,54,1,2,-136,no,Both,yes,107.237549,,1f47748c24e4435f9d017479a2e54bbd +arithmetic,multiply,f256,fltx,fltx,fltx bl::f256,bl::multiply,4100,220.046096951,215.608028,215.221541,2,2,25.221541,yes,NaN,no,25.301378,,1f47748c24e4435f9d017479a2e54bbd +arithmetic,subtract,f256,fltx,fltx,fltx bl::f256,bl::subtract,4096,226.24198211,0,0,1,2,-190,no,Both,no,10.388633,,1f47748c24e4435f9d017479a2e54bbd +comparisons,equal,f256,fltx,fltx,fltx bl::f256,bl::equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.539875,,1f47748c24e4435f9d017479a2e54bbd +comparisons,greater,f256,fltx,fltx,fltx bl::f256,bl::greater,8198,inf,inf,inf,1,1,inf,yes,Both,-,1.873497,,1f47748c24e4435f9d017479a2e54bbd +comparisons,greater_equal,f256,fltx,fltx,fltx bl::f256,bl::greater_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.808873,,1f47748c24e4435f9d017479a2e54bbd +comparisons,less,f256,fltx,fltx,fltx bl::f256,bl::less,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.79452,,1f47748c24e4435f9d017479a2e54bbd +comparisons,less_equal,f256,fltx,fltx,fltx bl::f256,bl::less_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.814922,,1f47748c24e4435f9d017479a2e54bbd +comparisons,not_equal,f256,fltx,fltx,fltx bl::f256,bl::not_equal,8198,inf,inf,inf,1,1,inf,yes,Both,-,0.604791,,1f47748c24e4435f9d017479a2e54bbd +exponentials,exp,f256,fltx,fltx,fltx bl::f256,bl::exp,8198,216.4305135,209.786789,209.697661,2,2,29.697661,yes,Both,-,1072.558594,,1f47748c24e4435f9d017479a2e54bbd +exponentials,exp2,f256,fltx,fltx,fltx bl::f256,bl::exp2,8198,218.030361,214.973213,214.202868,2,2,34.202868,yes,Both,-,910.888672,,1f47748c24e4435f9d017479a2e54bbd +exponentials,expm1,f256,fltx,fltx,fltx bl::f256,bl::expm1,8197,227.989217153,214.88315,213.793932,2,2,33.793932,yes,Both,yes,1068.371582,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,abs,f256,fltx,fltx,fltx bl::f256,bl::abs,8196,184.637384126,0,0,1,2,-190,no,Both,no,0.694394,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,copysign,f256,fltx,fltx,fltx bl::f256,bl::copysign,4099,inf,inf,inf,1,1,inf,yes,Both,yes,0.666614,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,fabs,f256,fltx,fltx,fltx bl::f256,bl::fabs,4099,inf,inf,inf,1,1,inf,yes,Both,no,0.69389,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,fdim,f256,fltx,fltx,fltx bl::f256,bl::fdim,8197,inf,inf,inf,2,2,inf,yes,Both,yes,5.304473,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,fma,f256,fltx,fltx,fltx bl::f256,bl::fma,12293,229.715460613,215.654212,215.096656,3,3,25.096656,yes,Both,no,37.914225,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,fmax,f256,fltx,fltx,fltx bl::f256,bl::fmax,8195,inf,inf,inf,2,2,inf,yes,Inf,yes,1.477668,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,fmin,f256,fltx,fltx,fltx bl::f256,bl::fmin,8195,inf,inf,inf,2,2,inf,yes,Inf,yes,1.472511,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,frexp,f256,fltx,fltx,fltx bl::f256,bl::frexp,8196,inf,inf,inf,2,2,inf,yes,Both,yes,9.577934,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,ilogb,f256,fltx,fltx,fltx bl::f256,bl::ilogb,8195,inf,inf,inf,2,2,inf,yes,-,-,0.929282,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,ldexp,f256,fltx,fltx,fltx bl::f256,bl::ldexp,4096,inf,inf,inf,1,1,inf,yes,Both,yes,6.204948,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,logb,f256,fltx,fltx,fltx bl::f256,bl::logb,8195,inf,inf,inf,2,2,inf,yes,Both,-,1.074157,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,modf,f256,fltx,fltx,fltx bl::f256,bl::modf,8195,inf,inf,inf,2,2,inf,yes,Both,yes,14.305943,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,nextafter,f256,fltx,fltx,fltx bl::f256,bl::nextafter,,,,,,,,,-,-,4.206465,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,nexttoward,f256,fltx,fltx,fltx bl::f256,bl::nexttoward,,,,,,,,,-,-,4.275349,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,recip,f256,fltx,fltx,fltx bl::f256,bl::recip,8195,217.927920075,215.148048,214.625136,2,2,24.625136,yes,Inf,yes,104.033203,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,scalbln,f256,fltx,fltx,fltx bl::f256,bl::scalbln,4096,inf,inf,inf,1,1,inf,yes,Both,yes,5.9047,,1f47748c24e4435f9d017479a2e54bbd +floating_point_utilities,scalbn,f256,fltx,fltx,fltx bl::f256,bl::scalbn,4096,inf,inf,inf,1,1,inf,yes,Both,yes,5.903787,,1f47748c24e4435f9d017479a2e54bbd +hyperbolic,cosh,f256,fltx,fltx,fltx bl::f256,bl::cosh,8198,217.5106305,214.737937,214.159072,2,2,34.159072,yes,Both,-,1399.135045,,1f47748c24e4435f9d017479a2e54bbd +hyperbolic,sinh,f256,fltx,fltx,fltx bl::f256,bl::sinh,8198,217.022625,214.597984,213.844482,2,2,33.844482,yes,Both,yes,1394.108073,,1f47748c24e4435f9d017479a2e54bbd +hyperbolic,tanh,f256,fltx,fltx,fltx bl::f256,bl::tanh,8198,219.128554,215.222392,214.042672,2,2,34.042672,yes,Both,yes,1315.959821,,1f47748c24e4435f9d017479a2e54bbd +inverse_hyperbolic,acosh,f256,fltx,fltx,fltx bl::f256,bl::acosh,8200,217.720725959,214.442677,213.709421,2,2,33.709421,yes,Both,-,2564.916992,,1f47748c24e4435f9d017479a2e54bbd +inverse_hyperbolic,asinh,f256,fltx,fltx,fltx bl::f256,bl::asinh,8198,217.1921705,213.881562,212.956798,2,2,32.956798,yes,Both,yes,2806.673177,,1f47748c24e4435f9d017479a2e54bbd +inverse_hyperbolic,atanh,f256,fltx,fltx,fltx bl::f256,bl::atanh,8204,218.285376518,214.164921,213.300563,2,2,33.300563,yes,Both,yes,2405.859375,,1f47748c24e4435f9d017479a2e54bbd +io,parse,f256,fltx,fltx,fltx bl::f256,bl::parse,8195,219.729662732,212.275332,212.017147,2,2,0.017147,yes,Both,yes,462.088314,,1f47748c24e4435f9d017479a2e54bbd +io,to_chars,f256,fltx,fltx,fltx bl::f256,bl::to_chars,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,no,303.659429,,1f47748c24e4435f9d017479a2e54bbd +io,to_string,f256,fltx,fltx,fltx bl::f256,bl::to_string,8195,220.440705573,217.235897,216.9758,2,2,26.9758,yes,Both,yes,347.804343,,1f47748c24e4435f9d017479a2e54bbd +logarithms,log,f256,fltx,fltx,fltx bl::f256,bl::log,12291,217.713430044,214.333783,213.252927,3,3,33.252927,yes,Both,-,1781.054688,,1f47748c24e4435f9d017479a2e54bbd +logarithms,log10,f256,fltx,fltx,fltx bl::f256,bl::log10,12291,217.407206146,214.245682,213.257193,3,3,33.257193,yes,Both,-,1828.007812,,1f47748c24e4435f9d017479a2e54bbd +logarithms,log1p,f256,fltx,fltx,fltx bl::f256,bl::log1p,8197,227.627482935,214.787129,214.020088,2,2,34.020088,yes,Both,yes,1839.433594,,1f47748c24e4435f9d017479a2e54bbd +logarithms,log2,f256,fltx,fltx,fltx bl::f256,bl::log2,12291,218.589512067,214.28538,213.192358,3,3,33.192358,yes,Both,-,1808.867188,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,affine_trig,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,1832.229167,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,chained_arithmetic,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,164.655237,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,haversine,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,4762.771739,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,horner_polynomial,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,420.368485,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,log_sum_exp,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,9137.5,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,mandelbrot,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,119.109848,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,matrix_vector_4x4,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,527.544301,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,newton_root,f256,fltx,fltx,fltx bl::f256,same workload,,,,,,,,,-,-,236.633104,,1f47748c24e4435f9d017479a2e54bbd +mixed_workloads,product_sum,f256,fltx,fltx,fltx bl::f256,bl::product_sum,,,,,,,,,-,-,46.193576,,1f47748c24e4435f9d017479a2e54bbd +random,mt19937_64,f256,fltx,fltx,fltx bl::f256,bl::mt19937_64,,,,,,,,,-,-,5.069684,,1f47748c24e4435f9d017479a2e54bbd +random,normal,f256,fltx,fltx,fltx bl::f256,bl::normal,,,,,,,,,-,-,354.774767,,1f47748c24e4435f9d017479a2e54bbd +random,uniform_real,f256,fltx,fltx,fltx bl::f256,bl::uniform_real,,,,,,,,,-,-,40.563986,,1f47748c24e4435f9d017479a2e54bbd +remainders,fmod,f256,fltx,fltx,fltx bl::f256,bl::fmod,8199,243.996795284,217.724535,217.724535,3,3,27.724535,yes,Both,yes,71.153971,,1f47748c24e4435f9d017479a2e54bbd +remainders,remainder,f256,fltx,fltx,fltx bl::f256,bl::remainder,4099,inf,inf,inf,1,1,inf,yes,Both,yes,99.607104,,1f47748c24e4435f9d017479a2e54bbd +remainders,remquo,f256,fltx,fltx,fltx bl::f256,bl::remquo,4099,inf,inf,inf,1,1,inf,yes,Both,yes,98.09911,,1f47748c24e4435f9d017479a2e54bbd +roots_and_powers,cbrt,f256,fltx,fltx,fltx bl::f256,bl::cbrt,8195,219.287553022,215.522484,214.867489,2,2,24.867489,yes,Both,yes,387.411644,,1f47748c24e4435f9d017479a2e54bbd +roots_and_powers,hypot,f256,fltx,fltx,fltx bl::f256,bl::hypot,8195,229.931215146,215.484839,213.870154,2,2,23.870154,yes,Both,yes,174.938965,,1f47748c24e4435f9d017479a2e54bbd +roots_and_powers,ipow,f256,fltx,fltx,fltx bl::f256,bl::ipow,8195,217.175762701,214.383216,213.656994,2,2,23.656994,yes,Both,no,121.701389,,1f47748c24e4435f9d017479a2e54bbd +roots_and_powers,pow,f256,fltx,fltx,fltx bl::f256,bl::pow,8198,216.837164,212.047897,211.143117,2,2,31.143117,yes,Both,yes,2714.453125,,1f47748c24e4435f9d017479a2e54bbd +roots_and_powers,sqr,f256,fltx,fltx,fltx bl::f256,bl::sqr,8195,220.120699598,216.278909,215.25119,2,2,25.25119,yes,Both,yes,22.792969,,1f47748c24e4435f9d017479a2e54bbd +roots_and_powers,sqrt,f256,fltx,fltx,fltx bl::f256,bl::sqrt,16391,224.167353604,211.30757,209.568118,4,4,19.568118,yes,Both,yes,121.181641,,1f47748c24e4435f9d017479a2e54bbd +rounding,ceil,f256,fltx,fltx,fltx bl::f256,bl::ceil,4110,inf,inf,inf,1,1,inf,yes,Both,yes,1.244923,,1f47748c24e4435f9d017479a2e54bbd +rounding,floor,f256,fltx,fltx,fltx bl::f256,bl::floor,4110,inf,inf,inf,1,1,inf,yes,Both,yes,1.28778,,1f47748c24e4435f9d017479a2e54bbd +rounding,llround,f256,fltx,fltx,fltx bl::f256,bl::llround,4116,inf,inf,inf,1,1,inf,yes,-,-,4.848278,,1f47748c24e4435f9d017479a2e54bbd +rounding,lround,f256,fltx,fltx,fltx bl::f256,bl::lround,4112,inf,inf,inf,1,1,inf,yes,-,-,5.134658,,1f47748c24e4435f9d017479a2e54bbd +rounding,round,f256,fltx,fltx,fltx bl::f256,bl::round,4110,inf,inf,inf,1,1,inf,yes,Both,yes,10.095398,,1f47748c24e4435f9d017479a2e54bbd +rounding,round_decimals,f256,fltx,fltx,fltx bl::f256,bl::round_decimals,4099,220.044956,215.606687,215.330917,1,1,25.330917,yes,Both,yes,128.289795,,1f47748c24e4435f9d017479a2e54bbd +rounding,round_significant,f256,fltx,fltx,fltx bl::f256,bl::round_significant,4096,229.647449,215.594292,215.06782,1,1,25.06782,yes,Both,yes,167.3753,,1f47748c24e4435f9d017479a2e54bbd +rounding,roundeven,f256,fltx,fltx,fltx bl::f256,bl::roundeven,4110,inf,inf,inf,1,1,inf,yes,Both,yes,9.125255,,1f47748c24e4435f9d017479a2e54bbd +rounding,trunc,f256,fltx,fltx,fltx bl::f256,bl::trunc,4110,inf,inf,inf,1,1,inf,yes,Both,no,2.313778,,1f47748c24e4435f9d017479a2e54bbd +special_functions,erf,f256,fltx,fltx,fltx bl::f256,bl::erf,8198,212.782396,196.847186,196.755396,2,2,16.755396,yes,Both,yes,11166.40625,,1f47748c24e4435f9d017479a2e54bbd +special_functions,erfc,f256,fltx,fltx,fltx bl::f256,bl::erfc,8198,208.160201,191.066815,189.779688,2,2,9.779688,yes,Both,-,11072.65625,,1f47748c24e4435f9d017479a2e54bbd +special_functions,lgamma,f256,fltx,fltx,fltx bl::f256,bl::lgamma,4099,211.903615,199.617279,199.225949,1,1,19.225949,yes,Both,-,9099.21875,,1f47748c24e4435f9d017479a2e54bbd +special_functions,tgamma,f256,fltx,fltx,fltx bl::f256,bl::tgamma,4099,209.040528,202.582542,202.45702,1,1,22.45702,yes,Both,-,10126.5625,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,acos,f256,fltx,fltx,fltx bl::f256,bl::acos,8204,216.029308016,205.510139,192.466318,2,2,12.466318,yes,Both,-,1408.414714,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,asin,f256,fltx,fltx,fltx bl::f256,bl::asin,8204,217.91775033,214.870821,214.404436,2,2,34.404436,yes,Both,yes,1406.119792,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,atan,f256,fltx,fltx,fltx bl::f256,bl::atan,8198,218.142465,215.364973,214.678988,2,2,34.678988,yes,Both,yes,908.268229,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,atan2,f256,fltx,fltx,fltx bl::f256,bl::atan2,8206,217.911773079,215.258136,214.277602,3,3,34.277602,yes,Both,yes,966.113281,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,cos,f256,fltx,fltx,fltx bl::f256,bl::cos,12518,226.780465244,215.246584,208.674366,3,3,28.674366,yes,Both,-,898.349609,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,sin,f256,fltx,fltx,fltx bl::f256,bl::sin,12518,222.290222968,208.567012,202.92477,3,3,22.92477,yes,Both,yes,896.25,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,sincos,f256,fltx,fltx,fltx bl::f256,bl::sincos,,,,,,,,,-,-,1299.06529,,1f47748c24e4435f9d017479a2e54bbd +trigonometric,tan,f256,fltx,fltx,fltx bl::f256,bl::tan,12518,217.050653666,208.567009,202.92477,3,3,32.92477,yes,Both,yes,1356.222098,,1f47748c24e4435f9d017479a2e54bbd diff --git a/validation/metrics/data/windows/x86_64/detail/ClangCL_f128_accuracy.csv b/validation/metrics/data/windows/x86_64/detail/ClangCL_f128_accuracy.csv new file mode 100644 index 0000000..ad64e2e --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/ClangCL_f128_accuracy.csv @@ -0,0 +1,357 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,moderate,4097,10322096095657499311,109.950521,107.250365,107.040693,106.000000,1.040693,yes,Both,yes,-2.472067804890653694736606692562736837036787645394e-04,-0.00024720678048906536947366066925627220254736992061971280405933562914519934341009422,-0.0002472067804890653694736606692562736837036787645394 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,moderate,4097,10322096095657499311,107.925004,106.160305,106.000000,,,,Both,no,1.0000000000000000000000000000000123259516440783094595582588325435348386438505485784844495356082916259765625,1,1.0000000000000000000000000000000123259516440783094595582588325435348386438505486 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,moderate,4097,10322096095657499311,114.919497,113.157032,113.020059,,,,No,no,-2.472067804890653694736606692562736837036787645394e-04,-0.00024720678048906536947366066925627370718013897314772300404210327361966695130200689,-0.0002472067804890653694736606692562736837036787645394 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,wide_exponent,4098,10322096095657499308,109.923010,107.051396,106.003381,106.000000,0.003381,yes,Both,yes,-4.215228812298638183537364477017984307424253045187e-293,-4.2152288122986381835373644770182307620164082432452873068526743823738143144126931e-293,-4.215228812298638183537364477017984307424253045187e-293 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,wide_exponent,4098,10322096095657499308,106.283030,0.000000,0.000000,,,,Both,no,4.106386782837618869142465736384079482165950265901e-297,0,4.106386782837618869142465736384079482165950265901e-297 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,wide_exponent,4098,10322096095657499308,114.945626,113.184622,113.027719,,,,No,no,-6.994944574485638725989218380619056352714442512346e+274,-6.9949445744856387259892183806190570134846365830973741407546647660305377989961645e+274,-6.994944574485638725989218380619056352714442512346e+274 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,moderate,4099,10322096095657499356,112.006721,106.046153,106.003594,,,,Both,no,"[4.0283050850804027,1.1180792639177158e-16,-6.2065867107869756e-33,3.4453477353241089e-49]",4.028305085080402859429446057471084e+00,4.0283050850804028594294460574710344708404448549180543678577390200729047009531314 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,moderate,4099,10322096095657499356,110.801332,107.893373,107.362665,,,,Both,yes,"[1.008688938141546,2.7996742095236117e-17,-1.5541313844311742e-33,8.6271622314403006e-50]",1.00868893814154606005353659707718,1.0086889381415460600535365970771848347585370420395131047593302586751207172710565 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,wide_exponent,4096,10322096095657499357,109.529692,106.034942,105.994061,,,,Both,no,"[1.570745732098147e-207,4.3596951940176515e-224,-2.4201169923730179e-240,1.3434348036095544e-256]",1.570745732098147052789232581064327e-207,1.570745732098147052789232581064346440801824340244516345502860090506962770321629e-207 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,wide_exponent,4096,10322096095657499357,110.510134,107.628363,107.304630,,,,Both,yes,"[-1.0005623436112949e+24,-27771183.786254175,1.5416103830298108e-09,-8.5576567112045135e-26]",-1000562343611294930157871.78625418,-1000562343611294930157871.786254175007343292236328125 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,tlfloat,tlquad,TLFloat Quad,TLFloat operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,tlfloat,tlquad,TLFloat Quad,TLFloat operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,general,3845,10322096095657499292,119.108587,106.483519,105.736235,90.000000,15.736235,yes,Both,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,general,3845,10322096095657499292,119.108587,106.483519,105.736235,,,,Both,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,general,3845,10322096095657499292,125.830155,113.252951,113.031307,,,,No,no,"representative lhs [66971.586500767997,1.8588349332206987e-12,-1.0318606709195925e-28,5.7279773753004665e-45] ; representative rhs [2.1043957799031432,5.8408716194312071e-17,-3.2423350778860755e-33,1.7998575285094606e-49]",66973.690896547901769622371152765318940018706501688624296419333203900237094785552,66973.690896547901769622371152765325250905948269783067590247855466190074480437033 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,subnormal,251,10322096095657499292,inf,inf,inf,90.000000,inf,yes,Both,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312,7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,subnormal,251,10322096095657499292,inf,inf,inf,,,,Both,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,subnormal,251,10322096095657499292,inf,inf,inf,,,,No,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312,7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,general,3844,10322096095657499292,118.876961,106.530508,105.744857,90.000000,15.744857,yes,Both,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,general,3844,10322096095657499292,118.876961,106.530508,105.744857,,,,Both,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,general,3844,10322096095657499292,126.002774,113.274079,113.013310,,,,No,no,"representative lhs [547185574853.96362,1.5187450598640562e-05,-8.4307286699839347e-22,4.6799945418917936e-38] ; representative rhs [-7665751255.1039944,-2.1276733861164116e-07,1.1810959910743055e-23,-6.556399817915812e-40]",554851326109.06763281659977318970354064704610802527540158735064323991537094116211,554851326109.06763281659977318970348770748690463150420981719435076229274272918701 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,subnormal,252,10322096095657499292,inf,inf,inf,90.000000,inf,yes,Both,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310,-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,subnormal,252,10322096095657499292,inf,inf,inf,,,,Both,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,subnormal,252,10322096095657499292,inf,inf,inf,,,,No,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310,-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,general,4092,10322096095657499292,108.673668,105.665876,105.380753,90.000000,15.380753,yes,Both,yes,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60037994384765625,-156159778640594921198000750.60038290050850297752267811067325203046404306830015704 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,general,4092,10322096095657499292,108.517210,105.172405,104.685792,,,,Both,no,"broad lhs [-8038039671158.3145,-0.00022310041789425956,1.2384561037485062e-20,-6.8748124068457664e-37] ; broad rhs [2.5635359082663138e-69,7.1152414745265618e-86,-3.9497524553936191e-102,2.1925530587738712e-118]",-2.0605803329083492881294378674856916780067042740122006434502346656412091808499997e-56,-2.0605803329083492881294378674857548356708679074621085271346648345255418966878113e-56 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,general,4092,10322096095657499292,114.944521,113.125729,113.004612,,,,No,no,"structured lhs [6.7508285404035795e-17,1.8737313202131732e-33,-1.0401298268309784e-49,5.7738804117356459e-66] ; balanced-product rhs [14812996567977088,0.41114324633653965,-2.2823034925097943e-17,1.2669329432833911e-33]",1.0000000000000000329652822598848238397673215012480593411198684057546474598932029,1.000000000000000032965282259884823743778146023579451637148032704768423970088877 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,subnormal,8,10322096095657499292,123.430323,107.640342,107.640342,90.000000,17.640342,yes,Both,yes,"extreme lhs [5.3610920538229009e+270,1.4880019588222884e+254,-8.2600701768591933e+237,4.5852600476843326e+221] ; extreme rhs [2.8682136140660301e-295,7.9608919846980822e-312,-0,0]",1.5376757215036059473819023136396346852543747719615695276077139367073548105554037e-24,1.5376757215036059473819023136396286054027234522232977278134529923886643804961882e-24 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,subnormal,8,10322096095657499292,123.759111,108.124902,108.124902,,,,Both,no,"extreme lhs [4.6055401956920925e+270,1.2782941915235026e+254,-7.0959582183699609e+237,3.9390480979062175e+221] ; extreme rhs [-2.5697135742832743e-293,-7.1323879421527558e-310,0,-0]",-1.1834919157777218149998406915973471377624231448348574550693011367000657931522837e-22,-1.1834919157777218149998406915973504822263386136173231246119304206039636122242069e-22 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,subnormal,8,10322096095657499292,129.709469,113.478226,113.478226,,,,No,no,"extreme lhs [4.6055401956920925e+270,1.2782941915235026e+254,-7.0959582183699609e+237,3.9390480979062175e+221] ; extreme rhs [-2.5697135742832743e-293,-7.1323879421527558e-310,0,-0]",-1.1834919157777218149998406915973504004146571440971208102163557649738436437344127e-22,-1.1834919157777218149998406915973504822263386136173231246119304206039636122242069e-22 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,general,4096,10322096095657499292,110.882649,105.971646,105.124683,90.000000,15.124683,yes,Both,yes,"representative lhs [3.8069729471352109e-08,1.05664725500865e-24,-5.8655705570878625e-41,3.2560457425211756e-57] ; representative rhs [-10239996542.103203,-2.8421699832812405e-07,1.5777212776686647e-23,-8.7581124445438569e-40]",-3.717748274115425677507007818785488818087130701795158032304321273801830518128672e-18,-3.7177482741154256775070078187854047565702465103661629499646177206025402808246684e-18 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator/,general,4096,10322096095657499292,110.882649,105.971646,105.124683,,,,NaN,no,"representative lhs [3.8069729471352109e-08,1.05664725500865e-24,-5.8655705570878625e-41,3.2560457425211756e-57] ; representative rhs [-10239996542.103203,-2.8421699832812405e-07,1.5777212776686647e-23,-8.7581124445438569e-40]",-3.717748274115425677507007818785488818087130701795158032304321273801830518128672e-18,-3.7177482741154256775070078187854047565702465103661629499646177206025402808246684e-18 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,general,4096,10322096095657499292,114.933605,113.147176,113.003421,,,,No,no,"representative lhs [-3.9611127833857948e-14,-1.0994296538129874e-30,6.1030605780942182e-47,-3.3878791872411597e-63] ; representative rhs [196137443940584.88,0.0054439076563490806,-3.0219758120059617e-19,1.6775335631746611e-35]",-2.019559704563968272888412224331062020056879659920556289291944695251743532234808e-28,-2.0195597045639682728884122243310618260409213965686229269660661328516718265119011e-28 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,subnormal,4,10322096095657499292,inf,inf,inf,90.000000,inf,yes,Both,yes,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator/,subnormal,4,10322096095657499292,inf,inf,inf,,,,NaN,no,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,subnormal,4,10322096095657499292,inf,inf,inf,,,,No,no,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,moderate,4099,10322096095657499356,109.099094,104.680325,99.580200,90.000000,9.580200,yes,Both,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50] ; [-2.2467526986846895,-6.2359914417961224e-17,3.4616706400237409e-33,-1.9216132241116296e-49] ; [-0.82478157060333857,-2.2892287249258141e-17,1.2707772195229639e-33,-7.0542306414176576e-50]",-0.0025616587031475578614921195531973426573882576399799792521563357797220739087151742,-0.0025616587031475578614921195531946393591985326302623011385541559314120186541712416 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,moderate,4099,10322096095657499356,108.177888,103.664946,99.580200,,,,Both,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50] ; [-2.2467526986846895,-6.2359914417961224e-17,3.4616706400237409e-33,-1.9216132241116296e-49] ; [-0.82478157060333857,-2.2892287249258141e-17,1.2707772195229639e-33,-7.0542306414176576e-50]",-0.0025616587031475578614921195531973426573882576399799792521563357797220739087151742,-0.0025616587031475578614921195531946393591985326302623011385541559314120186541712416 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,moderate,4099,10322096095657499356,114.897442,113.182994,113.025245,,,,No,no,"[-7.5997781556486999,-2.1093621726111233e-16,1.1709312256531064e-32,-6.4999740348631675e-49] ; [7.5770165974677148,2.1030445711189046e-16,-1.1674242523345727e-32,6.4805064222382565e-49] ; [-6.6174929362548802,-1.8367232557811253e-16,1.019586224216343e-32,-5.6598405085780568e-49]",-64.201138158677660631610513778239055170095124556316768571493974662039994072415539,-64.201138158677660631610513778239061245199688185888259072502568550744850022381024 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,cancellation,4098,10322096095657499352,123.613534,107.447694,107.008989,90.000000,17.008989,yes,Both,no,"one plus a low-limb delta [1,2.3375830000300188e-20,0,0] ; one plus a low-limb delta [1,9.1191608041326794e-20,0,0] ; native product cancellation",6.0206627557371401035138369829719396083930638942820518512027281512011279702649282e-36,6.0206627557371401035138369829719764831182728766548123483364806462892589095319671e-36 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,cancellation,4098,10322096095657499352,0.067350,0.000000,0.000000,,,,Both,no,"next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; one plus a low-limb delta [1,1.5333665360408769e-34,0,0] ; native product cancellation",0,1.5333665360408772917815245989544684211394174303105262982511956907436790017967341e-34 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,wide_exponent,4096,10322096095657499357,119.616115,106.579100,105.347039,90.000000,15.347039,yes,Both,no,"[1.6938644702759635e-90,4.701418338737172e-107,-2.6098114440304809e-123,1.448736377546434e-139] ; [79428146.335863903,2.2045739216343092e-09,-1.2237843636432928e-25,6.7933678884651449e-42] ; [9.2909522372705566e-90,2.5787572736275956e-106,-1.4314978500504758e-122,7.9464093641372402e-139]",1.3454052430915206938868087189563345722550509265256751578481158995824810109214383e-82,1.3454052430915206938868087189563606478535306154783196089715180736698264946825388e-82 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,wide_exponent,4096,10322096095657499357,119.061442,105.416426,104.112253,,,,Both,no,"[8.5721586263015062e-78,2.3792519694147713e-94,-1.3207501589145139e-110,7.331636181021139e-127] ; [8.4624728507206641e+70,2.3488080510338416e+54,-1.3038503893413553e+38,7.2378236145662375e+21] ; [-3.7357185346303535e-07,-1.0368701826663922e-23,5.7557857517176024e-40,-3.1951029331831484e-56]",3.5184474300843906574404451871894785272491595392222950262976866790968099472984533e-07,3.518447430084390657440445187189639014267579136229292612265977276091417324873532e-07 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,wide_exponent,4096,10322096095657499357,125.365166,113.230161,113.032601,,,,No,no,"[-1.3853028727925241e-16,-3.8449878636340866e-33,2.1343970278054273e-49,-1.1848283619805429e-65] ; [-2.7840252040715031e-18,-7.7272222067423321e-35,4.2894700051600743e-51,-2.3811341815838518e-67] ; [-1.0194028502696682e-51,-2.8294112893447415e-68,1.5706387797824414e-84,-8.7187966834181365e-101]",3.8567181131270467416103884341803196252968876035993596157940944011043867018129791e-34,3.8567181131270467416103884341803192622066121759357700299162474901344372908142603e-34 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,subnormal,4100,10322096095657499350,inf,inf,inf,90.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fabs,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0]",8,8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,moderate,4099,10322096095657499356,108.710750,105.621789,105.403238,90.000000,15.403238,yes,Both,yes,"[-2.0216112865291063,-5.6110984928667459e-17,3.114785370110088e-33,-1.7290532173309048e-49]",4.0869121938218684213523234559135312039828584030511109615650764542715833727015706,4.086912193821868421352323455913607387135084308816614946511827134127630171714709 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,wide_exponent,4096,10322096095657499357,108.714763,105.598081,105.370295,90.000000,15.370295,yes,Both,yes,"[4.07867604911808e+17,11.320600149295146,-6.2841954691612277e-16,3.4884292505539414e-32]",166355983136494714602069966978531328,166355983136494714602069966978534500.62754285635655510754919878168120152773808347 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,near_one,4099,10322096095657499359,109.041603,106.207316,105.235269,90.000000,15.235269,yes,Both,yes,"[0.7943239392491388,2.2046918159133699e-17,1.2238498081148352e-33,6.7937311782608489e-50]",1.2589322197002942275560659685836243624199496927685685911021398405984506041477289,1.2589322197002942275560659685835979972909064819121737721490343315675812064184067 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,wide_exponent,4096,10322096095657499357,109.009049,105.925795,105.189487,90.000000,15.189487,yes,Both,yes,"[3.5001788065165318e+43,9.7149477532491364e+26,53928793393.438126,2.9936494057824018e-06]",2.8569969000961575149593584421158660998363524565146662142923865841595715918551683e-44,2.8569969000961575149593584421158043381809410343861907578030166512899574822804677e-44 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,cancellation,4098,10322096095657499352,137.992247,inf,106.227061,90.000000,16.227061,yes,Both,yes,"one plus a low-limb delta [1.0000000000000002,-9.2098754789066345e-17,0,0] ; one plus a low-limb delta [1,9.3157411673208082e-33,0,0]",1.299458501359649542526809416735399539516537488861303804737012764889933880863069e-16,1.2994585013596495425268094167353858549612218168195955651903009493027143470550428e-16 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,cancellation,4098,10322096095657499352,137.992247,inf,106.227061,,,,No,yes,"one plus a low-limb delta [1.0000000000000002,-9.2098754789066345e-17,0,0] ; one plus a low-limb delta [1,9.3157411673208082e-33,0,0]",1.299458501359649542526809416735399539516537488861303804737012764889933880863069e-16,1.2994585013596495425268094167353858549612218168195955651903009493027143470550428e-16 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,tlfloat,tlquad,TLFloat Quad,tlfloat::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::floor,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,tlfloat,tlquad,TLFloat Quad,tlfloat::floor,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ceil,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,tlfloat,tlquad,TLFloat Quad,tlfloat::ceil,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::trunc,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,tlfloat,tlquad,TLFloat Quad,tlfloat::trunc,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::round,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,tlfloat,tlquad,TLFloat Quad,tlfloat::round,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,tlfloat,tlquad,TLFloat Quad,tlfloat::rint,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,moderate,4099,10322096095657499356,110.177573,107.236356,107.022726,90.000000,17.022726,yes,Both,yes,"[-4.0306514937478397,-1.118730523149658e-16,6.2102019257584848e-33,-3.4473545827742784e-49]",-4.0309999999999999999999999999999755453119381486340322364144762336268801306005116,-4.031 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,wide_exponent,4096,10322096095657499357,121.330260,107.340420,107.049597,90.000000,17.049597,yes,Both,yes,"[1.9564201098655394e-06,5.4301566295310004e-23,-3.0143424587131265e-39,1.6732962008842592e-55]",1.9564199999999999999999999999999883500964702027617153338260327688823346504976789e-06,1.95642e-06 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,boundary,4110,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lround,boundary,4110,10322096095657499334,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,boundary,4114,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::llround,boundary,4114,10322096095657499334,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,NaN,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,tlfloat,tlquad,TLFloat Quad,tlfloat::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,NaN,no,"lower endpoint [-8,0,0,0]",0 ; -8,-0 ; -8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0]",0 ; -8,-0 ; -8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,NaN,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,tlfloat,tlquad,TLFloat Quad,tlfloat::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,90.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,near_one,4099,10322096095657499359,109.483067,105.751120,104.669867,90.000000,14.669867,yes,Both,yes,"[1.0434745107555559,2.8962235686257217e-17,1.6077270451751567e-33,8.9246779143301406e-50]",1.0215060013311502277290127699241048631609354594130696894861318971964303514710082,1.0215060013311502277290127699240732060505168443174685619534358207641504292216177 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,near_one,4099,10322096095657499359,109.483067,105.751120,104.669867,,,,Both,no,"[1.0434745107555559,2.8962235686257217e-17,1.6077270451751567e-33,8.9246779143301406e-50]",1.0215060013311502277290127699241048631609354594130696894861318971964303514710082,1.0215060013311502277290127699240732060505168443174685619534358207641504292216177 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,near_one,4099,10322096095657499359,114.893514,113.139700,113.011246,,,,No,no,"[1.0026950548444753,2.7830378414153015e-17,1.5448963449711814e-33,8.5758974642312711e-50]",1.0013466207285443899676629818717478499906807043598557441898300032149648347568061,1.0013466207285443899676629818717477543132417661775742648846457214830114205814083 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,wide_exponent,4096,10322096095657499357,109.554369,105.974012,105.134919,90.000000,15.134919,yes,Both,yes,"[1.1645444442808547e-62,3.2322601380997815e-79,1.7942648134482328e-95,9.9601705408249462e-112]",1.0791406045001062461937244900901782471018853969286737164352073021695624156016746e-31,1.0791406045001062461937244900901540193152963432252732200525801490754009153911073e-31 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,wide_exponent,4096,10322096095657499357,109.554369,105.974012,105.134919,,,,Both,no,"[1.1645444442808547e-62,3.2322601380997815e-79,1.7942648134482328e-95,9.9601705408249462e-112]",1.0791406045001062461937244900901782471018853969286737164352073021695624156016746e-31,1.0791406045001062461937244900901540193152963432252732200525801490754009153911073e-31 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,wide_exponent,4096,10322096095657499357,115.008272,113.213152,113.048418,,,,No,no,"[3.2184369798376745e+141,8.9329570958020924e+124,4.9587873228740766e+108,2.75267993003707e+92]",56731269859202645932411245930365626819033560927736571074222411518836736,56731269859202645932411245930365621536311029635164147191486159156902261.890013455 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,extreme_finite,4096,10322096095657499354,109.462818,106.258948,105.096134,90.000000,15.096134,yes,Both,yes,"[1.3220615149200299e+307,3.6694578345875804e+290,2.0369582879251504e+274,1.1307389957277705e+258]",3.6360163846165902232928621254916330482868374851642045295187667520670879059664215e+153,3.6360163846165902232928621254915491917111449494286729393569803221869869190043071e+153 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,extreme_finite,4096,10322096095657499354,99.075519,54.379751,54.379751,,,,Both,no,"[4.4501477170144028e-308,0,0,0]",2.1095373229725996925287841451839082884122437148964001557167765265107074071004867e-154,2.1095373229725997825305399118428952353362442939022476368457472326927562550301553e-154 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,extreme_finite,4096,10322096095657499354,114.998426,113.400132,113.089186,,,,No,no,"[1.2100084684275982e+307,3.3584481540993534e+290,1.864313233845479e+274,1.0349017386643172e+258]",3.4785175986727424967005535821835381192527716211870969057349865948795513924365055e+153,3.4785175986727424967005535821835378043641146296572772642207472485040396982804778e+153 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,subnormal,4100,10322096095657499350,110.498955,106.653014,106.214358,90.000000,16.214358,yes,Both,yes,"[9.5745039639339057e-314,0,0,0]",3.0942695364065984592266695010140804816710164393335370623177724037590908372789884e-157,3.0942695364065984592266695010140476078219969118554123365016956606210529423634246e-157 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,subnormal,4100,10322096095657499350,136.077182,54.203493,52.856137,,,,Both,no,"[2.2808542441585355e-308,0,0,0]",1.5102497290708368298203124345003253345331819466760323292298625271598666264010766e-154,1.5102497290708366445669588428608119550768311386114505932804710381323871783374605e-154 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,subnormal,4100,10322096095657499350,115.748346,113.182628,113.057490,,,,No,no,"[3.3473090784781747e-316,0,0,0]",1.8295652703519966884871325261523154568283013418382798220004886925664373028422914e-158,1.8295652703519966884871325261523152875301365777253845679302788817070239592338861e-158 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,moderate,4099,10322096095657499356,108.134138,104.279589,103.154742,90.000000,13.154742,yes,Both,yes,"[-5.9112302503110126,-1.6406959819390034e-16,9.1076922777933078e-33,-5.0557848340034338e-49]",-1.8081146236170408256662159398260846805204664291606354162902101437304658304583427,-1.8081146236170408256662159398259245204126936694753799586379567762813578965663977 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,moderate,4099,10322096095657499356,108.562197,105.566437,104.600252,,,,Both,no,"[-5.4359803461266463,-1.5087876354199076e-16,8.3754538605646392e-33,-4.6493108588422589e-49]",-1.7582985823855373734893631229630491426724707896779619814085811736574516128683854,-1.7582985823855373734893631229629919580574226691808687607708137148977336669671777 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,moderate,4099,10322096095657499356,115.120076,113.301989,113.021191,,,,No,no,"[-0.12734564822864947,-3.5345517687315605e-18,1.9620703776876749e-34,-1.0891678546219169e-50]",-0.50310816950005327602384340490057847852046360556811795630525693376382473723240629,-0.50310816950005327602384340490057852626159976956627613790876407903204245377117839 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,wide_exponent,4096,10322096095657499357,107.940958,104.101707,103.019576,90.000000,13.019576,yes,Both,yes,"[2.9828051152340277e-55,8.2789472922562771e-72,-4.5957389517605069e-88,2.5511475997055982e-104]",6.6815151845441513626509033780520045477856444490717657200631959144352644689019878e-19,6.6815151845441513626509033780513545789151896608767546149873769328352874764005102e-19 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,wide_exponent,4096,10322096095657499357,108.226509,105.391162,104.688938,,,,Both,no,"[-2.5093388050492908e+220,-6.9648142948777493e+203,3.8662485962058509e+187,-2.1461991052162126e+171]",-29276541249127547258888263930375634305818369506660520834833227626443702272,-29276541249127547258888263930374738922229461259377145616398423692846763008.357894 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,wide_exponent,4096,10322096095657499357,114.945588,113.203933,113.028879,,,,No,no,"[-6.0253985814299791e+20,-16723.840594118297,9.2835964438754955e-13,-5.1534312616594e-29]",-8446211.0069017797205775974332527170734424995574270785166082209372007127967663109,-8446211.0069017797205775974332527162762210477168824322444258883093409908788493932 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,moderate,4099,10322096095657499356,108.682153,105.556470,104.448638,90.000000,14.448638,yes,Both,yes,"[2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49] ; [7.6161438781938315,2.1139045731071814e-16,-1.1734527644620026e-32,6.5139713870787798e-49]",8.0914622723995239714248451353921972400978668058729318673943800913073154390531272,8.0914622723995239714248451353919049231629452774327450009049705044051673057483058 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,moderate,4099,10322096095657499356,107.822875,104.898769,104.258205,,,,Both,yes,"[-1.3812728338831572,-3.8338022586658006e-17,2.128187769715351e-33,-1.1813815313318215e-49] ; [5.7084223966267196,1.5844054947552254e-16,-8.7952173030993197e-33,4.8823263782412195e-49]",5.8731593627223457932834487849635333739185201884555156890126582230893248492975545,5.8731593627223457932834487849632912571541598546275170519229698090249476736042578 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,moderate,4099,10322096095657499356,114.999147,113.150622,113.012814,,,,No,yes,"[-4.3730961569334426,-1.2137780105818237e-16,6.7378214706582879e-33,-3.7402422662692824e-49] ; [-6.7563038999618339,-1.8752510377755921e-16,1.0409734395453408e-32,-5.7785634030324038e-49]",8.0480812860224973255103414066425067013553335932596541895380453632323838886186707,8.0480812860224973255103414066425074695044837774480341865898326900589136068326501 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,wide_exponent,4096,10322096095657499357,136.086569,107.303893,104.375984,90.000000,14.375984,yes,Both,yes,"[-1.0904439541376617e-171,-3.0265899623673255e-188,1.6800949311597954e-204,-9.3264003806481111e-221] ; [-6.6064316563514781e-178,-1.8336531338734802e-194,1.0178819642012061e-210,-5.6503799650342919e-227]",1.0904439541378618053723797776842685378887910042683910204594308964030285890648591e-171,1.090443954137861805372379777684227109194726424167261957374676671431464584983977e-171 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,wide_exponent,4096,10322096095657499357,136.075898,106.558614,104.375984,,,,Both,yes,"[-1.0904439541376617e-171,-3.0265899623673255e-188,1.6800949311597954e-204,-9.3264003806481111e-221] ; [-6.6064316563514781e-178,-1.8336531338734802e-194,1.0178819642012061e-210,-5.6503799650342919e-227]",1.0904439541378618053723797776842685378887910042683910204594308964030285890648591e-171,1.090443954137861805372379777684227109194726424167261957374676671431464584983977e-171 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,wide_exponent,4096,10322096095657499357,142.925810,113.798728,113.017880,,,,No,yes,"[-2.5387398996340912e+175,-7.0464187252708178e+158,3.9115481549727536e+142,-2.1713454117904006e+126] ; [-1.2492509467162383e+176,-3.4673679114478559e+159,1.9247758450679253e+143,-1.0684652302183768e+127]",1.2747862293935241998715278949185518204872807338309159207365404839623318589574331e+176,1.2747862293935241998715278949185519417327664706045321099892601682646620979899304e+176 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,moderate,4099,10322096095657499356,109.289129,105.940176,105.022316,80.000000,25.022316,yes,Both,yes,"[-2.6398923795068718,-7.3271732556525522e-17,4.0673982269215659e-33,-2.2578595809239299e-49]",-0.48091697577772919399226624691062015405871262531310584383165433654955256415064468,-0.48091697577772919399226624691060848051161030920422183238229214193978802883324422 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,moderate,4099,10322096095657499356,105.208184,98.842806,94.535168,,,,Both,no,"[6.2844284435634243,1.7442792886633375e-16,-9.6826951382541352e-33,5.3749755414579021e-49]",0.0012431360636500376406651182821121730753493691312774912955712974681383737457496252,0.0012431360636500376406651182820688621589555923240867697280247701026819500889579145 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,moderate,4099,10322096095657499356,115.094324,113.249179,113.045938,,,,No,no,"[6.5381038876502018,1.8146883683651254e-16,-1.0073544045392099e-32,5.5919402693849756e-49]",0.2521666211082424428698227592038028825451917195456792597336083477088111096803269,0.25216662110824244286982275920380290606693590184617967372759389209466870282434292 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,argument_reduction,4110,10322096095657499353,107.878813,98.777563,98.619216,80.000000,18.619216,yes,Both,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107778446817142530158141594307620809510923605317049154659252158834084e-08,2.983455547010777844681714253021942987548016308835936187833122791508178595472033e-08 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,argument_reduction,4110,10322096095657499353,13.903457,0.000000,0.000000,,,,Both,no,"below 2^159 * pi/2 [1.1478607017620547e+48,4.4745582552647293e+31,0,0]",0,0.021365912798790453936390424940051299694178385353250054265686403111677266065263432 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,argument_reduction,4110,10322096095657499353,115.121400,113.247632,113.016004,,,,No,no,"near 2^76 * pi/2 [-1.1868601480113558e+23,-4626584.798117674,-0,-0]",-2.991546159228189837237259988878058058522824214333998724226921577853581648471192e-08,-2.9915461592281898372372599888780577736253933802297625994170074222835607860644083e-08 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,quadrant_boundaries,4315,10322096095657499369,114.302289,100.269139,100.230956,80.000000,20.230956,yes,Both,yes,"below random k*pi/2, exponent 43, quadrant 2, offset bits 64 [-15189111743596.248,-2.2040936843613776e-05,0,0]",8.2340339752651274439911770999089811880423371828520810609536481004607152164951472e-07,8.2340339752651274439911770999034465622958436535312599533652322394306622926203602e-07 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,quadrant_boundaries,4315,10322096095657499369,35.860103,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,0,0]",-1.9721522630525295135293214132069655741830160877725575119256973138760586841205045e-31,-2.3958158477746716437132754143003601519786715229456446471729141723273547177369775e-32 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,quadrant_boundaries,4315,10322096095657499369,118.124335,113.301358,113.056664,,,,No,no,"below random k*pi/2, exponent 98, quadrant 2, offset bits 64 [5.2509035675505552e+29,24361744657474.965,0,0]",0.00050104453726438394320632816150931384605222803849832956072091239859583674922988063,0.00050104453726438394320632816150931379966169648997739743564579442804004531880567156 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,moderate,4099,10322096095657499356,109.267445,105.979013,105.328054,80.000000,25.328054,yes,Both,-,"[1.3052020301228939,3.6226633640748349e-17,-2.010982138630954e-33,1.1163193362090118e-49]",0.26248277312553705702695162816852912212589596287237225345705224528736199118839068,0.26248277312553705702695162816852396749826395623085371572470338778345559864971624 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,moderate,4099,10322096095657499356,105.096924,98.858609,93.965626,,,,Both,-,"[-1.5710057703990365,-4.3604169452899814e-17,2.4205176448133145e-33,-1.3436572103915992e-49]",-0.00020944360260871006193062533305160960273584796505827979128681216249836620751229033,-0.00020944360260871006193062533304078043778399835827433173896692012466864520641420855 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,moderate,4099,10322096095657499356,115.039634,113.213457,113.010990,,,,No,-,"[5.2369706645778571,1.4535513527752112e-16,-8.0688308966304143e-33,4.4791009216229662e-49]",0.50085098214838463855968162916383300055843951821959226717067697020859201942344363,0.50085098214838463855968162916383295269424197487894136066019138473249540678149535 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,argument_reduction,4110,10322096095657499353,117.900119,105.731702,99.209588,80.000000,19.209588,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1273107444367091e-17,-0,-0]",-4.076748699943230335115082501060544610987236354894355627499358880133086316429937e-20,-4.0767486999432303351150825010549823398817902769691808721665498735571977321034076e-20 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,argument_reduction,4110,10322096095657499353,53.212790,0.000000,0.000000,,,,Both,-,"near 2^126 * pi/2 [1.3362857300812084e+38,5.211837175288784e+21,0,0]",1,0.12389438145972806630180177273660243986440796037880327575695354625393002465936553 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,argument_reduction,4110,10322096095657499353,118.819573,113.370594,113.060433,,,,No,-,"near 2^80 * pi/2 [-1.8989762368181692e+24,-73976767.197321281,-0,-0]",-0.12942023716847009375826722037243897339068070281783466012127372257569724641607101,-0.12942023716847009375826722037243896143922841764928503089856138759520111599980159 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,quadrant_boundaries,4315,10322096095657499369,113.389741,100.266388,100.241282,80.000000,20.241282,yes,Both,-,"below random k*pi/2, exponent 32, quadrant 1, offset bits 64 [6759185830.8093033,2.5452908459680444e-07,0,0]",3.6641619809983954738175143693267979746715518809894967024037216566072372430296582e-10,3.6641619809983954738175143693292433300620783220933192304310816115127405346807142e-10 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,quadrant_boundaries,4315,10322096095657499369,33.114490,0.000000,0.000000,,,,Both,-,"nearest -15 * pi/2 [-23.56194490192345,8.5787174003973557e-16,0,0]",9.8607613152626475676466070660348278709150804388627875596284866173206592926506306e-32,1.0134821928809237200253698176522341586156194979036934117710462075918197333039617e-32 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,quadrant_boundaries,4315,10322096095657499369,117.776775,113.250616,113.050939,,,,No,-,"below random k*pi/2, exponent 125, quadrant 1, offset bits 64 [1.0722390890202377e+38,7.0208708334792359e+21,0,0]",0.25132271638165246986440048084991865200928286725260385276945855894414915722434589,0.25132271638165246986440048084991867537117391753101066720201827935805516002807079 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,moderate,4099,10322096095657499356,106.990413,104.358303,103.662452,75.000000,28.662452,yes,Both,yes,"[1.0283589742402928,2.8542695269537032e-17,-1.5844378736549776e-33,8.7953970420994041e-50]",1.6590692097473263340445844749263504271822370452064470782609014202699238005322968,1.65906920974732633404458447492645378827060656915569642322001914303143546133552 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,moderate,4099,10322096095657499356,103.349908,97.873923,93.965781,,,,Both,no,"[-1.5710057703990365,-4.3604169452899814e-17,2.4205176448133145e-33,-1.3436572103915992e-49]",4774.554895023094650399553453252461839481804223695521544653525003454319630691316,4774.5548950230946503995534534993010818968099560510757877602371533385327275377315 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,moderate,4099,10322096095657499356,114.964744,113.144915,113.030226,,,,No,no,"[7.8233413976025243,2.1714134372803685e-16,-1.2053765970245592e-32,6.6911842568049228e-49]",32.626609890158811177010429275027148128590854752867790147209289244780577865512328,32.626609890158811177010429275027151205279743971652782283113637869256027936993481 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,argument_reduction,4110,10322096095657499353,106.636659,98.776698,98.614153,75.000000,23.614153,yes,Both,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107791724696498071933228039119120966041628715515577584130136247446007e-08,2.9834555470107791724696498071994731788491203878271025995398127676131094640315383e-08 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,argument_reduction,4110,10322096095657499353,12.950427,0.000000,0.000000,,,,Both,no,"below 2^159 * pi/2 [1.1478607017620547e+48,4.4745582552647293e+31,0,0]",0,0.02137079126254257846132915638081114263722266664450390178599097407419423953862763 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,argument_reduction,4110,10322096095657499353,114.901636,113.184394,113.016302,,,,No,no,"near 2^28 * pi/2 [421657428.26631308,1.6436931070387506e-08,0,0]",-2.801550183192147675953312924187040410984604348447289725904902692584357714526975e-17,-2.8015501831921476759533129241870406777328880187547368316806178088235260252825752e-17 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,quadrant_boundaries,4315,10322096095657499369,106.499081,100.252704,100.193377,75.000000,25.193377,yes,Both,yes,"below random k*pi/2, exponent 35, quadrant 3, offset bits 64 [-59550109601.544846,-4.5998843808876405e-07,0,0]",309768431.94980647490490283626492826519224603465385570189027930609881877899169922,309768431.94980647490490283626514197542933150294098619645159482100231149999767842 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,quadrant_boundaries,4315,10322096095657499369,8.956412,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,0,0]",-1.9721522630525295135293214132069655741830160877725575119256973863858620655932743e-31,-2.3958158477746716437132754143003601519786715229456446471729141730149459091184131e-32 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,quadrant_boundaries,4315,10322096095657499369,114.985922,113.201255,113.030213,,,,No,no,"above random k*pi/2, exponent 73, quadrant 3, offset bits 100 [-1.8700734696156561e+22,-823589.80510121852,0,0]",-67624126.695955066322084141067273598883454782996848099821396438358078739838674664,-67624126.695955066322084141067273605260463639168624432485484257712303362119330611 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,near_one,4099,10322096095657499359,108.638031,106.152026,105.321909,80.000000,25.321909,yes,Both,yes,"[0.68327775494803278,1.8964767393937287e-17,-1.0527560708704801e-33,5.8439701459716004e-50]",0.59941459668283531301680476878329138003111794710527586828655022266332252911524847,0.5994145966828353130168047687833032015572049547180395358634521660952312280617229 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,near_one,4099,10322096095657499359,106.588476,104.193031,103.565475,,,,Both,no,"[0.59922936585146047,1.6631955974995573e-17,-9.232590233996015e-34,5.1251171273558688e-50]",0.53985266485908503628140184552645633503401709334955396726761503380272178009846584,0.53985266485908503628140184552649230671320267202579643720050843055093098479341871 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,near_one,4099,10322096095657499359,115.096489,113.278798,113.091826,,,,Inf,no,"[0.55993379075339322,1.5541284669001543e-17,-8.6271460358897341e-34,4.789028082924215e-50]",0.51043791759628196772972085185796332214599303086125967899625004231756652747775682,0.51043791759628196772972085185796336826828859446251053237503140908095741580338084 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,moderate,4099,10322096095657499356,108.819079,105.953468,104.926390,80.000000,24.926390,yes,Both,yes,"[1.7923972346284831,4.9749016978975022e-17,-2.7616252051262958e-33,1.5330099440581923e-49]",1.0618989131564895436407540480874589123331650567714808343216437342988039960189894,1.0618989131564895436407540480874313641834035736707386450972798475694004675512729 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,moderate,4099,10322096095657499356,106.844628,104.728392,103.681417,,,,Both,no,"[0.2857560326209736,7.9313231710335552e-18,-4.4027688001122307e-34,2.444027646992936e-50]",0.27833825477622709162386907260361096838828187272939914113340062647161676778750916,0.27833825477622709162386907260362808257597424159856848418749771732394908517032952 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,moderate,4099,10322096095657499356,114.879313,113.253632,113.035851,,,,Inf,no,"[-1.5734601079176329,-4.3672291003483491e-17,2.4242991505098727e-33,-1.3457563677376342e-49]",-1.004652131404238346511320335870031739283046009993498654158329194945736828614713,-1.0046521314042383465113203358700316449130358715858571333899916584587287045766648 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,near_one,4099,10322096095657499359,108.593233,105.799026,104.761376,80.000000,24.761376,yes,Both,yes,"[1.0818954035110564,3.0028629680352481e-17,-1.666923803453484e-33,9.2532859344489846e-50] ; [0.65275323882187208,1.8117541878467149e-17,-1.0057256071542369e-33,5.5828986275887446e-50]",1.0279228914914060327533533251293914713081558101296952640517443772205652408047172,1.0279228914914060327533533251293615731716847356252552579150219391046313458442121 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,near_one,4099,10322096095657499359,106.583628,104.234944,103.492572,,,,Both,no,"[1.0507333108929335,2.916370786234894e-17,-1.6189109976110749e-33,8.986761321833486e-50] ; [1.2650802084969899,3.5113029386773794e-17,-1.9491646844768004e-33,1.0820037557461861e-49]",0.69310320015039092381296369548557195305017378886812875991225074484222701265423439,0.6931032001503909238129636954856205298991193123179607682885119797622283795278364 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,near_one,4099,10322096095657499359,114.968209,113.174887,113.027946,,,,Inf,no,"[1.3372324738194741,3.7115657042770924e-17,-2.0603328511487564e-33,1.1437144848684724e-49] ; [0.83447791299898855,2.3161414813815632e-17,-1.2857168004596149e-33,7.1371619750882627e-50]",1.0128922965936482719447380487334569972731678420777069662816424218111611629811186,1.0128922965936482719447380487334570929399651157625544908533628582220778293271098 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,moderate,4099,10322096095657499356,108.845358,105.968236,104.520841,80.000000,24.520841,yes,Both,yes,"[0.17246963902978685,4.7869941074914726e-18,-2.6573155384409922e-34,1.4751064472356924e-50] ; [4.1006496155849739,1.1381589047856838e-16,-6.318051108876087e-33,3.5072229059163668e-49]",0.042034327541476674060107604306532306204552005274371072135952080023324484159275016,0.042034327541476674060107604306530861776728203971856534731213306751945145807618236 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,moderate,4099,10322096095657499356,106.908043,104.409787,103.662354,,,,Both,no,"[3.7333993131913807,1.0362264694062042e-16,-5.7522124253040164e-33,3.1931193385537162e-49] ; [5.3335026674387365,1.4803443658225436e-16,-8.2175619965515678e-33,4.5616632674281109e-49]",0.61071935122765676237943548306421128022715521279517283116625796213737531470400199,0.61071935122765676237943548306424933103169620630034311511112534813715772653810797 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,moderate,4099,10322096095657499356,114.931792,113.169783,113.005900,,,,Inf,no,"[6.15799117025648,1.7091858956642891e-16,-9.4878876736553216e-33,5.2668356751746757e-49] ; [-2.8723638314665259,-7.9724111519866743e-17,4.4255772113569871e-33,-2.4566888586524599e-49]",2.0072413975928422432930791156337093117686276911278999771622954148125308679317946,2.007241397592842243293079115633709504270091951029495114195079457907970865310122 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,extreme_finite,8,10322096095657499351,116.769509,109.692678,109.692678,80.000000,29.692678,yes,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397529394834895588573302312846062338790031898128063,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,extreme_finite,8,10322096095657499351,61.209588,0.000000,0.000000,,,,Both,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",nan,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,extreme_finite,8,10322096095657499351,118.649421,114.802646,114.802646,,,,Inf,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397513987395340490686477865022521659371483593314878,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,moderate,4099,10322096095657499356,107.979933,105.096123,104.081582,80.000000,24.081582,yes,Both,yes,"[-0.03158561470140564,-8.766769172109845e-19,4.8665344932251859e-35,-2.7014693222555596e-51]",-0.031590868964255888487475098364116757608941970863589142199408956157005365361634119,-0.031590868964255888487475098364115285691415570498034097956857353613513937214419265 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,moderate,4099,10322096095657499356,106.537625,104.076665,103.158102,,,,Both,no,"[0.9440509083517975,2.6202676371761477e-17,-1.4545407307365575e-33,8.0743230475941312e-50]",1.2347048655119616120052676852454106000496531918916062324420706837295458324632591,1.2347048655119616120052676852453014860930009767392836002434933599817314326718944 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,moderate,4099,10322096095657499356,114.947518,113.199623,113.012058,,,,No,no,"[0.12474215398466793,3.4622902873778762e-18,-1.9219571974914841e-34,1.0669005664995424e-50]",0.12506795106413992402354933757400079832840734406034132627003412512726624817097076,0.12506795106413992402354933757400081027177335071584045641110721623291972191179353 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,boundary,4105,10322096095657499355,109.179337,106.113879,105.956528,80.000000,25.956528,yes,Both,yes,"[0.99999942350312121,2.7755559614626202e-17,-1.5407430672757073e-33,8.5528421416053841e-50]",1.5697225512744511775996984093823162316469799617556662501159018933971633913415644,1.5697225512744511775996984093822962914427098056014529298362837222126251898438199 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,boundary,4105,10322096095657499355,106.984950,105.503128,105.402715,,,,Both,no,"[-0.99999922428528665,-2.7755554085220531e-17,1.5407427603320329e-33,-8.552840437725711e-50]",-1.5695507628153165878808648244495547137714913079677828628484981959845256938024249,-1.5695507628153165878808648244495839820077603707708144064426117014428883477602293 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,boundary,4105,10322096095657499355,115.113201,113.662197,113.650342,,,,No,no,"[-0.99999926068382938,-2.7755555095483036e-17,1.5407428164128676e-33,-8.5528407490368807e-50]",-1.569580336448152538387862341824414705980941808225034533535579205101276496769902,-1.5695803364481525383878623418244146096819702328353660760934473597656326582483983 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,moderate,4099,10322096095657499356,108.568133,105.119090,102.606898,80.000000,22.606898,yes,Both,-,"[0.99447363321554472,2.7602188124463265e-17,-1.5322292392907091e-33,8.5055809023221692e-50]",0.10518045845827819297865791404046697400704440931878221279239664668822551440996449,0.10518045845827819297865791404048059412910636761979542748882605088251354897169005 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,moderate,4099,10322096095657499356,106.826944,104.122161,102.539984,,,,Both,-,"[0.83339529970063941,2.3131366258550818e-17,-1.284048770564029e-33,7.1279025491090496e-50]",0.58557343260644397607277637387573467882638540356530977311031807845849439519980706,0.58557343260644397607277637387581410624260947434077519013298043784881918735454894 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,moderate,4099,10322096095657499356,114.898379,113.171158,113.047621,,,,No,-,"[-0.45715822972539222,-1.2688689813450177e-17,7.0436377916095346e-34,-3.9100044266823978e-50]",2.0455936847846887489751794724924589062213555121293704269540512834458156551931118,2.0455936847846887489751794724924590968089464877104280431708665030765709283604497 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,boundary,4105,10322096095657499355,104.376193,95.825547,81.584963,80.000000,1.584963,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863439534155160504671268531080086442146964698096667234494817e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,boundary,4105,10322096095657499355,107.086731,104.648615,104.149340,,,,Both,-,"[0.99999934503035492,2.7755557436569404e-17,-1.540742946369267e-33,8.5528414704398147e-50]",0.0011445258551427070941068738473539623713411732011302531058393685780530564521928483,0.0011445258551427070941068738473540132517027939037678964817350591380117937533213228 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,boundary,4105,10322096095657499355,114.952164,113.210243,113.019157,,,,No,-,"[0.99999951327014636,2.7755562106161656e-17,-1.5407432055837087e-33,8.5528429093690223e-50]",0.00098664065707865998773786346026427739790392738317321398040088536942829912436176039,0.00098664065707865998773786346026427749166071876813272361725882961213506150597977497 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,moderate,4099,10322096095657499356,107.422628,104.784889,104.123120,80.000000,24.123120,yes,Both,-,"[-7.4260131889231964,-2.0611327058781538e-16,1.1441584934369385e-32,-6.3513555161706011e-49]",0.00059555715897935043401591506055704088046193962180369225037771615963253651893083429,0.00059555715897935043401591506055701391914881720026106459729557182617396144915233455 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,moderate,4099,10322096095657499356,103.684388,101.106308,100.622692,,,,Both,-,"[6.2894204955453095,1.7456648614259411e-16,-9.6903866121708154e-33,5.3792451671757032e-49]",538.84097784188683014615383865455606418723372617967866426199469165325695030333009,538.84097784188683014615383865483212958439419934285301934539232895991755161454027 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,moderate,4099,10322096095657499356,114.936433,113.201931,113.034174,,,,No,-,"[-2.7524176726202221,-7.6394936838203922e-17,4.2407708921279276e-33,-2.3541007433002956e-49]",0.063773491250200208373748723374130927612358133134113120172047880385269533762629401,0.063773491250200208373748723374130933609760256587112174195050990978697911747191691 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,boundary,4099,10322096095657499339,106.555700,104.344345,103.645110,80.000000,23.645110,yes,Both,-,"[689.56791103874002,1.913935429694702e-14,-1.0624475908464504e-30,5.8977688890762846e-47]",2.9890877290907641503012149009532296945711450367253589288612016829881349927374169e+299,2.9890877290907641503012149009534181687133803867116344877486422688909796071e+299 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,boundary,4099,10322096095657499339,97.061161,0.000000,0.000000,,,,Both,-,"lower endpoint [-700,0,0,0]",0,9.8596765437597708567053729478494651051156001814009417105864667677931867965946372e-305 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,boundary,4099,10322096095657499339,114.941676,113.155192,113.027016,,,,No,-,"[-106.03442153664571,-2.943046404819841e-15,1.6337189405856384e-31,-9.0689619180219691e-48]",8.9091410513973682950278649000499914419415317652051246328683034651881238681163385e-47,8.9091410513973682950278649000499922839443594814782326173403842131731778025563998e-47 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,moderate,4099,10322096095657499356,108.902998,106.013023,105.332281,80.000000,25.332281,yes,Both,-,"[2.5050708699436939,6.9529683953231499e-17,-3.8596728009893943e-33,2.1425488055889476e-49]",5.6767722797494772853116587667814582973149425261925085601171598811975904652626923,5.6767722797494772853116587667815694514029231846505256411149926048833678443740637 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,moderate,4099,10322096095657499356,103.839952,101.142179,100.414694,,,,Both,-,"[3.8148963235585232,1.0588464337431334e-16,-5.8777784514193096e-33,3.2628224852056573e-49]",14.073373823089690423486976994593612874034538497537247478418910573427780263955356,14.073373823089690423486976994601941307827954000551175451985943856849500024740817 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,moderate,4099,10322096095657499356,114.965914,113.164112,113.011731,,,,No,-,"[-7.9959423366658164,-2.2193198214353661e-16,1.2319699823822672e-32,-6.8388072004392078e-49]",0.0039172520189509527584047035166407065909139982295504516955430206336675765627867302,0.003917252018950952758404703516640706216751198658792221393620632776629080535929414 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,boundary,4099,10322096095657499339,108.889789,106.068713,105.117537,80.000000,25.117537,yes,Both,-,"[-300.54967496719229,-8.341929229804598e-15,4.6307009503613316e-31,-2.5705554076223722e-47]",3.3537651522202066232694855987502461915822095092416702651658002446064688733175029e-91,3.3537651522202066232694855987503223996548021083914718227771648387284160913978918e-91 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,boundary,4099,10322096095657499339,99.466638,96.374310,95.216729,,,,Both,-,"[698.97202361981408,1.9400370854788909e-14,-1.0769369204626738e-30,5.9782008258328567e-47]",2.5795576573742430042352146252587791727029440720160246133153522460811619953466992e+210,2.579557657374243004235214625314813457457020895250501024774331309230444404594941e+210 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,boundary,4099,10322096095657499339,115.017273,113.141516,113.031247,,,,No,-,"[-623.98297046261791,-1.7319006519539934e-14,9.6139799008132156e-31,-5.3368309220831554e-47]",1.4534801573612130574507922601992539191333162412583157547920661290709870204156299e-188,1.4534801573612130574507922601992540560995029614644815271939387362904115301725391e-188 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,moderate,4099,10322096095657499356,108.703910,105.111574,104.102752,80.000000,24.102752,yes,Both,yes,"[0.34499201425549764,9.5754519384565927e-18,-5.3154436066330483e-34,2.9506639390902969e-50]",0.41197864392194338236442692612392088638530541488783931021803297713515523703620147,0.41197864392194338236442692612390197063088901255454253734406676554091755929509722 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,moderate,4099,10322096095657499356,106.117958,101.057168,100.341101,,,,Both,no,"[0.55778275215845952,1.5481581354627725e-17,-8.5940040387576104e-34,4.7706305787751426e-50]",0.74679512561239122148963802326995846614536066819091057793767438922893919794887552,0.74679512561239122148963802327042353821810425608280027454957470110002731722314746 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,moderate,4099,10322096095657499356,115.099931,113.238852,113.025470,,,,No,no,"[-0.13544667321528081,-3.759400380312106e-18,2.086886430503535e-34,-1.1584546824614156e-50]",-0.12667426665988540296635337345058074378660986274343523857272835609845049436444908,-0.1266742666598854029663533734505807318017844144056911301472125012780803029716347 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,cancellation,4098,10322096095657499336,134.532978,106.243436,104.431991,80.000000,24.431991,yes,Both,yes,"[5.2823021564447655e-10,1.4661333692780236e-26,-8.1386751187185946e-43,4.5178722533726315e-59]",5.2823021578399014295181730840717304111038933843651099389423600846862121746910786e-10,5.2823021578399014295181730840715373648809557706009947616651919887543783634460306e-10 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,cancellation,4098,10322096095657499336,134.582909,106.579660,104.032519,,,,Both,no,"[9.640978373446825e-32,2.675909042528464e-48,-1.485427915408879e-64,8.245781365539434e-81]",9.6409783734468253031264825210279822527089990205713589968491374709281993532281666e-32,9.6409783734468253031264825210284469950289853675378445109860829891746497320528387e-32 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,cancellation,4098,10322096095657499336,141.266766,113.673411,113.009736,,,,No,no,"[-1.1160763165924209e-16,-3.0977340597993533e-33,1.7195878386774018e-49,-9.5456300568253038e-66]",-1.1160763165924208772961271662821860972007309068079894040911997121794737926855797e-16,-1.1160763165924208772961271662821862039521037829862229931689764596843753080637539e-16 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,near_one,4099,10322096095657499359,107.587097,104.625423,103.727726,80.000000,23.727726,yes,Both,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.16836588841698423133590420499408908570076543035915070334582452268043853416124023,0.16836588841698423133590420499409911099841188934514465011564788537156738257109514 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,near_one,4099,10322096095657499359,101.676417,95.715279,87.939907,,,,Both,-,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",2.8031904738997079030831457992482622568319573100854233424378291784917482942773859e-05,2.8031904738997079030831458086911024069529667493434989217092636151341185760406095e-05 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,near_one,4099,10322096095657499359,114.903817,113.175281,113.007854,,,,No,-,"[1.2848659065765915,3.5662192825930181e-17,1.9796493791984882e-33,1.0989261607355295e-49]",0.25065436004336111863518701227037801362273786683129506989659931978979784481659232,0.25065436004336111863518701227037803762883557789306170721707519765093430995709876 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,wide_exponent,4096,10322096095657499357,108.459773,105.569923,104.766295,80.000000,24.766295,yes,Both,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-282.39686865150220367499305723086940567546238559138028340316645126151229305833112,-282.39686865150220367499305723087759150499758429977321630947871340522978294577768 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,wide_exponent,4096,10322096095657499357,106.876407,104.641553,102.373621,,,,Both,-,"[9.8724575378275929,2.740157417032594e-16,1.5210929277434915e-32,8.443761954876569e-49]",2.2897488131137169994105625805515515334956951130684182404586939334895090425447961,2.2897488131137169994105625805519000770341292764626019169410782736436637403671614 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,wide_exponent,4096,10322096095657499357,114.899153,113.162642,113.028614,,,,No,-,"[5.458701172842345e+224,1.5150939316594794e+208,8.4104608369910374e+191,4.6687436344678076e+175]",517.47627171169320427846349718798625199324761647559864417169039332508595485649039,517.47627171169320427846349718798630084579140073034479946317933618634716552824299 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,extreme_finite,4096,10322096095657499354,109.176760,105.259872,105.032438,80.000000,25.032438,yes,Both,-,"[7.8173980412642063e+300,2.1697638245177804e+284,1.2044608779891888e+268,6.6861009950191438e+251]",692.83187966610744796102335261136963360047942862056461746020352698849364969646558,692.8318796661074479610233526113529337163936151304127833135311352796511576817801 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,extreme_finite,4096,10322096095657499354,107.235578,105.227151,105.035096,,,,Both,-,"[1.0069214736271378e+301,2.7947685100258519e+284,1.5514081741640217e+268,8.6120453777428592e+251]",693.08501062139424109343845505927377090986957133212151413101387298354438826208934,693.08501062139424109343845505925709567645795181068156897691159852775850423690577 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,extreme_finite,4096,10322096095657499354,115.534765,113.325557,113.285384,,,,No,-,"[8.3193845738370037e+270,2.3090930761462968e+254,1.2818041495700743e+238,7.1154423995638221e+221]",623.81656339099882949900267018734779984904540997696515824943850779191190092376473,623.8165633909988294990026701873478491389845554944656387436301881745302964002462 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,near_one,4099,10322096095657499359,107.303954,104.550799,103.716432,80.000000,23.716432,yes,Both,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.24290063227404771615686474809384021893054758987931141292077052724202035349776452,0.24290063227404771615686474809385479604744883847615479262644004599544797468667503 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,near_one,4099,10322096095657499359,101.670007,95.715106,87.939906,,,,Both,-,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",4.044148995362291804383621503107805429122385032546069087176404383881042495577085e-05,4.0441489953622918043836215167309566516349824665253487483127010580011294770046154e-05 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,near_one,4099,10322096095657499359,114.998512,113.191847,113.016527,,,,No,-,"[0.70667685256571555,1.9614222817202363e-17,1.0888080890893083e-33,6.044099049525344e-50]",-0.50087744106456204019778665744575576721811844484718549777154507969979119197390105,-0.50087744106456204019778665744575581490148587894479768852119248604151503539540518 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,wide_exponent,4096,10322096095657499357,107.967820,105.222704,104.386734,80.000000,24.386734,yes,Both,-,"[2.2828060842783888e+123,6.336059688800657e+106,3.5172196759528967e+90,1.952449133453769e+74]",409.78796398443927791610862116022677480269364161366471002376221655083554651355371,409.78796398443927791610862116024222810248381363533512220222949171648044838642357 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,wide_exponent,4096,10322096095657499357,106.811573,104.492642,102.312914,,,,Both,-,"[9.8724575378275929,2.740157417032594e-16,1.5210929277434915e-32,8.443761954876569e-49]",3.3034092575605493779172148119355486815283475477783179543435034724099819136711176,3.303409257560549377917214811936073134270919791794568551577162714286004123950989 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,wide_exponent,4096,10322096095657499357,114.953722,113.209249,113.024836,,,,No,-,"[4.3538032635725136e+156,1.2084231569765884e+140,6.7080960618281417e+123,3.7237413496194703e+107]",520.34305901999576558624497846294523008272872419599112042989887041283258994894823,520.34305901999576558624497846294527933471433297529398191461768706821030235939582 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,extreme_finite,4096,10322096095657499354,111.086264,105.070160,104.606169,80.000000,24.606169,yes,Both,-,"[8.4825748870998104e+300,2.3543874869413368e+284,1.3069475984458161e+268,7.2550165788654925e+251]",999.66293072781110639078474847446915088682993473501091851417255096379221868119203,999.66293072781110639078474847443677221631807677679365605314190636576738889243849 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,extreme_finite,4096,10322096095657499354,111.221449,105.074551,104.624242,,,,Both,-,"[1.9230330816353472e-151,5.3374890108685769e-168,2.9629015967750232e-184,1.6447407862191361e-200]",-500.66775874664477275846631739014346365552647448470350839775516726959381230699364,-500.66775874664477275846631739012744910850453672628085794632227477319599271088726 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,extreme_finite,4096,10322096095657499354,118.992979,113.866301,113.813514,,,,No,-,"[4.6410253113118828e+270,1.2881432896216468e+254,7.1506316957717187e+237,3.9693979746300949e+221]",899.13502918531497655348899194015066466036407709017719390075728484040817889422215,899.13502918531497655348899194015061539480716298928420272988309606906902968233412 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,near_one,4099,10322096095657499359,107.290148,104.469291,103.762278,80.000000,23.762278,yes,Both,-,"[0.75767388015401582,2.1029674672601745e-17,1.1673814510949479e-33,6.4802688276296867e-50]",-0.12051768424391546599899037931433572311869461807102196510180994458742362307468454,-0.12051768424391546599899037931434272948211001876788467720396858894260414574766305 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,near_one,4099,10322096095657499359,101.609960,95.718828,87.939938,,,,Both,-,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",1.2174101545384046086252384657457743119885332315350708330878957913257906519677656e-05,1.2174101545384046086252384698466606762194093124850392369685309026219998762457263e-05 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,near_one,4099,10322096095657499359,114.872088,113.157276,113.007632,,,,No,-,"[0.56152363038163511,1.5585411583019934e-17,8.6516413938641703e-34,4.8026257381340422e-50]",-0.25063196277134080699268976739835896943757206564298147783154726746356196712822717,-0.25063196277134080699268976739835899344521197849814681069469218834374690481796137 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,wide_exponent,4096,10322096095657499357,107.892624,105.170494,104.368159,80.000000,24.368159,yes,Both,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-122.64340176210480714781256202313334304453302289297190638109238264297218279352819,-122.64340176210480714781256202313802791680273253425717918726194907203719295819875 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,wide_exponent,4096,10322096095657499357,103.649650,103.003493,102.765232,,,,Both,-,"[3.905695425475696e-145,1.0840482471340662e-161,6.0176766188639109e-178,3.3404815685055882e-194]",-144.40830162694489898876145691151228884311488012943396616534789608787825443414476,-144.4083016269448989887614569114955326687050779095882138658826009601337648743421 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,wide_exponent,4096,10322096095657499357,114.973047,113.138717,113.026133,,,,No,-,"[2.4824071579503231e+32,6890063958126866,0.38247538237261935,2.1231648793119637e-17]",32.39487301485368150686302398006636790049855942982417088318864681383349446441855,32.39487301485368150686302398006636483698472419625684766314706515101750626242056 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,extreme_finite,4096,10322096095657499354,107.326534,105.011900,104.460171,80.000000,24.460171,yes,Both,-,"[1.574269563896497e-151,4.3694757920112377e-168,2.4255463149165589e-184,1.3464486830575322e-200]",-150.80292090089107415382716149653340039225497975448655319083077208652809986233478,-150.80292090089107415382716149652799577485650407769540271244758516976318786368256 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,extreme_finite,4096,10322096095657499354,103.562882,103.052180,102.780151,,,,Both,-,"[8.6806348536685748e-302,2.4093605285094229e-318,0,0]",-301.06144851176328304846286031809826768270144426070608633955877353471919377625454,-301.06144851176328304846286031806369391941670085227560113406940501162511205637408 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,extreme_finite,4096,10322096095657499354,114.774406,113.144122,113.082184,,,,No,-,"[7.3681209041005966e+270,2.0450643689886018e+254,1.1352387746458314e+238,6.3018411302952568e+221]",270.86735674362105667777608200997211613184077567666338331782646957519855579477053,270.86735674362105667777608200997209149259660762788172218869818982891320765553073 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,moderate,4099,10322096095657499356,108.140237,105.150365,103.619384,80.000000,23.619384,yes,Both,yes,"[0.016967775842366306,4.7095038542183959e-19,-2.6142998067570899e-35,1.4512279193674093e-51]",0.016825431060362116060527975223933686830025480890723928219206553105394405175920802,0.016825431060362116060527975223934766829053970731436945963748330916850378472668862 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,moderate,4099,10322096095657499356,104.846701,101.291508,100.173624,,,,Both,no,"[0.50978045786818238,1.4149250045730266e-17,-7.854411590974145e-34,4.3600742965911016e-50]",0.41196424811609458603720091262173995084781993126662968922408673659585343074240882,0.41196424811609458603720091262202808439485668228344707426199018895324808168027625 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,moderate,4099,10322096095657499356,114.969880,113.130249,113.010769,,,,No,no,"[6.4127308474812379,1.7798903593994158e-16,-9.8803762915678819e-33,5.4847106254295907e-49]",2.0031989068380659308358767184051391841716466064575456726443683664874674185685244,2.0031989068380659308358767184051393756381315180978687804239195286771249857338303 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,cancellation,4098,10322096095657499336,134.607455,106.537373,104.621883,80.000000,24.621883,yes,Both,yes,"[9.5757892125536038e-15,2.657815415683552e-31,-1.4753839348477804e-47,8.1900260731503383e-64]",9.5757892125535581941894138318495891727756910760066238894863215461528382537839935e-15,9.5757892125535581941894138318498959687222096513961541169989695977230888612152571e-15 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,cancellation,4098,10322096095657499336,134.649642,107.170004,104.032519,,,,Both,no,"[9.640978373446825e-32,2.675909042528464e-48,-1.485427915408879e-64,8.245781365539434e-81]",9.6409783734468253031264825210279822527089990205713589968491374709281993532281666e-32,9.6409783734468253031264825210275175103890126736048734827121919974874555365422483e-32 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,cancellation,4098,10322096095657499336,141.258045,113.598062,113.115444,,,,No,no,"[2.6730589512739875e-23,7.4192289847118885e-40,-4.1184994218967311e-56,2.2862264425475737e-72]",2.6730589512739876209542699187290419021144006266392741070944842875474854548228371e-23,2.6730589512739876209542699187290416645031710677328282365395176678854623522396858e-23 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,near_one,4099,10322096095657499359,108.254105,105.091738,103.817818,80.000000,23.817818,yes,Both,yes,"[0.50824794006286333,1.4106714131902435e-17,7.8307994155215805e-34,4.3469669061666386e-50] ; [1.4195792076051643,3.9401238039059714e-17,2.1872080834850324e-33,1.2141443869656723e-49]",0.38260537918836910980295595469486016694478510077047130768040772007699407142311543,0.38260537918836910980295595469483876398615466016654421485472691554230336671157279 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,near_one,4099,10322096095657499359,103.218113,100.596655,99.961241,,,,Inf,no,"[1.3001872815938884,3.6087446408758173e-17,2.0032556951464871e-33,1.1120302984815517e-49] ; [1.4964387904107816,4.1534520001406718e-17,2.3056290211157914e-33,1.2798812127433564e-49]",1.4811630565057160695975467044776770686909168775065531267436775252066549768414916,1.4811630565057160695975467044788773163012774987744976567649309696218580203568102 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,near_one,4099,10322096095657499359,114.926370,113.162316,113.016553,,,,No,no,"[1.0072931928427433,2.7958002381055039e-17,1.5519808982986127e-33,8.6152246353477663e-50] ; [1.2932802742744287,3.5895738444825207e-17,1.9926137653683677e-33,1.1061228407484956e-49]",1.0094422126013183565427786981156641075907671648540197459770146736708130476289913,1.0094422126013183565427786981156642036875925766244874388795772114241665281807993 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,moderate,4099,10322096095657499356,106.001122,102.267431,101.314349,80.000000,21.314349,yes,Both,yes,"[6.7554035072711907,1.875001128601503e-16,1.0408347120857714e-32,5.7777933109335954e-49] ; [7.5615146099912893,2.09874190526296e-16,1.1650357929843036e-32,6.4672478094180065e-49]",1876810.3436059515909373438747938277987921279160005681718725867312969057820737362,1876810.3436059515909373438747932324627118494928000187634317695110360784386875593 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,moderate,4099,10322096095657499356,101.997603,98.689822,97.605813,,,,Inf,no,"[5.3841638638994409,1.4944056725139767e-16,8.2956179287772921e-33,4.6049930140109008e-49] ; [7.900171020724815,2.1927379414212786e-16,1.2172140747675356e-32,6.7568954585236242e-49]",596979.42152351974794327492916693170559841450560851008888541002761485287919640541,596979.42152351974794327492916940731307384283545223626923271842061389321561692216 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,moderate,4099,10322096095657499356,114.949694,113.202145,113.025976,,,,No,no,"[1.1675387080838069,3.2405708896393795e-17,1.7988782073038331e-33,9.9857800212257048e-50] ; [4.5155188621659903,1.2533082522264678e-16,6.9572583928726882e-33,3.8620542280169357e-49]",2.0126338344774562612903904708133934296318506834439464451373504273658677360403502,2.0126338344774562612903904708133936199830988498706095749550332038551540854633581 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,moderate,4099,10322096095657499356,106.519662,103.850741,103.190083,90.000000,13.190083,yes,Both,no,"[0.71581135775056381,1.9867756266571774e-17,-1.1028820227394361e-33,6.1222250754524372e-50]",0.096291975196169784525310139181526871816045133452422261028615229900944061380840822,0.096291975196169784525310139181535194812644791471494678467075788752285130394604154 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",moderate,4099,10322096095657499356,106.373891,103.455996,102.759509,,,,Both,no,"[-0.36144099270550889,-1.0032002803625731e-17,5.5688802478447044e-34,-3.0913495362687196e-50]",-0.00080586416602977375312522760475390522692055461405400605181073388411962243882413759,-0.00080586416602977375312522760475399910564780802927688413249709532873387989737341996 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,wide_exponent,4096,10322096095657499357,106.463253,103.779117,103.294727,90.000000,13.294727,yes,Both,no,"[-4.2985314788901945e+20,-11930.821549849798,6.62293639366862e-13,-3.6764682374394009e-29]",-2.7116946263909823534882310466348560028692459166343819479015128601692309145311966e+144,-2.7116946263909823534882310466350739893700446173843466311067792915601894946997725e+144 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",wide_exponent,4096,10322096095657499357,106.381440,103.527280,102.733123,,,,Both,no,"[25243192839578.898,0.00070063934763883447,-3.8893296785349167e-20,2.1590116797337115e-36]",6.5314558416850667205793051431029262199911942560992371852825518724937704498574181e+93,6.5314558416850667205793051431037011424970252237504699458471391554570588684096988e+93 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,moderate,4099,10322096095657499356,135.004363,101.709365,95.502103,,,,NaN,no,"[2.666045778311009,7.3997635194639449e-17,4.1076939180450772e-33,2.2802281829631827e-49] ; [0.22214166730181911,6.1656698441775213e-18,3.4226343116214427e-34,1.8999437088170993e-50]",0.00034577068917962528864980778995916839279651382077593419427617715822265154201886617,0.00034577068917962528864980778996533136861855297550571332369244892564197346729315541 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144,572114432512329142864001791218144 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,wide_exponent,4096,10322096095657499357,78.330828,0.000000,0.000000,,,,NaN,no,"[1.2347084998878686e+21,34270.045131897481,1.9023696580187922e-12,1.0560272978403741e-28] ; [3.0778362709487343e-89,8.5427117350842915e-106,4.7421576305130505e-122,2.6324262938987323e-138]",-1.4551915228366851806640625e-11,1.496236298527499726192933808693620496158132324462865624527799753897426005495429e-89 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144,572114432512329142864001791218144 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,quotient_reduction,2,10322096095657499335,inf,inf,inf,90.000000,inf,yes,Both,yes,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,0,0] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,0,0]",134.96799785736229470766307175341820151552670393203375029736457157980566989863291,134.96799785736229470766307175341820151552670393203375029736457157980566989863291 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,quotient_reduction,2,10322096095657499335,24.892057,0.000000,0.000000,,,,NaN,no,"maximum binary64 below 2^900 [8.452712498170643e+270,0,0,0] ; negative double divisor [-7.5,0,0,0]",0,0.5 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,quotient_reduction,2,10322096095657499335,inf,inf,inf,,,,No,no,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,0,0] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,0,0]",134.96799785736229470766307175341820151552670393203375029736457157980566989863291,134.96799785736229470766307175341820151552670393203375029736457157980566989863291 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,moderate,4099,10322096095657499356,137.991491,inf,103.120938,90.000000,13.120938,yes,Both,yes,"[4.651496856054143,1.2910497271407093e-16,7.1667656650382064e-33,3.9783541267092195e-49] ; [1.1968567583256404,3.3219448256783813e-17,1.8440498160012704e-33,1.0236532821401969e-49]",-0.13593017724841871918057204650149481280191019956683356060646777679554175755072265,-0.13593017724841871918057204650150713875355427787629311886530032033038040140127123 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remainder,moderate,4099,10322096095657499356,134.409394,100.966202,95.502103,,,,NaN,no,"[2.666045778311009,7.3997635194639449e-17,4.1076939180450772e-33,2.2802281829631827e-49] ; [0.22214166730181911,6.1656698441775213e-18,3.4226343116214427e-34,1.8999437088170993e-50]",0.00034577068917962528864980778995916839279651382077593419427617715822265154201886617,0.00034577068917962528864980778996533136861855297550571332369244892564197346729315541 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,tlfloat,tlquad,TLFloat Quad,tlfloat::remainder,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,near_one,4099,10322096095657499359,107.411772,104.726423,103.815855,80.000000,23.815855,yes,Both,yes,"[0.51829726641315743,1.4385638969304155e-17,-7.9856338038331893e-34,4.4329172576202887e-50]",0.54181616064164601141836335700755281177762270906400557918307925851265915984100729,0.54181616064164601141836335700752246129643265188541540400851198947696500079557021 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,near_one,4099,10322096095657499359,103.314713,100.590468,99.932085,,,,Both,no,"[0.556376029442197,1.5442536955906277e-17,-8.5723300435360125e-34,4.7585990945098258e-50]",0.58552836632655900670708376199067605028722445297766704511594490836778881259760965,0.58552836632655900670708376199116021458707057522670375998661998280538289617921361 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,near_one,4099,10322096095657499359,114.943677,113.141428,113.021471,,,,No,no,"[0.88382018328015488,2.4530937927651344e-17,-1.3617406051464522e-33,7.559178867002926e-50]",1.0034630059833739039108480399599084583957300102559614242164711890692549607628781,1.0034630059833739039108480399599085535982428899557028619169496230290414232934836 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,moderate,4099,10322096095657499356,107.428545,104.869846,103.568829,80.000000,23.568829,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50]",0.12683416188096790784216939618227372193425686465939287968000771713444896349187729,0.12683416188096790784216939618228215357757794097427308352934774394732010797034323 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,moderate,4099,10322096095657499356,103.779582,101.002087,100.236433,,,,Both,no,"[-0.53059214692798662,-1.4726890455118619e-17,8.1750664322025707e-34,-4.5380734904357627e-50]",-0.55584104592641476129020046112854089859321241383858441232520679895282023075253619,-0.5558410459264147612902004611289130996470591645326795565000699081687663834429277 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,moderate,4099,10322096095657499356,114.974128,113.192568,113.003172,,,,No,no,"[-4.1591464579851021,-1.1543950401108066e-16,6.4081797652204933e-33,-3.5572543606424108e-49]",-32.000618655313629721674682365518236008420232252926831380721182706899571868142118,-32.0006186553136297216746823655182329336415739416390744160297430115592657339984 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,near_one,4099,10322096095657499359,108.151971,105.591524,104.831618,80.000000,24.831618,yes,Both,-,"[1.4994043079684287,4.1616829648217466e-17,-2.3101981243676942e-33,1.2824175745594325e-49]",2.3511416377389521966137617451012654144360692751585280356211248541098424169604186,2.3511416377389521966137617451013305498775090885888924794020061506206886998298218 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,near_one,4099,10322096095657499359,104.244078,101.474027,101.018845,,,,Both,-,"[1.4459858354426181,4.0134169194755932e-17,-2.2278939357109857e-33,1.2367295719245473e-49]",2.2407748785941455468149928931172890798881812171960175770167589259784790556295775,2.2407748785941455468149928931181614399296154393447339518228073553103157037095686 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,near_one,4099,10322096095657499359,114.895079,113.182096,113.010341,,,,No,-,"[1.3229625356615966,3.6719586695199608e-17,-2.0383465301865082e-33,1.1315096249889291e-49]",2.0104364576665678758598407499062611809762474391010385287739734136349539772581352,2.0104364576665678758598407499062609887609457666528309771732843508256939227761068 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,moderate,4099,10322096095657499356,107.662138,105.118172,104.370708,80.000000,24.370708,yes,Both,-,"[-7.2839693641636938,-2.0217076246896986e-16,1.122273176995369e-32,-6.2298676050974111e-49]",728.37982867708396528583195554001745260585065072868172597435332260573659368674271,728.37982867708396528583195554004522697642161075015288462613983940694317570296734 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,moderate,4099,10322096095657499356,103.832933,101.138682,100.616889,,,,Both,-,"[6.2894204955453095,1.7456648614259411e-16,-9.6903866121708154e-33,5.3792451671757032e-49]",269.42141683849341758232407964909905497460624068820139994447256104326271497484413,269.42141683849341758232407964923764454985239125085761375472047443911151216271434 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,moderate,4099,10322096095657499356,114.931183,113.167572,113.012441,,,,No,-,"[2.0680399334084143,5.7399638747857426e-17,-3.1863200271518802e-33,1.7687629289841357e-49]",4.0178692533490240404296040425970871191188024353226664008220687178646150783389857,4.0178692533490240404296040425970867355340668113774081960274487118933383171930497 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,near_one,4099,10322096095657499359,108.508993,105.293208,103.771823,80.000000,23.771823,yes,Both,yes,"[0.51172914905977851,1.4203337091450122e-17,-7.884435932720214e-34,4.3767411543439516e-50]",0.47129137278430720759814686288642179705346521613436667069278209179356009528305549,0.47129137278430720759814686288639457893398171528583227402623085761363208890619784 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,near_one,4099,10322096095657499359,104.549583,101.155017,100.345784,,,,Both,no,"[0.556376029442197,1.5442536955906277e-17,-8.5723300435360125e-34,4.7585990945098258e-50]",0.50528364840645601747577363559900197677740795879784146166067930320588141857029996,0.50528364840645601747577363559931562602749387840749911387652478785100115049351614 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,near_one,4099,10322096095657499359,115.041332,113.224776,113.018718,,,,Inf,no,"[0.552774916573326,1.5342585995373914e-17,-8.5168461146777975e-34,4.7277993268522986e-50]",0.50259706445063723172976483018675200373774673231800013130307827226899634702472763,0.50259706445063723172976483018675195596328587350834779271290641898064907256890663 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,moderate,4099,10322096095657499356,109.925995,105.123457,103.815933,80.000000,23.815933,yes,Both,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.48322034922123225518708897646637636069385959299582733007677741617069688828678409,0.48322034922123225518708897646634929399270770971586954580993858000068003447759588 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,moderate,4099,10322096095657499356,107.024889,102.226945,100.639803,,,,Both,no,"[-0.53059214692798662,-1.4726890455118619e-17,8.1750664322025707e-34,-4.5380734904357627e-50]",-0.48583360068250018583086622934612463370687351803631456906975097116002659802802555,-0.48583360068250018583086622934637060713264426066036289533463488732206999871421232 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,moderate,4099,10322096095657499356,115.363409,113.532562,113.121187,,,,Inf,no,"[-0.5998341324142249,-1.6648741619058185e-17,9.2419081382567522e-34,-5.1302896032816304e-50]",-0.53693152879880785898041492583469711473728507809526835316606195460550324423387725,-0.53693152879880785898041492583469706719845615505246020917703587632005152396862512 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,near_one,4099,10322096095657499359,107.942783,105.155677,104.205601,80.000000,24.205601,yes,Both,yes,"[0.54780977077077553,1.5204775515608602e-17,-8.4403459308427531e-34,4.6853331941114368e-50]",0.52356044719022625228591770335188992100790509674337745785256442894450845670917261,0.52356044719022625228591770335191230591271180851991336042503192896063029229750644 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,near_one,4099,10322096095657499359,103.817192,100.780938,99.800033,,,,Both,no,"[0.5576392959998614,1.5477599646370227e-17,-8.5917937466652033e-34,4.769403620189074e-50]",0.53216330948166039562825976302834831342044029859942942121705690004980493501562933,0.53216330948166039562825976302883052907969987597028703665857651454611260317937864 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,near_one,4099,10322096095657499359,114.884758,113.122222,113.007648,,,,No,no,"[1.1779140555896355,3.2693682638630247e-17,-1.8148639612597521e-33,1.0074518781764974e-49]",1.0017569054609729283589884138505580828278717088605237274331326762110317037113294,1.0017569054609729283589884138505579868722109578149090755180498437202003300766939 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,moderate,4099,10322096095657499356,108.220931,105.311170,103.818628,80.000000,23.818628,yes,Both,yes,"[-0.065200541635407561,-1.8096785635415158e-18,1.0045734042071851e-34,-5.5765026163844551e-51]",-0.065154433999027981604796867967127986881415212588611420145090880769980952458286794,-0.065154433999027981604796867967124344186568215933203026966926467120453192197675953 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,moderate,4099,10322096095657499356,105.110576,101.672387,100.007734,,,,Both,no,"[0.4300835480404146,1.1937216438673698e-17,-6.6264862700747261e-34,3.6784388146997172e-50]",0.417820251288375409972859501512898045290567648359341993891738758094139827292679,0.4178202512883754099728595015132258850600119393786524691588748596799786548401261 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,moderate,4099,10322096095657499356,114.871483,113.164718,113.024305,,,,No,no,"[3.7333993131913807,1.0362264694062042e-16,-5.7522124253040164e-33,3.1931193385537162e-49]",2.0279383819186585084121279272279713196675799418072996533879457279437663955179438,2.0279383819186585084121279272279715116885312926883178850691969552555567203716169 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,moderate,4099,10322096095657499387,108.351907,105.741626,104.602282,80.000000,24.602282,yes,Both,-,"[1.0163605766345611,2.8209672837524767e-17,-1.5659514150681434e-33,8.6927765822649907e-50]",0.18064417420571660663002643085721230147927409837472224057688179881691649397712496,0.18064417420571660663002643085721816825671862302878034638011489993285710967947058 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,moderate,4099,10322096095657499387,105.538843,102.217591,100.384388,,,,Both,-,"[1.1709254555463331,3.249971002168098e-17,-1.8040963179855585e-33,1.0014746354345175e-49]",0.57665699913917249167543347514105386745673957917489461428525946025923365478860205,0.5766569991391724916754334751414023697075837995469982943468518144667513041144549 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,moderate,4099,10322096095657499387,115.059144,113.267306,113.024351,,,,No,-,"[3.8699921915058342,1.0741386090323363e-16,-5.9626670769326946e-33,3.3099451384925286e-49]",2.0292730557141128075372232618212138749815878457667406971551750687385697394238271,2.0292730557141128075372232618212136828403580686083850658195804537308812685715241 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,boundary,4101,10322096095657499355,107.711288,104.331717,103.672888,80.000000,23.672888,yes,Both,-,"[1.0000006976642144,2.7755594979700771e-17,-1.54074503043171e-33,8.5528530393103596e-50]",0.0011812401392645466366367223496664025691107131134376936381879814208025359246329034,0.0011812401392645466366367223496664756307232078155433668789257650353131882010275132 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,boundary,4101,10322096095657499355,105.680702,101.710952,101.079624,,,,Both,-,"[1.9999990658472695,5.5511125303311079e-17,-3.0814864717294043e-33,1.7105686154924606e-49]",1.3169573575913183806206053356776144386291410718207369817816534095233915735434493,1.3169573575913183806206053356781059946048036439182701968030728549965132899787948 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,boundary,4101,10322096095657499355,114.746080,113.201891,113.036560,,,,No,-,"[1.0000004817944794,2.7755588988112018e-17,-1.5407446978317207e-33,8.5528511930095289e-50]",0.00098162563206491441874298495040138570975940288164826724838384161703782738019139625,0.00098162563206491441874298495040138580192116085770131138514473092172470104226838173 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,moderate,4099,10322096095657499356,107.718351,104.542010,103.139045,80.000000,23.139045,yes,Both,yes,"[-0.28874902442031025,-8.0143953812370009e-18,4.4488831403494138e-34,-2.4696262481412955e-50]",-0.29720096062669683272865803517211421035379945494633700815507025452637257512122915,-0.29720096062669683272865803517208759673932197508207544978047397151679963698000212 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,moderate,4099,10322096095657499356,105.626173,102.148131,101.316477,,,,Both,no,"[0.62764313350169854,1.7420596451536667e-17,-9.6703736415996537e-34,5.3681357368160785e-50]",0.73751780205133126725673321943555768093904551298771999434742818041454981425886217,0.73751780205133126725673321943579128155966759716208171117997200450929687036778351 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,moderate,4099,10322096095657499356,114.908941,113.183849,113.009480,,,,No,no,"[-0.46396013668772096,-1.2877480656473566e-17,7.1484377619910142e-34,-3.9681800967311743e-50]",-0.50234596747773904865253807286233097224104131869860818047026432546942747991991496,-0.50234596747773904865253807286233092418371010656600101473678518793597466683589449 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,boundary,4105,10322096095657499355,108.512745,106.655151,106.203619,80.000000,26.203619,yes,Both,yes,"[-0.99899927667986499,-2.7727799963846583e-17,1.539202097103153e-33,-8.544288038776232e-50]",-3.799839456997147855581613541852042024176399900088711456868967222127997374059305,-3.799839456997147855581613541852082695691985906489816947756475473707459623001287 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,boundary,4105,10322096095657499355,107.828304,106.272609,104.585034,,,,Both,no,"[-0.5,0,0,0]",-0.54930614433405484569762261846124479796810281996701244989017928624722153507775602,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,boundary,4105,10322096095657499355,115.361632,113.939200,113.173250,,,,No,no,"[-0.5,0,0,0]",-0.54930614433405484569762261846126280541308284062223852328394245531764986632816683,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,near_one,4099,10322096095657499359,107.766481,104.260004,103.477540,80.000000,23.477540,yes,Both,yes,"[0.63773432238017391,1.7700683207504784e-17,-9.8258530242838391e-34,5.4544441320713228e-50]",0.63288603898704082304852473006912003275150944031003931863308835424966614091601969,0.6328860389870408230485247300690752116994000610050783793434311866968213898036298 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,near_one,4099,10322096095657499359,106.197113,102.183057,101.184994,,,,Both,no,"[0.53548819375999224,1.4862783053182011e-17,-8.2505019778256258e-34,4.5799486302487013e-50]",0.55112665424029227785508649938232538753270271835738832653895855062664566048624692,0.55112665424029227785508649938251660744941249076854316599667893359729852255925888 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,near_one,4099,10322096095657499359,115.124806,113.304511,113.099781,,,,Inf,no,"[0.50289575568916656,1.3958161173809507e-17,-7.748335958296108e-34,4.3011904917156829e-50]",0.52304092944980720556572922310906538941879260415288739219076647612942224975507433,0.52304092944980720556572922310906534241757921999581684753101762682302235845555926 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,moderate,4099,10322096095657499356,114.031302,105.136563,103.642929,80.000000,23.642929,yes,Both,yes,"[0.57618201352237719,1.5992263444685661e-17,-8.8774895460806198e-34,4.9279966474639169e-50]",0.58483862789646320066419155791433430439304208383200808363911138388832600121247651,0.58483862789646320066419155791429737215979664256706430739228534678145335856964206 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,moderate,4099,10322096095657499356,113.985095,103.700474,101.648786,,,,Both,no,"[-0.5716770143103389,-1.5867224598407584e-17,8.8080790430253763e-34,-4.8894660781425438e-50]",-0.58118187967003879843073421984341735301833588689049142915266289071210548122792261,-0.58118187967003879843073421984356356345148985854257440755257771327766377011312792 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,moderate,4099,10322096095657499356,115.374771,113.586571,113.036088,,,,Inf,no,"[0.2267593093247573,6.2938351565110877e-18,-3.4937803519769427e-34,1.9394376948738926e-50]",0.25155171091007438344002347195342211717096167376876435890978837978420765923021074,0.25155171091007438344002347195342214079608489454741680081317269235003386899327349 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,near_one,4099,10322096095657499359,105.308687,102.381484,101.601777,80.000000,21.601777,yes,Both,-,"[0.9902100102210416,2.74838488140428e-17,-1.5256600879333559e-33,8.4691147868762635e-50]",0.16140301992014431339678047519482652144140492984788687432496615166421793929885098,0.16140301992014431339678047519478457172356343218546211428730930584097639007690213 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,near_one,4099,10322096095657499359,103.754763,101.145295,100.349669,,,,Both,-,"[1.3269384103584123,3.6829939385985342e-17,-2.0444723350934913e-33,1.1349101298149763e-49]",0.060576462988822571448810903007093159144687718926563865599815508636641347983697869,0.060576462988822571448810903007055658100102621540510399378637298350232657879135663 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,near_one,4099,10322096095657499359,114.982303,113.213810,113.071281,,,,Inf,-,"[0.80083449033122145,2.2227622251991859e-17,-1.2338809003415918e-33,6.8494149260222667e-50]",0.25740285684031596236392165679791925931975478436236106519156635466784809572471371,0.25740285684031596236392165679791928291183093915807724913103163989411993536165529 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,moderate,4099,10322096095657499356,109.069920,100.123363,99.167646,80.000000,19.167646,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804815742671822427612167381748211215236610271972494957,0.0048523201680211414554273497804747585214492493110494604164051752716872765694644792 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,moderate,4099,10322096095657499356,108.835706,99.620228,99.060329,,,,Both,-,"[6.9490746956892782,1.9287556817485724e-16,-1.070674483376928e-32,5.9434373166185492e-49]",8.5740965398686050033209262286348904843349839873934226306933761725669491073941353e-23,8.5740965398686050033209262286219169640957175473792335532635992276588891700122152e-23 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,moderate,4099,10322096095657499356,115.203014,113.242670,113.051599,,,,Inf,-,"[7.5037321448425516,2.0827040494560277e-16,-1.1561329945930663e-32,6.4178273506302694e-49]",2.6241573054106070556560136630867966813651251129676318065538857582990160319181036e-26,2.624157305410607055656013663086796437546133956840801798010299652149670834993565e-26 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,moderate,4099,10322096095657499371,107.300170,103.199673,102.168212,80.000000,22.168212,yes,Both,-,"[16.10862066659595,4.4710403897518653e-16,-2.4819259923657773e-32,1.3777456910700632e-48]",28.197381657001775717891747205953291356104893832451631814899496025761393980246794,28.197381657001775717891747205948342415185062324244223614602442709080412981510555 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lgamma,moderate,4099,10322096095657499371,105.130791,100.729534,92.065791,,,,Both,-,"[0.99874974000558037,2.7720873929814604e-17,-1.5388176249805709e-33,8.5421537897621465e-50]",0.00072295607710545662058194796458275488909819673752452280824622669615210185075152016,0.00072295607710545662058194796472224625027501458658803985557334948681356598407441761 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::lgamma,moderate,4099,10322096095657499371,114.971639,113.175643,113.013850,,,,No,-,"[17.500019022698545,4.8572310125945387e-16,-2.6963048530529103e-32,1.4967498646339452e-48]",32.081168794062295073979477959328457529686036531915204354297578928385120677901909,32.081168794062295073979477959328454469896577802020991166202567137045500772062679 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,moderate,4099,10322096095657499368,105.565044,98.349598,97.317514,80.000000,17.317514,yes,Both,-,"[16.916625286240897,4.6953067229351934e-16,-2.6064188157399712e-32,1.4468530905253747e-48]",16565261246416.8279913958728258930306644070018506909036659635603427886962890625,16565261246416.827991395872825976920133201596664513013387683984998603514086978856 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tgamma,moderate,4099,10322096095657499368,100.757166,97.383410,96.496549,,,,Both,-,"[16.868177199116474,4.6818596774790482e-16,-2.5989542060006744e-32,1.4427093997241705e-48]",14465982228876.97039145927965612579112197888520086053176783025264739990234375,14465982228876.970391459279656255208345090859253988616153313666634359989655775049 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::tgamma,moderate,4099,10322096095657499368,115.005599,113.180213,113.028818,,,,No,-,"[19.355750178950849,5.3722998768909317e-16,-2.9822255092576032e-32,1.655467712501137e-48]",18139783686946539.5291010872149636591610377678307486348785459995269775390625,18139783686946539.529101087214963657448786918022005302501784474121108477330902841 diff --git a/validation/metrics/data/windows/x86_64/detail/ClangCL_f128_benchmark.csv b/validation/metrics/data/windows/x86_64/detail/ClangCL_f128_benchmark.csv new file mode 100644 index 0000000..bd991ee --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/ClangCL_f128_benchmark.csv @@ -0,0 +1,232 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,81920,1.878988,1.879069|1.881708|1.878988|1.883150|1.875860|1.872756|1.876035,60211200,113090100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,81920,2.236468,2.232778|2.239443|2.232133|2.238236|2.236468|2.239485|2.230056,49889280,111528200.000000,1.190252 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,81920,20.256551,20.282796|20.256551|20.204875,1474560,29857000.000000,10.780567 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,81920,1.871660,1.874701|1.871660|1.878109|1.871303|1.872985|1.870014|1.867595,60784640,113809400.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,81920,2.272722,2.261353|2.266321|2.271587|2.275263|2.272722|2.280784|2.282261,49315840,112089900.000000,1.214281 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,81920,20.279338,20.319621|20.276693|20.279338,1474560,29921600.000000,10.834945 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,81920,1.197050,1.196418|1.199420|1.197050|1.196662|1.196002|1.197969|1.197883,97484800,116722800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,81920,2.313054,2.313054|2.322968|2.301100|2.305655|2.322388|2.293403|2.321509,47022080,108688700.000000,1.932295 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,81920,22.750488,22.838867|22.750488|22.637939,1228800,27945900.000000,19.005459 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,81920,1.706469,1.696377|1.706469|1.694894|1.722833|1.735135|1.702334|1.717782,66519040,113802900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::operator/,81920,5.345657,5.351497|5.347834|5.345657|5.359876|5.335495|5.336188|5.341203,21217280,113414700.000000,3.132583 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,81920,63.138428,63.096924|63.138428|65.142822,491520,31355400.000000,36.999451 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,81920,6.640625,6.617716|6.627319|6.651204|6.638875|6.652832|6.645549|6.640625,17203200,114214800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,81920,15.279635,15.315411|15.279635|15.252404|15.300950|15.301889|15.275879|15.277287,7454720,113954400.000000,2.300933 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,81920,38.679606,38.717448|38.625081|38.679606,737280,28513600.000000,5.824694 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,81920,3.056801,3.059462|3.045454|3.010694|3.042392|3.108330|3.080434|3.056801,34979840,106956200.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,81920,3.313621,3.358086|3.313621|3.342692|3.320448|3.299651|3.285387|3.267280,30965760,102572600.000000,1.084016 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,81920,0.411061,0.411563|0.411812|0.412590|0.411054|0.410616|0.411061|0.410795,281559040,115821000.000000,0.134474 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,81920,3.089840,3.105469|3.124099|3.071949|3.106469|3.089840|3.073430|3.060563,34979840,108096800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fabs,81920,3.380781,3.451015|3.421391|3.402361|3.380781|3.371713|3.363800|3.355909,32112640,108939700.000000,1.094161 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,81920,0.410780,0.410691|0.410121|0.410999|0.410780|0.411103|0.410514|0.411280,281559040,115660000.000000,0.132945 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,81920,1.095979,1.095835|1.099065|1.096191|1.095979|1.096116|1.095855|1.095197,102072320,111903900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,8192,38.055617,38.002457|38.089875|38.055617,761856,28988100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,81920,0.751459,0.751459|0.750800|0.747945|0.758568|0.749112|0.755086|0.759385,155975680,117479900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,81920,2.370384,2.513444|2.446955|2.406386|2.370384|2.357289|2.343909|2.337615,44154880,105820200.000000,3.154373 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,81920,6.073746,6.078432|6.092490|6.057050|6.046497|6.073746|6.077330|6.041575,17776640,107846100.000000,8.082600 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,81920,0.703579,0.705655|0.703303|0.701633|0.703579|0.704146|0.705702|0.701764,165150720,116213800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,81920,2.487150,2.543731|2.523292|2.511432|2.487150|2.478951|2.466216|2.451782,42434560,105859400.000000,3.534999 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,81920,5.924873,5.934029|5.920258|5.924873|5.919838|5.975342|5.930061|5.923538,18350080,108863000.000000,8.421055 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,81920,2.728891,2.793553|2.756277|2.730288|2.728891|2.712898|2.703185|2.688873,39567360,108041300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,81920,3.277927,3.330756|3.302138|3.287286|3.277927|3.276051|3.271936|3.263572,30965760,101787400.000000,1.201194 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,81920,22.645264,22.814453|22.636475|22.645264,1228800,27892200.000000,8.298340 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,81920,0.455948,0.455067|0.455512|0.455948|0.455904|0.456677|0.457659|0.457108,255180800,116430800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::copysign,81920,1.395378,1.457148|1.438427|1.413689|1.395378|1.384926|1.386137|1.387682,73400320,103425100.000000,3.060391 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,tlfloat,tlquad,TLFloat Quad,tlfloat::copysign,81920,0.504689,0.504689|0.504205|0.503872|0.505328|0.504539|0.506723|0.505698,228802560,115547100.000000,1.106901 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,81920,1.356617,1.367739|1.356617|1.357481|1.356871|1.354989|1.356523|1.354387,82575360,112120900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::floor,81920,1.453287,1.450694|1.451951|1.454561|1.453679|1.454454|1.453287|1.350000,78561280,113000600.000000,1.071259 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,tlfloat,tlquad,TLFloat Quad,tlfloat::floor,81920,5.106779,5.061710|5.059076|5.085803|5.111791|5.113847|5.181050|5.106779,21790720,111195100.000000,3.764350 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,81920,1.842573,1.881124|1.844169|1.842594|1.842344|1.842573|1.841916|1.839443,67092480,123969300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ceil,81920,2.147013,2.136396|2.158813|2.139587|2.152443|2.147662|2.147013|2.144508,55050240,118172600.000000,1.165226 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,tlfloat,tlquad,TLFloat Quad,tlfloat::ceil,81920,4.825220,4.843593|4.827787|4.825220|4.814328|4.829164|4.810760|4.809351,22364160,107859800.000000,2.618740 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,81920,2.105687,2.123551|2.124023|2.105687|2.102221|2.111252|2.100397|2.102576,53329920,112523900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::trunc,81920,5.241804,5.271170|5.250593|5.249093|5.241804|5.241455|5.228167|5.219796,20070400,105232200.000000,2.489356 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,tlfloat,tlquad,TLFloat Quad,tlfloat::trunc,81920,2.420058,2.423154|2.420058|2.425741|2.423372|2.414856|2.418707|2.419448,48168960,116605600.000000,1.149297 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,81920,7.468590,7.471407|7.468872|7.470985|7.464459|7.455069|7.458261|7.468590,14909440,111304600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::round,81920,6.632543,6.655526|6.652074|6.634732|6.632543|6.624167|6.611286|6.608718,16629760,110276800.000000,0.888058 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,tlfloat,tlquad,TLFloat Quad,tlfloat::round,81920,3.899979,3.899979|3.899285|3.914675|3.904503|3.890261|3.891506|3.905723,29245440,114082000.000000,0.522184 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,81920,9.696838,9.715576|9.710388|9.682983|9.681519|9.696838|9.702454|9.667847,11468800,111177900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,tlfloat,tlquad,TLFloat Quad,tlfloat::rint,81920,4.104741,4.108505|4.094264|4.100876|4.099579|4.158808|4.104741|4.108276,27525120,113148100.000000,0.423307 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,8192,4.242026,4.337556|4.269561|4.250118|4.241474|4.237386|4.242026|4.228162,25346048,107924500.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lround,8192,10.112169,10.117471|10.108100|10.115807|10.111429|10.132329|10.112169|10.099777,11354112,114834000.000000,2.383806 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,8192,3.974949,4.004921|3.985786|3.980177|3.973833|3.974949|3.962971|3.964367,27582464,109727000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::llround,8192,384.928385,382.840983|385.526530|384.928385,73728,28343400.000000,96.838561 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,8192,78.601074,78.634208|78.587995|78.601074,344064,27046100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,8192,110.710449,110.279541|110.710449|110.775146,245760,27178200.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,4096,18.803665,18.808732|18.755758|18.803665,1302528,24473700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,4096,36.458471,36.458471|36.485368|36.445230,724992,26435400.000000,1.938902 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,4096,126.045496,126.347082|125.960765|126.045496,208896,26345500.000000,6.703241 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,4096,24.262184,24.319529|24.262184|24.230389,1056768,25648500.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remainder,4096,41.498162,41.594382|41.498162|41.404335,626688,26006900.000000,1.710405 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,tlfloat,tlquad,TLFloat Quad,tlfloat::remainder,4096,119.725206,119.833713|119.725206|119.506836,221184,26473200.000000,4.934643 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,4096,23.596054,23.658324|23.570543|23.596054,1093632,25818800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remquo,4096,41.399069,41.399069|41.243968|41.411994,626688,25914600.000000,1.754491 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,tlfloat,tlquad,TLFloat Quad,tlfloat::remquo,4096,120.003734,120.499196|120.003734|119.779699,208896,25087200.000000,5.085754 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,81920,5.874407,5.863665|5.874407|5.880720|5.942453|5.900112|5.866699|5.850307,20070400,118066600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,81920,7.702778,7.727286|7.726253|7.702778|7.709585|7.687143|7.679349|7.681274,14909440,114831800.000000,1.311243 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,81920,24.458008,24.458008|24.469727|24.419922,1228800,30043200.000000,4.163485 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,81920,1.442669,1.442511|1.442783|1.445699|1.442353|1.441694|1.444452|1.442669,79708160,115032100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ldexp,81920,3.675173,3.672475|3.674059|3.675173|3.675023|3.678535|3.677764|3.682454,32686080,120170300.000000,2.547482 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,tlfloat,tlquad,TLFloat Quad,tlfloat::ldexp,81920,11.306831,11.314901|11.312459|11.307305|11.289741|11.292996|11.306831|11.303236,10321920,116678200.000000,7.837439 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,81920,1.369687,1.369629|1.369804|1.369679|1.369687|1.368927|1.370590|1.374278,83722240,114730500.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbn,81920,3.690678,3.684382|3.690014|3.686416|3.690678|3.701129|3.716313|3.695090,32686080,120770500.000000,2.694540 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,81920,1.371602,1.370273|1.379762|1.393533|1.374871|1.371602|1.369687|1.370105,83722240,115175900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbln,81920,3.690464,3.693205|3.695796|3.690464|3.688665|3.689457|3.684425|3.690507,32686080,120623400.000000,2.690623 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,81920,2.461708,2.464004|2.461766|2.461708|2.470078|2.460749|2.458845|2.455735,48168960,118584300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,81920,4.011572,4.011572|3.983643|4.014185|4.017065|3.981812|4.032520|3.988354,28672000,114807400.000000,1.629589 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,81920,14.018636,14.048828|14.023763|14.033122|14.018636|14.008545|13.980062|13.974121,8601600,120529400.000000,5.694679 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,81920,1.397432,1.399831|1.392882|1.397432|1.392925|1.406250|1.399182|1.393847,82001920,114595900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,81920,4.049551,4.067550|4.062524|4.079542|4.038325|4.026573|4.049551|4.024921,29245440,118439800.000000,2.897852 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,81920,0.640567,0.638432|0.639974|0.643280|0.643086|0.646279|0.638974|0.640567,180633600,115878800.000000,0.458389 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,81920,1.288405,1.288405|1.296894|1.306414|1.284505|1.283046|1.292162|1.286288,88309760,114016900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,81920,71.890869,71.925659|71.846924|71.890869,491520,35334300.000000,55.798365 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f128,bl::nextafter,81920,4.315611,4.350813|4.315753|4.315611|4.310530|4.293752|4.292418|4.395127,24657920,106642000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter,81920,29.264526,29.242859|29.264526|29.265747,983040,28761500.000000,6.781085 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter,81920,7.142334,7.148045|7.133963|7.122934|7.129560|7.150835|7.160993|7.142334,16056320,114662000.000000,1.654999 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f128,bl::nexttoward,81920,4.292304,4.319415|4.315299|4.283107|4.292304|4.273085|4.274051|4.295257,24657920,105861800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter (same type),81920,29.318237,29.356995|29.318237|29.247742,983040,28810600.000000,6.830419 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter (same type),81920,7.148830,7.149833|7.146170|7.140154|7.146170|7.156939|7.148830|7.158421,16056320,114794700.000000,1.665499 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,81920,0.653358,0.650736|0.651335|0.653358|0.652798|0.655968|0.654747|0.654860,178913280,116902000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator==,81920,0.817757,0.816566|0.815187|0.817896|0.817757|0.818412|0.819176|0.815683,141066240,115284900.000000,1.251622 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator==,81920,3.608420,3.610404|3.608704|3.604954|3.608420|3.620017|3.603014|3.600922,32112640,115864400.000000,5.522885 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,81920,0.725736,0.725233|0.726905|0.725736|0.725448|0.725435|0.725938|0.727316,159989760,116152800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator!=,81920,0.920377,0.921787|0.920377|0.920778|0.919764|0.920026|0.919764|0.922289,125583360,115622500.000000,1.268197 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator!=,81920,3.643288,3.651634|3.641224|3.649947|3.643954|3.643288|3.641269|3.636674,31539200,114928800.000000,5.020126 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,81920,0.998164,1.022817|1.007281|0.999378|0.998164|0.993866|0.989795|0.985856,111247360,111202200.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<,81920,1.609670,1.646159|1.623708|1.622670|1.609670|1.596903|1.591095|1.587606,68812800,110865400.000000,1.612631 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,tlfloat,tlquad,TLFloat Quad,TLFloat operator<,81920,5.117155,5.119629|5.112899|5.103166|5.136917|5.121015|5.117155|5.104552,21217280,108557700.000000,5.126567 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,81920,0.992156,1.005634|1.002322|0.994998|0.992156|0.984275|0.979267|0.978559,111820800,110817800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<=,81920,0.944537,0.963611|0.951233|0.944537|0.948608|0.939734|0.935474|0.933405,114688000,108406400.000000,0.952005 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator<=,81920,5.273471,5.274794|5.273471|5.262010|5.268724|5.277574|5.278659|5.257433,20643840,108800900.000000,5.315162 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,81920,1.120882,1.149104|1.141787|1.131093|1.120882|1.116644|1.120237|1.111823,91176960,102789900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>,81920,1.026900,1.042152|1.032479|1.029939|1.026900|1.017988|1.019957|1.014654,106659840,109464500.000000,0.916154 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,tlfloat,tlquad,TLFloat Quad,TLFloat operator>,81920,5.313128,5.295375|5.278530|5.295515|5.372070|5.323172|5.313128|5.341867,20070400,106716200.000000,4.740132 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,81920,1.114725,1.133596|1.126648|1.117143|1.114725|1.107316|1.107922|1.097727,91176960,101663300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>=,81920,1.044108,1.078119|1.069168|1.059198|1.044108|1.032511|1.029088|1.034139,99778560,104715200.000000,0.936651 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator>=,81920,5.600083,5.600083|5.593872|5.600622|5.593477|5.611931|5.595595|5.600622,19496960,109172400.000000,5.023737 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,81920,3.707140,3.702347|3.704608|3.717810|3.711005|3.709333|3.704404|3.707140,30965760,114823900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,81920,2.949909,2.946742|2.958454|2.949290|2.951483|2.949909|2.947821|2.954420,39567360,116769600.000000,0.795737 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,81920,72.987671,73.031616|72.973633|72.987671,491520,35879800.000000,19.688406 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,2048,22.507209,22.611512|22.480366|22.507209,1173504,26442600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,2048,352.351262,352.351262|352.971004|351.904297,79872,28147600.000000,15.655040 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,2048,576.135254,576.135254|575.988770|576.147461,49152,28316000.000000,25.597810 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,8192,10.285811,10.521559|10.395397|10.340604|10.285811|10.216800|10.161313|10.099446,10092544,103839200.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,8192,61.052390,61.279297|60.984892|61.052390,417792,25529400.000000,5.935593 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,8192,111.961670,111.961670|112.141113|111.853027,245760,27521500.000000,10.885060 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,2048,84.771729,84.771729|84.629313|85.302734,294912,25038400.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,2048,570.269775,569.622803|571.112061|570.269775,49152,28033100.000000,6.727122 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,2048,653.083147,653.152902|651.918248|653.083147,43008,28072100.000000,7.704021 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,2048,84.270508,84.270508|84.417969|84.242188,307200,25900100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,2048,566.363525,566.479492|564.947510|566.363525,49152,27816600.000000,6.720780 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,2048,653.620257,653.620257|655.050223|653.257533,43008,28126200.000000,7.756216 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,fltx,fltx,fltx bl::f128,bl::sincos,2048,94.938908,94.930959|94.990007|94.938908,264192,25085900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,tlfloat,tlquad,TLFloat Quad,tlfloat::sincos,2048,1333.020020,1331.665039|1334.362793|1333.020020,24576,32760200.000000,14.040819 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,2048,95.888672,95.888672|95.927734|95.670573,276480,26494800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,2048,1131.555176,1133.471680|1130.358887|1131.555176,24576,27815000.000000,11.800718 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,2048,819.132487,818.701172|819.132487|819.669596,36864,30197800.000000,8.542537 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,2048,109.273489,109.287623|109.111585|109.273489,233472,25500800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,2048,326.140485,325.976562|326.660156|326.140485,86016,28063500.000000,2.984626 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,2048,1207.690430,1208.398438|1207.690430|1206.811523,24576,29678800.000000,11.051998 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,2048,116.192801,115.980748|116.192801|116.263951,215040,24976000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,2048,331.361607,331.361607|331.787109|331.274414,86016,28512100.000000,2.851826 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,2048,1205.810547,1205.810547|1203.088379|1221.411133,24576,29739500.000000,10.377670 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,2048,157.237413,157.237413|157.655165|157.192202,165888,26104400.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,2048,2015.087891,2015.218099|2015.087891|2011.539714,18432,37121100.000000,12.815575 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,2048,1359.887695,1359.887695|1359.765625|1359.936523,24576,33420000.000000,8.648627 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,2048,161.716872,161.716872|161.837064|161.592924,159744,25833100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,2048,1935.172526,1935.172526|1933.723958|1942.399089,18432,35704600.000000,11.966423 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,2048,1364.843750,1368.652344|1364.306641|1364.843750,24576,33569200.000000,8.439712 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,2048,92.124245,92.078746|92.372825|92.124245,270336,24922800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,2048,336.887770,336.887770|336.602314|337.131911,79872,26906800.000000,3.656885 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,2048,692.034040,693.282645|692.034040|690.638951,43008,29760900.000000,7.511964 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,2048,90.754862,91.286777|90.565783|90.754862,288768,26240100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,2048,750.626628,750.040690|750.626628|750.708008,36864,27664900.000000,8.270925 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,2048,1588.916016,1588.916016|1588.574219|1589.111328,18432,29286000.000000,17.507778 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,2048,94.439142,94.439142|94.410289|94.662198,270336,25547800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,2048,350.183105,351.566569|350.036621|350.183105,73728,25848700.000000,3.708029 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,2048,742.919922,742.919922|745.947266|742.407227,36864,27417900.000000,7.866653 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,2048,123.145967,123.453297|123.145967|122.789809,208896,25721300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,2048,373.067220,373.392741|373.067220|372.562663,73728,27501100.000000,3.029472 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,2048,856.816406,856.816406|856.259766|857.275391,30720,26320400.000000,6.957730 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,2048,127.659697,128.104894|127.659697|127.327953,208896,26675500.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,2048,384.391276,383.825684|384.391276|384.558105,73728,28330600.000000,3.011062 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,2048,899.667969,901.220703|899.667969|899.179688,30720,27648700.000000,7.047392 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,2048,127.636719,128.383502|127.539062|127.636719,208896,26708000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,2048,384.521484,384.590658|384.521484|383.780924,73728,28333500.000000,3.012624 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,2048,901.230469,901.230469|900.810547|902.021484,30720,27689600.000000,7.060903 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,2048,124.467199,124.645278|124.467199|124.208697,208896,25995100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,2048,490.901693,491.720920|488.753255|490.901693,55296,27120400.000000,3.944025 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,2048,898.203125,895.996094|898.203125|898.623047,30720,27574500.000000,7.216384 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,2048,192.666903,192.509322|192.666903|192.797852,135168,26041200.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,2048,602.697754,602.697754|605.169678|599.835205,49152,29617400.000000,3.128185 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,2048,3218.627930,3225.732422|3216.870117|3218.627930,12288,39572400.000000,16.705661 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,8192,24.078924,24.007069|24.078924|24.278675,1081344,26083700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",8192,9.007568,9.020531|9.007568|9.009835|9.006755|9.005127|9.017915|8.993152,12042240,108484900.000000,0.374085 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,fltx,fltx,fltx bl::f128,bl::product_sum,8192,4.630940,4.615023|4.668241|4.646602|4.633461|4.628646|4.618053|4.630940,24715264,114541000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,cppdd,cppdd,boost::multiprecision::cpp_double_double,same expression,8192,6.977016,6.984297|6.977016|6.973746|6.984384|6.973528|6.985256|6.972525,16056320,112051900.000000,1.506609 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,tlfloat,tlquad,TLFloat Quad,same expression,8192,65.073395,65.073395|64.840698|65.180969,393216,25571500.000000,14.051877 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,2048,106.427002,106.529541|106.427002|106.286621,245760,26152400.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,2048,366.780599,366.076660|366.902669|366.780599,73728,27027700.000000,3.446311 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,2048,799.430339,801.611328|799.430339|798.803711,36864,29489300.000000,7.511537 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,2048,105.860596,105.770264|105.860596|106.126709,245760,26030700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,2048,367.150879,367.508952|366.337077|367.150879,73728,27058100.000000,3.468249 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,2048,752.400716,751.375326|752.400716|752.514648,36864,27725300.000000,7.107467 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,2048,111.743790,111.743790|111.706230|111.760066,239616,26773900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,2048,384.342448,384.025065|384.452311|384.342448,73728,28331700.000000,3.439497 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,2048,785.359701,787.036133|785.359701|785.245768,36864,28970700.000000,7.028218 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,2048,119.742360,120.311064|119.689223|119.742360,208896,25049600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,2048,653.752790,653.752790|656.082589|652.943638,43008,28138400.000000,5.459662 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,2048,2921.533203,2923.437500|2921.142578|2921.533203,12288,35906000.000000,24.398494 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,2048,133.261108,133.261108|133.515930|133.163452,196608,26210500.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,2048,714.184570,714.005534|714.184570|717.887370,36864,26371000.000000,5.359287 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,2048,2780.151367,2779.785156|2780.151367|2784.350586,12288,34178200.000000,20.862436 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,2048,129.859924,129.820251|130.255127|129.859924,196608,25554800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,2048,2514.208984,2514.208984|2517.651367|2512.500000,12288,30901700.000000,19.360931 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,2048,953.750000,953.769531|953.750000|951.132812,30720,29272600.000000,7.344452 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,256,556.741649,556.741649|557.253502|555.967134,44544,24795600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,256,1109.349798,1109.349798|1118.724798|1108.114919,23808,26476000.000000,1.992576 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,256,20283.593750,20262.890625|20283.593750|20358.203125,768,15591600.000000,36.432686 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,256,553.597862,554.701206|553.529331|553.597862,43776,24249400.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,256,1101.587702,1101.587702|1101.600302|1099.180948,23808,26207600.000000,1.989870 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,256,20282.812500,20282.812500|20255.468750|20305.468750,768,15576000.000000,36.638170 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,256,533.017744,533.666578|531.177172|533.017744,45312,24134100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lgamma,256,2623.102679,2620.061384|2625.641741|2623.102679,10752,28201800.000000,4.921230 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::lgamma,256,13353.515625,13346.875000|13353.515625|13367.578125,768,10257400.000000,25.052666 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,256,468.577665,468.577665|467.738971|469.594439,52224,24474100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tgamma,256,1898.190789,1898.190789|1896.936678|1898.231908,14592,27692500.000000,4.050963 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::tgamma,256,14975.390625,14975.390625|14983.984375|14953.515625,768,11497700.000000,31.959250 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,4099,188.426039,188.426039|188.383346|188.706595,147564,27816600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,4099,658.233716,659.770676|658.233716|657.251769,49188,32386300.000000,3.493327 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,4099,1642.315199,1641.107587|1642.315199|1643.852159,24594,40393800.000000,8.715967 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,4099,157.447810,157.447810|157.496602|157.423413,172158,27107300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,4099,203.515492,203.647231|203.515492|203.427665,122970,25028100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,4099,765.698951,764.853216|767.374156|765.698951,36891,28257600.000000,3.762362 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,4099,1045.515166,1043.937546|1045.515166|1052.150931,36891,38632300.000000,5.137276 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,mt19937_64,fltx,fltx,fltx bl::f128,bl::mt19937_64,64,1.380801,1.394520|1.388338|1.385990|1.380801|1.378026|1.378211|1.378091,75413184,104328500.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,uniform_real,fltx,fltx,fltx bl::f128,bl::uniform_real,64,7.327998,7.304484|7.311026|7.328219|7.341699|7.342495|7.327998|7.320838,15837696,116015100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,normal,fltx,fltx,fltx bl::f128,bl::normal,64,43.952602,43.950591|43.952602|43.994832,596736,26236100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f128,same workload,64,24.377232,24.403739|24.370536|24.377232,1075200,26217500.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,25.644520,25.644520|25.703433|25.631917,1023552,26264300.000000,1.051987 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,tlfloat,tlquad,TLFloat Quad,same workload,64,150.268688,149.664567|150.268688|150.338855,175296,26310300.000000,6.164305 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f128,same workload,64,187.401541,188.210616|186.845034|187.401541,140160,26278000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,830.324836,831.075247|828.536184|830.324836,29184,24222100.000000,4.430726 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,tlfloat,tlquad,TLFloat Quad,same workload,64,1392.297980,1392.297980|1389.267677|1395.407197,19008,26465300.000000,7.429491 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f128,same workload,64,19.848594,19.799703|19.857156|19.848594,1331520,26410900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,18.182509,18.182509|18.265631|18.130172,1461696,26592300.000000,0.916060 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,tlfloat,tlquad,TLFloat Quad,same workload,64,152.246202,152.246202|152.059738|152.296271,173760,26446400.000000,7.670377 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f128,same workload,64,54.657334,54.410461|54.778615|54.657334,487296,26613900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,81.430931,81.475468|81.356703|81.430931,323328,26325700.000000,1.489845 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,tlfloat,tlquad,TLFloat Quad,same workload,64,575.520833,575.520833|574.914293|576.186709,45504,26189400.000000,10.529618 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f128,same workload,64,166.597524,166.597524|166.454706|166.913765,176448,29406000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,107.193201,107.193201|107.347378|107.037728,231552,24820700.000000,0.643426 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,tlfloat,tlquad,TLFloat Quad,same workload,64,601.777251,600.199941|601.777251|602.725118,40512,24370700.000000,3.612162 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,fltx,fltx,fltx bl::f128,same workload,8,31.861660,31.889686|31.842734|31.861660,824232,26263900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,8,34.713948,34.713948|34.719435|34.604199,765384,26542900.000000,1.089521 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,tlfloat,tlquad,TLFloat Quad,same workload,8,222.386707,222.693857|222.049345|222.386707,119160,26498400.000000,6.979759 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f128,same workload,8,828.508277,828.527088|828.508277|827.041008,31896,26410700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,8,2834.922680,2834.922680|2835.760309|2830.541237,9312,26387800.000000,3.421719 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,tlfloat,tlquad,TLFloat Quad,same workload,8,6136.875000,6136.875000|6122.847222|6137.361111,4320,26491800.000000,7.407138 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,fltx,fltx,fltx bl::f128,same workload,8,433.030094,432.646538|433.030094|433.630016,61008,26422700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,8,5521.349010,5489.108911|5521.349010|5630.445545,4848,26891700.000000,12.750497 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,tlfloat,tlquad,TLFloat Quad,same workload,8,4262.939453,4269.238281|4262.939453|4249.560547,6144,26177000.000000,9.844442 diff --git a/validation/metrics/data/windows/x86_64/detail/ClangCL_f128_fastmath_accuracy.csv b/validation/metrics/data/windows/x86_64/detail/ClangCL_f128_fastmath_accuracy.csv new file mode 100644 index 0000000..5d670c4 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/ClangCL_f128_fastmath_accuracy.csv @@ -0,0 +1,128 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,moderate,4097,10322096095657499311,109.950521,107.250365,107.040693,106.000000,1.040693,yes,Both,yes,-2.472067804890653694736606692562736837036787645394e-04,-0.00024720678048906536947366066925627220254736992061971280405933562914519934341009422,-0.0002472067804890653694736606692562736837036787645394 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,wide_exponent,4098,10322096095657499308,109.923010,107.051396,106.003381,106.000000,0.003381,yes,Both,yes,-4.215228812298638183537364477017984307424253045187e-293,-4.2152288122986381835373644770182307620164082432452873068526743823738143144126931e-293,-4.215228812298638183537364477017984307424253045187e-293 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,general,3845,10322096095657499292,119.108587,106.483519,105.736235,90.000000,15.736235,yes,NaN,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,subnormal,251,10322096095657499292,inf,inf,inf,90.000000,inf,yes,NaN,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312,7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,general,3844,10322096095657499292,118.876961,106.530508,105.744857,90.000000,15.744857,yes,NaN,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,subnormal,252,10322096095657499292,inf,inf,inf,90.000000,inf,yes,NaN,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310,-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,general,4092,10322096095657499292,108.517210,105.172405,104.685792,90.000000,14.685792,yes,NaN,no,"broad lhs [-8038039671158.3145,-0.00022310041789425956,1.2384561037485062e-20,-6.8748124068457664e-37] ; broad rhs [2.5635359082663138e-69,7.1152414745265618e-86,-3.9497524553936191e-102,2.1925530587738712e-118]",-2.0605803329083492881294378674856916780067042740122006434502346656412091808499997e-56,-2.0605803329083492881294378674857548356708679074621085271346648345255418966878113e-56 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,subnormal,8,10322096095657499292,123.430323,107.640342,107.640342,90.000000,17.640342,yes,NaN,no,"extreme lhs [5.3610920538229009e+270,1.4880019588222884e+254,-8.2600701768591933e+237,4.5852600476843326e+221] ; extreme rhs [2.8682136140660301e-295,7.9608919846980822e-312,-0,0]",1.5376757215036059473819023136396346852543747719615695276077139367073548105554037e-24,1.5376757215036059473819023136396286054027234522232977278134529923886643804961882e-24 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,general,4096,10322096095657499292,110.882649,105.971646,105.124683,90.000000,15.124683,yes,NaN,no,"representative lhs [3.8069729471352109e-08,1.05664725500865e-24,-5.8655705570878625e-41,3.2560457425211756e-57] ; representative rhs [-10239996542.103203,-2.8421699832812405e-07,1.5777212776686647e-23,-8.7581124445438569e-40]",-3.717748274115425677507007818785488818087130701795158032304321273801830518128672e-18,-3.7177482741154256775070078187854047565702465103661629499646177206025402808246684e-18 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,subnormal,4,10322096095657499292,inf,inf,inf,90.000000,inf,yes,NaN,no,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,moderate,4099,10322096095657499356,108.707014,104.340724,99.580200,90.000000,9.580200,yes,Both,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50] ; [-2.2467526986846895,-6.2359914417961224e-17,3.4616706400237409e-33,-1.9216132241116296e-49] ; [-0.82478157060333857,-2.2892287249258141e-17,1.2707772195229639e-33,-7.0542306414176576e-50]",-0.0025616587031475578614921195531973426573882576399799792521563357797220739087151742,-0.0025616587031475578614921195531946393591985326302623011385541559314120186541712416 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,cancellation,4098,10322096095657499352,123.613534,107.447694,107.008989,90.000000,17.008989,yes,Both,no,"one plus a low-limb delta [1,2.3375830000300188e-20,0,0] ; one plus a low-limb delta [1,9.1191608041326794e-20,0,0] ; native product cancellation",6.0206627557371401035138369829719396083930638942820518512027281512011279702649282e-36,6.0206627557371401035138369829719764831182728766548123483364806462892589095319671e-36 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,wide_exponent,4096,10322096095657499357,119.379603,105.706206,105.104560,90.000000,15.104560,yes,Both,no,"[1.8981249705652212e+89,5.2683551148436403e+72,-2.9245245752005601e+56,1.6234372597348835e+40] ; [1.1014129724927449e-14,3.057035104205699e-31,-1.6969953798882659e-47,9.4202167171723354e-64] ; [6.0449196483364435e+57,1.677802243898031e+41,-9.3136734097167327e+24,517012733.16533029]",2090619465992944339582789396039621194251475772329551483560910643344841900032,2090619465992944339582789396039669128910028437534974254383211366163696058368 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,subnormal,4100,10322096095657499350,inf,inf,inf,90.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,moderate,4099,10322096095657499356,108.710750,105.621789,105.403238,90.000000,15.403238,yes,Both,yes,"[-2.0216112865291063,-5.6110984928667459e-17,3.114785370110088e-33,-1.7290532173309048e-49]",4.0869121938218684213523234559135312039828584030511109615650764542715833727015706,4.086912193821868421352323455913607387135084308816614946511827134127630171714709 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,wide_exponent,4096,10322096095657499357,108.714763,105.598081,105.370295,90.000000,15.370295,yes,Both,yes,"[4.07867604911808e+17,11.320600149295146,-6.2841954691612277e-16,3.4884292505539414e-32]",166355983136494714602069966978531328,166355983136494714602069966978534500.62754285635655510754919878168120152773808347 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,near_one,4099,10322096095657499359,109.041603,106.207316,105.235269,90.000000,15.235269,yes,Both,yes,"[0.7943239392491388,2.2046918159133699e-17,1.2238498081148352e-33,6.7937311782608489e-50]",1.2589322197002942275560659685836243624199496927685685911021398405984506041477289,1.2589322197002942275560659685835979972909064819121737721490343315675812064184067 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,wide_exponent,4096,10322096095657499357,109.009049,105.925795,105.189487,90.000000,15.189487,yes,Both,yes,"[3.5001788065165318e+43,9.7149477532491364e+26,53928793393.438126,2.9936494057824018e-06]",2.8569969000961575149593584421158660998363524565146662142923865841595715918551683e-44,2.8569969000961575149593584421158043381809410343861907578030166512899574822804677e-44 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Inf,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Inf,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Inf,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Inf,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,NaN,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,cancellation,4098,10322096095657499352,137.992247,inf,106.227061,90.000000,16.227061,yes,NaN,yes,"one plus a low-limb delta [1.0000000000000002,-9.2098754789066345e-17,0,0] ; one plus a low-limb delta [1,9.3157411673208082e-33,0,0]",1.299458501359649542526809416735399539516537488861303804737012764889933880863069e-16,1.2994585013596495425268094167353858549612218168195955651903009493027143470550428e-16 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,moderate,4099,10322096095657499356,110.177573,107.236356,107.022726,90.000000,17.022726,yes,Both,yes,"[-4.0306514937478397,-1.118730523149658e-16,6.2102019257584848e-33,-3.4473545827742784e-49]",-4.0309999999999999999999999999999755453119381486340322364144762336268801306005116,-4.031 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,wide_exponent,4096,10322096095657499357,121.330260,107.340420,107.049597,90.000000,17.049597,yes,Both,yes,"[1.9564201098655394e-06,5.4301566295310004e-23,-3.0143424587131265e-39,1.6732962008842592e-55]",1.9564199999999999999999999999999883500964702027617153338260327688823346504976789e-06,1.95642e-06 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,boundary,4110,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,boundary,4114,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,NaN,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,NaN,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,90.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,NaN,-,"lower endpoint [-8,0,0,0]",3,3 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,NaN,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,near_one,4099,10322096095657499359,109.483067,105.751120,104.669867,90.000000,14.669867,yes,Both,yes,"[1.0434745107555559,2.8962235686257217e-17,1.6077270451751567e-33,8.9246779143301406e-50]",1.0215060013311502277290127699241048631609354594130696894861318971964303514710082,1.0215060013311502277290127699240732060505168443174685619534358207641504292216177 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,wide_exponent,4096,10322096095657499357,109.554369,105.974012,105.134919,90.000000,15.134919,yes,Both,yes,"[1.1645444442808547e-62,3.2322601380997815e-79,1.7942648134482328e-95,9.9601705408249462e-112]",1.0791406045001062461937244900901782471018853969286737164352073021695624156016746e-31,1.0791406045001062461937244900901540193152963432252732200525801490754009153911073e-31 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,extreme_finite,4096,10322096095657499354,109.462818,106.258948,105.096134,90.000000,15.096134,yes,Both,yes,"[1.3220615149200299e+307,3.6694578345875804e+290,2.0369582879251504e+274,1.1307389957277705e+258]",3.6360163846165902232928621254916330482868374851642045295187667520670879059664215e+153,3.6360163846165902232928621254915491917111449494286729393569803221869869190043071e+153 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,subnormal,4100,10322096095657499350,110.498955,106.653014,106.214358,90.000000,16.214358,yes,Both,yes,"[9.5745039639339057e-314,0,0,0]",3.0942695364065984592266695010140804816710164393335370623177724037590908372789884e-157,3.0942695364065984592266695010140476078219969118554123365016956606210529423634246e-157 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,moderate,4099,10322096095657499356,108.134138,104.279589,103.154742,90.000000,13.154742,yes,Both,yes,"[-5.9112302503110126,-1.6406959819390034e-16,9.1076922777933078e-33,-5.0557848340034338e-49]",-1.8081146236170408256662159398260846805204664291606354162902101437304658304583427,-1.8081146236170408256662159398259245204126936694753799586379567762813578965663977 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,wide_exponent,4096,10322096095657499357,107.940958,104.101707,103.019576,90.000000,13.019576,yes,Both,yes,"[2.9828051152340277e-55,8.2789472922562771e-72,-4.5957389517605069e-88,2.5511475997055982e-104]",6.6815151845441513626509033780520045477856444490717657200631959144352644689019878e-19,6.6815151845441513626509033780513545789151896608767546149873769328352874764005102e-19 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,moderate,4099,10322096095657499356,108.682153,105.556470,104.448638,90.000000,14.448638,yes,Both,yes,"[2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49] ; [7.6161438781938315,2.1139045731071814e-16,-1.1734527644620026e-32,6.5139713870787798e-49]",8.0914622723995239714248451353921972400978668058729318673943800913073154390531272,8.0914622723995239714248451353919049231629452774327450009049705044051673057483058 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,wide_exponent,4096,10322096095657499357,136.086569,107.303893,104.375984,90.000000,14.375984,yes,Both,yes,"[-1.0904439541376617e-171,-3.0265899623673255e-188,1.6800949311597954e-204,-9.3264003806481111e-221] ; [-6.6064316563514781e-178,-1.8336531338734802e-194,1.0178819642012061e-210,-5.6503799650342919e-227]",1.0904439541378618053723797776842685378887910042683910204594308964030285890648591e-171,1.090443954137861805372379777684227109194726424167261957374676671431464584983977e-171 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,moderate,4099,10322096095657499356,109.289129,105.940176,105.022316,80.000000,25.022316,yes,Both,yes,"[-2.6398923795068718,-7.3271732556525522e-17,4.0673982269215659e-33,-2.2578595809239299e-49]",-0.48091697577772919399226624691062015405871262531310584383165433654955256415064468,-0.48091697577772919399226624691060848051161030920422183238229214193978802883324422 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,argument_reduction,4110,10322096095657499353,107.878813,98.777563,98.619216,80.000000,18.619216,yes,Both,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107778446817142530158141594307620809510923605317049154659252158834084e-08,2.983455547010777844681714253021942987548016308835936187833122791508178595472033e-08 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,quadrant_boundaries,4315,10322096095657499369,114.302289,100.269139,100.230956,80.000000,20.230956,yes,Both,yes,"below random k*pi/2, exponent 43, quadrant 2, offset bits 64 [-15189111743596.248,-2.2040936843613776e-05,0,0]",8.2340339752651274439911770999089811880423371828520810609536481004607152164951472e-07,8.2340339752651274439911770999034465622958436535312599533652322394306622926203602e-07 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,moderate,4099,10322096095657499356,109.267445,105.979013,105.328054,80.000000,25.328054,yes,Both,-,"[1.3052020301228939,3.6226633640748349e-17,-2.010982138630954e-33,1.1163193362090118e-49]",0.26248277312553705702695162816852912212589596287237225345705224528736199118839068,0.26248277312553705702695162816852396749826395623085371572470338778345559864971624 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,argument_reduction,4110,10322096095657499353,117.900119,105.731702,99.209588,80.000000,19.209588,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1273107444367091e-17,-0,-0]",-4.076748699943230335115082501060544610987236354894355627499358880133086316429937e-20,-4.0767486999432303351150825010549823398817902769691808721665498735571977321034076e-20 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,quadrant_boundaries,4315,10322096095657499369,113.389741,100.266388,100.241282,80.000000,20.241282,yes,Both,-,"below random k*pi/2, exponent 32, quadrant 1, offset bits 64 [6759185830.8093033,2.5452908459680444e-07,0,0]",3.6641619809983954738175143693267979746715518809894967024037216566072372430296582e-10,3.6641619809983954738175143693292433300620783220933192304310816115127405346807142e-10 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,moderate,4099,10322096095657499356,106.990413,104.358303,103.662452,75.000000,28.662452,yes,Both,yes,"[1.0283589742402928,2.8542695269537032e-17,-1.5844378736549776e-33,8.7953970420994041e-50]",1.6590692097473263340445844749263504271822370452064470782609014202699238005322968,1.65906920974732633404458447492645378827060656915569642322001914303143546133552 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,argument_reduction,4110,10322096095657499353,106.636659,98.776698,98.614153,75.000000,23.614153,yes,Both,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107791724696498071933228039119120966041628715515577584130136247446007e-08,2.9834555470107791724696498071994731788491203878271025995398127676131094640315383e-08 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,quadrant_boundaries,4315,10322096095657499369,106.499081,100.252704,100.193377,75.000000,25.193377,yes,Both,yes,"below random k*pi/2, exponent 35, quadrant 3, offset bits 64 [-59550109601.544846,-4.5998843808876405e-07,0,0]",309768431.94980647490490283626492826519224603465385570189027930609881877899169922,309768431.94980647490490283626514197542933150294098619645159482100231149999767842 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,near_one,4099,10322096095657499359,108.638031,106.152026,105.321909,80.000000,25.321909,yes,Both,yes,"[0.68327775494803278,1.8964767393937287e-17,-1.0527560708704801e-33,5.8439701459716004e-50]",0.59941459668283531301680476878329138003111794710527586828655022266332252911524847,0.5994145966828353130168047687833032015572049547180395358634521660952312280617229 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,moderate,4099,10322096095657499356,108.819079,105.953468,104.926390,80.000000,24.926390,yes,Both,yes,"[1.7923972346284831,4.9749016978975022e-17,-2.7616252051262958e-33,1.5330099440581923e-49]",1.0618989131564895436407540480874589123331650567714808343216437342988039960189894,1.0618989131564895436407540480874313641834035736707386450972798475694004675512729 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,near_one,4099,10322096095657499359,108.593233,105.799026,104.761376,80.000000,24.761376,yes,Both,yes,"[1.0818954035110564,3.0028629680352481e-17,-1.666923803453484e-33,9.2532859344489846e-50] ; [0.65275323882187208,1.8117541878467149e-17,-1.0057256071542369e-33,5.5828986275887446e-50]",1.0279228914914060327533533251293914713081558101296952640517443772205652408047172,1.0279228914914060327533533251293615731716847356252552579150219391046313458442121 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,moderate,4099,10322096095657499356,108.845358,105.968236,104.520841,80.000000,24.520841,yes,Both,yes,"[0.17246963902978685,4.7869941074914726e-18,-2.6573155384409922e-34,1.4751064472356924e-50] ; [4.1006496155849739,1.1381589047856838e-16,-6.318051108876087e-33,3.5072229059163668e-49]",0.042034327541476674060107604306532306204552005274371072135952080023324484159275016,0.042034327541476674060107604306530861776728203971856534731213306751945145807618236 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,extreme_finite,8,10322096095657499351,116.769509,109.692678,109.692678,80.000000,29.692678,yes,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397529394834895588573302312846062338790031898128063,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,moderate,4099,10322096095657499356,107.979933,105.096123,104.081582,80.000000,24.081582,yes,Both,yes,"[-0.03158561470140564,-8.766769172109845e-19,4.8665344932251859e-35,-2.7014693222555596e-51]",-0.031590868964255888487475098364116757608941970863589142199408956157005365361634119,-0.031590868964255888487475098364115285691415570498034097956857353613513937214419265 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,boundary,4105,10322096095657499355,109.179337,106.113879,105.956528,80.000000,25.956528,yes,Both,yes,"[0.99999942350312121,2.7755559614626202e-17,-1.5407430672757073e-33,8.5528421416053841e-50]",1.5697225512744511775996984093823162316469799617556662501159018933971633913415644,1.5697225512744511775996984093822962914427098056014529298362837222126251898438199 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,moderate,4099,10322096095657499356,108.568133,105.119090,102.606898,80.000000,22.606898,yes,Both,-,"[0.99447363321554472,2.7602188124463265e-17,-1.5322292392907091e-33,8.5055809023221692e-50]",0.10518045845827819297865791404046697400704440931878221279239664668822551440996449,0.10518045845827819297865791404048059412910636761979542748882605088251354897169005 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,boundary,4105,10322096095657499355,104.376193,95.825547,81.584963,80.000000,1.584963,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863439534155160504671268531080086442146964698096667234494817e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,moderate,4099,10322096095657499356,107.422628,104.784889,104.123120,80.000000,24.123120,yes,Both,-,"[-7.4260131889231964,-2.0611327058781538e-16,1.1441584934369385e-32,-6.3513555161706011e-49]",0.00059555715897935043401591506055704088046193962180369225037771615963253651893083429,0.00059555715897935043401591506055701391914881720026106459729557182617396144915233455 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,boundary,4099,10322096095657499339,106.555700,104.344345,103.645110,80.000000,23.645110,yes,Both,-,"[689.56791103874002,1.913935429694702e-14,-1.0624475908464504e-30,5.8977688890762846e-47]",2.9890877290907641503012149009532296945711450367253589288612016829881349927374169e+299,2.9890877290907641503012149009534181687133803867116344877486422688909796071e+299 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,moderate,4099,10322096095657499356,108.902998,106.013023,105.332281,80.000000,25.332281,yes,Both,-,"[2.5050708699436939,6.9529683953231499e-17,-3.8596728009893943e-33,2.1425488055889476e-49]",5.6767722797494772853116587667814582973149425261925085601171598811975904652626923,5.6767722797494772853116587667815694514029231846505256411149926048833678443740637 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,boundary,4099,10322096095657499339,108.889789,106.068713,105.117537,80.000000,25.117537,yes,Both,-,"[-300.54967496719229,-8.341929229804598e-15,4.6307009503613316e-31,-2.5705554076223722e-47]",3.3537651522202066232694855987502461915822095092416702651658002446064688733175029e-91,3.3537651522202066232694855987503223996548021083914718227771648387284160913978918e-91 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,moderate,4099,10322096095657499356,108.703910,105.111574,104.102752,80.000000,24.102752,yes,Both,yes,"[0.34499201425549764,9.5754519384565927e-18,-5.3154436066330483e-34,2.9506639390902969e-50]",0.41197864392194338236442692612392088638530541488783931021803297713515523703620147,0.41197864392194338236442692612390197063088901255454253734406676554091755929509722 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,cancellation,4098,10322096095657499336,134.532978,106.243436,104.431991,80.000000,24.431991,yes,Both,yes,"[5.2823021564447655e-10,1.4661333692780236e-26,-8.1386751187185946e-43,4.5178722533726315e-59]",5.2823021578399014295181730840717304111038933843651099389423600846862121746910786e-10,5.2823021578399014295181730840715373648809557706009947616651919887543783634460306e-10 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,near_one,4099,10322096095657499359,107.587097,104.625423,103.727726,80.000000,23.727726,yes,Both,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.16836588841698423133590420499408908570076543035915070334582452268043853416124023,0.16836588841698423133590420499409911099841188934514465011564788537156738257109514 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,wide_exponent,4096,10322096095657499357,108.459773,105.569923,104.766295,80.000000,24.766295,yes,Both,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-282.39686865150220367499305723086940567546238559138028340316645126151229305833112,-282.39686865150220367499305723087759150499758429977321630947871340522978294577768 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,extreme_finite,4096,10322096095657499354,109.176760,105.259872,105.032438,80.000000,25.032438,yes,Both,-,"[7.8173980412642063e+300,2.1697638245177804e+284,1.2044608779891888e+268,6.6861009950191438e+251]",692.83187966610744796102335261136963360047942862056461746020352698849364969646558,692.8318796661074479610233526113529337163936151304127833135311352796511576817801 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,near_one,4099,10322096095657499359,107.303954,104.550799,103.716432,80.000000,23.716432,yes,Both,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.24290063227404771615686474809384021893054758987931141292077052724202035349776452,0.24290063227404771615686474809385479604744883847615479262644004599544797468667503 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,wide_exponent,4096,10322096095657499357,107.967820,105.222704,104.386734,80.000000,24.386734,yes,Both,-,"[2.2828060842783888e+123,6.336059688800657e+106,3.5172196759528967e+90,1.952449133453769e+74]",409.78796398443927791610862116022677480269364161366471002376221655083554651355371,409.78796398443927791610862116024222810248381363533512220222949171648044838642357 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,extreme_finite,4096,10322096095657499354,111.086264,105.070160,104.606169,80.000000,24.606169,yes,Both,-,"[8.4825748870998104e+300,2.3543874869413368e+284,1.3069475984458161e+268,7.2550165788654925e+251]",999.66293072781110639078474847446915088682993473501091851417255096379221868119203,999.66293072781110639078474847443677221631807677679365605314190636576738889243849 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,near_one,4099,10322096095657499359,107.290148,104.469291,103.762278,80.000000,23.762278,yes,Both,-,"[0.75767388015401582,2.1029674672601745e-17,1.1673814510949479e-33,6.4802688276296867e-50]",-0.12051768424391546599899037931433572311869461807102196510180994458742362307468454,-0.12051768424391546599899037931434272948211001876788467720396858894260414574766305 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,wide_exponent,4096,10322096095657499357,107.892624,105.170494,104.368159,80.000000,24.368159,yes,Both,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-122.64340176210480714781256202313334304453302289297190638109238264297218279352819,-122.64340176210480714781256202313802791680273253425717918726194907203719295819875 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,extreme_finite,4096,10322096095657499354,107.326534,105.011900,104.460171,80.000000,24.460171,yes,Both,-,"[1.574269563896497e-151,4.3694757920112377e-168,2.4255463149165589e-184,1.3464486830575322e-200]",-150.80292090089107415382716149653340039225497975448655319083077208652809986233478,-150.80292090089107415382716149652799577485650407769540271244758516976318786368256 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,moderate,4099,10322096095657499356,108.140237,105.150365,103.619384,80.000000,23.619384,yes,Both,yes,"[0.016967775842366306,4.7095038542183959e-19,-2.6142998067570899e-35,1.4512279193674093e-51]",0.016825431060362116060527975223933686830025480890723928219206553105394405175920802,0.016825431060362116060527975223934766829053970731436945963748330916850378472668862 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,cancellation,4098,10322096095657499336,134.607455,106.537373,104.621883,80.000000,24.621883,yes,Both,yes,"[9.5757892125536038e-15,2.657815415683552e-31,-1.4753839348477804e-47,8.1900260731503383e-64]",9.5757892125535581941894138318495891727756910760066238894863215461528382537839935e-15,9.5757892125535581941894138318498959687222096513961541169989695977230888612152571e-15 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,near_one,4099,10322096095657499359,108.254105,105.091738,103.817818,80.000000,23.817818,yes,Both,yes,"[0.50824794006286333,1.4106714131902435e-17,7.8307994155215805e-34,4.3469669061666386e-50] ; [1.4195792076051643,3.9401238039059714e-17,2.1872080834850324e-33,1.2141443869656723e-49]",0.38260537918836910980295595469486016694478510077047130768040772007699407142311543,0.38260537918836910980295595469483876398615466016654421485472691554230336671157279 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,moderate,4099,10322096095657499356,106.001122,102.267431,101.314349,80.000000,21.314349,yes,Both,yes,"[6.7554035072711907,1.875001128601503e-16,1.0408347120857714e-32,5.7777933109335954e-49] ; [7.5615146099912893,2.09874190526296e-16,1.1650357929843036e-32,6.4672478094180065e-49]",1876810.3436059515909373438747938277987921279160005681718725867312969057820737362,1876810.3436059515909373438747932324627118494928000187634317695110360784386875593 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,moderate,4099,10322096095657499356,106.519662,103.850741,103.190083,90.000000,13.190083,yes,Both,no,"[0.71581135775056381,1.9867756266571774e-17,-1.1028820227394361e-33,6.1222250754524372e-50]",0.096291975196169784525310139181526871816045133452422261028615229900944061380840822,0.096291975196169784525310139181535194812644791471494678467075788752285130394604154 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,wide_exponent,4096,10322096095657499357,106.463253,103.779117,103.294727,90.000000,13.294727,yes,Both,no,"[-4.2985314788901945e+20,-11930.821549849798,6.62293639366862e-13,-3.6764682374394009e-29]",-2.7116946263909823534882310466348560028692459166343819479015128601692309145311966e+144,-2.7116946263909823534882310466350739893700446173843466311067792915601894946997725e+144 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144,572114432512329142864001791218144 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,quotient_reduction,2,10322096095657499335,inf,inf,inf,90.000000,inf,yes,Both,yes,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,0,0] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,0,0]",134.96799785736229470766307175341820151552670393203375029736457157980566989863291,134.96799785736229470766307175341820151552670393203375029736457157980566989863291 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,moderate,4099,10322096095657499356,137.991491,inf,103.120938,90.000000,13.120938,yes,Both,yes,"[4.651496856054143,1.2910497271407093e-16,7.1667656650382064e-33,3.9783541267092195e-49] ; [1.1968567583256404,3.3219448256783813e-17,1.8440498160012704e-33,1.0236532821401969e-49]",-0.13593017724841871918057204650149481280191019956683356060646777679554175755072265,-0.13593017724841871918057204650150713875355427787629311886530032033038040140127123 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,near_one,4099,10322096095657499359,107.411772,104.726423,103.815855,80.000000,23.815855,yes,Both,yes,"[0.51829726641315743,1.4385638969304155e-17,-7.9856338038331893e-34,4.4329172576202887e-50]",0.54181616064164601141836335700755281177762270906400557918307925851265915984100729,0.54181616064164601141836335700752246129643265188541540400851198947696500079557021 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,moderate,4099,10322096095657499356,107.428545,104.869846,103.568829,80.000000,23.568829,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50]",0.12683416188096790784216939618227372193425686465939287968000771713444896349187729,0.12683416188096790784216939618228215357757794097427308352934774394732010797034323 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,near_one,4099,10322096095657499359,108.151971,105.591524,104.831618,80.000000,24.831618,yes,Both,-,"[1.4994043079684287,4.1616829648217466e-17,-2.3101981243676942e-33,1.2824175745594325e-49]",2.3511416377389521966137617451012654144360692751585280356211248541098424169604186,2.3511416377389521966137617451013305498775090885888924794020061506206886998298218 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,moderate,4099,10322096095657499356,107.662138,105.118172,104.370708,80.000000,24.370708,yes,Both,-,"[-7.2839693641636938,-2.0217076246896986e-16,1.122273176995369e-32,-6.2298676050974111e-49]",728.37982867708396528583195554001745260585065072868172597435332260573659368674271,728.37982867708396528583195554004522697642161075015288462613983940694317570296734 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,near_one,4099,10322096095657499359,108.508993,105.293208,103.771823,80.000000,23.771823,yes,Both,yes,"[0.51172914905977851,1.4203337091450122e-17,-7.884435932720214e-34,4.3767411543439516e-50]",0.47129137278430720759814686288642179705346521613436667069278209179356009528305549,0.47129137278430720759814686288639457893398171528583227402623085761363208890619784 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,moderate,4099,10322096095657499356,109.925995,105.123457,103.815933,80.000000,23.815933,yes,Both,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.48322034922123225518708897646637636069385959299582733007677741617069688828678409,0.48322034922123225518708897646634929399270770971586954580993858000068003447759588 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,near_one,4099,10322096095657499359,107.942783,105.155677,104.205601,80.000000,24.205601,yes,Both,yes,"[0.54780977077077553,1.5204775515608602e-17,-8.4403459308427531e-34,4.6853331941114368e-50]",0.52356044719022625228591770335188992100790509674337745785256442894450845670917261,0.52356044719022625228591770335191230591271180851991336042503192896063029229750644 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,moderate,4099,10322096095657499356,108.220931,105.311170,103.818628,80.000000,23.818628,yes,Both,yes,"[-0.065200541635407561,-1.8096785635415158e-18,1.0045734042071851e-34,-5.5765026163844551e-51]",-0.065154433999027981604796867967127986881415212588611420145090880769980952458286794,-0.065154433999027981604796867967124344186568215933203026966926467120453192197675953 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,moderate,4099,10322096095657499387,108.351907,105.741626,104.602282,80.000000,24.602282,yes,Both,-,"[1.0163605766345611,2.8209672837524767e-17,-1.5659514150681434e-33,8.6927765822649907e-50]",0.18064417420571660663002643085721230147927409837472224057688179881691649397712496,0.18064417420571660663002643085721816825671862302878034638011489993285710967947058 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,boundary,4101,10322096095657499355,107.711288,104.331717,103.672888,80.000000,23.672888,yes,Both,-,"[1.0000006976642144,2.7755594979700771e-17,-1.54074503043171e-33,8.5528530393103596e-50]",0.0011812401392645466366367223496664025691107131134376936381879814208025359246329034,0.0011812401392645466366367223496664756307232078155433668789257650353131882010275132 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,moderate,4099,10322096095657499356,107.718351,104.542010,103.139045,80.000000,23.139045,yes,Both,yes,"[-0.28874902442031025,-8.0143953812370009e-18,4.4488831403494138e-34,-2.4696262481412955e-50]",-0.29720096062669683272865803517211421035379945494633700815507025452637257512122915,-0.29720096062669683272865803517208759673932197508207544978047397151679963698000212 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,boundary,4105,10322096095657499355,108.512745,106.655151,106.203619,80.000000,26.203619,yes,Both,yes,"[-0.99899927667986499,-2.7727799963846583e-17,1.539202097103153e-33,-8.544288038776232e-50]",-3.799839456997147855581613541852042024176399900088711456868967222127997374059305,-3.799839456997147855581613541852082695691985906489816947756475473707459623001287 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,near_one,4099,10322096095657499359,107.766481,104.260004,103.477540,80.000000,23.477540,yes,Both,yes,"[0.63773432238017391,1.7700683207504784e-17,-9.8258530242838391e-34,5.4544441320713228e-50]",0.63288603898704082304852473006912003275150944031003931863308835424966614091601969,0.6328860389870408230485247300690752116994000610050783793434311866968213898036298 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,moderate,4099,10322096095657499356,114.031302,105.136563,103.642929,80.000000,23.642929,yes,Both,yes,"[0.57618201352237719,1.5992263444685661e-17,-8.8774895460806198e-34,4.9279966474639169e-50]",0.58483862789646320066419155791433430439304208383200808363911138388832600121247651,0.58483862789646320066419155791429737215979664256706430739228534678145335856964206 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,near_one,4099,10322096095657499359,105.308687,102.381484,101.601777,80.000000,21.601777,yes,Both,-,"[0.9902100102210416,2.74838488140428e-17,-1.5256600879333559e-33,8.4691147868762635e-50]",0.16140301992014431339678047519482652144140492984788687432496615166421793929885098,0.16140301992014431339678047519478457172356343218546211428730930584097639007690213 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,moderate,4099,10322096095657499356,109.069920,100.123363,99.167646,80.000000,19.167646,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804815742671822427612167381748211215236610271972494957,0.0048523201680211414554273497804747585214492493110494604164051752716872765694644792 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,moderate,4099,10322096095657499371,107.300170,103.199673,102.168212,80.000000,22.168212,yes,Both,-,"[16.10862066659595,4.4710403897518653e-16,-2.4819259923657773e-32,1.3777456910700632e-48]",28.197381657001775717891747205953291356104893832451631814899496025761393980246794,28.197381657001775717891747205948342415185062324244223614602442709080412981510555 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,moderate,4099,10322096095657499368,105.565044,98.349598,97.317514,80.000000,17.317514,yes,Both,-,"[16.916625286240897,4.6953067229351934e-16,-2.6064188157399712e-32,1.4468530905253747e-48]",16565261246416.8279913958728258930306644070018506909036659635603427886962890625,16565261246416.827991395872825976920133201596664513013387683984998603514086978856 diff --git a/validation/metrics/data/windows/x86_64/detail/ClangCL_f128_fastmath_benchmark.csv b/validation/metrics/data/windows/x86_64/detail/ClangCL_f128_fastmath_benchmark.csv new file mode 100644 index 0000000..bcf66da --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/ClangCL_f128_fastmath_benchmark.csv @@ -0,0 +1,86 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,81920,0.923151,0.921786|0.926145|0.922022|0.923151|0.922247|0.923151|0.923784,121569280,112230800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,81920,0.922846,0.919471|0.925371|0.923994|0.922780|0.922846|0.927968|0.922558,116981760,108040800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,81920,2.488773,2.487039|2.488923|2.488727|2.483212|2.494665|2.488773|2.502230,46448640,115680800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,81920,1.594951,1.593486|1.593008|1.593555|1.595986|1.599717|1.603555|1.594951,71680000,114424400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,81920,5.556675,5.556675|5.548842|5.565389|5.549181|5.556946|5.548842|5.569899,20643840,114708300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,81920,3.122038,3.122038|3.086158|3.082335|3.091841|3.182753|3.216233|3.216793,34979840,109927400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,81920,3.140850,3.163966|3.146740|3.138389|3.140113|3.148058|3.140850|3.136529,36126720,113616700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,81920,1.100421,1.100414|1.097807|1.100421|1.100988|1.106366|1.101275|1.099107,97484800,107322100.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,8192,23.631727,23.669162|23.631727|23.582357,1105920,26130400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,81920,0.805319,0.800114|0.797923|0.809279|0.805319|0.806241|0.801354|0.815292,147947520,119108800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,81920,0.728835,0.729870|0.730381|0.729187|0.728835|0.727209|0.726697|0.728672,158842880,115747700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,81920,2.759536,2.825017|2.799018|2.779304|2.759536|2.745762|2.733300|2.727944,38420480,106314300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,81920,0.457148,0.456214|0.456736|0.457568|0.458065|0.457501|0.457148|0.456822,253460480,115869600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,81920,1.566313,1.532309|1.567383|1.566313|1.565945|1.570184|1.566480|1.564373,83722240,130762000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,81920,1.987404,1.989163|1.987723|1.987404|1.986623|1.991682|1.985985|1.987349,63651840,126539200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,81920,2.197614,2.219641|2.197614|2.186333|2.192893|2.210143|2.178244|2.205006,52183040,114727200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,81920,7.503760,7.501660|7.496240|7.501514|7.508838|7.513477|7.540088|7.503760,14336000,107654300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,81920,9.543922,9.598737|9.539562|9.495443|9.486549|9.543922|9.559907|9.647914,12042240,115041300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,8192,4.436278,4.469522|4.442145|4.436278|4.444930|4.421197|4.397524|4.367925,23625728,104559100.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,8192,4.079395,4.131065|4.101021|4.084998|4.077176|4.076580|4.079395|4.074225,25862144,105755700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,8192,77.678571,77.933175|77.678571|77.533831,344064,26739000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,8192,109.494629,108.848877|110.356445|109.494629,245760,26927100.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,4096,18.335173,18.376783|18.335173|18.319039,1413120,25921800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,4096,23.680799,23.748148|23.677712|23.680799,1069056,25339000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,4096,23.070204,23.044434|23.131782|23.070204,1105920,25527000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,81920,5.824463,5.858573|5.831857|5.818987|5.824463|5.825091|5.819162|5.817208,20070400,116968400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,81920,1.434586,1.435763|1.442092|1.434586|1.434551|1.434318|1.434395|1.436023,80855040,116104700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,81920,1.362952,1.363841|1.362952|1.366905|1.362836|1.362745|1.365983|1.360968,84295680,114958000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,81920,1.363310,1.362012|1.365331|1.362511|1.363310|1.365227|1.361763|1.364351,81428480,111027800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,81920,2.412404,2.403829|2.403829|2.416992|2.412404|2.413992|2.412948|2.405285,47595520,114700300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,81920,1.733809,1.736608|1.734987|1.733809|1.735766|1.733325|1.731936|1.733272,66519040,115360200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,81920,1.676126,1.675894|1.676268|1.676056|1.676812|1.676005|1.676126|1.677882,69386240,116321500.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f128,bl::nextafter,81920,4.229083,4.266840|4.250176|4.242000|4.229083|4.210972|4.216252|4.199900,24657920,104321400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f128,bl::nexttoward,81920,4.199166,4.225384|4.227958|4.201634|4.197335|4.179396|4.182447|4.199166,26378240,110838800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,81920,0.855078,0.854064|0.856386|0.854351|0.869276|0.855149|0.854574|0.855078,129024000,110571300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,81920,0.933284,0.933284|0.928431|0.924173|0.926948|0.936238|0.935327|0.934380,117555200,109473800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,81920,2.130316,2.219950|2.177109|2.153974|2.130316|2.106207|2.097473|2.079134,48168960,102972600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,81920,2.134671,2.214973|2.179323|2.157938|2.134671|2.118935|2.109846|2.099359,47595520,102092700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,81920,2.081597,2.133898|2.107585|2.092285|2.081597|2.072198|2.058404|2.053738,51609600,107640700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,81920,2.224121,2.235696|2.208090|2.133010|2.224121|2.338676|2.301452|2.213047,47595520,106437800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,81920,3.820936,3.919384|3.817817|3.822609|3.820936|3.821434|3.818631|3.817726,30965760,118725100.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,2048,22.460679,22.491423|22.460679|22.396867,1161216,26068900.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,8192,10.391093,10.586761|10.503228|10.484137|10.391093|10.313309|10.261358|10.250713,9863168,102563700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,2048,84.344217,84.344217|84.252930|84.577743,282624,23851100.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,2048,84.142578,84.022461|84.142578|84.261719,307200,25848500.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,fltx,fltx,fltx bl::f128,bl::sincos,2048,94.104004,94.036310|94.204989|94.104004,270336,25442700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,2048,96.101518,96.101518|95.942827|96.112615,270336,25966400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,2048,108.881711,108.989383|108.881711|108.756510,239616,26088400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,2048,116.049533,115.787760|116.049533|117.732747,221184,25773100.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,2048,156.886574,156.886574|156.989656|156.839554,165888,26028700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,2048,162.935697,161.613582|162.935697|163.820237,159744,26004700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,2048,92.029918,92.029918|92.110929|91.856800,270336,24870700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,2048,90.386963,90.386963|90.183512|90.392049,294912,26636700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,2048,93.958333,94.350043|93.958333|93.806424,276480,25999700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,2048,122.792969,122.792969|122.984096|122.349330,215040,26387300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,2048,126.889936,127.169979|126.846852|126.889936,208896,26523300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,2048,127.244658,127.013442|127.244658|127.536190,208896,26585100.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,2048,123.897879,123.738839|124.379185|123.897879,215040,26666100.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,2048,191.819070,191.497248|191.819070|191.954457,135168,25919400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,8192,23.844401,23.844401|23.866374|23.835178,1105920,26374700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,fltx,fltx,fltx bl::f128,bl::product_sum,8192,5.056453,5.060696|5.054560|5.056648|5.066342|5.054560|5.052862|5.056453,21446656,108465300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,2048,106.168620,106.815905|106.168620|106.164864,239616,25491100.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,2048,105.259146,105.243664|105.400867|105.259146,251904,26525800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,2048,111.316560,111.316560|111.257453|111.811266,233472,26023200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,2048,119.052734,119.234096|118.853237|119.052734,215040,25599800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,2048,132.612610,132.612610|132.855225|132.518005,196608,26082400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,2048,129.354581,129.569129|129.162228|129.354581,202752,26228400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,256,554.694121,555.501854|553.972458|554.694121,45312,25135600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,256,549.549788,549.549788|553.118379|549.516684,45312,24954600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,256,528.509004,528.369968|529.469015|528.509004,45312,23960200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,256,464.805238,464.227553|464.838248|464.805238,54528,25335000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,4099,186.144995,186.130764|186.220216|186.144995,147564,27471300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,4099,154.330324,154.230997|154.330324|154.471474,172158,26571600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,4099,202.515248,202.305440|202.573798|202.515248,122970,24897100.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,mt19937_64,fltx,fltx,fltx bl::f128,bl::mt19937_64,64,1.367528,1.367528|1.366325|1.365450|1.366283|1.368749|1.376196|1.379504,83179264,113956000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,uniform_real,fltx,fltx,fltx bl::f128,bl::uniform_real,64,7.230124,7.231476|7.230124|7.228291|7.230429|7.229818|7.228597|7.232130,16045120,116008200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,normal,fltx,fltx,fltx bl::f128,bl::normal,64,41.813786,41.813786|41.986491|41.764853,625344,26173800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f128,same workload,64,14.169038,14.184700|14.135592|14.169038,1838784,26042900.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f128,same workload,64,179.935710,179.396566|179.935710|180.108643,147456,26514600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f128,same workload,64,12.479378,12.505226|12.464546|12.479378,2123904,26512800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f128,same workload,64,54.424413,54.287633|54.692429|54.424413,486912,26521200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f128,same workload,64,86.424366,86.614789|86.245265|86.424366,291456,25190000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,fltx,fltx,fltx bl::f128,same workload,8,22.994348,22.969426|23.082899|22.994348,1131552,26043300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f128,same workload,8,793.132660,793.132660|792.709084|794.105984,33288,26407900.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,fltx,fltx,fltx bl::f128,same workload,8,411.277529,411.277529|411.338186|410.829601,64296,26435200.000000, diff --git a/validation/metrics/data/windows/x86_64/detail/ClangCL_f256_accuracy.csv b/validation/metrics/data/windows/x86_64/detail/ClangCL_f256_accuracy.csv new file mode 100644 index 0000000..a3f823c --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/ClangCL_f256_accuracy.csv @@ -0,0 +1,357 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,moderate,4097,10322096095657499311,219.944958,215.547580,215.029639,212.000000,3.029639,yes,Both,yes,-6.32659778225233051069632927545029475138801079375645295548611539482289480950893866e-02,-0.063265977822523305106963292754502947513880107937564529554861153949406008699572901,-0.063265977822523305106963292754502947513880107937564529554861153948228948095089387 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,moderate,4097,10322096095657499311,215.940112,214.179279,214.005374,,,,Both,yes,3.27924571850188479709697729061957092921603976290473696084676388411920809973612135e+04,32792.457185018847970969772906195709292160397629047369608467638839951179746222626,32792.457185018847970969772906195709292160397629047369608467638841192080997361213 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,moderate,4097,10322096095657499311,238.934823,237.169709,237.016125,,,,No,no,-5.50310983261151208909435524852066623206545235447780617289527732284019451304374918e+11,-550310983261.15120890943552485206662320654523544778061728952773228401944884035039,-550310983261.15120890943552485206662320654523544778061728952773228401945130437492 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,wide_exponent,4098,10322096095657499308,219.514079,212.275332,212.017147,212.000000,0.017147,yes,Both,yes,2.47163553801407265315232159817868248210487207087397698019878061850401032407603178e-277,2.4716355380140726531523215981786824821048720708495655738821672043746801610949361e-277,2.4716355380140726531523215981786824821048720708739769801987806185040103240760318e-277 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,wide_exponent,4098,10322096095657499308,215.965809,214.158596,214.010809,,,,Both,yes,4.67754409985637411064587241203832249167095915858300940438608874596758932966859234e-10,4.6775440998563741106458724120383224916709591585830094043860887461439270142288485e-10,4.6775440998563741106458724120383224916709591585830094043860887459675893296685923e-10 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,wide_exponent,4098,10322096095657499308,238.948816,237.180769,237.050336,,,,No,no,-9.82792416239779920528610383546388843899472112754392449895974148140668994861206983e-209,-9.8279241623977992052861038354638884389947211275439244989597414814066899056386218e-209,-9.8279241623977992052861038354638884389947211275439244989597414814066899486120698e-209 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,moderate,4099,10322096095657499356,220.421856,217.506231,217.050134,,,,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,moderate,4099,10322096095657499356,217.101379,214.109787,213.625754,,,,Both,yes,"[-1.0120359112545216,-2.8089639260556788e-17,1.5592882130242451e-33,-8.6557883806306642e-50]",-1.0120359112545216643274079497272660582288297275418200429251556668,-1.0120359112545216643274079497272660582288297275418200429251556667501762953126709 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,wide_exponent,4096,10322096095657499357,220.211606,217.209596,216.955609,,,,Both,yes,"[-1.0005623436112949e+24,-27771183.786254175,1.5416103830298108e-09,-8.5576567112045135e-26]",-1.00056234361129493015787178625417346573290920651736114849688038987e+24,-1000562343611294930157871.7862541734657329092065173611484968803898748988958608631 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,wide_exponent,4096,10322096095657499357,216.729106,213.966069,213.645520,,,,Both,yes,"[-1.0029053037863911e+73,-2.7836213994558466e+56,1.5452202847575905e+40,-8.5776956912785892e+23]",-1.002905303786391175276514736134567164601647246691591077312663009e+73,-10029053037863911752765147361345671646016472466915910773126630089512976384 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,tlfloat,tloct,TLFloat Octuple,TLFloat operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,tlfloat,tloct,TLFloat Octuple,TLFloat operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,general,3770,10322096095657499292,225.979394,215.583815,215.297307,190.000000,25.297307,yes,Both,no,"representative lhs [-4.4462634936433036e+21,-123408.6026048271,6.8505536024347558e-12,-3.8028211704259384e-28] ; representative rhs [-1.5864490641473432e+22,-440328.06960285309,2.4443118063091801e-11,-1.3568656233637788e-27]",-20310754135116736403992.672207680164858397009037806754206012036634323297640103087,-20310754135116736403992.672207680164858397009037806754206012036634009406784094328 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator+,general,3770,10322096095657499292,223.282430,214.179406,214.011982,,,,Both,yes,"representative lhs [1839126521648.5967,5.1046015238326211e-05,-2.8336230716478179e-21,1.5729767886262335e-37] ; representative rhs [378235839901.0448,1.0498153454914361e-05,-5.8276458408470292e-22,3.2349932959347012e-38]",2217362361549.6415410363561932405683908522995717267139530293433997786912098314276,2217362361549.6415410363561932405683908522995717267139530293433998622151070218087 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,general,3770,10322096095657499292,251.753596,237.252454,237.007687,,,,No,no,"representative lhs [62135357.136479288,1.7246026034056585e-09,-9.5734675931472475e-26,5.3143420737074274e-42] ; representative rhs [-565957625994804.25,-0.015708479683540617,8.719957913261643e-19,-4.8405490245327049e-35]",-565957563859447.12922918961932314491369166283033247612036449157122254744835860639,-565957563859447.12922918961932314491369166283033247612036449157122254744580965934 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,subnormal,326,10322096095657499292,243.500079,219.782158,216.532998,190.000000,26.532998,yes,Both,no,"broad lhs [-4.0912052790212279e-223,-1.1355375748093388e-239,6.3034998044016954e-256,-3.4991453092834664e-272] ; broad rhs [9.6732779190304605e-272,2.6848739673264345e-288,-1.4904044483712489e-304,8.2755995678408796e-321]",-4.0912052790212280311833034891221488165122802908340538768476180849661443443505261e-223,-4.0912052790212280311833034891221488165122802908340538768476180849392956046772617e-223 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator+,subnormal,326,10322096095657499292,245.391464,215.478126,214.860355,,,,Both,yes,"broad lhs [-6.9688197085765511e-265,-1.9342360237308151e-281,1.0737166843026808e-297,-5.9603249241910803e-314] ; broad rhs [7.5706271798833126e-227,2.1012711514898676e-243,-1.1664398066823332e-259,6.475041651090214e-276]",7.5706271798833128589493143999584390922823152154190751436541880413193723254995517e-227,7.5706271798833128589493143999584390922823152154190751436541880411609851505089632e-227 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,subnormal,326,10322096095657499292,268.533311,239.229805,237.927733,,,,No,no,"broad lhs [1.0442940275936825e-262,2.8984981847826123e-279,-1.6089897107899388e-295,8.931687116517412e-312] ; broad rhs [2.3634881419299421e-239,6.5599973839978789e-256,-3.6415300685976198e-272,2.0214552635109516e-288]",2.363488141929942143733794549283321928828920127322018608246875184884809475467298e-239,2.3634881419299421437337945492833219288289201273220186082468751848848094698416956e-239 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,general,3791,10322096095657499292,226.123353,215.602949,215.220788,190.000000,25.220788,yes,Both,no,"representative lhs [155.03656083289641,4.3031289873845084e-15,-2.388716439863108e-31,1.3260039954183278e-47] ; representative rhs [2246405305209.4082,6.2350272312089677e-05,-3.4611353956265177e-21,1.9213161037848301e-37]",-2246405305054.3717046423758949106196822642348296102031142477192627199056314953875,-2246405305054.3717046423758949106196822642348296102031142477192626832977015519632 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator-,general,3791,10322096095657499292,223.541382,214.220914,214.046715,,,,Both,yes,"extreme lhs [-4.252941070652636e+270,-1.1804282747531303e+254,6.552693247747378e+237,-3.6374754584774671e+221] ; extreme rhs [4.4779550465712955e+270,1.2428821989849669e+254,-6.8993821710492778e+237,3.8299264709936042e+221]",-8.7308961172239317176190432327170580782021961210607087161308584689659299006598005e+270,-8.7308961172239317176190432327170580782021961210607087161308584686448766840125609e+270 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,general,3791,10322096095657499292,252.005853,237.248925,237.000122,,,,No,no,"representative lhs [1.3878961076205298e-17,3.852185536169866e-34,-2.1383925386918945e-50,1.1870463160711911e-66] ; representative rhs [2.5596121212896439e-24,7.1043507779135037e-41,-3.9437069043266069e-57,2.1891971037782992e-73]",1.3878958516593177248260844131745516632854659836193439237091032443574096862512889e-17,1.3878958516593177248260844131745516632854659836193439237091032443574096799676493e-17 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,subnormal,305,10322096095657499292,243.910586,244.000000,216.728701,190.000000,26.728701,yes,Both,no,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239320146546075137762e-238,8.2656349351104667692680102118096923996066568310632957805469239319672919306477601e-238 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator-,subnormal,305,10322096095657499292,245.904029,246.000000,216.728701,,,,Both,yes,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239322479705121395809e-238,8.2656349351104667692680102118096923996066568310632957805469239322006078352735648e-238 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,subnormal,305,10322096095657499292,268.897431,269.000000,237.716330,,,,No,no,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239319672919078689777e-238,8.2656349351104667692680102118096923996066568310632957805469239319672919306477601e-238 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,general,4000,10322096095657499292,220.010524,216.259138,215.221541,190.000000,25.221541,yes,Both,yes,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60038241930403290903625769183688852217377918301809189,-156159778640594921198000750.60038241930403290903625769183688852217632267056740194 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator*,general,4000,10322096095657499292,215.959021,214.146637,214.012662,,,,Both,yes,"structured lhs [-1.1022409972597686e+20,-3059.333334608973,1.6982711540430701e-13,-9.427298686376762e-30] ; balanced-product rhs [-9.0724261072311291e-21,-2.5181040883645947e-37,1.3978285686525564e-53,-7.7595073069844723e-70]",1.000000000000000088520617930547062213152525880726620878119303628883372473544684,1.0000000000000000885206179305470622131525258807266208781193036288457221016484325 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,general,4000,10322096095657499292,238.976836,237.170485,237.006898,,,,No,no,"representative lhs [-1.0168921687957512e-16,-2.8224427483951354e-33,1.5667704624772934e-49,-8.6973232087244803e-66] ; representative rhs [-4.1345258950916926e+22,-1147561.4611599329,6.370245781761224e-11,-3.5361967697162955e-27]",4204367.0044019860517179602758477836413196189733707121724545268060512669316657157,4204367.0044019860517179602758477836413196189733707121724545268060512669127198166 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,subnormal,100,10322096095657499292,221.469015,215.608028,215.608028,190.000000,25.608028,yes,Both,yes,"extreme lhs [-5.3809439414843993e+270,-1.4935119645133053e+254,8.2906568527791063e+237,-4.6022390636108503e+221] ; extreme rhs [-4.596668242019171e-261,-1.2758317297132313e-277,7.0822888093748442e-294,-3.931460051606543e-310]",24734414127.906804259564005392277744744307358869933187588284984254854603209456978,24734414127.906804259564005392277744744307358869933187588284984255162792737796103 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator*,subnormal,100,10322096095657499292,217.348488,214.292349,214.292349,,,,Both,yes,"extreme lhs [-5.9542134868631228e-272,-1.652626226662269e-288,9.173918439699219e-305,-5.0938168086232519e-321] ; extreme rhs [4.2949102582549815e+270,1.1920770643533644e+254,-6.6173570198633482e+237,3.6733710628085992e+221]",-0.25572812584568589864154296747923216874038792137305578267444519266559147574620585,-0.25572812584568589864154296747923216874038792137305578267444519265766000955097554 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,subnormal,100,10322096095657499292,240.223553,237.076391,237.076391,,,,No,no,"extreme lhs [-8.6746891312209087e-272,-2.4077099012367622e-288,1.3365474844855075e-304,-7.4208660005355231e-321] ; extreme rhs [-2.6248964316441233e+255,-7.2855511391692975e+238,4.0442933108948961e+222,-2.2450337760465101e+206]",2.2770160546163824124244516741669496270247267859218074430231396140145617261766692e-16,2.2770160546163824124244516741669496270247267859218074430231396140145617163984162e-16 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,general,4045,10322096095657499292,219.218459,215.287455,214.762066,190.000000,24.762066,yes,Both,yes,"representative lhs [2268851457486.2539,6.2973278188889589e-05,-3.49571916907152e-21,1.940513954563361e-37] ; representative rhs [0.00093095878597111432,2.5839296979055357e-20,-1.4343691223137255e-36,7.9623481270203769e-53]",2437112675315200.8552398842775006307979109182413214802574225974607596074455830965,2437112675315200.8552398842775006307979109182413214802574225974607050251573596225 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,general,4045,10322096095657499292,215.966511,214.166285,214.002285,,,,Both,yes,"structured lhs [1.421739367690595e-13,3.9461194525652748e-30,-2.1905363370795932e-46,1.2159919388519087e-62] ; near-equal divisor [1.421739367690595e-13,3.9461194525652748e-30,-2.1905363370795932e-46,1.2158435023359357e-62]",1.000000000000000000000000000000000000000000000000000010440487148873603784702549,1.0000000000000000000000000000000000000000000000000000104404871488356816123738149 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,general,4045,10322096095657499292,238.999926,237.154132,237.025300,,,,No,no,"representative lhs [-4.6265730361291875e+23,-12841319.774551351,7.1283644401406169e-10,-3.9570371646816632e-26] ; representative rhs [1547.4435613354531,4.2950186777564266e-14,-2.3842143136201403e-30,1.3235048133109718e-46]",-298981698055367349746.41814433326396950592089524800971303493694163568117583736658,-298981698055367349746.41814433326396950592089524800971303493694163568117716757507 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,subnormal,55,10322096095657499292,219.372138,215.374456,215.374456,190.000000,25.374456,yes,Both,yes,"extreme lhs [-6.5972954615428272e-272,-1.8311173304149739e-288,1.0164743105084273e-304,-5.6422296755070355e-321] ; extreme rhs [6.3421732060336743e-272,1.760306679874833e-288,-9.7716650319925213e-305,5.4248407913368871e-321]",-1.0402263147380523166730438190618890627910384611501752613620202130066222580107113,-1.040226314738052316673043819061889062791038461150175261362020212991383268138225 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,subnormal,55,10322096095657499292,218.186470,214.206957,214.206957,,,,Both,yes,"extreme lhs [-6.5972954615428272e-272,-1.8311173304149739e-288,1.0164743105084273e-304,-5.6422296755070355e-321] ; extreme rhs [6.3421732060336743e-272,1.760306679874833e-288,-9.7716650319925213e-305,5.4248407913368871e-321]",-1.0402263147380523166730438190618890627910384611501752613620202130256133935022309,-1.040226314738052316673043819061889062791038461150175261362020212991383268138225 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,subnormal,55,10322096095657499292,241.440467,237.221787,237.221787,,,,No,no,"extreme lhs [8.1717524039455344e-272,2.2681169175990763e-288,-1.2590578122301667e-304,6.9910288886536386e-321] ; extreme rhs [8.1073110278598673e-272,2.2502308427318672e-288,-1.2491290461612942e-304,6.931741011152689e-321]",1.0079485511119804779080183242564760679498572504876789996787264200987624042534109,1.0079485511119804779080183242564760679498572504876789996787264200987624081669073 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,moderate,4099,10322096095657499356,219.883649,215.654212,215.160161,190.000000,25.160161,yes,Both,no,"[1.2843679126351581,3.5648370717432602e-17,-1.9788820980433443e-33,1.0985002341331286e-49] ; [-2.3308777059725987,-6.4694852418906121e-17,3.5912857365098039e-33,-1.9935640563405487e-49] ; [5.2042205184851724,1.4444613612122271e-16,-8.0183713069960479e-33,4.451090222510361e-49]",2.2105159846573199203800006655584861882250236763069688164874765011598446438714347,2.2105159846573199203800006655584861882250236763069688164874765011222755061934085 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,moderate,4099,10322096095657499356,215.978389,214.164686,214.038759,,,,Both,yes,"[4.9845060765167126,1.3834783531332142e-16,-7.6798476085949372e-33,4.2631718203372733e-49] ; [-1.8344589332917707,-5.0916463636745698e-17,2.8264315131002303e-33,-1.5689846716849977e-49] ; [1.1247730073775273,3.1218722256685296e-17,-1.7329872124374921e-33,9.6200115231453559e-50]",-8.0190986927356709087174259178039082808363580425011987458457247106202380902722945,-8.0190986927356709087174259178039082808363580425011987458457247103237283321300853 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,moderate,4099,10322096095657499356,238.995329,237.157442,237.018361,,,,No,no,"[-0.84550812208603965,-2.3467564616187476e-17,1.302711528438498e-33,-7.2315016665852497e-50] ; [4.7189100901806977,1.3097606583136461e-16,-7.2706321980400619e-33,4.0360116349225438e-49] ; [4.997053192184298,1.3869608773099112e-16,-7.6991795012188515e-33,4.2739031764875987e-49]",1.0071763835427521666104437874229887686470986916744027421719680838786588428377016,1.0071763835427521666104437874229887686470986916744027421719680838786588383350389 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,Both,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,cancellation,4098,10322096095657499352,inf,inf,inf,,,,Both,yes,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,wide_exponent,4096,10322096095657499357,225.262959,215.958051,215.096656,190.000000,25.096656,yes,Both,no,"[5.0695695241027842e+79,1.4070882026492271e+63,-7.8109086012980007e+46,4.3359252862018586e+30] ; [-1.285263546577847e-53,-3.5673229553052827e-70,1.9802620406268915e-86,-1.0992662561475861e-102] ; [-9312.4534885580761,-2.5847250696870095e-13,1.4348106423461901e-29,-7.9647990555497543e-46]",-651573290617131278652235925.796582770520137295580825262259286558273807300279549,-651573290617131278652235925.79658277052013729558082526225928655828537955033923283 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,wide_exponent,4096,10322096095657499357,222.795239,214.207199,214.017731,,,,Both,yes,"[-7.3362225804227161e+81,-2.0362108056400696e+65,1.1303240597060724e+49,-6.2745589818673089e+32] ; [4.697530874614766e+74,1.3038267339712156e+58,-7.2376923008833117e+41,4.0177263187964394e+25] ; [1.3845075017784626e-80,3.84278026560176e-97,-2.1331715647231242e-113,1.1841480933156424e-129]",-3.4462132074581718803444481231787333071891997137766508509269936657892888506715951e+156,-3.4462132074581718803444481231787333071891997137766508509269936656599927318479792e+156 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,wide_exponent,4096,10322096095657499357,245.186928,237.226957,237.054841,,,,No,no,"[-7.7238642392071697e+37,-2.1438029793616669e+21,119004.97139736659,-6.606102964510729e-12] ; [7.7217688161659949e+38,2.1432213826350063e+22,-1189726.8629351733,6.6043107812284359e-11] ; [8.411674119728479e-53,2.3347085708415258e-69,-1.2960236055689777e-85,7.1943762368019562e-102]",-59641894022609612945325167753430528720789835656430133782624366680451826843648,-59641894022609612945325167753430528720789835656430133782624366680451826583671.804 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246,3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fabs,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0]",8,8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,moderate,4099,10322096095657499356,220.145544,216.285104,215.251190,190.000000,25.251190,yes,Both,yes,"[-0.36144099270550889,-1.0032002803625731e-17,5.5688802478447044e-34,-3.0913495362687196e-50]",0.13063959120794373790137808981865083109327726640612337325102002398854548322121324,0.13063959120794373790137808981865083109327726640612337325102002399063002164712949 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,wide_exponent,4096,10322096095657499357,220.095837,216.278909,215.290405,190.000000,25.290405,yes,Both,yes,"[6.7502995556670522e-41,1.8735844974546312e-57,-1.0400483238274423e-73,5.7734279791801363e-90]",4.5566544091238805246854811871109707929263286794390254922251627617554550230494986e-81,4.5566544091238805246854811871109707929263286794390254922251627618262131586719535e-81 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,near_one,4099,10322096095657499359,217.971795,215.406773,214.634335,190.000000,24.634335,yes,Both,yes,"[0.98524730223011503,2.7346105997142351e-17,1.5180138255933757e-33,8.426669504365412e-50]",1.0149735987467228735600712240168282012518927505403262882885405865459789646852313,1.0149735987467228735600712240168282012518927505403262882885405865211429570599582 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,wide_exponent,4096,10322096095657499357,217.877061,215.148048,214.625136,190.000000,24.625136,yes,Both,yes,"[2.2537520677334854e+105,6.2554185934856772e+88,3.4724548755780555e+72,1.9275996774193202e+56]",4.4370452913468106284563119957364553561271971862592280260566035243063949187169959e-106,4.4370452913468106284563119957364553561271971862592280260566035241971276114030617e-106 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643637975124707203e+166,-3.1692452985045241935931724109976666181468122346931195036563377643637975124707203e+166 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820587966479345926073,-7.0558510431143679224555721217306640518626870807672704477968820587966479345926073 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246,3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,moderate,4099,10322096095657499356,241.301771,214.093805,214.003121,,,,No,yes,"[1.3512114356810514,3.7503651175747926e-17,-2.0818708521412835e-33,1.1556704771716239e-49] ; [-2.6574506527362001,-7.3759072536822014e-17,4.0944510302688427e-33,-2.2728769035023315e-49]",4.0086620884172515790939164253351213814054256785823302622262501699878791447368772,4.0086620884172515790939164253351213814054256785823302622262501698359500608047204 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,Both,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,tlfloat,tloct,TLFloat Octuple,tlfloat::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::floor,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,tlfloat,tloct,TLFloat Octuple,tlfloat::floor,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ceil,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,tlfloat,tloct,TLFloat Octuple,tlfloat::ceil,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::trunc,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,tlfloat,tloct,TLFloat Octuple,tlfloat::trunc,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::round,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,tlfloat,tloct,TLFloat Octuple,tlfloat::round,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,tlfloat,tloct,TLFloat Octuple,tlfloat::rint,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,moderate,4099,10322096095657499356,220.044956,215.606687,215.330917,190.000000,25.330917,yes,Both,yes,"[4.0249001329210348,1.1171341998464465e-16,-6.2013405513286293e-33,3.4424355318133533e-49]",4.0249999999999999999999999999999999999999999999999999999999999999392283664271373,4.025 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,wide_exponent,4096,10322096095657499357,229.647449,215.594292,215.067820,190.000000,25.067820,yes,Both,yes,"[3.0148718470081313e-08,8.3679503521064993e-25,-4.6451455749144106e-41,2.5785737850028193e-57]",3.0148720000000000000000000000000000000000000000000000000000000000546265902778824e-08,3.014872e-08 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,boundary,4112,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lround,boundary,4112,10322096095657499382,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,boundary,4116,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::llround,boundary,4116,10322096095657499382,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.9441489568856320775444278782693359481373129192327295522031179412033520654073927 ; 1,-0.9441489568856320775444278782693359481373129192327295522031179412033520654073927 ; 1 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,tlfloat,tloct,TLFloat Octuple,tlfloat::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0]",0 ; -8,-0 ; -8 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 ; 0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14,1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,tlfloat,tloct,TLFloat Octuple,tlfloat::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14,1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14,1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815,0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738111930089468594567 ; -815,0.72479240042364947229615036515952308640740981938027711987583738111930089468594567 ; -815 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815,0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,near_one,4099,10322096095657499359,217.932663,211.994703,210.121730,190.000000,20.121730,yes,Both,yes,"[0.68844842180625743,1.9108282228903967e-17,1.0607227445782445e-33,5.88819406887178e-50]",0.82972792034874748204635533162847142244462757631213868214367401578005505462467425,0.82972792034874748204635533162847142244462757631213868214367401531661654544094597 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,near_one,4099,10322096095657499359,215.930506,214.147252,214.039856,,,,Both,yes,"[1.0547078163563617,2.927402254927385e-17,1.6250346928799925e-33,9.020754659250188e-50]",1.0269896865871447065036301993509151661723964081071594655630640292574526428023742,1.0269896865871447065036301993509151661723964081071594655630640292195081210834103 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,near_one,4099,10322096095657499359,238.936641,237.129126,237.015136,,,,No,no,"[1.004250926374979,2.7873562524066115e-17,1.5472935446273548e-33,8.5892045954958072e-50]",1.0021232091788808899186300306859360530174763231010496743360102827344110032442819,1.0021232091788808899186300306859360530174763231010496743360102827344110077343784 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,wide_exponent,4096,10322096095657499357,217.922910,211.307570,210.087010,190.000000,20.087010,yes,Both,yes,"[3.9723050169707548e-164,1.1025361226687388e-180,6.120304944338899e-197,3.3974517334661164e-213]",1.9930642280094123730625261552128791429300322769194722961440719680011680513374133e-82,1.9930642280094123730625261552128791429300322769194722961440719668608407694664803e-82 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,wide_exponent,4096,10322096095657499357,215.957082,214.207986,214.030797,,,,Both,yes,"[1.2961858591599819e-147,3.5976384625823808e-164,1.9970905277180044e-180,1.1086079430666665e-196]",3.6002581284679880325511139217386037773904401119124396309706748839432497852866192e-74,3.6002581284679880325511139217386037773904401119124396309706748840771075796334657e-74 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,wide_exponent,4096,10322096095657499357,238.979636,237.193860,237.059682,,,,No,no,"[1.3021434303237256e+30,36141740442744.586,0.0020062696194780619,1.1137033625752479e-19]",1141114994347075.2829460391518194856039517836022377655235840679242233012131762761,1141114994347075.2829460391518194856039517836022377655235840679242233012082188731 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,extreme_finite,4096,10322096095657499354,217.427345,211.612729,209.568118,190.000000,19.568118,yes,Both,yes,"[4.8277532298172217e+270,1.3399706982378861e+254,7.4383316075337441e+237,4.1291035077405081e+221]",2.1972148802102223696810058497941079031647215249309110296216736160980628789995527e+135,2.1972148802102223696810058497941079031647215249309110296216736142967757213404226e+135 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,extreme_finite,4096,10322096095657499354,216.198711,214.402185,214.043797,,,,Both,yes,"[1.1667387299631971e+307,3.2383505043176361e+290,1.7976456458499635e+274,9.9789379306989474e+257]",3.4157557435554392146975726809832843561134137037327812181683553223146977070959883e+153,3.4157557435554392146975726809832843561134137037327812181683553224405565128983162e+153 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,extreme_finite,4096,10322096095657499354,238.983582,237.375285,237.014769,,,,No,no,"[1.1341420973881531e+307,3.1478766742924855e+290,1.747422581239991e+274,9.7001439172128056e+257]",3.3677026255121652856496237964988544939728879131737426810293064315009323411409691e+153,3.3677026255121652856496237964988544939728879131737426810293064315009323562340825e+153 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,subnormal,4100,10322096095657499350,218.287365,211.525055,210.033468,190.000000,20.033468,yes,Both,yes,"[3.9080211162696703e-308,0,0,0]",1.976871547741448539026969223351905164877787940969937902883633378772329452173061e-154,1.976871547741448539026969223351905164877787940969937902883633377598501465266526e-154 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,subnormal,4100,10322096095657499350,216.756880,214.195374,214.037615,,,,Both,yes,"[3.3572221104094627e-316,0,0,0]",1.8322723897961958515939232356286101602275881371639992177545942680678684257340433e-158,1.8322723897961958515939232356286101602275881371639992177545942681356712397974308e-158 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,subnormal,4100,10322096095657499350,239.723907,237.212513,237.016370,,,,No,no,"[2.1697712842811401e-314,0,0,0]",1.4730143530465479195773385224994263560361476001941627900776246892038592559065829e-157,1.4730143530465479195773385224994263560361476001941627900776246892038592625009045e-157 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,moderate,4099,10322096095657499356,219.365127,215.645937,215.009723,190.000000,25.009723,yes,Both,yes,"[1.493485632755414,4.1452553410798288e-17,-2.3010789613086162e-33,1.2773554221626827e-49]",1.1430547069429598916413447070301032665501071556717031589096757220734804391392631,1.143054706942959891641344707030103266550107155671703158909675722095042538408066 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,moderate,4099,10322096095657499356,216.130545,214.270505,214.058038,,,,Both,yes,"[1.08235892126355,3.0041494882381005e-17,-1.66763796562891e-33,9.2572503309013566e-50]",1.026732006042320468680651010947841052348239066716007904979973209646575880838089,1.0267320060423204686806510109478410523482390667160079049799732096840357908630305 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,moderate,4099,10322096095657499356,239.151308,237.292046,237.089188,,,,No,no,"[-1.1692570952148476,-3.2453403720346318e-17,1.8015258018892098e-33,-1.0000477123568495e-49]",-1.0535051702378269574281216560731222434668908310525842708385576971662323213714434,-1.0535051702378269574281216560731222434668908310525842708385576971662323258555871 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,wide_exponent,4096,10322096095657499357,219.208097,215.522484,215.016400,190.000000,25.016400,yes,Both,yes,"[1.1715709721762959e-232,3.2517626707315058e-249,-1.8050908938313547e-265,1.002026735936387e-281]",4.8931613224357677778860487132523010245820505813115565125769210140394169679151093e-78,4.8931613224357677778860487132523010245820505813115565125769210141312932532907629e-78 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,wide_exponent,4096,10322096095657499357,215.921141,214.197213,214.065070,,,,Both,yes,"[-0.12830329361016818,-3.5611317675312609e-18,1.9768252410186431e-34,-1.097358449119536e-50]",-0.50436615390268535404089632551005127105110727672530970119929369006913042688642626,-0.50436615390268535404089632551005127105110727672530970119929369005081829876718497 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,wide_exponent,4096,10322096095657499357,238.945658,237.214089,237.018110,,,,No,no,"[-4.3275027175810356e+124,-1.2011232890466005e+108,6.6675736545651648e+91,-3.701246894841173e+75]",-351085141467799062026079474481743690346530.23735342928603100241725240364618103901,-351085141467799062026079474481743690346530.23735342928603100241725240364775086642 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,moderate,4099,10322096095657499356,219.112713,215.484839,215.004532,190.000000,25.004532,yes,Both,yes,"[-1.9786093179304824,-5.4917440537607455e-17,3.0485303469167366e-33,-1.6922742912077385e-49] ; [-3.6930721609963868,-1.0250334361850929e-16,5.6900786093166561e-33,-3.1586281419952212e-49]",4.1897108276500243736137575509880054584975437763794929781439711577595180004814865,4.1897108276500243736137575509880054584975437763794929781439711578388357929538313 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,moderate,4099,10322096095657499356,215.332826,213.212997,212.858237,,,,Both,no,"[-4.1181898278466704,-1.1430272916631208e-16,6.3450760848966547e-33,-3.5222247812253553e-49] ; [-0.29183739289082489,-8.1001148258492941e-18,4.4964669908827382e-34,-2.4960405913725049e-50]",4.1285174726612340729075027344867939797791962652739738709468541901339059552816537,4.1285174726612340729075027344867939797791962652739738709468541904799090853606315 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,moderate,4099,10322096095657499356,238.968375,237.145904,237.032531,,,,No,yes,"[4.0719252522259577,1.130186292393464e-16,-6.273794219654816e-33,3.4826553972104968e-49] ; [6.9165665963393774,1.9197328716523069e-16,-1.0656658176190808e-32,5.9156336363834818e-49]",8.0261739790084984863179315713520228190931521667884108836594047322786481436734721,8.0261739790084984863179315713520228190931521667884108836594047322786481081425252 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,wide_exponent,4096,10322096095657499357,240.757017,216.577812,213.870154,190.000000,23.870154,yes,Both,yes,"[1.7122842369183985e-262,4.7525434613238062e-279,-2.6381915881467134e-295,1.4644905222663036e-311] ; [-3.0144374372983699e-265,-8.3667446229517548e-282,4.6444762607798811e-298,-2.578202241195858e-314]",1.712286890340601098411983682624579480459337744664421226746119949951155747074881e-262,1.7122868903406010984119836826245794804593377446644212267461199567085975614133203e-262 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,wide_exponent,4096,10322096095657499357,242.048348,213.564620,212.901798,,,,Both,no,"[2.0746421074685233e-152,5.7582885889210324e-169,-3.1964922869282166e-185,1.7744096674922142e-201] ; [-7.279699168678378e-177,-2.0205224073528366e-193,1.1216152492070844e-209,-6.22621537220194e-226]",2.0746421074685233100584491712753701754641505878649616115468392385981506866084677e-152,2.0746421074685233100584491712753701754641505878649616115468392387668510326020281e-152 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,wide_exponent,4096,10322096095657499357,264.779602,237.619098,237.123492,,,,No,yes,"[-5.8206807436614042e+100,-1.6155634451512924e+84,8.9681786727485303e+67,-4.9783392257188476e+51] ; [-1.1764315868807219e+127,-3.2652535866282193e+110,1.8125798565572611e+94,-1.0061839453608174e+78]",1.1764315868807219672309501172354356665435885041612716474525928710031014683926205e+127,1.1764315868807219672309501172354356665435885041612716474525928710031014635029139e+127 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,moderate,4099,10322096095657499356,219.189484,215.451091,214.398633,180.000000,34.398633,yes,Both,yes,"[3.0788955469009238,8.5456518164631729e-17,-4.7437897035336035e-33,2.6333322764213759e-49]",0.062656038467969832209321794216397982020542964949257118477705660287113605590702679,0.062656038467969832209321794216397982020542964949257118477705660288918880291683339 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,moderate,4099,10322096095657499356,216.111863,214.253516,214.033060,,,,Both,yes,"[-3.3942824750153715,-9.4210263896093202e-17,5.229720206672739e-33,-2.9030778928977535e-49]",0.25000926250273050053822356824913638945347894252925707129808557785874427075500306,0.25000926250273050053822356824913638945347894252925707129808557784946347821100132 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,moderate,4099,10322096095657499356,239.122689,237.223688,237.023215,,,,No,no,"[-0.2542586325750964,-7.057094702364497e-18,3.9174745127626403e-34,-2.17463520122565e-50]",-0.25152794533412479121432085191262991371979722577009702759735904083121861113384005,-0.25152794533412479121432085191262991371979722577009702759735904083121861001314106 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,argument_reduction,4104,10322096095657499353,217.652696,208.567012,202.924770,180.000000,22.924770,yes,Both,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275296757802517104071329784271370594664228509e-21,-6.8137244848422015805151924052161601275296757802517104071329778687414703031432792e-21 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,argument_reduction,4104,10322096095657499353,216.255236,214.163948,214.023450,,,,Both,yes,"near 2^38 * pi/2 [-431777206544.70459,-1.6831417444764681e-05,4.1159802853722918e-22,-1.526636448658668e-38]",2.3089903510325325006386196751055921516200574630826998306833157055830958404977762e-41,2.308990351032532500638619675105592151620057463082699830683315705496809151689719e-41 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,argument_reduction,4104,10322096095657499353,239.104262,237.214941,237.045994,,,,No,no,"near 2^17 * pi/2 [205887.41614566068,8.0276309101467462e-12,-1.9626523424970111e-28,7.2905799818501507e-45]",1.7856472546522194647219768390344687583313151766319381994892472778246360738909141e-15,1.7856472546522194647219768390344687583313151766319381994892472778246360817223464e-15 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,quadrant_boundaries,4315,10322096095657499369,229.646501,212.548934,212.379963,180.000000,32.379963,yes,Both,yes,"below random k*pi/2, exponent 29, quadrant 0, offset bits 64 [1210367998.9931121,9.2232933347751439e-08,-3.3682212462958211e-24,-1.2421712039970458e-40]",-6.5614180700763253419843351526898064698409162314387092951719910697284566769595525e-11,-6.5614180700763253419843351526898064698409162314387092951719910704945087391437157e-11 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,quadrant_boundaries,4315,10322096095657499369,222.867917,214.285019,214.046460,,,,Both,yes,"nearest random k*pi/2, exponent 110, quadrant 0, offset bits 64 [2.3958472744262744e+33,-1.1362463713298696e+17,-1.0799874208711815,-1.4055471566517733e-17]",1.2444660859606272253391060495552887818726965386080203390531029581974118261588645e-32,1.2444660859606272253391060495552887818726965386080203390531029582431815281246263e-32 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,quadrant_boundaries,4315,10322096095657499369,245.109723,237.306997,237.025592,,,,No,no,"above random k*pi/2, exponent 45, quadrant 0, offset bits 64 [71008329207360.312,0.00018419250007644126,9.9975864273387123e-21,-5.0484480854277783e-37]",3.849369239549790973603895914004220428153380218149354682948043798834805017807928e-06,3.8493692395497909736038959140042204281533802181493546829480437988348050006850545e-06 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,moderate,4099,10322096095657499356,219.189230,215.566675,214.659688,180.000000,34.659688,yes,Both,-,"[-4.7784826804074854,-1.3262953736402309e-16,7.3624183063460464e-33,-4.086963160313565e-49]",0.066045590163581850028962366060015702301220111028377965182485758811610101682177111,0.066045590163581850028962366060015702301220111028377965182485758813198059701212943 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,moderate,4099,10322096095657499356,216.120883,214.240603,214.013567,,,,Both,-,"[4.1844906090946523,1.1614294551361571e-16,-6.4472286128500595e-33,3.5789308255041227e-49]",-0.50371892599878982246573291031148002251894889016964463243380922417755824218756977,-0.50371892599878982246573291031148002251894889016964463243380922419651155550858383 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,moderate,4099,10322096095657499356,239.067815,237.245286,237.010092,,,,No,-,"[5.2397671900876901,1.4543275445277032e-16,-8.0731396264061184e-33,4.4814927471249036e-49]",0.50326950712812592968794481966604337941872165780963347935211430198430026256742876,0.50326950712812592968794481966604337941872165780963347935211430198430026030458995 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,argument_reduction,4104,10322096095657499353,232.574321,215.615638,208.674366,180.000000,28.674366,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1226611923604276e-17,1.4973849048591698e-33,-5.5622711043168264e-50]",5.7280337633839673822029261537694370705065754439038807480055172644370212115109926e-21,5.7280337633839673822029261537694370705065754439038807480055172731619522921872359e-21 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,argument_reduction,4104,10322096095657499353,220.717219,214.493171,214.041954,,,,Both,-,"near 2^141 * pi/2 [-4.3787410803301036e+42,-1.7069085141238271e+26,4174300709.8400016,-1.5505348827814887e-07]",-0.50223149274818510667692305468001365951868474886708229103242086146123920208083042,-0.50223149274818510667692305468001365951868474886708229103242086147976835272541265 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,argument_reduction,4104,10322096095657499353,242.372537,237.522147,237.089415,,,,No,-,"near 2^101 * pi/2 [-3.9824418129956972e+30,-155367227019273.69,0.0037963217468348336,-1.4102032608038723e-19]",-0.12796355163596045244521468824295994843174882941415195039635122541573286692737788,-0.12796355163596045244521468824295994843174882941415195039635122541573286747195671 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,quadrant_boundaries,4315,10322096095657499369,228.481158,215.246584,214.418649,180.000000,34.418649,yes,Both,-,"below random k*pi/2, exponent 17, quadrant 1, offset bits 118 [331709.77271825873,-2.2171970577571149e-11,3.7150708281135636e-28,2.3902355434839523e-45]",9.9820278769371660928200388523257556042420348105086346022094664206029498329582703e-31,9.9820278769371660928200388523257556042420348105086346022094664208865938945946123e-31 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,quadrant_boundaries,4315,10322096095657499369,221.152248,214.294337,214.025139,,,,Both,-,"below random k*pi/2, exponent 73, quadrant 3, offset bits 204 [-1.9192238427797983e+22,1133685.8239386391,1.0538603815339718e-10,6.0690196840656462e-27]",7.4725966267385822752552347677857979100547939987353655458257277978202160866649243e-40,7.4725966267385822752552347677857979100547939987353655458257277980991393478431325e-40 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,quadrant_boundaries,4315,10322096095657499369,243.433538,237.253610,237.015566,,,,No,-,"above random k*pi/2, exponent 100, quadrant 1, offset bits 118 [-2.554242725948489e+30,264652064691155.38,0.0027003722178381893,4.2925035746281268e-20]",7.686394611076617817566687569806359335255530534267980437190604478331327415039497e-06,7.6863946110766178175666875698063593352555305342679804371906044783313273806102253e-06 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,moderate,4099,10322096095657499356,216.913680,214.380555,213.767876,170.000000,43.767876,yes,Both,yes,"[-1.8439090508145544,-5.11787570882259e-17,2.8409917245523164e-33,-1.5770672126837562e-49]",3.5699982842328020406977403126653024345054964874710955004250341281438081184333917,3.5699982842328020406977403126653024345054964874710955004250341283030748914299905 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,moderate,4099,10322096095657499356,215.950557,214.173890,214.033824,,,,Both,yes,"[-5.8190346919196703,-1.6151065740154431e-16,8.9656425284769973e-33,-4.9769313828368341e-49]",0.50062891605128433684619177292383033963900736585257698545687677483023119814763453,0.50062891605128433684619177292383033963900736585257698545687677484880560527251444 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,moderate,4099,10322096095657499356,238.986350,237.180286,237.008972,,,,No,no,"[7.7918605780474639,2.162675754604344e-16,-1.2005262087801638e-32,6.6642591932684281e-49]",16.076889102680307739918047039830552345360218572643739213205451093129248731177196,16.076889102680307739918047039830552345360218572643739213205451093129248658834938 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,argument_reduction,4104,10322096095657499353,216.861788,208.567009,202.924770,170.000000,32.924770,yes,Both,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275298339501045587830768442951450110146372361e-21,-6.8137244848422015805151924052161601275298339501045587830768437367494218513576644e-21 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,argument_reduction,4104,10322096095657499353,216.069442,214.143677,214.023450,,,,Both,yes,"near 2^38 * pi/2 [-431777206544.70459,-1.6831417444764681e-05,4.1159802853722918e-22,-1.526636448658668e-38]",2.3089903510325325006386196751055921516200574630826998306833157055830958404977762e-41,2.308990351032532500638619675105592151620057463082699830683315705496809151689719e-41 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,argument_reduction,4104,10322096095657499353,238.931540,237.203609,237.030406,,,,No,no,"near 2^102 * pi/2 [-7.9648836259913944e+30,-310484850001344.44,0.0075916732929860228,-2.8204065216077446e-19]",-9.7020068364479704729019010913725962546149990050125552215463152474642265648020523e-07,-9.7020068364479704729019010913725962546149990050125552215463152474642265217890728e-07 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,quadrant_boundaries,4315,10322096095657499369,217.360401,212.539526,212.267358,170.000000,42.267358,yes,Both,yes,"above random k*pi/2, exponent 45, quadrant 0, offset bits 64 [74082575456598.641,0.0077401429536521011,-4.4453663865375208e-20,-1.4406648841189425e-36]",4.0160244626898690108548055606217396545568030741292099390402822024483364340948252e-06,4.0160244626898690108548055606217396545568030741292099390402822019413987321784571e-06 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,quadrant_boundaries,4315,10322096095657499369,215.920916,214.200339,214.006668,,,,Both,yes,"above random k*pi/2, exponent 144, quadrant 2, offset bits 172 [-4.4696686901385167e+43,2.0188248772911221e+27,-52555629829.22261,1.2831941213003397e-06]",7.4664829630051754541202666277260882282154324742969316489227519401151418469649252e-09,7.4664829630051754541202666277260882282154324742969316489227519398328556104206349e-09 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,quadrant_boundaries,4315,10322096095657499369,238.947188,237.196450,237.053707,,,,No,no,"below random k*pi/2, exponent 102, quadrant 3, offset bits 204 [9.9343530058996466e+30,87688409581458.625,0.0032087146332879252,1.4984467354529784e-19]",2588058620050218384135716160595.2714079053792228534200347072058457423853626569361,2588058620050218384135716160595.2714079053792228534200347072058457423853739470342 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,near_one,4099,10322096095657499359,218.093670,215.379730,214.678988,180.000000,34.678988,yes,Both,yes,"[1.2911786355365591,3.5837406251919532e-17,-1.9893756781863299e-33,1.1043253412758746e-49]",0.91180735486029865720200031963596732813600677958830230748545472972914611914911937,0.91180735486029865720200031963596732813600677958830230748545472975077769821487466 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,near_one,4099,10322096095657499359,216.034093,214.196468,214.022743,,,,Both,yes,"[0.54921480960087321,1.5243773177100273e-17,-8.4619939816900486e-34,4.6973502763558986e-50]",0.50224017774039295847895566589446898154246751335846360124013365955899684908805543,0.50224017774039295847895566589446898154246751335846360124013365954021899193610862 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,near_one,4099,10322096095657499359,239.069181,237.249601,237.023004,,,,Inf,no,"[0.55638113561490443,1.5442678680668965e-17,-8.5724087165833602e-34,4.7586427668241172e-50]",0.50772915105953358733326116359313553998641358497921735346375362562181669630230885,0.50772915105953358733326116359313553998641358497921735346375362562181669403975783 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,moderate,4099,10322096095657499356,218.191260,215.364973,214.819019,180.000000,34.819019,yes,Both,yes,"[-1.6564773418506284,-4.5976482117311103e-17,2.5522074518952777e-33,-1.4167597383570195e-49]",-1.0276674796068157926881872460477795215568000040373694878361657581086397348641996,-1.0276674796068157926881872460477795215568000040373694878361657581307647820337298 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,moderate,4099,10322096095657499356,215.887438,214.230925,214.039595,,,,Both,yes,"[0.55778275215845952,1.5481581354627725e-17,-8.5940040387576104e-34,4.7706305787751426e-50]",0.50879880948542119345425761615829870587435545150631385296139718830959300455778602,0.50879880948542119345425761615829870587435545150631385296139718832839516313373038 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,moderate,4099,10322096095657499356,238.894314,237.221991,237.005716,,,,Inf,no,"[1.5597260113585101,4.3291093247924408e-17,-2.4031384242520164e-33,1.3340098049830031e-49]",1.0006760568417267039616046413236068242743619066341858284652430030107293262785856,1.0006760568417267039616046413236068242743619066341858284652430030107293307915712 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,near_one,4099,10322096095657499359,217.767500,215.258136,214.277602,180.000000,34.277602,yes,Both,yes,"[0.58860603672544787,1.6337099360148818e-17,-9.0689119326130649e-34,5.0342574179424254e-50] ; [0.85887750789320882,2.3838639614892877e-17,-1.3233103288097723e-33,7.3458479788444792e-50]",0.60080560244689944505254047976488516114993445003563706360562245792394141734857901,0.60080560244689944505254047976488516114993445003563706360562245794276700036835792 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,near_one,4099,10322096095657499359,215.994476,214.132014,214.011485,,,,Both,yes,"[0.88505385327289043,2.4565179148419448e-17,-1.3636413747308533e-33,7.5697302577884725e-50] ; [0.5621158127315895,1.5601847945012334e-17,-8.6607654076266884e-34,4.8076905832121144e-50]",1.0049524547607640479472056483133780888177778504413203924398100730281741617591277,1.0049524547607640479472056483133780888177778504413203924398100730660418713400554 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,near_one,4099,10322096095657499359,239.055181,237.179498,237.044590,,,,Inf,no,"[1.2012076032854226,3.3340208463056926e-17,-1.8507533540744151e-33,1.0273744932978252e-49] ; [0.76012008050901414,2.1097570371525879e-17,-1.1711504195058775e-33,6.5011908051741811e-50]",1.0066101070031341858676864823590644902717426393400127313649714321821731001027106,1.0066101070031341858676864823590644902717426393400127313649714321821731045217664 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,moderate,4099,10322096095657499356,218.042610,215.273196,214.779064,180.000000,34.779064,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50] ; [1.7502476823940025,4.8579131894765996e-17,-2.6966835372935758e-33,1.4969600766154699e-49]",0.072148061051439749393843263001597933397921930324099767924159658763635157216424841,0.072148061051439749393843263001597933397921930324099767924159658765232080678489465 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,moderate,4099,10322096095657499356,215.885980,214.176678,214.024743,,,,Both,yes,"[-6.1873351720195728,-1.7173304922622958e-16,9.5330992670022754e-33,-5.2919331511315645e-49] ; [-2.9810460413895985,-8.2740648815460241e-17,4.5930286693674072e-33,-2.5496430907475705e-49]",-2.0197766333272617088389945956184684603975351443001694011101920891561200649612965,-2.0197766333272617088389945956184684603975351443001694011101920892315312586125163 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,moderate,4099,10322096095657499356,238.917136,237.174621,237.005636,,,,Inf,no,"[0.76646160167214816,2.1273582941687357e-17,-1.1809210799067136e-33,6.5554288658881889e-50] ; [6.0904320632745925,1.6904344766406877e-16,-9.3837963879333393e-33,5.2090534041389854e-49]",0.12518871466835654554530119732890413946159769433425644201628387442095021006944253,0.12518871466835654554530119732890413946159769433425644201628387442095020950481812 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,extreme_finite,8,10322096095657499351,224.796125,218.394834,218.394834,180.000000,38.394834,yes,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961510720871532843,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,extreme_finite,8,10322096095657499351,215.343090,215.217830,215.217830,,,,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961795587903905637,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,extreme_finite,8,10322096095657499351,240.641147,237.801100,237.801100,,,,Inf,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961539081990612658,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,moderate,4099,10322096095657499356,217.555374,214.870821,214.404436,180.000000,34.404436,yes,Both,yes,"[-0.03874370615484779,-1.0753538658105852e-18,5.9694131072129129e-35,-3.313689937563487e-51]",-0.038753405574689053897038748698475312191059300104201567727902220547827930480850877,-0.038753405574689053897038748698475312191059300104201567727902220546715831868900725 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,moderate,4099,10322096095657499356,215.935045,214.166642,214.033964,,,,Both,yes,"[0.84375728252726911,2.3418969056423187e-17,-1.3000139329712549e-33,7.2165270035909608e-50]",1.0042455644826932465957119672506687191893308602737032036527706880936208304894104,1.004245564482693246595711967250668719189330860273703203652770688056364795135486 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,moderate,4099,10322096095657499356,238.937265,237.164907,237.026679,,,,No,no,"[0.47970695404606045,1.3314542636368455e-17,-7.3910558986247961e-34,4.1028602174724127e-50]",0.50032069928561683298565717027151869152759847529322634267318689099093861195294037,0.50032069928561683298565717027151869152759847529322634267318689099093861417680444 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,boundary,4105,10322096095657499355,218.279597,215.666103,215.450088,180.000000,35.450088,yes,Both,yes,"[-0.9999994386132145,-2.7755560034015539e-17,1.5407430905564922e-33,-8.5528422708397013e-50]",-1.5697367166420567598613352554733454843585688705175173404668956843884396097624371,-1.5697367166420567598613352554733454843585688705175173404668956844102612619924983 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,boundary,4105,10322096095657499355,216.099672,214.664889,214.650939,,,,Both,yes,"[-0.99999947688320301,-2.7755561096221099e-17,1.5407431495207457e-33,-8.5528425981570605e-50]",-1.5697734711427425137462071034426176291214099285341417990546489811401920566969057,-1.5697734711427425137462071034426176291214099285341417990546489811022198556486962 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,boundary,4105,10322096095657499355,239.101674,237.664178,237.650522,,,,No,no,"[-0.9999993776284537,-2.7755558341348399e-17,1.5407429965945906e-33,-8.5528417492463684e-50]",-1.5696806461857352124904427955206761227928221161521898973451622133707907230815616,-1.5696806461857352124904427955206761227928221161521898973451622133707907276092422 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,moderate,4099,10322096095657499356,217.952479,214.769937,210.665918,180.000000,30.665918,yes,Both,-,"[0.99887415790514178,2.7724327220233818e-17,-1.5390093211072774e-33,8.5432179170301514e-50]",0.04745636757503406782865420252660601887412863134878995249846597602032373476016398,0.047456367575034067828654202526606018874128631348789952498465976002146233476892292 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,moderate,4099,10322096095657499356,215.926972,214.168270,214.013336,,,,Both,-,"[0.53747900055361064,1.4918039041678395e-17,-8.2811752131641796e-34,4.5969756963050055e-50]",1.0033516021070022662907094076805447931131779362238745906466256800975035278625521,1.0033516021070022662907094076805447931131779362238745906466256800597446123647365 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,moderate,4099,10322096095657499356,238.960587,237.176311,237.031977,,,,No,-,"[-0.43157298548501555,-1.1978556632292069e-17,6.6494346874735147e-34,-3.691177745387139e-50]",2.0170321133877162215411750564956245308378105477034926055582254990416861890253464,2.0170321133877162215411750564956245308378105477034926055582254990416861800927487 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,boundary,4105,10322096095657499355,214.108948,205.510139,192.466318,180.000000,12.466318,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863435425504615922399221269664356222070824068253018899150618e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,boundary,4105,10322096095657499355,215.911052,214.202890,214.012410,,,,Both,-,"[0.99999951622208461,2.7755562188094402e-17,-1.5407432101318897e-33,8.5528429346164987e-50]",0.00098364419824795302810500421007198327569768241949960764096598619232602573162558328,0.00098364419824795302810500421007198327569768241949960764096598619236306677869978476 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,boundary,4105,10322096095657499355,238.914683,237.209342,237.050442,,,,No,-,"[0.9999994975875568,2.7755561670882356e-17,-1.5407431814208536e-33,8.5528427752382321e-50]",0.0010024095822028012190197504178633007438852888266898375115002944522469310012326441,0.0010024095822028012190197504178633007438852888266898375115002944522469309968498442 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,moderate,4099,10322096095657499356,217.426949,215.046491,214.489012,180.000000,34.489012,yes,Both,-,"[7.2668058682815229,2.0169437976118373e-16,-1.1196287217417818e-32,6.2151879295467938e-49]",1431.9692420599845796068868376110150600143493093499559422817931161935390354934173,1431.969242059984579606886837611015060014349309349955942281793116154785851743886 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,moderate,4099,10322096095657499356,215.924822,214.186790,214.006279,,,,Both,-,"[3.4699495991506186,9.6310448481646233e-17,-5.3463038708149298e-33,2.9677948270106668e-49]",32.135122766454513464552390234864268716902997252088065619897983850263564532528178,32.135122766454513464552390234864268716902997252088065619897983849048300268542509 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,moderate,4099,10322096095657499356,238.962861,237.190217,237.015623,,,,No,-,"[-7.6245813926123454,-2.1162464538016916e-16,1.1747527693959878e-32,-6.5211878641279631e-49]",0.00048829960656918900534550546413689941129718423073002179902260395749341738412942277,0.00048829960656918900534550546413689941129718423073002179902260395749341738194229393 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,boundary,4099,10322096095657499291,216.095013,210.609597,209.170810,180.000000,29.170810,yes,Both,-,"[-602.51463003262006,-1.6723140373393066e-14,9.2832077432897595e-31,-5.1532154894894153e-47]",2.1439808940678330986168374863027594170304621312385699060007346626494830473999428e-262,2.1439808940678330986168374863027594170304621312385699060007348382095786861640128e-262 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,boundary,4099,10322096095657499291,215.925953,214.166296,214.022891,,,,Both,-,"[-213.48363419693817,-5.9253611516523799e-15,3.289236189891953e-31,-1.8258928757241849e-47]",1.9285712648723698827364885753401467489945482612892346646561462430777724772501659e-93,1.9285712648723698827364885753401467489945482612892346646561462431498708742994428e-93 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,boundary,4099,10322096095657499291,238.944656,237.149815,237.004890,,,,No,-,"[-1.3839315575301043,-3.8411816991881907e-17,2.1322841821037556e-33,-1.1836554970078048e-49]",0.25059139930250338491880855140531431523927782048990968130858850759821856519740631,0.2505913993025033849188085514053143152392778204899096813085885075982185663282049 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,moderate,4099,10322096095657499356,218.020692,214.999773,214.215827,180.000000,34.215827,yes,Both,-,"[3.1052035729833225,8.6186712571859683e-17,-4.7843236357014531e-33,2.6558331288070464e-49]",8.6051692793502790320283451340709447945359060261526288089250361316953685910209515,8.6051692793502790320283451340709447945359060261526288089250361314139388957083351 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,moderate,4099,10322096095657499356,215.951076,214.175518,214.035382,,,,Both,-,"[7.0184440832206558,1.9480095545589426e-16,-1.0813625298305666e-32,6.0027678929240134e-49]",129.6469164692491677500327633275603595045395867946892632855310581663474322548835,129.6469164692491677500327633275603595045395867946892632855310581615424462315035 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,moderate,4099,10322096095657499356,238.939517,237.174822,237.050228,,,,No,-,"[1.0265636690801578,2.8492865541411778e-17,-1.5816717680812041e-33,8.7800420716166679e-50]",2.0371661763637205453633549726338999372030557043909456864394369311660295529176797,2.0371661763637205453633549726338999372030557043909456864394369311660295618260332 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,boundary,4099,10322096095657499291,218.040030,214.973213,214.202868,180.000000,34.202868,yes,Both,-,"[104.10886087905146,2.8896013603855037e-15,-1.6040509811440805e-31,8.9042716596936548e-48]",21872072611204943785318953704535.848957757329524240581979950526538377674145297079,21872072611204943785318953704535.848957757329524240581979950526537655899871393765 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,boundary,4099,10322096095657499291,215.997580,214.178351,214.040135,,,,Both,-,"[101.01867420310816,2.8038314504349505e-15,-1.5564391167205152e-31,8.6399727190517872e-48]",2568331375911613125415057676345.8059016688827604346296714291621286371854710902734,2568331375911613125415057676345.8059016688827604346296714291621287320601044697817 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,boundary,4099,10322096095657499291,238.956490,237.176073,237.026426,,,,No,-,"[-183.99722039427581,-5.1069487637188608e-15,2.8349260515308288e-31,-1.5737000877596046e-47]",4.0861804585463969756716858253333793248054096194328922530438741816953664456998308e-56,4.0861804585463969756716858253333793248054096194328922530438741816953664638655892e-56 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,moderate,4099,10322096095657499356,218.319190,214.883150,213.793932,180.000000,33.793932,yes,Both,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.69414327255271665612631015596788634386741426622153124768599904822325391377881959,0.69414327255271665612631015596788634386741426622153124768599904819284068360567441 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,moderate,4099,10322096095657499356,216.131673,214.242848,214.018319,,,,Both,yes,"[3.4965342970959128,9.70483220756855e-17,-5.3872640834831953e-33,2.9905323126095925e-49]",32.000882287565481685038228589636231258591535037593573530748202339964185962910206,32.000882287565481685038228589636231258591535037593573530748202341164316010951542 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,moderate,4099,10322096095657499356,239.116206,237.239921,237.036552,,,,No,no,"[6.9511685393403209,1.9293368401064106e-16,-1.0709970910718406e-32,5.9452281490726156e-49]",1043.369402155250824878423084038542130172916017601225886298348705509618197426875,1043.3694021552508248784230840385421301729160176012258862983487055096181928208548 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,cancellation,4098,10322096095657499336,235.991871,207.540568,207.000000,180.000000,27.000000,yes,Both,yes,"[3.6665372155917779e-270,1.0176685093487508e-286,-5.6491950525747228e-303,3.1359334672835601e-319]",3.666537215591778022742232576640266061184048842008439989892382592756081591049904e-270,3.6665372155917780227422325766402660611840488420084399108418792581566345227988971e-270 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,cancellation,4098,10322096095657499336,238.867803,214.409929,214.038287,,,,Both,yes,"[-6.7120113773945228e-52,-1.8629573931823525e-68,1.0341490959033542e-84,-5.740680685835965e-101]",-6.712011377394522981785014978692529479776471498143080594571376035118230062021051e-52,-6.7120113773945229817850149786925294797764714981430805945713760353664908412007537e-52 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,cancellation,4098,10322096095657499336,261.143186,237.455118,237.087032,,,,No,no,"[-3.8952556529180725e-40,-1.0811506281677353e-56,6.0015916023988555e-73,-3.3315525906900986e-89]",-3.895255652918072567680506372460482734240287686521220025487368643809197114855518e-40,-3.8952556529180725676805063724604827342402876865212200254873686438091971314600946e-40 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,near_one,4099,10322096095657499359,216.923081,214.333783,213.252927,180.000000,33.252927,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.50793426433422243038604118757996243390013385433953431736902408052282282785799521,-0.50793426433422243038604118757996243390013385433953431736902408049044259492262108 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,near_one,4099,10322096095657499359,215.950049,214.169987,214.022652,,,,Both,-,"[1.2874823082863105,3.5734812561425147e-17,1.9836805843179232e-33,1.1011639291058213e-49]",0.25268861232449768303287208416041654713719635429237966672910076356984301208098884,0.25268861232449768303287208416041654713719635429237966672910076357929117870962672 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,near_one,4099,10322096095657499359,238.922548,237.172288,237.020732,,,,No,-,"[1.2848264058251369,3.5661096459836307e-17,1.9795885186544464e-33,1.0988923763468863e-49]",0.25062361647825247046091044906137751740083075171705262981159748405128009249095062,0.25062361647825247046091044906137751740083075171705262981159748405128009360954388 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,wide_exponent,4096,10322096095657499357,218.159247,215.423349,214.787811,180.000000,34.787811,yes,Both,-,"[2.1976393587320462e-253,6.0996745397169545e-270,3.3859995583568084e-286,1.87960733552917e-302]",-581.7666447619842216491153422494362059260947919882070310469834418271313947370462,-581.76664476198422164911534224943620592609479198820703104698344181433242395383818 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,wide_exponent,4096,10322096095657499357,215.922997,214.161037,214.024145,,,,Both,-,"[4.2620000526591127e+112,1.1829426473539441e+96,6.5666508195169289e+79,3.6452234672506739e+63]",259.33926896136503531476005673839606499505614715572250820030983367844490106121051,259.33926896136503531476005673839606499505614715572250820030983366875809051992411 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,wide_exponent,4096,10322096095657499357,238.891947,237.168312,237.029110,,,,No,-,"[4.0479342938723756e-223,1.1235274638067215e-239,6.2368302955846473e-256,3.4621362974188981e-272]",-512.07826903756965473896626715773821631241155436371017077009210067703398041970383,-512.07826903756965473896626715773821631241155436371017077009210067703398269199759 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,extreme_finite,4096,10322096095657499354,218.246513,215.340501,214.977417,180.000000,34.977417,yes,Both,-,"[6.7255270714277703e+270,1.8667087518597276e+254,1.0362315182919788e+238,5.7522404522501946e+221]",623.60388540574258032454540371734224443628132982427335034944077135074873546872386,623.60388540574258032454540371734224443628132982427335034944077133871895125605538 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,extreme_finite,4096,10322096095657499354,215.741355,214.353327,214.285392,,,,Both,-,"[1.0075597185049971e-271,2.7965399954227229e-288,1.5523915461017184e-304,8.6165048634713397e-321]",-623.99302891435394122737400533549424989714640717618230616015013795393555869980229,-623.99302891435394122737400533549424989714640717618230616015013793448871373169198 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,extreme_finite,4096,10322096095657499354,238.776105,237.339073,237.285267,,,,No,-,"[7.7437783365788433e+270,2.1493302517158317e+254,1.1931179664891499e+238,6.6231351874510007e+221]",623.74486483406474436961766281025043784462223397426216741261126488422867258269335,623.74486483406474436961766281025043784462223397426216741261126488422867490021597 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,near_one,4099,10322096095657499359,216.831239,214.285380,213.192358,180.000000,33.192358,yes,Both,-,"[0.7496369857674211,2.0806606042739792e-17,1.1549986546477316e-33,6.4115304990049557e-50]",-0.41573596010411493045014267590719729760119796965409081364143571035067957416967793,-0.41573596010411493045014267590719729760119796965409081364143571037831861478590789 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,near_one,4099,10322096095657499359,216.011174,214.194225,214.010454,,,,Both,-,"[0.84070967041985378,2.3334380828128714e-17,1.2953183430380163e-33,7.1904612433005627e-50]",-0.2503204268218643143737732495500269147452501235616383620107211692911966773483109,-0.25032042682186431437377324955002691474525012356163836201072116930063577090736059 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,near_one,4099,10322096095657499359,239.011917,237.187476,237.019864,,,,No,-,"[0.70583601885804559,1.959088499364896e-17,1.087512579636627e-33,6.036907527410412e-50]",-0.50259504206925858952155266234103500116929985813117258806089289885593823424307108,-0.50259504206925858952155266234103500116929985813117258806089289885593823648762265 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,wide_exponent,4096,10322096095657499357,217.896906,215.177253,214.398808,180.000000,34.398808,yes,Both,-,"[1.7649452349949291e+168,4.8987070927345696e+151,2.7193287026242405e+135,1.5095306685887436e+119]",558.90354335945887268941714779171120602057251916893271728873264701130834705779937,558.90354335945887268941714779171120602057251916893271728873264699520691310276205 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,wide_exponent,4096,10322096095657499357,215.991634,214.211323,214.021430,,,,Both,-,"[6.4253617293081178e+155,1.7833961333557962e+139,9.8998372463954056e+122,5.4955136254949441e+106]",517.58263238369809866937110146938845548682933182383309502125833012837118648537698,517.58263238369809866937110146938845548682933182383309502125833014774029382250725 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,wide_exponent,4096,10322096095657499357,238.962302,237.188437,237.038715,,,,No,-,"[3.5891513914548225e-156,9.9618962841464057e-173,5.5299633117935652e-189,3.0697462970427998e-205]",-516.3771400246925614573224211990488725433698671805238582152642425975984165061167,-516.37714002469256145732242119904887254336986718052385821526424259759841422995179 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,extreme_finite,4096,10322096095657499354,221.112240,215.319712,214.786513,180.000000,34.786513,yes,Both,-,"[6.8101574227838104e+300,1.8901983930241257e+284,1.0492708885224276e+268,5.8246234975324753e+251]",999.34611661399737932538483694865739304704641025692614772050877622807059417985481,999.34611661399737932538483694865739304704641025692614772050877625007617254075152 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,extreme_finite,4096,10322096095657499354,219.971377,214.877327,214.815152,,,,Both,-,"[1.1004277016223889e-271,3.0543004281912948e-288,1.695477329750225e-304,9.4119505532757467e-321]",-900.10444935156029673708481095997044639503503777325192083508132873842538505530364,-900.10444935156029673708481095997044639503503777325192083508132875785609939278478 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,extreme_finite,4096,10322096095657499354,242.986721,237.879178,237.813342,,,,No,-,"[5.3028389146690505e+270,1.4718334647359639e+254,8.1703170048184277e+237,4.5354370286179322e+221]",899.32735054371464126504766215010086793763896785913590289802765629264265015706112,899.32735054371464126504766215010086793763896785913590289802765629264264783983466 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,near_one,4099,10322096095657499359,216.850749,214.245682,213.257193,180.000000,33.257193,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.22059304816994049352958242449187881883781348866027603462218270842444120257078286,-0.2205930481699404935295824244918788188378134886602760346221827084104201683981848 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,near_one,4099,10322096095657499359,215.948509,214.160208,214.004904,,,,Both,-,"[1.1548157158417363,3.2052574923161943e-17,1.7792753339108649e-33,9.8769622142772787e-50]",0.062512685545452607071551872862036252686540209936771988439097880251720697483459773,0.06251268554545260707155187286203625268654020993677198843909788025408701452391967 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,near_one,4099,10322096095657499359,238.958266,237.152635,237.019945,,,,No,-,"[0.7495965567981705,2.0805483913426695e-17,1.1549363639577312e-33,6.4111847162136648e-50]",-0.12517241700686969827684919239182967493738565725808191459997705897873585882208558,-0.12517241700686969827684919239182967493738565725808191459997705897873585938106475 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,wide_exponent,4096,10322096095657499357,217.861615,215.189987,214.497524,180.000000,34.497524,yes,Both,-,"[7.1469640060920858e+234,1.9836809989326703e+218,1.1011641592632406e+202,6.1126890175302627e+185]",234.85412159489045596003203173344408775668279869668572611682025536536168793387694,234.85412159489045596003203173344408775668279869668572611682025535904325560762789 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,wide_exponent,4096,10322096095657499357,215.969447,214.155173,214.015352,,,,Both,-,"[10.021612533904657,2.7815562447532518e-16,1.5440738936074737e-32,8.571331942028158e-49]",1.0009376075822620669594461139776613372841714757547811188893586984207809467928981,1.000937607582262066959446113977661337284171475754781118889358698383165469979518 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,wide_exponent,4096,10322096095657499357,239.002817,237.144835,237.026072,,,,No,-,"[1.1120370415213245e-260,3.0865228193325391e-277,1.7133643500269686e-293,9.5110827548592716e-310]",-259.95388074633275189091615220567999501526078782561121881855869444663541118363614,-259.95388074633275189091615220567999501526078782561121881855869444663541233958603 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,extreme_finite,4096,10322096095657499354,217.633514,215.073798,214.220407,180.000000,34.220407,yes,Both,-,"[5.3758239790954964e+270,1.4920908894809616e+254,8.2827683016759667e+237,4.5978600380780314e+221]",270.73044504015011560346372915336203436416099326519770095672238014262874150583956,270.73044504015011560346372915336203436416099326519770095672238013380264152658546 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,extreme_finite,4096,10322096095657499354,215.774631,214.144149,214.083242,,,,Both,-,"[1.0704536782707779e-271,2.9711058010272682e-288,1.6492950344489211e-304,9.1550364174382985e-321]",-270.97043212118285841925561066273687400765354325005690405748633653277437492999232,-270.97043212118285841925561066273687400765354325005690405748633652305933528126596 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,extreme_finite,4096,10322096095657499354,238.568974,237.128968,237.082099,,,,No,-,"[7.3799185819446756e+270,2.0483388823835035e+254,1.137056494728563e+238,6.3119315037361179e+221]",270.86805157054835280159779316282272669037880739803758696775863651413772687711934,270.86805157054835280159779316282272669037880739803758696775863651413772803572193 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,moderate,4099,10322096095657499356,217.570462,214.787129,214.020088,180.000000,34.020088,yes,Both,yes,"[-0.25462100474624672,-7.0671525505618592e-18,3.9230577400860884e-34,-2.1777345149887542e-50]",-0.29386247149453246058352428487213904837677656724718288204078215844233971612393252,-0.29386247149453246058352428487213904837677656724718288204078215843133248548523474 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,moderate,4099,10322096095657499356,215.916477,214.139415,214.010728,,,,Both,yes,"[6.41522527712225,1.7805827027046056e-16,-9.8842195689597157e-33,5.4868440729548083e-49]",2.0035353563990952644690935484747843529003715927775366089476216527818344375259587,2.003535356399095264469093548474784352900371592777536608947621652706299381724742 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,moderate,4099,10322096095657499356,238.982401,237.123379,237.006206,,,,No,no,"[1.7276029251355596,4.7950613622381721e-17,-2.6617937644236434e-33,1.4775923620333994e-49]",1.0034231740848004098518884695801641614754221665384765735216332616039977910239888,1.0034231740848004098518884695801641614754221665384765735216332616039977865001517 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,cancellation,4098,10322096095657499336,236.076178,207.415037,207.000000,180.000000,27.000000,yes,Both,yes,"[-5.0621342944708729e-265,-1.4050245118665463e-281,7.7994528161848061e-298,-4.3295660482073704e-314]",-5.0621342944708730086760504274075663829189583933818324664504818055859676107573498e-265,-5.0621342944708730086760504274075663829189583933818324664512723106193136052280323e-265 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,cancellation,4098,10322096095657499336,238.872001,214.422148,214.038287,,,,Both,yes,"[-6.7120113773945228e-52,-1.8629573931823525e-68,1.0341490959033542e-84,-5.740680685835965e-101]",-6.7120113773945229817850149786925294797764714981430850996810490629669129817421558e-52,-6.7120113773945229817850149786925294797764714981430850996810490627186522025624531e-52 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,cancellation,4098,10322096095657499336,261.132145,237.419995,237.015621,,,,No,no,"[-9.7261871007756405e-35,-2.6995592152733285e-51,1.4985563985677344e-67,-8.3186590869462584e-84]",-9.7261871007756407664559632195888426285653472784067580211618203539513215255828672e-35,-9.7261871007756407664559632195888426285653472784067580211618203539513214820185222e-35 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,near_one,4099,10322096095657499359,218.148772,215.130203,214.362894,180.000000,34.362894,yes,Both,yes,"[1.423134563497126,3.9499918988359527e-17,2.1926859765852584e-33,1.2171852284888254e-49] ; [1.1927685344842596,3.310597725082075e-17,1.8377509098288919e-33,1.0201566868089328e-49]",1.5233053480043329261431287201279001410110702760486984367539772844096336550706452,1.5233053480043329261431287201279001410110702760486984367539772843646426383376926 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,near_one,4099,10322096095657499359,215.924402,214.174611,214.034283,,,,Both,yes,"[1.0020188856745866,2.7811610949629213e-17,1.5438545414097733e-33,8.5701142927262127e-50] ; [0.67487318784050987,1.8731493796067807e-17,1.0398067849008878e-33,5.772087168792116e-50]",1.0013620450437589245492610014243773686942214248275520503466520165881255161776408,1.001362045043758924549261001424377368694221424827552050346652016550984655411922 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,near_one,4099,10322096095657499359,238.916883,237.150631,237.018583,,,,No,no,"[1.0001982067740443,2.7761076958733429e-17,1.5410493413988385e-33,8.5545423045221195e-50] ; [0.76444938074723401,2.1217732591650551e-17,1.1778207626795018e-33,6.5382186480417261e-50]",1.0001515155089267348056115423971138300622949553626290284157870717867518582721827,1.0001515155089267348056115423971138300622949553626290284157870717867518627427509 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,moderate,4099,10322096095657499356,215.525556,212.047897,211.143117,180.000000,31.143117,yes,Both,yes,"[7.7504743381693961,2.1511887655005213e-16,1.1941496488868227e-32,6.6288621752109849e-49] ; [6.7867863554598733,1.8837116187608508e-16,1.0456700054511108e-32,5.8046345810586807e-49]",1085628.0458183651737754568233825992695775685017622680386092038233740053608370142,1085628.0458183651737754568233825992695775685017622680386092038236727288616449863 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,moderate,4099,10322096095657499356,215.935138,214.172189,214.028310,,,,Both,yes,"[2.5648686096017479,7.1189404637954309e-17,3.951805806920689e-33,2.1936928978453724e-49] ; [7.3758515152288862,2.0472100446058645e-16,1.1364298638826622e-32,6.3084530037708211e-49]",1040.4078088056214822957453194310414746378121362243328657421409210248312127986565,1040.4078088056214822957453194310414746378121362243328657421409210635803831145731 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,moderate,4099,10322096095657499356,238.932191,237.171612,237.009078,,,,No,no,"[0.7371316742375349,2.0459513922975039e-17,1.1357311714962925e-33,6.3045744818984312e-50] ; [2.2636267388646147,6.2828263116116299e-17,3.48766921543599e-33,1.9360453326266958e-49]",0.50138517166343568386581893387404724257046263632975310595489929845043169244947956,0.5013851716634356838658189338740472425704626363297531059548992984504316901935288 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,moderate,4099,10322096095657499356,217.158561,214.415804,213.656994,190.000000,23.656994,yes,Both,no,"[-5.6684636004037738,-1.5733147008544706e-16,8.7336510293493687e-33,-4.848150230912434e-49]",-188043.1576659602046428792992413117498177671151403368538232084353655121126605512,-188043.15766596020464287929924131174981776711514033685382320843537457138843934032 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",moderate,4099,10322096095657499356,215.987832,214.179832,214.020519,,,,Both,yes,"[-3.6234270472721093,-1.0057030339827603e-16,5.5827733213151837e-33,-3.0990617412935871e-49]",-8200.430509244412297875363007517859232142760219202884340409240903826050512248695,-8200.430509244412297875363007517859232142760219202884340409240904133122939385402 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,wide_exponent,4096,10322096095657499357,217.192977,214.383216,213.812882,190.000000,23.812882,yes,Both,no,"[3156983632.9860682,8.7623897942647695e-08,-4.8641034501666178e-24,2.7001198222668209e-40]",3125405070844307632059635814309662493597686949184087401837672866916,3125405070844307632059635814309662493597686949184087401837672867051.1497698219492 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",wide_exponent,4096,10322096095657499357,215.949957,214.206986,214.011863,,,,Both,yes,"[14787987098817744,0.41044909412418074,-2.2784501736660175e-17,1.2647939216325996e-33]",1.5465481333355751493406420880783518941005745731747866016820925042744984697072011e+113,1.5465481333355751493406420880783518941005745731747866016820925043327588542346558e+113 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,quotient_reduction,4,10322096095657499383,237.431134,217.724535,217.724535,190.000000,27.724535,yes,Both,yes,"scaled-reduction gap 58 lhs [5.4783870128486342e+104,1.2515701024950248e+86,2.5644796350277343e+70,3.0488942297143002e+54] ; scaled-reduction gap 58 rhs [1.0992042367473471e+87,7.6430960252403863e+68,8.308036160429468e+52,-8.4044243641695015e+36]",8.2176097775156019844573783110329841337664065872688377479267466170896765365317513e+86,8.217609777515601984457378311032984133766406587268837747926746617066064704117403e+86 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,quotient_reduction,4,10322096095657499383,inf,inf,inf,,,,Both,yes,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,6.4695626425683503e-14,-4.5490848564960626e-30] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,-1.0491094474424749e-30,9.613833942740628e-48]",134.96799785736252690998070323801097276000000000069696182420374612820625148544072,134.96799785736252690998070323801097276000000000069696182420374612820625148544072 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,quotient_reduction,4,10322096095657499383,inf,inf,inf,,,,No,no,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,6.4695626425683503e-14,-4.5490848564960626e-30] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,-1.0491094474424749e-30,9.613833942740628e-48]",134.96799785736252690998070323801097275999999999972664787995535221851974311276988,134.96799785736252690998070323801097275999999999972664787995535221851974311276988 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remainder,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,tlfloat,tloct,TLFloat Octuple,tlfloat::remainder,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,near_one,4099,10322096095657499359,217.088527,214.653889,213.844482,180.000000,33.844482,yes,Both,yes,"[0.76562636076402268,2.1250400349504614e-17,-1.1796341875261248e-33,6.5482851781324668e-50]",0.84264914336815803011264269143612462086913967383298160440244808238970820494154117,0.84264914336815803011264269143612462086913967383298160440244808235405953256955333 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,near_one,4099,10322096095657499359,215.975034,214.162104,214.012511,,,,Both,yes,"[1.4504430962981512,4.0257883035470264e-17,-2.2347614334322787e-33,1.2405417989704175e-49]",2.0152687650487900870785030962782558225880631209188005099886950034018742263533812,2.0152687650487900870785030962782558225880631209188005099886950033259906440226229 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,near_one,4099,10322096095657499359,238.935804,237.151916,237.012513,,,,No,no,"[0.88298360331457626,2.4507718169158206e-17,-1.3604516496211864e-33,7.5520237264935862e-50]",1.0022782039402745822682661730648698672338759932522803568394909240974045054810381,1.0022782039402745822682661730648698672338759932522803568394909240974045099800009 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,moderate,4099,10322096095657499356,216.956723,214.597984,213.993459,180.000000,33.993459,yes,Both,yes,"[0.054297296667996875,1.5070527233928231e-18,-8.3658231641737974e-35,4.6439647484041155e-51]",0.054323980450469496887448171808625498827811228200332436943033541994792104072246549,0.054323980450469496887448171808625498827811228200332436943033541996864828986916269 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,moderate,4099,10322096095657499356,215.967539,214.177379,214.011597,,,,Both,yes,"[-5.5514961198525494,-1.5408497033443795e-16,8.5534340906988609e-33,-4.7481097335538075e-49]",-128.8094102575669040651947452858902507112406883868292013207128384184002201202949,-128.80941025756690406519474528589025071124068838682920132071283842325352333323063 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,moderate,4099,10322096095657499356,238.939197,237.158124,237.030088,,,,No,no,"[-5.5510124539006611,-1.5407154590753761e-16,8.5526888853070031e-33,-4.7476960614617498e-49]",-128.74712271806391331797118607582008799679652337863704645234129240331062931682242,-128.74712271806391331797118607582008799679652337863704645234129240331062988773716 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,near_one,4099,10322096095657499359,217.861158,215.239353,214.487635,180.000000,34.487635,yes,Both,-,"[1.4303433203278892,3.9700002183670459e-17,-2.2037928250989968e-33,1.2233507679643134e-49]",2.2096804236627024779285628784238115118483853203461617013356271627432691873521909,2.2096804236627024779285628784238115118483853203461617013356271626834118164339315 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,near_one,4099,10322096095657499359,215.895184,214.199617,214.003441,,,,Both,-,"[1.3180360250850454,3.6582848558370944e-17,-2.0307560387939318e-33,1.1272960558328004e-49]",2.0018685354727893365634159209739845210019868831427185249101991568056016815303039,2.0018685354727893365634159209739845210019868831427185249101991568814560681262869 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,near_one,4099,10322096095657499359,238.918901,237.169391,237.024615,,,,No,-,"[1.3282510733457995,3.6866373102789604e-17,-2.0464948126569296e-33,1.1360328303938347e-49]",2.0196883083061335896151725290956785491903675387304527995513844467881401418108314,2.0196883083061335896151725290956785491903675387304527995513844467881401328207091 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,moderate,4099,10322096095657499356,217.160103,214.737937,214.159072,180.000000,34.159072,yes,Both,-,"[6.9851955939094275,1.9387812449671103e-16,-1.0762397889369559e-32,5.9743309684776362e-49]",540.25933261817616200059910469729467236382875532751465730859323173250980707379319,540.25933261817616200059910469729467236382875532751465730859323171413182761114806 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,moderate,4099,10322096095657499356,215.937394,214.168922,214.000831,,,,Both,-,"[-0.024915825742571229,-6.9155308542376918e-19,3.8388907909401814e-35,-2.1310124725616338e-51]",1.000310415244491850132172673423459542053002904846742529807535702649493788255194,1.0003104152444918501321726734234595420530029048467425298075357026874659704667725 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,moderate,4099,10322096095657499356,238.922878,237.131226,237.021921,,,,No,-,"[1.3188743183318685,3.6606115869971215e-17,-2.0320476340469193e-33,1.128013035226982e-49]",2.0033230139496671007944620881086192005631920629659234114985427470911686576898421,2.0033230139496671007944620881086192005631920629659234114985427470911686487559028 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,near_one,4099,10322096095657499359,218.404442,215.222392,214.209524,180.000000,34.209524,yes,Both,yes,"[0.51562981029195787,1.4311602189230828e-17,-7.9445351348799311e-34,4.4101029133436116e-50]",0.47432005334068853744838691469119725073611186863535411854720463894651210203082909,0.47432005334068853744838691469119725073611186863535411854720463896209252928278415 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,near_one,4099,10322096095657499359,216.043702,214.274158,214.038640,,,,Both,yes,"[0.55314229628883105,1.5352782830847263e-17,-8.5225064954382105e-34,4.7309414693764765e-50]",0.50287159194838804027667682401213462167675591678250746227332787661254617641690965,0.50287159194838804027667682401213462167675591678250746227332787663114160978543072 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,near_one,4099,10322096095657499359,239.022015,237.196358,237.059834,,,,Inf,no,"[0.5576392959998614,1.5477599646370227e-17,-8.5917937466652033e-34,4.769403620189074e-50]",0.50622378780329080187492227056864090769531648311133563532633056169725103618142473,0.50622378780329080187492227056864090769531648311133563532633056169725103398244205 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,moderate,4099,10322096095657499356,219.852666,215.378850,214.042672,180.000000,34.042672,yes,Both,yes,"[-0.049004188243731761,-1.3601394522814103e-18,7.5502906831193558e-35,-4.1912532795059553e-51]",-0.048964999496442407695752174462954719514280073534987354591187902322123112147473692,-0.048964999496442407695752174462954719514280073534987354591187902320317513639311405 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,moderate,4099,10322096095657499356,216.350781,214.574367,214.097308,,,,Both,yes,"[-0.55244142124230144,-1.5333329640496203e-17,8.5117078055231293e-34,-4.7249469922867211e-50]",-0.50234776953455832738474068141498014652395776826959763064097809403595245870991342,-0.50234776953455832738474068141498014652395776826959763064097809405378826341441138 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,moderate,4099,10322096095657499356,239.361623,237.532781,237.128013,,,,Inf,no,"[-0.57881872838935244,-1.6065446983552846e-17,8.918114571017569e-34,-4.9505480664944029e-50]",-0.52180632683237750628821439192870733596394500691724064619963052884427795607515043,-0.52180632683237750628821439192870733596394500691724064619963052884427795391310627 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,near_one,4099,10322096095657499359,216.635189,213.881562,212.956798,180.000000,32.956798,yes,Both,yes,"[1.1332197959754742,3.1453167736324843e-17,-1.7460015509132478e-33,9.6922556142756011e-50]",0.97250944030282146673684576741712972459065785505278761629557943342964766102358922,0.97250944030282146673684576741712972459065785505278761629557943335352570304596911 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,near_one,4099,10322096095657499359,215.876528,214.126921,214.013004,,,,Both,yes,"[1.1875368477178503,3.2960768773178392e-17,-1.8296902200664262e-33,1.015682105124608e-49]",1.0079699008676541316864431653897165142746758838264996787682714615557319327196561,1.0079699008676541316864431653897165142746758838264996787682714615177904855312488 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,near_one,4099,10322096095657499359,238.909508,237.158686,237.032021,,,,No,no,"[0.53019894096351738,1.4715976797239277e-17,-8.1690081350723071e-34,4.534710459953743e-50]",0.5080581849197998622111617267798195476409931094147435536188404419103933361747497,0.50805818491979986221116172677981954764099310941474355361884044191039333392483875 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,moderate,4099,10322096095657499356,217.749152,214.561309,213.166747,180.000000,33.166747,yes,Both,yes,"[-1.1129700329637249,-3.089112390785367e-17,1.7148018509523894e-33,-9.519062487985893e-50]",-0.95904342784556441854164089194266034008522852163619683195211288936138295400619663,-0.95904342784556441854164089194266034008522852163619683195211288929648167565369013 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,moderate,4099,10322096095657499356,215.877848,214.173161,214.033343,,,,Both,yes,"[-3.6635680838067728,-1.0168444097310361e-16,5.6446203807238641e-33,-3.1333937559740255e-49]",-2.0097113700181062349692108160003517092300304063443186921409136491157467461994281,-2.0097113700181062349692108160003517092300304063443186921409136490411573171997093 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,moderate,4099,10322096095657499356,238.871807,237.170538,237.026506,,,,No,no,"[3.7225679300655514,1.0332201566724962e-16,-5.7355240372230841e-33,3.1838554222080507e-49]",2.0251321587728640177526991897930401616261596463681306941092379777810078632497695,2.0251321587728640177526991897930401616261596463681306941092379777810078722523164 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,moderate,4099,10322096095657499275,218.344248,215.313498,214.386548,180.000000,34.386548,yes,Both,-,"[1.2091565801750435,3.3560836892183684e-17,-1.8630006921695854e-33,1.0341731316696386e-49]",0.63599796632531509013285885414670992566643851908950877932499299079883667837099078,0.63599796632531509013285885414670992566643851908950877932499299078035785994962717 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,moderate,4099,10322096095657499275,216.070027,214.284491,214.051325,,,,Both,-,"[3.9804489193453434,1.1047965096503807e-16,-6.1328526126968082e-33,3.4044170886242721e-49]",2.0583757948565598827690570382144203121626552510542194966987158277315739908333351,2.0583757948565598827690570382144203121626552510542194966987158278070232872093508 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,moderate,4099,10322096095657499275,239.001647,237.267792,237.031139,,,,No,-,"[3.8470512568523638,1.0677712205676603e-16,-5.9273209705316151e-33,3.290324107913864e-49]",2.0231171805463747601489123488705841544306082856720398407062424076130979843332333,2.0231171805463747601489123488705841544306082856720398407062424076130979753684794 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,boundary,4101,10322096095657499355,217.097508,214.442677,213.709421,180.000000,33.709421,yes,Both,-,"[1.0000006102559529,2.7755592553634159e-17,-1.5407448957579594e-33,8.552852291720866e-50]",0.0011047677501095367049219422532381969737795314787741324983406649673871900506886361,0.0011047677501095367049219422532381969737795314787741324983406649674385145712399472 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,boundary,4101,10322096095657499355,215.787044,214.197277,214.011139,,,,Both,-,"[1.0000004798826352,2.7755588935047681e-17,-1.5407446948860582e-33,8.5528511766578175e-50]",0.00097967606567821465227959033002276095886277869454081491023270410424438341810175862,0.00097967606567821465227959033002276095886277869454081491023270410428130755329103443 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,boundary,4101,10322096095657499355,238.744483,237.183996,237.009868,,,,No,-,"[1.0000004776948863,2.7755588874325452e-17,-1.5407446915152973e-33,8.5528511579463359e-50]",0.00097744038008420457683225652626186507017705275000499519763155267944135176427726761,0.00097744038008420457683225652626186507017705275000499519763155267944135175988174397 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,moderate,4099,10322096095657499356,217.309730,214.164921,213.300563,180.000000,33.300563,yes,Both,yes,"[0.0664478289398438,1.8442977406342098e-18,-1.0237909079581275e-34,5.6831811920850375e-51]",0.066545884848946356015107328012468534613321875154290452987163116978656391412156697,0.066545884848946356015107328012468534613321875154290452987163116974551954049134186 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,moderate,4099,10322096095657499356,215.932351,214.156626,214.025325,,,,Both,yes,"[0.12618792670327883,3.5024185413922945e-18,-1.9442328532638911e-34,1.0792660394631177e-50]",0.12686417947725704533840398589369902988592505310826906137934256718603520690203447,0.12686417947725704533840398589369902988592505310826906137934256719076995026763113 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,moderate,4099,10322096095657499356,238.915006,237.181152,237.021503,,,,No,no,"[-0.7623611238227983,-2.1159771818679515e-17,1.174603293445626e-33,-6.5203581059193663e-50]",-1.0018287711046037863407528808033263139274032426947019005363253548223660872400857,-1.0018287711046037863407528808033263139274032426947019005363253548223660917090963 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,boundary,4105,10322096095657499355,219.259597,215.988400,215.075845,180.000000,35.075845,yes,Both,yes,"[0.5,0,0,0]",0.54930614433405484569762261846126285232374527891137472586734716682864483823413374,0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,boundary,4105,10322096095657499355,216.450204,214.939072,214.927397,,,,Both,yes,"[0.99899936812791412,2.7727802502039826e-17,-1.5392022380011819e-33,8.5442888209174113e-50]",3.7998851729337611663249931195429297240812819127904226139496092933273189181688645,3.7998851729337611663249931195429297240812819127904226139496092934032076288278974 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,boundary,4105,10322096095657499355,239.378421,237.945757,237.372096,,,,No,no,"[-0.5,0,0,0]",-0.54930614433405484569762261846126285232374527891137472586734716681874714853103911,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,near_one,4099,10322096095657499359,206.773984,196.847186,196.755396,180.000000,16.755396,yes,Both,yes,"midpoint [1,0,0,0]",0.84270079294971486934122063508260925929606699796630290845993292736409039503759438,0.84270079294971486934122063508260925929606699796630290845993789783471725409601084 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,near_one,4099,10322096095657499359,216.124506,214.293135,214.075088,,,,Both,yes,"[0.50336696437385697,1.3971239842088173e-17,-7.7555960776233127e-34,4.3052206675349773e-50]",0.52345372074479726111600097852706905117450908422992738618016813909422569460796212,0.52345372074479726111600097852706905117450908422992738618016813911309932932453575 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,near_one,4099,10322096095657499359,239.118725,237.303421,237.115344,,,,Inf,no,"[0.50440030951221848,1.3999920931213008e-17,-7.7715172803821719e-34,4.3140587104762828e-50]",0.52435827293177729902931721378772892866957455051554486973327695504018796785804493,0.52435827293177729902931721378772892866957455051554486973327695504018797004982547 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,moderate,4099,10322096095657499356,218.790808,197.061585,196.771033,180.000000,16.771033,yes,Both,yes,"[-1.0144931263435488,-2.8157840679764146e-17,1.5630741523200512e-33,-8.6768045655108495e-50]",-0.84863022897531701967121795328975048026375710416395760800302401037790857858953723,-0.84863022897531701967121795328975048026375710416395760800302896186126856971311395 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,moderate,4099,10322096095657499356,216.403367,214.532827,214.069380,,,,Both,yes,"[0.49346633937062734,1.3696442296169046e-17,-7.6030527963283613e-34,4.2205421359622138e-50]",0.51473949480729290589930415570243436715546197426142443535432835089464450449797338,0.51473949480729290589930415570243436715546197426142443535432835087601149756190686 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,moderate,4099,10322096095657499356,239.359861,237.617935,237.090794,,,,Inf,no,"[-0.47786661764019733,-1.3263463040097327e-17,7.362701026690414e-34,-4.0871201016314884e-50]",-0.50083582704760106751455089603854051657987806254960622390375258121165593721448514,-0.5008358270476010675145508960385405165798780625496062239037525812116559393438727 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,near_one,4099,10322096095657499359,204.316189,192.489437,192.327065,180.000000,12.327065,yes,Both,-,"upper endpoint [1.5,0,0,0]",0.033894853524689272933023738354052141318589520742363219550036458011854403217248196,0.033894853524689272933023738354052141318589520742363219550032153557867145576249274 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,near_one,4099,10322096095657499359,215.962914,214.214759,214.049312,,,,Both,-,"[1.3096161398234563,3.6349149796317988e-17,-2.0177831514710525e-33,1.1200946567319361e-49]",0.064014780147894919119338175302722908573997859037616218424476112030574651226502498,0.06401478014789491911933817530272290857399785903761621842447611203292437484990314 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,near_one,4099,10322096095657499359,238.949059,237.201029,237.018916,,,,Inf,-,"[1.0806471778377253,2.9993984458290972e-17,-1.665000607292187e-33,9.2426100511532716e-50]",0.12644653397051708186289826438531152353975365396358757108160639230306320626900367,0.12644653397051708186289826438531152353975365396358757108160639230306320570393172 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,moderate,4099,10322096095657499356,212.004213,191.066815,189.779688,180.000000,9.779688,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804748240804760826674822248354380927724048326045650379,0.0048523201680211414554273497804748240804760826674822248354416949961916711523801507 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,moderate,4099,10322096095657499356,216.176403,214.211875,214.017843,,,,Both,-,"[2.0385700159174238,5.6581684224549895e-17,-3.1409144299082644e-33,1.7435577592307763e-49]",0.0039394074968276384481347790714740376120684431886149943479747901319899962283757329,0.0039394074968276384481347790714740376120684431886149943479747901321377846972976984 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,moderate,4099,10322096095657499356,239.156924,237.247098,237.053891,,,,Inf,-,"[2.7148354940083514,7.5351821837942075e-17,-4.1828663775967986e-33,2.3219572806691949e-49]",0.00012335686434239937630508063868305400773768378433940295041562371963596822400780945,0.00012335686434239937630508063868305400773768378433940295041562371963596822454587035 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,moderate,4099,10322096095657499323,211.903615,199.617279,199.225949,180.000000,19.225949,yes,Both,-,"[1.7460150498866698,4.8461652743155553e-17,-2.6901621343420086e-33,1.4933399707606258e-49]",-0.085381213564840179500933244532026946446305041549633331800426988753669607008088582,-0.085381213564840179500933244532026946446305041549633331800426897893008666204246091 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lgamma,moderate,4099,10322096095657499323,215.890428,214.160879,214.017847,,,,Both,-,"[7.74079219922106,2.1485014321035056e-16,-1.1926578791807172e-32,6.6205811898352019e-49]",8.0072162948217682208947020187449574175934900903935011829091132045478040802147141,8.0072162948217682208947020187449574175934900903935011829091132048481971689346261 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::lgamma,moderate,4099,10322096095657499323,238.928241,237.162122,237.008749,,,,No,-,"[1.1318513409309559,3.1415185478860126e-17,-1.7438931120750193e-33,9.6805514275545252e-50]",-0.062652393316471695509535673477178105406035057306309915447779751850677317855172516,-0.062652393316471695509535673477178105406035057306309915447779751850677317573207638 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,moderate,4099,10322096095657499320,209.040528,202.582542,202.457020,180.000000,22.457020,yes,Both,-,"[14.307075507958793,3.9710111609966271e-16,-2.2043540109909649e-32,1.2236622887134923e-48]",13896751262.208085922946362879642934303109153237904876709680644672275751079246188,13896751262.208085922946362879642934303109153237904876709680646247264671220863527 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tgamma,moderate,4099,10322096095657499320,215.948239,214.171703,214.004992,,,,Both,-,"[10.766069372828035,2.9881845256063508e-16,-1.6587756310783857e-32,9.2080544915517407e-49]",2098826.7589879936401111657394716259122087725619967530347101090490263605459620521,2098826.7589879936401111657394716259122087725619967530347101090489469177047214057 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::tgamma,moderate,4099,10322096095657499320,238.919522,237.194896,237.040555,,,,No,-,"[9.228183461064674,2.561335438484767e-16,-1.4218267887970798e-32,7.8927241897568378e-49]",65913.214264422430470574974300151351193626993297660765946673758139122704576039683,65913.214264422430470574974300151351193626993297660765946673758139122704866211491 diff --git a/validation/metrics/data/windows/x86_64/detail/ClangCL_f256_benchmark.csv b/validation/metrics/data/windows/x86_64/detail/ClangCL_f256_benchmark.csv new file mode 100644 index 0000000..c73044e --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/ClangCL_f256_benchmark.csv @@ -0,0 +1,232 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,40960,9.497606,9.531965|9.515351|9.497606|9.491592|9.496653|9.493795|9.538396,11755520,111787200.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator+,40960,49.073242,49.072266|49.073242|49.128906,614400,30161800.000000,5.166906 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,40960,35.835775,35.941162|35.835775|35.645752,737280,26400200.000000,3.773138 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,40960,18.871489,18.872535|18.956473|18.865676|18.854980|18.927409|18.853934|18.871489,6021120,113715300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator-,40960,48.816528,48.816528|48.792114|48.897705,491520,24003600.000000,2.586787 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,40960,35.657959,35.669759|35.631104|35.657959,737280,26286200.000000,1.889515 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,40960,34.876883,34.775042|34.876883|34.881069,860160,29971700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator*,40960,64.393717,64.580078|64.340820|64.393717,368640,23754500.000000,1.846315 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,40960,40.406494,40.394287|40.406494|40.434163,737280,29794700.000000,1.158547 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,40960,96.092936,95.717773|96.092936|97.115072,368640,35503200.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,40960,179.785156,181.459961|174.110107|179.785156,245760,43856300.000000,1.870951 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,40960,149.171143,149.171143|149.208984|149.166260,245760,36663000.000000,1.552363 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,40960,21.158447,20.864014|21.158447|21.430420,1228800,25990300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,40960,85.113118,84.866536|85.760091|85.113118,368640,31425300.000000,4.022654 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,40960,77.089030,77.089030|77.337240|77.039388,368640,28442500.000000,3.643416 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,40960,2.093952,2.514083|2.296589|2.162729|2.082624|2.030922|2.007729|2.093952,47022080,102028700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,40960,37.767334,37.754313|37.767334|37.848714,737280,27861900.000000,18.036386 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,40960,0.993070,0.995632|0.991991|0.992561|0.994012|0.993070|0.992945|0.994564,116695040,115941100.000000,0.474256 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,40960,1.972689,2.219568|2.064143|2.014803|1.972689|1.945900|1.892123|1.869408,42434560,84739600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fabs,40960,38.204346,38.204346|38.164469|38.240153,737280,28166300.000000,19.366632 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,40960,0.994173,0.995076|0.993078|0.993168|0.993186|0.996716|0.994173|0.995555,116981760,116329200.000000,0.503968 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,40960,23.220703,23.270996|23.105225|23.220703,1228800,28506900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,4096,86.288086,86.302734|86.288086|86.155273,307200,26495600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,40960,1.046501,1.060067|1.042644|1.046501|1.037969|1.055675|1.048144|1.045249,111247360,116591200.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,40960,46.735840,56.569824|46.735840|46.235352,245760,12250400.000000,44.659135 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,40960,6.418377,6.466285|6.439789|6.418377|6.418177|6.449515|6.405169|6.386999,17489920,112396000.000000,6.133177 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,40960,1.001742,1.001055|1.001760|1.001742|1.001718|1.002731|1.002773|1.000693,116121600,116328500.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,40960,45.465820,45.550293|45.364258|45.465820,614400,27930700.000000,45.386750 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,40960,6.858878,6.867718|6.861993|6.858878|6.923449|6.850965|6.841073|6.829329,16629760,114112000.000000,6.846950 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,40960,8.442938,8.456476|8.452870|8.442938|8.442383|8.440774|8.485718|8.431729,12615680,106607700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,40960,43.075195,43.158691|43.075195|43.000977,614400,26467300.000000,5.101920 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,40960,56.579590,56.507568|56.642456|56.579590,491520,27808500.000000,6.701410 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,40960,0.739969,0.742458|0.743175|0.741793|0.739969|0.737476|0.734973|0.735414,147374080,108957000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::copysign,40960,40.089518,39.995524|40.231527|40.089518,737280,29569000.000000,54.177270 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,tlfloat,tloct,TLFloat Octuple,tlfloat::copysign,40960,0.998089,0.996914|0.996691|0.996944|0.998089|0.999108|0.999035|0.999271,116121600,115890200.000000,1.348825 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,40960,1.502490,1.499114|1.502490|1.500866|1.503616|1.499731|1.505885|1.505794,77127680,115884300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::floor,40960,42.655762,42.655762|42.600098|42.801270,614400,26226100.000000,28.390039 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,tlfloat,tloct,TLFloat Octuple,tlfloat::floor,40960,6.133156,6.180344|6.160240|6.141930|6.133156|6.108360|6.093941|6.094055,18350080,112491300.000000,4.081993 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,40960,1.503392,1.502246|1.501307|1.503392|1.502750|1.504727|1.506891|1.503491,70819840,106480700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ceil,40960,42.572754,42.572754|42.537598|42.632812,614400,26161800.000000,28.317795 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,tlfloat,tloct,TLFloat Octuple,tlfloat::ceil,40960,5.665973,5.708114|5.695765|5.678782|5.665973|5.660241|5.658932|5.665301,19783680,112295300.000000,3.768792 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,40960,4.191612,4.191612|4.176861|4.240286|4.213841|4.200195|4.187551|4.174394,27238400,114341900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::trunc,40960,42.025553,41.980794|42.025553|42.673747,737280,31132900.000000,10.026108 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,tlfloat,tloct,TLFloat Octuple,tlfloat::trunc,40960,3.116304,3.105711|3.121267|3.110755|3.124132|3.124718|3.114387|3.116304,34693120,108129900.000000,0.743462 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,40960,8.862986,8.847429|8.846407|8.862816|8.865655|8.862986|8.865144|8.866336,12328960,109228900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::round,40960,82.812500,82.750651|83.014323|82.812500,368640,30545200.000000,9.343634 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,tlfloat,tloct,TLFloat Octuple,tlfloat::round,40960,6.855347,6.855184|6.858643|6.860555|6.855347|6.852376|6.883179|6.851603,17203200,118006300.000000,0.773480 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,40960,8.308207,8.308207|8.301799|8.311208|8.320363|8.297831|8.289642|8.321533,13762560,114328700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,tlfloat,tloct,TLFloat Octuple,tlfloat::rint,40960,12.635803,12.637787|12.627106|12.643204|12.624512|12.622375|12.635803|12.716980,9175040,116008900.000000,1.520882 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,4096,6.653992,6.692489|6.653992|6.677394|6.659389|6.639318|6.619711|6.627048,16601088,110443100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lround,4096,121.458605,121.626790|121.458605|121.453179,221184,26876700.000000,18.253495 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,4096,6.321766,6.312072|6.356712|6.370275|6.321766|6.341074|6.288336|6.252274,17547264,110905000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::llround,4096,210.540217,211.228249|210.540217|210.316051,135168,28479200.000000,33.304018 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,4096,117.815484,117.749023|117.960612|117.815484,221184,26064700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,4096,161.127178,160.819186|161.127178|161.189153,159744,25726000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,2048,69.106760,69.191816|68.982327|69.106760,380928,26319700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,2048,192.213077,192.213077|193.112909|191.855004,129024,24823400.000000,2.781393 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,2048,336.783854,336.783854|336.800130|336.238607,73728,24817400.000000,4.873385 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,2048,100.491688,100.491688|100.635901|100.400845,264192,26553800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remainder,2048,234.100021,234.100021|233.647718|234.179688,116736,27313400.000000,2.329546 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,tlfloat,tloct,TLFloat Octuple,tlfloat::remainder,2048,364.973958,363.911947|365.470378|364.973958,73728,26894900.000000,3.631882 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,2048,100.221605,100.289213|100.023788|100.221605,239616,24004300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remquo,2048,266.070198,266.070198|265.777229|266.078814,104448,27780600.000000,2.654819 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,tlfloat,tloct,TLFloat Octuple,tlfloat::remquo,2048,367.696126,366.975911|368.477376|367.696126,73728,27111000.000000,3.668831 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,40960,20.226385,20.220614|20.226385|20.248136,1351680,27346800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,40960,169.399414,177.199707|169.399414|168.535156,122880,21099900.000000,8.375170 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,40960,42.958008,42.919434|43.240234|42.958008,614400,26443300.000000,2.123860 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,40960,3.197277,3.197277|3.223227|3.203046|3.196470|3.200034|3.196647|3.191509,35553280,113812200.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ldexp,40960,39.850667,39.730632|39.850667|39.943034,737280,29374300.000000,12.463938 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,tlfloat,tloct,TLFloat Octuple,tlfloat::ldexp,40960,31.535993,31.583078|31.535993|31.465193,860160,27119200.000000,9.863390 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,40960,3.199967,3.193262|3.204559|3.199967|3.200587|3.203726|3.194154|3.196983,36126720,115570600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbn,40960,39.518229,39.153239|39.518229|42.589925,737280,29801200.000000,12.349575 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,40960,3.189910,3.189135|3.193204|3.195123|3.187915|3.196576|3.189910|3.188961,36126720,115300100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbln,40960,38.636068,38.636068|38.543294|38.730876,737280,28486100.000000,12.111960 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,40960,13.949606,13.947417|13.948680|13.953058|13.968801|13.944723|13.949606|13.989089,8314880,116053600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,40960,69.702759,69.927368|69.702759|68.681641,491520,34129800.000000,4.996755 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,40960,43.679688,43.679688|43.739746|43.553711,614400,26823300.000000,3.131249 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,40960,1.080697,1.080697|1.080156|1.078164|1.084779|1.080866|1.080104|1.081693,107520000,116220800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,40960,32.128906,32.107282|32.149484|32.128906,860160,27635700.000000,29.729811 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,40960,0.665350,0.666185|0.664155|0.663885|0.664571|0.665552|0.665350|0.666367,173465600,115381000.000000,0.615668 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,40960,0.973943,0.976320|0.976853|0.973481|0.973949|0.973238|0.973457|0.973943,118128640,115112000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,40960,72.115072,72.115072|72.266439|71.922201,368640,26579400.000000,74.044423 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f256,bl::nextafter,40960,5.723766,5.723544|5.723766|5.732829|5.737305|5.714111|5.718957|5.724765,18923520,108337900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter,40960,457.414551,506.535645|457.414551|452.077637,122880,58000500.000000,79.914964 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter,40960,17.897525,17.897525|17.852942|17.881815|17.884787|17.920983|17.903681|17.907290,6594560,117994600.000000,3.126879 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f256,bl::nexttoward,40960,5.740843,5.714872|5.726867|5.740843|5.738048|5.741091|5.748096|5.761471,19783680,113533700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter (same type),40960,452.209473,474.824219|451.350098|452.209473,122880,56458600.000000,78.770570 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter (same type),40960,17.867803,17.867803|17.862071|17.851881|17.875764|17.885211|17.853685|17.886379,6594560,117838000.000000,3.112401 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,40960,0.733802,0.733802|0.738463|0.740808|0.732873|0.733797|0.735107|0.731865,158269440,116366800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator==,40960,6.047507,6.047507|6.057488|6.016199,4177920,25236300.000000,8.241336 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator==,40960,4.237549,4.243734|4.248454|4.234728|4.237549|4.232937|4.234402|4.243110,25804800,109393600.000000,5.774787 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,40960,0.643373,0.649496|0.642443|0.640881|0.641799|0.644531|0.643373|0.646623,178339840,114880100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator!=,40960,5.839572,5.846422|5.818142|5.839572,4423680,25810900.000000,9.076491 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator!=,40960,4.147689,4.168961|4.159974|4.148131|4.145092|4.147689|4.142209|4.142365,26951680,111866500.000000,6.446785 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,40960,0.856641,0.888168|0.878098|0.869351|0.856641|0.847601|0.846073|0.840898,119562240,102940200.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<,40960,6.343061,6.134823|6.376163|6.343061,4177920,26256900.000000,7.404574 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,tlfloat,tloct,TLFloat Octuple,TLFloat operator<,40960,5.873986,5.809400|5.824603|5.873986|5.894110|5.894812|5.877057|5.873506,18923520,110966100.000000,6.857000 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,40960,0.796284,0.838284|0.817292|0.802407|0.796284|0.793518|0.790713|0.784209,127016960,102025600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<=,40960,6.468750,6.468750|6.506510|6.412598,3686400,23823800.000000,8.123670 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator<=,40960,5.827825,5.841158|5.851037|5.822115|5.827825|5.811786|5.813965|5.832895,18636800,108628000.000000,7.318774 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,40960,0.808347,0.815529|0.810116|0.809077|0.808347|0.804540|0.804294|0.800088,133324800,107650100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>,40960,6.393880,6.459717|6.393880|6.384359,3686400,23639600.000000,7.909821 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,tlfloat,tloct,TLFloat Octuple,TLFloat operator>,40960,5.853136,5.879449|5.858949|5.875109|5.849377|5.853136|5.853058|5.844262,18063360,105834100.000000,7.240871 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,40960,0.789589,0.831609|0.809828|0.801127|0.789589|0.785573|0.783274|0.779604,127590400,101718800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>=,40960,6.621430,6.623198|6.621430|6.568982,3563520,23535400.000000,8.385918 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator>=,40960,5.778216,5.781459|5.789865|5.772810|5.772042|5.775042|5.827044|5.778216,20070400,116111500.000000,7.318003 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,40960,109.785156,110.051270|109.785156|109.266357,245760,26960100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,40960,134.028320,134.033203|133.989258|134.028320,245760,32936000.000000,1.220824 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,40960,197.775879,198.713379|197.333984|197.775879,122880,24323000.000000,1.801481 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,1024,341.947428,341.947428|342.134603|341.739909,73728,25210600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,1024,423.344727,423.476562|422.846680|423.344727,61440,26002800.000000,1.238040 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,1024,1698.258464,1698.258464|1699.511719|1697.753906,18432,31306900.000000,4.966431 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,4096,165.495418,166.254132|165.495418|165.024038,159744,26452200.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,4096,451.616211,452.280273|451.357422|451.616211,61440,27755600.000000,2.728874 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,4096,295.632935,295.632935|295.523071|295.715332,98304,29061000.000000,1.786351 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,1024,912.858073,915.353733|912.858073|912.109375,27648,25254800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,1024,1694.140625,1694.140625|1697.324219|1685.898438,15360,25996100.000000,1.855864 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,1024,2624.365234,2624.365234|2625.390625|2619.433594,12288,32232200.000000,2.874889 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,1024,919.912109,921.923828|919.814453|919.912109,30720,28279300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,1024,1307.338170,1328.027344|1307.338170|1306.501116,21504,28255300.000000,1.421156 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,1024,2608.496094,2608.496094|2616.333008|2608.349609,12288,32084700.000000,2.835593 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,fltx,fltx,fltx bl::f256,bl::sincos,1024,1018.663194,1020.876736|1017.719184|1018.663194,27648,28175700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,tlfloat,tloct,TLFloat Octuple,tlfloat::sincos,1024,5237.744141,5237.744141|5237.451172|5267.724609,6144,32241500.000000,5.141782 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,1024,1106.860352,1108.642578|1105.383301|1106.860352,24576,27204700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,1024,1905.097656,1902.421875|1917.949219|1905.097656,15360,29314400.000000,1.721173 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,1024,3179.752604,3185.253906|3179.752604|3178.157552,9216,29316600.000000,2.872768 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,1024,921.321615,921.560330|921.061198|921.321615,27648,25472500.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,1024,2006.210938,2007.773438|2003.789062|2006.210938,15360,30811000.000000,2.177536 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,1024,4610.156250,4612.158203|4610.156250|4606.054688,6144,28320500.000000,5.003851 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,1024,983.062066,983.062066|983.148872|979.969618,27648,27152000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,1024,2055.468750,2055.468750|2053.955078|2056.396484,12288,25255200.000000,2.090884 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,1024,4577.148438,4577.148438|4596.435547|4571.777344,6144,28150500.000000,4.656012 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,1024,1404.508464,1404.508464|1401.171875|1404.866536,18432,25869600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,1024,6062.695312,6065.625000|6062.695312|6061.132812,6144,37252000.000000,4.316596 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,1024,5038.427734,5038.427734|5038.427734|5027.441406,6144,30933600.000000,3.587325 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,1024,1424.218750,1422.119141|1424.218750|1424.267578,18432,26238600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,1024,6264.501953,6258.105469|6264.501953|6273.974609,6144,38495400.000000,4.398553 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,1024,5074.121094,5074.121094|5075.390625|5068.066406,6144,31165600.000000,3.562740 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,1024,1016.015625,1016.015625|1014.344618|1016.536458,27648,28080200.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,1024,1267.801339,1267.689732|1272.781808|1267.801339,21504,27297700.000000,1.247817 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,1024,2341.748047,2341.748047|2345.166016|2339.404297,12288,28779800.000000,2.304835 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,1024,863.642578,864.042969|861.425781|863.642578,30720,26512500.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,1024,1486.165365,1486.165365|1486.669922|1486.067708,18432,27395500.000000,1.720811 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,1024,5540.185547,5538.818359|5553.906250|5540.185547,6144,34064200.000000,6.414906 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,1024,1015.766059,1016.753472|1015.766059|1013.476562,27648,28071900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,1024,1391.127232,1391.127232|1397.530692|1390.429688,21504,29955700.000000,1.369535 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,1024,2485.961914,2476.928711|2485.961914|2487.695312,12288,30517600.000000,2.447376 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,1024,1790.351562,1790.351562|1797.285156|1789.531250,15360,27531100.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,1024,2383.081055,2385.571289|2383.081055|2382.177734,12288,29289800.000000,1.331069 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,1024,3073.925781,3075.000000|3072.981771|3073.925781,9216,28329700.000000,1.716940 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,1024,1827.207031,1827.207031|1837.011719|1820.039062,15360,28079400.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,1024,2601.196289,2603.735352|2601.196289|2599.707031,12288,31967800.000000,1.423591 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,1024,3089.322917,3083.528646|3092.610677|3089.322917,9216,28463500.000000,1.690735 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,1024,1847.011719,1847.011719|1847.304688|1846.582031,15360,28369400.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,1024,4601.708984,4605.810547|4595.458984|4601.708984,6144,28268500.000000,2.491435 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,1024,3088.997396,3087.500000|3108.365885|3088.997396,9216,28523100.000000,1.672430 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,1024,1818.964844,1819.218750|1818.964844|1817.089844,15360,27931000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,1024,2469.506836,2469.506836|2469.287109|2472.143555,12288,30355200.000000,1.357644 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,1024,3551.399740,3556.933594|3549.902344|3551.399740,9216,32742100.000000,1.952429 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,1024,2682.275391,2683.300781|2680.541992|2682.275391,12288,32956900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,1024,3051.171875,3051.171875|3056.477865|3046.061198,9216,28120200.000000,1.137531 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,1024,10860.742188,10874.902344|10860.742188|10844.824219,3072,33362400.000000,4.049078 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,4096,127.689855,127.689855|127.553424|127.765970,208896,26669700.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",4096,172.241211,172.241211|172.325721|172.126653,159744,27512900.000000,1.348903 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,fltx,fltx,fltx bl::f256,bl::product_sum,4096,58.569336,58.629015|58.569336|58.374702,442368,25889300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same expression,4096,138.186646,138.186646|137.933350|138.645935,196608,27182100.000000,2.359368 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,tlfloat,tloct,TLFloat Octuple,same expression,4096,115.120014,115.441252|114.820621|115.120014,233472,26879000.000000,1.965534 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,1024,1293.568638,1292.815290|1293.568638|1294.196429,21504,27816000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,1024,1489.925130,1491.357422|1489.925130|1489.176432,18432,27466500.000000,1.151794 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,1024,2742.309570,2742.309570|2743.310547|2738.647461,12288,33686600.000000,2.119957 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,1024,1291.936384,1293.819754|1290.680804|1291.936384,21504,27786300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,1024,1466.308594,1466.308594|1469.628906|1464.062500,18432,27033600.000000,1.134970 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,1024,2539.086914,2542.114258|2539.086914|2534.570312,12288,31194200.000000,1.965334 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,1024,1271.833147,1272.879464|1270.368304|1271.833147,21504,27346500.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,1024,1518.636068,1517.041016|1518.636068|1518.668620,18432,27981900.000000,1.194053 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,1024,2679.980469,2673.242188|2679.980469|2686.083984,12288,32929000.000000,2.107179 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,1024,2693.237305,2693.237305|2691.528320|2697.753906,12288,33106000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,1024,6233.593750,6229.345703|6233.593750|6254.003906,6144,38332300.000000,2.314536 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,1024,10872.753906,10860.742188|10912.109375|10872.753906,3072,33429100.000000,4.037058 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,1024,2491.577148,2501.489258|2491.577148|2490.283203,12288,30651800.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,1024,3746.191406,3741.276042|3746.191406|3756.705729,9216,34542100.000000,1.503542 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,1024,10240.429688,10234.277344|10248.046875|10240.429688,3072,31460100.000000,4.110019 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,1024,2341.650391,2341.650391|2340.600586|2346.362305,12288,28789200.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,1024,2952.246094,2953.938802|2952.246094|2949.153646,9216,27203600.000000,1.260754 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,1024,3750.813802,3750.813802|3745.019531|3753.190104,9216,34557000.000000,1.601782 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,128,10458.593750,10528.125000|10458.593750|10431.250000,384,4021500.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,128,16671.093750,16671.093750|16653.125000|16820.312500,384,6418500.000000,1.594009 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,128,126758.593750,126864.843750|126758.593750|126734.375000,384,48685800.000000,12.120042 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,128,10510.937500,10562.500000|10508.593750|10510.937500,384,4042500.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,128,27447.656250,27573.437500|27428.906250|27447.656250,384,10553600.000000,2.611342 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,128,127011.718750,127015.625000|126846.875000|127011.718750,384,48751900.000000,12.083767 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,128,9634.375000,9883.593750|9632.812500|9634.375000,384,3731300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lgamma,128,12676.562500,12735.156250|12671.875000|12676.562500,384,4874700.000000,1.315764 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::lgamma,128,45237.500000,45237.500000|45119.531250|45250.781250,384,17357800.000000,4.695427 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,128,10653.906250,10685.156250|10653.906250|10632.031250,384,4092300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tgamma,128,14798.437500,15003.906250|14798.437500|14779.687500,384,5706500.000000,1.389015 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::tgamma,128,50621.875000,50746.093750|50621.875000|50578.125000,384,19449100.000000,4.751485 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,4099,290.592218,290.750793|290.168334|290.592218,98376,28578600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,4099,462.454257,462.454257|461.536960|463.713101,61485,28441000.000000,1.591420 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,4099,8590.143938,8588.216638|8632.812881|8590.143938,12297,105800000.000000,29.560819 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,4099,253.747526,253.747526|253.641810|254.078230,110673,28091300.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,4099,347.723022,347.723022|348.475238|346.734976,73782,25649900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,4099,355.111003,355.257380|354.582418|355.111003,73782,26191400.000000,1.021247 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,4099,6776.018541,6799.634057|6776.018541|6751.646743,12297,83321600.000000,19.486827 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,mt19937_64,fltx,fltx,fltx bl::f256,bl::mt19937_64,64,1.373261,1.375279|1.374663|1.372358|1.379003|1.372848|1.373261|1.371497,82906432,113924200.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,uniform_real,fltx,fltx,fltx bl::f256,bl::uniform_real,64,14.855558,14.845844|14.909154|14.855558,1791168,26635000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,normal,fltx,fltx,fltx bl::f256,bl::normal,64,292.533967,292.931386|292.027853|292.533967,88320,25833400.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f256,same workload,64,151.691846,151.691846|151.550428|152.045392,173952,26399400.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,302.939560,302.596154|303.382555|302.939560,87360,26467700.000000,1.997072 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,tlfloat,tloct,TLFloat Octuple,same workload,64,283.242754,283.313923|283.242754|282.818970,92736,26255900.000000,1.867225 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f256,same workload,64,1851.710304,1852.660473|1851.710304|1849.134291,14208,26301400.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,2326.718750,2326.718750|2326.015625|2331.588542,11520,26819800.000000,1.256524 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,tlfloat,tloct,TLFloat Octuple,same workload,64,5363.687500,5368.875000|5363.687500|5354.437500,4800,25739200.000000,2.896613 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f256,same workload,64,128.355991,128.355991|127.969044|128.525188,203904,26157500.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,242.173889,241.419861|242.233776|242.173889,110208,26664000.000000,1.886736 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,tlfloat,tloct,TLFloat Octuple,same workload,64,274.712500,274.478125|275.859375|274.712500,96000,26401600.000000,2.140239 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f256,same workload,64,594.191576,594.789402|594.191576|593.600543,44160,26239600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,950.812922,950.570101|950.812922|952.111486,28416,27028300.000000,1.600179 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,tlfloat,tloct,TLFloat Octuple,same workload,64,1078.248031,1078.248031|1076.008858|1078.383366,24384,26274900.000000,1.814647 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f256,same workload,64,442.219939,442.219939|444.879974|439.003028,55488,24527600.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,744.173729,744.835805|744.173729|743.299788,33984,25287600.000000,1.682814 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,tlfloat,tloct,TLFloat Octuple,same workload,64,1050.863821,1048.234248|1051.295732|1050.863821,23616,24799900.000000,2.376337 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,fltx,fltx,fltx bl::f256,same workload,8,246.195284,246.195284|246.246051|245.684792,106368,26171000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,8,323.217937,329.195881|323.217937|322.502191,82152,26697100.000000,1.312852 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,tlfloat,tloct,TLFloat Octuple,same workload,8,406.724713,406.724713|406.859022|404.761023,64776,26306500.000000,1.652041 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f256,same workload,8,8950.000000,8987.500000|8937.500000|8950.000000,24,215000.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,8,11262.500000,11262.500000|11550.000000|11050.000000,24,270900.000000,1.258380 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,tlfloat,tloct,TLFloat Octuple,same workload,8,21212.500000,21225.000000|21212.500000|21125.000000,24,508500.000000,2.370112 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,fltx,fltx,fltx bl::f256,same workload,8,4891.647982,4902.802691|4890.470852|4891.647982,5352,26197900.000000, +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,8,10187.500000,10350.000000|10187.500000|10137.500000,24,245400.000000,2.082631 +6,1bd8465fefb349c8bd408bdef2fbe2ea,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,tlfloat,tloct,TLFloat Octuple,same workload,8,15700.000000,15775.000000|15700.000000|15687.500000,24,377300.000000,3.209552 diff --git a/validation/metrics/data/windows/x86_64/detail/ClangCL_f256_fastmath_accuracy.csv b/validation/metrics/data/windows/x86_64/detail/ClangCL_f256_fastmath_accuracy.csv new file mode 100644 index 0000000..3f5ebf5 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/ClangCL_f256_fastmath_accuracy.csv @@ -0,0 +1,128 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,moderate,4097,10322096095657499311,219.944958,215.547580,215.029639,212.000000,3.029639,yes,Both,yes,-6.32659778225233051069632927545029475138801079375645295548611539482289480950893866e-02,-0.063265977822523305106963292754502947513880107937564529554861153949406008699572901,-0.063265977822523305106963292754502947513880107937564529554861153948228948095089387 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,wide_exponent,4098,10322096095657499308,219.514079,212.275332,212.017147,212.000000,0.017147,yes,Both,yes,2.47163553801407265315232159817868248210487207087397698019878061850401032407603178e-277,2.4716355380140726531523215981786824821048720708495655738821672043746801610949361e-277,2.4716355380140726531523215981786824821048720708739769801987806185040103240760318e-277 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,general,3770,10322096095657499292,225.979394,215.583815,215.297307,190.000000,25.297307,yes,Both,no,"representative lhs [-4.4462634936433036e+21,-123408.6026048271,6.8505536024347558e-12,-3.8028211704259384e-28] ; representative rhs [-1.5864490641473432e+22,-440328.06960285309,2.4443118063091801e-11,-1.3568656233637788e-27]",-20310754135116736403992.672207680164858397009037806754206012036634323297640103087,-20310754135116736403992.672207680164858397009037806754206012036634009406784094328 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,subnormal,326,10322096095657499292,243.500079,219.782158,216.532998,190.000000,26.532998,yes,Both,no,"broad lhs [-4.0912052790212279e-223,-1.1355375748093388e-239,6.3034998044016954e-256,-3.4991453092834664e-272] ; broad rhs [9.6732779190304605e-272,2.6848739673264345e-288,-1.4904044483712489e-304,8.2755995678408796e-321]",-4.0912052790212280311833034891221488165122802908340538768476180849661443443505261e-223,-4.0912052790212280311833034891221488165122802908340538768476180849392956046772617e-223 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,general,3791,10322096095657499292,226.123353,215.602949,215.220788,190.000000,25.220788,yes,Both,no,"representative lhs [155.03656083289641,4.3031289873845084e-15,-2.388716439863108e-31,1.3260039954183278e-47] ; representative rhs [2246405305209.4082,6.2350272312089677e-05,-3.4611353956265177e-21,1.9213161037848301e-37]",-2246405305054.3717046423758949106196822642348296102031142477192627199056314953875,-2246405305054.3717046423758949106196822642348296102031142477192626832977015519632 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,subnormal,305,10322096095657499292,243.910586,244.000000,216.728701,190.000000,26.728701,yes,Both,no,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239320146546075137762e-238,8.2656349351104667692680102118096923996066568310632957805469239319672919306477601e-238 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,general,4000,10322096095657499292,220.010524,216.259138,215.221541,190.000000,25.221541,yes,Both,yes,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60038241930403290903625769183688852217377918301809189,-156159778640594921198000750.60038241930403290903625769183688852217632267056740194 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,subnormal,100,10322096095657499292,221.469015,215.608028,215.608028,190.000000,25.608028,yes,Both,yes,"extreme lhs [-5.3809439414843993e+270,-1.4935119645133053e+254,8.2906568527791063e+237,-4.6022390636108503e+221] ; extreme rhs [-4.596668242019171e-261,-1.2758317297132313e-277,7.0822888093748442e-294,-3.931460051606543e-310]",24734414127.906804259564005392277744744307358869933187588284984254854603209456978,24734414127.906804259564005392277744744307358869933187588284984255162792737796103 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,general,4045,10322096095657499292,219.218459,215.287455,214.762066,190.000000,24.762066,yes,Both,yes,"representative lhs [2268851457486.2539,6.2973278188889589e-05,-3.49571916907152e-21,1.940513954563361e-37] ; representative rhs [0.00093095878597111432,2.5839296979055357e-20,-1.4343691223137255e-36,7.9623481270203769e-53]",2437112675315200.8552398842775006307979109182413214802574225974607596074455830965,2437112675315200.8552398842775006307979109182413214802574225974607050251573596225 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,subnormal,55,10322096095657499292,219.372138,215.374456,215.374456,190.000000,25.374456,yes,Both,yes,"extreme lhs [-6.5972954615428272e-272,-1.8311173304149739e-288,1.0164743105084273e-304,-5.6422296755070355e-321] ; extreme rhs [6.3421732060336743e-272,1.760306679874833e-288,-9.7716650319925213e-305,5.4248407913368871e-321]",-1.0402263147380523166730438190618890627910384611501752613620202130066222580107113,-1.040226314738052316673043819061889062791038461150175261362020212991383268138225 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,moderate,4099,10322096095657499356,219.883649,215.654212,215.160161,190.000000,25.160161,yes,Both,no,"[1.2843679126351581,3.5648370717432602e-17,-1.9788820980433443e-33,1.0985002341331286e-49] ; [-2.3308777059725987,-6.4694852418906121e-17,3.5912857365098039e-33,-1.9935640563405487e-49] ; [5.2042205184851724,1.4444613612122271e-16,-8.0183713069960479e-33,4.451090222510361e-49]",2.2105159846573199203800006655584861882250236763069688164874765011598446438714347,2.2105159846573199203800006655584861882250236763069688164874765011222755061934085 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,Both,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,wide_exponent,4096,10322096095657499357,225.262959,215.958051,215.096656,190.000000,25.096656,yes,Both,no,"[5.0695695241027842e+79,1.4070882026492271e+63,-7.8109086012980007e+46,4.3359252862018586e+30] ; [-1.285263546577847e-53,-3.5673229553052827e-70,1.9802620406268915e-86,-1.0992662561475861e-102] ; [-9312.4534885580761,-2.5847250696870095e-13,1.4348106423461901e-29,-7.9647990555497543e-46]",-651573290617131278652235925.796582770520137295580825262259286558273807300279549,-651573290617131278652235925.79658277052013729558082526225928655828537955033923283 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,moderate,4099,10322096095657499356,220.145544,216.285104,215.251190,190.000000,25.251190,yes,Both,yes,"[-0.36144099270550889,-1.0032002803625731e-17,5.5688802478447044e-34,-3.0913495362687196e-50]",0.13063959120794373790137808981865083109327726640612337325102002398854548322121324,0.13063959120794373790137808981865083109327726640612337325102002399063002164712949 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,wide_exponent,4096,10322096095657499357,220.095837,216.278909,215.290405,190.000000,25.290405,yes,Both,yes,"[6.7502995556670522e-41,1.8735844974546312e-57,-1.0400483238274423e-73,5.7734279791801363e-90]",4.5566544091238805246854811871109707929263286794390254922251627617554550230494986e-81,4.5566544091238805246854811871109707929263286794390254922251627618262131586719535e-81 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,near_one,4099,10322096095657499359,217.971795,215.406773,214.634335,190.000000,24.634335,yes,Both,yes,"[0.98524730223011503,2.7346105997142351e-17,1.5180138255933757e-33,8.426669504365412e-50]",1.0149735987467228735600712240168282012518927505403262882885405865459789646852313,1.0149735987467228735600712240168282012518927505403262882885405865211429570599582 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,wide_exponent,4096,10322096095657499357,217.877061,215.148048,214.625136,190.000000,24.625136,yes,Both,yes,"[2.2537520677334854e+105,6.2554185934856772e+88,3.4724548755780555e+72,1.9275996774193202e+56]",4.4370452913468106284563119957364553561271971862592280260566035243063949187169959e-106,4.4370452913468106284563119957364553561271971862592280260566035241971276114030617e-106 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Inf,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Inf,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Inf,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Inf,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,No,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,moderate,4099,10322096095657499356,220.044956,215.606687,215.330917,190.000000,25.330917,yes,Both,yes,"[4.0249001329210348,1.1171341998464465e-16,-6.2013405513286293e-33,3.4424355318133533e-49]",4.0249999999999999999999999999999999999999999999999999999999999999392283664271373,4.025 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,wide_exponent,4096,10322096095657499357,229.647449,215.594292,215.067820,190.000000,25.067820,yes,Both,yes,"[3.0148718470081313e-08,8.3679503521064993e-25,-4.6451455749144106e-41,2.5785737850028193e-57]",3.0148720000000000000000000000000000000000000000000000000000000000546265902778824e-08,3.014872e-08 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,boundary,4112,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,boundary,4116,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,NaN,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,NaN,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815,0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,NaN,-,"lower endpoint [-8,0,0,0]",3,3 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,NaN,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,near_one,4099,10322096095657499359,217.932663,211.994703,210.121730,190.000000,20.121730,yes,Both,yes,"[0.68844842180625743,1.9108282228903967e-17,1.0607227445782445e-33,5.88819406887178e-50]",0.82972792034874748204635533162847142244462757631213868214367401578005505462467425,0.82972792034874748204635533162847142244462757631213868214367401531661654544094597 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,wide_exponent,4096,10322096095657499357,217.922910,211.307570,210.087010,190.000000,20.087010,yes,Both,yes,"[3.9723050169707548e-164,1.1025361226687388e-180,6.120304944338899e-197,3.3974517334661164e-213]",1.9930642280094123730625261552128791429300322769194722961440719680011680513374133e-82,1.9930642280094123730625261552128791429300322769194722961440719668608407694664803e-82 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,extreme_finite,4096,10322096095657499354,217.427345,211.612729,209.568118,190.000000,19.568118,yes,Both,yes,"[4.8277532298172217e+270,1.3399706982378861e+254,7.4383316075337441e+237,4.1291035077405081e+221]",2.1972148802102223696810058497941079031647215249309110296216736160980628789995527e+135,2.1972148802102223696810058497941079031647215249309110296216736142967757213404226e+135 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,subnormal,4100,10322096095657499350,218.287365,211.525055,210.033468,190.000000,20.033468,yes,Both,yes,"[3.9080211162696703e-308,0,0,0]",1.976871547741448539026969223351905164877787940969937902883633378772329452173061e-154,1.976871547741448539026969223351905164877787940969937902883633377598501465266526e-154 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,moderate,4099,10322096095657499356,219.365127,215.645937,215.009723,190.000000,25.009723,yes,Both,yes,"[1.493485632755414,4.1452553410798288e-17,-2.3010789613086162e-33,1.2773554221626827e-49]",1.1430547069429598916413447070301032665501071556717031589096757220734804391392631,1.143054706942959891641344707030103266550107155671703158909675722095042538408066 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,wide_exponent,4096,10322096095657499357,219.208097,215.522484,215.016400,190.000000,25.016400,yes,Both,yes,"[1.1715709721762959e-232,3.2517626707315058e-249,-1.8050908938313547e-265,1.002026735936387e-281]",4.8931613224357677778860487132523010245820505813115565125769210140394169679151093e-78,4.8931613224357677778860487132523010245820505813115565125769210141312932532907629e-78 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,moderate,4099,10322096095657499356,219.112713,215.484839,215.004532,190.000000,25.004532,yes,Both,yes,"[-1.9786093179304824,-5.4917440537607455e-17,3.0485303469167366e-33,-1.6922742912077385e-49] ; [-3.6930721609963868,-1.0250334361850929e-16,5.6900786093166561e-33,-3.1586281419952212e-49]",4.1897108276500243736137575509880054584975437763794929781439711577595180004814865,4.1897108276500243736137575509880054584975437763794929781439711578388357929538313 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,wide_exponent,4096,10322096095657499357,240.757017,216.577812,213.870154,190.000000,23.870154,yes,Both,yes,"[1.7122842369183985e-262,4.7525434613238062e-279,-2.6381915881467134e-295,1.4644905222663036e-311] ; [-3.0144374372983699e-265,-8.3667446229517548e-282,4.6444762607798811e-298,-2.578202241195858e-314]",1.712286890340601098411983682624579480459337744664421226746119949951155747074881e-262,1.7122868903406010984119836826245794804593377446644212267461199567085975614133203e-262 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,moderate,4099,10322096095657499356,219.189484,215.451091,214.398633,180.000000,34.398633,yes,Both,yes,"[3.0788955469009238,8.5456518164631729e-17,-4.7437897035336035e-33,2.6333322764213759e-49]",0.062656038467969832209321794216397982020542964949257118477705660287113605590702679,0.062656038467969832209321794216397982020542964949257118477705660288918880291683339 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,argument_reduction,4104,10322096095657499353,217.652696,208.567012,202.924770,180.000000,22.924770,yes,Both,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275296757802517104071329784271370594664228509e-21,-6.8137244848422015805151924052161601275296757802517104071329778687414703031432792e-21 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,quadrant_boundaries,4315,10322096095657499369,229.646501,212.548934,212.379963,180.000000,32.379963,yes,Both,yes,"below random k*pi/2, exponent 29, quadrant 0, offset bits 64 [1210367998.9931121,9.2232933347751439e-08,-3.3682212462958211e-24,-1.2421712039970458e-40]",-6.5614180700763253419843351526898064698409162314387092951719910697284566769595525e-11,-6.5614180700763253419843351526898064698409162314387092951719910704945087391437157e-11 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,moderate,4099,10322096095657499356,219.189230,215.566675,214.659688,180.000000,34.659688,yes,Both,-,"[-4.7784826804074854,-1.3262953736402309e-16,7.3624183063460464e-33,-4.086963160313565e-49]",0.066045590163581850028962366060015702301220111028377965182485758811610101682177111,0.066045590163581850028962366060015702301220111028377965182485758813198059701212943 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,argument_reduction,4104,10322096095657499353,232.574321,215.615638,208.674366,180.000000,28.674366,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1226611923604276e-17,1.4973849048591698e-33,-5.5622711043168264e-50]",5.7280337633839673822029261537694370705065754439038807480055172644370212115109926e-21,5.7280337633839673822029261537694370705065754439038807480055172731619522921872359e-21 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,quadrant_boundaries,4315,10322096095657499369,228.481158,215.246584,214.418649,180.000000,34.418649,yes,Both,-,"below random k*pi/2, exponent 17, quadrant 1, offset bits 118 [331709.77271825873,-2.2171970577571149e-11,3.7150708281135636e-28,2.3902355434839523e-45]",9.9820278769371660928200388523257556042420348105086346022094664206029498329582703e-31,9.9820278769371660928200388523257556042420348105086346022094664208865938945946123e-31 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,moderate,4099,10322096095657499356,216.913680,214.380555,213.767876,170.000000,43.767876,yes,Both,yes,"[-1.8439090508145544,-5.11787570882259e-17,2.8409917245523164e-33,-1.5770672126837562e-49]",3.5699982842328020406977403126653024345054964874710955004250341281438081184333917,3.5699982842328020406977403126653024345054964874710955004250341283030748914299905 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,argument_reduction,4104,10322096095657499353,216.861788,208.567009,202.924770,170.000000,32.924770,yes,Both,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275298339501045587830768442951450110146372361e-21,-6.8137244848422015805151924052161601275298339501045587830768437367494218513576644e-21 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,quadrant_boundaries,4315,10322096095657499369,217.360401,212.539526,212.267358,170.000000,42.267358,yes,Both,yes,"above random k*pi/2, exponent 45, quadrant 0, offset bits 64 [74082575456598.641,0.0077401429536521011,-4.4453663865375208e-20,-1.4406648841189425e-36]",4.0160244626898690108548055606217396545568030741292099390402822024483364340948252e-06,4.0160244626898690108548055606217396545568030741292099390402822019413987321784571e-06 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,near_one,4099,10322096095657499359,218.093670,215.379730,214.678988,180.000000,34.678988,yes,Both,yes,"[1.2911786355365591,3.5837406251919532e-17,-1.9893756781863299e-33,1.1043253412758746e-49]",0.91180735486029865720200031963596732813600677958830230748545472972914611914911937,0.91180735486029865720200031963596732813600677958830230748545472975077769821487466 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,moderate,4099,10322096095657499356,218.191260,215.364973,214.819019,180.000000,34.819019,yes,Both,yes,"[-1.6564773418506284,-4.5976482117311103e-17,2.5522074518952777e-33,-1.4167597383570195e-49]",-1.0276674796068157926881872460477795215568000040373694878361657581086397348641996,-1.0276674796068157926881872460477795215568000040373694878361657581307647820337298 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,near_one,4099,10322096095657499359,217.767500,215.258136,214.277602,180.000000,34.277602,yes,Both,yes,"[0.58860603672544787,1.6337099360148818e-17,-9.0689119326130649e-34,5.0342574179424254e-50] ; [0.85887750789320882,2.3838639614892877e-17,-1.3233103288097723e-33,7.3458479788444792e-50]",0.60080560244689944505254047976488516114993445003563706360562245792394141734857901,0.60080560244689944505254047976488516114993445003563706360562245794276700036835792 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,moderate,4099,10322096095657499356,218.042610,215.273196,214.779064,180.000000,34.779064,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50] ; [1.7502476823940025,4.8579131894765996e-17,-2.6966835372935758e-33,1.4969600766154699e-49]",0.072148061051439749393843263001597933397921930324099767924159658763635157216424841,0.072148061051439749393843263001597933397921930324099767924159658765232080678489465 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,extreme_finite,8,10322096095657499351,224.796125,218.394834,218.394834,180.000000,38.394834,yes,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961510720871532843,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,moderate,4099,10322096095657499356,217.555374,214.870821,214.404436,180.000000,34.404436,yes,Both,yes,"[-0.03874370615484779,-1.0753538658105852e-18,5.9694131072129129e-35,-3.313689937563487e-51]",-0.038753405574689053897038748698475312191059300104201567727902220547827930480850877,-0.038753405574689053897038748698475312191059300104201567727902220546715831868900725 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,boundary,4105,10322096095657499355,218.279597,215.666103,215.450088,180.000000,35.450088,yes,Both,yes,"[-0.9999994386132145,-2.7755560034015539e-17,1.5407430905564922e-33,-8.5528422708397013e-50]",-1.5697367166420567598613352554733454843585688705175173404668956843884396097624371,-1.5697367166420567598613352554733454843585688705175173404668956844102612619924983 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,moderate,4099,10322096095657499356,217.952479,214.769937,210.665918,180.000000,30.665918,yes,Both,-,"[0.99887415790514178,2.7724327220233818e-17,-1.5390093211072774e-33,8.5432179170301514e-50]",0.04745636757503406782865420252660601887412863134878995249846597602032373476016398,0.047456367575034067828654202526606018874128631348789952498465976002146233476892292 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,boundary,4105,10322096095657499355,214.108948,205.510139,192.466318,180.000000,12.466318,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863435425504615922399221269664356222070824068253018899150618e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,moderate,4099,10322096095657499356,217.426949,215.046491,214.489012,180.000000,34.489012,yes,Both,-,"[7.2668058682815229,2.0169437976118373e-16,-1.1196287217417818e-32,6.2151879295467938e-49]",1431.9692420599845796068868376110150600143493093499559422817931161935390354934173,1431.969242059984579606886837611015060014349309349955942281793116154785851743886 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,boundary,4099,10322096095657499291,216.095013,210.609597,209.170810,180.000000,29.170810,yes,Both,-,"[-602.51463003262006,-1.6723140373393066e-14,9.2832077432897595e-31,-5.1532154894894153e-47]",2.1439808940678330986168374863027594170304621312385699060007346626494830473999428e-262,2.1439808940678330986168374863027594170304621312385699060007348382095786861640128e-262 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,moderate,4099,10322096095657499356,218.020692,214.999773,214.215827,180.000000,34.215827,yes,Both,-,"[3.1052035729833225,8.6186712571859683e-17,-4.7843236357014531e-33,2.6558331288070464e-49]",8.6051692793502790320283451340709447945359060261526288089250361316953685910209515,8.6051692793502790320283451340709447945359060261526288089250361314139388957083351 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,boundary,4099,10322096095657499291,218.040030,214.973213,214.202868,180.000000,34.202868,yes,Both,-,"[104.10886087905146,2.8896013603855037e-15,-1.6040509811440805e-31,8.9042716596936548e-48]",21872072611204943785318953704535.848957757329524240581979950526538377674145297079,21872072611204943785318953704535.848957757329524240581979950526537655899871393765 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,moderate,4099,10322096095657499356,218.319190,214.883150,213.793932,180.000000,33.793932,yes,Both,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.69414327255271665612631015596788634386741426622153124768599904822325391377881959,0.69414327255271665612631015596788634386741426622153124768599904819284068360567441 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,cancellation,4098,10322096095657499336,235.991871,207.540568,207.000000,180.000000,27.000000,yes,Both,yes,"[3.6665372155917779e-270,1.0176685093487508e-286,-5.6491950525747228e-303,3.1359334672835601e-319]",3.666537215591778022742232576640266061184048842008439989892382592756081591049904e-270,3.6665372155917780227422325766402660611840488420084399108418792581566345227988971e-270 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,near_one,4099,10322096095657499359,216.923081,214.333783,213.252927,180.000000,33.252927,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.50793426433422243038604118757996243390013385433953431736902408052282282785799521,-0.50793426433422243038604118757996243390013385433953431736902408049044259492262108 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,wide_exponent,4096,10322096095657499357,218.159247,215.423349,214.787811,180.000000,34.787811,yes,Both,-,"[2.1976393587320462e-253,6.0996745397169545e-270,3.3859995583568084e-286,1.87960733552917e-302]",-581.7666447619842216491153422494362059260947919882070310469834418271313947370462,-581.76664476198422164911534224943620592609479198820703104698344181433242395383818 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,extreme_finite,4096,10322096095657499354,218.246513,215.340501,214.977417,180.000000,34.977417,yes,Both,-,"[6.7255270714277703e+270,1.8667087518597276e+254,1.0362315182919788e+238,5.7522404522501946e+221]",623.60388540574258032454540371734224443628132982427335034944077135074873546872386,623.60388540574258032454540371734224443628132982427335034944077133871895125605538 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,near_one,4099,10322096095657499359,216.831239,214.285380,213.192358,180.000000,33.192358,yes,Both,-,"[0.7496369857674211,2.0806606042739792e-17,1.1549986546477316e-33,6.4115304990049557e-50]",-0.41573596010411493045014267590719729760119796965409081364143571035067957416967793,-0.41573596010411493045014267590719729760119796965409081364143571037831861478590789 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,wide_exponent,4096,10322096095657499357,217.896906,215.177253,214.398808,180.000000,34.398808,yes,Both,-,"[1.7649452349949291e+168,4.8987070927345696e+151,2.7193287026242405e+135,1.5095306685887436e+119]",558.90354335945887268941714779171120602057251916893271728873264701130834705779937,558.90354335945887268941714779171120602057251916893271728873264699520691310276205 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,extreme_finite,4096,10322096095657499354,221.112240,215.319712,214.786513,180.000000,34.786513,yes,Both,-,"[6.8101574227838104e+300,1.8901983930241257e+284,1.0492708885224276e+268,5.8246234975324753e+251]",999.34611661399737932538483694865739304704641025692614772050877622807059417985481,999.34611661399737932538483694865739304704641025692614772050877625007617254075152 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,near_one,4099,10322096095657499359,216.850749,214.245682,213.257193,180.000000,33.257193,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.22059304816994049352958242449187881883781348866027603462218270842444120257078286,-0.2205930481699404935295824244918788188378134886602760346221827084104201683981848 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,wide_exponent,4096,10322096095657499357,217.861615,215.189987,214.497524,180.000000,34.497524,yes,Both,-,"[7.1469640060920858e+234,1.9836809989326703e+218,1.1011641592632406e+202,6.1126890175302627e+185]",234.85412159489045596003203173344408775668279869668572611682025536536168793387694,234.85412159489045596003203173344408775668279869668572611682025535904325560762789 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,extreme_finite,4096,10322096095657499354,217.633514,215.073798,214.220407,180.000000,34.220407,yes,Both,-,"[5.3758239790954964e+270,1.4920908894809616e+254,8.2827683016759667e+237,4.5978600380780314e+221]",270.73044504015011560346372915336203436416099326519770095672238014262874150583956,270.73044504015011560346372915336203436416099326519770095672238013380264152658546 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,moderate,4099,10322096095657499356,217.570462,214.787129,214.020088,180.000000,34.020088,yes,Both,yes,"[-0.25462100474624672,-7.0671525505618592e-18,3.9230577400860884e-34,-2.1777345149887542e-50]",-0.29386247149453246058352428487213904837677656724718288204078215844233971612393252,-0.29386247149453246058352428487213904837677656724718288204078215843133248548523474 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,cancellation,4098,10322096095657499336,236.076178,207.415037,207.000000,180.000000,27.000000,yes,Both,yes,"[-5.0621342944708729e-265,-1.4050245118665463e-281,7.7994528161848061e-298,-4.3295660482073704e-314]",-5.0621342944708730086760504274075663829189583933818324664504818055859676107573498e-265,-5.0621342944708730086760504274075663829189583933818324664512723106193136052280323e-265 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,near_one,4099,10322096095657499359,218.148772,215.130203,214.362894,180.000000,34.362894,yes,Both,yes,"[1.423134563497126,3.9499918988359527e-17,2.1926859765852584e-33,1.2171852284888254e-49] ; [1.1927685344842596,3.310597725082075e-17,1.8377509098288919e-33,1.0201566868089328e-49]",1.5233053480043329261431287201279001410110702760486984367539772844096336550706452,1.5233053480043329261431287201279001410110702760486984367539772843646426383376926 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,moderate,4099,10322096095657499356,215.525556,212.047897,211.143117,180.000000,31.143117,yes,Both,yes,"[7.7504743381693961,2.1511887655005213e-16,1.1941496488868227e-32,6.6288621752109849e-49] ; [6.7867863554598733,1.8837116187608508e-16,1.0456700054511108e-32,5.8046345810586807e-49]",1085628.0458183651737754568233825992695775685017622680386092038233740053608370142,1085628.0458183651737754568233825992695775685017622680386092038236727288616449863 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,moderate,4099,10322096095657499356,217.158561,214.415804,213.656994,190.000000,23.656994,yes,Both,no,"[-5.6684636004037738,-1.5733147008544706e-16,8.7336510293493687e-33,-4.848150230912434e-49]",-188043.1576659602046428792992413117498177671151403368538232084353655121126605512,-188043.15766596020464287929924131174981776711514033685382320843537457138843934032 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,wide_exponent,4096,10322096095657499357,217.192977,214.383216,213.812882,190.000000,23.812882,yes,Both,no,"[3156983632.9860682,8.7623897942647695e-08,-4.8641034501666178e-24,2.7001198222668209e-40]",3125405070844307632059635814309662493597686949184087401837672866916,3125405070844307632059635814309662493597686949184087401837672867051.1497698219492 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,quotient_reduction,4,10322096095657499383,237.431134,217.724535,217.724535,190.000000,27.724535,yes,Both,yes,"scaled-reduction gap 58 lhs [5.4783870128486342e+104,1.2515701024950248e+86,2.5644796350277343e+70,3.0488942297143002e+54] ; scaled-reduction gap 58 rhs [1.0992042367473471e+87,7.6430960252403863e+68,8.308036160429468e+52,-8.4044243641695015e+36]",8.2176097775156019844573783110329841337664065872688377479267466170896765365317513e+86,8.217609777515601984457378311032984133766406587268837747926746617066064704117403e+86 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,near_one,4099,10322096095657499359,217.088527,214.653889,213.844482,180.000000,33.844482,yes,Both,yes,"[0.76562636076402268,2.1250400349504614e-17,-1.1796341875261248e-33,6.5482851781324668e-50]",0.84264914336815803011264269143612462086913967383298160440244808238970820494154117,0.84264914336815803011264269143612462086913967383298160440244808235405953256955333 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,moderate,4099,10322096095657499356,216.956723,214.597984,213.993459,180.000000,33.993459,yes,Both,yes,"[0.054297296667996875,1.5070527233928231e-18,-8.3658231641737974e-35,4.6439647484041155e-51]",0.054323980450469496887448171808625498827811228200332436943033541994792104072246549,0.054323980450469496887448171808625498827811228200332436943033541996864828986916269 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,near_one,4099,10322096095657499359,217.861158,215.239353,214.487635,180.000000,34.487635,yes,Both,-,"[1.4303433203278892,3.9700002183670459e-17,-2.2037928250989968e-33,1.2233507679643134e-49]",2.2096804236627024779285628784238115118483853203461617013356271627432691873521909,2.2096804236627024779285628784238115118483853203461617013356271626834118164339315 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,moderate,4099,10322096095657499356,217.160103,214.737937,214.159072,180.000000,34.159072,yes,Both,-,"[6.9851955939094275,1.9387812449671103e-16,-1.0762397889369559e-32,5.9743309684776362e-49]",540.25933261817616200059910469729467236382875532751465730859323173250980707379319,540.25933261817616200059910469729467236382875532751465730859323171413182761114806 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,near_one,4099,10322096095657499359,218.404442,215.222392,214.209524,180.000000,34.209524,yes,Both,yes,"[0.51562981029195787,1.4311602189230828e-17,-7.9445351348799311e-34,4.4101029133436116e-50]",0.47432005334068853744838691469119725073611186863535411854720463894651210203082909,0.47432005334068853744838691469119725073611186863535411854720463896209252928278415 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,moderate,4099,10322096095657499356,219.852666,215.378850,214.042672,180.000000,34.042672,yes,Both,yes,"[-0.049004188243731761,-1.3601394522814103e-18,7.5502906831193558e-35,-4.1912532795059553e-51]",-0.048964999496442407695752174462954719514280073534987354591187902322123112147473692,-0.048964999496442407695752174462954719514280073534987354591187902320317513639311405 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,near_one,4099,10322096095657499359,216.635189,213.881562,212.956798,180.000000,32.956798,yes,Both,yes,"[1.1332197959754742,3.1453167736324843e-17,-1.7460015509132478e-33,9.6922556142756011e-50]",0.97250944030282146673684576741712972459065785505278761629557943342964766102358922,0.97250944030282146673684576741712972459065785505278761629557943335352570304596911 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,moderate,4099,10322096095657499356,217.749152,214.561309,213.166747,180.000000,33.166747,yes,Both,yes,"[-1.1129700329637249,-3.089112390785367e-17,1.7148018509523894e-33,-9.519062487985893e-50]",-0.95904342784556441854164089194266034008522852163619683195211288936138295400619663,-0.95904342784556441854164089194266034008522852163619683195211288929648167565369013 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,moderate,4099,10322096095657499275,218.344248,215.313498,214.386548,180.000000,34.386548,yes,Both,-,"[1.2091565801750435,3.3560836892183684e-17,-1.8630006921695854e-33,1.0341731316696386e-49]",0.63599796632531509013285885414670992566643851908950877932499299079883667837099078,0.63599796632531509013285885414670992566643851908950877932499299078035785994962717 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,boundary,4101,10322096095657499355,217.097508,214.442677,213.709421,180.000000,33.709421,yes,Both,-,"[1.0000006102559529,2.7755592553634159e-17,-1.5407448957579594e-33,8.552852291720866e-50]",0.0011047677501095367049219422532381969737795314787741324983406649673871900506886361,0.0011047677501095367049219422532381969737795314787741324983406649674385145712399472 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,moderate,4099,10322096095657499356,217.309730,214.164921,213.300563,180.000000,33.300563,yes,Both,yes,"[0.0664478289398438,1.8442977406342098e-18,-1.0237909079581275e-34,5.6831811920850375e-51]",0.066545884848946356015107328012468534613321875154290452987163116978656391412156697,0.066545884848946356015107328012468534613321875154290452987163116974551954049134186 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,boundary,4105,10322096095657499355,219.259597,215.988400,215.075845,180.000000,35.075845,yes,Both,yes,"[0.5,0,0,0]",0.54930614433405484569762261846126285232374527891137472586734716682864483823413374,0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,near_one,4099,10322096095657499359,206.773984,196.847186,196.755396,180.000000,16.755396,yes,Both,yes,"midpoint [1,0,0,0]",0.84270079294971486934122063508260925929606699796630290845993292736409039503759438,0.84270079294971486934122063508260925929606699796630290845993789783471725409601084 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,moderate,4099,10322096095657499356,218.790808,197.061585,196.771033,180.000000,16.771033,yes,Both,yes,"[-1.0144931263435488,-2.8157840679764146e-17,1.5630741523200512e-33,-8.6768045655108495e-50]",-0.84863022897531701967121795328975048026375710416395760800302401037790857858953723,-0.84863022897531701967121795328975048026375710416395760800302896186126856971311395 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,near_one,4099,10322096095657499359,204.316189,192.489437,192.327065,180.000000,12.327065,yes,Both,-,"upper endpoint [1.5,0,0,0]",0.033894853524689272933023738354052141318589520742363219550036458011854403217248196,0.033894853524689272933023738354052141318589520742363219550032153557867145576249274 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,moderate,4099,10322096095657499356,212.004213,191.066815,189.779688,180.000000,9.779688,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804748240804760826674822248354380927724048326045650379,0.0048523201680211414554273497804748240804760826674822248354416949961916711523801507 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,moderate,4099,10322096095657499323,211.903615,199.617279,199.225949,180.000000,19.225949,yes,Both,-,"[1.7460150498866698,4.8461652743155553e-17,-2.6901621343420086e-33,1.4933399707606258e-49]",-0.085381213564840179500933244532026946446305041549633331800426988753669607008088582,-0.085381213564840179500933244532026946446305041549633331800426897893008666204246091 +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,moderate,4099,10322096095657499320,209.040528,202.582542,202.457020,180.000000,22.457020,yes,Both,-,"[14.307075507958793,3.9710111609966271e-16,-2.2043540109909649e-32,1.2236622887134923e-48]",13896751262.208085922946362879642934303109153237904876709680644672275751079246188,13896751262.208085922946362879642934303109153237904876709680646247264671220863527 diff --git a/validation/metrics/data/windows/x86_64/detail/ClangCL_f256_fastmath_benchmark.csv b/validation/metrics/data/windows/x86_64/detail/ClangCL_f256_fastmath_benchmark.csv new file mode 100644 index 0000000..2ee8803 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/ClangCL_f256_fastmath_benchmark.csv @@ -0,0 +1,86 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,40960,9.454694,9.454694|9.442197|9.449754|9.460275|9.467367|9.461612|9.446673,12042240,113855200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,40960,18.681308,18.636364|18.627153|18.681308|18.700284|18.774636|18.676758|18.737349,6307840,117897000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,40960,34.991281,35.186244|34.761091|34.991281,860160,30088000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,40960,96.948242,96.508789|96.948242|97.647298,368640,35770900.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,40960,20.321156,20.361328|20.321156|20.309615,1351680,27480600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,40960,1.524058,1.631354|1.541341|1.604172|1.524058|1.404673|1.345357|1.329073,83435520,123723300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,40960,1.708089,1.708089|1.666866|1.476884|1.755828|1.883448|1.724169|1.508605,79708160,133498500.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,40960,23.214355,23.139404|23.336670|23.214355,1228800,28545200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,4096,81.338266,81.325120|81.338266|81.360802,319488,25987600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,40960,0.959492,0.958052|0.959492|0.958934|0.959859|0.960608|0.958769|0.962466,110387200,105943000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,40960,0.962298,0.965410|0.968407|0.968861|0.962298|0.960968|0.961575|0.959287,109527040,105565400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,40960,8.144748,8.167752|8.136773|8.215007|8.189833|8.144748|8.139540|8.129666,12902400,105289700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,40960,0.649669,0.653193|0.653792|0.650083|0.649669|0.647331|0.647779|0.643802,162283520,105383400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,40960,1.487427,1.489352|1.485877|1.487427|1.489042|1.484976|1.486938|1.489915,74547200,110899900.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,40960,1.599898,1.611469|1.608271|1.599898|1.596781|1.594531|1.596125|1.600544,69386240,111093500.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,40960,4.281944,4.292840|4.294305|4.282432|4.281944|4.253598|4.247379|4.248150,27238400,116349400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,40960,8.790894,8.804765|8.793890|8.787009|8.782848|8.790894|8.800382|8.788952,12615680,110925600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,40960,8.362935,8.379059|8.397675|8.362935|8.360189|8.359375|8.369548|8.339386,13762560,115149700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,4096,6.562383,6.618752|6.600546|6.575465|6.559425|6.554093|6.547677|6.562383,16801792,110455800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,4096,6.568478,6.590337|6.582591|6.591959|6.568478|6.564057|6.534249|6.533519,17260544,113340600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,4096,117.583550,117.583550|121.084256|117.278375,221184,26243200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,4096,160.874721,161.708287|160.874721|160.794503,172032,27718800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,2048,68.531474,68.661149|68.476242|68.531474,374784,25693800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,2048,100.164653,100.103334|100.164653|100.169195,264192,26457700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,2048,99.508146,99.508146|99.304497|99.585556,251904,25055900.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,40960,20.556419,20.371316|20.675382|20.556419,1351680,27755900.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,40960,3.228769,3.249985|3.228750|3.222827|3.232327|3.243929|3.228769|3.226801,36986880,119591200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,40960,3.236709,3.231092|3.243914|3.234347|3.237781|3.235002|3.236709|3.253839,35266560,114226800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,40960,3.252441,3.247148|3.270547|3.252441|3.264551|3.255195|3.247500|3.241836,35840000,116629600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,40960,6.404739,6.383541|6.485731|6.404739|6.460736|6.462286|6.347734|6.343587,18063360,115833500.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,40960,1.083036,1.078875|1.105610|1.085400|1.098166|1.083036|1.080715|1.080786,98918400,107575000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,40960,0.969486,0.966930|0.971794|0.969486|0.968615|0.969753|0.969671|0.969321,110100480,106727800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f256,bl::nextafter,40960,5.661203,5.688511|5.649728|5.671770|5.661203|5.647147|5.687988|5.653843,20070400,113713700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f256,bl::nexttoward,40960,5.651279,5.659281|5.666640|5.697700|5.650194|5.632595|5.627882|5.651279,20643840,116742600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,40960,0.734277,0.735023|0.733105|0.735325|0.736963|0.733332|0.734277|0.734273,157696000,115845700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,40960,0.644019,0.644019|0.645463|0.645125|0.643914|0.643996|0.643914|0.644527,180346880,116219600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,40960,0.840710,0.864314|0.859466|0.851939|0.840710|0.830782|0.827910|0.825438,138199040,116493100.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,40960,0.692103,0.696446|0.694646|0.693555|0.692103|0.691016|0.690714|0.688816,164864000,114163500.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,40960,0.785446,0.787906|0.791419|0.785993|0.783038|0.785446|0.780611|0.783393,145653760,114396600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,40960,0.690875,0.694584|0.690875|0.689153|0.689119|0.688523|0.705970|0.701207,164577280,114250300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,40960,109.141846,109.644775|109.141846|108.967285,245760,26849600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,1024,341.630046,341.630046|341.202799|342.895508,73728,25208300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,4096,165.072867,165.136719|165.072867|164.682242,159744,26352000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,1024,910.253906,910.253906|912.753906|909.980469,30720,27985800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,1024,909.775391,908.632812|910.654297|909.775391,30720,27945600.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,fltx,fltx,fltx bl::f256,bl::sincos,1024,1017.437066,1017.437066|1017.111545|1018.294271,27648,28135000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,1024,1104.150391,1103.186035|1104.846191|1104.150391,24576,27133400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,1024,915.505642,915.332031|915.505642|916.601562,27648,25320400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,1024,977.918837,977.918837|978.656684|977.723524,27648,27042500.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,1024,1381.487165,1381.180246|1381.487165|1381.891741,21504,29708200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,1024,1401.967076,1403.515625|1401.967076|1401.395089,21504,30154900.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,1024,1011.979167,1011.979167|1013.541667|1011.805556,27648,27992000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,1024,858.320312,858.320312|856.982422|859.042969,30720,26361300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,1024,1011.371528,1011.263021|1012.988281|1011.371528,27648,27976300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,1024,1769.257812,1770.058594|1769.257812|1768.066406,15360,27173800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,1024,1798.925781,1798.125000|1799.765625|1798.925781,15360,27631700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,1024,1807.011719,1807.011719|1805.390625|1809.648438,15360,27760900.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,1024,1812.714844,1843.105469|1812.714844|1808.203125,15360,27975800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,1024,2624.560547,2629.028320|2624.560547|2622.436523,12288,32260200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,4096,127.079504,127.079504|127.244658|127.024931,208896,26554100.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,fltx,fltx,fltx bl::f256,bl::product_sum,4096,58.042399,57.775201|58.042399|58.269586,442368,25670200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,1024,1315.359933,1318.205915|1315.359933|1313.839286,21504,28295000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,1024,1314.062500,1314.062500|1312.820871|1318.122210,21504,28277800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,1024,1260.839844,1260.281808|1266.964286|1260.839844,21504,27153000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,1024,2675.537109,2675.537109|2674.829102|2675.585938,12288,32874300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,1024,2489.941406,2464.697266|2489.941406|2502.319336,12288,30543700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,1024,2330.346680,2337.109375|2330.273438|2330.346680,12288,28662700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,128,10403.125000,10485.156250|10403.125000|10400.000000,384,4004900.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,128,10389.062500,10394.531250|10366.406250|10389.062500,384,3987200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,128,9572.656250,9582.812500|9572.656250|9557.812500,384,3675300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,128,10572.656250,10572.656250|10572.656250|10604.687500,384,4064000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,4099,300.292754,300.292754|301.494267|299.277263,98376,29547700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,4099,256.474479,253.405980|266.227535|256.474479,110673,28631400.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,4099,354.891437,354.891437|355.306172|354.602749,73782,26187700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,mt19937_64,fltx,fltx,fltx bl::f256,bl::mt19937_64,64,1.368892,1.371915|1.368892|1.368118|1.367924|1.368076|1.369684|1.374525,83139840,113891300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,uniform_real,fltx,fltx,fltx bl::f256,bl::uniform_real,64,14.343955,14.344607|14.334671|14.343955,1841856,26414200.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,normal,fltx,fltx,fltx bl::f256,bl::normal,64,290.425027,290.340293|290.719902|290.425027,88512,25712300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f256,same workload,64,151.306099,151.306099|151.431718|151.245870,174336,26381900.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f256,same workload,64,1840.349265,1840.349265|1840.395221|1838.970588,13056,24021800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f256,same workload,64,125.520833,125.520833|125.407795|126.031651,209664,26345000.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f256,same workload,64,594.861261,593.056304|594.861261|595.911907,44544,26486300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f256,same workload,64,434.448935,433.916601|434.448935|435.646688,60864,26455800.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,fltx,fltx,fltx bl::f256,same workload,8,244.132369,244.229700|243.971079|244.132369,107880,26334700.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f256,same workload,8,8837.500000,8862.500000|8837.500000|8837.500000,24,212300.000000, +6,081f2f75d252445da1de5098f50b7f37,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,fltx,fltx,fltx bl::f256,same workload,8,4850.884956,4851.216814|4844.026549|4850.884956,5424,26299400.000000, diff --git a/validation/metrics/data/windows/x86_64/detail/ClangCL_fastmath_run.json b/validation/metrics/data/windows/x86_64/detail/ClangCL_fastmath_run.json new file mode 100644 index 0000000..ebe9622 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/ClangCL_fastmath_run.json @@ -0,0 +1,154 @@ +{ + "accuracy_parallel": true, + "accuracy_samples": 4096, + "architecture": "x86_64", + "benchmark_corpus_policy": "adaptive-v1", + "benchmark_fast_minimum_trial_ms": 15, + "benchmark_fast_threshold_ns": 20, + "benchmark_fast_trials": 7, + "benchmark_maximum_row_ms": 5000, + "benchmark_minimum_trial_ms": 8, + "benchmark_ordinary_trials": 3, + "benchmark_policy": "adaptive-v2", + "benchmark_samples": { + "f128": 8192, + "f256": 4096 + }, + "benchmark_slow_threshold_ns": 10000, + "benchmark_trials": 7, + "compiler": "ClangCL", + "configuration": { + "build": { + "architecture": "x86_64", + "compiler-id": "Clang", + "compiler-version": "22.1.8", + "config": "Release", + "flags-hash": "47db04c453478949a87df17aee6c905f188a5d962d12b76bf2ba37d99f614ec7", + "frontend-variant": "MSVC", + "optimized": "1", + "processor": "AMD64", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Windows" + }, + "consumer": { + "arm64": "0", + "fast-math": "on", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "1" + }, + "harness": { + "qdpp": "off", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "available", + "simd": "on", + "tu-x86-fma": "0", + "x86": "1" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "0", + "f256-simd": "1", + "msvc-guarded": "0", + "neon": "0", + "runtime-check": "1", + "runtime-path": "1", + "scalar-x86": "0", + "sse2": "1", + "trig-simd": "1", + "wasm-simd": "0" + } + }, + "consumer_mode": "fastmath", + "created_utc": "2026-08-15T15:59:35.615758+00:00", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-clangcl-release\\validation\\fltx_accuracy_fastmath.exe", + "sha256": "10a63056d8021ca117fcea276fdd5aa23ffd765928873a5fe6256d81b2d5869c", + "wasm-sha256": "not-present" + }, + "benchmark": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-clangcl-release\\validation\\fltx_benchmark_fastmath.exe", + "sha256": "a69ebe797d14061d8dded6a9994d10e2777e2cdc3a0d00add1a3366d97c45bf2", + "wasm-sha256": "not-present" + } + }, + "host": { + "machine": "AMD64", + "node": "not-used", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "implementations": { + "f128": [ + { + "id": "fltx", + "label": "fltx bl::f128", + "short_label": "fltx" + } + ], + "f256": [ + { + "id": "fltx", + "label": "fltx bl::f256", + "short_label": "fltx" + } + ] + }, + "outputs": { + "ClangCL_f128_fastmath.csv": "26139729d519f8d98dd45e2569b7446fad166eb6eb56562b1729736afad88c3c", + "ClangCL_f256_fastmath.csv": "40779e682047aff6f944758a8cf5357830465f91b70af947d84ab20e31e52fcf", + "detail/ClangCL_f128_fastmath_accuracy.csv": "d0217c3ae65cc4aeb76e18f876ddcf5c22b84c0658c9852a0fc5894b65b87022", + "detail/ClangCL_f128_fastmath_benchmark.csv": "43a9066ea3d01e97aa1a7da2abe8a8a4b799b0b6d553c63d0da628829c90204c", + "detail/ClangCL_f256_fastmath_accuracy.csv": "13e8874f5983ae2ce05aea6a8e67af07b254e4709c6b8a080022c96590632575", + "detail/ClangCL_f256_fastmath_benchmark.csv": "6cbf7b69af0f0ccb27622889714e8210c4504814af3074ed38f54005fba62f8f" + }, + "phases": { + "f128.accuracy": { + "output": "ClangCL_f128_fastmath_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f128.benchmark": { + "output": "ClangCL_f128_fastmath_benchmark.csv", + "return_code": 0, + "status": "passed" + }, + "f256.accuracy": { + "output": "ClangCL_f256_fastmath_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f256.benchmark": { + "output": "ClangCL_f256_fastmath_benchmark.csv", + "return_code": 0, + "status": "passed" + } + }, + "phases_requested": [ + "accuracy", + "benchmark" + ], + "platform": "windows", + "precisions": [ + "f128", + "f256" + ], + "run_id": "081f2f75d252445da1de5098f50b7f37", + "sample_mode": "standard", + "schema_version": "6", + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete" +} diff --git a/validation/metrics/data/windows/x86_64/detail/ClangCL_run.json b/validation/metrics/data/windows/x86_64/detail/ClangCL_run.json new file mode 100644 index 0000000..94f2900 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/ClangCL_run.json @@ -0,0 +1,174 @@ +{ + "accuracy_parallel": true, + "accuracy_samples": 4096, + "architecture": "x86_64", + "benchmark_corpus_policy": "adaptive-v1", + "benchmark_fast_minimum_trial_ms": 15, + "benchmark_fast_threshold_ns": 20, + "benchmark_fast_trials": 7, + "benchmark_maximum_row_ms": 5000, + "benchmark_minimum_trial_ms": 8, + "benchmark_ordinary_trials": 3, + "benchmark_policy": "adaptive-v2", + "benchmark_samples": { + "f128": 8192, + "f256": 4096 + }, + "benchmark_slow_threshold_ns": 10000, + "benchmark_trials": 7, + "compiler": "ClangCL", + "configuration": { + "build": { + "architecture": "x86_64", + "compiler-id": "Clang", + "compiler-version": "22.1.8", + "config": "Release", + "flags-hash": "47db04c453478949a87df17aee6c905f188a5d962d12b76bf2ba37d99f614ec7", + "frontend-variant": "MSVC", + "optimized": "1", + "processor": "AMD64", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Windows" + }, + "consumer": { + "arm64": "0", + "fast-math": "off", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "1" + }, + "harness": { + "qdpp": "off", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "available", + "simd": "on", + "tu-x86-fma": "0", + "x86": "1" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "0", + "f256-simd": "1", + "msvc-guarded": "0", + "neon": "0", + "runtime-check": "1", + "runtime-path": "1", + "scalar-x86": "0", + "sse2": "1", + "trig-simd": "1", + "wasm-simd": "0" + } + }, + "consumer_mode": "strict", + "created_utc": "2026-08-15T15:58:02.836755+00:00", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-clangcl-release\\validation\\fltx_accuracy.exe", + "sha256": "b840de3d873ffb6fbdccf0325c947a1fee921b18063a0d5cd763620f758ce962", + "wasm-sha256": "not-present" + }, + "benchmark": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-clangcl-release\\validation\\fltx_benchmark.exe", + "sha256": "9bdaaf0a163ef8672882a15ac89ffb75ed76a60c5ec18bfc36ec69cd6f881173", + "wasm-sha256": "not-present" + } + }, + "host": { + "machine": "AMD64", + "node": "not-used", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "implementations": { + "f128": [ + { + "id": "fltx", + "label": "fltx bl::f128", + "short_label": "fltx" + }, + { + "id": "cppdd", + "label": "boost::multiprecision::cpp_double_double", + "short_label": "cppdd" + }, + { + "id": "tlfloat", + "label": "TLFloat Quad", + "short_label": "tlquad" + } + ], + "f256": [ + { + "id": "fltx", + "label": "fltx bl::f256", + "short_label": "fltx" + }, + { + "id": "mpfr64", + "label": "boost::multiprecision::mpfr_float_backend<64>", + "short_label": "mpfr64" + }, + { + "id": "tlfloat", + "label": "TLFloat Octuple", + "short_label": "tloct" + } + ] + }, + "outputs": { + "ClangCL_f128.csv": "021bdef8e97c7c1776eca3c5ce7a5ec89f9dd9c9cc61bc56fbb8b6cfa29f42f0", + "ClangCL_f256.csv": "f1f3d1fb59a319b2cce08c2d264f6de88bfffc7bed152a01b63035123a060519", + "detail/ClangCL_f128_accuracy.csv": "94f3464d764966576db339f6183f7d83f5f87be838f4e67a50f593232d98a2b2", + "detail/ClangCL_f128_benchmark.csv": "dfc772497ea3a33e485e0c992d005e0b4b89d9d8266ff03271fa959372c74145", + "detail/ClangCL_f256_accuracy.csv": "b20c9647b82e3b972e6bcaa09eefb4851f49becbf51167763f30abb14c478b96", + "detail/ClangCL_f256_benchmark.csv": "6de0b36059bd64d8f1c78d8a8f8ee746043d599f08d7b1cba01592cc63bba1b9" + }, + "phases": { + "f128.accuracy": { + "output": "ClangCL_f128_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f128.benchmark": { + "output": "ClangCL_f128_benchmark.csv", + "return_code": 0, + "status": "passed" + }, + "f256.accuracy": { + "output": "ClangCL_f256_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f256.benchmark": { + "output": "ClangCL_f256_benchmark.csv", + "return_code": 0, + "status": "passed" + } + }, + "phases_requested": [ + "accuracy", + "benchmark" + ], + "platform": "windows", + "precisions": [ + "f128", + "f256" + ], + "run_id": "1bd8465fefb349c8bd408bdef2fbe2ea", + "sample_mode": "standard", + "schema_version": "6", + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete" +} diff --git a/validation/metrics/data/windows/x86_64/detail/MSVC_f128_accuracy.csv b/validation/metrics/data/windows/x86_64/detail/MSVC_f128_accuracy.csv new file mode 100644 index 0000000..79b7726 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MSVC_f128_accuracy.csv @@ -0,0 +1,448 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,moderate,4097,10322096095657499311,109.950521,107.250365,107.040693,106.000000,1.040693,yes,Both,yes,-2.472067804890653694736606692562736837036787645394e-04,-0.00024720678048906536947366066925627220254736992061971280405933562914519934341009422,-0.0002472067804890653694736606692562736837036787645394 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,qdpp,ddreal,qdpp dd_real,qdpp read,moderate,4097,10322096095657499311,106.830416,104.375370,103.521956,,,,NaN,yes,-8.588723799651326893003606507151380025417593648874e-19,-8.5887237996513268930036065071519698388651731130205141161512619653494877453463251e-19,-8.588723799651326893003606507151380025417593648874e-19 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,moderate,4097,10322096095657499311,107.925004,106.160305,106.000000,,,,Both,no,1.0000000000000000000000000000000123259516440783094595582588325435348386438505485784844495356082916259765625,1,1.0000000000000000000000000000000123259516440783094595582588325435348386438505486 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,moderate,4097,10322096095657499311,114.919497,113.157032,113.020059,,,,No,no,-2.472067804890653694736606692562736837036787645394e-04,-0.00024720678048906536947366066925627370718013897314772300404210327361966695130200689,-0.0002472067804890653694736606692562736837036787645394 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,wide_exponent,4098,10322096095657499308,109.923010,107.051396,106.003381,106.000000,0.003381,yes,Both,yes,-4.215228812298638183537364477017984307424253045187e-293,-4.2152288122986381835373644770182307620164082432452873068526743823738143144126931e-293,-4.215228812298638183537364477017984307424253045187e-293 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,qdpp,ddreal,qdpp dd_real,qdpp read,wide_exponent,4098,10322096095657499308,98.230238,0.000000,0.000000,,,,NaN,yes,9.801547763699694900556401135347989457052087638272e-278,nan,9.801547763699694900556401135347989457052087638272e-278 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,wide_exponent,4098,10322096095657499308,106.283030,0.000000,0.000000,,,,Both,no,4.106386782837618869142465736384079482165950265901e-297,0,4.106386782837618869142465736384079482165950265901e-297 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,wide_exponent,4098,10322096095657499308,114.945626,113.184622,113.027719,,,,No,no,-6.994944574485638725989218380619056352714442512346e+274,-6.9949445744856387259892183806190570134846365830973741407546647660305377989961645e+274,-6.994944574485638725989218380619056352714442512346e+274 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,qdpp,ddreal,qdpp dd_real,qdpp to_string,moderate,4099,10322096095657499356,113.984289,107.925749,107.763341,,,,Both,no,"[2.8197433737124644,7.8263600425744884e-17,-4.3445025591362587e-33,2.4116833858479951e-49]",2.819743373712464496453993615178836e+00,2.8197433737124644964539936151788462379117802656936538548058089354714228491616268 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,moderate,4099,10322096095657499356,112.006721,106.046153,106.003594,,,,Both,no,"[4.0283050850804027,1.1180792639177158e-16,-6.2065867107869756e-33,3.4453477353241089e-49]",4.028305085080402859429446057471084e+00,4.0283050850804028594294460574710344708404448549180543678577390200729047009531314 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,moderate,4099,10322096095657499356,110.801332,107.893373,107.362665,,,,Both,yes,"[1.008688938141546,2.7996742095236117e-17,-1.5541313844311742e-33,8.6271622314403006e-50]",1.00868893814154606005353659707718,1.0086889381415460600535365970771848347585370420395131047593302586751207172710565 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,qdpp,ddreal,qdpp dd_real,qdpp to_string,wide_exponent,4096,10322096095657499357,104.905428,102.378174,102.257899,,,,Both,no,"[5.1062396004606193e+260,1.4172661934210349e+244,-7.8674077997944175e+227,4.3672886417236531e+211]",5.106239600460619422853136150472774e+260,5.106239600460619422853136150471931817526062608103033112808468173689091334840783e+260 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,wide_exponent,4096,10322096095657499357,109.529692,106.034942,105.994061,,,,Both,no,"[1.570745732098147e-207,4.3596951940176515e-224,-2.4201169923730179e-240,1.3434348036095544e-256]",1.570745732098147052789232581064327e-207,1.570745732098147052789232581064346440801824340244516345502860090506962770321629e-207 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,wide_exponent,4096,10322096095657499357,110.510134,107.628363,107.304630,,,,Both,yes,"[-1.0005623436112949e+24,-27771183.786254175,1.5416103830298108e-09,-8.5576567112045135e-26]",-1000562343611294930157871.78625418,-1000562343611294930157871.786254175007343292236328125 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,qdpp,ddreal,qdpp dd_real,qdpp write,moderate,4099,10322096095657499356,113.984289,107.925749,107.763341,,,,Both,no,"[2.8197433737124644,7.8263600425744884e-17,-4.3445025591362587e-33,2.4116833858479951e-49]",2.819743373712464496453993615178836e+00,2.8197433737124644964539936151788462379117802656936538548058089354714228491616268 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,qdpp,ddreal,qdpp dd_real,qdpp write,wide_exponent,4096,10322096095657499357,104.905428,102.378174,102.257899,,,,Both,no,"[5.1062396004606193e+260,1.4172661934210349e+244,-7.8674077997944175e+227,4.3672886417236531e+211]",5.106239600460619422853136150472774e+260,5.106239600460619422853136150471931817526062608103033112808468173689091334840783e+260 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,qdpp,ddreal,qdpp dd_real,qdpp operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,qdpp,ddreal,qdpp dd_real,qdpp operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,qdpp,ddreal,qdpp dd_real,qdpp operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,tlfloat,tlquad,TLFloat Quad,TLFloat operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,qdpp,ddreal,qdpp dd_real,qdpp operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,qdpp,ddreal,qdpp dd_real,qdpp operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,tlfloat,tlquad,TLFloat Quad,TLFloat operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,qdpp,ddreal,qdpp dd_real,qdpp operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,general,3845,10322096095657499292,119.108587,106.483519,105.736235,90.000000,15.736235,yes,Both,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,qdpp,ddreal,qdpp dd_real,qdpp operator+,general,3845,10322096095657499292,119.108587,106.483519,105.736235,,,,NaN,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,general,3845,10322096095657499292,119.108587,106.483519,105.736235,,,,Both,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,general,3845,10322096095657499292,125.830155,113.252951,113.031307,,,,No,no,"representative lhs [66971.586500767997,1.8588349332206987e-12,-1.0318606709195925e-28,5.7279773753004665e-45] ; representative rhs [2.1043957799031432,5.8408716194312071e-17,-3.2423350778860755e-33,1.7998575285094606e-49]",66973.690896547901769622371152765318940018706501688624296419333203900237094785552,66973.690896547901769622371152765325250905948269783067590247855466190074480437033 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,subnormal,251,10322096095657499292,inf,inf,inf,90.000000,inf,yes,Both,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312,7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,qdpp,ddreal,qdpp dd_real,qdpp operator+,subnormal,251,10322096095657499292,inf,inf,inf,,,,NaN,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312,7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,subnormal,251,10322096095657499292,inf,inf,inf,,,,Both,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,subnormal,251,10322096095657499292,inf,inf,inf,,,,No,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312,7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,general,3844,10322096095657499292,118.876961,106.530508,105.744857,90.000000,15.744857,yes,Both,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,qdpp,ddreal,qdpp dd_real,qdpp operator-,general,3844,10322096095657499292,118.876961,106.530508,105.744857,,,,NaN,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,general,3844,10322096095657499292,118.876961,106.530508,105.744857,,,,Both,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,general,3844,10322096095657499292,126.002774,113.274079,113.013310,,,,No,no,"representative lhs [547185574853.96362,1.5187450598640562e-05,-8.4307286699839347e-22,4.6799945418917936e-38] ; representative rhs [-7665751255.1039944,-2.1276733861164116e-07,1.1810959910743055e-23,-6.556399817915812e-40]",554851326109.06763281659977318970354064704610802527540158735064323991537094116211,554851326109.06763281659977318970348770748690463150420981719435076229274272918701 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,subnormal,252,10322096095657499292,inf,inf,inf,90.000000,inf,yes,Both,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310,-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,qdpp,ddreal,qdpp dd_real,qdpp operator-,subnormal,252,10322096095657499292,inf,inf,inf,,,,NaN,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310,-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,subnormal,252,10322096095657499292,inf,inf,inf,,,,Both,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,subnormal,252,10322096095657499292,inf,inf,inf,,,,No,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310,-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,general,4092,10322096095657499292,108.673668,105.665876,105.380753,90.000000,15.380753,yes,Both,yes,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60037994384765625,-156159778640594921198000750.60038290050850297752267811067325203046404306830015704 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,qdpp,ddreal,qdpp dd_real,qdpp operator*,general,4092,10322096095657499292,108.673668,105.665876,105.380753,,,,NaN,no,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60037994384765625,-156159778640594921198000750.60038290050850297752267811067325203046404306830015704 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,general,4092,10322096095657499292,108.517210,105.172405,104.685792,,,,Both,no,"broad lhs [-8038039671158.3145,-0.00022310041789425956,1.2384561037485062e-20,-6.8748124068457664e-37] ; broad rhs [2.5635359082663138e-69,7.1152414745265618e-86,-3.9497524553936191e-102,2.1925530587738712e-118]",-2.0605803329083492881294378674856916780067042740122006434502346656412091808499997e-56,-2.0605803329083492881294378674857548356708679074621085271346648345255418966878113e-56 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,general,4092,10322096095657499292,114.944521,113.125729,113.004612,,,,No,no,"structured lhs [6.7508285404035795e-17,1.8737313202131732e-33,-1.0401298268309784e-49,5.7738804117356459e-66] ; balanced-product rhs [14812996567977088,0.41114324633653965,-2.2823034925097943e-17,1.2669329432833911e-33]",1.0000000000000000329652822598848238397673215012480593411198684057546474598932029,1.000000000000000032965282259884823743778146023579451637148032704768423970088877 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,subnormal,8,10322096095657499292,123.430323,107.640342,107.640342,90.000000,17.640342,yes,Both,yes,"extreme lhs [5.3610920538229009e+270,1.4880019588222884e+254,-8.2600701768591933e+237,4.5852600476843326e+221] ; extreme rhs [2.8682136140660301e-295,7.9608919846980822e-312,-0,0]",1.5376757215036059473819023136396346852543747719615695276077139367073548105554037e-24,1.5376757215036059473819023136396286054027234522232977278134529923886643804961882e-24 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,qdpp,ddreal,qdpp dd_real,qdpp operator*,subnormal,8,10322096095657499292,123.430323,107.640342,107.640342,,,,NaN,no,"extreme lhs [5.3610920538229009e+270,1.4880019588222884e+254,-8.2600701768591933e+237,4.5852600476843326e+221] ; extreme rhs [2.8682136140660301e-295,7.9608919846980822e-312,-0,0]",1.5376757215036059473819023136396346852543747719615695276077139367073548105554037e-24,1.5376757215036059473819023136396286054027234522232977278134529923886643804961882e-24 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,subnormal,8,10322096095657499292,123.759111,108.124902,108.124902,,,,Both,no,"extreme lhs [4.6055401956920925e+270,1.2782941915235026e+254,-7.0959582183699609e+237,3.9390480979062175e+221] ; extreme rhs [-2.5697135742832743e-293,-7.1323879421527558e-310,0,-0]",-1.1834919157777218149998406915973471377624231448348574550693011367000657931522837e-22,-1.1834919157777218149998406915973504822263386136173231246119304206039636122242069e-22 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,subnormal,8,10322096095657499292,129.709469,113.478226,113.478226,,,,No,no,"extreme lhs [4.6055401956920925e+270,1.2782941915235026e+254,-7.0959582183699609e+237,3.9390480979062175e+221] ; extreme rhs [-2.5697135742832743e-293,-7.1323879421527558e-310,0,-0]",-1.1834919157777218149998406915973504004146571440971208102163557649738436437344127e-22,-1.1834919157777218149998406915973504822263386136173231246119304206039636122242069e-22 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,general,4096,10322096095657499292,110.882649,105.971646,105.124683,90.000000,15.124683,yes,Both,yes,"representative lhs [3.8069729471352109e-08,1.05664725500865e-24,-5.8655705570878625e-41,3.2560457425211756e-57] ; representative rhs [-10239996542.103203,-2.8421699832812405e-07,1.5777212776686647e-23,-8.7581124445438569e-40]",-3.717748274115425677507007818785488818087130701795158032304321273801830518128672e-18,-3.7177482741154256775070078187854047565702465103661629499646177206025402808246684e-18 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,qdpp,ddreal,qdpp dd_real,qdpp operator/,general,4096,10322096095657499292,110.709255,106.129356,105.462052,,,,NaN,no,"representative lhs [2304839803122757,0.06397215543748494,-3.5511679950797592e-18,1.9712942362247516e-34] ; representative rhs [-8.3386726388707522e-25,-2.3144465896215306e-41,1.284775946531497e-57,-7.1319391866192352e-74]",-2764036799308726961546172644065389051904,-2764036799308726961546172644065339586378.6678437169004336514100795996282854437548 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator/,general,4096,10322096095657499292,110.882649,105.971646,105.124683,,,,NaN,no,"representative lhs [3.8069729471352109e-08,1.05664725500865e-24,-5.8655705570878625e-41,3.2560457425211756e-57] ; representative rhs [-10239996542.103203,-2.8421699832812405e-07,1.5777212776686647e-23,-8.7581124445438569e-40]",-3.717748274115425677507007818785488818087130701795158032304321273801830518128672e-18,-3.7177482741154256775070078187854047565702465103661629499646177206025402808246684e-18 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,general,4096,10322096095657499292,114.933605,113.147176,113.003421,,,,No,no,"representative lhs [-3.9611127833857948e-14,-1.0994296538129874e-30,6.1030605780942182e-47,-3.3878791872411597e-63] ; representative rhs [196137443940584.88,0.0054439076563490806,-3.0219758120059617e-19,1.6775335631746611e-35]",-2.019559704563968272888412224331062020056879659920556289291944695251743532234808e-28,-2.0195597045639682728884122243310618260409213965686229269660661328516718265119011e-28 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,subnormal,4,10322096095657499292,inf,inf,inf,90.000000,inf,yes,Both,yes,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,qdpp,ddreal,qdpp dd_real,qdpp operator/,subnormal,4,10322096095657499292,inf,inf,inf,,,,NaN,no,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator/,subnormal,4,10322096095657499292,inf,inf,inf,,,,NaN,no,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,subnormal,4,10322096095657499292,inf,inf,inf,,,,No,no,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,moderate,4099,10322096095657499356,109.099094,104.680325,99.580200,90.000000,9.580200,yes,Both,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50] ; [-2.2467526986846895,-6.2359914417961224e-17,3.4616706400237409e-33,-1.9216132241116296e-49] ; [-0.82478157060333857,-2.2892287249258141e-17,1.2707772195229639e-33,-7.0542306414176576e-50]",-0.0025616587031475578614921195531973426573882576399799792521563357797220739087151742,-0.0025616587031475578614921195531946393591985326302623011385541559314120186541712416 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,moderate,4099,10322096095657499356,108.177888,103.664946,99.580200,,,,Both,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50] ; [-2.2467526986846895,-6.2359914417961224e-17,3.4616706400237409e-33,-1.9216132241116296e-49] ; [-0.82478157060333857,-2.2892287249258141e-17,1.2707772195229639e-33,-7.0542306414176576e-50]",-0.0025616587031475578614921195531973426573882576399799792521563357797220739087151742,-0.0025616587031475578614921195531946393591985326302623011385541559314120186541712416 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,moderate,4099,10322096095657499356,114.897442,113.182994,113.025245,,,,No,no,"[-7.5997781556486999,-2.1093621726111233e-16,1.1709312256531064e-32,-6.4999740348631675e-49] ; [7.5770165974677148,2.1030445711189046e-16,-1.1674242523345727e-32,6.4805064222382565e-49] ; [-6.6174929362548802,-1.8367232557811253e-16,1.019586224216343e-32,-5.6598405085780568e-49]",-64.201138158677660631610513778239055170095124556316768571493974662039994072415539,-64.201138158677660631610513778239061245199688185888259072502568550744850022381024 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,cancellation,4098,10322096095657499352,123.613534,107.447694,107.008989,90.000000,17.008989,yes,Both,no,"one plus a low-limb delta [1,2.3375830000300188e-20,0,0] ; one plus a low-limb delta [1,9.1191608041326794e-20,0,0] ; native product cancellation",6.0206627557371401035138369829719396083930638942820518512027281512011279702649282e-36,6.0206627557371401035138369829719764831182728766548123483364806462892589095319671e-36 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,cancellation,4098,10322096095657499352,0.067350,0.000000,0.000000,,,,Both,no,"next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; one plus a low-limb delta [1,1.5333665360408769e-34,0,0] ; native product cancellation",0,1.5333665360408772917815245989544684211394174303105262982511956907436790017967341e-34 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,wide_exponent,4096,10322096095657499357,119.616115,106.579100,105.347039,90.000000,15.347039,yes,Both,no,"[1.6938644702759635e-90,4.701418338737172e-107,-2.6098114440304809e-123,1.448736377546434e-139] ; [79428146.335863903,2.2045739216343092e-09,-1.2237843636432928e-25,6.7933678884651449e-42] ; [9.2909522372705566e-90,2.5787572736275956e-106,-1.4314978500504758e-122,7.9464093641372402e-139]",1.3454052430915206938868087189563345722550509265256751578481158995824810109214383e-82,1.3454052430915206938868087189563606478535306154783196089715180736698264946825388e-82 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,wide_exponent,4096,10322096095657499357,119.061442,105.416426,104.112253,,,,Both,no,"[8.5721586263015062e-78,2.3792519694147713e-94,-1.3207501589145139e-110,7.331636181021139e-127] ; [8.4624728507206641e+70,2.3488080510338416e+54,-1.3038503893413553e+38,7.2378236145662375e+21] ; [-3.7357185346303535e-07,-1.0368701826663922e-23,5.7557857517176024e-40,-3.1951029331831484e-56]",3.5184474300843906574404451871894785272491595392222950262976866790968099472984533e-07,3.518447430084390657440445187189639014267579136229292612265977276091417324873532e-07 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,wide_exponent,4096,10322096095657499357,125.365166,113.230161,113.032601,,,,No,no,"[-1.3853028727925241e-16,-3.8449878636340866e-33,2.1343970278054273e-49,-1.1848283619805429e-65] ; [-2.7840252040715031e-18,-7.7272222067423321e-35,4.2894700051600743e-51,-2.3811341815838518e-67] ; [-1.0194028502696682e-51,-2.8294112893447415e-68,1.5706387797824414e-84,-8.7187966834181365e-101]",3.8567181131270467416103884341803196252968876035993596157940944011043867018129791e-34,3.8567181131270467416103884341803192622066121759357700299162474901344372908142603e-34 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,qdpp,ddreal,qdpp dd_real,qdpp abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,subnormal,4100,10322096095657499350,inf,inf,inf,90.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,qdpp,ddreal,qdpp dd_real,qdpp abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,qdpp,ddreal,qdpp dd_real,qdpp fabs,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fabs,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0]",8,8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,moderate,4099,10322096095657499356,108.710750,105.621789,105.403238,90.000000,15.403238,yes,Both,yes,"[-2.0216112865291063,-5.6110984928667459e-17,3.114785370110088e-33,-1.7290532173309048e-49]",4.0869121938218684213523234559135312039828584030511109615650764542715833727015706,4.086912193821868421352323455913607387135084308816614946511827134127630171714709 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,qdpp,ddreal,qdpp dd_real,qdpp sqr,moderate,4099,10322096095657499356,108.649492,105.621789,105.403238,,,,NaN,yes,"[-2.0216112865291063,-5.6110984928667459e-17,3.114785370110088e-33,-1.7290532173309048e-49]",4.0869121938218684213523234559135312039828584030511109615650764542715833727015706,4.086912193821868421352323455913607387135084308816614946511827134127630171714709 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,wide_exponent,4096,10322096095657499357,108.714763,105.598081,105.370295,90.000000,15.370295,yes,Both,yes,"[4.07867604911808e+17,11.320600149295146,-6.2841954691612277e-16,3.4884292505539414e-32]",166355983136494714602069966978531328,166355983136494714602069966978534500.62754285635655510754919878168120152773808347 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,qdpp,ddreal,qdpp dd_real,qdpp sqr,wide_exponent,4096,10322096095657499357,108.650741,105.598081,105.370295,,,,NaN,yes,"[4.07867604911808e+17,11.320600149295146,-6.2841954691612277e-16,3.4884292505539414e-32]",166355983136494714602069966978531328,166355983136494714602069966978534500.62754285635655510754919878168120152773808347 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,near_one,4099,10322096095657499359,109.041603,106.207316,105.235269,90.000000,15.235269,yes,Both,yes,"[0.7943239392491388,2.2046918159133699e-17,1.2238498081148352e-33,6.7937311782608489e-50]",1.2589322197002942275560659685836243624199496927685685911021398405984506041477289,1.2589322197002942275560659685835979972909064819121737721490343315675812064184067 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,qdpp,ddreal,qdpp dd_real,qdpp inv,near_one,4099,10322096095657499359,109.434551,106.961274,106.471075,,,,NaN,no,"[0.9803714880397002,2.7210774967692536e-17,1.5105014443513052e-33,8.384967411241868e-50]",1.0200215042968537593600620503816682811592574829905761410992441748021852809813481,1.0200215042968537593600620503816592108504513295376801423995312564714541690785466 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,wide_exponent,4096,10322096095657499357,109.009049,105.925795,105.189487,90.000000,15.189487,yes,Both,yes,"[3.5001788065165318e+43,9.7149477532491364e+26,53928793393.438126,2.9936494057824018e-06]",2.8569969000961575149593584421158660998363524565146662142923865841595715918551683e-44,2.8569969000961575149593584421158043381809410343861907578030166512899574822804677e-44 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,qdpp,ddreal,qdpp dd_real,qdpp inv,wide_exponent,4096,10322096095657499357,109.400778,106.810343,106.537753,,,,NaN,no,"[1.1327896146203641e-35,3.1441227805194653e-52,1.745338751590589e-68,9.6885763389319921e-85]",88277645477455545568826197921745920,88277645477455545568826197921745170.465683891467476748857561440448137587439147607 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,cancellation,4098,10322096095657499352,137.992247,inf,106.227061,90.000000,16.227061,yes,Both,yes,"one plus a low-limb delta [1.0000000000000002,-9.2098754789066345e-17,0,0] ; one plus a low-limb delta [1,9.3157411673208082e-33,0,0]",1.299458501359649542526809416735399539516537488861303804737012764889933880863069e-16,1.2994585013596495425268094167353858549612218168195955651903009493027143470550428e-16 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,cancellation,4098,10322096095657499352,137.992247,inf,106.227061,,,,No,yes,"one plus a low-limb delta [1.0000000000000002,-9.2098754789066345e-17,0,0] ; one plus a low-limb delta [1,9.3157411673208082e-33,0,0]",1.299458501359649542526809416735399539516537488861303804737012764889933880863069e-16,1.2994585013596495425268094167353858549612218168195955651903009493027143470550428e-16 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,tlfloat,tlquad,TLFloat Quad,tlfloat::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,qdpp,ddreal,qdpp dd_real,qdpp floor,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::floor,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,tlfloat,tlquad,TLFloat Quad,tlfloat::floor,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,qdpp,ddreal,qdpp dd_real,qdpp ceil,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ceil,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,tlfloat,tlquad,TLFloat Quad,tlfloat::ceil,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,qdpp,ddreal,qdpp dd_real,qdpp aint,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::trunc,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,tlfloat,tlquad,TLFloat Quad,tlfloat::trunc,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,qdpp,ddreal,qdpp dd_real,qdpp round,boundary,4108,10322096095657499334,130.441577,0.000000,0.000000,,,,Both,no,"just below -2.5 [-2.5,-5.5511151231257827e-17,0,0]",-4,-3 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::round,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,tlfloat,tlquad,TLFloat Quad,tlfloat::round,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,tlfloat,tlquad,TLFloat Quad,tlfloat::rint,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,moderate,4099,10322096095657499356,110.177573,107.236356,107.022726,90.000000,17.022726,yes,Both,yes,"[-4.0306514937478397,-1.118730523149658e-16,6.2102019257584848e-33,-3.4473545827742784e-49]",-4.0309999999999999999999999999999755453119381486340322364144762336268801306005116,-4.031 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,wide_exponent,4096,10322096095657499357,121.330260,107.340420,107.049597,90.000000,17.049597,yes,Both,yes,"[1.9564201098655394e-06,5.4301566295310004e-23,-3.0143424587131265e-39,1.6732962008842592e-55]",1.9564199999999999999999999999999883500964702027617153338260327688823346504976789e-06,1.95642e-06 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,boundary,4110,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lround,boundary,4110,10322096095657499334,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,boundary,4114,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::llround,boundary,4114,10322096095657499334,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,qdpp,ddreal,qdpp dd_real,qdpp divrem,moderate,4099,10322096095657499356,inf,inf,inf,,,,NaN,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,NaN,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,tlfloat,tlquad,TLFloat Quad,tlfloat::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,NaN,no,"lower endpoint [-8,0,0,0]",0 ; -8,-0 ; -8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0]",0 ; -8,-0 ; -8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,NaN,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,qdpp,ddreal,qdpp dd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,tlfloat,tlquad,TLFloat Quad,tlfloat::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,qdpp,ddreal,qdpp dd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,qdpp,ddreal,qdpp dd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,90.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,near_one,4099,10322096095657499359,109.483067,105.751120,104.669867,90.000000,14.669867,yes,Both,yes,"[1.0434745107555559,2.8962235686257217e-17,1.6077270451751567e-33,8.9246779143301406e-50]",1.0215060013311502277290127699241048631609354594130696894861318971964303514710082,1.0215060013311502277290127699240732060505168443174685619534358207641504292216177 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,near_one,4099,10322096095657499359,107.972082,104.206672,103.521359,,,,NaN,no,"[0.71443151353648249,1.9829457896150051e-17,1.1007560361070452e-33,6.1104234789058085e-50]",0.84524050632733078181601151278838316443423641967351333616263828890646792046936753,0.84524050632733078181601151278844123367639711927686107208563401334537132439409523 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,near_one,4099,10322096095657499359,109.483067,105.751120,104.669867,,,,Both,no,"[1.0434745107555559,2.8962235686257217e-17,1.6077270451751567e-33,8.9246779143301406e-50]",1.0215060013311502277290127699241048631609354594130696894861318971964303514710082,1.0215060013311502277290127699240732060505168443174685619534358207641504292216177 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,near_one,4099,10322096095657499359,114.893514,113.139700,113.011246,,,,No,no,"[1.0026950548444753,2.7830378414153015e-17,1.5448963449711814e-33,8.5758974642312711e-50]",1.0013466207285443899676629818717478499906807043598557441898300032149648347568061,1.0013466207285443899676629818717477543132417661775742648846457214830114205814083 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,wide_exponent,4096,10322096095657499357,109.554369,105.974012,105.134919,90.000000,15.134919,yes,Both,yes,"[1.1645444442808547e-62,3.2322601380997815e-79,1.7942648134482328e-95,9.9601705408249462e-112]",1.0791406045001062461937244900901782471018853969286737164352073021695624156016746e-31,1.0791406045001062461937244900901540193152963432252732200525801490754009153911073e-31 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,wide_exponent,4096,10322096095657499357,108.067737,104.201417,103.244333,,,,NaN,no,"[3.9723050169707548e-164,1.1025361226687388e-180,6.120304944338899e-197,3.3974517334661164e-213]",1.9930642280094123730625261552127116945974136006779439913897992305033810507934317e-82,1.9930642280094123730625261552128776075292011527767378186913898640893150824459982e-82 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,wide_exponent,4096,10322096095657499357,109.554369,105.974012,105.134919,,,,Both,no,"[1.1645444442808547e-62,3.2322601380997815e-79,1.7942648134482328e-95,9.9601705408249462e-112]",1.0791406045001062461937244900901782471018853969286737164352073021695624156016746e-31,1.0791406045001062461937244900901540193152963432252732200525801490754009153911073e-31 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,wide_exponent,4096,10322096095657499357,115.008272,113.213152,113.048418,,,,No,no,"[3.2184369798376745e+141,8.9329570958020924e+124,4.9587873228740766e+108,2.75267993003707e+92]",56731269859202645932411245930365626819033560927736571074222411518836736,56731269859202645932411245930365621536311029635164147191486159156902261.890013455 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,extreme_finite,4096,10322096095657499354,109.462818,106.258948,105.096134,90.000000,15.096134,yes,Both,yes,"[1.3220615149200299e+307,3.6694578345875804e+290,2.0369582879251504e+274,1.1307389957277705e+258]",3.6360163846165902232928621254916330482868374851642045295187667520670879059664215e+153,3.6360163846165902232928621254915491917111449494286729393569803221869869190043071e+153 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,extreme_finite,4096,10322096095657499354,98.054461,55.311139,55.311139,,,,NaN,no,"[4.4501477170144028e-308,0,0,0]",2.1095373229725998297233013881191508973971792115572731090863056832759011817789658e-154,2.1095373229725997825305399118428952353362442939022476368457472326927562550301553e-154 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,extreme_finite,4096,10322096095657499354,99.075519,54.379751,54.379751,,,,Both,no,"[4.4501477170144028e-308,0,0,0]",2.1095373229725996925287841451839082884122437148964001557167765265107074071004867e-154,2.1095373229725997825305399118428952353362442939022476368457472326927562550301553e-154 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,extreme_finite,4096,10322096095657499354,114.998426,113.400132,113.089186,,,,No,no,"[1.2100084684275982e+307,3.3584481540993534e+290,1.864313233845479e+274,1.0349017386643172e+258]",3.4785175986727424967005535821835381192527716211870969057349865948795513924365055e+153,3.4785175986727424967005535821835378043641146296572772642207472485040396982804778e+153 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,subnormal,4100,10322096095657499350,110.498955,106.653014,106.214358,90.000000,16.214358,yes,Both,yes,"[9.5745039639339057e-314,0,0,0]",3.0942695364065984592266695010140804816710164393335370623177724037590908372789884e-157,3.0942695364065984592266695010140476078219969118554123365016956606210529423634246e-157 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,subnormal,4100,10322096095657499350,56.488005,52.162020,52.038891,,,,NaN,no,"[1.3519382223988141e-311,0,0,0]",3.6768712547474564367129674222568237169536533373975253600759054544547112450924393e-156,3.6768712547474572314279752410723710632525705235788697221140464056470332513805298e-156 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,subnormal,4100,10322096095657499350,136.077182,54.203493,52.856137,,,,Both,no,"[2.2808542441585355e-308,0,0,0]",1.5102497290708368298203124345003253345331819466760323292298625271598666264010766e-154,1.5102497290708366445669588428608119550768311386114505932804710381323871783374605e-154 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,subnormal,4100,10322096095657499350,115.748346,113.182628,113.057490,,,,No,no,"[3.3473090784781747e-316,0,0,0]",1.8295652703519966884871325261523154568283013418382798220004886925664373028422914e-158,1.8295652703519966884871325261523152875301365777253845679302788817070239592338861e-158 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,moderate,4099,10322096095657499356,108.134138,104.279589,103.154742,90.000000,13.154742,yes,Both,yes,"[-5.9112302503110126,-1.6406959819390034e-16,9.1076922777933078e-33,-5.0557848340034338e-49]",-1.8081146236170408256662159398260846805204664291606354162902101437304658304583427,-1.8081146236170408256662159398259245204126936694753799586379567762813578965663977 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,qdpp,ddreal,qdpp dd_real,qdpp nroot,moderate,4099,10322096095657499356,107.500879,104.049844,103.018188,,,,NaN,no,"[7.7570819110982878,2.1530227354011577e-16,-1.1951677066919007e-32,6.6345135312889697e-49]",1.9795484049074845800164972757971712489223706094688856655986914918725350087669312,1.9795484049074845800164972757969784957350204626750435952829757873726542357407338 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,moderate,4099,10322096095657499356,108.562197,105.566437,104.600252,,,,Both,no,"[-5.4359803461266463,-1.5087876354199076e-16,8.3754538605646392e-33,-4.6493108588422589e-49]",-1.7582985823855373734893631229630491426724707896779619814085811736574516128683854,-1.7582985823855373734893631229629919580574226691808687607708137148977336669671777 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,moderate,4099,10322096095657499356,115.120076,113.301989,113.021191,,,,No,no,"[-0.12734564822864947,-3.5345517687315605e-18,1.9620703776876749e-34,-1.0891678546219169e-50]",-0.50310816950005327602384340490057847852046360556811795630525693376382473723240629,-0.50310816950005327602384340490057852626159976956627613790876407903204245377117839 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,wide_exponent,4096,10322096095657499357,107.940958,104.101707,103.019576,90.000000,13.019576,yes,Both,yes,"[2.9828051152340277e-55,8.2789472922562771e-72,-4.5957389517605069e-88,2.5511475997055982e-104]",6.6815151845441513626509033780520045477856444490717657200631959144352644689019878e-19,6.6815151845441513626509033780513545789151896608767546149873769328352874764005102e-19 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,qdpp,ddreal,qdpp dd_real,qdpp nroot,wide_exponent,4096,10322096095657499357,95.559237,89.370444,89.005643,,,,NaN,no,"[-3.4549134864131214e-250,-9.5893112517595507e-267,5.3231370710002672e-283,-2.9549346697301067e-299]",-7.0169070814352191767828847049923788864839571517004742553964479142878370319723312e-84,-7.0169070814352191767828846937002129458982875040557676645893689632408040463794305e-84 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,wide_exponent,4096,10322096095657499357,108.226509,105.391162,104.688938,,,,Both,no,"[-2.5093388050492908e+220,-6.9648142948777493e+203,3.8662485962058509e+187,-2.1461991052162126e+171]",-29276541249127547258888263930375634305818369506660520834833227626443702272,-29276541249127547258888263930374738922229461259377145616398423692846763008.357894 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,wide_exponent,4096,10322096095657499357,114.945588,113.203933,113.028879,,,,No,no,"[-6.0253985814299791e+20,-16723.840594118297,9.2835964438754955e-13,-5.1534312616594e-29]",-8446211.0069017797205775974332527170734424995574270785166082209372007127967663109,-8446211.0069017797205775974332527162762210477168824322444258883093409908788493932 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,moderate,4099,10322096095657499356,108.682153,105.556470,104.448638,90.000000,14.448638,yes,Both,yes,"[2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49] ; [7.6161438781938315,2.1139045731071814e-16,-1.1734527644620026e-32,6.5139713870787798e-49]",8.0914622723995239714248451353921972400978668058729318673943800913073154390531272,8.0914622723995239714248451353919049231629452774327450009049705044051673057483058 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,moderate,4099,10322096095657499356,107.822875,104.898769,104.258205,,,,Both,yes,"[-1.3812728338831572,-3.8338022586658006e-17,2.128187769715351e-33,-1.1813815313318215e-49] ; [5.7084223966267196,1.5844054947552254e-16,-8.7952173030993197e-33,4.8823263782412195e-49]",5.8731593627223457932834487849635333739185201884555156890126582230893248492975545,5.8731593627223457932834487849632912571541598546275170519229698090249476736042578 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,moderate,4099,10322096095657499356,114.999147,113.150622,113.012814,,,,No,yes,"[-4.3730961569334426,-1.2137780105818237e-16,6.7378214706582879e-33,-3.7402422662692824e-49] ; [-6.7563038999618339,-1.8752510377755921e-16,1.0409734395453408e-32,-5.7785634030324038e-49]",8.0480812860224973255103414066425067013553335932596541895380453632323838886186707,8.0480812860224973255103414066425074695044837774480341865898326900589136068326501 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,wide_exponent,4096,10322096095657499357,136.086569,107.303893,104.375984,90.000000,14.375984,yes,Both,yes,"[-1.0904439541376617e-171,-3.0265899623673255e-188,1.6800949311597954e-204,-9.3264003806481111e-221] ; [-6.6064316563514781e-178,-1.8336531338734802e-194,1.0178819642012061e-210,-5.6503799650342919e-227]",1.0904439541378618053723797776842685378887910042683910204594308964030285890648591e-171,1.090443954137861805372379777684227109194726424167261957374676671431464584983977e-171 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,wide_exponent,4096,10322096095657499357,136.075898,106.558614,104.375984,,,,Both,yes,"[-1.0904439541376617e-171,-3.0265899623673255e-188,1.6800949311597954e-204,-9.3264003806481111e-221] ; [-6.6064316563514781e-178,-1.8336531338734802e-194,1.0178819642012061e-210,-5.6503799650342919e-227]",1.0904439541378618053723797776842685378887910042683910204594308964030285890648591e-171,1.090443954137861805372379777684227109194726424167261957374676671431464584983977e-171 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,wide_exponent,4096,10322096095657499357,142.925810,113.798728,113.017880,,,,No,yes,"[-2.5387398996340912e+175,-7.0464187252708178e+158,3.9115481549727536e+142,-2.1713454117904006e+126] ; [-1.2492509467162383e+176,-3.4673679114478559e+159,1.9247758450679253e+143,-1.0684652302183768e+127]",1.2747862293935241998715278949185518204872807338309159207365404839623318589574331e+176,1.2747862293935241998715278949185519417327664706045321099892601682646620979899304e+176 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,moderate,4099,10322096095657499356,109.289129,105.940176,105.022316,80.000000,25.022316,yes,Both,yes,"[-2.6398923795068718,-7.3271732556525522e-17,4.0673982269215659e-33,-2.2578595809239299e-49]",-0.48091697577772919399226624691062015405871262531310584383165433654955256415064468,-0.48091697577772919399226624691060848051161030920422183238229214193978802883324422 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,qdpp,ddreal,qdpp dd_real,qdpp sin,moderate,4099,10322096095657499356,106.651984,101.732710,97.389662,,,,Both,no,"[6.2844284435634243,1.7442792886633375e-16,-9.6826951382541352e-33,5.3749755414579021e-49]",0.0012431360636500376406651182820628737826713630510232888601894262622072011672310493,0.0012431360636500376406651182820688621589555923240867697280247701026819500889579145 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,moderate,4099,10322096095657499356,105.208184,98.842806,94.535168,,,,Both,no,"[6.2844284435634243,1.7442792886633375e-16,-9.6826951382541352e-33,5.3749755414579021e-49]",0.0012431360636500376406651182821121730753493691312774912955712974681383737457496252,0.0012431360636500376406651182820688621589555923240867697280247701026819500889579145 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,moderate,4099,10322096095657499356,115.094324,113.249179,113.045938,,,,No,no,"[6.5381038876502018,1.8146883683651254e-16,-1.0073544045392099e-32,5.5919402693849756e-49]",0.2521666211082424428698227592038028825451917195456792597336083477088111096803269,0.25216662110824244286982275920380290606693590184617967372759389209466870282434292 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,argument_reduction,4110,10322096095657499353,107.878813,98.777563,98.619216,80.000000,18.619216,yes,Both,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107778446817142530158141594307620809510923605317049154659252158834084e-08,2.983455547010777844681714253021942987548016308835936187833122791508178595472033e-08 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,qdpp,ddreal,qdpp dd_real,qdpp sin,argument_reduction,4110,10322096095657499353,15.652408,0.000000,0.000000,,,,Both,no,"below 2^159 * pi/2 [1.1478607017620547e+48,4.4745582552647293e+31,0,0]",0,0.021365912798790453936390424940051299694178385353250054265686403111677266065263432 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,argument_reduction,4110,10322096095657499353,13.903457,0.000000,0.000000,,,,Both,no,"below 2^159 * pi/2 [1.1478607017620547e+48,4.4745582552647293e+31,0,0]",0,0.021365912798790453936390424940051299694178385353250054265686403111677266065263432 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,argument_reduction,4110,10322096095657499353,115.121400,113.247632,113.016004,,,,No,no,"near 2^76 * pi/2 [-1.1868601480113558e+23,-4626584.798117674,-0,-0]",-2.991546159228189837237259988878058058522824214333998724226921577853581648471192e-08,-2.9915461592281898372372599888780577736253933802297625994170074222835607860644083e-08 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,quadrant_boundaries,4315,10322096095657499369,114.302289,100.269139,100.230956,80.000000,20.230956,yes,Both,yes,"below random k*pi/2, exponent 43, quadrant 2, offset bits 64 [-15189111743596.248,-2.2040936843613776e-05,0,0]",8.2340339752651274439911770999089811880423371828520810609536481004607152164951472e-07,8.2340339752651274439911770999034465622958436535312599533652322394306622926203602e-07 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,qdpp,ddreal,qdpp dd_real,qdpp sin,quadrant_boundaries,4315,10322096095657499369,36.047007,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,0,0]",0,-2.3958158477746716437132754143003601519786715229456446471729141723273547177369775e-32 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,quadrant_boundaries,4315,10322096095657499369,35.860103,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,0,0]",-1.9721522630525295135293214132069655741830160877725575119256973138760586841205045e-31,-2.3958158477746716437132754143003601519786715229456446471729141723273547177369775e-32 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,quadrant_boundaries,4315,10322096095657499369,118.124335,113.301358,113.056664,,,,No,no,"below random k*pi/2, exponent 98, quadrant 2, offset bits 64 [5.2509035675505552e+29,24361744657474.965,0,0]",0.00050104453726438394320632816150931384605222803849832956072091239859583674922988063,0.00050104453726438394320632816150931379966169648997739743564579442804004531880567156 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,moderate,4099,10322096095657499356,109.267445,105.979013,105.328054,80.000000,25.328054,yes,Both,-,"[1.3052020301228939,3.6226633640748349e-17,-2.010982138630954e-33,1.1163193362090118e-49]",0.26248277312553705702695162816852912212589596287237225345705224528736199118839068,0.26248277312553705702695162816852396749826395623085371572470338778345559864971624 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,qdpp,ddreal,qdpp dd_real,qdpp cos,moderate,4099,10322096095657499356,106.561680,101.428179,96.274235,,,,Both,-,"[-7.8532640731814176,-2.1797186481268875e-16,1.2099869151776452e-32,-6.7167766636269399e-49]",0.00071756073148736779053384844771750344546407180118876038357207392812321016320464828,0.00071756073148736779053384844771001440463095337439754636415552650561600172620895545 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,moderate,4099,10322096095657499356,105.096924,98.858609,93.965626,,,,Both,-,"[-1.5710057703990365,-4.3604169452899814e-17,2.4205176448133145e-33,-1.3436572103915992e-49]",-0.00020944360260871006193062533305160960273584796505827979128681216249836620751229033,-0.00020944360260871006193062533304078043778399835827433173896692012466864520641420855 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,moderate,4099,10322096095657499356,115.039634,113.213457,113.010990,,,,No,-,"[5.2369706645778571,1.4535513527752112e-16,-8.0688308966304143e-33,4.4791009216229662e-49]",0.50085098214838463855968162916383300055843951821959226717067697020859201942344363,0.50085098214838463855968162916383295269424197487894136066019138473249540678149535 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,argument_reduction,4110,10322096095657499353,117.900119,105.731702,99.209588,80.000000,19.209588,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1273107444367091e-17,-0,-0]",-4.076748699943230335115082501060544610987236354894355627499358880133086316429937e-20,-4.0767486999432303351150825010549823398817902769691808721665498735571977321034076e-20 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,qdpp,ddreal,qdpp dd_real,qdpp cos,argument_reduction,4110,10322096095657499353,54.253594,0.000000,0.000000,,,,Both,-,"near 2^126 * pi/2 [1.3362857300812084e+38,5.211837175288784e+21,0,0]",1,0.12389438145972806630180177273660243986440796037880327575695354625393002465936553 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,argument_reduction,4110,10322096095657499353,53.212790,0.000000,0.000000,,,,Both,-,"near 2^126 * pi/2 [1.3362857300812084e+38,5.211837175288784e+21,0,0]",1,0.12389438145972806630180177273660243986440796037880327575695354625393002465936553 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,argument_reduction,4110,10322096095657499353,118.819573,113.370594,113.060433,,,,No,-,"near 2^80 * pi/2 [-1.8989762368181692e+24,-73976767.197321281,-0,-0]",-0.12942023716847009375826722037243897339068070281783466012127372257569724641607101,-0.12942023716847009375826722037243896143922841764928503089856138759520111599980159 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,quadrant_boundaries,4315,10322096095657499369,113.389741,100.266388,100.241282,80.000000,20.241282,yes,Both,-,"below random k*pi/2, exponent 32, quadrant 1, offset bits 64 [6759185830.8093033,2.5452908459680444e-07,0,0]",3.6641619809983954738175143693267979746715518809894967024037216566072372430296582e-10,3.6641619809983954738175143693292433300620783220933192304310816115127405346807142e-10 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,qdpp,ddreal,qdpp dd_real,qdpp cos,quadrant_boundaries,4315,10322096095657499369,31.587720,0.000000,0.000000,,,,Both,-,"nearest -15 * pi/2 [-23.56194490192345,8.5787174003973557e-16,0,0]",-1.232595164407830945955825883254353483864385054857848444953560829131386480552052e-32,1.0134821928809237200253698176522341586156194979036934117710462075918197333039617e-32 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,quadrant_boundaries,4315,10322096095657499369,33.114490,0.000000,0.000000,,,,Both,-,"nearest -15 * pi/2 [-23.56194490192345,8.5787174003973557e-16,0,0]",9.8607613152626475676466070660348278709150804388627875596284866173206592926506306e-32,1.0134821928809237200253698176522341586156194979036934117710462075918197333039617e-32 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,quadrant_boundaries,4315,10322096095657499369,117.776775,113.250616,113.050939,,,,No,-,"below random k*pi/2, exponent 125, quadrant 1, offset bits 64 [1.0722390890202377e+38,7.0208708334792359e+21,0,0]",0.25132271638165246986440048084991865200928286725260385276945855894414915722434589,0.25132271638165246986440048084991867537117391753101066720201827935805516002807079 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,moderate,4099,10322096095657499356,106.990413,104.358303,103.662452,75.000000,28.662452,yes,Both,yes,"[1.0283589742402928,2.8542695269537032e-17,-1.5844378736549776e-33,8.7953970420994041e-50]",1.6590692097473263340445844749263504271822370452064470782609014202699238005322968,1.65906920974732633404458447492645378827060656915569642322001914303143546133552 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,qdpp,ddreal,qdpp dd_real,qdpp tan,moderate,4099,10322096095657499356,105.907276,100.656538,96.270873,,,,No,no,"[-7.8532640731814176,-2.1797186481268875e-16,1.2099869151776452e-32,-6.7167766636269399e-49]",-1393.6099046006247994846045908772556716069187365135489617157943387226737286255229,-1393.6099046006247994846045908918344363597240914228696915168530552614615473019289 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,moderate,4099,10322096095657499356,103.349908,97.873923,93.965781,,,,Both,no,"[-1.5710057703990365,-4.3604169452899814e-17,2.4205176448133145e-33,-1.3436572103915992e-49]",4774.554895023094650399553453252461839481804223695521544653525003454319630691316,4774.5548950230946503995534534993010818968099560510757877602371533385327275377315 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,moderate,4099,10322096095657499356,114.964744,113.144915,113.030226,,,,No,no,"[7.8233413976025243,2.1714134372803685e-16,-1.2053765970245592e-32,6.6911842568049228e-49]",32.626609890158811177010429275027148128590854752867790147209289244780577865512328,32.626609890158811177010429275027151205279743971652782283113637869256027936993481 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,argument_reduction,4110,10322096095657499353,106.636659,98.776698,98.614153,75.000000,23.614153,yes,Both,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107791724696498071933228039119120966041628715515577584130136247446007e-08,2.9834555470107791724696498071994731788491203878271025995398127676131094640315383e-08 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,qdpp,ddreal,qdpp dd_real,qdpp tan,argument_reduction,4110,10322096095657499353,14.675028,0.000000,0.000000,,,,No,no,"below 2^159 * pi/2 [1.1478607017620547e+48,4.4745582552647293e+31,0,0]",0,0.02137079126254257846132915638081114263722266664450390178599097407419423953862763 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,argument_reduction,4110,10322096095657499353,12.950427,0.000000,0.000000,,,,Both,no,"below 2^159 * pi/2 [1.1478607017620547e+48,4.4745582552647293e+31,0,0]",0,0.02137079126254257846132915638081114263722266664450390178599097407419423953862763 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,argument_reduction,4110,10322096095657499353,114.901636,113.184394,113.016302,,,,No,no,"near 2^28 * pi/2 [421657428.26631308,1.6436931070387506e-08,0,0]",-2.801550183192147675953312924187040410984604348447289725904902692584357714526975e-17,-2.8015501831921476759533129241870406777328880187547368316806178088235260252825752e-17 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,quadrant_boundaries,4315,10322096095657499369,106.499081,100.252704,100.193377,75.000000,25.193377,yes,Both,yes,"below random k*pi/2, exponent 35, quadrant 3, offset bits 64 [-59550109601.544846,-4.5998843808876405e-07,0,0]",309768431.94980647490490283626492826519224603465385570189027930609881877899169922,309768431.94980647490490283626514197542933150294098619645159482100231149999767842 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,qdpp,ddreal,qdpp dd_real,qdpp tan,quadrant_boundaries,4315,10322096095657499369,9.162214,0.000000,0.000000,,,,No,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,0,0]",0,-2.3958158477746716437132754143003601519786715229456446471729141730149459091184131e-32 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,quadrant_boundaries,4315,10322096095657499369,8.956412,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,0,0]",-1.9721522630525295135293214132069655741830160877725575119256973863858620655932743e-31,-2.3958158477746716437132754143003601519786715229456446471729141730149459091184131e-32 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,quadrant_boundaries,4315,10322096095657499369,114.985922,113.201255,113.030213,,,,No,no,"above random k*pi/2, exponent 73, quadrant 3, offset bits 100 [-1.8700734696156561e+22,-823589.80510121852,0,0]",-67624126.695955066322084141067273598883454782996848099821396438358078739838674664,-67624126.695955066322084141067273605260463639168624432485484257712303362119330611 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,near_one,4099,10322096095657499359,108.638031,106.152026,105.321909,80.000000,25.321909,yes,Both,yes,"[0.68327775494803278,1.8964767393937287e-17,-1.0527560708704801e-33,5.8439701459716004e-50]",0.59941459668283531301680476878329138003111794710527586828655022266332252911524847,0.5994145966828353130168047687833032015572049547180395358634521660952312280617229 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,qdpp,ddreal,qdpp dd_real,qdpp atan,near_one,4099,10322096095657499359,106.247062,103.455087,102.915050,,,,No,no,"[0.82949361478016381,2.3023072747712198e-17,-1.2780372731065025e-33,7.0945320346599422e-50]",0.69246792939021322038407456593241406837897508348741171878136551514140717422662874,0.69246792939021322038407456593234164436460581542817857965304164345048779801772283 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,near_one,4099,10322096095657499359,106.588476,104.193031,103.565475,,,,Both,no,"[0.59922936585146047,1.6631955974995573e-17,-9.232590233996015e-34,5.1251171273558688e-50]",0.53985266485908503628140184552645633503401709334955396726761503380272178009846584,0.53985266485908503628140184552649230671320267202579643720050843055093098479341871 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,near_one,4099,10322096095657499359,115.096489,113.278798,113.091826,,,,Inf,no,"[0.55993379075339322,1.5541284669001543e-17,-8.6271460358897341e-34,4.789028082924215e-50]",0.51043791759628196772972085185796332214599303086125967899625004231756652747775682,0.51043791759628196772972085185796336826828859446251053237503140908095741580338084 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,moderate,4099,10322096095657499356,108.819079,105.953468,104.926390,80.000000,24.926390,yes,Both,yes,"[1.7923972346284831,4.9749016978975022e-17,-2.7616252051262958e-33,1.5330099440581923e-49]",1.0618989131564895436407540480874589123331650567714808343216437342988039960189894,1.0618989131564895436407540480874313641834035736707386450972798475694004675512729 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,qdpp,ddreal,qdpp dd_real,qdpp atan,moderate,4099,10322096095657499356,108.083593,103.905207,102.931677,,,,No,no,"[0.12343094012777023,3.4258967920244917e-18,-1.901754749247526e-34,1.0556859549024222e-50]",0.1228097768819786507373908614024102305211643226125052350510620111296352513496899,0.12280977688197865073739086140239753323881629570359025212171798984403624884920169 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,moderate,4099,10322096095657499356,106.844628,104.728392,103.681417,,,,Both,no,"[0.2857560326209736,7.9313231710335552e-18,-4.4027688001122307e-34,2.444027646992936e-50]",0.27833825477622709162386907260361096838828187272939914113340062647161676778750916,0.27833825477622709162386907260362808257597424159856848418749771732394908517032952 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,moderate,4099,10322096095657499356,114.879313,113.253632,113.035851,,,,Inf,no,"[-1.5734601079176329,-4.3672291003483491e-17,2.4242991505098727e-33,-1.3457563677376342e-49]",-1.004652131404238346511320335870031739283046009993498654158329194945736828614713,-1.0046521314042383465113203358700316449130358715858571333899916584587287045766648 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,near_one,4099,10322096095657499359,108.593233,105.799026,104.761376,80.000000,24.761376,yes,Both,yes,"[1.0818954035110564,3.0028629680352481e-17,-1.666923803453484e-33,9.2532859344489846e-50] ; [0.65275323882187208,1.8117541878467149e-17,-1.0057256071542369e-33,5.5828986275887446e-50]",1.0279228914914060327533533251293914713081558101296952640517443772205652408047172,1.0279228914914060327533533251293615731716847356252552579150219391046313458442121 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,qdpp,ddreal,qdpp dd_real,qdpp atan2,near_one,4099,10322096095657499359,106.339808,103.421593,102.642972,,,,No,no,"[1.476075414430174,4.096932277958748e-17,-2.2742542726598969e-33,1.2624647286795781e-49] ; [1.2978450665872434,3.6022436883033177e-17,-1.9996469415324945e-33,1.1100270378053248e-49]",0.84956211104165360553223476933504451308109752486204940520923474826710947160890441,0.84956211104165360553223476933515180861659947245602880194423528508728550858684757 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,near_one,4099,10322096095657499359,106.583628,104.234944,103.492572,,,,Both,no,"[1.0507333108929335,2.916370786234894e-17,-1.6189109976110749e-33,8.986761321833486e-50] ; [1.2650802084969899,3.5113029386773794e-17,-1.9491646844768004e-33,1.0820037557461861e-49]",0.69310320015039092381296369548557195305017378886812875991225074484222701265423439,0.6931032001503909238129636954856205298991193123179607682885119797622283795278364 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,near_one,4099,10322096095657499359,114.968209,113.174887,113.027946,,,,Inf,no,"[1.3372324738194741,3.7115657042770924e-17,-2.0603328511487564e-33,1.1437144848684724e-49] ; [0.83447791299898855,2.3161414813815632e-17,-1.2857168004596149e-33,7.1371619750882627e-50]",1.0128922965936482719447380487334569972731678420777069662816424218111611629811186,1.0128922965936482719447380487334570929399651157625544908533628582220778293271098 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,moderate,4099,10322096095657499356,108.845358,105.968236,104.520841,80.000000,24.520841,yes,Both,yes,"[0.17246963902978685,4.7869941074914726e-18,-2.6573155384409922e-34,1.4751064472356924e-50] ; [4.1006496155849739,1.1381589047856838e-16,-6.318051108876087e-33,3.5072229059163668e-49]",0.042034327541476674060107604306532306204552005274371072135952080023324484159275016,0.042034327541476674060107604306530861776728203971856534731213306751945145807618236 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,qdpp,ddreal,qdpp dd_real,qdpp atan2,moderate,4099,10322096095657499356,107.532142,103.665904,102.550989,,,,No,no,"[2.8442686066031122,7.8944312381732168e-17,-4.3822896634699942e-33,2.4326594424806081e-49] ; [3.3541671593836817,9.3096840219733015e-17,-5.1679127765898456e-33,2.8687678769122846e-49]",0.70332051680921338830497515483357031683036089048871214131875652169831325544180345,0.70332051680921338830497515483347564310608417324445344576897132904002133808898828 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,moderate,4099,10322096095657499356,106.908043,104.409787,103.662354,,,,Both,no,"[3.7333993131913807,1.0362264694062042e-16,-5.7522124253040164e-33,3.1931193385537162e-49] ; [5.3335026674387365,1.4803443658225436e-16,-8.2175619965515678e-33,4.5616632674281109e-49]",0.61071935122765676237943548306421128022715521279517283116625796213737531470400199,0.61071935122765676237943548306424933103169620630034311511112534813715772653810797 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,moderate,4099,10322096095657499356,114.931792,113.169783,113.005900,,,,Inf,no,"[6.15799117025648,1.7091858956642891e-16,-9.4878876736553216e-33,5.2668356751746757e-49] ; [-2.8723638314665259,-7.9724111519866743e-17,4.4255772113569871e-33,-2.4566888586524599e-49]",2.0072413975928422432930791156337093117686276911278999771622954148125308679317946,2.007241397592842243293079115633709504270091951029495114195079457907970865310122 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,extreme_finite,8,10322096095657499351,116.769509,109.692678,109.692678,80.000000,29.692678,yes,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397529394834895588573302312846062338790031898128063,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,qdpp,ddreal,qdpp dd_real,qdpp atan2,extreme_finite,8,10322096095657499351,0.000000,0.000000,0.000000,,,,No,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",nan,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,extreme_finite,8,10322096095657499351,61.209588,0.000000,0.000000,,,,Both,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",nan,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,extreme_finite,8,10322096095657499351,118.649421,114.802646,114.802646,,,,Inf,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397513987395340490686477865022521659371483593314878,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,moderate,4099,10322096095657499356,107.979933,105.096123,104.081582,80.000000,24.081582,yes,Both,yes,"[-0.03158561470140564,-8.766769172109845e-19,4.8665344932251859e-35,-2.7014693222555596e-51]",-0.031590868964255888487475098364116757608941970863589142199408956157005365361634119,-0.031590868964255888487475098364115285691415570498034097956857353613513937214419265 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,qdpp,ddreal,qdpp dd_real,qdpp asin,moderate,4099,10322096095657499356,106.585210,103.502594,102.376736,,,,No,no,"[-0.10554476052982042,-2.9294555817188768e-18,1.6261745182204894e-34,-9.0270819609355425e-51]",-0.10574170549366163348617680261698872497764235320622715944461831608580052593859833,-0.10574170549366163348617680261697266377760660648065099953828496646958802067675318 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,moderate,4099,10322096095657499356,106.537625,104.076665,103.158102,,,,Both,no,"[0.9440509083517975,2.6202676371761477e-17,-1.4545407307365575e-33,8.0743230475941312e-50]",1.2347048655119616120052676852454106000496531918916062324420706837295458324632591,1.2347048655119616120052676852453014860930009767392836002434933599817314326718944 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,moderate,4099,10322096095657499356,114.947518,113.199623,113.012058,,,,No,no,"[0.12474215398466793,3.4622902873778762e-18,-1.9219571974914841e-34,1.0669005664995424e-50]",0.12506795106413992402354933757400079832840734406034132627003412512726624817097076,0.12506795106413992402354933757400081027177335071584045641110721623291972191179353 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,boundary,4105,10322096095657499355,109.179337,106.113879,105.956528,80.000000,25.956528,yes,Both,yes,"[0.99999942350312121,2.7755559614626202e-17,-1.5407430672757073e-33,8.5528421416053841e-50]",1.5697225512744511775996984093823162316469799617556662501159018933971633913415644,1.5697225512744511775996984093822962914427098056014529298362837222126251898438199 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,qdpp,ddreal,qdpp dd_real,qdpp asin,boundary,4105,10322096095657499355,109.491726,107.373224,104.443140,,,,No,no,"[-0.5,0,0,0]",-0.52359877559829887307710723054660280208862930374996608114978422659525902904675831,-0.52359877559829887307710723054658381403286156656251763682915743205130273438103483 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,boundary,4105,10322096095657499355,106.984950,105.503128,105.402715,,,,Both,no,"[-0.99999922428528665,-2.7755554085220531e-17,1.5407427603320329e-33,-8.552840437725711e-50]",-1.5695507628153165878808648244495547137714913079677828628484981959845256938024249,-1.5695507628153165878808648244495839820077603707708144064426117014428883477602293 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,boundary,4105,10322096095657499355,115.113201,113.662197,113.650342,,,,No,no,"[-0.99999926068382938,-2.7755555095483036e-17,1.5407428164128676e-33,-8.5528407490368807e-50]",-1.569580336448152538387862341824414705980941808225034533535579205101276496769902,-1.5695803364481525383878623418244146096819702328353660760934473597656326582483983 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,moderate,4099,10322096095657499356,108.568133,105.119090,102.606898,80.000000,22.606898,yes,Both,-,"[0.99447363321554472,2.7602188124463265e-17,-1.5322292392907091e-33,8.5055809023221692e-50]",0.10518045845827819297865791404046697400704440931878221279239664668822551440996449,0.10518045845827819297865791404048059412910636761979542748882605088251354897169005 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,qdpp,ddreal,qdpp dd_real,qdpp acos,moderate,4099,10322096095657499356,107.976854,104.376150,103.255774,,,,No,-,"[0.72162924858693034,2.0029235175604019e-17,-1.1118459028793836e-33,6.1719846060591867e-50]",0.76464343130433414989879945681264064919498472149418082086597743974448748716099544,0.76464343130433414989879945681257749914661788899034141150068638257917579976285277 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,moderate,4099,10322096095657499356,106.826944,104.122161,102.539984,,,,Both,-,"[0.83339529970063941,2.3131366258550818e-17,-1.284048770564029e-33,7.1279025491090496e-50]",0.58557343260644397607277637387573467882638540356530977311031807845849439519980706,0.58557343260644397607277637387581410624260947434077519013298043784881918735454894 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,moderate,4099,10322096095657499356,114.898379,113.171158,113.047621,,,,No,-,"[-0.45715822972539222,-1.2688689813450177e-17,7.0436377916095346e-34,-3.9100044266823978e-50]",2.0455936847846887489751794724924589062213555121293704269540512834458156551931118,2.0455936847846887489751794724924590968089464877104280431708665030765709283604497 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,boundary,4105,10322096095657499355,104.376193,95.825547,81.584963,80.000000,1.584963,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863439534155160504671268531080086442146964698096667234494817e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,qdpp,ddreal,qdpp dd_real,qdpp acos,boundary,4105,10322096095657499355,108.178543,104.398963,103.657807,,,,No,-,"[0.99999942444749224,2.7755559640837763e-17,-1.5407430687307413e-33,8.5528421496824451e-50]",0.0010728956733501991057269846146837220280149238995691775727282821254002248166289912,0.0010728956733501991057269846146837890856807201566556401310231651304607235195055812 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,boundary,4105,10322096095657499355,107.086731,104.648615,104.149340,,,,Both,-,"[0.99999934503035492,2.7755557436569404e-17,-1.540742946369267e-33,8.5528414704398147e-50]",0.0011445258551427070941068738473539623713411732011302531058393685780530564521928483,0.0011445258551427070941068738473540132517027939037678964817350591380117937533213228 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,boundary,4105,10322096095657499355,114.952164,113.210243,113.019157,,,,No,-,"[0.99999951327014636,2.7755562106161656e-17,-1.5407432055837087e-33,8.5528429093690223e-50]",0.00098664065707865998773786346026427739790392738317321398040088536942829912436176039,0.00098664065707865998773786346026427749166071876813272361725882961213506150597977497 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,moderate,4099,10322096095657499356,107.422628,104.784889,104.123120,80.000000,24.123120,yes,Both,-,"[-7.4260131889231964,-2.0611327058781538e-16,1.1441584934369385e-32,-6.3513555161706011e-49]",0.00059555715897935043401591506055704088046193962180369225037771615963253651893083429,0.00059555715897935043401591506055701391914881720026106459729557182617396144915233455 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,qdpp,ddreal,qdpp dd_real,qdpp exp,moderate,4099,10322096095657499356,107.183101,104.642582,104.151117,,,,Both,-,"[7.0128923877089875,1.946468649513252e-16,-1.0805071557003232e-32,5.9980196126536888e-49]",1110.8629089138827070531587501812802675668025626929731218203722953319356747670099,1110.8629089138827070531587501813295906438271160742762402009248472719277541922193 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,moderate,4099,10322096095657499356,103.684388,101.106308,100.622692,,,,Both,-,"[6.2894204955453095,1.7456648614259411e-16,-9.6903866121708154e-33,5.3792451671757032e-49]",538.84097784188683014615383865455606418723372617967866426199469165325695030333009,538.84097784188683014615383865483212958439419934285301934539232895991755161454027 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,moderate,4099,10322096095657499356,114.936433,113.201931,113.034174,,,,No,-,"[-2.7524176726202221,-7.6394936838203922e-17,4.2407708921279276e-33,-2.3541007433002956e-49]",0.063773491250200208373748723374130927612358133134113120172047880385269533762629401,0.063773491250200208373748723374130933609760256587112174195050990978697911747191691 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,boundary,4099,10322096095657499339,106.555700,104.344345,103.645110,80.000000,23.645110,yes,Both,-,"[689.56791103874002,1.913935429694702e-14,-1.0624475908464504e-30,5.8977688890762846e-47]",2.9890877290907641503012149009532296945711450367253589288612016829881349927374169e+299,2.9890877290907641503012149009534181687133803867116344877486422688909796071e+299 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,qdpp,ddreal,qdpp dd_real,qdpp exp,boundary,4099,10322096095657499339,106.468171,104.212593,103.677417,,,,Both,-,"[-685.72118002878744,-1.9032586063527297e-14,1.0565207632943939e-30,-5.8648683870199052e-47]",1.5670230665104764070494798431371877863383987482055669858716851052065724348356826e-298,1.5670230665104764070494797195646695607532784624979032230782798373594046341464844e-298 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,boundary,4099,10322096095657499339,97.061161,0.000000,0.000000,,,,Both,-,"lower endpoint [-700,0,0,0]",0,9.8596765437597708567053729478494651051156001814009417105864667677931867965946372e-305 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,boundary,4099,10322096095657499339,114.941676,113.155192,113.027016,,,,No,-,"[-106.03442153664571,-2.943046404819841e-15,1.6337189405856384e-31,-9.0689619180219691e-48]",8.9091410513973682950278649000499914419415317652051246328683034651881238681163385e-47,8.9091410513973682950278649000499922839443594814782326173403842131731778025563998e-47 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,moderate,4099,10322096095657499356,108.902998,106.013023,105.332281,80.000000,25.332281,yes,Both,-,"[2.5050708699436939,6.9529683953231499e-17,-3.8596728009893943e-33,2.1425488055889476e-49]",5.6767722797494772853116587667814582973149425261925085601171598811975904652626923,5.6767722797494772853116587667815694514029231846505256411149926048833678443740637 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,moderate,4099,10322096095657499356,103.839952,101.142179,100.414694,,,,Both,-,"[3.8148963235585232,1.0588464337431334e-16,-5.8777784514193096e-33,3.2628224852056573e-49]",14.073373823089690423486976994593612874034538497537247478418910573427780263955356,14.073373823089690423486976994601941307827954000551175451985943856849500024740817 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,moderate,4099,10322096095657499356,114.965914,113.164112,113.011731,,,,No,-,"[-7.9959423366658164,-2.2193198214353661e-16,1.2319699823822672e-32,-6.8388072004392078e-49]",0.0039172520189509527584047035166407065909139982295504516955430206336675765627867302,0.003917252018950952758404703516640706216751198658792221393620632776629080535929414 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,boundary,4099,10322096095657499339,108.889789,106.068713,105.117537,80.000000,25.117537,yes,Both,-,"[-300.54967496719229,-8.341929229804598e-15,4.6307009503613316e-31,-2.5705554076223722e-47]",3.3537651522202066232694855987502461915822095092416702651658002446064688733175029e-91,3.3537651522202066232694855987503223996548021083914718227771648387284160913978918e-91 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,boundary,4099,10322096095657499339,99.466638,96.374310,95.216729,,,,Both,-,"[698.97202361981408,1.9400370854788909e-14,-1.0769369204626738e-30,5.9782008258328567e-47]",2.5795576573742430042352146252587791727029440720160246133153522460811619953466992e+210,2.579557657374243004235214625314813457457020895250501024774331309230444404594941e+210 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,boundary,4099,10322096095657499339,115.017273,113.141516,113.031247,,,,No,-,"[-623.98297046261791,-1.7319006519539934e-14,9.6139799008132156e-31,-5.3368309220831554e-47]",1.4534801573612130574507922601992539191333162412583157547920661290709870204156299e-188,1.4534801573612130574507922601992540560995029614644815271939387362904115301725391e-188 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,moderate,4099,10322096095657499356,108.703910,105.111574,104.102752,80.000000,24.102752,yes,Both,yes,"[0.34499201425549764,9.5754519384565927e-18,-5.3154436066330483e-34,2.9506639390902969e-50]",0.41197864392194338236442692612392088638530541488783931021803297713515523703620147,0.41197864392194338236442692612390197063088901255454253734406676554091755929509722 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,qdpp,ddreal,qdpp dd_real,qdpp expm1,moderate,4099,10322096095657499356,108.515673,104.815830,0.000000,,,,NaN,no,"midpoint [0,0,0,0]",1,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,moderate,4099,10322096095657499356,106.117958,101.057168,100.341101,,,,Both,no,"[0.55778275215845952,1.5481581354627725e-17,-8.5940040387576104e-34,4.7706305787751426e-50]",0.74679512561239122148963802326995846614536066819091057793767438922893919794887552,0.74679512561239122148963802327042353821810425608280027454957470110002731722314746 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,moderate,4099,10322096095657499356,115.099931,113.238852,113.025470,,,,No,no,"[-0.13544667321528081,-3.759400380312106e-18,2.086886430503535e-34,-1.1584546824614156e-50]",-0.12667426665988540296635337345058074378660986274343523857272835609845049436444908,-0.1266742666598854029663533734505807318017844144056911301472125012780803029716347 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,cancellation,4098,10322096095657499336,134.532978,106.243436,104.431991,80.000000,24.431991,yes,Both,yes,"[5.2823021564447655e-10,1.4661333692780236e-26,-8.1386751187185946e-43,4.5178722533726315e-59]",5.2823021578399014295181730840717304111038933843651099389423600846862121746910786e-10,5.2823021578399014295181730840715373648809557706009947616651919887543783634460306e-10 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,qdpp,ddreal,qdpp dd_real,qdpp expm1,cancellation,4098,10322096095657499336,134.524282,105.740631,104.431991,,,,NaN,no,"[5.2823021564447655e-10,1.4661333692780236e-26,-8.1386751187185946e-43,4.5178722533726315e-59]",5.2823021578399014295181730840717304111038933843651099389423600846862121746910786e-10,5.2823021578399014295181730840715373648809557706009947616651919887543783634460306e-10 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,cancellation,4098,10322096095657499336,134.582909,106.579660,104.032519,,,,Both,no,"[9.640978373446825e-32,2.675909042528464e-48,-1.485427915408879e-64,8.245781365539434e-81]",9.6409783734468253031264825210279822527089990205713589968491374709281993532281666e-32,9.6409783734468253031264825210284469950289853675378445109860829891746497320528387e-32 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,cancellation,4098,10322096095657499336,141.266766,113.673411,113.009736,,,,No,no,"[-1.1160763165924209e-16,-3.0977340597993533e-33,1.7195878386774018e-49,-9.5456300568253038e-66]",-1.1160763165924208772961271662821860972007309068079894040911997121794737926855797e-16,-1.1160763165924208772961271662821862039521037829862229931689764596843753080637539e-16 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,near_one,4099,10322096095657499359,107.587097,104.625423,103.727726,80.000000,23.727726,yes,Both,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.16836588841698423133590420499408908570076543035915070334582452268043853416124023,0.16836588841698423133590420499409911099841188934514465011564788537156738257109514 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,qdpp,ddreal,qdpp dd_real,qdpp log,near_one,4099,10322096095657499359,106.927449,104.397198,103.857199,,,,NaN,-,"[0.75659944693669368,2.0999853160194417e-17,1.1657260246097599e-33,6.4710793646325364e-50]",-0.27892129776854844107164046748168967058453040559111079322473238345080764899464043,-0.27892129776854844107164046748170485330236793002076439374781203404600609034847362 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,near_one,4099,10322096095657499359,101.676417,95.715279,87.939907,,,,Both,-,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",2.8031904738997079030831457992482622568319573100854233424378291784917482942773859e-05,2.8031904738997079030831458086911024069529667493434989217092636151341185760406095e-05 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,near_one,4099,10322096095657499359,114.903817,113.175281,113.007854,,,,No,-,"[1.2848659065765915,3.5662192825930181e-17,1.9796493791984882e-33,1.0989261607355295e-49]",0.25065436004336111863518701227037801362273786683129506989659931978979784481659232,0.25065436004336111863518701227037803762883557789306170721707519765093430995709876 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,wide_exponent,4096,10322096095657499357,108.459773,105.569923,104.766295,80.000000,24.766295,yes,Both,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-282.39686865150220367499305723086940567546238559138028340316645126151229305833112,-282.39686865150220367499305723087759150499758429977321630947871340522978294577768 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,qdpp,ddreal,qdpp dd_real,qdpp log,wide_exponent,4096,10322096095657499357,102.976131,98.351588,98.120928,,,,NaN,-,"[8.0137486442110252e-232,2.224262064590428e-248,1.2347134784542901e-264,6.8540366629748501e-281]",-532.1185829274821218054391355886238273235190505944474623515813571650312496785773,-532.11858292748212180543913559016789345023301543283440496688357322042108585689832 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,wide_exponent,4096,10322096095657499357,106.876407,104.641553,102.373621,,,,Both,-,"[9.8724575378275929,2.740157417032594e-16,1.5210929277434915e-32,8.443761954876569e-49]",2.2897488131137169994105625805515515334956951130684182404586939334895090425447961,2.2897488131137169994105625805519000770341292764626019169410782736436637403671614 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,wide_exponent,4096,10322096095657499357,114.899153,113.162642,113.028614,,,,No,-,"[5.458701172842345e+224,1.5150939316594794e+208,8.4104608369910374e+191,4.6687436344678076e+175]",517.47627171169320427846349718798625199324761647559864417169039332508595485649039,517.47627171169320427846349718798630084579140073034479946317933618634716552824299 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,extreme_finite,4096,10322096095657499354,109.176760,105.259872,105.032438,80.000000,25.032438,yes,Both,-,"[7.8173980412642063e+300,2.1697638245177804e+284,1.2044608779891888e+268,6.6861009950191438e+251]",692.83187966610744796102335261136963360047942862056461746020352698849364969646558,692.8318796661074479610233526113529337163936151304127833135311352796511576817801 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,qdpp,ddreal,qdpp dd_real,qdpp log,extreme_finite,4096,10322096095657499354,94.983289,62.621586,62.089360,,,,NaN,-,"[2.0566416219745275e+307,5.7083272052963693e+290,3.168758147707101e+274,1.7590141275264931e+258]",707.61469792102511970652423645218606567179514325599480714830413763394290072028525,707.61469792102511985074809018250809413651598454028680031729180422656712451439635 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,extreme_finite,4096,10322096095657499354,107.235578,105.227151,105.035096,,,,Both,-,"[1.0069214736271378e+301,2.7947685100258519e+284,1.5514081741640217e+268,8.6120453777428592e+251]",693.08501062139424109343845505927377090986957133212151413101387298354438826208934,693.08501062139424109343845505925709567645795181068156897691159852775850423690577 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,extreme_finite,4096,10322096095657499354,115.534765,113.325557,113.285384,,,,No,-,"[8.3193845738370037e+270,2.3090930761462968e+254,1.2818041495700743e+238,7.1154423995638221e+221]",623.81656339099882949900267018734779984904540997696515824943850779191190092376473,623.8165633909988294990026701873478491389845554944656387436301881745302964002462 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,near_one,4099,10322096095657499359,107.303954,104.550799,103.716432,80.000000,23.716432,yes,Both,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.24290063227404771615686474809384021893054758987931141292077052724202035349776452,0.24290063227404771615686474809385479604744883847615479262644004599544797468667503 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,near_one,4099,10322096095657499359,101.670007,95.715106,87.939906,,,,Both,-,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",4.044148995362291804383621503107805429122385032546069087176404383881042495577085e-05,4.0441489953622918043836215167309566516349824665253487483127010580011294770046154e-05 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,near_one,4099,10322096095657499359,114.998512,113.191847,113.016527,,,,No,-,"[0.70667685256571555,1.9614222817202363e-17,1.0888080890893083e-33,6.044099049525344e-50]",-0.50087744106456204019778665744575576721811844484718549777154507969979119197390105,-0.50087744106456204019778665744575581490148587894479768852119248604151503539540518 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,wide_exponent,4096,10322096095657499357,107.967820,105.222704,104.386734,80.000000,24.386734,yes,Both,-,"[2.2828060842783888e+123,6.336059688800657e+106,3.5172196759528967e+90,1.952449133453769e+74]",409.78796398443927791610862116022677480269364161366471002376221655083554651355371,409.78796398443927791610862116024222810248381363533512220222949171648044838642357 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,wide_exponent,4096,10322096095657499357,106.811573,104.492642,102.312914,,,,Both,-,"[9.8724575378275929,2.740157417032594e-16,1.5210929277434915e-32,8.443761954876569e-49]",3.3034092575605493779172148119355486815283475477783179543435034724099819136711176,3.303409257560549377917214811936073134270919791794568551577162714286004123950989 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,wide_exponent,4096,10322096095657499357,114.953722,113.209249,113.024836,,,,No,-,"[4.3538032635725136e+156,1.2084231569765884e+140,6.7080960618281417e+123,3.7237413496194703e+107]",520.34305901999576558624497846294523008272872419599112042989887041283258994894823,520.34305901999576558624497846294527933471433297529398191461768706821030235939582 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,extreme_finite,4096,10322096095657499354,111.086264,105.070160,104.606169,80.000000,24.606169,yes,Both,-,"[8.4825748870998104e+300,2.3543874869413368e+284,1.3069475984458161e+268,7.2550165788654925e+251]",999.66293072781110639078474847446915088682993473501091851417255096379221868119203,999.66293072781110639078474847443677221631807677679365605314190636576738889243849 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,extreme_finite,4096,10322096095657499354,111.221449,105.074551,104.624242,,,,Both,-,"[1.9230330816353472e-151,5.3374890108685769e-168,2.9629015967750232e-184,1.6447407862191361e-200]",-500.66775874664477275846631739014346365552647448470350839775516726959381230699364,-500.66775874664477275846631739012744910850453672628085794632227477319599271088726 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,extreme_finite,4096,10322096095657499354,118.992979,113.866301,113.813514,,,,No,-,"[4.6410253113118828e+270,1.2881432896216468e+254,7.1506316957717187e+237,3.9693979746300949e+221]",899.13502918531497655348899194015066466036407709017719390075728484040817889422215,899.13502918531497655348899194015061539480716298928420272988309606906902968233412 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,near_one,4099,10322096095657499359,107.290148,104.469291,103.762278,80.000000,23.762278,yes,Both,-,"[0.75767388015401582,2.1029674672601745e-17,1.1673814510949479e-33,6.4802688276296867e-50]",-0.12051768424391546599899037931433572311869461807102196510180994458742362307468454,-0.12051768424391546599899037931434272948211001876788467720396858894260414574766305 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,qdpp,ddreal,qdpp dd_real,qdpp log10,near_one,4099,10322096095657499359,106.649028,104.190066,103.495982,,,,NaN,-,"[1.4285637374785782,3.9650608837332131e-17,2.201050943580592e-33,1.2218287179680498e-49]",0.15489962184001986679735197991693269478090345830246767504947428883759971696143509,0.15489962184001986679735197991694352545131380484784002570762181823234214383384175 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,near_one,4099,10322096095657499359,101.609960,95.718828,87.939938,,,,Both,-,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",1.2174101545384046086252384657457743119885332315350708330878957913257906519677656e-05,1.2174101545384046086252384698466606762194093124850392369685309026219998762457263e-05 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,near_one,4099,10322096095657499359,114.872088,113.157276,113.007632,,,,No,-,"[0.56152363038163511,1.5585411583019934e-17,8.6516413938641703e-34,4.8026257381340422e-50]",-0.25063196277134080699268976739835896943757206564298147783154726746356196712822717,-0.25063196277134080699268976739835899344521197849814681069469218834374690481796137 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,wide_exponent,4096,10322096095657499357,107.892624,105.170494,104.368159,80.000000,24.368159,yes,Both,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-122.64340176210480714781256202313334304453302289297190638109238264297218279352819,-122.64340176210480714781256202313802791680273253425717918726194907203719295819875 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,qdpp,ddreal,qdpp dd_real,qdpp log10,wide_exponent,4096,10322096095657499357,102.782053,98.347329,98.113779,,,,NaN,-,"[8.0137486442110252e-232,2.224262064590428e-248,1.2347134784542901e-264,6.8540366629748501e-281]",-231.09616428358339128264900503515342528697795196117676197503174056633798438831207,-231.09616428358339128264900503582733567809457849116273501127310924457513100144675 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,wide_exponent,4096,10322096095657499357,103.649650,103.003493,102.765232,,,,Both,-,"[3.905695425475696e-145,1.0840482471340662e-161,6.0176766188639109e-178,3.3404815685055882e-194]",-144.40830162694489898876145691151228884311488012943396616534789608787825443414476,-144.4083016269448989887614569114955326687050779095882138658826009601337648743421 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,wide_exponent,4096,10322096095657499357,114.973047,113.138717,113.026133,,,,No,-,"[2.4824071579503231e+32,6890063958126866,0.38247538237261935,2.1231648793119637e-17]",32.39487301485368150686302398006636790049855942982417088318864681383349446441855,32.39487301485368150686302398006636483698472419625684766314706515101750626242056 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,extreme_finite,4096,10322096095657499354,107.326534,105.011900,104.460171,80.000000,24.460171,yes,Both,-,"[1.574269563896497e-151,4.3694757920112377e-168,2.4255463149165589e-184,1.3464486830575322e-200]",-150.80292090089107415382716149653340039225497975448655319083077208652809986233478,-150.80292090089107415382716149652799577485650407769540271244758516976318786368256 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,qdpp,ddreal,qdpp dd_real,qdpp log10,extreme_finite,4096,10322096095657499354,94.904687,62.621586,62.089360,,,,NaN,-,"[2.0566416219745275e+307,5.7083272052963693e+290,3.168758147707101e+274,1.7590141275264931e+258]",307.31315862073765252087524993855166604907270430240347027016183101277846390075865,307.31315862073765258351087377245289195529258541179742503423277205801646283729717 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,extreme_finite,4096,10322096095657499354,103.562882,103.052180,102.780151,,,,Both,-,"[8.6806348536685748e-302,2.4093605285094229e-318,0,0]",-301.06144851176328304846286031809826768270144426070608633955877353471919377625454,-301.06144851176328304846286031806369391941670085227560113406940501162511205637408 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,extreme_finite,4096,10322096095657499354,114.774406,113.144122,113.082184,,,,No,-,"[7.3681209041005966e+270,2.0450643689886018e+254,1.1352387746458314e+238,6.3018411302952568e+221]",270.86735674362105667777608200997211613184077567666338331782646957519855579477053,270.86735674362105667777608200997209149259660762788172218869818982891320765553073 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,moderate,4099,10322096095657499356,108.140237,105.150365,103.619384,80.000000,23.619384,yes,Both,yes,"[0.016967775842366306,4.7095038542183959e-19,-2.6142998067570899e-35,1.4512279193674093e-51]",0.016825431060362116060527975223933686830025480890723928219206553105394405175920802,0.016825431060362116060527975223934766829053970731436945963748330916850378472668862 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,qdpp,ddreal,qdpp dd_real,qdpp log1p,moderate,4099,10322096095657499356,107.227863,104.605109,103.795300,,,,NaN,no,"[0.66217882122731719,1.8379154343642823e-17,-1.0202480162725859e-33,5.6635141924698313e-50]",0.50812928464502640442230979621768527602171153983600486964570326804679911703033213,0.50812928464502640442230979621765640411464564063690635215521073475052601939406968 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,moderate,4099,10322096095657499356,104.846701,101.291508,100.173624,,,,Both,no,"[0.50978045786818238,1.4149250045730266e-17,-7.854411590974145e-34,4.3600742965911016e-50]",0.41196424811609458603720091262173995084781993126662968922408673659585343074240882,0.41196424811609458603720091262202808439485668228344707426199018895324808168027625 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,moderate,4099,10322096095657499356,114.969880,113.130249,113.010769,,,,No,no,"[6.4127308474812379,1.7798903593994158e-16,-9.8803762915678819e-33,5.4847106254295907e-49]",2.0031989068380659308358767184051391841716466064575456726443683664874674185685244,2.0031989068380659308358767184051393756381315180978687804239195286771249857338303 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,cancellation,4098,10322096095657499336,134.607455,106.537373,104.621883,80.000000,24.621883,yes,Both,yes,"[9.5757892125536038e-15,2.657815415683552e-31,-1.4753839348477804e-47,8.1900260731503383e-64]",9.5757892125535581941894138318495891727756910760066238894863215461528382537839935e-15,9.5757892125535581941894138318498959687222096513961541169989695977230888612152571e-15 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,qdpp,ddreal,qdpp dd_real,qdpp log1p,cancellation,4098,10322096095657499336,134.557513,105.758060,104.089611,,,,NaN,no,"[2.3924534883532117e-12,6.6403923702862736e-29,-3.6861582510185196e-45,2.0462288813463789e-61]",2.3924534883503498722859585505722919346198673253770991772356315936388669371903705e-12,2.3924534883503498722859585505721810813857978873366089282898811577288643891844246e-12 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,cancellation,4098,10322096095657499336,134.649642,107.170004,104.032519,,,,Both,no,"[9.640978373446825e-32,2.675909042528464e-48,-1.485427915408879e-64,8.245781365539434e-81]",9.6409783734468253031264825210279822527089990205713589968491374709281993532281666e-32,9.6409783734468253031264825210275175103890126736048734827121919974874555365422483e-32 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,cancellation,4098,10322096095657499336,141.258045,113.598062,113.115444,,,,No,no,"[2.6730589512739875e-23,7.4192289847118885e-40,-4.1184994218967311e-56,2.2862264425475737e-72]",2.6730589512739876209542699187290419021144006266392741070944842875474854548228371e-23,2.6730589512739876209542699187290416645031710677328282365395176678854623522396858e-23 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,near_one,4099,10322096095657499359,108.254105,105.091738,103.817818,80.000000,23.817818,yes,Both,yes,"[0.50824794006286333,1.4106714131902435e-17,7.8307994155215805e-34,4.3469669061666386e-50] ; [1.4195792076051643,3.9401238039059714e-17,2.1872080834850324e-33,1.2141443869656723e-49]",0.38260537918836910980295595469486016694478510077047130768040772007699407142311543,0.38260537918836910980295595469483876398615466016654421485472691554230336671157279 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,qdpp,ddreal,qdpp dd_real,qdpp pow,near_one,4099,10322096095657499359,108.275274,105.210044,104.146088,,,,No,no,"[0.5595859812437316,1.5531631015856295e-17,8.6217871818929345e-34,4.7860533213777892e-50] ; [1.2982038560619356,3.6032395291428086e-17,2.0001997442469269e-33,1.1103339049561439e-49]",0.47063014492835036533591438775807217830872650433682840639058639451049181889885631,0.47063014492835036533591438775805120904364905202333737103157535856690798348325443 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,near_one,4099,10322096095657499359,103.218113,100.596655,99.961241,,,,Inf,no,"[1.3001872815938884,3.6087446408758173e-17,2.0032556951464871e-33,1.1120302984815517e-49] ; [1.4964387904107816,4.1534520001406718e-17,2.3056290211157914e-33,1.2798812127433564e-49]",1.4811630565057160695975467044776770686909168775065531267436775252066549768414916,1.4811630565057160695975467044788773163012774987744976567649309696218580203568102 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,near_one,4099,10322096095657499359,114.926370,113.162316,113.016553,,,,No,no,"[1.0072931928427433,2.7958002381055039e-17,1.5519808982986127e-33,8.6152246353477663e-50] ; [1.2932802742744287,3.5895738444825207e-17,1.9926137653683677e-33,1.1061228407484956e-49]",1.0094422126013183565427786981156641075907671648540197459770146736708130476289913,1.0094422126013183565427786981156642036875925766244874388795772114241665281807993 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,moderate,4099,10322096095657499356,106.001122,102.267431,101.314349,80.000000,21.314349,yes,Both,yes,"[6.7554035072711907,1.875001128601503e-16,1.0408347120857714e-32,5.7777933109335954e-49] ; [7.5615146099912893,2.09874190526296e-16,1.1650357929843036e-32,6.4672478094180065e-49]",1876810.3436059515909373438747938277987921279160005681718725867312969057820737362,1876810.3436059515909373438747932324627118494928000187634317695110360784386875593 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,qdpp,ddreal,qdpp dd_real,qdpp pow,moderate,4099,10322096095657499356,105.303819,101.687730,101.002017,,,,No,no,"[4.5236763170044476,1.2555724007724666e-16,6.9698269421073854e-33,3.8690311743901836e-49] ; [7.9474533276739914,2.205861417879371e-16,1.2244990676309858e-32,6.797335292579786e-49]",161990.02774912685537580110147647898976617011060412333264824091827449592528864741,161990.0277491268553758011014764151852239818531721937823617363018533884000846154 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,moderate,4099,10322096095657499356,101.997603,98.689822,97.605813,,,,Inf,no,"[5.3841638638994409,1.4944056725139767e-16,8.2956179287772921e-33,4.6049930140109008e-49] ; [7.900171020724815,2.1927379414212786e-16,1.2172140747675356e-32,6.7568954585236242e-49]",596979.42152351974794327492916693170559841450560851008888541002761485287919640541,596979.42152351974794327492916940731307384283545223626923271842061389321561692216 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,moderate,4099,10322096095657499356,114.949694,113.202145,113.025976,,,,No,no,"[1.1675387080838069,3.2405708896393795e-17,1.7988782073038331e-33,9.9857800212257048e-50] ; [4.5155188621659903,1.2533082522264678e-16,6.9572583928726882e-33,3.8620542280169357e-49]",2.0126338344774562612903904708133934296318506834439464451373504273658677360403502,2.0126338344774562612903904708133936199830988498706095749550332038551540854633581 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,moderate,4099,10322096095657499356,106.519662,103.850741,103.190083,90.000000,13.190083,yes,Both,no,"[0.71581135775056381,1.9867756266571774e-17,-1.1028820227394361e-33,6.1222250754524372e-50]",0.096291975196169784525310139181526871816045133452422261028615229900944061380840822,0.096291975196169784525310139181535194812644791471494678467075788752285130394604154 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,qdpp,ddreal,qdpp dd_real,qdpp npwr,moderate,4099,10322096095657499356,106.491385,103.850741,103.184609,,,,NaN,no,"[-2.8929326812399925,-8.0295011785080708e-17,4.4572685423172447e-33,-2.474281081309007e-49]",-1695.7752558459658673075077886364494173602264988659071916102076549304200625556405,-1695.7752558459658673075077886365965488884921735244318698449135638215709140023681 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",moderate,4099,10322096095657499356,106.373891,103.455996,102.759509,,,,Both,no,"[-0.36144099270550889,-1.0032002803625731e-17,5.5688802478447044e-34,-3.0913495362687196e-50]",-0.00080586416602977375312522760475390522692055461405400605181073388411962243882413759,-0.00080586416602977375312522760475399910564780802927688413249709532873387989737341996 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,wide_exponent,4096,10322096095657499357,106.463253,103.779117,103.294727,90.000000,13.294727,yes,Both,no,"[-4.2985314788901945e+20,-11930.821549849798,6.62293639366862e-13,-3.6764682374394009e-29]",-2.7116946263909823534882310466348560028692459166343819479015128601692309145311966e+144,-2.7116946263909823534882310466350739893700446173843466311067792915601894946997725e+144 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,qdpp,ddreal,qdpp dd_real,qdpp npwr,wide_exponent,4096,10322096095657499357,106.460501,103.777298,103.294727,,,,NaN,no,"[-4.2985314788901945e+20,-11930.821549849798,6.62293639366862e-13,-3.6764682374394009e-29]",-2.7116946263909823534882310466348560028692459166343819479015128601692309145311966e+144,-2.7116946263909823534882310466350739893700446173843466311067792915601894946997725e+144 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",wide_exponent,4096,10322096095657499357,106.381440,103.527280,102.733123,,,,Both,no,"[25243192839578.898,0.00070063934763883447,-3.8893296785349167e-20,2.1590116797337115e-36]",6.5314558416850667205793051431029262199911942560992371852825518724937704498574181e+93,6.5314558416850667205793051431037011424970252237504699458471391554570588684096988e+93 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,qdpp,ddreal,qdpp dd_real,qdpp fmod,moderate,4099,10322096095657499356,135.004363,101.709365,95.502103,,,,NaN,no,"[2.666045778311009,7.3997635194639449e-17,4.1076939180450772e-33,2.2802281829631827e-49] ; [0.22214166730181911,6.1656698441775213e-18,3.4226343116214427e-34,1.8999437088170993e-50]",0.00034577068917962528864980778995916839279651382077593419427617715822265154201886617,0.00034577068917962528864980778996533136861855297550571332369244892564197346729315541 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,moderate,4099,10322096095657499356,135.004363,101.709365,95.502103,,,,NaN,no,"[2.666045778311009,7.3997635194639449e-17,4.1076939180450772e-33,2.2802281829631827e-49] ; [0.22214166730181911,6.1656698441775213e-18,3.4226343116214427e-34,1.8999437088170993e-50]",0.00034577068917962528864980778995916839279651382077593419427617715822265154201886617,0.00034577068917962528864980778996533136861855297550571332369244892564197346729315541 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144,572114432512329142864001791218144 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,qdpp,ddreal,qdpp dd_real,qdpp fmod,wide_exponent,4096,10322096095657499357,78.323405,0.000000,0.000000,,,,NaN,no,"[1.2347084998878686e+21,34270.045131897481,1.9023696580187922e-12,1.0560272978403741e-28] ; [3.0778362709487343e-89,8.5427117350842915e-106,4.7421576305130505e-122,2.6324262938987323e-138]",1.4551915228366851806640625e-11,1.496236298527499726192933808693620496158132324462865624527799753897426005495429e-89 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,wide_exponent,4096,10322096095657499357,78.330828,0.000000,0.000000,,,,NaN,no,"[1.2347084998878686e+21,34270.045131897481,1.9023696580187922e-12,1.0560272978403741e-28] ; [3.0778362709487343e-89,8.5427117350842915e-106,4.7421576305130505e-122,2.6324262938987323e-138]",-1.4551915228366851806640625e-11,1.496236298527499726192933808693620496158132324462865624527799753897426005495429e-89 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144,572114432512329142864001791218144 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,quotient_reduction,2,10322096095657499335,inf,inf,inf,90.000000,inf,yes,Both,yes,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,0,0] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,0,0]",134.96799785736229470766307175341820151552670393203375029736457157980566989863291,134.96799785736229470766307175341820151552670393203375029736457157980566989863291 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,qdpp,ddreal,qdpp dd_real,qdpp fmod,quotient_reduction,2,10322096095657499335,24.892057,0.000000,0.000000,,,,NaN,no,"maximum binary64 below 2^900 [8.452712498170643e+270,0,0,0] ; negative double divisor [-7.5,0,0,0]",0,0.5 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,quotient_reduction,2,10322096095657499335,24.892057,0.000000,0.000000,,,,NaN,no,"maximum binary64 below 2^900 [8.452712498170643e+270,0,0,0] ; negative double divisor [-7.5,0,0,0]",0,0.5 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,quotient_reduction,2,10322096095657499335,inf,inf,inf,,,,No,no,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,0,0] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,0,0]",134.96799785736229470766307175341820151552670393203375029736457157980566989863291,134.96799785736229470766307175341820151552670393203375029736457157980566989863291 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,moderate,4099,10322096095657499356,137.991491,inf,103.120938,90.000000,13.120938,yes,Both,yes,"[4.651496856054143,1.2910497271407093e-16,7.1667656650382064e-33,3.9783541267092195e-49] ; [1.1968567583256404,3.3219448256783813e-17,1.8440498160012704e-33,1.0236532821401969e-49]",-0.13593017724841871918057204650149481280191019956683356060646777679554175755072265,-0.13593017724841871918057204650150713875355427787629311886530032033038040140127123 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,qdpp,ddreal,qdpp dd_real,qdpp drem,moderate,4099,10322096095657499356,134.409394,100.966202,95.502103,,,,NaN,no,"[2.666045778311009,7.3997635194639449e-17,4.1076939180450772e-33,2.2802281829631827e-49] ; [0.22214166730181911,6.1656698441775213e-18,3.4226343116214427e-34,1.8999437088170993e-50]",0.00034577068917962528864980778995916839279651382077593419427617715822265154201886617,0.00034577068917962528864980778996533136861855297550571332369244892564197346729315541 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remainder,moderate,4099,10322096095657499356,134.409394,100.966202,95.502103,,,,NaN,no,"[2.666045778311009,7.3997635194639449e-17,4.1076939180450772e-33,2.2802281829631827e-49] ; [0.22214166730181911,6.1656698441775213e-18,3.4226343116214427e-34,1.8999437088170993e-50]",0.00034577068917962528864980778995916839279651382077593419427617715822265154201886617,0.00034577068917962528864980778996533136861855297550571332369244892564197346729315541 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,tlfloat,tlquad,TLFloat Quad,tlfloat::remainder,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,near_one,4099,10322096095657499359,107.411772,104.726423,103.815855,80.000000,23.815855,yes,Both,yes,"[0.51829726641315743,1.4385638969304155e-17,-7.9856338038331893e-34,4.4329172576202887e-50]",0.54181616064164601141836335700755281177762270906400557918307925851265915984100729,0.54181616064164601141836335700752246129643265188541540400851198947696500079557021 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,qdpp,ddreal,qdpp dd_real,qdpp sinh,near_one,4099,10322096095657499359,107.090908,104.381391,103.645559,,,,NaN,no,"[0.70605664046588912,1.9597008473367903e-17,-1.0878525010453667e-33,6.0387944702831416e-50]",0.76619976927372938814837145149464280564137290853475812074181692276457489310104165,0.76619976927372938814837145149469110262141228326110030876169141933709498395269912 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,near_one,4099,10322096095657499359,103.314713,100.590468,99.932085,,,,Both,no,"[0.556376029442197,1.5442536955906277e-17,-8.5723300435360125e-34,4.7585990945098258e-50]",0.58552836632655900670708376199067605028722445297766704511594490836778881259760965,0.58552836632655900670708376199116021458707057522670375998661998280538289617921361 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,near_one,4099,10322096095657499359,114.943677,113.141428,113.021471,,,,No,no,"[0.88382018328015488,2.4530937927651344e-17,-1.3617406051464522e-33,7.559178867002926e-50]",1.0034630059833739039108480399599084583957300102559614242164711890692549607628781,1.0034630059833739039108480399599085535982428899557028619169496230290414232934836 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,moderate,4099,10322096095657499356,107.428545,104.869846,103.568829,80.000000,23.568829,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50]",0.12683416188096790784216939618227372193425686465939287968000771713444896349187729,0.12683416188096790784216939618228215357757794097427308352934774394732010797034323 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,qdpp,ddreal,qdpp dd_real,qdpp sinh,moderate,4099,10322096095657499356,106.885784,104.435203,103.870123,,,,NaN,no,"[-0.2542586325750964,-7.057094702364497e-18,3.9174745127626403e-34,-2.17463520122565e-50]",-0.25700703019627618270770115594239598265277418504551841190443166735831240221621385,-0.25700703019627618270770115594240984773141934339998680690421520718433231060336277 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,moderate,4099,10322096095657499356,103.779582,101.002087,100.236433,,,,Both,no,"[-0.53059214692798662,-1.4726890455118619e-17,8.1750664322025707e-34,-4.5380734904357627e-50]",-0.55584104592641476129020046112854089859321241383858441232520679895282023075253619,-0.5558410459264147612902004611289130996470591645326795565000699081687663834429277 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,moderate,4099,10322096095657499356,114.974128,113.192568,113.003172,,,,No,no,"[-4.1591464579851021,-1.1543950401108066e-16,6.4081797652204933e-33,-3.5572543606424108e-49]",-32.000618655313629721674682365518236008420232252926831380721182706899571868142118,-32.0006186553136297216746823655182329336415739416390744160297430115592657339984 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,near_one,4099,10322096095657499359,108.151971,105.591524,104.831618,80.000000,24.831618,yes,Both,-,"[1.4994043079684287,4.1616829648217466e-17,-2.3101981243676942e-33,1.2824175745594325e-49]",2.3511416377389521966137617451012654144360692751585280356211248541098424169604186,2.3511416377389521966137617451013305498775090885888924794020061506206886998298218 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,qdpp,ddreal,qdpp dd_real,qdpp cosh,near_one,4099,10322096095657499359,107.863612,105.297250,104.470578,,,,NaN,-,"[1.4489040565134639,4.0215166100350915e-17,-2.2323901671867327e-33,1.2392254817787567e-49]",2.2466362233200427213995508459808834140324823472328528703239550884385167250911763,2.24663622332004272139955084598096335238256731634234766524569758842515233906734 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,near_one,4099,10322096095657499359,104.244078,101.474027,101.018845,,,,Both,-,"[1.4459858354426181,4.0134169194755932e-17,-2.2278939357109857e-33,1.2367295719245473e-49]",2.2407748785941455468149928931172890798881812171960175770167589259784790556295775,2.2407748785941455468149928931181614399296154393447339518228073553103157037095686 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,near_one,4099,10322096095657499359,114.895079,113.182096,113.010341,,,,No,-,"[1.3229625356615966,3.6719586695199608e-17,-2.0383465301865082e-33,1.1315096249889291e-49]",2.0104364576665678758598407499062611809762474391010385287739734136349539772581352,2.0104364576665678758598407499062609887609457666528309771732843508256939227761068 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,moderate,4099,10322096095657499356,107.662138,105.118172,104.370708,80.000000,24.370708,yes,Both,-,"[-7.2839693641636938,-2.0217076246896986e-16,1.122273176995369e-32,-6.2298676050974111e-49]",728.37982867708396528583195554001745260585065072868172597435332260573659368674271,728.37982867708396528583195554004522697642161075015288462613983940694317570296734 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,qdpp,ddreal,qdpp dd_real,qdpp cosh,moderate,4099,10322096095657499356,107.483805,104.881438,104.111506,,,,NaN,-,"[7.0128923877089875,1.946468649513252e-16,-1.0805071557003232e-32,5.9980196126536888e-49]",555.43190455748570319974002005868170632481445737714788744485670812789379624518915,555.43190455748570319974002005870705438166427560668951714415596620645132619201956 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,moderate,4099,10322096095657499356,103.832933,101.138682,100.616889,,,,Both,-,"[6.2894204955453095,1.7456648614259411e-16,-9.6903866121708154e-33,5.3792451671757032e-49]",269.42141683849341758232407964909905497460624068820139994447256104326271497484413,269.42141683849341758232407964923764454985239125085761375472047443911151216271434 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,moderate,4099,10322096095657499356,114.931183,113.167572,113.012441,,,,No,-,"[2.0680399334084143,5.7399638747857426e-17,-3.1863200271518802e-33,1.7687629289841357e-49]",4.0178692533490240404296040425970871191188024353226664008220687178646150783389857,4.0178692533490240404296040425970867355340668113774081960274487118933383171930497 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,near_one,4099,10322096095657499359,108.508993,105.293208,103.771823,80.000000,23.771823,yes,Both,yes,"[0.51172914905977851,1.4203337091450122e-17,-7.884435932720214e-34,4.3767411543439516e-50]",0.47129137278430720759814686288642179705346521613436667069278209179356009528305549,0.47129137278430720759814686288639457893398171528583227402623085761363208890619784 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,qdpp,ddreal,qdpp dd_real,qdpp tanh,near_one,4099,10322096095657499359,108.592328,105.735071,105.098015,,,,Both,no,"[0.58416164284675398,1.6213742649783091e-17,-9.0004352025680418e-34,4.9962451967689124e-50]",0.52568361604852371688202223691267621130986870473801164119274069051399034258054144,0.52568361604852371688202223691268831922667016929762092801084851574231028090029755 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,near_one,4099,10322096095657499359,104.549583,101.155017,100.345784,,,,Both,no,"[0.556376029442197,1.5442536955906277e-17,-8.5723300435360125e-34,4.7585990945098258e-50]",0.50528364840645601747577363559900197677740795879784146166067930320588141857029996,0.50528364840645601747577363559931562602749387840749911387652478785100115049351614 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,near_one,4099,10322096095657499359,115.041332,113.224776,113.018718,,,,Inf,no,"[0.552774916573326,1.5342585995373914e-17,-8.5168461146777975e-34,4.7277993268522986e-50]",0.50259706445063723172976483018675200373774673231800013130307827226899634702472763,0.50259706445063723172976483018675195596328587350834779271290641898064907256890663 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,moderate,4099,10322096095657499356,109.925995,105.123457,103.815933,80.000000,23.815933,yes,Both,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.48322034922123225518708897646637636069385959299582733007677741617069688828678409,0.48322034922123225518708897646634929399270770971586954580993858000068003447759588 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,qdpp,ddreal,qdpp dd_real,qdpp tanh,moderate,4099,10322096095657499356,109.941576,105.403737,104.022939,,,,Both,no,"[-0.2542586325750964,-7.057094702364497e-18,3.9174745127626403e-34,-2.17463520122565e-50]",-0.24891764507154159340917437775173972890450198659567844774309803106940482131381742,-0.24891764507154159340917437775175180789991987808388789206287063251566640478939434 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,moderate,4099,10322096095657499356,107.024889,102.226945,100.639803,,,,Both,no,"[-0.53059214692798662,-1.4726890455118619e-17,8.1750664322025707e-34,-4.5380734904357627e-50]",-0.48583360068250018583086622934612463370687351803631456906975097116002659802802555,-0.48583360068250018583086622934637060713264426066036289533463488732206999871421232 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,moderate,4099,10322096095657499356,115.363409,113.532562,113.121187,,,,Inf,no,"[-0.5998341324142249,-1.6648741619058185e-17,9.2419081382567522e-34,-5.1302896032816304e-50]",-0.53693152879880785898041492583469711473728507809526835316606195460550324423387725,-0.53693152879880785898041492583469706719845615505246020917703587632005152396862512 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,near_one,4099,10322096095657499359,107.942783,105.155677,104.205601,80.000000,24.205601,yes,Both,yes,"[0.54780977077077553,1.5204775515608602e-17,-8.4403459308427531e-34,4.6853331941114368e-50]",0.52356044719022625228591770335188992100790509674337745785256442894450845670917261,0.52356044719022625228591770335191230591271180851991336042503192896063029229750644 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,qdpp,ddreal,qdpp dd_real,qdpp asinh,near_one,4099,10322096095657499359,106.710833,103.961722,103.072032,,,,NaN,no,"[0.52823964483236285,1.4661595405317608e-17,-8.1388203983610065e-34,4.517952899774639e-50]",0.50632644493980583852529647906712821803145603212361033746932194310463870579042123,0.5063264449398058385252964790670807220011452357647174662076578948536130292071603 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,near_one,4099,10322096095657499359,103.817192,100.780938,99.800033,,,,Both,no,"[0.5576392959998614,1.5477599646370227e-17,-8.5917937466652033e-34,4.769403620189074e-50]",0.53216330948166039562825976302834831342044029859942942121705690004980493501562933,0.53216330948166039562825976302883052907969987597028703665857651454611260317937864 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,near_one,4099,10322096095657499359,114.884758,113.122222,113.007648,,,,No,no,"[1.1779140555896355,3.2693682638630247e-17,-1.8148639612597521e-33,1.0074518781764974e-49]",1.0017569054609729283589884138505580828278717088605237274331326762110317037113294,1.0017569054609729283589884138505579868722109578149090755180498437202003300766939 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,moderate,4099,10322096095657499356,108.220931,105.311170,103.818628,80.000000,23.818628,yes,Both,yes,"[-0.065200541635407561,-1.8096785635415158e-18,1.0045734042071851e-34,-5.5765026163844551e-51]",-0.065154433999027981604796867967127986881415212588611420145090880769980952458286794,-0.065154433999027981604796867967124344186568215933203026966926467120453192197675953 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,qdpp,ddreal,qdpp dd_real,qdpp asinh,moderate,4099,10322096095657499356,107.434914,104.625661,0.000000,,,,NaN,no,"midpoint [0,0,0,0]",-0.5,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,moderate,4099,10322096095657499356,105.110576,101.672387,100.007734,,,,Both,no,"[0.4300835480404146,1.1937216438673698e-17,-6.6264862700747261e-34,3.6784388146997172e-50]",0.417820251288375409972859501512898045290567648359341993891738758094139827292679,0.4178202512883754099728595015132258850600119393786524691588748596799786548401261 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,moderate,4099,10322096095657499356,114.871483,113.164718,113.024305,,,,No,no,"[3.7333993131913807,1.0362264694062042e-16,-5.7522124253040164e-33,3.1931193385537162e-49]",2.0279383819186585084121279272279713196675799418072996533879457279437663955179438,2.0279383819186585084121279272279715116885312926883178850691969552555567203716169 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,moderate,4099,10322096095657499387,108.351907,105.741626,104.602282,80.000000,24.602282,yes,Both,-,"[1.0163605766345611,2.8209672837524767e-17,-1.5659514150681434e-33,8.6927765822649907e-50]",0.18064417420571660663002643085721230147927409837472224057688179881691649397712496,0.18064417420571660663002643085721816825671862302878034638011489993285710967947058 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,qdpp,ddreal,qdpp dd_real,qdpp acosh,moderate,4099,10322096095657499387,107.770766,105.082067,0.000000,,,,NaN,-,"lower endpoint [1,0,0,0]",-0.5,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,moderate,4099,10322096095657499387,105.538843,102.217591,100.384388,,,,Both,-,"[1.1709254555463331,3.249971002168098e-17,-1.8040963179855585e-33,1.0014746354345175e-49]",0.57665699913917249167543347514105386745673957917489461428525946025923365478860205,0.5766569991391724916754334751414023697075837995469982943468518144667513041144549 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,moderate,4099,10322096095657499387,115.059144,113.267306,113.024351,,,,No,-,"[3.8699921915058342,1.0741386090323363e-16,-5.9626670769326946e-33,3.3099451384925286e-49]",2.0292730557141128075372232618212138749815878457667406971551750687385697394238271,2.0292730557141128075372232618212136828403580686083850658195804537308812685715241 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,boundary,4101,10322096095657499355,107.711288,104.331717,103.672888,80.000000,23.672888,yes,Both,-,"[1.0000006976642144,2.7755594979700771e-17,-1.54074503043171e-33,8.5528530393103596e-50]",0.0011812401392645466366367223496664025691107131134376936381879814208025359246329034,0.0011812401392645466366367223496664756307232078155433668789257650353131882010275132 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,qdpp,ddreal,qdpp dd_real,qdpp acosh,boundary,4101,10322096095657499355,106.676944,103.934820,0.000000,,,,NaN,-,"[1,0,0,0]",-0.5,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,boundary,4101,10322096095657499355,105.680702,101.710952,101.079624,,,,Both,-,"[1.9999990658472695,5.5511125303311079e-17,-3.0814864717294043e-33,1.7105686154924606e-49]",1.3169573575913183806206053356776144386291410718207369817816534095233915735434493,1.3169573575913183806206053356781059946048036439182701968030728549965132899787948 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,boundary,4101,10322096095657499355,114.746080,113.201891,113.036560,,,,No,-,"[1.0000004817944794,2.7755588988112018e-17,-1.5407446978317207e-33,8.5528511930095289e-50]",0.00098162563206491441874298495040138570975940288164826724838384161703782738019139625,0.00098162563206491441874298495040138580192116085770131138514473092172470104226838173 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,moderate,4099,10322096095657499356,107.718351,104.542010,103.139045,80.000000,23.139045,yes,Both,yes,"[-0.28874902442031025,-8.0143953812370009e-18,4.4488831403494138e-34,-2.4696262481412955e-50]",-0.29720096062669683272865803517211421035379945494633700815507025452637257512122915,-0.29720096062669683272865803517208759673932197508207544978047397151679963698000212 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,qdpp,ddreal,qdpp dd_real,qdpp atanh,moderate,4099,10322096095657499356,107.199500,104.396151,103.554334,,,,Both,no,"[-0.084655633592085944,-2.3496658394541165e-18,1.3043265575685784e-34,-7.2404668792135272e-51]",-0.084858738000380082551010311704664761059101588266307168112619662759567307208641296,-0.084858738000380082551010311704670459233783125377342399423042080577740336303080062 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,moderate,4099,10322096095657499356,105.626173,102.148131,101.316477,,,,Both,no,"[0.62764313350169854,1.7420596451536667e-17,-9.6703736415996537e-34,5.3681357368160785e-50]",0.73751780205133126725673321943555768093904551298771999434742818041454981425886217,0.73751780205133126725673321943579128155966759716208171117997200450929687036778351 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,moderate,4099,10322096095657499356,114.908941,113.183849,113.009480,,,,No,no,"[-0.46396013668772096,-1.2877480656473566e-17,7.1484377619910142e-34,-3.9681800967311743e-50]",-0.50234596747773904865253807286233097224104131869860818047026432546942747991991496,-0.50234596747773904865253807286233092418371010656600101473678518793597466683589449 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,boundary,4105,10322096095657499355,108.512745,106.655151,106.203619,80.000000,26.203619,yes,Both,yes,"[-0.99899927667986499,-2.7727799963846583e-17,1.539202097103153e-33,-8.544288038776232e-50]",-3.799839456997147855581613541852042024176399900088711456868967222127997374059305,-3.799839456997147855581613541852082695691985906489816947756475473707459623001287 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,qdpp,ddreal,qdpp dd_real,qdpp atanh,boundary,4105,10322096095657499355,107.993764,105.426852,0.000000,,,,Both,no,"[-0,0,0,0]",-0.25,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,boundary,4105,10322096095657499355,107.828304,106.272609,104.585034,,,,Both,no,"[-0.5,0,0,0]",-0.54930614433405484569762261846124479796810281996701244989017928624722153507775602,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,boundary,4105,10322096095657499355,115.361632,113.939200,113.173250,,,,No,no,"[-0.5,0,0,0]",-0.54930614433405484569762261846126280541308284062223852328394245531764986632816683,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,near_one,4099,10322096095657499359,107.766481,104.260004,103.477540,80.000000,23.477540,yes,Both,yes,"[0.63773432238017391,1.7700683207504784e-17,-9.8258530242838391e-34,5.4544441320713228e-50]",0.63288603898704082304852473006912003275150944031003931863308835424966614091601969,0.6328860389870408230485247300690752116994000610050783793434311866968213898036298 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,near_one,4099,10322096095657499359,106.197113,102.183057,101.184994,,,,Both,no,"[0.53548819375999224,1.4862783053182011e-17,-8.2505019778256258e-34,4.5799486302487013e-50]",0.55112665424029227785508649938232538753270271835738832653895855062664566048624692,0.55112665424029227785508649938251660744941249076854316599667893359729852255925888 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,near_one,4099,10322096095657499359,115.124806,113.304511,113.099781,,,,Inf,no,"[0.50289575568916656,1.3958161173809507e-17,-7.748335958296108e-34,4.3011904917156829e-50]",0.52304092944980720556572922310906538941879260415288739219076647612942224975507433,0.52304092944980720556572922310906534241757921999581684753101762682302235845555926 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,moderate,4099,10322096095657499356,114.031302,105.136563,103.642929,80.000000,23.642929,yes,Both,yes,"[0.57618201352237719,1.5992263444685661e-17,-8.8774895460806198e-34,4.9279966474639169e-50]",0.58483862789646320066419155791433430439304208383200808363911138388832600121247651,0.58483862789646320066419155791429737215979664256706430739228534678145335856964206 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,moderate,4099,10322096095657499356,113.985095,103.700474,101.648786,,,,Both,no,"[-0.5716770143103389,-1.5867224598407584e-17,8.8080790430253763e-34,-4.8894660781425438e-50]",-0.58118187967003879843073421984341735301833588689049142915266289071210548122792261,-0.58118187967003879843073421984356356345148985854257440755257771327766377011312792 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,moderate,4099,10322096095657499356,115.374771,113.586571,113.036088,,,,Inf,no,"[0.2267593093247573,6.2938351565110877e-18,-3.4937803519769427e-34,1.9394376948738926e-50]",0.25155171091007438344002347195342211717096167376876435890978837978420765923021074,0.25155171091007438344002347195342214079608489454741680081317269235003386899327349 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,near_one,4099,10322096095657499359,105.308687,102.381484,101.601777,80.000000,21.601777,yes,Both,-,"[0.9902100102210416,2.74838488140428e-17,-1.5256600879333559e-33,8.4691147868762635e-50]",0.16140301992014431339678047519482652144140492984788687432496615166421793929885098,0.16140301992014431339678047519478457172356343218546211428730930584097639007690213 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,near_one,4099,10322096095657499359,103.754763,101.145295,100.349669,,,,Both,-,"[1.3269384103584123,3.6829939385985342e-17,-2.0444723350934913e-33,1.1349101298149763e-49]",0.060576462988822571448810903007093159144687718926563865599815508636641347983697869,0.060576462988822571448810903007055658100102621540510399378637298350232657879135663 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,near_one,4099,10322096095657499359,114.982303,113.213810,113.071281,,,,Inf,-,"[0.80083449033122145,2.2227622251991859e-17,-1.2338809003415918e-33,6.8494149260222667e-50]",0.25740285684031596236392165679791925931975478436236106519156635466784809572471371,0.25740285684031596236392165679791928291183093915807724913103163989411993536165529 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,moderate,4099,10322096095657499356,109.069920,100.123363,99.167646,80.000000,19.167646,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804815742671822427612167381748211215236610271972494957,0.0048523201680211414554273497804747585214492493110494604164051752716872765694644792 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,moderate,4099,10322096095657499356,108.835706,99.620228,99.060329,,,,Both,-,"[6.9490746956892782,1.9287556817485724e-16,-1.070674483376928e-32,5.9434373166185492e-49]",8.5740965398686050033209262286348904843349839873934226306933761725669491073941353e-23,8.5740965398686050033209262286219169640957175473792335532635992276588891700122152e-23 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,moderate,4099,10322096095657499356,115.203014,113.242670,113.051599,,,,Inf,-,"[7.5037321448425516,2.0827040494560277e-16,-1.1561329945930663e-32,6.4178273506302694e-49]",2.6241573054106070556560136630867966813651251129676318065538857582990160319181036e-26,2.624157305410607055656013663086796437546133956840801798010299652149670834993565e-26 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,moderate,4099,10322096095657499371,107.300170,103.199673,102.168212,80.000000,22.168212,yes,Both,-,"[16.10862066659595,4.4710403897518653e-16,-2.4819259923657773e-32,1.3777456910700632e-48]",28.197381657001775717891747205953291356104893832451631814899496025761393980246794,28.197381657001775717891747205948342415185062324244223614602442709080412981510555 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lgamma,moderate,4099,10322096095657499371,105.130791,100.729534,92.065791,,,,Both,-,"[0.99874974000558037,2.7720873929814604e-17,-1.5388176249805709e-33,8.5421537897621465e-50]",0.00072295607710545662058194796458275488909819673752452280824622669615210185075152016,0.00072295607710545662058194796472224625027501458658803985557334948681356598407441761 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::lgamma,moderate,4099,10322096095657499371,114.971639,113.175643,113.013850,,,,No,-,"[17.500019022698545,4.8572310125945387e-16,-2.6963048530529103e-32,1.4967498646339452e-48]",32.081168794062295073979477959328457529686036531915204354297578928385120677901909,32.081168794062295073979477959328454469896577802020991166202567137045500772062679 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,moderate,4099,10322096095657499368,105.565044,98.349598,97.317514,80.000000,17.317514,yes,Both,-,"[16.916625286240897,4.6953067229351934e-16,-2.6064188157399712e-32,1.4468530905253747e-48]",16565261246416.8279913958728258930306644070018506909036659635603427886962890625,16565261246416.827991395872825976920133201596664513013387683984998603514086978856 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tgamma,moderate,4099,10322096095657499368,100.757166,97.383410,96.496549,,,,Both,-,"[16.868177199116474,4.6818596774790482e-16,-2.5989542060006744e-32,1.4427093997241705e-48]",14465982228876.97039145927965612579112197888520086053176783025264739990234375,14465982228876.970391459279656255208345090859253988616153313666634359989655775049 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::tgamma,moderate,4099,10322096095657499368,115.005599,113.180213,113.028818,,,,No,-,"[19.355750178950849,5.3722998768909317e-16,-2.9822255092576032e-32,1.655467712501137e-48]",18139783686946539.5291010872149636591610377678307486348785459995269775390625,18139783686946539.529101087214963657448786918022005302501784474121108477330902841 diff --git a/validation/metrics/data/windows/x86_64/detail/MSVC_f128_benchmark.csv b/validation/metrics/data/windows/x86_64/detail/MSVC_f128_benchmark.csv new file mode 100644 index 0000000..258edc1 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MSVC_f128_benchmark.csv @@ -0,0 +1,292 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,81920,1.910787,1.911521|1.910176|1.913751|1.909342|1.913963|1.910787|1.909441,56197120,107408600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,qdpp,ddreal,qdpp dd_real,qdpp operator+,81920,1.852580,1.852580|1.850622|1.854816|1.852919|1.849365|1.856774|1.847734,57917440,107269800.000000,0.969538 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,81920,4.205704,4.192759|4.206543|4.212418|4.205170|4.205933|4.205068|4.205704,27525120,115737600.000000,2.201033 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,81920,162.133789,162.409668|162.133789|161.961670,245760,39854500.000000,84.851859 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,81920,2.143327,2.144507|2.143501|2.143327|2.143072|2.141355|2.142817|2.145030,52183040,111847700.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,qdpp,ddreal,qdpp dd_real,qdpp operator-,81920,1.867144,1.871108|1.869465|1.867144|1.869078|1.864183|1.863651|1.866697,57917440,108151100.000000,0.871143 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,81920,4.263051,4.255778|4.247869|4.256541|4.276810|4.266205|4.295375|4.263051,27525120,117420700.000000,1.988988 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,81920,162.232666,162.225342|162.232666|162.500000,245760,39891600.000000,75.691993 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,81920,1.625176,1.629102|1.628213|1.615615|1.625527|1.622412|1.624219|1.625176,71680000,116431500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,qdpp,ddreal,qdpp dd_real,qdpp operator*,81920,0.776560,0.776560|0.774991|0.777560|0.774703|0.777824|0.776254|0.777366,148520960,115321400.000000,0.477832 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,81920,5.507186,5.514609|5.506988|5.511640|5.507186|5.532194|5.502963|5.505272,21217280,116940100.000000,3.388671 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,81920,134.572754,134.572754|134.414062|134.637451,245760,33064900.000000,82.805045 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,81920,1.675125,1.676816|1.673804|1.674545|1.685251|1.677566|1.674975|1.675125,69959680,117313200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,qdpp,ddreal,qdpp dd_real,qdpp operator/,81920,10.518927,10.554842|10.518927|10.537238|10.500617|10.509868|10.548738|10.517193,10895360,114693000.000000,6.279488 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::operator/,81920,6.342515,6.327496|6.358643|6.340628|6.340628|6.342515|6.391528|6.365856,18923520,120211100.000000,3.786294 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,81920,231.254883,231.182861|231.379395|231.254883,245760,56837500.000000,138.052325 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,81920,5.836921,5.829708|5.836921|5.839511|5.845392|5.836589|5.833814|5.844431,18923520,110476500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,81920,11.884478,11.855325|11.870907|11.871051|11.893885|11.884478|11.888715|11.888715,9748480,115802300.000000,2.036087 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,81920,231.793213,231.793213|231.822510|231.307373,245760,56928100.000000,39.711552 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,81920,3.490382,3.545429|3.524538|3.502474|3.490382|3.469146|3.480685|3.457216,30392320,106242300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,qdpp,ddreal,qdpp dd_real,qdpp abs,81920,2.967204,3.072286|3.006612|2.979390|2.967204|2.954834|2.937907|2.926270,34406400,102454900.000000,0.850109 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,81920,4.693663,4.706346|4.713165|4.698427|4.691877|4.693663|4.692919|4.686994,23511040,110446100.000000,1.344742 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,81920,2.807066,2.841698|2.818367|2.807066|2.825042|2.767905|2.762451|2.744790,35553280,99383200.000000,0.804229 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,81920,3.505099,3.548031|3.521199|3.509337|3.498650|3.505099|3.504731|3.502197,30392320,106760600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,qdpp,ddreal,qdpp dd_real,qdpp fabs,81920,2.991343,3.092765|3.041330|3.002971|2.991343|2.975764|2.955488|2.941212,33832960,101503100.000000,0.853426 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fabs,81920,4.321488,4.363645|4.316946|4.321488|4.335001|4.337130|4.303490|4.315384,24657920,106709200.000000,1.232915 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,81920,2.788783,2.848152|2.857802|2.808935|2.788783|2.768574|2.777080|2.760552,36126720,101205800.000000,0.795636 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,81920,1.613014,1.612878|1.613440|1.616046|1.612132|1.614496|1.613014|1.612994,72253440,116586100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,qdpp,ddreal,qdpp dd_real,qdpp sqr,81920,0.777800,0.774993|0.773957|0.779591|0.770006|0.777800|0.780237|0.782570,154828800,120305400.000000,0.482203 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,8192,24.316129,24.314742|24.462336|24.316129,1081344,26346300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,qdpp,ddreal,qdpp dd_real,qdpp inv,8192,10.870229,10.903599|11.065939|10.926421|10.870229|10.853842|10.857292|10.859481,10551296,115064600.000000,0.447038 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,81920,3.177683,3.157209|3.234585|3.235891|3.181645|3.177683|3.175242|3.167939,32686080,104269500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,81920,6.428070,6.421051|6.428070|6.413460|6.419907|6.450844|6.446075|6.429596,18350080,117988400.000000,2.022880 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,81920,98.176270,98.525391|98.095703|98.176270,245760,24149800.000000,30.895552 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,81920,3.239968,3.274436|3.250954|3.249068|3.239968|3.237771|3.236572|3.237749,31539200,102396600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,81920,6.451849,6.527454|6.529384|6.517058|6.451849|6.436925|6.439957|6.429325,17776640,115121400.000000,1.991331 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,81920,98.110352,98.287354|97.928467|98.110352,245760,24111200.000000,30.281271 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,81920,3.766412,3.766412|3.753798|3.843791|3.847747|3.789017|3.761597|3.765214,30965760,117349500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,81920,8.272044,8.269908|8.274434|8.272044|8.271840|8.269806|8.272044|8.286438,13762560,113868500.000000,2.196267 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,81920,283.262939,283.262939|283.781738|283.006592,245760,69636200.000000,75.207642 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,81920,1.635665,1.675482|1.658669|1.639193|1.632857|1.635665|1.631547|1.626010,63078400,103623600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::copysign,81920,2.617955,2.624355|2.619193|2.616002|2.629220|2.617955|2.609916|2.608311,40140800,105082600.000000,1.600545 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,tlfloat,tlquad,TLFloat Quad,tlfloat::copysign,81920,6.011926,6.021174|6.011926|6.016254|6.005046|6.018214|6.004861|6.005674,18923520,113765900.000000,3.675525 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,81920,1.379161,1.377854|1.379230|1.377758|1.377438|1.379161|1.381325|1.379481,80855040,111490400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,qdpp,ddreal,qdpp dd_real,qdpp floor,81920,1.316901,1.343585|1.319408|1.316901|1.320416|1.312510|1.316401|1.309233,85442560,112765300.000000,0.954857 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::floor,81920,4.676684,4.782431|4.678558|4.676684|4.669048|4.677053|4.669473|4.668139,24657920,115615300.000000,3.390964 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,tlfloat,tlquad,TLFloat Quad,tlfloat::floor,81920,54.045410,54.045410|54.088745|54.029541,491520,26568900.000000,39.187172 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,81920,1.941968,1.940845|1.941968|1.945386|1.946973|1.931360|1.943103|1.935376,57344000,111288400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,qdpp,ddreal,qdpp dd_real,qdpp ceil,81920,1.358696,1.357092|1.358696|1.354410|1.353145|1.359988|1.362100|1.372177,78561280,106816500.000000,0.699649 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ceil,81920,6.346664,6.346664|6.344490|6.349373|6.350861|6.340904|6.338997|6.348610,18350080,116444100.000000,3.268162 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,tlfloat,tlquad,TLFloat Quad,tlfloat::ceil,81920,53.611450,53.673706|53.583984|53.611450,491520,26356800.000000,27.606766 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,81920,3.468887,3.465328|3.465287|3.462349|3.468887|3.471411|3.474556|3.469135,33832960,117337300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,qdpp,ddreal,qdpp dd_real,qdpp aint,81920,4.698816,4.740287|4.726365|4.705580|4.698816|4.692350|4.683442|4.683871,21217280,99814300.000000,1.354560 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::trunc,81920,8.627777,8.668518|8.632253|8.816783|8.627014|8.619537|8.606873|8.627777,13762560,119142000.000000,2.487189 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,tlfloat,tlquad,TLFloat Quad,tlfloat::trunc,81920,48.332113,48.353271|48.324382|48.332113,737280,35637600.000000,13.933034 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,81920,10.303406,10.304749|10.288269|10.294983|10.312927|10.303406|10.293823|10.313293,11468800,118147400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,qdpp,ddreal,qdpp dd_real,qdpp round,81920,3.703238,3.701782|3.716196|3.704834|3.698050|3.711313|3.703238|3.700256,29818880,110481800.000000,0.359419 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::round,81920,13.605632,13.719076|13.726644|13.599202|13.590983|13.605632|13.600260|13.625814,8601600,117310600.000000,1.320498 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,tlfloat,tlquad,TLFloat Quad,tlfloat::round,81920,52.491455,52.530518|52.406413|52.491455,737280,38689600.000000,5.094573 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,81920,9.584263,9.569964|9.580253|9.581241|9.584263|9.599202|9.629371|9.593273,12042240,115498100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,tlfloat,tlquad,TLFloat Quad,tlfloat::rint,81920,64.600220,64.600220|64.923096|64.563599,491520,31799200.000000,6.740238 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,8192,4.354148,4.376559|4.357477|4.353309|4.354148|4.353742|4.354797|4.347544,25862144,112676100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lround,8192,29.282029,29.282029|29.304133|29.211426,909312,26611800.000000,6.725088 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,8192,4.369123,4.403949|4.379342|4.369123|4.371029|4.356032|4.351199|4.353629,25346048,110741600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::llround,8192,444.262695,444.262695|446.211751|442.769368,73728,32765800.000000,101.682351 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,8192,83.590933,83.557129|83.673565|83.590933,319488,26711500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,8192,129.050022,128.525119|129.227702|129.050022,221184,28518200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,4096,17.920127,17.920127|18.601874|17.837447,1462272,26496100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,qdpp,ddreal,qdpp dd_real,qdpp fmod,4096,18.945093,18.945093|18.995900|18.922438,1363968,25853300.000000,1.057196 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,4096,50.605809,50.517805|50.605809|50.663154,528384,26733900.000000,2.823965 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,4096,616.168213,611.401367|616.168213|621.838379,49152,30300700.000000,34.384143 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,4096,21.780141,21.780141|21.800741|21.731567,1179648,25681900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,qdpp,ddreal,qdpp dd_real,qdpp drem,4096,19.313315,19.354304|19.313315|19.285541,1339392,25874000.000000,0.886740 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remainder,4096,51.148596,51.071948|51.211051|51.148596,528384,27023600.000000,2.348405 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,tlfloat,tlquad,TLFloat Quad,tlfloat::remainder,4096,680.120850,694.354248|680.120850|670.153809,49152,33499200.000000,31.226650 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,4096,21.106445,21.076416|21.106445|21.138184,1228800,25936300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,qdpp,ddreal,qdpp dd_real,qdpp divrem,4096,19.831819,19.817770|19.841032|19.831819,1302528,25829400.000000,0.939610 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remquo,4096,51.101472,51.101472|51.017442|51.218432,528384,27007000.000000,2.421131 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,tlfloat,tlquad,TLFloat Quad,tlfloat::remquo,4096,692.346191,692.346191|692.541504|687.377930,49152,33952000.000000,32.802596 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,81920,5.886789,5.881766|5.887556|5.886789|5.877302|5.878174|5.890241|5.907506,20070400,118155400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,81920,15.434047,15.412598|15.413731|15.441895|15.443377|15.538068|15.420968|15.434047,8028160,123983100.000000,2.621811 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,81920,311.843262,312.142334|311.682129|311.843262,245760,76649900.000000,52.973410 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,81920,1.961948,1.957488|1.962020|1.960389|1.965973|1.961948|1.968148|1.961742,57917440,113664700.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,qdpp,ddreal,qdpp dd_real,qdpp ldexp,81920,4.071236,4.072984|4.078561|4.062763|4.059795|4.053022|4.110993|4.071236,29245440,119109800.000000,2.075099 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ldexp,81920,4.165612,4.145607|4.161950|4.170719|4.174431|4.165612|4.184770|4.163146,28098560,117075600.000000,2.123202 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,tlfloat,tlquad,TLFloat Quad,tlfloat::ldexp,81920,60.831909,60.911865|60.584106|60.831909,491520,29872600.000000,31.005874 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,81920,2.182285,2.183340|2.186824|2.181396|2.181041|2.182285|2.188519|2.181835,59064320,128973200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,qdpp,ddreal,qdpp dd_real,qdpp ldexp,81920,4.115137,4.086548|4.115137|4.145654|4.124463|4.084692|4.117993|4.091089,28672000,117823800.000000,1.885701 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbn,81920,4.171242,4.176474|4.176648|4.171242|4.158612|4.166758|4.166409|4.178915,28098560,117191300.000000,1.911410 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,81920,2.187933,2.187933|2.190650|2.190151|2.187828|2.185649|2.186096|2.190335,53329920,116706000.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,qdpp,ddreal,qdpp dd_real,qdpp ldexp,81920,4.095603,4.092036|4.103142|4.094119|4.100390|4.138351|4.095603|4.093424,29245440,119977600.000000,1.871905 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbln,81920,4.168776,4.164964|4.179663|4.177246|4.182851|4.168776|4.163046|4.157067,28098560,117185500.000000,1.905349 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,81920,2.657220,2.649301|2.653511|2.656015|2.660929|2.659943|2.658519|2.657220,44728320,118820400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,81920,4.200694,4.227956|4.247233|4.164861|4.199193|4.200694|4.185944|4.231695,27525120,115831900.000000,1.580860 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,81920,210.336914,210.520020|210.336914|209.831543,245760,51666000.000000,79.156747 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,81920,2.321098,2.319128|2.324912|2.333138|2.324094|2.319710|2.319419|2.321098,50462720,117228500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,81920,5.626458,5.630425|5.624763|5.649414|5.624322|5.640700|5.626458|5.622491,20643840,116250100.000000,2.424051 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,81920,33.294067,33.366089|33.276672|33.294067,983040,32747300.000000,14.344105 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,81920,2.509642,2.482261|2.509642|2.514262|2.514556|2.508931|2.516116|2.503183,45301760,113571200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,81920,79.411011,79.446411|79.411011|79.302368,491520,39020100.000000,31.642366 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f128,bl::nextafter,81920,5.861433,5.872384|5.861433|5.889997|5.907575|5.860142|5.859166|5.851423,20070400,117848000.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter,81920,63.670044,63.688354|63.670044|63.529053,491520,31275000.000000,10.862539 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter,81920,180.418701,180.441895|180.418701|180.126953,245760,44317700.000000,30.780648 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f128,bl::nexttoward,81920,5.851528,5.859235|5.851528|5.860735|5.844587|5.851353|5.836984|5.859515,20070400,117451800.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter (same type),81920,63.704224,63.704224|63.786621|63.668213,491520,31319500.000000,10.886768 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter (same type),81920,180.222168,180.424805|180.222168|179.962158,245760,44286700.000000,30.799166 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,81920,0.686876,0.687334|0.686089|0.686876|0.688510|0.686509|0.688295|0.686716,169738240,116642400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,qdpp,ddreal,qdpp dd_real,qdpp operator==,81920,0.543185,0.542542|0.543213|0.542770|0.543317|0.543704|0.543185|0.543040,202424320,109938700.000000,0.790805 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator==,81920,4.995891,5.002173|5.009498|4.993390|4.997618|4.987912|4.987674|4.995891,23511040,117468400.000000,7.273348 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator==,81920,66.171265,66.376343|66.171265|66.000977,491520,32530200.000000,96.336487 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,81920,0.687940,0.686159|0.687380|0.687586|0.687940|0.688530|0.690687|0.690741,169738240,116853200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,qdpp,ddreal,qdpp dd_real,qdpp operator!=,81920,0.550572,0.549554|0.550925|0.550572|0.550418|0.549002|0.551167|0.551782,200130560,110169600.000000,0.800319 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator!=,81920,4.959503,5.031342|5.012970|5.000549|4.927399|4.900055|4.905945|4.959503,22937600,113828700.000000,7.209204 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator!=,81920,67.123413,67.313232|67.123413|67.034302,491520,33009000.000000,97.571547 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,81920,2.080254,2.093981|2.081896|2.080254|2.084269|2.078491|2.078979|2.070489,51609600,107409600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,qdpp,ddreal,qdpp dd_real,qdpp operator<,81920,1.956411,1.969760|1.956411|1.958281|1.952567|1.952619|1.953086|1.959826,53903360,105516200.000000,0.940467 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<,81920,5.028839,5.025085|5.064667|5.036102|5.028503|5.028839|5.032867|5.022949,22937600,115471200.000000,2.417415 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,tlfloat,tlquad,TLFloat Quad,TLFloat operator<,81920,66.684570,66.684570|66.581421|66.832886,491520,32784200.000000,32.055968 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,81920,2.051988,2.067803|2.056802|2.051988|2.052592|2.046955|2.042840|2.048957,51036160,104754900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,qdpp,ddreal,qdpp dd_real,qdpp operator<=,81920,1.982939,1.983218|1.983696|1.981254|1.986190|1.977088|1.982170|1.982939,52756480,104582600.000000,0.966350 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<=,81920,4.979695,4.988091|4.974068|4.985143|4.978117|4.979695|4.988001|4.976092,23511040,117115900.000000,2.426766 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator<=,81920,66.425171,66.518555|66.425171|66.004639,491520,32595700.000000,32.371127 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,81920,2.063855,2.076206|2.065469|2.063855|2.570880|2.063789|2.059720|2.052855,53329920,113918600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,qdpp,ddreal,qdpp dd_real,qdpp operator>,81920,1.971802,2.004492|1.971802|1.969128|1.979529|1.964209|1.964221|1.983569,57344000,113352300.000000,0.955398 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>,81920,5.055267,5.081787|5.062744|5.055267|5.069519|5.048065|5.029388|5.041199,22937600,115959300.000000,2.449430 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,tlfloat,tlquad,TLFloat Quad,TLFloat operator>,81920,66.221313,66.289673|66.221313|65.934448,491520,32513300.000000,32.086230 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,81920,2.053209,2.095703|2.098253|2.053209|2.040812|2.054701|2.042304|2.038113,51609600,106338600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,qdpp,ddreal,qdpp dd_real,qdpp operator>=,81920,1.967371,1.973461|1.974708|1.967371|1.971358|1.958358|1.965124|1.956995,53903360,106015400.000000,0.958193 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>=,81920,5.033447,4.994019|4.994568|5.013733|5.041534|5.051849|5.033447|5.036469,22937600,115230700.000000,2.451503 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator>=,81920,65.947266,65.947266|65.979004|65.921021,491520,32415300.000000,32.119118 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,81920,4.100666,4.092370|4.100093|4.104726|4.101812|4.100093|4.100691|4.100666,28098560,115205900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,81920,4.974426,4.980927|4.974426|4.969360|4.975464|4.974487|4.972198|4.972992,22937600,114097700.000000,1.213078 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,81920,5.870047,5.854388|5.898054|5.907645|5.870047|5.831543|5.841692|5.955427,20070400,118010500.000000,1.431486 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,81920,409.595947,409.492188|410.238037|409.595947,245760,100706400.000000,99.885234 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,2048,21.984116,21.984116|21.887954|22.037428,1204224,26456600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,qdpp,ddreal,qdpp dd_real,qdpp nroot,2048,65.998535,66.086426|65.998535|65.627441,368640,24294900.000000,3.002101 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,2048,427.583008,427.583008|428.544922|427.250977,61440,26283600.000000,19.449634 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,2048,3220.703125,3222.436523|3220.703125|3218.212891,12288,39572900.000000,146.501371 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,8192,8.882670,9.119026|8.991350|8.882670|8.765520|9.069015|8.816341|8.587460,11239424,99920700.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,8192,57.436009,57.417378|57.436009|57.484838,466944,26824100.000000,6.466075 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,8192,446.870931,446.171061|446.870931|448.958333,73728,32981000.000000,50.308174 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,2048,103.625977,103.830078|103.625977|103.512695,307200,31843200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,qdpp,ddreal,qdpp dd_real,qdpp sin,2048,115.763566,115.763566|115.680427|116.188503,227328,26342200.000000,1.117129 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,2048,640.332031,639.229911|640.332031|640.562221,43008,27526900.000000,6.179262 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,2048,3361.328125,3346.337891|3368.750000|3361.328125,12288,41273000.000000,32.437119 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,2048,104.239258,104.239258|104.681641|104.195312,307200,32063100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,qdpp,ddreal,qdpp dd_real,qdpp cos,2048,115.867705,115.867705|115.920841|115.645106,208896,24192500.000000,1.111555 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,2048,646.686663,646.686663|645.724051|646.721540,43008,27799400.000000,6.203869 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,2048,3385.937500,3385.937500|3386.450195|3381.005859,12288,41588300.000000,32.482364 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,fltx,fltx,fltx bl::f128,bl::sincos,2048,92.818778,92.599051|92.818778|93.118722,258048,23958600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,qdpp,ddreal,qdpp dd_real,qdpp sincos,2048,133.869934,134.910583|133.746338|133.869934,196608,26380000.000000,1.442272 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,tlfloat,tlquad,TLFloat Quad,tlfloat::sincos,2048,6959.228516,6959.228516|6958.935547|6963.085938,6144,42764800.000000,74.976515 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,2048,107.129945,107.088389|107.293052|107.129945,288768,30947400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,qdpp,ddreal,qdpp dd_real,qdpp tan,2048,152.950614,153.179060|152.950614|152.739607,172032,26313400.000000,1.427711 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,2048,1299.340820,1299.340820|1298.388672|1300.170898,24576,31931600.000000,12.128643 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,2048,4658.593750,4658.593750|4677.880859|4656.640625,6144,28657900.000000,43.485449 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,2048,121.962603,122.399184|121.962603|121.648093,208896,25486000.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,qdpp,ddreal,qdpp dd_real,qdpp atan,2048,182.215948,182.207456|182.581097|182.215948,141312,25766100.000000,1.494031 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,2048,384.798177,385.860189|384.212240|384.798177,73728,28382100.000000,3.155051 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,2048,5589.355469,5589.355469|5586.523438|5597.363281,6144,34351600.000000,45.828437 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,2048,118.433315,118.433315|118.685826|118.346819,215040,25479800.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,qdpp,ddreal,qdpp dd_real,qdpp atan2,2048,178.384001,178.384001|178.269361|179.250170,141312,25243200.000000,1.506198 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,2048,386.405436,386.352539|386.861165|386.405436,73728,28498800.000000,3.262641 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,2048,5634.863281,5634.863281|5647.851562|5621.728516,6144,34620300.000000,47.578363 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,2048,166.085938,166.720703|165.878906|166.085938,153600,25532700.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,qdpp,ddreal,qdpp dd_real,qdpp asin,2048,247.043186,247.043186|247.300890|246.660699,110592,27316400.000000,1.487442 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,2048,2310.351562,2310.351562|2310.205078|2318.579102,12288,28422700.000000,13.910579 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,2048,6149.267578,6149.267578|6149.658203|6123.388672,6144,37728900.000000,37.024613 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,2048,170.123047,170.578125|169.902344|170.123047,153600,26142900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,qdpp,ddreal,qdpp dd_real,qdpp acos,2048,245.746528,245.746528|245.252821|248.312717,110592,27254000.000000,1.444522 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,2048,2242.700195,2245.385742|2240.600586|2242.700195,12288,27560700.000000,13.182812 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,2048,6193.066406,6228.125000|6188.183594|6193.066406,6144,38112000.000000,36.403453 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,2048,110.719477,110.501453|110.745594|110.719477,264192,29234300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,qdpp,ddreal,qdpp dd_real,qdpp exp,2048,103.412156,103.412156|103.900437|103.305199,258048,26718100.000000,0.934001 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,2048,367.594401,367.919922|366.670736|367.594401,73728,27087300.000000,3.320052 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,2048,3212.451172,3217.163086|3212.451172|3209.936523,12288,39483600.000000,29.014328 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,2048,96.382280,96.515447|96.382280|96.159224,270336,26047500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,2048,831.795247,831.901042|831.795247|830.069987,36864,30643400.000000,8.630168 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,2048,7336.328125,7327.587891|7350.927734|7336.328125,6144,45086400.000000,76.116981 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,2048,112.674873,112.513626|112.718023|112.674873,264192,29757400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,qdpp,ddreal,qdpp dd_real,qdpp expm1,2048,105.247237,105.247237|105.356803|105.126953,251904,26511300.000000,0.934079 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,2048,390.052379,390.052379|389.834872|391.876776,67584,26397500.000000,3.461751 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,2048,3627.099609,3627.099609|3627.050781|3630.664062,12288,44584200.000000,32.190847 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,2048,125.307330,125.295841|125.307330|125.732422,208896,26205000.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,qdpp,ddreal,qdpp dd_real,qdpp log,2048,123.656529,123.984375|123.563058|123.656529,215040,26607900.000000,0.986826 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,2048,408.061080,408.069957|408.061080|407.914595,67584,27575300.000000,3.256482 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,2048,5040.380859,5041.992188|5028.613281|5040.380859,6144,30947300.000000,40.224150 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,2048,116.857580,116.857580|117.029139|116.800834,227328,26573700.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,2048,419.418945,419.418945|418.906250|420.253906,61440,25775700.000000,3.589146 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,2048,5237.304688,5234.570312|5241.601562|5237.304688,6144,32181200.000000,44.817843 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,2048,129.795714,130.149388|129.675623|129.795714,227328,29523900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,qdpp,ddreal,qdpp dd_real,qdpp log10,2048,145.685041,145.806207|145.685041|145.323351,165888,24154100.000000,1.122418 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,2048,419.224964,417.786754|419.797585|419.224964,67584,28313400.000000,3.229883 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,2048,5262.402344,5262.402344|5272.998047|5250.195312,6144,32328900.000000,40.543730 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,2048,137.565104,138.232422|137.445747|137.565104,221184,30467600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,qdpp,ddreal,qdpp dd_real,qdpp log1p,2048,128.549657,128.549657|128.647313|128.324751,202752,26055100.000000,0.934464 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,2048,541.015625,541.015625|540.266927|544.270833,55296,29962200.000000,3.932797 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,2048,5480.029297,5489.257812|5476.953125|5480.029297,6144,33681900.000000,39.835897 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,2048,202.390253,202.443731|202.390253|198.658389,129024,25955000.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,qdpp,ddreal,qdpp dd_real,qdpp pow,2048,219.943576,219.943576|220.000543|219.273546,110592,24301400.000000,1.086730 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,2048,661.307199,660.839844|661.307199|663.016183,43008,28459300.000000,3.267485 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,2048,16199.951172,16262.304688|16199.951172|16175.097656,6144,99609300.000000,80.043139 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,8192,15.293980,15.293980|15.285873|15.287304|15.330124|15.283871|15.316105|15.304089,7340032,112303900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,qdpp,ddreal,qdpp dd_real,qdpp npwr,8192,7.294329,7.295676|7.297067|7.309678|7.294329|7.285354|7.291637|7.288989,15597568,113779200.000000,0.476941 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",8192,18.950625,18.935140|18.943617|18.971196|18.950625|18.972891|18.986003|18.939322,6193152,117403400.000000,1.239090 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,fltx,fltx,fltx bl::f128,bl::product_sum,8192,5.004002,5.001957|5.002964|5.000038|5.005544|5.007400|5.004002|5.004977,22249472,111332800.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,qdpp,ddreal,qdpp dd_real,same expression,8192,3.003574,3.005605|3.004199|3.003145|3.003574|2.999883|3.005410|3.001367,35840000,107638700.000000,0.600234 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,cppdd,cppdd,boost::multiprecision::cpp_double_double,same expression,8192,25.648717,25.742885|25.595238|25.648717,1032192,26488400.000000,5.125641 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,tlfloat,tlquad,TLFloat Quad,same expression,8192,420.381673,418.896484|420.381673|421.813965,73728,30992600.000000,84.009096 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,2048,131.424028,131.822165|131.424028|131.214944,239616,31506400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,qdpp,ddreal,qdpp dd_real,qdpp sinh,2048,135.218548,135.218548|136.051994|134.898640,178176,24123200.000000,1.028872 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,2048,400.563743,401.265092|400.563743|399.866832,67584,27071800.000000,3.047873 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,2048,4157.812500,4157.812500|4158.007812|4150.585938,6144,25531200.000000,31.636623 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,2048,132.580879,132.873848|132.505759|132.580879,239616,31785900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,qdpp,ddreal,qdpp dd_real,qdpp cosh,2048,135.221915,135.221915|135.173087|135.491312,178176,24106400.000000,1.019920 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,2048,400.563743,400.563743|400.164240|401.402699,67584,27081600.000000,3.021278 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,2048,3635.546875,3638.989258|3631.201172|3635.546875,12288,44669900.000000,27.421351 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,2048,140.079973,140.079973|140.367663|139.980997,227328,31858400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,qdpp,ddreal,qdpp dd_real,qdpp tanh,2048,139.045174,139.070376|138.949093|139.045174,190464,26478600.000000,0.992613 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,2048,423.912464,423.845881|423.983487|423.912464,67584,28649800.000000,3.026218 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,2048,3958.056641,3965.673828|3951.123047|3958.056641,6144,24319700.000000,28.255693 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,2048,131.335449,131.335449|131.265259|131.335449,196608,25817000.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,qdpp,ddreal,qdpp dd_real,qdpp asinh,2048,165.631104,165.478516|165.631104|165.848796,147456,24426500.000000,1.261130 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,2048,750.048828,748.518880|750.048828|751.871745,36864,27653400.000000,5.710940 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,2048,13852.050781,13865.429688|13839.111328|13852.050781,6144,85107900.000000,105.470769 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,2048,142.783203,142.783203|142.765299|142.980143,184320,26328800.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,qdpp,ddreal,qdpp dd_real,qdpp acosh,2048,153.665865,154.080904|153.588867|153.665865,159744,24565200.000000,1.076218 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,2048,796.362305,792.097982|796.362305|797.013346,36864,29312700.000000,5.577423 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,2048,13196.582031,13202.490234|13196.582031|13196.533203,6144,81091800.000000,92.423911 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,2048,142.823893,142.731120|142.823893|142.929688,184320,26326100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,qdpp,ddreal,qdpp dd_real,qdpp atanh,2048,159.940279,159.465144|161.352539|159.940279,159744,25599400.000000,1.119843 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,2048,2771.142578,2771.142578|2766.235352|2879.541016,12288,34475700.000000,19.402514 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,2048,5409.082031,5410.400391|5403.808594|5409.082031,6144,33225300.000000,37.872389 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,256,571.552906,571.552906|574.157072|570.449561,43776,25042200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,256,1228.367457,1228.636853|1228.367457|1227.572737,22272,27354300.000000,2.149175 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,256,95173.437500,95107.812500|95173.437500|95192.187500,768,73081200.000000,166.517284 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,256,561.045259,561.045259|559.354795|562.540409,44544,24988300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,256,1210.602679,1209.375000|1212.513951|1210.602679,21504,26037700.000000,2.157763 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,256,95079.687500,95066.406250|95080.859375|95079.687500,768,73018100.000000,169.468837 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,256,533.374763,537.695312|532.593513|533.374763,50688,27095500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lgamma,256,2926.171875,2922.233073|2926.171875|2927.571615,9216,26959800.000000,5.486146 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::lgamma,256,62138.281250,62212.109375|62130.859375|62138.281250,768,47739200.000000,116.500227 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,256,472.695879,472.695879|473.607337|472.429801,52992,25060500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tgamma,256,2136.856618,2130.629596|2136.856618|2137.017463,13056,27872400.000000,4.520574 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::tgamma,256,69246.484375,69262.109375|69246.484375|69222.656250,768,53179200.000000,146.492676 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,4099,248.651433,248.740885|248.402049|248.651433,110673,27513100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,qdpp,ddreal,qdpp dd_real,qdpp to_string,4099,414.194519,414.206717|413.596812|414.194519,73782,30545700.000000,1.665764 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,4099,637.045621,635.648939|637.173701|637.045621,49188,31314200.000000,2.562003 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,4099,11176.091730,11131.715052|11202.171261|11176.091730,12297,137357400.000000,44.946822 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,4099,207.456364,207.456364|208.252567|207.241234,135267,28088200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,qdpp,ddreal,qdpp dd_real,qdpp write,4099,414.475075,414.475075|414.706839|412.799870,73782,30545300.000000,1.997890 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,4099,226.106638,226.106638|226.217777|225.846412,110673,25018400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,qdpp,ddreal,qdpp dd_real,qdpp read,4099,191.102043,190.995587|191.102043|191.281687,135267,25853100.000000,0.845185 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,4099,809.075384,809.075384|808.270310|809.473855,36891,29842600.000000,3.578291 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,4099,8375.847768,8390.509880|8373.749695|8375.847768,12297,103049300.000000,37.043794 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,mt19937_64,fltx,fltx,fltx bl::f128,bl::mt19937_64,64,2.135000,2.137938|2.135000|2.136547|2.134948|2.137873|2.134142|2.134090,53850496,115013400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,uniform_real,fltx,fltx,fltx bl::f128,bl::uniform_real,64,8.909321,8.889414|8.912622|8.909321,2998848,26701100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,uniform_real,qdpp,ddreal,qdpp dd_real,qdpp ddrand,64,18.890425,18.890425|18.902449|18.838893,1397184,26375000.000000,2.120299 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,normal,fltx,fltx,fltx bl::f128,bl::normal,64,46.953610,46.953610|47.066678|46.925612,557184,26177600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f128,same workload,64,20.203644,20.228090|20.203644|20.164207,1300800,26274400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,qdpp,ddreal,qdpp dd_real,same workload,64,37.802793,37.802793|37.798928|37.875807,698496,26421200.000000,1.871088 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,52.281203,52.281203|52.339620|52.269401,508416,26588500.000000,2.587712 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,tlfloat,tlquad,TLFloat Quad,same workload,64,988.872768,985.937500|989.162946|988.872768,26880,26557200.000000,48.945268 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f128,same workload,64,174.593949,174.595939|174.593949|174.052548,150720,26287700.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,qdpp,ddreal,qdpp dd_real,same workload,64,229.891304,229.985368|229.562082|229.891304,114816,26386200.000000,1.316720 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,981.870229,981.870229|980.069179|983.349237,25152,24693300.000000,5.623736 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,tlfloat,tlquad,TLFloat Quad,same workload,64,7420.746528,7420.746528|7430.815972|7406.684028,3456,25641500.000000,42.502885 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f128,same workload,64,12.906256,12.900532|12.931647|12.906256,2044032,26394200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,qdpp,ddreal,qdpp dd_real,same workload,64,11.761939,11.761939|11.820542|11.625197,2257536,26494200.000000,0.911336 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,59.167292,59.131781|59.264446|59.167292,447744,26501000.000000,4.584389 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,tlfloat,tlquad,TLFloat Quad,same workload,64,1056.775000,1056.775000|1058.237500|1055.950000,24000,25367700.000000,81.880834 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f128,same workload,64,54.992045,54.924920|54.992045|55.044252,482688,26541600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,qdpp,ddreal,qdpp dd_real,same workload,64,57.219444,57.088526|57.219444|57.413202,458304,26233500.000000,1.040504 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,264.807968,264.160902|265.374523|264.807968,100608,26639100.000000,4.815387 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,tlfloat,tlquad,TLFloat Quad,same workload,64,4517.604167,4528.593750|4517.604167|4516.197917,5760,26039800.000000,82.150140 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f128,same workload,64,77.857521,77.977578|77.749823|77.857521,339840,26460500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,qdpp,ddreal,qdpp dd_real,same workload,64,77.866181,78.137462|77.715683|77.866181,312960,24381600.000000,1.000111 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,246.732955,246.732955|247.253788|246.036653,107712,26569800.000000,3.169032 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,tlfloat,tlquad,TLFloat Quad,same workload,64,3859.288194,3857.204861|3859.288194|3866.189236,6912,26686500.000000,49.568598 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,fltx,fltx,fltx bl::f128,same workload,8,25.724480,25.724480|25.795369|25.720950,1019904,26259400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,qdpp,ddreal,qdpp dd_real,same workload,8,42.511930,42.774286|42.414940|42.511930,618624,26333000.000000,1.652587 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,8,78.219845,78.216291|78.219845|78.393098,337656,26430500.000000,3.040677 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,tlfloat,tlquad,TLFloat Quad,same workload,8,1264.455782,1267.460317|1264.455782|1262.485828,21168,26773300.000000,49.153794 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f128,same workload,8,813.788947,814.094955|813.788947|812.481454,32352,26316900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,qdpp,ddreal,qdpp dd_real,same workload,8,906.363449,906.363449|907.178218|906.301568,29088,26371600.000000,1.113757 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,8,3144.560185,3144.560185|3142.013889|3145.216049,7776,24447200.000000,3.864098 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,tlfloat,tlquad,TLFloat Quad,same workload,8,34300.000000,34487.500000|34300.000000|34150.000000,24,823500.000000,42.148520 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,fltx,fltx,fltx bl::f128,same workload,8,417.312095,417.812858|417.192865|417.312095,62904,26258600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,qdpp,ddreal,qdpp dd_real,same workload,8,765.725524,769.160839|764.230769|765.725524,34320,26301900.000000,1.834899 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,8,6172.149123,6168.932749|6183.114035|6172.149123,4104,25341100.000000,14.790247 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,tlfloat,tlquad,TLFloat Quad,same workload,8,22487.500000,23050.000000|22487.500000|22437.500000,24,543800.000000,53.886528 diff --git a/validation/metrics/data/windows/x86_64/detail/MSVC_f128_fastmath_accuracy.csv b/validation/metrics/data/windows/x86_64/detail/MSVC_f128_fastmath_accuracy.csv new file mode 100644 index 0000000..1b6105f --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MSVC_f128_fastmath_accuracy.csv @@ -0,0 +1,128 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,moderate,4097,10322096095657499311,109.950521,107.250365,107.040693,106.000000,1.040693,yes,Both,yes,-2.472067804890653694736606692562736837036787645394e-04,-0.00024720678048906536947366066925627220254736992061971280405933562914519934341009422,-0.0002472067804890653694736606692562736837036787645394 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,wide_exponent,4098,10322096095657499308,109.923010,107.051396,106.003381,106.000000,0.003381,yes,Both,yes,-4.215228812298638183537364477017984307424253045187e-293,-4.2152288122986381835373644770182307620164082432452873068526743823738143144126931e-293,-4.215228812298638183537364477017984307424253045187e-293 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,general,3845,10322096095657499292,119.108587,106.483519,105.736235,90.000000,15.736235,yes,NaN,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,subnormal,251,10322096095657499292,inf,inf,inf,90.000000,inf,yes,NaN,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312,7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,general,3844,10322096095657499292,118.876961,106.530508,105.744857,90.000000,15.744857,yes,NaN,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,subnormal,252,10322096095657499292,inf,inf,inf,90.000000,inf,yes,NaN,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310,-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,general,4092,10322096095657499292,108.673668,105.665876,105.380753,90.000000,15.380753,yes,NaN,no,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60037994384765625,-156159778640594921198000750.60038290050850297752267811067325203046404306830015704 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,subnormal,8,10322096095657499292,123.430323,107.640342,107.640342,90.000000,17.640342,yes,NaN,no,"extreme lhs [5.3610920538229009e+270,1.4880019588222884e+254,-8.2600701768591933e+237,4.5852600476843326e+221] ; extreme rhs [2.8682136140660301e-295,7.9608919846980822e-312,-0,0]",1.5376757215036059473819023136396346852543747719615695276077139367073548105554037e-24,1.5376757215036059473819023136396286054027234522232977278134529923886643804961882e-24 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,general,4096,10322096095657499292,110.882649,105.971646,105.124683,90.000000,15.124683,yes,NaN,no,"representative lhs [3.8069729471352109e-08,1.05664725500865e-24,-5.8655705570878625e-41,3.2560457425211756e-57] ; representative rhs [-10239996542.103203,-2.8421699832812405e-07,1.5777212776686647e-23,-8.7581124445438569e-40]",-3.717748274115425677507007818785488818087130701795158032304321273801830518128672e-18,-3.7177482741154256775070078187854047565702465103661629499646177206025402808246684e-18 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,subnormal,4,10322096095657499292,inf,inf,inf,90.000000,inf,yes,NaN,no,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,moderate,4099,10322096095657499356,109.099094,104.680325,99.580200,90.000000,9.580200,yes,Both,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50] ; [-2.2467526986846895,-6.2359914417961224e-17,3.4616706400237409e-33,-1.9216132241116296e-49] ; [-0.82478157060333857,-2.2892287249258141e-17,1.2707772195229639e-33,-7.0542306414176576e-50]",-0.0025616587031475578614921195531973426573882576399799792521563357797220739087151742,-0.0025616587031475578614921195531946393591985326302623011385541559314120186541712416 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,cancellation,4098,10322096095657499352,123.613534,107.447694,107.008989,90.000000,17.008989,yes,Both,no,"one plus a low-limb delta [1,2.3375830000300188e-20,0,0] ; one plus a low-limb delta [1,9.1191608041326794e-20,0,0] ; native product cancellation",6.0206627557371401035138369829719396083930638942820518512027281512011279702649282e-36,6.0206627557371401035138369829719764831182728766548123483364806462892589095319671e-36 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,wide_exponent,4096,10322096095657499357,119.616115,106.579100,105.347039,90.000000,15.347039,yes,Both,no,"[1.6938644702759635e-90,4.701418338737172e-107,-2.6098114440304809e-123,1.448736377546434e-139] ; [79428146.335863903,2.2045739216343092e-09,-1.2237843636432928e-25,6.7933678884651449e-42] ; [9.2909522372705566e-90,2.5787572736275956e-106,-1.4314978500504758e-122,7.9464093641372402e-139]",1.3454052430915206938868087189563345722550509265256751578481158995824810109214383e-82,1.3454052430915206938868087189563606478535306154783196089715180736698264946825388e-82 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,subnormal,4100,10322096095657499350,inf,inf,inf,90.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,moderate,4099,10322096095657499356,108.710750,105.621789,105.403238,90.000000,15.403238,yes,Both,yes,"[-2.0216112865291063,-5.6110984928667459e-17,3.114785370110088e-33,-1.7290532173309048e-49]",4.0869121938218684213523234559135312039828584030511109615650764542715833727015706,4.086912193821868421352323455913607387135084308816614946511827134127630171714709 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,wide_exponent,4096,10322096095657499357,108.714763,105.598081,105.370295,90.000000,15.370295,yes,Both,yes,"[4.07867604911808e+17,11.320600149295146,-6.2841954691612277e-16,3.4884292505539414e-32]",166355983136494714602069966978531328,166355983136494714602069966978534500.62754285635655510754919878168120152773808347 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,near_one,4099,10322096095657499359,109.041603,106.207316,105.235269,90.000000,15.235269,yes,Both,yes,"[0.7943239392491388,2.2046918159133699e-17,1.2238498081148352e-33,6.7937311782608489e-50]",1.2589322197002942275560659685836243624199496927685685911021398405984506041477289,1.2589322197002942275560659685835979972909064819121737721490343315675812064184067 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,wide_exponent,4096,10322096095657499357,109.009049,105.925795,105.189487,90.000000,15.189487,yes,Both,yes,"[3.5001788065165318e+43,9.7149477532491364e+26,53928793393.438126,2.9936494057824018e-06]",2.8569969000961575149593584421158660998363524565146662142923865841595715918551683e-44,2.8569969000961575149593584421158043381809410343861907578030166512899574822804677e-44 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,cancellation,4098,10322096095657499352,137.992247,inf,106.227061,90.000000,16.227061,yes,Both,yes,"one plus a low-limb delta [1.0000000000000002,-9.2098754789066345e-17,0,0] ; one plus a low-limb delta [1,9.3157411673208082e-33,0,0]",1.299458501359649542526809416735399539516537488861303804737012764889933880863069e-16,1.2994585013596495425268094167353858549612218168195955651903009493027143470550428e-16 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,moderate,4099,10322096095657499356,110.177573,107.236356,107.022726,90.000000,17.022726,yes,Both,yes,"[-4.0306514937478397,-1.118730523149658e-16,6.2102019257584848e-33,-3.4473545827742784e-49]",-4.0309999999999999999999999999999755453119381486340322364144762336268801306005116,-4.031 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,wide_exponent,4096,10322096095657499357,121.330260,107.340420,107.049597,90.000000,17.049597,yes,Both,yes,"[1.9564201098655394e-06,5.4301566295310004e-23,-3.0143424587131265e-39,1.6732962008842592e-55]",1.9564199999999999999999999999999883500964702027617153338260327688823346504976789e-06,1.95642e-06 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,boundary,4110,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,boundary,4114,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,90.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,near_one,4099,10322096095657499359,109.483067,105.751120,104.669867,90.000000,14.669867,yes,Both,yes,"[1.0434745107555559,2.8962235686257217e-17,1.6077270451751567e-33,8.9246779143301406e-50]",1.0215060013311502277290127699241048631609354594130696894861318971964303514710082,1.0215060013311502277290127699240732060505168443174685619534358207641504292216177 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,wide_exponent,4096,10322096095657499357,109.554369,105.974012,105.134919,90.000000,15.134919,yes,Both,yes,"[1.1645444442808547e-62,3.2322601380997815e-79,1.7942648134482328e-95,9.9601705408249462e-112]",1.0791406045001062461937244900901782471018853969286737164352073021695624156016746e-31,1.0791406045001062461937244900901540193152963432252732200525801490754009153911073e-31 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,extreme_finite,4096,10322096095657499354,109.462818,106.258948,105.096134,90.000000,15.096134,yes,Both,yes,"[1.3220615149200299e+307,3.6694578345875804e+290,2.0369582879251504e+274,1.1307389957277705e+258]",3.6360163846165902232928621254916330482868374851642045295187667520670879059664215e+153,3.6360163846165902232928621254915491917111449494286729393569803221869869190043071e+153 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,subnormal,4100,10322096095657499350,110.498955,106.653014,106.214358,90.000000,16.214358,yes,Both,yes,"[9.5745039639339057e-314,0,0,0]",3.0942695364065984592266695010140804816710164393335370623177724037590908372789884e-157,3.0942695364065984592266695010140476078219969118554123365016956606210529423634246e-157 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,moderate,4099,10322096095657499356,108.134138,104.279589,103.154742,90.000000,13.154742,yes,Both,yes,"[-5.9112302503110126,-1.6406959819390034e-16,9.1076922777933078e-33,-5.0557848340034338e-49]",-1.8081146236170408256662159398260846805204664291606354162902101437304658304583427,-1.8081146236170408256662159398259245204126936694753799586379567762813578965663977 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,wide_exponent,4096,10322096095657499357,107.940958,104.101707,103.019576,90.000000,13.019576,yes,Both,yes,"[2.9828051152340277e-55,8.2789472922562771e-72,-4.5957389517605069e-88,2.5511475997055982e-104]",6.6815151845441513626509033780520045477856444490717657200631959144352644689019878e-19,6.6815151845441513626509033780513545789151896608767546149873769328352874764005102e-19 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,moderate,4099,10322096095657499356,108.682153,105.556470,104.448638,90.000000,14.448638,yes,Both,yes,"[2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49] ; [7.6161438781938315,2.1139045731071814e-16,-1.1734527644620026e-32,6.5139713870787798e-49]",8.0914622723995239714248451353921972400978668058729318673943800913073154390531272,8.0914622723995239714248451353919049231629452774327450009049705044051673057483058 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,wide_exponent,4096,10322096095657499357,136.086569,107.303893,104.375984,90.000000,14.375984,yes,Both,yes,"[-1.0904439541376617e-171,-3.0265899623673255e-188,1.6800949311597954e-204,-9.3264003806481111e-221] ; [-6.6064316563514781e-178,-1.8336531338734802e-194,1.0178819642012061e-210,-5.6503799650342919e-227]",1.0904439541378618053723797776842685378887910042683910204594308964030285890648591e-171,1.090443954137861805372379777684227109194726424167261957374676671431464584983977e-171 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,moderate,4099,10322096095657499356,109.289129,105.940176,105.022316,80.000000,25.022316,yes,Both,yes,"[-2.6398923795068718,-7.3271732556525522e-17,4.0673982269215659e-33,-2.2578595809239299e-49]",-0.48091697577772919399226624691062015405871262531310584383165433654955256415064468,-0.48091697577772919399226624691060848051161030920422183238229214193978802883324422 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,argument_reduction,4110,10322096095657499353,107.878813,98.777563,98.619216,80.000000,18.619216,yes,Both,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107778446817142530158141594307620809510923605317049154659252158834084e-08,2.983455547010777844681714253021942987548016308835936187833122791508178595472033e-08 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,quadrant_boundaries,4315,10322096095657499369,114.302289,100.269139,100.230956,80.000000,20.230956,yes,Both,yes,"below random k*pi/2, exponent 43, quadrant 2, offset bits 64 [-15189111743596.248,-2.2040936843613776e-05,0,0]",8.2340339752651274439911770999089811880423371828520810609536481004607152164951472e-07,8.2340339752651274439911770999034465622958436535312599533652322394306622926203602e-07 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,moderate,4099,10322096095657499356,109.267445,105.979013,105.328054,80.000000,25.328054,yes,Both,-,"[1.3052020301228939,3.6226633640748349e-17,-2.010982138630954e-33,1.1163193362090118e-49]",0.26248277312553705702695162816852912212589596287237225345705224528736199118839068,0.26248277312553705702695162816852396749826395623085371572470338778345559864971624 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,argument_reduction,4110,10322096095657499353,117.900119,105.731702,99.209588,80.000000,19.209588,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1273107444367091e-17,-0,-0]",-4.076748699943230335115082501060544610987236354894355627499358880133086316429937e-20,-4.0767486999432303351150825010549823398817902769691808721665498735571977321034076e-20 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,quadrant_boundaries,4315,10322096095657499369,113.389741,100.266388,100.241282,80.000000,20.241282,yes,Both,-,"below random k*pi/2, exponent 32, quadrant 1, offset bits 64 [6759185830.8093033,2.5452908459680444e-07,0,0]",3.6641619809983954738175143693267979746715518809894967024037216566072372430296582e-10,3.6641619809983954738175143693292433300620783220933192304310816115127405346807142e-10 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,moderate,4099,10322096095657499356,106.990413,104.358303,103.662452,75.000000,28.662452,yes,Both,yes,"[1.0283589742402928,2.8542695269537032e-17,-1.5844378736549776e-33,8.7953970420994041e-50]",1.6590692097473263340445844749263504271822370452064470782609014202699238005322968,1.65906920974732633404458447492645378827060656915569642322001914303143546133552 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,argument_reduction,4110,10322096095657499353,106.636659,98.776698,98.614153,75.000000,23.614153,yes,Both,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107791724696498071933228039119120966041628715515577584130136247446007e-08,2.9834555470107791724696498071994731788491203878271025995398127676131094640315383e-08 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,quadrant_boundaries,4315,10322096095657499369,106.499081,100.252704,100.193377,75.000000,25.193377,yes,Both,yes,"below random k*pi/2, exponent 35, quadrant 3, offset bits 64 [-59550109601.544846,-4.5998843808876405e-07,0,0]",309768431.94980647490490283626492826519224603465385570189027930609881877899169922,309768431.94980647490490283626514197542933150294098619645159482100231149999767842 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,near_one,4099,10322096095657499359,108.638031,106.152026,105.321909,80.000000,25.321909,yes,Both,yes,"[0.68327775494803278,1.8964767393937287e-17,-1.0527560708704801e-33,5.8439701459716004e-50]",0.59941459668283531301680476878329138003111794710527586828655022266332252911524847,0.5994145966828353130168047687833032015572049547180395358634521660952312280617229 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,moderate,4099,10322096095657499356,108.819079,105.953468,104.926390,80.000000,24.926390,yes,Both,yes,"[1.7923972346284831,4.9749016978975022e-17,-2.7616252051262958e-33,1.5330099440581923e-49]",1.0618989131564895436407540480874589123331650567714808343216437342988039960189894,1.0618989131564895436407540480874313641834035736707386450972798475694004675512729 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,near_one,4099,10322096095657499359,108.593233,105.799026,104.761376,80.000000,24.761376,yes,Both,yes,"[1.0818954035110564,3.0028629680352481e-17,-1.666923803453484e-33,9.2532859344489846e-50] ; [0.65275323882187208,1.8117541878467149e-17,-1.0057256071542369e-33,5.5828986275887446e-50]",1.0279228914914060327533533251293914713081558101296952640517443772205652408047172,1.0279228914914060327533533251293615731716847356252552579150219391046313458442121 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,moderate,4099,10322096095657499356,108.845358,105.968236,104.520841,80.000000,24.520841,yes,Both,yes,"[0.17246963902978685,4.7869941074914726e-18,-2.6573155384409922e-34,1.4751064472356924e-50] ; [4.1006496155849739,1.1381589047856838e-16,-6.318051108876087e-33,3.5072229059163668e-49]",0.042034327541476674060107604306532306204552005274371072135952080023324484159275016,0.042034327541476674060107604306530861776728203971856534731213306751945145807618236 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,extreme_finite,8,10322096095657499351,116.769509,109.692678,109.692678,80.000000,29.692678,yes,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397529394834895588573302312846062338790031898128063,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,moderate,4099,10322096095657499356,107.979933,105.096123,104.081582,80.000000,24.081582,yes,Both,yes,"[-0.03158561470140564,-8.766769172109845e-19,4.8665344932251859e-35,-2.7014693222555596e-51]",-0.031590868964255888487475098364116757608941970863589142199408956157005365361634119,-0.031590868964255888487475098364115285691415570498034097956857353613513937214419265 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,boundary,4105,10322096095657499355,109.179337,106.113879,105.956528,80.000000,25.956528,yes,Both,yes,"[0.99999942350312121,2.7755559614626202e-17,-1.5407430672757073e-33,8.5528421416053841e-50]",1.5697225512744511775996984093823162316469799617556662501159018933971633913415644,1.5697225512744511775996984093822962914427098056014529298362837222126251898438199 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,moderate,4099,10322096095657499356,108.568133,105.119090,102.606898,80.000000,22.606898,yes,Both,-,"[0.99447363321554472,2.7602188124463265e-17,-1.5322292392907091e-33,8.5055809023221692e-50]",0.10518045845827819297865791404046697400704440931878221279239664668822551440996449,0.10518045845827819297865791404048059412910636761979542748882605088251354897169005 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,boundary,4105,10322096095657499355,104.376193,95.825547,81.584963,80.000000,1.584963,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863439534155160504671268531080086442146964698096667234494817e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,moderate,4099,10322096095657499356,107.422628,104.784889,104.123120,80.000000,24.123120,yes,Both,-,"[-7.4260131889231964,-2.0611327058781538e-16,1.1441584934369385e-32,-6.3513555161706011e-49]",0.00059555715897935043401591506055704088046193962180369225037771615963253651893083429,0.00059555715897935043401591506055701391914881720026106459729557182617396144915233455 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,boundary,4099,10322096095657499339,106.555700,104.344345,103.645110,80.000000,23.645110,yes,Both,-,"[689.56791103874002,1.913935429694702e-14,-1.0624475908464504e-30,5.8977688890762846e-47]",2.9890877290907641503012149009532296945711450367253589288612016829881349927374169e+299,2.9890877290907641503012149009534181687133803867116344877486422688909796071e+299 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,moderate,4099,10322096095657499356,108.902998,106.013023,105.332281,80.000000,25.332281,yes,Both,-,"[2.5050708699436939,6.9529683953231499e-17,-3.8596728009893943e-33,2.1425488055889476e-49]",5.6767722797494772853116587667814582973149425261925085601171598811975904652626923,5.6767722797494772853116587667815694514029231846505256411149926048833678443740637 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,boundary,4099,10322096095657499339,108.889789,106.068713,105.117537,80.000000,25.117537,yes,Both,-,"[-300.54967496719229,-8.341929229804598e-15,4.6307009503613316e-31,-2.5705554076223722e-47]",3.3537651522202066232694855987502461915822095092416702651658002446064688733175029e-91,3.3537651522202066232694855987503223996548021083914718227771648387284160913978918e-91 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,moderate,4099,10322096095657499356,108.703910,105.111574,104.102752,80.000000,24.102752,yes,Both,yes,"[0.34499201425549764,9.5754519384565927e-18,-5.3154436066330483e-34,2.9506639390902969e-50]",0.41197864392194338236442692612392088638530541488783931021803297713515523703620147,0.41197864392194338236442692612390197063088901255454253734406676554091755929509722 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,cancellation,4098,10322096095657499336,134.532978,106.243436,104.431991,80.000000,24.431991,yes,Both,yes,"[5.2823021564447655e-10,1.4661333692780236e-26,-8.1386751187185946e-43,4.5178722533726315e-59]",5.2823021578399014295181730840717304111038933843651099389423600846862121746910786e-10,5.2823021578399014295181730840715373648809557706009947616651919887543783634460306e-10 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,near_one,4099,10322096095657499359,107.587097,104.625423,103.727726,80.000000,23.727726,yes,Both,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.16836588841698423133590420499408908570076543035915070334582452268043853416124023,0.16836588841698423133590420499409911099841188934514465011564788537156738257109514 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,wide_exponent,4096,10322096095657499357,108.459773,105.569923,104.766295,80.000000,24.766295,yes,Both,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-282.39686865150220367499305723086940567546238559138028340316645126151229305833112,-282.39686865150220367499305723087759150499758429977321630947871340522978294577768 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,extreme_finite,4096,10322096095657499354,109.176760,105.259872,105.032438,80.000000,25.032438,yes,Both,-,"[7.8173980412642063e+300,2.1697638245177804e+284,1.2044608779891888e+268,6.6861009950191438e+251]",692.83187966610744796102335261136963360047942862056461746020352698849364969646558,692.8318796661074479610233526113529337163936151304127833135311352796511576817801 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,near_one,4099,10322096095657499359,107.303954,104.550799,103.716432,80.000000,23.716432,yes,Both,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.24290063227404771615686474809384021893054758987931141292077052724202035349776452,0.24290063227404771615686474809385479604744883847615479262644004599544797468667503 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,wide_exponent,4096,10322096095657499357,107.967820,105.222704,104.386734,80.000000,24.386734,yes,Both,-,"[2.2828060842783888e+123,6.336059688800657e+106,3.5172196759528967e+90,1.952449133453769e+74]",409.78796398443927791610862116022677480269364161366471002376221655083554651355371,409.78796398443927791610862116024222810248381363533512220222949171648044838642357 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,extreme_finite,4096,10322096095657499354,111.086264,105.070160,104.606169,80.000000,24.606169,yes,Both,-,"[8.4825748870998104e+300,2.3543874869413368e+284,1.3069475984458161e+268,7.2550165788654925e+251]",999.66293072781110639078474847446915088682993473501091851417255096379221868119203,999.66293072781110639078474847443677221631807677679365605314190636576738889243849 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,near_one,4099,10322096095657499359,107.290148,104.469291,103.762278,80.000000,23.762278,yes,Both,-,"[0.75767388015401582,2.1029674672601745e-17,1.1673814510949479e-33,6.4802688276296867e-50]",-0.12051768424391546599899037931433572311869461807102196510180994458742362307468454,-0.12051768424391546599899037931434272948211001876788467720396858894260414574766305 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,wide_exponent,4096,10322096095657499357,107.892624,105.170494,104.368159,80.000000,24.368159,yes,Both,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-122.64340176210480714781256202313334304453302289297190638109238264297218279352819,-122.64340176210480714781256202313802791680273253425717918726194907203719295819875 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,extreme_finite,4096,10322096095657499354,107.326534,105.011900,104.460171,80.000000,24.460171,yes,Both,-,"[1.574269563896497e-151,4.3694757920112377e-168,2.4255463149165589e-184,1.3464486830575322e-200]",-150.80292090089107415382716149653340039225497975448655319083077208652809986233478,-150.80292090089107415382716149652799577485650407769540271244758516976318786368256 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,moderate,4099,10322096095657499356,108.140237,105.150365,103.619384,80.000000,23.619384,yes,Both,yes,"[0.016967775842366306,4.7095038542183959e-19,-2.6142998067570899e-35,1.4512279193674093e-51]",0.016825431060362116060527975223933686830025480890723928219206553105394405175920802,0.016825431060362116060527975223934766829053970731436945963748330916850378472668862 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,cancellation,4098,10322096095657499336,134.607455,106.537373,104.621883,80.000000,24.621883,yes,Both,yes,"[9.5757892125536038e-15,2.657815415683552e-31,-1.4753839348477804e-47,8.1900260731503383e-64]",9.5757892125535581941894138318495891727756910760066238894863215461528382537839935e-15,9.5757892125535581941894138318498959687222096513961541169989695977230888612152571e-15 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,near_one,4099,10322096095657499359,108.254105,105.091738,103.817818,80.000000,23.817818,yes,Both,yes,"[0.50824794006286333,1.4106714131902435e-17,7.8307994155215805e-34,4.3469669061666386e-50] ; [1.4195792076051643,3.9401238039059714e-17,2.1872080834850324e-33,1.2141443869656723e-49]",0.38260537918836910980295595469486016694478510077047130768040772007699407142311543,0.38260537918836910980295595469483876398615466016654421485472691554230336671157279 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,moderate,4099,10322096095657499356,106.001122,102.267431,101.314349,80.000000,21.314349,yes,Both,yes,"[6.7554035072711907,1.875001128601503e-16,1.0408347120857714e-32,5.7777933109335954e-49] ; [7.5615146099912893,2.09874190526296e-16,1.1650357929843036e-32,6.4672478094180065e-49]",1876810.3436059515909373438747938277987921279160005681718725867312969057820737362,1876810.3436059515909373438747932324627118494928000187634317695110360784386875593 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,moderate,4099,10322096095657499356,106.519662,103.850741,103.190083,90.000000,13.190083,yes,Both,no,"[0.71581135775056381,1.9867756266571774e-17,-1.1028820227394361e-33,6.1222250754524372e-50]",0.096291975196169784525310139181526871816045133452422261028615229900944061380840822,0.096291975196169784525310139181535194812644791471494678467075788752285130394604154 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,wide_exponent,4096,10322096095657499357,106.463253,103.779117,103.294727,90.000000,13.294727,yes,Both,no,"[-4.2985314788901945e+20,-11930.821549849798,6.62293639366862e-13,-3.6764682374394009e-29]",-2.7116946263909823534882310466348560028692459166343819479015128601692309145311966e+144,-2.7116946263909823534882310466350739893700446173843466311067792915601894946997725e+144 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144,572114432512329142864001791218144 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,quotient_reduction,2,10322096095657499335,inf,inf,inf,90.000000,inf,yes,Both,yes,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,0,0] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,0,0]",134.96799785736229470766307175341820151552670393203375029736457157980566989863291,134.96799785736229470766307175341820151552670393203375029736457157980566989863291 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,moderate,4099,10322096095657499356,137.991491,inf,103.120938,90.000000,13.120938,yes,Both,yes,"[4.651496856054143,1.2910497271407093e-16,7.1667656650382064e-33,3.9783541267092195e-49] ; [1.1968567583256404,3.3219448256783813e-17,1.8440498160012704e-33,1.0236532821401969e-49]",-0.13593017724841871918057204650149481280191019956683356060646777679554175755072265,-0.13593017724841871918057204650150713875355427787629311886530032033038040140127123 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,near_one,4099,10322096095657499359,107.411772,104.726423,103.815855,80.000000,23.815855,yes,Both,yes,"[0.51829726641315743,1.4385638969304155e-17,-7.9856338038331893e-34,4.4329172576202887e-50]",0.54181616064164601141836335700755281177762270906400557918307925851265915984100729,0.54181616064164601141836335700752246129643265188541540400851198947696500079557021 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,moderate,4099,10322096095657499356,107.428545,104.869846,103.568829,80.000000,23.568829,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50]",0.12683416188096790784216939618227372193425686465939287968000771713444896349187729,0.12683416188096790784216939618228215357757794097427308352934774394732010797034323 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,near_one,4099,10322096095657499359,108.151971,105.591524,104.831618,80.000000,24.831618,yes,Both,-,"[1.4994043079684287,4.1616829648217466e-17,-2.3101981243676942e-33,1.2824175745594325e-49]",2.3511416377389521966137617451012654144360692751585280356211248541098424169604186,2.3511416377389521966137617451013305498775090885888924794020061506206886998298218 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,moderate,4099,10322096095657499356,107.662138,105.118172,104.370708,80.000000,24.370708,yes,Both,-,"[-7.2839693641636938,-2.0217076246896986e-16,1.122273176995369e-32,-6.2298676050974111e-49]",728.37982867708396528583195554001745260585065072868172597435332260573659368674271,728.37982867708396528583195554004522697642161075015288462613983940694317570296734 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,near_one,4099,10322096095657499359,108.508993,105.293208,103.771823,80.000000,23.771823,yes,Both,yes,"[0.51172914905977851,1.4203337091450122e-17,-7.884435932720214e-34,4.3767411543439516e-50]",0.47129137278430720759814686288642179705346521613436667069278209179356009528305549,0.47129137278430720759814686288639457893398171528583227402623085761363208890619784 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,moderate,4099,10322096095657499356,109.925995,105.123457,103.815933,80.000000,23.815933,yes,Both,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.48322034922123225518708897646637636069385959299582733007677741617069688828678409,0.48322034922123225518708897646634929399270770971586954580993858000068003447759588 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,near_one,4099,10322096095657499359,107.942783,105.155677,104.205601,80.000000,24.205601,yes,Both,yes,"[0.54780977077077553,1.5204775515608602e-17,-8.4403459308427531e-34,4.6853331941114368e-50]",0.52356044719022625228591770335188992100790509674337745785256442894450845670917261,0.52356044719022625228591770335191230591271180851991336042503192896063029229750644 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,moderate,4099,10322096095657499356,108.220931,105.311170,103.818628,80.000000,23.818628,yes,Both,yes,"[-0.065200541635407561,-1.8096785635415158e-18,1.0045734042071851e-34,-5.5765026163844551e-51]",-0.065154433999027981604796867967127986881415212588611420145090880769980952458286794,-0.065154433999027981604796867967124344186568215933203026966926467120453192197675953 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,moderate,4099,10322096095657499387,108.351907,105.741626,104.602282,80.000000,24.602282,yes,Both,-,"[1.0163605766345611,2.8209672837524767e-17,-1.5659514150681434e-33,8.6927765822649907e-50]",0.18064417420571660663002643085721230147927409837472224057688179881691649397712496,0.18064417420571660663002643085721816825671862302878034638011489993285710967947058 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,boundary,4101,10322096095657499355,107.711288,104.331717,103.672888,80.000000,23.672888,yes,Both,-,"[1.0000006976642144,2.7755594979700771e-17,-1.54074503043171e-33,8.5528530393103596e-50]",0.0011812401392645466366367223496664025691107131134376936381879814208025359246329034,0.0011812401392645466366367223496664756307232078155433668789257650353131882010275132 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,moderate,4099,10322096095657499356,107.718351,104.542010,103.139045,80.000000,23.139045,yes,Both,yes,"[-0.28874902442031025,-8.0143953812370009e-18,4.4488831403494138e-34,-2.4696262481412955e-50]",-0.29720096062669683272865803517211421035379945494633700815507025452637257512122915,-0.29720096062669683272865803517208759673932197508207544978047397151679963698000212 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,boundary,4105,10322096095657499355,108.512745,106.655151,106.203619,80.000000,26.203619,yes,Both,yes,"[-0.99899927667986499,-2.7727799963846583e-17,1.539202097103153e-33,-8.544288038776232e-50]",-3.799839456997147855581613541852042024176399900088711456868967222127997374059305,-3.799839456997147855581613541852082695691985906489816947756475473707459623001287 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,near_one,4099,10322096095657499359,107.766481,104.260004,103.477540,80.000000,23.477540,yes,Both,yes,"[0.63773432238017391,1.7700683207504784e-17,-9.8258530242838391e-34,5.4544441320713228e-50]",0.63288603898704082304852473006912003275150944031003931863308835424966614091601969,0.6328860389870408230485247300690752116994000610050783793434311866968213898036298 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,moderate,4099,10322096095657499356,114.031302,105.136563,103.642929,80.000000,23.642929,yes,Both,yes,"[0.57618201352237719,1.5992263444685661e-17,-8.8774895460806198e-34,4.9279966474639169e-50]",0.58483862789646320066419155791433430439304208383200808363911138388832600121247651,0.58483862789646320066419155791429737215979664256706430739228534678145335856964206 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,near_one,4099,10322096095657499359,105.308687,102.381484,101.601777,80.000000,21.601777,yes,Both,-,"[0.9902100102210416,2.74838488140428e-17,-1.5256600879333559e-33,8.4691147868762635e-50]",0.16140301992014431339678047519482652144140492984788687432496615166421793929885098,0.16140301992014431339678047519478457172356343218546211428730930584097639007690213 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,moderate,4099,10322096095657499356,109.069920,100.123363,99.167646,80.000000,19.167646,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804815742671822427612167381748211215236610271972494957,0.0048523201680211414554273497804747585214492493110494604164051752716872765694644792 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,moderate,4099,10322096095657499371,107.300170,103.199673,102.168212,80.000000,22.168212,yes,Both,-,"[16.10862066659595,4.4710403897518653e-16,-2.4819259923657773e-32,1.3777456910700632e-48]",28.197381657001775717891747205953291356104893832451631814899496025761393980246794,28.197381657001775717891747205948342415185062324244223614602442709080412981510555 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,moderate,4099,10322096095657499368,105.565044,98.349598,97.317514,80.000000,17.317514,yes,Both,-,"[16.916625286240897,4.6953067229351934e-16,-2.6064188157399712e-32,1.4468530905253747e-48]",16565261246416.8279913958728258930306644070018506909036659635603427886962890625,16565261246416.827991395872825976920133201596664513013387683984998603514086978856 diff --git a/validation/metrics/data/windows/x86_64/detail/MSVC_f128_fastmath_benchmark.csv b/validation/metrics/data/windows/x86_64/detail/MSVC_f128_fastmath_benchmark.csv new file mode 100644 index 0000000..ba7c038 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MSVC_f128_fastmath_benchmark.csv @@ -0,0 +1,86 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,81920,1.856564,1.856359|1.861698|1.864858|1.856564|1.860078|1.854008|1.855959,61358080,114034200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,81920,1.852747,1.848044|1.853543|1.848693|1.851571|1.854562|1.852747|1.858392,62504960,115790900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,81920,2.435891,2.437744|2.439112|2.435891|2.435303|2.439612|2.433803|2.433170,47595520,115960600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,81920,1.845349,1.843513|1.852708|1.868942|1.845349|1.859929|1.841402|1.842543,61358080,113550900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,81920,6.149750,6.125336|6.177292|6.154175|6.137466|6.149750|6.162910|6.145554,18350080,112859500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,81920,3.391583,3.465248|3.426091|3.404142|3.391583|3.389540|3.390738|3.387193,29818880,101616500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,81920,3.421861,3.464816|3.443373|3.424947|3.421861|3.415504|3.400119|3.395674,30392320,104055900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,81920,2.161878,2.152749|2.154931|2.171436|2.176111|2.163411|2.160398|2.161878,53903360,116592300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,8192,25.573425,25.618896|25.539856|25.573425,983040,25143600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,81920,1.402224,1.397769|1.403563|1.402224|1.401732|1.400219|1.406314|1.404638,76840960,107758000.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,81920,1.054276,1.050679|1.050647|1.064505|1.056111|1.060510|1.052892|1.054276,107233280,113201900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,81920,4.674470,4.680431|4.671943|4.674470|4.668054|4.681652|4.679381|4.672426,24657920,115287600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,81920,1.635555,1.660695|1.638722|1.635555|1.631739|1.637700|1.615760|1.604367,63651840,103884700.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,81920,2.853442,3.051855|2.851524|2.856290|2.854275|2.853442|2.850865|2.853248,36126720,104104300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,81920,3.327026,3.321187|3.331095|3.322673|3.322998|3.327026|3.329386|3.398478,34406400,114783900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,81920,3.966581,3.959937|3.960970|3.970525|3.966581|3.959820|3.977990|3.968107,29818880,118269900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,81920,9.965242,9.959267|9.949887|9.953421|9.970318|9.968583|9.965242|9.967619,10895360,108540100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,81920,10.097778,10.097778|10.098999|10.071167|10.088745|10.098999|10.119995|10.084595,11468800,115769800.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,8192,4.552053,4.573558|4.563890|4.552053|4.559355|4.544296|4.512152|4.512380,24543232,111558400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,8192,4.365725,4.392934|4.376107|4.363843|4.366438|4.365725|4.363244|4.357169,24543232,107238000.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,8192,83.557129,83.557129|82.958984|83.578491,294912,24585300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,8192,128.565809,128.565809|128.592936|128.493924,221184,28433400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,4096,17.879577,17.879577|17.846059|17.911232,1449984,25924200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,4096,22.461760,22.609616|22.461760|22.328992,1093632,24570400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,4096,22.250137,22.250137|22.349105|22.109690,1142784,25411300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,81920,5.983097,6.016092|6.027186|6.001084|5.983097|5.963925|5.946548|5.955990,19496960,116686300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,81920,2.314134,2.327506|2.314134|2.316617|2.312539|2.311596|2.314079|2.314273,50462720,116862600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,81920,2.287543,2.287323|2.287543|2.288722|2.283291|2.284882|2.301999|2.289257,51036160,116821900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,81920,2.286806,2.286806|2.269032|2.281870|2.286444|2.290737|2.300838|2.300382,52183040,119395600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,81920,2.733057,2.740788|2.732536|2.733252|2.731510|2.736198|2.733057|2.730941,43008000,117585600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,81920,2.015686,2.013013|2.014917|2.015686|2.015759|2.016370|2.014380|2.017175,57344000,115567000.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,81920,2.221237,2.217977|2.220325|2.225087|2.221237|2.228897|2.223933|2.220271,52183040,115978500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f128,bl::nextafter,81920,6.769767,6.772966|6.769767|6.785384|6.774524|6.765558|6.767578|6.762106,16629760,112602200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f128,bl::nexttoward,81920,6.790324,6.790324|6.771891|6.771159|6.796468|6.837606|6.793905|6.774618,17203200,116824400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,81920,0.670391,0.668223|0.667170|0.673089|0.668423|0.670391|0.672234|0.672214,174325760,116841700.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,81920,0.667387,0.667157|0.667639|0.669108|0.667426|0.665975|0.667387|0.666256,164003840,109436200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,81920,2.016535,2.016535|2.013417|2.013988|2.023262|2.020118|2.014664|2.026540,52756480,106481600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,81920,2.003020,2.002429|2.004600|2.006026|2.004163|1.998908|2.003020|1.996608,54476800,109076200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,81920,2.020836,2.025057|2.019107|2.020836|2.020391|2.022044|2.038015|2.017568,55050240,111382500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,81920,2.134365,2.148081|2.137136|2.145324|2.134365|2.128714|2.125299|2.127343,51036160,108971400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,81920,4.282252,4.277293|4.273198|4.282252|4.307836|4.295985|4.277980|4.308065,27525120,118053700.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,2048,23.969278,24.018667|23.947389|23.969278,1069056,25634300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,8192,8.769317,8.973012|8.869899|8.805432|8.769317|8.704457|8.647697|8.610851,12443648,109114200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,2048,87.187500,87.291667|87.129991|87.187500,276480,24109900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,2048,86.450195,86.450195|86.805216|86.406453,294912,25525800.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,fltx,fltx,fltx bl::f128,bl::sincos,2048,93.025527,92.958530|93.025527|93.200400,264192,24586100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,2048,93.185147,93.723366|93.118564|93.185147,270336,25233800.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,2048,116.881975,116.961496|116.735491|116.881975,215040,25129500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,2048,118.184989,118.184989|118.404018|118.032924,215040,25419300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,2048,157.613571,158.228443|157.315177|157.613571,165888,26163700.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,2048,162.599534,162.633338|162.473708|162.599534,159744,25969400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,2048,100.127429,100.125048|100.264386|100.127429,251904,25233800.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,2048,96.116536,95.986328|96.116536|96.136068,276480,26564100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,2048,100.329306,100.329306|100.118096|100.671103,264192,26517700.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,2048,114.752692,114.752692|114.804160|114.627323,227328,26080900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,2048,116.827228,116.978991|116.684702|116.827228,227328,26558800.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,2048,116.713735,116.579128|116.713735|116.786318,227328,26527600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,2048,120.789931,120.419651|120.916070|120.789931,221184,26698800.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,2048,195.877511,195.877511|195.740327|196.237909,129024,25282500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,8192,15.106392,15.032196|15.095901|15.130138|15.101147|15.106392|15.116882|15.134239,7340032,110852200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,fltx,fltx,fltx bl::f128,bl::product_sum,8192,5.567415,5.584873|5.555590|5.567415|5.560320|5.590090|5.563346|5.578335,20127744,112140200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,2048,110.564031,110.879434|110.564031|110.102143,227328,25123200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,2048,107.177734,107.177734|107.826272|107.161458,239616,25732000.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,2048,113.227143,113.353832|113.114970|113.227143,227328,25740800.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,2048,119.083659,119.083659|119.656033|118.952094,221184,26371900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,2048,133.358765,133.253479|133.358765|133.567810,196608,26226200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,2048,130.921520,130.921520|130.776515|130.989583,202752,26539400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,256,565.193966,565.193966|566.588093|564.810075,44544,25191000.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,256,560.361494,560.348252|560.361494|560.758739,45312,25396900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,256,526.921107,527.126025|526.575307|526.921107,46848,24683000.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,256,473.564040,473.525528|474.328785|473.564040,54528,25835700.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,4099,213.526581,212.564040|213.779414|213.526581,135267,28851100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,4099,180.934374,180.909978|180.960803|180.934374,147564,26699500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,4099,226.225909,226.225909|226.689436|226.028029,110673,25046900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,mt19937_64,fltx,fltx,fltx bl::f128,bl::mt19937_64,64,2.069919,2.072876|2.065288|2.069919,12374400,25607100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,uniform_real,fltx,fltx,fltx bl::f128,bl::uniform_real,64,9.034910,9.030943|9.080181|9.034910,2948928,26683900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,normal,fltx,fltx,fltx bl::f128,bl::normal,64,58.926334,59.044118|58.926334|58.849401,440640,25971300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f128,same workload,64,20.069826,20.069826|20.098443|20.043956,1310400,26300700.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f128,same workload,64,174.252289,174.252289|173.808396|174.333176,152064,26479100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f128,same workload,64,15.609773,15.580914|15.609773|15.641997,1694400,26451100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f128,same workload,64,67.599529,67.599529|67.487922|67.841854,392448,26546400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f128,same workload,64,85.292458,85.577522|85.073552|85.292458,308352,26306900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,fltx,fltx,fltx bl::f128,same workload,8,31.279791,31.279791|31.293622|31.227302,845904,26448800.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f128,same workload,8,947.517197,947.517197|946.797077|950.322442,27912,26466500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,fltx,fltx,fltx bl::f128,same workload,8,439.179920,438.643141|439.179920|439.483101,60360,26504200.000000, diff --git a/validation/metrics/data/windows/x86_64/detail/MSVC_f256_accuracy.csv b/validation/metrics/data/windows/x86_64/detail/MSVC_f256_accuracy.csv new file mode 100644 index 0000000..8b48ac1 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MSVC_f256_accuracy.csv @@ -0,0 +1,452 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,moderate,4097,10322096095657499311,219.944958,215.547580,215.029639,212.000000,3.029639,yes,Both,yes,-6.32659778225233051069632927545029475138801079375645295548611539482289480950893866e-02,-0.063265977822523305106963292754502947513880107937564529554861153949406008699572901,-0.063265977822523305106963292754502947513880107937564529554861153948228948095089387 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,qdpp,qdreal,qdpp qd_real,qdpp read,moderate,4097,10322096095657499311,215.900782,213.359466,212.624295,,,,NaN,yes,-4.63882622312234493417843178551748957461733884891010882745196058285158589332107375e-20,-4.638826223122344934178431785517489574617338848910108827451960582394374055047182e-20,-4.6388262231223449341784317855174895746173388489101088274519605828515858933210737e-20 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,moderate,4097,10322096095657499311,215.940112,214.179279,214.005374,,,,Both,yes,3.27924571850188479709697729061957092921603976290473696084676388411920809973612135e+04,32792.457185018847970969772906195709292160397629047369608467638839951179746222626,32792.457185018847970969772906195709292160397629047369608467638841192080997361213 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,moderate,4097,10322096095657499311,238.934823,237.169709,237.016125,,,,No,no,-5.50310983261151208909435524852066623206545235447780617289527732284019451304374918e+11,-550310983261.15120890943552485206662320654523544778061728952773228401944884035039,-550310983261.15120890943552485206662320654523544778061728952773228401945130437492 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,wide_exponent,4098,10322096095657499308,219.514079,212.275332,212.017147,212.000000,0.017147,yes,Both,yes,2.47163553801407265315232159817868248210487207087397698019878061850401032407603178e-277,2.4716355380140726531523215981786824821048720708495655738821672043746801610949361e-277,2.4716355380140726531523215981786824821048720708739769801987806185040103240760318e-277 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,qdpp,qdreal,qdpp qd_real,qdpp read,wide_exponent,4098,10322096095657499308,185.928461,0.000000,0.000000,,,,NaN,yes,5.95931860969641614490760034996604418110933850056329521007406471645258405470130332e-279,nan,5.9593186096964161449076003499660441811093385005632952100740647164525840547013033e-279 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,wide_exponent,4098,10322096095657499308,215.965809,214.158596,214.010809,,,,Both,yes,4.67754409985637411064587241203832249167095915858300940438608874596758932966859234e-10,4.6775440998563741106458724120383224916709591585830094043860887461439270142288485e-10,4.6775440998563741106458724120383224916709591585830094043860887459675893296685923e-10 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,wide_exponent,4098,10322096095657499308,238.948816,237.180769,237.050336,,,,No,no,-9.82792416239779920528610383546388843899472112754392449895974148140668994861206983e-209,-9.8279241623977992052861038354638884389947211275439244989597414814066899056386218e-209,-9.8279241623977992052861038354638884389947211275439244989597414814066899486120698e-209 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,qdpp,qdreal,qdpp qd_real,qdpp to_string,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,,,,Both,no,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,moderate,4099,10322096095657499356,220.421856,217.506231,217.050134,,,,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,moderate,4099,10322096095657499356,217.101379,214.109787,213.625754,,,,Both,yes,"[-1.0120359112545216,-2.8089639260556788e-17,1.5592882130242451e-33,-8.6557883806306642e-50]",-1.0120359112545216643274079497272660582288297275418200429251556668,-1.0120359112545216643274079497272660582288297275418200429251556667501762953126709 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,qdpp,qdreal,qdpp qd_real,qdpp to_string,wide_exponent,4096,10322096095657499357,217.215017,211.111082,209.060322,,,,Both,no,"[7.7719062441419549e-269,2.1571373143686054e-285,-1.1974517568450501e-301,6.6471937837433399e-318]",7.77190624414195507699259883970895062579665643199484187540256822265e-269,7.7719062441419550769925988397089506257966564319948418772979026723338228605207361e-269 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,wide_exponent,4096,10322096095657499357,220.211606,217.209596,216.955609,,,,Both,yes,"[-1.0005623436112949e+24,-27771183.786254175,1.5416103830298108e-09,-8.5576567112045135e-26]",-1.00056234361129493015787178625417346573290920651736114849688038987e+24,-1000562343611294930157871.7862541734657329092065173611484968803898748988958608631 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,wide_exponent,4096,10322096095657499357,216.729106,213.966069,213.645520,,,,Both,yes,"[-1.0029053037863911e+73,-2.7836213994558466e+56,1.5452202847575905e+40,-8.5776956912785892e+23]",-1.002905303786391175276514736134567164601647246691591077312663009e+73,-10029053037863911752765147361345671646016472466915910773126630089512976384 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,qdpp,qdreal,qdpp qd_real,qdpp write,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,,,,Both,no,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,qdpp,qdreal,qdpp qd_real,qdpp write,wide_exponent,4096,10322096095657499357,217.215017,211.111082,209.060322,,,,Both,no,"[7.7719062441419549e-269,2.1571373143686054e-285,-1.1974517568450501e-301,6.6471937837433399e-318]",7.77190624414195507699259883970895062579665643199484187540256822265e-269,7.7719062441419550769925988397089506257966564319948418772979026723338228605207361e-269 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,qdpp,qdreal,qdpp qd_real,qdpp operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,qdpp,qdreal,qdpp qd_real,qdpp operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,qdpp,qdreal,qdpp qd_real,qdpp operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,tlfloat,tloct,TLFloat Octuple,TLFloat operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,qdpp,qdreal,qdpp qd_real,qdpp operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,qdpp,qdreal,qdpp qd_real,qdpp operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,tlfloat,tloct,TLFloat Octuple,TLFloat operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,qdpp,qdreal,qdpp qd_real,qdpp operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,general,3770,10322096095657499292,225.979394,215.583815,215.297307,190.000000,25.297307,yes,Both,no,"representative lhs [-4.4462634936433036e+21,-123408.6026048271,6.8505536024347558e-12,-3.8028211704259384e-28] ; representative rhs [-1.5864490641473432e+22,-440328.06960285309,2.4443118063091801e-11,-1.3568656233637788e-27]",-20310754135116736403992.672207680164858397009037806754206012036634323297640103087,-20310754135116736403992.672207680164858397009037806754206012036634009406784094328 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,qdpp,qdreal,qdpp qd_real,qdpp operator+,general,3770,10322096095657499292,225.979148,215.583815,215.297307,,,,NaN,no,"representative lhs [-4.4462634936433036e+21,-123408.6026048271,6.8505536024347558e-12,-3.8028211704259384e-28] ; representative rhs [-1.5864490641473432e+22,-440328.06960285309,2.4443118063091801e-11,-1.3568656233637788e-27]",-20310754135116736403992.672207680164858397009037806754206012036634323297640103087,-20310754135116736403992.672207680164858397009037806754206012036634009406784094328 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator+,general,3770,10322096095657499292,223.282430,214.179406,214.011982,,,,Both,yes,"representative lhs [1839126521648.5967,5.1046015238326211e-05,-2.8336230716478179e-21,1.5729767886262335e-37] ; representative rhs [378235839901.0448,1.0498153454914361e-05,-5.8276458408470292e-22,3.2349932959347012e-38]",2217362361549.6415410363561932405683908522995717267139530293433997786912098314276,2217362361549.6415410363561932405683908522995717267139530293433998622151070218087 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,general,3770,10322096095657499292,251.753596,237.252454,237.007687,,,,No,no,"representative lhs [62135357.136479288,1.7246026034056585e-09,-9.5734675931472475e-26,5.3143420737074274e-42] ; representative rhs [-565957625994804.25,-0.015708479683540617,8.719957913261643e-19,-4.8405490245327049e-35]",-565957563859447.12922918961932314491369166283033247612036449157122254744835860639,-565957563859447.12922918961932314491369166283033247612036449157122254744580965934 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,subnormal,326,10322096095657499292,243.500079,219.782158,216.532998,190.000000,26.532998,yes,Both,no,"broad lhs [-4.0912052790212279e-223,-1.1355375748093388e-239,6.3034998044016954e-256,-3.4991453092834664e-272] ; broad rhs [9.6732779190304605e-272,2.6848739673264345e-288,-1.4904044483712489e-304,8.2755995678408796e-321]",-4.0912052790212280311833034891221488165122802908340538768476180849661443443505261e-223,-4.0912052790212280311833034891221488165122802908340538768476180849392956046772617e-223 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,qdpp,qdreal,qdpp qd_real,qdpp operator+,subnormal,326,10322096095657499292,243.500079,219.782158,216.532998,,,,NaN,no,"broad lhs [-4.0912052790212279e-223,-1.1355375748093388e-239,6.3034998044016954e-256,-3.4991453092834664e-272] ; broad rhs [9.6732779190304605e-272,2.6848739673264345e-288,-1.4904044483712489e-304,8.2755995678408796e-321]",-4.0912052790212280311833034891221488165122802908340538768476180849661443443505261e-223,-4.0912052790212280311833034891221488165122802908340538768476180849392956046772617e-223 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator+,subnormal,326,10322096095657499292,245.391464,215.478126,214.860355,,,,Both,yes,"broad lhs [-6.9688197085765511e-265,-1.9342360237308151e-281,1.0737166843026808e-297,-5.9603249241910803e-314] ; broad rhs [7.5706271798833126e-227,2.1012711514898676e-243,-1.1664398066823332e-259,6.475041651090214e-276]",7.5706271798833128589493143999584390922823152154190751436541880413193723254995517e-227,7.5706271798833128589493143999584390922823152154190751436541880411609851505089632e-227 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,subnormal,326,10322096095657499292,268.533311,239.229805,237.927733,,,,No,no,"broad lhs [1.0442940275936825e-262,2.8984981847826123e-279,-1.6089897107899388e-295,8.931687116517412e-312] ; broad rhs [2.3634881419299421e-239,6.5599973839978789e-256,-3.6415300685976198e-272,2.0214552635109516e-288]",2.363488141929942143733794549283321928828920127322018608246875184884809475467298e-239,2.3634881419299421437337945492833219288289201273220186082468751848848094698416956e-239 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,general,3791,10322096095657499292,226.123353,215.602949,215.220788,190.000000,25.220788,yes,Both,no,"representative lhs [155.03656083289641,4.3031289873845084e-15,-2.388716439863108e-31,1.3260039954183278e-47] ; representative rhs [2246405305209.4082,6.2350272312089677e-05,-3.4611353956265177e-21,1.9213161037848301e-37]",-2246405305054.3717046423758949106196822642348296102031142477192627199056314953875,-2246405305054.3717046423758949106196822642348296102031142477192626832977015519632 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,qdpp,qdreal,qdpp qd_real,qdpp operator-,general,3791,10322096095657499292,226.121622,215.602917,214.959040,,,,NaN,no,"representative lhs [-13777.629901790066,-3.8240604854328413e-13,2.1227799992433967e-29,-1.1783796156868957e-45] ; representative rhs [7.7752724229543192e+20,21580.716166742284,-1.1979703988108816e-12,6.6500715978961103e-29]",-777527242295431957022.34606853234900270537189607974110951719324325739708729160804,-777527242295431957022.34606853234900270537189607974110951719324327258845155054311 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator-,general,3791,10322096095657499292,223.541382,214.220914,214.046715,,,,Both,yes,"extreme lhs [-4.252941070652636e+270,-1.1804282747531303e+254,6.552693247747378e+237,-3.6374754584774671e+221] ; extreme rhs [4.4779550465712955e+270,1.2428821989849669e+254,-6.8993821710492778e+237,3.8299264709936042e+221]",-8.7308961172239317176190432327170580782021961210607087161308584689659299006598005e+270,-8.7308961172239317176190432327170580782021961210607087161308584686448766840125609e+270 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,general,3791,10322096095657499292,252.005853,237.248925,237.000122,,,,No,no,"representative lhs [1.3878961076205298e-17,3.852185536169866e-34,-2.1383925386918945e-50,1.1870463160711911e-66] ; representative rhs [2.5596121212896439e-24,7.1043507779135037e-41,-3.9437069043266069e-57,2.1891971037782992e-73]",1.3878958516593177248260844131745516632854659836193439237091032443574096862512889e-17,1.3878958516593177248260844131745516632854659836193439237091032443574096799676493e-17 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,subnormal,305,10322096095657499292,243.910586,244.000000,216.728701,190.000000,26.728701,yes,Both,no,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239320146546075137762e-238,8.2656349351104667692680102118096923996066568310632957805469239319672919306477601e-238 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,qdpp,qdreal,qdpp qd_real,qdpp operator-,subnormal,305,10322096095657499292,243.910586,244.000000,216.728701,,,,NaN,no,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239320146546075137762e-238,8.2656349351104667692680102118096923996066568310632957805469239319672919306477601e-238 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator-,subnormal,305,10322096095657499292,245.904029,246.000000,216.728701,,,,Both,yes,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239322479705121395809e-238,8.2656349351104667692680102118096923996066568310632957805469239322006078352735648e-238 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,subnormal,305,10322096095657499292,268.897431,269.000000,237.716330,,,,No,no,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239319672919078689777e-238,8.2656349351104667692680102118096923996066568310632957805469239319672919306477601e-238 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,general,4000,10322096095657499292,220.010524,216.259138,215.221541,190.000000,25.221541,yes,Both,yes,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60038241930403290903625769183688852217377918301809189,-156159778640594921198000750.60038241930403290903625769183688852217632267056740194 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,qdpp,qdreal,qdpp qd_real,qdpp operator*,general,4000,10322096095657499292,220.010524,216.259138,215.221541,,,,Both,no,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60038241930403290903625769183688852217377918301809189,-156159778640594921198000750.60038241930403290903625769183688852217632267056740194 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator*,general,4000,10322096095657499292,215.959021,214.146637,214.012662,,,,Both,yes,"structured lhs [-1.1022409972597686e+20,-3059.333334608973,1.6982711540430701e-13,-9.427298686376762e-30] ; balanced-product rhs [-9.0724261072311291e-21,-2.5181040883645947e-37,1.3978285686525564e-53,-7.7595073069844723e-70]",1.000000000000000088520617930547062213152525880726620878119303628883372473544684,1.0000000000000000885206179305470622131525258807266208781193036288457221016484325 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,general,4000,10322096095657499292,238.976836,237.170485,237.006898,,,,No,no,"representative lhs [-1.0168921687957512e-16,-2.8224427483951354e-33,1.5667704624772934e-49,-8.6973232087244803e-66] ; representative rhs [-4.1345258950916926e+22,-1147561.4611599329,6.370245781761224e-11,-3.5361967697162955e-27]",4204367.0044019860517179602758477836413196189733707121724545268060512669316657157,4204367.0044019860517179602758477836413196189733707121724545268060512669127198166 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,subnormal,100,10322096095657499292,221.469015,215.608028,215.608028,190.000000,25.608028,yes,Both,yes,"extreme lhs [-5.3809439414843993e+270,-1.4935119645133053e+254,8.2906568527791063e+237,-4.6022390636108503e+221] ; extreme rhs [-4.596668242019171e-261,-1.2758317297132313e-277,7.0822888093748442e-294,-3.931460051606543e-310]",24734414127.906804259564005392277744744307358869933187588284984254854603209456978,24734414127.906804259564005392277744744307358869933187588284984255162792737796103 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,qdpp,qdreal,qdpp qd_real,qdpp operator*,subnormal,100,10322096095657499292,221.469015,215.608028,215.608028,,,,Both,no,"extreme lhs [-5.3809439414843993e+270,-1.4935119645133053e+254,8.2906568527791063e+237,-4.6022390636108503e+221] ; extreme rhs [-4.596668242019171e-261,-1.2758317297132313e-277,7.0822888093748442e-294,-3.931460051606543e-310]",24734414127.906804259564005392277744744307358869933187588284984254854603209456978,24734414127.906804259564005392277744744307358869933187588284984255162792737796103 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator*,subnormal,100,10322096095657499292,217.348488,214.292349,214.292349,,,,Both,yes,"extreme lhs [-5.9542134868631228e-272,-1.652626226662269e-288,9.173918439699219e-305,-5.0938168086232519e-321] ; extreme rhs [4.2949102582549815e+270,1.1920770643533644e+254,-6.6173570198633482e+237,3.6733710628085992e+221]",-0.25572812584568589864154296747923216874038792137305578267444519266559147574620585,-0.25572812584568589864154296747923216874038792137305578267444519265766000955097554 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,subnormal,100,10322096095657499292,240.223553,237.076391,237.076391,,,,No,no,"extreme lhs [-8.6746891312209087e-272,-2.4077099012367622e-288,1.3365474844855075e-304,-7.4208660005355231e-321] ; extreme rhs [-2.6248964316441233e+255,-7.2855511391692975e+238,4.0442933108948961e+222,-2.2450337760465101e+206]",2.2770160546163824124244516741669496270247267859218074430231396140145617261766692e-16,2.2770160546163824124244516741669496270247267859218074430231396140145617163984162e-16 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,general,4045,10322096095657499292,219.218459,215.287455,214.762066,190.000000,24.762066,yes,Both,yes,"representative lhs [2268851457486.2539,6.2973278188889589e-05,-3.49571916907152e-21,1.940513954563361e-37] ; representative rhs [0.00093095878597111432,2.5839296979055357e-20,-1.4343691223137255e-36,7.9623481270203769e-53]",2437112675315200.8552398842775006307979109182413214802574225974607596074455830965,2437112675315200.8552398842775006307979109182413214802574225974607050251573596225 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,qdpp,qdreal,qdpp qd_real,qdpp operator/,general,4045,10322096095657499292,219.206438,214.806774,214.013421,,,,NaN,no,"broad lhs [-4.1408453630726265e-99,-1.1493154658738865e-115,6.3799824638548856e-132,-3.5416017140382148e-148] ; broad rhs [3.6617819725500985e+81,1.0163486642706106e+65,-5.6418684406012752e+48,3.1318661223307815e+32]",-1.1308279395424801511446934119645693613341712224082609557731723080505494810403134e-180,-1.1308279395424801511446934119645693613341712224082609557731723080079957823561001e-180 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,general,4045,10322096095657499292,215.966511,214.166285,214.002285,,,,Both,yes,"structured lhs [1.421739367690595e-13,3.9461194525652748e-30,-2.1905363370795932e-46,1.2159919388519087e-62] ; near-equal divisor [1.421739367690595e-13,3.9461194525652748e-30,-2.1905363370795932e-46,1.2158435023359357e-62]",1.000000000000000000000000000000000000000000000000000010440487148873603784702549,1.0000000000000000000000000000000000000000000000000000104404871488356816123738149 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,general,4045,10322096095657499292,238.999926,237.154132,237.025300,,,,No,no,"representative lhs [-4.6265730361291875e+23,-12841319.774551351,7.1283644401406169e-10,-3.9570371646816632e-26] ; representative rhs [1547.4435613354531,4.2950186777564266e-14,-2.3842143136201403e-30,1.3235048133109718e-46]",-298981698055367349746.41814433326396950592089524800971303493694163568117583736658,-298981698055367349746.41814433326396950592089524800971303493694163568117716757507 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,subnormal,55,10322096095657499292,219.372138,215.374456,215.374456,190.000000,25.374456,yes,Both,yes,"extreme lhs [-6.5972954615428272e-272,-1.8311173304149739e-288,1.0164743105084273e-304,-5.6422296755070355e-321] ; extreme rhs [6.3421732060336743e-272,1.760306679874833e-288,-9.7716650319925213e-305,5.4248407913368871e-321]",-1.0402263147380523166730438190618890627910384611501752613620202130066222580107113,-1.040226314738052316673043819061889062791038461150175261362020212991383268138225 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,qdpp,qdreal,qdpp qd_real,qdpp operator/,subnormal,55,10322096095657499292,180.277071,173.307480,173.307480,,,,NaN,no,"extreme lhs [-6.4321479084273474e-272,-1.785279676432646e-288,9.9102930108543653e-305,-5.498950638213074e-321] ; extreme rhs [-7.387563554446632e-272,-2.050460788507078e-288,1.1382343892458058e-304,-6.3190996103095433e-321]",0.8706724295530138061070872634819414321469275196895490328751379917382954088131536,0.87067242955301380610708726348194143214692751968954909163825857282149907374030937 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,subnormal,55,10322096095657499292,218.186470,214.206957,214.206957,,,,Both,yes,"extreme lhs [-6.5972954615428272e-272,-1.8311173304149739e-288,1.0164743105084273e-304,-5.6422296755070355e-321] ; extreme rhs [6.3421732060336743e-272,1.760306679874833e-288,-9.7716650319925213e-305,5.4248407913368871e-321]",-1.0402263147380523166730438190618890627910384611501752613620202130256133935022309,-1.040226314738052316673043819061889062791038461150175261362020212991383268138225 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,subnormal,55,10322096095657499292,241.440467,237.221787,237.221787,,,,No,no,"extreme lhs [8.1717524039455344e-272,2.2681169175990763e-288,-1.2590578122301667e-304,6.9910288886536386e-321] ; extreme rhs [8.1073110278598673e-272,2.2502308427318672e-288,-1.2491290461612942e-304,6.931741011152689e-321]",1.0079485511119804779080183242564760679498572504876789996787264200987624042534109,1.0079485511119804779080183242564760679498572504876789996787264200987624081669073 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,moderate,4099,10322096095657499356,219.883649,215.654212,215.160161,190.000000,25.160161,yes,Both,no,"[1.2843679126351581,3.5648370717432602e-17,-1.9788820980433443e-33,1.0985002341331286e-49] ; [-2.3308777059725987,-6.4694852418906121e-17,3.5912857365098039e-33,-1.9935640563405487e-49] ; [5.2042205184851724,1.4444613612122271e-16,-8.0183713069960479e-33,4.451090222510361e-49]",2.2105159846573199203800006655584861882250236763069688164874765011598446438714347,2.2105159846573199203800006655584861882250236763069688164874765011222755061934085 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,moderate,4099,10322096095657499356,215.978389,214.164686,214.038759,,,,Both,yes,"[4.9845060765167126,1.3834783531332142e-16,-7.6798476085949372e-33,4.2631718203372733e-49] ; [-1.8344589332917707,-5.0916463636745698e-17,2.8264315131002303e-33,-1.5689846716849977e-49] ; [1.1247730073775273,3.1218722256685296e-17,-1.7329872124374921e-33,9.6200115231453559e-50]",-8.0190986927356709087174259178039082808363580425011987458457247106202380902722945,-8.0190986927356709087174259178039082808363580425011987458457247103237283321300853 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,moderate,4099,10322096095657499356,238.995329,237.157442,237.018361,,,,No,no,"[-0.84550812208603965,-2.3467564616187476e-17,1.302711528438498e-33,-7.2315016665852497e-50] ; [4.7189100901806977,1.3097606583136461e-16,-7.2706321980400619e-33,4.0360116349225438e-49] ; [4.997053192184298,1.3869608773099112e-16,-7.6991795012188515e-33,4.2739031764875987e-49]",1.0071763835427521666104437874229887686470986916744027421719680838786588428377016,1.0071763835427521666104437874229887686470986916744027421719680838786588383350389 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,Both,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,cancellation,4098,10322096095657499352,inf,inf,inf,,,,Both,yes,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,wide_exponent,4096,10322096095657499357,225.262959,215.958051,215.096656,190.000000,25.096656,yes,Both,no,"[5.0695695241027842e+79,1.4070882026492271e+63,-7.8109086012980007e+46,4.3359252862018586e+30] ; [-1.285263546577847e-53,-3.5673229553052827e-70,1.9802620406268915e-86,-1.0992662561475861e-102] ; [-9312.4534885580761,-2.5847250696870095e-13,1.4348106423461901e-29,-7.9647990555497543e-46]",-651573290617131278652235925.796582770520137295580825262259286558273807300279549,-651573290617131278652235925.79658277052013729558082526225928655828537955033923283 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,wide_exponent,4096,10322096095657499357,222.795239,214.207199,214.017731,,,,Both,yes,"[-7.3362225804227161e+81,-2.0362108056400696e+65,1.1303240597060724e+49,-6.2745589818673089e+32] ; [4.697530874614766e+74,1.3038267339712156e+58,-7.2376923008833117e+41,4.0177263187964394e+25] ; [1.3845075017784626e-80,3.84278026560176e-97,-2.1331715647231242e-113,1.1841480933156424e-129]",-3.4462132074581718803444481231787333071891997137766508509269936657892888506715951e+156,-3.4462132074581718803444481231787333071891997137766508509269936656599927318479792e+156 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,wide_exponent,4096,10322096095657499357,245.186928,237.226957,237.054841,,,,No,no,"[-7.7238642392071697e+37,-2.1438029793616669e+21,119004.97139736659,-6.606102964510729e-12] ; [7.7217688161659949e+38,2.1432213826350063e+22,-1189726.8629351733,6.6043107812284359e-11] ; [8.411674119728479e-53,2.3347085708415258e-69,-1.2960236055689777e-85,7.1943762368019562e-102]",-59641894022609612945325167753430528720789835656430133782624366680451826843648,-59641894022609612945325167753430528720789835656430133782624366680451826583671.804 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,qdpp,qdreal,qdpp qd_real,qdpp abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246,3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,qdpp,qdreal,qdpp qd_real,qdpp abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,qdpp,qdreal,qdpp qd_real,qdpp fabs,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fabs,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0]",8,8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,moderate,4099,10322096095657499356,220.145544,216.285104,215.251190,190.000000,25.251190,yes,Both,yes,"[-0.36144099270550889,-1.0032002803625731e-17,5.5688802478447044e-34,-3.0913495362687196e-50]",0.13063959120794373790137808981865083109327726640612337325102002398854548322121324,0.13063959120794373790137808981865083109327726640612337325102002399063002164712949 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,qdpp,qdreal,qdpp qd_real,qdpp sqr,moderate,4099,10322096095657499356,216.750989,214.989743,214.720760,,,,Both,yes,"[-3.0351966116712088,-8.4243629063540904e-17,4.6764608332162063e-33,-2.5959572453971881e-49]",9.212418471500387180002010799680797528619143723193698328246365177142909479711308,9.2124184715003871800020107996807975286191437231936983282463651773552262335669417 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,wide_exponent,4096,10322096095657499357,220.095837,216.278909,215.290405,190.000000,25.290405,yes,Both,yes,"[6.7502995556670522e-41,1.8735844974546312e-57,-1.0400483238274423e-73,5.7734279791801363e-90]",4.5566544091238805246854811871109707929263286794390254922251627617554550230494986e-81,4.5566544091238805246854811871109707929263286794390254922251627618262131586719535e-81 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,qdpp,qdreal,qdpp qd_real,qdpp sqr,wide_exponent,4096,10322096095657499357,216.710094,215.051659,214.774024,,,,Both,yes,"[-1.1572176183879363e+79,-3.211924111090437e+62,1.7829760507406462e+46,-9.8975053194374838e+29]",1.3391526163074474528650888471418397717788406774304758993556136673441243150413775e+158,1.3391526163074474528650888471418397717788406774304758993556136673738688113319e+158 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,near_one,4099,10322096095657499359,217.971795,215.406773,214.634335,190.000000,24.634335,yes,Both,yes,"[0.98524730223011503,2.7346105997142351e-17,1.5180138255933757e-33,8.426669504365412e-50]",1.0149735987467228735600712240168282012518927505403262882885405865459789646852313,1.0149735987467228735600712240168282012518927505403262882885405865211429570599582 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,qdpp,qdreal,qdpp qd_real,qdpp inv,near_one,4099,10322096095657499359,217.977278,215.406773,214.634335,,,,NaN,no,"[0.98524730223011503,2.7346105997142351e-17,1.5180138255933757e-33,8.426669504365412e-50]",1.0149735987467228735600712240168282012518927505403262882885405865459789646852313,1.0149735987467228735600712240168282012518927505403262882885405865211429570599582 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,wide_exponent,4096,10322096095657499357,217.877061,215.148048,214.625136,190.000000,24.625136,yes,Both,yes,"[2.2537520677334854e+105,6.2554185934856772e+88,3.4724548755780555e+72,1.9275996774193202e+56]",4.4370452913468106284563119957364553561271971862592280260566035243063949187169959e-106,4.4370452913468106284563119957364553561271971862592280260566035241971276114030617e-106 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,qdpp,qdreal,qdpp qd_real,qdpp inv,wide_exponent,4096,10322096095657499357,217.878526,215.148048,214.625136,,,,NaN,no,"[2.2537520677334854e+105,6.2554185934856772e+88,3.4724548755780555e+72,1.9275996774193202e+56]",4.4370452913468106284563119957364553561271971862592280260566035243063949187169959e-106,4.4370452913468106284563119957364553561271971862592280260566035241971276114030617e-106 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,qdpp,qdreal,qdpp qd_real,qdpp min,moderate,4099,10322096095657499356,inf,inf,inf,,,,Inf,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,qdpp,qdreal,qdpp qd_real,qdpp min,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Inf,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643637975124707203e+166,-3.1692452985045241935931724109976666181468122346931195036563377643637975124707203e+166 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,qdpp,qdreal,qdpp qd_real,qdpp max,moderate,4099,10322096095657499356,inf,inf,inf,,,,Inf,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820587966479345926073,-7.0558510431143679224555721217306640518626870807672704477968820587966479345926073 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,qdpp,qdreal,qdpp qd_real,qdpp max,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Inf,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246,3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,moderate,4099,10322096095657499356,241.301771,214.093805,214.003121,,,,No,yes,"[1.3512114356810514,3.7503651175747926e-17,-2.0818708521412835e-33,1.1556704771716239e-49] ; [-2.6574506527362001,-7.3759072536822014e-17,4.0944510302688427e-33,-2.2728769035023315e-49]",4.0086620884172515790939164253351213814054256785823302622262501699878791447368772,4.0086620884172515790939164253351213814054256785823302622262501698359500608047204 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,Both,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,tlfloat,tloct,TLFloat Octuple,tlfloat::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,qdpp,qdreal,qdpp qd_real,qdpp floor,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::floor,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,tlfloat,tloct,TLFloat Octuple,tlfloat::floor,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,qdpp,qdreal,qdpp qd_real,qdpp ceil,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ceil,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,tlfloat,tloct,TLFloat Octuple,tlfloat::ceil,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,qdpp,qdreal,qdpp qd_real,qdpp aint,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::trunc,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,tlfloat,tloct,TLFloat Octuple,tlfloat::trunc,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,qdpp,qdreal,qdpp qd_real,qdpp round,boundary,4110,10322096095657499382,229.692457,0.000000,0.000000,,,,Both,no,"just below -2.5 [-2.5,-5.5511151231257827e-17,0,0]",-4,-3 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::round,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,tlfloat,tloct,TLFloat Octuple,tlfloat::round,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,tlfloat,tloct,TLFloat Octuple,tlfloat::rint,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,moderate,4099,10322096095657499356,220.044956,215.606687,215.330917,190.000000,25.330917,yes,Both,yes,"[4.0249001329210348,1.1171341998464465e-16,-6.2013405513286293e-33,3.4424355318133533e-49]",4.0249999999999999999999999999999999999999999999999999999999999999392283664271373,4.025 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,wide_exponent,4096,10322096095657499357,229.647449,215.594292,215.067820,190.000000,25.067820,yes,Both,yes,"[3.0148718470081313e-08,8.3679503521064993e-25,-4.6451455749144106e-41,2.5785737850028193e-57]",3.0148720000000000000000000000000000000000000000000000000000000000546265902778824e-08,3.014872e-08 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,boundary,4112,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lround,boundary,4112,10322096095657499382,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,boundary,4116,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::llround,boundary,4116,10322096095657499382,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,qdpp,qdreal,qdpp qd_real,qdpp divrem,moderate,4099,10322096095657499356,inf,inf,inf,,,,NaN,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.9441489568856320775444278782693359481373129192327295522031179412033520654073927 ; 1,-0.9441489568856320775444278782693359481373129192327295522031179412033520654073927 ; 1 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,tlfloat,tloct,TLFloat Octuple,tlfloat::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0]",0 ; -8,-0 ; -8 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 ; 0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,qdpp,qdreal,qdpp qd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14,1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,tlfloat,tloct,TLFloat Octuple,tlfloat::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,qdpp,qdreal,qdpp qd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14,1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,qdpp,qdreal,qdpp qd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14,1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815,0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738111930089468594567 ; -815,0.72479240042364947229615036515952308640740981938027711987583738111930089468594567 ; -815 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815,0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,near_one,4099,10322096095657499359,217.932663,211.994703,210.121730,190.000000,20.121730,yes,Both,yes,"[0.68844842180625743,1.9108282228903967e-17,1.0607227445782445e-33,5.88819406887178e-50]",0.82972792034874748204635533162847142244462757631213868214367401578005505462467425,0.82972792034874748204635533162847142244462757631213868214367401531661654544094597 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,near_one,4099,10322096095657499359,217.589527,213.954821,212.634327,,,,NaN,no,"[0.92271144976513408,2.5610387415362759e-17,1.4216620889053044e-33,7.8918099216968261e-50]",0.96057870565879926219334849623588972708054926243562340391213612034854002041473267,0.96057870565879926219334849623588972708054926243562340391213612025451957730893959 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,near_one,4099,10322096095657499359,215.930506,214.147252,214.039856,,,,Both,yes,"[1.0547078163563617,2.927402254927385e-17,1.6250346928799925e-33,9.020754659250188e-50]",1.0269896865871447065036301993509151661723964081071594655630640292574526428023742,1.0269896865871447065036301993509151661723964081071594655630640292195081210834103 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,near_one,4099,10322096095657499359,238.936641,237.129126,237.015136,,,,No,no,"[1.004250926374979,2.7873562524066115e-17,1.5472935446273548e-33,8.5892045954958072e-50]",1.0021232091788808899186300306859360530174763231010496743360102827344110032442819,1.0021232091788808899186300306859360530174763231010496743360102827344110077343784 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,wide_exponent,4096,10322096095657499357,217.922910,211.307570,210.087010,190.000000,20.087010,yes,Both,yes,"[3.9723050169707548e-164,1.1025361226687388e-180,6.120304944338899e-197,3.3974517334661164e-213]",1.9930642280094123730625261552128791429300322769194722961440719680011680513374133e-82,1.9930642280094123730625261552128791429300322769194722961440719668608407694664803e-82 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,wide_exponent,4096,10322096095657499357,216.867785,187.863729,175.000000,,,,NaN,no,"[1.1830521861667747e-271,2.0148092837299794e-288,1.1184438285127715e-304,6.2104051682244691e-321]",3.4395525670743494702058025712473913563568041942484946252574653881771571378495589e-136,3.4395525670743494702058025712473913563568041942484945534362566398759400411667273e-136 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,wide_exponent,4096,10322096095657499357,215.957082,214.207986,214.030797,,,,Both,yes,"[1.2961858591599819e-147,3.5976384625823808e-164,1.9970905277180044e-180,1.1086079430666665e-196]",3.6002581284679880325511139217386037773904401119124396309706748839432497852866192e-74,3.6002581284679880325511139217386037773904401119124396309706748840771075796334657e-74 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,wide_exponent,4096,10322096095657499357,238.979636,237.193860,237.059682,,,,No,no,"[1.3021434303237256e+30,36141740442744.586,0.0020062696194780619,1.1137033625752479e-19]",1141114994347075.2829460391518194856039517836022377655235840679242233012131762761,1141114994347075.2829460391518194856039517836022377655235840679242233012082188731 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,extreme_finite,4096,10322096095657499354,217.427345,211.612729,209.568118,190.000000,19.568118,yes,Both,yes,"[4.8277532298172217e+270,1.3399706982378861e+254,7.4383316075337441e+237,4.1291035077405081e+221]",2.1972148802102223696810058497941079031647215249309110296216736160980628789995527e+135,2.1972148802102223696810058497941079031647215249309110296216736142967757213404226e+135 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,extreme_finite,4096,10322096095657499354,164.105445,54.924558,54.257959,,,,NaN,no,"[2.1797608131362205e+307,6.0500516072987134e+290,3.3584532972967337e+274,1.8643160888935549e+258]",4.6687908639563421334624257862672782847354542009511733495906106625486754394714421e+153,4.6687908639563419167262719047790688864911151958646531213147962807133406989377565e+153 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,extreme_finite,4096,10322096095657499354,216.198711,214.402185,214.043797,,,,Both,yes,"[1.1667387299631971e+307,3.2383505043176361e+290,1.7976456458499635e+274,9.9789379306989474e+257]",3.4157557435554392146975726809832843561134137037327812181683553223146977070959883e+153,3.4157557435554392146975726809832843561134137037327812181683553224405565128983162e+153 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,extreme_finite,4096,10322096095657499354,238.983582,237.375285,237.014769,,,,No,no,"[1.1341420973881531e+307,3.1478766742924855e+290,1.747422581239991e+274,9.7001439172128056e+257]",3.3677026255121652856496237964988544939728879131737426810293064315009323411409691e+153,3.3677026255121652856496237964988544939728879131737426810293064315009323562340825e+153 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,subnormal,4100,10322096095657499350,218.287365,211.525055,210.033468,190.000000,20.033468,yes,Both,yes,"[3.9080211162696703e-308,0,0,0]",1.976871547741448539026969223351905164877787940969937902883633378772329452173061e-154,1.976871547741448539026969223351905164877787940969937902883633377598501465266526e-154 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,subnormal,4100,10322096095657499350,10.774067,0.000000,0.000000,,,,NaN,no,"denorm_min [4.9406564584124654e-324,0,0,0]",nan,2.2227587494850774834427134142705600969125245614649077934835905829686756089538688e-162 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,subnormal,4100,10322096095657499350,216.756880,214.195374,214.037615,,,,Both,yes,"[3.3572221104094627e-316,0,0,0]",1.8322723897961958515939232356286101602275881371639992177545942680678684257340433e-158,1.8322723897961958515939232356286101602275881371639992177545942681356712397974308e-158 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,subnormal,4100,10322096095657499350,239.723907,237.212513,237.016370,,,,No,no,"[2.1697712842811401e-314,0,0,0]",1.4730143530465479195773385224994263560361476001941627900776246892038592559065829e-157,1.4730143530465479195773385224994263560361476001941627900776246892038592625009045e-157 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,moderate,4099,10322096095657499356,219.365127,215.645937,215.009723,190.000000,25.009723,yes,Both,yes,"[1.493485632755414,4.1452553410798288e-17,-2.3010789613086162e-33,1.2773554221626827e-49]",1.1430547069429598916413447070301032665501071556717031589096757220734804391392631,1.143054706942959891641344707030103266550107155671703158909675722095042538408066 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,qdpp,qdreal,qdpp qd_real,qdpp nroot,moderate,4099,10322096095657499356,217.448286,213.933191,213.007518,,,,NaN,no,"[4.9307698076638697,1.3685635423987457e-16,-7.5970537771682706e-33,4.2172120113638637e-49]",1.702047108046510717162243828279782709421211900354532191946871259424910030546838,1.7020471080465107171622438282797827094212119003545321919468712595535332836322498 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,moderate,4099,10322096095657499356,216.130545,214.270505,214.058038,,,,Both,yes,"[1.08235892126355,3.0041494882381005e-17,-1.66763796562891e-33,9.2572503309013566e-50]",1.026732006042320468680651010947841052348239066716007904979973209646575880838089,1.0267320060423204686806510109478410523482390667160079049799732096840357908630305 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,moderate,4099,10322096095657499356,239.151308,237.292046,237.089188,,,,No,no,"[-1.1692570952148476,-3.2453403720346318e-17,1.8015258018892098e-33,-1.0000477123568495e-49]",-1.0535051702378269574281216560731222434668908310525842708385576971662323213714434,-1.0535051702378269574281216560731222434668908310525842708385576971662323258555871 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,wide_exponent,4096,10322096095657499357,219.208097,215.522484,215.016400,190.000000,25.016400,yes,Both,yes,"[1.1715709721762959e-232,3.2517626707315058e-249,-1.8050908938313547e-265,1.002026735936387e-281]",4.8931613224357677778860487132523010245820505813115565125769210140394169679151093e-78,4.8931613224357677778860487132523010245820505813115565125769210141312932532907629e-78 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,qdpp,qdreal,qdpp qd_real,qdpp nroot,wide_exponent,4096,10322096095657499357,217.030939,194.539411,177.132937,,,,NaN,no,"[-1.9945051296720195e+270,-5.5358637942371488e+253,3.0730217227754313e+237,-1.7058697358992743e+221]",-1.2587661411037758113209127815886863060159235726004011743426156158640636501525543e+90,-1.2587661411037758113209127815886863060159235726004011803352511016455806830506693e+90 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,wide_exponent,4096,10322096095657499357,215.921141,214.197213,214.065070,,,,Both,yes,"[-0.12830329361016818,-3.5611317675312609e-18,1.9768252410186431e-34,-1.097358449119536e-50]",-0.50436615390268535404089632551005127105110727672530970119929369006913042688642626,-0.50436615390268535404089632551005127105110727672530970119929369005081829876718497 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,wide_exponent,4096,10322096095657499357,238.945658,237.214089,237.018110,,,,No,no,"[-4.3275027175810356e+124,-1.2011232890466005e+108,6.6675736545651648e+91,-3.701246894841173e+75]",-351085141467799062026079474481743690346530.23735342928603100241725240364618103901,-351085141467799062026079474481743690346530.23735342928603100241725240364775086642 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,moderate,4099,10322096095657499356,219.112713,215.484839,215.004532,190.000000,25.004532,yes,Both,yes,"[-1.9786093179304824,-5.4917440537607455e-17,3.0485303469167366e-33,-1.6922742912077385e-49] ; [-3.6930721609963868,-1.0250334361850929e-16,5.6900786093166561e-33,-3.1586281419952212e-49]",4.1897108276500243736137575509880054584975437763794929781439711577595180004814865,4.1897108276500243736137575509880054584975437763794929781439711578388357929538313 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,moderate,4099,10322096095657499356,215.332826,213.212997,212.858237,,,,Both,no,"[-4.1181898278466704,-1.1430272916631208e-16,6.3450760848966547e-33,-3.5222247812253553e-49] ; [-0.29183739289082489,-8.1001148258492941e-18,4.4964669908827382e-34,-2.4960405913725049e-50]",4.1285174726612340729075027344867939797791962652739738709468541901339059552816537,4.1285174726612340729075027344867939797791962652739738709468541904799090853606315 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,moderate,4099,10322096095657499356,238.968375,237.145904,237.032531,,,,No,yes,"[4.0719252522259577,1.130186292393464e-16,-6.273794219654816e-33,3.4826553972104968e-49] ; [6.9165665963393774,1.9197328716523069e-16,-1.0656658176190808e-32,5.9156336363834818e-49]",8.0261739790084984863179315713520228190931521667884108836594047322786481436734721,8.0261739790084984863179315713520228190931521667884108836594047322786481081425252 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,wide_exponent,4096,10322096095657499357,240.757017,216.577812,213.870154,190.000000,23.870154,yes,Both,yes,"[1.7122842369183985e-262,4.7525434613238062e-279,-2.6381915881467134e-295,1.4644905222663036e-311] ; [-3.0144374372983699e-265,-8.3667446229517548e-282,4.6444762607798811e-298,-2.578202241195858e-314]",1.712286890340601098411983682624579480459337744664421226746119949951155747074881e-262,1.7122868903406010984119836826245794804593377446644212267461199567085975614133203e-262 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,wide_exponent,4096,10322096095657499357,242.048348,213.564620,212.901798,,,,Both,no,"[2.0746421074685233e-152,5.7582885889210324e-169,-3.1964922869282166e-185,1.7744096674922142e-201] ; [-7.279699168678378e-177,-2.0205224073528366e-193,1.1216152492070844e-209,-6.22621537220194e-226]",2.0746421074685233100584491712753701754641505878649616115468392385981506866084677e-152,2.0746421074685233100584491712753701754641505878649616115468392387668510326020281e-152 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,wide_exponent,4096,10322096095657499357,264.779602,237.619098,237.123492,,,,No,yes,"[-5.8206807436614042e+100,-1.6155634451512924e+84,8.9681786727485303e+67,-4.9783392257188476e+51] ; [-1.1764315868807219e+127,-3.2652535866282193e+110,1.8125798565572611e+94,-1.0061839453608174e+78]",1.1764315868807219672309501172354356665435885041612716474525928710031014683926205e+127,1.1764315868807219672309501172354356665435885041612716474525928710031014635029139e+127 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,moderate,4099,10322096095657499356,219.189484,215.451091,214.398633,180.000000,34.398633,yes,Both,yes,"[3.0788955469009238,8.5456518164631729e-17,-4.7437897035336035e-33,2.6333322764213759e-49]",0.062656038467969832209321794216397982020542964949257118477705660287113605590702679,0.062656038467969832209321794216397982020542964949257118477705660288918880291683339 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,qdpp,qdreal,qdpp qd_real,qdpp sin,moderate,4099,10322096095657499356,215.822232,210.420642,206.091602,,,,Both,no,"[6.2844284435634243,1.7442792886633375e-16,-9.6826951382541352e-33,5.3749755414579021e-49]",0.0012431360636500376406651182820591794712990979962505727492757516488097839454018745,0.0012431360636500376406651182820591794712990979962505727492757516374658267718386587 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,moderate,4099,10322096095657499356,216.111863,214.253516,214.033060,,,,Both,yes,"[-3.3942824750153715,-9.4210263896093202e-17,5.229720206672739e-33,-2.9030778928977535e-49]",0.25000926250273050053822356824913638945347894252925707129808557785874427075500306,0.25000926250273050053822356824913638945347894252925707129808557784946347821100132 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,moderate,4099,10322096095657499356,239.122689,237.223688,237.023215,,,,No,no,"[-0.2542586325750964,-7.057094702364497e-18,3.9174745127626403e-34,-2.17463520122565e-50]",-0.25152794533412479121432085191262991371979722577009702759735904083121861113384005,-0.25152794533412479121432085191262991371979722577009702759735904083121861001314106 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,argument_reduction,4104,10322096095657499353,217.652696,208.567012,202.924770,180.000000,22.924770,yes,Both,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275296757802517104071329784271370594664228509e-21,-6.8137244848422015805151924052161601275296757802517104071329778687414703031432792e-21 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,qdpp,qdreal,qdpp qd_real,qdpp sin,argument_reduction,4104,10322096095657499353,88.230225,40.279439,0.000000,,,,Both,no,"near 2^1 * pi/2 [-3.1415926535897931,-1.2249332901226919e-16,2.9947698097183397e-33,-1.1124542208633653e-49]",nan,2.8649097533874029339333136826679753341136299243487502272333149857764811341394381e-20 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,argument_reduction,4104,10322096095657499353,216.255236,214.163948,214.023450,,,,Both,yes,"near 2^38 * pi/2 [-431777206544.70459,-1.6831417444764681e-05,4.1159802853722918e-22,-1.526636448658668e-38]",2.3089903510325325006386196751055921516200574630826998306833157055830958404977762e-41,2.308990351032532500638619675105592151620057463082699830683315705496809151689719e-41 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,argument_reduction,4104,10322096095657499353,239.104262,237.214941,237.045994,,,,No,no,"near 2^17 * pi/2 [205887.41614566068,8.0276309101467462e-12,-1.9626523424970111e-28,7.2905799818501507e-45]",1.7856472546522194647219768390344687583313151766319381994892472778246360738909141e-15,1.7856472546522194647219768390344687583313151766319381994892472778246360817223464e-15 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,quadrant_boundaries,4315,10322096095657499369,229.646501,212.548934,212.379963,180.000000,32.379963,yes,Both,yes,"below random k*pi/2, exponent 29, quadrant 0, offset bits 64 [1210367998.9931121,9.2232933347751439e-08,-3.3682212462958211e-24,-1.2421712039970458e-40]",-6.5614180700763253419843351526898064698409162314387092951719910697284566769595525e-11,-6.5614180700763253419843351526898064698409162314387092951719910704945087391437157e-11 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,qdpp,qdreal,qdpp qd_real,qdpp sin,quadrant_boundaries,4315,10322096095657499369,125.341761,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,2.3958158477746717e-32,-8.8996337669069223e-49]",0,4.5377855837122526092708693051625351219021961543624546765551091357096606382618939e-65 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,quadrant_boundaries,4315,10322096095657499369,222.867917,214.285019,214.046460,,,,Both,yes,"nearest random k*pi/2, exponent 110, quadrant 0, offset bits 64 [2.3958472744262744e+33,-1.1362463713298696e+17,-1.0799874208711815,-1.4055471566517733e-17]",1.2444660859606272253391060495552887818726965386080203390531029581974118261588645e-32,1.2444660859606272253391060495552887818726965386080203390531029582431815281246263e-32 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,quadrant_boundaries,4315,10322096095657499369,245.109723,237.306997,237.025592,,,,No,no,"above random k*pi/2, exponent 45, quadrant 0, offset bits 64 [71008329207360.312,0.00018419250007644126,9.9975864273387123e-21,-5.0484480854277783e-37]",3.849369239549790973603895914004220428153380218149354682948043798834805017807928e-06,3.8493692395497909736038959140042204281533802181493546829480437988348050006850545e-06 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,moderate,4099,10322096095657499356,219.189230,215.566675,214.659688,180.000000,34.659688,yes,Both,-,"[-4.7784826804074854,-1.3262953736402309e-16,7.3624183063460464e-33,-4.086963160313565e-49]",0.066045590163581850028962366060015702301220111028377965182485758811610101682177111,0.066045590163581850028962366060015702301220111028377965182485758813198059701212943 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,qdpp,qdreal,qdpp qd_real,qdpp cos,moderate,4099,10322096095657499356,215.686188,210.052851,204.977148,,,,Both,-,"[-7.8532640731814176,-2.1797186481268875e-16,1.2099869151776452e-32,-6.7167766636269399e-49]",0.00071756073148736779053384844772211427066765802073545435213970629886211777832677292,0.00071756073148736779053384844772211427066765802073545435213970631303926297890189555 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,moderate,4099,10322096095657499356,216.120883,214.240603,214.013567,,,,Both,-,"[4.1844906090946523,1.1614294551361571e-16,-6.4472286128500595e-33,3.5789308255041227e-49]",-0.50371892599878982246573291031148002251894889016964463243380922417755824218756977,-0.50371892599878982246573291031148002251894889016964463243380922419651155550858383 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,moderate,4099,10322096095657499356,239.067815,237.245286,237.010092,,,,No,-,"[5.2397671900876901,1.4543275445277032e-16,-8.0731396264061184e-33,4.4814927471249036e-49]",0.50326950712812592968794481966604337941872165780963347935211430198430026256742876,0.50326950712812592968794481966604337941872165780963347935211430198430026030458995 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,argument_reduction,4104,10322096095657499353,232.574321,215.615638,208.674366,180.000000,28.674366,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1226611923604276e-17,1.4973849048591698e-33,-5.5622711043168264e-50]",5.7280337633839673822029261537694370705065754439038807480055172644370212115109926e-21,5.7280337633839673822029261537694370705065754439038807480055172731619522921872359e-21 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,qdpp,qdreal,qdpp qd_real,qdpp cos,argument_reduction,4104,10322096095657499353,171.117172,59.081747,0.000000,,,,Both,-,"near 2^1 * pi/2 [-3.1415926535897931,-1.2249332901226919e-16,2.9947698097183397e-33,-1.1124542208633653e-49]",nan,-0.99999999999999999999999999999999999999958961460524728650516585944623061007015234 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,argument_reduction,4104,10322096095657499353,220.717219,214.493171,214.041954,,,,Both,-,"near 2^141 * pi/2 [-4.3787410803301036e+42,-1.7069085141238271e+26,4174300709.8400016,-1.5505348827814887e-07]",-0.50223149274818510667692305468001365951868474886708229103242086146123920208083042,-0.50223149274818510667692305468001365951868474886708229103242086147976835272541265 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,argument_reduction,4104,10322096095657499353,242.372537,237.522147,237.089415,,,,No,-,"near 2^101 * pi/2 [-3.9824418129956972e+30,-155367227019273.69,0.0037963217468348336,-1.4102032608038723e-19]",-0.12796355163596045244521468824295994843174882941415195039635122541573286692737788,-0.12796355163596045244521468824295994843174882941415195039635122541573286747195671 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,quadrant_boundaries,4315,10322096095657499369,228.481158,215.246584,214.418649,180.000000,34.418649,yes,Both,-,"below random k*pi/2, exponent 17, quadrant 1, offset bits 118 [331709.77271825873,-2.2171970577571149e-11,3.7150708281135636e-28,2.3902355434839523e-45]",9.9820278769371660928200388523257556042420348105086346022094664206029498329582703e-31,9.9820278769371660928200388523257556042420348105086346022094664208865938945946123e-31 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,qdpp,qdreal,qdpp qd_real,qdpp cos,quadrant_boundaries,4315,10322096095657499369,102.159146,0.000000,0.000000,,,,Both,-,"nearest -15 * pi/2 [-23.56194490192345,8.5787174003973557e-16,1.0134821928809237e-32,-1.5011289986392192e-49]",4.7477838728798993737366211347809785771104829168099724831398899954145041153224056e-65,4.9360988814966255254518116119110190032717402209517122386947518068669726695188e-66 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,quadrant_boundaries,4315,10322096095657499369,221.152248,214.294337,214.025139,,,,Both,-,"below random k*pi/2, exponent 73, quadrant 3, offset bits 204 [-1.9192238427797983e+22,1133685.8239386391,1.0538603815339718e-10,6.0690196840656462e-27]",7.4725966267385822752552347677857979100547939987353655458257277978202160866649243e-40,7.4725966267385822752552347677857979100547939987353655458257277980991393478431325e-40 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,quadrant_boundaries,4315,10322096095657499369,243.433538,237.253610,237.015566,,,,No,-,"above random k*pi/2, exponent 100, quadrant 1, offset bits 118 [-2.554242725948489e+30,264652064691155.38,0.0027003722178381893,4.2925035746281268e-20]",7.686394611076617817566687569806359335255530534267980437190604478331327415039497e-06,7.6863946110766178175666875698063593352555305342679804371906044783313273806102253e-06 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,moderate,4099,10322096095657499356,216.913680,214.380555,213.767876,170.000000,43.767876,yes,Both,yes,"[-1.8439090508145544,-5.11787570882259e-17,2.8409917245523164e-33,-1.5770672126837562e-49]",3.5699982842328020406977403126653024345054964874710955004250341281438081184333917,3.5699982842328020406977403126653024345054964874710955004250341283030748914299905 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,qdpp,qdreal,qdpp qd_real,qdpp tan,moderate,4099,10322096095657499356,214.805664,209.359111,204.976458,,,,Both,no,"[-7.8532640731814176,-2.1797186481268875e-16,1.2099869151776452e-32,-6.7167766636269399e-49]",-1393.6099046006247994846045908683346807355130478214578999987000937844082099410509,-1393.6099046006247994846045908683346807355130478214578999987000662371041150253087 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,moderate,4099,10322096095657499356,215.950557,214.173890,214.033824,,,,Both,yes,"[-5.8190346919196703,-1.6151065740154431e-16,8.9656425284769973e-33,-4.9769313828368341e-49]",0.50062891605128433684619177292383033963900736585257698545687677483023119814763453,0.50062891605128433684619177292383033963900736585257698545687677484880560527251444 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,moderate,4099,10322096095657499356,238.986350,237.180286,237.008972,,,,No,no,"[7.7918605780474639,2.162675754604344e-16,-1.2005262087801638e-32,6.6642591932684281e-49]",16.076889102680307739918047039830552345360218572643739213205451093129248731177196,16.076889102680307739918047039830552345360218572643739213205451093129248658834938 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,argument_reduction,4104,10322096095657499353,216.861788,208.567009,202.924770,170.000000,32.924770,yes,Both,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275298339501045587830768442951450110146372361e-21,-6.8137244848422015805151924052161601275298339501045587830768437367494218513576644e-21 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,qdpp,qdreal,qdpp qd_real,qdpp tan,argument_reduction,4104,10322096095657499353,86.791809,40.279439,0.000000,,,,Both,no,"near 2^1 * pi/2 [-3.1415926535897931,-1.2249332901226919e-16,2.9947698097183397e-33,-1.1124542208633653e-49]",nan,-2.8649097533874029339333136826679753341148056414688250156538506124880451124939137e-20 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,argument_reduction,4104,10322096095657499353,216.069442,214.143677,214.023450,,,,Both,yes,"near 2^38 * pi/2 [-431777206544.70459,-1.6831417444764681e-05,4.1159802853722918e-22,-1.526636448658668e-38]",2.3089903510325325006386196751055921516200574630826998306833157055830958404977762e-41,2.308990351032532500638619675105592151620057463082699830683315705496809151689719e-41 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,argument_reduction,4104,10322096095657499353,238.931540,237.203609,237.030406,,,,No,no,"near 2^102 * pi/2 [-7.9648836259913944e+30,-310484850001344.44,0.0075916732929860228,-2.8204065216077446e-19]",-9.7020068364479704729019010913725962546149990050125552215463152474642265648020523e-07,-9.7020068364479704729019010913725962546149990050125552215463152474642265217890728e-07 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,quadrant_boundaries,4315,10322096095657499369,217.360401,212.539526,212.267358,170.000000,42.267358,yes,Both,yes,"above random k*pi/2, exponent 45, quadrant 0, offset bits 64 [74082575456598.641,0.0077401429536521011,-4.4453663865375208e-20,-1.4406648841189425e-36]",4.0160244626898690108548055606217396545568030741292099390402822024483364340948252e-06,4.0160244626898690108548055606217396545568030741292099390402822019413987321784571e-06 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,qdpp,qdreal,qdpp qd_real,qdpp tan,quadrant_boundaries,4315,10322096095657499369,36.893810,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,2.3958158477746717e-32,-8.8996337669069223e-49]",0,4.5377855837122526092708693051625351219021961543624546765551091357096606382618939e-65 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,quadrant_boundaries,4315,10322096095657499369,215.920916,214.200339,214.006668,,,,Both,yes,"above random k*pi/2, exponent 144, quadrant 2, offset bits 172 [-4.4696686901385167e+43,2.0188248772911221e+27,-52555629829.22261,1.2831941213003397e-06]",7.4664829630051754541202666277260882282154324742969316489227519401151418469649252e-09,7.4664829630051754541202666277260882282154324742969316489227519398328556104206349e-09 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,quadrant_boundaries,4315,10322096095657499369,238.947188,237.196450,237.053707,,,,No,no,"below random k*pi/2, exponent 102, quadrant 3, offset bits 204 [9.9343530058996466e+30,87688409581458.625,0.0032087146332879252,1.4984467354529784e-19]",2588058620050218384135716160595.2714079053792228534200347072058457423853626569361,2588058620050218384135716160595.2714079053792228534200347072058457423853739470342 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,near_one,4099,10322096095657499359,218.093670,215.379730,214.678988,180.000000,34.678988,yes,Both,yes,"[1.2911786355365591,3.5837406251919532e-17,-1.9893756781863299e-33,1.1043253412758746e-49]",0.91180735486029865720200031963596732813600677958830230748545472972914611914911937,0.91180735486029865720200031963596732813600677958830230748545472975077769821487466 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,qdpp,qdreal,qdpp qd_real,qdpp atan,near_one,4099,10322096095657499359,215.910399,213.068799,212.444445,,,,NaN,no,"[0.55588756341428947,1.5428979300133024e-17,-8.5648040327363084e-34,4.7544213192731213e-50]",0.50735217275163531758761222414286179663047784248280668428448483712789395698768449,0.50735217275163531758761222414286179663047784248280668428448483718453865357351711 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,near_one,4099,10322096095657499359,216.034093,214.196468,214.022743,,,,Both,yes,"[0.54921480960087321,1.5243773177100273e-17,-8.4619939816900486e-34,4.6973502763558986e-50]",0.50224017774039295847895566589446898154246751335846360124013365955899684908805543,0.50224017774039295847895566589446898154246751335846360124013365954021899193610862 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,near_one,4099,10322096095657499359,239.069181,237.249601,237.023004,,,,Inf,no,"[0.55638113561490443,1.5442678680668965e-17,-8.5724087165833602e-34,4.7586427668241172e-50]",0.50772915105953358733326116359313553998641358497921735346375362562181669630230885,0.50772915105953358733326116359313553998641358497921735346375362562181669403975783 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,moderate,4099,10322096095657499356,218.191260,215.364973,214.819019,180.000000,34.819019,yes,Both,yes,"[-1.6564773418506284,-4.5976482117311103e-17,2.5522074518952777e-33,-1.4167597383570195e-49]",-1.0276674796068157926881872460477795215568000040373694878361657581086397348641996,-1.0276674796068157926881872460477795215568000040373694878361657581307647820337298 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,qdpp,qdreal,qdpp qd_real,qdpp atan,moderate,4099,10322096095657499356,217.490429,213.839909,212.640547,,,,NaN,no,"[-0.14215205099130479,-3.9455120002058972e-18,2.1901991332817212e-34,-1.2158047531417144e-50]",-0.14120599646931357536554312007949499478728116324929113684654037846650539302747977,-0.14120599646931357536554312007949499478728116324929113684654037848026703215980269 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,moderate,4099,10322096095657499356,215.887438,214.230925,214.039595,,,,Both,yes,"[0.55778275215845952,1.5481581354627725e-17,-8.5940040387576104e-34,4.7706305787751426e-50]",0.50879880948542119345425761615829870587435545150631385296139718830959300455778602,0.50879880948542119345425761615829870587435545150631385296139718832839516313373038 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,moderate,4099,10322096095657499356,238.894314,237.221991,237.005716,,,,Inf,no,"[1.5597260113585101,4.3291093247924408e-17,-2.4031384242520164e-33,1.3340098049830031e-49]",1.0006760568417267039616046413236068242743619066341858284652430030107293262785856,1.0006760568417267039616046413236068242743619066341858284652430030107293307915712 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,near_one,4099,10322096095657499359,217.767500,215.258136,214.277602,180.000000,34.277602,yes,Both,yes,"[0.58860603672544787,1.6337099360148818e-17,-9.0689119326130649e-34,5.0342574179424254e-50] ; [0.85887750789320882,2.3838639614892877e-17,-1.3233103288097723e-33,7.3458479788444792e-50]",0.60080560244689944505254047976488516114993445003563706360562245792394141734857901,0.60080560244689944505254047976488516114993445003563706360562245794276700036835792 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,qdpp,qdreal,qdpp qd_real,qdpp atan2,near_one,4099,10322096095657499359,215.964021,212.995678,211.809679,,,,NaN,no,"[1.1174479589589783,3.1015411321416117e-17,-1.7217011883627962e-33,9.55736150422435e-50] ; [1.3143457009666371,3.6480421488256283e-17,-2.0250701942146223e-33,1.1241397780496056e-49]",0.70460629627893242601473568553458627124468553386584437351835905477710968633262149,0.7046062962789324260147356855345862712446855338658443735183590548992558624971532 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,near_one,4099,10322096095657499359,215.994476,214.132014,214.011485,,,,Both,yes,"[0.88505385327289043,2.4565179148419448e-17,-1.3636413747308533e-33,7.5697302577884725e-50] ; [0.5621158127315895,1.5601847945012334e-17,-8.6607654076266884e-34,4.8076905832121144e-50]",1.0049524547607640479472056483133780888177778504413203924398100730281741617591277,1.0049524547607640479472056483133780888177778504413203924398100730660418713400554 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,near_one,4099,10322096095657499359,239.055181,237.179498,237.044590,,,,Inf,no,"[1.2012076032854226,3.3340208463056926e-17,-1.8507533540744151e-33,1.0273744932978252e-49] ; [0.76012008050901414,2.1097570371525879e-17,-1.1711504195058775e-33,6.5011908051741811e-50]",1.0066101070031341858676864823590644902717426393400127313649714321821731001027106,1.0066101070031341858676864823590644902717426393400127313649714321821731045217664 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,moderate,4099,10322096095657499356,218.042610,215.273196,214.779064,180.000000,34.779064,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50] ; [1.7502476823940025,4.8579131894765996e-17,-2.6966835372935758e-33,1.4969600766154699e-49]",0.072148061051439749393843263001597933397921930324099767924159658763635157216424841,0.072148061051439749393843263001597933397921930324099767924159658765232080678489465 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,qdpp,qdreal,qdpp qd_real,qdpp atan2,moderate,4099,10322096095657499356,217.024402,213.404716,212.468937,,,,NaN,no,"[6.7618103531033285,1.8767793855410188e-16,-1.0418218429847463e-32,5.7832729881953999e-49] ; [7.0897074644814957,1.9677891162310489e-16,-1.0923423922232494e-32,6.0637183731018753e-49]",0.76173029626598310551501424329948959389659190646440275476402648474030549713666102,0.76173029626598310551501424329948959389659190646440275476402648482391929514145413 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,moderate,4099,10322096095657499356,215.885980,214.176678,214.024743,,,,Both,yes,"[-6.1873351720195728,-1.7173304922622958e-16,9.5330992670022754e-33,-5.2919331511315645e-49] ; [-2.9810460413895985,-8.2740648815460241e-17,4.5930286693674072e-33,-2.5496430907475705e-49]",-2.0197766333272617088389945956184684603975351443001694011101920891561200649612965,-2.0197766333272617088389945956184684603975351443001694011101920892315312586125163 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,moderate,4099,10322096095657499356,238.917136,237.174621,237.005636,,,,Inf,no,"[0.76646160167214816,2.1273582941687357e-17,-1.1809210799067136e-33,6.5554288658881889e-50] ; [6.0904320632745925,1.6904344766406877e-16,-9.3837963879333393e-33,5.2090534041389854e-49]",0.12518871466835654554530119732890413946159769433425644201628387442095021006944253,0.12518871466835654554530119732890413946159769433425644201628387442095020950481812 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,extreme_finite,8,10322096095657499351,224.796125,218.394834,218.394834,180.000000,38.394834,yes,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961510720871532843,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,qdpp,qdreal,qdpp qd_real,qdpp atan2,extreme_finite,8,10322096095657499351,0.000000,0.000000,0.000000,,,,NaN,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",nan,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,extreme_finite,8,10322096095657499351,215.343090,215.217830,215.217830,,,,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961795587903905637,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,extreme_finite,8,10322096095657499351,240.641147,237.801100,237.801100,,,,Inf,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961539081990612658,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,moderate,4099,10322096095657499356,217.555374,214.870821,214.404436,180.000000,34.404436,yes,Both,yes,"[-0.03874370615484779,-1.0753538658105852e-18,5.9694131072129129e-35,-3.313689937563487e-51]",-0.038753405574689053897038748698475312191059300104201567727902220547827930480850877,-0.038753405574689053897038748698475312191059300104201567727902220546715831868900725 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,qdpp,qdreal,qdpp qd_real,qdpp asin,moderate,4099,10322096095657499356,216.027970,212.882268,212.306181,,,,Both,no,"[0.64009750269274901,1.7766274637363827e-17,-9.8622635821076372e-34,5.4746560518890359e-50]",0.69462516701961480722974231918740821973366171540487976328936493811989540428405727,0.69462516701961480722974231918740821973366171540487976328936493820524897961929294 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,moderate,4099,10322096095657499356,215.935045,214.166642,214.033964,,,,Both,yes,"[0.84375728252726911,2.3418969056423187e-17,-1.3000139329712549e-33,7.2165270035909608e-50]",1.0042455644826932465957119672506687191893308602737032036527706880936208304894104,1.004245564482693246595711967250668719189330860273703203652770688056364795135486 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,moderate,4099,10322096095657499356,238.937265,237.164907,237.026679,,,,No,no,"[0.47970695404606045,1.3314542636368455e-17,-7.3910558986247961e-34,4.1028602174724127e-50]",0.50032069928561683298565717027151869152759847529322634267318689099093861195294037,0.50032069928561683298565717027151869152759847529322634267318689099093861417680444 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,boundary,4105,10322096095657499355,218.279597,215.666103,215.450088,180.000000,35.450088,yes,Both,yes,"[-0.9999994386132145,-2.7755560034015539e-17,1.5407430905564922e-33,-8.5528422708397013e-50]",-1.5697367166420567598613352554733454843585688705175173404668956843884396097624371,-1.5697367166420567598613352554733454843585688705175173404668956844102612619924983 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,qdpp,qdreal,qdpp qd_real,qdpp asin,boundary,4105,10322096095657499355,218.277775,215.666103,215.450088,,,,Both,no,"[-0.9999994386132145,-2.7755560034015539e-17,1.5407430905564922e-33,-8.5528422708397013e-50]",-1.5697367166420567598613352554733454843585688705175173404668956843884396097624371,-1.5697367166420567598613352554733454843585688705175173404668956844102612619924983 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,boundary,4105,10322096095657499355,216.099672,214.664889,214.650939,,,,Both,yes,"[-0.99999947688320301,-2.7755561096221099e-17,1.5407431495207457e-33,-8.5528425981570605e-50]",-1.5697734711427425137462071034426176291214099285341417990546489811401920566969057,-1.5697734711427425137462071034426176291214099285341417990546489811022198556486962 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,boundary,4105,10322096095657499355,239.101674,237.664178,237.650522,,,,No,no,"[-0.9999993776284537,-2.7755558341348399e-17,1.5407429965945906e-33,-8.5528417492463684e-50]",-1.5696806461857352124904427955206761227928221161521898973451622133707907230815616,-1.5696806461857352124904427955206761227928221161521898973451622133707907276092422 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,moderate,4099,10322096095657499356,217.952479,214.769937,210.665918,180.000000,30.665918,yes,Both,-,"[0.99887415790514178,2.7724327220233818e-17,-1.5390093211072774e-33,8.5432179170301514e-50]",0.04745636757503406782865420252660601887412863134878995249846597602032373476016398,0.047456367575034067828654202526606018874128631348789952498465976002146233476892292 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,qdpp,qdreal,qdpp qd_real,qdpp acos,moderate,4099,10322096095657499356,217.263835,213.570151,212.546937,,,,Both,-,"[0.89299145762104437,2.4785491926111579e-17,-1.3758711906514997e-33,7.6376193738986172e-50]",0.46684777086844833965955081731885474094574942061107130280412927846357664071765522,0.4668477708684483396595508173188547409457494206110713028041292785121246988832701 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,moderate,4099,10322096095657499356,215.926972,214.168270,214.013336,,,,Both,-,"[0.53747900055361064,1.4918039041678395e-17,-8.2811752131641796e-34,4.5969756963050055e-50]",1.0033516021070022662907094076805447931131779362238745906466256800975035278625521,1.0033516021070022662907094076805447931131779362238745906466256800597446123647365 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,moderate,4099,10322096095657499356,238.960587,237.176311,237.031977,,,,No,-,"[-0.43157298548501555,-1.1978556632292069e-17,6.6494346874735147e-34,-3.691177745387139e-50]",2.0170321133877162215411750564956245308378105477034926055582254990416861890253464,2.0170321133877162215411750564956245308378105477034926055582254990416861800927487 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,boundary,4105,10322096095657499355,214.108948,205.510139,192.466318,180.000000,12.466318,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863435425504615922399221269664356222070824068253018899150618e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,qdpp,qdreal,qdpp qd_real,qdpp acos,boundary,4105,10322096095657499355,217.373877,213.972745,212.999289,,,,Both,-,"[0.99999929870750148,2.7755556150851942e-17,-1.5407428749976105e-33,8.5528410742475333e-50]",0.0011843078826538607100081236986459475260528356367755210592184107363613993035457458,0.0011843078826538607100081236986459475260528356367755210592184107362713895304423971 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,boundary,4105,10322096095657499355,215.911052,214.202890,214.012410,,,,Both,-,"[0.99999951622208461,2.7755562188094402e-17,-1.5407432101318897e-33,8.5528429346164987e-50]",0.00098364419824795302810500421007198327569768241949960764096598619232602573162558328,0.00098364419824795302810500421007198327569768241949960764096598619236306677869978476 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,boundary,4105,10322096095657499355,238.914683,237.209342,237.050442,,,,No,-,"[0.9999994975875568,2.7755561670882356e-17,-1.5407431814208536e-33,8.5528427752382321e-50]",0.0010024095822028012190197504178633007438852888266898375115002944522469310012326441,0.0010024095822028012190197504178633007438852888266898375115002944522469309968498442 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,moderate,4099,10322096095657499356,217.426949,215.046491,214.489012,180.000000,34.489012,yes,Both,-,"[7.2668058682815229,2.0169437976118373e-16,-1.1196287217417818e-32,6.2151879295467938e-49]",1431.9692420599845796068868376110150600143493093499559422817931161935390354934173,1431.969242059984579606886837611015060014349309349955942281793116154785851743886 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,qdpp,qdreal,qdpp qd_real,qdpp exp,moderate,4099,10322096095657499356,217.181000,214.662285,213.965214,,,,Both,-,"[7.2613602585082351,2.0154323372734803e-16,-1.118789692707556e-32,6.2105303827861612e-49]",1424.1924901565322249615420147030581519801331801363157732704846149025457025018372,1424.1924901565322249615420147030581519801331801363157732704846148471314937641764 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,moderate,4099,10322096095657499356,215.924822,214.186790,214.006279,,,,Both,-,"[3.4699495991506186,9.6310448481646233e-17,-5.3463038708149298e-33,2.9677948270106668e-49]",32.135122766454513464552390234864268716902997252088065619897983850263564532528178,32.135122766454513464552390234864268716902997252088065619897983849048300268542509 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,moderate,4099,10322096095657499356,238.962861,237.190217,237.015623,,,,No,-,"[-7.6245813926123454,-2.1162464538016916e-16,1.1747527693959878e-32,-6.5211878641279631e-49]",0.00048829960656918900534550546413689941129718423073002179902260395749341738412942277,0.00048829960656918900534550546413689941129718423073002179902260395749341738194229393 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,boundary,4099,10322096095657499291,216.095013,210.609597,209.170810,180.000000,29.170810,yes,Both,-,"[-602.51463003262006,-1.6723140373393066e-14,9.2832077432897595e-31,-5.1532154894894153e-47]",2.1439808940678330986168374863027594170304621312385699060007346626494830473999428e-262,2.1439808940678330986168374863027594170304621312385699060007348382095786861640128e-262 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,qdpp,qdreal,qdpp qd_real,qdpp exp,boundary,4099,10322096095657499291,215.994830,210.542771,209.170810,,,,Both,-,"[-602.51463003262006,-1.6723140373393066e-14,9.2832077432897595e-31,-5.1532154894894153e-47]",2.1439808940678330986168374863027594170304621312385699060007346626494830473999428e-262,2.1439808940678330986168374863027594170304621312385699060007348382095786861640128e-262 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,boundary,4099,10322096095657499291,215.925953,214.166296,214.022891,,,,Both,-,"[-213.48363419693817,-5.9253611516523799e-15,3.289236189891953e-31,-1.8258928757241849e-47]",1.9285712648723698827364885753401467489945482612892346646561462430777724772501659e-93,1.9285712648723698827364885753401467489945482612892346646561462431498708742994428e-93 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,boundary,4099,10322096095657499291,238.944656,237.149815,237.004890,,,,No,-,"[-1.3839315575301043,-3.8411816991881907e-17,2.1322841821037556e-33,-1.1836554970078048e-49]",0.25059139930250338491880855140531431523927782048990968130858850759821856519740631,0.2505913993025033849188085514053143152392778204899096813085885075982185663282049 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,moderate,4099,10322096095657499356,218.020692,214.999773,214.215827,180.000000,34.215827,yes,Both,-,"[3.1052035729833225,8.6186712571859683e-17,-4.7843236357014531e-33,2.6558331288070464e-49]",8.6051692793502790320283451340709447945359060261526288089250361316953685910209515,8.6051692793502790320283451340709447945359060261526288089250361314139388957083351 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,moderate,4099,10322096095657499356,215.951076,214.175518,214.035382,,,,Both,-,"[7.0184440832206558,1.9480095545589426e-16,-1.0813625298305666e-32,6.0027678929240134e-49]",129.6469164692491677500327633275603595045395867946892632855310581663474322548835,129.6469164692491677500327633275603595045395867946892632855310581615424462315035 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,moderate,4099,10322096095657499356,238.939517,237.174822,237.050228,,,,No,-,"[1.0265636690801578,2.8492865541411778e-17,-1.5816717680812041e-33,8.7800420716166679e-50]",2.0371661763637205453633549726338999372030557043909456864394369311660295529176797,2.0371661763637205453633549726338999372030557043909456864394369311660295618260332 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,boundary,4099,10322096095657499291,218.040030,214.973213,214.202868,180.000000,34.202868,yes,Both,-,"[104.10886087905146,2.8896013603855037e-15,-1.6040509811440805e-31,8.9042716596936548e-48]",21872072611204943785318953704535.848957757329524240581979950526538377674145297079,21872072611204943785318953704535.848957757329524240581979950526537655899871393765 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,boundary,4099,10322096095657499291,215.997580,214.178351,214.040135,,,,Both,-,"[101.01867420310816,2.8038314504349505e-15,-1.5564391167205152e-31,8.6399727190517872e-48]",2568331375911613125415057676345.8059016688827604346296714291621286371854710902734,2568331375911613125415057676345.8059016688827604346296714291621287320601044697817 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,boundary,4099,10322096095657499291,238.956490,237.176073,237.026426,,,,No,-,"[-183.99722039427581,-5.1069487637188608e-15,2.8349260515308288e-31,-1.5737000877596046e-47]",4.0861804585463969756716858253333793248054096194328922530438741816953664456998308e-56,4.0861804585463969756716858253333793248054096194328922530438741816953664638655892e-56 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,moderate,4099,10322096095657499356,218.319190,214.883150,213.793932,180.000000,33.793932,yes,Both,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.69414327255271665612631015596788634386741426622153124768599904822325391377881959,0.69414327255271665612631015596788634386741426622153124768599904819284068360567441 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,qdpp,qdreal,qdpp qd_real,qdpp expm1,moderate,4099,10322096095657499356,218.078857,214.447716,0.000000,,,,NaN,no,"midpoint [0,0,0,0]",1,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,moderate,4099,10322096095657499356,216.131673,214.242848,214.018319,,,,Both,yes,"[3.4965342970959128,9.70483220756855e-17,-5.3872640834831953e-33,2.9905323126095925e-49]",32.000882287565481685038228589636231258591535037593573530748202339964185962910206,32.000882287565481685038228589636231258591535037593573530748202341164316010951542 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,moderate,4099,10322096095657499356,239.116206,237.239921,237.036552,,,,No,no,"[6.9511685393403209,1.9293368401064106e-16,-1.0709970910718406e-32,5.9452281490726156e-49]",1043.369402155250824878423084038542130172916017601225886298348705509618197426875,1043.3694021552508248784230840385421301729160176012258862983487055096181928208548 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,cancellation,4098,10322096095657499336,235.991871,207.540568,207.000000,180.000000,27.000000,yes,Both,yes,"[3.6665372155917779e-270,1.0176685093487508e-286,-5.6491950525747228e-303,3.1359334672835601e-319]",3.666537215591778022742232576640266061184048842008439989892382592756081591049904e-270,3.6665372155917780227422325766402660611840488420084399108418792581566345227988971e-270 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,qdpp,qdreal,qdpp qd_real,qdpp expm1,cancellation,4098,10322096095657499336,235.502017,203.377948,203.000000,,,,NaN,no,"[-3.8216415740076992e-266,-1.0607186168320179e-282,5.8881711552772772e-299,-3.2685915951514981e-315]",-3.8216415740076992733056703378630837378959866245250661120987138937707022352653822e-266,-3.8216415740076992733056703378630837378959866245250661119722330884353431199561806e-266 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,cancellation,4098,10322096095657499336,238.867803,214.409929,214.038287,,,,Both,yes,"[-6.7120113773945228e-52,-1.8629573931823525e-68,1.0341490959033542e-84,-5.740680685835965e-101]",-6.712011377394522981785014978692529479776471498143080594571376035118230062021051e-52,-6.7120113773945229817850149786925294797764714981430805945713760353664908412007537e-52 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,cancellation,4098,10322096095657499336,261.143186,237.455118,237.087032,,,,No,no,"[-3.8952556529180725e-40,-1.0811506281677353e-56,6.0015916023988555e-73,-3.3315525906900986e-89]",-3.895255652918072567680506372460482734240287686521220025487368643809197114855518e-40,-3.8952556529180725676805063724604827342402876865212200254873686438091971314600946e-40 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,near_one,4099,10322096095657499359,216.923081,214.333783,213.252927,180.000000,33.252927,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.50793426433422243038604118757996243390013385433953431736902408052282282785799521,-0.50793426433422243038604118757996243390013385433953431736902408049044259492262108 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,qdpp,qdreal,qdpp qd_real,qdpp log,near_one,4099,10322096095657499359,216.097706,213.556747,212.796028,,,,NaN,-,"[0.7578891991068335,2.1035650974078154e-17,1.1677132024700085e-33,6.482110417704903e-50]",-0.27721807934521893908377034905020168741393642765964464430318387797707794414705589,-0.27721807934521893908377034905020168741393642765964464430318387795282110993453761 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,near_one,4099,10322096095657499359,215.950049,214.169987,214.022652,,,,Both,-,"[1.2874823082863105,3.5734812561425147e-17,1.9836805843179232e-33,1.1011639291058213e-49]",0.25268861232449768303287208416041654713719635429237966672910076356984301208098884,0.25268861232449768303287208416041654713719635429237966672910076357929117870962672 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,near_one,4099,10322096095657499359,238.922548,237.172288,237.020732,,,,No,-,"[1.2848264058251369,3.5661096459836307e-17,1.9795885186544464e-33,1.0988923763468863e-49]",0.25062361647825247046091044906137751740083075171705262981159748405128009249095062,0.25062361647825247046091044906137751740083075171705262981159748405128009360954388 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,wide_exponent,4096,10322096095657499357,218.159247,215.423349,214.787811,180.000000,34.787811,yes,Both,-,"[2.1976393587320462e-253,6.0996745397169545e-270,3.3859995583568084e-286,1.87960733552917e-302]",-581.7666447619842216491153422494362059260947919882070310469834418271313947370462,-581.76664476198422164911534224943620592609479198820703104698344181433242395383818 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,qdpp,qdreal,qdpp qd_real,qdpp log,wide_exponent,4096,10322096095657499357,219.255712,199.107344,184.191528,,,,NaN,-,"[6.1941168219656166e+270,1.7192127782410573e+254,9.5435480531650256e+237,5.2977333926201995e+221]",623.5215750502701087336668881116208641367037489131122664283865236932076156210452,623.52157505027010873366688811162086413670374891311226645065428228814692593934518 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,wide_exponent,4096,10322096095657499357,215.922997,214.161037,214.024145,,,,Both,-,"[4.2620000526591127e+112,1.1829426473539441e+96,6.5666508195169289e+79,3.6452234672506739e+63]",259.33926896136503531476005673839606499505614715572250820030983367844490106121051,259.33926896136503531476005673839606499505614715572250820030983366875809051992411 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,wide_exponent,4096,10322096095657499357,238.891947,237.168312,237.029110,,,,No,-,"[4.0479342938723756e-223,1.1235274638067215e-239,6.2368302955846473e-256,3.4621362974188981e-272]",-512.07826903756965473896626715773821631241155436371017077009210067703398041970383,-512.07826903756965473896626715773821631241155436371017077009210067703398269199759 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,extreme_finite,4096,10322096095657499354,218.246513,215.340501,214.977417,180.000000,34.977417,yes,Both,-,"[6.7255270714277703e+270,1.8667087518597276e+254,1.0362315182919788e+238,5.7522404522501946e+221]",623.60388540574258032454540371734224443628132982427335034944077135074873546872386,623.60388540574258032454540371734224443628132982427335034944077133871895125605538 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,qdpp,qdreal,qdpp qd_real,qdpp log,extreme_finite,4096,10322096095657499354,180.392114,62.810233,62.111566,,,,NaN,-,"[2.0692595686432232e+307,5.7433490425840649e+290,3.1881991727678388e+274,1.769806064348866e+258]",707.62081439615309724005581230988869119948049708436728413621701957433309522732175,707.62081439615309738207797959699229331682919993647949675782301967304550141694433 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,extreme_finite,4096,10322096095657499354,215.741355,214.353327,214.285392,,,,Both,-,"[1.0075597185049971e-271,2.7965399954227229e-288,1.5523915461017184e-304,8.6165048634713397e-321]",-623.99302891435394122737400533549424989714640717618230616015013795393555869980229,-623.99302891435394122737400533549424989714640717618230616015013793448871373169198 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,extreme_finite,4096,10322096095657499354,238.776105,237.339073,237.285267,,,,No,-,"[7.7437783365788433e+270,2.1493302517158317e+254,1.1931179664891499e+238,6.6231351874510007e+221]",623.74486483406474436961766281025043784462223397426216741261126488422867258269335,623.74486483406474436961766281025043784462223397426216741261126488422867490021597 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,near_one,4099,10322096095657499359,216.831239,214.285380,213.192358,180.000000,33.192358,yes,Both,-,"[0.7496369857674211,2.0806606042739792e-17,1.1549986546477316e-33,6.4115304990049557e-50]",-0.41573596010411493045014267590719729760119796965409081364143571035067957416967793,-0.41573596010411493045014267590719729760119796965409081364143571037831861478590789 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,near_one,4099,10322096095657499359,216.011174,214.194225,214.010454,,,,Both,-,"[0.84070967041985378,2.3334380828128714e-17,1.2953183430380163e-33,7.1904612433005627e-50]",-0.2503204268218643143737732495500269147452501235616383620107211692911966773483109,-0.25032042682186431437377324955002691474525012356163836201072116930063577090736059 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,near_one,4099,10322096095657499359,239.011917,237.187476,237.019864,,,,No,-,"[0.70583601885804559,1.959088499364896e-17,1.087512579636627e-33,6.036907527410412e-50]",-0.50259504206925858952155266234103500116929985813117258806089289885593823424307108,-0.50259504206925858952155266234103500116929985813117258806089289885593823648762265 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,wide_exponent,4096,10322096095657499357,217.896906,215.177253,214.398808,180.000000,34.398808,yes,Both,-,"[1.7649452349949291e+168,4.8987070927345696e+151,2.7193287026242405e+135,1.5095306685887436e+119]",558.90354335945887268941714779171120602057251916893271728873264701130834705779937,558.90354335945887268941714779171120602057251916893271728873264699520691310276205 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,wide_exponent,4096,10322096095657499357,215.991634,214.211323,214.021430,,,,Both,-,"[6.4253617293081178e+155,1.7833961333557962e+139,9.8998372463954056e+122,5.4955136254949441e+106]",517.58263238369809866937110146938845548682933182383309502125833012837118648537698,517.58263238369809866937110146938845548682933182383309502125833014774029382250725 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,wide_exponent,4096,10322096095657499357,238.962302,237.188437,237.038715,,,,No,-,"[3.5891513914548225e-156,9.9618962841464057e-173,5.5299633117935652e-189,3.0697462970427998e-205]",-516.3771400246925614573224211990488725433698671805238582152642425975984165061167,-516.37714002469256145732242119904887254336986718052385821526424259759841422995179 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,extreme_finite,4096,10322096095657499354,221.112240,215.319712,214.786513,180.000000,34.786513,yes,Both,-,"[6.8101574227838104e+300,1.8901983930241257e+284,1.0492708885224276e+268,5.8246234975324753e+251]",999.34611661399737932538483694865739304704641025692614772050877622807059417985481,999.34611661399737932538483694865739304704641025692614772050877625007617254075152 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,extreme_finite,4096,10322096095657499354,219.971377,214.877327,214.815152,,,,Both,-,"[1.1004277016223889e-271,3.0543004281912948e-288,1.695477329750225e-304,9.4119505532757467e-321]",-900.10444935156029673708481095997044639503503777325192083508132873842538505530364,-900.10444935156029673708481095997044639503503777325192083508132875785609939278478 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,extreme_finite,4096,10322096095657499354,242.986721,237.879178,237.813342,,,,No,-,"[5.3028389146690505e+270,1.4718334647359639e+254,8.1703170048184277e+237,4.5354370286179322e+221]",899.32735054371464126504766215010086793763896785913590289802765629264265015706112,899.32735054371464126504766215010086793763896785913590289802765629264264783983466 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,near_one,4099,10322096095657499359,216.850749,214.245682,213.257193,180.000000,33.257193,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.22059304816994049352958242449187881883781348866027603462218270842444120257078286,-0.2205930481699404935295824244918788188378134886602760346221827084104201683981848 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,qdpp,qdreal,qdpp qd_real,qdpp log10,near_one,4099,10322096095657499359,215.719253,213.279982,212.669210,,,,NaN,-,"[1.3015859464676423,3.6126267157422572e-17,2.0054106795965072e-33,1.1132265551586125e-49]",0.11447285077352897129228038687318627560357562795876254689499109361157840237707265,0.11447285077352897129228038687318627560357562795876254689499109362251522127743891 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,near_one,4099,10322096095657499359,215.948509,214.160208,214.004904,,,,Both,-,"[1.1548157158417363,3.2052574923161943e-17,1.7792753339108649e-33,9.8769622142772787e-50]",0.062512685545452607071551872862036252686540209936771988439097880251720697483459773,0.06251268554545260707155187286203625268654020993677198843909788025408701452391967 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,near_one,4099,10322096095657499359,238.958266,237.152635,237.019945,,,,No,-,"[0.7495965567981705,2.0805483913426695e-17,1.1549363639577312e-33,6.4111847162136648e-50]",-0.12517241700686969827684919239182967493738565725808191459997705897873585882208558,-0.12517241700686969827684919239182967493738565725808191459997705897873585938106475 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,wide_exponent,4096,10322096095657499357,217.861615,215.189987,214.497524,180.000000,34.497524,yes,Both,-,"[7.1469640060920858e+234,1.9836809989326703e+218,1.1011641592632406e+202,6.1126890175302627e+185]",234.85412159489045596003203173344408775668279869668572611682025536536168793387694,234.85412159489045596003203173344408775668279869668572611682025535904325560762789 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,qdpp,qdreal,qdpp qd_real,qdpp log10,wide_exponent,4096,10322096095657499357,216.146486,199.107329,184.191528,,,,NaN,-,"[6.1941168219656166e+270,1.7192127782410573e+254,9.5435480531650256e+237,5.2977333926201995e+221]",270.7919793919566080263684500401559424740271360630749430077038846639044219806195,270.79197939195660802636845004015594247402713606307494301737464934190119361366392 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,wide_exponent,4096,10322096095657499357,215.969447,214.155173,214.015352,,,,Both,-,"[10.021612533904657,2.7815562447532518e-16,1.5440738936074737e-32,8.571331942028158e-49]",1.0009376075822620669594461139776613372841714757547811188893586984207809467928981,1.000937607582262066959446113977661337284171475754781118889358698383165469979518 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,wide_exponent,4096,10322096095657499357,239.002817,237.144835,237.026072,,,,No,-,"[1.1120370415213245e-260,3.0865228193325391e-277,1.7133643500269686e-293,9.5110827548592716e-310]",-259.95388074633275189091615220567999501526078782561121881855869444663541118363614,-259.95388074633275189091615220567999501526078782561121881855869444663541233958603 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,extreme_finite,4096,10322096095657499354,217.633514,215.073798,214.220407,180.000000,34.220407,yes,Both,-,"[5.3758239790954964e+270,1.4920908894809616e+254,8.2827683016759667e+237,4.5978600380780314e+221]",270.73044504015011560346372915336203436416099326519770095672238014262874150583956,270.73044504015011560346372915336203436416099326519770095672238013380264152658546 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,qdpp,qdreal,qdpp qd_real,qdpp log10,extreme_finite,4096,10322096095657499354,177.687467,62.810233,62.111566,,,,NaN,-,"[2.0692595686432232e+307,5.7433490425840649e+290,3.1881991727678388e+274,1.769806064348866e+258]",307.31581497213443164971813415260041474420416695525066441349261749779552504427444,307.31581497213443171139757771333003378803932535505324592940109703546184779321739 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,extreme_finite,4096,10322096095657499354,215.774631,214.144149,214.083242,,,,Both,-,"[1.0704536782707779e-271,2.9711058010272682e-288,1.6492950344489211e-304,9.1550364174382985e-321]",-270.97043212118285841925561066273687400765354325005690405748633653277437492999232,-270.97043212118285841925561066273687400765354325005690405748633652305933528126596 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,extreme_finite,4096,10322096095657499354,238.568974,237.128968,237.082099,,,,No,-,"[7.3799185819446756e+270,2.0483388823835035e+254,1.137056494728563e+238,6.3119315037361179e+221]",270.86805157054835280159779316282272669037880739803758696775863651413772687711934,270.86805157054835280159779316282272669037880739803758696775863651413772803572193 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,moderate,4099,10322096095657499356,217.570462,214.787129,214.020088,180.000000,34.020088,yes,Both,yes,"[-0.25462100474624672,-7.0671525505618592e-18,3.9230577400860884e-34,-2.1777345149887542e-50]",-0.29386247149453246058352428487213904837677656724718288204078215844233971612393252,-0.29386247149453246058352428487213904837677656724718288204078215843133248548523474 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,qdpp,qdreal,qdpp qd_real,qdpp log1p,moderate,4099,10322096095657499356,217.192093,214.092522,213.044815,,,,NaN,no,"[0.63529998410703725,1.7633116747490719e-17,-9.7883461044838246e-34,5.4336236090989502e-50]",0.4918262640375245274757241097327722059938982066786883208516416152176455627804291,0.49182626403752452747572410973277220599389820667868832085164161525386419144512343 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,moderate,4099,10322096095657499356,215.916477,214.139415,214.010728,,,,Both,yes,"[6.41522527712225,1.7805827027046056e-16,-9.8842195689597157e-33,5.4868440729548083e-49]",2.0035353563990952644690935484747843529003715927775366089476216527818344375259587,2.003535356399095264469093548474784352900371592777536608947621652706299381724742 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,moderate,4099,10322096095657499356,238.982401,237.123379,237.006206,,,,No,no,"[1.7276029251355596,4.7950613622381721e-17,-2.6617937644236434e-33,1.4775923620333994e-49]",1.0034231740848004098518884695801641614754221665384765735216332616039977910239888,1.0034231740848004098518884695801641614754221665384765735216332616039977865001517 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,cancellation,4098,10322096095657499336,236.076178,207.415037,207.000000,180.000000,27.000000,yes,Both,yes,"[-5.0621342944708729e-265,-1.4050245118665463e-281,7.7994528161848061e-298,-4.3295660482073704e-314]",-5.0621342944708730086760504274075663829189583933818324664504818055859676107573498e-265,-5.0621342944708730086760504274075663829189583933818324664512723106193136052280323e-265 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,qdpp,qdreal,qdpp qd_real,qdpp log1p,cancellation,4098,10322096095657499336,235.591825,203.445411,203.000000,,,,NaN,no,"[3.8562355730696869e-262,1.0703203804001379e-278,-5.9414716502289462e-295,3.2981793131207609e-311]",3.8562355730696870232090014097598983536869063470484289063758982684620955043081289e-262,3.8562355730696870232090014097598983536869063470484289063759109165426290402196599e-262 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,cancellation,4098,10322096095657499336,238.872001,214.422148,214.038287,,,,Both,yes,"[-6.7120113773945228e-52,-1.8629573931823525e-68,1.0341490959033542e-84,-5.740680685835965e-101]",-6.7120113773945229817850149786925294797764714981430850996810490629669129817421558e-52,-6.7120113773945229817850149786925294797764714981430850996810490627186522025624531e-52 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,cancellation,4098,10322096095657499336,261.132145,237.419995,237.015621,,,,No,no,"[-9.7261871007756405e-35,-2.6995592152733285e-51,1.4985563985677344e-67,-8.3186590869462584e-84]",-9.7261871007756407664559632195888426285653472784067580211618203539513215255828672e-35,-9.7261871007756407664559632195888426285653472784067580211618203539513214820185222e-35 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,near_one,4099,10322096095657499359,218.148772,215.130203,214.362894,180.000000,34.362894,yes,Both,yes,"[1.423134563497126,3.9499918988359527e-17,2.1926859765852584e-33,1.2171852284888254e-49] ; [1.1927685344842596,3.310597725082075e-17,1.8377509098288919e-33,1.0201566868089328e-49]",1.5233053480043329261431287201279001410110702760486984367539772844096336550706452,1.5233053480043329261431287201279001410110702760486984367539772843646426383376926 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,qdpp,qdreal,qdpp qd_real,qdpp pow,near_one,4099,10322096095657499359,217.609332,214.478940,213.884045,,,,No,no,"[0.56465331452162981,1.5672277767820592e-17,8.6998618130776872e-34,4.8293934479680041e-50] ; [1.308724409763804,3.6324399315218581e-17,2.0164092237716969e-33,1.1193319736489387e-49]",0.47331567754885921919725130297346743650975597253860946110241115439086285093499742,0.47331567754885921919725130297346743650975597253860946110241115437138066828954228 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,near_one,4099,10322096095657499359,215.924402,214.174611,214.034283,,,,Both,yes,"[1.0020188856745866,2.7811610949629213e-17,1.5438545414097733e-33,8.5701142927262127e-50] ; [0.67487318784050987,1.8731493796067807e-17,1.0398067849008878e-33,5.772087168792116e-50]",1.0013620450437589245492610014243773686942214248275520503466520165881255161776408,1.001362045043758924549261001424377368694221424827552050346652016550984655411922 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,near_one,4099,10322096095657499359,238.916883,237.150631,237.018583,,,,No,no,"[1.0001982067740443,2.7761076958733429e-17,1.5410493413988385e-33,8.5545423045221195e-50] ; [0.76444938074723401,2.1217732591650551e-17,1.1778207626795018e-33,6.5382186480417261e-50]",1.0001515155089267348056115423971138300622949553626290284157870717867518582721827,1.0001515155089267348056115423971138300622949553626290284157870717867518627427509 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,moderate,4099,10322096095657499356,215.525556,212.047897,211.143117,180.000000,31.143117,yes,Both,yes,"[7.7504743381693961,2.1511887655005213e-16,1.1941496488868227e-32,6.6288621752109849e-49] ; [6.7867863554598733,1.8837116187608508e-16,1.0456700054511108e-32,5.8046345810586807e-49]",1085628.0458183651737754568233825992695775685017622680386092038233740053608370142,1085628.0458183651737754568233825992695775685017622680386092038236727288616449863 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,qdpp,qdreal,qdpp qd_real,qdpp pow,moderate,4099,10322096095657499356,215.118656,211.658837,210.563451,,,,No,no,"[3.9373570792794448,1.0928361213967244e-16,6.0664591205834804e-33,3.3675612968095294e-49] ; [6.6779325302611943,1.853498612997327e-16,1.0288984181302124e-32,5.7115335690428171e-49]",9434.9046319695249985422135793070845456275754612092834675473473550955018842531657,9434.9046319695249985422135793070845456275754612092834675473473512155814273180929 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,moderate,4099,10322096095657499356,215.935138,214.172189,214.028310,,,,Both,yes,"[2.5648686096017479,7.1189404637954309e-17,3.951805806920689e-33,2.1936928978453724e-49] ; [7.3758515152288862,2.0472100446058645e-16,1.1364298638826622e-32,6.3084530037708211e-49]",1040.4078088056214822957453194310414746378121362243328657421409210248312127986565,1040.4078088056214822957453194310414746378121362243328657421409210635803831145731 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,moderate,4099,10322096095657499356,238.932191,237.171612,237.009078,,,,No,no,"[0.7371316742375349,2.0459513922975039e-17,1.1357311714962925e-33,6.3045744818984312e-50] ; [2.2636267388646147,6.2828263116116299e-17,3.48766921543599e-33,1.9360453326266958e-49]",0.50138517166343568386581893387404724257046263632975310595489929845043169244947956,0.5013851716634356838658189338740472425704626363297531059548992984504316901935288 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,moderate,4099,10322096095657499356,217.158561,214.415804,213.656994,190.000000,23.656994,yes,Both,no,"[-5.6684636004037738,-1.5733147008544706e-16,8.7336510293493687e-33,-4.848150230912434e-49]",-188043.1576659602046428792992413117498177671151403368538232084353655121126605512,-188043.15766596020464287929924131174981776711514033685382320843537457138843934032 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,qdpp,qdreal,qdpp qd_real,qdpp npwr,moderate,4099,10322096095657499356,215.059104,212.801524,212.059765,,,,Both,no,"[-1.6564773418506284,-4.5976482117311103e-17,2.5522074518952777e-33,-1.4167597383570195e-49]",-34.22145718343254248282859373100912991782148871976998320056340727210943023192857,-34.221457183432542482828593731009129917821488719769983200563407277097680277445128 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",moderate,4099,10322096095657499356,215.987832,214.179832,214.020519,,,,Both,yes,"[-3.6234270472721093,-1.0057030339827603e-16,5.5827733213151837e-33,-3.0990617412935871e-49]",-8200.430509244412297875363007517859232142760219202884340409240903826050512248695,-8200.430509244412297875363007517859232142760219202884340409240904133122939385402 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,wide_exponent,4096,10322096095657499357,217.192977,214.383216,213.812882,190.000000,23.812882,yes,Both,no,"[3156983632.9860682,8.7623897942647695e-08,-4.8641034501666178e-24,2.7001198222668209e-40]",3125405070844307632059635814309662493597686949184087401837672866916,3125405070844307632059635814309662493597686949184087401837672867051.1497698219492 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,qdpp,qdreal,qdpp qd_real,qdpp npwr,wide_exponent,4096,10322096095657499357,215.034925,212.773859,212.051585,,,,Both,no,"[-9.5596245569648417e-08,-2.6533288224786072e-24,1.4728933753086521e-40,-8.1762006904276382e-57]",-7.2960172719911353618163838397248732636061880909367939710334008019108463679922758e-50,-7.2960172719911353618163838397248732636061880909367939710334008029803890701495117e-50 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",wide_exponent,4096,10322096095657499357,215.949957,214.206986,214.011863,,,,Both,yes,"[14787987098817744,0.41044909412418074,-2.2784501736660175e-17,1.2647939216325996e-33]",1.5465481333355751493406420880783518941005745731747866016820925042744984697072011e+113,1.5465481333355751493406420880783518941005745731747866016820925043327588542346558e+113 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,qdpp,qdreal,qdpp qd_real,qdpp fmod,moderate,4099,10322096095657499356,242.308487,211.105419,205.498921,,,,NaN,no,"[7.1899788224367311,1.9956200088091322e-16,1.1077916410912782e-32,6.1494789321341235e-49] ; [0.17529801831962688,4.8654974027403064e-18,2.7008936213880932e-34,1.4992971427641406e-50]",0.00276007133202904605284920081045968802292893049314657639401489600084294546258242,0.002760071332029046052849200810459688022928930493146576394014895962860674479543225 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,qdpp,qdreal,qdpp qd_real,qdpp fmod,wide_exponent,4096,10322096095657499357,157.385566,0.000000,0.000000,,,,NaN,no,"[1.2347084998878686e+21,34270.045131897481,1.9023696580187922e-12,1.0560272978403741e-28] ; [3.0778362709487343e-89,8.5427117350842915e-106,4.7421576305130505e-122,2.6324262938987323e-138]",0,1.4962362985274997261929338086936228014751652950478652582390850983028923547154329e-89 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,quotient_reduction,4,10322096095657499383,237.431134,217.724535,217.724535,190.000000,27.724535,yes,Both,yes,"scaled-reduction gap 58 lhs [5.4783870128486342e+104,1.2515701024950248e+86,2.5644796350277343e+70,3.0488942297143002e+54] ; scaled-reduction gap 58 rhs [1.0992042367473471e+87,7.6430960252403863e+68,8.308036160429468e+52,-8.4044243641695015e+36]",8.2176097775156019844573783110329841337664065872688377479267466170896765365317513e+86,8.217609777515601984457378311032984133766406587268837747926746617066064704117403e+86 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,qdpp,qdreal,qdpp qd_real,qdpp fmod,quotient_reduction,4,10322096095657499383,123.173400,0.000000,0.000000,,,,NaN,no,"maximum binary64 below 2^900 [8.452712498170643e+270,0,0,0] ; negative double divisor [-7.5,0,0,0]",2.5082282550565593277172994055176394775153826727023953721515087619155560275540737e+204,0.5 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,quotient_reduction,4,10322096095657499383,inf,inf,inf,,,,Both,yes,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,6.4695626425683503e-14,-4.5490848564960626e-30] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,-1.0491094474424749e-30,9.613833942740628e-48]",134.96799785736252690998070323801097276000000000069696182420374612820625148544072,134.96799785736252690998070323801097276000000000069696182420374612820625148544072 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,quotient_reduction,4,10322096095657499383,inf,inf,inf,,,,No,no,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,6.4695626425683503e-14,-4.5490848564960626e-30] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,-1.0491094474424749e-30,9.613833942740628e-48]",134.96799785736252690998070323801097275999999999972664787995535221851974311276988,134.96799785736252690998070323801097275999999999972664787995535221851974311276988 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,qdpp,qdreal,qdpp qd_real,qdpp drem,moderate,4099,10322096095657499356,241.943486,210.446918,205.498921,,,,NaN,no,"[7.1899788224367311,1.9956200088091322e-16,1.1077916410912782e-32,6.1494789321341235e-49] ; [0.17529801831962688,4.8654974027403064e-18,2.7008936213880932e-34,1.4992971427641406e-50]",0.00276007133202904605284920081045968802292893049314657639401489600084294546258242,0.002760071332029046052849200810459688022928930493146576394014895962860674479543225 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remainder,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,tlfloat,tloct,TLFloat Octuple,tlfloat::remainder,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,near_one,4099,10322096095657499359,217.088527,214.653889,213.844482,180.000000,33.844482,yes,Both,yes,"[0.76562636076402268,2.1250400349504614e-17,-1.1796341875261248e-33,6.5482851781324668e-50]",0.84264914336815803011264269143612462086913967383298160440244808238970820494154117,0.84264914336815803011264269143612462086913967383298160440244808235405953256955333 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,qdpp,qdreal,qdpp qd_real,qdpp sinh,near_one,4099,10322096095657499359,216.789555,214.156966,212.946933,,,,NaN,no,"[0.53019894096351738,1.4715976797239277e-17,-8.1690081350723071e-34,4.534710459953743e-50]",0.55539122289270886779105567524999850401374993402945589954958343593492898173560863,0.55539122289270886779105567524999850401374993402945589954958343589115814564205908 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,near_one,4099,10322096095657499359,215.975034,214.162104,214.012511,,,,Both,yes,"[1.4504430962981512,4.0257883035470264e-17,-2.2347614334322787e-33,1.2405417989704175e-49]",2.0152687650487900870785030962782558225880631209188005099886950034018742263533812,2.0152687650487900870785030962782558225880631209188005099886950033259906440226229 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,near_one,4099,10322096095657499359,238.935804,237.151916,237.012513,,,,No,no,"[0.88298360331457626,2.4507718169158206e-17,-1.3604516496211864e-33,7.5520237264935862e-50]",1.0022782039402745822682661730648698672338759932522803568394909240974045054810381,1.0022782039402745822682661730648698672338759932522803568394909240974045099800009 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,moderate,4099,10322096095657499356,216.956723,214.597984,213.993459,180.000000,33.993459,yes,Both,yes,"[0.054297296667996875,1.5070527233928231e-18,-8.3658231641737974e-35,4.6439647484041155e-51]",0.054323980450469496887448171808625498827811228200332436943033541994792104072246549,0.054323980450469496887448171808625498827811228200332436943033541996864828986916269 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,qdpp,qdreal,qdpp qd_real,qdpp sinh,moderate,4099,10322096095657499356,216.768952,214.332225,213.240650,,,,NaN,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50]",-0.37418270126396680750781067812470790778554307856767686653750348529134531402422982,-0.3741827012639668075078106781247079077855430785676768665375034852672877442450651 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,moderate,4099,10322096095657499356,215.967539,214.177379,214.011597,,,,Both,yes,"[-5.5514961198525494,-1.5408497033443795e-16,8.5534340906988609e-33,-4.7481097335538075e-49]",-128.8094102575669040651947452858902507112406883868292013207128384184002201202949,-128.80941025756690406519474528589025071124068838682920132071283842325352333323063 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,moderate,4099,10322096095657499356,238.939197,237.158124,237.030088,,,,No,no,"[-5.5510124539006611,-1.5407154590753761e-16,8.5526888853070031e-33,-4.7476960614617498e-49]",-128.74712271806391331797118607582008799679652337863704645234129240331062931682242,-128.74712271806391331797118607582008799679652337863704645234129240331062988773716 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,near_one,4099,10322096095657499359,217.861158,215.239353,214.487635,180.000000,34.487635,yes,Both,-,"[1.4303433203278892,3.9700002183670459e-17,-2.2037928250989968e-33,1.2233507679643134e-49]",2.2096804236627024779285628784238115118483853203461617013356271627432691873521909,2.2096804236627024779285628784238115118483853203461617013356271626834118164339315 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,qdpp,qdreal,qdpp qd_real,qdpp cosh,near_one,4099,10322096095657499359,217.575031,214.997764,214.207070,,,,NaN,-,"[1.4762075238667678,4.0972989553044397e-17,-2.2744578194757946e-33,1.2625777198603775e-49]",2.302409864481417699686931953389152575418423805138517988848533827927814693594248,2.3024098644814176996869319533891525754184238051385179888485338280035728255131427 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,near_one,4099,10322096095657499359,215.895184,214.199617,214.003441,,,,Both,-,"[1.3180360250850454,3.6582848558370944e-17,-2.0307560387939318e-33,1.1272960558328004e-49]",2.0018685354727893365634159209739845210019868831427185249101991568056016815303039,2.0018685354727893365634159209739845210019868831427185249101991568814560681262869 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,near_one,4099,10322096095657499359,238.918901,237.169391,237.024615,,,,No,-,"[1.3282510733457995,3.6866373102789604e-17,-2.0464948126569296e-33,1.1360328303938347e-49]",2.0196883083061335896151725290956785491903675387304527995513844467881401418108314,2.0196883083061335896151725290956785491903675387304527995513844467881401328207091 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,moderate,4099,10322096095657499356,217.160103,214.737937,214.159072,180.000000,34.159072,yes,Both,-,"[6.9851955939094275,1.9387812449671103e-16,-1.0762397889369559e-32,5.9743309684776362e-49]",540.25933261817616200059910469729467236382875532751465730859323173250980707379319,540.25933261817616200059910469729467236382875532751465730859323171413182761114806 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,qdpp,qdreal,qdpp qd_real,qdpp cosh,moderate,4099,10322096095657499356,216.955312,214.536693,213.837789,,,,NaN,-,"[-6.7926478357212208,-1.8853385063469843e-16,1.0465731094794119e-32,-5.8096478154879388e-49]",445.63574988022346778368624832716917203617809044632604045304376455196844104441602,445.6357498802234677836862483271691720361780904463260404530437645330279442492149 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,moderate,4099,10322096095657499356,215.937394,214.168922,214.000831,,,,Both,-,"[-0.024915825742571229,-6.9155308542376918e-19,3.8388907909401814e-35,-2.1310124725616338e-51]",1.000310415244491850132172673423459542053002904846742529807535702649493788255194,1.0003104152444918501321726734234595420530029048467425298075357026874659704667725 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,moderate,4099,10322096095657499356,238.922878,237.131226,237.021921,,,,No,-,"[1.3188743183318685,3.6606115869971215e-17,-2.0320476340469193e-33,1.128013035226982e-49]",2.0033230139496671007944620881086192005631920629659234114985427470911686576898421,2.0033230139496671007944620881086192005631920629659234114985427470911686487559028 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,near_one,4099,10322096095657499359,218.404442,215.222392,214.209524,180.000000,34.209524,yes,Both,yes,"[0.51562981029195787,1.4311602189230828e-17,-7.9445351348799311e-34,4.4101029133436116e-50]",0.47432005334068853744838691469119725073611186863535411854720463894651210203082909,0.47432005334068853744838691469119725073611186863535411854720463896209252928278415 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,qdpp,qdreal,qdpp qd_real,qdpp tanh,near_one,4099,10322096095657499359,218.125341,214.939214,214.034113,,,,Both,no,"[0.50145288441688241,1.3918113451108005e-17,-7.7261050063826027e-34,4.2888498343788288e-50]",0.4632590074710471540677760580947758421609680024744328209862896713814575412529895,0.46325900747104715406777605809477584216096800247443282098628967139864199252464697 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,near_one,4099,10322096095657499359,216.043702,214.274158,214.038640,,,,Both,yes,"[0.55314229628883105,1.5352782830847263e-17,-8.5225064954382105e-34,4.7309414693764765e-50]",0.50287159194838804027667682401213462167675591678250746227332787661254617641690965,0.50287159194838804027667682401213462167675591678250746227332787663114160978543072 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,near_one,4099,10322096095657499359,239.022015,237.196358,237.059834,,,,Inf,no,"[0.5576392959998614,1.5477599646370227e-17,-8.5917937466652033e-34,4.769403620189074e-50]",0.50622378780329080187492227056864090769531648311133563532633056169725103618142473,0.50622378780329080187492227056864090769531648311133563532633056169725103398244205 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,moderate,4099,10322096095657499356,219.852666,215.378850,214.042672,180.000000,34.042672,yes,Both,yes,"[-0.049004188243731761,-1.3601394522814103e-18,7.5502906831193558e-35,-4.1912532795059553e-51]",-0.048964999496442407695752174462954719514280073534987354591187902322123112147473692,-0.048964999496442407695752174462954719514280073534987354591187902320317513639311405 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,qdpp,qdreal,qdpp qd_real,qdpp tanh,moderate,4099,10322096095657499356,219.762416,214.599863,212.926362,,,,Both,no,"[0.4300835480404146,1.1937216438673698e-17,-6.6264862700747261e-34,3.6784388146997172e-50]",0.40539112864517538062152182337242215635371996648169563288338521428356954926607425,0.40539112864517538062152182337242215635371996648169563288338521425116153227311076 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,moderate,4099,10322096095657499356,216.350781,214.574367,214.097308,,,,Both,yes,"[-0.55244142124230144,-1.5333329640496203e-17,8.5117078055231293e-34,-4.7249469922867211e-50]",-0.50234776953455832738474068141498014652395776826959763064097809403595245870991342,-0.50234776953455832738474068141498014652395776826959763064097809405378826341441138 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,moderate,4099,10322096095657499356,239.361623,237.532781,237.128013,,,,Inf,no,"[-0.57881872838935244,-1.6065446983552846e-17,8.918114571017569e-34,-4.9505480664944029e-50]",-0.52180632683237750628821439192870733596394500691724064619963052884427795607515043,-0.52180632683237750628821439192870733596394500691724064619963052884427795391310627 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,near_one,4099,10322096095657499359,216.635189,213.881562,212.956798,180.000000,32.956798,yes,Both,yes,"[1.1332197959754742,3.1453167736324843e-17,-1.7460015509132478e-33,9.6922556142756011e-50]",0.97250944030282146673684576741712972459065785505278761629557943342964766102358922,0.97250944030282146673684576741712972459065785505278761629557943335352570304596911 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,qdpp,qdreal,qdpp qd_real,qdpp asinh,near_one,4099,10322096095657499359,216.415559,213.748418,212.729910,,,,NaN,no,"[0.51219531759267378,1.4216275867414523e-17,-7.8916183962132866e-34,4.380728222515721e-50]",0.49209295889781557619335492062425050518716114803411505818752064220215925285806896,0.49209295889781557619335492062425050518716114803411505818752064215708140967221009 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,near_one,4099,10322096095657499359,215.876528,214.126921,214.013004,,,,Both,yes,"[1.1875368477178503,3.2960768773178392e-17,-1.8296902200664262e-33,1.015682105124608e-49]",1.0079699008676541316864431653897165142746758838264996787682714615557319327196561,1.0079699008676541316864431653897165142746758838264996787682714615177904855312488 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,near_one,4099,10322096095657499359,238.909508,237.158686,237.032021,,,,No,no,"[0.53019894096351738,1.4715976797239277e-17,-8.1690081350723071e-34,4.534710459953743e-50]",0.5080581849197998622111617267798195476409931094147435536188404419103933361747497,0.50805818491979986221116172677981954764099310941474355361884044191039333392483875 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,moderate,4099,10322096095657499356,217.749152,214.561309,213.166747,180.000000,33.166747,yes,Both,yes,"[-1.1129700329637249,-3.089112390785367e-17,1.7148018509523894e-33,-9.519062487985893e-50]",-0.95904342784556441854164089194266034008522852163619683195211288936138295400619663,-0.95904342784556441854164089194266034008522852163619683195211288929648167565369013 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,qdpp,qdreal,qdpp qd_real,qdpp asinh,moderate,4099,10322096095657499356,217.300625,214.201948,0.000000,,,,NaN,no,"midpoint [0,0,0,0]",0.010530563626045119041838075907720498032440480253679950729852028848942674760935307,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,moderate,4099,10322096095657499356,215.877848,214.173161,214.033343,,,,Both,yes,"[-3.6635680838067728,-1.0168444097310361e-16,5.6446203807238641e-33,-3.1333937559740255e-49]",-2.0097113700181062349692108160003517092300304063443186921409136491157467461994281,-2.0097113700181062349692108160003517092300304063443186921409136490411573171997093 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,moderate,4099,10322096095657499356,238.871807,237.170538,237.026506,,,,No,no,"[3.7225679300655514,1.0332201566724962e-16,-5.7355240372230841e-33,3.1838554222080507e-49]",2.0251321587728640177526991897930401616261596463681306941092379777810078632497695,2.0251321587728640177526991897930401616261596463681306941092379777810078722523164 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,moderate,4099,10322096095657499275,218.344248,215.313498,214.386548,180.000000,34.386548,yes,Both,-,"[1.2091565801750435,3.3560836892183684e-17,-1.8630006921695854e-33,1.0341731316696386e-49]",0.63599796632531509013285885414670992566643851908950877932499299079883667837099078,0.63599796632531509013285885414670992566643851908950877932499299078035785994962717 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,qdpp,qdreal,qdpp qd_real,qdpp acosh,moderate,4099,10322096095657499275,217.695002,214.733811,0.000000,,,,NaN,-,"lower endpoint [1,0,0,0]",0.010530563626045119041838075907720498032440480253679950729852028848942674760935307,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,moderate,4099,10322096095657499275,216.070027,214.284491,214.051325,,,,Both,-,"[3.9804489193453434,1.1047965096503807e-16,-6.1328526126968082e-33,3.4044170886242721e-49]",2.0583757948565598827690570382144203121626552510542194966987158277315739908333351,2.0583757948565598827690570382144203121626552510542194966987158278070232872093508 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,moderate,4099,10322096095657499275,239.001647,237.267792,237.031139,,,,No,-,"[3.8470512568523638,1.0677712205676603e-16,-5.9273209705316151e-33,3.290324107913864e-49]",2.0231171805463747601489123488705841544306082856720398407062424076130979843332333,2.0231171805463747601489123488705841544306082856720398407062424076130979753684794 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,boundary,4101,10322096095657499355,217.097508,214.442677,213.709421,180.000000,33.709421,yes,Both,-,"[1.0000006102559529,2.7755592553634159e-17,-1.5407448957579594e-33,8.552852291720866e-50]",0.0011047677501095367049219422532381969737795314787741324983406649673871900506886361,0.0011047677501095367049219422532381969737795314787741324983406649674385145712399472 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,qdpp,qdreal,qdpp qd_real,qdpp acosh,boundary,4101,10322096095657499355,216.261895,213.580529,0.000000,,,,NaN,-,"[1,0,0,0]",0.010530563626045119041838075907720498032440480253679950729852028848942674760935307,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,boundary,4101,10322096095657499355,215.787044,214.197277,214.011139,,,,Both,-,"[1.0000004798826352,2.7755588935047681e-17,-1.5407446948860582e-33,8.5528511766578175e-50]",0.00097967606567821465227959033002276095886277869454081491023270410424438341810175862,0.00097967606567821465227959033002276095886277869454081491023270410428130755329103443 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,boundary,4101,10322096095657499355,238.744483,237.183996,237.009868,,,,No,-,"[1.0000004776948863,2.7755588874325452e-17,-1.5407446915152973e-33,8.5528511579463359e-50]",0.00097744038008420457683225652626186507017705275000499519763155267944135176427726761,0.00097744038008420457683225652626186507017705275000499519763155267944135175988174397 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,moderate,4099,10322096095657499356,217.309730,214.164921,213.300563,180.000000,33.300563,yes,Both,yes,"[0.0664478289398438,1.8442977406342098e-18,-1.0237909079581275e-34,5.6831811920850375e-51]",0.066545884848946356015107328012468534613321875154290452987163116978656391412156697,0.066545884848946356015107328012468534613321875154290452987163116974551954049134186 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,qdpp,qdreal,qdpp qd_real,qdpp atanh,moderate,4099,10322096095657499356,216.761222,213.754350,212.510651,,,,Both,no,"[-0.2731802849224898,-7.5822760548652169e-18,4.2090087275876802e-34,-2.336469200108038e-50]",-0.28029737430197434584944109663332529015622293813932679199027623014585727329302096,-0.28029737430197434584944109663332529015622293813932679199027623011596639445887419 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,moderate,4099,10322096095657499356,215.932351,214.156626,214.025325,,,,Both,yes,"[0.12618792670327883,3.5024185413922945e-18,-1.9442328532638911e-34,1.0792660394631177e-50]",0.12686417947725704533840398589369902988592505310826906137934256718603520690203447,0.12686417947725704533840398589369902988592505310826906137934256719076995026763113 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,moderate,4099,10322096095657499356,238.915006,237.181152,237.021503,,,,No,no,"[-0.7623611238227983,-2.1159771818679515e-17,1.174603293445626e-33,-6.5203581059193663e-50]",-1.0018287711046037863407528808033263139274032426947019005363253548223660872400857,-1.0018287711046037863407528808033263139274032426947019005363253548223660917090963 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,boundary,4105,10322096095657499355,219.259597,215.988400,215.075845,180.000000,35.075845,yes,Both,yes,"[0.5,0,0,0]",0.54930614433405484569762261846126285232374527891137472586734716682864483823413374,0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,qdpp,qdreal,qdpp qd_real,qdpp atanh,boundary,4105,10322096095657499355,218.580247,215.278441,0.000000,,,,Both,no,"[-0,0,0,0]",0.0052652818130225595209190379538602490162202401268399753649260144244713373804676535,0 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,boundary,4105,10322096095657499355,216.450204,214.939072,214.927397,,,,Both,yes,"[0.99899936812791412,2.7727802502039826e-17,-1.5392022380011819e-33,8.5442888209174113e-50]",3.7998851729337611663249931195429297240812819127904226139496092933273189181688645,3.7998851729337611663249931195429297240812819127904226139496092934032076288278974 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,boundary,4105,10322096095657499355,239.378421,237.945757,237.372096,,,,No,no,"[-0.5,0,0,0]",-0.54930614433405484569762261846126285232374527891137472586734716681874714853103911,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,near_one,4099,10322096095657499359,206.773984,196.847186,196.755396,180.000000,16.755396,yes,Both,yes,"midpoint [1,0,0,0]",0.84270079294971486934122063508260925929606699796630290845993292736409039503759438,0.84270079294971486934122063508260925929606699796630290845993789783471725409601084 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,near_one,4099,10322096095657499359,216.124506,214.293135,214.075088,,,,Both,yes,"[0.50336696437385697,1.3971239842088173e-17,-7.7555960776233127e-34,4.3052206675349773e-50]",0.52345372074479726111600097852706905117450908422992738618016813909422569460796212,0.52345372074479726111600097852706905117450908422992738618016813911309932932453575 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,near_one,4099,10322096095657499359,239.118725,237.303421,237.115344,,,,Inf,no,"[0.50440030951221848,1.3999920931213008e-17,-7.7715172803821719e-34,4.3140587104762828e-50]",0.52435827293177729902931721378772892866957455051554486973327695504018796785804493,0.52435827293177729902931721378772892866957455051554486973327695504018797004982547 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,moderate,4099,10322096095657499356,218.790808,197.061585,196.771033,180.000000,16.771033,yes,Both,yes,"[-1.0144931263435488,-2.8157840679764146e-17,1.5630741523200512e-33,-8.6768045655108495e-50]",-0.84863022897531701967121795328975048026375710416395760800302401037790857858953723,-0.84863022897531701967121795328975048026375710416395760800302896186126856971311395 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,moderate,4099,10322096095657499356,216.403367,214.532827,214.069380,,,,Both,yes,"[0.49346633937062734,1.3696442296169046e-17,-7.6030527963283613e-34,4.2205421359622138e-50]",0.51473949480729290589930415570243436715546197426142443535432835089464450449797338,0.51473949480729290589930415570243436715546197426142443535432835087601149756190686 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,moderate,4099,10322096095657499356,239.359861,237.617935,237.090794,,,,Inf,no,"[-0.47786661764019733,-1.3263463040097327e-17,7.362701026690414e-34,-4.0871201016314884e-50]",-0.50083582704760106751455089603854051657987806254960622390375258121165593721448514,-0.5008358270476010675145508960385405165798780625496062239037525812116559393438727 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,near_one,4099,10322096095657499359,204.316189,192.489437,192.327065,180.000000,12.327065,yes,Both,-,"upper endpoint [1.5,0,0,0]",0.033894853524689272933023738354052141318589520742363219550036458011854403217248196,0.033894853524689272933023738354052141318589520742363219550032153557867145576249274 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,near_one,4099,10322096095657499359,215.962914,214.214759,214.049312,,,,Both,-,"[1.3096161398234563,3.6349149796317988e-17,-2.0177831514710525e-33,1.1200946567319361e-49]",0.064014780147894919119338175302722908573997859037616218424476112030574651226502498,0.06401478014789491911933817530272290857399785903761621842447611203292437484990314 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,near_one,4099,10322096095657499359,238.949059,237.201029,237.018916,,,,Inf,-,"[1.0806471778377253,2.9993984458290972e-17,-1.665000607292187e-33,9.2426100511532716e-50]",0.12644653397051708186289826438531152353975365396358757108160639230306320626900367,0.12644653397051708186289826438531152353975365396358757108160639230306320570393172 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,moderate,4099,10322096095657499356,212.004213,191.066815,189.779688,180.000000,9.779688,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804748240804760826674822248354380927724048326045650379,0.0048523201680211414554273497804748240804760826674822248354416949961916711523801507 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,moderate,4099,10322096095657499356,216.176403,214.211875,214.017843,,,,Both,-,"[2.0385700159174238,5.6581684224549895e-17,-3.1409144299082644e-33,1.7435577592307763e-49]",0.0039394074968276384481347790714740376120684431886149943479747901319899962283757329,0.0039394074968276384481347790714740376120684431886149943479747901321377846972976984 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,moderate,4099,10322096095657499356,239.156924,237.247098,237.053891,,,,Inf,-,"[2.7148354940083514,7.5351821837942075e-17,-4.1828663775967986e-33,2.3219572806691949e-49]",0.00012335686434239937630508063868305400773768378433940295041562371963596822400780945,0.00012335686434239937630508063868305400773768378433940295041562371963596822454587035 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,moderate,4099,10322096095657499323,211.903615,199.617279,199.225949,180.000000,19.225949,yes,Both,-,"[1.7460150498866698,4.8461652743155553e-17,-2.6901621343420086e-33,1.4933399707606258e-49]",-0.085381213564840179500933244532026946446305041549633331800426988753669607008088582,-0.085381213564840179500933244532026946446305041549633331800426897893008666204246091 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lgamma,moderate,4099,10322096095657499323,215.890428,214.160879,214.017847,,,,Both,-,"[7.74079219922106,2.1485014321035056e-16,-1.1926578791807172e-32,6.6205811898352019e-49]",8.0072162948217682208947020187449574175934900903935011829091132045478040802147141,8.0072162948217682208947020187449574175934900903935011829091132048481971689346261 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::lgamma,moderate,4099,10322096095657499323,238.928241,237.162122,237.008749,,,,No,-,"[1.1318513409309559,3.1415185478860126e-17,-1.7438931120750193e-33,9.6805514275545252e-50]",-0.062652393316471695509535673477178105406035057306309915447779751850677317855172516,-0.062652393316471695509535673477178105406035057306309915447779751850677317573207638 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,moderate,4099,10322096095657499320,209.040528,202.582542,202.457020,180.000000,22.457020,yes,Both,-,"[14.307075507958793,3.9710111609966271e-16,-2.2043540109909649e-32,1.2236622887134923e-48]",13896751262.208085922946362879642934303109153237904876709680644672275751079246188,13896751262.208085922946362879642934303109153237904876709680646247264671220863527 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tgamma,moderate,4099,10322096095657499320,215.948239,214.171703,214.004992,,,,Both,-,"[10.766069372828035,2.9881845256063508e-16,-1.6587756310783857e-32,9.2080544915517407e-49]",2098826.7589879936401111657394716259122087725619967530347101090490263605459620521,2098826.7589879936401111657394716259122087725619967530347101090489469177047214057 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::tgamma,moderate,4099,10322096095657499320,238.919522,237.194896,237.040555,,,,No,-,"[9.228183461064674,2.561335438484767e-16,-1.4218267887970798e-32,7.8927241897568378e-49]",65913.214264422430470574974300151351193626993297660765946673758139122704576039683,65913.214264422430470574974300151351193626993297660765946673758139122704866211491 diff --git a/validation/metrics/data/windows/x86_64/detail/MSVC_f256_benchmark.csv b/validation/metrics/data/windows/x86_64/detail/MSVC_f256_benchmark.csv new file mode 100644 index 0000000..537bb5e --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MSVC_f256_benchmark.csv @@ -0,0 +1,294 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,40960,10.682010,10.738294|10.699298|10.696791|10.681020|10.682010|10.669539|10.668813,10608640,113415100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,qdpp,qdreal,qdpp qd_real,qdpp operator+,40960,23.446045,23.446777|23.446045|23.395996,1228800,28790300.000000,2.194909 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator+,40960,49.575195,49.405762|49.575195|49.716797,614400,30453300.000000,4.640999 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,40960,407.944336,408.056641|407.944336|407.485352,122880,50114000.000000,38.189847 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,40960,10.664854,10.675214|10.666966|10.679899|10.658718|10.664854|10.650998|10.658190,10608640,113140900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,qdpp,qdreal,qdpp qd_real,qdpp operator-,40960,25.208062,25.186632|25.215115|25.208062,1105920,27872800.000000,2.363657 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator-,40960,49.455566,49.607910|49.365234|49.455566,614400,30398200.000000,4.637247 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,40960,407.089844,406.428223|407.089844|407.644043,122880,50018800.000000,38.171158 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,40960,18.814872,18.814872|18.815453|18.861026|18.826614|18.760579|18.729887|18.723726,6021120,113138700.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,qdpp,qdreal,qdpp qd_real,qdpp operator*,40960,19.555886,19.586071|19.547674|19.555886,1351680,26443200.000000,1.039385 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator*,40960,64.522705,64.605103|64.507446|64.522705,491520,31725200.000000,3.429346 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,40960,355.053711,356.625977|355.026855|355.053711,122880,43692300.000000,18.870908 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,40960,80.729167,80.604655|80.733236|80.729167,368640,29745200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,qdpp,qdreal,qdpp qd_real,qdpp operator/,40960,265.427246,264.880371|265.661621|265.427246,122880,32602900.000000,3.287873 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,40960,118.088379,118.535156|118.078613|118.088379,245760,29057200.000000,1.462772 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,40960,723.698730,723.847656|723.698730|723.237305,122880,88915300.000000,8.964526 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,40960,24.559191,24.559191|24.598524|24.548611,1105920,27171100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,40960,84.177246,84.273275|83.915202|84.177246,368640,31010700.000000,3.427525 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,40960,616.706543,616.494141|622.900391|616.706543,122880,76025900.000000,25.111029 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,40960,2.642708,2.704182|2.684739|2.664277|2.642708|2.641935|2.621052|2.631081,39854080,105840900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,qdpp,qdreal,qdpp qd_real,qdpp abs,40960,1.969850,1.994138|1.984121|1.978256|1.969850|1.954887|1.965118|1.938149,55623680,109535100.000000,0.745391 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,40960,38.546143,38.606771|38.515625|38.546143,737280,28426700.000000,14.585849 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,40960,5.958370,5.985541|5.972310|5.972900|5.956519|5.958370|5.956007|5.952306,17776640,106035000.000000,2.254646 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,40960,2.651716,2.689854|2.678066|2.668963|2.651716|2.634905|2.639090|2.624860,40140800,106587900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,qdpp,qdreal,qdpp qd_real,qdpp fabs,40960,1.963158,1.998800|1.984571|1.970469|1.963158|1.953036|1.939341|1.930669,55050240,108056100.000000,0.740335 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fabs,40960,38.415527,38.465983|38.405762|38.415527,737280,28333000.000000,14.487045 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,40960,5.936831,5.940926|5.954314|5.937027|5.936831|5.927537|5.924702|5.925214,17776640,105508300.000000,2.238864 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,40960,18.253729,18.253729|18.247514|18.253285|18.253840|18.385010|18.234419|18.302335,6307840,115280400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,qdpp,qdreal,qdpp qd_real,qdpp sqr,40960,12.512837,12.479839|12.536621|12.500551|12.503859|12.518586|12.557412|12.512837,8888320,111243300.000000,0.685495 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,4096,74.495443,74.506293|74.495443|74.397786,331776,24706200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,qdpp,qdreal,qdpp qd_real,qdpp inv,4096,256.540256,256.803385|256.320530|256.540256,110592,28372900.000000,3.443704 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,40960,3.406242,3.416758|3.406242|3.400190|3.407055|3.393283|3.404385|3.418636,33546240,114280300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,qdpp,qdreal,qdpp qd_real,qdpp min,40960,1.674989,1.814946|1.742612|1.716161|1.674989|1.637190|1.602618|1.572879,57057280,95867600.000000,0.491741 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,40960,45.634766,45.593262|45.634766|45.702637,614400,28043400.000000,13.397395 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,40960,321.396484,321.025391|322.131348|321.396484,122880,39508100.000000,94.355162 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,40960,3.649925,3.647237|3.651896|3.644191|3.649925|3.676467|3.667306|3.645020,31252480,114214600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,qdpp,qdreal,qdpp qd_real,qdpp max,40960,1.435154,1.454374|1.441948|1.443209|1.435154|1.435071|1.430015|1.426312,76554240,110085900.000000,0.393201 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,40960,45.259766,45.323242|45.259766|45.134277,614400,27794900.000000,12.400191 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,40960,321.394043,322.077637|321.259766|321.394043,122880,39515400.000000,88.054978 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,40960,8.222961,8.222961|8.251343|8.217672|8.215281|8.233032|8.216807|8.234253,13762560,113229200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,40960,43.814453,43.830078|43.814453|43.806641,614400,26921200.000000,5.328306 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,40960,819.091797,816.943359|820.681152|819.091797,122880,100627100.000000,99.610317 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,40960,0.863137,0.864927|0.865356|0.863801|0.863137|0.863020|0.861816|0.862391,125583360,108440300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::copysign,40960,67.517090,67.860107|67.378540|67.517090,491520,33219500.000000,78.222872 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,tlfloat,tloct,TLFloat Octuple,tlfloat::copysign,40960,12.214661,12.222214|12.203979|12.224121|12.223434|12.213211|12.214661|12.208252,9175040,112079500.000000,14.151467 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,40960,4.899373,4.953407|4.899255|4.909374|4.899373|4.895755|4.897873|4.903403,23797760,116807700.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,qdpp,qdreal,qdpp qd_real,qdpp floor,40960,2.207721,2.198168|2.203754|2.212140|2.213400|2.207721|2.208942|2.195846,52756480,116365500.000000,0.450613 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::floor,40960,44.061035,44.167480|44.061035|43.803711,614400,27040200.000000,8.993199 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,tlfloat,tloct,TLFloat Octuple,tlfloat::floor,40960,159.675293,159.436035|159.675293|159.808350,245760,39233100.000000,32.590966 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,40960,4.883401,4.874194|4.875694|4.884166|4.885754|4.883401|4.886195|4.880489,23797760,116166700.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,qdpp,qdreal,qdpp qd_real,qdpp ceil,40960,2.240415,2.236706|2.234224|2.236436|2.240644|2.240604|2.240415|2.240617,51896320,116171000.000000,0.458782 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ceil,40960,43.532715,43.532715|43.709473|43.384766,614400,26752400.000000,8.914426 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,tlfloat,tloct,TLFloat Octuple,tlfloat::ceil,40960,158.969727,158.969727|158.917236|159.003906,245760,39066900.000000,32.553078 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,40960,6.774944,6.776797|6.781637|6.771451|6.774944|6.763032|6.767326|6.782521,16629760,112649300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,qdpp,qdreal,qdpp qd_real,qdpp aint,40960,5.955642,5.928072|5.947529|5.955642|5.985389|5.918607|5.983474|5.979905,18636800,111018400.000000,0.879069 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::trunc,40960,42.578125,42.578125|42.595215|42.492188,614400,26145900.000000,6.284646 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,tlfloat,tloct,TLFloat Octuple,tlfloat::trunc,40960,144.438477,144.681396|144.375000|144.438477,245760,35511900.000000,21.319507 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,40960,12.893636,12.924967|12.875081|12.868571|12.906576|12.905680|12.874349|12.893636,8601600,110897800.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,qdpp,qdreal,qdpp qd_real,qdpp round,40960,5.578578,5.591727|5.575195|5.613909|5.595424|5.578578|5.578369|5.577706,20070400,112138800.000000,0.432661 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::round,40960,83.553060,83.151042|83.676758|83.553060,368640,30766800.000000,6.480178 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,tlfloat,tloct,TLFloat Octuple,tlfloat::round,40960,175.554199,175.950928|175.423584|175.554199,245760,43166000.000000,13.615570 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,40960,9.115397,9.130220|9.116443|9.103364|9.103364|9.115397|9.099877|9.139811,12042240,109771000.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,tlfloat,tloct,TLFloat Octuple,tlfloat::rint,40960,199.523926,199.697266|199.523926|198.547363,122880,24484600.000000,21.888671 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,4096,7.207559,7.216859|7.207559|7.216323|7.220750|7.181088|7.177332|7.164096,15654912,112679600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lround,4096,124.829102,124.907769|124.705675|124.829102,221184,27606900.000000,17.319193 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,4096,6.775219,6.813590|6.783399|6.775219|6.771677|6.768472|6.768303|6.780194,16601088,112557400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::llround,4096,216.196289,216.196289|216.301270|215.993652,122880,26562200.000000,31.909862 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,4096,129.347229,129.199219|129.347229|129.487610,196608,25430200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,4096,194.191673,194.191673|194.358132|194.014116,135168,26248000.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,2048,67.964100,67.806765|68.023779|67.964100,387072,26294400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,qdpp,qdreal,qdpp qd_real,qdpp fmod,2048,330.528846,330.528846|330.254657|330.727915,79872,26398000.000000,4.863286 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,2048,196.747622,196.866508|196.560802|196.747622,141312,27799600.000000,2.894876 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,2048,1572.167969,1573.990885|1572.167969|1572.037760,18432,28988600.000000,23.132330 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,2048,98.269931,97.931463|98.269931|98.330966,270336,26540900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,qdpp,qdreal,qdpp qd_real,qdpp drem,2048,333.379657,334.795673|333.379657|333.206881,79872,26660800.000000,3.392489 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remainder,2048,235.955489,235.955489|235.546875|236.382093,116736,27545200.000000,2.401096 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,tlfloat,tloct,TLFloat Octuple,tlfloat::remainder,2048,1714.746094,1714.746094|1717.073568|1713.118490,18432,31610500.000000,17.449347 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,2048,97.306685,97.306685|97.483132|96.886097,270336,26283500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,qdpp,qdreal,qdpp qd_real,qdpp divrem,2048,332.654748,332.414363|333.225661|332.654748,79872,26578600.000000,3.418622 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remquo,2048,264.579504,264.579504|264.613971|264.579504,104448,27636000.000000,2.719027 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,tlfloat,tloct,TLFloat Octuple,tlfloat::remquo,2048,1751.822917,1747.867839|1752.604167|1751.822917,18432,32270100.000000,18.003110 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,40960,18.387118,18.387118|18.376243|18.361816|18.365368|18.401545|18.451926|18.397661,6307840,116011700.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,40960,177.680664,187.673340|177.680664|176.718750,122880,22203300.000000,9.663323 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,40960,845.156250,845.051270|845.930176|845.156250,122880,103880200.000000,45.964584 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,40960,3.940501,3.936887|3.942943|3.937414|3.940501|3.936839|3.945743|3.941626,29245440,115235200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,qdpp,qdreal,qdpp qd_real,qdpp ldexp,40960,8.623255,8.654941|8.623255|8.623359|8.602685|8.620502|8.625852|8.614268,13475840,116209600.000000,2.188365 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ldexp,40960,39.772542,39.772542|39.868978|39.768880,737280,29346300.000000,10.093269 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,tlfloat,tloct,TLFloat Octuple,tlfloat::ldexp,40960,188.140869,188.485107|187.797852|188.140869,245760,46237600.000000,47.745412 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,40960,3.951307,3.936780|3.962257|3.952057|3.952177|3.946497|3.951307|3.941252,28958720,114355200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,qdpp,qdreal,qdpp qd_real,qdpp ldexp,40960,8.604838,8.607992|8.651326|8.604838|8.606618|8.598735|8.601074|8.600718,13762560,118498200.000000,2.177719 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbn,40960,40.130208,40.343831|40.069987|40.130208,737280,29624900.000000,10.156185 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,40960,3.943422,3.943422|3.941100|3.948568|3.942201|3.935379|3.950746|3.943613,29245440,115331600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,qdpp,qdreal,qdpp qd_real,qdpp ldexp,40960,8.609957,8.679095|8.616086|8.602321|8.609957|8.605853|8.622787|8.601022,13475840,116156200.000000,2.183372 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbln,40960,40.113932,40.104167|40.113932|40.380859,737280,29638400.000000,10.172367 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,40960,7.279160,7.279160|7.271707|7.267167|7.270593|7.280787|7.288369|7.385297,16343040,119171300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,40960,67.567139,67.351685|67.567139|67.982788,491520,33243400.000000,9.282272 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,40960,652.392578,652.072754|652.392578|653.000488,122880,80177800.000000,89.624709 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,40960,1.621009,1.615181|1.616105|1.618376|1.624310|1.624384|1.622994|1.621009,65945600,106854100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,40960,33.586775,33.570731|33.669085|33.586775,860160,28909000.000000,20.719674 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,40960,103.430176,103.430176|103.401693|103.579915,368640,38143400.000000,63.806053 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,40960,2.237106,2.233832|2.237297|2.237474|2.243216|2.235933|2.235796|2.237106,51322880,114821400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,40960,75.667318,75.407715|75.667318|75.845540,368640,27884000.000000,33.823758 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f256,bl::nextafter,40960,6.867414,6.868025|6.868940|6.859959|6.867414|6.860482|6.869071|6.854510,16056320,110211500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter,40960,504.421387,508.520508|504.421387|504.287109,122880,62145700.000000,73.451429 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter,40960,558.073730,556.979980|558.073730|558.671875,122880,68555800.000000,81.264027 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f256,bl::nexttoward,40960,6.861614,6.853364|6.870033|6.869233|6.862625|6.860436|6.861614|6.859931,16629760,114121100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter (same type),40960,507.907715,517.053223|507.907715|503.603516,122880,62610000.000000,74.021606 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter (same type),40960,558.093262,558.012695|558.251953|558.093262,122880,68581700.000000,81.335562 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,40960,0.776943,0.776520|0.778085|0.776943|0.776790|0.777490|0.778010|0.775202,150814720,117183900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,qdpp,qdreal,qdpp qd_real,qdpp operator==,40960,1.045025,1.044870|1.070018|1.058742|1.039789|1.052694|1.027602|1.045025,176619520,185166400.000000,1.345048 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator==,40960,6.497116,6.521988|6.495056|6.497116,3932160,25577600.000000,8.362413 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator==,40960,210.803223,211.403809|210.402832|210.803223,122880,25911700.000000,271.324018 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,40960,0.778757,0.777057|0.777519|0.778757|0.780778|0.779120|0.778742|0.779342,148234240,115438800.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,qdpp,qdreal,qdpp qd_real,qdpp operator!=,40960,1.100451,1.078570|1.100451|1.101662|1.109545|1.106664|1.093259|1.094845,175185920,192329000.000000,1.413087 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator!=,40960,6.469498,6.589890|6.469498|6.464005,3932160,25589700.000000,8.307470 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator!=,40960,210.705566,210.661621|211.330566|210.705566,122880,25915300.000000,270.566636 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,40960,2.106333,2.116334|2.108787|2.112443|2.106333|2.101411|2.097194|2.090927,53616640,112851000.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,qdpp,qdreal,qdpp qd_real,qdpp operator<,40960,1.908130,1.943123|1.930421|1.909003|1.908130|1.904474|1.903495|1.901478,59351040,113615900.000000,0.905901 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<,40960,6.517075,6.646692|6.517075|6.437174,4055040,26494200.000000,3.094038 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,tlfloat,tloct,TLFloat Octuple,TLFloat operator<,40960,211.179199,211.179199|210.610352|212.321777,122880,25973200.000000,100.259169 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,40960,2.058219,2.058219|2.070186|2.060597|2.063621|2.039978|2.039991|2.037499,55336960,113599600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,qdpp,qdreal,qdpp qd_real,qdpp operator<=,40960,1.928641,1.940284|1.928641|1.923288|1.922255|1.931246|1.929861|1.925706,59637760,115026600.000000,0.937043 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<=,40960,6.497803,6.504898|6.497803|6.495209,3932160,25556300.000000,3.157002 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator<=,40960,211.267090,212.524414|211.267090|210.834961,122880,25994300.000000,102.645568 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,40960,2.078716,2.090216|2.083342|2.080284|2.078716|2.077675|2.078266|2.074977,54476800,113338800.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,qdpp,qdreal,qdpp qd_real,qdpp operator>,40960,1.982015,2.020547|1.999166|1.991559|1.982015|1.971830|1.968661|1.963593,56770560,112708800.000000,0.953480 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>,40960,6.670473,6.656770|6.670473|6.671812,3809280,25394000.000000,3.208939 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,tlfloat,tloct,TLFloat Octuple,TLFloat operator>,40960,211.523438,211.730957|211.523438|210.842285,122880,25972600.000000,101.756772 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,40960,2.087081,2.103439|2.092594|2.087081|2.087916|2.084768|2.083278|2.082571,54476800,113791500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,qdpp,qdreal,qdpp qd_real,qdpp operator>=,40960,1.911961,1.927760|1.914591|1.911961|1.916692|1.910248|1.905811|1.898604,59637760,114041600.000000,0.916094 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>=,40960,6.479899,6.524170|6.479899|6.464762,3686400,23923300.000000,3.104766 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator>=,40960,211.154785,212.238770|210.957031|211.154785,122880,25983000.000000,101.172295 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,40960,122.967529,122.967529|123.004150|122.929688,245760,30220400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,40960,442.270508,442.141113|442.270508|443.054199,122880,54373000.000000,3.596645 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,40960,136.289062,136.406250|135.507812|136.289062,122880,16720000.000000,1.108334 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,40960,1343.259277,1343.259277|1343.916016|1343.103027,122880,165080200.000000,10.923691 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,1024,344.021739,343.941067|344.021739|344.149117,70656,24308300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,qdpp,qdreal,qdpp qd_real,qdpp nroot,1024,1148.095703,1150.476074|1145.935059|1148.095703,24576,28217400.000000,3.337277 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,1024,426.130022,426.130022|427.780878|425.311570,64512,27508400.000000,1.238672 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,1024,8044.628906,8044.628906|8036.621094|8046.289062,3072,24706600.000000,23.384071 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,4096,172.300212,172.574870|172.222900|172.300212,147456,25416400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,4096,461.186523,462.568359|461.186523|460.986328,61440,28359500.000000,2.676645 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,4096,1318.981934,1316.955566|1321.679688|1318.981934,24576,32420800.000000,7.655138 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,1024,883.662109,883.662109|884.980469|883.535156,30720,27158300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,qdpp,qdreal,qdpp qd_real,qdpp sin,1024,1792.832031,1792.832031|1795.644531|1791.640625,15360,27546200.000000,2.028866 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,1024,1689.902344,1689.570312|1690.605469|1689.902344,15360,25958800.000000,1.912385 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,1024,13353.710938,13367.089844|13353.515625|13353.710938,3072,41036100.000000,15.111784 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,1024,882.480469,882.314453|882.792969|882.480469,30720,27111300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,qdpp,qdreal,qdpp qd_real,qdpp cos,1024,1801.718750,1801.718750|1800.839844|1810.410156,15360,27714400.000000,2.041653 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,1024,1303.459821,1303.459821|1303.138951|1304.324777,21504,28033500.000000,1.477041 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,1024,13347.460938,13359.179688|13347.460938|13334.375000,3072,41002000.000000,15.124936 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,fltx,fltx,fltx bl::f256,bl::sincos,1024,1175.640191,1003.559028|1175.640191|1200.835503,27648,31150400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,qdpp,qdreal,qdpp qd_real,qdpp sincos,1024,1935.410156,1934.062500|1935.917969|1935.410156,15360,29723600.000000,1.646261 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,tlfloat,tloct,TLFloat Octuple,tlfloat::sincos,1024,26866.894531,26866.894531|26839.062500|26876.269531,3072,82516200.000000,22.852991 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,1024,1113.916016,1113.916016|1112.622070|1114.514160,24576,27369900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,qdpp,qdreal,qdpp qd_real,qdpp tan,1024,2203.662109,2203.662109|2204.394531|2201.440430,12288,27072500.000000,1.978302 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,1024,1892.207031,1893.027344|1889.042969|1892.207031,15360,29052300.000000,1.698698 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,1024,17299.609375,17319.628906|17299.609375|17291.210938,3072,53156300.000000,15.530443 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,1024,880.121528,878.146701|880.381944|880.121528,27648,24317800.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,qdpp,qdreal,qdpp qd_real,qdpp atan,1024,6178.515625,6223.095703|6178.515625|6173.193359,6144,38041200.000000,7.020071 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,1024,1993.769531,2001.796875|1992.031250|1993.769531,15360,30656500.000000,2.265334 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,1024,20588.867188,20588.867188|20572.167969|20597.753906,3072,63241000.000000,23.393209 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,1024,940.440538,943.750000|940.440538|940.234375,27648,26029900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,qdpp,qdreal,qdpp qd_real,qdpp atan2,1024,6096.191406,6092.089844|6096.191406|6096.728516,6144,37447700.000000,6.482272 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,1024,2047.500000,2047.519531|2045.058594|2047.500000,15360,31437200.000000,2.177171 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,1024,20739.160156,20684.863281|20739.160156|20761.523438,3072,63678000.000000,22.052601 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,1024,1334.207589,1334.207589|1334.430804|1332.226562,21504,28678200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,qdpp,qdreal,qdpp qd_real,qdpp asin,1024,8279.199219,8279.199219|8282.714844|8266.406250,3072,25424200.000000,6.205331 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,1024,6068.017578,6068.017578|6064.013672|6075.292969,6144,37288600.000000,4.548031 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,1024,22050.292969,22056.542969|22043.945312|22050.292969,3072,67738400.000000,16.526883 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,1024,1347.516741,1347.349330|1347.516741|1349.023438,21504,28986600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,qdpp,qdreal,qdpp qd_real,qdpp acos,1024,8330.175781,8330.664062|8322.265625|8330.175781,3072,25582700.000000,6.181872 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,1024,6267.089844,6268.164062|6260.546875|6267.089844,6144,38493800.000000,4.650844 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,1024,22167.187500,22167.187500|22154.589844|22218.164062,3072,68136900.000000,16.450399 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,1024,980.414497,979.796007|980.772569|980.414497,27648,27104100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,qdpp,qdreal,qdpp qd_real,qdpp exp,1024,1981.757812,1981.582031|1982.890625|1981.757812,15360,30444700.000000,2.021347 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,1024,1258.705357,1258.705357|1257.059152|1258.928571,21504,27057000.000000,1.283850 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,1024,11230.957031,11186.328125|11230.957031|11303.125000,3072,34529700.000000,11.455315 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,1024,831.171875,832.744141|831.171875|829.638672,30720,25534000.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,1024,1483.365885,1483.072917|1483.365885|1483.626302,18432,27341200.000000,1.784668 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,1024,31826.074219,31776.660156|31826.074219|31841.601562,3072,97735000.000000,38.290605 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,1024,987.109375,987.076823|987.109375|988.042535,27648,27299900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,qdpp,qdreal,qdpp qd_real,qdpp expm1,1024,1993.925781,1993.691406|1997.441406|1993.925781,15360,30643500.000000,2.019964 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,1024,1395.619420,1395.619420|1393.917411|1396.568080,21504,30006000.000000,1.413845 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,1024,12076.367188,12076.367188|12085.546875|12035.253906,3072,37065900.000000,12.234072 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,1024,1662.636719,1662.167969|1664.101562|1662.636719,15360,25543200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,qdpp,qdreal,qdpp qd_real,qdpp log,1024,6291.845703,6338.085938|6291.845703|6289.550781,6144,38747100.000000,3.784258 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,1024,2383.544922,2382.202148|2383.544922|2384.716797,12288,29288300.000000,1.433593 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,1024,14826.171875,14820.410156|14826.171875|14839.550781,3072,45553800.000000,8.917265 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,1024,1672.734375,1672.734375|1674.433594|1672.617188,15360,25701300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,1024,2624.707031,2631.591797|2621.435547|2624.707031,12288,32267200.000000,1.569112 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,1024,14805.957031,14824.121094|14805.957031|14799.121094,3072,45495500.000000,8.851350 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,1024,1686.992188,1686.992188|1696.093750|1686.914062,15360,25958400.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,qdpp,qdreal,qdpp qd_real,qdpp log10,1024,6677.392578,6650.048828|6692.285156|6677.392578,6144,41000400.000000,3.958164 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,1024,4590.478516,4590.478516|4593.798828|4575.537109,6144,28180100.000000,2.721102 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,1024,14941.992188,14941.992188|14949.218750|14921.875000,3072,45888600.000000,8.857179 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,1024,1691.621094,1698.652344|1689.609375|1691.621094,15360,26009000.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,qdpp,qdreal,qdpp qd_real,qdpp log1p,1024,6246.679688,6210.449219|6274.511719|6246.679688,6144,38362400.000000,3.692718 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,1024,2443.774414,2443.774414|2449.047852|2440.649414,12288,30037900.000000,1.444635 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,1024,18046.972656,18046.972656|18040.429688|18062.890625,3072,55449900.000000,10.668449 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,1024,2498.291016,2498.071289|2498.291016|2499.707031,12288,30703900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,qdpp,qdreal,qdpp qd_real,qdpp pow,1024,6758.886719,6758.886719|6740.966797|6760.400391,6144,41493000.000000,2.705404 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,1024,3035.839844,3038.020833|3035.123698|3035.839844,9216,27982800.000000,1.215167 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,1024,63641.015625,63635.937500|63663.085938|63641.015625,3072,195522600.000000,25.473820 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,4096,111.141807,110.729338|111.157227|111.141807,233472,25917600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,qdpp,qdreal,qdpp qd_real,qdpp npwr,4096,114.941406,114.985095|114.941406|114.896433,233472,26835500.000000,1.034187 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",4096,171.844482,171.720378|172.184245|171.844482,147456,25350100.000000,1.546173 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,fltx,fltx,fltx bl::f256,bl::product_sum,4096,42.869016,42.762529|42.869016|42.892911,577536,24742500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,qdpp,qdreal,qdpp qd_real,same expression,4096,78.630859,78.693359|78.630859|78.422852,307200,24140500.000000,1.834212 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same expression,4096,136.309814,136.502075|136.145020|136.309814,196608,26801400.000000,3.179681 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,tlfloat,tloct,TLFloat Octuple,same expression,4096,1112.561035,1112.561035|1110.192871|1112.561035,24576,27322900.000000,25.952568 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,1024,1213.071987,1212.039621|1213.071987|1213.281250,21504,26080000.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,qdpp,qdreal,qdpp qd_real,qdpp sinh,1024,2327.978516,2332.421875|2326.733398|2327.978516,12288,28619300.000000,1.919077 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,1024,1511.409505,1510.823568|1511.881510|1511.409505,18432,27857600.000000,1.245936 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,1024,12967.675781,12926.171875|12968.164062|12967.675781,3072,39794700.000000,10.689947 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,1024,1212.472098,1215.248326|1212.248884|1212.472098,21504,26091300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,qdpp,qdreal,qdpp qd_real,qdpp cosh,1024,2325.585938,2325.585938|2325.073242|2325.585938,12288,28574700.000000,1.918053 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,1024,1459.244792,1463.151042|1459.244792|1459.130859,18432,26920100.000000,1.203529 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,1024,11962.402344,11962.402344|11985.253906|11958.886719,3072,36768300.000000,9.866126 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,1024,1196.428571,1196.428571|1195.772879|1200.837054,21504,25754900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,qdpp,qdreal,qdpp qd_real,qdpp tanh,1024,2331.079102,2331.079102|2329.980469|2333.691406,12288,28650500.000000,1.948365 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,1024,1527.750651,1528.515625|1527.750651|1527.587891,18432,28163200.000000,1.276926 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,1024,12752.734375,12785.644531|12748.925781|12752.734375,3072,39206200.000000,10.659002 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,1024,2549.755859,2549.755859|2545.654297|2549.975586,12288,31315500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,qdpp,qdreal,qdpp qd_real,qdpp asinh,1024,6325.830078,6319.873047|6333.300781|6325.830078,6144,38869000.000000,2.480955 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,1024,6188.964844,6226.806641|6188.964844|6184.912109,6144,38094200.000000,2.427277 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,1024,62471.777344,62471.777344|62442.773438|62629.296875,3072,192044900.000000,24.501082 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,1024,2348.803711,2348.803711|2345.971680|2353.466797,12288,28869600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,qdpp,qdreal,qdpp qd_real,qdpp acosh,1024,6784.130859,6784.130859|6782.666016|6786.279297,6144,41683100.000000,2.888335 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,1024,3722.298177,3728.873698|3722.070312|3722.298177,9216,34324200.000000,1.584763 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,1024,58647.558594,58777.832031|58626.953125|58647.558594,3072,180277600.000000,24.969119 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,1024,2158.374023,2158.007812|2159.912109|2158.374023,12288,26526900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,qdpp,qdreal,qdpp qd_real,qdpp atanh,1024,6639.257812,6634.082031|6639.697266|6639.257812,6144,40781900.000000,3.076046 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,1024,2931.901042,2931.901042|2929.947917|2933.528646,9216,27019400.000000,1.358384 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,1024,17703.613281,17714.941406|17703.613281|17680.078125,3072,54373000.000000,8.202292 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,128,8938.281250,9100.000000|8938.281250|8892.968750,384,3447200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,128,16748.437500,16748.437500|16707.812500|16757.812500,384,6427400.000000,1.873787 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,128,780978.906250,780964.062500|780978.906250|782212.500000,384,300051900.000000,87.374618 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,128,8904.785156,8904.785156|8901.171875|8939.453125,3072,27387300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,128,27628.125000,27589.843750|27909.375000|27628.125000,384,10640300.000000,3.102616 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,128,778829.687500,780685.937500|778829.687500|777855.468750,384,299183500.000000,87.461929 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,128,8275.683594,8275.683594|8269.433594|8292.089844,3072,25433300.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lgamma,128,12619.531250,12603.125000|12653.125000|12619.531250,384,4848100.000000,1.524893 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::lgamma,128,251897.656250,251871.093750|252086.718750|251897.656250,384,96749500.000000,30.438290 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,128,9276.562500,9258.258929|9301.897321|9276.562500,2688,24941700.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tgamma,128,14727.343750,14727.343750|14835.937500|14703.906250,384,5666200.000000,1.587586 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::tgamma,128,279385.937500,280244.531250|279385.937500|279282.812500,384,107380900.000000,30.117399 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,4099,346.795386,346.757049|347.224062|346.795386,86079,29863000.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,qdpp,qdreal,qdpp qd_real,qdpp to_string,4099,3918.077580,3918.077580|3919.980483|3915.320810,12297,48177100.000000,11.297952 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,4099,489.158331,488.743596|489.158331|489.782874,61485,30080200.000000,1.410510 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,4099,45010.661137,45037.106611|45010.661137|44999.219322,12297,553557600.000000,129.790254 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,4099,316.132855,315.474157|316.903077|316.132855,86079,27215600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,qdpp,qdreal,qdpp qd_real,qdpp write,4099,3909.197365,3911.905343|3909.197365|3906.538180,12297,48071600.000000,12.365679 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,4099,415.457429,415.457429|414.408392|417.048061,61485,25555500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,qdpp,qdreal,qdpp qd_real,qdpp read,4099,3518.345938,3529.958526|3518.345938|3517.711637,12297,43310100.000000,8.468608 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,4099,371.127104,370.761161|371.375132|371.127104,73782,27379600.000000,0.893298 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,4099,38309.246158,38312.612832|38309.246158|38261.917541,12297,470908600.000000,92.209799 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,mt19937_64,fltx,fltx,fltx bl::f256,bl::mt19937_64,64,2.134200,2.135030|2.132833|2.134200,12287040,26220800.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,uniform_real,fltx,fltx,fltx bl::f256,bl::uniform_real,64,19.658358,19.681831|19.658358|19.654815,1354752,26641200.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,uniform_real,qdpp,qdreal,qdpp qd_real,qdpp qdrand,64,38.235089,38.235089|38.214622|38.273847,688896,26344200.000000,1.944979 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,normal,fltx,fltx,fltx bl::f256,bl::normal,64,265.448944,266.052565|265.448944|265.266600,95424,25343600.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f256,same workload,64,155.188347,155.188347|156.027793|155.108987,170112,26442500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,qdpp,qdreal,qdpp qd_real,same workload,64,352.812500,352.812500|352.443910|353.217147,74880,26419500.000000,2.273447 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,315.794300,315.794300|315.720231|316.340999,85056,26873600.000000,2.034910 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,tlfloat,tloct,TLFloat Octuple,same workload,64,2783.244681,2793.085106|2781.150266|2783.244681,9024,25139300.000000,17.934624 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f256,same workload,64,1809.699675,1809.699675|1809.983766|1808.076299,14784,26748000.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,qdpp,qdreal,qdpp qd_real,same workload,64,3698.125000,3715.491071|3698.125000|3694.285714,6720,24881700.000000,2.043502 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,2349.258475,2349.258475|2346.292373|2349.284958,11328,26601300.000000,1.298148 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,tlfloat,tloct,TLFloat Octuple,same workload,64,28640.625000,28671.875000|28640.625000|28631.250000,192,5500400.000000,15.826176 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f256,same workload,64,124.059383,124.232208|123.975805|124.059383,211776,26279100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,qdpp,qdreal,qdpp qd_real,same workload,64,197.651734,197.780437|197.464324|197.651734,132864,26258200.000000,1.593203 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,257.151442,258.047161|257.151442|256.716461,104832,26973800.000000,2.072809 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,tlfloat,tloct,TLFloat Octuple,same workload,64,2816.178385,2812.662760|2818.294271|2816.178385,9216,25949600.000000,22.700245 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f256,same workload,64,557.157258,556.640625|557.692792|557.157258,47616,26529900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,qdpp,qdreal,qdpp qd_real,same workload,64,893.158482,892.689732|893.158482|893.839286,26880,24010000.000000,1.603064 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,964.973958,969.303385|964.973958|962.966580,27648,26701000.000000,1.731960 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,tlfloat,tloct,TLFloat Octuple,same workload,64,12346.875000,12346.875000|12415.625000|12339.062500,192,2374500.000000,22.160485 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f256,same workload,64,395.633129,395.953757|395.466040|395.633129,66432,26286100.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,qdpp,qdreal,qdpp qd_real,same workload,64,769.220526,769.859730|769.220526|769.078480,33792,25999100.000000,1.944277 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,772.628348,772.544643|775.316220|772.628348,32256,24949900.000000,1.952891 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,tlfloat,tloct,TLFloat Octuple,same workload,64,10118.750000,10048.437500|10118.750000|10128.125000,192,1938900.000000,25.576094 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,fltx,fltx,fltx bl::f256,same workload,8,218.119919,219.451220|217.860772|218.119919,118080,25797800.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,qdpp,qdreal,qdpp qd_real,same workload,8,443.630151,443.630151|444.027948|443.492452,58824,26101200.000000,2.033882 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,8,318.850954,319.038179|318.850954|318.806902,81720,26060400.000000,1.461815 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,tlfloat,tloct,TLFloat Octuple,same workload,8,3379.513889,3379.513889|3377.044753|3390.084877,7776,26300100.000000,15.493834 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f256,same workload,8,8562.500000,8612.500000|8562.500000|8562.500000,24,205900.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,qdpp,qdreal,qdpp qd_real,same workload,8,17637.500000,17800.000000|17637.500000|17537.500000,24,423800.000000,2.059854 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,8,10950.000000,11162.500000|10950.000000|10875.000000,24,263900.000000,1.278832 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,tlfloat,tloct,TLFloat Octuple,same workload,8,113437.500000,112850.000000|113437.500000|113437.500000,24,2717800.000000,13.248175 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,fltx,fltx,fltx bl::f256,same workload,8,4666.861702,4679.148936|4665.957447|4666.861702,5640,26342500.000000, +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,qdpp,qdreal,qdpp qd_real,same workload,8,15800.000000,15800.000000|15900.000000|15187.500000,24,375100.000000,3.385573 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,8,10237.500000,10387.500000|10237.500000|10137.500000,24,246100.000000,2.193658 +6,ff1951e869c9480085d12c8d2f11f164,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,tlfloat,tloct,TLFloat Octuple,same workload,8,81812.500000,81775.000000|81812.500000|82037.500000,24,1965000.000000,17.530517 diff --git a/validation/metrics/data/windows/x86_64/detail/MSVC_f256_fastmath_accuracy.csv b/validation/metrics/data/windows/x86_64/detail/MSVC_f256_fastmath_accuracy.csv new file mode 100644 index 0000000..1b2441e --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MSVC_f256_fastmath_accuracy.csv @@ -0,0 +1,128 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,moderate,4097,10322096095657499311,219.944958,215.547580,215.029639,212.000000,3.029639,yes,Both,yes,-6.32659778225233051069632927545029475138801079375645295548611539482289480950893866e-02,-0.063265977822523305106963292754502947513880107937564529554861153949406008699572901,-0.063265977822523305106963292754502947513880107937564529554861153948228948095089387 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,wide_exponent,4098,10322096095657499308,219.514079,212.275332,212.017147,212.000000,0.017147,yes,Both,yes,2.47163553801407265315232159817868248210487207087397698019878061850401032407603178e-277,2.4716355380140726531523215981786824821048720708495655738821672043746801610949361e-277,2.4716355380140726531523215981786824821048720708739769801987806185040103240760318e-277 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,general,3770,10322096095657499292,225.979394,215.583815,215.297307,190.000000,25.297307,yes,Both,no,"representative lhs [-4.4462634936433036e+21,-123408.6026048271,6.8505536024347558e-12,-3.8028211704259384e-28] ; representative rhs [-1.5864490641473432e+22,-440328.06960285309,2.4443118063091801e-11,-1.3568656233637788e-27]",-20310754135116736403992.672207680164858397009037806754206012036634323297640103087,-20310754135116736403992.672207680164858397009037806754206012036634009406784094328 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,subnormal,326,10322096095657499292,243.500079,219.782158,216.532998,190.000000,26.532998,yes,Both,no,"broad lhs [-4.0912052790212279e-223,-1.1355375748093388e-239,6.3034998044016954e-256,-3.4991453092834664e-272] ; broad rhs [9.6732779190304605e-272,2.6848739673264345e-288,-1.4904044483712489e-304,8.2755995678408796e-321]",-4.0912052790212280311833034891221488165122802908340538768476180849661443443505261e-223,-4.0912052790212280311833034891221488165122802908340538768476180849392956046772617e-223 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,general,3791,10322096095657499292,226.123353,215.602949,215.220788,190.000000,25.220788,yes,Both,no,"representative lhs [155.03656083289641,4.3031289873845084e-15,-2.388716439863108e-31,1.3260039954183278e-47] ; representative rhs [2246405305209.4082,6.2350272312089677e-05,-3.4611353956265177e-21,1.9213161037848301e-37]",-2246405305054.3717046423758949106196822642348296102031142477192627199056314953875,-2246405305054.3717046423758949106196822642348296102031142477192626832977015519632 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,subnormal,305,10322096095657499292,243.910586,244.000000,216.728701,190.000000,26.728701,yes,Both,no,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239320146546075137762e-238,8.2656349351104667692680102118096923996066568310632957805469239319672919306477601e-238 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,general,4000,10322096095657499292,220.010524,216.259138,215.221541,190.000000,25.221541,yes,Both,yes,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60038241930403290903625769183688852217377918301809189,-156159778640594921198000750.60038241930403290903625769183688852217632267056740194 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,subnormal,100,10322096095657499292,221.469015,215.608028,215.608028,190.000000,25.608028,yes,Both,yes,"extreme lhs [-5.3809439414843993e+270,-1.4935119645133053e+254,8.2906568527791063e+237,-4.6022390636108503e+221] ; extreme rhs [-4.596668242019171e-261,-1.2758317297132313e-277,7.0822888093748442e-294,-3.931460051606543e-310]",24734414127.906804259564005392277744744307358869933187588284984254854603209456978,24734414127.906804259564005392277744744307358869933187588284984255162792737796103 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,general,4045,10322096095657499292,219.218459,215.287455,214.762066,190.000000,24.762066,yes,Both,yes,"representative lhs [2268851457486.2539,6.2973278188889589e-05,-3.49571916907152e-21,1.940513954563361e-37] ; representative rhs [0.00093095878597111432,2.5839296979055357e-20,-1.4343691223137255e-36,7.9623481270203769e-53]",2437112675315200.8552398842775006307979109182413214802574225974607596074455830965,2437112675315200.8552398842775006307979109182413214802574225974607050251573596225 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,subnormal,55,10322096095657499292,219.372138,215.374456,215.374456,190.000000,25.374456,yes,Both,yes,"extreme lhs [-6.5972954615428272e-272,-1.8311173304149739e-288,1.0164743105084273e-304,-5.6422296755070355e-321] ; extreme rhs [6.3421732060336743e-272,1.760306679874833e-288,-9.7716650319925213e-305,5.4248407913368871e-321]",-1.0402263147380523166730438190618890627910384611501752613620202130066222580107113,-1.040226314738052316673043819061889062791038461150175261362020212991383268138225 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,moderate,4099,10322096095657499356,219.883649,215.654212,215.160161,190.000000,25.160161,yes,Both,no,"[1.2843679126351581,3.5648370717432602e-17,-1.9788820980433443e-33,1.0985002341331286e-49] ; [-2.3308777059725987,-6.4694852418906121e-17,3.5912857365098039e-33,-1.9935640563405487e-49] ; [5.2042205184851724,1.4444613612122271e-16,-8.0183713069960479e-33,4.451090222510361e-49]",2.2105159846573199203800006655584861882250236763069688164874765011598446438714347,2.2105159846573199203800006655584861882250236763069688164874765011222755061934085 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,Both,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,wide_exponent,4096,10322096095657499357,225.262959,215.958051,215.096656,190.000000,25.096656,yes,Both,no,"[5.0695695241027842e+79,1.4070882026492271e+63,-7.8109086012980007e+46,4.3359252862018586e+30] ; [-1.285263546577847e-53,-3.5673229553052827e-70,1.9802620406268915e-86,-1.0992662561475861e-102] ; [-9312.4534885580761,-2.5847250696870095e-13,1.4348106423461901e-29,-7.9647990555497543e-46]",-651573290617131278652235925.796582770520137295580825262259286558273807300279549,-651573290617131278652235925.79658277052013729558082526225928655828537955033923283 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,moderate,4099,10322096095657499356,220.145544,216.285104,215.251190,190.000000,25.251190,yes,Both,yes,"[-0.36144099270550889,-1.0032002803625731e-17,5.5688802478447044e-34,-3.0913495362687196e-50]",0.13063959120794373790137808981865083109327726640612337325102002398854548322121324,0.13063959120794373790137808981865083109327726640612337325102002399063002164712949 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,wide_exponent,4096,10322096095657499357,220.095837,216.278909,215.290405,190.000000,25.290405,yes,Both,yes,"[6.7502995556670522e-41,1.8735844974546312e-57,-1.0400483238274423e-73,5.7734279791801363e-90]",4.5566544091238805246854811871109707929263286794390254922251627617554550230494986e-81,4.5566544091238805246854811871109707929263286794390254922251627618262131586719535e-81 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,near_one,4099,10322096095657499359,217.971795,215.406773,214.634335,190.000000,24.634335,yes,Both,yes,"[0.98524730223011503,2.7346105997142351e-17,1.5180138255933757e-33,8.426669504365412e-50]",1.0149735987467228735600712240168282012518927505403262882885405865459789646852313,1.0149735987467228735600712240168282012518927505403262882885405865211429570599582 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,wide_exponent,4096,10322096095657499357,217.877061,215.148048,214.625136,190.000000,24.625136,yes,Both,yes,"[2.2537520677334854e+105,6.2554185934856772e+88,3.4724548755780555e+72,1.9275996774193202e+56]",4.4370452913468106284563119957364553561271971862592280260566035243063949187169959e-106,4.4370452913468106284563119957364553561271971862592280260566035241971276114030617e-106 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,Both,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,moderate,4099,10322096095657499356,220.044956,215.606687,215.330917,190.000000,25.330917,yes,Both,yes,"[4.0249001329210348,1.1171341998464465e-16,-6.2013405513286293e-33,3.4424355318133533e-49]",4.0249999999999999999999999999999999999999999999999999999999999999392283664271373,4.025 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,wide_exponent,4096,10322096095657499357,229.647449,215.594292,215.067820,190.000000,25.067820,yes,Both,yes,"[3.0148718470081313e-08,8.3679503521064993e-25,-4.6451455749144106e-41,2.5785737850028193e-57]",3.0148720000000000000000000000000000000000000000000000000000000000546265902778824e-08,3.014872e-08 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,boundary,4112,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,boundary,4116,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815,0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,near_one,4099,10322096095657499359,217.932663,211.994703,210.121730,190.000000,20.121730,yes,Both,yes,"[0.68844842180625743,1.9108282228903967e-17,1.0607227445782445e-33,5.88819406887178e-50]",0.82972792034874748204635533162847142244462757631213868214367401578005505462467425,0.82972792034874748204635533162847142244462757631213868214367401531661654544094597 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,wide_exponent,4096,10322096095657499357,217.922910,211.307570,210.087010,190.000000,20.087010,yes,Both,yes,"[3.9723050169707548e-164,1.1025361226687388e-180,6.120304944338899e-197,3.3974517334661164e-213]",1.9930642280094123730625261552128791429300322769194722961440719680011680513374133e-82,1.9930642280094123730625261552128791429300322769194722961440719668608407694664803e-82 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,extreme_finite,4096,10322096095657499354,217.427345,211.612729,209.568118,190.000000,19.568118,yes,Both,yes,"[4.8277532298172217e+270,1.3399706982378861e+254,7.4383316075337441e+237,4.1291035077405081e+221]",2.1972148802102223696810058497941079031647215249309110296216736160980628789995527e+135,2.1972148802102223696810058497941079031647215249309110296216736142967757213404226e+135 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,subnormal,4100,10322096095657499350,218.287365,211.525055,210.033468,190.000000,20.033468,yes,Both,yes,"[3.9080211162696703e-308,0,0,0]",1.976871547741448539026969223351905164877787940969937902883633378772329452173061e-154,1.976871547741448539026969223351905164877787940969937902883633377598501465266526e-154 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,moderate,4099,10322096095657499356,219.365127,215.645937,215.009723,190.000000,25.009723,yes,Both,yes,"[1.493485632755414,4.1452553410798288e-17,-2.3010789613086162e-33,1.2773554221626827e-49]",1.1430547069429598916413447070301032665501071556717031589096757220734804391392631,1.143054706942959891641344707030103266550107155671703158909675722095042538408066 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,wide_exponent,4096,10322096095657499357,219.208097,215.522484,215.016400,190.000000,25.016400,yes,Both,yes,"[1.1715709721762959e-232,3.2517626707315058e-249,-1.8050908938313547e-265,1.002026735936387e-281]",4.8931613224357677778860487132523010245820505813115565125769210140394169679151093e-78,4.8931613224357677778860487132523010245820505813115565125769210141312932532907629e-78 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,moderate,4099,10322096095657499356,219.112713,215.484839,215.004532,190.000000,25.004532,yes,Both,yes,"[-1.9786093179304824,-5.4917440537607455e-17,3.0485303469167366e-33,-1.6922742912077385e-49] ; [-3.6930721609963868,-1.0250334361850929e-16,5.6900786093166561e-33,-3.1586281419952212e-49]",4.1897108276500243736137575509880054584975437763794929781439711577595180004814865,4.1897108276500243736137575509880054584975437763794929781439711578388357929538313 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,wide_exponent,4096,10322096095657499357,240.757017,216.577812,213.870154,190.000000,23.870154,yes,Both,yes,"[1.7122842369183985e-262,4.7525434613238062e-279,-2.6381915881467134e-295,1.4644905222663036e-311] ; [-3.0144374372983699e-265,-8.3667446229517548e-282,4.6444762607798811e-298,-2.578202241195858e-314]",1.712286890340601098411983682624579480459337744664421226746119949951155747074881e-262,1.7122868903406010984119836826245794804593377446644212267461199567085975614133203e-262 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,moderate,4099,10322096095657499356,219.189484,215.451091,214.398633,180.000000,34.398633,yes,Both,yes,"[3.0788955469009238,8.5456518164631729e-17,-4.7437897035336035e-33,2.6333322764213759e-49]",0.062656038467969832209321794216397982020542964949257118477705660287113605590702679,0.062656038467969832209321794216397982020542964949257118477705660288918880291683339 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,argument_reduction,4104,10322096095657499353,217.652696,208.567012,202.924770,180.000000,22.924770,yes,Both,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275296757802517104071329784271370594664228509e-21,-6.8137244848422015805151924052161601275296757802517104071329778687414703031432792e-21 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,quadrant_boundaries,4315,10322096095657499369,229.646501,212.548934,212.379963,180.000000,32.379963,yes,Both,yes,"below random k*pi/2, exponent 29, quadrant 0, offset bits 64 [1210367998.9931121,9.2232933347751439e-08,-3.3682212462958211e-24,-1.2421712039970458e-40]",-6.5614180700763253419843351526898064698409162314387092951719910697284566769595525e-11,-6.5614180700763253419843351526898064698409162314387092951719910704945087391437157e-11 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,moderate,4099,10322096095657499356,219.189230,215.566675,214.659688,180.000000,34.659688,yes,Both,-,"[-4.7784826804074854,-1.3262953736402309e-16,7.3624183063460464e-33,-4.086963160313565e-49]",0.066045590163581850028962366060015702301220111028377965182485758811610101682177111,0.066045590163581850028962366060015702301220111028377965182485758813198059701212943 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,argument_reduction,4104,10322096095657499353,232.574321,215.615638,208.674366,180.000000,28.674366,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1226611923604276e-17,1.4973849048591698e-33,-5.5622711043168264e-50]",5.7280337633839673822029261537694370705065754439038807480055172644370212115109926e-21,5.7280337633839673822029261537694370705065754439038807480055172731619522921872359e-21 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,quadrant_boundaries,4315,10322096095657499369,228.481158,215.246584,214.418649,180.000000,34.418649,yes,Both,-,"below random k*pi/2, exponent 17, quadrant 1, offset bits 118 [331709.77271825873,-2.2171970577571149e-11,3.7150708281135636e-28,2.3902355434839523e-45]",9.9820278769371660928200388523257556042420348105086346022094664206029498329582703e-31,9.9820278769371660928200388523257556042420348105086346022094664208865938945946123e-31 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,moderate,4099,10322096095657499356,216.913680,214.380555,213.767876,170.000000,43.767876,yes,Both,yes,"[-1.8439090508145544,-5.11787570882259e-17,2.8409917245523164e-33,-1.5770672126837562e-49]",3.5699982842328020406977403126653024345054964874710955004250341281438081184333917,3.5699982842328020406977403126653024345054964874710955004250341283030748914299905 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,argument_reduction,4104,10322096095657499353,216.861788,208.567009,202.924770,170.000000,32.924770,yes,Both,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275298339501045587830768442951450110146372361e-21,-6.8137244848422015805151924052161601275298339501045587830768437367494218513576644e-21 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,quadrant_boundaries,4315,10322096095657499369,217.360401,212.539526,212.267358,170.000000,42.267358,yes,Both,yes,"above random k*pi/2, exponent 45, quadrant 0, offset bits 64 [74082575456598.641,0.0077401429536521011,-4.4453663865375208e-20,-1.4406648841189425e-36]",4.0160244626898690108548055606217396545568030741292099390402822024483364340948252e-06,4.0160244626898690108548055606217396545568030741292099390402822019413987321784571e-06 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,near_one,4099,10322096095657499359,218.093670,215.379730,214.678988,180.000000,34.678988,yes,Both,yes,"[1.2911786355365591,3.5837406251919532e-17,-1.9893756781863299e-33,1.1043253412758746e-49]",0.91180735486029865720200031963596732813600677958830230748545472972914611914911937,0.91180735486029865720200031963596732813600677958830230748545472975077769821487466 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,moderate,4099,10322096095657499356,218.191260,215.364973,214.819019,180.000000,34.819019,yes,Both,yes,"[-1.6564773418506284,-4.5976482117311103e-17,2.5522074518952777e-33,-1.4167597383570195e-49]",-1.0276674796068157926881872460477795215568000040373694878361657581086397348641996,-1.0276674796068157926881872460477795215568000040373694878361657581307647820337298 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,near_one,4099,10322096095657499359,217.767500,215.258136,214.277602,180.000000,34.277602,yes,Both,yes,"[0.58860603672544787,1.6337099360148818e-17,-9.0689119326130649e-34,5.0342574179424254e-50] ; [0.85887750789320882,2.3838639614892877e-17,-1.3233103288097723e-33,7.3458479788444792e-50]",0.60080560244689944505254047976488516114993445003563706360562245792394141734857901,0.60080560244689944505254047976488516114993445003563706360562245794276700036835792 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,moderate,4099,10322096095657499356,218.042610,215.273196,214.779064,180.000000,34.779064,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50] ; [1.7502476823940025,4.8579131894765996e-17,-2.6966835372935758e-33,1.4969600766154699e-49]",0.072148061051439749393843263001597933397921930324099767924159658763635157216424841,0.072148061051439749393843263001597933397921930324099767924159658765232080678489465 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,extreme_finite,8,10322096095657499351,224.796125,218.394834,218.394834,180.000000,38.394834,yes,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961510720871532843,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,moderate,4099,10322096095657499356,217.555374,214.870821,214.404436,180.000000,34.404436,yes,Both,yes,"[-0.03874370615484779,-1.0753538658105852e-18,5.9694131072129129e-35,-3.313689937563487e-51]",-0.038753405574689053897038748698475312191059300104201567727902220547827930480850877,-0.038753405574689053897038748698475312191059300104201567727902220546715831868900725 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,boundary,4105,10322096095657499355,218.279597,215.666103,215.450088,180.000000,35.450088,yes,Both,yes,"[-0.9999994386132145,-2.7755560034015539e-17,1.5407430905564922e-33,-8.5528422708397013e-50]",-1.5697367166420567598613352554733454843585688705175173404668956843884396097624371,-1.5697367166420567598613352554733454843585688705175173404668956844102612619924983 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,moderate,4099,10322096095657499356,217.952479,214.769937,210.665918,180.000000,30.665918,yes,Both,-,"[0.99887415790514178,2.7724327220233818e-17,-1.5390093211072774e-33,8.5432179170301514e-50]",0.04745636757503406782865420252660601887412863134878995249846597602032373476016398,0.047456367575034067828654202526606018874128631348789952498465976002146233476892292 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,boundary,4105,10322096095657499355,214.108948,205.510139,192.466318,180.000000,12.466318,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863435425504615922399221269664356222070824068253018899150618e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,moderate,4099,10322096095657499356,217.426949,215.046491,214.489012,180.000000,34.489012,yes,Both,-,"[7.2668058682815229,2.0169437976118373e-16,-1.1196287217417818e-32,6.2151879295467938e-49]",1431.9692420599845796068868376110150600143493093499559422817931161935390354934173,1431.969242059984579606886837611015060014349309349955942281793116154785851743886 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,boundary,4099,10322096095657499291,216.095013,210.609597,209.170810,180.000000,29.170810,yes,Both,-,"[-602.51463003262006,-1.6723140373393066e-14,9.2832077432897595e-31,-5.1532154894894153e-47]",2.1439808940678330986168374863027594170304621312385699060007346626494830473999428e-262,2.1439808940678330986168374863027594170304621312385699060007348382095786861640128e-262 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,moderate,4099,10322096095657499356,218.020692,214.999773,214.215827,180.000000,34.215827,yes,Both,-,"[3.1052035729833225,8.6186712571859683e-17,-4.7843236357014531e-33,2.6558331288070464e-49]",8.6051692793502790320283451340709447945359060261526288089250361316953685910209515,8.6051692793502790320283451340709447945359060261526288089250361314139388957083351 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,boundary,4099,10322096095657499291,218.040030,214.973213,214.202868,180.000000,34.202868,yes,Both,-,"[104.10886087905146,2.8896013603855037e-15,-1.6040509811440805e-31,8.9042716596936548e-48]",21872072611204943785318953704535.848957757329524240581979950526538377674145297079,21872072611204943785318953704535.848957757329524240581979950526537655899871393765 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,moderate,4099,10322096095657499356,218.319190,214.883150,213.793932,180.000000,33.793932,yes,Both,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.69414327255271665612631015596788634386741426622153124768599904822325391377881959,0.69414327255271665612631015596788634386741426622153124768599904819284068360567441 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,cancellation,4098,10322096095657499336,235.991871,207.540568,207.000000,180.000000,27.000000,yes,Both,yes,"[3.6665372155917779e-270,1.0176685093487508e-286,-5.6491950525747228e-303,3.1359334672835601e-319]",3.666537215591778022742232576640266061184048842008439989892382592756081591049904e-270,3.6665372155917780227422325766402660611840488420084399108418792581566345227988971e-270 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,near_one,4099,10322096095657499359,216.923081,214.333783,213.252927,180.000000,33.252927,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.50793426433422243038604118757996243390013385433953431736902408052282282785799521,-0.50793426433422243038604118757996243390013385433953431736902408049044259492262108 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,wide_exponent,4096,10322096095657499357,218.159247,215.423349,214.787811,180.000000,34.787811,yes,Both,-,"[2.1976393587320462e-253,6.0996745397169545e-270,3.3859995583568084e-286,1.87960733552917e-302]",-581.7666447619842216491153422494362059260947919882070310469834418271313947370462,-581.76664476198422164911534224943620592609479198820703104698344181433242395383818 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,extreme_finite,4096,10322096095657499354,218.246513,215.340501,214.977417,180.000000,34.977417,yes,Both,-,"[6.7255270714277703e+270,1.8667087518597276e+254,1.0362315182919788e+238,5.7522404522501946e+221]",623.60388540574258032454540371734224443628132982427335034944077135074873546872386,623.60388540574258032454540371734224443628132982427335034944077133871895125605538 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,near_one,4099,10322096095657499359,216.831239,214.285380,213.192358,180.000000,33.192358,yes,Both,-,"[0.7496369857674211,2.0806606042739792e-17,1.1549986546477316e-33,6.4115304990049557e-50]",-0.41573596010411493045014267590719729760119796965409081364143571035067957416967793,-0.41573596010411493045014267590719729760119796965409081364143571037831861478590789 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,wide_exponent,4096,10322096095657499357,217.896906,215.177253,214.398808,180.000000,34.398808,yes,Both,-,"[1.7649452349949291e+168,4.8987070927345696e+151,2.7193287026242405e+135,1.5095306685887436e+119]",558.90354335945887268941714779171120602057251916893271728873264701130834705779937,558.90354335945887268941714779171120602057251916893271728873264699520691310276205 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,extreme_finite,4096,10322096095657499354,221.112240,215.319712,214.786513,180.000000,34.786513,yes,Both,-,"[6.8101574227838104e+300,1.8901983930241257e+284,1.0492708885224276e+268,5.8246234975324753e+251]",999.34611661399737932538483694865739304704641025692614772050877622807059417985481,999.34611661399737932538483694865739304704641025692614772050877625007617254075152 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,near_one,4099,10322096095657499359,216.850749,214.245682,213.257193,180.000000,33.257193,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.22059304816994049352958242449187881883781348866027603462218270842444120257078286,-0.2205930481699404935295824244918788188378134886602760346221827084104201683981848 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,wide_exponent,4096,10322096095657499357,217.861615,215.189987,214.497524,180.000000,34.497524,yes,Both,-,"[7.1469640060920858e+234,1.9836809989326703e+218,1.1011641592632406e+202,6.1126890175302627e+185]",234.85412159489045596003203173344408775668279869668572611682025536536168793387694,234.85412159489045596003203173344408775668279869668572611682025535904325560762789 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,extreme_finite,4096,10322096095657499354,217.633514,215.073798,214.220407,180.000000,34.220407,yes,Both,-,"[5.3758239790954964e+270,1.4920908894809616e+254,8.2827683016759667e+237,4.5978600380780314e+221]",270.73044504015011560346372915336203436416099326519770095672238014262874150583956,270.73044504015011560346372915336203436416099326519770095672238013380264152658546 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,moderate,4099,10322096095657499356,217.570462,214.787129,214.020088,180.000000,34.020088,yes,Both,yes,"[-0.25462100474624672,-7.0671525505618592e-18,3.9230577400860884e-34,-2.1777345149887542e-50]",-0.29386247149453246058352428487213904837677656724718288204078215844233971612393252,-0.29386247149453246058352428487213904837677656724718288204078215843133248548523474 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,cancellation,4098,10322096095657499336,236.076178,207.415037,207.000000,180.000000,27.000000,yes,Both,yes,"[-5.0621342944708729e-265,-1.4050245118665463e-281,7.7994528161848061e-298,-4.3295660482073704e-314]",-5.0621342944708730086760504274075663829189583933818324664504818055859676107573498e-265,-5.0621342944708730086760504274075663829189583933818324664512723106193136052280323e-265 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,near_one,4099,10322096095657499359,218.148772,215.130203,214.362894,180.000000,34.362894,yes,Both,yes,"[1.423134563497126,3.9499918988359527e-17,2.1926859765852584e-33,1.2171852284888254e-49] ; [1.1927685344842596,3.310597725082075e-17,1.8377509098288919e-33,1.0201566868089328e-49]",1.5233053480043329261431287201279001410110702760486984367539772844096336550706452,1.5233053480043329261431287201279001410110702760486984367539772843646426383376926 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,moderate,4099,10322096095657499356,215.525556,212.047897,211.143117,180.000000,31.143117,yes,Both,yes,"[7.7504743381693961,2.1511887655005213e-16,1.1941496488868227e-32,6.6288621752109849e-49] ; [6.7867863554598733,1.8837116187608508e-16,1.0456700054511108e-32,5.8046345810586807e-49]",1085628.0458183651737754568233825992695775685017622680386092038233740053608370142,1085628.0458183651737754568233825992695775685017622680386092038236727288616449863 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,moderate,4099,10322096095657499356,217.158561,214.415804,213.656994,190.000000,23.656994,yes,Both,no,"[-5.6684636004037738,-1.5733147008544706e-16,8.7336510293493687e-33,-4.848150230912434e-49]",-188043.1576659602046428792992413117498177671151403368538232084353655121126605512,-188043.15766596020464287929924131174981776711514033685382320843537457138843934032 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,wide_exponent,4096,10322096095657499357,217.192977,214.383216,213.812882,190.000000,23.812882,yes,Both,no,"[3156983632.9860682,8.7623897942647695e-08,-4.8641034501666178e-24,2.7001198222668209e-40]",3125405070844307632059635814309662493597686949184087401837672866916,3125405070844307632059635814309662493597686949184087401837672867051.1497698219492 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,quotient_reduction,4,10322096095657499383,237.431134,217.724535,217.724535,190.000000,27.724535,yes,Both,yes,"scaled-reduction gap 58 lhs [5.4783870128486342e+104,1.2515701024950248e+86,2.5644796350277343e+70,3.0488942297143002e+54] ; scaled-reduction gap 58 rhs [1.0992042367473471e+87,7.6430960252403863e+68,8.308036160429468e+52,-8.4044243641695015e+36]",8.2176097775156019844573783110329841337664065872688377479267466170896765365317513e+86,8.217609777515601984457378311032984133766406587268837747926746617066064704117403e+86 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,near_one,4099,10322096095657499359,217.088527,214.653889,213.844482,180.000000,33.844482,yes,Both,yes,"[0.76562636076402268,2.1250400349504614e-17,-1.1796341875261248e-33,6.5482851781324668e-50]",0.84264914336815803011264269143612462086913967383298160440244808238970820494154117,0.84264914336815803011264269143612462086913967383298160440244808235405953256955333 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,moderate,4099,10322096095657499356,216.956723,214.597984,213.993459,180.000000,33.993459,yes,Both,yes,"[0.054297296667996875,1.5070527233928231e-18,-8.3658231641737974e-35,4.6439647484041155e-51]",0.054323980450469496887448171808625498827811228200332436943033541994792104072246549,0.054323980450469496887448171808625498827811228200332436943033541996864828986916269 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,near_one,4099,10322096095657499359,217.861158,215.239353,214.487635,180.000000,34.487635,yes,Both,-,"[1.4303433203278892,3.9700002183670459e-17,-2.2037928250989968e-33,1.2233507679643134e-49]",2.2096804236627024779285628784238115118483853203461617013356271627432691873521909,2.2096804236627024779285628784238115118483853203461617013356271626834118164339315 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,moderate,4099,10322096095657499356,217.160103,214.737937,214.159072,180.000000,34.159072,yes,Both,-,"[6.9851955939094275,1.9387812449671103e-16,-1.0762397889369559e-32,5.9743309684776362e-49]",540.25933261817616200059910469729467236382875532751465730859323173250980707379319,540.25933261817616200059910469729467236382875532751465730859323171413182761114806 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,near_one,4099,10322096095657499359,218.404442,215.222392,214.209524,180.000000,34.209524,yes,Both,yes,"[0.51562981029195787,1.4311602189230828e-17,-7.9445351348799311e-34,4.4101029133436116e-50]",0.47432005334068853744838691469119725073611186863535411854720463894651210203082909,0.47432005334068853744838691469119725073611186863535411854720463896209252928278415 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,moderate,4099,10322096095657499356,219.852666,215.378850,214.042672,180.000000,34.042672,yes,Both,yes,"[-0.049004188243731761,-1.3601394522814103e-18,7.5502906831193558e-35,-4.1912532795059553e-51]",-0.048964999496442407695752174462954719514280073534987354591187902322123112147473692,-0.048964999496442407695752174462954719514280073534987354591187902320317513639311405 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,near_one,4099,10322096095657499359,216.635189,213.881562,212.956798,180.000000,32.956798,yes,Both,yes,"[1.1332197959754742,3.1453167736324843e-17,-1.7460015509132478e-33,9.6922556142756011e-50]",0.97250944030282146673684576741712972459065785505278761629557943342964766102358922,0.97250944030282146673684576741712972459065785505278761629557943335352570304596911 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,moderate,4099,10322096095657499356,217.749152,214.561309,213.166747,180.000000,33.166747,yes,Both,yes,"[-1.1129700329637249,-3.089112390785367e-17,1.7148018509523894e-33,-9.519062487985893e-50]",-0.95904342784556441854164089194266034008522852163619683195211288936138295400619663,-0.95904342784556441854164089194266034008522852163619683195211288929648167565369013 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,moderate,4099,10322096095657499275,218.344248,215.313498,214.386548,180.000000,34.386548,yes,Both,-,"[1.2091565801750435,3.3560836892183684e-17,-1.8630006921695854e-33,1.0341731316696386e-49]",0.63599796632531509013285885414670992566643851908950877932499299079883667837099078,0.63599796632531509013285885414670992566643851908950877932499299078035785994962717 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,boundary,4101,10322096095657499355,217.097508,214.442677,213.709421,180.000000,33.709421,yes,Both,-,"[1.0000006102559529,2.7755592553634159e-17,-1.5407448957579594e-33,8.552852291720866e-50]",0.0011047677501095367049219422532381969737795314787741324983406649673871900506886361,0.0011047677501095367049219422532381969737795314787741324983406649674385145712399472 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,moderate,4099,10322096095657499356,217.309730,214.164921,213.300563,180.000000,33.300563,yes,Both,yes,"[0.0664478289398438,1.8442977406342098e-18,-1.0237909079581275e-34,5.6831811920850375e-51]",0.066545884848946356015107328012468534613321875154290452987163116978656391412156697,0.066545884848946356015107328012468534613321875154290452987163116974551954049134186 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,boundary,4105,10322096095657499355,219.259597,215.988400,215.075845,180.000000,35.075845,yes,Both,yes,"[0.5,0,0,0]",0.54930614433405484569762261846126285232374527891137472586734716682864483823413374,0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,near_one,4099,10322096095657499359,206.773984,196.847186,196.755396,180.000000,16.755396,yes,Both,yes,"midpoint [1,0,0,0]",0.84270079294971486934122063508260925929606699796630290845993292736409039503759438,0.84270079294971486934122063508260925929606699796630290845993789783471725409601084 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,moderate,4099,10322096095657499356,218.790808,197.061585,196.771033,180.000000,16.771033,yes,Both,yes,"[-1.0144931263435488,-2.8157840679764146e-17,1.5630741523200512e-33,-8.6768045655108495e-50]",-0.84863022897531701967121795328975048026375710416395760800302401037790857858953723,-0.84863022897531701967121795328975048026375710416395760800302896186126856971311395 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,near_one,4099,10322096095657499359,204.316189,192.489437,192.327065,180.000000,12.327065,yes,Both,-,"upper endpoint [1.5,0,0,0]",0.033894853524689272933023738354052141318589520742363219550036458011854403217248196,0.033894853524689272933023738354052141318589520742363219550032153557867145576249274 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,moderate,4099,10322096095657499356,212.004213,191.066815,189.779688,180.000000,9.779688,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804748240804760826674822248354380927724048326045650379,0.0048523201680211414554273497804748240804760826674822248354416949961916711523801507 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,moderate,4099,10322096095657499323,211.903615,199.617279,199.225949,180.000000,19.225949,yes,Both,-,"[1.7460150498866698,4.8461652743155553e-17,-2.6901621343420086e-33,1.4933399707606258e-49]",-0.085381213564840179500933244532026946446305041549633331800426988753669607008088582,-0.085381213564840179500933244532026946446305041549633331800426897893008666204246091 +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,moderate,4099,10322096095657499320,209.040528,202.582542,202.457020,180.000000,22.457020,yes,Both,-,"[14.307075507958793,3.9710111609966271e-16,-2.2043540109909649e-32,1.2236622887134923e-48]",13896751262.208085922946362879642934303109153237904876709680644672275751079246188,13896751262.208085922946362879642934303109153237904876709680646247264671220863527 diff --git a/validation/metrics/data/windows/x86_64/detail/MSVC_f256_fastmath_benchmark.csv b/validation/metrics/data/windows/x86_64/detail/MSVC_f256_fastmath_benchmark.csv new file mode 100644 index 0000000..00cd9ff --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MSVC_f256_fastmath_benchmark.csv @@ -0,0 +1,86 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,40960,10.642618,10.607316|10.594185|10.597155|10.642618|10.710515|10.723514|10.665844,10608640,112968600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,40960,10.650442,10.650442|10.637721|10.646330|10.663549|10.647615|10.680381|10.718930,10895360,116183400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,40960,18.663885,18.697954|18.663885|18.644465|18.671542|18.670543|18.638028|18.656117,6307840,117724600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,40960,80.507812,80.894368|80.436198|80.507812,368640,29717100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,40960,24.520399,24.520399|24.510634|24.558105,1105920,27127900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,40960,2.316043,2.364614|2.315176|2.316043|2.326853|2.317152|2.311337|2.300463,43581440,101181400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,40960,2.304641,2.359705|2.318201|2.306631|2.302433|2.304641|2.274971|2.230201,45015040,103513900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,40960,18.267600,18.253396|18.258944|18.270930|18.255504|18.294012|18.267600|18.276034,6307840,115232000.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,4096,74.480975,74.599429|74.480975|74.456561,331776,24721400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,40960,4.329351,4.329664|4.329351|4.329181|4.329522|4.328812|4.318138|4.332389,24657920,106723200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,40960,4.105489,4.138083|4.124039|4.108887|4.092753|4.095195|4.105489|4.103501,27811840,114298500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,40960,7.918498,7.920380|7.926737|7.918498|7.915039|7.913564|7.913869|7.921041,13762560,108978100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,40960,0.867482,0.873019|0.875957|0.868800|0.867434|0.866856|0.867482|0.862697,129597440,112606200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,40960,5.186086,5.196898|5.196422|5.195408|5.181774|5.174703|5.186086|5.178318,22077440,114517600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,40960,5.166603,5.166603|5.164130|5.164749|5.166263|5.170775|5.167468|5.169384,22650880,117038300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,40960,7.590284,7.567019|7.654479|7.590284|7.622070|7.591529|7.589135|7.580231,14622720,111121700.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,40960,12.870199,12.926025|12.854818|12.897054|12.860514|12.860677|12.870199|12.958740,8601600,110872200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,40960,9.571359,9.514625|9.556827|9.588274|9.626639|9.607980|9.571359|9.557292,12042240,115301000.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,4096,8.276418,8.289754|8.277855|8.289856|8.276418|8.236925|8.230822|8.225590,13647872,112745500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,4096,6.885068,6.912248|6.885068|6.844882|6.842851|6.862210|7.153061|6.937223,16199680,112096100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,4096,126.870728,126.968384|126.870728|126.799011,196608,24945500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,4096,179.817708,179.817708|179.787191|180.314128,147456,26538100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,2048,67.385101,67.537689|67.385101|67.319489,393216,26508300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,2048,96.136068,96.101345|96.242405|96.136068,276480,26586300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,2048,96.763238,96.764323|96.763238|96.545139,276480,26733100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,40960,18.236750,18.244629|18.232200|18.223655|18.236750|18.220770|18.256725|18.263050,6307840,115053000.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,40960,4.945054,4.939936|4.952466|4.943495|4.945054|4.949789|4.939171|4.958790,23797760,117726500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,40960,4.864172,4.861012|4.907485|4.864918|4.870519|4.844123|4.834789|4.864172,24371200,118538100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,40960,4.871324,4.886432|4.875201|4.876953|4.871324|4.860122|4.871180|4.867819,24371200,118754000.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,40960,10.398387,10.397448|10.398387|10.409468|10.407965|10.422426|10.392691|10.384115,11182080,116313600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,40960,1.555755,1.554492|1.555755|1.555309|1.556867|1.556259|1.558871|1.554549,73687040,114658100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,40960,2.093436,2.094018|2.094271|2.093373|2.093436|2.092475|2.099129|2.093145,55336960,115890200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f256,bl::nextafter,40960,8.150830,8.173682|8.194873|8.168164|8.150830|8.140479|8.150049|8.120752,14336000,116938400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f256,bl::nexttoward,40960,8.116064,8.141455|8.097998|8.106250|8.116748|8.116064|8.114453|8.124658,14336000,116362500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,40960,0.774325,0.772533|0.772723|0.774325|0.774874|0.775900|0.775106|0.773481,154255360,119414400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,40960,0.774550,0.774746|0.778772|0.774550|0.771872|0.775670|0.773288|0.774208,153681920,119061900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,40960,2.021346,2.049032|2.027877|2.021346|2.015570|2.012247|2.023422|2.018363,55623680,112581200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,40960,2.046704,2.040084|2.028003|2.042727|2.046704|2.094462|2.093430|2.054771,55623680,114427300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,40960,2.094857,2.094857|2.093121|2.098199|2.134220|2.109257|2.090849|2.074529,53616640,112556900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,40960,2.014286,2.029903|2.022139|2.018716|2.014047|2.014286|2.010662|2.011140,55623680,112208000.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,40960,122.149658,122.220459|122.017822|122.149658,245760,30014500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,1024,344.421387,344.091797|345.426432|344.421387,73728,25410100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,4096,172.597249,172.924805|172.312419|172.597249,147456,25452600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,1024,881.894531,881.943359|881.894531|879.404297,30720,27066800.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,1024,881.650391,882.041016|881.083984|881.650391,30720,27082500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,fltx,fltx,fltx bl::f256,bl::sincos,1024,1081.335449,1081.323242|1082.104492|1081.335449,24576,26581100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,1024,1143.798828,1144.372559|1141.967773|1143.798828,24576,28099700.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,1024,879.902344,881.933594|878.496094|879.902344,30720,27037000.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,1024,959.364149,959.364149|960.091146|947.482639,27648,26421700.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,1024,1336.983817,1336.983817|1341.015625|1333.551897,21504,28754800.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,1024,1347.893415,1358.956473|1347.181920|1347.893415,21504,29059300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,1024,1006.835938,1006.814236|1009.244792|1006.835938,27648,27859000.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,1024,826.152344,828.320312|826.025391|826.152344,30720,25400300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,1024,1009.309896,1009.309896|1010.568576|1008.517795,27648,27909700.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,1024,1670.195312,1678.476562|1667.968750|1670.195312,15360,25685200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,1024,1704.042969,1704.628906|1704.042969|1703.593750,15360,26174800.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,1024,1719.257812,1719.257812|1718.046875|1719.707031,15360,26403900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,1024,1723.984375,1724.492188|1723.984375|1721.972656,15360,26472700.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,1024,2549.389648,2549.389648|2558.032227|2546.289062,12288,31349600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,4096,111.808697,111.808697|111.806127|112.051552,233472,26122900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,fltx,fltx,fltx bl::f256,bl::product_sum,4096,42.935689,42.935689|42.972310|42.907206,589824,25326100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,1024,1241.782924,1241.364397|1241.782924|1243.429129,21504,26712100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,1024,1244.503348,1244.503348|1239.941406|1246.902902,21504,26746300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,1024,1222.251674,1222.237723|1224.804688|1222.251674,21504,26301500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,1024,2613.476562,2615.771484|2613.476562|2609.838867,12288,32108900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,1024,2413.354492,2414.233398|2407.250977|2413.354492,12288,29633900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,1024,2192.626953,2195.458984|2190.576172|2192.626953,12288,26946200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,128,8880.133929,8897.209821|8878.459821|8880.133929,2688,23883600.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,128,8882.226562,8880.566406|8882.226562|8882.714844,3072,27285000.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,128,8335.058594,8341.015625|8335.058594|8334.863281,3072,25611200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,128,9361.230469,9361.230469|9369.726562|9360.644531,3072,28765800.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,4099,355.387493,355.041880|355.985200|355.387493,73782,26227400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,4099,299.856672,300.564162|299.124787|299.856672,98376,29497900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,4099,430.329349,429.026592|430.329349|430.368383,61485,26432900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,mt19937_64,fltx,fltx,fltx bl::f256,bl::mt19937_64,64,2.076955,2.128400|2.076811|2.076955,12525888,26229900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,uniform_real,fltx,fltx,fltx bl::f256,bl::uniform_real,64,19.162196,19.468887|19.162196|18.994968,1404672,26981900.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,normal,fltx,fltx,fltx bl::f256,bl::normal,64,265.443979,266.809578|265.345528|265.443979,94464,25114800.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f256,same workload,64,155.240629,154.659315|155.240629|155.247675,170304,26405500.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f256,same workload,64,1804.626623,1802.232143|1804.626623|1805.722403,14784,26673200.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f256,same workload,64,123.980917,123.980917|124.401536|123.824243,212544,26370100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f256,same workload,64,557.211538,557.287449|555.876771|557.211538,47424,26405300.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f256,same workload,64,394.940243,394.940243|394.626763|395.013715,61248,24184400.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,fltx,fltx,fltx bl::f256,same workload,8,219.373504,218.630287|219.645351|219.373504,120288,26369100.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f256,same workload,8,8662.500000,8762.500000|8662.500000|8662.500000,24,208700.000000, +6,38734516d65c4154a947aaeb3ae92c72,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,fltx,fltx,fltx bl::f256,same workload,8,4656.673729,4658.580508|4656.673729|4645.921610,5664,26358700.000000, diff --git a/validation/metrics/data/windows/x86_64/detail/MSVC_fastmath_run.json b/validation/metrics/data/windows/x86_64/detail/MSVC_fastmath_run.json new file mode 100644 index 0000000..f7f2d00 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MSVC_fastmath_run.json @@ -0,0 +1,154 @@ +{ + "accuracy_parallel": true, + "accuracy_samples": 4096, + "architecture": "x86_64", + "benchmark_corpus_policy": "adaptive-v1", + "benchmark_fast_minimum_trial_ms": 15, + "benchmark_fast_threshold_ns": 20, + "benchmark_fast_trials": 7, + "benchmark_maximum_row_ms": 5000, + "benchmark_minimum_trial_ms": 8, + "benchmark_ordinary_trials": 3, + "benchmark_policy": "adaptive-v2", + "benchmark_samples": { + "f128": 8192, + "f256": 4096 + }, + "benchmark_slow_threshold_ns": 10000, + "benchmark_trials": 7, + "compiler": "MSVC", + "configuration": { + "build": { + "architecture": "x86_64", + "compiler-id": "MSVC", + "compiler-version": "19.51.36244.0", + "config": "Release", + "flags-hash": "a7783233a2a1c2360aa486f3fcd069edd7b754c80c337bb23b401ee04591097b", + "frontend-variant": "MSVC", + "optimized": "1", + "processor": "AMD64", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Windows" + }, + "consumer": { + "arm64": "0", + "fast-math": "on", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "1" + }, + "harness": { + "qdpp": "on", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "available", + "simd": "on", + "tu-x86-fma": "0", + "x86": "1" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "0", + "f256-simd": "1", + "msvc-guarded": "1", + "neon": "0", + "runtime-check": "1", + "runtime-path": "1", + "scalar-x86": "0", + "sse2": "1", + "trig-simd": "1", + "wasm-simd": "0" + } + }, + "consumer_mode": "fastmath", + "created_utc": "2026-08-15T15:56:36.183368+00:00", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-msvc-release\\validation\\fltx_accuracy_fastmath.exe", + "sha256": "6320c964a4a5b80fa3059f7bb596a67e64c84fbf97db3e2015c14cc384ac5602", + "wasm-sha256": "not-present" + }, + "benchmark": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-msvc-release\\validation\\fltx_benchmark_fastmath.exe", + "sha256": "fe0f59a0fc6bacbb11499f13a0ebe90d6ed0a5f739422fff1e3798c174c6444d", + "wasm-sha256": "not-present" + } + }, + "host": { + "machine": "AMD64", + "node": "not-used", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "implementations": { + "f128": [ + { + "id": "fltx", + "label": "fltx bl::f128", + "short_label": "fltx" + } + ], + "f256": [ + { + "id": "fltx", + "label": "fltx bl::f256", + "short_label": "fltx" + } + ] + }, + "outputs": { + "MSVC_f128_fastmath.csv": "eaf429725944bbdad39761cf0e04ffa37504a8ec70d57cce7bdc396925f59cd4", + "MSVC_f256_fastmath.csv": "67ee789e394163226d120be5b2a041d752732604c6fe9926a6d749217ea97c32", + "detail/MSVC_f128_fastmath_accuracy.csv": "c4f935551f5c7a7227aebed4136859f2e65ab6cc7ab25058e6bbab18a8afdae6", + "detail/MSVC_f128_fastmath_benchmark.csv": "b6492499b46d61963032c12d67ecab3da71ccec5ef4ed0dc0c543af98a4b26aa", + "detail/MSVC_f256_fastmath_accuracy.csv": "98413185f0bb3d65ef9b0496d5dd4e9a5e9ecee5c9182d3691f806312f375c2f", + "detail/MSVC_f256_fastmath_benchmark.csv": "a4b17a794584aed02eb5a672bfcf1a64ccc8e2ad6abd9054015b20b23feb62c6" + }, + "phases": { + "f128.accuracy": { + "output": "MSVC_f128_fastmath_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f128.benchmark": { + "output": "MSVC_f128_fastmath_benchmark.csv", + "return_code": 0, + "status": "passed" + }, + "f256.accuracy": { + "output": "MSVC_f256_fastmath_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f256.benchmark": { + "output": "MSVC_f256_fastmath_benchmark.csv", + "return_code": 0, + "status": "passed" + } + }, + "phases_requested": [ + "accuracy", + "benchmark" + ], + "platform": "windows", + "precisions": [ + "f128", + "f256" + ], + "run_id": "38734516d65c4154a947aaeb3ae92c72", + "sample_mode": "standard", + "schema_version": "6", + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete" +} diff --git a/validation/metrics/data/windows/x86_64/detail/MSVC_run.json b/validation/metrics/data/windows/x86_64/detail/MSVC_run.json new file mode 100644 index 0000000..22331c9 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MSVC_run.json @@ -0,0 +1,184 @@ +{ + "accuracy_parallel": true, + "accuracy_samples": 4096, + "architecture": "x86_64", + "benchmark_corpus_policy": "adaptive-v1", + "benchmark_fast_minimum_trial_ms": 15, + "benchmark_fast_threshold_ns": 20, + "benchmark_fast_trials": 7, + "benchmark_maximum_row_ms": 5000, + "benchmark_minimum_trial_ms": 8, + "benchmark_ordinary_trials": 3, + "benchmark_policy": "adaptive-v2", + "benchmark_samples": { + "f128": 8192, + "f256": 4096 + }, + "benchmark_slow_threshold_ns": 10000, + "benchmark_trials": 7, + "compiler": "MSVC", + "configuration": { + "build": { + "architecture": "x86_64", + "compiler-id": "MSVC", + "compiler-version": "19.51.36244.0", + "config": "Release", + "flags-hash": "a7783233a2a1c2360aa486f3fcd069edd7b754c80c337bb23b401ee04591097b", + "frontend-variant": "MSVC", + "optimized": "1", + "processor": "AMD64", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Windows" + }, + "consumer": { + "arm64": "0", + "fast-math": "off", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "1" + }, + "harness": { + "qdpp": "on", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "available", + "simd": "on", + "tu-x86-fma": "0", + "x86": "1" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "0", + "f256-simd": "1", + "msvc-guarded": "1", + "neon": "0", + "runtime-check": "1", + "runtime-path": "1", + "scalar-x86": "0", + "sse2": "1", + "trig-simd": "1", + "wasm-simd": "0" + } + }, + "consumer_mode": "strict", + "created_utc": "2026-08-15T15:54:19.613451+00:00", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-msvc-release\\validation\\fltx_accuracy.exe", + "sha256": "4ba63c29232cb5d0d74635804780276bdf11d4529a230167a9310b851eb0b829", + "wasm-sha256": "not-present" + }, + "benchmark": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-msvc-release\\validation\\fltx_benchmark.exe", + "sha256": "7900599869eb450db06a3a7e01f2f19c098456b8d756488d26a334108d8d40d5", + "wasm-sha256": "not-present" + } + }, + "host": { + "machine": "AMD64", + "node": "not-used", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "implementations": { + "f128": [ + { + "id": "fltx", + "label": "fltx bl::f128", + "short_label": "fltx" + }, + { + "id": "qdpp", + "label": "qdpp dd_real", + "short_label": "ddreal" + }, + { + "id": "cppdd", + "label": "boost::multiprecision::cpp_double_double", + "short_label": "cppdd" + }, + { + "id": "tlfloat", + "label": "TLFloat Quad", + "short_label": "tlquad" + } + ], + "f256": [ + { + "id": "fltx", + "label": "fltx bl::f256", + "short_label": "fltx" + }, + { + "id": "qdpp", + "label": "qdpp qd_real", + "short_label": "qdreal" + }, + { + "id": "mpfr64", + "label": "boost::multiprecision::mpfr_float_backend<64>", + "short_label": "mpfr64" + }, + { + "id": "tlfloat", + "label": "TLFloat Octuple", + "short_label": "tloct" + } + ] + }, + "outputs": { + "MSVC_f128.csv": "7971934eac5c75c9f3118579aefb1600a6d0e9eef1bdedca0ce232c9aa81db45", + "MSVC_f256.csv": "619f5545eb06903c3b0aff4a351c27d2894738b61b78785c253b73f85982391d", + "detail/MSVC_f128_accuracy.csv": "9cc5b048a2cbb469fd7326cf6a3908047762d3bb78a3a057af9d9a050974f1c9", + "detail/MSVC_f128_benchmark.csv": "85f446cfac78c3cfb7d5e8168dff2adb00a7371c02fcf8471bc85953570e02cf", + "detail/MSVC_f256_accuracy.csv": "c185892d72eec1edcb9457c86db0998053b384ba4801aefbc0225be6248f129c", + "detail/MSVC_f256_benchmark.csv": "e26e04f0e637897ca14f6c4f92aff4a63acb65bf2589926ad9116403f6c427dc" + }, + "phases": { + "f128.accuracy": { + "output": "MSVC_f128_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f128.benchmark": { + "output": "MSVC_f128_benchmark.csv", + "return_code": 0, + "status": "passed" + }, + "f256.accuracy": { + "output": "MSVC_f256_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f256.benchmark": { + "output": "MSVC_f256_benchmark.csv", + "return_code": 0, + "status": "passed" + } + }, + "phases_requested": [ + "accuracy", + "benchmark" + ], + "platform": "windows", + "precisions": [ + "f128", + "f256" + ], + "run_id": "ff1951e869c9480085d12c8d2f11f164", + "sample_mode": "standard", + "schema_version": "6", + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete" +} diff --git a/validation/metrics/data/windows/x86_64/detail/MinGW_f128_accuracy.csv b/validation/metrics/data/windows/x86_64/detail/MinGW_f128_accuracy.csv new file mode 100644 index 0000000..f406f88 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MinGW_f128_accuracy.csv @@ -0,0 +1,448 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,moderate,4097,10322096095657499311,109.950521,107.250365,107.040693,106.000000,1.040693,yes,Both,yes,-2.472067804890653694736606692562736837036787645394e-04,-0.00024720678048906536947366066925627220254736992061971280405933562914519934341009422,-0.0002472067804890653694736606692562736837036787645394 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,qdpp,ddreal,qdpp dd_real,qdpp read,moderate,4097,10322096095657499311,106.830416,104.375370,103.521956,,,,NaN,yes,-8.588723799651326893003606507151380025417593648874e-19,-8.5887237996513268930036065071519698388651731130205141161512619653494877453463251e-19,-8.588723799651326893003606507151380025417593648874e-19 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,moderate,4097,10322096095657499311,107.925004,106.160305,106.000000,,,,Both,no,1.0000000000000000000000000000000123259516440783094595582588325435348386438505485784844495356082916259765625,1,1.0000000000000000000000000000000123259516440783094595582588325435348386438505486 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,moderate,4097,10322096095657499311,114.919497,113.157032,113.020059,,,,No,no,-2.472067804890653694736606692562736837036787645394e-04,-0.00024720678048906536947366066925627370718013897314772300404210327361966695130200689,-0.0002472067804890653694736606692562736837036787645394 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,wide_exponent,4098,10322096095657499308,109.923010,107.051396,106.003381,106.000000,0.003381,yes,Both,yes,-4.215228812298638183537364477017984307424253045187e-293,-4.2152288122986381835373644770182307620164082432452873068526743823738143144126931e-293,-4.215228812298638183537364477017984307424253045187e-293 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,qdpp,ddreal,qdpp dd_real,qdpp read,wide_exponent,4098,10322096095657499308,98.230238,0.000000,0.000000,,,,NaN,yes,9.801547763699694900556401135347989457052087638272e-278,nan,9.801547763699694900556401135347989457052087638272e-278 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,wide_exponent,4098,10322096095657499308,106.283030,0.000000,0.000000,,,,Both,no,4.106386782837618869142465736384079482165950265901e-297,0,4.106386782837618869142465736384079482165950265901e-297 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,wide_exponent,4098,10322096095657499308,114.945626,113.184622,113.027719,,,,No,no,-6.994944574485638725989218380619056352714442512346e+274,-6.9949445744856387259892183806190570134846365830973741407546647660305377989961645e+274,-6.994944574485638725989218380619056352714442512346e+274 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,qdpp,ddreal,qdpp dd_real,qdpp to_string,moderate,4099,10322096095657499356,113.984289,107.925749,107.763341,,,,Both,no,"[2.8197433737124644,7.8263600425744884e-17,-4.3445025591362587e-33,2.4116833858479951e-49]",2.819743373712464496453993615178836e+00,2.8197433737124644964539936151788462379117802656936538548058089354714228491616268 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,moderate,4099,10322096095657499356,112.006721,106.046153,106.003594,,,,Both,no,"[4.0283050850804027,1.1180792639177158e-16,-6.2065867107869756e-33,3.4453477353241089e-49]",4.028305085080402859429446057471084e+00,4.0283050850804028594294460574710344708404448549180543678577390200729047009531314 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,moderate,4099,10322096095657499356,110.801332,107.893373,107.362665,,,,Both,yes,"[1.008688938141546,2.7996742095236117e-17,-1.5541313844311742e-33,8.6271622314403006e-50]",1.00868893814154606005353659707718,1.0086889381415460600535365970771848347585370420395131047593302586751207172710565 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,qdpp,ddreal,qdpp dd_real,qdpp to_string,wide_exponent,4096,10322096095657499357,104.905428,102.378174,102.257899,,,,Both,no,"[5.1062396004606193e+260,1.4172661934210349e+244,-7.8674077997944175e+227,4.3672886417236531e+211]",5.106239600460619422853136150472774e+260,5.106239600460619422853136150471931817526062608103033112808468173689091334840783e+260 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,wide_exponent,4096,10322096095657499357,109.529692,106.034942,105.994061,,,,Both,no,"[1.570745732098147e-207,4.3596951940176515e-224,-2.4201169923730179e-240,1.3434348036095544e-256]",1.570745732098147052789232581064327e-207,1.570745732098147052789232581064346440801824340244516345502860090506962770321629e-207 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,wide_exponent,4096,10322096095657499357,110.510134,107.628363,107.304630,,,,Both,yes,"[-1.0005623436112949e+24,-27771183.786254175,1.5416103830298108e-09,-8.5576567112045135e-26]",-1000562343611294930157871.78625418,-1000562343611294930157871.786254175007343292236328125 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,qdpp,ddreal,qdpp dd_real,qdpp write,moderate,4099,10322096095657499356,113.984289,107.925749,107.763341,,,,Both,no,"[2.8197433737124644,7.8263600425744884e-17,-4.3445025591362587e-33,2.4116833858479951e-49]",2.819743373712464496453993615178836e+00,2.8197433737124644964539936151788462379117802656936538548058089354714228491616268 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,qdpp,ddreal,qdpp dd_real,qdpp write,wide_exponent,4096,10322096095657499357,104.905428,102.378174,102.257899,,,,Both,no,"[5.1062396004606193e+260,1.4172661934210349e+244,-7.8674077997944175e+227,4.3672886417236531e+211]",5.106239600460619422853136150472774e+260,5.106239600460619422853136150471931817526062608103033112808468173689091334840783e+260 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,qdpp,ddreal,qdpp dd_real,qdpp operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,qdpp,ddreal,qdpp dd_real,qdpp operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,qdpp,ddreal,qdpp dd_real,qdpp operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,tlfloat,tlquad,TLFloat Quad,TLFloat operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,qdpp,ddreal,qdpp dd_real,qdpp operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,qdpp,ddreal,qdpp dd_real,qdpp operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,tlfloat,tlquad,TLFloat Quad,TLFloat operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,qdpp,ddreal,qdpp dd_real,qdpp operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,general,3845,10322096095657499292,119.108587,106.483519,105.736235,90.000000,15.736235,yes,Both,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,qdpp,ddreal,qdpp dd_real,qdpp operator+,general,3845,10322096095657499292,119.108587,106.483519,105.736235,,,,NaN,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,general,3845,10322096095657499292,119.108587,106.483519,105.736235,,,,Both,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,general,3845,10322096095657499292,125.830155,113.252951,113.031307,,,,No,no,"representative lhs [66971.586500767997,1.8588349332206987e-12,-1.0318606709195925e-28,5.7279773753004665e-45] ; representative rhs [2.1043957799031432,5.8408716194312071e-17,-3.2423350778860755e-33,1.7998575285094606e-49]",66973.690896547901769622371152765318940018706501688624296419333203900237094785552,66973.690896547901769622371152765325250905948269783067590247855466190074480437033 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,subnormal,251,10322096095657499292,inf,inf,inf,90.000000,inf,yes,Both,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312,7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,qdpp,ddreal,qdpp dd_real,qdpp operator+,subnormal,251,10322096095657499292,inf,inf,inf,,,,NaN,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312,7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,subnormal,251,10322096095657499292,inf,inf,inf,,,,Both,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,subnormal,251,10322096095657499292,inf,inf,inf,,,,No,no,"subnormal lhs [-5.068915900072853e-319,0,0,0] ; subnormal rhs [7.3329396368948017e-312,0,0,0]",7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312,7.3329391300032116817271977451970241583891745885617573703440989474589295742438286e-312 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,general,3844,10322096095657499292,118.876961,106.530508,105.744857,90.000000,15.744857,yes,Both,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,qdpp,ddreal,qdpp dd_real,qdpp operator-,general,3844,10322096095657499292,118.876961,106.530508,105.744857,,,,NaN,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,general,3844,10322096095657499292,118.876961,106.530508,105.744857,,,,Both,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,general,3844,10322096095657499292,126.002774,113.274079,113.013310,,,,No,no,"representative lhs [547185574853.96362,1.5187450598640562e-05,-8.4307286699839347e-22,4.6799945418917936e-38] ; representative rhs [-7665751255.1039944,-2.1276733861164116e-07,1.1810959910743055e-23,-6.556399817915812e-40]",554851326109.06763281659977318970354064704610802527540158735064323991537094116211,554851326109.06763281659977318970348770748690463150420981719435076229274272918701 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,subnormal,252,10322096095657499292,inf,inf,inf,90.000000,inf,yes,Both,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310,-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,qdpp,ddreal,qdpp dd_real,qdpp operator-,subnormal,252,10322096095657499292,inf,inf,inf,,,,NaN,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310,-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,subnormal,252,10322096095657499292,inf,inf,inf,,,,Both,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,subnormal,252,10322096095657499292,inf,inf,inf,,,,No,no,"subnormal lhs [6.8906477374163952e-314,0,0,0] ; subnormal rhs [1.8251310352812518e-310,0,0,0]",-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310,-1.8244419705075101604481249227439087604387683067350288086388370214058649697709132e-310 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,general,4092,10322096095657499292,108.673668,105.665876,105.380753,90.000000,15.380753,yes,Both,yes,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60037994384765625,-156159778640594921198000750.60038290050850297752267811067325203046404306830015704 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,qdpp,ddreal,qdpp dd_real,qdpp operator*,general,4092,10322096095657499292,108.673668,105.665876,105.380753,,,,NaN,no,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60037994384765625,-156159778640594921198000750.60038290050850297752267811067325203046404306830015704 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,general,4092,10322096095657499292,108.517210,105.172405,104.685792,,,,Both,no,"broad lhs [-8038039671158.3145,-0.00022310041789425956,1.2384561037485062e-20,-6.8748124068457664e-37] ; broad rhs [2.5635359082663138e-69,7.1152414745265618e-86,-3.9497524553936191e-102,2.1925530587738712e-118]",-2.0605803329083492881294378674856916780067042740122006434502346656412091808499997e-56,-2.0605803329083492881294378674857548356708679074621085271346648345255418966878113e-56 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,general,4092,10322096095657499292,114.944521,113.125729,113.004612,,,,No,no,"structured lhs [6.7508285404035795e-17,1.8737313202131732e-33,-1.0401298268309784e-49,5.7738804117356459e-66] ; balanced-product rhs [14812996567977088,0.41114324633653965,-2.2823034925097943e-17,1.2669329432833911e-33]",1.0000000000000000329652822598848238397673215012480593411198684057546474598932029,1.000000000000000032965282259884823743778146023579451637148032704768423970088877 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,subnormal,8,10322096095657499292,123.430323,107.640342,107.640342,90.000000,17.640342,yes,Both,yes,"extreme lhs [5.3610920538229009e+270,1.4880019588222884e+254,-8.2600701768591933e+237,4.5852600476843326e+221] ; extreme rhs [2.8682136140660301e-295,7.9608919846980822e-312,-0,0]",1.5376757215036059473819023136396346852543747719615695276077139367073548105554037e-24,1.5376757215036059473819023136396286054027234522232977278134529923886643804961882e-24 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,qdpp,ddreal,qdpp dd_real,qdpp operator*,subnormal,8,10322096095657499292,123.430323,107.640342,107.640342,,,,NaN,no,"extreme lhs [5.3610920538229009e+270,1.4880019588222884e+254,-8.2600701768591933e+237,4.5852600476843326e+221] ; extreme rhs [2.8682136140660301e-295,7.9608919846980822e-312,-0,0]",1.5376757215036059473819023136396346852543747719615695276077139367073548105554037e-24,1.5376757215036059473819023136396286054027234522232977278134529923886643804961882e-24 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,subnormal,8,10322096095657499292,123.759111,108.124902,108.124902,,,,Both,no,"extreme lhs [4.6055401956920925e+270,1.2782941915235026e+254,-7.0959582183699609e+237,3.9390480979062175e+221] ; extreme rhs [-2.5697135742832743e-293,-7.1323879421527558e-310,0,-0]",-1.1834919157777218149998406915973471377624231448348574550693011367000657931522837e-22,-1.1834919157777218149998406915973504822263386136173231246119304206039636122242069e-22 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,subnormal,8,10322096095657499292,129.709469,113.478226,113.478226,,,,No,no,"extreme lhs [4.6055401956920925e+270,1.2782941915235026e+254,-7.0959582183699609e+237,3.9390480979062175e+221] ; extreme rhs [-2.5697135742832743e-293,-7.1323879421527558e-310,0,-0]",-1.1834919157777218149998406915973504004146571440971208102163557649738436437344127e-22,-1.1834919157777218149998406915973504822263386136173231246119304206039636122242069e-22 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,general,4096,10322096095657499292,110.882649,105.971646,105.124683,90.000000,15.124683,yes,Both,yes,"representative lhs [3.8069729471352109e-08,1.05664725500865e-24,-5.8655705570878625e-41,3.2560457425211756e-57] ; representative rhs [-10239996542.103203,-2.8421699832812405e-07,1.5777212776686647e-23,-8.7581124445438569e-40]",-3.717748274115425677507007818785488818087130701795158032304321273801830518128672e-18,-3.7177482741154256775070078187854047565702465103661629499646177206025402808246684e-18 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,qdpp,ddreal,qdpp dd_real,qdpp operator/,general,4096,10322096095657499292,110.709255,106.129356,105.462052,,,,NaN,no,"representative lhs [2304839803122757,0.06397215543748494,-3.5511679950797592e-18,1.9712942362247516e-34] ; representative rhs [-8.3386726388707522e-25,-2.3144465896215306e-41,1.284775946531497e-57,-7.1319391866192352e-74]",-2764036799308726961546172644065389051904,-2764036799308726961546172644065339586378.6678437169004336514100795996282854437548 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator/,general,4096,10322096095657499292,110.882649,105.971646,105.124683,,,,NaN,no,"representative lhs [3.8069729471352109e-08,1.05664725500865e-24,-5.8655705570878625e-41,3.2560457425211756e-57] ; representative rhs [-10239996542.103203,-2.8421699832812405e-07,1.5777212776686647e-23,-8.7581124445438569e-40]",-3.717748274115425677507007818785488818087130701795158032304321273801830518128672e-18,-3.7177482741154256775070078187854047565702465103661629499646177206025402808246684e-18 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,general,4096,10322096095657499292,114.933605,113.147176,113.003421,,,,No,no,"representative lhs [-3.9611127833857948e-14,-1.0994296538129874e-30,6.1030605780942182e-47,-3.3878791872411597e-63] ; representative rhs [196137443940584.88,0.0054439076563490806,-3.0219758120059617e-19,1.6775335631746611e-35]",-2.019559704563968272888412224331062020056879659920556289291944695251743532234808e-28,-2.0195597045639682728884122243310618260409213965686229269660661328516718265119011e-28 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,subnormal,4,10322096095657499292,inf,inf,inf,90.000000,inf,yes,Both,yes,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,qdpp,ddreal,qdpp dd_real,qdpp operator/,subnormal,4,10322096095657499292,inf,inf,inf,,,,NaN,no,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator/,subnormal,4,10322096095657499292,inf,inf,inf,,,,NaN,no,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,subnormal,4,10322096095657499292,inf,inf,inf,,,,No,no,"subnormal-limb operand [9.3326361850321888e-302,1.2951634466340773e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31,7.8886090522101181635937281782041959626484380456149278039732535157434196685209597e-31 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,moderate,4099,10322096095657499356,109.099094,104.680325,99.580200,90.000000,9.580200,yes,Both,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50] ; [-2.2467526986846895,-6.2359914417961224e-17,3.4616706400237409e-33,-1.9216132241116296e-49] ; [-0.82478157060333857,-2.2892287249258141e-17,1.2707772195229639e-33,-7.0542306414176576e-50]",-0.0025616587031475578614921195531973426573882576399799792521563357797220739087151742,-0.0025616587031475578614921195531946393591985326302623011385541559314120186541712416 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,moderate,4099,10322096095657499356,108.177888,103.664946,99.580200,,,,Both,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50] ; [-2.2467526986846895,-6.2359914417961224e-17,3.4616706400237409e-33,-1.9216132241116296e-49] ; [-0.82478157060333857,-2.2892287249258141e-17,1.2707772195229639e-33,-7.0542306414176576e-50]",-0.0025616587031475578614921195531973426573882576399799792521563357797220739087151742,-0.0025616587031475578614921195531946393591985326302623011385541559314120186541712416 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,moderate,4099,10322096095657499356,114.897442,113.182994,113.025245,,,,No,no,"[-7.5997781556486999,-2.1093621726111233e-16,1.1709312256531064e-32,-6.4999740348631675e-49] ; [7.5770165974677148,2.1030445711189046e-16,-1.1674242523345727e-32,6.4805064222382565e-49] ; [-6.6174929362548802,-1.8367232557811253e-16,1.019586224216343e-32,-5.6598405085780568e-49]",-64.201138158677660631610513778239055170095124556316768571493974662039994072415539,-64.201138158677660631610513778239061245199688185888259072502568550744850022381024 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,cancellation,4098,10322096095657499352,123.613534,107.447694,107.008989,90.000000,17.008989,yes,Both,no,"one plus a low-limb delta [1,2.3375830000300188e-20,0,0] ; one plus a low-limb delta [1,9.1191608041326794e-20,0,0] ; native product cancellation",6.0206627557371401035138369829719396083930638942820518512027281512011279702649282e-36,6.0206627557371401035138369829719764831182728766548123483364806462892589095319671e-36 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,cancellation,4098,10322096095657499352,0.067350,0.000000,0.000000,,,,Both,no,"next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; one plus a low-limb delta [1,1.5333665360408769e-34,0,0] ; native product cancellation",0,1.5333665360408772917815245989544684211394174303105262982511956907436790017967341e-34 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,wide_exponent,4096,10322096095657499357,119.616115,106.579100,105.347039,90.000000,15.347039,yes,Both,no,"[1.6938644702759635e-90,4.701418338737172e-107,-2.6098114440304809e-123,1.448736377546434e-139] ; [79428146.335863903,2.2045739216343092e-09,-1.2237843636432928e-25,6.7933678884651449e-42] ; [9.2909522372705566e-90,2.5787572736275956e-106,-1.4314978500504758e-122,7.9464093641372402e-139]",1.3454052430915206938868087189563345722550509265256751578481158995824810109214383e-82,1.3454052430915206938868087189563606478535306154783196089715180736698264946825388e-82 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,wide_exponent,4096,10322096095657499357,119.061442,105.416426,104.112253,,,,Both,no,"[8.5721586263015062e-78,2.3792519694147713e-94,-1.3207501589145139e-110,7.331636181021139e-127] ; [8.4624728507206641e+70,2.3488080510338416e+54,-1.3038503893413553e+38,7.2378236145662375e+21] ; [-3.7357185346303535e-07,-1.0368701826663922e-23,5.7557857517176024e-40,-3.1951029331831484e-56]",3.5184474300843906574404451871894785272491595392222950262976866790968099472984533e-07,3.518447430084390657440445187189639014267579136229292612265977276091417324873532e-07 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,wide_exponent,4096,10322096095657499357,125.365166,113.230161,113.032601,,,,No,no,"[-1.3853028727925241e-16,-3.8449878636340866e-33,2.1343970278054273e-49,-1.1848283619805429e-65] ; [-2.7840252040715031e-18,-7.7272222067423321e-35,4.2894700051600743e-51,-2.3811341815838518e-67] ; [-1.0194028502696682e-51,-2.8294112893447415e-68,1.5706387797824414e-84,-8.7187966834181365e-101]",3.8567181131270467416103884341803196252968876035993596157940944011043867018129791e-34,3.8567181131270467416103884341803192622066121759357700299162474901344372908142603e-34 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,qdpp,ddreal,qdpp dd_real,qdpp abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,subnormal,4100,10322096095657499350,inf,inf,inf,90.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,qdpp,ddreal,qdpp dd_real,qdpp abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,qdpp,ddreal,qdpp dd_real,qdpp fabs,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fabs,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0]",8,8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,moderate,4099,10322096095657499356,108.710750,105.621789,105.403238,90.000000,15.403238,yes,Both,yes,"[-2.0216112865291063,-5.6110984928667459e-17,3.114785370110088e-33,-1.7290532173309048e-49]",4.0869121938218684213523234559135312039828584030511109615650764542715833727015706,4.086912193821868421352323455913607387135084308816614946511827134127630171714709 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,qdpp,ddreal,qdpp dd_real,qdpp sqr,moderate,4099,10322096095657499356,108.649492,105.621789,105.403238,,,,NaN,yes,"[-2.0216112865291063,-5.6110984928667459e-17,3.114785370110088e-33,-1.7290532173309048e-49]",4.0869121938218684213523234559135312039828584030511109615650764542715833727015706,4.086912193821868421352323455913607387135084308816614946511827134127630171714709 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,wide_exponent,4096,10322096095657499357,108.714763,105.598081,105.370295,90.000000,15.370295,yes,Both,yes,"[4.07867604911808e+17,11.320600149295146,-6.2841954691612277e-16,3.4884292505539414e-32]",166355983136494714602069966978531328,166355983136494714602069966978534500.62754285635655510754919878168120152773808347 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,qdpp,ddreal,qdpp dd_real,qdpp sqr,wide_exponent,4096,10322096095657499357,108.650741,105.598081,105.370295,,,,NaN,yes,"[4.07867604911808e+17,11.320600149295146,-6.2841954691612277e-16,3.4884292505539414e-32]",166355983136494714602069966978531328,166355983136494714602069966978534500.62754285635655510754919878168120152773808347 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,near_one,4099,10322096095657499359,109.041603,106.207316,105.235269,90.000000,15.235269,yes,Both,yes,"[0.7943239392491388,2.2046918159133699e-17,1.2238498081148352e-33,6.7937311782608489e-50]",1.2589322197002942275560659685836243624199496927685685911021398405984506041477289,1.2589322197002942275560659685835979972909064819121737721490343315675812064184067 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,qdpp,ddreal,qdpp dd_real,qdpp inv,near_one,4099,10322096095657499359,109.434551,106.961274,106.471075,,,,NaN,no,"[0.9803714880397002,2.7210774967692536e-17,1.5105014443513052e-33,8.384967411241868e-50]",1.0200215042968537593600620503816682811592574829905761410992441748021852809813481,1.0200215042968537593600620503816592108504513295376801423995312564714541690785466 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,wide_exponent,4096,10322096095657499357,109.009049,105.925795,105.189487,90.000000,15.189487,yes,Both,yes,"[3.5001788065165318e+43,9.7149477532491364e+26,53928793393.438126,2.9936494057824018e-06]",2.8569969000961575149593584421158660998363524565146662142923865841595715918551683e-44,2.8569969000961575149593584421158043381809410343861907578030166512899574822804677e-44 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,qdpp,ddreal,qdpp dd_real,qdpp inv,wide_exponent,4096,10322096095657499357,109.400778,106.810343,106.537753,,,,NaN,no,"[1.1327896146203641e-35,3.1441227805194653e-52,1.745338751590589e-68,9.6885763389319921e-85]",88277645477455545568826197921745920,88277645477455545568826197921745170.465683891467476748857561440448137587439147607 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,cancellation,4098,10322096095657499352,137.992247,inf,106.227061,90.000000,16.227061,yes,Both,yes,"one plus a low-limb delta [1.0000000000000002,-9.2098754789066345e-17,0,0] ; one plus a low-limb delta [1,9.3157411673208082e-33,0,0]",1.299458501359649542526809416735399539516537488861303804737012764889933880863069e-16,1.2994585013596495425268094167353858549612218168195955651903009493027143470550428e-16 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,cancellation,4098,10322096095657499352,137.992247,inf,106.227061,,,,No,yes,"one plus a low-limb delta [1.0000000000000002,-9.2098754789066345e-17,0,0] ; one plus a low-limb delta [1,9.3157411673208082e-33,0,0]",1.299458501359649542526809416735399539516537488861303804737012764889933880863069e-16,1.2994585013596495425268094167353858549612218168195955651903009493027143470550428e-16 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,tlfloat,tlquad,TLFloat Quad,tlfloat::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,qdpp,ddreal,qdpp dd_real,qdpp floor,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::floor,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,tlfloat,tlquad,TLFloat Quad,tlfloat::floor,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,qdpp,ddreal,qdpp dd_real,qdpp ceil,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ceil,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,tlfloat,tlquad,TLFloat Quad,tlfloat::ceil,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,qdpp,ddreal,qdpp dd_real,qdpp aint,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::trunc,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,tlfloat,tlquad,TLFloat Quad,tlfloat::trunc,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,qdpp,ddreal,qdpp dd_real,qdpp round,boundary,4108,10322096095657499334,130.441577,0.000000,0.000000,,,,Both,no,"just below -2.5 [-2.5,-5.5511151231257827e-17,0,0]",-4,-3 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::round,boundary,4108,10322096095657499334,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,tlfloat,tlquad,TLFloat Quad,tlfloat::round,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,tlfloat,tlquad,TLFloat Quad,tlfloat::rint,boundary,4108,10322096095657499334,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,moderate,4099,10322096095657499356,110.177573,107.236356,107.022726,90.000000,17.022726,yes,Both,yes,"[-4.0306514937478397,-1.118730523149658e-16,6.2102019257584848e-33,-3.4473545827742784e-49]",-4.0309999999999999999999999999999755453119381486340322364144762336268801306005116,-4.031 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,wide_exponent,4096,10322096095657499357,121.330260,107.340420,107.049597,90.000000,17.049597,yes,Both,yes,"[1.9564201098655394e-06,5.4301566295310004e-23,-3.0143424587131265e-39,1.6732962008842592e-55]",1.9564199999999999999999999999999883500964702027617153338260327688823346504976789e-06,1.95642e-06 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,boundary,4110,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lround,boundary,4110,10322096095657499334,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,boundary,4114,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::llround,boundary,4114,10322096095657499334,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,qdpp,ddreal,qdpp dd_real,qdpp divrem,moderate,4099,10322096095657499356,inf,inf,inf,,,,NaN,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,NaN,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,tlfloat,tlquad,TLFloat Quad,tlfloat::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,NaN,no,"lower endpoint [-8,0,0,0]",0 ; -8,-0 ; -8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0]",0 ; -8,-0 ; -8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,NaN,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,qdpp,ddreal,qdpp dd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,tlfloat,tlquad,TLFloat Quad,tlfloat::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,qdpp,ddreal,qdpp dd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,qdpp,ddreal,qdpp dd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,90.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,near_one,4099,10322096095657499359,109.483067,105.751120,104.669867,90.000000,14.669867,yes,Both,yes,"[1.0434745107555559,2.8962235686257217e-17,1.6077270451751567e-33,8.9246779143301406e-50]",1.0215060013311502277290127699241048631609354594130696894861318971964303514710082,1.0215060013311502277290127699240732060505168443174685619534358207641504292216177 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,near_one,4099,10322096095657499359,107.972082,104.206672,103.521359,,,,NaN,no,"[0.71443151353648249,1.9829457896150051e-17,1.1007560361070452e-33,6.1104234789058085e-50]",0.84524050632733078181601151278838316443423641967351333616263828890646792046936753,0.84524050632733078181601151278844123367639711927686107208563401334537132439409523 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,near_one,4099,10322096095657499359,109.483067,105.751120,104.669867,,,,Both,no,"[1.0434745107555559,2.8962235686257217e-17,1.6077270451751567e-33,8.9246779143301406e-50]",1.0215060013311502277290127699241048631609354594130696894861318971964303514710082,1.0215060013311502277290127699240732060505168443174685619534358207641504292216177 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,near_one,4099,10322096095657499359,114.893514,113.139700,113.011246,,,,No,no,"[1.0026950548444753,2.7830378414153015e-17,1.5448963449711814e-33,8.5758974642312711e-50]",1.0013466207285443899676629818717478499906807043598557441898300032149648347568061,1.0013466207285443899676629818717477543132417661775742648846457214830114205814083 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,wide_exponent,4096,10322096095657499357,109.554369,105.974012,105.134919,90.000000,15.134919,yes,Both,yes,"[1.1645444442808547e-62,3.2322601380997815e-79,1.7942648134482328e-95,9.9601705408249462e-112]",1.0791406045001062461937244900901782471018853969286737164352073021695624156016746e-31,1.0791406045001062461937244900901540193152963432252732200525801490754009153911073e-31 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,wide_exponent,4096,10322096095657499357,108.067737,104.201417,103.244333,,,,NaN,no,"[3.9723050169707548e-164,1.1025361226687388e-180,6.120304944338899e-197,3.3974517334661164e-213]",1.9930642280094123730625261552127116945974136006779439913897992305033810507934317e-82,1.9930642280094123730625261552128776075292011527767378186913898640893150824459982e-82 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,wide_exponent,4096,10322096095657499357,109.554369,105.974012,105.134919,,,,Both,no,"[1.1645444442808547e-62,3.2322601380997815e-79,1.7942648134482328e-95,9.9601705408249462e-112]",1.0791406045001062461937244900901782471018853969286737164352073021695624156016746e-31,1.0791406045001062461937244900901540193152963432252732200525801490754009153911073e-31 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,wide_exponent,4096,10322096095657499357,115.008272,113.213152,113.048418,,,,No,no,"[3.2184369798376745e+141,8.9329570958020924e+124,4.9587873228740766e+108,2.75267993003707e+92]",56731269859202645932411245930365626819033560927736571074222411518836736,56731269859202645932411245930365621536311029635164147191486159156902261.890013455 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,extreme_finite,4096,10322096095657499354,109.462818,106.258948,105.096134,90.000000,15.096134,yes,Both,yes,"[1.3220615149200299e+307,3.6694578345875804e+290,2.0369582879251504e+274,1.1307389957277705e+258]",3.6360163846165902232928621254916330482868374851642045295187667520670879059664215e+153,3.6360163846165902232928621254915491917111449494286729393569803221869869190043071e+153 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,extreme_finite,4096,10322096095657499354,98.018754,55.311139,55.311139,,,,NaN,no,"[4.4501477170144028e-308,0,0,0]",2.1095373229725998297233013881191508973971792115572731090863056832759011817789658e-154,2.1095373229725997825305399118428952353362442939022476368457472326927562550301553e-154 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,extreme_finite,4096,10322096095657499354,99.075519,54.379751,54.379751,,,,Both,no,"[4.4501477170144028e-308,0,0,0]",2.1095373229725996925287841451839082884122437148964001557167765265107074071004867e-154,2.1095373229725997825305399118428952353362442939022476368457472326927562550301553e-154 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,extreme_finite,4096,10322096095657499354,114.998426,113.400132,113.089186,,,,No,no,"[1.2100084684275982e+307,3.3584481540993534e+290,1.864313233845479e+274,1.0349017386643172e+258]",3.4785175986727424967005535821835381192527716211870969057349865948795513924365055e+153,3.4785175986727424967005535821835378043641146296572772642207472485040396982804778e+153 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,subnormal,4100,10322096095657499350,110.498955,106.653014,106.214358,90.000000,16.214358,yes,Both,yes,"[9.5745039639339057e-314,0,0,0]",3.0942695364065984592266695010140804816710164393335370623177724037590908372789884e-157,3.0942695364065984592266695010140476078219969118554123365016956606210529423634246e-157 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,subnormal,4100,10322096095657499350,56.482223,52.162020,49.046704,,,,NaN,no,"[1.3414858630086353e-309,0,0,0]",3.6626300154515071074436441504317047149514559944606406520572408836844869514389429e-155,3.6626300154515134063311572901123279563541103804457203274890127214664814729197281e-155 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,subnormal,4100,10322096095657499350,136.077182,54.203493,52.856137,,,,Both,no,"[2.2808542441585355e-308,0,0,0]",1.5102497290708368298203124345003253345331819466760323292298625271598666264010766e-154,1.5102497290708366445669588428608119550768311386114505932804710381323871783374605e-154 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,subnormal,4100,10322096095657499350,115.748346,113.182628,113.057490,,,,No,no,"[3.3473090784781747e-316,0,0,0]",1.8295652703519966884871325261523154568283013418382798220004886925664373028422914e-158,1.8295652703519966884871325261523152875301365777253845679302788817070239592338861e-158 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,moderate,4099,10322096095657499356,108.618141,105.113112,103.988941,90.000000,13.988941,yes,Both,yes,"[-1.026902362492109,-2.8502266172017703e-17,1.5821936079084388e-33,-8.7829388645734799e-50]",-1.0088882196575747287855047533761568067323069446339483252894105155469950396707191,-1.008888219657574728785504753376106681928089396686666219054879055838557430422108 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,qdpp,ddreal,qdpp dd_real,qdpp nroot,moderate,4099,10322096095657499356,107.503128,104.080117,103.018188,,,,NaN,no,"[7.7570819110982878,2.1530227354011577e-16,-1.1951677066919007e-32,6.6345135312889697e-49]",1.9795484049074845800164972757971712489223706094688856655986914918725350087669312,1.9795484049074845800164972757969784957350204626750435952829757873726542357407338 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,moderate,4099,10322096095657499356,108.562563,105.559722,104.600252,,,,Both,no,"[-5.4359803461266463,-1.5087876354199076e-16,8.3754538605646392e-33,-4.6493108588422589e-49]",-1.7582985823855373734893631229630491426724707896779619814085811736574516128683854,-1.7582985823855373734893631229629919580574226691808687607708137148977336669671777 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,moderate,4099,10322096095657499356,115.120076,113.301989,113.021191,,,,No,no,"[-0.12734564822864947,-3.5345517687315605e-18,1.9620703776876749e-34,-1.0891678546219169e-50]",-0.50310816950005327602384340490057847852046360556811795630525693376382473723240629,-0.50310816950005327602384340490057852626159976956627613790876407903204245377117839 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,wide_exponent,4096,10322096095657499357,108.443624,105.003065,104.047913,90.000000,14.047913,yes,Both,yes,"[-1.4317146624221198e+121,-3.9738064572861771e+104,2.2059057121416187e+88,-1.2245236558858889e+72]",-24282057930523965953132048549298074288128,-24282057930523965953132048549296916197347.206969720978349079851889702835521172176 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,qdpp,ddreal,qdpp dd_real,qdpp nroot,wide_exponent,4096,10322096095657499357,95.558467,89.370444,89.005643,,,,NaN,no,"[-3.4549134864131214e-250,-9.5893112517595507e-267,5.3231370710002672e-283,-2.9549346697301067e-299]",-7.0169070814352191767828847049923788864839571517004742553964479142878370319723312e-84,-7.0169070814352191767828846937002129458982875040557676645893689632408040463794305e-84 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,wide_exponent,4096,10322096095657499357,108.228752,105.429716,104.688938,,,,Both,no,"[-2.5093388050492908e+220,-6.9648142948777493e+203,3.8662485962058509e+187,-2.1461991052162126e+171]",-29276541249127547258888263930375634305818369506660520834833227626443702272,-29276541249127547258888263930374738922229461259377145616398423692846763008.357894 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,wide_exponent,4096,10322096095657499357,114.945588,113.203933,113.028879,,,,No,no,"[-6.0253985814299791e+20,-16723.840594118297,9.2835964438754955e-13,-5.1534312616594e-29]",-8446211.0069017797205775974332527170734424995574270785166082209372007127967663109,-8446211.0069017797205775974332527162762210477168824322444258883093409908788493932 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,moderate,4099,10322096095657499356,108.682153,105.556470,104.448638,90.000000,14.448638,yes,Both,yes,"[2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49] ; [7.6161438781938315,2.1139045731071814e-16,-1.1734527644620026e-32,6.5139713870787798e-49]",8.0914622723995239714248451353921972400978668058729318673943800913073154390531272,8.0914622723995239714248451353919049231629452774327450009049705044051673057483058 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,moderate,4099,10322096095657499356,107.822875,104.898769,104.258205,,,,Both,yes,"[-1.3812728338831572,-3.8338022586658006e-17,2.128187769715351e-33,-1.1813815313318215e-49] ; [5.7084223966267196,1.5844054947552254e-16,-8.7952173030993197e-33,4.8823263782412195e-49]",5.8731593627223457932834487849635333739185201884555156890126582230893248492975545,5.8731593627223457932834487849632912571541598546275170519229698090249476736042578 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,moderate,4099,10322096095657499356,114.999147,113.150622,113.012814,,,,No,yes,"[-4.3730961569334426,-1.2137780105818237e-16,6.7378214706582879e-33,-3.7402422662692824e-49] ; [-6.7563038999618339,-1.8752510377755921e-16,1.0409734395453408e-32,-5.7785634030324038e-49]",8.0480812860224973255103414066425067013553335932596541895380453632323838886186707,8.0480812860224973255103414066425074695044837774480341865898326900589136068326501 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,wide_exponent,4096,10322096095657499357,136.086569,107.303893,104.375984,90.000000,14.375984,yes,Both,yes,"[-1.0904439541376617e-171,-3.0265899623673255e-188,1.6800949311597954e-204,-9.3264003806481111e-221] ; [-6.6064316563514781e-178,-1.8336531338734802e-194,1.0178819642012061e-210,-5.6503799650342919e-227]",1.0904439541378618053723797776842685378887910042683910204594308964030285890648591e-171,1.090443954137861805372379777684227109194726424167261957374676671431464584983977e-171 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,wide_exponent,4096,10322096095657499357,136.075898,106.558614,104.375984,,,,Both,yes,"[-1.0904439541376617e-171,-3.0265899623673255e-188,1.6800949311597954e-204,-9.3264003806481111e-221] ; [-6.6064316563514781e-178,-1.8336531338734802e-194,1.0178819642012061e-210,-5.6503799650342919e-227]",1.0904439541378618053723797776842685378887910042683910204594308964030285890648591e-171,1.090443954137861805372379777684227109194726424167261957374676671431464584983977e-171 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,wide_exponent,4096,10322096095657499357,142.925810,113.798728,113.017880,,,,No,yes,"[-2.5387398996340912e+175,-7.0464187252708178e+158,3.9115481549727536e+142,-2.1713454117904006e+126] ; [-1.2492509467162383e+176,-3.4673679114478559e+159,1.9247758450679253e+143,-1.0684652302183768e+127]",1.2747862293935241998715278949185518204872807338309159207365404839623318589574331e+176,1.2747862293935241998715278949185519417327664706045321099892601682646620979899304e+176 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,moderate,4099,10322096095657499356,109.289129,105.940176,105.022316,80.000000,25.022316,yes,Both,yes,"[-2.6398923795068718,-7.3271732556525522e-17,4.0673982269215659e-33,-2.2578595809239299e-49]",-0.48091697577772919399226624691062015405871262531310584383165433654955256415064468,-0.48091697577772919399226624691060848051161030920422183238229214193978802883324422 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,qdpp,ddreal,qdpp dd_real,qdpp sin,moderate,4099,10322096095657499356,106.651984,101.732710,97.389662,,,,Both,no,"[6.2844284435634243,1.7442792886633375e-16,-9.6826951382541352e-33,5.3749755414579021e-49]",0.0012431360636500376406651182820628737826713630510232888601894262622072011672310493,0.0012431360636500376406651182820688621589555923240867697280247701026819500889579145 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,moderate,4099,10322096095657499356,105.208184,98.842806,94.535168,,,,Both,no,"[6.2844284435634243,1.7442792886633375e-16,-9.6826951382541352e-33,5.3749755414579021e-49]",0.0012431360636500376406651182821121730753493691312774912955712974681383737457496252,0.0012431360636500376406651182820688621589555923240867697280247701026819500889579145 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,moderate,4099,10322096095657499356,115.094324,113.249179,113.045938,,,,No,no,"[6.5381038876502018,1.8146883683651254e-16,-1.0073544045392099e-32,5.5919402693849756e-49]",0.2521666211082424428698227592038028825451917195456792597336083477088111096803269,0.25216662110824244286982275920380290606693590184617967372759389209466870282434292 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,argument_reduction,4110,10322096095657499353,107.878813,98.777563,98.619216,80.000000,18.619216,yes,Both,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107778446817142530158141594307620809510923605317049154659252158834084e-08,2.983455547010777844681714253021942987548016308835936187833122791508178595472033e-08 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,qdpp,ddreal,qdpp dd_real,qdpp sin,argument_reduction,4110,10322096095657499353,15.652408,0.000000,0.000000,,,,Both,no,"below 2^159 * pi/2 [1.1478607017620547e+48,4.4745582552647293e+31,0,0]",0,0.021365912798790453936390424940051299694178385353250054265686403111677266065263432 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,argument_reduction,4110,10322096095657499353,13.903457,0.000000,0.000000,,,,Both,no,"below 2^159 * pi/2 [1.1478607017620547e+48,4.4745582552647293e+31,0,0]",0,0.021365912798790453936390424940051299694178385353250054265686403111677266065263432 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,argument_reduction,4110,10322096095657499353,115.121400,113.247632,113.016004,,,,No,no,"near 2^76 * pi/2 [-1.1868601480113558e+23,-4626584.798117674,-0,-0]",-2.991546159228189837237259988878058058522824214333998724226921577853581648471192e-08,-2.9915461592281898372372599888780577736253933802297625994170074222835607860644083e-08 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,quadrant_boundaries,4315,10322096095657499369,114.302289,100.269139,100.230956,80.000000,20.230956,yes,Both,yes,"below random k*pi/2, exponent 43, quadrant 2, offset bits 64 [-15189111743596.248,-2.2040936843613776e-05,0,0]",8.2340339752651274439911770999089811880423371828520810609536481004607152164951472e-07,8.2340339752651274439911770999034465622958436535312599533652322394306622926203602e-07 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,qdpp,ddreal,qdpp dd_real,qdpp sin,quadrant_boundaries,4315,10322096095657499369,36.047007,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,0,0]",0,-2.3958158477746716437132754143003601519786715229456446471729141723273547177369775e-32 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,quadrant_boundaries,4315,10322096095657499369,35.860103,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,0,0]",-1.9721522630525295135293214132069655741830160877725575119256973138760586841205045e-31,-2.3958158477746716437132754143003601519786715229456446471729141723273547177369775e-32 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,quadrant_boundaries,4315,10322096095657499369,118.124335,113.301358,113.056664,,,,No,no,"below random k*pi/2, exponent 98, quadrant 2, offset bits 64 [5.2509035675505552e+29,24361744657474.965,0,0]",0.00050104453726438394320632816150931384605222803849832956072091239859583674922988063,0.00050104453726438394320632816150931379966169648997739743564579442804004531880567156 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,moderate,4099,10322096095657499356,109.267445,105.979013,105.328054,80.000000,25.328054,yes,Both,-,"[1.3052020301228939,3.6226633640748349e-17,-2.010982138630954e-33,1.1163193362090118e-49]",0.26248277312553705702695162816852912212589596287237225345705224528736199118839068,0.26248277312553705702695162816852396749826395623085371572470338778345559864971624 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,qdpp,ddreal,qdpp dd_real,qdpp cos,moderate,4099,10322096095657499356,106.561680,101.428179,96.274235,,,,Both,-,"[-7.8532640731814176,-2.1797186481268875e-16,1.2099869151776452e-32,-6.7167766636269399e-49]",0.00071756073148736779053384844771750344546407180118876038357207392812321016320464828,0.00071756073148736779053384844771001440463095337439754636415552650561600172620895545 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,moderate,4099,10322096095657499356,105.096924,98.858609,93.965626,,,,Both,-,"[-1.5710057703990365,-4.3604169452899814e-17,2.4205176448133145e-33,-1.3436572103915992e-49]",-0.00020944360260871006193062533305160960273584796505827979128681216249836620751229033,-0.00020944360260871006193062533304078043778399835827433173896692012466864520641420855 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,moderate,4099,10322096095657499356,115.039634,113.213457,113.010990,,,,No,-,"[5.2369706645778571,1.4535513527752112e-16,-8.0688308966304143e-33,4.4791009216229662e-49]",0.50085098214838463855968162916383300055843951821959226717067697020859201942344363,0.50085098214838463855968162916383295269424197487894136066019138473249540678149535 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,argument_reduction,4110,10322096095657499353,117.900119,105.731702,99.209588,80.000000,19.209588,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1273107444367091e-17,-0,-0]",-4.076748699943230335115082501060544610987236354894355627499358880133086316429937e-20,-4.0767486999432303351150825010549823398817902769691808721665498735571977321034076e-20 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,qdpp,ddreal,qdpp dd_real,qdpp cos,argument_reduction,4110,10322096095657499353,54.253594,0.000000,0.000000,,,,Both,-,"near 2^126 * pi/2 [1.3362857300812084e+38,5.211837175288784e+21,0,0]",1,0.12389438145972806630180177273660243986440796037880327575695354625393002465936553 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,argument_reduction,4110,10322096095657499353,53.212790,0.000000,0.000000,,,,Both,-,"near 2^126 * pi/2 [1.3362857300812084e+38,5.211837175288784e+21,0,0]",1,0.12389438145972806630180177273660243986440796037880327575695354625393002465936553 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,argument_reduction,4110,10322096095657499353,118.819573,113.370594,113.060433,,,,No,-,"near 2^80 * pi/2 [-1.8989762368181692e+24,-73976767.197321281,-0,-0]",-0.12942023716847009375826722037243897339068070281783466012127372257569724641607101,-0.12942023716847009375826722037243896143922841764928503089856138759520111599980159 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,quadrant_boundaries,4315,10322096095657499369,113.389741,100.266388,100.241282,80.000000,20.241282,yes,Both,-,"below random k*pi/2, exponent 32, quadrant 1, offset bits 64 [6759185830.8093033,2.5452908459680444e-07,0,0]",3.6641619809983954738175143693267979746715518809894967024037216566072372430296582e-10,3.6641619809983954738175143693292433300620783220933192304310816115127405346807142e-10 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,qdpp,ddreal,qdpp dd_real,qdpp cos,quadrant_boundaries,4315,10322096095657499369,31.586264,0.000000,0.000000,,,,Both,-,"nearest -15 * pi/2 [-23.56194490192345,8.5787174003973557e-16,0,0]",-1.232595164407830945955825883254353483864385054857848444953560829131386480552052e-32,1.0134821928809237200253698176522341586156194979036934117710462075918197333039617e-32 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,quadrant_boundaries,4315,10322096095657499369,33.114490,0.000000,0.000000,,,,Both,-,"nearest -15 * pi/2 [-23.56194490192345,8.5787174003973557e-16,0,0]",9.8607613152626475676466070660348278709150804388627875596284866173206592926506306e-32,1.0134821928809237200253698176522341586156194979036934117710462075918197333039617e-32 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,quadrant_boundaries,4315,10322096095657499369,117.776775,113.250616,113.050939,,,,No,-,"below random k*pi/2, exponent 125, quadrant 1, offset bits 64 [1.0722390890202377e+38,7.0208708334792359e+21,0,0]",0.25132271638165246986440048084991865200928286725260385276945855894414915722434589,0.25132271638165246986440048084991867537117391753101066720201827935805516002807079 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,moderate,4099,10322096095657499356,106.990413,104.358303,103.662452,75.000000,28.662452,yes,Both,yes,"[1.0283589742402928,2.8542695269537032e-17,-1.5844378736549776e-33,8.7953970420994041e-50]",1.6590692097473263340445844749263504271822370452064470782609014202699238005322968,1.65906920974732633404458447492645378827060656915569642322001914303143546133552 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,qdpp,ddreal,qdpp dd_real,qdpp tan,moderate,4099,10322096095657499356,105.907276,100.656538,96.270873,,,,No,no,"[-7.8532640731814176,-2.1797186481268875e-16,1.2099869151776452e-32,-6.7167766636269399e-49]",-1393.6099046006247994846045908772556716069187365135489617157943387226737286255229,-1393.6099046006247994846045908918344363597240914228696915168530552614615473019289 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,moderate,4099,10322096095657499356,103.349908,97.873923,93.965781,,,,Both,no,"[-1.5710057703990365,-4.3604169452899814e-17,2.4205176448133145e-33,-1.3436572103915992e-49]",4774.554895023094650399553453252461839481804223695521544653525003454319630691316,4774.5548950230946503995534534993010818968099560510757877602371533385327275377315 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,moderate,4099,10322096095657499356,114.964744,113.144915,113.030226,,,,No,no,"[7.8233413976025243,2.1714134372803685e-16,-1.2053765970245592e-32,6.6911842568049228e-49]",32.626609890158811177010429275027148128590854752867790147209289244780577865512328,32.626609890158811177010429275027151205279743971652782283113637869256027936993481 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,argument_reduction,4110,10322096095657499353,106.636659,98.776698,98.614153,75.000000,23.614153,yes,Both,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107791724696498071933228039119120966041628715515577584130136247446007e-08,2.9834555470107791724696498071994731788491203878271025995398127676131094640315383e-08 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,qdpp,ddreal,qdpp dd_real,qdpp tan,argument_reduction,4110,10322096095657499353,14.675028,0.000000,0.000000,,,,No,no,"below 2^159 * pi/2 [1.1478607017620547e+48,4.4745582552647293e+31,0,0]",0,0.02137079126254257846132915638081114263722266664450390178599097407419423953862763 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,argument_reduction,4110,10322096095657499353,12.950427,0.000000,0.000000,,,,Both,no,"below 2^159 * pi/2 [1.1478607017620547e+48,4.4745582552647293e+31,0,0]",0,0.02137079126254257846132915638081114263722266664450390178599097407419423953862763 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,argument_reduction,4110,10322096095657499353,114.901636,113.184394,113.016302,,,,No,no,"near 2^28 * pi/2 [421657428.26631308,1.6436931070387506e-08,0,0]",-2.801550183192147675953312924187040410984604348447289725904902692584357714526975e-17,-2.8015501831921476759533129241870406777328880187547368316806178088235260252825752e-17 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,quadrant_boundaries,4315,10322096095657499369,106.499081,100.252704,100.193377,75.000000,25.193377,yes,Both,yes,"below random k*pi/2, exponent 35, quadrant 3, offset bits 64 [-59550109601.544846,-4.5998843808876405e-07,0,0]",309768431.94980647490490283626492826519224603465385570189027930609881877899169922,309768431.94980647490490283626514197542933150294098619645159482100231149999767842 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,qdpp,ddreal,qdpp dd_real,qdpp tan,quadrant_boundaries,4315,10322096095657499369,9.162214,0.000000,0.000000,,,,No,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,0,0]",0,-2.3958158477746716437132754143003601519786715229456446471729141730149459091184131e-32 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,quadrant_boundaries,4315,10322096095657499369,8.956412,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,0,0]",-1.9721522630525295135293214132069655741830160877725575119256973863858620655932743e-31,-2.3958158477746716437132754143003601519786715229456446471729141730149459091184131e-32 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,quadrant_boundaries,4315,10322096095657499369,114.985922,113.201255,113.030213,,,,No,no,"above random k*pi/2, exponent 73, quadrant 3, offset bits 100 [-1.8700734696156561e+22,-823589.80510121852,0,0]",-67624126.695955066322084141067273598883454782996848099821396438358078739838674664,-67624126.695955066322084141067273605260463639168624432485484257712303362119330611 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,near_one,4099,10322096095657499359,108.638031,106.152026,105.321909,80.000000,25.321909,yes,Both,yes,"[0.68327775494803278,1.8964767393937287e-17,-1.0527560708704801e-33,5.8439701459716004e-50]",0.59941459668283531301680476878329138003111794710527586828655022266332252911524847,0.5994145966828353130168047687833032015572049547180395358634521660952312280617229 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,qdpp,ddreal,qdpp dd_real,qdpp atan,near_one,4099,10322096095657499359,106.246428,103.455087,102.915050,,,,No,no,"[0.82949361478016381,2.3023072747712198e-17,-1.2780372731065025e-33,7.0945320346599422e-50]",0.69246792939021322038407456593241406837897508348741171878136551514140717422662874,0.69246792939021322038407456593234164436460581542817857965304164345048779801772283 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,near_one,4099,10322096095657499359,106.588476,104.193031,103.565475,,,,Both,no,"[0.59922936585146047,1.6631955974995573e-17,-9.232590233996015e-34,5.1251171273558688e-50]",0.53985266485908503628140184552645633503401709334955396726761503380272178009846584,0.53985266485908503628140184552649230671320267202579643720050843055093098479341871 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,near_one,4099,10322096095657499359,115.096489,113.278798,113.091826,,,,Inf,no,"[0.55993379075339322,1.5541284669001543e-17,-8.6271460358897341e-34,4.789028082924215e-50]",0.51043791759628196772972085185796332214599303086125967899625004231756652747775682,0.51043791759628196772972085185796336826828859446251053237503140908095741580338084 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,moderate,4099,10322096095657499356,108.819079,105.953468,104.926390,80.000000,24.926390,yes,Both,yes,"[1.7923972346284831,4.9749016978975022e-17,-2.7616252051262958e-33,1.5330099440581923e-49]",1.0618989131564895436407540480874589123331650567714808343216437342988039960189894,1.0618989131564895436407540480874313641834035736707386450972798475694004675512729 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,qdpp,ddreal,qdpp dd_real,qdpp atan,moderate,4099,10322096095657499356,108.084487,103.905207,102.931677,,,,No,no,"[0.12343094012777023,3.4258967920244917e-18,-1.901754749247526e-34,1.0556859549024222e-50]",0.1228097768819786507373908614024102305211643226125052350510620111296352513496899,0.12280977688197865073739086140239753323881629570359025212171798984403624884920169 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,moderate,4099,10322096095657499356,106.844628,104.728392,103.681417,,,,Both,no,"[0.2857560326209736,7.9313231710335552e-18,-4.4027688001122307e-34,2.444027646992936e-50]",0.27833825477622709162386907260361096838828187272939914113340062647161676778750916,0.27833825477622709162386907260362808257597424159856848418749771732394908517032952 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,moderate,4099,10322096095657499356,114.879313,113.253632,113.035851,,,,Inf,no,"[-1.5734601079176329,-4.3672291003483491e-17,2.4242991505098727e-33,-1.3457563677376342e-49]",-1.004652131404238346511320335870031739283046009993498654158329194945736828614713,-1.0046521314042383465113203358700316449130358715858571333899916584587287045766648 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,near_one,4099,10322096095657499359,108.593233,105.799026,104.761376,80.000000,24.761376,yes,Both,yes,"[1.0818954035110564,3.0028629680352481e-17,-1.666923803453484e-33,9.2532859344489846e-50] ; [0.65275323882187208,1.8117541878467149e-17,-1.0057256071542369e-33,5.5828986275887446e-50]",1.0279228914914060327533533251293914713081558101296952640517443772205652408047172,1.0279228914914060327533533251293615731716847356252552579150219391046313458442121 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,qdpp,ddreal,qdpp dd_real,qdpp atan2,near_one,4099,10322096095657499359,106.340315,103.419886,102.642972,,,,No,no,"[1.476075414430174,4.096932277958748e-17,-2.2742542726598969e-33,1.2624647286795781e-49] ; [1.2978450665872434,3.6022436883033177e-17,-1.9996469415324945e-33,1.1100270378053248e-49]",0.84956211104165360553223476933504451308109752486204940520923474826710947160890441,0.84956211104165360553223476933515180861659947245602880194423528508728550858684757 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,near_one,4099,10322096095657499359,106.583628,104.234944,103.492572,,,,Both,no,"[1.0507333108929335,2.916370786234894e-17,-1.6189109976110749e-33,8.986761321833486e-50] ; [1.2650802084969899,3.5113029386773794e-17,-1.9491646844768004e-33,1.0820037557461861e-49]",0.69310320015039092381296369548557195305017378886812875991225074484222701265423439,0.6931032001503909238129636954856205298991193123179607682885119797622283795278364 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,near_one,4099,10322096095657499359,114.968209,113.174887,113.027946,,,,Inf,no,"[1.3372324738194741,3.7115657042770924e-17,-2.0603328511487564e-33,1.1437144848684724e-49] ; [0.83447791299898855,2.3161414813815632e-17,-1.2857168004596149e-33,7.1371619750882627e-50]",1.0128922965936482719447380487334569972731678420777069662816424218111611629811186,1.0128922965936482719447380487334570929399651157625544908533628582220778293271098 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,moderate,4099,10322096095657499356,108.845358,105.968236,104.520841,80.000000,24.520841,yes,Both,yes,"[0.17246963902978685,4.7869941074914726e-18,-2.6573155384409922e-34,1.4751064472356924e-50] ; [4.1006496155849739,1.1381589047856838e-16,-6.318051108876087e-33,3.5072229059163668e-49]",0.042034327541476674060107604306532306204552005274371072135952080023324484159275016,0.042034327541476674060107604306530861776728203971856534731213306751945145807618236 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,qdpp,ddreal,qdpp dd_real,qdpp atan2,moderate,4099,10322096095657499356,107.532501,103.665904,102.550989,,,,No,no,"[2.8442686066031122,7.8944312381732168e-17,-4.3822896634699942e-33,2.4326594424806081e-49] ; [3.3541671593836817,9.3096840219733015e-17,-5.1679127765898456e-33,2.8687678769122846e-49]",0.70332051680921338830497515483357031683036089048871214131875652169831325544180345,0.70332051680921338830497515483347564310608417324445344576897132904002133808898828 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,moderate,4099,10322096095657499356,106.908043,104.409787,103.662354,,,,Both,no,"[3.7333993131913807,1.0362264694062042e-16,-5.7522124253040164e-33,3.1931193385537162e-49] ; [5.3335026674387365,1.4803443658225436e-16,-8.2175619965515678e-33,4.5616632674281109e-49]",0.61071935122765676237943548306421128022715521279517283116625796213737531470400199,0.61071935122765676237943548306424933103169620630034311511112534813715772653810797 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,moderate,4099,10322096095657499356,114.931792,113.169783,113.005900,,,,Inf,no,"[6.15799117025648,1.7091858956642891e-16,-9.4878876736553216e-33,5.2668356751746757e-49] ; [-2.8723638314665259,-7.9724111519866743e-17,4.4255772113569871e-33,-2.4566888586524599e-49]",2.0072413975928422432930791156337093117686276911278999771622954148125308679317946,2.007241397592842243293079115633709504270091951029495114195079457907970865310122 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,extreme_finite,8,10322096095657499351,116.769509,109.692678,109.692678,80.000000,29.692678,yes,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397529394834895588573302312846062338790031898128063,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,qdpp,ddreal,qdpp dd_real,qdpp atan2,extreme_finite,8,10322096095657499351,0.000000,0.000000,0.000000,,,,No,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",nan,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,extreme_finite,8,10322096095657499351,61.209588,0.000000,0.000000,,,,Both,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",nan,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,extreme_finite,8,10322096095657499351,118.649421,114.802646,114.802646,,,,Inf,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397513987395340490686477865022521659371483593314878,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,moderate,4099,10322096095657499356,107.979933,105.096123,104.081582,80.000000,24.081582,yes,Both,yes,"[-0.03158561470140564,-8.766769172109845e-19,4.8665344932251859e-35,-2.7014693222555596e-51]",-0.031590868964255888487475098364116757608941970863589142199408956157005365361634119,-0.031590868964255888487475098364115285691415570498034097956857353613513937214419265 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,qdpp,ddreal,qdpp dd_real,qdpp asin,moderate,4099,10322096095657499356,106.585915,103.502594,102.376736,,,,No,no,"[-0.10554476052982042,-2.9294555817188768e-18,1.6261745182204894e-34,-9.0270819609355425e-51]",-0.10574170549366163348617680261698872497764235320622715944461831608580052593859833,-0.10574170549366163348617680261697266377760660648065099953828496646958802067675318 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,moderate,4099,10322096095657499356,106.515503,104.045565,103.474829,,,,Both,no,"[0.66824894871695772,1.8547634226178048e-17,-1.0296005285114234e-33,5.7154310645980609e-50]",0.73185253117083519372262293636202052609463381301005497562440208674308661507268425,0.73185253117083519372262293636196859872673668359009271355373848106295717299208512 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,moderate,4099,10322096095657499356,114.947518,113.199623,113.012058,,,,No,no,"[0.12474215398466793,3.4622902873778762e-18,-1.9219571974914841e-34,1.0669005664995424e-50]",0.12506795106413992402354933757400079832840734406034132627003412512726624817097076,0.12506795106413992402354933757400081027177335071584045641110721623291972191179353 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,boundary,4105,10322096095657499355,109.179337,106.113879,105.956528,80.000000,25.956528,yes,Both,yes,"[0.99999942350312121,2.7755559614626202e-17,-1.5407430672757073e-33,8.5528421416053841e-50]",1.5697225512744511775996984093823162316469799617556662501159018933971633913415644,1.5697225512744511775996984093822962914427098056014529298362837222126251898438199 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,qdpp,ddreal,qdpp dd_real,qdpp asin,boundary,4105,10322096095657499355,109.491726,107.373224,104.443140,,,,No,no,"[-0.5,0,0,0]",-0.52359877559829887307710723054660280208862930374996608114978422659525902904675831,-0.52359877559829887307710723054658381403286156656251763682915743205130273438103483 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,boundary,4105,10322096095657499355,106.985065,105.503128,105.402715,,,,Both,no,"[-0.99999922428528665,-2.7755554085220531e-17,1.5407427603320329e-33,-8.552840437725711e-50]",-1.5695507628153165878808648244495547137714913079677828628484981959845256938024249,-1.5695507628153165878808648244495839820077603707708144064426117014428883477602293 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,boundary,4105,10322096095657499355,115.113201,113.662197,113.650342,,,,No,no,"[-0.99999926068382938,-2.7755555095483036e-17,1.5407428164128676e-33,-8.5528407490368807e-50]",-1.569580336448152538387862341824414705980941808225034533535579205101276496769902,-1.5695803364481525383878623418244146096819702328353660760934473597656326582483983 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,moderate,4099,10322096095657499356,108.568133,105.119090,102.606898,80.000000,22.606898,yes,Both,-,"[0.99447363321554472,2.7602188124463265e-17,-1.5322292392907091e-33,8.5055809023221692e-50]",0.10518045845827819297865791404046697400704440931878221279239664668822551440996449,0.10518045845827819297865791404048059412910636761979542748882605088251354897169005 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,qdpp,ddreal,qdpp dd_real,qdpp acos,moderate,4099,10322096095657499356,107.976854,104.376150,103.255774,,,,No,-,"[0.72162924858693034,2.0029235175604019e-17,-1.1118459028793836e-33,6.1719846060591867e-50]",0.76464343130433414989879945681264064919498472149418082086597743974448748716099544,0.76464343130433414989879945681257749914661788899034141150068638257917579976285277 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,moderate,4099,10322096095657499356,106.801793,104.125181,103.073651,,,,Both,-,"[0.77551087952722153,2.1524750857460682e-17,-1.1948637000636465e-33,6.6328259554973373e-50]",0.68327242732273541496585243676267738469249442583874707306132874115437748907542215,0.68327242732273541496585243676274140725318730830664930829330214417714116240496308 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,moderate,4099,10322096095657499356,114.898379,113.171158,113.047621,,,,No,-,"[-0.45715822972539222,-1.2688689813450177e-17,7.0436377916095346e-34,-3.9100044266823978e-50]",2.0455936847846887489751794724924589062213555121293704269540512834458156551931118,2.0455936847846887489751794724924590968089464877104280431708665030765709283604497 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,boundary,4105,10322096095657499355,104.376193,95.825547,81.584963,80.000000,1.584963,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863439534155160504671268531080086442146964698096667234494817e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,qdpp,ddreal,qdpp dd_real,qdpp acos,boundary,4105,10322096095657499355,108.178543,104.398963,103.657807,,,,No,-,"[0.99999942444749224,2.7755559640837763e-17,-1.5407430687307413e-33,8.5528421496824451e-50]",0.0010728956733501991057269846146837220280149238995691775727282821254002248166289912,0.0010728956733501991057269846146837890856807201566556401310231651304607235195055812 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,boundary,4105,10322096095657499355,107.086731,104.648615,104.149340,,,,Both,-,"[0.99999934503035492,2.7755557436569404e-17,-1.540742946369267e-33,8.5528414704398147e-50]",0.0011445258551427070941068738473539623713411732011302531058393685780530564521928483,0.0011445258551427070941068738473540132517027939037678964817350591380117937533213228 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,boundary,4105,10322096095657499355,114.952164,113.210243,113.019157,,,,No,-,"[0.99999951327014636,2.7755562106161656e-17,-1.5407432055837087e-33,8.5528429093690223e-50]",0.00098664065707865998773786346026427739790392738317321398040088536942829912436176039,0.00098664065707865998773786346026427749166071876813272361725882961213506150597977497 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,moderate,4099,10322096095657499356,107.422628,104.784889,104.123120,80.000000,24.123120,yes,Both,-,"[-7.4260131889231964,-2.0611327058781538e-16,1.1441584934369385e-32,-6.3513555161706011e-49]",0.00059555715897935043401591506055704088046193962180369225037771615963253651893083429,0.00059555715897935043401591506055701391914881720026106459729557182617396144915233455 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,qdpp,ddreal,qdpp dd_real,qdpp exp,moderate,4099,10322096095657499356,107.183101,104.642582,104.151117,,,,Both,-,"[7.0128923877089875,1.946468649513252e-16,-1.0805071557003232e-32,5.9980196126536888e-49]",1110.8629089138827070531587501812802675668025626929731218203722953319356747670099,1110.8629089138827070531587501813295906438271160742762402009248472719277541922193 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,moderate,4099,10322096095657499356,103.684388,101.106308,100.622692,,,,Both,-,"[6.2894204955453095,1.7456648614259411e-16,-9.6903866121708154e-33,5.3792451671757032e-49]",538.84097784188683014615383865455606418723372617967866426199469165325695030333009,538.84097784188683014615383865483212958439419934285301934539232895991755161454027 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,moderate,4099,10322096095657499356,114.936433,113.201931,113.034174,,,,No,-,"[-2.7524176726202221,-7.6394936838203922e-17,4.2407708921279276e-33,-2.3541007433002956e-49]",0.063773491250200208373748723374130927612358133134113120172047880385269533762629401,0.063773491250200208373748723374130933609760256587112174195050990978697911747191691 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,boundary,4099,10322096095657499339,106.553167,104.337314,103.645110,80.000000,23.645110,yes,Both,-,"[689.56791103874002,1.913935429694702e-14,-1.0624475908464504e-30,5.8977688890762846e-47]",2.9890877290907641503012149009532296945711450367253589288612016829881349927374169e+299,2.9890877290907641503012149009534181687133803867116344877486422688909796071e+299 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,qdpp,ddreal,qdpp dd_real,qdpp exp,boundary,4099,10322096095657499339,106.465871,104.205832,103.671903,,,,Both,-,"[-691.72846210951673,-1.9199321635563391e-14,1.0657764468493198e-30,-5.916247751976521e-47]",3.8560790678697117391860011259094120626236002993183762117458020113940637583794245e-301,3.8560790678697117391858770802322620870928440430316970424756971515036688492717273e-301 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,boundary,4099,10322096095657499339,97.061161,0.000000,0.000000,,,,Both,-,"lower endpoint [-700,0,0,0]",0,9.8596765437597708567053729478494651051156001814009417105864667677931867965946372e-305 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,boundary,4099,10322096095657499339,114.941676,113.155192,113.027016,,,,No,-,"[-106.03442153664571,-2.943046404819841e-15,1.6337189405856384e-31,-9.0689619180219691e-48]",8.9091410513973682950278649000499914419415317652051246328683034651881238681163385e-47,8.9091410513973682950278649000499922839443594814782326173403842131731778025563998e-47 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,moderate,4099,10322096095657499356,108.902998,106.013023,105.332281,80.000000,25.332281,yes,Both,-,"[2.5050708699436939,6.9529683953231499e-17,-3.8596728009893943e-33,2.1425488055889476e-49]",5.6767722797494772853116587667814582973149425261925085601171598811975904652626923,5.6767722797494772853116587667815694514029231846505256411149926048833678443740637 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,moderate,4099,10322096095657499356,103.839952,101.142179,100.414694,,,,Both,-,"[3.8148963235585232,1.0588464337431334e-16,-5.8777784514193096e-33,3.2628224852056573e-49]",14.073373823089690423486976994593612874034538497537247478418910573427780263955356,14.073373823089690423486976994601941307827954000551175451985943856849500024740817 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,moderate,4099,10322096095657499356,114.965914,113.164112,113.011731,,,,No,-,"[-7.9959423366658164,-2.2193198214353661e-16,1.2319699823822672e-32,-6.8388072004392078e-49]",0.0039172520189509527584047035166407065909139982295504516955430206336675765627867302,0.003917252018950952758404703516640706216751198658792221393620632776629080535929414 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,boundary,4099,10322096095657499339,108.889789,106.068713,105.117537,80.000000,25.117537,yes,Both,-,"[-300.54967496719229,-8.341929229804598e-15,4.6307009503613316e-31,-2.5705554076223722e-47]",3.3537651522202066232694855987502461915822095092416702651658002446064688733175029e-91,3.3537651522202066232694855987503223996548021083914718227771648387284160913978918e-91 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,boundary,4099,10322096095657499339,99.466638,96.374310,95.216729,,,,Both,-,"[698.97202361981408,1.9400370854788909e-14,-1.0769369204626738e-30,5.9782008258328567e-47]",2.5795576573742430042352146252587791727029440720160246133153522460811619953466992e+210,2.579557657374243004235214625314813457457020895250501024774331309230444404594941e+210 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,boundary,4099,10322096095657499339,115.017273,113.141516,113.031247,,,,No,-,"[-623.98297046261791,-1.7319006519539934e-14,9.6139799008132156e-31,-5.3368309220831554e-47]",1.4534801573612130574507922601992539191333162412583157547920661290709870204156299e-188,1.4534801573612130574507922601992540560995029614644815271939387362904115301725391e-188 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,moderate,4099,10322096095657499356,108.703910,105.111574,104.102752,80.000000,24.102752,yes,Both,yes,"[0.34499201425549764,9.5754519384565927e-18,-5.3154436066330483e-34,2.9506639390902969e-50]",0.41197864392194338236442692612392088638530541488783931021803297713515523703620147,0.41197864392194338236442692612390197063088901255454253734406676554091755929509722 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,qdpp,ddreal,qdpp dd_real,qdpp expm1,moderate,4099,10322096095657499356,108.515673,104.815830,0.000000,,,,NaN,no,"midpoint [0,0,0,0]",1,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,moderate,4099,10322096095657499356,106.119655,101.057168,100.341101,,,,Both,no,"[0.55778275215845952,1.5481581354627725e-17,-8.5940040387576104e-34,4.7706305787751426e-50]",0.74679512561239122148963802326995846614536066819091057793767438922893919794887552,0.74679512561239122148963802327042353821810425608280027454957470110002731722314746 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,moderate,4099,10322096095657499356,115.099931,113.238852,113.025470,,,,No,no,"[-0.13544667321528081,-3.759400380312106e-18,2.086886430503535e-34,-1.1584546824614156e-50]",-0.12667426665988540296635337345058074378660986274343523857272835609845049436444908,-0.1266742666598854029663533734505807318017844144056911301472125012780803029716347 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,cancellation,4098,10322096095657499336,134.532978,106.243436,104.431991,80.000000,24.431991,yes,Both,yes,"[5.2823021564447655e-10,1.4661333692780236e-26,-8.1386751187185946e-43,4.5178722533726315e-59]",5.2823021578399014295181730840717304111038933843651099389423600846862121746910786e-10,5.2823021578399014295181730840715373648809557706009947616651919887543783634460306e-10 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,qdpp,ddreal,qdpp dd_real,qdpp expm1,cancellation,4098,10322096095657499336,134.524282,105.740631,104.431991,,,,NaN,no,"[5.2823021564447655e-10,1.4661333692780236e-26,-8.1386751187185946e-43,4.5178722533726315e-59]",5.2823021578399014295181730840717304111038933843651099389423600846862121746910786e-10,5.2823021578399014295181730840715373648809557706009947616651919887543783634460306e-10 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,cancellation,4098,10322096095657499336,134.582894,106.579660,104.032519,,,,Both,no,"[9.640978373446825e-32,2.675909042528464e-48,-1.485427915408879e-64,8.245781365539434e-81]",9.6409783734468253031264825210279822527089990205713589968491374709281993532281666e-32,9.6409783734468253031264825210284469950289853675378445109860829891746497320528387e-32 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,cancellation,4098,10322096095657499336,141.266766,113.673411,113.009736,,,,No,no,"[-1.1160763165924209e-16,-3.0977340597993533e-33,1.7195878386774018e-49,-9.5456300568253038e-66]",-1.1160763165924208772961271662821860972007309068079894040911997121794737926855797e-16,-1.1160763165924208772961271662821862039521037829862229931689764596843753080637539e-16 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,near_one,4099,10322096095657499359,107.587097,104.625423,103.727726,80.000000,23.727726,yes,Both,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.16836588841698423133590420499408908570076543035915070334582452268043853416124023,0.16836588841698423133590420499409911099841188934514465011564788537156738257109514 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,qdpp,ddreal,qdpp dd_real,qdpp log,near_one,4099,10322096095657499359,106.938560,104.396216,103.808455,,,,NaN,-,"[0.77475982437177127,2.1503904889302074e-17,1.193706516372632e-33,6.6264022956099125e-50]",-0.25520220169539351832309414949750706201598804890020712154580239967166521708463733,-0.25520220169539351832309414949752143099061691759341383698037737188365038894452933 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,near_one,4099,10322096095657499359,101.676780,95.715279,87.939907,,,,Both,-,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",2.8031904738997079030831457992482622568319573100854233424378291784917482942773859e-05,2.8031904738997079030831458086911024069529667493434989217092636151341185760406095e-05 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,near_one,4099,10322096095657499359,114.903817,113.175281,113.007854,,,,No,-,"[1.2848659065765915,3.5662192825930181e-17,1.9796493791984882e-33,1.0989261607355295e-49]",0.25065436004336111863518701227037801362273786683129506989659931978979784481659232,0.25065436004336111863518701227037803762883557789306170721707519765093430995709876 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,wide_exponent,4096,10322096095657499357,108.459773,105.569923,104.766295,80.000000,24.766295,yes,Both,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-282.39686865150220367499305723086940567546238559138028340316645126151229305833112,-282.39686865150220367499305723087759150499758429977321630947871340522978294577768 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,qdpp,ddreal,qdpp dd_real,qdpp log,wide_exponent,4096,10322096095657499357,102.976134,98.351588,98.120928,,,,NaN,-,"[8.0137486442110252e-232,2.224262064590428e-248,1.2347134784542901e-264,6.8540366629748501e-281]",-532.1185829274821218054391355886238273235190505944474623515813571650312496785773,-532.11858292748212180543913559016789345023301543283440496688357322042108585689832 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,wide_exponent,4096,10322096095657499357,106.876407,104.641553,102.373621,,,,Both,-,"[9.8724575378275929,2.740157417032594e-16,1.5210929277434915e-32,8.443761954876569e-49]",2.2897488131137169994105625805515515334956951130684182404586939334895090425447961,2.2897488131137169994105625805519000770341292764626019169410782736436637403671614 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,wide_exponent,4096,10322096095657499357,114.899153,113.162642,113.028614,,,,No,-,"[5.458701172842345e+224,1.5150939316594794e+208,8.4104608369910374e+191,4.6687436344678076e+175]",517.47627171169320427846349718798625199324761647559864417169039332508595485649039,517.47627171169320427846349718798630084579140073034479946317933618634716552824299 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,extreme_finite,4096,10322096095657499354,109.176760,105.259872,105.032438,80.000000,25.032438,yes,Both,-,"[7.8173980412642063e+300,2.1697638245177804e+284,1.2044608779891888e+268,6.6861009950191438e+251]",692.83187966610744796102335261136963360047942862056461746020352698849364969646558,692.8318796661074479610233526113529337163936151304127833135311352796511576817801 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,qdpp,ddreal,qdpp dd_real,qdpp log,extreme_finite,4096,10322096095657499354,94.691877,62.215356,61.346954,,,,NaN,-,"[2.1523458449921256e+307,5.9739597851663649e+290,3.316213850838226e+274,1.8408684858907265e+258]",707.66018188719877629754369976107280238225878803524147544123587549869114354805788,707.66018188719877653884049364052149288115177810739831253518763758437695437450931 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,extreme_finite,4096,10322096095657499354,107.235578,105.227151,105.035096,,,,Both,-,"[1.0069214736271378e+301,2.7947685100258519e+284,1.5514081741640217e+268,8.6120453777428592e+251]",693.08501062139424109343845505927377090986957133212151413101387298354438826208934,693.08501062139424109343845505925709567645795181068156897691159852775850423690577 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,extreme_finite,4096,10322096095657499354,115.534765,113.325557,113.285384,,,,No,-,"[8.3193845738370037e+270,2.3090930761462968e+254,1.2818041495700743e+238,7.1154423995638221e+221]",623.81656339099882949900267018734779984904540997696515824943850779191190092376473,623.8165633909988294990026701873478491389845554944656387436301881745302964002462 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,near_one,4099,10322096095657499359,107.303954,104.550799,103.716432,80.000000,23.716432,yes,Both,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.24290063227404771615686474809384021893054758987931141292077052724202035349776452,0.24290063227404771615686474809385479604744883847615479262644004599544797468667503 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,near_one,4099,10322096095657499359,101.669840,95.715106,87.939906,,,,Both,-,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",4.044148995362291804383621503107805429122385032546069087176404383881042495577085e-05,4.0441489953622918043836215167309566516349824665253487483127010580011294770046154e-05 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,near_one,4099,10322096095657499359,114.998512,113.191847,113.016527,,,,No,-,"[0.70667685256571555,1.9614222817202363e-17,1.0888080890893083e-33,6.044099049525344e-50]",-0.50087744106456204019778665744575576721811844484718549777154507969979119197390105,-0.50087744106456204019778665744575581490148587894479768852119248604151503539540518 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,wide_exponent,4096,10322096095657499357,107.967820,105.222704,104.386734,80.000000,24.386734,yes,Both,-,"[2.2828060842783888e+123,6.336059688800657e+106,3.5172196759528967e+90,1.952449133453769e+74]",409.78796398443927791610862116022677480269364161366471002376221655083554651355371,409.78796398443927791610862116024222810248381363533512220222949171648044838642357 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,wide_exponent,4096,10322096095657499357,106.811573,104.492642,102.312914,,,,Both,-,"[9.8724575378275929,2.740157417032594e-16,1.5210929277434915e-32,8.443761954876569e-49]",3.3034092575605493779172148119355486815283475477783179543435034724099819136711176,3.303409257560549377917214811936073134270919791794568551577162714286004123950989 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,wide_exponent,4096,10322096095657499357,114.953722,113.209249,113.024836,,,,No,-,"[4.3538032635725136e+156,1.2084231569765884e+140,6.7080960618281417e+123,3.7237413496194703e+107]",520.34305901999576558624497846294523008272872419599112042989887041283258994894823,520.34305901999576558624497846294527933471433297529398191461768706821030235939582 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,extreme_finite,4096,10322096095657499354,111.086264,105.070160,104.606169,80.000000,24.606169,yes,Both,-,"[8.4825748870998104e+300,2.3543874869413368e+284,1.3069475984458161e+268,7.2550165788654925e+251]",999.66293072781110639078474847446915088682993473501091851417255096379221868119203,999.66293072781110639078474847443677221631807677679365605314190636576738889243849 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,extreme_finite,4096,10322096095657499354,111.221449,105.074551,104.624242,,,,Both,-,"[1.9230330816353472e-151,5.3374890108685769e-168,2.9629015967750232e-184,1.6447407862191361e-200]",-500.66775874664477275846631739014346365552647448470350839775516726959381230699364,-500.66775874664477275846631739012744910850453672628085794632227477319599271088726 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,extreme_finite,4096,10322096095657499354,118.992979,113.866301,113.813514,,,,No,-,"[4.6410253113118828e+270,1.2881432896216468e+254,7.1506316957717187e+237,3.9693979746300949e+221]",899.13502918531497655348899194015066466036407709017719390075728484040817889422215,899.13502918531497655348899194015061539480716298928420272988309606906902968233412 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,near_one,4099,10322096095657499359,107.290148,104.469291,103.762278,80.000000,23.762278,yes,Both,-,"[0.75767388015401582,2.1029674672601745e-17,1.1673814510949479e-33,6.4802688276296867e-50]",-0.12051768424391546599899037931433572311869461807102196510180994458742362307468454,-0.12051768424391546599899037931434272948211001876788467720396858894260414574766305 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,qdpp,ddreal,qdpp dd_real,qdpp log10,near_one,4099,10322096095657499359,106.633616,104.213763,103.495982,,,,NaN,-,"[1.4285637374785782,3.9650608837332131e-17,2.201050943580592e-33,1.2218287179680498e-49]",0.15489962184001986679735197991693269478090345830246767504947428883759971696143509,0.15489962184001986679735197991694352545131380484784002570762181823234214383384175 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,near_one,4099,10322096095657499359,101.609978,95.718828,87.939938,,,,Both,-,"[1.0000280322976365,2.7756353668185643e-17,1.5407871461029311e-33,8.553086828249796e-50]",1.2174101545384046086252384657457743119885332315350708330878957913257906519677656e-05,1.2174101545384046086252384698466606762194093124850392369685309026219998762457263e-05 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,near_one,4099,10322096095657499359,114.872088,113.157276,113.007632,,,,No,-,"[0.56152363038163511,1.5585411583019934e-17,8.6516413938641703e-34,4.8026257381340422e-50]",-0.25063196277134080699268976739835896943757206564298147783154726746356196712822717,-0.25063196277134080699268976739835899344521197849814681069469218834374690481796137 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,wide_exponent,4096,10322096095657499357,107.892624,105.170494,104.368159,80.000000,24.368159,yes,Both,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-122.64340176210480714781256202313334304453302289297190638109238264297218279352819,-122.64340176210480714781256202313802791680273253425717918726194907203719295819875 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,qdpp,ddreal,qdpp dd_real,qdpp log10,wide_exponent,4096,10322096095657499357,102.782053,98.347329,98.113779,,,,NaN,-,"[8.0137486442110252e-232,2.224262064590428e-248,1.2347134784542901e-264,6.8540366629748501e-281]",-231.09616428358339128264900503515342528697795196117676197503174056633798438831207,-231.09616428358339128264900503582733567809457849116273501127310924457513100144675 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,wide_exponent,4096,10322096095657499357,103.649650,103.003493,102.765232,,,,Both,-,"[3.905695425475696e-145,1.0840482471340662e-161,6.0176766188639109e-178,3.3404815685055882e-194]",-144.40830162694489898876145691151228884311488012943396616534789608787825443414476,-144.4083016269448989887614569114955326687050779095882138658826009601337648743421 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,wide_exponent,4096,10322096095657499357,114.973047,113.138717,113.026133,,,,No,-,"[2.4824071579503231e+32,6890063958126866,0.38247538237261935,2.1231648793119637e-17]",32.39487301485368150686302398006636790049855942982417088318864681383349446441855,32.39487301485368150686302398006636483698472419625684766314706515101750626242056 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,extreme_finite,4096,10322096095657499354,107.326534,105.011900,104.460171,80.000000,24.460171,yes,Both,-,"[1.574269563896497e-151,4.3694757920112377e-168,2.4255463149165589e-184,1.3464486830575322e-200]",-150.80292090089107415382716149653340039225497975448655319083077208652809986233478,-150.80292090089107415382716149652799577485650407769540271244758516976318786368256 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,qdpp,ddreal,qdpp dd_real,qdpp log10,extreme_finite,4096,10322096095657499354,94.613275,62.215356,61.346954,,,,NaN,-,"[2.1523458449921256e+307,5.9739597851663649e+290,3.316213850838226e+274,1.8408684858907265e+258]",307.33291205626194574151945445801460621459670399432857056272721391065871898717887,307.33291205626194584631332054080635133639070942553915332220471130808137777079125 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,extreme_finite,4096,10322096095657499354,103.562882,103.052180,102.780151,,,,Both,-,"[8.6806348536685748e-302,2.4093605285094229e-318,0,0]",-301.06144851176328304846286031809826768270144426070608633955877353471919377625454,-301.06144851176328304846286031806369391941670085227560113406940501162511205637408 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,extreme_finite,4096,10322096095657499354,114.774406,113.144122,113.082184,,,,No,-,"[7.3681209041005966e+270,2.0450643689886018e+254,1.1352387746458314e+238,6.3018411302952568e+221]",270.86735674362105667777608200997211613184077567666338331782646957519855579477053,270.86735674362105667777608200997209149259660762788172218869818982891320765553073 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,moderate,4099,10322096095657499356,108.140237,105.150365,103.619384,80.000000,23.619384,yes,Both,yes,"[0.016967775842366306,4.7095038542183959e-19,-2.6142998067570899e-35,1.4512279193674093e-51]",0.016825431060362116060527975223933686830025480890723928219206553105394405175920802,0.016825431060362116060527975223934766829053970731436945963748330916850378472668862 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,qdpp,ddreal,qdpp dd_real,qdpp log1p,moderate,4099,10322096095657499356,107.228400,104.605109,103.795300,,,,NaN,no,"[0.66217882122731719,1.8379154343642823e-17,-1.0202480162725859e-33,5.6635141924698313e-50]",0.50812928464502640442230979621768527602171153983600486964570326804679911703033213,0.50812928464502640442230979621765640411464564063690635215521073475052601939406968 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,moderate,4099,10322096095657499356,104.847580,101.291508,100.173624,,,,Both,no,"[0.50978045786818238,1.4149250045730266e-17,-7.854411590974145e-34,4.3600742965911016e-50]",0.41196424811609458603720091262173995084781993126662968922408673659585343074240882,0.41196424811609458603720091262202808439485668228344707426199018895324808168027625 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,moderate,4099,10322096095657499356,114.969880,113.130249,113.010769,,,,No,no,"[6.4127308474812379,1.7798903593994158e-16,-9.8803762915678819e-33,5.4847106254295907e-49]",2.0031989068380659308358767184051391841716466064575456726443683664874674185685244,2.0031989068380659308358767184051393756381315180978687804239195286771249857338303 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,cancellation,4098,10322096095657499336,134.607455,106.537373,104.621883,80.000000,24.621883,yes,Both,yes,"[9.5757892125536038e-15,2.657815415683552e-31,-1.4753839348477804e-47,8.1900260731503383e-64]",9.5757892125535581941894138318495891727756910760066238894863215461528382537839935e-15,9.5757892125535581941894138318498959687222096513961541169989695977230888612152571e-15 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,qdpp,ddreal,qdpp dd_real,qdpp log1p,cancellation,4098,10322096095657499336,134.555631,105.766536,104.089611,,,,NaN,no,"[2.3924534883532117e-12,6.6403923702862736e-29,-3.6861582510185196e-45,2.0462288813463789e-61]",2.3924534883503498722859585505722919346198673253770991772356315936388669371903705e-12,2.3924534883503498722859585505721810813857978873366089282898811577288643891844246e-12 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,cancellation,4098,10322096095657499336,134.649642,107.170004,104.032519,,,,Both,no,"[9.640978373446825e-32,2.675909042528464e-48,-1.485427915408879e-64,8.245781365539434e-81]",9.6409783734468253031264825210279822527089990205713589968491374709281993532281666e-32,9.6409783734468253031264825210275175103890126736048734827121919974874555365422483e-32 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,cancellation,4098,10322096095657499336,141.258045,113.598062,113.115444,,,,No,no,"[2.6730589512739875e-23,7.4192289847118885e-40,-4.1184994218967311e-56,2.2862264425475737e-72]",2.6730589512739876209542699187290419021144006266392741070944842875474854548228371e-23,2.6730589512739876209542699187290416645031710677328282365395176678854623522396858e-23 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,near_one,4099,10322096095657499359,108.254105,105.091738,103.817818,80.000000,23.817818,yes,Both,yes,"[0.50824794006286333,1.4106714131902435e-17,7.8307994155215805e-34,4.3469669061666386e-50] ; [1.4195792076051643,3.9401238039059714e-17,2.1872080834850324e-33,1.2141443869656723e-49]",0.38260537918836910980295595469486016694478510077047130768040772007699407142311543,0.38260537918836910980295595469483876398615466016654421485472691554230336671157279 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,qdpp,ddreal,qdpp dd_real,qdpp pow,near_one,4099,10322096095657499359,108.271386,105.228366,104.146088,,,,No,no,"[0.5595859812437316,1.5531631015856295e-17,8.6217871818929345e-34,4.7860533213777892e-50] ; [1.2982038560619356,3.6032395291428086e-17,2.0001997442469269e-33,1.1103339049561439e-49]",0.47063014492835036533591438775807217830872650433682840639058639451049181889885631,0.47063014492835036533591438775805120904364905202333737103157535856690798348325443 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,near_one,4099,10322096095657499359,103.218347,100.596655,99.961241,,,,Inf,no,"[1.3001872815938884,3.6087446408758173e-17,2.0032556951464871e-33,1.1120302984815517e-49] ; [1.4964387904107816,4.1534520001406718e-17,2.3056290211157914e-33,1.2798812127433564e-49]",1.4811630565057160695975467044776770686909168775065531267436775252066549768414916,1.4811630565057160695975467044788773163012774987744976567649309696218580203568102 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,near_one,4099,10322096095657499359,114.926370,113.162316,113.016553,,,,No,no,"[1.0072931928427433,2.7958002381055039e-17,1.5519808982986127e-33,8.6152246353477663e-50] ; [1.2932802742744287,3.5895738444825207e-17,1.9926137653683677e-33,1.1061228407484956e-49]",1.0094422126013183565427786981156641075907671648540197459770146736708130476289913,1.0094422126013183565427786981156642036875925766244874388795772114241665281807993 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,moderate,4099,10322096095657499356,106.001122,102.267431,101.314349,80.000000,21.314349,yes,Both,yes,"[6.7554035072711907,1.875001128601503e-16,1.0408347120857714e-32,5.7777933109335954e-49] ; [7.5615146099912893,2.09874190526296e-16,1.1650357929843036e-32,6.4672478094180065e-49]",1876810.3436059515909373438747938277987921279160005681718725867312969057820737362,1876810.3436059515909373438747932324627118494928000187634317695110360784386875593 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,qdpp,ddreal,qdpp dd_real,qdpp pow,moderate,4099,10322096095657499356,105.308714,101.687730,101.002017,,,,No,no,"[4.5236763170044476,1.2555724007724666e-16,6.9698269421073854e-33,3.8690311743901836e-49] ; [7.9474533276739914,2.205861417879371e-16,1.2244990676309858e-32,6.797335292579786e-49]",161990.02774912685537580110147647898976617011060412333264824091827449592528864741,161990.0277491268553758011014764151852239818531721937823617363018533884000846154 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,moderate,4099,10322096095657499356,101.996744,98.689822,97.605813,,,,Inf,no,"[5.3841638638994409,1.4944056725139767e-16,8.2956179287772921e-33,4.6049930140109008e-49] ; [7.900171020724815,2.1927379414212786e-16,1.2172140747675356e-32,6.7568954585236242e-49]",596979.42152351974794327492916693170559841450560851008888541002761485287919640541,596979.42152351974794327492916940731307384283545223626923271842061389321561692216 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,moderate,4099,10322096095657499356,114.949694,113.202145,113.025976,,,,No,no,"[1.1675387080838069,3.2405708896393795e-17,1.7988782073038331e-33,9.9857800212257048e-50] ; [4.5155188621659903,1.2533082522264678e-16,6.9572583928726882e-33,3.8620542280169357e-49]",2.0126338344774562612903904708133934296318506834439464451373504273658677360403502,2.0126338344774562612903904708133936199830988498706095749550332038551540854633581 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,moderate,4099,10322096095657499356,106.519662,103.850741,103.190083,90.000000,13.190083,yes,Both,no,"[0.71581135775056381,1.9867756266571774e-17,-1.1028820227394361e-33,6.1222250754524372e-50]",0.096291975196169784525310139181526871816045133452422261028615229900944061380840822,0.096291975196169784525310139181535194812644791471494678467075788752285130394604154 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,qdpp,ddreal,qdpp dd_real,qdpp npwr,moderate,4099,10322096095657499356,106.491385,103.850741,103.184609,,,,NaN,no,"[-2.8929326812399925,-8.0295011785080708e-17,4.4572685423172447e-33,-2.474281081309007e-49]",-1695.7752558459658673075077886364494173602264988659071916102076549304200625556405,-1695.7752558459658673075077886365965488884921735244318698449135638215709140023681 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",moderate,4099,10322096095657499356,106.373891,103.455996,102.759509,,,,Both,no,"[-0.36144099270550889,-1.0032002803625731e-17,5.5688802478447044e-34,-3.0913495362687196e-50]",-0.00080586416602977375312522760475390522692055461405400605181073388411962243882413759,-0.00080586416602977375312522760475399910564780802927688413249709532873387989737341996 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,wide_exponent,4096,10322096095657499357,106.463253,103.779117,103.294727,90.000000,13.294727,yes,Both,no,"[-4.2985314788901945e+20,-11930.821549849798,6.62293639366862e-13,-3.6764682374394009e-29]",-2.7116946263909823534882310466348560028692459166343819479015128601692309145311966e+144,-2.7116946263909823534882310466350739893700446173843466311067792915601894946997725e+144 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,qdpp,ddreal,qdpp dd_real,qdpp npwr,wide_exponent,4096,10322096095657499357,106.460501,103.777298,103.294727,,,,NaN,no,"[-4.2985314788901945e+20,-11930.821549849798,6.62293639366862e-13,-3.6764682374394009e-29]",-2.7116946263909823534882310466348560028692459166343819479015128601692309145311966e+144,-2.7116946263909823534882310466350739893700446173843466311067792915601894946997725e+144 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",wide_exponent,4096,10322096095657499357,106.381440,103.527280,102.733123,,,,Both,no,"[25243192839578.898,0.00070063934763883447,-3.8893296785349167e-20,2.1590116797337115e-36]",6.5314558416850667205793051431029262199911942560992371852825518724937704498574181e+93,6.5314558416850667205793051431037011424970252237504699458471391554570588684096988e+93 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,qdpp,ddreal,qdpp dd_real,qdpp fmod,moderate,4099,10322096095657499356,135.004363,101.709365,95.502103,,,,NaN,no,"[2.666045778311009,7.3997635194639449e-17,4.1076939180450772e-33,2.2802281829631827e-49] ; [0.22214166730181911,6.1656698441775213e-18,3.4226343116214427e-34,1.8999437088170993e-50]",0.00034577068917962528864980778995916839279651382077593419427617715822265154201886617,0.00034577068917962528864980778996533136861855297550571332369244892564197346729315541 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,moderate,4099,10322096095657499356,135.004363,101.709365,95.502103,,,,NaN,no,"[2.666045778311009,7.3997635194639449e-17,4.1076939180450772e-33,2.2802281829631827e-49] ; [0.22214166730181911,6.1656698441775213e-18,3.4226343116214427e-34,1.8999437088170993e-50]",0.00034577068917962528864980778995916839279651382077593419427617715822265154201886617,0.00034577068917962528864980778996533136861855297550571332369244892564197346729315541 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144,572114432512329142864001791218144 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,qdpp,ddreal,qdpp dd_real,qdpp fmod,wide_exponent,4096,10322096095657499357,78.323405,0.000000,0.000000,,,,NaN,no,"[1.2347084998878686e+21,34270.045131897481,1.9023696580187922e-12,1.0560272978403741e-28] ; [3.0778362709487343e-89,8.5427117350842915e-106,4.7421576305130505e-122,2.6324262938987323e-138]",1.4551915228366851806640625e-11,1.496236298527499726192933808693620496158132324462865624527799753897426005495429e-89 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,wide_exponent,4096,10322096095657499357,78.330828,0.000000,0.000000,,,,NaN,no,"[1.2347084998878686e+21,34270.045131897481,1.9023696580187922e-12,1.0560272978403741e-28] ; [3.0778362709487343e-89,8.5427117350842915e-106,4.7421576305130505e-122,2.6324262938987323e-138]",-1.4551915228366851806640625e-11,1.496236298527499726192933808693620496158132324462865624527799753897426005495429e-89 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144,572114432512329142864001791218144 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,quotient_reduction,2,10322096095657499335,inf,inf,inf,90.000000,inf,yes,Both,yes,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,0,0] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,0,0]",134.96799785736229470766307175341820151552670393203375029736457157980566989863291,134.96799785736229470766307175341820151552670393203375029736457157980566989863291 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,qdpp,ddreal,qdpp dd_real,qdpp fmod,quotient_reduction,2,10322096095657499335,24.892057,0.000000,0.000000,,,,NaN,no,"maximum binary64 below 2^900 [8.452712498170643e+270,0,0,0] ; negative double divisor [-7.5,0,0,0]",0,0.5 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,quotient_reduction,2,10322096095657499335,24.892057,0.000000,0.000000,,,,NaN,no,"maximum binary64 below 2^900 [8.452712498170643e+270,0,0,0] ; negative double divisor [-7.5,0,0,0]",0,0.5 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,quotient_reduction,2,10322096095657499335,inf,inf,inf,,,,No,no,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,0,0] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,0,0]",134.96799785736229470766307175341820151552670393203375029736457157980566989863291,134.96799785736229470766307175341820151552670393203375029736457157980566989863291 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,moderate,4099,10322096095657499356,137.991491,inf,103.120938,90.000000,13.120938,yes,Both,yes,"[4.651496856054143,1.2910497271407093e-16,7.1667656650382064e-33,3.9783541267092195e-49] ; [1.1968567583256404,3.3219448256783813e-17,1.8440498160012704e-33,1.0236532821401969e-49]",-0.13593017724841871918057204650149481280191019956683356060646777679554175755072265,-0.13593017724841871918057204650150713875355427787629311886530032033038040140127123 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,qdpp,ddreal,qdpp dd_real,qdpp drem,moderate,4099,10322096095657499356,134.409394,100.966202,95.502103,,,,NaN,no,"[2.666045778311009,7.3997635194639449e-17,4.1076939180450772e-33,2.2802281829631827e-49] ; [0.22214166730181911,6.1656698441775213e-18,3.4226343116214427e-34,1.8999437088170993e-50]",0.00034577068917962528864980778995916839279651382077593419427617715822265154201886617,0.00034577068917962528864980778996533136861855297550571332369244892564197346729315541 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remainder,moderate,4099,10322096095657499356,134.409394,100.966202,95.502103,,,,NaN,no,"[2.666045778311009,7.3997635194639449e-17,4.1076939180450772e-33,2.2802281829631827e-49] ; [0.22214166730181911,6.1656698441775213e-18,3.4226343116214427e-34,1.8999437088170993e-50]",0.00034577068917962528864980778995916839279651382077593419427617715822265154201886617,0.00034577068917962528864980778996533136861855297550571332369244892564197346729315541 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,tlfloat,tlquad,TLFloat Quad,tlfloat::remainder,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,near_one,4099,10322096095657499359,107.411772,104.726423,103.815855,80.000000,23.815855,yes,Both,yes,"[0.51829726641315743,1.4385638969304155e-17,-7.9856338038331893e-34,4.4329172576202887e-50]",0.54181616064164601141836335700755281177762270906400557918307925851265915984100729,0.54181616064164601141836335700752246129643265188541540400851198947696500079557021 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,qdpp,ddreal,qdpp dd_real,qdpp sinh,near_one,4099,10322096095657499359,107.090908,104.381391,103.645559,,,,NaN,no,"[0.70605664046588912,1.9597008473367903e-17,-1.0878525010453667e-33,6.0387944702831416e-50]",0.76619976927372938814837145149464280564137290853475812074181692276457489310104165,0.76619976927372938814837145149469110262141228326110030876169141933709498395269912 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,near_one,4099,10322096095657499359,103.314713,100.590468,99.932085,,,,Both,no,"[0.556376029442197,1.5442536955906277e-17,-8.5723300435360125e-34,4.7585990945098258e-50]",0.58552836632655900670708376199067605028722445297766704511594490836778881259760965,0.58552836632655900670708376199116021458707057522670375998661998280538289617921361 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,near_one,4099,10322096095657499359,114.943677,113.141428,113.021471,,,,No,no,"[0.88382018328015488,2.4530937927651344e-17,-1.3617406051464522e-33,7.559178867002926e-50]",1.0034630059833739039108480399599084583957300102559614242164711890692549607628781,1.0034630059833739039108480399599085535982428899557028619169496230290414232934836 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,moderate,4099,10322096095657499356,107.428545,104.869846,103.568829,80.000000,23.568829,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50]",0.12683416188096790784216939618227372193425686465939287968000771713444896349187729,0.12683416188096790784216939618228215357757794097427308352934774394732010797034323 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,qdpp,ddreal,qdpp dd_real,qdpp sinh,moderate,4099,10322096095657499356,106.885784,104.435203,103.870123,,,,NaN,no,"[-0.2542586325750964,-7.057094702364497e-18,3.9174745127626403e-34,-2.17463520122565e-50]",-0.25700703019627618270770115594239598265277418504551841190443166735831240221621385,-0.25700703019627618270770115594240984773141934339998680690421520718433231060336277 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,moderate,4099,10322096095657499356,103.779582,101.002087,100.236433,,,,Both,no,"[-0.53059214692798662,-1.4726890455118619e-17,8.1750664322025707e-34,-4.5380734904357627e-50]",-0.55584104592641476129020046112854089859321241383858441232520679895282023075253619,-0.5558410459264147612902004611289130996470591645326795565000699081687663834429277 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,moderate,4099,10322096095657499356,114.974128,113.192568,113.003172,,,,No,no,"[-4.1591464579851021,-1.1543950401108066e-16,6.4081797652204933e-33,-3.5572543606424108e-49]",-32.000618655313629721674682365518236008420232252926831380721182706899571868142118,-32.0006186553136297216746823655182329336415739416390744160297430115592657339984 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,near_one,4099,10322096095657499359,108.151971,105.591524,104.831618,80.000000,24.831618,yes,Both,-,"[1.4994043079684287,4.1616829648217466e-17,-2.3101981243676942e-33,1.2824175745594325e-49]",2.3511416377389521966137617451012654144360692751585280356211248541098424169604186,2.3511416377389521966137617451013305498775090885888924794020061506206886998298218 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,qdpp,ddreal,qdpp dd_real,qdpp cosh,near_one,4099,10322096095657499359,107.863612,105.297250,104.470578,,,,NaN,-,"[1.4489040565134639,4.0215166100350915e-17,-2.2323901671867327e-33,1.2392254817787567e-49]",2.2466362233200427213995508459808834140324823472328528703239550884385167250911763,2.24663622332004272139955084598096335238256731634234766524569758842515233906734 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,near_one,4099,10322096095657499359,104.244078,101.474027,101.018845,,,,Both,-,"[1.4459858354426181,4.0134169194755932e-17,-2.2278939357109857e-33,1.2367295719245473e-49]",2.2407748785941455468149928931172890798881812171960175770167589259784790556295775,2.2407748785941455468149928931181614399296154393447339518228073553103157037095686 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,near_one,4099,10322096095657499359,114.895079,113.182096,113.010341,,,,No,-,"[1.3229625356615966,3.6719586695199608e-17,-2.0383465301865082e-33,1.1315096249889291e-49]",2.0104364576665678758598407499062611809762474391010385287739734136349539772581352,2.0104364576665678758598407499062609887609457666528309771732843508256939227761068 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,moderate,4099,10322096095657499356,107.662138,105.118172,104.370708,80.000000,24.370708,yes,Both,-,"[-7.2839693641636938,-2.0217076246896986e-16,1.122273176995369e-32,-6.2298676050974111e-49]",728.37982867708396528583195554001745260585065072868172597435332260573659368674271,728.37982867708396528583195554004522697642161075015288462613983940694317570296734 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,qdpp,ddreal,qdpp dd_real,qdpp cosh,moderate,4099,10322096095657499356,107.483805,104.881438,104.111506,,,,NaN,-,"[7.0128923877089875,1.946468649513252e-16,-1.0805071557003232e-32,5.9980196126536888e-49]",555.43190455748570319974002005868170632481445737714788744485670812789379624518915,555.43190455748570319974002005870705438166427560668951714415596620645132619201956 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,moderate,4099,10322096095657499356,103.832933,101.138682,100.616889,,,,Both,-,"[6.2894204955453095,1.7456648614259411e-16,-9.6903866121708154e-33,5.3792451671757032e-49]",269.42141683849341758232407964909905497460624068820139994447256104326271497484413,269.42141683849341758232407964923764454985239125085761375472047443911151216271434 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,moderate,4099,10322096095657499356,114.931183,113.167572,113.012441,,,,No,-,"[2.0680399334084143,5.7399638747857426e-17,-3.1863200271518802e-33,1.7687629289841357e-49]",4.0178692533490240404296040425970871191188024353226664008220687178646150783389857,4.0178692533490240404296040425970867355340668113774081960274487118933383171930497 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,near_one,4099,10322096095657499359,108.508993,105.293208,103.771823,80.000000,23.771823,yes,Both,yes,"[0.51172914905977851,1.4203337091450122e-17,-7.884435932720214e-34,4.3767411543439516e-50]",0.47129137278430720759814686288642179705346521613436667069278209179356009528305549,0.47129137278430720759814686288639457893398171528583227402623085761363208890619784 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,qdpp,ddreal,qdpp dd_real,qdpp tanh,near_one,4099,10322096095657499359,108.592328,105.735071,105.098015,,,,Both,no,"[0.58416164284675398,1.6213742649783091e-17,-9.0004352025680418e-34,4.9962451967689124e-50]",0.52568361604852371688202223691267621130986870473801164119274069051399034258054144,0.52568361604852371688202223691268831922667016929762092801084851574231028090029755 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,near_one,4099,10322096095657499359,104.549583,101.155017,100.345784,,,,Both,no,"[0.556376029442197,1.5442536955906277e-17,-8.5723300435360125e-34,4.7585990945098258e-50]",0.50528364840645601747577363559900197677740795879784146166067930320588141857029996,0.50528364840645601747577363559931562602749387840749911387652478785100115049351614 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,near_one,4099,10322096095657499359,115.041332,113.224776,113.018718,,,,Inf,no,"[0.552774916573326,1.5342585995373914e-17,-8.5168461146777975e-34,4.7277993268522986e-50]",0.50259706445063723172976483018675200373774673231800013130307827226899634702472763,0.50259706445063723172976483018675195596328587350834779271290641898064907256890663 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,moderate,4099,10322096095657499356,109.925995,105.123457,103.815933,80.000000,23.815933,yes,Both,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.48322034922123225518708897646637636069385959299582733007677741617069688828678409,0.48322034922123225518708897646634929399270770971586954580993858000068003447759588 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,qdpp,ddreal,qdpp dd_real,qdpp tanh,moderate,4099,10322096095657499356,109.941576,105.403737,104.022939,,,,Both,no,"[-0.2542586325750964,-7.057094702364497e-18,3.9174745127626403e-34,-2.17463520122565e-50]",-0.24891764507154159340917437775173972890450198659567844774309803106940482131381742,-0.24891764507154159340917437775175180789991987808388789206287063251566640478939434 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,moderate,4099,10322096095657499356,107.024889,102.226945,100.639803,,,,Both,no,"[-0.53059214692798662,-1.4726890455118619e-17,8.1750664322025707e-34,-4.5380734904357627e-50]",-0.48583360068250018583086622934612463370687351803631456906975097116002659802802555,-0.48583360068250018583086622934637060713264426066036289533463488732206999871421232 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,moderate,4099,10322096095657499356,115.363409,113.532562,113.121187,,,,Inf,no,"[-0.5998341324142249,-1.6648741619058185e-17,9.2419081382567522e-34,-5.1302896032816304e-50]",-0.53693152879880785898041492583469711473728507809526835316606195460550324423387725,-0.53693152879880785898041492583469706719845615505246020917703587632005152396862512 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,near_one,4099,10322096095657499359,107.942783,105.155677,104.205601,80.000000,24.205601,yes,Both,yes,"[0.54780977077077553,1.5204775515608602e-17,-8.4403459308427531e-34,4.6853331941114368e-50]",0.52356044719022625228591770335188992100790509674337745785256442894450845670917261,0.52356044719022625228591770335191230591271180851991336042503192896063029229750644 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,qdpp,ddreal,qdpp dd_real,qdpp asinh,near_one,4099,10322096095657499359,106.711442,103.961722,103.072032,,,,NaN,no,"[0.52823964483236285,1.4661595405317608e-17,-8.1388203983610065e-34,4.517952899774639e-50]",0.50632644493980583852529647906712821803145603212361033746932194310463870579042123,0.5063264449398058385252964790670807220011452357647174662076578948536130292071603 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,near_one,4099,10322096095657499359,103.816146,100.780938,99.800033,,,,Both,no,"[0.5576392959998614,1.5477599646370227e-17,-8.5917937466652033e-34,4.769403620189074e-50]",0.53216330948166039562825976302834831342044029859942942121705690004980493501562933,0.53216330948166039562825976302883052907969987597028703665857651454611260317937864 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,near_one,4099,10322096095657499359,114.884758,113.122222,113.007648,,,,No,no,"[1.1779140555896355,3.2693682638630247e-17,-1.8148639612597521e-33,1.0074518781764974e-49]",1.0017569054609729283589884138505580828278717088605237274331326762110317037113294,1.0017569054609729283589884138505579868722109578149090755180498437202003300766939 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,moderate,4099,10322096095657499356,108.220931,105.311170,103.818628,80.000000,23.818628,yes,Both,yes,"[-0.065200541635407561,-1.8096785635415158e-18,1.0045734042071851e-34,-5.5765026163844551e-51]",-0.065154433999027981604796867967127986881415212588611420145090880769980952458286794,-0.065154433999027981604796867967124344186568215933203026966926467120453192197675953 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,qdpp,ddreal,qdpp dd_real,qdpp asinh,moderate,4099,10322096095657499356,107.433592,104.625661,0.000000,,,,NaN,no,"midpoint [0,0,0,0]",-0.5,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,moderate,4099,10322096095657499356,105.111909,101.672387,100.007734,,,,Both,no,"[0.4300835480404146,1.1937216438673698e-17,-6.6264862700747261e-34,3.6784388146997172e-50]",0.417820251288375409972859501512898045290567648359341993891738758094139827292679,0.4178202512883754099728595015132258850600119393786524691588748596799786548401261 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,moderate,4099,10322096095657499356,114.871483,113.164718,113.024305,,,,No,no,"[3.7333993131913807,1.0362264694062042e-16,-5.7522124253040164e-33,3.1931193385537162e-49]",2.0279383819186585084121279272279713196675799418072996533879457279437663955179438,2.0279383819186585084121279272279715116885312926883178850691969552555567203716169 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,moderate,4099,10322096095657499387,108.351907,105.741626,104.602282,80.000000,24.602282,yes,Both,-,"[1.0163605766345611,2.8209672837524767e-17,-1.5659514150681434e-33,8.6927765822649907e-50]",0.18064417420571660663002643085721230147927409837472224057688179881691649397712496,0.18064417420571660663002643085721816825671862302878034638011489993285710967947058 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,qdpp,ddreal,qdpp dd_real,qdpp acosh,moderate,4099,10322096095657499387,107.773637,105.082230,0.000000,,,,NaN,-,"lower endpoint [1,0,0,0]",-0.5,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,moderate,4099,10322096095657499387,105.539914,102.217591,100.384388,,,,Both,-,"[1.1709254555463331,3.249971002168098e-17,-1.8040963179855585e-33,1.0014746354345175e-49]",0.57665699913917249167543347514105386745673957917489461428525946025923365478860205,0.5766569991391724916754334751414023697075837995469982943468518144667513041144549 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,moderate,4099,10322096095657499387,115.059144,113.267306,113.024351,,,,No,-,"[3.8699921915058342,1.0741386090323363e-16,-5.9626670769326946e-33,3.3099451384925286e-49]",2.0292730557141128075372232618212138749815878457667406971551750687385697394238271,2.0292730557141128075372232618212136828403580686083850658195804537308812685715241 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,boundary,4101,10322096095657499355,107.711288,104.331717,103.672888,80.000000,23.672888,yes,Both,-,"[1.0000006976642144,2.7755594979700771e-17,-1.54074503043171e-33,8.5528530393103596e-50]",0.0011812401392645466366367223496664025691107131134376936381879814208025359246329034,0.0011812401392645466366367223496664756307232078155433668789257650353131882010275132 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,qdpp,ddreal,qdpp dd_real,qdpp acosh,boundary,4101,10322096095657499355,106.664071,103.934820,0.000000,,,,NaN,-,"[1,0,0,0]",-0.5,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,boundary,4101,10322096095657499355,105.680045,101.710952,101.079624,,,,Both,-,"[1.9999990658472695,5.5511125303311079e-17,-3.0814864717294043e-33,1.7105686154924606e-49]",1.3169573575913183806206053356776144386291410718207369817816534095233915735434493,1.3169573575913183806206053356781059946048036439182701968030728549965132899787948 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,boundary,4101,10322096095657499355,114.746080,113.201891,113.036560,,,,No,-,"[1.0000004817944794,2.7755588988112018e-17,-1.5407446978317207e-33,8.5528511930095289e-50]",0.00098162563206491441874298495040138570975940288164826724838384161703782738019139625,0.00098162563206491441874298495040138580192116085770131138514473092172470104226838173 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,moderate,4099,10322096095657499356,107.718351,104.542010,103.139045,80.000000,23.139045,yes,Both,yes,"[-0.28874902442031025,-8.0143953812370009e-18,4.4488831403494138e-34,-2.4696262481412955e-50]",-0.29720096062669683272865803517211421035379945494633700815507025452637257512122915,-0.29720096062669683272865803517208759673932197508207544978047397151679963698000212 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,qdpp,ddreal,qdpp dd_real,qdpp atanh,moderate,4099,10322096095657499356,107.219197,104.409168,103.554334,,,,Both,no,"[-0.084655633592085944,-2.3496658394541165e-18,1.3043265575685784e-34,-7.2404668792135272e-51]",-0.084858738000380082551010311704664761059101588266307168112619662759567307208641296,-0.084858738000380082551010311704670459233783125377342399423042080577740336303080062 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,moderate,4099,10322096095657499356,105.624929,102.148131,101.316477,,,,Both,no,"[0.62764313350169854,1.7420596451536667e-17,-9.6703736415996537e-34,5.3681357368160785e-50]",0.73751780205133126725673321943555768093904551298771999434742818041454981425886217,0.73751780205133126725673321943579128155966759716208171117997200450929687036778351 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,moderate,4099,10322096095657499356,114.908941,113.183849,113.009480,,,,No,no,"[-0.46396013668772096,-1.2877480656473566e-17,7.1484377619910142e-34,-3.9681800967311743e-50]",-0.50234596747773904865253807286233097224104131869860818047026432546942747991991496,-0.50234596747773904865253807286233092418371010656600101473678518793597466683589449 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,boundary,4105,10322096095657499355,108.512745,106.655151,106.203619,80.000000,26.203619,yes,Both,yes,"[-0.99899927667986499,-2.7727799963846583e-17,1.539202097103153e-33,-8.544288038776232e-50]",-3.799839456997147855581613541852042024176399900088711456868967222127997374059305,-3.799839456997147855581613541852082695691985906489816947756475473707459623001287 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,qdpp,ddreal,qdpp dd_real,qdpp atanh,boundary,4105,10322096095657499355,107.993764,105.426852,0.000000,,,,Both,no,"[-0,0,0,0]",-0.25,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,boundary,4105,10322096095657499355,107.828369,106.269551,104.585034,,,,Both,no,"[-0.5,0,0,0]",-0.54930614433405484569762261846124479796810281996701244989017928624722153507775602,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,boundary,4105,10322096095657499355,115.361632,113.939200,113.173250,,,,No,no,"[-0.5,0,0,0]",-0.54930614433405484569762261846126280541308284062223852328394245531764986632816683,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,near_one,4099,10322096095657499359,107.766481,104.260004,103.477540,80.000000,23.477540,yes,Both,yes,"[0.63773432238017391,1.7700683207504784e-17,-9.8258530242838391e-34,5.4544441320713228e-50]",0.63288603898704082304852473006912003275150944031003931863308835424966614091601969,0.6328860389870408230485247300690752116994000610050783793434311866968213898036298 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,near_one,4099,10322096095657499359,106.194455,102.183057,101.184994,,,,Both,no,"[0.53548819375999224,1.4862783053182011e-17,-8.2505019778256258e-34,4.5799486302487013e-50]",0.55112665424029227785508649938232538753270271835738832653895855062664566048624692,0.55112665424029227785508649938251660744941249076854316599667893359729852255925888 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,near_one,4099,10322096095657499359,115.124806,113.304511,113.099781,,,,Inf,no,"[0.50289575568916656,1.3958161173809507e-17,-7.748335958296108e-34,4.3011904917156829e-50]",0.52304092944980720556572922310906538941879260415288739219076647612942224975507433,0.52304092944980720556572922310906534241757921999581684753101762682302235845555926 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,moderate,4099,10322096095657499356,114.031302,105.136563,103.642929,80.000000,23.642929,yes,Both,yes,"[0.57618201352237719,1.5992263444685661e-17,-8.8774895460806198e-34,4.9279966474639169e-50]",0.58483862789646320066419155791433430439304208383200808363911138388832600121247651,0.58483862789646320066419155791429737215979664256706430739228534678145335856964206 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,moderate,4099,10322096095657499356,113.983991,103.700474,101.648786,,,,Both,no,"[-0.5716770143103389,-1.5867224598407584e-17,8.8080790430253763e-34,-4.8894660781425438e-50]",-0.58118187967003879843073421984341735301833588689049142915266289071210548122792261,-0.58118187967003879843073421984356356345148985854257440755257771327766377011312792 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,moderate,4099,10322096095657499356,115.374771,113.586571,113.036088,,,,Inf,no,"[0.2267593093247573,6.2938351565110877e-18,-3.4937803519769427e-34,1.9394376948738926e-50]",0.25155171091007438344002347195342211717096167376876435890978837978420765923021074,0.25155171091007438344002347195342214079608489454741680081317269235003386899327349 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,near_one,4099,10322096095657499359,105.308687,102.381484,101.601777,80.000000,21.601777,yes,Both,-,"[0.9902100102210416,2.74838488140428e-17,-1.5256600879333559e-33,8.4691147868762635e-50]",0.16140301992014431339678047519482652144140492984788687432496615166421793929885098,0.16140301992014431339678047519478457172356343218546211428730930584097639007690213 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,near_one,4099,10322096095657499359,103.752581,101.145295,100.349669,,,,Both,-,"[1.3269384103584123,3.6829939385985342e-17,-2.0444723350934913e-33,1.1349101298149763e-49]",0.060576462988822571448810903007093159144687718926563865599815508636641347983697869,0.060576462988822571448810903007055658100102621540510399378637298350232657879135663 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,near_one,4099,10322096095657499359,114.982303,113.213810,113.071281,,,,Inf,-,"[0.80083449033122145,2.2227622251991859e-17,-1.2338809003415918e-33,6.8494149260222667e-50]",0.25740285684031596236392165679791925931975478436236106519156635466784809572471371,0.25740285684031596236392165679791928291183093915807724913103163989411993536165529 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,moderate,4099,10322096095657499356,109.069920,100.123363,99.167646,80.000000,19.167646,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804815742671822427612167381748211215236610271972494957,0.0048523201680211414554273497804747585214492493110494604164051752716872765694644792 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,moderate,4099,10322096095657499356,108.834955,99.620228,99.060329,,,,Both,-,"[6.9490746956892782,1.9287556817485724e-16,-1.070674483376928e-32,5.9434373166185492e-49]",8.5740965398686050033209262286348904843349839873934226306933761725669491073941353e-23,8.5740965398686050033209262286219169640957175473792335532635992276588891700122152e-23 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,moderate,4099,10322096095657499356,115.203014,113.242670,113.051599,,,,Inf,-,"[7.5037321448425516,2.0827040494560277e-16,-1.1561329945930663e-32,6.4178273506302694e-49]",2.6241573054106070556560136630867966813651251129676318065538857582990160319181036e-26,2.624157305410607055656013663086796437546133956840801798010299652149670834993565e-26 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,moderate,4099,10322096095657499371,107.300170,103.199673,102.168212,80.000000,22.168212,yes,Both,-,"[16.10862066659595,4.4710403897518653e-16,-2.4819259923657773e-32,1.3777456910700632e-48]",28.197381657001775717891747205953291356104893832451631814899496025761393980246794,28.197381657001775717891747205948342415185062324244223614602442709080412981510555 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lgamma,moderate,4099,10322096095657499371,105.133098,100.760580,92.065791,,,,Both,-,"[0.99874974000558037,2.7720873929814604e-17,-1.5388176249805709e-33,8.5421537897621465e-50]",0.00072295607710545662058194796458275488909819673752452280824622669615210185075152016,0.00072295607710545662058194796472224625027501458658803985557334948681356598407441761 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::lgamma,moderate,4099,10322096095657499371,114.971639,113.175643,113.013850,,,,No,-,"[17.500019022698545,4.8572310125945387e-16,-2.6963048530529103e-32,1.4967498646339452e-48]",32.081168794062295073979477959328457529686036531915204354297578928385120677901909,32.081168794062295073979477959328454469896577802020991166202567137045500772062679 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,moderate,4099,10322096095657499368,105.565044,98.349598,97.317514,80.000000,17.317514,yes,Both,-,"[16.916625286240897,4.6953067229351934e-16,-2.6064188157399712e-32,1.4468530905253747e-48]",16565261246416.8279913958728258930306644070018506909036659635603427886962890625,16565261246416.827991395872825976920133201596664513013387683984998603514086978856 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tgamma,moderate,4099,10322096095657499368,100.755821,97.383410,96.496549,,,,Both,-,"[16.868177199116474,4.6818596774790482e-16,-2.5989542060006744e-32,1.4427093997241705e-48]",14465982228876.97039145927965612579112197888520086053176783025264739990234375,14465982228876.970391459279656255208345090859253988616153313666634359989655775049 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::tgamma,moderate,4099,10322096095657499368,115.005599,113.180213,113.028818,,,,No,-,"[19.355750178950849,5.3722998768909317e-16,-2.9822255092576032e-32,1.655467712501137e-48]",18139783686946539.5291010872149636591610377678307486348785459995269775390625,18139783686946539.529101087214963657448786918022005302501784474121108477330902841 diff --git a/validation/metrics/data/windows/x86_64/detail/MinGW_f128_benchmark.csv b/validation/metrics/data/windows/x86_64/detail/MinGW_f128_benchmark.csv new file mode 100644 index 0000000..406588d --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MinGW_f128_benchmark.csv @@ -0,0 +1,292 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,81920,1.808751,1.809071|1.807268|1.811752|1.814239|1.808751|1.801906|1.805420,61358080,110956500.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,qdpp,ddreal,qdpp dd_real,qdpp operator+,81920,0.925775,0.927303|0.924996|0.925775|0.925080|0.924571|0.926407|0.925999,125009920,115725800.000000,0.511831 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator+,81920,7.205388,7.254639|7.227548|7.223370|7.205388|7.197313|7.199942|7.185575,14909440,107547700.000000,3.983626 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,tlfloat,tlquad,TLFloat Quad,TLFloat operator+,81920,48.258870,48.397217|48.130697|48.258870,737280,35582800.000000,26.680768 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,81920,1.786041,1.789116|1.784938|1.786041|1.789293|1.787908|1.784586|1.783846,59637760,106544800.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,qdpp,ddreal,qdpp dd_real,qdpp operator-,81920,0.928556,0.926733|0.924517|0.926570|0.930390|0.938754|0.931110|0.928556,124436480,115666000.000000,0.519896 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator-,81920,7.260648,7.319946|7.289570|7.291166|7.260648|7.249615|7.247127|7.244732,14909440,108418900.000000,4.065219 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,tlfloat,tlquad,TLFloat Quad,TLFloat operator-,81920,47.496745,47.574463|47.430420|47.496745,737280,35021200.000000,26.593308 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,81920,1.624172,1.625594|1.620351|1.622283|1.624172|1.621317|1.624873|1.627081,65945600,107073700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,qdpp,ddreal,qdpp dd_real,qdpp operator*,81920,1.733134,1.735183|1.736243|1.735195|1.732304|1.730830|1.733134|1.730876,60784640,105363800.000000,1.067087 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator*,81920,113.341064,113.514404|113.323975|113.341064,245760,27867500.000000,69.783903 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,tlfloat,tlquad,TLFloat Quad,TLFloat operator*,81920,36.112061,35.921631|36.112061|36.136475,737280,26583900.000000,22.234135 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,81920,2.304382,2.305661|2.304382|2.304586|2.308713|2.303031|2.301679|2.300604,48168960,110985800.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,qdpp,ddreal,qdpp dd_real,qdpp operator/,81920,13.060547,13.015381|13.073649|13.042806|13.069417|13.069906|13.048096|13.060547,8601600,112287500.000000,5.667700 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::operator/,81920,116.009521,116.009521|115.893555|116.599121,245760,28549300.000000,50.343001 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,tlfloat,tlquad,TLFloat Quad,TLFloat operator/,81920,103.261719,103.261719|103.060303|103.631592,245760,25391400.000000,44.811018 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,81920,7.982080,8.040771|8.013037|7.984668|7.982080|7.976123|7.979443|7.980518,14336000,114599200.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fma,81920,121.090088,121.130371|120.485840|121.090088,245760,29712900.000000,15.170242 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,tlfloat,tlquad,TLFloat Quad,tlfloat::fma,81920,78.414307,78.326416|78.414307|78.615723,491520,38560800.000000,9.823794 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,81920,2.861464,2.943503|2.895314|2.872605|2.861464|2.855360|2.844219|2.844936,36126720,103825100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,qdpp,ddreal,qdpp dd_real,qdpp abs,81920,2.756561,2.853171|2.818545|2.779057|2.756561|2.734162|2.728582|2.712732,36126720,100033900.000000,0.963339 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::abs,81920,3.312620,3.351521|3.315061|3.283369|3.266671|3.258034|3.377732|3.312620,30392320,100576900.000000,1.157666 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,81920,2.554102,2.595036|2.554102|2.543717|2.525081|2.518018|2.562354|2.617692,43008000,110075900.000000,0.892586 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,81920,3.087410,3.144357|3.117908|3.105895|3.087410|3.077606|3.078749|3.074564,36126720,111923100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,qdpp,ddreal,qdpp dd_real,qdpp fabs,81920,2.779865,2.841415|2.780991|2.779865|2.777462|2.769737|2.771759|2.803211,36700160,102364300.000000,0.900387 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fabs,81920,3.229126,3.257650|3.229126|3.216878|3.188293|3.174744|3.252604|3.329285,34406400,111322300.000000,1.045901 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,tlfloat,tlquad,TLFloat Quad,tlfloat::abs,81920,2.682224,2.772675|2.753415|2.719760|2.682224|2.673882|2.671814|2.651638,41287680,111626600.000000,0.868762 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,81920,1.226281,1.221690|1.227609|1.221761|1.217460|1.227240|1.227303|1.226281,98631680,120744100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,qdpp,ddreal,qdpp dd_real,qdpp sqr,81920,1.408709,1.410738|1.399409|1.413416|1.403826|1.408709|1.412801|1.401639,79708160,112166900.000000,1.148765 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,8192,31.696112,31.692782|31.748269|31.696112,811008,25719000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,qdpp,ddreal,qdpp dd_real,qdpp inv,8192,12.923825,12.957880|12.952204|12.932222|12.923281|12.923825|12.914728|12.919315,9003008,116426200.000000,0.407742 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,81920,2.323194,2.390227|2.354917|2.336953|2.323194|2.307310|2.291410|2.280620,46448640,108057000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmin,81920,2.418854,2.441422|2.423645|2.421173|2.411392|2.418503|2.418854|2.410019,45875200,111050800.000000,1.041176 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,tlfloat,tlquad,TLFloat Quad,tlfloat::fmin,81920,13.060913,13.128836|13.059431|13.060913|13.101807|13.112270|13.043736|13.017840,8028160,104968000.000000,5.621964 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,81920,2.456736,2.499398|2.482783|2.463664|2.456736|2.445243|2.447652|2.436698,44154880,108697800.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmax,81920,2.308320,2.334788|2.323340|2.310880|2.303556|2.308320|2.299373|2.293418,47022080,108645700.000000,0.939588 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,tlfloat,tlquad,TLFloat Quad,tlfloat::fmax,81920,13.310198,13.356062|13.310198|13.323713|13.291277|13.284127|13.258667|13.315517,8028160,106819900.000000,5.417837 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,81920,3.247208,3.246696|3.245692|3.247208|3.257466|3.249866|3.246381|3.254670,35553280,115537900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fdim,81920,5.168627,5.209079|5.193787|5.172051|5.168627|5.154826|5.160387|5.156793,20643840,106804000.000000,1.591714 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,tlfloat,tlquad,TLFloat Quad,tlfloat::fdim,81920,53.481445,53.355103|53.556519|53.481445,491520,26278800.000000,16.469978 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,81920,1.029455,1.104759|1.068041|1.044200|1.029455|1.020121|1.006715|1.005301,94044160,97787000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::copysign,81920,4.910724,4.944409|4.920093|4.910724|4.916794|4.888586|4.873575|4.890599,21217280,104100400.000000,4.770218 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,tlfloat,tlquad,TLFloat Quad,tlfloat::copysign,81920,4.710449,4.743591|4.710449|4.702972|4.716095|4.696320|4.701324|4.718475,22937600,108099100.000000,4.575674 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,81920,1.077510,1.087640|1.071215|1.077510|1.077766|1.064440|1.101113|1.064594,109527040,118043200.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,qdpp,ddreal,qdpp dd_real,qdpp floor,81920,0.969734,0.968061|1.004106|0.969734|0.961796|1.004478|0.967355|0.970168,112967680,110477500.000000,0.899977 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::floor,81920,0.983716,0.975380|1.001799|0.983716|0.992482|0.993564|0.951276|0.955950,110673920,108368200.000000,0.912953 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,tlfloat,tlquad,TLFloat Quad,tlfloat::floor,81920,7.214310,7.209744|7.233254|7.221951|7.206127|7.214672|7.213813|7.214310,15482880,111728600.000000,6.695352 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,81920,1.695711,1.706051|1.712698|1.704994|1.695711|1.693310|1.695023|1.695444,68239360,116038400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,qdpp,ddreal,qdpp dd_real,qdpp ceil,81920,0.924828,0.924828|0.926027|0.924733|0.926631|0.924879|0.924739|0.923596,125009920,115641900.000000,0.545393 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ceil,81920,3.188322,3.186268|3.187760|3.188322|3.194832|3.190763|3.192817|3.183419,36126720,115214200.000000,1.880228 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,tlfloat,tlquad,TLFloat Quad,tlfloat::ceil,81920,7.435981,7.429380|7.434805|7.435981|7.426848|7.437970|7.444435|7.446967,15482880,115140400.000000,4.385171 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,81920,2.714478,2.702968|2.705287|2.714478|2.719552|2.711966|2.718122|2.720215,40140800,108911100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,qdpp,ddreal,qdpp dd_real,qdpp aint,81920,3.505132,3.518231|3.505132|3.500108|3.499216|3.494145|3.583914|3.546776,29818880,104994500.000000,1.291273 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::trunc,81920,6.098348,6.155599|6.163371|6.115072|6.090169|6.091309|6.098348|6.095907,17203200,105209300.000000,2.246601 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,tlfloat,tlquad,TLFloat Quad,tlfloat::trunc,81920,5.748254,5.752878|5.748254|5.728723|5.726466|5.750584|5.766121|5.735677,18923520,108698600.000000,2.117628 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,81920,10.056988,10.179957|10.060264|10.043753|10.056988|10.052747|10.048443|10.062449,10895360,109739000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,qdpp,ddreal,qdpp dd_real,qdpp round,81920,10.476956,10.534600|10.476956|10.490655|10.483534|10.457560|10.451796|10.434706,10321920,108129200.000000,1.041759 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::round,81920,8.829901,8.827015|8.829901|8.885332|8.853871|8.830400|8.823631|8.820856,12615680,111506400.000000,0.877987 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,tlfloat,tlquad,TLFloat Quad,tlfloat::round,81920,10.157006,10.211530|10.153809|10.159912|10.172061|10.150553|10.138870|10.157006,12042240,122390000.000000,1.009945 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,81920,7.796094,7.808594|7.790186|7.796094|7.788965|7.799414|7.802100|7.781201,14336000,111752300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,tlfloat,tlquad,TLFloat Quad,tlfloat::rint,81920,10.331055,10.319031|10.327332|10.339111|10.348083|10.333008|10.331055|10.324890,11468800,118493200.000000,1.325158 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,8192,3.394130,3.413175|3.403397|3.388335|3.384351|3.394130|3.399988|3.391020,32858112,111597400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lround,8192,19.346469,19.404153|19.346469|19.346469,1253376,24272500.000000,5.699979 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,8192,3.225944,3.242460|3.239293|3.229491|3.223077|3.225322|3.225944|3.221714,34922496,112786200.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::llround,8192,160.266113,160.433524|160.266113|160.027204,172032,27566800.000000,49.680384 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,8192,79.360727,79.611441|79.322228|79.360727,319488,25377400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,8192,113.731689,113.731689|113.990479|113.597412,245760,27960900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,4096,17.727458,17.727458|17.745158|17.717692,1474560,26144100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,qdpp,ddreal,qdpp dd_real,qdpp fmod,4096,23.996829,24.068151|23.996829|23.977078,1093632,26262500.000000,1.353653 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::fmod,4096,213.525391,213.525391|213.627486|213.163619,135168,28850100.000000,12.044896 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,tlfloat,tlquad,TLFloat Quad,tlfloat::fmod,4096,288.522339,288.522339|288.595581|288.397217,98304,28361200.000000,16.275449 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,4096,19.847036,19.763298|19.888334|19.847036,1314816,26076600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,qdpp,ddreal,qdpp dd_real,qdpp drem,4096,26.290189,26.263584|26.324932|26.290189,958464,25200800.000000,1.324641 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remainder,4096,218.686523,218.894043|218.217773|218.686523,122880,26861500.000000,11.018599 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,tlfloat,tlquad,TLFloat Quad,tlfloat::remainder,4096,301.864624,301.708984|301.950073|301.864624,98304,29672200.000000,15.209557 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,4096,20.014004,20.014004|20.022986|19.982910,1302528,26059200.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,qdpp,ddreal,qdpp dd_real,qdpp divrem,4096,26.392541,26.392541|26.408191|26.362179,958464,25291600.000000,1.318704 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::remquo,4096,219.606934,219.057617|219.606934|220.183105,122880,26986400.000000,10.972664 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,tlfloat,tlquad,TLFloat Quad,tlfloat::remquo,4096,318.767439,318.805804|318.498884|318.767439,86016,27412500.000000,15.927220 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,81920,5.545918,5.557103|5.544961|5.534833|5.530742|5.558620|5.555420|5.545918,21217280,117688000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::modf,81920,11.423272,11.423272|11.512112|11.444973|11.449585|11.420627|11.407539|11.403198,10321920,118055200.000000,2.059762 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,tlfloat,tlquad,TLFloat Quad,tlfloat::modf,81920,69.005737,68.843384|69.005737|69.114990,491520,33909000.000000,12.442617 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,81920,1.269166,1.269111|1.275650|1.266149|1.269959|1.264058|1.269166|1.269959,90030080,114261700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,qdpp,ddreal,qdpp dd_real,qdpp ldexp,81920,9.148055,9.149807|9.141952|9.145561|9.151187|9.154265|9.148055|9.145402,13189120,120654500.000000,7.207928 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ldexp,81920,9.356578,9.358909|9.364125|9.353860|9.352861|9.356578|9.337269|9.359020,12615680,118015400.000000,7.372227 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,tlfloat,tlquad,TLFloat Quad,tlfloat::ldexp,81920,8.847019,8.891071|8.881571|8.845586|8.841022|8.847019|8.881411|8.835078,13189120,116860800.000000,6.970736 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,81920,1.246553,1.253909|1.248069|1.248532|1.246553|1.245971|1.244104|1.245221,87736320,109449300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,qdpp,ddreal,qdpp dd_real,qdpp ldexp,81920,9.136538,9.129586|9.135211|9.135318|9.136538|9.160156|9.169073|9.216839,13189120,120742100.000000,7.329440 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbn,81920,9.368896,9.375610|9.380826|9.368896|9.354692|9.368896|9.365068|9.372281,12615680,118202200.000000,7.515841 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,81920,1.243244,1.252940|1.243804|1.241793|1.242353|1.241900|1.243244|1.248541,91176960,113509800.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,qdpp,ddreal,qdpp dd_real,qdpp ldexp,81920,9.141686,9.174433|9.153044|9.141686|9.143916|9.136538|9.132292|9.134999,13189120,120618100.000000,7.353092 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::scalbln,81920,9.325950,9.321899|9.336159|9.330333|9.318681|9.319014|9.367842|9.325950,12615680,117722100.000000,7.501304 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,81920,1.834050,1.833654|1.834050|1.833406|1.833134|1.834920|1.837667|1.835938,61931520,113624600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::frexp,81920,9.048011,9.048011|9.057564|9.079590|9.048648|9.042385|9.045410|9.044402,13189120,119391700.000000,4.933350 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,tlfloat,tlquad,TLFloat Quad,tlfloat::frexp,81920,30.725708,30.671997|30.791016|30.725708,983040,30208400.000000,16.752929 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,81920,1.468640,1.470395|1.476694|1.476953|1.468640|1.465735|1.465557|1.464995,78561280,115473500.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::ilogb,81920,9.153522,9.151611|9.228303|9.170187|9.149488|9.164508|9.153522|9.143385,13189120,120889600.000000,6.232654 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,tlfloat,tlquad,TLFloat Quad,tlfloat::ilogb,81920,1.760012,1.765884|1.765200|1.763053|1.760012|1.758802|1.759065|1.757613,66519040,117165000.000000,1.198396 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,81920,1.470260,1.469446|1.474212|1.468940|1.470260|1.469446|1.472720|1.472928,77414400,113887100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::logb,81920,30.100403,30.095520|30.174866|30.100403,983040,29612700.000000,20.472843 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f128,bl::nextafter,81920,5.001007,5.006470|5.011200|5.030518|4.991302|5.001007|4.988556|4.972260,22937600,114692300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter,81920,32.284851,32.254333|32.284851|32.299805,983040,31732200.000000,6.455670 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter,81920,18.156072,18.248735|18.232755|18.127219|18.149525|18.156072|18.113792|18.164395,6307840,114615700.000000,3.630483 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f128,bl::nexttoward,81920,4.668849,4.655790|4.659282|4.668849|4.706946|4.690083|4.677876|4.664789,24657920,115270900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::math::nextafter (same type),81920,32.360840,32.360840|32.435913|32.359314,983040,31836100.000000,6.931225 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,tlfloat,tlquad,TLFloat Quad,tlfloat::nextafter (same type),81920,18.402876,18.447599|18.402987|18.390669|18.373580|18.402876|18.453813|18.338179,6307840,116073000.000000,3.941630 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,81920,0.949037,0.948177|0.949037|0.948526|0.951048|0.948429|0.952343|0.950057,122142720,115994000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,qdpp,ddreal,qdpp dd_real,qdpp operator==,81920,0.450268,0.449667|0.450127|0.449107|0.450268|0.450722|0.452772|0.454270,257474560,116118600.000000,0.474448 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator==,81920,1.204562,1.204562|1.199181|1.200674|1.192860|1.261111|1.231200|1.232552,90030080,109607000.000000,1.269247 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator==,81920,7.028460,7.034084|7.009234|7.005833|7.028460|7.042672|7.030422|6.980940,16056320,112696200.000000,7.405890 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,81920,1.030589,1.028644|1.031643|1.031965|1.028644|1.028848|1.030589|1.040312,112967680,116528500.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,qdpp,ddreal,qdpp dd_real,qdpp operator!=,81920,0.487349,0.486463|0.487687|0.487511|0.486781|0.489111|0.487349|0.487211,237977600,116000900.000000,0.472884 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator!=,81920,1.138673,1.208825|1.169332|1.146052|1.138673|1.133955|1.130723|1.119917,89456640,102842900.000000,1.104876 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator!=,81920,6.938224,6.972867|6.940539|6.938224|6.947653|6.930521|6.898993|6.901855,16629760,115293300.000000,6.732287 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,81920,1.105277,1.131538|1.115900|1.109233|1.105277|1.101901|1.103856|1.094005,90603520,100462600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,qdpp,ddreal,qdpp dd_real,qdpp operator<,81920,0.838337,0.884859|0.883559|0.853025|0.838337|0.827833|0.816135|0.810888,125009920,105626900.000000,0.758486 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<,81920,1.068196,1.098243|1.083058|1.071145|1.068196|1.064306|1.067968|1.064144,95191040,102222400.000000,0.966451 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,tlfloat,tlquad,TLFloat Quad,TLFloat operator<,81920,7.292074,7.322320|7.292074|7.268473|7.298855|7.265082|7.288321|7.319200,15482880,112924000.000000,6.597507 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,81920,1.022715,1.013576|1.002703|0.995999|1.098070|1.065623|1.041930|1.022715,110673920,114478200.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,qdpp,ddreal,qdpp dd_real,qdpp operator<=,81920,0.919082,1.000705|0.962585|0.934338|0.919082|0.913329|0.896353|0.882490,98058240,91178500.000000,0.898669 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator<=,81920,1.156155,1.149947|1.149887|1.156266|1.136936|1.166106|1.193222|1.156155,94044160,108937000.000000,1.130476 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator<=,81920,7.777992,7.812829|7.777992|7.776161|7.802594|7.768742|7.761747|7.787710,14909440,116054600.000000,7.605237 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,81920,1.250709,1.295510|1.274224|1.255621|1.250709|1.244722|1.230578|1.233707,95764480,120185400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,qdpp,ddreal,qdpp dd_real,qdpp operator>,81920,0.701363,0.773595|0.734737|0.717551|0.701363|0.693480|0.688471|0.691658,116408320,83163000.000000,0.560772 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>,81920,1.212173,1.246300|1.263611|1.212173|1.195831|1.225319|1.188110|1.183365,91750400,111604000.000000,0.969189 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,tlfloat,tlquad,TLFloat Quad,TLFloat operator>,81920,7.647001,7.684044|7.670476|7.649254|7.647001|7.628221|7.636061|7.644700,14909440,114078000.000000,6.114133 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,81920,1.155811,1.169917|1.155811|1.145576|1.145335|1.131780|1.425661|1.388852,104366080,127668500.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,qdpp,ddreal,qdpp dd_real,qdpp operator>=,81920,0.801565,0.849122|0.827564|0.810187|0.801565|0.795652|0.784903|0.778444,153681920,123987000.000000,0.693508 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost operator>=,81920,0.971259,1.000834|0.984585|0.981866|0.971259|0.967828|0.968282|0.959900,103219200,100779600.000000,0.840327 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,tlfloat,tlquad,TLFloat Quad,TLFloat operator>=,81920,7.714327,7.715642|7.710665|7.724046|7.711792|7.713576|7.714891|7.714327,14909440,115026200.000000,6.674383 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,81920,5.106323,5.103271|5.106323|5.104065|5.104980|5.128845|5.134308|5.127075,22937600,117338500.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,qdpp,ddreal,qdpp dd_real,qdpp sqrt,81920,5.385068,5.363962|5.359658|5.375527|5.385068|5.387830|5.396986|5.386096,21790720,117218900.000000,1.054588 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sqrt,81920,27.647095,27.650146|27.647095|27.633057,983040,27174600.000000,5.414286 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,tlfloat,tlquad,TLFloat Quad,tlfloat::sqrt,81920,132.178955,132.178955|132.125244|132.556152,245760,32510800.000000,25.885348 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,2048,71.891276,71.891276|72.007650|71.804199,368640,26505600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,qdpp,ddreal,qdpp dd_real,qdpp nroot,2048,150.863211,150.863211|150.706264|151.607840,172032,25987000.000000,2.098491 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cbrt,2048,2245.410156,2244.580078|2245.410156|2245.654297,12288,27589200.000000,31.233416 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,tlfloat,tlquad,TLFloat Quad,tlfloat::cbrt,2048,1585.563151,1585.644531|1585.563151|1584.147135,18432,29216900.000000,22.055015 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,8192,9.091561,9.095416|9.087385|9.091561,2801664,25471200.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::hypot,8192,488.968913,488.968913|489.257812|488.675944,73728,36050600.000000,53.782722 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,tlfloat,tlquad,TLFloat Quad,tlfloat::hypot,8192,210.510254,210.524495|210.445150|210.510254,147456,31038500.000000,23.154467 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,2048,101.179824,101.342206|101.179824|101.079896,264192,26736400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,qdpp,ddreal,qdpp dd_real,qdpp sin,2048,243.431181,243.431181|243.390970|243.905101,104448,25441000.000000,2.405926 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sin,2048,6912.548828,6912.548828|6895.214844|6916.845703,6144,42444000.000000,68.319439 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,tlfloat,tlquad,TLFloat Quad,tlfloat::sin,2048,1845.035807,1845.100911|1844.710286|1845.035807,18432,34006100.000000,18.235215 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,2048,101.138944,101.149164|101.138944|100.869822,264192,26697300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,qdpp,ddreal,qdpp dd_real,qdpp cos,2048,243.706597,243.706597|243.248155|244.094510,110592,26949400.000000,2.409622 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cos,2048,6894.482422,6902.685547|6894.482422|6894.384766,6144,42376300.000000,68.168424 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,tlfloat,tlquad,TLFloat Quad,tlfloat::cos,2048,1842.513021,1842.447917|1842.513021|1844.156901,18432,33970900.000000,18.217641 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,fltx,fltx,fltx bl::f128,bl::sincos,2048,107.069360,107.069360|106.799019|107.262290,251904,26964700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,qdpp,ddreal,qdpp dd_real,qdpp sincos,2048,239.100477,238.096788|239.100477|241.088867,110592,26478900.000000,2.233136 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,tlfloat,tlquad,TLFloat Quad,tlfloat::sincos,2048,3738.598633,3739.184570|3736.425781|3738.598633,12288,45933400.000000,34.917540 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,2048,107.742920,107.800293|107.742920|107.706299,245760,26480600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,qdpp,ddreal,qdpp dd_real,qdpp tan,2048,262.258732,263.091682|262.258732|262.034697,104448,27413600.000000,2.434116 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tan,2048,13896.533203,13904.101562|13896.533203|13892.285156,6144,85387100.000000,128.978621 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,tlfloat,tlquad,TLFloat Quad,tlfloat::tan,2048,2194.360352,2194.360352|2197.241211|2189.111328,12288,26954600.000000,20.366632 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,2048,136.949870,137.784831|136.914062|136.949870,184320,25291700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,qdpp,ddreal,qdpp dd_real,qdpp atan,2048,314.777483,314.547294|315.631975|314.777483,86016,27093800.000000,2.298487 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan,2048,4407.861328,4407.861328|4404.541016|4410.937500,6144,27081400.000000,32.185948 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,tlfloat,tlquad,TLFloat Quad,tlfloat::atan,2048,2631.225586,2636.621094|2624.584961|2631.225586,12288,32327400.000000,19.213056 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,2048,144.076102,144.337681|144.076102|143.971470,172032,24794700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,qdpp,ddreal,qdpp dd_real,qdpp atan2,2048,316.929408,316.786412|317.633929|316.929408,86016,27277100.000000,2.199736 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atan2,2048,4226.318359,4240.429688|4226.318359|4225.439453,6144,25993600.000000,29.333930 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,tlfloat,tlquad,TLFloat Quad,tlfloat::atan2,2048,2594.165039,2601.562500|2594.165039|2592.211914,12288,31899400.000000,18.005519 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,2048,189.262251,189.264471|189.262251|189.180131,135168,25578600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,qdpp,ddreal,qdpp dd_real,qdpp asin,2048,402.836470,403.702060|402.836470|402.507990,67584,27237400.000000,2.128457 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asin,2048,25445.849609,25445.849609|25471.142578|25443.847656,6144,156387000.000000,134.447569 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,tlfloat,tlquad,TLFloat Quad,tlfloat::asin,2048,2953.808594,2952.587891|2954.687500|2953.808594,12288,36295000.000000,15.606961 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,2048,194.310361,194.310361|194.124349|194.719587,129024,25080300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,qdpp,ddreal,qdpp dd_real,qdpp acos,2048,412.384588,412.384588|416.925604|408.722479,67584,27890400.000000,2.122299 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acos,2048,24821.777344,24819.873047|24825.488281|24821.777344,6144,152508700.000000,127.742943 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,tlfloat,tlquad,TLFloat Quad,tlfloat::acos,2048,2980.078125,2980.078125|2978.198242|2996.899414,12288,36680400.000000,15.336692 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,2048,108.211670,108.248291|108.115234|108.211670,245760,26589200.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,qdpp,ddreal,qdpp dd_real,qdpp exp,2048,234.339021,234.339021|234.346731|234.133429,116736,27348100.000000,2.165561 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp,2048,2563.549805,2570.947266|2561.303711|2563.549805,12288,31522000.000000,23.690142 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,tlfloat,tlquad,TLFloat Quad,tlfloat::exp,2048,1519.596354,1516.959635|1519.807943|1519.596354,18432,27994300.000000,14.042814 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,2048,101.780349,101.760317|101.844201|101.780349,239616,24391700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::exp2,2048,5542.041016,5542.041016|5541.992188|5550.292969,6144,34067100.000000,54.450993 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,tlfloat,tlquad,TLFloat Quad,tlfloat::exp2,2048,2704.907227,2702.490234|2704.907227|2705.004883,12288,33228400.000000,26.575928 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,2048,109.521484,109.521484|109.421189|109.855363,227328,24915000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,qdpp,ddreal,qdpp dd_real,qdpp expm1,2048,233.832751,233.917558|233.781353|233.832751,116736,27298000.000000,2.135040 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::expm1,2048,2590.747070,2610.229492|2590.747070|2587.548828,12288,31901800.000000,23.655149 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,tlfloat,tlquad,TLFloat Quad,tlfloat::expm1,2048,1708.219401,1705.566406|1708.219401|1708.463542,18432,31471100.000000,15.597117 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,2048,145.586948,145.819302|145.474138|145.586948,178176,25947200.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,qdpp,ddreal,qdpp dd_real,qdpp log,2048,293.665365,293.766276|293.665365|293.421224,92160,27059800.000000,2.017113 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log,2048,2859.741211,2855.102539|2865.161133|2859.741211,12288,35143700.000000,19.642841 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,tlfloat,tlquad,TLFloat Quad,tlfloat::log,2048,2220.043945,2235.839844|2220.043945|2219.335938,12288,27341700.000000,15.248922 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,2048,150.885641,151.106210|150.825027|150.885641,178176,26893700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log2,2048,3023.388672,3005.834961|3023.388672|3034.204102,12288,37123800.000000,20.037617 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,tlfloat,tlquad,TLFloat Quad,tlfloat::log2,2048,2333.862305,2366.577148|2333.862305|2320.092773,12288,28756100.000000,15.467756 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,2048,149.883823,150.478179|149.883823|149.675040,178176,26728600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,qdpp,ddreal,qdpp dd_real,qdpp log10,2048,326.046317,326.046317|325.990513|326.761300,86016,28064100.000000,2.175327 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log10,2048,3007.983398,3013.159180|3007.983398|3004.907227,12288,36970700.000000,20.068766 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,tlfloat,tlquad,TLFloat Quad,tlfloat::log10,2048,2273.437500,2273.437500|2285.595703|2268.750000,12288,27966600.000000,15.167998 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,2048,151.185826,151.510184|151.185826|151.164900,172032,26026200.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,qdpp,ddreal,qdpp dd_real,qdpp log1p,2048,276.846313,277.078247|276.846313|276.678467,98304,27217200.000000,1.831166 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::log1p,2048,3851.123047,3851.123047|3851.342773|3850.903320,12288,47322600.000000,25.472778 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,tlfloat,tlquad,TLFloat Quad,tlfloat::log1p,2048,2313.085938,2313.085938|2314.135742|2312.792969,12288,28426300.000000,15.299622 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,2048,220.271810,220.334201|220.271810|219.883898,110592,24348300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,qdpp,ddreal,qdpp dd_real,qdpp pow,2048,462.314453,461.948242|462.871094|462.314453,61440,28408500.000000,2.098836 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::pow,2048,4411.718750,4411.718750|4409.667969|4411.767578,6144,27101500.000000,20.028522 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,tlfloat,tlquad,TLFloat Quad,tlfloat::pow,2048,5569.628906,5562.597656|5569.628906|5579.980469,6144,34226600.000000,25.285255 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,8192,18.192665,18.161190|18.192665|18.183809|18.210856|18.206548|18.215045|18.168850,5849088,106402400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,qdpp,ddreal,qdpp dd_real,qdpp npwr,8192,10.964369,10.984272|10.973856|10.954285|10.964369|10.960720|10.977770|10.950968,10551296,115711900.000000,0.602681 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,cppdd,cppdd,boost::multiprecision::cpp_double_double,"boost::multiprecision::pow(value, int)",8192,580.261230,580.261230|580.017090|581.353760,49152,28534900.000000,31.895339 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,fltx,fltx,fltx bl::f128,bl::product_sum,8192,5.093188,5.089045|5.094098|5.093188|5.097016|5.086002|5.086598|5.097204,22306816,113583600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,qdpp,ddreal,qdpp dd_real,same expression,8192,5.682192,5.744708|5.693605|5.689452|5.677967|5.673164|5.682192|5.675439,19382272,110303200.000000,1.115646 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,cppdd,cppdd,boost::multiprecision::cpp_double_double,same expression,8192,234.790039,234.838867|234.470215|234.790039,122880,28839900.000000,46.098839 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,tlfloat,tlquad,TLFloat Quad,same expression,8192,128.656684,128.656684|128.782823|128.622776,221184,28463600.000000,25.260543 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,2048,124.422940,124.585701|124.267578|124.422940,202752,25227500.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,qdpp,ddreal,qdpp dd_real,qdpp sinh,2048,276.196289,276.196289|276.992798|276.116943,98304,27174700.000000,2.219818 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::sinh,2048,2737.426758,2737.426758|2735.668945|2737.573242,12288,33630900.000000,22.000981 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,tlfloat,tlquad,TLFloat Quad,tlfloat::sinh,2048,1897.526042,1895.865885|1898.209635|1897.526042,18432,34969200.000000,15.250612 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,2048,123.616536,123.616536|123.940578|123.510002,202752,25078200.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,qdpp,ddreal,qdpp dd_real,qdpp cosh,2048,274.185181,274.185181|273.565674|274.578857,98304,26946100.000000,2.218030 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::cosh,2048,2738.452148,2738.452148|2731.884766|2743.774414,12288,33645000.000000,22.152798 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,tlfloat,tlquad,TLFloat Quad,tlfloat::cosh,2048,1678.369141,1675.699870|1678.841146|1678.369141,18432,30922200.000000,13.577222 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,2048,129.334677,129.334677|130.312815|129.263798,190464,24691200.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,qdpp,ddreal,qdpp dd_real,qdpp tanh,2048,281.332397,281.481934|281.243896|281.332397,98304,27658100.000000,2.175228 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tanh,2048,2914.941406,2915.820312|2914.453125|2914.941406,12288,35820400.000000,22.537973 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,tlfloat,tlquad,TLFloat Quad,tlfloat::tanh,2048,1823.079427,1823.079427|1820.947266|1825.032552,18432,33601900.000000,14.095828 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,2048,136.161436,136.631196|136.161436|136.072198,178176,24283300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,qdpp,ddreal,qdpp dd_real,qdpp asinh,2048,320.779855,320.476423|320.874023|320.779855,86016,27586200.000000,2.355879 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::asinh,2048,5298.583984,5299.609375|5298.583984|5289.843750,6144,32538700.000000,38.913984 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,tlfloat,tlquad,TLFloat Quad,tlfloat::asinh,2048,4953.759766,4953.710938|4953.759766|4960.498047,6144,30449600.000000,36.381518 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,2048,162.830529,163.070913|162.830529|162.511268,159744,26007000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,qdpp,ddreal,qdpp dd_real,qdpp acosh,2048,318.565151,318.390765|318.565151|318.962751,86016,27408100.000000,1.956422 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::acosh,2048,6087.353516,6086.523438|6087.353516|6129.003906,6144,37484300.000000,37.384596 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,tlfloat,tlquad,TLFloat Quad,tlfloat::acosh,2048,4750.488281,4750.488281|4821.875000|4722.949219,6144,29276800.000000,29.174433 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,2048,160.863281,161.242188|160.863281|160.849609,153600,24727300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,qdpp,ddreal,qdpp dd_real,qdpp atanh,2048,318.090820,317.885045|318.090820|318.854632,86016,27376900.000000,1.977399 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::atanh,2048,22893.994141,22897.460938|22878.710938|22893.994141,6144,140636500.000000,142.319577 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,tlfloat,tlquad,TLFloat Quad,tlfloat::atanh,2048,2444.042969,2444.042969|2446.093750|2443.090820,12288,30036900.000000,15.193293 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,256,788.588170,788.588170|790.308780|787.425595,32256,25442700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erf,256,8003.046875,8003.046875|8007.031250|7997.343750,3840,30729500.000000,10.148576 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,tlfloat,tlquad,TLFloat Quad,tlfloat::erf,256,34451.562500,34408.593750|34451.562500|34561.718750,768,26476000.000000,43.687648 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,256,790.720274,790.977515|790.034299|790.720274,31488,24893700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::erfc,256,7994.843750,7994.843750|7985.703125|8001.953125,3840,30697600.000000,10.110837 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,tlfloat,tlquad,TLFloat Quad,tlfloat::erfc,256,34464.062500,34464.062500|34507.031250|34442.578125,768,26473900.000000,43.585657 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,256,616.427176,616.936384|616.427176|615.136719,43008,26500100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::lgamma,256,21707.031250,21707.421875|21666.796875|21707.031250,768,16660800.000000,35.214267 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::lgamma,256,25001.562500,24986.718750|25044.531250|25001.562500,768,19208400.000000,40.558826 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,256,561.074561,562.280702|561.074561|560.156250,43776,24565800.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,cppdd,cppdd,boost::multiprecision::cpp_double_double,boost::multiprecision::tgamma,256,17561.718750,17560.156250|17561.718750|17598.046875,768,13496300.000000,31.300151 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,tlfloat,tlquad,TLFloat Quad,tlfloat::tgamma,256,27765.625000,27706.250000|27765.625000|27862.500000,768,21333600.000000,49.486516 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,4099,250.353745,250.584153|250.353745|250.155865,110673,27708600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,qdpp,ddreal,qdpp dd_real,qdpp to_string,4099,468.567943,468.475238|468.567943|468.694804,61485,28810600.000000,1.871623 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost number::str,4099,425.880296,424.518175|426.713833|425.880296,73782,31409300.000000,1.701114 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,tlfloat,tlquad,TLFloat Quad,tlfloat::to_string,4099,5198.999756,5195.047573|5198.999756|5217.784826,12297,63992900.000000,20.766615 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,4099,202.259975,202.259975|202.621482|201.829715,135267,27356000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,qdpp,ddreal,qdpp dd_real,qdpp write,4099,477.091974,471.573555|477.091974|480.565992,61485,29292100.000000,2.358806 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,4099,211.285679,212.673823|210.585509|211.285679,122970,26010000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,qdpp,ddreal,qdpp dd_real,qdpp read,4099,258.244558,258.399068|258.244558|258.127999,110673,28582100.000000,1.222253 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,cppdd,cppdd,boost::multiprecision::cpp_double_double,Boost string constructor,4099,630.062210,630.062210|630.043913|631.129544,49188,31008700.000000,2.982039 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,tlfloat,tlquad,TLFloat Quad,TLFloat string constructor,4099,3821.590632,3821.590632|3822.420102|3813.149549,12297,46962900.000000,18.087315 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,mt19937_64,fltx,fltx,fltx bl::f128,bl::mt19937_64,64,5.049237,5.049237|5.070731|5.042301,5233920,26452700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,uniform_real,fltx,fltx,fltx bl::f128,bl::uniform_real,64,21.328680,21.348699|21.328680|21.313002,1243776,26529900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,uniform_real,qdpp,ddreal,qdpp dd_real,qdpp ddrand,64,24.343333,24.306111|24.343333|24.360278,1080000,26283500.000000,1.141343 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,normal,fltx,fltx,fltx bl::f128,bl::normal,64,100.520833,100.390339|100.520833|100.543727,262080,26335100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f128,same workload,64,23.435626,23.439910|23.435626|23.404836,1120512,26250000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,qdpp,ddreal,qdpp dd_real,same workload,64,38.092227,38.098689|38.092227|38.057145,649920,24750700.000000,1.625398 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,251.322343,251.322343|251.337168|251.227467,101184,25427100.000000,10.723944 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,tlfloat,tlquad,TLFloat Quad,same workload,64,285.521260,285.521260|285.927894|285.191470,93696,26754600.000000,12.183215 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f128,same workload,64,213.073484,213.073484|213.355365|213.003013,123456,26313900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,qdpp,ddreal,qdpp dd_real,same workload,64,426.765673,426.886610|426.567337|426.765673,62016,26464700.000000,2.002904 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,10848.437500,10842.187500|10893.750000|10848.437500,192,2085400.000000,50.914066 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,tlfloat,tlquad,TLFloat Quad,same workload,64,3828.169643,3826.428571|3839.910714|3828.169643,6720,25747700.000000,17.966429 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f128,same workload,64,17.823968,17.871923|17.804582|17.823968,1470144,26217800.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,qdpp,ddreal,qdpp dd_real,same workload,64,16.199329,16.192512|16.218492|16.199329,1628160,26381800.000000,0.908851 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,468.734002,468.520691|468.734002|472.248294,56256,26431000.000000,26.297960 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,tlfloat,tlquad,TLFloat Quad,same workload,64,361.354437,360.969883|361.390868|361.354437,74112,26772100.000000,20.273512 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f128,same workload,64,72.088703,72.088703|72.059936|72.190623,364992,26320700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,qdpp,ddreal,qdpp dd_real,same workload,64,90.106213,90.106213|90.150213|90.085748,293184,26420000.000000,1.249935 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,2018.428309,2017.738971|2019.531250|2018.428309,13056,26354400.000000,27.999232 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,tlfloat,tlquad,TLFloat Quad,same workload,64,1325.060096,1324.519231|1325.060096|1325.270433,19968,26456600.000000,18.380967 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f128,same workload,64,113.862916,113.898458|113.862916|113.835575,219456,24988500.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,qdpp,ddreal,qdpp dd_real,same workload,64,98.379801,97.733567|98.379801|98.769849,259968,25553400.000000,0.864020 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,64,1477.812500,1505.156250|1477.118056|1477.812500,17280,25690100.000000,12.978875 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,tlfloat,tlquad,TLFloat Quad,same workload,64,962.075893,961.004464|962.522321|962.075893,26880,25855000.000000,8.449423 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,fltx,fltx,fltx bl::f128,same workload,8,33.542868,33.542868|33.499939|33.636392,782688,26266800.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,qdpp,ddreal,qdpp dd_real,same workload,8,52.597147,52.597147|52.605511|52.579820,502128,26409000.000000,1.568058 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,8,523.978025,520.049622|525.082703|523.978025,50784,26561900.000000,15.621146 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,tlfloat,tlquad,TLFloat Quad,same workload,8,421.036122,422.324144|421.036122|419.980989,63120,26580700.000000,12.552180 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f128,same workload,8,907.746479,907.746479|910.936205|906.897266,28968,26318200.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,qdpp,ddreal,qdpp dd_real,same workload,8,1761.440000,1761.440000|1763.180000|1760.760000,15000,26426900.000000,1.940454 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,8,21400.000000,21400.000000|21375.000000|21400.000000,24,513400.000000,23.574864 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,tlfloat,tlquad,TLFloat Quad,same workload,8,14350.000000,14350.000000|14325.000000|14625.000000,24,346400.000000,15.808379 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,fltx,fltx,fltx bl::f128,same workload,8,540.719043,541.761223|540.108535|540.719043,48648,26311900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,qdpp,ddreal,qdpp dd_real,same workload,8,1358.705630,1355.859853|1363.249694|1358.705630,19608,26652600.000000,2.512776 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,cppdd,cppdd,boost::multiprecision::cpp_double_double,same workload,8,70800.000000,70800.000000|70950.000000|70637.500000,24,1699100.000000,130.936761 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,tlfloat,tlquad,TLFloat Quad,same workload,8,11137.500000,11150.000000|11137.500000|11137.500000,24,267400.000000,20.597573 diff --git a/validation/metrics/data/windows/x86_64/detail/MinGW_f128_fastmath_accuracy.csv b/validation/metrics/data/windows/x86_64/detail/MinGW_f128_fastmath_accuracy.csv new file mode 100644 index 0000000..39f9704 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MinGW_f128_fastmath_accuracy.csv @@ -0,0 +1,128 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,moderate,4097,10322096095657499311,109.950521,107.250365,107.040693,106.000000,1.040693,yes,Both,yes,-2.472067804890653694736606692562736837036787645394e-04,-0.00024720678048906536947366066925627220254736992061971280405933562914519934341009422,-0.0002472067804890653694736606692562736837036787645394 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,wide_exponent,4098,10322096095657499308,109.864126,106.715617,106.003381,106.000000,0.003381,yes,Both,yes,-4.215228812298638183537364477017984307424253045187e-293,-4.2152288122986381835373644770182307620164082432452873068526743823738143144126931e-293,-4.215228812298638183537364477017984307424253045187e-293 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,moderate,4099,10322096095657499356,114.048558,111.195557,110.779063,90.000000,20.779063,yes,Both,yes,"[1.0493726573011433,2.9125942138695328e-17,-1.6168145788139814e-33,8.9751238597445349e-50]",1.049372657301143292578955926207064e+00,1.0493726573011432925789559262070644710955143883361938160834862538567380241261162 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,wide_exponent,4096,10322096095657499357,113.914442,110.936216,110.695372,90.000000,20.695372,yes,Both,yes,"[1.0178498881603543e+179,2.8251009536194148e+162,-1.5682460627993804e+146,8.7055144359881064e+129]",1.017849888160354374348660646690109e+179,1.017849888160354374348660646690108515764922366070205839635128466314249875360745e+179 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,general,3845,10322096095657499292,119.108587,106.483519,105.736235,90.000000,15.736235,yes,NaN,no,"representative lhs [2.1646518436949981e-10,6.008115792918706e-27,-3.3351742439561882e-43,1.8513936183884795e-59] ; representative rhs [2152733.3764142292,5.9750354009353278e-11,-3.3168109375344023e-27,1.8411999355896226e-43]",2152733.3764142294382529109679643912385304247488621021133781141543295234441757202,2152733.3764142294382529109679644230960403599496829189477871020969458707434338304 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,subnormal,251,10322096095657499292,124.400309,0.000000,0.000000,90.000000,-90.000000,no,NaN,no,"extreme lhs [-2.9980406804279035e-308,-0,0,-0] ; extreme rhs [2.9542193897354755e-308,0,-0,0]",0,-4.3821290692427974407505781114221845407653341587306362737985196611183341144163723e-310 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,general,3844,10322096095657499292,118.876961,106.530508,105.744857,90.000000,15.744857,yes,NaN,no,"representative lhs [8.6400186438430951e-11,2.3980869078963061e-27,-1.3312056500993131e-43,7.3896758162567858e-60] ; representative rhs [2.5434628943552141e-11,7.0595276689822521e-28,-3.9188250805412284e-44,2.1753849169477026e-60]",6.0965557494878811765691445182748919669597118865129064789182263599000114689527297e-11,6.0965557494878811765691445182749816500614286748054455976115569145324134057170098e-11 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,subnormal,252,10322096095657499292,126.524538,0.000000,0.000000,90.000000,-90.000000,no,NaN,no,"extreme lhs [-2.9529433938248733e-308,-0,0,-0] ; extreme rhs [-2.9863972891780103e-308,-0,0,-0]",0,3.3453895353137016378606184865007417773817611335724850610595004473929343115122124e-310 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,general,4092,10322096095657499292,108.673668,105.665876,105.380753,90.000000,15.380753,yes,NaN,no,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60037994384765625,-156159778640594921198000750.60038290050850297752267811067325203046404306830015704 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,subnormal,8,10322096095657499292,54.926880,54.000000,54.000000,90.000000,-36.000000,no,NaN,no,"subnormal-limb operand [9.3326361850321888e-302,5.1806537865363094e-318,0,0] ; scaling operand [8.4527124981706439e+270,0,0,0]",7.888609052210118054117285652827862296732064351090230047702789306640625e-31,7.8886090522101184920230557543331969603975591291890210727846461430518036740838387e-31 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,general,4096,10322096095657499292,110.882649,105.971646,105.124683,90.000000,15.124683,yes,NaN,no,"representative lhs [3.8069729471352109e-08,1.05664725500865e-24,-5.8655705570878625e-41,3.2560457425211756e-57] ; representative rhs [-10239996542.103203,-2.8421699832812405e-07,1.5777212776686647e-23,-8.7581124445438569e-40]",-3.717748274115425677507007818785488818087130701795158032304321273801830518128672e-18,-3.7177482741154256775070078187854047565702465103661629499646177206025402808246684e-18 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,subnormal,4,10322096095657499292,54.853759,54.000000,54.000000,90.000000,-36.000000,no,NaN,no,"subnormal-limb operand [9.3326361850321888e-302,5.1806537865363094e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.888609052210118054117285652827862296732064351090230047702789306640625e-31,7.8886090522101184920230557543331969603975591291890210727846461430518036740838387e-31 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,moderate,4099,10322096095657499356,109.099094,104.680325,99.580200,90.000000,9.580200,yes,Both,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50] ; [-2.2467526986846895,-6.2359914417961224e-17,3.4616706400237409e-33,-1.9216132241116296e-49] ; [-0.82478157060333857,-2.2892287249258141e-17,1.2707772195229639e-33,-7.0542306414176576e-50]",-0.0025616587031475578614921195531973426573882576399799792521563357797220739087151742,-0.0025616587031475578614921195531946393591985326302623011385541559314120186541712416 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,cancellation,4098,10322096095657499352,123.613534,107.447694,107.008989,90.000000,17.008989,yes,Both,no,"one plus a low-limb delta [1,2.3375830000300188e-20,0,0] ; one plus a low-limb delta [1,9.1191608041326794e-20,0,0] ; native product cancellation",6.0206627557371401035138369829719396083930638942820518512027281512011279702649282e-36,6.0206627557371401035138369829719764831182728766548123483364806462892589095319671e-36 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,wide_exponent,4096,10322096095657499357,119.616115,106.579100,105.347039,90.000000,15.347039,yes,Both,no,"[1.6938644702759635e-90,4.701418338737172e-107,-2.6098114440304809e-123,1.448736377546434e-139] ; [79428146.335863903,2.2045739216343092e-09,-1.2237843636432928e-25,6.7933678884651449e-42] ; [9.2909522372705566e-90,2.5787572736275956e-106,-1.4314978500504758e-122,7.9464093641372402e-139]",1.3454052430915206938868087189563345722550509265256751578481158995824810109214383e-82,1.3454052430915206938868087189563606478535306154783196089715180736698264946825388e-82 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,subnormal,4100,10322096095657499350,70.884878,0.000000,0.000000,90.000000,-90.000000,no,Both,no,"[-2.5040482095348978e-318,0,0,0]",-2.5040482095348977975228947844543629704892143446000514872999746353340486397222355e-318,2.5040482095348977975228947844543629704892143446000514872999746353340486397222355e-318 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0]",8,8 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,moderate,4099,10322096095657499356,108.710750,105.621789,105.403238,90.000000,15.403238,yes,Both,yes,"[-2.0216112865291063,-5.6110984928667459e-17,3.114785370110088e-33,-1.7290532173309048e-49]",4.0869121938218684213523234559135312039828584030511109615650764542715833727015706,4.086912193821868421352323455913607387135084308816614946511827134127630171714709 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,wide_exponent,4096,10322096095657499357,108.714763,105.598081,105.370295,90.000000,15.370295,yes,Both,yes,"[4.07867604911808e+17,11.320600149295146,-6.2841954691612277e-16,3.4884292505539414e-32]",166355983136494714602069966978531328,166355983136494714602069966978534500.62754285635655510754919878168120152773808347 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,near_one,4099,10322096095657499359,109.041603,106.207316,105.235269,90.000000,15.235269,yes,Inf,yes,"[0.7943239392491388,2.2046918159133699e-17,1.2238498081148352e-33,6.7937311782608489e-50]",1.2589322197002942275560659685836243624199496927685685911021398405984506041477289,1.2589322197002942275560659685835979972909064819121737721490343315675812064184067 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,wide_exponent,4096,10322096095657499357,109.009049,105.925795,105.189487,90.000000,15.189487,yes,Inf,yes,"[3.5001788065165318e+43,9.7149477532491364e+26,53928793393.438126,2.9936494057824018e-06]",2.8569969000961575149593584421158660998363524565146662142923865841595715918551683e-44,2.8569969000961575149593584421158043381809410343861907578030166512899574822804677e-44 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Inf,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Inf,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166,-3.1692452985045241935931724109976715011423494333542894114732129703969491693006113e+166 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Inf,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.055851043114367922455572121730674923122532736666122198821170284979698017480132,-7.055851043114367922455572121730674923122532736666122198821170284979698017480132 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Inf,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,cancellation,4098,10322096095657499352,137.992247,inf,106.227061,90.000000,16.227061,yes,Both,yes,"one plus a low-limb delta [1.0000000000000002,-9.2098754789066345e-17,0,0] ; one plus a low-limb delta [1,9.3157411673208082e-33,0,0]",1.299458501359649542526809416735399539516537488861303804737012764889933880863069e-16,1.2994585013596495425268094167353858549612218168195955651903009493027143470550428e-16 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,no,"+0 [0,0,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,boundary,4108,10322096095657499334,inf,inf,inf,80.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,moderate,4099,10322096095657499356,110.177573,107.236356,107.022726,90.000000,17.022726,yes,Both,yes,"[-4.0306514937478397,-1.118730523149658e-16,6.2102019257584848e-33,-3.4473545827742784e-49]",-4.0309999999999999999999999999999755453119381486340322364144762336268801306005116,-4.031 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,wide_exponent,4096,10322096095657499357,121.330260,107.340420,107.049597,90.000000,17.049597,yes,Both,yes,"[1.9564201098655394e-06,5.4301566295310004e-23,-3.0143424587131265e-39,1.6732962008842592e-55]",1.9564199999999999999999999999999883500964702027617153338260327688823346504976789e-06,1.95642e-06 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,boundary,4110,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,boundary,4114,10322096095657499334,inf,inf,inf,80.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1,-0.94414895688563207754442787826932507687746726333387780117882971502030198251986803 ; 1 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0,3.3171656910739546907582829299139796007604037232628171196079989539976331726774302e-246 ; 0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14,1.0299919501102997860132154033287920968958243457059758036030795524575418405511109e-14 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815,0.72479240042364947229615036515952420312691977154851047149445867809856858254846657 ; -815 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,subnormal,4100,10322096095657499350,3.298537,0.000000,0.000000,90.000000,-90.000000,no,Both,yes,"denorm_min [4.9406564584124654e-324,0,0,0]",0 ; 0,0.5 ; -1073 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,near_one,4099,10322096095657499359,109.483067,105.751120,104.669867,90.000000,14.669867,yes,Both,yes,"[1.0434745107555559,2.8962235686257217e-17,1.6077270451751567e-33,8.9246779143301406e-50]",1.0215060013311502277290127699241048631609354594130696894861318971964303514710082,1.0215060013311502277290127699240732060505168443174685619534358207641504292216177 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,wide_exponent,4096,10322096095657499357,109.554369,105.974012,105.134919,90.000000,15.134919,yes,Both,yes,"[1.1645444442808547e-62,3.2322601380997815e-79,1.7942648134482328e-95,9.9601705408249462e-112]",1.0791406045001062461937244900901782471018853969286737164352073021695624156016746e-31,1.0791406045001062461937244900901540193152963432252732200525801490754009153911073e-31 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,extreme_finite,4096,10322096095657499354,109.462818,106.258948,105.096134,90.000000,15.096134,yes,Both,yes,"[1.3220615149200299e+307,3.6694578345875804e+290,2.0369582879251504e+274,1.1307389957277705e+258]",3.6360163846165902232928621254916330482868374851642045295187667520670879059664215e+153,3.6360163846165902232928621254915491917111449494286729393569803221869869190043071e+153 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,subnormal,4100,10322096095657499350,137.336960,108.735840,106.352146,90.000000,16.352146,yes,Both,yes,"[2.5386530753566837e-308,0,0,0]",1.5933151211724200764753913370247382277848906730234526870903477140407813259499818e-154,1.5933151211724200764753913370247228421403798622113830915918350562750344350703522e-154 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,moderate,4099,10322096095657499356,108.618141,105.113112,103.988941,90.000000,13.988941,yes,Both,yes,"[-1.026902362492109,-2.8502266172017703e-17,1.5821936079084388e-33,-8.7829388645734799e-50]",-1.0088882196575747287855047533761568067323069446339483252894105155469950396707191,-1.008888219657574728785504753376106681928089396686666219054879055838557430422108 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,wide_exponent,4096,10322096095657499357,108.443624,105.003065,104.047913,90.000000,14.047913,yes,Both,yes,"[-1.4317146624221198e+121,-3.9738064572861771e+104,2.2059057121416187e+88,-1.2245236558858889e+72]",-24282057930523965953132048549298074288128,-24282057930523965953132048549296916197347.206969720978349079851889702835521172176 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,moderate,4099,10322096095657499356,108.682153,105.556470,104.448638,90.000000,14.448638,yes,Both,no,"[2.7324190989516026,7.5839864914539829e-17,-4.2099582106291849e-33,2.3369962690751228e-49] ; [7.6161438781938315,2.1139045731071814e-16,-1.1734527644620026e-32,6.5139713870787798e-49]",8.0914622723995239714248451353921972400978668058729318673943800913073154390531272,8.0914622723995239714248451353919049231629452774327450009049705044051673057483058 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,wide_exponent,4096,10322096095657499357,136.087453,107.303893,104.375984,90.000000,14.375984,yes,Both,no,"[-1.0904439541376617e-171,-3.0265899623673255e-188,1.6800949311597954e-204,-9.3264003806481111e-221] ; [-6.6064316563514781e-178,-1.8336531338734802e-194,1.0178819642012061e-210,-5.6503799650342919e-227]",1.0904439541378618053723797776842685378887910042683910204594308964030285890648591e-171,1.090443954137861805372379777684227109194726424167261957374676671431464584983977e-171 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,moderate,4099,10322096095657499356,109.289129,105.940176,105.022316,80.000000,25.022316,yes,Both,yes,"[-2.6398923795068718,-7.3271732556525522e-17,4.0673982269215659e-33,-2.2578595809239299e-49]",-0.48091697577772919399226624691062015405871262531310584383165433654955256415064468,-0.48091697577772919399226624691060848051161030920422183238229214193978802883324422 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,argument_reduction,4110,10322096095657499353,107.878813,98.777563,98.619216,80.000000,18.619216,yes,Both,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107778446817142530158141594307620809510923605317049154659252158834084e-08,2.983455547010777844681714253021942987548016308835936187833122791508178595472033e-08 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,quadrant_boundaries,4315,10322096095657499369,114.302289,100.269139,100.230956,80.000000,20.230956,yes,Both,yes,"below random k*pi/2, exponent 43, quadrant 2, offset bits 64 [-15189111743596.248,-2.2040936843613776e-05,0,0]",8.2340339752651274439911770999089811880423371828520810609536481004607152164951472e-07,8.2340339752651274439911770999034465622958436535312599533652322394306622926203602e-07 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,moderate,4099,10322096095657499356,109.267445,105.979013,105.328054,80.000000,25.328054,yes,Both,-,"[1.3052020301228939,3.6226633640748349e-17,-2.010982138630954e-33,1.1163193362090118e-49]",0.26248277312553705702695162816852912212589596287237225345705224528736199118839068,0.26248277312553705702695162816852396749826395623085371572470338778345559864971624 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,argument_reduction,4110,10322096095657499353,117.900119,105.731702,99.209588,80.000000,19.209588,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1273107444367091e-17,-0,-0]",-4.076748699943230335115082501060544610987236354894355627499358880133086316429937e-20,-4.0767486999432303351150825010549823398817902769691808721665498735571977321034076e-20 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,quadrant_boundaries,4315,10322096095657499369,113.389741,100.266388,100.241282,80.000000,20.241282,yes,Both,-,"below random k*pi/2, exponent 32, quadrant 1, offset bits 64 [6759185830.8093033,2.5452908459680444e-07,0,0]",3.6641619809983954738175143693267979746715518809894967024037216566072372430296582e-10,3.6641619809983954738175143693292433300620783220933192304310816115127405346807142e-10 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,moderate,4099,10322096095657499356,106.990413,104.358303,103.662452,75.000000,28.662452,yes,Both,yes,"[1.0283589742402928,2.8542695269537032e-17,-1.5844378736549776e-33,8.7953970420994041e-50]",1.6590692097473263340445844749263504271822370452064470782609014202699238005322968,1.65906920974732633404458447492645378827060656915569642322001914303143546133552 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,argument_reduction,4110,10322096095657499353,106.636659,98.776698,98.614153,75.000000,23.614153,yes,Both,yes,"near 2^40 * pi/2 [-1727108826178.8184,-6.7295835223588613e-05,-0,-0]",2.9834555470107791724696498071933228039119120966041628715515577584130136247446007e-08,2.9834555470107791724696498071994731788491203878271025995398127676131094640315383e-08 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,quadrant_boundaries,4315,10322096095657499369,106.499081,100.252704,100.193377,75.000000,25.193377,yes,Both,yes,"below random k*pi/2, exponent 35, quadrant 3, offset bits 64 [-59550109601.544846,-4.5998843808876405e-07,0,0]",309768431.94980647490490283626492826519224603465385570189027930609881877899169922,309768431.94980647490490283626514197542933150294098619645159482100231149999767842 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,near_one,4099,10322096095657499359,108.638031,106.152026,105.321909,80.000000,25.321909,yes,Both,yes,"[0.68327775494803278,1.8964767393937287e-17,-1.0527560708704801e-33,5.8439701459716004e-50]",0.59941459668283531301680476878329138003111794710527586828655022266332252911524847,0.5994145966828353130168047687833032015572049547180395358634521660952312280617229 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,moderate,4099,10322096095657499356,108.819079,105.953468,104.926390,80.000000,24.926390,yes,Both,yes,"[1.7923972346284831,4.9749016978975022e-17,-2.7616252051262958e-33,1.5330099440581923e-49]",1.0618989131564895436407540480874589123331650567714808343216437342988039960189894,1.0618989131564895436407540480874313641834035736707386450972798475694004675512729 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,near_one,4099,10322096095657499359,108.593233,105.799026,104.761376,80.000000,24.761376,yes,Both,yes,"[1.0818954035110564,3.0028629680352481e-17,-1.666923803453484e-33,9.2532859344489846e-50] ; [0.65275323882187208,1.8117541878467149e-17,-1.0057256071542369e-33,5.5828986275887446e-50]",1.0279228914914060327533533251293914713081558101296952640517443772205652408047172,1.0279228914914060327533533251293615731716847356252552579150219391046313458442121 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,moderate,4099,10322096095657499356,108.845358,105.968236,104.520841,80.000000,24.520841,yes,Both,yes,"[0.17246963902978685,4.7869941074914726e-18,-2.6573155384409922e-34,1.4751064472356924e-50] ; [4.1006496155849739,1.1381589047856838e-16,-6.318051108876087e-33,3.5072229059163668e-49]",0.042034327541476674060107604306532306204552005274371072135952080023324484159275016,0.042034327541476674060107604306530861776728203971856534731213306751945145807618236 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,extreme_finite,8,10322096095657499351,116.769509,109.692678,109.692678,80.000000,29.692678,yes,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397529394834895588573302312846062338790031898128063,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,moderate,4099,10322096095657499356,107.979933,105.096123,104.081582,80.000000,24.081582,yes,Both,yes,"[-0.03158561470140564,-8.766769172109845e-19,4.8665344932251859e-35,-2.7014693222555596e-51]",-0.031590868964255888487475098364116757608941970863589142199408956157005365361634119,-0.031590868964255888487475098364115285691415570498034097956857353613513937214419265 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,boundary,4105,10322096095657499355,109.179337,106.113879,105.956528,80.000000,25.956528,yes,Both,yes,"[0.99999942350312121,2.7755559614626202e-17,-1.5407430672757073e-33,8.5528421416053841e-50]",1.5697225512744511775996984093823162316469799617556662501159018933971633913415644,1.5697225512744511775996984093822962914427098056014529298362837222126251898438199 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,moderate,4099,10322096095657499356,108.568133,105.119090,102.606898,80.000000,22.606898,yes,Both,-,"[0.99447363321554472,2.7602188124463265e-17,-1.5322292392907091e-33,8.5055809023221692e-50]",0.10518045845827819297865791404046697400704440931878221279239664668822551440996449,0.10518045845827819297865791404048059412910636761979542748882605088251354897169005 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,boundary,4105,10322096095657499355,104.376193,95.825547,81.584963,80.000000,1.584963,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863439534155160504671268531080086442146964698096667234494817e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,moderate,4099,10322096095657499356,107.234933,104.748377,104.152441,80.000000,24.152441,yes,Both,-,"[-7.4218438488571863,-2.0599754815434596e-16,1.1435161048864215e-32,-6.3477895433729034e-49]",0.00059804542290859083933804628575072147128868568289094012121545783646853417306332723,0.0005980454229085908393380462857506949420259499575244299832004195399943367274302487 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,boundary,4099,10322096095657499339,106.513806,104.276578,103.645110,80.000000,23.645110,yes,Both,-,"[689.56791103874002,1.913935429694702e-14,-1.0624475908464504e-30,5.8977688890762846e-47]",2.9890877290907641503012149009532296945711450367253589288612016829881349927374169e+299,2.9890877290907641503012149009534181687133803867116344877486422688909796071e+299 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,moderate,4099,10322096095657499356,108.902998,106.013023,105.332281,80.000000,25.332281,yes,Both,-,"[2.5050708699436939,6.9529683953231499e-17,-3.8596728009893943e-33,2.1425488055889476e-49]",5.6767722797494772853116587667814582973149425261925085601171598811975904652626923,5.6767722797494772853116587667815694514029231846505256411149926048833678443740637 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,boundary,4099,10322096095657499339,108.889789,106.068713,105.117537,80.000000,25.117537,yes,Both,-,"[-300.54967496719229,-8.341929229804598e-15,4.6307009503613316e-31,-2.5705554076223722e-47]",3.3537651522202066232694855987502461915822095092416702651658002446064688733175029e-91,3.3537651522202066232694855987503223996548021083914718227771648387284160913978918e-91 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,moderate,4099,10322096095657499356,108.703910,105.111574,104.102752,80.000000,24.102752,yes,Both,yes,"[0.34499201425549764,9.5754519384565927e-18,-5.3154436066330483e-34,2.9506639390902969e-50]",0.41197864392194338236442692612392088638530541488783931021803297713515523703620147,0.41197864392194338236442692612390197063088901255454253734406676554091755929509722 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,cancellation,4098,10322096095657499336,134.532978,106.243436,104.431991,80.000000,24.431991,yes,Both,yes,"[5.2823021564447655e-10,1.4661333692780236e-26,-8.1386751187185946e-43,4.5178722533726315e-59]",5.2823021578399014295181730840717304111038933843651099389423600846862121746910786e-10,5.2823021578399014295181730840715373648809557706009947616651919887543783634460306e-10 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,near_one,4099,10322096095657499359,107.524978,104.535157,103.727726,80.000000,23.727726,yes,Both,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.16836588841698423133590420499408908570076543035915070334582452268043853416124023,0.16836588841698423133590420499409911099841188934514465011564788537156738257109514 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,wide_exponent,4096,10322096095657499357,108.460104,105.569923,104.766295,80.000000,24.766295,yes,Both,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-282.39686865150220367499305723086940567546238559138028340316645126151229305833112,-282.39686865150220367499305723087759150499758429977321630947871340522978294577768 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,extreme_finite,4096,10322096095657499354,109.176760,105.259872,105.032438,80.000000,25.032438,yes,Both,-,"[7.8173980412642063e+300,2.1697638245177804e+284,1.2044608779891888e+268,6.6861009950191438e+251]",692.83187966610744796102335261136963360047942862056461746020352698849364969646558,692.8318796661074479610233526113529337163936151304127833135311352796511576817801 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,near_one,4099,10322096095657499359,107.263822,104.466398,103.716432,80.000000,23.716432,yes,Both,-,"[1.1833695126437569,3.284510198941373e-17,1.8232694237404329e-33,1.0121178471658348e-49]",0.24290063227404771615686474809384021893054758987931141292077052724202035349776452,0.24290063227404771615686474809385479604744883847615479262644004599544797468667503 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,wide_exponent,4096,10322096095657499357,107.967507,105.222704,104.386734,80.000000,24.386734,yes,Both,-,"[2.2828060842783888e+123,6.336059688800657e+106,3.5172196759528967e+90,1.952449133453769e+74]",409.78796398443927791610862116022677480269364161366471002376221655083554651355371,409.78796398443927791610862116024222810248381363533512220222949171648044838642357 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,extreme_finite,4096,10322096095657499354,111.086264,105.070160,104.606169,80.000000,24.606169,yes,Both,-,"[8.4825748870998104e+300,2.3543874869413368e+284,1.3069475984458161e+268,7.2550165788654925e+251]",999.66293072781110639078474847446915088682993473501091851417255096379221868119203,999.66293072781110639078474847443677221631807677679365605314190636576738889243849 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,near_one,4099,10322096095657499359,107.237044,104.429728,103.762278,80.000000,23.762278,yes,Both,-,"[0.75767388015401582,2.1029674672601745e-17,1.1673814510949479e-33,6.4802688276296867e-50]",-0.12051768424391546599899037931433572311869461807102196510180994458742362307468454,-0.12051768424391546599899037931434272948211001876788467720396858894260414574766305 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,wide_exponent,4096,10322096095657499357,107.892610,105.170494,104.368159,80.000000,24.368159,yes,Both,-,"[2.2729937308360016e-123,6.3088249370069116e-140,3.502101351697213e-156,1.9440567776125645e-172]",-122.64340176210480714781256202313334304453302289297190638109238264297218279352819,-122.64340176210480714781256202313802791680273253425717918726194907203719295819875 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,extreme_finite,4096,10322096095657499354,107.326534,105.011900,104.460171,80.000000,24.460171,yes,Both,-,"[1.574269563896497e-151,4.3694757920112377e-168,2.4255463149165589e-184,1.3464486830575322e-200]",-150.80292090089107415382716149653340039225497975448655319083077208652809986233478,-150.80292090089107415382716149652799577485650407769540271244758516976318786368256 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,moderate,4099,10322096095657499356,108.140237,105.150365,103.619384,80.000000,23.619384,yes,Both,yes,"[0.016967775842366306,4.7095038542183959e-19,-2.6142998067570899e-35,1.4512279193674093e-51]",0.016825431060362116060527975223933686830025480890723928219206553105394405175920802,0.016825431060362116060527975223934766829053970731436945963748330916850378472668862 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,cancellation,4098,10322096095657499336,134.607455,106.537373,104.621883,80.000000,24.621883,yes,Both,yes,"[9.5757892125536038e-15,2.657815415683552e-31,-1.4753839348477804e-47,8.1900260731503383e-64]",9.5757892125535581941894138318495891727756910760066238894863215461528382537839935e-15,9.5757892125535581941894138318498959687222096513961541169989695977230888612152571e-15 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,near_one,4099,10322096095657499359,108.254105,105.091738,103.817818,80.000000,23.817818,yes,Both,yes,"[0.50824794006286333,1.4106714131902435e-17,7.8307994155215805e-34,4.3469669061666386e-50] ; [1.4195792076051643,3.9401238039059714e-17,2.1872080834850324e-33,1.2141443869656723e-49]",0.38260537918836910980295595469486016694478510077047130768040772007699407142311543,0.38260537918836910980295595469483876398615466016654421485472691554230336671157279 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,moderate,4099,10322096095657499356,106.001122,102.267431,101.314349,80.000000,21.314349,yes,Both,yes,"[6.7554035072711907,1.875001128601503e-16,1.0408347120857714e-32,5.7777933109335954e-49] ; [7.5615146099912893,2.09874190526296e-16,1.1650357929843036e-32,6.4672478094180065e-49]",1876810.3436059515909373438747938277987921279160005681718725867312969057820737362,1876810.3436059515909373438747932324627118494928000187634317695110360784386875593 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,moderate,4099,10322096095657499356,106.519662,103.850741,103.190083,90.000000,13.190083,yes,Both,no,"[0.71581135775056381,1.9867756266571774e-17,-1.1028820227394361e-33,6.1222250754524372e-50]",0.096291975196169784525310139181526871816045133452422261028615229900944061380840822,0.096291975196169784525310139181535194812644791471494678467075788752285130394604154 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,wide_exponent,4096,10322096095657499357,106.463253,103.779117,103.294727,90.000000,13.294727,yes,Both,no,"[-4.2985314788901945e+20,-11930.821549849798,6.62293639366862e-13,-3.6764682374394009e-29]",-2.7116946263909823534882310466348560028692459166343819479015128601692309145311966e+144,-2.7116946263909823534882310466350739893700446173843466311067792915601894946997725e+144 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,90.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,90.000000,inf,yes,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144,572114432512329142864001791218144 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,quotient_reduction,2,10322096095657499335,inf,inf,inf,90.000000,inf,yes,Both,yes,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,0,0] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,0,0]",134.96799785736229470766307175341820151552670393203375029736457157980566989863291,134.96799785736229470766307175341820151552670393203375029736457157980566989863291 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,moderate,4099,10322096095657499356,137.991491,inf,103.120938,90.000000,13.120938,yes,Both,yes,"[4.651496856054143,1.2910497271407093e-16,7.1667656650382064e-33,3.9783541267092195e-49] ; [1.1968567583256404,3.3219448256783813e-17,1.8440498160012704e-33,1.0236532821401969e-49]",-0.13593017724841871918057204650149481280191019956683356060646777679554175755072265,-0.13593017724841871918057204650150713875355427787629311886530032033038040140127123 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,near_one,4099,10322096095657499359,107.411772,104.726423,103.815855,80.000000,23.815855,yes,Both,yes,"[0.51829726641315743,1.4385638969304155e-17,-7.9856338038331893e-34,4.4329172576202887e-50]",0.54181616064164601141836335700755281177762270906400557918307925851265915984100729,0.54181616064164601141836335700752246129643265188541540400851198947696500079557021 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,moderate,4099,10322096095657499356,107.428545,104.869846,103.568829,80.000000,23.568829,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50]",0.12683416188096790784216939618227372193425686465939287968000771713444896349187729,0.12683416188096790784216939618228215357757794097427308352934774394732010797034323 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,near_one,4099,10322096095657499359,108.151971,105.591524,104.831618,80.000000,24.831618,yes,Both,-,"[1.4994043079684287,4.1616829648217466e-17,-2.3101981243676942e-33,1.2824175745594325e-49]",2.3511416377389521966137617451012654144360692751585280356211248541098424169604186,2.3511416377389521966137617451013305498775090885888924794020061506206886998298218 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,moderate,4099,10322096095657499356,107.662138,105.118172,104.370708,80.000000,24.370708,yes,Both,-,"[-7.2839693641636938,-2.0217076246896986e-16,1.122273176995369e-32,-6.2298676050974111e-49]",728.37982867708396528583195554001745260585065072868172597435332260573659368674271,728.37982867708396528583195554004522697642161075015288462613983940694317570296734 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,near_one,4099,10322096095657499359,108.508993,105.293208,103.771823,80.000000,23.771823,yes,Both,yes,"[0.51172914905977851,1.4203337091450122e-17,-7.884435932720214e-34,4.3767411543439516e-50]",0.47129137278430720759814686288642179705346521613436667069278209179356009528305549,0.47129137278430720759814686288639457893398171528583227402623085761363208890619784 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,moderate,4099,10322096095657499356,109.925995,105.123457,103.815933,80.000000,23.815933,yes,Both,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.48322034922123225518708897646637636069385959299582733007677741617069688828678409,0.48322034922123225518708897646634929399270770971586954580993858000068003447759588 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,near_one,4099,10322096095657499359,107.942783,105.155677,104.205601,80.000000,24.205601,yes,Both,yes,"[0.54780977077077553,1.5204775515608602e-17,-8.4403459308427531e-34,4.6853331941114368e-50]",0.52356044719022625228591770335188992100790509674337745785256442894450845670917261,0.52356044719022625228591770335191230591271180851991336042503192896063029229750644 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,moderate,4099,10322096095657499356,108.220931,105.311170,103.818628,80.000000,23.818628,yes,Both,yes,"[-0.065200541635407561,-1.8096785635415158e-18,1.0045734042071851e-34,-5.5765026163844551e-51]",-0.065154433999027981604796867967127986881415212588611420145090880769980952458286794,-0.065154433999027981604796867967124344186568215933203026966926467120453192197675953 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,moderate,4099,10322096095657499387,108.352574,105.733799,104.602282,80.000000,24.602282,yes,Both,-,"[1.0163605766345611,2.8209672837524767e-17,-1.5659514150681434e-33,8.6927765822649907e-50]",0.18064417420571660663002643085721230147927409837472224057688179881691649397712496,0.18064417420571660663002643085721816825671862302878034638011489993285710967947058 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,boundary,4101,10322096095657499355,107.711288,104.331717,103.672888,80.000000,23.672888,yes,Both,-,"[1.0000006976642144,2.7755594979700771e-17,-1.54074503043171e-33,8.5528530393103596e-50]",0.0011812401392645466366367223496664025691107131134376936381879814208025359246329034,0.0011812401392645466366367223496664756307232078155433668789257650353131882010275132 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,moderate,4099,10322096095657499356,107.718351,104.542010,103.139045,80.000000,23.139045,yes,Both,yes,"[-0.28874902442031025,-8.0143953812370009e-18,4.4488831403494138e-34,-2.4696262481412955e-50]",-0.29720096062669683272865803517211421035379945494633700815507025452637257512122915,-0.29720096062669683272865803517208759673932197508207544978047397151679963698000212 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,boundary,4105,10322096095657499355,108.512745,106.655151,106.203619,80.000000,26.203619,yes,Both,yes,"[-0.99899927667986499,-2.7727799963846583e-17,1.539202097103153e-33,-8.544288038776232e-50]",-3.799839456997147855581613541852042024176399900088711456868967222127997374059305,-3.799839456997147855581613541852082695691985906489816947756475473707459623001287 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,near_one,4099,10322096095657499359,107.766481,104.260004,103.477540,80.000000,23.477540,yes,Both,yes,"[0.63773432238017391,1.7700683207504784e-17,-9.8258530242838391e-34,5.4544441320713228e-50]",0.63288603898704082304852473006912003275150944031003931863308835424966614091601969,0.6328860389870408230485247300690752116994000610050783793434311866968213898036298 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,moderate,4099,10322096095657499356,114.031302,105.136563,103.642929,80.000000,23.642929,yes,Both,yes,"[0.57618201352237719,1.5992263444685661e-17,-8.8774895460806198e-34,4.9279966474639169e-50]",0.58483862789646320066419155791433430439304208383200808363911138388832600121247651,0.58483862789646320066419155791429737215979664256706430739228534678145335856964206 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,near_one,4099,10322096095657499359,105.308687,102.381484,101.601777,80.000000,21.601777,yes,Both,-,"[0.9902100102210416,2.74838488140428e-17,-1.5256600879333559e-33,8.4691147868762635e-50]",0.16140301992014431339678047519482652144140492984788687432496615166421793929885098,0.16140301992014431339678047519478457172356343218546211428730930584097639007690213 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,moderate,4099,10322096095657499356,109.069920,100.123363,99.167646,80.000000,19.167646,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804815742671822427612167381748211215236610271972494957,0.0048523201680211414554273497804747585214492493110494604164051752716872765694644792 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,moderate,4099,10322096095657499371,107.300170,103.199673,102.168212,80.000000,22.168212,yes,Both,-,"[16.10862066659595,4.4710403897518653e-16,-2.4819259923657773e-32,1.3777456910700632e-48]",28.197381657001775717891747205953291356104893832451631814899496025761393980246794,28.197381657001775717891747205948342415185062324244223614602442709080412981510555 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,moderate,4099,10322096095657499368,105.565044,98.349598,97.317514,80.000000,17.317514,yes,Both,-,"[16.916625286240897,4.6953067229351934e-16,-2.6064188157399712e-32,1.4468530905253747e-48]",16565261246416.8279913958728258930306644070018506909036659635603427886962890625,16565261246416.827991395872825976920133201596664513013387683984998603514086978856 diff --git a/validation/metrics/data/windows/x86_64/detail/MinGW_f128_fastmath_benchmark.csv b/validation/metrics/data/windows/x86_64/detail/MinGW_f128_fastmath_benchmark.csv new file mode 100644 index 0000000..7ed2456 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MinGW_f128_fastmath_benchmark.csv @@ -0,0 +1,86 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,add,fltx,fltx,fltx bl::f128,bl::add,81920,1.821623,1.821393|1.820218|1.828107|1.820368|1.822464|1.825688|1.821623,60784640,110800500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,subtract,fltx,fltx,fltx bl::f128,bl::subtract,81920,1.824364,1.820126|1.824364|1.824917|1.825895|1.833185|1.823869|1.821588,60784640,110922800.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,multiply,fltx,fltx,fltx bl::f128,bl::multiply,81920,2.169176,2.169481|2.167199|2.169667|2.169176|2.168009|2.172520|2.168300,52756480,114439000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,arithmetic,divide,fltx,fltx,fltx bl::f128,bl::divide,81920,2.110766,2.113155|2.111213|2.109769|2.110766|2.108640|2.108207|2.111108,53329920,112547900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fma,fltx,fltx,fltx bl::f128,bl::fma,81920,8.214162,8.217112|8.210805|8.211212|8.208720|8.214162|8.219503|8.225149,13762560,113062700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,abs,fltx,fltx,fltx bl::f128,bl::abs,81920,0.537497,0.536012|0.536170|0.540717|0.537497|0.535573|0.539386|0.537891,204144640,109749500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fabs,fltx,fltx,fltx bl::f128,bl::fabs,81920,0.376619,0.377910|0.377742|0.376750|0.376417|0.375800|0.376619|0.375770,308510720,116220700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqr,fltx,fltx,fltx bl::f128,bl::sqr,81920,1.457811,1.462119|1.460129|1.456157|1.457811|1.454777|1.466118|1.456078,79134720,115459700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,recip,fltx,fltx,fltx bl::f128,bl::recip,8192,31.716380,31.716380|31.797880|31.702737,835584,26520600.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmin,fltx,fltx,fltx bl::f128,bl::fmin,81920,0.818994,0.820785|0.818994|0.820182|0.819097|0.818544|0.818701|0.818929,129024000,105711800.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fmax,fltx,fltx,fltx bl::f128,bl::fmax,81920,0.820997,0.821970|0.823379|0.821216|0.820972|0.820997|0.819414|0.818918,141066240,115812700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,fdim,fltx,fltx,fltx bl::f128,bl::fdim,81920,2.752651,2.777187|2.770909|2.757778|2.752651|2.747402|2.741141|2.741874,40140800,110610500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,copysign,fltx,fltx,fltx bl::f128,bl::copysign,81920,1.034325,1.115756|1.072041|1.045423|1.034325|1.022896|1.012148|1.004065,106086400,110733800.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,floor,fltx,fltx,fltx bl::f128,bl::floor,81920,1.010621,1.035995|1.008966|0.961509|0.984471|1.018136|1.010621|1.059825,120995840,122370400.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,ceil,fltx,fltx,fltx bl::f128,bl::ceil,81920,1.511504,1.511504|1.513253|1.513699|1.517616|1.510666|1.506876|1.506803,76840960,116144200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,trunc,fltx,fltx,fltx bl::f128,bl::trunc,81920,1.624202,1.624653|1.623002|1.620673|1.624202|1.628767|1.622745|1.625033,68239360,110831200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round,fltx,fltx,fltx bl::f128,bl::round,81920,10.187217,10.239258|10.270739|10.188759|10.181885|10.176295|10.174432|10.187217,10895360,111161600.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,roundeven,fltx,fltx,fltx bl::f128,bl::roundeven,81920,6.738462,6.705367|6.700168|6.756908|6.743526|6.738462|6.749946|6.735388,15482880,104243500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,lround,fltx,fltx,fltx bl::f128,bl::lround,8192,3.408705,3.418034|3.408705|3.407385|3.403489|3.409095|3.409831|3.404312,32342016,110244000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,llround,fltx,fltx,fltx bl::f128,bl::llround,8192,3.248772,3.265147|3.251387|3.242434|3.251047|3.244199|3.247836|3.248772,32915456,106979100.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_decimals,fltx,fltx,fltx bl::f128,bl::round_decimals,8192,78.226144,78.425816|78.223528|78.226144,344064,26937400.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,rounding,round_significant,fltx,fltx,fltx bl::f128,bl::round_significant,8192,112.694092,112.694092|112.575684|112.745361,245760,27690200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,fmod,fltx,fltx,fltx bl::f128,bl::fmod,4096,18.802717,18.802717|18.799908|18.854354,1388544,26131000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remainder,fltx,fltx,fltx bl::f128,bl::remainder,4096,20.000919,20.000919|20.109936|19.969253,1241088,24854900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,remainders,remquo,fltx,fltx,fltx bl::f128,bl::remquo,4096,20.164356,20.181423|20.149424|20.164356,1265664,25522200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,modf,fltx,fltx,fltx bl::f128,bl::modf,81920,5.550570,5.557399|5.562579|5.563734|5.545753|5.550570|5.548986|5.544005,21217280,117825700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f128,bl::ldexp,81920,1.291592,1.292828|1.293499|1.289948|1.289844|1.291592|1.289860|1.293842,87736320,113322900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f128,bl::scalbn,81920,1.256482,1.260399|1.259379|1.260538|1.255308|1.254697|1.256482|1.255315,90603520,113929000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f128,bl::scalbln,81920,1.257744,1.254629|1.256191|1.256429|1.259892|1.257768|1.258434|1.257744,88309760,111031700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,frexp,fltx,fltx,fltx bl::f128,bl::frexp,81920,1.816078,1.815219|1.819876|1.812631|1.819628|1.832004|1.816078|1.811738,61931520,112601900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f128,bl::ilogb,81920,1.193190,1.194115|1.194592|1.192706|1.192360|1.191912|1.195805|1.193190,96911360,115666200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,logb,fltx,fltx,fltx bl::f128,bl::logb,81920,1.240160,1.232304|1.232755|1.250695|1.236483|1.241396|1.251213|1.240160,94617600,117393500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f128,bl::nextafter,81920,4.415737,4.428853|4.421813|4.414943|4.418349|4.415737|4.414829|4.414148,24657920,108948100.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f128,bl::nexttoward,81920,4.582252,4.578768|4.588593|4.585943|4.599639|4.576476|4.567484|4.582252,23511040,107744900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,equal,fltx,fltx,fltx bl::f128,bl::equal,81920,0.818484,0.820083|0.816816|0.817594|0.817903|0.820121|0.818980|0.818484,131317760,107492600.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,not_equal,fltx,fltx,fltx bl::f128,bl::not_equal,81920,0.922221,0.922507|0.926356|0.926204|0.920971|0.921806|0.921905|0.922221,119848960,110637200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less,fltx,fltx,fltx bl::f128,bl::less,81920,1.209771,1.227605|1.223091|1.214500|1.209771|1.206201|1.204796|1.202270,91176960,110561600.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,less_equal,fltx,fltx,fltx bl::f128,bl::less_equal,81920,1.149067,1.171393|1.159523|1.149067|1.156456|1.114173|1.045878|1.028731,87162880,97438400.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater,fltx,fltx,fltx bl::f128,bl::greater,81920,1.059767,1.057956|1.059767|1.065772|1.065063|1.062182|1.055639|1.049739,106659840,113000300.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,comparisons,greater_equal,fltx,fltx,fltx bl::f128,bl::greater_equal,81920,1.008519,1.025320|1.022467|1.014192|1.008519|0.998028|0.994410|0.991802,108953600,109805600.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,sqrt,fltx,fltx,fltx bl::f128,bl::sqrt,81920,5.191481,5.194295|5.163506|5.199822|5.189684|5.191481|5.190565|5.211622,20643840,107173900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,cbrt,fltx,fltx,fltx bl::f128,bl::cbrt,2048,73.364672,73.502052|73.364672|73.187566,362496,26589600.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,hypot,fltx,fltx,fltx bl::f128,bl::hypot,8192,8.943954,8.954664|8.975335|8.968540|8.931459|8.943954|8.942572|8.939750,12156928,108815400.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sin,fltx,fltx,fltx bl::f128,bl::sin,2048,101.540411,101.585751|101.540411|101.410203,258048,26195000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,cos,fltx,fltx,fltx bl::f128,bl::cos,2048,101.039163,101.039163|101.258263|101.034155,239616,24227700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,sincos,fltx,fltx,fltx bl::f128,bl::sincos,2048,107.501221,107.501221|107.332764|107.645264,245760,26417500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,tan,fltx,fltx,fltx bl::f128,bl::tan,2048,108.021240,108.109131|108.013916|108.021240,245760,26553900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan,fltx,fltx,fltx bl::f128,bl::atan,2048,137.018019,137.018019|137.181830|136.909337,190464,26100500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,atan2,fltx,fltx,fltx bl::f128,bl::atan2,2048,144.128418,144.056920|144.128418|144.138881,172032,24791200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,asin,fltx,fltx,fltx bl::f128,bl::asin,2048,189.293324,189.293324|189.149059|189.464222,135168,25587600.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,trigonometric,acos,fltx,fltx,fltx bl::f128,bl::acos,2048,194.495739,194.495739|194.497958|194.102894,135168,26272000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp,fltx,fltx,fltx bl::f128,bl::exp,2048,110.194227,110.182020|110.450575|110.194227,221184,24391200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,exp2,fltx,fltx,fltx bl::f128,bl::exp2,2048,101.621344,101.657652|101.397236|101.621344,239616,24335100.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,exponentials,expm1,fltx,fltx,fltx bl::f128,bl::expm1,2048,108.707242,108.707242|108.662373|108.968539,227328,24728600.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log,fltx,fltx,fltx bl::f128,bl::log,2048,138.117440,138.230847|138.117440|137.700038,190464,26287100.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log2,fltx,fltx,fltx bl::f128,bl::log2,2048,143.079427,142.910156|143.079427|143.390299,184320,26381100.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log10,fltx,fltx,fltx bl::f128,bl::log10,2048,144.788411,144.788411|148.208008|144.191081,184320,26860800.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,logarithms,log1p,fltx,fltx,fltx bl::f128,bl::log1p,2048,150.549316,150.549316|150.655692|150.476074,172032,25901200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,pow,fltx,fltx,fltx bl::f128,bl::pow,2048,219.243707,219.243707|219.585503|219.018555,110592,24250900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,roots_and_powers,ipow,fltx,fltx,fltx bl::f128,bl::ipow,8192,18.201144,18.182949|18.225213|18.200568|18.235347|18.166826|18.207248|18.201144,6078464,110644800.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,product_sum,fltx,fltx,fltx bl::f128,bl::product_sum,8192,7.491246,7.485051|7.499627|7.498852|7.489241|7.491246|7.494798|7.490927,15368192,115151100.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,sinh,fltx,fltx,fltx bl::f128,bl::sinh,2048,124.678040,124.557495|124.684143|124.678040,196608,24505200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,cosh,fltx,fltx,fltx bl::f128,bl::cosh,2048,123.605526,123.605526|123.624196|123.519359,208896,25816000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,hyperbolic,tanh,fltx,fltx,fltx bl::f128,bl::tanh,2048,129.320502,129.320502|129.570943|129.185043,190464,24638200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f128,bl::asinh,2048,138.372171,138.372171|138.035426|138.717336,178176,24655100.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f128,bl::acosh,2048,163.232422,164.026818|163.232422|162.761043,159744,26092600.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f128,bl::atanh,2048,163.423978,162.590144|163.423978|163.923528,159744,26088200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erf,fltx,fltx,fltx bl::f128,bl::erf,256,785.819404,781.676962|785.819404|786.764172,33024,25915700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,erfc,fltx,fltx,fltx bl::f128,bl::erfc,256,782.821801,782.821801|785.212054|782.803199,32256,25276200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,lgamma,fltx,fltx,fltx bl::f128,bl::lgamma,256,621.732955,622.350852|621.732955|621.605114,42240,26268900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,special_functions,tgamma,fltx,fltx,fltx bl::f128,bl::tgamma,256,564.507004,563.644935|564.507004|564.682112,44544,25135200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_string,fltx,fltx,fltx bl::f128,bl::to_string,4099,240.581714,239.646526|240.817544|240.581714,110673,26600100.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,to_chars,fltx,fltx,fltx bl::f128,bl::to_chars,4099,199.984475,199.993346|199.700592|199.984475,135267,27038900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,io,parse,fltx,fltx,fltx bl::f128,bl::parse,4099,199.426689,200.017077|199.275433|199.426689,122970,24541500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,mt19937_64,fltx,fltx,fltx bl::f128,bl::mt19937_64,64,5.103804,5.103804|5.120641|5.100472,5131584,26213700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,uniform_real,fltx,fltx,fltx bl::f128,bl::uniform_real,64,21.126511,21.126511|21.176969|21.099728,1254528,26513700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,random,normal,fltx,fltx,fltx bl::f128,bl::normal,64,108.643670,108.762230|108.643670|108.532598,240384,26116800.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f128,same workload,64,22.793631,22.810691|22.768817|22.793631,1160640,26452200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f128,same workload,64,217.339819,219.826061|217.339819|215.902614,122112,26582500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f128,same workload,64,17.984836,17.984836|17.961885|18.004098,1464000,26328000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f128,same workload,64,80.671738,80.811034|80.609421|80.671738,327360,26417100.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f128,same workload,64,101.755137,101.863347|101.755137|101.594606,252288,25667200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,newton_root,fltx,fltx,fltx bl::f128,same workload,8,30.100806,30.096706|30.117551|30.100806,877920,26429800.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f128,same workload,8,900.184124,899.539689|901.370704|900.184124,29328,26405900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f128,mixed_workloads,haversine,fltx,fltx,fltx bl::f128,same workload,8,532.112488,534.614917|532.106414|532.112488,49392,26323200.000000, diff --git a/validation/metrics/data/windows/x86_64/detail/MinGW_f256_accuracy.csv b/validation/metrics/data/windows/x86_64/detail/MinGW_f256_accuracy.csv new file mode 100644 index 0000000..0f2494d --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MinGW_f256_accuracy.csv @@ -0,0 +1,452 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,moderate,4097,10322096095657499311,219.944958,215.547580,215.029639,212.000000,3.029639,yes,Both,yes,-6.32659778225233051069632927545029475138801079375645295548611539482289480950893866e-02,-0.063265977822523305106963292754502947513880107937564529554861153949406008699572901,-0.063265977822523305106963292754502947513880107937564529554861153948228948095089387 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,qdpp,qdreal,qdpp qd_real,qdpp read,moderate,4097,10322096095657499311,215.900782,213.359466,212.624295,,,,NaN,yes,-4.63882622312234493417843178551748957461733884891010882745196058285158589332107375e-20,-4.638826223122344934178431785517489574617338848910108827451960582394374055047182e-20,-4.6388262231223449341784317855174895746173388489101088274519605828515858933210737e-20 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,moderate,4097,10322096095657499311,215.940112,214.179279,214.005374,,,,Both,yes,3.27924571850188479709697729061957092921603976290473696084676388411920809973612135e+04,32792.457185018847970969772906195709292160397629047369608467638839951179746222626,32792.457185018847970969772906195709292160397629047369608467638841192080997361213 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,moderate,4097,10322096095657499311,238.934823,237.169709,237.016125,,,,No,no,-5.50310983261151208909435524852066623206545235447780617289527732284019451304374918e+11,-550310983261.15120890943552485206662320654523544778061728952773228401944884035039,-550310983261.15120890943552485206662320654523544778061728952773228401945130437492 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,wide_exponent,4098,10322096095657499308,219.514079,212.275332,212.017147,212.000000,0.017147,yes,Both,yes,2.47163553801407265315232159817868248210487207087397698019878061850401032407603178e-277,2.4716355380140726531523215981786824821048720708495655738821672043746801610949361e-277,2.4716355380140726531523215981786824821048720708739769801987806185040103240760318e-277 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,qdpp,qdreal,qdpp qd_real,qdpp read,wide_exponent,4098,10322096095657499308,185.928461,0.000000,0.000000,,,,NaN,yes,5.95931860969641614490760034996604418110933850056329521007406471645258405470130332e-279,nan,5.9593186096964161449076003499660441811093385005632952100740647164525840547013033e-279 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,wide_exponent,4098,10322096095657499308,215.965809,214.158596,214.010809,,,,Both,yes,4.67754409985637411064587241203832249167095915858300940438608874596758932966859234e-10,4.6775440998563741106458724120383224916709591585830094043860887461439270142288485e-10,4.6775440998563741106458724120383224916709591585830094043860887459675893296685923e-10 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,wide_exponent,4098,10322096095657499308,238.948816,237.180769,237.050336,,,,No,no,-9.82792416239779920528610383546388843899472112754392449895974148140668994861206983e-209,-9.8279241623977992052861038354638884389947211275439244989597414814066899056386218e-209,-9.8279241623977992052861038354638884389947211275439244989597414814066899486120698e-209 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,qdpp,qdreal,qdpp qd_real,qdpp to_string,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,,,,Both,no,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,moderate,4099,10322096095657499356,220.421856,217.506231,217.050134,,,,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,moderate,4099,10322096095657499356,217.101379,214.109787,213.625754,,,,Both,yes,"[-1.0120359112545216,-2.8089639260556788e-17,1.5592882130242451e-33,-8.6557883806306642e-50]",-1.0120359112545216643274079497272660582288297275418200429251556668,-1.0120359112545216643274079497272660582288297275418200429251556667501762953126709 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,qdpp,qdreal,qdpp qd_real,qdpp to_string,wide_exponent,4096,10322096095657499357,217.212996,210.961812,208.712130,,,,Both,no,"[9.8542816649002571e-272,2.7351125988784467e-288,-1.5182924911086008e-304,8.428759918051666e-321]",9.85428166490025732860398154818749194460276526114239480670541674162e-272,9.8542816649002573286039815481874919446027652611423923940117031119134885993969883e-272 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,wide_exponent,4096,10322096095657499357,220.211606,217.209596,216.955609,,,,Both,yes,"[-1.0005623436112949e+24,-27771183.786254175,1.5416103830298108e-09,-8.5576567112045135e-26]",-1.00056234361129493015787178625417346573290920651736114849688038987e+24,-1000562343611294930157871.7862541734657329092065173611484968803898748988958608631 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,wide_exponent,4096,10322096095657499357,216.729106,213.966069,213.645520,,,,Both,yes,"[-1.0029053037863911e+73,-2.7836213994558466e+56,1.5452202847575905e+40,-8.5776956912785892e+23]",-1.002905303786391175276514736134567164601647246691591077312663009e+73,-10029053037863911752765147361345671646016472466915910773126630089512976384 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,qdpp,qdreal,qdpp qd_real,qdpp write,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,,,,Both,no,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,qdpp,qdreal,qdpp qd_real,qdpp write,wide_exponent,4096,10322096095657499357,217.212996,210.961812,208.712130,,,,Both,no,"[9.8542816649002571e-272,2.7351125988784467e-288,-1.5182924911086008e-304,8.428759918051666e-321]",9.85428166490025732860398154818749194460276526114239480670541674162e-272,9.8542816649002573286039815481874919446027652611423923940117031119134885993969883e-272 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,qdpp,qdreal,qdpp qd_real,qdpp operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator==,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,qdpp,qdreal,qdpp qd_real,qdpp operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator!=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,qdpp,qdreal,qdpp qd_real,qdpp operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,tlfloat,tloct,TLFloat Octuple,TLFloat operator<,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,qdpp,qdreal,qdpp qd_real,qdpp operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator<=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,qdpp,qdreal,qdpp qd_real,qdpp operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,tlfloat,tloct,TLFloat Octuple,TLFloat operator>,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,qdpp,qdreal,qdpp qd_real,qdpp operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator>=,moderate,8198,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,general,3770,10322096095657499292,225.979394,215.583815,215.297307,190.000000,25.297307,yes,Both,no,"representative lhs [-4.4462634936433036e+21,-123408.6026048271,6.8505536024347558e-12,-3.8028211704259384e-28] ; representative rhs [-1.5864490641473432e+22,-440328.06960285309,2.4443118063091801e-11,-1.3568656233637788e-27]",-20310754135116736403992.672207680164858397009037806754206012036634323297640103087,-20310754135116736403992.672207680164858397009037806754206012036634009406784094328 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,qdpp,qdreal,qdpp qd_real,qdpp operator+,general,3770,10322096095657499292,225.979148,215.583815,215.297307,,,,NaN,no,"representative lhs [-4.4462634936433036e+21,-123408.6026048271,6.8505536024347558e-12,-3.8028211704259384e-28] ; representative rhs [-1.5864490641473432e+22,-440328.06960285309,2.4443118063091801e-11,-1.3568656233637788e-27]",-20310754135116736403992.672207680164858397009037806754206012036634323297640103087,-20310754135116736403992.672207680164858397009037806754206012036634009406784094328 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator+,general,3770,10322096095657499292,223.282430,214.179406,214.011982,,,,Both,yes,"representative lhs [1839126521648.5967,5.1046015238326211e-05,-2.8336230716478179e-21,1.5729767886262335e-37] ; representative rhs [378235839901.0448,1.0498153454914361e-05,-5.8276458408470292e-22,3.2349932959347012e-38]",2217362361549.6415410363561932405683908522995717267139530293433997786912098314276,2217362361549.6415410363561932405683908522995717267139530293433998622151070218087 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,general,3770,10322096095657499292,251.753596,237.252454,237.007687,,,,No,no,"representative lhs [62135357.136479288,1.7246026034056585e-09,-9.5734675931472475e-26,5.3143420737074274e-42] ; representative rhs [-565957625994804.25,-0.015708479683540617,8.719957913261643e-19,-4.8405490245327049e-35]",-565957563859447.12922918961932314491369166283033247612036449157122254744835860639,-565957563859447.12922918961932314491369166283033247612036449157122254744580965934 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,subnormal,326,10322096095657499292,243.500079,219.782158,216.532998,190.000000,26.532998,yes,Both,no,"broad lhs [-4.0912052790212279e-223,-1.1355375748093388e-239,6.3034998044016954e-256,-3.4991453092834664e-272] ; broad rhs [9.6732779190304605e-272,2.6848739673264345e-288,-1.4904044483712489e-304,8.2755995678408796e-321]",-4.0912052790212280311833034891221488165122802908340538768476180849661443443505261e-223,-4.0912052790212280311833034891221488165122802908340538768476180849392956046772617e-223 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,qdpp,qdreal,qdpp qd_real,qdpp operator+,subnormal,326,10322096095657499292,243.500079,219.782158,216.532998,,,,NaN,no,"broad lhs [-4.0912052790212279e-223,-1.1355375748093388e-239,6.3034998044016954e-256,-3.4991453092834664e-272] ; broad rhs [9.6732779190304605e-272,2.6848739673264345e-288,-1.4904044483712489e-304,8.2755995678408796e-321]",-4.0912052790212280311833034891221488165122802908340538768476180849661443443505261e-223,-4.0912052790212280311833034891221488165122802908340538768476180849392956046772617e-223 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator+,subnormal,326,10322096095657499292,245.391464,215.478126,214.860355,,,,Both,yes,"broad lhs [-6.9688197085765511e-265,-1.9342360237308151e-281,1.0737166843026808e-297,-5.9603249241910803e-314] ; broad rhs [7.5706271798833126e-227,2.1012711514898676e-243,-1.1664398066823332e-259,6.475041651090214e-276]",7.5706271798833128589493143999584390922823152154190751436541880413193723254995517e-227,7.5706271798833128589493143999584390922823152154190751436541880411609851505089632e-227 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,subnormal,326,10322096095657499292,268.533311,239.229805,237.927733,,,,No,no,"broad lhs [1.0442940275936825e-262,2.8984981847826123e-279,-1.6089897107899388e-295,8.931687116517412e-312] ; broad rhs [2.3634881419299421e-239,6.5599973839978789e-256,-3.6415300685976198e-272,2.0214552635109516e-288]",2.363488141929942143733794549283321928828920127322018608246875184884809475467298e-239,2.3634881419299421437337945492833219288289201273220186082468751848848094698416956e-239 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,general,3791,10322096095657499292,226.123353,215.602949,215.220788,190.000000,25.220788,yes,Both,no,"representative lhs [155.03656083289641,4.3031289873845084e-15,-2.388716439863108e-31,1.3260039954183278e-47] ; representative rhs [2246405305209.4082,6.2350272312089677e-05,-3.4611353956265177e-21,1.9213161037848301e-37]",-2246405305054.3717046423758949106196822642348296102031142477192627199056314953875,-2246405305054.3717046423758949106196822642348296102031142477192626832977015519632 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,qdpp,qdreal,qdpp qd_real,qdpp operator-,general,3791,10322096095657499292,226.121622,215.602917,214.959040,,,,NaN,no,"representative lhs [-13777.629901790066,-3.8240604854328413e-13,2.1227799992433967e-29,-1.1783796156868957e-45] ; representative rhs [7.7752724229543192e+20,21580.716166742284,-1.1979703988108816e-12,6.6500715978961103e-29]",-777527242295431957022.34606853234900270537189607974110951719324325739708729160804,-777527242295431957022.34606853234900270537189607974110951719324327258845155054311 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator-,general,3791,10322096095657499292,223.541382,214.220914,214.046715,,,,Both,yes,"extreme lhs [-4.252941070652636e+270,-1.1804282747531303e+254,6.552693247747378e+237,-3.6374754584774671e+221] ; extreme rhs [4.4779550465712955e+270,1.2428821989849669e+254,-6.8993821710492778e+237,3.8299264709936042e+221]",-8.7308961172239317176190432327170580782021961210607087161308584689659299006598005e+270,-8.7308961172239317176190432327170580782021961210607087161308584686448766840125609e+270 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,general,3791,10322096095657499292,252.005853,237.248925,237.000122,,,,No,no,"representative lhs [1.3878961076205298e-17,3.852185536169866e-34,-2.1383925386918945e-50,1.1870463160711911e-66] ; representative rhs [2.5596121212896439e-24,7.1043507779135037e-41,-3.9437069043266069e-57,2.1891971037782992e-73]",1.3878958516593177248260844131745516632854659836193439237091032443574096862512889e-17,1.3878958516593177248260844131745516632854659836193439237091032443574096799676493e-17 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,subnormal,305,10322096095657499292,243.910586,244.000000,216.728701,190.000000,26.728701,yes,Both,no,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239320146546075137762e-238,8.2656349351104667692680102118096923996066568310632957805469239319672919306477601e-238 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,qdpp,qdreal,qdpp qd_real,qdpp operator-,subnormal,305,10322096095657499292,243.910586,244.000000,216.728701,,,,NaN,no,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239320146546075137762e-238,8.2656349351104667692680102118096923996066568310632957805469239319672919306477601e-238 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator-,subnormal,305,10322096095657499292,245.904029,246.000000,216.728701,,,,Both,yes,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239322479705121395809e-238,8.2656349351104667692680102118096923996066568310632957805469239322006078352735648e-238 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,subnormal,305,10322096095657499292,268.897431,269.000000,237.716330,,,,No,no,"broad lhs [8.2656349351104665e-238,2.2941745545264254e-254,-1.2735227064721996e-270,7.0694711555419042e-287] ; broad rhs [-3.0740134787901961e-270,-8.5321013554023774e-287,4.7362676866016126e-303,-2.6291703343441935e-319]",8.2656349351104667692680102118096923996066568310632957805469239319672919078689777e-238,8.2656349351104667692680102118096923996066568310632957805469239319672919306477601e-238 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,general,4000,10322096095657499292,220.010524,216.259138,215.221541,190.000000,25.221541,yes,Both,yes,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60038241930403290903625769183688852217377918301809189,-156159778640594921198000750.60038241930403290903625769183688852217632267056740194 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,qdpp,qdreal,qdpp qd_real,qdpp operator*,general,4000,10322096095657499292,220.010524,216.259138,215.221541,,,,Both,no,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60038241930403290903625769183688852217377918301809189,-156159778640594921198000750.60038241930403290903625769183688852217632267056740194 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator*,general,4000,10322096095657499292,215.959021,214.146637,214.012662,,,,Both,yes,"structured lhs [-1.1022409972597686e+20,-3059.333334608973,1.6982711540430701e-13,-9.427298686376762e-30] ; balanced-product rhs [-9.0724261072311291e-21,-2.5181040883645947e-37,1.3978285686525564e-53,-7.7595073069844723e-70]",1.000000000000000088520617930547062213152525880726620878119303628883372473544684,1.0000000000000000885206179305470622131525258807266208781193036288457221016484325 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,general,4000,10322096095657499292,238.976836,237.170485,237.006898,,,,No,no,"representative lhs [-1.0168921687957512e-16,-2.8224427483951354e-33,1.5667704624772934e-49,-8.6973232087244803e-66] ; representative rhs [-4.1345258950916926e+22,-1147561.4611599329,6.370245781761224e-11,-3.5361967697162955e-27]",4204367.0044019860517179602758477836413196189733707121724545268060512669316657157,4204367.0044019860517179602758477836413196189733707121724545268060512669127198166 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,subnormal,100,10322096095657499292,221.469015,215.608028,215.608028,190.000000,25.608028,yes,Both,yes,"extreme lhs [-5.3809439414843993e+270,-1.4935119645133053e+254,8.2906568527791063e+237,-4.6022390636108503e+221] ; extreme rhs [-4.596668242019171e-261,-1.2758317297132313e-277,7.0822888093748442e-294,-3.931460051606543e-310]",24734414127.906804259564005392277744744307358869933187588284984254854603209456978,24734414127.906804259564005392277744744307358869933187588284984255162792737796103 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,qdpp,qdreal,qdpp qd_real,qdpp operator*,subnormal,100,10322096095657499292,221.469015,215.608028,215.608028,,,,Both,no,"extreme lhs [-5.3809439414843993e+270,-1.4935119645133053e+254,8.2906568527791063e+237,-4.6022390636108503e+221] ; extreme rhs [-4.596668242019171e-261,-1.2758317297132313e-277,7.0822888093748442e-294,-3.931460051606543e-310]",24734414127.906804259564005392277744744307358869933187588284984254854603209456978,24734414127.906804259564005392277744744307358869933187588284984255162792737796103 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator*,subnormal,100,10322096095657499292,217.348488,214.292349,214.292349,,,,Both,yes,"extreme lhs [-5.9542134868631228e-272,-1.652626226662269e-288,9.173918439699219e-305,-5.0938168086232519e-321] ; extreme rhs [4.2949102582549815e+270,1.1920770643533644e+254,-6.6173570198633482e+237,3.6733710628085992e+221]",-0.25572812584568589864154296747923216874038792137305578267444519266559147574620585,-0.25572812584568589864154296747923216874038792137305578267444519265766000955097554 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,subnormal,100,10322096095657499292,240.223553,237.076391,237.076391,,,,No,no,"extreme lhs [-8.6746891312209087e-272,-2.4077099012367622e-288,1.3365474844855075e-304,-7.4208660005355231e-321] ; extreme rhs [-2.6248964316441233e+255,-7.2855511391692975e+238,4.0442933108948961e+222,-2.2450337760465101e+206]",2.2770160546163824124244516741669496270247267859218074430231396140145617261766692e-16,2.2770160546163824124244516741669496270247267859218074430231396140145617163984162e-16 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,general,4045,10322096095657499292,219.218459,215.287455,214.762066,190.000000,24.762066,yes,Both,yes,"representative lhs [2268851457486.2539,6.2973278188889589e-05,-3.49571916907152e-21,1.940513954563361e-37] ; representative rhs [0.00093095878597111432,2.5839296979055357e-20,-1.4343691223137255e-36,7.9623481270203769e-53]",2437112675315200.8552398842775006307979109182413214802574225974607596074455830965,2437112675315200.8552398842775006307979109182413214802574225974607050251573596225 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,qdpp,qdreal,qdpp qd_real,qdpp operator/,general,4045,10322096095657499292,219.206438,214.806774,214.013421,,,,NaN,no,"broad lhs [-4.1408453630726265e-99,-1.1493154658738865e-115,6.3799824638548856e-132,-3.5416017140382148e-148] ; broad rhs [3.6617819725500985e+81,1.0163486642706106e+65,-5.6418684406012752e+48,3.1318661223307815e+32]",-1.1308279395424801511446934119645693613341712224082609557731723080505494810403134e-180,-1.1308279395424801511446934119645693613341712224082609557731723080079957823561001e-180 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,general,4045,10322096095657499292,215.966511,214.166285,214.002285,,,,Both,yes,"structured lhs [1.421739367690595e-13,3.9461194525652748e-30,-2.1905363370795932e-46,1.2159919388519087e-62] ; near-equal divisor [1.421739367690595e-13,3.9461194525652748e-30,-2.1905363370795932e-46,1.2158435023359357e-62]",1.000000000000000000000000000000000000000000000000000010440487148873603784702549,1.0000000000000000000000000000000000000000000000000000104404871488356816123738149 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,general,4045,10322096095657499292,238.999926,237.154132,237.025300,,,,No,no,"representative lhs [-4.6265730361291875e+23,-12841319.774551351,7.1283644401406169e-10,-3.9570371646816632e-26] ; representative rhs [1547.4435613354531,4.2950186777564266e-14,-2.3842143136201403e-30,1.3235048133109718e-46]",-298981698055367349746.41814433326396950592089524800971303493694163568117583736658,-298981698055367349746.41814433326396950592089524800971303493694163568117716757507 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,subnormal,55,10322096095657499292,219.372138,215.374456,215.374456,190.000000,25.374456,yes,Both,yes,"extreme lhs [-6.5972954615428272e-272,-1.8311173304149739e-288,1.0164743105084273e-304,-5.6422296755070355e-321] ; extreme rhs [6.3421732060336743e-272,1.760306679874833e-288,-9.7716650319925213e-305,5.4248407913368871e-321]",-1.0402263147380523166730438190618890627910384611501752613620202130066222580107113,-1.040226314738052316673043819061889062791038461150175261362020212991383268138225 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,qdpp,qdreal,qdpp qd_real,qdpp operator/,subnormal,55,10322096095657499292,179.057908,172.169377,172.169377,,,,NaN,no,"extreme lhs [8.1288457198866801e-272,2.256207920460962e-288,-1.2524469908187019e-304,6.9515036369863389e-321] ; extreme rhs [-8.4431682373195252e-272,-2.3434499444639837e-288,1.3008760427002295e-304,-7.2232397421990245e-321]",-0.96277197035545108689276081728873001290166886469504048045287321788626803206842898,-0.96277197035545108689276081728873001290166886469504062346622680022515994107671364 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,subnormal,55,10322096095657499292,218.186470,214.206957,214.206957,,,,Both,yes,"extreme lhs [-6.5972954615428272e-272,-1.8311173304149739e-288,1.0164743105084273e-304,-5.6422296755070355e-321] ; extreme rhs [6.3421732060336743e-272,1.760306679874833e-288,-9.7716650319925213e-305,5.4248407913368871e-321]",-1.0402263147380523166730438190618890627910384611501752613620202130256133935022309,-1.040226314738052316673043819061889062791038461150175261362020212991383268138225 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,subnormal,55,10322096095657499292,241.440467,237.221787,237.221787,,,,No,no,"extreme lhs [8.1717524039455344e-272,2.2681169175990763e-288,-1.2590578122301667e-304,6.9910288886536386e-321] ; extreme rhs [8.1073110278598673e-272,2.2502308427318672e-288,-1.2491290461612942e-304,6.931741011152689e-321]",1.0079485511119804779080183242564760679498572504876789996787264200987624042534109,1.0079485511119804779080183242564760679498572504876789996787264200987624081669073 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,moderate,4099,10322096095657499356,219.883649,215.654212,215.160161,190.000000,25.160161,yes,Both,no,"[1.2843679126351581,3.5648370717432602e-17,-1.9788820980433443e-33,1.0985002341331286e-49] ; [-2.3308777059725987,-6.4694852418906121e-17,3.5912857365098039e-33,-1.9935640563405487e-49] ; [5.2042205184851724,1.4444613612122271e-16,-8.0183713069960479e-33,4.451090222510361e-49]",2.2105159846573199203800006655584861882250236763069688164874765011598446438714347,2.2105159846573199203800006655584861882250236763069688164874765011222755061934085 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,moderate,4099,10322096095657499356,215.978389,214.164686,214.038759,,,,Both,yes,"[4.9845060765167126,1.3834783531332142e-16,-7.6798476085949372e-33,4.2631718203372733e-49] ; [-1.8344589332917707,-5.0916463636745698e-17,2.8264315131002303e-33,-1.5689846716849977e-49] ; [1.1247730073775273,3.1218722256685296e-17,-1.7329872124374921e-33,9.6200115231453559e-50]",-8.0190986927356709087174259178039082808363580425011987458457247106202380902722945,-8.0190986927356709087174259178039082808363580425011987458457247103237283321300853 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,moderate,4099,10322096095657499356,238.995329,237.157442,237.018361,,,,No,no,"[-0.84550812208603965,-2.3467564616187476e-17,1.302711528438498e-33,-7.2315016665852497e-50] ; [4.7189100901806977,1.3097606583136461e-16,-7.2706321980400619e-33,4.0360116349225438e-49] ; [4.997053192184298,1.3869608773099112e-16,-7.6991795012188515e-33,4.2739031764875987e-49]",1.0071763835427521666104437874229887686470986916744027421719680838786588428377016,1.0071763835427521666104437874229887686470986916744027421719680838786588383350389 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,Both,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,cancellation,4098,10322096095657499352,inf,inf,inf,,,,Both,yes,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,wide_exponent,4096,10322096095657499357,225.262959,215.958051,215.096656,190.000000,25.096656,yes,Both,no,"[5.0695695241027842e+79,1.4070882026492271e+63,-7.8109086012980007e+46,4.3359252862018586e+30] ; [-1.285263546577847e-53,-3.5673229553052827e-70,1.9802620406268915e-86,-1.0992662561475861e-102] ; [-9312.4534885580761,-2.5847250696870095e-13,1.4348106423461901e-29,-7.9647990555497543e-46]",-651573290617131278652235925.796582770520137295580825262259286558273807300279549,-651573290617131278652235925.79658277052013729558082526225928655828537955033923283 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,wide_exponent,4096,10322096095657499357,222.795239,214.207199,214.017731,,,,Both,yes,"[-7.3362225804227161e+81,-2.0362108056400696e+65,1.1303240597060724e+49,-6.2745589818673089e+32] ; [4.697530874614766e+74,1.3038267339712156e+58,-7.2376923008833117e+41,4.0177263187964394e+25] ; [1.3845075017784626e-80,3.84278026560176e-97,-2.1331715647231242e-113,1.1841480933156424e-129]",-3.4462132074581718803444481231787333071891997137766508509269936657892888506715951e+156,-3.4462132074581718803444481231787333071891997137766508509269936656599927318479792e+156 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,wide_exponent,4096,10322096095657499357,245.186928,237.226957,237.054841,,,,No,no,"[-7.7238642392071697e+37,-2.1438029793616669e+21,119004.97139736659,-6.606102964510729e-12] ; [7.7217688161659949e+38,2.1432213826350063e+22,-1189726.8629351733,6.6043107812284359e-11] ; [8.411674119728479e-53,2.3347085708415258e-69,-1.2960236055689777e-85,7.1943762368019562e-102]",-59641894022609612945325167753430528720789835656430133782624366680451826843648,-59641894022609612945325167753430528720789835656430133782624366680451826583671.804 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,qdpp,qdreal,qdpp qd_real,qdpp abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246,3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,qdpp,qdreal,qdpp qd_real,qdpp abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,qdpp,qdreal,qdpp qd_real,qdpp fabs,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fabs,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",8,8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0]",8,8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,moderate,4099,10322096095657499356,220.145544,216.285104,215.251190,190.000000,25.251190,yes,Both,yes,"[-0.36144099270550889,-1.0032002803625731e-17,5.5688802478447044e-34,-3.0913495362687196e-50]",0.13063959120794373790137808981865083109327726640612337325102002398854548322121324,0.13063959120794373790137808981865083109327726640612337325102002399063002164712949 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,qdpp,qdreal,qdpp qd_real,qdpp sqr,moderate,4099,10322096095657499356,216.750989,214.989743,214.720760,,,,Both,yes,"[-3.0351966116712088,-8.4243629063540904e-17,4.6764608332162063e-33,-2.5959572453971881e-49]",9.212418471500387180002010799680797528619143723193698328246365177142909479711308,9.2124184715003871800020107996807975286191437231936983282463651773552262335669417 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,wide_exponent,4096,10322096095657499357,220.095837,216.278909,215.290405,190.000000,25.290405,yes,Both,yes,"[6.7502995556670522e-41,1.8735844974546312e-57,-1.0400483238274423e-73,5.7734279791801363e-90]",4.5566544091238805246854811871109707929263286794390254922251627617554550230494986e-81,4.5566544091238805246854811871109707929263286794390254922251627618262131586719535e-81 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,qdpp,qdreal,qdpp qd_real,qdpp sqr,wide_exponent,4096,10322096095657499357,216.710094,215.051659,214.774024,,,,Both,yes,"[-1.1572176183879363e+79,-3.211924111090437e+62,1.7829760507406462e+46,-9.8975053194374838e+29]",1.3391526163074474528650888471418397717788406774304758993556136673441243150413775e+158,1.3391526163074474528650888471418397717788406774304758993556136673738688113319e+158 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,near_one,4099,10322096095657499359,217.971795,215.406773,214.634335,190.000000,24.634335,yes,Both,yes,"[0.98524730223011503,2.7346105997142351e-17,1.5180138255933757e-33,8.426669504365412e-50]",1.0149735987467228735600712240168282012518927505403262882885405865459789646852313,1.0149735987467228735600712240168282012518927505403262882885405865211429570599582 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,qdpp,qdreal,qdpp qd_real,qdpp inv,near_one,4099,10322096095657499359,217.977278,215.406773,214.634335,,,,NaN,no,"[0.98524730223011503,2.7346105997142351e-17,1.5180138255933757e-33,8.426669504365412e-50]",1.0149735987467228735600712240168282012518927505403262882885405865459789646852313,1.0149735987467228735600712240168282012518927505403262882885405865211429570599582 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,wide_exponent,4096,10322096095657499357,217.877061,215.148048,214.625136,190.000000,24.625136,yes,Both,yes,"[2.2537520677334854e+105,6.2554185934856772e+88,3.4724548755780555e+72,1.9275996774193202e+56]",4.4370452913468106284563119957364553561271971862592280260566035243063949187169959e-106,4.4370452913468106284563119957364553561271971862592280260566035241971276114030617e-106 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,qdpp,qdreal,qdpp qd_real,qdpp inv,wide_exponent,4096,10322096095657499357,217.878526,215.148048,214.625136,,,,NaN,no,"[2.2537520677334854e+105,6.2554185934856772e+88,3.4724548755780555e+72,1.9275996774193202e+56]",4.4370452913468106284563119957364553561271971862592280260566035243063949187169959e-106,4.4370452913468106284563119957364553561271971862592280260566035241971276114030617e-106 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,qdpp,qdreal,qdpp qd_real,qdpp min,moderate,4099,10322096095657499356,inf,inf,inf,,,,Inf,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,qdpp,qdreal,qdpp qd_real,qdpp min,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Inf,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643637975124707203e+166,-3.1692452985045241935931724109976666181468122346931195036563377643637975124707203e+166 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,qdpp,qdreal,qdpp qd_real,qdpp max,moderate,4099,10322096095657499356,inf,inf,inf,,,,Inf,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820587966479345926073,-7.0558510431143679224555721217306640518626870807672704477968820587966479345926073 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,qdpp,qdreal,qdpp qd_real,qdpp max,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Inf,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246,3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,moderate,4099,10322096095657499356,241.301771,214.093805,214.003121,,,,No,yes,"[1.3512114356810514,3.7503651175747926e-17,-2.0818708521412835e-33,1.1556704771716239e-49] ; [-2.6574506527362001,-7.3759072536822014e-17,4.0944510302688427e-33,-2.2728769035023315e-49]",4.0086620884172515790939164253351213814054256785823302622262501699878791447368772,4.0086620884172515790939164253351213814054256785823302622262501698359500608047204 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,Both,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,,,,No,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,tlfloat,tloct,TLFloat Octuple,tlfloat::copysign,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,qdpp,qdreal,qdpp qd_real,qdpp floor,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::floor,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,tlfloat,tloct,TLFloat Octuple,tlfloat::floor,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,qdpp,qdreal,qdpp qd_real,qdpp ceil,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ceil,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,tlfloat,tloct,TLFloat Octuple,tlfloat::ceil,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,qdpp,qdreal,qdpp qd_real,qdpp aint,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::trunc,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,tlfloat,tloct,TLFloat Octuple,tlfloat::trunc,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,qdpp,qdreal,qdpp qd_real,qdpp round,boundary,4110,10322096095657499382,229.692457,0.000000,0.000000,,,,Both,no,"just below -2.5 [-2.5,-5.5511151231257827e-17,0,0]",-4,-3 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::round,boundary,4110,10322096095657499382,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,tlfloat,tloct,TLFloat Octuple,tlfloat::round,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,tlfloat,tloct,TLFloat Octuple,tlfloat::rint,boundary,4110,10322096095657499382,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,moderate,4099,10322096095657499356,220.044956,215.606687,215.330917,190.000000,25.330917,yes,Both,yes,"[4.0249001329210348,1.1171341998464465e-16,-6.2013405513286293e-33,3.4424355318133533e-49]",4.0249999999999999999999999999999999999999999999999999999999999999392283664271373,4.025 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,wide_exponent,4096,10322096095657499357,229.647449,215.594292,215.067820,190.000000,25.067820,yes,Both,yes,"[3.0148718470081313e-08,8.3679503521064993e-25,-4.6451455749144106e-41,2.5785737850028193e-57]",3.0148720000000000000000000000000000000000000000000000000000000000546265902778824e-08,3.014872e-08 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,boundary,4112,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lround,boundary,4112,10322096095657499382,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,boundary,4116,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::llround,boundary,4116,10322096095657499382,inf,inf,inf,,,,-,-,"+0 [0,0,0,0]",0,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,qdpp,qdreal,qdpp qd_real,qdpp divrem,moderate,4099,10322096095657499356,inf,inf,inf,,,,NaN,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.9441489568856320775444278782693359481373129192327295522031179412033520654073927 ; 1,-0.9441489568856320775444278782693359481373129192327295522031179412033520654073927 ; 1 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,tlfloat,tloct,TLFloat Octuple,tlfloat::remquo,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [-8,0,0,0]",0 ; -8,-0 ; -8 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555614565460569251528e-246 ; 0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,qdpp,qdreal,qdpp qd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14,1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,tlfloat,tloct,TLFloat Octuple,tlfloat::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,qdpp,qdreal,qdpp qd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14,1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,qdpp,qdreal,qdpp qd_real,qdpp ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,no,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14,1.0299919501102997860132154033287905099419529895218902309406948079403333831094552e-14 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815,0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738111930089468594567 ; -815,0.72479240042364947229615036515952308640740981938027711987583738111930089468594567 ; -815 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815,0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,,,,No,no,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,,,,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,near_one,4099,10322096095657499359,217.932663,211.994703,210.121730,190.000000,20.121730,yes,Both,yes,"[0.68844842180625743,1.9108282228903967e-17,1.0607227445782445e-33,5.88819406887178e-50]",0.82972792034874748204635533162847142244462757631213868214367401578005505462467425,0.82972792034874748204635533162847142244462757631213868214367401531661654544094597 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,near_one,4099,10322096095657499359,217.589527,213.954821,212.634327,,,,NaN,no,"[0.92271144976513408,2.5610387415362759e-17,1.4216620889053044e-33,7.8918099216968261e-50]",0.96057870565879926219334849623588972708054926243562340391213612034854002041473267,0.96057870565879926219334849623588972708054926243562340391213612025451957730893959 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,near_one,4099,10322096095657499359,215.930506,214.147252,214.039856,,,,Both,yes,"[1.0547078163563617,2.927402254927385e-17,1.6250346928799925e-33,9.020754659250188e-50]",1.0269896865871447065036301993509151661723964081071594655630640292574526428023742,1.0269896865871447065036301993509151661723964081071594655630640292195081210834103 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,near_one,4099,10322096095657499359,238.936641,237.129126,237.015136,,,,No,no,"[1.004250926374979,2.7873562524066115e-17,1.5472935446273548e-33,8.5892045954958072e-50]",1.0021232091788808899186300306859360530174763231010496743360102827344110032442819,1.0021232091788808899186300306859360530174763231010496743360102827344110077343784 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,wide_exponent,4096,10322096095657499357,217.922910,211.307570,210.087010,190.000000,20.087010,yes,Both,yes,"[3.9723050169707548e-164,1.1025361226687388e-180,6.120304944338899e-197,3.3974517334661164e-213]",1.9930642280094123730625261552128791429300322769194722961440719680011680513374133e-82,1.9930642280094123730625261552128791429300322769194722961440719668608407694664803e-82 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,wide_exponent,4096,10322096095657499357,216.863728,186.950448,174.763835,,,,NaN,no,"[8.1014827670798251e+270,2.2486131754039865e+254,1.2482310604044958e+238,6.9290743165667288e+221]",2.8463103778540781766373144723494913048207803575850039003471672847143362615202286e+135,2.846310377854078176637314472349491304820780357585003970351614769472664981471086e+135 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,wide_exponent,4096,10322096095657499357,215.957082,214.207986,214.030797,,,,Both,yes,"[1.2961858591599819e-147,3.5976384625823808e-164,1.9970905277180044e-180,1.1086079430666665e-196]",3.6002581284679880325511139217386037773904401119124396309706748839432497852866192e-74,3.6002581284679880325511139217386037773904401119124396309706748840771075796334657e-74 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,wide_exponent,4096,10322096095657499357,238.979636,237.193860,237.059682,,,,No,no,"[1.3021434303237256e+30,36141740442744.586,0.0020062696194780619,1.1137033625752479e-19]",1141114994347075.2829460391518194856039517836022377655235840679242233012131762761,1141114994347075.2829460391518194856039517836022377655235840679242233012082188731 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,extreme_finite,4096,10322096095657499354,217.427345,211.612729,209.568118,190.000000,19.568118,yes,Both,yes,"[4.8277532298172217e+270,1.3399706982378861e+254,7.4383316075337441e+237,4.1291035077405081e+221]",2.1972148802102223696810058497941079031647215249309110296216736160980628789995527e+135,2.1972148802102223696810058497941079031647215249309110296216736142967757213404226e+135 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,extreme_finite,4096,10322096095657499354,163.993368,54.592035,53.599911,,,,NaN,no,"[2.1763916177226809e+307,6.0407002114922805e+290,3.3532622298283912e+274,1.8614344675806867e+258]",4.6651812587751413465079049826861912199302720105752317948976263085835518779964629e+153,4.6651812587751410047744754248043022846154236189465970833612617831419496642565065e+153 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,extreme_finite,4096,10322096095657499354,216.198711,214.402185,214.043797,,,,Both,yes,"[1.1667387299631971e+307,3.2383505043176361e+290,1.7976456458499635e+274,9.9789379306989474e+257]",3.4157557435554392146975726809832843561134137037327812181683553223146977070959883e+153,3.4157557435554392146975726809832843561134137037327812181683553224405565128983162e+153 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,extreme_finite,4096,10322096095657499354,238.983582,237.375285,237.014769,,,,No,no,"[1.1341420973881531e+307,3.1478766742924855e+290,1.747422581239991e+274,9.7001439172128056e+257]",3.3677026255121652856496237964988544939728879131737426810293064315009323411409691e+153,3.3677026255121652856496237964988544939728879131737426810293064315009323562340825e+153 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,subnormal,4100,10322096095657499350,218.287365,211.525055,210.033468,190.000000,20.033468,yes,Both,yes,"[3.9080211162696703e-308,0,0,0]",1.976871547741448539026969223351905164877787940969937902883633378772329452173061e-154,1.976871547741448539026969223351905164877787940969937902883633377598501465266526e-154 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,subnormal,4100,10322096095657499350,10.774067,0.000000,0.000000,,,,NaN,no,"denorm_min [4.9406564584124654e-324,0,0,0]",nan,2.2227587494850774834427134142705600969125245614649077934835905829686756089538688e-162 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,subnormal,4100,10322096095657499350,216.756880,214.195374,214.037615,,,,Both,yes,"[3.3572221104094627e-316,0,0,0]",1.8322723897961958515939232356286101602275881371639992177545942680678684257340433e-158,1.8322723897961958515939232356286101602275881371639992177545942681356712397974308e-158 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,subnormal,4100,10322096095657499350,239.723907,237.212513,237.016370,,,,No,no,"[2.1697712842811401e-314,0,0,0]",1.4730143530465479195773385224994263560361476001941627900776246892038592559065829e-157,1.4730143530465479195773385224994263560361476001941627900776246892038592625009045e-157 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,moderate,4099,10322096095657499356,219.370899,215.646612,214.867489,190.000000,24.867489,yes,Both,yes,"[-1.2848792715143134,-3.5662563777469718e-17,1.9796699711454989e-33,-1.0989375915623761e-49]",-1.0871449203062734502700851412094476938994915993466528215032956944502419014728132,-1.0871449203062734502700851412094476938994915993466528215032956944728741702814207 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,qdpp,qdreal,qdpp qd_real,qdpp nroot,moderate,4099,10322096095657499356,217.449072,213.933191,213.007518,,,,NaN,no,"[4.9307698076638697,1.3685635423987457e-16,-7.5970537771682706e-33,4.2172120113638637e-49]",1.702047108046510717162243828279782709421211900354532191946871259424910030546838,1.7020471080465107171622438282797827094212119003545321919468712595535332836322498 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,moderate,4099,10322096095657499356,216.130545,214.270505,214.058038,,,,Both,yes,"[1.08235892126355,3.0041494882381005e-17,-1.66763796562891e-33,9.2572503309013566e-50]",1.026732006042320468680651010947841052348239066716007904979973209646575880838089,1.0267320060423204686806510109478410523482390667160079049799732096840357908630305 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,moderate,4099,10322096095657499356,239.151308,237.292046,237.089188,,,,No,no,"[-1.1692570952148476,-3.2453403720346318e-17,1.8015258018892098e-33,-1.0000477123568495e-49]",-1.0535051702378269574281216560731222434668908310525842708385576971662323213714434,-1.0535051702378269574281216560731222434668908310525842708385576971662323258555871 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,wide_exponent,4096,10322096095657499357,219.204146,215.522484,214.994538,190.000000,24.994538,yes,Both,yes,"[-7.6088562828244072e-186,-2.1118818590638597e-202,1.1723299326104384e-218,-6.5077384182068346e-235]",-1.9668585456638661019202110587595283938653583370130934674169942595500144363610602e-62,-1.9668585456638661019202110587595283938653583370130934674169942595125198730852026e-62 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,qdpp,qdreal,qdpp qd_real,qdpp nroot,wide_exponent,4096,10322096095657499357,217.016581,193.082937,175.955036,,,,NaN,no,"[4.1224543035610892e+270,1.1442109214446464e+254,-6.3516465500770637e+237,3.5258721220882492e+221]",1.6034371816028772328365310906199661077000502443653116982541080279089017265381339e+90,1.6034371816028772328365310906199661077000502443653116809834811603775103881162661e+90 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,wide_exponent,4096,10322096095657499357,215.921141,214.197213,214.065070,,,,Both,yes,"[-0.12830329361016818,-3.5611317675312609e-18,1.9768252410186431e-34,-1.097358449119536e-50]",-0.50436615390268535404089632551005127105110727672530970119929369006913042688642626,-0.50436615390268535404089632551005127105110727672530970119929369005081829876718497 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,wide_exponent,4096,10322096095657499357,238.945658,237.214089,237.018110,,,,No,no,"[-4.3275027175810356e+124,-1.2011232890466005e+108,6.6675736545651648e+91,-3.701246894841173e+75]",-351085141467799062026079474481743690346530.23735342928603100241725240364618103901,-351085141467799062026079474481743690346530.23735342928603100241725240364775086642 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,moderate,4099,10322096095657499356,219.112713,215.484839,215.004532,190.000000,25.004532,yes,Both,yes,"[-1.9786093179304824,-5.4917440537607455e-17,3.0485303469167366e-33,-1.6922742912077385e-49] ; [-3.6930721609963868,-1.0250334361850929e-16,5.6900786093166561e-33,-3.1586281419952212e-49]",4.1897108276500243736137575509880054584975437763794929781439711577595180004814865,4.1897108276500243736137575509880054584975437763794929781439711578388357929538313 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,moderate,4099,10322096095657499356,215.332826,213.212997,212.858237,,,,Both,no,"[-4.1181898278466704,-1.1430272916631208e-16,6.3450760848966547e-33,-3.5222247812253553e-49] ; [-0.29183739289082489,-8.1001148258492941e-18,4.4964669908827382e-34,-2.4960405913725049e-50]",4.1285174726612340729075027344867939797791962652739738709468541901339059552816537,4.1285174726612340729075027344867939797791962652739738709468541904799090853606315 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,moderate,4099,10322096095657499356,238.968375,237.145904,237.032531,,,,No,yes,"[4.0719252522259577,1.130186292393464e-16,-6.273794219654816e-33,3.4826553972104968e-49] ; [6.9165665963393774,1.9197328716523069e-16,-1.0656658176190808e-32,5.9156336363834818e-49]",8.0261739790084984863179315713520228190931521667884108836594047322786481436734721,8.0261739790084984863179315713520228190931521667884108836594047322786481081425252 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,wide_exponent,4096,10322096095657499357,240.756673,216.570761,213.870154,190.000000,23.870154,yes,Both,yes,"[1.7122842369183985e-262,4.7525434613238062e-279,-2.6381915881467134e-295,1.4644905222663036e-311] ; [-3.0144374372983699e-265,-8.3667446229517548e-282,4.6444762607798811e-298,-2.578202241195858e-314]",1.712286890340601098411983682624579480459337744664421226746119949951155747074881e-262,1.7122868903406010984119836826245794804593377446644212267461199567085975614133203e-262 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,wide_exponent,4096,10322096095657499357,242.048348,213.564620,212.901798,,,,Both,no,"[2.0746421074685233e-152,5.7582885889210324e-169,-3.1964922869282166e-185,1.7744096674922142e-201] ; [-7.279699168678378e-177,-2.0205224073528366e-193,1.1216152492070844e-209,-6.22621537220194e-226]",2.0746421074685233100584491712753701754641505878649616115468392385981506866084677e-152,2.0746421074685233100584491712753701754641505878649616115468392387668510326020281e-152 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,wide_exponent,4096,10322096095657499357,264.779602,237.619098,237.123492,,,,No,yes,"[-5.8206807436614042e+100,-1.6155634451512924e+84,8.9681786727485303e+67,-4.9783392257188476e+51] ; [-1.1764315868807219e+127,-3.2652535866282193e+110,1.8125798565572611e+94,-1.0061839453608174e+78]",1.1764315868807219672309501172354356665435885041612716474525928710031014683926205e+127,1.1764315868807219672309501172354356665435885041612716474525928710031014635029139e+127 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,moderate,4099,10322096095657499356,219.189484,215.451091,214.398633,180.000000,34.398633,yes,Both,yes,"[3.0788955469009238,8.5456518164631729e-17,-4.7437897035336035e-33,2.6333322764213759e-49]",0.062656038467969832209321794216397982020542964949257118477705660287113605590702679,0.062656038467969832209321794216397982020542964949257118477705660288918880291683339 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,qdpp,qdreal,qdpp qd_real,qdpp sin,moderate,4099,10322096095657499356,215.822232,210.420642,206.091602,,,,Both,no,"[6.2844284435634243,1.7442792886633375e-16,-9.6826951382541352e-33,5.3749755414579021e-49]",0.0012431360636500376406651182820591794712990979962505727492757516488097839454018745,0.0012431360636500376406651182820591794712990979962505727492757516374658267718386587 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,moderate,4099,10322096095657499356,216.111863,214.253516,214.033060,,,,Both,yes,"[-3.3942824750153715,-9.4210263896093202e-17,5.229720206672739e-33,-2.9030778928977535e-49]",0.25000926250273050053822356824913638945347894252925707129808557785874427075500306,0.25000926250273050053822356824913638945347894252925707129808557784946347821100132 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,moderate,4099,10322096095657499356,239.122689,237.223688,237.023215,,,,No,no,"[-0.2542586325750964,-7.057094702364497e-18,3.9174745127626403e-34,-2.17463520122565e-50]",-0.25152794533412479121432085191262991371979722577009702759735904083121861113384005,-0.25152794533412479121432085191262991371979722577009702759735904083121861001314106 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,argument_reduction,4104,10322096095657499353,217.652696,208.567012,202.924770,180.000000,22.924770,yes,Both,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275296757802517104071329784271370594664228509e-21,-6.8137244848422015805151924052161601275296757802517104071329778687414703031432792e-21 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,qdpp,qdreal,qdpp qd_real,qdpp sin,argument_reduction,4104,10322096095657499353,88.230225,40.279439,0.000000,,,,Both,no,"near 2^1 * pi/2 [-3.1415926535897931,-1.2249332901226919e-16,2.9947698097183397e-33,-1.1124542208633653e-49]",nan,2.8649097533874029339333136826679753341136299243487502272333149857764811341394381e-20 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,argument_reduction,4104,10322096095657499353,216.255236,214.163948,214.023450,,,,Both,yes,"near 2^38 * pi/2 [-431777206544.70459,-1.6831417444764681e-05,4.1159802853722918e-22,-1.526636448658668e-38]",2.3089903510325325006386196751055921516200574630826998306833157055830958404977762e-41,2.308990351032532500638619675105592151620057463082699830683315705496809151689719e-41 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,argument_reduction,4104,10322096095657499353,239.104262,237.214941,237.045994,,,,No,no,"near 2^17 * pi/2 [205887.41614566068,8.0276309101467462e-12,-1.9626523424970111e-28,7.2905799818501507e-45]",1.7856472546522194647219768390344687583313151766319381994892472778246360738909141e-15,1.7856472546522194647219768390344687583313151766319381994892472778246360817223464e-15 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,quadrant_boundaries,4315,10322096095657499369,229.646501,212.548934,212.379963,180.000000,32.379963,yes,Both,yes,"below random k*pi/2, exponent 29, quadrant 0, offset bits 64 [1210367998.9931121,9.2232933347751439e-08,-3.3682212462958211e-24,-1.2421712039970458e-40]",-6.5614180700763253419843351526898064698409162314387092951719910697284566769595525e-11,-6.5614180700763253419843351526898064698409162314387092951719910704945087391437157e-11 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,qdpp,qdreal,qdpp qd_real,qdpp sin,quadrant_boundaries,4315,10322096095657499369,125.341761,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,2.3958158477746717e-32,-8.8996337669069223e-49]",0,4.5377855837122526092708693051625351219021961543624546765551091357096606382618939e-65 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,quadrant_boundaries,4315,10322096095657499369,222.867917,214.285019,214.046460,,,,Both,yes,"nearest random k*pi/2, exponent 110, quadrant 0, offset bits 64 [2.3958472744262744e+33,-1.1362463713298696e+17,-1.0799874208711815,-1.4055471566517733e-17]",1.2444660859606272253391060495552887818726965386080203390531029581974118261588645e-32,1.2444660859606272253391060495552887818726965386080203390531029582431815281246263e-32 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,quadrant_boundaries,4315,10322096095657499369,245.109723,237.306997,237.025592,,,,No,no,"above random k*pi/2, exponent 45, quadrant 0, offset bits 64 [71008329207360.312,0.00018419250007644126,9.9975864273387123e-21,-5.0484480854277783e-37]",3.849369239549790973603895914004220428153380218149354682948043798834805017807928e-06,3.8493692395497909736038959140042204281533802181493546829480437988348050006850545e-06 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,moderate,4099,10322096095657499356,219.189230,215.566675,214.659688,180.000000,34.659688,yes,Both,-,"[-4.7784826804074854,-1.3262953736402309e-16,7.3624183063460464e-33,-4.086963160313565e-49]",0.066045590163581850028962366060015702301220111028377965182485758811610101682177111,0.066045590163581850028962366060015702301220111028377965182485758813198059701212943 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,qdpp,qdreal,qdpp qd_real,qdpp cos,moderate,4099,10322096095657499356,215.686188,210.052851,204.977148,,,,Both,-,"[-7.8532640731814176,-2.1797186481268875e-16,1.2099869151776452e-32,-6.7167766636269399e-49]",0.00071756073148736779053384844772211427066765802073545435213970629886211777832677292,0.00071756073148736779053384844772211427066765802073545435213970631303926297890189555 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,moderate,4099,10322096095657499356,216.120883,214.240603,214.013567,,,,Both,-,"[4.1844906090946523,1.1614294551361571e-16,-6.4472286128500595e-33,3.5789308255041227e-49]",-0.50371892599878982246573291031148002251894889016964463243380922417755824218756977,-0.50371892599878982246573291031148002251894889016964463243380922419651155550858383 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,moderate,4099,10322096095657499356,239.067815,237.245286,237.010092,,,,No,-,"[5.2397671900876901,1.4543275445277032e-16,-8.0731396264061184e-33,4.4814927471249036e-49]",0.50326950712812592968794481966604337941872165780963347935211430198430026256742876,0.50326950712812592968794481966604337941872165780963347935211430198430026030458995 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,argument_reduction,4104,10322096095657499353,232.574321,215.615638,208.674366,180.000000,28.674366,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1226611923604276e-17,1.4973849048591698e-33,-5.5622711043168264e-50]",5.7280337633839673822029261537694370705065754439038807480055172644370212115109926e-21,5.7280337633839673822029261537694370705065754439038807480055172731619522921872359e-21 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,qdpp,qdreal,qdpp qd_real,qdpp cos,argument_reduction,4104,10322096095657499353,171.117172,59.081747,0.000000,,,,Both,-,"near 2^1 * pi/2 [-3.1415926535897931,-1.2249332901226919e-16,2.9947698097183397e-33,-1.1124542208633653e-49]",nan,-0.99999999999999999999999999999999999999958961460524728650516585944623061007015234 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,argument_reduction,4104,10322096095657499353,220.717219,214.493171,214.041954,,,,Both,-,"near 2^141 * pi/2 [-4.3787410803301036e+42,-1.7069085141238271e+26,4174300709.8400016,-1.5505348827814887e-07]",-0.50223149274818510667692305468001365951868474886708229103242086146123920208083042,-0.50223149274818510667692305468001365951868474886708229103242086147976835272541265 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,argument_reduction,4104,10322096095657499353,242.372537,237.522147,237.089415,,,,No,-,"near 2^101 * pi/2 [-3.9824418129956972e+30,-155367227019273.69,0.0037963217468348336,-1.4102032608038723e-19]",-0.12796355163596045244521468824295994843174882941415195039635122541573286692737788,-0.12796355163596045244521468824295994843174882941415195039635122541573286747195671 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,quadrant_boundaries,4315,10322096095657499369,228.481158,215.246584,214.418649,180.000000,34.418649,yes,Both,-,"below random k*pi/2, exponent 17, quadrant 1, offset bits 118 [331709.77271825873,-2.2171970577571149e-11,3.7150708281135636e-28,2.3902355434839523e-45]",9.9820278769371660928200388523257556042420348105086346022094664206029498329582703e-31,9.9820278769371660928200388523257556042420348105086346022094664208865938945946123e-31 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,qdpp,qdreal,qdpp qd_real,qdpp cos,quadrant_boundaries,4315,10322096095657499369,102.159146,0.000000,0.000000,,,,Both,-,"nearest -15 * pi/2 [-23.56194490192345,8.5787174003973557e-16,1.0134821928809237e-32,-1.5011289986392192e-49]",4.7477838728798993737366211347809785771104829168099724831398899954145041153224056e-65,4.9360988814966255254518116119110190032717402209517122386947518068669726695188e-66 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,quadrant_boundaries,4315,10322096095657499369,221.152248,214.294337,214.025139,,,,Both,-,"below random k*pi/2, exponent 73, quadrant 3, offset bits 204 [-1.9192238427797983e+22,1133685.8239386391,1.0538603815339718e-10,6.0690196840656462e-27]",7.4725966267385822752552347677857979100547939987353655458257277978202160866649243e-40,7.4725966267385822752552347677857979100547939987353655458257277980991393478431325e-40 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,quadrant_boundaries,4315,10322096095657499369,243.433538,237.253610,237.015566,,,,No,-,"above random k*pi/2, exponent 100, quadrant 1, offset bits 118 [-2.554242725948489e+30,264652064691155.38,0.0027003722178381893,4.2925035746281268e-20]",7.686394611076617817566687569806359335255530534267980437190604478331327415039497e-06,7.6863946110766178175666875698063593352555305342679804371906044783313273806102253e-06 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,moderate,4099,10322096095657499356,216.913680,214.380555,213.767876,170.000000,43.767876,yes,Both,yes,"[-1.8439090508145544,-5.11787570882259e-17,2.8409917245523164e-33,-1.5770672126837562e-49]",3.5699982842328020406977403126653024345054964874710955004250341281438081184333917,3.5699982842328020406977403126653024345054964874710955004250341283030748914299905 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,qdpp,qdreal,qdpp qd_real,qdpp tan,moderate,4099,10322096095657499356,214.805664,209.359111,204.976458,,,,Both,no,"[-7.8532640731814176,-2.1797186481268875e-16,1.2099869151776452e-32,-6.7167766636269399e-49]",-1393.6099046006247994846045908683346807355130478214578999987000937844082099410509,-1393.6099046006247994846045908683346807355130478214578999987000662371041150253087 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,moderate,4099,10322096095657499356,215.950557,214.173890,214.033824,,,,Both,yes,"[-5.8190346919196703,-1.6151065740154431e-16,8.9656425284769973e-33,-4.9769313828368341e-49]",0.50062891605128433684619177292383033963900736585257698545687677483023119814763453,0.50062891605128433684619177292383033963900736585257698545687677484880560527251444 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,moderate,4099,10322096095657499356,238.986350,237.180286,237.008972,,,,No,no,"[7.7918605780474639,2.162675754604344e-16,-1.2005262087801638e-32,6.6642591932684281e-49]",16.076889102680307739918047039830552345360218572643739213205451093129248731177196,16.076889102680307739918047039830552345360218572643739213205451093129248658834938 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,argument_reduction,4104,10322096095657499353,216.861788,208.567009,202.924770,170.000000,32.924770,yes,Both,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275298339501045587830768442951450110146372361e-21,-6.8137244848422015805151924052161601275298339501045587830768437367494218513576644e-21 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,qdpp,qdreal,qdpp qd_real,qdpp tan,argument_reduction,4104,10322096095657499353,86.791809,40.279439,0.000000,,,,Both,no,"near 2^1 * pi/2 [-3.1415926535897931,-1.2249332901226919e-16,2.9947698097183397e-33,-1.1124542208633653e-49]",nan,-2.8649097533874029339333136826679753341148056414688250156538506124880451124939137e-20 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,argument_reduction,4104,10322096095657499353,216.069442,214.143677,214.023450,,,,Both,yes,"near 2^38 * pi/2 [-431777206544.70459,-1.6831417444764681e-05,4.1159802853722918e-22,-1.526636448658668e-38]",2.3089903510325325006386196751055921516200574630826998306833157055830958404977762e-41,2.308990351032532500638619675105592151620057463082699830683315705496809151689719e-41 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,argument_reduction,4104,10322096095657499353,238.931540,237.203609,237.030406,,,,No,no,"near 2^102 * pi/2 [-7.9648836259913944e+30,-310484850001344.44,0.0075916732929860228,-2.8204065216077446e-19]",-9.7020068364479704729019010913725962546149990050125552215463152474642265648020523e-07,-9.7020068364479704729019010913725962546149990050125552215463152474642265217890728e-07 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,quadrant_boundaries,4315,10322096095657499369,217.360401,212.539526,212.267358,170.000000,42.267358,yes,Both,yes,"above random k*pi/2, exponent 45, quadrant 0, offset bits 64 [74082575456598.641,0.0077401429536521011,-4.4453663865375208e-20,-1.4406648841189425e-36]",4.0160244626898690108548055606217396545568030741292099390402822024483364340948252e-06,4.0160244626898690108548055606217396545568030741292099390402822019413987321784571e-06 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,qdpp,qdreal,qdpp qd_real,qdpp tan,quadrant_boundaries,4315,10322096095657499369,36.893810,0.000000,0.000000,,,,Both,no,"nearest -16 * pi/2 [-25.132741228718345,-9.7971743931788257e-16,2.3958158477746717e-32,-8.8996337669069223e-49]",0,4.5377855837122526092708693051625351219021961543624546765551091357096606382618939e-65 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,quadrant_boundaries,4315,10322096095657499369,215.920916,214.200339,214.006668,,,,Both,yes,"above random k*pi/2, exponent 144, quadrant 2, offset bits 172 [-4.4696686901385167e+43,2.0188248772911221e+27,-52555629829.22261,1.2831941213003397e-06]",7.4664829630051754541202666277260882282154324742969316489227519401151418469649252e-09,7.4664829630051754541202666277260882282154324742969316489227519398328556104206349e-09 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,quadrant_boundaries,4315,10322096095657499369,238.947188,237.196450,237.053707,,,,No,no,"below random k*pi/2, exponent 102, quadrant 3, offset bits 204 [9.9343530058996466e+30,87688409581458.625,0.0032087146332879252,1.4984467354529784e-19]",2588058620050218384135716160595.2714079053792228534200347072058457423853626569361,2588058620050218384135716160595.2714079053792228534200347072058457423853739470342 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,near_one,4099,10322096095657499359,218.093670,215.379730,214.678988,180.000000,34.678988,yes,Both,yes,"[1.2911786355365591,3.5837406251919532e-17,-1.9893756781863299e-33,1.1043253412758746e-49]",0.91180735486029865720200031963596732813600677958830230748545472972914611914911937,0.91180735486029865720200031963596732813600677958830230748545472975077769821487466 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,qdpp,qdreal,qdpp qd_real,qdpp atan,near_one,4099,10322096095657499359,215.910006,213.068799,212.444445,,,,NaN,no,"[0.55588756341428947,1.5428979300133024e-17,-8.5648040327363084e-34,4.7544213192731213e-50]",0.50735217275163531758761222414286179663047784248280668428448483712789395698768449,0.50735217275163531758761222414286179663047784248280668428448483718453865357351711 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,near_one,4099,10322096095657499359,216.034093,214.196468,214.022743,,,,Both,yes,"[0.54921480960087321,1.5243773177100273e-17,-8.4619939816900486e-34,4.6973502763558986e-50]",0.50224017774039295847895566589446898154246751335846360124013365955899684908805543,0.50224017774039295847895566589446898154246751335846360124013365954021899193610862 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,near_one,4099,10322096095657499359,239.069181,237.249601,237.023004,,,,Inf,no,"[0.55638113561490443,1.5442678680668965e-17,-8.5724087165833602e-34,4.7586427668241172e-50]",0.50772915105953358733326116359313553998641358497921735346375362562181669630230885,0.50772915105953358733326116359313553998641358497921735346375362562181669403975783 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,moderate,4099,10322096095657499356,218.191260,215.364973,214.819019,180.000000,34.819019,yes,Both,yes,"[-1.6564773418506284,-4.5976482117311103e-17,2.5522074518952777e-33,-1.4167597383570195e-49]",-1.0276674796068157926881872460477795215568000040373694878361657581086397348641996,-1.0276674796068157926881872460477795215568000040373694878361657581307647820337298 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,qdpp,qdreal,qdpp qd_real,qdpp atan,moderate,4099,10322096095657499356,217.490429,213.839909,212.640547,,,,NaN,no,"[-0.14215205099130479,-3.9455120002058972e-18,2.1901991332817212e-34,-1.2158047531417144e-50]",-0.14120599646931357536554312007949499478728116324929113684654037846650539302747977,-0.14120599646931357536554312007949499478728116324929113684654037848026703215980269 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,moderate,4099,10322096095657499356,215.887438,214.230925,214.039595,,,,Both,yes,"[0.55778275215845952,1.5481581354627725e-17,-8.5940040387576104e-34,4.7706305787751426e-50]",0.50879880948542119345425761615829870587435545150631385296139718830959300455778602,0.50879880948542119345425761615829870587435545150631385296139718832839516313373038 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,moderate,4099,10322096095657499356,238.894314,237.221991,237.005716,,,,Inf,no,"[1.5597260113585101,4.3291093247924408e-17,-2.4031384242520164e-33,1.3340098049830031e-49]",1.0006760568417267039616046413236068242743619066341858284652430030107293262785856,1.0006760568417267039616046413236068242743619066341858284652430030107293307915712 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,near_one,4099,10322096095657499359,217.767500,215.258136,214.277602,180.000000,34.277602,yes,Both,yes,"[0.58860603672544787,1.6337099360148818e-17,-9.0689119326130649e-34,5.0342574179424254e-50] ; [0.85887750789320882,2.3838639614892877e-17,-1.3233103288097723e-33,7.3458479788444792e-50]",0.60080560244689944505254047976488516114993445003563706360562245792394141734857901,0.60080560244689944505254047976488516114993445003563706360562245794276700036835792 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,qdpp,qdreal,qdpp qd_real,qdpp atan2,near_one,4099,10322096095657499359,215.963929,212.995678,211.809679,,,,NaN,no,"[1.1174479589589783,3.1015411321416117e-17,-1.7217011883627962e-33,9.55736150422435e-50] ; [1.3143457009666371,3.6480421488256283e-17,-2.0250701942146223e-33,1.1241397780496056e-49]",0.70460629627893242601473568553458627124468553386584437351835905477710968633262149,0.7046062962789324260147356855345862712446855338658443735183590548992558624971532 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,near_one,4099,10322096095657499359,215.994476,214.132014,214.011485,,,,Both,yes,"[0.88505385327289043,2.4565179148419448e-17,-1.3636413747308533e-33,7.5697302577884725e-50] ; [0.5621158127315895,1.5601847945012334e-17,-8.6607654076266884e-34,4.8076905832121144e-50]",1.0049524547607640479472056483133780888177778504413203924398100730281741617591277,1.0049524547607640479472056483133780888177778504413203924398100730660418713400554 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,near_one,4099,10322096095657499359,239.055181,237.179498,237.044590,,,,Inf,no,"[1.2012076032854226,3.3340208463056926e-17,-1.8507533540744151e-33,1.0273744932978252e-49] ; [0.76012008050901414,2.1097570371525879e-17,-1.1711504195058775e-33,6.5011908051741811e-50]",1.0066101070031341858676864823590644902717426393400127313649714321821731001027106,1.0066101070031341858676864823590644902717426393400127313649714321821731045217664 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,moderate,4099,10322096095657499356,218.042610,215.273196,214.779064,180.000000,34.779064,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50] ; [1.7502476823940025,4.8579131894765996e-17,-2.6966835372935758e-33,1.4969600766154699e-49]",0.072148061051439749393843263001597933397921930324099767924159658763635157216424841,0.072148061051439749393843263001597933397921930324099767924159658765232080678489465 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,qdpp,qdreal,qdpp qd_real,qdpp atan2,moderate,4099,10322096095657499356,217.025020,213.404716,212.468937,,,,NaN,no,"[6.7618103531033285,1.8767793855410188e-16,-1.0418218429847463e-32,5.7832729881953999e-49] ; [7.0897074644814957,1.9677891162310489e-16,-1.0923423922232494e-32,6.0637183731018753e-49]",0.76173029626598310551501424329948959389659190646440275476402648474030549713666102,0.76173029626598310551501424329948959389659190646440275476402648482391929514145413 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,moderate,4099,10322096095657499356,215.885980,214.176678,214.024743,,,,Both,yes,"[-6.1873351720195728,-1.7173304922622958e-16,9.5330992670022754e-33,-5.2919331511315645e-49] ; [-2.9810460413895985,-8.2740648815460241e-17,4.5930286693674072e-33,-2.5496430907475705e-49]",-2.0197766333272617088389945956184684603975351443001694011101920891561200649612965,-2.0197766333272617088389945956184684603975351443001694011101920892315312586125163 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,moderate,4099,10322096095657499356,238.917136,237.174621,237.005636,,,,Inf,no,"[0.76646160167214816,2.1273582941687357e-17,-1.1809210799067136e-33,6.5554288658881889e-50] ; [6.0904320632745925,1.6904344766406877e-16,-9.3837963879333393e-33,5.2090534041389854e-49]",0.12518871466835654554530119732890413946159769433425644201628387442095021006944253,0.12518871466835654554530119732890413946159769433425644201628387442095020950481812 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,extreme_finite,8,10322096095657499351,224.796125,218.394834,218.394834,180.000000,38.394834,yes,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961510720871532843,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,qdpp,qdreal,qdpp qd_real,qdpp atan2,extreme_finite,8,10322096095657499351,0.000000,0.000000,0.000000,,,,NaN,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",nan,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,extreme_finite,8,10322096095657499351,215.343090,215.217830,215.217830,,,,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961795587903905637,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,extreme_finite,8,10322096095657499351,240.641147,237.801100,237.801100,,,,Inf,no,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961539081990612658,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,moderate,4099,10322096095657499356,217.555374,214.870821,214.404436,180.000000,34.404436,yes,Both,yes,"[-0.03874370615484779,-1.0753538658105852e-18,5.9694131072129129e-35,-3.313689937563487e-51]",-0.038753405574689053897038748698475312191059300104201567727902220547827930480850877,-0.038753405574689053897038748698475312191059300104201567727902220546715831868900725 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,qdpp,qdreal,qdpp qd_real,qdpp asin,moderate,4099,10322096095657499356,216.027599,212.882268,212.306181,,,,Both,no,"[0.64009750269274901,1.7766274637363827e-17,-9.8622635821076372e-34,5.4746560518890359e-50]",0.69462516701961480722974231918740821973366171540487976328936493811989540428405727,0.69462516701961480722974231918740821973366171540487976328936493820524897961929294 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,moderate,4099,10322096095657499356,215.935045,214.166642,214.033964,,,,Both,yes,"[0.84375728252726911,2.3418969056423187e-17,-1.3000139329712549e-33,7.2165270035909608e-50]",1.0042455644826932465957119672506687191893308602737032036527706880936208304894104,1.004245564482693246595711967250668719189330860273703203652770688056364795135486 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,moderate,4099,10322096095657499356,238.937265,237.164907,237.026679,,,,No,no,"[0.47970695404606045,1.3314542636368455e-17,-7.3910558986247961e-34,4.1028602174724127e-50]",0.50032069928561683298565717027151869152759847529322634267318689099093861195294037,0.50032069928561683298565717027151869152759847529322634267318689099093861417680444 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,boundary,4105,10322096095657499355,218.279597,215.666103,215.450088,180.000000,35.450088,yes,Both,yes,"[-0.9999994386132145,-2.7755560034015539e-17,1.5407430905564922e-33,-8.5528422708397013e-50]",-1.5697367166420567598613352554733454843585688705175173404668956843884396097624371,-1.5697367166420567598613352554733454843585688705175173404668956844102612619924983 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,qdpp,qdreal,qdpp qd_real,qdpp asin,boundary,4105,10322096095657499355,218.277775,215.666103,215.450088,,,,Both,no,"[-0.9999994386132145,-2.7755560034015539e-17,1.5407430905564922e-33,-8.5528422708397013e-50]",-1.5697367166420567598613352554733454843585688705175173404668956843884396097624371,-1.5697367166420567598613352554733454843585688705175173404668956844102612619924983 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,boundary,4105,10322096095657499355,216.099672,214.664889,214.650939,,,,Both,yes,"[-0.99999947688320301,-2.7755561096221099e-17,1.5407431495207457e-33,-8.5528425981570605e-50]",-1.5697734711427425137462071034426176291214099285341417990546489811401920566969057,-1.5697734711427425137462071034426176291214099285341417990546489811022198556486962 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,boundary,4105,10322096095657499355,239.101674,237.664178,237.650522,,,,No,no,"[-0.9999993776284537,-2.7755558341348399e-17,1.5407429965945906e-33,-8.5528417492463684e-50]",-1.5696806461857352124904427955206761227928221161521898973451622133707907230815616,-1.5696806461857352124904427955206761227928221161521898973451622133707907276092422 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,moderate,4099,10322096095657499356,217.952479,214.769937,210.665918,180.000000,30.665918,yes,Both,-,"[0.99887415790514178,2.7724327220233818e-17,-1.5390093211072774e-33,8.5432179170301514e-50]",0.04745636757503406782865420252660601887412863134878995249846597602032373476016398,0.047456367575034067828654202526606018874128631348789952498465976002146233476892292 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,qdpp,qdreal,qdpp qd_real,qdpp acos,moderate,4099,10322096095657499356,217.264023,213.570151,212.546937,,,,Both,-,"[0.89299145762104437,2.4785491926111579e-17,-1.3758711906514997e-33,7.6376193738986172e-50]",0.46684777086844833965955081731885474094574942061107130280412927846357664071765522,0.4668477708684483396595508173188547409457494206110713028041292785121246988832701 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,moderate,4099,10322096095657499356,215.926972,214.168270,214.013336,,,,Both,-,"[0.53747900055361064,1.4918039041678395e-17,-8.2811752131641796e-34,4.5969756963050055e-50]",1.0033516021070022662907094076805447931131779362238745906466256800975035278625521,1.0033516021070022662907094076805447931131779362238745906466256800597446123647365 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,moderate,4099,10322096095657499356,238.960587,237.176311,237.031977,,,,No,-,"[-0.43157298548501555,-1.1978556632292069e-17,6.6494346874735147e-34,-3.691177745387139e-50]",2.0170321133877162215411750564956245308378105477034926055582254990416861890253464,2.0170321133877162215411750564956245308378105477034926055582254990416861800927487 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,boundary,4105,10322096095657499355,214.108948,205.510139,192.466318,180.000000,12.466318,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863435425504615922399221269664356222070824068253018899150618e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,qdpp,qdreal,qdpp qd_real,qdpp acos,boundary,4105,10322096095657499355,217.373877,213.972745,212.999289,,,,Both,-,"[0.99999929870750148,2.7755556150851942e-17,-1.5407428749976105e-33,8.5528410742475333e-50]",0.0011843078826538607100081236986459475260528356367755210592184107363613993035457458,0.0011843078826538607100081236986459475260528356367755210592184107362713895304423971 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,boundary,4105,10322096095657499355,215.911052,214.202890,214.012410,,,,Both,-,"[0.99999951622208461,2.7755562188094402e-17,-1.5407432101318897e-33,8.5528429346164987e-50]",0.00098364419824795302810500421007198327569768241949960764096598619232602573162558328,0.00098364419824795302810500421007198327569768241949960764096598619236306677869978476 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,boundary,4105,10322096095657499355,238.914683,237.209342,237.050442,,,,No,-,"[0.9999994975875568,2.7755561670882356e-17,-1.5407431814208536e-33,8.5528427752382321e-50]",0.0010024095822028012190197504178633007438852888266898375115002944522469310012326441,0.0010024095822028012190197504178633007438852888266898375115002944522469309968498442 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,moderate,4099,10322096095657499356,217.426949,215.046491,214.489012,180.000000,34.489012,yes,Both,-,"[7.2668058682815229,2.0169437976118373e-16,-1.1196287217417818e-32,6.2151879295467938e-49]",1431.9692420599845796068868376110150600143493093499559422817931161935390354934173,1431.969242059984579606886837611015060014349309349955942281793116154785851743886 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,qdpp,qdreal,qdpp qd_real,qdpp exp,moderate,4099,10322096095657499356,217.181000,214.662285,213.965214,,,,Both,-,"[7.2613602585082351,2.0154323372734803e-16,-1.118789692707556e-32,6.2105303827861612e-49]",1424.1924901565322249615420147030581519801331801363157732704846149025457025018372,1424.1924901565322249615420147030581519801331801363157732704846148471314937641764 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,moderate,4099,10322096095657499356,215.924822,214.186790,214.006279,,,,Both,-,"[3.4699495991506186,9.6310448481646233e-17,-5.3463038708149298e-33,2.9677948270106668e-49]",32.135122766454513464552390234864268716902997252088065619897983850263564532528178,32.135122766454513464552390234864268716902997252088065619897983849048300268542509 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,moderate,4099,10322096095657499356,238.962861,237.190217,237.015623,,,,No,-,"[-7.6245813926123454,-2.1162464538016916e-16,1.1747527693959878e-32,-6.5211878641279631e-49]",0.00048829960656918900534550546413689941129718423073002179902260395749341738412942277,0.00048829960656918900534550546413689941129718423073002179902260395749341738194229393 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,boundary,4099,10322096095657499291,216.046495,209.997559,208.947269,180.000000,28.947269,yes,Both,-,"[-598.1978245522032,-1.6603324952463394e-14,9.2166968237791214e-31,-5.1162945123745648e-47]",1.6068883808423147630418247005358373818912600411129986867468220248358416751446546e-260,1.6068883808423147630418247005358373818912600411129986867468220268856735884602638e-260 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,qdpp,qdreal,qdpp qd_real,qdpp exp,boundary,4099,10322096095657499291,215.950347,209.985759,209.146866,,,,Both,-,"[-640.25011431199152,-1.7770510460701536e-14,9.8646149364065219e-31,-5.4759613157298725e-47]",8.7681569761502387526320190127434504584347761919285432440366104766613210385006508e-279,8.7681569761502387526320190127434504584347761740787370131900179841668905806350565e-279 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,boundary,4099,10322096095657499291,215.925953,214.166296,214.022891,,,,Both,-,"[-213.48363419693817,-5.9253611516523799e-15,3.289236189891953e-31,-1.8258928757241849e-47]",1.9285712648723698827364885753401467489945482612892346646561462430777724772501659e-93,1.9285712648723698827364885753401467489945482612892346646561462431498708742994428e-93 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,boundary,4099,10322096095657499291,238.944656,237.149815,237.004890,,,,No,-,"[-1.3839315575301043,-3.8411816991881907e-17,2.1322841821037556e-33,-1.1836554970078048e-49]",0.25059139930250338491880855140531431523927782048990968130858850759821856519740631,0.2505913993025033849188085514053143152392778204899096813085885075982185663282049 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,moderate,4099,10322096095657499356,218.020692,214.999773,214.215827,180.000000,34.215827,yes,Both,-,"[3.1052035729833225,8.6186712571859683e-17,-4.7843236357014531e-33,2.6558331288070464e-49]",8.6051692793502790320283451340709447945359060261526288089250361316953685910209515,8.6051692793502790320283451340709447945359060261526288089250361314139388957083351 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,moderate,4099,10322096095657499356,215.951076,214.175518,214.035382,,,,Both,-,"[7.0184440832206558,1.9480095545589426e-16,-1.0813625298305666e-32,6.0027678929240134e-49]",129.6469164692491677500327633275603595045395867946892632855310581663474322548835,129.6469164692491677500327633275603595045395867946892632855310581615424462315035 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,moderate,4099,10322096095657499356,238.939517,237.174822,237.050228,,,,No,-,"[1.0265636690801578,2.8492865541411778e-17,-1.5816717680812041e-33,8.7800420716166679e-50]",2.0371661763637205453633549726338999372030557043909456864394369311660295529176797,2.0371661763637205453633549726338999372030557043909456864394369311660295618260332 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,boundary,4099,10322096095657499291,218.040030,214.973213,214.202868,180.000000,34.202868,yes,Both,-,"[104.10886087905146,2.8896013603855037e-15,-1.6040509811440805e-31,8.9042716596936548e-48]",21872072611204943785318953704535.848957757329524240581979950526538377674145297079,21872072611204943785318953704535.848957757329524240581979950526537655899871393765 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,boundary,4099,10322096095657499291,215.997580,214.178351,214.040135,,,,Both,-,"[101.01867420310816,2.8038314504349505e-15,-1.5564391167205152e-31,8.6399727190517872e-48]",2568331375911613125415057676345.8059016688827604346296714291621286371854710902734,2568331375911613125415057676345.8059016688827604346296714291621287320601044697817 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,boundary,4099,10322096095657499291,238.956490,237.176073,237.026426,,,,No,-,"[-183.99722039427581,-5.1069487637188608e-15,2.8349260515308288e-31,-1.5737000877596046e-47]",4.0861804585463969756716858253333793248054096194328922530438741816953664456998308e-56,4.0861804585463969756716858253333793248054096194328922530438741816953664638655892e-56 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,moderate,4099,10322096095657499356,218.319190,214.883150,213.793932,180.000000,33.793932,yes,Both,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.69414327255271665612631015596788634386741426622153124768599904822325391377881959,0.69414327255271665612631015596788634386741426622153124768599904819284068360567441 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,qdpp,qdreal,qdpp qd_real,qdpp expm1,moderate,4099,10322096095657499356,218.078857,214.447716,0.000000,,,,NaN,no,"midpoint [0,0,0,0]",1,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,moderate,4099,10322096095657499356,216.131673,214.242848,214.018319,,,,Both,yes,"[3.4965342970959128,9.70483220756855e-17,-5.3872640834831953e-33,2.9905323126095925e-49]",32.000882287565481685038228589636231258591535037593573530748202339964185962910206,32.000882287565481685038228589636231258591535037593573530748202341164316010951542 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,moderate,4099,10322096095657499356,239.116206,237.239921,237.036552,,,,No,no,"[6.9511685393403209,1.9293368401064106e-16,-1.0709970910718406e-32,5.9452281490726156e-49]",1043.369402155250824878423084038542130172916017601225886298348705509618197426875,1043.3694021552508248784230840385421301729160176012258862983487055096181928208548 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,cancellation,4098,10322096095657499336,235.991871,207.540568,207.000000,180.000000,27.000000,yes,Both,yes,"[3.6665372155917779e-270,1.0176685093487508e-286,-5.6491950525747228e-303,3.1359334672835601e-319]",3.666537215591778022742232576640266061184048842008439989892382592756081591049904e-270,3.6665372155917780227422325766402660611840488420084399108418792581566345227988971e-270 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,qdpp,qdreal,qdpp qd_real,qdpp expm1,cancellation,4098,10322096095657499336,235.502017,203.377948,203.000000,,,,NaN,no,"[-3.8216415740076992e-266,-1.0607186168320179e-282,5.8881711552772772e-299,-3.2685915951514981e-315]",-3.8216415740076992733056703378630837378959866245250661120987138937707022352653822e-266,-3.8216415740076992733056703378630837378959866245250661119722330884353431199561806e-266 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,cancellation,4098,10322096095657499336,238.867803,214.409929,214.038287,,,,Both,yes,"[-6.7120113773945228e-52,-1.8629573931823525e-68,1.0341490959033542e-84,-5.740680685835965e-101]",-6.712011377394522981785014978692529479776471498143080594571376035118230062021051e-52,-6.7120113773945229817850149786925294797764714981430805945713760353664908412007537e-52 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,cancellation,4098,10322096095657499336,261.143186,237.455118,237.087032,,,,No,no,"[-3.8952556529180725e-40,-1.0811506281677353e-56,6.0015916023988555e-73,-3.3315525906900986e-89]",-3.895255652918072567680506372460482734240287686521220025487368643809197114855518e-40,-3.8952556529180725676805063724604827342402876865212200254873686438091971314600946e-40 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,near_one,4099,10322096095657499359,216.923081,214.333783,213.252927,180.000000,33.252927,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.50793426433422243038604118757996243390013385433953431736902408052282282785799521,-0.50793426433422243038604118757996243390013385433953431736902408049044259492262108 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,qdpp,qdreal,qdpp qd_real,qdpp log,near_one,4099,10322096095657499359,216.107747,213.554225,212.785342,,,,NaN,-,"[1.30472165290815,3.6213300494640499e-17,2.0102420003409726e-33,1.1159084769235398e-49]",0.26598972523382481362994009301903610226436363952412425984605998695011843922211341,0.26598972523382481362994009301903610226436363952412425984605998697356582512954988 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,near_one,4099,10322096095657499359,215.950049,214.169987,214.022652,,,,Both,-,"[1.2874823082863105,3.5734812561425147e-17,1.9836805843179232e-33,1.1011639291058213e-49]",0.25268861232449768303287208416041654713719635429237966672910076356984301208098884,0.25268861232449768303287208416041654713719635429237966672910076357929117870962672 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,near_one,4099,10322096095657499359,238.922548,237.172288,237.020732,,,,No,-,"[1.2848264058251369,3.5661096459836307e-17,1.9795885186544464e-33,1.0988923763468863e-49]",0.25062361647825247046091044906137751740083075171705262981159748405128009249095062,0.25062361647825247046091044906137751740083075171705262981159748405128009360954388 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,wide_exponent,4096,10322096095657499357,218.159247,215.423349,214.787811,180.000000,34.787811,yes,Both,-,"[2.1976393587320462e-253,6.0996745397169545e-270,3.3859995583568084e-286,1.87960733552917e-302]",-581.7666447619842216491153422494362059260947919882070310469834418271313947370462,-581.76664476198422164911534224943620592609479198820703104698344181433242395383818 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,qdpp,qdreal,qdpp qd_real,qdpp log,wide_exponent,4096,10322096095657499357,219.248609,198.315059,182.885308,,,,NaN,-,"[8.1014827670798251e+270,2.2486131754039865e+254,1.2482310604044958e+238,6.9290743165667288e+221]",623.79002221098189400061212646729526801709293054916946038793492571079055836917961,623.79002221098189400061212646729526801709293054916946044302521634436080423769015 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,wide_exponent,4096,10322096095657499357,215.922997,214.161037,214.024145,,,,Both,-,"[4.2620000526591127e+112,1.1829426473539441e+96,6.5666508195169289e+79,3.6452234672506739e+63]",259.33926896136503531476005673839606499505614715572250820030983367844490106121051,259.33926896136503531476005673839606499505614715572250820030983366875809051992411 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,wide_exponent,4096,10322096095657499357,238.891947,237.168312,237.029110,,,,No,-,"[4.0479342938723756e-223,1.1235274638067215e-239,6.2368302955846473e-256,3.4621362974188981e-272]",-512.07826903756965473896626715773821631241155436371017077009210067703398041970383,-512.07826903756965473896626715773821631241155436371017077009210067703398269199759 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,extreme_finite,4096,10322096095657499354,218.246513,215.340501,214.977417,180.000000,34.977417,yes,Both,-,"[6.7255270714277703e+270,1.8667087518597276e+254,1.0362315182919788e+238,5.7522404522501946e+221]",623.60388540574258032454540371734224443628132982427335034944077135074873546872386,623.60388540574258032454540371734224443628132982427335034944077133871895125605538 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,qdpp,qdreal,qdpp qd_real,qdpp log,extreme_finite,4096,10322096095657499354,180.081882,62.240702,61.593641,,,,NaN,-,"[2.1750866125911697e+307,6.0370780946316363e+290,3.3512515510601061e+274,1.8603183166488491e+258]",707.67069203480079974332779745736534057362405436989841765137044290539718915086942,707.67069203480079994670286771340075022955779980128755279708076731836065554625776 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,extreme_finite,4096,10322096095657499354,215.741355,214.353327,214.285392,,,,Both,-,"[1.0075597185049971e-271,2.7965399954227229e-288,1.5523915461017184e-304,8.6165048634713397e-321]",-623.99302891435394122737400533549424989714640717618230616015013795393555869980229,-623.99302891435394122737400533549424989714640717618230616015013793448871373169198 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,extreme_finite,4096,10322096095657499354,238.776105,237.339073,237.285267,,,,No,-,"[7.7437783365788433e+270,2.1493302517158317e+254,1.1931179664891499e+238,6.6231351874510007e+221]",623.74486483406474436961766281025043784462223397426216741261126488422867258269335,623.74486483406474436961766281025043784462223397426216741261126488422867490021597 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,near_one,4099,10322096095657499359,216.831239,214.285380,213.192358,180.000000,33.192358,yes,Both,-,"[0.7496369857674211,2.0806606042739792e-17,1.1549986546477316e-33,6.4115304990049557e-50]",-0.41573596010411493045014267590719729760119796965409081364143571035067957416967793,-0.41573596010411493045014267590719729760119796965409081364143571037831861478590789 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,near_one,4099,10322096095657499359,216.011174,214.194225,214.010454,,,,Both,-,"[0.84070967041985378,2.3334380828128714e-17,1.2953183430380163e-33,7.1904612433005627e-50]",-0.2503204268218643143737732495500269147452501235616383620107211692911966773483109,-0.25032042682186431437377324955002691474525012356163836201072116930063577090736059 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,near_one,4099,10322096095657499359,239.011917,237.187476,237.019864,,,,No,-,"[0.70583601885804559,1.959088499364896e-17,1.087512579636627e-33,6.036907527410412e-50]",-0.50259504206925858952155266234103500116929985813117258806089289885593823424307108,-0.50259504206925858952155266234103500116929985813117258806089289885593823648762265 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,wide_exponent,4096,10322096095657499357,217.896906,215.177253,214.398808,180.000000,34.398808,yes,Both,-,"[1.7649452349949291e+168,4.8987070927345696e+151,2.7193287026242405e+135,1.5095306685887436e+119]",558.90354335945887268941714779171120602057251916893271728873264701130834705779937,558.90354335945887268941714779171120602057251916893271728873264699520691310276205 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,wide_exponent,4096,10322096095657499357,215.991634,214.211323,214.021430,,,,Both,-,"[6.4253617293081178e+155,1.7833961333557962e+139,9.8998372463954056e+122,5.4955136254949441e+106]",517.58263238369809866937110146938845548682933182383309502125833012837118648537698,517.58263238369809866937110146938845548682933182383309502125833014774029382250725 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,wide_exponent,4096,10322096095657499357,238.962302,237.188437,237.038715,,,,No,-,"[3.5891513914548225e-156,9.9618962841464057e-173,5.5299633117935652e-189,3.0697462970427998e-205]",-516.3771400246925614573224211990488725433698671805238582152642425975984165061167,-516.37714002469256145732242119904887254336986718052385821526424259759841422995179 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,extreme_finite,4096,10322096095657499354,221.112240,215.319712,214.786513,180.000000,34.786513,yes,Both,-,"[6.8101574227838104e+300,1.8901983930241257e+284,1.0492708885224276e+268,5.8246234975324753e+251]",999.34611661399737932538483694865739304704641025692614772050877622807059417985481,999.34611661399737932538483694865739304704641025692614772050877625007617254075152 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,extreme_finite,4096,10322096095657499354,219.971377,214.877327,214.815152,,,,Both,-,"[1.1004277016223889e-271,3.0543004281912948e-288,1.695477329750225e-304,9.4119505532757467e-321]",-900.10444935156029673708481095997044639503503777325192083508132873842538505530364,-900.10444935156029673708481095997044639503503777325192083508132875785609939278478 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,extreme_finite,4096,10322096095657499354,242.986721,237.879178,237.813342,,,,No,-,"[5.3028389146690505e+270,1.4718334647359639e+254,8.1703170048184277e+237,4.5354370286179322e+221]",899.32735054371464126504766215010086793763896785913590289802765629264265015706112,899.32735054371464126504766215010086793763896785913590289802765629264264783983466 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,near_one,4099,10322096095657499359,216.850749,214.245682,213.257193,180.000000,33.257193,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.22059304816994049352958242449187881883781348866027603462218270842444120257078286,-0.2205930481699404935295824244918788188378134886602760346221827084104201683981848 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,qdpp,qdreal,qdpp qd_real,qdpp log10,near_one,4099,10322096095657499359,215.730262,213.276688,212.669210,,,,NaN,-,"[1.3015859464676423,3.6126267157422572e-17,2.0054106795965072e-33,1.1132265551586125e-49]",0.11447285077352897129228038687318627560357562795876254689499109361157840237707265,0.11447285077352897129228038687318627560357562795876254689499109362251522127743891 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,near_one,4099,10322096095657499359,215.948509,214.160208,214.004904,,,,Both,-,"[1.1548157158417363,3.2052574923161943e-17,1.7792753339108649e-33,9.8769622142772787e-50]",0.062512685545452607071551872862036252686540209936771988439097880251720697483459773,0.06251268554545260707155187286203625268654020993677198843909788025408701452391967 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,near_one,4099,10322096095657499359,238.958266,237.152635,237.019945,,,,No,-,"[0.7495965567981705,2.0805483913426695e-17,1.1549363639577312e-33,6.4111847162136648e-50]",-0.12517241700686969827684919239182967493738565725808191459997705897873585882208558,-0.12517241700686969827684919239182967493738565725808191459997705897873585938106475 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,wide_exponent,4096,10322096095657499357,217.861615,215.189987,214.497524,180.000000,34.497524,yes,Both,-,"[7.1469640060920858e+234,1.9836809989326703e+218,1.1011641592632406e+202,6.1126890175302627e+185]",234.85412159489045596003203173344408775668279869668572611682025536536168793387694,234.85412159489045596003203173344408775668279869668572611682025535904325560762789 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,qdpp,qdreal,qdpp qd_real,qdpp log10,wide_exponent,4096,10322096095657499357,216.139128,198.315057,182.885308,,,,NaN,-,"[8.1014827670798251e+270,2.2486131754039865e+254,1.2482310604044958e+238,6.9290743165667288e+221]",270.9085645125363317880005551595953172485088402709057018385553128700286754971209,270.90856451253633178800055515959531724850884027090570186248072209436947046554362 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,wide_exponent,4096,10322096095657499357,215.969447,214.155173,214.015352,,,,Both,-,"[10.021612533904657,2.7815562447532518e-16,1.5440738936074737e-32,8.571331942028158e-49]",1.0009376075822620669594461139776613372841714757547811188893586984207809467928981,1.000937607582262066959446113977661337284171475754781118889358698383165469979518 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,wide_exponent,4096,10322096095657499357,239.002817,237.144835,237.026072,,,,No,-,"[1.1120370415213245e-260,3.0865228193325391e-277,1.7133643500269686e-293,9.5110827548592716e-310]",-259.95388074633275189091615220567999501526078782561121881855869444663541118363614,-259.95388074633275189091615220567999501526078782561121881855869444663541233958603 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,extreme_finite,4096,10322096095657499354,217.633514,215.073798,214.220407,180.000000,34.220407,yes,Both,-,"[5.3758239790954964e+270,1.4920908894809616e+254,8.2827683016759667e+237,4.5978600380780314e+221]",270.73044504015011560346372915336203436416099326519770095672238014262874150583956,270.73044504015011560346372915336203436416099326519770095672238013380264152658546 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,qdpp,qdreal,qdpp qd_real,qdpp log10,extreme_finite,4096,10322096095657499354,177.377234,62.240702,61.593641,,,,NaN,-,"[2.1750866125911697e+307,6.0370780946316363e+290,3.3512515510601061e+274,1.8603183166488491e+258]",307.3374765553694932184865016124271803173606726714839567405622958159722812564444,307.3374765553694933068111723813095195789475383928117615171795613459742174333761 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,extreme_finite,4096,10322096095657499354,215.774631,214.144149,214.083242,,,,Both,-,"[1.0704536782707779e-271,2.9711058010272682e-288,1.6492950344489211e-304,9.1550364174382985e-321]",-270.97043212118285841925561066273687400765354325005690405748633653277437492999232,-270.97043212118285841925561066273687400765354325005690405748633652305933528126596 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,extreme_finite,4096,10322096095657499354,238.568974,237.128968,237.082099,,,,No,-,"[7.3799185819446756e+270,2.0483388823835035e+254,1.137056494728563e+238,6.3119315037361179e+221]",270.86805157054835280159779316282272669037880739803758696775863651413772687711934,270.86805157054835280159779316282272669037880739803758696775863651413772803572193 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,moderate,4099,10322096095657499356,217.570462,214.787129,214.020088,180.000000,34.020088,yes,Both,yes,"[-0.25462100474624672,-7.0671525505618592e-18,3.9230577400860884e-34,-2.1777345149887542e-50]",-0.29386247149453246058352428487213904837677656724718288204078215844233971612393252,-0.29386247149453246058352428487213904837677656724718288204078215843133248548523474 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,qdpp,qdreal,qdpp qd_real,qdpp log1p,moderate,4099,10322096095657499356,217.191251,214.092522,213.044815,,,,NaN,no,"[0.63529998410703725,1.7633116747490719e-17,-9.7883461044838246e-34,5.4336236090989502e-50]",0.4918262640375245274757241097327722059938982066786883208516416152176455627804291,0.49182626403752452747572410973277220599389820667868832085164161525386419144512343 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,moderate,4099,10322096095657499356,215.916477,214.139415,214.010728,,,,Both,yes,"[6.41522527712225,1.7805827027046056e-16,-9.8842195689597157e-33,5.4868440729548083e-49]",2.0035353563990952644690935484747843529003715927775366089476216527818344375259587,2.003535356399095264469093548474784352900371592777536608947621652706299381724742 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,moderate,4099,10322096095657499356,238.982401,237.123379,237.006206,,,,No,no,"[1.7276029251355596,4.7950613622381721e-17,-2.6617937644236434e-33,1.4775923620333994e-49]",1.0034231740848004098518884695801641614754221665384765735216332616039977910239888,1.0034231740848004098518884695801641614754221665384765735216332616039977865001517 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,cancellation,4098,10322096095657499336,236.076178,207.415037,207.000000,180.000000,27.000000,yes,Both,yes,"[-5.0621342944708729e-265,-1.4050245118665463e-281,7.7994528161848061e-298,-4.3295660482073704e-314]",-5.0621342944708730086760504274075663829189583933818324664504818055859676107573498e-265,-5.0621342944708730086760504274075663829189583933818324664512723106193136052280323e-265 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,qdpp,qdreal,qdpp qd_real,qdpp log1p,cancellation,4098,10322096095657499336,235.590230,203.445411,203.000000,,,,NaN,no,"[3.8562355730696869e-262,1.0703203804001379e-278,-5.9414716502289462e-295,3.2981793131207609e-311]",3.8562355730696870232090014097598983536869063470484289063758982684620955043081289e-262,3.8562355730696870232090014097598983536869063470484289063759109165426290402196599e-262 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,cancellation,4098,10322096095657499336,238.872001,214.422148,214.038287,,,,Both,yes,"[-6.7120113773945228e-52,-1.8629573931823525e-68,1.0341490959033542e-84,-5.740680685835965e-101]",-6.7120113773945229817850149786925294797764714981430850996810490629669129817421558e-52,-6.7120113773945229817850149786925294797764714981430850996810490627186522025624531e-52 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,cancellation,4098,10322096095657499336,261.132145,237.419995,237.015621,,,,No,no,"[-9.7261871007756405e-35,-2.6995592152733285e-51,1.4985563985677344e-67,-8.3186590869462584e-84]",-9.7261871007756407664559632195888426285653472784067580211618203539513215255828672e-35,-9.7261871007756407664559632195888426285653472784067580211618203539513214820185222e-35 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,near_one,4099,10322096095657499359,218.148772,215.130203,214.362894,180.000000,34.362894,yes,Both,yes,"[1.423134563497126,3.9499918988359527e-17,2.1926859765852584e-33,1.2171852284888254e-49] ; [1.1927685344842596,3.310597725082075e-17,1.8377509098288919e-33,1.0201566868089328e-49]",1.5233053480043329261431287201279001410110702760486984367539772844096336550706452,1.5233053480043329261431287201279001410110702760486984367539772843646426383376926 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,qdpp,qdreal,qdpp qd_real,qdpp pow,near_one,4099,10322096095657499359,217.611058,214.482664,213.884045,,,,No,no,"[0.56465331452162981,1.5672277767820592e-17,8.6998618130776872e-34,4.8293934479680041e-50] ; [1.308724409763804,3.6324399315218581e-17,2.0164092237716969e-33,1.1193319736489387e-49]",0.47331567754885921919725130297346743650975597253860946110241115439086285093499742,0.47331567754885921919725130297346743650975597253860946110241115437138066828954228 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,near_one,4099,10322096095657499359,215.924402,214.174611,214.034283,,,,Both,yes,"[1.0020188856745866,2.7811610949629213e-17,1.5438545414097733e-33,8.5701142927262127e-50] ; [0.67487318784050987,1.8731493796067807e-17,1.0398067849008878e-33,5.772087168792116e-50]",1.0013620450437589245492610014243773686942214248275520503466520165881255161776408,1.001362045043758924549261001424377368694221424827552050346652016550984655411922 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,near_one,4099,10322096095657499359,238.916883,237.150631,237.018583,,,,No,no,"[1.0001982067740443,2.7761076958733429e-17,1.5410493413988385e-33,8.5545423045221195e-50] ; [0.76444938074723401,2.1217732591650551e-17,1.1778207626795018e-33,6.5382186480417261e-50]",1.0001515155089267348056115423971138300622949553626290284157870717867518582721827,1.0001515155089267348056115423971138300622949553626290284157870717867518627427509 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,moderate,4099,10322096095657499356,215.525556,212.047897,211.143117,180.000000,31.143117,yes,Both,yes,"[7.7504743381693961,2.1511887655005213e-16,1.1941496488868227e-32,6.6288621752109849e-49] ; [6.7867863554598733,1.8837116187608508e-16,1.0456700054511108e-32,5.8046345810586807e-49]",1085628.0458183651737754568233825992695775685017622680386092038233740053608370142,1085628.0458183651737754568233825992695775685017622680386092038236727288616449863 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,qdpp,qdreal,qdpp qd_real,qdpp pow,moderate,4099,10322096095657499356,215.117913,211.658837,210.563451,,,,No,no,"[3.9373570792794448,1.0928361213967244e-16,6.0664591205834804e-33,3.3675612968095294e-49] ; [6.6779325302611943,1.853498612997327e-16,1.0288984181302124e-32,5.7115335690428171e-49]",9434.9046319695249985422135793070845456275754612092834675473473550955018842531657,9434.9046319695249985422135793070845456275754612092834675473473512155814273180929 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,moderate,4099,10322096095657499356,215.935138,214.172189,214.028310,,,,Both,yes,"[2.5648686096017479,7.1189404637954309e-17,3.951805806920689e-33,2.1936928978453724e-49] ; [7.3758515152288862,2.0472100446058645e-16,1.1364298638826622e-32,6.3084530037708211e-49]",1040.4078088056214822957453194310414746378121362243328657421409210248312127986565,1040.4078088056214822957453194310414746378121362243328657421409210635803831145731 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,moderate,4099,10322096095657499356,238.932191,237.171612,237.009078,,,,No,no,"[0.7371316742375349,2.0459513922975039e-17,1.1357311714962925e-33,6.3045744818984312e-50] ; [2.2636267388646147,6.2828263116116299e-17,3.48766921543599e-33,1.9360453326266958e-49]",0.50138517166343568386581893387404724257046263632975310595489929845043169244947956,0.5013851716634356838658189338740472425704626363297531059548992984504316901935288 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,moderate,4099,10322096095657499356,217.158561,214.415804,213.656994,190.000000,23.656994,yes,Both,no,"[-5.6684636004037738,-1.5733147008544706e-16,8.7336510293493687e-33,-4.848150230912434e-49]",-188043.1576659602046428792992413117498177671151403368538232084353655121126605512,-188043.15766596020464287929924131174981776711514033685382320843537457138843934032 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,qdpp,qdreal,qdpp qd_real,qdpp npwr,moderate,4099,10322096095657499356,215.059104,212.801524,212.059765,,,,Both,no,"[-1.6564773418506284,-4.5976482117311103e-17,2.5522074518952777e-33,-1.4167597383570195e-49]",-34.22145718343254248282859373100912991782148871976998320056340727210943023192857,-34.221457183432542482828593731009129917821488719769983200563407277097680277445128 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",moderate,4099,10322096095657499356,215.987832,214.179832,214.020519,,,,Both,yes,"[-3.6234270472721093,-1.0057030339827603e-16,5.5827733213151837e-33,-3.0990617412935871e-49]",-8200.430509244412297875363007517859232142760219202884340409240903826050512248695,-8200.430509244412297875363007517859232142760219202884340409240904133122939385402 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,wide_exponent,4096,10322096095657499357,217.192977,214.383216,213.812882,190.000000,23.812882,yes,Both,no,"[3156983632.9860682,8.7623897942647695e-08,-4.8641034501666178e-24,2.7001198222668209e-40]",3125405070844307632059635814309662493597686949184087401837672866916,3125405070844307632059635814309662493597686949184087401837672867051.1497698219492 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,qdpp,qdreal,qdpp qd_real,qdpp npwr,wide_exponent,4096,10322096095657499357,215.034925,212.773859,212.051585,,,,Both,no,"[-9.5596245569648417e-08,-2.6533288224786072e-24,1.4728933753086521e-40,-8.1762006904276382e-57]",-7.2960172719911353618163838397248732636061880909367939710334008019108463679922758e-50,-7.2960172719911353618163838397248732636061880909367939710334008029803890701495117e-50 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",wide_exponent,4096,10322096095657499357,215.949957,214.206986,214.011863,,,,Both,yes,"[14787987098817744,0.41044909412418074,-2.2784501736660175e-17,1.2647939216325996e-33]",1.5465481333355751493406420880783518941005745731747866016820925042744984697072011e+113,1.5465481333355751493406420880783518941005745731747866016820925043327588542346558e+113 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,qdpp,qdreal,qdpp qd_real,qdpp fmod,moderate,4099,10322096095657499356,242.308487,211.105419,205.498921,,,,NaN,no,"[7.1899788224367311,1.9956200088091322e-16,1.1077916410912782e-32,6.1494789321341235e-49] ; [0.17529801831962688,4.8654974027403064e-18,2.7008936213880932e-34,1.4992971427641406e-50]",0.00276007133202904605284920081045968802292893049314657639401489600084294546258242,0.002760071332029046052849200810459688022928930493146576394014895962860674479543225 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,qdpp,qdreal,qdpp qd_real,qdpp fmod,wide_exponent,4096,10322096095657499357,157.385566,0.000000,0.000000,,,,NaN,no,"[1.2347084998878686e+21,34270.045131897481,1.9023696580187922e-12,1.0560272978403741e-28] ; [3.0778362709487343e-89,8.5427117350842915e-106,4.7421576305130505e-122,2.6324262938987323e-138]",0,1.4962362985274997261929338086936228014751652950478652582390850983028923547154329e-89 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,,,,No,no,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,quotient_reduction,4,10322096095657499383,237.431134,217.724535,217.724535,190.000000,27.724535,yes,Both,yes,"scaled-reduction gap 58 lhs [5.4783870128486342e+104,1.2515701024950248e+86,2.5644796350277343e+70,3.0488942297143002e+54] ; scaled-reduction gap 58 rhs [1.0992042367473471e+87,7.6430960252403863e+68,8.308036160429468e+52,-8.4044243641695015e+36]",8.2176097775156019844573783110329841337664065872688377479267466170896765365317513e+86,8.217609777515601984457378311032984133766406587268837747926746617066064704117403e+86 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,qdpp,qdreal,qdpp qd_real,qdpp fmod,quotient_reduction,4,10322096095657499383,123.173400,0.000000,0.000000,,,,NaN,no,"maximum binary64 below 2^900 [8.452712498170643e+270,0,0,0] ; negative double divisor [-7.5,0,0,0]",2.5082282550565593277172994055176394775153826727023953721515087619155560275540737e+204,0.5 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,quotient_reduction,4,10322096095657499383,inf,inf,inf,,,,Both,yes,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,6.4695626425683503e-14,-4.5490848564960626e-30] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,-1.0491094474424749e-30,9.613833942740628e-48]",134.96799785736252690998070323801097276000000000069696182420374612820625148544072,134.96799785736252690998070323801097276000000000069696182420374612820625148544072 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,quotient_reduction,4,10322096095657499383,inf,inf,inf,,,,No,no,"decimal huge-quotient lhs [4.6958550912494027e+19,1676.4003156732927,6.4695626425683503e-14,-4.5490848564960626e-30] ; decimal huge-quotient rhs [294.10562077176172,1.885741846331566e-14,-1.0491094474424749e-30,9.613833942740628e-48]",134.96799785736252690998070323801097275999999999972664787995535221851974311276988,134.96799785736252690998070323801097275999999999972664787995535221851974311276988 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,qdpp,qdreal,qdpp qd_real,qdpp drem,moderate,4099,10322096095657499356,241.943486,210.446918,205.498921,,,,NaN,no,"[7.1899788224367311,1.9956200088091322e-16,1.1077916410912782e-32,6.1494789321341235e-49] ; [0.17529801831962688,4.8654974027403064e-18,2.7008936213880932e-34,1.4992971427641406e-50]",0.00276007133202904605284920081045968802292893049314657639401489600084294546258242,0.002760071332029046052849200810459688022928930493146576394014895962860674479543225 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remainder,moderate,4099,10322096095657499356,inf,inf,inf,,,,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,tlfloat,tloct,TLFloat Octuple,tlfloat::remainder,moderate,4099,10322096095657499356,inf,inf,inf,,,,No,no,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,near_one,4099,10322096095657499359,217.088527,214.653889,213.844482,180.000000,33.844482,yes,Both,yes,"[0.76562636076402268,2.1250400349504614e-17,-1.1796341875261248e-33,6.5482851781324668e-50]",0.84264914336815803011264269143612462086913967383298160440244808238970820494154117,0.84264914336815803011264269143612462086913967383298160440244808235405953256955333 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,qdpp,qdreal,qdpp qd_real,qdpp sinh,near_one,4099,10322096095657499359,216.789555,214.156966,212.946933,,,,NaN,no,"[0.53019894096351738,1.4715976797239277e-17,-8.1690081350723071e-34,4.534710459953743e-50]",0.55539122289270886779105567524999850401374993402945589954958343593492898173560863,0.55539122289270886779105567524999850401374993402945589954958343589115814564205908 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,near_one,4099,10322096095657499359,215.975034,214.162104,214.012511,,,,Both,yes,"[1.4504430962981512,4.0257883035470264e-17,-2.2347614334322787e-33,1.2405417989704175e-49]",2.0152687650487900870785030962782558225880631209188005099886950034018742263533812,2.0152687650487900870785030962782558225880631209188005099886950033259906440226229 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,near_one,4099,10322096095657499359,238.935804,237.151916,237.012513,,,,No,no,"[0.88298360331457626,2.4507718169158206e-17,-1.3604516496211864e-33,7.5520237264935862e-50]",1.0022782039402745822682661730648698672338759932522803568394909240974045054810381,1.0022782039402745822682661730648698672338759932522803568394909240974045099800009 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,moderate,4099,10322096095657499356,216.956723,214.597984,213.993459,180.000000,33.993459,yes,Both,yes,"[0.054297296667996875,1.5070527233928231e-18,-8.3658231641737974e-35,4.6439647484041155e-51]",0.054323980450469496887448171808625498827811228200332436943033541994792104072246549,0.054323980450469496887448171808625498827811228200332436943033541996864828986916269 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,qdpp,qdreal,qdpp qd_real,qdpp sinh,moderate,4099,10322096095657499356,216.768952,214.332225,213.240650,,,,NaN,no,"[-0.36595924081076703,-1.0157409380561395e-17,5.6384948824214048e-34,-3.1299934213476792e-50]",-0.37418270126396680750781067812470790778554307856767686653750348529134531402422982,-0.3741827012639668075078106781247079077855430785676768665375034852672877442450651 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,moderate,4099,10322096095657499356,215.967539,214.177379,214.011597,,,,Both,yes,"[-5.5514961198525494,-1.5408497033443795e-16,8.5534340906988609e-33,-4.7481097335538075e-49]",-128.8094102575669040651947452858902507112406883868292013207128384184002201202949,-128.80941025756690406519474528589025071124068838682920132071283842325352333323063 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,moderate,4099,10322096095657499356,238.939197,237.158124,237.030088,,,,No,no,"[-5.5510124539006611,-1.5407154590753761e-16,8.5526888853070031e-33,-4.7476960614617498e-49]",-128.74712271806391331797118607582008799679652337863704645234129240331062931682242,-128.74712271806391331797118607582008799679652337863704645234129240331062988773716 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,near_one,4099,10322096095657499359,217.861158,215.239353,214.487635,180.000000,34.487635,yes,Both,-,"[1.4303433203278892,3.9700002183670459e-17,-2.2037928250989968e-33,1.2233507679643134e-49]",2.2096804236627024779285628784238115118483853203461617013356271627432691873521909,2.2096804236627024779285628784238115118483853203461617013356271626834118164339315 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,qdpp,qdreal,qdpp qd_real,qdpp cosh,near_one,4099,10322096095657499359,217.575031,214.997764,214.207070,,,,NaN,-,"[1.4762075238667678,4.0972989553044397e-17,-2.2744578194757946e-33,1.2625777198603775e-49]",2.302409864481417699686931953389152575418423805138517988848533827927814693594248,2.3024098644814176996869319533891525754184238051385179888485338280035728255131427 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,near_one,4099,10322096095657499359,215.895184,214.199617,214.003441,,,,Both,-,"[1.3180360250850454,3.6582848558370944e-17,-2.0307560387939318e-33,1.1272960558328004e-49]",2.0018685354727893365634159209739845210019868831427185249101991568056016815303039,2.0018685354727893365634159209739845210019868831427185249101991568814560681262869 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,near_one,4099,10322096095657499359,238.918901,237.169391,237.024615,,,,No,-,"[1.3282510733457995,3.6866373102789604e-17,-2.0464948126569296e-33,1.1360328303938347e-49]",2.0196883083061335896151725290956785491903675387304527995513844467881401418108314,2.0196883083061335896151725290956785491903675387304527995513844467881401328207091 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,moderate,4099,10322096095657499356,217.160103,214.737937,214.159072,180.000000,34.159072,yes,Both,-,"[6.9851955939094275,1.9387812449671103e-16,-1.0762397889369559e-32,5.9743309684776362e-49]",540.25933261817616200059910469729467236382875532751465730859323173250980707379319,540.25933261817616200059910469729467236382875532751465730859323171413182761114806 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,qdpp,qdreal,qdpp qd_real,qdpp cosh,moderate,4099,10322096095657499356,216.955312,214.536693,213.837789,,,,NaN,-,"[-6.7926478357212208,-1.8853385063469843e-16,1.0465731094794119e-32,-5.8096478154879388e-49]",445.63574988022346778368624832716917203617809044632604045304376455196844104441602,445.6357498802234677836862483271691720361780904463260404530437645330279442492149 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,moderate,4099,10322096095657499356,215.937394,214.168922,214.000831,,,,Both,-,"[-0.024915825742571229,-6.9155308542376918e-19,3.8388907909401814e-35,-2.1310124725616338e-51]",1.000310415244491850132172673423459542053002904846742529807535702649493788255194,1.0003104152444918501321726734234595420530029048467425298075357026874659704667725 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,moderate,4099,10322096095657499356,238.922878,237.131226,237.021921,,,,No,-,"[1.3188743183318685,3.6606115869971215e-17,-2.0320476340469193e-33,1.128013035226982e-49]",2.0033230139496671007944620881086192005631920629659234114985427470911686576898421,2.0033230139496671007944620881086192005631920629659234114985427470911686487559028 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,near_one,4099,10322096095657499359,218.404442,215.222392,214.209524,180.000000,34.209524,yes,Both,yes,"[0.51562981029195787,1.4311602189230828e-17,-7.9445351348799311e-34,4.4101029133436116e-50]",0.47432005334068853744838691469119725073611186863535411854720463894651210203082909,0.47432005334068853744838691469119725073611186863535411854720463896209252928278415 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,qdpp,qdreal,qdpp qd_real,qdpp tanh,near_one,4099,10322096095657499359,218.125341,214.939214,214.034113,,,,Both,no,"[0.50145288441688241,1.3918113451108005e-17,-7.7261050063826027e-34,4.2888498343788288e-50]",0.4632590074710471540677760580947758421609680024744328209862896713814575412529895,0.46325900747104715406777605809477584216096800247443282098628967139864199252464697 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,near_one,4099,10322096095657499359,216.043702,214.274158,214.038640,,,,Both,yes,"[0.55314229628883105,1.5352782830847263e-17,-8.5225064954382105e-34,4.7309414693764765e-50]",0.50287159194838804027667682401213462167675591678250746227332787661254617641690965,0.50287159194838804027667682401213462167675591678250746227332787663114160978543072 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,near_one,4099,10322096095657499359,239.022015,237.196358,237.059834,,,,Inf,no,"[0.5576392959998614,1.5477599646370227e-17,-8.5917937466652033e-34,4.769403620189074e-50]",0.50622378780329080187492227056864090769531648311133563532633056169725103618142473,0.50622378780329080187492227056864090769531648311133563532633056169725103398244205 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,moderate,4099,10322096095657499356,219.852666,215.378850,214.042672,180.000000,34.042672,yes,Both,yes,"[-0.049004188243731761,-1.3601394522814103e-18,7.5502906831193558e-35,-4.1912532795059553e-51]",-0.048964999496442407695752174462954719514280073534987354591187902322123112147473692,-0.048964999496442407695752174462954719514280073534987354591187902320317513639311405 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,qdpp,qdreal,qdpp qd_real,qdpp tanh,moderate,4099,10322096095657499356,219.762416,214.599863,212.926362,,,,Both,no,"[0.4300835480404146,1.1937216438673698e-17,-6.6264862700747261e-34,3.6784388146997172e-50]",0.40539112864517538062152182337242215635371996648169563288338521428356954926607425,0.40539112864517538062152182337242215635371996648169563288338521425116153227311076 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,moderate,4099,10322096095657499356,216.350781,214.574367,214.097308,,,,Both,yes,"[-0.55244142124230144,-1.5333329640496203e-17,8.5117078055231293e-34,-4.7249469922867211e-50]",-0.50234776953455832738474068141498014652395776826959763064097809403595245870991342,-0.50234776953455832738474068141498014652395776826959763064097809405378826341441138 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,moderate,4099,10322096095657499356,239.361623,237.532781,237.128013,,,,Inf,no,"[-0.57881872838935244,-1.6065446983552846e-17,8.918114571017569e-34,-4.9505480664944029e-50]",-0.52180632683237750628821439192870733596394500691724064619963052884427795607515043,-0.52180632683237750628821439192870733596394500691724064619963052884427795391310627 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,near_one,4099,10322096095657499359,216.635189,213.881562,212.956798,180.000000,32.956798,yes,Both,yes,"[1.1332197959754742,3.1453167736324843e-17,-1.7460015509132478e-33,9.6922556142756011e-50]",0.97250944030282146673684576741712972459065785505278761629557943342964766102358922,0.97250944030282146673684576741712972459065785505278761629557943335352570304596911 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,qdpp,qdreal,qdpp qd_real,qdpp asinh,near_one,4099,10322096095657499359,216.415753,213.748418,212.729910,,,,NaN,no,"[0.51219531759267378,1.4216275867414523e-17,-7.8916183962132866e-34,4.380728222515721e-50]",0.49209295889781557619335492062425050518716114803411505818752064220215925285806896,0.49209295889781557619335492062425050518716114803411505818752064215708140967221009 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,near_one,4099,10322096095657499359,215.876528,214.126921,214.013004,,,,Both,yes,"[1.1875368477178503,3.2960768773178392e-17,-1.8296902200664262e-33,1.015682105124608e-49]",1.0079699008676541316864431653897165142746758838264996787682714615557319327196561,1.0079699008676541316864431653897165142746758838264996787682714615177904855312488 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,near_one,4099,10322096095657499359,238.909508,237.158686,237.032021,,,,No,no,"[0.53019894096351738,1.4715976797239277e-17,-8.1690081350723071e-34,4.534710459953743e-50]",0.5080581849197998622111617267798195476409931094147435536188404419103933361747497,0.50805818491979986221116172677981954764099310941474355361884044191039333392483875 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,moderate,4099,10322096095657499356,217.749152,214.561309,213.166747,180.000000,33.166747,yes,Both,yes,"[-1.1129700329637249,-3.089112390785367e-17,1.7148018509523894e-33,-9.519062487985893e-50]",-0.95904342784556441854164089194266034008522852163619683195211288936138295400619663,-0.95904342784556441854164089194266034008522852163619683195211288929648167565369013 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,qdpp,qdreal,qdpp qd_real,qdpp asinh,moderate,4099,10322096095657499356,217.302859,214.201948,0.000000,,,,NaN,no,"midpoint [0,0,0,0]",0.010530563626045119041838075907720498032440480253679950729852028848942674760935307,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,moderate,4099,10322096095657499356,215.877848,214.173161,214.033343,,,,Both,yes,"[-3.6635680838067728,-1.0168444097310361e-16,5.6446203807238641e-33,-3.1333937559740255e-49]",-2.0097113700181062349692108160003517092300304063443186921409136491157467461994281,-2.0097113700181062349692108160003517092300304063443186921409136490411573171997093 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,moderate,4099,10322096095657499356,238.871807,237.170538,237.026506,,,,No,no,"[3.7225679300655514,1.0332201566724962e-16,-5.7355240372230841e-33,3.1838554222080507e-49]",2.0251321587728640177526991897930401616261596463681306941092379777810078632497695,2.0251321587728640177526991897930401616261596463681306941092379777810078722523164 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,moderate,4099,10322096095657499275,218.344248,215.313498,214.386548,180.000000,34.386548,yes,Both,-,"[1.2091565801750435,3.3560836892183684e-17,-1.8630006921695854e-33,1.0341731316696386e-49]",0.63599796632531509013285885414670992566643851908950877932499299079883667837099078,0.63599796632531509013285885414670992566643851908950877932499299078035785994962717 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,qdpp,qdreal,qdpp qd_real,qdpp acosh,moderate,4099,10322096095657499275,217.694736,214.740758,0.000000,,,,NaN,-,"lower endpoint [1,0,0,0]",0.010530563626045119041838075907720498032440480253679950729852028848942674760935307,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,moderate,4099,10322096095657499275,216.070027,214.284491,214.051325,,,,Both,-,"[3.9804489193453434,1.1047965096503807e-16,-6.1328526126968082e-33,3.4044170886242721e-49]",2.0583757948565598827690570382144203121626552510542194966987158277315739908333351,2.0583757948565598827690570382144203121626552510542194966987158278070232872093508 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,moderate,4099,10322096095657499275,239.001647,237.267792,237.031139,,,,No,-,"[3.8470512568523638,1.0677712205676603e-16,-5.9273209705316151e-33,3.290324107913864e-49]",2.0231171805463747601489123488705841544306082856720398407062424076130979843332333,2.0231171805463747601489123488705841544306082856720398407062424076130979753684794 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,boundary,4101,10322096095657499355,217.097508,214.442677,213.709421,180.000000,33.709421,yes,Both,-,"[1.0000006102559529,2.7755592553634159e-17,-1.5407448957579594e-33,8.552852291720866e-50]",0.0011047677501095367049219422532381969737795314787741324983406649673871900506886361,0.0011047677501095367049219422532381969737795314787741324983406649674385145712399472 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,qdpp,qdreal,qdpp qd_real,qdpp acosh,boundary,4101,10322096095657499355,216.265059,213.614093,0.000000,,,,NaN,-,"[1,0,0,0]",0.010530563626045119041838075907720498032440480253679950729852028848942674760935307,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,boundary,4101,10322096095657499355,215.787044,214.197277,214.011139,,,,Both,-,"[1.0000004798826352,2.7755588935047681e-17,-1.5407446948860582e-33,8.5528511766578175e-50]",0.00097967606567821465227959033002276095886277869454081491023270410424438341810175862,0.00097967606567821465227959033002276095886277869454081491023270410428130755329103443 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,boundary,4101,10322096095657499355,238.744483,237.183996,237.009868,,,,No,-,"[1.0000004776948863,2.7755588874325452e-17,-1.5407446915152973e-33,8.5528511579463359e-50]",0.00097744038008420457683225652626186507017705275000499519763155267944135176427726761,0.00097744038008420457683225652626186507017705275000499519763155267944135175988174397 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,moderate,4099,10322096095657499356,217.309730,214.164921,213.300563,180.000000,33.300563,yes,Both,yes,"[0.0664478289398438,1.8442977406342098e-18,-1.0237909079581275e-34,5.6831811920850375e-51]",0.066545884848946356015107328012468534613321875154290452987163116978656391412156697,0.066545884848946356015107328012468534613321875154290452987163116974551954049134186 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,qdpp,qdreal,qdpp qd_real,qdpp atanh,moderate,4099,10322096095657499356,216.767588,213.781125,212.510651,,,,Both,no,"[-0.2731802849224898,-7.5822760548652169e-18,4.2090087275876802e-34,-2.336469200108038e-50]",-0.28029737430197434584944109663332529015622293813932679199027623014585727329302096,-0.28029737430197434584944109663332529015622293813932679199027623011596639445887419 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,moderate,4099,10322096095657499356,215.932351,214.156626,214.025325,,,,Both,yes,"[0.12618792670327883,3.5024185413922945e-18,-1.9442328532638911e-34,1.0792660394631177e-50]",0.12686417947725704533840398589369902988592505310826906137934256718603520690203447,0.12686417947725704533840398589369902988592505310826906137934256719076995026763113 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,moderate,4099,10322096095657499356,238.915006,237.181152,237.021503,,,,No,no,"[-0.7623611238227983,-2.1159771818679515e-17,1.174603293445626e-33,-6.5203581059193663e-50]",-1.0018287711046037863407528808033263139274032426947019005363253548223660872400857,-1.0018287711046037863407528808033263139274032426947019005363253548223660917090963 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,boundary,4105,10322096095657499355,219.259597,215.988400,215.075845,180.000000,35.075845,yes,Both,yes,"[0.5,0,0,0]",0.54930614433405484569762261846126285232374527891137472586734716682864483823413374,0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,qdpp,qdreal,qdpp qd_real,qdpp atanh,boundary,4105,10322096095657499355,218.580247,215.278441,0.000000,,,,Both,no,"[-0,0,0,0]",0.0052652818130225595209190379538602490162202401268399753649260144244713373804676535,0 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,boundary,4105,10322096095657499355,216.450204,214.939072,214.927397,,,,Both,yes,"[0.99899936812791412,2.7727802502039826e-17,-1.5392022380011819e-33,8.5442888209174113e-50]",3.7998851729337611663249931195429297240812819127904226139496092933273189181688645,3.7998851729337611663249931195429297240812819127904226139496092934032076288278974 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,boundary,4105,10322096095657499355,239.378421,237.945757,237.372096,,,,No,no,"[-0.5,0,0,0]",-0.54930614433405484569762261846126285232374527891137472586734716681874714853103911,-0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,near_one,4099,10322096095657499359,206.773984,196.847186,196.755396,180.000000,16.755396,yes,Both,yes,"midpoint [1,0,0,0]",0.84270079294971486934122063508260925929606699796630290845993292736409039503759438,0.84270079294971486934122063508260925929606699796630290845993789783471725409601084 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,near_one,4099,10322096095657499359,216.124506,214.293135,214.075088,,,,Both,yes,"[0.50336696437385697,1.3971239842088173e-17,-7.7555960776233127e-34,4.3052206675349773e-50]",0.52345372074479726111600097852706905117450908422992738618016813909422569460796212,0.52345372074479726111600097852706905117450908422992738618016813911309932932453575 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,near_one,4099,10322096095657499359,239.118725,237.303421,237.115344,,,,Inf,no,"[0.50440030951221848,1.3999920931213008e-17,-7.7715172803821719e-34,4.3140587104762828e-50]",0.52435827293177729902931721378772892866957455051554486973327695504018796785804493,0.52435827293177729902931721378772892866957455051554486973327695504018797004982547 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,moderate,4099,10322096095657499356,218.790808,197.061585,196.771033,180.000000,16.771033,yes,Both,yes,"[-1.0144931263435488,-2.8157840679764146e-17,1.5630741523200512e-33,-8.6768045655108495e-50]",-0.84863022897531701967121795328975048026375710416395760800302401037790857858953723,-0.84863022897531701967121795328975048026375710416395760800302896186126856971311395 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,moderate,4099,10322096095657499356,216.403367,214.532827,214.069380,,,,Both,yes,"[0.49346633937062734,1.3696442296169046e-17,-7.6030527963283613e-34,4.2205421359622138e-50]",0.51473949480729290589930415570243436715546197426142443535432835089464450449797338,0.51473949480729290589930415570243436715546197426142443535432835087601149756190686 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,moderate,4099,10322096095657499356,239.359861,237.617935,237.090794,,,,Inf,no,"[-0.47786661764019733,-1.3263463040097327e-17,7.362701026690414e-34,-4.0871201016314884e-50]",-0.50083582704760106751455089603854051657987806254960622390375258121165593721448514,-0.5008358270476010675145508960385405165798780625496062239037525812116559393438727 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,near_one,4099,10322096095657499359,204.316189,192.489437,192.327065,180.000000,12.327065,yes,Both,-,"upper endpoint [1.5,0,0,0]",0.033894853524689272933023738354052141318589520742363219550036458011854403217248196,0.033894853524689272933023738354052141318589520742363219550032153557867145576249274 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,near_one,4099,10322096095657499359,215.962914,214.214759,214.049312,,,,Both,-,"[1.3096161398234563,3.6349149796317988e-17,-2.0177831514710525e-33,1.1200946567319361e-49]",0.064014780147894919119338175302722908573997859037616218424476112030574651226502498,0.06401478014789491911933817530272290857399785903761621842447611203292437484990314 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,near_one,4099,10322096095657499359,238.949059,237.201029,237.018916,,,,Inf,-,"[1.0806471778377253,2.9993984458290972e-17,-1.665000607292187e-33,9.2426100511532716e-50]",0.12644653397051708186289826438531152353975365396358757108160639230306320626900367,0.12644653397051708186289826438531152353975365396358757108160639230306320570393172 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,moderate,4099,10322096095657499356,212.004213,191.066815,189.779688,180.000000,9.779688,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804748240804760826674822248354380927724048326045650379,0.0048523201680211414554273497804748240804760826674822248354416949961916711523801507 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,moderate,4099,10322096095657499356,216.176403,214.211875,214.017843,,,,Both,-,"[2.0385700159174238,5.6581684224549895e-17,-3.1409144299082644e-33,1.7435577592307763e-49]",0.0039394074968276384481347790714740376120684431886149943479747901319899962283757329,0.0039394074968276384481347790714740376120684431886149943479747901321377846972976984 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,moderate,4099,10322096095657499356,239.156924,237.247098,237.053891,,,,Inf,-,"[2.7148354940083514,7.5351821837942075e-17,-4.1828663775967986e-33,2.3219572806691949e-49]",0.00012335686434239937630508063868305400773768378433940295041562371963596822400780945,0.00012335686434239937630508063868305400773768378433940295041562371963596822454587035 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,moderate,4099,10322096095657499323,211.903615,199.617279,199.225949,180.000000,19.225949,yes,Both,-,"[1.7460150498866698,4.8461652743155553e-17,-2.6901621343420086e-33,1.4933399707606258e-49]",-0.085381213564840179500933244532026946446305041549633331800426988753669607008088582,-0.085381213564840179500933244532026946446305041549633331800426897893008666204246091 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lgamma,moderate,4099,10322096095657499323,215.890428,214.160879,214.017847,,,,Both,-,"[7.74079219922106,2.1485014321035056e-16,-1.1926578791807172e-32,6.6205811898352019e-49]",8.0072162948217682208947020187449574175934900903935011829091132045478040802147141,8.0072162948217682208947020187449574175934900903935011829091132048481971689346261 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::lgamma,moderate,4099,10322096095657499323,238.928241,237.162122,237.008749,,,,No,-,"[1.1318513409309559,3.1415185478860126e-17,-1.7438931120750193e-33,9.6805514275545252e-50]",-0.062652393316471695509535673477178105406035057306309915447779751850677317855172516,-0.062652393316471695509535673477178105406035057306309915447779751850677317573207638 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,moderate,4099,10322096095657499320,209.040528,202.582542,202.457020,180.000000,22.457020,yes,Both,-,"[14.307075507958793,3.9710111609966271e-16,-2.2043540109909649e-32,1.2236622887134923e-48]",13896751262.208085922946362879642934303109153237904876709680644672275751079246188,13896751262.208085922946362879642934303109153237904876709680646247264671220863527 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tgamma,moderate,4099,10322096095657499320,215.948239,214.171703,214.004992,,,,Both,-,"[10.766069372828035,2.9881845256063508e-16,-1.6587756310783857e-32,9.2080544915517407e-49]",2098826.7589879936401111657394716259122087725619967530347101090490263605459620521,2098826.7589879936401111657394716259122087725619967530347101090489469177047214057 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::tgamma,moderate,4099,10322096095657499320,238.919522,237.194896,237.040555,,,,No,-,"[9.228183461064674,2.561335438484767e-16,-1.4218267887970798e-32,7.8927241897568378e-49]",65913.214264422430470574974300151351193626993297660765946673758139122704576039683,65913.214264422430470574974300151351193626993297660765946673758139122704866211491 diff --git a/validation/metrics/data/windows/x86_64/detail/MinGW_f256_benchmark.csv b/validation/metrics/data/windows/x86_64/detail/MinGW_f256_benchmark.csv new file mode 100644 index 0000000..bcef19d --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MinGW_f256_benchmark.csv @@ -0,0 +1,294 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,40960,10.516871,10.570325|10.515779|10.544305|10.524517|10.516871|10.510125|10.508776,10895360,114698100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,qdpp,qdreal,qdpp qd_real,qdpp operator+,40960,21.912842,21.912842|22.077637|21.904785,1228800,26990700.000000,2.083589 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator+,40960,58.004761,58.004761|57.853394|58.128662,491520,28506000.000000,5.515401 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,tlfloat,tloct,TLFloat Octuple,TLFloat operator+,40960,126.029053,126.893311|125.908203|126.029053,245760,31033800.000000,11.983512 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,40960,10.410927,10.380088|10.386063|10.410927|10.400519|10.413112|10.475111|10.436305,10895360,113470700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,qdpp,qdreal,qdpp qd_real,qdpp operator-,40960,22.178467,22.267090|22.155762|22.178467,1228800,27279900.000000,2.130307 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator-,40960,58.461914,58.588257|58.461914|58.305054,491520,28730200.000000,5.615438 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,tlfloat,tloct,TLFloat Octuple,TLFloat operator-,40960,125.196533,125.208740|125.196533|125.025635,245760,30755300.000000,12.025493 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,40960,23.156250,23.096680|23.156250|23.159668,1228800,28431400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,qdpp,qdreal,qdpp qd_real,qdpp operator*,40960,36.888021,36.888021|36.896566|36.831462,737280,27185000.000000,1.593005 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator*,40960,88.928223,88.674316|88.928223|88.983561,368640,32758100.000000,3.840355 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,tlfloat,tloct,TLFloat Octuple,TLFloat operator*,40960,121.015625,121.015625|120.718994|121.091309,245760,29722700.000000,5.226046 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,40960,107.009277,107.019043|106.751709|107.009277,245760,26278300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,qdpp,qdreal,qdpp qd_real,qdpp operator/,40960,304.470215,304.645996|304.448242|304.470215,122880,37419600.000000,2.845269 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::operator/,40960,111.942139,112.073975|111.942139|111.812744,245760,27511100.000000,1.046098 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,tlfloat,tloct,TLFloat Octuple,TLFloat operator/,40960,337.341309,337.341309|337.238770|338.210449,122880,41483900.000000,3.152449 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,40960,38.162435,38.194987|38.077799|38.162435,737280,28123600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fma,40960,117.897949,117.944336|117.897949|117.867432,245760,28975900.000000,3.089372 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,tlfloat,tloct,TLFloat Octuple,tlfloat::fma,40960,215.080566,214.824219|215.498047|215.080566,122880,26435700.000000,5.635924 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,40960,1.582144,1.663464|1.627248|1.595633|1.582144|1.577643|1.568609|1.548853,62218240,99225600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,qdpp,qdreal,qdpp qd_real,qdpp abs,40960,1.413042,1.240954|1.513460|1.506219|1.451714|1.413042|1.377614|1.343622,141926400,199642300.000000,0.893118 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::abs,40960,39.743245,39.743245|39.951172|39.259440,737280,29234100.000000,25.119870 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,40960,4.956119,5.073339|5.008866|4.977032|4.956119|4.948763|4.918566|4.897557,21790720,108269500.000000,3.132534 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,40960,1.600566,1.662866|1.645217|1.626189|1.600566|1.579198|1.569656|1.564292,62504960,100436400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,qdpp,qdreal,qdpp qd_real,qdpp fabs,40960,1.450021,1.274505|1.269481|1.446533|1.520099|1.483453|1.457827|1.450021,84295680,119241300.000000,0.905943 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fabs,40960,40.098063,40.100911|39.895426|40.098063,737280,29514400.000000,25.052431 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,tlfloat,tloct,TLFloat Octuple,tlfloat::abs,40960,4.933986,5.109863|5.034951|4.954448|4.933986|4.906102|4.885158|4.878733,21790720,108029800.000000,3.082651 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,40960,22.753906,22.753906|22.821289|22.704102,1228800,27967200.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,qdpp,qdreal,qdpp qd_real,qdpp sqr,40960,15.036903,15.055965|15.036903|15.035213|15.047326|15.066200|15.022536|15.015963,7454720,112119100.000000,0.660849 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,4096,100.988188,100.876581|101.009115|100.988188,258048,26052000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,qdpp,qdreal,qdpp qd_real,qdpp inv,4096,302.472796,302.709961|302.287946|302.472796,86016,26019000.000000,2.995130 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,40960,1.528652,1.532853|1.534576|1.553416|1.528357|1.520370|1.528652|1.526165,75980800,116406800.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,qdpp,qdreal,qdpp qd_real,qdpp min,40960,1.266353,1.336237|1.290579|1.272093|1.266353|1.257881|1.242804|1.236088,81715200,103918800.000000,0.828412 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmin,40960,61.613159,61.750488|61.613159|61.563721,491520,30298500.000000,40.305550 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,tlfloat,tloct,TLFloat Octuple,tlfloat::fmin,40960,99.047038,99.666341|99.047038|98.800456,368640,36558500.000000,64.793713 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,40960,1.632334,1.632334|1.625115|1.622731|1.633282|1.644426|1.635886|1.603343,73113600,119040600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,qdpp,qdreal,qdpp qd_real,qdpp max,40960,1.305177,1.170950|1.165670|1.223058|1.473418|1.369542|1.343821|1.305177,96911360,125315200.000000,0.799577 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmax,40960,61.538696,61.654663|61.519165|61.538696,491520,30263300.000000,37.699824 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,tlfloat,tloct,TLFloat Octuple,tlfloat::fmax,40960,98.581543,98.581543|98.580729|98.805339,368640,36368500.000000,60.393005 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,40960,5.472039,5.501472|5.521512|5.475633|5.451118|5.465122|5.472039|5.444505,20643840,113043900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fdim,40960,50.682129,50.682129|50.689453|50.458984,614400,31094900.000000,9.262019 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,tlfloat,tloct,TLFloat Octuple,tlfloat::fdim,40960,235.983887,236.955566|235.722656|235.983887,122880,29026800.000000,43.125402 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,40960,0.682812,0.696411|0.690760|0.687197|0.679217|0.677214|0.676988|0.682812,154828800,105960400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::copysign,40960,57.917480,57.917480|58.045654|57.869263,491520,28480700.000000,84.822052 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,tlfloat,tloct,TLFloat Octuple,tlfloat::copysign,40960,7.622962,7.700430|7.664889|7.650945|7.622962|7.596623|7.566716|7.553852,14909440,113644900.000000,11.164079 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,40960,1.396501,1.395103|1.397281|1.397951|1.392373|1.392822|1.396501|1.399502,82575360,115269700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,qdpp,qdreal,qdpp qd_real,qdpp floor,40960,1.324383,1.324407|1.323547|1.322134|1.324383|1.327041|1.328639|1.324286,87162880,115483800.000000,0.948358 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::floor,40960,50.177734,50.177734|50.310547|50.140625,614400,30848800.000000,35.931032 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,tlfloat,tloct,TLFloat Octuple,tlfloat::floor,40960,49.332031,49.332031|49.321777|49.341797,614400,30309500.000000,35.325445 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,40960,1.411047,1.412737|1.411021|1.404801|1.419682|1.408484|1.416758|1.411047,81141760,114578300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,qdpp,qdreal,qdpp qd_real,qdpp ceil,40960,1.325837,1.325837|1.322976|1.327182|1.323009|1.324362|1.328762|1.328246,86876160,115177600.000000,0.939612 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ceil,40960,50.606079,50.906982|50.531006|50.606079,491520,24910900.000000,35.864217 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,tlfloat,tloct,TLFloat Octuple,tlfloat::ceil,40960,49.517578,49.517578|49.548828|49.470703,614400,30420400.000000,35.092803 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,40960,2.790801,2.860195|2.823184|2.802695|2.790801|2.771113|2.755215|2.748418,35840000,100104300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,qdpp,qdreal,qdpp qd_real,qdpp aint,40960,2.251709,2.339127|2.326279|2.275681|2.251709|2.242065|2.242935|2.240799,45875200,104324100.000000,0.806833 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::trunc,40960,49.686523,49.686523|49.673828|50.066406,614400,30602600.000000,17.803680 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,tlfloat,tloct,TLFloat Octuple,tlfloat::trunc,40960,38.387451,38.307292|38.387451|38.410238,737280,28288200.000000,13.754995 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,40960,10.205627,10.215698|10.211365|10.205627|10.212219|10.177185|10.178589|10.200745,11468800,116984100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,qdpp,qdreal,qdpp qd_real,qdpp round,40960,11.540039,11.540039|11.538993|11.571498|11.543736|11.538295|11.531459|11.548270,10035200,115852500.000000,1.130753 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::round,40960,119.742432,119.742432|119.946289|119.667969,245760,29438500.000000,11.732981 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,tlfloat,tloct,TLFloat Octuple,tlfloat::round,40960,58.972778,59.018555|58.972778|58.840942,491520,28972200.000000,5.778457 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,40960,9.118402,9.244228|9.211739|9.132237|9.118402|9.076522|9.066882|9.057492,11182080,102088400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,tlfloat,tloct,TLFloat Octuple,tlfloat::rint,40960,64.431763,64.558716|64.431763|64.431152,491520,31690200.000000,7.066124 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,4096,5.086190,5.103547|5.089497|5.085402|5.086190|5.094727|5.079102|5.063571,22220800,113015100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lround,4096,164.379883,164.379883|164.687876|164.372371,159744,26274700.000000,32.318867 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,4096,4.807818,4.820025|4.792077|4.807818|4.815119|4.807993|4.807117|4.800196,23969792,115227400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::llround,4096,261.572266,261.572266|261.013794|262.112427,98304,25713000.000000,54.405608 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,4096,127.529907,127.529907|127.677917|127.416992,196608,25075700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,4096,163.258714,163.300030|163.177960|163.258714,159744,26077500.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,2048,69.569499,69.569499|69.415690|69.599609,368640,25630900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,qdpp,qdreal,qdpp qd_real,qdpp fmod,2048,413.285689,413.285689|413.423295|412.735263,67584,27922200.000000,5.940616 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::fmod,2048,290.108817,289.630999|290.391323|290.108817,86016,24948400.000000,4.170058 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,tlfloat,tloct,TLFloat Octuple,tlfloat::fmod,2048,694.698661,695.598493|694.698661|693.136161,43008,29868100.000000,9.985679 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,2048,99.110874,101.402389|99.110874|98.696403,264192,26349600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,qdpp,qdreal,qdpp qd_real,qdpp drem,2048,425.595703,425.595703|424.848633|426.777344,61440,26157500.000000,4.294137 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remainder,2048,330.367338,331.959886|330.367338|330.074369,79872,26421700.000000,3.333311 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,tlfloat,tloct,TLFloat Octuple,tlfloat::remainder,2048,737.434896,739.290365|736.124674|737.434896,36864,27191500.000000,7.440504 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,2048,99.992051,99.992051|99.813772|100.066997,264192,26408000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,qdpp,qdreal,qdpp qd_real,qdpp divrem,2048,424.575195,425.395508|424.575195|423.232422,61440,26075200.000000,4.246089 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::remquo,2048,367.606608,367.606608|367.248535|367.915853,73728,27101700.000000,3.676358 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,tlfloat,tloct,TLFloat Octuple,tlfloat::remquo,2048,750.838216,750.813802|751.131185|750.838216,36864,27682200.000000,7.508979 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,40960,14.709925,14.696994|14.723850|14.712457|14.695548|14.710015|14.688495|14.709925,7741440,113840400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::modf,40960,235.214844,250.627441|234.631348|235.214844,122880,29510600.000000,15.990214 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,tlfloat,tloct,TLFloat Octuple,tlfloat::modf,40960,315.603027,315.766602|314.902344|315.603027,122880,38759300.000000,21.455108 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,40960,1.704102,1.717358|1.702592|1.696836|1.706012|1.689724|1.706602|1.704102,59351040,101093700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,qdpp,qdreal,qdpp qd_real,qdpp ldexp,40960,18.555749,18.572733|18.585152|18.555749|18.543967|18.517960|18.529637|18.580588,6594560,122362800.000000,10.888875 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ldexp,40960,48.025879,47.985352|48.033691|48.025879,614400,29500400.000000,28.182521 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,tlfloat,tloct,TLFloat Octuple,tlfloat::ldexp,40960,66.085205,66.060791|66.085205|66.199341,491520,32496900.000000,38.780086 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,40960,1.706172,1.710705|1.726373|1.716855|1.702876|1.706172|1.698034|1.700537,67952640,116117000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,qdpp,qdreal,qdpp qd_real,qdpp ldexp,40960,18.565452,18.568226|18.568892|18.546586|18.565452|18.546143|18.584761|18.556685,6307840,117088600.000000,10.881348 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbn,40960,47.525879,47.525879|47.635742|47.429199,614400,29202600.000000,27.855266 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,40960,1.697666,1.711190|1.704360|1.697374|1.691231|1.697666|1.702268|1.693425,62218240,105748900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,qdpp,qdreal,qdpp qd_real,qdpp ldexp,40960,18.555537,18.518491|18.528787|18.560950|18.559676|18.553095|18.555537|18.602773,6594560,122356700.000000,10.930027 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::scalbln,40960,47.709961,47.709961|47.574707|48.116211,614400,29368500.000000,28.103265 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,40960,10.666240,10.677655|10.728067|10.666240|10.644663|10.644399|10.653505|10.673432,10608640,113191100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::frexp,40960,98.385010,98.385010|98.696289|98.262939,245760,24194600.000000,9.223964 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,tlfloat,tloct,TLFloat Octuple,tlfloat::frexp,40960,223.164062,224.443359|222.995605|223.164062,122880,27467900.000000,20.922468 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,40960,1.066212,1.062714|1.063854|1.066328|1.067152|1.067333|1.064215|1.066212,108666880,115773800.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::ilogb,40960,45.313965,45.313965|45.403809|45.311035,614400,27858700.000000,42.499969 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,tlfloat,tloct,TLFloat Octuple,tlfloat::ilogb,40960,31.930804,32.002651|31.930804|31.770717,860160,27440300.000000,29.947902 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,40960,1.077894,1.078543|1.077894|1.076238|1.080030|1.077076|1.078563|1.075816,107806720,116187300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::logb,40960,98.890381,98.974609|98.890381|98.867188,245760,24308300.000000,91.744082 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f256,bl::nextafter,40960,4.644847,4.871381|4.701718|4.671818|4.644847|4.644100|4.633904|4.619887,24371200,114153500.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter,40960,763.554688,767.561035|763.554688|730.783691,122880,92647400.000000,164.387472 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter,40960,163.660889,163.931885|163.643799|163.660889,245760,40242100.000000,35.234935 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f256,bl::nexttoward,40960,4.443498,4.482006|4.452931|4.444608|4.443498|4.442028|4.436729|4.441501,25231360,112255400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::math::nextafter (same type),40960,731.032715,735.014648|731.032715|727.639160,122880,89853400.000000,164.517391 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,tlfloat,tloct,TLFloat Octuple,tlfloat::nextafter (same type),40960,163.737793,163.593750|164.495850|163.737793,245760,40290500.000000,36.848850 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,40960,0.666876,0.665830|0.666876|0.666857|0.667871|0.666365|0.667828|0.680685,176619520,118141100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,qdpp,qdreal,qdpp qd_real,qdpp operator==,40960,0.497504,0.497504|0.497920|0.497360|0.495717|0.495913|0.498840|0.501631,232243200,115620100.000000,0.746022 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator==,40960,6.560872,6.539418|6.586914|6.560872,4055040,26610800.000000,9.838213 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator==,40960,64.830322,65.311890|64.830322|64.634399,491520,31912200.000000,97.214891 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,40960,0.739720,0.743880|0.738975|0.738940|0.740654|0.739959|0.739033|0.739720,157982720,116933400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,qdpp,qdreal,qdpp qd_real,qdpp operator!=,40960,0.483169,0.483169|0.479490|0.476263|0.485399|0.490352|0.484880|0.482128,241418240,116628500.000000,0.653179 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator!=,40960,6.338465,6.346148|6.338106|6.338465,4177920,26491800.000000,8.568741 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator!=,40960,64.596558,64.519043|64.596558|64.619141,491520,31741500.000000,87.325746 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,40960,0.701605,0.702634|0.702369|0.701605|0.700484|0.700384|0.703373|0.699702,161136640,113038500.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,qdpp,qdreal,qdpp qd_real,qdpp operator<,40960,0.517540,0.519694|0.517308|0.520297|0.517540|0.516616|0.517647|0.516715,204431360,105890100.000000,0.737653 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<,40960,6.591167,6.624480|6.587229|6.591167,3809280,25144900.000000,9.394419 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,tlfloat,tloct,TLFloat Octuple,TLFloat operator<,40960,64.667969,64.782715|64.667969|64.628906,491520,31798000.000000,92.171535 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,40960,0.712379,0.714325|0.712379|0.712635|0.707906|0.743927|0.712025|0.707288,158556160,113491900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,qdpp,qdreal,qdpp qd_real,qdpp operator<=,40960,0.512244,0.532230|0.515292|0.512244|0.509685|0.509615|0.506697|0.530434,220200960,113755700.000000,0.719061 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator<=,40960,6.341812,6.359197|6.311553|6.341812,4055040,25698900.000000,8.902306 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator<=,40960,64.580078,64.580078|64.572754|64.681396,491520,31757800.000000,90.654165 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,40960,0.685590,0.685528|0.685170|0.685590|0.685935|0.687699|0.685723|0.685465,168304640,115435600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,qdpp,qdreal,qdpp qd_real,qdpp operator>,40960,0.526507,0.521746|0.522762|0.544913|0.527843|0.530367|0.526507|0.523917,211599360,111786600.000000,0.767961 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>,40960,6.531077,6.531077|6.482564|6.582268,3809280,24882100.000000,9.526212 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,tlfloat,tloct,TLFloat Octuple,TLFloat operator>,40960,64.672852,64.672852|64.531250|64.710083,491520,31770900.000000,94.331655 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,40960,0.685543,0.686052|0.685543|0.684491|0.686139|0.684817|0.686098|0.683948,167731200,114945900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,qdpp,qdreal,qdpp qd_real,qdpp operator>=,40960,0.560411,0.561422|0.563487|0.558767|0.560980|0.555518|0.560411|0.552924,193249280,108040400.000000,0.817471 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost operator>=,40960,6.429084,6.473317|6.429084|6.417954,4177920,26906300.000000,9.378095 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,tlfloat,tloct,TLFloat Octuple,TLFloat operator>=,40960,64.590454,64.590454|64.607544|64.431152,491520,31724200.000000,94.217988 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,40960,120.250244,120.446777|120.250244|120.039062,245760,29551500.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,qdpp,qdreal,qdpp qd_real,qdpp sqrt,40960,599.777832,599.077148|599.785156|599.777832,122880,73672300.000000,4.987747 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sqrt,40960,148.713379,153.679199|148.713379|148.625488,122880,18473700.000000,1.236699 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,tlfloat,tloct,TLFloat Octuple,tlfloat::sqrt,40960,511.679688,512.805176|511.433105|511.679688,122880,62911200.000000,4.255124 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,1024,382.333519,382.705543|381.510417|382.333519,64512,24655400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,qdpp,qdreal,qdpp qd_real,qdpp nroot,1024,1452.099609,1451.985677|1453.906250|1452.099609,18432,26775500.000000,3.797992 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cbrt,1024,483.857996,482.548254|483.857996|485.690487,52224,25278100.000000,1.265539 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,tlfloat,tloct,TLFloat Octuple,tlfloat::cbrt,1024,3073.958333,3081.998698|3073.958333|3071.028646,9216,28345300.000000,8.039992 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,4096,175.204190,175.499379|175.204190|175.179776,135168,23694200.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::hypot,4096,583.410645,584.020996|582.312012|583.410645,49152,28667800.000000,3.329890 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,tlfloat,tloct,TLFloat Octuple,tlfloat::hypot,4096,570.324707,570.196533|570.324707|573.016357,49152,28074600.000000,3.255200 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,1024,897.829861,900.000000|896.668837|897.829861,27648,24832500.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,qdpp,qdreal,qdpp qd_real,qdpp sin,1024,2524.316406,2533.886719|2520.751953|2524.316406,12288,31043400.000000,2.811575 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sin,1024,2134.667969,2132.226562|2140.185547|2134.667969,12288,26243400.000000,2.377586 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,tlfloat,tloct,TLFloat Octuple,tlfloat::sin,1024,6093.066406,6106.933594|6092.382812|6093.066406,6144,37462800.000000,6.786438 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,1024,897.490234,900.039062|894.462891|897.490234,30720,27566000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,qdpp,qdreal,qdpp qd_real,qdpp cos,1024,2542.895508,2540.185547|2544.067383|2542.895508,12288,31240800.000000,2.833341 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cos,1024,1681.119792,1677.604167|1681.119792|1682.112630,18432,30970900.000000,1.873134 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,tlfloat,tloct,TLFloat Octuple,tlfloat::cos,1024,6087.109375,6087.011719|6099.023438|6087.109375,6144,37423400.000000,6.782368 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,fltx,fltx,fltx bl::f256,bl::sincos,1024,1114.880371,1116.284180|1112.329102|1114.880371,24576,27389900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,qdpp,qdreal,qdpp qd_real,qdpp sincos,1024,2723.681641,2726.025391|2719.409180|2723.681641,12288,33460700.000000,2.443026 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,tlfloat,tloct,TLFloat Octuple,tlfloat::sincos,1024,12232.421875,12232.421875|12222.070312|12232.812500,3072,37567800.000000,10.971959 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,1024,1208.593750,1209.542411|1208.593750|1205.747768,21504,25976000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,qdpp,qdreal,qdpp qd_real,qdpp tan,1024,3023.697917,3030.533854|3022.656250|3023.697917,9216,27884200.000000,2.501832 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tan,1024,2387.060547,2381.738281|2388.256836|2387.060547,12288,29315300.000000,1.975073 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,tlfloat,tloct,TLFloat Octuple,tlfloat::tan,1024,7095.410156,7099.462891|7095.410156|7086.767578,6144,43584800.000000,5.870798 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,1024,908.441840,908.441840|909.483507|906.987847,27648,25112800.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,qdpp,qdreal,qdpp qd_real,qdpp atan,1024,8332.128906,8339.746094|8313.574219|8332.128906,3072,25585100.000000,9.171890 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan,1024,3097.070312,3090.266927|3108.300781|3097.070312,9216,28556200.000000,3.409211 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,tlfloat,tloct,TLFloat Octuple,tlfloat::atan,1024,8061.621094,8071.875000|8041.015625|8061.621094,3072,24754700.000000,8.874119 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,1024,972.873264,972.873264|973.643663|971.625434,27648,26893600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,qdpp,qdreal,qdpp qd_real,qdpp atan2,1024,8261.718750,8253.417969|8261.718750|8267.089844,3072,25377000.000000,8.492081 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atan2,1024,3143.977865,3147.656250|3143.977865|3141.113281,9216,28977400.000000,3.231642 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,tlfloat,tloct,TLFloat Octuple,tlfloat::atan2,1024,8180.566406,8180.566406|8226.855469|8176.464844,3072,25173900.000000,8.408666 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,1024,1399.902344,1399.902344|1397.298177|1400.895182,18432,25793100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,qdpp,qdreal,qdpp qd_real,qdpp asin,1024,11469.433594,11555.859375|11469.433594|11465.332031,3072,35318400.000000,8.193024 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asin,1024,6991.796875,6987.158203|6991.796875|6991.943359,6144,42948400.000000,4.994489 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,tlfloat,tloct,TLFloat Octuple,tlfloat::asin,1024,8844.531250,8844.531250|8836.230469|8866.308594,3072,27184200.000000,6.317963 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,1024,1417.692057,1417.692057|1421.923828|1413.802083,18432,26133000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,qdpp,qdreal,qdpp qd_real,qdpp acos,1024,11462.597656,11477.734375|11462.597656|11459.179688,3072,35225100.000000,8.085393 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acos,1024,7174.755859,7174.755859|7177.197266|7169.140625,6144,44075200.000000,5.060870 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,tlfloat,tloct,TLFloat Octuple,tlfloat::acos,1024,8827.734375,8822.070312|8827.734375|8885.937500,3072,27172600.000000,6.226835 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,1024,1077.917480,1077.917480|1080.786133|1072.546387,24576,26470400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,qdpp,qdreal,qdpp qd_real,qdpp exp,1024,2824.739583,2824.739583|2826.888021|2822.753906,9216,26033300.000000,2.620553 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp,1024,1343.540737,1344.084821|1343.540737|1342.550223,21504,28888300.000000,1.246423 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,tlfloat,tloct,TLFloat Octuple,tlfloat::exp,1024,4114.095052,4112.630208|4126.627604|4114.095052,9216,37949500.000000,3.816707 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,1024,908.691406,908.691406|909.541016|908.652344,30720,27923300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::exp2,1024,1682.666016,1683.284505|1682.666016|1680.305990,18432,31004200.000000,1.851746 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,tlfloat,tloct,TLFloat Octuple,tlfloat::exp2,1024,10137.402344,10128.906250|10140.429688|10137.402344,3072,31136500.000000,11.156045 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,1024,1072.973633,1076.171875|1072.973633|1071.997070,24576,26387600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,qdpp,qdreal,qdpp qd_real,qdpp expm1,1024,2809.228516,2812.109375|2802.465820|2809.228516,12288,34503900.000000,2.618171 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::expm1,1024,1528.141276,1524.153646|1528.141276|1528.727214,18432,28145800.000000,1.424211 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,tlfloat,tloct,TLFloat Octuple,tlfloat::expm1,1024,4255.924479,4255.924479|4259.082031|4253.971354,9216,39226300.000000,3.966476 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,1024,1781.660156,1785.214844|1781.660156|1779.824219,15360,27375100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,qdpp,qdreal,qdpp qd_real,qdpp log,1024,8948.925781,8954.296875|8947.460938|8948.925781,3072,27495100.000000,5.022802 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log,1024,2809.545898,2802.612305|2810.449219|2809.545898,12288,34499000.000000,1.576926 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,tlfloat,tloct,TLFloat Octuple,tlfloat::log,1024,5255.322266,5255.322266|5245.703125|5265.332031,6144,32289500.000000,2.949677 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,1024,1830.195312,1830.195312|1850.917969|1825.859375,15360,28195700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log2,1024,3085.579427,3079.427083|3089.192708|3085.579427,9216,28428900.000000,1.685929 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,tlfloat,tloct,TLFloat Octuple,tlfloat::log2,1024,5412.792969,5412.792969|5406.445312|5423.583984,6144,33265300.000000,2.957495 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,1024,1826.367188,1826.738281|1822.597656|1826.367188,15360,28035600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,qdpp,qdreal,qdpp qd_real,qdpp log10,1024,9338.183594,9351.757812|9338.183594|9328.906250,3072,28691300.000000,5.112983 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log10,1024,5529.980469,5530.908203|5529.980469|5529.150391,6144,33976400.000000,3.027858 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,tlfloat,tloct,TLFloat Octuple,tlfloat::log10,1024,5439.550781,5442.968750|5428.173828|5439.550781,6144,33404300.000000,2.978345 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,1024,1835.000000,1836.992188|1831.835938|1835.000000,15360,28179600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,qdpp,qdreal,qdpp qd_real,qdpp log1p,1024,8933.789062,8932.910156|8946.191406|8933.789062,3072,27456400.000000,4.868550 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::log1p,1024,2912.239583,2912.597656|2905.273438|2912.239583,9216,26818900.000000,1.587052 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,tlfloat,tloct,TLFloat Octuple,tlfloat::log1p,1024,6412.451172,6415.820312|6403.173828|6412.451172,6144,39386000.000000,3.494524 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,1024,2712.353516,2712.500000|2709.692383|2712.353516,12288,33319100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,qdpp,qdreal,qdpp qd_real,qdpp pow,1024,9603.125000,9643.261719|9603.125000|9536.328125,3072,29473500.000000,3.540514 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::pow,1024,3571.940104,3571.940104|3570.149740|3574.674479,9216,32921900.000000,1.316915 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,tlfloat,tloct,TLFloat Octuple,tlfloat::pow,1024,20410.839844,20439.257812|20410.839844|20409.570312,3072,62729900.000000,7.525140 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,4096,121.609318,121.609318|121.734260|121.382410,208896,25396600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,qdpp,qdreal,qdpp qd_real,qdpp npwr,4096,144.393921,143.600464|144.393921|145.056152,196608,28380400.000000,1.187359 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,"boost::multiprecision::pow(value, int)",4096,272.244263,271.795654|272.561646|272.244263,98304,26758400.000000,2.238679 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,fltx,fltx,fltx bl::f256,bl::product_sum,4096,46.246338,46.246338|46.441096|46.139804,540672,25020000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,qdpp,qdreal,qdpp qd_real,same expression,4096,118.120660,118.149143|117.780219|118.120660,221184,26103400.000000,2.554162 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same expression,4096,210.300293,211.130371|210.114746|210.300293,122880,25868100.000000,4.547393 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,tlfloat,tloct,TLFloat Octuple,same expression,4096,372.338867,371.724447|372.375488|372.338867,73728,27437600.000000,8.051208 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,1024,1361.425781,1353.011068|1364.469401|1361.425781,18432,25060800.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,qdpp,qdreal,qdpp qd_real,qdpp sinh,1024,3267.675781,3320.996094|3267.675781|3265.071615,9216,30270700.000000,2.400187 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::sinh,1024,1596.126302,1601.041667|1596.126302|1595.800781,18432,29448000.000000,1.172393 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,tlfloat,tloct,TLFloat Octuple,tlfloat::sinh,1024,4810.791016,4806.689453|4811.523438|4810.791016,6144,29550600.000000,3.533642 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,1024,1360.867746,1347.921317|1360.867746|1364.313616,21504,29196000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,qdpp,qdreal,qdpp qd_real,qdpp cosh,1024,3250.358073,3265.820312|3250.358073|3247.753906,9216,29994800.000000,2.388445 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::cosh,1024,1566.422526,1571.191406|1566.422526|1563.720703,18432,28885000.000000,1.151047 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,tlfloat,tloct,TLFloat Octuple,tlfloat::cosh,1024,4438.916016,4445.166016|4432.958984|4438.916016,6144,27273300.000000,3.261828 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,1024,1315.513393,1315.513393|1315.876116|1315.415737,21504,28290700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,qdpp,qdreal,qdpp qd_real,qdpp tanh,1024,3233.854167,3230.436198|3233.854167|3237.467448,9216,29803800.000000,2.458245 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tanh,1024,1645.377604,1645.377604|1648.746745|1645.003255,18432,30346000.000000,1.250749 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,tlfloat,tloct,TLFloat Octuple,tlfloat::tanh,1024,4700.537109,4702.587891|4700.537109|4692.333984,6144,28867500.000000,3.573158 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,1024,2757.845052,2765.559896|2753.548177|2757.845052,9216,25426800.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,qdpp,qdreal,qdpp qd_real,qdpp asinh,1024,8725.976562,8732.324219|8725.976562|8697.167969,3072,26783200.000000,3.164056 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::asinh,1024,7274.853516,7273.486328|7278.320312|7274.853516,6144,44701000.000000,2.637876 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,tlfloat,tloct,TLFloat Octuple,tlfloat::asinh,1024,19422.851562,19422.558594|19455.566406|19422.851562,3072,59700200.000000,7.042764 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,1024,2547.802734,2554.150391|2536.450195|2547.802734,12288,31286900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,qdpp,qdreal,qdpp qd_real,qdpp acosh,1024,9531.835938,9529.101562|9533.300781|9531.835938,3072,29280500.000000,3.741199 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::acosh,1024,4438.525391,4436.132812|4446.679688|4438.525391,6144,27282100.000000,1.742099 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,tlfloat,tloct,TLFloat Octuple,tlfloat::acosh,1024,18247.558594,18283.886719|18247.558594|18238.574219,3072,56084500.000000,7.162077 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,1024,2427.343750,2429.321289|2427.343750|2420.410156,12288,29806900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,qdpp,qdreal,qdpp qd_real,qdpp atanh,1024,9354.589844,9360.839844|9335.058594|9354.589844,3072,28723700.000000,3.853838 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::atanh,1024,3489.843750,3477.213542|3489.843750|3491.829427,9216,32129700.000000,1.437721 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,tlfloat,tloct,TLFloat Octuple,tlfloat::atanh,1024,6364.892578,6364.892578|6366.699219|6351.513672,6144,39082200.000000,2.622164 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,128,12755.468750,12853.125000|12755.468750|12743.750000,384,4909100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erf,128,27657.031250,27642.968750|27657.031250|27661.718750,384,10619100.000000,2.168249 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,tlfloat,tloct,TLFloat Octuple,tlfloat::erf,128,231077.343750,231077.343750|231387.500000|230895.312500,384,88750100.000000,18.115943 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,128,12796.093750,12960.156250|12796.093750|12757.812500,384,4929800.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::erfc,128,44818.750000,44895.312500|44802.343750|44818.750000,384,17218100.000000,3.502534 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,tlfloat,tloct,TLFloat Octuple,tlfloat::erfc,128,231271.093750,231271.093750|231605.468750|230965.625000,384,88811800.000000,18.073570 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,128,9141.406250,9141.406250|9175.781250|9032.031250,384,3500700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::lgamma,128,17618.750000,17605.468750|17639.843750|17618.750000,384,6766600.000000,1.927357 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::lgamma,128,82210.937500,82317.187500|82124.218750|82210.937500,384,31571500.000000,8.993248 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,128,10132.812500,10192.968750|10132.812500|10125.000000,384,3897700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,boost::multiprecision::tgamma,128,20492.187500,20531.250000|20492.187500|20466.406250,384,7870700.000000,2.022359 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,tlfloat,tloct,TLFloat Octuple,tlfloat::tgamma,128,91828.906250,91828.906250|91674.218750|91919.531250,384,35254100.000000,9.062529 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,4099,347.366954,347.718956|347.366954|347.084655,86079,29903000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,qdpp,qdreal,qdpp qd_real,qdpp to_string,4099,4156.745548,4156.745548|4150.817273|4157.306660,12297,51093500.000000,11.966439 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost number::str,4099,513.613076,513.857038|513.471578|513.613076,61485,31581600.000000,1.478589 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,tlfloat,tloct,TLFloat Octuple,tlfloat::to_string,4099,14336.252745,14336.252745|14341.595511|14330.056111,12297,176289400.000000,41.271205 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,4099,308.155299,308.155299|307.967100|309.340257,86079,26554300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,qdpp,qdreal,qdpp qd_real,qdpp write,4099,4158.916809,4158.209319|4158.916809|4163.454501,12297,51157900.000000,13.496172 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,4099,386.740668,385.321623|386.789461|386.740668,73782,28500800.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,qdpp,qdreal,qdpp qd_real,qdpp read,4099,2395.852647,2401.390583|2395.852647|2386.850451,12297,29447600.000000,6.194985 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,Boost string constructor,4099,319.042972,319.042972|319.795769|318.997665,86079,27483200.000000,0.824953 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,tlfloat,tloct,TLFloat Octuple,TLFloat string constructor,4099,10590.851427,10590.851427|10595.364723|10570.773359,12297,130171900.000000,27.384892 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,mt19937_64,fltx,fltx,fltx bl::f256,bl::mt19937_64,64,5.052864,5.052864|5.044997|5.053389,5148288,26001000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,uniform_real,fltx,fltx,fltx bl::f256,bl::uniform_real,64,42.444796,42.444796|42.393913|42.578245,624960,26543500.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,uniform_real,qdpp,qdreal,qdpp qd_real,qdpp qdrand,64,50.425770,50.369884|50.425770|50.471861,520704,26255200.000000,1.188032 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,normal,fltx,fltx,fltx bl::f256,bl::normal,64,367.940771,368.035468|367.940771|366.795799,69696,25619600.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f256,same workload,64,164.733213,165.098546|164.298561|164.733213,160128,26374700.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,qdpp,qdreal,qdpp qd_real,same workload,64,417.581687,417.581687|416.418123|418.588526,63168,26374500.000000,2.534897 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,466.484375,466.473958|467.677083|466.484375,57600,26892200.000000,2.831757 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,tlfloat,tloct,TLFloat Octuple,same workload,64,1016.709422,1017.012593|1016.709422|1014.680504,25728,26143100.000000,6.171854 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f256,same workload,64,1834.437500,1837.708333|1834.437500|1829.583333,14400,26408300.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,qdpp,qdreal,qdpp qd_real,same workload,64,5131.069712,5131.069712|5133.413462|5127.824519,4992,25612800.000000,2.797081 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,3071.540179,3073.139881|3060.081845|3071.540179,8064,24742400.000000,1.674377 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,tlfloat,tloct,TLFloat Octuple,same workload,64,13073.437500,13073.437500|13084.375000|13032.812500,192,2508200.000000,7.126674 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f256,same workload,64,117.370217,117.488446|117.370217|117.006126,223296,26190000.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,qdpp,qdreal,qdpp qd_real,same workload,64,304.327190,305.428908|304.181680|304.327190,86592,26379900.000000,2.592883 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,537.590492,537.590492|538.272201|537.162162,49728,26737500.000000,4.580297 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,tlfloat,tloct,TLFloat Octuple,same workload,64,963.853433,963.853433|962.665053|964.678697,27264,26275200.000000,8.212078 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f256,same workload,64,528.529199,529.428089|527.491554|528.529199,49728,26280400.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,qdpp,qdreal,qdpp qd_real,same workload,64,1378.873698,1383.642578|1376.464844|1378.873698,18432,25429900.000000,2.608888 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,1976.426630,1976.426630|1977.807971|1973.596014,13248,26177300.000000,3.739484 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,tlfloat,tloct,TLFloat Octuple,same workload,64,4422.933468,4419.052419|4422.933468|4423.437500,5952,26318600.000000,8.368381 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f256,same workload,64,422.572272,422.572272|424.928746|421.233713,58944,24928100.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,qdpp,qdreal,qdpp qd_real,same workload,64,872.012579,873.172170|870.568003|872.012579,30528,26617900.000000,2.063582 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,64,1191.606748,1190.210177|1194.068031|1191.606748,21696,25860800.000000,2.819889 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,tlfloat,tloct,TLFloat Octuple,same workload,64,2410.128348,2406.640625|2413.895089|2410.128348,10752,25914700.000000,5.703470 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,fltx,fltx,fltx bl::f256,same workload,8,236.779745,237.516494|236.636793|236.779745,109128,25860900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,qdpp,qdreal,qdpp qd_real,same workload,8,631.033237,631.033237|631.141618|629.877168,41520,26186000.000000,2.665064 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,8,464.354167,463.812500|464.354167|464.354167,57600,26736400.000000,1.961123 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,tlfloat,tloct,TLFloat Octuple,same workload,8,1333.720930,1334.118727|1332.894737|1333.720930,19608,26148800.000000,5.632749 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f256,same workload,8,9212.500000,9262.500000|9212.500000|9212.500000,24,221500.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,qdpp,qdreal,qdpp qd_real,same workload,8,26262.500000,26425.000000|26262.500000|26212.500000,24,631200.000000,2.850746 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,8,12925.000000,12925.000000|13137.500000|12712.500000,24,310200.000000,1.402985 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,tlfloat,tloct,TLFloat Octuple,same workload,8,38675.000000,38575.000000|38712.500000|38675.000000,24,927700.000000,4.198100 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,fltx,fltx,fltx bl::f256,same workload,8,4722.575431,4731.627155|4714.924569|4722.575431,5568,26297900.000000, +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,qdpp,qdreal,qdpp qd_real,same workload,8,21975.000000,22200.000000|21975.000000|21887.500000,24,528500.000000,4.653181 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,mpfr64,mpfr64,boost::multiprecision::mpfr_float_backend<64>,same workload,8,12525.000000,12687.500000|12525.000000|12475.000000,24,301500.000000,2.652155 +6,1bc36f9be0894bcfb934a2e01311a61e,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,tlfloat,tloct,TLFloat Octuple,same workload,8,35600.000000,35600.000000|35600.000000|35887.500000,24,856700.000000,7.538260 diff --git a/validation/metrics/data/windows/x86_64/detail/MinGW_f256_fastmath_accuracy.csv b/validation/metrics/data/windows/x86_64/detail/MinGW_f256_fastmath_accuracy.csv new file mode 100644 index 0000000..73db62f --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MinGW_f256_fastmath_accuracy.csv @@ -0,0 +1,128 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,domain,samples,seed,mean_bits,p01_bits,worst_bits,required_worst_bits,margin_bits,pass,special_support,signed_zero_support,worst_input,observed,reference +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,moderate,4097,10322096095657499311,219.944958,215.547580,215.029639,212.000000,3.029639,yes,Both,yes,-6.32659778225233051069632927545029475138801079375645295548611539482289480950893866e-02,-0.063265977822523305106963292754502947513880107937564529554861153949406008699572901,-0.063265977822523305106963292754502947513880107937564529554861153948228948095089387 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,wide_exponent,4098,10322096095657499308,219.514420,212.275332,212.017147,212.000000,0.017147,yes,Both,yes,2.47163553801407265315232159817868248210487207087397698019878061850401032407603178e-277,2.4716355380140726531523215981786824821048720708495655738821672043746801610949361e-277,2.4716355380140726531523215981786824821048720708739769801987806185040103240760318e-277 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,yes,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,yes,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,moderate,4099,10322096095657499356,220.405407,217.506231,217.050134,190.000000,27.050134,yes,Both,no,"[1.0379314664868868,2.8808385301917395e-17,-1.5991866332230817e-33,8.877269104385253e-50]",1.03793146648688686223081696599309586297624375508573570105917860787e+00,1.037931466486886862230816965993095862976243755085735701059178607874759571842185 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,wide_exponent,4096,10322096095657499357,220.476030,217.235897,216.975800,190.000000,26.975800,yes,Both,no,"[-1.0303688651667398e-252,-2.85984809491252e-269,1.5875346009511349e-285,-8.8125873318252993e-302]",-1.03036886516673986386922212000525622466493584928066288895998979732e-252,-1.0303688651667398638692221200052562246649358492806628889599897973150252803459425e-252 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",true,true +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,moderate,8198,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",false,false +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,general,3770,10322096095657499292,225.979394,215.583815,215.297307,190.000000,25.297307,yes,Both,no,"representative lhs [-4.4462634936433036e+21,-123408.6026048271,6.8505536024347558e-12,-3.8028211704259384e-28] ; representative rhs [-1.5864490641473432e+22,-440328.06960285309,2.4443118063091801e-11,-1.3568656233637788e-27]",-20310754135116736403992.672207680164858397009037806754206012036634323297640103087,-20310754135116736403992.672207680164858397009037806754206012036634009406784094328 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,subnormal,326,10322096095657499292,222.605032,0.000000,0.000000,190.000000,-190.000000,no,Both,no,"extreme lhs [-2.9980406804279035e-308,-0,0,-0] ; extreme rhs [2.9542193897354755e-308,0,-0,0]",0,-4.3821290692427974407505781114221845407653341587306362737985196611183341144163723e-310 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,general,3791,10322096095657499292,226.122784,215.602917,214.719416,190.000000,24.719416,yes,Both,no,"broad lhs [2.9036126255171338e-253,8.0591439786035607e-270,-4.4737236019074315e-286,2.4834154743233092e-302] ; broad rhs [8.6469461054410999e-256,2.4000096647383839e-272,-1.3322729945577283e-288,7.3956007682214789e-305]",2.8949656794116927889799973623775086555443420369995178008741520004413204233996403e-253,2.8949656794116927889799973623775086555443420369995178008741520003745385581825707e-253 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,subnormal,305,10322096095657499292,227.723556,0.000000,0.000000,190.000000,-190.000000,no,Both,no,"extreme lhs [-2.9529433938248733e-308,-0,0,-0] ; extreme rhs [-2.9863972891780103e-308,-0,0,-0]",0,3.3453895353137016378606184865007417773817611335724850610595004473929343115122124e-310 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,general,4000,10322096095657499292,220.010524,216.259138,215.221541,190.000000,25.221541,yes,NaN,no,"representative lhs [178155706607.60782,4.9448141861032585e-06,-2.7449232809524707e-22,1.5237385136715302e-38] ; representative rhs [-876535372423071.12,-0.024328743809062001,1.3505165768513684e-18,-7.4968729937916942e-35]",-156159778640594921198000750.60038241930403290903625769183688852217377918301809189,-156159778640594921198000750.60038241930403290903625769183688852217632267056740194 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,subnormal,100,10322096095657499292,221.469015,215.608028,215.608028,190.000000,25.608028,yes,NaN,no,"extreme lhs [-5.3809439414843993e+270,-1.4935119645133053e+254,8.2906568527791063e+237,-4.6022390636108503e+221] ; extreme rhs [-4.596668242019171e-261,-1.2758317297132313e-277,7.0822888093748442e-294,-3.931460051606543e-310]",24734414127.906804259564005392277744744307358869933187588284984254854603209456978,24734414127.906804259564005392277744744307358869933187588284984255162792737796103 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,general,4045,10322096095657499292,219.218459,215.287455,214.762066,190.000000,24.762066,yes,Both,yes,"representative lhs [2268851457486.2539,6.2973278188889589e-05,-3.49571916907152e-21,1.940513954563361e-37] ; representative rhs [0.00093095878597111432,2.5839296979055357e-20,-1.4343691223137255e-36,7.9623481270203769e-53]",2437112675315200.8552398842775006307979109182413214802574225974607596074455830965,2437112675315200.8552398842775006307979109182413214802574225974607050251573596225 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,subnormal,55,10322096095657499292,166.596649,54.000000,54.000000,190.000000,-136.000000,no,Both,yes,"subnormal-limb operand [9.3326361850321888e-302,5.1806537865363094e-318,0,0] ; scaling operand [1.1830521861667747e-271,0,0,0]",7.888609052210118054117285652827862296732064351090230047702789306640625e-31,7.8886090522101184920230557543331969603975591291890210727846461430518036740838387e-31 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,moderate,4099,10322096095657499356,219.883649,215.654212,215.160161,190.000000,25.160161,yes,Both,no,"[1.2843679126351581,3.5648370717432602e-17,-1.9788820980433443e-33,1.0985002341331286e-49] ; [-2.3308777059725987,-6.4694852418906121e-17,3.5912857365098039e-33,-1.9935640563405487e-49] ; [5.2042205184851724,1.4444613612122271e-16,-8.0183713069960479e-33,4.451090222510361e-49]",2.2105159846573199203800006655584861882250236763069688164874765011598446438714347,2.2105159846573199203800006655584861882250236763069688164874765011222755061934085 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,Both,no,"one [1,0,0,0] ; next double after one [1.0000000000000002,2.775557561562892e-17,-1.540743955509789e-33,8.552847072295028e-50] ; native product cancellation",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,wide_exponent,4096,10322096095657499357,225.262959,215.958051,215.096656,190.000000,25.096656,yes,Both,no,"[5.0695695241027842e+79,1.4070882026492271e+63,-7.8109086012980007e+46,4.3359252862018586e+30] ; [-1.285263546577847e-53,-3.5673229553052827e-70,1.9802620406268915e-86,-1.0992662561475861e-102] ; [-9312.4534885580761,-2.5847250696870095e-13,1.4348106423461901e-29,-7.9647990555497543e-46]",-651573290617131278652235925.796582770520137295580825262259286558273807300279549,-651573290617131278652235925.79658277052013729558082526225928655828537955033923283 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,no,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,subnormal,4100,10322096095657499350,125.332683,0.000000,0.000000,190.000000,-190.000000,no,Both,no,"[-2.5040482095348978e-318,0,0,0]",-2.5040482095348977975228947844543629704892143446000514872999746353340486397222355e-318,2.5040482095348977975228947844543629704892143446000514872999746353340486397222355e-318 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,no,"lower endpoint [-8,0,0,0]",8,8 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,moderate,4099,10322096095657499356,220.145544,216.285104,215.251190,190.000000,25.251190,yes,Both,yes,"[-0.36144099270550889,-1.0032002803625731e-17,5.5688802478447044e-34,-3.0913495362687196e-50]",0.13063959120794373790137808981865083109327726640612337325102002398854548322121324,0.13063959120794373790137808981865083109327726640612337325102002399063002164712949 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,wide_exponent,4096,10322096095657499357,220.095837,216.278909,215.290405,190.000000,25.290405,yes,Both,yes,"[6.7502995556670522e-41,1.8735844974546312e-57,-1.0400483238274423e-73,5.7734279791801363e-90]",4.5566544091238805246854811871109707929263286794390254922251627617554550230494986e-81,4.5566544091238805246854811871109707929263286794390254922251627618262131586719535e-81 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,near_one,4099,10322096095657499359,217.977278,215.406773,214.634335,190.000000,24.634335,yes,Inf,yes,"[0.98524730223011503,2.7346105997142351e-17,1.5180138255933757e-33,8.426669504365412e-50]",1.0149735987467228735600712240168282012518927505403262882885405865459789646852313,1.0149735987467228735600712240168282012518927505403262882885405865211429570599582 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,wide_exponent,4096,10322096095657499357,217.878526,215.148048,214.625136,190.000000,24.625136,yes,Inf,yes,"[2.2537520677334854e+105,6.2554185934856772e+88,3.4724548755780555e+72,1.9275996774193202e+56]",4.4370452913468106284563119957364553561271971862592280260566035243063949187169959e-106,4.4370452913468106284563119957364553561271971862592280260566035241971276114030617e-106 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Inf,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Inf,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166,-3.1692452985045241935931724109976666181468122346931195036563377643078038939162752e+166 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Inf,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641,-7.0558510431143679224555721217306640518626870807672704477968820589485770185247641 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Inf,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295] ; [-3.1692452985045241e+166,-8.7964227527118746e+149,4.8829955371986614e+133,-2.7106070372699195e+117]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,cancellation,4098,10322096095657499352,inf,inf,inf,190.000000,inf,yes,Both,yes,"one [1,0,0,0] ; one plus a low-limb delta [1,3.0398685186782516e-41,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-8,-8 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,no,"+0 [0,0,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,boundary,4110,10322096095657499382,inf,inf,inf,180.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,moderate,4099,10322096095657499356,220.044956,215.606687,215.330917,190.000000,25.330917,yes,Both,yes,"[4.0249001329210348,1.1171341998464465e-16,-6.2013405513286293e-33,3.4424355318133533e-49]",4.0249999999999999999999999999999999999999999999999999999999999999392283664271373,4.025 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,wide_exponent,4096,10322096095657499357,229.647449,215.594292,215.067820,190.000000,25.067820,yes,Both,yes,"[3.0148718470081313e-08,8.3679503521064993e-25,-4.6451455749144106e-41,2.5785737850028193e-57]",3.0148720000000000000000000000000000000000000000000000000000000000546265902778824e-08,3.014872e-08 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,boundary,4112,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,boundary,4116,10322096095657499382,inf,inf,inf,180.000000,inf,yes,-,-,"+0 [0,0,0,0]",0,0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0] ; [-7.0558510431143677,-1.9583920715977498e-16,1.0871259845655899e-32,-6.0347614936650526e-49]",-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1,-0.94414895688563207754442787826933594813731291923272955220311794105142298147523592 ; 1 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [-8,0,0,0]",-0 ; -8,-0 ; -8 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0,3.3171656910739546907582829299139744898574157766165678544249555613696291093272153e-246 ; 0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[7.8582149514030438e-20,2.1810927928753287e-36,-1.2107497187470888e-52,6.7210110740572524e-69]",1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14,1.0299919501102997860132154033287905099419529895218902309406948079133453563747851e-14 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815,0.72479240042364947229615036515952308640740981938027711987583738110030975919442608 ; -815 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,subnormal,4100,10322096095657499350,inf,inf,inf,190.000000,inf,yes,Both,yes,"+0 [0,0,0,0]",0 ; 0,0 ; 0 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,-,-,"lower endpoint [-8,0,0,0]",3,3 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,-,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,-,"lower endpoint [-8,0,0,0]",3,3 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,-,"[3.3171656910739546e-246,9.2069843168173088e-263,-5.1109029879466465e-279,2.8371210869219379e-295]",-816,-816 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,near_one,4099,10322096095657499359,217.932663,211.994703,210.121730,190.000000,20.121730,yes,Both,yes,"[0.68844842180625743,1.9108282228903967e-17,1.0607227445782445e-33,5.88819406887178e-50]",0.82972792034874748204635533162847142244462757631213868214367401578005505462467425,0.82972792034874748204635533162847142244462757631213868214367401531661654544094597 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,wide_exponent,4096,10322096095657499357,217.922910,211.307570,210.087010,190.000000,20.087010,yes,Both,yes,"[3.9723050169707548e-164,1.1025361226687388e-180,6.120304944338899e-197,3.3974517334661164e-213]",1.9930642280094123730625261552128791429300322769194722961440719680011680513374133e-82,1.9930642280094123730625261552128791429300322769194722961440719668608407694664803e-82 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,extreme_finite,4096,10322096095657499354,217.427345,211.612729,209.568118,190.000000,19.568118,yes,Both,yes,"[4.8277532298172217e+270,1.3399706982378861e+254,7.4383316075337441e+237,4.1291035077405081e+221]",2.1972148802102223696810058497941079031647215249309110296216736160980628789995527e+135,2.1972148802102223696810058497941079031647215249309110296216736142967757213404226e+135 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,subnormal,4100,10322096095657499350,243.372308,215.905884,210.033468,190.000000,20.033468,yes,Both,yes,"[3.9080211162696703e-308,0,0,0]",1.976871547741448539026969223351905164877787940969937902883633378772329452173061e-154,1.976871547741448539026969223351905164877787940969937902883633377598501465266526e-154 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,moderate,4099,10322096095657499356,219.370899,215.646612,214.867489,190.000000,24.867489,yes,Both,yes,"[-1.2848792715143134,-3.5662563777469718e-17,1.9796699711454989e-33,-1.0989375915623761e-49]",-1.0871449203062734502700851412094476938994915993466528215032956944502419014728132,-1.0871449203062734502700851412094476938994915993466528215032956944728741702814207 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,wide_exponent,4096,10322096095657499357,219.204146,215.522484,214.994538,190.000000,24.994538,yes,Both,yes,"[-7.6088562828244072e-186,-2.1118818590638597e-202,1.1723299326104384e-218,-6.5077384182068346e-235]",-1.9668585456638661019202110587595283938653583370130934674169942595500144363610602e-62,-1.9668585456638661019202110587595283938653583370130934674169942595125198730852026e-62 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,moderate,4099,10322096095657499356,219.112713,215.484839,215.004532,190.000000,25.004532,yes,Both,yes,"[-1.9786093179304824,-5.4917440537607455e-17,3.0485303469167366e-33,-1.6922742912077385e-49] ; [-3.6930721609963868,-1.0250334361850929e-16,5.6900786093166561e-33,-3.1586281419952212e-49]",4.1897108276500243736137575509880054584975437763794929781439711577595180004814865,4.1897108276500243736137575509880054584975437763794929781439711578388357929538313 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,wide_exponent,4096,10322096095657499357,240.757641,216.577812,213.870154,190.000000,23.870154,yes,Both,yes,"[1.7122842369183985e-262,4.7525434613238062e-279,-2.6381915881467134e-295,1.4644905222663036e-311] ; [-3.0144374372983699e-265,-8.3667446229517548e-282,4.6444762607798811e-298,-2.578202241195858e-314]",1.712286890340601098411983682624579480459337744664421226746119949951155747074881e-262,1.7122868903406010984119836826245794804593377446644212267461199567085975614133203e-262 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,moderate,4099,10322096095657499356,219.189484,215.451091,214.398633,180.000000,34.398633,yes,Both,yes,"[3.0788955469009238,8.5456518164631729e-17,-4.7437897035336035e-33,2.6333322764213759e-49]",0.062656038467969832209321794216397982020542964949257118477705660287113605590702679,0.062656038467969832209321794216397982020542964949257118477705660288918880291683339 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,argument_reduction,4104,10322096095657499353,217.652696,208.567012,202.924770,180.000000,22.924770,yes,Both,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275296757802517104071329784271370594664228509e-21,-6.8137244848422015805151924052161601275296757802517104071329778687414703031432792e-21 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,quadrant_boundaries,4315,10322096095657499369,229.646501,212.548934,212.379963,180.000000,32.379963,yes,Both,yes,"below random k*pi/2, exponent 29, quadrant 0, offset bits 64 [1210367998.9931121,9.2232933347751439e-08,-3.3682212462958211e-24,-1.2421712039970458e-40]",-6.5614180700763253419843351526898064698409162314387092951719910697284566769595525e-11,-6.5614180700763253419843351526898064698409162314387092951719910704945087391437157e-11 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,moderate,4099,10322096095657499356,219.189230,215.566675,214.659688,180.000000,34.659688,yes,Both,-,"[-4.7784826804074854,-1.3262953736402309e-16,7.3624183063460464e-33,-4.086963160313565e-49]",0.066045590163581850028962366060015702301220111028377965182485758811610101682177111,0.066045590163581850028962366060015702301220111028377965182485758813198059701212943 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,argument_reduction,4104,10322096095657499353,232.574321,215.615638,208.674366,180.000000,28.674366,yes,Both,-,"near 2^0 * pi/2 [-1.5707963267948966,-6.1226611923604276e-17,1.4973849048591698e-33,-5.5622711043168264e-50]",5.7280337633839673822029261537694370705065754439038807480055172644370212115109926e-21,5.7280337633839673822029261537694370705065754439038807480055172731619522921872359e-21 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,quadrant_boundaries,4315,10322096095657499369,228.481158,215.246584,214.418649,180.000000,34.418649,yes,Both,-,"below random k*pi/2, exponent 17, quadrant 1, offset bits 118 [331709.77271825873,-2.2171970577571149e-11,3.7150708281135636e-28,2.3902355434839523e-45]",9.9820278769371660928200388523257556042420348105086346022094664206029498329582703e-31,9.9820278769371660928200388523257556042420348105086346022094664208865938945946123e-31 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,moderate,4099,10322096095657499356,216.913680,214.380555,213.767876,170.000000,43.767876,yes,Both,yes,"[-1.8439090508145544,-5.11787570882259e-17,2.8409917245523164e-33,-1.5770672126837562e-49]",3.5699982842328020406977403126653024345054964874710955004250341281438081184333917,3.5699982842328020406977403126653024345054964874710955004250341283030748914299905 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,argument_reduction,4104,10322096095657499353,216.861788,208.567009,202.924770,170.000000,32.924770,yes,Both,yes,"near 2^6 * pi/2 [-100.53096491487338,-3.9188765709960151e-15,9.5832633910986869e-32,-3.5598535067627689e-48]",-6.8137244848422015805151924052161601275298339501045587830768442951450110146372361e-21,-6.8137244848422015805151924052161601275298339501045587830768437367494218513576644e-21 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,quadrant_boundaries,4315,10322096095657499369,217.360401,212.539526,212.267358,170.000000,42.267358,yes,Both,yes,"above random k*pi/2, exponent 45, quadrant 0, offset bits 64 [74082575456598.641,0.0077401429536521011,-4.4453663865375208e-20,-1.4406648841189425e-36]",4.0160244626898690108548055606217396545568030741292099390402822024483364340948252e-06,4.0160244626898690108548055606217396545568030741292099390402822019413987321784571e-06 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,near_one,4099,10322096095657499359,218.093670,215.379730,214.678988,180.000000,34.678988,yes,Both,yes,"[1.2911786355365591,3.5837406251919532e-17,-1.9893756781863299e-33,1.1043253412758746e-49]",0.91180735486029865720200031963596732813600677958830230748545472972914611914911937,0.91180735486029865720200031963596732813600677958830230748545472975077769821487466 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,moderate,4099,10322096095657499356,218.191260,215.364973,214.819019,180.000000,34.819019,yes,Both,yes,"[-1.6564773418506284,-4.5976482117311103e-17,2.5522074518952777e-33,-1.4167597383570195e-49]",-1.0276674796068157926881872460477795215568000040373694878361657581086397348641996,-1.0276674796068157926881872460477795215568000040373694878361657581307647820337298 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,near_one,4099,10322096095657499359,217.767500,215.258136,214.277602,180.000000,34.277602,yes,Both,yes,"[0.58860603672544787,1.6337099360148818e-17,-9.0689119326130649e-34,5.0342574179424254e-50] ; [0.85887750789320882,2.3838639614892877e-17,-1.3233103288097723e-33,7.3458479788444792e-50]",0.60080560244689944505254047976488516114993445003563706360562245792394141734857901,0.60080560244689944505254047976488516114993445003563706360562245794276700036835792 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,moderate,4099,10322096095657499356,218.042610,215.273196,214.779064,180.000000,34.779064,yes,Both,yes,"[0.12649653879441836,3.510984247623815e-18,-1.9489877754040957e-34,1.0819055514832952e-50] ; [1.7502476823940025,4.8579131894765996e-17,-2.6966835372935758e-33,1.4969600766154699e-49]",0.072148061051439749393843263001597933397921930324099767924159658763635157216424841,0.072148061051439749393843263001597933397921930324099767924159658765232080678489465 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,extreme_finite,8,10322096095657499351,224.796125,218.394834,218.394834,180.000000,38.394834,yes,Both,yes,"huge positive y [9.053794275818308e+270,2.5129327163082327e+254,-1.3949578804896183e+238,7.7435717865094081e+221] ; tiny negative x [-1.9770115781111539e-271,-5.4873094349237981e-288,3.0460686389476289e-304,-1.6906926400687457e-320]",1.5707963267948966192313216916397514420985846996875529104874722961510720871532843,1.5707963267948966192313216916397514420985846996875529104874722961539082031431045 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,moderate,4099,10322096095657499356,217.555374,214.870821,214.404436,180.000000,34.404436,yes,Both,yes,"[-0.03874370615484779,-1.0753538658105852e-18,5.9694131072129129e-35,-3.313689937563487e-51]",-0.038753405574689053897038748698475312191059300104201567727902220547827930480850877,-0.038753405574689053897038748698475312191059300104201567727902220546715831868900725 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,boundary,4105,10322096095657499355,218.279597,215.666103,215.450088,180.000000,35.450088,yes,Both,yes,"[-0.9999994386132145,-2.7755560034015539e-17,1.5407430905564922e-33,-8.5528422708397013e-50]",-1.5697367166420567598613352554733454843585688705175173404668956843884396097624371,-1.5697367166420567598613352554733454843585688705175173404668956844102612619924983 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,moderate,4099,10322096095657499356,217.952479,214.769937,210.665918,180.000000,30.665918,yes,Both,-,"[0.99887415790514178,2.7724327220233818e-17,-1.5390093211072774e-33,8.5432179170301514e-50]",0.04745636757503406782865420252660601887412863134878995249846597602032373476016398,0.047456367575034067828654202526606018874128631348789952498465976002146233476892292 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,boundary,4105,10322096095657499355,214.108948,205.510139,192.466318,180.000000,12.466318,yes,Both,-,"[0.99999999999999989,0,0,0]",1.4901161193847656387863435425504615922399221269664356222070824068253018899150618e-08,1.4901161193847656387863435425504615922399221269664356222072542313849407660287268e-08 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,moderate,4099,10322096095657499356,217.426949,215.046491,214.489012,180.000000,34.489012,yes,Both,-,"[7.2668058682815229,2.0169437976118373e-16,-1.1196287217417818e-32,6.2151879295467938e-49]",1431.9692420599845796068868376110150600143493093499559422817931161935390354934173,1431.969242059984579606886837611015060014349309349955942281793116154785851743886 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,boundary,4099,10322096095657499291,215.434078,209.786789,209.697661,180.000000,29.697661,yes,Both,-,"[-597.80646087806576,-1.6592462428412662e-14,9.2106669116257879e-31,-5.1129472387200158e-47]",2.3765819510090894413033090759508481028066320772852749999499635353825343537510016e-260,2.3765819510090894413033090759508481028066320772852749999499635336015223825620741e-260 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,moderate,4099,10322096095657499356,218.020692,214.999773,214.215827,180.000000,34.215827,yes,Both,-,"[3.1052035729833225,8.6186712571859683e-17,-4.7843236357014531e-33,2.6558331288070464e-49]",8.6051692793502790320283451340709447945359060261526288089250361316953685910209515,8.6051692793502790320283451340709447945359060261526288089250361314139388957083351 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,boundary,4099,10322096095657499291,218.040030,214.973213,214.202868,180.000000,34.202868,yes,Both,-,"[104.10886087905146,2.8896013603855037e-15,-1.6040509811440805e-31,8.9042716596936548e-48]",21872072611204943785318953704535.848957757329524240581979950526538377674145297079,21872072611204943785318953704535.848957757329524240581979950526537655899871393765 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,moderate,4099,10322096095657499356,218.319190,214.883150,213.793932,180.000000,33.793932,yes,Both,yes,"[0.52717716913087465,1.4632105780645184e-17,-8.1224503682115667e-34,4.508865707581781e-50]",0.69414327255271665612631015596788634386741426622153124768599904822325391377881959,0.69414327255271665612631015596788634386741426622153124768599904819284068360567441 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,cancellation,4098,10322096095657499336,237.661604,215.412773,214.546935,180.000000,34.546935,yes,Both,yes,"[-1.8771301503505452e-45,-5.2100827828431429e-62,2.8921769328577834e-78,-1.6054807110742383e-94]",-1.8771301503505452689720437817964125752929175652204807623509469569952921589010939e-45,-1.8771301503505452689720437817964125752929175652204807623509469570440934657796658e-45 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,near_one,4099,10322096095657499359,216.923081,214.333783,213.252927,180.000000,33.252927,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.50793426433422243038604118757996243390013385433953431736902408052282282785799521,-0.50793426433422243038604118757996243390013385433953431736902408049044259492262108 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,wide_exponent,4096,10322096095657499357,218.148959,215.403634,214.787811,180.000000,34.787811,yes,Both,-,"[2.1976393587320462e-253,6.0996745397169545e-270,3.3859995583568084e-286,1.87960733552917e-302]",-581.7666447619842216491153422494362059260947919882070310469834418271313947370462,-581.76664476198422164911534224943620592609479198820703104698344181433242395383818 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,extreme_finite,4096,10322096095657499354,218.068829,215.219537,214.521350,180.000000,34.521350,yes,Both,-,"[8.1158327768444521e-302,2.2525984397404538e-318,0,0]",-693.28688126658498966039805511058164533043712351742374530978111274691415502382465,-693.28688126658498966039805511058164533043712351742374530978111272856771039468536 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,near_one,4099,10322096095657499359,216.831239,214.285380,213.192358,180.000000,33.192358,yes,Both,-,"[0.7496369857674211,2.0806606042739792e-17,1.1549986546477316e-33,6.4115304990049557e-50]",-0.41573596010411493045014267590719729760119796965409081364143571035067957416967793,-0.41573596010411493045014267590719729760119796965409081364143571037831861478590789 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,wide_exponent,4096,10322096095657499357,217.890794,215.181850,214.398808,180.000000,34.398808,yes,Both,-,"[1.7649452349949291e+168,4.8987070927345696e+151,2.7193287026242405e+135,1.5095306685887436e+119]",558.90354335945887268941714779171120602057251916893271728873264701130834705779937,558.90354335945887268941714779171120602057251916893271728873264699520691310276205 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,extreme_finite,4096,10322096095657499354,221.047791,215.288948,214.786513,180.000000,34.786513,yes,Both,-,"[6.8101574227838104e+300,1.8901983930241257e+284,1.0492708885224276e+268,5.8246234975324753e+251]",999.34611661399737932538483694865739304704641025692614772050877622807059417985481,999.34611661399737932538483694865739304704641025692614772050877625007617254075152 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,near_one,4099,10322096095657499359,216.850749,214.245682,213.257193,180.000000,33.257193,yes,Both,-,"[0.60173732606578301,1.6701565854365191e-17,9.2712314794047798e-34,5.1465673275323697e-50]",-0.22059304816994049352958242449187881883781348866027603462218270842444120257078286,-0.2205930481699404935295824244918788188378134886602760346221827084104201683981848 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,wide_exponent,4096,10322096095657499357,217.856250,215.189987,214.497524,180.000000,34.497524,yes,Both,-,"[7.1469640060920858e+234,1.9836809989326703e+218,1.1011641592632406e+202,6.1126890175302627e+185]",234.85412159489045596003203173344408775668279869668572611682025536536168793387694,234.85412159489045596003203173344408775668279869668572611682025535904325560762789 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,extreme_finite,4096,10322096095657499354,217.515027,215.019309,214.220407,180.000000,34.220407,yes,Both,-,"[5.3758239790954964e+270,1.4920908894809616e+254,8.2827683016759667e+237,4.5978600380780314e+221]",270.73044504015011560346372915336203436416099326519770095672238014262874150583956,270.73044504015011560346372915336203436416099326519770095672238013380264152658546 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,moderate,4099,10322096095657499356,217.570462,214.787129,214.020088,180.000000,34.020088,yes,Both,yes,"[-0.25462100474624672,-7.0671525505618592e-18,3.9230577400860884e-34,-2.1777345149887542e-50]",-0.29386247149453246058352428487213904837677656724718288204078215844233971612393252,-0.29386247149453246058352428487213904837677656724718288204078215843133248548523474 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,cancellation,4098,10322096095657499336,237.686958,215.352335,214.282284,180.000000,34.282284,yes,Both,yes,"[2.3793998245681706e-09,6.604161175061603e-26,-3.6660458974444604e-42,2.0350642823377176e-58]",2.3793998217373988960371956621746788271543095626976396103307776265392201663265882e-09,2.3793998217373988960371956621746788271543095626976396103307776264649058652515956e-09 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,near_one,4099,10322096095657499359,218.148772,215.130203,214.362894,180.000000,34.362894,yes,Both,yes,"[1.423134563497126,3.9499918988359527e-17,2.1926859765852584e-33,1.2171852284888254e-49] ; [1.1927685344842596,3.310597725082075e-17,1.8377509098288919e-33,1.0201566868089328e-49]",1.5233053480043329261431287201279001410110702760486984367539772844096336550706452,1.5233053480043329261431287201279001410110702760486984367539772843646426383376926 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,moderate,4099,10322096095657499356,215.525556,212.047897,211.143117,180.000000,31.143117,yes,Both,yes,"[7.7504743381693961,2.1511887655005213e-16,1.1941496488868227e-32,6.6288621752109849e-49] ; [6.7867863554598733,1.8837116187608508e-16,1.0456700054511108e-32,5.8046345810586807e-49]",1085628.0458183651737754568233825992695775685017622680386092038233740053608370142,1085628.0458183651737754568233825992695775685017622680386092038236727288616449863 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,moderate,4099,10322096095657499356,217.158561,214.415804,213.656994,190.000000,23.656994,yes,Both,no,"[-5.6684636004037738,-1.5733147008544706e-16,8.7336510293493687e-33,-4.848150230912434e-49]",-188043.1576659602046428792992413117498177671151403368538232084353655121126605512,-188043.15766596020464287929924131174981776711514033685382320843537457138843934032 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,wide_exponent,4096,10322096095657499357,217.192977,214.383216,213.812882,190.000000,23.812882,yes,Both,no,"[3156983632.9860682,8.7623897942647695e-08,-4.8641034501666178e-24,2.7001198222668209e-40]",3125405070844307632059635814309662493597686949184087401837672866916,3125405070844307632059635814309662493597686949184087401837672867051.1497698219492 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,wide_exponent,4096,10322096095657499357,inf,inf,inf,190.000000,inf,yes,Both,yes,"[5.7211443251232913e+32,15879365392388576,0.88148185375328403,4.8932072491308044e-17] ; [1.2560035179108796e+46,3.4861100614871343e+29,19351798283202.184,0.001074240601095632]",572114432512329142864001791218144.88148185375328407706218301916245728311941220214,572114432512329142864001791218144.88148185375328407706218301916245728311941220214 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,quotient_reduction,4,10322096095657499383,237.431134,217.724535,217.724535,190.000000,27.724535,yes,Both,yes,"scaled-reduction gap 58 lhs [5.4783870128486342e+104,1.2515701024950248e+86,2.5644796350277343e+70,3.0488942297143002e+54] ; scaled-reduction gap 58 rhs [1.0992042367473471e+87,7.6430960252403863e+68,8.308036160429468e+52,-8.4044243641695015e+36]",8.2176097775156019844573783110329841337664065872688377479267466170896765365317513e+86,8.217609777515601984457378311032984133766406587268837747926746617066064704117403e+86 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,moderate,4099,10322096095657499356,inf,inf,inf,190.000000,inf,yes,Both,yes,"lower endpoint [0.125,0,0,0] ; [0.58969831471714707,1.6367416164540712e-17,9.085741139747534e-34,5.0435995045658622e-50]",0.125,0.125 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,near_one,4099,10322096095657499359,217.088527,214.653889,213.844482,180.000000,33.844482,yes,Both,yes,"[0.76562636076402268,2.1250400349504614e-17,-1.1796341875261248e-33,6.5482851781324668e-50]",0.84264914336815803011264269143612462086913967383298160440244808238970820494154117,0.84264914336815803011264269143612462086913967383298160440244808235405953256955333 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,moderate,4099,10322096095657499356,216.956723,214.597984,213.993459,180.000000,33.993459,yes,Both,yes,"[0.054297296667996875,1.5070527233928231e-18,-8.3658231641737974e-35,4.6439647484041155e-51]",0.054323980450469496887448171808625498827811228200332436943033541994792104072246549,0.054323980450469496887448171808625498827811228200332436943033541996864828986916269 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,near_one,4099,10322096095657499359,217.861158,215.239353,214.487635,180.000000,34.487635,yes,Both,-,"[1.4303433203278892,3.9700002183670459e-17,-2.2037928250989968e-33,1.2233507679643134e-49]",2.2096804236627024779285628784238115118483853203461617013356271627432691873521909,2.2096804236627024779285628784238115118483853203461617013356271626834118164339315 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,moderate,4099,10322096095657499356,217.160103,214.737937,214.159072,180.000000,34.159072,yes,Both,-,"[6.9851955939094275,1.9387812449671103e-16,-1.0762397889369559e-32,5.9743309684776362e-49]",540.25933261817616200059910469729467236382875532751465730859323173250980707379319,540.25933261817616200059910469729467236382875532751465730859323171413182761114806 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,near_one,4099,10322096095657499359,218.404442,215.222392,214.209524,180.000000,34.209524,yes,Both,yes,"[0.51562981029195787,1.4311602189230828e-17,-7.9445351348799311e-34,4.4101029133436116e-50]",0.47432005334068853744838691469119725073611186863535411854720463894651210203082909,0.47432005334068853744838691469119725073611186863535411854720463896209252928278415 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,moderate,4099,10322096095657499356,219.852666,215.378850,214.042672,180.000000,34.042672,yes,Both,yes,"[-0.049004188243731761,-1.3601394522814103e-18,7.5502906831193558e-35,-4.1912532795059553e-51]",-0.048964999496442407695752174462954719514280073534987354591187902322123112147473692,-0.048964999496442407695752174462954719514280073534987354591187902320317513639311405 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,near_one,4099,10322096095657499359,216.635189,213.881562,212.956798,180.000000,32.956798,yes,Both,yes,"[1.1332197959754742,3.1453167736324843e-17,-1.7460015509132478e-33,9.6922556142756011e-50]",0.97250944030282146673684576741712972459065785505278761629557943342964766102358922,0.97250944030282146673684576741712972459065785505278761629557943335352570304596911 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,moderate,4099,10322096095657499356,217.749152,214.561309,213.166747,180.000000,33.166747,yes,Both,yes,"[-1.1129700329637249,-3.089112390785367e-17,1.7148018509523894e-33,-9.519062487985893e-50]",-0.95904342784556441854164089194266034008522852163619683195211288936138295400619663,-0.95904342784556441854164089194266034008522852163619683195211288929648167565369013 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,moderate,4099,10322096095657499275,218.344248,215.313498,214.386548,180.000000,34.386548,yes,Both,-,"[1.2091565801750435,3.3560836892183684e-17,-1.8630006921695854e-33,1.0341731316696386e-49]",0.63599796632531509013285885414670992566643851908950877932499299079883667837099078,0.63599796632531509013285885414670992566643851908950877932499299078035785994962717 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,boundary,4101,10322096095657499355,217.097508,214.442677,213.709421,180.000000,33.709421,yes,Both,-,"[1.0000006102559529,2.7755592553634159e-17,-1.5407448957579594e-33,8.552852291720866e-50]",0.0011047677501095367049219422532381969737795314787741324983406649673871900506886361,0.0011047677501095367049219422532381969737795314787741324983406649674385145712399472 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,moderate,4099,10322096095657499356,217.309730,214.164921,213.300563,180.000000,33.300563,yes,Both,yes,"[0.0664478289398438,1.8442977406342098e-18,-1.0237909079581275e-34,5.6831811920850375e-51]",0.066545884848946356015107328012468534613321875154290452987163116978656391412156697,0.066545884848946356015107328012468534613321875154290452987163116974551954049134186 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,boundary,4105,10322096095657499355,219.259597,215.988400,215.075845,180.000000,35.075845,yes,Both,yes,"[0.5,0,0,0]",0.54930614433405484569762261846126285232374527891137472586734716682864483823413374,0.54930614433405484569762261846126285232374527891137472586734716681874714660930448 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,near_one,4099,10322096095657499359,206.773984,196.847186,196.755396,180.000000,16.755396,yes,Both,yes,"midpoint [1,0,0,0]",0.84270079294971486934122063508260925929606699796630290845993292736409039503759438,0.84270079294971486934122063508260925929606699796630290845993789783471725409601084 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,moderate,4099,10322096095657499356,218.790808,197.061585,196.771033,180.000000,16.771033,yes,Both,yes,"[-1.0144931263435488,-2.8157840679764146e-17,1.5630741523200512e-33,-8.6768045655108495e-50]",-0.84863022897531701967121795328975048026375710416395760800302401037790857858953723,-0.84863022897531701967121795328975048026375710416395760800302896186126856971311395 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,near_one,4099,10322096095657499359,204.316189,192.489437,192.327065,180.000000,12.327065,yes,Both,-,"upper endpoint [1.5,0,0,0]",0.033894853524689272933023738354052141318589520742363219550036458011854403217248196,0.033894853524689272933023738354052141318589520742363219550032153557867145576249274 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,moderate,4099,10322096095657499356,212.004213,191.066815,189.779688,180.000000,9.779688,yes,Both,-,"[1.9916918564902506,5.5280553925847481e-17,-3.0686871891254231e-33,1.7034635863696485e-49]",0.0048523201680211414554273497804748240804760826674822248354380927724048326045650379,0.0048523201680211414554273497804748240804760826674822248354416949961916711523801507 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,moderate,4099,10322096095657499323,211.903615,199.617279,199.225949,180.000000,19.225949,yes,Both,-,"[1.7460150498866698,4.8461652743155553e-17,-2.6901621343420086e-33,1.4933399707606258e-49]",-0.085381213564840179500933244532026946446305041549633331800426988753669607008088582,-0.085381213564840179500933244532026946446305041549633331800426897893008666204246091 +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,moderate,4099,10322096095657499320,209.040528,202.582542,202.457020,180.000000,22.457020,yes,Both,-,"[14.307075507958793,3.9710111609966271e-16,-2.2043540109909649e-32,1.2236622887134923e-48]",13896751262.208085922946362879642934303109153237904876709680644672275751079246188,13896751262.208085922946362879642934303109153237904876709680646247264671220863527 diff --git a/validation/metrics/data/windows/x86_64/detail/MinGW_f256_fastmath_benchmark.csv b/validation/metrics/data/windows/x86_64/detail/MinGW_f256_fastmath_benchmark.csv new file mode 100644 index 0000000..0532ce1 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MinGW_f256_fastmath_benchmark.csv @@ -0,0 +1,86 @@ +schema_version,run_id,source_revision,source_fingerprint,precision,group,operation,implementation,implementation_short,implementation_label,api,samples,ns_iter,trials_ns,iterations,elapsed_ns,speed_ratio +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,add,fltx,fltx,fltx bl::f256,bl::add,40960,10.462325,10.463867|10.476588|10.455836|10.458149|10.461426|10.462325|10.497726,10895360,114052500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,subtract,fltx,fltx,fltx bl::f256,bl::subtract,40960,10.388633,10.390818|10.380924|10.413176|10.388633|10.391589|10.387348|10.386128,10895360,113216200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,multiply,fltx,fltx,fltx bl::f256,bl::multiply,40960,25.301378,25.301378|25.312229|25.179308,1105920,27940300.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,arithmetic,divide,fltx,fltx,fltx bl::f256,bl::divide,40960,107.237549,107.298584|106.873779|107.237549,245760,26329900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fma,fltx,fltx,fltx bl::f256,bl::fma,40960,37.914225,37.931722|37.872314|37.914225,737280,27947400.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,abs,fltx,fltx,fltx bl::f256,bl::abs,40960,0.694394,0.693243|0.693606|0.695209|0.694461|0.694394|0.693883|0.695093,156262400,108488300.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fabs,fltx,fltx,fltx bl::f256,bl::fabs,40960,0.693890,0.692966|0.693817|0.694397|0.693926|0.693277|0.693890|0.695563,153108480,106253700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqr,fltx,fltx,fltx bl::f256,bl::sqr,40960,22.792969,22.820068|22.792969|22.788818,1228800,28017400.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,recip,fltx,fltx,fltx bl::f256,bl::recip,4096,104.033203,103.555908|104.033203|105.980225,245760,25687600.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmin,fltx,fltx,fltx bl::f256,bl::fmin,40960,1.472511,1.472511|1.483233|1.504426|1.489666|1.448339|1.465150|1.460973,75407360,111218300.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fmax,fltx,fltx,fltx bl::f256,bl::fmax,40960,1.477668,1.475094|1.464473|1.466307|1.477668|1.508723|1.527627|1.501104,73687040,109698900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,fdim,fltx,fltx,fltx bl::f256,bl::fdim,40960,5.304473,5.407982|5.339255|5.349924|5.304473|5.287718|5.280829|5.276314,20930560,111370000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,copysign,fltx,fltx,fltx bl::f256,bl::copysign,40960,0.666614,0.674487|0.670847|0.666587|0.666614|0.666614|0.663904|0.662473,159416320,106388200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,floor,fltx,fltx,fltx bl::f256,bl::floor,40960,1.287780,1.290361|1.287780|1.288471|1.286580|1.289695|1.285248|1.284558,85155840,109640500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,ceil,fltx,fltx,fltx bl::f256,bl::ceil,40960,1.244923,1.246968|1.244557|1.243399|1.247722|1.244596|1.245584|1.244923,90030080,112122800.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,trunc,fltx,fltx,fltx bl::f256,bl::trunc,40960,2.313778,2.382352|2.347942|2.343827|2.313778|2.291099|2.276972|2.263276,45588480,105630100.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round,fltx,fltx,fltx bl::f256,bl::round,40960,10.095398,10.147705|10.095154|10.102478|10.104065|10.095398|10.079590|10.089966,11468800,115858400.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,roundeven,fltx,fltx,fltx bl::f256,bl::roundeven,40960,9.125255,9.164540|9.125255|9.127419|9.125755|9.112993|9.104559|9.088301,12615680,115070900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,lround,fltx,fltx,fltx bl::f256,bl::lround,4096,5.134658,5.144410|5.131017|5.140054|5.139111|5.134658|5.126628|5.128936,21532672,110569700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,llround,fltx,fltx,fltx bl::f256,bl::llround,4096,4.848278,4.853053|4.952181|4.836777|4.851702|4.848278|4.828159|4.825456,23310336,113207000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_decimals,fltx,fltx,fltx bl::f256,bl::round_decimals,4096,128.289795,128.752136|128.289795|128.266907,196608,25251600.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,rounding,round_significant,fltx,fltx,fltx bl::f256,bl::round_significant,4096,167.375300,167.050406|167.375300|167.546199,159744,26729000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,fmod,fltx,fltx,fltx bl::f256,bl::fmod,2048,71.153971,72.041016|71.108398|71.153971,368640,26333600.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remainder,fltx,fltx,fltx bl::f256,bl::remainder,2048,99.607104,99.577580|99.945494|99.607104,264192,26342600.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,remainders,remquo,fltx,fltx,fltx bl::f256,bl::remquo,2048,98.099110,98.015080|98.129769|98.099110,264192,25912300.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,modf,fltx,fltx,fltx bl::f256,bl::modf,40960,14.305943,14.305943|14.320504|14.362706|14.287284|14.298357|14.316232|14.298096,8028160,114904900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ldexp,fltx,fltx,fltx bl::f256,bl::ldexp,40960,6.204948,6.196213|6.200180|6.196976|6.209869|6.204948|6.212044|6.232033,18350080,113907500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbn,fltx,fltx,fltx bl::f256,bl::scalbn,40960,5.903787,5.906659|5.903715|5.903787|5.901166|5.916999|5.894991|5.904613,19496960,115121000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,scalbln,fltx,fltx,fltx bl::f256,bl::scalbln,40960,5.904700,5.891149|5.894404|5.910751|5.904700|5.909335|5.914501|5.898261,19783680,116789000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,frexp,fltx,fltx,fltx bl::f256,bl::frexp,40960,9.577934,9.588653|9.577934|9.583175|9.578709|9.571563|9.562929|9.577160,11755520,112584500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,ilogb,fltx,fltx,fltx bl::f256,bl::ilogb,40960,0.929282,0.927296|0.930080|0.926337|0.928688|0.929930|0.943655|0.929282,116695040,108614200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,logb,fltx,fltx,fltx bl::f256,bl::logb,40960,1.074157,1.075378|1.089979|1.074089|1.074157|1.074880|1.073073|1.073428,102645760,110490600.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nextafter,fltx,fltx,fltx bl::f256,bl::nextafter,40960,4.206465,4.208595|4.206465|4.205530|4.214854|4.231191|4.187531|4.180856,26951680,113331900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,floating_point_utilities,nexttoward,fltx,fltx,fltx bl::f256,bl::nexttoward,40960,4.275349,4.264270|4.328718|4.315015|4.286742|4.273038|4.272277|4.275349,26664960,114337100.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,equal,fltx,fltx,fltx bl::f256,bl::equal,40960,0.539875,0.529575|0.583866|0.532272|0.564322|0.540229|0.536257|0.539875,213606400,116763300.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,not_equal,fltx,fltx,fltx bl::f256,bl::not_equal,40960,0.604791,0.600106|0.604051|0.608904|0.611353|0.601758|0.604791|0.611732,188088320,114000200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less,fltx,fltx,fltx bl::f256,bl::less,40960,0.794520,0.798626|0.796941|0.794841|0.794520|0.792024|0.791673|0.790106,141639680,112476700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,less_equal,fltx,fltx,fltx bl::f256,bl::less_equal,40960,0.814922,0.817545|0.814922|0.815553|0.814757|0.812401|0.820505|0.811621,131031040,106833400.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater,fltx,fltx,fltx bl::f256,bl::greater,40960,1.873497,1.874483|1.875072|1.871909|1.876106|1.871789|1.873497|1.872835,58204160,109055400.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,comparisons,greater_equal,fltx,fltx,fltx bl::f256,bl::greater_equal,40960,0.808873,0.813190|0.813621|0.808873|0.810384|0.804503|0.801769|0.799721,145940480,117837800.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,sqrt,fltx,fltx,fltx bl::f256,bl::sqrt,40960,121.181641,123.211670|121.181641|120.509033,245760,29892800.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,cbrt,fltx,fltx,fltx bl::f256,bl::cbrt,1024,387.411644,388.109189|386.765253|387.411644,64512,24993800.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,hypot,fltx,fltx,fltx bl::f256,bl::hypot,4096,174.938965,175.537109|174.938965|174.918620,147456,25824200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sin,fltx,fltx,fltx bl::f256,bl::sin,1024,896.250000,896.250000|898.876953|894.375000,30720,27540500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,cos,fltx,fltx,fltx bl::f256,bl::cos,1024,898.349609,898.349609|901.074219|896.513672,30720,27606400.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,sincos,fltx,fltx,fltx bl::f256,bl::sincos,1024,1299.065290,1300.404576|1299.065290|1297.949219,21504,27936700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,tan,fltx,fltx,fltx bl::f256,bl::tan,1024,1356.222098,1356.222098|1358.161272|1355.398996,21504,29172200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan,fltx,fltx,fltx bl::f256,bl::atan,1024,908.268229,908.615451|906.911892|908.268229,27648,25102500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,atan2,fltx,fltx,fltx bl::f256,bl::atan2,1024,966.113281,969.151476|963.845486|966.113281,27648,26718200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,asin,fltx,fltx,fltx bl::f256,bl::asin,1024,1406.119792,1410.449219|1406.119792|1403.222656,18432,25926400.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,trigonometric,acos,fltx,fltx,fltx bl::f256,bl::acos,1024,1408.414714,1410.628255|1407.763672|1408.414714,18432,25969500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp,fltx,fltx,fltx bl::f256,bl::exp,1024,1072.558594,1073.132324|1069.372559|1072.558594,24576,26337800.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,exp2,fltx,fltx,fltx bl::f256,bl::exp2,1024,910.888672,909.423828|912.539062|910.888672,30720,27984400.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,exponentials,expm1,fltx,fltx,fltx bl::f256,bl::expm1,1024,1068.371582,1069.091797|1065.673828|1068.371582,24576,26240100.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log,fltx,fltx,fltx bl::f256,bl::log,1024,1781.054688,1779.472656|1781.718750|1781.054688,15360,27352300.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log2,fltx,fltx,fltx bl::f256,bl::log2,1024,1808.867188,1808.867188|1809.296875|1805.761719,15360,27770500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log10,fltx,fltx,fltx bl::f256,bl::log10,1024,1828.007812,1828.007812|1823.378906|1832.832031,15360,28079200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,logarithms,log1p,fltx,fltx,fltx bl::f256,bl::log1p,1024,1839.433594,1836.835938|1839.433594|1846.523438,15360,28276700.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,pow,fltx,fltx,fltx bl::f256,bl::pow,1024,2714.453125,2711.694336|2718.383789|2714.453125,12288,33360000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,roots_and_powers,ipow,fltx,fltx,fltx bl::f256,bl::ipow,4096,121.701389,121.826172|121.493869|121.701389,221184,26912300.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,product_sum,fltx,fltx,fltx bl::f256,bl::product_sum,4096,46.193576,46.193576|46.445312|46.189779,552960,25588900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,sinh,fltx,fltx,fltx bl::f256,bl::sinh,1024,1394.108073,1396.533203|1393.619792|1394.108073,18432,25708100.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,cosh,fltx,fltx,fltx bl::f256,bl::cosh,1024,1399.135045,1398.130580|1399.609375|1399.135045,21504,30083200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,hyperbolic,tanh,fltx,fltx,fltx bl::f256,bl::tanh,1024,1315.959821,1316.727121|1315.959821|1313.448661,21504,28285900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,asinh,fltx,fltx,fltx bl::f256,bl::asinh,1024,2806.673177,2806.673177|2800.423177|2811.328125,9216,25861400.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,acosh,fltx,fltx,fltx bl::f256,bl::acosh,1024,2564.916992,2565.991211|2564.916992|2561.450195,12288,31507900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,inverse_hyperbolic,atanh,fltx,fltx,fltx bl::f256,bl::atanh,1024,2405.859375,2405.859375|2409.741211|2401.489258,12288,29561200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erf,fltx,fltx,fltx bl::f256,bl::erf,128,11166.406250,11251.562500|11166.406250|11130.468750,384,4294200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,erfc,fltx,fltx,fltx bl::f256,bl::erfc,128,11072.656250,11072.656250|11079.687500|11062.500000,384,4251500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,lgamma,fltx,fltx,fltx bl::f256,bl::lgamma,128,9099.218750,9099.218750|9109.375000|9037.500000,384,3487500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,special_functions,tgamma,fltx,fltx,fltx bl::f256,bl::tgamma,128,10126.562500,10126.562500|10095.312500|10128.906250,384,3884900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_string,fltx,fltx,fltx bl::f256,bl::to_string,4099,347.804343,347.393673|347.804343|347.938522,73782,25654900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,to_chars,fltx,fltx,fltx bl::f256,bl::to_chars,4099,303.659429,304.199195|302.622591|303.659429,98376,29856500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,io,parse,fltx,fltx,fltx bl::f256,bl::parse,4099,462.088314,463.620395|461.092949|462.088314,61485,28422500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,mt19937_64,fltx,fltx,fltx bl::f256,bl::mt19937_64,64,5.069684,5.044838|5.069684|5.074954,5179968,26227000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,uniform_real,fltx,fltx,fltx bl::f256,bl::uniform_real,64,40.563986,40.573620|40.563986|40.545178,653952,26524900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,random,normal,fltx,fltx,fltx bl::f256,bl::normal,64,354.774767,356.266622|353.715093|354.774767,72192,25622300.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,chained_arithmetic,fltx,fltx,fltx bl::f256,same workload,64,164.655237,164.655237|164.739646|164.432023,159936,26326900.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,affine_trig,fltx,fltx,fltx bl::f256,same workload,64,1832.229167,1832.229167|1835.020833|1830.354167,14400,26388500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,mandelbrot,fltx,fltx,fltx bl::f256,same workload,64,119.109848,119.053030|119.109848|119.415584,221760,26432200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,matrix_vector_4x4,fltx,fltx,fltx bl::f256,same workload,64,527.544301,527.472462|527.687979|527.544301,50112,26437500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,horner_polynomial,fltx,fltx,fltx bl::f256,same workload,64,420.368485,420.368485|420.134365|420.551710,58944,24777200.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,newton_root,fltx,fltx,fltx bl::f256,same workload,8,236.633104,237.077321|236.633104|236.229270,111432,26370000.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,log_sum_exp,fltx,fltx,fltx bl::f256,same workload,8,9137.500000,9162.500000|9137.500000|9137.500000,24,219500.000000, +6,1f47748c24e4435f9d017479a2e54bbd,b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97,7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1,f256,mixed_workloads,haversine,fltx,fltx,fltx bl::f256,same workload,8,4762.771739,4756.032609|4763.043478|4762.771739,5520,26278600.000000, diff --git a/validation/metrics/data/windows/x86_64/detail/MinGW_fastmath_run.json b/validation/metrics/data/windows/x86_64/detail/MinGW_fastmath_run.json new file mode 100644 index 0000000..c4e08ca --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MinGW_fastmath_run.json @@ -0,0 +1,154 @@ +{ + "accuracy_parallel": true, + "accuracy_samples": 4096, + "architecture": "x86_64", + "benchmark_corpus_policy": "adaptive-v1", + "benchmark_fast_minimum_trial_ms": 15, + "benchmark_fast_threshold_ns": 20, + "benchmark_fast_trials": 7, + "benchmark_maximum_row_ms": 5000, + "benchmark_minimum_trial_ms": 8, + "benchmark_ordinary_trials": 3, + "benchmark_policy": "adaptive-v2", + "benchmark_samples": { + "f128": 8192, + "f256": 4096 + }, + "benchmark_slow_threshold_ns": 10000, + "benchmark_trials": 7, + "compiler": "MinGW", + "configuration": { + "build": { + "architecture": "x86_64", + "compiler-id": "GNU", + "compiler-version": "13.1.0", + "config": "Release", + "flags-hash": "58af7dec3ba5f6621e8a5a7b2fb270d74cd1bcbd3a5216604c9df63e81c05960", + "frontend-variant": "GNU", + "optimized": "1", + "processor": "AMD64", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Windows" + }, + "consumer": { + "arm64": "0", + "fast-math": "on", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "1" + }, + "harness": { + "qdpp": "on", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "available", + "simd": "on", + "tu-x86-fma": "0", + "x86": "1" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "1", + "f256-simd": "1", + "msvc-guarded": "0", + "neon": "0", + "runtime-check": "1", + "runtime-path": "0", + "scalar-x86": "0", + "sse2": "1", + "trig-simd": "1", + "wasm-simd": "0" + } + }, + "consumer_mode": "fastmath", + "created_utc": "2026-08-15T16:03:27.373439+00:00", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-mingw-release\\validation\\fltx_accuracy_fastmath.exe", + "sha256": "50f20f4e1b6b6fd08e7b96e2d30e297ad9921e0e193c2aa4d6a5ea4b54206307", + "wasm-sha256": "not-present" + }, + "benchmark": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-mingw-release\\validation\\fltx_benchmark_fastmath.exe", + "sha256": "01ea43e02271ca018be9638ed9cdb692f8335a0be3db4992854be26204881b67", + "wasm-sha256": "not-present" + } + }, + "host": { + "machine": "AMD64", + "node": "not-used", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "implementations": { + "f128": [ + { + "id": "fltx", + "label": "fltx bl::f128", + "short_label": "fltx" + } + ], + "f256": [ + { + "id": "fltx", + "label": "fltx bl::f256", + "short_label": "fltx" + } + ] + }, + "outputs": { + "MinGW_f128_fastmath.csv": "6bc956a90de1f65e382697dc9140e0ef2027c53d93f24bf716b9100707e30ed2", + "MinGW_f256_fastmath.csv": "c532c6c305e6de9f70bff9b0c2b9f635043232d277db9434a496a786af981aa8", + "detail/MinGW_f128_fastmath_accuracy.csv": "6979b7860b072c9980f9d219f586a90a5062a8f62c0530f8b46db7b6827b4f0f", + "detail/MinGW_f128_fastmath_benchmark.csv": "9fa38ed62343155767b50098330bfd07e5e752a9d54b539c9e143bf4689740e5", + "detail/MinGW_f256_fastmath_accuracy.csv": "68b24cda916efc8d7687c45b9901776e5f25437603b05378ea1aecd7c7990dfc", + "detail/MinGW_f256_fastmath_benchmark.csv": "65ee41a06ebdcdddcd1cb3bfd726b5c4a4dacc3b061e6f173e309598099b46a0" + }, + "phases": { + "f128.accuracy": { + "output": "MinGW_f128_fastmath_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f128.benchmark": { + "output": "MinGW_f128_fastmath_benchmark.csv", + "return_code": 0, + "status": "passed" + }, + "f256.accuracy": { + "output": "MinGW_f256_fastmath_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f256.benchmark": { + "output": "MinGW_f256_fastmath_benchmark.csv", + "return_code": 0, + "status": "passed" + } + }, + "phases_requested": [ + "accuracy", + "benchmark" + ], + "platform": "windows", + "precisions": [ + "f128", + "f256" + ], + "run_id": "1f47748c24e4435f9d017479a2e54bbd", + "sample_mode": "standard", + "schema_version": "6", + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete" +} diff --git a/validation/metrics/data/windows/x86_64/detail/MinGW_run.json b/validation/metrics/data/windows/x86_64/detail/MinGW_run.json new file mode 100644 index 0000000..cb73992 --- /dev/null +++ b/validation/metrics/data/windows/x86_64/detail/MinGW_run.json @@ -0,0 +1,184 @@ +{ + "accuracy_parallel": true, + "accuracy_samples": 4096, + "architecture": "x86_64", + "benchmark_corpus_policy": "adaptive-v1", + "benchmark_fast_minimum_trial_ms": 15, + "benchmark_fast_threshold_ns": 20, + "benchmark_fast_trials": 7, + "benchmark_maximum_row_ms": 5000, + "benchmark_minimum_trial_ms": 8, + "benchmark_ordinary_trials": 3, + "benchmark_policy": "adaptive-v2", + "benchmark_samples": { + "f128": 8192, + "f256": 4096 + }, + "benchmark_slow_threshold_ns": 10000, + "benchmark_trials": 7, + "compiler": "MinGW", + "configuration": { + "build": { + "architecture": "x86_64", + "compiler-id": "GNU", + "compiler-version": "13.1.0", + "config": "Release", + "flags-hash": "58af7dec3ba5f6621e8a5a7b2fb270d74cd1bcbd3a5216604c9df63e81c05960", + "frontend-variant": "GNU", + "optimized": "1", + "processor": "AMD64", + "source-fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "system": "Windows" + }, + "consumer": { + "arm64": "0", + "fast-math": "off", + "fma": "AUTO", + "has-x86-fma": "0", + "simd": "on", + "simulated-consteval": "off", + "tu-x86-fma": "0", + "x86": "1" + }, + "harness": { + "qdpp": "on", + "tlfloat": "on" + }, + "library": { + "arm64": "0", + "fast-math": "off", + "fast-math-request": "AUTO", + "fma": "AUTO", + "runtime-fma": "available", + "simd": "on", + "tu-x86-fma": "0", + "x86": "1" + }, + "library_strategy": { + "baseline-arm64": "0", + "compiled-x86-backend": "1", + "f256-simd": "1", + "msvc-guarded": "0", + "neon": "0", + "runtime-check": "1", + "runtime-path": "0", + "scalar-x86": "0", + "sse2": "1", + "trig-simd": "1", + "wasm-simd": "0" + } + }, + "consumer_mode": "strict", + "created_utc": "2026-08-15T16:01:23.434256+00:00", + "executables": { + "accuracy": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-mingw-release\\validation\\fltx_accuracy.exe", + "sha256": "584fc271904637a6892f1a93ada6148ed0970d8a0f0993548ae0f7e5c47afe70", + "wasm-sha256": "not-present" + }, + "benchmark": { + "path": "C:\\dev\\cpp\\bitloop-workspace\\fltx\\build\\windows-x64-mingw-release\\validation\\fltx_benchmark.exe", + "sha256": "b296debd3313496263df0d50f7a4de95c30e33b3a6b5aae2acdd7d7ceb76d1d4", + "wasm-sha256": "not-present" + } + }, + "host": { + "machine": "AMD64", + "node": "not-used", + "os": "Windows", + "os-release": "11", + "processor": "AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD", + "python": "CPython 3.13.14" + }, + "implementations": { + "f128": [ + { + "id": "fltx", + "label": "fltx bl::f128", + "short_label": "fltx" + }, + { + "id": "qdpp", + "label": "qdpp dd_real", + "short_label": "ddreal" + }, + { + "id": "cppdd", + "label": "boost::multiprecision::cpp_double_double", + "short_label": "cppdd" + }, + { + "id": "tlfloat", + "label": "TLFloat Quad", + "short_label": "tlquad" + } + ], + "f256": [ + { + "id": "fltx", + "label": "fltx bl::f256", + "short_label": "fltx" + }, + { + "id": "qdpp", + "label": "qdpp qd_real", + "short_label": "qdreal" + }, + { + "id": "mpfr64", + "label": "boost::multiprecision::mpfr_float_backend<64>", + "short_label": "mpfr64" + }, + { + "id": "tlfloat", + "label": "TLFloat Octuple", + "short_label": "tloct" + } + ] + }, + "outputs": { + "MinGW_f128.csv": "c3874dca3b181914188f2fc0bfd0b3a55f45736e7a02eb66134555a7e0f8331e", + "MinGW_f256.csv": "00e55576c373d768a9d1209e27c1742deebb6f855ae655b9c2e322744a762599", + "detail/MinGW_f128_accuracy.csv": "dd3955004e210e9e164955ed72f8d853e40865a54f0894205a5a9eb70e6ecba9", + "detail/MinGW_f128_benchmark.csv": "55eebad487bb18de35bad582f80a4f608b65ce5c04c954adeaadfee7d6ce572f", + "detail/MinGW_f256_accuracy.csv": "41473b49d08d890f4878d0071a357235de2e0d682616630daac82ed2e2fc2c35", + "detail/MinGW_f256_benchmark.csv": "f1be3f92d51814bcde00f2abadcec4ead62a70cb49d02bd0b7a17cfc7f5009c0" + }, + "phases": { + "f128.accuracy": { + "output": "MinGW_f128_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f128.benchmark": { + "output": "MinGW_f128_benchmark.csv", + "return_code": 0, + "status": "passed" + }, + "f256.accuracy": { + "output": "MinGW_f256_accuracy.csv", + "return_code": 0, + "status": "passed" + }, + "f256.benchmark": { + "output": "MinGW_f256_benchmark.csv", + "return_code": 0, + "status": "passed" + } + }, + "phases_requested": [ + "accuracy", + "benchmark" + ], + "platform": "windows", + "precisions": [ + "f128", + "f256" + ], + "run_id": "1bc36f9be0894bcfb934a2e01311a61e", + "sample_mode": "standard", + "schema_version": "6", + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "status": "complete" +} diff --git a/validation/metrics/generated/accuracy/accuracy_table.svg b/validation/metrics/generated/accuracy/accuracy_table.svg new file mode 100644 index 0000000..933417e --- /dev/null +++ b/validation/metrics/generated/accuracy/accuracy_table.svg @@ -0,0 +1,1418 @@ + +fltx accuracy consistency +FLTX MPFR-relative average and minimum tested bits accurate by target. + +fltx accuracy consistency +FLTX MPFR-relative average and minimum tested bits accurate by target. +✓ All FLTX domains pass · ! At least one FLTX domain failed · — Not applicable +Competitor results remain available in the per-target overview and CSV data. + +Operation + +WebAssembly / wasm32 / Clang (Emscripten) +f128 + +WebAssembly / wasm32 / Clang (Emscripten) +f256 + +Arithmetic + +add + +WebAssembly / wasm32 / Clang (Emscripten); f128; arithmetic / add +fltx bl::f128 (bl::add): mean 120.266239506 bits; p01 106.483519 bits; worst 105.736235 bits; margin 15.736235 bits + +avg 120.3b +min 105.7b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; arithmetic / add +fltx bl::f256 (bl::add): mean 227.373862582 bits; p01 215.583815 bits; worst 215.297307 bits; margin 25.297307 bits + +avg 227.4b +min 215.3b +✓ 2/2 domains + + +subtract + +WebAssembly / wasm32 / Clang (Emscripten); f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): mean 120.053476095 bits; p01 106.530508 bits; worst 105.744857 bits; margin 15.744857 bits + +avg 120.1b +min 105.7b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): mean 227.447841785 bits; p01 215.602949 bits; worst 215.220788 bits; margin 25.220788 bits + +avg 227.4b +min 215.2b +✓ 2/2 domains + + +multiply + +WebAssembly / wasm32 / Clang (Emscripten); f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): mean 108.702461473 bits; p01 105.665876 bits; worst 105.380753 bits; margin 15.380753 bits + +avg 108.7b +min 105.4b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): mean 220.046096951 bits; p01 215.608028 bits; worst 215.221541 bits; margin 25.221541 bits + +avg 220.0b +min 215.2b +✓ 2/2 domains + + +divide + +WebAssembly / wasm32 / Clang (Emscripten); f128; arithmetic / divide +fltx bl::f128 (bl::divide): mean 110.909104952 bits; p01 105.971646 bits; worst 105.124683 bits; margin 15.124683 bits + +avg 110.9b +min 105.1b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; arithmetic / divide +fltx bl::f256 (bl::divide): mean 219.220520548 bits; p01 215.287455 bits; worst 214.762066 bits; margin 24.762066 bits + +avg 219.2b +min 214.8b +✓ 2/2 domains + + +IO + +to_string + +WebAssembly / wasm32 / Clang (Emscripten); f128; io / to_string +fltx bl::f128 (bl::to_string): mean 113.981524548 bits; p01 110.936216 bits; worst 110.695372 bits; margin 20.695372 bits + +avg 114.0b +min 110.7b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; io / to_string +fltx bl::f256 (bl::to_string): mean 220.440705573 bits; p01 217.235897 bits; worst 216.9758 bits; margin 26.9758 bits + +avg 220.4b +min 217.0b +✓ 2/2 domains + + +to_chars + +WebAssembly / wasm32 / Clang (Emscripten); f128; io / to_chars +fltx bl::f128 (bl::to_chars): mean 113.981524548 bits; p01 110.936216 bits; worst 110.695372 bits; margin 20.695372 bits + +avg 114.0b +min 110.7b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; io / to_chars +fltx bl::f256 (bl::to_chars): mean 220.440705573 bits; p01 217.235897 bits; worst 216.9758 bits; margin 26.9758 bits + +avg 220.4b +min 217.0b +✓ 2/2 domains + + +parse + +WebAssembly / wasm32 / Clang (Emscripten); f128; io / parse +fltx bl::f128 (bl::parse): mean 109.936763821 bits; p01 107.051396 bits; worst 106.003381 bits; margin 0.003381 bits + +avg 109.9b +min 106.0b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; io / parse +fltx bl::f256 (bl::parse): mean 219.729492211 bits; p01 212.275332 bits; worst 212.017147 bits; margin 0.017147 bits + +avg 219.7b +min 212.0b +✓ 2/2 domains + + +Rounding + +floor + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / floor +fltx bl::f128 (bl::floor): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / floor +fltx bl::f256 (bl::floor): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +ceil + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / ceil +fltx bl::f128 (bl::ceil): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / ceil +fltx bl::f256 (bl::ceil): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +trunc + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / trunc +fltx bl::f128 (bl::trunc): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / trunc +fltx bl::f256 (bl::trunc): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +round + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / round +fltx bl::f128 (bl::round): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / round +fltx bl::f256 (bl::round): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +roundeven + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +lround + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / lround +fltx bl::f128 (bl::lround): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / lround +fltx bl::f256 (bl::lround): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +llround + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / llround +fltx bl::f128 (bl::llround): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / llround +fltx bl::f256 (bl::llround): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +round_decimals + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): mean 110.177573 bits; p01 107.236356 bits; worst 107.022726 bits; margin 17.022726 bits + +avg 110.2b +min 107.0b +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): mean 220.044956 bits; p01 215.606687 bits; worst 215.330917 bits; margin 25.330917 bits + +avg 220.0b +min 215.3b +✓ 1/1 domains + + +round_significant + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): mean 121.33026 bits; p01 107.34042 bits; worst 107.049597 bits; margin 17.049597 bits + +avg 121.3b +min 107.0b +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): mean 229.647449 bits; p01 215.594292 bits; worst 215.06782 bits; margin 25.06782 bits + +avg 229.6b +min 215.1b +✓ 1/1 domains + + +Remainders + +fmod + +WebAssembly / wasm32 / Clang (Emscripten); f128; remainders / fmod +fltx bl::f128 (bl::fmod): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; remainders / fmod +fltx bl::f256 (bl::fmod): mean 243.996795284 bits; p01 217.724535 bits; worst 217.724535 bits; margin 27.724535 bits + +avg 244.0b +min 217.7b +✓ 3/3 domains + + +remainder + +WebAssembly / wasm32 / Clang (Emscripten); f128; remainders / remainder +fltx bl::f128 (bl::remainder): mean 137.991491 bits; p01 inf bits; worst 103.120938 bits; margin 13.120938 bits + +avg 138.0b +min 103.1b +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; remainders / remainder +fltx bl::f256 (bl::remainder): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +remquo + +WebAssembly / wasm32 / Clang (Emscripten); f128; remainders / remquo +fltx bl::f128 (bl::remquo): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; remainders / remquo +fltx bl::f256 (bl::remquo): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +Float Utils + +abs + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +fabs + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +fma + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): mean 117.44188202 bits; p01 104.680325 bits; worst 99.5802 bits; margin 9.5802 bits + +avg 117.4b +min 99.6b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): mean 229.715460613 bits; p01 215.654212 bits; worst 215.096656 bits; margin 25.096656 bits + +avg 229.7b +min 215.1b +✓ 3/3 domains + + +recip + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): mean 109.025331959 bits; p01 105.925795 bits; worst 105.189487 bits; margin 15.189487 bits + +avg 109.0b +min 105.2b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): mean 217.92444534 bits; p01 215.148048 bits; worst 214.625136 bits; margin 24.625136 bits + +avg 217.9b +min 214.6b +✓ 2/2 domains + + +fmin + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +fmax + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +fdim + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): mean 137.996123973 bits; p01 inf bits; worst 106.227061 bits; margin 16.227061 bits + +avg 138.0b +min 106.2b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +copysign + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +ldexp + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +scalbn + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +scalbln + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +frexp + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +modf + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +ilogb + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +logb + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +nextafter + +No accuracy result + +— + + +No accuracy result + +— + + +nexttoward + +No accuracy result + +— + + +No accuracy result + +— + + +Roots & powers + +sqr + +WebAssembly / wasm32 / Clang (Emscripten); f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): mean 108.712755765 bits; p01 105.598081 bits; worst 105.370295 bits; margin 15.370295 bits + +avg 108.7b +min 105.4b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): mean 220.120699598 bits; p01 216.278909 bits; worst 215.25119 bits; margin 25.25119 bits + +avg 220.1b +min 215.3b +✓ 2/2 domains + + +sqrt + +WebAssembly / wasm32 / Clang (Emscripten); f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): mean 109.760683649 bits; p01 105.75112 bits; worst 104.669867 bits; margin 14.669867 bits + +avg 109.8b +min 104.7b +✓ 4/4 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): mean 217.906343684 bits; p01 211.19589 bits; worst 209.568118 bits; margin 19.568118 bits + +avg 217.9b +min 209.6b +✓ 4/4 domains + + +cbrt + +WebAssembly / wasm32 / Clang (Emscripten); f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): mean 108.521255256 bits; p01 104.960828 bits; worst 104.098992 bits; margin 14.098992 bits + +avg 108.5b +min 104.1b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): mean 219.28474431 bits; p01 215.534477 bits; worst 214.867489 bits; margin 24.867489 bits + +avg 219.3b +min 214.9b +✓ 2/2 domains + + +hypot + +WebAssembly / wasm32 / Clang (Emscripten); f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): mean 122.379344938 bits; p01 105.55647 bits; worst 104.375984 bits; margin 14.375984 bits + +avg 122.4b +min 104.4b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): mean 229.930731323 bits; p01 215.484839 bits; worst 213.870154 bits; margin 23.870154 bits + +avg 229.9b +min 213.9b +✓ 2/2 domains + + +pow + +WebAssembly / wasm32 / Clang (Emscripten); f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): mean 107.1276135 bits; p01 102.267431 bits; worst 101.314349 bits; margin 21.314349 bits + +avg 107.1b +min 101.3b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): mean 216.837164 bits; p01 212.047897 bits; worst 211.143117 bits; margin 31.143117 bits + +avg 216.8b +min 211.1b +✓ 2/2 domains + + +ipow + +WebAssembly / wasm32 / Clang (Emscripten); f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): mean 106.491467825 bits; p01 103.779117 bits; worst 103.190083 bits; margin 13.190083 bits + +avg 106.5b +min 103.2b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): mean 217.175762701 bits; p01 214.383216 bits; worst 213.656994 bits; margin 23.656994 bits + +avg 217.2b +min 213.7b +✓ 2/2 domains + + +Exponentials + +exp + +WebAssembly / wasm32 / Clang (Emscripten); f128; exponentials / exp +fltx bl::f128 (bl::exp): mean 106.9878975 bits; p01 104.337314 bits; worst 103.64511 bits; margin 23.64511 bits + +avg 107.0b +min 103.6b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; exponentials / exp +fltx bl::f256 (bl::exp): mean 216.736722 bits; p01 209.997559 bits; worst 208.947269 bits; margin 28.947269 bits + +avg 216.7b +min 208.9b +✓ 2/2 domains + + +exp2 + +WebAssembly / wasm32 / Clang (Emscripten); f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): mean 108.8963935 bits; p01 106.013023 bits; worst 105.117537 bits; margin 25.117537 bits + +avg 108.9b +min 105.1b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): mean 218.030361 bits; p01 214.973213 bits; worst 214.202868 bits; margin 34.202868 bits + +avg 218.0b +min 214.2b +✓ 2/2 domains + + +expm1 + +WebAssembly / wasm32 / Clang (Emscripten); f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): mean 121.61686848 bits; p01 105.111574 bits; worst 104.102752 bits; margin 24.102752 bits + +avg 121.6b +min 104.1b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): mean 227.154452503 bits; p01 207.540568 bits; worst 207 bits; margin 27 bits + +avg 227.2b +min 207.0b +✓ 2/2 domains + + +Logarithms + +log + +WebAssembly / wasm32 / Clang (Emscripten); f128; logarithms / log +fltx bl::f128 (bl::log): mean 108.40767633 bits; p01 104.625423 bits; worst 103.727726 bits; margin 23.727726 bits + +avg 108.4b +min 103.7b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; logarithms / log +fltx bl::f256 (bl::log): mean 217.776072084 bits; p01 214.333783 bits; worst 213.252927 bits; margin 33.252927 bits + +avg 217.8b +min 213.3b +✓ 3/3 domains + + +log2 + +WebAssembly / wasm32 / Clang (Emscripten); f128; logarithms / log2 +fltx bl::f128 (bl::log2): mean 108.785650924 bits; p01 104.550799 bits; worst 103.716432 bits; margin 23.716432 bits + +avg 108.8b +min 103.7b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; logarithms / log2 +fltx bl::f256 (bl::log2): mean 218.61302666 bits; p01 214.28538 bits; worst 213.192358 bits; margin 33.192358 bits + +avg 218.6b +min 213.2b +✓ 3/3 domains + + +log10 + +WebAssembly / wasm32 / Clang (Emscripten); f128; logarithms / log10 +fltx bl::f128 (bl::log10): mean 107.503050022 bits; p01 104.469291 bits; worst 103.762278 bits; margin 23.762278 bits + +avg 107.5b +min 103.8b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; logarithms / log10 +fltx bl::f256 (bl::log10): mean 217.44848007 bits; p01 214.245682 bits; worst 213.257193 bits; margin 33.257193 bits + +avg 217.4b +min 213.3b +✓ 3/3 domains + + +log1p + +WebAssembly / wasm32 / Clang (Emscripten); f128; logarithms / log1p +fltx bl::f128 (bl::log1p): mean 121.372231555 bits; p01 105.150365 bits; worst 103.619384 bits; margin 23.619384 bits + +avg 121.4b +min 103.6b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; logarithms / log1p +fltx bl::f256 (bl::log1p): mean 226.82219119 bits; p01 207.415037 bits; worst 207 bits; margin 27 bits + +avg 226.8b +min 207.0b +✓ 2/2 domains + + +Trigonometric + +sin + +WebAssembly / wasm32 / Clang (Emscripten); f128; trigonometric / sin +fltx bl::f128 (bl::sin): mean 110.553532277 bits; p01 98.777563 bits; worst 98.619216 bits; margin 18.619216 bits + +avg 110.6b +min 98.6b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; trigonometric / sin +fltx bl::f256 (bl::sin): mean 222.290222968 bits; p01 208.567012 bits; worst 202.92477 bits; margin 22.92477 bits + +avg 222.3b +min 202.9b +✓ 3/3 domains + + +cos + +WebAssembly / wasm32 / Clang (Emscripten); f128; trigonometric / cos +fltx bl::f128 (bl::cos): mean 113.520718505 bits; p01 100.266388 bits; worst 99.209588 bits; margin 19.209588 bits + +avg 113.5b +min 99.2b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; trigonometric / cos +fltx bl::f256 (bl::cos): mean 226.780465244 bits; p01 215.246584 bits; worst 208.674366 bits; margin 28.674366 bits + +avg 226.8b +min 208.7b +✓ 3/3 domains + + +sincos + +No accuracy result + +— + + +No accuracy result + +— + + +tan + +WebAssembly / wasm32 / Clang (Emscripten); f128; trigonometric / tan +fltx bl::f128 (bl::tan): mean 106.671100353 bits; p01 98.776698 bits; worst 98.614153 bits; margin 23.614153 bits + +avg 106.7b +min 98.6b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; trigonometric / tan +fltx bl::f256 (bl::tan): mean 217.050653666 bits; p01 208.567009 bits; worst 202.92477 bits; margin 32.92477 bits + +avg 217.1b +min 202.9b +✓ 3/3 domains + + +asin + +WebAssembly / wasm32 / Clang (Emscripten); f128; trigonometric / asin +fltx bl::f128 (bl::asin): mean 108.580073592 bits; p01 105.096123 bits; worst 104.081582 bits; margin 24.081582 bits + +avg 108.6b +min 104.1b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; trigonometric / asin +fltx bl::f256 (bl::asin): mean 217.91775033 bits; p01 214.870821 bits; worst 214.404436 bits; margin 34.404436 bits + +avg 217.9b +min 214.4b +✓ 2/2 domains + + +acos + +WebAssembly / wasm32 / Clang (Emscripten); f128; trigonometric / acos +fltx bl::f128 (bl::acos): mean 106.470630111 bits; p01 95.825547 bits; worst 81.584963 bits; margin 1.584963 bits + +avg 106.5b +min 81.6b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; trigonometric / acos +fltx bl::f256 (bl::acos): mean 216.029308016 bits; p01 205.510139 bits; worst 192.466318 bits; margin 12.466318 bits + +avg 216.0b +min 192.5b +✓ 2/2 domains + + +atan + +WebAssembly / wasm32 / Clang (Emscripten); f128; trigonometric / atan +fltx bl::f128 (bl::atan): mean 108.728555 bits; p01 105.953468 bits; worst 104.92639 bits; margin 24.92639 bits + +avg 108.7b +min 104.9b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; trigonometric / atan +fltx bl::f256 (bl::atan): mean 218.142465 bits; p01 215.364973 bits; worst 214.678988 bits; margin 34.678988 bits + +avg 218.1b +min 214.7b +✓ 2/2 domains + + +atan2 + +WebAssembly / wasm32 / Clang (Emscripten); f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): mean 108.727143624 bits; p01 105.799026 bits; worst 104.520841 bits; margin 24.520841 bits + +avg 108.7b +min 104.5b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): mean 217.911773079 bits; p01 215.258136 bits; worst 214.277602 bits; margin 34.277602 bits + +avg 217.9b +min 214.3b +✓ 3/3 domains + + +Hyperbolic + +sinh + +WebAssembly / wasm32 / Clang (Emscripten); f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): mean 107.4201585 bits; p01 104.726423 bits; worst 103.568829 bits; margin 23.568829 bits + +avg 107.4b +min 103.6b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): mean 217.022625 bits; p01 214.597984 bits; worst 213.844482 bits; margin 33.844482 bits + +avg 217.0b +min 213.8b +✓ 2/2 domains + + +cosh + +WebAssembly / wasm32 / Clang (Emscripten); f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): mean 107.9070545 bits; p01 105.118172 bits; worst 104.370708 bits; margin 24.370708 bits + +avg 107.9b +min 104.4b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): mean 217.5106305 bits; p01 214.737937 bits; worst 214.159072 bits; margin 34.159072 bits + +avg 217.5b +min 214.2b +✓ 2/2 domains + + +tanh + +WebAssembly / wasm32 / Clang (Emscripten); f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): mean 109.217494 bits; p01 105.123457 bits; worst 103.771823 bits; margin 23.771823 bits + +avg 109.2b +min 103.8b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): mean 219.128554 bits; p01 215.222392 bits; worst 214.042672 bits; margin 34.042672 bits + +avg 219.1b +min 214.0b +✓ 2/2 domains + + +asinh + +WebAssembly / wasm32 / Clang (Emscripten); f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): mean 108.081857 bits; p01 105.155677 bits; worst 103.818628 bits; margin 23.818628 bits + +avg 108.1b +min 103.8b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): mean 217.1921705 bits; p01 213.881562 bits; worst 212.956798 bits; margin 32.956798 bits + +avg 217.2b +min 213.0b +✓ 2/2 domains + + +acosh + +WebAssembly / wasm32 / Clang (Emscripten); f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): mean 108.031519376 bits; p01 104.331717 bits; worst 103.672888 bits; margin 23.672888 bits + +avg 108.0b +min 103.7b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): mean 217.720725959 bits; p01 214.442677 bits; worst 213.709421 bits; margin 33.709421 bits + +avg 217.7b +min 213.7b +✓ 2/2 domains + + +atanh + +WebAssembly / wasm32 / Clang (Emscripten); f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): mean 108.11583849 bits; p01 104.54201 bits; worst 103.139045 bits; margin 23.139045 bits + +avg 108.1b +min 103.1b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): mean 218.285376518 bits; p01 214.164921 bits; worst 213.300563 bits; margin 33.300563 bits + +avg 218.3b +min 213.3b +✓ 2/2 domains + + +Special + +erfc + +WebAssembly / wasm32 / Clang (Emscripten); f128; special_functions / erfc +fltx bl::f128 (bl::erfc): mean 107.1893035 bits; p01 100.123363 bits; worst 99.167646 bits; margin 19.167646 bits + +avg 107.2b +min 99.2b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; special_functions / erfc +fltx bl::f256 (bl::erfc): mean 208.160201 bits; p01 191.066815 bits; worst 189.779688 bits; margin 9.779688 bits + +avg 208.2b +min 189.8b +✓ 2/2 domains + + +erf + +WebAssembly / wasm32 / Clang (Emscripten); f128; special_functions / erf +fltx bl::f128 (bl::erf): mean 110.8988915 bits; p01 104.260004 bits; worst 103.47754 bits; margin 23.47754 bits + +avg 110.9b +min 103.5b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; special_functions / erf +fltx bl::f256 (bl::erf): mean 212.782396 bits; p01 196.847186 bits; worst 196.755396 bits; margin 16.755396 bits + +avg 212.8b +min 196.8b +✓ 2/2 domains + + +tgamma + +WebAssembly / wasm32 / Clang (Emscripten); f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): mean 105.565044 bits; p01 98.349598 bits; worst 97.317514 bits; margin 17.317514 bits + +avg 105.6b +min 97.3b +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): mean 209.040528 bits; p01 202.582542 bits; worst 202.45702 bits; margin 22.45702 bits + +avg 209.0b +min 202.5b +✓ 1/1 domains + + +lgamma + +WebAssembly / wasm32 / Clang (Emscripten); f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): mean 107.30017 bits; p01 103.199673 bits; worst 102.168212 bits; margin 22.168212 bits + +avg 107.3b +min 102.2b +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): mean 211.903615 bits; p01 199.617279 bits; worst 199.225949 bits; margin 19.225949 bits + +avg 211.9b +min 199.2b +✓ 1/1 domains + + +Comparisons + +equal + +WebAssembly / wasm32 / Clang (Emscripten); f128; comparisons / equal +fltx bl::f128 (bl::equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; comparisons / equal +fltx bl::f256 (bl::equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +not_equal + +WebAssembly / wasm32 / Clang (Emscripten); f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +less + +WebAssembly / wasm32 / Clang (Emscripten); f128; comparisons / less +fltx bl::f128 (bl::less): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; comparisons / less +fltx bl::f256 (bl::less): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +greater + +WebAssembly / wasm32 / Clang (Emscripten); f128; comparisons / greater +fltx bl::f128 (bl::greater): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; comparisons / greater +fltx bl::f256 (bl::greater): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +less_equal + +WebAssembly / wasm32 / Clang (Emscripten); f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +greater_equal + +WebAssembly / wasm32 / Clang (Emscripten); f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +Random + +uniform_real + +No accuracy result + +— + + +No accuracy result + +— + + +normal + +No accuracy result + +— + + +No accuracy result + +— + + +Mixed Workloads + +product_sum + +No accuracy result + +— + + +No accuracy result + +— + + +chained_arithmetic + +No accuracy result + +— + + +No accuracy result + +— + + +affine_trig + +No accuracy result + +— + + +No accuracy result + +— + + +mandelbrot + +No accuracy result + +— + + +No accuracy result + +— + + +matrix_vector_4x4 + +No accuracy result + +— + + +No accuracy result + +— + + +horner_polynomial + +No accuracy result + +— + + +No accuracy result + +— + + +newton_root + +No accuracy result + +— + + +No accuracy result + +— + + +log_sum_exp + +No accuracy result + +— + + +No accuracy result + +— + + +haversine + +No accuracy result + +— + + +No accuracy result + +— + + diff --git a/validation/metrics/generated/accuracy/accuracy_table_fastmath.svg b/validation/metrics/generated/accuracy/accuracy_table_fastmath.svg new file mode 100644 index 0000000..6bb3249 --- /dev/null +++ b/validation/metrics/generated/accuracy/accuracy_table_fastmath.svg @@ -0,0 +1,1418 @@ + +fltx consumer fast-math accuracy consistency +FLTX MPFR-relative average and minimum tested bits accurate by target with consumer fast-math enabled. + +fltx consumer fast-math accuracy consistency +FLTX MPFR-relative average and minimum tested bits accurate by target with consumer fast-math enabled. +✓ All FLTX domains pass · ! At least one FLTX domain failed · — Not applicable +Competitor results remain available in the per-target overview and CSV data. + +Operation + +WebAssembly / wasm32 / Clang (Emscripten) +f128 + +WebAssembly / wasm32 / Clang (Emscripten) +f256 + +Arithmetic + +add + +WebAssembly / wasm32 / Clang (Emscripten); f128; arithmetic / add +fltx bl::f128 (bl::add): mean 120.266239506 bits; p01 106.483519 bits; worst 105.736235 bits; margin 15.736235 bits + +avg 120.3b +min 105.7b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; arithmetic / add +fltx bl::f256 (bl::add): mean 227.373862582 bits; p01 215.583815 bits; worst 215.297307 bits; margin 25.297307 bits + +avg 227.4b +min 215.3b +✓ 2/2 domains + + +subtract + +WebAssembly / wasm32 / Clang (Emscripten); f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): mean 120.053476095 bits; p01 106.530508 bits; worst 105.744857 bits; margin 15.744857 bits + +avg 120.1b +min 105.7b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): mean 227.447841785 bits; p01 215.602949 bits; worst 215.220788 bits; margin 25.220788 bits + +avg 227.4b +min 215.2b +✓ 2/2 domains + + +multiply + +WebAssembly / wasm32 / Clang (Emscripten); f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): mean 108.702461473 bits; p01 105.665876 bits; worst 105.380753 bits; margin 15.380753 bits + +avg 108.7b +min 105.4b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): mean 220.046096951 bits; p01 215.608028 bits; worst 215.221541 bits; margin 25.221541 bits + +avg 220.0b +min 215.2b +✓ 2/2 domains + + +divide + +WebAssembly / wasm32 / Clang (Emscripten); f128; arithmetic / divide +fltx bl::f128 (bl::divide): mean 110.909104952 bits; p01 105.971646 bits; worst 105.124683 bits; margin 15.124683 bits + +avg 110.9b +min 105.1b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; arithmetic / divide +fltx bl::f256 (bl::divide): mean 219.220520548 bits; p01 215.287455 bits; worst 214.762066 bits; margin 24.762066 bits + +avg 219.2b +min 214.8b +✓ 2/2 domains + + +IO + +to_string + +WebAssembly / wasm32 / Clang (Emscripten); f128; io / to_string +fltx bl::f128 (bl::to_string): mean 113.981524548 bits; p01 110.936216 bits; worst 110.695372 bits; margin 20.695372 bits + +avg 114.0b +min 110.7b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; io / to_string +fltx bl::f256 (bl::to_string): mean 220.440705573 bits; p01 217.235897 bits; worst 216.9758 bits; margin 26.9758 bits + +avg 220.4b +min 217.0b +✓ 2/2 domains + + +to_chars + +WebAssembly / wasm32 / Clang (Emscripten); f128; io / to_chars +fltx bl::f128 (bl::to_chars): mean 113.981524548 bits; p01 110.936216 bits; worst 110.695372 bits; margin 20.695372 bits + +avg 114.0b +min 110.7b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; io / to_chars +fltx bl::f256 (bl::to_chars): mean 220.440705573 bits; p01 217.235897 bits; worst 216.9758 bits; margin 26.9758 bits + +avg 220.4b +min 217.0b +✓ 2/2 domains + + +parse + +WebAssembly / wasm32 / Clang (Emscripten); f128; io / parse +fltx bl::f128 (bl::parse): mean 109.907318229 bits; p01 106.715617 bits; worst 106.003381 bits; margin 0.003381 bits + +avg 109.9b +min 106.0b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; io / parse +fltx bl::f256 (bl::parse): mean 219.729662732 bits; p01 212.275332 bits; worst 212.017147 bits; margin 0.017147 bits + +avg 219.7b +min 212.0b +✓ 2/2 domains + + +Rounding + +floor + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / floor +fltx bl::f128 (bl::floor): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / floor +fltx bl::f256 (bl::floor): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +ceil + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / ceil +fltx bl::f128 (bl::ceil): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / ceil +fltx bl::f256 (bl::ceil): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +trunc + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / trunc +fltx bl::f128 (bl::trunc): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / trunc +fltx bl::f256 (bl::trunc): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +round + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / round +fltx bl::f128 (bl::round): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / round +fltx bl::f256 (bl::round): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +roundeven + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +lround + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / lround +fltx bl::f128 (bl::lround): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / lround +fltx bl::f256 (bl::lround): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +llround + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / llround +fltx bl::f128 (bl::llround): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / llround +fltx bl::f256 (bl::llround): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +round_decimals + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): mean 110.177573 bits; p01 107.236356 bits; worst 107.022726 bits; margin 17.022726 bits + +avg 110.2b +min 107.0b +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): mean 220.044956 bits; p01 215.606687 bits; worst 215.330917 bits; margin 25.330917 bits + +avg 220.0b +min 215.3b +✓ 1/1 domains + + +round_significant + +WebAssembly / wasm32 / Clang (Emscripten); f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): mean 121.33026 bits; p01 107.34042 bits; worst 107.049597 bits; margin 17.049597 bits + +avg 121.3b +min 107.0b +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): mean 229.647449 bits; p01 215.594292 bits; worst 215.06782 bits; margin 25.06782 bits + +avg 229.6b +min 215.1b +✓ 1/1 domains + + +Remainders + +fmod + +WebAssembly / wasm32 / Clang (Emscripten); f128; remainders / fmod +fltx bl::f128 (bl::fmod): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; remainders / fmod +fltx bl::f256 (bl::fmod): mean 243.996795284 bits; p01 217.724535 bits; worst 217.724535 bits; margin 27.724535 bits + +avg 244.0b +min 217.7b +✓ 3/3 domains + + +remainder + +WebAssembly / wasm32 / Clang (Emscripten); f128; remainders / remainder +fltx bl::f128 (bl::remainder): mean 137.991491 bits; p01 inf bits; worst 103.120938 bits; margin 13.120938 bits + +avg 138.0b +min 103.1b +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; remainders / remainder +fltx bl::f256 (bl::remainder): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +remquo + +WebAssembly / wasm32 / Clang (Emscripten); f128; remainders / remquo +fltx bl::f128 (bl::remquo): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; remainders / remquo +fltx bl::f256 (bl::remquo): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +Float Utils + +abs + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +fabs + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +fma + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): mean 117.187792693 bits; p01 104.040192 bits; worst 99.5802 bits; margin 9.5802 bits + +avg 117.2b +min 99.6b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): mean 229.715460613 bits; p01 215.654212 bits; worst 215.096656 bits; margin 25.096656 bits + +avg 229.7b +min 215.1b +✓ 3/3 domains + + +recip + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): mean 109.025331959 bits; p01 105.925795 bits; worst 105.189487 bits; margin 15.189487 bits + +avg 109.0b +min 105.2b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): mean 217.927920075 bits; p01 215.148048 bits; worst 214.625136 bits; margin 24.625136 bits + +avg 217.9b +min 214.6b +✓ 2/2 domains + + +fmin + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +fmax + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +fdim + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): mean 137.996123973 bits; p01 inf bits; worst 106.227061 bits; margin 16.227061 bits + +avg 138.0b +min 106.2b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +copysign + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +ldexp + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +scalbn + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +scalbln + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +frexp + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +modf + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +ilogb + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +logb + +WebAssembly / wasm32 / Clang (Emscripten); f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 2/2 domains + + +nextafter + +No accuracy result + +— + + +No accuracy result + +— + + +nexttoward + +No accuracy result + +— + + +No accuracy result + +— + + +Roots & powers + +sqr + +WebAssembly / wasm32 / Clang (Emscripten); f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): mean 108.712755765 bits; p01 105.598081 bits; worst 105.370295 bits; margin 15.370295 bits + +avg 108.7b +min 105.4b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): mean 220.120699598 bits; p01 216.278909 bits; worst 215.25119 bits; margin 25.25119 bits + +avg 220.1b +min 215.3b +✓ 2/2 domains + + +sqrt + +WebAssembly / wasm32 / Clang (Emscripten); f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): mean 109.760683649 bits; p01 105.75112 bits; worst 104.669867 bits; margin 14.669867 bits + +avg 109.8b +min 104.7b +✓ 4/4 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): mean 217.906343684 bits; p01 211.19589 bits; worst 209.568118 bits; margin 19.568118 bits + +avg 217.9b +min 209.6b +✓ 4/4 domains + + +cbrt + +WebAssembly / wasm32 / Clang (Emscripten); f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): mean 108.521255256 bits; p01 104.960828 bits; worst 104.098992 bits; margin 14.098992 bits + +avg 108.5b +min 104.1b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): mean 219.28474431 bits; p01 215.534477 bits; worst 214.867489 bits; margin 24.867489 bits + +avg 219.3b +min 214.9b +✓ 2/2 domains + + +hypot + +WebAssembly / wasm32 / Clang (Emscripten); f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): mean 122.379786777 bits; p01 105.55647 bits; worst 104.375984 bits; margin 14.375984 bits + +avg 122.4b +min 104.4b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): mean 229.931215146 bits; p01 215.484839 bits; worst 213.870154 bits; margin 23.870154 bits + +avg 229.9b +min 213.9b +✓ 2/2 domains + + +pow + +WebAssembly / wasm32 / Clang (Emscripten); f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): mean 107.1276135 bits; p01 102.267431 bits; worst 101.314349 bits; margin 21.314349 bits + +avg 107.1b +min 101.3b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): mean 216.837164 bits; p01 212.047897 bits; worst 211.143117 bits; margin 31.143117 bits + +avg 216.8b +min 211.1b +✓ 2/2 domains + + +ipow + +WebAssembly / wasm32 / Clang (Emscripten); f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): mean 106.491467825 bits; p01 103.779117 bits; worst 103.190083 bits; margin 13.190083 bits + +avg 106.5b +min 103.2b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): mean 217.175762701 bits; p01 214.383216 bits; worst 213.656994 bits; margin 23.656994 bits + +avg 217.2b +min 213.7b +✓ 2/2 domains + + +Exponentials + +exp + +WebAssembly / wasm32 / Clang (Emscripten); f128; exponentials / exp +fltx bl::f128 (bl::exp): mean 106.9987285 bits; p01 104.374273 bits; worst 103.64511 bits; margin 23.64511 bits + +avg 107.0b +min 103.6b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; exponentials / exp +fltx bl::f256 (bl::exp): mean 216.4305135 bits; p01 209.786789 bits; worst 209.697661 bits; margin 29.697661 bits + +avg 216.4b +min 209.7b +✓ 2/2 domains + + +exp2 + +WebAssembly / wasm32 / Clang (Emscripten); f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): mean 108.8963935 bits; p01 106.013023 bits; worst 105.117537 bits; margin 25.117537 bits + +avg 108.9b +min 105.1b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): mean 218.030361 bits; p01 214.973213 bits; worst 214.202868 bits; margin 34.202868 bits + +avg 218.0b +min 214.2b +✓ 2/2 domains + + +expm1 + +WebAssembly / wasm32 / Clang (Emscripten); f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): mean 121.61686848 bits; p01 105.111574 bits; worst 104.102752 bits; margin 24.102752 bits + +avg 121.6b +min 104.1b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): mean 227.989217153 bits; p01 214.88315 bits; worst 213.793932 bits; margin 33.793932 bits + +avg 228.0b +min 213.8b +✓ 2/2 domains + + +Logarithms + +log + +WebAssembly / wasm32 / Clang (Emscripten); f128; logarithms / log +fltx bl::f128 (bl::log): mean 108.40767633 bits; p01 104.625423 bits; worst 103.727726 bits; margin 23.727726 bits + +avg 108.4b +min 103.7b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; logarithms / log +fltx bl::f256 (bl::log): mean 217.713430044 bits; p01 214.333783 bits; worst 213.252927 bits; margin 33.252927 bits + +avg 217.7b +min 213.3b +✓ 3/3 domains + + +log2 + +WebAssembly / wasm32 / Clang (Emscripten); f128; logarithms / log2 +fltx bl::f128 (bl::log2): mean 108.785650924 bits; p01 104.550799 bits; worst 103.716432 bits; margin 23.716432 bits + +avg 108.8b +min 103.7b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; logarithms / log2 +fltx bl::f256 (bl::log2): mean 218.589512067 bits; p01 214.28538 bits; worst 213.192358 bits; margin 33.192358 bits + +avg 218.6b +min 213.2b +✓ 3/3 domains + + +log10 + +WebAssembly / wasm32 / Clang (Emscripten); f128; logarithms / log10 +fltx bl::f128 (bl::log10): mean 107.503050022 bits; p01 104.469291 bits; worst 103.762278 bits; margin 23.762278 bits + +avg 107.5b +min 103.8b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; logarithms / log10 +fltx bl::f256 (bl::log10): mean 217.407206146 bits; p01 214.245682 bits; worst 213.257193 bits; margin 33.257193 bits + +avg 217.4b +min 213.3b +✓ 3/3 domains + + +log1p + +WebAssembly / wasm32 / Clang (Emscripten); f128; logarithms / log1p +fltx bl::f128 (bl::log1p): mean 121.372231555 bits; p01 105.150365 bits; worst 103.619384 bits; margin 23.619384 bits + +avg 121.4b +min 103.6b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; logarithms / log1p +fltx bl::f256 (bl::log1p): mean 227.627482935 bits; p01 214.787129 bits; worst 214.020088 bits; margin 34.020088 bits + +avg 227.6b +min 214.0b +✓ 2/2 domains + + +Trigonometric + +sin + +WebAssembly / wasm32 / Clang (Emscripten); f128; trigonometric / sin +fltx bl::f128 (bl::sin): mean 110.553532277 bits; p01 98.777563 bits; worst 98.619216 bits; margin 18.619216 bits + +avg 110.6b +min 98.6b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; trigonometric / sin +fltx bl::f256 (bl::sin): mean 222.290222968 bits; p01 208.567012 bits; worst 202.92477 bits; margin 22.92477 bits + +avg 222.3b +min 202.9b +✓ 3/3 domains + + +cos + +WebAssembly / wasm32 / Clang (Emscripten); f128; trigonometric / cos +fltx bl::f128 (bl::cos): mean 113.520718505 bits; p01 100.266388 bits; worst 99.209588 bits; margin 19.209588 bits + +avg 113.5b +min 99.2b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; trigonometric / cos +fltx bl::f256 (bl::cos): mean 226.780465244 bits; p01 215.246584 bits; worst 208.674366 bits; margin 28.674366 bits + +avg 226.8b +min 208.7b +✓ 3/3 domains + + +sincos + +No accuracy result + +— + + +No accuracy result + +— + + +tan + +WebAssembly / wasm32 / Clang (Emscripten); f128; trigonometric / tan +fltx bl::f128 (bl::tan): mean 106.671100353 bits; p01 98.776698 bits; worst 98.614153 bits; margin 23.614153 bits + +avg 106.7b +min 98.6b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; trigonometric / tan +fltx bl::f256 (bl::tan): mean 217.050653666 bits; p01 208.567009 bits; worst 202.92477 bits; margin 32.92477 bits + +avg 217.1b +min 202.9b +✓ 3/3 domains + + +asin + +WebAssembly / wasm32 / Clang (Emscripten); f128; trigonometric / asin +fltx bl::f128 (bl::asin): mean 108.580073592 bits; p01 105.096123 bits; worst 104.081582 bits; margin 24.081582 bits + +avg 108.6b +min 104.1b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; trigonometric / asin +fltx bl::f256 (bl::asin): mean 217.91775033 bits; p01 214.870821 bits; worst 214.404436 bits; margin 34.404436 bits + +avg 217.9b +min 214.4b +✓ 2/2 domains + + +acos + +WebAssembly / wasm32 / Clang (Emscripten); f128; trigonometric / acos +fltx bl::f128 (bl::acos): mean 106.470630111 bits; p01 95.825547 bits; worst 81.584963 bits; margin 1.584963 bits + +avg 106.5b +min 81.6b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; trigonometric / acos +fltx bl::f256 (bl::acos): mean 216.029308016 bits; p01 205.510139 bits; worst 192.466318 bits; margin 12.466318 bits + +avg 216.0b +min 192.5b +✓ 2/2 domains + + +atan + +WebAssembly / wasm32 / Clang (Emscripten); f128; trigonometric / atan +fltx bl::f128 (bl::atan): mean 108.728555 bits; p01 105.953468 bits; worst 104.92639 bits; margin 24.92639 bits + +avg 108.7b +min 104.9b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; trigonometric / atan +fltx bl::f256 (bl::atan): mean 218.142465 bits; p01 215.364973 bits; worst 214.678988 bits; margin 34.678988 bits + +avg 218.1b +min 214.7b +✓ 2/2 domains + + +atan2 + +WebAssembly / wasm32 / Clang (Emscripten); f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): mean 108.727143624 bits; p01 105.799026 bits; worst 104.520841 bits; margin 24.520841 bits + +avg 108.7b +min 104.5b +✓ 3/3 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): mean 217.911773079 bits; p01 215.258136 bits; worst 214.277602 bits; margin 34.277602 bits + +avg 217.9b +min 214.3b +✓ 3/3 domains + + +Hyperbolic + +sinh + +WebAssembly / wasm32 / Clang (Emscripten); f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): mean 107.4201585 bits; p01 104.726423 bits; worst 103.568829 bits; margin 23.568829 bits + +avg 107.4b +min 103.6b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): mean 217.022625 bits; p01 214.597984 bits; worst 213.844482 bits; margin 33.844482 bits + +avg 217.0b +min 213.8b +✓ 2/2 domains + + +cosh + +WebAssembly / wasm32 / Clang (Emscripten); f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): mean 107.9070545 bits; p01 105.118172 bits; worst 104.370708 bits; margin 24.370708 bits + +avg 107.9b +min 104.4b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): mean 217.5106305 bits; p01 214.737937 bits; worst 214.159072 bits; margin 34.159072 bits + +avg 217.5b +min 214.2b +✓ 2/2 domains + + +tanh + +WebAssembly / wasm32 / Clang (Emscripten); f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): mean 109.217494 bits; p01 105.123457 bits; worst 103.771823 bits; margin 23.771823 bits + +avg 109.2b +min 103.8b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): mean 219.128554 bits; p01 215.222392 bits; worst 214.042672 bits; margin 34.042672 bits + +avg 219.1b +min 214.0b +✓ 2/2 domains + + +asinh + +WebAssembly / wasm32 / Clang (Emscripten); f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): mean 108.081857 bits; p01 105.155677 bits; worst 103.818628 bits; margin 23.818628 bits + +avg 108.1b +min 103.8b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): mean 217.1921705 bits; p01 213.881562 bits; worst 212.956798 bits; margin 32.956798 bits + +avg 217.2b +min 213.0b +✓ 2/2 domains + + +acosh + +WebAssembly / wasm32 / Clang (Emscripten); f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): mean 108.031519376 bits; p01 104.331717 bits; worst 103.672888 bits; margin 23.672888 bits + +avg 108.0b +min 103.7b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): mean 217.720725959 bits; p01 214.442677 bits; worst 213.709421 bits; margin 33.709421 bits + +avg 217.7b +min 213.7b +✓ 2/2 domains + + +atanh + +WebAssembly / wasm32 / Clang (Emscripten); f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): mean 108.11583849 bits; p01 104.54201 bits; worst 103.139045 bits; margin 23.139045 bits + +avg 108.1b +min 103.1b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): mean 218.285376518 bits; p01 214.164921 bits; worst 213.300563 bits; margin 33.300563 bits + +avg 218.3b +min 213.3b +✓ 2/2 domains + + +Special + +erfc + +WebAssembly / wasm32 / Clang (Emscripten); f128; special_functions / erfc +fltx bl::f128 (bl::erfc): mean 107.1893035 bits; p01 100.123363 bits; worst 99.167646 bits; margin 19.167646 bits + +avg 107.2b +min 99.2b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; special_functions / erfc +fltx bl::f256 (bl::erfc): mean 208.160201 bits; p01 191.066815 bits; worst 189.779688 bits; margin 9.779688 bits + +avg 208.2b +min 189.8b +✓ 2/2 domains + + +erf + +WebAssembly / wasm32 / Clang (Emscripten); f128; special_functions / erf +fltx bl::f128 (bl::erf): mean 110.8988915 bits; p01 104.260004 bits; worst 103.47754 bits; margin 23.47754 bits + +avg 110.9b +min 103.5b +✓ 2/2 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; special_functions / erf +fltx bl::f256 (bl::erf): mean 212.782396 bits; p01 196.847186 bits; worst 196.755396 bits; margin 16.755396 bits + +avg 212.8b +min 196.8b +✓ 2/2 domains + + +tgamma + +WebAssembly / wasm32 / Clang (Emscripten); f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): mean 105.565044 bits; p01 98.349598 bits; worst 97.317514 bits; margin 17.317514 bits + +avg 105.6b +min 97.3b +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): mean 209.040528 bits; p01 202.582542 bits; worst 202.45702 bits; margin 22.45702 bits + +avg 209.0b +min 202.5b +✓ 1/1 domains + + +lgamma + +WebAssembly / wasm32 / Clang (Emscripten); f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): mean 107.30017 bits; p01 103.199673 bits; worst 102.168212 bits; margin 22.168212 bits + +avg 107.3b +min 102.2b +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): mean 211.903615 bits; p01 199.617279 bits; worst 199.225949 bits; margin 19.225949 bits + +avg 211.9b +min 199.2b +✓ 1/1 domains + + +Comparisons + +equal + +WebAssembly / wasm32 / Clang (Emscripten); f128; comparisons / equal +fltx bl::f128 (bl::equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; comparisons / equal +fltx bl::f256 (bl::equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +not_equal + +WebAssembly / wasm32 / Clang (Emscripten); f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +less + +WebAssembly / wasm32 / Clang (Emscripten); f128; comparisons / less +fltx bl::f128 (bl::less): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; comparisons / less +fltx bl::f256 (bl::less): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +greater + +WebAssembly / wasm32 / Clang (Emscripten); f128; comparisons / greater +fltx bl::f128 (bl::greater): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; comparisons / greater +fltx bl::f256 (bl::greater): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +less_equal + +WebAssembly / wasm32 / Clang (Emscripten); f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +greater_equal + +WebAssembly / wasm32 / Clang (Emscripten); f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +WebAssembly / wasm32 / Clang (Emscripten); f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): mean inf bits; p01 inf bits; worst inf bits; margin inf bits + +exact +✓ 1/1 domains + + +Random + +uniform_real + +No accuracy result + +— + + +No accuracy result + +— + + +normal + +No accuracy result + +— + + +No accuracy result + +— + + +Mixed Workloads + +product_sum + +No accuracy result + +— + + +No accuracy result + +— + + +chained_arithmetic + +No accuracy result + +— + + +No accuracy result + +— + + +affine_trig + +No accuracy result + +— + + +No accuracy result + +— + + +mandelbrot + +No accuracy result + +— + + +No accuracy result + +— + + +matrix_vector_4x4 + +No accuracy result + +— + + +No accuracy result + +— + + +horner_polynomial + +No accuracy result + +— + + +No accuracy result + +— + + +newton_root + +No accuracy result + +— + + +No accuracy result + +— + + +log_sum_exp + +No accuracy result + +— + + +No accuracy result + +— + + +haversine + +No accuracy result + +— + + +No accuracy result + +— + + diff --git a/validation/metrics/generated/accuracy/tables_run.json b/validation/metrics/generated/accuracy/tables_run.json new file mode 100644 index 0000000..6a56ade --- /dev/null +++ b/validation/metrics/generated/accuracy/tables_run.json @@ -0,0 +1,15 @@ +{ + "consumer_mode": "strict", + "outputs": [ + "accuracy_table.svg" + ], + "run_ids": { + "wasm32/wasm32/Emscripten": "07cb9aa0af7241f981735eab48f97723" + }, + "schema_version": "6", + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "targets": [ + "wasm32/wasm32/Emscripten" + ] +} diff --git a/validation/metrics/generated/accuracy/tables_run_fastmath.json b/validation/metrics/generated/accuracy/tables_run_fastmath.json new file mode 100644 index 0000000..cf712ad --- /dev/null +++ b/validation/metrics/generated/accuracy/tables_run_fastmath.json @@ -0,0 +1,15 @@ +{ + "consumer_mode": "fastmath", + "outputs": [ + "accuracy_table_fastmath.svg" + ], + "run_ids": { + "wasm32/wasm32/Emscripten": "680cbf9c13134cc08ab2b5bd2bd1191c" + }, + "schema_version": "6", + "source_fingerprint": "7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1", + "source_revision": "b38d8f2a0c9da2eeae373bce48a1aa42bf88fcdc-dirty-7cd523deac97", + "targets": [ + "wasm32/wasm32/Emscripten" + ] +} diff --git a/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f128_fastmath_overview.svg b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f128_fastmath_overview.svg new file mode 100644 index 0000000..ae8ba7b --- /dev/null +++ b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f128_fastmath_overview.svg @@ -0,0 +1,3020 @@ + + + + +f128 consumer fast-math metrics overview — WebAssembly / wasm32 / Clang (Emscripten) +Accuracy excludes the subnormal domain; support is reported separately. Speed is relative to FLTX. + +operation + + +bl::f128 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + + +Arithmetic + + + + +add + +fltx bl::f128 +API: bl::add +mean: 119.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: No +signed zero: no +subnormal support: yes +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 0.926 ns/iteration (no available competitor) + +119.1 + +105.7 + +1/1 + +0.926 ns + +No + +✗ + +✓ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 118.9 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: No +signed zero: no +subnormal support: yes +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 0.923 ns/iteration (no available competitor) + +118.9 + +105.7 + +1/1 + +0.923 ns + +No + +✗ + +✓ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 1/1 +minimum threshold margin: 15.4 bits +special values: No +signed zero: no +subnormal support: yes +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 2.03 ns/iteration (no available competitor) + +108.7 + +105.4 + +1/1 + +2.03 ns + +No + +✗ + +✓ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 1/1 +minimum threshold margin: 15.1 bits +special values: No +signed zero: no +subnormal support: yes +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 2.49 ns/iteration (no available competitor) + +110.9 + +105.1 + +1/1 + +2.49 ns + +No + +✗ + +✓ + + + + +IO + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 254.2 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +254.2 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 219.8 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +219.8 ns + +Both + +✓ + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 106.7 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 106.7, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 282.8 ns/iteration (no available competitor) + +109.9 + +106.0 + +2/2 + +282.8 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.761 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.761 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.51 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.51 ns + +Both + +✓ + +- + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.30 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.30 ns + +Both + +✓ + +- + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 8.78 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +8.78 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.33 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +10.33 ns + +NaN + +✓ + +- + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 6.76 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +6.76 ns + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 6.27 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +6.27 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 93.27 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +93.27 ns + +NaN + +✓ + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 140.2 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +140.2 ns + +NaN + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 20.51 ns/iteration (no available competitor) + +exact + +exact + +3/3 + +20.51 ns + +No + +✓ + +- + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 22.84 ns/iteration (no available competitor) + +138.0 + +103.1 + +1/1 + +22.84 ns + +No + +✓ + +- + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 22.60 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +22.60 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.813 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.813 ns + +NaN + +✓ + +✓ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.813 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.813 ns + +NaN + +✓ + +- + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.2 bits +p01: 104.0 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 108.6, p01 104.0, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.3, p01 105.7, worst 104.6, required 90.0, margin 14.6, n=4096, seed=10322096095657499357 +benchmark: 7.59 ns/iteration (no available competitor) + +117.2 + +99.6 + +3/3 + +7.59 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 32.82 ns/iteration (no available competitor) + +109.0 + +105.2 + +2/2 + +32.82 ns + +NaN + +✗ + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.03 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.03 ns + +No + +✓ + +- + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.974 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +0.974 ns + +No + +✓ + +- + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.09 ns/iteration (no available competitor) + +138.0 + +106.2 + +2/2 + +3.09 ns + +No + +✓ + +- + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.385 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.385 ns + +No + +✓ + +- + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.90 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.90 ns + +NaN + +✓ + +- + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.02 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.02 ns + +NaN + +✓ + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.01 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.01 ns + +NaN + +✓ + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.50 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.50 ns + +Both + +✓ + +✓ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.81 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +6.81 ns + +NaN + +✓ + +- + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.85 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.85 ns + +- + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.98 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.98 ns + +NaN + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 5.92 ns/iteration (no available competitor) + +- + +- + +- + +5.92 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 5.90 ns/iteration (no available competitor) + +- + +- + +- + +5.90 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.23 ns/iteration (no available competitor) + +108.7 + +105.4 + +2/2 + +1.23 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.5 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 3/3 +minimum threshold margin: 14.7 bits +special values: NaN +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 110.5, p01 106.7, worst 106.1, required 90.0, margin 16.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 4.94 ns/iteration (no available competitor) + +109.5 + +104.7 + +3/3 + +4.94 ns + +NaN + +✓ + +✓ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.5 bits +p01: 105.0 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 14.1 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 108.6, p01 105.3, worst 104.1, required 90.0, margin 14.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.4, p01 105.0, worst 104.1, required 90.0, margin 14.1, n=4096, seed=10322096095657499357 +benchmark: 18.26 ns/iteration (no available competitor) + +108.5 + +104.1 + +2/2 + +18.26 ns + +NaN + +✓ + +- + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 11.57 ns/iteration (no available competitor) + +122.4 + +104.4 + +2/2 + +11.57 ns + +No + +✓ + +- + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 241.3 ns/iteration (no available competitor) + +107.1 + +101.3 + +2/2 + +241.3 ns + +No + +✓ + +- + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 26.58 ns/iteration (no available competitor) + +106.5 + +103.2 + +2/2 + +26.58 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 107.0 bits +p01: 104.4 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 106.6, p01 104.4, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.4, p01 104.8, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 121.8 ns/iteration (no available competitor) + +107.0 + +103.6 + +2/2 + +121.8 ns + +NaN + +- + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 115.4 ns/iteration (no available competitor) + +108.9 + +105.1 + +2/2 + +115.4 ns + +NaN + +- + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: NaN +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 121.8 ns/iteration (no available competitor) + +121.6 + +104.1 + +2/2 + +121.8 ns + +NaN + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.6, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 144.4 ns/iteration (no available competitor) + +108.4 + +103.7 + +3/3 + +144.4 ns + +NaN + +- + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 148.7 ns/iteration (no available competitor) + +108.8 + +103.7 + +3/3 + +148.7 ns + +NaN + +- + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.5 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 148.4 ns/iteration (no available competitor) + +107.5 + +103.8 + +3/3 + +148.4 ns + +NaN + +- + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: NaN +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 152.1 ns/iteration (no available competitor) + +121.4 + +103.6 + +2/2 + +152.1 ns + +NaN + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: NaN +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 107.1 ns/iteration (no available competitor) + +110.6 + +98.6 + +3/3 + +107.1 ns + +NaN + +✓ + +- + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 106.9 ns/iteration (no available competitor) + +113.5 + +99.2 + +3/3 + +106.9 ns + +Both + +- + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 118.1 ns/iteration (no available competitor) + +- + +- + +- + +118.1 ns + +- + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: NaN +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.6, required 75.0, margin 28.6, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 116.4 ns/iteration (no available competitor) + +106.7 + +98.6 + +3/3 + +116.4 ns + +NaN + +✓ + +- + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: NaN +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 196.6 ns/iteration (no available competitor) + +108.6 + +104.1 + +2/2 + +196.6 ns + +NaN + +✓ + +- + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 202.1 ns/iteration (no available competitor) + +106.5 + +81.6 + +2/2 + +202.1 ns + +NaN + +- + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 142.1 ns/iteration (no available competitor) + +108.7 + +104.9 + +2/2 + +142.1 ns + +NaN + +✓ + +- + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: No +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 148.9 ns/iteration (no available competitor) + +108.7 + +104.5 + +3/3 + +148.9 ns + +No + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 140.2 ns/iteration (no available competitor) + +107.4 + +103.6 + +2/2 + +140.2 ns + +Both + +✓ + +- + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 139.2 ns/iteration (no available competitor) + +107.9 + +104.4 + +2/2 + +139.2 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 146.5 ns/iteration (no available competitor) + +109.2 + +103.8 + +2/2 + +146.5 ns + +NaN + +✓ + +- + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 142.6 ns/iteration (no available competitor) + +108.1 + +103.8 + +2/2 + +142.6 ns + +NaN + +✓ + +- + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 165.9 ns/iteration (no available competitor) + +108.0 + +103.7 + +2/2 + +165.9 ns + +NaN + +- + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: NaN +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 163.1 ns/iteration (no available competitor) + +108.1 + +103.1 + +2/2 + +163.1 ns + +NaN + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 813.3 ns/iteration (no available competitor) + +107.2 + +99.2 + +2/2 + +813.3 ns + +Both + +- + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 814.5 ns/iteration (no available competitor) + +110.9 + +103.5 + +2/2 + +814.5 ns + +Both + +✓ + +- + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 593.5 ns/iteration (no available competitor) + +105.6 + +97.3 + +1/1 + +593.5 ns + +Both + +- + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 657.8 ns/iteration (no available competitor) + +107.3 + +102.2 + +1/1 + +657.8 ns + +NaN + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.12 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.12 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.11 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.11 ns + +Both + +- + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.15 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.15 ns + +Both + +- + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.10 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.10 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.17 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.17 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.17 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.17 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 5.83 ns/iteration (no available competitor) + +- + +- + +- + +5.83 ns + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 40.86 ns/iteration (no available competitor) + +- + +- + +- + +40.86 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 7.54 ns/iteration (no available competitor) + +- + +- + +- + +7.54 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 20.30 ns/iteration (no available competitor) + +- + +- + +- + +20.30 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 233.7 ns/iteration (no available competitor) + +- + +- + +- + +233.7 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 15.09 ns/iteration (no available competitor) + +- + +- + +- + +15.09 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 49.69 ns/iteration (no available competitor) + +- + +- + +- + +49.69 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 98.52 ns/iteration (no available competitor) + +- + +- + +- + +98.52 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 30.13 ns/iteration (no available competitor) + +- + +- + +- + +30.13 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 965.6 ns/iteration (no available competitor) + +- + +- + +- + +965.6 ns + +- + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 551.6 ns/iteration (no available competitor) + +- + +- + +- + +551.6 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f128_fastmath_overview_compact.svg b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f128_fastmath_overview_compact.svg new file mode 100644 index 0000000..575b5b0 --- /dev/null +++ b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f128_fastmath_overview_compact.svg @@ -0,0 +1,3017 @@ + + + + + +operation + + +bl::f128 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +Subnorm + +avg + +min + +pass + + + +Arithmetic + + + + +add + +fltx bl::f128 +API: bl::add +mean: 119.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: No +signed zero: no +subnormal support: yes +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 0.926 ns/iteration (no available competitor) + +119.1 + +105.7 + +1/1 + +0.93 ns + +No + +✗ + +✓ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 118.9 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: No +signed zero: no +subnormal support: yes +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 0.923 ns/iteration (no available competitor) + +118.9 + +105.7 + +1/1 + +0.92 ns + +No + +✗ + +✓ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 1/1 +minimum threshold margin: 15.4 bits +special values: No +signed zero: no +subnormal support: yes +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 2.03 ns/iteration (no available competitor) + +108.7 + +105.4 + +1/1 + +2.0 ns + +No + +✗ + +✓ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 1/1 +minimum threshold margin: 15.1 bits +special values: No +signed zero: no +subnormal support: yes +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 2.49 ns/iteration (no available competitor) + +110.9 + +105.1 + +1/1 + +2.5 ns + +No + +✗ + +✓ + + + + +IO + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 254.2 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +254 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 219.8 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +220 ns + +Both + +✓ + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 106.7 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 106.7, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 282.8 ns/iteration (no available competitor) + +109.9 + +106.0 + +2/2 + +283 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.761 ns/iteration (no available competitor) + += + += + +1/1 + +0.76 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.51 ns/iteration (no available competitor) + += + += + +1/1 + +1.5 ns + +Both + +✓ + +- + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.30 ns/iteration (no available competitor) + += + += + +1/1 + +2.3 ns + +Both + +✓ + +- + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 8.78 ns/iteration (no available competitor) + += + += + +1/1 + +8.8 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.33 ns/iteration (no available competitor) + += + += + +1/1 + +10.3 ns + +NaN + +✓ + +- + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 6.76 ns/iteration (no available competitor) + += + += + +1/1 + +6.8 ns + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 6.27 ns/iteration (no available competitor) + += + += + +1/1 + +6.3 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 93.27 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +93.3 ns + +NaN + +✓ + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 140.2 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +140 ns + +NaN + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 20.51 ns/iteration (no available competitor) + += + += + +3/3 + +20.5 ns + +No + +✓ + +- + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 22.84 ns/iteration (no available competitor) + +138.0 + +103.1 + +1/1 + +22.8 ns + +No + +✓ + +- + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 22.60 ns/iteration (no available competitor) + += + += + +1/1 + +22.6 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.813 ns/iteration (no available competitor) + += + += + +1/1 + +0.81 ns + +NaN + +✓ + +✓ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.813 ns/iteration (no available competitor) + += + += + +1/1 + +0.81 ns + +NaN + +✓ + +- + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.2 bits +p01: 104.0 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 108.6, p01 104.0, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.3, p01 105.7, worst 104.6, required 90.0, margin 14.6, n=4096, seed=10322096095657499357 +benchmark: 7.59 ns/iteration (no available competitor) + +117.2 + +99.6 + +3/3 + +7.6 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 32.82 ns/iteration (no available competitor) + +109.0 + +105.2 + +2/2 + +32.8 ns + +NaN + +✗ + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.03 ns/iteration (no available competitor) + += + += + +2/2 + +1.0 ns + +No + +✓ + +- + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.974 ns/iteration (no available competitor) + += + += + +2/2 + +0.97 ns + +No + +✓ + +- + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.09 ns/iteration (no available competitor) + +138.0 + +106.2 + +2/2 + +3.1 ns + +No + +✓ + +- + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.385 ns/iteration (no available competitor) + += + += + +1/1 + +0.39 ns + +No + +✓ + +- + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.90 ns/iteration (no available competitor) + += + += + +1/1 + +2.9 ns + +NaN + +✓ + +- + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.02 ns/iteration (no available competitor) + += + += + +1/1 + +3.0 ns + +NaN + +✓ + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.01 ns/iteration (no available competitor) + += + += + +1/1 + +3.0 ns + +NaN + +✓ + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.50 ns/iteration (no available competitor) + += + += + +1/1 + +3.5 ns + +Both + +✓ + +✓ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.81 ns/iteration (no available competitor) + += + += + +2/2 + +6.8 ns + +NaN + +✓ + +- + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.85 ns/iteration (no available competitor) + += + += + +2/2 + +1.8 ns + +- + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.98 ns/iteration (no available competitor) + += + += + +2/2 + +2.0 ns + +NaN + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 5.92 ns/iteration (no available competitor) + +- + +- + +- + +5.9 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 5.90 ns/iteration (no available competitor) + +- + +- + +- + +5.9 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.23 ns/iteration (no available competitor) + +108.7 + +105.4 + +2/2 + +1.2 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.5 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 3/3 +minimum threshold margin: 14.7 bits +special values: NaN +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 110.5, p01 106.7, worst 106.1, required 90.0, margin 16.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 4.94 ns/iteration (no available competitor) + +109.5 + +104.7 + +3/3 + +4.9 ns + +NaN + +✓ + +✓ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.5 bits +p01: 105.0 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 14.1 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 108.6, p01 105.3, worst 104.1, required 90.0, margin 14.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.4, p01 105.0, worst 104.1, required 90.0, margin 14.1, n=4096, seed=10322096095657499357 +benchmark: 18.26 ns/iteration (no available competitor) + +108.5 + +104.1 + +2/2 + +18.3 ns + +NaN + +✓ + +- + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 11.57 ns/iteration (no available competitor) + +122.4 + +104.4 + +2/2 + +11.6 ns + +No + +✓ + +- + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 241.3 ns/iteration (no available competitor) + +107.1 + +101.3 + +2/2 + +241 ns + +No + +✓ + +- + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 26.58 ns/iteration (no available competitor) + +106.5 + +103.2 + +2/2 + +26.6 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 107.0 bits +p01: 104.4 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 106.6, p01 104.4, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.4, p01 104.8, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 121.8 ns/iteration (no available competitor) + +107.0 + +103.6 + +2/2 + +122 ns + +NaN + +- + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 115.4 ns/iteration (no available competitor) + +108.9 + +105.1 + +2/2 + +115 ns + +NaN + +- + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: NaN +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 121.8 ns/iteration (no available competitor) + +121.6 + +104.1 + +2/2 + +122 ns + +NaN + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.6, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 144.4 ns/iteration (no available competitor) + +108.4 + +103.7 + +3/3 + +144 ns + +NaN + +- + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 148.7 ns/iteration (no available competitor) + +108.8 + +103.7 + +3/3 + +149 ns + +NaN + +- + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.5 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 148.4 ns/iteration (no available competitor) + +107.5 + +103.8 + +3/3 + +148 ns + +NaN + +- + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: NaN +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 152.1 ns/iteration (no available competitor) + +121.4 + +103.6 + +2/2 + +152 ns + +NaN + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: NaN +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 107.1 ns/iteration (no available competitor) + +110.6 + +98.6 + +3/3 + +107 ns + +NaN + +✓ + +- + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 106.9 ns/iteration (no available competitor) + +113.5 + +99.2 + +3/3 + +107 ns + +Both + +- + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 118.1 ns/iteration (no available competitor) + +- + +- + +- + +118 ns + +- + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: NaN +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.6, required 75.0, margin 28.6, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 116.4 ns/iteration (no available competitor) + +106.7 + +98.6 + +3/3 + +116 ns + +NaN + +✓ + +- + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: NaN +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 196.6 ns/iteration (no available competitor) + +108.6 + +104.1 + +2/2 + +197 ns + +NaN + +✓ + +- + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 202.1 ns/iteration (no available competitor) + +106.5 + +81.6 + +2/2 + +202 ns + +NaN + +- + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 142.1 ns/iteration (no available competitor) + +108.7 + +104.9 + +2/2 + +142 ns + +NaN + +✓ + +- + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: No +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 148.9 ns/iteration (no available competitor) + +108.7 + +104.5 + +3/3 + +149 ns + +No + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 140.2 ns/iteration (no available competitor) + +107.4 + +103.6 + +2/2 + +140 ns + +Both + +✓ + +- + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 139.2 ns/iteration (no available competitor) + +107.9 + +104.4 + +2/2 + +139 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 146.5 ns/iteration (no available competitor) + +109.2 + +103.8 + +2/2 + +146 ns + +NaN + +✓ + +- + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 142.6 ns/iteration (no available competitor) + +108.1 + +103.8 + +2/2 + +143 ns + +NaN + +✓ + +- + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 165.9 ns/iteration (no available competitor) + +108.0 + +103.7 + +2/2 + +166 ns + +NaN + +- + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: NaN +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 163.1 ns/iteration (no available competitor) + +108.1 + +103.1 + +2/2 + +163 ns + +NaN + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 813.3 ns/iteration (no available competitor) + +107.2 + +99.2 + +2/2 + +813 ns + +Both + +- + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 814.5 ns/iteration (no available competitor) + +110.9 + +103.5 + +2/2 + +815 ns + +Both + +✓ + +- + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 593.5 ns/iteration (no available competitor) + +105.6 + +97.3 + +1/1 + +594 ns + +Both + +- + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 657.8 ns/iteration (no available competitor) + +107.3 + +102.2 + +1/1 + +658 ns + +NaN + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.12 ns/iteration (no available competitor) + += + += + +1/1 + +1.1 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.11 ns/iteration (no available competitor) + += + += + +1/1 + +1.1 ns + +Both + +- + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.15 ns/iteration (no available competitor) + += + += + +1/1 + +2.2 ns + +Both + +- + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.10 ns/iteration (no available competitor) + += + += + +1/1 + +2.1 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.17 ns/iteration (no available competitor) + += + += + +1/1 + +2.2 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.17 ns/iteration (no available competitor) + += + += + +1/1 + +2.2 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 5.83 ns/iteration (no available competitor) + +- + +- + +- + +5.8 ns + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 40.86 ns/iteration (no available competitor) + +- + +- + +- + +40.9 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 7.54 ns/iteration (no available competitor) + +- + +- + +- + +7.5 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 20.30 ns/iteration (no available competitor) + +- + +- + +- + +20.3 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 233.7 ns/iteration (no available competitor) + +- + +- + +- + +234 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 15.09 ns/iteration (no available competitor) + +- + +- + +- + +15.1 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 49.69 ns/iteration (no available competitor) + +- + +- + +- + +49.7 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 98.52 ns/iteration (no available competitor) + +- + +- + +- + +98.5 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 30.13 ns/iteration (no available competitor) + +- + +- + +- + +30.1 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 965.6 ns/iteration (no available competitor) + +- + +- + +- + +966 ns + +- + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 551.6 ns/iteration (no available competitor) + +- + +- + +- + +552 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f128_overview.svg b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f128_overview.svg new file mode 100644 index 0000000..f0e5549 --- /dev/null +++ b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f128_overview.svg @@ -0,0 +1,9371 @@ + + + + +f128 metrics overview — WebAssembly / wasm32 / Clang (Emscripten) +Accuracy is MPFR-relative; domain pass counts use FLTX release thresholds; speed is implementation ÷ FLTX. + +operation + + +bl::f128 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time + + + +qdpp (dd_real) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +boost (cpp_double_double) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +TLFloat (tlquad) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +Arithmetic + + + + + + + +add + +fltx bl::f128 +API: bl::add +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 1.82 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.509992× + +120.3 + +105.7 + +2/2 + +1.82 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp operator+ +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 0.926 ns/iteration, speed vs FLTX 1.96× + +120.3 + +105.7 + +2/2 + +0.926 ns · 1.96× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator+ +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 2.39 ns/iteration, speed vs FLTX 0.76× + +120.3 + +105.7 + +2/2 + +2.39 ns · 0.76× + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator+ +mean: 127.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 125.8, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 30.92 ns/iteration, speed vs FLTX 0.06× + +127.0 + +113.0 + +2/2 + +30.92 ns · 0.06× + +No + +✗ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 1.81 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.508112× + +120.1 + +105.7 + +2/2 + +1.81 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp operator- +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 0.919 ns/iteration, speed vs FLTX 1.97× + +120.1 + +105.7 + +2/2 + +0.919 ns · 1.97× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator- +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 2.40 ns/iteration, speed vs FLTX 0.75× + +120.1 + +105.7 + +2/2 + +2.40 ns · 0.75× + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator- +mean: 127.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 126.0, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 30.69 ns/iteration, speed vs FLTX 0.06× + +127.2 + +113.0 + +2/2 + +30.69 ns · 0.06× + +No + +✗ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 1.61 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.090229× + +108.7 + +105.4 + +2/2 + +1.61 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp operator* +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 1.75 ns/iteration, speed vs FLTX 0.92× + +108.7 + +105.4 + +2/2 + +1.75 ns · 0.92× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator* +mean: 108.5 bits +p01: 105.2 bits +worst: 104.7 bits +domains: 2/2 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 108.5, p01 105.2, worst 104.7, required 90.0, margin 14.7, n=4092, seed=10322096095657499292 +subnormal: mean 123.8, p01 108.1, worst 108.1, required 90.0, margin 18.1, n=8, seed=10322096095657499292 +benchmark: 3.14 ns/iteration, speed vs FLTX 0.51× + +108.5 + +104.7 + +2/2 + +3.14 ns · 0.51× + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator* +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4092, seed=10322096095657499292 +subnormal: mean 129.7, p01 113.5, worst 113.5, required 90.0, margin 23.5, n=8, seed=10322096095657499292 +benchmark: 43.78 ns/iteration, speed vs FLTX 0.04× + +115.0 + +113.0 + +2/2 + +43.78 ns · 0.04× + +No + +✗ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 2.53 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.302496× + +110.9 + +105.1 + +2/2 + +2.53 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp operator/ +mean: 110.7 bits +p01: 106.1 bits +worst: 105.5 bits +domains: 2/2 +minimum threshold margin: 15.5 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 110.7, p01 106.1, worst 105.5, required 90.0, margin 15.5, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 13.22 ns/iteration, speed vs FLTX 0.19× + +110.7 + +105.5 + +2/2 + +13.22 ns · 0.19× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator/ +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 5.82 ns/iteration, speed vs FLTX 0.43× + +110.9 + +105.1 + +2/2 + +5.82 ns · 0.43× + +NaN + +✗ + + +TLFloat Quad +API: TLFloat operator/ +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 97.21 ns/iteration, speed vs FLTX 0.03× + +115.0 + +113.0 + +2/2 + +97.21 ns · 0.03× + +No + +✗ + + + + +IO + + + + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 293.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.95052× + +114.0 + +110.7 + +2/2 + +293.7 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp to_string +mean: 109.4 bits +p01: 102.4 bits +worst: 102.3 bits +domains: 2/2 +minimum threshold margin: 12.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 107.9, worst 107.8, required 90.0, margin 17.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 104.9, p01 102.4, worst 102.3, required 90.0, margin 12.3, n=4096, seed=10322096095657499357 +benchmark: 1,278 ns/iteration, speed vs FLTX 0.23× + +109.4 + +102.3 + +2/2 + +1,278 ns · 0.23× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost number::str +mean: 110.8 bits +p01: 106.0 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 16.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 112.0, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 109.5, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4096, seed=10322096095657499357 +benchmark: 1,160 ns/iteration, speed vs FLTX 0.25× + +110.8 + +106.0 + +2/2 + +1,160 ns · 0.25× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::to_string +mean: 110.7 bits +p01: 107.6 bits +worst: 107.3 bits +domains: 2/2 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.8, p01 107.9, worst 107.4, required 90.0, margin 17.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 110.5, p01 107.6, worst 107.3, required 90.0, margin 17.3, n=4096, seed=10322096095657499357 +benchmark: 2,108 ns/iteration, speed vs FLTX 0.14× + +110.7 + +107.3 + +2/2 + +2,108 ns · 0.14× + +Both + +✓ + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 239.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 5.434206× + +114.0 + +110.7 + +2/2 + +239.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp write +mean: 109.4 bits +p01: 102.4 bits +worst: 102.3 bits +domains: 2/2 +minimum threshold margin: 12.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 107.9, worst 107.8, required 90.0, margin 17.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 104.9, p01 102.4, worst 102.3, required 90.0, margin 12.3, n=4096, seed=10322096095657499357 +benchmark: 1,299 ns/iteration, speed vs FLTX 0.18× + +109.4 + +102.3 + +2/2 + +1,299 ns · 0.18× + +Both + +✗ + + +cppdd: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 107.1 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 107.1, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 256.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.992074× + +109.9 + +106.0 + +2/2 + +256.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp read +mean: 102.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -106.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 106.8, p01 104.4, worst 103.5, required 106.0, margin -2.5, n=4097, seed=10322096095657499311 +wide_exponent: mean 98.2, p01 0.0, worst 0.0, required 106.0, margin -106.0, n=4098, seed=10322096095657499308 +benchmark: 254.1 ns/iteration, speed vs FLTX 1.01× + +102.5 + +0.0 + +0/2 + +254.1 ns · 1.01× + +NaN + +✓ + + +boost::multiprecision::cpp_double_double +API: Boost string constructor +mean: 107.1 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -106.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.9, p01 106.2, worst 106.0, required 106.0, margin 0.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 106.3, p01 0.0, worst 0.0, required 106.0, margin -106.0, n=4098, seed=10322096095657499308 +benchmark: 2,354 ns/iteration, speed vs FLTX 0.11× + +107.1 + +0.0 + +1/2 + +2,354 ns · 0.11× + +Both + +✗ + + +TLFloat Quad +API: TLFloat string constructor +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 7.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4098, seed=10322096095657499308 +benchmark: 1,622 ns/iteration, speed vs FLTX 0.16× + +114.9 + +113.0 + +2/2 + +1,622 ns · 0.16× + +No + +✗ + + + + +Rounding + + + + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.815 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.452743× + +exact + +exact + +1/1 + +0.815 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.369 ns/iteration, speed vs FLTX 2.21× + +exact + +exact + +1/1 + +0.369 ns · 2.21× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.370 ns/iteration, speed vs FLTX 2.21× + +exact + +exact + +1/1 + +0.370 ns · 2.21× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 5.77 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +5.77 ns · 0.14× + +No + +✗ + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.50 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.244411× + +exact + +exact + +1/1 + +1.50 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.368 ns/iteration, speed vs FLTX 4.09× + +exact + +exact + +1/1 + +0.368 ns · 4.09× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.10 ns/iteration, speed vs FLTX 0.72× + +exact + +exact + +1/1 + +2.10 ns · 0.72× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 5.93 ns/iteration, speed vs FLTX 0.25× + +exact + +exact + +1/1 + +5.93 ns · 0.25× + +No + +✗ + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 3.17 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.314492× + +exact + +exact + +1/1 + +3.17 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp aint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.997 ns/iteration, speed vs FLTX 3.18× + +exact + +exact + +1/1 + +0.997 ns · 3.18× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 4.67 ns/iteration, speed vs FLTX 0.68× + +exact + +exact + +1/1 + +4.67 ns · 0.68× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 4.34 ns/iteration, speed vs FLTX 0.73× + +exact + +exact + +1/1 + +4.34 ns · 0.73× + +No + +✗ + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 8.89 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.677654× + +exact + +exact + +1/1 + +8.89 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp round +mean: 130.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/1 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 130.4, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4108, seed=10322096095657499334 +benchmark: 7.25 ns/iteration, speed vs FLTX 1.23× + +130.4 + +0.0 + +0/1 + +7.25 ns · 1.23× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 6.02 ns/iteration, speed vs FLTX 1.48× + +exact + +exact + +1/1 + +6.02 ns · 1.48× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 7.73 ns/iteration, speed vs FLTX 1.15× + +exact + +exact + +1/1 + +7.73 ns · 1.15× + +No + +✗ + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.03 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.835938× + +exact + +exact + +1/1 + +10.03 ns + +Both + +✓ + + +qdpp: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 8.38 ns/iteration, speed vs FLTX 1.20× + +exact + +exact + +1/1 + +8.38 ns · 1.20× + +No + +✗ + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 6.69 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.606847× + +exact + +exact + +1/1 + +6.69 ns + +- + +- + + +qdpp: lround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 10.75 ns/iteration, speed vs FLTX 0.62× + +exact + +exact + +1/1 + +10.75 ns · 0.62× + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 6.05 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 102.847473× + +exact + +exact + +1/1 + +6.05 ns + +- + +- + + +qdpp: llround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 622.5 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +622.5 ns · 0.01× + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 93.12 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +93.12 ns + +Both + +✓ + + +qdpp: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 144.8 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +144.8 ns + +Both + +✓ + + +qdpp: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 20.59 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.43468× + +exact + +exact + +3/3 + +20.59 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp fmod +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -90.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 135.0, p01 101.7, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 24.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=2, seed=10322096095657499335 +wide_exponent: mean 78.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4096, seed=10322096095657499357 +benchmark: 29.54 ns/iteration, speed vs FLTX 0.70× + +106.7 + +0.0 + +1/3 + +29.54 ns · 0.70× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmod +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -90.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 135.0, p01 101.7, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 24.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=2, seed=10322096095657499335 +wide_exponent: mean 78.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4096, seed=10322096095657499357 +benchmark: 41.41 ns/iteration, speed vs FLTX 0.50× + +106.7 + +0.0 + +1/3 + +41.41 ns · 0.50× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 182.9 ns/iteration, speed vs FLTX 0.11× + +exact + +exact + +3/3 + +182.9 ns · 0.11× + +No + +✗ + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 22.82 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.161869× + +138.0 + +103.1 + +1/1 + +22.82 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp drem +mean: 134.4 bits +p01: 101.0 bits +worst: 95.5 bits +domains: 1/1 +minimum threshold margin: 5.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 134.4, p01 101.0, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +benchmark: 26.52 ns/iteration, speed vs FLTX 0.86× + +134.4 + +95.5 + +1/1 + +26.52 ns · 0.86× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remainder +mean: 134.4 bits +p01: 101.0 bits +worst: 95.5 bits +domains: 1/1 +minimum threshold margin: 5.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 134.4, p01 101.0, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +benchmark: 50.16 ns/iteration, speed vs FLTX 0.46× + +134.4 + +95.5 + +1/1 + +50.16 ns · 0.46× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 176.3 ns/iteration, speed vs FLTX 0.13× + +exact + +exact + +1/1 + +176.3 ns · 0.13× + +No + +✗ + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 22.81 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.187216× + +exact + +exact + +1/1 + +22.81 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp divrem +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 27.08 ns/iteration, speed vs FLTX 0.84× + +exact + +exact + +1/1 + +27.08 ns · 0.84× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 50.62 ns/iteration, speed vs FLTX 0.45× + +exact + +exact + +1/1 + +50.62 ns · 0.45× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 181.6 ns/iteration, speed vs FLTX 0.13× + +exact + +exact + +1/1 + +181.6 ns · 0.13× + +No + +✗ + + + + +Float Utils + + + + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.810 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.517721× + +exact + +exact + +2/2 + +0.810 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.40 ns/iteration, speed vs FLTX 0.24× + +exact + +exact + +2/2 + +3.40 ns · 0.24× + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.23 ns/iteration, speed vs FLTX 0.66× + +exact + +exact + +2/2 + +1.23 ns · 0.66× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.71 ns/iteration, speed vs FLTX 0.30× + +exact + +exact + +2/2 + +2.71 ns · 0.30× + +No + +✓ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.807 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.805331× + +exact + +exact + +1/1 + +0.807 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.40 ns/iteration, speed vs FLTX 0.24× + +exact + +exact + +1/1 + +3.40 ns · 0.24× + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.650 ns/iteration, speed vs FLTX 1.24× + +exact + +exact + +1/1 + +0.650 ns · 1.24× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.70 ns/iteration, speed vs FLTX 0.30× + +exact + +exact + +1/1 + +2.70 ns · 0.30× + +No + +✓ + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.4 bits +p01: 104.7 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 109.1, p01 104.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.6, p01 106.6, worst 105.3, required 90.0, margin 15.3, n=4096, seed=10322096095657499357 +benchmark: 7.87 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.008288× + +117.4 + +99.6 + +3/3 + +7.87 ns + +Both + +✗ + + +qdpp: fma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fma +mean: 75.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -90.0 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 0.1, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4098, seed=10322096095657499352 +moderate: mean 108.2, p01 103.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.1, p01 105.4, worst 104.1, required 90.0, margin 14.1, n=4096, seed=10322096095657499357 +benchmark: 15.81 ns/iteration, speed vs FLTX 0.50× + +75.8 + +0.0 + +2/3 + +15.81 ns · 0.50× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fma +mean: 128.4 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 125.4, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 61.56 ns/iteration, speed vs FLTX 0.13× + +128.4 + +113.0 + +3/3 + +61.56 ns · 0.13× + +No + +✗ + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 48.17 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.281666× + +109.0 + +105.2 + +2/2 + +48.17 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp inv +mean: 109.4 bits +p01: 106.8 bits +worst: 106.5 bits +domains: 2/2 +minimum threshold margin: 16.5 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 109.4, p01 107.0, worst 106.5, required 90.0, margin 16.5, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.4, p01 106.8, worst 106.5, required 90.0, margin 16.5, n=4096, seed=10322096095657499357 +benchmark: 13.57 ns/iteration, speed vs FLTX 3.55× + +109.4 + +106.5 + +2/2 + +13.57 ns · 3.55× + +NaN + +✗ + + +cppdd: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.92 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.996788× + +exact + +exact + +2/2 + +2.92 ns + +Both + +✓ + + +qdpp: fmin is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.91 ns/iteration, speed vs FLTX 1.00× + +exact + +exact + +2/2 + +2.91 ns · 1.00× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 11.24 ns/iteration, speed vs FLTX 0.26× + +exact + +exact + +2/2 + +11.24 ns · 0.26× + +No + +✗ + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.94 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.995237× + +exact + +exact + +2/2 + +2.94 ns + +Both + +✓ + + +qdpp: fmax is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.92 ns/iteration, speed vs FLTX 1.00× + +exact + +exact + +2/2 + +2.92 ns · 1.00× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 10.25 ns/iteration, speed vs FLTX 0.29× + +exact + +exact + +2/2 + +10.25 ns · 0.29× + +No + +✗ + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.03 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.109805× + +138.0 + +106.2 + +2/2 + +3.03 ns + +Both + +✓ + + +qdpp: fdim is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.36 ns/iteration, speed vs FLTX 0.90× + +138.0 + +106.2 + +2/2 + +3.36 ns · 0.90× + +No + +✓ + + +TLFloat Quad +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 29.23 ns/iteration, speed vs FLTX 0.10× + +exact + +exact + +2/2 + +29.23 ns · 0.10× + +No + +✓ + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.385 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.262811× + +exact + +exact + +1/1 + +0.385 ns + +Both + +✓ + + +qdpp: copysign is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.871 ns/iteration, speed vs FLTX 0.44× + +exact + +exact + +1/1 + +0.871 ns · 0.44× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 6.48 ns/iteration, speed vs FLTX 0.06× + +exact + +exact + +1/1 + +6.48 ns · 0.06× + +No + +✗ + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.81 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.050114× + +exact + +exact + +1/1 + +1.81 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.90 ns/iteration, speed vs FLTX 0.95× + +exact + +exact + +1/1 + +1.90 ns · 0.95× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.07 ns/iteration, speed vs FLTX 0.88× + +exact + +exact + +1/1 + +2.07 ns · 0.88× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 11.59 ns/iteration, speed vs FLTX 0.16× + +exact + +exact + +1/1 + +11.59 ns · 0.16× + +No + +✗ + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.88 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.012846× + +exact + +exact + +1/1 + +1.88 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.90 ns/iteration, speed vs FLTX 0.99× + +exact + +exact + +1/1 + +1.90 ns · 0.99× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.07 ns/iteration, speed vs FLTX 0.91× + +exact + +exact + +1/1 + +2.07 ns · 0.91× + +Both + +✗ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.89 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.010454× + +exact + +exact + +1/1 + +1.89 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.91 ns/iteration, speed vs FLTX 0.99× + +exact + +exact + +1/1 + +1.91 ns · 0.99× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.06 ns/iteration, speed vs FLTX 0.92× + +exact + +exact + +1/1 + +2.06 ns · 0.92× + +Both + +✗ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.61 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.773836× + +exact + +exact + +2/2 + +3.61 ns + +Both + +✓ + + +qdpp: frexp is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.79 ns/iteration, speed vs FLTX 1.29× + +exact + +exact + +2/2 + +2.79 ns · 1.29× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 10.80 ns/iteration, speed vs FLTX 0.33× + +exact + +exact + +2/2 + +10.80 ns · 0.33× + +No + +✗ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.93 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.01516× + +exact + +exact + +2/2 + +6.93 ns + +Both + +✓ + + +qdpp: modf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 7.03 ns/iteration, speed vs FLTX 0.99× + +exact + +exact + +2/2 + +7.03 ns · 0.99× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 32.90 ns/iteration, speed vs FLTX 0.21× + +exact + +exact + +2/2 + +32.90 ns · 0.21× + +No + +✗ + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.08 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.751384× + +exact + +exact + +2/2 + +2.08 ns + +- + +- + + +qdpp: ilogb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.12 ns/iteration, speed vs FLTX 0.98× + +exact + +exact + +2/2 + +2.12 ns · 0.98× + +- + +- + + +TLFloat Quad +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.57 ns/iteration, speed vs FLTX 1.33× + +exact + +exact + +2/2 + +1.57 ns · 1.33× + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.91 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 50.759865× + +exact + +exact + +2/2 + +1.91 ns + +Both + +- + + +qdpp: logb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 97.20 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +2/2 + +97.20 ns · 0.02× + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 5.44 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 2.637002× + +- + +- + +- + +5.44 ns + +- + +- + + +qdpp: nextafter is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter +benchmark: 23.27 ns/iteration, speed vs FLTX 0.23× + +- + +- + +- + +23.27 ns · 0.23× + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter +benchmark: 14.34 ns/iteration, speed vs FLTX 0.38× + +- + +- + +- + +14.34 ns · 0.38× + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 5.43 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 2.62853× + +- + +- + +- + +5.43 ns + +- + +- + + +qdpp: nexttoward is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter (same type) +benchmark: 23.31 ns/iteration, speed vs FLTX 0.23× + +- + +- + +- + +23.31 ns · 0.23× + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter (same type) +benchmark: 14.28 ns/iteration, speed vs FLTX 0.38× + +- + +- + +- + +14.28 ns · 0.38× + +- + +- + + + + +Roots & powers + + + + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.20 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.029254× + +108.7 + +105.4 + +2/2 + +1.20 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 108.6, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.24 ns/iteration, speed vs FLTX 0.97× + +108.7 + +105.4 + +2/2 + +1.24 ns · 0.97× + +NaN + +✓ + + +cppdd: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.8 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 4/4 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 110.5, p01 106.7, worst 106.1, required 90.0, margin 16.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 5.67 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.549444× + +109.8 + +104.7 + +4/4 + +5.67 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sqrt +mean: 92.6 bits +p01: 52.2 bits +worst: 51.3 bits +domains: 2/4 +minimum threshold margin: -38.7 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 98.0, p01 55.3, worst 55.3, required 90.0, margin -34.7, n=4096, seed=10322096095657499354 +near_one: mean 108.0, p01 104.2, worst 103.5, required 90.0, margin 13.5, n=4099, seed=10322096095657499359 +subnormal: mean 56.5, p01 52.2, worst 51.3, required 90.0, margin -38.7, n=4100, seed=10322096095657499350 +wide_exponent: mean 108.1, p01 104.2, worst 103.2, required 90.0, margin 13.2, n=4096, seed=10322096095657499357 +benchmark: 5.44 ns/iteration, speed vs FLTX 1.04× + +92.6 + +51.3 + +2/4 + +5.44 ns · 1.04× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sqrt +mean: 113.7 bits +p01: 54.4 bits +worst: 52.8 bits +domains: 2/4 +minimum threshold margin: -37.2 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 99.1, p01 54.4, worst 54.4, required 90.0, margin -35.6, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 136.6, p01 54.5, worst 52.8, required 90.0, margin -37.2, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 3.12 ns/iteration, speed vs FLTX 1.82× + +113.7 + +52.8 + +2/4 + +3.12 ns · 1.82× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sqrt +mean: 115.2 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 4/4 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 115.0, p01 113.4, worst 113.1, required 90.0, margin 23.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499359 +subnormal: mean 115.7, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 154.1 ns/iteration, speed vs FLTX 0.04× + +115.2 + +113.0 + +4/4 + +154.1 ns · 0.04× + +No + +✗ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.5 bits +p01: 105.0 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 14.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.6, p01 105.3, worst 104.1, required 90.0, margin 14.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.4, p01 105.0, worst 104.1, required 90.0, margin 14.1, n=4096, seed=10322096095657499357 +benchmark: 18.87 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 4.003411× + +108.5 + +104.1 + +2/2 + +18.87 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp nroot +mean: 101.5 bits +p01: 89.4 bits +worst: 89.0 bits +domains: 1/2 +minimum threshold margin: -1.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 107.5, p01 104.1, worst 103.0, required 90.0, margin 13.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 95.6, p01 89.4, worst 89.0, required 90.0, margin -1.0, n=4096, seed=10322096095657499357 +benchmark: 75.55 ns/iteration, speed vs FLTX 0.25× + +101.5 + +89.0 + +1/2 + +75.55 ns · 0.25× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cbrt +mean: 108.4 bits +p01: 105.4 bits +worst: 104.6 bits +domains: 2/2 +minimum threshold margin: 14.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 108.6, p01 105.6, worst 104.6, required 90.0, margin 14.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.2, p01 105.4, worst 104.7, required 90.0, margin 14.7, n=4096, seed=10322096095657499357 +benchmark: 388.6 ns/iteration, speed vs FLTX 0.05× + +108.4 + +104.6 + +2/2 + +388.6 ns · 0.05× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::cbrt +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.1, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 853.6 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +2/2 + +853.6 ns · 0.02× + +No + +✗ + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 10.88 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 5.474655× + +122.4 + +104.4 + +2/2 + +10.88 ns + +Both + +✓ + + +qdpp: hypot is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::hypot +mean: 121.9 bits +p01: 104.9 bits +worst: 104.3 bits +domains: 2/2 +minimum threshold margin: 14.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.8, p01 104.9, worst 104.3, required 90.0, margin 14.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 106.6, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 59.55 ns/iteration, speed vs FLTX 0.18× + +121.9 + +104.3 + +2/2 + +59.55 ns · 0.18× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::hypot +mean: 129.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 142.9, p01 113.8, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 217.1 ns/iteration, speed vs FLTX 0.05× + +129.0 + +113.0 + +2/2 + +217.1 ns · 0.05× + +No + +✓ + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 241.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.247542× + +107.1 + +101.3 + +2/2 + +241.2 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp pow +mean: 106.8 bits +p01: 101.7 bits +worst: 101.0 bits +domains: 2/2 +minimum threshold margin: 21.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 105.3, p01 101.7, worst 101.0, required 80.0, margin 21.0, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.2, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499359 +benchmark: 300.9 ns/iteration, speed vs FLTX 0.80× + +106.8 + +101.0 + +2/2 + +300.9 ns · 0.80× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow +mean: 102.6 bits +p01: 98.7 bits +worst: 97.6 bits +domains: 2/2 +minimum threshold margin: 17.6 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 102.0, p01 98.7, worst 97.6, required 80.0, margin 17.6, n=4099, seed=10322096095657499356 +near_one: mean 103.2, p01 100.6, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499359 +benchmark: 564.0 ns/iteration, speed vs FLTX 0.43× + +102.6 + +97.6 + +2/2 + +564.0 ns · 0.43× + +Inf + +✗ + + +TLFloat Quad +API: tlfloat::pow +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 6,434 ns/iteration, speed vs FLTX 0.04× + +114.9 + +113.0 + +2/2 + +6,434 ns · 0.04× + +No + +✗ + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 26.35 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.294675× + +106.5 + +103.2 + +2/2 + +26.35 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp npwr +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 7.76 ns/iteration, speed vs FLTX 3.39× + +106.5 + +103.2 + +2/2 + +7.76 ns · 3.39× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow(value, int) +mean: 106.4 bits +p01: 103.5 bits +worst: 102.7 bits +domains: 2/2 +minimum threshold margin: 12.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.4, p01 103.5, worst 102.8, required 90.0, margin 12.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.4, p01 103.5, worst 102.7, required 90.0, margin 12.7, n=4096, seed=10322096095657499357 +benchmark: 10.16 ns/iteration, speed vs FLTX 2.59× + +106.4 + +102.7 + +2/2 + +10.16 ns · 2.59× + +Both + +✗ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 107.0 bits +p01: 104.3 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.6, p01 104.3, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.4, p01 104.8, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 118.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.253044× + +107.0 + +103.6 + +2/2 + +118.1 ns + +Both + +- + + +qdpp dd_real +API: qdpp exp +mean: 106.8 bits +p01: 104.2 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.5, p01 104.2, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499339 +moderate: mean 107.2, p01 104.6, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499356 +benchmark: 148.0 ns/iteration, speed vs FLTX 0.80× + +106.8 + +103.7 + +2/2 + +148.0 ns · 0.80× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp +mean: 100.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 97.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499339 +moderate: mean 103.7, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +benchmark: 309.8 ns/iteration, speed vs FLTX 0.38× + +100.4 + +0.0 + +1/2 + +309.8 ns · 0.38× + +Both + +- + + +TLFloat Quad +API: tlfloat::exp +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 971.9 ns/iteration, speed vs FLTX 0.12× + +114.9 + +113.0 + +2/2 + +971.9 ns · 0.12× + +No + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 111.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 6.279175× + +108.9 + +105.1 + +2/2 + +111.6 ns + +Both + +- + + +qdpp: exp2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp2 +mean: 101.7 bits +p01: 96.4 bits +worst: 95.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 99.5, p01 96.4, worst 95.2, required 80.0, margin 15.2, n=4099, seed=10322096095657499339 +moderate: mean 103.8, p01 101.1, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499356 +benchmark: 701.0 ns/iteration, speed vs FLTX 0.16× + +101.7 + +95.2 + +2/2 + +701.0 ns · 0.16× + +Both + +- + + +TLFloat Quad +API: tlfloat::exp2 +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,862 ns/iteration, speed vs FLTX 0.04× + +115.0 + +113.0 + +2/2 + +2,862 ns · 0.04× + +No + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 118.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.271512× + +121.6 + +104.1 + +2/2 + +118.2 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp expm1 +mean: 121.5 bits +p01: 104.8 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 134.5, p01 105.7, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.5, p01 104.8, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499356 +benchmark: 150.4 ns/iteration, speed vs FLTX 0.79× + +121.5 + +0.0 + +1/2 + +150.4 ns · 0.79× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::expm1 +mean: 120.4 bits +p01: 101.1 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 106.6, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 106.1, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499356 +benchmark: 323.1 ns/iteration, speed vs FLTX 0.37× + +120.4 + +100.3 + +2/2 + +323.1 ns · 0.37× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::expm1 +mean: 128.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.7, worst 113.0, required 80.0, margin 33.0, n=4098, seed=10322096095657499336 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,041 ns/iteration, speed vs FLTX 0.11× + +128.2 + +113.0 + +2/2 + +1,041 ns · 0.11× + +No + +✗ + + + + +Logarithms + + + + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.6, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 155.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.128051× + +108.4 + +103.7 + +3/3 + +155.3 ns + +Both + +- + + +qdpp dd_real +API: qdpp log +mean: 101.5 bits +p01: 62.2 bits +worst: 61.3 bits +domains: 2/3 +minimum threshold margin: -18.7 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 94.7, p01 62.2, worst 61.3, required 80.0, margin -18.7, n=4096, seed=10322096095657499354 +near_one: mean 106.9, p01 104.4, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 103.0, p01 98.4, worst 98.1, required 80.0, margin 18.1, n=4096, seed=10322096095657499357 +benchmark: 175.2 ns/iteration, speed vs FLTX 0.89× + +101.5 + +61.3 + +2/3 + +175.2 ns · 0.89× + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log +mean: 105.3 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.2, p01 105.2, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.9, p01 104.6, worst 102.4, required 80.0, margin 22.4, n=4096, seed=10322096095657499357 +benchmark: 342.9 ns/iteration, speed vs FLTX 0.45× + +105.3 + +87.9 + +3/3 + +342.9 ns · 0.45× + +Both + +- + + +TLFloat Quad +API: tlfloat::log +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 115.5, p01 113.3, worst 113.3, required 80.0, margin 33.3, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 1,359 ns/iteration, speed vs FLTX 0.11× + +115.1 + +113.0 + +3/3 + +1,359 ns · 0.11× + +No + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 162.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.189913× + +108.8 + +103.7 + +3/3 + +162.6 ns + +Both + +- + + +qdpp: log2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log2 +mean: 106.6 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.2, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.8, p01 104.5, worst 102.3, required 80.0, margin 22.3, n=4096, seed=10322096095657499357 +benchmark: 356.1 ns/iteration, speed vs FLTX 0.46× + +106.6 + +87.9 + +3/3 + +356.1 ns · 0.46× + +Both + +- + + +TLFloat Quad +API: tlfloat::log2 +mean: 116.3 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 119.0, p01 113.9, worst 113.8, required 80.0, margin 33.8, n=4096, seed=10322096095657499354 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 1,435 ns/iteration, speed vs FLTX 0.11× + +116.3 + +113.0 + +3/3 + +1,435 ns · 0.11× + +No + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.5 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 162.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.23741× + +107.5 + +103.8 + +3/3 + +162.7 ns + +Both + +- + + +qdpp dd_real +API: qdpp log10 +mean: 101.3 bits +p01: 62.2 bits +worst: 61.3 bits +domains: 2/3 +minimum threshold margin: -18.7 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 94.6, p01 62.2, worst 61.3, required 80.0, margin -18.7, n=4096, seed=10322096095657499354 +near_one: mean 106.6, p01 104.2, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +wide_exponent: mean 102.8, p01 98.3, worst 98.1, required 80.0, margin 18.1, n=4096, seed=10322096095657499357 +benchmark: 201.3 ns/iteration, speed vs FLTX 0.81× + +101.3 + +61.3 + +2/3 + +201.3 ns · 0.81× + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log10 +mean: 102.9 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 103.6, p01 103.1, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499354 +near_one: mean 101.6, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 103.6, p01 103.0, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499357 +benchmark: 356.5 ns/iteration, speed vs FLTX 0.46× + +102.9 + +87.9 + +3/3 + +356.5 ns · 0.46× + +Both + +- + + +TLFloat Quad +API: tlfloat::log10 +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 114.8, p01 113.1, worst 113.1, required 80.0, margin 33.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 1,429 ns/iteration, speed vs FLTX 0.11× + +114.9 + +113.0 + +3/3 + +1,429 ns · 0.11× + +No + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 157.9 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.085306× + +121.4 + +103.6 + +2/2 + +157.9 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp log1p +mean: 120.9 bits +p01: 104.6 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 105.8, worst 104.1, required 80.0, margin 24.1, n=4098, seed=10322096095657499336 +moderate: mean 107.2, p01 104.6, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +benchmark: 171.4 ns/iteration, speed vs FLTX 0.92× + +120.9 + +103.8 + +2/2 + +171.4 ns · 0.92× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log1p +mean: 119.7 bits +p01: 101.3 bits +worst: 100.2 bits +domains: 2/2 +minimum threshold margin: 20.2 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 107.2, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 104.8, p01 101.3, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +benchmark: 472.0 ns/iteration, speed vs FLTX 0.33× + +119.7 + +100.2 + +2/2 + +472.0 ns · 0.33× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::log1p +mean: 128.1 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.6, worst 113.1, required 80.0, margin 33.1, n=4098, seed=10322096095657499336 +moderate: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,393 ns/iteration, speed vs FLTX 0.11× + +128.1 + +113.0 + +2/2 + +1,393 ns · 0.11× + +No + +✗ + + + + +Trigonometric + + + + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 107.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.509475× + +110.6 + +98.6 + +3/3 + +107.3 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sin +mean: 52.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 15.7, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 106.7, p01 101.7, worst 97.4, required 80.0, margin 17.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 36.0, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 161.9 ns/iteration, speed vs FLTX 0.66× + +52.5 + +0.0 + +1/3 + +161.9 ns · 0.66× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sin +mean: 51.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.2, p01 98.8, worst 94.5, required 80.0, margin 14.5, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 35.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 611.1 ns/iteration, speed vs FLTX 0.18× + +51.4 + +0.0 + +1/3 + +611.1 ns · 0.18× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sin +mean: 116.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4110, seed=10322096095657499353 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 118.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 983.9 ns/iteration, speed vs FLTX 0.11× + +116.1 + +113.0 + +3/3 + +983.9 ns · 0.11× + +No + +✗ + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 107.0 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.52916× + +113.5 + +99.2 + +3/3 + +107.0 ns + +Both + +- + + +qdpp dd_real +API: qdpp cos +mean: 63.6 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 54.3, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 106.6, p01 101.4, worst 96.3, required 80.0, margin 16.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 31.6, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 163.5 ns/iteration, speed vs FLTX 0.65× + +63.6 + +0.0 + +1/3 + +163.5 ns · 0.65× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cos +mean: 63.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 53.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.1, p01 98.9, worst 94.0, required 80.0, margin 14.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 33.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 612.9 ns/iteration, speed vs FLTX 0.17× + +63.3 + +0.0 + +1/3 + +612.9 ns · 0.17× + +Both + +- + + +TLFloat Quad +API: tlfloat::cos +mean: 117.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 118.8, p01 113.4, worst 113.1, required 80.0, margin 33.1, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 117.8, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 992.1 ns/iteration, speed vs FLTX 0.11× + +117.2 + +113.0 + +3/3 + +992.1 ns · 0.11× + +No + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 116.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.427738× + +- + +- + +- + +116.8 ns + +- + +- + + +qdpp dd_real +API: qdpp sincos +benchmark: 166.8 ns/iteration, speed vs FLTX 0.70× + +- + +- + +- + +166.8 ns · 0.70× + +- + +- + + +cppdd: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::sincos +benchmark: 1,987 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +1,987 ns · 0.06× + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.6, required 75.0, margin 28.6, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 116.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.593246× + +106.7 + +98.6 + +3/3 + +116.7 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp tan +mean: 42.6 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -75.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 14.7, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4110, seed=10322096095657499353 +moderate: mean 105.9, p01 100.7, worst 96.3, required 75.0, margin 21.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 9.1, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4315, seed=10322096095657499369 +benchmark: 185.9 ns/iteration, speed vs FLTX 0.63× + +42.6 + +0.0 + +1/3 + +185.9 ns · 0.63× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tan +mean: 41.2 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -75.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4110, seed=10322096095657499353 +moderate: mean 103.3, p01 97.9, worst 94.0, required 75.0, margin 19.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 9.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4315, seed=10322096095657499369 +benchmark: 1,215 ns/iteration, speed vs FLTX 0.10× + +41.2 + +0.0 + +1/3 + +1,215 ns · 0.10× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tan +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 38.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 114.9, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.1, worst 113.0, required 75.0, margin 38.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 115.0, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4315, seed=10322096095657499369 +benchmark: 1,261 ns/iteration, speed vs FLTX 0.09× + +115.0 + +113.0 + +3/3 + +1,261 ns · 0.09× + +No + +✗ + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 196.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.458348× + +108.6 + +104.1 + +2/2 + +196.7 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp asin +mean: 108.0 bits +p01: 103.5 bits +worst: 102.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 109.5, p01 107.4, worst 104.4, required 80.0, margin 24.4, n=4105, seed=10322096095657499355 +moderate: mean 106.6, p01 103.5, worst 102.9, required 80.0, margin 22.9, n=4099, seed=10322096095657499356 +benchmark: 286.8 ns/iteration, speed vs FLTX 0.69× + +108.0 + +102.9 + +2/2 + +286.8 ns · 0.69× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asin +mean: 106.8 bits +p01: 104.0 bits +worst: 103.4 bits +domains: 2/2 +minimum threshold margin: 23.4 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.0, p01 105.5, worst 105.0, required 80.0, margin 25.0, n=4105, seed=10322096095657499355 +moderate: mean 106.6, p01 104.0, worst 103.4, required 80.0, margin 23.4, n=4099, seed=10322096095657499356 +benchmark: 3,263 ns/iteration, speed vs FLTX 0.06× + +106.8 + +103.4 + +2/2 + +3,263 ns · 0.06× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asin +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.1, p01 113.7, worst 113.7, required 80.0, margin 33.7, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,166 ns/iteration, speed vs FLTX 0.09× + +115.0 + +113.0 + +2/2 + +2,166 ns · 0.09× + +No + +✗ + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 202.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.424191× + +106.5 + +81.6 + +2/2 + +202.2 ns + +Both + +- + + +qdpp dd_real +API: qdpp acos +mean: 108.1 bits +p01: 104.4 bits +worst: 103.3 bits +domains: 2/2 +minimum threshold margin: 23.3 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 108.2, p01 104.4, worst 103.7, required 80.0, margin 23.7, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 104.4, worst 103.3, required 80.0, margin 23.3, n=4099, seed=10322096095657499356 +benchmark: 287.9 ns/iteration, speed vs FLTX 0.70× + +108.1 + +103.3 + +2/2 + +287.9 ns · 0.70× + +No + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acos +mean: 107.0 bits +p01: 104.1 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 23.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.1, p01 104.6, worst 104.1, required 80.0, margin 24.1, n=4105, seed=10322096095657499355 +moderate: mean 106.8, p01 104.1, worst 103.2, required 80.0, margin 23.2, n=4099, seed=10322096095657499356 +benchmark: 3,072 ns/iteration, speed vs FLTX 0.07× + +107.0 + +103.2 + +2/2 + +3,072 ns · 0.07× + +Both + +- + + +TLFloat Quad +API: tlfloat::acos +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,162 ns/iteration, speed vs FLTX 0.09× + +114.9 + +113.0 + +2/2 + +2,162 ns · 0.09× + +No + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 142.5 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.450247× + +108.7 + +104.9 + +2/2 + +142.5 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atan +mean: 107.2 bits +p01: 103.5 bits +worst: 102.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 108.1, p01 103.9, worst 102.9, required 80.0, margin 22.9, n=4099, seed=10322096095657499356 +near_one: mean 106.2, p01 103.5, worst 102.9, required 80.0, margin 22.9, n=4099, seed=10322096095657499359 +benchmark: 206.6 ns/iteration, speed vs FLTX 0.69× + +107.2 + +102.9 + +2/2 + +206.6 ns · 0.69× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan +mean: 106.7 bits +p01: 104.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.8, p01 104.7, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499359 +benchmark: 328.9 ns/iteration, speed vs FLTX 0.43× + +106.7 + +103.6 + +2/2 + +328.9 ns · 0.43× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan +mean: 115.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 1,883 ns/iteration, speed vs FLTX 0.08× + +115.0 + +113.0 + +2/2 + +1,883 ns · 0.08× + +Inf + +✗ + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 148.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.393229× + +108.7 + +104.5 + +3/3 + +148.3 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atan2 +mean: 106.9 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -80.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 0.0, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=8, seed=10322096095657499351 +moderate: mean 107.6, p01 103.7, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +near_one: mean 106.4, p01 103.4, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499359 +benchmark: 206.5 ns/iteration, speed vs FLTX 0.72× + +106.9 + +0.0 + +2/3 + +206.5 ns · 0.72× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan2 +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 61.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=8, seed=10322096095657499351 +moderate: mean 106.9, p01 104.4, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 366.9 ns/iteration, speed vs FLTX 0.40× + +106.7 + +0.0 + +2/3 + +366.9 ns · 0.40× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan2 +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 118.6, p01 114.8, worst 114.8, required 80.0, margin 34.8, n=8, seed=10322096095657499351 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,903 ns/iteration, speed vs FLTX 0.08× + +115.0 + +113.0 + +3/3 + +1,903 ns · 0.08× + +Inf + +✗ + + + + +Hyperbolic + + + + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 135.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.361754× + +107.4 + +103.6 + +2/2 + +135.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sinh +mean: 107.0 bits +p01: 104.4 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 106.9, p01 104.4, worst 103.9, required 80.0, margin 23.9, n=4099, seed=10322096095657499356 +near_one: mean 107.1, p01 104.4, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499359 +benchmark: 184.0 ns/iteration, speed vs FLTX 0.73× + +107.0 + +103.6 + +2/2 + +184.0 ns · 0.73× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sinh +mean: 103.5 bits +p01: 100.6 bits +worst: 99.9 bits +domains: 2/2 +minimum threshold margin: 19.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 103.8, p01 101.0, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +near_one: mean 103.3, p01 100.6, worst 99.9, required 80.0, margin 19.9, n=4099, seed=10322096095657499359 +benchmark: 334.5 ns/iteration, speed vs FLTX 0.40× + +103.5 + +99.9 + +2/2 + +334.5 ns · 0.40× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sinh +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,120 ns/iteration, speed vs FLTX 0.12× + +115.0 + +113.0 + +2/2 + +1,120 ns · 0.12× + +No + +✗ + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 134.4 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.362738× + +107.9 + +104.4 + +2/2 + +134.4 ns + +Both + +- + + +qdpp dd_real +API: qdpp cosh +mean: 107.7 bits +p01: 104.9 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 107.5, p01 104.9, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.3, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499359 +benchmark: 183.2 ns/iteration, speed vs FLTX 0.73× + +107.7 + +104.1 + +2/2 + +183.2 ns · 0.73× + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cosh +mean: 104.0 bits +p01: 101.1 bits +worst: 100.6 bits +domains: 2/2 +minimum threshold margin: 20.6 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 103.8, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.2, p01 101.5, worst 101.0, required 80.0, margin 21.0, n=4099, seed=10322096095657499359 +benchmark: 334.4 ns/iteration, speed vs FLTX 0.40× + +104.0 + +100.6 + +2/2 + +334.4 ns · 0.40× + +Both + +- + + +TLFloat Quad +API: tlfloat::cosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,052 ns/iteration, speed vs FLTX 0.13× + +114.9 + +113.0 + +2/2 + +1,052 ns · 0.13× + +No + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 141.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.323844× + +109.2 + +103.8 + +2/2 + +141.7 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp tanh +mean: 109.3 bits +p01: 105.4 bits +worst: 104.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 109.9, p01 105.4, worst 104.0, required 80.0, margin 24.0, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.7, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499359 +benchmark: 187.5 ns/iteration, speed vs FLTX 0.76× + +109.3 + +104.0 + +2/2 + +187.5 ns · 0.76× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tanh +mean: 105.8 bits +p01: 101.2 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.0, p01 102.2, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.5, p01 101.2, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 350.2 ns/iteration, speed vs FLTX 0.40× + +105.8 + +100.3 + +2/2 + +350.2 ns · 0.40× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tanh +mean: 115.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.5, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,087 ns/iteration, speed vs FLTX 0.13× + +115.2 + +113.0 + +2/2 + +1,087 ns · 0.13× + +Inf + +✗ + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 144.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.421245× + +108.1 + +103.8 + +2/2 + +144.8 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp asinh +mean: 107.1 bits +p01: 104.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 107.4, p01 104.6, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499356 +near_one: mean 106.7, p01 104.0, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499359 +benchmark: 205.8 ns/iteration, speed vs FLTX 0.70× + +107.1 + +0.0 + +1/2 + +205.8 ns · 0.70× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asinh +mean: 104.5 bits +p01: 100.8 bits +worst: 99.8 bits +domains: 2/2 +minimum threshold margin: 19.8 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 105.1, p01 101.7, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 100.8, worst 99.8, required 80.0, margin 19.8, n=4099, seed=10322096095657499359 +benchmark: 611.9 ns/iteration, speed vs FLTX 0.24× + +104.5 + +99.8 + +2/2 + +611.9 ns · 0.24× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asinh +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 6,173 ns/iteration, speed vs FLTX 0.02× + +114.9 + +113.0 + +2/2 + +6,173 ns · 0.02× + +No + +✗ + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 169.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.18297× + +108.0 + +103.7 + +2/2 + +169.1 ns + +Both + +- + + +qdpp dd_real +API: qdpp acosh +mean: 107.2 bits +p01: 103.9 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 106.7, p01 103.9, worst 0.0, required 80.0, margin -80.0, n=4101, seed=10322096095657499355 +moderate: mean 107.8, p01 105.1, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499387 +benchmark: 200.0 ns/iteration, speed vs FLTX 0.85× + +107.2 + +0.0 + +0/2 + +200.0 ns · 0.85× + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acosh +mean: 105.6 bits +p01: 101.7 bits +worst: 100.4 bits +domains: 2/2 +minimum threshold margin: 20.4 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 105.7, p01 101.7, worst 101.1, required 80.0, margin 21.1, n=4101, seed=10322096095657499355 +moderate: mean 105.5, p01 102.2, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499387 +benchmark: 726.1 ns/iteration, speed vs FLTX 0.23× + +105.6 + +100.4 + +2/2 + +726.1 ns · 0.23× + +Both + +- + + +TLFloat Quad +API: tlfloat::acosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.7, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4101, seed=10322096095657499355 +moderate: mean 115.1, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499387 +benchmark: 5,875 ns/iteration, speed vs FLTX 0.03× + +114.9 + +113.0 + +2/2 + +5,875 ns · 0.03× + +No + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 168.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.227981× + +108.1 + +103.1 + +2/2 + +168.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atanh +mean: 107.6 bits +p01: 104.4 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 108.0, p01 105.4, worst 0.0, required 80.0, margin -80.0, n=4105, seed=10322096095657499355 +moderate: mean 107.2, p01 104.4, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 206.5 ns/iteration, speed vs FLTX 0.81× + +107.6 + +0.0 + +1/2 + +206.5 ns · 0.81× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atanh +mean: 106.7 bits +p01: 102.1 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.8, p01 106.3, worst 104.6, required 80.0, margin 24.6, n=4105, seed=10322096095657499355 +moderate: mean 105.6, p01 102.1, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +benchmark: 2,623 ns/iteration, speed vs FLTX 0.06× + +106.7 + +101.3 + +2/2 + +2,623 ns · 0.06× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atanh +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.4, p01 113.9, worst 113.2, required 80.0, margin 33.2, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,478 ns/iteration, speed vs FLTX 0.11× + +115.1 + +113.0 + +2/2 + +1,478 ns · 0.11× + +No + +✗ + + + + +Special + + + + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 809.5 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.115941× + +107.2 + +99.2 + +2/2 + +809.5 ns + +Both + +- + + +qdpp: erfc is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erfc +mean: 106.3 bits +p01: 99.6 bits +worst: 99.1 bits +domains: 2/2 +minimum threshold margin: 19.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 108.8, p01 99.6, worst 99.1, required 80.0, margin 19.1, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 903.3 ns/iteration, speed vs FLTX 0.90× + +106.3 + +99.1 + +2/2 + +903.3 ns · 0.90× + +Both + +- + + +TLFloat Quad +API: tlfloat::erfc +mean: 115.1 bits +p01: 113.2 bits +worst: 113.1 bits +domains: 2/2 +minimum threshold margin: 33.1 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 115.2, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 40,504 ns/iteration, speed vs FLTX 0.02× + +115.1 + +113.1 + +2/2 + +40,504 ns · 0.02× + +Inf + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 810.3 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.132048× + +110.9 + +103.5 + +2/2 + +810.3 ns + +Both + +✓ + + +qdpp: erf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erf +mean: 110.1 bits +p01: 102.2 bits +worst: 101.2 bits +domains: 2/2 +minimum threshold margin: 21.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 103.7, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499356 +near_one: mean 106.2, p01 102.2, worst 101.2, required 80.0, margin 21.2, n=4099, seed=10322096095657499359 +benchmark: 917.3 ns/iteration, speed vs FLTX 0.88× + +110.1 + +101.2 + +2/2 + +917.3 ns · 0.88× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::erf +mean: 115.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.6, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 40,417 ns/iteration, speed vs FLTX 0.02× + +115.2 + +113.0 + +2/2 + +40,417 ns · 0.02× + +Inf + +✗ + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 590.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.192533× + +105.6 + +97.3 + +1/1 + +590.7 ns + +Both + +- + + +qdpp: tgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tgamma +mean: 100.8 bits +p01: 97.4 bits +worst: 96.5 bits +domains: 1/1 +minimum threshold margin: 16.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 100.8, p01 97.4, worst 96.5, required 80.0, margin 16.5, n=4099, seed=10322096095657499368 +benchmark: 1,886 ns/iteration, speed vs FLTX 0.31× + +100.8 + +96.5 + +1/1 + +1,886 ns · 0.31× + +Both + +- + + +TLFloat Quad +API: tlfloat::tgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499368 +benchmark: 29,530 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +1/1 + +29,530 ns · 0.02× + +No + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 676.5 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.595523× + +107.3 + +102.2 + +1/1 + +676.5 ns + +Both + +- + + +qdpp: lgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lgamma +mean: 105.1 bits +p01: 100.8 bits +worst: 92.1 bits +domains: 1/1 +minimum threshold margin: 12.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.1, p01 100.8, worst 92.1, required 80.0, margin 12.1, n=4099, seed=10322096095657499371 +benchmark: 2,432 ns/iteration, speed vs FLTX 0.28× + +105.1 + +92.1 + +1/1 + +2,432 ns · 0.28× + +Both + +- + + +TLFloat Quad +API: tlfloat::lgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499371 +benchmark: 26,769 ns/iteration, speed vs FLTX 0.03× + +115.0 + +113.0 + +1/1 + +26,769 ns · 0.03× + +No + +- + + + + +Comparisons + + + + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.11 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.723554× + +exact + +exact + +1/1 + +1.11 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.802 ns/iteration, speed vs FLTX 1.38× + +exact + +exact + +1/1 + +0.802 ns · 1.38× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.49 ns/iteration, speed vs FLTX 0.75× + +exact + +exact + +1/1 + +1.49 ns · 0.75× + +Both + +- + + +TLFloat Quad +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.39 ns/iteration, speed vs FLTX 0.25× + +exact + +exact + +1/1 + +4.39 ns · 0.25× + +Both + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.11 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.722196× + +exact + +exact + +1/1 + +1.11 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.804 ns/iteration, speed vs FLTX 1.38× + +exact + +exact + +1/1 + +0.804 ns · 1.38× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.20 ns/iteration, speed vs FLTX 0.93× + +exact + +exact + +1/1 + +1.20 ns · 0.93× + +Both + +- + + +TLFloat Quad +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.39 ns/iteration, speed vs FLTX 0.25× + +exact + +exact + +1/1 + +4.39 ns · 0.25× + +Both + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.05 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.73165× + +exact + +exact + +1/1 + +2.05 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.50 ns/iteration, speed vs FLTX 1.37× + +exact + +exact + +1/1 + +1.50 ns · 1.37× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.76 ns/iteration, speed vs FLTX 1.16× + +exact + +exact + +1/1 + +1.76 ns · 1.16× + +Both + +- + + +TLFloat Quad +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.28 ns/iteration, speed vs FLTX 0.39× + +exact + +exact + +1/1 + +5.28 ns · 0.39× + +Both + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.08 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.729187× + +exact + +exact + +1/1 + +2.08 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.52 ns/iteration, speed vs FLTX 1.37× + +exact + +exact + +1/1 + +1.52 ns · 1.37× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.78 ns/iteration, speed vs FLTX 1.17× + +exact + +exact + +1/1 + +1.78 ns · 1.17× + +Both + +- + + +TLFloat Quad +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.28 ns/iteration, speed vs FLTX 0.39× + +exact + +exact + +1/1 + +5.28 ns · 0.39× + +Both + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.07 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.309117× + +exact + +exact + +1/1 + +2.07 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.52 ns/iteration, speed vs FLTX 1.36× + +exact + +exact + +1/1 + +1.52 ns · 1.36× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.639 ns/iteration, speed vs FLTX 3.24× + +exact + +exact + +1/1 + +0.639 ns · 3.24× + +Both + +- + + +TLFloat Quad +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.27 ns/iteration, speed vs FLTX 0.39× + +exact + +exact + +1/1 + +5.27 ns · 0.39× + +Both + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.09 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.715912× + +exact + +exact + +1/1 + +2.09 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.49 ns/iteration, speed vs FLTX 1.40× + +exact + +exact + +1/1 + +1.49 ns · 1.40× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.78 ns/iteration, speed vs FLTX 1.17× + +exact + +exact + +1/1 + +1.78 ns · 1.17× + +Both + +- + + +TLFloat Quad +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.27 ns/iteration, speed vs FLTX 0.40× + +exact + +exact + +1/1 + +5.27 ns · 0.40× + +Both + +- + + + + +Random + + + + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 5.85 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 3.131793× + +- + +- + +- + +5.85 ns + +- + +- + + +qdpp dd_real +API: qdpp ddrand +benchmark: 18.33 ns/iteration, speed vs FLTX 0.32× + +- + +- + +- + +18.33 ns · 0.32× + +- + +- + + +cppdd: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 48.96 ns/iteration (no available competitor) + +- + +- + +- + +48.96 ns + +- + +- + + +qdpp: normal is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 6.10 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.819434× + +- + +- + +- + +6.10 ns + +- + +- + + +qdpp dd_real +API: same expression +benchmark: 5.00 ns/iteration, speed vs FLTX 1.22× + +- + +- + +- + +5.00 ns · 1.22× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same expression +benchmark: 8.68 ns/iteration, speed vs FLTX 0.70× + +- + +- + +- + +8.68 ns · 0.70× + +- + +- + + +TLFloat Quad +API: same expression +benchmark: 101.1 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +101.1 ns · 0.06× + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 30.59 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.86596× + +- + +- + +- + +30.59 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 41.96 ns/iteration, speed vs FLTX 0.73× + +- + +- + +- + +41.96 ns · 0.73× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 26.49 ns/iteration, speed vs FLTX 1.15× + +- + +- + +- + +26.49 ns · 1.15× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 181.1 ns/iteration, speed vs FLTX 0.17× + +- + +- + +- + +181.1 ns · 0.17× + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 242.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.299235× + +- + +- + +- + +242.8 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 315.4 ns/iteration, speed vs FLTX 0.77× + +- + +- + +- + +315.4 ns · 0.77× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 934.8 ns/iteration, speed vs FLTX 0.26× + +- + +- + +- + +934.8 ns · 0.26× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 2,044 ns/iteration, speed vs FLTX 0.12× + +- + +- + +- + +2,044 ns · 0.12× + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 21.33 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.712868× + +- + +- + +- + +21.33 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 15.20 ns/iteration, speed vs FLTX 1.40× + +- + +- + +- + +15.20 ns · 1.40× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 19.82 ns/iteration, speed vs FLTX 1.08× + +- + +- + +- + +19.82 ns · 1.08× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 210.2 ns/iteration, speed vs FLTX 0.10× + +- + +- + +- + +210.2 ns · 0.10× + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 69.31 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.865426× + +- + +- + +- + +69.31 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 59.98 ns/iteration, speed vs FLTX 1.16× + +- + +- + +- + +59.98 ns · 1.16× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 80.10 ns/iteration, speed vs FLTX 0.87× + +- + +- + +- + +80.10 ns · 0.87× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 796.4 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +796.4 ns · 0.09× + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 174.4 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.559478× + +- + +- + +- + +174.4 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 97.56 ns/iteration, speed vs FLTX 1.79× + +- + +- + +- + +97.56 ns · 1.79× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 115.8 ns/iteration, speed vs FLTX 1.51× + +- + +- + +- + +115.8 ns · 1.51× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 774.8 ns/iteration, speed vs FLTX 0.23× + +- + +- + +- + +774.8 ns · 0.23× + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 39.89 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.914805× + +- + +- + +- + +39.89 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 48.50 ns/iteration, speed vs FLTX 0.82× + +- + +- + +- + +48.50 ns · 0.82× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 36.49 ns/iteration, speed vs FLTX 1.09× + +- + +- + +- + +36.49 ns · 1.09× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 283.0 ns/iteration, speed vs FLTX 0.14× + +- + +- + +- + +283.0 ns · 0.14× + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 979.9 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.161213× + +- + +- + +- + +979.9 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 1,138 ns/iteration, speed vs FLTX 0.86× + +- + +- + +- + +1,138 ns · 0.86× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 2,603 ns/iteration, speed vs FLTX 0.38× + +- + +- + +- + +2,603 ns · 0.38× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 8,965 ns/iteration, speed vs FLTX 0.11× + +- + +- + +- + +8,965 ns · 0.11× + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 571.4 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.670022× + +- + +- + +- + +571.4 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 954.2 ns/iteration, speed vs FLTX 0.60× + +- + +- + +- + +954.2 ns · 0.60× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 5,944 ns/iteration, speed vs FLTX 0.10× + +- + +- + +- + +5,944 ns · 0.10× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 6,555 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +6,555 ns · 0.09× + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f128_overview_compact.svg b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f128_overview_compact.svg new file mode 100644 index 0000000..9e8adf1 --- /dev/null +++ b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f128_overview_compact.svg @@ -0,0 +1,9368 @@ + + + + + +operation + + +bl::f128 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +qdpp (dd_real) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +boost (cpp_double_double) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +TLFloat (tlquad) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +Arithmetic + + + + + + + +add + +fltx bl::f128 +API: bl::add +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 1.82 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.509992× + +120.3 + +105.7 + +2/2 + +1.8 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp operator+ +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 0.926 ns/iteration, speed vs FLTX 1.96× + +120.3 + +105.7 + +2/2 + +0.93 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator+ +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 2.39 ns/iteration, speed vs FLTX 0.76× + +120.3 + +105.7 + +2/2 + +2.4 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator+ +mean: 127.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 125.8, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 30.92 ns/iteration, speed vs FLTX 0.06× + +127.0 + +113.0 + +2/2 + +30.9 ns + +No + +✗ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 1.81 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.508112× + +120.1 + +105.7 + +2/2 + +1.8 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp operator- +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 0.919 ns/iteration, speed vs FLTX 1.97× + +120.1 + +105.7 + +2/2 + +0.92 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator- +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 2.40 ns/iteration, speed vs FLTX 0.75× + +120.1 + +105.7 + +2/2 + +2.4 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator- +mean: 127.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 126.0, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 30.69 ns/iteration, speed vs FLTX 0.06× + +127.2 + +113.0 + +2/2 + +30.7 ns + +No + +✗ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 1.61 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.090229× + +108.7 + +105.4 + +2/2 + +1.6 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp operator* +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 1.75 ns/iteration, speed vs FLTX 0.92× + +108.7 + +105.4 + +2/2 + +1.8 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator* +mean: 108.5 bits +p01: 105.2 bits +worst: 104.7 bits +domains: 2/2 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 108.5, p01 105.2, worst 104.7, required 90.0, margin 14.7, n=4092, seed=10322096095657499292 +subnormal: mean 123.8, p01 108.1, worst 108.1, required 90.0, margin 18.1, n=8, seed=10322096095657499292 +benchmark: 3.14 ns/iteration, speed vs FLTX 0.51× + +108.5 + +104.7 + +2/2 + +3.1 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator* +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4092, seed=10322096095657499292 +subnormal: mean 129.7, p01 113.5, worst 113.5, required 90.0, margin 23.5, n=8, seed=10322096095657499292 +benchmark: 43.78 ns/iteration, speed vs FLTX 0.04× + +115.0 + +113.0 + +2/2 + +43.8 ns + +No + +✗ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 2.53 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.302496× + +110.9 + +105.1 + +2/2 + +2.5 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp operator/ +mean: 110.7 bits +p01: 106.1 bits +worst: 105.5 bits +domains: 2/2 +minimum threshold margin: 15.5 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 110.7, p01 106.1, worst 105.5, required 90.0, margin 15.5, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 13.22 ns/iteration, speed vs FLTX 0.19× + +110.7 + +105.5 + +2/2 + +13.2 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator/ +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 5.82 ns/iteration, speed vs FLTX 0.43× + +110.9 + +105.1 + +2/2 + +5.8 ns + +NaN + +✗ + + +TLFloat Quad +API: TLFloat operator/ +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 97.21 ns/iteration, speed vs FLTX 0.03× + +115.0 + +113.0 + +2/2 + +97.2 ns + +No + +✗ + + + + +IO + + + + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 293.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.95052× + +114.0 + +110.7 + +2/2 + +294 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp to_string +mean: 109.4 bits +p01: 102.4 bits +worst: 102.3 bits +domains: 2/2 +minimum threshold margin: 12.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 107.9, worst 107.8, required 90.0, margin 17.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 104.9, p01 102.4, worst 102.3, required 90.0, margin 12.3, n=4096, seed=10322096095657499357 +benchmark: 1,278 ns/iteration, speed vs FLTX 0.23× + +109.4 + +102.3 + +2/2 + +1278 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost number::str +mean: 110.8 bits +p01: 106.0 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 16.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 112.0, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 109.5, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4096, seed=10322096095657499357 +benchmark: 1,160 ns/iteration, speed vs FLTX 0.25× + +110.8 + +106.0 + +2/2 + +1160 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::to_string +mean: 110.7 bits +p01: 107.6 bits +worst: 107.3 bits +domains: 2/2 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.8, p01 107.9, worst 107.4, required 90.0, margin 17.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 110.5, p01 107.6, worst 107.3, required 90.0, margin 17.3, n=4096, seed=10322096095657499357 +benchmark: 2,108 ns/iteration, speed vs FLTX 0.14× + +110.7 + +107.3 + +2/2 + +2108 ns + +Both + +✓ + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 239.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 5.434206× + +114.0 + +110.7 + +2/2 + +239 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp write +mean: 109.4 bits +p01: 102.4 bits +worst: 102.3 bits +domains: 2/2 +minimum threshold margin: 12.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 107.9, worst 107.8, required 90.0, margin 17.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 104.9, p01 102.4, worst 102.3, required 90.0, margin 12.3, n=4096, seed=10322096095657499357 +benchmark: 1,299 ns/iteration, speed vs FLTX 0.18× + +109.4 + +102.3 + +2/2 + +1299 ns + +Both + +✗ + + +cppdd: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 107.1 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 107.1, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 256.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.992074× + +109.9 + +106.0 + +2/2 + +256 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp read +mean: 102.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -106.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 106.8, p01 104.4, worst 103.5, required 106.0, margin -2.5, n=4097, seed=10322096095657499311 +wide_exponent: mean 98.2, p01 0.0, worst 0.0, required 106.0, margin -106.0, n=4098, seed=10322096095657499308 +benchmark: 254.1 ns/iteration, speed vs FLTX 1.01× + +102.5 + +0.0 + +0/2 + +254 ns + +NaN + +✓ + + +boost::multiprecision::cpp_double_double +API: Boost string constructor +mean: 107.1 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -106.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.9, p01 106.2, worst 106.0, required 106.0, margin 0.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 106.3, p01 0.0, worst 0.0, required 106.0, margin -106.0, n=4098, seed=10322096095657499308 +benchmark: 2,354 ns/iteration, speed vs FLTX 0.11× + +107.1 + +0.0 + +1/2 + +2354 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat string constructor +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 7.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4098, seed=10322096095657499308 +benchmark: 1,622 ns/iteration, speed vs FLTX 0.16× + +114.9 + +113.0 + +2/2 + +1622 ns + +No + +✗ + + + + +Rounding + + + + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.815 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.452743× + += + += + +1/1 + +0.82 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.369 ns/iteration, speed vs FLTX 2.21× + += + += + +1/1 + +0.37 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.370 ns/iteration, speed vs FLTX 2.21× + += + += + +1/1 + +0.37 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 5.77 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +5.8 ns + +No + +✗ + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.50 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.244411× + += + += + +1/1 + +1.5 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.368 ns/iteration, speed vs FLTX 4.09× + += + += + +1/1 + +0.37 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.10 ns/iteration, speed vs FLTX 0.72× + += + += + +1/1 + +2.1 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 5.93 ns/iteration, speed vs FLTX 0.25× + += + += + +1/1 + +5.9 ns + +No + +✗ + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 3.17 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.314492× + += + += + +1/1 + +3.2 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp aint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.997 ns/iteration, speed vs FLTX 3.18× + += + += + +1/1 + +1.00 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 4.67 ns/iteration, speed vs FLTX 0.68× + += + += + +1/1 + +4.7 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 4.34 ns/iteration, speed vs FLTX 0.73× + += + += + +1/1 + +4.3 ns + +No + +✗ + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 8.89 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.677654× + += + += + +1/1 + +8.9 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp round +mean: 130.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/1 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 130.4, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4108, seed=10322096095657499334 +benchmark: 7.25 ns/iteration, speed vs FLTX 1.23× + +130.4 + +0.0 + +0/1 + +7.3 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 6.02 ns/iteration, speed vs FLTX 1.48× + += + += + +1/1 + +6.0 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 7.73 ns/iteration, speed vs FLTX 1.15× + += + += + +1/1 + +7.7 ns + +No + +✗ + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.03 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.835938× + += + += + +1/1 + +10.0 ns + +Both + +✓ + + +qdpp: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 8.38 ns/iteration, speed vs FLTX 1.20× + += + += + +1/1 + +8.4 ns + +No + +✗ + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 6.69 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.606847× + += + += + +1/1 + +6.7 ns + +- + +- + + +qdpp: lround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 10.75 ns/iteration, speed vs FLTX 0.62× + += + += + +1/1 + +10.8 ns + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 6.05 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 102.847473× + += + += + +1/1 + +6.1 ns + +- + +- + + +qdpp: llround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 622.5 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +623 ns + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 93.12 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +93.1 ns + +Both + +✓ + + +qdpp: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 144.8 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +145 ns + +Both + +✓ + + +qdpp: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 20.59 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.43468× + += + += + +3/3 + +20.6 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp fmod +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -90.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 135.0, p01 101.7, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 24.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=2, seed=10322096095657499335 +wide_exponent: mean 78.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4096, seed=10322096095657499357 +benchmark: 29.54 ns/iteration, speed vs FLTX 0.70× + +106.7 + +0.0 + +1/3 + +29.5 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmod +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -90.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 135.0, p01 101.7, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 24.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=2, seed=10322096095657499335 +wide_exponent: mean 78.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4096, seed=10322096095657499357 +benchmark: 41.41 ns/iteration, speed vs FLTX 0.50× + +106.7 + +0.0 + +1/3 + +41.4 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 182.9 ns/iteration, speed vs FLTX 0.11× + += + += + +3/3 + +183 ns + +No + +✗ + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 22.82 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.161869× + +138.0 + +103.1 + +1/1 + +22.8 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp drem +mean: 134.4 bits +p01: 101.0 bits +worst: 95.5 bits +domains: 1/1 +minimum threshold margin: 5.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 134.4, p01 101.0, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +benchmark: 26.52 ns/iteration, speed vs FLTX 0.86× + +134.4 + +95.5 + +1/1 + +26.5 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remainder +mean: 134.4 bits +p01: 101.0 bits +worst: 95.5 bits +domains: 1/1 +minimum threshold margin: 5.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 134.4, p01 101.0, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +benchmark: 50.16 ns/iteration, speed vs FLTX 0.46× + +134.4 + +95.5 + +1/1 + +50.2 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 176.3 ns/iteration, speed vs FLTX 0.13× + += + += + +1/1 + +176 ns + +No + +✗ + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 22.81 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.187216× + += + += + +1/1 + +22.8 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp divrem +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 27.08 ns/iteration, speed vs FLTX 0.84× + += + += + +1/1 + +27.1 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 50.62 ns/iteration, speed vs FLTX 0.45× + += + += + +1/1 + +50.6 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 181.6 ns/iteration, speed vs FLTX 0.13× + += + += + +1/1 + +182 ns + +No + +✗ + + + + +Float Utils + + + + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.810 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.517721× + += + += + +2/2 + +0.81 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.40 ns/iteration, speed vs FLTX 0.24× + += + += + +2/2 + +3.4 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.23 ns/iteration, speed vs FLTX 0.66× + += + += + +2/2 + +1.2 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.71 ns/iteration, speed vs FLTX 0.30× + += + += + +2/2 + +2.7 ns + +No + +✓ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.807 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.805331× + += + += + +1/1 + +0.81 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.40 ns/iteration, speed vs FLTX 0.24× + += + += + +1/1 + +3.4 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.650 ns/iteration, speed vs FLTX 1.24× + += + += + +1/1 + +0.65 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.70 ns/iteration, speed vs FLTX 0.30× + += + += + +1/1 + +2.7 ns + +No + +✓ + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.4 bits +p01: 104.7 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 109.1, p01 104.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.6, p01 106.6, worst 105.3, required 90.0, margin 15.3, n=4096, seed=10322096095657499357 +benchmark: 7.87 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.008288× + +117.4 + +99.6 + +3/3 + +7.9 ns + +Both + +✗ + + +qdpp: fma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fma +mean: 75.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -90.0 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 0.1, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4098, seed=10322096095657499352 +moderate: mean 108.2, p01 103.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.1, p01 105.4, worst 104.1, required 90.0, margin 14.1, n=4096, seed=10322096095657499357 +benchmark: 15.81 ns/iteration, speed vs FLTX 0.50× + +75.8 + +0.0 + +2/3 + +15.8 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fma +mean: 128.4 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 125.4, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 61.56 ns/iteration, speed vs FLTX 0.13× + +128.4 + +113.0 + +3/3 + +61.6 ns + +No + +✗ + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 48.17 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.281666× + +109.0 + +105.2 + +2/2 + +48.2 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp inv +mean: 109.4 bits +p01: 106.8 bits +worst: 106.5 bits +domains: 2/2 +minimum threshold margin: 16.5 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 109.4, p01 107.0, worst 106.5, required 90.0, margin 16.5, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.4, p01 106.8, worst 106.5, required 90.0, margin 16.5, n=4096, seed=10322096095657499357 +benchmark: 13.57 ns/iteration, speed vs FLTX 3.55× + +109.4 + +106.5 + +2/2 + +13.6 ns + +NaN + +✗ + + +cppdd: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.92 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.996788× + += + += + +2/2 + +2.9 ns + +Both + +✓ + + +qdpp: fmin is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.91 ns/iteration, speed vs FLTX 1.00× + += + += + +2/2 + +2.9 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 11.24 ns/iteration, speed vs FLTX 0.26× + += + += + +2/2 + +11.2 ns + +No + +✗ + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.94 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.995237× + += + += + +2/2 + +2.9 ns + +Both + +✓ + + +qdpp: fmax is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.92 ns/iteration, speed vs FLTX 1.00× + += + += + +2/2 + +2.9 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 10.25 ns/iteration, speed vs FLTX 0.29× + += + += + +2/2 + +10.3 ns + +No + +✗ + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.03 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.109805× + +138.0 + +106.2 + +2/2 + +3.0 ns + +Both + +✓ + + +qdpp: fdim is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.36 ns/iteration, speed vs FLTX 0.90× + +138.0 + +106.2 + +2/2 + +3.4 ns + +No + +✓ + + +TLFloat Quad +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 29.23 ns/iteration, speed vs FLTX 0.10× + += + += + +2/2 + +29.2 ns + +No + +✓ + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.385 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.262811× + += + += + +1/1 + +0.39 ns + +Both + +✓ + + +qdpp: copysign is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.871 ns/iteration, speed vs FLTX 0.44× + += + += + +1/1 + +0.87 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 6.48 ns/iteration, speed vs FLTX 0.06× + += + += + +1/1 + +6.5 ns + +No + +✗ + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.81 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.050114× + += + += + +1/1 + +1.8 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.90 ns/iteration, speed vs FLTX 0.95× + += + += + +1/1 + +1.9 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.07 ns/iteration, speed vs FLTX 0.88× + += + += + +1/1 + +2.1 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 11.59 ns/iteration, speed vs FLTX 0.16× + += + += + +1/1 + +11.6 ns + +No + +✗ + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.88 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.012846× + += + += + +1/1 + +1.9 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.90 ns/iteration, speed vs FLTX 0.99× + += + += + +1/1 + +1.9 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.07 ns/iteration, speed vs FLTX 0.91× + += + += + +1/1 + +2.1 ns + +Both + +✗ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.89 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.010454× + += + += + +1/1 + +1.9 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.91 ns/iteration, speed vs FLTX 0.99× + += + += + +1/1 + +1.9 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.06 ns/iteration, speed vs FLTX 0.92× + += + += + +1/1 + +2.1 ns + +Both + +✗ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.61 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.773836× + += + += + +2/2 + +3.6 ns + +Both + +✓ + + +qdpp: frexp is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.79 ns/iteration, speed vs FLTX 1.29× + += + += + +2/2 + +2.8 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 10.80 ns/iteration, speed vs FLTX 0.33× + += + += + +2/2 + +10.8 ns + +No + +✗ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.93 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.01516× + += + += + +2/2 + +6.9 ns + +Both + +✓ + + +qdpp: modf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 7.03 ns/iteration, speed vs FLTX 0.99× + += + += + +2/2 + +7.0 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 32.90 ns/iteration, speed vs FLTX 0.21× + += + += + +2/2 + +32.9 ns + +No + +✗ + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.08 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.751384× + += + += + +2/2 + +2.1 ns + +- + +- + + +qdpp: ilogb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.12 ns/iteration, speed vs FLTX 0.98× + += + += + +2/2 + +2.1 ns + +- + +- + + +TLFloat Quad +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.57 ns/iteration, speed vs FLTX 1.33× + += + += + +2/2 + +1.6 ns + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.91 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 50.759865× + += + += + +2/2 + +1.9 ns + +Both + +- + + +qdpp: logb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 97.20 ns/iteration, speed vs FLTX 0.02× + += + += + +2/2 + +97.2 ns + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 5.44 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 2.637002× + +- + +- + +- + +5.4 ns + +- + +- + + +qdpp: nextafter is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter +benchmark: 23.27 ns/iteration, speed vs FLTX 0.23× + +- + +- + +- + +23.3 ns + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter +benchmark: 14.34 ns/iteration, speed vs FLTX 0.38× + +- + +- + +- + +14.3 ns + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 5.43 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 2.62853× + +- + +- + +- + +5.4 ns + +- + +- + + +qdpp: nexttoward is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter (same type) +benchmark: 23.31 ns/iteration, speed vs FLTX 0.23× + +- + +- + +- + +23.3 ns + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter (same type) +benchmark: 14.28 ns/iteration, speed vs FLTX 0.38× + +- + +- + +- + +14.3 ns + +- + +- + + + + +Roots & powers + + + + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.20 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.029254× + +108.7 + +105.4 + +2/2 + +1.2 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 108.6, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.24 ns/iteration, speed vs FLTX 0.97× + +108.7 + +105.4 + +2/2 + +1.2 ns + +NaN + +✓ + + +cppdd: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.8 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 4/4 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 110.5, p01 106.7, worst 106.1, required 90.0, margin 16.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 5.67 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.549444× + +109.8 + +104.7 + +4/4 + +5.7 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sqrt +mean: 92.6 bits +p01: 52.2 bits +worst: 51.3 bits +domains: 2/4 +minimum threshold margin: -38.7 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 98.0, p01 55.3, worst 55.3, required 90.0, margin -34.7, n=4096, seed=10322096095657499354 +near_one: mean 108.0, p01 104.2, worst 103.5, required 90.0, margin 13.5, n=4099, seed=10322096095657499359 +subnormal: mean 56.5, p01 52.2, worst 51.3, required 90.0, margin -38.7, n=4100, seed=10322096095657499350 +wide_exponent: mean 108.1, p01 104.2, worst 103.2, required 90.0, margin 13.2, n=4096, seed=10322096095657499357 +benchmark: 5.44 ns/iteration, speed vs FLTX 1.04× + +92.6 + +51.3 + +2/4 + +5.4 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sqrt +mean: 113.7 bits +p01: 54.4 bits +worst: 52.8 bits +domains: 2/4 +minimum threshold margin: -37.2 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 99.1, p01 54.4, worst 54.4, required 90.0, margin -35.6, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 136.6, p01 54.5, worst 52.8, required 90.0, margin -37.2, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 3.12 ns/iteration, speed vs FLTX 1.82× + +113.7 + +52.8 + +2/4 + +3.1 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sqrt +mean: 115.2 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 4/4 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 115.0, p01 113.4, worst 113.1, required 90.0, margin 23.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499359 +subnormal: mean 115.7, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 154.1 ns/iteration, speed vs FLTX 0.04× + +115.2 + +113.0 + +4/4 + +154 ns + +No + +✗ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.5 bits +p01: 105.0 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 14.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.6, p01 105.3, worst 104.1, required 90.0, margin 14.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.4, p01 105.0, worst 104.1, required 90.0, margin 14.1, n=4096, seed=10322096095657499357 +benchmark: 18.87 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 4.003411× + +108.5 + +104.1 + +2/2 + +18.9 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp nroot +mean: 101.5 bits +p01: 89.4 bits +worst: 89.0 bits +domains: 1/2 +minimum threshold margin: -1.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 107.5, p01 104.1, worst 103.0, required 90.0, margin 13.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 95.6, p01 89.4, worst 89.0, required 90.0, margin -1.0, n=4096, seed=10322096095657499357 +benchmark: 75.55 ns/iteration, speed vs FLTX 0.25× + +101.5 + +89.0 + +1/2 + +75.5 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cbrt +mean: 108.4 bits +p01: 105.4 bits +worst: 104.6 bits +domains: 2/2 +minimum threshold margin: 14.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 108.6, p01 105.6, worst 104.6, required 90.0, margin 14.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.2, p01 105.4, worst 104.7, required 90.0, margin 14.7, n=4096, seed=10322096095657499357 +benchmark: 388.6 ns/iteration, speed vs FLTX 0.05× + +108.4 + +104.6 + +2/2 + +389 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::cbrt +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.1, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 853.6 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +2/2 + +854 ns + +No + +✗ + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 10.88 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 5.474655× + +122.4 + +104.4 + +2/2 + +10.9 ns + +Both + +✓ + + +qdpp: hypot is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::hypot +mean: 121.9 bits +p01: 104.9 bits +worst: 104.3 bits +domains: 2/2 +minimum threshold margin: 14.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.8, p01 104.9, worst 104.3, required 90.0, margin 14.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 106.6, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 59.55 ns/iteration, speed vs FLTX 0.18× + +121.9 + +104.3 + +2/2 + +59.6 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::hypot +mean: 129.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 142.9, p01 113.8, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 217.1 ns/iteration, speed vs FLTX 0.05× + +129.0 + +113.0 + +2/2 + +217 ns + +No + +✓ + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 241.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.247542× + +107.1 + +101.3 + +2/2 + +241 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp pow +mean: 106.8 bits +p01: 101.7 bits +worst: 101.0 bits +domains: 2/2 +minimum threshold margin: 21.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 105.3, p01 101.7, worst 101.0, required 80.0, margin 21.0, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.2, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499359 +benchmark: 300.9 ns/iteration, speed vs FLTX 0.80× + +106.8 + +101.0 + +2/2 + +301 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow +mean: 102.6 bits +p01: 98.7 bits +worst: 97.6 bits +domains: 2/2 +minimum threshold margin: 17.6 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 102.0, p01 98.7, worst 97.6, required 80.0, margin 17.6, n=4099, seed=10322096095657499356 +near_one: mean 103.2, p01 100.6, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499359 +benchmark: 564.0 ns/iteration, speed vs FLTX 0.43× + +102.6 + +97.6 + +2/2 + +564 ns + +Inf + +✗ + + +TLFloat Quad +API: tlfloat::pow +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 6,434 ns/iteration, speed vs FLTX 0.04× + +114.9 + +113.0 + +2/2 + +6434 ns + +No + +✗ + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 26.35 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.294675× + +106.5 + +103.2 + +2/2 + +26.3 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp npwr +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 7.76 ns/iteration, speed vs FLTX 3.39× + +106.5 + +103.2 + +2/2 + +7.8 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow(value, int) +mean: 106.4 bits +p01: 103.5 bits +worst: 102.7 bits +domains: 2/2 +minimum threshold margin: 12.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.4, p01 103.5, worst 102.8, required 90.0, margin 12.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.4, p01 103.5, worst 102.7, required 90.0, margin 12.7, n=4096, seed=10322096095657499357 +benchmark: 10.16 ns/iteration, speed vs FLTX 2.59× + +106.4 + +102.7 + +2/2 + +10.2 ns + +Both + +✗ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 107.0 bits +p01: 104.3 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.6, p01 104.3, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.4, p01 104.8, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 118.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.253044× + +107.0 + +103.6 + +2/2 + +118 ns + +Both + +- + + +qdpp dd_real +API: qdpp exp +mean: 106.8 bits +p01: 104.2 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.5, p01 104.2, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499339 +moderate: mean 107.2, p01 104.6, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499356 +benchmark: 148.0 ns/iteration, speed vs FLTX 0.80× + +106.8 + +103.7 + +2/2 + +148 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp +mean: 100.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 97.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499339 +moderate: mean 103.7, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +benchmark: 309.8 ns/iteration, speed vs FLTX 0.38× + +100.4 + +0.0 + +1/2 + +310 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::exp +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 971.9 ns/iteration, speed vs FLTX 0.12× + +114.9 + +113.0 + +2/2 + +972 ns + +No + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 111.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 6.279175× + +108.9 + +105.1 + +2/2 + +112 ns + +Both + +- + + +qdpp: exp2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp2 +mean: 101.7 bits +p01: 96.4 bits +worst: 95.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 99.5, p01 96.4, worst 95.2, required 80.0, margin 15.2, n=4099, seed=10322096095657499339 +moderate: mean 103.8, p01 101.1, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499356 +benchmark: 701.0 ns/iteration, speed vs FLTX 0.16× + +101.7 + +95.2 + +2/2 + +701 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::exp2 +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,862 ns/iteration, speed vs FLTX 0.04× + +115.0 + +113.0 + +2/2 + +2862 ns + +No + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 118.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.271512× + +121.6 + +104.1 + +2/2 + +118 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp expm1 +mean: 121.5 bits +p01: 104.8 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 134.5, p01 105.7, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.5, p01 104.8, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499356 +benchmark: 150.4 ns/iteration, speed vs FLTX 0.79× + +121.5 + +0.0 + +1/2 + +150 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::expm1 +mean: 120.4 bits +p01: 101.1 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 106.6, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 106.1, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499356 +benchmark: 323.1 ns/iteration, speed vs FLTX 0.37× + +120.4 + +100.3 + +2/2 + +323 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::expm1 +mean: 128.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.7, worst 113.0, required 80.0, margin 33.0, n=4098, seed=10322096095657499336 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,041 ns/iteration, speed vs FLTX 0.11× + +128.2 + +113.0 + +2/2 + +1041 ns + +No + +✗ + + + + +Logarithms + + + + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.6, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 155.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.128051× + +108.4 + +103.7 + +3/3 + +155 ns + +Both + +- + + +qdpp dd_real +API: qdpp log +mean: 101.5 bits +p01: 62.2 bits +worst: 61.3 bits +domains: 2/3 +minimum threshold margin: -18.7 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 94.7, p01 62.2, worst 61.3, required 80.0, margin -18.7, n=4096, seed=10322096095657499354 +near_one: mean 106.9, p01 104.4, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 103.0, p01 98.4, worst 98.1, required 80.0, margin 18.1, n=4096, seed=10322096095657499357 +benchmark: 175.2 ns/iteration, speed vs FLTX 0.89× + +101.5 + +61.3 + +2/3 + +175 ns + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log +mean: 105.3 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.2, p01 105.2, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.9, p01 104.6, worst 102.4, required 80.0, margin 22.4, n=4096, seed=10322096095657499357 +benchmark: 342.9 ns/iteration, speed vs FLTX 0.45× + +105.3 + +87.9 + +3/3 + +343 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::log +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 115.5, p01 113.3, worst 113.3, required 80.0, margin 33.3, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 1,359 ns/iteration, speed vs FLTX 0.11× + +115.1 + +113.0 + +3/3 + +1359 ns + +No + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 162.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.189913× + +108.8 + +103.7 + +3/3 + +163 ns + +Both + +- + + +qdpp: log2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log2 +mean: 106.6 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.2, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.8, p01 104.5, worst 102.3, required 80.0, margin 22.3, n=4096, seed=10322096095657499357 +benchmark: 356.1 ns/iteration, speed vs FLTX 0.46× + +106.6 + +87.9 + +3/3 + +356 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::log2 +mean: 116.3 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 119.0, p01 113.9, worst 113.8, required 80.0, margin 33.8, n=4096, seed=10322096095657499354 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 1,435 ns/iteration, speed vs FLTX 0.11× + +116.3 + +113.0 + +3/3 + +1435 ns + +No + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.5 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 162.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.23741× + +107.5 + +103.8 + +3/3 + +163 ns + +Both + +- + + +qdpp dd_real +API: qdpp log10 +mean: 101.3 bits +p01: 62.2 bits +worst: 61.3 bits +domains: 2/3 +minimum threshold margin: -18.7 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 94.6, p01 62.2, worst 61.3, required 80.0, margin -18.7, n=4096, seed=10322096095657499354 +near_one: mean 106.6, p01 104.2, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +wide_exponent: mean 102.8, p01 98.3, worst 98.1, required 80.0, margin 18.1, n=4096, seed=10322096095657499357 +benchmark: 201.3 ns/iteration, speed vs FLTX 0.81× + +101.3 + +61.3 + +2/3 + +201 ns + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log10 +mean: 102.9 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 103.6, p01 103.1, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499354 +near_one: mean 101.6, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 103.6, p01 103.0, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499357 +benchmark: 356.5 ns/iteration, speed vs FLTX 0.46× + +102.9 + +87.9 + +3/3 + +356 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::log10 +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 114.8, p01 113.1, worst 113.1, required 80.0, margin 33.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 1,429 ns/iteration, speed vs FLTX 0.11× + +114.9 + +113.0 + +3/3 + +1429 ns + +No + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 157.9 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.085306× + +121.4 + +103.6 + +2/2 + +158 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp log1p +mean: 120.9 bits +p01: 104.6 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 105.8, worst 104.1, required 80.0, margin 24.1, n=4098, seed=10322096095657499336 +moderate: mean 107.2, p01 104.6, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +benchmark: 171.4 ns/iteration, speed vs FLTX 0.92× + +120.9 + +103.8 + +2/2 + +171 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log1p +mean: 119.7 bits +p01: 101.3 bits +worst: 100.2 bits +domains: 2/2 +minimum threshold margin: 20.2 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 107.2, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 104.8, p01 101.3, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +benchmark: 472.0 ns/iteration, speed vs FLTX 0.33× + +119.7 + +100.2 + +2/2 + +472 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::log1p +mean: 128.1 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.6, worst 113.1, required 80.0, margin 33.1, n=4098, seed=10322096095657499336 +moderate: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,393 ns/iteration, speed vs FLTX 0.11× + +128.1 + +113.0 + +2/2 + +1393 ns + +No + +✗ + + + + +Trigonometric + + + + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 107.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.509475× + +110.6 + +98.6 + +3/3 + +107 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sin +mean: 52.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 15.7, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 106.7, p01 101.7, worst 97.4, required 80.0, margin 17.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 36.0, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 161.9 ns/iteration, speed vs FLTX 0.66× + +52.5 + +0.0 + +1/3 + +162 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sin +mean: 51.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.2, p01 98.8, worst 94.5, required 80.0, margin 14.5, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 35.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 611.1 ns/iteration, speed vs FLTX 0.18× + +51.4 + +0.0 + +1/3 + +611 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sin +mean: 116.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4110, seed=10322096095657499353 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 118.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 983.9 ns/iteration, speed vs FLTX 0.11× + +116.1 + +113.0 + +3/3 + +984 ns + +No + +✗ + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 107.0 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.52916× + +113.5 + +99.2 + +3/3 + +107 ns + +Both + +- + + +qdpp dd_real +API: qdpp cos +mean: 63.6 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 54.3, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 106.6, p01 101.4, worst 96.3, required 80.0, margin 16.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 31.6, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 163.5 ns/iteration, speed vs FLTX 0.65× + +63.6 + +0.0 + +1/3 + +164 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cos +mean: 63.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 53.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.1, p01 98.9, worst 94.0, required 80.0, margin 14.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 33.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 612.9 ns/iteration, speed vs FLTX 0.17× + +63.3 + +0.0 + +1/3 + +613 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::cos +mean: 117.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 118.8, p01 113.4, worst 113.1, required 80.0, margin 33.1, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 117.8, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 992.1 ns/iteration, speed vs FLTX 0.11× + +117.2 + +113.0 + +3/3 + +992 ns + +No + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 116.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.427738× + +- + +- + +- + +117 ns + +- + +- + + +qdpp dd_real +API: qdpp sincos +benchmark: 166.8 ns/iteration, speed vs FLTX 0.70× + +- + +- + +- + +167 ns + +- + +- + + +cppdd: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::sincos +benchmark: 1,987 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +1987 ns + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.6, required 75.0, margin 28.6, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 116.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.593246× + +106.7 + +98.6 + +3/3 + +117 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp tan +mean: 42.6 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -75.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 14.7, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4110, seed=10322096095657499353 +moderate: mean 105.9, p01 100.7, worst 96.3, required 75.0, margin 21.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 9.1, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4315, seed=10322096095657499369 +benchmark: 185.9 ns/iteration, speed vs FLTX 0.63× + +42.6 + +0.0 + +1/3 + +186 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tan +mean: 41.2 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -75.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4110, seed=10322096095657499353 +moderate: mean 103.3, p01 97.9, worst 94.0, required 75.0, margin 19.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 9.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4315, seed=10322096095657499369 +benchmark: 1,215 ns/iteration, speed vs FLTX 0.10× + +41.2 + +0.0 + +1/3 + +1215 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tan +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 38.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 114.9, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.1, worst 113.0, required 75.0, margin 38.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 115.0, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4315, seed=10322096095657499369 +benchmark: 1,261 ns/iteration, speed vs FLTX 0.09× + +115.0 + +113.0 + +3/3 + +1261 ns + +No + +✗ + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 196.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.458348× + +108.6 + +104.1 + +2/2 + +197 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp asin +mean: 108.0 bits +p01: 103.5 bits +worst: 102.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 109.5, p01 107.4, worst 104.4, required 80.0, margin 24.4, n=4105, seed=10322096095657499355 +moderate: mean 106.6, p01 103.5, worst 102.9, required 80.0, margin 22.9, n=4099, seed=10322096095657499356 +benchmark: 286.8 ns/iteration, speed vs FLTX 0.69× + +108.0 + +102.9 + +2/2 + +287 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asin +mean: 106.8 bits +p01: 104.0 bits +worst: 103.4 bits +domains: 2/2 +minimum threshold margin: 23.4 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.0, p01 105.5, worst 105.0, required 80.0, margin 25.0, n=4105, seed=10322096095657499355 +moderate: mean 106.6, p01 104.0, worst 103.4, required 80.0, margin 23.4, n=4099, seed=10322096095657499356 +benchmark: 3,263 ns/iteration, speed vs FLTX 0.06× + +106.8 + +103.4 + +2/2 + +3263 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asin +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.1, p01 113.7, worst 113.7, required 80.0, margin 33.7, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,166 ns/iteration, speed vs FLTX 0.09× + +115.0 + +113.0 + +2/2 + +2166 ns + +No + +✗ + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 202.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.424191× + +106.5 + +81.6 + +2/2 + +202 ns + +Both + +- + + +qdpp dd_real +API: qdpp acos +mean: 108.1 bits +p01: 104.4 bits +worst: 103.3 bits +domains: 2/2 +minimum threshold margin: 23.3 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 108.2, p01 104.4, worst 103.7, required 80.0, margin 23.7, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 104.4, worst 103.3, required 80.0, margin 23.3, n=4099, seed=10322096095657499356 +benchmark: 287.9 ns/iteration, speed vs FLTX 0.70× + +108.1 + +103.3 + +2/2 + +288 ns + +No + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acos +mean: 107.0 bits +p01: 104.1 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 23.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.1, p01 104.6, worst 104.1, required 80.0, margin 24.1, n=4105, seed=10322096095657499355 +moderate: mean 106.8, p01 104.1, worst 103.2, required 80.0, margin 23.2, n=4099, seed=10322096095657499356 +benchmark: 3,072 ns/iteration, speed vs FLTX 0.07× + +107.0 + +103.2 + +2/2 + +3072 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::acos +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,162 ns/iteration, speed vs FLTX 0.09× + +114.9 + +113.0 + +2/2 + +2162 ns + +No + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 142.5 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.450247× + +108.7 + +104.9 + +2/2 + +142 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atan +mean: 107.2 bits +p01: 103.5 bits +worst: 102.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 108.1, p01 103.9, worst 102.9, required 80.0, margin 22.9, n=4099, seed=10322096095657499356 +near_one: mean 106.2, p01 103.5, worst 102.9, required 80.0, margin 22.9, n=4099, seed=10322096095657499359 +benchmark: 206.6 ns/iteration, speed vs FLTX 0.69× + +107.2 + +102.9 + +2/2 + +207 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan +mean: 106.7 bits +p01: 104.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.8, p01 104.7, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499359 +benchmark: 328.9 ns/iteration, speed vs FLTX 0.43× + +106.7 + +103.6 + +2/2 + +329 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan +mean: 115.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 1,883 ns/iteration, speed vs FLTX 0.08× + +115.0 + +113.0 + +2/2 + +1883 ns + +Inf + +✗ + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 148.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.393229× + +108.7 + +104.5 + +3/3 + +148 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atan2 +mean: 106.9 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -80.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 0.0, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=8, seed=10322096095657499351 +moderate: mean 107.6, p01 103.7, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +near_one: mean 106.4, p01 103.4, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499359 +benchmark: 206.5 ns/iteration, speed vs FLTX 0.72× + +106.9 + +0.0 + +2/3 + +207 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan2 +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 61.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=8, seed=10322096095657499351 +moderate: mean 106.9, p01 104.4, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 366.9 ns/iteration, speed vs FLTX 0.40× + +106.7 + +0.0 + +2/3 + +367 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan2 +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 118.6, p01 114.8, worst 114.8, required 80.0, margin 34.8, n=8, seed=10322096095657499351 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,903 ns/iteration, speed vs FLTX 0.08× + +115.0 + +113.0 + +3/3 + +1903 ns + +Inf + +✗ + + + + +Hyperbolic + + + + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 135.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.361754× + +107.4 + +103.6 + +2/2 + +135 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sinh +mean: 107.0 bits +p01: 104.4 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 106.9, p01 104.4, worst 103.9, required 80.0, margin 23.9, n=4099, seed=10322096095657499356 +near_one: mean 107.1, p01 104.4, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499359 +benchmark: 184.0 ns/iteration, speed vs FLTX 0.73× + +107.0 + +103.6 + +2/2 + +184 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sinh +mean: 103.5 bits +p01: 100.6 bits +worst: 99.9 bits +domains: 2/2 +minimum threshold margin: 19.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 103.8, p01 101.0, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +near_one: mean 103.3, p01 100.6, worst 99.9, required 80.0, margin 19.9, n=4099, seed=10322096095657499359 +benchmark: 334.5 ns/iteration, speed vs FLTX 0.40× + +103.5 + +99.9 + +2/2 + +334 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sinh +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,120 ns/iteration, speed vs FLTX 0.12× + +115.0 + +113.0 + +2/2 + +1120 ns + +No + +✗ + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 134.4 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.362738× + +107.9 + +104.4 + +2/2 + +134 ns + +Both + +- + + +qdpp dd_real +API: qdpp cosh +mean: 107.7 bits +p01: 104.9 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 107.5, p01 104.9, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.3, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499359 +benchmark: 183.2 ns/iteration, speed vs FLTX 0.73× + +107.7 + +104.1 + +2/2 + +183 ns + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cosh +mean: 104.0 bits +p01: 101.1 bits +worst: 100.6 bits +domains: 2/2 +minimum threshold margin: 20.6 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 103.8, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.2, p01 101.5, worst 101.0, required 80.0, margin 21.0, n=4099, seed=10322096095657499359 +benchmark: 334.4 ns/iteration, speed vs FLTX 0.40× + +104.0 + +100.6 + +2/2 + +334 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::cosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,052 ns/iteration, speed vs FLTX 0.13× + +114.9 + +113.0 + +2/2 + +1052 ns + +No + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 141.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.323844× + +109.2 + +103.8 + +2/2 + +142 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp tanh +mean: 109.3 bits +p01: 105.4 bits +worst: 104.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 109.9, p01 105.4, worst 104.0, required 80.0, margin 24.0, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.7, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499359 +benchmark: 187.5 ns/iteration, speed vs FLTX 0.76× + +109.3 + +104.0 + +2/2 + +188 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tanh +mean: 105.8 bits +p01: 101.2 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.0, p01 102.2, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.5, p01 101.2, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 350.2 ns/iteration, speed vs FLTX 0.40× + +105.8 + +100.3 + +2/2 + +350 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tanh +mean: 115.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.5, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,087 ns/iteration, speed vs FLTX 0.13× + +115.2 + +113.0 + +2/2 + +1087 ns + +Inf + +✗ + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 144.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.421245× + +108.1 + +103.8 + +2/2 + +145 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp asinh +mean: 107.1 bits +p01: 104.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 107.4, p01 104.6, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499356 +near_one: mean 106.7, p01 104.0, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499359 +benchmark: 205.8 ns/iteration, speed vs FLTX 0.70× + +107.1 + +0.0 + +1/2 + +206 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asinh +mean: 104.5 bits +p01: 100.8 bits +worst: 99.8 bits +domains: 2/2 +minimum threshold margin: 19.8 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 105.1, p01 101.7, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 100.8, worst 99.8, required 80.0, margin 19.8, n=4099, seed=10322096095657499359 +benchmark: 611.9 ns/iteration, speed vs FLTX 0.24× + +104.5 + +99.8 + +2/2 + +612 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asinh +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 6,173 ns/iteration, speed vs FLTX 0.02× + +114.9 + +113.0 + +2/2 + +6173 ns + +No + +✗ + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 169.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.18297× + +108.0 + +103.7 + +2/2 + +169 ns + +Both + +- + + +qdpp dd_real +API: qdpp acosh +mean: 107.2 bits +p01: 103.9 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 106.7, p01 103.9, worst 0.0, required 80.0, margin -80.0, n=4101, seed=10322096095657499355 +moderate: mean 107.8, p01 105.1, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499387 +benchmark: 200.0 ns/iteration, speed vs FLTX 0.85× + +107.2 + +0.0 + +0/2 + +200 ns + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acosh +mean: 105.6 bits +p01: 101.7 bits +worst: 100.4 bits +domains: 2/2 +minimum threshold margin: 20.4 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 105.7, p01 101.7, worst 101.1, required 80.0, margin 21.1, n=4101, seed=10322096095657499355 +moderate: mean 105.5, p01 102.2, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499387 +benchmark: 726.1 ns/iteration, speed vs FLTX 0.23× + +105.6 + +100.4 + +2/2 + +726 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::acosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.7, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4101, seed=10322096095657499355 +moderate: mean 115.1, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499387 +benchmark: 5,875 ns/iteration, speed vs FLTX 0.03× + +114.9 + +113.0 + +2/2 + +5875 ns + +No + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 168.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.227981× + +108.1 + +103.1 + +2/2 + +168 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atanh +mean: 107.6 bits +p01: 104.4 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 108.0, p01 105.4, worst 0.0, required 80.0, margin -80.0, n=4105, seed=10322096095657499355 +moderate: mean 107.2, p01 104.4, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 206.5 ns/iteration, speed vs FLTX 0.81× + +107.6 + +0.0 + +1/2 + +206 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atanh +mean: 106.7 bits +p01: 102.1 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.8, p01 106.3, worst 104.6, required 80.0, margin 24.6, n=4105, seed=10322096095657499355 +moderate: mean 105.6, p01 102.1, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +benchmark: 2,623 ns/iteration, speed vs FLTX 0.06× + +106.7 + +101.3 + +2/2 + +2623 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atanh +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.4, p01 113.9, worst 113.2, required 80.0, margin 33.2, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,478 ns/iteration, speed vs FLTX 0.11× + +115.1 + +113.0 + +2/2 + +1478 ns + +No + +✗ + + + + +Special + + + + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 809.5 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.115941× + +107.2 + +99.2 + +2/2 + +809 ns + +Both + +- + + +qdpp: erfc is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erfc +mean: 106.3 bits +p01: 99.6 bits +worst: 99.1 bits +domains: 2/2 +minimum threshold margin: 19.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 108.8, p01 99.6, worst 99.1, required 80.0, margin 19.1, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 903.3 ns/iteration, speed vs FLTX 0.90× + +106.3 + +99.1 + +2/2 + +903 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::erfc +mean: 115.1 bits +p01: 113.2 bits +worst: 113.1 bits +domains: 2/2 +minimum threshold margin: 33.1 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 115.2, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 40,504 ns/iteration, speed vs FLTX 0.02× + +115.1 + +113.1 + +2/2 + +40504 ns + +Inf + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 810.3 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.132048× + +110.9 + +103.5 + +2/2 + +810 ns + +Both + +✓ + + +qdpp: erf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erf +mean: 110.1 bits +p01: 102.2 bits +worst: 101.2 bits +domains: 2/2 +minimum threshold margin: 21.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 103.7, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499356 +near_one: mean 106.2, p01 102.2, worst 101.2, required 80.0, margin 21.2, n=4099, seed=10322096095657499359 +benchmark: 917.3 ns/iteration, speed vs FLTX 0.88× + +110.1 + +101.2 + +2/2 + +917 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::erf +mean: 115.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.6, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 40,417 ns/iteration, speed vs FLTX 0.02× + +115.2 + +113.0 + +2/2 + +40417 ns + +Inf + +✗ + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 590.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.192533× + +105.6 + +97.3 + +1/1 + +591 ns + +Both + +- + + +qdpp: tgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tgamma +mean: 100.8 bits +p01: 97.4 bits +worst: 96.5 bits +domains: 1/1 +minimum threshold margin: 16.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 100.8, p01 97.4, worst 96.5, required 80.0, margin 16.5, n=4099, seed=10322096095657499368 +benchmark: 1,886 ns/iteration, speed vs FLTX 0.31× + +100.8 + +96.5 + +1/1 + +1886 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::tgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499368 +benchmark: 29,530 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +1/1 + +29530 ns + +No + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 676.5 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.595523× + +107.3 + +102.2 + +1/1 + +677 ns + +Both + +- + + +qdpp: lgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lgamma +mean: 105.1 bits +p01: 100.8 bits +worst: 92.1 bits +domains: 1/1 +minimum threshold margin: 12.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.1, p01 100.8, worst 92.1, required 80.0, margin 12.1, n=4099, seed=10322096095657499371 +benchmark: 2,432 ns/iteration, speed vs FLTX 0.28× + +105.1 + +92.1 + +1/1 + +2432 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::lgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499371 +benchmark: 26,769 ns/iteration, speed vs FLTX 0.03× + +115.0 + +113.0 + +1/1 + +26769 ns + +No + +- + + + + +Comparisons + + + + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.11 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.723554× + += + += + +1/1 + +1.1 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.802 ns/iteration, speed vs FLTX 1.38× + += + += + +1/1 + +0.80 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.49 ns/iteration, speed vs FLTX 0.75× + += + += + +1/1 + +1.5 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.39 ns/iteration, speed vs FLTX 0.25× + += + += + +1/1 + +4.4 ns + +Both + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.11 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.722196× + += + += + +1/1 + +1.1 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.804 ns/iteration, speed vs FLTX 1.38× + += + += + +1/1 + +0.80 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.20 ns/iteration, speed vs FLTX 0.93× + += + += + +1/1 + +1.2 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.39 ns/iteration, speed vs FLTX 0.25× + += + += + +1/1 + +4.4 ns + +Both + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.05 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.73165× + += + += + +1/1 + +2.0 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.50 ns/iteration, speed vs FLTX 1.37× + += + += + +1/1 + +1.5 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.76 ns/iteration, speed vs FLTX 1.16× + += + += + +1/1 + +1.8 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.28 ns/iteration, speed vs FLTX 0.39× + += + += + +1/1 + +5.3 ns + +Both + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.08 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.729187× + += + += + +1/1 + +2.1 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.52 ns/iteration, speed vs FLTX 1.37× + += + += + +1/1 + +1.5 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.78 ns/iteration, speed vs FLTX 1.17× + += + += + +1/1 + +1.8 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.28 ns/iteration, speed vs FLTX 0.39× + += + += + +1/1 + +5.3 ns + +Both + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.07 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.309117× + += + += + +1/1 + +2.1 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.52 ns/iteration, speed vs FLTX 1.36× + += + += + +1/1 + +1.5 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.639 ns/iteration, speed vs FLTX 3.24× + += + += + +1/1 + +0.64 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.27 ns/iteration, speed vs FLTX 0.39× + += + += + +1/1 + +5.3 ns + +Both + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.09 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.715912× + += + += + +1/1 + +2.1 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.49 ns/iteration, speed vs FLTX 1.40× + += + += + +1/1 + +1.5 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.78 ns/iteration, speed vs FLTX 1.17× + += + += + +1/1 + +1.8 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.27 ns/iteration, speed vs FLTX 0.40× + += + += + +1/1 + +5.3 ns + +Both + +- + + + + +Random + + + + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 5.85 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 3.131793× + +- + +- + +- + +5.9 ns + +- + +- + + +qdpp dd_real +API: qdpp ddrand +benchmark: 18.33 ns/iteration, speed vs FLTX 0.32× + +- + +- + +- + +18.3 ns + +- + +- + + +cppdd: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 48.96 ns/iteration (no available competitor) + +- + +- + +- + +49.0 ns + +- + +- + + +qdpp: normal is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 6.10 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.819434× + +- + +- + +- + +6.1 ns + +- + +- + + +qdpp dd_real +API: same expression +benchmark: 5.00 ns/iteration, speed vs FLTX 1.22× + +- + +- + +- + +5.0 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same expression +benchmark: 8.68 ns/iteration, speed vs FLTX 0.70× + +- + +- + +- + +8.7 ns + +- + +- + + +TLFloat Quad +API: same expression +benchmark: 101.1 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +101 ns + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 30.59 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.86596× + +- + +- + +- + +30.6 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 41.96 ns/iteration, speed vs FLTX 0.73× + +- + +- + +- + +42.0 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 26.49 ns/iteration, speed vs FLTX 1.15× + +- + +- + +- + +26.5 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 181.1 ns/iteration, speed vs FLTX 0.17× + +- + +- + +- + +181 ns + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 242.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.299235× + +- + +- + +- + +243 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 315.4 ns/iteration, speed vs FLTX 0.77× + +- + +- + +- + +315 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 934.8 ns/iteration, speed vs FLTX 0.26× + +- + +- + +- + +935 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 2,044 ns/iteration, speed vs FLTX 0.12× + +- + +- + +- + +2044 ns + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 21.33 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.712868× + +- + +- + +- + +21.3 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 15.20 ns/iteration, speed vs FLTX 1.40× + +- + +- + +- + +15.2 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 19.82 ns/iteration, speed vs FLTX 1.08× + +- + +- + +- + +19.8 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 210.2 ns/iteration, speed vs FLTX 0.10× + +- + +- + +- + +210 ns + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 69.31 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.865426× + +- + +- + +- + +69.3 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 59.98 ns/iteration, speed vs FLTX 1.16× + +- + +- + +- + +60.0 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 80.10 ns/iteration, speed vs FLTX 0.87× + +- + +- + +- + +80.1 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 796.4 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +796 ns + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 174.4 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.559478× + +- + +- + +- + +174 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 97.56 ns/iteration, speed vs FLTX 1.79× + +- + +- + +- + +97.6 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 115.8 ns/iteration, speed vs FLTX 1.51× + +- + +- + +- + +116 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 774.8 ns/iteration, speed vs FLTX 0.23× + +- + +- + +- + +775 ns + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 39.89 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.914805× + +- + +- + +- + +39.9 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 48.50 ns/iteration, speed vs FLTX 0.82× + +- + +- + +- + +48.5 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 36.49 ns/iteration, speed vs FLTX 1.09× + +- + +- + +- + +36.5 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 283.0 ns/iteration, speed vs FLTX 0.14× + +- + +- + +- + +283 ns + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 979.9 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.161213× + +- + +- + +- + +980 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 1,138 ns/iteration, speed vs FLTX 0.86× + +- + +- + +- + +1138 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 2,603 ns/iteration, speed vs FLTX 0.38× + +- + +- + +- + +2603 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 8,965 ns/iteration, speed vs FLTX 0.11× + +- + +- + +- + +8965 ns + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 571.4 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.670022× + +- + +- + +- + +571 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 954.2 ns/iteration, speed vs FLTX 0.60× + +- + +- + +- + +954 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 5,944 ns/iteration, speed vs FLTX 0.10× + +- + +- + +- + +5944 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 6,555 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +6555 ns + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f256_fastmath_overview.svg b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f256_fastmath_overview.svg new file mode 100644 index 0000000..0e419fb --- /dev/null +++ b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f256_fastmath_overview.svg @@ -0,0 +1,3020 @@ + + + + +f256 consumer fast-math metrics overview — WebAssembly / wasm32 / Clang (Emscripten) +Accuracy excludes the subnormal domain; support is reported separately. Speed is relative to FLTX. + +operation + + +bl::f256 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + + +Arithmetic + + + + +add + +fltx bl::f256 +API: bl::add +mean: 226.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: No +signed zero: no +subnormal support: yes +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 10.07 ns/iteration (no available competitor) + +226.0 + +215.3 + +1/1 + +10.07 ns + +No + +✗ + +✓ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 226.1 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 1/1 +minimum threshold margin: 25.2 bits +special values: No +signed zero: no +subnormal support: yes +general: mean 226.1, p01 215.6, worst 215.2, required 190.0, margin 25.2, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 10.18 ns/iteration (no available competitor) + +226.1 + +215.2 + +1/1 + +10.18 ns + +No + +✗ + +✓ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 216.3 bits +worst: 215.2 bits +domains: 1/1 +minimum threshold margin: 25.2 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 30.54 ns/iteration (no available competitor) + +220.0 + +215.2 + +1/1 + +30.54 ns + +NaN + +✗ + +✓ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 1/1 +minimum threshold margin: 24.8 bits +special values: No +signed zero: yes +subnormal support: yes +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 219.4, p01 215.4, worst 215.4, required 190.0, margin 25.4, n=55, seed=10322096095657499292 +benchmark: 91.74 ns/iteration (no available competitor) + +219.2 + +214.8 + +1/1 + +91.74 ns + +No + +✓ + +✓ + + + + +IO + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 407.8 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +407.8 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 371.1 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +371.1 ns + +Both + +✓ + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 554.9 ns/iteration (no available competitor) + +219.7 + +212.0 + +2/2 + +554.9 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 0.941 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.941 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 0.941 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.941 ns + +Both + +✓ + +- + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.87 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.87 ns + +Both + +✓ + +- + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 13.43 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +13.43 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 8.16 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +8.16 ns + +NaN + +✓ + +- + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 6.70 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +6.70 ns + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 6.52 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +6.52 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 140.9 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +140.9 ns + +NaN + +✓ + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 211.7 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +211.7 ns + +NaN + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 75.51 ns/iteration (no available competitor) + +244.0 + +217.7 + +3/3 + +75.51 ns + +No + +✓ + +- + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 103.2 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +103.2 ns + +No + +✓ + +- + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 101.8 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +101.8 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.34 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.34 ns + +NaN + +✓ + +✓ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.21 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.21 ns + +NaN + +✓ + +- + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 28.24 ns/iteration (no available competitor) + +229.7 + +215.1 + +3/3 + +28.24 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 89.91 ns/iteration (no available competitor) + +217.9 + +214.6 + +2/2 + +89.91 ns + +NaN + +✗ + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.17 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.17 ns + +No + +✓ + +- + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.17 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.17 ns + +No + +✓ + +- + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 6.05 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +6.05 ns + +No + +✓ + +- + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.693 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.693 ns + +No + +✓ + +- + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 7.56 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +7.56 ns + +NaN + +✓ + +- + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 7.19 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +7.19 ns + +NaN + +✓ + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 7.20 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +7.20 ns + +NaN + +✓ + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.13 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +9.13 ns + +Both + +✓ + +✓ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 13.09 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +13.09 ns + +NaN + +✓ + +- + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.34 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.34 ns + +- + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.26 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.26 ns + +NaN + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 6.83 ns/iteration (no available competitor) + +- + +- + +- + +6.83 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 6.81 ns/iteration (no available competitor) + +- + +- + +- + +6.81 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 23.36 ns/iteration (no available competitor) + +220.1 + +215.3 + +2/2 + +23.36 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.8 bits +p01: 211.3 bits +worst: 209.6 bits +domains: 3/3 +minimum threshold margin: 19.6 bits +special values: NaN +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 218.3, p01 211.2, worst 209.6, required 190.0, margin 19.6, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 118.8 ns/iteration (no available competitor) + +217.8 + +209.6 + +3/3 + +118.8 ns + +NaN + +✓ + +✓ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 214.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 214.9, required 190.0, margin 24.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 351.2 ns/iteration (no available competitor) + +219.3 + +214.9 + +2/2 + +351.2 ns + +NaN + +✓ + +- + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 173.4 ns/iteration (no available competitor) + +229.9 + +213.9 + +2/2 + +173.4 ns + +No + +✓ + +- + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,627 ns/iteration (no available competitor) + +216.8 + +211.1 + +2/2 + +2,627 ns + +No + +✓ + +- + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 109.9 ns/iteration (no available competitor) + +217.2 + +213.7 + +2/2 + +109.9 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.4 bits +p01: 209.8 bits +worst: 209.7 bits +domains: 2/2 +minimum threshold margin: 29.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.4, p01 209.8, worst 209.7, required 180.0, margin 29.7, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 1,041 ns/iteration (no available competitor) + +216.4 + +209.7 + +2/2 + +1,041 ns + +Both + +- + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 883.1 ns/iteration (no available competitor) + +218.0 + +214.2 + +2/2 + +883.1 ns + +Both + +- + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 228.0 bits +p01: 214.9 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: NaN +signed zero: yes +subnormal support: - +cancellation: mean 237.7, p01 215.4, worst 214.5, required 180.0, margin 34.5, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 1,031 ns/iteration (no available competitor) + +228.0 + +213.8 + +2/2 + +1,031 ns + +NaN + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.7 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.1, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.1, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,727 ns/iteration (no available competitor) + +217.7 + +213.3 + +3/3 + +1,727 ns + +Both + +- + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 221.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,756 ns/iteration (no available competitor) + +218.6 + +213.2 + +3/3 + +1,756 ns + +NaN + +- + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 217.5, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,777 ns/iteration (no available competitor) + +217.4 + +213.3 + +3/3 + +1,777 ns + +NaN + +- + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 227.6 bits +p01: 214.8 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: NaN +signed zero: yes +subnormal support: - +cancellation: mean 237.7, p01 215.4, worst 214.3, required 180.0, margin 34.3, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,767 ns/iteration (no available competitor) + +227.6 + +214.0 + +2/2 + +1,767 ns + +NaN + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: NaN +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 851.7 ns/iteration (no available competitor) + +222.3 + +202.9 + +3/3 + +851.7 ns + +NaN + +✓ + +- + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: NaN +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 874.7 ns/iteration (no available competitor) + +226.8 + +208.7 + +3/3 + +874.7 ns + +NaN + +- + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,035 ns/iteration (no available competitor) + +- + +- + +- + +1,035 ns + +- + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: NaN +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,119 ns/iteration (no available competitor) + +217.1 + +202.9 + +3/3 + +1,119 ns + +NaN + +✓ + +- + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: NaN +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,343 ns/iteration (no available competitor) + +217.9 + +214.4 + +2/2 + +1,343 ns + +NaN + +✓ + +- + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,336 ns/iteration (no available competitor) + +216.0 + +192.5 + +2/2 + +1,336 ns + +Both + +- + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 906.1 ns/iteration (no available competitor) + +218.1 + +214.7 + +2/2 + +906.1 ns + +NaN + +✓ + +- + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: No +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 950.7 ns/iteration (no available competitor) + +217.9 + +214.3 + +3/3 + +950.7 ns + +No + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,294 ns/iteration (no available competitor) + +217.0 + +213.8 + +2/2 + +1,294 ns + +NaN + +✓ + +- + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,289 ns/iteration (no available competitor) + +217.5 + +214.2 + +2/2 + +1,289 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,261 ns/iteration (no available competitor) + +219.1 + +214.0 + +2/2 + +1,261 ns + +NaN + +✓ + +- + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,643 ns/iteration (no available competitor) + +217.2 + +213.0 + +2/2 + +2,643 ns + +NaN + +✓ + +- + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,424 ns/iteration (no available competitor) + +217.7 + +213.7 + +2/2 + +2,424 ns + +Both + +- + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: NaN +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,274 ns/iteration (no available competitor) + +218.3 + +213.3 + +2/2 + +2,274 ns + +NaN + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 14,825 ns/iteration (no available competitor) + +208.2 + +189.8 + +2/2 + +14,825 ns + +Both + +- + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 15,770 ns/iteration (no available competitor) + +212.8 + +196.8 + +2/2 + +15,770 ns + +NaN + +✓ + +- + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 11,904 ns/iteration (no available competitor) + +209.0 + +202.5 + +1/1 + +11,904 ns + +NaN + +- + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 11,231 ns/iteration (no available competitor) + +211.9 + +199.2 + +1/1 + +11,231 ns + +NaN + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.780 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.780 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.793 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.793 ns + +Both + +- + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.59 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.59 ns + +Both + +- + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.60 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.60 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.63 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.63 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.60 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.60 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 11.41 ns/iteration (no available competitor) + +- + +- + +- + +11.41 ns + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 265.9 ns/iteration (no available competitor) + +- + +- + +- + +265.9 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 49.11 ns/iteration (no available competitor) + +- + +- + +- + +49.11 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 142.1 ns/iteration (no available competitor) + +- + +- + +- + +142.1 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,800 ns/iteration (no available competitor) + +- + +- + +- + +1,800 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 127.6 ns/iteration (no available competitor) + +- + +- + +- + +127.6 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 560.7 ns/iteration (no available competitor) + +- + +- + +- + +560.7 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 473.3 ns/iteration (no available competitor) + +- + +- + +- + +473.3 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 250.3 ns/iteration (no available competitor) + +- + +- + +- + +250.3 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 9,212 ns/iteration (no available competitor) + +- + +- + +- + +9,212 ns + +- + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,750 ns/iteration (no available competitor) + +- + +- + +- + +4,750 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f256_fastmath_overview_compact.svg b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f256_fastmath_overview_compact.svg new file mode 100644 index 0000000..ce55eae --- /dev/null +++ b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f256_fastmath_overview_compact.svg @@ -0,0 +1,3017 @@ + + + + + +operation + + +bl::f256 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +Subnorm + +avg + +min + +pass + + + +Arithmetic + + + + +add + +fltx bl::f256 +API: bl::add +mean: 226.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: No +signed zero: no +subnormal support: yes +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 10.07 ns/iteration (no available competitor) + +226.0 + +215.3 + +1/1 + +10.1 ns + +No + +✗ + +✓ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 226.1 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 1/1 +minimum threshold margin: 25.2 bits +special values: No +signed zero: no +subnormal support: yes +general: mean 226.1, p01 215.6, worst 215.2, required 190.0, margin 25.2, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 10.18 ns/iteration (no available competitor) + +226.1 + +215.2 + +1/1 + +10.2 ns + +No + +✗ + +✓ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 216.3 bits +worst: 215.2 bits +domains: 1/1 +minimum threshold margin: 25.2 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 30.54 ns/iteration (no available competitor) + +220.0 + +215.2 + +1/1 + +30.5 ns + +NaN + +✗ + +✓ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 1/1 +minimum threshold margin: 24.8 bits +special values: No +signed zero: yes +subnormal support: yes +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 219.4, p01 215.4, worst 215.4, required 190.0, margin 25.4, n=55, seed=10322096095657499292 +benchmark: 91.74 ns/iteration (no available competitor) + +219.2 + +214.8 + +1/1 + +91.7 ns + +No + +✓ + +✓ + + + + +IO + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 407.8 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +408 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 371.1 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +371 ns + +Both + +✓ + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 554.9 ns/iteration (no available competitor) + +219.7 + +212.0 + +2/2 + +555 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 0.941 ns/iteration (no available competitor) + += + += + +1/1 + +0.94 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 0.941 ns/iteration (no available competitor) + += + += + +1/1 + +0.94 ns + +Both + +✓ + +- + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.87 ns/iteration (no available competitor) + += + += + +1/1 + +2.9 ns + +Both + +✓ + +- + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 13.43 ns/iteration (no available competitor) + += + += + +1/1 + +13.4 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 8.16 ns/iteration (no available competitor) + += + += + +1/1 + +8.2 ns + +NaN + +✓ + +- + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 6.70 ns/iteration (no available competitor) + += + += + +1/1 + +6.7 ns + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 6.52 ns/iteration (no available competitor) + += + += + +1/1 + +6.5 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 140.9 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +141 ns + +NaN + +✓ + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 211.7 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +212 ns + +NaN + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 75.51 ns/iteration (no available competitor) + +244.0 + +217.7 + +3/3 + +75.5 ns + +No + +✓ + +- + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 103.2 ns/iteration (no available competitor) + += + += + +1/1 + +103 ns + +No + +✓ + +- + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 101.8 ns/iteration (no available competitor) + += + += + +1/1 + +102 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.34 ns/iteration (no available competitor) + += + += + +1/1 + +3.3 ns + +NaN + +✓ + +✓ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.21 ns/iteration (no available competitor) + += + += + +1/1 + +3.2 ns + +NaN + +✓ + +- + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 28.24 ns/iteration (no available competitor) + +229.7 + +215.1 + +3/3 + +28.2 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 89.91 ns/iteration (no available competitor) + +217.9 + +214.6 + +2/2 + +89.9 ns + +NaN + +✗ + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.17 ns/iteration (no available competitor) + += + += + +2/2 + +1.2 ns + +No + +✓ + +- + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.17 ns/iteration (no available competitor) + += + += + +2/2 + +1.2 ns + +No + +✓ + +- + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 6.05 ns/iteration (no available competitor) + += + += + +2/2 + +6.0 ns + +No + +✓ + +- + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.693 ns/iteration (no available competitor) + += + += + +1/1 + +0.69 ns + +No + +✓ + +- + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 7.56 ns/iteration (no available competitor) + += + += + +1/1 + +7.6 ns + +NaN + +✓ + +- + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 7.19 ns/iteration (no available competitor) + += + += + +1/1 + +7.2 ns + +NaN + +✓ + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 7.20 ns/iteration (no available competitor) + += + += + +1/1 + +7.2 ns + +NaN + +✓ + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.13 ns/iteration (no available competitor) + += + += + +1/1 + +9.1 ns + +Both + +✓ + +✓ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 13.09 ns/iteration (no available competitor) + += + += + +2/2 + +13.1 ns + +NaN + +✓ + +- + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.34 ns/iteration (no available competitor) + += + += + +2/2 + +1.3 ns + +- + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.26 ns/iteration (no available competitor) + += + += + +2/2 + +1.3 ns + +NaN + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 6.83 ns/iteration (no available competitor) + +- + +- + +- + +6.8 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 6.81 ns/iteration (no available competitor) + +- + +- + +- + +6.8 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 23.36 ns/iteration (no available competitor) + +220.1 + +215.3 + +2/2 + +23.4 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.8 bits +p01: 211.3 bits +worst: 209.6 bits +domains: 3/3 +minimum threshold margin: 19.6 bits +special values: NaN +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 218.3, p01 211.2, worst 209.6, required 190.0, margin 19.6, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 118.8 ns/iteration (no available competitor) + +217.8 + +209.6 + +3/3 + +119 ns + +NaN + +✓ + +✓ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 214.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 214.9, required 190.0, margin 24.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 351.2 ns/iteration (no available competitor) + +219.3 + +214.9 + +2/2 + +351 ns + +NaN + +✓ + +- + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 173.4 ns/iteration (no available competitor) + +229.9 + +213.9 + +2/2 + +173 ns + +No + +✓ + +- + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,627 ns/iteration (no available competitor) + +216.8 + +211.1 + +2/2 + +2627 ns + +No + +✓ + +- + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 109.9 ns/iteration (no available competitor) + +217.2 + +213.7 + +2/2 + +110 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.4 bits +p01: 209.8 bits +worst: 209.7 bits +domains: 2/2 +minimum threshold margin: 29.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.4, p01 209.8, worst 209.7, required 180.0, margin 29.7, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 1,041 ns/iteration (no available competitor) + +216.4 + +209.7 + +2/2 + +1041 ns + +Both + +- + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 883.1 ns/iteration (no available competitor) + +218.0 + +214.2 + +2/2 + +883 ns + +Both + +- + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 228.0 bits +p01: 214.9 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: NaN +signed zero: yes +subnormal support: - +cancellation: mean 237.7, p01 215.4, worst 214.5, required 180.0, margin 34.5, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 1,031 ns/iteration (no available competitor) + +228.0 + +213.8 + +2/2 + +1031 ns + +NaN + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.7 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.1, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.1, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,727 ns/iteration (no available competitor) + +217.7 + +213.3 + +3/3 + +1727 ns + +Both + +- + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 221.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,756 ns/iteration (no available competitor) + +218.6 + +213.2 + +3/3 + +1756 ns + +NaN + +- + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 217.5, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,777 ns/iteration (no available competitor) + +217.4 + +213.3 + +3/3 + +1777 ns + +NaN + +- + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 227.6 bits +p01: 214.8 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: NaN +signed zero: yes +subnormal support: - +cancellation: mean 237.7, p01 215.4, worst 214.3, required 180.0, margin 34.3, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,767 ns/iteration (no available competitor) + +227.6 + +214.0 + +2/2 + +1767 ns + +NaN + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: NaN +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 851.7 ns/iteration (no available competitor) + +222.3 + +202.9 + +3/3 + +852 ns + +NaN + +✓ + +- + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: NaN +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 874.7 ns/iteration (no available competitor) + +226.8 + +208.7 + +3/3 + +875 ns + +NaN + +- + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,035 ns/iteration (no available competitor) + +- + +- + +- + +1035 ns + +- + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: NaN +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,119 ns/iteration (no available competitor) + +217.1 + +202.9 + +3/3 + +1119 ns + +NaN + +✓ + +- + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: NaN +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,343 ns/iteration (no available competitor) + +217.9 + +214.4 + +2/2 + +1343 ns + +NaN + +✓ + +- + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,336 ns/iteration (no available competitor) + +216.0 + +192.5 + +2/2 + +1336 ns + +Both + +- + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 906.1 ns/iteration (no available competitor) + +218.1 + +214.7 + +2/2 + +906 ns + +NaN + +✓ + +- + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: No +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 950.7 ns/iteration (no available competitor) + +217.9 + +214.3 + +3/3 + +951 ns + +No + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,294 ns/iteration (no available competitor) + +217.0 + +213.8 + +2/2 + +1294 ns + +NaN + +✓ + +- + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,289 ns/iteration (no available competitor) + +217.5 + +214.2 + +2/2 + +1289 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,261 ns/iteration (no available competitor) + +219.1 + +214.0 + +2/2 + +1261 ns + +NaN + +✓ + +- + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,643 ns/iteration (no available competitor) + +217.2 + +213.0 + +2/2 + +2643 ns + +NaN + +✓ + +- + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,424 ns/iteration (no available competitor) + +217.7 + +213.7 + +2/2 + +2424 ns + +Both + +- + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: NaN +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,274 ns/iteration (no available competitor) + +218.3 + +213.3 + +2/2 + +2274 ns + +NaN + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 14,825 ns/iteration (no available competitor) + +208.2 + +189.8 + +2/2 + +14825 ns + +Both + +- + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 15,770 ns/iteration (no available competitor) + +212.8 + +196.8 + +2/2 + +15770 ns + +NaN + +✓ + +- + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 11,904 ns/iteration (no available competitor) + +209.0 + +202.5 + +1/1 + +11904 ns + +NaN + +- + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 11,231 ns/iteration (no available competitor) + +211.9 + +199.2 + +1/1 + +11231 ns + +NaN + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.780 ns/iteration (no available competitor) + += + += + +1/1 + +0.78 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.793 ns/iteration (no available competitor) + += + += + +1/1 + +0.79 ns + +Both + +- + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.59 ns/iteration (no available competitor) + += + += + +1/1 + +1.6 ns + +Both + +- + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.60 ns/iteration (no available competitor) + += + += + +1/1 + +1.6 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.63 ns/iteration (no available competitor) + += + += + +1/1 + +1.6 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.60 ns/iteration (no available competitor) + += + += + +1/1 + +1.6 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 11.41 ns/iteration (no available competitor) + +- + +- + +- + +11.4 ns + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 265.9 ns/iteration (no available competitor) + +- + +- + +- + +266 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 49.11 ns/iteration (no available competitor) + +- + +- + +- + +49.1 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 142.1 ns/iteration (no available competitor) + +- + +- + +- + +142 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,800 ns/iteration (no available competitor) + +- + +- + +- + +1800 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 127.6 ns/iteration (no available competitor) + +- + +- + +- + +128 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 560.7 ns/iteration (no available competitor) + +- + +- + +- + +561 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 473.3 ns/iteration (no available competitor) + +- + +- + +- + +473 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 250.3 ns/iteration (no available competitor) + +- + +- + +- + +250 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 9,212 ns/iteration (no available competitor) + +- + +- + +- + +9212 ns + +- + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,750 ns/iteration (no available competitor) + +- + +- + +- + +4750 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f256_overview.svg b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f256_overview.svg new file mode 100644 index 0000000..5ac9d02 --- /dev/null +++ b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f256_overview.svg @@ -0,0 +1,9395 @@ + + + + +f256 metrics overview — WebAssembly / wasm32 / Clang (Emscripten) +Accuracy is MPFR-relative; domain pass counts use FLTX release thresholds; speed is implementation ÷ FLTX. + +operation + + +bl::f256 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time + + + +qdpp (qd_real) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +mpfr_float_backend<64> + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +TLFloat (tloct) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +Arithmetic + + + + + + + +add + +fltx bl::f256 +API: bl::add +mean: 227.4 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 10.16 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.252336× + +227.4 + +215.3 + +2/2 + +10.16 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp operator+ +mean: 227.4 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 22.87 ns/iteration, speed vs FLTX 0.44× + +227.4 + +215.3 + +2/2 + +22.87 ns · 0.44× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator+ +mean: 225.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.3, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3770, seed=10322096095657499292 +subnormal: mean 245.4, p01 215.5, worst 214.9, required 190.0, margin 24.9, n=326, seed=10322096095657499292 +benchmark: 94.70 ns/iteration, speed vs FLTX 0.11× + +225.0 + +214.0 + +2/2 + +94.70 ns · 0.11× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator+ +mean: 253.1 bits +p01: 237.3 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 251.8, p01 237.3, worst 237.0, required 190.0, margin 47.0, n=3770, seed=10322096095657499292 +subnormal: mean 268.5, p01 239.2, worst 237.9, required 190.0, margin 47.9, n=326, seed=10322096095657499292 +benchmark: 59.77 ns/iteration, speed vs FLTX 0.17× + +253.1 + +237.0 + +2/2 + +59.77 ns · 0.17× + +No + +✗ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 227.4 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.1, p01 215.6, worst 215.2, required 190.0, margin 25.2, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 10.07 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.357733× + +227.4 + +215.2 + +2/2 + +10.07 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp operator- +mean: 227.4 bits +p01: 215.6 bits +worst: 215.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 226.1, p01 215.6, worst 215.0, required 190.0, margin 25.0, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 23.74 ns/iteration, speed vs FLTX 0.42× + +227.4 + +215.0 + +2/2 + +23.74 ns · 0.42× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator- +mean: 225.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.5, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3791, seed=10322096095657499292 +subnormal: mean 245.9, p01 246.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 101.4 ns/iteration, speed vs FLTX 0.10× + +225.2 + +214.0 + +2/2 + +101.4 ns · 0.10× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator- +mean: 253.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 252.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=3791, seed=10322096095657499292 +subnormal: mean 268.9, p01 269.0, worst 237.7, required 190.0, margin 47.7, n=305, seed=10322096095657499292 +benchmark: 60.05 ns/iteration, speed vs FLTX 0.17× + +253.3 + +237.0 + +2/2 + +60.05 ns · 0.17× + +No + +✗ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 24.86 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.255469× + +220.0 + +215.2 + +2/2 + +24.86 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp operator* +mean: 220.0 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 31.21 ns/iteration, speed vs FLTX 0.80× + +220.0 + +215.2 + +2/2 + +31.21 ns · 0.80× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator* +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4000, seed=10322096095657499292 +subnormal: mean 217.3, p01 214.3, worst 214.3, required 190.0, margin 24.3, n=100, seed=10322096095657499292 +benchmark: 187.5 ns/iteration, speed vs FLTX 0.13× + +216.0 + +214.0 + +2/2 + +187.5 ns · 0.13× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator* +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4000, seed=10322096095657499292 +subnormal: mean 240.2, p01 237.1, worst 237.1, required 190.0, margin 47.1, n=100, seed=10322096095657499292 +benchmark: 111.0 ns/iteration, speed vs FLTX 0.22× + +239.0 + +237.0 + +2/2 + +111.0 ns · 0.22× + +No + +✗ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 2/2 +minimum threshold margin: 24.8 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 219.4, p01 215.4, worst 215.4, required 190.0, margin 25.4, n=55, seed=10322096095657499292 +benchmark: 91.46 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.558996× + +219.2 + +214.8 + +2/2 + +91.46 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp operator/ +mean: 218.7 bits +p01: 172.2 bits +worst: 172.2 bits +domains: 1/2 +minimum threshold margin: -17.8 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 219.2, p01 214.8, worst 214.0, required 190.0, margin 24.0, n=4045, seed=10322096095657499292 +subnormal: mean 179.1, p01 172.2, worst 172.2, required 190.0, margin -17.8, n=55, seed=10322096095657499292 +benchmark: 234.0 ns/iteration, speed vs FLTX 0.39× + +218.7 + +172.2 + +1/2 + +234.0 ns · 0.39× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator/ +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4045, seed=10322096095657499292 +subnormal: mean 218.2, p01 214.2, worst 214.2, required 190.0, margin 24.2, n=55, seed=10322096095657499292 +benchmark: 241.7 ns/iteration, speed vs FLTX 0.38× + +216.0 + +214.0 + +2/2 + +241.7 ns · 0.38× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator/ +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4045, seed=10322096095657499292 +subnormal: mean 241.4, p01 237.2, worst 237.2, required 190.0, margin 47.2, n=55, seed=10322096095657499292 +benchmark: 261.6 ns/iteration, speed vs FLTX 0.35× + +239.0 + +237.0 + +2/2 + +261.6 ns · 0.35× + +No + +✗ + + + + +IO + + + + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 452.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.345841× + +220.4 + +217.0 + +2/2 + +452.2 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp to_string +mean: 218.8 bits +p01: 211.0 bits +worst: 208.7 bits +domains: 2/2 +minimum threshold margin: 18.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 211.0, worst 208.7, required 190.0, margin 18.7, n=4096, seed=10322096095657499357 +benchmark: 5,032 ns/iteration, speed vs FLTX 0.09× + +218.8 + +208.7 + +2/2 + +5,032 ns · 0.09× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost number::str +mean: 220.3 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.2, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 1,061 ns/iteration, speed vs FLTX 0.43× + +220.3 + +217.0 + +2/2 + +1,061 ns · 0.43× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::to_string +mean: 216.9 bits +p01: 214.0 bits +worst: 213.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.1, p01 214.1, worst 213.6, required 190.0, margin 23.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 216.7, p01 214.0, worst 213.6, required 190.0, margin 23.6, n=4096, seed=10322096095657499357 +benchmark: 13,338 ns/iteration, speed vs FLTX 0.03× + +216.9 + +213.6 + +2/2 + +13,338 ns · 0.03× + +Both + +✓ + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 398.9 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 12.51055× + +220.4 + +217.0 + +2/2 + +398.9 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp write +mean: 218.8 bits +p01: 211.0 bits +worst: 208.7 bits +domains: 2/2 +minimum threshold margin: 18.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 211.0, worst 208.7, required 190.0, margin 18.7, n=4096, seed=10322096095657499357 +benchmark: 4,990 ns/iteration, speed vs FLTX 0.08× + +218.8 + +208.7 + +2/2 + +4,990 ns · 0.08× + +Both + +✗ + + +mpfr64: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 458.3 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.333944× + +219.7 + +212.0 + +2/2 + +458.3 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp read +mean: 200.9 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -212.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 213.4, worst 212.6, required 212.0, margin 0.6, n=4097, seed=10322096095657499311 +wide_exponent: mean 185.9, p01 0.0, worst 0.0, required 212.0, margin -212.0, n=4098, seed=10322096095657499308 +benchmark: 3,160 ns/iteration, speed vs FLTX 0.15× + +200.9 + +0.0 + +1/2 + +3,160 ns · 0.15× + +NaN + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost string constructor +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 2.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4098, seed=10322096095657499308 +benchmark: 611.4 ns/iteration, speed vs FLTX 0.75× + +216.0 + +214.0 + +2/2 + +611.4 ns · 0.75× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat string constructor +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 212.0, margin 25.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 238.9, p01 237.2, worst 237.1, required 212.0, margin 25.1, n=4098, seed=10322096095657499308 +benchmark: 10,554 ns/iteration, speed vs FLTX 0.04× + +238.9 + +237.0 + +2/2 + +10,554 ns · 0.04× + +No + +✗ + + + + +Rounding + + + + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 0.991 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.996663× + +exact + +exact + +1/1 + +0.991 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 0.988 ns/iteration, speed vs FLTX 1.00× + +exact + +exact + +1/1 + +0.988 ns · 1.00× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 62.89 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +1/1 + +62.89 ns · 0.02× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 7.01 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +7.01 ns · 0.14× + +No + +✗ + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 0.993 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.992657× + +exact + +exact + +1/1 + +0.993 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 0.986 ns/iteration, speed vs FLTX 1.01× + +exact + +exact + +1/1 + +0.986 ns · 1.01× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 63.43 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +1/1 + +63.43 ns · 0.02× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 7.01 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +7.01 ns · 0.14× + +No + +✗ + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.90 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.878158× + +exact + +exact + +1/1 + +2.90 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp aint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.55 ns/iteration, speed vs FLTX 1.14× + +exact + +exact + +1/1 + +2.55 ns · 1.14× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 63.57 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +1/1 + +63.57 ns · 0.05× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 6.19 ns/iteration, speed vs FLTX 0.47× + +exact + +exact + +1/1 + +6.19 ns · 0.47× + +No + +✗ + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 12.18 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.704998× + +exact + +exact + +1/1 + +12.18 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp round +mean: 229.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/1 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 229.7, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4110, seed=10322096095657499382 +benchmark: 8.59 ns/iteration, speed vs FLTX 1.42× + +229.7 + +0.0 + +0/1 + +8.59 ns · 1.42× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 158.0 ns/iteration, speed vs FLTX 0.08× + +exact + +exact + +1/1 + +158.0 ns · 0.08× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 12.13 ns/iteration, speed vs FLTX 1.00× + +exact + +exact + +1/1 + +12.13 ns · 1.00× + +No + +✗ + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 8.06 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 2.267137× + +exact + +exact + +1/1 + +8.06 ns + +Both + +✓ + + +qdpp: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 18.28 ns/iteration, speed vs FLTX 0.44× + +exact + +exact + +1/1 + +18.28 ns · 0.44× + +No + +✗ + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 6.63 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 28.823817× + +exact + +exact + +1/1 + +6.63 ns + +- + +- + + +qdpp: lround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 191.1 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +191.1 ns · 0.03× + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 6.50 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 49.312303× + +exact + +exact + +1/1 + +6.50 ns + +- + +- + + +qdpp: llround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 320.6 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +1/1 + +320.6 ns · 0.02× + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 145.7 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +145.7 ns + +Both + +✓ + + +qdpp: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 208.0 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +208.0 ns + +Both + +✓ + + +qdpp: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 77.97 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.808762× + +244.0 + +217.7 + +3/3 + +77.97 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp fmod +mean: 199.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -190.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 242.3, p01 211.1, worst 205.5, required 190.0, margin 15.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 123.2, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4, seed=10322096095657499383 +wide_exponent: mean 157.4, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4096, seed=10322096095657499357 +benchmark: 315.8 ns/iteration, speed vs FLTX 0.25× + +199.8 + +0.0 + +1/3 + +315.8 ns · 0.25× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 219.0 ns/iteration, speed vs FLTX 0.36× + +exact + +exact + +3/3 + +219.0 ns · 0.36× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 609.6 ns/iteration, speed vs FLTX 0.13× + +exact + +exact + +3/3 + +609.6 ns · 0.13× + +No + +✗ + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 105.6 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.380434× + +exact + +exact + +1/1 + +105.6 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp drem +mean: 241.9 bits +p01: 210.4 bits +worst: 205.5 bits +domains: 1/1 +minimum threshold margin: 15.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 241.9, p01 210.4, worst 205.5, required 190.0, margin 15.5, n=4099, seed=10322096095657499356 +benchmark: 321.3 ns/iteration, speed vs FLTX 0.33× + +241.9 + +205.5 + +1/1 + +321.3 ns · 0.33× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 251.4 ns/iteration, speed vs FLTX 0.42× + +exact + +exact + +1/1 + +251.4 ns · 0.42× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 644.9 ns/iteration, speed vs FLTX 0.16× + +exact + +exact + +1/1 + +644.9 ns · 0.16× + +No + +✗ + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 104.4 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 3.094425× + +exact + +exact + +1/1 + +104.4 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp divrem +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 322.9 ns/iteration, speed vs FLTX 0.32× + +exact + +exact + +1/1 + +322.9 ns · 0.32× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 342.2 ns/iteration, speed vs FLTX 0.30× + +exact + +exact + +1/1 + +342.2 ns · 0.30× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 652.3 ns/iteration, speed vs FLTX 0.16× + +exact + +exact + +1/1 + +652.3 ns · 0.16× + +No + +✗ + + + + +Float Utils + + + + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.21 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.007802× + +exact + +exact + +2/2 + +3.21 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.24 ns/iteration, speed vs FLTX 0.99× + +exact + +exact + +2/2 + +3.24 ns · 0.99× + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 67.89 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +2/2 + +67.89 ns · 0.05× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.20 ns/iteration, speed vs FLTX 0.62× + +exact + +exact + +2/2 + +5.20 ns · 0.62× + +No + +✓ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.09 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.015477× + +exact + +exact + +1/1 + +3.09 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.14 ns/iteration, speed vs FLTX 0.98× + +exact + +exact + +1/1 + +3.14 ns · 0.98× + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 67.73 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +1/1 + +67.73 ns · 0.05× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 5.20 ns/iteration, speed vs FLTX 0.60× + +exact + +exact + +1/1 + +5.20 ns · 0.60× + +No + +✓ + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 31.48 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 4.601902× + +229.7 + +215.1 + +3/3 + +31.48 ns + +Both + +✗ + + +qdpp: fma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fma +mean: 228.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 222.8, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 215.0 ns/iteration, speed vs FLTX 0.15× + +228.3 + +214.0 + +3/3 + +215.0 ns · 0.15× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fma +mean: 251.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 245.2, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 144.9 ns/iteration, speed vs FLTX 0.22× + +251.1 + +237.0 + +3/3 + +144.9 ns · 0.22× + +No + +✗ + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 87.69 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.637056× + +217.9 + +214.6 + +2/2 + +87.69 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp inv +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 231.3 ns/iteration, speed vs FLTX 0.38× + +217.9 + +214.6 + +2/2 + +231.3 ns · 0.38× + +NaN + +✗ + + +mpfr64: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.17 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.840004× + +exact + +exact + +2/2 + +1.17 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp min +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.31 ns/iteration, speed vs FLTX 0.35× + +exact + +exact + +2/2 + +3.31 ns · 0.35× + +Inf + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 76.49 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +2/2 + +76.49 ns · 0.02× + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 13.57 ns/iteration, speed vs FLTX 0.09× + +exact + +exact + +2/2 + +13.57 ns · 0.09× + +No + +✗ + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.18 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.306226× + +exact + +exact + +2/2 + +1.18 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp max +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.54 ns/iteration, speed vs FLTX 0.77× + +exact + +exact + +2/2 + +1.54 ns · 0.77× + +Inf + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 75.72 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +2/2 + +75.72 ns · 0.02× + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 12.20 ns/iteration, speed vs FLTX 0.10× + +exact + +exact + +2/2 + +12.20 ns · 0.10× + +No + +✗ + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 7.06 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 8.199107× + +exact + +exact + +2/2 + +7.06 ns + +Both + +✓ + + +qdpp: fdim is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fdim +mean: 243.7 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 241.3, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +benchmark: 71.80 ns/iteration, speed vs FLTX 0.10× + +243.7 + +214.0 + +2/2 + +71.80 ns · 0.10× + +No + +✓ + + +TLFloat Octuple +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 57.90 ns/iteration, speed vs FLTX 0.12× + +exact + +exact + +2/2 + +57.90 ns · 0.12× + +No + +✓ + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.698 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 12.522131× + +exact + +exact + +1/1 + +0.698 ns + +Both + +✓ + + +qdpp: copysign is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 73.61 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +73.61 ns · 0.01× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 8.74 ns/iteration, speed vs FLTX 0.08× + +exact + +exact + +1/1 + +8.74 ns · 0.08× + +No + +✗ + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.94 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.328465× + +exact + +exact + +1/1 + +2.94 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.91 ns/iteration, speed vs FLTX 0.75× + +exact + +exact + +1/1 + +3.91 ns · 0.75× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 55.81 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +1/1 + +55.81 ns · 0.05× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 38.28 ns/iteration, speed vs FLTX 0.08× + +exact + +exact + +1/1 + +38.28 ns · 0.08× + +No + +✗ + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.96 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.321773× + +exact + +exact + +1/1 + +2.96 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.91 ns/iteration, speed vs FLTX 0.76× + +exact + +exact + +1/1 + +3.91 ns · 0.76× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 55.82 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +1/1 + +55.82 ns · 0.05× + +Both + +✓ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.97 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.320914× + +exact + +exact + +1/1 + +2.97 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.92 ns/iteration, speed vs FLTX 0.76× + +exact + +exact + +1/1 + +3.92 ns · 0.76× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 57.73 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +1/1 + +57.73 ns · 0.05× + +Both + +✓ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 12.41 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.506796× + +exact + +exact + +2/2 + +12.41 ns + +Both + +✓ + + +qdpp: frexp is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 110.2 ns/iteration, speed vs FLTX 0.11× + +exact + +exact + +2/2 + +110.2 ns · 0.11× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 43.50 ns/iteration, speed vs FLTX 0.29× + +exact + +exact + +2/2 + +43.50 ns · 0.29× + +No + +✗ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 13.86 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 5.138977× + +exact + +exact + +2/2 + +13.86 ns + +Both + +✓ + + +qdpp: modf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 301.0 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +2/2 + +301.0 ns · 0.05× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 71.25 ns/iteration, speed vs FLTX 0.19× + +exact + +exact + +2/2 + +71.25 ns · 0.19× + +No + +✗ + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.34 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 0.803263× + +exact + +exact + +2/2 + +1.34 ns + +- + +- + + +qdpp: ilogb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 41.47 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +2/2 + +41.47 ns · 0.03× + +- + +- + + +TLFloat Octuple +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.08 ns/iteration, speed vs FLTX 1.24× + +exact + +exact + +2/2 + +1.08 ns · 1.24× + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.26 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 98.196234× + +exact + +exact + +2/2 + +1.26 ns + +Both + +- + + +qdpp: logb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 123.5 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +2/2 + +123.5 ns · 0.01× + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 6.70 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 2.703484× + +- + +- + +- + +6.70 ns + +- + +- + + +qdpp: nextafter is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter +benchmark: 817.6 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +817.6 ns · 0.01× + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter +benchmark: 18.11 ns/iteration, speed vs FLTX 0.37× + +- + +- + +- + +18.11 ns · 0.37× + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 6.70 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 2.715208× + +- + +- + +- + +6.70 ns + +- + +- + + +qdpp: nexttoward is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter (same type) +benchmark: 814.1 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +814.1 ns · 0.01× + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter (same type) +benchmark: 18.18 ns/iteration, speed vs FLTX 0.37× + +- + +- + +- + +18.18 ns · 0.37× + +- + +- + + + + +Roots & powers + + + + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 22.54 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.65053× + +220.1 + +215.3 + +2/2 + +22.54 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sqr +mean: 216.7 bits +p01: 215.0 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 24.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.8, p01 215.0, worst 214.7, required 190.0, margin 24.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 216.7, p01 215.1, worst 214.8, required 190.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 14.67 ns/iteration, speed vs FLTX 1.54× + +216.7 + +214.7 + +2/2 + +14.67 ns · 1.54× + +Both + +✓ + + +mpfr64: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.9 bits +p01: 211.2 bits +worst: 209.6 bits +domains: 4/4 +minimum threshold margin: 19.6 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 218.3, p01 211.2, worst 209.6, required 190.0, margin 19.6, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 119.5 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.347687× + +217.9 + +209.6 + +4/4 + +119.5 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sqrt +mean: 151.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/4 +minimum threshold margin: -190.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 164.0, p01 54.6, worst 53.6, required 190.0, margin -136.4, n=4096, seed=10322096095657499354 +near_one: mean 217.6, p01 214.0, worst 212.6, required 190.0, margin 22.6, n=4099, seed=10322096095657499359 +subnormal: mean 8.7, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 216.9, p01 187.0, worst 174.8, required 190.0, margin -15.2, n=4096, seed=10322096095657499357 +benchmark: 441.8 ns/iteration, speed vs FLTX 0.27× + +151.8 + +0.0 + +1/4 + +441.8 ns · 0.27× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sqrt +mean: 216.2 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 4/4 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 216.2, p01 214.4, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499359 +subnormal: mean 216.7, p01 214.2, worst 214.1, required 190.0, margin 24.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 280.6 ns/iteration, speed vs FLTX 0.43× + +216.2 + +214.0 + +4/4 + +280.6 ns · 0.43× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sqrt +mean: 239.2 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 4/4 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 239.0, p01 237.4, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499359 +subnormal: mean 239.7, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 239.0, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 557.1 ns/iteration, speed vs FLTX 0.21× + +239.2 + +237.0 + +4/4 + +557.1 ns · 0.21× + +No + +✗ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 214.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 214.9, required 190.0, margin 24.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 351.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.181858× + +219.3 + +214.9 + +2/2 + +351.2 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp nroot +mean: 217.2 bits +p01: 193.1 bits +worst: 176.0 bits +domains: 1/2 +minimum threshold margin: -14.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.4, p01 213.9, worst 213.0, required 190.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.0, p01 193.1, worst 176.0, required 190.0, margin -14.0, n=4096, seed=10322096095657499357 +benchmark: 1,144 ns/iteration, speed vs FLTX 0.31× + +217.2 + +176.0 + +1/2 + +1,144 ns · 0.31× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cbrt +mean: 216.0 bits +p01: 214.2 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.1, p01 214.3, worst 214.1, required 190.0, margin 24.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.1, required 190.0, margin 24.1, n=4096, seed=10322096095657499357 +benchmark: 766.3 ns/iteration, speed vs FLTX 0.46× + +216.0 + +214.1 + +2/2 + +766.3 ns · 0.46× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::cbrt +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 239.2, p01 237.3, worst 237.1, required 190.0, margin 47.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499357 +benchmark: 3,253 ns/iteration, speed vs FLTX 0.11× + +239.0 + +237.0 + +2/2 + +3,253 ns · 0.11× + +No + +✗ + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 172.0 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 4.454428× + +229.9 + +213.9 + +2/2 + +172.0 ns + +Both + +✓ + + +qdpp: hypot is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::hypot +mean: 228.7 bits +p01: 213.2 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 215.3, p01 213.2, worst 212.9, required 190.0, margin 22.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 242.0, p01 213.6, worst 212.9, required 190.0, margin 22.9, n=4096, seed=10322096095657499357 +benchmark: 1,249 ns/iteration, speed vs FLTX 0.14× + +228.7 + +212.9 + +2/2 + +1,249 ns · 0.14× + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::hypot +mean: 251.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 239.0, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 264.8, p01 237.6, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 766.0 ns/iteration, speed vs FLTX 0.22× + +251.9 + +237.0 + +2/2 + +766.0 ns · 0.22× + +No + +✓ + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,690 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.745029× + +216.8 + +211.1 + +2/2 + +2,690 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp pow +mean: 216.4 bits +p01: 211.7 bits +worst: 210.6 bits +domains: 2/2 +minimum threshold margin: 30.6 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 215.1, p01 211.7, worst 210.6, required 180.0, margin 30.6, n=4099, seed=10322096095657499356 +near_one: mean 217.6, p01 214.5, worst 213.9, required 180.0, margin 33.9, n=4099, seed=10322096095657499359 +benchmark: 7,474 ns/iteration, speed vs FLTX 0.36× + +216.4 + +210.6 + +2/2 + +7,474 ns · 0.36× + +No + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 7,384 ns/iteration, speed vs FLTX 0.36× + +215.9 + +214.0 + +2/2 + +7,384 ns · 0.36× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::pow +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 34,717 ns/iteration, speed vs FLTX 0.08× + +238.9 + +237.0 + +2/2 + +34,717 ns · 0.08× + +No + +✗ + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 109.8 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.244324× + +217.2 + +213.7 + +2/2 + +109.8 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp npwr +mean: 215.0 bits +p01: 212.8 bits +worst: 212.1 bits +domains: 2/2 +minimum threshold margin: 22.1 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 215.1, p01 212.8, worst 212.1, required 190.0, margin 22.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.0, p01 212.8, worst 212.1, required 190.0, margin 22.1, n=4096, seed=10322096095657499357 +benchmark: 136.7 ns/iteration, speed vs FLTX 0.80× + +215.0 + +212.1 + +2/2 + +136.7 ns · 0.80× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow(value, int) +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 563.8 ns/iteration, speed vs FLTX 0.19× + +216.0 + +214.0 + +2/2 + +563.8 ns · 0.19× + +Both + +✓ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.7 bits +p01: 210.0 bits +worst: 208.9 bits +domains: 2/2 +minimum threshold margin: 28.9 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 210.0, worst 208.9, required 180.0, margin 28.9, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 1,031 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.143162× + +216.7 + +208.9 + +2/2 + +1,031 ns + +Both + +- + + +qdpp qd_real +API: qdpp exp +mean: 216.6 bits +p01: 210.0 bits +worst: 209.1 bits +domains: 2/2 +minimum threshold margin: 29.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 210.0, worst 209.1, required 180.0, margin 29.1, n=4099, seed=10322096095657499291 +moderate: mean 217.2, p01 214.7, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 2,210 ns/iteration, speed vs FLTX 0.47× + +216.6 + +209.1 + +2/2 + +2,210 ns · 0.47× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 3,163 ns/iteration, speed vs FLTX 0.33× + +215.9 + +214.0 + +2/2 + +3,163 ns · 0.33× + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 4,394 ns/iteration, speed vs FLTX 0.23× + +239.0 + +237.0 + +2/2 + +4,394 ns · 0.23× + +No + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 873.7 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 4.134421× + +218.0 + +214.2 + +2/2 + +873.7 ns + +Both + +- + + +qdpp: exp2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp2 +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 3,612 ns/iteration, speed vs FLTX 0.24× + +216.0 + +214.0 + +2/2 + +3,612 ns · 0.24× + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp2 +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +benchmark: 16,602 ns/iteration, speed vs FLTX 0.05× + +238.9 + +237.0 + +2/2 + +16,602 ns · 0.05× + +No + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 227.2 bits +p01: 207.5 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.0, p01 207.5, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 1,033 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.117347× + +227.2 + +207.0 + +2/2 + +1,033 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp expm1 +mean: 226.8 bits +p01: 203.4 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 235.5, p01 203.4, worst 203.0, required 180.0, margin 23.0, n=4098, seed=10322096095657499336 +moderate: mean 218.1, p01 214.4, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499356 +benchmark: 2,187 ns/iteration, speed vs FLTX 0.47× + +226.8 + +0.0 + +1/2 + +2,187 ns · 0.47× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::expm1 +mean: 227.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 3,552 ns/iteration, speed vs FLTX 0.29× + +227.5 + +214.0 + +2/2 + +3,552 ns · 0.29× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::expm1 +mean: 250.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4098, seed=10322096095657499336 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 4,507 ns/iteration, speed vs FLTX 0.23× + +250.1 + +237.0 + +2/2 + +4,507 ns · 0.23× + +No + +✗ + + + + +Logarithms + + + + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.8 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.2, p01 215.3, worst 215.0, required 180.0, margin 35.0, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,719 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.204203× + +217.8 + +213.3 + +3/3 + +1,719 ns + +Both + +- + + +qdpp qd_real +API: qdpp log +mean: 205.1 bits +p01: 62.2 bits +worst: 61.6 bits +domains: 2/3 +minimum threshold margin: -118.4 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 180.1, p01 62.2, worst 61.6, required 180.0, margin -118.4, n=4096, seed=10322096095657499354 +near_one: mean 216.1, p01 213.6, worst 212.8, required 180.0, margin 32.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 219.2, p01 198.3, worst 182.9, required 180.0, margin 2.9, n=4096, seed=10322096095657499357 +benchmark: 6,967 ns/iteration, speed vs FLTX 0.25× + +205.1 + +61.6 + +2/3 + +6,967 ns · 0.25× + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.7, p01 214.4, worst 214.3, required 180.0, margin 34.3, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 5,508 ns/iteration, speed vs FLTX 0.31× + +215.9 + +214.0 + +3/3 + +5,508 ns · 0.31× + +Both + +- + + +TLFloat Octuple +API: tlfloat::log +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.8, p01 237.3, worst 237.3, required 180.0, margin 57.3, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 6,651 ns/iteration, speed vs FLTX 0.26× + +238.9 + +237.0 + +3/3 + +6,651 ns · 0.26× + +No + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 221.1, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,771 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.3209× + +218.6 + +213.2 + +3/3 + +1,771 ns + +Both + +- + + +qdpp: log2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log2 +mean: 217.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 220.0, p01 214.9, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 5,882 ns/iteration, speed vs FLTX 0.30× + +217.3 + +214.0 + +3/3 + +5,882 ns · 0.30× + +Both + +- + + +TLFloat Octuple +API: tlfloat::log2 +mean: 240.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 243.0, p01 237.9, worst 237.8, required 180.0, margin 57.8, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 6,768 ns/iteration, speed vs FLTX 0.26× + +240.3 + +237.0 + +3/3 + +6,768 ns · 0.26× + +No + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 217.6, p01 215.1, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,766 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.833628× + +217.4 + +213.3 + +3/3 + +1,766 ns + +Both + +- + + +qdpp qd_real +API: qdpp log10 +mean: 203.1 bits +p01: 62.2 bits +worst: 61.6 bits +domains: 2/3 +minimum threshold margin: -118.4 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 177.4, p01 62.2, worst 61.6, required 180.0, margin -118.4, n=4096, seed=10322096095657499354 +near_one: mean 215.7, p01 213.3, worst 212.7, required 180.0, margin 32.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.1, p01 198.3, worst 182.9, required 180.0, margin 2.9, n=4096, seed=10322096095657499357 +benchmark: 7,264 ns/iteration, speed vs FLTX 0.24× + +203.1 + +61.6 + +2/3 + +7,264 ns · 0.24× + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log10 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.8, p01 214.1, worst 214.1, required 180.0, margin 34.1, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 10,907 ns/iteration, speed vs FLTX 0.16× + +215.9 + +214.0 + +3/3 + +10,907 ns · 0.16× + +Both + +- + + +TLFloat Octuple +API: tlfloat::log10 +mean: 238.8 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.6, p01 237.1, worst 237.1, required 180.0, margin 57.1, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 6,771 ns/iteration, speed vs FLTX 0.26× + +238.8 + +237.0 + +3/3 + +6,771 ns · 0.26× + +No + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 226.8 bits +p01: 207.4 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.1, p01 207.4, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,757 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.175041× + +226.8 + +207.0 + +2/2 + +1,757 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp log1p +mean: 226.4 bits +p01: 203.4 bits +worst: 203.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 235.6, p01 203.4, worst 203.0, required 180.0, margin 23.0, n=4098, seed=10322096095657499336 +moderate: mean 217.2, p01 214.1, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 6,784 ns/iteration, speed vs FLTX 0.26× + +226.4 + +203.0 + +2/2 + +6,784 ns · 0.26× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log1p +mean: 227.4 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 5,577 ns/iteration, speed vs FLTX 0.31× + +227.4 + +214.0 + +2/2 + +5,577 ns · 0.31× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::log1p +mean: 250.1 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.4, worst 237.0, required 180.0, margin 57.0, n=4098, seed=10322096095657499336 +moderate: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 7,403 ns/iteration, speed vs FLTX 0.24× + +250.1 + +237.0 + +2/2 + +7,403 ns · 0.24× + +No + +✗ + + + + +Trigonometric + + + + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 887.9 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.192328× + +222.3 + +202.9 + +3/3 + +887.9 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sin +mean: 142.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 88.2, p01 40.3, worst 0.0, required 180.0, margin -180.0, n=4104, seed=10322096095657499353 +moderate: mean 215.8, p01 210.4, worst 206.1, required 180.0, margin 26.1, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 125.3, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4315, seed=10322096095657499369 +benchmark: 1,947 ns/iteration, speed vs FLTX 0.46× + +142.8 + +0.0 + +1/3 + +1,947 ns · 0.46× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sin +mean: 218.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.3, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 222.9, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 3,656 ns/iteration, speed vs FLTX 0.24× + +218.5 + +214.0 + +3/3 + +3,656 ns · 0.24× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sin +mean: 241.2 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 245.1, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 5,586 ns/iteration, speed vs FLTX 0.16× + +241.2 + +237.0 + +3/3 + +5,586 ns · 0.16× + +No + +✗ + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 861.6 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.270025× + +226.8 + +208.7 + +3/3 + +861.6 ns + +Both + +- + + +qdpp qd_real +API: qdpp cos +mean: 161.9 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 171.1, p01 59.1, worst 0.0, required 180.0, margin -180.0, n=4104, seed=10322096095657499353 +moderate: mean 215.7, p01 210.1, worst 205.0, required 180.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 102.2, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4315, seed=10322096095657499369 +benchmark: 1,956 ns/iteration, speed vs FLTX 0.44× + +161.9 + +0.0 + +1/3 + +1,956 ns · 0.44× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cos +mean: 219.4 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 220.7, p01 214.5, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 221.2, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 2,751 ns/iteration, speed vs FLTX 0.31× + +219.4 + +214.0 + +3/3 + +2,751 ns · 0.31× + +Both + +- + + +TLFloat Octuple +API: tlfloat::cos +mean: 241.7 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 242.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 243.4, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 5,592 ns/iteration, speed vs FLTX 0.15× + +241.7 + +237.0 + +3/3 + +5,592 ns · 0.15× + +No + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,062 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.977119× + +- + +- + +- + +1,062 ns + +- + +- + + +qdpp qd_real +API: qdpp sincos +benchmark: 2,099 ns/iteration, speed vs FLTX 0.51× + +- + +- + +- + +2,099 ns · 0.51× + +- + +- + + +mpfr64: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::sincos +benchmark: 11,212 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +11,212 ns · 0.09× + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,123 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.08266× + +217.1 + +202.9 + +3/3 + +1,123 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp tan +mean: 111.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -170.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 86.8, p01 40.3, worst 0.0, required 170.0, margin -170.0, n=4104, seed=10322096095657499353 +moderate: mean 214.8, p01 209.4, worst 205.0, required 170.0, margin 35.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 36.9, p01 0.0, worst 0.0, required 170.0, margin -170.0, n=4315, seed=10322096095657499369 +benchmark: 2,338 ns/iteration, speed vs FLTX 0.48× + +111.5 + +0.0 + +1/3 + +2,338 ns · 0.48× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tan +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 44.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.1, p01 214.1, worst 214.0, required 170.0, margin 44.0, n=4104, seed=10322096095657499353 +moderate: mean 216.0, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 215.9, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4315, seed=10322096095657499369 +benchmark: 4,370 ns/iteration, speed vs FLTX 0.26× + +216.0 + +214.0 + +3/3 + +4,370 ns · 0.26× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 67.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 238.9, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4104, seed=10322096095657499353 +moderate: mean 239.0, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 238.9, p01 237.2, worst 237.1, required 170.0, margin 67.1, n=4315, seed=10322096095657499369 +benchmark: 6,601 ns/iteration, speed vs FLTX 0.17× + +239.0 + +237.0 + +3/3 + +6,601 ns · 0.17× + +No + +✗ + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,338 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 6.459461× + +217.9 + +214.4 + +2/2 + +1,338 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp asin +mean: 217.2 bits +p01: 212.9 bits +worst: 212.3 bits +domains: 2/2 +minimum threshold margin: 32.3 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 216.0, p01 212.9, worst 212.3, required 180.0, margin 32.3, n=4099, seed=10322096095657499356 +benchmark: 8,641 ns/iteration, speed vs FLTX 0.15× + +217.2 + +212.3 + +2/2 + +8,641 ns · 0.15× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asin +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.1, p01 214.7, worst 214.7, required 180.0, margin 34.7, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 11,602 ns/iteration, speed vs FLTX 0.12× + +216.0 + +214.0 + +2/2 + +11,602 ns · 0.12× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asin +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.1, p01 237.7, worst 237.7, required 180.0, margin 57.7, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 11,114 ns/iteration, speed vs FLTX 0.12× + +239.0 + +237.0 + +2/2 + +11,114 ns · 0.12× + +No + +✗ + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,383 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 6.289228× + +216.0 + +192.5 + +2/2 + +1,383 ns + +Both + +- + + +qdpp qd_real +API: qdpp acos +mean: 217.3 bits +p01: 213.6 bits +worst: 212.5 bits +domains: 2/2 +minimum threshold margin: 32.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.4, p01 214.0, worst 213.0, required 180.0, margin 33.0, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 213.6, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +benchmark: 8,698 ns/iteration, speed vs FLTX 0.16× + +217.3 + +212.5 + +2/2 + +8,698 ns · 0.16× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acos +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 11,961 ns/iteration, speed vs FLTX 0.12× + +215.9 + +214.0 + +2/2 + +11,961 ns · 0.12× + +Both + +- + + +TLFloat Octuple +API: tlfloat::acos +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4105, seed=10322096095657499355 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 11,097 ns/iteration, speed vs FLTX 0.12× + +238.9 + +237.0 + +2/2 + +11,097 ns · 0.12× + +No + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 880.6 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 4.32102× + +218.1 + +214.7 + +2/2 + +880.6 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atan +mean: 216.7 bits +p01: 213.1 bits +worst: 212.4 bits +domains: 2/2 +minimum threshold margin: 32.4 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.5, p01 213.8, worst 212.6, required 180.0, margin 32.6, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 213.1, worst 212.4, required 180.0, margin 32.4, n=4099, seed=10322096095657499359 +benchmark: 6,092 ns/iteration, speed vs FLTX 0.14× + +216.7 + +212.4 + +2/2 + +6,092 ns · 0.14× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,805 ns/iteration, speed vs FLTX 0.23× + +216.0 + +214.0 + +2/2 + +3,805 ns · 0.23× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 10,086 ns/iteration, speed vs FLTX 0.09× + +239.0 + +237.0 + +2/2 + +10,086 ns · 0.09× + +Inf + +✗ + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 934.3 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 4.253327× + +217.9 + +214.3 + +3/3 + +934.3 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atan2 +mean: 216.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 0.0, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=8, seed=10322096095657499351 +moderate: mean 217.0, p01 213.4, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 213.0, worst 211.8, required 180.0, margin 31.8, n=4099, seed=10322096095657499359 +benchmark: 6,034 ns/iteration, speed vs FLTX 0.15× + +216.3 + +0.0 + +2/3 + +6,034 ns · 0.15× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan2 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 215.3, p01 215.2, worst 215.2, required 180.0, margin 35.2, n=8, seed=10322096095657499351 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,974 ns/iteration, speed vs FLTX 0.24× + +215.9 + +214.0 + +3/3 + +3,974 ns · 0.24× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan2 +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 240.6, p01 237.8, worst 237.8, required 180.0, margin 57.8, n=8, seed=10322096095657499351 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 10,175 ns/iteration, speed vs FLTX 0.09× + +239.0 + +237.0 + +3/3 + +10,175 ns · 0.09× + +Inf + +✗ + + + + +Hyperbolic + + + + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,332 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.880107× + +217.0 + +213.8 + +2/2 + +1,332 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sinh +mean: 216.8 bits +p01: 214.2 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 32.9 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.8, p01 214.2, worst 212.9, required 180.0, margin 32.9, n=4099, seed=10322096095657499359 +benchmark: 2,505 ns/iteration, speed vs FLTX 0.53× + +216.8 + +212.9 + +2/2 + +2,505 ns · 0.53× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sinh +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,869 ns/iteration, speed vs FLTX 0.34× + +216.0 + +214.0 + +2/2 + +3,869 ns · 0.34× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 4,970 ns/iteration, speed vs FLTX 0.27× + +238.9 + +237.0 + +2/2 + +4,970 ns · 0.27× + +No + +✗ + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,326 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.875465× + +217.5 + +214.2 + +2/2 + +1,326 ns + +Both + +- + + +qdpp qd_real +API: qdpp cosh +mean: 217.3 bits +p01: 214.5 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 217.0, p01 214.5, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +near_one: mean 217.6, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 2,487 ns/iteration, speed vs FLTX 0.53× + +217.3 + +213.8 + +2/2 + +2,487 ns · 0.53× + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,724 ns/iteration, speed vs FLTX 0.36× + +215.9 + +214.0 + +2/2 + +3,724 ns · 0.36× + +Both + +- + + +TLFloat Octuple +API: tlfloat::cosh +mean: 238.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 4,679 ns/iteration, speed vs FLTX 0.28× + +238.9 + +237.0 + +2/2 + +4,679 ns · 0.28× + +No + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,277 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.964431× + +219.1 + +214.0 + +2/2 + +1,277 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp tanh +mean: 218.9 bits +p01: 214.6 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 219.8, p01 214.6, worst 212.9, required 180.0, margin 32.9, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 214.9, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 2,509 ns/iteration, speed vs FLTX 0.51× + +218.9 + +212.9 + +2/2 + +2,509 ns · 0.51× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tanh +mean: 216.2 bits +p01: 214.3 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.6, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,841 ns/iteration, speed vs FLTX 0.33× + +216.2 + +214.0 + +2/2 + +3,841 ns · 0.33× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tanh +mean: 239.2 bits +p01: 237.2 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.0, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 4,814 ns/iteration, speed vs FLTX 0.27× + +239.2 + +237.1 + +2/2 + +4,814 ns · 0.27× + +Inf + +✗ + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,637 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.536521× + +217.2 + +213.0 + +2/2 + +2,637 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp asinh +mean: 216.9 bits +p01: 213.7 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.3, p01 214.2, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499356 +near_one: mean 216.4, p01 213.7, worst 212.7, required 180.0, margin 32.7, n=4099, seed=10322096095657499359 +benchmark: 6,688 ns/iteration, speed vs FLTX 0.39× + +216.9 + +0.0 + +1/2 + +6,688 ns · 0.39× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asinh +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 15,910 ns/iteration, speed vs FLTX 0.17× + +215.9 + +214.0 + +2/2 + +15,910 ns · 0.17× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 36,447 ns/iteration, speed vs FLTX 0.07× + +238.9 + +237.0 + +2/2 + +36,447 ns · 0.07× + +No + +✗ + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,439 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 3.002323× + +217.7 + +213.7 + +2/2 + +2,439 ns + +Both + +- + + +qdpp qd_real +API: qdpp acosh +mean: 217.0 bits +p01: 213.6 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 216.3, p01 213.6, worst 0.0, required 180.0, margin -180.0, n=4101, seed=10322096095657499355 +moderate: mean 217.7, p01 214.7, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499275 +benchmark: 7,321 ns/iteration, speed vs FLTX 0.33× + +217.0 + +0.0 + +0/2 + +7,321 ns · 0.33× + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.8, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4101, seed=10322096095657499355 +moderate: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499275 +benchmark: 8,638 ns/iteration, speed vs FLTX 0.28× + +215.9 + +214.0 + +2/2 + +8,638 ns · 0.28× + +Both + +- + + +TLFloat Octuple +API: tlfloat::acosh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.7, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4101, seed=10322096095657499355 +moderate: mean 239.0, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499275 +benchmark: 33,907 ns/iteration, speed vs FLTX 0.07× + +238.9 + +237.0 + +2/2 + +33,907 ns · 0.07× + +No + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,281 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.866181× + +218.3 + +213.3 + +2/2 + +2,281 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atanh +mean: 217.7 bits +p01: 213.8 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 218.6, p01 215.3, worst 0.0, required 180.0, margin -180.0, n=4105, seed=10322096095657499355 +moderate: mean 216.8, p01 213.8, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +benchmark: 7,169 ns/iteration, speed vs FLTX 0.32× + +217.7 + +0.0 + +1/2 + +7,169 ns · 0.32× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atanh +mean: 216.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.5, p01 214.9, worst 214.9, required 180.0, margin 34.9, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 6,536 ns/iteration, speed vs FLTX 0.35× + +216.2 + +214.0 + +2/2 + +6,536 ns · 0.35× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atanh +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.4, p01 237.9, worst 237.4, required 180.0, margin 57.4, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 7,819 ns/iteration, speed vs FLTX 0.29× + +239.1 + +237.0 + +2/2 + +7,819 ns · 0.29× + +No + +✗ + + + + +Special + + + + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 10,046 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 8.14519× + +208.2 + +189.8 + +2/2 + +10,046 ns + +Both + +- + + +qdpp: erfc is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erfc +mean: 216.1 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 216.2, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 81,827 ns/iteration, speed vs FLTX 0.12× + +216.1 + +214.0 + +2/2 + +81,827 ns · 0.12× + +Both + +- + + +TLFloat Octuple +API: tlfloat::erfc +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 239.2, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 441,520 ns/iteration, speed vs FLTX 0.02× + +239.1 + +237.0 + +2/2 + +441,520 ns · 0.02× + +Inf + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 15,377 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.474216× + +212.8 + +196.8 + +2/2 + +15,377 ns + +Both + +✓ + + +qdpp: erf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erf +mean: 216.3 bits +p01: 214.3 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 34.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.5, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499359 +benchmark: 38,047 ns/iteration, speed vs FLTX 0.40× + +216.3 + +214.1 + +2/2 + +38,047 ns · 0.40× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::erf +mean: 239.2 bits +p01: 237.3 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.6, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.3, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 441,802 ns/iteration, speed vs FLTX 0.03× + +239.2 + +237.1 + +2/2 + +441,802 ns · 0.03× + +Inf + +✗ + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 9,844 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.338413× + +209.0 + +202.5 + +1/1 + +9,844 ns + +Both + +- + + +qdpp: tgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499320 +benchmark: 32,862 ns/iteration, speed vs FLTX 0.30× + +215.9 + +214.0 + +1/1 + +32,862 ns · 0.30× + +Both + +- + + +TLFloat Octuple +API: tlfloat::tgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499320 +benchmark: 158,109 ns/iteration, speed vs FLTX 0.06× + +238.9 + +237.0 + +1/1 + +158,109 ns · 0.06× + +No + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 10,612 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.813015× + +211.9 + +199.2 + +1/1 + +10,612 ns + +Both + +- + + +qdpp: lgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499323 +benchmark: 29,853 ns/iteration, speed vs FLTX 0.36× + +215.9 + +214.0 + +1/1 + +29,853 ns · 0.36× + +Both + +- + + +TLFloat Octuple +API: tlfloat::lgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499323 +benchmark: 141,895 ns/iteration, speed vs FLTX 0.07× + +238.9 + +237.0 + +1/1 + +141,895 ns · 0.07× + +No + +- + + + + +Comparisons + + + + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.790 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.690074× + +exact + +exact + +1/1 + +0.790 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.545 ns/iteration, speed vs FLTX 1.45× + +exact + +exact + +1/1 + +0.545 ns · 1.45× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.42 ns/iteration, speed vs FLTX 0.12× + +exact + +exact + +1/1 + +6.42 ns · 0.12× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.59 ns/iteration, speed vs FLTX 0.17× + +exact + +exact + +1/1 + +4.59 ns · 0.17× + +Both + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.735 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.736954× + +exact + +exact + +1/1 + +0.735 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.541 ns/iteration, speed vs FLTX 1.36× + +exact + +exact + +1/1 + +0.541 ns · 1.36× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.43 ns/iteration, speed vs FLTX 0.11× + +exact + +exact + +1/1 + +6.43 ns · 0.11× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.45 ns/iteration, speed vs FLTX 0.17× + +exact + +exact + +1/1 + +4.45 ns · 0.17× + +Both + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.32 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.834595× + +exact + +exact + +1/1 + +1.32 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.10 ns/iteration, speed vs FLTX 1.20× + +exact + +exact + +1/1 + +1.10 ns · 1.20× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.45 ns/iteration, speed vs FLTX 0.20× + +exact + +exact + +1/1 + +6.45 ns · 0.20× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.22 ns/iteration, speed vs FLTX 0.25× + +exact + +exact + +1/1 + +5.22 ns · 0.25× + +Both + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.59 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.80137× + +exact + +exact + +1/1 + +1.59 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.27 ns/iteration, speed vs FLTX 1.25× + +exact + +exact + +1/1 + +1.27 ns · 1.25× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.54 ns/iteration, speed vs FLTX 0.24× + +exact + +exact + +1/1 + +6.54 ns · 0.24× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.47 ns/iteration, speed vs FLTX 0.29× + +exact + +exact + +1/1 + +5.47 ns · 0.29× + +Both + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.26 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.879104× + +exact + +exact + +1/1 + +1.26 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.10 ns/iteration, speed vs FLTX 1.14× + +exact + +exact + +1/1 + +1.10 ns · 1.14× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.56 ns/iteration, speed vs FLTX 0.19× + +exact + +exact + +1/1 + +6.56 ns · 0.19× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.41 ns/iteration, speed vs FLTX 0.23× + +exact + +exact + +1/1 + +5.41 ns · 0.23× + +Both + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.36 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.807541× + +exact + +exact + +1/1 + +1.36 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.10 ns/iteration, speed vs FLTX 1.24× + +exact + +exact + +1/1 + +1.10 ns · 1.24× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.50 ns/iteration, speed vs FLTX 0.21× + +exact + +exact + +1/1 + +6.50 ns · 0.21× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.27 ns/iteration, speed vs FLTX 0.26× + +exact + +exact + +1/1 + +5.27 ns · 0.26× + +Both + +- + + + + +Random + + + + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 11.01 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 3.413646× + +- + +- + +- + +11.01 ns + +- + +- + + +qdpp qd_real +API: qdpp qdrand +benchmark: 37.59 ns/iteration, speed vs FLTX 0.29× + +- + +- + +- + +37.59 ns · 0.29× + +- + +- + + +mpfr64: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 271.4 ns/iteration (no available competitor) + +- + +- + +- + +271.4 ns + +- + +- + + +qdpp: normal is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 47.81 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.095773× + +- + +- + +- + +47.81 ns + +- + +- + + +qdpp qd_real +API: same expression +benchmark: 100.2 ns/iteration, speed vs FLTX 0.48× + +- + +- + +- + +100.2 ns · 0.48× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same expression +benchmark: 403.5 ns/iteration, speed vs FLTX 0.12× + +- + +- + +- + +403.5 ns · 0.12× + +- + +- + + +TLFloat Octuple +API: same expression +benchmark: 250.6 ns/iteration, speed vs FLTX 0.19× + +- + +- + +- + +250.6 ns · 0.19× + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 142.7 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.360034× + +- + +- + +- + +142.7 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 336.8 ns/iteration, speed vs FLTX 0.42× + +- + +- + +- + +336.8 ns · 0.42× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 823.4 ns/iteration, speed vs FLTX 0.17× + +- + +- + +- + +823.4 ns · 0.17× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 518.3 ns/iteration, speed vs FLTX 0.28× + +- + +- + +- + +518.3 ns · 0.28× + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,793 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.204634× + +- + +- + +- + +1,793 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 3,954 ns/iteration, speed vs FLTX 0.45× + +- + +- + +- + +3,954 ns · 0.45× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 6,088 ns/iteration, speed vs FLTX 0.29× + +- + +- + +- + +6,088 ns · 0.29× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 11,450 ns/iteration, speed vs FLTX 0.16× + +- + +- + +- + +11,450 ns · 0.16× + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 111.0 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.053802× + +- + +- + +- + +111.0 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 227.9 ns/iteration, speed vs FLTX 0.49× + +- + +- + +- + +227.9 ns · 0.49× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 809.9 ns/iteration, speed vs FLTX 0.14× + +- + +- + +- + +809.9 ns · 0.14× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 531.9 ns/iteration, speed vs FLTX 0.21× + +- + +- + +- + +531.9 ns · 0.21× + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 536.5 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.808077× + +- + +- + +- + +536.5 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 970.0 ns/iteration, speed vs FLTX 0.55× + +- + +- + +- + +970.0 ns · 0.55× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 3,379 ns/iteration, speed vs FLTX 0.16× + +- + +- + +- + +3,379 ns · 0.16× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 2,085 ns/iteration, speed vs FLTX 0.26× + +- + +- + +- + +2,085 ns · 0.26× + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 485.7 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.583557× + +- + +- + +- + +485.7 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 769.1 ns/iteration, speed vs FLTX 0.63× + +- + +- + +- + +769.1 ns · 0.63× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 2,621 ns/iteration, speed vs FLTX 0.19× + +- + +- + +- + +2,621 ns · 0.19× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 1,889 ns/iteration, speed vs FLTX 0.26× + +- + +- + +- + +1,889 ns · 0.26× + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 238.0 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.839733× + +- + +- + +- + +238.0 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 437.8 ns/iteration, speed vs FLTX 0.54× + +- + +- + +- + +437.8 ns · 0.54× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 945.6 ns/iteration, speed vs FLTX 0.25× + +- + +- + +- + +945.6 ns · 0.25× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 741.0 ns/iteration, speed vs FLTX 0.32× + +- + +- + +- + +741.0 ns · 0.32× + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 8,838 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.199434× + +- + +- + +- + +8,838 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 19,438 ns/iteration, speed vs FLTX 0.45× + +- + +- + +- + +19,438 ns · 0.45× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 27,850 ns/iteration, speed vs FLTX 0.32× + +- + +- + +- + +27,850 ns · 0.32× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 40,612 ns/iteration, speed vs FLTX 0.22× + +- + +- + +- + +40,612 ns · 0.22× + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,756 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 3.4326× + +- + +- + +- + +4,756 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 16,325 ns/iteration, speed vs FLTX 0.29× + +- + +- + +- + +16,325 ns · 0.29× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 22,212 ns/iteration, speed vs FLTX 0.21× + +- + +- + +- + +22,212 ns · 0.21× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 33,938 ns/iteration, speed vs FLTX 0.14× + +- + +- + +- + +33,938 ns · 0.14× + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f256_overview_compact.svg b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f256_overview_compact.svg new file mode 100644 index 0000000..d233816 --- /dev/null +++ b/validation/metrics/generated/overview/wasm32_wasm32_Emscripten_f256_overview_compact.svg @@ -0,0 +1,9392 @@ + + + + + +operation + + +bl::f256 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +qdpp (qd_real) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +mpfr_float_backend<64> + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +TLFloat (tloct) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +Arithmetic + + + + + + + +add + +fltx bl::f256 +API: bl::add +mean: 227.4 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 10.16 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.252336× + +227.4 + +215.3 + +2/2 + +10.2 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp operator+ +mean: 227.4 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 22.87 ns/iteration, speed vs FLTX 0.44× + +227.4 + +215.3 + +2/2 + +22.9 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator+ +mean: 225.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.3, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3770, seed=10322096095657499292 +subnormal: mean 245.4, p01 215.5, worst 214.9, required 190.0, margin 24.9, n=326, seed=10322096095657499292 +benchmark: 94.70 ns/iteration, speed vs FLTX 0.11× + +225.0 + +214.0 + +2/2 + +94.7 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator+ +mean: 253.1 bits +p01: 237.3 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 251.8, p01 237.3, worst 237.0, required 190.0, margin 47.0, n=3770, seed=10322096095657499292 +subnormal: mean 268.5, p01 239.2, worst 237.9, required 190.0, margin 47.9, n=326, seed=10322096095657499292 +benchmark: 59.77 ns/iteration, speed vs FLTX 0.17× + +253.1 + +237.0 + +2/2 + +59.8 ns + +No + +✗ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 227.4 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.1, p01 215.6, worst 215.2, required 190.0, margin 25.2, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 10.07 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.357733× + +227.4 + +215.2 + +2/2 + +10.1 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp operator- +mean: 227.4 bits +p01: 215.6 bits +worst: 215.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 226.1, p01 215.6, worst 215.0, required 190.0, margin 25.0, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 23.74 ns/iteration, speed vs FLTX 0.42× + +227.4 + +215.0 + +2/2 + +23.7 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator- +mean: 225.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.5, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3791, seed=10322096095657499292 +subnormal: mean 245.9, p01 246.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 101.4 ns/iteration, speed vs FLTX 0.10× + +225.2 + +214.0 + +2/2 + +101 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator- +mean: 253.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 252.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=3791, seed=10322096095657499292 +subnormal: mean 268.9, p01 269.0, worst 237.7, required 190.0, margin 47.7, n=305, seed=10322096095657499292 +benchmark: 60.05 ns/iteration, speed vs FLTX 0.17× + +253.3 + +237.0 + +2/2 + +60.0 ns + +No + +✗ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 24.86 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.255469× + +220.0 + +215.2 + +2/2 + +24.9 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp operator* +mean: 220.0 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 31.21 ns/iteration, speed vs FLTX 0.80× + +220.0 + +215.2 + +2/2 + +31.2 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator* +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4000, seed=10322096095657499292 +subnormal: mean 217.3, p01 214.3, worst 214.3, required 190.0, margin 24.3, n=100, seed=10322096095657499292 +benchmark: 187.5 ns/iteration, speed vs FLTX 0.13× + +216.0 + +214.0 + +2/2 + +187 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator* +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4000, seed=10322096095657499292 +subnormal: mean 240.2, p01 237.1, worst 237.1, required 190.0, margin 47.1, n=100, seed=10322096095657499292 +benchmark: 111.0 ns/iteration, speed vs FLTX 0.22× + +239.0 + +237.0 + +2/2 + +111 ns + +No + +✗ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 2/2 +minimum threshold margin: 24.8 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 219.4, p01 215.4, worst 215.4, required 190.0, margin 25.4, n=55, seed=10322096095657499292 +benchmark: 91.46 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.558996× + +219.2 + +214.8 + +2/2 + +91.5 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp operator/ +mean: 218.7 bits +p01: 172.2 bits +worst: 172.2 bits +domains: 1/2 +minimum threshold margin: -17.8 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 219.2, p01 214.8, worst 214.0, required 190.0, margin 24.0, n=4045, seed=10322096095657499292 +subnormal: mean 179.1, p01 172.2, worst 172.2, required 190.0, margin -17.8, n=55, seed=10322096095657499292 +benchmark: 234.0 ns/iteration, speed vs FLTX 0.39× + +218.7 + +172.2 + +1/2 + +234 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator/ +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4045, seed=10322096095657499292 +subnormal: mean 218.2, p01 214.2, worst 214.2, required 190.0, margin 24.2, n=55, seed=10322096095657499292 +benchmark: 241.7 ns/iteration, speed vs FLTX 0.38× + +216.0 + +214.0 + +2/2 + +242 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator/ +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4045, seed=10322096095657499292 +subnormal: mean 241.4, p01 237.2, worst 237.2, required 190.0, margin 47.2, n=55, seed=10322096095657499292 +benchmark: 261.6 ns/iteration, speed vs FLTX 0.35× + +239.0 + +237.0 + +2/2 + +262 ns + +No + +✗ + + + + +IO + + + + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 452.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.345841× + +220.4 + +217.0 + +2/2 + +452 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp to_string +mean: 218.8 bits +p01: 211.0 bits +worst: 208.7 bits +domains: 2/2 +minimum threshold margin: 18.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 211.0, worst 208.7, required 190.0, margin 18.7, n=4096, seed=10322096095657499357 +benchmark: 5,032 ns/iteration, speed vs FLTX 0.09× + +218.8 + +208.7 + +2/2 + +5032 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost number::str +mean: 220.3 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.2, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 1,061 ns/iteration, speed vs FLTX 0.43× + +220.3 + +217.0 + +2/2 + +1061 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::to_string +mean: 216.9 bits +p01: 214.0 bits +worst: 213.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.1, p01 214.1, worst 213.6, required 190.0, margin 23.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 216.7, p01 214.0, worst 213.6, required 190.0, margin 23.6, n=4096, seed=10322096095657499357 +benchmark: 13,338 ns/iteration, speed vs FLTX 0.03× + +216.9 + +213.6 + +2/2 + +13338 ns + +Both + +✓ + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 398.9 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 12.51055× + +220.4 + +217.0 + +2/2 + +399 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp write +mean: 218.8 bits +p01: 211.0 bits +worst: 208.7 bits +domains: 2/2 +minimum threshold margin: 18.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 211.0, worst 208.7, required 190.0, margin 18.7, n=4096, seed=10322096095657499357 +benchmark: 4,990 ns/iteration, speed vs FLTX 0.08× + +218.8 + +208.7 + +2/2 + +4990 ns + +Both + +✗ + + +mpfr64: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 458.3 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.333944× + +219.7 + +212.0 + +2/2 + +458 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp read +mean: 200.9 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -212.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 213.4, worst 212.6, required 212.0, margin 0.6, n=4097, seed=10322096095657499311 +wide_exponent: mean 185.9, p01 0.0, worst 0.0, required 212.0, margin -212.0, n=4098, seed=10322096095657499308 +benchmark: 3,160 ns/iteration, speed vs FLTX 0.15× + +200.9 + +0.0 + +1/2 + +3160 ns + +NaN + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost string constructor +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 2.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4098, seed=10322096095657499308 +benchmark: 611.4 ns/iteration, speed vs FLTX 0.75× + +216.0 + +214.0 + +2/2 + +611 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat string constructor +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 212.0, margin 25.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 238.9, p01 237.2, worst 237.1, required 212.0, margin 25.1, n=4098, seed=10322096095657499308 +benchmark: 10,554 ns/iteration, speed vs FLTX 0.04× + +238.9 + +237.0 + +2/2 + +10554 ns + +No + +✗ + + + + +Rounding + + + + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 0.991 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.996663× + += + += + +1/1 + +0.99 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 0.988 ns/iteration, speed vs FLTX 1.00× + += + += + +1/1 + +0.99 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 62.89 ns/iteration, speed vs FLTX 0.02× + += + += + +1/1 + +62.9 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 7.01 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +7.0 ns + +No + +✗ + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 0.993 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.992657× + += + += + +1/1 + +0.99 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 0.986 ns/iteration, speed vs FLTX 1.01× + += + += + +1/1 + +0.99 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 63.43 ns/iteration, speed vs FLTX 0.02× + += + += + +1/1 + +63.4 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 7.01 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +7.0 ns + +No + +✗ + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.90 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.878158× + += + += + +1/1 + +2.9 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp aint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.55 ns/iteration, speed vs FLTX 1.14× + += + += + +1/1 + +2.5 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 63.57 ns/iteration, speed vs FLTX 0.05× + += + += + +1/1 + +63.6 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 6.19 ns/iteration, speed vs FLTX 0.47× + += + += + +1/1 + +6.2 ns + +No + +✗ + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 12.18 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.704998× + += + += + +1/1 + +12.2 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp round +mean: 229.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/1 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 229.7, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4110, seed=10322096095657499382 +benchmark: 8.59 ns/iteration, speed vs FLTX 1.42× + +229.7 + +0.0 + +0/1 + +8.6 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 158.0 ns/iteration, speed vs FLTX 0.08× + += + += + +1/1 + +158 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 12.13 ns/iteration, speed vs FLTX 1.00× + += + += + +1/1 + +12.1 ns + +No + +✗ + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 8.06 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 2.267137× + += + += + +1/1 + +8.1 ns + +Both + +✓ + + +qdpp: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 18.28 ns/iteration, speed vs FLTX 0.44× + += + += + +1/1 + +18.3 ns + +No + +✗ + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 6.63 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 28.823817× + += + += + +1/1 + +6.6 ns + +- + +- + + +qdpp: lround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 191.1 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +191 ns + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 6.50 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 49.312303× + += + += + +1/1 + +6.5 ns + +- + +- + + +qdpp: llround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 320.6 ns/iteration, speed vs FLTX 0.02× + += + += + +1/1 + +321 ns + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 145.7 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +146 ns + +Both + +✓ + + +qdpp: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 208.0 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +208 ns + +Both + +✓ + + +qdpp: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 77.97 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.808762× + +244.0 + +217.7 + +3/3 + +78.0 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp fmod +mean: 199.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -190.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 242.3, p01 211.1, worst 205.5, required 190.0, margin 15.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 123.2, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4, seed=10322096095657499383 +wide_exponent: mean 157.4, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4096, seed=10322096095657499357 +benchmark: 315.8 ns/iteration, speed vs FLTX 0.25× + +199.8 + +0.0 + +1/3 + +316 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 219.0 ns/iteration, speed vs FLTX 0.36× + += + += + +3/3 + +219 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 609.6 ns/iteration, speed vs FLTX 0.13× + += + += + +3/3 + +610 ns + +No + +✗ + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 105.6 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.380434× + += + += + +1/1 + +106 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp drem +mean: 241.9 bits +p01: 210.4 bits +worst: 205.5 bits +domains: 1/1 +minimum threshold margin: 15.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 241.9, p01 210.4, worst 205.5, required 190.0, margin 15.5, n=4099, seed=10322096095657499356 +benchmark: 321.3 ns/iteration, speed vs FLTX 0.33× + +241.9 + +205.5 + +1/1 + +321 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 251.4 ns/iteration, speed vs FLTX 0.42× + += + += + +1/1 + +251 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 644.9 ns/iteration, speed vs FLTX 0.16× + += + += + +1/1 + +645 ns + +No + +✗ + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 104.4 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 3.094425× + += + += + +1/1 + +104 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp divrem +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 322.9 ns/iteration, speed vs FLTX 0.32× + += + += + +1/1 + +323 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 342.2 ns/iteration, speed vs FLTX 0.30× + += + += + +1/1 + +342 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 652.3 ns/iteration, speed vs FLTX 0.16× + += + += + +1/1 + +652 ns + +No + +✗ + + + + +Float Utils + + + + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.21 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.007802× + += + += + +2/2 + +3.2 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.24 ns/iteration, speed vs FLTX 0.99× + += + += + +2/2 + +3.2 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 67.89 ns/iteration, speed vs FLTX 0.05× + += + += + +2/2 + +67.9 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.20 ns/iteration, speed vs FLTX 0.62× + += + += + +2/2 + +5.2 ns + +No + +✓ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.09 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.015477× + += + += + +1/1 + +3.1 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.14 ns/iteration, speed vs FLTX 0.98× + += + += + +1/1 + +3.1 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 67.73 ns/iteration, speed vs FLTX 0.05× + += + += + +1/1 + +67.7 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 5.20 ns/iteration, speed vs FLTX 0.60× + += + += + +1/1 + +5.2 ns + +No + +✓ + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 31.48 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 4.601902× + +229.7 + +215.1 + +3/3 + +31.5 ns + +Both + +✗ + + +qdpp: fma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fma +mean: 228.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 222.8, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 215.0 ns/iteration, speed vs FLTX 0.15× + +228.3 + +214.0 + +3/3 + +215 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fma +mean: 251.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 245.2, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 144.9 ns/iteration, speed vs FLTX 0.22× + +251.1 + +237.0 + +3/3 + +145 ns + +No + +✗ + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 87.69 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.637056× + +217.9 + +214.6 + +2/2 + +87.7 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp inv +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 231.3 ns/iteration, speed vs FLTX 0.38× + +217.9 + +214.6 + +2/2 + +231 ns + +NaN + +✗ + + +mpfr64: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.17 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.840004× + += + += + +2/2 + +1.2 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp min +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.31 ns/iteration, speed vs FLTX 0.35× + += + += + +2/2 + +3.3 ns + +Inf + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 76.49 ns/iteration, speed vs FLTX 0.02× + += + += + +2/2 + +76.5 ns + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 13.57 ns/iteration, speed vs FLTX 0.09× + += + += + +2/2 + +13.6 ns + +No + +✗ + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.18 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.306226× + += + += + +2/2 + +1.2 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp max +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.54 ns/iteration, speed vs FLTX 0.77× + += + += + +2/2 + +1.5 ns + +Inf + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 75.72 ns/iteration, speed vs FLTX 0.02× + += + += + +2/2 + +75.7 ns + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 12.20 ns/iteration, speed vs FLTX 0.10× + += + += + +2/2 + +12.2 ns + +No + +✗ + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 7.06 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 8.199107× + += + += + +2/2 + +7.1 ns + +Both + +✓ + + +qdpp: fdim is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fdim +mean: 243.7 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 241.3, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +benchmark: 71.80 ns/iteration, speed vs FLTX 0.10× + +243.7 + +214.0 + +2/2 + +71.8 ns + +No + +✓ + + +TLFloat Octuple +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 57.90 ns/iteration, speed vs FLTX 0.12× + += + += + +2/2 + +57.9 ns + +No + +✓ + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.698 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 12.522131× + += + += + +1/1 + +0.70 ns + +Both + +✓ + + +qdpp: copysign is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 73.61 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +73.6 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 8.74 ns/iteration, speed vs FLTX 0.08× + += + += + +1/1 + +8.7 ns + +No + +✗ + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.94 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.328465× + += + += + +1/1 + +2.9 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.91 ns/iteration, speed vs FLTX 0.75× + += + += + +1/1 + +3.9 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 55.81 ns/iteration, speed vs FLTX 0.05× + += + += + +1/1 + +55.8 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 38.28 ns/iteration, speed vs FLTX 0.08× + += + += + +1/1 + +38.3 ns + +No + +✗ + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.96 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.321773× + += + += + +1/1 + +3.0 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.91 ns/iteration, speed vs FLTX 0.76× + += + += + +1/1 + +3.9 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 55.82 ns/iteration, speed vs FLTX 0.05× + += + += + +1/1 + +55.8 ns + +Both + +✓ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.97 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.320914× + += + += + +1/1 + +3.0 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.92 ns/iteration, speed vs FLTX 0.76× + += + += + +1/1 + +3.9 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 57.73 ns/iteration, speed vs FLTX 0.05× + += + += + +1/1 + +57.7 ns + +Both + +✓ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 12.41 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.506796× + += + += + +2/2 + +12.4 ns + +Both + +✓ + + +qdpp: frexp is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 110.2 ns/iteration, speed vs FLTX 0.11× + += + += + +2/2 + +110 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 43.50 ns/iteration, speed vs FLTX 0.29× + += + += + +2/2 + +43.5 ns + +No + +✗ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 13.86 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 5.138977× + += + += + +2/2 + +13.9 ns + +Both + +✓ + + +qdpp: modf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 301.0 ns/iteration, speed vs FLTX 0.05× + += + += + +2/2 + +301 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 71.25 ns/iteration, speed vs FLTX 0.19× + += + += + +2/2 + +71.2 ns + +No + +✗ + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.34 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 0.803263× + += + += + +2/2 + +1.3 ns + +- + +- + + +qdpp: ilogb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 41.47 ns/iteration, speed vs FLTX 0.03× + += + += + +2/2 + +41.5 ns + +- + +- + + +TLFloat Octuple +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.08 ns/iteration, speed vs FLTX 1.24× + += + += + +2/2 + +1.1 ns + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.26 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 98.196234× + += + += + +2/2 + +1.3 ns + +Both + +- + + +qdpp: logb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 123.5 ns/iteration, speed vs FLTX 0.01× + += + += + +2/2 + +123 ns + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 6.70 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 2.703484× + +- + +- + +- + +6.7 ns + +- + +- + + +qdpp: nextafter is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter +benchmark: 817.6 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +818 ns + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter +benchmark: 18.11 ns/iteration, speed vs FLTX 0.37× + +- + +- + +- + +18.1 ns + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 6.70 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 2.715208× + +- + +- + +- + +6.7 ns + +- + +- + + +qdpp: nexttoward is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter (same type) +benchmark: 814.1 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +814 ns + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter (same type) +benchmark: 18.18 ns/iteration, speed vs FLTX 0.37× + +- + +- + +- + +18.2 ns + +- + +- + + + + +Roots & powers + + + + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 22.54 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.65053× + +220.1 + +215.3 + +2/2 + +22.5 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sqr +mean: 216.7 bits +p01: 215.0 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 24.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.8, p01 215.0, worst 214.7, required 190.0, margin 24.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 216.7, p01 215.1, worst 214.8, required 190.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 14.67 ns/iteration, speed vs FLTX 1.54× + +216.7 + +214.7 + +2/2 + +14.7 ns + +Both + +✓ + + +mpfr64: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.9 bits +p01: 211.2 bits +worst: 209.6 bits +domains: 4/4 +minimum threshold margin: 19.6 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 218.3, p01 211.2, worst 209.6, required 190.0, margin 19.6, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 119.5 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.347687× + +217.9 + +209.6 + +4/4 + +120 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sqrt +mean: 151.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/4 +minimum threshold margin: -190.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 164.0, p01 54.6, worst 53.6, required 190.0, margin -136.4, n=4096, seed=10322096095657499354 +near_one: mean 217.6, p01 214.0, worst 212.6, required 190.0, margin 22.6, n=4099, seed=10322096095657499359 +subnormal: mean 8.7, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 216.9, p01 187.0, worst 174.8, required 190.0, margin -15.2, n=4096, seed=10322096095657499357 +benchmark: 441.8 ns/iteration, speed vs FLTX 0.27× + +151.8 + +0.0 + +1/4 + +442 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sqrt +mean: 216.2 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 4/4 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 216.2, p01 214.4, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499359 +subnormal: mean 216.7, p01 214.2, worst 214.1, required 190.0, margin 24.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 280.6 ns/iteration, speed vs FLTX 0.43× + +216.2 + +214.0 + +4/4 + +281 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sqrt +mean: 239.2 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 4/4 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 239.0, p01 237.4, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499359 +subnormal: mean 239.7, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 239.0, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 557.1 ns/iteration, speed vs FLTX 0.21× + +239.2 + +237.0 + +4/4 + +557 ns + +No + +✗ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 214.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 214.9, required 190.0, margin 24.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 351.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.181858× + +219.3 + +214.9 + +2/2 + +351 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp nroot +mean: 217.2 bits +p01: 193.1 bits +worst: 176.0 bits +domains: 1/2 +minimum threshold margin: -14.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.4, p01 213.9, worst 213.0, required 190.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.0, p01 193.1, worst 176.0, required 190.0, margin -14.0, n=4096, seed=10322096095657499357 +benchmark: 1,144 ns/iteration, speed vs FLTX 0.31× + +217.2 + +176.0 + +1/2 + +1144 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cbrt +mean: 216.0 bits +p01: 214.2 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.1, p01 214.3, worst 214.1, required 190.0, margin 24.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.1, required 190.0, margin 24.1, n=4096, seed=10322096095657499357 +benchmark: 766.3 ns/iteration, speed vs FLTX 0.46× + +216.0 + +214.1 + +2/2 + +766 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::cbrt +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 239.2, p01 237.3, worst 237.1, required 190.0, margin 47.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499357 +benchmark: 3,253 ns/iteration, speed vs FLTX 0.11× + +239.0 + +237.0 + +2/2 + +3253 ns + +No + +✗ + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 172.0 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 4.454428× + +229.9 + +213.9 + +2/2 + +172 ns + +Both + +✓ + + +qdpp: hypot is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::hypot +mean: 228.7 bits +p01: 213.2 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 215.3, p01 213.2, worst 212.9, required 190.0, margin 22.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 242.0, p01 213.6, worst 212.9, required 190.0, margin 22.9, n=4096, seed=10322096095657499357 +benchmark: 1,249 ns/iteration, speed vs FLTX 0.14× + +228.7 + +212.9 + +2/2 + +1249 ns + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::hypot +mean: 251.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 239.0, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 264.8, p01 237.6, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 766.0 ns/iteration, speed vs FLTX 0.22× + +251.9 + +237.0 + +2/2 + +766 ns + +No + +✓ + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,690 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.745029× + +216.8 + +211.1 + +2/2 + +2690 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp pow +mean: 216.4 bits +p01: 211.7 bits +worst: 210.6 bits +domains: 2/2 +minimum threshold margin: 30.6 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 215.1, p01 211.7, worst 210.6, required 180.0, margin 30.6, n=4099, seed=10322096095657499356 +near_one: mean 217.6, p01 214.5, worst 213.9, required 180.0, margin 33.9, n=4099, seed=10322096095657499359 +benchmark: 7,474 ns/iteration, speed vs FLTX 0.36× + +216.4 + +210.6 + +2/2 + +7474 ns + +No + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 7,384 ns/iteration, speed vs FLTX 0.36× + +215.9 + +214.0 + +2/2 + +7384 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::pow +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 34,717 ns/iteration, speed vs FLTX 0.08× + +238.9 + +237.0 + +2/2 + +34717 ns + +No + +✗ + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 109.8 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.244324× + +217.2 + +213.7 + +2/2 + +110 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp npwr +mean: 215.0 bits +p01: 212.8 bits +worst: 212.1 bits +domains: 2/2 +minimum threshold margin: 22.1 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 215.1, p01 212.8, worst 212.1, required 190.0, margin 22.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.0, p01 212.8, worst 212.1, required 190.0, margin 22.1, n=4096, seed=10322096095657499357 +benchmark: 136.7 ns/iteration, speed vs FLTX 0.80× + +215.0 + +212.1 + +2/2 + +137 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow(value, int) +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 563.8 ns/iteration, speed vs FLTX 0.19× + +216.0 + +214.0 + +2/2 + +564 ns + +Both + +✓ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.7 bits +p01: 210.0 bits +worst: 208.9 bits +domains: 2/2 +minimum threshold margin: 28.9 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 210.0, worst 208.9, required 180.0, margin 28.9, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 1,031 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.143162× + +216.7 + +208.9 + +2/2 + +1031 ns + +Both + +- + + +qdpp qd_real +API: qdpp exp +mean: 216.6 bits +p01: 210.0 bits +worst: 209.1 bits +domains: 2/2 +minimum threshold margin: 29.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 210.0, worst 209.1, required 180.0, margin 29.1, n=4099, seed=10322096095657499291 +moderate: mean 217.2, p01 214.7, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 2,210 ns/iteration, speed vs FLTX 0.47× + +216.6 + +209.1 + +2/2 + +2210 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 3,163 ns/iteration, speed vs FLTX 0.33× + +215.9 + +214.0 + +2/2 + +3163 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 4,394 ns/iteration, speed vs FLTX 0.23× + +239.0 + +237.0 + +2/2 + +4394 ns + +No + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 873.7 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 4.134421× + +218.0 + +214.2 + +2/2 + +874 ns + +Both + +- + + +qdpp: exp2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp2 +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 3,612 ns/iteration, speed vs FLTX 0.24× + +216.0 + +214.0 + +2/2 + +3612 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp2 +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +benchmark: 16,602 ns/iteration, speed vs FLTX 0.05× + +238.9 + +237.0 + +2/2 + +16602 ns + +No + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 227.2 bits +p01: 207.5 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.0, p01 207.5, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 1,033 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.117347× + +227.2 + +207.0 + +2/2 + +1033 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp expm1 +mean: 226.8 bits +p01: 203.4 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 235.5, p01 203.4, worst 203.0, required 180.0, margin 23.0, n=4098, seed=10322096095657499336 +moderate: mean 218.1, p01 214.4, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499356 +benchmark: 2,187 ns/iteration, speed vs FLTX 0.47× + +226.8 + +0.0 + +1/2 + +2187 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::expm1 +mean: 227.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 3,552 ns/iteration, speed vs FLTX 0.29× + +227.5 + +214.0 + +2/2 + +3552 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::expm1 +mean: 250.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4098, seed=10322096095657499336 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 4,507 ns/iteration, speed vs FLTX 0.23× + +250.1 + +237.0 + +2/2 + +4507 ns + +No + +✗ + + + + +Logarithms + + + + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.8 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.2, p01 215.3, worst 215.0, required 180.0, margin 35.0, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,719 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.204203× + +217.8 + +213.3 + +3/3 + +1719 ns + +Both + +- + + +qdpp qd_real +API: qdpp log +mean: 205.1 bits +p01: 62.2 bits +worst: 61.6 bits +domains: 2/3 +minimum threshold margin: -118.4 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 180.1, p01 62.2, worst 61.6, required 180.0, margin -118.4, n=4096, seed=10322096095657499354 +near_one: mean 216.1, p01 213.6, worst 212.8, required 180.0, margin 32.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 219.2, p01 198.3, worst 182.9, required 180.0, margin 2.9, n=4096, seed=10322096095657499357 +benchmark: 6,967 ns/iteration, speed vs FLTX 0.25× + +205.1 + +61.6 + +2/3 + +6967 ns + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.7, p01 214.4, worst 214.3, required 180.0, margin 34.3, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 5,508 ns/iteration, speed vs FLTX 0.31× + +215.9 + +214.0 + +3/3 + +5508 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::log +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.8, p01 237.3, worst 237.3, required 180.0, margin 57.3, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 6,651 ns/iteration, speed vs FLTX 0.26× + +238.9 + +237.0 + +3/3 + +6651 ns + +No + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 221.1, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,771 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.3209× + +218.6 + +213.2 + +3/3 + +1771 ns + +Both + +- + + +qdpp: log2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log2 +mean: 217.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 220.0, p01 214.9, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 5,882 ns/iteration, speed vs FLTX 0.30× + +217.3 + +214.0 + +3/3 + +5882 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::log2 +mean: 240.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 243.0, p01 237.9, worst 237.8, required 180.0, margin 57.8, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 6,768 ns/iteration, speed vs FLTX 0.26× + +240.3 + +237.0 + +3/3 + +6768 ns + +No + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 217.6, p01 215.1, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,766 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.833628× + +217.4 + +213.3 + +3/3 + +1766 ns + +Both + +- + + +qdpp qd_real +API: qdpp log10 +mean: 203.1 bits +p01: 62.2 bits +worst: 61.6 bits +domains: 2/3 +minimum threshold margin: -118.4 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 177.4, p01 62.2, worst 61.6, required 180.0, margin -118.4, n=4096, seed=10322096095657499354 +near_one: mean 215.7, p01 213.3, worst 212.7, required 180.0, margin 32.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.1, p01 198.3, worst 182.9, required 180.0, margin 2.9, n=4096, seed=10322096095657499357 +benchmark: 7,264 ns/iteration, speed vs FLTX 0.24× + +203.1 + +61.6 + +2/3 + +7264 ns + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log10 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.8, p01 214.1, worst 214.1, required 180.0, margin 34.1, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 10,907 ns/iteration, speed vs FLTX 0.16× + +215.9 + +214.0 + +3/3 + +10907 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::log10 +mean: 238.8 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.6, p01 237.1, worst 237.1, required 180.0, margin 57.1, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 6,771 ns/iteration, speed vs FLTX 0.26× + +238.8 + +237.0 + +3/3 + +6771 ns + +No + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 226.8 bits +p01: 207.4 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.1, p01 207.4, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,757 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.175041× + +226.8 + +207.0 + +2/2 + +1757 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp log1p +mean: 226.4 bits +p01: 203.4 bits +worst: 203.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 235.6, p01 203.4, worst 203.0, required 180.0, margin 23.0, n=4098, seed=10322096095657499336 +moderate: mean 217.2, p01 214.1, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 6,784 ns/iteration, speed vs FLTX 0.26× + +226.4 + +203.0 + +2/2 + +6784 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log1p +mean: 227.4 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 5,577 ns/iteration, speed vs FLTX 0.31× + +227.4 + +214.0 + +2/2 + +5577 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::log1p +mean: 250.1 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.4, worst 237.0, required 180.0, margin 57.0, n=4098, seed=10322096095657499336 +moderate: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 7,403 ns/iteration, speed vs FLTX 0.24× + +250.1 + +237.0 + +2/2 + +7403 ns + +No + +✗ + + + + +Trigonometric + + + + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 887.9 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.192328× + +222.3 + +202.9 + +3/3 + +888 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sin +mean: 142.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 88.2, p01 40.3, worst 0.0, required 180.0, margin -180.0, n=4104, seed=10322096095657499353 +moderate: mean 215.8, p01 210.4, worst 206.1, required 180.0, margin 26.1, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 125.3, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4315, seed=10322096095657499369 +benchmark: 1,947 ns/iteration, speed vs FLTX 0.46× + +142.8 + +0.0 + +1/3 + +1947 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sin +mean: 218.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.3, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 222.9, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 3,656 ns/iteration, speed vs FLTX 0.24× + +218.5 + +214.0 + +3/3 + +3656 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sin +mean: 241.2 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 245.1, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 5,586 ns/iteration, speed vs FLTX 0.16× + +241.2 + +237.0 + +3/3 + +5586 ns + +No + +✗ + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 861.6 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.270025× + +226.8 + +208.7 + +3/3 + +862 ns + +Both + +- + + +qdpp qd_real +API: qdpp cos +mean: 161.9 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 171.1, p01 59.1, worst 0.0, required 180.0, margin -180.0, n=4104, seed=10322096095657499353 +moderate: mean 215.7, p01 210.1, worst 205.0, required 180.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 102.2, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4315, seed=10322096095657499369 +benchmark: 1,956 ns/iteration, speed vs FLTX 0.44× + +161.9 + +0.0 + +1/3 + +1956 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cos +mean: 219.4 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 220.7, p01 214.5, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 221.2, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 2,751 ns/iteration, speed vs FLTX 0.31× + +219.4 + +214.0 + +3/3 + +2751 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::cos +mean: 241.7 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 242.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 243.4, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 5,592 ns/iteration, speed vs FLTX 0.15× + +241.7 + +237.0 + +3/3 + +5592 ns + +No + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,062 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.977119× + +- + +- + +- + +1062 ns + +- + +- + + +qdpp qd_real +API: qdpp sincos +benchmark: 2,099 ns/iteration, speed vs FLTX 0.51× + +- + +- + +- + +2099 ns + +- + +- + + +mpfr64: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::sincos +benchmark: 11,212 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +11212 ns + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,123 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.08266× + +217.1 + +202.9 + +3/3 + +1123 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp tan +mean: 111.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -170.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 86.8, p01 40.3, worst 0.0, required 170.0, margin -170.0, n=4104, seed=10322096095657499353 +moderate: mean 214.8, p01 209.4, worst 205.0, required 170.0, margin 35.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 36.9, p01 0.0, worst 0.0, required 170.0, margin -170.0, n=4315, seed=10322096095657499369 +benchmark: 2,338 ns/iteration, speed vs FLTX 0.48× + +111.5 + +0.0 + +1/3 + +2338 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tan +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 44.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.1, p01 214.1, worst 214.0, required 170.0, margin 44.0, n=4104, seed=10322096095657499353 +moderate: mean 216.0, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 215.9, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4315, seed=10322096095657499369 +benchmark: 4,370 ns/iteration, speed vs FLTX 0.26× + +216.0 + +214.0 + +3/3 + +4370 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 67.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 238.9, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4104, seed=10322096095657499353 +moderate: mean 239.0, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 238.9, p01 237.2, worst 237.1, required 170.0, margin 67.1, n=4315, seed=10322096095657499369 +benchmark: 6,601 ns/iteration, speed vs FLTX 0.17× + +239.0 + +237.0 + +3/3 + +6601 ns + +No + +✗ + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,338 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 6.459461× + +217.9 + +214.4 + +2/2 + +1338 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp asin +mean: 217.2 bits +p01: 212.9 bits +worst: 212.3 bits +domains: 2/2 +minimum threshold margin: 32.3 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 216.0, p01 212.9, worst 212.3, required 180.0, margin 32.3, n=4099, seed=10322096095657499356 +benchmark: 8,641 ns/iteration, speed vs FLTX 0.15× + +217.2 + +212.3 + +2/2 + +8641 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asin +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.1, p01 214.7, worst 214.7, required 180.0, margin 34.7, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 11,602 ns/iteration, speed vs FLTX 0.12× + +216.0 + +214.0 + +2/2 + +11602 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asin +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.1, p01 237.7, worst 237.7, required 180.0, margin 57.7, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 11,114 ns/iteration, speed vs FLTX 0.12× + +239.0 + +237.0 + +2/2 + +11114 ns + +No + +✗ + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,383 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 6.289228× + +216.0 + +192.5 + +2/2 + +1383 ns + +Both + +- + + +qdpp qd_real +API: qdpp acos +mean: 217.3 bits +p01: 213.6 bits +worst: 212.5 bits +domains: 2/2 +minimum threshold margin: 32.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.4, p01 214.0, worst 213.0, required 180.0, margin 33.0, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 213.6, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +benchmark: 8,698 ns/iteration, speed vs FLTX 0.16× + +217.3 + +212.5 + +2/2 + +8698 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acos +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 11,961 ns/iteration, speed vs FLTX 0.12× + +215.9 + +214.0 + +2/2 + +11961 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::acos +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4105, seed=10322096095657499355 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 11,097 ns/iteration, speed vs FLTX 0.12× + +238.9 + +237.0 + +2/2 + +11097 ns + +No + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 880.6 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 4.32102× + +218.1 + +214.7 + +2/2 + +881 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atan +mean: 216.7 bits +p01: 213.1 bits +worst: 212.4 bits +domains: 2/2 +minimum threshold margin: 32.4 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.5, p01 213.8, worst 212.6, required 180.0, margin 32.6, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 213.1, worst 212.4, required 180.0, margin 32.4, n=4099, seed=10322096095657499359 +benchmark: 6,092 ns/iteration, speed vs FLTX 0.14× + +216.7 + +212.4 + +2/2 + +6092 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,805 ns/iteration, speed vs FLTX 0.23× + +216.0 + +214.0 + +2/2 + +3805 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 10,086 ns/iteration, speed vs FLTX 0.09× + +239.0 + +237.0 + +2/2 + +10086 ns + +Inf + +✗ + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 934.3 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 4.253327× + +217.9 + +214.3 + +3/3 + +934 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atan2 +mean: 216.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 0.0, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=8, seed=10322096095657499351 +moderate: mean 217.0, p01 213.4, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 213.0, worst 211.8, required 180.0, margin 31.8, n=4099, seed=10322096095657499359 +benchmark: 6,034 ns/iteration, speed vs FLTX 0.15× + +216.3 + +0.0 + +2/3 + +6034 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan2 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 215.3, p01 215.2, worst 215.2, required 180.0, margin 35.2, n=8, seed=10322096095657499351 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,974 ns/iteration, speed vs FLTX 0.24× + +215.9 + +214.0 + +3/3 + +3974 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan2 +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 240.6, p01 237.8, worst 237.8, required 180.0, margin 57.8, n=8, seed=10322096095657499351 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 10,175 ns/iteration, speed vs FLTX 0.09× + +239.0 + +237.0 + +3/3 + +10175 ns + +Inf + +✗ + + + + +Hyperbolic + + + + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,332 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.880107× + +217.0 + +213.8 + +2/2 + +1332 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sinh +mean: 216.8 bits +p01: 214.2 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 32.9 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.8, p01 214.2, worst 212.9, required 180.0, margin 32.9, n=4099, seed=10322096095657499359 +benchmark: 2,505 ns/iteration, speed vs FLTX 0.53× + +216.8 + +212.9 + +2/2 + +2505 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sinh +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,869 ns/iteration, speed vs FLTX 0.34× + +216.0 + +214.0 + +2/2 + +3869 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 4,970 ns/iteration, speed vs FLTX 0.27× + +238.9 + +237.0 + +2/2 + +4970 ns + +No + +✗ + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,326 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.875465× + +217.5 + +214.2 + +2/2 + +1326 ns + +Both + +- + + +qdpp qd_real +API: qdpp cosh +mean: 217.3 bits +p01: 214.5 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 217.0, p01 214.5, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +near_one: mean 217.6, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 2,487 ns/iteration, speed vs FLTX 0.53× + +217.3 + +213.8 + +2/2 + +2487 ns + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,724 ns/iteration, speed vs FLTX 0.36× + +215.9 + +214.0 + +2/2 + +3724 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::cosh +mean: 238.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 4,679 ns/iteration, speed vs FLTX 0.28× + +238.9 + +237.0 + +2/2 + +4679 ns + +No + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,277 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.964431× + +219.1 + +214.0 + +2/2 + +1277 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp tanh +mean: 218.9 bits +p01: 214.6 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 219.8, p01 214.6, worst 212.9, required 180.0, margin 32.9, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 214.9, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 2,509 ns/iteration, speed vs FLTX 0.51× + +218.9 + +212.9 + +2/2 + +2509 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tanh +mean: 216.2 bits +p01: 214.3 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.6, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,841 ns/iteration, speed vs FLTX 0.33× + +216.2 + +214.0 + +2/2 + +3841 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tanh +mean: 239.2 bits +p01: 237.2 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.0, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 4,814 ns/iteration, speed vs FLTX 0.27× + +239.2 + +237.1 + +2/2 + +4814 ns + +Inf + +✗ + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,637 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.536521× + +217.2 + +213.0 + +2/2 + +2637 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp asinh +mean: 216.9 bits +p01: 213.7 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.3, p01 214.2, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499356 +near_one: mean 216.4, p01 213.7, worst 212.7, required 180.0, margin 32.7, n=4099, seed=10322096095657499359 +benchmark: 6,688 ns/iteration, speed vs FLTX 0.39× + +216.9 + +0.0 + +1/2 + +6688 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asinh +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 15,910 ns/iteration, speed vs FLTX 0.17× + +215.9 + +214.0 + +2/2 + +15910 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 36,447 ns/iteration, speed vs FLTX 0.07× + +238.9 + +237.0 + +2/2 + +36447 ns + +No + +✗ + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,439 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 3.002323× + +217.7 + +213.7 + +2/2 + +2439 ns + +Both + +- + + +qdpp qd_real +API: qdpp acosh +mean: 217.0 bits +p01: 213.6 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 216.3, p01 213.6, worst 0.0, required 180.0, margin -180.0, n=4101, seed=10322096095657499355 +moderate: mean 217.7, p01 214.7, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499275 +benchmark: 7,321 ns/iteration, speed vs FLTX 0.33× + +217.0 + +0.0 + +0/2 + +7321 ns + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.8, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4101, seed=10322096095657499355 +moderate: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499275 +benchmark: 8,638 ns/iteration, speed vs FLTX 0.28× + +215.9 + +214.0 + +2/2 + +8638 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::acosh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.7, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4101, seed=10322096095657499355 +moderate: mean 239.0, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499275 +benchmark: 33,907 ns/iteration, speed vs FLTX 0.07× + +238.9 + +237.0 + +2/2 + +33907 ns + +No + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,281 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.866181× + +218.3 + +213.3 + +2/2 + +2281 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atanh +mean: 217.7 bits +p01: 213.8 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 218.6, p01 215.3, worst 0.0, required 180.0, margin -180.0, n=4105, seed=10322096095657499355 +moderate: mean 216.8, p01 213.8, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +benchmark: 7,169 ns/iteration, speed vs FLTX 0.32× + +217.7 + +0.0 + +1/2 + +7169 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atanh +mean: 216.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.5, p01 214.9, worst 214.9, required 180.0, margin 34.9, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 6,536 ns/iteration, speed vs FLTX 0.35× + +216.2 + +214.0 + +2/2 + +6536 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atanh +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.4, p01 237.9, worst 237.4, required 180.0, margin 57.4, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 7,819 ns/iteration, speed vs FLTX 0.29× + +239.1 + +237.0 + +2/2 + +7819 ns + +No + +✗ + + + + +Special + + + + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 10,046 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 8.14519× + +208.2 + +189.8 + +2/2 + +10046 ns + +Both + +- + + +qdpp: erfc is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erfc +mean: 216.1 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 216.2, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 81,827 ns/iteration, speed vs FLTX 0.12× + +216.1 + +214.0 + +2/2 + +81827 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::erfc +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 239.2, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 441,520 ns/iteration, speed vs FLTX 0.02× + +239.1 + +237.0 + +2/2 + +441520 ns + +Inf + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 15,377 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.474216× + +212.8 + +196.8 + +2/2 + +15377 ns + +Both + +✓ + + +qdpp: erf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erf +mean: 216.3 bits +p01: 214.3 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 34.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.5, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499359 +benchmark: 38,047 ns/iteration, speed vs FLTX 0.40× + +216.3 + +214.1 + +2/2 + +38047 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::erf +mean: 239.2 bits +p01: 237.3 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.6, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.3, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 441,802 ns/iteration, speed vs FLTX 0.03× + +239.2 + +237.1 + +2/2 + +441802 ns + +Inf + +✗ + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 9,844 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.338413× + +209.0 + +202.5 + +1/1 + +9844 ns + +Both + +- + + +qdpp: tgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499320 +benchmark: 32,862 ns/iteration, speed vs FLTX 0.30× + +215.9 + +214.0 + +1/1 + +32862 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::tgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499320 +benchmark: 158,109 ns/iteration, speed vs FLTX 0.06× + +238.9 + +237.0 + +1/1 + +158109 ns + +No + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 10,612 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.813015× + +211.9 + +199.2 + +1/1 + +10612 ns + +Both + +- + + +qdpp: lgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499323 +benchmark: 29,853 ns/iteration, speed vs FLTX 0.36× + +215.9 + +214.0 + +1/1 + +29853 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::lgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499323 +benchmark: 141,895 ns/iteration, speed vs FLTX 0.07× + +238.9 + +237.0 + +1/1 + +141895 ns + +No + +- + + + + +Comparisons + + + + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.790 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.690074× + += + += + +1/1 + +0.79 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.545 ns/iteration, speed vs FLTX 1.45× + += + += + +1/1 + +0.54 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.42 ns/iteration, speed vs FLTX 0.12× + += + += + +1/1 + +6.4 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.59 ns/iteration, speed vs FLTX 0.17× + += + += + +1/1 + +4.6 ns + +Both + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.735 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.736954× + += + += + +1/1 + +0.73 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.541 ns/iteration, speed vs FLTX 1.36× + += + += + +1/1 + +0.54 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.43 ns/iteration, speed vs FLTX 0.11× + += + += + +1/1 + +6.4 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.45 ns/iteration, speed vs FLTX 0.17× + += + += + +1/1 + +4.5 ns + +Both + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.32 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.834595× + += + += + +1/1 + +1.3 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.10 ns/iteration, speed vs FLTX 1.20× + += + += + +1/1 + +1.1 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.45 ns/iteration, speed vs FLTX 0.20× + += + += + +1/1 + +6.4 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.22 ns/iteration, speed vs FLTX 0.25× + += + += + +1/1 + +5.2 ns + +Both + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.59 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.80137× + += + += + +1/1 + +1.6 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.27 ns/iteration, speed vs FLTX 1.25× + += + += + +1/1 + +1.3 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.54 ns/iteration, speed vs FLTX 0.24× + += + += + +1/1 + +6.5 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.47 ns/iteration, speed vs FLTX 0.29× + += + += + +1/1 + +5.5 ns + +Both + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.26 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.879104× + += + += + +1/1 + +1.3 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.10 ns/iteration, speed vs FLTX 1.14× + += + += + +1/1 + +1.1 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.56 ns/iteration, speed vs FLTX 0.19× + += + += + +1/1 + +6.6 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.41 ns/iteration, speed vs FLTX 0.23× + += + += + +1/1 + +5.4 ns + +Both + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.36 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.807541× + += + += + +1/1 + +1.4 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.10 ns/iteration, speed vs FLTX 1.24× + += + += + +1/1 + +1.1 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.50 ns/iteration, speed vs FLTX 0.21× + += + += + +1/1 + +6.5 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.27 ns/iteration, speed vs FLTX 0.26× + += + += + +1/1 + +5.3 ns + +Both + +- + + + + +Random + + + + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 11.01 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 3.413646× + +- + +- + +- + +11.0 ns + +- + +- + + +qdpp qd_real +API: qdpp qdrand +benchmark: 37.59 ns/iteration, speed vs FLTX 0.29× + +- + +- + +- + +37.6 ns + +- + +- + + +mpfr64: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 271.4 ns/iteration (no available competitor) + +- + +- + +- + +271 ns + +- + +- + + +qdpp: normal is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 47.81 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.095773× + +- + +- + +- + +47.8 ns + +- + +- + + +qdpp qd_real +API: same expression +benchmark: 100.2 ns/iteration, speed vs FLTX 0.48× + +- + +- + +- + +100 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same expression +benchmark: 403.5 ns/iteration, speed vs FLTX 0.12× + +- + +- + +- + +404 ns + +- + +- + + +TLFloat Octuple +API: same expression +benchmark: 250.6 ns/iteration, speed vs FLTX 0.19× + +- + +- + +- + +251 ns + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 142.7 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.360034× + +- + +- + +- + +143 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 336.8 ns/iteration, speed vs FLTX 0.42× + +- + +- + +- + +337 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 823.4 ns/iteration, speed vs FLTX 0.17× + +- + +- + +- + +823 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 518.3 ns/iteration, speed vs FLTX 0.28× + +- + +- + +- + +518 ns + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,793 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.204634× + +- + +- + +- + +1793 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 3,954 ns/iteration, speed vs FLTX 0.45× + +- + +- + +- + +3954 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 6,088 ns/iteration, speed vs FLTX 0.29× + +- + +- + +- + +6088 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 11,450 ns/iteration, speed vs FLTX 0.16× + +- + +- + +- + +11450 ns + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 111.0 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.053802× + +- + +- + +- + +111 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 227.9 ns/iteration, speed vs FLTX 0.49× + +- + +- + +- + +228 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 809.9 ns/iteration, speed vs FLTX 0.14× + +- + +- + +- + +810 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 531.9 ns/iteration, speed vs FLTX 0.21× + +- + +- + +- + +532 ns + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 536.5 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.808077× + +- + +- + +- + +536 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 970.0 ns/iteration, speed vs FLTX 0.55× + +- + +- + +- + +970 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 3,379 ns/iteration, speed vs FLTX 0.16× + +- + +- + +- + +3379 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 2,085 ns/iteration, speed vs FLTX 0.26× + +- + +- + +- + +2085 ns + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 485.7 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.583557× + +- + +- + +- + +486 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 769.1 ns/iteration, speed vs FLTX 0.63× + +- + +- + +- + +769 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 2,621 ns/iteration, speed vs FLTX 0.19× + +- + +- + +- + +2621 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 1,889 ns/iteration, speed vs FLTX 0.26× + +- + +- + +- + +1889 ns + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 238.0 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.839733× + +- + +- + +- + +238 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 437.8 ns/iteration, speed vs FLTX 0.54× + +- + +- + +- + +438 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 945.6 ns/iteration, speed vs FLTX 0.25× + +- + +- + +- + +946 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 741.0 ns/iteration, speed vs FLTX 0.32× + +- + +- + +- + +741 ns + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 8,838 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.199434× + +- + +- + +- + +8838 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 19,438 ns/iteration, speed vs FLTX 0.45× + +- + +- + +- + +19438 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 27,850 ns/iteration, speed vs FLTX 0.32× + +- + +- + +- + +27850 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 40,612 ns/iteration, speed vs FLTX 0.22× + +- + +- + +- + +40612 ns + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,756 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 3.4326× + +- + +- + +- + +4756 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 16,325 ns/iteration, speed vs FLTX 0.29× + +- + +- + +- + +16325 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 22,212 ns/iteration, speed vs FLTX 0.21× + +- + +- + +- + +22212 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 33,938 ns/iteration, speed vs FLTX 0.14× + +- + +- + +- + +33938 ns + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/windows_x86_64_ClangCL_f128_fastmath_overview.svg b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f128_fastmath_overview.svg new file mode 100644 index 0000000..430e607 --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f128_fastmath_overview.svg @@ -0,0 +1,3020 @@ + + + + +f128 consumer fast-math metrics overview — Windows / x64 / Clang (clang-cl) +Accuracy excludes the subnormal domain; support is reported separately. Speed is relative to FLTX. + +operation + + +bl::f128 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + + +Arithmetic + + + + +add + +fltx bl::f128 +API: bl::add +mean: 119.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 0.923 ns/iteration (no available competitor) + +119.1 + +105.7 + +1/1 + +0.923 ns + +NaN + +✗ + +✓ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 118.9 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 0.923 ns/iteration (no available competitor) + +118.9 + +105.7 + +1/1 + +0.923 ns + +NaN + +✗ + +✓ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.5 bits +p01: 105.2 bits +worst: 104.7 bits +domains: 1/1 +minimum threshold margin: 14.7 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 108.5, p01 105.2, worst 104.7, required 90.0, margin 14.7, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 2.49 ns/iteration (no available competitor) + +108.5 + +104.7 + +1/1 + +2.49 ns + +NaN + +✗ + +✓ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 1/1 +minimum threshold margin: 15.1 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 1.59 ns/iteration (no available competitor) + +110.9 + +105.1 + +1/1 + +1.59 ns + +NaN + +✗ + +✓ + + + + +IO + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 186.1 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +186.1 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 154.3 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +154.3 ns + +Both + +✓ + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 107.1 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 107.1, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 202.5 ns/iteration (no available competitor) + +109.9 + +106.0 + +2/2 + +202.5 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.57 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.57 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.99 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.99 ns + +Both + +✓ + +- + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.20 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.20 ns + +Both + +✓ + +- + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 7.50 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +7.50 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 9.54 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +9.54 ns + +Both + +✓ + +- + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 4.44 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +4.44 ns + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 4.08 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +4.08 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 77.68 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +77.68 ns + +Both + +✓ + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 109.5 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +109.5 ns + +Both + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.34 ns/iteration (no available competitor) + +exact + +exact + +3/3 + +18.34 ns + +Both + +✓ + +- + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 23.68 ns/iteration (no available competitor) + +138.0 + +103.1 + +1/1 + +23.68 ns + +Both + +✓ + +- + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 23.07 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +23.07 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.12 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.12 ns + +Both + +✓ + +✓ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.14 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.14 ns + +Both + +✓ + +- + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.2 bits +p01: 104.3 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 108.7, p01 104.3, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.4, p01 105.7, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 5.56 ns/iteration (no available competitor) + +117.2 + +99.6 + +3/3 + +5.56 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 23.63 ns/iteration (no available competitor) + +109.0 + +105.2 + +2/2 + +23.63 ns + +Both + +✓ + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.805 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +0.805 ns + +Inf + +✓ + +- + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.729 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +0.729 ns + +Inf + +✓ + +- + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: NaN +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.76 ns/iteration (no available competitor) + +138.0 + +106.2 + +2/2 + +2.76 ns + +NaN + +✓ + +- + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.457 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.457 ns + +Both + +✓ + +- + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.43 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.43 ns + +Both + +✓ + +- + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.36 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.36 ns + +Both + +✓ + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.36 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.36 ns + +Both + +✓ + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.41 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.41 ns + +Both + +✓ + +✓ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.82 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +5.82 ns + +NaN + +✓ + +- + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.73 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.73 ns + +- + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.68 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.68 ns + +NaN + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 4.23 ns/iteration (no available competitor) + +- + +- + +- + +4.23 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 4.20 ns/iteration (no available competitor) + +- + +- + +- + +4.20 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.10 ns/iteration (no available competitor) + +108.7 + +105.4 + +2/2 + +1.10 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.5 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 3/3 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 110.5, p01 106.7, worst 106.2, required 90.0, margin 16.2, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 3.82 ns/iteration (no available competitor) + +109.5 + +104.7 + +3/3 + +3.82 ns + +Both + +✓ + +✓ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.0 bits +p01: 104.1 bits +worst: 103.0 bits +domains: 2/2 +minimum threshold margin: 13.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.1, p01 104.3, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 107.9, p01 104.1, worst 103.0, required 90.0, margin 13.0, n=4096, seed=10322096095657499357 +benchmark: 22.46 ns/iteration (no available competitor) + +108.0 + +103.0 + +2/2 + +22.46 ns + +Both + +✓ + +- + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 10.39 ns/iteration (no available competitor) + +122.4 + +104.4 + +2/2 + +10.39 ns + +Both + +✓ + +- + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 191.8 ns/iteration (no available competitor) + +107.1 + +101.3 + +2/2 + +191.8 ns + +Both + +✓ + +- + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 23.84 ns/iteration (no available competitor) + +106.5 + +103.2 + +2/2 + +23.84 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 107.0 bits +p01: 104.3 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.6, p01 104.3, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.4, p01 104.8, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 92.03 ns/iteration (no available competitor) + +107.0 + +103.6 + +2/2 + +92.03 ns + +Both + +- + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 90.39 ns/iteration (no available competitor) + +108.9 + +105.1 + +2/2 + +90.39 ns + +Both + +- + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 93.96 ns/iteration (no available competitor) + +121.6 + +104.1 + +2/2 + +93.96 ns + +Both + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.6, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 122.8 ns/iteration (no available competitor) + +108.4 + +103.7 + +3/3 + +122.8 ns + +Both + +- + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 126.9 ns/iteration (no available competitor) + +108.8 + +103.7 + +3/3 + +126.9 ns + +Both + +- + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.5 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 127.2 ns/iteration (no available competitor) + +107.5 + +103.8 + +3/3 + +127.2 ns + +Both + +- + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 123.9 ns/iteration (no available competitor) + +121.4 + +103.6 + +2/2 + +123.9 ns + +Both + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 84.34 ns/iteration (no available competitor) + +110.6 + +98.6 + +3/3 + +84.34 ns + +Both + +✓ + +- + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 84.14 ns/iteration (no available competitor) + +113.5 + +99.2 + +3/3 + +84.14 ns + +Both + +- + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 94.10 ns/iteration (no available competitor) + +- + +- + +- + +94.10 ns + +- + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.7, required 75.0, margin 28.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 96.10 ns/iteration (no available competitor) + +106.7 + +98.6 + +3/3 + +96.10 ns + +Both + +✓ + +- + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 156.9 ns/iteration (no available competitor) + +108.6 + +104.1 + +2/2 + +156.9 ns + +Both + +✓ + +- + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 162.9 ns/iteration (no available competitor) + +106.5 + +81.6 + +2/2 + +162.9 ns + +Both + +- + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 108.9 ns/iteration (no available competitor) + +108.7 + +104.9 + +2/2 + +108.9 ns + +Both + +✓ + +- + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 116.0 ns/iteration (no available competitor) + +108.7 + +104.5 + +3/3 + +116.0 ns + +Both + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 106.2 ns/iteration (no available competitor) + +107.4 + +103.6 + +2/2 + +106.2 ns + +Both + +✓ + +- + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 105.3 ns/iteration (no available competitor) + +107.9 + +104.4 + +2/2 + +105.3 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 111.3 ns/iteration (no available competitor) + +109.2 + +103.8 + +2/2 + +111.3 ns + +Both + +✓ + +- + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 119.1 ns/iteration (no available competitor) + +108.1 + +103.8 + +2/2 + +119.1 ns + +Both + +✓ + +- + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 132.6 ns/iteration (no available competitor) + +108.0 + +103.7 + +2/2 + +132.6 ns + +Both + +- + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 129.4 ns/iteration (no available competitor) + +108.1 + +103.1 + +2/2 + +129.4 ns + +Both + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 549.5 ns/iteration (no available competitor) + +107.2 + +99.2 + +2/2 + +549.5 ns + +Both + +- + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 554.7 ns/iteration (no available competitor) + +110.9 + +103.5 + +2/2 + +554.7 ns + +Both + +✓ + +- + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 464.8 ns/iteration (no available competitor) + +105.6 + +97.3 + +1/1 + +464.8 ns + +Both + +- + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 528.5 ns/iteration (no available competitor) + +107.3 + +102.2 + +1/1 + +528.5 ns + +Both + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.855 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.855 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.933 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.933 ns + +Both + +- + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.13 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.13 ns + +Both + +- + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.08 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.08 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.13 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.13 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.22 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.22 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 7.23 ns/iteration (no available competitor) + +- + +- + +- + +7.23 ns + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 41.81 ns/iteration (no available competitor) + +- + +- + +- + +41.81 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 5.06 ns/iteration (no available competitor) + +- + +- + +- + +5.06 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 14.17 ns/iteration (no available competitor) + +- + +- + +- + +14.17 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 179.9 ns/iteration (no available competitor) + +- + +- + +- + +179.9 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 12.48 ns/iteration (no available competitor) + +- + +- + +- + +12.48 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 54.42 ns/iteration (no available competitor) + +- + +- + +- + +54.42 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 86.42 ns/iteration (no available competitor) + +- + +- + +- + +86.42 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 22.99 ns/iteration (no available competitor) + +- + +- + +- + +22.99 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 793.1 ns/iteration (no available competitor) + +- + +- + +- + +793.1 ns + +- + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 411.3 ns/iteration (no available competitor) + +- + +- + +- + +411.3 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/windows_x86_64_ClangCL_f128_fastmath_overview_compact.svg b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f128_fastmath_overview_compact.svg new file mode 100644 index 0000000..91acfbc --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f128_fastmath_overview_compact.svg @@ -0,0 +1,3017 @@ + + + + + +operation + + +bl::f128 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +Subnorm + +avg + +min + +pass + + + +Arithmetic + + + + +add + +fltx bl::f128 +API: bl::add +mean: 119.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 0.923 ns/iteration (no available competitor) + +119.1 + +105.7 + +1/1 + +0.92 ns + +NaN + +✗ + +✓ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 118.9 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 0.923 ns/iteration (no available competitor) + +118.9 + +105.7 + +1/1 + +0.92 ns + +NaN + +✗ + +✓ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.5 bits +p01: 105.2 bits +worst: 104.7 bits +domains: 1/1 +minimum threshold margin: 14.7 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 108.5, p01 105.2, worst 104.7, required 90.0, margin 14.7, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 2.49 ns/iteration (no available competitor) + +108.5 + +104.7 + +1/1 + +2.5 ns + +NaN + +✗ + +✓ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 1/1 +minimum threshold margin: 15.1 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 1.59 ns/iteration (no available competitor) + +110.9 + +105.1 + +1/1 + +1.6 ns + +NaN + +✗ + +✓ + + + + +IO + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 186.1 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +186 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 154.3 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +154 ns + +Both + +✓ + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 107.1 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 107.1, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 202.5 ns/iteration (no available competitor) + +109.9 + +106.0 + +2/2 + +203 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.57 ns/iteration (no available competitor) + += + += + +1/1 + +1.6 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.99 ns/iteration (no available competitor) + += + += + +1/1 + +2.0 ns + +Both + +✓ + +- + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.20 ns/iteration (no available competitor) + += + += + +1/1 + +2.2 ns + +Both + +✓ + +- + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 7.50 ns/iteration (no available competitor) + += + += + +1/1 + +7.5 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 9.54 ns/iteration (no available competitor) + += + += + +1/1 + +9.5 ns + +Both + +✓ + +- + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 4.44 ns/iteration (no available competitor) + += + += + +1/1 + +4.4 ns + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 4.08 ns/iteration (no available competitor) + += + += + +1/1 + +4.1 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 77.68 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +77.7 ns + +Both + +✓ + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 109.5 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +109 ns + +Both + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.34 ns/iteration (no available competitor) + += + += + +3/3 + +18.3 ns + +Both + +✓ + +- + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 23.68 ns/iteration (no available competitor) + +138.0 + +103.1 + +1/1 + +23.7 ns + +Both + +✓ + +- + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 23.07 ns/iteration (no available competitor) + += + += + +1/1 + +23.1 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.12 ns/iteration (no available competitor) + += + += + +1/1 + +3.1 ns + +Both + +✓ + +✓ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.14 ns/iteration (no available competitor) + += + += + +1/1 + +3.1 ns + +Both + +✓ + +- + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.2 bits +p01: 104.3 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 108.7, p01 104.3, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.4, p01 105.7, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 5.56 ns/iteration (no available competitor) + +117.2 + +99.6 + +3/3 + +5.6 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 23.63 ns/iteration (no available competitor) + +109.0 + +105.2 + +2/2 + +23.6 ns + +Both + +✓ + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.805 ns/iteration (no available competitor) + += + += + +2/2 + +0.81 ns + +Inf + +✓ + +- + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.729 ns/iteration (no available competitor) + += + += + +2/2 + +0.73 ns + +Inf + +✓ + +- + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: NaN +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.76 ns/iteration (no available competitor) + +138.0 + +106.2 + +2/2 + +2.8 ns + +NaN + +✓ + +- + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.457 ns/iteration (no available competitor) + += + += + +1/1 + +0.46 ns + +Both + +✓ + +- + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.43 ns/iteration (no available competitor) + += + += + +1/1 + +1.4 ns + +Both + +✓ + +- + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.36 ns/iteration (no available competitor) + += + += + +1/1 + +1.4 ns + +Both + +✓ + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.36 ns/iteration (no available competitor) + += + += + +1/1 + +1.4 ns + +Both + +✓ + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.41 ns/iteration (no available competitor) + += + += + +1/1 + +2.4 ns + +Both + +✓ + +✓ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.82 ns/iteration (no available competitor) + += + += + +2/2 + +5.8 ns + +NaN + +✓ + +- + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.73 ns/iteration (no available competitor) + += + += + +2/2 + +1.7 ns + +- + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.68 ns/iteration (no available competitor) + += + += + +2/2 + +1.7 ns + +NaN + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 4.23 ns/iteration (no available competitor) + +- + +- + +- + +4.2 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 4.20 ns/iteration (no available competitor) + +- + +- + +- + +4.2 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.10 ns/iteration (no available competitor) + +108.7 + +105.4 + +2/2 + +1.1 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.5 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 3/3 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 110.5, p01 106.7, worst 106.2, required 90.0, margin 16.2, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 3.82 ns/iteration (no available competitor) + +109.5 + +104.7 + +3/3 + +3.8 ns + +Both + +✓ + +✓ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.0 bits +p01: 104.1 bits +worst: 103.0 bits +domains: 2/2 +minimum threshold margin: 13.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.1, p01 104.3, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 107.9, p01 104.1, worst 103.0, required 90.0, margin 13.0, n=4096, seed=10322096095657499357 +benchmark: 22.46 ns/iteration (no available competitor) + +108.0 + +103.0 + +2/2 + +22.5 ns + +Both + +✓ + +- + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 10.39 ns/iteration (no available competitor) + +122.4 + +104.4 + +2/2 + +10.4 ns + +Both + +✓ + +- + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 191.8 ns/iteration (no available competitor) + +107.1 + +101.3 + +2/2 + +192 ns + +Both + +✓ + +- + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 23.84 ns/iteration (no available competitor) + +106.5 + +103.2 + +2/2 + +23.8 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 107.0 bits +p01: 104.3 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.6, p01 104.3, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.4, p01 104.8, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 92.03 ns/iteration (no available competitor) + +107.0 + +103.6 + +2/2 + +92.0 ns + +Both + +- + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 90.39 ns/iteration (no available competitor) + +108.9 + +105.1 + +2/2 + +90.4 ns + +Both + +- + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 93.96 ns/iteration (no available competitor) + +121.6 + +104.1 + +2/2 + +94.0 ns + +Both + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.6, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 122.8 ns/iteration (no available competitor) + +108.4 + +103.7 + +3/3 + +123 ns + +Both + +- + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 126.9 ns/iteration (no available competitor) + +108.8 + +103.7 + +3/3 + +127 ns + +Both + +- + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.5 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 127.2 ns/iteration (no available competitor) + +107.5 + +103.8 + +3/3 + +127 ns + +Both + +- + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 123.9 ns/iteration (no available competitor) + +121.4 + +103.6 + +2/2 + +124 ns + +Both + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 84.34 ns/iteration (no available competitor) + +110.6 + +98.6 + +3/3 + +84.3 ns + +Both + +✓ + +- + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 84.14 ns/iteration (no available competitor) + +113.5 + +99.2 + +3/3 + +84.1 ns + +Both + +- + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 94.10 ns/iteration (no available competitor) + +- + +- + +- + +94.1 ns + +- + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.7, required 75.0, margin 28.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 96.10 ns/iteration (no available competitor) + +106.7 + +98.6 + +3/3 + +96.1 ns + +Both + +✓ + +- + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 156.9 ns/iteration (no available competitor) + +108.6 + +104.1 + +2/2 + +157 ns + +Both + +✓ + +- + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 162.9 ns/iteration (no available competitor) + +106.5 + +81.6 + +2/2 + +163 ns + +Both + +- + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 108.9 ns/iteration (no available competitor) + +108.7 + +104.9 + +2/2 + +109 ns + +Both + +✓ + +- + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 116.0 ns/iteration (no available competitor) + +108.7 + +104.5 + +3/3 + +116 ns + +Both + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 106.2 ns/iteration (no available competitor) + +107.4 + +103.6 + +2/2 + +106 ns + +Both + +✓ + +- + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 105.3 ns/iteration (no available competitor) + +107.9 + +104.4 + +2/2 + +105 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 111.3 ns/iteration (no available competitor) + +109.2 + +103.8 + +2/2 + +111 ns + +Both + +✓ + +- + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 119.1 ns/iteration (no available competitor) + +108.1 + +103.8 + +2/2 + +119 ns + +Both + +✓ + +- + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 132.6 ns/iteration (no available competitor) + +108.0 + +103.7 + +2/2 + +133 ns + +Both + +- + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 129.4 ns/iteration (no available competitor) + +108.1 + +103.1 + +2/2 + +129 ns + +Both + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 549.5 ns/iteration (no available competitor) + +107.2 + +99.2 + +2/2 + +550 ns + +Both + +- + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 554.7 ns/iteration (no available competitor) + +110.9 + +103.5 + +2/2 + +555 ns + +Both + +✓ + +- + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 464.8 ns/iteration (no available competitor) + +105.6 + +97.3 + +1/1 + +465 ns + +Both + +- + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 528.5 ns/iteration (no available competitor) + +107.3 + +102.2 + +1/1 + +529 ns + +Both + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.855 ns/iteration (no available competitor) + += + += + +1/1 + +0.86 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.933 ns/iteration (no available competitor) + += + += + +1/1 + +0.93 ns + +Both + +- + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.13 ns/iteration (no available competitor) + += + += + +1/1 + +2.1 ns + +Both + +- + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.08 ns/iteration (no available competitor) + += + += + +1/1 + +2.1 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.13 ns/iteration (no available competitor) + += + += + +1/1 + +2.1 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.22 ns/iteration (no available competitor) + += + += + +1/1 + +2.2 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 7.23 ns/iteration (no available competitor) + +- + +- + +- + +7.2 ns + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 41.81 ns/iteration (no available competitor) + +- + +- + +- + +41.8 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 5.06 ns/iteration (no available competitor) + +- + +- + +- + +5.1 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 14.17 ns/iteration (no available competitor) + +- + +- + +- + +14.2 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 179.9 ns/iteration (no available competitor) + +- + +- + +- + +180 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 12.48 ns/iteration (no available competitor) + +- + +- + +- + +12.5 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 54.42 ns/iteration (no available competitor) + +- + +- + +- + +54.4 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 86.42 ns/iteration (no available competitor) + +- + +- + +- + +86.4 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 22.99 ns/iteration (no available competitor) + +- + +- + +- + +23.0 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 793.1 ns/iteration (no available competitor) + +- + +- + +- + +793 ns + +- + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 411.3 ns/iteration (no available competitor) + +- + +- + +- + +411 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/windows_x86_64_ClangCL_f128_overview.svg b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f128_overview.svg new file mode 100644 index 0000000..75adbf6 --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f128_overview.svg @@ -0,0 +1,7292 @@ + + + + +f128 metrics overview — Windows / x64 / Clang (clang-cl) +Accuracy is MPFR-relative; domain pass counts use FLTX release thresholds; speed is implementation ÷ FLTX. + +operation + + +bl::f128 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time + + + +boost (cpp_double_double) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +TLFloat (tlquad) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +Arithmetic + + + + + + +add + +fltx bl::f128 +API: bl::add +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 1.88 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.190252× + +120.3 + +105.7 + +2/2 + +1.88 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator+ +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 2.24 ns/iteration, speed vs FLTX 0.84× + +120.3 + +105.7 + +2/2 + +2.24 ns · 0.84× + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator+ +mean: 127.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 125.8, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 20.26 ns/iteration, speed vs FLTX 0.09× + +127.0 + +113.0 + +2/2 + +20.26 ns · 0.09× + +No + +✗ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 1.87 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.214281× + +120.1 + +105.7 + +2/2 + +1.87 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator- +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 2.27 ns/iteration, speed vs FLTX 0.82× + +120.1 + +105.7 + +2/2 + +2.27 ns · 0.82× + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator- +mean: 127.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 126.0, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 20.28 ns/iteration, speed vs FLTX 0.09× + +127.2 + +113.0 + +2/2 + +20.28 ns · 0.09× + +No + +✗ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 1.20 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.932295× + +108.7 + +105.4 + +2/2 + +1.20 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: Boost operator* +mean: 108.5 bits +p01: 105.2 bits +worst: 104.7 bits +domains: 2/2 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 108.5, p01 105.2, worst 104.7, required 90.0, margin 14.7, n=4092, seed=10322096095657499292 +subnormal: mean 123.8, p01 108.1, worst 108.1, required 90.0, margin 18.1, n=8, seed=10322096095657499292 +benchmark: 2.31 ns/iteration, speed vs FLTX 0.52× + +108.5 + +104.7 + +2/2 + +2.31 ns · 0.52× + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator* +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4092, seed=10322096095657499292 +subnormal: mean 129.7, p01 113.5, worst 113.5, required 90.0, margin 23.5, n=8, seed=10322096095657499292 +benchmark: 22.75 ns/iteration, speed vs FLTX 0.05× + +115.0 + +113.0 + +2/2 + +22.75 ns · 0.05× + +No + +✗ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 1.71 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.132583× + +110.9 + +105.1 + +2/2 + +1.71 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: Boost operator/ +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 5.35 ns/iteration, speed vs FLTX 0.32× + +110.9 + +105.1 + +2/2 + +5.35 ns · 0.32× + +NaN + +✗ + + +TLFloat Quad +API: TLFloat operator/ +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 63.14 ns/iteration, speed vs FLTX 0.03× + +115.0 + +113.0 + +2/2 + +63.14 ns · 0.03× + +No + +✗ + + + + +IO + + + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 188.4 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.493327× + +114.0 + +110.7 + +2/2 + +188.4 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: Boost number::str +mean: 110.8 bits +p01: 106.0 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 16.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 112.0, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 109.5, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4096, seed=10322096095657499357 +benchmark: 658.2 ns/iteration, speed vs FLTX 0.29× + +110.8 + +106.0 + +2/2 + +658.2 ns · 0.29× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::to_string +mean: 110.7 bits +p01: 107.6 bits +worst: 107.3 bits +domains: 2/2 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.8, p01 107.9, worst 107.4, required 90.0, margin 17.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 110.5, p01 107.6, worst 107.3, required 90.0, margin 17.3, n=4096, seed=10322096095657499357 +benchmark: 1,642 ns/iteration, speed vs FLTX 0.11× + +110.7 + +107.3 + +2/2 + +1,642 ns · 0.11× + +Both + +✓ + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 157.4 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +157.4 ns + +Both + +✓ + + +cppdd: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 107.1 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 107.1, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 203.5 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.762362× + +109.9 + +106.0 + +2/2 + +203.5 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: Boost string constructor +mean: 107.1 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -106.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.9, p01 106.2, worst 106.0, required 106.0, margin 0.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 106.3, p01 0.0, worst 0.0, required 106.0, margin -106.0, n=4098, seed=10322096095657499308 +benchmark: 765.7 ns/iteration, speed vs FLTX 0.27× + +107.1 + +0.0 + +1/2 + +765.7 ns · 0.27× + +Both + +✗ + + +TLFloat Quad +API: TLFloat string constructor +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 7.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4098, seed=10322096095657499308 +benchmark: 1,046 ns/iteration, speed vs FLTX 0.19× + +114.9 + +113.0 + +2/2 + +1,046 ns · 0.19× + +No + +✗ + + + + +Rounding + + + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.36 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.071259× + +exact + +exact + +1/1 + +1.36 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.45 ns/iteration, speed vs FLTX 0.93× + +exact + +exact + +1/1 + +1.45 ns · 0.93× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 5.11 ns/iteration, speed vs FLTX 0.27× + +exact + +exact + +1/1 + +5.11 ns · 0.27× + +No + +✗ + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.84 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.165226× + +exact + +exact + +1/1 + +1.84 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.15 ns/iteration, speed vs FLTX 0.86× + +exact + +exact + +1/1 + +2.15 ns · 0.86× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 4.83 ns/iteration, speed vs FLTX 0.38× + +exact + +exact + +1/1 + +4.83 ns · 0.38× + +No + +✗ + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.11 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 1.149297× + +exact + +exact + +1/1 + +2.11 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 5.24 ns/iteration, speed vs FLTX 0.40× + +exact + +exact + +1/1 + +5.24 ns · 0.40× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.42 ns/iteration, speed vs FLTX 0.87× + +exact + +exact + +1/1 + +2.42 ns · 0.87× + +No + +✗ + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 7.47 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.522184× + +exact + +exact + +1/1 + +7.47 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 6.63 ns/iteration, speed vs FLTX 1.13× + +exact + +exact + +1/1 + +6.63 ns · 1.13× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 3.90 ns/iteration, speed vs FLTX 1.92× + +exact + +exact + +1/1 + +3.90 ns · 1.92× + +No + +✗ + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 9.70 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.423307× + +exact + +exact + +1/1 + +9.70 ns + +Both + +✓ + + +cppdd: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 4.10 ns/iteration, speed vs FLTX 2.36× + +exact + +exact + +1/1 + +4.10 ns · 2.36× + +No + +✗ + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 4.24 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.383806× + +exact + +exact + +1/1 + +4.24 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 10.11 ns/iteration, speed vs FLTX 0.42× + +exact + +exact + +1/1 + +10.11 ns · 0.42× + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 3.97 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 96.838561× + +exact + +exact + +1/1 + +3.97 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 384.9 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +384.9 ns · 0.01× + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 78.60 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +78.60 ns + +Both + +✓ + + +cppdd: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 110.7 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +110.7 ns + +Both + +✓ + + +cppdd: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.80 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.938902× + +exact + +exact + +3/3 + +18.80 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmod +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -90.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 135.0, p01 101.7, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 24.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=2, seed=10322096095657499335 +wide_exponent: mean 78.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4096, seed=10322096095657499357 +benchmark: 36.46 ns/iteration, speed vs FLTX 0.52× + +106.7 + +0.0 + +1/3 + +36.46 ns · 0.52× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 126.0 ns/iteration, speed vs FLTX 0.15× + +exact + +exact + +3/3 + +126.0 ns · 0.15× + +No + +✗ + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 24.26 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.710405× + +138.0 + +103.1 + +1/1 + +24.26 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remainder +mean: 134.4 bits +p01: 101.0 bits +worst: 95.5 bits +domains: 1/1 +minimum threshold margin: 5.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 134.4, p01 101.0, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +benchmark: 41.50 ns/iteration, speed vs FLTX 0.58× + +134.4 + +95.5 + +1/1 + +41.50 ns · 0.58× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 119.7 ns/iteration, speed vs FLTX 0.20× + +exact + +exact + +1/1 + +119.7 ns · 0.20× + +No + +✗ + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 23.60 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.754491× + +exact + +exact + +1/1 + +23.60 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 41.40 ns/iteration, speed vs FLTX 0.57× + +exact + +exact + +1/1 + +41.40 ns · 0.57× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 120.0 ns/iteration, speed vs FLTX 0.20× + +exact + +exact + +1/1 + +120.0 ns · 0.20× + +No + +✗ + + + + +Float Utils + + + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.06 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.134474× + +exact + +exact + +2/2 + +3.06 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.31 ns/iteration, speed vs FLTX 0.92× + +exact + +exact + +2/2 + +3.31 ns · 0.92× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.411 ns/iteration, speed vs FLTX 7.44× + +exact + +exact + +2/2 + +0.411 ns · 7.44× + +No + +✓ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.09 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.132945× + +exact + +exact + +1/1 + +3.09 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.38 ns/iteration, speed vs FLTX 0.91× + +exact + +exact + +1/1 + +3.38 ns · 0.91× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.411 ns/iteration, speed vs FLTX 7.52× + +exact + +exact + +1/1 + +0.411 ns · 7.52× + +No + +✓ + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.4 bits +p01: 104.7 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 109.1, p01 104.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.6, p01 106.6, worst 105.3, required 90.0, margin 15.3, n=4096, seed=10322096095657499357 +benchmark: 6.64 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.300933× + +117.4 + +99.6 + +3/3 + +6.64 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fma +mean: 75.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -90.0 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 0.1, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4098, seed=10322096095657499352 +moderate: mean 108.2, p01 103.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.1, p01 105.4, worst 104.1, required 90.0, margin 14.1, n=4096, seed=10322096095657499357 +benchmark: 15.28 ns/iteration, speed vs FLTX 0.43× + +75.8 + +0.0 + +2/3 + +15.28 ns · 0.43× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fma +mean: 128.4 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 125.4, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 38.68 ns/iteration, speed vs FLTX 0.17× + +128.4 + +113.0 + +3/3 + +38.68 ns · 0.17× + +No + +✗ + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 38.06 ns/iteration (no available competitor) + +109.0 + +105.2 + +2/2 + +38.06 ns + +Both + +✓ + + +cppdd: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.751 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.154373× + +exact + +exact + +2/2 + +0.751 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.37 ns/iteration, speed vs FLTX 0.32× + +exact + +exact + +2/2 + +2.37 ns · 0.32× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.07 ns/iteration, speed vs FLTX 0.12× + +exact + +exact + +2/2 + +6.07 ns · 0.12× + +No + +✗ + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.704 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.534999× + +exact + +exact + +2/2 + +0.704 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.49 ns/iteration, speed vs FLTX 0.28× + +exact + +exact + +2/2 + +2.49 ns · 0.28× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.92 ns/iteration, speed vs FLTX 0.12× + +exact + +exact + +2/2 + +5.92 ns · 0.12× + +No + +✗ + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.73 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.201194× + +138.0 + +106.2 + +2/2 + +2.73 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.28 ns/iteration, speed vs FLTX 0.83× + +138.0 + +106.2 + +2/2 + +3.28 ns · 0.83× + +No + +✓ + + +TLFloat Quad +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 22.65 ns/iteration, speed vs FLTX 0.12× + +exact + +exact + +2/2 + +22.65 ns · 0.12× + +No + +✓ + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.456 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 1.106901× + +exact + +exact + +1/1 + +0.456 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.40 ns/iteration, speed vs FLTX 0.33× + +exact + +exact + +1/1 + +1.40 ns · 0.33× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.505 ns/iteration, speed vs FLTX 0.90× + +exact + +exact + +1/1 + +0.505 ns · 0.90× + +No + +✗ + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.44 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.547482× + +exact + +exact + +1/1 + +1.44 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.68 ns/iteration, speed vs FLTX 0.39× + +exact + +exact + +1/1 + +3.68 ns · 0.39× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 11.31 ns/iteration, speed vs FLTX 0.13× + +exact + +exact + +1/1 + +11.31 ns · 0.13× + +No + +✗ + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.37 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.69454× + +exact + +exact + +1/1 + +1.37 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.69 ns/iteration, speed vs FLTX 0.37× + +exact + +exact + +1/1 + +3.69 ns · 0.37× + +Both + +✗ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.37 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.690623× + +exact + +exact + +1/1 + +1.37 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.69 ns/iteration, speed vs FLTX 0.37× + +exact + +exact + +1/1 + +3.69 ns · 0.37× + +Both + +✗ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.46 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.629589× + +exact + +exact + +2/2 + +2.46 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.01 ns/iteration, speed vs FLTX 0.61× + +exact + +exact + +2/2 + +4.01 ns · 0.61× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 14.02 ns/iteration, speed vs FLTX 0.18× + +exact + +exact + +2/2 + +14.02 ns · 0.18× + +No + +✗ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.87 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.311243× + +exact + +exact + +2/2 + +5.87 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 7.70 ns/iteration, speed vs FLTX 0.76× + +exact + +exact + +2/2 + +7.70 ns · 0.76× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 24.46 ns/iteration, speed vs FLTX 0.24× + +exact + +exact + +2/2 + +24.46 ns · 0.24× + +No + +✗ + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.40 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.458389× + +exact + +exact + +2/2 + +1.40 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.05 ns/iteration, speed vs FLTX 0.35× + +exact + +exact + +2/2 + +4.05 ns · 0.35× + +- + +- + + +TLFloat Quad +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.641 ns/iteration, speed vs FLTX 2.18× + +exact + +exact + +2/2 + +0.641 ns · 2.18× + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.29 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 55.798365× + +exact + +exact + +2/2 + +1.29 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 71.89 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +2/2 + +71.89 ns · 0.02× + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 4.32 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 1.654999× + +- + +- + +- + +4.32 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter +benchmark: 29.26 ns/iteration, speed vs FLTX 0.15× + +- + +- + +- + +29.26 ns · 0.15× + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter +benchmark: 7.14 ns/iteration, speed vs FLTX 0.60× + +- + +- + +- + +7.14 ns · 0.60× + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 4.29 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 1.665499× + +- + +- + +- + +4.29 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter (same type) +benchmark: 29.32 ns/iteration, speed vs FLTX 0.15× + +- + +- + +- + +29.32 ns · 0.15× + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter (same type) +benchmark: 7.15 ns/iteration, speed vs FLTX 0.60× + +- + +- + +- + +7.15 ns · 0.60× + +- + +- + + + + +Roots & powers + + + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.10 ns/iteration (no available competitor) + +108.7 + +105.4 + +2/2 + +1.10 ns + +Both + +✓ + + +cppdd: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.7 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 4/4 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 110.5, p01 106.7, worst 106.2, required 90.0, margin 16.2, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 3.71 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.795737× + +109.7 + +104.7 + +4/4 + +3.71 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sqrt +mean: 113.6 bits +p01: 54.2 bits +worst: 52.9 bits +domains: 2/4 +minimum threshold margin: -37.1 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 99.1, p01 54.4, worst 54.4, required 90.0, margin -35.6, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 136.1, p01 54.2, worst 52.9, required 90.0, margin -37.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 2.95 ns/iteration, speed vs FLTX 1.26× + +113.6 + +52.9 + +2/4 + +2.95 ns · 1.26× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sqrt +mean: 115.2 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 4/4 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 115.0, p01 113.4, worst 113.1, required 90.0, margin 23.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499359 +subnormal: mean 115.7, p01 113.2, worst 113.1, required 90.0, margin 23.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 72.99 ns/iteration, speed vs FLTX 0.05× + +115.2 + +113.0 + +4/4 + +72.99 ns · 0.05× + +No + +✗ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.0 bits +p01: 104.1 bits +worst: 103.0 bits +domains: 2/2 +minimum threshold margin: 13.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.1, p01 104.3, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 107.9, p01 104.1, worst 103.0, required 90.0, margin 13.0, n=4096, seed=10322096095657499357 +benchmark: 22.51 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 15.65504× + +108.0 + +103.0 + +2/2 + +22.51 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cbrt +mean: 108.4 bits +p01: 105.4 bits +worst: 104.6 bits +domains: 2/2 +minimum threshold margin: 14.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 108.6, p01 105.6, worst 104.6, required 90.0, margin 14.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.2, p01 105.4, worst 104.7, required 90.0, margin 14.7, n=4096, seed=10322096095657499357 +benchmark: 352.4 ns/iteration, speed vs FLTX 0.06× + +108.4 + +104.6 + +2/2 + +352.4 ns · 0.06× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::cbrt +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.1, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 576.1 ns/iteration, speed vs FLTX 0.04× + +115.0 + +113.0 + +2/2 + +576.1 ns · 0.04× + +No + +✗ + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 10.29 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 5.935593× + +122.4 + +104.4 + +2/2 + +10.29 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::hypot +mean: 121.9 bits +p01: 104.9 bits +worst: 104.3 bits +domains: 2/2 +minimum threshold margin: 14.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.8, p01 104.9, worst 104.3, required 90.0, margin 14.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 106.6, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 61.05 ns/iteration, speed vs FLTX 0.17× + +121.9 + +104.3 + +2/2 + +61.05 ns · 0.17× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::hypot +mean: 129.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 142.9, p01 113.8, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 112.0 ns/iteration, speed vs FLTX 0.09× + +129.0 + +113.0 + +2/2 + +112.0 ns · 0.09× + +No + +✓ + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 192.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.128185× + +107.1 + +101.3 + +2/2 + +192.7 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow +mean: 102.6 bits +p01: 98.7 bits +worst: 97.6 bits +domains: 2/2 +minimum threshold margin: 17.6 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 102.0, p01 98.7, worst 97.6, required 80.0, margin 17.6, n=4099, seed=10322096095657499356 +near_one: mean 103.2, p01 100.6, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499359 +benchmark: 602.7 ns/iteration, speed vs FLTX 0.32× + +102.6 + +97.6 + +2/2 + +602.7 ns · 0.32× + +Inf + +✗ + + +TLFloat Quad +API: tlfloat::pow +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 3,219 ns/iteration, speed vs FLTX 0.06× + +114.9 + +113.0 + +2/2 + +3,219 ns · 0.06× + +No + +✗ + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 24.08 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.374085× + +106.5 + +103.2 + +2/2 + +24.08 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow(value, int) +mean: 106.4 bits +p01: 103.5 bits +worst: 102.7 bits +domains: 2/2 +minimum threshold margin: 12.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.4, p01 103.5, worst 102.8, required 90.0, margin 12.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.4, p01 103.5, worst 102.7, required 90.0, margin 12.7, n=4096, seed=10322096095657499357 +benchmark: 9.01 ns/iteration, speed vs FLTX 2.67× + +106.4 + +102.7 + +2/2 + +9.01 ns · 2.67× + +Both + +✗ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 107.0 bits +p01: 104.3 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.6, p01 104.3, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.4, p01 104.8, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 92.12 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.656885× + +107.0 + +103.6 + +2/2 + +92.12 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp +mean: 100.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 97.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499339 +moderate: mean 103.7, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +benchmark: 336.9 ns/iteration, speed vs FLTX 0.27× + +100.4 + +0.0 + +1/2 + +336.9 ns · 0.27× + +Both + +- + + +TLFloat Quad +API: tlfloat::exp +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 692.0 ns/iteration, speed vs FLTX 0.13× + +114.9 + +113.0 + +2/2 + +692.0 ns · 0.13× + +No + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 90.75 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 8.270925× + +108.9 + +105.1 + +2/2 + +90.75 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp2 +mean: 101.7 bits +p01: 96.4 bits +worst: 95.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 99.5, p01 96.4, worst 95.2, required 80.0, margin 15.2, n=4099, seed=10322096095657499339 +moderate: mean 103.8, p01 101.1, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499356 +benchmark: 750.6 ns/iteration, speed vs FLTX 0.12× + +101.7 + +95.2 + +2/2 + +750.6 ns · 0.12× + +Both + +- + + +TLFloat Quad +API: tlfloat::exp2 +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,589 ns/iteration, speed vs FLTX 0.06× + +115.0 + +113.0 + +2/2 + +1,589 ns · 0.06× + +No + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 94.44 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.708029× + +121.6 + +104.1 + +2/2 + +94.44 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::expm1 +mean: 120.3 bits +p01: 101.1 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 106.6, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 106.1, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499356 +benchmark: 350.2 ns/iteration, speed vs FLTX 0.27× + +120.3 + +100.3 + +2/2 + +350.2 ns · 0.27× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::expm1 +mean: 128.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.7, worst 113.0, required 80.0, margin 33.0, n=4098, seed=10322096095657499336 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 742.9 ns/iteration, speed vs FLTX 0.13× + +128.2 + +113.0 + +2/2 + +742.9 ns · 0.13× + +No + +✗ + + + + +Logarithms + + + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.6, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 123.1 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.029472× + +108.4 + +103.7 + +3/3 + +123.1 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log +mean: 105.3 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.2, p01 105.2, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.9, p01 104.6, worst 102.4, required 80.0, margin 22.4, n=4096, seed=10322096095657499357 +benchmark: 373.1 ns/iteration, speed vs FLTX 0.33× + +105.3 + +87.9 + +3/3 + +373.1 ns · 0.33× + +Both + +- + + +TLFloat Quad +API: tlfloat::log +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 115.5, p01 113.3, worst 113.3, required 80.0, margin 33.3, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 856.8 ns/iteration, speed vs FLTX 0.14× + +115.1 + +113.0 + +3/3 + +856.8 ns · 0.14× + +No + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 127.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.011062× + +108.8 + +103.7 + +3/3 + +127.7 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log2 +mean: 106.6 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.2, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.8, p01 104.5, worst 102.3, required 80.0, margin 22.3, n=4096, seed=10322096095657499357 +benchmark: 384.4 ns/iteration, speed vs FLTX 0.33× + +106.6 + +87.9 + +3/3 + +384.4 ns · 0.33× + +Both + +- + + +TLFloat Quad +API: tlfloat::log2 +mean: 116.3 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 119.0, p01 113.9, worst 113.8, required 80.0, margin 33.8, n=4096, seed=10322096095657499354 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 899.7 ns/iteration, speed vs FLTX 0.14× + +116.3 + +113.0 + +3/3 + +899.7 ns · 0.14× + +No + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.5 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 127.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.012624× + +107.5 + +103.8 + +3/3 + +127.6 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log10 +mean: 102.9 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 103.6, p01 103.1, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499354 +near_one: mean 101.6, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 103.6, p01 103.0, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499357 +benchmark: 384.5 ns/iteration, speed vs FLTX 0.33× + +102.9 + +87.9 + +3/3 + +384.5 ns · 0.33× + +Both + +- + + +TLFloat Quad +API: tlfloat::log10 +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 114.8, p01 113.1, worst 113.1, required 80.0, margin 33.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 901.2 ns/iteration, speed vs FLTX 0.14× + +114.9 + +113.0 + +3/3 + +901.2 ns · 0.14× + +No + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 124.5 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.944025× + +121.4 + +103.6 + +2/2 + +124.5 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log1p +mean: 119.7 bits +p01: 101.3 bits +worst: 100.2 bits +domains: 2/2 +minimum threshold margin: 20.2 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 107.2, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 104.8, p01 101.3, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +benchmark: 490.9 ns/iteration, speed vs FLTX 0.25× + +119.7 + +100.2 + +2/2 + +490.9 ns · 0.25× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::log1p +mean: 128.1 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.6, worst 113.1, required 80.0, margin 33.1, n=4098, seed=10322096095657499336 +moderate: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 898.2 ns/iteration, speed vs FLTX 0.14× + +128.1 + +113.0 + +2/2 + +898.2 ns · 0.14× + +No + +✗ + + + + +Trigonometric + + + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 84.77 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 6.727122× + +110.6 + +98.6 + +3/3 + +84.77 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sin +mean: 51.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.2, p01 98.8, worst 94.5, required 80.0, margin 14.5, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 35.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 570.3 ns/iteration, speed vs FLTX 0.15× + +51.4 + +0.0 + +1/3 + +570.3 ns · 0.15× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sin +mean: 116.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4110, seed=10322096095657499353 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 118.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 653.1 ns/iteration, speed vs FLTX 0.13× + +116.1 + +113.0 + +3/3 + +653.1 ns · 0.13× + +No + +✗ + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 84.27 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 6.72078× + +113.5 + +99.2 + +3/3 + +84.27 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cos +mean: 63.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 53.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.1, p01 98.9, worst 94.0, required 80.0, margin 14.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 33.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 566.4 ns/iteration, speed vs FLTX 0.15× + +63.3 + +0.0 + +1/3 + +566.4 ns · 0.15× + +Both + +- + + +TLFloat Quad +API: tlfloat::cos +mean: 117.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 118.8, p01 113.4, worst 113.1, required 80.0, margin 33.1, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 117.8, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 653.6 ns/iteration, speed vs FLTX 0.13× + +117.2 + +113.0 + +3/3 + +653.6 ns · 0.13× + +No + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 94.94 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 14.040819× + +- + +- + +- + +94.94 ns + +- + +- + + +cppdd: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::sincos +benchmark: 1,333 ns/iteration, speed vs FLTX 0.07× + +- + +- + +- + +1,333 ns · 0.07× + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.7, required 75.0, margin 28.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 95.89 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 8.542537× + +106.7 + +98.6 + +3/3 + +95.89 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tan +mean: 41.2 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -75.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4110, seed=10322096095657499353 +moderate: mean 103.3, p01 97.9, worst 94.0, required 75.0, margin 19.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 9.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4315, seed=10322096095657499369 +benchmark: 1,132 ns/iteration, speed vs FLTX 0.08× + +41.2 + +0.0 + +1/3 + +1,132 ns · 0.08× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tan +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 38.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 114.9, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.1, worst 113.0, required 75.0, margin 38.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 115.0, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4315, seed=10322096095657499369 +benchmark: 819.1 ns/iteration, speed vs FLTX 0.12× + +115.0 + +113.0 + +3/3 + +819.1 ns · 0.12× + +No + +✗ + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 157.2 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 8.648627× + +108.6 + +104.1 + +2/2 + +157.2 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asin +mean: 106.8 bits +p01: 104.1 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 23.2 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.0, p01 105.5, worst 105.4, required 80.0, margin 25.4, n=4105, seed=10322096095657499355 +moderate: mean 106.5, p01 104.1, worst 103.2, required 80.0, margin 23.2, n=4099, seed=10322096095657499356 +benchmark: 2,015 ns/iteration, speed vs FLTX 0.08× + +106.8 + +103.2 + +2/2 + +2,015 ns · 0.08× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asin +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.1, p01 113.7, worst 113.7, required 80.0, margin 33.7, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,360 ns/iteration, speed vs FLTX 0.12× + +115.0 + +113.0 + +2/2 + +1,360 ns · 0.12× + +No + +✗ + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 161.7 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 8.439712× + +106.5 + +81.6 + +2/2 + +161.7 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acos +mean: 107.0 bits +p01: 104.1 bits +worst: 102.5 bits +domains: 2/2 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.1, p01 104.6, worst 104.1, required 80.0, margin 24.1, n=4105, seed=10322096095657499355 +moderate: mean 106.8, p01 104.1, worst 102.5, required 80.0, margin 22.5, n=4099, seed=10322096095657499356 +benchmark: 1,935 ns/iteration, speed vs FLTX 0.08× + +107.0 + +102.5 + +2/2 + +1,935 ns · 0.08× + +Both + +- + + +TLFloat Quad +API: tlfloat::acos +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,365 ns/iteration, speed vs FLTX 0.12× + +114.9 + +113.0 + +2/2 + +1,365 ns · 0.12× + +No + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 109.3 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.984626× + +108.7 + +104.9 + +2/2 + +109.3 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan +mean: 106.7 bits +p01: 104.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.8, p01 104.7, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499359 +benchmark: 326.1 ns/iteration, speed vs FLTX 0.34× + +106.7 + +103.6 + +2/2 + +326.1 ns · 0.34× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan +mean: 115.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 1,208 ns/iteration, speed vs FLTX 0.09× + +115.0 + +113.0 + +2/2 + +1,208 ns · 0.09× + +Inf + +✗ + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 116.2 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.851826× + +108.7 + +104.5 + +3/3 + +116.2 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan2 +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 61.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=8, seed=10322096095657499351 +moderate: mean 106.9, p01 104.4, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 331.4 ns/iteration, speed vs FLTX 0.35× + +106.7 + +0.0 + +2/3 + +331.4 ns · 0.35× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan2 +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 118.6, p01 114.8, worst 114.8, required 80.0, margin 34.8, n=8, seed=10322096095657499351 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,206 ns/iteration, speed vs FLTX 0.10× + +115.0 + +113.0 + +3/3 + +1,206 ns · 0.10× + +Inf + +✗ + + + + +Hyperbolic + + + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 106.4 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.446311× + +107.4 + +103.6 + +2/2 + +106.4 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sinh +mean: 103.5 bits +p01: 100.6 bits +worst: 99.9 bits +domains: 2/2 +minimum threshold margin: 19.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 103.8, p01 101.0, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +near_one: mean 103.3, p01 100.6, worst 99.9, required 80.0, margin 19.9, n=4099, seed=10322096095657499359 +benchmark: 366.8 ns/iteration, speed vs FLTX 0.29× + +103.5 + +99.9 + +2/2 + +366.8 ns · 0.29× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sinh +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 799.4 ns/iteration, speed vs FLTX 0.13× + +115.0 + +113.0 + +2/2 + +799.4 ns · 0.13× + +No + +✗ + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 105.9 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.468249× + +107.9 + +104.4 + +2/2 + +105.9 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cosh +mean: 104.0 bits +p01: 101.1 bits +worst: 100.6 bits +domains: 2/2 +minimum threshold margin: 20.6 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 103.8, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.2, p01 101.5, worst 101.0, required 80.0, margin 21.0, n=4099, seed=10322096095657499359 +benchmark: 367.2 ns/iteration, speed vs FLTX 0.29× + +104.0 + +100.6 + +2/2 + +367.2 ns · 0.29× + +Both + +- + + +TLFloat Quad +API: tlfloat::cosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 752.4 ns/iteration, speed vs FLTX 0.14× + +114.9 + +113.0 + +2/2 + +752.4 ns · 0.14× + +No + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 111.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.439497× + +109.2 + +103.8 + +2/2 + +111.7 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tanh +mean: 105.8 bits +p01: 101.2 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.0, p01 102.2, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.5, p01 101.2, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 384.3 ns/iteration, speed vs FLTX 0.29× + +105.8 + +100.3 + +2/2 + +384.3 ns · 0.29× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tanh +mean: 115.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.5, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 785.4 ns/iteration, speed vs FLTX 0.14× + +115.2 + +113.0 + +2/2 + +785.4 ns · 0.14× + +Inf + +✗ + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 119.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 5.459662× + +108.1 + +103.8 + +2/2 + +119.7 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asinh +mean: 104.5 bits +p01: 100.8 bits +worst: 99.8 bits +domains: 2/2 +minimum threshold margin: 19.8 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 105.1, p01 101.7, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 100.8, worst 99.8, required 80.0, margin 19.8, n=4099, seed=10322096095657499359 +benchmark: 653.8 ns/iteration, speed vs FLTX 0.18× + +104.5 + +99.8 + +2/2 + +653.8 ns · 0.18× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asinh +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,922 ns/iteration, speed vs FLTX 0.04× + +114.9 + +113.0 + +2/2 + +2,922 ns · 0.04× + +No + +✗ + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 133.3 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 5.359287× + +108.0 + +103.7 + +2/2 + +133.3 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acosh +mean: 105.6 bits +p01: 101.7 bits +worst: 100.4 bits +domains: 2/2 +minimum threshold margin: 20.4 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 105.7, p01 101.7, worst 101.1, required 80.0, margin 21.1, n=4101, seed=10322096095657499355 +moderate: mean 105.5, p01 102.2, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499387 +benchmark: 714.2 ns/iteration, speed vs FLTX 0.19× + +105.6 + +100.4 + +2/2 + +714.2 ns · 0.19× + +Both + +- + + +TLFloat Quad +API: tlfloat::acosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.7, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4101, seed=10322096095657499355 +moderate: mean 115.1, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499387 +benchmark: 2,780 ns/iteration, speed vs FLTX 0.05× + +114.9 + +113.0 + +2/2 + +2,780 ns · 0.05× + +No + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 129.9 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 7.344452× + +108.1 + +103.1 + +2/2 + +129.9 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atanh +mean: 106.7 bits +p01: 102.1 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.8, p01 106.3, worst 104.6, required 80.0, margin 24.6, n=4105, seed=10322096095657499355 +moderate: mean 105.6, p01 102.1, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +benchmark: 2,514 ns/iteration, speed vs FLTX 0.05× + +106.7 + +101.3 + +2/2 + +2,514 ns · 0.05× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atanh +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.4, p01 113.9, worst 113.2, required 80.0, margin 33.2, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 953.8 ns/iteration, speed vs FLTX 0.14× + +115.1 + +113.0 + +2/2 + +953.8 ns · 0.14× + +No + +✗ + + + + +Special + + + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 553.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.98987× + +107.2 + +99.2 + +2/2 + +553.6 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erfc +mean: 106.3 bits +p01: 99.6 bits +worst: 99.1 bits +domains: 2/2 +minimum threshold margin: 19.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 108.8, p01 99.6, worst 99.1, required 80.0, margin 19.1, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 1,102 ns/iteration, speed vs FLTX 0.50× + +106.3 + +99.1 + +2/2 + +1,102 ns · 0.50× + +Both + +- + + +TLFloat Quad +API: tlfloat::erfc +mean: 115.1 bits +p01: 113.2 bits +worst: 113.1 bits +domains: 2/2 +minimum threshold margin: 33.1 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 115.2, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 20,283 ns/iteration, speed vs FLTX 0.03× + +115.1 + +113.1 + +2/2 + +20,283 ns · 0.03× + +Inf + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 556.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.992576× + +110.9 + +103.5 + +2/2 + +556.7 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erf +mean: 110.1 bits +p01: 102.2 bits +worst: 101.2 bits +domains: 2/2 +minimum threshold margin: 21.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 103.7, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499356 +near_one: mean 106.2, p01 102.2, worst 101.2, required 80.0, margin 21.2, n=4099, seed=10322096095657499359 +benchmark: 1,109 ns/iteration, speed vs FLTX 0.50× + +110.1 + +101.2 + +2/2 + +1,109 ns · 0.50× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::erf +mean: 115.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.6, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 20,284 ns/iteration, speed vs FLTX 0.03× + +115.2 + +113.0 + +2/2 + +20,284 ns · 0.03× + +Inf + +✗ + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 468.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 4.050963× + +105.6 + +97.3 + +1/1 + +468.6 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tgamma +mean: 100.8 bits +p01: 97.4 bits +worst: 96.5 bits +domains: 1/1 +minimum threshold margin: 16.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 100.8, p01 97.4, worst 96.5, required 80.0, margin 16.5, n=4099, seed=10322096095657499368 +benchmark: 1,898 ns/iteration, speed vs FLTX 0.25× + +100.8 + +96.5 + +1/1 + +1,898 ns · 0.25× + +Both + +- + + +TLFloat Quad +API: tlfloat::tgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499368 +benchmark: 14,975 ns/iteration, speed vs FLTX 0.03× + +115.0 + +113.0 + +1/1 + +14,975 ns · 0.03× + +No + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 533.0 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 4.92123× + +107.3 + +102.2 + +1/1 + +533.0 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lgamma +mean: 105.1 bits +p01: 100.7 bits +worst: 92.1 bits +domains: 1/1 +minimum threshold margin: 12.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.1, p01 100.7, worst 92.1, required 80.0, margin 12.1, n=4099, seed=10322096095657499371 +benchmark: 2,623 ns/iteration, speed vs FLTX 0.20× + +105.1 + +92.1 + +1/1 + +2,623 ns · 0.20× + +Both + +- + + +TLFloat Quad +API: tlfloat::lgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499371 +benchmark: 13,354 ns/iteration, speed vs FLTX 0.04× + +115.0 + +113.0 + +1/1 + +13,354 ns · 0.04× + +No + +- + + + + +Comparisons + + + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.653 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.251622× + +exact + +exact + +1/1 + +0.653 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.818 ns/iteration, speed vs FLTX 0.80× + +exact + +exact + +1/1 + +0.818 ns · 0.80× + +Both + +- + + +TLFloat Quad +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 3.61 ns/iteration, speed vs FLTX 0.18× + +exact + +exact + +1/1 + +3.61 ns · 0.18× + +Both + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.726 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.268197× + +exact + +exact + +1/1 + +0.726 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.920 ns/iteration, speed vs FLTX 0.79× + +exact + +exact + +1/1 + +0.920 ns · 0.79× + +Both + +- + + +TLFloat Quad +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 3.64 ns/iteration, speed vs FLTX 0.20× + +exact + +exact + +1/1 + +3.64 ns · 0.20× + +Both + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.998 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.612631× + +exact + +exact + +1/1 + +0.998 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.61 ns/iteration, speed vs FLTX 0.62× + +exact + +exact + +1/1 + +1.61 ns · 0.62× + +Both + +- + + +TLFloat Quad +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.12 ns/iteration, speed vs FLTX 0.20× + +exact + +exact + +1/1 + +5.12 ns · 0.20× + +Both + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.12 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.916154× + +exact + +exact + +1/1 + +1.12 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.03 ns/iteration, speed vs FLTX 1.09× + +exact + +exact + +1/1 + +1.03 ns · 1.09× + +Both + +- + + +TLFloat Quad +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.31 ns/iteration, speed vs FLTX 0.21× + +exact + +exact + +1/1 + +5.31 ns · 0.21× + +Both + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.992 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.952005× + +exact + +exact + +1/1 + +0.992 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.945 ns/iteration, speed vs FLTX 1.05× + +exact + +exact + +1/1 + +0.945 ns · 1.05× + +Both + +- + + +TLFloat Quad +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.27 ns/iteration, speed vs FLTX 0.19× + +exact + +exact + +1/1 + +5.27 ns · 0.19× + +Both + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.11 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.936651× + +exact + +exact + +1/1 + +1.11 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.04 ns/iteration, speed vs FLTX 1.07× + +exact + +exact + +1/1 + +1.04 ns · 1.07× + +Both + +- + + +TLFloat Quad +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.60 ns/iteration, speed vs FLTX 0.20× + +exact + +exact + +1/1 + +5.60 ns · 0.20× + +Both + +- + + + + +Random + + + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 7.33 ns/iteration (no available competitor) + +- + +- + +- + +7.33 ns + +- + +- + + +cppdd: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 43.95 ns/iteration (no available competitor) + +- + +- + +- + +43.95 ns + +- + +- + + +cppdd: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 4.63 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.506609× + +- + +- + +- + +4.63 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same expression +benchmark: 6.98 ns/iteration, speed vs FLTX 0.66× + +- + +- + +- + +6.98 ns · 0.66× + +- + +- + + +TLFloat Quad +API: same expression +benchmark: 65.07 ns/iteration, speed vs FLTX 0.07× + +- + +- + +- + +65.07 ns · 0.07× + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 24.38 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.051987× + +- + +- + +- + +24.38 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 25.64 ns/iteration, speed vs FLTX 0.95× + +- + +- + +- + +25.64 ns · 0.95× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 150.3 ns/iteration, speed vs FLTX 0.16× + +- + +- + +- + +150.3 ns · 0.16× + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 187.4 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 4.430726× + +- + +- + +- + +187.4 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 830.3 ns/iteration, speed vs FLTX 0.23× + +- + +- + +- + +830.3 ns · 0.23× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 1,392 ns/iteration, speed vs FLTX 0.13× + +- + +- + +- + +1,392 ns · 0.13× + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 19.85 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.91606× + +- + +- + +- + +19.85 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 18.18 ns/iteration, speed vs FLTX 1.09× + +- + +- + +- + +18.18 ns · 1.09× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 152.2 ns/iteration, speed vs FLTX 0.13× + +- + +- + +- + +152.2 ns · 0.13× + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 54.66 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.489845× + +- + +- + +- + +54.66 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 81.43 ns/iteration, speed vs FLTX 0.67× + +- + +- + +- + +81.43 ns · 0.67× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 575.5 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +575.5 ns · 0.09× + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 166.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.643426× + +- + +- + +- + +166.6 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 107.2 ns/iteration, speed vs FLTX 1.55× + +- + +- + +- + +107.2 ns · 1.55× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 601.8 ns/iteration, speed vs FLTX 0.28× + +- + +- + +- + +601.8 ns · 0.28× + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 31.86 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.089521× + +- + +- + +- + +31.86 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 34.71 ns/iteration, speed vs FLTX 0.92× + +- + +- + +- + +34.71 ns · 0.92× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 222.4 ns/iteration, speed vs FLTX 0.14× + +- + +- + +- + +222.4 ns · 0.14× + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 828.5 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.421719× + +- + +- + +- + +828.5 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 2,835 ns/iteration, speed vs FLTX 0.29× + +- + +- + +- + +2,835 ns · 0.29× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 6,137 ns/iteration, speed vs FLTX 0.14× + +- + +- + +- + +6,137 ns · 0.14× + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 433.0 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 9.844442× + +- + +- + +- + +433.0 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 5,521 ns/iteration, speed vs FLTX 0.08× + +- + +- + +- + +5,521 ns · 0.08× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 4,263 ns/iteration, speed vs FLTX 0.10× + +- + +- + +- + +4,263 ns · 0.10× + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/windows_x86_64_ClangCL_f128_overview_compact.svg b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f128_overview_compact.svg new file mode 100644 index 0000000..6970dd3 --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f128_overview_compact.svg @@ -0,0 +1,7289 @@ + + + + + +operation + + +bl::f128 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +boost (cpp_double_double) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +TLFloat (tlquad) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +Arithmetic + + + + + + +add + +fltx bl::f128 +API: bl::add +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 1.88 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.190252× + +120.3 + +105.7 + +2/2 + +1.9 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator+ +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 2.24 ns/iteration, speed vs FLTX 0.84× + +120.3 + +105.7 + +2/2 + +2.2 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator+ +mean: 127.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 125.8, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 20.26 ns/iteration, speed vs FLTX 0.09× + +127.0 + +113.0 + +2/2 + +20.3 ns + +No + +✗ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 1.87 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.214281× + +120.1 + +105.7 + +2/2 + +1.9 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator- +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 2.27 ns/iteration, speed vs FLTX 0.82× + +120.1 + +105.7 + +2/2 + +2.3 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator- +mean: 127.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 126.0, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 20.28 ns/iteration, speed vs FLTX 0.09× + +127.2 + +113.0 + +2/2 + +20.3 ns + +No + +✗ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 1.20 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.932295× + +108.7 + +105.4 + +2/2 + +1.2 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: Boost operator* +mean: 108.5 bits +p01: 105.2 bits +worst: 104.7 bits +domains: 2/2 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 108.5, p01 105.2, worst 104.7, required 90.0, margin 14.7, n=4092, seed=10322096095657499292 +subnormal: mean 123.8, p01 108.1, worst 108.1, required 90.0, margin 18.1, n=8, seed=10322096095657499292 +benchmark: 2.31 ns/iteration, speed vs FLTX 0.52× + +108.5 + +104.7 + +2/2 + +2.3 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator* +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4092, seed=10322096095657499292 +subnormal: mean 129.7, p01 113.5, worst 113.5, required 90.0, margin 23.5, n=8, seed=10322096095657499292 +benchmark: 22.75 ns/iteration, speed vs FLTX 0.05× + +115.0 + +113.0 + +2/2 + +22.8 ns + +No + +✗ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 1.71 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.132583× + +110.9 + +105.1 + +2/2 + +1.7 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: Boost operator/ +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 5.35 ns/iteration, speed vs FLTX 0.32× + +110.9 + +105.1 + +2/2 + +5.3 ns + +NaN + +✗ + + +TLFloat Quad +API: TLFloat operator/ +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 63.14 ns/iteration, speed vs FLTX 0.03× + +115.0 + +113.0 + +2/2 + +63.1 ns + +No + +✗ + + + + +IO + + + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 188.4 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.493327× + +114.0 + +110.7 + +2/2 + +188 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: Boost number::str +mean: 110.8 bits +p01: 106.0 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 16.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 112.0, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 109.5, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4096, seed=10322096095657499357 +benchmark: 658.2 ns/iteration, speed vs FLTX 0.29× + +110.8 + +106.0 + +2/2 + +658 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::to_string +mean: 110.7 bits +p01: 107.6 bits +worst: 107.3 bits +domains: 2/2 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.8, p01 107.9, worst 107.4, required 90.0, margin 17.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 110.5, p01 107.6, worst 107.3, required 90.0, margin 17.3, n=4096, seed=10322096095657499357 +benchmark: 1,642 ns/iteration, speed vs FLTX 0.11× + +110.7 + +107.3 + +2/2 + +1642 ns + +Both + +✓ + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 157.4 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +157 ns + +Both + +✓ + + +cppdd: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 107.1 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 107.1, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 203.5 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.762362× + +109.9 + +106.0 + +2/2 + +204 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: Boost string constructor +mean: 107.1 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -106.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.9, p01 106.2, worst 106.0, required 106.0, margin 0.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 106.3, p01 0.0, worst 0.0, required 106.0, margin -106.0, n=4098, seed=10322096095657499308 +benchmark: 765.7 ns/iteration, speed vs FLTX 0.27× + +107.1 + +0.0 + +1/2 + +766 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat string constructor +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 7.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4098, seed=10322096095657499308 +benchmark: 1,046 ns/iteration, speed vs FLTX 0.19× + +114.9 + +113.0 + +2/2 + +1046 ns + +No + +✗ + + + + +Rounding + + + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.36 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.071259× + += + += + +1/1 + +1.4 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.45 ns/iteration, speed vs FLTX 0.93× + += + += + +1/1 + +1.5 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 5.11 ns/iteration, speed vs FLTX 0.27× + += + += + +1/1 + +5.1 ns + +No + +✗ + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.84 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.165226× + += + += + +1/1 + +1.8 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.15 ns/iteration, speed vs FLTX 0.86× + += + += + +1/1 + +2.1 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 4.83 ns/iteration, speed vs FLTX 0.38× + += + += + +1/1 + +4.8 ns + +No + +✗ + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.11 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 1.149297× + += + += + +1/1 + +2.1 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 5.24 ns/iteration, speed vs FLTX 0.40× + += + += + +1/1 + +5.2 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.42 ns/iteration, speed vs FLTX 0.87× + += + += + +1/1 + +2.4 ns + +No + +✗ + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 7.47 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.522184× + += + += + +1/1 + +7.5 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 6.63 ns/iteration, speed vs FLTX 1.13× + += + += + +1/1 + +6.6 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 3.90 ns/iteration, speed vs FLTX 1.92× + += + += + +1/1 + +3.9 ns + +No + +✗ + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 9.70 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.423307× + += + += + +1/1 + +9.7 ns + +Both + +✓ + + +cppdd: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 4.10 ns/iteration, speed vs FLTX 2.36× + += + += + +1/1 + +4.1 ns + +No + +✗ + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 4.24 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.383806× + += + += + +1/1 + +4.2 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 10.11 ns/iteration, speed vs FLTX 0.42× + += + += + +1/1 + +10.1 ns + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 3.97 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 96.838561× + += + += + +1/1 + +4.0 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 384.9 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +385 ns + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 78.60 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +78.6 ns + +Both + +✓ + + +cppdd: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 110.7 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +111 ns + +Both + +✓ + + +cppdd: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.80 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.938902× + += + += + +3/3 + +18.8 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmod +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -90.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 135.0, p01 101.7, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 24.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=2, seed=10322096095657499335 +wide_exponent: mean 78.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4096, seed=10322096095657499357 +benchmark: 36.46 ns/iteration, speed vs FLTX 0.52× + +106.7 + +0.0 + +1/3 + +36.5 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 126.0 ns/iteration, speed vs FLTX 0.15× + += + += + +3/3 + +126 ns + +No + +✗ + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 24.26 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.710405× + +138.0 + +103.1 + +1/1 + +24.3 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remainder +mean: 134.4 bits +p01: 101.0 bits +worst: 95.5 bits +domains: 1/1 +minimum threshold margin: 5.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 134.4, p01 101.0, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +benchmark: 41.50 ns/iteration, speed vs FLTX 0.58× + +134.4 + +95.5 + +1/1 + +41.5 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 119.7 ns/iteration, speed vs FLTX 0.20× + += + += + +1/1 + +120 ns + +No + +✗ + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 23.60 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.754491× + += + += + +1/1 + +23.6 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 41.40 ns/iteration, speed vs FLTX 0.57× + += + += + +1/1 + +41.4 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 120.0 ns/iteration, speed vs FLTX 0.20× + += + += + +1/1 + +120 ns + +No + +✗ + + + + +Float Utils + + + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.06 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.134474× + += + += + +2/2 + +3.1 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.31 ns/iteration, speed vs FLTX 0.92× + += + += + +2/2 + +3.3 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.411 ns/iteration, speed vs FLTX 7.44× + += + += + +2/2 + +0.41 ns + +No + +✓ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.09 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.132945× + += + += + +1/1 + +3.1 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.38 ns/iteration, speed vs FLTX 0.91× + += + += + +1/1 + +3.4 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.411 ns/iteration, speed vs FLTX 7.52× + += + += + +1/1 + +0.41 ns + +No + +✓ + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.4 bits +p01: 104.7 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 109.1, p01 104.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.6, p01 106.6, worst 105.3, required 90.0, margin 15.3, n=4096, seed=10322096095657499357 +benchmark: 6.64 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.300933× + +117.4 + +99.6 + +3/3 + +6.6 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fma +mean: 75.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -90.0 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 0.1, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4098, seed=10322096095657499352 +moderate: mean 108.2, p01 103.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.1, p01 105.4, worst 104.1, required 90.0, margin 14.1, n=4096, seed=10322096095657499357 +benchmark: 15.28 ns/iteration, speed vs FLTX 0.43× + +75.8 + +0.0 + +2/3 + +15.3 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fma +mean: 128.4 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 125.4, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 38.68 ns/iteration, speed vs FLTX 0.17× + +128.4 + +113.0 + +3/3 + +38.7 ns + +No + +✗ + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 38.06 ns/iteration (no available competitor) + +109.0 + +105.2 + +2/2 + +38.1 ns + +Both + +✓ + + +cppdd: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.751 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.154373× + += + += + +2/2 + +0.75 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.37 ns/iteration, speed vs FLTX 0.32× + += + += + +2/2 + +2.4 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.07 ns/iteration, speed vs FLTX 0.12× + += + += + +2/2 + +6.1 ns + +No + +✗ + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.704 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.534999× + += + += + +2/2 + +0.70 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.49 ns/iteration, speed vs FLTX 0.28× + += + += + +2/2 + +2.5 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.92 ns/iteration, speed vs FLTX 0.12× + += + += + +2/2 + +5.9 ns + +No + +✗ + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.73 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.201194× + +138.0 + +106.2 + +2/2 + +2.7 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.28 ns/iteration, speed vs FLTX 0.83× + +138.0 + +106.2 + +2/2 + +3.3 ns + +No + +✓ + + +TLFloat Quad +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 22.65 ns/iteration, speed vs FLTX 0.12× + += + += + +2/2 + +22.6 ns + +No + +✓ + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.456 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 1.106901× + += + += + +1/1 + +0.46 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.40 ns/iteration, speed vs FLTX 0.33× + += + += + +1/1 + +1.4 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.505 ns/iteration, speed vs FLTX 0.90× + += + += + +1/1 + +0.50 ns + +No + +✗ + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.44 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.547482× + += + += + +1/1 + +1.4 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.68 ns/iteration, speed vs FLTX 0.39× + += + += + +1/1 + +3.7 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 11.31 ns/iteration, speed vs FLTX 0.13× + += + += + +1/1 + +11.3 ns + +No + +✗ + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.37 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.69454× + += + += + +1/1 + +1.4 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.69 ns/iteration, speed vs FLTX 0.37× + += + += + +1/1 + +3.7 ns + +Both + +✗ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.37 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.690623× + += + += + +1/1 + +1.4 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.69 ns/iteration, speed vs FLTX 0.37× + += + += + +1/1 + +3.7 ns + +Both + +✗ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.46 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.629589× + += + += + +2/2 + +2.5 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.01 ns/iteration, speed vs FLTX 0.61× + += + += + +2/2 + +4.0 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 14.02 ns/iteration, speed vs FLTX 0.18× + += + += + +2/2 + +14.0 ns + +No + +✗ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.87 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.311243× + += + += + +2/2 + +5.9 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 7.70 ns/iteration, speed vs FLTX 0.76× + += + += + +2/2 + +7.7 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 24.46 ns/iteration, speed vs FLTX 0.24× + += + += + +2/2 + +24.5 ns + +No + +✗ + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.40 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.458389× + += + += + +2/2 + +1.4 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.05 ns/iteration, speed vs FLTX 0.35× + += + += + +2/2 + +4.0 ns + +- + +- + + +TLFloat Quad +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.641 ns/iteration, speed vs FLTX 2.18× + += + += + +2/2 + +0.64 ns + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.29 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 55.798365× + += + += + +2/2 + +1.3 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 71.89 ns/iteration, speed vs FLTX 0.02× + += + += + +2/2 + +71.9 ns + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 4.32 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 1.654999× + +- + +- + +- + +4.3 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter +benchmark: 29.26 ns/iteration, speed vs FLTX 0.15× + +- + +- + +- + +29.3 ns + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter +benchmark: 7.14 ns/iteration, speed vs FLTX 0.60× + +- + +- + +- + +7.1 ns + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 4.29 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 1.665499× + +- + +- + +- + +4.3 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter (same type) +benchmark: 29.32 ns/iteration, speed vs FLTX 0.15× + +- + +- + +- + +29.3 ns + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter (same type) +benchmark: 7.15 ns/iteration, speed vs FLTX 0.60× + +- + +- + +- + +7.1 ns + +- + +- + + + + +Roots & powers + + + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.10 ns/iteration (no available competitor) + +108.7 + +105.4 + +2/2 + +1.1 ns + +Both + +✓ + + +cppdd: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.7 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 4/4 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 110.5, p01 106.7, worst 106.2, required 90.0, margin 16.2, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 3.71 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.795737× + +109.7 + +104.7 + +4/4 + +3.7 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sqrt +mean: 113.6 bits +p01: 54.2 bits +worst: 52.9 bits +domains: 2/4 +minimum threshold margin: -37.1 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 99.1, p01 54.4, worst 54.4, required 90.0, margin -35.6, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 136.1, p01 54.2, worst 52.9, required 90.0, margin -37.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 2.95 ns/iteration, speed vs FLTX 1.26× + +113.6 + +52.9 + +2/4 + +2.9 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sqrt +mean: 115.2 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 4/4 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 115.0, p01 113.4, worst 113.1, required 90.0, margin 23.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499359 +subnormal: mean 115.7, p01 113.2, worst 113.1, required 90.0, margin 23.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 72.99 ns/iteration, speed vs FLTX 0.05× + +115.2 + +113.0 + +4/4 + +73.0 ns + +No + +✗ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.0 bits +p01: 104.1 bits +worst: 103.0 bits +domains: 2/2 +minimum threshold margin: 13.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.1, p01 104.3, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 107.9, p01 104.1, worst 103.0, required 90.0, margin 13.0, n=4096, seed=10322096095657499357 +benchmark: 22.51 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 15.65504× + +108.0 + +103.0 + +2/2 + +22.5 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cbrt +mean: 108.4 bits +p01: 105.4 bits +worst: 104.6 bits +domains: 2/2 +minimum threshold margin: 14.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 108.6, p01 105.6, worst 104.6, required 90.0, margin 14.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.2, p01 105.4, worst 104.7, required 90.0, margin 14.7, n=4096, seed=10322096095657499357 +benchmark: 352.4 ns/iteration, speed vs FLTX 0.06× + +108.4 + +104.6 + +2/2 + +352 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::cbrt +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.1, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 576.1 ns/iteration, speed vs FLTX 0.04× + +115.0 + +113.0 + +2/2 + +576 ns + +No + +✗ + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 10.29 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 5.935593× + +122.4 + +104.4 + +2/2 + +10.3 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::hypot +mean: 121.9 bits +p01: 104.9 bits +worst: 104.3 bits +domains: 2/2 +minimum threshold margin: 14.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.8, p01 104.9, worst 104.3, required 90.0, margin 14.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 106.6, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 61.05 ns/iteration, speed vs FLTX 0.17× + +121.9 + +104.3 + +2/2 + +61.1 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::hypot +mean: 129.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 142.9, p01 113.8, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 112.0 ns/iteration, speed vs FLTX 0.09× + +129.0 + +113.0 + +2/2 + +112 ns + +No + +✓ + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 192.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.128185× + +107.1 + +101.3 + +2/2 + +193 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow +mean: 102.6 bits +p01: 98.7 bits +worst: 97.6 bits +domains: 2/2 +minimum threshold margin: 17.6 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 102.0, p01 98.7, worst 97.6, required 80.0, margin 17.6, n=4099, seed=10322096095657499356 +near_one: mean 103.2, p01 100.6, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499359 +benchmark: 602.7 ns/iteration, speed vs FLTX 0.32× + +102.6 + +97.6 + +2/2 + +603 ns + +Inf + +✗ + + +TLFloat Quad +API: tlfloat::pow +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 3,219 ns/iteration, speed vs FLTX 0.06× + +114.9 + +113.0 + +2/2 + +3219 ns + +No + +✗ + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 24.08 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.374085× + +106.5 + +103.2 + +2/2 + +24.1 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow(value, int) +mean: 106.4 bits +p01: 103.5 bits +worst: 102.7 bits +domains: 2/2 +minimum threshold margin: 12.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.4, p01 103.5, worst 102.8, required 90.0, margin 12.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.4, p01 103.5, worst 102.7, required 90.0, margin 12.7, n=4096, seed=10322096095657499357 +benchmark: 9.01 ns/iteration, speed vs FLTX 2.67× + +106.4 + +102.7 + +2/2 + +9.0 ns + +Both + +✗ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 107.0 bits +p01: 104.3 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.6, p01 104.3, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.4, p01 104.8, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 92.12 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.656885× + +107.0 + +103.6 + +2/2 + +92.1 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp +mean: 100.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 97.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499339 +moderate: mean 103.7, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +benchmark: 336.9 ns/iteration, speed vs FLTX 0.27× + +100.4 + +0.0 + +1/2 + +337 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::exp +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 692.0 ns/iteration, speed vs FLTX 0.13× + +114.9 + +113.0 + +2/2 + +692 ns + +No + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 90.75 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 8.270925× + +108.9 + +105.1 + +2/2 + +90.8 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp2 +mean: 101.7 bits +p01: 96.4 bits +worst: 95.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 99.5, p01 96.4, worst 95.2, required 80.0, margin 15.2, n=4099, seed=10322096095657499339 +moderate: mean 103.8, p01 101.1, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499356 +benchmark: 750.6 ns/iteration, speed vs FLTX 0.12× + +101.7 + +95.2 + +2/2 + +751 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::exp2 +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,589 ns/iteration, speed vs FLTX 0.06× + +115.0 + +113.0 + +2/2 + +1589 ns + +No + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 94.44 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.708029× + +121.6 + +104.1 + +2/2 + +94.4 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::expm1 +mean: 120.3 bits +p01: 101.1 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 106.6, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 106.1, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499356 +benchmark: 350.2 ns/iteration, speed vs FLTX 0.27× + +120.3 + +100.3 + +2/2 + +350 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::expm1 +mean: 128.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.7, worst 113.0, required 80.0, margin 33.0, n=4098, seed=10322096095657499336 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 742.9 ns/iteration, speed vs FLTX 0.13× + +128.2 + +113.0 + +2/2 + +743 ns + +No + +✗ + + + + +Logarithms + + + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.6, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 123.1 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.029472× + +108.4 + +103.7 + +3/3 + +123 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log +mean: 105.3 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.2, p01 105.2, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.9, p01 104.6, worst 102.4, required 80.0, margin 22.4, n=4096, seed=10322096095657499357 +benchmark: 373.1 ns/iteration, speed vs FLTX 0.33× + +105.3 + +87.9 + +3/3 + +373 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::log +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 115.5, p01 113.3, worst 113.3, required 80.0, margin 33.3, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 856.8 ns/iteration, speed vs FLTX 0.14× + +115.1 + +113.0 + +3/3 + +857 ns + +No + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 127.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.011062× + +108.8 + +103.7 + +3/3 + +128 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log2 +mean: 106.6 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.2, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.8, p01 104.5, worst 102.3, required 80.0, margin 22.3, n=4096, seed=10322096095657499357 +benchmark: 384.4 ns/iteration, speed vs FLTX 0.33× + +106.6 + +87.9 + +3/3 + +384 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::log2 +mean: 116.3 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 119.0, p01 113.9, worst 113.8, required 80.0, margin 33.8, n=4096, seed=10322096095657499354 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 899.7 ns/iteration, speed vs FLTX 0.14× + +116.3 + +113.0 + +3/3 + +900 ns + +No + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.5 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 127.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.012624× + +107.5 + +103.8 + +3/3 + +128 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log10 +mean: 102.9 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 103.6, p01 103.1, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499354 +near_one: mean 101.6, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 103.6, p01 103.0, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499357 +benchmark: 384.5 ns/iteration, speed vs FLTX 0.33× + +102.9 + +87.9 + +3/3 + +385 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::log10 +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 114.8, p01 113.1, worst 113.1, required 80.0, margin 33.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 901.2 ns/iteration, speed vs FLTX 0.14× + +114.9 + +113.0 + +3/3 + +901 ns + +No + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 124.5 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.944025× + +121.4 + +103.6 + +2/2 + +124 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log1p +mean: 119.7 bits +p01: 101.3 bits +worst: 100.2 bits +domains: 2/2 +minimum threshold margin: 20.2 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 107.2, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 104.8, p01 101.3, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +benchmark: 490.9 ns/iteration, speed vs FLTX 0.25× + +119.7 + +100.2 + +2/2 + +491 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::log1p +mean: 128.1 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.6, worst 113.1, required 80.0, margin 33.1, n=4098, seed=10322096095657499336 +moderate: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 898.2 ns/iteration, speed vs FLTX 0.14× + +128.1 + +113.0 + +2/2 + +898 ns + +No + +✗ + + + + +Trigonometric + + + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 84.77 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 6.727122× + +110.6 + +98.6 + +3/3 + +84.8 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sin +mean: 51.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.2, p01 98.8, worst 94.5, required 80.0, margin 14.5, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 35.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 570.3 ns/iteration, speed vs FLTX 0.15× + +51.4 + +0.0 + +1/3 + +570 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sin +mean: 116.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4110, seed=10322096095657499353 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 118.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 653.1 ns/iteration, speed vs FLTX 0.13× + +116.1 + +113.0 + +3/3 + +653 ns + +No + +✗ + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 84.27 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 6.72078× + +113.5 + +99.2 + +3/3 + +84.3 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cos +mean: 63.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 53.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.1, p01 98.9, worst 94.0, required 80.0, margin 14.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 33.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 566.4 ns/iteration, speed vs FLTX 0.15× + +63.3 + +0.0 + +1/3 + +566 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::cos +mean: 117.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 118.8, p01 113.4, worst 113.1, required 80.0, margin 33.1, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 117.8, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 653.6 ns/iteration, speed vs FLTX 0.13× + +117.2 + +113.0 + +3/3 + +654 ns + +No + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 94.94 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 14.040819× + +- + +- + +- + +94.9 ns + +- + +- + + +cppdd: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::sincos +benchmark: 1,333 ns/iteration, speed vs FLTX 0.07× + +- + +- + +- + +1333 ns + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.7, required 75.0, margin 28.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 95.89 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 8.542537× + +106.7 + +98.6 + +3/3 + +95.9 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tan +mean: 41.2 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -75.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4110, seed=10322096095657499353 +moderate: mean 103.3, p01 97.9, worst 94.0, required 75.0, margin 19.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 9.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4315, seed=10322096095657499369 +benchmark: 1,132 ns/iteration, speed vs FLTX 0.08× + +41.2 + +0.0 + +1/3 + +1132 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tan +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 38.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 114.9, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.1, worst 113.0, required 75.0, margin 38.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 115.0, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4315, seed=10322096095657499369 +benchmark: 819.1 ns/iteration, speed vs FLTX 0.12× + +115.0 + +113.0 + +3/3 + +819 ns + +No + +✗ + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 157.2 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 8.648627× + +108.6 + +104.1 + +2/2 + +157 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asin +mean: 106.8 bits +p01: 104.1 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 23.2 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.0, p01 105.5, worst 105.4, required 80.0, margin 25.4, n=4105, seed=10322096095657499355 +moderate: mean 106.5, p01 104.1, worst 103.2, required 80.0, margin 23.2, n=4099, seed=10322096095657499356 +benchmark: 2,015 ns/iteration, speed vs FLTX 0.08× + +106.8 + +103.2 + +2/2 + +2015 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asin +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.1, p01 113.7, worst 113.7, required 80.0, margin 33.7, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,360 ns/iteration, speed vs FLTX 0.12× + +115.0 + +113.0 + +2/2 + +1360 ns + +No + +✗ + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 161.7 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 8.439712× + +106.5 + +81.6 + +2/2 + +162 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acos +mean: 107.0 bits +p01: 104.1 bits +worst: 102.5 bits +domains: 2/2 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.1, p01 104.6, worst 104.1, required 80.0, margin 24.1, n=4105, seed=10322096095657499355 +moderate: mean 106.8, p01 104.1, worst 102.5, required 80.0, margin 22.5, n=4099, seed=10322096095657499356 +benchmark: 1,935 ns/iteration, speed vs FLTX 0.08× + +107.0 + +102.5 + +2/2 + +1935 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::acos +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,365 ns/iteration, speed vs FLTX 0.12× + +114.9 + +113.0 + +2/2 + +1365 ns + +No + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 109.3 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.984626× + +108.7 + +104.9 + +2/2 + +109 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan +mean: 106.7 bits +p01: 104.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.8, p01 104.7, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499359 +benchmark: 326.1 ns/iteration, speed vs FLTX 0.34× + +106.7 + +103.6 + +2/2 + +326 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan +mean: 115.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 1,208 ns/iteration, speed vs FLTX 0.09× + +115.0 + +113.0 + +2/2 + +1208 ns + +Inf + +✗ + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 116.2 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.851826× + +108.7 + +104.5 + +3/3 + +116 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan2 +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 61.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=8, seed=10322096095657499351 +moderate: mean 106.9, p01 104.4, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 331.4 ns/iteration, speed vs FLTX 0.35× + +106.7 + +0.0 + +2/3 + +331 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan2 +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 118.6, p01 114.8, worst 114.8, required 80.0, margin 34.8, n=8, seed=10322096095657499351 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,206 ns/iteration, speed vs FLTX 0.10× + +115.0 + +113.0 + +3/3 + +1206 ns + +Inf + +✗ + + + + +Hyperbolic + + + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 106.4 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.446311× + +107.4 + +103.6 + +2/2 + +106 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sinh +mean: 103.5 bits +p01: 100.6 bits +worst: 99.9 bits +domains: 2/2 +minimum threshold margin: 19.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 103.8, p01 101.0, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +near_one: mean 103.3, p01 100.6, worst 99.9, required 80.0, margin 19.9, n=4099, seed=10322096095657499359 +benchmark: 366.8 ns/iteration, speed vs FLTX 0.29× + +103.5 + +99.9 + +2/2 + +367 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sinh +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 799.4 ns/iteration, speed vs FLTX 0.13× + +115.0 + +113.0 + +2/2 + +799 ns + +No + +✗ + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 105.9 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.468249× + +107.9 + +104.4 + +2/2 + +106 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cosh +mean: 104.0 bits +p01: 101.1 bits +worst: 100.6 bits +domains: 2/2 +minimum threshold margin: 20.6 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 103.8, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.2, p01 101.5, worst 101.0, required 80.0, margin 21.0, n=4099, seed=10322096095657499359 +benchmark: 367.2 ns/iteration, speed vs FLTX 0.29× + +104.0 + +100.6 + +2/2 + +367 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::cosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 752.4 ns/iteration, speed vs FLTX 0.14× + +114.9 + +113.0 + +2/2 + +752 ns + +No + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 111.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.439497× + +109.2 + +103.8 + +2/2 + +112 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tanh +mean: 105.8 bits +p01: 101.2 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.0, p01 102.2, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.5, p01 101.2, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 384.3 ns/iteration, speed vs FLTX 0.29× + +105.8 + +100.3 + +2/2 + +384 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tanh +mean: 115.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.5, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 785.4 ns/iteration, speed vs FLTX 0.14× + +115.2 + +113.0 + +2/2 + +785 ns + +Inf + +✗ + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 119.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 5.459662× + +108.1 + +103.8 + +2/2 + +120 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asinh +mean: 104.5 bits +p01: 100.8 bits +worst: 99.8 bits +domains: 2/2 +minimum threshold margin: 19.8 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 105.1, p01 101.7, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 100.8, worst 99.8, required 80.0, margin 19.8, n=4099, seed=10322096095657499359 +benchmark: 653.8 ns/iteration, speed vs FLTX 0.18× + +104.5 + +99.8 + +2/2 + +654 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asinh +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,922 ns/iteration, speed vs FLTX 0.04× + +114.9 + +113.0 + +2/2 + +2922 ns + +No + +✗ + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 133.3 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 5.359287× + +108.0 + +103.7 + +2/2 + +133 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acosh +mean: 105.6 bits +p01: 101.7 bits +worst: 100.4 bits +domains: 2/2 +minimum threshold margin: 20.4 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 105.7, p01 101.7, worst 101.1, required 80.0, margin 21.1, n=4101, seed=10322096095657499355 +moderate: mean 105.5, p01 102.2, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499387 +benchmark: 714.2 ns/iteration, speed vs FLTX 0.19× + +105.6 + +100.4 + +2/2 + +714 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::acosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.7, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4101, seed=10322096095657499355 +moderate: mean 115.1, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499387 +benchmark: 2,780 ns/iteration, speed vs FLTX 0.05× + +114.9 + +113.0 + +2/2 + +2780 ns + +No + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 129.9 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 7.344452× + +108.1 + +103.1 + +2/2 + +130 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atanh +mean: 106.7 bits +p01: 102.1 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.8, p01 106.3, worst 104.6, required 80.0, margin 24.6, n=4105, seed=10322096095657499355 +moderate: mean 105.6, p01 102.1, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +benchmark: 2,514 ns/iteration, speed vs FLTX 0.05× + +106.7 + +101.3 + +2/2 + +2514 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atanh +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.4, p01 113.9, worst 113.2, required 80.0, margin 33.2, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 953.8 ns/iteration, speed vs FLTX 0.14× + +115.1 + +113.0 + +2/2 + +954 ns + +No + +✗ + + + + +Special + + + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 553.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.98987× + +107.2 + +99.2 + +2/2 + +554 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erfc +mean: 106.3 bits +p01: 99.6 bits +worst: 99.1 bits +domains: 2/2 +minimum threshold margin: 19.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 108.8, p01 99.6, worst 99.1, required 80.0, margin 19.1, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 1,102 ns/iteration, speed vs FLTX 0.50× + +106.3 + +99.1 + +2/2 + +1102 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::erfc +mean: 115.1 bits +p01: 113.2 bits +worst: 113.1 bits +domains: 2/2 +minimum threshold margin: 33.1 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 115.2, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 20,283 ns/iteration, speed vs FLTX 0.03× + +115.1 + +113.1 + +2/2 + +20283 ns + +Inf + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 556.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.992576× + +110.9 + +103.5 + +2/2 + +557 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erf +mean: 110.1 bits +p01: 102.2 bits +worst: 101.2 bits +domains: 2/2 +minimum threshold margin: 21.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 103.7, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499356 +near_one: mean 106.2, p01 102.2, worst 101.2, required 80.0, margin 21.2, n=4099, seed=10322096095657499359 +benchmark: 1,109 ns/iteration, speed vs FLTX 0.50× + +110.1 + +101.2 + +2/2 + +1109 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::erf +mean: 115.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.6, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 20,284 ns/iteration, speed vs FLTX 0.03× + +115.2 + +113.0 + +2/2 + +20284 ns + +Inf + +✗ + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 468.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 4.050963× + +105.6 + +97.3 + +1/1 + +469 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tgamma +mean: 100.8 bits +p01: 97.4 bits +worst: 96.5 bits +domains: 1/1 +minimum threshold margin: 16.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 100.8, p01 97.4, worst 96.5, required 80.0, margin 16.5, n=4099, seed=10322096095657499368 +benchmark: 1,898 ns/iteration, speed vs FLTX 0.25× + +100.8 + +96.5 + +1/1 + +1898 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::tgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499368 +benchmark: 14,975 ns/iteration, speed vs FLTX 0.03× + +115.0 + +113.0 + +1/1 + +14975 ns + +No + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 533.0 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 4.92123× + +107.3 + +102.2 + +1/1 + +533 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lgamma +mean: 105.1 bits +p01: 100.7 bits +worst: 92.1 bits +domains: 1/1 +minimum threshold margin: 12.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.1, p01 100.7, worst 92.1, required 80.0, margin 12.1, n=4099, seed=10322096095657499371 +benchmark: 2,623 ns/iteration, speed vs FLTX 0.20× + +105.1 + +92.1 + +1/1 + +2623 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::lgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499371 +benchmark: 13,354 ns/iteration, speed vs FLTX 0.04× + +115.0 + +113.0 + +1/1 + +13354 ns + +No + +- + + + + +Comparisons + + + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.653 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.251622× + += + += + +1/1 + +0.65 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.818 ns/iteration, speed vs FLTX 0.80× + += + += + +1/1 + +0.82 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 3.61 ns/iteration, speed vs FLTX 0.18× + += + += + +1/1 + +3.6 ns + +Both + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.726 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.268197× + += + += + +1/1 + +0.73 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.920 ns/iteration, speed vs FLTX 0.79× + += + += + +1/1 + +0.92 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 3.64 ns/iteration, speed vs FLTX 0.20× + += + += + +1/1 + +3.6 ns + +Both + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.998 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.612631× + += + += + +1/1 + +1.00 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.61 ns/iteration, speed vs FLTX 0.62× + += + += + +1/1 + +1.6 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.12 ns/iteration, speed vs FLTX 0.20× + += + += + +1/1 + +5.1 ns + +Both + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.12 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.916154× + += + += + +1/1 + +1.1 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.03 ns/iteration, speed vs FLTX 1.09× + += + += + +1/1 + +1.0 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.31 ns/iteration, speed vs FLTX 0.21× + += + += + +1/1 + +5.3 ns + +Both + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.992 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.952005× + += + += + +1/1 + +0.99 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.945 ns/iteration, speed vs FLTX 1.05× + += + += + +1/1 + +0.94 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.27 ns/iteration, speed vs FLTX 0.19× + += + += + +1/1 + +5.3 ns + +Both + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.11 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.936651× + += + += + +1/1 + +1.1 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.04 ns/iteration, speed vs FLTX 1.07× + += + += + +1/1 + +1.0 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.60 ns/iteration, speed vs FLTX 0.20× + += + += + +1/1 + +5.6 ns + +Both + +- + + + + +Random + + + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 7.33 ns/iteration (no available competitor) + +- + +- + +- + +7.3 ns + +- + +- + + +cppdd: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 43.95 ns/iteration (no available competitor) + +- + +- + +- + +44.0 ns + +- + +- + + +cppdd: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 4.63 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.506609× + +- + +- + +- + +4.6 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same expression +benchmark: 6.98 ns/iteration, speed vs FLTX 0.66× + +- + +- + +- + +7.0 ns + +- + +- + + +TLFloat Quad +API: same expression +benchmark: 65.07 ns/iteration, speed vs FLTX 0.07× + +- + +- + +- + +65.1 ns + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 24.38 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.051987× + +- + +- + +- + +24.4 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 25.64 ns/iteration, speed vs FLTX 0.95× + +- + +- + +- + +25.6 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 150.3 ns/iteration, speed vs FLTX 0.16× + +- + +- + +- + +150 ns + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 187.4 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 4.430726× + +- + +- + +- + +187 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 830.3 ns/iteration, speed vs FLTX 0.23× + +- + +- + +- + +830 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 1,392 ns/iteration, speed vs FLTX 0.13× + +- + +- + +- + +1392 ns + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 19.85 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.91606× + +- + +- + +- + +19.8 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 18.18 ns/iteration, speed vs FLTX 1.09× + +- + +- + +- + +18.2 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 152.2 ns/iteration, speed vs FLTX 0.13× + +- + +- + +- + +152 ns + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 54.66 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.489845× + +- + +- + +- + +54.7 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 81.43 ns/iteration, speed vs FLTX 0.67× + +- + +- + +- + +81.4 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 575.5 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +576 ns + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 166.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.643426× + +- + +- + +- + +167 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 107.2 ns/iteration, speed vs FLTX 1.55× + +- + +- + +- + +107 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 601.8 ns/iteration, speed vs FLTX 0.28× + +- + +- + +- + +602 ns + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 31.86 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.089521× + +- + +- + +- + +31.9 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 34.71 ns/iteration, speed vs FLTX 0.92× + +- + +- + +- + +34.7 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 222.4 ns/iteration, speed vs FLTX 0.14× + +- + +- + +- + +222 ns + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 828.5 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.421719× + +- + +- + +- + +829 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 2,835 ns/iteration, speed vs FLTX 0.29× + +- + +- + +- + +2835 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 6,137 ns/iteration, speed vs FLTX 0.14× + +- + +- + +- + +6137 ns + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 433.0 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 9.844442× + +- + +- + +- + +433 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 5,521 ns/iteration, speed vs FLTX 0.08× + +- + +- + +- + +5521 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 4,263 ns/iteration, speed vs FLTX 0.10× + +- + +- + +- + +4263 ns + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/windows_x86_64_ClangCL_f256_fastmath_overview.svg b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f256_fastmath_overview.svg new file mode 100644 index 0000000..ebe649e --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f256_fastmath_overview.svg @@ -0,0 +1,3020 @@ + + + + +f256 consumer fast-math metrics overview — Windows / x64 / Clang (clang-cl) +Accuracy excludes the subnormal domain; support is reported separately. Speed is relative to FLTX. + +operation + + +bl::f256 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + + +Arithmetic + + + + +add + +fltx bl::f256 +API: bl::add +mean: 226.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 9.45 ns/iteration (no available competitor) + +226.0 + +215.3 + +1/1 + +9.45 ns + +Both + +✗ + +✓ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 226.1 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 1/1 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.1, p01 215.6, worst 215.2, required 190.0, margin 25.2, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 18.68 ns/iteration (no available competitor) + +226.1 + +215.2 + +1/1 + +18.68 ns + +Both + +✗ + +✓ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 216.3 bits +worst: 215.2 bits +domains: 1/1 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 34.99 ns/iteration (no available competitor) + +220.0 + +215.2 + +1/1 + +34.99 ns + +Both + +✓ + +✓ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 1/1 +minimum threshold margin: 24.8 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 219.4, p01 215.4, worst 215.4, required 190.0, margin 25.4, n=55, seed=10322096095657499292 +benchmark: 96.95 ns/iteration (no available competitor) + +219.2 + +214.8 + +1/1 + +96.95 ns + +Both + +✓ + +✓ + + + + +IO + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 300.3 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +300.3 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 256.5 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +256.5 ns + +Both + +✓ + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 354.9 ns/iteration (no available competitor) + +219.7 + +212.0 + +2/2 + +354.9 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.49 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.49 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.60 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.60 ns + +Both + +✓ + +- + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 4.28 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +4.28 ns + +Both + +✓ + +- + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 8.79 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +8.79 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 8.36 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +8.36 ns + +Both + +✓ + +- + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 6.56 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +6.56 ns + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 6.57 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +6.57 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 117.6 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +117.6 ns + +Both + +✓ + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 160.9 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +160.9 ns + +Both + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 68.53 ns/iteration (no available competitor) + +244.0 + +217.7 + +3/3 + +68.53 ns + +Both + +✓ + +- + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 100.2 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +100.2 ns + +Both + +✓ + +- + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 99.51 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +99.51 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.52 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.52 ns + +Both + +✓ + +✓ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.71 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.71 ns + +Both + +✓ + +- + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 20.32 ns/iteration (no available competitor) + +229.7 + +215.1 + +3/3 + +20.32 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 81.34 ns/iteration (no available competitor) + +217.9 + +214.6 + +2/2 + +81.34 ns + +Both + +✓ + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.959 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +0.959 ns + +Inf + +✓ + +- + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.962 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +0.962 ns + +Inf + +✓ + +- + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 8.14 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +8.14 ns + +No + +✓ + +- + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.650 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.650 ns + +Both + +✓ + +- + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.23 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.23 ns + +Both + +✓ + +- + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.24 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.24 ns + +Both + +✓ + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.25 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.25 ns + +Both + +✓ + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.40 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +6.40 ns + +Both + +✓ + +✓ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 20.56 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +20.56 ns + +NaN + +✓ + +- + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.08 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.08 ns + +- + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.969 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +0.969 ns + +NaN + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 5.66 ns/iteration (no available competitor) + +- + +- + +- + +5.66 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 5.65 ns/iteration (no available competitor) + +- + +- + +- + +5.65 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 23.21 ns/iteration (no available competitor) + +220.1 + +215.3 + +2/2 + +23.21 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.8 bits +p01: 211.3 bits +worst: 209.6 bits +domains: 3/3 +minimum threshold margin: 19.6 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 218.3, p01 211.5, worst 210.0, required 190.0, margin 20.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 109.1 ns/iteration (no available competitor) + +217.8 + +209.6 + +3/3 + +109.1 ns + +Both + +✓ + +✓ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 215.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 341.6 ns/iteration (no available competitor) + +219.3 + +215.0 + +2/2 + +341.6 ns + +Both + +✓ + +- + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 165.1 ns/iteration (no available competitor) + +229.9 + +213.9 + +2/2 + +165.1 ns + +Both + +✓ + +- + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,625 ns/iteration (no available competitor) + +216.8 + +211.1 + +2/2 + +2,625 ns + +Both + +✓ + +- + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 127.1 ns/iteration (no available competitor) + +217.2 + +213.7 + +2/2 + +127.1 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.8 bits +p01: 210.6 bits +worst: 209.2 bits +domains: 2/2 +minimum threshold margin: 29.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.1, p01 210.6, worst 209.2, required 180.0, margin 29.2, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 1,012 ns/iteration (no available competitor) + +216.8 + +209.2 + +2/2 + +1,012 ns + +Both + +- + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 858.3 ns/iteration (no available competitor) + +218.0 + +214.2 + +2/2 + +858.3 ns + +Both + +- + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 227.2 bits +p01: 207.5 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.0, p01 207.5, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 1,011 ns/iteration (no available competitor) + +227.2 + +207.0 + +2/2 + +1,011 ns + +Both + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.8 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.2, p01 215.3, worst 215.0, required 180.0, margin 35.0, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,769 ns/iteration (no available competitor) + +217.8 + +213.3 + +3/3 + +1,769 ns + +Both + +- + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 221.1, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,799 ns/iteration (no available competitor) + +218.6 + +213.2 + +3/3 + +1,799 ns + +Both + +- + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 217.6, p01 215.1, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,807 ns/iteration (no available competitor) + +217.4 + +213.3 + +3/3 + +1,807 ns + +Both + +- + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 226.8 bits +p01: 207.4 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.1, p01 207.4, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,813 ns/iteration (no available competitor) + +226.8 + +207.0 + +2/2 + +1,813 ns + +Both + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 910.3 ns/iteration (no available competitor) + +222.3 + +202.9 + +3/3 + +910.3 ns + +Both + +✓ + +- + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 909.8 ns/iteration (no available competitor) + +226.8 + +208.7 + +3/3 + +909.8 ns + +Both + +- + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,017 ns/iteration (no available competitor) + +- + +- + +- + +1,017 ns + +- + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,104 ns/iteration (no available competitor) + +217.1 + +202.9 + +3/3 + +1,104 ns + +Both + +✓ + +- + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,381 ns/iteration (no available competitor) + +217.9 + +214.4 + +2/2 + +1,381 ns + +Both + +✓ + +- + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,402 ns/iteration (no available competitor) + +216.0 + +192.5 + +2/2 + +1,402 ns + +Both + +- + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 915.5 ns/iteration (no available competitor) + +218.1 + +214.7 + +2/2 + +915.5 ns + +Both + +✓ + +- + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 977.9 ns/iteration (no available competitor) + +217.9 + +214.3 + +3/3 + +977.9 ns + +Both + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,315 ns/iteration (no available competitor) + +217.0 + +213.8 + +2/2 + +1,315 ns + +Both + +✓ + +- + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,314 ns/iteration (no available competitor) + +217.5 + +214.2 + +2/2 + +1,314 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,261 ns/iteration (no available competitor) + +219.1 + +214.0 + +2/2 + +1,261 ns + +Both + +✓ + +- + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,676 ns/iteration (no available competitor) + +217.2 + +213.0 + +2/2 + +2,676 ns + +Both + +✓ + +- + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,490 ns/iteration (no available competitor) + +217.7 + +213.7 + +2/2 + +2,490 ns + +Both + +- + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,330 ns/iteration (no available competitor) + +218.3 + +213.3 + +2/2 + +2,330 ns + +Both + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 10,389 ns/iteration (no available competitor) + +208.2 + +189.8 + +2/2 + +10,389 ns + +Both + +- + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 10,403 ns/iteration (no available competitor) + +212.8 + +196.8 + +2/2 + +10,403 ns + +Both + +✓ + +- + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 10,573 ns/iteration (no available competitor) + +209.0 + +202.5 + +1/1 + +10,573 ns + +Both + +- + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 9,573 ns/iteration (no available competitor) + +211.9 + +199.2 + +1/1 + +9,573 ns + +Both + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.734 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.734 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.644 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.644 ns + +Both + +- + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.841 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.841 ns + +Both + +- + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.785 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.785 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.692 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.692 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.691 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.691 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 14.34 ns/iteration (no available competitor) + +- + +- + +- + +14.34 ns + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 290.4 ns/iteration (no available competitor) + +- + +- + +- + +290.4 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 58.04 ns/iteration (no available competitor) + +- + +- + +- + +58.04 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 151.3 ns/iteration (no available competitor) + +- + +- + +- + +151.3 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,840 ns/iteration (no available competitor) + +- + +- + +- + +1,840 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 125.5 ns/iteration (no available competitor) + +- + +- + +- + +125.5 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 594.9 ns/iteration (no available competitor) + +- + +- + +- + +594.9 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 434.4 ns/iteration (no available competitor) + +- + +- + +- + +434.4 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 244.1 ns/iteration (no available competitor) + +- + +- + +- + +244.1 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 8,838 ns/iteration (no available competitor) + +- + +- + +- + +8,838 ns + +- + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,851 ns/iteration (no available competitor) + +- + +- + +- + +4,851 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/windows_x86_64_ClangCL_f256_fastmath_overview_compact.svg b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f256_fastmath_overview_compact.svg new file mode 100644 index 0000000..14c2c47 --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f256_fastmath_overview_compact.svg @@ -0,0 +1,3017 @@ + + + + + +operation + + +bl::f256 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +Subnorm + +avg + +min + +pass + + + +Arithmetic + + + + +add + +fltx bl::f256 +API: bl::add +mean: 226.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 9.45 ns/iteration (no available competitor) + +226.0 + +215.3 + +1/1 + +9.5 ns + +Both + +✗ + +✓ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 226.1 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 1/1 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.1, p01 215.6, worst 215.2, required 190.0, margin 25.2, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 18.68 ns/iteration (no available competitor) + +226.1 + +215.2 + +1/1 + +18.7 ns + +Both + +✗ + +✓ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 216.3 bits +worst: 215.2 bits +domains: 1/1 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 34.99 ns/iteration (no available competitor) + +220.0 + +215.2 + +1/1 + +35.0 ns + +Both + +✓ + +✓ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 1/1 +minimum threshold margin: 24.8 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 219.4, p01 215.4, worst 215.4, required 190.0, margin 25.4, n=55, seed=10322096095657499292 +benchmark: 96.95 ns/iteration (no available competitor) + +219.2 + +214.8 + +1/1 + +96.9 ns + +Both + +✓ + +✓ + + + + +IO + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 300.3 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +300 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 256.5 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +256 ns + +Both + +✓ + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 354.9 ns/iteration (no available competitor) + +219.7 + +212.0 + +2/2 + +355 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.49 ns/iteration (no available competitor) + += + += + +1/1 + +1.5 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.60 ns/iteration (no available competitor) + += + += + +1/1 + +1.6 ns + +Both + +✓ + +- + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 4.28 ns/iteration (no available competitor) + += + += + +1/1 + +4.3 ns + +Both + +✓ + +- + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 8.79 ns/iteration (no available competitor) + += + += + +1/1 + +8.8 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 8.36 ns/iteration (no available competitor) + += + += + +1/1 + +8.4 ns + +Both + +✓ + +- + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 6.56 ns/iteration (no available competitor) + += + += + +1/1 + +6.6 ns + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 6.57 ns/iteration (no available competitor) + += + += + +1/1 + +6.6 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 117.6 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +118 ns + +Both + +✓ + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 160.9 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +161 ns + +Both + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 68.53 ns/iteration (no available competitor) + +244.0 + +217.7 + +3/3 + +68.5 ns + +Both + +✓ + +- + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 100.2 ns/iteration (no available competitor) + += + += + +1/1 + +100 ns + +Both + +✓ + +- + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 99.51 ns/iteration (no available competitor) + += + += + +1/1 + +99.5 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.52 ns/iteration (no available competitor) + += + += + +1/1 + +1.5 ns + +Both + +✓ + +✓ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.71 ns/iteration (no available competitor) + += + += + +1/1 + +1.7 ns + +Both + +✓ + +- + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 20.32 ns/iteration (no available competitor) + +229.7 + +215.1 + +3/3 + +20.3 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 81.34 ns/iteration (no available competitor) + +217.9 + +214.6 + +2/2 + +81.3 ns + +Both + +✓ + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.959 ns/iteration (no available competitor) + += + += + +2/2 + +0.96 ns + +Inf + +✓ + +- + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.962 ns/iteration (no available competitor) + += + += + +2/2 + +0.96 ns + +Inf + +✓ + +- + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 8.14 ns/iteration (no available competitor) + += + += + +2/2 + +8.1 ns + +No + +✓ + +- + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.650 ns/iteration (no available competitor) + += + += + +1/1 + +0.65 ns + +Both + +✓ + +- + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.23 ns/iteration (no available competitor) + += + += + +1/1 + +3.2 ns + +Both + +✓ + +- + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.24 ns/iteration (no available competitor) + += + += + +1/1 + +3.2 ns + +Both + +✓ + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.25 ns/iteration (no available competitor) + += + += + +1/1 + +3.3 ns + +Both + +✓ + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.40 ns/iteration (no available competitor) + += + += + +1/1 + +6.4 ns + +Both + +✓ + +✓ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 20.56 ns/iteration (no available competitor) + += + += + +2/2 + +20.6 ns + +NaN + +✓ + +- + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.08 ns/iteration (no available competitor) + += + += + +2/2 + +1.1 ns + +- + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.969 ns/iteration (no available competitor) + += + += + +2/2 + +0.97 ns + +NaN + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 5.66 ns/iteration (no available competitor) + +- + +- + +- + +5.7 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 5.65 ns/iteration (no available competitor) + +- + +- + +- + +5.7 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 23.21 ns/iteration (no available competitor) + +220.1 + +215.3 + +2/2 + +23.2 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.8 bits +p01: 211.3 bits +worst: 209.6 bits +domains: 3/3 +minimum threshold margin: 19.6 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 218.3, p01 211.5, worst 210.0, required 190.0, margin 20.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 109.1 ns/iteration (no available competitor) + +217.8 + +209.6 + +3/3 + +109 ns + +Both + +✓ + +✓ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 215.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 341.6 ns/iteration (no available competitor) + +219.3 + +215.0 + +2/2 + +342 ns + +Both + +✓ + +- + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 165.1 ns/iteration (no available competitor) + +229.9 + +213.9 + +2/2 + +165 ns + +Both + +✓ + +- + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,625 ns/iteration (no available competitor) + +216.8 + +211.1 + +2/2 + +2625 ns + +Both + +✓ + +- + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 127.1 ns/iteration (no available competitor) + +217.2 + +213.7 + +2/2 + +127 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.8 bits +p01: 210.6 bits +worst: 209.2 bits +domains: 2/2 +minimum threshold margin: 29.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.1, p01 210.6, worst 209.2, required 180.0, margin 29.2, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 1,012 ns/iteration (no available competitor) + +216.8 + +209.2 + +2/2 + +1012 ns + +Both + +- + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 858.3 ns/iteration (no available competitor) + +218.0 + +214.2 + +2/2 + +858 ns + +Both + +- + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 227.2 bits +p01: 207.5 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.0, p01 207.5, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 1,011 ns/iteration (no available competitor) + +227.2 + +207.0 + +2/2 + +1011 ns + +Both + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.8 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.2, p01 215.3, worst 215.0, required 180.0, margin 35.0, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,769 ns/iteration (no available competitor) + +217.8 + +213.3 + +3/3 + +1769 ns + +Both + +- + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 221.1, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,799 ns/iteration (no available competitor) + +218.6 + +213.2 + +3/3 + +1799 ns + +Both + +- + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 217.6, p01 215.1, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,807 ns/iteration (no available competitor) + +217.4 + +213.3 + +3/3 + +1807 ns + +Both + +- + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 226.8 bits +p01: 207.4 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.1, p01 207.4, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,813 ns/iteration (no available competitor) + +226.8 + +207.0 + +2/2 + +1813 ns + +Both + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 910.3 ns/iteration (no available competitor) + +222.3 + +202.9 + +3/3 + +910 ns + +Both + +✓ + +- + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 909.8 ns/iteration (no available competitor) + +226.8 + +208.7 + +3/3 + +910 ns + +Both + +- + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,017 ns/iteration (no available competitor) + +- + +- + +- + +1017 ns + +- + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,104 ns/iteration (no available competitor) + +217.1 + +202.9 + +3/3 + +1104 ns + +Both + +✓ + +- + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,381 ns/iteration (no available competitor) + +217.9 + +214.4 + +2/2 + +1381 ns + +Both + +✓ + +- + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,402 ns/iteration (no available competitor) + +216.0 + +192.5 + +2/2 + +1402 ns + +Both + +- + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 915.5 ns/iteration (no available competitor) + +218.1 + +214.7 + +2/2 + +916 ns + +Both + +✓ + +- + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 977.9 ns/iteration (no available competitor) + +217.9 + +214.3 + +3/3 + +978 ns + +Both + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,315 ns/iteration (no available competitor) + +217.0 + +213.8 + +2/2 + +1315 ns + +Both + +✓ + +- + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,314 ns/iteration (no available competitor) + +217.5 + +214.2 + +2/2 + +1314 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,261 ns/iteration (no available competitor) + +219.1 + +214.0 + +2/2 + +1261 ns + +Both + +✓ + +- + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,676 ns/iteration (no available competitor) + +217.2 + +213.0 + +2/2 + +2676 ns + +Both + +✓ + +- + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,490 ns/iteration (no available competitor) + +217.7 + +213.7 + +2/2 + +2490 ns + +Both + +- + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,330 ns/iteration (no available competitor) + +218.3 + +213.3 + +2/2 + +2330 ns + +Both + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 10,389 ns/iteration (no available competitor) + +208.2 + +189.8 + +2/2 + +10389 ns + +Both + +- + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 10,403 ns/iteration (no available competitor) + +212.8 + +196.8 + +2/2 + +10403 ns + +Both + +✓ + +- + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 10,573 ns/iteration (no available competitor) + +209.0 + +202.5 + +1/1 + +10573 ns + +Both + +- + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 9,573 ns/iteration (no available competitor) + +211.9 + +199.2 + +1/1 + +9573 ns + +Both + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.734 ns/iteration (no available competitor) + += + += + +1/1 + +0.73 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.644 ns/iteration (no available competitor) + += + += + +1/1 + +0.64 ns + +Both + +- + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.841 ns/iteration (no available competitor) + += + += + +1/1 + +0.84 ns + +Both + +- + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.785 ns/iteration (no available competitor) + += + += + +1/1 + +0.79 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.692 ns/iteration (no available competitor) + += + += + +1/1 + +0.69 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.691 ns/iteration (no available competitor) + += + += + +1/1 + +0.69 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 14.34 ns/iteration (no available competitor) + +- + +- + +- + +14.3 ns + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 290.4 ns/iteration (no available competitor) + +- + +- + +- + +290 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 58.04 ns/iteration (no available competitor) + +- + +- + +- + +58.0 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 151.3 ns/iteration (no available competitor) + +- + +- + +- + +151 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,840 ns/iteration (no available competitor) + +- + +- + +- + +1840 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 125.5 ns/iteration (no available competitor) + +- + +- + +- + +126 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 594.9 ns/iteration (no available competitor) + +- + +- + +- + +595 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 434.4 ns/iteration (no available competitor) + +- + +- + +- + +434 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 244.1 ns/iteration (no available competitor) + +- + +- + +- + +244 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 8,838 ns/iteration (no available competitor) + +- + +- + +- + +8838 ns + +- + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,851 ns/iteration (no available competitor) + +- + +- + +- + +4851 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/windows_x86_64_ClangCL_f256_overview.svg b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f256_overview.svg new file mode 100644 index 0000000..8011ce6 --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f256_overview.svg @@ -0,0 +1,7292 @@ + + + + +f256 metrics overview — Windows / x64 / Clang (clang-cl) +Accuracy is MPFR-relative; domain pass counts use FLTX release thresholds; speed is implementation ÷ FLTX. + +operation + + +bl::f256 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time + + + +mpfr_float_backend<64> + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +TLFloat (tloct) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +Arithmetic + + + + + + +add + +fltx bl::f256 +API: bl::add +mean: 227.4 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 9.50 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.773138× + +227.4 + +215.3 + +2/2 + +9.50 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator+ +mean: 225.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.3, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3770, seed=10322096095657499292 +subnormal: mean 245.4, p01 215.5, worst 214.9, required 190.0, margin 24.9, n=326, seed=10322096095657499292 +benchmark: 49.07 ns/iteration, speed vs FLTX 0.19× + +225.0 + +214.0 + +2/2 + +49.07 ns · 0.19× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator+ +mean: 253.1 bits +p01: 237.3 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 251.8, p01 237.3, worst 237.0, required 190.0, margin 47.0, n=3770, seed=10322096095657499292 +subnormal: mean 268.5, p01 239.2, worst 237.9, required 190.0, margin 47.9, n=326, seed=10322096095657499292 +benchmark: 35.84 ns/iteration, speed vs FLTX 0.27× + +253.1 + +237.0 + +2/2 + +35.84 ns · 0.27× + +No + +✗ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 227.4 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.1, p01 215.6, worst 215.2, required 190.0, margin 25.2, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 18.87 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.889515× + +227.4 + +215.2 + +2/2 + +18.87 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator- +mean: 225.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.5, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3791, seed=10322096095657499292 +subnormal: mean 245.9, p01 246.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 48.82 ns/iteration, speed vs FLTX 0.39× + +225.2 + +214.0 + +2/2 + +48.82 ns · 0.39× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator- +mean: 253.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 252.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=3791, seed=10322096095657499292 +subnormal: mean 268.9, p01 269.0, worst 237.7, required 190.0, margin 47.7, n=305, seed=10322096095657499292 +benchmark: 35.66 ns/iteration, speed vs FLTX 0.53× + +253.3 + +237.0 + +2/2 + +35.66 ns · 0.53× + +No + +✗ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 34.88 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.158547× + +220.0 + +215.2 + +2/2 + +34.88 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator* +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4000, seed=10322096095657499292 +subnormal: mean 217.3, p01 214.3, worst 214.3, required 190.0, margin 24.3, n=100, seed=10322096095657499292 +benchmark: 64.39 ns/iteration, speed vs FLTX 0.54× + +216.0 + +214.0 + +2/2 + +64.39 ns · 0.54× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator* +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4000, seed=10322096095657499292 +subnormal: mean 240.2, p01 237.1, worst 237.1, required 190.0, margin 47.1, n=100, seed=10322096095657499292 +benchmark: 40.41 ns/iteration, speed vs FLTX 0.86× + +239.0 + +237.0 + +2/2 + +40.41 ns · 0.86× + +No + +✗ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 2/2 +minimum threshold margin: 24.8 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 219.4, p01 215.4, worst 215.4, required 190.0, margin 25.4, n=55, seed=10322096095657499292 +benchmark: 96.09 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.552363× + +219.2 + +214.8 + +2/2 + +96.09 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator/ +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4045, seed=10322096095657499292 +subnormal: mean 218.2, p01 214.2, worst 214.2, required 190.0, margin 24.2, n=55, seed=10322096095657499292 +benchmark: 179.8 ns/iteration, speed vs FLTX 0.53× + +216.0 + +214.0 + +2/2 + +179.8 ns · 0.53× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator/ +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4045, seed=10322096095657499292 +subnormal: mean 241.4, p01 237.2, worst 237.2, required 190.0, margin 47.2, n=55, seed=10322096095657499292 +benchmark: 149.2 ns/iteration, speed vs FLTX 0.64× + +239.0 + +237.0 + +2/2 + +149.2 ns · 0.64× + +No + +✗ + + + + +IO + + + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 290.6 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.59142× + +220.4 + +217.0 + +2/2 + +290.6 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost number::str +mean: 220.3 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.2, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 462.5 ns/iteration, speed vs FLTX 0.63× + +220.3 + +217.0 + +2/2 + +462.5 ns · 0.63× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::to_string +mean: 216.9 bits +p01: 214.0 bits +worst: 213.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.1, p01 214.1, worst 213.6, required 190.0, margin 23.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 216.7, p01 214.0, worst 213.6, required 190.0, margin 23.6, n=4096, seed=10322096095657499357 +benchmark: 8,590 ns/iteration, speed vs FLTX 0.03× + +216.9 + +213.6 + +2/2 + +8,590 ns · 0.03× + +Both + +✓ + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 253.7 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +253.7 ns + +Both + +✓ + + +mpfr64: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 347.7 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.021247× + +219.7 + +212.0 + +2/2 + +347.7 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost string constructor +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 2.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4098, seed=10322096095657499308 +benchmark: 355.1 ns/iteration, speed vs FLTX 0.98× + +216.0 + +214.0 + +2/2 + +355.1 ns · 0.98× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat string constructor +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 212.0, margin 25.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 238.9, p01 237.2, worst 237.1, required 212.0, margin 25.1, n=4098, seed=10322096095657499308 +benchmark: 6,776 ns/iteration, speed vs FLTX 0.05× + +238.9 + +237.0 + +2/2 + +6,776 ns · 0.05× + +No + +✗ + + + + +Rounding + + + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.50 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 4.081993× + +exact + +exact + +1/1 + +1.50 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 42.66 ns/iteration, speed vs FLTX 0.04× + +exact + +exact + +1/1 + +42.66 ns · 0.04× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 6.13 ns/iteration, speed vs FLTX 0.24× + +exact + +exact + +1/1 + +6.13 ns · 0.24× + +No + +✗ + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.50 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.768792× + +exact + +exact + +1/1 + +1.50 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 42.57 ns/iteration, speed vs FLTX 0.04× + +exact + +exact + +1/1 + +42.57 ns · 0.04× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 5.67 ns/iteration, speed vs FLTX 0.27× + +exact + +exact + +1/1 + +5.67 ns · 0.27× + +No + +✗ + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 4.19 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 0.743462× + +exact + +exact + +1/1 + +4.19 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 42.03 ns/iteration, speed vs FLTX 0.10× + +exact + +exact + +1/1 + +42.03 ns · 0.10× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 3.12 ns/iteration, speed vs FLTX 1.35× + +exact + +exact + +1/1 + +3.12 ns · 1.35× + +No + +✗ + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 8.86 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 0.77348× + +exact + +exact + +1/1 + +8.86 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 82.81 ns/iteration, speed vs FLTX 0.11× + +exact + +exact + +1/1 + +82.81 ns · 0.11× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 6.86 ns/iteration, speed vs FLTX 1.29× + +exact + +exact + +1/1 + +6.86 ns · 1.29× + +No + +✗ + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 8.31 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.520882× + +exact + +exact + +1/1 + +8.31 ns + +Both + +✓ + + +mpfr64: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 12.64 ns/iteration, speed vs FLTX 0.66× + +exact + +exact + +1/1 + +12.64 ns · 0.66× + +No + +✗ + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 6.65 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 18.253495× + +exact + +exact + +1/1 + +6.65 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 121.5 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +1/1 + +121.5 ns · 0.05× + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 6.32 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 33.304018× + +exact + +exact + +1/1 + +6.32 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 210.5 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +210.5 ns · 0.03× + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 117.8 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +117.8 ns + +Both + +✓ + + +mpfr64: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 161.1 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +161.1 ns + +Both + +✓ + + +mpfr64: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 69.11 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.781393× + +244.0 + +217.7 + +3/3 + +69.11 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 192.2 ns/iteration, speed vs FLTX 0.36× + +exact + +exact + +3/3 + +192.2 ns · 0.36× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 336.8 ns/iteration, speed vs FLTX 0.21× + +exact + +exact + +3/3 + +336.8 ns · 0.21× + +No + +✗ + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 100.5 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.329546× + +exact + +exact + +1/1 + +100.5 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 234.1 ns/iteration, speed vs FLTX 0.43× + +exact + +exact + +1/1 + +234.1 ns · 0.43× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 365.0 ns/iteration, speed vs FLTX 0.28× + +exact + +exact + +1/1 + +365.0 ns · 0.28× + +No + +✗ + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 100.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.654819× + +exact + +exact + +1/1 + +100.2 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 266.1 ns/iteration, speed vs FLTX 0.38× + +exact + +exact + +1/1 + +266.1 ns · 0.38× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 367.7 ns/iteration, speed vs FLTX 0.27× + +exact + +exact + +1/1 + +367.7 ns · 0.27× + +No + +✗ + + + + +Float Utils + + + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.09 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 0.474256× + +exact + +exact + +2/2 + +2.09 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 37.77 ns/iteration, speed vs FLTX 0.06× + +exact + +exact + +2/2 + +37.77 ns · 0.06× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.993 ns/iteration, speed vs FLTX 2.11× + +exact + +exact + +2/2 + +0.993 ns · 2.11× + +No + +✓ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.97 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 0.503968× + +exact + +exact + +1/1 + +1.97 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 38.20 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +1/1 + +38.20 ns · 0.05× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.994 ns/iteration, speed vs FLTX 1.98× + +exact + +exact + +1/1 + +0.994 ns · 1.98× + +No + +✓ + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 21.16 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.643416× + +229.7 + +215.1 + +3/3 + +21.16 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fma +mean: 228.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 222.8, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 85.11 ns/iteration, speed vs FLTX 0.25× + +228.3 + +214.0 + +3/3 + +85.11 ns · 0.25× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fma +mean: 251.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 245.2, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 77.09 ns/iteration, speed vs FLTX 0.27× + +251.1 + +237.0 + +3/3 + +77.09 ns · 0.27× + +No + +✗ + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 86.29 ns/iteration (no available competitor) + +217.9 + +214.6 + +2/2 + +86.29 ns + +Both + +✓ + + +mpfr64: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.05 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 6.133177× + +exact + +exact + +2/2 + +1.05 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 46.74 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +2/2 + +46.74 ns · 0.02× + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.42 ns/iteration, speed vs FLTX 0.16× + +exact + +exact + +2/2 + +6.42 ns · 0.16× + +No + +✗ + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.00 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 6.84695× + +exact + +exact + +2/2 + +1.00 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 45.47 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +2/2 + +45.47 ns · 0.02× + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.86 ns/iteration, speed vs FLTX 0.15× + +exact + +exact + +2/2 + +6.86 ns · 0.15× + +No + +✗ + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 8.44 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 5.10192× + +exact + +exact + +2/2 + +8.44 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fdim +mean: 243.7 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 241.3, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +benchmark: 43.08 ns/iteration, speed vs FLTX 0.20× + +243.7 + +214.0 + +2/2 + +43.08 ns · 0.20× + +No + +✓ + + +TLFloat Octuple +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 56.58 ns/iteration, speed vs FLTX 0.15× + +exact + +exact + +2/2 + +56.58 ns · 0.15× + +No + +✓ + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.740 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.348825× + +exact + +exact + +1/1 + +0.740 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 40.09 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +1/1 + +40.09 ns · 0.02× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.998 ns/iteration, speed vs FLTX 0.74× + +exact + +exact + +1/1 + +0.998 ns · 0.74× + +No + +✗ + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.20 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 9.86339× + +exact + +exact + +1/1 + +3.20 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 39.85 ns/iteration, speed vs FLTX 0.08× + +exact + +exact + +1/1 + +39.85 ns · 0.08× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 31.54 ns/iteration, speed vs FLTX 0.10× + +exact + +exact + +1/1 + +31.54 ns · 0.10× + +No + +✗ + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.20 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 12.349575× + +exact + +exact + +1/1 + +3.20 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 39.52 ns/iteration, speed vs FLTX 0.08× + +exact + +exact + +1/1 + +39.52 ns · 0.08× + +Both + +✓ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.19 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 12.11196× + +exact + +exact + +1/1 + +3.19 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 38.64 ns/iteration, speed vs FLTX 0.08× + +exact + +exact + +1/1 + +38.64 ns · 0.08× + +Both + +✓ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 13.95 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.131249× + +exact + +exact + +2/2 + +13.95 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 69.70 ns/iteration, speed vs FLTX 0.20× + +exact + +exact + +2/2 + +69.70 ns · 0.20× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 43.68 ns/iteration, speed vs FLTX 0.32× + +exact + +exact + +2/2 + +43.68 ns · 0.32× + +No + +✗ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 20.23 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 2.12386× + +exact + +exact + +2/2 + +20.23 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 169.4 ns/iteration, speed vs FLTX 0.12× + +exact + +exact + +2/2 + +169.4 ns · 0.12× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 42.96 ns/iteration, speed vs FLTX 0.47× + +exact + +exact + +2/2 + +42.96 ns · 0.47× + +No + +✗ + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.08 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 0.615668× + +exact + +exact + +2/2 + +1.08 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 32.13 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +2/2 + +32.13 ns · 0.03× + +- + +- + + +TLFloat Octuple +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.665 ns/iteration, speed vs FLTX 1.62× + +exact + +exact + +2/2 + +0.665 ns · 1.62× + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.974 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 74.044423× + +exact + +exact + +2/2 + +0.974 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 72.12 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +2/2 + +72.12 ns · 0.01× + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 5.72 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.126879× + +- + +- + +- + +5.72 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter +benchmark: 457.4 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +457.4 ns · 0.01× + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter +benchmark: 17.90 ns/iteration, speed vs FLTX 0.32× + +- + +- + +- + +17.90 ns · 0.32× + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 5.74 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.112401× + +- + +- + +- + +5.74 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter (same type) +benchmark: 452.2 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +452.2 ns · 0.01× + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter (same type) +benchmark: 17.87 ns/iteration, speed vs FLTX 0.32× + +- + +- + +- + +17.87 ns · 0.32× + +- + +- + + + + +Roots & powers + + + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 23.22 ns/iteration (no available competitor) + +220.1 + +215.3 + +2/2 + +23.22 ns + +Both + +✓ + + +mpfr64: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.9 bits +p01: 211.3 bits +worst: 209.6 bits +domains: 4/4 +minimum threshold margin: 19.6 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 218.3, p01 211.5, worst 210.0, required 190.0, margin 20.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 109.8 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.220824× + +217.9 + +209.6 + +4/4 + +109.8 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sqrt +mean: 216.2 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 4/4 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 216.2, p01 214.4, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499359 +subnormal: mean 216.8, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 134.0 ns/iteration, speed vs FLTX 0.82× + +216.2 + +214.0 + +4/4 + +134.0 ns · 0.82× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sqrt +mean: 239.2 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 4/4 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 239.0, p01 237.4, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499359 +subnormal: mean 239.7, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 239.0, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 197.8 ns/iteration, speed vs FLTX 0.56× + +239.2 + +237.0 + +4/4 + +197.8 ns · 0.56× + +No + +✗ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 215.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 341.9 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.23804× + +219.3 + +215.0 + +2/2 + +341.9 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cbrt +mean: 216.0 bits +p01: 214.2 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.1, p01 214.3, worst 214.1, required 190.0, margin 24.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.1, required 190.0, margin 24.1, n=4096, seed=10322096095657499357 +benchmark: 423.3 ns/iteration, speed vs FLTX 0.81× + +216.0 + +214.1 + +2/2 + +423.3 ns · 0.81× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::cbrt +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 239.2, p01 237.3, worst 237.1, required 190.0, margin 47.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499357 +benchmark: 1,698 ns/iteration, speed vs FLTX 0.20× + +239.0 + +237.0 + +2/2 + +1,698 ns · 0.20× + +No + +✗ + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 165.5 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.786351× + +229.9 + +213.9 + +2/2 + +165.5 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::hypot +mean: 228.7 bits +p01: 213.2 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 215.3, p01 213.2, worst 212.9, required 190.0, margin 22.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 242.0, p01 213.6, worst 212.9, required 190.0, margin 22.9, n=4096, seed=10322096095657499357 +benchmark: 451.6 ns/iteration, speed vs FLTX 0.37× + +228.7 + +212.9 + +2/2 + +451.6 ns · 0.37× + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::hypot +mean: 251.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 239.0, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 264.8, p01 237.6, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 295.6 ns/iteration, speed vs FLTX 0.56× + +251.9 + +237.0 + +2/2 + +295.6 ns · 0.56× + +No + +✓ + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,682 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.137531× + +216.8 + +211.1 + +2/2 + +2,682 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,051 ns/iteration, speed vs FLTX 0.88× + +215.9 + +214.0 + +2/2 + +3,051 ns · 0.88× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::pow +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 10,861 ns/iteration, speed vs FLTX 0.25× + +238.9 + +237.0 + +2/2 + +10,861 ns · 0.25× + +No + +✗ + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 127.7 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.348903× + +217.2 + +213.7 + +2/2 + +127.7 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow(value, int) +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 172.2 ns/iteration, speed vs FLTX 0.74× + +216.0 + +214.0 + +2/2 + +172.2 ns · 0.74× + +Both + +✓ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.8 bits +p01: 210.6 bits +worst: 209.2 bits +domains: 2/2 +minimum threshold margin: 29.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.1, p01 210.6, worst 209.2, required 180.0, margin 29.2, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 1,016 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.247817× + +216.8 + +209.2 + +2/2 + +1,016 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,268 ns/iteration, speed vs FLTX 0.80× + +215.9 + +214.0 + +2/2 + +1,268 ns · 0.80× + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 2,342 ns/iteration, speed vs FLTX 0.43× + +239.0 + +237.0 + +2/2 + +2,342 ns · 0.43× + +No + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 863.6 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.720811× + +218.0 + +214.2 + +2/2 + +863.6 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp2 +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,486 ns/iteration, speed vs FLTX 0.58× + +216.0 + +214.0 + +2/2 + +1,486 ns · 0.58× + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp2 +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +benchmark: 5,540 ns/iteration, speed vs FLTX 0.16× + +238.9 + +237.0 + +2/2 + +5,540 ns · 0.16× + +No + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 227.2 bits +p01: 207.5 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.0, p01 207.5, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 1,016 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.369535× + +227.2 + +207.0 + +2/2 + +1,016 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::expm1 +mean: 227.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,391 ns/iteration, speed vs FLTX 0.73× + +227.5 + +214.0 + +2/2 + +1,391 ns · 0.73× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::expm1 +mean: 250.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4098, seed=10322096095657499336 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 2,486 ns/iteration, speed vs FLTX 0.41× + +250.1 + +237.0 + +2/2 + +2,486 ns · 0.41× + +No + +✗ + + + + +Logarithms + + + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.8 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.2, p01 215.3, worst 215.0, required 180.0, margin 35.0, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,790 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.331069× + +217.8 + +213.3 + +3/3 + +1,790 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.7, p01 214.4, worst 214.3, required 180.0, margin 34.3, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 2,383 ns/iteration, speed vs FLTX 0.75× + +215.9 + +214.0 + +3/3 + +2,383 ns · 0.75× + +Both + +- + + +TLFloat Octuple +API: tlfloat::log +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.8, p01 237.3, worst 237.3, required 180.0, margin 57.3, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 3,074 ns/iteration, speed vs FLTX 0.58× + +238.9 + +237.0 + +3/3 + +3,074 ns · 0.58× + +No + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 221.1, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,827 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.423591× + +218.6 + +213.2 + +3/3 + +1,827 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log2 +mean: 217.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 220.0, p01 214.9, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 2,601 ns/iteration, speed vs FLTX 0.70× + +217.3 + +214.0 + +3/3 + +2,601 ns · 0.70× + +Both + +- + + +TLFloat Octuple +API: tlfloat::log2 +mean: 240.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 243.0, p01 237.9, worst 237.8, required 180.0, margin 57.8, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 3,089 ns/iteration, speed vs FLTX 0.59× + +240.3 + +237.0 + +3/3 + +3,089 ns · 0.59× + +No + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 217.6, p01 215.1, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,847 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.67243× + +217.4 + +213.3 + +3/3 + +1,847 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log10 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.8, p01 214.1, worst 214.1, required 180.0, margin 34.1, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 4,602 ns/iteration, speed vs FLTX 0.40× + +215.9 + +214.0 + +3/3 + +4,602 ns · 0.40× + +Both + +- + + +TLFloat Octuple +API: tlfloat::log10 +mean: 238.8 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.6, p01 237.1, worst 237.1, required 180.0, margin 57.1, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 3,089 ns/iteration, speed vs FLTX 0.60× + +238.8 + +237.0 + +3/3 + +3,089 ns · 0.60× + +No + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 226.8 bits +p01: 207.4 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.1, p01 207.4, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,819 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.357644× + +226.8 + +207.0 + +2/2 + +1,819 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log1p +mean: 227.4 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 2,470 ns/iteration, speed vs FLTX 0.74× + +227.4 + +214.0 + +2/2 + +2,470 ns · 0.74× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::log1p +mean: 250.1 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.4, worst 237.0, required 180.0, margin 57.0, n=4098, seed=10322096095657499336 +moderate: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 3,551 ns/iteration, speed vs FLTX 0.51× + +250.1 + +237.0 + +2/2 + +3,551 ns · 0.51× + +No + +✗ + + + + +Trigonometric + + + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 912.9 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.855864× + +222.3 + +202.9 + +3/3 + +912.9 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sin +mean: 218.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.3, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 222.9, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 1,694 ns/iteration, speed vs FLTX 0.54× + +218.5 + +214.0 + +3/3 + +1,694 ns · 0.54× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sin +mean: 241.2 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 245.1, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 2,624 ns/iteration, speed vs FLTX 0.35× + +241.2 + +237.0 + +3/3 + +2,624 ns · 0.35× + +No + +✗ + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 919.9 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.421156× + +226.8 + +208.7 + +3/3 + +919.9 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cos +mean: 219.4 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 220.7, p01 214.5, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 221.2, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 1,307 ns/iteration, speed vs FLTX 0.70× + +219.4 + +214.0 + +3/3 + +1,307 ns · 0.70× + +Both + +- + + +TLFloat Octuple +API: tlfloat::cos +mean: 241.7 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 242.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 243.4, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 2,608 ns/iteration, speed vs FLTX 0.35× + +241.7 + +237.0 + +3/3 + +2,608 ns · 0.35× + +No + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,019 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 5.141782× + +- + +- + +- + +1,019 ns + +- + +- + + +mpfr64: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::sincos +benchmark: 5,238 ns/iteration, speed vs FLTX 0.19× + +- + +- + +- + +5,238 ns · 0.19× + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,107 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.721173× + +217.1 + +202.9 + +3/3 + +1,107 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tan +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 44.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.1, p01 214.1, worst 214.0, required 170.0, margin 44.0, n=4104, seed=10322096095657499353 +moderate: mean 216.0, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 215.9, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4315, seed=10322096095657499369 +benchmark: 1,905 ns/iteration, speed vs FLTX 0.58× + +216.0 + +214.0 + +3/3 + +1,905 ns · 0.58× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 67.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 238.9, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4104, seed=10322096095657499353 +moderate: mean 239.0, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 238.9, p01 237.2, worst 237.1, required 170.0, margin 67.1, n=4315, seed=10322096095657499369 +benchmark: 3,180 ns/iteration, speed vs FLTX 0.35× + +239.0 + +237.0 + +3/3 + +3,180 ns · 0.35× + +No + +✗ + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,405 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.587325× + +217.9 + +214.4 + +2/2 + +1,405 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asin +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.1, p01 214.7, worst 214.7, required 180.0, margin 34.7, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 6,063 ns/iteration, speed vs FLTX 0.23× + +216.0 + +214.0 + +2/2 + +6,063 ns · 0.23× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asin +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.1, p01 237.7, worst 237.7, required 180.0, margin 57.7, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 5,038 ns/iteration, speed vs FLTX 0.28× + +239.0 + +237.0 + +2/2 + +5,038 ns · 0.28× + +No + +✗ + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,424 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.56274× + +216.0 + +192.5 + +2/2 + +1,424 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acos +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 6,265 ns/iteration, speed vs FLTX 0.23× + +215.9 + +214.0 + +2/2 + +6,265 ns · 0.23× + +Both + +- + + +TLFloat Octuple +API: tlfloat::acos +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4105, seed=10322096095657499355 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 5,074 ns/iteration, speed vs FLTX 0.28× + +238.9 + +237.0 + +2/2 + +5,074 ns · 0.28× + +No + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 921.3 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.177536× + +218.1 + +214.7 + +2/2 + +921.3 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 2,006 ns/iteration, speed vs FLTX 0.46× + +216.0 + +214.0 + +2/2 + +2,006 ns · 0.46× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 4,610 ns/iteration, speed vs FLTX 0.20× + +239.0 + +237.0 + +2/2 + +4,610 ns · 0.20× + +Inf + +✗ + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 983.1 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.090884× + +217.9 + +214.3 + +3/3 + +983.1 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan2 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 215.3, p01 215.2, worst 215.2, required 180.0, margin 35.2, n=8, seed=10322096095657499351 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 2,055 ns/iteration, speed vs FLTX 0.48× + +215.9 + +214.0 + +3/3 + +2,055 ns · 0.48× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan2 +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 240.6, p01 237.8, worst 237.8, required 180.0, margin 57.8, n=8, seed=10322096095657499351 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 4,577 ns/iteration, speed vs FLTX 0.21× + +239.0 + +237.0 + +3/3 + +4,577 ns · 0.21× + +Inf + +✗ + + + + +Hyperbolic + + + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,294 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.151794× + +217.0 + +213.8 + +2/2 + +1,294 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sinh +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,490 ns/iteration, speed vs FLTX 0.87× + +216.0 + +214.0 + +2/2 + +1,490 ns · 0.87× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 2,742 ns/iteration, speed vs FLTX 0.47× + +238.9 + +237.0 + +2/2 + +2,742 ns · 0.47× + +No + +✗ + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,292 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.13497× + +217.5 + +214.2 + +2/2 + +1,292 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,466 ns/iteration, speed vs FLTX 0.88× + +215.9 + +214.0 + +2/2 + +1,466 ns · 0.88× + +Both + +- + + +TLFloat Octuple +API: tlfloat::cosh +mean: 238.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 2,539 ns/iteration, speed vs FLTX 0.51× + +238.9 + +237.0 + +2/2 + +2,539 ns · 0.51× + +No + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,272 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.194053× + +219.1 + +214.0 + +2/2 + +1,272 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tanh +mean: 216.2 bits +p01: 214.3 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.6, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,519 ns/iteration, speed vs FLTX 0.84× + +216.2 + +214.0 + +2/2 + +1,519 ns · 0.84× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tanh +mean: 239.2 bits +p01: 237.2 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.0, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 2,680 ns/iteration, speed vs FLTX 0.47× + +239.2 + +237.1 + +2/2 + +2,680 ns · 0.47× + +Inf + +✗ + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,693 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.314536× + +217.2 + +213.0 + +2/2 + +2,693 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asinh +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 6,234 ns/iteration, speed vs FLTX 0.43× + +215.9 + +214.0 + +2/2 + +6,234 ns · 0.43× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 10,873 ns/iteration, speed vs FLTX 0.25× + +238.9 + +237.0 + +2/2 + +10,873 ns · 0.25× + +No + +✗ + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,492 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.503542× + +217.7 + +213.7 + +2/2 + +2,492 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.8, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4101, seed=10322096095657499355 +moderate: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499275 +benchmark: 3,746 ns/iteration, speed vs FLTX 0.67× + +215.9 + +214.0 + +2/2 + +3,746 ns · 0.67× + +Both + +- + + +TLFloat Octuple +API: tlfloat::acosh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.7, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4101, seed=10322096095657499355 +moderate: mean 239.0, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499275 +benchmark: 10,240 ns/iteration, speed vs FLTX 0.24× + +238.9 + +237.0 + +2/2 + +10,240 ns · 0.24× + +No + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,342 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.260754× + +218.3 + +213.3 + +2/2 + +2,342 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atanh +mean: 216.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.5, p01 214.9, worst 214.9, required 180.0, margin 34.9, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 2,952 ns/iteration, speed vs FLTX 0.79× + +216.2 + +214.0 + +2/2 + +2,952 ns · 0.79× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atanh +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.4, p01 237.9, worst 237.4, required 180.0, margin 57.4, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 3,751 ns/iteration, speed vs FLTX 0.62× + +239.1 + +237.0 + +2/2 + +3,751 ns · 0.62× + +No + +✗ + + + + +Special + + + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 10,511 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.611342× + +208.2 + +189.8 + +2/2 + +10,511 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erfc +mean: 216.1 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 216.2, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 27,448 ns/iteration, speed vs FLTX 0.38× + +216.1 + +214.0 + +2/2 + +27,448 ns · 0.38× + +Both + +- + + +TLFloat Octuple +API: tlfloat::erfc +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 239.2, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 127,012 ns/iteration, speed vs FLTX 0.08× + +239.1 + +237.0 + +2/2 + +127,012 ns · 0.08× + +Inf + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 10,459 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.594009× + +212.8 + +196.8 + +2/2 + +10,459 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erf +mean: 216.3 bits +p01: 214.3 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 34.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.5, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499359 +benchmark: 16,671 ns/iteration, speed vs FLTX 0.63× + +216.3 + +214.1 + +2/2 + +16,671 ns · 0.63× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::erf +mean: 239.2 bits +p01: 237.3 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.6, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.3, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 126,759 ns/iteration, speed vs FLTX 0.08× + +239.2 + +237.1 + +2/2 + +126,759 ns · 0.08× + +Inf + +✗ + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 10,654 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.389015× + +209.0 + +202.5 + +1/1 + +10,654 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499320 +benchmark: 14,798 ns/iteration, speed vs FLTX 0.72× + +215.9 + +214.0 + +1/1 + +14,798 ns · 0.72× + +Both + +- + + +TLFloat Octuple +API: tlfloat::tgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499320 +benchmark: 50,622 ns/iteration, speed vs FLTX 0.21× + +238.9 + +237.0 + +1/1 + +50,622 ns · 0.21× + +No + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 9,634 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.315764× + +211.9 + +199.2 + +1/1 + +9,634 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499323 +benchmark: 12,677 ns/iteration, speed vs FLTX 0.76× + +215.9 + +214.0 + +1/1 + +12,677 ns · 0.76× + +Both + +- + + +TLFloat Octuple +API: tlfloat::lgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499323 +benchmark: 45,238 ns/iteration, speed vs FLTX 0.21× + +238.9 + +237.0 + +1/1 + +45,238 ns · 0.21× + +No + +- + + + + +Comparisons + + + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.734 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 5.774787× + +exact + +exact + +1/1 + +0.734 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.05 ns/iteration, speed vs FLTX 0.12× + +exact + +exact + +1/1 + +6.05 ns · 0.12× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.24 ns/iteration, speed vs FLTX 0.17× + +exact + +exact + +1/1 + +4.24 ns · 0.17× + +Both + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.643 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 6.446785× + +exact + +exact + +1/1 + +0.643 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.84 ns/iteration, speed vs FLTX 0.11× + +exact + +exact + +1/1 + +5.84 ns · 0.11× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.15 ns/iteration, speed vs FLTX 0.16× + +exact + +exact + +1/1 + +4.15 ns · 0.16× + +Both + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.857 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 6.857× + +exact + +exact + +1/1 + +0.857 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.34 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +6.34 ns · 0.14× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.87 ns/iteration, speed vs FLTX 0.15× + +exact + +exact + +1/1 + +5.87 ns · 0.15× + +Both + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.808 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 7.240871× + +exact + +exact + +1/1 + +0.808 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.39 ns/iteration, speed vs FLTX 0.13× + +exact + +exact + +1/1 + +6.39 ns · 0.13× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.85 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +5.85 ns · 0.14× + +Both + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.796 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 7.318774× + +exact + +exact + +1/1 + +0.796 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.47 ns/iteration, speed vs FLTX 0.12× + +exact + +exact + +1/1 + +6.47 ns · 0.12× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.83 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +5.83 ns · 0.14× + +Both + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.790 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 7.318003× + +exact + +exact + +1/1 + +0.790 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.62 ns/iteration, speed vs FLTX 0.12× + +exact + +exact + +1/1 + +6.62 ns · 0.12× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.78 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +5.78 ns · 0.14× + +Both + +- + + + + +Random + + + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 14.86 ns/iteration (no available competitor) + +- + +- + +- + +14.86 ns + +- + +- + + +mpfr64: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 292.5 ns/iteration (no available competitor) + +- + +- + +- + +292.5 ns + +- + +- + + +mpfr64: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 58.57 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.965534× + +- + +- + +- + +58.57 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same expression +benchmark: 138.2 ns/iteration, speed vs FLTX 0.42× + +- + +- + +- + +138.2 ns · 0.42× + +- + +- + + +TLFloat Octuple +API: same expression +benchmark: 115.1 ns/iteration, speed vs FLTX 0.51× + +- + +- + +- + +115.1 ns · 0.51× + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 151.7 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.867225× + +- + +- + +- + +151.7 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 302.9 ns/iteration, speed vs FLTX 0.50× + +- + +- + +- + +302.9 ns · 0.50× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 283.2 ns/iteration, speed vs FLTX 0.54× + +- + +- + +- + +283.2 ns · 0.54× + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,852 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.256524× + +- + +- + +- + +1,852 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 2,327 ns/iteration, speed vs FLTX 0.80× + +- + +- + +- + +2,327 ns · 0.80× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 5,364 ns/iteration, speed vs FLTX 0.35× + +- + +- + +- + +5,364 ns · 0.35× + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 128.4 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.886736× + +- + +- + +- + +128.4 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 242.2 ns/iteration, speed vs FLTX 0.53× + +- + +- + +- + +242.2 ns · 0.53× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 274.7 ns/iteration, speed vs FLTX 0.47× + +- + +- + +- + +274.7 ns · 0.47× + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 594.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.600179× + +- + +- + +- + +594.2 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 950.8 ns/iteration, speed vs FLTX 0.62× + +- + +- + +- + +950.8 ns · 0.62× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 1,078 ns/iteration, speed vs FLTX 0.55× + +- + +- + +- + +1,078 ns · 0.55× + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 442.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.682814× + +- + +- + +- + +442.2 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 744.2 ns/iteration, speed vs FLTX 0.59× + +- + +- + +- + +744.2 ns · 0.59× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 1,051 ns/iteration, speed vs FLTX 0.42× + +- + +- + +- + +1,051 ns · 0.42× + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 246.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.312852× + +- + +- + +- + +246.2 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 323.2 ns/iteration, speed vs FLTX 0.76× + +- + +- + +- + +323.2 ns · 0.76× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 406.7 ns/iteration, speed vs FLTX 0.61× + +- + +- + +- + +406.7 ns · 0.61× + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 8,950 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.25838× + +- + +- + +- + +8,950 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 11,262 ns/iteration, speed vs FLTX 0.79× + +- + +- + +- + +11,262 ns · 0.79× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 21,212 ns/iteration, speed vs FLTX 0.42× + +- + +- + +- + +21,212 ns · 0.42× + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,892 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.082631× + +- + +- + +- + +4,892 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 10,188 ns/iteration, speed vs FLTX 0.48× + +- + +- + +- + +10,188 ns · 0.48× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 15,700 ns/iteration, speed vs FLTX 0.31× + +- + +- + +- + +15,700 ns · 0.31× + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/windows_x86_64_ClangCL_f256_overview_compact.svg b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f256_overview_compact.svg new file mode 100644 index 0000000..5be4a8e --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_ClangCL_f256_overview_compact.svg @@ -0,0 +1,7289 @@ + + + + + +operation + + +bl::f256 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +mpfr_float_backend<64> + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +TLFloat (tloct) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +Arithmetic + + + + + + +add + +fltx bl::f256 +API: bl::add +mean: 227.4 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 9.50 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.773138× + +227.4 + +215.3 + +2/2 + +9.5 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator+ +mean: 225.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.3, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3770, seed=10322096095657499292 +subnormal: mean 245.4, p01 215.5, worst 214.9, required 190.0, margin 24.9, n=326, seed=10322096095657499292 +benchmark: 49.07 ns/iteration, speed vs FLTX 0.19× + +225.0 + +214.0 + +2/2 + +49.1 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator+ +mean: 253.1 bits +p01: 237.3 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 251.8, p01 237.3, worst 237.0, required 190.0, margin 47.0, n=3770, seed=10322096095657499292 +subnormal: mean 268.5, p01 239.2, worst 237.9, required 190.0, margin 47.9, n=326, seed=10322096095657499292 +benchmark: 35.84 ns/iteration, speed vs FLTX 0.27× + +253.1 + +237.0 + +2/2 + +35.8 ns + +No + +✗ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 227.4 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.1, p01 215.6, worst 215.2, required 190.0, margin 25.2, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 18.87 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.889515× + +227.4 + +215.2 + +2/2 + +18.9 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator- +mean: 225.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.5, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3791, seed=10322096095657499292 +subnormal: mean 245.9, p01 246.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 48.82 ns/iteration, speed vs FLTX 0.39× + +225.2 + +214.0 + +2/2 + +48.8 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator- +mean: 253.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 252.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=3791, seed=10322096095657499292 +subnormal: mean 268.9, p01 269.0, worst 237.7, required 190.0, margin 47.7, n=305, seed=10322096095657499292 +benchmark: 35.66 ns/iteration, speed vs FLTX 0.53× + +253.3 + +237.0 + +2/2 + +35.7 ns + +No + +✗ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 34.88 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.158547× + +220.0 + +215.2 + +2/2 + +34.9 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator* +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4000, seed=10322096095657499292 +subnormal: mean 217.3, p01 214.3, worst 214.3, required 190.0, margin 24.3, n=100, seed=10322096095657499292 +benchmark: 64.39 ns/iteration, speed vs FLTX 0.54× + +216.0 + +214.0 + +2/2 + +64.4 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator* +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4000, seed=10322096095657499292 +subnormal: mean 240.2, p01 237.1, worst 237.1, required 190.0, margin 47.1, n=100, seed=10322096095657499292 +benchmark: 40.41 ns/iteration, speed vs FLTX 0.86× + +239.0 + +237.0 + +2/2 + +40.4 ns + +No + +✗ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 2/2 +minimum threshold margin: 24.8 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 219.4, p01 215.4, worst 215.4, required 190.0, margin 25.4, n=55, seed=10322096095657499292 +benchmark: 96.09 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.552363× + +219.2 + +214.8 + +2/2 + +96.1 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator/ +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4045, seed=10322096095657499292 +subnormal: mean 218.2, p01 214.2, worst 214.2, required 190.0, margin 24.2, n=55, seed=10322096095657499292 +benchmark: 179.8 ns/iteration, speed vs FLTX 0.53× + +216.0 + +214.0 + +2/2 + +180 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator/ +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4045, seed=10322096095657499292 +subnormal: mean 241.4, p01 237.2, worst 237.2, required 190.0, margin 47.2, n=55, seed=10322096095657499292 +benchmark: 149.2 ns/iteration, speed vs FLTX 0.64× + +239.0 + +237.0 + +2/2 + +149 ns + +No + +✗ + + + + +IO + + + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 290.6 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.59142× + +220.4 + +217.0 + +2/2 + +291 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost number::str +mean: 220.3 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.2, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 462.5 ns/iteration, speed vs FLTX 0.63× + +220.3 + +217.0 + +2/2 + +462 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::to_string +mean: 216.9 bits +p01: 214.0 bits +worst: 213.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.1, p01 214.1, worst 213.6, required 190.0, margin 23.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 216.7, p01 214.0, worst 213.6, required 190.0, margin 23.6, n=4096, seed=10322096095657499357 +benchmark: 8,590 ns/iteration, speed vs FLTX 0.03× + +216.9 + +213.6 + +2/2 + +8590 ns + +Both + +✓ + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 253.7 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +254 ns + +Both + +✓ + + +mpfr64: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 347.7 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.021247× + +219.7 + +212.0 + +2/2 + +348 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost string constructor +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 2.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4098, seed=10322096095657499308 +benchmark: 355.1 ns/iteration, speed vs FLTX 0.98× + +216.0 + +214.0 + +2/2 + +355 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat string constructor +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 212.0, margin 25.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 238.9, p01 237.2, worst 237.1, required 212.0, margin 25.1, n=4098, seed=10322096095657499308 +benchmark: 6,776 ns/iteration, speed vs FLTX 0.05× + +238.9 + +237.0 + +2/2 + +6776 ns + +No + +✗ + + + + +Rounding + + + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.50 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 4.081993× + += + += + +1/1 + +1.5 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 42.66 ns/iteration, speed vs FLTX 0.04× + += + += + +1/1 + +42.7 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 6.13 ns/iteration, speed vs FLTX 0.24× + += + += + +1/1 + +6.1 ns + +No + +✗ + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.50 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.768792× + += + += + +1/1 + +1.5 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 42.57 ns/iteration, speed vs FLTX 0.04× + += + += + +1/1 + +42.6 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 5.67 ns/iteration, speed vs FLTX 0.27× + += + += + +1/1 + +5.7 ns + +No + +✗ + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 4.19 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 0.743462× + += + += + +1/1 + +4.2 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 42.03 ns/iteration, speed vs FLTX 0.10× + += + += + +1/1 + +42.0 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 3.12 ns/iteration, speed vs FLTX 1.35× + += + += + +1/1 + +3.1 ns + +No + +✗ + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 8.86 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 0.77348× + += + += + +1/1 + +8.9 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 82.81 ns/iteration, speed vs FLTX 0.11× + += + += + +1/1 + +82.8 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 6.86 ns/iteration, speed vs FLTX 1.29× + += + += + +1/1 + +6.9 ns + +No + +✗ + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 8.31 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.520882× + += + += + +1/1 + +8.3 ns + +Both + +✓ + + +mpfr64: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 12.64 ns/iteration, speed vs FLTX 0.66× + += + += + +1/1 + +12.6 ns + +No + +✗ + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 6.65 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 18.253495× + += + += + +1/1 + +6.7 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 121.5 ns/iteration, speed vs FLTX 0.05× + += + += + +1/1 + +121 ns + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 6.32 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 33.304018× + += + += + +1/1 + +6.3 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 210.5 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +211 ns + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 117.8 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +118 ns + +Both + +✓ + + +mpfr64: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 161.1 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +161 ns + +Both + +✓ + + +mpfr64: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 69.11 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.781393× + +244.0 + +217.7 + +3/3 + +69.1 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 192.2 ns/iteration, speed vs FLTX 0.36× + += + += + +3/3 + +192 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 336.8 ns/iteration, speed vs FLTX 0.21× + += + += + +3/3 + +337 ns + +No + +✗ + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 100.5 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.329546× + += + += + +1/1 + +100 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 234.1 ns/iteration, speed vs FLTX 0.43× + += + += + +1/1 + +234 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 365.0 ns/iteration, speed vs FLTX 0.28× + += + += + +1/1 + +365 ns + +No + +✗ + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 100.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.654819× + += + += + +1/1 + +100 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 266.1 ns/iteration, speed vs FLTX 0.38× + += + += + +1/1 + +266 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 367.7 ns/iteration, speed vs FLTX 0.27× + += + += + +1/1 + +368 ns + +No + +✗ + + + + +Float Utils + + + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.09 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 0.474256× + += + += + +2/2 + +2.1 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 37.77 ns/iteration, speed vs FLTX 0.06× + += + += + +2/2 + +37.8 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.993 ns/iteration, speed vs FLTX 2.11× + += + += + +2/2 + +0.99 ns + +No + +✓ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.97 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 0.503968× + += + += + +1/1 + +2.0 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 38.20 ns/iteration, speed vs FLTX 0.05× + += + += + +1/1 + +38.2 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.994 ns/iteration, speed vs FLTX 1.98× + += + += + +1/1 + +0.99 ns + +No + +✓ + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 21.16 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.643416× + +229.7 + +215.1 + +3/3 + +21.2 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fma +mean: 228.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 222.8, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 85.11 ns/iteration, speed vs FLTX 0.25× + +228.3 + +214.0 + +3/3 + +85.1 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fma +mean: 251.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 245.2, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 77.09 ns/iteration, speed vs FLTX 0.27× + +251.1 + +237.0 + +3/3 + +77.1 ns + +No + +✗ + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 86.29 ns/iteration (no available competitor) + +217.9 + +214.6 + +2/2 + +86.3 ns + +Both + +✓ + + +mpfr64: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.05 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 6.133177× + += + += + +2/2 + +1.0 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 46.74 ns/iteration, speed vs FLTX 0.02× + += + += + +2/2 + +46.7 ns + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.42 ns/iteration, speed vs FLTX 0.16× + += + += + +2/2 + +6.4 ns + +No + +✗ + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.00 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 6.84695× + += + += + +2/2 + +1.0 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 45.47 ns/iteration, speed vs FLTX 0.02× + += + += + +2/2 + +45.5 ns + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.86 ns/iteration, speed vs FLTX 0.15× + += + += + +2/2 + +6.9 ns + +No + +✗ + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 8.44 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 5.10192× + += + += + +2/2 + +8.4 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fdim +mean: 243.7 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 241.3, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +benchmark: 43.08 ns/iteration, speed vs FLTX 0.20× + +243.7 + +214.0 + +2/2 + +43.1 ns + +No + +✓ + + +TLFloat Octuple +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 56.58 ns/iteration, speed vs FLTX 0.15× + += + += + +2/2 + +56.6 ns + +No + +✓ + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.740 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.348825× + += + += + +1/1 + +0.74 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 40.09 ns/iteration, speed vs FLTX 0.02× + += + += + +1/1 + +40.1 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.998 ns/iteration, speed vs FLTX 0.74× + += + += + +1/1 + +1.00 ns + +No + +✗ + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.20 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 9.86339× + += + += + +1/1 + +3.2 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 39.85 ns/iteration, speed vs FLTX 0.08× + += + += + +1/1 + +39.9 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 31.54 ns/iteration, speed vs FLTX 0.10× + += + += + +1/1 + +31.5 ns + +No + +✗ + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.20 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 12.349575× + += + += + +1/1 + +3.2 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 39.52 ns/iteration, speed vs FLTX 0.08× + += + += + +1/1 + +39.5 ns + +Both + +✓ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.19 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 12.11196× + += + += + +1/1 + +3.2 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 38.64 ns/iteration, speed vs FLTX 0.08× + += + += + +1/1 + +38.6 ns + +Both + +✓ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 13.95 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.131249× + += + += + +2/2 + +13.9 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 69.70 ns/iteration, speed vs FLTX 0.20× + += + += + +2/2 + +69.7 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 43.68 ns/iteration, speed vs FLTX 0.32× + += + += + +2/2 + +43.7 ns + +No + +✗ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 20.23 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 2.12386× + += + += + +2/2 + +20.2 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 169.4 ns/iteration, speed vs FLTX 0.12× + += + += + +2/2 + +169 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 42.96 ns/iteration, speed vs FLTX 0.47× + += + += + +2/2 + +43.0 ns + +No + +✗ + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.08 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 0.615668× + += + += + +2/2 + +1.1 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 32.13 ns/iteration, speed vs FLTX 0.03× + += + += + +2/2 + +32.1 ns + +- + +- + + +TLFloat Octuple +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.665 ns/iteration, speed vs FLTX 1.62× + += + += + +2/2 + +0.67 ns + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.974 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 74.044423× + += + += + +2/2 + +0.97 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 72.12 ns/iteration, speed vs FLTX 0.01× + += + += + +2/2 + +72.1 ns + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 5.72 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.126879× + +- + +- + +- + +5.7 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter +benchmark: 457.4 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +457 ns + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter +benchmark: 17.90 ns/iteration, speed vs FLTX 0.32× + +- + +- + +- + +17.9 ns + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 5.74 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.112401× + +- + +- + +- + +5.7 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter (same type) +benchmark: 452.2 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +452 ns + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter (same type) +benchmark: 17.87 ns/iteration, speed vs FLTX 0.32× + +- + +- + +- + +17.9 ns + +- + +- + + + + +Roots & powers + + + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 23.22 ns/iteration (no available competitor) + +220.1 + +215.3 + +2/2 + +23.2 ns + +Both + +✓ + + +mpfr64: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.9 bits +p01: 211.3 bits +worst: 209.6 bits +domains: 4/4 +minimum threshold margin: 19.6 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 218.3, p01 211.5, worst 210.0, required 190.0, margin 20.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 109.8 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.220824× + +217.9 + +209.6 + +4/4 + +110 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sqrt +mean: 216.2 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 4/4 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 216.2, p01 214.4, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499359 +subnormal: mean 216.8, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 134.0 ns/iteration, speed vs FLTX 0.82× + +216.2 + +214.0 + +4/4 + +134 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sqrt +mean: 239.2 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 4/4 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 239.0, p01 237.4, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499359 +subnormal: mean 239.7, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 239.0, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 197.8 ns/iteration, speed vs FLTX 0.56× + +239.2 + +237.0 + +4/4 + +198 ns + +No + +✗ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 215.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 341.9 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.23804× + +219.3 + +215.0 + +2/2 + +342 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cbrt +mean: 216.0 bits +p01: 214.2 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.1, p01 214.3, worst 214.1, required 190.0, margin 24.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.1, required 190.0, margin 24.1, n=4096, seed=10322096095657499357 +benchmark: 423.3 ns/iteration, speed vs FLTX 0.81× + +216.0 + +214.1 + +2/2 + +423 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::cbrt +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 239.2, p01 237.3, worst 237.1, required 190.0, margin 47.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499357 +benchmark: 1,698 ns/iteration, speed vs FLTX 0.20× + +239.0 + +237.0 + +2/2 + +1698 ns + +No + +✗ + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 165.5 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.786351× + +229.9 + +213.9 + +2/2 + +165 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::hypot +mean: 228.7 bits +p01: 213.2 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 215.3, p01 213.2, worst 212.9, required 190.0, margin 22.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 242.0, p01 213.6, worst 212.9, required 190.0, margin 22.9, n=4096, seed=10322096095657499357 +benchmark: 451.6 ns/iteration, speed vs FLTX 0.37× + +228.7 + +212.9 + +2/2 + +452 ns + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::hypot +mean: 251.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 239.0, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 264.8, p01 237.6, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 295.6 ns/iteration, speed vs FLTX 0.56× + +251.9 + +237.0 + +2/2 + +296 ns + +No + +✓ + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,682 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.137531× + +216.8 + +211.1 + +2/2 + +2682 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,051 ns/iteration, speed vs FLTX 0.88× + +215.9 + +214.0 + +2/2 + +3051 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::pow +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 10,861 ns/iteration, speed vs FLTX 0.25× + +238.9 + +237.0 + +2/2 + +10861 ns + +No + +✗ + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 127.7 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.348903× + +217.2 + +213.7 + +2/2 + +128 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow(value, int) +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 172.2 ns/iteration, speed vs FLTX 0.74× + +216.0 + +214.0 + +2/2 + +172 ns + +Both + +✓ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.8 bits +p01: 210.6 bits +worst: 209.2 bits +domains: 2/2 +minimum threshold margin: 29.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.1, p01 210.6, worst 209.2, required 180.0, margin 29.2, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 1,016 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.247817× + +216.8 + +209.2 + +2/2 + +1016 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,268 ns/iteration, speed vs FLTX 0.80× + +215.9 + +214.0 + +2/2 + +1268 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 2,342 ns/iteration, speed vs FLTX 0.43× + +239.0 + +237.0 + +2/2 + +2342 ns + +No + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 863.6 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.720811× + +218.0 + +214.2 + +2/2 + +864 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp2 +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,486 ns/iteration, speed vs FLTX 0.58× + +216.0 + +214.0 + +2/2 + +1486 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp2 +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +benchmark: 5,540 ns/iteration, speed vs FLTX 0.16× + +238.9 + +237.0 + +2/2 + +5540 ns + +No + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 227.2 bits +p01: 207.5 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.0, p01 207.5, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 1,016 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.369535× + +227.2 + +207.0 + +2/2 + +1016 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::expm1 +mean: 227.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,391 ns/iteration, speed vs FLTX 0.73× + +227.5 + +214.0 + +2/2 + +1391 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::expm1 +mean: 250.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4098, seed=10322096095657499336 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 2,486 ns/iteration, speed vs FLTX 0.41× + +250.1 + +237.0 + +2/2 + +2486 ns + +No + +✗ + + + + +Logarithms + + + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.8 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.2, p01 215.3, worst 215.0, required 180.0, margin 35.0, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,790 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.331069× + +217.8 + +213.3 + +3/3 + +1790 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.7, p01 214.4, worst 214.3, required 180.0, margin 34.3, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 2,383 ns/iteration, speed vs FLTX 0.75× + +215.9 + +214.0 + +3/3 + +2383 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::log +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.8, p01 237.3, worst 237.3, required 180.0, margin 57.3, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 3,074 ns/iteration, speed vs FLTX 0.58× + +238.9 + +237.0 + +3/3 + +3074 ns + +No + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 221.1, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,827 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.423591× + +218.6 + +213.2 + +3/3 + +1827 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log2 +mean: 217.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 220.0, p01 214.9, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 2,601 ns/iteration, speed vs FLTX 0.70× + +217.3 + +214.0 + +3/3 + +2601 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::log2 +mean: 240.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 243.0, p01 237.9, worst 237.8, required 180.0, margin 57.8, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 3,089 ns/iteration, speed vs FLTX 0.59× + +240.3 + +237.0 + +3/3 + +3089 ns + +No + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 217.6, p01 215.1, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,847 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.67243× + +217.4 + +213.3 + +3/3 + +1847 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log10 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.8, p01 214.1, worst 214.1, required 180.0, margin 34.1, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 4,602 ns/iteration, speed vs FLTX 0.40× + +215.9 + +214.0 + +3/3 + +4602 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::log10 +mean: 238.8 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.6, p01 237.1, worst 237.1, required 180.0, margin 57.1, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 3,089 ns/iteration, speed vs FLTX 0.60× + +238.8 + +237.0 + +3/3 + +3089 ns + +No + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 226.8 bits +p01: 207.4 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.1, p01 207.4, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,819 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.357644× + +226.8 + +207.0 + +2/2 + +1819 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log1p +mean: 227.4 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 2,470 ns/iteration, speed vs FLTX 0.74× + +227.4 + +214.0 + +2/2 + +2470 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::log1p +mean: 250.1 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.4, worst 237.0, required 180.0, margin 57.0, n=4098, seed=10322096095657499336 +moderate: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 3,551 ns/iteration, speed vs FLTX 0.51× + +250.1 + +237.0 + +2/2 + +3551 ns + +No + +✗ + + + + +Trigonometric + + + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 912.9 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.855864× + +222.3 + +202.9 + +3/3 + +913 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sin +mean: 218.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.3, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 222.9, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 1,694 ns/iteration, speed vs FLTX 0.54× + +218.5 + +214.0 + +3/3 + +1694 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sin +mean: 241.2 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 245.1, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 2,624 ns/iteration, speed vs FLTX 0.35× + +241.2 + +237.0 + +3/3 + +2624 ns + +No + +✗ + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 919.9 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.421156× + +226.8 + +208.7 + +3/3 + +920 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cos +mean: 219.4 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 220.7, p01 214.5, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 221.2, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 1,307 ns/iteration, speed vs FLTX 0.70× + +219.4 + +214.0 + +3/3 + +1307 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::cos +mean: 241.7 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 242.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 243.4, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 2,608 ns/iteration, speed vs FLTX 0.35× + +241.7 + +237.0 + +3/3 + +2608 ns + +No + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,019 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 5.141782× + +- + +- + +- + +1019 ns + +- + +- + + +mpfr64: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::sincos +benchmark: 5,238 ns/iteration, speed vs FLTX 0.19× + +- + +- + +- + +5238 ns + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,107 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.721173× + +217.1 + +202.9 + +3/3 + +1107 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tan +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 44.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.1, p01 214.1, worst 214.0, required 170.0, margin 44.0, n=4104, seed=10322096095657499353 +moderate: mean 216.0, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 215.9, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4315, seed=10322096095657499369 +benchmark: 1,905 ns/iteration, speed vs FLTX 0.58× + +216.0 + +214.0 + +3/3 + +1905 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 67.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 238.9, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4104, seed=10322096095657499353 +moderate: mean 239.0, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 238.9, p01 237.2, worst 237.1, required 170.0, margin 67.1, n=4315, seed=10322096095657499369 +benchmark: 3,180 ns/iteration, speed vs FLTX 0.35× + +239.0 + +237.0 + +3/3 + +3180 ns + +No + +✗ + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,405 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.587325× + +217.9 + +214.4 + +2/2 + +1405 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asin +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.1, p01 214.7, worst 214.7, required 180.0, margin 34.7, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 6,063 ns/iteration, speed vs FLTX 0.23× + +216.0 + +214.0 + +2/2 + +6063 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asin +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.1, p01 237.7, worst 237.7, required 180.0, margin 57.7, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 5,038 ns/iteration, speed vs FLTX 0.28× + +239.0 + +237.0 + +2/2 + +5038 ns + +No + +✗ + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,424 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.56274× + +216.0 + +192.5 + +2/2 + +1424 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acos +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 6,265 ns/iteration, speed vs FLTX 0.23× + +215.9 + +214.0 + +2/2 + +6265 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::acos +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4105, seed=10322096095657499355 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 5,074 ns/iteration, speed vs FLTX 0.28× + +238.9 + +237.0 + +2/2 + +5074 ns + +No + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 921.3 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.177536× + +218.1 + +214.7 + +2/2 + +921 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 2,006 ns/iteration, speed vs FLTX 0.46× + +216.0 + +214.0 + +2/2 + +2006 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 4,610 ns/iteration, speed vs FLTX 0.20× + +239.0 + +237.0 + +2/2 + +4610 ns + +Inf + +✗ + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 983.1 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.090884× + +217.9 + +214.3 + +3/3 + +983 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan2 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 215.3, p01 215.2, worst 215.2, required 180.0, margin 35.2, n=8, seed=10322096095657499351 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 2,055 ns/iteration, speed vs FLTX 0.48× + +215.9 + +214.0 + +3/3 + +2055 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan2 +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 240.6, p01 237.8, worst 237.8, required 180.0, margin 57.8, n=8, seed=10322096095657499351 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 4,577 ns/iteration, speed vs FLTX 0.21× + +239.0 + +237.0 + +3/3 + +4577 ns + +Inf + +✗ + + + + +Hyperbolic + + + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,294 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.151794× + +217.0 + +213.8 + +2/2 + +1294 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sinh +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,490 ns/iteration, speed vs FLTX 0.87× + +216.0 + +214.0 + +2/2 + +1490 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 2,742 ns/iteration, speed vs FLTX 0.47× + +238.9 + +237.0 + +2/2 + +2742 ns + +No + +✗ + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,292 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.13497× + +217.5 + +214.2 + +2/2 + +1292 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,466 ns/iteration, speed vs FLTX 0.88× + +215.9 + +214.0 + +2/2 + +1466 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::cosh +mean: 238.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 2,539 ns/iteration, speed vs FLTX 0.51× + +238.9 + +237.0 + +2/2 + +2539 ns + +No + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,272 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.194053× + +219.1 + +214.0 + +2/2 + +1272 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tanh +mean: 216.2 bits +p01: 214.3 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.6, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,519 ns/iteration, speed vs FLTX 0.84× + +216.2 + +214.0 + +2/2 + +1519 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tanh +mean: 239.2 bits +p01: 237.2 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.0, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 2,680 ns/iteration, speed vs FLTX 0.47× + +239.2 + +237.1 + +2/2 + +2680 ns + +Inf + +✗ + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,693 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.314536× + +217.2 + +213.0 + +2/2 + +2693 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asinh +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 6,234 ns/iteration, speed vs FLTX 0.43× + +215.9 + +214.0 + +2/2 + +6234 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 10,873 ns/iteration, speed vs FLTX 0.25× + +238.9 + +237.0 + +2/2 + +10873 ns + +No + +✗ + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,492 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.503542× + +217.7 + +213.7 + +2/2 + +2492 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.8, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4101, seed=10322096095657499355 +moderate: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499275 +benchmark: 3,746 ns/iteration, speed vs FLTX 0.67× + +215.9 + +214.0 + +2/2 + +3746 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::acosh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.7, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4101, seed=10322096095657499355 +moderate: mean 239.0, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499275 +benchmark: 10,240 ns/iteration, speed vs FLTX 0.24× + +238.9 + +237.0 + +2/2 + +10240 ns + +No + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,342 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.260754× + +218.3 + +213.3 + +2/2 + +2342 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atanh +mean: 216.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.5, p01 214.9, worst 214.9, required 180.0, margin 34.9, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 2,952 ns/iteration, speed vs FLTX 0.79× + +216.2 + +214.0 + +2/2 + +2952 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atanh +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.4, p01 237.9, worst 237.4, required 180.0, margin 57.4, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 3,751 ns/iteration, speed vs FLTX 0.62× + +239.1 + +237.0 + +2/2 + +3751 ns + +No + +✗ + + + + +Special + + + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 10,511 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.611342× + +208.2 + +189.8 + +2/2 + +10511 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erfc +mean: 216.1 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 216.2, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 27,448 ns/iteration, speed vs FLTX 0.38× + +216.1 + +214.0 + +2/2 + +27448 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::erfc +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 239.2, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 127,012 ns/iteration, speed vs FLTX 0.08× + +239.1 + +237.0 + +2/2 + +127012 ns + +Inf + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 10,459 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.594009× + +212.8 + +196.8 + +2/2 + +10459 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erf +mean: 216.3 bits +p01: 214.3 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 34.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.5, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499359 +benchmark: 16,671 ns/iteration, speed vs FLTX 0.63× + +216.3 + +214.1 + +2/2 + +16671 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::erf +mean: 239.2 bits +p01: 237.3 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.6, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.3, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 126,759 ns/iteration, speed vs FLTX 0.08× + +239.2 + +237.1 + +2/2 + +126759 ns + +Inf + +✗ + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 10,654 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.389015× + +209.0 + +202.5 + +1/1 + +10654 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499320 +benchmark: 14,798 ns/iteration, speed vs FLTX 0.72× + +215.9 + +214.0 + +1/1 + +14798 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::tgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499320 +benchmark: 50,622 ns/iteration, speed vs FLTX 0.21× + +238.9 + +237.0 + +1/1 + +50622 ns + +No + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 9,634 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.315764× + +211.9 + +199.2 + +1/1 + +9634 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499323 +benchmark: 12,677 ns/iteration, speed vs FLTX 0.76× + +215.9 + +214.0 + +1/1 + +12677 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::lgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499323 +benchmark: 45,238 ns/iteration, speed vs FLTX 0.21× + +238.9 + +237.0 + +1/1 + +45238 ns + +No + +- + + + + +Comparisons + + + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.734 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 5.774787× + += + += + +1/1 + +0.73 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.05 ns/iteration, speed vs FLTX 0.12× + += + += + +1/1 + +6.0 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.24 ns/iteration, speed vs FLTX 0.17× + += + += + +1/1 + +4.2 ns + +Both + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.643 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 6.446785× + += + += + +1/1 + +0.64 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.84 ns/iteration, speed vs FLTX 0.11× + += + += + +1/1 + +5.8 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.15 ns/iteration, speed vs FLTX 0.16× + += + += + +1/1 + +4.1 ns + +Both + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.857 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 6.857× + += + += + +1/1 + +0.86 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.34 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +6.3 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.87 ns/iteration, speed vs FLTX 0.15× + += + += + +1/1 + +5.9 ns + +Both + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.808 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 7.240871× + += + += + +1/1 + +0.81 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.39 ns/iteration, speed vs FLTX 0.13× + += + += + +1/1 + +6.4 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.85 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +5.9 ns + +Both + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.796 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 7.318774× + += + += + +1/1 + +0.80 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.47 ns/iteration, speed vs FLTX 0.12× + += + += + +1/1 + +6.5 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.83 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +5.8 ns + +Both + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.790 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 7.318003× + += + += + +1/1 + +0.79 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.62 ns/iteration, speed vs FLTX 0.12× + += + += + +1/1 + +6.6 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.78 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +5.8 ns + +Both + +- + + + + +Random + + + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 14.86 ns/iteration (no available competitor) + +- + +- + +- + +14.9 ns + +- + +- + + +mpfr64: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 292.5 ns/iteration (no available competitor) + +- + +- + +- + +293 ns + +- + +- + + +mpfr64: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 58.57 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.965534× + +- + +- + +- + +58.6 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same expression +benchmark: 138.2 ns/iteration, speed vs FLTX 0.42× + +- + +- + +- + +138 ns + +- + +- + + +TLFloat Octuple +API: same expression +benchmark: 115.1 ns/iteration, speed vs FLTX 0.51× + +- + +- + +- + +115 ns + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 151.7 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 1.867225× + +- + +- + +- + +152 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 302.9 ns/iteration, speed vs FLTX 0.50× + +- + +- + +- + +303 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 283.2 ns/iteration, speed vs FLTX 0.54× + +- + +- + +- + +283 ns + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,852 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.256524× + +- + +- + +- + +1852 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 2,327 ns/iteration, speed vs FLTX 0.80× + +- + +- + +- + +2327 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 5,364 ns/iteration, speed vs FLTX 0.35× + +- + +- + +- + +5364 ns + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 128.4 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.886736× + +- + +- + +- + +128 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 242.2 ns/iteration, speed vs FLTX 0.53× + +- + +- + +- + +242 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 274.7 ns/iteration, speed vs FLTX 0.47× + +- + +- + +- + +275 ns + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 594.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.600179× + +- + +- + +- + +594 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 950.8 ns/iteration, speed vs FLTX 0.62× + +- + +- + +- + +951 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 1,078 ns/iteration, speed vs FLTX 0.55× + +- + +- + +- + +1078 ns + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 442.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.682814× + +- + +- + +- + +442 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 744.2 ns/iteration, speed vs FLTX 0.59× + +- + +- + +- + +744 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 1,051 ns/iteration, speed vs FLTX 0.42× + +- + +- + +- + +1051 ns + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 246.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.312852× + +- + +- + +- + +246 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 323.2 ns/iteration, speed vs FLTX 0.76× + +- + +- + +- + +323 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 406.7 ns/iteration, speed vs FLTX 0.61× + +- + +- + +- + +407 ns + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 8,950 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.25838× + +- + +- + +- + +8950 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 11,262 ns/iteration, speed vs FLTX 0.79× + +- + +- + +- + +11262 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 21,212 ns/iteration, speed vs FLTX 0.42× + +- + +- + +- + +21212 ns + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,892 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.082631× + +- + +- + +- + +4892 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 10,188 ns/iteration, speed vs FLTX 0.48× + +- + +- + +- + +10188 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 15,700 ns/iteration, speed vs FLTX 0.31× + +- + +- + +- + +15700 ns + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/windows_x86_64_MSVC_f128_fastmath_overview.svg b/validation/metrics/generated/overview/windows_x86_64_MSVC_f128_fastmath_overview.svg new file mode 100644 index 0000000..525c3c1 --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MSVC_f128_fastmath_overview.svg @@ -0,0 +1,3020 @@ + + + + +f128 consumer fast-math metrics overview — Windows / x64 / MSVC +Accuracy excludes the subnormal domain; support is reported separately. Speed is relative to FLTX. + +operation + + +bl::f128 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + + +Arithmetic + + + + +add + +fltx bl::f128 +API: bl::add +mean: 119.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 1.86 ns/iteration (no available competitor) + +119.1 + +105.7 + +1/1 + +1.86 ns + +NaN + +✗ + +✓ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 118.9 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 1.85 ns/iteration (no available competitor) + +118.9 + +105.7 + +1/1 + +1.85 ns + +NaN + +✗ + +✓ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 1/1 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 2.44 ns/iteration (no available competitor) + +108.7 + +105.4 + +1/1 + +2.44 ns + +NaN + +✗ + +✓ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 1/1 +minimum threshold margin: 15.1 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 1.85 ns/iteration (no available competitor) + +110.9 + +105.1 + +1/1 + +1.85 ns + +NaN + +✗ + +✓ + + + + +IO + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 213.5 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +213.5 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 180.9 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +180.9 ns + +Both + +✓ + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 107.1 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 107.1, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 226.2 ns/iteration (no available competitor) + +109.9 + +106.0 + +2/2 + +226.2 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.85 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.85 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 3.33 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.33 ns + +Both + +✓ + +- + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 3.97 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.97 ns + +Both + +✓ + +- + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 9.97 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +9.97 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.10 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +10.10 ns + +Both + +✓ + +- + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 4.55 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +4.55 ns + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 4.37 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +4.37 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 83.56 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +83.56 ns + +Both + +✓ + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 128.6 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +128.6 ns + +Both + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 17.88 ns/iteration (no available competitor) + +exact + +exact + +3/3 + +17.88 ns + +Both + +✓ + +- + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 22.46 ns/iteration (no available competitor) + +138.0 + +103.1 + +1/1 + +22.46 ns + +Both + +✓ + +- + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 22.25 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +22.25 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.39 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.39 ns + +Both + +✓ + +✓ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.42 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.42 ns + +Both + +✓ + +- + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.4 bits +p01: 104.7 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 109.1, p01 104.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.6, p01 106.6, worst 105.3, required 90.0, margin 15.3, n=4096, seed=10322096095657499357 +benchmark: 6.15 ns/iteration (no available competitor) + +117.4 + +99.6 + +3/3 + +6.15 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 25.57 ns/iteration (no available competitor) + +109.0 + +105.2 + +2/2 + +25.57 ns + +Both + +✓ + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.40 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.40 ns + +Both + +✓ + +- + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.05 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.05 ns + +Both + +✓ + +- + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 4.67 ns/iteration (no available competitor) + +138.0 + +106.2 + +2/2 + +4.67 ns + +Both + +✓ + +- + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.64 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.64 ns + +Both + +✓ + +- + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.31 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.31 ns + +Both + +✓ + +- + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.29 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.29 ns + +Both + +✓ + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.29 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.29 ns + +Both + +✓ + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.73 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.73 ns + +Both + +✓ + +✓ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.98 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +5.98 ns + +Both + +✓ + +- + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.02 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +2.02 ns + +- + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.22 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +2.22 ns + +Both + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 6.77 ns/iteration (no available competitor) + +- + +- + +- + +6.77 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 6.79 ns/iteration (no available competitor) + +- + +- + +- + +6.79 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 2.16 ns/iteration (no available competitor) + +108.7 + +105.4 + +2/2 + +2.16 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.5 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 3/3 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 110.5, p01 106.7, worst 106.2, required 90.0, margin 16.2, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 4.28 ns/iteration (no available competitor) + +109.5 + +104.7 + +3/3 + +4.28 ns + +Both + +✓ + +✓ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.0 bits +p01: 104.1 bits +worst: 103.0 bits +domains: 2/2 +minimum threshold margin: 13.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.1, p01 104.3, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 107.9, p01 104.1, worst 103.0, required 90.0, margin 13.0, n=4096, seed=10322096095657499357 +benchmark: 23.97 ns/iteration (no available competitor) + +108.0 + +103.0 + +2/2 + +23.97 ns + +Both + +✓ + +- + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 8.77 ns/iteration (no available competitor) + +122.4 + +104.4 + +2/2 + +8.77 ns + +Both + +✓ + +- + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 195.9 ns/iteration (no available competitor) + +107.1 + +101.3 + +2/2 + +195.9 ns + +Both + +✓ + +- + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 15.11 ns/iteration (no available competitor) + +106.5 + +103.2 + +2/2 + +15.11 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 107.0 bits +p01: 104.3 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.6, p01 104.3, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.4, p01 104.8, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 100.1 ns/iteration (no available competitor) + +107.0 + +103.6 + +2/2 + +100.1 ns + +Both + +- + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 96.12 ns/iteration (no available competitor) + +108.9 + +105.1 + +2/2 + +96.12 ns + +Both + +- + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 100.3 ns/iteration (no available competitor) + +121.6 + +104.1 + +2/2 + +100.3 ns + +Both + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.6, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 114.8 ns/iteration (no available competitor) + +108.4 + +103.7 + +3/3 + +114.8 ns + +Both + +- + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 116.8 ns/iteration (no available competitor) + +108.8 + +103.7 + +3/3 + +116.8 ns + +Both + +- + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.5 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 116.7 ns/iteration (no available competitor) + +107.5 + +103.8 + +3/3 + +116.7 ns + +Both + +- + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 120.8 ns/iteration (no available competitor) + +121.4 + +103.6 + +2/2 + +120.8 ns + +Both + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 87.19 ns/iteration (no available competitor) + +110.6 + +98.6 + +3/3 + +87.19 ns + +Both + +✓ + +- + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 86.45 ns/iteration (no available competitor) + +113.5 + +99.2 + +3/3 + +86.45 ns + +Both + +- + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 93.03 ns/iteration (no available competitor) + +- + +- + +- + +93.03 ns + +- + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.7, required 75.0, margin 28.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 93.19 ns/iteration (no available competitor) + +106.7 + +98.6 + +3/3 + +93.19 ns + +Both + +✓ + +- + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 157.6 ns/iteration (no available competitor) + +108.6 + +104.1 + +2/2 + +157.6 ns + +Both + +✓ + +- + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 162.6 ns/iteration (no available competitor) + +106.5 + +81.6 + +2/2 + +162.6 ns + +Both + +- + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 116.9 ns/iteration (no available competitor) + +108.7 + +104.9 + +2/2 + +116.9 ns + +Both + +✓ + +- + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 118.2 ns/iteration (no available competitor) + +108.7 + +104.5 + +3/3 + +118.2 ns + +Both + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 110.6 ns/iteration (no available competitor) + +107.4 + +103.6 + +2/2 + +110.6 ns + +Both + +✓ + +- + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 107.2 ns/iteration (no available competitor) + +107.9 + +104.4 + +2/2 + +107.2 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 113.2 ns/iteration (no available competitor) + +109.2 + +103.8 + +2/2 + +113.2 ns + +Both + +✓ + +- + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 119.1 ns/iteration (no available competitor) + +108.1 + +103.8 + +2/2 + +119.1 ns + +Both + +✓ + +- + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 133.4 ns/iteration (no available competitor) + +108.0 + +103.7 + +2/2 + +133.4 ns + +Both + +- + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 130.9 ns/iteration (no available competitor) + +108.1 + +103.1 + +2/2 + +130.9 ns + +Both + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 560.4 ns/iteration (no available competitor) + +107.2 + +99.2 + +2/2 + +560.4 ns + +Both + +- + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 565.2 ns/iteration (no available competitor) + +110.9 + +103.5 + +2/2 + +565.2 ns + +Both + +✓ + +- + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 473.6 ns/iteration (no available competitor) + +105.6 + +97.3 + +1/1 + +473.6 ns + +Both + +- + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 526.9 ns/iteration (no available competitor) + +107.3 + +102.2 + +1/1 + +526.9 ns + +Both + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.670 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.670 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.667 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.667 ns + +Both + +- + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.02 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.02 ns + +Both + +- + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.02 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.02 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.00 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.00 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.13 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.13 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 9.03 ns/iteration (no available competitor) + +- + +- + +- + +9.03 ns + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 58.93 ns/iteration (no available competitor) + +- + +- + +- + +58.93 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 5.57 ns/iteration (no available competitor) + +- + +- + +- + +5.57 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 20.07 ns/iteration (no available competitor) + +- + +- + +- + +20.07 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 174.3 ns/iteration (no available competitor) + +- + +- + +- + +174.3 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 15.61 ns/iteration (no available competitor) + +- + +- + +- + +15.61 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 67.60 ns/iteration (no available competitor) + +- + +- + +- + +67.60 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 85.29 ns/iteration (no available competitor) + +- + +- + +- + +85.29 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 31.28 ns/iteration (no available competitor) + +- + +- + +- + +31.28 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 947.5 ns/iteration (no available competitor) + +- + +- + +- + +947.5 ns + +- + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 439.2 ns/iteration (no available competitor) + +- + +- + +- + +439.2 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/windows_x86_64_MSVC_f128_fastmath_overview_compact.svg b/validation/metrics/generated/overview/windows_x86_64_MSVC_f128_fastmath_overview_compact.svg new file mode 100644 index 0000000..37efa6a --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MSVC_f128_fastmath_overview_compact.svg @@ -0,0 +1,3017 @@ + + + + + +operation + + +bl::f128 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +Subnorm + +avg + +min + +pass + + + +Arithmetic + + + + +add + +fltx bl::f128 +API: bl::add +mean: 119.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 1.86 ns/iteration (no available competitor) + +119.1 + +105.7 + +1/1 + +1.9 ns + +NaN + +✗ + +✓ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 118.9 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 1.85 ns/iteration (no available competitor) + +118.9 + +105.7 + +1/1 + +1.9 ns + +NaN + +✗ + +✓ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 1/1 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 2.44 ns/iteration (no available competitor) + +108.7 + +105.4 + +1/1 + +2.4 ns + +NaN + +✗ + +✓ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 1/1 +minimum threshold margin: 15.1 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 1.85 ns/iteration (no available competitor) + +110.9 + +105.1 + +1/1 + +1.8 ns + +NaN + +✗ + +✓ + + + + +IO + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 213.5 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +214 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 180.9 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +181 ns + +Both + +✓ + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 107.1 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 107.1, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 226.2 ns/iteration (no available competitor) + +109.9 + +106.0 + +2/2 + +226 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.85 ns/iteration (no available competitor) + += + += + +1/1 + +2.9 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 3.33 ns/iteration (no available competitor) + += + += + +1/1 + +3.3 ns + +Both + +✓ + +- + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 3.97 ns/iteration (no available competitor) + += + += + +1/1 + +4.0 ns + +Both + +✓ + +- + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 9.97 ns/iteration (no available competitor) + += + += + +1/1 + +10.0 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.10 ns/iteration (no available competitor) + += + += + +1/1 + +10.1 ns + +Both + +✓ + +- + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 4.55 ns/iteration (no available competitor) + += + += + +1/1 + +4.6 ns + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 4.37 ns/iteration (no available competitor) + += + += + +1/1 + +4.4 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 83.56 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +83.6 ns + +Both + +✓ + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 128.6 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +129 ns + +Both + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 17.88 ns/iteration (no available competitor) + += + += + +3/3 + +17.9 ns + +Both + +✓ + +- + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 22.46 ns/iteration (no available competitor) + +138.0 + +103.1 + +1/1 + +22.5 ns + +Both + +✓ + +- + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 22.25 ns/iteration (no available competitor) + += + += + +1/1 + +22.3 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.39 ns/iteration (no available competitor) + += + += + +1/1 + +3.4 ns + +Both + +✓ + +✓ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.42 ns/iteration (no available competitor) + += + += + +1/1 + +3.4 ns + +Both + +✓ + +- + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.4 bits +p01: 104.7 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 109.1, p01 104.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.6, p01 106.6, worst 105.3, required 90.0, margin 15.3, n=4096, seed=10322096095657499357 +benchmark: 6.15 ns/iteration (no available competitor) + +117.4 + +99.6 + +3/3 + +6.1 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 25.57 ns/iteration (no available competitor) + +109.0 + +105.2 + +2/2 + +25.6 ns + +Both + +✓ + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.40 ns/iteration (no available competitor) + += + += + +2/2 + +1.4 ns + +Both + +✓ + +- + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.05 ns/iteration (no available competitor) + += + += + +2/2 + +1.1 ns + +Both + +✓ + +- + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 4.67 ns/iteration (no available competitor) + +138.0 + +106.2 + +2/2 + +4.7 ns + +Both + +✓ + +- + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.64 ns/iteration (no available competitor) + += + += + +1/1 + +1.6 ns + +Both + +✓ + +- + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.31 ns/iteration (no available competitor) + += + += + +1/1 + +2.3 ns + +Both + +✓ + +- + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.29 ns/iteration (no available competitor) + += + += + +1/1 + +2.3 ns + +Both + +✓ + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.29 ns/iteration (no available competitor) + += + += + +1/1 + +2.3 ns + +Both + +✓ + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.73 ns/iteration (no available competitor) + += + += + +1/1 + +2.7 ns + +Both + +✓ + +✓ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.98 ns/iteration (no available competitor) + += + += + +2/2 + +6.0 ns + +Both + +✓ + +- + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.02 ns/iteration (no available competitor) + += + += + +2/2 + +2.0 ns + +- + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.22 ns/iteration (no available competitor) + += + += + +2/2 + +2.2 ns + +Both + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 6.77 ns/iteration (no available competitor) + +- + +- + +- + +6.8 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 6.79 ns/iteration (no available competitor) + +- + +- + +- + +6.8 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 2.16 ns/iteration (no available competitor) + +108.7 + +105.4 + +2/2 + +2.2 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.5 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 3/3 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 110.5, p01 106.7, worst 106.2, required 90.0, margin 16.2, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 4.28 ns/iteration (no available competitor) + +109.5 + +104.7 + +3/3 + +4.3 ns + +Both + +✓ + +✓ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.0 bits +p01: 104.1 bits +worst: 103.0 bits +domains: 2/2 +minimum threshold margin: 13.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.1, p01 104.3, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 107.9, p01 104.1, worst 103.0, required 90.0, margin 13.0, n=4096, seed=10322096095657499357 +benchmark: 23.97 ns/iteration (no available competitor) + +108.0 + +103.0 + +2/2 + +24.0 ns + +Both + +✓ + +- + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 8.77 ns/iteration (no available competitor) + +122.4 + +104.4 + +2/2 + +8.8 ns + +Both + +✓ + +- + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 195.9 ns/iteration (no available competitor) + +107.1 + +101.3 + +2/2 + +196 ns + +Both + +✓ + +- + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 15.11 ns/iteration (no available competitor) + +106.5 + +103.2 + +2/2 + +15.1 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 107.0 bits +p01: 104.3 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.6, p01 104.3, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.4, p01 104.8, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 100.1 ns/iteration (no available competitor) + +107.0 + +103.6 + +2/2 + +100 ns + +Both + +- + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 96.12 ns/iteration (no available competitor) + +108.9 + +105.1 + +2/2 + +96.1 ns + +Both + +- + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 100.3 ns/iteration (no available competitor) + +121.6 + +104.1 + +2/2 + +100 ns + +Both + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.6, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 114.8 ns/iteration (no available competitor) + +108.4 + +103.7 + +3/3 + +115 ns + +Both + +- + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 116.8 ns/iteration (no available competitor) + +108.8 + +103.7 + +3/3 + +117 ns + +Both + +- + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.5 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 116.7 ns/iteration (no available competitor) + +107.5 + +103.8 + +3/3 + +117 ns + +Both + +- + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 120.8 ns/iteration (no available competitor) + +121.4 + +103.6 + +2/2 + +121 ns + +Both + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 87.19 ns/iteration (no available competitor) + +110.6 + +98.6 + +3/3 + +87.2 ns + +Both + +✓ + +- + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 86.45 ns/iteration (no available competitor) + +113.5 + +99.2 + +3/3 + +86.5 ns + +Both + +- + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 93.03 ns/iteration (no available competitor) + +- + +- + +- + +93.0 ns + +- + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.7, required 75.0, margin 28.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 93.19 ns/iteration (no available competitor) + +106.7 + +98.6 + +3/3 + +93.2 ns + +Both + +✓ + +- + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 157.6 ns/iteration (no available competitor) + +108.6 + +104.1 + +2/2 + +158 ns + +Both + +✓ + +- + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 162.6 ns/iteration (no available competitor) + +106.5 + +81.6 + +2/2 + +163 ns + +Both + +- + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 116.9 ns/iteration (no available competitor) + +108.7 + +104.9 + +2/2 + +117 ns + +Both + +✓ + +- + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 118.2 ns/iteration (no available competitor) + +108.7 + +104.5 + +3/3 + +118 ns + +Both + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 110.6 ns/iteration (no available competitor) + +107.4 + +103.6 + +2/2 + +111 ns + +Both + +✓ + +- + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 107.2 ns/iteration (no available competitor) + +107.9 + +104.4 + +2/2 + +107 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 113.2 ns/iteration (no available competitor) + +109.2 + +103.8 + +2/2 + +113 ns + +Both + +✓ + +- + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 119.1 ns/iteration (no available competitor) + +108.1 + +103.8 + +2/2 + +119 ns + +Both + +✓ + +- + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 133.4 ns/iteration (no available competitor) + +108.0 + +103.7 + +2/2 + +133 ns + +Both + +- + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 130.9 ns/iteration (no available competitor) + +108.1 + +103.1 + +2/2 + +131 ns + +Both + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 560.4 ns/iteration (no available competitor) + +107.2 + +99.2 + +2/2 + +560 ns + +Both + +- + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 565.2 ns/iteration (no available competitor) + +110.9 + +103.5 + +2/2 + +565 ns + +Both + +✓ + +- + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 473.6 ns/iteration (no available competitor) + +105.6 + +97.3 + +1/1 + +474 ns + +Both + +- + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 526.9 ns/iteration (no available competitor) + +107.3 + +102.2 + +1/1 + +527 ns + +Both + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.670 ns/iteration (no available competitor) + += + += + +1/1 + +0.67 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.667 ns/iteration (no available competitor) + += + += + +1/1 + +0.67 ns + +Both + +- + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.02 ns/iteration (no available competitor) + += + += + +1/1 + +2.0 ns + +Both + +- + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.02 ns/iteration (no available competitor) + += + += + +1/1 + +2.0 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.00 ns/iteration (no available competitor) + += + += + +1/1 + +2.0 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.13 ns/iteration (no available competitor) + += + += + +1/1 + +2.1 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 9.03 ns/iteration (no available competitor) + +- + +- + +- + +9.0 ns + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 58.93 ns/iteration (no available competitor) + +- + +- + +- + +58.9 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 5.57 ns/iteration (no available competitor) + +- + +- + +- + +5.6 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 20.07 ns/iteration (no available competitor) + +- + +- + +- + +20.1 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 174.3 ns/iteration (no available competitor) + +- + +- + +- + +174 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 15.61 ns/iteration (no available competitor) + +- + +- + +- + +15.6 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 67.60 ns/iteration (no available competitor) + +- + +- + +- + +67.6 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 85.29 ns/iteration (no available competitor) + +- + +- + +- + +85.3 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 31.28 ns/iteration (no available competitor) + +- + +- + +- + +31.3 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 947.5 ns/iteration (no available competitor) + +- + +- + +- + +948 ns + +- + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 439.2 ns/iteration (no available competitor) + +- + +- + +- + +439 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/windows_x86_64_MSVC_f128_overview.svg b/validation/metrics/generated/overview/windows_x86_64_MSVC_f128_overview.svg new file mode 100644 index 0000000..3ef0756 --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MSVC_f128_overview.svg @@ -0,0 +1,9371 @@ + + + + +f128 metrics overview — Windows / x64 / MSVC +Accuracy is MPFR-relative; domain pass counts use FLTX release thresholds; speed is implementation ÷ FLTX. + +operation + + +bl::f128 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time + + + +qdpp (dd_real) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +boost (cpp_double_double) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +TLFloat (tlquad) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +Arithmetic + + + + + + + +add + +fltx bl::f128 +API: bl::add +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 1.91 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.969538× + +120.3 + +105.7 + +2/2 + +1.91 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp operator+ +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 1.85 ns/iteration, speed vs FLTX 1.03× + +120.3 + +105.7 + +2/2 + +1.85 ns · 1.03× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator+ +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 4.21 ns/iteration, speed vs FLTX 0.45× + +120.3 + +105.7 + +2/2 + +4.21 ns · 0.45× + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator+ +mean: 127.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 125.8, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 162.1 ns/iteration, speed vs FLTX 0.01× + +127.0 + +113.0 + +2/2 + +162.1 ns · 0.01× + +No + +✗ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 2.14 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.871143× + +120.1 + +105.7 + +2/2 + +2.14 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp operator- +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 1.87 ns/iteration, speed vs FLTX 1.15× + +120.1 + +105.7 + +2/2 + +1.87 ns · 1.15× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator- +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 4.26 ns/iteration, speed vs FLTX 0.50× + +120.1 + +105.7 + +2/2 + +4.26 ns · 0.50× + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator- +mean: 127.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 126.0, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 162.2 ns/iteration, speed vs FLTX 0.01× + +127.2 + +113.0 + +2/2 + +162.2 ns · 0.01× + +No + +✗ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 1.63 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.477832× + +108.7 + +105.4 + +2/2 + +1.63 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp operator* +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 0.777 ns/iteration, speed vs FLTX 2.09× + +108.7 + +105.4 + +2/2 + +0.777 ns · 2.09× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator* +mean: 108.5 bits +p01: 105.2 bits +worst: 104.7 bits +domains: 2/2 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 108.5, p01 105.2, worst 104.7, required 90.0, margin 14.7, n=4092, seed=10322096095657499292 +subnormal: mean 123.8, p01 108.1, worst 108.1, required 90.0, margin 18.1, n=8, seed=10322096095657499292 +benchmark: 5.51 ns/iteration, speed vs FLTX 0.30× + +108.5 + +104.7 + +2/2 + +5.51 ns · 0.30× + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator* +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4092, seed=10322096095657499292 +subnormal: mean 129.7, p01 113.5, worst 113.5, required 90.0, margin 23.5, n=8, seed=10322096095657499292 +benchmark: 134.6 ns/iteration, speed vs FLTX 0.01× + +115.0 + +113.0 + +2/2 + +134.6 ns · 0.01× + +No + +✗ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 1.68 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.786294× + +110.9 + +105.1 + +2/2 + +1.68 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp operator/ +mean: 110.7 bits +p01: 106.1 bits +worst: 105.5 bits +domains: 2/2 +minimum threshold margin: 15.5 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 110.7, p01 106.1, worst 105.5, required 90.0, margin 15.5, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 10.52 ns/iteration, speed vs FLTX 0.16× + +110.7 + +105.5 + +2/2 + +10.52 ns · 0.16× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator/ +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 6.34 ns/iteration, speed vs FLTX 0.26× + +110.9 + +105.1 + +2/2 + +6.34 ns · 0.26× + +NaN + +✗ + + +TLFloat Quad +API: TLFloat operator/ +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 231.3 ns/iteration, speed vs FLTX 0.01× + +115.0 + +113.0 + +2/2 + +231.3 ns · 0.01× + +No + +✗ + + + + +IO + + + + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 248.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.665764× + +114.0 + +110.7 + +2/2 + +248.7 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp to_string +mean: 109.4 bits +p01: 102.4 bits +worst: 102.3 bits +domains: 2/2 +minimum threshold margin: 12.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 107.9, worst 107.8, required 90.0, margin 17.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 104.9, p01 102.4, worst 102.3, required 90.0, margin 12.3, n=4096, seed=10322096095657499357 +benchmark: 414.2 ns/iteration, speed vs FLTX 0.60× + +109.4 + +102.3 + +2/2 + +414.2 ns · 0.60× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost number::str +mean: 110.8 bits +p01: 106.0 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 16.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 112.0, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 109.5, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4096, seed=10322096095657499357 +benchmark: 637.0 ns/iteration, speed vs FLTX 0.39× + +110.8 + +106.0 + +2/2 + +637.0 ns · 0.39× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::to_string +mean: 110.7 bits +p01: 107.6 bits +worst: 107.3 bits +domains: 2/2 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.8, p01 107.9, worst 107.4, required 90.0, margin 17.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 110.5, p01 107.6, worst 107.3, required 90.0, margin 17.3, n=4096, seed=10322096095657499357 +benchmark: 11,176 ns/iteration, speed vs FLTX 0.02× + +110.7 + +107.3 + +2/2 + +11,176 ns · 0.02× + +Both + +✓ + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 207.5 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.99789× + +114.0 + +110.7 + +2/2 + +207.5 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp write +mean: 109.4 bits +p01: 102.4 bits +worst: 102.3 bits +domains: 2/2 +minimum threshold margin: 12.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 107.9, worst 107.8, required 90.0, margin 17.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 104.9, p01 102.4, worst 102.3, required 90.0, margin 12.3, n=4096, seed=10322096095657499357 +benchmark: 414.5 ns/iteration, speed vs FLTX 0.50× + +109.4 + +102.3 + +2/2 + +414.5 ns · 0.50× + +Both + +✗ + + +cppdd: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 107.1 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 107.1, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 226.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.845185× + +109.9 + +106.0 + +2/2 + +226.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp read +mean: 102.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -106.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 106.8, p01 104.4, worst 103.5, required 106.0, margin -2.5, n=4097, seed=10322096095657499311 +wide_exponent: mean 98.2, p01 0.0, worst 0.0, required 106.0, margin -106.0, n=4098, seed=10322096095657499308 +benchmark: 191.1 ns/iteration, speed vs FLTX 1.18× + +102.5 + +0.0 + +0/2 + +191.1 ns · 1.18× + +NaN + +✓ + + +boost::multiprecision::cpp_double_double +API: Boost string constructor +mean: 107.1 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -106.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.9, p01 106.2, worst 106.0, required 106.0, margin 0.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 106.3, p01 0.0, worst 0.0, required 106.0, margin -106.0, n=4098, seed=10322096095657499308 +benchmark: 809.1 ns/iteration, speed vs FLTX 0.28× + +107.1 + +0.0 + +1/2 + +809.1 ns · 0.28× + +Both + +✗ + + +TLFloat Quad +API: TLFloat string constructor +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 7.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4098, seed=10322096095657499308 +benchmark: 8,376 ns/iteration, speed vs FLTX 0.03× + +114.9 + +113.0 + +2/2 + +8,376 ns · 0.03× + +No + +✗ + + + + +Rounding + + + + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.38 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.954857× + +exact + +exact + +1/1 + +1.38 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.32 ns/iteration, speed vs FLTX 1.05× + +exact + +exact + +1/1 + +1.32 ns · 1.05× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 4.68 ns/iteration, speed vs FLTX 0.29× + +exact + +exact + +1/1 + +4.68 ns · 0.29× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 54.05 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +54.05 ns · 0.03× + +No + +✗ + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.94 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.699649× + +exact + +exact + +1/1 + +1.94 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.36 ns/iteration, speed vs FLTX 1.43× + +exact + +exact + +1/1 + +1.36 ns · 1.43× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 6.35 ns/iteration, speed vs FLTX 0.31× + +exact + +exact + +1/1 + +6.35 ns · 0.31× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 53.61 ns/iteration, speed vs FLTX 0.04× + +exact + +exact + +1/1 + +53.61 ns · 0.04× + +No + +✗ + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 3.47 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.35456× + +exact + +exact + +1/1 + +3.47 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp aint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 4.70 ns/iteration, speed vs FLTX 0.74× + +exact + +exact + +1/1 + +4.70 ns · 0.74× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 8.63 ns/iteration, speed vs FLTX 0.40× + +exact + +exact + +1/1 + +8.63 ns · 0.40× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 48.33 ns/iteration, speed vs FLTX 0.07× + +exact + +exact + +1/1 + +48.33 ns · 0.07× + +No + +✗ + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.30 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.359419× + +exact + +exact + +1/1 + +10.30 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp round +mean: 130.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/1 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 130.4, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4108, seed=10322096095657499334 +benchmark: 3.70 ns/iteration, speed vs FLTX 2.78× + +130.4 + +0.0 + +0/1 + +3.70 ns · 2.78× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 13.61 ns/iteration, speed vs FLTX 0.76× + +exact + +exact + +1/1 + +13.61 ns · 0.76× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 52.49 ns/iteration, speed vs FLTX 0.20× + +exact + +exact + +1/1 + +52.49 ns · 0.20× + +No + +✗ + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 9.58 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 6.740238× + +exact + +exact + +1/1 + +9.58 ns + +Both + +✓ + + +qdpp: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 64.60 ns/iteration, speed vs FLTX 0.15× + +exact + +exact + +1/1 + +64.60 ns · 0.15× + +No + +✗ + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 4.35 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 6.725088× + +exact + +exact + +1/1 + +4.35 ns + +- + +- + + +qdpp: lround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 29.28 ns/iteration, speed vs FLTX 0.15× + +exact + +exact + +1/1 + +29.28 ns · 0.15× + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 4.37 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 101.682351× + +exact + +exact + +1/1 + +4.37 ns + +- + +- + + +qdpp: llround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 444.3 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +444.3 ns · 0.01× + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 83.59 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +83.59 ns + +Both + +✓ + + +qdpp: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 129.1 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +129.1 ns + +Both + +✓ + + +qdpp: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 17.92 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.057196× + +exact + +exact + +3/3 + +17.92 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp fmod +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -90.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 135.0, p01 101.7, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 24.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=2, seed=10322096095657499335 +wide_exponent: mean 78.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4096, seed=10322096095657499357 +benchmark: 18.95 ns/iteration, speed vs FLTX 0.95× + +106.7 + +0.0 + +1/3 + +18.95 ns · 0.95× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmod +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -90.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 135.0, p01 101.7, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 24.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=2, seed=10322096095657499335 +wide_exponent: mean 78.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4096, seed=10322096095657499357 +benchmark: 50.61 ns/iteration, speed vs FLTX 0.35× + +106.7 + +0.0 + +1/3 + +50.61 ns · 0.35× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 616.2 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +3/3 + +616.2 ns · 0.03× + +No + +✗ + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 21.78 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.88674× + +138.0 + +103.1 + +1/1 + +21.78 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp drem +mean: 134.4 bits +p01: 101.0 bits +worst: 95.5 bits +domains: 1/1 +minimum threshold margin: 5.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 134.4, p01 101.0, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +benchmark: 19.31 ns/iteration, speed vs FLTX 1.13× + +134.4 + +95.5 + +1/1 + +19.31 ns · 1.13× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remainder +mean: 134.4 bits +p01: 101.0 bits +worst: 95.5 bits +domains: 1/1 +minimum threshold margin: 5.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 134.4, p01 101.0, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +benchmark: 51.15 ns/iteration, speed vs FLTX 0.43× + +134.4 + +95.5 + +1/1 + +51.15 ns · 0.43× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 680.1 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +680.1 ns · 0.03× + +No + +✗ + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 21.11 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.93961× + +exact + +exact + +1/1 + +21.11 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp divrem +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 19.83 ns/iteration, speed vs FLTX 1.06× + +exact + +exact + +1/1 + +19.83 ns · 1.06× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 51.10 ns/iteration, speed vs FLTX 0.41× + +exact + +exact + +1/1 + +51.10 ns · 0.41× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 692.3 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +692.3 ns · 0.03× + +No + +✗ + + + + +Float Utils + + + + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.49 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.804229× + +exact + +exact + +2/2 + +3.49 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.97 ns/iteration, speed vs FLTX 1.18× + +exact + +exact + +2/2 + +2.97 ns · 1.18× + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.69 ns/iteration, speed vs FLTX 0.74× + +exact + +exact + +2/2 + +4.69 ns · 0.74× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.81 ns/iteration, speed vs FLTX 1.24× + +exact + +exact + +2/2 + +2.81 ns · 1.24× + +No + +✓ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.51 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.795636× + +exact + +exact + +1/1 + +3.51 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.99 ns/iteration, speed vs FLTX 1.17× + +exact + +exact + +1/1 + +2.99 ns · 1.17× + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 4.32 ns/iteration, speed vs FLTX 0.81× + +exact + +exact + +1/1 + +4.32 ns · 0.81× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.79 ns/iteration, speed vs FLTX 1.26× + +exact + +exact + +1/1 + +2.79 ns · 1.26× + +No + +✓ + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.4 bits +p01: 104.7 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 109.1, p01 104.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.6, p01 106.6, worst 105.3, required 90.0, margin 15.3, n=4096, seed=10322096095657499357 +benchmark: 5.84 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.036087× + +117.4 + +99.6 + +3/3 + +5.84 ns + +Both + +✗ + + +qdpp: fma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fma +mean: 75.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -90.0 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 0.1, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4098, seed=10322096095657499352 +moderate: mean 108.2, p01 103.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.1, p01 105.4, worst 104.1, required 90.0, margin 14.1, n=4096, seed=10322096095657499357 +benchmark: 11.88 ns/iteration, speed vs FLTX 0.49× + +75.8 + +0.0 + +2/3 + +11.88 ns · 0.49× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fma +mean: 128.4 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 125.4, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 231.8 ns/iteration, speed vs FLTX 0.03× + +128.4 + +113.0 + +3/3 + +231.8 ns · 0.03× + +No + +✗ + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 24.32 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.447038× + +109.0 + +105.2 + +2/2 + +24.32 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp inv +mean: 109.4 bits +p01: 106.8 bits +worst: 106.5 bits +domains: 2/2 +minimum threshold margin: 16.5 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 109.4, p01 107.0, worst 106.5, required 90.0, margin 16.5, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.4, p01 106.8, worst 106.5, required 90.0, margin 16.5, n=4096, seed=10322096095657499357 +benchmark: 10.87 ns/iteration, speed vs FLTX 2.24× + +109.4 + +106.5 + +2/2 + +10.87 ns · 2.24× + +NaN + +✗ + + +cppdd: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.18 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.02288× + +exact + +exact + +2/2 + +3.18 ns + +Both + +✓ + + +qdpp: fmin is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.43 ns/iteration, speed vs FLTX 0.49× + +exact + +exact + +2/2 + +6.43 ns · 0.49× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 98.18 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +2/2 + +98.18 ns · 0.03× + +No + +✗ + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.24 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.991331× + +exact + +exact + +2/2 + +3.24 ns + +Both + +✓ + + +qdpp: fmax is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.45 ns/iteration, speed vs FLTX 0.50× + +exact + +exact + +2/2 + +6.45 ns · 0.50× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 98.11 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +2/2 + +98.11 ns · 0.03× + +No + +✗ + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.77 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.196267× + +138.0 + +106.2 + +2/2 + +3.77 ns + +Both + +✓ + + +qdpp: fdim is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 8.27 ns/iteration, speed vs FLTX 0.46× + +138.0 + +106.2 + +2/2 + +8.27 ns · 0.46× + +No + +✓ + + +TLFloat Quad +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 283.3 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +2/2 + +283.3 ns · 0.01× + +No + +✓ + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.64 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.600545× + +exact + +exact + +1/1 + +1.64 ns + +Both + +✓ + + +qdpp: copysign is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.62 ns/iteration, speed vs FLTX 0.62× + +exact + +exact + +1/1 + +2.62 ns · 0.62× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 6.01 ns/iteration, speed vs FLTX 0.27× + +exact + +exact + +1/1 + +6.01 ns · 0.27× + +No + +✗ + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.96 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.075099× + +exact + +exact + +1/1 + +1.96 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.07 ns/iteration, speed vs FLTX 0.48× + +exact + +exact + +1/1 + +4.07 ns · 0.48× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.17 ns/iteration, speed vs FLTX 0.47× + +exact + +exact + +1/1 + +4.17 ns · 0.47× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 60.83 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +60.83 ns · 0.03× + +No + +✗ + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.18 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.885701× + +exact + +exact + +1/1 + +2.18 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.12 ns/iteration, speed vs FLTX 0.53× + +exact + +exact + +1/1 + +4.12 ns · 0.53× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.17 ns/iteration, speed vs FLTX 0.52× + +exact + +exact + +1/1 + +4.17 ns · 0.52× + +Both + +✗ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.19 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.871905× + +exact + +exact + +1/1 + +2.19 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.10 ns/iteration, speed vs FLTX 0.53× + +exact + +exact + +1/1 + +4.10 ns · 0.53× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.17 ns/iteration, speed vs FLTX 0.52× + +exact + +exact + +1/1 + +4.17 ns · 0.52× + +Both + +✗ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.66 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.58086× + +exact + +exact + +2/2 + +2.66 ns + +Both + +✓ + + +qdpp: frexp is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.20 ns/iteration, speed vs FLTX 0.63× + +exact + +exact + +2/2 + +4.20 ns · 0.63× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 210.3 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +2/2 + +210.3 ns · 0.01× + +No + +✗ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.89 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.621811× + +exact + +exact + +2/2 + +5.89 ns + +Both + +✓ + + +qdpp: modf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 15.43 ns/iteration, speed vs FLTX 0.38× + +exact + +exact + +2/2 + +15.43 ns · 0.38× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 311.8 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +2/2 + +311.8 ns · 0.02× + +No + +✗ + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.32 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.424051× + +exact + +exact + +2/2 + +2.32 ns + +- + +- + + +qdpp: ilogb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.63 ns/iteration, speed vs FLTX 0.41× + +exact + +exact + +2/2 + +5.63 ns · 0.41× + +- + +- + + +TLFloat Quad +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 33.29 ns/iteration, speed vs FLTX 0.07× + +exact + +exact + +2/2 + +33.29 ns · 0.07× + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.51 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 31.642366× + +exact + +exact + +2/2 + +2.51 ns + +Both + +- + + +qdpp: logb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 79.41 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +2/2 + +79.41 ns · 0.03× + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 5.86 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 10.862539× + +- + +- + +- + +5.86 ns + +- + +- + + +qdpp: nextafter is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter +benchmark: 63.67 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +63.67 ns · 0.09× + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter +benchmark: 180.4 ns/iteration, speed vs FLTX 0.03× + +- + +- + +- + +180.4 ns · 0.03× + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 5.85 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 10.886768× + +- + +- + +- + +5.85 ns + +- + +- + + +qdpp: nexttoward is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter (same type) +benchmark: 63.70 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +63.70 ns · 0.09× + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter (same type) +benchmark: 180.2 ns/iteration, speed vs FLTX 0.03× + +- + +- + +- + +180.2 ns · 0.03× + +- + +- + + + + +Roots & powers + + + + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.61 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.482203× + +108.7 + +105.4 + +2/2 + +1.61 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 108.6, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 0.778 ns/iteration, speed vs FLTX 2.07× + +108.7 + +105.4 + +2/2 + +0.778 ns · 2.07× + +NaN + +✓ + + +cppdd: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.7 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 4/4 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 110.5, p01 106.7, worst 106.2, required 90.0, margin 16.2, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 4.10 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.213078× + +109.7 + +104.7 + +4/4 + +4.10 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sqrt +mean: 92.6 bits +p01: 52.2 bits +worst: 52.0 bits +domains: 2/4 +minimum threshold margin: -38.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 98.1, p01 55.3, worst 55.3, required 90.0, margin -34.7, n=4096, seed=10322096095657499354 +near_one: mean 108.0, p01 104.2, worst 103.5, required 90.0, margin 13.5, n=4099, seed=10322096095657499359 +subnormal: mean 56.5, p01 52.2, worst 52.0, required 90.0, margin -38.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 108.1, p01 104.2, worst 103.2, required 90.0, margin 13.2, n=4096, seed=10322096095657499357 +benchmark: 4.97 ns/iteration, speed vs FLTX 0.82× + +92.6 + +52.0 + +2/4 + +4.97 ns · 0.82× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sqrt +mean: 113.6 bits +p01: 54.2 bits +worst: 52.9 bits +domains: 2/4 +minimum threshold margin: -37.1 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 99.1, p01 54.4, worst 54.4, required 90.0, margin -35.6, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 136.1, p01 54.2, worst 52.9, required 90.0, margin -37.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 5.87 ns/iteration, speed vs FLTX 0.70× + +113.6 + +52.9 + +2/4 + +5.87 ns · 0.70× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sqrt +mean: 115.2 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 4/4 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 115.0, p01 113.4, worst 113.1, required 90.0, margin 23.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499359 +subnormal: mean 115.7, p01 113.2, worst 113.1, required 90.0, margin 23.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 409.6 ns/iteration, speed vs FLTX 0.01× + +115.2 + +113.0 + +4/4 + +409.6 ns · 0.01× + +No + +✗ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.0 bits +p01: 104.1 bits +worst: 103.0 bits +domains: 2/2 +minimum threshold margin: 13.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.1, p01 104.3, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 107.9, p01 104.1, worst 103.0, required 90.0, margin 13.0, n=4096, seed=10322096095657499357 +benchmark: 21.98 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 3.002101× + +108.0 + +103.0 + +2/2 + +21.98 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp nroot +mean: 101.5 bits +p01: 89.4 bits +worst: 89.0 bits +domains: 1/2 +minimum threshold margin: -1.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 107.5, p01 104.0, worst 103.0, required 90.0, margin 13.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 95.6, p01 89.4, worst 89.0, required 90.0, margin -1.0, n=4096, seed=10322096095657499357 +benchmark: 66.00 ns/iteration, speed vs FLTX 0.33× + +101.5 + +89.0 + +1/2 + +66.00 ns · 0.33× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cbrt +mean: 108.4 bits +p01: 105.4 bits +worst: 104.6 bits +domains: 2/2 +minimum threshold margin: 14.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 108.6, p01 105.6, worst 104.6, required 90.0, margin 14.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.2, p01 105.4, worst 104.7, required 90.0, margin 14.7, n=4096, seed=10322096095657499357 +benchmark: 427.6 ns/iteration, speed vs FLTX 0.05× + +108.4 + +104.6 + +2/2 + +427.6 ns · 0.05× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::cbrt +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.1, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 3,221 ns/iteration, speed vs FLTX 0.01× + +115.0 + +113.0 + +2/2 + +3,221 ns · 0.01× + +No + +✗ + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 8.88 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 6.466075× + +122.4 + +104.4 + +2/2 + +8.88 ns + +Both + +✓ + + +qdpp: hypot is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::hypot +mean: 121.9 bits +p01: 104.9 bits +worst: 104.3 bits +domains: 2/2 +minimum threshold margin: 14.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.8, p01 104.9, worst 104.3, required 90.0, margin 14.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 106.6, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 57.44 ns/iteration, speed vs FLTX 0.15× + +121.9 + +104.3 + +2/2 + +57.44 ns · 0.15× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::hypot +mean: 129.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 142.9, p01 113.8, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 446.9 ns/iteration, speed vs FLTX 0.02× + +129.0 + +113.0 + +2/2 + +446.9 ns · 0.02× + +No + +✓ + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 202.4 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.08673× + +107.1 + +101.3 + +2/2 + +202.4 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp pow +mean: 106.8 bits +p01: 101.7 bits +worst: 101.0 bits +domains: 2/2 +minimum threshold margin: 21.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 105.3, p01 101.7, worst 101.0, required 80.0, margin 21.0, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.2, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499359 +benchmark: 219.9 ns/iteration, speed vs FLTX 0.92× + +106.8 + +101.0 + +2/2 + +219.9 ns · 0.92× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow +mean: 102.6 bits +p01: 98.7 bits +worst: 97.6 bits +domains: 2/2 +minimum threshold margin: 17.6 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 102.0, p01 98.7, worst 97.6, required 80.0, margin 17.6, n=4099, seed=10322096095657499356 +near_one: mean 103.2, p01 100.6, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499359 +benchmark: 661.3 ns/iteration, speed vs FLTX 0.31× + +102.6 + +97.6 + +2/2 + +661.3 ns · 0.31× + +Inf + +✗ + + +TLFloat Quad +API: tlfloat::pow +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 16,200 ns/iteration, speed vs FLTX 0.01× + +114.9 + +113.0 + +2/2 + +16,200 ns · 0.01× + +No + +✗ + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 15.29 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.476941× + +106.5 + +103.2 + +2/2 + +15.29 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp npwr +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 7.29 ns/iteration, speed vs FLTX 2.10× + +106.5 + +103.2 + +2/2 + +7.29 ns · 2.10× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow(value, int) +mean: 106.4 bits +p01: 103.5 bits +worst: 102.7 bits +domains: 2/2 +minimum threshold margin: 12.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.4, p01 103.5, worst 102.8, required 90.0, margin 12.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.4, p01 103.5, worst 102.7, required 90.0, margin 12.7, n=4096, seed=10322096095657499357 +benchmark: 18.95 ns/iteration, speed vs FLTX 0.81× + +106.4 + +102.7 + +2/2 + +18.95 ns · 0.81× + +Both + +✗ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 107.0 bits +p01: 104.3 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.6, p01 104.3, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.4, p01 104.8, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 110.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.934001× + +107.0 + +103.6 + +2/2 + +110.7 ns + +Both + +- + + +qdpp dd_real +API: qdpp exp +mean: 106.8 bits +p01: 104.2 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.5, p01 104.2, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499339 +moderate: mean 107.2, p01 104.6, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499356 +benchmark: 103.4 ns/iteration, speed vs FLTX 1.07× + +106.8 + +103.7 + +2/2 + +103.4 ns · 1.07× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp +mean: 100.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 97.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499339 +moderate: mean 103.7, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +benchmark: 367.6 ns/iteration, speed vs FLTX 0.30× + +100.4 + +0.0 + +1/2 + +367.6 ns · 0.30× + +Both + +- + + +TLFloat Quad +API: tlfloat::exp +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 3,212 ns/iteration, speed vs FLTX 0.03× + +114.9 + +113.0 + +2/2 + +3,212 ns · 0.03× + +No + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 96.38 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 8.630168× + +108.9 + +105.1 + +2/2 + +96.38 ns + +Both + +- + + +qdpp: exp2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp2 +mean: 101.7 bits +p01: 96.4 bits +worst: 95.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 99.5, p01 96.4, worst 95.2, required 80.0, margin 15.2, n=4099, seed=10322096095657499339 +moderate: mean 103.8, p01 101.1, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499356 +benchmark: 831.8 ns/iteration, speed vs FLTX 0.12× + +101.7 + +95.2 + +2/2 + +831.8 ns · 0.12× + +Both + +- + + +TLFloat Quad +API: tlfloat::exp2 +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 7,336 ns/iteration, speed vs FLTX 0.01× + +115.0 + +113.0 + +2/2 + +7,336 ns · 0.01× + +No + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 112.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.934079× + +121.6 + +104.1 + +2/2 + +112.7 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp expm1 +mean: 121.5 bits +p01: 104.8 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 134.5, p01 105.7, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.5, p01 104.8, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499356 +benchmark: 105.2 ns/iteration, speed vs FLTX 1.07× + +121.5 + +0.0 + +1/2 + +105.2 ns · 1.07× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::expm1 +mean: 120.3 bits +p01: 101.1 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 106.6, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 106.1, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499356 +benchmark: 390.1 ns/iteration, speed vs FLTX 0.29× + +120.3 + +100.3 + +2/2 + +390.1 ns · 0.29× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::expm1 +mean: 128.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.7, worst 113.0, required 80.0, margin 33.0, n=4098, seed=10322096095657499336 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 3,627 ns/iteration, speed vs FLTX 0.03× + +128.2 + +113.0 + +2/2 + +3,627 ns · 0.03× + +No + +✗ + + + + +Logarithms + + + + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.6, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 125.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.986826× + +108.4 + +103.7 + +3/3 + +125.3 ns + +Both + +- + + +qdpp dd_real +API: qdpp log +mean: 101.6 bits +p01: 62.6 bits +worst: 62.1 bits +domains: 2/3 +minimum threshold margin: -17.9 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 95.0, p01 62.6, worst 62.1, required 80.0, margin -17.9, n=4096, seed=10322096095657499354 +near_one: mean 106.9, p01 104.4, worst 103.9, required 80.0, margin 23.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 103.0, p01 98.4, worst 98.1, required 80.0, margin 18.1, n=4096, seed=10322096095657499357 +benchmark: 123.7 ns/iteration, speed vs FLTX 1.01× + +101.6 + +62.1 + +2/3 + +123.7 ns · 1.01× + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log +mean: 105.3 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.2, p01 105.2, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.9, p01 104.6, worst 102.4, required 80.0, margin 22.4, n=4096, seed=10322096095657499357 +benchmark: 408.1 ns/iteration, speed vs FLTX 0.31× + +105.3 + +87.9 + +3/3 + +408.1 ns · 0.31× + +Both + +- + + +TLFloat Quad +API: tlfloat::log +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 115.5, p01 113.3, worst 113.3, required 80.0, margin 33.3, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 5,040 ns/iteration, speed vs FLTX 0.02× + +115.1 + +113.0 + +3/3 + +5,040 ns · 0.02× + +No + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 116.9 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.589146× + +108.8 + +103.7 + +3/3 + +116.9 ns + +Both + +- + + +qdpp: log2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log2 +mean: 106.6 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.2, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.8, p01 104.5, worst 102.3, required 80.0, margin 22.3, n=4096, seed=10322096095657499357 +benchmark: 419.4 ns/iteration, speed vs FLTX 0.28× + +106.6 + +87.9 + +3/3 + +419.4 ns · 0.28× + +Both + +- + + +TLFloat Quad +API: tlfloat::log2 +mean: 116.3 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 119.0, p01 113.9, worst 113.8, required 80.0, margin 33.8, n=4096, seed=10322096095657499354 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 5,237 ns/iteration, speed vs FLTX 0.02× + +116.3 + +113.0 + +3/3 + +5,237 ns · 0.02× + +No + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.5 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 129.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.122418× + +107.5 + +103.8 + +3/3 + +129.8 ns + +Both + +- + + +qdpp dd_real +API: qdpp log10 +mean: 101.4 bits +p01: 62.6 bits +worst: 62.1 bits +domains: 2/3 +minimum threshold margin: -17.9 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 94.9, p01 62.6, worst 62.1, required 80.0, margin -17.9, n=4096, seed=10322096095657499354 +near_one: mean 106.6, p01 104.2, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +wide_exponent: mean 102.8, p01 98.3, worst 98.1, required 80.0, margin 18.1, n=4096, seed=10322096095657499357 +benchmark: 145.7 ns/iteration, speed vs FLTX 0.89× + +101.4 + +62.1 + +2/3 + +145.7 ns · 0.89× + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log10 +mean: 102.9 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 103.6, p01 103.1, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499354 +near_one: mean 101.6, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 103.6, p01 103.0, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499357 +benchmark: 419.2 ns/iteration, speed vs FLTX 0.31× + +102.9 + +87.9 + +3/3 + +419.2 ns · 0.31× + +Both + +- + + +TLFloat Quad +API: tlfloat::log10 +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 114.8, p01 113.1, worst 113.1, required 80.0, margin 33.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 5,262 ns/iteration, speed vs FLTX 0.02× + +114.9 + +113.0 + +3/3 + +5,262 ns · 0.02× + +No + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 137.6 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.934464× + +121.4 + +103.6 + +2/2 + +137.6 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp log1p +mean: 120.9 bits +p01: 104.6 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 105.8, worst 104.1, required 80.0, margin 24.1, n=4098, seed=10322096095657499336 +moderate: mean 107.2, p01 104.6, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +benchmark: 128.5 ns/iteration, speed vs FLTX 1.07× + +120.9 + +103.8 + +2/2 + +128.5 ns · 1.07× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log1p +mean: 119.7 bits +p01: 101.3 bits +worst: 100.2 bits +domains: 2/2 +minimum threshold margin: 20.2 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 107.2, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 104.8, p01 101.3, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +benchmark: 541.0 ns/iteration, speed vs FLTX 0.25× + +119.7 + +100.2 + +2/2 + +541.0 ns · 0.25× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::log1p +mean: 128.1 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.6, worst 113.1, required 80.0, margin 33.1, n=4098, seed=10322096095657499336 +moderate: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 5,480 ns/iteration, speed vs FLTX 0.03× + +128.1 + +113.0 + +2/2 + +5,480 ns · 0.03× + +No + +✗ + + + + +Trigonometric + + + + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 103.6 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.117129× + +110.6 + +98.6 + +3/3 + +103.6 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sin +mean: 52.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 15.7, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 106.7, p01 101.7, worst 97.4, required 80.0, margin 17.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 36.0, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 115.8 ns/iteration, speed vs FLTX 0.90× + +52.5 + +0.0 + +1/3 + +115.8 ns · 0.90× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sin +mean: 51.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.2, p01 98.8, worst 94.5, required 80.0, margin 14.5, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 35.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 640.3 ns/iteration, speed vs FLTX 0.16× + +51.4 + +0.0 + +1/3 + +640.3 ns · 0.16× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sin +mean: 116.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4110, seed=10322096095657499353 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 118.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 3,361 ns/iteration, speed vs FLTX 0.03× + +116.1 + +113.0 + +3/3 + +3,361 ns · 0.03× + +No + +✗ + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 104.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.111555× + +113.5 + +99.2 + +3/3 + +104.2 ns + +Both + +- + + +qdpp dd_real +API: qdpp cos +mean: 63.6 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 54.3, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 106.6, p01 101.4, worst 96.3, required 80.0, margin 16.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 31.6, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 115.9 ns/iteration, speed vs FLTX 0.90× + +63.6 + +0.0 + +1/3 + +115.9 ns · 0.90× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cos +mean: 63.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 53.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.1, p01 98.9, worst 94.0, required 80.0, margin 14.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 33.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 646.7 ns/iteration, speed vs FLTX 0.16× + +63.3 + +0.0 + +1/3 + +646.7 ns · 0.16× + +Both + +- + + +TLFloat Quad +API: tlfloat::cos +mean: 117.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 118.8, p01 113.4, worst 113.1, required 80.0, margin 33.1, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 117.8, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 3,386 ns/iteration, speed vs FLTX 0.03× + +117.2 + +113.0 + +3/3 + +3,386 ns · 0.03× + +No + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 92.82 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.442272× + +- + +- + +- + +92.82 ns + +- + +- + + +qdpp dd_real +API: qdpp sincos +benchmark: 133.9 ns/iteration, speed vs FLTX 0.69× + +- + +- + +- + +133.9 ns · 0.69× + +- + +- + + +cppdd: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::sincos +benchmark: 6,959 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +6,959 ns · 0.01× + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.7, required 75.0, margin 28.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 107.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.427711× + +106.7 + +98.6 + +3/3 + +107.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp tan +mean: 42.6 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -75.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 14.7, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4110, seed=10322096095657499353 +moderate: mean 105.9, p01 100.7, worst 96.3, required 75.0, margin 21.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 9.2, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4315, seed=10322096095657499369 +benchmark: 153.0 ns/iteration, speed vs FLTX 0.70× + +42.6 + +0.0 + +1/3 + +153.0 ns · 0.70× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tan +mean: 41.2 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -75.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4110, seed=10322096095657499353 +moderate: mean 103.3, p01 97.9, worst 94.0, required 75.0, margin 19.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 9.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4315, seed=10322096095657499369 +benchmark: 1,299 ns/iteration, speed vs FLTX 0.08× + +41.2 + +0.0 + +1/3 + +1,299 ns · 0.08× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tan +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 38.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 114.9, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.1, worst 113.0, required 75.0, margin 38.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 115.0, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4315, seed=10322096095657499369 +benchmark: 4,659 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +3/3 + +4,659 ns · 0.02× + +No + +✗ + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 166.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.487442× + +108.6 + +104.1 + +2/2 + +166.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp asin +mean: 108.0 bits +p01: 103.5 bits +worst: 102.4 bits +domains: 2/2 +minimum threshold margin: 22.4 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 109.5, p01 107.4, worst 104.4, required 80.0, margin 24.4, n=4105, seed=10322096095657499355 +moderate: mean 106.6, p01 103.5, worst 102.4, required 80.0, margin 22.4, n=4099, seed=10322096095657499356 +benchmark: 247.0 ns/iteration, speed vs FLTX 0.67× + +108.0 + +102.4 + +2/2 + +247.0 ns · 0.67× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asin +mean: 106.8 bits +p01: 104.1 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 23.2 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.0, p01 105.5, worst 105.4, required 80.0, margin 25.4, n=4105, seed=10322096095657499355 +moderate: mean 106.5, p01 104.1, worst 103.2, required 80.0, margin 23.2, n=4099, seed=10322096095657499356 +benchmark: 2,310 ns/iteration, speed vs FLTX 0.07× + +106.8 + +103.2 + +2/2 + +2,310 ns · 0.07× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asin +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.1, p01 113.7, worst 113.7, required 80.0, margin 33.7, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 6,149 ns/iteration, speed vs FLTX 0.03× + +115.0 + +113.0 + +2/2 + +6,149 ns · 0.03× + +No + +✗ + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 170.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.444522× + +106.5 + +81.6 + +2/2 + +170.1 ns + +Both + +- + + +qdpp dd_real +API: qdpp acos +mean: 108.1 bits +p01: 104.4 bits +worst: 103.3 bits +domains: 2/2 +minimum threshold margin: 23.3 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 108.2, p01 104.4, worst 103.7, required 80.0, margin 23.7, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 104.4, worst 103.3, required 80.0, margin 23.3, n=4099, seed=10322096095657499356 +benchmark: 245.7 ns/iteration, speed vs FLTX 0.69× + +108.1 + +103.3 + +2/2 + +245.7 ns · 0.69× + +No + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acos +mean: 107.0 bits +p01: 104.1 bits +worst: 102.5 bits +domains: 2/2 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.1, p01 104.6, worst 104.1, required 80.0, margin 24.1, n=4105, seed=10322096095657499355 +moderate: mean 106.8, p01 104.1, worst 102.5, required 80.0, margin 22.5, n=4099, seed=10322096095657499356 +benchmark: 2,243 ns/iteration, speed vs FLTX 0.08× + +107.0 + +102.5 + +2/2 + +2,243 ns · 0.08× + +Both + +- + + +TLFloat Quad +API: tlfloat::acos +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 6,193 ns/iteration, speed vs FLTX 0.03× + +114.9 + +113.0 + +2/2 + +6,193 ns · 0.03× + +No + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 122.0 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.494031× + +108.7 + +104.9 + +2/2 + +122.0 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atan +mean: 107.2 bits +p01: 103.5 bits +worst: 102.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 108.1, p01 103.9, worst 102.9, required 80.0, margin 22.9, n=4099, seed=10322096095657499356 +near_one: mean 106.2, p01 103.5, worst 102.9, required 80.0, margin 22.9, n=4099, seed=10322096095657499359 +benchmark: 182.2 ns/iteration, speed vs FLTX 0.67× + +107.2 + +102.9 + +2/2 + +182.2 ns · 0.67× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan +mean: 106.7 bits +p01: 104.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.8, p01 104.7, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499359 +benchmark: 384.8 ns/iteration, speed vs FLTX 0.32× + +106.7 + +103.6 + +2/2 + +384.8 ns · 0.32× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan +mean: 115.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 5,589 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +2/2 + +5,589 ns · 0.02× + +Inf + +✗ + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 118.4 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.506198× + +108.7 + +104.5 + +3/3 + +118.4 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atan2 +mean: 106.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -80.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 0.0, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=8, seed=10322096095657499351 +moderate: mean 107.5, p01 103.7, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +near_one: mean 106.3, p01 103.4, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499359 +benchmark: 178.4 ns/iteration, speed vs FLTX 0.66× + +106.8 + +0.0 + +2/3 + +178.4 ns · 0.66× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan2 +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 61.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=8, seed=10322096095657499351 +moderate: mean 106.9, p01 104.4, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 386.4 ns/iteration, speed vs FLTX 0.31× + +106.7 + +0.0 + +2/3 + +386.4 ns · 0.31× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan2 +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 118.6, p01 114.8, worst 114.8, required 80.0, margin 34.8, n=8, seed=10322096095657499351 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 5,635 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +3/3 + +5,635 ns · 0.02× + +Inf + +✗ + + + + +Hyperbolic + + + + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 131.4 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.028872× + +107.4 + +103.6 + +2/2 + +131.4 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sinh +mean: 107.0 bits +p01: 104.4 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 106.9, p01 104.4, worst 103.9, required 80.0, margin 23.9, n=4099, seed=10322096095657499356 +near_one: mean 107.1, p01 104.4, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499359 +benchmark: 135.2 ns/iteration, speed vs FLTX 0.97× + +107.0 + +103.6 + +2/2 + +135.2 ns · 0.97× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sinh +mean: 103.5 bits +p01: 100.6 bits +worst: 99.9 bits +domains: 2/2 +minimum threshold margin: 19.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 103.8, p01 101.0, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +near_one: mean 103.3, p01 100.6, worst 99.9, required 80.0, margin 19.9, n=4099, seed=10322096095657499359 +benchmark: 400.6 ns/iteration, speed vs FLTX 0.33× + +103.5 + +99.9 + +2/2 + +400.6 ns · 0.33× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sinh +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 4,158 ns/iteration, speed vs FLTX 0.03× + +115.0 + +113.0 + +2/2 + +4,158 ns · 0.03× + +No + +✗ + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 132.6 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.01992× + +107.9 + +104.4 + +2/2 + +132.6 ns + +Both + +- + + +qdpp dd_real +API: qdpp cosh +mean: 107.7 bits +p01: 104.9 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 107.5, p01 104.9, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.3, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499359 +benchmark: 135.2 ns/iteration, speed vs FLTX 0.98× + +107.7 + +104.1 + +2/2 + +135.2 ns · 0.98× + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cosh +mean: 104.0 bits +p01: 101.1 bits +worst: 100.6 bits +domains: 2/2 +minimum threshold margin: 20.6 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 103.8, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.2, p01 101.5, worst 101.0, required 80.0, margin 21.0, n=4099, seed=10322096095657499359 +benchmark: 400.6 ns/iteration, speed vs FLTX 0.33× + +104.0 + +100.6 + +2/2 + +400.6 ns · 0.33× + +Both + +- + + +TLFloat Quad +API: tlfloat::cosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 3,636 ns/iteration, speed vs FLTX 0.04× + +114.9 + +113.0 + +2/2 + +3,636 ns · 0.04× + +No + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 140.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.992613× + +109.2 + +103.8 + +2/2 + +140.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp tanh +mean: 109.3 bits +p01: 105.4 bits +worst: 104.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 109.9, p01 105.4, worst 104.0, required 80.0, margin 24.0, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.7, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499359 +benchmark: 139.0 ns/iteration, speed vs FLTX 1.01× + +109.3 + +104.0 + +2/2 + +139.0 ns · 1.01× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tanh +mean: 105.8 bits +p01: 101.2 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.0, p01 102.2, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.5, p01 101.2, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 423.9 ns/iteration, speed vs FLTX 0.33× + +105.8 + +100.3 + +2/2 + +423.9 ns · 0.33× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tanh +mean: 115.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.5, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 3,958 ns/iteration, speed vs FLTX 0.04× + +115.2 + +113.0 + +2/2 + +3,958 ns · 0.04× + +Inf + +✗ + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 131.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.26113× + +108.1 + +103.8 + +2/2 + +131.3 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp asinh +mean: 107.1 bits +p01: 104.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 107.4, p01 104.6, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499356 +near_one: mean 106.7, p01 104.0, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499359 +benchmark: 165.6 ns/iteration, speed vs FLTX 0.79× + +107.1 + +0.0 + +1/2 + +165.6 ns · 0.79× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asinh +mean: 104.5 bits +p01: 100.8 bits +worst: 99.8 bits +domains: 2/2 +minimum threshold margin: 19.8 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 105.1, p01 101.7, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 100.8, worst 99.8, required 80.0, margin 19.8, n=4099, seed=10322096095657499359 +benchmark: 750.0 ns/iteration, speed vs FLTX 0.18× + +104.5 + +99.8 + +2/2 + +750.0 ns · 0.18× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asinh +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 13,852 ns/iteration, speed vs FLTX 0.01× + +114.9 + +113.0 + +2/2 + +13,852 ns · 0.01× + +No + +✗ + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 142.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.076218× + +108.0 + +103.7 + +2/2 + +142.8 ns + +Both + +- + + +qdpp dd_real +API: qdpp acosh +mean: 107.2 bits +p01: 103.9 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 106.7, p01 103.9, worst 0.0, required 80.0, margin -80.0, n=4101, seed=10322096095657499355 +moderate: mean 107.8, p01 105.1, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499387 +benchmark: 153.7 ns/iteration, speed vs FLTX 0.93× + +107.2 + +0.0 + +0/2 + +153.7 ns · 0.93× + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acosh +mean: 105.6 bits +p01: 101.7 bits +worst: 100.4 bits +domains: 2/2 +minimum threshold margin: 20.4 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 105.7, p01 101.7, worst 101.1, required 80.0, margin 21.1, n=4101, seed=10322096095657499355 +moderate: mean 105.5, p01 102.2, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499387 +benchmark: 796.4 ns/iteration, speed vs FLTX 0.18× + +105.6 + +100.4 + +2/2 + +796.4 ns · 0.18× + +Both + +- + + +TLFloat Quad +API: tlfloat::acosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.7, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4101, seed=10322096095657499355 +moderate: mean 115.1, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499387 +benchmark: 13,197 ns/iteration, speed vs FLTX 0.01× + +114.9 + +113.0 + +2/2 + +13,197 ns · 0.01× + +No + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 142.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.119843× + +108.1 + +103.1 + +2/2 + +142.8 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atanh +mean: 107.6 bits +p01: 104.4 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 108.0, p01 105.4, worst 0.0, required 80.0, margin -80.0, n=4105, seed=10322096095657499355 +moderate: mean 107.2, p01 104.4, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 159.9 ns/iteration, speed vs FLTX 0.89× + +107.6 + +0.0 + +1/2 + +159.9 ns · 0.89× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atanh +mean: 106.7 bits +p01: 102.1 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.8, p01 106.3, worst 104.6, required 80.0, margin 24.6, n=4105, seed=10322096095657499355 +moderate: mean 105.6, p01 102.1, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +benchmark: 2,771 ns/iteration, speed vs FLTX 0.05× + +106.7 + +101.3 + +2/2 + +2,771 ns · 0.05× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atanh +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.4, p01 113.9, worst 113.2, required 80.0, margin 33.2, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 5,409 ns/iteration, speed vs FLTX 0.03× + +115.1 + +113.0 + +2/2 + +5,409 ns · 0.03× + +No + +✗ + + + + +Special + + + + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 561.0 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.157763× + +107.2 + +99.2 + +2/2 + +561.0 ns + +Both + +- + + +qdpp: erfc is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erfc +mean: 106.3 bits +p01: 99.6 bits +worst: 99.1 bits +domains: 2/2 +minimum threshold margin: 19.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 108.8, p01 99.6, worst 99.1, required 80.0, margin 19.1, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 1,211 ns/iteration, speed vs FLTX 0.46× + +106.3 + +99.1 + +2/2 + +1,211 ns · 0.46× + +Both + +- + + +TLFloat Quad +API: tlfloat::erfc +mean: 115.1 bits +p01: 113.2 bits +worst: 113.1 bits +domains: 2/2 +minimum threshold margin: 33.1 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 115.2, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 95,080 ns/iteration, speed vs FLTX 0.01× + +115.1 + +113.1 + +2/2 + +95,080 ns · 0.01× + +Inf + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 571.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.149175× + +110.9 + +103.5 + +2/2 + +571.6 ns + +Both + +✓ + + +qdpp: erf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erf +mean: 110.1 bits +p01: 102.2 bits +worst: 101.2 bits +domains: 2/2 +minimum threshold margin: 21.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 103.7, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499356 +near_one: mean 106.2, p01 102.2, worst 101.2, required 80.0, margin 21.2, n=4099, seed=10322096095657499359 +benchmark: 1,228 ns/iteration, speed vs FLTX 0.47× + +110.1 + +101.2 + +2/2 + +1,228 ns · 0.47× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::erf +mean: 115.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.6, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 95,173 ns/iteration, speed vs FLTX 0.01× + +115.2 + +113.0 + +2/2 + +95,173 ns · 0.01× + +Inf + +✗ + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 472.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 4.520574× + +105.6 + +97.3 + +1/1 + +472.7 ns + +Both + +- + + +qdpp: tgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tgamma +mean: 100.8 bits +p01: 97.4 bits +worst: 96.5 bits +domains: 1/1 +minimum threshold margin: 16.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 100.8, p01 97.4, worst 96.5, required 80.0, margin 16.5, n=4099, seed=10322096095657499368 +benchmark: 2,137 ns/iteration, speed vs FLTX 0.22× + +100.8 + +96.5 + +1/1 + +2,137 ns · 0.22× + +Both + +- + + +TLFloat Quad +API: tlfloat::tgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499368 +benchmark: 69,246 ns/iteration, speed vs FLTX 0.01× + +115.0 + +113.0 + +1/1 + +69,246 ns · 0.01× + +No + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 533.4 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 5.486146× + +107.3 + +102.2 + +1/1 + +533.4 ns + +Both + +- + + +qdpp: lgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lgamma +mean: 105.1 bits +p01: 100.7 bits +worst: 92.1 bits +domains: 1/1 +minimum threshold margin: 12.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.1, p01 100.7, worst 92.1, required 80.0, margin 12.1, n=4099, seed=10322096095657499371 +benchmark: 2,926 ns/iteration, speed vs FLTX 0.18× + +105.1 + +92.1 + +1/1 + +2,926 ns · 0.18× + +Both + +- + + +TLFloat Quad +API: tlfloat::lgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499371 +benchmark: 62,138 ns/iteration, speed vs FLTX 0.01× + +115.0 + +113.0 + +1/1 + +62,138 ns · 0.01× + +No + +- + + + + +Comparisons + + + + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.687 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.790805× + +exact + +exact + +1/1 + +0.687 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.543 ns/iteration, speed vs FLTX 1.26× + +exact + +exact + +1/1 + +0.543 ns · 1.26× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.00 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +5.00 ns · 0.14× + +Both + +- + + +TLFloat Quad +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 66.17 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +66.17 ns · 0.01× + +Both + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.688 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.800319× + +exact + +exact + +1/1 + +0.688 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.551 ns/iteration, speed vs FLTX 1.25× + +exact + +exact + +1/1 + +0.551 ns · 1.25× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.96 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +4.96 ns · 0.14× + +Both + +- + + +TLFloat Quad +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 67.12 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +67.12 ns · 0.01× + +Both + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.08 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.940467× + +exact + +exact + +1/1 + +2.08 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.96 ns/iteration, speed vs FLTX 1.06× + +exact + +exact + +1/1 + +1.96 ns · 1.06× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.03 ns/iteration, speed vs FLTX 0.41× + +exact + +exact + +1/1 + +5.03 ns · 0.41× + +Both + +- + + +TLFloat Quad +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 66.68 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +66.68 ns · 0.03× + +Both + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.06 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.955398× + +exact + +exact + +1/1 + +2.06 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.97 ns/iteration, speed vs FLTX 1.05× + +exact + +exact + +1/1 + +1.97 ns · 1.05× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.06 ns/iteration, speed vs FLTX 0.41× + +exact + +exact + +1/1 + +5.06 ns · 0.41× + +Both + +- + + +TLFloat Quad +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 66.22 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +66.22 ns · 0.03× + +Both + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.05 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.96635× + +exact + +exact + +1/1 + +2.05 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.98 ns/iteration, speed vs FLTX 1.03× + +exact + +exact + +1/1 + +1.98 ns · 1.03× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.98 ns/iteration, speed vs FLTX 0.41× + +exact + +exact + +1/1 + +4.98 ns · 0.41× + +Both + +- + + +TLFloat Quad +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 66.43 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +66.43 ns · 0.03× + +Both + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.05 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.958193× + +exact + +exact + +1/1 + +2.05 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.97 ns/iteration, speed vs FLTX 1.04× + +exact + +exact + +1/1 + +1.97 ns · 1.04× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.03 ns/iteration, speed vs FLTX 0.41× + +exact + +exact + +1/1 + +5.03 ns · 0.41× + +Both + +- + + +TLFloat Quad +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 65.95 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +65.95 ns · 0.03× + +Both + +- + + + + +Random + + + + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 8.91 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.120299× + +- + +- + +- + +8.91 ns + +- + +- + + +qdpp dd_real +API: qdpp ddrand +benchmark: 18.89 ns/iteration, speed vs FLTX 0.47× + +- + +- + +- + +18.89 ns · 0.47× + +- + +- + + +cppdd: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 46.95 ns/iteration (no available competitor) + +- + +- + +- + +46.95 ns + +- + +- + + +qdpp: normal is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 5.00 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.600234× + +- + +- + +- + +5.00 ns + +- + +- + + +qdpp dd_real +API: same expression +benchmark: 3.00 ns/iteration, speed vs FLTX 1.67× + +- + +- + +- + +3.00 ns · 1.67× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same expression +benchmark: 25.65 ns/iteration, speed vs FLTX 0.20× + +- + +- + +- + +25.65 ns · 0.20× + +- + +- + + +TLFloat Quad +API: same expression +benchmark: 420.4 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +420.4 ns · 0.01× + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 20.20 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.871088× + +- + +- + +- + +20.20 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 37.80 ns/iteration, speed vs FLTX 0.53× + +- + +- + +- + +37.80 ns · 0.53× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 52.28 ns/iteration, speed vs FLTX 0.39× + +- + +- + +- + +52.28 ns · 0.39× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 988.9 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +988.9 ns · 0.02× + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 174.6 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.31672× + +- + +- + +- + +174.6 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 229.9 ns/iteration, speed vs FLTX 0.76× + +- + +- + +- + +229.9 ns · 0.76× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 981.9 ns/iteration, speed vs FLTX 0.18× + +- + +- + +- + +981.9 ns · 0.18× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 7,421 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +7,421 ns · 0.02× + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 12.91 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.911336× + +- + +- + +- + +12.91 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 11.76 ns/iteration, speed vs FLTX 1.10× + +- + +- + +- + +11.76 ns · 1.10× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 59.17 ns/iteration, speed vs FLTX 0.22× + +- + +- + +- + +59.17 ns · 0.22× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 1,057 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +1,057 ns · 0.01× + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 54.99 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.040504× + +- + +- + +- + +54.99 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 57.22 ns/iteration, speed vs FLTX 0.96× + +- + +- + +- + +57.22 ns · 0.96× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 264.8 ns/iteration, speed vs FLTX 0.21× + +- + +- + +- + +264.8 ns · 0.21× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 4,518 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +4,518 ns · 0.01× + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 77.86 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.000111× + +- + +- + +- + +77.86 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 77.87 ns/iteration, speed vs FLTX 1.00× + +- + +- + +- + +77.87 ns · 1.00× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 246.7 ns/iteration, speed vs FLTX 0.32× + +- + +- + +- + +246.7 ns · 0.32× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 3,859 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +3,859 ns · 0.02× + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 25.72 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.652587× + +- + +- + +- + +25.72 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 42.51 ns/iteration, speed vs FLTX 0.61× + +- + +- + +- + +42.51 ns · 0.61× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 78.22 ns/iteration, speed vs FLTX 0.33× + +- + +- + +- + +78.22 ns · 0.33× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 1,264 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +1,264 ns · 0.02× + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 813.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.113757× + +- + +- + +- + +813.8 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 906.4 ns/iteration, speed vs FLTX 0.90× + +- + +- + +- + +906.4 ns · 0.90× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 3,145 ns/iteration, speed vs FLTX 0.26× + +- + +- + +- + +3,145 ns · 0.26× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 34,300 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +34,300 ns · 0.02× + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 417.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.834899× + +- + +- + +- + +417.3 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 765.7 ns/iteration, speed vs FLTX 0.54× + +- + +- + +- + +765.7 ns · 0.54× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 6,172 ns/iteration, speed vs FLTX 0.07× + +- + +- + +- + +6,172 ns · 0.07× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 22,488 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +22,488 ns · 0.02× + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/windows_x86_64_MSVC_f128_overview_compact.svg b/validation/metrics/generated/overview/windows_x86_64_MSVC_f128_overview_compact.svg new file mode 100644 index 0000000..e6e388a --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MSVC_f128_overview_compact.svg @@ -0,0 +1,9368 @@ + + + + + +operation + + +bl::f128 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +qdpp (dd_real) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +boost (cpp_double_double) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +TLFloat (tlquad) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +Arithmetic + + + + + + + +add + +fltx bl::f128 +API: bl::add +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 1.91 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.969538× + +120.3 + +105.7 + +2/2 + +1.9 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp operator+ +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 1.85 ns/iteration, speed vs FLTX 1.03× + +120.3 + +105.7 + +2/2 + +1.9 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator+ +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 4.21 ns/iteration, speed vs FLTX 0.45× + +120.3 + +105.7 + +2/2 + +4.2 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator+ +mean: 127.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 125.8, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 162.1 ns/iteration, speed vs FLTX 0.01× + +127.0 + +113.0 + +2/2 + +162 ns + +No + +✗ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 2.14 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.871143× + +120.1 + +105.7 + +2/2 + +2.1 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp operator- +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 1.87 ns/iteration, speed vs FLTX 1.15× + +120.1 + +105.7 + +2/2 + +1.9 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator- +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 4.26 ns/iteration, speed vs FLTX 0.50× + +120.1 + +105.7 + +2/2 + +4.3 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator- +mean: 127.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 126.0, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 162.2 ns/iteration, speed vs FLTX 0.01× + +127.2 + +113.0 + +2/2 + +162 ns + +No + +✗ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 1.63 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.477832× + +108.7 + +105.4 + +2/2 + +1.6 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp operator* +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 0.777 ns/iteration, speed vs FLTX 2.09× + +108.7 + +105.4 + +2/2 + +0.78 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator* +mean: 108.5 bits +p01: 105.2 bits +worst: 104.7 bits +domains: 2/2 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 108.5, p01 105.2, worst 104.7, required 90.0, margin 14.7, n=4092, seed=10322096095657499292 +subnormal: mean 123.8, p01 108.1, worst 108.1, required 90.0, margin 18.1, n=8, seed=10322096095657499292 +benchmark: 5.51 ns/iteration, speed vs FLTX 0.30× + +108.5 + +104.7 + +2/2 + +5.5 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator* +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4092, seed=10322096095657499292 +subnormal: mean 129.7, p01 113.5, worst 113.5, required 90.0, margin 23.5, n=8, seed=10322096095657499292 +benchmark: 134.6 ns/iteration, speed vs FLTX 0.01× + +115.0 + +113.0 + +2/2 + +135 ns + +No + +✗ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 1.68 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.786294× + +110.9 + +105.1 + +2/2 + +1.7 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp operator/ +mean: 110.7 bits +p01: 106.1 bits +worst: 105.5 bits +domains: 2/2 +minimum threshold margin: 15.5 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 110.7, p01 106.1, worst 105.5, required 90.0, margin 15.5, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 10.52 ns/iteration, speed vs FLTX 0.16× + +110.7 + +105.5 + +2/2 + +10.5 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator/ +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 6.34 ns/iteration, speed vs FLTX 0.26× + +110.9 + +105.1 + +2/2 + +6.3 ns + +NaN + +✗ + + +TLFloat Quad +API: TLFloat operator/ +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 231.3 ns/iteration, speed vs FLTX 0.01× + +115.0 + +113.0 + +2/2 + +231 ns + +No + +✗ + + + + +IO + + + + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 248.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.665764× + +114.0 + +110.7 + +2/2 + +249 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp to_string +mean: 109.4 bits +p01: 102.4 bits +worst: 102.3 bits +domains: 2/2 +minimum threshold margin: 12.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 107.9, worst 107.8, required 90.0, margin 17.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 104.9, p01 102.4, worst 102.3, required 90.0, margin 12.3, n=4096, seed=10322096095657499357 +benchmark: 414.2 ns/iteration, speed vs FLTX 0.60× + +109.4 + +102.3 + +2/2 + +414 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost number::str +mean: 110.8 bits +p01: 106.0 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 16.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 112.0, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 109.5, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4096, seed=10322096095657499357 +benchmark: 637.0 ns/iteration, speed vs FLTX 0.39× + +110.8 + +106.0 + +2/2 + +637 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::to_string +mean: 110.7 bits +p01: 107.6 bits +worst: 107.3 bits +domains: 2/2 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.8, p01 107.9, worst 107.4, required 90.0, margin 17.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 110.5, p01 107.6, worst 107.3, required 90.0, margin 17.3, n=4096, seed=10322096095657499357 +benchmark: 11,176 ns/iteration, speed vs FLTX 0.02× + +110.7 + +107.3 + +2/2 + +11176 ns + +Both + +✓ + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 207.5 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.99789× + +114.0 + +110.7 + +2/2 + +207 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp write +mean: 109.4 bits +p01: 102.4 bits +worst: 102.3 bits +domains: 2/2 +minimum threshold margin: 12.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 107.9, worst 107.8, required 90.0, margin 17.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 104.9, p01 102.4, worst 102.3, required 90.0, margin 12.3, n=4096, seed=10322096095657499357 +benchmark: 414.5 ns/iteration, speed vs FLTX 0.50× + +109.4 + +102.3 + +2/2 + +414 ns + +Both + +✗ + + +cppdd: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 107.1 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 107.1, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 226.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.845185× + +109.9 + +106.0 + +2/2 + +226 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp read +mean: 102.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -106.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 106.8, p01 104.4, worst 103.5, required 106.0, margin -2.5, n=4097, seed=10322096095657499311 +wide_exponent: mean 98.2, p01 0.0, worst 0.0, required 106.0, margin -106.0, n=4098, seed=10322096095657499308 +benchmark: 191.1 ns/iteration, speed vs FLTX 1.18× + +102.5 + +0.0 + +0/2 + +191 ns + +NaN + +✓ + + +boost::multiprecision::cpp_double_double +API: Boost string constructor +mean: 107.1 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -106.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.9, p01 106.2, worst 106.0, required 106.0, margin 0.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 106.3, p01 0.0, worst 0.0, required 106.0, margin -106.0, n=4098, seed=10322096095657499308 +benchmark: 809.1 ns/iteration, speed vs FLTX 0.28× + +107.1 + +0.0 + +1/2 + +809 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat string constructor +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 7.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4098, seed=10322096095657499308 +benchmark: 8,376 ns/iteration, speed vs FLTX 0.03× + +114.9 + +113.0 + +2/2 + +8376 ns + +No + +✗ + + + + +Rounding + + + + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.38 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.954857× + += + += + +1/1 + +1.4 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.32 ns/iteration, speed vs FLTX 1.05× + += + += + +1/1 + +1.3 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 4.68 ns/iteration, speed vs FLTX 0.29× + += + += + +1/1 + +4.7 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 54.05 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +54.0 ns + +No + +✗ + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.94 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.699649× + += + += + +1/1 + +1.9 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.36 ns/iteration, speed vs FLTX 1.43× + += + += + +1/1 + +1.4 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 6.35 ns/iteration, speed vs FLTX 0.31× + += + += + +1/1 + +6.3 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 53.61 ns/iteration, speed vs FLTX 0.04× + += + += + +1/1 + +53.6 ns + +No + +✗ + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 3.47 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.35456× + += + += + +1/1 + +3.5 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp aint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 4.70 ns/iteration, speed vs FLTX 0.74× + += + += + +1/1 + +4.7 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 8.63 ns/iteration, speed vs FLTX 0.40× + += + += + +1/1 + +8.6 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 48.33 ns/iteration, speed vs FLTX 0.07× + += + += + +1/1 + +48.3 ns + +No + +✗ + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.30 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.359419× + += + += + +1/1 + +10.3 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp round +mean: 130.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/1 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 130.4, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4108, seed=10322096095657499334 +benchmark: 3.70 ns/iteration, speed vs FLTX 2.78× + +130.4 + +0.0 + +0/1 + +3.7 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 13.61 ns/iteration, speed vs FLTX 0.76× + += + += + +1/1 + +13.6 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 52.49 ns/iteration, speed vs FLTX 0.20× + += + += + +1/1 + +52.5 ns + +No + +✗ + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 9.58 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 6.740238× + += + += + +1/1 + +9.6 ns + +Both + +✓ + + +qdpp: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 64.60 ns/iteration, speed vs FLTX 0.15× + += + += + +1/1 + +64.6 ns + +No + +✗ + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 4.35 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 6.725088× + += + += + +1/1 + +4.4 ns + +- + +- + + +qdpp: lround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 29.28 ns/iteration, speed vs FLTX 0.15× + += + += + +1/1 + +29.3 ns + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 4.37 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 101.682351× + += + += + +1/1 + +4.4 ns + +- + +- + + +qdpp: llround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 444.3 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +444 ns + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 83.59 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +83.6 ns + +Both + +✓ + + +qdpp: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 129.1 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +129 ns + +Both + +✓ + + +qdpp: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 17.92 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.057196× + += + += + +3/3 + +17.9 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp fmod +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -90.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 135.0, p01 101.7, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 24.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=2, seed=10322096095657499335 +wide_exponent: mean 78.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4096, seed=10322096095657499357 +benchmark: 18.95 ns/iteration, speed vs FLTX 0.95× + +106.7 + +0.0 + +1/3 + +18.9 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmod +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -90.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 135.0, p01 101.7, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 24.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=2, seed=10322096095657499335 +wide_exponent: mean 78.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4096, seed=10322096095657499357 +benchmark: 50.61 ns/iteration, speed vs FLTX 0.35× + +106.7 + +0.0 + +1/3 + +50.6 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 616.2 ns/iteration, speed vs FLTX 0.03× + += + += + +3/3 + +616 ns + +No + +✗ + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 21.78 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.88674× + +138.0 + +103.1 + +1/1 + +21.8 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp drem +mean: 134.4 bits +p01: 101.0 bits +worst: 95.5 bits +domains: 1/1 +minimum threshold margin: 5.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 134.4, p01 101.0, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +benchmark: 19.31 ns/iteration, speed vs FLTX 1.13× + +134.4 + +95.5 + +1/1 + +19.3 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remainder +mean: 134.4 bits +p01: 101.0 bits +worst: 95.5 bits +domains: 1/1 +minimum threshold margin: 5.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 134.4, p01 101.0, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +benchmark: 51.15 ns/iteration, speed vs FLTX 0.43× + +134.4 + +95.5 + +1/1 + +51.1 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 680.1 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +680 ns + +No + +✗ + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 21.11 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.93961× + += + += + +1/1 + +21.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp divrem +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 19.83 ns/iteration, speed vs FLTX 1.06× + += + += + +1/1 + +19.8 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 51.10 ns/iteration, speed vs FLTX 0.41× + += + += + +1/1 + +51.1 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 692.3 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +692 ns + +No + +✗ + + + + +Float Utils + + + + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.49 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.804229× + += + += + +2/2 + +3.5 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.97 ns/iteration, speed vs FLTX 1.18× + += + += + +2/2 + +3.0 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.69 ns/iteration, speed vs FLTX 0.74× + += + += + +2/2 + +4.7 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.81 ns/iteration, speed vs FLTX 1.24× + += + += + +2/2 + +2.8 ns + +No + +✓ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.51 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.795636× + += + += + +1/1 + +3.5 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.99 ns/iteration, speed vs FLTX 1.17× + += + += + +1/1 + +3.0 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 4.32 ns/iteration, speed vs FLTX 0.81× + += + += + +1/1 + +4.3 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.79 ns/iteration, speed vs FLTX 1.26× + += + += + +1/1 + +2.8 ns + +No + +✓ + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.4 bits +p01: 104.7 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 109.1, p01 104.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.6, p01 106.6, worst 105.3, required 90.0, margin 15.3, n=4096, seed=10322096095657499357 +benchmark: 5.84 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.036087× + +117.4 + +99.6 + +3/3 + +5.8 ns + +Both + +✗ + + +qdpp: fma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fma +mean: 75.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -90.0 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 0.1, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4098, seed=10322096095657499352 +moderate: mean 108.2, p01 103.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.1, p01 105.4, worst 104.1, required 90.0, margin 14.1, n=4096, seed=10322096095657499357 +benchmark: 11.88 ns/iteration, speed vs FLTX 0.49× + +75.8 + +0.0 + +2/3 + +11.9 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fma +mean: 128.4 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 125.4, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 231.8 ns/iteration, speed vs FLTX 0.03× + +128.4 + +113.0 + +3/3 + +232 ns + +No + +✗ + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 24.32 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.447038× + +109.0 + +105.2 + +2/2 + +24.3 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp inv +mean: 109.4 bits +p01: 106.8 bits +worst: 106.5 bits +domains: 2/2 +minimum threshold margin: 16.5 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 109.4, p01 107.0, worst 106.5, required 90.0, margin 16.5, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.4, p01 106.8, worst 106.5, required 90.0, margin 16.5, n=4096, seed=10322096095657499357 +benchmark: 10.87 ns/iteration, speed vs FLTX 2.24× + +109.4 + +106.5 + +2/2 + +10.9 ns + +NaN + +✗ + + +cppdd: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.18 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.02288× + += + += + +2/2 + +3.2 ns + +Both + +✓ + + +qdpp: fmin is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.43 ns/iteration, speed vs FLTX 0.49× + += + += + +2/2 + +6.4 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 98.18 ns/iteration, speed vs FLTX 0.03× + += + += + +2/2 + +98.2 ns + +No + +✗ + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.24 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.991331× + += + += + +2/2 + +3.2 ns + +Both + +✓ + + +qdpp: fmax is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.45 ns/iteration, speed vs FLTX 0.50× + += + += + +2/2 + +6.5 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 98.11 ns/iteration, speed vs FLTX 0.03× + += + += + +2/2 + +98.1 ns + +No + +✗ + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.77 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.196267× + +138.0 + +106.2 + +2/2 + +3.8 ns + +Both + +✓ + + +qdpp: fdim is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 8.27 ns/iteration, speed vs FLTX 0.46× + +138.0 + +106.2 + +2/2 + +8.3 ns + +No + +✓ + + +TLFloat Quad +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 283.3 ns/iteration, speed vs FLTX 0.01× + += + += + +2/2 + +283 ns + +No + +✓ + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.64 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.600545× + += + += + +1/1 + +1.6 ns + +Both + +✓ + + +qdpp: copysign is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.62 ns/iteration, speed vs FLTX 0.62× + += + += + +1/1 + +2.6 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 6.01 ns/iteration, speed vs FLTX 0.27× + += + += + +1/1 + +6.0 ns + +No + +✗ + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.96 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.075099× + += + += + +1/1 + +2.0 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.07 ns/iteration, speed vs FLTX 0.48× + += + += + +1/1 + +4.1 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.17 ns/iteration, speed vs FLTX 0.47× + += + += + +1/1 + +4.2 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 60.83 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +60.8 ns + +No + +✗ + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.18 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.885701× + += + += + +1/1 + +2.2 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.12 ns/iteration, speed vs FLTX 0.53× + += + += + +1/1 + +4.1 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.17 ns/iteration, speed vs FLTX 0.52× + += + += + +1/1 + +4.2 ns + +Both + +✗ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.19 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.871905× + += + += + +1/1 + +2.2 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.10 ns/iteration, speed vs FLTX 0.53× + += + += + +1/1 + +4.1 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.17 ns/iteration, speed vs FLTX 0.52× + += + += + +1/1 + +4.2 ns + +Both + +✗ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.66 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.58086× + += + += + +2/2 + +2.7 ns + +Both + +✓ + + +qdpp: frexp is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.20 ns/iteration, speed vs FLTX 0.63× + += + += + +2/2 + +4.2 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 210.3 ns/iteration, speed vs FLTX 0.01× + += + += + +2/2 + +210 ns + +No + +✗ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.89 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.621811× + += + += + +2/2 + +5.9 ns + +Both + +✓ + + +qdpp: modf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 15.43 ns/iteration, speed vs FLTX 0.38× + += + += + +2/2 + +15.4 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 311.8 ns/iteration, speed vs FLTX 0.02× + += + += + +2/2 + +312 ns + +No + +✗ + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.32 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.424051× + += + += + +2/2 + +2.3 ns + +- + +- + + +qdpp: ilogb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.63 ns/iteration, speed vs FLTX 0.41× + += + += + +2/2 + +5.6 ns + +- + +- + + +TLFloat Quad +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 33.29 ns/iteration, speed vs FLTX 0.07× + += + += + +2/2 + +33.3 ns + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.51 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 31.642366× + += + += + +2/2 + +2.5 ns + +Both + +- + + +qdpp: logb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 79.41 ns/iteration, speed vs FLTX 0.03× + += + += + +2/2 + +79.4 ns + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 5.86 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 10.862539× + +- + +- + +- + +5.9 ns + +- + +- + + +qdpp: nextafter is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter +benchmark: 63.67 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +63.7 ns + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter +benchmark: 180.4 ns/iteration, speed vs FLTX 0.03× + +- + +- + +- + +180 ns + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 5.85 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 10.886768× + +- + +- + +- + +5.9 ns + +- + +- + + +qdpp: nexttoward is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter (same type) +benchmark: 63.70 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +63.7 ns + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter (same type) +benchmark: 180.2 ns/iteration, speed vs FLTX 0.03× + +- + +- + +- + +180 ns + +- + +- + + + + +Roots & powers + + + + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.61 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.482203× + +108.7 + +105.4 + +2/2 + +1.6 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 108.6, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 0.778 ns/iteration, speed vs FLTX 2.07× + +108.7 + +105.4 + +2/2 + +0.78 ns + +NaN + +✓ + + +cppdd: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.7 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 4/4 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 110.5, p01 106.7, worst 106.2, required 90.0, margin 16.2, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 4.10 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.213078× + +109.7 + +104.7 + +4/4 + +4.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sqrt +mean: 92.6 bits +p01: 52.2 bits +worst: 52.0 bits +domains: 2/4 +minimum threshold margin: -38.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 98.1, p01 55.3, worst 55.3, required 90.0, margin -34.7, n=4096, seed=10322096095657499354 +near_one: mean 108.0, p01 104.2, worst 103.5, required 90.0, margin 13.5, n=4099, seed=10322096095657499359 +subnormal: mean 56.5, p01 52.2, worst 52.0, required 90.0, margin -38.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 108.1, p01 104.2, worst 103.2, required 90.0, margin 13.2, n=4096, seed=10322096095657499357 +benchmark: 4.97 ns/iteration, speed vs FLTX 0.82× + +92.6 + +52.0 + +2/4 + +5.0 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sqrt +mean: 113.6 bits +p01: 54.2 bits +worst: 52.9 bits +domains: 2/4 +minimum threshold margin: -37.1 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 99.1, p01 54.4, worst 54.4, required 90.0, margin -35.6, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 136.1, p01 54.2, worst 52.9, required 90.0, margin -37.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 5.87 ns/iteration, speed vs FLTX 0.70× + +113.6 + +52.9 + +2/4 + +5.9 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sqrt +mean: 115.2 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 4/4 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 115.0, p01 113.4, worst 113.1, required 90.0, margin 23.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499359 +subnormal: mean 115.7, p01 113.2, worst 113.1, required 90.0, margin 23.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 409.6 ns/iteration, speed vs FLTX 0.01× + +115.2 + +113.0 + +4/4 + +410 ns + +No + +✗ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.0 bits +p01: 104.1 bits +worst: 103.0 bits +domains: 2/2 +minimum threshold margin: 13.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.1, p01 104.3, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 107.9, p01 104.1, worst 103.0, required 90.0, margin 13.0, n=4096, seed=10322096095657499357 +benchmark: 21.98 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 3.002101× + +108.0 + +103.0 + +2/2 + +22.0 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp nroot +mean: 101.5 bits +p01: 89.4 bits +worst: 89.0 bits +domains: 1/2 +minimum threshold margin: -1.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 107.5, p01 104.0, worst 103.0, required 90.0, margin 13.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 95.6, p01 89.4, worst 89.0, required 90.0, margin -1.0, n=4096, seed=10322096095657499357 +benchmark: 66.00 ns/iteration, speed vs FLTX 0.33× + +101.5 + +89.0 + +1/2 + +66.0 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cbrt +mean: 108.4 bits +p01: 105.4 bits +worst: 104.6 bits +domains: 2/2 +minimum threshold margin: 14.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 108.6, p01 105.6, worst 104.6, required 90.0, margin 14.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.2, p01 105.4, worst 104.7, required 90.0, margin 14.7, n=4096, seed=10322096095657499357 +benchmark: 427.6 ns/iteration, speed vs FLTX 0.05× + +108.4 + +104.6 + +2/2 + +428 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::cbrt +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.1, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 3,221 ns/iteration, speed vs FLTX 0.01× + +115.0 + +113.0 + +2/2 + +3221 ns + +No + +✗ + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 8.88 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 6.466075× + +122.4 + +104.4 + +2/2 + +8.9 ns + +Both + +✓ + + +qdpp: hypot is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::hypot +mean: 121.9 bits +p01: 104.9 bits +worst: 104.3 bits +domains: 2/2 +minimum threshold margin: 14.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.8, p01 104.9, worst 104.3, required 90.0, margin 14.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 106.6, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 57.44 ns/iteration, speed vs FLTX 0.15× + +121.9 + +104.3 + +2/2 + +57.4 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::hypot +mean: 129.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 142.9, p01 113.8, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 446.9 ns/iteration, speed vs FLTX 0.02× + +129.0 + +113.0 + +2/2 + +447 ns + +No + +✓ + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 202.4 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.08673× + +107.1 + +101.3 + +2/2 + +202 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp pow +mean: 106.8 bits +p01: 101.7 bits +worst: 101.0 bits +domains: 2/2 +minimum threshold margin: 21.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 105.3, p01 101.7, worst 101.0, required 80.0, margin 21.0, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.2, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499359 +benchmark: 219.9 ns/iteration, speed vs FLTX 0.92× + +106.8 + +101.0 + +2/2 + +220 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow +mean: 102.6 bits +p01: 98.7 bits +worst: 97.6 bits +domains: 2/2 +minimum threshold margin: 17.6 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 102.0, p01 98.7, worst 97.6, required 80.0, margin 17.6, n=4099, seed=10322096095657499356 +near_one: mean 103.2, p01 100.6, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499359 +benchmark: 661.3 ns/iteration, speed vs FLTX 0.31× + +102.6 + +97.6 + +2/2 + +661 ns + +Inf + +✗ + + +TLFloat Quad +API: tlfloat::pow +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 16,200 ns/iteration, speed vs FLTX 0.01× + +114.9 + +113.0 + +2/2 + +16200 ns + +No + +✗ + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 15.29 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.476941× + +106.5 + +103.2 + +2/2 + +15.3 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp npwr +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 7.29 ns/iteration, speed vs FLTX 2.10× + +106.5 + +103.2 + +2/2 + +7.3 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow(value, int) +mean: 106.4 bits +p01: 103.5 bits +worst: 102.7 bits +domains: 2/2 +minimum threshold margin: 12.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.4, p01 103.5, worst 102.8, required 90.0, margin 12.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.4, p01 103.5, worst 102.7, required 90.0, margin 12.7, n=4096, seed=10322096095657499357 +benchmark: 18.95 ns/iteration, speed vs FLTX 0.81× + +106.4 + +102.7 + +2/2 + +19.0 ns + +Both + +✗ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 107.0 bits +p01: 104.3 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.6, p01 104.3, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.4, p01 104.8, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 110.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.934001× + +107.0 + +103.6 + +2/2 + +111 ns + +Both + +- + + +qdpp dd_real +API: qdpp exp +mean: 106.8 bits +p01: 104.2 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.5, p01 104.2, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499339 +moderate: mean 107.2, p01 104.6, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499356 +benchmark: 103.4 ns/iteration, speed vs FLTX 1.07× + +106.8 + +103.7 + +2/2 + +103 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp +mean: 100.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 97.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499339 +moderate: mean 103.7, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +benchmark: 367.6 ns/iteration, speed vs FLTX 0.30× + +100.4 + +0.0 + +1/2 + +368 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::exp +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 3,212 ns/iteration, speed vs FLTX 0.03× + +114.9 + +113.0 + +2/2 + +3212 ns + +No + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 96.38 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 8.630168× + +108.9 + +105.1 + +2/2 + +96.4 ns + +Both + +- + + +qdpp: exp2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp2 +mean: 101.7 bits +p01: 96.4 bits +worst: 95.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 99.5, p01 96.4, worst 95.2, required 80.0, margin 15.2, n=4099, seed=10322096095657499339 +moderate: mean 103.8, p01 101.1, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499356 +benchmark: 831.8 ns/iteration, speed vs FLTX 0.12× + +101.7 + +95.2 + +2/2 + +832 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::exp2 +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 7,336 ns/iteration, speed vs FLTX 0.01× + +115.0 + +113.0 + +2/2 + +7336 ns + +No + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 112.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.934079× + +121.6 + +104.1 + +2/2 + +113 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp expm1 +mean: 121.5 bits +p01: 104.8 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 134.5, p01 105.7, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.5, p01 104.8, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499356 +benchmark: 105.2 ns/iteration, speed vs FLTX 1.07× + +121.5 + +0.0 + +1/2 + +105 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::expm1 +mean: 120.3 bits +p01: 101.1 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 106.6, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 106.1, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499356 +benchmark: 390.1 ns/iteration, speed vs FLTX 0.29× + +120.3 + +100.3 + +2/2 + +390 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::expm1 +mean: 128.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.7, worst 113.0, required 80.0, margin 33.0, n=4098, seed=10322096095657499336 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 3,627 ns/iteration, speed vs FLTX 0.03× + +128.2 + +113.0 + +2/2 + +3627 ns + +No + +✗ + + + + +Logarithms + + + + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.6, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 125.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.986826× + +108.4 + +103.7 + +3/3 + +125 ns + +Both + +- + + +qdpp dd_real +API: qdpp log +mean: 101.6 bits +p01: 62.6 bits +worst: 62.1 bits +domains: 2/3 +minimum threshold margin: -17.9 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 95.0, p01 62.6, worst 62.1, required 80.0, margin -17.9, n=4096, seed=10322096095657499354 +near_one: mean 106.9, p01 104.4, worst 103.9, required 80.0, margin 23.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 103.0, p01 98.4, worst 98.1, required 80.0, margin 18.1, n=4096, seed=10322096095657499357 +benchmark: 123.7 ns/iteration, speed vs FLTX 1.01× + +101.6 + +62.1 + +2/3 + +124 ns + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log +mean: 105.3 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.2, p01 105.2, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.9, p01 104.6, worst 102.4, required 80.0, margin 22.4, n=4096, seed=10322096095657499357 +benchmark: 408.1 ns/iteration, speed vs FLTX 0.31× + +105.3 + +87.9 + +3/3 + +408 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::log +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 115.5, p01 113.3, worst 113.3, required 80.0, margin 33.3, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 5,040 ns/iteration, speed vs FLTX 0.02× + +115.1 + +113.0 + +3/3 + +5040 ns + +No + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 116.9 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 3.589146× + +108.8 + +103.7 + +3/3 + +117 ns + +Both + +- + + +qdpp: log2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log2 +mean: 106.6 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.2, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.8, p01 104.5, worst 102.3, required 80.0, margin 22.3, n=4096, seed=10322096095657499357 +benchmark: 419.4 ns/iteration, speed vs FLTX 0.28× + +106.6 + +87.9 + +3/3 + +419 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::log2 +mean: 116.3 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 119.0, p01 113.9, worst 113.8, required 80.0, margin 33.8, n=4096, seed=10322096095657499354 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 5,237 ns/iteration, speed vs FLTX 0.02× + +116.3 + +113.0 + +3/3 + +5237 ns + +No + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.5 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 129.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.122418× + +107.5 + +103.8 + +3/3 + +130 ns + +Both + +- + + +qdpp dd_real +API: qdpp log10 +mean: 101.4 bits +p01: 62.6 bits +worst: 62.1 bits +domains: 2/3 +minimum threshold margin: -17.9 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 94.9, p01 62.6, worst 62.1, required 80.0, margin -17.9, n=4096, seed=10322096095657499354 +near_one: mean 106.6, p01 104.2, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +wide_exponent: mean 102.8, p01 98.3, worst 98.1, required 80.0, margin 18.1, n=4096, seed=10322096095657499357 +benchmark: 145.7 ns/iteration, speed vs FLTX 0.89× + +101.4 + +62.1 + +2/3 + +146 ns + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log10 +mean: 102.9 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 103.6, p01 103.1, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499354 +near_one: mean 101.6, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 103.6, p01 103.0, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499357 +benchmark: 419.2 ns/iteration, speed vs FLTX 0.31× + +102.9 + +87.9 + +3/3 + +419 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::log10 +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 114.8, p01 113.1, worst 113.1, required 80.0, margin 33.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 5,262 ns/iteration, speed vs FLTX 0.02× + +114.9 + +113.0 + +3/3 + +5262 ns + +No + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 137.6 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.934464× + +121.4 + +103.6 + +2/2 + +138 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp log1p +mean: 120.9 bits +p01: 104.6 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 105.8, worst 104.1, required 80.0, margin 24.1, n=4098, seed=10322096095657499336 +moderate: mean 107.2, p01 104.6, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +benchmark: 128.5 ns/iteration, speed vs FLTX 1.07× + +120.9 + +103.8 + +2/2 + +129 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log1p +mean: 119.7 bits +p01: 101.3 bits +worst: 100.2 bits +domains: 2/2 +minimum threshold margin: 20.2 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 107.2, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 104.8, p01 101.3, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +benchmark: 541.0 ns/iteration, speed vs FLTX 0.25× + +119.7 + +100.2 + +2/2 + +541 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::log1p +mean: 128.1 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.6, worst 113.1, required 80.0, margin 33.1, n=4098, seed=10322096095657499336 +moderate: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 5,480 ns/iteration, speed vs FLTX 0.03× + +128.1 + +113.0 + +2/2 + +5480 ns + +No + +✗ + + + + +Trigonometric + + + + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 103.6 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.117129× + +110.6 + +98.6 + +3/3 + +104 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sin +mean: 52.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 15.7, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 106.7, p01 101.7, worst 97.4, required 80.0, margin 17.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 36.0, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 115.8 ns/iteration, speed vs FLTX 0.90× + +52.5 + +0.0 + +1/3 + +116 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sin +mean: 51.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.2, p01 98.8, worst 94.5, required 80.0, margin 14.5, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 35.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 640.3 ns/iteration, speed vs FLTX 0.16× + +51.4 + +0.0 + +1/3 + +640 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sin +mean: 116.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4110, seed=10322096095657499353 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 118.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 3,361 ns/iteration, speed vs FLTX 0.03× + +116.1 + +113.0 + +3/3 + +3361 ns + +No + +✗ + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 104.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.111555× + +113.5 + +99.2 + +3/3 + +104 ns + +Both + +- + + +qdpp dd_real +API: qdpp cos +mean: 63.6 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 54.3, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 106.6, p01 101.4, worst 96.3, required 80.0, margin 16.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 31.6, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 115.9 ns/iteration, speed vs FLTX 0.90× + +63.6 + +0.0 + +1/3 + +116 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cos +mean: 63.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 53.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.1, p01 98.9, worst 94.0, required 80.0, margin 14.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 33.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 646.7 ns/iteration, speed vs FLTX 0.16× + +63.3 + +0.0 + +1/3 + +647 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::cos +mean: 117.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 118.8, p01 113.4, worst 113.1, required 80.0, margin 33.1, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 117.8, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 3,386 ns/iteration, speed vs FLTX 0.03× + +117.2 + +113.0 + +3/3 + +3386 ns + +No + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 92.82 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.442272× + +- + +- + +- + +92.8 ns + +- + +- + + +qdpp dd_real +API: qdpp sincos +benchmark: 133.9 ns/iteration, speed vs FLTX 0.69× + +- + +- + +- + +134 ns + +- + +- + + +cppdd: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::sincos +benchmark: 6,959 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +6959 ns + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.7, required 75.0, margin 28.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 107.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.427711× + +106.7 + +98.6 + +3/3 + +107 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp tan +mean: 42.6 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -75.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 14.7, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4110, seed=10322096095657499353 +moderate: mean 105.9, p01 100.7, worst 96.3, required 75.0, margin 21.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 9.2, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4315, seed=10322096095657499369 +benchmark: 153.0 ns/iteration, speed vs FLTX 0.70× + +42.6 + +0.0 + +1/3 + +153 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tan +mean: 41.2 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -75.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4110, seed=10322096095657499353 +moderate: mean 103.3, p01 97.9, worst 94.0, required 75.0, margin 19.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 9.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4315, seed=10322096095657499369 +benchmark: 1,299 ns/iteration, speed vs FLTX 0.08× + +41.2 + +0.0 + +1/3 + +1299 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tan +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 38.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 114.9, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.1, worst 113.0, required 75.0, margin 38.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 115.0, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4315, seed=10322096095657499369 +benchmark: 4,659 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +3/3 + +4659 ns + +No + +✗ + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 166.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.487442× + +108.6 + +104.1 + +2/2 + +166 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp asin +mean: 108.0 bits +p01: 103.5 bits +worst: 102.4 bits +domains: 2/2 +minimum threshold margin: 22.4 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 109.5, p01 107.4, worst 104.4, required 80.0, margin 24.4, n=4105, seed=10322096095657499355 +moderate: mean 106.6, p01 103.5, worst 102.4, required 80.0, margin 22.4, n=4099, seed=10322096095657499356 +benchmark: 247.0 ns/iteration, speed vs FLTX 0.67× + +108.0 + +102.4 + +2/2 + +247 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asin +mean: 106.8 bits +p01: 104.1 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 23.2 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.0, p01 105.5, worst 105.4, required 80.0, margin 25.4, n=4105, seed=10322096095657499355 +moderate: mean 106.5, p01 104.1, worst 103.2, required 80.0, margin 23.2, n=4099, seed=10322096095657499356 +benchmark: 2,310 ns/iteration, speed vs FLTX 0.07× + +106.8 + +103.2 + +2/2 + +2310 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asin +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.1, p01 113.7, worst 113.7, required 80.0, margin 33.7, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 6,149 ns/iteration, speed vs FLTX 0.03× + +115.0 + +113.0 + +2/2 + +6149 ns + +No + +✗ + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 170.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.444522× + +106.5 + +81.6 + +2/2 + +170 ns + +Both + +- + + +qdpp dd_real +API: qdpp acos +mean: 108.1 bits +p01: 104.4 bits +worst: 103.3 bits +domains: 2/2 +minimum threshold margin: 23.3 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 108.2, p01 104.4, worst 103.7, required 80.0, margin 23.7, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 104.4, worst 103.3, required 80.0, margin 23.3, n=4099, seed=10322096095657499356 +benchmark: 245.7 ns/iteration, speed vs FLTX 0.69× + +108.1 + +103.3 + +2/2 + +246 ns + +No + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acos +mean: 107.0 bits +p01: 104.1 bits +worst: 102.5 bits +domains: 2/2 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.1, p01 104.6, worst 104.1, required 80.0, margin 24.1, n=4105, seed=10322096095657499355 +moderate: mean 106.8, p01 104.1, worst 102.5, required 80.0, margin 22.5, n=4099, seed=10322096095657499356 +benchmark: 2,243 ns/iteration, speed vs FLTX 0.08× + +107.0 + +102.5 + +2/2 + +2243 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::acos +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 6,193 ns/iteration, speed vs FLTX 0.03× + +114.9 + +113.0 + +2/2 + +6193 ns + +No + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 122.0 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.494031× + +108.7 + +104.9 + +2/2 + +122 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atan +mean: 107.2 bits +p01: 103.5 bits +worst: 102.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 108.1, p01 103.9, worst 102.9, required 80.0, margin 22.9, n=4099, seed=10322096095657499356 +near_one: mean 106.2, p01 103.5, worst 102.9, required 80.0, margin 22.9, n=4099, seed=10322096095657499359 +benchmark: 182.2 ns/iteration, speed vs FLTX 0.67× + +107.2 + +102.9 + +2/2 + +182 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan +mean: 106.7 bits +p01: 104.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.8, p01 104.7, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499359 +benchmark: 384.8 ns/iteration, speed vs FLTX 0.32× + +106.7 + +103.6 + +2/2 + +385 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan +mean: 115.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 5,589 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +2/2 + +5589 ns + +Inf + +✗ + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 118.4 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.506198× + +108.7 + +104.5 + +3/3 + +118 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atan2 +mean: 106.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -80.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 0.0, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=8, seed=10322096095657499351 +moderate: mean 107.5, p01 103.7, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +near_one: mean 106.3, p01 103.4, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499359 +benchmark: 178.4 ns/iteration, speed vs FLTX 0.66× + +106.8 + +0.0 + +2/3 + +178 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan2 +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 61.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=8, seed=10322096095657499351 +moderate: mean 106.9, p01 104.4, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 386.4 ns/iteration, speed vs FLTX 0.31× + +106.7 + +0.0 + +2/3 + +386 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan2 +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 118.6, p01 114.8, worst 114.8, required 80.0, margin 34.8, n=8, seed=10322096095657499351 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 5,635 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +3/3 + +5635 ns + +Inf + +✗ + + + + +Hyperbolic + + + + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 131.4 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.028872× + +107.4 + +103.6 + +2/2 + +131 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sinh +mean: 107.0 bits +p01: 104.4 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 106.9, p01 104.4, worst 103.9, required 80.0, margin 23.9, n=4099, seed=10322096095657499356 +near_one: mean 107.1, p01 104.4, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499359 +benchmark: 135.2 ns/iteration, speed vs FLTX 0.97× + +107.0 + +103.6 + +2/2 + +135 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sinh +mean: 103.5 bits +p01: 100.6 bits +worst: 99.9 bits +domains: 2/2 +minimum threshold margin: 19.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 103.8, p01 101.0, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +near_one: mean 103.3, p01 100.6, worst 99.9, required 80.0, margin 19.9, n=4099, seed=10322096095657499359 +benchmark: 400.6 ns/iteration, speed vs FLTX 0.33× + +103.5 + +99.9 + +2/2 + +401 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sinh +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 4,158 ns/iteration, speed vs FLTX 0.03× + +115.0 + +113.0 + +2/2 + +4158 ns + +No + +✗ + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 132.6 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.01992× + +107.9 + +104.4 + +2/2 + +133 ns + +Both + +- + + +qdpp dd_real +API: qdpp cosh +mean: 107.7 bits +p01: 104.9 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 107.5, p01 104.9, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.3, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499359 +benchmark: 135.2 ns/iteration, speed vs FLTX 0.98× + +107.7 + +104.1 + +2/2 + +135 ns + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cosh +mean: 104.0 bits +p01: 101.1 bits +worst: 100.6 bits +domains: 2/2 +minimum threshold margin: 20.6 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 103.8, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.2, p01 101.5, worst 101.0, required 80.0, margin 21.0, n=4099, seed=10322096095657499359 +benchmark: 400.6 ns/iteration, speed vs FLTX 0.33× + +104.0 + +100.6 + +2/2 + +401 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::cosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 3,636 ns/iteration, speed vs FLTX 0.04× + +114.9 + +113.0 + +2/2 + +3636 ns + +No + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 140.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.992613× + +109.2 + +103.8 + +2/2 + +140 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp tanh +mean: 109.3 bits +p01: 105.4 bits +worst: 104.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 109.9, p01 105.4, worst 104.0, required 80.0, margin 24.0, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.7, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499359 +benchmark: 139.0 ns/iteration, speed vs FLTX 1.01× + +109.3 + +104.0 + +2/2 + +139 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tanh +mean: 105.8 bits +p01: 101.2 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.0, p01 102.2, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.5, p01 101.2, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 423.9 ns/iteration, speed vs FLTX 0.33× + +105.8 + +100.3 + +2/2 + +424 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tanh +mean: 115.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.5, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 3,958 ns/iteration, speed vs FLTX 0.04× + +115.2 + +113.0 + +2/2 + +3958 ns + +Inf + +✗ + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 131.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.26113× + +108.1 + +103.8 + +2/2 + +131 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp asinh +mean: 107.1 bits +p01: 104.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 107.4, p01 104.6, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499356 +near_one: mean 106.7, p01 104.0, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499359 +benchmark: 165.6 ns/iteration, speed vs FLTX 0.79× + +107.1 + +0.0 + +1/2 + +166 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asinh +mean: 104.5 bits +p01: 100.8 bits +worst: 99.8 bits +domains: 2/2 +minimum threshold margin: 19.8 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 105.1, p01 101.7, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 100.8, worst 99.8, required 80.0, margin 19.8, n=4099, seed=10322096095657499359 +benchmark: 750.0 ns/iteration, speed vs FLTX 0.18× + +104.5 + +99.8 + +2/2 + +750 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asinh +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 13,852 ns/iteration, speed vs FLTX 0.01× + +114.9 + +113.0 + +2/2 + +13852 ns + +No + +✗ + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 142.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.076218× + +108.0 + +103.7 + +2/2 + +143 ns + +Both + +- + + +qdpp dd_real +API: qdpp acosh +mean: 107.2 bits +p01: 103.9 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 106.7, p01 103.9, worst 0.0, required 80.0, margin -80.0, n=4101, seed=10322096095657499355 +moderate: mean 107.8, p01 105.1, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499387 +benchmark: 153.7 ns/iteration, speed vs FLTX 0.93× + +107.2 + +0.0 + +0/2 + +154 ns + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acosh +mean: 105.6 bits +p01: 101.7 bits +worst: 100.4 bits +domains: 2/2 +minimum threshold margin: 20.4 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 105.7, p01 101.7, worst 101.1, required 80.0, margin 21.1, n=4101, seed=10322096095657499355 +moderate: mean 105.5, p01 102.2, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499387 +benchmark: 796.4 ns/iteration, speed vs FLTX 0.18× + +105.6 + +100.4 + +2/2 + +796 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::acosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.7, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4101, seed=10322096095657499355 +moderate: mean 115.1, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499387 +benchmark: 13,197 ns/iteration, speed vs FLTX 0.01× + +114.9 + +113.0 + +2/2 + +13197 ns + +No + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 142.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.119843× + +108.1 + +103.1 + +2/2 + +143 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atanh +mean: 107.6 bits +p01: 104.4 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 108.0, p01 105.4, worst 0.0, required 80.0, margin -80.0, n=4105, seed=10322096095657499355 +moderate: mean 107.2, p01 104.4, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 159.9 ns/iteration, speed vs FLTX 0.89× + +107.6 + +0.0 + +1/2 + +160 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atanh +mean: 106.7 bits +p01: 102.1 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.8, p01 106.3, worst 104.6, required 80.0, margin 24.6, n=4105, seed=10322096095657499355 +moderate: mean 105.6, p01 102.1, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +benchmark: 2,771 ns/iteration, speed vs FLTX 0.05× + +106.7 + +101.3 + +2/2 + +2771 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atanh +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.4, p01 113.9, worst 113.2, required 80.0, margin 33.2, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 5,409 ns/iteration, speed vs FLTX 0.03× + +115.1 + +113.0 + +2/2 + +5409 ns + +No + +✗ + + + + +Special + + + + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 561.0 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.157763× + +107.2 + +99.2 + +2/2 + +561 ns + +Both + +- + + +qdpp: erfc is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erfc +mean: 106.3 bits +p01: 99.6 bits +worst: 99.1 bits +domains: 2/2 +minimum threshold margin: 19.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 108.8, p01 99.6, worst 99.1, required 80.0, margin 19.1, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 1,211 ns/iteration, speed vs FLTX 0.46× + +106.3 + +99.1 + +2/2 + +1211 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::erfc +mean: 115.1 bits +p01: 113.2 bits +worst: 113.1 bits +domains: 2/2 +minimum threshold margin: 33.1 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 115.2, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 95,080 ns/iteration, speed vs FLTX 0.01× + +115.1 + +113.1 + +2/2 + +95080 ns + +Inf + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 571.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.149175× + +110.9 + +103.5 + +2/2 + +572 ns + +Both + +✓ + + +qdpp: erf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erf +mean: 110.1 bits +p01: 102.2 bits +worst: 101.2 bits +domains: 2/2 +minimum threshold margin: 21.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 103.7, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499356 +near_one: mean 106.2, p01 102.2, worst 101.2, required 80.0, margin 21.2, n=4099, seed=10322096095657499359 +benchmark: 1,228 ns/iteration, speed vs FLTX 0.47× + +110.1 + +101.2 + +2/2 + +1228 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::erf +mean: 115.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.6, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 95,173 ns/iteration, speed vs FLTX 0.01× + +115.2 + +113.0 + +2/2 + +95173 ns + +Inf + +✗ + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 472.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 4.520574× + +105.6 + +97.3 + +1/1 + +473 ns + +Both + +- + + +qdpp: tgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tgamma +mean: 100.8 bits +p01: 97.4 bits +worst: 96.5 bits +domains: 1/1 +minimum threshold margin: 16.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 100.8, p01 97.4, worst 96.5, required 80.0, margin 16.5, n=4099, seed=10322096095657499368 +benchmark: 2,137 ns/iteration, speed vs FLTX 0.22× + +100.8 + +96.5 + +1/1 + +2137 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::tgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499368 +benchmark: 69,246 ns/iteration, speed vs FLTX 0.01× + +115.0 + +113.0 + +1/1 + +69246 ns + +No + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 533.4 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 5.486146× + +107.3 + +102.2 + +1/1 + +533 ns + +Both + +- + + +qdpp: lgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lgamma +mean: 105.1 bits +p01: 100.7 bits +worst: 92.1 bits +domains: 1/1 +minimum threshold margin: 12.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.1, p01 100.7, worst 92.1, required 80.0, margin 12.1, n=4099, seed=10322096095657499371 +benchmark: 2,926 ns/iteration, speed vs FLTX 0.18× + +105.1 + +92.1 + +1/1 + +2926 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::lgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499371 +benchmark: 62,138 ns/iteration, speed vs FLTX 0.01× + +115.0 + +113.0 + +1/1 + +62138 ns + +No + +- + + + + +Comparisons + + + + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.687 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.790805× + += + += + +1/1 + +0.69 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.543 ns/iteration, speed vs FLTX 1.26× + += + += + +1/1 + +0.54 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.00 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +5.0 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 66.17 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +66.2 ns + +Both + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.688 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.800319× + += + += + +1/1 + +0.69 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.551 ns/iteration, speed vs FLTX 1.25× + += + += + +1/1 + +0.55 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.96 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +5.0 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 67.12 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +67.1 ns + +Both + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.08 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.940467× + += + += + +1/1 + +2.1 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.96 ns/iteration, speed vs FLTX 1.06× + += + += + +1/1 + +2.0 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.03 ns/iteration, speed vs FLTX 0.41× + += + += + +1/1 + +5.0 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 66.68 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +66.7 ns + +Both + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.06 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.955398× + += + += + +1/1 + +2.1 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.97 ns/iteration, speed vs FLTX 1.05× + += + += + +1/1 + +2.0 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.06 ns/iteration, speed vs FLTX 0.41× + += + += + +1/1 + +5.1 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 66.22 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +66.2 ns + +Both + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.05 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.96635× + += + += + +1/1 + +2.1 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.98 ns/iteration, speed vs FLTX 1.03× + += + += + +1/1 + +2.0 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 4.98 ns/iteration, speed vs FLTX 0.41× + += + += + +1/1 + +5.0 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 66.43 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +66.4 ns + +Both + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.05 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.958193× + += + += + +1/1 + +2.1 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.97 ns/iteration, speed vs FLTX 1.04× + += + += + +1/1 + +2.0 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 5.03 ns/iteration, speed vs FLTX 0.41× + += + += + +1/1 + +5.0 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 65.95 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +65.9 ns + +Both + +- + + + + +Random + + + + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 8.91 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.120299× + +- + +- + +- + +8.9 ns + +- + +- + + +qdpp dd_real +API: qdpp ddrand +benchmark: 18.89 ns/iteration, speed vs FLTX 0.47× + +- + +- + +- + +18.9 ns + +- + +- + + +cppdd: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 46.95 ns/iteration (no available competitor) + +- + +- + +- + +47.0 ns + +- + +- + + +qdpp: normal is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 5.00 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.600234× + +- + +- + +- + +5.0 ns + +- + +- + + +qdpp dd_real +API: same expression +benchmark: 3.00 ns/iteration, speed vs FLTX 1.67× + +- + +- + +- + +3.0 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same expression +benchmark: 25.65 ns/iteration, speed vs FLTX 0.20× + +- + +- + +- + +25.6 ns + +- + +- + + +TLFloat Quad +API: same expression +benchmark: 420.4 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +420 ns + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 20.20 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.871088× + +- + +- + +- + +20.2 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 37.80 ns/iteration, speed vs FLTX 0.53× + +- + +- + +- + +37.8 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 52.28 ns/iteration, speed vs FLTX 0.39× + +- + +- + +- + +52.3 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 988.9 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +989 ns + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 174.6 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.31672× + +- + +- + +- + +175 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 229.9 ns/iteration, speed vs FLTX 0.76× + +- + +- + +- + +230 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 981.9 ns/iteration, speed vs FLTX 0.18× + +- + +- + +- + +982 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 7,421 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +7421 ns + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 12.91 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.911336× + +- + +- + +- + +12.9 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 11.76 ns/iteration, speed vs FLTX 1.10× + +- + +- + +- + +11.8 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 59.17 ns/iteration, speed vs FLTX 0.22× + +- + +- + +- + +59.2 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 1,057 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +1057 ns + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 54.99 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.040504× + +- + +- + +- + +55.0 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 57.22 ns/iteration, speed vs FLTX 0.96× + +- + +- + +- + +57.2 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 264.8 ns/iteration, speed vs FLTX 0.21× + +- + +- + +- + +265 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 4,518 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +4518 ns + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 77.86 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.000111× + +- + +- + +- + +77.9 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 77.87 ns/iteration, speed vs FLTX 1.00× + +- + +- + +- + +77.9 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 246.7 ns/iteration, speed vs FLTX 0.32× + +- + +- + +- + +247 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 3,859 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +3859 ns + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 25.72 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.652587× + +- + +- + +- + +25.7 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 42.51 ns/iteration, speed vs FLTX 0.61× + +- + +- + +- + +42.5 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 78.22 ns/iteration, speed vs FLTX 0.33× + +- + +- + +- + +78.2 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 1,264 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +1264 ns + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 813.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.113757× + +- + +- + +- + +814 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 906.4 ns/iteration, speed vs FLTX 0.90× + +- + +- + +- + +906 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 3,145 ns/iteration, speed vs FLTX 0.26× + +- + +- + +- + +3145 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 34,300 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +34300 ns + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 417.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.834899× + +- + +- + +- + +417 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 765.7 ns/iteration, speed vs FLTX 0.54× + +- + +- + +- + +766 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 6,172 ns/iteration, speed vs FLTX 0.07× + +- + +- + +- + +6172 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 22,488 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +22488 ns + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/windows_x86_64_MSVC_f256_fastmath_overview.svg b/validation/metrics/generated/overview/windows_x86_64_MSVC_f256_fastmath_overview.svg new file mode 100644 index 0000000..3207f04 --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MSVC_f256_fastmath_overview.svg @@ -0,0 +1,3020 @@ + + + + +f256 consumer fast-math metrics overview — Windows / x64 / MSVC +Accuracy excludes the subnormal domain; support is reported separately. Speed is relative to FLTX. + +operation + + +bl::f256 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + + +Arithmetic + + + + +add + +fltx bl::f256 +API: bl::add +mean: 226.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 10.64 ns/iteration (no available competitor) + +226.0 + +215.3 + +1/1 + +10.64 ns + +Both + +✗ + +✓ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 226.1 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 1/1 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.1, p01 215.6, worst 215.2, required 190.0, margin 25.2, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 10.65 ns/iteration (no available competitor) + +226.1 + +215.2 + +1/1 + +10.65 ns + +Both + +✗ + +✓ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 216.3 bits +worst: 215.2 bits +domains: 1/1 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 18.66 ns/iteration (no available competitor) + +220.0 + +215.2 + +1/1 + +18.66 ns + +Both + +✓ + +✓ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 1/1 +minimum threshold margin: 24.8 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 219.4, p01 215.4, worst 215.4, required 190.0, margin 25.4, n=55, seed=10322096095657499292 +benchmark: 80.51 ns/iteration (no available competitor) + +219.2 + +214.8 + +1/1 + +80.51 ns + +Both + +✓ + +✓ + + + + +IO + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 355.4 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +355.4 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 299.9 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +299.9 ns + +Both + +✓ + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 430.3 ns/iteration (no available competitor) + +219.7 + +212.0 + +2/2 + +430.3 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 5.19 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +5.19 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 5.17 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +5.17 ns + +Both + +✓ + +- + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 7.59 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +7.59 ns + +Both + +✓ + +- + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 12.87 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +12.87 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 9.57 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +9.57 ns + +Both + +✓ + +- + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 8.28 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +8.28 ns + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 6.89 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +6.89 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 126.9 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +126.9 ns + +Both + +✓ + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 179.8 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +179.8 ns + +Both + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 67.39 ns/iteration (no available competitor) + +244.0 + +217.7 + +3/3 + +67.39 ns + +Both + +✓ + +- + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 96.14 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +96.14 ns + +Both + +✓ + +- + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 96.76 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +96.76 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.32 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.32 ns + +Both + +✓ + +✓ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.30 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.30 ns + +Both + +✓ + +- + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 24.52 ns/iteration (no available competitor) + +229.7 + +215.1 + +3/3 + +24.52 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 74.48 ns/iteration (no available competitor) + +217.9 + +214.6 + +2/2 + +74.48 ns + +Both + +✓ + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.33 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +4.33 ns + +Both + +✓ + +- + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.11 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +4.11 ns + +Both + +✓ + +- + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 7.92 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +7.92 ns + +Both + +✓ + +- + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.867 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.867 ns + +Both + +✓ + +- + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.95 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +4.95 ns + +Both + +✓ + +- + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.86 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +4.86 ns + +Both + +✓ + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.87 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +4.87 ns + +Both + +✓ + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 10.40 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +10.40 ns + +Both + +✓ + +✓ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.24 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +18.24 ns + +Both + +✓ + +- + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.56 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.56 ns + +- + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.09 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +2.09 ns + +Both + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 8.15 ns/iteration (no available competitor) + +- + +- + +- + +8.15 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 8.12 ns/iteration (no available competitor) + +- + +- + +- + +8.12 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 18.27 ns/iteration (no available competitor) + +220.1 + +215.3 + +2/2 + +18.27 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.8 bits +p01: 211.3 bits +worst: 209.6 bits +domains: 3/3 +minimum threshold margin: 19.6 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 218.3, p01 211.5, worst 210.0, required 190.0, margin 20.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 122.1 ns/iteration (no available competitor) + +217.8 + +209.6 + +3/3 + +122.1 ns + +Both + +✓ + +✓ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 215.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 344.4 ns/iteration (no available competitor) + +219.3 + +215.0 + +2/2 + +344.4 ns + +Both + +✓ + +- + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 172.6 ns/iteration (no available competitor) + +229.9 + +213.9 + +2/2 + +172.6 ns + +Both + +✓ + +- + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,549 ns/iteration (no available competitor) + +216.8 + +211.1 + +2/2 + +2,549 ns + +Both + +✓ + +- + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 111.8 ns/iteration (no available competitor) + +217.2 + +213.7 + +2/2 + +111.8 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.8 bits +p01: 210.6 bits +worst: 209.2 bits +domains: 2/2 +minimum threshold margin: 29.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.1, p01 210.6, worst 209.2, required 180.0, margin 29.2, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 1,007 ns/iteration (no available competitor) + +216.8 + +209.2 + +2/2 + +1,007 ns + +Both + +- + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 826.2 ns/iteration (no available competitor) + +218.0 + +214.2 + +2/2 + +826.2 ns + +Both + +- + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 227.2 bits +p01: 207.5 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.0, p01 207.5, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 1,009 ns/iteration (no available competitor) + +227.2 + +207.0 + +2/2 + +1,009 ns + +Both + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.8 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.2, p01 215.3, worst 215.0, required 180.0, margin 35.0, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,670 ns/iteration (no available competitor) + +217.8 + +213.3 + +3/3 + +1,670 ns + +Both + +- + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 221.1, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,704 ns/iteration (no available competitor) + +218.6 + +213.2 + +3/3 + +1,704 ns + +Both + +- + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 217.6, p01 215.1, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,719 ns/iteration (no available competitor) + +217.4 + +213.3 + +3/3 + +1,719 ns + +Both + +- + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 226.8 bits +p01: 207.4 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.1, p01 207.4, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,724 ns/iteration (no available competitor) + +226.8 + +207.0 + +2/2 + +1,724 ns + +Both + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 881.9 ns/iteration (no available competitor) + +222.3 + +202.9 + +3/3 + +881.9 ns + +Both + +✓ + +- + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 881.7 ns/iteration (no available competitor) + +226.8 + +208.7 + +3/3 + +881.7 ns + +Both + +- + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,081 ns/iteration (no available competitor) + +- + +- + +- + +1,081 ns + +- + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,144 ns/iteration (no available competitor) + +217.1 + +202.9 + +3/3 + +1,144 ns + +Both + +✓ + +- + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,337 ns/iteration (no available competitor) + +217.9 + +214.4 + +2/2 + +1,337 ns + +Both + +✓ + +- + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,348 ns/iteration (no available competitor) + +216.0 + +192.5 + +2/2 + +1,348 ns + +Both + +- + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 879.9 ns/iteration (no available competitor) + +218.1 + +214.7 + +2/2 + +879.9 ns + +Both + +✓ + +- + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 959.4 ns/iteration (no available competitor) + +217.9 + +214.3 + +3/3 + +959.4 ns + +Both + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,242 ns/iteration (no available competitor) + +217.0 + +213.8 + +2/2 + +1,242 ns + +Both + +✓ + +- + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,245 ns/iteration (no available competitor) + +217.5 + +214.2 + +2/2 + +1,245 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,222 ns/iteration (no available competitor) + +219.1 + +214.0 + +2/2 + +1,222 ns + +Both + +✓ + +- + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,613 ns/iteration (no available competitor) + +217.2 + +213.0 + +2/2 + +2,613 ns + +Both + +✓ + +- + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,413 ns/iteration (no available competitor) + +217.7 + +213.7 + +2/2 + +2,413 ns + +Both + +- + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,193 ns/iteration (no available competitor) + +218.3 + +213.3 + +2/2 + +2,193 ns + +Both + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 8,882 ns/iteration (no available competitor) + +208.2 + +189.8 + +2/2 + +8,882 ns + +Both + +- + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 8,880 ns/iteration (no available competitor) + +212.8 + +196.8 + +2/2 + +8,880 ns + +Both + +✓ + +- + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 9,361 ns/iteration (no available competitor) + +209.0 + +202.5 + +1/1 + +9,361 ns + +Both + +- + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 8,335 ns/iteration (no available competitor) + +211.9 + +199.2 + +1/1 + +8,335 ns + +Both + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.774 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.774 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.775 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.775 ns + +Both + +- + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.02 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.02 ns + +Both + +- + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.09 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.09 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.05 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.05 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.01 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.01 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 19.16 ns/iteration (no available competitor) + +- + +- + +- + +19.16 ns + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 265.4 ns/iteration (no available competitor) + +- + +- + +- + +265.4 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 42.94 ns/iteration (no available competitor) + +- + +- + +- + +42.94 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 155.2 ns/iteration (no available competitor) + +- + +- + +- + +155.2 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,805 ns/iteration (no available competitor) + +- + +- + +- + +1,805 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 124.0 ns/iteration (no available competitor) + +- + +- + +- + +124.0 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 557.2 ns/iteration (no available competitor) + +- + +- + +- + +557.2 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 394.9 ns/iteration (no available competitor) + +- + +- + +- + +394.9 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 219.4 ns/iteration (no available competitor) + +- + +- + +- + +219.4 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 8,662 ns/iteration (no available competitor) + +- + +- + +- + +8,662 ns + +- + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,657 ns/iteration (no available competitor) + +- + +- + +- + +4,657 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/windows_x86_64_MSVC_f256_fastmath_overview_compact.svg b/validation/metrics/generated/overview/windows_x86_64_MSVC_f256_fastmath_overview_compact.svg new file mode 100644 index 0000000..bb47ca0 --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MSVC_f256_fastmath_overview_compact.svg @@ -0,0 +1,3017 @@ + + + + + +operation + + +bl::f256 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +Subnorm + +avg + +min + +pass + + + +Arithmetic + + + + +add + +fltx bl::f256 +API: bl::add +mean: 226.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 10.64 ns/iteration (no available competitor) + +226.0 + +215.3 + +1/1 + +10.6 ns + +Both + +✗ + +✓ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 226.1 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 1/1 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.1, p01 215.6, worst 215.2, required 190.0, margin 25.2, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 10.65 ns/iteration (no available competitor) + +226.1 + +215.2 + +1/1 + +10.7 ns + +Both + +✗ + +✓ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 216.3 bits +worst: 215.2 bits +domains: 1/1 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 18.66 ns/iteration (no available competitor) + +220.0 + +215.2 + +1/1 + +18.7 ns + +Both + +✓ + +✓ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 1/1 +minimum threshold margin: 24.8 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 219.4, p01 215.4, worst 215.4, required 190.0, margin 25.4, n=55, seed=10322096095657499292 +benchmark: 80.51 ns/iteration (no available competitor) + +219.2 + +214.8 + +1/1 + +80.5 ns + +Both + +✓ + +✓ + + + + +IO + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 355.4 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +355 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 299.9 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +300 ns + +Both + +✓ + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 430.3 ns/iteration (no available competitor) + +219.7 + +212.0 + +2/2 + +430 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 5.19 ns/iteration (no available competitor) + += + += + +1/1 + +5.2 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 5.17 ns/iteration (no available competitor) + += + += + +1/1 + +5.2 ns + +Both + +✓ + +- + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 7.59 ns/iteration (no available competitor) + += + += + +1/1 + +7.6 ns + +Both + +✓ + +- + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 12.87 ns/iteration (no available competitor) + += + += + +1/1 + +12.9 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 9.57 ns/iteration (no available competitor) + += + += + +1/1 + +9.6 ns + +Both + +✓ + +- + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 8.28 ns/iteration (no available competitor) + += + += + +1/1 + +8.3 ns + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 6.89 ns/iteration (no available competitor) + += + += + +1/1 + +6.9 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 126.9 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +127 ns + +Both + +✓ + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 179.8 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +180 ns + +Both + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 67.39 ns/iteration (no available competitor) + +244.0 + +217.7 + +3/3 + +67.4 ns + +Both + +✓ + +- + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 96.14 ns/iteration (no available competitor) + += + += + +1/1 + +96.1 ns + +Both + +✓ + +- + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 96.76 ns/iteration (no available competitor) + += + += + +1/1 + +96.8 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.32 ns/iteration (no available competitor) + += + += + +1/1 + +2.3 ns + +Both + +✓ + +✓ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.30 ns/iteration (no available competitor) + += + += + +1/1 + +2.3 ns + +Both + +✓ + +- + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 24.52 ns/iteration (no available competitor) + +229.7 + +215.1 + +3/3 + +24.5 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 74.48 ns/iteration (no available competitor) + +217.9 + +214.6 + +2/2 + +74.5 ns + +Both + +✓ + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.33 ns/iteration (no available competitor) + += + += + +2/2 + +4.3 ns + +Both + +✓ + +- + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.11 ns/iteration (no available competitor) + += + += + +2/2 + +4.1 ns + +Both + +✓ + +- + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 7.92 ns/iteration (no available competitor) + += + += + +2/2 + +7.9 ns + +Both + +✓ + +- + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.867 ns/iteration (no available competitor) + += + += + +1/1 + +0.87 ns + +Both + +✓ + +- + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.95 ns/iteration (no available competitor) + += + += + +1/1 + +4.9 ns + +Both + +✓ + +- + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.86 ns/iteration (no available competitor) + += + += + +1/1 + +4.9 ns + +Both + +✓ + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.87 ns/iteration (no available competitor) + += + += + +1/1 + +4.9 ns + +Both + +✓ + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 10.40 ns/iteration (no available competitor) + += + += + +1/1 + +10.4 ns + +Both + +✓ + +✓ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.24 ns/iteration (no available competitor) + += + += + +2/2 + +18.2 ns + +Both + +✓ + +- + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.56 ns/iteration (no available competitor) + += + += + +2/2 + +1.6 ns + +- + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.09 ns/iteration (no available competitor) + += + += + +2/2 + +2.1 ns + +Both + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 8.15 ns/iteration (no available competitor) + +- + +- + +- + +8.2 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 8.12 ns/iteration (no available competitor) + +- + +- + +- + +8.1 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 18.27 ns/iteration (no available competitor) + +220.1 + +215.3 + +2/2 + +18.3 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.8 bits +p01: 211.3 bits +worst: 209.6 bits +domains: 3/3 +minimum threshold margin: 19.6 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 218.3, p01 211.5, worst 210.0, required 190.0, margin 20.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 122.1 ns/iteration (no available competitor) + +217.8 + +209.6 + +3/3 + +122 ns + +Both + +✓ + +✓ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 215.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 344.4 ns/iteration (no available competitor) + +219.3 + +215.0 + +2/2 + +344 ns + +Both + +✓ + +- + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 172.6 ns/iteration (no available competitor) + +229.9 + +213.9 + +2/2 + +173 ns + +Both + +✓ + +- + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,549 ns/iteration (no available competitor) + +216.8 + +211.1 + +2/2 + +2549 ns + +Both + +✓ + +- + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 111.8 ns/iteration (no available competitor) + +217.2 + +213.7 + +2/2 + +112 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.8 bits +p01: 210.6 bits +worst: 209.2 bits +domains: 2/2 +minimum threshold margin: 29.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.1, p01 210.6, worst 209.2, required 180.0, margin 29.2, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 1,007 ns/iteration (no available competitor) + +216.8 + +209.2 + +2/2 + +1007 ns + +Both + +- + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 826.2 ns/iteration (no available competitor) + +218.0 + +214.2 + +2/2 + +826 ns + +Both + +- + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 227.2 bits +p01: 207.5 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.0, p01 207.5, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 1,009 ns/iteration (no available competitor) + +227.2 + +207.0 + +2/2 + +1009 ns + +Both + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.8 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.2, p01 215.3, worst 215.0, required 180.0, margin 35.0, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,670 ns/iteration (no available competitor) + +217.8 + +213.3 + +3/3 + +1670 ns + +Both + +- + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 221.1, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,704 ns/iteration (no available competitor) + +218.6 + +213.2 + +3/3 + +1704 ns + +Both + +- + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 217.6, p01 215.1, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,719 ns/iteration (no available competitor) + +217.4 + +213.3 + +3/3 + +1719 ns + +Both + +- + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 226.8 bits +p01: 207.4 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.1, p01 207.4, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,724 ns/iteration (no available competitor) + +226.8 + +207.0 + +2/2 + +1724 ns + +Both + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 881.9 ns/iteration (no available competitor) + +222.3 + +202.9 + +3/3 + +882 ns + +Both + +✓ + +- + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 881.7 ns/iteration (no available competitor) + +226.8 + +208.7 + +3/3 + +882 ns + +Both + +- + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,081 ns/iteration (no available competitor) + +- + +- + +- + +1081 ns + +- + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,144 ns/iteration (no available competitor) + +217.1 + +202.9 + +3/3 + +1144 ns + +Both + +✓ + +- + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,337 ns/iteration (no available competitor) + +217.9 + +214.4 + +2/2 + +1337 ns + +Both + +✓ + +- + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,348 ns/iteration (no available competitor) + +216.0 + +192.5 + +2/2 + +1348 ns + +Both + +- + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 879.9 ns/iteration (no available competitor) + +218.1 + +214.7 + +2/2 + +880 ns + +Both + +✓ + +- + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 959.4 ns/iteration (no available competitor) + +217.9 + +214.3 + +3/3 + +959 ns + +Both + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,242 ns/iteration (no available competitor) + +217.0 + +213.8 + +2/2 + +1242 ns + +Both + +✓ + +- + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,245 ns/iteration (no available competitor) + +217.5 + +214.2 + +2/2 + +1245 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,222 ns/iteration (no available competitor) + +219.1 + +214.0 + +2/2 + +1222 ns + +Both + +✓ + +- + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,613 ns/iteration (no available competitor) + +217.2 + +213.0 + +2/2 + +2613 ns + +Both + +✓ + +- + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,413 ns/iteration (no available competitor) + +217.7 + +213.7 + +2/2 + +2413 ns + +Both + +- + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,193 ns/iteration (no available competitor) + +218.3 + +213.3 + +2/2 + +2193 ns + +Both + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 8,882 ns/iteration (no available competitor) + +208.2 + +189.8 + +2/2 + +8882 ns + +Both + +- + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 8,880 ns/iteration (no available competitor) + +212.8 + +196.8 + +2/2 + +8880 ns + +Both + +✓ + +- + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 9,361 ns/iteration (no available competitor) + +209.0 + +202.5 + +1/1 + +9361 ns + +Both + +- + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 8,335 ns/iteration (no available competitor) + +211.9 + +199.2 + +1/1 + +8335 ns + +Both + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.774 ns/iteration (no available competitor) + += + += + +1/1 + +0.77 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.775 ns/iteration (no available competitor) + += + += + +1/1 + +0.77 ns + +Both + +- + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.02 ns/iteration (no available competitor) + += + += + +1/1 + +2.0 ns + +Both + +- + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.09 ns/iteration (no available competitor) + += + += + +1/1 + +2.1 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.05 ns/iteration (no available competitor) + += + += + +1/1 + +2.0 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.01 ns/iteration (no available competitor) + += + += + +1/1 + +2.0 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 19.16 ns/iteration (no available competitor) + +- + +- + +- + +19.2 ns + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 265.4 ns/iteration (no available competitor) + +- + +- + +- + +265 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 42.94 ns/iteration (no available competitor) + +- + +- + +- + +42.9 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 155.2 ns/iteration (no available competitor) + +- + +- + +- + +155 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,805 ns/iteration (no available competitor) + +- + +- + +- + +1805 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 124.0 ns/iteration (no available competitor) + +- + +- + +- + +124 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 557.2 ns/iteration (no available competitor) + +- + +- + +- + +557 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 394.9 ns/iteration (no available competitor) + +- + +- + +- + +395 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 219.4 ns/iteration (no available competitor) + +- + +- + +- + +219 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 8,662 ns/iteration (no available competitor) + +- + +- + +- + +8662 ns + +- + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,657 ns/iteration (no available competitor) + +- + +- + +- + +4657 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/windows_x86_64_MSVC_f256_overview.svg b/validation/metrics/generated/overview/windows_x86_64_MSVC_f256_overview.svg new file mode 100644 index 0000000..bb82497 --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MSVC_f256_overview.svg @@ -0,0 +1,9395 @@ + + + + +f256 metrics overview — Windows / x64 / MSVC +Accuracy is MPFR-relative; domain pass counts use FLTX release thresholds; speed is implementation ÷ FLTX. + +operation + + +bl::f256 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time + + + +qdpp (qd_real) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +mpfr_float_backend<64> + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +TLFloat (tloct) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +Arithmetic + + + + + + + +add + +fltx bl::f256 +API: bl::add +mean: 227.4 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 10.68 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.194909× + +227.4 + +215.3 + +2/2 + +10.68 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp operator+ +mean: 227.4 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 23.45 ns/iteration, speed vs FLTX 0.46× + +227.4 + +215.3 + +2/2 + +23.45 ns · 0.46× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator+ +mean: 225.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.3, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3770, seed=10322096095657499292 +subnormal: mean 245.4, p01 215.5, worst 214.9, required 190.0, margin 24.9, n=326, seed=10322096095657499292 +benchmark: 49.58 ns/iteration, speed vs FLTX 0.22× + +225.0 + +214.0 + +2/2 + +49.58 ns · 0.22× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator+ +mean: 253.1 bits +p01: 237.3 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 251.8, p01 237.3, worst 237.0, required 190.0, margin 47.0, n=3770, seed=10322096095657499292 +subnormal: mean 268.5, p01 239.2, worst 237.9, required 190.0, margin 47.9, n=326, seed=10322096095657499292 +benchmark: 407.9 ns/iteration, speed vs FLTX 0.03× + +253.1 + +237.0 + +2/2 + +407.9 ns · 0.03× + +No + +✗ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 227.4 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.1, p01 215.6, worst 215.2, required 190.0, margin 25.2, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 10.66 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.363657× + +227.4 + +215.2 + +2/2 + +10.66 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp operator- +mean: 227.4 bits +p01: 215.6 bits +worst: 215.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 226.1, p01 215.6, worst 215.0, required 190.0, margin 25.0, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 25.21 ns/iteration, speed vs FLTX 0.42× + +227.4 + +215.0 + +2/2 + +25.21 ns · 0.42× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator- +mean: 225.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.5, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3791, seed=10322096095657499292 +subnormal: mean 245.9, p01 246.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 49.46 ns/iteration, speed vs FLTX 0.22× + +225.2 + +214.0 + +2/2 + +49.46 ns · 0.22× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator- +mean: 253.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 252.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=3791, seed=10322096095657499292 +subnormal: mean 268.9, p01 269.0, worst 237.7, required 190.0, margin 47.7, n=305, seed=10322096095657499292 +benchmark: 407.1 ns/iteration, speed vs FLTX 0.03× + +253.3 + +237.0 + +2/2 + +407.1 ns · 0.03× + +No + +✗ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 18.81 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.039385× + +220.0 + +215.2 + +2/2 + +18.81 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp operator* +mean: 220.0 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 19.56 ns/iteration, speed vs FLTX 0.96× + +220.0 + +215.2 + +2/2 + +19.56 ns · 0.96× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator* +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4000, seed=10322096095657499292 +subnormal: mean 217.3, p01 214.3, worst 214.3, required 190.0, margin 24.3, n=100, seed=10322096095657499292 +benchmark: 64.52 ns/iteration, speed vs FLTX 0.29× + +216.0 + +214.0 + +2/2 + +64.52 ns · 0.29× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator* +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4000, seed=10322096095657499292 +subnormal: mean 240.2, p01 237.1, worst 237.1, required 190.0, margin 47.1, n=100, seed=10322096095657499292 +benchmark: 355.1 ns/iteration, speed vs FLTX 0.05× + +239.0 + +237.0 + +2/2 + +355.1 ns · 0.05× + +No + +✗ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 2/2 +minimum threshold margin: 24.8 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 219.4, p01 215.4, worst 215.4, required 190.0, margin 25.4, n=55, seed=10322096095657499292 +benchmark: 80.73 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.462772× + +219.2 + +214.8 + +2/2 + +80.73 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp operator/ +mean: 218.7 bits +p01: 173.3 bits +worst: 173.3 bits +domains: 1/2 +minimum threshold margin: -16.7 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 219.2, p01 214.8, worst 214.0, required 190.0, margin 24.0, n=4045, seed=10322096095657499292 +subnormal: mean 180.3, p01 173.3, worst 173.3, required 190.0, margin -16.7, n=55, seed=10322096095657499292 +benchmark: 265.4 ns/iteration, speed vs FLTX 0.30× + +218.7 + +173.3 + +1/2 + +265.4 ns · 0.30× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator/ +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4045, seed=10322096095657499292 +subnormal: mean 218.2, p01 214.2, worst 214.2, required 190.0, margin 24.2, n=55, seed=10322096095657499292 +benchmark: 118.1 ns/iteration, speed vs FLTX 0.68× + +216.0 + +214.0 + +2/2 + +118.1 ns · 0.68× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator/ +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4045, seed=10322096095657499292 +subnormal: mean 241.4, p01 237.2, worst 237.2, required 190.0, margin 47.2, n=55, seed=10322096095657499292 +benchmark: 723.7 ns/iteration, speed vs FLTX 0.11× + +239.0 + +237.0 + +2/2 + +723.7 ns · 0.11× + +No + +✗ + + + + +IO + + + + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 346.8 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.41051× + +220.4 + +217.0 + +2/2 + +346.8 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp to_string +mean: 218.8 bits +p01: 211.1 bits +worst: 209.1 bits +domains: 2/2 +minimum threshold margin: 19.1 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 211.1, worst 209.1, required 190.0, margin 19.1, n=4096, seed=10322096095657499357 +benchmark: 3,918 ns/iteration, speed vs FLTX 0.09× + +218.8 + +209.1 + +2/2 + +3,918 ns · 0.09× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost number::str +mean: 220.3 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.2, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 489.2 ns/iteration, speed vs FLTX 0.71× + +220.3 + +217.0 + +2/2 + +489.2 ns · 0.71× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::to_string +mean: 216.9 bits +p01: 214.0 bits +worst: 213.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.1, p01 214.1, worst 213.6, required 190.0, margin 23.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 216.7, p01 214.0, worst 213.6, required 190.0, margin 23.6, n=4096, seed=10322096095657499357 +benchmark: 45,011 ns/iteration, speed vs FLTX 0.01× + +216.9 + +213.6 + +2/2 + +45,011 ns · 0.01× + +Both + +✓ + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 316.1 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 12.365679× + +220.4 + +217.0 + +2/2 + +316.1 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp write +mean: 218.8 bits +p01: 211.1 bits +worst: 209.1 bits +domains: 2/2 +minimum threshold margin: 19.1 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 211.1, worst 209.1, required 190.0, margin 19.1, n=4096, seed=10322096095657499357 +benchmark: 3,909 ns/iteration, speed vs FLTX 0.08× + +218.8 + +209.1 + +2/2 + +3,909 ns · 0.08× + +Both + +✗ + + +mpfr64: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 415.5 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 0.893298× + +219.7 + +212.0 + +2/2 + +415.5 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp read +mean: 200.9 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -212.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 213.4, worst 212.6, required 212.0, margin 0.6, n=4097, seed=10322096095657499311 +wide_exponent: mean 185.9, p01 0.0, worst 0.0, required 212.0, margin -212.0, n=4098, seed=10322096095657499308 +benchmark: 3,518 ns/iteration, speed vs FLTX 0.12× + +200.9 + +0.0 + +1/2 + +3,518 ns · 0.12× + +NaN + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost string constructor +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 2.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4098, seed=10322096095657499308 +benchmark: 371.1 ns/iteration, speed vs FLTX 1.12× + +216.0 + +214.0 + +2/2 + +371.1 ns · 1.12× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat string constructor +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 212.0, margin 25.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 238.9, p01 237.2, worst 237.1, required 212.0, margin 25.1, n=4098, seed=10322096095657499308 +benchmark: 38,309 ns/iteration, speed vs FLTX 0.01× + +238.9 + +237.0 + +2/2 + +38,309 ns · 0.01× + +No + +✗ + + + + +Rounding + + + + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 4.90 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.450613× + +exact + +exact + +1/1 + +4.90 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.21 ns/iteration, speed vs FLTX 2.22× + +exact + +exact + +1/1 + +2.21 ns · 2.22× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 44.06 ns/iteration, speed vs FLTX 0.11× + +exact + +exact + +1/1 + +44.06 ns · 0.11× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 159.7 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +159.7 ns · 0.03× + +No + +✗ + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 4.88 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.458782× + +exact + +exact + +1/1 + +4.88 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.24 ns/iteration, speed vs FLTX 2.18× + +exact + +exact + +1/1 + +2.24 ns · 2.18× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 43.53 ns/iteration, speed vs FLTX 0.11× + +exact + +exact + +1/1 + +43.53 ns · 0.11× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 159.0 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +159.0 ns · 0.03× + +No + +✗ + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 6.77 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.879069× + +exact + +exact + +1/1 + +6.77 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp aint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 5.96 ns/iteration, speed vs FLTX 1.14× + +exact + +exact + +1/1 + +5.96 ns · 1.14× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 42.58 ns/iteration, speed vs FLTX 0.16× + +exact + +exact + +1/1 + +42.58 ns · 0.16× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 144.4 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +1/1 + +144.4 ns · 0.05× + +No + +✗ + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 12.89 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.432661× + +exact + +exact + +1/1 + +12.89 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp round +mean: 229.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/1 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 229.7, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4110, seed=10322096095657499382 +benchmark: 5.58 ns/iteration, speed vs FLTX 2.31× + +229.7 + +0.0 + +0/1 + +5.58 ns · 2.31× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 83.55 ns/iteration, speed vs FLTX 0.15× + +exact + +exact + +1/1 + +83.55 ns · 0.15× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 175.6 ns/iteration, speed vs FLTX 0.07× + +exact + +exact + +1/1 + +175.6 ns · 0.07× + +No + +✗ + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 9.12 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 21.888671× + +exact + +exact + +1/1 + +9.12 ns + +Both + +✓ + + +qdpp: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 199.5 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +1/1 + +199.5 ns · 0.05× + +No + +✗ + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 7.21 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 17.319193× + +exact + +exact + +1/1 + +7.21 ns + +- + +- + + +qdpp: lround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 124.8 ns/iteration, speed vs FLTX 0.06× + +exact + +exact + +1/1 + +124.8 ns · 0.06× + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 6.78 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 31.909862× + +exact + +exact + +1/1 + +6.78 ns + +- + +- + + +qdpp: llround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 216.2 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +216.2 ns · 0.03× + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 129.3 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +129.3 ns + +Both + +✓ + + +qdpp: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 194.2 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +194.2 ns + +Both + +✓ + + +qdpp: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 67.96 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.894876× + +244.0 + +217.7 + +3/3 + +67.96 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp fmod +mean: 199.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -190.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 242.3, p01 211.1, worst 205.5, required 190.0, margin 15.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 123.2, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4, seed=10322096095657499383 +wide_exponent: mean 157.4, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4096, seed=10322096095657499357 +benchmark: 330.5 ns/iteration, speed vs FLTX 0.21× + +199.8 + +0.0 + +1/3 + +330.5 ns · 0.21× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 196.7 ns/iteration, speed vs FLTX 0.35× + +exact + +exact + +3/3 + +196.7 ns · 0.35× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1,572 ns/iteration, speed vs FLTX 0.04× + +exact + +exact + +3/3 + +1,572 ns · 0.04× + +No + +✗ + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 98.27 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.401096× + +exact + +exact + +1/1 + +98.27 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp drem +mean: 241.9 bits +p01: 210.4 bits +worst: 205.5 bits +domains: 1/1 +minimum threshold margin: 15.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 241.9, p01 210.4, worst 205.5, required 190.0, margin 15.5, n=4099, seed=10322096095657499356 +benchmark: 333.4 ns/iteration, speed vs FLTX 0.29× + +241.9 + +205.5 + +1/1 + +333.4 ns · 0.29× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 236.0 ns/iteration, speed vs FLTX 0.42× + +exact + +exact + +1/1 + +236.0 ns · 0.42× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1,715 ns/iteration, speed vs FLTX 0.06× + +exact + +exact + +1/1 + +1,715 ns · 0.06× + +No + +✗ + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 97.31 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.719027× + +exact + +exact + +1/1 + +97.31 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp divrem +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 332.7 ns/iteration, speed vs FLTX 0.29× + +exact + +exact + +1/1 + +332.7 ns · 0.29× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 264.6 ns/iteration, speed vs FLTX 0.37× + +exact + +exact + +1/1 + +264.6 ns · 0.37× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1,752 ns/iteration, speed vs FLTX 0.06× + +exact + +exact + +1/1 + +1,752 ns · 0.06× + +No + +✗ + + + + +Float Utils + + + + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.64 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.745391× + +exact + +exact + +2/2 + +2.64 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.97 ns/iteration, speed vs FLTX 1.34× + +exact + +exact + +2/2 + +1.97 ns · 1.34× + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 38.55 ns/iteration, speed vs FLTX 0.07× + +exact + +exact + +2/2 + +38.55 ns · 0.07× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.96 ns/iteration, speed vs FLTX 0.44× + +exact + +exact + +2/2 + +5.96 ns · 0.44× + +No + +✓ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.65 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.740335× + +exact + +exact + +1/1 + +2.65 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.96 ns/iteration, speed vs FLTX 1.35× + +exact + +exact + +1/1 + +1.96 ns · 1.35× + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 38.42 ns/iteration, speed vs FLTX 0.07× + +exact + +exact + +1/1 + +38.42 ns · 0.07× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 5.94 ns/iteration, speed vs FLTX 0.45× + +exact + +exact + +1/1 + +5.94 ns · 0.45× + +No + +✓ + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 24.56 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.427525× + +229.7 + +215.1 + +3/3 + +24.56 ns + +Both + +✗ + + +qdpp: fma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fma +mean: 228.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 222.8, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 84.18 ns/iteration, speed vs FLTX 0.29× + +228.3 + +214.0 + +3/3 + +84.18 ns · 0.29× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fma +mean: 251.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 245.2, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 616.7 ns/iteration, speed vs FLTX 0.04× + +251.1 + +237.0 + +3/3 + +616.7 ns · 0.04× + +No + +✗ + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 74.50 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 3.443704× + +217.9 + +214.6 + +2/2 + +74.50 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp inv +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 256.5 ns/iteration, speed vs FLTX 0.29× + +217.9 + +214.6 + +2/2 + +256.5 ns · 0.29× + +NaN + +✗ + + +mpfr64: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.41 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.491741× + +exact + +exact + +2/2 + +3.41 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp min +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.67 ns/iteration, speed vs FLTX 2.03× + +exact + +exact + +2/2 + +1.67 ns · 2.03× + +Inf + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 45.63 ns/iteration, speed vs FLTX 0.07× + +exact + +exact + +2/2 + +45.63 ns · 0.07× + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 321.4 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +2/2 + +321.4 ns · 0.01× + +No + +✗ + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.65 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.393201× + +exact + +exact + +2/2 + +3.65 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp max +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.44 ns/iteration, speed vs FLTX 2.54× + +exact + +exact + +2/2 + +1.44 ns · 2.54× + +Inf + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 45.26 ns/iteration, speed vs FLTX 0.08× + +exact + +exact + +2/2 + +45.26 ns · 0.08× + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 321.4 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +2/2 + +321.4 ns · 0.01× + +No + +✗ + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 8.22 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 5.328306× + +exact + +exact + +2/2 + +8.22 ns + +Both + +✓ + + +qdpp: fdim is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fdim +mean: 243.7 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 241.3, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +benchmark: 43.81 ns/iteration, speed vs FLTX 0.19× + +243.7 + +214.0 + +2/2 + +43.81 ns · 0.19× + +No + +✓ + + +TLFloat Octuple +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 819.1 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +2/2 + +819.1 ns · 0.01× + +No + +✓ + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.863 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 14.151467× + +exact + +exact + +1/1 + +0.863 ns + +Both + +✓ + + +qdpp: copysign is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 67.52 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +67.52 ns · 0.01× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 12.21 ns/iteration, speed vs FLTX 0.07× + +exact + +exact + +1/1 + +12.21 ns · 0.07× + +No + +✗ + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.94 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.188365× + +exact + +exact + +1/1 + +3.94 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 8.62 ns/iteration, speed vs FLTX 0.46× + +exact + +exact + +1/1 + +8.62 ns · 0.46× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 39.77 ns/iteration, speed vs FLTX 0.10× + +exact + +exact + +1/1 + +39.77 ns · 0.10× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 188.1 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +1/1 + +188.1 ns · 0.02× + +No + +✗ + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.95 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.177719× + +exact + +exact + +1/1 + +3.95 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 8.60 ns/iteration, speed vs FLTX 0.46× + +exact + +exact + +1/1 + +8.60 ns · 0.46× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 40.13 ns/iteration, speed vs FLTX 0.10× + +exact + +exact + +1/1 + +40.13 ns · 0.10× + +Both + +✓ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.94 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.183372× + +exact + +exact + +1/1 + +3.94 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 8.61 ns/iteration, speed vs FLTX 0.46× + +exact + +exact + +1/1 + +8.61 ns · 0.46× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 40.11 ns/iteration, speed vs FLTX 0.10× + +exact + +exact + +1/1 + +40.11 ns · 0.10× + +Both + +✓ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 7.28 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 9.282272× + +exact + +exact + +2/2 + +7.28 ns + +Both + +✓ + + +qdpp: frexp is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 67.57 ns/iteration, speed vs FLTX 0.11× + +exact + +exact + +2/2 + +67.57 ns · 0.11× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 652.4 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +2/2 + +652.4 ns · 0.01× + +No + +✗ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.39 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 9.663323× + +exact + +exact + +2/2 + +18.39 ns + +Both + +✓ + + +qdpp: modf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 177.7 ns/iteration, speed vs FLTX 0.10× + +exact + +exact + +2/2 + +177.7 ns · 0.10× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 845.2 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +2/2 + +845.2 ns · 0.02× + +No + +✗ + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.62 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 20.719674× + +exact + +exact + +2/2 + +1.62 ns + +- + +- + + +qdpp: ilogb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 33.59 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +2/2 + +33.59 ns · 0.05× + +- + +- + + +TLFloat Octuple +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 103.4 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +2/2 + +103.4 ns · 0.02× + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.24 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 33.823758× + +exact + +exact + +2/2 + +2.24 ns + +Both + +- + + +qdpp: logb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 75.67 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +2/2 + +75.67 ns · 0.03× + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 6.87 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 73.451429× + +- + +- + +- + +6.87 ns + +- + +- + + +qdpp: nextafter is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter +benchmark: 504.4 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +504.4 ns · 0.01× + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter +benchmark: 558.1 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +558.1 ns · 0.01× + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 6.86 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 74.021606× + +- + +- + +- + +6.86 ns + +- + +- + + +qdpp: nexttoward is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter (same type) +benchmark: 507.9 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +507.9 ns · 0.01× + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter (same type) +benchmark: 558.1 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +558.1 ns · 0.01× + +- + +- + + + + +Roots & powers + + + + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 18.25 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.685495× + +220.1 + +215.3 + +2/2 + +18.25 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sqr +mean: 216.7 bits +p01: 215.0 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 24.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.8, p01 215.0, worst 214.7, required 190.0, margin 24.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 216.7, p01 215.1, worst 214.8, required 190.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 12.51 ns/iteration, speed vs FLTX 1.46× + +216.7 + +214.7 + +2/2 + +12.51 ns · 1.46× + +Both + +✓ + + +mpfr64: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.9 bits +p01: 211.3 bits +worst: 209.6 bits +domains: 4/4 +minimum threshold margin: 19.6 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 218.3, p01 211.5, worst 210.0, required 190.0, margin 20.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 123.0 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.108334× + +217.9 + +209.6 + +4/4 + +123.0 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sqrt +mean: 152.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/4 +minimum threshold margin: -190.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 164.1, p01 54.9, worst 54.3, required 190.0, margin -135.7, n=4096, seed=10322096095657499354 +near_one: mean 217.6, p01 214.0, worst 212.6, required 190.0, margin 22.6, n=4099, seed=10322096095657499359 +subnormal: mean 10.8, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 216.9, p01 187.9, worst 175.0, required 190.0, margin -15.0, n=4096, seed=10322096095657499357 +benchmark: 442.3 ns/iteration, speed vs FLTX 0.28× + +152.3 + +0.0 + +1/4 + +442.3 ns · 0.28× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sqrt +mean: 216.2 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 4/4 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 216.2, p01 214.4, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499359 +subnormal: mean 216.8, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 136.3 ns/iteration, speed vs FLTX 0.90× + +216.2 + +214.0 + +4/4 + +136.3 ns · 0.90× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sqrt +mean: 239.2 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 4/4 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 239.0, p01 237.4, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499359 +subnormal: mean 239.7, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 239.0, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 1,343 ns/iteration, speed vs FLTX 0.09× + +239.2 + +237.0 + +4/4 + +1,343 ns · 0.09× + +No + +✗ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 215.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 344.0 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.238672× + +219.3 + +215.0 + +2/2 + +344.0 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp nroot +mean: 217.2 bits +p01: 194.5 bits +worst: 177.1 bits +domains: 1/2 +minimum threshold margin: -12.9 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.4, p01 213.9, worst 213.0, required 190.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.0, p01 194.5, worst 177.1, required 190.0, margin -12.9, n=4096, seed=10322096095657499357 +benchmark: 1,148 ns/iteration, speed vs FLTX 0.30× + +217.2 + +177.1 + +1/2 + +1,148 ns · 0.30× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cbrt +mean: 216.0 bits +p01: 214.2 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.1, p01 214.3, worst 214.1, required 190.0, margin 24.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.1, required 190.0, margin 24.1, n=4096, seed=10322096095657499357 +benchmark: 426.1 ns/iteration, speed vs FLTX 0.81× + +216.0 + +214.1 + +2/2 + +426.1 ns · 0.81× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::cbrt +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 239.2, p01 237.3, worst 237.1, required 190.0, margin 47.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499357 +benchmark: 8,045 ns/iteration, speed vs FLTX 0.04× + +239.0 + +237.0 + +2/2 + +8,045 ns · 0.04× + +No + +✗ + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 172.3 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.676645× + +229.9 + +213.9 + +2/2 + +172.3 ns + +Both + +✓ + + +qdpp: hypot is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::hypot +mean: 228.7 bits +p01: 213.2 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 215.3, p01 213.2, worst 212.9, required 190.0, margin 22.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 242.0, p01 213.6, worst 212.9, required 190.0, margin 22.9, n=4096, seed=10322096095657499357 +benchmark: 461.2 ns/iteration, speed vs FLTX 0.37× + +228.7 + +212.9 + +2/2 + +461.2 ns · 0.37× + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::hypot +mean: 251.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 239.0, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 264.8, p01 237.6, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 1,319 ns/iteration, speed vs FLTX 0.13× + +251.9 + +237.0 + +2/2 + +1,319 ns · 0.13× + +No + +✓ + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,498 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.215167× + +216.8 + +211.1 + +2/2 + +2,498 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp pow +mean: 216.4 bits +p01: 211.7 bits +worst: 210.6 bits +domains: 2/2 +minimum threshold margin: 30.6 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 215.1, p01 211.7, worst 210.6, required 180.0, margin 30.6, n=4099, seed=10322096095657499356 +near_one: mean 217.6, p01 214.5, worst 213.9, required 180.0, margin 33.9, n=4099, seed=10322096095657499359 +benchmark: 6,759 ns/iteration, speed vs FLTX 0.37× + +216.4 + +210.6 + +2/2 + +6,759 ns · 0.37× + +No + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,036 ns/iteration, speed vs FLTX 0.82× + +215.9 + +214.0 + +2/2 + +3,036 ns · 0.82× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::pow +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 63,641 ns/iteration, speed vs FLTX 0.04× + +238.9 + +237.0 + +2/2 + +63,641 ns · 0.04× + +No + +✗ + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 111.1 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.034187× + +217.2 + +213.7 + +2/2 + +111.1 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp npwr +mean: 215.0 bits +p01: 212.8 bits +worst: 212.1 bits +domains: 2/2 +minimum threshold margin: 22.1 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 215.1, p01 212.8, worst 212.1, required 190.0, margin 22.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.0, p01 212.8, worst 212.1, required 190.0, margin 22.1, n=4096, seed=10322096095657499357 +benchmark: 114.9 ns/iteration, speed vs FLTX 0.97× + +215.0 + +212.1 + +2/2 + +114.9 ns · 0.97× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow(value, int) +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 171.8 ns/iteration, speed vs FLTX 0.65× + +216.0 + +214.0 + +2/2 + +171.8 ns · 0.65× + +Both + +✓ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.8 bits +p01: 210.6 bits +worst: 209.2 bits +domains: 2/2 +minimum threshold margin: 29.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.1, p01 210.6, worst 209.2, required 180.0, margin 29.2, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 980.4 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.28385× + +216.8 + +209.2 + +2/2 + +980.4 ns + +Both + +- + + +qdpp qd_real +API: qdpp exp +mean: 216.6 bits +p01: 210.5 bits +worst: 209.2 bits +domains: 2/2 +minimum threshold margin: 29.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 210.5, worst 209.2, required 180.0, margin 29.2, n=4099, seed=10322096095657499291 +moderate: mean 217.2, p01 214.7, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,982 ns/iteration, speed vs FLTX 0.49× + +216.6 + +209.2 + +2/2 + +1,982 ns · 0.49× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,259 ns/iteration, speed vs FLTX 0.78× + +215.9 + +214.0 + +2/2 + +1,259 ns · 0.78× + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 11,231 ns/iteration, speed vs FLTX 0.09× + +239.0 + +237.0 + +2/2 + +11,231 ns · 0.09× + +No + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 831.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.784668× + +218.0 + +214.2 + +2/2 + +831.2 ns + +Both + +- + + +qdpp: exp2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp2 +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,483 ns/iteration, speed vs FLTX 0.56× + +216.0 + +214.0 + +2/2 + +1,483 ns · 0.56× + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp2 +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +benchmark: 31,826 ns/iteration, speed vs FLTX 0.03× + +238.9 + +237.0 + +2/2 + +31,826 ns · 0.03× + +No + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 227.2 bits +p01: 207.5 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.0, p01 207.5, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 987.1 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.413845× + +227.2 + +207.0 + +2/2 + +987.1 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp expm1 +mean: 226.8 bits +p01: 203.4 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 235.5, p01 203.4, worst 203.0, required 180.0, margin 23.0, n=4098, seed=10322096095657499336 +moderate: mean 218.1, p01 214.4, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499356 +benchmark: 1,994 ns/iteration, speed vs FLTX 0.50× + +226.8 + +0.0 + +1/2 + +1,994 ns · 0.50× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::expm1 +mean: 227.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,396 ns/iteration, speed vs FLTX 0.71× + +227.5 + +214.0 + +2/2 + +1,396 ns · 0.71× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::expm1 +mean: 250.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4098, seed=10322096095657499336 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 12,076 ns/iteration, speed vs FLTX 0.08× + +250.1 + +237.0 + +2/2 + +12,076 ns · 0.08× + +No + +✗ + + + + +Logarithms + + + + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.8 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.2, p01 215.3, worst 215.0, required 180.0, margin 35.0, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,663 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.433593× + +217.8 + +213.3 + +3/3 + +1,663 ns + +Both + +- + + +qdpp qd_real +API: qdpp log +mean: 205.3 bits +p01: 62.8 bits +worst: 62.1 bits +domains: 2/3 +minimum threshold margin: -117.9 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 180.4, p01 62.8, worst 62.1, required 180.0, margin -117.9, n=4096, seed=10322096095657499354 +near_one: mean 216.1, p01 213.6, worst 212.8, required 180.0, margin 32.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 219.3, p01 199.1, worst 184.2, required 180.0, margin 4.2, n=4096, seed=10322096095657499357 +benchmark: 6,292 ns/iteration, speed vs FLTX 0.26× + +205.3 + +62.1 + +2/3 + +6,292 ns · 0.26× + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.7, p01 214.4, worst 214.3, required 180.0, margin 34.3, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 2,384 ns/iteration, speed vs FLTX 0.70× + +215.9 + +214.0 + +3/3 + +2,384 ns · 0.70× + +Both + +- + + +TLFloat Octuple +API: tlfloat::log +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.8, p01 237.3, worst 237.3, required 180.0, margin 57.3, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 14,826 ns/iteration, speed vs FLTX 0.11× + +238.9 + +237.0 + +3/3 + +14,826 ns · 0.11× + +No + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 221.1, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,673 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.569112× + +218.6 + +213.2 + +3/3 + +1,673 ns + +Both + +- + + +qdpp: log2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log2 +mean: 217.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 220.0, p01 214.9, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 2,625 ns/iteration, speed vs FLTX 0.64× + +217.3 + +214.0 + +3/3 + +2,625 ns · 0.64× + +Both + +- + + +TLFloat Octuple +API: tlfloat::log2 +mean: 240.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 243.0, p01 237.9, worst 237.8, required 180.0, margin 57.8, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 14,806 ns/iteration, speed vs FLTX 0.11× + +240.3 + +237.0 + +3/3 + +14,806 ns · 0.11× + +No + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 217.6, p01 215.1, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,687 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.721102× + +217.4 + +213.3 + +3/3 + +1,687 ns + +Both + +- + + +qdpp qd_real +API: qdpp log10 +mean: 203.2 bits +p01: 62.8 bits +worst: 62.1 bits +domains: 2/3 +minimum threshold margin: -117.9 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 177.7, p01 62.8, worst 62.1, required 180.0, margin -117.9, n=4096, seed=10322096095657499354 +near_one: mean 215.7, p01 213.3, worst 212.7, required 180.0, margin 32.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.1, p01 199.1, worst 184.2, required 180.0, margin 4.2, n=4096, seed=10322096095657499357 +benchmark: 6,677 ns/iteration, speed vs FLTX 0.25× + +203.2 + +62.1 + +2/3 + +6,677 ns · 0.25× + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log10 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.8, p01 214.1, worst 214.1, required 180.0, margin 34.1, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 4,590 ns/iteration, speed vs FLTX 0.37× + +215.9 + +214.0 + +3/3 + +4,590 ns · 0.37× + +Both + +- + + +TLFloat Octuple +API: tlfloat::log10 +mean: 238.8 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.6, p01 237.1, worst 237.1, required 180.0, margin 57.1, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 14,942 ns/iteration, speed vs FLTX 0.11× + +238.8 + +237.0 + +3/3 + +14,942 ns · 0.11× + +No + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 226.8 bits +p01: 207.4 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.1, p01 207.4, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,692 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.444635× + +226.8 + +207.0 + +2/2 + +1,692 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp log1p +mean: 226.4 bits +p01: 203.4 bits +worst: 203.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 235.6, p01 203.4, worst 203.0, required 180.0, margin 23.0, n=4098, seed=10322096095657499336 +moderate: mean 217.2, p01 214.1, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 6,247 ns/iteration, speed vs FLTX 0.27× + +226.4 + +203.0 + +2/2 + +6,247 ns · 0.27× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log1p +mean: 227.4 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 2,444 ns/iteration, speed vs FLTX 0.69× + +227.4 + +214.0 + +2/2 + +2,444 ns · 0.69× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::log1p +mean: 250.1 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.4, worst 237.0, required 180.0, margin 57.0, n=4098, seed=10322096095657499336 +moderate: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 18,047 ns/iteration, speed vs FLTX 0.09× + +250.1 + +237.0 + +2/2 + +18,047 ns · 0.09× + +No + +✗ + + + + +Trigonometric + + + + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 883.7 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.912385× + +222.3 + +202.9 + +3/3 + +883.7 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sin +mean: 142.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 88.2, p01 40.3, worst 0.0, required 180.0, margin -180.0, n=4104, seed=10322096095657499353 +moderate: mean 215.8, p01 210.4, worst 206.1, required 180.0, margin 26.1, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 125.3, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4315, seed=10322096095657499369 +benchmark: 1,793 ns/iteration, speed vs FLTX 0.49× + +142.8 + +0.0 + +1/3 + +1,793 ns · 0.49× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sin +mean: 218.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.3, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 222.9, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 1,690 ns/iteration, speed vs FLTX 0.52× + +218.5 + +214.0 + +3/3 + +1,690 ns · 0.52× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sin +mean: 241.2 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 245.1, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 13,354 ns/iteration, speed vs FLTX 0.07× + +241.2 + +237.0 + +3/3 + +13,354 ns · 0.07× + +No + +✗ + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 882.5 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.477041× + +226.8 + +208.7 + +3/3 + +882.5 ns + +Both + +- + + +qdpp qd_real +API: qdpp cos +mean: 161.9 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 171.1, p01 59.1, worst 0.0, required 180.0, margin -180.0, n=4104, seed=10322096095657499353 +moderate: mean 215.7, p01 210.1, worst 205.0, required 180.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 102.2, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4315, seed=10322096095657499369 +benchmark: 1,802 ns/iteration, speed vs FLTX 0.49× + +161.9 + +0.0 + +1/3 + +1,802 ns · 0.49× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cos +mean: 219.4 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 220.7, p01 214.5, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 221.2, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 1,303 ns/iteration, speed vs FLTX 0.68× + +219.4 + +214.0 + +3/3 + +1,303 ns · 0.68× + +Both + +- + + +TLFloat Octuple +API: tlfloat::cos +mean: 241.7 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 242.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 243.4, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 13,347 ns/iteration, speed vs FLTX 0.07× + +241.7 + +237.0 + +3/3 + +13,347 ns · 0.07× + +No + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,176 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.646261× + +- + +- + +- + +1,176 ns + +- + +- + + +qdpp qd_real +API: qdpp sincos +benchmark: 1,935 ns/iteration, speed vs FLTX 0.61× + +- + +- + +- + +1,935 ns · 0.61× + +- + +- + + +mpfr64: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::sincos +benchmark: 26,867 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +26,867 ns · 0.04× + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,114 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.698698× + +217.1 + +202.9 + +3/3 + +1,114 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp tan +mean: 111.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -170.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 86.8, p01 40.3, worst 0.0, required 170.0, margin -170.0, n=4104, seed=10322096095657499353 +moderate: mean 214.8, p01 209.4, worst 205.0, required 170.0, margin 35.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 36.9, p01 0.0, worst 0.0, required 170.0, margin -170.0, n=4315, seed=10322096095657499369 +benchmark: 2,204 ns/iteration, speed vs FLTX 0.51× + +111.5 + +0.0 + +1/3 + +2,204 ns · 0.51× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tan +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 44.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.1, p01 214.1, worst 214.0, required 170.0, margin 44.0, n=4104, seed=10322096095657499353 +moderate: mean 216.0, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 215.9, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4315, seed=10322096095657499369 +benchmark: 1,892 ns/iteration, speed vs FLTX 0.59× + +216.0 + +214.0 + +3/3 + +1,892 ns · 0.59× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 67.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 238.9, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4104, seed=10322096095657499353 +moderate: mean 239.0, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 238.9, p01 237.2, worst 237.1, required 170.0, margin 67.1, n=4315, seed=10322096095657499369 +benchmark: 17,300 ns/iteration, speed vs FLTX 0.06× + +239.0 + +237.0 + +3/3 + +17,300 ns · 0.06× + +No + +✗ + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,334 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 4.548031× + +217.9 + +214.4 + +2/2 + +1,334 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp asin +mean: 217.2 bits +p01: 212.9 bits +worst: 212.3 bits +domains: 2/2 +minimum threshold margin: 32.3 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 216.0, p01 212.9, worst 212.3, required 180.0, margin 32.3, n=4099, seed=10322096095657499356 +benchmark: 8,279 ns/iteration, speed vs FLTX 0.16× + +217.2 + +212.3 + +2/2 + +8,279 ns · 0.16× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asin +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.1, p01 214.7, worst 214.7, required 180.0, margin 34.7, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 6,068 ns/iteration, speed vs FLTX 0.22× + +216.0 + +214.0 + +2/2 + +6,068 ns · 0.22× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asin +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.1, p01 237.7, worst 237.7, required 180.0, margin 57.7, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 22,050 ns/iteration, speed vs FLTX 0.06× + +239.0 + +237.0 + +2/2 + +22,050 ns · 0.06× + +No + +✗ + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,348 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 4.650844× + +216.0 + +192.5 + +2/2 + +1,348 ns + +Both + +- + + +qdpp qd_real +API: qdpp acos +mean: 217.3 bits +p01: 213.6 bits +worst: 212.5 bits +domains: 2/2 +minimum threshold margin: 32.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.4, p01 214.0, worst 213.0, required 180.0, margin 33.0, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 213.6, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +benchmark: 8,330 ns/iteration, speed vs FLTX 0.16× + +217.3 + +212.5 + +2/2 + +8,330 ns · 0.16× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acos +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 6,267 ns/iteration, speed vs FLTX 0.22× + +215.9 + +214.0 + +2/2 + +6,267 ns · 0.22× + +Both + +- + + +TLFloat Octuple +API: tlfloat::acos +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4105, seed=10322096095657499355 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 22,167 ns/iteration, speed vs FLTX 0.06× + +238.9 + +237.0 + +2/2 + +22,167 ns · 0.06× + +No + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 880.1 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.265334× + +218.1 + +214.7 + +2/2 + +880.1 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atan +mean: 216.7 bits +p01: 213.1 bits +worst: 212.4 bits +domains: 2/2 +minimum threshold margin: 32.4 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.5, p01 213.8, worst 212.6, required 180.0, margin 32.6, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 213.1, worst 212.4, required 180.0, margin 32.4, n=4099, seed=10322096095657499359 +benchmark: 6,179 ns/iteration, speed vs FLTX 0.14× + +216.7 + +212.4 + +2/2 + +6,179 ns · 0.14× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,994 ns/iteration, speed vs FLTX 0.44× + +216.0 + +214.0 + +2/2 + +1,994 ns · 0.44× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 20,589 ns/iteration, speed vs FLTX 0.04× + +239.0 + +237.0 + +2/2 + +20,589 ns · 0.04× + +Inf + +✗ + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 940.4 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.177171× + +217.9 + +214.3 + +3/3 + +940.4 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atan2 +mean: 216.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 0.0, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=8, seed=10322096095657499351 +moderate: mean 217.0, p01 213.4, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 213.0, worst 211.8, required 180.0, margin 31.8, n=4099, seed=10322096095657499359 +benchmark: 6,096 ns/iteration, speed vs FLTX 0.15× + +216.3 + +0.0 + +2/3 + +6,096 ns · 0.15× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan2 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 215.3, p01 215.2, worst 215.2, required 180.0, margin 35.2, n=8, seed=10322096095657499351 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 2,048 ns/iteration, speed vs FLTX 0.46× + +215.9 + +214.0 + +3/3 + +2,048 ns · 0.46× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan2 +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 240.6, p01 237.8, worst 237.8, required 180.0, margin 57.8, n=8, seed=10322096095657499351 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 20,739 ns/iteration, speed vs FLTX 0.05× + +239.0 + +237.0 + +3/3 + +20,739 ns · 0.05× + +Inf + +✗ + + + + +Hyperbolic + + + + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,213 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.245936× + +217.0 + +213.8 + +2/2 + +1,213 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sinh +mean: 216.8 bits +p01: 214.2 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 32.9 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.8, p01 214.2, worst 212.9, required 180.0, margin 32.9, n=4099, seed=10322096095657499359 +benchmark: 2,328 ns/iteration, speed vs FLTX 0.52× + +216.8 + +212.9 + +2/2 + +2,328 ns · 0.52× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sinh +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,511 ns/iteration, speed vs FLTX 0.80× + +216.0 + +214.0 + +2/2 + +1,511 ns · 0.80× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 12,968 ns/iteration, speed vs FLTX 0.09× + +238.9 + +237.0 + +2/2 + +12,968 ns · 0.09× + +No + +✗ + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,212 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.203529× + +217.5 + +214.2 + +2/2 + +1,212 ns + +Both + +- + + +qdpp qd_real +API: qdpp cosh +mean: 217.3 bits +p01: 214.5 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 217.0, p01 214.5, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +near_one: mean 217.6, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 2,326 ns/iteration, speed vs FLTX 0.52× + +217.3 + +213.8 + +2/2 + +2,326 ns · 0.52× + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,459 ns/iteration, speed vs FLTX 0.83× + +215.9 + +214.0 + +2/2 + +1,459 ns · 0.83× + +Both + +- + + +TLFloat Octuple +API: tlfloat::cosh +mean: 238.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 11,962 ns/iteration, speed vs FLTX 0.10× + +238.9 + +237.0 + +2/2 + +11,962 ns · 0.10× + +No + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,196 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.276926× + +219.1 + +214.0 + +2/2 + +1,196 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp tanh +mean: 218.9 bits +p01: 214.6 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 219.8, p01 214.6, worst 212.9, required 180.0, margin 32.9, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 214.9, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 2,331 ns/iteration, speed vs FLTX 0.51× + +218.9 + +212.9 + +2/2 + +2,331 ns · 0.51× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tanh +mean: 216.2 bits +p01: 214.3 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.6, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,528 ns/iteration, speed vs FLTX 0.78× + +216.2 + +214.0 + +2/2 + +1,528 ns · 0.78× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tanh +mean: 239.2 bits +p01: 237.2 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.0, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 12,753 ns/iteration, speed vs FLTX 0.09× + +239.2 + +237.1 + +2/2 + +12,753 ns · 0.09× + +Inf + +✗ + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,550 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.427277× + +217.2 + +213.0 + +2/2 + +2,550 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp asinh +mean: 216.9 bits +p01: 213.7 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.3, p01 214.2, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499356 +near_one: mean 216.4, p01 213.7, worst 212.7, required 180.0, margin 32.7, n=4099, seed=10322096095657499359 +benchmark: 6,326 ns/iteration, speed vs FLTX 0.40× + +216.9 + +0.0 + +1/2 + +6,326 ns · 0.40× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asinh +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 6,189 ns/iteration, speed vs FLTX 0.41× + +215.9 + +214.0 + +2/2 + +6,189 ns · 0.41× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 62,472 ns/iteration, speed vs FLTX 0.04× + +238.9 + +237.0 + +2/2 + +62,472 ns · 0.04× + +No + +✗ + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,349 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.584763× + +217.7 + +213.7 + +2/2 + +2,349 ns + +Both + +- + + +qdpp qd_real +API: qdpp acosh +mean: 217.0 bits +p01: 213.6 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 216.3, p01 213.6, worst 0.0, required 180.0, margin -180.0, n=4101, seed=10322096095657499355 +moderate: mean 217.7, p01 214.7, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499275 +benchmark: 6,784 ns/iteration, speed vs FLTX 0.35× + +217.0 + +0.0 + +0/2 + +6,784 ns · 0.35× + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.8, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4101, seed=10322096095657499355 +moderate: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499275 +benchmark: 3,722 ns/iteration, speed vs FLTX 0.63× + +215.9 + +214.0 + +2/2 + +3,722 ns · 0.63× + +Both + +- + + +TLFloat Octuple +API: tlfloat::acosh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.7, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4101, seed=10322096095657499355 +moderate: mean 239.0, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499275 +benchmark: 58,648 ns/iteration, speed vs FLTX 0.04× + +238.9 + +237.0 + +2/2 + +58,648 ns · 0.04× + +No + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,158 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.358384× + +218.3 + +213.3 + +2/2 + +2,158 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atanh +mean: 217.7 bits +p01: 213.8 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 218.6, p01 215.3, worst 0.0, required 180.0, margin -180.0, n=4105, seed=10322096095657499355 +moderate: mean 216.8, p01 213.8, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +benchmark: 6,639 ns/iteration, speed vs FLTX 0.33× + +217.7 + +0.0 + +1/2 + +6,639 ns · 0.33× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atanh +mean: 216.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.5, p01 214.9, worst 214.9, required 180.0, margin 34.9, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 2,932 ns/iteration, speed vs FLTX 0.74× + +216.2 + +214.0 + +2/2 + +2,932 ns · 0.74× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atanh +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.4, p01 237.9, worst 237.4, required 180.0, margin 57.4, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 17,704 ns/iteration, speed vs FLTX 0.12× + +239.1 + +237.0 + +2/2 + +17,704 ns · 0.12× + +No + +✗ + + + + +Special + + + + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 8,905 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.102616× + +208.2 + +189.8 + +2/2 + +8,905 ns + +Both + +- + + +qdpp: erfc is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erfc +mean: 216.1 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 216.2, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 27,628 ns/iteration, speed vs FLTX 0.32× + +216.1 + +214.0 + +2/2 + +27,628 ns · 0.32× + +Both + +- + + +TLFloat Octuple +API: tlfloat::erfc +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 239.2, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 778,830 ns/iteration, speed vs FLTX 0.01× + +239.1 + +237.0 + +2/2 + +778,830 ns · 0.01× + +Inf + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 8,938 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.873787× + +212.8 + +196.8 + +2/2 + +8,938 ns + +Both + +✓ + + +qdpp: erf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erf +mean: 216.3 bits +p01: 214.3 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 34.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.5, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499359 +benchmark: 16,748 ns/iteration, speed vs FLTX 0.53× + +216.3 + +214.1 + +2/2 + +16,748 ns · 0.53× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::erf +mean: 239.2 bits +p01: 237.3 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.6, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.3, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 780,979 ns/iteration, speed vs FLTX 0.01× + +239.2 + +237.1 + +2/2 + +780,979 ns · 0.01× + +Inf + +✗ + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 9,277 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.587586× + +209.0 + +202.5 + +1/1 + +9,277 ns + +Both + +- + + +qdpp: tgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499320 +benchmark: 14,727 ns/iteration, speed vs FLTX 0.63× + +215.9 + +214.0 + +1/1 + +14,727 ns · 0.63× + +Both + +- + + +TLFloat Octuple +API: tlfloat::tgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499320 +benchmark: 279,386 ns/iteration, speed vs FLTX 0.03× + +238.9 + +237.0 + +1/1 + +279,386 ns · 0.03× + +No + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 8,276 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.524893× + +211.9 + +199.2 + +1/1 + +8,276 ns + +Both + +- + + +qdpp: lgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499323 +benchmark: 12,620 ns/iteration, speed vs FLTX 0.66× + +215.9 + +214.0 + +1/1 + +12,620 ns · 0.66× + +Both + +- + + +TLFloat Octuple +API: tlfloat::lgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499323 +benchmark: 251,898 ns/iteration, speed vs FLTX 0.03× + +238.9 + +237.0 + +1/1 + +251,898 ns · 0.03× + +No + +- + + + + +Comparisons + + + + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.777 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.345048× + +exact + +exact + +1/1 + +0.777 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.05 ns/iteration, speed vs FLTX 0.74× + +exact + +exact + +1/1 + +1.05 ns · 0.74× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.50 ns/iteration, speed vs FLTX 0.12× + +exact + +exact + +1/1 + +6.50 ns · 0.12× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 210.8 ns/iteration, speed vs FLTX 0.00× + +exact + +exact + +1/1 + +210.8 ns · 0.00× + +Both + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.779 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.413087× + +exact + +exact + +1/1 + +0.779 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.10 ns/iteration, speed vs FLTX 0.71× + +exact + +exact + +1/1 + +1.10 ns · 0.71× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.47 ns/iteration, speed vs FLTX 0.12× + +exact + +exact + +1/1 + +6.47 ns · 0.12× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 210.7 ns/iteration, speed vs FLTX 0.00× + +exact + +exact + +1/1 + +210.7 ns · 0.00× + +Both + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.11 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.905901× + +exact + +exact + +1/1 + +2.11 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.91 ns/iteration, speed vs FLTX 1.10× + +exact + +exact + +1/1 + +1.91 ns · 1.10× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.52 ns/iteration, speed vs FLTX 0.32× + +exact + +exact + +1/1 + +6.52 ns · 0.32× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 211.2 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +211.2 ns · 0.01× + +Both + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.08 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.95348× + +exact + +exact + +1/1 + +2.08 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.98 ns/iteration, speed vs FLTX 1.05× + +exact + +exact + +1/1 + +1.98 ns · 1.05× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.67 ns/iteration, speed vs FLTX 0.31× + +exact + +exact + +1/1 + +6.67 ns · 0.31× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 211.5 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +211.5 ns · 0.01× + +Both + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.06 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.937043× + +exact + +exact + +1/1 + +2.06 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.93 ns/iteration, speed vs FLTX 1.07× + +exact + +exact + +1/1 + +1.93 ns · 1.07× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.50 ns/iteration, speed vs FLTX 0.32× + +exact + +exact + +1/1 + +6.50 ns · 0.32× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 211.3 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +211.3 ns · 0.01× + +Both + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.09 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.916094× + +exact + +exact + +1/1 + +2.09 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.91 ns/iteration, speed vs FLTX 1.09× + +exact + +exact + +1/1 + +1.91 ns · 1.09× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.48 ns/iteration, speed vs FLTX 0.32× + +exact + +exact + +1/1 + +6.48 ns · 0.32× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 211.2 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +211.2 ns · 0.01× + +Both + +- + + + + +Random + + + + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 19.66 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.944979× + +- + +- + +- + +19.66 ns + +- + +- + + +qdpp qd_real +API: qdpp qdrand +benchmark: 38.24 ns/iteration, speed vs FLTX 0.51× + +- + +- + +- + +38.24 ns · 0.51× + +- + +- + + +mpfr64: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 265.4 ns/iteration (no available competitor) + +- + +- + +- + +265.4 ns + +- + +- + + +qdpp: normal is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 42.87 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.834212× + +- + +- + +- + +42.87 ns + +- + +- + + +qdpp qd_real +API: same expression +benchmark: 78.63 ns/iteration, speed vs FLTX 0.55× + +- + +- + +- + +78.63 ns · 0.55× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same expression +benchmark: 136.3 ns/iteration, speed vs FLTX 0.31× + +- + +- + +- + +136.3 ns · 0.31× + +- + +- + + +TLFloat Octuple +API: same expression +benchmark: 1,113 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +1,113 ns · 0.04× + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 155.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.03491× + +- + +- + +- + +155.2 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 352.8 ns/iteration, speed vs FLTX 0.44× + +- + +- + +- + +352.8 ns · 0.44× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 315.8 ns/iteration, speed vs FLTX 0.49× + +- + +- + +- + +315.8 ns · 0.49× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 2,783 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +2,783 ns · 0.06× + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,810 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.298148× + +- + +- + +- + +1,810 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 3,698 ns/iteration, speed vs FLTX 0.49× + +- + +- + +- + +3,698 ns · 0.49× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 2,349 ns/iteration, speed vs FLTX 0.77× + +- + +- + +- + +2,349 ns · 0.77× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 28,641 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +28,641 ns · 0.06× + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 124.1 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.593203× + +- + +- + +- + +124.1 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 197.7 ns/iteration, speed vs FLTX 0.63× + +- + +- + +- + +197.7 ns · 0.63× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 257.2 ns/iteration, speed vs FLTX 0.48× + +- + +- + +- + +257.2 ns · 0.48× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 2,816 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +2,816 ns · 0.04× + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 557.2 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.603064× + +- + +- + +- + +557.2 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 893.2 ns/iteration, speed vs FLTX 0.62× + +- + +- + +- + +893.2 ns · 0.62× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 965.0 ns/iteration, speed vs FLTX 0.58× + +- + +- + +- + +965.0 ns · 0.58× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 12,347 ns/iteration, speed vs FLTX 0.05× + +- + +- + +- + +12,347 ns · 0.05× + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 395.6 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.944277× + +- + +- + +- + +395.6 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 769.2 ns/iteration, speed vs FLTX 0.51× + +- + +- + +- + +769.2 ns · 0.51× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 772.6 ns/iteration, speed vs FLTX 0.51× + +- + +- + +- + +772.6 ns · 0.51× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 10,119 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +10,119 ns · 0.04× + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 218.1 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.461815× + +- + +- + +- + +218.1 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 443.6 ns/iteration, speed vs FLTX 0.49× + +- + +- + +- + +443.6 ns · 0.49× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 318.9 ns/iteration, speed vs FLTX 0.68× + +- + +- + +- + +318.9 ns · 0.68× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 3,380 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +3,380 ns · 0.06× + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 8,562 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.278832× + +- + +- + +- + +8,562 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 17,638 ns/iteration, speed vs FLTX 0.49× + +- + +- + +- + +17,638 ns · 0.49× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 10,950 ns/iteration, speed vs FLTX 0.78× + +- + +- + +- + +10,950 ns · 0.78× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 113,438 ns/iteration, speed vs FLTX 0.08× + +- + +- + +- + +113,438 ns · 0.08× + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,667 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.193658× + +- + +- + +- + +4,667 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 15,800 ns/iteration, speed vs FLTX 0.30× + +- + +- + +- + +15,800 ns · 0.30× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 10,238 ns/iteration, speed vs FLTX 0.46× + +- + +- + +- + +10,238 ns · 0.46× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 81,812 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +81,812 ns · 0.06× + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/windows_x86_64_MSVC_f256_overview_compact.svg b/validation/metrics/generated/overview/windows_x86_64_MSVC_f256_overview_compact.svg new file mode 100644 index 0000000..31b7109 --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MSVC_f256_overview_compact.svg @@ -0,0 +1,9392 @@ + + + + + +operation + + +bl::f256 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +qdpp (qd_real) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +mpfr_float_backend<64> + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +TLFloat (tloct) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +Arithmetic + + + + + + + +add + +fltx bl::f256 +API: bl::add +mean: 227.4 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 10.68 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.194909× + +227.4 + +215.3 + +2/2 + +10.7 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp operator+ +mean: 227.4 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 23.45 ns/iteration, speed vs FLTX 0.46× + +227.4 + +215.3 + +2/2 + +23.4 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator+ +mean: 225.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.3, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3770, seed=10322096095657499292 +subnormal: mean 245.4, p01 215.5, worst 214.9, required 190.0, margin 24.9, n=326, seed=10322096095657499292 +benchmark: 49.58 ns/iteration, speed vs FLTX 0.22× + +225.0 + +214.0 + +2/2 + +49.6 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator+ +mean: 253.1 bits +p01: 237.3 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 251.8, p01 237.3, worst 237.0, required 190.0, margin 47.0, n=3770, seed=10322096095657499292 +subnormal: mean 268.5, p01 239.2, worst 237.9, required 190.0, margin 47.9, n=326, seed=10322096095657499292 +benchmark: 407.9 ns/iteration, speed vs FLTX 0.03× + +253.1 + +237.0 + +2/2 + +408 ns + +No + +✗ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 227.4 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.1, p01 215.6, worst 215.2, required 190.0, margin 25.2, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 10.66 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.363657× + +227.4 + +215.2 + +2/2 + +10.7 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp operator- +mean: 227.4 bits +p01: 215.6 bits +worst: 215.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 226.1, p01 215.6, worst 215.0, required 190.0, margin 25.0, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 25.21 ns/iteration, speed vs FLTX 0.42× + +227.4 + +215.0 + +2/2 + +25.2 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator- +mean: 225.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.5, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3791, seed=10322096095657499292 +subnormal: mean 245.9, p01 246.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 49.46 ns/iteration, speed vs FLTX 0.22× + +225.2 + +214.0 + +2/2 + +49.5 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator- +mean: 253.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 252.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=3791, seed=10322096095657499292 +subnormal: mean 268.9, p01 269.0, worst 237.7, required 190.0, margin 47.7, n=305, seed=10322096095657499292 +benchmark: 407.1 ns/iteration, speed vs FLTX 0.03× + +253.3 + +237.0 + +2/2 + +407 ns + +No + +✗ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 18.81 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.039385× + +220.0 + +215.2 + +2/2 + +18.8 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp operator* +mean: 220.0 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 19.56 ns/iteration, speed vs FLTX 0.96× + +220.0 + +215.2 + +2/2 + +19.6 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator* +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4000, seed=10322096095657499292 +subnormal: mean 217.3, p01 214.3, worst 214.3, required 190.0, margin 24.3, n=100, seed=10322096095657499292 +benchmark: 64.52 ns/iteration, speed vs FLTX 0.29× + +216.0 + +214.0 + +2/2 + +64.5 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator* +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4000, seed=10322096095657499292 +subnormal: mean 240.2, p01 237.1, worst 237.1, required 190.0, margin 47.1, n=100, seed=10322096095657499292 +benchmark: 355.1 ns/iteration, speed vs FLTX 0.05× + +239.0 + +237.0 + +2/2 + +355 ns + +No + +✗ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 2/2 +minimum threshold margin: 24.8 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 219.4, p01 215.4, worst 215.4, required 190.0, margin 25.4, n=55, seed=10322096095657499292 +benchmark: 80.73 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.462772× + +219.2 + +214.8 + +2/2 + +80.7 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp operator/ +mean: 218.7 bits +p01: 173.3 bits +worst: 173.3 bits +domains: 1/2 +minimum threshold margin: -16.7 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 219.2, p01 214.8, worst 214.0, required 190.0, margin 24.0, n=4045, seed=10322096095657499292 +subnormal: mean 180.3, p01 173.3, worst 173.3, required 190.0, margin -16.7, n=55, seed=10322096095657499292 +benchmark: 265.4 ns/iteration, speed vs FLTX 0.30× + +218.7 + +173.3 + +1/2 + +265 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator/ +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4045, seed=10322096095657499292 +subnormal: mean 218.2, p01 214.2, worst 214.2, required 190.0, margin 24.2, n=55, seed=10322096095657499292 +benchmark: 118.1 ns/iteration, speed vs FLTX 0.68× + +216.0 + +214.0 + +2/2 + +118 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator/ +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4045, seed=10322096095657499292 +subnormal: mean 241.4, p01 237.2, worst 237.2, required 190.0, margin 47.2, n=55, seed=10322096095657499292 +benchmark: 723.7 ns/iteration, speed vs FLTX 0.11× + +239.0 + +237.0 + +2/2 + +724 ns + +No + +✗ + + + + +IO + + + + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 346.8 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.41051× + +220.4 + +217.0 + +2/2 + +347 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp to_string +mean: 218.8 bits +p01: 211.1 bits +worst: 209.1 bits +domains: 2/2 +minimum threshold margin: 19.1 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 211.1, worst 209.1, required 190.0, margin 19.1, n=4096, seed=10322096095657499357 +benchmark: 3,918 ns/iteration, speed vs FLTX 0.09× + +218.8 + +209.1 + +2/2 + +3918 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost number::str +mean: 220.3 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.2, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 489.2 ns/iteration, speed vs FLTX 0.71× + +220.3 + +217.0 + +2/2 + +489 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::to_string +mean: 216.9 bits +p01: 214.0 bits +worst: 213.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.1, p01 214.1, worst 213.6, required 190.0, margin 23.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 216.7, p01 214.0, worst 213.6, required 190.0, margin 23.6, n=4096, seed=10322096095657499357 +benchmark: 45,011 ns/iteration, speed vs FLTX 0.01× + +216.9 + +213.6 + +2/2 + +45011 ns + +Both + +✓ + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 316.1 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 12.365679× + +220.4 + +217.0 + +2/2 + +316 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp write +mean: 218.8 bits +p01: 211.1 bits +worst: 209.1 bits +domains: 2/2 +minimum threshold margin: 19.1 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 211.1, worst 209.1, required 190.0, margin 19.1, n=4096, seed=10322096095657499357 +benchmark: 3,909 ns/iteration, speed vs FLTX 0.08× + +218.8 + +209.1 + +2/2 + +3909 ns + +Both + +✗ + + +mpfr64: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 415.5 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 0.893298× + +219.7 + +212.0 + +2/2 + +415 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp read +mean: 200.9 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -212.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 213.4, worst 212.6, required 212.0, margin 0.6, n=4097, seed=10322096095657499311 +wide_exponent: mean 185.9, p01 0.0, worst 0.0, required 212.0, margin -212.0, n=4098, seed=10322096095657499308 +benchmark: 3,518 ns/iteration, speed vs FLTX 0.12× + +200.9 + +0.0 + +1/2 + +3518 ns + +NaN + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost string constructor +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 2.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4098, seed=10322096095657499308 +benchmark: 371.1 ns/iteration, speed vs FLTX 1.12× + +216.0 + +214.0 + +2/2 + +371 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat string constructor +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 212.0, margin 25.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 238.9, p01 237.2, worst 237.1, required 212.0, margin 25.1, n=4098, seed=10322096095657499308 +benchmark: 38,309 ns/iteration, speed vs FLTX 0.01× + +238.9 + +237.0 + +2/2 + +38309 ns + +No + +✗ + + + + +Rounding + + + + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 4.90 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.450613× + += + += + +1/1 + +4.9 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.21 ns/iteration, speed vs FLTX 2.22× + += + += + +1/1 + +2.2 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 44.06 ns/iteration, speed vs FLTX 0.11× + += + += + +1/1 + +44.1 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 159.7 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +160 ns + +No + +✗ + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 4.88 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.458782× + += + += + +1/1 + +4.9 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.24 ns/iteration, speed vs FLTX 2.18× + += + += + +1/1 + +2.2 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 43.53 ns/iteration, speed vs FLTX 0.11× + += + += + +1/1 + +43.5 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 159.0 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +159 ns + +No + +✗ + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 6.77 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.879069× + += + += + +1/1 + +6.8 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp aint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 5.96 ns/iteration, speed vs FLTX 1.14× + += + += + +1/1 + +6.0 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 42.58 ns/iteration, speed vs FLTX 0.16× + += + += + +1/1 + +42.6 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 144.4 ns/iteration, speed vs FLTX 0.05× + += + += + +1/1 + +144 ns + +No + +✗ + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 12.89 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.432661× + += + += + +1/1 + +12.9 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp round +mean: 229.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/1 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 229.7, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4110, seed=10322096095657499382 +benchmark: 5.58 ns/iteration, speed vs FLTX 2.31× + +229.7 + +0.0 + +0/1 + +5.6 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 83.55 ns/iteration, speed vs FLTX 0.15× + += + += + +1/1 + +83.6 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 175.6 ns/iteration, speed vs FLTX 0.07× + += + += + +1/1 + +176 ns + +No + +✗ + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 9.12 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 21.888671× + += + += + +1/1 + +9.1 ns + +Both + +✓ + + +qdpp: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 199.5 ns/iteration, speed vs FLTX 0.05× + += + += + +1/1 + +200 ns + +No + +✗ + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 7.21 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 17.319193× + += + += + +1/1 + +7.2 ns + +- + +- + + +qdpp: lround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 124.8 ns/iteration, speed vs FLTX 0.06× + += + += + +1/1 + +125 ns + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 6.78 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 31.909862× + += + += + +1/1 + +6.8 ns + +- + +- + + +qdpp: llround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 216.2 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +216 ns + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 129.3 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +129 ns + +Both + +✓ + + +qdpp: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 194.2 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +194 ns + +Both + +✓ + + +qdpp: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 67.96 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.894876× + +244.0 + +217.7 + +3/3 + +68.0 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp fmod +mean: 199.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -190.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 242.3, p01 211.1, worst 205.5, required 190.0, margin 15.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 123.2, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4, seed=10322096095657499383 +wide_exponent: mean 157.4, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4096, seed=10322096095657499357 +benchmark: 330.5 ns/iteration, speed vs FLTX 0.21× + +199.8 + +0.0 + +1/3 + +331 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 196.7 ns/iteration, speed vs FLTX 0.35× + += + += + +3/3 + +197 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1,572 ns/iteration, speed vs FLTX 0.04× + += + += + +3/3 + +1572 ns + +No + +✗ + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 98.27 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.401096× + += + += + +1/1 + +98.3 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp drem +mean: 241.9 bits +p01: 210.4 bits +worst: 205.5 bits +domains: 1/1 +minimum threshold margin: 15.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 241.9, p01 210.4, worst 205.5, required 190.0, margin 15.5, n=4099, seed=10322096095657499356 +benchmark: 333.4 ns/iteration, speed vs FLTX 0.29× + +241.9 + +205.5 + +1/1 + +333 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 236.0 ns/iteration, speed vs FLTX 0.42× + += + += + +1/1 + +236 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1,715 ns/iteration, speed vs FLTX 0.06× + += + += + +1/1 + +1715 ns + +No + +✗ + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 97.31 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.719027× + += + += + +1/1 + +97.3 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp divrem +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 332.7 ns/iteration, speed vs FLTX 0.29× + += + += + +1/1 + +333 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 264.6 ns/iteration, speed vs FLTX 0.37× + += + += + +1/1 + +265 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1,752 ns/iteration, speed vs FLTX 0.06× + += + += + +1/1 + +1752 ns + +No + +✗ + + + + +Float Utils + + + + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.64 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.745391× + += + += + +2/2 + +2.6 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.97 ns/iteration, speed vs FLTX 1.34× + += + += + +2/2 + +2.0 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 38.55 ns/iteration, speed vs FLTX 0.07× + += + += + +2/2 + +38.5 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.96 ns/iteration, speed vs FLTX 0.44× + += + += + +2/2 + +6.0 ns + +No + +✓ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.65 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.740335× + += + += + +1/1 + +2.7 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.96 ns/iteration, speed vs FLTX 1.35× + += + += + +1/1 + +2.0 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 38.42 ns/iteration, speed vs FLTX 0.07× + += + += + +1/1 + +38.4 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 5.94 ns/iteration, speed vs FLTX 0.45× + += + += + +1/1 + +5.9 ns + +No + +✓ + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 24.56 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.427525× + +229.7 + +215.1 + +3/3 + +24.6 ns + +Both + +✗ + + +qdpp: fma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fma +mean: 228.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 222.8, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 84.18 ns/iteration, speed vs FLTX 0.29× + +228.3 + +214.0 + +3/3 + +84.2 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fma +mean: 251.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 245.2, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 616.7 ns/iteration, speed vs FLTX 0.04× + +251.1 + +237.0 + +3/3 + +617 ns + +No + +✗ + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 74.50 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 3.443704× + +217.9 + +214.6 + +2/2 + +74.5 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp inv +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 256.5 ns/iteration, speed vs FLTX 0.29× + +217.9 + +214.6 + +2/2 + +257 ns + +NaN + +✗ + + +mpfr64: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.41 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.491741× + += + += + +2/2 + +3.4 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp min +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.67 ns/iteration, speed vs FLTX 2.03× + += + += + +2/2 + +1.7 ns + +Inf + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 45.63 ns/iteration, speed vs FLTX 0.07× + += + += + +2/2 + +45.6 ns + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 321.4 ns/iteration, speed vs FLTX 0.01× + += + += + +2/2 + +321 ns + +No + +✗ + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.65 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.393201× + += + += + +2/2 + +3.6 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp max +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.44 ns/iteration, speed vs FLTX 2.54× + += + += + +2/2 + +1.4 ns + +Inf + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 45.26 ns/iteration, speed vs FLTX 0.08× + += + += + +2/2 + +45.3 ns + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 321.4 ns/iteration, speed vs FLTX 0.01× + += + += + +2/2 + +321 ns + +No + +✗ + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 8.22 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 5.328306× + += + += + +2/2 + +8.2 ns + +Both + +✓ + + +qdpp: fdim is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fdim +mean: 243.7 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 241.3, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +benchmark: 43.81 ns/iteration, speed vs FLTX 0.19× + +243.7 + +214.0 + +2/2 + +43.8 ns + +No + +✓ + + +TLFloat Octuple +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 819.1 ns/iteration, speed vs FLTX 0.01× + += + += + +2/2 + +819 ns + +No + +✓ + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.863 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 14.151467× + += + += + +1/1 + +0.86 ns + +Both + +✓ + + +qdpp: copysign is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 67.52 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +67.5 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 12.21 ns/iteration, speed vs FLTX 0.07× + += + += + +1/1 + +12.2 ns + +No + +✗ + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.94 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.188365× + += + += + +1/1 + +3.9 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 8.62 ns/iteration, speed vs FLTX 0.46× + += + += + +1/1 + +8.6 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 39.77 ns/iteration, speed vs FLTX 0.10× + += + += + +1/1 + +39.8 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 188.1 ns/iteration, speed vs FLTX 0.02× + += + += + +1/1 + +188 ns + +No + +✗ + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.95 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.177719× + += + += + +1/1 + +4.0 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 8.60 ns/iteration, speed vs FLTX 0.46× + += + += + +1/1 + +8.6 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 40.13 ns/iteration, speed vs FLTX 0.10× + += + += + +1/1 + +40.1 ns + +Both + +✓ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.94 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.183372× + += + += + +1/1 + +3.9 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 8.61 ns/iteration, speed vs FLTX 0.46× + += + += + +1/1 + +8.6 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 40.11 ns/iteration, speed vs FLTX 0.10× + += + += + +1/1 + +40.1 ns + +Both + +✓ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 7.28 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 9.282272× + += + += + +2/2 + +7.3 ns + +Both + +✓ + + +qdpp: frexp is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 67.57 ns/iteration, speed vs FLTX 0.11× + += + += + +2/2 + +67.6 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 652.4 ns/iteration, speed vs FLTX 0.01× + += + += + +2/2 + +652 ns + +No + +✗ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.39 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 9.663323× + += + += + +2/2 + +18.4 ns + +Both + +✓ + + +qdpp: modf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 177.7 ns/iteration, speed vs FLTX 0.10× + += + += + +2/2 + +178 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 845.2 ns/iteration, speed vs FLTX 0.02× + += + += + +2/2 + +845 ns + +No + +✗ + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.62 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 20.719674× + += + += + +2/2 + +1.6 ns + +- + +- + + +qdpp: ilogb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 33.59 ns/iteration, speed vs FLTX 0.05× + += + += + +2/2 + +33.6 ns + +- + +- + + +TLFloat Octuple +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 103.4 ns/iteration, speed vs FLTX 0.02× + += + += + +2/2 + +103 ns + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.24 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 33.823758× + += + += + +2/2 + +2.2 ns + +Both + +- + + +qdpp: logb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 75.67 ns/iteration, speed vs FLTX 0.03× + += + += + +2/2 + +75.7 ns + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 6.87 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 73.451429× + +- + +- + +- + +6.9 ns + +- + +- + + +qdpp: nextafter is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter +benchmark: 504.4 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +504 ns + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter +benchmark: 558.1 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +558 ns + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 6.86 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 74.021606× + +- + +- + +- + +6.9 ns + +- + +- + + +qdpp: nexttoward is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter (same type) +benchmark: 507.9 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +508 ns + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter (same type) +benchmark: 558.1 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +558 ns + +- + +- + + + + +Roots & powers + + + + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 18.25 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.685495× + +220.1 + +215.3 + +2/2 + +18.3 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sqr +mean: 216.7 bits +p01: 215.0 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 24.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.8, p01 215.0, worst 214.7, required 190.0, margin 24.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 216.7, p01 215.1, worst 214.8, required 190.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 12.51 ns/iteration, speed vs FLTX 1.46× + +216.7 + +214.7 + +2/2 + +12.5 ns + +Both + +✓ + + +mpfr64: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.9 bits +p01: 211.3 bits +worst: 209.6 bits +domains: 4/4 +minimum threshold margin: 19.6 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 218.3, p01 211.5, worst 210.0, required 190.0, margin 20.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 123.0 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.108334× + +217.9 + +209.6 + +4/4 + +123 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sqrt +mean: 152.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/4 +minimum threshold margin: -190.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 164.1, p01 54.9, worst 54.3, required 190.0, margin -135.7, n=4096, seed=10322096095657499354 +near_one: mean 217.6, p01 214.0, worst 212.6, required 190.0, margin 22.6, n=4099, seed=10322096095657499359 +subnormal: mean 10.8, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 216.9, p01 187.9, worst 175.0, required 190.0, margin -15.0, n=4096, seed=10322096095657499357 +benchmark: 442.3 ns/iteration, speed vs FLTX 0.28× + +152.3 + +0.0 + +1/4 + +442 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sqrt +mean: 216.2 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 4/4 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 216.2, p01 214.4, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499359 +subnormal: mean 216.8, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 136.3 ns/iteration, speed vs FLTX 0.90× + +216.2 + +214.0 + +4/4 + +136 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sqrt +mean: 239.2 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 4/4 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 239.0, p01 237.4, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499359 +subnormal: mean 239.7, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 239.0, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 1,343 ns/iteration, speed vs FLTX 0.09× + +239.2 + +237.0 + +4/4 + +1343 ns + +No + +✗ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 215.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 344.0 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.238672× + +219.3 + +215.0 + +2/2 + +344 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp nroot +mean: 217.2 bits +p01: 194.5 bits +worst: 177.1 bits +domains: 1/2 +minimum threshold margin: -12.9 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.4, p01 213.9, worst 213.0, required 190.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.0, p01 194.5, worst 177.1, required 190.0, margin -12.9, n=4096, seed=10322096095657499357 +benchmark: 1,148 ns/iteration, speed vs FLTX 0.30× + +217.2 + +177.1 + +1/2 + +1148 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cbrt +mean: 216.0 bits +p01: 214.2 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.1, p01 214.3, worst 214.1, required 190.0, margin 24.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.1, required 190.0, margin 24.1, n=4096, seed=10322096095657499357 +benchmark: 426.1 ns/iteration, speed vs FLTX 0.81× + +216.0 + +214.1 + +2/2 + +426 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::cbrt +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 239.2, p01 237.3, worst 237.1, required 190.0, margin 47.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499357 +benchmark: 8,045 ns/iteration, speed vs FLTX 0.04× + +239.0 + +237.0 + +2/2 + +8045 ns + +No + +✗ + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 172.3 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.676645× + +229.9 + +213.9 + +2/2 + +172 ns + +Both + +✓ + + +qdpp: hypot is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::hypot +mean: 228.7 bits +p01: 213.2 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 215.3, p01 213.2, worst 212.9, required 190.0, margin 22.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 242.0, p01 213.6, worst 212.9, required 190.0, margin 22.9, n=4096, seed=10322096095657499357 +benchmark: 461.2 ns/iteration, speed vs FLTX 0.37× + +228.7 + +212.9 + +2/2 + +461 ns + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::hypot +mean: 251.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 239.0, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 264.8, p01 237.6, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 1,319 ns/iteration, speed vs FLTX 0.13× + +251.9 + +237.0 + +2/2 + +1319 ns + +No + +✓ + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,498 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.215167× + +216.8 + +211.1 + +2/2 + +2498 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp pow +mean: 216.4 bits +p01: 211.7 bits +worst: 210.6 bits +domains: 2/2 +minimum threshold margin: 30.6 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 215.1, p01 211.7, worst 210.6, required 180.0, margin 30.6, n=4099, seed=10322096095657499356 +near_one: mean 217.6, p01 214.5, worst 213.9, required 180.0, margin 33.9, n=4099, seed=10322096095657499359 +benchmark: 6,759 ns/iteration, speed vs FLTX 0.37× + +216.4 + +210.6 + +2/2 + +6759 ns + +No + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,036 ns/iteration, speed vs FLTX 0.82× + +215.9 + +214.0 + +2/2 + +3036 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::pow +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 63,641 ns/iteration, speed vs FLTX 0.04× + +238.9 + +237.0 + +2/2 + +63641 ns + +No + +✗ + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 111.1 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.034187× + +217.2 + +213.7 + +2/2 + +111 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp npwr +mean: 215.0 bits +p01: 212.8 bits +worst: 212.1 bits +domains: 2/2 +minimum threshold margin: 22.1 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 215.1, p01 212.8, worst 212.1, required 190.0, margin 22.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.0, p01 212.8, worst 212.1, required 190.0, margin 22.1, n=4096, seed=10322096095657499357 +benchmark: 114.9 ns/iteration, speed vs FLTX 0.97× + +215.0 + +212.1 + +2/2 + +115 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow(value, int) +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 171.8 ns/iteration, speed vs FLTX 0.65× + +216.0 + +214.0 + +2/2 + +172 ns + +Both + +✓ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.8 bits +p01: 210.6 bits +worst: 209.2 bits +domains: 2/2 +minimum threshold margin: 29.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.1, p01 210.6, worst 209.2, required 180.0, margin 29.2, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 980.4 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.28385× + +216.8 + +209.2 + +2/2 + +980 ns + +Both + +- + + +qdpp qd_real +API: qdpp exp +mean: 216.6 bits +p01: 210.5 bits +worst: 209.2 bits +domains: 2/2 +minimum threshold margin: 29.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 210.5, worst 209.2, required 180.0, margin 29.2, n=4099, seed=10322096095657499291 +moderate: mean 217.2, p01 214.7, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,982 ns/iteration, speed vs FLTX 0.49× + +216.6 + +209.2 + +2/2 + +1982 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,259 ns/iteration, speed vs FLTX 0.78× + +215.9 + +214.0 + +2/2 + +1259 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 11,231 ns/iteration, speed vs FLTX 0.09× + +239.0 + +237.0 + +2/2 + +11231 ns + +No + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 831.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.784668× + +218.0 + +214.2 + +2/2 + +831 ns + +Both + +- + + +qdpp: exp2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp2 +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,483 ns/iteration, speed vs FLTX 0.56× + +216.0 + +214.0 + +2/2 + +1483 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp2 +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +benchmark: 31,826 ns/iteration, speed vs FLTX 0.03× + +238.9 + +237.0 + +2/2 + +31826 ns + +No + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 227.2 bits +p01: 207.5 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.0, p01 207.5, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 987.1 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.413845× + +227.2 + +207.0 + +2/2 + +987 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp expm1 +mean: 226.8 bits +p01: 203.4 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 235.5, p01 203.4, worst 203.0, required 180.0, margin 23.0, n=4098, seed=10322096095657499336 +moderate: mean 218.1, p01 214.4, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499356 +benchmark: 1,994 ns/iteration, speed vs FLTX 0.50× + +226.8 + +0.0 + +1/2 + +1994 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::expm1 +mean: 227.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,396 ns/iteration, speed vs FLTX 0.71× + +227.5 + +214.0 + +2/2 + +1396 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::expm1 +mean: 250.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4098, seed=10322096095657499336 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 12,076 ns/iteration, speed vs FLTX 0.08× + +250.1 + +237.0 + +2/2 + +12076 ns + +No + +✗ + + + + +Logarithms + + + + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.8 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.2, p01 215.3, worst 215.0, required 180.0, margin 35.0, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,663 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.433593× + +217.8 + +213.3 + +3/3 + +1663 ns + +Both + +- + + +qdpp qd_real +API: qdpp log +mean: 205.3 bits +p01: 62.8 bits +worst: 62.1 bits +domains: 2/3 +minimum threshold margin: -117.9 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 180.4, p01 62.8, worst 62.1, required 180.0, margin -117.9, n=4096, seed=10322096095657499354 +near_one: mean 216.1, p01 213.6, worst 212.8, required 180.0, margin 32.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 219.3, p01 199.1, worst 184.2, required 180.0, margin 4.2, n=4096, seed=10322096095657499357 +benchmark: 6,292 ns/iteration, speed vs FLTX 0.26× + +205.3 + +62.1 + +2/3 + +6292 ns + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.7, p01 214.4, worst 214.3, required 180.0, margin 34.3, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 2,384 ns/iteration, speed vs FLTX 0.70× + +215.9 + +214.0 + +3/3 + +2384 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::log +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.8, p01 237.3, worst 237.3, required 180.0, margin 57.3, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 14,826 ns/iteration, speed vs FLTX 0.11× + +238.9 + +237.0 + +3/3 + +14826 ns + +No + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 221.1, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,673 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.569112× + +218.6 + +213.2 + +3/3 + +1673 ns + +Both + +- + + +qdpp: log2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log2 +mean: 217.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 220.0, p01 214.9, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 2,625 ns/iteration, speed vs FLTX 0.64× + +217.3 + +214.0 + +3/3 + +2625 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::log2 +mean: 240.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 243.0, p01 237.9, worst 237.8, required 180.0, margin 57.8, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 14,806 ns/iteration, speed vs FLTX 0.11× + +240.3 + +237.0 + +3/3 + +14806 ns + +No + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 217.6, p01 215.1, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,687 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.721102× + +217.4 + +213.3 + +3/3 + +1687 ns + +Both + +- + + +qdpp qd_real +API: qdpp log10 +mean: 203.2 bits +p01: 62.8 bits +worst: 62.1 bits +domains: 2/3 +minimum threshold margin: -117.9 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 177.7, p01 62.8, worst 62.1, required 180.0, margin -117.9, n=4096, seed=10322096095657499354 +near_one: mean 215.7, p01 213.3, worst 212.7, required 180.0, margin 32.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.1, p01 199.1, worst 184.2, required 180.0, margin 4.2, n=4096, seed=10322096095657499357 +benchmark: 6,677 ns/iteration, speed vs FLTX 0.25× + +203.2 + +62.1 + +2/3 + +6677 ns + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log10 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.8, p01 214.1, worst 214.1, required 180.0, margin 34.1, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 4,590 ns/iteration, speed vs FLTX 0.37× + +215.9 + +214.0 + +3/3 + +4590 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::log10 +mean: 238.8 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.6, p01 237.1, worst 237.1, required 180.0, margin 57.1, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 14,942 ns/iteration, speed vs FLTX 0.11× + +238.8 + +237.0 + +3/3 + +14942 ns + +No + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 226.8 bits +p01: 207.4 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.1, p01 207.4, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,692 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.444635× + +226.8 + +207.0 + +2/2 + +1692 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp log1p +mean: 226.4 bits +p01: 203.4 bits +worst: 203.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 235.6, p01 203.4, worst 203.0, required 180.0, margin 23.0, n=4098, seed=10322096095657499336 +moderate: mean 217.2, p01 214.1, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 6,247 ns/iteration, speed vs FLTX 0.27× + +226.4 + +203.0 + +2/2 + +6247 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log1p +mean: 227.4 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 2,444 ns/iteration, speed vs FLTX 0.69× + +227.4 + +214.0 + +2/2 + +2444 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::log1p +mean: 250.1 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.4, worst 237.0, required 180.0, margin 57.0, n=4098, seed=10322096095657499336 +moderate: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 18,047 ns/iteration, speed vs FLTX 0.09× + +250.1 + +237.0 + +2/2 + +18047 ns + +No + +✗ + + + + +Trigonometric + + + + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 883.7 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.912385× + +222.3 + +202.9 + +3/3 + +884 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sin +mean: 142.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 88.2, p01 40.3, worst 0.0, required 180.0, margin -180.0, n=4104, seed=10322096095657499353 +moderate: mean 215.8, p01 210.4, worst 206.1, required 180.0, margin 26.1, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 125.3, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4315, seed=10322096095657499369 +benchmark: 1,793 ns/iteration, speed vs FLTX 0.49× + +142.8 + +0.0 + +1/3 + +1793 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sin +mean: 218.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.3, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 222.9, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 1,690 ns/iteration, speed vs FLTX 0.52× + +218.5 + +214.0 + +3/3 + +1690 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sin +mean: 241.2 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 245.1, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 13,354 ns/iteration, speed vs FLTX 0.07× + +241.2 + +237.0 + +3/3 + +13354 ns + +No + +✗ + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 882.5 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.477041× + +226.8 + +208.7 + +3/3 + +882 ns + +Both + +- + + +qdpp qd_real +API: qdpp cos +mean: 161.9 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 171.1, p01 59.1, worst 0.0, required 180.0, margin -180.0, n=4104, seed=10322096095657499353 +moderate: mean 215.7, p01 210.1, worst 205.0, required 180.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 102.2, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4315, seed=10322096095657499369 +benchmark: 1,802 ns/iteration, speed vs FLTX 0.49× + +161.9 + +0.0 + +1/3 + +1802 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cos +mean: 219.4 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 220.7, p01 214.5, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 221.2, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 1,303 ns/iteration, speed vs FLTX 0.68× + +219.4 + +214.0 + +3/3 + +1303 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::cos +mean: 241.7 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 242.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 243.4, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 13,347 ns/iteration, speed vs FLTX 0.07× + +241.7 + +237.0 + +3/3 + +13347 ns + +No + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,176 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.646261× + +- + +- + +- + +1176 ns + +- + +- + + +qdpp qd_real +API: qdpp sincos +benchmark: 1,935 ns/iteration, speed vs FLTX 0.61× + +- + +- + +- + +1935 ns + +- + +- + + +mpfr64: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::sincos +benchmark: 26,867 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +26867 ns + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,114 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.698698× + +217.1 + +202.9 + +3/3 + +1114 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp tan +mean: 111.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -170.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 86.8, p01 40.3, worst 0.0, required 170.0, margin -170.0, n=4104, seed=10322096095657499353 +moderate: mean 214.8, p01 209.4, worst 205.0, required 170.0, margin 35.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 36.9, p01 0.0, worst 0.0, required 170.0, margin -170.0, n=4315, seed=10322096095657499369 +benchmark: 2,204 ns/iteration, speed vs FLTX 0.51× + +111.5 + +0.0 + +1/3 + +2204 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tan +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 44.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.1, p01 214.1, worst 214.0, required 170.0, margin 44.0, n=4104, seed=10322096095657499353 +moderate: mean 216.0, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 215.9, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4315, seed=10322096095657499369 +benchmark: 1,892 ns/iteration, speed vs FLTX 0.59× + +216.0 + +214.0 + +3/3 + +1892 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 67.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 238.9, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4104, seed=10322096095657499353 +moderate: mean 239.0, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 238.9, p01 237.2, worst 237.1, required 170.0, margin 67.1, n=4315, seed=10322096095657499369 +benchmark: 17,300 ns/iteration, speed vs FLTX 0.06× + +239.0 + +237.0 + +3/3 + +17300 ns + +No + +✗ + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,334 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 4.548031× + +217.9 + +214.4 + +2/2 + +1334 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp asin +mean: 217.2 bits +p01: 212.9 bits +worst: 212.3 bits +domains: 2/2 +minimum threshold margin: 32.3 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 216.0, p01 212.9, worst 212.3, required 180.0, margin 32.3, n=4099, seed=10322096095657499356 +benchmark: 8,279 ns/iteration, speed vs FLTX 0.16× + +217.2 + +212.3 + +2/2 + +8279 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asin +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.1, p01 214.7, worst 214.7, required 180.0, margin 34.7, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 6,068 ns/iteration, speed vs FLTX 0.22× + +216.0 + +214.0 + +2/2 + +6068 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asin +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.1, p01 237.7, worst 237.7, required 180.0, margin 57.7, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 22,050 ns/iteration, speed vs FLTX 0.06× + +239.0 + +237.0 + +2/2 + +22050 ns + +No + +✗ + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,348 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 4.650844× + +216.0 + +192.5 + +2/2 + +1348 ns + +Both + +- + + +qdpp qd_real +API: qdpp acos +mean: 217.3 bits +p01: 213.6 bits +worst: 212.5 bits +domains: 2/2 +minimum threshold margin: 32.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.4, p01 214.0, worst 213.0, required 180.0, margin 33.0, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 213.6, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +benchmark: 8,330 ns/iteration, speed vs FLTX 0.16× + +217.3 + +212.5 + +2/2 + +8330 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acos +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 6,267 ns/iteration, speed vs FLTX 0.22× + +215.9 + +214.0 + +2/2 + +6267 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::acos +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4105, seed=10322096095657499355 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 22,167 ns/iteration, speed vs FLTX 0.06× + +238.9 + +237.0 + +2/2 + +22167 ns + +No + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 880.1 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.265334× + +218.1 + +214.7 + +2/2 + +880 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atan +mean: 216.7 bits +p01: 213.1 bits +worst: 212.4 bits +domains: 2/2 +minimum threshold margin: 32.4 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.5, p01 213.8, worst 212.6, required 180.0, margin 32.6, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 213.1, worst 212.4, required 180.0, margin 32.4, n=4099, seed=10322096095657499359 +benchmark: 6,179 ns/iteration, speed vs FLTX 0.14× + +216.7 + +212.4 + +2/2 + +6179 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,994 ns/iteration, speed vs FLTX 0.44× + +216.0 + +214.0 + +2/2 + +1994 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 20,589 ns/iteration, speed vs FLTX 0.04× + +239.0 + +237.0 + +2/2 + +20589 ns + +Inf + +✗ + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 940.4 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.177171× + +217.9 + +214.3 + +3/3 + +940 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atan2 +mean: 216.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 0.0, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=8, seed=10322096095657499351 +moderate: mean 217.0, p01 213.4, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 213.0, worst 211.8, required 180.0, margin 31.8, n=4099, seed=10322096095657499359 +benchmark: 6,096 ns/iteration, speed vs FLTX 0.15× + +216.3 + +0.0 + +2/3 + +6096 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan2 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 215.3, p01 215.2, worst 215.2, required 180.0, margin 35.2, n=8, seed=10322096095657499351 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 2,048 ns/iteration, speed vs FLTX 0.46× + +215.9 + +214.0 + +3/3 + +2048 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan2 +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 240.6, p01 237.8, worst 237.8, required 180.0, margin 57.8, n=8, seed=10322096095657499351 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 20,739 ns/iteration, speed vs FLTX 0.05× + +239.0 + +237.0 + +3/3 + +20739 ns + +Inf + +✗ + + + + +Hyperbolic + + + + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,213 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.245936× + +217.0 + +213.8 + +2/2 + +1213 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sinh +mean: 216.8 bits +p01: 214.2 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 32.9 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.8, p01 214.2, worst 212.9, required 180.0, margin 32.9, n=4099, seed=10322096095657499359 +benchmark: 2,328 ns/iteration, speed vs FLTX 0.52× + +216.8 + +212.9 + +2/2 + +2328 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sinh +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,511 ns/iteration, speed vs FLTX 0.80× + +216.0 + +214.0 + +2/2 + +1511 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 12,968 ns/iteration, speed vs FLTX 0.09× + +238.9 + +237.0 + +2/2 + +12968 ns + +No + +✗ + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,212 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.203529× + +217.5 + +214.2 + +2/2 + +1212 ns + +Both + +- + + +qdpp qd_real +API: qdpp cosh +mean: 217.3 bits +p01: 214.5 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 217.0, p01 214.5, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +near_one: mean 217.6, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 2,326 ns/iteration, speed vs FLTX 0.52× + +217.3 + +213.8 + +2/2 + +2326 ns + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,459 ns/iteration, speed vs FLTX 0.83× + +215.9 + +214.0 + +2/2 + +1459 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::cosh +mean: 238.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 11,962 ns/iteration, speed vs FLTX 0.10× + +238.9 + +237.0 + +2/2 + +11962 ns + +No + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,196 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.276926× + +219.1 + +214.0 + +2/2 + +1196 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp tanh +mean: 218.9 bits +p01: 214.6 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 219.8, p01 214.6, worst 212.9, required 180.0, margin 32.9, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 214.9, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 2,331 ns/iteration, speed vs FLTX 0.51× + +218.9 + +212.9 + +2/2 + +2331 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tanh +mean: 216.2 bits +p01: 214.3 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.6, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,528 ns/iteration, speed vs FLTX 0.78× + +216.2 + +214.0 + +2/2 + +1528 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tanh +mean: 239.2 bits +p01: 237.2 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.0, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 12,753 ns/iteration, speed vs FLTX 0.09× + +239.2 + +237.1 + +2/2 + +12753 ns + +Inf + +✗ + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,550 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.427277× + +217.2 + +213.0 + +2/2 + +2550 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp asinh +mean: 216.9 bits +p01: 213.7 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.3, p01 214.2, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499356 +near_one: mean 216.4, p01 213.7, worst 212.7, required 180.0, margin 32.7, n=4099, seed=10322096095657499359 +benchmark: 6,326 ns/iteration, speed vs FLTX 0.40× + +216.9 + +0.0 + +1/2 + +6326 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asinh +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 6,189 ns/iteration, speed vs FLTX 0.41× + +215.9 + +214.0 + +2/2 + +6189 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 62,472 ns/iteration, speed vs FLTX 0.04× + +238.9 + +237.0 + +2/2 + +62472 ns + +No + +✗ + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,349 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.584763× + +217.7 + +213.7 + +2/2 + +2349 ns + +Both + +- + + +qdpp qd_real +API: qdpp acosh +mean: 217.0 bits +p01: 213.6 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 216.3, p01 213.6, worst 0.0, required 180.0, margin -180.0, n=4101, seed=10322096095657499355 +moderate: mean 217.7, p01 214.7, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499275 +benchmark: 6,784 ns/iteration, speed vs FLTX 0.35× + +217.0 + +0.0 + +0/2 + +6784 ns + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.8, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4101, seed=10322096095657499355 +moderate: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499275 +benchmark: 3,722 ns/iteration, speed vs FLTX 0.63× + +215.9 + +214.0 + +2/2 + +3722 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::acosh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.7, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4101, seed=10322096095657499355 +moderate: mean 239.0, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499275 +benchmark: 58,648 ns/iteration, speed vs FLTX 0.04× + +238.9 + +237.0 + +2/2 + +58648 ns + +No + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,158 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.358384× + +218.3 + +213.3 + +2/2 + +2158 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atanh +mean: 217.7 bits +p01: 213.8 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 218.6, p01 215.3, worst 0.0, required 180.0, margin -180.0, n=4105, seed=10322096095657499355 +moderate: mean 216.8, p01 213.8, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +benchmark: 6,639 ns/iteration, speed vs FLTX 0.33× + +217.7 + +0.0 + +1/2 + +6639 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atanh +mean: 216.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.5, p01 214.9, worst 214.9, required 180.0, margin 34.9, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 2,932 ns/iteration, speed vs FLTX 0.74× + +216.2 + +214.0 + +2/2 + +2932 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atanh +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.4, p01 237.9, worst 237.4, required 180.0, margin 57.4, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 17,704 ns/iteration, speed vs FLTX 0.12× + +239.1 + +237.0 + +2/2 + +17704 ns + +No + +✗ + + + + +Special + + + + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 8,905 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.102616× + +208.2 + +189.8 + +2/2 + +8905 ns + +Both + +- + + +qdpp: erfc is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erfc +mean: 216.1 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 216.2, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 27,628 ns/iteration, speed vs FLTX 0.32× + +216.1 + +214.0 + +2/2 + +27628 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::erfc +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 239.2, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 778,830 ns/iteration, speed vs FLTX 0.01× + +239.1 + +237.0 + +2/2 + +778830 ns + +Inf + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 8,938 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.873787× + +212.8 + +196.8 + +2/2 + +8938 ns + +Both + +✓ + + +qdpp: erf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erf +mean: 216.3 bits +p01: 214.3 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 34.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.5, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499359 +benchmark: 16,748 ns/iteration, speed vs FLTX 0.53× + +216.3 + +214.1 + +2/2 + +16748 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::erf +mean: 239.2 bits +p01: 237.3 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.6, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.3, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 780,979 ns/iteration, speed vs FLTX 0.01× + +239.2 + +237.1 + +2/2 + +780979 ns + +Inf + +✗ + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 9,277 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.587586× + +209.0 + +202.5 + +1/1 + +9277 ns + +Both + +- + + +qdpp: tgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499320 +benchmark: 14,727 ns/iteration, speed vs FLTX 0.63× + +215.9 + +214.0 + +1/1 + +14727 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::tgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499320 +benchmark: 279,386 ns/iteration, speed vs FLTX 0.03× + +238.9 + +237.0 + +1/1 + +279386 ns + +No + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 8,276 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.524893× + +211.9 + +199.2 + +1/1 + +8276 ns + +Both + +- + + +qdpp: lgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499323 +benchmark: 12,620 ns/iteration, speed vs FLTX 0.66× + +215.9 + +214.0 + +1/1 + +12620 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::lgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499323 +benchmark: 251,898 ns/iteration, speed vs FLTX 0.03× + +238.9 + +237.0 + +1/1 + +251898 ns + +No + +- + + + + +Comparisons + + + + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.777 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.345048× + += + += + +1/1 + +0.78 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.05 ns/iteration, speed vs FLTX 0.74× + += + += + +1/1 + +1.0 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.50 ns/iteration, speed vs FLTX 0.12× + += + += + +1/1 + +6.5 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 210.8 ns/iteration, speed vs FLTX 0.00× + += + += + +1/1 + +211 ns + +Both + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.779 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.413087× + += + += + +1/1 + +0.78 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.10 ns/iteration, speed vs FLTX 0.71× + += + += + +1/1 + +1.1 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.47 ns/iteration, speed vs FLTX 0.12× + += + += + +1/1 + +6.5 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 210.7 ns/iteration, speed vs FLTX 0.00× + += + += + +1/1 + +211 ns + +Both + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.11 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.905901× + += + += + +1/1 + +2.1 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.91 ns/iteration, speed vs FLTX 1.10× + += + += + +1/1 + +1.9 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.52 ns/iteration, speed vs FLTX 0.32× + += + += + +1/1 + +6.5 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 211.2 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +211 ns + +Both + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.08 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.95348× + += + += + +1/1 + +2.1 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.98 ns/iteration, speed vs FLTX 1.05× + += + += + +1/1 + +2.0 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.67 ns/iteration, speed vs FLTX 0.31× + += + += + +1/1 + +6.7 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 211.5 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +212 ns + +Both + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.06 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.937043× + += + += + +1/1 + +2.1 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.93 ns/iteration, speed vs FLTX 1.07× + += + += + +1/1 + +1.9 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.50 ns/iteration, speed vs FLTX 0.32× + += + += + +1/1 + +6.5 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 211.3 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +211 ns + +Both + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 2.09 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.916094× + += + += + +1/1 + +2.1 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.91 ns/iteration, speed vs FLTX 1.09× + += + += + +1/1 + +1.9 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.48 ns/iteration, speed vs FLTX 0.32× + += + += + +1/1 + +6.5 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 211.2 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +211 ns + +Both + +- + + + + +Random + + + + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 19.66 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.944979× + +- + +- + +- + +19.7 ns + +- + +- + + +qdpp qd_real +API: qdpp qdrand +benchmark: 38.24 ns/iteration, speed vs FLTX 0.51× + +- + +- + +- + +38.2 ns + +- + +- + + +mpfr64: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 265.4 ns/iteration (no available competitor) + +- + +- + +- + +265 ns + +- + +- + + +qdpp: normal is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 42.87 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.834212× + +- + +- + +- + +42.9 ns + +- + +- + + +qdpp qd_real +API: same expression +benchmark: 78.63 ns/iteration, speed vs FLTX 0.55× + +- + +- + +- + +78.6 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same expression +benchmark: 136.3 ns/iteration, speed vs FLTX 0.31× + +- + +- + +- + +136 ns + +- + +- + + +TLFloat Octuple +API: same expression +benchmark: 1,113 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +1113 ns + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 155.2 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.03491× + +- + +- + +- + +155 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 352.8 ns/iteration, speed vs FLTX 0.44× + +- + +- + +- + +353 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 315.8 ns/iteration, speed vs FLTX 0.49× + +- + +- + +- + +316 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 2,783 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +2783 ns + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,810 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.298148× + +- + +- + +- + +1810 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 3,698 ns/iteration, speed vs FLTX 0.49× + +- + +- + +- + +3698 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 2,349 ns/iteration, speed vs FLTX 0.77× + +- + +- + +- + +2349 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 28,641 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +28641 ns + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 124.1 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.593203× + +- + +- + +- + +124 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 197.7 ns/iteration, speed vs FLTX 0.63× + +- + +- + +- + +198 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 257.2 ns/iteration, speed vs FLTX 0.48× + +- + +- + +- + +257 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 2,816 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +2816 ns + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 557.2 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.603064× + +- + +- + +- + +557 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 893.2 ns/iteration, speed vs FLTX 0.62× + +- + +- + +- + +893 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 965.0 ns/iteration, speed vs FLTX 0.58× + +- + +- + +- + +965 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 12,347 ns/iteration, speed vs FLTX 0.05× + +- + +- + +- + +12347 ns + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 395.6 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.944277× + +- + +- + +- + +396 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 769.2 ns/iteration, speed vs FLTX 0.51× + +- + +- + +- + +769 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 772.6 ns/iteration, speed vs FLTX 0.51× + +- + +- + +- + +773 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 10,119 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +10119 ns + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 218.1 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.461815× + +- + +- + +- + +218 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 443.6 ns/iteration, speed vs FLTX 0.49× + +- + +- + +- + +444 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 318.9 ns/iteration, speed vs FLTX 0.68× + +- + +- + +- + +319 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 3,380 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +3380 ns + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 8,562 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.278832× + +- + +- + +- + +8562 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 17,638 ns/iteration, speed vs FLTX 0.49× + +- + +- + +- + +17638 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 10,950 ns/iteration, speed vs FLTX 0.78× + +- + +- + +- + +10950 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 113,438 ns/iteration, speed vs FLTX 0.08× + +- + +- + +- + +113438 ns + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,667 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.193658× + +- + +- + +- + +4667 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 15,800 ns/iteration, speed vs FLTX 0.30× + +- + +- + +- + +15800 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 10,238 ns/iteration, speed vs FLTX 0.46× + +- + +- + +- + +10238 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 81,812 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +81812 ns + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/windows_x86_64_MinGW_f128_fastmath_overview.svg b/validation/metrics/generated/overview/windows_x86_64_MinGW_f128_fastmath_overview.svg new file mode 100644 index 0000000..524329c --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MinGW_f128_fastmath_overview.svg @@ -0,0 +1,3020 @@ + + + + +f128 consumer fast-math metrics overview — Windows / x64 / GCC (MinGW-w64) +Accuracy excludes the subnormal domain; support is reported separately. Speed is relative to FLTX. + +operation + + +bl::f128 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + + +Arithmetic + + + + +add + +fltx bl::f128 +API: bl::add +mean: 119.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: no +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean 124.4, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=251, seed=10322096095657499292 +benchmark: 1.82 ns/iteration (no available competitor) + +119.1 + +105.7 + +1/1 + +1.82 ns + +NaN + +✗ + +✗ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 118.9 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: no +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean 126.5, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=252, seed=10322096095657499292 +benchmark: 1.82 ns/iteration (no available competitor) + +118.9 + +105.7 + +1/1 + +1.82 ns + +NaN + +✗ + +✗ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 1/1 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: no +subnormal support: no +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 54.9, p01 54.0, worst 54.0, required 90.0, margin -36.0, n=8, seed=10322096095657499292 +benchmark: 2.17 ns/iteration (no available competitor) + +108.7 + +105.4 + +1/1 + +2.17 ns + +NaN + +✗ + +✗ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 1/1 +minimum threshold margin: 15.1 bits +special values: NaN +signed zero: no +subnormal support: no +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean 54.9, p01 54.0, worst 54.0, required 90.0, margin -36.0, n=4, seed=10322096095657499292 +benchmark: 2.11 ns/iteration (no available competitor) + +110.9 + +105.1 + +1/1 + +2.11 ns + +NaN + +✗ + +✗ + + + + +IO + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 240.6 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +240.6 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 200.0 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +200.0 ns + +Both + +✓ + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 106.7 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 106.7, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 199.4 ns/iteration (no available competitor) + +109.9 + +106.0 + +2/2 + +199.4 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.01 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.01 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.51 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.51 ns + +Both + +✗ + +- + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.62 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.62 ns + +Both + +✓ + +- + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.19 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +10.19 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 6.74 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +6.74 ns + +Both + +✓ + +- + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 3.41 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.41 ns + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 3.25 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +3.25 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 78.23 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +78.23 ns + +Both + +✓ + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 112.7 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +112.7 ns + +Both + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.80 ns/iteration (no available competitor) + +exact + +exact + +3/3 + +18.80 ns + +Both + +✓ + +- + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 20.00 ns/iteration (no available competitor) + +138.0 + +103.1 + +1/1 + +20.00 ns + +Both + +✓ + +- + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 20.16 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +20.16 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: no +subnormal: mean 70.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.537 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.537 ns + +Both + +✗ + +✗ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.377 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.377 ns + +Both + +✗ + +- + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.4 bits +p01: 104.7 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 109.1, p01 104.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.6, p01 106.6, worst 105.3, required 90.0, margin 15.3, n=4096, seed=10322096095657499357 +benchmark: 8.21 ns/iteration (no available competitor) + +117.4 + +99.6 + +3/3 + +8.21 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Inf +signed zero: yes +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 31.72 ns/iteration (no available competitor) + +109.0 + +105.2 + +2/2 + +31.72 ns + +Inf + +✓ + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.819 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +0.819 ns + +Inf + +✓ + +- + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.821 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +0.821 ns + +Inf + +✓ + +- + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.75 ns/iteration (no available competitor) + +138.0 + +106.2 + +2/2 + +2.75 ns + +Both + +✓ + +- + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.03 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.03 ns + +Both + +✓ + +- + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.29 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.29 ns + +Both + +✓ + +- + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.26 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.26 ns + +Both + +✓ + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.26 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.26 ns + +Both + +✓ + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: no +subnormal: mean 3.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.82 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.82 ns + +Both + +✓ + +✗ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.55 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +5.55 ns + +Both + +✓ + +- + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.19 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.19 ns + +- + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.24 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.24 ns + +Both + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 4.42 ns/iteration (no available competitor) + +- + +- + +- + +4.42 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 4.58 ns/iteration (no available competitor) + +- + +- + +- + +4.58 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.46 ns/iteration (no available competitor) + +108.7 + +105.4 + +2/2 + +1.46 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.5 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 3/3 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 137.3, p01 108.7, worst 106.4, required 90.0, margin 16.4, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 5.19 ns/iteration (no available competitor) + +109.5 + +104.7 + +3/3 + +5.19 ns + +Both + +✓ + +✓ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.5 bits +p01: 105.0 bits +worst: 104.0 bits +domains: 2/2 +minimum threshold margin: 14.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.6, p01 105.1, worst 104.0, required 90.0, margin 14.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.4, p01 105.0, worst 104.0, required 90.0, margin 14.0, n=4096, seed=10322096095657499357 +benchmark: 73.36 ns/iteration (no available competitor) + +108.5 + +104.0 + +2/2 + +73.36 ns + +Both + +✓ + +- + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 8.94 ns/iteration (no available competitor) + +122.4 + +104.4 + +2/2 + +8.94 ns + +Both + +✗ + +- + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 219.2 ns/iteration (no available competitor) + +107.1 + +101.3 + +2/2 + +219.2 ns + +Both + +✓ + +- + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 18.20 ns/iteration (no available competitor) + +106.5 + +103.2 + +2/2 + +18.20 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 106.9 bits +p01: 104.3 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.5, p01 104.3, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.2, p01 104.7, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499356 +benchmark: 110.2 ns/iteration (no available competitor) + +106.9 + +103.6 + +2/2 + +110.2 ns + +Both + +- + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 101.6 ns/iteration (no available competitor) + +108.9 + +105.1 + +2/2 + +101.6 ns + +Both + +- + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 108.7 ns/iteration (no available competitor) + +121.6 + +104.1 + +2/2 + +108.7 ns + +Both + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.5 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.5, p01 104.5, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 138.1 ns/iteration (no available competitor) + +108.4 + +103.7 + +3/3 + +138.1 ns + +Both + +- + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.5 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 143.1 ns/iteration (no available competitor) + +108.8 + +103.7 + +3/3 + +143.1 ns + +Both + +- + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.4 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.2, p01 104.4, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 144.8 ns/iteration (no available competitor) + +107.5 + +103.8 + +3/3 + +144.8 ns + +Both + +- + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 150.5 ns/iteration (no available competitor) + +121.4 + +103.6 + +2/2 + +150.5 ns + +Both + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 101.5 ns/iteration (no available competitor) + +110.6 + +98.6 + +3/3 + +101.5 ns + +Both + +✓ + +- + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 101.0 ns/iteration (no available competitor) + +113.5 + +99.2 + +3/3 + +101.0 ns + +Both + +- + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 107.5 ns/iteration (no available competitor) + +- + +- + +- + +107.5 ns + +- + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.7, required 75.0, margin 28.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 108.0 ns/iteration (no available competitor) + +106.7 + +98.6 + +3/3 + +108.0 ns + +Both + +✓ + +- + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 189.3 ns/iteration (no available competitor) + +108.6 + +104.1 + +2/2 + +189.3 ns + +Both + +✓ + +- + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 194.5 ns/iteration (no available competitor) + +106.5 + +81.6 + +2/2 + +194.5 ns + +Both + +- + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 137.0 ns/iteration (no available competitor) + +108.7 + +104.9 + +2/2 + +137.0 ns + +Both + +✓ + +- + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 144.1 ns/iteration (no available competitor) + +108.7 + +104.5 + +3/3 + +144.1 ns + +Both + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 124.7 ns/iteration (no available competitor) + +107.4 + +103.6 + +2/2 + +124.7 ns + +Both + +✓ + +- + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 123.6 ns/iteration (no available competitor) + +107.9 + +104.4 + +2/2 + +123.6 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 129.3 ns/iteration (no available competitor) + +109.2 + +103.8 + +2/2 + +129.3 ns + +Both + +✓ + +- + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 138.4 ns/iteration (no available competitor) + +108.1 + +103.8 + +2/2 + +138.4 ns + +Both + +✓ + +- + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 163.2 ns/iteration (no available competitor) + +108.0 + +103.7 + +2/2 + +163.2 ns + +Both + +- + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 163.4 ns/iteration (no available competitor) + +108.1 + +103.1 + +2/2 + +163.4 ns + +Both + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 782.8 ns/iteration (no available competitor) + +107.2 + +99.2 + +2/2 + +782.8 ns + +Both + +- + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 785.8 ns/iteration (no available competitor) + +110.9 + +103.5 + +2/2 + +785.8 ns + +Both + +✓ + +- + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 564.5 ns/iteration (no available competitor) + +105.6 + +97.3 + +1/1 + +564.5 ns + +Both + +- + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 621.7 ns/iteration (no available competitor) + +107.3 + +102.2 + +1/1 + +621.7 ns + +Both + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.818 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.818 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.922 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.922 ns + +Both + +- + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.21 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.21 ns + +Both + +- + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.06 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.06 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.15 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.15 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.01 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.01 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 21.13 ns/iteration (no available competitor) + +- + +- + +- + +21.13 ns + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 108.6 ns/iteration (no available competitor) + +- + +- + +- + +108.6 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 7.49 ns/iteration (no available competitor) + +- + +- + +- + +7.49 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 22.79 ns/iteration (no available competitor) + +- + +- + +- + +22.79 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 217.3 ns/iteration (no available competitor) + +- + +- + +- + +217.3 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 17.98 ns/iteration (no available competitor) + +- + +- + +- + +17.98 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 80.67 ns/iteration (no available competitor) + +- + +- + +- + +80.67 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 101.8 ns/iteration (no available competitor) + +- + +- + +- + +101.8 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 30.10 ns/iteration (no available competitor) + +- + +- + +- + +30.10 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 900.2 ns/iteration (no available competitor) + +- + +- + +- + +900.2 ns + +- + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 532.1 ns/iteration (no available competitor) + +- + +- + +- + +532.1 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/windows_x86_64_MinGW_f128_fastmath_overview_compact.svg b/validation/metrics/generated/overview/windows_x86_64_MinGW_f128_fastmath_overview_compact.svg new file mode 100644 index 0000000..2b0854a --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MinGW_f128_fastmath_overview_compact.svg @@ -0,0 +1,3017 @@ + + + + + +operation + + +bl::f128 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +Subnorm + +avg + +min + +pass + + + +Arithmetic + + + + +add + +fltx bl::f128 +API: bl::add +mean: 119.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: no +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean 124.4, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=251, seed=10322096095657499292 +benchmark: 1.82 ns/iteration (no available competitor) + +119.1 + +105.7 + +1/1 + +1.8 ns + +NaN + +✗ + +✗ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 118.9 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 1/1 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: no +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean 126.5, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=252, seed=10322096095657499292 +benchmark: 1.82 ns/iteration (no available competitor) + +118.9 + +105.7 + +1/1 + +1.8 ns + +NaN + +✗ + +✗ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 1/1 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: no +subnormal support: no +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 54.9, p01 54.0, worst 54.0, required 90.0, margin -36.0, n=8, seed=10322096095657499292 +benchmark: 2.17 ns/iteration (no available competitor) + +108.7 + +105.4 + +1/1 + +2.2 ns + +NaN + +✗ + +✗ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 1/1 +minimum threshold margin: 15.1 bits +special values: NaN +signed zero: no +subnormal support: no +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean 54.9, p01 54.0, worst 54.0, required 90.0, margin -36.0, n=4, seed=10322096095657499292 +benchmark: 2.11 ns/iteration (no available competitor) + +110.9 + +105.1 + +1/1 + +2.1 ns + +NaN + +✗ + +✗ + + + + +IO + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 240.6 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +241 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 200.0 ns/iteration (no available competitor) + +114.0 + +110.7 + +2/2 + +200 ns + +Both + +✓ + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 106.7 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 106.7, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 199.4 ns/iteration (no available competitor) + +109.9 + +106.0 + +2/2 + +199 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.01 ns/iteration (no available competitor) + += + += + +1/1 + +1.0 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.51 ns/iteration (no available competitor) + += + += + +1/1 + +1.5 ns + +Both + +✗ + +- + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.62 ns/iteration (no available competitor) + += + += + +1/1 + +1.6 ns + +Both + +✓ + +- + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.19 ns/iteration (no available competitor) + += + += + +1/1 + +10.2 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 6.74 ns/iteration (no available competitor) + += + += + +1/1 + +6.7 ns + +Both + +✓ + +- + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 3.41 ns/iteration (no available competitor) + += + += + +1/1 + +3.4 ns + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 3.25 ns/iteration (no available competitor) + += + += + +1/1 + +3.2 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 78.23 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +78.2 ns + +Both + +✓ + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 112.7 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +113 ns + +Both + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.80 ns/iteration (no available competitor) + += + += + +3/3 + +18.8 ns + +Both + +✓ + +- + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 20.00 ns/iteration (no available competitor) + +138.0 + +103.1 + +1/1 + +20.0 ns + +Both + +✓ + +- + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 20.16 ns/iteration (no available competitor) + += + += + +1/1 + +20.2 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: no +subnormal: mean 70.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.537 ns/iteration (no available competitor) + += + += + +1/1 + +0.54 ns + +Both + +✗ + +✗ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.377 ns/iteration (no available competitor) + += + += + +1/1 + +0.38 ns + +Both + +✗ + +- + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.4 bits +p01: 104.7 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 109.1, p01 104.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.6, p01 106.6, worst 105.3, required 90.0, margin 15.3, n=4096, seed=10322096095657499357 +benchmark: 8.21 ns/iteration (no available competitor) + +117.4 + +99.6 + +3/3 + +8.2 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Inf +signed zero: yes +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 31.72 ns/iteration (no available competitor) + +109.0 + +105.2 + +2/2 + +31.7 ns + +Inf + +✓ + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.819 ns/iteration (no available competitor) + += + += + +2/2 + +0.82 ns + +Inf + +✓ + +- + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.821 ns/iteration (no available competitor) + += + += + +2/2 + +0.82 ns + +Inf + +✓ + +- + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.75 ns/iteration (no available competitor) + +138.0 + +106.2 + +2/2 + +2.8 ns + +Both + +✓ + +- + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.03 ns/iteration (no available competitor) + += + += + +1/1 + +1.0 ns + +Both + +✓ + +- + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.29 ns/iteration (no available competitor) + += + += + +1/1 + +1.3 ns + +Both + +✓ + +- + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.26 ns/iteration (no available competitor) + += + += + +1/1 + +1.3 ns + +Both + +✓ + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.26 ns/iteration (no available competitor) + += + += + +1/1 + +1.3 ns + +Both + +✓ + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: no +subnormal: mean 3.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.82 ns/iteration (no available competitor) + += + += + +1/1 + +1.8 ns + +Both + +✓ + +✗ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.55 ns/iteration (no available competitor) + += + += + +2/2 + +5.6 ns + +Both + +✓ + +- + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.19 ns/iteration (no available competitor) + += + += + +2/2 + +1.2 ns + +- + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.24 ns/iteration (no available competitor) + += + += + +2/2 + +1.2 ns + +Both + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 4.42 ns/iteration (no available competitor) + +- + +- + +- + +4.4 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 4.58 ns/iteration (no available competitor) + +- + +- + +- + +4.6 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.46 ns/iteration (no available competitor) + +108.7 + +105.4 + +2/2 + +1.5 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.5 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 3/3 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 137.3, p01 108.7, worst 106.4, required 90.0, margin 16.4, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 5.19 ns/iteration (no available competitor) + +109.5 + +104.7 + +3/3 + +5.2 ns + +Both + +✓ + +✓ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.5 bits +p01: 105.0 bits +worst: 104.0 bits +domains: 2/2 +minimum threshold margin: 14.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.6, p01 105.1, worst 104.0, required 90.0, margin 14.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.4, p01 105.0, worst 104.0, required 90.0, margin 14.0, n=4096, seed=10322096095657499357 +benchmark: 73.36 ns/iteration (no available competitor) + +108.5 + +104.0 + +2/2 + +73.4 ns + +Both + +✓ + +- + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 8.94 ns/iteration (no available competitor) + +122.4 + +104.4 + +2/2 + +8.9 ns + +Both + +✗ + +- + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 219.2 ns/iteration (no available competitor) + +107.1 + +101.3 + +2/2 + +219 ns + +Both + +✓ + +- + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 18.20 ns/iteration (no available competitor) + +106.5 + +103.2 + +2/2 + +18.2 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 106.9 bits +p01: 104.3 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.5, p01 104.3, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.2, p01 104.7, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499356 +benchmark: 110.2 ns/iteration (no available competitor) + +106.9 + +103.6 + +2/2 + +110 ns + +Both + +- + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 101.6 ns/iteration (no available competitor) + +108.9 + +105.1 + +2/2 + +102 ns + +Both + +- + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 108.7 ns/iteration (no available competitor) + +121.6 + +104.1 + +2/2 + +109 ns + +Both + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.5 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.5, p01 104.5, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 138.1 ns/iteration (no available competitor) + +108.4 + +103.7 + +3/3 + +138 ns + +Both + +- + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.5 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 143.1 ns/iteration (no available competitor) + +108.8 + +103.7 + +3/3 + +143 ns + +Both + +- + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.4 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.2, p01 104.4, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 144.8 ns/iteration (no available competitor) + +107.5 + +103.8 + +3/3 + +145 ns + +Both + +- + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 150.5 ns/iteration (no available competitor) + +121.4 + +103.6 + +2/2 + +151 ns + +Both + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 101.5 ns/iteration (no available competitor) + +110.6 + +98.6 + +3/3 + +102 ns + +Both + +✓ + +- + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 101.0 ns/iteration (no available competitor) + +113.5 + +99.2 + +3/3 + +101 ns + +Both + +- + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 107.5 ns/iteration (no available competitor) + +- + +- + +- + +108 ns + +- + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.7, required 75.0, margin 28.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 108.0 ns/iteration (no available competitor) + +106.7 + +98.6 + +3/3 + +108 ns + +Both + +✓ + +- + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 189.3 ns/iteration (no available competitor) + +108.6 + +104.1 + +2/2 + +189 ns + +Both + +✓ + +- + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 194.5 ns/iteration (no available competitor) + +106.5 + +81.6 + +2/2 + +194 ns + +Both + +- + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 137.0 ns/iteration (no available competitor) + +108.7 + +104.9 + +2/2 + +137 ns + +Both + +✓ + +- + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 144.1 ns/iteration (no available competitor) + +108.7 + +104.5 + +3/3 + +144 ns + +Both + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 124.7 ns/iteration (no available competitor) + +107.4 + +103.6 + +2/2 + +125 ns + +Both + +✓ + +- + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 123.6 ns/iteration (no available competitor) + +107.9 + +104.4 + +2/2 + +124 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 129.3 ns/iteration (no available competitor) + +109.2 + +103.8 + +2/2 + +129 ns + +Both + +✓ + +- + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 138.4 ns/iteration (no available competitor) + +108.1 + +103.8 + +2/2 + +138 ns + +Both + +✓ + +- + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 163.2 ns/iteration (no available competitor) + +108.0 + +103.7 + +2/2 + +163 ns + +Both + +- + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 163.4 ns/iteration (no available competitor) + +108.1 + +103.1 + +2/2 + +163 ns + +Both + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 782.8 ns/iteration (no available competitor) + +107.2 + +99.2 + +2/2 + +783 ns + +Both + +- + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 785.8 ns/iteration (no available competitor) + +110.9 + +103.5 + +2/2 + +786 ns + +Both + +✓ + +- + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 564.5 ns/iteration (no available competitor) + +105.6 + +97.3 + +1/1 + +565 ns + +Both + +- + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 621.7 ns/iteration (no available competitor) + +107.3 + +102.2 + +1/1 + +622 ns + +Both + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.818 ns/iteration (no available competitor) + += + += + +1/1 + +0.82 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.922 ns/iteration (no available competitor) + += + += + +1/1 + +0.92 ns + +Both + +- + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.21 ns/iteration (no available competitor) + += + += + +1/1 + +1.2 ns + +Both + +- + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.06 ns/iteration (no available competitor) + += + += + +1/1 + +1.1 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.15 ns/iteration (no available competitor) + += + += + +1/1 + +1.1 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.01 ns/iteration (no available competitor) + += + += + +1/1 + +1.0 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 21.13 ns/iteration (no available competitor) + +- + +- + +- + +21.1 ns + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 108.6 ns/iteration (no available competitor) + +- + +- + +- + +109 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 7.49 ns/iteration (no available competitor) + +- + +- + +- + +7.5 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 22.79 ns/iteration (no available competitor) + +- + +- + +- + +22.8 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 217.3 ns/iteration (no available competitor) + +- + +- + +- + +217 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 17.98 ns/iteration (no available competitor) + +- + +- + +- + +18.0 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 80.67 ns/iteration (no available competitor) + +- + +- + +- + +80.7 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 101.8 ns/iteration (no available competitor) + +- + +- + +- + +102 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 30.10 ns/iteration (no available competitor) + +- + +- + +- + +30.1 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 900.2 ns/iteration (no available competitor) + +- + +- + +- + +900 ns + +- + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 532.1 ns/iteration (no available competitor) + +- + +- + +- + +532 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/windows_x86_64_MinGW_f128_overview.svg b/validation/metrics/generated/overview/windows_x86_64_MinGW_f128_overview.svg new file mode 100644 index 0000000..6b4085b --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MinGW_f128_overview.svg @@ -0,0 +1,9371 @@ + + + + +f128 metrics overview — Windows / x64 / GCC (MinGW-w64) +Accuracy is MPFR-relative; domain pass counts use FLTX release thresholds; speed is implementation ÷ FLTX. + +operation + + +bl::f128 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time + + + +qdpp (dd_real) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +boost (cpp_double_double) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +TLFloat (tlquad) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +Arithmetic + + + + + + + +add + +fltx bl::f128 +API: bl::add +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 1.81 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.511831× + +120.3 + +105.7 + +2/2 + +1.81 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp operator+ +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 0.926 ns/iteration, speed vs FLTX 1.95× + +120.3 + +105.7 + +2/2 + +0.926 ns · 1.95× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator+ +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 7.21 ns/iteration, speed vs FLTX 0.25× + +120.3 + +105.7 + +2/2 + +7.21 ns · 0.25× + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator+ +mean: 127.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 125.8, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 48.26 ns/iteration, speed vs FLTX 0.04× + +127.0 + +113.0 + +2/2 + +48.26 ns · 0.04× + +No + +✗ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 1.79 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.519896× + +120.1 + +105.7 + +2/2 + +1.79 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp operator- +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 0.929 ns/iteration, speed vs FLTX 1.92× + +120.1 + +105.7 + +2/2 + +0.929 ns · 1.92× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator- +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 7.26 ns/iteration, speed vs FLTX 0.25× + +120.1 + +105.7 + +2/2 + +7.26 ns · 0.25× + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator- +mean: 127.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 126.0, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 47.50 ns/iteration, speed vs FLTX 0.04× + +127.2 + +113.0 + +2/2 + +47.50 ns · 0.04× + +No + +✗ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 1.62 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.067087× + +108.7 + +105.4 + +2/2 + +1.62 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp operator* +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 1.73 ns/iteration, speed vs FLTX 0.94× + +108.7 + +105.4 + +2/2 + +1.73 ns · 0.94× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator* +mean: 108.5 bits +p01: 105.2 bits +worst: 104.7 bits +domains: 2/2 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 108.5, p01 105.2, worst 104.7, required 90.0, margin 14.7, n=4092, seed=10322096095657499292 +subnormal: mean 123.8, p01 108.1, worst 108.1, required 90.0, margin 18.1, n=8, seed=10322096095657499292 +benchmark: 113.3 ns/iteration, speed vs FLTX 0.01× + +108.5 + +104.7 + +2/2 + +113.3 ns · 0.01× + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator* +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4092, seed=10322096095657499292 +subnormal: mean 129.7, p01 113.5, worst 113.5, required 90.0, margin 23.5, n=8, seed=10322096095657499292 +benchmark: 36.11 ns/iteration, speed vs FLTX 0.04× + +115.0 + +113.0 + +2/2 + +36.11 ns · 0.04× + +No + +✗ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 2.30 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 5.6677× + +110.9 + +105.1 + +2/2 + +2.30 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp operator/ +mean: 110.7 bits +p01: 106.1 bits +worst: 105.5 bits +domains: 2/2 +minimum threshold margin: 15.5 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 110.7, p01 106.1, worst 105.5, required 90.0, margin 15.5, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 13.06 ns/iteration, speed vs FLTX 0.18× + +110.7 + +105.5 + +2/2 + +13.06 ns · 0.18× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator/ +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 116.0 ns/iteration, speed vs FLTX 0.02× + +110.9 + +105.1 + +2/2 + +116.0 ns · 0.02× + +NaN + +✗ + + +TLFloat Quad +API: TLFloat operator/ +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 103.3 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +2/2 + +103.3 ns · 0.02× + +No + +✗ + + + + +IO + + + + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 250.4 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.701114× + +114.0 + +110.7 + +2/2 + +250.4 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp to_string +mean: 109.4 bits +p01: 102.4 bits +worst: 102.3 bits +domains: 2/2 +minimum threshold margin: 12.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 107.9, worst 107.8, required 90.0, margin 17.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 104.9, p01 102.4, worst 102.3, required 90.0, margin 12.3, n=4096, seed=10322096095657499357 +benchmark: 468.6 ns/iteration, speed vs FLTX 0.53× + +109.4 + +102.3 + +2/2 + +468.6 ns · 0.53× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost number::str +mean: 110.8 bits +p01: 106.0 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 16.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 112.0, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 109.5, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4096, seed=10322096095657499357 +benchmark: 425.9 ns/iteration, speed vs FLTX 0.59× + +110.8 + +106.0 + +2/2 + +425.9 ns · 0.59× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::to_string +mean: 110.7 bits +p01: 107.6 bits +worst: 107.3 bits +domains: 2/2 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.8, p01 107.9, worst 107.4, required 90.0, margin 17.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 110.5, p01 107.6, worst 107.3, required 90.0, margin 17.3, n=4096, seed=10322096095657499357 +benchmark: 5,199 ns/iteration, speed vs FLTX 0.05× + +110.7 + +107.3 + +2/2 + +5,199 ns · 0.05× + +Both + +✓ + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 202.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.358806× + +114.0 + +110.7 + +2/2 + +202.3 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp write +mean: 109.4 bits +p01: 102.4 bits +worst: 102.3 bits +domains: 2/2 +minimum threshold margin: 12.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 107.9, worst 107.8, required 90.0, margin 17.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 104.9, p01 102.4, worst 102.3, required 90.0, margin 12.3, n=4096, seed=10322096095657499357 +benchmark: 477.1 ns/iteration, speed vs FLTX 0.42× + +109.4 + +102.3 + +2/2 + +477.1 ns · 0.42× + +Both + +✗ + + +cppdd: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 107.1 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 107.1, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 211.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.222253× + +109.9 + +106.0 + +2/2 + +211.3 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp read +mean: 102.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -106.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 106.8, p01 104.4, worst 103.5, required 106.0, margin -2.5, n=4097, seed=10322096095657499311 +wide_exponent: mean 98.2, p01 0.0, worst 0.0, required 106.0, margin -106.0, n=4098, seed=10322096095657499308 +benchmark: 258.2 ns/iteration, speed vs FLTX 0.82× + +102.5 + +0.0 + +0/2 + +258.2 ns · 0.82× + +NaN + +✓ + + +boost::multiprecision::cpp_double_double +API: Boost string constructor +mean: 107.1 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -106.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.9, p01 106.2, worst 106.0, required 106.0, margin 0.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 106.3, p01 0.0, worst 0.0, required 106.0, margin -106.0, n=4098, seed=10322096095657499308 +benchmark: 630.1 ns/iteration, speed vs FLTX 0.34× + +107.1 + +0.0 + +1/2 + +630.1 ns · 0.34× + +Both + +✗ + + +TLFloat Quad +API: TLFloat string constructor +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 7.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4098, seed=10322096095657499308 +benchmark: 3,822 ns/iteration, speed vs FLTX 0.06× + +114.9 + +113.0 + +2/2 + +3,822 ns · 0.06× + +No + +✗ + + + + +Rounding + + + + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.08 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.899977× + +exact + +exact + +1/1 + +1.08 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.970 ns/iteration, speed vs FLTX 1.11× + +exact + +exact + +1/1 + +0.970 ns · 1.11× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.984 ns/iteration, speed vs FLTX 1.10× + +exact + +exact + +1/1 + +0.984 ns · 1.10× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 7.21 ns/iteration, speed vs FLTX 0.15× + +exact + +exact + +1/1 + +7.21 ns · 0.15× + +No + +✗ + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.70 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.545393× + +exact + +exact + +1/1 + +1.70 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.925 ns/iteration, speed vs FLTX 1.83× + +exact + +exact + +1/1 + +0.925 ns · 1.83× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 3.19 ns/iteration, speed vs FLTX 0.53× + +exact + +exact + +1/1 + +3.19 ns · 0.53× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 7.44 ns/iteration, speed vs FLTX 0.23× + +exact + +exact + +1/1 + +7.44 ns · 0.23× + +No + +✗ + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.71 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.291273× + +exact + +exact + +1/1 + +2.71 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp aint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 3.51 ns/iteration, speed vs FLTX 0.77× + +exact + +exact + +1/1 + +3.51 ns · 0.77× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 6.10 ns/iteration, speed vs FLTX 0.45× + +exact + +exact + +1/1 + +6.10 ns · 0.45× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 5.75 ns/iteration, speed vs FLTX 0.47× + +exact + +exact + +1/1 + +5.75 ns · 0.47× + +No + +✗ + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.06 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.877987× + +exact + +exact + +1/1 + +10.06 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp round +mean: 130.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/1 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 130.4, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4108, seed=10322096095657499334 +benchmark: 10.48 ns/iteration, speed vs FLTX 0.96× + +130.4 + +0.0 + +0/1 + +10.48 ns · 0.96× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 8.83 ns/iteration, speed vs FLTX 1.14× + +exact + +exact + +1/1 + +8.83 ns · 1.14× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.16 ns/iteration, speed vs FLTX 0.99× + +exact + +exact + +1/1 + +10.16 ns · 0.99× + +No + +✗ + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 7.80 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 1.325158× + +exact + +exact + +1/1 + +7.80 ns + +Both + +✓ + + +qdpp: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.33 ns/iteration, speed vs FLTX 0.75× + +exact + +exact + +1/1 + +10.33 ns · 0.75× + +No + +✗ + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 3.39 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 5.699979× + +exact + +exact + +1/1 + +3.39 ns + +- + +- + + +qdpp: lround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 19.35 ns/iteration, speed vs FLTX 0.18× + +exact + +exact + +1/1 + +19.35 ns · 0.18× + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 3.23 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 49.680384× + +exact + +exact + +1/1 + +3.23 ns + +- + +- + + +qdpp: llround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 160.3 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +1/1 + +160.3 ns · 0.02× + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 79.36 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +79.36 ns + +Both + +✓ + + +qdpp: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 113.7 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +113.7 ns + +Both + +✓ + + +qdpp: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 17.73 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.353653× + +exact + +exact + +3/3 + +17.73 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp fmod +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -90.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 135.0, p01 101.7, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 24.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=2, seed=10322096095657499335 +wide_exponent: mean 78.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4096, seed=10322096095657499357 +benchmark: 24.00 ns/iteration, speed vs FLTX 0.74× + +106.7 + +0.0 + +1/3 + +24.00 ns · 0.74× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmod +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -90.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 135.0, p01 101.7, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 24.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=2, seed=10322096095657499335 +wide_exponent: mean 78.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4096, seed=10322096095657499357 +benchmark: 213.5 ns/iteration, speed vs FLTX 0.08× + +106.7 + +0.0 + +1/3 + +213.5 ns · 0.08× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 288.5 ns/iteration, speed vs FLTX 0.06× + +exact + +exact + +3/3 + +288.5 ns · 0.06× + +No + +✗ + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 19.85 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.324641× + +138.0 + +103.1 + +1/1 + +19.85 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp drem +mean: 134.4 bits +p01: 101.0 bits +worst: 95.5 bits +domains: 1/1 +minimum threshold margin: 5.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 134.4, p01 101.0, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +benchmark: 26.29 ns/iteration, speed vs FLTX 0.75× + +134.4 + +95.5 + +1/1 + +26.29 ns · 0.75× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remainder +mean: 134.4 bits +p01: 101.0 bits +worst: 95.5 bits +domains: 1/1 +minimum threshold margin: 5.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 134.4, p01 101.0, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +benchmark: 218.7 ns/iteration, speed vs FLTX 0.09× + +134.4 + +95.5 + +1/1 + +218.7 ns · 0.09× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 301.9 ns/iteration, speed vs FLTX 0.07× + +exact + +exact + +1/1 + +301.9 ns · 0.07× + +No + +✗ + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 20.01 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.318704× + +exact + +exact + +1/1 + +20.01 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp divrem +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 26.39 ns/iteration, speed vs FLTX 0.76× + +exact + +exact + +1/1 + +26.39 ns · 0.76× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 219.6 ns/iteration, speed vs FLTX 0.09× + +exact + +exact + +1/1 + +219.6 ns · 0.09× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 318.8 ns/iteration, speed vs FLTX 0.06× + +exact + +exact + +1/1 + +318.8 ns · 0.06× + +No + +✗ + + + + +Float Utils + + + + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.86 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.892586× + +exact + +exact + +2/2 + +2.86 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.76 ns/iteration, speed vs FLTX 1.04× + +exact + +exact + +2/2 + +2.76 ns · 1.04× + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.31 ns/iteration, speed vs FLTX 0.86× + +exact + +exact + +2/2 + +3.31 ns · 0.86× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.55 ns/iteration, speed vs FLTX 1.12× + +exact + +exact + +2/2 + +2.55 ns · 1.12× + +No + +✓ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.09 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.868762× + +exact + +exact + +1/1 + +3.09 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.78 ns/iteration, speed vs FLTX 1.11× + +exact + +exact + +1/1 + +2.78 ns · 1.11× + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.23 ns/iteration, speed vs FLTX 0.96× + +exact + +exact + +1/1 + +3.23 ns · 0.96× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.68 ns/iteration, speed vs FLTX 1.15× + +exact + +exact + +1/1 + +2.68 ns · 1.15× + +No + +✓ + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.4 bits +p01: 104.7 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 109.1, p01 104.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.6, p01 106.6, worst 105.3, required 90.0, margin 15.3, n=4096, seed=10322096095657499357 +benchmark: 7.98 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 9.823794× + +117.4 + +99.6 + +3/3 + +7.98 ns + +Both + +✗ + + +qdpp: fma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fma +mean: 75.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -90.0 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 0.1, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4098, seed=10322096095657499352 +moderate: mean 108.2, p01 103.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.1, p01 105.4, worst 104.1, required 90.0, margin 14.1, n=4096, seed=10322096095657499357 +benchmark: 121.1 ns/iteration, speed vs FLTX 0.07× + +75.8 + +0.0 + +2/3 + +121.1 ns · 0.07× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fma +mean: 128.4 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 125.4, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 78.41 ns/iteration, speed vs FLTX 0.10× + +128.4 + +113.0 + +3/3 + +78.41 ns · 0.10× + +No + +✗ + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 31.70 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.407742× + +109.0 + +105.2 + +2/2 + +31.70 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp inv +mean: 109.4 bits +p01: 106.8 bits +worst: 106.5 bits +domains: 2/2 +minimum threshold margin: 16.5 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 109.4, p01 107.0, worst 106.5, required 90.0, margin 16.5, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.4, p01 106.8, worst 106.5, required 90.0, margin 16.5, n=4096, seed=10322096095657499357 +benchmark: 12.92 ns/iteration, speed vs FLTX 2.45× + +109.4 + +106.5 + +2/2 + +12.92 ns · 2.45× + +NaN + +✗ + + +cppdd: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.32 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.041176× + +exact + +exact + +2/2 + +2.32 ns + +Both + +✓ + + +qdpp: fmin is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.42 ns/iteration, speed vs FLTX 0.96× + +exact + +exact + +2/2 + +2.42 ns · 0.96× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 13.06 ns/iteration, speed vs FLTX 0.18× + +exact + +exact + +2/2 + +13.06 ns · 0.18× + +No + +✗ + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.46 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.939588× + +exact + +exact + +2/2 + +2.46 ns + +Both + +✓ + + +qdpp: fmax is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.31 ns/iteration, speed vs FLTX 1.06× + +exact + +exact + +2/2 + +2.31 ns · 1.06× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 13.31 ns/iteration, speed vs FLTX 0.18× + +exact + +exact + +2/2 + +13.31 ns · 0.18× + +No + +✗ + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.25 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.591714× + +138.0 + +106.2 + +2/2 + +3.25 ns + +Both + +✓ + + +qdpp: fdim is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 5.17 ns/iteration, speed vs FLTX 0.63× + +138.0 + +106.2 + +2/2 + +5.17 ns · 0.63× + +No + +✓ + + +TLFloat Quad +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 53.48 ns/iteration, speed vs FLTX 0.06× + +exact + +exact + +2/2 + +53.48 ns · 0.06× + +No + +✓ + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.03 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 4.575674× + +exact + +exact + +1/1 + +1.03 ns + +Both + +✓ + + +qdpp: copysign is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 4.91 ns/iteration, speed vs FLTX 0.21× + +exact + +exact + +1/1 + +4.91 ns · 0.21× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 4.71 ns/iteration, speed vs FLTX 0.22× + +exact + +exact + +1/1 + +4.71 ns · 0.22× + +No + +✗ + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.27 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 6.970736× + +exact + +exact + +1/1 + +1.27 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.15 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +9.15 ns · 0.14× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.36 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +9.36 ns · 0.14× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 8.85 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +8.85 ns · 0.14× + +No + +✗ + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.25 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 7.32944× + +exact + +exact + +1/1 + +1.25 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.14 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +9.14 ns · 0.14× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.37 ns/iteration, speed vs FLTX 0.13× + +exact + +exact + +1/1 + +9.37 ns · 0.13× + +Both + +✗ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.24 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 7.353092× + +exact + +exact + +1/1 + +1.24 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.14 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +9.14 ns · 0.14× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.33 ns/iteration, speed vs FLTX 0.13× + +exact + +exact + +1/1 + +9.33 ns · 0.13× + +Both + +✗ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.83 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 4.93335× + +exact + +exact + +2/2 + +1.83 ns + +Both + +✓ + + +qdpp: frexp is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.05 ns/iteration, speed vs FLTX 0.20× + +exact + +exact + +2/2 + +9.05 ns · 0.20× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 30.73 ns/iteration, speed vs FLTX 0.06× + +exact + +exact + +2/2 + +30.73 ns · 0.06× + +No + +✗ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.55 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.059762× + +exact + +exact + +2/2 + +5.55 ns + +Both + +✓ + + +qdpp: modf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 11.42 ns/iteration, speed vs FLTX 0.49× + +exact + +exact + +2/2 + +11.42 ns · 0.49× + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 69.01 ns/iteration, speed vs FLTX 0.08× + +exact + +exact + +2/2 + +69.01 ns · 0.08× + +No + +✗ + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.47 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 1.198396× + +exact + +exact + +2/2 + +1.47 ns + +- + +- + + +qdpp: ilogb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.15 ns/iteration, speed vs FLTX 0.16× + +exact + +exact + +2/2 + +9.15 ns · 0.16× + +- + +- + + +TLFloat Quad +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.76 ns/iteration, speed vs FLTX 0.83× + +exact + +exact + +2/2 + +1.76 ns · 0.83× + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.47 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 20.472843× + +exact + +exact + +2/2 + +1.47 ns + +Both + +- + + +qdpp: logb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 30.10 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +2/2 + +30.10 ns · 0.05× + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 5.00 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 3.630483× + +- + +- + +- + +5.00 ns + +- + +- + + +qdpp: nextafter is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter +benchmark: 32.28 ns/iteration, speed vs FLTX 0.15× + +- + +- + +- + +32.28 ns · 0.15× + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter +benchmark: 18.16 ns/iteration, speed vs FLTX 0.28× + +- + +- + +- + +18.16 ns · 0.28× + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 4.67 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 3.94163× + +- + +- + +- + +4.67 ns + +- + +- + + +qdpp: nexttoward is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter (same type) +benchmark: 32.36 ns/iteration, speed vs FLTX 0.14× + +- + +- + +- + +32.36 ns · 0.14× + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter (same type) +benchmark: 18.40 ns/iteration, speed vs FLTX 0.25× + +- + +- + +- + +18.40 ns · 0.25× + +- + +- + + + + +Roots & powers + + + + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.23 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.148765× + +108.7 + +105.4 + +2/2 + +1.23 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 108.6, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.41 ns/iteration, speed vs FLTX 0.87× + +108.7 + +105.4 + +2/2 + +1.41 ns · 0.87× + +NaN + +✓ + + +cppdd: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.7 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 4/4 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 110.5, p01 106.7, worst 106.2, required 90.0, margin 16.2, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 5.11 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.054588× + +109.7 + +104.7 + +4/4 + +5.11 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sqrt +mean: 92.6 bits +p01: 52.2 bits +worst: 49.0 bits +domains: 2/4 +minimum threshold margin: -41.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 98.0, p01 55.3, worst 55.3, required 90.0, margin -34.7, n=4096, seed=10322096095657499354 +near_one: mean 108.0, p01 104.2, worst 103.5, required 90.0, margin 13.5, n=4099, seed=10322096095657499359 +subnormal: mean 56.5, p01 52.2, worst 49.0, required 90.0, margin -41.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 108.1, p01 104.2, worst 103.2, required 90.0, margin 13.2, n=4096, seed=10322096095657499357 +benchmark: 5.39 ns/iteration, speed vs FLTX 0.95× + +92.6 + +49.0 + +2/4 + +5.39 ns · 0.95× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sqrt +mean: 113.6 bits +p01: 54.2 bits +worst: 52.9 bits +domains: 2/4 +minimum threshold margin: -37.1 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 99.1, p01 54.4, worst 54.4, required 90.0, margin -35.6, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 136.1, p01 54.2, worst 52.9, required 90.0, margin -37.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 27.65 ns/iteration, speed vs FLTX 0.18× + +113.6 + +52.9 + +2/4 + +27.65 ns · 0.18× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sqrt +mean: 115.2 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 4/4 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 115.0, p01 113.4, worst 113.1, required 90.0, margin 23.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499359 +subnormal: mean 115.7, p01 113.2, worst 113.1, required 90.0, margin 23.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 132.2 ns/iteration, speed vs FLTX 0.04× + +115.2 + +113.0 + +4/4 + +132.2 ns · 0.04× + +No + +✗ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.5 bits +p01: 105.0 bits +worst: 104.0 bits +domains: 2/2 +minimum threshold margin: 14.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.6, p01 105.1, worst 104.0, required 90.0, margin 14.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.4, p01 105.0, worst 104.0, required 90.0, margin 14.0, n=4096, seed=10322096095657499357 +benchmark: 71.89 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.098491× + +108.5 + +104.0 + +2/2 + +71.89 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp nroot +mean: 101.5 bits +p01: 89.4 bits +worst: 89.0 bits +domains: 1/2 +minimum threshold margin: -1.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 107.5, p01 104.1, worst 103.0, required 90.0, margin 13.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 95.6, p01 89.4, worst 89.0, required 90.0, margin -1.0, n=4096, seed=10322096095657499357 +benchmark: 150.9 ns/iteration, speed vs FLTX 0.48× + +101.5 + +89.0 + +1/2 + +150.9 ns · 0.48× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cbrt +mean: 108.4 bits +p01: 105.4 bits +worst: 104.6 bits +domains: 2/2 +minimum threshold margin: 14.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 108.6, p01 105.6, worst 104.6, required 90.0, margin 14.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.2, p01 105.4, worst 104.7, required 90.0, margin 14.7, n=4096, seed=10322096095657499357 +benchmark: 2,245 ns/iteration, speed vs FLTX 0.03× + +108.4 + +104.6 + +2/2 + +2,245 ns · 0.03× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::cbrt +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.1, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 1,586 ns/iteration, speed vs FLTX 0.05× + +115.0 + +113.0 + +2/2 + +1,586 ns · 0.05× + +No + +✗ + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 9.09 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 23.154467× + +122.4 + +104.4 + +2/2 + +9.09 ns + +Both + +✓ + + +qdpp: hypot is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::hypot +mean: 121.9 bits +p01: 104.9 bits +worst: 104.3 bits +domains: 2/2 +minimum threshold margin: 14.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.8, p01 104.9, worst 104.3, required 90.0, margin 14.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 106.6, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 489.0 ns/iteration, speed vs FLTX 0.02× + +121.9 + +104.3 + +2/2 + +489.0 ns · 0.02× + +Both + +✓ + + +TLFloat Quad +API: tlfloat::hypot +mean: 129.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 142.9, p01 113.8, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 210.5 ns/iteration, speed vs FLTX 0.04× + +129.0 + +113.0 + +2/2 + +210.5 ns · 0.04× + +No + +✓ + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 220.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.098836× + +107.1 + +101.3 + +2/2 + +220.3 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp pow +mean: 106.8 bits +p01: 101.7 bits +worst: 101.0 bits +domains: 2/2 +minimum threshold margin: 21.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 105.3, p01 101.7, worst 101.0, required 80.0, margin 21.0, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.2, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499359 +benchmark: 462.3 ns/iteration, speed vs FLTX 0.48× + +106.8 + +101.0 + +2/2 + +462.3 ns · 0.48× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow +mean: 102.6 bits +p01: 98.7 bits +worst: 97.6 bits +domains: 2/2 +minimum threshold margin: 17.6 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 102.0, p01 98.7, worst 97.6, required 80.0, margin 17.6, n=4099, seed=10322096095657499356 +near_one: mean 103.2, p01 100.6, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499359 +benchmark: 4,412 ns/iteration, speed vs FLTX 0.05× + +102.6 + +97.6 + +2/2 + +4,412 ns · 0.05× + +Inf + +✗ + + +TLFloat Quad +API: tlfloat::pow +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 5,570 ns/iteration, speed vs FLTX 0.04× + +114.9 + +113.0 + +2/2 + +5,570 ns · 0.04× + +No + +✗ + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 18.19 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.602681× + +106.5 + +103.2 + +2/2 + +18.19 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp npwr +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 10.96 ns/iteration, speed vs FLTX 1.66× + +106.5 + +103.2 + +2/2 + +10.96 ns · 1.66× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow(value, int) +mean: 106.4 bits +p01: 103.5 bits +worst: 102.7 bits +domains: 2/2 +minimum threshold margin: 12.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.4, p01 103.5, worst 102.8, required 90.0, margin 12.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.4, p01 103.5, worst 102.7, required 90.0, margin 12.7, n=4096, seed=10322096095657499357 +benchmark: 580.3 ns/iteration, speed vs FLTX 0.03× + +106.4 + +102.7 + +2/2 + +580.3 ns · 0.03× + +Both + +✗ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 107.0 bits +p01: 104.3 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.6, p01 104.3, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.4, p01 104.8, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 108.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.165561× + +107.0 + +103.6 + +2/2 + +108.2 ns + +Both + +- + + +qdpp dd_real +API: qdpp exp +mean: 106.8 bits +p01: 104.2 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.5, p01 104.2, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499339 +moderate: mean 107.2, p01 104.6, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499356 +benchmark: 234.3 ns/iteration, speed vs FLTX 0.46× + +106.8 + +103.7 + +2/2 + +234.3 ns · 0.46× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp +mean: 100.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 97.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499339 +moderate: mean 103.7, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +benchmark: 2,564 ns/iteration, speed vs FLTX 0.04× + +100.4 + +0.0 + +1/2 + +2,564 ns · 0.04× + +Both + +- + + +TLFloat Quad +API: tlfloat::exp +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,520 ns/iteration, speed vs FLTX 0.07× + +114.9 + +113.0 + +2/2 + +1,520 ns · 0.07× + +No + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 101.8 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 26.575928× + +108.9 + +105.1 + +2/2 + +101.8 ns + +Both + +- + + +qdpp: exp2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp2 +mean: 101.7 bits +p01: 96.4 bits +worst: 95.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 99.5, p01 96.4, worst 95.2, required 80.0, margin 15.2, n=4099, seed=10322096095657499339 +moderate: mean 103.8, p01 101.1, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499356 +benchmark: 5,542 ns/iteration, speed vs FLTX 0.02× + +101.7 + +95.2 + +2/2 + +5,542 ns · 0.02× + +Both + +- + + +TLFloat Quad +API: tlfloat::exp2 +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,705 ns/iteration, speed vs FLTX 0.04× + +115.0 + +113.0 + +2/2 + +2,705 ns · 0.04× + +No + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 109.5 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.13504× + +121.6 + +104.1 + +2/2 + +109.5 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp expm1 +mean: 121.5 bits +p01: 104.8 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 134.5, p01 105.7, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.5, p01 104.8, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499356 +benchmark: 233.8 ns/iteration, speed vs FLTX 0.47× + +121.5 + +0.0 + +1/2 + +233.8 ns · 0.47× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::expm1 +mean: 120.3 bits +p01: 101.1 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 106.6, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 106.1, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499356 +benchmark: 2,591 ns/iteration, speed vs FLTX 0.04× + +120.3 + +100.3 + +2/2 + +2,591 ns · 0.04× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::expm1 +mean: 128.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.7, worst 113.0, required 80.0, margin 33.0, n=4098, seed=10322096095657499336 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,708 ns/iteration, speed vs FLTX 0.06× + +128.2 + +113.0 + +2/2 + +1,708 ns · 0.06× + +No + +✗ + + + + +Logarithms + + + + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.6, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 145.6 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.017113× + +108.4 + +103.7 + +3/3 + +145.6 ns + +Both + +- + + +qdpp dd_real +API: qdpp log +mean: 101.5 bits +p01: 62.2 bits +worst: 61.3 bits +domains: 2/3 +minimum threshold margin: -18.7 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 94.7, p01 62.2, worst 61.3, required 80.0, margin -18.7, n=4096, seed=10322096095657499354 +near_one: mean 106.9, p01 104.4, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 103.0, p01 98.4, worst 98.1, required 80.0, margin 18.1, n=4096, seed=10322096095657499357 +benchmark: 293.7 ns/iteration, speed vs FLTX 0.50× + +101.5 + +61.3 + +2/3 + +293.7 ns · 0.50× + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log +mean: 105.3 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.2, p01 105.2, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.9, p01 104.6, worst 102.4, required 80.0, margin 22.4, n=4096, seed=10322096095657499357 +benchmark: 2,860 ns/iteration, speed vs FLTX 0.05× + +105.3 + +87.9 + +3/3 + +2,860 ns · 0.05× + +Both + +- + + +TLFloat Quad +API: tlfloat::log +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 115.5, p01 113.3, worst 113.3, required 80.0, margin 33.3, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 2,220 ns/iteration, speed vs FLTX 0.07× + +115.1 + +113.0 + +3/3 + +2,220 ns · 0.07× + +No + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 150.9 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 15.467756× + +108.8 + +103.7 + +3/3 + +150.9 ns + +Both + +- + + +qdpp: log2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log2 +mean: 106.6 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.2, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.8, p01 104.5, worst 102.3, required 80.0, margin 22.3, n=4096, seed=10322096095657499357 +benchmark: 3,023 ns/iteration, speed vs FLTX 0.05× + +106.6 + +87.9 + +3/3 + +3,023 ns · 0.05× + +Both + +- + + +TLFloat Quad +API: tlfloat::log2 +mean: 116.3 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 119.0, p01 113.9, worst 113.8, required 80.0, margin 33.8, n=4096, seed=10322096095657499354 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 2,334 ns/iteration, speed vs FLTX 0.06× + +116.3 + +113.0 + +3/3 + +2,334 ns · 0.06× + +No + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.5 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 149.9 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.175327× + +107.5 + +103.8 + +3/3 + +149.9 ns + +Both + +- + + +qdpp dd_real +API: qdpp log10 +mean: 101.3 bits +p01: 62.2 bits +worst: 61.3 bits +domains: 2/3 +minimum threshold margin: -18.7 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 94.6, p01 62.2, worst 61.3, required 80.0, margin -18.7, n=4096, seed=10322096095657499354 +near_one: mean 106.6, p01 104.2, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +wide_exponent: mean 102.8, p01 98.3, worst 98.1, required 80.0, margin 18.1, n=4096, seed=10322096095657499357 +benchmark: 326.0 ns/iteration, speed vs FLTX 0.46× + +101.3 + +61.3 + +2/3 + +326.0 ns · 0.46× + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log10 +mean: 102.9 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 103.6, p01 103.1, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499354 +near_one: mean 101.6, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 103.6, p01 103.0, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499357 +benchmark: 3,008 ns/iteration, speed vs FLTX 0.05× + +102.9 + +87.9 + +3/3 + +3,008 ns · 0.05× + +Both + +- + + +TLFloat Quad +API: tlfloat::log10 +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 114.8, p01 113.1, worst 113.1, required 80.0, margin 33.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 2,273 ns/iteration, speed vs FLTX 0.07× + +114.9 + +113.0 + +3/3 + +2,273 ns · 0.07× + +No + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 151.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.831166× + +121.4 + +103.6 + +2/2 + +151.2 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp log1p +mean: 120.9 bits +p01: 104.6 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 105.8, worst 104.1, required 80.0, margin 24.1, n=4098, seed=10322096095657499336 +moderate: mean 107.2, p01 104.6, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +benchmark: 276.8 ns/iteration, speed vs FLTX 0.55× + +120.9 + +103.8 + +2/2 + +276.8 ns · 0.55× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log1p +mean: 119.7 bits +p01: 101.3 bits +worst: 100.2 bits +domains: 2/2 +minimum threshold margin: 20.2 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 107.2, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 104.8, p01 101.3, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +benchmark: 3,851 ns/iteration, speed vs FLTX 0.04× + +119.7 + +100.2 + +2/2 + +3,851 ns · 0.04× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::log1p +mean: 128.1 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.6, worst 113.1, required 80.0, margin 33.1, n=4098, seed=10322096095657499336 +moderate: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,313 ns/iteration, speed vs FLTX 0.07× + +128.1 + +113.0 + +2/2 + +2,313 ns · 0.07× + +No + +✗ + + + + +Trigonometric + + + + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 101.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.405926× + +110.6 + +98.6 + +3/3 + +101.2 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sin +mean: 52.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 15.7, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 106.7, p01 101.7, worst 97.4, required 80.0, margin 17.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 36.0, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 243.4 ns/iteration, speed vs FLTX 0.42× + +52.5 + +0.0 + +1/3 + +243.4 ns · 0.42× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sin +mean: 51.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.2, p01 98.8, worst 94.5, required 80.0, margin 14.5, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 35.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 6,913 ns/iteration, speed vs FLTX 0.01× + +51.4 + +0.0 + +1/3 + +6,913 ns · 0.01× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sin +mean: 116.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4110, seed=10322096095657499353 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 118.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 1,845 ns/iteration, speed vs FLTX 0.05× + +116.1 + +113.0 + +3/3 + +1,845 ns · 0.05× + +No + +✗ + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 101.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.409622× + +113.5 + +99.2 + +3/3 + +101.1 ns + +Both + +- + + +qdpp dd_real +API: qdpp cos +mean: 63.6 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 54.3, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 106.6, p01 101.4, worst 96.3, required 80.0, margin 16.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 31.6, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 243.7 ns/iteration, speed vs FLTX 0.42× + +63.6 + +0.0 + +1/3 + +243.7 ns · 0.42× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cos +mean: 63.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 53.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.1, p01 98.9, worst 94.0, required 80.0, margin 14.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 33.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 6,894 ns/iteration, speed vs FLTX 0.01× + +63.3 + +0.0 + +1/3 + +6,894 ns · 0.01× + +Both + +- + + +TLFloat Quad +API: tlfloat::cos +mean: 117.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 118.8, p01 113.4, worst 113.1, required 80.0, margin 33.1, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 117.8, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 1,843 ns/iteration, speed vs FLTX 0.05× + +117.2 + +113.0 + +3/3 + +1,843 ns · 0.05× + +No + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 107.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.233136× + +- + +- + +- + +107.1 ns + +- + +- + + +qdpp dd_real +API: qdpp sincos +benchmark: 239.1 ns/iteration, speed vs FLTX 0.45× + +- + +- + +- + +239.1 ns · 0.45× + +- + +- + + +cppdd: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::sincos +benchmark: 3,739 ns/iteration, speed vs FLTX 0.03× + +- + +- + +- + +3,739 ns · 0.03× + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.7, required 75.0, margin 28.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 107.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.434116× + +106.7 + +98.6 + +3/3 + +107.7 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp tan +mean: 42.6 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -75.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 14.7, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4110, seed=10322096095657499353 +moderate: mean 105.9, p01 100.7, worst 96.3, required 75.0, margin 21.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 9.2, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4315, seed=10322096095657499369 +benchmark: 262.3 ns/iteration, speed vs FLTX 0.41× + +42.6 + +0.0 + +1/3 + +262.3 ns · 0.41× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tan +mean: 41.2 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -75.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4110, seed=10322096095657499353 +moderate: mean 103.3, p01 97.9, worst 94.0, required 75.0, margin 19.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 9.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4315, seed=10322096095657499369 +benchmark: 13,897 ns/iteration, speed vs FLTX 0.01× + +41.2 + +0.0 + +1/3 + +13,897 ns · 0.01× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tan +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 38.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 114.9, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.1, worst 113.0, required 75.0, margin 38.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 115.0, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4315, seed=10322096095657499369 +benchmark: 2,194 ns/iteration, speed vs FLTX 0.05× + +115.0 + +113.0 + +3/3 + +2,194 ns · 0.05× + +No + +✗ + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 189.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.128457× + +108.6 + +104.1 + +2/2 + +189.3 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp asin +mean: 108.0 bits +p01: 103.5 bits +worst: 102.4 bits +domains: 2/2 +minimum threshold margin: 22.4 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 109.5, p01 107.4, worst 104.4, required 80.0, margin 24.4, n=4105, seed=10322096095657499355 +moderate: mean 106.6, p01 103.5, worst 102.4, required 80.0, margin 22.4, n=4099, seed=10322096095657499356 +benchmark: 402.8 ns/iteration, speed vs FLTX 0.47× + +108.0 + +102.4 + +2/2 + +402.8 ns · 0.47× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asin +mean: 106.8 bits +p01: 104.0 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.0, p01 105.5, worst 105.4, required 80.0, margin 25.4, n=4105, seed=10322096095657499355 +moderate: mean 106.5, p01 104.0, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499356 +benchmark: 25,446 ns/iteration, speed vs FLTX 0.01× + +106.8 + +103.5 + +2/2 + +25,446 ns · 0.01× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asin +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.1, p01 113.7, worst 113.7, required 80.0, margin 33.7, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,954 ns/iteration, speed vs FLTX 0.06× + +115.0 + +113.0 + +2/2 + +2,954 ns · 0.06× + +No + +✗ + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 194.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.122299× + +106.5 + +81.6 + +2/2 + +194.3 ns + +Both + +- + + +qdpp dd_real +API: qdpp acos +mean: 108.1 bits +p01: 104.4 bits +worst: 103.3 bits +domains: 2/2 +minimum threshold margin: 23.3 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 108.2, p01 104.4, worst 103.7, required 80.0, margin 23.7, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 104.4, worst 103.3, required 80.0, margin 23.3, n=4099, seed=10322096095657499356 +benchmark: 412.4 ns/iteration, speed vs FLTX 0.47× + +108.1 + +103.3 + +2/2 + +412.4 ns · 0.47× + +No + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acos +mean: 106.9 bits +p01: 104.1 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.1, p01 104.6, worst 104.1, required 80.0, margin 24.1, n=4105, seed=10322096095657499355 +moderate: mean 106.8, p01 104.1, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 24,822 ns/iteration, speed vs FLTX 0.01× + +106.9 + +103.1 + +2/2 + +24,822 ns · 0.01× + +Both + +- + + +TLFloat Quad +API: tlfloat::acos +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,980 ns/iteration, speed vs FLTX 0.07× + +114.9 + +113.0 + +2/2 + +2,980 ns · 0.07× + +No + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 136.9 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.298487× + +108.7 + +104.9 + +2/2 + +136.9 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atan +mean: 107.2 bits +p01: 103.5 bits +worst: 102.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 108.1, p01 103.9, worst 102.9, required 80.0, margin 22.9, n=4099, seed=10322096095657499356 +near_one: mean 106.2, p01 103.5, worst 102.9, required 80.0, margin 22.9, n=4099, seed=10322096095657499359 +benchmark: 314.8 ns/iteration, speed vs FLTX 0.44× + +107.2 + +102.9 + +2/2 + +314.8 ns · 0.44× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan +mean: 106.7 bits +p01: 104.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.8, p01 104.7, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499359 +benchmark: 4,408 ns/iteration, speed vs FLTX 0.03× + +106.7 + +103.6 + +2/2 + +4,408 ns · 0.03× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan +mean: 115.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 2,631 ns/iteration, speed vs FLTX 0.05× + +115.0 + +113.0 + +2/2 + +2,631 ns · 0.05× + +Inf + +✗ + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 144.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.199736× + +108.7 + +104.5 + +3/3 + +144.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atan2 +mean: 106.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -80.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 0.0, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=8, seed=10322096095657499351 +moderate: mean 107.5, p01 103.7, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +near_one: mean 106.3, p01 103.4, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499359 +benchmark: 316.9 ns/iteration, speed vs FLTX 0.45× + +106.8 + +0.0 + +2/3 + +316.9 ns · 0.45× + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan2 +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 61.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=8, seed=10322096095657499351 +moderate: mean 106.9, p01 104.4, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 4,226 ns/iteration, speed vs FLTX 0.03× + +106.7 + +0.0 + +2/3 + +4,226 ns · 0.03× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan2 +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 118.6, p01 114.8, worst 114.8, required 80.0, margin 34.8, n=8, seed=10322096095657499351 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,594 ns/iteration, speed vs FLTX 0.06× + +115.0 + +113.0 + +3/3 + +2,594 ns · 0.06× + +Inf + +✗ + + + + +Hyperbolic + + + + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 124.4 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.219818× + +107.4 + +103.6 + +2/2 + +124.4 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sinh +mean: 107.0 bits +p01: 104.4 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 106.9, p01 104.4, worst 103.9, required 80.0, margin 23.9, n=4099, seed=10322096095657499356 +near_one: mean 107.1, p01 104.4, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499359 +benchmark: 276.2 ns/iteration, speed vs FLTX 0.45× + +107.0 + +103.6 + +2/2 + +276.2 ns · 0.45× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sinh +mean: 103.5 bits +p01: 100.6 bits +worst: 99.9 bits +domains: 2/2 +minimum threshold margin: 19.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 103.8, p01 101.0, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +near_one: mean 103.3, p01 100.6, worst 99.9, required 80.0, margin 19.9, n=4099, seed=10322096095657499359 +benchmark: 2,737 ns/iteration, speed vs FLTX 0.05× + +103.5 + +99.9 + +2/2 + +2,737 ns · 0.05× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sinh +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,898 ns/iteration, speed vs FLTX 0.07× + +115.0 + +113.0 + +2/2 + +1,898 ns · 0.07× + +No + +✗ + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 123.6 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.21803× + +107.9 + +104.4 + +2/2 + +123.6 ns + +Both + +- + + +qdpp dd_real +API: qdpp cosh +mean: 107.7 bits +p01: 104.9 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 107.5, p01 104.9, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.3, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499359 +benchmark: 274.2 ns/iteration, speed vs FLTX 0.45× + +107.7 + +104.1 + +2/2 + +274.2 ns · 0.45× + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cosh +mean: 104.0 bits +p01: 101.1 bits +worst: 100.6 bits +domains: 2/2 +minimum threshold margin: 20.6 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 103.8, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.2, p01 101.5, worst 101.0, required 80.0, margin 21.0, n=4099, seed=10322096095657499359 +benchmark: 2,738 ns/iteration, speed vs FLTX 0.05× + +104.0 + +100.6 + +2/2 + +2,738 ns · 0.05× + +Both + +- + + +TLFloat Quad +API: tlfloat::cosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,678 ns/iteration, speed vs FLTX 0.07× + +114.9 + +113.0 + +2/2 + +1,678 ns · 0.07× + +No + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 129.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.175228× + +109.2 + +103.8 + +2/2 + +129.3 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp tanh +mean: 109.3 bits +p01: 105.4 bits +worst: 104.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 109.9, p01 105.4, worst 104.0, required 80.0, margin 24.0, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.7, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499359 +benchmark: 281.3 ns/iteration, speed vs FLTX 0.46× + +109.3 + +104.0 + +2/2 + +281.3 ns · 0.46× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tanh +mean: 105.8 bits +p01: 101.2 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.0, p01 102.2, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.5, p01 101.2, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 2,915 ns/iteration, speed vs FLTX 0.04× + +105.8 + +100.3 + +2/2 + +2,915 ns · 0.04× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tanh +mean: 115.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.5, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,823 ns/iteration, speed vs FLTX 0.07× + +115.2 + +113.0 + +2/2 + +1,823 ns · 0.07× + +Inf + +✗ + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 136.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.355879× + +108.1 + +103.8 + +2/2 + +136.2 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp asinh +mean: 107.1 bits +p01: 104.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 107.4, p01 104.6, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499356 +near_one: mean 106.7, p01 104.0, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499359 +benchmark: 320.8 ns/iteration, speed vs FLTX 0.42× + +107.1 + +0.0 + +1/2 + +320.8 ns · 0.42× + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asinh +mean: 104.5 bits +p01: 100.8 bits +worst: 99.8 bits +domains: 2/2 +minimum threshold margin: 19.8 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 105.1, p01 101.7, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 100.8, worst 99.8, required 80.0, margin 19.8, n=4099, seed=10322096095657499359 +benchmark: 5,299 ns/iteration, speed vs FLTX 0.03× + +104.5 + +99.8 + +2/2 + +5,299 ns · 0.03× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asinh +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 4,954 ns/iteration, speed vs FLTX 0.03× + +114.9 + +113.0 + +2/2 + +4,954 ns · 0.03× + +No + +✗ + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 162.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.956422× + +108.0 + +103.7 + +2/2 + +162.8 ns + +Both + +- + + +qdpp dd_real +API: qdpp acosh +mean: 107.2 bits +p01: 103.9 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 106.7, p01 103.9, worst 0.0, required 80.0, margin -80.0, n=4101, seed=10322096095657499355 +moderate: mean 107.8, p01 105.1, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499387 +benchmark: 318.6 ns/iteration, speed vs FLTX 0.51× + +107.2 + +0.0 + +0/2 + +318.6 ns · 0.51× + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acosh +mean: 105.6 bits +p01: 101.7 bits +worst: 100.4 bits +domains: 2/2 +minimum threshold margin: 20.4 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 105.7, p01 101.7, worst 101.1, required 80.0, margin 21.1, n=4101, seed=10322096095657499355 +moderate: mean 105.5, p01 102.2, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499387 +benchmark: 6,087 ns/iteration, speed vs FLTX 0.03× + +105.6 + +100.4 + +2/2 + +6,087 ns · 0.03× + +Both + +- + + +TLFloat Quad +API: tlfloat::acosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.7, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4101, seed=10322096095657499355 +moderate: mean 115.1, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499387 +benchmark: 4,750 ns/iteration, speed vs FLTX 0.03× + +114.9 + +113.0 + +2/2 + +4,750 ns · 0.03× + +No + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 160.9 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.977399× + +108.1 + +103.1 + +2/2 + +160.9 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atanh +mean: 107.6 bits +p01: 104.4 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 108.0, p01 105.4, worst 0.0, required 80.0, margin -80.0, n=4105, seed=10322096095657499355 +moderate: mean 107.2, p01 104.4, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 318.1 ns/iteration, speed vs FLTX 0.51× + +107.6 + +0.0 + +1/2 + +318.1 ns · 0.51× + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atanh +mean: 106.7 bits +p01: 102.1 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.8, p01 106.3, worst 104.6, required 80.0, margin 24.6, n=4105, seed=10322096095657499355 +moderate: mean 105.6, p01 102.1, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +benchmark: 22,894 ns/iteration, speed vs FLTX 0.01× + +106.7 + +101.3 + +2/2 + +22,894 ns · 0.01× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atanh +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.4, p01 113.9, worst 113.2, required 80.0, margin 33.2, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,444 ns/iteration, speed vs FLTX 0.07× + +115.1 + +113.0 + +2/2 + +2,444 ns · 0.07× + +No + +✗ + + + + +Special + + + + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 790.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 10.110837× + +107.2 + +99.2 + +2/2 + +790.7 ns + +Both + +- + + +qdpp: erfc is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erfc +mean: 106.3 bits +p01: 99.6 bits +worst: 99.1 bits +domains: 2/2 +minimum threshold margin: 19.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 108.8, p01 99.6, worst 99.1, required 80.0, margin 19.1, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 7,995 ns/iteration, speed vs FLTX 0.10× + +106.3 + +99.1 + +2/2 + +7,995 ns · 0.10× + +Both + +- + + +TLFloat Quad +API: tlfloat::erfc +mean: 115.1 bits +p01: 113.2 bits +worst: 113.1 bits +domains: 2/2 +minimum threshold margin: 33.1 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 115.2, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 34,464 ns/iteration, speed vs FLTX 0.02× + +115.1 + +113.1 + +2/2 + +34,464 ns · 0.02× + +Inf + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 788.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 10.148576× + +110.9 + +103.5 + +2/2 + +788.6 ns + +Both + +✓ + + +qdpp: erf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erf +mean: 110.1 bits +p01: 102.2 bits +worst: 101.2 bits +domains: 2/2 +minimum threshold margin: 21.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 103.7, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499356 +near_one: mean 106.2, p01 102.2, worst 101.2, required 80.0, margin 21.2, n=4099, seed=10322096095657499359 +benchmark: 8,003 ns/iteration, speed vs FLTX 0.10× + +110.1 + +101.2 + +2/2 + +8,003 ns · 0.10× + +Both + +✗ + + +TLFloat Quad +API: tlfloat::erf +mean: 115.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.6, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 34,452 ns/iteration, speed vs FLTX 0.02× + +115.2 + +113.0 + +2/2 + +34,452 ns · 0.02× + +Inf + +✗ + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 561.1 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 31.300151× + +105.6 + +97.3 + +1/1 + +561.1 ns + +Both + +- + + +qdpp: tgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tgamma +mean: 100.8 bits +p01: 97.4 bits +worst: 96.5 bits +domains: 1/1 +minimum threshold margin: 16.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 100.8, p01 97.4, worst 96.5, required 80.0, margin 16.5, n=4099, seed=10322096095657499368 +benchmark: 17,562 ns/iteration, speed vs FLTX 0.03× + +100.8 + +96.5 + +1/1 + +17,562 ns · 0.03× + +Both + +- + + +TLFloat Quad +API: tlfloat::tgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499368 +benchmark: 27,766 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +1/1 + +27,766 ns · 0.02× + +No + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 616.4 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 35.214267× + +107.3 + +102.2 + +1/1 + +616.4 ns + +Both + +- + + +qdpp: lgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lgamma +mean: 105.1 bits +p01: 100.8 bits +worst: 92.1 bits +domains: 1/1 +minimum threshold margin: 12.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.1, p01 100.8, worst 92.1, required 80.0, margin 12.1, n=4099, seed=10322096095657499371 +benchmark: 21,707 ns/iteration, speed vs FLTX 0.03× + +105.1 + +92.1 + +1/1 + +21,707 ns · 0.03× + +Both + +- + + +TLFloat Quad +API: tlfloat::lgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499371 +benchmark: 25,002 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +1/1 + +25,002 ns · 0.02× + +No + +- + + + + +Comparisons + + + + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.949 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.474448× + +exact + +exact + +1/1 + +0.949 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.450 ns/iteration, speed vs FLTX 2.11× + +exact + +exact + +1/1 + +0.450 ns · 2.11× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.20 ns/iteration, speed vs FLTX 0.79× + +exact + +exact + +1/1 + +1.20 ns · 0.79× + +Both + +- + + +TLFloat Quad +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 7.03 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +7.03 ns · 0.14× + +Both + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.03 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.472884× + +exact + +exact + +1/1 + +1.03 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.487 ns/iteration, speed vs FLTX 2.11× + +exact + +exact + +1/1 + +0.487 ns · 2.11× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.14 ns/iteration, speed vs FLTX 0.91× + +exact + +exact + +1/1 + +1.14 ns · 0.91× + +Both + +- + + +TLFloat Quad +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.94 ns/iteration, speed vs FLTX 0.15× + +exact + +exact + +1/1 + +6.94 ns · 0.15× + +Both + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.11 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.758486× + +exact + +exact + +1/1 + +1.11 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.838 ns/iteration, speed vs FLTX 1.32× + +exact + +exact + +1/1 + +0.838 ns · 1.32× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.07 ns/iteration, speed vs FLTX 1.03× + +exact + +exact + +1/1 + +1.07 ns · 1.03× + +Both + +- + + +TLFloat Quad +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 7.29 ns/iteration, speed vs FLTX 0.15× + +exact + +exact + +1/1 + +7.29 ns · 0.15× + +Both + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.25 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.560772× + +exact + +exact + +1/1 + +1.25 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.701 ns/iteration, speed vs FLTX 1.78× + +exact + +exact + +1/1 + +0.701 ns · 1.78× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.21 ns/iteration, speed vs FLTX 1.03× + +exact + +exact + +1/1 + +1.21 ns · 1.03× + +Both + +- + + +TLFloat Quad +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 7.65 ns/iteration, speed vs FLTX 0.16× + +exact + +exact + +1/1 + +7.65 ns · 0.16× + +Both + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.02 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.898669× + +exact + +exact + +1/1 + +1.02 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.919 ns/iteration, speed vs FLTX 1.11× + +exact + +exact + +1/1 + +0.919 ns · 1.11× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.16 ns/iteration, speed vs FLTX 0.88× + +exact + +exact + +1/1 + +1.16 ns · 0.88× + +Both + +- + + +TLFloat Quad +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 7.78 ns/iteration, speed vs FLTX 0.13× + +exact + +exact + +1/1 + +7.78 ns · 0.13× + +Both + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.16 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.693508× + +exact + +exact + +1/1 + +1.16 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.802 ns/iteration, speed vs FLTX 1.44× + +exact + +exact + +1/1 + +0.802 ns · 1.44× + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.971 ns/iteration, speed vs FLTX 1.19× + +exact + +exact + +1/1 + +0.971 ns · 1.19× + +Both + +- + + +TLFloat Quad +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 7.71 ns/iteration, speed vs FLTX 0.15× + +exact + +exact + +1/1 + +7.71 ns · 0.15× + +Both + +- + + + + +Random + + + + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 21.33 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.141343× + +- + +- + +- + +21.33 ns + +- + +- + + +qdpp dd_real +API: qdpp ddrand +benchmark: 24.34 ns/iteration, speed vs FLTX 0.88× + +- + +- + +- + +24.34 ns · 0.88× + +- + +- + + +cppdd: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 100.5 ns/iteration (no available competitor) + +- + +- + +- + +100.5 ns + +- + +- + + +qdpp: normal is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 5.09 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.115646× + +- + +- + +- + +5.09 ns + +- + +- + + +qdpp dd_real +API: same expression +benchmark: 5.68 ns/iteration, speed vs FLTX 0.90× + +- + +- + +- + +5.68 ns · 0.90× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same expression +benchmark: 234.8 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +234.8 ns · 0.02× + +- + +- + + +TLFloat Quad +API: same expression +benchmark: 128.7 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +128.7 ns · 0.04× + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 23.44 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.625398× + +- + +- + +- + +23.44 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 38.09 ns/iteration, speed vs FLTX 0.62× + +- + +- + +- + +38.09 ns · 0.62× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 251.3 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +251.3 ns · 0.09× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 285.5 ns/iteration, speed vs FLTX 0.08× + +- + +- + +- + +285.5 ns · 0.08× + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 213.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.002904× + +- + +- + +- + +213.1 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 426.8 ns/iteration, speed vs FLTX 0.50× + +- + +- + +- + +426.8 ns · 0.50× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 10,848 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +10,848 ns · 0.02× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 3,828 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +3,828 ns · 0.06× + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 17.82 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.908851× + +- + +- + +- + +17.82 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 16.20 ns/iteration, speed vs FLTX 1.10× + +- + +- + +- + +16.20 ns · 1.10× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 468.7 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +468.7 ns · 0.04× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 361.4 ns/iteration, speed vs FLTX 0.05× + +- + +- + +- + +361.4 ns · 0.05× + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 72.09 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.249935× + +- + +- + +- + +72.09 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 90.11 ns/iteration, speed vs FLTX 0.80× + +- + +- + +- + +90.11 ns · 0.80× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 2,018 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +2,018 ns · 0.04× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 1,325 ns/iteration, speed vs FLTX 0.05× + +- + +- + +- + +1,325 ns · 0.05× + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 113.9 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.86402× + +- + +- + +- + +113.9 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 98.38 ns/iteration, speed vs FLTX 1.16× + +- + +- + +- + +98.38 ns · 1.16× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 1,478 ns/iteration, speed vs FLTX 0.08× + +- + +- + +- + +1,478 ns · 0.08× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 962.1 ns/iteration, speed vs FLTX 0.12× + +- + +- + +- + +962.1 ns · 0.12× + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 33.54 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.568058× + +- + +- + +- + +33.54 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 52.60 ns/iteration, speed vs FLTX 0.64× + +- + +- + +- + +52.60 ns · 0.64× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 524.0 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +524.0 ns · 0.06× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 421.0 ns/iteration, speed vs FLTX 0.08× + +- + +- + +- + +421.0 ns · 0.08× + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 907.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.940454× + +- + +- + +- + +907.7 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 1,761 ns/iteration, speed vs FLTX 0.52× + +- + +- + +- + +1,761 ns · 0.52× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 21,400 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +21,400 ns · 0.04× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 14,350 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +14,350 ns · 0.06× + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 540.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.512776× + +- + +- + +- + +540.7 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 1,359 ns/iteration, speed vs FLTX 0.40× + +- + +- + +- + +1,359 ns · 0.40× + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 70,800 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +70,800 ns · 0.01× + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 11,138 ns/iteration, speed vs FLTX 0.05× + +- + +- + +- + +11,138 ns · 0.05× + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/windows_x86_64_MinGW_f128_overview_compact.svg b/validation/metrics/generated/overview/windows_x86_64_MinGW_f128_overview_compact.svg new file mode 100644 index 0000000..5958d09 --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MinGW_f128_overview_compact.svg @@ -0,0 +1,9368 @@ + + + + + +operation + + +bl::f128 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +qdpp (dd_real) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +boost (cpp_double_double) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +TLFloat (tlquad) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +Arithmetic + + + + + + + +add + +fltx bl::f128 +API: bl::add +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 1.81 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.511831× + +120.3 + +105.7 + +2/2 + +1.8 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp operator+ +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 0.926 ns/iteration, speed vs FLTX 1.95× + +120.3 + +105.7 + +2/2 + +0.93 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator+ +mean: 120.3 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 119.1, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 7.21 ns/iteration, speed vs FLTX 0.25× + +120.3 + +105.7 + +2/2 + +7.2 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator+ +mean: 127.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 125.8, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3845, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=251, seed=10322096095657499292 +benchmark: 48.26 ns/iteration, speed vs FLTX 0.04× + +127.0 + +113.0 + +2/2 + +48.3 ns + +No + +✗ + + + + +subtract + +fltx bl::f128 +API: bl::subtract +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 1.79 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.519896× + +120.1 + +105.7 + +2/2 + +1.8 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp operator- +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 0.929 ns/iteration, speed vs FLTX 1.92× + +120.1 + +105.7 + +2/2 + +0.93 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator- +mean: 120.1 bits +p01: 106.5 bits +worst: 105.7 bits +domains: 2/2 +minimum threshold margin: 15.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 118.9, p01 106.5, worst 105.7, required 90.0, margin 15.7, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 7.26 ns/iteration, speed vs FLTX 0.25× + +120.1 + +105.7 + +2/2 + +7.3 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator- +mean: 127.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 126.0, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=3844, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=252, seed=10322096095657499292 +benchmark: 47.50 ns/iteration, speed vs FLTX 0.04× + +127.2 + +113.0 + +2/2 + +47.5 ns + +No + +✗ + + + + +multiply + +fltx bl::f128 +API: bl::multiply +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 1.62 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.067087× + +108.7 + +105.4 + +2/2 + +1.6 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp operator* +mean: 108.7 bits +p01: 105.7 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 108.7, p01 105.7, worst 105.4, required 90.0, margin 15.4, n=4092, seed=10322096095657499292 +subnormal: mean 123.4, p01 107.6, worst 107.6, required 90.0, margin 17.6, n=8, seed=10322096095657499292 +benchmark: 1.73 ns/iteration, speed vs FLTX 0.94× + +108.7 + +105.4 + +2/2 + +1.7 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator* +mean: 108.5 bits +p01: 105.2 bits +worst: 104.7 bits +domains: 2/2 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 108.5, p01 105.2, worst 104.7, required 90.0, margin 14.7, n=4092, seed=10322096095657499292 +subnormal: mean 123.8, p01 108.1, worst 108.1, required 90.0, margin 18.1, n=8, seed=10322096095657499292 +benchmark: 113.3 ns/iteration, speed vs FLTX 0.01× + +108.5 + +104.7 + +2/2 + +113 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat operator* +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4092, seed=10322096095657499292 +subnormal: mean 129.7, p01 113.5, worst 113.5, required 90.0, margin 23.5, n=8, seed=10322096095657499292 +benchmark: 36.11 ns/iteration, speed vs FLTX 0.04× + +115.0 + +113.0 + +2/2 + +36.1 ns + +No + +✗ + + + + +divide + +fltx bl::f128 +API: bl::divide +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 2.30 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 5.6677× + +110.9 + +105.1 + +2/2 + +2.3 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp operator/ +mean: 110.7 bits +p01: 106.1 bits +worst: 105.5 bits +domains: 2/2 +minimum threshold margin: 15.5 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 110.7, p01 106.1, worst 105.5, required 90.0, margin 15.5, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 13.06 ns/iteration, speed vs FLTX 0.18× + +110.7 + +105.5 + +2/2 + +13.1 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost operator/ +mean: 110.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 15.1 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 110.9, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 116.0 ns/iteration, speed vs FLTX 0.02× + +110.9 + +105.1 + +2/2 + +116 ns + +NaN + +✗ + + +TLFloat Quad +API: TLFloat operator/ +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499292 +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4, seed=10322096095657499292 +benchmark: 103.3 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +2/2 + +103 ns + +No + +✗ + + + + +IO + + + + + + + +to_string + +fltx bl::f128 +API: bl::to_string +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 250.4 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.701114× + +114.0 + +110.7 + +2/2 + +250 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp to_string +mean: 109.4 bits +p01: 102.4 bits +worst: 102.3 bits +domains: 2/2 +minimum threshold margin: 12.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 107.9, worst 107.8, required 90.0, margin 17.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 104.9, p01 102.4, worst 102.3, required 90.0, margin 12.3, n=4096, seed=10322096095657499357 +benchmark: 468.6 ns/iteration, speed vs FLTX 0.53× + +109.4 + +102.3 + +2/2 + +469 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: Boost number::str +mean: 110.8 bits +p01: 106.0 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 16.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 112.0, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 109.5, p01 106.0, worst 106.0, required 90.0, margin 16.0, n=4096, seed=10322096095657499357 +benchmark: 425.9 ns/iteration, speed vs FLTX 0.59× + +110.8 + +106.0 + +2/2 + +426 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::to_string +mean: 110.7 bits +p01: 107.6 bits +worst: 107.3 bits +domains: 2/2 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.8, p01 107.9, worst 107.4, required 90.0, margin 17.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 110.5, p01 107.6, worst 107.3, required 90.0, margin 17.3, n=4096, seed=10322096095657499357 +benchmark: 5,199 ns/iteration, speed vs FLTX 0.05× + +110.7 + +107.3 + +2/2 + +5199 ns + +Both + +✓ + + + + +to_chars + +fltx bl::f128 +API: bl::to_chars +mean: 114.0 bits +p01: 110.9 bits +worst: 110.7 bits +domains: 2/2 +minimum threshold margin: 20.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 111.2, worst 110.8, required 90.0, margin 20.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 113.9, p01 110.9, worst 110.7, required 90.0, margin 20.7, n=4096, seed=10322096095657499357 +benchmark: 202.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.358806× + +114.0 + +110.7 + +2/2 + +202 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp write +mean: 109.4 bits +p01: 102.4 bits +worst: 102.3 bits +domains: 2/2 +minimum threshold margin: 12.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 107.9, worst 107.8, required 90.0, margin 17.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 104.9, p01 102.4, worst 102.3, required 90.0, margin 12.3, n=4096, seed=10322096095657499357 +benchmark: 477.1 ns/iteration, speed vs FLTX 0.42× + +109.4 + +102.3 + +2/2 + +477 ns + +Both + +✗ + + +cppdd: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f128 +API: bl::parse +mean: 109.9 bits +p01: 107.1 bits +worst: 106.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.0, p01 107.3, worst 107.0, required 106.0, margin 1.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 109.9, p01 107.1, worst 106.0, required 106.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 211.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.222253× + +109.9 + +106.0 + +2/2 + +211 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp read +mean: 102.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -106.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 106.8, p01 104.4, worst 103.5, required 106.0, margin -2.5, n=4097, seed=10322096095657499311 +wide_exponent: mean 98.2, p01 0.0, worst 0.0, required 106.0, margin -106.0, n=4098, seed=10322096095657499308 +benchmark: 258.2 ns/iteration, speed vs FLTX 0.82× + +102.5 + +0.0 + +0/2 + +258 ns + +NaN + +✓ + + +boost::multiprecision::cpp_double_double +API: Boost string constructor +mean: 107.1 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -106.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.9, p01 106.2, worst 106.0, required 106.0, margin 0.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 106.3, p01 0.0, worst 0.0, required 106.0, margin -106.0, n=4098, seed=10322096095657499308 +benchmark: 630.1 ns/iteration, speed vs FLTX 0.34× + +107.1 + +0.0 + +1/2 + +630 ns + +Both + +✗ + + +TLFloat Quad +API: TLFloat string constructor +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 7.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 106.0, margin 7.0, n=4098, seed=10322096095657499308 +benchmark: 3,822 ns/iteration, speed vs FLTX 0.06× + +114.9 + +113.0 + +2/2 + +3822 ns + +No + +✗ + + + + +Rounding + + + + + + + +floor + +fltx bl::f128 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.08 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.899977× + += + += + +1/1 + +1.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.970 ns/iteration, speed vs FLTX 1.11× + += + += + +1/1 + +0.97 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.984 ns/iteration, speed vs FLTX 1.10× + += + += + +1/1 + +0.98 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 7.21 ns/iteration, speed vs FLTX 0.15× + += + += + +1/1 + +7.2 ns + +No + +✗ + + + + +ceil + +fltx bl::f128 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 1.70 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.545393× + += + += + +1/1 + +1.7 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 0.925 ns/iteration, speed vs FLTX 1.83× + += + += + +1/1 + +0.92 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 3.19 ns/iteration, speed vs FLTX 0.53× + += + += + +1/1 + +3.2 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 7.44 ns/iteration, speed vs FLTX 0.23× + += + += + +1/1 + +7.4 ns + +No + +✗ + + + + +trunc + +fltx bl::f128 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 2.71 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.291273× + += + += + +1/1 + +2.7 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp aint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 3.51 ns/iteration, speed vs FLTX 0.77× + += + += + +1/1 + +3.5 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 6.10 ns/iteration, speed vs FLTX 0.45× + += + += + +1/1 + +6.1 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 5.75 ns/iteration, speed vs FLTX 0.47× + += + += + +1/1 + +5.7 ns + +No + +✗ + + + + +round + +fltx bl::f128 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.06 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.877987× + += + += + +1/1 + +10.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp round +mean: 130.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/1 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 130.4, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4108, seed=10322096095657499334 +benchmark: 10.48 ns/iteration, speed vs FLTX 0.96× + +130.4 + +0.0 + +0/1 + +10.5 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 8.83 ns/iteration, speed vs FLTX 1.14× + += + += + +1/1 + +8.8 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.16 ns/iteration, speed vs FLTX 0.99× + += + += + +1/1 + +10.2 ns + +No + +✗ + + + + +roundeven + +fltx bl::f128 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 7.80 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 1.325158× + += + += + +1/1 + +7.8 ns + +Both + +✓ + + +qdpp: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4108, seed=10322096095657499334 +benchmark: 10.33 ns/iteration, speed vs FLTX 0.75× + += + += + +1/1 + +10.3 ns + +No + +✗ + + + + +lround + +fltx bl::f128 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 3.39 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 5.699979× + += + += + +1/1 + +3.4 ns + +- + +- + + +qdpp: lround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4110, seed=10322096095657499334 +benchmark: 19.35 ns/iteration, speed vs FLTX 0.18× + += + += + +1/1 + +19.3 ns + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f128 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 3.23 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 49.680384× + += + += + +1/1 + +3.2 ns + +- + +- + + +qdpp: llround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 80.0, margin exact, n=4114, seed=10322096095657499334 +benchmark: 160.3 ns/iteration, speed vs FLTX 0.02× + += + += + +1/1 + +160 ns + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f128 +API: bl::round_decimals +mean: 110.2 bits +p01: 107.2 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 110.2, p01 107.2, worst 107.0, required 90.0, margin 17.0, n=4099, seed=10322096095657499356 +benchmark: 79.36 ns/iteration (no available competitor) + +110.2 + +107.0 + +1/1 + +79.4 ns + +Both + +✓ + + +qdpp: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f128 +API: bl::round_significant +mean: 121.3 bits +p01: 107.3 bits +worst: 107.0 bits +domains: 1/1 +minimum threshold margin: 17.0 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 121.3, p01 107.3, worst 107.0, required 90.0, margin 17.0, n=4096, seed=10322096095657499357 +benchmark: 113.7 ns/iteration (no available competitor) + +121.3 + +107.0 + +1/1 + +114 ns + +Both + +✓ + + +qdpp: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + + +fmod + +fltx bl::f128 +API: bl::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 17.73 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.353653× + += + += + +3/3 + +17.7 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp fmod +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -90.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 135.0, p01 101.7, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 24.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=2, seed=10322096095657499335 +wide_exponent: mean 78.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4096, seed=10322096095657499357 +benchmark: 24.00 ns/iteration, speed vs FLTX 0.74× + +106.7 + +0.0 + +1/3 + +24.0 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmod +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -90.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 135.0, p01 101.7, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 24.9, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=2, seed=10322096095657499335 +wide_exponent: mean 78.3, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4096, seed=10322096095657499357 +benchmark: 213.5 ns/iteration, speed vs FLTX 0.08× + +106.7 + +0.0 + +1/3 + +214 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=2, seed=10322096095657499335 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 288.5 ns/iteration, speed vs FLTX 0.06× + += + += + +3/3 + +289 ns + +No + +✗ + + + + +remainder + +fltx bl::f128 +API: bl::remainder +mean: 138.0 bits +p01: exact bits +worst: 103.1 bits +domains: 1/1 +minimum threshold margin: 13.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 138.0, p01 exact, worst 103.1, required 90.0, margin 13.1, n=4099, seed=10322096095657499356 +benchmark: 19.85 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.324641× + +138.0 + +103.1 + +1/1 + +19.8 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp drem +mean: 134.4 bits +p01: 101.0 bits +worst: 95.5 bits +domains: 1/1 +minimum threshold margin: 5.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 134.4, p01 101.0, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +benchmark: 26.29 ns/iteration, speed vs FLTX 0.75× + +134.4 + +95.5 + +1/1 + +26.3 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remainder +mean: 134.4 bits +p01: 101.0 bits +worst: 95.5 bits +domains: 1/1 +minimum threshold margin: 5.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 134.4, p01 101.0, worst 95.5, required 90.0, margin 5.5, n=4099, seed=10322096095657499356 +benchmark: 218.7 ns/iteration, speed vs FLTX 0.09× + +134.4 + +95.5 + +1/1 + +219 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 301.9 ns/iteration, speed vs FLTX 0.07× + += + += + +1/1 + +302 ns + +No + +✗ + + + + +remquo + +fltx bl::f128 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 20.01 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.318704× + += + += + +1/1 + +20.0 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp divrem +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 26.39 ns/iteration, speed vs FLTX 0.76× + += + += + +1/1 + +26.4 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 219.6 ns/iteration, speed vs FLTX 0.09× + += + += + +1/1 + +220 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 318.8 ns/iteration, speed vs FLTX 0.06× + += + += + +1/1 + +319 ns + +No + +✗ + + + + +Float Utils + + + + + + + +abs + +fltx bl::f128 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.86 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.892586× + += + += + +2/2 + +2.9 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.76 ns/iteration, speed vs FLTX 1.04× + += + += + +2/2 + +2.8 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 3.31 ns/iteration, speed vs FLTX 0.86× + += + += + +2/2 + +3.3 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.55 ns/iteration, speed vs FLTX 1.12× + += + += + +2/2 + +2.6 ns + +No + +✓ + + + + +fabs + +fltx bl::f128 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.09 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 0.868762× + += + += + +1/1 + +3.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.78 ns/iteration, speed vs FLTX 1.11× + += + += + +1/1 + +2.8 ns + +Both + +✓ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.23 ns/iteration, speed vs FLTX 0.96× + += + += + +1/1 + +3.2 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 2.68 ns/iteration, speed vs FLTX 1.15× + += + += + +1/1 + +2.7 ns + +No + +✓ + + + + +fma + +fltx bl::f128 +API: bl::fma +mean: 117.4 bits +p01: 104.7 bits +worst: 99.6 bits +domains: 3/3 +minimum threshold margin: 9.6 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 123.6, p01 107.4, worst 107.0, required 90.0, margin 17.0, n=4098, seed=10322096095657499352 +moderate: mean 109.1, p01 104.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.6, p01 106.6, worst 105.3, required 90.0, margin 15.3, n=4096, seed=10322096095657499357 +benchmark: 7.98 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 9.823794× + +117.4 + +99.6 + +3/3 + +8.0 ns + +Both + +✗ + + +qdpp: fma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fma +mean: 75.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -90.0 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 0.1, p01 0.0, worst 0.0, required 90.0, margin -90.0, n=4098, seed=10322096095657499352 +moderate: mean 108.2, p01 103.7, worst 99.6, required 90.0, margin 9.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 119.1, p01 105.4, worst 104.1, required 90.0, margin 14.1, n=4096, seed=10322096095657499357 +benchmark: 121.1 ns/iteration, speed vs FLTX 0.07× + +75.8 + +0.0 + +2/3 + +121 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fma +mean: 128.4 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 125.4, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 78.41 ns/iteration, speed vs FLTX 0.10× + +128.4 + +113.0 + +3/3 + +78.4 ns + +No + +✗ + + + + +recip + +fltx bl::f128 +API: bl::recip +mean: 109.0 bits +p01: 105.9 bits +worst: 105.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 109.0, p01 106.2, worst 105.2, required 90.0, margin 15.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.0, p01 105.9, worst 105.2, required 90.0, margin 15.2, n=4096, seed=10322096095657499357 +benchmark: 31.70 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.407742× + +109.0 + +105.2 + +2/2 + +31.7 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp inv +mean: 109.4 bits +p01: 106.8 bits +worst: 106.5 bits +domains: 2/2 +minimum threshold margin: 16.5 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 109.4, p01 107.0, worst 106.5, required 90.0, margin 16.5, n=4099, seed=10322096095657499359 +wide_exponent: mean 109.4, p01 106.8, worst 106.5, required 90.0, margin 16.5, n=4096, seed=10322096095657499357 +benchmark: 12.92 ns/iteration, speed vs FLTX 2.45× + +109.4 + +106.5 + +2/2 + +12.9 ns + +NaN + +✗ + + +cppdd: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f128 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.32 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.041176× + += + += + +2/2 + +2.3 ns + +Both + +✓ + + +qdpp: fmin is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.42 ns/iteration, speed vs FLTX 0.96× + += + += + +2/2 + +2.4 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 13.06 ns/iteration, speed vs FLTX 0.18× + += + += + +2/2 + +13.1 ns + +No + +✗ + + + + +fmax + +fltx bl::f128 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.46 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 0.939588× + += + += + +2/2 + +2.5 ns + +Both + +✓ + + +qdpp: fmax is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 2.31 ns/iteration, speed vs FLTX 1.06× + += + += + +2/2 + +2.3 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 13.31 ns/iteration, speed vs FLTX 0.18× + += + += + +2/2 + +13.3 ns + +No + +✗ + + + + +fdim + +fltx bl::f128 +API: bl::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 3.25 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 1.591714× + +138.0 + +106.2 + +2/2 + +3.2 ns + +Both + +✓ + + +qdpp: fdim is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::fdim +mean: 138.0 bits +p01: exact bits +worst: 106.2 bits +domains: 2/2 +minimum threshold margin: 16.2 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean 138.0, p01 exact, worst 106.2, required 90.0, margin 16.2, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 5.17 ns/iteration, speed vs FLTX 0.63× + +138.0 + +106.2 + +2/2 + +5.2 ns + +No + +✓ + + +TLFloat Quad +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 53.48 ns/iteration, speed vs FLTX 0.06× + += + += + +2/2 + +53.5 ns + +No + +✓ + + + + +copysign + +fltx bl::f128 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.03 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 4.575674× + += + += + +1/1 + +1.0 ns + +Both + +✓ + + +qdpp: copysign is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 4.91 ns/iteration, speed vs FLTX 0.21× + += + += + +1/1 + +4.9 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 4.71 ns/iteration, speed vs FLTX 0.22× + += + += + +1/1 + +4.7 ns + +No + +✗ + + + + +ldexp + +fltx bl::f128 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.27 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 6.970736× + += + += + +1/1 + +1.3 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.15 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +9.1 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.36 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +9.4 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 8.85 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +8.8 ns + +No + +✗ + + + + +scalbn + +fltx bl::f128 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.25 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 7.32944× + += + += + +1/1 + +1.2 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.14 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +9.1 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.37 ns/iteration, speed vs FLTX 0.13× + += + += + +1/1 + +9.4 ns + +Both + +✗ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f128 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.24 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 7.353092× + += + += + +1/1 + +1.2 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.14 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +9.1 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.33 ns/iteration, speed vs FLTX 0.13× + += + += + +1/1 + +9.3 ns + +Both + +✗ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f128 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.83 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 4.93335× + += + += + +2/2 + +1.8 ns + +Both + +✓ + + +qdpp: frexp is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.05 ns/iteration, speed vs FLTX 0.20× + += + += + +2/2 + +9.0 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 30.73 ns/iteration, speed vs FLTX 0.06× + += + += + +2/2 + +30.7 ns + +No + +✗ + + + + +modf + +fltx bl::f128 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.55 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 2.059762× + += + += + +2/2 + +5.5 ns + +Both + +✓ + + +qdpp: modf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 11.42 ns/iteration, speed vs FLTX 0.49× + += + += + +2/2 + +11.4 ns + +NaN + +✗ + + +TLFloat Quad +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 69.01 ns/iteration, speed vs FLTX 0.08× + += + += + +2/2 + +69.0 ns + +No + +✗ + + + + +ilogb + +fltx bl::f128 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.47 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 1.198396× + += + += + +2/2 + +1.5 ns + +- + +- + + +qdpp: ilogb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.15 ns/iteration, speed vs FLTX 0.16× + += + += + +2/2 + +9.2 ns + +- + +- + + +TLFloat Quad +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.76 ns/iteration, speed vs FLTX 0.83× + += + += + +2/2 + +1.8 ns + +- + +- + + + + +logb + +fltx bl::f128 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.47 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 20.472843× + += + += + +2/2 + +1.5 ns + +Both + +- + + +qdpp: logb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 30.10 ns/iteration, speed vs FLTX 0.05× + += + += + +2/2 + +30.1 ns + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f128 +API: bl::nextafter +benchmark: 5.00 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 3.630483× + +- + +- + +- + +5.0 ns + +- + +- + + +qdpp: nextafter is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter +benchmark: 32.28 ns/iteration, speed vs FLTX 0.15× + +- + +- + +- + +32.3 ns + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter +benchmark: 18.16 ns/iteration, speed vs FLTX 0.28× + +- + +- + +- + +18.2 ns + +- + +- + + + + +nexttoward + +fltx bl::f128 +API: bl::nexttoward +benchmark: 4.67 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 3.94163× + +- + +- + +- + +4.7 ns + +- + +- + + +qdpp: nexttoward is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::math::nextafter (same type) +benchmark: 32.36 ns/iteration, speed vs FLTX 0.14× + +- + +- + +- + +32.4 ns + +- + +- + + +TLFloat Quad +API: tlfloat::nextafter (same type) +benchmark: 18.40 ns/iteration, speed vs FLTX 0.25× + +- + +- + +- + +18.4 ns + +- + +- + + + + +Roots & powers + + + + + + + +sqr + +fltx bl::f128 +API: bl::sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.23 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.148765× + +108.7 + +105.4 + +2/2 + +1.2 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sqr +mean: 108.7 bits +p01: 105.6 bits +worst: 105.4 bits +domains: 2/2 +minimum threshold margin: 15.4 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 108.6, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.7, p01 105.6, worst 105.4, required 90.0, margin 15.4, n=4096, seed=10322096095657499357 +benchmark: 1.41 ns/iteration, speed vs FLTX 0.87× + +108.7 + +105.4 + +2/2 + +1.4 ns + +NaN + +✓ + + +cppdd: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f128 +API: bl::sqrt +mean: 109.7 bits +p01: 105.8 bits +worst: 104.7 bits +domains: 4/4 +minimum threshold margin: 14.7 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 109.5, p01 106.3, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 110.5, p01 106.7, worst 106.2, required 90.0, margin 16.2, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 5.11 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.054588× + +109.7 + +104.7 + +4/4 + +5.1 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sqrt +mean: 92.6 bits +p01: 52.2 bits +worst: 49.0 bits +domains: 2/4 +minimum threshold margin: -41.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 98.0, p01 55.3, worst 55.3, required 90.0, margin -34.7, n=4096, seed=10322096095657499354 +near_one: mean 108.0, p01 104.2, worst 103.5, required 90.0, margin 13.5, n=4099, seed=10322096095657499359 +subnormal: mean 56.5, p01 52.2, worst 49.0, required 90.0, margin -41.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 108.1, p01 104.2, worst 103.2, required 90.0, margin 13.2, n=4096, seed=10322096095657499357 +benchmark: 5.39 ns/iteration, speed vs FLTX 0.95× + +92.6 + +49.0 + +2/4 + +5.4 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sqrt +mean: 113.6 bits +p01: 54.2 bits +worst: 52.9 bits +domains: 2/4 +minimum threshold margin: -37.1 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 99.1, p01 54.4, worst 54.4, required 90.0, margin -35.6, n=4096, seed=10322096095657499354 +near_one: mean 109.5, p01 105.8, worst 104.7, required 90.0, margin 14.7, n=4099, seed=10322096095657499359 +subnormal: mean 136.1, p01 54.2, worst 52.9, required 90.0, margin -37.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 109.6, p01 106.0, worst 105.1, required 90.0, margin 15.1, n=4096, seed=10322096095657499357 +benchmark: 27.65 ns/iteration, speed vs FLTX 0.18× + +113.6 + +52.9 + +2/4 + +27.6 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sqrt +mean: 115.2 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 4/4 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 115.0, p01 113.4, worst 113.1, required 90.0, margin 23.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.1, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499359 +subnormal: mean 115.7, p01 113.2, worst 113.1, required 90.0, margin 23.1, n=4100, seed=10322096095657499350 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 132.2 ns/iteration, speed vs FLTX 0.04× + +115.2 + +113.0 + +4/4 + +132 ns + +No + +✗ + + + + +cbrt + +fltx bl::f128 +API: bl::cbrt +mean: 108.5 bits +p01: 105.0 bits +worst: 104.0 bits +domains: 2/2 +minimum threshold margin: 14.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.6, p01 105.1, worst 104.0, required 90.0, margin 14.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.4, p01 105.0, worst 104.0, required 90.0, margin 14.0, n=4096, seed=10322096095657499357 +benchmark: 71.89 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.098491× + +108.5 + +104.0 + +2/2 + +71.9 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp nroot +mean: 101.5 bits +p01: 89.4 bits +worst: 89.0 bits +domains: 1/2 +minimum threshold margin: -1.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 107.5, p01 104.1, worst 103.0, required 90.0, margin 13.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 95.6, p01 89.4, worst 89.0, required 90.0, margin -1.0, n=4096, seed=10322096095657499357 +benchmark: 150.9 ns/iteration, speed vs FLTX 0.48× + +101.5 + +89.0 + +1/2 + +151 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cbrt +mean: 108.4 bits +p01: 105.4 bits +worst: 104.6 bits +domains: 2/2 +minimum threshold margin: 14.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 108.6, p01 105.6, worst 104.6, required 90.0, margin 14.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 108.2, p01 105.4, worst 104.7, required 90.0, margin 14.7, n=4096, seed=10322096095657499357 +benchmark: 2,245 ns/iteration, speed vs FLTX 0.03× + +108.4 + +104.6 + +2/2 + +2245 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::cbrt +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.1, p01 113.3, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 1,586 ns/iteration, speed vs FLTX 0.05× + +115.0 + +113.0 + +2/2 + +1586 ns + +No + +✗ + + + + +hypot + +fltx bl::f128 +API: bl::hypot +mean: 122.4 bits +p01: 105.6 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 14.4 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.7, p01 105.6, worst 104.4, required 90.0, margin 14.4, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 107.3, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 9.09 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 23.154467× + +122.4 + +104.4 + +2/2 + +9.1 ns + +Both + +✓ + + +qdpp: hypot is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::hypot +mean: 121.9 bits +p01: 104.9 bits +worst: 104.3 bits +domains: 2/2 +minimum threshold margin: 14.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.8, p01 104.9, worst 104.3, required 90.0, margin 14.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 136.1, p01 106.6, worst 104.4, required 90.0, margin 14.4, n=4096, seed=10322096095657499357 +benchmark: 489.0 ns/iteration, speed vs FLTX 0.02× + +121.9 + +104.3 + +2/2 + +489 ns + +Both + +✓ + + +TLFloat Quad +API: tlfloat::hypot +mean: 129.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 90.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 142.9, p01 113.8, worst 113.0, required 90.0, margin 23.0, n=4096, seed=10322096095657499357 +benchmark: 210.5 ns/iteration, speed vs FLTX 0.04× + +129.0 + +113.0 + +2/2 + +211 ns + +No + +✓ + + + + +pow + +fltx bl::f128 +API: bl::pow +mean: 107.1 bits +p01: 102.3 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 106.0, p01 102.3, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 220.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.098836× + +107.1 + +101.3 + +2/2 + +220 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp pow +mean: 106.8 bits +p01: 101.7 bits +worst: 101.0 bits +domains: 2/2 +minimum threshold margin: 21.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 105.3, p01 101.7, worst 101.0, required 80.0, margin 21.0, n=4099, seed=10322096095657499356 +near_one: mean 108.3, p01 105.2, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499359 +benchmark: 462.3 ns/iteration, speed vs FLTX 0.48× + +106.8 + +101.0 + +2/2 + +462 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow +mean: 102.6 bits +p01: 98.7 bits +worst: 97.6 bits +domains: 2/2 +minimum threshold margin: 17.6 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 102.0, p01 98.7, worst 97.6, required 80.0, margin 17.6, n=4099, seed=10322096095657499356 +near_one: mean 103.2, p01 100.6, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499359 +benchmark: 4,412 ns/iteration, speed vs FLTX 0.05× + +102.6 + +97.6 + +2/2 + +4412 ns + +Inf + +✗ + + +TLFloat Quad +API: tlfloat::pow +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 5,570 ns/iteration, speed vs FLTX 0.04× + +114.9 + +113.0 + +2/2 + +5570 ns + +No + +✗ + + + + +ipow + +fltx bl::f128 +API: bl::ipow +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 18.19 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.602681× + +106.5 + +103.2 + +2/2 + +18.2 ns + +Both + +✗ + + +qdpp dd_real +API: qdpp npwr +mean: 106.5 bits +p01: 103.8 bits +worst: 103.2 bits +domains: 2/2 +minimum threshold margin: 13.2 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 106.5, p01 103.9, worst 103.2, required 90.0, margin 13.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.5, p01 103.8, worst 103.3, required 90.0, margin 13.3, n=4096, seed=10322096095657499357 +benchmark: 10.96 ns/iteration, speed vs FLTX 1.66× + +106.5 + +103.2 + +2/2 + +11.0 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::pow(value, int) +mean: 106.4 bits +p01: 103.5 bits +worst: 102.7 bits +domains: 2/2 +minimum threshold margin: 12.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.4, p01 103.5, worst 102.8, required 90.0, margin 12.8, n=4099, seed=10322096095657499356 +wide_exponent: mean 106.4, p01 103.5, worst 102.7, required 90.0, margin 12.7, n=4096, seed=10322096095657499357 +benchmark: 580.3 ns/iteration, speed vs FLTX 0.03× + +106.4 + +102.7 + +2/2 + +580 ns + +Both + +✗ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + + +exp + +fltx bl::f128 +API: bl::exp +mean: 107.0 bits +p01: 104.3 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.6, p01 104.3, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499339 +moderate: mean 107.4, p01 104.8, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 108.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.165561× + +107.0 + +103.6 + +2/2 + +108 ns + +Both + +- + + +qdpp dd_real +API: qdpp exp +mean: 106.8 bits +p01: 104.2 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 106.5, p01 104.2, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499339 +moderate: mean 107.2, p01 104.6, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499356 +benchmark: 234.3 ns/iteration, speed vs FLTX 0.46× + +106.8 + +103.7 + +2/2 + +234 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp +mean: 100.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 97.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499339 +moderate: mean 103.7, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +benchmark: 2,564 ns/iteration, speed vs FLTX 0.04× + +100.4 + +0.0 + +1/2 + +2564 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::exp +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,520 ns/iteration, speed vs FLTX 0.07× + +114.9 + +113.0 + +2/2 + +1520 ns + +No + +- + + + + +exp2 + +fltx bl::f128 +API: bl::exp2 +mean: 108.9 bits +p01: 106.0 bits +worst: 105.1 bits +domains: 2/2 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 108.9, p01 106.1, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499339 +moderate: mean 108.9, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 101.8 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 26.575928× + +108.9 + +105.1 + +2/2 + +102 ns + +Both + +- + + +qdpp: exp2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::exp2 +mean: 101.7 bits +p01: 96.4 bits +worst: 95.2 bits +domains: 2/2 +minimum threshold margin: 15.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 99.5, p01 96.4, worst 95.2, required 80.0, margin 15.2, n=4099, seed=10322096095657499339 +moderate: mean 103.8, p01 101.1, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499356 +benchmark: 5,542 ns/iteration, speed vs FLTX 0.02× + +101.7 + +95.2 + +2/2 + +5542 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::exp2 +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499339 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,705 ns/iteration, speed vs FLTX 0.04× + +115.0 + +113.0 + +2/2 + +2705 ns + +No + +- + + + + +expm1 + +fltx bl::f128 +API: bl::expm1 +mean: 121.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.5, p01 106.2, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.7, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 109.5 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.13504× + +121.6 + +104.1 + +2/2 + +110 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp expm1 +mean: 121.5 bits +p01: 104.8 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 134.5, p01 105.7, worst 104.4, required 80.0, margin 24.4, n=4098, seed=10322096095657499336 +moderate: mean 108.5, p01 104.8, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499356 +benchmark: 233.8 ns/iteration, speed vs FLTX 0.47× + +121.5 + +0.0 + +1/2 + +234 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::expm1 +mean: 120.3 bits +p01: 101.1 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 106.6, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 106.1, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499356 +benchmark: 2,591 ns/iteration, speed vs FLTX 0.04× + +120.3 + +100.3 + +2/2 + +2591 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::expm1 +mean: 128.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.7, worst 113.0, required 80.0, margin 33.0, n=4098, seed=10322096095657499336 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 1,708 ns/iteration, speed vs FLTX 0.06× + +128.2 + +113.0 + +2/2 + +1708 ns + +No + +✗ + + + + +Logarithms + + + + + + + +log + +fltx bl::f128 +API: bl::log +mean: 108.4 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 109.2, p01 105.3, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 107.6, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.5, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 145.6 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.017113× + +108.4 + +103.7 + +3/3 + +146 ns + +Both + +- + + +qdpp dd_real +API: qdpp log +mean: 101.5 bits +p01: 62.2 bits +worst: 61.3 bits +domains: 2/3 +minimum threshold margin: -18.7 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 94.7, p01 62.2, worst 61.3, required 80.0, margin -18.7, n=4096, seed=10322096095657499354 +near_one: mean 106.9, p01 104.4, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 103.0, p01 98.4, worst 98.1, required 80.0, margin 18.1, n=4096, seed=10322096095657499357 +benchmark: 293.7 ns/iteration, speed vs FLTX 0.50× + +101.5 + +61.3 + +2/3 + +294 ns + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log +mean: 105.3 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.2, p01 105.2, worst 105.0, required 80.0, margin 25.0, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.9, p01 104.6, worst 102.4, required 80.0, margin 22.4, n=4096, seed=10322096095657499357 +benchmark: 2,860 ns/iteration, speed vs FLTX 0.05× + +105.3 + +87.9 + +3/3 + +2860 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::log +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 115.5, p01 113.3, worst 113.3, required 80.0, margin 33.3, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 2,220 ns/iteration, speed vs FLTX 0.07× + +115.1 + +113.0 + +3/3 + +2220 ns + +No + +- + + + + +log2 + +fltx bl::f128 +API: bl::log2 +mean: 108.8 bits +p01: 104.6 bits +worst: 103.7 bits +domains: 3/3 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.1, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.6, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 108.0, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 150.9 ns/iteration, speed vs fastest competitor tlquad (TLFloat Quad): 15.467756× + +108.8 + +103.7 + +3/3 + +151 ns + +Both + +- + + +qdpp: log2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log2 +mean: 106.6 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 111.2, p01 105.1, worst 104.6, required 80.0, margin 24.6, n=4096, seed=10322096095657499354 +near_one: mean 101.7, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 106.8, p01 104.5, worst 102.3, required 80.0, margin 22.3, n=4096, seed=10322096095657499357 +benchmark: 3,023 ns/iteration, speed vs FLTX 0.05× + +106.6 + +87.9 + +3/3 + +3023 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::log2 +mean: 116.3 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 119.0, p01 113.9, worst 113.8, required 80.0, margin 33.8, n=4096, seed=10322096095657499354 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 2,334 ns/iteration, speed vs FLTX 0.06× + +116.3 + +113.0 + +3/3 + +2334 ns + +No + +- + + + + +log10 + +fltx bl::f128 +API: bl::log10 +mean: 107.5 bits +p01: 104.5 bits +worst: 103.8 bits +domains: 3/3 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 107.3, p01 105.0, worst 104.5, required 80.0, margin 24.5, n=4096, seed=10322096095657499354 +near_one: mean 107.3, p01 104.5, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 107.9, p01 105.2, worst 104.4, required 80.0, margin 24.4, n=4096, seed=10322096095657499357 +benchmark: 149.9 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.175327× + +107.5 + +103.8 + +3/3 + +150 ns + +Both + +- + + +qdpp dd_real +API: qdpp log10 +mean: 101.3 bits +p01: 62.2 bits +worst: 61.3 bits +domains: 2/3 +minimum threshold margin: -18.7 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 94.6, p01 62.2, worst 61.3, required 80.0, margin -18.7, n=4096, seed=10322096095657499354 +near_one: mean 106.6, p01 104.2, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +wide_exponent: mean 102.8, p01 98.3, worst 98.1, required 80.0, margin 18.1, n=4096, seed=10322096095657499357 +benchmark: 326.0 ns/iteration, speed vs FLTX 0.46× + +101.3 + +61.3 + +2/3 + +326 ns + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log10 +mean: 102.9 bits +p01: 95.7 bits +worst: 87.9 bits +domains: 3/3 +minimum threshold margin: 7.9 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 103.6, p01 103.1, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499354 +near_one: mean 101.6, p01 95.7, worst 87.9, required 80.0, margin 7.9, n=4099, seed=10322096095657499359 +wide_exponent: mean 103.6, p01 103.0, worst 102.8, required 80.0, margin 22.8, n=4096, seed=10322096095657499357 +benchmark: 3,008 ns/iteration, speed vs FLTX 0.05× + +102.9 + +87.9 + +3/3 + +3008 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::log10 +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 114.8, p01 113.1, worst 113.1, required 80.0, margin 33.1, n=4096, seed=10322096095657499354 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4096, seed=10322096095657499357 +benchmark: 2,273 ns/iteration, speed vs FLTX 0.07× + +114.9 + +113.0 + +3/3 + +2273 ns + +No + +- + + + + +log1p + +fltx bl::f128 +API: bl::log1p +mean: 121.4 bits +p01: 105.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 134.6, p01 106.5, worst 104.6, required 80.0, margin 24.6, n=4098, seed=10322096095657499336 +moderate: mean 108.1, p01 105.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 151.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.831166× + +121.4 + +103.6 + +2/2 + +151 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp log1p +mean: 120.9 bits +p01: 104.6 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 105.8, worst 104.1, required 80.0, margin 24.1, n=4098, seed=10322096095657499336 +moderate: mean 107.2, p01 104.6, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +benchmark: 276.8 ns/iteration, speed vs FLTX 0.55× + +120.9 + +103.8 + +2/2 + +277 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::log1p +mean: 119.7 bits +p01: 101.3 bits +worst: 100.2 bits +domains: 2/2 +minimum threshold margin: 20.2 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean 134.6, p01 107.2, worst 104.0, required 80.0, margin 24.0, n=4098, seed=10322096095657499336 +moderate: mean 104.8, p01 101.3, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +benchmark: 3,851 ns/iteration, speed vs FLTX 0.04× + +119.7 + +100.2 + +2/2 + +3851 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::log1p +mean: 128.1 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 141.3, p01 113.6, worst 113.1, required 80.0, margin 33.1, n=4098, seed=10322096095657499336 +moderate: mean 115.0, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,313 ns/iteration, speed vs FLTX 0.07× + +128.1 + +113.0 + +2/2 + +2313 ns + +No + +✗ + + + + +Trigonometric + + + + + + + +sin + +fltx bl::f128 +API: bl::sin +mean: 110.6 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 18.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 107.9, p01 98.8, worst 98.6, required 80.0, margin 18.6, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 105.9, worst 105.0, required 80.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 114.3, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 101.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.405926× + +110.6 + +98.6 + +3/3 + +101 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sin +mean: 52.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 15.7, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 106.7, p01 101.7, worst 97.4, required 80.0, margin 17.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 36.0, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 243.4 ns/iteration, speed vs FLTX 0.42× + +52.5 + +0.0 + +1/3 + +243 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sin +mean: 51.4 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.2, p01 98.8, worst 94.5, required 80.0, margin 14.5, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 35.9, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 6,913 ns/iteration, speed vs FLTX 0.01× + +51.4 + +0.0 + +1/3 + +6913 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sin +mean: 116.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4110, seed=10322096095657499353 +moderate: mean 115.1, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 118.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 1,845 ns/iteration, speed vs FLTX 0.05× + +116.1 + +113.0 + +3/3 + +1845 ns + +No + +✗ + + + + +cos + +fltx bl::f128 +API: bl::cos +mean: 113.5 bits +p01: 100.3 bits +worst: 99.2 bits +domains: 3/3 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 117.9, p01 105.7, worst 99.2, required 80.0, margin 19.2, n=4110, seed=10322096095657499353 +moderate: mean 109.3, p01 106.0, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 113.4, p01 100.3, worst 100.2, required 80.0, margin 20.2, n=4315, seed=10322096095657499369 +benchmark: 101.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.409622× + +113.5 + +99.2 + +3/3 + +101 ns + +Both + +- + + +qdpp dd_real +API: qdpp cos +mean: 63.6 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 54.3, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 106.6, p01 101.4, worst 96.3, required 80.0, margin 16.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 31.6, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 243.7 ns/iteration, speed vs FLTX 0.42× + +63.6 + +0.0 + +1/3 + +244 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cos +mean: 63.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 53.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4110, seed=10322096095657499353 +moderate: mean 105.1, p01 98.9, worst 94.0, required 80.0, margin 14.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 33.1, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=4315, seed=10322096095657499369 +benchmark: 6,894 ns/iteration, speed vs FLTX 0.01× + +63.3 + +0.0 + +1/3 + +6894 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::cos +mean: 117.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 118.8, p01 113.4, worst 113.1, required 80.0, margin 33.1, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 117.8, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4315, seed=10322096095657499369 +benchmark: 1,843 ns/iteration, speed vs FLTX 0.05× + +117.2 + +113.0 + +3/3 + +1843 ns + +No + +- + + + + +sincos + +fltx bl::f128 +API: bl::sincos +benchmark: 107.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.233136× + +- + +- + +- + +107 ns + +- + +- + + +qdpp dd_real +API: qdpp sincos +benchmark: 239.1 ns/iteration, speed vs FLTX 0.45× + +- + +- + +- + +239 ns + +- + +- + + +cppdd: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Quad +API: tlfloat::sincos +benchmark: 3,739 ns/iteration, speed vs FLTX 0.03× + +- + +- + +- + +3739 ns + +- + +- + + + + +tan + +fltx bl::f128 +API: bl::tan +mean: 106.7 bits +p01: 98.8 bits +worst: 98.6 bits +domains: 3/3 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 106.6, p01 98.8, worst 98.6, required 75.0, margin 23.6, n=4110, seed=10322096095657499353 +moderate: mean 107.0, p01 104.4, worst 103.7, required 75.0, margin 28.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 106.5, p01 100.3, worst 100.2, required 75.0, margin 25.2, n=4315, seed=10322096095657499369 +benchmark: 107.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.434116× + +106.7 + +98.6 + +3/3 + +108 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp tan +mean: 42.6 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -75.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 14.7, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4110, seed=10322096095657499353 +moderate: mean 105.9, p01 100.7, worst 96.3, required 75.0, margin 21.3, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 9.2, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4315, seed=10322096095657499369 +benchmark: 262.3 ns/iteration, speed vs FLTX 0.41× + +42.6 + +0.0 + +1/3 + +262 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tan +mean: 41.2 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -75.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 13.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4110, seed=10322096095657499353 +moderate: mean 103.3, p01 97.9, worst 94.0, required 75.0, margin 19.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 9.0, p01 0.0, worst 0.0, required 75.0, margin -75.0, n=4315, seed=10322096095657499369 +benchmark: 13,897 ns/iteration, speed vs FLTX 0.01× + +41.2 + +0.0 + +1/3 + +13897 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tan +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 38.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 114.9, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4110, seed=10322096095657499353 +moderate: mean 115.0, p01 113.1, worst 113.0, required 75.0, margin 38.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 115.0, p01 113.2, worst 113.0, required 75.0, margin 38.0, n=4315, seed=10322096095657499369 +benchmark: 2,194 ns/iteration, speed vs FLTX 0.05× + +115.0 + +113.0 + +3/3 + +2194 ns + +No + +✗ + + + + +asin + +fltx bl::f128 +API: bl::asin +mean: 108.6 bits +p01: 105.1 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 109.2, p01 106.1, worst 106.0, required 80.0, margin 26.0, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 105.1, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +benchmark: 189.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.128457× + +108.6 + +104.1 + +2/2 + +189 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp asin +mean: 108.0 bits +p01: 103.5 bits +worst: 102.4 bits +domains: 2/2 +minimum threshold margin: 22.4 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 109.5, p01 107.4, worst 104.4, required 80.0, margin 24.4, n=4105, seed=10322096095657499355 +moderate: mean 106.6, p01 103.5, worst 102.4, required 80.0, margin 22.4, n=4099, seed=10322096095657499356 +benchmark: 402.8 ns/iteration, speed vs FLTX 0.47× + +108.0 + +102.4 + +2/2 + +403 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asin +mean: 106.8 bits +p01: 104.0 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.0, p01 105.5, worst 105.4, required 80.0, margin 25.4, n=4105, seed=10322096095657499355 +moderate: mean 106.5, p01 104.0, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499356 +benchmark: 25,446 ns/iteration, speed vs FLTX 0.01× + +106.8 + +103.5 + +2/2 + +25446 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asin +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.1, p01 113.7, worst 113.7, required 80.0, margin 33.7, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,954 ns/iteration, speed vs FLTX 0.06× + +115.0 + +113.0 + +2/2 + +2954 ns + +No + +✗ + + + + +acos + +fltx bl::f128 +API: bl::acos +mean: 106.5 bits +p01: 95.8 bits +worst: 81.6 bits +domains: 2/2 +minimum threshold margin: 1.6 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 104.4, p01 95.8, worst 81.6, required 80.0, margin 1.6, n=4105, seed=10322096095657499355 +moderate: mean 108.6, p01 105.1, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +benchmark: 194.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.122299× + +106.5 + +81.6 + +2/2 + +194 ns + +Both + +- + + +qdpp dd_real +API: qdpp acos +mean: 108.1 bits +p01: 104.4 bits +worst: 103.3 bits +domains: 2/2 +minimum threshold margin: 23.3 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 108.2, p01 104.4, worst 103.7, required 80.0, margin 23.7, n=4105, seed=10322096095657499355 +moderate: mean 108.0, p01 104.4, worst 103.3, required 80.0, margin 23.3, n=4099, seed=10322096095657499356 +benchmark: 412.4 ns/iteration, speed vs FLTX 0.47× + +108.1 + +103.3 + +2/2 + +412 ns + +No + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acos +mean: 106.9 bits +p01: 104.1 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.1, p01 104.6, worst 104.1, required 80.0, margin 24.1, n=4105, seed=10322096095657499355 +moderate: mean 106.8, p01 104.1, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 24,822 ns/iteration, speed vs FLTX 0.01× + +106.9 + +103.1 + +2/2 + +24822 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::acos +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,980 ns/iteration, speed vs FLTX 0.07× + +114.9 + +113.0 + +2/2 + +2980 ns + +No + +- + + + + +atan + +fltx bl::f128 +API: bl::atan +mean: 108.7 bits +p01: 106.0 bits +worst: 104.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.8, p01 106.0, worst 104.9, required 80.0, margin 24.9, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 106.2, worst 105.3, required 80.0, margin 25.3, n=4099, seed=10322096095657499359 +benchmark: 136.9 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.298487× + +108.7 + +104.9 + +2/2 + +137 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atan +mean: 107.2 bits +p01: 103.5 bits +worst: 102.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 108.1, p01 103.9, worst 102.9, required 80.0, margin 22.9, n=4099, seed=10322096095657499356 +near_one: mean 106.2, p01 103.5, worst 102.9, required 80.0, margin 22.9, n=4099, seed=10322096095657499359 +benchmark: 314.8 ns/iteration, speed vs FLTX 0.44× + +107.2 + +102.9 + +2/2 + +315 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan +mean: 106.7 bits +p01: 104.2 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 106.8, p01 104.7, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499359 +benchmark: 4,408 ns/iteration, speed vs FLTX 0.03× + +106.7 + +103.6 + +2/2 + +4408 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan +mean: 115.0 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 2,631 ns/iteration, speed vs FLTX 0.05× + +115.0 + +113.0 + +2/2 + +2631 ns + +Inf + +✗ + + + + +atan2 + +fltx bl::f128 +API: bl::atan2 +mean: 108.7 bits +p01: 105.8 bits +worst: 104.5 bits +domains: 3/3 +minimum threshold margin: 24.5 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 116.8, p01 109.7, worst 109.7, required 80.0, margin 29.7, n=8, seed=10322096095657499351 +moderate: mean 108.8, p01 106.0, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.8, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 144.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.199736× + +108.7 + +104.5 + +3/3 + +144 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atan2 +mean: 106.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -80.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 0.0, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=8, seed=10322096095657499351 +moderate: mean 107.5, p01 103.7, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499356 +near_one: mean 106.3, p01 103.4, worst 102.6, required 80.0, margin 22.6, n=4099, seed=10322096095657499359 +benchmark: 316.9 ns/iteration, speed vs FLTX 0.45× + +106.8 + +0.0 + +2/3 + +317 ns + +No + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atan2 +mean: 106.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +extreme_finite: mean 61.2, p01 0.0, worst 0.0, required 80.0, margin -80.0, n=8, seed=10322096095657499351 +moderate: mean 106.9, p01 104.4, worst 103.7, required 80.0, margin 23.7, n=4099, seed=10322096095657499356 +near_one: mean 106.6, p01 104.2, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 4,226 ns/iteration, speed vs FLTX 0.03× + +106.7 + +0.0 + +2/3 + +4226 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atan2 +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 3/3 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 118.6, p01 114.8, worst 114.8, required 80.0, margin 34.8, n=8, seed=10322096095657499351 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,594 ns/iteration, speed vs FLTX 0.06× + +115.0 + +113.0 + +3/3 + +2594 ns + +Inf + +✗ + + + + +Hyperbolic + + + + + + + +sinh + +fltx bl::f128 +API: bl::sinh +mean: 107.4 bits +p01: 104.7 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 107.4, p01 104.9, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.4, p01 104.7, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 124.4 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.219818× + +107.4 + +103.6 + +2/2 + +124 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp sinh +mean: 107.0 bits +p01: 104.4 bits +worst: 103.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 106.9, p01 104.4, worst 103.9, required 80.0, margin 23.9, n=4099, seed=10322096095657499356 +near_one: mean 107.1, p01 104.4, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499359 +benchmark: 276.2 ns/iteration, speed vs FLTX 0.45× + +107.0 + +103.6 + +2/2 + +276 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::sinh +mean: 103.5 bits +p01: 100.6 bits +worst: 99.9 bits +domains: 2/2 +minimum threshold margin: 19.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 103.8, p01 101.0, worst 100.2, required 80.0, margin 20.2, n=4099, seed=10322096095657499356 +near_one: mean 103.3, p01 100.6, worst 99.9, required 80.0, margin 19.9, n=4099, seed=10322096095657499359 +benchmark: 2,737 ns/iteration, speed vs FLTX 0.05× + +103.5 + +99.9 + +2/2 + +2737 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::sinh +mean: 115.0 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,898 ns/iteration, speed vs FLTX 0.07× + +115.0 + +113.0 + +2/2 + +1898 ns + +No + +✗ + + + + +cosh + +fltx bl::f128 +API: bl::cosh +mean: 107.9 bits +p01: 105.1 bits +worst: 104.4 bits +domains: 2/2 +minimum threshold margin: 24.4 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.7, p01 105.1, worst 104.4, required 80.0, margin 24.4, n=4099, seed=10322096095657499356 +near_one: mean 108.2, p01 105.6, worst 104.8, required 80.0, margin 24.8, n=4099, seed=10322096095657499359 +benchmark: 123.6 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.21803× + +107.9 + +104.4 + +2/2 + +124 ns + +Both + +- + + +qdpp dd_real +API: qdpp cosh +mean: 107.7 bits +p01: 104.9 bits +worst: 104.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 107.5, p01 104.9, worst 104.1, required 80.0, margin 24.1, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.3, worst 104.5, required 80.0, margin 24.5, n=4099, seed=10322096095657499359 +benchmark: 274.2 ns/iteration, speed vs FLTX 0.45× + +107.7 + +104.1 + +2/2 + +274 ns + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::cosh +mean: 104.0 bits +p01: 101.1 bits +worst: 100.6 bits +domains: 2/2 +minimum threshold margin: 20.6 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 103.8, p01 101.1, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.2, p01 101.5, worst 101.0, required 80.0, margin 21.0, n=4099, seed=10322096095657499359 +benchmark: 2,738 ns/iteration, speed vs FLTX 0.05× + +104.0 + +100.6 + +2/2 + +2738 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::cosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,678 ns/iteration, speed vs FLTX 0.07× + +114.9 + +113.0 + +2/2 + +1678 ns + +No + +- + + + + +tanh + +fltx bl::f128 +API: bl::tanh +mean: 109.2 bits +p01: 105.1 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 109.9, p01 105.1, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 108.5, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499359 +benchmark: 129.3 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.175228× + +109.2 + +103.8 + +2/2 + +129 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp tanh +mean: 109.3 bits +p01: 105.4 bits +worst: 104.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 109.9, p01 105.4, worst 104.0, required 80.0, margin 24.0, n=4099, seed=10322096095657499356 +near_one: mean 108.6, p01 105.7, worst 105.1, required 80.0, margin 25.1, n=4099, seed=10322096095657499359 +benchmark: 281.3 ns/iteration, speed vs FLTX 0.46× + +109.3 + +104.0 + +2/2 + +281 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tanh +mean: 105.8 bits +p01: 101.2 bits +worst: 100.3 bits +domains: 2/2 +minimum threshold margin: 20.3 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 107.0, p01 102.2, worst 100.6, required 80.0, margin 20.6, n=4099, seed=10322096095657499356 +near_one: mean 104.5, p01 101.2, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 2,915 ns/iteration, speed vs FLTX 0.04× + +105.8 + +100.3 + +2/2 + +2915 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::tanh +mean: 115.2 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.5, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 1,823 ns/iteration, speed vs FLTX 0.07× + +115.2 + +113.0 + +2/2 + +1823 ns + +Inf + +✗ + + + + +asinh + +fltx bl::f128 +API: bl::asinh +mean: 108.1 bits +p01: 105.2 bits +worst: 103.8 bits +domains: 2/2 +minimum threshold margin: 23.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 108.2, p01 105.3, worst 103.8, required 80.0, margin 23.8, n=4099, seed=10322096095657499356 +near_one: mean 107.9, p01 105.2, worst 104.2, required 80.0, margin 24.2, n=4099, seed=10322096095657499359 +benchmark: 136.2 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.355879× + +108.1 + +103.8 + +2/2 + +136 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp asinh +mean: 107.1 bits +p01: 104.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 107.4, p01 104.6, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499356 +near_one: mean 106.7, p01 104.0, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499359 +benchmark: 320.8 ns/iteration, speed vs FLTX 0.42× + +107.1 + +0.0 + +1/2 + +321 ns + +NaN + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::asinh +mean: 104.5 bits +p01: 100.8 bits +worst: 99.8 bits +domains: 2/2 +minimum threshold margin: 19.8 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 105.1, p01 101.7, worst 100.0, required 80.0, margin 20.0, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 100.8, worst 99.8, required 80.0, margin 19.8, n=4099, seed=10322096095657499359 +benchmark: 5,299 ns/iteration, speed vs FLTX 0.03× + +104.5 + +99.8 + +2/2 + +5299 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::asinh +mean: 114.9 bits +p01: 113.1 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 114.9, p01 113.1, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 4,954 ns/iteration, speed vs FLTX 0.03× + +114.9 + +113.0 + +2/2 + +4954 ns + +No + +✗ + + + + +acosh + +fltx bl::f128 +API: bl::acosh +mean: 108.0 bits +p01: 104.3 bits +worst: 103.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 107.7, p01 104.3, worst 103.7, required 80.0, margin 23.7, n=4101, seed=10322096095657499355 +moderate: mean 108.4, p01 105.7, worst 104.6, required 80.0, margin 24.6, n=4099, seed=10322096095657499387 +benchmark: 162.8 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.956422× + +108.0 + +103.7 + +2/2 + +163 ns + +Both + +- + + +qdpp dd_real +API: qdpp acosh +mean: 107.2 bits +p01: 103.9 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -80.0 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 106.7, p01 103.9, worst 0.0, required 80.0, margin -80.0, n=4101, seed=10322096095657499355 +moderate: mean 107.8, p01 105.1, worst 0.0, required 80.0, margin -80.0, n=4099, seed=10322096095657499387 +benchmark: 318.6 ns/iteration, speed vs FLTX 0.51× + +107.2 + +0.0 + +0/2 + +319 ns + +NaN + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::acosh +mean: 105.6 bits +p01: 101.7 bits +worst: 100.4 bits +domains: 2/2 +minimum threshold margin: 20.4 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 105.7, p01 101.7, worst 101.1, required 80.0, margin 21.1, n=4101, seed=10322096095657499355 +moderate: mean 105.5, p01 102.2, worst 100.4, required 80.0, margin 20.4, n=4099, seed=10322096095657499387 +benchmark: 6,087 ns/iteration, speed vs FLTX 0.03× + +105.6 + +100.4 + +2/2 + +6087 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::acosh +mean: 114.9 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 114.7, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4101, seed=10322096095657499355 +moderate: mean 115.1, p01 113.3, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499387 +benchmark: 4,750 ns/iteration, speed vs FLTX 0.03× + +114.9 + +113.0 + +2/2 + +4750 ns + +No + +- + + + + +atanh + +fltx bl::f128 +API: bl::atanh +mean: 108.1 bits +p01: 104.5 bits +worst: 103.1 bits +domains: 2/2 +minimum threshold margin: 23.1 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 108.5, p01 106.7, worst 106.2, required 80.0, margin 26.2, n=4105, seed=10322096095657499355 +moderate: mean 107.7, p01 104.5, worst 103.1, required 80.0, margin 23.1, n=4099, seed=10322096095657499356 +benchmark: 160.9 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.977399× + +108.1 + +103.1 + +2/2 + +161 ns + +Both + +✓ + + +qdpp dd_real +API: qdpp atanh +mean: 107.6 bits +p01: 104.4 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -80.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 108.0, p01 105.4, worst 0.0, required 80.0, margin -80.0, n=4105, seed=10322096095657499355 +moderate: mean 107.2, p01 104.4, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +benchmark: 318.1 ns/iteration, speed vs FLTX 0.51× + +107.6 + +0.0 + +1/2 + +318 ns + +Both + +✗ + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::atanh +mean: 106.7 bits +p01: 102.1 bits +worst: 101.3 bits +domains: 2/2 +minimum threshold margin: 21.3 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 107.8, p01 106.3, worst 104.6, required 80.0, margin 24.6, n=4105, seed=10322096095657499355 +moderate: mean 105.6, p01 102.1, worst 101.3, required 80.0, margin 21.3, n=4099, seed=10322096095657499356 +benchmark: 22,894 ns/iteration, speed vs FLTX 0.01× + +106.7 + +101.3 + +2/2 + +22894 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::atanh +mean: 115.1 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 115.4, p01 113.9, worst 113.2, required 80.0, margin 33.2, n=4105, seed=10322096095657499355 +moderate: mean 114.9, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 2,444 ns/iteration, speed vs FLTX 0.07× + +115.1 + +113.0 + +2/2 + +2444 ns + +No + +✗ + + + + +Special + + + + + + + +erfc + +fltx bl::f128 +API: bl::erfc +mean: 107.2 bits +p01: 100.1 bits +worst: 99.2 bits +domains: 2/2 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 109.1, p01 100.1, worst 99.2, required 80.0, margin 19.2, n=4099, seed=10322096095657499356 +near_one: mean 105.3, p01 102.4, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499359 +benchmark: 790.7 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 10.110837× + +107.2 + +99.2 + +2/2 + +791 ns + +Both + +- + + +qdpp: erfc is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erfc +mean: 106.3 bits +p01: 99.6 bits +worst: 99.1 bits +domains: 2/2 +minimum threshold margin: 19.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 108.8, p01 99.6, worst 99.1, required 80.0, margin 19.1, n=4099, seed=10322096095657499356 +near_one: mean 103.8, p01 101.1, worst 100.3, required 80.0, margin 20.3, n=4099, seed=10322096095657499359 +benchmark: 7,995 ns/iteration, speed vs FLTX 0.10× + +106.3 + +99.1 + +2/2 + +7995 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::erfc +mean: 115.1 bits +p01: 113.2 bits +worst: 113.1 bits +domains: 2/2 +minimum threshold margin: 33.1 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 115.2, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499356 +near_one: mean 115.0, p01 113.2, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 34,464 ns/iteration, speed vs FLTX 0.02× + +115.1 + +113.1 + +2/2 + +34464 ns + +Inf + +- + + + + +erf + +fltx bl::f128 +API: bl::erf +mean: 110.9 bits +p01: 104.3 bits +worst: 103.5 bits +domains: 2/2 +minimum threshold margin: 23.5 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 114.0, p01 105.1, worst 103.6, required 80.0, margin 23.6, n=4099, seed=10322096095657499356 +near_one: mean 107.8, p01 104.3, worst 103.5, required 80.0, margin 23.5, n=4099, seed=10322096095657499359 +benchmark: 788.6 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 10.148576× + +110.9 + +103.5 + +2/2 + +789 ns + +Both + +✓ + + +qdpp: erf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::erf +mean: 110.1 bits +p01: 102.2 bits +worst: 101.2 bits +domains: 2/2 +minimum threshold margin: 21.2 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 114.0, p01 103.7, worst 101.6, required 80.0, margin 21.6, n=4099, seed=10322096095657499356 +near_one: mean 106.2, p01 102.2, worst 101.2, required 80.0, margin 21.2, n=4099, seed=10322096095657499359 +benchmark: 8,003 ns/iteration, speed vs FLTX 0.10× + +110.1 + +101.2 + +2/2 + +8003 ns + +Both + +✗ + + +TLFloat Quad +API: tlfloat::erf +mean: 115.2 bits +p01: 113.3 bits +worst: 113.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 115.4, p01 113.6, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499356 +near_one: mean 115.1, p01 113.3, worst 113.1, required 80.0, margin 33.1, n=4099, seed=10322096095657499359 +benchmark: 34,452 ns/iteration, speed vs FLTX 0.02× + +115.2 + +113.0 + +2/2 + +34452 ns + +Inf + +✗ + + + + +tgamma + +fltx bl::f128 +API: bl::tgamma +mean: 105.6 bits +p01: 98.3 bits +worst: 97.3 bits +domains: 1/1 +minimum threshold margin: 17.3 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.6, p01 98.3, worst 97.3, required 80.0, margin 17.3, n=4099, seed=10322096095657499368 +benchmark: 561.1 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 31.300151× + +105.6 + +97.3 + +1/1 + +561 ns + +Both + +- + + +qdpp: tgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::tgamma +mean: 100.8 bits +p01: 97.4 bits +worst: 96.5 bits +domains: 1/1 +minimum threshold margin: 16.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 100.8, p01 97.4, worst 96.5, required 80.0, margin 16.5, n=4099, seed=10322096095657499368 +benchmark: 17,562 ns/iteration, speed vs FLTX 0.03× + +100.8 + +96.5 + +1/1 + +17562 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::tgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499368 +benchmark: 27,766 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +1/1 + +27766 ns + +No + +- + + + + +lgamma + +fltx bl::f128 +API: bl::lgamma +mean: 107.3 bits +p01: 103.2 bits +worst: 102.2 bits +domains: 1/1 +minimum threshold margin: 22.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 107.3, p01 103.2, worst 102.2, required 80.0, margin 22.2, n=4099, seed=10322096095657499371 +benchmark: 616.4 ns/iteration, speed vs fastest competitor cppdd (boost::multiprecision::cpp_double_double): 35.214267× + +107.3 + +102.2 + +1/1 + +616 ns + +Both + +- + + +qdpp: lgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::cpp_double_double +API: boost::multiprecision::lgamma +mean: 105.1 bits +p01: 100.8 bits +worst: 92.1 bits +domains: 1/1 +minimum threshold margin: 12.1 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 105.1, p01 100.8, worst 92.1, required 80.0, margin 12.1, n=4099, seed=10322096095657499371 +benchmark: 21,707 ns/iteration, speed vs FLTX 0.03× + +105.1 + +92.1 + +1/1 + +21707 ns + +Both + +- + + +TLFloat Quad +API: tlfloat::lgamma +mean: 115.0 bits +p01: 113.2 bits +worst: 113.0 bits +domains: 1/1 +minimum threshold margin: 33.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 115.0, p01 113.2, worst 113.0, required 80.0, margin 33.0, n=4099, seed=10322096095657499371 +benchmark: 25,002 ns/iteration, speed vs FLTX 0.02× + +115.0 + +113.0 + +1/1 + +25002 ns + +No + +- + + + + +Comparisons + + + + + + + +equal + +fltx bl::f128 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.949 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.474448× + += + += + +1/1 + +0.95 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.450 ns/iteration, speed vs FLTX 2.11× + += + += + +1/1 + +0.45 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.20 ns/iteration, speed vs FLTX 0.79× + += + += + +1/1 + +1.2 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 7.03 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +7.0 ns + +Both + +- + + + + +not_equal + +fltx bl::f128 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.03 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.472884× + += + += + +1/1 + +1.0 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.487 ns/iteration, speed vs FLTX 2.11× + += + += + +1/1 + +0.49 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.14 ns/iteration, speed vs FLTX 0.91× + += + += + +1/1 + +1.1 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.94 ns/iteration, speed vs FLTX 0.15× + += + += + +1/1 + +6.9 ns + +Both + +- + + + + +less + +fltx bl::f128 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.11 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.758486× + += + += + +1/1 + +1.1 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.838 ns/iteration, speed vs FLTX 1.32× + += + += + +1/1 + +0.84 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.07 ns/iteration, speed vs FLTX 1.03× + += + += + +1/1 + +1.1 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 7.29 ns/iteration, speed vs FLTX 0.15× + += + += + +1/1 + +7.3 ns + +Both + +- + + + + +greater + +fltx bl::f128 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.25 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.560772× + += + += + +1/1 + +1.3 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.701 ns/iteration, speed vs FLTX 1.78× + += + += + +1/1 + +0.70 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.21 ns/iteration, speed vs FLTX 1.03× + += + += + +1/1 + +1.2 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 7.65 ns/iteration, speed vs FLTX 0.16× + += + += + +1/1 + +7.6 ns + +Both + +- + + + + +less_equal + +fltx bl::f128 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.02 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.898669× + += + += + +1/1 + +1.0 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.919 ns/iteration, speed vs FLTX 1.11× + += + += + +1/1 + +0.92 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.16 ns/iteration, speed vs FLTX 0.88× + += + += + +1/1 + +1.2 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 7.78 ns/iteration, speed vs FLTX 0.13× + += + += + +1/1 + +7.8 ns + +Both + +- + + + + +greater_equal + +fltx bl::f128 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.16 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.693508× + += + += + +1/1 + +1.2 ns + +Both + +- + + +qdpp dd_real +API: qdpp operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.802 ns/iteration, speed vs FLTX 1.44× + += + += + +1/1 + +0.80 ns + +Both + +- + + +boost::multiprecision::cpp_double_double +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.971 ns/iteration, speed vs FLTX 1.19× + += + += + +1/1 + +0.97 ns + +Both + +- + + +TLFloat Quad +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 90.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 7.71 ns/iteration, speed vs FLTX 0.15× + += + += + +1/1 + +7.7 ns + +Both + +- + + + + +Random + + + + + + + +uniform_real + +fltx bl::f128 +API: bl::uniform_real +benchmark: 21.33 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.141343× + +- + +- + +- + +21.3 ns + +- + +- + + +qdpp dd_real +API: qdpp ddrand +benchmark: 24.34 ns/iteration, speed vs FLTX 0.88× + +- + +- + +- + +24.3 ns + +- + +- + + +cppdd: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f128 +API: bl::normal +benchmark: 100.5 ns/iteration (no available competitor) + +- + +- + +- + +101 ns + +- + +- + + +qdpp: normal is unavailable + +- + +- + +- + +- + +- + +- + + +cppdd: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + + +product_sum + +fltx bl::f128 +API: bl::product_sum +benchmark: 5.09 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.115646× + +- + +- + +- + +5.1 ns + +- + +- + + +qdpp dd_real +API: same expression +benchmark: 5.68 ns/iteration, speed vs FLTX 0.90× + +- + +- + +- + +5.7 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same expression +benchmark: 234.8 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +235 ns + +- + +- + + +TLFloat Quad +API: same expression +benchmark: 128.7 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +129 ns + +- + +- + + + + +chained_arithmetic + +fltx bl::f128 +API: same workload +benchmark: 23.44 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.625398× + +- + +- + +- + +23.4 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 38.09 ns/iteration, speed vs FLTX 0.62× + +- + +- + +- + +38.1 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 251.3 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +251 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 285.5 ns/iteration, speed vs FLTX 0.08× + +- + +- + +- + +286 ns + +- + +- + + + + +affine_trig + +fltx bl::f128 +API: same workload +benchmark: 213.1 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.002904× + +- + +- + +- + +213 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 426.8 ns/iteration, speed vs FLTX 0.50× + +- + +- + +- + +427 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 10,848 ns/iteration, speed vs FLTX 0.02× + +- + +- + +- + +10848 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 3,828 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +3828 ns + +- + +- + + + + +mandelbrot + +fltx bl::f128 +API: same workload +benchmark: 17.82 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.908851× + +- + +- + +- + +17.8 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 16.20 ns/iteration, speed vs FLTX 1.10× + +- + +- + +- + +16.2 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 468.7 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +469 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 361.4 ns/iteration, speed vs FLTX 0.05× + +- + +- + +- + +361 ns + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f128 +API: same workload +benchmark: 72.09 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.249935× + +- + +- + +- + +72.1 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 90.11 ns/iteration, speed vs FLTX 0.80× + +- + +- + +- + +90.1 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 2,018 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +2018 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 1,325 ns/iteration, speed vs FLTX 0.05× + +- + +- + +- + +1325 ns + +- + +- + + + + +horner_polynomial + +fltx bl::f128 +API: same workload +benchmark: 113.9 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 0.86402× + +- + +- + +- + +114 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 98.38 ns/iteration, speed vs FLTX 1.16× + +- + +- + +- + +98.4 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 1,478 ns/iteration, speed vs FLTX 0.08× + +- + +- + +- + +1478 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 962.1 ns/iteration, speed vs FLTX 0.12× + +- + +- + +- + +962 ns + +- + +- + + + + +newton_root + +fltx bl::f128 +API: same workload +benchmark: 33.54 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.568058× + +- + +- + +- + +33.5 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 52.60 ns/iteration, speed vs FLTX 0.64× + +- + +- + +- + +52.6 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 524.0 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +524 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 421.0 ns/iteration, speed vs FLTX 0.08× + +- + +- + +- + +421 ns + +- + +- + + + + +log_sum_exp + +fltx bl::f128 +API: same workload +benchmark: 907.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 1.940454× + +- + +- + +- + +908 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 1,761 ns/iteration, speed vs FLTX 0.52× + +- + +- + +- + +1761 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 21,400 ns/iteration, speed vs FLTX 0.04× + +- + +- + +- + +21400 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 14,350 ns/iteration, speed vs FLTX 0.06× + +- + +- + +- + +14350 ns + +- + +- + + + + +haversine + +fltx bl::f128 +API: same workload +benchmark: 540.7 ns/iteration, speed vs fastest competitor ddreal (qdpp dd_real): 2.512776× + +- + +- + +- + +541 ns + +- + +- + + +qdpp dd_real +API: same workload +benchmark: 1,359 ns/iteration, speed vs FLTX 0.40× + +- + +- + +- + +1359 ns + +- + +- + + +boost::multiprecision::cpp_double_double +API: same workload +benchmark: 70,800 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +70800 ns + +- + +- + + +TLFloat Quad +API: same workload +benchmark: 11,138 ns/iteration, speed vs FLTX 0.05× + +- + +- + +- + +11138 ns + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/windows_x86_64_MinGW_f256_fastmath_overview.svg b/validation/metrics/generated/overview/windows_x86_64_MinGW_f256_fastmath_overview.svg new file mode 100644 index 0000000..fae7150 --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MinGW_f256_fastmath_overview.svg @@ -0,0 +1,3020 @@ + + + + +f256 consumer fast-math metrics overview — Windows / x64 / GCC (MinGW-w64) +Accuracy excludes the subnormal domain; support is reported separately. Speed is relative to FLTX. + +operation + + +bl::f256 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + + +Arithmetic + + + + +add + +fltx bl::f256 +API: bl::add +mean: 226.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: no +subnormal support: no +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 222.6, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=326, seed=10322096095657499292 +benchmark: 10.46 ns/iteration (no available competitor) + +226.0 + +215.3 + +1/1 + +10.46 ns + +Both + +✗ + +✗ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 226.1 bits +p01: 215.6 bits +worst: 214.7 bits +domains: 1/1 +minimum threshold margin: 24.7 bits +special values: Both +signed zero: no +subnormal support: no +general: mean 226.1, p01 215.6, worst 214.7, required 190.0, margin 24.7, n=3791, seed=10322096095657499292 +subnormal: mean 227.7, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=305, seed=10322096095657499292 +benchmark: 10.39 ns/iteration (no available competitor) + +226.1 + +214.7 + +1/1 + +10.39 ns + +Both + +✗ + +✗ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 216.3 bits +worst: 215.2 bits +domains: 1/1 +minimum threshold margin: 25.2 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 25.30 ns/iteration (no available competitor) + +220.0 + +215.2 + +1/1 + +25.30 ns + +NaN + +✗ + +✓ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 1/1 +minimum threshold margin: 24.8 bits +special values: Both +signed zero: yes +subnormal support: no +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 166.6, p01 54.0, worst 54.0, required 190.0, margin -136.0, n=55, seed=10322096095657499292 +benchmark: 107.2 ns/iteration (no available competitor) + +219.2 + +214.8 + +1/1 + +107.2 ns + +Both + +✓ + +✗ + + + + +IO + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 347.8 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +347.8 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 303.7 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +303.7 ns + +Both + +✗ + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 462.1 ns/iteration (no available competitor) + +219.7 + +212.0 + +2/2 + +462.1 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.29 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.29 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.24 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.24 ns + +Both + +✓ + +- + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.31 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +2.31 ns + +Both + +✗ + +- + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 10.10 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +10.10 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 9.13 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +9.13 ns + +Both + +✓ + +- + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 5.13 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +5.13 ns + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 4.85 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +4.85 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 128.3 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +128.3 ns + +Both + +✓ + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 167.4 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +167.4 ns + +Both + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 71.15 ns/iteration (no available competitor) + +244.0 + +217.7 + +3/3 + +71.15 ns + +Both + +✓ + +- + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 99.61 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +99.61 ns + +Both + +✓ + +- + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 98.10 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +98.10 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: no +subnormal: mean 125.3, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.694 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.694 ns + +Both + +✗ + +✗ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.694 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.694 ns + +Both + +✗ + +- + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 37.91 ns/iteration (no available competitor) + +229.7 + +215.1 + +3/3 + +37.91 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: Inf +signed zero: yes +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 104.0 ns/iteration (no available competitor) + +217.9 + +214.6 + +2/2 + +104.0 ns + +Inf + +✓ + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.47 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.47 ns + +Inf + +✓ + +- + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.48 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.48 ns + +Inf + +✓ + +- + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 5.30 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +5.30 ns + +Both + +✓ + +- + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.667 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.667 ns + +Both + +✓ + +- + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.20 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +6.20 ns + +Both + +✓ + +- + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.90 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +5.90 ns + +Both + +✓ + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.90 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +5.90 ns + +Both + +✓ + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.58 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +9.58 ns + +Both + +✓ + +✓ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 14.31 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +14.31 ns + +Both + +✓ + +- + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.929 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +0.929 ns + +- + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.07 ns/iteration (no available competitor) + +exact + +exact + +2/2 + +1.07 ns + +Both + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 4.21 ns/iteration (no available competitor) + +- + +- + +- + +4.21 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 4.28 ns/iteration (no available competitor) + +- + +- + +- + +4.28 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 22.79 ns/iteration (no available competitor) + +220.1 + +215.3 + +2/2 + +22.79 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.8 bits +p01: 211.3 bits +worst: 209.6 bits +domains: 3/3 +minimum threshold margin: 19.6 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 243.4, p01 215.9, worst 210.0, required 190.0, margin 20.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 121.2 ns/iteration (no available competitor) + +217.8 + +209.6 + +3/3 + +121.2 ns + +Both + +✓ + +✓ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 214.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 214.9, required 190.0, margin 24.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 387.4 ns/iteration (no available competitor) + +219.3 + +214.9 + +2/2 + +387.4 ns + +Both + +✓ + +- + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 174.9 ns/iteration (no available competitor) + +229.9 + +213.9 + +2/2 + +174.9 ns + +Both + +✓ + +- + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,714 ns/iteration (no available competitor) + +216.8 + +211.1 + +2/2 + +2,714 ns + +Both + +✓ + +- + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 121.7 ns/iteration (no available competitor) + +217.2 + +213.7 + +2/2 + +121.7 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.4 bits +p01: 209.8 bits +worst: 209.7 bits +domains: 2/2 +minimum threshold margin: 29.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.4, p01 209.8, worst 209.7, required 180.0, margin 29.7, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 1,073 ns/iteration (no available competitor) + +216.4 + +209.7 + +2/2 + +1,073 ns + +Both + +- + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 910.9 ns/iteration (no available competitor) + +218.0 + +214.2 + +2/2 + +910.9 ns + +Both + +- + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 228.0 bits +p01: 214.9 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 237.7, p01 215.4, worst 214.5, required 180.0, margin 34.5, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 1,068 ns/iteration (no available competitor) + +228.0 + +213.8 + +2/2 + +1,068 ns + +Both + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.7 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.1, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.1, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,781 ns/iteration (no available competitor) + +217.7 + +213.3 + +3/3 + +1,781 ns + +Both + +- + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 221.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,809 ns/iteration (no available competitor) + +218.6 + +213.2 + +3/3 + +1,809 ns + +Both + +- + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 217.5, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,828 ns/iteration (no available competitor) + +217.4 + +213.3 + +3/3 + +1,828 ns + +Both + +- + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 227.6 bits +p01: 214.8 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 237.7, p01 215.4, worst 214.3, required 180.0, margin 34.3, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,839 ns/iteration (no available competitor) + +227.6 + +214.0 + +2/2 + +1,839 ns + +Both + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 896.2 ns/iteration (no available competitor) + +222.3 + +202.9 + +3/3 + +896.2 ns + +Both + +✓ + +- + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 898.3 ns/iteration (no available competitor) + +226.8 + +208.7 + +3/3 + +898.3 ns + +Both + +- + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,299 ns/iteration (no available competitor) + +- + +- + +- + +1,299 ns + +- + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,356 ns/iteration (no available competitor) + +217.1 + +202.9 + +3/3 + +1,356 ns + +Both + +✓ + +- + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,406 ns/iteration (no available competitor) + +217.9 + +214.4 + +2/2 + +1,406 ns + +Both + +✓ + +- + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,408 ns/iteration (no available competitor) + +216.0 + +192.5 + +2/2 + +1,408 ns + +Both + +- + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 908.3 ns/iteration (no available competitor) + +218.1 + +214.7 + +2/2 + +908.3 ns + +Both + +✓ + +- + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 966.1 ns/iteration (no available competitor) + +217.9 + +214.3 + +3/3 + +966.1 ns + +Both + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,394 ns/iteration (no available competitor) + +217.0 + +213.8 + +2/2 + +1,394 ns + +Both + +✓ + +- + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,399 ns/iteration (no available competitor) + +217.5 + +214.2 + +2/2 + +1,399 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,316 ns/iteration (no available competitor) + +219.1 + +214.0 + +2/2 + +1,316 ns + +Both + +✓ + +- + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,807 ns/iteration (no available competitor) + +217.2 + +213.0 + +2/2 + +2,807 ns + +Both + +✓ + +- + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,565 ns/iteration (no available competitor) + +217.7 + +213.7 + +2/2 + +2,565 ns + +Both + +- + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,406 ns/iteration (no available competitor) + +218.3 + +213.3 + +2/2 + +2,406 ns + +Both + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 11,073 ns/iteration (no available competitor) + +208.2 + +189.8 + +2/2 + +11,073 ns + +Both + +- + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 11,166 ns/iteration (no available competitor) + +212.8 + +196.8 + +2/2 + +11,166 ns + +Both + +✓ + +- + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 10,127 ns/iteration (no available competitor) + +209.0 + +202.5 + +1/1 + +10,127 ns + +Both + +- + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 9,099 ns/iteration (no available competitor) + +211.9 + +199.2 + +1/1 + +9,099 ns + +Both + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.540 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.540 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.605 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.605 ns + +Both + +- + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.795 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.795 ns + +Both + +- + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.87 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +1.87 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.815 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.815 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.809 ns/iteration (no available competitor) + +exact + +exact + +1/1 + +0.809 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 40.56 ns/iteration (no available competitor) + +- + +- + +- + +40.56 ns + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 354.8 ns/iteration (no available competitor) + +- + +- + +- + +354.8 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 46.19 ns/iteration (no available competitor) + +- + +- + +- + +46.19 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 164.7 ns/iteration (no available competitor) + +- + +- + +- + +164.7 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,832 ns/iteration (no available competitor) + +- + +- + +- + +1,832 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 119.1 ns/iteration (no available competitor) + +- + +- + +- + +119.1 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 527.5 ns/iteration (no available competitor) + +- + +- + +- + +527.5 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 420.4 ns/iteration (no available competitor) + +- + +- + +- + +420.4 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 236.6 ns/iteration (no available competitor) + +- + +- + +- + +236.6 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 9,138 ns/iteration (no available competitor) + +- + +- + +- + +9,138 ns + +- + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,763 ns/iteration (no available competitor) + +- + +- + +- + +4,763 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/windows_x86_64_MinGW_f256_fastmath_overview_compact.svg b/validation/metrics/generated/overview/windows_x86_64_MinGW_f256_fastmath_overview_compact.svg new file mode 100644 index 0000000..4a9350c --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MinGW_f256_fastmath_overview_compact.svg @@ -0,0 +1,3017 @@ + + + + + +operation + + +bl::f256 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +Subnorm + +avg + +min + +pass + + + +Arithmetic + + + + +add + +fltx bl::f256 +API: bl::add +mean: 226.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: no +subnormal support: no +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 222.6, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=326, seed=10322096095657499292 +benchmark: 10.46 ns/iteration (no available competitor) + +226.0 + +215.3 + +1/1 + +10.5 ns + +Both + +✗ + +✗ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 226.1 bits +p01: 215.6 bits +worst: 214.7 bits +domains: 1/1 +minimum threshold margin: 24.7 bits +special values: Both +signed zero: no +subnormal support: no +general: mean 226.1, p01 215.6, worst 214.7, required 190.0, margin 24.7, n=3791, seed=10322096095657499292 +subnormal: mean 227.7, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=305, seed=10322096095657499292 +benchmark: 10.39 ns/iteration (no available competitor) + +226.1 + +214.7 + +1/1 + +10.4 ns + +Both + +✗ + +✗ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 216.3 bits +worst: 215.2 bits +domains: 1/1 +minimum threshold margin: 25.2 bits +special values: NaN +signed zero: no +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 25.30 ns/iteration (no available competitor) + +220.0 + +215.2 + +1/1 + +25.3 ns + +NaN + +✗ + +✓ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 1/1 +minimum threshold margin: 24.8 bits +special values: Both +signed zero: yes +subnormal support: no +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 166.6, p01 54.0, worst 54.0, required 190.0, margin -136.0, n=55, seed=10322096095657499292 +benchmark: 107.2 ns/iteration (no available competitor) + +219.2 + +214.8 + +1/1 + +107 ns + +Both + +✓ + +✗ + + + + +IO + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 347.8 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +348 ns + +Both + +✓ + +- + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 303.7 ns/iteration (no available competitor) + +220.4 + +217.0 + +2/2 + +304 ns + +Both + +✗ + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 462.1 ns/iteration (no available competitor) + +219.7 + +212.0 + +2/2 + +462 ns + +Both + +✓ + +- + + + + +Rounding + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.29 ns/iteration (no available competitor) + += + += + +1/1 + +1.3 ns + +Both + +✓ + +- + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.24 ns/iteration (no available competitor) + += + += + +1/1 + +1.2 ns + +Both + +✓ + +- + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.31 ns/iteration (no available competitor) + += + += + +1/1 + +2.3 ns + +Both + +✗ + +- + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 10.10 ns/iteration (no available competitor) + += + += + +1/1 + +10.1 ns + +Both + +✓ + +- + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 9.13 ns/iteration (no available competitor) + += + += + +1/1 + +9.1 ns + +Both + +✓ + +- + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 5.13 ns/iteration (no available competitor) + += + += + +1/1 + +5.1 ns + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 4.85 ns/iteration (no available competitor) + += + += + +1/1 + +4.8 ns + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 128.3 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +128 ns + +Both + +✓ + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 167.4 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +167 ns + +Both + +✓ + +- + + + + +Remainders + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 71.15 ns/iteration (no available competitor) + +244.0 + +217.7 + +3/3 + +71.2 ns + +Both + +✓ + +- + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 99.61 ns/iteration (no available competitor) + += + += + +1/1 + +99.6 ns + +Both + +✓ + +- + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 98.10 ns/iteration (no available competitor) + += + += + +1/1 + +98.1 ns + +Both + +✓ + +- + + + + +Float Utils + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: no +subnormal: mean 125.3, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.694 ns/iteration (no available competitor) + += + += + +1/1 + +0.69 ns + +Both + +✗ + +✗ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.694 ns/iteration (no available competitor) + += + += + +1/1 + +0.69 ns + +Both + +✗ + +- + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 37.91 ns/iteration (no available competitor) + +229.7 + +215.1 + +3/3 + +37.9 ns + +Both + +✗ + +- + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: Inf +signed zero: yes +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 104.0 ns/iteration (no available competitor) + +217.9 + +214.6 + +2/2 + +104 ns + +Inf + +✓ + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.47 ns/iteration (no available competitor) + += + += + +2/2 + +1.5 ns + +Inf + +✓ + +- + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.48 ns/iteration (no available competitor) + += + += + +2/2 + +1.5 ns + +Inf + +✓ + +- + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 5.30 ns/iteration (no available competitor) + += + += + +2/2 + +5.3 ns + +Both + +✓ + +- + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.667 ns/iteration (no available competitor) + += + += + +1/1 + +0.67 ns + +Both + +✓ + +- + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 6.20 ns/iteration (no available competitor) + += + += + +1/1 + +6.2 ns + +Both + +✓ + +- + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.90 ns/iteration (no available competitor) + += + += + +1/1 + +5.9 ns + +Both + +✓ + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 5.90 ns/iteration (no available competitor) + += + += + +1/1 + +5.9 ns + +Both + +✓ + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 9.58 ns/iteration (no available competitor) + += + += + +1/1 + +9.6 ns + +Both + +✓ + +✓ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 14.31 ns/iteration (no available competitor) + += + += + +2/2 + +14.3 ns + +Both + +✓ + +- + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 0.929 ns/iteration (no available competitor) + += + += + +2/2 + +0.93 ns + +- + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.07 ns/iteration (no available competitor) + += + += + +2/2 + +1.1 ns + +Both + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 4.21 ns/iteration (no available competitor) + +- + +- + +- + +4.2 ns + +- + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 4.28 ns/iteration (no available competitor) + +- + +- + +- + +4.3 ns + +- + +- + +- + + + + +Roots & powers + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 22.79 ns/iteration (no available competitor) + +220.1 + +215.3 + +2/2 + +22.8 ns + +Both + +✓ + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.8 bits +p01: 211.3 bits +worst: 209.6 bits +domains: 3/3 +minimum threshold margin: 19.6 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 243.4, p01 215.9, worst 210.0, required 190.0, margin 20.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 121.2 ns/iteration (no available competitor) + +217.8 + +209.6 + +3/3 + +121 ns + +Both + +✓ + +✓ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 214.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 214.9, required 190.0, margin 24.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 387.4 ns/iteration (no available competitor) + +219.3 + +214.9 + +2/2 + +387 ns + +Both + +✓ + +- + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 174.9 ns/iteration (no available competitor) + +229.9 + +213.9 + +2/2 + +175 ns + +Both + +✓ + +- + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,714 ns/iteration (no available competitor) + +216.8 + +211.1 + +2/2 + +2714 ns + +Both + +✓ + +- + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 121.7 ns/iteration (no available competitor) + +217.2 + +213.7 + +2/2 + +122 ns + +Both + +✗ + +- + + + + +Exponentials + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.4 bits +p01: 209.8 bits +worst: 209.7 bits +domains: 2/2 +minimum threshold margin: 29.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.4, p01 209.8, worst 209.7, required 180.0, margin 29.7, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 1,073 ns/iteration (no available competitor) + +216.4 + +209.7 + +2/2 + +1073 ns + +Both + +- + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 910.9 ns/iteration (no available competitor) + +218.0 + +214.2 + +2/2 + +911 ns + +Both + +- + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 228.0 bits +p01: 214.9 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 237.7, p01 215.4, worst 214.5, required 180.0, margin 34.5, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 1,068 ns/iteration (no available competitor) + +228.0 + +213.8 + +2/2 + +1068 ns + +Both + +✓ + +- + + + + +Logarithms + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.7 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.1, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.1, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,781 ns/iteration (no available competitor) + +217.7 + +213.3 + +3/3 + +1781 ns + +Both + +- + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 221.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,809 ns/iteration (no available competitor) + +218.6 + +213.2 + +3/3 + +1809 ns + +Both + +- + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 217.5, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,828 ns/iteration (no available competitor) + +217.4 + +213.3 + +3/3 + +1828 ns + +Both + +- + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 227.6 bits +p01: 214.8 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 237.7, p01 215.4, worst 214.3, required 180.0, margin 34.3, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,839 ns/iteration (no available competitor) + +227.6 + +214.0 + +2/2 + +1839 ns + +Both + +✓ + +- + + + + +Trigonometric + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 896.2 ns/iteration (no available competitor) + +222.3 + +202.9 + +3/3 + +896 ns + +Both + +✓ + +- + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 898.3 ns/iteration (no available competitor) + +226.8 + +208.7 + +3/3 + +898 ns + +Both + +- + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,299 ns/iteration (no available competitor) + +- + +- + +- + +1299 ns + +- + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,356 ns/iteration (no available competitor) + +217.1 + +202.9 + +3/3 + +1356 ns + +Both + +✓ + +- + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,406 ns/iteration (no available competitor) + +217.9 + +214.4 + +2/2 + +1406 ns + +Both + +✓ + +- + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,408 ns/iteration (no available competitor) + +216.0 + +192.5 + +2/2 + +1408 ns + +Both + +- + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 908.3 ns/iteration (no available competitor) + +218.1 + +214.7 + +2/2 + +908 ns + +Both + +✓ + +- + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 966.1 ns/iteration (no available competitor) + +217.9 + +214.3 + +3/3 + +966 ns + +Both + +✓ + +- + + + + +Hyperbolic + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,394 ns/iteration (no available competitor) + +217.0 + +213.8 + +2/2 + +1394 ns + +Both + +✓ + +- + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,399 ns/iteration (no available competitor) + +217.5 + +214.2 + +2/2 + +1399 ns + +Both + +- + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,316 ns/iteration (no available competitor) + +219.1 + +214.0 + +2/2 + +1316 ns + +Both + +✓ + +- + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,807 ns/iteration (no available competitor) + +217.2 + +213.0 + +2/2 + +2807 ns + +Both + +✓ + +- + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,565 ns/iteration (no available competitor) + +217.7 + +213.7 + +2/2 + +2565 ns + +Both + +- + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,406 ns/iteration (no available competitor) + +218.3 + +213.3 + +2/2 + +2406 ns + +Both + +✓ + +- + + + + +Special + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 11,073 ns/iteration (no available competitor) + +208.2 + +189.8 + +2/2 + +11073 ns + +Both + +- + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 11,166 ns/iteration (no available competitor) + +212.8 + +196.8 + +2/2 + +11166 ns + +Both + +✓ + +- + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 10,127 ns/iteration (no available competitor) + +209.0 + +202.5 + +1/1 + +10127 ns + +Both + +- + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 9,099 ns/iteration (no available competitor) + +211.9 + +199.2 + +1/1 + +9099 ns + +Both + +- + +- + + + + +Comparisons + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.540 ns/iteration (no available competitor) + += + += + +1/1 + +0.54 ns + +Both + +- + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.605 ns/iteration (no available competitor) + += + += + +1/1 + +0.60 ns + +Both + +- + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.795 ns/iteration (no available competitor) + += + += + +1/1 + +0.79 ns + +Both + +- + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 1.87 ns/iteration (no available competitor) + += + += + +1/1 + +1.9 ns + +Both + +- + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.815 ns/iteration (no available competitor) + += + += + +1/1 + +0.81 ns + +Both + +- + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.809 ns/iteration (no available competitor) + += + += + +1/1 + +0.81 ns + +Both + +- + +- + + + + +Random + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 40.56 ns/iteration (no available competitor) + +- + +- + +- + +40.6 ns + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 354.8 ns/iteration (no available competitor) + +- + +- + +- + +355 ns + +- + +- + +- + + + + +Mixed Workloads + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 46.19 ns/iteration (no available competitor) + +- + +- + +- + +46.2 ns + +- + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 164.7 ns/iteration (no available competitor) + +- + +- + +- + +165 ns + +- + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,832 ns/iteration (no available competitor) + +- + +- + +- + +1832 ns + +- + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 119.1 ns/iteration (no available competitor) + +- + +- + +- + +119 ns + +- + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 527.5 ns/iteration (no available competitor) + +- + +- + +- + +528 ns + +- + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 420.4 ns/iteration (no available competitor) + +- + +- + +- + +420 ns + +- + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 236.6 ns/iteration (no available competitor) + +- + +- + +- + +237 ns + +- + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 9,138 ns/iteration (no available competitor) + +- + +- + +- + +9138 ns + +- + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,763 ns/iteration (no available competitor) + +- + +- + +- + +4763 ns + +- + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/overview/windows_x86_64_MinGW_f256_overview.svg b/validation/metrics/generated/overview/windows_x86_64_MinGW_f256_overview.svg new file mode 100644 index 0000000..ba7faab --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MinGW_f256_overview.svg @@ -0,0 +1,9395 @@ + + + + +f256 metrics overview — Windows / x64 / GCC (MinGW-w64) +Accuracy is MPFR-relative; domain pass counts use FLTX release thresholds; speed is implementation ÷ FLTX. + +operation + + +bl::f256 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time + + + +qdpp (qd_real) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +mpfr_float_backend<64> + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +TLFloat (tloct) + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +mean + +worst + +pass + +time · speed vs FLTX + + + +Arithmetic + + + + + + + +add + +fltx bl::f256 +API: bl::add +mean: 227.4 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 10.52 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.083589× + +227.4 + +215.3 + +2/2 + +10.52 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp operator+ +mean: 227.4 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 21.91 ns/iteration, speed vs FLTX 0.48× + +227.4 + +215.3 + +2/2 + +21.91 ns · 0.48× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator+ +mean: 225.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.3, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3770, seed=10322096095657499292 +subnormal: mean 245.4, p01 215.5, worst 214.9, required 190.0, margin 24.9, n=326, seed=10322096095657499292 +benchmark: 58.00 ns/iteration, speed vs FLTX 0.18× + +225.0 + +214.0 + +2/2 + +58.00 ns · 0.18× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator+ +mean: 253.1 bits +p01: 237.3 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 251.8, p01 237.3, worst 237.0, required 190.0, margin 47.0, n=3770, seed=10322096095657499292 +subnormal: mean 268.5, p01 239.2, worst 237.9, required 190.0, margin 47.9, n=326, seed=10322096095657499292 +benchmark: 126.0 ns/iteration, speed vs FLTX 0.08× + +253.1 + +237.0 + +2/2 + +126.0 ns · 0.08× + +No + +✗ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 227.4 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.1, p01 215.6, worst 215.2, required 190.0, margin 25.2, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 10.41 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.130307× + +227.4 + +215.2 + +2/2 + +10.41 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp operator- +mean: 227.4 bits +p01: 215.6 bits +worst: 215.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 226.1, p01 215.6, worst 215.0, required 190.0, margin 25.0, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 22.18 ns/iteration, speed vs FLTX 0.47× + +227.4 + +215.0 + +2/2 + +22.18 ns · 0.47× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator- +mean: 225.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.5, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3791, seed=10322096095657499292 +subnormal: mean 245.9, p01 246.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 58.46 ns/iteration, speed vs FLTX 0.18× + +225.2 + +214.0 + +2/2 + +58.46 ns · 0.18× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator- +mean: 253.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 252.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=3791, seed=10322096095657499292 +subnormal: mean 268.9, p01 269.0, worst 237.7, required 190.0, margin 47.7, n=305, seed=10322096095657499292 +benchmark: 125.2 ns/iteration, speed vs FLTX 0.08× + +253.3 + +237.0 + +2/2 + +125.2 ns · 0.08× + +No + +✗ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 23.16 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.593005× + +220.0 + +215.2 + +2/2 + +23.16 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp operator* +mean: 220.0 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 36.89 ns/iteration, speed vs FLTX 0.63× + +220.0 + +215.2 + +2/2 + +36.89 ns · 0.63× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator* +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4000, seed=10322096095657499292 +subnormal: mean 217.3, p01 214.3, worst 214.3, required 190.0, margin 24.3, n=100, seed=10322096095657499292 +benchmark: 88.93 ns/iteration, speed vs FLTX 0.26× + +216.0 + +214.0 + +2/2 + +88.93 ns · 0.26× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator* +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4000, seed=10322096095657499292 +subnormal: mean 240.2, p01 237.1, worst 237.1, required 190.0, margin 47.1, n=100, seed=10322096095657499292 +benchmark: 121.0 ns/iteration, speed vs FLTX 0.19× + +239.0 + +237.0 + +2/2 + +121.0 ns · 0.19× + +No + +✗ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 2/2 +minimum threshold margin: 24.8 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 219.4, p01 215.4, worst 215.4, required 190.0, margin 25.4, n=55, seed=10322096095657499292 +benchmark: 107.0 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.046098× + +219.2 + +214.8 + +2/2 + +107.0 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp operator/ +mean: 218.7 bits +p01: 172.2 bits +worst: 172.2 bits +domains: 1/2 +minimum threshold margin: -17.8 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 219.2, p01 214.8, worst 214.0, required 190.0, margin 24.0, n=4045, seed=10322096095657499292 +subnormal: mean 179.1, p01 172.2, worst 172.2, required 190.0, margin -17.8, n=55, seed=10322096095657499292 +benchmark: 304.5 ns/iteration, speed vs FLTX 0.35× + +218.7 + +172.2 + +1/2 + +304.5 ns · 0.35× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator/ +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4045, seed=10322096095657499292 +subnormal: mean 218.2, p01 214.2, worst 214.2, required 190.0, margin 24.2, n=55, seed=10322096095657499292 +benchmark: 111.9 ns/iteration, speed vs FLTX 0.96× + +216.0 + +214.0 + +2/2 + +111.9 ns · 0.96× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator/ +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4045, seed=10322096095657499292 +subnormal: mean 241.4, p01 237.2, worst 237.2, required 190.0, margin 47.2, n=55, seed=10322096095657499292 +benchmark: 337.3 ns/iteration, speed vs FLTX 0.32× + +239.0 + +237.0 + +2/2 + +337.3 ns · 0.32× + +No + +✗ + + + + +IO + + + + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 347.4 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.478589× + +220.4 + +217.0 + +2/2 + +347.4 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp to_string +mean: 218.8 bits +p01: 211.0 bits +worst: 208.7 bits +domains: 2/2 +minimum threshold margin: 18.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 211.0, worst 208.7, required 190.0, margin 18.7, n=4096, seed=10322096095657499357 +benchmark: 4,157 ns/iteration, speed vs FLTX 0.08× + +218.8 + +208.7 + +2/2 + +4,157 ns · 0.08× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost number::str +mean: 220.3 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.2, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 513.6 ns/iteration, speed vs FLTX 0.68× + +220.3 + +217.0 + +2/2 + +513.6 ns · 0.68× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::to_string +mean: 216.9 bits +p01: 214.0 bits +worst: 213.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.1, p01 214.1, worst 213.6, required 190.0, margin 23.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 216.7, p01 214.0, worst 213.6, required 190.0, margin 23.6, n=4096, seed=10322096095657499357 +benchmark: 14,336 ns/iteration, speed vs FLTX 0.02× + +216.9 + +213.6 + +2/2 + +14,336 ns · 0.02× + +Both + +✓ + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 308.2 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 13.496172× + +220.4 + +217.0 + +2/2 + +308.2 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp write +mean: 218.8 bits +p01: 211.0 bits +worst: 208.7 bits +domains: 2/2 +minimum threshold margin: 18.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 211.0, worst 208.7, required 190.0, margin 18.7, n=4096, seed=10322096095657499357 +benchmark: 4,159 ns/iteration, speed vs FLTX 0.07× + +218.8 + +208.7 + +2/2 + +4,159 ns · 0.07× + +Both + +✗ + + +mpfr64: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 386.7 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 0.824953× + +219.7 + +212.0 + +2/2 + +386.7 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp read +mean: 200.9 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -212.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 213.4, worst 212.6, required 212.0, margin 0.6, n=4097, seed=10322096095657499311 +wide_exponent: mean 185.9, p01 0.0, worst 0.0, required 212.0, margin -212.0, n=4098, seed=10322096095657499308 +benchmark: 2,396 ns/iteration, speed vs FLTX 0.16× + +200.9 + +0.0 + +1/2 + +2,396 ns · 0.16× + +NaN + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost string constructor +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 2.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4098, seed=10322096095657499308 +benchmark: 319.0 ns/iteration, speed vs FLTX 1.21× + +216.0 + +214.0 + +2/2 + +319.0 ns · 1.21× + +Both + +✓ + + +TLFloat Octuple +API: TLFloat string constructor +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 212.0, margin 25.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 238.9, p01 237.2, worst 237.1, required 212.0, margin 25.1, n=4098, seed=10322096095657499308 +benchmark: 10,591 ns/iteration, speed vs FLTX 0.04× + +238.9 + +237.0 + +2/2 + +10,591 ns · 0.04× + +No + +✗ + + + + +Rounding + + + + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.40 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.948358× + +exact + +exact + +1/1 + +1.40 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.32 ns/iteration, speed vs FLTX 1.05× + +exact + +exact + +1/1 + +1.32 ns · 1.05× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 50.18 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +50.18 ns · 0.03× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 49.33 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +49.33 ns · 0.03× + +No + +✗ + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.41 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.939612× + +exact + +exact + +1/1 + +1.41 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.33 ns/iteration, speed vs FLTX 1.06× + +exact + +exact + +1/1 + +1.33 ns · 1.06× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 50.61 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +50.61 ns · 0.03× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 49.52 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +49.52 ns · 0.03× + +No + +✗ + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.79 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.806833× + +exact + +exact + +1/1 + +2.79 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp aint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.25 ns/iteration, speed vs FLTX 1.24× + +exact + +exact + +1/1 + +2.25 ns · 1.24× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 49.69 ns/iteration, speed vs FLTX 0.06× + +exact + +exact + +1/1 + +49.69 ns · 0.06× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 38.39 ns/iteration, speed vs FLTX 0.07× + +exact + +exact + +1/1 + +38.39 ns · 0.07× + +No + +✗ + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 10.21 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.130753× + +exact + +exact + +1/1 + +10.21 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp round +mean: 229.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/1 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 229.7, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4110, seed=10322096095657499382 +benchmark: 11.54 ns/iteration, speed vs FLTX 0.88× + +229.7 + +0.0 + +0/1 + +11.54 ns · 0.88× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 119.7 ns/iteration, speed vs FLTX 0.09× + +exact + +exact + +1/1 + +119.7 ns · 0.09× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 58.97 ns/iteration, speed vs FLTX 0.17× + +exact + +exact + +1/1 + +58.97 ns · 0.17× + +No + +✗ + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 9.12 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 7.066124× + +exact + +exact + +1/1 + +9.12 ns + +Both + +✓ + + +qdpp: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 64.43 ns/iteration, speed vs FLTX 0.14× + +exact + +exact + +1/1 + +64.43 ns · 0.14× + +No + +✗ + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 5.09 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 32.318867× + +exact + +exact + +1/1 + +5.09 ns + +- + +- + + +qdpp: lround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 164.4 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +164.4 ns · 0.03× + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 4.81 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 54.405608× + +exact + +exact + +1/1 + +4.81 ns + +- + +- + + +qdpp: llround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 261.6 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +1/1 + +261.6 ns · 0.02× + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 127.5 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +127.5 ns + +Both + +✓ + + +qdpp: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 163.3 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +163.3 ns + +Both + +✓ + + +qdpp: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 69.57 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 4.170058× + +244.0 + +217.7 + +3/3 + +69.57 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp fmod +mean: 199.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -190.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 242.3, p01 211.1, worst 205.5, required 190.0, margin 15.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 123.2, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4, seed=10322096095657499383 +wide_exponent: mean 157.4, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4096, seed=10322096095657499357 +benchmark: 413.3 ns/iteration, speed vs FLTX 0.17× + +199.8 + +0.0 + +1/3 + +413.3 ns · 0.17× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 290.1 ns/iteration, speed vs FLTX 0.24× + +exact + +exact + +3/3 + +290.1 ns · 0.24× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 694.7 ns/iteration, speed vs FLTX 0.10× + +exact + +exact + +3/3 + +694.7 ns · 0.10× + +No + +✗ + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 99.11 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.333311× + +exact + +exact + +1/1 + +99.11 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp drem +mean: 241.9 bits +p01: 210.4 bits +worst: 205.5 bits +domains: 1/1 +minimum threshold margin: 15.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 241.9, p01 210.4, worst 205.5, required 190.0, margin 15.5, n=4099, seed=10322096095657499356 +benchmark: 425.6 ns/iteration, speed vs FLTX 0.23× + +241.9 + +205.5 + +1/1 + +425.6 ns · 0.23× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 330.4 ns/iteration, speed vs FLTX 0.30× + +exact + +exact + +1/1 + +330.4 ns · 0.30× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 737.4 ns/iteration, speed vs FLTX 0.13× + +exact + +exact + +1/1 + +737.4 ns · 0.13× + +No + +✗ + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 99.99 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.676358× + +exact + +exact + +1/1 + +99.99 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp divrem +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 424.6 ns/iteration, speed vs FLTX 0.24× + +exact + +exact + +1/1 + +424.6 ns · 0.24× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 367.6 ns/iteration, speed vs FLTX 0.27× + +exact + +exact + +1/1 + +367.6 ns · 0.27× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 750.8 ns/iteration, speed vs FLTX 0.13× + +exact + +exact + +1/1 + +750.8 ns · 0.13× + +No + +✗ + + + + +Float Utils + + + + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.58 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.893118× + +exact + +exact + +2/2 + +1.58 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.41 ns/iteration, speed vs FLTX 1.12× + +exact + +exact + +2/2 + +1.41 ns · 1.12× + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 39.74 ns/iteration, speed vs FLTX 0.04× + +exact + +exact + +2/2 + +39.74 ns · 0.04× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.96 ns/iteration, speed vs FLTX 0.32× + +exact + +exact + +2/2 + +4.96 ns · 0.32× + +No + +✓ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.60 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.905943× + +exact + +exact + +1/1 + +1.60 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.45 ns/iteration, speed vs FLTX 1.10× + +exact + +exact + +1/1 + +1.45 ns · 1.10× + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 40.10 ns/iteration, speed vs FLTX 0.04× + +exact + +exact + +1/1 + +40.10 ns · 0.04× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 4.93 ns/iteration, speed vs FLTX 0.32× + +exact + +exact + +1/1 + +4.93 ns · 0.32× + +No + +✓ + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 38.16 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.089372× + +229.7 + +215.1 + +3/3 + +38.16 ns + +Both + +✗ + + +qdpp: fma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fma +mean: 228.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 222.8, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 117.9 ns/iteration, speed vs FLTX 0.32× + +228.3 + +214.0 + +3/3 + +117.9 ns · 0.32× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fma +mean: 251.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 245.2, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 215.1 ns/iteration, speed vs FLTX 0.18× + +251.1 + +237.0 + +3/3 + +215.1 ns · 0.18× + +No + +✗ + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 101.0 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.99513× + +217.9 + +214.6 + +2/2 + +101.0 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp inv +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 302.5 ns/iteration, speed vs FLTX 0.33× + +217.9 + +214.6 + +2/2 + +302.5 ns · 0.33× + +NaN + +✗ + + +mpfr64: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.53 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.828412× + +exact + +exact + +2/2 + +1.53 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp min +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.27 ns/iteration, speed vs FLTX 1.21× + +exact + +exact + +2/2 + +1.27 ns · 1.21× + +Inf + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 61.61 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +2/2 + +61.61 ns · 0.02× + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 99.05 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +2/2 + +99.05 ns · 0.02× + +No + +✗ + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.63 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.799577× + +exact + +exact + +2/2 + +1.63 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp max +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.31 ns/iteration, speed vs FLTX 1.25× + +exact + +exact + +2/2 + +1.31 ns · 1.25× + +Inf + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 61.54 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +2/2 + +61.54 ns · 0.03× + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 98.58 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +2/2 + +98.58 ns · 0.02× + +No + +✗ + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 5.47 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 9.262019× + +exact + +exact + +2/2 + +5.47 ns + +Both + +✓ + + +qdpp: fdim is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fdim +mean: 243.7 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 241.3, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +benchmark: 50.68 ns/iteration, speed vs FLTX 0.11× + +243.7 + +214.0 + +2/2 + +50.68 ns · 0.11× + +No + +✓ + + +TLFloat Octuple +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 236.0 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +2/2 + +236.0 ns · 0.02× + +No + +✓ + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.683 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 11.164079× + +exact + +exact + +1/1 + +0.683 ns + +Both + +✓ + + +qdpp: copysign is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 57.92 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +57.92 ns · 0.01× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 7.62 ns/iteration, speed vs FLTX 0.09× + +exact + +exact + +1/1 + +7.62 ns · 0.09× + +No + +✗ + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.70 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 10.888875× + +exact + +exact + +1/1 + +1.70 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.56 ns/iteration, speed vs FLTX 0.09× + +exact + +exact + +1/1 + +18.56 ns · 0.09× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 48.03 ns/iteration, speed vs FLTX 0.04× + +exact + +exact + +1/1 + +48.03 ns · 0.04× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 66.09 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +1/1 + +66.09 ns · 0.03× + +No + +✗ + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.71 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 10.881348× + +exact + +exact + +1/1 + +1.71 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.57 ns/iteration, speed vs FLTX 0.09× + +exact + +exact + +1/1 + +18.57 ns · 0.09× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 47.53 ns/iteration, speed vs FLTX 0.04× + +exact + +exact + +1/1 + +47.53 ns · 0.04× + +Both + +✓ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.70 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 10.930027× + +exact + +exact + +1/1 + +1.70 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.56 ns/iteration, speed vs FLTX 0.09× + +exact + +exact + +1/1 + +18.56 ns · 0.09× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 47.71 ns/iteration, speed vs FLTX 0.04× + +exact + +exact + +1/1 + +47.71 ns · 0.04× + +Both + +✓ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 10.67 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 9.223964× + +exact + +exact + +2/2 + +10.67 ns + +Both + +✓ + + +qdpp: frexp is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 98.39 ns/iteration, speed vs FLTX 0.11× + +exact + +exact + +2/2 + +98.39 ns · 0.11× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 223.2 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +2/2 + +223.2 ns · 0.05× + +No + +✗ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 14.71 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 15.990214× + +exact + +exact + +2/2 + +14.71 ns + +Both + +✓ + + +qdpp: modf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 235.2 ns/iteration, speed vs FLTX 0.06× + +exact + +exact + +2/2 + +235.2 ns · 0.06× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 315.6 ns/iteration, speed vs FLTX 0.05× + +exact + +exact + +2/2 + +315.6 ns · 0.05× + +No + +✗ + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.07 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 29.947902× + +exact + +exact + +2/2 + +1.07 ns + +- + +- + + +qdpp: ilogb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 45.31 ns/iteration, speed vs FLTX 0.02× + +exact + +exact + +2/2 + +45.31 ns · 0.02× + +- + +- + + +TLFloat Octuple +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 31.93 ns/iteration, speed vs FLTX 0.03× + +exact + +exact + +2/2 + +31.93 ns · 0.03× + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.08 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 91.744082× + +exact + +exact + +2/2 + +1.08 ns + +Both + +- + + +qdpp: logb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 98.89 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +2/2 + +98.89 ns · 0.01× + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 4.64 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 35.234935× + +- + +- + +- + +4.64 ns + +- + +- + + +qdpp: nextafter is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter +benchmark: 763.6 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +763.6 ns · 0.01× + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter +benchmark: 163.7 ns/iteration, speed vs FLTX 0.03× + +- + +- + +- + +163.7 ns · 0.03× + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 4.44 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 36.84885× + +- + +- + +- + +4.44 ns + +- + +- + + +qdpp: nexttoward is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter (same type) +benchmark: 731.0 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +731.0 ns · 0.01× + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter (same type) +benchmark: 163.7 ns/iteration, speed vs FLTX 0.03× + +- + +- + +- + +163.7 ns · 0.03× + +- + +- + + + + +Roots & powers + + + + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 22.75 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.660849× + +220.1 + +215.3 + +2/2 + +22.75 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sqr +mean: 216.7 bits +p01: 215.0 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 24.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.8, p01 215.0, worst 214.7, required 190.0, margin 24.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 216.7, p01 215.1, worst 214.8, required 190.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 15.04 ns/iteration, speed vs FLTX 1.51× + +216.7 + +214.7 + +2/2 + +15.04 ns · 1.51× + +Both + +✓ + + +mpfr64: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.9 bits +p01: 211.3 bits +worst: 209.6 bits +domains: 4/4 +minimum threshold margin: 19.6 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 218.3, p01 211.5, worst 210.0, required 190.0, margin 20.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 120.3 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.236699× + +217.9 + +209.6 + +4/4 + +120.3 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sqrt +mean: 152.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/4 +minimum threshold margin: -190.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 164.0, p01 54.6, worst 53.6, required 190.0, margin -136.4, n=4096, seed=10322096095657499354 +near_one: mean 217.6, p01 214.0, worst 212.6, required 190.0, margin 22.6, n=4099, seed=10322096095657499359 +subnormal: mean 10.8, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 216.9, p01 187.0, worst 174.8, required 190.0, margin -15.2, n=4096, seed=10322096095657499357 +benchmark: 599.8 ns/iteration, speed vs FLTX 0.20× + +152.3 + +0.0 + +1/4 + +599.8 ns · 0.20× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sqrt +mean: 216.2 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 4/4 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 216.2, p01 214.4, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499359 +subnormal: mean 216.8, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 148.7 ns/iteration, speed vs FLTX 0.81× + +216.2 + +214.0 + +4/4 + +148.7 ns · 0.81× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sqrt +mean: 239.2 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 4/4 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 239.0, p01 237.4, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499359 +subnormal: mean 239.7, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 239.0, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 511.7 ns/iteration, speed vs FLTX 0.24× + +239.2 + +237.0 + +4/4 + +511.7 ns · 0.24× + +No + +✗ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 214.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 214.9, required 190.0, margin 24.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 382.3 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.265539× + +219.3 + +214.9 + +2/2 + +382.3 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp nroot +mean: 217.2 bits +p01: 193.1 bits +worst: 176.0 bits +domains: 1/2 +minimum threshold margin: -14.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.4, p01 213.9, worst 213.0, required 190.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.0, p01 193.1, worst 176.0, required 190.0, margin -14.0, n=4096, seed=10322096095657499357 +benchmark: 1,452 ns/iteration, speed vs FLTX 0.26× + +217.2 + +176.0 + +1/2 + +1,452 ns · 0.26× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cbrt +mean: 216.0 bits +p01: 214.2 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.1, p01 214.3, worst 214.1, required 190.0, margin 24.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.1, required 190.0, margin 24.1, n=4096, seed=10322096095657499357 +benchmark: 483.9 ns/iteration, speed vs FLTX 0.79× + +216.0 + +214.1 + +2/2 + +483.9 ns · 0.79× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::cbrt +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 239.2, p01 237.3, worst 237.1, required 190.0, margin 47.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499357 +benchmark: 3,074 ns/iteration, speed vs FLTX 0.12× + +239.0 + +237.0 + +2/2 + +3,074 ns · 0.12× + +No + +✗ + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 175.2 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.2552× + +229.9 + +213.9 + +2/2 + +175.2 ns + +Both + +✓ + + +qdpp: hypot is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::hypot +mean: 228.7 bits +p01: 213.2 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 215.3, p01 213.2, worst 212.9, required 190.0, margin 22.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 242.0, p01 213.6, worst 212.9, required 190.0, margin 22.9, n=4096, seed=10322096095657499357 +benchmark: 583.4 ns/iteration, speed vs FLTX 0.30× + +228.7 + +212.9 + +2/2 + +583.4 ns · 0.30× + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::hypot +mean: 251.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 239.0, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 264.8, p01 237.6, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 570.3 ns/iteration, speed vs FLTX 0.31× + +251.9 + +237.0 + +2/2 + +570.3 ns · 0.31× + +No + +✓ + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,712 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.316915× + +216.8 + +211.1 + +2/2 + +2,712 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp pow +mean: 216.4 bits +p01: 211.7 bits +worst: 210.6 bits +domains: 2/2 +minimum threshold margin: 30.6 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 215.1, p01 211.7, worst 210.6, required 180.0, margin 30.6, n=4099, seed=10322096095657499356 +near_one: mean 217.6, p01 214.5, worst 213.9, required 180.0, margin 33.9, n=4099, seed=10322096095657499359 +benchmark: 9,603 ns/iteration, speed vs FLTX 0.28× + +216.4 + +210.6 + +2/2 + +9,603 ns · 0.28× + +No + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,572 ns/iteration, speed vs FLTX 0.76× + +215.9 + +214.0 + +2/2 + +3,572 ns · 0.76× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::pow +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 20,411 ns/iteration, speed vs FLTX 0.13× + +238.9 + +237.0 + +2/2 + +20,411 ns · 0.13× + +No + +✗ + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 121.6 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.187359× + +217.2 + +213.7 + +2/2 + +121.6 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp npwr +mean: 215.0 bits +p01: 212.8 bits +worst: 212.1 bits +domains: 2/2 +minimum threshold margin: 22.1 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 215.1, p01 212.8, worst 212.1, required 190.0, margin 22.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.0, p01 212.8, worst 212.1, required 190.0, margin 22.1, n=4096, seed=10322096095657499357 +benchmark: 144.4 ns/iteration, speed vs FLTX 0.84× + +215.0 + +212.1 + +2/2 + +144.4 ns · 0.84× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow(value, int) +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 272.2 ns/iteration, speed vs FLTX 0.45× + +216.0 + +214.0 + +2/2 + +272.2 ns · 0.45× + +Both + +✓ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.7 bits +p01: 210.0 bits +worst: 208.9 bits +domains: 2/2 +minimum threshold margin: 28.9 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 210.0, worst 208.9, required 180.0, margin 28.9, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 1,078 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.246423× + +216.7 + +208.9 + +2/2 + +1,078 ns + +Both + +- + + +qdpp qd_real +API: qdpp exp +mean: 216.6 bits +p01: 210.0 bits +worst: 209.1 bits +domains: 2/2 +minimum threshold margin: 29.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 210.0, worst 209.1, required 180.0, margin 29.1, n=4099, seed=10322096095657499291 +moderate: mean 217.2, p01 214.7, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 2,825 ns/iteration, speed vs FLTX 0.38× + +216.6 + +209.1 + +2/2 + +2,825 ns · 0.38× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,344 ns/iteration, speed vs FLTX 0.80× + +215.9 + +214.0 + +2/2 + +1,344 ns · 0.80× + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 4,114 ns/iteration, speed vs FLTX 0.26× + +239.0 + +237.0 + +2/2 + +4,114 ns · 0.26× + +No + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 908.7 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.851746× + +218.0 + +214.2 + +2/2 + +908.7 ns + +Both + +- + + +qdpp: exp2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp2 +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,683 ns/iteration, speed vs FLTX 0.54× + +216.0 + +214.0 + +2/2 + +1,683 ns · 0.54× + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp2 +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +benchmark: 10,137 ns/iteration, speed vs FLTX 0.09× + +238.9 + +237.0 + +2/2 + +10,137 ns · 0.09× + +No + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 227.2 bits +p01: 207.5 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.0, p01 207.5, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 1,073 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.424211× + +227.2 + +207.0 + +2/2 + +1,073 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp expm1 +mean: 226.8 bits +p01: 203.4 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 235.5, p01 203.4, worst 203.0, required 180.0, margin 23.0, n=4098, seed=10322096095657499336 +moderate: mean 218.1, p01 214.4, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499356 +benchmark: 2,809 ns/iteration, speed vs FLTX 0.38× + +226.8 + +0.0 + +1/2 + +2,809 ns · 0.38× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::expm1 +mean: 227.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,528 ns/iteration, speed vs FLTX 0.70× + +227.5 + +214.0 + +2/2 + +1,528 ns · 0.70× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::expm1 +mean: 250.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4098, seed=10322096095657499336 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 4,256 ns/iteration, speed vs FLTX 0.25× + +250.1 + +237.0 + +2/2 + +4,256 ns · 0.25× + +No + +✗ + + + + +Logarithms + + + + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.8 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.2, p01 215.3, worst 215.0, required 180.0, margin 35.0, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,782 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.576926× + +217.8 + +213.3 + +3/3 + +1,782 ns + +Both + +- + + +qdpp qd_real +API: qdpp log +mean: 205.1 bits +p01: 62.2 bits +worst: 61.6 bits +domains: 2/3 +minimum threshold margin: -118.4 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 180.1, p01 62.2, worst 61.6, required 180.0, margin -118.4, n=4096, seed=10322096095657499354 +near_one: mean 216.1, p01 213.6, worst 212.8, required 180.0, margin 32.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 219.2, p01 198.3, worst 182.9, required 180.0, margin 2.9, n=4096, seed=10322096095657499357 +benchmark: 8,949 ns/iteration, speed vs FLTX 0.20× + +205.1 + +61.6 + +2/3 + +8,949 ns · 0.20× + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.7, p01 214.4, worst 214.3, required 180.0, margin 34.3, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 2,810 ns/iteration, speed vs FLTX 0.63× + +215.9 + +214.0 + +3/3 + +2,810 ns · 0.63× + +Both + +- + + +TLFloat Octuple +API: tlfloat::log +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.8, p01 237.3, worst 237.3, required 180.0, margin 57.3, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 5,255 ns/iteration, speed vs FLTX 0.34× + +238.9 + +237.0 + +3/3 + +5,255 ns · 0.34× + +No + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 221.1, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,830 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.685929× + +218.6 + +213.2 + +3/3 + +1,830 ns + +Both + +- + + +qdpp: log2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log2 +mean: 217.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 220.0, p01 214.9, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 3,086 ns/iteration, speed vs FLTX 0.59× + +217.3 + +214.0 + +3/3 + +3,086 ns · 0.59× + +Both + +- + + +TLFloat Octuple +API: tlfloat::log2 +mean: 240.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 243.0, p01 237.9, worst 237.8, required 180.0, margin 57.8, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 5,413 ns/iteration, speed vs FLTX 0.34× + +240.3 + +237.0 + +3/3 + +5,413 ns · 0.34× + +No + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 217.6, p01 215.1, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,826 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 2.978345× + +217.4 + +213.3 + +3/3 + +1,826 ns + +Both + +- + + +qdpp qd_real +API: qdpp log10 +mean: 203.1 bits +p01: 62.2 bits +worst: 61.6 bits +domains: 2/3 +minimum threshold margin: -118.4 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 177.4, p01 62.2, worst 61.6, required 180.0, margin -118.4, n=4096, seed=10322096095657499354 +near_one: mean 215.7, p01 213.3, worst 212.7, required 180.0, margin 32.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.1, p01 198.3, worst 182.9, required 180.0, margin 2.9, n=4096, seed=10322096095657499357 +benchmark: 9,338 ns/iteration, speed vs FLTX 0.20× + +203.1 + +61.6 + +2/3 + +9,338 ns · 0.20× + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log10 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.8, p01 214.1, worst 214.1, required 180.0, margin 34.1, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 5,530 ns/iteration, speed vs FLTX 0.33× + +215.9 + +214.0 + +3/3 + +5,530 ns · 0.33× + +Both + +- + + +TLFloat Octuple +API: tlfloat::log10 +mean: 238.8 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.6, p01 237.1, worst 237.1, required 180.0, margin 57.1, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 5,440 ns/iteration, speed vs FLTX 0.34× + +238.8 + +237.0 + +3/3 + +5,440 ns · 0.34× + +No + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 226.8 bits +p01: 207.4 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.1, p01 207.4, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,835 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.587052× + +226.8 + +207.0 + +2/2 + +1,835 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp log1p +mean: 226.4 bits +p01: 203.4 bits +worst: 203.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 235.6, p01 203.4, worst 203.0, required 180.0, margin 23.0, n=4098, seed=10322096095657499336 +moderate: mean 217.2, p01 214.1, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 8,934 ns/iteration, speed vs FLTX 0.21× + +226.4 + +203.0 + +2/2 + +8,934 ns · 0.21× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log1p +mean: 227.4 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 2,912 ns/iteration, speed vs FLTX 0.63× + +227.4 + +214.0 + +2/2 + +2,912 ns · 0.63× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::log1p +mean: 250.1 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.4, worst 237.0, required 180.0, margin 57.0, n=4098, seed=10322096095657499336 +moderate: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 6,412 ns/iteration, speed vs FLTX 0.29× + +250.1 + +237.0 + +2/2 + +6,412 ns · 0.29× + +No + +✗ + + + + +Trigonometric + + + + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 897.8 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.377586× + +222.3 + +202.9 + +3/3 + +897.8 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sin +mean: 142.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 88.2, p01 40.3, worst 0.0, required 180.0, margin -180.0, n=4104, seed=10322096095657499353 +moderate: mean 215.8, p01 210.4, worst 206.1, required 180.0, margin 26.1, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 125.3, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4315, seed=10322096095657499369 +benchmark: 2,524 ns/iteration, speed vs FLTX 0.36× + +142.8 + +0.0 + +1/3 + +2,524 ns · 0.36× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sin +mean: 218.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.3, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 222.9, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 2,135 ns/iteration, speed vs FLTX 0.42× + +218.5 + +214.0 + +3/3 + +2,135 ns · 0.42× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sin +mean: 241.2 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 245.1, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 6,093 ns/iteration, speed vs FLTX 0.15× + +241.2 + +237.0 + +3/3 + +6,093 ns · 0.15× + +No + +✗ + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 897.5 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.873134× + +226.8 + +208.7 + +3/3 + +897.5 ns + +Both + +- + + +qdpp qd_real +API: qdpp cos +mean: 161.9 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 171.1, p01 59.1, worst 0.0, required 180.0, margin -180.0, n=4104, seed=10322096095657499353 +moderate: mean 215.7, p01 210.1, worst 205.0, required 180.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 102.2, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4315, seed=10322096095657499369 +benchmark: 2,543 ns/iteration, speed vs FLTX 0.35× + +161.9 + +0.0 + +1/3 + +2,543 ns · 0.35× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cos +mean: 219.4 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 220.7, p01 214.5, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 221.2, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 1,681 ns/iteration, speed vs FLTX 0.53× + +219.4 + +214.0 + +3/3 + +1,681 ns · 0.53× + +Both + +- + + +TLFloat Octuple +API: tlfloat::cos +mean: 241.7 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 242.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 243.4, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 6,087 ns/iteration, speed vs FLTX 0.15× + +241.7 + +237.0 + +3/3 + +6,087 ns · 0.15× + +No + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,115 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.443026× + +- + +- + +- + +1,115 ns + +- + +- + + +qdpp qd_real +API: qdpp sincos +benchmark: 2,724 ns/iteration, speed vs FLTX 0.41× + +- + +- + +- + +2,724 ns · 0.41× + +- + +- + + +mpfr64: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::sincos +benchmark: 12,232 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +12,232 ns · 0.09× + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,209 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.975073× + +217.1 + +202.9 + +3/3 + +1,209 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp tan +mean: 111.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -170.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 86.8, p01 40.3, worst 0.0, required 170.0, margin -170.0, n=4104, seed=10322096095657499353 +moderate: mean 214.8, p01 209.4, worst 205.0, required 170.0, margin 35.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 36.9, p01 0.0, worst 0.0, required 170.0, margin -170.0, n=4315, seed=10322096095657499369 +benchmark: 3,024 ns/iteration, speed vs FLTX 0.40× + +111.5 + +0.0 + +1/3 + +3,024 ns · 0.40× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tan +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 44.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.1, p01 214.1, worst 214.0, required 170.0, margin 44.0, n=4104, seed=10322096095657499353 +moderate: mean 216.0, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 215.9, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4315, seed=10322096095657499369 +benchmark: 2,387 ns/iteration, speed vs FLTX 0.51× + +216.0 + +214.0 + +3/3 + +2,387 ns · 0.51× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 67.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 238.9, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4104, seed=10322096095657499353 +moderate: mean 239.0, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 238.9, p01 237.2, worst 237.1, required 170.0, margin 67.1, n=4315, seed=10322096095657499369 +benchmark: 7,095 ns/iteration, speed vs FLTX 0.17× + +239.0 + +237.0 + +3/3 + +7,095 ns · 0.17× + +No + +✗ + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,400 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 4.994489× + +217.9 + +214.4 + +2/2 + +1,400 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp asin +mean: 217.2 bits +p01: 212.9 bits +worst: 212.3 bits +domains: 2/2 +minimum threshold margin: 32.3 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 216.0, p01 212.9, worst 212.3, required 180.0, margin 32.3, n=4099, seed=10322096095657499356 +benchmark: 11,469 ns/iteration, speed vs FLTX 0.12× + +217.2 + +212.3 + +2/2 + +11,469 ns · 0.12× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asin +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.1, p01 214.7, worst 214.7, required 180.0, margin 34.7, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 6,992 ns/iteration, speed vs FLTX 0.20× + +216.0 + +214.0 + +2/2 + +6,992 ns · 0.20× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asin +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.1, p01 237.7, worst 237.7, required 180.0, margin 57.7, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 8,845 ns/iteration, speed vs FLTX 0.16× + +239.0 + +237.0 + +2/2 + +8,845 ns · 0.16× + +No + +✗ + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,418 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 5.06087× + +216.0 + +192.5 + +2/2 + +1,418 ns + +Both + +- + + +qdpp qd_real +API: qdpp acos +mean: 217.3 bits +p01: 213.6 bits +worst: 212.5 bits +domains: 2/2 +minimum threshold margin: 32.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.4, p01 214.0, worst 213.0, required 180.0, margin 33.0, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 213.6, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +benchmark: 11,463 ns/iteration, speed vs FLTX 0.12× + +217.3 + +212.5 + +2/2 + +11,463 ns · 0.12× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acos +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 7,175 ns/iteration, speed vs FLTX 0.20× + +215.9 + +214.0 + +2/2 + +7,175 ns · 0.20× + +Both + +- + + +TLFloat Octuple +API: tlfloat::acos +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4105, seed=10322096095657499355 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 8,828 ns/iteration, speed vs FLTX 0.16× + +238.9 + +237.0 + +2/2 + +8,828 ns · 0.16× + +No + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 908.4 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.409211× + +218.1 + +214.7 + +2/2 + +908.4 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atan +mean: 216.7 bits +p01: 213.1 bits +worst: 212.4 bits +domains: 2/2 +minimum threshold margin: 32.4 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.5, p01 213.8, worst 212.6, required 180.0, margin 32.6, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 213.1, worst 212.4, required 180.0, margin 32.4, n=4099, seed=10322096095657499359 +benchmark: 8,332 ns/iteration, speed vs FLTX 0.11× + +216.7 + +212.4 + +2/2 + +8,332 ns · 0.11× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,097 ns/iteration, speed vs FLTX 0.29× + +216.0 + +214.0 + +2/2 + +3,097 ns · 0.29× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 8,062 ns/iteration, speed vs FLTX 0.11× + +239.0 + +237.0 + +2/2 + +8,062 ns · 0.11× + +Inf + +✗ + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 972.9 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.231642× + +217.9 + +214.3 + +3/3 + +972.9 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atan2 +mean: 216.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 0.0, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=8, seed=10322096095657499351 +moderate: mean 217.0, p01 213.4, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 213.0, worst 211.8, required 180.0, margin 31.8, n=4099, seed=10322096095657499359 +benchmark: 8,262 ns/iteration, speed vs FLTX 0.12× + +216.3 + +0.0 + +2/3 + +8,262 ns · 0.12× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan2 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 215.3, p01 215.2, worst 215.2, required 180.0, margin 35.2, n=8, seed=10322096095657499351 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,144 ns/iteration, speed vs FLTX 0.31× + +215.9 + +214.0 + +3/3 + +3,144 ns · 0.31× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan2 +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 240.6, p01 237.8, worst 237.8, required 180.0, margin 57.8, n=8, seed=10322096095657499351 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 8,181 ns/iteration, speed vs FLTX 0.12× + +239.0 + +237.0 + +3/3 + +8,181 ns · 0.12× + +Inf + +✗ + + + + +Hyperbolic + + + + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,361 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.172393× + +217.0 + +213.8 + +2/2 + +1,361 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sinh +mean: 216.8 bits +p01: 214.2 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 32.9 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.8, p01 214.2, worst 212.9, required 180.0, margin 32.9, n=4099, seed=10322096095657499359 +benchmark: 3,268 ns/iteration, speed vs FLTX 0.42× + +216.8 + +212.9 + +2/2 + +3,268 ns · 0.42× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sinh +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,596 ns/iteration, speed vs FLTX 0.85× + +216.0 + +214.0 + +2/2 + +1,596 ns · 0.85× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 4,811 ns/iteration, speed vs FLTX 0.28× + +238.9 + +237.0 + +2/2 + +4,811 ns · 0.28× + +No + +✗ + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,361 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.151047× + +217.5 + +214.2 + +2/2 + +1,361 ns + +Both + +- + + +qdpp qd_real +API: qdpp cosh +mean: 217.3 bits +p01: 214.5 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 217.0, p01 214.5, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +near_one: mean 217.6, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 3,250 ns/iteration, speed vs FLTX 0.42× + +217.3 + +213.8 + +2/2 + +3,250 ns · 0.42× + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,566 ns/iteration, speed vs FLTX 0.87× + +215.9 + +214.0 + +2/2 + +1,566 ns · 0.87× + +Both + +- + + +TLFloat Octuple +API: tlfloat::cosh +mean: 238.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 4,439 ns/iteration, speed vs FLTX 0.31× + +238.9 + +237.0 + +2/2 + +4,439 ns · 0.31× + +No + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,316 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.250749× + +219.1 + +214.0 + +2/2 + +1,316 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp tanh +mean: 218.9 bits +p01: 214.6 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 219.8, p01 214.6, worst 212.9, required 180.0, margin 32.9, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 214.9, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,234 ns/iteration, speed vs FLTX 0.41× + +218.9 + +212.9 + +2/2 + +3,234 ns · 0.41× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tanh +mean: 216.2 bits +p01: 214.3 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.6, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,645 ns/iteration, speed vs FLTX 0.80× + +216.2 + +214.0 + +2/2 + +1,645 ns · 0.80× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tanh +mean: 239.2 bits +p01: 237.2 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.0, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 4,701 ns/iteration, speed vs FLTX 0.28× + +239.2 + +237.1 + +2/2 + +4,701 ns · 0.28× + +Inf + +✗ + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,758 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.637876× + +217.2 + +213.0 + +2/2 + +2,758 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp asinh +mean: 216.9 bits +p01: 213.7 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.3, p01 214.2, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499356 +near_one: mean 216.4, p01 213.7, worst 212.7, required 180.0, margin 32.7, n=4099, seed=10322096095657499359 +benchmark: 8,726 ns/iteration, speed vs FLTX 0.32× + +216.9 + +0.0 + +1/2 + +8,726 ns · 0.32× + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asinh +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 7,275 ns/iteration, speed vs FLTX 0.38× + +215.9 + +214.0 + +2/2 + +7,275 ns · 0.38× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 19,423 ns/iteration, speed vs FLTX 0.14× + +238.9 + +237.0 + +2/2 + +19,423 ns · 0.14× + +No + +✗ + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,548 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.742099× + +217.7 + +213.7 + +2/2 + +2,548 ns + +Both + +- + + +qdpp qd_real +API: qdpp acosh +mean: 217.0 bits +p01: 213.6 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 216.3, p01 213.6, worst 0.0, required 180.0, margin -180.0, n=4101, seed=10322096095657499355 +moderate: mean 217.7, p01 214.7, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499275 +benchmark: 9,532 ns/iteration, speed vs FLTX 0.27× + +217.0 + +0.0 + +0/2 + +9,532 ns · 0.27× + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.8, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4101, seed=10322096095657499355 +moderate: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499275 +benchmark: 4,439 ns/iteration, speed vs FLTX 0.57× + +215.9 + +214.0 + +2/2 + +4,439 ns · 0.57× + +Both + +- + + +TLFloat Octuple +API: tlfloat::acosh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.7, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4101, seed=10322096095657499355 +moderate: mean 239.0, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499275 +benchmark: 18,248 ns/iteration, speed vs FLTX 0.14× + +238.9 + +237.0 + +2/2 + +18,248 ns · 0.14× + +No + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,427 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.437721× + +218.3 + +213.3 + +2/2 + +2,427 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atanh +mean: 217.7 bits +p01: 213.8 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 218.6, p01 215.3, worst 0.0, required 180.0, margin -180.0, n=4105, seed=10322096095657499355 +moderate: mean 216.8, p01 213.8, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +benchmark: 9,355 ns/iteration, speed vs FLTX 0.26× + +217.7 + +0.0 + +1/2 + +9,355 ns · 0.26× + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atanh +mean: 216.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.5, p01 214.9, worst 214.9, required 180.0, margin 34.9, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 3,490 ns/iteration, speed vs FLTX 0.70× + +216.2 + +214.0 + +2/2 + +3,490 ns · 0.70× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atanh +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.4, p01 237.9, worst 237.4, required 180.0, margin 57.4, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 6,365 ns/iteration, speed vs FLTX 0.38× + +239.1 + +237.0 + +2/2 + +6,365 ns · 0.38× + +No + +✗ + + + + +Special + + + + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 12,796 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.502534× + +208.2 + +189.8 + +2/2 + +12,796 ns + +Both + +- + + +qdpp: erfc is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erfc +mean: 216.1 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 216.2, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 44,819 ns/iteration, speed vs FLTX 0.29× + +216.1 + +214.0 + +2/2 + +44,819 ns · 0.29× + +Both + +- + + +TLFloat Octuple +API: tlfloat::erfc +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 239.2, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 231,271 ns/iteration, speed vs FLTX 0.06× + +239.1 + +237.0 + +2/2 + +231,271 ns · 0.06× + +Inf + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 12,755 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.168249× + +212.8 + +196.8 + +2/2 + +12,755 ns + +Both + +✓ + + +qdpp: erf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erf +mean: 216.3 bits +p01: 214.3 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 34.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.5, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499359 +benchmark: 27,657 ns/iteration, speed vs FLTX 0.46× + +216.3 + +214.1 + +2/2 + +27,657 ns · 0.46× + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::erf +mean: 239.2 bits +p01: 237.3 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.6, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.3, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 231,077 ns/iteration, speed vs FLTX 0.06× + +239.2 + +237.1 + +2/2 + +231,077 ns · 0.06× + +Inf + +✗ + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 10,133 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.022359× + +209.0 + +202.5 + +1/1 + +10,133 ns + +Both + +- + + +qdpp: tgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499320 +benchmark: 20,492 ns/iteration, speed vs FLTX 0.49× + +215.9 + +214.0 + +1/1 + +20,492 ns · 0.49× + +Both + +- + + +TLFloat Octuple +API: tlfloat::tgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499320 +benchmark: 91,829 ns/iteration, speed vs FLTX 0.11× + +238.9 + +237.0 + +1/1 + +91,829 ns · 0.11× + +No + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 9,141 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.927357× + +211.9 + +199.2 + +1/1 + +9,141 ns + +Both + +- + + +qdpp: lgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499323 +benchmark: 17,619 ns/iteration, speed vs FLTX 0.52× + +215.9 + +214.0 + +1/1 + +17,619 ns · 0.52× + +Both + +- + + +TLFloat Octuple +API: tlfloat::lgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499323 +benchmark: 82,211 ns/iteration, speed vs FLTX 0.11× + +238.9 + +237.0 + +1/1 + +82,211 ns · 0.11× + +No + +- + + + + +Comparisons + + + + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.667 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.746022× + +exact + +exact + +1/1 + +0.667 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.498 ns/iteration, speed vs FLTX 1.34× + +exact + +exact + +1/1 + +0.498 ns · 1.34× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.56 ns/iteration, speed vs FLTX 0.10× + +exact + +exact + +1/1 + +6.56 ns · 0.10× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 64.83 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +64.83 ns · 0.01× + +Both + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.740 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.653179× + +exact + +exact + +1/1 + +0.740 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.483 ns/iteration, speed vs FLTX 1.53× + +exact + +exact + +1/1 + +0.483 ns · 1.53× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.34 ns/iteration, speed vs FLTX 0.12× + +exact + +exact + +1/1 + +6.34 ns · 0.12× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 64.60 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +64.60 ns · 0.01× + +Both + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.702 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.737653× + +exact + +exact + +1/1 + +0.702 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.518 ns/iteration, speed vs FLTX 1.36× + +exact + +exact + +1/1 + +0.518 ns · 1.36× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.59 ns/iteration, speed vs FLTX 0.11× + +exact + +exact + +1/1 + +6.59 ns · 0.11× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 64.67 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +64.67 ns · 0.01× + +Both + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.686 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.767961× + +exact + +exact + +1/1 + +0.686 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.527 ns/iteration, speed vs FLTX 1.30× + +exact + +exact + +1/1 + +0.527 ns · 1.30× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.53 ns/iteration, speed vs FLTX 0.10× + +exact + +exact + +1/1 + +6.53 ns · 0.10× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 64.67 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +64.67 ns · 0.01× + +Both + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.712 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.719061× + +exact + +exact + +1/1 + +0.712 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.512 ns/iteration, speed vs FLTX 1.39× + +exact + +exact + +1/1 + +0.512 ns · 1.39× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.34 ns/iteration, speed vs FLTX 0.11× + +exact + +exact + +1/1 + +6.34 ns · 0.11× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 64.58 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +64.58 ns · 0.01× + +Both + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.686 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.817471× + +exact + +exact + +1/1 + +0.686 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.560 ns/iteration, speed vs FLTX 1.22× + +exact + +exact + +1/1 + +0.560 ns · 1.22× + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.43 ns/iteration, speed vs FLTX 0.11× + +exact + +exact + +1/1 + +6.43 ns · 0.11× + +Both + +- + + +TLFloat Octuple +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 64.59 ns/iteration, speed vs FLTX 0.01× + +exact + +exact + +1/1 + +64.59 ns · 0.01× + +Both + +- + + + + +Random + + + + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 42.44 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.188032× + +- + +- + +- + +42.44 ns + +- + +- + + +qdpp qd_real +API: qdpp qdrand +benchmark: 50.43 ns/iteration, speed vs FLTX 0.84× + +- + +- + +- + +50.43 ns · 0.84× + +- + +- + + +mpfr64: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 367.9 ns/iteration (no available competitor) + +- + +- + +- + +367.9 ns + +- + +- + + +qdpp: normal is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 46.25 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.554162× + +- + +- + +- + +46.25 ns + +- + +- + + +qdpp qd_real +API: same expression +benchmark: 118.1 ns/iteration, speed vs FLTX 0.39× + +- + +- + +- + +118.1 ns · 0.39× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same expression +benchmark: 210.3 ns/iteration, speed vs FLTX 0.22× + +- + +- + +- + +210.3 ns · 0.22× + +- + +- + + +TLFloat Octuple +API: same expression +benchmark: 372.3 ns/iteration, speed vs FLTX 0.12× + +- + +- + +- + +372.3 ns · 0.12× + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 164.7 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.534897× + +- + +- + +- + +164.7 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 417.6 ns/iteration, speed vs FLTX 0.39× + +- + +- + +- + +417.6 ns · 0.39× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 466.5 ns/iteration, speed vs FLTX 0.35× + +- + +- + +- + +466.5 ns · 0.35× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 1,017 ns/iteration, speed vs FLTX 0.16× + +- + +- + +- + +1,017 ns · 0.16× + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,834 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.674377× + +- + +- + +- + +1,834 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 5,131 ns/iteration, speed vs FLTX 0.36× + +- + +- + +- + +5,131 ns · 0.36× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 3,072 ns/iteration, speed vs FLTX 0.60× + +- + +- + +- + +3,072 ns · 0.60× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 13,073 ns/iteration, speed vs FLTX 0.14× + +- + +- + +- + +13,073 ns · 0.14× + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 117.4 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.592883× + +- + +- + +- + +117.4 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 304.3 ns/iteration, speed vs FLTX 0.39× + +- + +- + +- + +304.3 ns · 0.39× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 537.6 ns/iteration, speed vs FLTX 0.22× + +- + +- + +- + +537.6 ns · 0.22× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 963.9 ns/iteration, speed vs FLTX 0.12× + +- + +- + +- + +963.9 ns · 0.12× + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 528.5 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.608888× + +- + +- + +- + +528.5 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 1,379 ns/iteration, speed vs FLTX 0.38× + +- + +- + +- + +1,379 ns · 0.38× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 1,976 ns/iteration, speed vs FLTX 0.27× + +- + +- + +- + +1,976 ns · 0.27× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 4,423 ns/iteration, speed vs FLTX 0.12× + +- + +- + +- + +4,423 ns · 0.12× + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 422.6 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.063582× + +- + +- + +- + +422.6 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 872.0 ns/iteration, speed vs FLTX 0.48× + +- + +- + +- + +872.0 ns · 0.48× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 1,192 ns/iteration, speed vs FLTX 0.35× + +- + +- + +- + +1,192 ns · 0.35× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 2,410 ns/iteration, speed vs FLTX 0.18× + +- + +- + +- + +2,410 ns · 0.18× + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 236.8 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.961123× + +- + +- + +- + +236.8 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 631.0 ns/iteration, speed vs FLTX 0.38× + +- + +- + +- + +631.0 ns · 0.38× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 464.4 ns/iteration, speed vs FLTX 0.51× + +- + +- + +- + +464.4 ns · 0.51× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 1,334 ns/iteration, speed vs FLTX 0.18× + +- + +- + +- + +1,334 ns · 0.18× + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 9,212 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.402985× + +- + +- + +- + +9,212 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 26,262 ns/iteration, speed vs FLTX 0.35× + +- + +- + +- + +26,262 ns · 0.35× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 12,925 ns/iteration, speed vs FLTX 0.71× + +- + +- + +- + +12,925 ns · 0.71× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 38,675 ns/iteration, speed vs FLTX 0.24× + +- + +- + +- + +38,675 ns · 0.24× + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,723 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.652155× + +- + +- + +- + +4,723 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 21,975 ns/iteration, speed vs FLTX 0.21× + +- + +- + +- + +21,975 ns · 0.21× + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 12,525 ns/iteration, speed vs FLTX 0.38× + +- + +- + +- + +12,525 ns · 0.38× + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 35,600 ns/iteration, speed vs FLTX 0.13× + +- + +- + +- + +35,600 ns · 0.13× + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Text: green pass · amber pass within 4 bits · red fail. Special: Both / Inf / NaN / No / –. + diff --git a/validation/metrics/generated/overview/windows_x86_64_MinGW_f256_overview_compact.svg b/validation/metrics/generated/overview/windows_x86_64_MinGW_f256_overview_compact.svg new file mode 100644 index 0000000..125fc09 --- /dev/null +++ b/validation/metrics/generated/overview/windows_x86_64_MinGW_f256_overview_compact.svg @@ -0,0 +1,9392 @@ + + + + + +operation + + +bl::f256 + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +qdpp (qd_real) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +mpfr_float_backend<64> + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +TLFloat (tloct) + +bits +accurate + +domain + +bench +(ns) + +Inf/ +NaN + +±0 + +avg + +min + +pass + + + +Arithmetic + + + + + + + +add + +fltx bl::f256 +API: bl::add +mean: 227.4 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 10.52 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.083589× + +227.4 + +215.3 + +2/2 + +10.5 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp operator+ +mean: 227.4 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 226.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=3770, seed=10322096095657499292 +subnormal: mean 243.5, p01 219.8, worst 216.5, required 190.0, margin 26.5, n=326, seed=10322096095657499292 +benchmark: 21.91 ns/iteration, speed vs FLTX 0.48× + +227.4 + +215.3 + +2/2 + +21.9 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator+ +mean: 225.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.3, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3770, seed=10322096095657499292 +subnormal: mean 245.4, p01 215.5, worst 214.9, required 190.0, margin 24.9, n=326, seed=10322096095657499292 +benchmark: 58.00 ns/iteration, speed vs FLTX 0.18× + +225.0 + +214.0 + +2/2 + +58.0 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator+ +mean: 253.1 bits +p01: 237.3 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 251.8, p01 237.3, worst 237.0, required 190.0, margin 47.0, n=3770, seed=10322096095657499292 +subnormal: mean 268.5, p01 239.2, worst 237.9, required 190.0, margin 47.9, n=326, seed=10322096095657499292 +benchmark: 126.0 ns/iteration, speed vs FLTX 0.08× + +253.1 + +237.0 + +2/2 + +126 ns + +No + +✗ + + + + +subtract + +fltx bl::f256 +API: bl::subtract +mean: 227.4 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: yes +general: mean 226.1, p01 215.6, worst 215.2, required 190.0, margin 25.2, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 10.41 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.130307× + +227.4 + +215.2 + +2/2 + +10.4 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp operator- +mean: 227.4 bits +p01: 215.6 bits +worst: 215.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 226.1, p01 215.6, worst 215.0, required 190.0, margin 25.0, n=3791, seed=10322096095657499292 +subnormal: mean 243.9, p01 244.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 22.18 ns/iteration, speed vs FLTX 0.47× + +227.4 + +215.0 + +2/2 + +22.2 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator- +mean: 225.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 223.5, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=3791, seed=10322096095657499292 +subnormal: mean 245.9, p01 246.0, worst 216.7, required 190.0, margin 26.7, n=305, seed=10322096095657499292 +benchmark: 58.46 ns/iteration, speed vs FLTX 0.18× + +225.2 + +214.0 + +2/2 + +58.5 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator- +mean: 253.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 252.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=3791, seed=10322096095657499292 +subnormal: mean 268.9, p01 269.0, worst 237.7, required 190.0, margin 47.7, n=305, seed=10322096095657499292 +benchmark: 125.2 ns/iteration, speed vs FLTX 0.08× + +253.3 + +237.0 + +2/2 + +125 ns + +No + +✗ + + + + +multiply + +fltx bl::f256 +API: bl::multiply +mean: 220.0 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 23.16 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.593005× + +220.0 + +215.2 + +2/2 + +23.2 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp operator* +mean: 220.0 bits +p01: 215.6 bits +worst: 215.2 bits +domains: 2/2 +minimum threshold margin: 25.2 bits +special values: Both +signed zero: no +subnormal support: - +general: mean 220.0, p01 216.3, worst 215.2, required 190.0, margin 25.2, n=4000, seed=10322096095657499292 +subnormal: mean 221.5, p01 215.6, worst 215.6, required 190.0, margin 25.6, n=100, seed=10322096095657499292 +benchmark: 36.89 ns/iteration, speed vs FLTX 0.63× + +220.0 + +215.2 + +2/2 + +36.9 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator* +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4000, seed=10322096095657499292 +subnormal: mean 217.3, p01 214.3, worst 214.3, required 190.0, margin 24.3, n=100, seed=10322096095657499292 +benchmark: 88.93 ns/iteration, speed vs FLTX 0.26× + +216.0 + +214.0 + +2/2 + +88.9 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator* +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4000, seed=10322096095657499292 +subnormal: mean 240.2, p01 237.1, worst 237.1, required 190.0, margin 47.1, n=100, seed=10322096095657499292 +benchmark: 121.0 ns/iteration, speed vs FLTX 0.19× + +239.0 + +237.0 + +2/2 + +121 ns + +No + +✗ + + + + +divide + +fltx bl::f256 +API: bl::divide +mean: 219.2 bits +p01: 215.3 bits +worst: 214.8 bits +domains: 2/2 +minimum threshold margin: 24.8 bits +special values: Both +signed zero: yes +subnormal support: yes +general: mean 219.2, p01 215.3, worst 214.8, required 190.0, margin 24.8, n=4045, seed=10322096095657499292 +subnormal: mean 219.4, p01 215.4, worst 215.4, required 190.0, margin 25.4, n=55, seed=10322096095657499292 +benchmark: 107.0 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.046098× + +219.2 + +214.8 + +2/2 + +107 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp operator/ +mean: 218.7 bits +p01: 172.2 bits +worst: 172.2 bits +domains: 1/2 +minimum threshold margin: -17.8 bits +special values: NaN +signed zero: no +subnormal support: - +general: mean 219.2, p01 214.8, worst 214.0, required 190.0, margin 24.0, n=4045, seed=10322096095657499292 +subnormal: mean 179.1, p01 172.2, worst 172.2, required 190.0, margin -17.8, n=55, seed=10322096095657499292 +benchmark: 304.5 ns/iteration, speed vs FLTX 0.35× + +218.7 + +172.2 + +1/2 + +304 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::operator/ +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +general: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4045, seed=10322096095657499292 +subnormal: mean 218.2, p01 214.2, worst 214.2, required 190.0, margin 24.2, n=55, seed=10322096095657499292 +benchmark: 111.9 ns/iteration, speed vs FLTX 0.96× + +216.0 + +214.0 + +2/2 + +112 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat operator/ +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +general: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4045, seed=10322096095657499292 +subnormal: mean 241.4, p01 237.2, worst 237.2, required 190.0, margin 47.2, n=55, seed=10322096095657499292 +benchmark: 337.3 ns/iteration, speed vs FLTX 0.32× + +239.0 + +237.0 + +2/2 + +337 ns + +No + +✗ + + + + +IO + + + + + + + +to_string + +fltx bl::f256 +API: bl::to_string +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 347.4 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.478589× + +220.4 + +217.0 + +2/2 + +347 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp to_string +mean: 218.8 bits +p01: 211.0 bits +worst: 208.7 bits +domains: 2/2 +minimum threshold margin: 18.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 211.0, worst 208.7, required 190.0, margin 18.7, n=4096, seed=10322096095657499357 +benchmark: 4,157 ns/iteration, speed vs FLTX 0.08× + +218.8 + +208.7 + +2/2 + +4157 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost number::str +mean: 220.3 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.2, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 513.6 ns/iteration, speed vs FLTX 0.68× + +220.3 + +217.0 + +2/2 + +514 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::to_string +mean: 216.9 bits +p01: 214.0 bits +worst: 213.6 bits +domains: 2/2 +minimum threshold margin: 23.6 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.1, p01 214.1, worst 213.6, required 190.0, margin 23.6, n=4099, seed=10322096095657499356 +wide_exponent: mean 216.7, p01 214.0, worst 213.6, required 190.0, margin 23.6, n=4096, seed=10322096095657499357 +benchmark: 14,336 ns/iteration, speed vs FLTX 0.02× + +216.9 + +213.6 + +2/2 + +14336 ns + +Both + +✓ + + + + +to_chars + +fltx bl::f256 +API: bl::to_chars +mean: 220.4 bits +p01: 217.2 bits +worst: 217.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.5, p01 217.2, worst 217.0, required 190.0, margin 27.0, n=4096, seed=10322096095657499357 +benchmark: 308.2 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 13.496172× + +220.4 + +217.0 + +2/2 + +308 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp write +mean: 218.8 bits +p01: 211.0 bits +worst: 208.7 bits +domains: 2/2 +minimum threshold margin: 18.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 220.4, p01 217.5, worst 217.1, required 190.0, margin 27.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 211.0, worst 208.7, required 190.0, margin 18.7, n=4096, seed=10322096095657499357 +benchmark: 4,159 ns/iteration, speed vs FLTX 0.07× + +218.8 + +208.7 + +2/2 + +4159 ns + +Both + +✗ + + +mpfr64: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: to_chars is unavailable + +- + +- + +- + +- + +- + +- + + + + +parse + +fltx bl::f256 +API: bl::parse +mean: 219.7 bits +p01: 212.3 bits +worst: 212.0 bits +domains: 2/2 +minimum threshold margin: 0.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.5, worst 215.0, required 212.0, margin 3.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 219.5, p01 212.3, worst 212.0, required 212.0, margin 0.0, n=4098, seed=10322096095657499308 +benchmark: 386.7 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 0.824953× + +219.7 + +212.0 + +2/2 + +387 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp read +mean: 200.9 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -212.0 bits +special values: NaN +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 213.4, worst 212.6, required 212.0, margin 0.6, n=4097, seed=10322096095657499311 +wide_exponent: mean 185.9, p01 0.0, worst 0.0, required 212.0, margin -212.0, n=4098, seed=10322096095657499308 +benchmark: 2,396 ns/iteration, speed vs FLTX 0.16× + +200.9 + +0.0 + +1/2 + +2396 ns + +NaN + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost string constructor +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 2.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 212.0, margin 2.0, n=4098, seed=10322096095657499308 +benchmark: 319.0 ns/iteration, speed vs FLTX 1.21× + +216.0 + +214.0 + +2/2 + +319 ns + +Both + +✓ + + +TLFloat Octuple +API: TLFloat string constructor +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 25.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 212.0, margin 25.0, n=4097, seed=10322096095657499311 +wide_exponent: mean 238.9, p01 237.2, worst 237.1, required 212.0, margin 25.1, n=4098, seed=10322096095657499308 +benchmark: 10,591 ns/iteration, speed vs FLTX 0.04× + +238.9 + +237.0 + +2/2 + +10591 ns + +No + +✗ + + + + +Rounding + + + + + + + +floor + +fltx bl::f256 +API: bl::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.40 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.948358× + += + += + +1/1 + +1.4 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.32 ns/iteration, speed vs FLTX 1.05× + += + += + +1/1 + +1.3 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 50.18 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +50.2 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::floor +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 49.33 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +49.3 ns + +No + +✗ + + + + +ceil + +fltx bl::f256 +API: bl::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.41 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.939612× + += + += + +1/1 + +1.4 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 1.33 ns/iteration, speed vs FLTX 1.06× + += + += + +1/1 + +1.3 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 50.61 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +50.6 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ceil +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 49.52 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +49.5 ns + +No + +✗ + + + + +trunc + +fltx bl::f256 +API: bl::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.79 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.806833× + += + += + +1/1 + +2.8 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp aint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 2.25 ns/iteration, speed vs FLTX 1.24× + += + += + +1/1 + +2.3 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 49.69 ns/iteration, speed vs FLTX 0.06× + += + += + +1/1 + +49.7 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::trunc +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 38.39 ns/iteration, speed vs FLTX 0.07× + += + += + +1/1 + +38.4 ns + +No + +✗ + + + + +round + +fltx bl::f256 +API: bl::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 10.21 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.130753× + += + += + +1/1 + +10.2 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp round +mean: 229.7 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 0/1 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 229.7, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4110, seed=10322096095657499382 +benchmark: 11.54 ns/iteration, speed vs FLTX 0.88× + +229.7 + +0.0 + +0/1 + +11.5 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 119.7 ns/iteration, speed vs FLTX 0.09× + += + += + +1/1 + +120 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::round +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 58.97 ns/iteration, speed vs FLTX 0.17× + += + += + +1/1 + +59.0 ns + +No + +✗ + + + + +roundeven + +fltx bl::f256 +API: bl::roundeven +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 9.12 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 7.066124× + += + += + +1/1 + +9.1 ns + +Both + +✓ + + +qdpp: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: roundeven is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::rint +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4110, seed=10322096095657499382 +benchmark: 64.43 ns/iteration, speed vs FLTX 0.14× + += + += + +1/1 + +64.4 ns + +No + +✗ + + + + +lround + +fltx bl::f256 +API: bl::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 5.09 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 32.318867× + += + += + +1/1 + +5.1 ns + +- + +- + + +qdpp: lround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4112, seed=10322096095657499382 +benchmark: 164.4 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +164 ns + +- + +- + + +tlfloat: lround is unavailable + +- + +- + +- + +- + +- + +- + + + + +llround + +fltx bl::f256 +API: bl::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 4.81 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 54.405608× + += + += + +1/1 + +4.8 ns + +- + +- + + +qdpp: llround is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::llround +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +boundary: mean exact, p01 exact, worst exact, required 180.0, margin exact, n=4116, seed=10322096095657499382 +benchmark: 261.6 ns/iteration, speed vs FLTX 0.02× + += + += + +1/1 + +262 ns + +- + +- + + +tlfloat: llround is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_decimals + +fltx bl::f256 +API: bl::round_decimals +mean: 220.0 bits +p01: 215.6 bits +worst: 215.3 bits +domains: 1/1 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.0, p01 215.6, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +benchmark: 127.5 ns/iteration (no available competitor) + +220.0 + +215.3 + +1/1 + +128 ns + +Both + +✓ + + +qdpp: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_decimals is unavailable + +- + +- + +- + +- + +- + +- + + + + +round_significant + +fltx bl::f256 +API: bl::round_significant +mean: 229.6 bits +p01: 215.6 bits +worst: 215.1 bits +domains: 1/1 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean 229.6, p01 215.6, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 163.3 ns/iteration (no available competitor) + +229.6 + +215.1 + +1/1 + +163 ns + +Both + +✓ + + +qdpp: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: round_significant is unavailable + +- + +- + +- + +- + +- + +- + + + + +Remainders + + + + + + + +fmod + +fltx bl::f256 +API: bl::fmod +mean: 244.0 bits +p01: 217.7 bits +worst: 217.7 bits +domains: 3/3 +minimum threshold margin: 27.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean 237.4, p01 217.7, worst 217.7, required 190.0, margin 27.7, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 69.57 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 4.170058× + +244.0 + +217.7 + +3/3 + +69.6 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp fmod +mean: 199.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -190.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 242.3, p01 211.1, worst 205.5, required 190.0, margin 15.5, n=4099, seed=10322096095657499356 +quotient_reduction: mean 123.2, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4, seed=10322096095657499383 +wide_exponent: mean 157.4, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4096, seed=10322096095657499357 +benchmark: 413.3 ns/iteration, speed vs FLTX 0.17× + +199.8 + +0.0 + +1/3 + +413 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 290.1 ns/iteration, speed vs FLTX 0.24× + += + += + +3/3 + +290 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fmod +mean: exact bits +p01: exact bits +worst: exact bits +domains: 3/3 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +quotient_reduction: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4, seed=10322096095657499383 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 694.7 ns/iteration, speed vs FLTX 0.10× + += + += + +3/3 + +695 ns + +No + +✗ + + + + +remainder + +fltx bl::f256 +API: bl::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 99.11 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.333311× + += + += + +1/1 + +99.1 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp drem +mean: 241.9 bits +p01: 210.4 bits +worst: 205.5 bits +domains: 1/1 +minimum threshold margin: 15.5 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 241.9, p01 210.4, worst 205.5, required 190.0, margin 15.5, n=4099, seed=10322096095657499356 +benchmark: 425.6 ns/iteration, speed vs FLTX 0.23× + +241.9 + +205.5 + +1/1 + +426 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 330.4 ns/iteration, speed vs FLTX 0.30× + += + += + +1/1 + +330 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remainder +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 737.4 ns/iteration, speed vs FLTX 0.13× + += + += + +1/1 + +737 ns + +No + +✗ + + + + +remquo + +fltx bl::f256 +API: bl::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 99.99 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.676358× + += + += + +1/1 + +100.0 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp divrem +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 424.6 ns/iteration, speed vs FLTX 0.24× + += + += + +1/1 + +425 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 367.6 ns/iteration, speed vs FLTX 0.27× + += + += + +1/1 + +368 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::remquo +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 750.8 ns/iteration, speed vs FLTX 0.13× + += + += + +1/1 + +751 ns + +No + +✗ + + + + +Float Utils + + + + + + + +abs + +fltx bl::f256 +API: bl::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.58 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.893118× + += + += + +2/2 + +1.6 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.41 ns/iteration, speed vs FLTX 1.12× + += + += + +2/2 + +1.4 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 39.74 ns/iteration, speed vs FLTX 0.04× + += + += + +2/2 + +39.7 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 4.96 ns/iteration, speed vs FLTX 0.32× + += + += + +2/2 + +5.0 ns + +No + +✓ + + + + +fabs + +fltx bl::f256 +API: bl::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.60 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.905943× + += + += + +1/1 + +1.6 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 1.45 ns/iteration, speed vs FLTX 1.10× + += + += + +1/1 + +1.5 ns + +Both + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fabs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 40.10 ns/iteration, speed vs FLTX 0.04× + += + += + +1/1 + +40.1 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::abs +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 4.93 ns/iteration, speed vs FLTX 0.32× + += + += + +1/1 + +4.9 ns + +No + +✓ + + + + +fma + +fltx bl::f256 +API: bl::fma +mean: 229.7 bits +p01: 215.7 bits +worst: 215.1 bits +domains: 3/3 +minimum threshold margin: 25.1 bits +special values: Both +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 219.9, p01 215.7, worst 215.2, required 190.0, margin 25.2, n=4099, seed=10322096095657499356 +wide_exponent: mean 225.3, p01 216.0, worst 215.1, required 190.0, margin 25.1, n=4096, seed=10322096095657499357 +benchmark: 38.16 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.089372× + +229.7 + +215.1 + +3/3 + +38.2 ns + +Both + +✗ + + +qdpp: fma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fma +mean: 228.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 222.8, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 117.9 ns/iteration, speed vs FLTX 0.32× + +228.3 + +214.0 + +3/3 + +118 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::fma +mean: 251.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 239.0, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 245.2, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 215.1 ns/iteration, speed vs FLTX 0.18× + +251.1 + +237.0 + +3/3 + +215 ns + +No + +✗ + + + + +recip + +fltx bl::f256 +API: bl::recip +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: Both +signed zero: yes +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 101.0 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.99513× + +217.9 + +214.6 + +2/2 + +101 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp inv +mean: 217.9 bits +p01: 215.1 bits +worst: 214.6 bits +domains: 2/2 +minimum threshold margin: 24.6 bits +special values: NaN +signed zero: no +subnormal support: - +near_one: mean 218.0, p01 215.4, worst 214.6, required 190.0, margin 24.6, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.1, worst 214.6, required 190.0, margin 24.6, n=4096, seed=10322096095657499357 +benchmark: 302.5 ns/iteration, speed vs FLTX 0.33× + +217.9 + +214.6 + +2/2 + +302 ns + +NaN + +✗ + + +mpfr64: recip is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: recip is unavailable + +- + +- + +- + +- + +- + +- + + + + +fmin + +fltx bl::f256 +API: bl::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.53 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.828412× + += + += + +2/2 + +1.5 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp min +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.27 ns/iteration, speed vs FLTX 1.21× + += + += + +2/2 + +1.3 ns + +Inf + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 61.61 ns/iteration, speed vs FLTX 0.02× + += + += + +2/2 + +61.6 ns + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmin +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 99.05 ns/iteration, speed vs FLTX 0.02× + += + += + +2/2 + +99.0 ns + +No + +✗ + + + + +fmax + +fltx bl::f256 +API: bl::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.63 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.799577× + += + += + +2/2 + +1.6 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp max +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Inf +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.31 ns/iteration, speed vs FLTX 1.25× + += + += + +2/2 + +1.3 ns + +Inf + +✓ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 61.54 ns/iteration, speed vs FLTX 0.03× + += + += + +2/2 + +61.5 ns + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::fmax +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 98.58 ns/iteration, speed vs FLTX 0.02× + += + += + +2/2 + +98.6 ns + +No + +✗ + + + + +fdim + +fltx bl::f256 +API: bl::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 5.47 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 9.262019× + += + += + +2/2 + +5.5 ns + +Both + +✓ + + +qdpp: fdim is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::fdim +mean: 243.7 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean 241.3, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +benchmark: 50.68 ns/iteration, speed vs FLTX 0.11× + +243.7 + +214.0 + +2/2 + +50.7 ns + +No + +✓ + + +TLFloat Octuple +API: tlfloat::fdim +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: yes +subnormal support: - +cancellation: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4098, seed=10322096095657499352 +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 236.0 ns/iteration, speed vs FLTX 0.02× + += + += + +2/2 + +236 ns + +No + +✓ + + + + +copysign + +fltx bl::f256 +API: bl::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 0.683 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 11.164079× + += + += + +1/1 + +0.68 ns + +Both + +✓ + + +qdpp: copysign is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 57.92 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +57.9 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::copysign +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +benchmark: 7.62 ns/iteration, speed vs FLTX 0.09× + += + += + +1/1 + +7.6 ns + +No + +✗ + + + + +ldexp + +fltx bl::f256 +API: bl::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.70 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 10.888875× + += + += + +1/1 + +1.7 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.56 ns/iteration, speed vs FLTX 0.09× + += + += + +1/1 + +18.6 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 48.03 ns/iteration, speed vs FLTX 0.04× + += + += + +1/1 + +48.0 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 66.09 ns/iteration, speed vs FLTX 0.03× + += + += + +1/1 + +66.1 ns + +No + +✗ + + + + +scalbn + +fltx bl::f256 +API: bl::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.71 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 10.881348× + += + += + +1/1 + +1.7 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.57 ns/iteration, speed vs FLTX 0.09× + += + += + +1/1 + +18.6 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbn +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 47.53 ns/iteration, speed vs FLTX 0.04× + += + += + +1/1 + +47.5 ns + +Both + +✓ + + +tlfloat: scalbn is unavailable + +- + +- + +- + +- + +- + +- + + + + +scalbln + +fltx bl::f256 +API: bl::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.70 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 10.930027× + += + += + +1/1 + +1.7 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp ldexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: no +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 18.56 ns/iteration, speed vs FLTX 0.09× + += + += + +1/1 + +18.6 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::scalbln +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 47.71 ns/iteration, speed vs FLTX 0.04× + += + += + +1/1 + +47.7 ns + +Both + +✓ + + +tlfloat: scalbln is unavailable + +- + +- + +- + +- + +- + +- + + + + +frexp + +fltx bl::f256 +API: bl::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: yes +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 10.67 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 9.223964× + += + += + +2/2 + +10.7 ns + +Both + +✓ + + +qdpp: frexp is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 98.39 ns/iteration, speed vs FLTX 0.11× + += + += + +2/2 + +98.4 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::frexp +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +subnormal: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4100, seed=10322096095657499350 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 223.2 ns/iteration, speed vs FLTX 0.05× + += + += + +2/2 + +223 ns + +No + +✗ + + + + +modf + +fltx bl::f256 +API: bl::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 14.71 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 15.990214× + += + += + +2/2 + +14.7 ns + +Both + +✓ + + +qdpp: modf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 235.2 ns/iteration, speed vs FLTX 0.06× + += + += + +2/2 + +235 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::modf +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: No +signed zero: no +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 315.6 ns/iteration, speed vs FLTX 0.05× + += + += + +2/2 + +316 ns + +No + +✗ + + + + +ilogb + +fltx bl::f256 +API: bl::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.07 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 29.947902× + += + += + +2/2 + +1.1 ns + +- + +- + + +qdpp: ilogb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 45.31 ns/iteration, speed vs FLTX 0.02× + += + += + +2/2 + +45.3 ns + +- + +- + + +TLFloat Octuple +API: tlfloat::ilogb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: - +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 31.93 ns/iteration, speed vs FLTX 0.03× + += + += + +2/2 + +31.9 ns + +- + +- + + + + +logb + +fltx bl::f256 +API: bl::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 1.08 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 91.744082× + += + += + +2/2 + +1.1 ns + +Both + +- + + +qdpp: logb is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::logb +mean: exact bits +p01: exact bits +worst: exact bits +domains: 2/2 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4099, seed=10322096095657499356 +wide_exponent: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=4096, seed=10322096095657499357 +benchmark: 98.89 ns/iteration, speed vs FLTX 0.01× + += + += + +2/2 + +98.9 ns + +Both + +- + + +tlfloat: logb is unavailable + +- + +- + +- + +- + +- + +- + + + + +nextafter + +fltx bl::f256 +API: bl::nextafter +benchmark: 4.64 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 35.234935× + +- + +- + +- + +4.6 ns + +- + +- + + +qdpp: nextafter is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter +benchmark: 763.6 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +764 ns + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter +benchmark: 163.7 ns/iteration, speed vs FLTX 0.03× + +- + +- + +- + +164 ns + +- + +- + + + + +nexttoward + +fltx bl::f256 +API: bl::nexttoward +benchmark: 4.44 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 36.84885× + +- + +- + +- + +4.4 ns + +- + +- + + +qdpp: nexttoward is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::math::nextafter (same type) +benchmark: 731.0 ns/iteration, speed vs FLTX 0.01× + +- + +- + +- + +731 ns + +- + +- + + +TLFloat Octuple +API: tlfloat::nextafter (same type) +benchmark: 163.7 ns/iteration, speed vs FLTX 0.03× + +- + +- + +- + +164 ns + +- + +- + + + + +Roots & powers + + + + + + + +sqr + +fltx bl::f256 +API: bl::sqr +mean: 220.1 bits +p01: 216.3 bits +worst: 215.3 bits +domains: 2/2 +minimum threshold margin: 25.3 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4099, seed=10322096095657499356 +wide_exponent: mean 220.1, p01 216.3, worst 215.3, required 190.0, margin 25.3, n=4096, seed=10322096095657499357 +benchmark: 22.75 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.660849× + +220.1 + +215.3 + +2/2 + +22.8 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sqr +mean: 216.7 bits +p01: 215.0 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 24.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.8, p01 215.0, worst 214.7, required 190.0, margin 24.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 216.7, p01 215.1, worst 214.8, required 190.0, margin 24.8, n=4096, seed=10322096095657499357 +benchmark: 15.04 ns/iteration, speed vs FLTX 1.51× + +216.7 + +214.7 + +2/2 + +15.0 ns + +Both + +✓ + + +mpfr64: sqr is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: sqr is unavailable + +- + +- + +- + +- + +- + +- + + + + +sqrt + +fltx bl::f256 +API: bl::sqrt +mean: 217.9 bits +p01: 211.3 bits +worst: 209.6 bits +domains: 4/4 +minimum threshold margin: 19.6 bits +special values: Both +signed zero: yes +subnormal support: yes +extreme_finite: mean 217.4, p01 211.6, worst 209.6, required 190.0, margin 19.6, n=4096, seed=10322096095657499354 +near_one: mean 217.9, p01 212.0, worst 210.1, required 190.0, margin 20.1, n=4099, seed=10322096095657499359 +subnormal: mean 218.3, p01 211.5, worst 210.0, required 190.0, margin 20.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 217.9, p01 211.3, worst 210.1, required 190.0, margin 20.1, n=4096, seed=10322096095657499357 +benchmark: 120.3 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.236699× + +217.9 + +209.6 + +4/4 + +120 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sqrt +mean: 152.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/4 +minimum threshold margin: -190.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 164.0, p01 54.6, worst 53.6, required 190.0, margin -136.4, n=4096, seed=10322096095657499354 +near_one: mean 217.6, p01 214.0, worst 212.6, required 190.0, margin 22.6, n=4099, seed=10322096095657499359 +subnormal: mean 10.8, p01 0.0, worst 0.0, required 190.0, margin -190.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 216.9, p01 187.0, worst 174.8, required 190.0, margin -15.2, n=4096, seed=10322096095657499357 +benchmark: 599.8 ns/iteration, speed vs FLTX 0.20× + +152.3 + +0.0 + +1/4 + +600 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sqrt +mean: 216.2 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 4/4 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 216.2, p01 214.4, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.1, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499359 +subnormal: mean 216.8, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 148.7 ns/iteration, speed vs FLTX 0.81× + +216.2 + +214.0 + +4/4 + +149 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sqrt +mean: 239.2 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 4/4 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +extreme_finite: mean 239.0, p01 237.4, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499359 +subnormal: mean 239.7, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4100, seed=10322096095657499350 +wide_exponent: mean 239.0, p01 237.2, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 511.7 ns/iteration, speed vs FLTX 0.24× + +239.2 + +237.0 + +4/4 + +512 ns + +No + +✗ + + + + +cbrt + +fltx bl::f256 +API: bl::cbrt +mean: 219.3 bits +p01: 215.5 bits +worst: 214.9 bits +domains: 2/2 +minimum threshold margin: 24.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.4, p01 215.6, worst 214.9, required 190.0, margin 24.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 219.2, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4096, seed=10322096095657499357 +benchmark: 382.3 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.265539× + +219.3 + +214.9 + +2/2 + +382 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp nroot +mean: 217.2 bits +p01: 193.1 bits +worst: 176.0 bits +domains: 1/2 +minimum threshold margin: -14.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.4, p01 213.9, worst 213.0, required 190.0, margin 23.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.0, p01 193.1, worst 176.0, required 190.0, margin -14.0, n=4096, seed=10322096095657499357 +benchmark: 1,452 ns/iteration, speed vs FLTX 0.26× + +217.2 + +176.0 + +1/2 + +1452 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cbrt +mean: 216.0 bits +p01: 214.2 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 24.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.1, p01 214.3, worst 214.1, required 190.0, margin 24.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.1, required 190.0, margin 24.1, n=4096, seed=10322096095657499357 +benchmark: 483.9 ns/iteration, speed vs FLTX 0.79× + +216.0 + +214.1 + +2/2 + +484 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::cbrt +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 239.2, p01 237.3, worst 237.1, required 190.0, margin 47.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 190.0, margin 47.0, n=4096, seed=10322096095657499357 +benchmark: 3,074 ns/iteration, speed vs FLTX 0.12× + +239.0 + +237.0 + +2/2 + +3074 ns + +No + +✗ + + + + +hypot + +fltx bl::f256 +API: bl::hypot +mean: 229.9 bits +p01: 215.5 bits +worst: 213.9 bits +domains: 2/2 +minimum threshold margin: 23.9 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.1, p01 215.5, worst 215.0, required 190.0, margin 25.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 240.8, p01 216.6, worst 213.9, required 190.0, margin 23.9, n=4096, seed=10322096095657499357 +benchmark: 175.2 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 3.2552× + +229.9 + +213.9 + +2/2 + +175 ns + +Both + +✓ + + +qdpp: hypot is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::hypot +mean: 228.7 bits +p01: 213.2 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 215.3, p01 213.2, worst 212.9, required 190.0, margin 22.9, n=4099, seed=10322096095657499356 +wide_exponent: mean 242.0, p01 213.6, worst 212.9, required 190.0, margin 22.9, n=4096, seed=10322096095657499357 +benchmark: 583.4 ns/iteration, speed vs FLTX 0.30× + +228.7 + +212.9 + +2/2 + +583 ns + +Both + +✗ + + +TLFloat Octuple +API: tlfloat::hypot +mean: 251.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 47.0 bits +special values: No +signed zero: yes +subnormal support: - +moderate: mean 239.0, p01 237.1, worst 237.0, required 190.0, margin 47.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 264.8, p01 237.6, worst 237.1, required 190.0, margin 47.1, n=4096, seed=10322096095657499357 +benchmark: 570.3 ns/iteration, speed vs FLTX 0.31× + +251.9 + +237.0 + +2/2 + +570 ns + +No + +✓ + + + + +pow + +fltx bl::f256 +API: bl::pow +mean: 216.8 bits +p01: 212.0 bits +worst: 211.1 bits +domains: 2/2 +minimum threshold margin: 31.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.5, p01 212.0, worst 211.1, required 180.0, margin 31.1, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.1, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499359 +benchmark: 2,712 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.316915× + +216.8 + +211.1 + +2/2 + +2712 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp pow +mean: 216.4 bits +p01: 211.7 bits +worst: 210.6 bits +domains: 2/2 +minimum threshold margin: 30.6 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 215.1, p01 211.7, worst 210.6, required 180.0, margin 30.6, n=4099, seed=10322096095657499356 +near_one: mean 217.6, p01 214.5, worst 213.9, required 180.0, margin 33.9, n=4099, seed=10322096095657499359 +benchmark: 9,603 ns/iteration, speed vs FLTX 0.28× + +216.4 + +210.6 + +2/2 + +9603 ns + +No + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,572 ns/iteration, speed vs FLTX 0.76× + +215.9 + +214.0 + +2/2 + +3572 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::pow +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 20,411 ns/iteration, speed vs FLTX 0.13× + +238.9 + +237.0 + +2/2 + +20411 ns + +No + +✗ + + + + +ipow + +fltx bl::f256 +API: bl::ipow +mean: 217.2 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 23.7 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 217.2, p01 214.4, worst 213.7, required 190.0, margin 23.7, n=4099, seed=10322096095657499356 +wide_exponent: mean 217.2, p01 214.4, worst 213.8, required 190.0, margin 23.8, n=4096, seed=10322096095657499357 +benchmark: 121.6 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.187359× + +217.2 + +213.7 + +2/2 + +122 ns + +Both + +✗ + + +qdpp qd_real +API: qdpp npwr +mean: 215.0 bits +p01: 212.8 bits +worst: 212.1 bits +domains: 2/2 +minimum threshold margin: 22.1 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 215.1, p01 212.8, worst 212.1, required 190.0, margin 22.1, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.0, p01 212.8, worst 212.1, required 190.0, margin 22.1, n=4096, seed=10322096095657499357 +benchmark: 144.4 ns/iteration, speed vs FLTX 0.84× + +215.0 + +212.1 + +2/2 + +144 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::pow(value, int) +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 24.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4099, seed=10322096095657499356 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 190.0, margin 24.0, n=4096, seed=10322096095657499357 +benchmark: 272.2 ns/iteration, speed vs FLTX 0.45× + +216.0 + +214.0 + +2/2 + +272 ns + +Both + +✓ + + +tlfloat: ipow is unavailable + +- + +- + +- + +- + +- + +- + + + + +Exponentials + + + + + + + +exp + +fltx bl::f256 +API: bl::exp +mean: 216.7 bits +p01: 210.0 bits +worst: 208.9 bits +domains: 2/2 +minimum threshold margin: 28.9 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 210.0, worst 208.9, required 180.0, margin 28.9, n=4099, seed=10322096095657499291 +moderate: mean 217.4, p01 215.0, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499356 +benchmark: 1,078 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.246423× + +216.7 + +208.9 + +2/2 + +1078 ns + +Both + +- + + +qdpp qd_real +API: qdpp exp +mean: 216.6 bits +p01: 210.0 bits +worst: 209.1 bits +domains: 2/2 +minimum threshold margin: 29.1 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 210.0, worst 209.1, required 180.0, margin 29.1, n=4099, seed=10322096095657499291 +moderate: mean 217.2, p01 214.7, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 2,825 ns/iteration, speed vs FLTX 0.38× + +216.6 + +209.1 + +2/2 + +2825 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,344 ns/iteration, speed vs FLTX 0.80× + +215.9 + +214.0 + +2/2 + +1344 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp +mean: 239.0 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 4,114 ns/iteration, speed vs FLTX 0.26× + +239.0 + +237.0 + +2/2 + +4114 ns + +No + +- + + + + +exp2 + +fltx bl::f256 +API: bl::exp2 +mean: 218.0 bits +p01: 215.0 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499291 +moderate: mean 218.0, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +benchmark: 908.7 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.851746× + +218.0 + +214.2 + +2/2 + +909 ns + +Both + +- + + +qdpp: exp2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::exp2 +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499291 +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,683 ns/iteration, speed vs FLTX 0.54× + +216.0 + +214.0 + +2/2 + +1683 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::exp2 +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499291 +moderate: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +benchmark: 10,137 ns/iteration, speed vs FLTX 0.09× + +238.9 + +237.0 + +2/2 + +10137 ns + +No + +- + + + + +expm1 + +fltx bl::f256 +API: bl::expm1 +mean: 227.2 bits +p01: 207.5 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.0, p01 207.5, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 218.3, p01 214.9, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +benchmark: 1,073 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.424211× + +227.2 + +207.0 + +2/2 + +1073 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp expm1 +mean: 226.8 bits +p01: 203.4 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 235.5, p01 203.4, worst 203.0, required 180.0, margin 23.0, n=4098, seed=10322096095657499336 +moderate: mean 218.1, p01 214.4, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499356 +benchmark: 2,809 ns/iteration, speed vs FLTX 0.38× + +226.8 + +0.0 + +1/2 + +2809 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::expm1 +mean: 227.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,528 ns/iteration, speed vs FLTX 0.70× + +227.5 + +214.0 + +2/2 + +1528 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::expm1 +mean: 250.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4098, seed=10322096095657499336 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 4,256 ns/iteration, speed vs FLTX 0.25× + +250.1 + +237.0 + +2/2 + +4256 ns + +No + +✗ + + + + +Logarithms + + + + + + + +log + +fltx bl::f256 +API: bl::log +mean: 217.8 bits +p01: 214.3 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 218.2, p01 215.3, worst 215.0, required 180.0, margin 35.0, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.3, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499357 +benchmark: 1,782 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.576926× + +217.8 + +213.3 + +3/3 + +1782 ns + +Both + +- + + +qdpp qd_real +API: qdpp log +mean: 205.1 bits +p01: 62.2 bits +worst: 61.6 bits +domains: 2/3 +minimum threshold margin: -118.4 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 180.1, p01 62.2, worst 61.6, required 180.0, margin -118.4, n=4096, seed=10322096095657499354 +near_one: mean 216.1, p01 213.6, worst 212.8, required 180.0, margin 32.8, n=4099, seed=10322096095657499359 +wide_exponent: mean 219.2, p01 198.3, worst 182.9, required 180.0, margin 2.9, n=4096, seed=10322096095657499357 +benchmark: 8,949 ns/iteration, speed vs FLTX 0.20× + +205.1 + +61.6 + +2/3 + +8949 ns + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.7, p01 214.4, worst 214.3, required 180.0, margin 34.3, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 2,810 ns/iteration, speed vs FLTX 0.63× + +215.9 + +214.0 + +3/3 + +2810 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::log +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.8, p01 237.3, worst 237.3, required 180.0, margin 57.3, n=4096, seed=10322096095657499354 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 5,255 ns/iteration, speed vs FLTX 0.34× + +238.9 + +237.0 + +3/3 + +5255 ns + +No + +- + + + + +log2 + +fltx bl::f256 +API: bl::log2 +mean: 218.6 bits +p01: 214.3 bits +worst: 213.2 bits +domains: 3/3 +minimum threshold margin: 33.2 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 221.1, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4096, seed=10322096095657499357 +benchmark: 1,830 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.685929× + +218.6 + +213.2 + +3/3 + +1830 ns + +Both + +- + + +qdpp: log2 is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log2 +mean: 217.3 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 220.0, p01 214.9, worst 214.8, required 180.0, margin 34.8, n=4096, seed=10322096095657499354 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 3,086 ns/iteration, speed vs FLTX 0.59× + +217.3 + +214.0 + +3/3 + +3086 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::log2 +mean: 240.3 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 243.0, p01 237.9, worst 237.8, required 180.0, margin 57.8, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 5,413 ns/iteration, speed vs FLTX 0.34× + +240.3 + +237.0 + +3/3 + +5413 ns + +No + +- + + + + +log10 + +fltx bl::f256 +API: bl::log10 +mean: 217.4 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 3/3 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 217.6, p01 215.1, worst 214.2, required 180.0, margin 34.2, n=4096, seed=10322096095657499354 +near_one: mean 216.9, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499359 +wide_exponent: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4096, seed=10322096095657499357 +benchmark: 1,826 ns/iteration, speed vs fastest competitor tloct (TLFloat Octuple): 2.978345× + +217.4 + +213.3 + +3/3 + +1826 ns + +Both + +- + + +qdpp qd_real +API: qdpp log10 +mean: 203.1 bits +p01: 62.2 bits +worst: 61.6 bits +domains: 2/3 +minimum threshold margin: -118.4 bits +special values: NaN +signed zero: - +subnormal support: - +extreme_finite: mean 177.4, p01 62.2, worst 61.6, required 180.0, margin -118.4, n=4096, seed=10322096095657499354 +near_one: mean 215.7, p01 213.3, worst 212.7, required 180.0, margin 32.7, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.1, p01 198.3, worst 182.9, required 180.0, margin 2.9, n=4096, seed=10322096095657499357 +benchmark: 9,338 ns/iteration, speed vs FLTX 0.20× + +203.1 + +61.6 + +2/3 + +9338 ns + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log10 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +extreme_finite: mean 215.8, p01 214.1, worst 214.1, required 180.0, margin 34.1, n=4096, seed=10322096095657499354 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4096, seed=10322096095657499357 +benchmark: 5,530 ns/iteration, speed vs FLTX 0.33× + +215.9 + +214.0 + +3/3 + +5530 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::log10 +mean: 238.8 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +extreme_finite: mean 238.6, p01 237.1, worst 237.1, required 180.0, margin 57.1, n=4096, seed=10322096095657499354 +near_one: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +wide_exponent: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4096, seed=10322096095657499357 +benchmark: 5,440 ns/iteration, speed vs FLTX 0.34× + +238.8 + +237.0 + +3/3 + +5440 ns + +No + +- + + + + +log1p + +fltx bl::f256 +API: bl::log1p +mean: 226.8 bits +p01: 207.4 bits +worst: 207.0 bits +domains: 2/2 +minimum threshold margin: 27.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 236.1, p01 207.4, worst 207.0, required 180.0, margin 27.0, n=4098, seed=10322096095657499336 +moderate: mean 217.6, p01 214.8, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 1,835 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.587052× + +226.8 + +207.0 + +2/2 + +1835 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp log1p +mean: 226.4 bits +p01: 203.4 bits +worst: 203.0 bits +domains: 2/2 +minimum threshold margin: 23.0 bits +special values: NaN +signed zero: no +subnormal support: - +cancellation: mean 235.6, p01 203.4, worst 203.0, required 180.0, margin 23.0, n=4098, seed=10322096095657499336 +moderate: mean 217.2, p01 214.1, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499356 +benchmark: 8,934 ns/iteration, speed vs FLTX 0.21× + +226.4 + +203.0 + +2/2 + +8934 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::log1p +mean: 227.4 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +cancellation: mean 238.9, p01 214.4, worst 214.0, required 180.0, margin 34.0, n=4098, seed=10322096095657499336 +moderate: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 2,912 ns/iteration, speed vs FLTX 0.63× + +227.4 + +214.0 + +2/2 + +2912 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::log1p +mean: 250.1 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +cancellation: mean 261.1, p01 237.4, worst 237.0, required 180.0, margin 57.0, n=4098, seed=10322096095657499336 +moderate: mean 239.0, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 6,412 ns/iteration, speed vs FLTX 0.29× + +250.1 + +237.0 + +2/2 + +6412 ns + +No + +✗ + + + + +Trigonometric + + + + + + + +sin + +fltx bl::f256 +API: bl::sin +mean: 222.3 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 22.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 217.7, p01 208.6, worst 202.9, required 180.0, margin 22.9, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.5, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 229.6, p01 212.5, worst 212.4, required 180.0, margin 32.4, n=4315, seed=10322096095657499369 +benchmark: 897.8 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.377586× + +222.3 + +202.9 + +3/3 + +898 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sin +mean: 142.8 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 88.2, p01 40.3, worst 0.0, required 180.0, margin -180.0, n=4104, seed=10322096095657499353 +moderate: mean 215.8, p01 210.4, worst 206.1, required 180.0, margin 26.1, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 125.3, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4315, seed=10322096095657499369 +benchmark: 2,524 ns/iteration, speed vs FLTX 0.36× + +142.8 + +0.0 + +1/3 + +2524 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sin +mean: 218.5 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.3, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 222.9, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 2,135 ns/iteration, speed vs FLTX 0.42× + +218.5 + +214.0 + +3/3 + +2135 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sin +mean: 241.2 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 245.1, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 6,093 ns/iteration, speed vs FLTX 0.15× + +241.2 + +237.0 + +3/3 + +6093 ns + +No + +✗ + + + + +cos + +fltx bl::f256 +API: bl::cos +mean: 226.8 bits +p01: 215.2 bits +worst: 208.7 bits +domains: 3/3 +minimum threshold margin: 28.7 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 232.6, p01 215.6, worst 208.7, required 180.0, margin 28.7, n=4104, seed=10322096095657499353 +moderate: mean 219.2, p01 215.6, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 228.5, p01 215.2, worst 214.4, required 180.0, margin 34.4, n=4315, seed=10322096095657499369 +benchmark: 897.5 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.873134× + +226.8 + +208.7 + +3/3 + +897 ns + +Both + +- + + +qdpp qd_real +API: qdpp cos +mean: 161.9 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 171.1, p01 59.1, worst 0.0, required 180.0, margin -180.0, n=4104, seed=10322096095657499353 +moderate: mean 215.7, p01 210.1, worst 205.0, required 180.0, margin 25.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 102.2, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=4315, seed=10322096095657499369 +benchmark: 2,543 ns/iteration, speed vs FLTX 0.35× + +161.9 + +0.0 + +1/3 + +2543 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cos +mean: 219.4 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +argument_reduction: mean 220.7, p01 214.5, worst 214.0, required 180.0, margin 34.0, n=4104, seed=10322096095657499353 +moderate: mean 216.1, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 221.2, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4315, seed=10322096095657499369 +benchmark: 1,681 ns/iteration, speed vs FLTX 0.53× + +219.4 + +214.0 + +3/3 + +1681 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::cos +mean: 241.7 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +argument_reduction: mean 242.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4104, seed=10322096095657499353 +moderate: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 243.4, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4315, seed=10322096095657499369 +benchmark: 6,087 ns/iteration, speed vs FLTX 0.15× + +241.7 + +237.0 + +3/3 + +6087 ns + +No + +- + + + + +sincos + +fltx bl::f256 +API: bl::sincos +benchmark: 1,115 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.443026× + +- + +- + +- + +1115 ns + +- + +- + + +qdpp qd_real +API: qdpp sincos +benchmark: 2,724 ns/iteration, speed vs FLTX 0.41× + +- + +- + +- + +2724 ns + +- + +- + + +mpfr64: sincos is unavailable + +- + +- + +- + +- + +- + +- + + +TLFloat Octuple +API: tlfloat::sincos +benchmark: 12,232 ns/iteration, speed vs FLTX 0.09× + +- + +- + +- + +12232 ns + +- + +- + + + + +tan + +fltx bl::f256 +API: bl::tan +mean: 217.1 bits +p01: 208.6 bits +worst: 202.9 bits +domains: 3/3 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.9, p01 208.6, worst 202.9, required 170.0, margin 32.9, n=4104, seed=10322096095657499353 +moderate: mean 216.9, p01 214.4, worst 213.8, required 170.0, margin 43.8, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 217.4, p01 212.5, worst 212.3, required 170.0, margin 42.3, n=4315, seed=10322096095657499369 +benchmark: 1,209 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.975073× + +217.1 + +202.9 + +3/3 + +1209 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp tan +mean: 111.5 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 1/3 +minimum threshold margin: -170.0 bits +special values: Both +signed zero: no +subnormal support: - +argument_reduction: mean 86.8, p01 40.3, worst 0.0, required 170.0, margin -170.0, n=4104, seed=10322096095657499353 +moderate: mean 214.8, p01 209.4, worst 205.0, required 170.0, margin 35.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 36.9, p01 0.0, worst 0.0, required 170.0, margin -170.0, n=4315, seed=10322096095657499369 +benchmark: 3,024 ns/iteration, speed vs FLTX 0.40× + +111.5 + +0.0 + +1/3 + +3024 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tan +mean: 216.0 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 44.0 bits +special values: Both +signed zero: yes +subnormal support: - +argument_reduction: mean 216.1, p01 214.1, worst 214.0, required 170.0, margin 44.0, n=4104, seed=10322096095657499353 +moderate: mean 216.0, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 215.9, p01 214.2, worst 214.0, required 170.0, margin 44.0, n=4315, seed=10322096095657499369 +benchmark: 2,387 ns/iteration, speed vs FLTX 0.51× + +216.0 + +214.0 + +3/3 + +2387 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 67.0 bits +special values: No +signed zero: no +subnormal support: - +argument_reduction: mean 238.9, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4104, seed=10322096095657499353 +moderate: mean 239.0, p01 237.2, worst 237.0, required 170.0, margin 67.0, n=4099, seed=10322096095657499356 +quadrant_boundaries: mean 238.9, p01 237.2, worst 237.1, required 170.0, margin 67.1, n=4315, seed=10322096095657499369 +benchmark: 7,095 ns/iteration, speed vs FLTX 0.17× + +239.0 + +237.0 + +3/3 + +7095 ns + +No + +✗ + + + + +asin + +fltx bl::f256 +API: bl::asin +mean: 217.9 bits +p01: 214.9 bits +worst: 214.4 bits +domains: 2/2 +minimum threshold margin: 34.4 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 217.6, p01 214.9, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499356 +benchmark: 1,400 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 4.994489× + +217.9 + +214.4 + +2/2 + +1400 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp asin +mean: 217.2 bits +p01: 212.9 bits +worst: 212.3 bits +domains: 2/2 +minimum threshold margin: 32.3 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 218.3, p01 215.7, worst 215.5, required 180.0, margin 35.5, n=4105, seed=10322096095657499355 +moderate: mean 216.0, p01 212.9, worst 212.3, required 180.0, margin 32.3, n=4099, seed=10322096095657499356 +benchmark: 11,469 ns/iteration, speed vs FLTX 0.12× + +217.2 + +212.3 + +2/2 + +11469 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asin +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.1, p01 214.7, worst 214.7, required 180.0, margin 34.7, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 6,992 ns/iteration, speed vs FLTX 0.20× + +216.0 + +214.0 + +2/2 + +6992 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asin +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.1, p01 237.7, worst 237.7, required 180.0, margin 57.7, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 8,845 ns/iteration, speed vs FLTX 0.16× + +239.0 + +237.0 + +2/2 + +8845 ns + +No + +✗ + + + + +acos + +fltx bl::f256 +API: bl::acos +mean: 216.0 bits +p01: 205.5 bits +worst: 192.5 bits +domains: 2/2 +minimum threshold margin: 12.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 214.1, p01 205.5, worst 192.5, required 180.0, margin 12.5, n=4105, seed=10322096095657499355 +moderate: mean 218.0, p01 214.8, worst 210.7, required 180.0, margin 30.7, n=4099, seed=10322096095657499356 +benchmark: 1,418 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 5.06087× + +216.0 + +192.5 + +2/2 + +1418 ns + +Both + +- + + +qdpp qd_real +API: qdpp acos +mean: 217.3 bits +p01: 213.6 bits +worst: 212.5 bits +domains: 2/2 +minimum threshold margin: 32.5 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.4, p01 214.0, worst 213.0, required 180.0, margin 33.0, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 213.6, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +benchmark: 11,463 ns/iteration, speed vs FLTX 0.12× + +217.3 + +212.5 + +2/2 + +11463 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acos +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 7,175 ns/iteration, speed vs FLTX 0.20× + +215.9 + +214.0 + +2/2 + +7175 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::acos +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.9, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4105, seed=10322096095657499355 +moderate: mean 239.0, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 8,828 ns/iteration, speed vs FLTX 0.16× + +238.9 + +237.0 + +2/2 + +8828 ns + +No + +- + + + + +atan + +fltx bl::f256 +API: bl::atan +mean: 218.1 bits +p01: 215.4 bits +worst: 214.7 bits +domains: 2/2 +minimum threshold margin: 34.7 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.2, p01 215.4, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 215.4, worst 214.7, required 180.0, margin 34.7, n=4099, seed=10322096095657499359 +benchmark: 908.4 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.409211× + +218.1 + +214.7 + +2/2 + +908 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atan +mean: 216.7 bits +p01: 213.1 bits +worst: 212.4 bits +domains: 2/2 +minimum threshold margin: 32.4 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.5, p01 213.8, worst 212.6, required 180.0, margin 32.6, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 213.1, worst 212.4, required 180.0, margin 32.4, n=4099, seed=10322096095657499359 +benchmark: 8,332 ns/iteration, speed vs FLTX 0.11× + +216.7 + +212.4 + +2/2 + +8332 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,097 ns/iteration, speed vs FLTX 0.29× + +216.0 + +214.0 + +2/2 + +3097 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 8,062 ns/iteration, speed vs FLTX 0.11× + +239.0 + +237.0 + +2/2 + +8062 ns + +Inf + +✗ + + + + +atan2 + +fltx bl::f256 +API: bl::atan2 +mean: 217.9 bits +p01: 215.3 bits +worst: 214.3 bits +domains: 3/3 +minimum threshold margin: 34.3 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 224.8, p01 218.4, worst 218.4, required 180.0, margin 38.4, n=8, seed=10322096095657499351 +moderate: mean 218.0, p01 215.3, worst 214.8, required 180.0, margin 34.8, n=4099, seed=10322096095657499356 +near_one: mean 217.8, p01 215.3, worst 214.3, required 180.0, margin 34.3, n=4099, seed=10322096095657499359 +benchmark: 972.9 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.231642× + +217.9 + +214.3 + +3/3 + +973 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atan2 +mean: 216.3 bits +p01: 0.0 bits +worst: 0.0 bits +domains: 2/3 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +extreme_finite: mean 0.0, p01 0.0, worst 0.0, required 180.0, margin -180.0, n=8, seed=10322096095657499351 +moderate: mean 217.0, p01 213.4, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 213.0, worst 211.8, required 180.0, margin 31.8, n=4099, seed=10322096095657499359 +benchmark: 8,262 ns/iteration, speed vs FLTX 0.12× + +216.3 + +0.0 + +2/3 + +8262 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atan2 +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 3/3 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +extreme_finite: mean 215.3, p01 215.2, worst 215.2, required 180.0, margin 35.2, n=8, seed=10322096095657499351 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,144 ns/iteration, speed vs FLTX 0.31× + +215.9 + +214.0 + +3/3 + +3144 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atan2 +mean: 239.0 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 3/3 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: no +subnormal support: - +extreme_finite: mean 240.6, p01 237.8, worst 237.8, required 180.0, margin 57.8, n=8, seed=10322096095657499351 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 8,181 ns/iteration, speed vs FLTX 0.12× + +239.0 + +237.0 + +3/3 + +8181 ns + +Inf + +✗ + + + + +Hyperbolic + + + + + + + +sinh + +fltx bl::f256 +API: bl::sinh +mean: 217.0 bits +p01: 214.6 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.0, p01 214.6, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 217.1, p01 214.7, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499359 +benchmark: 1,361 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.172393× + +217.0 + +213.8 + +2/2 + +1361 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp sinh +mean: 216.8 bits +p01: 214.2 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 32.9 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 216.8, p01 214.3, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.8, p01 214.2, worst 212.9, required 180.0, margin 32.9, n=4099, seed=10322096095657499359 +benchmark: 3,268 ns/iteration, speed vs FLTX 0.42× + +216.8 + +212.9 + +2/2 + +3268 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::sinh +mean: 216.0 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,596 ns/iteration, speed vs FLTX 0.85× + +216.0 + +214.0 + +2/2 + +1596 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::sinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 4,811 ns/iteration, speed vs FLTX 0.28× + +238.9 + +237.0 + +2/2 + +4811 ns + +No + +✗ + + + + +cosh + +fltx bl::f256 +API: bl::cosh +mean: 217.5 bits +p01: 214.7 bits +worst: 214.2 bits +domains: 2/2 +minimum threshold margin: 34.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 217.2, p01 214.7, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499356 +near_one: mean 217.9, p01 215.2, worst 214.5, required 180.0, margin 34.5, n=4099, seed=10322096095657499359 +benchmark: 1,361 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.151047× + +217.5 + +214.2 + +2/2 + +1361 ns + +Both + +- + + +qdpp qd_real +API: qdpp cosh +mean: 217.3 bits +p01: 214.5 bits +worst: 213.8 bits +domains: 2/2 +minimum threshold margin: 33.8 bits +special values: NaN +signed zero: - +subnormal support: - +moderate: mean 217.0, p01 214.5, worst 213.8, required 180.0, margin 33.8, n=4099, seed=10322096095657499356 +near_one: mean 217.6, p01 215.0, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 3,250 ns/iteration, speed vs FLTX 0.42× + +217.3 + +213.8 + +2/2 + +3250 ns + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::cosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,566 ns/iteration, speed vs FLTX 0.87× + +215.9 + +214.0 + +2/2 + +1566 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::cosh +mean: 238.9 bits +p01: 237.1 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.1, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 4,439 ns/iteration, speed vs FLTX 0.31× + +238.9 + +237.0 + +2/2 + +4439 ns + +No + +- + + + + +tanh + +fltx bl::f256 +API: bl::tanh +mean: 219.1 bits +p01: 215.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 219.9, p01 215.4, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 218.4, p01 215.2, worst 214.2, required 180.0, margin 34.2, n=4099, seed=10322096095657499359 +benchmark: 1,316 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.250749× + +219.1 + +214.0 + +2/2 + +1316 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp tanh +mean: 218.9 bits +p01: 214.6 bits +worst: 212.9 bits +domains: 2/2 +minimum threshold margin: 32.9 bits +special values: Both +signed zero: no +subnormal support: - +moderate: mean 219.8, p01 214.6, worst 212.9, required 180.0, margin 32.9, n=4099, seed=10322096095657499356 +near_one: mean 218.1, p01 214.9, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 3,234 ns/iteration, speed vs FLTX 0.41× + +218.9 + +212.9 + +2/2 + +3234 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tanh +mean: 216.2 bits +p01: 214.3 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.6, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.3, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 1,645 ns/iteration, speed vs FLTX 0.80× + +216.2 + +214.0 + +2/2 + +1645 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::tanh +mean: 239.2 bits +p01: 237.2 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.5, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.0, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 4,701 ns/iteration, speed vs FLTX 0.28× + +239.2 + +237.1 + +2/2 + +4701 ns + +Inf + +✗ + + + + +asinh + +fltx bl::f256 +API: bl::asinh +mean: 217.2 bits +p01: 213.9 bits +worst: 213.0 bits +domains: 2/2 +minimum threshold margin: 33.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 217.7, p01 214.6, worst 213.2, required 180.0, margin 33.2, n=4099, seed=10322096095657499356 +near_one: mean 216.6, p01 213.9, worst 213.0, required 180.0, margin 33.0, n=4099, seed=10322096095657499359 +benchmark: 2,758 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.637876× + +217.2 + +213.0 + +2/2 + +2758 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp asinh +mean: 216.9 bits +p01: 213.7 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: no +subnormal support: - +moderate: mean 217.3, p01 214.2, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499356 +near_one: mean 216.4, p01 213.7, worst 212.7, required 180.0, margin 32.7, n=4099, seed=10322096095657499359 +benchmark: 8,726 ns/iteration, speed vs FLTX 0.32× + +216.9 + +0.0 + +1/2 + +8726 ns + +NaN + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::asinh +mean: 215.9 bits +p01: 214.1 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 215.9, p01 214.1, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 7,275 ns/iteration, speed vs FLTX 0.38× + +215.9 + +214.0 + +2/2 + +7275 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::asinh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 19,423 ns/iteration, speed vs FLTX 0.14× + +238.9 + +237.0 + +2/2 + +19423 ns + +No + +✗ + + + + +acosh + +fltx bl::f256 +API: bl::acosh +mean: 217.7 bits +p01: 214.4 bits +worst: 213.7 bits +domains: 2/2 +minimum threshold margin: 33.7 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 217.1, p01 214.4, worst 213.7, required 180.0, margin 33.7, n=4101, seed=10322096095657499355 +moderate: mean 218.3, p01 215.3, worst 214.4, required 180.0, margin 34.4, n=4099, seed=10322096095657499275 +benchmark: 2,548 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.742099× + +217.7 + +213.7 + +2/2 + +2548 ns + +Both + +- + + +qdpp qd_real +API: qdpp acosh +mean: 217.0 bits +p01: 213.6 bits +worst: 0.0 bits +domains: 0/2 +minimum threshold margin: -180.0 bits +special values: NaN +signed zero: - +subnormal support: - +boundary: mean 216.3, p01 213.6, worst 0.0, required 180.0, margin -180.0, n=4101, seed=10322096095657499355 +moderate: mean 217.7, p01 214.7, worst 0.0, required 180.0, margin -180.0, n=4099, seed=10322096095657499275 +benchmark: 9,532 ns/iteration, speed vs FLTX 0.27× + +217.0 + +0.0 + +0/2 + +9532 ns + +NaN + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::acosh +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +boundary: mean 215.8, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4101, seed=10322096095657499355 +moderate: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499275 +benchmark: 4,439 ns/iteration, speed vs FLTX 0.57× + +215.9 + +214.0 + +2/2 + +4439 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::acosh +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +boundary: mean 238.7, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4101, seed=10322096095657499355 +moderate: mean 239.0, p01 237.3, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499275 +benchmark: 18,248 ns/iteration, speed vs FLTX 0.14× + +238.9 + +237.0 + +2/2 + +18248 ns + +No + +- + + + + +atanh + +fltx bl::f256 +API: bl::atanh +mean: 218.3 bits +p01: 214.2 bits +worst: 213.3 bits +domains: 2/2 +minimum threshold margin: 33.3 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 219.3, p01 216.0, worst 215.1, required 180.0, margin 35.1, n=4105, seed=10322096095657499355 +moderate: mean 217.3, p01 214.2, worst 213.3, required 180.0, margin 33.3, n=4099, seed=10322096095657499356 +benchmark: 2,427 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.437721× + +218.3 + +213.3 + +2/2 + +2427 ns + +Both + +✓ + + +qdpp qd_real +API: qdpp atanh +mean: 217.7 bits +p01: 213.8 bits +worst: 0.0 bits +domains: 1/2 +minimum threshold margin: -180.0 bits +special values: Both +signed zero: no +subnormal support: - +boundary: mean 218.6, p01 215.3, worst 0.0, required 180.0, margin -180.0, n=4105, seed=10322096095657499355 +moderate: mean 216.8, p01 213.8, worst 212.5, required 180.0, margin 32.5, n=4099, seed=10322096095657499356 +benchmark: 9,355 ns/iteration, speed vs FLTX 0.26× + +217.7 + +0.0 + +1/2 + +9355 ns + +Both + +✗ + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::atanh +mean: 216.2 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: yes +subnormal support: - +boundary: mean 216.5, p01 214.9, worst 214.9, required 180.0, margin 34.9, n=4105, seed=10322096095657499355 +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +benchmark: 3,490 ns/iteration, speed vs FLTX 0.70× + +216.2 + +214.0 + +2/2 + +3490 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::atanh +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: No +signed zero: no +subnormal support: - +boundary: mean 239.4, p01 237.9, worst 237.4, required 180.0, margin 57.4, n=4105, seed=10322096095657499355 +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499356 +benchmark: 6,365 ns/iteration, speed vs FLTX 0.38× + +239.1 + +237.0 + +2/2 + +6365 ns + +No + +✗ + + + + +Special + + + + + + + +erfc + +fltx bl::f256 +API: bl::erfc +mean: 208.2 bits +p01: 191.1 bits +worst: 189.8 bits +domains: 2/2 +minimum threshold margin: 9.8 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 212.0, p01 191.1, worst 189.8, required 180.0, margin 9.8, n=4099, seed=10322096095657499356 +near_one: mean 204.3, p01 192.5, worst 192.3, required 180.0, margin 12.3, n=4099, seed=10322096095657499359 +benchmark: 12,796 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 3.502534× + +208.2 + +189.8 + +2/2 + +12796 ns + +Both + +- + + +qdpp: erfc is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erfc +mean: 216.1 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 2/2 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 216.2, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499356 +near_one: mean 216.0, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499359 +benchmark: 44,819 ns/iteration, speed vs FLTX 0.29× + +216.1 + +214.0 + +2/2 + +44819 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::erfc +mean: 239.1 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 2/2 +minimum threshold margin: 57.0 bits +special values: Inf +signed zero: - +subnormal support: - +moderate: mean 239.2, p01 237.2, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499359 +benchmark: 231,271 ns/iteration, speed vs FLTX 0.06× + +239.1 + +237.0 + +2/2 + +231271 ns + +Inf + +- + + + + +erf + +fltx bl::f256 +API: bl::erf +mean: 212.8 bits +p01: 196.8 bits +worst: 196.8 bits +domains: 2/2 +minimum threshold margin: 16.8 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 218.8, p01 197.1, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499356 +near_one: mean 206.8, p01 196.8, worst 196.8, required 180.0, margin 16.8, n=4099, seed=10322096095657499359 +benchmark: 12,755 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.168249× + +212.8 + +196.8 + +2/2 + +12755 ns + +Both + +✓ + + +qdpp: erf is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::erf +mean: 216.3 bits +p01: 214.3 bits +worst: 214.1 bits +domains: 2/2 +minimum threshold margin: 34.1 bits +special values: Both +signed zero: yes +subnormal support: - +moderate: mean 216.4, p01 214.5, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499356 +near_one: mean 216.1, p01 214.3, worst 214.1, required 180.0, margin 34.1, n=4099, seed=10322096095657499359 +benchmark: 27,657 ns/iteration, speed vs FLTX 0.46× + +216.3 + +214.1 + +2/2 + +27657 ns + +Both + +✓ + + +TLFloat Octuple +API: tlfloat::erf +mean: 239.2 bits +p01: 237.3 bits +worst: 237.1 bits +domains: 2/2 +minimum threshold margin: 57.1 bits +special values: Inf +signed zero: no +subnormal support: - +moderate: mean 239.4, p01 237.6, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499356 +near_one: mean 239.1, p01 237.3, worst 237.1, required 180.0, margin 57.1, n=4099, seed=10322096095657499359 +benchmark: 231,077 ns/iteration, speed vs FLTX 0.06× + +239.2 + +237.1 + +2/2 + +231077 ns + +Inf + +✗ + + + + +tgamma + +fltx bl::f256 +API: bl::tgamma +mean: 209.0 bits +p01: 202.6 bits +worst: 202.5 bits +domains: 1/1 +minimum threshold margin: 22.5 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 209.0, p01 202.6, worst 202.5, required 180.0, margin 22.5, n=4099, seed=10322096095657499320 +benchmark: 10,133 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.022359× + +209.0 + +202.5 + +1/1 + +10133 ns + +Both + +- + + +qdpp: tgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::tgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499320 +benchmark: 20,492 ns/iteration, speed vs FLTX 0.49× + +215.9 + +214.0 + +1/1 + +20492 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::tgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499320 +benchmark: 91,829 ns/iteration, speed vs FLTX 0.11× + +238.9 + +237.0 + +1/1 + +91829 ns + +No + +- + + + + +lgamma + +fltx bl::f256 +API: bl::lgamma +mean: 211.9 bits +p01: 199.6 bits +worst: 199.2 bits +domains: 1/1 +minimum threshold margin: 19.2 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 211.9, p01 199.6, worst 199.2, required 180.0, margin 19.2, n=4099, seed=10322096095657499323 +benchmark: 9,141 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.927357× + +211.9 + +199.2 + +1/1 + +9141 ns + +Both + +- + + +qdpp: lgamma is unavailable + +- + +- + +- + +- + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: boost::multiprecision::lgamma +mean: 215.9 bits +p01: 214.2 bits +worst: 214.0 bits +domains: 1/1 +minimum threshold margin: 34.0 bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean 215.9, p01 214.2, worst 214.0, required 180.0, margin 34.0, n=4099, seed=10322096095657499323 +benchmark: 17,619 ns/iteration, speed vs FLTX 0.52× + +215.9 + +214.0 + +1/1 + +17619 ns + +Both + +- + + +TLFloat Octuple +API: tlfloat::lgamma +mean: 238.9 bits +p01: 237.2 bits +worst: 237.0 bits +domains: 1/1 +minimum threshold margin: 57.0 bits +special values: No +signed zero: - +subnormal support: - +moderate: mean 238.9, p01 237.2, worst 237.0, required 180.0, margin 57.0, n=4099, seed=10322096095657499323 +benchmark: 82,211 ns/iteration, speed vs FLTX 0.11× + +238.9 + +237.0 + +1/1 + +82211 ns + +No + +- + + + + +Comparisons + + + + + + + +equal + +fltx bl::f256 +API: bl::equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.667 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.746022× + += + += + +1/1 + +0.67 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.498 ns/iteration, speed vs FLTX 1.34× + += + += + +1/1 + +0.50 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.56 ns/iteration, speed vs FLTX 0.10× + += + += + +1/1 + +6.6 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator== +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 64.83 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +64.8 ns + +Both + +- + + + + +not_equal + +fltx bl::f256 +API: bl::not_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.740 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.653179× + += + += + +1/1 + +0.74 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.483 ns/iteration, speed vs FLTX 1.53× + += + += + +1/1 + +0.48 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.34 ns/iteration, speed vs FLTX 0.12× + += + += + +1/1 + +6.3 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator!= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 64.60 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +64.6 ns + +Both + +- + + + + +less + +fltx bl::f256 +API: bl::less +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.702 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.737653× + += + += + +1/1 + +0.70 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.518 ns/iteration, speed vs FLTX 1.36× + += + += + +1/1 + +0.52 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.59 ns/iteration, speed vs FLTX 0.11× + += + += + +1/1 + +6.6 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator< +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 64.67 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +64.7 ns + +Both + +- + + + + +greater + +fltx bl::f256 +API: bl::greater +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.686 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.767961× + += + += + +1/1 + +0.69 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.527 ns/iteration, speed vs FLTX 1.30× + += + += + +1/1 + +0.53 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.53 ns/iteration, speed vs FLTX 0.10× + += + += + +1/1 + +6.5 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator> +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 64.67 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +64.7 ns + +Both + +- + + + + +less_equal + +fltx bl::f256 +API: bl::less_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.712 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.719061× + += + += + +1/1 + +0.71 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.512 ns/iteration, speed vs FLTX 1.39× + += + += + +1/1 + +0.51 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.34 ns/iteration, speed vs FLTX 0.11× + += + += + +1/1 + +6.3 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator<= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 64.58 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +64.6 ns + +Both + +- + + + + +greater_equal + +fltx bl::f256 +API: bl::greater_equal +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.686 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 0.817471× + += + += + +1/1 + +0.69 ns + +Both + +- + + +qdpp qd_real +API: qdpp operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 0.560 ns/iteration, speed vs FLTX 1.22× + += + += + +1/1 + +0.56 ns + +Both + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: Boost operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 6.43 ns/iteration, speed vs FLTX 0.11× + += + += + +1/1 + +6.4 ns + +Both + +- + + +TLFloat Octuple +API: TLFloat operator>= +mean: exact bits +p01: exact bits +worst: exact bits +domains: 1/1 +minimum threshold margin: exact bits +special values: Both +signed zero: - +subnormal support: - +moderate: mean exact, p01 exact, worst exact, required 190.0, margin exact, n=8198, seed=10322096095657499356 +benchmark: 64.59 ns/iteration, speed vs FLTX 0.01× + += + += + +1/1 + +64.6 ns + +Both + +- + + + + +Random + + + + + + + +uniform_real + +fltx bl::f256 +API: bl::uniform_real +benchmark: 42.44 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 1.188032× + +- + +- + +- + +42.4 ns + +- + +- + + +qdpp qd_real +API: qdpp qdrand +benchmark: 50.43 ns/iteration, speed vs FLTX 0.84× + +- + +- + +- + +50.4 ns + +- + +- + + +mpfr64: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: uniform_real is unavailable + +- + +- + +- + +- + +- + +- + + + + +normal + +fltx bl::f256 +API: bl::normal +benchmark: 367.9 ns/iteration (no available competitor) + +- + +- + +- + +368 ns + +- + +- + + +qdpp: normal is unavailable + +- + +- + +- + +- + +- + +- + + +mpfr64: normal is unavailable + +- + +- + +- + +- + +- + +- + + +tlfloat: normal is unavailable + +- + +- + +- + +- + +- + +- + + + + +Mixed Workloads + + + + + + + +product_sum + +fltx bl::f256 +API: bl::product_sum +benchmark: 46.25 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.554162× + +- + +- + +- + +46.2 ns + +- + +- + + +qdpp qd_real +API: same expression +benchmark: 118.1 ns/iteration, speed vs FLTX 0.39× + +- + +- + +- + +118 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same expression +benchmark: 210.3 ns/iteration, speed vs FLTX 0.22× + +- + +- + +- + +210 ns + +- + +- + + +TLFloat Octuple +API: same expression +benchmark: 372.3 ns/iteration, speed vs FLTX 0.12× + +- + +- + +- + +372 ns + +- + +- + + + + +chained_arithmetic + +fltx bl::f256 +API: same workload +benchmark: 164.7 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.534897× + +- + +- + +- + +165 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 417.6 ns/iteration, speed vs FLTX 0.39× + +- + +- + +- + +418 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 466.5 ns/iteration, speed vs FLTX 0.35× + +- + +- + +- + +466 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 1,017 ns/iteration, speed vs FLTX 0.16× + +- + +- + +- + +1017 ns + +- + +- + + + + +affine_trig + +fltx bl::f256 +API: same workload +benchmark: 1,834 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.674377× + +- + +- + +- + +1834 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 5,131 ns/iteration, speed vs FLTX 0.36× + +- + +- + +- + +5131 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 3,072 ns/iteration, speed vs FLTX 0.60× + +- + +- + +- + +3072 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 13,073 ns/iteration, speed vs FLTX 0.14× + +- + +- + +- + +13073 ns + +- + +- + + + + +mandelbrot + +fltx bl::f256 +API: same workload +benchmark: 117.4 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.592883× + +- + +- + +- + +117 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 304.3 ns/iteration, speed vs FLTX 0.39× + +- + +- + +- + +304 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 537.6 ns/iteration, speed vs FLTX 0.22× + +- + +- + +- + +538 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 963.9 ns/iteration, speed vs FLTX 0.12× + +- + +- + +- + +964 ns + +- + +- + + + + +matrix_vector_4x4 + +fltx bl::f256 +API: same workload +benchmark: 528.5 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.608888× + +- + +- + +- + +529 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 1,379 ns/iteration, speed vs FLTX 0.38× + +- + +- + +- + +1379 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 1,976 ns/iteration, speed vs FLTX 0.27× + +- + +- + +- + +1976 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 4,423 ns/iteration, speed vs FLTX 0.12× + +- + +- + +- + +4423 ns + +- + +- + + + + +horner_polynomial + +fltx bl::f256 +API: same workload +benchmark: 422.6 ns/iteration, speed vs fastest competitor qdreal (qdpp qd_real): 2.063582× + +- + +- + +- + +423 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 872.0 ns/iteration, speed vs FLTX 0.48× + +- + +- + +- + +872 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 1,192 ns/iteration, speed vs FLTX 0.35× + +- + +- + +- + +1192 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 2,410 ns/iteration, speed vs FLTX 0.18× + +- + +- + +- + +2410 ns + +- + +- + + + + +newton_root + +fltx bl::f256 +API: same workload +benchmark: 236.8 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.961123× + +- + +- + +- + +237 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 631.0 ns/iteration, speed vs FLTX 0.38× + +- + +- + +- + +631 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 464.4 ns/iteration, speed vs FLTX 0.51× + +- + +- + +- + +464 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 1,334 ns/iteration, speed vs FLTX 0.18× + +- + +- + +- + +1334 ns + +- + +- + + + + +log_sum_exp + +fltx bl::f256 +API: same workload +benchmark: 9,212 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 1.402985× + +- + +- + +- + +9212 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 26,262 ns/iteration, speed vs FLTX 0.35× + +- + +- + +- + +26262 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 12,925 ns/iteration, speed vs FLTX 0.71× + +- + +- + +- + +12925 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 38,675 ns/iteration, speed vs FLTX 0.24× + +- + +- + +- + +38675 ns + +- + +- + + + + +haversine + +fltx bl::f256 +API: same workload +benchmark: 4,723 ns/iteration, speed vs fastest competitor mpfr64 (boost::multiprecision::mpfr_float_backend<64>): 2.652155× + +- + +- + +- + +4723 ns + +- + +- + + +qdpp qd_real +API: same workload +benchmark: 21,975 ns/iteration, speed vs FLTX 0.21× + +- + +- + +- + +21975 ns + +- + +- + + +boost::multiprecision::mpfr_float_backend<64> +API: same workload +benchmark: 12,525 ns/iteration, speed vs FLTX 0.38× + +- + +- + +- + +12525 ns + +- + +- + + +TLFloat Octuple +API: same workload +benchmark: 35,600 ns/iteration, speed vs FLTX 0.13× + +- + +- + +- + +35600 ns + +- + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validation/metrics/generated/performance/performance_run.json b/validation/metrics/generated/performance/performance_run.json new file mode 100644 index 0000000..e7dabc2 --- /dev/null +++ b/validation/metrics/generated/performance/performance_run.json @@ -0,0 +1,72 @@ +{ + "consumer_mode": "strict", + "layout": "full", + "output": "performance_table.svg", + "schema_version": "6", + "sources": [ + { + "architecture": "x86_64", + "compiler": "MSVC", + "file": "windows/x86_64/MSVC_f128.csv", + "platform": "windows", + "precision": "f128", + "run_id": "ff1951e869c9480085d12c8d2f11f164" + }, + { + "architecture": "x86_64", + "compiler": "ClangCL", + "file": "windows/x86_64/ClangCL_f128.csv", + "platform": "windows", + "precision": "f128", + "run_id": "1bd8465fefb349c8bd408bdef2fbe2ea" + }, + { + "architecture": "x86_64", + "compiler": "MinGW", + "file": "windows/x86_64/MinGW_f128.csv", + "platform": "windows", + "precision": "f128", + "run_id": "1bc36f9be0894bcfb934a2e01311a61e" + }, + { + "architecture": "wasm32", + "compiler": "Emscripten", + "file": "wasm32/wasm32/Emscripten_f128.csv", + "platform": "wasm32", + "precision": "f128", + "run_id": "07cb9aa0af7241f981735eab48f97723" + }, + { + "architecture": "x86_64", + "compiler": "MSVC", + "file": "windows/x86_64/MSVC_f256.csv", + "platform": "windows", + "precision": "f256", + "run_id": "ff1951e869c9480085d12c8d2f11f164" + }, + { + "architecture": "x86_64", + "compiler": "ClangCL", + "file": "windows/x86_64/ClangCL_f256.csv", + "platform": "windows", + "precision": "f256", + "run_id": "1bd8465fefb349c8bd408bdef2fbe2ea" + }, + { + "architecture": "x86_64", + "compiler": "MinGW", + "file": "windows/x86_64/MinGW_f256.csv", + "platform": "windows", + "precision": "f256", + "run_id": "1bc36f9be0894bcfb934a2e01311a61e" + }, + { + "architecture": "wasm32", + "compiler": "Emscripten", + "file": "wasm32/wasm32/Emscripten_f256.csv", + "platform": "wasm32", + "precision": "f256", + "run_id": "07cb9aa0af7241f981735eab48f97723" + } + ] +} diff --git a/validation/metrics/generated/performance/performance_run_compact.json b/validation/metrics/generated/performance/performance_run_compact.json new file mode 100644 index 0000000..7d4c139 --- /dev/null +++ b/validation/metrics/generated/performance/performance_run_compact.json @@ -0,0 +1,72 @@ +{ + "consumer_mode": "strict", + "layout": "compact", + "output": "performance_table_compact.svg", + "schema_version": "6", + "sources": [ + { + "architecture": "x86_64", + "compiler": "MSVC", + "file": "windows/x86_64/MSVC_f128.csv", + "platform": "windows", + "precision": "f128", + "run_id": "ff1951e869c9480085d12c8d2f11f164" + }, + { + "architecture": "x86_64", + "compiler": "ClangCL", + "file": "windows/x86_64/ClangCL_f128.csv", + "platform": "windows", + "precision": "f128", + "run_id": "1bd8465fefb349c8bd408bdef2fbe2ea" + }, + { + "architecture": "x86_64", + "compiler": "MinGW", + "file": "windows/x86_64/MinGW_f128.csv", + "platform": "windows", + "precision": "f128", + "run_id": "1bc36f9be0894bcfb934a2e01311a61e" + }, + { + "architecture": "wasm32", + "compiler": "Emscripten", + "file": "wasm32/wasm32/Emscripten_f128.csv", + "platform": "wasm32", + "precision": "f128", + "run_id": "07cb9aa0af7241f981735eab48f97723" + }, + { + "architecture": "x86_64", + "compiler": "MSVC", + "file": "windows/x86_64/MSVC_f256.csv", + "platform": "windows", + "precision": "f256", + "run_id": "ff1951e869c9480085d12c8d2f11f164" + }, + { + "architecture": "x86_64", + "compiler": "ClangCL", + "file": "windows/x86_64/ClangCL_f256.csv", + "platform": "windows", + "precision": "f256", + "run_id": "1bd8465fefb349c8bd408bdef2fbe2ea" + }, + { + "architecture": "x86_64", + "compiler": "MinGW", + "file": "windows/x86_64/MinGW_f256.csv", + "platform": "windows", + "precision": "f256", + "run_id": "1bc36f9be0894bcfb934a2e01311a61e" + }, + { + "architecture": "wasm32", + "compiler": "Emscripten", + "file": "wasm32/wasm32/Emscripten_f256.csv", + "platform": "wasm32", + "precision": "f256", + "run_id": "07cb9aa0af7241f981735eab48f97723" + } + ] +} diff --git a/validation/metrics/generated/performance/performance_run_fastmath.json b/validation/metrics/generated/performance/performance_run_fastmath.json new file mode 100644 index 0000000..521c11a --- /dev/null +++ b/validation/metrics/generated/performance/performance_run_fastmath.json @@ -0,0 +1,72 @@ +{ + "consumer_mode": "fastmath", + "layout": "full", + "output": "performance_table_fastmath.svg", + "schema_version": "6", + "sources": [ + { + "architecture": "x86_64", + "compiler": "MSVC", + "file": "windows/x86_64/MSVC_f128_fastmath.csv", + "platform": "windows", + "precision": "f128", + "run_id": "38734516d65c4154a947aaeb3ae92c72" + }, + { + "architecture": "x86_64", + "compiler": "ClangCL", + "file": "windows/x86_64/ClangCL_f128_fastmath.csv", + "platform": "windows", + "precision": "f128", + "run_id": "081f2f75d252445da1de5098f50b7f37" + }, + { + "architecture": "x86_64", + "compiler": "MinGW", + "file": "windows/x86_64/MinGW_f128_fastmath.csv", + "platform": "windows", + "precision": "f128", + "run_id": "1f47748c24e4435f9d017479a2e54bbd" + }, + { + "architecture": "wasm32", + "compiler": "Emscripten", + "file": "wasm32/wasm32/Emscripten_f128_fastmath.csv", + "platform": "wasm32", + "precision": "f128", + "run_id": "680cbf9c13134cc08ab2b5bd2bd1191c" + }, + { + "architecture": "x86_64", + "compiler": "MSVC", + "file": "windows/x86_64/MSVC_f256_fastmath.csv", + "platform": "windows", + "precision": "f256", + "run_id": "38734516d65c4154a947aaeb3ae92c72" + }, + { + "architecture": "x86_64", + "compiler": "ClangCL", + "file": "windows/x86_64/ClangCL_f256_fastmath.csv", + "platform": "windows", + "precision": "f256", + "run_id": "081f2f75d252445da1de5098f50b7f37" + }, + { + "architecture": "x86_64", + "compiler": "MinGW", + "file": "windows/x86_64/MinGW_f256_fastmath.csv", + "platform": "windows", + "precision": "f256", + "run_id": "1f47748c24e4435f9d017479a2e54bbd" + }, + { + "architecture": "wasm32", + "compiler": "Emscripten", + "file": "wasm32/wasm32/Emscripten_f256_fastmath.csv", + "platform": "wasm32", + "precision": "f256", + "run_id": "680cbf9c13134cc08ab2b5bd2bd1191c" + } + ] +} diff --git a/validation/metrics/generated/performance/performance_run_fastmath_compact.json b/validation/metrics/generated/performance/performance_run_fastmath_compact.json new file mode 100644 index 0000000..2ec7145 --- /dev/null +++ b/validation/metrics/generated/performance/performance_run_fastmath_compact.json @@ -0,0 +1,72 @@ +{ + "consumer_mode": "fastmath", + "layout": "compact", + "output": "performance_table_fastmath_compact.svg", + "schema_version": "6", + "sources": [ + { + "architecture": "x86_64", + "compiler": "MSVC", + "file": "windows/x86_64/MSVC_f128_fastmath.csv", + "platform": "windows", + "precision": "f128", + "run_id": "38734516d65c4154a947aaeb3ae92c72" + }, + { + "architecture": "x86_64", + "compiler": "ClangCL", + "file": "windows/x86_64/ClangCL_f128_fastmath.csv", + "platform": "windows", + "precision": "f128", + "run_id": "081f2f75d252445da1de5098f50b7f37" + }, + { + "architecture": "x86_64", + "compiler": "MinGW", + "file": "windows/x86_64/MinGW_f128_fastmath.csv", + "platform": "windows", + "precision": "f128", + "run_id": "1f47748c24e4435f9d017479a2e54bbd" + }, + { + "architecture": "wasm32", + "compiler": "Emscripten", + "file": "wasm32/wasm32/Emscripten_f128_fastmath.csv", + "platform": "wasm32", + "precision": "f128", + "run_id": "680cbf9c13134cc08ab2b5bd2bd1191c" + }, + { + "architecture": "x86_64", + "compiler": "MSVC", + "file": "windows/x86_64/MSVC_f256_fastmath.csv", + "platform": "windows", + "precision": "f256", + "run_id": "38734516d65c4154a947aaeb3ae92c72" + }, + { + "architecture": "x86_64", + "compiler": "ClangCL", + "file": "windows/x86_64/ClangCL_f256_fastmath.csv", + "platform": "windows", + "precision": "f256", + "run_id": "081f2f75d252445da1de5098f50b7f37" + }, + { + "architecture": "x86_64", + "compiler": "MinGW", + "file": "windows/x86_64/MinGW_f256_fastmath.csv", + "platform": "windows", + "precision": "f256", + "run_id": "1f47748c24e4435f9d017479a2e54bbd" + }, + { + "architecture": "wasm32", + "compiler": "Emscripten", + "file": "wasm32/wasm32/Emscripten_f256_fastmath.csv", + "platform": "wasm32", + "precision": "f256", + "run_id": "680cbf9c13134cc08ab2b5bd2bd1191c" + } + ] +} diff --git a/validation/metrics/generated/performance/performance_table.svg b/validation/metrics/generated/performance/performance_table.svg new file mode 100644 index 0000000..976d150 --- /dev/null +++ b/validation/metrics/generated/performance/performance_table.svg @@ -0,0 +1,5640 @@ + +fltx performance +Columns identify the target platform and build toolchain. FLTX time per iteration; the second line shows FLTX speed versus the fastest available competitor for each target. + + +fltx performance +Columns identify the target platform and build toolchain. FLTX time per iteration; the second line shows FLTX speed versus the fastest available competitor for each target. +cppdd += +boost::multiprecision::cpp_double_double +ddreal += +qdpp dd_real +tlquad += +TLFloat Quad +mpfr64 += +boost::multiprecision::mpfr_float_backend<64> +qdreal += +qdpp qd_real +tloct += +TLFloat Octuple + +Function + +bl::f128 + +bl::f256 + +Windows + +WebAssembly + +Windows + +WebAssembly + +x64 + +wasm32 + +x64 + +wasm32 + + +MSVC + + + +Clang +clang-cl + + + +GCC +MinGW-w64 + + + +Clang +Emscripten + + + +MSVC + + + +Clang +clang-cl + + + +GCC +MinGW-w64 + + + +Clang +Emscripten + + + +Arithmetic + +add + +Windows / x64 / MSVC; bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 1.91079 ns +Fastest competitor: qdpp dd_real (qdpp operator+): 1.85258 ns; FLTX speed vs fastest competitor: 0.969538× + +1.91ns +0.97× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 1.87899 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator+): 2.23647 ns; FLTX speed vs fastest competitor: 1.19025× + +1.88ns +1.19× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 1.80875 ns +Fastest competitor: qdpp dd_real (qdpp operator+): 0.925775 ns; FLTX speed vs fastest competitor: 0.511831× + +1.81ns +0.51× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 1.81625 ns +Fastest competitor: qdpp dd_real (qdpp operator+): 0.926275 ns; FLTX speed vs fastest competitor: 0.509992× + +1.82ns +0.51× ddreal + + +Windows / x64 / MSVC; bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 10.682 ns +Fastest competitor: qdpp qd_real (qdpp operator+): 23.446 ns; FLTX speed vs fastest competitor: 2.19491× + +10.7ns +2.19× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 9.49761 ns +Fastest competitor: TLFloat Octuple (TLFloat operator+): 35.8358 ns; FLTX speed vs fastest competitor: 3.77314× + +9.50ns +3.77× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 10.5169 ns +Fastest competitor: qdpp qd_real (qdpp operator+): 21.9128 ns; FLTX speed vs fastest competitor: 2.08359× + +10.5ns +2.08× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 10.1556 ns +Fastest competitor: qdpp qd_real (qdpp operator+): 22.8738 ns; FLTX speed vs fastest competitor: 2.25234× + +10.2ns +2.25× qdreal + + +subtract + +Windows / x64 / MSVC; bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 2.14333 ns +Fastest competitor: qdpp dd_real (qdpp operator-): 1.86714 ns; FLTX speed vs fastest competitor: 0.871143× + +2.14ns +0.87× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 1.87166 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator-): 2.27272 ns; FLTX speed vs fastest competitor: 1.21428× + +1.87ns +1.21× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 1.78604 ns +Fastest competitor: qdpp dd_real (qdpp operator-): 0.928556 ns; FLTX speed vs fastest competitor: 0.519896× + +1.79ns +0.52× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 1.8082 ns +Fastest competitor: qdpp dd_real (qdpp operator-): 0.91877 ns; FLTX speed vs fastest competitor: 0.508112× + +1.81ns +0.51× ddreal + + +Windows / x64 / MSVC; bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 10.6649 ns +Fastest competitor: qdpp qd_real (qdpp operator-): 25.2081 ns; FLTX speed vs fastest competitor: 2.36366× + +10.7ns +2.36× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 18.8715 ns +Fastest competitor: TLFloat Octuple (TLFloat operator-): 35.658 ns; FLTX speed vs fastest competitor: 1.88951× + +18.9ns +1.89× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 10.4109 ns +Fastest competitor: qdpp qd_real (qdpp operator-): 22.1785 ns; FLTX speed vs fastest competitor: 2.13031× + +10.4ns +2.13× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 10.0702 ns +Fastest competitor: qdpp qd_real (qdpp operator-): 23.7429 ns; FLTX speed vs fastest competitor: 2.35773× + +10.1ns +2.36× qdreal + + +multiply + +Windows / x64 / MSVC; bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 1.62518 ns +Fastest competitor: qdpp dd_real (qdpp operator*): 0.77656 ns; FLTX speed vs fastest competitor: 0.477831× + +1.63ns +0.48× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 1.19705 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator*): 2.31305 ns; FLTX speed vs fastest competitor: 1.9323× + +1.20ns +1.93× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 1.62417 ns +Fastest competitor: qdpp dd_real (qdpp operator*): 1.73313 ns; FLTX speed vs fastest competitor: 1.06709× + +1.62ns +1.07× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 1.60567 ns +Fastest competitor: qdpp dd_real (qdpp operator*): 1.75055 ns; FLTX speed vs fastest competitor: 1.09023× + +1.61ns +1.09× ddreal + + +Windows / x64 / MSVC; bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 18.8149 ns +Fastest competitor: qdpp qd_real (qdpp operator*): 19.5559 ns; FLTX speed vs fastest competitor: 1.03938× + +18.8ns +1.04× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 34.8769 ns +Fastest competitor: TLFloat Octuple (TLFloat operator*): 40.4065 ns; FLTX speed vs fastest competitor: 1.15855× + +34.9ns +1.16× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 23.1562 ns +Fastest competitor: qdpp qd_real (qdpp operator*): 36.888 ns; FLTX speed vs fastest competitor: 1.593× + +23.2ns +1.59× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 24.8619 ns +Fastest competitor: qdpp qd_real (qdpp operator*): 31.2134 ns; FLTX speed vs fastest competitor: 1.25547× + +24.9ns +1.26× qdreal + + +divide + +Windows / x64 / MSVC; bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 1.67512 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator/): 6.34251 ns; FLTX speed vs fastest competitor: 3.78629× + +1.68ns +3.79× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 1.70647 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator/): 5.34566 ns; FLTX speed vs fastest competitor: 3.13258× + +1.71ns +3.13× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 2.30438 ns +Fastest competitor: qdpp dd_real (qdpp operator/): 13.0605 ns; FLTX speed vs fastest competitor: 5.6677× + +2.30ns +5.67× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 2.52922 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator/): 5.82351 ns; FLTX speed vs fastest competitor: 2.3025× + +2.53ns +2.30× cppdd + + +Windows / x64 / MSVC; bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 80.7292 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::operator/): 118.088 ns; FLTX speed vs fastest competitor: 1.46277× + +80.7ns +1.46× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 96.0929 ns +Fastest competitor: TLFloat Octuple (TLFloat operator/): 149.171 ns; FLTX speed vs fastest competitor: 1.55236× + +96.1ns +1.55× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 107.009 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::operator/): 111.942 ns; FLTX speed vs fastest competitor: 1.0461× + +107ns +1.05× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 91.4551 ns +Fastest competitor: qdpp qd_real (qdpp operator/): 234.033 ns; FLTX speed vs fastest competitor: 2.559× + +91.5ns +2.56× qdreal + + + +IO + +to_string + +Windows / x64 / MSVC; bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 248.651 ns +Fastest competitor: qdpp dd_real (qdpp to_string): 414.195 ns; FLTX speed vs fastest competitor: 1.66576× + +249ns +1.67× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 188.426 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost number::str): 658.234 ns; FLTX speed vs fastest competitor: 3.49333× + +188ns +3.49× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 250.354 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost number::str): 425.88 ns; FLTX speed vs fastest competitor: 1.70111× + +250ns +1.70× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 293.716 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost number::str): 1160.33 ns; FLTX speed vs fastest competitor: 3.95052× + +294ns +3.95× cppdd + + +Windows / x64 / MSVC; bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 346.795 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost number::str): 489.158 ns; FLTX speed vs fastest competitor: 1.41051× + +347ns +1.41× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 290.592 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost number::str): 462.454 ns; FLTX speed vs fastest competitor: 1.59142× + +291ns +1.59× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 347.367 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost number::str): 513.613 ns; FLTX speed vs fastest competitor: 1.47859× + +347ns +1.48× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 452.208 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost number::str): 1060.81 ns; FLTX speed vs fastest competitor: 2.34584× + +452ns +2.35× mpfr64 + + +to_chars + +Windows / x64 / MSVC; bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 207.456 ns +Fastest competitor: qdpp dd_real (qdpp write): 414.475 ns; FLTX speed vs fastest competitor: 1.99789× + +207ns +2.00× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 157.448 ns +No competitor benchmark is available. + +157ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 202.26 ns +Fastest competitor: qdpp dd_real (qdpp write): 477.092 ns; FLTX speed vs fastest competitor: 2.35881× + +202ns +2.36× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 239.071 ns +Fastest competitor: qdpp dd_real (qdpp write): 1299.16 ns; FLTX speed vs fastest competitor: 5.43421× + +239ns +5.43× ddreal + + +Windows / x64 / MSVC; bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 316.133 ns +Fastest competitor: qdpp qd_real (qdpp write): 3909.2 ns; FLTX speed vs fastest competitor: 12.3657× + +316ns +12.37× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 253.748 ns +No competitor benchmark is available. + +254ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 308.155 ns +Fastest competitor: qdpp qd_real (qdpp write): 4158.92 ns; FLTX speed vs fastest competitor: 13.4962× + +308ns +13.50× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 398.892 ns +Fastest competitor: qdpp qd_real (qdpp write): 4990.36 ns; FLTX speed vs fastest competitor: 12.5106× + +399ns +12.51× qdreal + + +parse + +Windows / x64 / MSVC; bl::f128; io / parse +fltx bl::f128 (bl::parse): 226.107 ns +Fastest competitor: qdpp dd_real (qdpp read): 191.102 ns; FLTX speed vs fastest competitor: 0.845185× + +226ns +0.85× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; io / parse +fltx bl::f128 (bl::parse): 203.515 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost string constructor): 765.699 ns; FLTX speed vs fastest competitor: 3.76236× + +204ns +3.76× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; io / parse +fltx bl::f128 (bl::parse): 211.286 ns +Fastest competitor: qdpp dd_real (qdpp read): 258.245 ns; FLTX speed vs fastest competitor: 1.22225× + +211ns +1.22× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; io / parse +fltx bl::f128 (bl::parse): 256.149 ns +Fastest competitor: qdpp dd_real (qdpp read): 254.119 ns; FLTX speed vs fastest competitor: 0.992074× + +256ns +0.99× ddreal + + +Windows / x64 / MSVC; bl::f256; io / parse +fltx bl::f256 (bl::parse): 415.457 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost string constructor): 371.127 ns; FLTX speed vs fastest competitor: 0.893298× + +415ns +0.89× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; io / parse +fltx bl::f256 (bl::parse): 347.723 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost string constructor): 355.111 ns; FLTX speed vs fastest competitor: 1.02125× + +348ns +1.02× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; io / parse +fltx bl::f256 (bl::parse): 386.741 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost string constructor): 319.043 ns; FLTX speed vs fastest competitor: 0.824953× + +387ns +0.82× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; io / parse +fltx bl::f256 (bl::parse): 458.317 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost string constructor): 611.369 ns; FLTX speed vs fastest competitor: 1.33394× + +458ns +1.33× mpfr64 + + + +Rounding + +floor + +Windows / x64 / MSVC; bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 1.37916 ns +Fastest competitor: qdpp dd_real (qdpp floor): 1.3169 ns; FLTX speed vs fastest competitor: 0.954857× + +1.38ns +0.95× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 1.35662 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::floor): 1.45329 ns; FLTX speed vs fastest competitor: 1.07126× + +1.36ns +1.07× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 1.07751 ns +Fastest competitor: qdpp dd_real (qdpp floor): 0.969734 ns; FLTX speed vs fastest competitor: 0.899977× + +1.08ns +0.90× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 0.815484 ns +Fastest competitor: qdpp dd_real (qdpp floor): 0.369205 ns; FLTX speed vs fastest competitor: 0.452743× + +0.815ns +0.45× ddreal + + +Windows / x64 / MSVC; bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 4.89937 ns +Fastest competitor: qdpp qd_real (qdpp floor): 2.20772 ns; FLTX speed vs fastest competitor: 0.450613× + +4.90ns +0.45× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 1.50249 ns +Fastest competitor: TLFloat Octuple (tlfloat::floor): 6.13316 ns; FLTX speed vs fastest competitor: 4.08199× + +1.50ns +4.08× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 1.3965 ns +Fastest competitor: qdpp qd_real (qdpp floor): 1.32438 ns; FLTX speed vs fastest competitor: 0.948358× + +1.40ns +0.95× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 0.990982 ns +Fastest competitor: qdpp qd_real (qdpp floor): 0.987674 ns; FLTX speed vs fastest competitor: 0.996662× + +0.991ns +1.00× qdreal + + +ceil + +Windows / x64 / MSVC; bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 1.94197 ns +Fastest competitor: qdpp dd_real (qdpp ceil): 1.3587 ns; FLTX speed vs fastest competitor: 0.699649× + +1.94ns +0.70× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 1.84257 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::ceil): 2.14701 ns; FLTX speed vs fastest competitor: 1.16523× + +1.84ns +1.17× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 1.69571 ns +Fastest competitor: qdpp dd_real (qdpp ceil): 0.924828 ns; FLTX speed vs fastest competitor: 0.545392× + +1.70ns +0.55× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 1.50478 ns +Fastest competitor: qdpp dd_real (qdpp ceil): 0.367785 ns; FLTX speed vs fastest competitor: 0.244411× + +1.50ns +0.24× ddreal + + +Windows / x64 / MSVC; bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 4.8834 ns +Fastest competitor: qdpp qd_real (qdpp ceil): 2.24042 ns; FLTX speed vs fastest competitor: 0.458782× + +4.88ns +0.46× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 1.50339 ns +Fastest competitor: TLFloat Octuple (tlfloat::ceil): 5.66597 ns; FLTX speed vs fastest competitor: 3.76879× + +1.50ns +3.77× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 1.41105 ns +Fastest competitor: qdpp qd_real (qdpp ceil): 1.32584 ns; FLTX speed vs fastest competitor: 0.939612× + +1.41ns +0.94× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 0.993219 ns +Fastest competitor: qdpp qd_real (qdpp ceil): 0.985926 ns; FLTX speed vs fastest competitor: 0.992657× + +0.993ns +0.99× qdreal + + +trunc + +Windows / x64 / MSVC; bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 3.46889 ns +Fastest competitor: qdpp dd_real (qdpp aint): 4.69882 ns; FLTX speed vs fastest competitor: 1.35456× + +3.47ns +1.35× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 2.10569 ns +Fastest competitor: TLFloat Quad (tlfloat::trunc): 2.42006 ns; FLTX speed vs fastest competitor: 1.1493× + +2.11ns +1.15× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 2.71448 ns +Fastest competitor: qdpp dd_real (qdpp aint): 3.50513 ns; FLTX speed vs fastest competitor: 1.29127× + +2.71ns +1.29× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 3.16991 ns +Fastest competitor: qdpp dd_real (qdpp aint): 0.99691 ns; FLTX speed vs fastest competitor: 0.314492× + +3.17ns +0.31× ddreal + + +Windows / x64 / MSVC; bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 6.77494 ns +Fastest competitor: qdpp qd_real (qdpp aint): 5.95564 ns; FLTX speed vs fastest competitor: 0.879069× + +6.77ns +0.88× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 4.19161 ns +Fastest competitor: TLFloat Octuple (tlfloat::trunc): 3.1163 ns; FLTX speed vs fastest competitor: 0.743462× + +4.19ns +0.74× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 2.7908 ns +Fastest competitor: qdpp qd_real (qdpp aint): 2.25171 ns; FLTX speed vs fastest competitor: 0.806833× + +2.79ns +0.81× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 2.89863 ns +Fastest competitor: qdpp qd_real (qdpp aint): 2.54546 ns; FLTX speed vs fastest competitor: 0.878158× + +2.90ns +0.88× qdreal + + +round + +Windows / x64 / MSVC; bl::f128; rounding / round +fltx bl::f128 (bl::round): 10.3034 ns +Fastest competitor: qdpp dd_real (qdpp round): 3.70324 ns; FLTX speed vs fastest competitor: 0.359419× + +10.3ns +0.36× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / round +fltx bl::f128 (bl::round): 7.46859 ns +Fastest competitor: TLFloat Quad (tlfloat::round): 3.89998 ns; FLTX speed vs fastest competitor: 0.522184× + +7.47ns +0.52× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / round +fltx bl::f128 (bl::round): 10.057 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::round): 8.8299 ns; FLTX speed vs fastest competitor: 0.877987× + +10.1ns +0.88× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / round +fltx bl::f128 (bl::round): 8.88927 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::round): 6.02385 ns; FLTX speed vs fastest competitor: 0.677654× + +8.89ns +0.68× cppdd + + +Windows / x64 / MSVC; bl::f256; rounding / round +fltx bl::f256 (bl::round): 12.8936 ns +Fastest competitor: qdpp qd_real (qdpp round): 5.57858 ns; FLTX speed vs fastest competitor: 0.432661× + +12.9ns +0.43× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / round +fltx bl::f256 (bl::round): 8.86299 ns +Fastest competitor: TLFloat Octuple (tlfloat::round): 6.85535 ns; FLTX speed vs fastest competitor: 0.773481× + +8.86ns +0.77× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / round +fltx bl::f256 (bl::round): 10.2056 ns +Fastest competitor: qdpp qd_real (qdpp round): 11.54 ns; FLTX speed vs fastest competitor: 1.13075× + +10.2ns +1.13× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / round +fltx bl::f256 (bl::round): 12.1799 ns +Fastest competitor: qdpp qd_real (qdpp round): 8.58679 ns; FLTX speed vs fastest competitor: 0.704998× + +12.2ns +0.70× qdreal + + +roundeven + +Windows / x64 / MSVC; bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 9.58426 ns +Fastest competitor: TLFloat Quad (tlfloat::rint): 64.6002 ns; FLTX speed vs fastest competitor: 6.74024× + +9.58ns +6.74× tlquad + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 9.69684 ns +Fastest competitor: TLFloat Quad (tlfloat::rint): 4.10474 ns; FLTX speed vs fastest competitor: 0.423307× + +9.70ns +0.42× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 7.79609 ns +Fastest competitor: TLFloat Quad (tlfloat::rint): 10.3311 ns; FLTX speed vs fastest competitor: 1.32516× + +7.80ns +1.33× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 10.0275 ns +Fastest competitor: TLFloat Quad (tlfloat::rint): 8.38234 ns; FLTX speed vs fastest competitor: 0.835938× + +10.0ns +0.84× tlquad + + +Windows / x64 / MSVC; bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 9.1154 ns +Fastest competitor: TLFloat Octuple (tlfloat::rint): 199.524 ns; FLTX speed vs fastest competitor: 21.8887× + +9.12ns +21.89× tloct + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 8.30821 ns +Fastest competitor: TLFloat Octuple (tlfloat::rint): 12.6358 ns; FLTX speed vs fastest competitor: 1.52088× + +8.31ns +1.52× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 9.1184 ns +Fastest competitor: TLFloat Octuple (tlfloat::rint): 64.4318 ns; FLTX speed vs fastest competitor: 7.06612× + +9.12ns +7.07× tloct + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 8.06417 ns +Fastest competitor: TLFloat Octuple (tlfloat::rint): 18.2826 ns; FLTX speed vs fastest competitor: 2.26714× + +8.06ns +2.27× tloct + + +lround + +Windows / x64 / MSVC; bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 4.35415 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lround): 29.282 ns; FLTX speed vs fastest competitor: 6.72509× + +4.35ns +6.73× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 4.24203 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lround): 10.1122 ns; FLTX speed vs fastest competitor: 2.38381× + +4.24ns +2.38× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 3.39413 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lround): 19.3465 ns; FLTX speed vs fastest competitor: 5.69998× + +3.39ns +5.70× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 6.69177 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lround): 10.7527 ns; FLTX speed vs fastest competitor: 1.60685× + +6.69ns +1.61× cppdd + + +Windows / x64 / MSVC; bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 7.20756 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lround): 124.829 ns; FLTX speed vs fastest competitor: 17.3192× + +7.21ns +17.32× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 6.65399 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lround): 121.459 ns; FLTX speed vs fastest competitor: 18.2535× + +6.65ns +18.25× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 5.08619 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lround): 164.38 ns; FLTX speed vs fastest competitor: 32.3189× + +5.09ns +32.32× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 6.62969 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lround): 191.093 ns; FLTX speed vs fastest competitor: 28.8238× + +6.63ns +28.82× mpfr64 + + +llround + +Windows / x64 / MSVC; bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 4.36912 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::llround): 444.263 ns; FLTX speed vs fastest competitor: 101.682× + +4.37ns +101.68× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 3.97495 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::llround): 384.928 ns; FLTX speed vs fastest competitor: 96.8386× + +3.97ns +96.84× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 3.22594 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::llround): 160.266 ns; FLTX speed vs fastest competitor: 49.6804× + +3.23ns +49.68× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 6.05281 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::llround): 622.516 ns; FLTX speed vs fastest competitor: 102.847× + +6.05ns +102.85× cppdd + + +Windows / x64 / MSVC; bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 6.77522 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::llround): 216.196 ns; FLTX speed vs fastest competitor: 31.9099× + +6.78ns +31.91× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 6.32177 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::llround): 210.54 ns; FLTX speed vs fastest competitor: 33.304× + +6.32ns +33.30× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 4.80782 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::llround): 261.572 ns; FLTX speed vs fastest competitor: 54.4056× + +4.81ns +54.41× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 6.50047 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::llround): 320.553 ns; FLTX speed vs fastest competitor: 49.3123× + +6.50ns +49.31× mpfr64 + + +round_decimals + +Windows / x64 / MSVC; bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 83.5909 ns +No competitor benchmark is available. + +83.6ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 78.6011 ns +No competitor benchmark is available. + +78.6ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 79.3607 ns +No competitor benchmark is available. + +79.4ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 93.1183 ns +No competitor benchmark is available. + +93.1ns + + +Windows / x64 / MSVC; bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 129.347 ns +No competitor benchmark is available. + +129ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 117.815 ns +No competitor benchmark is available. + +118ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 127.53 ns +No competitor benchmark is available. + +128ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 145.747 ns +No competitor benchmark is available. + +146ns + + +round_significant + +Windows / x64 / MSVC; bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 129.05 ns +No competitor benchmark is available. + +129ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 110.71 ns +No competitor benchmark is available. + +111ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 113.732 ns +No competitor benchmark is available. + +114ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 144.794 ns +No competitor benchmark is available. + +145ns + + +Windows / x64 / MSVC; bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 194.192 ns +No competitor benchmark is available. + +194ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 161.127 ns +No competitor benchmark is available. + +161ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 163.259 ns +No competitor benchmark is available. + +163ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 207.988 ns +No competitor benchmark is available. + +208ns + + + +Remainders + +fmod + +Windows / x64 / MSVC; bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 17.9201 ns +Fastest competitor: qdpp dd_real (qdpp fmod): 18.9451 ns; FLTX speed vs fastest competitor: 1.0572× + +17.9ns +1.06× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 18.8037 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmod): 36.4585 ns; FLTX speed vs fastest competitor: 1.9389× + +18.8ns +1.94× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 17.7275 ns +Fastest competitor: qdpp dd_real (qdpp fmod): 23.9968 ns; FLTX speed vs fastest competitor: 1.35365× + +17.7ns +1.35× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 20.5907 ns +Fastest competitor: qdpp dd_real (qdpp fmod): 29.541 ns; FLTX speed vs fastest competitor: 1.43468× + +20.6ns +1.43× ddreal + + +Windows / x64 / MSVC; bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 67.9641 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fmod): 196.748 ns; FLTX speed vs fastest competitor: 2.89488× + +68.0ns +2.89× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 69.1068 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fmod): 192.213 ns; FLTX speed vs fastest competitor: 2.78139× + +69.1ns +2.78× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 69.5695 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fmod): 290.109 ns; FLTX speed vs fastest competitor: 4.17006× + +69.6ns +4.17× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 77.9743 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fmod): 219.011 ns; FLTX speed vs fastest competitor: 2.80876× + +78.0ns +2.81× mpfr64 + + +remainder + +Windows / x64 / MSVC; bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 21.7801 ns +Fastest competitor: qdpp dd_real (qdpp drem): 19.3133 ns; FLTX speed vs fastest competitor: 0.88674× + +21.8ns +0.89× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 24.2622 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::remainder): 41.4982 ns; FLTX speed vs fastest competitor: 1.71041× + +24.3ns +1.71× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 19.847 ns +Fastest competitor: qdpp dd_real (qdpp drem): 26.2902 ns; FLTX speed vs fastest competitor: 1.32464× + +19.8ns +1.32× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 22.8242 ns +Fastest competitor: qdpp dd_real (qdpp drem): 26.5187 ns; FLTX speed vs fastest competitor: 1.16187× + +22.8ns +1.16× ddreal + + +Windows / x64 / MSVC; bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 98.2699 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::remainder): 235.955 ns; FLTX speed vs fastest competitor: 2.4011× + +98.3ns +2.40× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 100.492 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::remainder): 234.1 ns; FLTX speed vs fastest competitor: 2.32955× + +100ns +2.33× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 99.1109 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::remainder): 330.367 ns; FLTX speed vs fastest competitor: 3.33331× + +99.1ns +3.33× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 105.609 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::remainder): 251.396 ns; FLTX speed vs fastest competitor: 2.38043× + +106ns +2.38× mpfr64 + + +remquo + +Windows / x64 / MSVC; bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 21.1064 ns +Fastest competitor: qdpp dd_real (qdpp divrem): 19.8318 ns; FLTX speed vs fastest competitor: 0.93961× + +21.1ns +0.94× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 23.5961 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::remquo): 41.3991 ns; FLTX speed vs fastest competitor: 1.75449× + +23.6ns +1.75× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 20.014 ns +Fastest competitor: qdpp dd_real (qdpp divrem): 26.3925 ns; FLTX speed vs fastest competitor: 1.3187× + +20.0ns +1.32× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 22.8127 ns +Fastest competitor: qdpp dd_real (qdpp divrem): 27.0835 ns; FLTX speed vs fastest competitor: 1.18722× + +22.8ns +1.19× ddreal + + +Windows / x64 / MSVC; bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 97.3067 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::remquo): 264.58 ns; FLTX speed vs fastest competitor: 2.71903× + +97.3ns +2.72× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 100.222 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::remquo): 266.07 ns; FLTX speed vs fastest competitor: 2.65482× + +100ns +2.65× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 99.9921 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::remquo): 367.607 ns; FLTX speed vs fastest competitor: 3.67636× + +100.0ns +3.68× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 104.359 ns +Fastest competitor: qdpp qd_real (qdpp divrem): 322.93 ns; FLTX speed vs fastest competitor: 3.09442× + +104ns +3.09× qdreal + + + +Float Utils + +abs + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 3.49038 ns +Fastest competitor: TLFloat Quad (tlfloat::abs): 2.80707 ns; FLTX speed vs fastest competitor: 0.804229× + +3.49ns +0.80× tlquad + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 3.0568 ns +Fastest competitor: TLFloat Quad (tlfloat::abs): 0.411061 ns; FLTX speed vs fastest competitor: 0.134474× + +3.06ns +0.13× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 2.86146 ns +Fastest competitor: TLFloat Quad (tlfloat::abs): 2.5541 ns; FLTX speed vs fastest competitor: 0.892586× + +2.86ns +0.89× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 0.809662 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::abs): 1.22884 ns; FLTX speed vs fastest competitor: 1.51772× + +0.810ns +1.52× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 2.64271 ns +Fastest competitor: qdpp qd_real (qdpp abs): 1.96985 ns; FLTX speed vs fastest competitor: 0.745391× + +2.64ns +0.75× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 2.09395 ns +Fastest competitor: TLFloat Octuple (tlfloat::abs): 0.99307 ns; FLTX speed vs fastest competitor: 0.474256× + +2.09ns +0.47× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 1.58214 ns +Fastest competitor: qdpp qd_real (qdpp abs): 1.41304 ns; FLTX speed vs fastest competitor: 0.893118× + +1.58ns +0.89× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 3.21138 ns +Fastest competitor: qdpp qd_real (qdpp abs): 3.23644 ns; FLTX speed vs fastest competitor: 1.0078× + +3.21ns +1.01× qdreal + + +fabs + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 3.5051 ns +Fastest competitor: TLFloat Quad (tlfloat::abs): 2.78878 ns; FLTX speed vs fastest competitor: 0.795636× + +3.51ns +0.80× tlquad + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 3.08984 ns +Fastest competitor: TLFloat Quad (tlfloat::abs): 0.41078 ns; FLTX speed vs fastest competitor: 0.132945× + +3.09ns +0.13× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 3.08741 ns +Fastest competitor: TLFloat Quad (tlfloat::abs): 2.68222 ns; FLTX speed vs fastest competitor: 0.868762× + +3.09ns +0.87× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 0.807183 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fabs): 0.650049 ns; FLTX speed vs fastest competitor: 0.80533× + +0.807ns +0.81× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 2.65172 ns +Fastest competitor: qdpp qd_real (qdpp fabs): 1.96316 ns; FLTX speed vs fastest competitor: 0.740335× + +2.65ns +0.74× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 1.97269 ns +Fastest competitor: TLFloat Octuple (tlfloat::abs): 0.994173 ns; FLTX speed vs fastest competitor: 0.503968× + +1.97ns +0.50× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 1.60057 ns +Fastest competitor: qdpp qd_real (qdpp fabs): 1.45002 ns; FLTX speed vs fastest competitor: 0.905943× + +1.60ns +0.91× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 3.09469 ns +Fastest competitor: qdpp qd_real (qdpp fabs): 3.14259 ns; FLTX speed vs fastest competitor: 1.01548× + +3.09ns +1.02× qdreal + + +fma + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 5.83692 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fma): 11.8845 ns; FLTX speed vs fastest competitor: 2.03609× + +5.84ns +2.04× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 6.64062 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fma): 15.2796 ns; FLTX speed vs fastest competitor: 2.30093× + +6.64ns +2.30× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 7.98208 ns +Fastest competitor: TLFloat Quad (tlfloat::fma): 78.4143 ns; FLTX speed vs fastest competitor: 9.82379× + +7.98ns +9.82× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 7.87433 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fma): 15.8139 ns; FLTX speed vs fastest competitor: 2.00829× + +7.87ns +2.01× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 24.5592 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fma): 84.1772 ns; FLTX speed vs fastest competitor: 3.42753× + +24.6ns +3.43× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 21.1584 ns +Fastest competitor: TLFloat Octuple (tlfloat::fma): 77.089 ns; FLTX speed vs fastest competitor: 3.64342× + +21.2ns +3.64× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 38.1624 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fma): 117.898 ns; FLTX speed vs fastest competitor: 3.08937× + +38.2ns +3.09× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 31.483 ns +Fastest competitor: TLFloat Octuple (tlfloat::fma): 144.882 ns; FLTX speed vs fastest competitor: 4.6019× + +31.5ns +4.60× tloct + + +recip + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 24.3161 ns +Fastest competitor: qdpp dd_real (qdpp inv): 10.8702 ns; FLTX speed vs fastest competitor: 0.447038× + +24.3ns +0.45× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 38.0556 ns +No competitor benchmark is available. + +38.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 31.6961 ns +Fastest competitor: qdpp dd_real (qdpp inv): 12.9238 ns; FLTX speed vs fastest competitor: 0.407742× + +31.7ns +0.41× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 48.1667 ns +Fastest competitor: qdpp dd_real (qdpp inv): 13.5669 ns; FLTX speed vs fastest competitor: 0.281666× + +48.2ns +0.28× ddreal + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 74.4954 ns +Fastest competitor: qdpp qd_real (qdpp inv): 256.54 ns; FLTX speed vs fastest competitor: 3.4437× + +74.5ns +3.44× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 86.2881 ns +No competitor benchmark is available. + +86.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 100.988 ns +Fastest competitor: qdpp qd_real (qdpp inv): 302.473 ns; FLTX speed vs fastest competitor: 2.99513× + +101ns +3.00× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 87.6943 ns +Fastest competitor: qdpp qd_real (qdpp inv): 231.255 ns; FLTX speed vs fastest competitor: 2.63706× + +87.7ns +2.64× qdreal + + +fmin + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 3.17768 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmin): 6.42807 ns; FLTX speed vs fastest competitor: 2.02288× + +3.18ns +2.02× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 0.751459 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmin): 2.37038 ns; FLTX speed vs fastest competitor: 3.15438× + +0.751ns +3.15× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 2.32319 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmin): 2.41885 ns; FLTX speed vs fastest competitor: 1.04118× + +2.32ns +1.04× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 2.92236 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmin): 2.91298 ns; FLTX speed vs fastest competitor: 0.996788× + +2.92ns +1.00× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 3.40624 ns +Fastest competitor: qdpp qd_real (qdpp min): 1.67499 ns; FLTX speed vs fastest competitor: 0.491741× + +3.41ns +0.49× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 1.0465 ns +Fastest competitor: TLFloat Octuple (tlfloat::fmin): 6.41838 ns; FLTX speed vs fastest competitor: 6.13318× + +1.05ns +6.13× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 1.52865 ns +Fastest competitor: qdpp qd_real (qdpp min): 1.26635 ns; FLTX speed vs fastest competitor: 0.828412× + +1.53ns +0.83× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 1.16717 ns +Fastest competitor: qdpp qd_real (qdpp min): 3.31478 ns; FLTX speed vs fastest competitor: 2.84× + +1.17ns +2.84× qdreal + + +fmax + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 3.23997 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmax): 6.45185 ns; FLTX speed vs fastest competitor: 1.99133× + +3.24ns +1.99× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 0.703579 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmax): 2.48715 ns; FLTX speed vs fastest competitor: 3.535× + +0.704ns +3.53× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 2.45674 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmax): 2.30832 ns; FLTX speed vs fastest competitor: 0.939588× + +2.46ns +0.94× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 2.93782 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmax): 2.92382 ns; FLTX speed vs fastest competitor: 0.995237× + +2.94ns +1.00× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 3.64993 ns +Fastest competitor: qdpp qd_real (qdpp max): 1.43515 ns; FLTX speed vs fastest competitor: 0.393201× + +3.65ns +0.39× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 1.00174 ns +Fastest competitor: TLFloat Octuple (tlfloat::fmax): 6.85888 ns; FLTX speed vs fastest competitor: 6.84695× + +1.00ns +6.85× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 1.63233 ns +Fastest competitor: qdpp qd_real (qdpp max): 1.30518 ns; FLTX speed vs fastest competitor: 0.799577× + +1.63ns +0.80× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 1.18018 ns +Fastest competitor: qdpp qd_real (qdpp max): 1.54158 ns; FLTX speed vs fastest competitor: 1.30623× + +1.18ns +1.31× qdreal + + +fdim + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 3.76641 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fdim): 8.27204 ns; FLTX speed vs fastest competitor: 2.19627× + +3.77ns +2.20× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 2.72889 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fdim): 3.27793 ns; FLTX speed vs fastest competitor: 1.20119× + +2.73ns +1.20× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 3.24721 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fdim): 5.16863 ns; FLTX speed vs fastest competitor: 1.59171× + +3.25ns +1.59× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 3.02938 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fdim): 3.36202 ns; FLTX speed vs fastest competitor: 1.10981× + +3.03ns +1.11× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 8.22296 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fdim): 43.8145 ns; FLTX speed vs fastest competitor: 5.32831× + +8.22ns +5.33× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 8.44294 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fdim): 43.0752 ns; FLTX speed vs fastest competitor: 5.10192× + +8.44ns +5.10× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 5.47204 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fdim): 50.6821 ns; FLTX speed vs fastest competitor: 9.26202× + +5.47ns +9.26× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 7.06187 ns +Fastest competitor: TLFloat Octuple (tlfloat::fdim): 57.901 ns; FLTX speed vs fastest competitor: 8.19911× + +7.06ns +8.20× tloct + + +copysign + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 1.63566 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::copysign): 2.61795 ns; FLTX speed vs fastest competitor: 1.60054× + +1.64ns +1.60× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 0.455948 ns +Fastest competitor: TLFloat Quad (tlfloat::copysign): 0.504689 ns; FLTX speed vs fastest competitor: 1.1069× + +0.456ns +1.11× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 1.02946 ns +Fastest competitor: TLFloat Quad (tlfloat::copysign): 4.71045 ns; FLTX speed vs fastest competitor: 4.57567× + +1.03ns +4.58× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 0.38506 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::copysign): 0.871318 ns; FLTX speed vs fastest competitor: 2.26281× + +0.385ns +2.26× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.863137 ns +Fastest competitor: TLFloat Octuple (tlfloat::copysign): 12.2147 ns; FLTX speed vs fastest competitor: 14.1515× + +0.863ns +14.15× tloct + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.739969 ns +Fastest competitor: TLFloat Octuple (tlfloat::copysign): 0.998089 ns; FLTX speed vs fastest competitor: 1.34883× + +0.740ns +1.35× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.682812 ns +Fastest competitor: TLFloat Octuple (tlfloat::copysign): 7.62296 ns; FLTX speed vs fastest competitor: 11.1641× + +0.683ns +11.16× tloct + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.698238 ns +Fastest competitor: TLFloat Octuple (tlfloat::copysign): 8.74343 ns; FLTX speed vs fastest competitor: 12.5221× + +0.698ns +12.52× tloct + + +ldexp + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 1.96195 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 4.07124 ns; FLTX speed vs fastest competitor: 2.0751× + +1.96ns +2.08× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 1.44267 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::ldexp): 3.67517 ns; FLTX speed vs fastest competitor: 2.54748× + +1.44ns +2.55× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 1.26917 ns +Fastest competitor: TLFloat Quad (tlfloat::ldexp): 8.84702 ns; FLTX speed vs fastest competitor: 6.97073× + +1.27ns +6.97× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 1.81107 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 1.90183 ns; FLTX speed vs fastest competitor: 1.05011× + +1.81ns +1.05× ddreal + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 3.9405 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 8.62326 ns; FLTX speed vs fastest competitor: 2.18837× + +3.94ns +2.19× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 3.19728 ns +Fastest competitor: TLFloat Octuple (tlfloat::ldexp): 31.536 ns; FLTX speed vs fastest competitor: 9.86339× + +3.20ns +9.86× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 1.7041 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 18.5557 ns; FLTX speed vs fastest competitor: 10.8889× + +1.70ns +10.89× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 2.94238 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 3.90885 ns; FLTX speed vs fastest competitor: 1.32846× + +2.94ns +1.33× qdreal + + +scalbn + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 2.18228 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 4.11514 ns; FLTX speed vs fastest competitor: 1.8857× + +2.18ns +1.89× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 1.36969 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::scalbn): 3.69068 ns; FLTX speed vs fastest competitor: 2.69454× + +1.37ns +2.69× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 1.24655 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 9.13654 ns; FLTX speed vs fastest competitor: 7.32944× + +1.25ns +7.33× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 1.88026 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 1.90441 ns; FLTX speed vs fastest competitor: 1.01285× + +1.88ns +1.01× ddreal + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 3.95131 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 8.60484 ns; FLTX speed vs fastest competitor: 2.17772× + +3.95ns +2.18× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 3.19997 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::scalbn): 39.5182 ns; FLTX speed vs fastest competitor: 12.3496× + +3.20ns +12.35× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 1.70617 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 18.5655 ns; FLTX speed vs fastest competitor: 10.8813× + +1.71ns +10.88× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 2.95771 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 3.90942 ns; FLTX speed vs fastest competitor: 1.32177× + +2.96ns +1.32× qdreal + + +scalbln + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 2.18793 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 4.0956 ns; FLTX speed vs fastest competitor: 1.87191× + +2.19ns +1.87× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 1.3716 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::scalbln): 3.69046 ns; FLTX speed vs fastest competitor: 2.69062× + +1.37ns +2.69× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 1.24324 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 9.14169 ns; FLTX speed vs fastest competitor: 7.35309× + +1.24ns +7.35× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 1.88556 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 1.90528 ns; FLTX speed vs fastest competitor: 1.01045× + +1.89ns +1.01× ddreal + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 3.94342 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 8.60996 ns; FLTX speed vs fastest competitor: 2.18337× + +3.94ns +2.18× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 3.18991 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::scalbln): 38.6361 ns; FLTX speed vs fastest competitor: 12.112× + +3.19ns +12.11× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 1.69767 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 18.5555 ns; FLTX speed vs fastest competitor: 10.93× + +1.70ns +10.93× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 2.97003 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 3.92315 ns; FLTX speed vs fastest competitor: 1.32091× + +2.97ns +1.32× qdreal + + +frexp + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 2.65722 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::frexp): 4.20069 ns; FLTX speed vs fastest competitor: 1.58086× + +2.66ns +1.58× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 2.46171 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::frexp): 4.01157 ns; FLTX speed vs fastest competitor: 1.62959× + +2.46ns +1.63× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 1.83405 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::frexp): 9.04801 ns; FLTX speed vs fastest competitor: 4.93335× + +1.83ns +4.93× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 3.61004 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::frexp): 2.79358 ns; FLTX speed vs fastest competitor: 0.773836× + +3.61ns +0.77× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 7.27916 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::frexp): 67.5671 ns; FLTX speed vs fastest competitor: 9.28227× + +7.28ns +9.28× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 13.9496 ns +Fastest competitor: TLFloat Octuple (tlfloat::frexp): 43.6797 ns; FLTX speed vs fastest competitor: 3.13125× + +13.9ns +3.13× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 10.6662 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::frexp): 98.385 ns; FLTX speed vs fastest competitor: 9.22396× + +10.7ns +9.22× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 12.4056 ns +Fastest competitor: TLFloat Octuple (tlfloat::frexp): 43.5039 ns; FLTX speed vs fastest competitor: 3.5068× + +12.4ns +3.51× tloct + + +modf + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 5.88679 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::modf): 15.434 ns; FLTX speed vs fastest competitor: 2.62181× + +5.89ns +2.62× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 5.87441 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::modf): 7.70278 ns; FLTX speed vs fastest competitor: 1.31124× + +5.87ns +1.31× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 5.54592 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::modf): 11.4233 ns; FLTX speed vs fastest competitor: 2.05976× + +5.55ns +2.06× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 6.92745 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::modf): 7.03247 ns; FLTX speed vs fastest competitor: 1.01516× + +6.93ns +1.02× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 18.3871 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::modf): 177.681 ns; FLTX speed vs fastest competitor: 9.66332× + +18.4ns +9.66× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 20.2264 ns +Fastest competitor: TLFloat Octuple (tlfloat::modf): 42.958 ns; FLTX speed vs fastest competitor: 2.12386× + +20.2ns +2.12× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 14.7099 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::modf): 235.215 ns; FLTX speed vs fastest competitor: 15.9902× + +14.7ns +15.99× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 13.8637 ns +Fastest competitor: TLFloat Octuple (tlfloat::modf): 71.2451 ns; FLTX speed vs fastest competitor: 5.13898× + +13.9ns +5.14× tloct + + +ilogb + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 2.3211 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::ilogb): 5.62646 ns; FLTX speed vs fastest competitor: 2.42405× + +2.32ns +2.42× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 1.39743 ns +Fastest competitor: TLFloat Quad (tlfloat::ilogb): 0.640567 ns; FLTX speed vs fastest competitor: 0.458389× + +1.40ns +0.46× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 1.46864 ns +Fastest competitor: TLFloat Quad (tlfloat::ilogb): 1.76001 ns; FLTX speed vs fastest competitor: 1.1984× + +1.47ns +1.20× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 2.0829 ns +Fastest competitor: TLFloat Quad (tlfloat::ilogb): 1.56506 ns; FLTX speed vs fastest competitor: 0.751384× + +2.08ns +0.75× tlquad + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 1.62101 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::ilogb): 33.5868 ns; FLTX speed vs fastest competitor: 20.7197× + +1.62ns +20.72× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 1.0807 ns +Fastest competitor: TLFloat Octuple (tlfloat::ilogb): 0.66535 ns; FLTX speed vs fastest competitor: 0.615667× + +1.08ns +0.62× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 1.06621 ns +Fastest competitor: TLFloat Octuple (tlfloat::ilogb): 31.9308 ns; FLTX speed vs fastest competitor: 29.9479× + +1.07ns +29.95× tloct + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 1.34499 ns +Fastest competitor: TLFloat Octuple (tlfloat::ilogb): 1.08038 ns; FLTX speed vs fastest competitor: 0.803264× + +1.34ns +0.80× tloct + + +logb + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 2.50964 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::logb): 79.411 ns; FLTX speed vs fastest competitor: 31.6424× + +2.51ns +31.64× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 1.28841 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::logb): 71.8909 ns; FLTX speed vs fastest competitor: 55.7983× + +1.29ns +55.80× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 1.47026 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::logb): 30.1004 ns; FLTX speed vs fastest competitor: 20.4728× + +1.47ns +20.47× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 1.91492 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::logb): 97.2009 ns; FLTX speed vs fastest competitor: 50.7599× + +1.91ns +50.76× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 2.23711 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::logb): 75.6673 ns; FLTX speed vs fastest competitor: 33.8238× + +2.24ns +33.82× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 0.973943 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::logb): 72.1151 ns; FLTX speed vs fastest competitor: 74.0444× + +0.974ns +74.04× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 1.07789 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::logb): 98.8904 ns; FLTX speed vs fastest competitor: 91.7441× + +1.08ns +91.74× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 1.25767 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::logb): 123.499 ns; FLTX speed vs fastest competitor: 98.1962× + +1.26ns +98.20× mpfr64 + + +nextafter + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 5.86143 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::math::nextafter): 63.67 ns; FLTX speed vs fastest competitor: 10.8625× + +5.86ns +10.86× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 4.31561 ns +Fastest competitor: TLFloat Quad (tlfloat::nextafter): 7.14233 ns; FLTX speed vs fastest competitor: 1.655× + +4.32ns +1.65× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 5.00101 ns +Fastest competitor: TLFloat Quad (tlfloat::nextafter): 18.1561 ns; FLTX speed vs fastest competitor: 3.63048× + +5.00ns +3.63× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 5.43675 ns +Fastest competitor: TLFloat Quad (tlfloat::nextafter): 14.3367 ns; FLTX speed vs fastest competitor: 2.637× + +5.44ns +2.64× tlquad + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 6.86741 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::math::nextafter): 504.421 ns; FLTX speed vs fastest competitor: 73.4514× + +6.87ns +73.45× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 5.72377 ns +Fastest competitor: TLFloat Octuple (tlfloat::nextafter): 17.8975 ns; FLTX speed vs fastest competitor: 3.12688× + +5.72ns +3.13× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 4.64485 ns +Fastest competitor: TLFloat Octuple (tlfloat::nextafter): 163.661 ns; FLTX speed vs fastest competitor: 35.2349× + +4.64ns +35.23× tloct + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 6.69939 ns +Fastest competitor: TLFloat Octuple (tlfloat::nextafter): 18.1117 ns; FLTX speed vs fastest competitor: 2.70348× + +6.70ns +2.70× tloct + + +nexttoward + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 5.85153 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::math::nextafter (same type)): 63.7042 ns; FLTX speed vs fastest competitor: 10.8868× + +5.85ns +10.89× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 4.2923 ns +Fastest competitor: TLFloat Quad (tlfloat::nextafter (same type)): 7.14883 ns; FLTX speed vs fastest competitor: 1.6655× + +4.29ns +1.67× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 4.66885 ns +Fastest competitor: TLFloat Quad (tlfloat::nextafter (same type)): 18.4029 ns; FLTX speed vs fastest competitor: 3.94163× + +4.67ns +3.94× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 5.43457 ns +Fastest competitor: TLFloat Quad (tlfloat::nextafter (same type)): 14.2849 ns; FLTX speed vs fastest competitor: 2.62853× + +5.43ns +2.63× tlquad + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 6.86161 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::math::nextafter (same type)): 507.908 ns; FLTX speed vs fastest competitor: 74.0216× + +6.86ns +74.02× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 5.74084 ns +Fastest competitor: TLFloat Octuple (tlfloat::nextafter (same type)): 17.8678 ns; FLTX speed vs fastest competitor: 3.1124× + +5.74ns +3.11× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 4.4435 ns +Fastest competitor: TLFloat Octuple (tlfloat::nextafter (same type)): 163.738 ns; FLTX speed vs fastest competitor: 36.8489× + +4.44ns +36.85× tloct + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 6.69703 ns +Fastest competitor: TLFloat Octuple (tlfloat::nextafter (same type)): 18.1838 ns; FLTX speed vs fastest competitor: 2.71521× + +6.70ns +2.72× tloct + + + +Roots & powers + +sqr + +Windows / x64 / MSVC; bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 1.61301 ns +Fastest competitor: qdpp dd_real (qdpp sqr): 0.7778 ns; FLTX speed vs fastest competitor: 0.482203× + +1.61ns +0.48× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 1.09598 ns +No competitor benchmark is available. + +1.10ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 1.22628 ns +Fastest competitor: qdpp dd_real (qdpp sqr): 1.40871 ns; FLTX speed vs fastest competitor: 1.14877× + +1.23ns +1.15× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 1.20486 ns +Fastest competitor: qdpp dd_real (qdpp sqr): 1.2401 ns; FLTX speed vs fastest competitor: 1.02925× + +1.20ns +1.03× ddreal + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 18.2537 ns +Fastest competitor: qdpp qd_real (qdpp sqr): 12.5128 ns; FLTX speed vs fastest competitor: 0.685495× + +18.3ns +0.69× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 23.2207 ns +No competitor benchmark is available. + +23.2ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 22.7539 ns +Fastest competitor: qdpp qd_real (qdpp sqr): 15.0369 ns; FLTX speed vs fastest competitor: 0.660849× + +22.8ns +0.66× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 22.5432 ns +Fastest competitor: qdpp qd_real (qdpp sqr): 14.665 ns; FLTX speed vs fastest competitor: 0.65053× + +22.5ns +0.65× qdreal + + +sqrt + +Windows / x64 / MSVC; bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 4.10067 ns +Fastest competitor: qdpp dd_real (qdpp sqrt): 4.97443 ns; FLTX speed vs fastest competitor: 1.21308× + +4.10ns +1.21× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 3.70714 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::sqrt): 2.94991 ns; FLTX speed vs fastest competitor: 0.795737× + +3.71ns +0.80× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 5.10632 ns +Fastest competitor: qdpp dd_real (qdpp sqrt): 5.38507 ns; FLTX speed vs fastest competitor: 1.05459× + +5.11ns +1.05× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 5.67276 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::sqrt): 3.11686 ns; FLTX speed vs fastest competitor: 0.549444× + +5.67ns +0.55× cppdd + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 122.968 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sqrt): 136.289 ns; FLTX speed vs fastest competitor: 1.10833× + +123ns +1.11× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 109.785 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sqrt): 134.028 ns; FLTX speed vs fastest competitor: 1.22082× + +110ns +1.22× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 120.25 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sqrt): 148.713 ns; FLTX speed vs fastest competitor: 1.2367× + +120ns +1.24× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 119.519 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sqrt): 280.593 ns; FLTX speed vs fastest competitor: 2.34769× + +120ns +2.35× mpfr64 + + +cbrt + +Windows / x64 / MSVC; bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 21.9841 ns +Fastest competitor: qdpp dd_real (qdpp nroot): 65.9985 ns; FLTX speed vs fastest competitor: 3.0021× + +22.0ns +3.00× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 22.5072 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::cbrt): 352.351 ns; FLTX speed vs fastest competitor: 15.655× + +22.5ns +15.66× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 71.8913 ns +Fastest competitor: qdpp dd_real (qdpp nroot): 150.863 ns; FLTX speed vs fastest competitor: 2.09849× + +71.9ns +2.10× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 18.8709 ns +Fastest competitor: qdpp dd_real (qdpp nroot): 75.548 ns; FLTX speed vs fastest competitor: 4.00341× + +18.9ns +4.00× ddreal + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 344.022 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cbrt): 426.13 ns; FLTX speed vs fastest competitor: 1.23867× + +344ns +1.24× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 341.947 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cbrt): 423.345 ns; FLTX speed vs fastest competitor: 1.23804× + +342ns +1.24× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 382.334 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cbrt): 483.858 ns; FLTX speed vs fastest competitor: 1.26554× + +382ns +1.27× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 351.211 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cbrt): 766.292 ns; FLTX speed vs fastest competitor: 2.18186× + +351ns +2.18× mpfr64 + + +hypot + +Windows / x64 / MSVC; bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 8.88267 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::hypot): 57.436 ns; FLTX speed vs fastest competitor: 6.46607× + +8.88ns +6.47× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 10.2858 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::hypot): 61.0524 ns; FLTX speed vs fastest competitor: 5.93559× + +10.3ns +5.94× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 9.09156 ns +Fastest competitor: TLFloat Quad (tlfloat::hypot): 210.51 ns; FLTX speed vs fastest competitor: 23.1545× + +9.09ns +23.15× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 10.8778 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::hypot): 59.552 ns; FLTX speed vs fastest competitor: 5.47466× + +10.9ns +5.47× cppdd + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 172.3 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::hypot): 461.187 ns; FLTX speed vs fastest competitor: 2.67665× + +172ns +2.68× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 165.495 ns +Fastest competitor: TLFloat Octuple (tlfloat::hypot): 295.633 ns; FLTX speed vs fastest competitor: 1.78635× + +165ns +1.79× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 175.204 ns +Fastest competitor: TLFloat Octuple (tlfloat::hypot): 570.325 ns; FLTX speed vs fastest competitor: 3.2552× + +175ns +3.26× tloct + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 171.975 ns +Fastest competitor: TLFloat Octuple (tlfloat::hypot): 766.048 ns; FLTX speed vs fastest competitor: 4.45443× + +172ns +4.45× tloct + + +pow + +Windows / x64 / MSVC; bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 202.39 ns +Fastest competitor: qdpp dd_real (qdpp pow): 219.944 ns; FLTX speed vs fastest competitor: 1.08673× + +202ns +1.09× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 192.667 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::pow): 602.698 ns; FLTX speed vs fastest competitor: 3.12819× + +193ns +3.13× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 220.272 ns +Fastest competitor: qdpp dd_real (qdpp pow): 462.314 ns; FLTX speed vs fastest competitor: 2.09884× + +220ns +2.10× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 241.208 ns +Fastest competitor: qdpp dd_real (qdpp pow): 300.917 ns; FLTX speed vs fastest competitor: 1.24754× + +241ns +1.25× ddreal + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2498.29 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::pow): 3035.84 ns; FLTX speed vs fastest competitor: 1.21517× + +2,498ns +1.22× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2682.28 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::pow): 3051.17 ns; FLTX speed vs fastest competitor: 1.13753× + +2,682ns +1.14× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2712.35 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::pow): 3571.94 ns; FLTX speed vs fastest competitor: 1.31692× + +2,712ns +1.32× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2689.88 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::pow): 7383.79 ns; FLTX speed vs fastest competitor: 2.74503× + +2,690ns +2.75× mpfr64 + + +ipow + +Windows / x64 / MSVC; bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 15.294 ns +Fastest competitor: qdpp dd_real (qdpp npwr): 7.29433 ns; FLTX speed vs fastest competitor: 0.476941× + +15.3ns +0.48× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 24.0789 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::pow(value, int)): 9.00757 ns; FLTX speed vs fastest competitor: 0.374085× + +24.1ns +0.37× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 18.1927 ns +Fastest competitor: qdpp dd_real (qdpp npwr): 10.9644 ns; FLTX speed vs fastest competitor: 0.602681× + +18.2ns +0.60× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 26.3451 ns +Fastest competitor: qdpp dd_real (qdpp npwr): 7.76323 ns; FLTX speed vs fastest competitor: 0.294675× + +26.3ns +0.29× ddreal + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 111.142 ns +Fastest competitor: qdpp qd_real (qdpp npwr): 114.941 ns; FLTX speed vs fastest competitor: 1.03419× + +111ns +1.03× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 127.69 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::pow(value, int)): 172.241 ns; FLTX speed vs fastest competitor: 1.3489× + +128ns +1.35× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 121.609 ns +Fastest competitor: qdpp qd_real (qdpp npwr): 144.394 ns; FLTX speed vs fastest competitor: 1.18736× + +122ns +1.19× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 109.827 ns +Fastest competitor: qdpp qd_real (qdpp npwr): 136.661 ns; FLTX speed vs fastest competitor: 1.24432× + +110ns +1.24× qdreal + + + +Exponentials + +exp + +Windows / x64 / MSVC; bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 110.719 ns +Fastest competitor: qdpp dd_real (qdpp exp): 103.412 ns; FLTX speed vs fastest competitor: 0.934001× + +111ns +0.93× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 92.1242 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::exp): 336.888 ns; FLTX speed vs fastest competitor: 3.65689× + +92.1ns +3.66× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 108.212 ns +Fastest competitor: qdpp dd_real (qdpp exp): 234.339 ns; FLTX speed vs fastest competitor: 2.16556× + +108ns +2.17× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 118.134 ns +Fastest competitor: qdpp dd_real (qdpp exp): 148.027 ns; FLTX speed vs fastest competitor: 1.25304× + +118ns +1.25× ddreal + + +Windows / x64 / MSVC; bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 980.414 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::exp): 1258.71 ns; FLTX speed vs fastest competitor: 1.28385× + +980ns +1.28× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 1016.02 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::exp): 1267.8 ns; FLTX speed vs fastest competitor: 1.24782× + +1,016ns +1.25× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 1077.92 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::exp): 1343.54 ns; FLTX speed vs fastest competitor: 1.24642× + +1,078ns +1.25× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 1031.05 ns +Fastest competitor: qdpp qd_real (qdpp exp): 2209.72 ns; FLTX speed vs fastest competitor: 2.14316× + +1,031ns +2.14× qdreal + + +exp2 + +Windows / x64 / MSVC; bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 96.3823 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::exp2): 831.795 ns; FLTX speed vs fastest competitor: 8.63017× + +96.4ns +8.63× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 90.7549 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::exp2): 750.627 ns; FLTX speed vs fastest competitor: 8.27092× + +90.8ns +8.27× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 101.78 ns +Fastest competitor: TLFloat Quad (tlfloat::exp2): 2704.91 ns; FLTX speed vs fastest competitor: 26.5759× + +102ns +26.58× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 111.647 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::exp2): 701.05 ns; FLTX speed vs fastest competitor: 6.27918× + +112ns +6.28× cppdd + + +Windows / x64 / MSVC; bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 831.172 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::exp2): 1483.37 ns; FLTX speed vs fastest competitor: 1.78467× + +831ns +1.78× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 863.643 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::exp2): 1486.17 ns; FLTX speed vs fastest competitor: 1.72081× + +864ns +1.72× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 908.691 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::exp2): 1682.67 ns; FLTX speed vs fastest competitor: 1.85175× + +909ns +1.85× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 873.73 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::exp2): 3612.37 ns; FLTX speed vs fastest competitor: 4.13442× + +874ns +4.13× mpfr64 + + +expm1 + +Windows / x64 / MSVC; bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 112.675 ns +Fastest competitor: qdpp dd_real (qdpp expm1): 105.247 ns; FLTX speed vs fastest competitor: 0.934079× + +113ns +0.93× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 94.4391 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::expm1): 350.183 ns; FLTX speed vs fastest competitor: 3.70803× + +94.4ns +3.71× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 109.521 ns +Fastest competitor: qdpp dd_real (qdpp expm1): 233.833 ns; FLTX speed vs fastest competitor: 2.13504× + +110ns +2.14× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 118.245 ns +Fastest competitor: qdpp dd_real (qdpp expm1): 150.351 ns; FLTX speed vs fastest competitor: 1.27151× + +118ns +1.27× ddreal + + +Windows / x64 / MSVC; bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 987.109 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::expm1): 1395.62 ns; FLTX speed vs fastest competitor: 1.41384× + +987ns +1.41× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 1015.77 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::expm1): 1391.13 ns; FLTX speed vs fastest competitor: 1.36954× + +1,016ns +1.37× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 1072.97 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::expm1): 1528.14 ns; FLTX speed vs fastest competitor: 1.42421× + +1,073ns +1.42× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 1032.97 ns +Fastest competitor: qdpp qd_real (qdpp expm1): 2187.16 ns; FLTX speed vs fastest competitor: 2.11735× + +1,033ns +2.12× qdreal + + + +Logarithms + +log + +Windows / x64 / MSVC; bl::f128; logarithms / log +fltx bl::f128 (bl::log): 125.307 ns +Fastest competitor: qdpp dd_real (qdpp log): 123.657 ns; FLTX speed vs fastest competitor: 0.986826× + +125ns +0.99× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log +fltx bl::f128 (bl::log): 123.146 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::log): 373.067 ns; FLTX speed vs fastest competitor: 3.02947× + +123ns +3.03× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log +fltx bl::f128 (bl::log): 145.587 ns +Fastest competitor: qdpp dd_real (qdpp log): 293.665 ns; FLTX speed vs fastest competitor: 2.01711× + +146ns +2.02× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log +fltx bl::f128 (bl::log): 155.311 ns +Fastest competitor: qdpp dd_real (qdpp log): 175.199 ns; FLTX speed vs fastest competitor: 1.12805× + +155ns +1.13× ddreal + + +Windows / x64 / MSVC; bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1662.64 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log): 2383.54 ns; FLTX speed vs fastest competitor: 1.43359× + +1,663ns +1.43× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1790.35 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log): 2383.08 ns; FLTX speed vs fastest competitor: 1.33107× + +1,790ns +1.33× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1781.66 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log): 2809.55 ns; FLTX speed vs fastest competitor: 1.57693× + +1,782ns +1.58× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1719.1 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log): 5508.35 ns; FLTX speed vs fastest competitor: 3.2042× + +1,719ns +3.20× mpfr64 + + +log2 + +Windows / x64 / MSVC; bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 116.858 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::log2): 419.419 ns; FLTX speed vs fastest competitor: 3.58915× + +117ns +3.59× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 127.66 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::log2): 384.391 ns; FLTX speed vs fastest competitor: 3.01106× + +128ns +3.01× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 150.886 ns +Fastest competitor: TLFloat Quad (tlfloat::log2): 2333.86 ns; FLTX speed vs fastest competitor: 15.4678× + +151ns +15.47× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 162.621 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::log2): 356.126 ns; FLTX speed vs fastest competitor: 2.18991× + +163ns +2.19× cppdd + + +Windows / x64 / MSVC; bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1672.73 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log2): 2624.71 ns; FLTX speed vs fastest competitor: 1.56911× + +1,673ns +1.57× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1827.21 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log2): 2601.2 ns; FLTX speed vs fastest competitor: 1.42359× + +1,827ns +1.42× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1830.2 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log2): 3085.58 ns; FLTX speed vs fastest competitor: 1.68593× + +1,830ns +1.69× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1771.11 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log2): 5881.69 ns; FLTX speed vs fastest competitor: 3.3209× + +1,771ns +3.32× mpfr64 + + +log10 + +Windows / x64 / MSVC; bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 129.796 ns +Fastest competitor: qdpp dd_real (qdpp log10): 145.685 ns; FLTX speed vs fastest competitor: 1.12242× + +130ns +1.12× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 127.637 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::log10): 384.521 ns; FLTX speed vs fastest competitor: 3.01262× + +128ns +3.01× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 149.884 ns +Fastest competitor: qdpp dd_real (qdpp log10): 326.046 ns; FLTX speed vs fastest competitor: 2.17533× + +150ns +2.18× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 162.693 ns +Fastest competitor: qdpp dd_real (qdpp log10): 201.318 ns; FLTX speed vs fastest competitor: 1.23741× + +163ns +1.24× ddreal + + +Windows / x64 / MSVC; bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1686.99 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log10): 4590.48 ns; FLTX speed vs fastest competitor: 2.7211× + +1,687ns +2.72× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1847.01 ns +Fastest competitor: TLFloat Octuple (tlfloat::log10): 3089 ns; FLTX speed vs fastest competitor: 1.67243× + +1,847ns +1.67× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1826.37 ns +Fastest competitor: TLFloat Octuple (tlfloat::log10): 5439.55 ns; FLTX speed vs fastest competitor: 2.97834× + +1,826ns +2.98× tloct + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1766.21 ns +Fastest competitor: TLFloat Octuple (tlfloat::log10): 6771 ns; FLTX speed vs fastest competitor: 3.83363× + +1,766ns +3.83× tloct + + +log1p + +Windows / x64 / MSVC; bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 137.565 ns +Fastest competitor: qdpp dd_real (qdpp log1p): 128.55 ns; FLTX speed vs fastest competitor: 0.934464× + +138ns +0.93× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 124.467 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::log1p): 490.902 ns; FLTX speed vs fastest competitor: 3.94402× + +124ns +3.94× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 151.186 ns +Fastest competitor: qdpp dd_real (qdpp log1p): 276.846 ns; FLTX speed vs fastest competitor: 1.83117× + +151ns +1.83× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 157.91 ns +Fastest competitor: qdpp dd_real (qdpp log1p): 171.381 ns; FLTX speed vs fastest competitor: 1.08531× + +158ns +1.09× ddreal + + +Windows / x64 / MSVC; bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1691.62 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log1p): 2443.77 ns; FLTX speed vs fastest competitor: 1.44463× + +1,692ns +1.44× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1818.96 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log1p): 2469.51 ns; FLTX speed vs fastest competitor: 1.35764× + +1,819ns +1.36× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1835 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log1p): 2912.24 ns; FLTX speed vs fastest competitor: 1.58705× + +1,835ns +1.59× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1756.62 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log1p): 5577.34 ns; FLTX speed vs fastest competitor: 3.17504× + +1,757ns +3.18× mpfr64 + + + +Trigonometric + +sin + +Windows / x64 / MSVC; bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 103.626 ns +Fastest competitor: qdpp dd_real (qdpp sin): 115.764 ns; FLTX speed vs fastest competitor: 1.11713× + +104ns +1.12× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 84.7717 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::sin): 570.27 ns; FLTX speed vs fastest competitor: 6.72712× + +84.8ns +6.73× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 101.18 ns +Fastest competitor: qdpp dd_real (qdpp sin): 243.431 ns; FLTX speed vs fastest competitor: 2.40593× + +101ns +2.41× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 107.26 ns +Fastest competitor: qdpp dd_real (qdpp sin): 161.906 ns; FLTX speed vs fastest competitor: 1.50948× + +107ns +1.51× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 883.662 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sin): 1689.9 ns; FLTX speed vs fastest competitor: 1.91239× + +884ns +1.91× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 912.858 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sin): 1694.14 ns; FLTX speed vs fastest competitor: 1.85586× + +913ns +1.86× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 897.83 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sin): 2134.67 ns; FLTX speed vs fastest competitor: 2.37759× + +898ns +2.38× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 887.88 ns +Fastest competitor: qdpp qd_real (qdpp sin): 1946.52 ns; FLTX speed vs fastest competitor: 2.19233× + +888ns +2.19× qdreal + + +cos + +Windows / x64 / MSVC; bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 104.239 ns +Fastest competitor: qdpp dd_real (qdpp cos): 115.868 ns; FLTX speed vs fastest competitor: 1.11156× + +104ns +1.11× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 84.2705 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::cos): 566.364 ns; FLTX speed vs fastest competitor: 6.72078× + +84.3ns +6.72× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 101.139 ns +Fastest competitor: qdpp dd_real (qdpp cos): 243.707 ns; FLTX speed vs fastest competitor: 2.40962× + +101ns +2.41× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 106.95 ns +Fastest competitor: qdpp dd_real (qdpp cos): 163.544 ns; FLTX speed vs fastest competitor: 1.52916× + +107ns +1.53× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 882.48 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cos): 1303.46 ns; FLTX speed vs fastest competitor: 1.47704× + +882ns +1.48× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 919.912 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cos): 1307.34 ns; FLTX speed vs fastest competitor: 1.42116× + +920ns +1.42× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 897.49 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cos): 1681.12 ns; FLTX speed vs fastest competitor: 1.87313× + +897ns +1.87× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 861.611 ns +Fastest competitor: qdpp qd_real (qdpp cos): 1955.88 ns; FLTX speed vs fastest competitor: 2.27002× + +862ns +2.27× qdreal + + +sincos + +Windows / x64 / MSVC; bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 92.8188 ns +Fastest competitor: qdpp dd_real (qdpp sincos): 133.87 ns; FLTX speed vs fastest competitor: 1.44227× + +92.8ns +1.44× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 94.9389 ns +Fastest competitor: TLFloat Quad (tlfloat::sincos): 1333.02 ns; FLTX speed vs fastest competitor: 14.0408× + +94.9ns +14.04× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 107.069 ns +Fastest competitor: qdpp dd_real (qdpp sincos): 239.1 ns; FLTX speed vs fastest competitor: 2.23314× + +107ns +2.23× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 116.825 ns +Fastest competitor: qdpp dd_real (qdpp sincos): 166.795 ns; FLTX speed vs fastest competitor: 1.42774× + +117ns +1.43× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1175.64 ns +Fastest competitor: qdpp qd_real (qdpp sincos): 1935.41 ns; FLTX speed vs fastest competitor: 1.64626× + +1,176ns +1.65× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1018.66 ns +Fastest competitor: TLFloat Octuple (tlfloat::sincos): 5237.74 ns; FLTX speed vs fastest competitor: 5.14178× + +1,019ns +5.14× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1114.88 ns +Fastest competitor: qdpp qd_real (qdpp sincos): 2723.68 ns; FLTX speed vs fastest competitor: 2.44303× + +1,115ns +2.44× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1061.68 ns +Fastest competitor: qdpp qd_real (qdpp sincos): 2099.07 ns; FLTX speed vs fastest competitor: 1.97712× + +1,062ns +1.98× qdreal + + +tan + +Windows / x64 / MSVC; bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 107.13 ns +Fastest competitor: qdpp dd_real (qdpp tan): 152.951 ns; FLTX speed vs fastest competitor: 1.42771× + +107ns +1.43× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 95.8887 ns +Fastest competitor: TLFloat Quad (tlfloat::tan): 819.132 ns; FLTX speed vs fastest competitor: 8.54254× + +95.9ns +8.54× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 107.743 ns +Fastest competitor: qdpp dd_real (qdpp tan): 262.259 ns; FLTX speed vs fastest competitor: 2.43412× + +108ns +2.43× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 116.664 ns +Fastest competitor: qdpp dd_real (qdpp tan): 185.874 ns; FLTX speed vs fastest competitor: 1.59325× + +117ns +1.59× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1113.92 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tan): 1892.21 ns; FLTX speed vs fastest competitor: 1.6987× + +1,114ns +1.70× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1106.86 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tan): 1905.1 ns; FLTX speed vs fastest competitor: 1.72117× + +1,107ns +1.72× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1208.59 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tan): 2387.06 ns; FLTX speed vs fastest competitor: 1.97507× + +1,209ns +1.98× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1122.64 ns +Fastest competitor: qdpp qd_real (qdpp tan): 2338.09 ns; FLTX speed vs fastest competitor: 2.08266× + +1,123ns +2.08× qdreal + + +asin + +Windows / x64 / MSVC; bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 166.086 ns +Fastest competitor: qdpp dd_real (qdpp asin): 247.043 ns; FLTX speed vs fastest competitor: 1.48744× + +166ns +1.49× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 157.237 ns +Fastest competitor: TLFloat Quad (tlfloat::asin): 1359.89 ns; FLTX speed vs fastest competitor: 8.64863× + +157ns +8.65× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 189.262 ns +Fastest competitor: qdpp dd_real (qdpp asin): 402.836 ns; FLTX speed vs fastest competitor: 2.12846× + +189ns +2.13× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 196.67 ns +Fastest competitor: qdpp dd_real (qdpp asin): 286.813 ns; FLTX speed vs fastest competitor: 1.45835× + +197ns +1.46× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1334.21 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::asin): 6068.02 ns; FLTX speed vs fastest competitor: 4.54803× + +1,334ns +4.55× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1404.51 ns +Fastest competitor: TLFloat Octuple (tlfloat::asin): 5038.43 ns; FLTX speed vs fastest competitor: 3.58732× + +1,405ns +3.59× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1399.9 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::asin): 6991.8 ns; FLTX speed vs fastest competitor: 4.99449× + +1,400ns +4.99× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1337.76 ns +Fastest competitor: qdpp qd_real (qdpp asin): 8641.21 ns; FLTX speed vs fastest competitor: 6.45946× + +1,338ns +6.46× qdreal + + +acos + +Windows / x64 / MSVC; bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 170.123 ns +Fastest competitor: qdpp dd_real (qdpp acos): 245.747 ns; FLTX speed vs fastest competitor: 1.44452× + +170ns +1.44× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 161.717 ns +Fastest competitor: TLFloat Quad (tlfloat::acos): 1364.84 ns; FLTX speed vs fastest competitor: 8.43971× + +162ns +8.44× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 194.31 ns +Fastest competitor: qdpp dd_real (qdpp acos): 412.385 ns; FLTX speed vs fastest competitor: 2.1223× + +194ns +2.12× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 202.151 ns +Fastest competitor: qdpp dd_real (qdpp acos): 287.901 ns; FLTX speed vs fastest competitor: 1.42419× + +202ns +1.42× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1347.52 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::acos): 6267.09 ns; FLTX speed vs fastest competitor: 4.65084× + +1,348ns +4.65× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1424.22 ns +Fastest competitor: TLFloat Octuple (tlfloat::acos): 5074.12 ns; FLTX speed vs fastest competitor: 3.56274× + +1,424ns +3.56× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1417.69 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::acos): 7174.76 ns; FLTX speed vs fastest competitor: 5.06087× + +1,418ns +5.06× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1382.99 ns +Fastest competitor: qdpp qd_real (qdpp acos): 8697.95 ns; FLTX speed vs fastest competitor: 6.28923× + +1,383ns +6.29× qdreal + + +atan + +Windows / x64 / MSVC; bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 121.963 ns +Fastest competitor: qdpp dd_real (qdpp atan): 182.216 ns; FLTX speed vs fastest competitor: 1.49403× + +122ns +1.49× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 109.273 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::atan): 326.14 ns; FLTX speed vs fastest competitor: 2.98463× + +109ns +2.98× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 136.95 ns +Fastest competitor: qdpp dd_real (qdpp atan): 314.777 ns; FLTX speed vs fastest competitor: 2.29849× + +137ns +2.30× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 142.458 ns +Fastest competitor: qdpp dd_real (qdpp atan): 206.599 ns; FLTX speed vs fastest competitor: 1.45025× + +142ns +1.45× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 880.122 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan): 1993.77 ns; FLTX speed vs fastest competitor: 2.26533× + +880ns +2.27× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 921.322 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan): 2006.21 ns; FLTX speed vs fastest competitor: 2.17754× + +921ns +2.18× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 908.442 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan): 3097.07 ns; FLTX speed vs fastest competitor: 3.40921× + +908ns +3.41× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 880.642 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan): 3805.27 ns; FLTX speed vs fastest competitor: 4.32102× + +881ns +4.32× mpfr64 + + +atan2 + +Windows / x64 / MSVC; bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 118.433 ns +Fastest competitor: qdpp dd_real (qdpp atan2): 178.384 ns; FLTX speed vs fastest competitor: 1.5062× + +118ns +1.51× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 116.193 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::atan2): 331.362 ns; FLTX speed vs fastest competitor: 2.85183× + +116ns +2.85× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 144.076 ns +Fastest competitor: qdpp dd_real (qdpp atan2): 316.929 ns; FLTX speed vs fastest competitor: 2.19974× + +144ns +2.20× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 148.253 ns +Fastest competitor: qdpp dd_real (qdpp atan2): 206.55 ns; FLTX speed vs fastest competitor: 1.39323× + +148ns +1.39× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 940.441 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan2): 2047.5 ns; FLTX speed vs fastest competitor: 2.17717× + +940ns +2.18× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 983.062 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan2): 2055.47 ns; FLTX speed vs fastest competitor: 2.09088× + +983ns +2.09× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 972.873 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan2): 3143.98 ns; FLTX speed vs fastest competitor: 3.23164× + +973ns +3.23× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 934.31 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan2): 3973.93 ns; FLTX speed vs fastest competitor: 4.25333× + +934ns +4.25× mpfr64 + + + +Hyperbolic + +sinh + +Windows / x64 / MSVC; bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 131.424 ns +Fastest competitor: qdpp dd_real (qdpp sinh): 135.219 ns; FLTX speed vs fastest competitor: 1.02887× + +131ns +1.03× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 106.427 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::sinh): 366.781 ns; FLTX speed vs fastest competitor: 3.44631× + +106ns +3.45× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 124.423 ns +Fastest competitor: qdpp dd_real (qdpp sinh): 276.196 ns; FLTX speed vs fastest competitor: 2.21982× + +124ns +2.22× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 135.136 ns +Fastest competitor: qdpp dd_real (qdpp sinh): 184.023 ns; FLTX speed vs fastest competitor: 1.36175× + +135ns +1.36× ddreal + + +Windows / x64 / MSVC; bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1213.07 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sinh): 1511.41 ns; FLTX speed vs fastest competitor: 1.24594× + +1,213ns +1.25× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1293.57 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sinh): 1489.93 ns; FLTX speed vs fastest competitor: 1.15179× + +1,294ns +1.15× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1361.43 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sinh): 1596.13 ns; FLTX speed vs fastest competitor: 1.17239× + +1,361ns +1.17× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1332.44 ns +Fastest competitor: qdpp qd_real (qdpp sinh): 2505.13 ns; FLTX speed vs fastest competitor: 1.88011× + +1,332ns +1.88× qdreal + + +cosh + +Windows / x64 / MSVC; bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 132.581 ns +Fastest competitor: qdpp dd_real (qdpp cosh): 135.222 ns; FLTX speed vs fastest competitor: 1.01992× + +133ns +1.02× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 105.861 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::cosh): 367.151 ns; FLTX speed vs fastest competitor: 3.46825× + +106ns +3.47× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 123.617 ns +Fastest competitor: qdpp dd_real (qdpp cosh): 274.185 ns; FLTX speed vs fastest competitor: 2.21803× + +124ns +2.22× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 134.441 ns +Fastest competitor: qdpp dd_real (qdpp cosh): 183.207 ns; FLTX speed vs fastest competitor: 1.36274× + +134ns +1.36× ddreal + + +Windows / x64 / MSVC; bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1212.47 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cosh): 1459.24 ns; FLTX speed vs fastest competitor: 1.20353× + +1,212ns +1.20× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1291.94 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cosh): 1466.31 ns; FLTX speed vs fastest competitor: 1.13497× + +1,292ns +1.13× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1360.87 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cosh): 1566.42 ns; FLTX speed vs fastest competitor: 1.15105× + +1,361ns +1.15× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1325.9 ns +Fastest competitor: qdpp qd_real (qdpp cosh): 2486.67 ns; FLTX speed vs fastest competitor: 1.87546× + +1,326ns +1.88× qdreal + + +tanh + +Windows / x64 / MSVC; bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 140.08 ns +Fastest competitor: qdpp dd_real (qdpp tanh): 139.045 ns; FLTX speed vs fastest competitor: 0.992613× + +140ns +0.99× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 111.744 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::tanh): 384.342 ns; FLTX speed vs fastest competitor: 3.4395× + +112ns +3.44× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 129.335 ns +Fastest competitor: qdpp dd_real (qdpp tanh): 281.332 ns; FLTX speed vs fastest competitor: 2.17523× + +129ns +2.18× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 141.668 ns +Fastest competitor: qdpp dd_real (qdpp tanh): 187.547 ns; FLTX speed vs fastest competitor: 1.32384× + +142ns +1.32× ddreal + + +Windows / x64 / MSVC; bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1196.43 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tanh): 1527.75 ns; FLTX speed vs fastest competitor: 1.27693× + +1,196ns +1.28× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1271.83 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tanh): 1518.64 ns; FLTX speed vs fastest competitor: 1.19405× + +1,272ns +1.19× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1315.51 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tanh): 1645.38 ns; FLTX speed vs fastest competitor: 1.25075× + +1,316ns +1.25× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1277.46 ns +Fastest competitor: qdpp qd_real (qdpp tanh): 2509.47 ns; FLTX speed vs fastest competitor: 1.96443× + +1,277ns +1.96× qdreal + + +asinh + +Windows / x64 / MSVC; bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 131.335 ns +Fastest competitor: qdpp dd_real (qdpp asinh): 165.631 ns; FLTX speed vs fastest competitor: 1.26113× + +131ns +1.26× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 119.742 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::asinh): 653.753 ns; FLTX speed vs fastest competitor: 5.45966× + +120ns +5.46× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 136.161 ns +Fastest competitor: qdpp dd_real (qdpp asinh): 320.78 ns; FLTX speed vs fastest competitor: 2.35588× + +136ns +2.36× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 144.785 ns +Fastest competitor: qdpp dd_real (qdpp asinh): 205.776 ns; FLTX speed vs fastest competitor: 1.42125× + +145ns +1.42× ddreal + + +Windows / x64 / MSVC; bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2549.76 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::asinh): 6188.96 ns; FLTX speed vs fastest competitor: 2.42728× + +2,550ns +2.43× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2693.24 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::asinh): 6233.59 ns; FLTX speed vs fastest competitor: 2.31454× + +2,693ns +2.31× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2757.85 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::asinh): 7274.85 ns; FLTX speed vs fastest competitor: 2.63788× + +2,758ns +2.64× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2636.52 ns +Fastest competitor: qdpp qd_real (qdpp asinh): 6687.6 ns; FLTX speed vs fastest competitor: 2.53652× + +2,637ns +2.54× qdreal + + +acosh + +Windows / x64 / MSVC; bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 142.783 ns +Fastest competitor: qdpp dd_real (qdpp acosh): 153.666 ns; FLTX speed vs fastest competitor: 1.07622× + +143ns +1.08× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 133.261 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::acosh): 714.185 ns; FLTX speed vs fastest competitor: 5.35929× + +133ns +5.36× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 162.831 ns +Fastest competitor: qdpp dd_real (qdpp acosh): 318.565 ns; FLTX speed vs fastest competitor: 1.95642× + +163ns +1.96× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 169.055 ns +Fastest competitor: qdpp dd_real (qdpp acosh): 199.987 ns; FLTX speed vs fastest competitor: 1.18297× + +169ns +1.18× ddreal + + +Windows / x64 / MSVC; bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2348.8 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::acosh): 3722.3 ns; FLTX speed vs fastest competitor: 1.58476× + +2,349ns +1.58× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2491.58 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::acosh): 3746.19 ns; FLTX speed vs fastest competitor: 1.50354× + +2,492ns +1.50× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2547.8 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::acosh): 4438.53 ns; FLTX speed vs fastest competitor: 1.7421× + +2,548ns +1.74× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2438.57 ns +Fastest competitor: qdpp qd_real (qdpp acosh): 7321.39 ns; FLTX speed vs fastest competitor: 3.00232× + +2,439ns +3.00× qdreal + + +atanh + +Windows / x64 / MSVC; bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 142.824 ns +Fastest competitor: qdpp dd_real (qdpp atanh): 159.94 ns; FLTX speed vs fastest competitor: 1.11984× + +143ns +1.12× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 129.86 ns +Fastest competitor: TLFloat Quad (tlfloat::atanh): 953.75 ns; FLTX speed vs fastest competitor: 7.34445× + +130ns +7.34× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 160.863 ns +Fastest competitor: qdpp dd_real (qdpp atanh): 318.091 ns; FLTX speed vs fastest competitor: 1.9774× + +161ns +1.98× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 168.142 ns +Fastest competitor: qdpp dd_real (qdpp atanh): 206.475 ns; FLTX speed vs fastest competitor: 1.22798× + +168ns +1.23× ddreal + + +Windows / x64 / MSVC; bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2158.37 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atanh): 2931.9 ns; FLTX speed vs fastest competitor: 1.35838× + +2,158ns +1.36× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2341.65 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atanh): 2952.25 ns; FLTX speed vs fastest competitor: 1.26075× + +2,342ns +1.26× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2427.34 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atanh): 3489.84 ns; FLTX speed vs fastest competitor: 1.43772× + +2,427ns +1.44× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2280.52 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atanh): 6536.38 ns; FLTX speed vs fastest competitor: 2.86618× + +2,281ns +2.87× mpfr64 + + + +Special + +erfc + +Windows / x64 / MSVC; bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 561.045 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erfc): 1210.6 ns; FLTX speed vs fastest competitor: 2.15776× + +561ns +2.16× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 553.598 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erfc): 1101.59 ns; FLTX speed vs fastest competitor: 1.98987× + +554ns +1.99× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 790.72 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erfc): 7994.84 ns; FLTX speed vs fastest competitor: 10.1108× + +791ns +10.11× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 809.465 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erfc): 903.315 ns; FLTX speed vs fastest competitor: 1.11594× + +809ns +1.12× cppdd + + +Windows / x64 / MSVC; bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 8904.79 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erfc): 27628.1 ns; FLTX speed vs fastest competitor: 3.10262× + +8,905ns +3.10× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 10510.9 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erfc): 27447.7 ns; FLTX speed vs fastest competitor: 2.61134× + +10,511ns +2.61× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 12796.1 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erfc): 44818.8 ns; FLTX speed vs fastest competitor: 3.50253× + +12,796ns +3.50× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 10046.1 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erfc): 81827.3 ns; FLTX speed vs fastest competitor: 8.14519× + +10,046ns +8.15× mpfr64 + + +erf + +Windows / x64 / MSVC; bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 571.553 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erf): 1228.37 ns; FLTX speed vs fastest competitor: 2.14918× + +572ns +2.15× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 556.742 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erf): 1109.35 ns; FLTX speed vs fastest competitor: 1.99258× + +557ns +1.99× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 788.588 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erf): 8003.05 ns; FLTX speed vs fastest competitor: 10.1486× + +789ns +10.15× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 810.342 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erf): 917.346 ns; FLTX speed vs fastest competitor: 1.13205× + +810ns +1.13× cppdd + + +Windows / x64 / MSVC; bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 8938.28 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erf): 16748.4 ns; FLTX speed vs fastest competitor: 1.87379× + +8,938ns +1.87× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 10458.6 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erf): 16671.1 ns; FLTX speed vs fastest competitor: 1.59401× + +10,459ns +1.59× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 12755.5 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erf): 27657 ns; FLTX speed vs fastest competitor: 2.16825× + +12,755ns +2.17× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 15377.3 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erf): 38046.9 ns; FLTX speed vs fastest competitor: 2.47422× + +15,377ns +2.47× mpfr64 + + +tgamma + +Windows / x64 / MSVC; bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 472.696 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::tgamma): 2136.86 ns; FLTX speed vs fastest competitor: 4.52057× + +473ns +4.52× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 468.578 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::tgamma): 1898.19 ns; FLTX speed vs fastest competitor: 4.05096× + +469ns +4.05× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 561.075 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::tgamma): 17561.7 ns; FLTX speed vs fastest competitor: 31.3002× + +561ns +31.30× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 590.748 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::tgamma): 1885.98 ns; FLTX speed vs fastest competitor: 3.19253× + +591ns +3.19× cppdd + + +Windows / x64 / MSVC; bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 9276.56 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tgamma): 14727.3 ns; FLTX speed vs fastest competitor: 1.58759× + +9,277ns +1.59× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 10653.9 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tgamma): 14798.4 ns; FLTX speed vs fastest competitor: 1.38902× + +10,654ns +1.39× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 10132.8 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tgamma): 20492.2 ns; FLTX speed vs fastest competitor: 2.02236× + +10,133ns +2.02× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 9843.75 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tgamma): 32862.5 ns; FLTX speed vs fastest competitor: 3.33841× + +9,844ns +3.34× mpfr64 + + +lgamma + +Windows / x64 / MSVC; bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 533.375 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lgamma): 2926.17 ns; FLTX speed vs fastest competitor: 5.48615× + +533ns +5.49× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 533.018 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lgamma): 2623.1 ns; FLTX speed vs fastest competitor: 4.92123× + +533ns +4.92× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 616.427 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lgamma): 21707 ns; FLTX speed vs fastest competitor: 35.2143× + +616ns +35.21× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 676.522 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lgamma): 2432.45 ns; FLTX speed vs fastest competitor: 3.59552× + +677ns +3.60× cppdd + + +Windows / x64 / MSVC; bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 8275.68 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lgamma): 12619.5 ns; FLTX speed vs fastest competitor: 1.52489× + +8,276ns +1.52× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 9634.38 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lgamma): 12676.6 ns; FLTX speed vs fastest competitor: 1.31576× + +9,634ns +1.32× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 9141.41 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lgamma): 17618.8 ns; FLTX speed vs fastest competitor: 1.92736× + +9,141ns +1.93× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 10612.5 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lgamma): 29853.1 ns; FLTX speed vs fastest competitor: 2.81302× + +10,612ns +2.81× mpfr64 + + + +Comparisons + +equal + +Windows / x64 / MSVC; bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 0.686876 ns +Fastest competitor: qdpp dd_real (qdpp operator==): 0.543185 ns; FLTX speed vs fastest competitor: 0.790805× + +0.687ns +0.79× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 0.653358 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator==): 0.817757 ns; FLTX speed vs fastest competitor: 1.25162× + +0.653ns +1.25× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 0.949037 ns +Fastest competitor: qdpp dd_real (qdpp operator==): 0.450268 ns; FLTX speed vs fastest competitor: 0.474447× + +0.949ns +0.47× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 1.10905 ns +Fastest competitor: qdpp dd_real (qdpp operator==): 0.802459 ns; FLTX speed vs fastest competitor: 0.723553× + +1.11ns +0.72× ddreal + + +Windows / x64 / MSVC; bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.776943 ns +Fastest competitor: qdpp qd_real (qdpp operator==): 1.04503 ns; FLTX speed vs fastest competitor: 1.34505× + +0.777ns +1.35× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.733802 ns +Fastest competitor: TLFloat Octuple (TLFloat operator==): 4.23755 ns; FLTX speed vs fastest competitor: 5.77479× + +0.734ns +5.77× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.666876 ns +Fastest competitor: qdpp qd_real (qdpp operator==): 0.497504 ns; FLTX speed vs fastest competitor: 0.746022× + +0.667ns +0.75× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.789768 ns +Fastest competitor: qdpp qd_real (qdpp operator==): 0.544999 ns; FLTX speed vs fastest competitor: 0.690075× + +0.790ns +0.69× qdreal + + +not_equal + +Windows / x64 / MSVC; bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 0.68794 ns +Fastest competitor: qdpp dd_real (qdpp operator!=): 0.550572 ns; FLTX speed vs fastest competitor: 0.80032× + +0.688ns +0.80× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 0.725736 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator!=): 0.920377 ns; FLTX speed vs fastest competitor: 1.2682× + +0.726ns +1.27× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 1.03059 ns +Fastest competitor: qdpp dd_real (qdpp operator!=): 0.487349 ns; FLTX speed vs fastest competitor: 0.472884× + +1.03ns +0.47× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 1.11379 ns +Fastest competitor: qdpp dd_real (qdpp operator!=): 0.804375 ns; FLTX speed vs fastest competitor: 0.722196× + +1.11ns +0.72× ddreal + + +Windows / x64 / MSVC; bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.778757 ns +Fastest competitor: qdpp qd_real (qdpp operator!=): 1.10045 ns; FLTX speed vs fastest competitor: 1.41309× + +0.779ns +1.41× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.643373 ns +Fastest competitor: TLFloat Octuple (TLFloat operator!=): 4.14769 ns; FLTX speed vs fastest competitor: 6.44679× + +0.643ns +6.45× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.73972 ns +Fastest competitor: qdpp qd_real (qdpp operator!=): 0.483169 ns; FLTX speed vs fastest competitor: 0.653178× + +0.740ns +0.65× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.734721 ns +Fastest competitor: qdpp qd_real (qdpp operator!=): 0.541455 ns; FLTX speed vs fastest competitor: 0.736953× + +0.735ns +0.74× qdreal + + +less + +Windows / x64 / MSVC; bl::f128; comparisons / less +fltx bl::f128 (bl::less): 2.08025 ns +Fastest competitor: qdpp dd_real (qdpp operator<): 1.95641 ns; FLTX speed vs fastest competitor: 0.940467× + +2.08ns +0.94× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / less +fltx bl::f128 (bl::less): 0.998164 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator<): 1.60967 ns; FLTX speed vs fastest competitor: 1.61263× + +0.998ns +1.61× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / less +fltx bl::f128 (bl::less): 1.10528 ns +Fastest competitor: qdpp dd_real (qdpp operator<): 0.838337 ns; FLTX speed vs fastest competitor: 0.758486× + +1.11ns +0.76× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / less +fltx bl::f128 (bl::less): 2.04739 ns +Fastest competitor: qdpp dd_real (qdpp operator<): 1.49798 ns; FLTX speed vs fastest competitor: 0.73165× + +2.05ns +0.73× ddreal + + +Windows / x64 / MSVC; bl::f256; comparisons / less +fltx bl::f256 (bl::less): 2.10633 ns +Fastest competitor: qdpp qd_real (qdpp operator<): 1.90813 ns; FLTX speed vs fastest competitor: 0.905901× + +2.11ns +0.91× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / less +fltx bl::f256 (bl::less): 0.856641 ns +Fastest competitor: TLFloat Octuple (TLFloat operator<): 5.87399 ns; FLTX speed vs fastest competitor: 6.857× + +0.857ns +6.86× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / less +fltx bl::f256 (bl::less): 0.701605 ns +Fastest competitor: qdpp qd_real (qdpp operator<): 0.51754 ns; FLTX speed vs fastest competitor: 0.737652× + +0.702ns +0.74× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / less +fltx bl::f256 (bl::less): 1.31895 ns +Fastest competitor: qdpp qd_real (qdpp operator<): 1.10079 ns; FLTX speed vs fastest competitor: 0.834595× + +1.32ns +0.83× qdreal + + +greater + +Windows / x64 / MSVC; bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 2.06386 ns +Fastest competitor: qdpp dd_real (qdpp operator>): 1.9718 ns; FLTX speed vs fastest competitor: 0.955398× + +2.06ns +0.96× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 1.12088 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator>): 1.0269 ns; FLTX speed vs fastest competitor: 0.916154× + +1.12ns +0.92× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 1.25071 ns +Fastest competitor: qdpp dd_real (qdpp operator>): 0.701363 ns; FLTX speed vs fastest competitor: 0.560772× + +1.25ns +0.56× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 2.0787 ns +Fastest competitor: qdpp dd_real (qdpp operator>): 1.51576 ns; FLTX speed vs fastest competitor: 0.729187× + +2.08ns +0.73× ddreal + + +Windows / x64 / MSVC; bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 2.07872 ns +Fastest competitor: qdpp qd_real (qdpp operator>): 1.98202 ns; FLTX speed vs fastest competitor: 0.95348× + +2.08ns +0.95× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 0.808347 ns +Fastest competitor: TLFloat Octuple (TLFloat operator>): 5.85314 ns; FLTX speed vs fastest competitor: 7.24087× + +0.808ns +7.24× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 0.68559 ns +Fastest competitor: qdpp qd_real (qdpp operator>): 0.526507 ns; FLTX speed vs fastest competitor: 0.767962× + +0.686ns +0.77× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 1.58587 ns +Fastest competitor: qdpp qd_real (qdpp operator>): 1.27087 ns; FLTX speed vs fastest competitor: 0.80137× + +1.59ns +0.80× qdreal + + +less_equal + +Windows / x64 / MSVC; bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 2.05199 ns +Fastest competitor: qdpp dd_real (qdpp operator<=): 1.98294 ns; FLTX speed vs fastest competitor: 0.96635× + +2.05ns +0.97× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 0.992156 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator<=): 0.944537 ns; FLTX speed vs fastest competitor: 0.952005× + +0.992ns +0.95× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 1.02272 ns +Fastest competitor: qdpp dd_real (qdpp operator<=): 0.919082 ns; FLTX speed vs fastest competitor: 0.898669× + +1.02ns +0.90× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 2.06857 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator<=): 0.63943 ns; FLTX speed vs fastest competitor: 0.309117× + +2.07ns +0.31× cppdd + + +Windows / x64 / MSVC; bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 2.05822 ns +Fastest competitor: qdpp qd_real (qdpp operator<=): 1.92864 ns; FLTX speed vs fastest competitor: 0.937044× + +2.06ns +0.94× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 0.796284 ns +Fastest competitor: TLFloat Octuple (TLFloat operator<=): 5.82782 ns; FLTX speed vs fastest competitor: 7.31878× + +0.796ns +7.32× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 0.712379 ns +Fastest competitor: qdpp qd_real (qdpp operator<=): 0.512244 ns; FLTX speed vs fastest competitor: 0.719061× + +0.712ns +0.72× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 1.25655 ns +Fastest competitor: qdpp qd_real (qdpp operator<=): 1.10463 ns; FLTX speed vs fastest competitor: 0.879104× + +1.26ns +0.88× qdreal + + +greater_equal + +Windows / x64 / MSVC; bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 2.05321 ns +Fastest competitor: qdpp dd_real (qdpp operator>=): 1.96737 ns; FLTX speed vs fastest competitor: 0.958193× + +2.05ns +0.96× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 1.11472 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator>=): 1.04411 ns; FLTX speed vs fastest competitor: 0.936651× + +1.11ns +0.94× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 1.15581 ns +Fastest competitor: qdpp dd_real (qdpp operator>=): 0.801565 ns; FLTX speed vs fastest competitor: 0.693509× + +1.16ns +0.69× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 2.0861 ns +Fastest competitor: qdpp dd_real (qdpp operator>=): 1.49346 ns; FLTX speed vs fastest competitor: 0.715911× + +2.09ns +0.72× ddreal + + +Windows / x64 / MSVC; bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 2.08708 ns +Fastest competitor: qdpp qd_real (qdpp operator>=): 1.91196 ns; FLTX speed vs fastest competitor: 0.916093× + +2.09ns +0.92× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 0.789589 ns +Fastest competitor: TLFloat Octuple (TLFloat operator>=): 5.77822 ns; FLTX speed vs fastest competitor: 7.318× + +0.790ns +7.32× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 0.685543 ns +Fastest competitor: qdpp qd_real (qdpp operator>=): 0.560411 ns; FLTX speed vs fastest competitor: 0.81747× + +0.686ns +0.82× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 1.36189 ns +Fastest competitor: qdpp qd_real (qdpp operator>=): 1.09978 ns; FLTX speed vs fastest competitor: 0.807541× + +1.36ns +0.81× qdreal + + + +Random + +uniform_real + +Windows / x64 / MSVC; bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 8.90932 ns +Fastest competitor: qdpp dd_real (qdpp ddrand): 18.8904 ns; FLTX speed vs fastest competitor: 2.1203× + +8.91ns +2.12× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 7.328 ns +No competitor benchmark is available. + +7.33ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 21.3287 ns +Fastest competitor: qdpp dd_real (qdpp ddrand): 24.3433 ns; FLTX speed vs fastest competitor: 1.14134× + +21.3ns +1.14× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 5.85245 ns +Fastest competitor: qdpp dd_real (qdpp ddrand): 18.3286 ns; FLTX speed vs fastest competitor: 3.13179× + +5.85ns +3.13× ddreal + + +Windows / x64 / MSVC; bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 19.6584 ns +Fastest competitor: qdpp qd_real (qdpp qdrand): 38.2351 ns; FLTX speed vs fastest competitor: 1.94498× + +19.7ns +1.94× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 14.8556 ns +No competitor benchmark is available. + +14.9ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 42.4448 ns +Fastest competitor: qdpp qd_real (qdpp qdrand): 50.4258 ns; FLTX speed vs fastest competitor: 1.18803× + +42.4ns +1.19× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 11.0105 ns +Fastest competitor: qdpp qd_real (qdpp qdrand): 37.5858 ns; FLTX speed vs fastest competitor: 3.41365× + +11.0ns +3.41× qdreal + + +normal + +Windows / x64 / MSVC; bl::f128; random / normal +fltx bl::f128 (bl::normal): 46.9536 ns +No competitor benchmark is available. + +47.0ns + + +Windows / x64 / Clang (clang-cl); bl::f128; random / normal +fltx bl::f128 (bl::normal): 43.9526 ns +No competitor benchmark is available. + +44.0ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; random / normal +fltx bl::f128 (bl::normal): 100.521 ns +No competitor benchmark is available. + +101ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; random / normal +fltx bl::f128 (bl::normal): 48.9636 ns +No competitor benchmark is available. + +49.0ns + + +Windows / x64 / MSVC; bl::f256; random / normal +fltx bl::f256 (bl::normal): 265.449 ns +No competitor benchmark is available. + +265ns + + +Windows / x64 / Clang (clang-cl); bl::f256; random / normal +fltx bl::f256 (bl::normal): 292.534 ns +No competitor benchmark is available. + +293ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; random / normal +fltx bl::f256 (bl::normal): 367.941 ns +No competitor benchmark is available. + +368ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; random / normal +fltx bl::f256 (bl::normal): 271.407 ns +No competitor benchmark is available. + +271ns + + + +Mixed Workloads + +product_sum + +Windows / x64 / MSVC; bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 5.004 ns +Fastest competitor: qdpp dd_real (same expression): 3.00357 ns; FLTX speed vs fastest competitor: 0.600234× + +5.00ns +0.60× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 4.63094 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same expression): 6.97702 ns; FLTX speed vs fastest competitor: 1.50661× + +4.63ns +1.51× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 5.09319 ns +Fastest competitor: qdpp dd_real (same expression): 5.68219 ns; FLTX speed vs fastest competitor: 1.11565× + +5.09ns +1.12× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 6.09597 ns +Fastest competitor: qdpp dd_real (same expression): 4.99525 ns; FLTX speed vs fastest competitor: 0.819434× + +6.10ns +0.82× ddreal + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 42.869 ns +Fastest competitor: qdpp qd_real (same expression): 78.6309 ns; FLTX speed vs fastest competitor: 1.83421× + +42.9ns +1.83× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 58.5693 ns +Fastest competitor: TLFloat Octuple (same expression): 115.12 ns; FLTX speed vs fastest competitor: 1.96553× + +58.6ns +1.97× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 46.2463 ns +Fastest competitor: qdpp qd_real (same expression): 118.121 ns; FLTX speed vs fastest competitor: 2.55416× + +46.2ns +2.55× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 47.8144 ns +Fastest competitor: qdpp qd_real (same expression): 100.208 ns; FLTX speed vs fastest competitor: 2.09577× + +47.8ns +2.10× qdreal + + +chained_arithmetic + +Windows / x64 / MSVC; bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 20.2036 ns +Fastest competitor: qdpp dd_real (same workload): 37.8028 ns; FLTX speed vs fastest competitor: 1.87109× + +20.2ns +1.87× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 24.3772 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 25.6445 ns; FLTX speed vs fastest competitor: 1.05199× + +24.4ns +1.05× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 23.4356 ns +Fastest competitor: qdpp dd_real (same workload): 38.0922 ns; FLTX speed vs fastest competitor: 1.6254× + +23.4ns +1.63× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 30.5878 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 26.4878 ns; FLTX speed vs fastest competitor: 0.86596× + +30.6ns +0.87× cppdd + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 155.188 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 315.794 ns; FLTX speed vs fastest competitor: 2.03491× + +155ns +2.03× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 151.692 ns +Fastest competitor: TLFloat Octuple (same workload): 283.243 ns; FLTX speed vs fastest competitor: 1.86722× + +152ns +1.87× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 164.733 ns +Fastest competitor: qdpp qd_real (same workload): 417.582 ns; FLTX speed vs fastest competitor: 2.5349× + +165ns +2.53× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 142.701 ns +Fastest competitor: qdpp qd_real (same workload): 336.779 ns; FLTX speed vs fastest competitor: 2.36003× + +143ns +2.36× qdreal + + +affine_trig + +Windows / x64 / MSVC; bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 174.594 ns +Fastest competitor: qdpp dd_real (same workload): 229.891 ns; FLTX speed vs fastest competitor: 1.31672× + +175ns +1.32× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 187.402 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 830.325 ns; FLTX speed vs fastest competitor: 4.43073× + +187ns +4.43× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 213.073 ns +Fastest competitor: qdpp dd_real (same workload): 426.766 ns; FLTX speed vs fastest competitor: 2.0029× + +213ns +2.00× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 242.775 ns +Fastest competitor: qdpp dd_real (same workload): 315.422 ns; FLTX speed vs fastest competitor: 1.29923× + +243ns +1.30× ddreal + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1809.7 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 2349.26 ns; FLTX speed vs fastest competitor: 1.29815× + +1,810ns +1.30× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1851.71 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 2326.72 ns; FLTX speed vs fastest competitor: 1.25652× + +1,852ns +1.26× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1834.44 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 3071.54 ns; FLTX speed vs fastest competitor: 1.67438× + +1,834ns +1.67× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1793.42 ns +Fastest competitor: qdpp qd_real (same workload): 3953.84 ns; FLTX speed vs fastest competitor: 2.20463× + +1,793ns +2.20× qdreal + + +mandelbrot + +Windows / x64 / MSVC; bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 12.9063 ns +Fastest competitor: qdpp dd_real (same workload): 11.7619 ns; FLTX speed vs fastest competitor: 0.911336× + +12.9ns +0.91× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 19.8486 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 18.1825 ns; FLTX speed vs fastest competitor: 0.91606× + +19.8ns +0.92× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 17.824 ns +Fastest competitor: qdpp dd_real (same workload): 16.1993 ns; FLTX speed vs fastest competitor: 0.908851× + +17.8ns +0.91× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 21.3256 ns +Fastest competitor: qdpp dd_real (same workload): 15.2024 ns; FLTX speed vs fastest competitor: 0.712868× + +21.3ns +0.71× ddreal + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 124.059 ns +Fastest competitor: qdpp qd_real (same workload): 197.652 ns; FLTX speed vs fastest competitor: 1.5932× + +124ns +1.59× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 128.356 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 242.174 ns; FLTX speed vs fastest competitor: 1.88674× + +128ns +1.89× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 117.37 ns +Fastest competitor: qdpp qd_real (same workload): 304.327 ns; FLTX speed vs fastest competitor: 2.59288× + +117ns +2.59× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 110.989 ns +Fastest competitor: qdpp qd_real (same workload): 227.949 ns; FLTX speed vs fastest competitor: 2.0538× + +111ns +2.05× qdreal + + +matrix_vector_4x4 + +Windows / x64 / MSVC; bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 54.992 ns +Fastest competitor: qdpp dd_real (same workload): 57.2194 ns; FLTX speed vs fastest competitor: 1.0405× + +55.0ns +1.04× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 54.6573 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 81.4309 ns; FLTX speed vs fastest competitor: 1.48984× + +54.7ns +1.49× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 72.0887 ns +Fastest competitor: qdpp dd_real (same workload): 90.1062 ns; FLTX speed vs fastest competitor: 1.24994× + +72.1ns +1.25× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 69.3067 ns +Fastest competitor: qdpp dd_real (same workload): 59.9799 ns; FLTX speed vs fastest competitor: 0.865426× + +69.3ns +0.87× ddreal + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 557.157 ns +Fastest competitor: qdpp qd_real (same workload): 893.158 ns; FLTX speed vs fastest competitor: 1.60306× + +557ns +1.60× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 594.192 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 950.813 ns; FLTX speed vs fastest competitor: 1.60018× + +594ns +1.60× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 528.529 ns +Fastest competitor: qdpp qd_real (same workload): 1378.87 ns; FLTX speed vs fastest competitor: 2.60889× + +529ns +2.61× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 536.458 ns +Fastest competitor: qdpp qd_real (same workload): 969.958 ns; FLTX speed vs fastest competitor: 1.80808× + +536ns +1.81× qdreal + + +horner_polynomial + +Windows / x64 / MSVC; bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 77.8575 ns +Fastest competitor: qdpp dd_real (same workload): 77.8662 ns; FLTX speed vs fastest competitor: 1.00011× + +77.9ns +1.00× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 166.598 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 107.193 ns; FLTX speed vs fastest competitor: 0.643426× + +167ns +0.64× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 113.863 ns +Fastest competitor: qdpp dd_real (same workload): 98.3798 ns; FLTX speed vs fastest competitor: 0.86402× + +114ns +0.86× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 174.375 ns +Fastest competitor: qdpp dd_real (same workload): 97.5593 ns; FLTX speed vs fastest competitor: 0.559478× + +174ns +0.56× ddreal + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 395.633 ns +Fastest competitor: qdpp qd_real (same workload): 769.221 ns; FLTX speed vs fastest competitor: 1.94428× + +396ns +1.94× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 442.22 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 744.174 ns; FLTX speed vs fastest competitor: 1.68281× + +442ns +1.68× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 422.572 ns +Fastest competitor: qdpp qd_real (same workload): 872.013 ns; FLTX speed vs fastest competitor: 2.06358× + +423ns +2.06× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 485.675 ns +Fastest competitor: qdpp qd_real (same workload): 769.094 ns; FLTX speed vs fastest competitor: 1.58356× + +486ns +1.58× qdreal + + +newton_root + +Windows / x64 / MSVC; bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 25.7245 ns +Fastest competitor: qdpp dd_real (same workload): 42.5119 ns; FLTX speed vs fastest competitor: 1.65259× + +25.7ns +1.65× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 31.8617 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 34.7139 ns; FLTX speed vs fastest competitor: 1.08952× + +31.9ns +1.09× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 33.5429 ns +Fastest competitor: qdpp dd_real (same workload): 52.5971 ns; FLTX speed vs fastest competitor: 1.56806× + +33.5ns +1.57× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 39.8919 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 36.4933 ns; FLTX speed vs fastest competitor: 0.914805× + +39.9ns +0.91× cppdd + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 218.12 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 318.851 ns; FLTX speed vs fastest competitor: 1.46181× + +218ns +1.46× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 246.195 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 323.218 ns; FLTX speed vs fastest competitor: 1.31285× + +246ns +1.31× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 236.78 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 464.354 ns; FLTX speed vs fastest competitor: 1.96112× + +237ns +1.96× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 237.989 ns +Fastest competitor: qdpp qd_real (same workload): 437.837 ns; FLTX speed vs fastest competitor: 1.83973× + +238ns +1.84× qdreal + + +log_sum_exp + +Windows / x64 / MSVC; bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 813.789 ns +Fastest competitor: qdpp dd_real (same workload): 906.363 ns; FLTX speed vs fastest competitor: 1.11376× + +814ns +1.11× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 828.508 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 2834.92 ns; FLTX speed vs fastest competitor: 3.42172× + +829ns +3.42× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 907.746 ns +Fastest competitor: qdpp dd_real (same workload): 1761.44 ns; FLTX speed vs fastest competitor: 1.94045× + +908ns +1.94× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 979.902 ns +Fastest competitor: qdpp dd_real (same workload): 1137.87 ns; FLTX speed vs fastest competitor: 1.16121× + +980ns +1.16× ddreal + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 8562.5 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 10950 ns; FLTX speed vs fastest competitor: 1.27883× + +8,562ns +1.28× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 8950 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 11262.5 ns; FLTX speed vs fastest competitor: 1.25838× + +8,950ns +1.26× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 9212.5 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 12925 ns; FLTX speed vs fastest competitor: 1.40299× + +9,212ns +1.40× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 8837.5 ns +Fastest competitor: qdpp qd_real (same workload): 19437.5 ns; FLTX speed vs fastest competitor: 2.19943× + +8,838ns +2.20× qdreal + + +haversine + +Windows / x64 / MSVC; bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 417.312 ns +Fastest competitor: qdpp dd_real (same workload): 765.726 ns; FLTX speed vs fastest competitor: 1.8349× + +417ns +1.83× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 433.03 ns +Fastest competitor: TLFloat Quad (same workload): 4262.94 ns; FLTX speed vs fastest competitor: 9.84444× + +433ns +9.84× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 540.719 ns +Fastest competitor: qdpp dd_real (same workload): 1358.71 ns; FLTX speed vs fastest competitor: 2.51278× + +541ns +2.51× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 571.376 ns +Fastest competitor: qdpp dd_real (same workload): 954.211 ns; FLTX speed vs fastest competitor: 1.67002× + +571ns +1.67× ddreal + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4666.86 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 10237.5 ns; FLTX speed vs fastest competitor: 2.19366× + +4,667ns +2.19× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4891.65 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 10187.5 ns; FLTX speed vs fastest competitor: 2.08263× + +4,892ns +2.08× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4722.58 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 12525 ns; FLTX speed vs fastest competitor: 2.65215× + +4,723ns +2.65× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4755.87 ns +Fastest competitor: qdpp qd_real (same workload): 16325 ns; FLTX speed vs fastest competitor: 3.4326× + +4,756ns +3.43× qdreal + + diff --git a/validation/metrics/generated/performance/performance_table_compact.svg b/validation/metrics/generated/performance/performance_table_compact.svg new file mode 100644 index 0000000..10eee4d --- /dev/null +++ b/validation/metrics/generated/performance/performance_table_compact.svg @@ -0,0 +1,5620 @@ + +fltx performance +Columns identify the target platform and build toolchain. FLTX time per iteration; the second line shows FLTX speed versus the fastest available competitor for each target. + + + +Function + +bl::f128 + +bl::f256 + +Windows + +WebAssembly + +Windows + +WebAssembly + +x64 + +wasm32 + +x64 + +wasm32 + + +MSVC + + + +Clang +clang-cl + + + +GCC +MinGW-w64 + + + +Clang +Emscripten + + + +MSVC + + + +Clang +clang-cl + + + +GCC +MinGW-w64 + + + +Clang +Emscripten + + + +Arithmetic + +add + +Windows / x64 / MSVC; bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 1.91079 ns +Fastest competitor: qdpp dd_real (qdpp operator+): 1.85258 ns; FLTX speed vs fastest competitor: 0.969538× + +1.9ns +1.0× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 1.87899 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator+): 2.23647 ns; FLTX speed vs fastest competitor: 1.19025× + +1.9ns +1.2× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 1.80875 ns +Fastest competitor: qdpp dd_real (qdpp operator+): 0.925775 ns; FLTX speed vs fastest competitor: 0.511831× + +1.8ns +0.5× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 1.81625 ns +Fastest competitor: qdpp dd_real (qdpp operator+): 0.926275 ns; FLTX speed vs fastest competitor: 0.509992× + +1.8ns +0.5× ddreal + + +Windows / x64 / MSVC; bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 10.682 ns +Fastest competitor: qdpp qd_real (qdpp operator+): 23.446 ns; FLTX speed vs fastest competitor: 2.19491× + +10.7ns +2.2× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 9.49761 ns +Fastest competitor: TLFloat Octuple (TLFloat operator+): 35.8358 ns; FLTX speed vs fastest competitor: 3.77314× + +9.5ns +3.8× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 10.5169 ns +Fastest competitor: qdpp qd_real (qdpp operator+): 21.9128 ns; FLTX speed vs fastest competitor: 2.08359× + +10.5ns +2.1× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 10.1556 ns +Fastest competitor: qdpp qd_real (qdpp operator+): 22.8738 ns; FLTX speed vs fastest competitor: 2.25234× + +10.2ns +2.3× qdreal + + +subtract + +Windows / x64 / MSVC; bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 2.14333 ns +Fastest competitor: qdpp dd_real (qdpp operator-): 1.86714 ns; FLTX speed vs fastest competitor: 0.871143× + +2.1ns +0.9× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 1.87166 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator-): 2.27272 ns; FLTX speed vs fastest competitor: 1.21428× + +1.9ns +1.2× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 1.78604 ns +Fastest competitor: qdpp dd_real (qdpp operator-): 0.928556 ns; FLTX speed vs fastest competitor: 0.519896× + +1.8ns +0.5× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 1.8082 ns +Fastest competitor: qdpp dd_real (qdpp operator-): 0.91877 ns; FLTX speed vs fastest competitor: 0.508112× + +1.8ns +0.5× ddreal + + +Windows / x64 / MSVC; bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 10.6649 ns +Fastest competitor: qdpp qd_real (qdpp operator-): 25.2081 ns; FLTX speed vs fastest competitor: 2.36366× + +10.7ns +2.4× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 18.8715 ns +Fastest competitor: TLFloat Octuple (TLFloat operator-): 35.658 ns; FLTX speed vs fastest competitor: 1.88951× + +18.9ns +1.9× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 10.4109 ns +Fastest competitor: qdpp qd_real (qdpp operator-): 22.1785 ns; FLTX speed vs fastest competitor: 2.13031× + +10.4ns +2.1× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 10.0702 ns +Fastest competitor: qdpp qd_real (qdpp operator-): 23.7429 ns; FLTX speed vs fastest competitor: 2.35773× + +10.1ns +2.4× qdreal + + +multiply + +Windows / x64 / MSVC; bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 1.62518 ns +Fastest competitor: qdpp dd_real (qdpp operator*): 0.77656 ns; FLTX speed vs fastest competitor: 0.477831× + +1.6ns +0.5× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 1.19705 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator*): 2.31305 ns; FLTX speed vs fastest competitor: 1.9323× + +1.2ns +1.9× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 1.62417 ns +Fastest competitor: qdpp dd_real (qdpp operator*): 1.73313 ns; FLTX speed vs fastest competitor: 1.06709× + +1.6ns +1.1× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 1.60567 ns +Fastest competitor: qdpp dd_real (qdpp operator*): 1.75055 ns; FLTX speed vs fastest competitor: 1.09023× + +1.6ns +1.1× ddreal + + +Windows / x64 / MSVC; bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 18.8149 ns +Fastest competitor: qdpp qd_real (qdpp operator*): 19.5559 ns; FLTX speed vs fastest competitor: 1.03938× + +18.8ns +1.0× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 34.8769 ns +Fastest competitor: TLFloat Octuple (TLFloat operator*): 40.4065 ns; FLTX speed vs fastest competitor: 1.15855× + +34.9ns +1.2× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 23.1562 ns +Fastest competitor: qdpp qd_real (qdpp operator*): 36.888 ns; FLTX speed vs fastest competitor: 1.593× + +23.2ns +1.6× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 24.8619 ns +Fastest competitor: qdpp qd_real (qdpp operator*): 31.2134 ns; FLTX speed vs fastest competitor: 1.25547× + +24.9ns +1.3× qdreal + + +divide + +Windows / x64 / MSVC; bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 1.67512 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator/): 6.34251 ns; FLTX speed vs fastest competitor: 3.78629× + +1.7ns +3.8× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 1.70647 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator/): 5.34566 ns; FLTX speed vs fastest competitor: 3.13258× + +1.7ns +3.1× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 2.30438 ns +Fastest competitor: qdpp dd_real (qdpp operator/): 13.0605 ns; FLTX speed vs fastest competitor: 5.6677× + +2.3ns +5.7× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 2.52922 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator/): 5.82351 ns; FLTX speed vs fastest competitor: 2.3025× + +2.5ns +2.3× cppdd + + +Windows / x64 / MSVC; bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 80.7292 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::operator/): 118.088 ns; FLTX speed vs fastest competitor: 1.46277× + +80.7ns +1.5× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 96.0929 ns +Fastest competitor: TLFloat Octuple (TLFloat operator/): 149.171 ns; FLTX speed vs fastest competitor: 1.55236× + +96.1ns +1.6× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 107.009 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::operator/): 111.942 ns; FLTX speed vs fastest competitor: 1.0461× + +107ns +1.0× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 91.4551 ns +Fastest competitor: qdpp qd_real (qdpp operator/): 234.033 ns; FLTX speed vs fastest competitor: 2.559× + +91.5ns +2.6× qdreal + + + +IO + +to_string + +Windows / x64 / MSVC; bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 248.651 ns +Fastest competitor: qdpp dd_real (qdpp to_string): 414.195 ns; FLTX speed vs fastest competitor: 1.66576× + +249ns +1.7× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 188.426 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost number::str): 658.234 ns; FLTX speed vs fastest competitor: 3.49333× + +188ns +3.5× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 250.354 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost number::str): 425.88 ns; FLTX speed vs fastest competitor: 1.70111× + +250ns +1.7× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 293.716 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost number::str): 1160.33 ns; FLTX speed vs fastest competitor: 3.95052× + +294ns +4.0× cppdd + + +Windows / x64 / MSVC; bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 346.795 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost number::str): 489.158 ns; FLTX speed vs fastest competitor: 1.41051× + +347ns +1.4× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 290.592 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost number::str): 462.454 ns; FLTX speed vs fastest competitor: 1.59142× + +291ns +1.6× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 347.367 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost number::str): 513.613 ns; FLTX speed vs fastest competitor: 1.47859× + +347ns +1.5× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 452.208 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost number::str): 1060.81 ns; FLTX speed vs fastest competitor: 2.34584× + +452ns +2.3× mpfr64 + + +to_chars + +Windows / x64 / MSVC; bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 207.456 ns +Fastest competitor: qdpp dd_real (qdpp write): 414.475 ns; FLTX speed vs fastest competitor: 1.99789× + +207ns +2.0× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 157.448 ns +No competitor benchmark is available. + +157ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 202.26 ns +Fastest competitor: qdpp dd_real (qdpp write): 477.092 ns; FLTX speed vs fastest competitor: 2.35881× + +202ns +2.4× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 239.071 ns +Fastest competitor: qdpp dd_real (qdpp write): 1299.16 ns; FLTX speed vs fastest competitor: 5.43421× + +239ns +5.4× ddreal + + +Windows / x64 / MSVC; bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 316.133 ns +Fastest competitor: qdpp qd_real (qdpp write): 3909.2 ns; FLTX speed vs fastest competitor: 12.3657× + +316ns +12.4× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 253.748 ns +No competitor benchmark is available. + +254ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 308.155 ns +Fastest competitor: qdpp qd_real (qdpp write): 4158.92 ns; FLTX speed vs fastest competitor: 13.4962× + +308ns +13.5× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 398.892 ns +Fastest competitor: qdpp qd_real (qdpp write): 4990.36 ns; FLTX speed vs fastest competitor: 12.5106× + +399ns +12.5× qdreal + + +parse + +Windows / x64 / MSVC; bl::f128; io / parse +fltx bl::f128 (bl::parse): 226.107 ns +Fastest competitor: qdpp dd_real (qdpp read): 191.102 ns; FLTX speed vs fastest competitor: 0.845185× + +226ns +0.8× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; io / parse +fltx bl::f128 (bl::parse): 203.515 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost string constructor): 765.699 ns; FLTX speed vs fastest competitor: 3.76236× + +204ns +3.8× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; io / parse +fltx bl::f128 (bl::parse): 211.286 ns +Fastest competitor: qdpp dd_real (qdpp read): 258.245 ns; FLTX speed vs fastest competitor: 1.22225× + +211ns +1.2× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; io / parse +fltx bl::f128 (bl::parse): 256.149 ns +Fastest competitor: qdpp dd_real (qdpp read): 254.119 ns; FLTX speed vs fastest competitor: 0.992074× + +256ns +1.0× ddreal + + +Windows / x64 / MSVC; bl::f256; io / parse +fltx bl::f256 (bl::parse): 415.457 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost string constructor): 371.127 ns; FLTX speed vs fastest competitor: 0.893298× + +415ns +0.9× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; io / parse +fltx bl::f256 (bl::parse): 347.723 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost string constructor): 355.111 ns; FLTX speed vs fastest competitor: 1.02125× + +348ns +1.0× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; io / parse +fltx bl::f256 (bl::parse): 386.741 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost string constructor): 319.043 ns; FLTX speed vs fastest competitor: 0.824953× + +387ns +0.8× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; io / parse +fltx bl::f256 (bl::parse): 458.317 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (Boost string constructor): 611.369 ns; FLTX speed vs fastest competitor: 1.33394× + +458ns +1.3× mpfr64 + + + +Rounding + +floor + +Windows / x64 / MSVC; bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 1.37916 ns +Fastest competitor: qdpp dd_real (qdpp floor): 1.3169 ns; FLTX speed vs fastest competitor: 0.954857× + +1.4ns +1.0× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 1.35662 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::floor): 1.45329 ns; FLTX speed vs fastest competitor: 1.07126× + +1.4ns +1.1× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 1.07751 ns +Fastest competitor: qdpp dd_real (qdpp floor): 0.969734 ns; FLTX speed vs fastest competitor: 0.899977× + +1.1ns +0.9× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 0.815484 ns +Fastest competitor: qdpp dd_real (qdpp floor): 0.369205 ns; FLTX speed vs fastest competitor: 0.452743× + +0.82ns +0.5× ddreal + + +Windows / x64 / MSVC; bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 4.89937 ns +Fastest competitor: qdpp qd_real (qdpp floor): 2.20772 ns; FLTX speed vs fastest competitor: 0.450613× + +4.9ns +0.5× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 1.50249 ns +Fastest competitor: TLFloat Octuple (tlfloat::floor): 6.13316 ns; FLTX speed vs fastest competitor: 4.08199× + +1.5ns +4.1× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 1.3965 ns +Fastest competitor: qdpp qd_real (qdpp floor): 1.32438 ns; FLTX speed vs fastest competitor: 0.948358× + +1.4ns +0.9× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 0.990982 ns +Fastest competitor: qdpp qd_real (qdpp floor): 0.987674 ns; FLTX speed vs fastest competitor: 0.996662× + +0.99ns +1.0× qdreal + + +ceil + +Windows / x64 / MSVC; bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 1.94197 ns +Fastest competitor: qdpp dd_real (qdpp ceil): 1.3587 ns; FLTX speed vs fastest competitor: 0.699649× + +1.9ns +0.7× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 1.84257 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::ceil): 2.14701 ns; FLTX speed vs fastest competitor: 1.16523× + +1.8ns +1.2× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 1.69571 ns +Fastest competitor: qdpp dd_real (qdpp ceil): 0.924828 ns; FLTX speed vs fastest competitor: 0.545392× + +1.7ns +0.5× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 1.50478 ns +Fastest competitor: qdpp dd_real (qdpp ceil): 0.367785 ns; FLTX speed vs fastest competitor: 0.244411× + +1.5ns +0.2× ddreal + + +Windows / x64 / MSVC; bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 4.8834 ns +Fastest competitor: qdpp qd_real (qdpp ceil): 2.24042 ns; FLTX speed vs fastest competitor: 0.458782× + +4.9ns +0.5× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 1.50339 ns +Fastest competitor: TLFloat Octuple (tlfloat::ceil): 5.66597 ns; FLTX speed vs fastest competitor: 3.76879× + +1.5ns +3.8× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 1.41105 ns +Fastest competitor: qdpp qd_real (qdpp ceil): 1.32584 ns; FLTX speed vs fastest competitor: 0.939612× + +1.4ns +0.9× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 0.993219 ns +Fastest competitor: qdpp qd_real (qdpp ceil): 0.985926 ns; FLTX speed vs fastest competitor: 0.992657× + +0.99ns +1.0× qdreal + + +trunc + +Windows / x64 / MSVC; bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 3.46889 ns +Fastest competitor: qdpp dd_real (qdpp aint): 4.69882 ns; FLTX speed vs fastest competitor: 1.35456× + +3.5ns +1.4× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 2.10569 ns +Fastest competitor: TLFloat Quad (tlfloat::trunc): 2.42006 ns; FLTX speed vs fastest competitor: 1.1493× + +2.1ns +1.1× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 2.71448 ns +Fastest competitor: qdpp dd_real (qdpp aint): 3.50513 ns; FLTX speed vs fastest competitor: 1.29127× + +2.7ns +1.3× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 3.16991 ns +Fastest competitor: qdpp dd_real (qdpp aint): 0.99691 ns; FLTX speed vs fastest competitor: 0.314492× + +3.2ns +0.3× ddreal + + +Windows / x64 / MSVC; bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 6.77494 ns +Fastest competitor: qdpp qd_real (qdpp aint): 5.95564 ns; FLTX speed vs fastest competitor: 0.879069× + +6.8ns +0.9× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 4.19161 ns +Fastest competitor: TLFloat Octuple (tlfloat::trunc): 3.1163 ns; FLTX speed vs fastest competitor: 0.743462× + +4.2ns +0.7× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 2.7908 ns +Fastest competitor: qdpp qd_real (qdpp aint): 2.25171 ns; FLTX speed vs fastest competitor: 0.806833× + +2.8ns +0.8× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 2.89863 ns +Fastest competitor: qdpp qd_real (qdpp aint): 2.54546 ns; FLTX speed vs fastest competitor: 0.878158× + +2.9ns +0.9× qdreal + + +round + +Windows / x64 / MSVC; bl::f128; rounding / round +fltx bl::f128 (bl::round): 10.3034 ns +Fastest competitor: qdpp dd_real (qdpp round): 3.70324 ns; FLTX speed vs fastest competitor: 0.359419× + +10.3ns +0.4× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / round +fltx bl::f128 (bl::round): 7.46859 ns +Fastest competitor: TLFloat Quad (tlfloat::round): 3.89998 ns; FLTX speed vs fastest competitor: 0.522184× + +7.5ns +0.5× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / round +fltx bl::f128 (bl::round): 10.057 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::round): 8.8299 ns; FLTX speed vs fastest competitor: 0.877987× + +10.1ns +0.9× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / round +fltx bl::f128 (bl::round): 8.88927 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::round): 6.02385 ns; FLTX speed vs fastest competitor: 0.677654× + +8.9ns +0.7× cppdd + + +Windows / x64 / MSVC; bl::f256; rounding / round +fltx bl::f256 (bl::round): 12.8936 ns +Fastest competitor: qdpp qd_real (qdpp round): 5.57858 ns; FLTX speed vs fastest competitor: 0.432661× + +12.9ns +0.4× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / round +fltx bl::f256 (bl::round): 8.86299 ns +Fastest competitor: TLFloat Octuple (tlfloat::round): 6.85535 ns; FLTX speed vs fastest competitor: 0.773481× + +8.9ns +0.8× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / round +fltx bl::f256 (bl::round): 10.2056 ns +Fastest competitor: qdpp qd_real (qdpp round): 11.54 ns; FLTX speed vs fastest competitor: 1.13075× + +10.2ns +1.1× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / round +fltx bl::f256 (bl::round): 12.1799 ns +Fastest competitor: qdpp qd_real (qdpp round): 8.58679 ns; FLTX speed vs fastest competitor: 0.704998× + +12.2ns +0.7× qdreal + + +roundeven + +Windows / x64 / MSVC; bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 9.58426 ns +Fastest competitor: TLFloat Quad (tlfloat::rint): 64.6002 ns; FLTX speed vs fastest competitor: 6.74024× + +9.6ns +6.7× tlquad + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 9.69684 ns +Fastest competitor: TLFloat Quad (tlfloat::rint): 4.10474 ns; FLTX speed vs fastest competitor: 0.423307× + +9.7ns +0.4× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 7.79609 ns +Fastest competitor: TLFloat Quad (tlfloat::rint): 10.3311 ns; FLTX speed vs fastest competitor: 1.32516× + +7.8ns +1.3× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 10.0275 ns +Fastest competitor: TLFloat Quad (tlfloat::rint): 8.38234 ns; FLTX speed vs fastest competitor: 0.835938× + +10.0ns +0.8× tlquad + + +Windows / x64 / MSVC; bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 9.1154 ns +Fastest competitor: TLFloat Octuple (tlfloat::rint): 199.524 ns; FLTX speed vs fastest competitor: 21.8887× + +9.1ns +21.9× tloct + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 8.30821 ns +Fastest competitor: TLFloat Octuple (tlfloat::rint): 12.6358 ns; FLTX speed vs fastest competitor: 1.52088× + +8.3ns +1.5× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 9.1184 ns +Fastest competitor: TLFloat Octuple (tlfloat::rint): 64.4318 ns; FLTX speed vs fastest competitor: 7.06612× + +9.1ns +7.1× tloct + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 8.06417 ns +Fastest competitor: TLFloat Octuple (tlfloat::rint): 18.2826 ns; FLTX speed vs fastest competitor: 2.26714× + +8.1ns +2.3× tloct + + +lround + +Windows / x64 / MSVC; bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 4.35415 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lround): 29.282 ns; FLTX speed vs fastest competitor: 6.72509× + +4.4ns +6.7× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 4.24203 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lround): 10.1122 ns; FLTX speed vs fastest competitor: 2.38381× + +4.2ns +2.4× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 3.39413 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lround): 19.3465 ns; FLTX speed vs fastest competitor: 5.69998× + +3.4ns +5.7× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 6.69177 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lround): 10.7527 ns; FLTX speed vs fastest competitor: 1.60685× + +6.7ns +1.6× cppdd + + +Windows / x64 / MSVC; bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 7.20756 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lround): 124.829 ns; FLTX speed vs fastest competitor: 17.3192× + +7.2ns +17.3× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 6.65399 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lround): 121.459 ns; FLTX speed vs fastest competitor: 18.2535× + +6.7ns +18.3× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 5.08619 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lround): 164.38 ns; FLTX speed vs fastest competitor: 32.3189× + +5.1ns +32.3× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 6.62969 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lround): 191.093 ns; FLTX speed vs fastest competitor: 28.8238× + +6.6ns +28.8× mpfr64 + + +llround + +Windows / x64 / MSVC; bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 4.36912 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::llround): 444.263 ns; FLTX speed vs fastest competitor: 101.682× + +4.4ns +101.7× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 3.97495 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::llround): 384.928 ns; FLTX speed vs fastest competitor: 96.8386× + +4.0ns +96.8× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 3.22594 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::llround): 160.266 ns; FLTX speed vs fastest competitor: 49.6804× + +3.2ns +49.7× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 6.05281 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::llround): 622.516 ns; FLTX speed vs fastest competitor: 102.847× + +6.1ns +102.8× cppdd + + +Windows / x64 / MSVC; bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 6.77522 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::llround): 216.196 ns; FLTX speed vs fastest competitor: 31.9099× + +6.8ns +31.9× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 6.32177 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::llround): 210.54 ns; FLTX speed vs fastest competitor: 33.304× + +6.3ns +33.3× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 4.80782 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::llround): 261.572 ns; FLTX speed vs fastest competitor: 54.4056× + +4.8ns +54.4× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 6.50047 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::llround): 320.553 ns; FLTX speed vs fastest competitor: 49.3123× + +6.5ns +49.3× mpfr64 + + +round_decimals + +Windows / x64 / MSVC; bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 83.5909 ns +No competitor benchmark is available. + +83.6ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 78.6011 ns +No competitor benchmark is available. + +78.6ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 79.3607 ns +No competitor benchmark is available. + +79.4ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 93.1183 ns +No competitor benchmark is available. + +93.1ns + + +Windows / x64 / MSVC; bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 129.347 ns +No competitor benchmark is available. + +129ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 117.815 ns +No competitor benchmark is available. + +118ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 127.53 ns +No competitor benchmark is available. + +128ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 145.747 ns +No competitor benchmark is available. + +146ns + + +round_significant + +Windows / x64 / MSVC; bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 129.05 ns +No competitor benchmark is available. + +129ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 110.71 ns +No competitor benchmark is available. + +111ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 113.732 ns +No competitor benchmark is available. + +114ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 144.794 ns +No competitor benchmark is available. + +145ns + + +Windows / x64 / MSVC; bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 194.192 ns +No competitor benchmark is available. + +194ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 161.127 ns +No competitor benchmark is available. + +161ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 163.259 ns +No competitor benchmark is available. + +163ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 207.988 ns +No competitor benchmark is available. + +208ns + + + +Remainders + +fmod + +Windows / x64 / MSVC; bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 17.9201 ns +Fastest competitor: qdpp dd_real (qdpp fmod): 18.9451 ns; FLTX speed vs fastest competitor: 1.0572× + +17.9ns +1.1× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 18.8037 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmod): 36.4585 ns; FLTX speed vs fastest competitor: 1.9389× + +18.8ns +1.9× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 17.7275 ns +Fastest competitor: qdpp dd_real (qdpp fmod): 23.9968 ns; FLTX speed vs fastest competitor: 1.35365× + +17.7ns +1.4× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 20.5907 ns +Fastest competitor: qdpp dd_real (qdpp fmod): 29.541 ns; FLTX speed vs fastest competitor: 1.43468× + +20.6ns +1.4× ddreal + + +Windows / x64 / MSVC; bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 67.9641 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fmod): 196.748 ns; FLTX speed vs fastest competitor: 2.89488× + +68.0ns +2.9× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 69.1068 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fmod): 192.213 ns; FLTX speed vs fastest competitor: 2.78139× + +69.1ns +2.8× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 69.5695 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fmod): 290.109 ns; FLTX speed vs fastest competitor: 4.17006× + +69.6ns +4.2× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 77.9743 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fmod): 219.011 ns; FLTX speed vs fastest competitor: 2.80876× + +78.0ns +2.8× mpfr64 + + +remainder + +Windows / x64 / MSVC; bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 21.7801 ns +Fastest competitor: qdpp dd_real (qdpp drem): 19.3133 ns; FLTX speed vs fastest competitor: 0.88674× + +21.8ns +0.9× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 24.2622 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::remainder): 41.4982 ns; FLTX speed vs fastest competitor: 1.71041× + +24.3ns +1.7× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 19.847 ns +Fastest competitor: qdpp dd_real (qdpp drem): 26.2902 ns; FLTX speed vs fastest competitor: 1.32464× + +19.8ns +1.3× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 22.8242 ns +Fastest competitor: qdpp dd_real (qdpp drem): 26.5187 ns; FLTX speed vs fastest competitor: 1.16187× + +22.8ns +1.2× ddreal + + +Windows / x64 / MSVC; bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 98.2699 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::remainder): 235.955 ns; FLTX speed vs fastest competitor: 2.4011× + +98.3ns +2.4× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 100.492 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::remainder): 234.1 ns; FLTX speed vs fastest competitor: 2.32955× + +100ns +2.3× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 99.1109 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::remainder): 330.367 ns; FLTX speed vs fastest competitor: 3.33331× + +99.1ns +3.3× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 105.609 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::remainder): 251.396 ns; FLTX speed vs fastest competitor: 2.38043× + +106ns +2.4× mpfr64 + + +remquo + +Windows / x64 / MSVC; bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 21.1064 ns +Fastest competitor: qdpp dd_real (qdpp divrem): 19.8318 ns; FLTX speed vs fastest competitor: 0.93961× + +21.1ns +0.9× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 23.5961 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::remquo): 41.3991 ns; FLTX speed vs fastest competitor: 1.75449× + +23.6ns +1.8× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 20.014 ns +Fastest competitor: qdpp dd_real (qdpp divrem): 26.3925 ns; FLTX speed vs fastest competitor: 1.3187× + +20.0ns +1.3× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 22.8127 ns +Fastest competitor: qdpp dd_real (qdpp divrem): 27.0835 ns; FLTX speed vs fastest competitor: 1.18722× + +22.8ns +1.2× ddreal + + +Windows / x64 / MSVC; bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 97.3067 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::remquo): 264.58 ns; FLTX speed vs fastest competitor: 2.71903× + +97.3ns +2.7× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 100.222 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::remquo): 266.07 ns; FLTX speed vs fastest competitor: 2.65482× + +100ns +2.7× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 99.9921 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::remquo): 367.607 ns; FLTX speed vs fastest competitor: 3.67636× + +100.0ns +3.7× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 104.359 ns +Fastest competitor: qdpp qd_real (qdpp divrem): 322.93 ns; FLTX speed vs fastest competitor: 3.09442× + +104ns +3.1× qdreal + + + +Float Utils + +abs + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 3.49038 ns +Fastest competitor: TLFloat Quad (tlfloat::abs): 2.80707 ns; FLTX speed vs fastest competitor: 0.804229× + +3.5ns +0.8× tlquad + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 3.0568 ns +Fastest competitor: TLFloat Quad (tlfloat::abs): 0.411061 ns; FLTX speed vs fastest competitor: 0.134474× + +3.1ns +0.1× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 2.86146 ns +Fastest competitor: TLFloat Quad (tlfloat::abs): 2.5541 ns; FLTX speed vs fastest competitor: 0.892586× + +2.9ns +0.9× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 0.809662 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::abs): 1.22884 ns; FLTX speed vs fastest competitor: 1.51772× + +0.81ns +1.5× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 2.64271 ns +Fastest competitor: qdpp qd_real (qdpp abs): 1.96985 ns; FLTX speed vs fastest competitor: 0.745391× + +2.6ns +0.7× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 2.09395 ns +Fastest competitor: TLFloat Octuple (tlfloat::abs): 0.99307 ns; FLTX speed vs fastest competitor: 0.474256× + +2.1ns +0.5× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 1.58214 ns +Fastest competitor: qdpp qd_real (qdpp abs): 1.41304 ns; FLTX speed vs fastest competitor: 0.893118× + +1.6ns +0.9× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 3.21138 ns +Fastest competitor: qdpp qd_real (qdpp abs): 3.23644 ns; FLTX speed vs fastest competitor: 1.0078× + +3.2ns +1.0× qdreal + + +fabs + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 3.5051 ns +Fastest competitor: TLFloat Quad (tlfloat::abs): 2.78878 ns; FLTX speed vs fastest competitor: 0.795636× + +3.5ns +0.8× tlquad + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 3.08984 ns +Fastest competitor: TLFloat Quad (tlfloat::abs): 0.41078 ns; FLTX speed vs fastest competitor: 0.132945× + +3.1ns +0.1× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 3.08741 ns +Fastest competitor: TLFloat Quad (tlfloat::abs): 2.68222 ns; FLTX speed vs fastest competitor: 0.868762× + +3.1ns +0.9× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 0.807183 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fabs): 0.650049 ns; FLTX speed vs fastest competitor: 0.80533× + +0.81ns +0.8× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 2.65172 ns +Fastest competitor: qdpp qd_real (qdpp fabs): 1.96316 ns; FLTX speed vs fastest competitor: 0.740335× + +2.7ns +0.7× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 1.97269 ns +Fastest competitor: TLFloat Octuple (tlfloat::abs): 0.994173 ns; FLTX speed vs fastest competitor: 0.503968× + +2.0ns +0.5× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 1.60057 ns +Fastest competitor: qdpp qd_real (qdpp fabs): 1.45002 ns; FLTX speed vs fastest competitor: 0.905943× + +1.6ns +0.9× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 3.09469 ns +Fastest competitor: qdpp qd_real (qdpp fabs): 3.14259 ns; FLTX speed vs fastest competitor: 1.01548× + +3.1ns +1.0× qdreal + + +fma + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 5.83692 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fma): 11.8845 ns; FLTX speed vs fastest competitor: 2.03609× + +5.8ns +2.0× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 6.64062 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fma): 15.2796 ns; FLTX speed vs fastest competitor: 2.30093× + +6.6ns +2.3× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 7.98208 ns +Fastest competitor: TLFloat Quad (tlfloat::fma): 78.4143 ns; FLTX speed vs fastest competitor: 9.82379× + +8.0ns +9.8× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 7.87433 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fma): 15.8139 ns; FLTX speed vs fastest competitor: 2.00829× + +7.9ns +2.0× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 24.5592 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fma): 84.1772 ns; FLTX speed vs fastest competitor: 3.42753× + +24.6ns +3.4× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 21.1584 ns +Fastest competitor: TLFloat Octuple (tlfloat::fma): 77.089 ns; FLTX speed vs fastest competitor: 3.64342× + +21.2ns +3.6× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 38.1624 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fma): 117.898 ns; FLTX speed vs fastest competitor: 3.08937× + +38.2ns +3.1× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 31.483 ns +Fastest competitor: TLFloat Octuple (tlfloat::fma): 144.882 ns; FLTX speed vs fastest competitor: 4.6019× + +31.5ns +4.6× tloct + + +recip + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 24.3161 ns +Fastest competitor: qdpp dd_real (qdpp inv): 10.8702 ns; FLTX speed vs fastest competitor: 0.447038× + +24.3ns +0.4× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 38.0556 ns +No competitor benchmark is available. + +38.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 31.6961 ns +Fastest competitor: qdpp dd_real (qdpp inv): 12.9238 ns; FLTX speed vs fastest competitor: 0.407742× + +31.7ns +0.4× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 48.1667 ns +Fastest competitor: qdpp dd_real (qdpp inv): 13.5669 ns; FLTX speed vs fastest competitor: 0.281666× + +48.2ns +0.3× ddreal + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 74.4954 ns +Fastest competitor: qdpp qd_real (qdpp inv): 256.54 ns; FLTX speed vs fastest competitor: 3.4437× + +74.5ns +3.4× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 86.2881 ns +No competitor benchmark is available. + +86.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 100.988 ns +Fastest competitor: qdpp qd_real (qdpp inv): 302.473 ns; FLTX speed vs fastest competitor: 2.99513× + +101ns +3.0× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 87.6943 ns +Fastest competitor: qdpp qd_real (qdpp inv): 231.255 ns; FLTX speed vs fastest competitor: 2.63706× + +87.7ns +2.6× qdreal + + +fmin + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 3.17768 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmin): 6.42807 ns; FLTX speed vs fastest competitor: 2.02288× + +3.2ns +2.0× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 0.751459 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmin): 2.37038 ns; FLTX speed vs fastest competitor: 3.15438× + +0.75ns +3.2× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 2.32319 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmin): 2.41885 ns; FLTX speed vs fastest competitor: 1.04118× + +2.3ns +1.0× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 2.92236 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmin): 2.91298 ns; FLTX speed vs fastest competitor: 0.996788× + +2.9ns +1.0× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 3.40624 ns +Fastest competitor: qdpp qd_real (qdpp min): 1.67499 ns; FLTX speed vs fastest competitor: 0.491741× + +3.4ns +0.5× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 1.0465 ns +Fastest competitor: TLFloat Octuple (tlfloat::fmin): 6.41838 ns; FLTX speed vs fastest competitor: 6.13318× + +1.0ns +6.1× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 1.52865 ns +Fastest competitor: qdpp qd_real (qdpp min): 1.26635 ns; FLTX speed vs fastest competitor: 0.828412× + +1.5ns +0.8× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 1.16717 ns +Fastest competitor: qdpp qd_real (qdpp min): 3.31478 ns; FLTX speed vs fastest competitor: 2.84× + +1.2ns +2.8× qdreal + + +fmax + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 3.23997 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmax): 6.45185 ns; FLTX speed vs fastest competitor: 1.99133× + +3.2ns +2.0× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 0.703579 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmax): 2.48715 ns; FLTX speed vs fastest competitor: 3.535× + +0.70ns +3.5× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 2.45674 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmax): 2.30832 ns; FLTX speed vs fastest competitor: 0.939588× + +2.5ns +0.9× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 2.93782 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fmax): 2.92382 ns; FLTX speed vs fastest competitor: 0.995237× + +2.9ns +1.0× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 3.64993 ns +Fastest competitor: qdpp qd_real (qdpp max): 1.43515 ns; FLTX speed vs fastest competitor: 0.393201× + +3.6ns +0.4× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 1.00174 ns +Fastest competitor: TLFloat Octuple (tlfloat::fmax): 6.85888 ns; FLTX speed vs fastest competitor: 6.84695× + +1.0ns +6.8× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 1.63233 ns +Fastest competitor: qdpp qd_real (qdpp max): 1.30518 ns; FLTX speed vs fastest competitor: 0.799577× + +1.6ns +0.8× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 1.18018 ns +Fastest competitor: qdpp qd_real (qdpp max): 1.54158 ns; FLTX speed vs fastest competitor: 1.30623× + +1.2ns +1.3× qdreal + + +fdim + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 3.76641 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fdim): 8.27204 ns; FLTX speed vs fastest competitor: 2.19627× + +3.8ns +2.2× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 2.72889 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fdim): 3.27793 ns; FLTX speed vs fastest competitor: 1.20119× + +2.7ns +1.2× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 3.24721 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fdim): 5.16863 ns; FLTX speed vs fastest competitor: 1.59171× + +3.2ns +1.6× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 3.02938 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::fdim): 3.36202 ns; FLTX speed vs fastest competitor: 1.10981× + +3.0ns +1.1× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 8.22296 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fdim): 43.8145 ns; FLTX speed vs fastest competitor: 5.32831× + +8.2ns +5.3× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 8.44294 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fdim): 43.0752 ns; FLTX speed vs fastest competitor: 5.10192× + +8.4ns +5.1× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 5.47204 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::fdim): 50.6821 ns; FLTX speed vs fastest competitor: 9.26202× + +5.5ns +9.3× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 7.06187 ns +Fastest competitor: TLFloat Octuple (tlfloat::fdim): 57.901 ns; FLTX speed vs fastest competitor: 8.19911× + +7.1ns +8.2× tloct + + +copysign + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 1.63566 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::copysign): 2.61795 ns; FLTX speed vs fastest competitor: 1.60054× + +1.6ns +1.6× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 0.455948 ns +Fastest competitor: TLFloat Quad (tlfloat::copysign): 0.504689 ns; FLTX speed vs fastest competitor: 1.1069× + +0.46ns +1.1× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 1.02946 ns +Fastest competitor: TLFloat Quad (tlfloat::copysign): 4.71045 ns; FLTX speed vs fastest competitor: 4.57567× + +1.0ns +4.6× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 0.38506 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::copysign): 0.871318 ns; FLTX speed vs fastest competitor: 2.26281× + +0.39ns +2.3× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.863137 ns +Fastest competitor: TLFloat Octuple (tlfloat::copysign): 12.2147 ns; FLTX speed vs fastest competitor: 14.1515× + +0.86ns +14.2× tloct + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.739969 ns +Fastest competitor: TLFloat Octuple (tlfloat::copysign): 0.998089 ns; FLTX speed vs fastest competitor: 1.34883× + +0.74ns +1.3× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.682812 ns +Fastest competitor: TLFloat Octuple (tlfloat::copysign): 7.62296 ns; FLTX speed vs fastest competitor: 11.1641× + +0.68ns +11.2× tloct + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.698238 ns +Fastest competitor: TLFloat Octuple (tlfloat::copysign): 8.74343 ns; FLTX speed vs fastest competitor: 12.5221× + +0.70ns +12.5× tloct + + +ldexp + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 1.96195 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 4.07124 ns; FLTX speed vs fastest competitor: 2.0751× + +2.0ns +2.1× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 1.44267 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::ldexp): 3.67517 ns; FLTX speed vs fastest competitor: 2.54748× + +1.4ns +2.5× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 1.26917 ns +Fastest competitor: TLFloat Quad (tlfloat::ldexp): 8.84702 ns; FLTX speed vs fastest competitor: 6.97073× + +1.3ns +7.0× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 1.81107 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 1.90183 ns; FLTX speed vs fastest competitor: 1.05011× + +1.8ns +1.1× ddreal + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 3.9405 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 8.62326 ns; FLTX speed vs fastest competitor: 2.18837× + +3.9ns +2.2× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 3.19728 ns +Fastest competitor: TLFloat Octuple (tlfloat::ldexp): 31.536 ns; FLTX speed vs fastest competitor: 9.86339× + +3.2ns +9.9× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 1.7041 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 18.5557 ns; FLTX speed vs fastest competitor: 10.8889× + +1.7ns +10.9× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 2.94238 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 3.90885 ns; FLTX speed vs fastest competitor: 1.32846× + +2.9ns +1.3× qdreal + + +scalbn + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 2.18228 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 4.11514 ns; FLTX speed vs fastest competitor: 1.8857× + +2.2ns +1.9× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 1.36969 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::scalbn): 3.69068 ns; FLTX speed vs fastest competitor: 2.69454× + +1.4ns +2.7× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 1.24655 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 9.13654 ns; FLTX speed vs fastest competitor: 7.32944× + +1.2ns +7.3× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 1.88026 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 1.90441 ns; FLTX speed vs fastest competitor: 1.01285× + +1.9ns +1.0× ddreal + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 3.95131 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 8.60484 ns; FLTX speed vs fastest competitor: 2.17772× + +4.0ns +2.2× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 3.19997 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::scalbn): 39.5182 ns; FLTX speed vs fastest competitor: 12.3496× + +3.2ns +12.3× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 1.70617 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 18.5655 ns; FLTX speed vs fastest competitor: 10.8813× + +1.7ns +10.9× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 2.95771 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 3.90942 ns; FLTX speed vs fastest competitor: 1.32177× + +3.0ns +1.3× qdreal + + +scalbln + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 2.18793 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 4.0956 ns; FLTX speed vs fastest competitor: 1.87191× + +2.2ns +1.9× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 1.3716 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::scalbln): 3.69046 ns; FLTX speed vs fastest competitor: 2.69062× + +1.4ns +2.7× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 1.24324 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 9.14169 ns; FLTX speed vs fastest competitor: 7.35309× + +1.2ns +7.4× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 1.88556 ns +Fastest competitor: qdpp dd_real (qdpp ldexp): 1.90528 ns; FLTX speed vs fastest competitor: 1.01045× + +1.9ns +1.0× ddreal + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 3.94342 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 8.60996 ns; FLTX speed vs fastest competitor: 2.18337× + +3.9ns +2.2× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 3.18991 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::scalbln): 38.6361 ns; FLTX speed vs fastest competitor: 12.112× + +3.2ns +12.1× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 1.69767 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 18.5555 ns; FLTX speed vs fastest competitor: 10.93× + +1.7ns +10.9× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 2.97003 ns +Fastest competitor: qdpp qd_real (qdpp ldexp): 3.92315 ns; FLTX speed vs fastest competitor: 1.32091× + +3.0ns +1.3× qdreal + + +frexp + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 2.65722 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::frexp): 4.20069 ns; FLTX speed vs fastest competitor: 1.58086× + +2.7ns +1.6× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 2.46171 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::frexp): 4.01157 ns; FLTX speed vs fastest competitor: 1.62959× + +2.5ns +1.6× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 1.83405 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::frexp): 9.04801 ns; FLTX speed vs fastest competitor: 4.93335× + +1.8ns +4.9× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 3.61004 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::frexp): 2.79358 ns; FLTX speed vs fastest competitor: 0.773836× + +3.6ns +0.8× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 7.27916 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::frexp): 67.5671 ns; FLTX speed vs fastest competitor: 9.28227× + +7.3ns +9.3× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 13.9496 ns +Fastest competitor: TLFloat Octuple (tlfloat::frexp): 43.6797 ns; FLTX speed vs fastest competitor: 3.13125× + +13.9ns +3.1× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 10.6662 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::frexp): 98.385 ns; FLTX speed vs fastest competitor: 9.22396× + +10.7ns +9.2× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 12.4056 ns +Fastest competitor: TLFloat Octuple (tlfloat::frexp): 43.5039 ns; FLTX speed vs fastest competitor: 3.5068× + +12.4ns +3.5× tloct + + +modf + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 5.88679 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::modf): 15.434 ns; FLTX speed vs fastest competitor: 2.62181× + +5.9ns +2.6× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 5.87441 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::modf): 7.70278 ns; FLTX speed vs fastest competitor: 1.31124× + +5.9ns +1.3× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 5.54592 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::modf): 11.4233 ns; FLTX speed vs fastest competitor: 2.05976× + +5.5ns +2.1× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 6.92745 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::modf): 7.03247 ns; FLTX speed vs fastest competitor: 1.01516× + +6.9ns +1.0× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 18.3871 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::modf): 177.681 ns; FLTX speed vs fastest competitor: 9.66332× + +18.4ns +9.7× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 20.2264 ns +Fastest competitor: TLFloat Octuple (tlfloat::modf): 42.958 ns; FLTX speed vs fastest competitor: 2.12386× + +20.2ns +2.1× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 14.7099 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::modf): 235.215 ns; FLTX speed vs fastest competitor: 15.9902× + +14.7ns +16.0× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 13.8637 ns +Fastest competitor: TLFloat Octuple (tlfloat::modf): 71.2451 ns; FLTX speed vs fastest competitor: 5.13898× + +13.9ns +5.1× tloct + + +ilogb + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 2.3211 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::ilogb): 5.62646 ns; FLTX speed vs fastest competitor: 2.42405× + +2.3ns +2.4× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 1.39743 ns +Fastest competitor: TLFloat Quad (tlfloat::ilogb): 0.640567 ns; FLTX speed vs fastest competitor: 0.458389× + +1.4ns +0.5× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 1.46864 ns +Fastest competitor: TLFloat Quad (tlfloat::ilogb): 1.76001 ns; FLTX speed vs fastest competitor: 1.1984× + +1.5ns +1.2× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 2.0829 ns +Fastest competitor: TLFloat Quad (tlfloat::ilogb): 1.56506 ns; FLTX speed vs fastest competitor: 0.751384× + +2.1ns +0.8× tlquad + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 1.62101 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::ilogb): 33.5868 ns; FLTX speed vs fastest competitor: 20.7197× + +1.6ns +20.7× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 1.0807 ns +Fastest competitor: TLFloat Octuple (tlfloat::ilogb): 0.66535 ns; FLTX speed vs fastest competitor: 0.615667× + +1.1ns +0.6× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 1.06621 ns +Fastest competitor: TLFloat Octuple (tlfloat::ilogb): 31.9308 ns; FLTX speed vs fastest competitor: 29.9479× + +1.1ns +29.9× tloct + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 1.34499 ns +Fastest competitor: TLFloat Octuple (tlfloat::ilogb): 1.08038 ns; FLTX speed vs fastest competitor: 0.803264× + +1.3ns +0.8× tloct + + +logb + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 2.50964 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::logb): 79.411 ns; FLTX speed vs fastest competitor: 31.6424× + +2.5ns +31.6× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 1.28841 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::logb): 71.8909 ns; FLTX speed vs fastest competitor: 55.7983× + +1.3ns +55.8× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 1.47026 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::logb): 30.1004 ns; FLTX speed vs fastest competitor: 20.4728× + +1.5ns +20.5× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 1.91492 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::logb): 97.2009 ns; FLTX speed vs fastest competitor: 50.7599× + +1.9ns +50.8× cppdd + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 2.23711 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::logb): 75.6673 ns; FLTX speed vs fastest competitor: 33.8238× + +2.2ns +33.8× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 0.973943 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::logb): 72.1151 ns; FLTX speed vs fastest competitor: 74.0444× + +0.97ns +74.0× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 1.07789 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::logb): 98.8904 ns; FLTX speed vs fastest competitor: 91.7441× + +1.1ns +91.7× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 1.25767 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::logb): 123.499 ns; FLTX speed vs fastest competitor: 98.1962× + +1.3ns +98.2× mpfr64 + + +nextafter + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 5.86143 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::math::nextafter): 63.67 ns; FLTX speed vs fastest competitor: 10.8625× + +5.9ns +10.9× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 4.31561 ns +Fastest competitor: TLFloat Quad (tlfloat::nextafter): 7.14233 ns; FLTX speed vs fastest competitor: 1.655× + +4.3ns +1.7× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 5.00101 ns +Fastest competitor: TLFloat Quad (tlfloat::nextafter): 18.1561 ns; FLTX speed vs fastest competitor: 3.63048× + +5.0ns +3.6× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 5.43675 ns +Fastest competitor: TLFloat Quad (tlfloat::nextafter): 14.3367 ns; FLTX speed vs fastest competitor: 2.637× + +5.4ns +2.6× tlquad + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 6.86741 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::math::nextafter): 504.421 ns; FLTX speed vs fastest competitor: 73.4514× + +6.9ns +73.5× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 5.72377 ns +Fastest competitor: TLFloat Octuple (tlfloat::nextafter): 17.8975 ns; FLTX speed vs fastest competitor: 3.12688× + +5.7ns +3.1× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 4.64485 ns +Fastest competitor: TLFloat Octuple (tlfloat::nextafter): 163.661 ns; FLTX speed vs fastest competitor: 35.2349× + +4.6ns +35.2× tloct + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 6.69939 ns +Fastest competitor: TLFloat Octuple (tlfloat::nextafter): 18.1117 ns; FLTX speed vs fastest competitor: 2.70348× + +6.7ns +2.7× tloct + + +nexttoward + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 5.85153 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::math::nextafter (same type)): 63.7042 ns; FLTX speed vs fastest competitor: 10.8868× + +5.9ns +10.9× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 4.2923 ns +Fastest competitor: TLFloat Quad (tlfloat::nextafter (same type)): 7.14883 ns; FLTX speed vs fastest competitor: 1.6655× + +4.3ns +1.7× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 4.66885 ns +Fastest competitor: TLFloat Quad (tlfloat::nextafter (same type)): 18.4029 ns; FLTX speed vs fastest competitor: 3.94163× + +4.7ns +3.9× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 5.43457 ns +Fastest competitor: TLFloat Quad (tlfloat::nextafter (same type)): 14.2849 ns; FLTX speed vs fastest competitor: 2.62853× + +5.4ns +2.6× tlquad + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 6.86161 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::math::nextafter (same type)): 507.908 ns; FLTX speed vs fastest competitor: 74.0216× + +6.9ns +74.0× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 5.74084 ns +Fastest competitor: TLFloat Octuple (tlfloat::nextafter (same type)): 17.8678 ns; FLTX speed vs fastest competitor: 3.1124× + +5.7ns +3.1× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 4.4435 ns +Fastest competitor: TLFloat Octuple (tlfloat::nextafter (same type)): 163.738 ns; FLTX speed vs fastest competitor: 36.8489× + +4.4ns +36.8× tloct + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 6.69703 ns +Fastest competitor: TLFloat Octuple (tlfloat::nextafter (same type)): 18.1838 ns; FLTX speed vs fastest competitor: 2.71521× + +6.7ns +2.7× tloct + + + +Roots & powers + +sqr + +Windows / x64 / MSVC; bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 1.61301 ns +Fastest competitor: qdpp dd_real (qdpp sqr): 0.7778 ns; FLTX speed vs fastest competitor: 0.482203× + +1.6ns +0.5× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 1.09598 ns +No competitor benchmark is available. + +1.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 1.22628 ns +Fastest competitor: qdpp dd_real (qdpp sqr): 1.40871 ns; FLTX speed vs fastest competitor: 1.14877× + +1.2ns +1.1× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 1.20486 ns +Fastest competitor: qdpp dd_real (qdpp sqr): 1.2401 ns; FLTX speed vs fastest competitor: 1.02925× + +1.2ns +1.0× ddreal + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 18.2537 ns +Fastest competitor: qdpp qd_real (qdpp sqr): 12.5128 ns; FLTX speed vs fastest competitor: 0.685495× + +18.3ns +0.7× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 23.2207 ns +No competitor benchmark is available. + +23.2ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 22.7539 ns +Fastest competitor: qdpp qd_real (qdpp sqr): 15.0369 ns; FLTX speed vs fastest competitor: 0.660849× + +22.8ns +0.7× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 22.5432 ns +Fastest competitor: qdpp qd_real (qdpp sqr): 14.665 ns; FLTX speed vs fastest competitor: 0.65053× + +22.5ns +0.7× qdreal + + +sqrt + +Windows / x64 / MSVC; bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 4.10067 ns +Fastest competitor: qdpp dd_real (qdpp sqrt): 4.97443 ns; FLTX speed vs fastest competitor: 1.21308× + +4.1ns +1.2× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 3.70714 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::sqrt): 2.94991 ns; FLTX speed vs fastest competitor: 0.795737× + +3.7ns +0.8× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 5.10632 ns +Fastest competitor: qdpp dd_real (qdpp sqrt): 5.38507 ns; FLTX speed vs fastest competitor: 1.05459× + +5.1ns +1.1× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 5.67276 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::sqrt): 3.11686 ns; FLTX speed vs fastest competitor: 0.549444× + +5.7ns +0.5× cppdd + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 122.968 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sqrt): 136.289 ns; FLTX speed vs fastest competitor: 1.10833× + +123ns +1.1× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 109.785 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sqrt): 134.028 ns; FLTX speed vs fastest competitor: 1.22082× + +110ns +1.2× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 120.25 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sqrt): 148.713 ns; FLTX speed vs fastest competitor: 1.2367× + +120ns +1.2× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 119.519 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sqrt): 280.593 ns; FLTX speed vs fastest competitor: 2.34769× + +120ns +2.3× mpfr64 + + +cbrt + +Windows / x64 / MSVC; bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 21.9841 ns +Fastest competitor: qdpp dd_real (qdpp nroot): 65.9985 ns; FLTX speed vs fastest competitor: 3.0021× + +22.0ns +3.0× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 22.5072 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::cbrt): 352.351 ns; FLTX speed vs fastest competitor: 15.655× + +22.5ns +15.7× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 71.8913 ns +Fastest competitor: qdpp dd_real (qdpp nroot): 150.863 ns; FLTX speed vs fastest competitor: 2.09849× + +71.9ns +2.1× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 18.8709 ns +Fastest competitor: qdpp dd_real (qdpp nroot): 75.548 ns; FLTX speed vs fastest competitor: 4.00341× + +18.9ns +4.0× ddreal + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 344.022 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cbrt): 426.13 ns; FLTX speed vs fastest competitor: 1.23867× + +344ns +1.2× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 341.947 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cbrt): 423.345 ns; FLTX speed vs fastest competitor: 1.23804× + +342ns +1.2× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 382.334 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cbrt): 483.858 ns; FLTX speed vs fastest competitor: 1.26554× + +382ns +1.3× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 351.211 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cbrt): 766.292 ns; FLTX speed vs fastest competitor: 2.18186× + +351ns +2.2× mpfr64 + + +hypot + +Windows / x64 / MSVC; bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 8.88267 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::hypot): 57.436 ns; FLTX speed vs fastest competitor: 6.46607× + +8.9ns +6.5× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 10.2858 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::hypot): 61.0524 ns; FLTX speed vs fastest competitor: 5.93559× + +10.3ns +5.9× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 9.09156 ns +Fastest competitor: TLFloat Quad (tlfloat::hypot): 210.51 ns; FLTX speed vs fastest competitor: 23.1545× + +9.1ns +23.2× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 10.8778 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::hypot): 59.552 ns; FLTX speed vs fastest competitor: 5.47466× + +10.9ns +5.5× cppdd + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 172.3 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::hypot): 461.187 ns; FLTX speed vs fastest competitor: 2.67665× + +172ns +2.7× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 165.495 ns +Fastest competitor: TLFloat Octuple (tlfloat::hypot): 295.633 ns; FLTX speed vs fastest competitor: 1.78635× + +165ns +1.8× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 175.204 ns +Fastest competitor: TLFloat Octuple (tlfloat::hypot): 570.325 ns; FLTX speed vs fastest competitor: 3.2552× + +175ns +3.3× tloct + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 171.975 ns +Fastest competitor: TLFloat Octuple (tlfloat::hypot): 766.048 ns; FLTX speed vs fastest competitor: 4.45443× + +172ns +4.5× tloct + + +pow + +Windows / x64 / MSVC; bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 202.39 ns +Fastest competitor: qdpp dd_real (qdpp pow): 219.944 ns; FLTX speed vs fastest competitor: 1.08673× + +202ns +1.1× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 192.667 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::pow): 602.698 ns; FLTX speed vs fastest competitor: 3.12819× + +193ns +3.1× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 220.272 ns +Fastest competitor: qdpp dd_real (qdpp pow): 462.314 ns; FLTX speed vs fastest competitor: 2.09884× + +220ns +2.1× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 241.208 ns +Fastest competitor: qdpp dd_real (qdpp pow): 300.917 ns; FLTX speed vs fastest competitor: 1.24754× + +241ns +1.2× ddreal + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2498.29 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::pow): 3035.84 ns; FLTX speed vs fastest competitor: 1.21517× + +2,498ns +1.2× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2682.28 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::pow): 3051.17 ns; FLTX speed vs fastest competitor: 1.13753× + +2,682ns +1.1× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2712.35 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::pow): 3571.94 ns; FLTX speed vs fastest competitor: 1.31692× + +2,712ns +1.3× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2689.88 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::pow): 7383.79 ns; FLTX speed vs fastest competitor: 2.74503× + +2,690ns +2.7× mpfr64 + + +ipow + +Windows / x64 / MSVC; bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 15.294 ns +Fastest competitor: qdpp dd_real (qdpp npwr): 7.29433 ns; FLTX speed vs fastest competitor: 0.476941× + +15.3ns +0.5× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 24.0789 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::pow(value, int)): 9.00757 ns; FLTX speed vs fastest competitor: 0.374085× + +24.1ns +0.4× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 18.1927 ns +Fastest competitor: qdpp dd_real (qdpp npwr): 10.9644 ns; FLTX speed vs fastest competitor: 0.602681× + +18.2ns +0.6× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 26.3451 ns +Fastest competitor: qdpp dd_real (qdpp npwr): 7.76323 ns; FLTX speed vs fastest competitor: 0.294675× + +26.3ns +0.3× ddreal + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 111.142 ns +Fastest competitor: qdpp qd_real (qdpp npwr): 114.941 ns; FLTX speed vs fastest competitor: 1.03419× + +111ns +1.0× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 127.69 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::pow(value, int)): 172.241 ns; FLTX speed vs fastest competitor: 1.3489× + +128ns +1.3× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 121.609 ns +Fastest competitor: qdpp qd_real (qdpp npwr): 144.394 ns; FLTX speed vs fastest competitor: 1.18736× + +122ns +1.2× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 109.827 ns +Fastest competitor: qdpp qd_real (qdpp npwr): 136.661 ns; FLTX speed vs fastest competitor: 1.24432× + +110ns +1.2× qdreal + + + +Exponentials + +exp + +Windows / x64 / MSVC; bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 110.719 ns +Fastest competitor: qdpp dd_real (qdpp exp): 103.412 ns; FLTX speed vs fastest competitor: 0.934001× + +111ns +0.9× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 92.1242 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::exp): 336.888 ns; FLTX speed vs fastest competitor: 3.65689× + +92.1ns +3.7× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 108.212 ns +Fastest competitor: qdpp dd_real (qdpp exp): 234.339 ns; FLTX speed vs fastest competitor: 2.16556× + +108ns +2.2× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 118.134 ns +Fastest competitor: qdpp dd_real (qdpp exp): 148.027 ns; FLTX speed vs fastest competitor: 1.25304× + +118ns +1.3× ddreal + + +Windows / x64 / MSVC; bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 980.414 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::exp): 1258.71 ns; FLTX speed vs fastest competitor: 1.28385× + +980ns +1.3× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 1016.02 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::exp): 1267.8 ns; FLTX speed vs fastest competitor: 1.24782× + +1,016ns +1.2× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 1077.92 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::exp): 1343.54 ns; FLTX speed vs fastest competitor: 1.24642× + +1,078ns +1.2× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 1031.05 ns +Fastest competitor: qdpp qd_real (qdpp exp): 2209.72 ns; FLTX speed vs fastest competitor: 2.14316× + +1,031ns +2.1× qdreal + + +exp2 + +Windows / x64 / MSVC; bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 96.3823 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::exp2): 831.795 ns; FLTX speed vs fastest competitor: 8.63017× + +96.4ns +8.6× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 90.7549 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::exp2): 750.627 ns; FLTX speed vs fastest competitor: 8.27092× + +90.8ns +8.3× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 101.78 ns +Fastest competitor: TLFloat Quad (tlfloat::exp2): 2704.91 ns; FLTX speed vs fastest competitor: 26.5759× + +102ns +26.6× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 111.647 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::exp2): 701.05 ns; FLTX speed vs fastest competitor: 6.27918× + +112ns +6.3× cppdd + + +Windows / x64 / MSVC; bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 831.172 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::exp2): 1483.37 ns; FLTX speed vs fastest competitor: 1.78467× + +831ns +1.8× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 863.643 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::exp2): 1486.17 ns; FLTX speed vs fastest competitor: 1.72081× + +864ns +1.7× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 908.691 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::exp2): 1682.67 ns; FLTX speed vs fastest competitor: 1.85175× + +909ns +1.9× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 873.73 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::exp2): 3612.37 ns; FLTX speed vs fastest competitor: 4.13442× + +874ns +4.1× mpfr64 + + +expm1 + +Windows / x64 / MSVC; bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 112.675 ns +Fastest competitor: qdpp dd_real (qdpp expm1): 105.247 ns; FLTX speed vs fastest competitor: 0.934079× + +113ns +0.9× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 94.4391 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::expm1): 350.183 ns; FLTX speed vs fastest competitor: 3.70803× + +94.4ns +3.7× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 109.521 ns +Fastest competitor: qdpp dd_real (qdpp expm1): 233.833 ns; FLTX speed vs fastest competitor: 2.13504× + +110ns +2.1× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 118.245 ns +Fastest competitor: qdpp dd_real (qdpp expm1): 150.351 ns; FLTX speed vs fastest competitor: 1.27151× + +118ns +1.3× ddreal + + +Windows / x64 / MSVC; bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 987.109 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::expm1): 1395.62 ns; FLTX speed vs fastest competitor: 1.41384× + +987ns +1.4× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 1015.77 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::expm1): 1391.13 ns; FLTX speed vs fastest competitor: 1.36954× + +1,016ns +1.4× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 1072.97 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::expm1): 1528.14 ns; FLTX speed vs fastest competitor: 1.42421× + +1,073ns +1.4× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 1032.97 ns +Fastest competitor: qdpp qd_real (qdpp expm1): 2187.16 ns; FLTX speed vs fastest competitor: 2.11735× + +1,033ns +2.1× qdreal + + + +Logarithms + +log + +Windows / x64 / MSVC; bl::f128; logarithms / log +fltx bl::f128 (bl::log): 125.307 ns +Fastest competitor: qdpp dd_real (qdpp log): 123.657 ns; FLTX speed vs fastest competitor: 0.986826× + +125ns +1.0× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log +fltx bl::f128 (bl::log): 123.146 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::log): 373.067 ns; FLTX speed vs fastest competitor: 3.02947× + +123ns +3.0× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log +fltx bl::f128 (bl::log): 145.587 ns +Fastest competitor: qdpp dd_real (qdpp log): 293.665 ns; FLTX speed vs fastest competitor: 2.01711× + +146ns +2.0× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log +fltx bl::f128 (bl::log): 155.311 ns +Fastest competitor: qdpp dd_real (qdpp log): 175.199 ns; FLTX speed vs fastest competitor: 1.12805× + +155ns +1.1× ddreal + + +Windows / x64 / MSVC; bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1662.64 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log): 2383.54 ns; FLTX speed vs fastest competitor: 1.43359× + +1,663ns +1.4× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1790.35 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log): 2383.08 ns; FLTX speed vs fastest competitor: 1.33107× + +1,790ns +1.3× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1781.66 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log): 2809.55 ns; FLTX speed vs fastest competitor: 1.57693× + +1,782ns +1.6× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1719.1 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log): 5508.35 ns; FLTX speed vs fastest competitor: 3.2042× + +1,719ns +3.2× mpfr64 + + +log2 + +Windows / x64 / MSVC; bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 116.858 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::log2): 419.419 ns; FLTX speed vs fastest competitor: 3.58915× + +117ns +3.6× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 127.66 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::log2): 384.391 ns; FLTX speed vs fastest competitor: 3.01106× + +128ns +3.0× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 150.886 ns +Fastest competitor: TLFloat Quad (tlfloat::log2): 2333.86 ns; FLTX speed vs fastest competitor: 15.4678× + +151ns +15.5× tlquad + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 162.621 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::log2): 356.126 ns; FLTX speed vs fastest competitor: 2.18991× + +163ns +2.2× cppdd + + +Windows / x64 / MSVC; bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1672.73 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log2): 2624.71 ns; FLTX speed vs fastest competitor: 1.56911× + +1,673ns +1.6× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1827.21 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log2): 2601.2 ns; FLTX speed vs fastest competitor: 1.42359× + +1,827ns +1.4× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1830.2 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log2): 3085.58 ns; FLTX speed vs fastest competitor: 1.68593× + +1,830ns +1.7× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1771.11 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log2): 5881.69 ns; FLTX speed vs fastest competitor: 3.3209× + +1,771ns +3.3× mpfr64 + + +log10 + +Windows / x64 / MSVC; bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 129.796 ns +Fastest competitor: qdpp dd_real (qdpp log10): 145.685 ns; FLTX speed vs fastest competitor: 1.12242× + +130ns +1.1× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 127.637 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::log10): 384.521 ns; FLTX speed vs fastest competitor: 3.01262× + +128ns +3.0× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 149.884 ns +Fastest competitor: qdpp dd_real (qdpp log10): 326.046 ns; FLTX speed vs fastest competitor: 2.17533× + +150ns +2.2× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 162.693 ns +Fastest competitor: qdpp dd_real (qdpp log10): 201.318 ns; FLTX speed vs fastest competitor: 1.23741× + +163ns +1.2× ddreal + + +Windows / x64 / MSVC; bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1686.99 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log10): 4590.48 ns; FLTX speed vs fastest competitor: 2.7211× + +1,687ns +2.7× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1847.01 ns +Fastest competitor: TLFloat Octuple (tlfloat::log10): 3089 ns; FLTX speed vs fastest competitor: 1.67243× + +1,847ns +1.7× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1826.37 ns +Fastest competitor: TLFloat Octuple (tlfloat::log10): 5439.55 ns; FLTX speed vs fastest competitor: 2.97834× + +1,826ns +3.0× tloct + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1766.21 ns +Fastest competitor: TLFloat Octuple (tlfloat::log10): 6771 ns; FLTX speed vs fastest competitor: 3.83363× + +1,766ns +3.8× tloct + + +log1p + +Windows / x64 / MSVC; bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 137.565 ns +Fastest competitor: qdpp dd_real (qdpp log1p): 128.55 ns; FLTX speed vs fastest competitor: 0.934464× + +138ns +0.9× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 124.467 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::log1p): 490.902 ns; FLTX speed vs fastest competitor: 3.94402× + +124ns +3.9× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 151.186 ns +Fastest competitor: qdpp dd_real (qdpp log1p): 276.846 ns; FLTX speed vs fastest competitor: 1.83117× + +151ns +1.8× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 157.91 ns +Fastest competitor: qdpp dd_real (qdpp log1p): 171.381 ns; FLTX speed vs fastest competitor: 1.08531× + +158ns +1.1× ddreal + + +Windows / x64 / MSVC; bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1691.62 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log1p): 2443.77 ns; FLTX speed vs fastest competitor: 1.44463× + +1,692ns +1.4× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1818.96 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log1p): 2469.51 ns; FLTX speed vs fastest competitor: 1.35764× + +1,819ns +1.4× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1835 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log1p): 2912.24 ns; FLTX speed vs fastest competitor: 1.58705× + +1,835ns +1.6× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1756.62 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::log1p): 5577.34 ns; FLTX speed vs fastest competitor: 3.17504× + +1,757ns +3.2× mpfr64 + + + +Trigonometric + +sin + +Windows / x64 / MSVC; bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 103.626 ns +Fastest competitor: qdpp dd_real (qdpp sin): 115.764 ns; FLTX speed vs fastest competitor: 1.11713× + +104ns +1.1× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 84.7717 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::sin): 570.27 ns; FLTX speed vs fastest competitor: 6.72712× + +84.8ns +6.7× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 101.18 ns +Fastest competitor: qdpp dd_real (qdpp sin): 243.431 ns; FLTX speed vs fastest competitor: 2.40593× + +101ns +2.4× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 107.26 ns +Fastest competitor: qdpp dd_real (qdpp sin): 161.906 ns; FLTX speed vs fastest competitor: 1.50948× + +107ns +1.5× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 883.662 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sin): 1689.9 ns; FLTX speed vs fastest competitor: 1.91239× + +884ns +1.9× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 912.858 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sin): 1694.14 ns; FLTX speed vs fastest competitor: 1.85586× + +913ns +1.9× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 897.83 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sin): 2134.67 ns; FLTX speed vs fastest competitor: 2.37759× + +898ns +2.4× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 887.88 ns +Fastest competitor: qdpp qd_real (qdpp sin): 1946.52 ns; FLTX speed vs fastest competitor: 2.19233× + +888ns +2.2× qdreal + + +cos + +Windows / x64 / MSVC; bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 104.239 ns +Fastest competitor: qdpp dd_real (qdpp cos): 115.868 ns; FLTX speed vs fastest competitor: 1.11156× + +104ns +1.1× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 84.2705 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::cos): 566.364 ns; FLTX speed vs fastest competitor: 6.72078× + +84.3ns +6.7× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 101.139 ns +Fastest competitor: qdpp dd_real (qdpp cos): 243.707 ns; FLTX speed vs fastest competitor: 2.40962× + +101ns +2.4× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 106.95 ns +Fastest competitor: qdpp dd_real (qdpp cos): 163.544 ns; FLTX speed vs fastest competitor: 1.52916× + +107ns +1.5× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 882.48 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cos): 1303.46 ns; FLTX speed vs fastest competitor: 1.47704× + +882ns +1.5× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 919.912 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cos): 1307.34 ns; FLTX speed vs fastest competitor: 1.42116× + +920ns +1.4× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 897.49 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cos): 1681.12 ns; FLTX speed vs fastest competitor: 1.87313× + +897ns +1.9× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 861.611 ns +Fastest competitor: qdpp qd_real (qdpp cos): 1955.88 ns; FLTX speed vs fastest competitor: 2.27002× + +862ns +2.3× qdreal + + +sincos + +Windows / x64 / MSVC; bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 92.8188 ns +Fastest competitor: qdpp dd_real (qdpp sincos): 133.87 ns; FLTX speed vs fastest competitor: 1.44227× + +92.8ns +1.4× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 94.9389 ns +Fastest competitor: TLFloat Quad (tlfloat::sincos): 1333.02 ns; FLTX speed vs fastest competitor: 14.0408× + +94.9ns +14.0× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 107.069 ns +Fastest competitor: qdpp dd_real (qdpp sincos): 239.1 ns; FLTX speed vs fastest competitor: 2.23314× + +107ns +2.2× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 116.825 ns +Fastest competitor: qdpp dd_real (qdpp sincos): 166.795 ns; FLTX speed vs fastest competitor: 1.42774× + +117ns +1.4× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1175.64 ns +Fastest competitor: qdpp qd_real (qdpp sincos): 1935.41 ns; FLTX speed vs fastest competitor: 1.64626× + +1,176ns +1.6× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1018.66 ns +Fastest competitor: TLFloat Octuple (tlfloat::sincos): 5237.74 ns; FLTX speed vs fastest competitor: 5.14178× + +1,019ns +5.1× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1114.88 ns +Fastest competitor: qdpp qd_real (qdpp sincos): 2723.68 ns; FLTX speed vs fastest competitor: 2.44303× + +1,115ns +2.4× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1061.68 ns +Fastest competitor: qdpp qd_real (qdpp sincos): 2099.07 ns; FLTX speed vs fastest competitor: 1.97712× + +1,062ns +2.0× qdreal + + +tan + +Windows / x64 / MSVC; bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 107.13 ns +Fastest competitor: qdpp dd_real (qdpp tan): 152.951 ns; FLTX speed vs fastest competitor: 1.42771× + +107ns +1.4× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 95.8887 ns +Fastest competitor: TLFloat Quad (tlfloat::tan): 819.132 ns; FLTX speed vs fastest competitor: 8.54254× + +95.9ns +8.5× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 107.743 ns +Fastest competitor: qdpp dd_real (qdpp tan): 262.259 ns; FLTX speed vs fastest competitor: 2.43412× + +108ns +2.4× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 116.664 ns +Fastest competitor: qdpp dd_real (qdpp tan): 185.874 ns; FLTX speed vs fastest competitor: 1.59325× + +117ns +1.6× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1113.92 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tan): 1892.21 ns; FLTX speed vs fastest competitor: 1.6987× + +1,114ns +1.7× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1106.86 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tan): 1905.1 ns; FLTX speed vs fastest competitor: 1.72117× + +1,107ns +1.7× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1208.59 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tan): 2387.06 ns; FLTX speed vs fastest competitor: 1.97507× + +1,209ns +2.0× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1122.64 ns +Fastest competitor: qdpp qd_real (qdpp tan): 2338.09 ns; FLTX speed vs fastest competitor: 2.08266× + +1,123ns +2.1× qdreal + + +asin + +Windows / x64 / MSVC; bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 166.086 ns +Fastest competitor: qdpp dd_real (qdpp asin): 247.043 ns; FLTX speed vs fastest competitor: 1.48744× + +166ns +1.5× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 157.237 ns +Fastest competitor: TLFloat Quad (tlfloat::asin): 1359.89 ns; FLTX speed vs fastest competitor: 8.64863× + +157ns +8.6× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 189.262 ns +Fastest competitor: qdpp dd_real (qdpp asin): 402.836 ns; FLTX speed vs fastest competitor: 2.12846× + +189ns +2.1× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 196.67 ns +Fastest competitor: qdpp dd_real (qdpp asin): 286.813 ns; FLTX speed vs fastest competitor: 1.45835× + +197ns +1.5× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1334.21 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::asin): 6068.02 ns; FLTX speed vs fastest competitor: 4.54803× + +1,334ns +4.5× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1404.51 ns +Fastest competitor: TLFloat Octuple (tlfloat::asin): 5038.43 ns; FLTX speed vs fastest competitor: 3.58732× + +1,405ns +3.6× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1399.9 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::asin): 6991.8 ns; FLTX speed vs fastest competitor: 4.99449× + +1,400ns +5.0× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1337.76 ns +Fastest competitor: qdpp qd_real (qdpp asin): 8641.21 ns; FLTX speed vs fastest competitor: 6.45946× + +1,338ns +6.5× qdreal + + +acos + +Windows / x64 / MSVC; bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 170.123 ns +Fastest competitor: qdpp dd_real (qdpp acos): 245.747 ns; FLTX speed vs fastest competitor: 1.44452× + +170ns +1.4× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 161.717 ns +Fastest competitor: TLFloat Quad (tlfloat::acos): 1364.84 ns; FLTX speed vs fastest competitor: 8.43971× + +162ns +8.4× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 194.31 ns +Fastest competitor: qdpp dd_real (qdpp acos): 412.385 ns; FLTX speed vs fastest competitor: 2.1223× + +194ns +2.1× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 202.151 ns +Fastest competitor: qdpp dd_real (qdpp acos): 287.901 ns; FLTX speed vs fastest competitor: 1.42419× + +202ns +1.4× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1347.52 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::acos): 6267.09 ns; FLTX speed vs fastest competitor: 4.65084× + +1,348ns +4.7× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1424.22 ns +Fastest competitor: TLFloat Octuple (tlfloat::acos): 5074.12 ns; FLTX speed vs fastest competitor: 3.56274× + +1,424ns +3.6× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1417.69 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::acos): 7174.76 ns; FLTX speed vs fastest competitor: 5.06087× + +1,418ns +5.1× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1382.99 ns +Fastest competitor: qdpp qd_real (qdpp acos): 8697.95 ns; FLTX speed vs fastest competitor: 6.28923× + +1,383ns +6.3× qdreal + + +atan + +Windows / x64 / MSVC; bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 121.963 ns +Fastest competitor: qdpp dd_real (qdpp atan): 182.216 ns; FLTX speed vs fastest competitor: 1.49403× + +122ns +1.5× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 109.273 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::atan): 326.14 ns; FLTX speed vs fastest competitor: 2.98463× + +109ns +3.0× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 136.95 ns +Fastest competitor: qdpp dd_real (qdpp atan): 314.777 ns; FLTX speed vs fastest competitor: 2.29849× + +137ns +2.3× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 142.458 ns +Fastest competitor: qdpp dd_real (qdpp atan): 206.599 ns; FLTX speed vs fastest competitor: 1.45025× + +142ns +1.5× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 880.122 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan): 1993.77 ns; FLTX speed vs fastest competitor: 2.26533× + +880ns +2.3× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 921.322 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan): 2006.21 ns; FLTX speed vs fastest competitor: 2.17754× + +921ns +2.2× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 908.442 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan): 3097.07 ns; FLTX speed vs fastest competitor: 3.40921× + +908ns +3.4× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 880.642 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan): 3805.27 ns; FLTX speed vs fastest competitor: 4.32102× + +881ns +4.3× mpfr64 + + +atan2 + +Windows / x64 / MSVC; bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 118.433 ns +Fastest competitor: qdpp dd_real (qdpp atan2): 178.384 ns; FLTX speed vs fastest competitor: 1.5062× + +118ns +1.5× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 116.193 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::atan2): 331.362 ns; FLTX speed vs fastest competitor: 2.85183× + +116ns +2.9× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 144.076 ns +Fastest competitor: qdpp dd_real (qdpp atan2): 316.929 ns; FLTX speed vs fastest competitor: 2.19974× + +144ns +2.2× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 148.253 ns +Fastest competitor: qdpp dd_real (qdpp atan2): 206.55 ns; FLTX speed vs fastest competitor: 1.39323× + +148ns +1.4× ddreal + + +Windows / x64 / MSVC; bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 940.441 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan2): 2047.5 ns; FLTX speed vs fastest competitor: 2.17717× + +940ns +2.2× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 983.062 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan2): 2055.47 ns; FLTX speed vs fastest competitor: 2.09088× + +983ns +2.1× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 972.873 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan2): 3143.98 ns; FLTX speed vs fastest competitor: 3.23164× + +973ns +3.2× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 934.31 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atan2): 3973.93 ns; FLTX speed vs fastest competitor: 4.25333× + +934ns +4.3× mpfr64 + + + +Hyperbolic + +sinh + +Windows / x64 / MSVC; bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 131.424 ns +Fastest competitor: qdpp dd_real (qdpp sinh): 135.219 ns; FLTX speed vs fastest competitor: 1.02887× + +131ns +1.0× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 106.427 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::sinh): 366.781 ns; FLTX speed vs fastest competitor: 3.44631× + +106ns +3.4× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 124.423 ns +Fastest competitor: qdpp dd_real (qdpp sinh): 276.196 ns; FLTX speed vs fastest competitor: 2.21982× + +124ns +2.2× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 135.136 ns +Fastest competitor: qdpp dd_real (qdpp sinh): 184.023 ns; FLTX speed vs fastest competitor: 1.36175× + +135ns +1.4× ddreal + + +Windows / x64 / MSVC; bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1213.07 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sinh): 1511.41 ns; FLTX speed vs fastest competitor: 1.24594× + +1,213ns +1.2× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1293.57 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sinh): 1489.93 ns; FLTX speed vs fastest competitor: 1.15179× + +1,294ns +1.2× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1361.43 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::sinh): 1596.13 ns; FLTX speed vs fastest competitor: 1.17239× + +1,361ns +1.2× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1332.44 ns +Fastest competitor: qdpp qd_real (qdpp sinh): 2505.13 ns; FLTX speed vs fastest competitor: 1.88011× + +1,332ns +1.9× qdreal + + +cosh + +Windows / x64 / MSVC; bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 132.581 ns +Fastest competitor: qdpp dd_real (qdpp cosh): 135.222 ns; FLTX speed vs fastest competitor: 1.01992× + +133ns +1.0× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 105.861 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::cosh): 367.151 ns; FLTX speed vs fastest competitor: 3.46825× + +106ns +3.5× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 123.617 ns +Fastest competitor: qdpp dd_real (qdpp cosh): 274.185 ns; FLTX speed vs fastest competitor: 2.21803× + +124ns +2.2× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 134.441 ns +Fastest competitor: qdpp dd_real (qdpp cosh): 183.207 ns; FLTX speed vs fastest competitor: 1.36274× + +134ns +1.4× ddreal + + +Windows / x64 / MSVC; bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1212.47 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cosh): 1459.24 ns; FLTX speed vs fastest competitor: 1.20353× + +1,212ns +1.2× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1291.94 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cosh): 1466.31 ns; FLTX speed vs fastest competitor: 1.13497× + +1,292ns +1.1× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1360.87 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::cosh): 1566.42 ns; FLTX speed vs fastest competitor: 1.15105× + +1,361ns +1.2× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1325.9 ns +Fastest competitor: qdpp qd_real (qdpp cosh): 2486.67 ns; FLTX speed vs fastest competitor: 1.87546× + +1,326ns +1.9× qdreal + + +tanh + +Windows / x64 / MSVC; bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 140.08 ns +Fastest competitor: qdpp dd_real (qdpp tanh): 139.045 ns; FLTX speed vs fastest competitor: 0.992613× + +140ns +1.0× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 111.744 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::tanh): 384.342 ns; FLTX speed vs fastest competitor: 3.4395× + +112ns +3.4× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 129.335 ns +Fastest competitor: qdpp dd_real (qdpp tanh): 281.332 ns; FLTX speed vs fastest competitor: 2.17523× + +129ns +2.2× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 141.668 ns +Fastest competitor: qdpp dd_real (qdpp tanh): 187.547 ns; FLTX speed vs fastest competitor: 1.32384× + +142ns +1.3× ddreal + + +Windows / x64 / MSVC; bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1196.43 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tanh): 1527.75 ns; FLTX speed vs fastest competitor: 1.27693× + +1,196ns +1.3× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1271.83 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tanh): 1518.64 ns; FLTX speed vs fastest competitor: 1.19405× + +1,272ns +1.2× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1315.51 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tanh): 1645.38 ns; FLTX speed vs fastest competitor: 1.25075× + +1,316ns +1.3× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1277.46 ns +Fastest competitor: qdpp qd_real (qdpp tanh): 2509.47 ns; FLTX speed vs fastest competitor: 1.96443× + +1,277ns +2.0× qdreal + + +asinh + +Windows / x64 / MSVC; bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 131.335 ns +Fastest competitor: qdpp dd_real (qdpp asinh): 165.631 ns; FLTX speed vs fastest competitor: 1.26113× + +131ns +1.3× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 119.742 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::asinh): 653.753 ns; FLTX speed vs fastest competitor: 5.45966× + +120ns +5.5× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 136.161 ns +Fastest competitor: qdpp dd_real (qdpp asinh): 320.78 ns; FLTX speed vs fastest competitor: 2.35588× + +136ns +2.4× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 144.785 ns +Fastest competitor: qdpp dd_real (qdpp asinh): 205.776 ns; FLTX speed vs fastest competitor: 1.42125× + +145ns +1.4× ddreal + + +Windows / x64 / MSVC; bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2549.76 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::asinh): 6188.96 ns; FLTX speed vs fastest competitor: 2.42728× + +2,550ns +2.4× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2693.24 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::asinh): 6233.59 ns; FLTX speed vs fastest competitor: 2.31454× + +2,693ns +2.3× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2757.85 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::asinh): 7274.85 ns; FLTX speed vs fastest competitor: 2.63788× + +2,758ns +2.6× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2636.52 ns +Fastest competitor: qdpp qd_real (qdpp asinh): 6687.6 ns; FLTX speed vs fastest competitor: 2.53652× + +2,637ns +2.5× qdreal + + +acosh + +Windows / x64 / MSVC; bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 142.783 ns +Fastest competitor: qdpp dd_real (qdpp acosh): 153.666 ns; FLTX speed vs fastest competitor: 1.07622× + +143ns +1.1× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 133.261 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::acosh): 714.185 ns; FLTX speed vs fastest competitor: 5.35929× + +133ns +5.4× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 162.831 ns +Fastest competitor: qdpp dd_real (qdpp acosh): 318.565 ns; FLTX speed vs fastest competitor: 1.95642× + +163ns +2.0× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 169.055 ns +Fastest competitor: qdpp dd_real (qdpp acosh): 199.987 ns; FLTX speed vs fastest competitor: 1.18297× + +169ns +1.2× ddreal + + +Windows / x64 / MSVC; bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2348.8 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::acosh): 3722.3 ns; FLTX speed vs fastest competitor: 1.58476× + +2,349ns +1.6× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2491.58 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::acosh): 3746.19 ns; FLTX speed vs fastest competitor: 1.50354× + +2,492ns +1.5× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2547.8 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::acosh): 4438.53 ns; FLTX speed vs fastest competitor: 1.7421× + +2,548ns +1.7× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2438.57 ns +Fastest competitor: qdpp qd_real (qdpp acosh): 7321.39 ns; FLTX speed vs fastest competitor: 3.00232× + +2,439ns +3.0× qdreal + + +atanh + +Windows / x64 / MSVC; bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 142.824 ns +Fastest competitor: qdpp dd_real (qdpp atanh): 159.94 ns; FLTX speed vs fastest competitor: 1.11984× + +143ns +1.1× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 129.86 ns +Fastest competitor: TLFloat Quad (tlfloat::atanh): 953.75 ns; FLTX speed vs fastest competitor: 7.34445× + +130ns +7.3× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 160.863 ns +Fastest competitor: qdpp dd_real (qdpp atanh): 318.091 ns; FLTX speed vs fastest competitor: 1.9774× + +161ns +2.0× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 168.142 ns +Fastest competitor: qdpp dd_real (qdpp atanh): 206.475 ns; FLTX speed vs fastest competitor: 1.22798× + +168ns +1.2× ddreal + + +Windows / x64 / MSVC; bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2158.37 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atanh): 2931.9 ns; FLTX speed vs fastest competitor: 1.35838× + +2,158ns +1.4× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2341.65 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atanh): 2952.25 ns; FLTX speed vs fastest competitor: 1.26075× + +2,342ns +1.3× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2427.34 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atanh): 3489.84 ns; FLTX speed vs fastest competitor: 1.43772× + +2,427ns +1.4× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2280.52 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::atanh): 6536.38 ns; FLTX speed vs fastest competitor: 2.86618× + +2,281ns +2.9× mpfr64 + + + +Special + +erfc + +Windows / x64 / MSVC; bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 561.045 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erfc): 1210.6 ns; FLTX speed vs fastest competitor: 2.15776× + +561ns +2.2× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 553.598 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erfc): 1101.59 ns; FLTX speed vs fastest competitor: 1.98987× + +554ns +2.0× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 790.72 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erfc): 7994.84 ns; FLTX speed vs fastest competitor: 10.1108× + +791ns +10.1× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 809.465 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erfc): 903.315 ns; FLTX speed vs fastest competitor: 1.11594× + +809ns +1.1× cppdd + + +Windows / x64 / MSVC; bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 8904.79 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erfc): 27628.1 ns; FLTX speed vs fastest competitor: 3.10262× + +8,905ns +3.1× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 10510.9 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erfc): 27447.7 ns; FLTX speed vs fastest competitor: 2.61134× + +10,511ns +2.6× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 12796.1 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erfc): 44818.8 ns; FLTX speed vs fastest competitor: 3.50253× + +12,796ns +3.5× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 10046.1 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erfc): 81827.3 ns; FLTX speed vs fastest competitor: 8.14519× + +10,046ns +8.1× mpfr64 + + +erf + +Windows / x64 / MSVC; bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 571.553 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erf): 1228.37 ns; FLTX speed vs fastest competitor: 2.14918× + +572ns +2.1× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 556.742 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erf): 1109.35 ns; FLTX speed vs fastest competitor: 1.99258× + +557ns +2.0× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 788.588 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erf): 8003.05 ns; FLTX speed vs fastest competitor: 10.1486× + +789ns +10.1× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 810.342 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::erf): 917.346 ns; FLTX speed vs fastest competitor: 1.13205× + +810ns +1.1× cppdd + + +Windows / x64 / MSVC; bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 8938.28 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erf): 16748.4 ns; FLTX speed vs fastest competitor: 1.87379× + +8,938ns +1.9× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 10458.6 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erf): 16671.1 ns; FLTX speed vs fastest competitor: 1.59401× + +10,459ns +1.6× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 12755.5 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erf): 27657 ns; FLTX speed vs fastest competitor: 2.16825× + +12,755ns +2.2× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 15377.3 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::erf): 38046.9 ns; FLTX speed vs fastest competitor: 2.47422× + +15,377ns +2.5× mpfr64 + + +tgamma + +Windows / x64 / MSVC; bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 472.696 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::tgamma): 2136.86 ns; FLTX speed vs fastest competitor: 4.52057× + +473ns +4.5× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 468.578 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::tgamma): 1898.19 ns; FLTX speed vs fastest competitor: 4.05096× + +469ns +4.1× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 561.075 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::tgamma): 17561.7 ns; FLTX speed vs fastest competitor: 31.3002× + +561ns +31.3× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 590.748 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::tgamma): 1885.98 ns; FLTX speed vs fastest competitor: 3.19253× + +591ns +3.2× cppdd + + +Windows / x64 / MSVC; bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 9276.56 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tgamma): 14727.3 ns; FLTX speed vs fastest competitor: 1.58759× + +9,277ns +1.6× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 10653.9 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tgamma): 14798.4 ns; FLTX speed vs fastest competitor: 1.38902× + +10,654ns +1.4× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 10132.8 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tgamma): 20492.2 ns; FLTX speed vs fastest competitor: 2.02236× + +10,133ns +2.0× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 9843.75 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::tgamma): 32862.5 ns; FLTX speed vs fastest competitor: 3.33841× + +9,844ns +3.3× mpfr64 + + +lgamma + +Windows / x64 / MSVC; bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 533.375 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lgamma): 2926.17 ns; FLTX speed vs fastest competitor: 5.48615× + +533ns +5.5× cppdd + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 533.018 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lgamma): 2623.1 ns; FLTX speed vs fastest competitor: 4.92123× + +533ns +4.9× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 616.427 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lgamma): 21707 ns; FLTX speed vs fastest competitor: 35.2143× + +616ns +35.2× cppdd + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 676.522 ns +Fastest competitor: boost::multiprecision::cpp_double_double (boost::multiprecision::lgamma): 2432.45 ns; FLTX speed vs fastest competitor: 3.59552× + +677ns +3.6× cppdd + + +Windows / x64 / MSVC; bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 8275.68 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lgamma): 12619.5 ns; FLTX speed vs fastest competitor: 1.52489× + +8,276ns +1.5× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 9634.38 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lgamma): 12676.6 ns; FLTX speed vs fastest competitor: 1.31576× + +9,634ns +1.3× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 9141.41 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lgamma): 17618.8 ns; FLTX speed vs fastest competitor: 1.92736× + +9,141ns +1.9× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 10612.5 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (boost::multiprecision::lgamma): 29853.1 ns; FLTX speed vs fastest competitor: 2.81302× + +10,612ns +2.8× mpfr64 + + + +Comparisons + +equal + +Windows / x64 / MSVC; bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 0.686876 ns +Fastest competitor: qdpp dd_real (qdpp operator==): 0.543185 ns; FLTX speed vs fastest competitor: 0.790805× + +0.69ns +0.8× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 0.653358 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator==): 0.817757 ns; FLTX speed vs fastest competitor: 1.25162× + +0.65ns +1.3× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 0.949037 ns +Fastest competitor: qdpp dd_real (qdpp operator==): 0.450268 ns; FLTX speed vs fastest competitor: 0.474447× + +0.95ns +0.5× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 1.10905 ns +Fastest competitor: qdpp dd_real (qdpp operator==): 0.802459 ns; FLTX speed vs fastest competitor: 0.723553× + +1.1ns +0.7× ddreal + + +Windows / x64 / MSVC; bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.776943 ns +Fastest competitor: qdpp qd_real (qdpp operator==): 1.04503 ns; FLTX speed vs fastest competitor: 1.34505× + +0.78ns +1.3× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.733802 ns +Fastest competitor: TLFloat Octuple (TLFloat operator==): 4.23755 ns; FLTX speed vs fastest competitor: 5.77479× + +0.73ns +5.8× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.666876 ns +Fastest competitor: qdpp qd_real (qdpp operator==): 0.497504 ns; FLTX speed vs fastest competitor: 0.746022× + +0.67ns +0.7× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.789768 ns +Fastest competitor: qdpp qd_real (qdpp operator==): 0.544999 ns; FLTX speed vs fastest competitor: 0.690075× + +0.79ns +0.7× qdreal + + +not_equal + +Windows / x64 / MSVC; bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 0.68794 ns +Fastest competitor: qdpp dd_real (qdpp operator!=): 0.550572 ns; FLTX speed vs fastest competitor: 0.80032× + +0.69ns +0.8× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 0.725736 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator!=): 0.920377 ns; FLTX speed vs fastest competitor: 1.2682× + +0.73ns +1.3× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 1.03059 ns +Fastest competitor: qdpp dd_real (qdpp operator!=): 0.487349 ns; FLTX speed vs fastest competitor: 0.472884× + +1.0ns +0.5× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 1.11379 ns +Fastest competitor: qdpp dd_real (qdpp operator!=): 0.804375 ns; FLTX speed vs fastest competitor: 0.722196× + +1.1ns +0.7× ddreal + + +Windows / x64 / MSVC; bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.778757 ns +Fastest competitor: qdpp qd_real (qdpp operator!=): 1.10045 ns; FLTX speed vs fastest competitor: 1.41309× + +0.78ns +1.4× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.643373 ns +Fastest competitor: TLFloat Octuple (TLFloat operator!=): 4.14769 ns; FLTX speed vs fastest competitor: 6.44679× + +0.64ns +6.4× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.73972 ns +Fastest competitor: qdpp qd_real (qdpp operator!=): 0.483169 ns; FLTX speed vs fastest competitor: 0.653178× + +0.74ns +0.7× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.734721 ns +Fastest competitor: qdpp qd_real (qdpp operator!=): 0.541455 ns; FLTX speed vs fastest competitor: 0.736953× + +0.73ns +0.7× qdreal + + +less + +Windows / x64 / MSVC; bl::f128; comparisons / less +fltx bl::f128 (bl::less): 2.08025 ns +Fastest competitor: qdpp dd_real (qdpp operator<): 1.95641 ns; FLTX speed vs fastest competitor: 0.940467× + +2.1ns +0.9× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / less +fltx bl::f128 (bl::less): 0.998164 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator<): 1.60967 ns; FLTX speed vs fastest competitor: 1.61263× + +1.00ns +1.6× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / less +fltx bl::f128 (bl::less): 1.10528 ns +Fastest competitor: qdpp dd_real (qdpp operator<): 0.838337 ns; FLTX speed vs fastest competitor: 0.758486× + +1.1ns +0.8× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / less +fltx bl::f128 (bl::less): 2.04739 ns +Fastest competitor: qdpp dd_real (qdpp operator<): 1.49798 ns; FLTX speed vs fastest competitor: 0.73165× + +2.0ns +0.7× ddreal + + +Windows / x64 / MSVC; bl::f256; comparisons / less +fltx bl::f256 (bl::less): 2.10633 ns +Fastest competitor: qdpp qd_real (qdpp operator<): 1.90813 ns; FLTX speed vs fastest competitor: 0.905901× + +2.1ns +0.9× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / less +fltx bl::f256 (bl::less): 0.856641 ns +Fastest competitor: TLFloat Octuple (TLFloat operator<): 5.87399 ns; FLTX speed vs fastest competitor: 6.857× + +0.86ns +6.9× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / less +fltx bl::f256 (bl::less): 0.701605 ns +Fastest competitor: qdpp qd_real (qdpp operator<): 0.51754 ns; FLTX speed vs fastest competitor: 0.737652× + +0.70ns +0.7× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / less +fltx bl::f256 (bl::less): 1.31895 ns +Fastest competitor: qdpp qd_real (qdpp operator<): 1.10079 ns; FLTX speed vs fastest competitor: 0.834595× + +1.3ns +0.8× qdreal + + +greater + +Windows / x64 / MSVC; bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 2.06386 ns +Fastest competitor: qdpp dd_real (qdpp operator>): 1.9718 ns; FLTX speed vs fastest competitor: 0.955398× + +2.1ns +1.0× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 1.12088 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator>): 1.0269 ns; FLTX speed vs fastest competitor: 0.916154× + +1.1ns +0.9× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 1.25071 ns +Fastest competitor: qdpp dd_real (qdpp operator>): 0.701363 ns; FLTX speed vs fastest competitor: 0.560772× + +1.3ns +0.6× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 2.0787 ns +Fastest competitor: qdpp dd_real (qdpp operator>): 1.51576 ns; FLTX speed vs fastest competitor: 0.729187× + +2.1ns +0.7× ddreal + + +Windows / x64 / MSVC; bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 2.07872 ns +Fastest competitor: qdpp qd_real (qdpp operator>): 1.98202 ns; FLTX speed vs fastest competitor: 0.95348× + +2.1ns +1.0× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 0.808347 ns +Fastest competitor: TLFloat Octuple (TLFloat operator>): 5.85314 ns; FLTX speed vs fastest competitor: 7.24087× + +0.81ns +7.2× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 0.68559 ns +Fastest competitor: qdpp qd_real (qdpp operator>): 0.526507 ns; FLTX speed vs fastest competitor: 0.767962× + +0.69ns +0.8× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 1.58587 ns +Fastest competitor: qdpp qd_real (qdpp operator>): 1.27087 ns; FLTX speed vs fastest competitor: 0.80137× + +1.6ns +0.8× qdreal + + +less_equal + +Windows / x64 / MSVC; bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 2.05199 ns +Fastest competitor: qdpp dd_real (qdpp operator<=): 1.98294 ns; FLTX speed vs fastest competitor: 0.96635× + +2.1ns +1.0× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 0.992156 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator<=): 0.944537 ns; FLTX speed vs fastest competitor: 0.952005× + +0.99ns +1.0× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 1.02272 ns +Fastest competitor: qdpp dd_real (qdpp operator<=): 0.919082 ns; FLTX speed vs fastest competitor: 0.898669× + +1.0ns +0.9× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 2.06857 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator<=): 0.63943 ns; FLTX speed vs fastest competitor: 0.309117× + +2.1ns +0.3× cppdd + + +Windows / x64 / MSVC; bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 2.05822 ns +Fastest competitor: qdpp qd_real (qdpp operator<=): 1.92864 ns; FLTX speed vs fastest competitor: 0.937044× + +2.1ns +0.9× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 0.796284 ns +Fastest competitor: TLFloat Octuple (TLFloat operator<=): 5.82782 ns; FLTX speed vs fastest competitor: 7.31878× + +0.80ns +7.3× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 0.712379 ns +Fastest competitor: qdpp qd_real (qdpp operator<=): 0.512244 ns; FLTX speed vs fastest competitor: 0.719061× + +0.71ns +0.7× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 1.25655 ns +Fastest competitor: qdpp qd_real (qdpp operator<=): 1.10463 ns; FLTX speed vs fastest competitor: 0.879104× + +1.3ns +0.9× qdreal + + +greater_equal + +Windows / x64 / MSVC; bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 2.05321 ns +Fastest competitor: qdpp dd_real (qdpp operator>=): 1.96737 ns; FLTX speed vs fastest competitor: 0.958193× + +2.1ns +1.0× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 1.11472 ns +Fastest competitor: boost::multiprecision::cpp_double_double (Boost operator>=): 1.04411 ns; FLTX speed vs fastest competitor: 0.936651× + +1.1ns +0.9× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 1.15581 ns +Fastest competitor: qdpp dd_real (qdpp operator>=): 0.801565 ns; FLTX speed vs fastest competitor: 0.693509× + +1.2ns +0.7× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 2.0861 ns +Fastest competitor: qdpp dd_real (qdpp operator>=): 1.49346 ns; FLTX speed vs fastest competitor: 0.715911× + +2.1ns +0.7× ddreal + + +Windows / x64 / MSVC; bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 2.08708 ns +Fastest competitor: qdpp qd_real (qdpp operator>=): 1.91196 ns; FLTX speed vs fastest competitor: 0.916093× + +2.1ns +0.9× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 0.789589 ns +Fastest competitor: TLFloat Octuple (TLFloat operator>=): 5.77822 ns; FLTX speed vs fastest competitor: 7.318× + +0.79ns +7.3× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 0.685543 ns +Fastest competitor: qdpp qd_real (qdpp operator>=): 0.560411 ns; FLTX speed vs fastest competitor: 0.81747× + +0.69ns +0.8× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 1.36189 ns +Fastest competitor: qdpp qd_real (qdpp operator>=): 1.09978 ns; FLTX speed vs fastest competitor: 0.807541× + +1.4ns +0.8× qdreal + + + +Random + +uniform_real + +Windows / x64 / MSVC; bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 8.90932 ns +Fastest competitor: qdpp dd_real (qdpp ddrand): 18.8904 ns; FLTX speed vs fastest competitor: 2.1203× + +8.9ns +2.1× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 7.328 ns +No competitor benchmark is available. + +7.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 21.3287 ns +Fastest competitor: qdpp dd_real (qdpp ddrand): 24.3433 ns; FLTX speed vs fastest competitor: 1.14134× + +21.3ns +1.1× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 5.85245 ns +Fastest competitor: qdpp dd_real (qdpp ddrand): 18.3286 ns; FLTX speed vs fastest competitor: 3.13179× + +5.9ns +3.1× ddreal + + +Windows / x64 / MSVC; bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 19.6584 ns +Fastest competitor: qdpp qd_real (qdpp qdrand): 38.2351 ns; FLTX speed vs fastest competitor: 1.94498× + +19.7ns +1.9× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 14.8556 ns +No competitor benchmark is available. + +14.9ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 42.4448 ns +Fastest competitor: qdpp qd_real (qdpp qdrand): 50.4258 ns; FLTX speed vs fastest competitor: 1.18803× + +42.4ns +1.2× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 11.0105 ns +Fastest competitor: qdpp qd_real (qdpp qdrand): 37.5858 ns; FLTX speed vs fastest competitor: 3.41365× + +11.0ns +3.4× qdreal + + +normal + +Windows / x64 / MSVC; bl::f128; random / normal +fltx bl::f128 (bl::normal): 46.9536 ns +No competitor benchmark is available. + +47.0ns + + +Windows / x64 / Clang (clang-cl); bl::f128; random / normal +fltx bl::f128 (bl::normal): 43.9526 ns +No competitor benchmark is available. + +44.0ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; random / normal +fltx bl::f128 (bl::normal): 100.521 ns +No competitor benchmark is available. + +101ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; random / normal +fltx bl::f128 (bl::normal): 48.9636 ns +No competitor benchmark is available. + +49.0ns + + +Windows / x64 / MSVC; bl::f256; random / normal +fltx bl::f256 (bl::normal): 265.449 ns +No competitor benchmark is available. + +265ns + + +Windows / x64 / Clang (clang-cl); bl::f256; random / normal +fltx bl::f256 (bl::normal): 292.534 ns +No competitor benchmark is available. + +293ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; random / normal +fltx bl::f256 (bl::normal): 367.941 ns +No competitor benchmark is available. + +368ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; random / normal +fltx bl::f256 (bl::normal): 271.407 ns +No competitor benchmark is available. + +271ns + + + +Mixed Workloads + +product_sum + +Windows / x64 / MSVC; bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 5.004 ns +Fastest competitor: qdpp dd_real (same expression): 3.00357 ns; FLTX speed vs fastest competitor: 0.600234× + +5.0ns +0.6× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 4.63094 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same expression): 6.97702 ns; FLTX speed vs fastest competitor: 1.50661× + +4.6ns +1.5× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 5.09319 ns +Fastest competitor: qdpp dd_real (same expression): 5.68219 ns; FLTX speed vs fastest competitor: 1.11565× + +5.1ns +1.1× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 6.09597 ns +Fastest competitor: qdpp dd_real (same expression): 4.99525 ns; FLTX speed vs fastest competitor: 0.819434× + +6.1ns +0.8× ddreal + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 42.869 ns +Fastest competitor: qdpp qd_real (same expression): 78.6309 ns; FLTX speed vs fastest competitor: 1.83421× + +42.9ns +1.8× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 58.5693 ns +Fastest competitor: TLFloat Octuple (same expression): 115.12 ns; FLTX speed vs fastest competitor: 1.96553× + +58.6ns +2.0× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 46.2463 ns +Fastest competitor: qdpp qd_real (same expression): 118.121 ns; FLTX speed vs fastest competitor: 2.55416× + +46.2ns +2.6× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 47.8144 ns +Fastest competitor: qdpp qd_real (same expression): 100.208 ns; FLTX speed vs fastest competitor: 2.09577× + +47.8ns +2.1× qdreal + + +chained_arithmetic + +Windows / x64 / MSVC; bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 20.2036 ns +Fastest competitor: qdpp dd_real (same workload): 37.8028 ns; FLTX speed vs fastest competitor: 1.87109× + +20.2ns +1.9× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 24.3772 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 25.6445 ns; FLTX speed vs fastest competitor: 1.05199× + +24.4ns +1.1× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 23.4356 ns +Fastest competitor: qdpp dd_real (same workload): 38.0922 ns; FLTX speed vs fastest competitor: 1.6254× + +23.4ns +1.6× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 30.5878 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 26.4878 ns; FLTX speed vs fastest competitor: 0.86596× + +30.6ns +0.9× cppdd + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 155.188 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 315.794 ns; FLTX speed vs fastest competitor: 2.03491× + +155ns +2.0× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 151.692 ns +Fastest competitor: TLFloat Octuple (same workload): 283.243 ns; FLTX speed vs fastest competitor: 1.86722× + +152ns +1.9× tloct + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 164.733 ns +Fastest competitor: qdpp qd_real (same workload): 417.582 ns; FLTX speed vs fastest competitor: 2.5349× + +165ns +2.5× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 142.701 ns +Fastest competitor: qdpp qd_real (same workload): 336.779 ns; FLTX speed vs fastest competitor: 2.36003× + +143ns +2.4× qdreal + + +affine_trig + +Windows / x64 / MSVC; bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 174.594 ns +Fastest competitor: qdpp dd_real (same workload): 229.891 ns; FLTX speed vs fastest competitor: 1.31672× + +175ns +1.3× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 187.402 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 830.325 ns; FLTX speed vs fastest competitor: 4.43073× + +187ns +4.4× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 213.073 ns +Fastest competitor: qdpp dd_real (same workload): 426.766 ns; FLTX speed vs fastest competitor: 2.0029× + +213ns +2.0× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 242.775 ns +Fastest competitor: qdpp dd_real (same workload): 315.422 ns; FLTX speed vs fastest competitor: 1.29923× + +243ns +1.3× ddreal + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1809.7 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 2349.26 ns; FLTX speed vs fastest competitor: 1.29815× + +1,810ns +1.3× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1851.71 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 2326.72 ns; FLTX speed vs fastest competitor: 1.25652× + +1,852ns +1.3× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1834.44 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 3071.54 ns; FLTX speed vs fastest competitor: 1.67438× + +1,834ns +1.7× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1793.42 ns +Fastest competitor: qdpp qd_real (same workload): 3953.84 ns; FLTX speed vs fastest competitor: 2.20463× + +1,793ns +2.2× qdreal + + +mandelbrot + +Windows / x64 / MSVC; bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 12.9063 ns +Fastest competitor: qdpp dd_real (same workload): 11.7619 ns; FLTX speed vs fastest competitor: 0.911336× + +12.9ns +0.9× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 19.8486 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 18.1825 ns; FLTX speed vs fastest competitor: 0.91606× + +19.8ns +0.9× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 17.824 ns +Fastest competitor: qdpp dd_real (same workload): 16.1993 ns; FLTX speed vs fastest competitor: 0.908851× + +17.8ns +0.9× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 21.3256 ns +Fastest competitor: qdpp dd_real (same workload): 15.2024 ns; FLTX speed vs fastest competitor: 0.712868× + +21.3ns +0.7× ddreal + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 124.059 ns +Fastest competitor: qdpp qd_real (same workload): 197.652 ns; FLTX speed vs fastest competitor: 1.5932× + +124ns +1.6× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 128.356 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 242.174 ns; FLTX speed vs fastest competitor: 1.88674× + +128ns +1.9× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 117.37 ns +Fastest competitor: qdpp qd_real (same workload): 304.327 ns; FLTX speed vs fastest competitor: 2.59288× + +117ns +2.6× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 110.989 ns +Fastest competitor: qdpp qd_real (same workload): 227.949 ns; FLTX speed vs fastest competitor: 2.0538× + +111ns +2.1× qdreal + + +matrix_vector_4x4 + +Windows / x64 / MSVC; bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 54.992 ns +Fastest competitor: qdpp dd_real (same workload): 57.2194 ns; FLTX speed vs fastest competitor: 1.0405× + +55.0ns +1.0× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 54.6573 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 81.4309 ns; FLTX speed vs fastest competitor: 1.48984× + +54.7ns +1.5× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 72.0887 ns +Fastest competitor: qdpp dd_real (same workload): 90.1062 ns; FLTX speed vs fastest competitor: 1.24994× + +72.1ns +1.2× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 69.3067 ns +Fastest competitor: qdpp dd_real (same workload): 59.9799 ns; FLTX speed vs fastest competitor: 0.865426× + +69.3ns +0.9× ddreal + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 557.157 ns +Fastest competitor: qdpp qd_real (same workload): 893.158 ns; FLTX speed vs fastest competitor: 1.60306× + +557ns +1.6× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 594.192 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 950.813 ns; FLTX speed vs fastest competitor: 1.60018× + +594ns +1.6× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 528.529 ns +Fastest competitor: qdpp qd_real (same workload): 1378.87 ns; FLTX speed vs fastest competitor: 2.60889× + +529ns +2.6× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 536.458 ns +Fastest competitor: qdpp qd_real (same workload): 969.958 ns; FLTX speed vs fastest competitor: 1.80808× + +536ns +1.8× qdreal + + +horner_polynomial + +Windows / x64 / MSVC; bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 77.8575 ns +Fastest competitor: qdpp dd_real (same workload): 77.8662 ns; FLTX speed vs fastest competitor: 1.00011× + +77.9ns +1.0× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 166.598 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 107.193 ns; FLTX speed vs fastest competitor: 0.643426× + +167ns +0.6× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 113.863 ns +Fastest competitor: qdpp dd_real (same workload): 98.3798 ns; FLTX speed vs fastest competitor: 0.86402× + +114ns +0.9× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 174.375 ns +Fastest competitor: qdpp dd_real (same workload): 97.5593 ns; FLTX speed vs fastest competitor: 0.559478× + +174ns +0.6× ddreal + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 395.633 ns +Fastest competitor: qdpp qd_real (same workload): 769.221 ns; FLTX speed vs fastest competitor: 1.94428× + +396ns +1.9× qdreal + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 442.22 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 744.174 ns; FLTX speed vs fastest competitor: 1.68281× + +442ns +1.7× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 422.572 ns +Fastest competitor: qdpp qd_real (same workload): 872.013 ns; FLTX speed vs fastest competitor: 2.06358× + +423ns +2.1× qdreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 485.675 ns +Fastest competitor: qdpp qd_real (same workload): 769.094 ns; FLTX speed vs fastest competitor: 1.58356× + +486ns +1.6× qdreal + + +newton_root + +Windows / x64 / MSVC; bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 25.7245 ns +Fastest competitor: qdpp dd_real (same workload): 42.5119 ns; FLTX speed vs fastest competitor: 1.65259× + +25.7ns +1.7× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 31.8617 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 34.7139 ns; FLTX speed vs fastest competitor: 1.08952× + +31.9ns +1.1× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 33.5429 ns +Fastest competitor: qdpp dd_real (same workload): 52.5971 ns; FLTX speed vs fastest competitor: 1.56806× + +33.5ns +1.6× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 39.8919 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 36.4933 ns; FLTX speed vs fastest competitor: 0.914805× + +39.9ns +0.9× cppdd + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 218.12 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 318.851 ns; FLTX speed vs fastest competitor: 1.46181× + +218ns +1.5× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 246.195 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 323.218 ns; FLTX speed vs fastest competitor: 1.31285× + +246ns +1.3× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 236.78 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 464.354 ns; FLTX speed vs fastest competitor: 1.96112× + +237ns +2.0× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 237.989 ns +Fastest competitor: qdpp qd_real (same workload): 437.837 ns; FLTX speed vs fastest competitor: 1.83973× + +238ns +1.8× qdreal + + +log_sum_exp + +Windows / x64 / MSVC; bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 813.789 ns +Fastest competitor: qdpp dd_real (same workload): 906.363 ns; FLTX speed vs fastest competitor: 1.11376× + +814ns +1.1× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 828.508 ns +Fastest competitor: boost::multiprecision::cpp_double_double (same workload): 2834.92 ns; FLTX speed vs fastest competitor: 3.42172× + +829ns +3.4× cppdd + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 907.746 ns +Fastest competitor: qdpp dd_real (same workload): 1761.44 ns; FLTX speed vs fastest competitor: 1.94045× + +908ns +1.9× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 979.902 ns +Fastest competitor: qdpp dd_real (same workload): 1137.87 ns; FLTX speed vs fastest competitor: 1.16121× + +980ns +1.2× ddreal + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 8562.5 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 10950 ns; FLTX speed vs fastest competitor: 1.27883× + +8,562ns +1.3× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 8950 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 11262.5 ns; FLTX speed vs fastest competitor: 1.25838× + +8,950ns +1.3× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 9212.5 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 12925 ns; FLTX speed vs fastest competitor: 1.40299× + +9,212ns +1.4× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 8837.5 ns +Fastest competitor: qdpp qd_real (same workload): 19437.5 ns; FLTX speed vs fastest competitor: 2.19943× + +8,838ns +2.2× qdreal + + +haversine + +Windows / x64 / MSVC; bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 417.312 ns +Fastest competitor: qdpp dd_real (same workload): 765.726 ns; FLTX speed vs fastest competitor: 1.8349× + +417ns +1.8× ddreal + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 433.03 ns +Fastest competitor: TLFloat Quad (same workload): 4262.94 ns; FLTX speed vs fastest competitor: 9.84444× + +433ns +9.8× tlquad + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 540.719 ns +Fastest competitor: qdpp dd_real (same workload): 1358.71 ns; FLTX speed vs fastest competitor: 2.51278× + +541ns +2.5× ddreal + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 571.376 ns +Fastest competitor: qdpp dd_real (same workload): 954.211 ns; FLTX speed vs fastest competitor: 1.67002× + +571ns +1.7× ddreal + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4666.86 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 10237.5 ns; FLTX speed vs fastest competitor: 2.19366× + +4,667ns +2.2× mpfr64 + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4891.65 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 10187.5 ns; FLTX speed vs fastest competitor: 2.08263× + +4,892ns +2.1× mpfr64 + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4722.58 ns +Fastest competitor: boost::multiprecision::mpfr_float_backend<64> (same workload): 12525 ns; FLTX speed vs fastest competitor: 2.65215× + +4,723ns +2.7× mpfr64 + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4755.87 ns +Fastest competitor: qdpp qd_real (same workload): 16325 ns; FLTX speed vs fastest competitor: 3.4326× + +4,756ns +3.4× qdreal + + diff --git a/validation/metrics/generated/performance/performance_table_fastmath.svg b/validation/metrics/generated/performance/performance_table_fastmath.svg new file mode 100644 index 0000000..c046162 --- /dev/null +++ b/validation/metrics/generated/performance/performance_table_fastmath.svg @@ -0,0 +1,4982 @@ + +fltx consumer fast-math performance +Columns identify the target platform and build toolchain. FLTX time per iteration; the second line shows FLTX speed versus the fastest available competitor for each target with consumer fast-math enabled. + + +fltx consumer fast-math performance +Columns identify the target platform and build toolchain. FLTX time per iteration; the second line shows FLTX speed versus the fastest available competitor for each target with consumer fast-math enabled. + +Function + +bl::f128 + +bl::f256 + +Windows + +WebAssembly + +Windows + +WebAssembly + +x64 + +wasm32 + +x64 + +wasm32 + + +MSVC + + + +Clang +clang-cl + + + +GCC +MinGW-w64 + + + +Clang +Emscripten + + + +MSVC + + + +Clang +clang-cl + + + +GCC +MinGW-w64 + + + +Clang +Emscripten + + + +Arithmetic + +add + +Windows / x64 / MSVC; bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 1.85656 ns +No competitor benchmark is available. + +1.86ns + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 0.923151 ns +No competitor benchmark is available. + +0.923ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 1.82162 ns +No competitor benchmark is available. + +1.82ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 0.926152 ns +No competitor benchmark is available. + +0.926ns + + +Windows / x64 / MSVC; bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 10.6426 ns +No competitor benchmark is available. + +10.6ns + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 9.45469 ns +No competitor benchmark is available. + +9.45ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 10.4623 ns +No competitor benchmark is available. + +10.5ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 10.0746 ns +No competitor benchmark is available. + +10.1ns + + +subtract + +Windows / x64 / MSVC; bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 1.85275 ns +No competitor benchmark is available. + +1.85ns + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 0.922846 ns +No competitor benchmark is available. + +0.923ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 1.82436 ns +No competitor benchmark is available. + +1.82ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 0.923213 ns +No competitor benchmark is available. + +0.923ns + + +Windows / x64 / MSVC; bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 10.6504 ns +No competitor benchmark is available. + +10.7ns + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 18.6813 ns +No competitor benchmark is available. + +18.7ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 10.3886 ns +No competitor benchmark is available. + +10.4ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 10.184 ns +No competitor benchmark is available. + +10.2ns + + +multiply + +Windows / x64 / MSVC; bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 2.43589 ns +No competitor benchmark is available. + +2.44ns + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 2.48877 ns +No competitor benchmark is available. + +2.49ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 2.16918 ns +No competitor benchmark is available. + +2.17ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 2.02879 ns +No competitor benchmark is available. + +2.03ns + + +Windows / x64 / MSVC; bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 18.6639 ns +No competitor benchmark is available. + +18.7ns + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 34.9913 ns +No competitor benchmark is available. + +35.0ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 25.3014 ns +No competitor benchmark is available. + +25.3ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 30.5402 ns +No competitor benchmark is available. + +30.5ns + + +divide + +Windows / x64 / MSVC; bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 1.84535 ns +No competitor benchmark is available. + +1.85ns + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 1.59495 ns +No competitor benchmark is available. + +1.59ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 2.11077 ns +No competitor benchmark is available. + +2.11ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 2.49072 ns +No competitor benchmark is available. + +2.49ns + + +Windows / x64 / MSVC; bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 80.5078 ns +No competitor benchmark is available. + +80.5ns + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 96.9482 ns +No competitor benchmark is available. + +96.9ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 107.238 ns +No competitor benchmark is available. + +107ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 91.7367 ns +No competitor benchmark is available. + +91.7ns + + + +IO + +to_string + +Windows / x64 / MSVC; bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 213.527 ns +No competitor benchmark is available. + +214ns + + +Windows / x64 / Clang (clang-cl); bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 186.145 ns +No competitor benchmark is available. + +186ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 240.582 ns +No competitor benchmark is available. + +241ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 254.208 ns +No competitor benchmark is available. + +254ns + + +Windows / x64 / MSVC; bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 355.387 ns +No competitor benchmark is available. + +355ns + + +Windows / x64 / Clang (clang-cl); bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 300.293 ns +No competitor benchmark is available. + +300ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 347.804 ns +No competitor benchmark is available. + +348ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 407.773 ns +No competitor benchmark is available. + +408ns + + +to_chars + +Windows / x64 / MSVC; bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 180.934 ns +No competitor benchmark is available. + +181ns + + +Windows / x64 / Clang (clang-cl); bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 154.33 ns +No competitor benchmark is available. + +154ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 199.984 ns +No competitor benchmark is available. + +200ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 219.818 ns +No competitor benchmark is available. + +220ns + + +Windows / x64 / MSVC; bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 299.857 ns +No competitor benchmark is available. + +300ns + + +Windows / x64 / Clang (clang-cl); bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 256.474 ns +No competitor benchmark is available. + +256ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 303.659 ns +No competitor benchmark is available. + +304ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 371.082 ns +No competitor benchmark is available. + +371ns + + +parse + +Windows / x64 / MSVC; bl::f128; io / parse +fltx bl::f128 (bl::parse): 226.226 ns +No competitor benchmark is available. + +226ns + + +Windows / x64 / Clang (clang-cl); bl::f128; io / parse +fltx bl::f128 (bl::parse): 202.515 ns +No competitor benchmark is available. + +203ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; io / parse +fltx bl::f128 (bl::parse): 199.427 ns +No competitor benchmark is available. + +199ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; io / parse +fltx bl::f128 (bl::parse): 282.758 ns +No competitor benchmark is available. + +283ns + + +Windows / x64 / MSVC; bl::f256; io / parse +fltx bl::f256 (bl::parse): 430.329 ns +No competitor benchmark is available. + +430ns + + +Windows / x64 / Clang (clang-cl); bl::f256; io / parse +fltx bl::f256 (bl::parse): 354.891 ns +No competitor benchmark is available. + +355ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; io / parse +fltx bl::f256 (bl::parse): 462.088 ns +No competitor benchmark is available. + +462ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; io / parse +fltx bl::f256 (bl::parse): 554.891 ns +No competitor benchmark is available. + +555ns + + + +Rounding + +floor + +Windows / x64 / MSVC; bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 2.85344 ns +No competitor benchmark is available. + +2.85ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 1.56631 ns +No competitor benchmark is available. + +1.57ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 1.01062 ns +No competitor benchmark is available. + +1.01ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 0.761136 ns +No competitor benchmark is available. + +0.761ns + + +Windows / x64 / MSVC; bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 5.18609 ns +No competitor benchmark is available. + +5.19ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 1.48743 ns +No competitor benchmark is available. + +1.49ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 1.28778 ns +No competitor benchmark is available. + +1.29ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 0.941429 ns +No competitor benchmark is available. + +0.941ns + + +ceil + +Windows / x64 / MSVC; bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 3.32703 ns +No competitor benchmark is available. + +3.33ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 1.9874 ns +No competitor benchmark is available. + +1.99ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 1.5115 ns +No competitor benchmark is available. + +1.51ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 1.51496 ns +No competitor benchmark is available. + +1.51ns + + +Windows / x64 / MSVC; bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 5.1666 ns +No competitor benchmark is available. + +5.17ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 1.5999 ns +No competitor benchmark is available. + +1.60ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 1.24492 ns +No competitor benchmark is available. + +1.24ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 0.941186 ns +No competitor benchmark is available. + +0.941ns + + +trunc + +Windows / x64 / MSVC; bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 3.96658 ns +No competitor benchmark is available. + +3.97ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 2.19761 ns +No competitor benchmark is available. + +2.20ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 1.6242 ns +No competitor benchmark is available. + +1.62ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 2.29846 ns +No competitor benchmark is available. + +2.30ns + + +Windows / x64 / MSVC; bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 7.59028 ns +No competitor benchmark is available. + +7.59ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 4.28194 ns +No competitor benchmark is available. + +4.28ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 2.31378 ns +No competitor benchmark is available. + +2.31ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 2.86993 ns +No competitor benchmark is available. + +2.87ns + + +round + +Windows / x64 / MSVC; bl::f128; rounding / round +fltx bl::f128 (bl::round): 9.96524 ns +No competitor benchmark is available. + +9.97ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / round +fltx bl::f128 (bl::round): 7.50376 ns +No competitor benchmark is available. + +7.50ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / round +fltx bl::f128 (bl::round): 10.1872 ns +No competitor benchmark is available. + +10.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / round +fltx bl::f128 (bl::round): 8.78235 ns +No competitor benchmark is available. + +8.78ns + + +Windows / x64 / MSVC; bl::f256; rounding / round +fltx bl::f256 (bl::round): 12.8702 ns +No competitor benchmark is available. + +12.9ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / round +fltx bl::f256 (bl::round): 8.79089 ns +No competitor benchmark is available. + +8.79ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / round +fltx bl::f256 (bl::round): 10.0954 ns +No competitor benchmark is available. + +10.1ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / round +fltx bl::f256 (bl::round): 13.4325 ns +No competitor benchmark is available. + +13.4ns + + +roundeven + +Windows / x64 / MSVC; bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 10.0978 ns +No competitor benchmark is available. + +10.1ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 9.54392 ns +No competitor benchmark is available. + +9.54ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 6.73846 ns +No competitor benchmark is available. + +6.74ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 10.3311 ns +No competitor benchmark is available. + +10.3ns + + +Windows / x64 / MSVC; bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 9.57136 ns +No competitor benchmark is available. + +9.57ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 8.36294 ns +No competitor benchmark is available. + +8.36ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 9.12525 ns +No competitor benchmark is available. + +9.13ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 8.16249 ns +No competitor benchmark is available. + +8.16ns + + +lround + +Windows / x64 / MSVC; bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 4.55205 ns +No competitor benchmark is available. + +4.55ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 4.43628 ns +No competitor benchmark is available. + +4.44ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 3.4087 ns +No competitor benchmark is available. + +3.41ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 6.76038 ns +No competitor benchmark is available. + +6.76ns + + +Windows / x64 / MSVC; bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 8.27642 ns +No competitor benchmark is available. + +8.28ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 6.56238 ns +No competitor benchmark is available. + +6.56ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 5.13466 ns +No competitor benchmark is available. + +5.13ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 6.7004 ns +No competitor benchmark is available. + +6.70ns + + +llround + +Windows / x64 / MSVC; bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 4.36573 ns +No competitor benchmark is available. + +4.37ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 4.07939 ns +No competitor benchmark is available. + +4.08ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 3.24877 ns +No competitor benchmark is available. + +3.25ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 6.27377 ns +No competitor benchmark is available. + +6.27ns + + +Windows / x64 / MSVC; bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 6.88507 ns +No competitor benchmark is available. + +6.89ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 6.56848 ns +No competitor benchmark is available. + +6.57ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 4.84828 ns +No competitor benchmark is available. + +4.85ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 6.52185 ns +No competitor benchmark is available. + +6.52ns + + +round_decimals + +Windows / x64 / MSVC; bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 83.5571 ns +No competitor benchmark is available. + +83.6ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 77.6786 ns +No competitor benchmark is available. + +77.7ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 78.2261 ns +No competitor benchmark is available. + +78.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 93.2706 ns +No competitor benchmark is available. + +93.3ns + + +Windows / x64 / MSVC; bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 126.871 ns +No competitor benchmark is available. + +127ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 117.584 ns +No competitor benchmark is available. + +118ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 128.29 ns +No competitor benchmark is available. + +128ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 140.9 ns +No competitor benchmark is available. + +141ns + + +round_significant + +Windows / x64 / MSVC; bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 128.566 ns +No competitor benchmark is available. + +129ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 109.495 ns +No competitor benchmark is available. + +109ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 112.694 ns +No competitor benchmark is available. + +113ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 140.172 ns +No competitor benchmark is available. + +140ns + + +Windows / x64 / MSVC; bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 179.818 ns +No competitor benchmark is available. + +180ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 160.875 ns +No competitor benchmark is available. + +161ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 167.375 ns +No competitor benchmark is available. + +167ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 211.692 ns +No competitor benchmark is available. + +212ns + + + +Remainders + +fmod + +Windows / x64 / MSVC; bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 17.8796 ns +No competitor benchmark is available. + +17.9ns + + +Windows / x64 / Clang (clang-cl); bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 18.3352 ns +No competitor benchmark is available. + +18.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 18.8027 ns +No competitor benchmark is available. + +18.8ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 20.5115 ns +No competitor benchmark is available. + +20.5ns + + +Windows / x64 / MSVC; bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 67.3851 ns +No competitor benchmark is available. + +67.4ns + + +Windows / x64 / Clang (clang-cl); bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 68.5315 ns +No competitor benchmark is available. + +68.5ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 71.154 ns +No competitor benchmark is available. + +71.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 75.5127 ns +No competitor benchmark is available. + +75.5ns + + +remainder + +Windows / x64 / MSVC; bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 22.4618 ns +No competitor benchmark is available. + +22.5ns + + +Windows / x64 / Clang (clang-cl); bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 23.6808 ns +No competitor benchmark is available. + +23.7ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 20.0009 ns +No competitor benchmark is available. + +20.0ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 22.8351 ns +No competitor benchmark is available. + +22.8ns + + +Windows / x64 / MSVC; bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 96.1361 ns +No competitor benchmark is available. + +96.1ns + + +Windows / x64 / Clang (clang-cl); bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 100.165 ns +No competitor benchmark is available. + +100ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 99.6071 ns +No competitor benchmark is available. + +99.6ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 103.172 ns +No competitor benchmark is available. + +103ns + + +remquo + +Windows / x64 / MSVC; bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 22.2501 ns +No competitor benchmark is available. + +22.3ns + + +Windows / x64 / Clang (clang-cl); bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 23.0702 ns +No competitor benchmark is available. + +23.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 20.1644 ns +No competitor benchmark is available. + +20.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 22.6009 ns +No competitor benchmark is available. + +22.6ns + + +Windows / x64 / MSVC; bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 96.7632 ns +No competitor benchmark is available. + +96.8ns + + +Windows / x64 / Clang (clang-cl); bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 99.5081 ns +No competitor benchmark is available. + +99.5ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 98.0991 ns +No competitor benchmark is available. + +98.1ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 101.809 ns +No competitor benchmark is available. + +102ns + + + +Float Utils + +abs + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 3.39158 ns +No competitor benchmark is available. + +3.39ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 3.12204 ns +No competitor benchmark is available. + +3.12ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 0.537497 ns +No competitor benchmark is available. + +0.537ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 0.812795 ns +No competitor benchmark is available. + +0.813ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 2.31604 ns +No competitor benchmark is available. + +2.32ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 1.52406 ns +No competitor benchmark is available. + +1.52ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 0.694394 ns +No competitor benchmark is available. + +0.694ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 3.33869 ns +No competitor benchmark is available. + +3.34ns + + +fabs + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 3.42186 ns +No competitor benchmark is available. + +3.42ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 3.14085 ns +No competitor benchmark is available. + +3.14ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 0.376619 ns +No competitor benchmark is available. + +0.377ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 0.812937 ns +No competitor benchmark is available. + +0.813ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 2.30464 ns +No competitor benchmark is available. + +2.30ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 1.70809 ns +No competitor benchmark is available. + +1.71ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 0.69389 ns +No competitor benchmark is available. + +0.694ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 3.21495 ns +No competitor benchmark is available. + +3.21ns + + +fma + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 6.14975 ns +No competitor benchmark is available. + +6.15ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 5.55668 ns +No competitor benchmark is available. + +5.56ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 8.21416 ns +No competitor benchmark is available. + +8.21ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 7.59042 ns +No competitor benchmark is available. + +7.59ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 24.5204 ns +No competitor benchmark is available. + +24.5ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 20.3212 ns +No competitor benchmark is available. + +20.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 37.9142 ns +No competitor benchmark is available. + +37.9ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 28.2363 ns +No competitor benchmark is available. + +28.2ns + + +recip + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 25.5734 ns +No competitor benchmark is available. + +25.6ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 23.6317 ns +No competitor benchmark is available. + +23.6ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 31.7164 ns +No competitor benchmark is available. + +31.7ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 32.8243 ns +No competitor benchmark is available. + +32.8ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 74.481 ns +No competitor benchmark is available. + +74.5ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 81.3383 ns +No competitor benchmark is available. + +81.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 104.033 ns +No competitor benchmark is available. + +104ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 89.9078 ns +No competitor benchmark is available. + +89.9ns + + +fmin + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 1.40222 ns +No competitor benchmark is available. + +1.40ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 0.805319 ns +No competitor benchmark is available. + +0.805ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 0.818994 ns +No competitor benchmark is available. + +0.819ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 1.03146 ns +No competitor benchmark is available. + +1.03ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 4.32935 ns +No competitor benchmark is available. + +4.33ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 0.959492 ns +No competitor benchmark is available. + +0.959ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 1.47251 ns +No competitor benchmark is available. + +1.47ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 1.17145 ns +No competitor benchmark is available. + +1.17ns + + +fmax + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 1.05428 ns +No competitor benchmark is available. + +1.05ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 0.728835 ns +No competitor benchmark is available. + +0.729ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 0.820997 ns +No competitor benchmark is available. + +0.821ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 0.974309 ns +No competitor benchmark is available. + +0.974ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 4.10549 ns +No competitor benchmark is available. + +4.11ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 0.962298 ns +No competitor benchmark is available. + +0.962ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 1.47767 ns +No competitor benchmark is available. + +1.48ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 1.17322 ns +No competitor benchmark is available. + +1.17ns + + +fdim + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 4.67447 ns +No competitor benchmark is available. + +4.67ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 2.75954 ns +No competitor benchmark is available. + +2.76ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 2.75265 ns +No competitor benchmark is available. + +2.75ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 3.08813 ns +No competitor benchmark is available. + +3.09ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 7.9185 ns +No competitor benchmark is available. + +7.92ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 8.14475 ns +No competitor benchmark is available. + +8.14ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 5.30447 ns +No competitor benchmark is available. + +5.30ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 6.04663 ns +No competitor benchmark is available. + +6.05ns + + +copysign + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 1.63556 ns +No competitor benchmark is available. + +1.64ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 0.457148 ns +No competitor benchmark is available. + +0.457ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 1.03432 ns +No competitor benchmark is available. + +1.03ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 0.385447 ns +No competitor benchmark is available. + +0.385ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.867482 ns +No competitor benchmark is available. + +0.867ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.649669 ns +No competitor benchmark is available. + +0.650ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.666614 ns +No competitor benchmark is available. + +0.667ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.693467 ns +No competitor benchmark is available. + +0.693ns + + +ldexp + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 2.31413 ns +No competitor benchmark is available. + +2.31ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 1.43459 ns +No competitor benchmark is available. + +1.43ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 1.29159 ns +No competitor benchmark is available. + +1.29ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 2.90402 ns +No competitor benchmark is available. + +2.90ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 4.94505 ns +No competitor benchmark is available. + +4.95ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 3.22877 ns +No competitor benchmark is available. + +3.23ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 6.20495 ns +No competitor benchmark is available. + +6.20ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 7.56259 ns +No competitor benchmark is available. + +7.56ns + + +scalbn + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 2.28754 ns +No competitor benchmark is available. + +2.29ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 1.36295 ns +No competitor benchmark is available. + +1.36ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 1.25648 ns +No competitor benchmark is available. + +1.26ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 3.01996 ns +No competitor benchmark is available. + +3.02ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 4.86417 ns +No competitor benchmark is available. + +4.86ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 3.23671 ns +No competitor benchmark is available. + +3.24ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 5.90379 ns +No competitor benchmark is available. + +5.90ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 7.18811 ns +No competitor benchmark is available. + +7.19ns + + +scalbln + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 2.28681 ns +No competitor benchmark is available. + +2.29ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 1.36331 ns +No competitor benchmark is available. + +1.36ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 1.25774 ns +No competitor benchmark is available. + +1.26ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 3.00978 ns +No competitor benchmark is available. + +3.01ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 4.87132 ns +No competitor benchmark is available. + +4.87ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 3.25244 ns +No competitor benchmark is available. + +3.25ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 5.9047 ns +No competitor benchmark is available. + +5.90ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 7.20295 ns +No competitor benchmark is available. + +7.20ns + + +frexp + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 2.73306 ns +No competitor benchmark is available. + +2.73ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 2.4124 ns +No competitor benchmark is available. + +2.41ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 1.81608 ns +No competitor benchmark is available. + +1.82ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 3.49678 ns +No competitor benchmark is available. + +3.50ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 10.3984 ns +No competitor benchmark is available. + +10.4ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 6.40474 ns +No competitor benchmark is available. + +6.40ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 9.57793 ns +No competitor benchmark is available. + +9.58ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 9.1333 ns +No competitor benchmark is available. + +9.13ns + + +modf + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 5.9831 ns +No competitor benchmark is available. + +5.98ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 5.82446 ns +No competitor benchmark is available. + +5.82ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 5.55057 ns +No competitor benchmark is available. + +5.55ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 6.81072 ns +No competitor benchmark is available. + +6.81ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 18.2368 ns +No competitor benchmark is available. + +18.2ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 20.5564 ns +No competitor benchmark is available. + +20.6ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 14.3059 ns +No competitor benchmark is available. + +14.3ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 13.0891 ns +No competitor benchmark is available. + +13.1ns + + +ilogb + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 2.01569 ns +No competitor benchmark is available. + +2.02ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 1.73381 ns +No competitor benchmark is available. + +1.73ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 1.19319 ns +No competitor benchmark is available. + +1.19ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 1.84593 ns +No competitor benchmark is available. + +1.85ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 1.55575 ns +No competitor benchmark is available. + +1.56ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 1.08304 ns +No competitor benchmark is available. + +1.08ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 0.929282 ns +No competitor benchmark is available. + +0.929ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 1.34464 ns +No competitor benchmark is available. + +1.34ns + + +logb + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 2.22124 ns +No competitor benchmark is available. + +2.22ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 1.67613 ns +No competitor benchmark is available. + +1.68ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 1.24016 ns +No competitor benchmark is available. + +1.24ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 1.98362 ns +No competitor benchmark is available. + +1.98ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 2.09344 ns +No competitor benchmark is available. + +2.09ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 0.969486 ns +No competitor benchmark is available. + +0.969ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 1.07416 ns +No competitor benchmark is available. + +1.07ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 1.25877 ns +No competitor benchmark is available. + +1.26ns + + +nextafter + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 6.76977 ns +No competitor benchmark is available. + +6.77ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 4.22908 ns +No competitor benchmark is available. + +4.23ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 4.41574 ns +No competitor benchmark is available. + +4.42ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 5.91763 ns +No competitor benchmark is available. + +5.92ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 8.15083 ns +No competitor benchmark is available. + +8.15ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 5.6612 ns +No competitor benchmark is available. + +5.66ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 4.20646 ns +No competitor benchmark is available. + +4.21ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 6.82932 ns +No competitor benchmark is available. + +6.83ns + + +nexttoward + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 6.79032 ns +No competitor benchmark is available. + +6.79ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 4.19917 ns +No competitor benchmark is available. + +4.20ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 4.58225 ns +No competitor benchmark is available. + +4.58ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 5.90443 ns +No competitor benchmark is available. + +5.90ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 8.11606 ns +No competitor benchmark is available. + +8.12ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 5.65128 ns +No competitor benchmark is available. + +5.65ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 4.27535 ns +No competitor benchmark is available. + +4.28ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 6.81086 ns +No competitor benchmark is available. + +6.81ns + + + +Roots & powers + +sqr + +Windows / x64 / MSVC; bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 2.16188 ns +No competitor benchmark is available. + +2.16ns + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 1.10042 ns +No competitor benchmark is available. + +1.10ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 1.45781 ns +No competitor benchmark is available. + +1.46ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 1.23052 ns +No competitor benchmark is available. + +1.23ns + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 18.2676 ns +No competitor benchmark is available. + +18.3ns + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 23.2144 ns +No competitor benchmark is available. + +23.2ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 22.793 ns +No competitor benchmark is available. + +22.8ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 23.3586 ns +No competitor benchmark is available. + +23.4ns + + +sqrt + +Windows / x64 / MSVC; bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 4.28225 ns +No competitor benchmark is available. + +4.28ns + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 3.82094 ns +No competitor benchmark is available. + +3.82ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 5.19148 ns +No competitor benchmark is available. + +5.19ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 4.94426 ns +No competitor benchmark is available. + +4.94ns + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 122.15 ns +No competitor benchmark is available. + +122ns + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 109.142 ns +No competitor benchmark is available. + +109ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 121.182 ns +No competitor benchmark is available. + +121ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 118.79 ns +No competitor benchmark is available. + +119ns + + +cbrt + +Windows / x64 / MSVC; bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 23.9693 ns +No competitor benchmark is available. + +24.0ns + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 22.4607 ns +No competitor benchmark is available. + +22.5ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 73.3647 ns +No competitor benchmark is available. + +73.4ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 18.2592 ns +No competitor benchmark is available. + +18.3ns + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 344.421 ns +No competitor benchmark is available. + +344ns + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 341.63 ns +No competitor benchmark is available. + +342ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 387.412 ns +No competitor benchmark is available. + +387ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 351.227 ns +No competitor benchmark is available. + +351ns + + +hypot + +Windows / x64 / MSVC; bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 8.76932 ns +No competitor benchmark is available. + +8.77ns + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 10.3911 ns +No competitor benchmark is available. + +10.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 8.94395 ns +No competitor benchmark is available. + +8.94ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 11.5655 ns +No competitor benchmark is available. + +11.6ns + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 172.597 ns +No competitor benchmark is available. + +173ns + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 165.073 ns +No competitor benchmark is available. + +165ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 174.939 ns +No competitor benchmark is available. + +175ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 173.409 ns +No competitor benchmark is available. + +173ns + + +pow + +Windows / x64 / MSVC; bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 195.878 ns +No competitor benchmark is available. + +196ns + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 191.819 ns +No competitor benchmark is available. + +192ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 219.244 ns +No competitor benchmark is available. + +219ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 241.251 ns +No competitor benchmark is available. + +241ns + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2549.39 ns +No competitor benchmark is available. + +2,549ns + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2624.56 ns +No competitor benchmark is available. + +2,625ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2714.45 ns +No competitor benchmark is available. + +2,714ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2626.79 ns +No competitor benchmark is available. + +2,627ns + + +ipow + +Windows / x64 / MSVC; bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 15.1064 ns +No competitor benchmark is available. + +15.1ns + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 23.8444 ns +No competitor benchmark is available. + +23.8ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 18.2011 ns +No competitor benchmark is available. + +18.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 26.5827 ns +No competitor benchmark is available. + +26.6ns + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 111.809 ns +No competitor benchmark is available. + +112ns + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 127.08 ns +No competitor benchmark is available. + +127ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 121.701 ns +No competitor benchmark is available. + +122ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 109.858 ns +No competitor benchmark is available. + +110ns + + + +Exponentials + +exp + +Windows / x64 / MSVC; bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 100.127 ns +No competitor benchmark is available. + +100ns + + +Windows / x64 / Clang (clang-cl); bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 92.0299 ns +No competitor benchmark is available. + +92.0ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 110.194 ns +No competitor benchmark is available. + +110ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 121.788 ns +No competitor benchmark is available. + +122ns + + +Windows / x64 / MSVC; bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 1006.84 ns +No competitor benchmark is available. + +1,007ns + + +Windows / x64 / Clang (clang-cl); bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 1011.98 ns +No competitor benchmark is available. + +1,012ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 1072.56 ns +No competitor benchmark is available. + +1,073ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 1040.92 ns +No competitor benchmark is available. + +1,041ns + + +exp2 + +Windows / x64 / MSVC; bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 96.1165 ns +No competitor benchmark is available. + +96.1ns + + +Windows / x64 / Clang (clang-cl); bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 90.387 ns +No competitor benchmark is available. + +90.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 101.621 ns +No competitor benchmark is available. + +102ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 115.409 ns +No competitor benchmark is available. + +115ns + + +Windows / x64 / MSVC; bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 826.152 ns +No competitor benchmark is available. + +826ns + + +Windows / x64 / Clang (clang-cl); bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 858.32 ns +No competitor benchmark is available. + +858ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 910.889 ns +No competitor benchmark is available. + +911ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 883.086 ns +No competitor benchmark is available. + +883ns + + +expm1 + +Windows / x64 / MSVC; bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 100.329 ns +No competitor benchmark is available. + +100ns + + +Windows / x64 / Clang (clang-cl); bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 93.9583 ns +No competitor benchmark is available. + +94.0ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 108.707 ns +No competitor benchmark is available. + +109ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 121.78 ns +No competitor benchmark is available. + +122ns + + +Windows / x64 / MSVC; bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 1009.31 ns +No competitor benchmark is available. + +1,009ns + + +Windows / x64 / Clang (clang-cl); bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 1011.37 ns +No competitor benchmark is available. + +1,011ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 1068.37 ns +No competitor benchmark is available. + +1,068ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 1030.76 ns +No competitor benchmark is available. + +1,031ns + + + +Logarithms + +log + +Windows / x64 / MSVC; bl::f128; logarithms / log +fltx bl::f128 (bl::log): 114.753 ns +No competitor benchmark is available. + +115ns + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log +fltx bl::f128 (bl::log): 122.793 ns +No competitor benchmark is available. + +123ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log +fltx bl::f128 (bl::log): 138.117 ns +No competitor benchmark is available. + +138ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log +fltx bl::f128 (bl::log): 144.37 ns +No competitor benchmark is available. + +144ns + + +Windows / x64 / MSVC; bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1670.2 ns +No competitor benchmark is available. + +1,670ns + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1769.26 ns +No competitor benchmark is available. + +1,769ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1781.05 ns +No competitor benchmark is available. + +1,781ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1726.52 ns +No competitor benchmark is available. + +1,727ns + + +log2 + +Windows / x64 / MSVC; bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 116.827 ns +No competitor benchmark is available. + +117ns + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 126.89 ns +No competitor benchmark is available. + +127ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 143.079 ns +No competitor benchmark is available. + +143ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 148.693 ns +No competitor benchmark is available. + +149ns + + +Windows / x64 / MSVC; bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1704.04 ns +No competitor benchmark is available. + +1,704ns + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1798.93 ns +No competitor benchmark is available. + +1,799ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1808.87 ns +No competitor benchmark is available. + +1,809ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1755.76 ns +No competitor benchmark is available. + +1,756ns + + +log10 + +Windows / x64 / MSVC; bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 116.714 ns +No competitor benchmark is available. + +117ns + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 127.245 ns +No competitor benchmark is available. + +127ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 144.788 ns +No competitor benchmark is available. + +145ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 148.438 ns +No competitor benchmark is available. + +148ns + + +Windows / x64 / MSVC; bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1719.26 ns +No competitor benchmark is available. + +1,719ns + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1807.01 ns +No competitor benchmark is available. + +1,807ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1828.01 ns +No competitor benchmark is available. + +1,828ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1777.48 ns +No competitor benchmark is available. + +1,777ns + + +log1p + +Windows / x64 / MSVC; bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 120.79 ns +No competitor benchmark is available. + +121ns + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 123.898 ns +No competitor benchmark is available. + +124ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 150.549 ns +No competitor benchmark is available. + +151ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 152.11 ns +No competitor benchmark is available. + +152ns + + +Windows / x64 / MSVC; bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1723.98 ns +No competitor benchmark is available. + +1,724ns + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1812.71 ns +No competitor benchmark is available. + +1,813ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1839.43 ns +No competitor benchmark is available. + +1,839ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1766.78 ns +No competitor benchmark is available. + +1,767ns + + + +Trigonometric + +sin + +Windows / x64 / MSVC; bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 87.1875 ns +No competitor benchmark is available. + +87.2ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 84.3442 ns +No competitor benchmark is available. + +84.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 101.54 ns +No competitor benchmark is available. + +102ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 107.149 ns +No competitor benchmark is available. + +107ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 881.895 ns +No competitor benchmark is available. + +882ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 910.254 ns +No competitor benchmark is available. + +910ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 896.25 ns +No competitor benchmark is available. + +896ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 851.709 ns +No competitor benchmark is available. + +852ns + + +cos + +Windows / x64 / MSVC; bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 86.4502 ns +No competitor benchmark is available. + +86.5ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 84.1426 ns +No competitor benchmark is available. + +84.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 101.039 ns +No competitor benchmark is available. + +101ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 106.911 ns +No competitor benchmark is available. + +107ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 881.65 ns +No competitor benchmark is available. + +882ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 909.775 ns +No competitor benchmark is available. + +910ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 898.35 ns +No competitor benchmark is available. + +898ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 874.697 ns +No competitor benchmark is available. + +875ns + + +sincos + +Windows / x64 / MSVC; bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 93.0255 ns +No competitor benchmark is available. + +93.0ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 94.104 ns +No competitor benchmark is available. + +94.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 107.501 ns +No competitor benchmark is available. + +108ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 118.105 ns +No competitor benchmark is available. + +118ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1081.34 ns +No competitor benchmark is available. + +1,081ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1017.44 ns +No competitor benchmark is available. + +1,017ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1299.07 ns +No competitor benchmark is available. + +1,299ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1035.23 ns +No competitor benchmark is available. + +1,035ns + + +tan + +Windows / x64 / MSVC; bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 93.1851 ns +No competitor benchmark is available. + +93.2ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 96.1015 ns +No competitor benchmark is available. + +96.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 108.021 ns +No competitor benchmark is available. + +108ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 116.382 ns +No competitor benchmark is available. + +116ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1143.8 ns +No competitor benchmark is available. + +1,144ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1104.15 ns +No competitor benchmark is available. + +1,104ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1356.22 ns +No competitor benchmark is available. + +1,356ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1119.03 ns +No competitor benchmark is available. + +1,119ns + + +asin + +Windows / x64 / MSVC; bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 157.614 ns +No competitor benchmark is available. + +158ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 156.887 ns +No competitor benchmark is available. + +157ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 189.293 ns +No competitor benchmark is available. + +189ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 196.609 ns +No competitor benchmark is available. + +197ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1336.98 ns +No competitor benchmark is available. + +1,337ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1381.49 ns +No competitor benchmark is available. + +1,381ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1406.12 ns +No competitor benchmark is available. + +1,406ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1343.28 ns +No competitor benchmark is available. + +1,343ns + + +acos + +Windows / x64 / MSVC; bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 162.6 ns +No competitor benchmark is available. + +163ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 162.936 ns +No competitor benchmark is available. + +163ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 194.496 ns +No competitor benchmark is available. + +194ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 202.056 ns +No competitor benchmark is available. + +202ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1347.89 ns +No competitor benchmark is available. + +1,348ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1401.97 ns +No competitor benchmark is available. + +1,402ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1408.41 ns +No competitor benchmark is available. + +1,408ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1335.56 ns +No competitor benchmark is available. + +1,336ns + + +atan + +Windows / x64 / MSVC; bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 116.882 ns +No competitor benchmark is available. + +117ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 108.882 ns +No competitor benchmark is available. + +109ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 137.018 ns +No competitor benchmark is available. + +137ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 142.118 ns +No competitor benchmark is available. + +142ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 879.902 ns +No competitor benchmark is available. + +880ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 915.506 ns +No competitor benchmark is available. + +916ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 908.268 ns +No competitor benchmark is available. + +908ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 906.087 ns +No competitor benchmark is available. + +906ns + + +atan2 + +Windows / x64 / MSVC; bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 118.185 ns +No competitor benchmark is available. + +118ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 116.05 ns +No competitor benchmark is available. + +116ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 144.128 ns +No competitor benchmark is available. + +144ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 148.882 ns +No competitor benchmark is available. + +149ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 959.364 ns +No competitor benchmark is available. + +959ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 977.919 ns +No competitor benchmark is available. + +978ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 966.113 ns +No competitor benchmark is available. + +966ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 950.651 ns +No competitor benchmark is available. + +951ns + + + +Hyperbolic + +sinh + +Windows / x64 / MSVC; bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 110.564 ns +No competitor benchmark is available. + +111ns + + +Windows / x64 / Clang (clang-cl); bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 106.169 ns +No competitor benchmark is available. + +106ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 124.678 ns +No competitor benchmark is available. + +125ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 140.21 ns +No competitor benchmark is available. + +140ns + + +Windows / x64 / MSVC; bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1241.78 ns +No competitor benchmark is available. + +1,242ns + + +Windows / x64 / Clang (clang-cl); bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1315.36 ns +No competitor benchmark is available. + +1,315ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1394.11 ns +No competitor benchmark is available. + +1,394ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1293.86 ns +No competitor benchmark is available. + +1,294ns + + +cosh + +Windows / x64 / MSVC; bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 107.178 ns +No competitor benchmark is available. + +107ns + + +Windows / x64 / Clang (clang-cl); bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 105.259 ns +No competitor benchmark is available. + +105ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 123.606 ns +No competitor benchmark is available. + +124ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 139.154 ns +No competitor benchmark is available. + +139ns + + +Windows / x64 / MSVC; bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1244.5 ns +No competitor benchmark is available. + +1,245ns + + +Windows / x64 / Clang (clang-cl); bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1314.06 ns +No competitor benchmark is available. + +1,314ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1399.14 ns +No competitor benchmark is available. + +1,399ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1289.36 ns +No competitor benchmark is available. + +1,289ns + + +tanh + +Windows / x64 / MSVC; bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 113.227 ns +No competitor benchmark is available. + +113ns + + +Windows / x64 / Clang (clang-cl); bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 111.317 ns +No competitor benchmark is available. + +111ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 129.321 ns +No competitor benchmark is available. + +129ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 146.486 ns +No competitor benchmark is available. + +146ns + + +Windows / x64 / MSVC; bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1222.25 ns +No competitor benchmark is available. + +1,222ns + + +Windows / x64 / Clang (clang-cl); bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1260.84 ns +No competitor benchmark is available. + +1,261ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1315.96 ns +No competitor benchmark is available. + +1,316ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1261.37 ns +No competitor benchmark is available. + +1,261ns + + +asinh + +Windows / x64 / MSVC; bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 119.084 ns +No competitor benchmark is available. + +119ns + + +Windows / x64 / Clang (clang-cl); bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 119.053 ns +No competitor benchmark is available. + +119ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 138.372 ns +No competitor benchmark is available. + +138ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 142.642 ns +No competitor benchmark is available. + +143ns + + +Windows / x64 / MSVC; bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2613.48 ns +No competitor benchmark is available. + +2,613ns + + +Windows / x64 / Clang (clang-cl); bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2675.54 ns +No competitor benchmark is available. + +2,676ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2806.67 ns +No competitor benchmark is available. + +2,807ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2643.39 ns +No competitor benchmark is available. + +2,643ns + + +acosh + +Windows / x64 / MSVC; bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 133.359 ns +No competitor benchmark is available. + +133ns + + +Windows / x64 / Clang (clang-cl); bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 132.613 ns +No competitor benchmark is available. + +133ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 163.232 ns +No competitor benchmark is available. + +163ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 165.884 ns +No competitor benchmark is available. + +166ns + + +Windows / x64 / MSVC; bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2413.35 ns +No competitor benchmark is available. + +2,413ns + + +Windows / x64 / Clang (clang-cl); bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2489.94 ns +No competitor benchmark is available. + +2,490ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2564.92 ns +No competitor benchmark is available. + +2,565ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2423.68 ns +No competitor benchmark is available. + +2,424ns + + +atanh + +Windows / x64 / MSVC; bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 130.922 ns +No competitor benchmark is available. + +131ns + + +Windows / x64 / Clang (clang-cl); bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 129.355 ns +No competitor benchmark is available. + +129ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 163.424 ns +No competitor benchmark is available. + +163ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 163.07 ns +No competitor benchmark is available. + +163ns + + +Windows / x64 / MSVC; bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2192.63 ns +No competitor benchmark is available. + +2,193ns + + +Windows / x64 / Clang (clang-cl); bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2330.35 ns +No competitor benchmark is available. + +2,330ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2405.86 ns +No competitor benchmark is available. + +2,406ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2273.56 ns +No competitor benchmark is available. + +2,274ns + + + +Special + +erfc + +Windows / x64 / MSVC; bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 560.361 ns +No competitor benchmark is available. + +560ns + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 549.55 ns +No competitor benchmark is available. + +550ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 782.822 ns +No competitor benchmark is available. + +783ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 813.301 ns +No competitor benchmark is available. + +813ns + + +Windows / x64 / MSVC; bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 8882.23 ns +No competitor benchmark is available. + +8,882ns + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 10389.1 ns +No competitor benchmark is available. + +10,389ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 11072.7 ns +No competitor benchmark is available. + +11,073ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 14825 ns +No competitor benchmark is available. + +14,825ns + + +erf + +Windows / x64 / MSVC; bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 565.194 ns +No competitor benchmark is available. + +565ns + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 554.694 ns +No competitor benchmark is available. + +555ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 785.819 ns +No competitor benchmark is available. + +786ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 814.523 ns +No competitor benchmark is available. + +815ns + + +Windows / x64 / MSVC; bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 8880.13 ns +No competitor benchmark is available. + +8,880ns + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 10403.1 ns +No competitor benchmark is available. + +10,403ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 11166.4 ns +No competitor benchmark is available. + +11,166ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 15769.5 ns +No competitor benchmark is available. + +15,770ns + + +tgamma + +Windows / x64 / MSVC; bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 473.564 ns +No competitor benchmark is available. + +474ns + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 464.805 ns +No competitor benchmark is available. + +465ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 564.507 ns +No competitor benchmark is available. + +565ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 593.503 ns +No competitor benchmark is available. + +594ns + + +Windows / x64 / MSVC; bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 9361.23 ns +No competitor benchmark is available. + +9,361ns + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 10572.7 ns +No competitor benchmark is available. + +10,573ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 10126.6 ns +No competitor benchmark is available. + +10,127ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 11903.9 ns +No competitor benchmark is available. + +11,904ns + + +lgamma + +Windows / x64 / MSVC; bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 526.921 ns +No competitor benchmark is available. + +527ns + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 528.509 ns +No competitor benchmark is available. + +529ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 621.733 ns +No competitor benchmark is available. + +622ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 657.828 ns +No competitor benchmark is available. + +658ns + + +Windows / x64 / MSVC; bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 8335.06 ns +No competitor benchmark is available. + +8,335ns + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 9572.66 ns +No competitor benchmark is available. + +9,573ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 9099.22 ns +No competitor benchmark is available. + +9,099ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 11231.2 ns +No competitor benchmark is available. + +11,231ns + + + +Comparisons + +equal + +Windows / x64 / MSVC; bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 0.670391 ns +No competitor benchmark is available. + +0.670ns + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 0.855078 ns +No competitor benchmark is available. + +0.855ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 0.818484 ns +No competitor benchmark is available. + +0.818ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 1.11568 ns +No competitor benchmark is available. + +1.12ns + + +Windows / x64 / MSVC; bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.774325 ns +No competitor benchmark is available. + +0.774ns + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.734277 ns +No competitor benchmark is available. + +0.734ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.539875 ns +No competitor benchmark is available. + +0.540ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.779622 ns +No competitor benchmark is available. + +0.780ns + + +not_equal + +Windows / x64 / MSVC; bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 0.667387 ns +No competitor benchmark is available. + +0.667ns + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 0.933284 ns +No competitor benchmark is available. + +0.933ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 0.922221 ns +No competitor benchmark is available. + +0.922ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 1.11403 ns +No competitor benchmark is available. + +1.11ns + + +Windows / x64 / MSVC; bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.77455 ns +No competitor benchmark is available. + +0.775ns + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.644019 ns +No competitor benchmark is available. + +0.644ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.604791 ns +No competitor benchmark is available. + +0.605ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.79349 ns +No competitor benchmark is available. + +0.793ns + + +less + +Windows / x64 / MSVC; bl::f128; comparisons / less +fltx bl::f128 (bl::less): 2.01654 ns +No competitor benchmark is available. + +2.02ns + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / less +fltx bl::f128 (bl::less): 2.13032 ns +No competitor benchmark is available. + +2.13ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / less +fltx bl::f128 (bl::less): 1.20977 ns +No competitor benchmark is available. + +1.21ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / less +fltx bl::f128 (bl::less): 2.15281 ns +No competitor benchmark is available. + +2.15ns + + +Windows / x64 / MSVC; bl::f256; comparisons / less +fltx bl::f256 (bl::less): 2.02135 ns +No competitor benchmark is available. + +2.02ns + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / less +fltx bl::f256 (bl::less): 0.84071 ns +No competitor benchmark is available. + +0.841ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / less +fltx bl::f256 (bl::less): 0.79452 ns +No competitor benchmark is available. + +0.795ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / less +fltx bl::f256 (bl::less): 1.59421 ns +No competitor benchmark is available. + +1.59ns + + +greater + +Windows / x64 / MSVC; bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 2.02084 ns +No competitor benchmark is available. + +2.02ns + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 2.0816 ns +No competitor benchmark is available. + +2.08ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 1.05977 ns +No competitor benchmark is available. + +1.06ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 2.10241 ns +No competitor benchmark is available. + +2.10ns + + +Windows / x64 / MSVC; bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 2.09486 ns +No competitor benchmark is available. + +2.09ns + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 0.785446 ns +No competitor benchmark is available. + +0.785ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 1.8735 ns +No competitor benchmark is available. + +1.87ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 1.60468 ns +No competitor benchmark is available. + +1.60ns + + +less_equal + +Windows / x64 / MSVC; bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 2.00302 ns +No competitor benchmark is available. + +2.00ns + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 2.13467 ns +No competitor benchmark is available. + +2.13ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 1.14907 ns +No competitor benchmark is available. + +1.15ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 2.17029 ns +No competitor benchmark is available. + +2.17ns + + +Windows / x64 / MSVC; bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 2.0467 ns +No competitor benchmark is available. + +2.05ns + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 0.692103 ns +No competitor benchmark is available. + +0.692ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 0.814922 ns +No competitor benchmark is available. + +0.815ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 1.62986 ns +No competitor benchmark is available. + +1.63ns + + +greater_equal + +Windows / x64 / MSVC; bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 2.13436 ns +No competitor benchmark is available. + +2.13ns + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 2.22412 ns +No competitor benchmark is available. + +2.22ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 1.00852 ns +No competitor benchmark is available. + +1.01ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 2.17357 ns +No competitor benchmark is available. + +2.17ns + + +Windows / x64 / MSVC; bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 2.01429 ns +No competitor benchmark is available. + +2.01ns + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 0.690875 ns +No competitor benchmark is available. + +0.691ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 0.808873 ns +No competitor benchmark is available. + +0.809ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 1.59988 ns +No competitor benchmark is available. + +1.60ns + + + +Random + +uniform_real + +Windows / x64 / MSVC; bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 9.03491 ns +No competitor benchmark is available. + +9.03ns + + +Windows / x64 / Clang (clang-cl); bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 7.23012 ns +No competitor benchmark is available. + +7.23ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 21.1265 ns +No competitor benchmark is available. + +21.1ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 5.82739 ns +No competitor benchmark is available. + +5.83ns + + +Windows / x64 / MSVC; bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 19.1622 ns +No competitor benchmark is available. + +19.2ns + + +Windows / x64 / Clang (clang-cl); bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 14.344 ns +No competitor benchmark is available. + +14.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 40.564 ns +No competitor benchmark is available. + +40.6ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 11.4051 ns +No competitor benchmark is available. + +11.4ns + + +normal + +Windows / x64 / MSVC; bl::f128; random / normal +fltx bl::f128 (bl::normal): 58.9263 ns +No competitor benchmark is available. + +58.9ns + + +Windows / x64 / Clang (clang-cl); bl::f128; random / normal +fltx bl::f128 (bl::normal): 41.8138 ns +No competitor benchmark is available. + +41.8ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; random / normal +fltx bl::f128 (bl::normal): 108.644 ns +No competitor benchmark is available. + +109ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; random / normal +fltx bl::f128 (bl::normal): 40.8647 ns +No competitor benchmark is available. + +40.9ns + + +Windows / x64 / MSVC; bl::f256; random / normal +fltx bl::f256 (bl::normal): 265.444 ns +No competitor benchmark is available. + +265ns + + +Windows / x64 / Clang (clang-cl); bl::f256; random / normal +fltx bl::f256 (bl::normal): 290.425 ns +No competitor benchmark is available. + +290ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; random / normal +fltx bl::f256 (bl::normal): 354.775 ns +No competitor benchmark is available. + +355ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; random / normal +fltx bl::f256 (bl::normal): 265.854 ns +No competitor benchmark is available. + +266ns + + + +Mixed Workloads + +product_sum + +Windows / x64 / MSVC; bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 5.56741 ns +No competitor benchmark is available. + +5.57ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 5.05645 ns +No competitor benchmark is available. + +5.06ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 7.49125 ns +No competitor benchmark is available. + +7.49ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 7.53944 ns +No competitor benchmark is available. + +7.54ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 42.9357 ns +No competitor benchmark is available. + +42.9ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 58.0424 ns +No competitor benchmark is available. + +58.0ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 46.1936 ns +No competitor benchmark is available. + +46.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 49.1086 ns +No competitor benchmark is available. + +49.1ns + + +chained_arithmetic + +Windows / x64 / MSVC; bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 20.0698 ns +No competitor benchmark is available. + +20.1ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 14.169 ns +No competitor benchmark is available. + +14.2ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 22.7936 ns +No competitor benchmark is available. + +22.8ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 20.298 ns +No competitor benchmark is available. + +20.3ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 155.241 ns +No competitor benchmark is available. + +155ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 151.306 ns +No competitor benchmark is available. + +151ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 164.655 ns +No competitor benchmark is available. + +165ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 142.109 ns +No competitor benchmark is available. + +142ns + + +affine_trig + +Windows / x64 / MSVC; bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 174.252 ns +No competitor benchmark is available. + +174ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 179.936 ns +No competitor benchmark is available. + +180ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 217.34 ns +No competitor benchmark is available. + +217ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 233.701 ns +No competitor benchmark is available. + +234ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1804.63 ns +No competitor benchmark is available. + +1,805ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1840.35 ns +No competitor benchmark is available. + +1,840ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1832.23 ns +No competitor benchmark is available. + +1,832ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1799.59 ns +No competitor benchmark is available. + +1,800ns + + +mandelbrot + +Windows / x64 / MSVC; bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 15.6098 ns +No competitor benchmark is available. + +15.6ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 12.4794 ns +No competitor benchmark is available. + +12.5ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 17.9848 ns +No competitor benchmark is available. + +18.0ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 15.0928 ns +No competitor benchmark is available. + +15.1ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 123.981 ns +No competitor benchmark is available. + +124ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 125.521 ns +No competitor benchmark is available. + +126ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 119.11 ns +No competitor benchmark is available. + +119ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 127.581 ns +No competitor benchmark is available. + +128ns + + +matrix_vector_4x4 + +Windows / x64 / MSVC; bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 67.5995 ns +No competitor benchmark is available. + +67.6ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 54.4244 ns +No competitor benchmark is available. + +54.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 80.6717 ns +No competitor benchmark is available. + +80.7ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 49.6912 ns +No competitor benchmark is available. + +49.7ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 557.212 ns +No competitor benchmark is available. + +557ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 594.861 ns +No competitor benchmark is available. + +595ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 527.544 ns +No competitor benchmark is available. + +528ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 560.712 ns +No competitor benchmark is available. + +561ns + + +horner_polynomial + +Windows / x64 / MSVC; bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 85.2925 ns +No competitor benchmark is available. + +85.3ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 86.4244 ns +No competitor benchmark is available. + +86.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 101.755 ns +No competitor benchmark is available. + +102ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 98.5209 ns +No competitor benchmark is available. + +98.5ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 394.94 ns +No competitor benchmark is available. + +395ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 434.449 ns +No competitor benchmark is available. + +434ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 420.368 ns +No competitor benchmark is available. + +420ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 473.255 ns +No competitor benchmark is available. + +473ns + + +newton_root + +Windows / x64 / MSVC; bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 31.2798 ns +No competitor benchmark is available. + +31.3ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 22.9943 ns +No competitor benchmark is available. + +23.0ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 30.1008 ns +No competitor benchmark is available. + +30.1ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 30.1299 ns +No competitor benchmark is available. + +30.1ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 219.374 ns +No competitor benchmark is available. + +219ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 244.132 ns +No competitor benchmark is available. + +244ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 236.633 ns +No competitor benchmark is available. + +237ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 250.279 ns +No competitor benchmark is available. + +250ns + + +log_sum_exp + +Windows / x64 / MSVC; bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 947.517 ns +No competitor benchmark is available. + +948ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 793.133 ns +No competitor benchmark is available. + +793ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 900.184 ns +No competitor benchmark is available. + +900ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 965.639 ns +No competitor benchmark is available. + +966ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 8662.5 ns +No competitor benchmark is available. + +8,662ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 8837.5 ns +No competitor benchmark is available. + +8,838ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 9137.5 ns +No competitor benchmark is available. + +9,138ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 9212.5 ns +No competitor benchmark is available. + +9,212ns + + +haversine + +Windows / x64 / MSVC; bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 439.18 ns +No competitor benchmark is available. + +439ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 411.278 ns +No competitor benchmark is available. + +411ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 532.112 ns +No competitor benchmark is available. + +532ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 551.588 ns +No competitor benchmark is available. + +552ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4656.67 ns +No competitor benchmark is available. + +4,657ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4850.88 ns +No competitor benchmark is available. + +4,851ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4762.77 ns +No competitor benchmark is available. + +4,763ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4750 ns +No competitor benchmark is available. + +4,750ns + + diff --git a/validation/metrics/generated/performance/performance_table_fastmath_compact.svg b/validation/metrics/generated/performance/performance_table_fastmath_compact.svg new file mode 100644 index 0000000..cb695be --- /dev/null +++ b/validation/metrics/generated/performance/performance_table_fastmath_compact.svg @@ -0,0 +1,4980 @@ + +fltx consumer fast-math performance +Columns identify the target platform and build toolchain. FLTX time per iteration; the second line shows FLTX speed versus the fastest available competitor for each target with consumer fast-math enabled. + + + +Function + +bl::f128 + +bl::f256 + +Windows + +WebAssembly + +Windows + +WebAssembly + +x64 + +wasm32 + +x64 + +wasm32 + + +MSVC + + + +Clang +clang-cl + + + +GCC +MinGW-w64 + + + +Clang +Emscripten + + + +MSVC + + + +Clang +clang-cl + + + +GCC +MinGW-w64 + + + +Clang +Emscripten + + + +Arithmetic + +add + +Windows / x64 / MSVC; bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 1.85656 ns +No competitor benchmark is available. + +1.9ns + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 0.923151 ns +No competitor benchmark is available. + +0.92ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 1.82162 ns +No competitor benchmark is available. + +1.8ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / add +fltx bl::f128 (bl::add): 0.926152 ns +No competitor benchmark is available. + +0.93ns + + +Windows / x64 / MSVC; bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 10.6426 ns +No competitor benchmark is available. + +10.6ns + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 9.45469 ns +No competitor benchmark is available. + +9.5ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 10.4623 ns +No competitor benchmark is available. + +10.5ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / add +fltx bl::f256 (bl::add): 10.0746 ns +No competitor benchmark is available. + +10.1ns + + +subtract + +Windows / x64 / MSVC; bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 1.85275 ns +No competitor benchmark is available. + +1.9ns + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 0.922846 ns +No competitor benchmark is available. + +0.92ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 1.82436 ns +No competitor benchmark is available. + +1.8ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / subtract +fltx bl::f128 (bl::subtract): 0.923213 ns +No competitor benchmark is available. + +0.92ns + + +Windows / x64 / MSVC; bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 10.6504 ns +No competitor benchmark is available. + +10.7ns + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 18.6813 ns +No competitor benchmark is available. + +18.7ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 10.3886 ns +No competitor benchmark is available. + +10.4ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / subtract +fltx bl::f256 (bl::subtract): 10.184 ns +No competitor benchmark is available. + +10.2ns + + +multiply + +Windows / x64 / MSVC; bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 2.43589 ns +No competitor benchmark is available. + +2.4ns + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 2.48877 ns +No competitor benchmark is available. + +2.5ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 2.16918 ns +No competitor benchmark is available. + +2.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / multiply +fltx bl::f128 (bl::multiply): 2.02879 ns +No competitor benchmark is available. + +2.0ns + + +Windows / x64 / MSVC; bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 18.6639 ns +No competitor benchmark is available. + +18.7ns + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 34.9913 ns +No competitor benchmark is available. + +35.0ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 25.3014 ns +No competitor benchmark is available. + +25.3ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / multiply +fltx bl::f256 (bl::multiply): 30.5402 ns +No competitor benchmark is available. + +30.5ns + + +divide + +Windows / x64 / MSVC; bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 1.84535 ns +No competitor benchmark is available. + +1.8ns + + +Windows / x64 / Clang (clang-cl); bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 1.59495 ns +No competitor benchmark is available. + +1.6ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 2.11077 ns +No competitor benchmark is available. + +2.1ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; arithmetic / divide +fltx bl::f128 (bl::divide): 2.49072 ns +No competitor benchmark is available. + +2.5ns + + +Windows / x64 / MSVC; bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 80.5078 ns +No competitor benchmark is available. + +80.5ns + + +Windows / x64 / Clang (clang-cl); bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 96.9482 ns +No competitor benchmark is available. + +96.9ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 107.238 ns +No competitor benchmark is available. + +107ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; arithmetic / divide +fltx bl::f256 (bl::divide): 91.7367 ns +No competitor benchmark is available. + +91.7ns + + + +IO + +to_string + +Windows / x64 / MSVC; bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 213.527 ns +No competitor benchmark is available. + +214ns + + +Windows / x64 / Clang (clang-cl); bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 186.145 ns +No competitor benchmark is available. + +186ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 240.582 ns +No competitor benchmark is available. + +241ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; io / to_string +fltx bl::f128 (bl::to_string): 254.208 ns +No competitor benchmark is available. + +254ns + + +Windows / x64 / MSVC; bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 355.387 ns +No competitor benchmark is available. + +355ns + + +Windows / x64 / Clang (clang-cl); bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 300.293 ns +No competitor benchmark is available. + +300ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 347.804 ns +No competitor benchmark is available. + +348ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; io / to_string +fltx bl::f256 (bl::to_string): 407.773 ns +No competitor benchmark is available. + +408ns + + +to_chars + +Windows / x64 / MSVC; bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 180.934 ns +No competitor benchmark is available. + +181ns + + +Windows / x64 / Clang (clang-cl); bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 154.33 ns +No competitor benchmark is available. + +154ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 199.984 ns +No competitor benchmark is available. + +200ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; io / to_chars +fltx bl::f128 (bl::to_chars): 219.818 ns +No competitor benchmark is available. + +220ns + + +Windows / x64 / MSVC; bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 299.857 ns +No competitor benchmark is available. + +300ns + + +Windows / x64 / Clang (clang-cl); bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 256.474 ns +No competitor benchmark is available. + +256ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 303.659 ns +No competitor benchmark is available. + +304ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; io / to_chars +fltx bl::f256 (bl::to_chars): 371.082 ns +No competitor benchmark is available. + +371ns + + +parse + +Windows / x64 / MSVC; bl::f128; io / parse +fltx bl::f128 (bl::parse): 226.226 ns +No competitor benchmark is available. + +226ns + + +Windows / x64 / Clang (clang-cl); bl::f128; io / parse +fltx bl::f128 (bl::parse): 202.515 ns +No competitor benchmark is available. + +203ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; io / parse +fltx bl::f128 (bl::parse): 199.427 ns +No competitor benchmark is available. + +199ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; io / parse +fltx bl::f128 (bl::parse): 282.758 ns +No competitor benchmark is available. + +283ns + + +Windows / x64 / MSVC; bl::f256; io / parse +fltx bl::f256 (bl::parse): 430.329 ns +No competitor benchmark is available. + +430ns + + +Windows / x64 / Clang (clang-cl); bl::f256; io / parse +fltx bl::f256 (bl::parse): 354.891 ns +No competitor benchmark is available. + +355ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; io / parse +fltx bl::f256 (bl::parse): 462.088 ns +No competitor benchmark is available. + +462ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; io / parse +fltx bl::f256 (bl::parse): 554.891 ns +No competitor benchmark is available. + +555ns + + + +Rounding + +floor + +Windows / x64 / MSVC; bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 2.85344 ns +No competitor benchmark is available. + +2.9ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 1.56631 ns +No competitor benchmark is available. + +1.6ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 1.01062 ns +No competitor benchmark is available. + +1.0ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / floor +fltx bl::f128 (bl::floor): 0.761136 ns +No competitor benchmark is available. + +0.76ns + + +Windows / x64 / MSVC; bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 5.18609 ns +No competitor benchmark is available. + +5.2ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 1.48743 ns +No competitor benchmark is available. + +1.5ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 1.28778 ns +No competitor benchmark is available. + +1.3ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / floor +fltx bl::f256 (bl::floor): 0.941429 ns +No competitor benchmark is available. + +0.94ns + + +ceil + +Windows / x64 / MSVC; bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 3.32703 ns +No competitor benchmark is available. + +3.3ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 1.9874 ns +No competitor benchmark is available. + +2.0ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 1.5115 ns +No competitor benchmark is available. + +1.5ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / ceil +fltx bl::f128 (bl::ceil): 1.51496 ns +No competitor benchmark is available. + +1.5ns + + +Windows / x64 / MSVC; bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 5.1666 ns +No competitor benchmark is available. + +5.2ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 1.5999 ns +No competitor benchmark is available. + +1.6ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 1.24492 ns +No competitor benchmark is available. + +1.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / ceil +fltx bl::f256 (bl::ceil): 0.941186 ns +No competitor benchmark is available. + +0.94ns + + +trunc + +Windows / x64 / MSVC; bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 3.96658 ns +No competitor benchmark is available. + +4.0ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 2.19761 ns +No competitor benchmark is available. + +2.2ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 1.6242 ns +No competitor benchmark is available. + +1.6ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / trunc +fltx bl::f128 (bl::trunc): 2.29846 ns +No competitor benchmark is available. + +2.3ns + + +Windows / x64 / MSVC; bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 7.59028 ns +No competitor benchmark is available. + +7.6ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 4.28194 ns +No competitor benchmark is available. + +4.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 2.31378 ns +No competitor benchmark is available. + +2.3ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / trunc +fltx bl::f256 (bl::trunc): 2.86993 ns +No competitor benchmark is available. + +2.9ns + + +round + +Windows / x64 / MSVC; bl::f128; rounding / round +fltx bl::f128 (bl::round): 9.96524 ns +No competitor benchmark is available. + +10.0ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / round +fltx bl::f128 (bl::round): 7.50376 ns +No competitor benchmark is available. + +7.5ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / round +fltx bl::f128 (bl::round): 10.1872 ns +No competitor benchmark is available. + +10.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / round +fltx bl::f128 (bl::round): 8.78235 ns +No competitor benchmark is available. + +8.8ns + + +Windows / x64 / MSVC; bl::f256; rounding / round +fltx bl::f256 (bl::round): 12.8702 ns +No competitor benchmark is available. + +12.9ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / round +fltx bl::f256 (bl::round): 8.79089 ns +No competitor benchmark is available. + +8.8ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / round +fltx bl::f256 (bl::round): 10.0954 ns +No competitor benchmark is available. + +10.1ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / round +fltx bl::f256 (bl::round): 13.4325 ns +No competitor benchmark is available. + +13.4ns + + +roundeven + +Windows / x64 / MSVC; bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 10.0978 ns +No competitor benchmark is available. + +10.1ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 9.54392 ns +No competitor benchmark is available. + +9.5ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 6.73846 ns +No competitor benchmark is available. + +6.7ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / roundeven +fltx bl::f128 (bl::roundeven): 10.3311 ns +No competitor benchmark is available. + +10.3ns + + +Windows / x64 / MSVC; bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 9.57136 ns +No competitor benchmark is available. + +9.6ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 8.36294 ns +No competitor benchmark is available. + +8.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 9.12525 ns +No competitor benchmark is available. + +9.1ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / roundeven +fltx bl::f256 (bl::roundeven): 8.16249 ns +No competitor benchmark is available. + +8.2ns + + +lround + +Windows / x64 / MSVC; bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 4.55205 ns +No competitor benchmark is available. + +4.6ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 4.43628 ns +No competitor benchmark is available. + +4.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 3.4087 ns +No competitor benchmark is available. + +3.4ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / lround +fltx bl::f128 (bl::lround): 6.76038 ns +No competitor benchmark is available. + +6.8ns + + +Windows / x64 / MSVC; bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 8.27642 ns +No competitor benchmark is available. + +8.3ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 6.56238 ns +No competitor benchmark is available. + +6.6ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 5.13466 ns +No competitor benchmark is available. + +5.1ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / lround +fltx bl::f256 (bl::lround): 6.7004 ns +No competitor benchmark is available. + +6.7ns + + +llround + +Windows / x64 / MSVC; bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 4.36573 ns +No competitor benchmark is available. + +4.4ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 4.07939 ns +No competitor benchmark is available. + +4.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 3.24877 ns +No competitor benchmark is available. + +3.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / llround +fltx bl::f128 (bl::llround): 6.27377 ns +No competitor benchmark is available. + +6.3ns + + +Windows / x64 / MSVC; bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 6.88507 ns +No competitor benchmark is available. + +6.9ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 6.56848 ns +No competitor benchmark is available. + +6.6ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 4.84828 ns +No competitor benchmark is available. + +4.8ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / llround +fltx bl::f256 (bl::llround): 6.52185 ns +No competitor benchmark is available. + +6.5ns + + +round_decimals + +Windows / x64 / MSVC; bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 83.5571 ns +No competitor benchmark is available. + +83.6ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 77.6786 ns +No competitor benchmark is available. + +77.7ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 78.2261 ns +No competitor benchmark is available. + +78.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / round_decimals +fltx bl::f128 (bl::round_decimals): 93.2706 ns +No competitor benchmark is available. + +93.3ns + + +Windows / x64 / MSVC; bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 126.871 ns +No competitor benchmark is available. + +127ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 117.584 ns +No competitor benchmark is available. + +118ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 128.29 ns +No competitor benchmark is available. + +128ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / round_decimals +fltx bl::f256 (bl::round_decimals): 140.9 ns +No competitor benchmark is available. + +141ns + + +round_significant + +Windows / x64 / MSVC; bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 128.566 ns +No competitor benchmark is available. + +129ns + + +Windows / x64 / Clang (clang-cl); bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 109.495 ns +No competitor benchmark is available. + +109ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 112.694 ns +No competitor benchmark is available. + +113ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; rounding / round_significant +fltx bl::f128 (bl::round_significant): 140.172 ns +No competitor benchmark is available. + +140ns + + +Windows / x64 / MSVC; bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 179.818 ns +No competitor benchmark is available. + +180ns + + +Windows / x64 / Clang (clang-cl); bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 160.875 ns +No competitor benchmark is available. + +161ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 167.375 ns +No competitor benchmark is available. + +167ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; rounding / round_significant +fltx bl::f256 (bl::round_significant): 211.692 ns +No competitor benchmark is available. + +212ns + + + +Remainders + +fmod + +Windows / x64 / MSVC; bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 17.8796 ns +No competitor benchmark is available. + +17.9ns + + +Windows / x64 / Clang (clang-cl); bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 18.3352 ns +No competitor benchmark is available. + +18.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 18.8027 ns +No competitor benchmark is available. + +18.8ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; remainders / fmod +fltx bl::f128 (bl::fmod): 20.5115 ns +No competitor benchmark is available. + +20.5ns + + +Windows / x64 / MSVC; bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 67.3851 ns +No competitor benchmark is available. + +67.4ns + + +Windows / x64 / Clang (clang-cl); bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 68.5315 ns +No competitor benchmark is available. + +68.5ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 71.154 ns +No competitor benchmark is available. + +71.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; remainders / fmod +fltx bl::f256 (bl::fmod): 75.5127 ns +No competitor benchmark is available. + +75.5ns + + +remainder + +Windows / x64 / MSVC; bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 22.4618 ns +No competitor benchmark is available. + +22.5ns + + +Windows / x64 / Clang (clang-cl); bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 23.6808 ns +No competitor benchmark is available. + +23.7ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 20.0009 ns +No competitor benchmark is available. + +20.0ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; remainders / remainder +fltx bl::f128 (bl::remainder): 22.8351 ns +No competitor benchmark is available. + +22.8ns + + +Windows / x64 / MSVC; bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 96.1361 ns +No competitor benchmark is available. + +96.1ns + + +Windows / x64 / Clang (clang-cl); bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 100.165 ns +No competitor benchmark is available. + +100ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 99.6071 ns +No competitor benchmark is available. + +99.6ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; remainders / remainder +fltx bl::f256 (bl::remainder): 103.172 ns +No competitor benchmark is available. + +103ns + + +remquo + +Windows / x64 / MSVC; bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 22.2501 ns +No competitor benchmark is available. + +22.3ns + + +Windows / x64 / Clang (clang-cl); bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 23.0702 ns +No competitor benchmark is available. + +23.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 20.1644 ns +No competitor benchmark is available. + +20.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; remainders / remquo +fltx bl::f128 (bl::remquo): 22.6009 ns +No competitor benchmark is available. + +22.6ns + + +Windows / x64 / MSVC; bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 96.7632 ns +No competitor benchmark is available. + +96.8ns + + +Windows / x64 / Clang (clang-cl); bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 99.5081 ns +No competitor benchmark is available. + +99.5ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 98.0991 ns +No competitor benchmark is available. + +98.1ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; remainders / remquo +fltx bl::f256 (bl::remquo): 101.809 ns +No competitor benchmark is available. + +102ns + + + +Float Utils + +abs + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 3.39158 ns +No competitor benchmark is available. + +3.4ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 3.12204 ns +No competitor benchmark is available. + +3.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 0.537497 ns +No competitor benchmark is available. + +0.54ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / abs +fltx bl::f128 (bl::abs): 0.812795 ns +No competitor benchmark is available. + +0.81ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 2.31604 ns +No competitor benchmark is available. + +2.3ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 1.52406 ns +No competitor benchmark is available. + +1.5ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 0.694394 ns +No competitor benchmark is available. + +0.69ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / abs +fltx bl::f256 (bl::abs): 3.33869 ns +No competitor benchmark is available. + +3.3ns + + +fabs + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 3.42186 ns +No competitor benchmark is available. + +3.4ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 3.14085 ns +No competitor benchmark is available. + +3.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 0.376619 ns +No competitor benchmark is available. + +0.38ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fabs +fltx bl::f128 (bl::fabs): 0.812937 ns +No competitor benchmark is available. + +0.81ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 2.30464 ns +No competitor benchmark is available. + +2.3ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 1.70809 ns +No competitor benchmark is available. + +1.7ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 0.69389 ns +No competitor benchmark is available. + +0.69ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fabs +fltx bl::f256 (bl::fabs): 3.21495 ns +No competitor benchmark is available. + +3.2ns + + +fma + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 6.14975 ns +No competitor benchmark is available. + +6.1ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 5.55668 ns +No competitor benchmark is available. + +5.6ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 8.21416 ns +No competitor benchmark is available. + +8.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fma +fltx bl::f128 (bl::fma): 7.59042 ns +No competitor benchmark is available. + +7.6ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 24.5204 ns +No competitor benchmark is available. + +24.5ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 20.3212 ns +No competitor benchmark is available. + +20.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 37.9142 ns +No competitor benchmark is available. + +37.9ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fma +fltx bl::f256 (bl::fma): 28.2363 ns +No competitor benchmark is available. + +28.2ns + + +recip + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 25.5734 ns +No competitor benchmark is available. + +25.6ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 23.6317 ns +No competitor benchmark is available. + +23.6ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 31.7164 ns +No competitor benchmark is available. + +31.7ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / recip +fltx bl::f128 (bl::recip): 32.8243 ns +No competitor benchmark is available. + +32.8ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 74.481 ns +No competitor benchmark is available. + +74.5ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 81.3383 ns +No competitor benchmark is available. + +81.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 104.033 ns +No competitor benchmark is available. + +104ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / recip +fltx bl::f256 (bl::recip): 89.9078 ns +No competitor benchmark is available. + +89.9ns + + +fmin + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 1.40222 ns +No competitor benchmark is available. + +1.4ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 0.805319 ns +No competitor benchmark is available. + +0.81ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 0.818994 ns +No competitor benchmark is available. + +0.82ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fmin +fltx bl::f128 (bl::fmin): 1.03146 ns +No competitor benchmark is available. + +1.0ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 4.32935 ns +No competitor benchmark is available. + +4.3ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 0.959492 ns +No competitor benchmark is available. + +0.96ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 1.47251 ns +No competitor benchmark is available. + +1.5ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fmin +fltx bl::f256 (bl::fmin): 1.17145 ns +No competitor benchmark is available. + +1.2ns + + +fmax + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 1.05428 ns +No competitor benchmark is available. + +1.1ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 0.728835 ns +No competitor benchmark is available. + +0.73ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 0.820997 ns +No competitor benchmark is available. + +0.82ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fmax +fltx bl::f128 (bl::fmax): 0.974309 ns +No competitor benchmark is available. + +0.97ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 4.10549 ns +No competitor benchmark is available. + +4.1ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 0.962298 ns +No competitor benchmark is available. + +0.96ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 1.47767 ns +No competitor benchmark is available. + +1.5ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fmax +fltx bl::f256 (bl::fmax): 1.17322 ns +No competitor benchmark is available. + +1.2ns + + +fdim + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 4.67447 ns +No competitor benchmark is available. + +4.7ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 2.75954 ns +No competitor benchmark is available. + +2.8ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 2.75265 ns +No competitor benchmark is available. + +2.8ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / fdim +fltx bl::f128 (bl::fdim): 3.08813 ns +No competitor benchmark is available. + +3.1ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 7.9185 ns +No competitor benchmark is available. + +7.9ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 8.14475 ns +No competitor benchmark is available. + +8.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 5.30447 ns +No competitor benchmark is available. + +5.3ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / fdim +fltx bl::f256 (bl::fdim): 6.04663 ns +No competitor benchmark is available. + +6.0ns + + +copysign + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 1.63556 ns +No competitor benchmark is available. + +1.6ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 0.457148 ns +No competitor benchmark is available. + +0.46ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 1.03432 ns +No competitor benchmark is available. + +1.0ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / copysign +fltx bl::f128 (bl::copysign): 0.385447 ns +No competitor benchmark is available. + +0.39ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.867482 ns +No competitor benchmark is available. + +0.87ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.649669 ns +No competitor benchmark is available. + +0.65ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.666614 ns +No competitor benchmark is available. + +0.67ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / copysign +fltx bl::f256 (bl::copysign): 0.693467 ns +No competitor benchmark is available. + +0.69ns + + +ldexp + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 2.31413 ns +No competitor benchmark is available. + +2.3ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 1.43459 ns +No competitor benchmark is available. + +1.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 1.29159 ns +No competitor benchmark is available. + +1.3ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / ldexp +fltx bl::f128 (bl::ldexp): 2.90402 ns +No competitor benchmark is available. + +2.9ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 4.94505 ns +No competitor benchmark is available. + +4.9ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 3.22877 ns +No competitor benchmark is available. + +3.2ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 6.20495 ns +No competitor benchmark is available. + +6.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / ldexp +fltx bl::f256 (bl::ldexp): 7.56259 ns +No competitor benchmark is available. + +7.6ns + + +scalbn + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 2.28754 ns +No competitor benchmark is available. + +2.3ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 1.36295 ns +No competitor benchmark is available. + +1.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 1.25648 ns +No competitor benchmark is available. + +1.3ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / scalbn +fltx bl::f128 (bl::scalbn): 3.01996 ns +No competitor benchmark is available. + +3.0ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 4.86417 ns +No competitor benchmark is available. + +4.9ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 3.23671 ns +No competitor benchmark is available. + +3.2ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 5.90379 ns +No competitor benchmark is available. + +5.9ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / scalbn +fltx bl::f256 (bl::scalbn): 7.18811 ns +No competitor benchmark is available. + +7.2ns + + +scalbln + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 2.28681 ns +No competitor benchmark is available. + +2.3ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 1.36331 ns +No competitor benchmark is available. + +1.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 1.25774 ns +No competitor benchmark is available. + +1.3ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / scalbln +fltx bl::f128 (bl::scalbln): 3.00978 ns +No competitor benchmark is available. + +3.0ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 4.87132 ns +No competitor benchmark is available. + +4.9ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 3.25244 ns +No competitor benchmark is available. + +3.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 5.9047 ns +No competitor benchmark is available. + +5.9ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / scalbln +fltx bl::f256 (bl::scalbln): 7.20295 ns +No competitor benchmark is available. + +7.2ns + + +frexp + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 2.73306 ns +No competitor benchmark is available. + +2.7ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 2.4124 ns +No competitor benchmark is available. + +2.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 1.81608 ns +No competitor benchmark is available. + +1.8ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / frexp +fltx bl::f128 (bl::frexp): 3.49678 ns +No competitor benchmark is available. + +3.5ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 10.3984 ns +No competitor benchmark is available. + +10.4ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 6.40474 ns +No competitor benchmark is available. + +6.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 9.57793 ns +No competitor benchmark is available. + +9.6ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / frexp +fltx bl::f256 (bl::frexp): 9.1333 ns +No competitor benchmark is available. + +9.1ns + + +modf + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 5.9831 ns +No competitor benchmark is available. + +6.0ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 5.82446 ns +No competitor benchmark is available. + +5.8ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 5.55057 ns +No competitor benchmark is available. + +5.6ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / modf +fltx bl::f128 (bl::modf): 6.81072 ns +No competitor benchmark is available. + +6.8ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 18.2368 ns +No competitor benchmark is available. + +18.2ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 20.5564 ns +No competitor benchmark is available. + +20.6ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 14.3059 ns +No competitor benchmark is available. + +14.3ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / modf +fltx bl::f256 (bl::modf): 13.0891 ns +No competitor benchmark is available. + +13.1ns + + +ilogb + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 2.01569 ns +No competitor benchmark is available. + +2.0ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 1.73381 ns +No competitor benchmark is available. + +1.7ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 1.19319 ns +No competitor benchmark is available. + +1.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / ilogb +fltx bl::f128 (bl::ilogb): 1.84593 ns +No competitor benchmark is available. + +1.8ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 1.55575 ns +No competitor benchmark is available. + +1.6ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 1.08304 ns +No competitor benchmark is available. + +1.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 0.929282 ns +No competitor benchmark is available. + +0.93ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / ilogb +fltx bl::f256 (bl::ilogb): 1.34464 ns +No competitor benchmark is available. + +1.3ns + + +logb + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 2.22124 ns +No competitor benchmark is available. + +2.2ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 1.67613 ns +No competitor benchmark is available. + +1.7ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 1.24016 ns +No competitor benchmark is available. + +1.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / logb +fltx bl::f128 (bl::logb): 1.98362 ns +No competitor benchmark is available. + +2.0ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 2.09344 ns +No competitor benchmark is available. + +2.1ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 0.969486 ns +No competitor benchmark is available. + +0.97ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 1.07416 ns +No competitor benchmark is available. + +1.1ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / logb +fltx bl::f256 (bl::logb): 1.25877 ns +No competitor benchmark is available. + +1.3ns + + +nextafter + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 6.76977 ns +No competitor benchmark is available. + +6.8ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 4.22908 ns +No competitor benchmark is available. + +4.2ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 4.41574 ns +No competitor benchmark is available. + +4.4ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / nextafter +fltx bl::f128 (bl::nextafter): 5.91763 ns +No competitor benchmark is available. + +5.9ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 8.15083 ns +No competitor benchmark is available. + +8.2ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 5.6612 ns +No competitor benchmark is available. + +5.7ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 4.20646 ns +No competitor benchmark is available. + +4.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / nextafter +fltx bl::f256 (bl::nextafter): 6.82932 ns +No competitor benchmark is available. + +6.8ns + + +nexttoward + +Windows / x64 / MSVC; bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 6.79032 ns +No competitor benchmark is available. + +6.8ns + + +Windows / x64 / Clang (clang-cl); bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 4.19917 ns +No competitor benchmark is available. + +4.2ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 4.58225 ns +No competitor benchmark is available. + +4.6ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; floating_point_utilities / nexttoward +fltx bl::f128 (bl::nexttoward): 5.90443 ns +No competitor benchmark is available. + +5.9ns + + +Windows / x64 / MSVC; bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 8.11606 ns +No competitor benchmark is available. + +8.1ns + + +Windows / x64 / Clang (clang-cl); bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 5.65128 ns +No competitor benchmark is available. + +5.7ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 4.27535 ns +No competitor benchmark is available. + +4.3ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; floating_point_utilities / nexttoward +fltx bl::f256 (bl::nexttoward): 6.81086 ns +No competitor benchmark is available. + +6.8ns + + + +Roots & powers + +sqr + +Windows / x64 / MSVC; bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 2.16188 ns +No competitor benchmark is available. + +2.2ns + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 1.10042 ns +No competitor benchmark is available. + +1.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 1.45781 ns +No competitor benchmark is available. + +1.5ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / sqr +fltx bl::f128 (bl::sqr): 1.23052 ns +No competitor benchmark is available. + +1.2ns + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 18.2676 ns +No competitor benchmark is available. + +18.3ns + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 23.2144 ns +No competitor benchmark is available. + +23.2ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 22.793 ns +No competitor benchmark is available. + +22.8ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / sqr +fltx bl::f256 (bl::sqr): 23.3586 ns +No competitor benchmark is available. + +23.4ns + + +sqrt + +Windows / x64 / MSVC; bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 4.28225 ns +No competitor benchmark is available. + +4.3ns + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 3.82094 ns +No competitor benchmark is available. + +3.8ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 5.19148 ns +No competitor benchmark is available. + +5.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / sqrt +fltx bl::f128 (bl::sqrt): 4.94426 ns +No competitor benchmark is available. + +4.9ns + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 122.15 ns +No competitor benchmark is available. + +122ns + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 109.142 ns +No competitor benchmark is available. + +109ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 121.182 ns +No competitor benchmark is available. + +121ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / sqrt +fltx bl::f256 (bl::sqrt): 118.79 ns +No competitor benchmark is available. + +119ns + + +cbrt + +Windows / x64 / MSVC; bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 23.9693 ns +No competitor benchmark is available. + +24.0ns + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 22.4607 ns +No competitor benchmark is available. + +22.5ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 73.3647 ns +No competitor benchmark is available. + +73.4ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / cbrt +fltx bl::f128 (bl::cbrt): 18.2592 ns +No competitor benchmark is available. + +18.3ns + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 344.421 ns +No competitor benchmark is available. + +344ns + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 341.63 ns +No competitor benchmark is available. + +342ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 387.412 ns +No competitor benchmark is available. + +387ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / cbrt +fltx bl::f256 (bl::cbrt): 351.227 ns +No competitor benchmark is available. + +351ns + + +hypot + +Windows / x64 / MSVC; bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 8.76932 ns +No competitor benchmark is available. + +8.8ns + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 10.3911 ns +No competitor benchmark is available. + +10.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 8.94395 ns +No competitor benchmark is available. + +8.9ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / hypot +fltx bl::f128 (bl::hypot): 11.5655 ns +No competitor benchmark is available. + +11.6ns + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 172.597 ns +No competitor benchmark is available. + +173ns + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 165.073 ns +No competitor benchmark is available. + +165ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 174.939 ns +No competitor benchmark is available. + +175ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / hypot +fltx bl::f256 (bl::hypot): 173.409 ns +No competitor benchmark is available. + +173ns + + +pow + +Windows / x64 / MSVC; bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 195.878 ns +No competitor benchmark is available. + +196ns + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 191.819 ns +No competitor benchmark is available. + +192ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 219.244 ns +No competitor benchmark is available. + +219ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / pow +fltx bl::f128 (bl::pow): 241.251 ns +No competitor benchmark is available. + +241ns + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2549.39 ns +No competitor benchmark is available. + +2,549ns + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2624.56 ns +No competitor benchmark is available. + +2,625ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2714.45 ns +No competitor benchmark is available. + +2,714ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / pow +fltx bl::f256 (bl::pow): 2626.79 ns +No competitor benchmark is available. + +2,627ns + + +ipow + +Windows / x64 / MSVC; bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 15.1064 ns +No competitor benchmark is available. + +15.1ns + + +Windows / x64 / Clang (clang-cl); bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 23.8444 ns +No competitor benchmark is available. + +23.8ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 18.2011 ns +No competitor benchmark is available. + +18.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; roots_and_powers / ipow +fltx bl::f128 (bl::ipow): 26.5827 ns +No competitor benchmark is available. + +26.6ns + + +Windows / x64 / MSVC; bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 111.809 ns +No competitor benchmark is available. + +112ns + + +Windows / x64 / Clang (clang-cl); bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 127.08 ns +No competitor benchmark is available. + +127ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 121.701 ns +No competitor benchmark is available. + +122ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; roots_and_powers / ipow +fltx bl::f256 (bl::ipow): 109.858 ns +No competitor benchmark is available. + +110ns + + + +Exponentials + +exp + +Windows / x64 / MSVC; bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 100.127 ns +No competitor benchmark is available. + +100ns + + +Windows / x64 / Clang (clang-cl); bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 92.0299 ns +No competitor benchmark is available. + +92.0ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 110.194 ns +No competitor benchmark is available. + +110ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; exponentials / exp +fltx bl::f128 (bl::exp): 121.788 ns +No competitor benchmark is available. + +122ns + + +Windows / x64 / MSVC; bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 1006.84 ns +No competitor benchmark is available. + +1,007ns + + +Windows / x64 / Clang (clang-cl); bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 1011.98 ns +No competitor benchmark is available. + +1,012ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 1072.56 ns +No competitor benchmark is available. + +1,073ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; exponentials / exp +fltx bl::f256 (bl::exp): 1040.92 ns +No competitor benchmark is available. + +1,041ns + + +exp2 + +Windows / x64 / MSVC; bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 96.1165 ns +No competitor benchmark is available. + +96.1ns + + +Windows / x64 / Clang (clang-cl); bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 90.387 ns +No competitor benchmark is available. + +90.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 101.621 ns +No competitor benchmark is available. + +102ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; exponentials / exp2 +fltx bl::f128 (bl::exp2): 115.409 ns +No competitor benchmark is available. + +115ns + + +Windows / x64 / MSVC; bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 826.152 ns +No competitor benchmark is available. + +826ns + + +Windows / x64 / Clang (clang-cl); bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 858.32 ns +No competitor benchmark is available. + +858ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 910.889 ns +No competitor benchmark is available. + +911ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; exponentials / exp2 +fltx bl::f256 (bl::exp2): 883.086 ns +No competitor benchmark is available. + +883ns + + +expm1 + +Windows / x64 / MSVC; bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 100.329 ns +No competitor benchmark is available. + +100ns + + +Windows / x64 / Clang (clang-cl); bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 93.9583 ns +No competitor benchmark is available. + +94.0ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 108.707 ns +No competitor benchmark is available. + +109ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; exponentials / expm1 +fltx bl::f128 (bl::expm1): 121.78 ns +No competitor benchmark is available. + +122ns + + +Windows / x64 / MSVC; bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 1009.31 ns +No competitor benchmark is available. + +1,009ns + + +Windows / x64 / Clang (clang-cl); bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 1011.37 ns +No competitor benchmark is available. + +1,011ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 1068.37 ns +No competitor benchmark is available. + +1,068ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; exponentials / expm1 +fltx bl::f256 (bl::expm1): 1030.76 ns +No competitor benchmark is available. + +1,031ns + + + +Logarithms + +log + +Windows / x64 / MSVC; bl::f128; logarithms / log +fltx bl::f128 (bl::log): 114.753 ns +No competitor benchmark is available. + +115ns + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log +fltx bl::f128 (bl::log): 122.793 ns +No competitor benchmark is available. + +123ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log +fltx bl::f128 (bl::log): 138.117 ns +No competitor benchmark is available. + +138ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log +fltx bl::f128 (bl::log): 144.37 ns +No competitor benchmark is available. + +144ns + + +Windows / x64 / MSVC; bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1670.2 ns +No competitor benchmark is available. + +1,670ns + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1769.26 ns +No competitor benchmark is available. + +1,769ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1781.05 ns +No competitor benchmark is available. + +1,781ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log +fltx bl::f256 (bl::log): 1726.52 ns +No competitor benchmark is available. + +1,727ns + + +log2 + +Windows / x64 / MSVC; bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 116.827 ns +No competitor benchmark is available. + +117ns + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 126.89 ns +No competitor benchmark is available. + +127ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 143.079 ns +No competitor benchmark is available. + +143ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log2 +fltx bl::f128 (bl::log2): 148.693 ns +No competitor benchmark is available. + +149ns + + +Windows / x64 / MSVC; bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1704.04 ns +No competitor benchmark is available. + +1,704ns + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1798.93 ns +No competitor benchmark is available. + +1,799ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1808.87 ns +No competitor benchmark is available. + +1,809ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log2 +fltx bl::f256 (bl::log2): 1755.76 ns +No competitor benchmark is available. + +1,756ns + + +log10 + +Windows / x64 / MSVC; bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 116.714 ns +No competitor benchmark is available. + +117ns + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 127.245 ns +No competitor benchmark is available. + +127ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 144.788 ns +No competitor benchmark is available. + +145ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log10 +fltx bl::f128 (bl::log10): 148.438 ns +No competitor benchmark is available. + +148ns + + +Windows / x64 / MSVC; bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1719.26 ns +No competitor benchmark is available. + +1,719ns + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1807.01 ns +No competitor benchmark is available. + +1,807ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1828.01 ns +No competitor benchmark is available. + +1,828ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log10 +fltx bl::f256 (bl::log10): 1777.48 ns +No competitor benchmark is available. + +1,777ns + + +log1p + +Windows / x64 / MSVC; bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 120.79 ns +No competitor benchmark is available. + +121ns + + +Windows / x64 / Clang (clang-cl); bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 123.898 ns +No competitor benchmark is available. + +124ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 150.549 ns +No competitor benchmark is available. + +151ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; logarithms / log1p +fltx bl::f128 (bl::log1p): 152.11 ns +No competitor benchmark is available. + +152ns + + +Windows / x64 / MSVC; bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1723.98 ns +No competitor benchmark is available. + +1,724ns + + +Windows / x64 / Clang (clang-cl); bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1812.71 ns +No competitor benchmark is available. + +1,813ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1839.43 ns +No competitor benchmark is available. + +1,839ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; logarithms / log1p +fltx bl::f256 (bl::log1p): 1766.78 ns +No competitor benchmark is available. + +1,767ns + + + +Trigonometric + +sin + +Windows / x64 / MSVC; bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 87.1875 ns +No competitor benchmark is available. + +87.2ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 84.3442 ns +No competitor benchmark is available. + +84.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 101.54 ns +No competitor benchmark is available. + +102ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / sin +fltx bl::f128 (bl::sin): 107.149 ns +No competitor benchmark is available. + +107ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 881.895 ns +No competitor benchmark is available. + +882ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 910.254 ns +No competitor benchmark is available. + +910ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 896.25 ns +No competitor benchmark is available. + +896ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / sin +fltx bl::f256 (bl::sin): 851.709 ns +No competitor benchmark is available. + +852ns + + +cos + +Windows / x64 / MSVC; bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 86.4502 ns +No competitor benchmark is available. + +86.5ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 84.1426 ns +No competitor benchmark is available. + +84.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 101.039 ns +No competitor benchmark is available. + +101ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / cos +fltx bl::f128 (bl::cos): 106.911 ns +No competitor benchmark is available. + +107ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 881.65 ns +No competitor benchmark is available. + +882ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 909.775 ns +No competitor benchmark is available. + +910ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 898.35 ns +No competitor benchmark is available. + +898ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / cos +fltx bl::f256 (bl::cos): 874.697 ns +No competitor benchmark is available. + +875ns + + +sincos + +Windows / x64 / MSVC; bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 93.0255 ns +No competitor benchmark is available. + +93.0ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 94.104 ns +No competitor benchmark is available. + +94.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 107.501 ns +No competitor benchmark is available. + +108ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / sincos +fltx bl::f128 (bl::sincos): 118.105 ns +No competitor benchmark is available. + +118ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1081.34 ns +No competitor benchmark is available. + +1,081ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1017.44 ns +No competitor benchmark is available. + +1,017ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1299.07 ns +No competitor benchmark is available. + +1,299ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / sincos +fltx bl::f256 (bl::sincos): 1035.23 ns +No competitor benchmark is available. + +1,035ns + + +tan + +Windows / x64 / MSVC; bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 93.1851 ns +No competitor benchmark is available. + +93.2ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 96.1015 ns +No competitor benchmark is available. + +96.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 108.021 ns +No competitor benchmark is available. + +108ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / tan +fltx bl::f128 (bl::tan): 116.382 ns +No competitor benchmark is available. + +116ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1143.8 ns +No competitor benchmark is available. + +1,144ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1104.15 ns +No competitor benchmark is available. + +1,104ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1356.22 ns +No competitor benchmark is available. + +1,356ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / tan +fltx bl::f256 (bl::tan): 1119.03 ns +No competitor benchmark is available. + +1,119ns + + +asin + +Windows / x64 / MSVC; bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 157.614 ns +No competitor benchmark is available. + +158ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 156.887 ns +No competitor benchmark is available. + +157ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 189.293 ns +No competitor benchmark is available. + +189ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / asin +fltx bl::f128 (bl::asin): 196.609 ns +No competitor benchmark is available. + +197ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1336.98 ns +No competitor benchmark is available. + +1,337ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1381.49 ns +No competitor benchmark is available. + +1,381ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1406.12 ns +No competitor benchmark is available. + +1,406ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / asin +fltx bl::f256 (bl::asin): 1343.28 ns +No competitor benchmark is available. + +1,343ns + + +acos + +Windows / x64 / MSVC; bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 162.6 ns +No competitor benchmark is available. + +163ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 162.936 ns +No competitor benchmark is available. + +163ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 194.496 ns +No competitor benchmark is available. + +194ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / acos +fltx bl::f128 (bl::acos): 202.056 ns +No competitor benchmark is available. + +202ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1347.89 ns +No competitor benchmark is available. + +1,348ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1401.97 ns +No competitor benchmark is available. + +1,402ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1408.41 ns +No competitor benchmark is available. + +1,408ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / acos +fltx bl::f256 (bl::acos): 1335.56 ns +No competitor benchmark is available. + +1,336ns + + +atan + +Windows / x64 / MSVC; bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 116.882 ns +No competitor benchmark is available. + +117ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 108.882 ns +No competitor benchmark is available. + +109ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 137.018 ns +No competitor benchmark is available. + +137ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / atan +fltx bl::f128 (bl::atan): 142.118 ns +No competitor benchmark is available. + +142ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 879.902 ns +No competitor benchmark is available. + +880ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 915.506 ns +No competitor benchmark is available. + +916ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 908.268 ns +No competitor benchmark is available. + +908ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / atan +fltx bl::f256 (bl::atan): 906.087 ns +No competitor benchmark is available. + +906ns + + +atan2 + +Windows / x64 / MSVC; bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 118.185 ns +No competitor benchmark is available. + +118ns + + +Windows / x64 / Clang (clang-cl); bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 116.05 ns +No competitor benchmark is available. + +116ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 144.128 ns +No competitor benchmark is available. + +144ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; trigonometric / atan2 +fltx bl::f128 (bl::atan2): 148.882 ns +No competitor benchmark is available. + +149ns + + +Windows / x64 / MSVC; bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 959.364 ns +No competitor benchmark is available. + +959ns + + +Windows / x64 / Clang (clang-cl); bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 977.919 ns +No competitor benchmark is available. + +978ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 966.113 ns +No competitor benchmark is available. + +966ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; trigonometric / atan2 +fltx bl::f256 (bl::atan2): 950.651 ns +No competitor benchmark is available. + +951ns + + + +Hyperbolic + +sinh + +Windows / x64 / MSVC; bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 110.564 ns +No competitor benchmark is available. + +111ns + + +Windows / x64 / Clang (clang-cl); bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 106.169 ns +No competitor benchmark is available. + +106ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 124.678 ns +No competitor benchmark is available. + +125ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; hyperbolic / sinh +fltx bl::f128 (bl::sinh): 140.21 ns +No competitor benchmark is available. + +140ns + + +Windows / x64 / MSVC; bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1241.78 ns +No competitor benchmark is available. + +1,242ns + + +Windows / x64 / Clang (clang-cl); bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1315.36 ns +No competitor benchmark is available. + +1,315ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1394.11 ns +No competitor benchmark is available. + +1,394ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; hyperbolic / sinh +fltx bl::f256 (bl::sinh): 1293.86 ns +No competitor benchmark is available. + +1,294ns + + +cosh + +Windows / x64 / MSVC; bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 107.178 ns +No competitor benchmark is available. + +107ns + + +Windows / x64 / Clang (clang-cl); bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 105.259 ns +No competitor benchmark is available. + +105ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 123.606 ns +No competitor benchmark is available. + +124ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; hyperbolic / cosh +fltx bl::f128 (bl::cosh): 139.154 ns +No competitor benchmark is available. + +139ns + + +Windows / x64 / MSVC; bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1244.5 ns +No competitor benchmark is available. + +1,245ns + + +Windows / x64 / Clang (clang-cl); bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1314.06 ns +No competitor benchmark is available. + +1,314ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1399.14 ns +No competitor benchmark is available. + +1,399ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; hyperbolic / cosh +fltx bl::f256 (bl::cosh): 1289.36 ns +No competitor benchmark is available. + +1,289ns + + +tanh + +Windows / x64 / MSVC; bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 113.227 ns +No competitor benchmark is available. + +113ns + + +Windows / x64 / Clang (clang-cl); bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 111.317 ns +No competitor benchmark is available. + +111ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 129.321 ns +No competitor benchmark is available. + +129ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; hyperbolic / tanh +fltx bl::f128 (bl::tanh): 146.486 ns +No competitor benchmark is available. + +146ns + + +Windows / x64 / MSVC; bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1222.25 ns +No competitor benchmark is available. + +1,222ns + + +Windows / x64 / Clang (clang-cl); bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1260.84 ns +No competitor benchmark is available. + +1,261ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1315.96 ns +No competitor benchmark is available. + +1,316ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; hyperbolic / tanh +fltx bl::f256 (bl::tanh): 1261.37 ns +No competitor benchmark is available. + +1,261ns + + +asinh + +Windows / x64 / MSVC; bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 119.084 ns +No competitor benchmark is available. + +119ns + + +Windows / x64 / Clang (clang-cl); bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 119.053 ns +No competitor benchmark is available. + +119ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 138.372 ns +No competitor benchmark is available. + +138ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; inverse_hyperbolic / asinh +fltx bl::f128 (bl::asinh): 142.642 ns +No competitor benchmark is available. + +143ns + + +Windows / x64 / MSVC; bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2613.48 ns +No competitor benchmark is available. + +2,613ns + + +Windows / x64 / Clang (clang-cl); bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2675.54 ns +No competitor benchmark is available. + +2,676ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2806.67 ns +No competitor benchmark is available. + +2,807ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; inverse_hyperbolic / asinh +fltx bl::f256 (bl::asinh): 2643.39 ns +No competitor benchmark is available. + +2,643ns + + +acosh + +Windows / x64 / MSVC; bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 133.359 ns +No competitor benchmark is available. + +133ns + + +Windows / x64 / Clang (clang-cl); bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 132.613 ns +No competitor benchmark is available. + +133ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 163.232 ns +No competitor benchmark is available. + +163ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; inverse_hyperbolic / acosh +fltx bl::f128 (bl::acosh): 165.884 ns +No competitor benchmark is available. + +166ns + + +Windows / x64 / MSVC; bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2413.35 ns +No competitor benchmark is available. + +2,413ns + + +Windows / x64 / Clang (clang-cl); bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2489.94 ns +No competitor benchmark is available. + +2,490ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2564.92 ns +No competitor benchmark is available. + +2,565ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; inverse_hyperbolic / acosh +fltx bl::f256 (bl::acosh): 2423.68 ns +No competitor benchmark is available. + +2,424ns + + +atanh + +Windows / x64 / MSVC; bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 130.922 ns +No competitor benchmark is available. + +131ns + + +Windows / x64 / Clang (clang-cl); bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 129.355 ns +No competitor benchmark is available. + +129ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 163.424 ns +No competitor benchmark is available. + +163ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; inverse_hyperbolic / atanh +fltx bl::f128 (bl::atanh): 163.07 ns +No competitor benchmark is available. + +163ns + + +Windows / x64 / MSVC; bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2192.63 ns +No competitor benchmark is available. + +2,193ns + + +Windows / x64 / Clang (clang-cl); bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2330.35 ns +No competitor benchmark is available. + +2,330ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2405.86 ns +No competitor benchmark is available. + +2,406ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; inverse_hyperbolic / atanh +fltx bl::f256 (bl::atanh): 2273.56 ns +No competitor benchmark is available. + +2,274ns + + + +Special + +erfc + +Windows / x64 / MSVC; bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 560.361 ns +No competitor benchmark is available. + +560ns + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 549.55 ns +No competitor benchmark is available. + +550ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 782.822 ns +No competitor benchmark is available. + +783ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / erfc +fltx bl::f128 (bl::erfc): 813.301 ns +No competitor benchmark is available. + +813ns + + +Windows / x64 / MSVC; bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 8882.23 ns +No competitor benchmark is available. + +8,882ns + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 10389.1 ns +No competitor benchmark is available. + +10,389ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 11072.7 ns +No competitor benchmark is available. + +11,073ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / erfc +fltx bl::f256 (bl::erfc): 14825 ns +No competitor benchmark is available. + +14,825ns + + +erf + +Windows / x64 / MSVC; bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 565.194 ns +No competitor benchmark is available. + +565ns + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 554.694 ns +No competitor benchmark is available. + +555ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 785.819 ns +No competitor benchmark is available. + +786ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / erf +fltx bl::f128 (bl::erf): 814.523 ns +No competitor benchmark is available. + +815ns + + +Windows / x64 / MSVC; bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 8880.13 ns +No competitor benchmark is available. + +8,880ns + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 10403.1 ns +No competitor benchmark is available. + +10,403ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 11166.4 ns +No competitor benchmark is available. + +11,166ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / erf +fltx bl::f256 (bl::erf): 15769.5 ns +No competitor benchmark is available. + +15,770ns + + +tgamma + +Windows / x64 / MSVC; bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 473.564 ns +No competitor benchmark is available. + +474ns + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 464.805 ns +No competitor benchmark is available. + +465ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 564.507 ns +No competitor benchmark is available. + +565ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / tgamma +fltx bl::f128 (bl::tgamma): 593.503 ns +No competitor benchmark is available. + +594ns + + +Windows / x64 / MSVC; bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 9361.23 ns +No competitor benchmark is available. + +9,361ns + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 10572.7 ns +No competitor benchmark is available. + +10,573ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 10126.6 ns +No competitor benchmark is available. + +10,127ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / tgamma +fltx bl::f256 (bl::tgamma): 11903.9 ns +No competitor benchmark is available. + +11,904ns + + +lgamma + +Windows / x64 / MSVC; bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 526.921 ns +No competitor benchmark is available. + +527ns + + +Windows / x64 / Clang (clang-cl); bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 528.509 ns +No competitor benchmark is available. + +529ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 621.733 ns +No competitor benchmark is available. + +622ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; special_functions / lgamma +fltx bl::f128 (bl::lgamma): 657.828 ns +No competitor benchmark is available. + +658ns + + +Windows / x64 / MSVC; bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 8335.06 ns +No competitor benchmark is available. + +8,335ns + + +Windows / x64 / Clang (clang-cl); bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 9572.66 ns +No competitor benchmark is available. + +9,573ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 9099.22 ns +No competitor benchmark is available. + +9,099ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; special_functions / lgamma +fltx bl::f256 (bl::lgamma): 11231.2 ns +No competitor benchmark is available. + +11,231ns + + + +Comparisons + +equal + +Windows / x64 / MSVC; bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 0.670391 ns +No competitor benchmark is available. + +0.67ns + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 0.855078 ns +No competitor benchmark is available. + +0.86ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 0.818484 ns +No competitor benchmark is available. + +0.82ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / equal +fltx bl::f128 (bl::equal): 1.11568 ns +No competitor benchmark is available. + +1.1ns + + +Windows / x64 / MSVC; bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.774325 ns +No competitor benchmark is available. + +0.77ns + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.734277 ns +No competitor benchmark is available. + +0.73ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.539875 ns +No competitor benchmark is available. + +0.54ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / equal +fltx bl::f256 (bl::equal): 0.779622 ns +No competitor benchmark is available. + +0.78ns + + +not_equal + +Windows / x64 / MSVC; bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 0.667387 ns +No competitor benchmark is available. + +0.67ns + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 0.933284 ns +No competitor benchmark is available. + +0.93ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 0.922221 ns +No competitor benchmark is available. + +0.92ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / not_equal +fltx bl::f128 (bl::not_equal): 1.11403 ns +No competitor benchmark is available. + +1.1ns + + +Windows / x64 / MSVC; bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.77455 ns +No competitor benchmark is available. + +0.77ns + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.644019 ns +No competitor benchmark is available. + +0.64ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.604791 ns +No competitor benchmark is available. + +0.60ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / not_equal +fltx bl::f256 (bl::not_equal): 0.79349 ns +No competitor benchmark is available. + +0.79ns + + +less + +Windows / x64 / MSVC; bl::f128; comparisons / less +fltx bl::f128 (bl::less): 2.01654 ns +No competitor benchmark is available. + +2.0ns + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / less +fltx bl::f128 (bl::less): 2.13032 ns +No competitor benchmark is available. + +2.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / less +fltx bl::f128 (bl::less): 1.20977 ns +No competitor benchmark is available. + +1.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / less +fltx bl::f128 (bl::less): 2.15281 ns +No competitor benchmark is available. + +2.2ns + + +Windows / x64 / MSVC; bl::f256; comparisons / less +fltx bl::f256 (bl::less): 2.02135 ns +No competitor benchmark is available. + +2.0ns + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / less +fltx bl::f256 (bl::less): 0.84071 ns +No competitor benchmark is available. + +0.84ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / less +fltx bl::f256 (bl::less): 0.79452 ns +No competitor benchmark is available. + +0.79ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / less +fltx bl::f256 (bl::less): 1.59421 ns +No competitor benchmark is available. + +1.6ns + + +greater + +Windows / x64 / MSVC; bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 2.02084 ns +No competitor benchmark is available. + +2.0ns + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 2.0816 ns +No competitor benchmark is available. + +2.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 1.05977 ns +No competitor benchmark is available. + +1.1ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / greater +fltx bl::f128 (bl::greater): 2.10241 ns +No competitor benchmark is available. + +2.1ns + + +Windows / x64 / MSVC; bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 2.09486 ns +No competitor benchmark is available. + +2.1ns + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 0.785446 ns +No competitor benchmark is available. + +0.79ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 1.8735 ns +No competitor benchmark is available. + +1.9ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / greater +fltx bl::f256 (bl::greater): 1.60468 ns +No competitor benchmark is available. + +1.6ns + + +less_equal + +Windows / x64 / MSVC; bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 2.00302 ns +No competitor benchmark is available. + +2.0ns + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 2.13467 ns +No competitor benchmark is available. + +2.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 1.14907 ns +No competitor benchmark is available. + +1.1ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / less_equal +fltx bl::f128 (bl::less_equal): 2.17029 ns +No competitor benchmark is available. + +2.2ns + + +Windows / x64 / MSVC; bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 2.0467 ns +No competitor benchmark is available. + +2.0ns + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 0.692103 ns +No competitor benchmark is available. + +0.69ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 0.814922 ns +No competitor benchmark is available. + +0.81ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / less_equal +fltx bl::f256 (bl::less_equal): 1.62986 ns +No competitor benchmark is available. + +1.6ns + + +greater_equal + +Windows / x64 / MSVC; bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 2.13436 ns +No competitor benchmark is available. + +2.1ns + + +Windows / x64 / Clang (clang-cl); bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 2.22412 ns +No competitor benchmark is available. + +2.2ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 1.00852 ns +No competitor benchmark is available. + +1.0ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; comparisons / greater_equal +fltx bl::f128 (bl::greater_equal): 2.17357 ns +No competitor benchmark is available. + +2.2ns + + +Windows / x64 / MSVC; bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 2.01429 ns +No competitor benchmark is available. + +2.0ns + + +Windows / x64 / Clang (clang-cl); bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 0.690875 ns +No competitor benchmark is available. + +0.69ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 0.808873 ns +No competitor benchmark is available. + +0.81ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; comparisons / greater_equal +fltx bl::f256 (bl::greater_equal): 1.59988 ns +No competitor benchmark is available. + +1.6ns + + + +Random + +uniform_real + +Windows / x64 / MSVC; bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 9.03491 ns +No competitor benchmark is available. + +9.0ns + + +Windows / x64 / Clang (clang-cl); bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 7.23012 ns +No competitor benchmark is available. + +7.2ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 21.1265 ns +No competitor benchmark is available. + +21.1ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; random / uniform_real +fltx bl::f128 (bl::uniform_real): 5.82739 ns +No competitor benchmark is available. + +5.8ns + + +Windows / x64 / MSVC; bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 19.1622 ns +No competitor benchmark is available. + +19.2ns + + +Windows / x64 / Clang (clang-cl); bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 14.344 ns +No competitor benchmark is available. + +14.3ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 40.564 ns +No competitor benchmark is available. + +40.6ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; random / uniform_real +fltx bl::f256 (bl::uniform_real): 11.4051 ns +No competitor benchmark is available. + +11.4ns + + +normal + +Windows / x64 / MSVC; bl::f128; random / normal +fltx bl::f128 (bl::normal): 58.9263 ns +No competitor benchmark is available. + +58.9ns + + +Windows / x64 / Clang (clang-cl); bl::f128; random / normal +fltx bl::f128 (bl::normal): 41.8138 ns +No competitor benchmark is available. + +41.8ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; random / normal +fltx bl::f128 (bl::normal): 108.644 ns +No competitor benchmark is available. + +109ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; random / normal +fltx bl::f128 (bl::normal): 40.8647 ns +No competitor benchmark is available. + +40.9ns + + +Windows / x64 / MSVC; bl::f256; random / normal +fltx bl::f256 (bl::normal): 265.444 ns +No competitor benchmark is available. + +265ns + + +Windows / x64 / Clang (clang-cl); bl::f256; random / normal +fltx bl::f256 (bl::normal): 290.425 ns +No competitor benchmark is available. + +290ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; random / normal +fltx bl::f256 (bl::normal): 354.775 ns +No competitor benchmark is available. + +355ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; random / normal +fltx bl::f256 (bl::normal): 265.854 ns +No competitor benchmark is available. + +266ns + + + +Mixed Workloads + +product_sum + +Windows / x64 / MSVC; bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 5.56741 ns +No competitor benchmark is available. + +5.6ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 5.05645 ns +No competitor benchmark is available. + +5.1ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 7.49125 ns +No competitor benchmark is available. + +7.5ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / product_sum +fltx bl::f128 (bl::product_sum): 7.53944 ns +No competitor benchmark is available. + +7.5ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 42.9357 ns +No competitor benchmark is available. + +42.9ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 58.0424 ns +No competitor benchmark is available. + +58.0ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 46.1936 ns +No competitor benchmark is available. + +46.2ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / product_sum +fltx bl::f256 (bl::product_sum): 49.1086 ns +No competitor benchmark is available. + +49.1ns + + +chained_arithmetic + +Windows / x64 / MSVC; bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 20.0698 ns +No competitor benchmark is available. + +20.1ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 14.169 ns +No competitor benchmark is available. + +14.2ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 22.7936 ns +No competitor benchmark is available. + +22.8ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / chained_arithmetic +fltx bl::f128 (same workload): 20.298 ns +No competitor benchmark is available. + +20.3ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 155.241 ns +No competitor benchmark is available. + +155ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 151.306 ns +No competitor benchmark is available. + +151ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 164.655 ns +No competitor benchmark is available. + +165ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / chained_arithmetic +fltx bl::f256 (same workload): 142.109 ns +No competitor benchmark is available. + +142ns + + +affine_trig + +Windows / x64 / MSVC; bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 174.252 ns +No competitor benchmark is available. + +174ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 179.936 ns +No competitor benchmark is available. + +180ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 217.34 ns +No competitor benchmark is available. + +217ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / affine_trig +fltx bl::f128 (same workload): 233.701 ns +No competitor benchmark is available. + +234ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1804.63 ns +No competitor benchmark is available. + +1,805ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1840.35 ns +No competitor benchmark is available. + +1,840ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1832.23 ns +No competitor benchmark is available. + +1,832ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / affine_trig +fltx bl::f256 (same workload): 1799.59 ns +No competitor benchmark is available. + +1,800ns + + +mandelbrot + +Windows / x64 / MSVC; bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 15.6098 ns +No competitor benchmark is available. + +15.6ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 12.4794 ns +No competitor benchmark is available. + +12.5ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 17.9848 ns +No competitor benchmark is available. + +18.0ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / mandelbrot +fltx bl::f128 (same workload): 15.0928 ns +No competitor benchmark is available. + +15.1ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 123.981 ns +No competitor benchmark is available. + +124ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 125.521 ns +No competitor benchmark is available. + +126ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 119.11 ns +No competitor benchmark is available. + +119ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / mandelbrot +fltx bl::f256 (same workload): 127.581 ns +No competitor benchmark is available. + +128ns + + +matrix_vector_4x4 + +Windows / x64 / MSVC; bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 67.5995 ns +No competitor benchmark is available. + +67.6ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 54.4244 ns +No competitor benchmark is available. + +54.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 80.6717 ns +No competitor benchmark is available. + +80.7ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / matrix_vector_4x4 +fltx bl::f128 (same workload): 49.6912 ns +No competitor benchmark is available. + +49.7ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 557.212 ns +No competitor benchmark is available. + +557ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 594.861 ns +No competitor benchmark is available. + +595ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 527.544 ns +No competitor benchmark is available. + +528ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / matrix_vector_4x4 +fltx bl::f256 (same workload): 560.712 ns +No competitor benchmark is available. + +561ns + + +horner_polynomial + +Windows / x64 / MSVC; bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 85.2925 ns +No competitor benchmark is available. + +85.3ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 86.4244 ns +No competitor benchmark is available. + +86.4ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 101.755 ns +No competitor benchmark is available. + +102ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / horner_polynomial +fltx bl::f128 (same workload): 98.5209 ns +No competitor benchmark is available. + +98.5ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 394.94 ns +No competitor benchmark is available. + +395ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 434.449 ns +No competitor benchmark is available. + +434ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 420.368 ns +No competitor benchmark is available. + +420ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / horner_polynomial +fltx bl::f256 (same workload): 473.255 ns +No competitor benchmark is available. + +473ns + + +newton_root + +Windows / x64 / MSVC; bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 31.2798 ns +No competitor benchmark is available. + +31.3ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 22.9943 ns +No competitor benchmark is available. + +23.0ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 30.1008 ns +No competitor benchmark is available. + +30.1ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / newton_root +fltx bl::f128 (same workload): 30.1299 ns +No competitor benchmark is available. + +30.1ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 219.374 ns +No competitor benchmark is available. + +219ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 244.132 ns +No competitor benchmark is available. + +244ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 236.633 ns +No competitor benchmark is available. + +237ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / newton_root +fltx bl::f256 (same workload): 250.279 ns +No competitor benchmark is available. + +250ns + + +log_sum_exp + +Windows / x64 / MSVC; bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 947.517 ns +No competitor benchmark is available. + +948ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 793.133 ns +No competitor benchmark is available. + +793ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 900.184 ns +No competitor benchmark is available. + +900ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / log_sum_exp +fltx bl::f128 (same workload): 965.639 ns +No competitor benchmark is available. + +966ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 8662.5 ns +No competitor benchmark is available. + +8,662ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 8837.5 ns +No competitor benchmark is available. + +8,838ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 9137.5 ns +No competitor benchmark is available. + +9,138ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / log_sum_exp +fltx bl::f256 (same workload): 9212.5 ns +No competitor benchmark is available. + +9,212ns + + +haversine + +Windows / x64 / MSVC; bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 439.18 ns +No competitor benchmark is available. + +439ns + + +Windows / x64 / Clang (clang-cl); bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 411.278 ns +No competitor benchmark is available. + +411ns + + +Windows / x64 / GCC (MinGW-w64); bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 532.112 ns +No competitor benchmark is available. + +532ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f128; mixed_workloads / haversine +fltx bl::f128 (same workload): 551.588 ns +No competitor benchmark is available. + +552ns + + +Windows / x64 / MSVC; bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4656.67 ns +No competitor benchmark is available. + +4,657ns + + +Windows / x64 / Clang (clang-cl); bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4850.88 ns +No competitor benchmark is available. + +4,851ns + + +Windows / x64 / GCC (MinGW-w64); bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4762.77 ns +No competitor benchmark is available. + +4,763ns + + +WebAssembly / wasm32 / Clang (Emscripten); bl::f256; mixed_workloads / haversine +fltx bl::f256 (same workload): 4750 ns +No competitor benchmark is available. + +4,750ns + + diff --git a/validation/metrics/generated/profile_comparison/wasm32_wasm32_Emscripten_f128_strict_fastmath_comp.svg b/validation/metrics/generated/profile_comparison/wasm32_wasm32_Emscripten_f128_strict_fastmath_comp.svg new file mode 100644 index 0000000..67a1fbd --- /dev/null +++ b/validation/metrics/generated/profile_comparison/wasm32_wasm32_Emscripten_f128_strict_fastmath_comp.svg @@ -0,0 +1,9359 @@ + + + + +f128 strict vs consumer fast-math — WebAssembly / wasm32 / Clang (Emscripten) +Strict first; deltas are fast-math - strict. Accuracy excludes the separate subnormal domain. + +operation + +bl::f128 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + +Arithmetic + +add + +fltx add +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.816254 ns -> 0.926152 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +119.1 + + +fltx add +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.816254 ns -> 0.926152 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +105.7 + + +fltx add +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.816254 ns -> 0.926152 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +1/1 + + +fltx add +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.816254 ns -> 0.926152 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +1.82 ns (-0.890 ns) + + +fltx add +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.816254 ns -> 0.926152 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +Both (-Inf -NaN) + + +fltx add +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.816254 ns -> 0.926152 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +✗ + + +fltx add +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.816254 ns -> 0.926152 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +✓ + + +subtract + +fltx subtract +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.808202 ns -> 0.923213 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +118.9 + + +fltx subtract +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.808202 ns -> 0.923213 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +105.7 + + +fltx subtract +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.808202 ns -> 0.923213 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +1/1 + + +fltx subtract +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.808202 ns -> 0.923213 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +1.81 ns (-0.885 ns) + + +fltx subtract +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.808202 ns -> 0.923213 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +Both (-Inf -NaN) + + +fltx subtract +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.808202 ns -> 0.923213 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +✗ + + +fltx subtract +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.808202 ns -> 0.923213 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +✓ + + +multiply + +fltx multiply +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.605675 ns -> 2.028785 ns +special values: Both -> No +signed zero: yes -> no +subnormal support: yes -> yes + +108.7 + + +fltx multiply +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.605675 ns -> 2.028785 ns +special values: Both -> No +signed zero: yes -> no +subnormal support: yes -> yes + +105.4 + + +fltx multiply +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.605675 ns -> 2.028785 ns +special values: Both -> No +signed zero: yes -> no +subnormal support: yes -> yes + +1/1 + + +fltx multiply +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.605675 ns -> 2.028785 ns +special values: Both -> No +signed zero: yes -> no +subnormal support: yes -> yes + +1.61 ns (+0.423 ns) + + +fltx multiply +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.605675 ns -> 2.028785 ns +special values: Both -> No +signed zero: yes -> no +subnormal support: yes -> yes + +Both (-Inf -NaN) + + +fltx multiply +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.605675 ns -> 2.028785 ns +special values: Both -> No +signed zero: yes -> no +subnormal support: yes -> yes + +✓ (✗) + + +fltx multiply +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.605675 ns -> 2.028785 ns +special values: Both -> No +signed zero: yes -> no +subnormal support: yes -> yes + +✓ + + +divide + +fltx divide +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 2.529215 ns -> 2.490718 ns +special values: Both -> No +signed zero: yes -> no +subnormal support: yes -> yes + +110.9 + + +fltx divide +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 2.529215 ns -> 2.490718 ns +special values: Both -> No +signed zero: yes -> no +subnormal support: yes -> yes + +105.1 + + +fltx divide +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 2.529215 ns -> 2.490718 ns +special values: Both -> No +signed zero: yes -> no +subnormal support: yes -> yes + +1/1 + + +fltx divide +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 2.529215 ns -> 2.490718 ns +special values: Both -> No +signed zero: yes -> no +subnormal support: yes -> yes + +2.53 ns (-0.038 ns) + + +fltx divide +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 2.529215 ns -> 2.490718 ns +special values: Both -> No +signed zero: yes -> no +subnormal support: yes -> yes + +Both (-Inf -NaN) + + +fltx divide +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 2.529215 ns -> 2.490718 ns +special values: Both -> No +signed zero: yes -> no +subnormal support: yes -> yes + +✓ (✗) + + +fltx divide +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 2.529215 ns -> 2.490718 ns +special values: Both -> No +signed zero: yes -> no +subnormal support: yes -> yes + +✓ + + + +IO + +to_string + +fltx to_string +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 293.716237 ns -> 254.208343 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +114.0 + + +fltx to_string +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 293.716237 ns -> 254.208343 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.7 + + +fltx to_string +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 293.716237 ns -> 254.208343 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_string +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 293.716237 ns -> 254.208343 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +293.7 ns (-39.51 ns) + + +fltx to_string +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 293.716237 ns -> 254.208343 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_string +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 293.716237 ns -> 254.208343 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_string +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 293.716237 ns -> 254.208343 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +to_chars + +fltx to_chars +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 239.070505 ns -> 219.817842 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +114.0 + + +fltx to_chars +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 239.070505 ns -> 219.817842 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.7 + + +fltx to_chars +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 239.070505 ns -> 219.817842 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_chars +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 239.070505 ns -> 219.817842 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +239.1 ns (-19.25 ns) + + +fltx to_chars +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 239.070505 ns -> 219.817842 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_chars +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 239.070505 ns -> 219.817842 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_chars +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 239.070505 ns -> 219.817842 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +parse + +fltx parse +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.907318229 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 256.149196 ns -> 282.75799 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +109.9 (-0.029) + + +fltx parse +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.907318229 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 256.149196 ns -> 282.75799 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +106.0 + + +fltx parse +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.907318229 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 256.149196 ns -> 282.75799 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx parse +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.907318229 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 256.149196 ns -> 282.75799 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +256.1 ns (+26.61 ns) + + +fltx parse +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.907318229 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 256.149196 ns -> 282.75799 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx parse +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.907318229 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 256.149196 ns -> 282.75799 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx parse +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.907318229 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 256.149196 ns -> 282.75799 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Rounding + +floor + +fltx floor +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.815484 ns -> 0.761136 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.815484 ns -> 0.761136 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.815484 ns -> 0.761136 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx floor +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.815484 ns -> 0.761136 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +0.815 ns (-0.054 ns) + + +fltx floor +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.815484 ns -> 0.761136 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx floor +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.815484 ns -> 0.761136 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx floor +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.815484 ns -> 0.761136 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ceil + +fltx ceil +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.504783 ns -> 1.514958 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ceil +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.504783 ns -> 1.514958 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ceil +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.504783 ns -> 1.514958 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ceil +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.504783 ns -> 1.514958 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.50 ns (+0.010 ns) + + +fltx ceil +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.504783 ns -> 1.514958 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx ceil +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.504783 ns -> 1.514958 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ceil +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.504783 ns -> 1.514958 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +trunc + +fltx trunc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.169909 ns -> 2.298459 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx trunc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.169909 ns -> 2.298459 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx trunc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.169909 ns -> 2.298459 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx trunc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.169909 ns -> 2.298459 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.17 ns (-0.871 ns) + + +fltx trunc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.169909 ns -> 2.298459 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx trunc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.169909 ns -> 2.298459 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx trunc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.169909 ns -> 2.298459 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round + +fltx round +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.889271 ns -> 8.782349 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.889271 ns -> 8.782349 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.889271 ns -> 8.782349 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.889271 ns -> 8.782349 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +8.89 ns (-0.107 ns) + + +fltx round +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.889271 ns -> 8.782349 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.889271 ns -> 8.782349 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.889271 ns -> 8.782349 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +roundeven + +fltx roundeven +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.027466 ns -> 10.331055 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.027466 ns -> 10.331055 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.027466 ns -> 10.331055 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx roundeven +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.027466 ns -> 10.331055 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +10.03 ns (+0.304 ns) + + +fltx roundeven +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.027466 ns -> 10.331055 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx roundeven +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.027466 ns -> 10.331055 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx roundeven +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.027466 ns -> 10.331055 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +lround + +fltx lround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.691771 ns -> 6.760378 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.691771 ns -> 6.760378 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.691771 ns -> 6.760378 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.691771 ns -> 6.760378 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +6.69 ns (+0.069 ns) + + +fltx lround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.691771 ns -> 6.760378 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.691771 ns -> 6.760378 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.691771 ns -> 6.760378 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +llround + +fltx llround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.052807 ns -> 6.273768 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.052807 ns -> 6.273768 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.052807 ns -> 6.273768 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx llround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.052807 ns -> 6.273768 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +6.05 ns (+0.221 ns) + + +fltx llround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.052807 ns -> 6.273768 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.052807 ns -> 6.273768 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.052807 ns -> 6.273768 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +round_decimals + +fltx round_decimals +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 93.118286 ns -> 93.270597 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +110.2 + + +fltx round_decimals +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 93.118286 ns -> 93.270597 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +107.0 + + +fltx round_decimals +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 93.118286 ns -> 93.270597 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_decimals +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 93.118286 ns -> 93.270597 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +93.12 ns (+0.152 ns) + + +fltx round_decimals +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 93.118286 ns -> 93.270597 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx round_decimals +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 93.118286 ns -> 93.270597 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_decimals +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 93.118286 ns -> 93.270597 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round_significant + +fltx round_significant +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 144.793701 ns -> 140.171814 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +121.3 + + +fltx round_significant +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 144.793701 ns -> 140.171814 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +107.0 + + +fltx round_significant +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 144.793701 ns -> 140.171814 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_significant +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 144.793701 ns -> 140.171814 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +144.8 ns (-4.62 ns) + + +fltx round_significant +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 144.793701 ns -> 140.171814 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx round_significant +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 144.793701 ns -> 140.171814 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_significant +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 144.793701 ns -> 140.171814 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Remainders + +fmod + +fltx fmod +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 20.590672 ns -> 20.511512 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmod +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 20.590672 ns -> 20.511512 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmod +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 20.590672 ns -> 20.511512 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx fmod +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 20.590672 ns -> 20.511512 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +20.59 ns (-0.079 ns) + + +fltx fmod +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 20.590672 ns -> 20.511512 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx fmod +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 20.590672 ns -> 20.511512 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmod +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 20.590672 ns -> 20.511512 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remainder + +fltx remainder +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 22.824164 ns -> 22.835104 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +138.0 + + +fltx remainder +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 22.824164 ns -> 22.835104 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +103.1 + + +fltx remainder +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 22.824164 ns -> 22.835104 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remainder +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 22.824164 ns -> 22.835104 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +22.82 ns (+0.011 ns) + + +fltx remainder +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 22.824164 ns -> 22.835104 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx remainder +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 22.824164 ns -> 22.835104 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remainder +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 22.824164 ns -> 22.835104 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remquo + +fltx remquo +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 22.812661 ns -> 22.600911 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 22.812661 ns -> 22.600911 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 22.812661 ns -> 22.600911 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remquo +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 22.812661 ns -> 22.600911 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +22.81 ns (-0.212 ns) + + +fltx remquo +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 22.812661 ns -> 22.600911 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx remquo +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 22.812661 ns -> 22.600911 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remquo +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 22.812661 ns -> 22.600911 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Float Utils + +abs + +fltx abs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.809662 ns -> 0.812795 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx abs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.809662 ns -> 0.812795 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx abs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.809662 ns -> 0.812795 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx abs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.809662 ns -> 0.812795 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +0.810 ns (+0.003 ns) + + +fltx abs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.809662 ns -> 0.812795 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +Both (-Inf) + + +fltx abs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.809662 ns -> 0.812795 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx abs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.809662 ns -> 0.812795 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fabs + +fltx fabs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.807183 ns -> 0.812937 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fabs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.807183 ns -> 0.812937 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fabs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.807183 ns -> 0.812937 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx fabs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.807183 ns -> 0.812937 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +0.807 ns (+0.006 ns) + + +fltx fabs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.807183 ns -> 0.812937 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx fabs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.807183 ns -> 0.812937 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fabs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.807183 ns -> 0.812937 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fma + +fltx fma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.187792693 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 7.874333 ns -> 7.590419 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +117.4 (-0.3) + + +fltx fma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.187792693 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 7.874333 ns -> 7.590419 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +99.6 + + +fltx fma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.187792693 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 7.874333 ns -> 7.590419 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +3/3 + + +fltx fma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.187792693 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 7.874333 ns -> 7.590419 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +7.87 ns (-0.284 ns) + + +fltx fma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.187792693 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 7.874333 ns -> 7.590419 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx fma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.187792693 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 7.874333 ns -> 7.590419 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx fma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.187792693 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 7.874333 ns -> 7.590419 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + +recip + +fltx recip +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 48.166726 ns -> 32.824326 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: - -> - + +109.0 + + +fltx recip +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 48.166726 ns -> 32.824326 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: - -> - + +105.2 + + +fltx recip +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 48.166726 ns -> 32.824326 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: - -> - + +2/2 + + +fltx recip +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 48.166726 ns -> 32.824326 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: - -> - + +48.17 ns (-15.34 ns) + + +fltx recip +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 48.166726 ns -> 32.824326 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: - -> - + +Both (-Inf) + + +fltx recip +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 48.166726 ns -> 32.824326 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: - -> - + +✓ (✗) + + +fltx recip +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 48.166726 ns -> 32.824326 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: - -> - + +- + + +fmin + +fltx fmin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.922363 ns -> 1.031455 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.922363 ns -> 1.031455 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.922363 ns -> 1.031455 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.922363 ns -> 1.031455 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +2.92 ns (-1.89 ns) + + +fltx fmin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.922363 ns -> 1.031455 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx fmin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.922363 ns -> 1.031455 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.922363 ns -> 1.031455 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fmax + +fltx fmax +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.937816 ns -> 0.974309 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.937816 ns -> 0.974309 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.937816 ns -> 0.974309 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmax +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.937816 ns -> 0.974309 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +2.94 ns (-1.96 ns) + + +fltx fmax +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.937816 ns -> 0.974309 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx fmax +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.937816 ns -> 0.974309 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmax +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.937816 ns -> 0.974309 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fdim + +fltx fdim +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.029378 ns -> 3.088129 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +138.0 + + +fltx fdim +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.029378 ns -> 3.088129 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +106.2 + + +fltx fdim +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.029378 ns -> 3.088129 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fdim +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.029378 ns -> 3.088129 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +3.03 ns (+0.059 ns) + + +fltx fdim +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.029378 ns -> 3.088129 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx fdim +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.029378 ns -> 3.088129 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fdim +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.029378 ns -> 3.088129 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +copysign + +fltx copysign +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.38506 ns -> 0.385447 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.38506 ns -> 0.385447 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.38506 ns -> 0.385447 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx copysign +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.38506 ns -> 0.385447 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +0.385 ns (+0.000 ns) + + +fltx copysign +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.38506 ns -> 0.385447 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx copysign +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.38506 ns -> 0.385447 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx copysign +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.38506 ns -> 0.385447 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ldexp + +fltx ldexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.811072 ns -> 2.904016 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.811072 ns -> 2.904016 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.811072 ns -> 2.904016 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ldexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.811072 ns -> 2.904016 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1.81 ns (+1.09 ns) + + +fltx ldexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.811072 ns -> 2.904016 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx ldexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.811072 ns -> 2.904016 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ldexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.811072 ns -> 2.904016 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbn + +fltx scalbn +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.880258 ns -> 3.019962 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.880258 ns -> 3.019962 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.880258 ns -> 3.019962 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbn +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.880258 ns -> 3.019962 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1.88 ns (+1.14 ns) + + +fltx scalbn +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.880258 ns -> 3.019962 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx scalbn +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.880258 ns -> 3.019962 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbn +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.880258 ns -> 3.019962 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbln + +fltx scalbln +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.885564 ns -> 3.00978 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.885564 ns -> 3.00978 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.885564 ns -> 3.00978 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbln +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.885564 ns -> 3.00978 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1.89 ns (+1.12 ns) + + +fltx scalbln +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.885564 ns -> 3.00978 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx scalbln +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.885564 ns -> 3.00978 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbln +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.885564 ns -> 3.00978 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +frexp + +fltx frexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.610041 ns -> 3.496782 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx frexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.610041 ns -> 3.496782 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx frexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.610041 ns -> 3.496782 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx frexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.610041 ns -> 3.496782 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +3.61 ns (-0.113 ns) + + +fltx frexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.610041 ns -> 3.496782 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx frexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.610041 ns -> 3.496782 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx frexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.610041 ns -> 3.496782 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +modf + +fltx modf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 6.927448 ns -> 6.810724 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 6.927448 ns -> 6.810724 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 6.927448 ns -> 6.810724 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx modf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 6.927448 ns -> 6.810724 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +6.93 ns (-0.117 ns) + + +fltx modf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 6.927448 ns -> 6.810724 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx modf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 6.927448 ns -> 6.810724 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx modf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 6.927448 ns -> 6.810724 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ilogb + +fltx ilogb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.082902 ns -> 1.845929 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.082902 ns -> 1.845929 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.082902 ns -> 1.845929 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx ilogb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.082902 ns -> 1.845929 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +2.08 ns (-0.237 ns) + + +fltx ilogb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.082902 ns -> 1.845929 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.082902 ns -> 1.845929 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.082902 ns -> 1.845929 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +logb + +fltx logb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.914917 ns -> 1.983617 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.914917 ns -> 1.983617 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.914917 ns -> 1.983617 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx logb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.914917 ns -> 1.983617 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +1.91 ns (+0.069 ns) + + +fltx logb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.914917 ns -> 1.983617 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx logb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.914917 ns -> 1.983617 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx logb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.914917 ns -> 1.983617 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +nextafter + +fltx nextafter +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.43675 ns -> 5.917627 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.43675 ns -> 5.917627 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.43675 ns -> 5.917627 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.43675 ns -> 5.917627 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +5.44 ns (+0.481 ns) + + +fltx nextafter +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.43675 ns -> 5.917627 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.43675 ns -> 5.917627 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.43675 ns -> 5.917627 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +nexttoward + +fltx nexttoward +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.43457 ns -> 5.904433 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.43457 ns -> 5.904433 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.43457 ns -> 5.904433 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.43457 ns -> 5.904433 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +5.43 ns (+0.470 ns) + + +fltx nexttoward +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.43457 ns -> 5.904433 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.43457 ns -> 5.904433 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.43457 ns -> 5.904433 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Roots & powers + +sqr + +fltx sqr +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.204857 ns -> 1.230516 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.7 + + +fltx sqr +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.204857 ns -> 1.230516 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +105.4 + + +fltx sqr +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.204857 ns -> 1.230516 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sqr +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.204857 ns -> 1.230516 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.20 ns (+0.026 ns) + + +fltx sqr +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.204857 ns -> 1.230516 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sqr +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.204857 ns -> 1.230516 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sqr +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.204857 ns -> 1.230516 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +sqrt + +fltx sqrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 5.67276 ns -> 4.944255 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +109.5 + + +fltx sqrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 5.67276 ns -> 4.944255 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +104.7 + + +fltx sqrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 5.67276 ns -> 4.944255 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +3/3 + + +fltx sqrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 5.67276 ns -> 4.944255 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +5.67 ns (-0.729 ns) + + +fltx sqrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 5.67276 ns -> 4.944255 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +Both (-Inf) + + +fltx sqrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 5.67276 ns -> 4.944255 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx sqrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 5.67276 ns -> 4.944255 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +cbrt + +fltx cbrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.521255256 -> 108.521255256 +worst bits: 104.098992 -> 104.098992 +domains: 2/2 -> 2/2 +time: 18.870897 ns -> 18.259215 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +108.5 + + +fltx cbrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.521255256 -> 108.521255256 +worst bits: 104.098992 -> 104.098992 +domains: 2/2 -> 2/2 +time: 18.870897 ns -> 18.259215 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +104.1 + + +fltx cbrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.521255256 -> 108.521255256 +worst bits: 104.098992 -> 104.098992 +domains: 2/2 -> 2/2 +time: 18.870897 ns -> 18.259215 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx cbrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.521255256 -> 108.521255256 +worst bits: 104.098992 -> 104.098992 +domains: 2/2 -> 2/2 +time: 18.870897 ns -> 18.259215 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +18.87 ns (-0.612 ns) + + +fltx cbrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.521255256 -> 108.521255256 +worst bits: 104.098992 -> 104.098992 +domains: 2/2 -> 2/2 +time: 18.870897 ns -> 18.259215 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx cbrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.521255256 -> 108.521255256 +worst bits: 104.098992 -> 104.098992 +domains: 2/2 -> 2/2 +time: 18.870897 ns -> 18.259215 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx cbrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.521255256 -> 108.521255256 +worst bits: 104.098992 -> 104.098992 +domains: 2/2 -> 2/2 +time: 18.870897 ns -> 18.259215 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +hypot + +fltx hypot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379786777 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 10.877763 ns -> 11.565531 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +122.4 (+0.000442) + + +fltx hypot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379786777 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 10.877763 ns -> 11.565531 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +104.4 + + +fltx hypot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379786777 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 10.877763 ns -> 11.565531 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx hypot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379786777 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 10.877763 ns -> 11.565531 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +10.88 ns (+0.688 ns) + + +fltx hypot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379786777 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 10.877763 ns -> 11.565531 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx hypot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379786777 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 10.877763 ns -> 11.565531 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx hypot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379786777 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 10.877763 ns -> 11.565531 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +pow + +fltx pow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 241.208065 ns -> 241.251149 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +107.1 + + +fltx pow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 241.208065 ns -> 241.251149 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +101.3 + + +fltx pow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 241.208065 ns -> 241.251149 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx pow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 241.208065 ns -> 241.251149 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +241.2 ns (+0.043 ns) + + +fltx pow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 241.208065 ns -> 241.251149 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx pow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 241.208065 ns -> 241.251149 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx pow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 241.208065 ns -> 241.251149 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ipow + +fltx ipow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 26.345083 ns -> 26.582746 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +106.5 + + +fltx ipow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 26.345083 ns -> 26.582746 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +103.2 + + +fltx ipow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 26.345083 ns -> 26.582746 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +2/2 + + +fltx ipow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 26.345083 ns -> 26.582746 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +26.35 ns (+0.238 ns) + + +fltx ipow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 26.345083 ns -> 26.582746 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx ipow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 26.345083 ns -> 26.582746 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx ipow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 26.345083 ns -> 26.582746 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + + +Exponentials + +exp + +fltx exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.9878975 -> 106.9987285 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 118.133904 ns -> 121.788025 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +107.0 (+0.011) + + +fltx exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.9878975 -> 106.9987285 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 118.133904 ns -> 121.788025 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +103.6 + + +fltx exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.9878975 -> 106.9987285 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 118.133904 ns -> 121.788025 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.9878975 -> 106.9987285 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 118.133904 ns -> 121.788025 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +118.1 ns (+3.65 ns) + + +fltx exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.9878975 -> 106.9987285 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 118.133904 ns -> 121.788025 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.9878975 -> 106.9987285 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 118.133904 ns -> 121.788025 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.9878975 -> 106.9987285 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 118.133904 ns -> 121.788025 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +exp2 + +fltx exp2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 111.646793 ns -> 115.408573 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +108.9 + + +fltx exp2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 111.646793 ns -> 115.408573 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +105.1 + + +fltx exp2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 111.646793 ns -> 115.408573 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 111.646793 ns -> 115.408573 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +111.6 ns (+3.76 ns) + + +fltx exp2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 111.646793 ns -> 115.408573 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx exp2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 111.646793 ns -> 115.408573 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 111.646793 ns -> 115.408573 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +expm1 + +fltx expm1 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 118.245443 ns -> 121.780396 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +121.6 + + +fltx expm1 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 118.245443 ns -> 121.780396 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +104.1 + + +fltx expm1 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 118.245443 ns -> 121.780396 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx expm1 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 118.245443 ns -> 121.780396 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +118.2 ns (+3.53 ns) + + +fltx expm1 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 118.245443 ns -> 121.780396 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx expm1 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 118.245443 ns -> 121.780396 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx expm1 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 118.245443 ns -> 121.780396 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Logarithms + +log + +fltx log +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 155.311415 ns -> 144.369612 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +108.4 + + +fltx log +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 155.311415 ns -> 144.369612 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +103.7 + + +fltx log +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 155.311415 ns -> 144.369612 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 155.311415 ns -> 144.369612 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +155.3 ns (-10.94 ns) + + +fltx log +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 155.311415 ns -> 144.369612 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx log +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 155.311415 ns -> 144.369612 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 155.311415 ns -> 144.369612 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +log2 + +fltx log2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 162.621094 ns -> 148.693427 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +108.8 + + +fltx log2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 162.621094 ns -> 148.693427 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +103.7 + + +fltx log2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 162.621094 ns -> 148.693427 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 162.621094 ns -> 148.693427 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +162.6 ns (-13.93 ns) + + +fltx log2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 162.621094 ns -> 148.693427 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx log2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 162.621094 ns -> 148.693427 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 162.621094 ns -> 148.693427 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +log10 + +fltx log10 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 162.693278 ns -> 148.4375 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +107.5 + + +fltx log10 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 162.693278 ns -> 148.4375 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +103.8 + + +fltx log10 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 162.693278 ns -> 148.4375 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log10 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 162.693278 ns -> 148.4375 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +162.7 ns (-14.26 ns) + + +fltx log10 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 162.693278 ns -> 148.4375 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx log10 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 162.693278 ns -> 148.4375 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log10 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 162.693278 ns -> 148.4375 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +log1p + +fltx log1p +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 157.910156 ns -> 152.109712 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +121.4 + + +fltx log1p +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 157.910156 ns -> 152.109712 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +103.6 + + +fltx log1p +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 157.910156 ns -> 152.109712 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx log1p +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 157.910156 ns -> 152.109712 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +157.9 ns (-5.80 ns) + + +fltx log1p +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 157.910156 ns -> 152.109712 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx log1p +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 157.910156 ns -> 152.109712 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx log1p +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 157.910156 ns -> 152.109712 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Trigonometric + +sin + +fltx sin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 107.259971 ns -> 107.149465 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +110.6 + + +fltx sin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 107.259971 ns -> 107.149465 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +98.6 + + +fltx sin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 107.259971 ns -> 107.149465 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx sin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 107.259971 ns -> 107.149465 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +107.3 ns (-0.111 ns) + + +fltx sin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 107.259971 ns -> 107.149465 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx sin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 107.259971 ns -> 107.149465 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 107.259971 ns -> 107.149465 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cos + +fltx cos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 106.950298 ns -> 106.911058 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +113.5 + + +fltx cos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 106.950298 ns -> 106.911058 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +99.2 + + +fltx cos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 106.950298 ns -> 106.911058 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx cos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 106.950298 ns -> 106.911058 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.0 ns (-0.039 ns) + + +fltx cos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 106.950298 ns -> 106.911058 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 106.950298 ns -> 106.911058 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 106.950298 ns -> 106.911058 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +sincos + +fltx sincos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 116.824588 ns -> 118.104677 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 116.824588 ns -> 118.104677 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 116.824588 ns -> 118.104677 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 116.824588 ns -> 118.104677 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +116.8 ns (+1.28 ns) + + +fltx sincos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 116.824588 ns -> 118.104677 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 116.824588 ns -> 118.104677 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 116.824588 ns -> 118.104677 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +tan + +fltx tan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.671100353 -> 106.671100353 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 116.663587 ns -> 116.382496 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +106.7 + + +fltx tan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.671100353 -> 106.671100353 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 116.663587 ns -> 116.382496 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +98.6 + + +fltx tan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.671100353 -> 106.671100353 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 116.663587 ns -> 116.382496 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx tan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.671100353 -> 106.671100353 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 116.663587 ns -> 116.382496 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +116.7 ns (-0.281 ns) + + +fltx tan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.671100353 -> 106.671100353 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 116.663587 ns -> 116.382496 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx tan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.671100353 -> 106.671100353 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 116.663587 ns -> 116.382496 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.671100353 -> 106.671100353 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 116.663587 ns -> 116.382496 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asin + +fltx asin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 196.669922 ns -> 196.608887 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +108.6 + + +fltx asin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 196.669922 ns -> 196.608887 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +104.1 + + +fltx asin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 196.669922 ns -> 196.608887 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 196.669922 ns -> 196.608887 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +196.7 ns (-0.061 ns) + + +fltx asin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 196.669922 ns -> 196.608887 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx asin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 196.669922 ns -> 196.608887 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 196.669922 ns -> 196.608887 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acos + +fltx acos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 202.150657 ns -> 202.055664 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +106.5 + + +fltx acos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 202.150657 ns -> 202.055664 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +81.6 + + +fltx acos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 202.150657 ns -> 202.055664 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 202.150657 ns -> 202.055664 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +202.2 ns (-0.095 ns) + + +fltx acos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 202.150657 ns -> 202.055664 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx acos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 202.150657 ns -> 202.055664 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 202.150657 ns -> 202.055664 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +atan + +fltx atan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 142.457682 ns -> 142.117513 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +108.7 + + +fltx atan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 142.457682 ns -> 142.117513 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +104.9 + + +fltx atan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 142.457682 ns -> 142.117513 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 142.457682 ns -> 142.117513 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +142.5 ns (-0.340 ns) + + +fltx atan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 142.457682 ns -> 142.117513 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx atan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 142.457682 ns -> 142.117513 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 142.457682 ns -> 142.117513 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +atan2 + +fltx atan2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 148.252651 ns -> 148.882185 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +108.7 + + +fltx atan2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 148.252651 ns -> 148.882185 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +104.5 + + +fltx atan2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 148.252651 ns -> 148.882185 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx atan2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 148.252651 ns -> 148.882185 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +148.3 ns (+0.630 ns) + + +fltx atan2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 148.252651 ns -> 148.882185 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx atan2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 148.252651 ns -> 148.882185 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 148.252651 ns -> 148.882185 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Hyperbolic + +sinh + +fltx sinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 135.136414 ns -> 140.209961 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.4 + + +fltx sinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 135.136414 ns -> 140.209961 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.6 + + +fltx sinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 135.136414 ns -> 140.209961 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 135.136414 ns -> 140.209961 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +135.1 ns (+5.07 ns) + + +fltx sinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 135.136414 ns -> 140.209961 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 135.136414 ns -> 140.209961 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 135.136414 ns -> 140.209961 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cosh + +fltx cosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 134.440613 ns -> 139.153856 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.9 + + +fltx cosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 134.440613 ns -> 139.153856 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +104.4 + + +fltx cosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 134.440613 ns -> 139.153856 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx cosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 134.440613 ns -> 139.153856 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +134.4 ns (+4.71 ns) + + +fltx cosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 134.440613 ns -> 139.153856 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 134.440613 ns -> 139.153856 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 134.440613 ns -> 139.153856 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +tanh + +fltx tanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 141.668294 ns -> 146.486119 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +109.2 + + +fltx tanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 141.668294 ns -> 146.486119 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +103.8 + + +fltx tanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 141.668294 ns -> 146.486119 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx tanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 141.668294 ns -> 146.486119 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +141.7 ns (+4.82 ns) + + +fltx tanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 141.668294 ns -> 146.486119 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx tanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 141.668294 ns -> 146.486119 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 141.668294 ns -> 146.486119 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asinh + +fltx asinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 144.785493 ns -> 142.642107 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +108.1 + + +fltx asinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 144.785493 ns -> 142.642107 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +103.8 + + +fltx asinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 144.785493 ns -> 142.642107 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 144.785493 ns -> 142.642107 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +144.8 ns (-2.14 ns) + + +fltx asinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 144.785493 ns -> 142.642107 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx asinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 144.785493 ns -> 142.642107 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 144.785493 ns -> 142.642107 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acosh + +fltx acosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 169.054688 ns -> 165.884165 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +108.0 + + +fltx acosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 169.054688 ns -> 165.884165 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +103.7 + + +fltx acosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 169.054688 ns -> 165.884165 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 169.054688 ns -> 165.884165 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +169.1 ns (-3.17 ns) + + +fltx acosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 169.054688 ns -> 165.884165 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx acosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 169.054688 ns -> 165.884165 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 169.054688 ns -> 165.884165 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +atanh + +fltx atanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 168.141526 ns -> 163.069661 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +108.1 + + +fltx atanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 168.141526 ns -> 163.069661 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +103.1 + + +fltx atanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 168.141526 ns -> 163.069661 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 168.141526 ns -> 163.069661 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +168.1 ns (-5.07 ns) + + +fltx atanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 168.141526 ns -> 163.069661 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx atanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 168.141526 ns -> 163.069661 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 168.141526 ns -> 163.069661 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Special + +erfc + +fltx erfc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 809.465144 ns -> 813.301282 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.2 + + +fltx erfc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 809.465144 ns -> 813.301282 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +99.2 + + +fltx erfc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 809.465144 ns -> 813.301282 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx erfc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 809.465144 ns -> 813.301282 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +809.5 ns (+3.84 ns) + + +fltx erfc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 809.465144 ns -> 813.301282 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx erfc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 809.465144 ns -> 813.301282 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx erfc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 809.465144 ns -> 813.301282 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +erf + +fltx erf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 810.341797 ns -> 814.523237 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.9 + + +fltx erf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 810.341797 ns -> 814.523237 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.5 + + +fltx erf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 810.341797 ns -> 814.523237 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx erf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 810.341797 ns -> 814.523237 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +810.3 ns (+4.18 ns) + + +fltx erf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 810.341797 ns -> 814.523237 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx erf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 810.341797 ns -> 814.523237 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx erf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 810.341797 ns -> 814.523237 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +tgamma + +fltx tgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 590.748355 ns -> 593.503289 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +105.6 + + +fltx tgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 590.748355 ns -> 593.503289 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +97.3 + + +fltx tgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 590.748355 ns -> 593.503289 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx tgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 590.748355 ns -> 593.503289 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +590.7 ns (+2.75 ns) + + +fltx tgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 590.748355 ns -> 593.503289 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx tgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 590.748355 ns -> 593.503289 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx tgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 590.748355 ns -> 593.503289 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +lgamma + +fltx lgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 676.52181 ns -> 657.828125 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +107.3 + + +fltx lgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 676.52181 ns -> 657.828125 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +102.2 + + +fltx lgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 676.52181 ns -> 657.828125 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 676.52181 ns -> 657.828125 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +676.5 ns (-18.69 ns) + + +fltx lgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 676.52181 ns -> 657.828125 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx lgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 676.52181 ns -> 657.828125 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 676.52181 ns -> 657.828125 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + + +Comparisons + +equal + +fltx equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.109053 ns -> 1.115677 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.109053 ns -> 1.115677 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.109053 ns -> 1.115677 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.109053 ns -> 1.115677 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.11 ns (+0.007 ns) + + +fltx equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.109053 ns -> 1.115677 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.109053 ns -> 1.115677 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.109053 ns -> 1.115677 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +not_equal + +fltx not_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.11379 ns -> 1.114032 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.11379 ns -> 1.114032 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.11379 ns -> 1.114032 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx not_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.11379 ns -> 1.114032 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.11 ns (+0.000 ns) + + +fltx not_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.11379 ns -> 1.114032 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx not_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.11379 ns -> 1.114032 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx not_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.11379 ns -> 1.114032 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less + +fltx less +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.047395 ns -> 2.152808 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.047395 ns -> 2.152808 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.047395 ns -> 2.152808 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.047395 ns -> 2.152808 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2.05 ns (+0.105 ns) + + +fltx less +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.047395 ns -> 2.152808 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.047395 ns -> 2.152808 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.047395 ns -> 2.152808 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater + +fltx greater +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.078702 ns -> 2.102405 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.078702 ns -> 2.102405 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.078702 ns -> 2.102405 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.078702 ns -> 2.102405 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2.08 ns (+0.024 ns) + + +fltx greater +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.078702 ns -> 2.102405 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.078702 ns -> 2.102405 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.078702 ns -> 2.102405 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less_equal + +fltx less_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.068569 ns -> 2.170292 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.068569 ns -> 2.170292 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.068569 ns -> 2.170292 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.068569 ns -> 2.170292 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2.07 ns (+0.102 ns) + + +fltx less_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.068569 ns -> 2.170292 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.068569 ns -> 2.170292 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.068569 ns -> 2.170292 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater_equal + +fltx greater_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.086099 ns -> 2.173572 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.086099 ns -> 2.173572 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.086099 ns -> 2.173572 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.086099 ns -> 2.173572 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2.09 ns (+0.087 ns) + + +fltx greater_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.086099 ns -> 2.173572 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.086099 ns -> 2.173572 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.086099 ns -> 2.173572 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + + +Random + +uniform_real + +fltx uniform_real +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.852447 ns -> 5.827391 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.852447 ns -> 5.827391 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.852447 ns -> 5.827391 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.852447 ns -> 5.827391 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +5.85 ns (-0.025 ns) + + +fltx uniform_real +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.852447 ns -> 5.827391 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.852447 ns -> 5.827391 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.852447 ns -> 5.827391 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +normal + +fltx normal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 48.963562 ns -> 40.864702 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 48.963562 ns -> 40.864702 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 48.963562 ns -> 40.864702 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 48.963562 ns -> 40.864702 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +48.96 ns (-8.10 ns) + + +fltx normal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 48.963562 ns -> 40.864702 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 48.963562 ns -> 40.864702 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 48.963562 ns -> 40.864702 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Mixed Workloads + +product_sum + +fltx product_sum +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.095968 ns -> 7.539445 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.095968 ns -> 7.539445 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.095968 ns -> 7.539445 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.095968 ns -> 7.539445 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +6.10 ns (+1.44 ns) + + +fltx product_sum +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.095968 ns -> 7.539445 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.095968 ns -> 7.539445 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.095968 ns -> 7.539445 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +chained_arithmetic + +fltx chained_arithmetic +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 30.587839 ns -> 20.29797 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 30.587839 ns -> 20.29797 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 30.587839 ns -> 20.29797 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 30.587839 ns -> 20.29797 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +30.59 ns (-10.29 ns) + + +fltx chained_arithmetic +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 30.587839 ns -> 20.29797 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 30.587839 ns -> 20.29797 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 30.587839 ns -> 20.29797 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +affine_trig + +fltx affine_trig +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 242.774843 ns -> 233.701087 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 242.774843 ns -> 233.701087 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 242.774843 ns -> 233.701087 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 242.774843 ns -> 233.701087 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +242.8 ns (-9.07 ns) + + +fltx affine_trig +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 242.774843 ns -> 233.701087 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 242.774843 ns -> 233.701087 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 242.774843 ns -> 233.701087 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +mandelbrot + +fltx mandelbrot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 21.32563 ns -> 15.092775 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 21.32563 ns -> 15.092775 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 21.32563 ns -> 15.092775 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 21.32563 ns -> 15.092775 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +21.33 ns (-6.23 ns) + + +fltx mandelbrot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 21.32563 ns -> 15.092775 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 21.32563 ns -> 15.092775 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 21.32563 ns -> 15.092775 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +matrix_vector_4x4 + +fltx matrix_vector_4x4 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 69.306735 ns -> 49.691219 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 69.306735 ns -> 49.691219 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 69.306735 ns -> 49.691219 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 69.306735 ns -> 49.691219 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +69.31 ns (-19.62 ns) + + +fltx matrix_vector_4x4 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 69.306735 ns -> 49.691219 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 69.306735 ns -> 49.691219 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 69.306735 ns -> 49.691219 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +horner_polynomial + +fltx horner_polynomial +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 174.37549 ns -> 98.520878 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 174.37549 ns -> 98.520878 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 174.37549 ns -> 98.520878 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 174.37549 ns -> 98.520878 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +174.4 ns (-75.85 ns) + + +fltx horner_polynomial +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 174.37549 ns -> 98.520878 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 174.37549 ns -> 98.520878 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 174.37549 ns -> 98.520878 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +newton_root + +fltx newton_root +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 39.891933 ns -> 30.129882 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 39.891933 ns -> 30.129882 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 39.891933 ns -> 30.129882 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 39.891933 ns -> 30.129882 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +39.89 ns (-9.76 ns) + + +fltx newton_root +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 39.891933 ns -> 30.129882 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 39.891933 ns -> 30.129882 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 39.891933 ns -> 30.129882 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +log_sum_exp + +fltx log_sum_exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 979.902184 ns -> 965.639013 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 979.902184 ns -> 965.639013 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 979.902184 ns -> 965.639013 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 979.902184 ns -> 965.639013 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +979.9 ns (-14.26 ns) + + +fltx log_sum_exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 979.902184 ns -> 965.639013 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 979.902184 ns -> 965.639013 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 979.902184 ns -> 965.639013 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +haversine + +fltx haversine +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 571.37633 ns -> 551.58782 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 571.37633 ns -> 551.58782 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 571.37633 ns -> 551.58782 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 571.37633 ns -> 551.58782 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +571.4 ns (-19.79 ns) + + +fltx haversine +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 571.37633 ns -> 551.58782 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 571.37633 ns -> 551.58782 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 571.37633 ns -> 551.58782 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deltas: green improves under fast-math; red regresses. + diff --git a/validation/metrics/generated/profile_comparison/wasm32_wasm32_Emscripten_f256_strict_fastmath_comp.svg b/validation/metrics/generated/profile_comparison/wasm32_wasm32_Emscripten_f256_strict_fastmath_comp.svg new file mode 100644 index 0000000..11131db --- /dev/null +++ b/validation/metrics/generated/profile_comparison/wasm32_wasm32_Emscripten_f256_strict_fastmath_comp.svg @@ -0,0 +1,9359 @@ + + + + +f256 strict vs consumer fast-math — WebAssembly / wasm32 / Clang (Emscripten) +Strict first; deltas are fast-math - strict. Accuracy excludes the separate subnormal domain. + +operation + +bl::f256 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + +Arithmetic + +add + +fltx add +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.155579 ns -> 10.074552 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +226.0 + + +fltx add +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.155579 ns -> 10.074552 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +215.3 + + +fltx add +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.155579 ns -> 10.074552 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +1/1 + + +fltx add +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.155579 ns -> 10.074552 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +10.16 ns (-0.081 ns) + + +fltx add +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.155579 ns -> 10.074552 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +Both (-Inf -NaN) + + +fltx add +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.155579 ns -> 10.074552 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +✗ + + +fltx add +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.155579 ns -> 10.074552 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +✓ + + +subtract + +fltx subtract +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 10.070246 ns -> 10.183993 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +226.1 + + +fltx subtract +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 10.070246 ns -> 10.183993 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +215.2 + + +fltx subtract +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 10.070246 ns -> 10.183993 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +1/1 + + +fltx subtract +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 10.070246 ns -> 10.183993 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +10.07 ns (+0.114 ns) + + +fltx subtract +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 10.070246 ns -> 10.183993 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +Both (-Inf -NaN) + + +fltx subtract +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 10.070246 ns -> 10.183993 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +✗ + + +fltx subtract +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 10.070246 ns -> 10.183993 ns +special values: Both -> No +signed zero: no -> no +subnormal support: yes -> yes + +✓ + + +multiply + +fltx multiply +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 24.861925 ns -> 30.540161 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +220.0 + + +fltx multiply +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 24.861925 ns -> 30.540161 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +215.2 + + +fltx multiply +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 24.861925 ns -> 30.540161 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +1/1 + + +fltx multiply +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 24.861925 ns -> 30.540161 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +24.86 ns (+5.68 ns) + + +fltx multiply +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 24.861925 ns -> 30.540161 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +Both (-Inf) + + +fltx multiply +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 24.861925 ns -> 30.540161 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +✓ (✗) + + +fltx multiply +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 24.861925 ns -> 30.540161 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +✓ + + +divide + +fltx divide +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 91.455078 ns -> 91.736654 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: yes -> yes + +219.2 + + +fltx divide +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 91.455078 ns -> 91.736654 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: yes -> yes + +214.8 + + +fltx divide +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 91.455078 ns -> 91.736654 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx divide +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 91.455078 ns -> 91.736654 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: yes -> yes + +91.46 ns (+0.282 ns) + + +fltx divide +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 91.455078 ns -> 91.736654 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: yes -> yes + +Both (-Inf -NaN) + + +fltx divide +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 91.455078 ns -> 91.736654 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx divide +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 91.455078 ns -> 91.736654 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + + +IO + +to_string + +fltx to_string +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 452.207856 ns -> 407.772627 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.4 + + +fltx to_string +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 452.207856 ns -> 407.772627 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.0 + + +fltx to_string +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 452.207856 ns -> 407.772627 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_string +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 452.207856 ns -> 407.772627 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +452.2 ns (-44.44 ns) + + +fltx to_string +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 452.207856 ns -> 407.772627 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_string +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 452.207856 ns -> 407.772627 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_string +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 452.207856 ns -> 407.772627 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +to_chars + +fltx to_chars +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 398.892413 ns -> 371.082378 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.4 + + +fltx to_chars +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 398.892413 ns -> 371.082378 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.0 + + +fltx to_chars +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 398.892413 ns -> 371.082378 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_chars +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 398.892413 ns -> 371.082378 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +398.9 ns (-27.81 ns) + + +fltx to_chars +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 398.892413 ns -> 371.082378 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_chars +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 398.892413 ns -> 371.082378 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_chars +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 398.892413 ns -> 371.082378 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +parse + +fltx parse +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729662732 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 458.316663 ns -> 554.891437 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +219.7 (+0.000171) + + +fltx parse +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729662732 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 458.316663 ns -> 554.891437 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +212.0 + + +fltx parse +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729662732 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 458.316663 ns -> 554.891437 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx parse +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729662732 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 458.316663 ns -> 554.891437 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +458.3 ns (+96.57 ns) + + +fltx parse +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729662732 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 458.316663 ns -> 554.891437 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx parse +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729662732 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 458.316663 ns -> 554.891437 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx parse +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729662732 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 458.316663 ns -> 554.891437 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Rounding + +floor + +fltx floor +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.990982 ns -> 0.941429 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.990982 ns -> 0.941429 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.990982 ns -> 0.941429 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx floor +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.990982 ns -> 0.941429 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +0.991 ns (-0.050 ns) + + +fltx floor +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.990982 ns -> 0.941429 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx floor +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.990982 ns -> 0.941429 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx floor +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.990982 ns -> 0.941429 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ceil + +fltx ceil +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.993219 ns -> 0.941186 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ceil +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.993219 ns -> 0.941186 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ceil +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.993219 ns -> 0.941186 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ceil +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.993219 ns -> 0.941186 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +0.993 ns (-0.052 ns) + + +fltx ceil +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.993219 ns -> 0.941186 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx ceil +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.993219 ns -> 0.941186 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ceil +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.993219 ns -> 0.941186 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +trunc + +fltx trunc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.898633 ns -> 2.869931 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx trunc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.898633 ns -> 2.869931 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx trunc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.898633 ns -> 2.869931 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx trunc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.898633 ns -> 2.869931 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2.90 ns (-0.029 ns) + + +fltx trunc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.898633 ns -> 2.869931 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx trunc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.898633 ns -> 2.869931 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx trunc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.898633 ns -> 2.869931 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round + +fltx round +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.179871 ns -> 13.432465 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.179871 ns -> 13.432465 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.179871 ns -> 13.432465 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.179871 ns -> 13.432465 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +12.18 ns (+1.25 ns) + + +fltx round +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.179871 ns -> 13.432465 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.179871 ns -> 13.432465 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.179871 ns -> 13.432465 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +roundeven + +fltx roundeven +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.064173 ns -> 8.162486 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.064173 ns -> 8.162486 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.064173 ns -> 8.162486 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx roundeven +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.064173 ns -> 8.162486 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +8.06 ns (+0.098 ns) + + +fltx roundeven +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.064173 ns -> 8.162486 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx roundeven +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.064173 ns -> 8.162486 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx roundeven +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.064173 ns -> 8.162486 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +lround + +fltx lround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.629689 ns -> 6.7004 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.629689 ns -> 6.7004 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.629689 ns -> 6.7004 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.629689 ns -> 6.7004 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +6.63 ns (+0.071 ns) + + +fltx lround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.629689 ns -> 6.7004 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.629689 ns -> 6.7004 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.629689 ns -> 6.7004 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +llround + +fltx llround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.50047 ns -> 6.521846 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.50047 ns -> 6.521846 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.50047 ns -> 6.521846 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx llround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.50047 ns -> 6.521846 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +6.50 ns (+0.021 ns) + + +fltx llround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.50047 ns -> 6.521846 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.50047 ns -> 6.521846 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.50047 ns -> 6.521846 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +round_decimals + +fltx round_decimals +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 145.74707 ns -> 140.899658 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +220.0 + + +fltx round_decimals +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 145.74707 ns -> 140.899658 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +215.3 + + +fltx round_decimals +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 145.74707 ns -> 140.899658 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_decimals +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 145.74707 ns -> 140.899658 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +145.7 ns (-4.85 ns) + + +fltx round_decimals +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 145.74707 ns -> 140.899658 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx round_decimals +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 145.74707 ns -> 140.899658 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_decimals +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 145.74707 ns -> 140.899658 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round_significant + +fltx round_significant +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 207.988281 ns -> 211.691895 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +229.6 + + +fltx round_significant +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 207.988281 ns -> 211.691895 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +215.1 + + +fltx round_significant +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 207.988281 ns -> 211.691895 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_significant +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 207.988281 ns -> 211.691895 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +208.0 ns (+3.70 ns) + + +fltx round_significant +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 207.988281 ns -> 211.691895 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx round_significant +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 207.988281 ns -> 211.691895 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_significant +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 207.988281 ns -> 211.691895 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Remainders + +fmod + +fltx fmod +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 77.97433 ns -> 75.512695 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +244.0 + + +fltx fmod +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 77.97433 ns -> 75.512695 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +217.7 + + +fltx fmod +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 77.97433 ns -> 75.512695 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx fmod +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 77.97433 ns -> 75.512695 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +77.97 ns (-2.46 ns) + + +fltx fmod +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 77.97433 ns -> 75.512695 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx fmod +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 77.97433 ns -> 75.512695 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmod +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 77.97433 ns -> 75.512695 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remainder + +fltx remainder +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 105.60928 ns -> 103.171503 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remainder +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 105.60928 ns -> 103.171503 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remainder +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 105.60928 ns -> 103.171503 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remainder +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 105.60928 ns -> 103.171503 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +105.6 ns (-2.44 ns) + + +fltx remainder +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 105.60928 ns -> 103.171503 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx remainder +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 105.60928 ns -> 103.171503 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remainder +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 105.60928 ns -> 103.171503 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remquo + +fltx remquo +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 104.358803 ns -> 101.808966 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 104.358803 ns -> 101.808966 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 104.358803 ns -> 101.808966 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remquo +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 104.358803 ns -> 101.808966 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.4 ns (-2.55 ns) + + +fltx remquo +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 104.358803 ns -> 101.808966 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx remquo +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 104.358803 ns -> 101.808966 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remquo +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 104.358803 ns -> 101.808966 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Float Utils + +abs + +fltx abs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.211385 ns -> 3.338686 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx abs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.211385 ns -> 3.338686 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx abs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.211385 ns -> 3.338686 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx abs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.211385 ns -> 3.338686 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +3.21 ns (+0.127 ns) + + +fltx abs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.211385 ns -> 3.338686 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +Both (-Inf) + + +fltx abs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.211385 ns -> 3.338686 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx abs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.211385 ns -> 3.338686 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fabs + +fltx fabs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.094694 ns -> 3.214951 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fabs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.094694 ns -> 3.214951 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fabs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.094694 ns -> 3.214951 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx fabs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.094694 ns -> 3.214951 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +3.09 ns (+0.120 ns) + + +fltx fabs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.094694 ns -> 3.214951 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx fabs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.094694 ns -> 3.214951 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fabs +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.094694 ns -> 3.214951 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fma + +fltx fma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 31.48298 ns -> 28.236258 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +229.7 + + +fltx fma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 31.48298 ns -> 28.236258 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +215.1 + + +fltx fma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 31.48298 ns -> 28.236258 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +3/3 + + +fltx fma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 31.48298 ns -> 28.236258 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +31.48 ns (-3.25 ns) + + +fltx fma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 31.48298 ns -> 28.236258 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx fma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 31.48298 ns -> 28.236258 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx fma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 31.48298 ns -> 28.236258 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + +recip + +fltx recip +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.927920075 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 87.694336 ns -> 89.907837 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: - -> - + +217.9 (+0.003) + + +fltx recip +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.927920075 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 87.694336 ns -> 89.907837 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: - -> - + +214.6 + + +fltx recip +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.927920075 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 87.694336 ns -> 89.907837 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: - -> - + +2/2 + + +fltx recip +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.927920075 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 87.694336 ns -> 89.907837 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: - -> - + +87.69 ns (+2.21 ns) + + +fltx recip +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.927920075 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 87.694336 ns -> 89.907837 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: - -> - + +Both (-Inf) + + +fltx recip +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.927920075 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 87.694336 ns -> 89.907837 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: - -> - + +✓ (✗) + + +fltx recip +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.927920075 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 87.694336 ns -> 89.907837 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: - -> - + +- + + +fmin + +fltx fmin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.167173 ns -> 1.171445 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.167173 ns -> 1.171445 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.167173 ns -> 1.171445 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.167173 ns -> 1.171445 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +1.17 ns (+0.004 ns) + + +fltx fmin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.167173 ns -> 1.171445 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx fmin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.167173 ns -> 1.171445 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.167173 ns -> 1.171445 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fmax + +fltx fmax +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.180177 ns -> 1.173223 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.180177 ns -> 1.173223 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.180177 ns -> 1.173223 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmax +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.180177 ns -> 1.173223 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +1.18 ns (-0.007 ns) + + +fltx fmax +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.180177 ns -> 1.173223 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx fmax +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.180177 ns -> 1.173223 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmax +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.180177 ns -> 1.173223 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fdim + +fltx fdim +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 7.061867 ns -> 6.046627 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fdim +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 7.061867 ns -> 6.046627 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fdim +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 7.061867 ns -> 6.046627 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fdim +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 7.061867 ns -> 6.046627 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +7.06 ns (-1.02 ns) + + +fltx fdim +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 7.061867 ns -> 6.046627 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx fdim +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 7.061867 ns -> 6.046627 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fdim +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 7.061867 ns -> 6.046627 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +copysign + +fltx copysign +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.698238 ns -> 0.693467 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.698238 ns -> 0.693467 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.698238 ns -> 0.693467 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx copysign +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.698238 ns -> 0.693467 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +0.698 ns (-0.005 ns) + + +fltx copysign +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.698238 ns -> 0.693467 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx copysign +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.698238 ns -> 0.693467 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx copysign +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.698238 ns -> 0.693467 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ldexp + +fltx ldexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.942383 ns -> 7.562585 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.942383 ns -> 7.562585 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.942383 ns -> 7.562585 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ldexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.942383 ns -> 7.562585 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2.94 ns (+4.62 ns) + + +fltx ldexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.942383 ns -> 7.562585 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx ldexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.942383 ns -> 7.562585 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ldexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.942383 ns -> 7.562585 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbn + +fltx scalbn +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.957711 ns -> 7.18811 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.957711 ns -> 7.18811 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.957711 ns -> 7.18811 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbn +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.957711 ns -> 7.18811 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2.96 ns (+4.23 ns) + + +fltx scalbn +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.957711 ns -> 7.18811 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx scalbn +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.957711 ns -> 7.18811 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbn +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.957711 ns -> 7.18811 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbln + +fltx scalbln +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.970028 ns -> 7.202947 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.970028 ns -> 7.202947 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.970028 ns -> 7.202947 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbln +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.970028 ns -> 7.202947 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2.97 ns (+4.23 ns) + + +fltx scalbln +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.970028 ns -> 7.202947 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx scalbln +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.970028 ns -> 7.202947 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbln +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.970028 ns -> 7.202947 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +frexp + +fltx frexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.405599 ns -> 9.133301 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx frexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.405599 ns -> 9.133301 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx frexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.405599 ns -> 9.133301 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx frexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.405599 ns -> 9.133301 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +12.41 ns (-3.27 ns) + + +fltx frexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.405599 ns -> 9.133301 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx frexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.405599 ns -> 9.133301 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx frexp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.405599 ns -> 9.133301 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +modf + +fltx modf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 13.863678 ns -> 13.089097 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 13.863678 ns -> 13.089097 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 13.863678 ns -> 13.089097 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx modf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 13.863678 ns -> 13.089097 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +13.86 ns (-0.775 ns) + + +fltx modf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 13.863678 ns -> 13.089097 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx modf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 13.863678 ns -> 13.089097 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx modf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 13.863678 ns -> 13.089097 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ilogb + +fltx ilogb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.344994 ns -> 1.344642 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.344994 ns -> 1.344642 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.344994 ns -> 1.344642 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx ilogb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.344994 ns -> 1.344642 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1.34 ns (-0.000 ns) + + +fltx ilogb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.344994 ns -> 1.344642 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.344994 ns -> 1.344642 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.344994 ns -> 1.344642 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +logb + +fltx logb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.257671 ns -> 1.258774 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.257671 ns -> 1.258774 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.257671 ns -> 1.258774 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx logb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.257671 ns -> 1.258774 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +1.26 ns (+0.001 ns) + + +fltx logb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.257671 ns -> 1.258774 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx logb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.257671 ns -> 1.258774 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx logb +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.257671 ns -> 1.258774 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +nextafter + +fltx nextafter +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.699387 ns -> 6.829317 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.699387 ns -> 6.829317 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.699387 ns -> 6.829317 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.699387 ns -> 6.829317 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +6.70 ns (+0.130 ns) + + +fltx nextafter +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.699387 ns -> 6.829317 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.699387 ns -> 6.829317 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.699387 ns -> 6.829317 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +nexttoward + +fltx nexttoward +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.697026 ns -> 6.810861 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.697026 ns -> 6.810861 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.697026 ns -> 6.810861 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.697026 ns -> 6.810861 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +6.70 ns (+0.114 ns) + + +fltx nexttoward +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.697026 ns -> 6.810861 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.697026 ns -> 6.810861 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.697026 ns -> 6.810861 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Roots & powers + +sqr + +fltx sqr +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 22.543213 ns -> 23.358561 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.1 + + +fltx sqr +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 22.543213 ns -> 23.358561 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +215.3 + + +fltx sqr +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 22.543213 ns -> 23.358561 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sqr +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 22.543213 ns -> 23.358561 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +22.54 ns (+0.815 ns) + + +fltx sqr +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 22.543213 ns -> 23.358561 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sqr +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 22.543213 ns -> 23.358561 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sqr +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 22.543213 ns -> 23.358561 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +sqrt + +fltx sqrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 119.519043 ns -> 118.790283 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +217.8 + + +fltx sqrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 119.519043 ns -> 118.790283 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +209.6 + + +fltx sqrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 119.519043 ns -> 118.790283 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +3/3 + + +fltx sqrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 119.519043 ns -> 118.790283 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +119.5 ns (-0.729 ns) + + +fltx sqrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 119.519043 ns -> 118.790283 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +Both (-Inf) + + +fltx sqrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 119.519043 ns -> 118.790283 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx sqrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 119.519043 ns -> 118.790283 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +cbrt + +fltx cbrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.28474431 -> 219.28474431 +worst bits: 214.867489 -> 214.867489 +domains: 2/2 -> 2/2 +time: 351.210938 ns -> 351.226562 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +219.3 + + +fltx cbrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.28474431 -> 219.28474431 +worst bits: 214.867489 -> 214.867489 +domains: 2/2 -> 2/2 +time: 351.210938 ns -> 351.226562 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +214.9 + + +fltx cbrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.28474431 -> 219.28474431 +worst bits: 214.867489 -> 214.867489 +domains: 2/2 -> 2/2 +time: 351.210938 ns -> 351.226562 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx cbrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.28474431 -> 219.28474431 +worst bits: 214.867489 -> 214.867489 +domains: 2/2 -> 2/2 +time: 351.210938 ns -> 351.226562 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +351.2 ns (+0.016 ns) + + +fltx cbrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.28474431 -> 219.28474431 +worst bits: 214.867489 -> 214.867489 +domains: 2/2 -> 2/2 +time: 351.210938 ns -> 351.226562 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx cbrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.28474431 -> 219.28474431 +worst bits: 214.867489 -> 214.867489 +domains: 2/2 -> 2/2 +time: 351.210938 ns -> 351.226562 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx cbrt +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.28474431 -> 219.28474431 +worst bits: 214.867489 -> 214.867489 +domains: 2/2 -> 2/2 +time: 351.210938 ns -> 351.226562 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +hypot + +fltx hypot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.930731323 -> 229.931215146 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 171.974534 ns -> 173.40933 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +229.9 (+0.000484) + + +fltx hypot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.930731323 -> 229.931215146 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 171.974534 ns -> 173.40933 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +213.9 + + +fltx hypot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.930731323 -> 229.931215146 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 171.974534 ns -> 173.40933 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx hypot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.930731323 -> 229.931215146 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 171.974534 ns -> 173.40933 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +172.0 ns (+1.43 ns) + + +fltx hypot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.930731323 -> 229.931215146 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 171.974534 ns -> 173.40933 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx hypot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.930731323 -> 229.931215146 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 171.974534 ns -> 173.40933 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx hypot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.930731323 -> 229.931215146 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 171.974534 ns -> 173.40933 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +pow + +fltx pow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2689.876302 ns -> 2626.790365 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +216.8 + + +fltx pow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2689.876302 ns -> 2626.790365 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +211.1 + + +fltx pow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2689.876302 ns -> 2626.790365 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx pow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2689.876302 ns -> 2626.790365 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +2,690 ns (-63.09 ns) + + +fltx pow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2689.876302 ns -> 2626.790365 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx pow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2689.876302 ns -> 2626.790365 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx pow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2689.876302 ns -> 2626.790365 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ipow + +fltx ipow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 109.827303 ns -> 109.857856 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +217.2 + + +fltx ipow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 109.827303 ns -> 109.857856 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +213.7 + + +fltx ipow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 109.827303 ns -> 109.857856 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +2/2 + + +fltx ipow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 109.827303 ns -> 109.857856 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +109.8 ns (+0.031 ns) + + +fltx ipow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 109.827303 ns -> 109.857856 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx ipow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 109.827303 ns -> 109.857856 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx ipow +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 109.827303 ns -> 109.857856 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + + +Exponentials + +exp + +fltx exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.736722 -> 216.4305135 +worst bits: 208.947269 -> 209.697661 +domains: 2/2 -> 2/2 +time: 1031.054688 ns -> 1040.917969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +216.7 (-0.3) + + +fltx exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.736722 -> 216.4305135 +worst bits: 208.947269 -> 209.697661 +domains: 2/2 -> 2/2 +time: 1031.054688 ns -> 1040.917969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +208.9 (+0.8) + + +fltx exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.736722 -> 216.4305135 +worst bits: 208.947269 -> 209.697661 +domains: 2/2 -> 2/2 +time: 1031.054688 ns -> 1040.917969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.736722 -> 216.4305135 +worst bits: 208.947269 -> 209.697661 +domains: 2/2 -> 2/2 +time: 1031.054688 ns -> 1040.917969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,031 ns (+9.86 ns) + + +fltx exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.736722 -> 216.4305135 +worst bits: 208.947269 -> 209.697661 +domains: 2/2 -> 2/2 +time: 1031.054688 ns -> 1040.917969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.736722 -> 216.4305135 +worst bits: 208.947269 -> 209.697661 +domains: 2/2 -> 2/2 +time: 1031.054688 ns -> 1040.917969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.736722 -> 216.4305135 +worst bits: 208.947269 -> 209.697661 +domains: 2/2 -> 2/2 +time: 1031.054688 ns -> 1040.917969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +exp2 + +fltx exp2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 873.730469 ns -> 883.085938 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +218.0 + + +fltx exp2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 873.730469 ns -> 883.085938 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +214.2 + + +fltx exp2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 873.730469 ns -> 883.085938 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 873.730469 ns -> 883.085938 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +873.7 ns (+9.36 ns) + + +fltx exp2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 873.730469 ns -> 883.085938 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx exp2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 873.730469 ns -> 883.085938 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 873.730469 ns -> 883.085938 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +expm1 + +fltx expm1 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.989217153 +worst bits: 207 -> 213.793932 +domains: 2/2 -> 2/2 +time: 1032.971191 ns -> 1030.761719 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +227.2 (+0.8) + + +fltx expm1 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.989217153 +worst bits: 207 -> 213.793932 +domains: 2/2 -> 2/2 +time: 1032.971191 ns -> 1030.761719 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +207.0 (+6.8) + + +fltx expm1 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.989217153 +worst bits: 207 -> 213.793932 +domains: 2/2 -> 2/2 +time: 1032.971191 ns -> 1030.761719 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx expm1 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.989217153 +worst bits: 207 -> 213.793932 +domains: 2/2 -> 2/2 +time: 1032.971191 ns -> 1030.761719 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1,033 ns (-2.21 ns) + + +fltx expm1 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.989217153 +worst bits: 207 -> 213.793932 +domains: 2/2 -> 2/2 +time: 1032.971191 ns -> 1030.761719 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx expm1 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.989217153 +worst bits: 207 -> 213.793932 +domains: 2/2 -> 2/2 +time: 1032.971191 ns -> 1030.761719 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx expm1 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.989217153 +worst bits: 207 -> 213.793932 +domains: 2/2 -> 2/2 +time: 1032.971191 ns -> 1030.761719 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Logarithms + +log + +fltx log +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.713430044 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1719.101562 ns -> 1726.523438 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.8 (-0.1) + + +fltx log +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.713430044 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1719.101562 ns -> 1726.523438 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +213.3 + + +fltx log +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.713430044 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1719.101562 ns -> 1726.523438 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.713430044 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1719.101562 ns -> 1726.523438 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,719 ns (+7.42 ns) + + +fltx log +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.713430044 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1719.101562 ns -> 1726.523438 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.713430044 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1719.101562 ns -> 1726.523438 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.713430044 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1719.101562 ns -> 1726.523438 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log2 + +fltx log2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.589512067 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1771.113281 ns -> 1755.761719 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +218.6 (-0.024) + + +fltx log2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.589512067 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1771.113281 ns -> 1755.761719 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +213.2 + + +fltx log2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.589512067 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1771.113281 ns -> 1755.761719 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.589512067 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1771.113281 ns -> 1755.761719 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +1,771 ns (-15.35 ns) + + +fltx log2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.589512067 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1771.113281 ns -> 1755.761719 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx log2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.589512067 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1771.113281 ns -> 1755.761719 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.589512067 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1771.113281 ns -> 1755.761719 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +log10 + +fltx log10 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.407206146 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1766.210938 ns -> 1777.480469 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +217.4 (-0.041) + + +fltx log10 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.407206146 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1766.210938 ns -> 1777.480469 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +213.3 + + +fltx log10 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.407206146 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1766.210938 ns -> 1777.480469 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log10 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.407206146 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1766.210938 ns -> 1777.480469 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +1,766 ns (+11.27 ns) + + +fltx log10 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.407206146 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1766.210938 ns -> 1777.480469 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx log10 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.407206146 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1766.210938 ns -> 1777.480469 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log10 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.407206146 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1766.210938 ns -> 1777.480469 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +log1p + +fltx log1p +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 227.627482935 +worst bits: 207 -> 214.020088 +domains: 2/2 -> 2/2 +time: 1756.621094 ns -> 1766.777344 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +226.8 (+0.8) + + +fltx log1p +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 227.627482935 +worst bits: 207 -> 214.020088 +domains: 2/2 -> 2/2 +time: 1756.621094 ns -> 1766.777344 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +207.0 (+7.0) + + +fltx log1p +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 227.627482935 +worst bits: 207 -> 214.020088 +domains: 2/2 -> 2/2 +time: 1756.621094 ns -> 1766.777344 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx log1p +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 227.627482935 +worst bits: 207 -> 214.020088 +domains: 2/2 -> 2/2 +time: 1756.621094 ns -> 1766.777344 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1,757 ns (+10.16 ns) + + +fltx log1p +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 227.627482935 +worst bits: 207 -> 214.020088 +domains: 2/2 -> 2/2 +time: 1756.621094 ns -> 1766.777344 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx log1p +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 227.627482935 +worst bits: 207 -> 214.020088 +domains: 2/2 -> 2/2 +time: 1756.621094 ns -> 1766.777344 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx log1p +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 227.627482935 +worst bits: 207 -> 214.020088 +domains: 2/2 -> 2/2 +time: 1756.621094 ns -> 1766.777344 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Trigonometric + +sin + +fltx sin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 887.879774 ns -> 851.708984 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +222.3 + + +fltx sin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 887.879774 ns -> 851.708984 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +202.9 + + +fltx sin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 887.879774 ns -> 851.708984 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx sin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 887.879774 ns -> 851.708984 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +887.9 ns (-36.17 ns) + + +fltx sin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 887.879774 ns -> 851.708984 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx sin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 887.879774 ns -> 851.708984 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 887.879774 ns -> 851.708984 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cos + +fltx cos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 861.611328 ns -> 874.697266 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +226.8 + + +fltx cos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 861.611328 ns -> 874.697266 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +208.7 + + +fltx cos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 861.611328 ns -> 874.697266 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx cos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 861.611328 ns -> 874.697266 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +861.6 ns (+13.09 ns) + + +fltx cos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 861.611328 ns -> 874.697266 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx cos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 861.611328 ns -> 874.697266 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 861.611328 ns -> 874.697266 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +sincos + +fltx sincos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1061.682129 ns -> 1035.229492 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1061.682129 ns -> 1035.229492 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1061.682129 ns -> 1035.229492 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1061.682129 ns -> 1035.229492 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1,062 ns (-26.45 ns) + + +fltx sincos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1061.682129 ns -> 1035.229492 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1061.682129 ns -> 1035.229492 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1061.682129 ns -> 1035.229492 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +tan + +fltx tan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1122.644043 ns -> 1119.030762 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +217.1 + + +fltx tan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1122.644043 ns -> 1119.030762 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +202.9 + + +fltx tan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1122.644043 ns -> 1119.030762 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx tan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1122.644043 ns -> 1119.030762 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1,123 ns (-3.61 ns) + + +fltx tan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1122.644043 ns -> 1119.030762 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx tan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1122.644043 ns -> 1119.030762 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1122.644043 ns -> 1119.030762 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asin + +fltx asin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1337.760417 ns -> 1343.277995 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +217.9 + + +fltx asin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1337.760417 ns -> 1343.277995 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +214.4 + + +fltx asin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1337.760417 ns -> 1343.277995 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1337.760417 ns -> 1343.277995 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1,338 ns (+5.52 ns) + + +fltx asin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1337.760417 ns -> 1343.277995 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx asin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1337.760417 ns -> 1343.277995 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asin +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1337.760417 ns -> 1343.277995 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acos + +fltx acos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1382.991536 ns -> 1335.560826 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +216.0 + + +fltx acos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1382.991536 ns -> 1335.560826 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +192.5 + + +fltx acos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1382.991536 ns -> 1335.560826 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1382.991536 ns -> 1335.560826 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,383 ns (-47.43 ns) + + +fltx acos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1382.991536 ns -> 1335.560826 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx acos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1382.991536 ns -> 1335.560826 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acos +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1382.991536 ns -> 1335.560826 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +atan + +fltx atan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 880.642361 ns -> 906.08724 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +218.1 + + +fltx atan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 880.642361 ns -> 906.08724 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +214.7 + + +fltx atan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 880.642361 ns -> 906.08724 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 880.642361 ns -> 906.08724 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +880.6 ns (+25.44 ns) + + +fltx atan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 880.642361 ns -> 906.08724 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx atan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 880.642361 ns -> 906.08724 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 880.642361 ns -> 906.08724 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +atan2 + +fltx atan2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 934.309896 ns -> 950.651042 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +217.9 + + +fltx atan2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 934.309896 ns -> 950.651042 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +214.3 + + +fltx atan2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 934.309896 ns -> 950.651042 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx atan2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 934.309896 ns -> 950.651042 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +934.3 ns (+16.34 ns) + + +fltx atan2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 934.309896 ns -> 950.651042 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx atan2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 934.309896 ns -> 950.651042 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan2 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 934.309896 ns -> 950.651042 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Hyperbolic + +sinh + +fltx sinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1332.438151 ns -> 1293.863932 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +217.0 + + +fltx sinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1332.438151 ns -> 1293.863932 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +213.8 + + +fltx sinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1332.438151 ns -> 1293.863932 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1332.438151 ns -> 1293.863932 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1,332 ns (-38.57 ns) + + +fltx sinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1332.438151 ns -> 1293.863932 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx sinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1332.438151 ns -> 1293.863932 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1332.438151 ns -> 1293.863932 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cosh + +fltx cosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1325.895182 ns -> 1289.355469 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.5 + + +fltx cosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1325.895182 ns -> 1289.355469 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +214.2 + + +fltx cosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1325.895182 ns -> 1289.355469 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx cosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1325.895182 ns -> 1289.355469 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,326 ns (-36.54 ns) + + +fltx cosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1325.895182 ns -> 1289.355469 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1325.895182 ns -> 1289.355469 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1325.895182 ns -> 1289.355469 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +tanh + +fltx tanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1277.455357 ns -> 1261.369978 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +219.1 + + +fltx tanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1277.455357 ns -> 1261.369978 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +214.0 + + +fltx tanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1277.455357 ns -> 1261.369978 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx tanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1277.455357 ns -> 1261.369978 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +1,277 ns (-16.09 ns) + + +fltx tanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1277.455357 ns -> 1261.369978 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx tanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1277.455357 ns -> 1261.369978 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1277.455357 ns -> 1261.369978 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asinh + +fltx asinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2636.523438 ns -> 2643.391927 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +217.2 + + +fltx asinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2636.523438 ns -> 2643.391927 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +213.0 + + +fltx asinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2636.523438 ns -> 2643.391927 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2636.523438 ns -> 2643.391927 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2,637 ns (+6.87 ns) + + +fltx asinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2636.523438 ns -> 2643.391927 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx asinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2636.523438 ns -> 2643.391927 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asinh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2636.523438 ns -> 2643.391927 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acosh + +fltx acosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2438.574219 ns -> 2423.681641 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.7 + + +fltx acosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2438.574219 ns -> 2423.681641 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +213.7 + + +fltx acosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2438.574219 ns -> 2423.681641 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2438.574219 ns -> 2423.681641 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2,439 ns (-14.89 ns) + + +fltx acosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2438.574219 ns -> 2423.681641 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx acosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2438.574219 ns -> 2423.681641 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acosh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2438.574219 ns -> 2423.681641 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +atanh + +fltx atanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2280.517578 ns -> 2273.55957 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +218.3 + + +fltx atanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2280.517578 ns -> 2273.55957 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +213.3 + + +fltx atanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2280.517578 ns -> 2273.55957 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2280.517578 ns -> 2273.55957 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2,281 ns (-6.96 ns) + + +fltx atanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2280.517578 ns -> 2273.55957 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx atanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2280.517578 ns -> 2273.55957 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atanh +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2280.517578 ns -> 2273.55957 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Special + +erfc + +fltx erfc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 10046.09375 ns -> 14825 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +208.2 + + +fltx erfc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 10046.09375 ns -> 14825 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +189.8 + + +fltx erfc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 10046.09375 ns -> 14825 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx erfc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 10046.09375 ns -> 14825 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +10,046 ns (+4,779 ns) + + +fltx erfc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 10046.09375 ns -> 14825 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx erfc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 10046.09375 ns -> 14825 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx erfc +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 10046.09375 ns -> 14825 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +erf + +fltx erf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 15377.34375 ns -> 15769.53125 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +212.8 + + +fltx erf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 15377.34375 ns -> 15769.53125 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +196.8 + + +fltx erf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 15377.34375 ns -> 15769.53125 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx erf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 15377.34375 ns -> 15769.53125 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +15,377 ns (+392.2 ns) + + +fltx erf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 15377.34375 ns -> 15769.53125 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx erf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 15377.34375 ns -> 15769.53125 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx erf +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 15377.34375 ns -> 15769.53125 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +tgamma + +fltx tgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 9843.75 ns -> 11903.90625 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +209.0 + + +fltx tgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 9843.75 ns -> 11903.90625 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +202.5 + + +fltx tgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 9843.75 ns -> 11903.90625 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx tgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 9843.75 ns -> 11903.90625 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +9,844 ns (+2,060 ns) + + +fltx tgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 9843.75 ns -> 11903.90625 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx tgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 9843.75 ns -> 11903.90625 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx tgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 9843.75 ns -> 11903.90625 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +lgamma + +fltx lgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 10612.5 ns -> 11231.25 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +211.9 + + +fltx lgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 10612.5 ns -> 11231.25 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +199.2 + + +fltx lgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 10612.5 ns -> 11231.25 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 10612.5 ns -> 11231.25 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +10,612 ns (+618.8 ns) + + +fltx lgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 10612.5 ns -> 11231.25 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx lgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 10612.5 ns -> 11231.25 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lgamma +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 10612.5 ns -> 11231.25 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + + +Comparisons + +equal + +fltx equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.789768 ns -> 0.779622 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.789768 ns -> 0.779622 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.789768 ns -> 0.779622 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.789768 ns -> 0.779622 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.790 ns (-0.010 ns) + + +fltx equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.789768 ns -> 0.779622 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.789768 ns -> 0.779622 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.789768 ns -> 0.779622 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +not_equal + +fltx not_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.734721 ns -> 0.79349 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.734721 ns -> 0.79349 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.734721 ns -> 0.79349 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx not_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.734721 ns -> 0.79349 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.735 ns (+0.059 ns) + + +fltx not_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.734721 ns -> 0.79349 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx not_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.734721 ns -> 0.79349 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx not_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.734721 ns -> 0.79349 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less + +fltx less +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.318947 ns -> 1.594211 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.318947 ns -> 1.594211 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.318947 ns -> 1.594211 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.318947 ns -> 1.594211 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.32 ns (+0.275 ns) + + +fltx less +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.318947 ns -> 1.594211 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.318947 ns -> 1.594211 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.318947 ns -> 1.594211 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater + +fltx greater +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.585869 ns -> 1.604681 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.585869 ns -> 1.604681 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.585869 ns -> 1.604681 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.585869 ns -> 1.604681 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.59 ns (+0.019 ns) + + +fltx greater +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.585869 ns -> 1.604681 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.585869 ns -> 1.604681 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.585869 ns -> 1.604681 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less_equal + +fltx less_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.256546 ns -> 1.629858 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.256546 ns -> 1.629858 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.256546 ns -> 1.629858 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.256546 ns -> 1.629858 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.26 ns (+0.373 ns) + + +fltx less_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.256546 ns -> 1.629858 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.256546 ns -> 1.629858 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.256546 ns -> 1.629858 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater_equal + +fltx greater_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.361888 ns -> 1.599876 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.361888 ns -> 1.599876 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.361888 ns -> 1.599876 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.361888 ns -> 1.599876 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.36 ns (+0.238 ns) + + +fltx greater_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.361888 ns -> 1.599876 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.361888 ns -> 1.599876 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater_equal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.361888 ns -> 1.599876 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + + +Random + +uniform_real + +fltx uniform_real +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 11.010469 ns -> 11.405088 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 11.010469 ns -> 11.405088 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 11.010469 ns -> 11.405088 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 11.010469 ns -> 11.405088 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +11.01 ns (+0.395 ns) + + +fltx uniform_real +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 11.010469 ns -> 11.405088 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 11.010469 ns -> 11.405088 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 11.010469 ns -> 11.405088 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +normal + +fltx normal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 271.406578 ns -> 265.853818 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 271.406578 ns -> 265.853818 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 271.406578 ns -> 265.853818 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 271.406578 ns -> 265.853818 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +271.4 ns (-5.55 ns) + + +fltx normal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 271.406578 ns -> 265.853818 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 271.406578 ns -> 265.853818 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 271.406578 ns -> 265.853818 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Mixed Workloads + +product_sum + +fltx product_sum +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 47.814387 ns -> 49.108615 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 47.814387 ns -> 49.108615 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 47.814387 ns -> 49.108615 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 47.814387 ns -> 49.108615 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +47.81 ns (+1.29 ns) + + +fltx product_sum +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 47.814387 ns -> 49.108615 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 47.814387 ns -> 49.108615 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 47.814387 ns -> 49.108615 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +chained_arithmetic + +fltx chained_arithmetic +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 142.700717 ns -> 142.109375 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 142.700717 ns -> 142.109375 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 142.700717 ns -> 142.109375 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 142.700717 ns -> 142.109375 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +142.7 ns (-0.591 ns) + + +fltx chained_arithmetic +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 142.700717 ns -> 142.109375 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 142.700717 ns -> 142.109375 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 142.700717 ns -> 142.109375 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +affine_trig + +fltx affine_trig +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1793.419894 ns -> 1799.587674 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1793.419894 ns -> 1799.587674 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1793.419894 ns -> 1799.587674 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1793.419894 ns -> 1799.587674 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1,793 ns (+6.17 ns) + + +fltx affine_trig +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1793.419894 ns -> 1799.587674 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1793.419894 ns -> 1799.587674 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1793.419894 ns -> 1799.587674 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +mandelbrot + +fltx mandelbrot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 110.988956 ns -> 127.581398 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 110.988956 ns -> 127.581398 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 110.988956 ns -> 127.581398 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 110.988956 ns -> 127.581398 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +111.0 ns (+16.59 ns) + + +fltx mandelbrot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 110.988956 ns -> 127.581398 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 110.988956 ns -> 127.581398 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 110.988956 ns -> 127.581398 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +matrix_vector_4x4 + +fltx matrix_vector_4x4 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 536.458333 ns -> 560.712449 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 536.458333 ns -> 560.712449 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 536.458333 ns -> 560.712449 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 536.458333 ns -> 560.712449 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +536.5 ns (+24.25 ns) + + +fltx matrix_vector_4x4 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 536.458333 ns -> 560.712449 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 536.458333 ns -> 560.712449 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 536.458333 ns -> 560.712449 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +horner_polynomial + +fltx horner_polynomial +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 485.67514 ns -> 473.25494 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 485.67514 ns -> 473.25494 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 485.67514 ns -> 473.25494 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 485.67514 ns -> 473.25494 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +485.7 ns (-12.42 ns) + + +fltx horner_polynomial +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 485.67514 ns -> 473.25494 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 485.67514 ns -> 473.25494 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 485.67514 ns -> 473.25494 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +newton_root + +fltx newton_root +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 237.98945 ns -> 250.279107 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 237.98945 ns -> 250.279107 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 237.98945 ns -> 250.279107 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 237.98945 ns -> 250.279107 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +238.0 ns (+12.29 ns) + + +fltx newton_root +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 237.98945 ns -> 250.279107 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 237.98945 ns -> 250.279107 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 237.98945 ns -> 250.279107 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +log_sum_exp + +fltx log_sum_exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8837.5 ns -> 9212.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8837.5 ns -> 9212.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8837.5 ns -> 9212.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8837.5 ns -> 9212.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +8,838 ns (+375.0 ns) + + +fltx log_sum_exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8837.5 ns -> 9212.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8837.5 ns -> 9212.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8837.5 ns -> 9212.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +haversine + +fltx haversine +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4755.869565 ns -> 4750 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4755.869565 ns -> 4750 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4755.869565 ns -> 4750 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4755.869565 ns -> 4750 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +4,756 ns (-5.87 ns) + + +fltx haversine +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4755.869565 ns -> 4750 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4755.869565 ns -> 4750 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 07cb9aa0af7241f981735eab48f97723 +fast-math run: 680cbf9c13134cc08ab2b5bd2bd1191c +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4755.869565 ns -> 4750 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deltas: green improves under fast-math; red regresses. + diff --git a/validation/metrics/generated/profile_comparison/windows_x86_64_ClangCL_f128_strict_fastmath_comp.svg b/validation/metrics/generated/profile_comparison/windows_x86_64_ClangCL_f128_strict_fastmath_comp.svg new file mode 100644 index 0000000..e559f7f --- /dev/null +++ b/validation/metrics/generated/profile_comparison/windows_x86_64_ClangCL_f128_strict_fastmath_comp.svg @@ -0,0 +1,9359 @@ + + + + +f128 strict vs consumer fast-math — Windows / x64 / Clang (clang-cl) +Strict first; deltas are fast-math - strict. Accuracy excludes the separate subnormal domain. + +operation + +bl::f128 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + +Arithmetic + +add + +fltx add +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.878988 ns -> 0.923151 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +119.1 + + +fltx add +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.878988 ns -> 0.923151 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +105.7 + + +fltx add +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.878988 ns -> 0.923151 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +1/1 + + +fltx add +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.878988 ns -> 0.923151 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +1.88 ns (-0.956 ns) + + +fltx add +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.878988 ns -> 0.923151 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +Both (-Inf) + + +fltx add +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.878988 ns -> 0.923151 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +✗ + + +fltx add +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.878988 ns -> 0.923151 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +✓ + + +subtract + +fltx subtract +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.87166 ns -> 0.922846 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +118.9 + + +fltx subtract +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.87166 ns -> 0.922846 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +105.7 + + +fltx subtract +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.87166 ns -> 0.922846 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +1/1 + + +fltx subtract +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.87166 ns -> 0.922846 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +1.87 ns (-0.949 ns) + + +fltx subtract +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.87166 ns -> 0.922846 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +Both (-Inf) + + +fltx subtract +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.87166 ns -> 0.922846 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +✗ + + +fltx subtract +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.87166 ns -> 0.922846 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +✓ + + +multiply + +fltx multiply +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.51721 +worst bits: 105.380753 -> 104.685792 +domains: 1/1 -> 1/1 +time: 1.19705 ns -> 2.488773 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +108.7 (-0.2) + + +fltx multiply +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.51721 +worst bits: 105.380753 -> 104.685792 +domains: 1/1 -> 1/1 +time: 1.19705 ns -> 2.488773 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +105.4 (-0.7) + + +fltx multiply +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.51721 +worst bits: 105.380753 -> 104.685792 +domains: 1/1 -> 1/1 +time: 1.19705 ns -> 2.488773 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +1/1 + + +fltx multiply +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.51721 +worst bits: 105.380753 -> 104.685792 +domains: 1/1 -> 1/1 +time: 1.19705 ns -> 2.488773 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +1.20 ns (+1.29 ns) + + +fltx multiply +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.51721 +worst bits: 105.380753 -> 104.685792 +domains: 1/1 -> 1/1 +time: 1.19705 ns -> 2.488773 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +Both (-Inf) + + +fltx multiply +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.51721 +worst bits: 105.380753 -> 104.685792 +domains: 1/1 -> 1/1 +time: 1.19705 ns -> 2.488773 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +✓ (✗) + + +fltx multiply +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.51721 +worst bits: 105.380753 -> 104.685792 +domains: 1/1 -> 1/1 +time: 1.19705 ns -> 2.488773 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +✓ + + +divide + +fltx divide +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 1.706469 ns -> 1.594951 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +110.9 + + +fltx divide +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 1.706469 ns -> 1.594951 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +105.1 + + +fltx divide +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 1.706469 ns -> 1.594951 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +1/1 + + +fltx divide +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 1.706469 ns -> 1.594951 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +1.71 ns (-0.112 ns) + + +fltx divide +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 1.706469 ns -> 1.594951 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +Both (-Inf) + + +fltx divide +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 1.706469 ns -> 1.594951 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +✓ (✗) + + +fltx divide +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 1.706469 ns -> 1.594951 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +✓ + + + +IO + +to_string + +fltx to_string +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 188.426039 ns -> 186.144995 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +114.0 + + +fltx to_string +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 188.426039 ns -> 186.144995 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.7 + + +fltx to_string +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 188.426039 ns -> 186.144995 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_string +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 188.426039 ns -> 186.144995 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +188.4 ns (-2.28 ns) + + +fltx to_string +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 188.426039 ns -> 186.144995 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_string +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 188.426039 ns -> 186.144995 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_string +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 188.426039 ns -> 186.144995 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +to_chars + +fltx to_chars +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 157.44781 ns -> 154.330324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +114.0 + + +fltx to_chars +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 157.44781 ns -> 154.330324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.7 + + +fltx to_chars +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 157.44781 ns -> 154.330324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_chars +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 157.44781 ns -> 154.330324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +157.4 ns (-3.12 ns) + + +fltx to_chars +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 157.44781 ns -> 154.330324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_chars +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 157.44781 ns -> 154.330324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_chars +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 157.44781 ns -> 154.330324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +parse + +fltx parse +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.936763821 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 203.515492 ns -> 202.515248 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +109.9 + + +fltx parse +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.936763821 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 203.515492 ns -> 202.515248 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +106.0 + + +fltx parse +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.936763821 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 203.515492 ns -> 202.515248 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx parse +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.936763821 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 203.515492 ns -> 202.515248 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +203.5 ns (-1.00 ns) + + +fltx parse +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.936763821 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 203.515492 ns -> 202.515248 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx parse +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.936763821 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 203.515492 ns -> 202.515248 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx parse +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.936763821 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 203.515492 ns -> 202.515248 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Rounding + +floor + +fltx floor +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.356617 ns -> 1.566313 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.356617 ns -> 1.566313 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.356617 ns -> 1.566313 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx floor +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.356617 ns -> 1.566313 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.36 ns (+0.210 ns) + + +fltx floor +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.356617 ns -> 1.566313 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx floor +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.356617 ns -> 1.566313 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx floor +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.356617 ns -> 1.566313 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ceil + +fltx ceil +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.842573 ns -> 1.987404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ceil +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.842573 ns -> 1.987404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ceil +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.842573 ns -> 1.987404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ceil +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.842573 ns -> 1.987404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.84 ns (+0.145 ns) + + +fltx ceil +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.842573 ns -> 1.987404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx ceil +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.842573 ns -> 1.987404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ceil +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.842573 ns -> 1.987404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +trunc + +fltx trunc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.105687 ns -> 2.197614 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx trunc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.105687 ns -> 2.197614 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx trunc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.105687 ns -> 2.197614 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx trunc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.105687 ns -> 2.197614 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2.11 ns (+0.092 ns) + + +fltx trunc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.105687 ns -> 2.197614 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx trunc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.105687 ns -> 2.197614 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx trunc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.105687 ns -> 2.197614 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round + +fltx round +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.46859 ns -> 7.50376 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.46859 ns -> 7.50376 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.46859 ns -> 7.50376 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.46859 ns -> 7.50376 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +7.47 ns (+0.035 ns) + + +fltx round +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.46859 ns -> 7.50376 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.46859 ns -> 7.50376 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.46859 ns -> 7.50376 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +roundeven + +fltx roundeven +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.696838 ns -> 9.543922 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.696838 ns -> 9.543922 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.696838 ns -> 9.543922 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx roundeven +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.696838 ns -> 9.543922 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +9.70 ns (-0.153 ns) + + +fltx roundeven +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.696838 ns -> 9.543922 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx roundeven +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.696838 ns -> 9.543922 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx roundeven +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.696838 ns -> 9.543922 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +lround + +fltx lround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.242026 ns -> 4.436278 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.242026 ns -> 4.436278 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.242026 ns -> 4.436278 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.242026 ns -> 4.436278 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +4.24 ns (+0.194 ns) + + +fltx lround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.242026 ns -> 4.436278 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.242026 ns -> 4.436278 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.242026 ns -> 4.436278 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +llround + +fltx llround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.974949 ns -> 4.079395 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.974949 ns -> 4.079395 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.974949 ns -> 4.079395 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx llround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.974949 ns -> 4.079395 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +3.97 ns (+0.104 ns) + + +fltx llround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.974949 ns -> 4.079395 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.974949 ns -> 4.079395 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.974949 ns -> 4.079395 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +round_decimals + +fltx round_decimals +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 78.601074 ns -> 77.678571 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.2 + + +fltx round_decimals +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 78.601074 ns -> 77.678571 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.0 + + +fltx round_decimals +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 78.601074 ns -> 77.678571 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_decimals +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 78.601074 ns -> 77.678571 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +78.60 ns (-0.923 ns) + + +fltx round_decimals +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 78.601074 ns -> 77.678571 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round_decimals +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 78.601074 ns -> 77.678571 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_decimals +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 78.601074 ns -> 77.678571 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round_significant + +fltx round_significant +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 110.710449 ns -> 109.494629 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +121.3 + + +fltx round_significant +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 110.710449 ns -> 109.494629 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.0 + + +fltx round_significant +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 110.710449 ns -> 109.494629 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_significant +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 110.710449 ns -> 109.494629 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.7 ns (-1.22 ns) + + +fltx round_significant +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 110.710449 ns -> 109.494629 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round_significant +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 110.710449 ns -> 109.494629 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_significant +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 110.710449 ns -> 109.494629 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Remainders + +fmod + +fltx fmod +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 18.803665 ns -> 18.335173 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmod +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 18.803665 ns -> 18.335173 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmod +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 18.803665 ns -> 18.335173 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx fmod +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 18.803665 ns -> 18.335173 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +18.80 ns (-0.468 ns) + + +fltx fmod +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 18.803665 ns -> 18.335173 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fmod +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 18.803665 ns -> 18.335173 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmod +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 18.803665 ns -> 18.335173 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remainder + +fltx remainder +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 24.262184 ns -> 23.680799 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +138.0 + + +fltx remainder +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 24.262184 ns -> 23.680799 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.1 + + +fltx remainder +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 24.262184 ns -> 23.680799 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remainder +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 24.262184 ns -> 23.680799 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +24.26 ns (-0.581 ns) + + +fltx remainder +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 24.262184 ns -> 23.680799 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx remainder +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 24.262184 ns -> 23.680799 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remainder +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 24.262184 ns -> 23.680799 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remquo + +fltx remquo +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 23.596054 ns -> 23.070204 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 23.596054 ns -> 23.070204 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 23.596054 ns -> 23.070204 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remquo +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 23.596054 ns -> 23.070204 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +23.60 ns (-0.526 ns) + + +fltx remquo +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 23.596054 ns -> 23.070204 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx remquo +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 23.596054 ns -> 23.070204 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remquo +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 23.596054 ns -> 23.070204 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Float Utils + +abs + +fltx abs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.056801 ns -> 3.122038 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx abs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.056801 ns -> 3.122038 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx abs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.056801 ns -> 3.122038 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx abs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.056801 ns -> 3.122038 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +3.06 ns (+0.065 ns) + + +fltx abs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.056801 ns -> 3.122038 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx abs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.056801 ns -> 3.122038 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx abs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.056801 ns -> 3.122038 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fabs + +fltx fabs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.08984 ns -> 3.14085 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fabs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.08984 ns -> 3.14085 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fabs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.08984 ns -> 3.14085 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx fabs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.08984 ns -> 3.14085 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.09 ns (+0.051 ns) + + +fltx fabs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.08984 ns -> 3.14085 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fabs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.08984 ns -> 3.14085 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fabs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.08984 ns -> 3.14085 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fma + +fltx fma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.232340894 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 6.640625 ns -> 5.556675 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +117.4 (-0.2) + + +fltx fma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.232340894 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 6.640625 ns -> 5.556675 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +99.6 + + +fltx fma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.232340894 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 6.640625 ns -> 5.556675 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +3/3 + + +fltx fma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.232340894 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 6.640625 ns -> 5.556675 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +6.64 ns (-1.08 ns) + + +fltx fma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.232340894 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 6.640625 ns -> 5.556675 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx fma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.232340894 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 6.640625 ns -> 5.556675 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx fma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.232340894 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 6.640625 ns -> 5.556675 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + +recip + +fltx recip +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 38.055617 ns -> 23.631727 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +109.0 + + +fltx recip +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 38.055617 ns -> 23.631727 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +105.2 + + +fltx recip +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 38.055617 ns -> 23.631727 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx recip +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 38.055617 ns -> 23.631727 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +38.06 ns (-14.42 ns) + + +fltx recip +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 38.055617 ns -> 23.631727 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx recip +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 38.055617 ns -> 23.631727 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx recip +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 38.055617 ns -> 23.631727 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fmin + +fltx fmin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.751459 ns -> 0.805319 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.751459 ns -> 0.805319 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.751459 ns -> 0.805319 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.751459 ns -> 0.805319 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +0.751 ns (+0.054 ns) + + +fltx fmin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.751459 ns -> 0.805319 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +Both (-NaN) + + +fltx fmin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.751459 ns -> 0.805319 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.751459 ns -> 0.805319 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fmax + +fltx fmax +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.703579 ns -> 0.728835 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.703579 ns -> 0.728835 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.703579 ns -> 0.728835 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmax +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.703579 ns -> 0.728835 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +0.704 ns (+0.025 ns) + + +fltx fmax +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.703579 ns -> 0.728835 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +Both (-NaN) + + +fltx fmax +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.703579 ns -> 0.728835 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmax +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.703579 ns -> 0.728835 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fdim + +fltx fdim +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 2.728891 ns -> 2.759536 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +138.0 + + +fltx fdim +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 2.728891 ns -> 2.759536 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +106.2 + + +fltx fdim +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 2.728891 ns -> 2.759536 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fdim +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 2.728891 ns -> 2.759536 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2.73 ns (+0.031 ns) + + +fltx fdim +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 2.728891 ns -> 2.759536 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx fdim +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 2.728891 ns -> 2.759536 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fdim +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 2.728891 ns -> 2.759536 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +copysign + +fltx copysign +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.455948 ns -> 0.457148 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.455948 ns -> 0.457148 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.455948 ns -> 0.457148 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx copysign +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.455948 ns -> 0.457148 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +0.456 ns (+0.001 ns) + + +fltx copysign +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.455948 ns -> 0.457148 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx copysign +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.455948 ns -> 0.457148 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx copysign +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.455948 ns -> 0.457148 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ldexp + +fltx ldexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.442669 ns -> 1.434586 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.442669 ns -> 1.434586 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.442669 ns -> 1.434586 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ldexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.442669 ns -> 1.434586 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.44 ns (-0.008 ns) + + +fltx ldexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.442669 ns -> 1.434586 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx ldexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.442669 ns -> 1.434586 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ldexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.442669 ns -> 1.434586 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbn + +fltx scalbn +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.369687 ns -> 1.362952 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.369687 ns -> 1.362952 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.369687 ns -> 1.362952 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbn +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.369687 ns -> 1.362952 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.37 ns (-0.007 ns) + + +fltx scalbn +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.369687 ns -> 1.362952 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx scalbn +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.369687 ns -> 1.362952 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbn +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.369687 ns -> 1.362952 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbln + +fltx scalbln +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.371602 ns -> 1.36331 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.371602 ns -> 1.36331 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.371602 ns -> 1.36331 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbln +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.371602 ns -> 1.36331 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.37 ns (-0.008 ns) + + +fltx scalbln +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.371602 ns -> 1.36331 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx scalbln +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.371602 ns -> 1.36331 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbln +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.371602 ns -> 1.36331 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +frexp + +fltx frexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.461708 ns -> 2.412404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx frexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.461708 ns -> 2.412404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx frexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.461708 ns -> 2.412404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx frexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.461708 ns -> 2.412404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +2.46 ns (-0.049 ns) + + +fltx frexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.461708 ns -> 2.412404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx frexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.461708 ns -> 2.412404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx frexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.461708 ns -> 2.412404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +modf + +fltx modf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.874407 ns -> 5.824463 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.874407 ns -> 5.824463 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.874407 ns -> 5.824463 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx modf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.874407 ns -> 5.824463 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +5.87 ns (-0.050 ns) + + +fltx modf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.874407 ns -> 5.824463 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx modf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.874407 ns -> 5.824463 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx modf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.874407 ns -> 5.824463 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ilogb + +fltx ilogb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.397432 ns -> 1.733809 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.397432 ns -> 1.733809 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.397432 ns -> 1.733809 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx ilogb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.397432 ns -> 1.733809 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1.40 ns (+0.336 ns) + + +fltx ilogb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.397432 ns -> 1.733809 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.397432 ns -> 1.733809 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.397432 ns -> 1.733809 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +logb + +fltx logb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.288405 ns -> 1.676126 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.288405 ns -> 1.676126 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.288405 ns -> 1.676126 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx logb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.288405 ns -> 1.676126 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +1.29 ns (+0.388 ns) + + +fltx logb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.288405 ns -> 1.676126 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx logb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.288405 ns -> 1.676126 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx logb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.288405 ns -> 1.676126 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +nextafter + +fltx nextafter +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.315611 ns -> 4.229083 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.315611 ns -> 4.229083 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.315611 ns -> 4.229083 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.315611 ns -> 4.229083 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +4.32 ns (-0.087 ns) + + +fltx nextafter +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.315611 ns -> 4.229083 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.315611 ns -> 4.229083 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.315611 ns -> 4.229083 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +nexttoward + +fltx nexttoward +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.292304 ns -> 4.199166 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.292304 ns -> 4.199166 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.292304 ns -> 4.199166 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.292304 ns -> 4.199166 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +4.29 ns (-0.093 ns) + + +fltx nexttoward +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.292304 ns -> 4.199166 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.292304 ns -> 4.199166 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.292304 ns -> 4.199166 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Roots & powers + +sqr + +fltx sqr +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.095979 ns -> 1.100421 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.7 + + +fltx sqr +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.095979 ns -> 1.100421 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +105.4 + + +fltx sqr +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.095979 ns -> 1.100421 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sqr +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.095979 ns -> 1.100421 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.10 ns (+0.004 ns) + + +fltx sqr +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.095979 ns -> 1.100421 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sqr +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.095979 ns -> 1.100421 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sqr +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.095979 ns -> 1.100421 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +sqrt + +fltx sqrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 3.70714 ns -> 3.820936 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +109.5 + + +fltx sqrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 3.70714 ns -> 3.820936 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +104.7 + + +fltx sqrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 3.70714 ns -> 3.820936 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +3/3 + + +fltx sqrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 3.70714 ns -> 3.820936 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +3.71 ns (+0.114 ns) + + +fltx sqrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 3.70714 ns -> 3.820936 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx sqrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 3.70714 ns -> 3.820936 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx sqrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 3.70714 ns -> 3.820936 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +cbrt + +fltx cbrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.037583359 -> 108.037583359 +worst bits: 103.019576 -> 103.019576 +domains: 2/2 -> 2/2 +time: 22.507209 ns -> 22.460679 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.0 + + +fltx cbrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.037583359 -> 108.037583359 +worst bits: 103.019576 -> 103.019576 +domains: 2/2 -> 2/2 +time: 22.507209 ns -> 22.460679 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.0 + + +fltx cbrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.037583359 -> 108.037583359 +worst bits: 103.019576 -> 103.019576 +domains: 2/2 -> 2/2 +time: 22.507209 ns -> 22.460679 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx cbrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.037583359 -> 108.037583359 +worst bits: 103.019576 -> 103.019576 +domains: 2/2 -> 2/2 +time: 22.507209 ns -> 22.460679 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +22.51 ns (-0.047 ns) + + +fltx cbrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.037583359 -> 108.037583359 +worst bits: 103.019576 -> 103.019576 +domains: 2/2 -> 2/2 +time: 22.507209 ns -> 22.460679 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx cbrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.037583359 -> 108.037583359 +worst bits: 103.019576 -> 103.019576 +domains: 2/2 -> 2/2 +time: 22.507209 ns -> 22.460679 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx cbrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.037583359 -> 108.037583359 +worst bits: 103.019576 -> 103.019576 +domains: 2/2 -> 2/2 +time: 22.507209 ns -> 22.460679 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +hypot + +fltx hypot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379344938 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 10.285811 ns -> 10.391093 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +122.4 + + +fltx hypot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379344938 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 10.285811 ns -> 10.391093 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.4 + + +fltx hypot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379344938 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 10.285811 ns -> 10.391093 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx hypot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379344938 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 10.285811 ns -> 10.391093 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +10.29 ns (+0.105 ns) + + +fltx hypot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379344938 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 10.285811 ns -> 10.391093 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx hypot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379344938 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 10.285811 ns -> 10.391093 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx hypot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379344938 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 10.285811 ns -> 10.391093 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +pow + +fltx pow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 192.666903 ns -> 191.81907 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.1 + + +fltx pow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 192.666903 ns -> 191.81907 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +101.3 + + +fltx pow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 192.666903 ns -> 191.81907 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx pow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 192.666903 ns -> 191.81907 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +192.7 ns (-0.848 ns) + + +fltx pow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 192.666903 ns -> 191.81907 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx pow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 192.666903 ns -> 191.81907 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx pow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 192.666903 ns -> 191.81907 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ipow + +fltx ipow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 24.078924 ns -> 23.844401 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +106.5 + + +fltx ipow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 24.078924 ns -> 23.844401 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +103.2 + + +fltx ipow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 24.078924 ns -> 23.844401 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +2/2 + + +fltx ipow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 24.078924 ns -> 23.844401 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +24.08 ns (-0.235 ns) + + +fltx ipow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 24.078924 ns -> 23.844401 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx ipow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 24.078924 ns -> 23.844401 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx ipow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 24.078924 ns -> 23.844401 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + + +Exponentials + +exp + +fltx exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.989164 -> 106.989164 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 92.124245 ns -> 92.029918 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.0 + + +fltx exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.989164 -> 106.989164 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 92.124245 ns -> 92.029918 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.6 + + +fltx exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.989164 -> 106.989164 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 92.124245 ns -> 92.029918 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.989164 -> 106.989164 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 92.124245 ns -> 92.029918 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +92.12 ns (-0.094 ns) + + +fltx exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.989164 -> 106.989164 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 92.124245 ns -> 92.029918 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.989164 -> 106.989164 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 92.124245 ns -> 92.029918 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.989164 -> 106.989164 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 92.124245 ns -> 92.029918 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +exp2 + +fltx exp2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 90.754862 ns -> 90.386963 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +108.9 + + +fltx exp2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 90.754862 ns -> 90.386963 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +105.1 + + +fltx exp2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 90.754862 ns -> 90.386963 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 90.754862 ns -> 90.386963 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +90.75 ns (-0.368 ns) + + +fltx exp2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 90.754862 ns -> 90.386963 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx exp2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 90.754862 ns -> 90.386963 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 90.754862 ns -> 90.386963 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +expm1 + +fltx expm1 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 94.439142 ns -> 93.958333 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +121.6 + + +fltx expm1 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 94.439142 ns -> 93.958333 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.1 + + +fltx expm1 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 94.439142 ns -> 93.958333 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx expm1 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 94.439142 ns -> 93.958333 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +94.44 ns (-0.481 ns) + + +fltx expm1 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 94.439142 ns -> 93.958333 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx expm1 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 94.439142 ns -> 93.958333 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx expm1 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 94.439142 ns -> 93.958333 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Logarithms + +log + +fltx log +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 123.145967 ns -> 122.792969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +108.4 + + +fltx log +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 123.145967 ns -> 122.792969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.7 + + +fltx log +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 123.145967 ns -> 122.792969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 123.145967 ns -> 122.792969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +123.1 ns (-0.353 ns) + + +fltx log +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 123.145967 ns -> 122.792969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 123.145967 ns -> 122.792969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 123.145967 ns -> 122.792969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log2 + +fltx log2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 127.659697 ns -> 126.889936 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +108.8 + + +fltx log2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 127.659697 ns -> 126.889936 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.7 + + +fltx log2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 127.659697 ns -> 126.889936 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 127.659697 ns -> 126.889936 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +127.7 ns (-0.770 ns) + + +fltx log2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 127.659697 ns -> 126.889936 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 127.659697 ns -> 126.889936 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 127.659697 ns -> 126.889936 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log10 + +fltx log10 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 127.636719 ns -> 127.244658 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.5 + + +fltx log10 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 127.636719 ns -> 127.244658 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.8 + + +fltx log10 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 127.636719 ns -> 127.244658 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log10 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 127.636719 ns -> 127.244658 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +127.6 ns (-0.392 ns) + + +fltx log10 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 127.636719 ns -> 127.244658 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log10 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 127.636719 ns -> 127.244658 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log10 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 127.636719 ns -> 127.244658 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log1p + +fltx log1p +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 124.467199 ns -> 123.897879 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +121.4 + + +fltx log1p +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 124.467199 ns -> 123.897879 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.6 + + +fltx log1p +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 124.467199 ns -> 123.897879 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx log1p +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 124.467199 ns -> 123.897879 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +124.5 ns (-0.569 ns) + + +fltx log1p +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 124.467199 ns -> 123.897879 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx log1p +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 124.467199 ns -> 123.897879 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx log1p +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 124.467199 ns -> 123.897879 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Trigonometric + +sin + +fltx sin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 84.771729 ns -> 84.344217 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.6 + + +fltx sin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 84.771729 ns -> 84.344217 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +98.6 + + +fltx sin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 84.771729 ns -> 84.344217 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx sin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 84.771729 ns -> 84.344217 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +84.77 ns (-0.428 ns) + + +fltx sin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 84.771729 ns -> 84.344217 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 84.771729 ns -> 84.344217 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 84.771729 ns -> 84.344217 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cos + +fltx cos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 84.270508 ns -> 84.142578 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +113.5 + + +fltx cos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 84.270508 ns -> 84.142578 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +99.2 + + +fltx cos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 84.270508 ns -> 84.142578 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx cos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 84.270508 ns -> 84.142578 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +84.27 ns (-0.128 ns) + + +fltx cos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 84.270508 ns -> 84.142578 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 84.270508 ns -> 84.142578 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 84.270508 ns -> 84.142578 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +sincos + +fltx sincos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 94.938908 ns -> 94.104004 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 94.938908 ns -> 94.104004 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 94.938908 ns -> 94.104004 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 94.938908 ns -> 94.104004 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +94.94 ns (-0.835 ns) + + +fltx sincos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 94.938908 ns -> 94.104004 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 94.938908 ns -> 94.104004 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 94.938908 ns -> 94.104004 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +tan + +fltx tan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 95.888672 ns -> 96.101518 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +106.7 + + +fltx tan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 95.888672 ns -> 96.101518 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +98.6 + + +fltx tan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 95.888672 ns -> 96.101518 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx tan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 95.888672 ns -> 96.101518 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +95.89 ns (+0.213 ns) + + +fltx tan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 95.888672 ns -> 96.101518 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx tan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 95.888672 ns -> 96.101518 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 95.888672 ns -> 96.101518 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asin + +fltx asin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 157.237413 ns -> 156.886574 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.6 + + +fltx asin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 157.237413 ns -> 156.886574 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.1 + + +fltx asin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 157.237413 ns -> 156.886574 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 157.237413 ns -> 156.886574 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +157.2 ns (-0.351 ns) + + +fltx asin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 157.237413 ns -> 156.886574 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx asin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 157.237413 ns -> 156.886574 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 157.237413 ns -> 156.886574 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acos + +fltx acos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 161.716872 ns -> 162.935697 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +106.5 + + +fltx acos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 161.716872 ns -> 162.935697 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +81.6 + + +fltx acos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 161.716872 ns -> 162.935697 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 161.716872 ns -> 162.935697 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +161.7 ns (+1.22 ns) + + +fltx acos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 161.716872 ns -> 162.935697 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx acos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 161.716872 ns -> 162.935697 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 161.716872 ns -> 162.935697 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +atan + +fltx atan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 109.273489 ns -> 108.881711 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.7 + + +fltx atan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 109.273489 ns -> 108.881711 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.9 + + +fltx atan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 109.273489 ns -> 108.881711 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 109.273489 ns -> 108.881711 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +109.3 ns (-0.392 ns) + + +fltx atan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 109.273489 ns -> 108.881711 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 109.273489 ns -> 108.881711 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 109.273489 ns -> 108.881711 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +atan2 + +fltx atan2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 116.192801 ns -> 116.049533 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.7 + + +fltx atan2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 116.192801 ns -> 116.049533 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.5 + + +fltx atan2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 116.192801 ns -> 116.049533 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx atan2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 116.192801 ns -> 116.049533 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +116.2 ns (-0.143 ns) + + +fltx atan2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 116.192801 ns -> 116.049533 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atan2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 116.192801 ns -> 116.049533 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 116.192801 ns -> 116.049533 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Hyperbolic + +sinh + +fltx sinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 106.427002 ns -> 106.16862 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.4 + + +fltx sinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 106.427002 ns -> 106.16862 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.6 + + +fltx sinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 106.427002 ns -> 106.16862 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 106.427002 ns -> 106.16862 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +106.4 ns (-0.258 ns) + + +fltx sinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 106.427002 ns -> 106.16862 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 106.427002 ns -> 106.16862 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 106.427002 ns -> 106.16862 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cosh + +fltx cosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 105.860596 ns -> 105.259146 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.9 + + +fltx cosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 105.860596 ns -> 105.259146 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +104.4 + + +fltx cosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 105.860596 ns -> 105.259146 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx cosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 105.860596 ns -> 105.259146 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +105.9 ns (-0.601 ns) + + +fltx cosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 105.860596 ns -> 105.259146 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 105.860596 ns -> 105.259146 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 105.860596 ns -> 105.259146 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +tanh + +fltx tanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 111.74379 ns -> 111.31656 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +109.2 + + +fltx tanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 111.74379 ns -> 111.31656 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.8 + + +fltx tanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 111.74379 ns -> 111.31656 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx tanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 111.74379 ns -> 111.31656 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +111.7 ns (-0.427 ns) + + +fltx tanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 111.74379 ns -> 111.31656 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx tanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 111.74379 ns -> 111.31656 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 111.74379 ns -> 111.31656 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asinh + +fltx asinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 119.74236 ns -> 119.052734 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.1 + + +fltx asinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 119.74236 ns -> 119.052734 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.8 + + +fltx asinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 119.74236 ns -> 119.052734 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 119.74236 ns -> 119.052734 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +119.7 ns (-0.690 ns) + + +fltx asinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 119.74236 ns -> 119.052734 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx asinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 119.74236 ns -> 119.052734 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 119.74236 ns -> 119.052734 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acosh + +fltx acosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 133.261108 ns -> 132.61261 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +108.0 + + +fltx acosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 133.261108 ns -> 132.61261 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.7 + + +fltx acosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 133.261108 ns -> 132.61261 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 133.261108 ns -> 132.61261 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +133.3 ns (-0.648 ns) + + +fltx acosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 133.261108 ns -> 132.61261 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx acosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 133.261108 ns -> 132.61261 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 133.261108 ns -> 132.61261 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +atanh + +fltx atanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 129.859924 ns -> 129.354581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.1 + + +fltx atanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 129.859924 ns -> 129.354581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.1 + + +fltx atanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 129.859924 ns -> 129.354581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 129.859924 ns -> 129.354581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +129.9 ns (-0.505 ns) + + +fltx atanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 129.859924 ns -> 129.354581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 129.859924 ns -> 129.354581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 129.859924 ns -> 129.354581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Special + +erfc + +fltx erfc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 553.597862 ns -> 549.549788 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.2 + + +fltx erfc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 553.597862 ns -> 549.549788 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +99.2 + + +fltx erfc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 553.597862 ns -> 549.549788 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx erfc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 553.597862 ns -> 549.549788 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +553.6 ns (-4.05 ns) + + +fltx erfc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 553.597862 ns -> 549.549788 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx erfc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 553.597862 ns -> 549.549788 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx erfc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 553.597862 ns -> 549.549788 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +erf + +fltx erf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 556.741649 ns -> 554.694121 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.9 + + +fltx erf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 556.741649 ns -> 554.694121 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.5 + + +fltx erf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 556.741649 ns -> 554.694121 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx erf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 556.741649 ns -> 554.694121 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +556.7 ns (-2.05 ns) + + +fltx erf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 556.741649 ns -> 554.694121 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx erf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 556.741649 ns -> 554.694121 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx erf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 556.741649 ns -> 554.694121 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +tgamma + +fltx tgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 468.577665 ns -> 464.805238 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +105.6 + + +fltx tgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 468.577665 ns -> 464.805238 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +97.3 + + +fltx tgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 468.577665 ns -> 464.805238 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx tgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 468.577665 ns -> 464.805238 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +468.6 ns (-3.77 ns) + + +fltx tgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 468.577665 ns -> 464.805238 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx tgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 468.577665 ns -> 464.805238 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx tgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 468.577665 ns -> 464.805238 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +lgamma + +fltx lgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 533.017744 ns -> 528.509004 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.3 + + +fltx lgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 533.017744 ns -> 528.509004 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +102.2 + + +fltx lgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 533.017744 ns -> 528.509004 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 533.017744 ns -> 528.509004 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +533.0 ns (-4.51 ns) + + +fltx lgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 533.017744 ns -> 528.509004 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx lgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 533.017744 ns -> 528.509004 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 533.017744 ns -> 528.509004 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + + +Comparisons + +equal + +fltx equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.653358 ns -> 0.855078 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.653358 ns -> 0.855078 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.653358 ns -> 0.855078 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.653358 ns -> 0.855078 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.653 ns (+0.202 ns) + + +fltx equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.653358 ns -> 0.855078 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.653358 ns -> 0.855078 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.653358 ns -> 0.855078 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +not_equal + +fltx not_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.725736 ns -> 0.933284 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.725736 ns -> 0.933284 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.725736 ns -> 0.933284 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx not_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.725736 ns -> 0.933284 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.726 ns (+0.208 ns) + + +fltx not_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.725736 ns -> 0.933284 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx not_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.725736 ns -> 0.933284 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx not_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.725736 ns -> 0.933284 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less + +fltx less +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.998164 ns -> 2.130316 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.998164 ns -> 2.130316 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.998164 ns -> 2.130316 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.998164 ns -> 2.130316 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.998 ns (+1.13 ns) + + +fltx less +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.998164 ns -> 2.130316 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.998164 ns -> 2.130316 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.998164 ns -> 2.130316 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater + +fltx greater +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.120882 ns -> 2.081597 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.120882 ns -> 2.081597 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.120882 ns -> 2.081597 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.120882 ns -> 2.081597 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.12 ns (+0.961 ns) + + +fltx greater +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.120882 ns -> 2.081597 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.120882 ns -> 2.081597 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.120882 ns -> 2.081597 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less_equal + +fltx less_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.992156 ns -> 2.134671 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.992156 ns -> 2.134671 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.992156 ns -> 2.134671 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.992156 ns -> 2.134671 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.992 ns (+1.14 ns) + + +fltx less_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.992156 ns -> 2.134671 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.992156 ns -> 2.134671 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.992156 ns -> 2.134671 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater_equal + +fltx greater_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.114725 ns -> 2.224121 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.114725 ns -> 2.224121 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.114725 ns -> 2.224121 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.114725 ns -> 2.224121 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.11 ns (+1.11 ns) + + +fltx greater_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.114725 ns -> 2.224121 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.114725 ns -> 2.224121 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.114725 ns -> 2.224121 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + + +Random + +uniform_real + +fltx uniform_real +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 7.327998 ns -> 7.230124 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 7.327998 ns -> 7.230124 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 7.327998 ns -> 7.230124 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 7.327998 ns -> 7.230124 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +7.33 ns (-0.098 ns) + + +fltx uniform_real +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 7.327998 ns -> 7.230124 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 7.327998 ns -> 7.230124 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 7.327998 ns -> 7.230124 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +normal + +fltx normal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 43.952602 ns -> 41.813786 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 43.952602 ns -> 41.813786 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 43.952602 ns -> 41.813786 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 43.952602 ns -> 41.813786 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +43.95 ns (-2.14 ns) + + +fltx normal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 43.952602 ns -> 41.813786 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 43.952602 ns -> 41.813786 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 43.952602 ns -> 41.813786 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Mixed Workloads + +product_sum + +fltx product_sum +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.63094 ns -> 5.056453 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.63094 ns -> 5.056453 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.63094 ns -> 5.056453 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.63094 ns -> 5.056453 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +4.63 ns (+0.426 ns) + + +fltx product_sum +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.63094 ns -> 5.056453 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.63094 ns -> 5.056453 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.63094 ns -> 5.056453 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +chained_arithmetic + +fltx chained_arithmetic +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 24.377232 ns -> 14.169038 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 24.377232 ns -> 14.169038 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 24.377232 ns -> 14.169038 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 24.377232 ns -> 14.169038 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +24.38 ns (-10.21 ns) + + +fltx chained_arithmetic +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 24.377232 ns -> 14.169038 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 24.377232 ns -> 14.169038 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 24.377232 ns -> 14.169038 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +affine_trig + +fltx affine_trig +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 187.401541 ns -> 179.93571 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 187.401541 ns -> 179.93571 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 187.401541 ns -> 179.93571 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 187.401541 ns -> 179.93571 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +187.4 ns (-7.47 ns) + + +fltx affine_trig +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 187.401541 ns -> 179.93571 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 187.401541 ns -> 179.93571 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 187.401541 ns -> 179.93571 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +mandelbrot + +fltx mandelbrot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 19.848594 ns -> 12.479378 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 19.848594 ns -> 12.479378 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 19.848594 ns -> 12.479378 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 19.848594 ns -> 12.479378 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +19.85 ns (-7.37 ns) + + +fltx mandelbrot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 19.848594 ns -> 12.479378 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 19.848594 ns -> 12.479378 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 19.848594 ns -> 12.479378 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +matrix_vector_4x4 + +fltx matrix_vector_4x4 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 54.657334 ns -> 54.424413 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 54.657334 ns -> 54.424413 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 54.657334 ns -> 54.424413 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 54.657334 ns -> 54.424413 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +54.66 ns (-0.233 ns) + + +fltx matrix_vector_4x4 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 54.657334 ns -> 54.424413 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 54.657334 ns -> 54.424413 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 54.657334 ns -> 54.424413 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +horner_polynomial + +fltx horner_polynomial +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 166.597524 ns -> 86.424366 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 166.597524 ns -> 86.424366 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 166.597524 ns -> 86.424366 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 166.597524 ns -> 86.424366 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +166.6 ns (-80.17 ns) + + +fltx horner_polynomial +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 166.597524 ns -> 86.424366 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 166.597524 ns -> 86.424366 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 166.597524 ns -> 86.424366 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +newton_root + +fltx newton_root +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 31.86166 ns -> 22.994348 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 31.86166 ns -> 22.994348 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 31.86166 ns -> 22.994348 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 31.86166 ns -> 22.994348 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +31.86 ns (-8.87 ns) + + +fltx newton_root +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 31.86166 ns -> 22.994348 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 31.86166 ns -> 22.994348 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 31.86166 ns -> 22.994348 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +log_sum_exp + +fltx log_sum_exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 828.508277 ns -> 793.13266 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 828.508277 ns -> 793.13266 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 828.508277 ns -> 793.13266 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 828.508277 ns -> 793.13266 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +828.5 ns (-35.38 ns) + + +fltx log_sum_exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 828.508277 ns -> 793.13266 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 828.508277 ns -> 793.13266 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 828.508277 ns -> 793.13266 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +haversine + +fltx haversine +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 433.030094 ns -> 411.277529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 433.030094 ns -> 411.277529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 433.030094 ns -> 411.277529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 433.030094 ns -> 411.277529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +433.0 ns (-21.75 ns) + + +fltx haversine +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 433.030094 ns -> 411.277529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 433.030094 ns -> 411.277529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 433.030094 ns -> 411.277529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deltas: green improves under fast-math; red regresses. + diff --git a/validation/metrics/generated/profile_comparison/windows_x86_64_ClangCL_f256_strict_fastmath_comp.svg b/validation/metrics/generated/profile_comparison/windows_x86_64_ClangCL_f256_strict_fastmath_comp.svg new file mode 100644 index 0000000..61e747e --- /dev/null +++ b/validation/metrics/generated/profile_comparison/windows_x86_64_ClangCL_f256_strict_fastmath_comp.svg @@ -0,0 +1,9359 @@ + + + + +f256 strict vs consumer fast-math — Windows / x64 / Clang (clang-cl) +Strict first; deltas are fast-math - strict. Accuracy excludes the separate subnormal domain. + +operation + +bl::f256 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + +Arithmetic + +add + +fltx add +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 9.497606 ns -> 9.454694 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +226.0 + + +fltx add +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 9.497606 ns -> 9.454694 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +215.3 + + +fltx add +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 9.497606 ns -> 9.454694 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +1/1 + + +fltx add +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 9.497606 ns -> 9.454694 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +9.50 ns (-0.043 ns) + + +fltx add +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 9.497606 ns -> 9.454694 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +Both + + +fltx add +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 9.497606 ns -> 9.454694 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +✗ + + +fltx add +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 9.497606 ns -> 9.454694 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +✓ + + +subtract + +fltx subtract +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 18.871489 ns -> 18.681308 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +226.1 + + +fltx subtract +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 18.871489 ns -> 18.681308 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +215.2 + + +fltx subtract +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 18.871489 ns -> 18.681308 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +1/1 + + +fltx subtract +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 18.871489 ns -> 18.681308 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +18.87 ns (-0.190 ns) + + +fltx subtract +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 18.871489 ns -> 18.681308 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +Both + + +fltx subtract +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 18.871489 ns -> 18.681308 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +✗ + + +fltx subtract +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 18.871489 ns -> 18.681308 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +✓ + + +multiply + +fltx multiply +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 34.876883 ns -> 34.991281 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +220.0 + + +fltx multiply +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 34.876883 ns -> 34.991281 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +215.2 + + +fltx multiply +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 34.876883 ns -> 34.991281 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx multiply +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 34.876883 ns -> 34.991281 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +34.88 ns (+0.114 ns) + + +fltx multiply +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 34.876883 ns -> 34.991281 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx multiply +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 34.876883 ns -> 34.991281 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx multiply +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 34.876883 ns -> 34.991281 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +divide + +fltx divide +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 96.092936 ns -> 96.948242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +219.2 + + +fltx divide +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 96.092936 ns -> 96.948242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +214.8 + + +fltx divide +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 96.092936 ns -> 96.948242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx divide +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 96.092936 ns -> 96.948242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +96.09 ns (+0.855 ns) + + +fltx divide +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 96.092936 ns -> 96.948242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx divide +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 96.092936 ns -> 96.948242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx divide +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 96.092936 ns -> 96.948242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + + +IO + +to_string + +fltx to_string +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 290.592218 ns -> 300.292754 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.4 + + +fltx to_string +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 290.592218 ns -> 300.292754 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.0 + + +fltx to_string +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 290.592218 ns -> 300.292754 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_string +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 290.592218 ns -> 300.292754 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +290.6 ns (+9.70 ns) + + +fltx to_string +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 290.592218 ns -> 300.292754 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_string +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 290.592218 ns -> 300.292754 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_string +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 290.592218 ns -> 300.292754 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +to_chars + +fltx to_chars +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 253.747526 ns -> 256.474479 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.4 + + +fltx to_chars +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 253.747526 ns -> 256.474479 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.0 + + +fltx to_chars +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 253.747526 ns -> 256.474479 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_chars +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 253.747526 ns -> 256.474479 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +253.7 ns (+2.73 ns) + + +fltx to_chars +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 253.747526 ns -> 256.474479 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_chars +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 253.747526 ns -> 256.474479 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_chars +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 253.747526 ns -> 256.474479 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +parse + +fltx parse +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729492211 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 347.723022 ns -> 354.891437 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +219.7 + + +fltx parse +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729492211 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 347.723022 ns -> 354.891437 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +212.0 + + +fltx parse +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729492211 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 347.723022 ns -> 354.891437 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx parse +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729492211 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 347.723022 ns -> 354.891437 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +347.7 ns (+7.17 ns) + + +fltx parse +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729492211 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 347.723022 ns -> 354.891437 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx parse +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729492211 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 347.723022 ns -> 354.891437 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx parse +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729492211 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 347.723022 ns -> 354.891437 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Rounding + +floor + +fltx floor +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.50249 ns -> 1.487427 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.50249 ns -> 1.487427 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.50249 ns -> 1.487427 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx floor +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.50249 ns -> 1.487427 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.50 ns (-0.015 ns) + + +fltx floor +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.50249 ns -> 1.487427 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx floor +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.50249 ns -> 1.487427 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx floor +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.50249 ns -> 1.487427 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ceil + +fltx ceil +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.503392 ns -> 1.599898 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ceil +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.503392 ns -> 1.599898 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ceil +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.503392 ns -> 1.599898 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ceil +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.503392 ns -> 1.599898 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.50 ns (+0.097 ns) + + +fltx ceil +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.503392 ns -> 1.599898 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx ceil +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.503392 ns -> 1.599898 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ceil +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.503392 ns -> 1.599898 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +trunc + +fltx trunc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.191612 ns -> 4.281944 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx trunc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.191612 ns -> 4.281944 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx trunc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.191612 ns -> 4.281944 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx trunc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.191612 ns -> 4.281944 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +4.19 ns (+0.090 ns) + + +fltx trunc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.191612 ns -> 4.281944 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx trunc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.191612 ns -> 4.281944 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx trunc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.191612 ns -> 4.281944 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round + +fltx round +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.862986 ns -> 8.790894 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.862986 ns -> 8.790894 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.862986 ns -> 8.790894 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.862986 ns -> 8.790894 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +8.86 ns (-0.072 ns) + + +fltx round +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.862986 ns -> 8.790894 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.862986 ns -> 8.790894 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.862986 ns -> 8.790894 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +roundeven + +fltx roundeven +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.308207 ns -> 8.362935 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.308207 ns -> 8.362935 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.308207 ns -> 8.362935 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx roundeven +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.308207 ns -> 8.362935 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +8.31 ns (+0.055 ns) + + +fltx roundeven +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.308207 ns -> 8.362935 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx roundeven +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.308207 ns -> 8.362935 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx roundeven +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 8.308207 ns -> 8.362935 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +lround + +fltx lround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.653992 ns -> 6.562383 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.653992 ns -> 6.562383 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.653992 ns -> 6.562383 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.653992 ns -> 6.562383 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +6.65 ns (-0.092 ns) + + +fltx lround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.653992 ns -> 6.562383 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.653992 ns -> 6.562383 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.653992 ns -> 6.562383 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +llround + +fltx llround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.321766 ns -> 6.568478 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.321766 ns -> 6.568478 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.321766 ns -> 6.568478 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx llround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.321766 ns -> 6.568478 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +6.32 ns (+0.247 ns) + + +fltx llround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.321766 ns -> 6.568478 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.321766 ns -> 6.568478 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.321766 ns -> 6.568478 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +round_decimals + +fltx round_decimals +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 117.815484 ns -> 117.58355 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.0 + + +fltx round_decimals +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 117.815484 ns -> 117.58355 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +215.3 + + +fltx round_decimals +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 117.815484 ns -> 117.58355 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_decimals +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 117.815484 ns -> 117.58355 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +117.8 ns (-0.232 ns) + + +fltx round_decimals +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 117.815484 ns -> 117.58355 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round_decimals +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 117.815484 ns -> 117.58355 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_decimals +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 117.815484 ns -> 117.58355 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round_significant + +fltx round_significant +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 161.127178 ns -> 160.874721 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +229.6 + + +fltx round_significant +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 161.127178 ns -> 160.874721 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +215.1 + + +fltx round_significant +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 161.127178 ns -> 160.874721 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_significant +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 161.127178 ns -> 160.874721 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +161.1 ns (-0.252 ns) + + +fltx round_significant +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 161.127178 ns -> 160.874721 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round_significant +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 161.127178 ns -> 160.874721 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_significant +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 161.127178 ns -> 160.874721 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Remainders + +fmod + +fltx fmod +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 69.10676 ns -> 68.531474 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +244.0 + + +fltx fmod +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 69.10676 ns -> 68.531474 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.7 + + +fltx fmod +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 69.10676 ns -> 68.531474 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx fmod +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 69.10676 ns -> 68.531474 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +69.11 ns (-0.575 ns) + + +fltx fmod +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 69.10676 ns -> 68.531474 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fmod +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 69.10676 ns -> 68.531474 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmod +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 69.10676 ns -> 68.531474 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remainder + +fltx remainder +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 100.491688 ns -> 100.164653 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remainder +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 100.491688 ns -> 100.164653 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remainder +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 100.491688 ns -> 100.164653 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remainder +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 100.491688 ns -> 100.164653 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +100.5 ns (-0.327 ns) + + +fltx remainder +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 100.491688 ns -> 100.164653 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx remainder +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 100.491688 ns -> 100.164653 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remainder +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 100.491688 ns -> 100.164653 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remquo + +fltx remquo +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 100.221605 ns -> 99.508146 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 100.221605 ns -> 99.508146 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 100.221605 ns -> 99.508146 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remquo +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 100.221605 ns -> 99.508146 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +100.2 ns (-0.713 ns) + + +fltx remquo +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 100.221605 ns -> 99.508146 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx remquo +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 100.221605 ns -> 99.508146 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remquo +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 100.221605 ns -> 99.508146 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Float Utils + +abs + +fltx abs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.093952 ns -> 1.524058 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx abs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.093952 ns -> 1.524058 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx abs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.093952 ns -> 1.524058 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx abs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.093952 ns -> 1.524058 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +2.09 ns (-0.570 ns) + + +fltx abs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.093952 ns -> 1.524058 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx abs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.093952 ns -> 1.524058 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx abs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.093952 ns -> 1.524058 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fabs + +fltx fabs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.972689 ns -> 1.708089 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fabs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.972689 ns -> 1.708089 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fabs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.972689 ns -> 1.708089 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx fabs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.972689 ns -> 1.708089 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.97 ns (-0.265 ns) + + +fltx fabs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.972689 ns -> 1.708089 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fabs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.972689 ns -> 1.708089 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fabs +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.972689 ns -> 1.708089 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fma + +fltx fma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 21.158447 ns -> 20.321156 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +229.7 + + +fltx fma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 21.158447 ns -> 20.321156 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +215.1 + + +fltx fma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 21.158447 ns -> 20.321156 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +3/3 + + +fltx fma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 21.158447 ns -> 20.321156 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +21.16 ns (-0.837 ns) + + +fltx fma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 21.158447 ns -> 20.321156 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx fma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 21.158447 ns -> 20.321156 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx fma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 21.158447 ns -> 20.321156 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + +recip + +fltx recip +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.92444534 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 86.288086 ns -> 81.338266 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.9 + + +fltx recip +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.92444534 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 86.288086 ns -> 81.338266 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.6 + + +fltx recip +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.92444534 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 86.288086 ns -> 81.338266 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx recip +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.92444534 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 86.288086 ns -> 81.338266 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +86.29 ns (-4.95 ns) + + +fltx recip +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.92444534 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 86.288086 ns -> 81.338266 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx recip +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.92444534 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 86.288086 ns -> 81.338266 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx recip +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.92444534 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 86.288086 ns -> 81.338266 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fmin + +fltx fmin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.046501 ns -> 0.959492 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.046501 ns -> 0.959492 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.046501 ns -> 0.959492 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.046501 ns -> 0.959492 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +1.05 ns (-0.087 ns) + + +fltx fmin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.046501 ns -> 0.959492 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +Both (-NaN) + + +fltx fmin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.046501 ns -> 0.959492 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.046501 ns -> 0.959492 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fmax + +fltx fmax +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.001742 ns -> 0.962298 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.001742 ns -> 0.962298 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.001742 ns -> 0.962298 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmax +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.001742 ns -> 0.962298 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +1.00 ns (-0.039 ns) + + +fltx fmax +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.001742 ns -> 0.962298 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +Both (-NaN) + + +fltx fmax +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.001742 ns -> 0.962298 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmax +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.001742 ns -> 0.962298 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fdim + +fltx fdim +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 8.442938 ns -> 8.144748 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fdim +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 8.442938 ns -> 8.144748 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fdim +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 8.442938 ns -> 8.144748 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fdim +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 8.442938 ns -> 8.144748 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +8.44 ns (-0.298 ns) + + +fltx fdim +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 8.442938 ns -> 8.144748 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf -NaN) + + +fltx fdim +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 8.442938 ns -> 8.144748 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fdim +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 8.442938 ns -> 8.144748 ns +special values: Both -> No +signed zero: yes -> yes +subnormal support: - -> - + +- + + +copysign + +fltx copysign +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.739969 ns -> 0.649669 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.739969 ns -> 0.649669 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.739969 ns -> 0.649669 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx copysign +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.739969 ns -> 0.649669 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +0.740 ns (-0.090 ns) + + +fltx copysign +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.739969 ns -> 0.649669 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx copysign +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.739969 ns -> 0.649669 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx copysign +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.739969 ns -> 0.649669 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ldexp + +fltx ldexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.197277 ns -> 3.228769 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.197277 ns -> 3.228769 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.197277 ns -> 3.228769 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ldexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.197277 ns -> 3.228769 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.20 ns (+0.031 ns) + + +fltx ldexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.197277 ns -> 3.228769 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx ldexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.197277 ns -> 3.228769 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ldexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.197277 ns -> 3.228769 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbn + +fltx scalbn +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.199967 ns -> 3.236709 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.199967 ns -> 3.236709 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.199967 ns -> 3.236709 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbn +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.199967 ns -> 3.236709 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.20 ns (+0.037 ns) + + +fltx scalbn +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.199967 ns -> 3.236709 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx scalbn +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.199967 ns -> 3.236709 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbn +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.199967 ns -> 3.236709 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbln + +fltx scalbln +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.18991 ns -> 3.252441 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.18991 ns -> 3.252441 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.18991 ns -> 3.252441 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbln +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.18991 ns -> 3.252441 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.19 ns (+0.063 ns) + + +fltx scalbln +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.18991 ns -> 3.252441 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx scalbln +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.18991 ns -> 3.252441 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbln +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.18991 ns -> 3.252441 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +frexp + +fltx frexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 13.949606 ns -> 6.404739 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx frexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 13.949606 ns -> 6.404739 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx frexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 13.949606 ns -> 6.404739 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx frexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 13.949606 ns -> 6.404739 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +13.95 ns (-7.54 ns) + + +fltx frexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 13.949606 ns -> 6.404739 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx frexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 13.949606 ns -> 6.404739 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx frexp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 13.949606 ns -> 6.404739 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +modf + +fltx modf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 20.226385 ns -> 20.556419 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 20.226385 ns -> 20.556419 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 20.226385 ns -> 20.556419 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx modf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 20.226385 ns -> 20.556419 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +20.23 ns (+0.330 ns) + + +fltx modf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 20.226385 ns -> 20.556419 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +Both (-Inf) + + +fltx modf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 20.226385 ns -> 20.556419 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx modf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 20.226385 ns -> 20.556419 ns +special values: Both -> NaN +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ilogb + +fltx ilogb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.080697 ns -> 1.083036 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.080697 ns -> 1.083036 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.080697 ns -> 1.083036 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx ilogb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.080697 ns -> 1.083036 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1.08 ns (+0.002 ns) + + +fltx ilogb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.080697 ns -> 1.083036 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.080697 ns -> 1.083036 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.080697 ns -> 1.083036 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +logb + +fltx logb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.973943 ns -> 0.969486 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.973943 ns -> 0.969486 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.973943 ns -> 0.969486 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx logb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.973943 ns -> 0.969486 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +0.974 ns (-0.004 ns) + + +fltx logb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.973943 ns -> 0.969486 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +Both (-Inf) + + +fltx logb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.973943 ns -> 0.969486 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx logb +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 0.973943 ns -> 0.969486 ns +special values: Both -> NaN +signed zero: - -> - +subnormal support: - -> - + +- + + +nextafter + +fltx nextafter +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.723766 ns -> 5.661203 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.723766 ns -> 5.661203 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.723766 ns -> 5.661203 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.723766 ns -> 5.661203 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +5.72 ns (-0.063 ns) + + +fltx nextafter +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.723766 ns -> 5.661203 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.723766 ns -> 5.661203 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.723766 ns -> 5.661203 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +nexttoward + +fltx nexttoward +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.740843 ns -> 5.651279 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.740843 ns -> 5.651279 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.740843 ns -> 5.651279 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.740843 ns -> 5.651279 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +5.74 ns (-0.090 ns) + + +fltx nexttoward +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.740843 ns -> 5.651279 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.740843 ns -> 5.651279 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.740843 ns -> 5.651279 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Roots & powers + +sqr + +fltx sqr +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 23.220703 ns -> 23.214355 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.1 + + +fltx sqr +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 23.220703 ns -> 23.214355 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +215.3 + + +fltx sqr +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 23.220703 ns -> 23.214355 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sqr +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 23.220703 ns -> 23.214355 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +23.22 ns (-0.006 ns) + + +fltx sqr +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 23.220703 ns -> 23.214355 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sqr +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 23.220703 ns -> 23.214355 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sqr +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 23.220703 ns -> 23.214355 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +sqrt + +fltx sqrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 109.785156 ns -> 109.141846 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +217.8 + + +fltx sqrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 109.785156 ns -> 109.141846 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +209.6 + + +fltx sqrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 109.785156 ns -> 109.141846 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +3/3 + + +fltx sqrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 109.785156 ns -> 109.141846 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +109.8 ns (-0.643 ns) + + +fltx sqrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 109.785156 ns -> 109.141846 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx sqrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 109.785156 ns -> 109.141846 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx sqrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 109.785156 ns -> 109.141846 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +cbrt + +fltx cbrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.286640743 -> 219.286640743 +worst bits: 215.009723 -> 215.009723 +domains: 2/2 -> 2/2 +time: 341.947428 ns -> 341.630046 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +219.3 + + +fltx cbrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.286640743 -> 219.286640743 +worst bits: 215.009723 -> 215.009723 +domains: 2/2 -> 2/2 +time: 341.947428 ns -> 341.630046 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +215.0 + + +fltx cbrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.286640743 -> 219.286640743 +worst bits: 215.009723 -> 215.009723 +domains: 2/2 -> 2/2 +time: 341.947428 ns -> 341.630046 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx cbrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.286640743 -> 219.286640743 +worst bits: 215.009723 -> 215.009723 +domains: 2/2 -> 2/2 +time: 341.947428 ns -> 341.630046 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +341.9 ns (-0.317 ns) + + +fltx cbrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.286640743 -> 219.286640743 +worst bits: 215.009723 -> 215.009723 +domains: 2/2 -> 2/2 +time: 341.947428 ns -> 341.630046 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx cbrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.286640743 -> 219.286640743 +worst bits: 215.009723 -> 215.009723 +domains: 2/2 -> 2/2 +time: 341.947428 ns -> 341.630046 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx cbrt +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.286640743 -> 219.286640743 +worst bits: 215.009723 -> 215.009723 +domains: 2/2 -> 2/2 +time: 341.947428 ns -> 341.630046 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +hypot + +fltx hypot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.93090326 -> 229.93090326 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 165.495418 ns -> 165.072867 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +229.9 + + +fltx hypot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.93090326 -> 229.93090326 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 165.495418 ns -> 165.072867 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +213.9 + + +fltx hypot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.93090326 -> 229.93090326 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 165.495418 ns -> 165.072867 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx hypot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.93090326 -> 229.93090326 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 165.495418 ns -> 165.072867 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +165.5 ns (-0.423 ns) + + +fltx hypot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.93090326 -> 229.93090326 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 165.495418 ns -> 165.072867 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx hypot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.93090326 -> 229.93090326 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 165.495418 ns -> 165.072867 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx hypot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.93090326 -> 229.93090326 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 165.495418 ns -> 165.072867 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +pow + +fltx pow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2682.275391 ns -> 2624.560547 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +216.8 + + +fltx pow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2682.275391 ns -> 2624.560547 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +211.1 + + +fltx pow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2682.275391 ns -> 2624.560547 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx pow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2682.275391 ns -> 2624.560547 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2,682 ns (-57.71 ns) + + +fltx pow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2682.275391 ns -> 2624.560547 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx pow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2682.275391 ns -> 2624.560547 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx pow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2682.275391 ns -> 2624.560547 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ipow + +fltx ipow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 127.689855 ns -> 127.079504 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +217.2 + + +fltx ipow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 127.689855 ns -> 127.079504 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +213.7 + + +fltx ipow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 127.689855 ns -> 127.079504 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +2/2 + + +fltx ipow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 127.689855 ns -> 127.079504 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +127.7 ns (-0.610 ns) + + +fltx ipow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 127.689855 ns -> 127.079504 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx ipow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 127.689855 ns -> 127.079504 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx ipow +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 127.689855 ns -> 127.079504 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + + +Exponentials + +exp + +fltx exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.760981 -> 216.760981 +worst bits: 209.17081 -> 209.17081 +domains: 2/2 -> 2/2 +time: 1016.015625 ns -> 1011.979167 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +216.8 + + +fltx exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.760981 -> 216.760981 +worst bits: 209.17081 -> 209.17081 +domains: 2/2 -> 2/2 +time: 1016.015625 ns -> 1011.979167 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +209.2 + + +fltx exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.760981 -> 216.760981 +worst bits: 209.17081 -> 209.17081 +domains: 2/2 -> 2/2 +time: 1016.015625 ns -> 1011.979167 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.760981 -> 216.760981 +worst bits: 209.17081 -> 209.17081 +domains: 2/2 -> 2/2 +time: 1016.015625 ns -> 1011.979167 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,016 ns (-4.04 ns) + + +fltx exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.760981 -> 216.760981 +worst bits: 209.17081 -> 209.17081 +domains: 2/2 -> 2/2 +time: 1016.015625 ns -> 1011.979167 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.760981 -> 216.760981 +worst bits: 209.17081 -> 209.17081 +domains: 2/2 -> 2/2 +time: 1016.015625 ns -> 1011.979167 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.760981 -> 216.760981 +worst bits: 209.17081 -> 209.17081 +domains: 2/2 -> 2/2 +time: 1016.015625 ns -> 1011.979167 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +exp2 + +fltx exp2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 863.642578 ns -> 858.320312 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +218.0 + + +fltx exp2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 863.642578 ns -> 858.320312 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +214.2 + + +fltx exp2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 863.642578 ns -> 858.320312 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 863.642578 ns -> 858.320312 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +863.6 ns (-5.32 ns) + + +fltx exp2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 863.642578 ns -> 858.320312 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx exp2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 863.642578 ns -> 858.320312 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 863.642578 ns -> 858.320312 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +expm1 + +fltx expm1 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.154452503 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1015.766059 ns -> 1011.371528 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +227.2 + + +fltx expm1 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.154452503 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1015.766059 ns -> 1011.371528 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +207.0 + + +fltx expm1 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.154452503 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1015.766059 ns -> 1011.371528 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx expm1 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.154452503 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1015.766059 ns -> 1011.371528 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,016 ns (-4.39 ns) + + +fltx expm1 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.154452503 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1015.766059 ns -> 1011.371528 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx expm1 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.154452503 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1015.766059 ns -> 1011.371528 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx expm1 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.154452503 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1015.766059 ns -> 1011.371528 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Logarithms + +log + +fltx log +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.776072084 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1790.351562 ns -> 1769.257812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.8 + + +fltx log +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.776072084 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1790.351562 ns -> 1769.257812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +213.3 + + +fltx log +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.776072084 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1790.351562 ns -> 1769.257812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.776072084 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1790.351562 ns -> 1769.257812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,790 ns (-21.09 ns) + + +fltx log +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.776072084 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1790.351562 ns -> 1769.257812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.776072084 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1790.351562 ns -> 1769.257812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.776072084 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1790.351562 ns -> 1769.257812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log2 + +fltx log2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.61302666 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1827.207031 ns -> 1798.925781 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +218.6 + + +fltx log2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.61302666 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1827.207031 ns -> 1798.925781 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +213.2 + + +fltx log2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.61302666 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1827.207031 ns -> 1798.925781 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.61302666 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1827.207031 ns -> 1798.925781 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,827 ns (-28.28 ns) + + +fltx log2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.61302666 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1827.207031 ns -> 1798.925781 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.61302666 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1827.207031 ns -> 1798.925781 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.61302666 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1827.207031 ns -> 1798.925781 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log10 + +fltx log10 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.44848007 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1847.011719 ns -> 1807.011719 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.4 + + +fltx log10 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.44848007 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1847.011719 ns -> 1807.011719 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +213.3 + + +fltx log10 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.44848007 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1847.011719 ns -> 1807.011719 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log10 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.44848007 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1847.011719 ns -> 1807.011719 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,847 ns (-40.00 ns) + + +fltx log10 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.44848007 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1847.011719 ns -> 1807.011719 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log10 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.44848007 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1847.011719 ns -> 1807.011719 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log10 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.44848007 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1847.011719 ns -> 1807.011719 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log1p + +fltx log1p +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 226.82219119 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1818.964844 ns -> 1812.714844 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +226.8 + + +fltx log1p +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 226.82219119 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1818.964844 ns -> 1812.714844 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +207.0 + + +fltx log1p +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 226.82219119 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1818.964844 ns -> 1812.714844 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx log1p +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 226.82219119 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1818.964844 ns -> 1812.714844 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,819 ns (-6.25 ns) + + +fltx log1p +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 226.82219119 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1818.964844 ns -> 1812.714844 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx log1p +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 226.82219119 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1818.964844 ns -> 1812.714844 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx log1p +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 226.82219119 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1818.964844 ns -> 1812.714844 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Trigonometric + +sin + +fltx sin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 912.858073 ns -> 910.253906 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +222.3 + + +fltx sin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 912.858073 ns -> 910.253906 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +202.9 + + +fltx sin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 912.858073 ns -> 910.253906 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx sin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 912.858073 ns -> 910.253906 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +912.9 ns (-2.60 ns) + + +fltx sin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 912.858073 ns -> 910.253906 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 912.858073 ns -> 910.253906 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 912.858073 ns -> 910.253906 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cos + +fltx cos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 919.912109 ns -> 909.775391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +226.8 + + +fltx cos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 919.912109 ns -> 909.775391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +208.7 + + +fltx cos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 919.912109 ns -> 909.775391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx cos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 919.912109 ns -> 909.775391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +919.9 ns (-10.14 ns) + + +fltx cos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 919.912109 ns -> 909.775391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 919.912109 ns -> 909.775391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 919.912109 ns -> 909.775391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +sincos + +fltx sincos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1018.663194 ns -> 1017.437066 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1018.663194 ns -> 1017.437066 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1018.663194 ns -> 1017.437066 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1018.663194 ns -> 1017.437066 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1,019 ns (-1.23 ns) + + +fltx sincos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1018.663194 ns -> 1017.437066 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1018.663194 ns -> 1017.437066 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1018.663194 ns -> 1017.437066 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +tan + +fltx tan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1106.860352 ns -> 1104.150391 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.1 + + +fltx tan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1106.860352 ns -> 1104.150391 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +202.9 + + +fltx tan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1106.860352 ns -> 1104.150391 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx tan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1106.860352 ns -> 1104.150391 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,107 ns (-2.71 ns) + + +fltx tan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1106.860352 ns -> 1104.150391 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx tan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1106.860352 ns -> 1104.150391 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1106.860352 ns -> 1104.150391 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asin + +fltx asin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1404.508464 ns -> 1381.487165 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.9 + + +fltx asin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1404.508464 ns -> 1381.487165 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.4 + + +fltx asin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1404.508464 ns -> 1381.487165 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1404.508464 ns -> 1381.487165 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,405 ns (-23.02 ns) + + +fltx asin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1404.508464 ns -> 1381.487165 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx asin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1404.508464 ns -> 1381.487165 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asin +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1404.508464 ns -> 1381.487165 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acos + +fltx acos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1424.21875 ns -> 1401.967076 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +216.0 + + +fltx acos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1424.21875 ns -> 1401.967076 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +192.5 + + +fltx acos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1424.21875 ns -> 1401.967076 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1424.21875 ns -> 1401.967076 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,424 ns (-22.25 ns) + + +fltx acos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1424.21875 ns -> 1401.967076 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx acos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1424.21875 ns -> 1401.967076 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acos +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1424.21875 ns -> 1401.967076 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +atan + +fltx atan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 921.321615 ns -> 915.505642 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +218.1 + + +fltx atan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 921.321615 ns -> 915.505642 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.7 + + +fltx atan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 921.321615 ns -> 915.505642 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 921.321615 ns -> 915.505642 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +921.3 ns (-5.82 ns) + + +fltx atan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 921.321615 ns -> 915.505642 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 921.321615 ns -> 915.505642 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 921.321615 ns -> 915.505642 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +atan2 + +fltx atan2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 983.062066 ns -> 977.918837 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.9 + + +fltx atan2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 983.062066 ns -> 977.918837 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.3 + + +fltx atan2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 983.062066 ns -> 977.918837 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx atan2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 983.062066 ns -> 977.918837 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +983.1 ns (-5.14 ns) + + +fltx atan2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 983.062066 ns -> 977.918837 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atan2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 983.062066 ns -> 977.918837 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan2 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 983.062066 ns -> 977.918837 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Hyperbolic + +sinh + +fltx sinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1293.568638 ns -> 1315.359933 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.0 + + +fltx sinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1293.568638 ns -> 1315.359933 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +213.8 + + +fltx sinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1293.568638 ns -> 1315.359933 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1293.568638 ns -> 1315.359933 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,294 ns (+21.79 ns) + + +fltx sinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1293.568638 ns -> 1315.359933 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1293.568638 ns -> 1315.359933 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1293.568638 ns -> 1315.359933 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cosh + +fltx cosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1291.936384 ns -> 1314.0625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.5 + + +fltx cosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1291.936384 ns -> 1314.0625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +214.2 + + +fltx cosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1291.936384 ns -> 1314.0625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx cosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1291.936384 ns -> 1314.0625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,292 ns (+22.13 ns) + + +fltx cosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1291.936384 ns -> 1314.0625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1291.936384 ns -> 1314.0625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1291.936384 ns -> 1314.0625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +tanh + +fltx tanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1271.833147 ns -> 1260.839844 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +219.1 + + +fltx tanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1271.833147 ns -> 1260.839844 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.0 + + +fltx tanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1271.833147 ns -> 1260.839844 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx tanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1271.833147 ns -> 1260.839844 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,272 ns (-10.99 ns) + + +fltx tanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1271.833147 ns -> 1260.839844 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx tanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1271.833147 ns -> 1260.839844 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1271.833147 ns -> 1260.839844 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asinh + +fltx asinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2693.237305 ns -> 2675.537109 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.2 + + +fltx asinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2693.237305 ns -> 2675.537109 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +213.0 + + +fltx asinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2693.237305 ns -> 2675.537109 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2693.237305 ns -> 2675.537109 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2,693 ns (-17.70 ns) + + +fltx asinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2693.237305 ns -> 2675.537109 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx asinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2693.237305 ns -> 2675.537109 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asinh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2693.237305 ns -> 2675.537109 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acosh + +fltx acosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2491.577148 ns -> 2489.941406 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.7 + + +fltx acosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2491.577148 ns -> 2489.941406 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +213.7 + + +fltx acosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2491.577148 ns -> 2489.941406 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2491.577148 ns -> 2489.941406 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2,492 ns (-1.64 ns) + + +fltx acosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2491.577148 ns -> 2489.941406 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx acosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2491.577148 ns -> 2489.941406 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acosh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2491.577148 ns -> 2489.941406 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +atanh + +fltx atanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2341.650391 ns -> 2330.34668 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +218.3 + + +fltx atanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2341.650391 ns -> 2330.34668 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +213.3 + + +fltx atanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2341.650391 ns -> 2330.34668 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2341.650391 ns -> 2330.34668 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2,342 ns (-11.30 ns) + + +fltx atanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2341.650391 ns -> 2330.34668 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2341.650391 ns -> 2330.34668 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atanh +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2341.650391 ns -> 2330.34668 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Special + +erfc + +fltx erfc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 10510.9375 ns -> 10389.0625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +208.2 + + +fltx erfc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 10510.9375 ns -> 10389.0625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +189.8 + + +fltx erfc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 10510.9375 ns -> 10389.0625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx erfc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 10510.9375 ns -> 10389.0625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +10,511 ns (-121.9 ns) + + +fltx erfc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 10510.9375 ns -> 10389.0625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx erfc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 10510.9375 ns -> 10389.0625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx erfc +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 10510.9375 ns -> 10389.0625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +erf + +fltx erf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 10458.59375 ns -> 10403.125 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +212.8 + + +fltx erf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 10458.59375 ns -> 10403.125 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +196.8 + + +fltx erf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 10458.59375 ns -> 10403.125 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx erf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 10458.59375 ns -> 10403.125 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +10,459 ns (-55.47 ns) + + +fltx erf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 10458.59375 ns -> 10403.125 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx erf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 10458.59375 ns -> 10403.125 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx erf +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 10458.59375 ns -> 10403.125 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +tgamma + +fltx tgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 10653.90625 ns -> 10572.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +209.0 + + +fltx tgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 10653.90625 ns -> 10572.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +202.5 + + +fltx tgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 10653.90625 ns -> 10572.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx tgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 10653.90625 ns -> 10572.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +10,654 ns (-81.25 ns) + + +fltx tgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 10653.90625 ns -> 10572.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx tgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 10653.90625 ns -> 10572.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx tgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 10653.90625 ns -> 10572.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +lgamma + +fltx lgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 9634.375 ns -> 9572.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +211.9 + + +fltx lgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 9634.375 ns -> 9572.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +199.2 + + +fltx lgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 9634.375 ns -> 9572.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 9634.375 ns -> 9572.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +9,634 ns (-61.72 ns) + + +fltx lgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 9634.375 ns -> 9572.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx lgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 9634.375 ns -> 9572.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lgamma +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 9634.375 ns -> 9572.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + + +Comparisons + +equal + +fltx equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.733802 ns -> 0.734277 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.733802 ns -> 0.734277 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.733802 ns -> 0.734277 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.733802 ns -> 0.734277 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.734 ns (+0.000 ns) + + +fltx equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.733802 ns -> 0.734277 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.733802 ns -> 0.734277 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.733802 ns -> 0.734277 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +not_equal + +fltx not_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.643373 ns -> 0.644019 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.643373 ns -> 0.644019 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.643373 ns -> 0.644019 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx not_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.643373 ns -> 0.644019 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.643 ns (+0.001 ns) + + +fltx not_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.643373 ns -> 0.644019 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx not_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.643373 ns -> 0.644019 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx not_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.643373 ns -> 0.644019 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less + +fltx less +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.856641 ns -> 0.84071 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.856641 ns -> 0.84071 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.856641 ns -> 0.84071 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.856641 ns -> 0.84071 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.857 ns (-0.016 ns) + + +fltx less +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.856641 ns -> 0.84071 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.856641 ns -> 0.84071 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.856641 ns -> 0.84071 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater + +fltx greater +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.808347 ns -> 0.785446 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.808347 ns -> 0.785446 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.808347 ns -> 0.785446 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.808347 ns -> 0.785446 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.808 ns (-0.023 ns) + + +fltx greater +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.808347 ns -> 0.785446 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.808347 ns -> 0.785446 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.808347 ns -> 0.785446 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less_equal + +fltx less_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.796284 ns -> 0.692103 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.796284 ns -> 0.692103 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.796284 ns -> 0.692103 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.796284 ns -> 0.692103 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.796 ns (-0.104 ns) + + +fltx less_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.796284 ns -> 0.692103 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.796284 ns -> 0.692103 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.796284 ns -> 0.692103 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater_equal + +fltx greater_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.789589 ns -> 0.690875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.789589 ns -> 0.690875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.789589 ns -> 0.690875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.789589 ns -> 0.690875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.790 ns (-0.099 ns) + + +fltx greater_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.789589 ns -> 0.690875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.789589 ns -> 0.690875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater_equal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.789589 ns -> 0.690875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + + +Random + +uniform_real + +fltx uniform_real +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 14.855558 ns -> 14.343955 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 14.855558 ns -> 14.343955 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 14.855558 ns -> 14.343955 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 14.855558 ns -> 14.343955 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +14.86 ns (-0.512 ns) + + +fltx uniform_real +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 14.855558 ns -> 14.343955 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 14.855558 ns -> 14.343955 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 14.855558 ns -> 14.343955 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +normal + +fltx normal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 292.533967 ns -> 290.425027 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 292.533967 ns -> 290.425027 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 292.533967 ns -> 290.425027 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 292.533967 ns -> 290.425027 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +292.5 ns (-2.11 ns) + + +fltx normal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 292.533967 ns -> 290.425027 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 292.533967 ns -> 290.425027 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 292.533967 ns -> 290.425027 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Mixed Workloads + +product_sum + +fltx product_sum +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 58.569336 ns -> 58.042399 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 58.569336 ns -> 58.042399 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 58.569336 ns -> 58.042399 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 58.569336 ns -> 58.042399 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +58.57 ns (-0.527 ns) + + +fltx product_sum +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 58.569336 ns -> 58.042399 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 58.569336 ns -> 58.042399 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 58.569336 ns -> 58.042399 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +chained_arithmetic + +fltx chained_arithmetic +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 151.691846 ns -> 151.306099 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 151.691846 ns -> 151.306099 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 151.691846 ns -> 151.306099 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 151.691846 ns -> 151.306099 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +151.7 ns (-0.386 ns) + + +fltx chained_arithmetic +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 151.691846 ns -> 151.306099 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 151.691846 ns -> 151.306099 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 151.691846 ns -> 151.306099 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +affine_trig + +fltx affine_trig +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1851.710304 ns -> 1840.349265 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1851.710304 ns -> 1840.349265 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1851.710304 ns -> 1840.349265 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1851.710304 ns -> 1840.349265 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1,852 ns (-11.36 ns) + + +fltx affine_trig +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1851.710304 ns -> 1840.349265 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1851.710304 ns -> 1840.349265 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1851.710304 ns -> 1840.349265 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +mandelbrot + +fltx mandelbrot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 128.355991 ns -> 125.520833 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 128.355991 ns -> 125.520833 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 128.355991 ns -> 125.520833 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 128.355991 ns -> 125.520833 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +128.4 ns (-2.84 ns) + + +fltx mandelbrot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 128.355991 ns -> 125.520833 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 128.355991 ns -> 125.520833 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 128.355991 ns -> 125.520833 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +matrix_vector_4x4 + +fltx matrix_vector_4x4 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 594.191576 ns -> 594.861261 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 594.191576 ns -> 594.861261 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 594.191576 ns -> 594.861261 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 594.191576 ns -> 594.861261 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +594.2 ns (+0.670 ns) + + +fltx matrix_vector_4x4 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 594.191576 ns -> 594.861261 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 594.191576 ns -> 594.861261 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 594.191576 ns -> 594.861261 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +horner_polynomial + +fltx horner_polynomial +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 442.219939 ns -> 434.448935 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 442.219939 ns -> 434.448935 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 442.219939 ns -> 434.448935 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 442.219939 ns -> 434.448935 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +442.2 ns (-7.77 ns) + + +fltx horner_polynomial +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 442.219939 ns -> 434.448935 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 442.219939 ns -> 434.448935 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 442.219939 ns -> 434.448935 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +newton_root + +fltx newton_root +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 246.195284 ns -> 244.132369 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 246.195284 ns -> 244.132369 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 246.195284 ns -> 244.132369 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 246.195284 ns -> 244.132369 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +246.2 ns (-2.06 ns) + + +fltx newton_root +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 246.195284 ns -> 244.132369 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 246.195284 ns -> 244.132369 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 246.195284 ns -> 244.132369 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +log_sum_exp + +fltx log_sum_exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8950 ns -> 8837.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8950 ns -> 8837.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8950 ns -> 8837.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8950 ns -> 8837.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +8,950 ns (-112.5 ns) + + +fltx log_sum_exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8950 ns -> 8837.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8950 ns -> 8837.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8950 ns -> 8837.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +haversine + +fltx haversine +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4891.647982 ns -> 4850.884956 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4891.647982 ns -> 4850.884956 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4891.647982 ns -> 4850.884956 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4891.647982 ns -> 4850.884956 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +4,892 ns (-40.76 ns) + + +fltx haversine +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4891.647982 ns -> 4850.884956 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4891.647982 ns -> 4850.884956 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bd8465fefb349c8bd408bdef2fbe2ea +fast-math run: 081f2f75d252445da1de5098f50b7f37 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4891.647982 ns -> 4850.884956 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deltas: green improves under fast-math; red regresses. + diff --git a/validation/metrics/generated/profile_comparison/windows_x86_64_MSVC_f128_strict_fastmath_comp.svg b/validation/metrics/generated/profile_comparison/windows_x86_64_MSVC_f128_strict_fastmath_comp.svg new file mode 100644 index 0000000..9033d30 --- /dev/null +++ b/validation/metrics/generated/profile_comparison/windows_x86_64_MSVC_f128_strict_fastmath_comp.svg @@ -0,0 +1,9359 @@ + + + + +f128 strict vs consumer fast-math — Windows / x64 / MSVC +Strict first; deltas are fast-math - strict. Accuracy excludes the separate subnormal domain. + +operation + +bl::f128 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + +Arithmetic + +add + +fltx add +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.910787 ns -> 1.856564 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +119.1 + + +fltx add +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.910787 ns -> 1.856564 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +105.7 + + +fltx add +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.910787 ns -> 1.856564 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +1/1 + + +fltx add +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.910787 ns -> 1.856564 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +1.91 ns (-0.054 ns) + + +fltx add +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.910787 ns -> 1.856564 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +Both (-Inf) + + +fltx add +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.910787 ns -> 1.856564 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +✗ + + +fltx add +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.910787 ns -> 1.856564 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +✓ + + +subtract + +fltx subtract +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 2.143327 ns -> 1.852747 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +118.9 + + +fltx subtract +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 2.143327 ns -> 1.852747 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +105.7 + + +fltx subtract +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 2.143327 ns -> 1.852747 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +1/1 + + +fltx subtract +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 2.143327 ns -> 1.852747 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +2.14 ns (-0.291 ns) + + +fltx subtract +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 2.143327 ns -> 1.852747 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +Both (-Inf) + + +fltx subtract +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 2.143327 ns -> 1.852747 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +✗ + + +fltx subtract +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 2.143327 ns -> 1.852747 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> yes + +✓ + + +multiply + +fltx multiply +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.625176 ns -> 2.435891 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +108.7 + + +fltx multiply +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.625176 ns -> 2.435891 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +105.4 + + +fltx multiply +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.625176 ns -> 2.435891 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +1/1 + + +fltx multiply +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.625176 ns -> 2.435891 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +1.63 ns (+0.811 ns) + + +fltx multiply +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.625176 ns -> 2.435891 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +Both (-Inf) + + +fltx multiply +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.625176 ns -> 2.435891 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +✓ (✗) + + +fltx multiply +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.625176 ns -> 2.435891 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +✓ + + +divide + +fltx divide +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 1.675125 ns -> 1.845349 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +110.9 + + +fltx divide +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 1.675125 ns -> 1.845349 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +105.1 + + +fltx divide +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 1.675125 ns -> 1.845349 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +1/1 + + +fltx divide +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 1.675125 ns -> 1.845349 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +1.68 ns (+0.170 ns) + + +fltx divide +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 1.675125 ns -> 1.845349 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +Both (-Inf) + + +fltx divide +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 1.675125 ns -> 1.845349 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +✓ (✗) + + +fltx divide +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 1.675125 ns -> 1.845349 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +✓ + + + +IO + +to_string + +fltx to_string +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 248.651433 ns -> 213.526581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +114.0 + + +fltx to_string +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 248.651433 ns -> 213.526581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.7 + + +fltx to_string +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 248.651433 ns -> 213.526581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_string +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 248.651433 ns -> 213.526581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +248.7 ns (-35.12 ns) + + +fltx to_string +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 248.651433 ns -> 213.526581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_string +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 248.651433 ns -> 213.526581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_string +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 248.651433 ns -> 213.526581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +to_chars + +fltx to_chars +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 207.456364 ns -> 180.934374 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +114.0 + + +fltx to_chars +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 207.456364 ns -> 180.934374 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.7 + + +fltx to_chars +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 207.456364 ns -> 180.934374 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_chars +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 207.456364 ns -> 180.934374 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +207.5 ns (-26.52 ns) + + +fltx to_chars +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 207.456364 ns -> 180.934374 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_chars +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 207.456364 ns -> 180.934374 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_chars +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 207.456364 ns -> 180.934374 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +parse + +fltx parse +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.936763821 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 226.106638 ns -> 226.225909 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +109.9 + + +fltx parse +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.936763821 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 226.106638 ns -> 226.225909 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +106.0 + + +fltx parse +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.936763821 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 226.106638 ns -> 226.225909 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx parse +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.936763821 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 226.106638 ns -> 226.225909 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +226.1 ns (+0.119 ns) + + +fltx parse +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.936763821 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 226.106638 ns -> 226.225909 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx parse +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.936763821 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 226.106638 ns -> 226.225909 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx parse +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.936763821 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 226.106638 ns -> 226.225909 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Rounding + +floor + +fltx floor +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.379161 ns -> 2.853442 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.379161 ns -> 2.853442 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.379161 ns -> 2.853442 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx floor +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.379161 ns -> 2.853442 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.38 ns (+1.47 ns) + + +fltx floor +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.379161 ns -> 2.853442 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx floor +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.379161 ns -> 2.853442 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx floor +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.379161 ns -> 2.853442 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ceil + +fltx ceil +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.941968 ns -> 3.327026 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ceil +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.941968 ns -> 3.327026 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ceil +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.941968 ns -> 3.327026 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ceil +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.941968 ns -> 3.327026 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.94 ns (+1.39 ns) + + +fltx ceil +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.941968 ns -> 3.327026 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx ceil +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.941968 ns -> 3.327026 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ceil +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.941968 ns -> 3.327026 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +trunc + +fltx trunc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.468887 ns -> 3.966581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx trunc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.468887 ns -> 3.966581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx trunc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.468887 ns -> 3.966581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx trunc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.468887 ns -> 3.966581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.47 ns (+0.498 ns) + + +fltx trunc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.468887 ns -> 3.966581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx trunc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.468887 ns -> 3.966581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx trunc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.468887 ns -> 3.966581 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round + +fltx round +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.303406 ns -> 9.965242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.303406 ns -> 9.965242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.303406 ns -> 9.965242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.303406 ns -> 9.965242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +10.30 ns (-0.338 ns) + + +fltx round +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.303406 ns -> 9.965242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.303406 ns -> 9.965242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.303406 ns -> 9.965242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +roundeven + +fltx roundeven +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.584263 ns -> 10.097778 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.584263 ns -> 10.097778 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.584263 ns -> 10.097778 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx roundeven +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.584263 ns -> 10.097778 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +9.58 ns (+0.514 ns) + + +fltx roundeven +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.584263 ns -> 10.097778 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx roundeven +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.584263 ns -> 10.097778 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx roundeven +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.584263 ns -> 10.097778 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +lround + +fltx lround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.354148 ns -> 4.552053 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.354148 ns -> 4.552053 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.354148 ns -> 4.552053 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.354148 ns -> 4.552053 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +4.35 ns (+0.198 ns) + + +fltx lround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.354148 ns -> 4.552053 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.354148 ns -> 4.552053 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.354148 ns -> 4.552053 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +llround + +fltx llround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.369123 ns -> 4.365725 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.369123 ns -> 4.365725 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.369123 ns -> 4.365725 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx llround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.369123 ns -> 4.365725 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +4.37 ns (-0.003 ns) + + +fltx llround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.369123 ns -> 4.365725 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.369123 ns -> 4.365725 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.369123 ns -> 4.365725 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +round_decimals + +fltx round_decimals +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 83.590933 ns -> 83.557129 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.2 + + +fltx round_decimals +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 83.590933 ns -> 83.557129 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.0 + + +fltx round_decimals +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 83.590933 ns -> 83.557129 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_decimals +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 83.590933 ns -> 83.557129 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +83.59 ns (-0.034 ns) + + +fltx round_decimals +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 83.590933 ns -> 83.557129 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round_decimals +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 83.590933 ns -> 83.557129 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_decimals +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 83.590933 ns -> 83.557129 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round_significant + +fltx round_significant +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 129.050022 ns -> 128.565809 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +121.3 + + +fltx round_significant +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 129.050022 ns -> 128.565809 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.0 + + +fltx round_significant +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 129.050022 ns -> 128.565809 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_significant +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 129.050022 ns -> 128.565809 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +129.1 ns (-0.484 ns) + + +fltx round_significant +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 129.050022 ns -> 128.565809 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round_significant +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 129.050022 ns -> 128.565809 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_significant +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 129.050022 ns -> 128.565809 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Remainders + +fmod + +fltx fmod +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 17.920127 ns -> 17.879577 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmod +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 17.920127 ns -> 17.879577 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmod +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 17.920127 ns -> 17.879577 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx fmod +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 17.920127 ns -> 17.879577 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +17.92 ns (-0.041 ns) + + +fltx fmod +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 17.920127 ns -> 17.879577 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fmod +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 17.920127 ns -> 17.879577 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmod +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 17.920127 ns -> 17.879577 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remainder + +fltx remainder +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 21.780141 ns -> 22.46176 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +138.0 + + +fltx remainder +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 21.780141 ns -> 22.46176 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.1 + + +fltx remainder +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 21.780141 ns -> 22.46176 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remainder +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 21.780141 ns -> 22.46176 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +21.78 ns (+0.682 ns) + + +fltx remainder +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 21.780141 ns -> 22.46176 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx remainder +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 21.780141 ns -> 22.46176 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remainder +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 21.780141 ns -> 22.46176 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remquo + +fltx remquo +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 21.106445 ns -> 22.250137 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 21.106445 ns -> 22.250137 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 21.106445 ns -> 22.250137 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remquo +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 21.106445 ns -> 22.250137 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +21.11 ns (+1.14 ns) + + +fltx remquo +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 21.106445 ns -> 22.250137 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx remquo +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 21.106445 ns -> 22.250137 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remquo +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 21.106445 ns -> 22.250137 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Float Utils + +abs + +fltx abs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.490382 ns -> 3.391583 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx abs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.490382 ns -> 3.391583 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx abs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.490382 ns -> 3.391583 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx abs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.490382 ns -> 3.391583 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +3.49 ns (-0.099 ns) + + +fltx abs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.490382 ns -> 3.391583 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx abs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.490382 ns -> 3.391583 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx abs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.490382 ns -> 3.391583 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fabs + +fltx fabs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.505099 ns -> 3.421861 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fabs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.505099 ns -> 3.421861 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fabs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.505099 ns -> 3.421861 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx fabs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.505099 ns -> 3.421861 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.51 ns (-0.083 ns) + + +fltx fabs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.505099 ns -> 3.421861 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fabs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.505099 ns -> 3.421861 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fabs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.505099 ns -> 3.421861 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fma + +fltx fma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.44188202 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 5.836921 ns -> 6.14975 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +117.4 + + +fltx fma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.44188202 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 5.836921 ns -> 6.14975 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +99.6 + + +fltx fma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.44188202 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 5.836921 ns -> 6.14975 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +3/3 + + +fltx fma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.44188202 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 5.836921 ns -> 6.14975 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +5.84 ns (+0.313 ns) + + +fltx fma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.44188202 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 5.836921 ns -> 6.14975 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx fma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.44188202 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 5.836921 ns -> 6.14975 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx fma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.44188202 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 5.836921 ns -> 6.14975 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + +recip + +fltx recip +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 24.316129 ns -> 25.573425 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +109.0 + + +fltx recip +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 24.316129 ns -> 25.573425 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +105.2 + + +fltx recip +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 24.316129 ns -> 25.573425 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx recip +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 24.316129 ns -> 25.573425 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +24.32 ns (+1.26 ns) + + +fltx recip +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 24.316129 ns -> 25.573425 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx recip +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 24.316129 ns -> 25.573425 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx recip +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 24.316129 ns -> 25.573425 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fmin + +fltx fmin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.177683 ns -> 1.402224 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.177683 ns -> 1.402224 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.177683 ns -> 1.402224 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.177683 ns -> 1.402224 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.18 ns (-1.78 ns) + + +fltx fmin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.177683 ns -> 1.402224 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fmin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.177683 ns -> 1.402224 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.177683 ns -> 1.402224 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fmax + +fltx fmax +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.239968 ns -> 1.054276 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.239968 ns -> 1.054276 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.239968 ns -> 1.054276 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmax +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.239968 ns -> 1.054276 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.24 ns (-2.19 ns) + + +fltx fmax +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.239968 ns -> 1.054276 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fmax +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.239968 ns -> 1.054276 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmax +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.239968 ns -> 1.054276 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fdim + +fltx fdim +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.766412 ns -> 4.67447 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +138.0 + + +fltx fdim +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.766412 ns -> 4.67447 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +106.2 + + +fltx fdim +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.766412 ns -> 4.67447 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fdim +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.766412 ns -> 4.67447 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.77 ns (+0.908 ns) + + +fltx fdim +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.766412 ns -> 4.67447 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fdim +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.766412 ns -> 4.67447 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fdim +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.766412 ns -> 4.67447 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +copysign + +fltx copysign +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.635665 ns -> 1.635555 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.635665 ns -> 1.635555 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.635665 ns -> 1.635555 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx copysign +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.635665 ns -> 1.635555 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.64 ns (-0.000 ns) + + +fltx copysign +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.635665 ns -> 1.635555 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx copysign +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.635665 ns -> 1.635555 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx copysign +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.635665 ns -> 1.635555 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ldexp + +fltx ldexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.961948 ns -> 2.314134 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.961948 ns -> 2.314134 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.961948 ns -> 2.314134 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ldexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.961948 ns -> 2.314134 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.96 ns (+0.352 ns) + + +fltx ldexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.961948 ns -> 2.314134 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx ldexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.961948 ns -> 2.314134 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ldexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.961948 ns -> 2.314134 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbn + +fltx scalbn +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.182285 ns -> 2.287543 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.182285 ns -> 2.287543 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.182285 ns -> 2.287543 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbn +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.182285 ns -> 2.287543 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2.18 ns (+0.105 ns) + + +fltx scalbn +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.182285 ns -> 2.287543 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx scalbn +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.182285 ns -> 2.287543 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbn +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.182285 ns -> 2.287543 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbln + +fltx scalbln +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.187933 ns -> 2.286806 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.187933 ns -> 2.286806 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.187933 ns -> 2.286806 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbln +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.187933 ns -> 2.286806 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2.19 ns (+0.099 ns) + + +fltx scalbln +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.187933 ns -> 2.286806 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx scalbln +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.187933 ns -> 2.286806 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbln +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.187933 ns -> 2.286806 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +frexp + +fltx frexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.65722 ns -> 2.733057 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx frexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.65722 ns -> 2.733057 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx frexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.65722 ns -> 2.733057 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx frexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.65722 ns -> 2.733057 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +2.66 ns (+0.076 ns) + + +fltx frexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.65722 ns -> 2.733057 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx frexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.65722 ns -> 2.733057 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx frexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.65722 ns -> 2.733057 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +modf + +fltx modf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.886789 ns -> 5.983097 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.886789 ns -> 5.983097 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.886789 ns -> 5.983097 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx modf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.886789 ns -> 5.983097 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +5.89 ns (+0.096 ns) + + +fltx modf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.886789 ns -> 5.983097 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx modf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.886789 ns -> 5.983097 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx modf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.886789 ns -> 5.983097 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ilogb + +fltx ilogb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.321098 ns -> 2.015686 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.321098 ns -> 2.015686 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.321098 ns -> 2.015686 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx ilogb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.321098 ns -> 2.015686 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +2.32 ns (-0.305 ns) + + +fltx ilogb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.321098 ns -> 2.015686 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.321098 ns -> 2.015686 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.321098 ns -> 2.015686 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +logb + +fltx logb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.509642 ns -> 2.221237 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.509642 ns -> 2.221237 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.509642 ns -> 2.221237 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx logb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.509642 ns -> 2.221237 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2.51 ns (-0.288 ns) + + +fltx logb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.509642 ns -> 2.221237 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx logb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.509642 ns -> 2.221237 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx logb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.509642 ns -> 2.221237 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +nextafter + +fltx nextafter +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.861433 ns -> 6.769767 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.861433 ns -> 6.769767 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.861433 ns -> 6.769767 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.861433 ns -> 6.769767 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +5.86 ns (+0.908 ns) + + +fltx nextafter +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.861433 ns -> 6.769767 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.861433 ns -> 6.769767 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.861433 ns -> 6.769767 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +nexttoward + +fltx nexttoward +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.851528 ns -> 6.790324 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.851528 ns -> 6.790324 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.851528 ns -> 6.790324 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.851528 ns -> 6.790324 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +5.85 ns (+0.939 ns) + + +fltx nexttoward +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.851528 ns -> 6.790324 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.851528 ns -> 6.790324 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.851528 ns -> 6.790324 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Roots & powers + +sqr + +fltx sqr +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.613014 ns -> 2.161878 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.7 + + +fltx sqr +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.613014 ns -> 2.161878 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +105.4 + + +fltx sqr +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.613014 ns -> 2.161878 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sqr +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.613014 ns -> 2.161878 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.61 ns (+0.549 ns) + + +fltx sqr +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.613014 ns -> 2.161878 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sqr +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.613014 ns -> 2.161878 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sqr +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.613014 ns -> 2.161878 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +sqrt + +fltx sqrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 4.100666 ns -> 4.282252 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +109.5 + + +fltx sqrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 4.100666 ns -> 4.282252 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +104.7 + + +fltx sqrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 4.100666 ns -> 4.282252 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +3/3 + + +fltx sqrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 4.100666 ns -> 4.282252 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +4.10 ns (+0.182 ns) + + +fltx sqrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 4.100666 ns -> 4.282252 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx sqrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 4.100666 ns -> 4.282252 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx sqrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 4.100666 ns -> 4.282252 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +cbrt + +fltx cbrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.037583359 -> 108.037583359 +worst bits: 103.019576 -> 103.019576 +domains: 2/2 -> 2/2 +time: 21.984116 ns -> 23.969278 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.0 + + +fltx cbrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.037583359 -> 108.037583359 +worst bits: 103.019576 -> 103.019576 +domains: 2/2 -> 2/2 +time: 21.984116 ns -> 23.969278 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.0 + + +fltx cbrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.037583359 -> 108.037583359 +worst bits: 103.019576 -> 103.019576 +domains: 2/2 -> 2/2 +time: 21.984116 ns -> 23.969278 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx cbrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.037583359 -> 108.037583359 +worst bits: 103.019576 -> 103.019576 +domains: 2/2 -> 2/2 +time: 21.984116 ns -> 23.969278 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +21.98 ns (+1.99 ns) + + +fltx cbrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.037583359 -> 108.037583359 +worst bits: 103.019576 -> 103.019576 +domains: 2/2 -> 2/2 +time: 21.984116 ns -> 23.969278 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx cbrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.037583359 -> 108.037583359 +worst bits: 103.019576 -> 103.019576 +domains: 2/2 -> 2/2 +time: 21.984116 ns -> 23.969278 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx cbrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.037583359 -> 108.037583359 +worst bits: 103.019576 -> 103.019576 +domains: 2/2 -> 2/2 +time: 21.984116 ns -> 23.969278 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +hypot + +fltx hypot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379344938 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 8.88267 ns -> 8.769317 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +122.4 + + +fltx hypot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379344938 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 8.88267 ns -> 8.769317 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.4 + + +fltx hypot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379344938 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 8.88267 ns -> 8.769317 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx hypot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379344938 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 8.88267 ns -> 8.769317 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +8.88 ns (-0.113 ns) + + +fltx hypot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379344938 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 8.88267 ns -> 8.769317 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx hypot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379344938 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 8.88267 ns -> 8.769317 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx hypot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379344938 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 8.88267 ns -> 8.769317 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +pow + +fltx pow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 202.390253 ns -> 195.877511 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.1 + + +fltx pow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 202.390253 ns -> 195.877511 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +101.3 + + +fltx pow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 202.390253 ns -> 195.877511 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx pow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 202.390253 ns -> 195.877511 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +202.4 ns (-6.51 ns) + + +fltx pow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 202.390253 ns -> 195.877511 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx pow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 202.390253 ns -> 195.877511 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx pow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 202.390253 ns -> 195.877511 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ipow + +fltx ipow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 15.29398 ns -> 15.106392 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +106.5 + + +fltx ipow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 15.29398 ns -> 15.106392 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +103.2 + + +fltx ipow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 15.29398 ns -> 15.106392 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +2/2 + + +fltx ipow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 15.29398 ns -> 15.106392 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +15.29 ns (-0.188 ns) + + +fltx ipow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 15.29398 ns -> 15.106392 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx ipow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 15.29398 ns -> 15.106392 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx ipow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 15.29398 ns -> 15.106392 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + + +Exponentials + +exp + +fltx exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.989164 -> 106.989164 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 110.719477 ns -> 100.127429 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.0 + + +fltx exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.989164 -> 106.989164 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 110.719477 ns -> 100.127429 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.6 + + +fltx exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.989164 -> 106.989164 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 110.719477 ns -> 100.127429 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.989164 -> 106.989164 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 110.719477 ns -> 100.127429 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +110.7 ns (-10.59 ns) + + +fltx exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.989164 -> 106.989164 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 110.719477 ns -> 100.127429 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.989164 -> 106.989164 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 110.719477 ns -> 100.127429 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.989164 -> 106.989164 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 110.719477 ns -> 100.127429 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +exp2 + +fltx exp2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 96.38228 ns -> 96.116536 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +108.9 + + +fltx exp2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 96.38228 ns -> 96.116536 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +105.1 + + +fltx exp2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 96.38228 ns -> 96.116536 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 96.38228 ns -> 96.116536 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +96.38 ns (-0.266 ns) + + +fltx exp2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 96.38228 ns -> 96.116536 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx exp2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 96.38228 ns -> 96.116536 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 96.38228 ns -> 96.116536 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +expm1 + +fltx expm1 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 112.674873 ns -> 100.329306 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +121.6 + + +fltx expm1 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 112.674873 ns -> 100.329306 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.1 + + +fltx expm1 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 112.674873 ns -> 100.329306 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx expm1 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 112.674873 ns -> 100.329306 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +112.7 ns (-12.35 ns) + + +fltx expm1 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 112.674873 ns -> 100.329306 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx expm1 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 112.674873 ns -> 100.329306 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx expm1 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 112.674873 ns -> 100.329306 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Logarithms + +log + +fltx log +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 125.30733 ns -> 114.752692 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +108.4 + + +fltx log +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 125.30733 ns -> 114.752692 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.7 + + +fltx log +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 125.30733 ns -> 114.752692 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 125.30733 ns -> 114.752692 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +125.3 ns (-10.55 ns) + + +fltx log +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 125.30733 ns -> 114.752692 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 125.30733 ns -> 114.752692 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.40767633 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 125.30733 ns -> 114.752692 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log2 + +fltx log2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 116.85758 ns -> 116.827228 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +108.8 + + +fltx log2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 116.85758 ns -> 116.827228 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.7 + + +fltx log2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 116.85758 ns -> 116.827228 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 116.85758 ns -> 116.827228 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +116.9 ns (-0.030 ns) + + +fltx log2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 116.85758 ns -> 116.827228 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 116.85758 ns -> 116.827228 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.785650924 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 116.85758 ns -> 116.827228 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log10 + +fltx log10 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 129.795714 ns -> 116.713735 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.5 + + +fltx log10 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 129.795714 ns -> 116.713735 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.8 + + +fltx log10 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 129.795714 ns -> 116.713735 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log10 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 129.795714 ns -> 116.713735 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +129.8 ns (-13.08 ns) + + +fltx log10 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 129.795714 ns -> 116.713735 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log10 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 129.795714 ns -> 116.713735 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log10 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.503050022 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 129.795714 ns -> 116.713735 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log1p + +fltx log1p +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 137.565104 ns -> 120.789931 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +121.4 + + +fltx log1p +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 137.565104 ns -> 120.789931 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.6 + + +fltx log1p +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 137.565104 ns -> 120.789931 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx log1p +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 137.565104 ns -> 120.789931 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +137.6 ns (-16.78 ns) + + +fltx log1p +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 137.565104 ns -> 120.789931 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx log1p +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 137.565104 ns -> 120.789931 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx log1p +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 137.565104 ns -> 120.789931 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Trigonometric + +sin + +fltx sin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 103.625977 ns -> 87.1875 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.6 + + +fltx sin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 103.625977 ns -> 87.1875 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +98.6 + + +fltx sin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 103.625977 ns -> 87.1875 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx sin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 103.625977 ns -> 87.1875 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.6 ns (-16.44 ns) + + +fltx sin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 103.625977 ns -> 87.1875 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 103.625977 ns -> 87.1875 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 103.625977 ns -> 87.1875 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cos + +fltx cos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 104.239258 ns -> 86.450195 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +113.5 + + +fltx cos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 104.239258 ns -> 86.450195 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +99.2 + + +fltx cos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 104.239258 ns -> 86.450195 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx cos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 104.239258 ns -> 86.450195 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +104.2 ns (-17.79 ns) + + +fltx cos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 104.239258 ns -> 86.450195 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 104.239258 ns -> 86.450195 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 104.239258 ns -> 86.450195 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +sincos + +fltx sincos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 92.818778 ns -> 93.025527 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 92.818778 ns -> 93.025527 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 92.818778 ns -> 93.025527 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 92.818778 ns -> 93.025527 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +92.82 ns (+0.207 ns) + + +fltx sincos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 92.818778 ns -> 93.025527 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 92.818778 ns -> 93.025527 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 92.818778 ns -> 93.025527 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +tan + +fltx tan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 107.129945 ns -> 93.185147 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +106.7 + + +fltx tan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 107.129945 ns -> 93.185147 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +98.6 + + +fltx tan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 107.129945 ns -> 93.185147 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx tan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 107.129945 ns -> 93.185147 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.1 ns (-13.94 ns) + + +fltx tan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 107.129945 ns -> 93.185147 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx tan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 107.129945 ns -> 93.185147 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 107.129945 ns -> 93.185147 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asin + +fltx asin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 166.085938 ns -> 157.613571 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.6 + + +fltx asin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 166.085938 ns -> 157.613571 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.1 + + +fltx asin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 166.085938 ns -> 157.613571 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 166.085938 ns -> 157.613571 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +166.1 ns (-8.47 ns) + + +fltx asin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 166.085938 ns -> 157.613571 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx asin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 166.085938 ns -> 157.613571 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 166.085938 ns -> 157.613571 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acos + +fltx acos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 170.123047 ns -> 162.599534 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +106.5 + + +fltx acos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 170.123047 ns -> 162.599534 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +81.6 + + +fltx acos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 170.123047 ns -> 162.599534 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 170.123047 ns -> 162.599534 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +170.1 ns (-7.52 ns) + + +fltx acos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 170.123047 ns -> 162.599534 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx acos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 170.123047 ns -> 162.599534 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 170.123047 ns -> 162.599534 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +atan + +fltx atan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 121.962603 ns -> 116.881975 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.7 + + +fltx atan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 121.962603 ns -> 116.881975 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.9 + + +fltx atan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 121.962603 ns -> 116.881975 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 121.962603 ns -> 116.881975 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +122.0 ns (-5.08 ns) + + +fltx atan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 121.962603 ns -> 116.881975 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 121.962603 ns -> 116.881975 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 121.962603 ns -> 116.881975 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +atan2 + +fltx atan2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 118.433315 ns -> 118.184989 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.7 + + +fltx atan2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 118.433315 ns -> 118.184989 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.5 + + +fltx atan2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 118.433315 ns -> 118.184989 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx atan2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 118.433315 ns -> 118.184989 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +118.4 ns (-0.248 ns) + + +fltx atan2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 118.433315 ns -> 118.184989 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atan2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 118.433315 ns -> 118.184989 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 118.433315 ns -> 118.184989 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Hyperbolic + +sinh + +fltx sinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 131.424028 ns -> 110.564031 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.4 + + +fltx sinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 131.424028 ns -> 110.564031 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.6 + + +fltx sinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 131.424028 ns -> 110.564031 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 131.424028 ns -> 110.564031 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +131.4 ns (-20.86 ns) + + +fltx sinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 131.424028 ns -> 110.564031 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 131.424028 ns -> 110.564031 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 131.424028 ns -> 110.564031 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cosh + +fltx cosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 132.580879 ns -> 107.177734 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.9 + + +fltx cosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 132.580879 ns -> 107.177734 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +104.4 + + +fltx cosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 132.580879 ns -> 107.177734 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx cosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 132.580879 ns -> 107.177734 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +132.6 ns (-25.40 ns) + + +fltx cosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 132.580879 ns -> 107.177734 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 132.580879 ns -> 107.177734 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 132.580879 ns -> 107.177734 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +tanh + +fltx tanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 140.079973 ns -> 113.227143 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +109.2 + + +fltx tanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 140.079973 ns -> 113.227143 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.8 + + +fltx tanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 140.079973 ns -> 113.227143 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx tanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 140.079973 ns -> 113.227143 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +140.1 ns (-26.85 ns) + + +fltx tanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 140.079973 ns -> 113.227143 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx tanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 140.079973 ns -> 113.227143 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 140.079973 ns -> 113.227143 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asinh + +fltx asinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 131.335449 ns -> 119.083659 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.1 + + +fltx asinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 131.335449 ns -> 119.083659 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.8 + + +fltx asinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 131.335449 ns -> 119.083659 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 131.335449 ns -> 119.083659 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +131.3 ns (-12.25 ns) + + +fltx asinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 131.335449 ns -> 119.083659 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx asinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 131.335449 ns -> 119.083659 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 131.335449 ns -> 119.083659 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acosh + +fltx acosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 142.783203 ns -> 133.358765 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +108.0 + + +fltx acosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 142.783203 ns -> 133.358765 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.7 + + +fltx acosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 142.783203 ns -> 133.358765 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 142.783203 ns -> 133.358765 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +142.8 ns (-9.42 ns) + + +fltx acosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 142.783203 ns -> 133.358765 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx acosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 142.783203 ns -> 133.358765 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031519376 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 142.783203 ns -> 133.358765 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +atanh + +fltx atanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 142.823893 ns -> 130.92152 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.1 + + +fltx atanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 142.823893 ns -> 130.92152 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.1 + + +fltx atanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 142.823893 ns -> 130.92152 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 142.823893 ns -> 130.92152 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +142.8 ns (-11.90 ns) + + +fltx atanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 142.823893 ns -> 130.92152 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 142.823893 ns -> 130.92152 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 142.823893 ns -> 130.92152 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Special + +erfc + +fltx erfc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 561.045259 ns -> 560.361494 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.2 + + +fltx erfc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 561.045259 ns -> 560.361494 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +99.2 + + +fltx erfc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 561.045259 ns -> 560.361494 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx erfc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 561.045259 ns -> 560.361494 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +561.0 ns (-0.684 ns) + + +fltx erfc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 561.045259 ns -> 560.361494 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx erfc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 561.045259 ns -> 560.361494 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx erfc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 561.045259 ns -> 560.361494 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +erf + +fltx erf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 571.552906 ns -> 565.193966 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.9 + + +fltx erf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 571.552906 ns -> 565.193966 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.5 + + +fltx erf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 571.552906 ns -> 565.193966 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx erf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 571.552906 ns -> 565.193966 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +571.6 ns (-6.36 ns) + + +fltx erf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 571.552906 ns -> 565.193966 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx erf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 571.552906 ns -> 565.193966 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx erf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 571.552906 ns -> 565.193966 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +tgamma + +fltx tgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 472.695879 ns -> 473.56404 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +105.6 + + +fltx tgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 472.695879 ns -> 473.56404 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +97.3 + + +fltx tgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 472.695879 ns -> 473.56404 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx tgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 472.695879 ns -> 473.56404 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +472.7 ns (+0.868 ns) + + +fltx tgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 472.695879 ns -> 473.56404 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx tgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 472.695879 ns -> 473.56404 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx tgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 472.695879 ns -> 473.56404 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +lgamma + +fltx lgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 533.374763 ns -> 526.921107 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.3 + + +fltx lgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 533.374763 ns -> 526.921107 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +102.2 + + +fltx lgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 533.374763 ns -> 526.921107 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 533.374763 ns -> 526.921107 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +533.4 ns (-6.45 ns) + + +fltx lgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 533.374763 ns -> 526.921107 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx lgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 533.374763 ns -> 526.921107 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 533.374763 ns -> 526.921107 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + + +Comparisons + +equal + +fltx equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.686876 ns -> 0.670391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.686876 ns -> 0.670391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.686876 ns -> 0.670391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.686876 ns -> 0.670391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.687 ns (-0.016 ns) + + +fltx equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.686876 ns -> 0.670391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.686876 ns -> 0.670391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.686876 ns -> 0.670391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +not_equal + +fltx not_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.68794 ns -> 0.667387 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.68794 ns -> 0.667387 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.68794 ns -> 0.667387 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx not_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.68794 ns -> 0.667387 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.688 ns (-0.021 ns) + + +fltx not_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.68794 ns -> 0.667387 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx not_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.68794 ns -> 0.667387 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx not_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.68794 ns -> 0.667387 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less + +fltx less +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.080254 ns -> 2.016535 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.080254 ns -> 2.016535 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.080254 ns -> 2.016535 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.080254 ns -> 2.016535 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2.08 ns (-0.064 ns) + + +fltx less +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.080254 ns -> 2.016535 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.080254 ns -> 2.016535 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.080254 ns -> 2.016535 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater + +fltx greater +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.063855 ns -> 2.020836 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.063855 ns -> 2.020836 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.063855 ns -> 2.020836 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.063855 ns -> 2.020836 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2.06 ns (-0.043 ns) + + +fltx greater +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.063855 ns -> 2.020836 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.063855 ns -> 2.020836 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.063855 ns -> 2.020836 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less_equal + +fltx less_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.051988 ns -> 2.00302 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.051988 ns -> 2.00302 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.051988 ns -> 2.00302 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.051988 ns -> 2.00302 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2.05 ns (-0.049 ns) + + +fltx less_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.051988 ns -> 2.00302 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.051988 ns -> 2.00302 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.051988 ns -> 2.00302 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater_equal + +fltx greater_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.053209 ns -> 2.134365 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.053209 ns -> 2.134365 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.053209 ns -> 2.134365 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.053209 ns -> 2.134365 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2.05 ns (+0.081 ns) + + +fltx greater_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.053209 ns -> 2.134365 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.053209 ns -> 2.134365 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.053209 ns -> 2.134365 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + + +Random + +uniform_real + +fltx uniform_real +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8.909321 ns -> 9.03491 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8.909321 ns -> 9.03491 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8.909321 ns -> 9.03491 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8.909321 ns -> 9.03491 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +8.91 ns (+0.126 ns) + + +fltx uniform_real +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8.909321 ns -> 9.03491 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8.909321 ns -> 9.03491 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8.909321 ns -> 9.03491 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +normal + +fltx normal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 46.95361 ns -> 58.926334 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 46.95361 ns -> 58.926334 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 46.95361 ns -> 58.926334 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 46.95361 ns -> 58.926334 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +46.95 ns (+11.97 ns) + + +fltx normal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 46.95361 ns -> 58.926334 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 46.95361 ns -> 58.926334 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 46.95361 ns -> 58.926334 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Mixed Workloads + +product_sum + +fltx product_sum +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.004002 ns -> 5.567415 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.004002 ns -> 5.567415 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.004002 ns -> 5.567415 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.004002 ns -> 5.567415 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +5.00 ns (+0.563 ns) + + +fltx product_sum +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.004002 ns -> 5.567415 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.004002 ns -> 5.567415 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.004002 ns -> 5.567415 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +chained_arithmetic + +fltx chained_arithmetic +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 20.203644 ns -> 20.069826 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 20.203644 ns -> 20.069826 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 20.203644 ns -> 20.069826 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 20.203644 ns -> 20.069826 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +20.20 ns (-0.134 ns) + + +fltx chained_arithmetic +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 20.203644 ns -> 20.069826 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 20.203644 ns -> 20.069826 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 20.203644 ns -> 20.069826 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +affine_trig + +fltx affine_trig +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 174.593949 ns -> 174.252289 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 174.593949 ns -> 174.252289 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 174.593949 ns -> 174.252289 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 174.593949 ns -> 174.252289 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +174.6 ns (-0.342 ns) + + +fltx affine_trig +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 174.593949 ns -> 174.252289 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 174.593949 ns -> 174.252289 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 174.593949 ns -> 174.252289 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +mandelbrot + +fltx mandelbrot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 12.906256 ns -> 15.609773 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 12.906256 ns -> 15.609773 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 12.906256 ns -> 15.609773 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 12.906256 ns -> 15.609773 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +12.91 ns (+2.70 ns) + + +fltx mandelbrot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 12.906256 ns -> 15.609773 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 12.906256 ns -> 15.609773 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 12.906256 ns -> 15.609773 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +matrix_vector_4x4 + +fltx matrix_vector_4x4 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 54.992045 ns -> 67.599529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 54.992045 ns -> 67.599529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 54.992045 ns -> 67.599529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 54.992045 ns -> 67.599529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +54.99 ns (+12.61 ns) + + +fltx matrix_vector_4x4 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 54.992045 ns -> 67.599529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 54.992045 ns -> 67.599529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 54.992045 ns -> 67.599529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +horner_polynomial + +fltx horner_polynomial +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 77.857521 ns -> 85.292458 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 77.857521 ns -> 85.292458 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 77.857521 ns -> 85.292458 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 77.857521 ns -> 85.292458 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +77.86 ns (+7.43 ns) + + +fltx horner_polynomial +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 77.857521 ns -> 85.292458 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 77.857521 ns -> 85.292458 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 77.857521 ns -> 85.292458 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +newton_root + +fltx newton_root +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 25.72448 ns -> 31.279791 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 25.72448 ns -> 31.279791 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 25.72448 ns -> 31.279791 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 25.72448 ns -> 31.279791 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +25.72 ns (+5.56 ns) + + +fltx newton_root +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 25.72448 ns -> 31.279791 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 25.72448 ns -> 31.279791 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 25.72448 ns -> 31.279791 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +log_sum_exp + +fltx log_sum_exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 813.788947 ns -> 947.517197 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 813.788947 ns -> 947.517197 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 813.788947 ns -> 947.517197 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 813.788947 ns -> 947.517197 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +813.8 ns (+133.7 ns) + + +fltx log_sum_exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 813.788947 ns -> 947.517197 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 813.788947 ns -> 947.517197 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 813.788947 ns -> 947.517197 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +haversine + +fltx haversine +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 417.312095 ns -> 439.17992 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 417.312095 ns -> 439.17992 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 417.312095 ns -> 439.17992 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 417.312095 ns -> 439.17992 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +417.3 ns (+21.87 ns) + + +fltx haversine +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 417.312095 ns -> 439.17992 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 417.312095 ns -> 439.17992 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 417.312095 ns -> 439.17992 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deltas: green improves under fast-math; red regresses. + diff --git a/validation/metrics/generated/profile_comparison/windows_x86_64_MSVC_f256_strict_fastmath_comp.svg b/validation/metrics/generated/profile_comparison/windows_x86_64_MSVC_f256_strict_fastmath_comp.svg new file mode 100644 index 0000000..3d8be1f --- /dev/null +++ b/validation/metrics/generated/profile_comparison/windows_x86_64_MSVC_f256_strict_fastmath_comp.svg @@ -0,0 +1,9359 @@ + + + + +f256 strict vs consumer fast-math — Windows / x64 / MSVC +Strict first; deltas are fast-math - strict. Accuracy excludes the separate subnormal domain. + +operation + +bl::f256 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + +Arithmetic + +add + +fltx add +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.68201 ns -> 10.642618 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +226.0 + + +fltx add +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.68201 ns -> 10.642618 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +215.3 + + +fltx add +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.68201 ns -> 10.642618 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +1/1 + + +fltx add +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.68201 ns -> 10.642618 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +10.68 ns (-0.039 ns) + + +fltx add +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.68201 ns -> 10.642618 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +Both + + +fltx add +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.68201 ns -> 10.642618 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +✗ + + +fltx add +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.68201 ns -> 10.642618 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +✓ + + +subtract + +fltx subtract +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 10.664854 ns -> 10.650442 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +226.1 + + +fltx subtract +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 10.664854 ns -> 10.650442 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +215.2 + + +fltx subtract +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 10.664854 ns -> 10.650442 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +1/1 + + +fltx subtract +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 10.664854 ns -> 10.650442 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +10.66 ns (-0.014 ns) + + +fltx subtract +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 10.664854 ns -> 10.650442 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +Both + + +fltx subtract +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 10.664854 ns -> 10.650442 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +✗ + + +fltx subtract +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.123353 +worst bits: 215.220788 -> 215.220788 +domains: 1/1 -> 1/1 +time: 10.664854 ns -> 10.650442 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> yes + +✓ + + +multiply + +fltx multiply +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 18.814872 ns -> 18.663885 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +220.0 + + +fltx multiply +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 18.814872 ns -> 18.663885 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +215.2 + + +fltx multiply +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 18.814872 ns -> 18.663885 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx multiply +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 18.814872 ns -> 18.663885 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +18.81 ns (-0.151 ns) + + +fltx multiply +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 18.814872 ns -> 18.663885 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx multiply +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 18.814872 ns -> 18.663885 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx multiply +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 18.814872 ns -> 18.663885 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +divide + +fltx divide +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 80.729167 ns -> 80.507812 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +219.2 + + +fltx divide +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 80.729167 ns -> 80.507812 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +214.8 + + +fltx divide +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 80.729167 ns -> 80.507812 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx divide +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 80.729167 ns -> 80.507812 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +80.73 ns (-0.221 ns) + + +fltx divide +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 80.729167 ns -> 80.507812 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx divide +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 80.729167 ns -> 80.507812 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx divide +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 80.729167 ns -> 80.507812 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + + +IO + +to_string + +fltx to_string +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 346.795386 ns -> 355.387493 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.4 + + +fltx to_string +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 346.795386 ns -> 355.387493 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.0 + + +fltx to_string +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 346.795386 ns -> 355.387493 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_string +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 346.795386 ns -> 355.387493 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +346.8 ns (+8.59 ns) + + +fltx to_string +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 346.795386 ns -> 355.387493 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_string +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 346.795386 ns -> 355.387493 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_string +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 346.795386 ns -> 355.387493 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +to_chars + +fltx to_chars +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 316.132855 ns -> 299.856672 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.4 + + +fltx to_chars +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 316.132855 ns -> 299.856672 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.0 + + +fltx to_chars +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 316.132855 ns -> 299.856672 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_chars +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 316.132855 ns -> 299.856672 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +316.1 ns (-16.28 ns) + + +fltx to_chars +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 316.132855 ns -> 299.856672 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_chars +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 316.132855 ns -> 299.856672 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_chars +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 316.132855 ns -> 299.856672 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +parse + +fltx parse +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729492211 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 415.457429 ns -> 430.329349 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +219.7 + + +fltx parse +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729492211 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 415.457429 ns -> 430.329349 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +212.0 + + +fltx parse +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729492211 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 415.457429 ns -> 430.329349 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx parse +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729492211 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 415.457429 ns -> 430.329349 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +415.5 ns (+14.87 ns) + + +fltx parse +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729492211 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 415.457429 ns -> 430.329349 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx parse +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729492211 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 415.457429 ns -> 430.329349 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx parse +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729492211 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 415.457429 ns -> 430.329349 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Rounding + +floor + +fltx floor +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.899373 ns -> 5.186086 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.899373 ns -> 5.186086 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.899373 ns -> 5.186086 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx floor +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.899373 ns -> 5.186086 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +4.90 ns (+0.287 ns) + + +fltx floor +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.899373 ns -> 5.186086 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx floor +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.899373 ns -> 5.186086 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx floor +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.899373 ns -> 5.186086 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ceil + +fltx ceil +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.883401 ns -> 5.166603 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ceil +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.883401 ns -> 5.166603 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ceil +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.883401 ns -> 5.166603 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ceil +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.883401 ns -> 5.166603 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +4.88 ns (+0.283 ns) + + +fltx ceil +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.883401 ns -> 5.166603 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx ceil +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.883401 ns -> 5.166603 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ceil +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.883401 ns -> 5.166603 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +trunc + +fltx trunc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.774944 ns -> 7.590284 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx trunc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.774944 ns -> 7.590284 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx trunc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.774944 ns -> 7.590284 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx trunc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.774944 ns -> 7.590284 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +6.77 ns (+0.815 ns) + + +fltx trunc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.774944 ns -> 7.590284 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx trunc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.774944 ns -> 7.590284 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx trunc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.774944 ns -> 7.590284 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round + +fltx round +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.893636 ns -> 12.870199 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.893636 ns -> 12.870199 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.893636 ns -> 12.870199 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.893636 ns -> 12.870199 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +12.89 ns (-0.023 ns) + + +fltx round +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.893636 ns -> 12.870199 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.893636 ns -> 12.870199 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 12.893636 ns -> 12.870199 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +roundeven + +fltx roundeven +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.115397 ns -> 9.571359 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.115397 ns -> 9.571359 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.115397 ns -> 9.571359 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx roundeven +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.115397 ns -> 9.571359 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +9.12 ns (+0.456 ns) + + +fltx roundeven +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.115397 ns -> 9.571359 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx roundeven +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.115397 ns -> 9.571359 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx roundeven +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.115397 ns -> 9.571359 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +lround + +fltx lround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.207559 ns -> 8.276418 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.207559 ns -> 8.276418 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.207559 ns -> 8.276418 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.207559 ns -> 8.276418 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +7.21 ns (+1.07 ns) + + +fltx lround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.207559 ns -> 8.276418 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.207559 ns -> 8.276418 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.207559 ns -> 8.276418 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +llround + +fltx llround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.775219 ns -> 6.885068 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.775219 ns -> 6.885068 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.775219 ns -> 6.885068 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx llround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.775219 ns -> 6.885068 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +6.78 ns (+0.110 ns) + + +fltx llround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.775219 ns -> 6.885068 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.775219 ns -> 6.885068 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 6.775219 ns -> 6.885068 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +round_decimals + +fltx round_decimals +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 129.347229 ns -> 126.870728 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.0 + + +fltx round_decimals +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 129.347229 ns -> 126.870728 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +215.3 + + +fltx round_decimals +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 129.347229 ns -> 126.870728 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_decimals +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 129.347229 ns -> 126.870728 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +129.3 ns (-2.48 ns) + + +fltx round_decimals +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 129.347229 ns -> 126.870728 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round_decimals +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 129.347229 ns -> 126.870728 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_decimals +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 129.347229 ns -> 126.870728 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round_significant + +fltx round_significant +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 194.191673 ns -> 179.817708 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +229.6 + + +fltx round_significant +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 194.191673 ns -> 179.817708 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +215.1 + + +fltx round_significant +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 194.191673 ns -> 179.817708 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_significant +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 194.191673 ns -> 179.817708 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +194.2 ns (-14.37 ns) + + +fltx round_significant +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 194.191673 ns -> 179.817708 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round_significant +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 194.191673 ns -> 179.817708 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_significant +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 194.191673 ns -> 179.817708 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Remainders + +fmod + +fltx fmod +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 67.9641 ns -> 67.385101 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +244.0 + + +fltx fmod +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 67.9641 ns -> 67.385101 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.7 + + +fltx fmod +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 67.9641 ns -> 67.385101 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx fmod +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 67.9641 ns -> 67.385101 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +67.96 ns (-0.579 ns) + + +fltx fmod +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 67.9641 ns -> 67.385101 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fmod +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 67.9641 ns -> 67.385101 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmod +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 67.9641 ns -> 67.385101 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remainder + +fltx remainder +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 98.269931 ns -> 96.136068 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remainder +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 98.269931 ns -> 96.136068 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remainder +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 98.269931 ns -> 96.136068 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remainder +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 98.269931 ns -> 96.136068 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +98.27 ns (-2.13 ns) + + +fltx remainder +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 98.269931 ns -> 96.136068 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx remainder +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 98.269931 ns -> 96.136068 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remainder +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 98.269931 ns -> 96.136068 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remquo + +fltx remquo +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 97.306685 ns -> 96.763238 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 97.306685 ns -> 96.763238 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 97.306685 ns -> 96.763238 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remquo +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 97.306685 ns -> 96.763238 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +97.31 ns (-0.543 ns) + + +fltx remquo +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 97.306685 ns -> 96.763238 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx remquo +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 97.306685 ns -> 96.763238 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remquo +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 97.306685 ns -> 96.763238 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Float Utils + +abs + +fltx abs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.642708 ns -> 2.316043 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx abs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.642708 ns -> 2.316043 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx abs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.642708 ns -> 2.316043 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx abs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.642708 ns -> 2.316043 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +2.64 ns (-0.327 ns) + + +fltx abs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.642708 ns -> 2.316043 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx abs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.642708 ns -> 2.316043 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx abs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.642708 ns -> 2.316043 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fabs + +fltx fabs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.651716 ns -> 2.304641 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fabs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.651716 ns -> 2.304641 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fabs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.651716 ns -> 2.304641 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx fabs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.651716 ns -> 2.304641 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2.65 ns (-0.347 ns) + + +fltx fabs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.651716 ns -> 2.304641 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fabs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.651716 ns -> 2.304641 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fabs +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.651716 ns -> 2.304641 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fma + +fltx fma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 24.559191 ns -> 24.520399 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +229.7 + + +fltx fma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 24.559191 ns -> 24.520399 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +215.1 + + +fltx fma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 24.559191 ns -> 24.520399 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +3/3 + + +fltx fma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 24.559191 ns -> 24.520399 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +24.56 ns (-0.039 ns) + + +fltx fma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 24.559191 ns -> 24.520399 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx fma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 24.559191 ns -> 24.520399 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx fma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 24.559191 ns -> 24.520399 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + +recip + +fltx recip +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.92444534 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 74.495443 ns -> 74.480975 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.9 + + +fltx recip +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.92444534 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 74.495443 ns -> 74.480975 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.6 + + +fltx recip +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.92444534 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 74.495443 ns -> 74.480975 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx recip +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.92444534 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 74.495443 ns -> 74.480975 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +74.50 ns (-0.014 ns) + + +fltx recip +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.92444534 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 74.495443 ns -> 74.480975 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx recip +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.92444534 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 74.495443 ns -> 74.480975 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx recip +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.92444534 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 74.495443 ns -> 74.480975 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fmin + +fltx fmin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.406242 ns -> 4.329351 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.406242 ns -> 4.329351 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.406242 ns -> 4.329351 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.406242 ns -> 4.329351 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.41 ns (+0.923 ns) + + +fltx fmin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.406242 ns -> 4.329351 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fmin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.406242 ns -> 4.329351 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.406242 ns -> 4.329351 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fmax + +fltx fmax +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.649925 ns -> 4.105489 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.649925 ns -> 4.105489 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.649925 ns -> 4.105489 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmax +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.649925 ns -> 4.105489 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.65 ns (+0.456 ns) + + +fltx fmax +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.649925 ns -> 4.105489 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fmax +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.649925 ns -> 4.105489 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmax +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 3.649925 ns -> 4.105489 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fdim + +fltx fdim +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 8.222961 ns -> 7.918498 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fdim +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 8.222961 ns -> 7.918498 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fdim +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 8.222961 ns -> 7.918498 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fdim +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 8.222961 ns -> 7.918498 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +8.22 ns (-0.304 ns) + + +fltx fdim +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 8.222961 ns -> 7.918498 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fdim +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 8.222961 ns -> 7.918498 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fdim +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 8.222961 ns -> 7.918498 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +copysign + +fltx copysign +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.863137 ns -> 0.867482 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.863137 ns -> 0.867482 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.863137 ns -> 0.867482 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx copysign +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.863137 ns -> 0.867482 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +0.863 ns (+0.004 ns) + + +fltx copysign +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.863137 ns -> 0.867482 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx copysign +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.863137 ns -> 0.867482 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx copysign +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.863137 ns -> 0.867482 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ldexp + +fltx ldexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.940501 ns -> 4.945054 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.940501 ns -> 4.945054 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.940501 ns -> 4.945054 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ldexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.940501 ns -> 4.945054 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.94 ns (+1.00 ns) + + +fltx ldexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.940501 ns -> 4.945054 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx ldexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.940501 ns -> 4.945054 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ldexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.940501 ns -> 4.945054 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbn + +fltx scalbn +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.951307 ns -> 4.864172 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.951307 ns -> 4.864172 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.951307 ns -> 4.864172 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbn +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.951307 ns -> 4.864172 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.95 ns (+0.913 ns) + + +fltx scalbn +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.951307 ns -> 4.864172 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx scalbn +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.951307 ns -> 4.864172 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbn +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.951307 ns -> 4.864172 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbln + +fltx scalbln +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.943422 ns -> 4.871324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.943422 ns -> 4.871324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.943422 ns -> 4.871324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbln +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.943422 ns -> 4.871324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.94 ns (+0.928 ns) + + +fltx scalbln +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.943422 ns -> 4.871324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx scalbln +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.943422 ns -> 4.871324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbln +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.943422 ns -> 4.871324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +frexp + +fltx frexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.27916 ns -> 10.398387 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx frexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.27916 ns -> 10.398387 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx frexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.27916 ns -> 10.398387 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx frexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.27916 ns -> 10.398387 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +7.28 ns (+3.12 ns) + + +fltx frexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.27916 ns -> 10.398387 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx frexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.27916 ns -> 10.398387 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx frexp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.27916 ns -> 10.398387 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +modf + +fltx modf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 18.387118 ns -> 18.23675 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 18.387118 ns -> 18.23675 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 18.387118 ns -> 18.23675 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx modf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 18.387118 ns -> 18.23675 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +18.39 ns (-0.150 ns) + + +fltx modf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 18.387118 ns -> 18.23675 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx modf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 18.387118 ns -> 18.23675 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx modf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 18.387118 ns -> 18.23675 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ilogb + +fltx ilogb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.621009 ns -> 1.555755 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.621009 ns -> 1.555755 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.621009 ns -> 1.555755 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx ilogb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.621009 ns -> 1.555755 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1.62 ns (-0.065 ns) + + +fltx ilogb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.621009 ns -> 1.555755 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.621009 ns -> 1.555755 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.621009 ns -> 1.555755 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +logb + +fltx logb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.237106 ns -> 2.093436 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.237106 ns -> 2.093436 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.237106 ns -> 2.093436 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx logb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.237106 ns -> 2.093436 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2.24 ns (-0.144 ns) + + +fltx logb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.237106 ns -> 2.093436 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx logb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.237106 ns -> 2.093436 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx logb +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.237106 ns -> 2.093436 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +nextafter + +fltx nextafter +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.867414 ns -> 8.15083 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.867414 ns -> 8.15083 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.867414 ns -> 8.15083 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.867414 ns -> 8.15083 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +6.87 ns (+1.28 ns) + + +fltx nextafter +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.867414 ns -> 8.15083 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.867414 ns -> 8.15083 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.867414 ns -> 8.15083 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +nexttoward + +fltx nexttoward +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.861614 ns -> 8.116064 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.861614 ns -> 8.116064 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.861614 ns -> 8.116064 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.861614 ns -> 8.116064 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +6.86 ns (+1.25 ns) + + +fltx nexttoward +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.861614 ns -> 8.116064 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.861614 ns -> 8.116064 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 6.861614 ns -> 8.116064 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Roots & powers + +sqr + +fltx sqr +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 18.253729 ns -> 18.2676 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.1 + + +fltx sqr +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 18.253729 ns -> 18.2676 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +215.3 + + +fltx sqr +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 18.253729 ns -> 18.2676 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sqr +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 18.253729 ns -> 18.2676 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +18.25 ns (+0.014 ns) + + +fltx sqr +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 18.253729 ns -> 18.2676 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sqr +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 18.253729 ns -> 18.2676 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sqr +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 18.253729 ns -> 18.2676 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +sqrt + +fltx sqrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 122.967529 ns -> 122.149658 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +217.8 + + +fltx sqrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 122.967529 ns -> 122.149658 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +209.6 + + +fltx sqrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 122.967529 ns -> 122.149658 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +3/3 + + +fltx sqrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 122.967529 ns -> 122.149658 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +123.0 ns (-0.818 ns) + + +fltx sqrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 122.967529 ns -> 122.149658 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx sqrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 122.967529 ns -> 122.149658 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx sqrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 122.967529 ns -> 122.149658 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +cbrt + +fltx cbrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.286640743 -> 219.286640743 +worst bits: 215.009723 -> 215.009723 +domains: 2/2 -> 2/2 +time: 344.021739 ns -> 344.421387 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +219.3 + + +fltx cbrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.286640743 -> 219.286640743 +worst bits: 215.009723 -> 215.009723 +domains: 2/2 -> 2/2 +time: 344.021739 ns -> 344.421387 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +215.0 + + +fltx cbrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.286640743 -> 219.286640743 +worst bits: 215.009723 -> 215.009723 +domains: 2/2 -> 2/2 +time: 344.021739 ns -> 344.421387 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx cbrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.286640743 -> 219.286640743 +worst bits: 215.009723 -> 215.009723 +domains: 2/2 -> 2/2 +time: 344.021739 ns -> 344.421387 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +344.0 ns (+0.400 ns) + + +fltx cbrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.286640743 -> 219.286640743 +worst bits: 215.009723 -> 215.009723 +domains: 2/2 -> 2/2 +time: 344.021739 ns -> 344.421387 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx cbrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.286640743 -> 219.286640743 +worst bits: 215.009723 -> 215.009723 +domains: 2/2 -> 2/2 +time: 344.021739 ns -> 344.421387 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx cbrt +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.286640743 -> 219.286640743 +worst bits: 215.009723 -> 215.009723 +domains: 2/2 -> 2/2 +time: 344.021739 ns -> 344.421387 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +hypot + +fltx hypot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.93090326 -> 229.93090326 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 172.300212 ns -> 172.597249 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +229.9 + + +fltx hypot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.93090326 -> 229.93090326 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 172.300212 ns -> 172.597249 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +213.9 + + +fltx hypot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.93090326 -> 229.93090326 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 172.300212 ns -> 172.597249 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx hypot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.93090326 -> 229.93090326 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 172.300212 ns -> 172.597249 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +172.3 ns (+0.297 ns) + + +fltx hypot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.93090326 -> 229.93090326 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 172.300212 ns -> 172.597249 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx hypot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.93090326 -> 229.93090326 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 172.300212 ns -> 172.597249 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx hypot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.93090326 -> 229.93090326 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 172.300212 ns -> 172.597249 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +pow + +fltx pow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2498.291016 ns -> 2549.389648 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +216.8 + + +fltx pow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2498.291016 ns -> 2549.389648 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +211.1 + + +fltx pow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2498.291016 ns -> 2549.389648 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx pow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2498.291016 ns -> 2549.389648 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2,498 ns (+51.10 ns) + + +fltx pow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2498.291016 ns -> 2549.389648 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx pow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2498.291016 ns -> 2549.389648 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx pow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2498.291016 ns -> 2549.389648 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ipow + +fltx ipow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 111.141807 ns -> 111.808697 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +217.2 + + +fltx ipow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 111.141807 ns -> 111.808697 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +213.7 + + +fltx ipow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 111.141807 ns -> 111.808697 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +2/2 + + +fltx ipow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 111.141807 ns -> 111.808697 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +111.1 ns (+0.667 ns) + + +fltx ipow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 111.141807 ns -> 111.808697 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx ipow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 111.141807 ns -> 111.808697 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx ipow +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 111.141807 ns -> 111.808697 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + + +Exponentials + +exp + +fltx exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.760981 -> 216.760981 +worst bits: 209.17081 -> 209.17081 +domains: 2/2 -> 2/2 +time: 980.414497 ns -> 1006.835938 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +216.8 + + +fltx exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.760981 -> 216.760981 +worst bits: 209.17081 -> 209.17081 +domains: 2/2 -> 2/2 +time: 980.414497 ns -> 1006.835938 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +209.2 + + +fltx exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.760981 -> 216.760981 +worst bits: 209.17081 -> 209.17081 +domains: 2/2 -> 2/2 +time: 980.414497 ns -> 1006.835938 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.760981 -> 216.760981 +worst bits: 209.17081 -> 209.17081 +domains: 2/2 -> 2/2 +time: 980.414497 ns -> 1006.835938 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +980.4 ns (+26.42 ns) + + +fltx exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.760981 -> 216.760981 +worst bits: 209.17081 -> 209.17081 +domains: 2/2 -> 2/2 +time: 980.414497 ns -> 1006.835938 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.760981 -> 216.760981 +worst bits: 209.17081 -> 209.17081 +domains: 2/2 -> 2/2 +time: 980.414497 ns -> 1006.835938 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.760981 -> 216.760981 +worst bits: 209.17081 -> 209.17081 +domains: 2/2 -> 2/2 +time: 980.414497 ns -> 1006.835938 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +exp2 + +fltx exp2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 831.171875 ns -> 826.152344 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +218.0 + + +fltx exp2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 831.171875 ns -> 826.152344 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +214.2 + + +fltx exp2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 831.171875 ns -> 826.152344 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 831.171875 ns -> 826.152344 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +831.2 ns (-5.02 ns) + + +fltx exp2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 831.171875 ns -> 826.152344 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx exp2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 831.171875 ns -> 826.152344 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 831.171875 ns -> 826.152344 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +expm1 + +fltx expm1 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.154452503 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 987.109375 ns -> 1009.309896 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +227.2 + + +fltx expm1 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.154452503 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 987.109375 ns -> 1009.309896 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +207.0 + + +fltx expm1 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.154452503 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 987.109375 ns -> 1009.309896 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx expm1 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.154452503 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 987.109375 ns -> 1009.309896 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +987.1 ns (+22.20 ns) + + +fltx expm1 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.154452503 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 987.109375 ns -> 1009.309896 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx expm1 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.154452503 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 987.109375 ns -> 1009.309896 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx expm1 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.154452503 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 987.109375 ns -> 1009.309896 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Logarithms + +log + +fltx log +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.776072084 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1662.636719 ns -> 1670.195312 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.8 + + +fltx log +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.776072084 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1662.636719 ns -> 1670.195312 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +213.3 + + +fltx log +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.776072084 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1662.636719 ns -> 1670.195312 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.776072084 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1662.636719 ns -> 1670.195312 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,663 ns (+7.56 ns) + + +fltx log +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.776072084 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1662.636719 ns -> 1670.195312 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.776072084 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1662.636719 ns -> 1670.195312 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.776072084 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1662.636719 ns -> 1670.195312 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log2 + +fltx log2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.61302666 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1672.734375 ns -> 1704.042969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +218.6 + + +fltx log2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.61302666 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1672.734375 ns -> 1704.042969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +213.2 + + +fltx log2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.61302666 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1672.734375 ns -> 1704.042969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.61302666 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1672.734375 ns -> 1704.042969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,673 ns (+31.31 ns) + + +fltx log2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.61302666 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1672.734375 ns -> 1704.042969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.61302666 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1672.734375 ns -> 1704.042969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.61302666 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1672.734375 ns -> 1704.042969 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log10 + +fltx log10 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.44848007 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1686.992188 ns -> 1719.257812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.4 + + +fltx log10 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.44848007 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1686.992188 ns -> 1719.257812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +213.3 + + +fltx log10 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.44848007 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1686.992188 ns -> 1719.257812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log10 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.44848007 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1686.992188 ns -> 1719.257812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,687 ns (+32.27 ns) + + +fltx log10 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.44848007 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1686.992188 ns -> 1719.257812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log10 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.44848007 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1686.992188 ns -> 1719.257812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log10 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.44848007 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1686.992188 ns -> 1719.257812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log1p + +fltx log1p +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 226.82219119 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1691.621094 ns -> 1723.984375 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +226.8 + + +fltx log1p +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 226.82219119 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1691.621094 ns -> 1723.984375 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +207.0 + + +fltx log1p +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 226.82219119 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1691.621094 ns -> 1723.984375 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx log1p +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 226.82219119 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1691.621094 ns -> 1723.984375 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,692 ns (+32.36 ns) + + +fltx log1p +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 226.82219119 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1691.621094 ns -> 1723.984375 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx log1p +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 226.82219119 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1691.621094 ns -> 1723.984375 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx log1p +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 226.82219119 +worst bits: 207 -> 207 +domains: 2/2 -> 2/2 +time: 1691.621094 ns -> 1723.984375 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Trigonometric + +sin + +fltx sin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 883.662109 ns -> 881.894531 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +222.3 + + +fltx sin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 883.662109 ns -> 881.894531 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +202.9 + + +fltx sin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 883.662109 ns -> 881.894531 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx sin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 883.662109 ns -> 881.894531 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +883.7 ns (-1.77 ns) + + +fltx sin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 883.662109 ns -> 881.894531 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 883.662109 ns -> 881.894531 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 883.662109 ns -> 881.894531 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cos + +fltx cos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 882.480469 ns -> 881.650391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +226.8 + + +fltx cos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 882.480469 ns -> 881.650391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +208.7 + + +fltx cos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 882.480469 ns -> 881.650391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx cos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 882.480469 ns -> 881.650391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +882.5 ns (-0.830 ns) + + +fltx cos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 882.480469 ns -> 881.650391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 882.480469 ns -> 881.650391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 882.480469 ns -> 881.650391 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +sincos + +fltx sincos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1175.640191 ns -> 1081.335449 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1175.640191 ns -> 1081.335449 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1175.640191 ns -> 1081.335449 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1175.640191 ns -> 1081.335449 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1,176 ns (-94.30 ns) + + +fltx sincos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1175.640191 ns -> 1081.335449 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1175.640191 ns -> 1081.335449 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1175.640191 ns -> 1081.335449 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +tan + +fltx tan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1113.916016 ns -> 1143.798828 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.1 + + +fltx tan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1113.916016 ns -> 1143.798828 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +202.9 + + +fltx tan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1113.916016 ns -> 1143.798828 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx tan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1113.916016 ns -> 1143.798828 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,114 ns (+29.88 ns) + + +fltx tan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1113.916016 ns -> 1143.798828 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx tan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1113.916016 ns -> 1143.798828 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1113.916016 ns -> 1143.798828 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asin + +fltx asin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1334.207589 ns -> 1336.983817 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.9 + + +fltx asin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1334.207589 ns -> 1336.983817 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.4 + + +fltx asin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1334.207589 ns -> 1336.983817 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1334.207589 ns -> 1336.983817 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,334 ns (+2.78 ns) + + +fltx asin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1334.207589 ns -> 1336.983817 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx asin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1334.207589 ns -> 1336.983817 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asin +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1334.207589 ns -> 1336.983817 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acos + +fltx acos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1347.516741 ns -> 1347.893415 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +216.0 + + +fltx acos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1347.516741 ns -> 1347.893415 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +192.5 + + +fltx acos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1347.516741 ns -> 1347.893415 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1347.516741 ns -> 1347.893415 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,348 ns (+0.377 ns) + + +fltx acos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1347.516741 ns -> 1347.893415 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx acos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1347.516741 ns -> 1347.893415 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acos +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1347.516741 ns -> 1347.893415 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +atan + +fltx atan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 880.121528 ns -> 879.902344 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +218.1 + + +fltx atan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 880.121528 ns -> 879.902344 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.7 + + +fltx atan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 880.121528 ns -> 879.902344 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 880.121528 ns -> 879.902344 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +880.1 ns (-0.219 ns) + + +fltx atan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 880.121528 ns -> 879.902344 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 880.121528 ns -> 879.902344 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 880.121528 ns -> 879.902344 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +atan2 + +fltx atan2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 940.440538 ns -> 959.364149 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.9 + + +fltx atan2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 940.440538 ns -> 959.364149 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.3 + + +fltx atan2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 940.440538 ns -> 959.364149 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx atan2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 940.440538 ns -> 959.364149 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +940.4 ns (+18.92 ns) + + +fltx atan2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 940.440538 ns -> 959.364149 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atan2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 940.440538 ns -> 959.364149 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan2 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 940.440538 ns -> 959.364149 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Hyperbolic + +sinh + +fltx sinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1213.071987 ns -> 1241.782924 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.0 + + +fltx sinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1213.071987 ns -> 1241.782924 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +213.8 + + +fltx sinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1213.071987 ns -> 1241.782924 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1213.071987 ns -> 1241.782924 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,213 ns (+28.71 ns) + + +fltx sinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1213.071987 ns -> 1241.782924 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1213.071987 ns -> 1241.782924 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1213.071987 ns -> 1241.782924 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cosh + +fltx cosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1212.472098 ns -> 1244.503348 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.5 + + +fltx cosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1212.472098 ns -> 1244.503348 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +214.2 + + +fltx cosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1212.472098 ns -> 1244.503348 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx cosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1212.472098 ns -> 1244.503348 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,212 ns (+32.03 ns) + + +fltx cosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1212.472098 ns -> 1244.503348 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1212.472098 ns -> 1244.503348 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1212.472098 ns -> 1244.503348 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +tanh + +fltx tanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1196.428571 ns -> 1222.251674 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +219.1 + + +fltx tanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1196.428571 ns -> 1222.251674 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.0 + + +fltx tanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1196.428571 ns -> 1222.251674 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx tanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1196.428571 ns -> 1222.251674 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,196 ns (+25.82 ns) + + +fltx tanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1196.428571 ns -> 1222.251674 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx tanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1196.428571 ns -> 1222.251674 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1196.428571 ns -> 1222.251674 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asinh + +fltx asinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2549.755859 ns -> 2613.476562 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.2 + + +fltx asinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2549.755859 ns -> 2613.476562 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +213.0 + + +fltx asinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2549.755859 ns -> 2613.476562 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2549.755859 ns -> 2613.476562 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2,550 ns (+63.72 ns) + + +fltx asinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2549.755859 ns -> 2613.476562 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx asinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2549.755859 ns -> 2613.476562 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asinh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2549.755859 ns -> 2613.476562 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acosh + +fltx acosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2348.803711 ns -> 2413.354492 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.7 + + +fltx acosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2348.803711 ns -> 2413.354492 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +213.7 + + +fltx acosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2348.803711 ns -> 2413.354492 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2348.803711 ns -> 2413.354492 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2,349 ns (+64.55 ns) + + +fltx acosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2348.803711 ns -> 2413.354492 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx acosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2348.803711 ns -> 2413.354492 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acosh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2348.803711 ns -> 2413.354492 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +atanh + +fltx atanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2158.374023 ns -> 2192.626953 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +218.3 + + +fltx atanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2158.374023 ns -> 2192.626953 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +213.3 + + +fltx atanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2158.374023 ns -> 2192.626953 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2158.374023 ns -> 2192.626953 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2,158 ns (+34.25 ns) + + +fltx atanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2158.374023 ns -> 2192.626953 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2158.374023 ns -> 2192.626953 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atanh +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2158.374023 ns -> 2192.626953 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Special + +erfc + +fltx erfc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 8904.785156 ns -> 8882.226562 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +208.2 + + +fltx erfc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 8904.785156 ns -> 8882.226562 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +189.8 + + +fltx erfc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 8904.785156 ns -> 8882.226562 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx erfc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 8904.785156 ns -> 8882.226562 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +8,905 ns (-22.56 ns) + + +fltx erfc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 8904.785156 ns -> 8882.226562 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx erfc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 8904.785156 ns -> 8882.226562 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx erfc +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 8904.785156 ns -> 8882.226562 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +erf + +fltx erf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 8938.28125 ns -> 8880.133929 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +212.8 + + +fltx erf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 8938.28125 ns -> 8880.133929 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +196.8 + + +fltx erf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 8938.28125 ns -> 8880.133929 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx erf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 8938.28125 ns -> 8880.133929 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +8,938 ns (-58.15 ns) + + +fltx erf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 8938.28125 ns -> 8880.133929 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx erf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 8938.28125 ns -> 8880.133929 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx erf +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 8938.28125 ns -> 8880.133929 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +tgamma + +fltx tgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 9276.5625 ns -> 9361.230469 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +209.0 + + +fltx tgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 9276.5625 ns -> 9361.230469 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +202.5 + + +fltx tgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 9276.5625 ns -> 9361.230469 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx tgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 9276.5625 ns -> 9361.230469 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +9,277 ns (+84.67 ns) + + +fltx tgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 9276.5625 ns -> 9361.230469 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx tgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 9276.5625 ns -> 9361.230469 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx tgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 9276.5625 ns -> 9361.230469 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +lgamma + +fltx lgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 8275.683594 ns -> 8335.058594 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +211.9 + + +fltx lgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 8275.683594 ns -> 8335.058594 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +199.2 + + +fltx lgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 8275.683594 ns -> 8335.058594 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 8275.683594 ns -> 8335.058594 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +8,276 ns (+59.38 ns) + + +fltx lgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 8275.683594 ns -> 8335.058594 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx lgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 8275.683594 ns -> 8335.058594 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lgamma +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 8275.683594 ns -> 8335.058594 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + + +Comparisons + +equal + +fltx equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.776943 ns -> 0.774325 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.776943 ns -> 0.774325 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.776943 ns -> 0.774325 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.776943 ns -> 0.774325 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.777 ns (-0.003 ns) + + +fltx equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.776943 ns -> 0.774325 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.776943 ns -> 0.774325 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.776943 ns -> 0.774325 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +not_equal + +fltx not_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.778757 ns -> 0.77455 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.778757 ns -> 0.77455 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.778757 ns -> 0.77455 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx not_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.778757 ns -> 0.77455 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.779 ns (-0.004 ns) + + +fltx not_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.778757 ns -> 0.77455 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx not_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.778757 ns -> 0.77455 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx not_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.778757 ns -> 0.77455 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less + +fltx less +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.106333 ns -> 2.021346 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.106333 ns -> 2.021346 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.106333 ns -> 2.021346 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.106333 ns -> 2.021346 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2.11 ns (-0.085 ns) + + +fltx less +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.106333 ns -> 2.021346 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.106333 ns -> 2.021346 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.106333 ns -> 2.021346 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater + +fltx greater +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.078716 ns -> 2.094857 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.078716 ns -> 2.094857 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.078716 ns -> 2.094857 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.078716 ns -> 2.094857 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2.08 ns (+0.016 ns) + + +fltx greater +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.078716 ns -> 2.094857 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.078716 ns -> 2.094857 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.078716 ns -> 2.094857 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less_equal + +fltx less_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.058219 ns -> 2.046704 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.058219 ns -> 2.046704 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.058219 ns -> 2.046704 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.058219 ns -> 2.046704 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2.06 ns (-0.012 ns) + + +fltx less_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.058219 ns -> 2.046704 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.058219 ns -> 2.046704 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.058219 ns -> 2.046704 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater_equal + +fltx greater_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.087081 ns -> 2.014286 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.087081 ns -> 2.014286 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.087081 ns -> 2.014286 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.087081 ns -> 2.014286 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2.09 ns (-0.073 ns) + + +fltx greater_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.087081 ns -> 2.014286 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.087081 ns -> 2.014286 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater_equal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.087081 ns -> 2.014286 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + + +Random + +uniform_real + +fltx uniform_real +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 19.658358 ns -> 19.162196 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 19.658358 ns -> 19.162196 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 19.658358 ns -> 19.162196 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 19.658358 ns -> 19.162196 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +19.66 ns (-0.496 ns) + + +fltx uniform_real +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 19.658358 ns -> 19.162196 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 19.658358 ns -> 19.162196 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 19.658358 ns -> 19.162196 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +normal + +fltx normal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 265.448944 ns -> 265.443979 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 265.448944 ns -> 265.443979 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 265.448944 ns -> 265.443979 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 265.448944 ns -> 265.443979 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +265.4 ns (-0.005 ns) + + +fltx normal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 265.448944 ns -> 265.443979 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 265.448944 ns -> 265.443979 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 265.448944 ns -> 265.443979 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Mixed Workloads + +product_sum + +fltx product_sum +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 42.869016 ns -> 42.935689 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 42.869016 ns -> 42.935689 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 42.869016 ns -> 42.935689 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 42.869016 ns -> 42.935689 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +42.87 ns (+0.067 ns) + + +fltx product_sum +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 42.869016 ns -> 42.935689 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 42.869016 ns -> 42.935689 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 42.869016 ns -> 42.935689 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +chained_arithmetic + +fltx chained_arithmetic +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 155.188347 ns -> 155.240629 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 155.188347 ns -> 155.240629 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 155.188347 ns -> 155.240629 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 155.188347 ns -> 155.240629 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +155.2 ns (+0.052 ns) + + +fltx chained_arithmetic +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 155.188347 ns -> 155.240629 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 155.188347 ns -> 155.240629 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 155.188347 ns -> 155.240629 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +affine_trig + +fltx affine_trig +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1809.699675 ns -> 1804.626623 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1809.699675 ns -> 1804.626623 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1809.699675 ns -> 1804.626623 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1809.699675 ns -> 1804.626623 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1,810 ns (-5.07 ns) + + +fltx affine_trig +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1809.699675 ns -> 1804.626623 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1809.699675 ns -> 1804.626623 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1809.699675 ns -> 1804.626623 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +mandelbrot + +fltx mandelbrot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 124.059383 ns -> 123.980917 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 124.059383 ns -> 123.980917 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 124.059383 ns -> 123.980917 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 124.059383 ns -> 123.980917 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +124.1 ns (-0.078 ns) + + +fltx mandelbrot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 124.059383 ns -> 123.980917 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 124.059383 ns -> 123.980917 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 124.059383 ns -> 123.980917 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +matrix_vector_4x4 + +fltx matrix_vector_4x4 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 557.157258 ns -> 557.211538 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 557.157258 ns -> 557.211538 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 557.157258 ns -> 557.211538 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 557.157258 ns -> 557.211538 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +557.2 ns (+0.054 ns) + + +fltx matrix_vector_4x4 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 557.157258 ns -> 557.211538 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 557.157258 ns -> 557.211538 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 557.157258 ns -> 557.211538 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +horner_polynomial + +fltx horner_polynomial +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 395.633129 ns -> 394.940243 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 395.633129 ns -> 394.940243 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 395.633129 ns -> 394.940243 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 395.633129 ns -> 394.940243 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +395.6 ns (-0.693 ns) + + +fltx horner_polynomial +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 395.633129 ns -> 394.940243 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 395.633129 ns -> 394.940243 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 395.633129 ns -> 394.940243 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +newton_root + +fltx newton_root +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 218.119919 ns -> 219.373504 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 218.119919 ns -> 219.373504 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 218.119919 ns -> 219.373504 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 218.119919 ns -> 219.373504 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +218.1 ns (+1.25 ns) + + +fltx newton_root +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 218.119919 ns -> 219.373504 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 218.119919 ns -> 219.373504 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 218.119919 ns -> 219.373504 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +log_sum_exp + +fltx log_sum_exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8562.5 ns -> 8662.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8562.5 ns -> 8662.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8562.5 ns -> 8662.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8562.5 ns -> 8662.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +8,562 ns (+100.0 ns) + + +fltx log_sum_exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8562.5 ns -> 8662.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8562.5 ns -> 8662.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 8562.5 ns -> 8662.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +haversine + +fltx haversine +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4666.861702 ns -> 4656.673729 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4666.861702 ns -> 4656.673729 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4666.861702 ns -> 4656.673729 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4666.861702 ns -> 4656.673729 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +4,667 ns (-10.19 ns) + + +fltx haversine +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4666.861702 ns -> 4656.673729 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4666.861702 ns -> 4656.673729 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: ff1951e869c9480085d12c8d2f11f164 +fast-math run: 38734516d65c4154a947aaeb3ae92c72 +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4666.861702 ns -> 4656.673729 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deltas: green improves under fast-math; red regresses. + diff --git a/validation/metrics/generated/profile_comparison/windows_x86_64_MinGW_f128_strict_fastmath_comp.svg b/validation/metrics/generated/profile_comparison/windows_x86_64_MinGW_f128_strict_fastmath_comp.svg new file mode 100644 index 0000000..ceeb3d9 --- /dev/null +++ b/validation/metrics/generated/profile_comparison/windows_x86_64_MinGW_f128_strict_fastmath_comp.svg @@ -0,0 +1,9359 @@ + + + + +f128 strict vs consumer fast-math — Windows / x64 / GCC (MinGW-w64) +Strict first; deltas are fast-math - strict. Accuracy excludes the separate subnormal domain. + +operation + +bl::f128 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + +Arithmetic + +add + +fltx add +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.808751 ns -> 1.821623 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> no + +119.1 + + +fltx add +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.808751 ns -> 1.821623 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> no + +105.7 + + +fltx add +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.808751 ns -> 1.821623 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> no + +1/1 + + +fltx add +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.808751 ns -> 1.821623 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> no + +1.81 ns (+0.013 ns) + + +fltx add +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.808751 ns -> 1.821623 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> no + +Both (-Inf) + + +fltx add +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.808751 ns -> 1.821623 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> no + +✗ + + +fltx add +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 119.108587 -> 119.108587 +worst bits: 105.736235 -> 105.736235 +domains: 1/1 -> 1/1 +time: 1.808751 ns -> 1.821623 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> no + +✓ (✗) + + +subtract + +fltx subtract +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.786041 ns -> 1.824364 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> no + +118.9 + + +fltx subtract +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.786041 ns -> 1.824364 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> no + +105.7 + + +fltx subtract +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.786041 ns -> 1.824364 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> no + +1/1 + + +fltx subtract +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.786041 ns -> 1.824364 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> no + +1.79 ns (+0.038 ns) + + +fltx subtract +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.786041 ns -> 1.824364 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> no + +Both (-Inf) + + +fltx subtract +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.786041 ns -> 1.824364 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> no + +✗ + + +fltx subtract +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 118.876961 -> 118.876961 +worst bits: 105.744857 -> 105.744857 +domains: 1/1 -> 1/1 +time: 1.786041 ns -> 1.824364 ns +special values: Both -> NaN +signed zero: no -> no +subnormal support: yes -> no + +✓ (✗) + + +multiply + +fltx multiply +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.624172 ns -> 2.169176 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> no + +108.7 + + +fltx multiply +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.624172 ns -> 2.169176 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> no + +105.4 + + +fltx multiply +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.624172 ns -> 2.169176 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> no + +1/1 + + +fltx multiply +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.624172 ns -> 2.169176 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> no + +1.62 ns (+0.545 ns) + + +fltx multiply +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.624172 ns -> 2.169176 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> no + +Both (-Inf) + + +fltx multiply +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.624172 ns -> 2.169176 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> no + +✓ (✗) + + +fltx multiply +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.673668 -> 108.673668 +worst bits: 105.380753 -> 105.380753 +domains: 1/1 -> 1/1 +time: 1.624172 ns -> 2.169176 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> no + +✓ (✗) + + +divide + +fltx divide +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 2.304382 ns -> 2.110766 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> no + +110.9 + + +fltx divide +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 2.304382 ns -> 2.110766 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> no + +105.1 + + +fltx divide +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 2.304382 ns -> 2.110766 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> no + +1/1 + + +fltx divide +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 2.304382 ns -> 2.110766 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> no + +2.30 ns (-0.194 ns) + + +fltx divide +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 2.304382 ns -> 2.110766 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> no + +Both (-Inf) + + +fltx divide +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 2.304382 ns -> 2.110766 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> no + +✓ (✗) + + +fltx divide +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.882649 -> 110.882649 +worst bits: 105.124683 -> 105.124683 +domains: 1/1 -> 1/1 +time: 2.304382 ns -> 2.110766 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> no + +✓ (✗) + + + +IO + +to_string + +fltx to_string +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 250.353745 ns -> 240.581714 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +114.0 + + +fltx to_string +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 250.353745 ns -> 240.581714 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.7 + + +fltx to_string +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 250.353745 ns -> 240.581714 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_string +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 250.353745 ns -> 240.581714 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +250.4 ns (-9.77 ns) + + +fltx to_string +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 250.353745 ns -> 240.581714 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_string +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 250.353745 ns -> 240.581714 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_string +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 250.353745 ns -> 240.581714 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +to_chars + +fltx to_chars +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 202.259975 ns -> 199.984475 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +114.0 + + +fltx to_chars +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 202.259975 ns -> 199.984475 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.7 + + +fltx to_chars +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 202.259975 ns -> 199.984475 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_chars +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 202.259975 ns -> 199.984475 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +202.3 ns (-2.28 ns) + + +fltx to_chars +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 202.259975 ns -> 199.984475 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_chars +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 202.259975 ns -> 199.984475 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_chars +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.981524548 -> 113.981524548 +worst bits: 110.695372 -> 110.695372 +domains: 2/2 -> 2/2 +time: 202.259975 ns -> 199.984475 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +parse + +fltx parse +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.907318229 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 211.285679 ns -> 199.426689 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +109.9 (-0.029) + + +fltx parse +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.907318229 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 211.285679 ns -> 199.426689 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +106.0 + + +fltx parse +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.907318229 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 211.285679 ns -> 199.426689 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx parse +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.907318229 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 211.285679 ns -> 199.426689 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +211.3 ns (-11.86 ns) + + +fltx parse +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.907318229 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 211.285679 ns -> 199.426689 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx parse +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.907318229 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 211.285679 ns -> 199.426689 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx parse +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.936763821 -> 109.907318229 +worst bits: 106.003381 -> 106.003381 +domains: 2/2 -> 2/2 +time: 211.285679 ns -> 199.426689 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Rounding + +floor + +fltx floor +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.07751 ns -> 1.010621 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.07751 ns -> 1.010621 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.07751 ns -> 1.010621 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx floor +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.07751 ns -> 1.010621 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.08 ns (-0.067 ns) + + +fltx floor +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.07751 ns -> 1.010621 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx floor +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.07751 ns -> 1.010621 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx floor +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.07751 ns -> 1.010621 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ceil + +fltx ceil +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.695711 ns -> 1.511504 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +exact + + +fltx ceil +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.695711 ns -> 1.511504 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +exact + + +fltx ceil +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.695711 ns -> 1.511504 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +1/1 + + +fltx ceil +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.695711 ns -> 1.511504 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +1.70 ns (-0.184 ns) + + +fltx ceil +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.695711 ns -> 1.511504 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +Both + + +fltx ceil +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.695711 ns -> 1.511504 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +✓ (✗) + + +fltx ceil +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.695711 ns -> 1.511504 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +- + + +trunc + +fltx trunc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.714478 ns -> 1.624202 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx trunc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.714478 ns -> 1.624202 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx trunc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.714478 ns -> 1.624202 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx trunc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.714478 ns -> 1.624202 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2.71 ns (-1.09 ns) + + +fltx trunc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.714478 ns -> 1.624202 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx trunc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.714478 ns -> 1.624202 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx trunc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.714478 ns -> 1.624202 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round + +fltx round +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.056988 ns -> 10.187217 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.056988 ns -> 10.187217 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.056988 ns -> 10.187217 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.056988 ns -> 10.187217 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +10.06 ns (+0.130 ns) + + +fltx round +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.056988 ns -> 10.187217 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.056988 ns -> 10.187217 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.056988 ns -> 10.187217 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +roundeven + +fltx roundeven +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.796094 ns -> 6.738462 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.796094 ns -> 6.738462 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.796094 ns -> 6.738462 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx roundeven +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.796094 ns -> 6.738462 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +7.80 ns (-1.06 ns) + + +fltx roundeven +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.796094 ns -> 6.738462 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx roundeven +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.796094 ns -> 6.738462 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx roundeven +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 7.796094 ns -> 6.738462 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +lround + +fltx lround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.39413 ns -> 3.408705 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.39413 ns -> 3.408705 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.39413 ns -> 3.408705 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.39413 ns -> 3.408705 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +3.39 ns (+0.015 ns) + + +fltx lround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.39413 ns -> 3.408705 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.39413 ns -> 3.408705 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.39413 ns -> 3.408705 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +llround + +fltx llround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.225944 ns -> 3.248772 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.225944 ns -> 3.248772 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.225944 ns -> 3.248772 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx llround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.225944 ns -> 3.248772 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +3.23 ns (+0.023 ns) + + +fltx llround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.225944 ns -> 3.248772 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.225944 ns -> 3.248772 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.225944 ns -> 3.248772 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +round_decimals + +fltx round_decimals +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 79.360727 ns -> 78.226144 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.2 + + +fltx round_decimals +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 79.360727 ns -> 78.226144 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.0 + + +fltx round_decimals +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 79.360727 ns -> 78.226144 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_decimals +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 79.360727 ns -> 78.226144 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +79.36 ns (-1.13 ns) + + +fltx round_decimals +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 79.360727 ns -> 78.226144 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round_decimals +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 79.360727 ns -> 78.226144 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_decimals +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.177573 -> 110.177573 +worst bits: 107.022726 -> 107.022726 +domains: 1/1 -> 1/1 +time: 79.360727 ns -> 78.226144 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round_significant + +fltx round_significant +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 113.731689 ns -> 112.694092 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +121.3 + + +fltx round_significant +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 113.731689 ns -> 112.694092 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.0 + + +fltx round_significant +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 113.731689 ns -> 112.694092 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_significant +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 113.731689 ns -> 112.694092 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +113.7 ns (-1.04 ns) + + +fltx round_significant +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 113.731689 ns -> 112.694092 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round_significant +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 113.731689 ns -> 112.694092 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_significant +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.33026 -> 121.33026 +worst bits: 107.049597 -> 107.049597 +domains: 1/1 -> 1/1 +time: 113.731689 ns -> 112.694092 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Remainders + +fmod + +fltx fmod +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 17.727458 ns -> 18.802717 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmod +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 17.727458 ns -> 18.802717 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmod +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 17.727458 ns -> 18.802717 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx fmod +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 17.727458 ns -> 18.802717 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +17.73 ns (+1.08 ns) + + +fltx fmod +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 17.727458 ns -> 18.802717 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fmod +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 17.727458 ns -> 18.802717 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmod +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 3/3 -> 3/3 +time: 17.727458 ns -> 18.802717 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remainder + +fltx remainder +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 19.847036 ns -> 20.000919 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +138.0 + + +fltx remainder +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 19.847036 ns -> 20.000919 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.1 + + +fltx remainder +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 19.847036 ns -> 20.000919 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remainder +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 19.847036 ns -> 20.000919 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +19.85 ns (+0.154 ns) + + +fltx remainder +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 19.847036 ns -> 20.000919 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx remainder +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 19.847036 ns -> 20.000919 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remainder +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.991491 -> 137.991491 +worst bits: 103.120938 -> 103.120938 +domains: 1/1 -> 1/1 +time: 19.847036 ns -> 20.000919 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remquo + +fltx remquo +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 20.014004 ns -> 20.164356 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 20.014004 ns -> 20.164356 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 20.014004 ns -> 20.164356 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remquo +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 20.014004 ns -> 20.164356 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +20.01 ns (+0.150 ns) + + +fltx remquo +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 20.014004 ns -> 20.164356 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx remquo +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 20.014004 ns -> 20.164356 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remquo +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 20.014004 ns -> 20.164356 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Float Utils + +abs + +fltx abs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.861464 ns -> 0.537497 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: yes -> no + +exact + + +fltx abs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.861464 ns -> 0.537497 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: yes -> no + +exact + + +fltx abs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.861464 ns -> 0.537497 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: yes -> no + +1/1 + + +fltx abs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.861464 ns -> 0.537497 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: yes -> no + +2.86 ns (-2.32 ns) + + +fltx abs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.861464 ns -> 0.537497 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: yes -> no + +Both + + +fltx abs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.861464 ns -> 0.537497 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: yes -> no + +✓ (✗) + + +fltx abs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.861464 ns -> 0.537497 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: yes -> no + +✓ (✗) + + +fabs + +fltx fabs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.08741 ns -> 0.376619 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +exact + + +fltx fabs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.08741 ns -> 0.376619 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +exact + + +fltx fabs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.08741 ns -> 0.376619 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +1/1 + + +fltx fabs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.08741 ns -> 0.376619 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +3.09 ns (-2.71 ns) + + +fltx fabs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.08741 ns -> 0.376619 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +Both + + +fltx fabs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.08741 ns -> 0.376619 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +✓ (✗) + + +fltx fabs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 3.08741 ns -> 0.376619 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +- + + +fma + +fltx fma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.44188202 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 7.98208 ns -> 8.214162 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +117.4 + + +fltx fma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.44188202 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 7.98208 ns -> 8.214162 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +99.6 + + +fltx fma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.44188202 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 7.98208 ns -> 8.214162 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +3/3 + + +fltx fma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.44188202 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 7.98208 ns -> 8.214162 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +7.98 ns (+0.232 ns) + + +fltx fma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.44188202 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 7.98208 ns -> 8.214162 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx fma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.44188202 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 7.98208 ns -> 8.214162 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx fma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 117.44188202 -> 117.44188202 +worst bits: 99.5802 -> 99.5802 +domains: 3/3 -> 3/3 +time: 7.98208 ns -> 8.214162 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + +recip + +fltx recip +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 31.696112 ns -> 31.71638 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +109.0 + + +fltx recip +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 31.696112 ns -> 31.71638 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +105.2 + + +fltx recip +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 31.696112 ns -> 31.71638 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx recip +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 31.696112 ns -> 31.71638 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +31.70 ns (+0.020 ns) + + +fltx recip +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 31.696112 ns -> 31.71638 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +Both (-NaN) + + +fltx recip +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 31.696112 ns -> 31.71638 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx recip +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.025331959 -> 109.025331959 +worst bits: 105.189487 -> 105.189487 +domains: 2/2 -> 2/2 +time: 31.696112 ns -> 31.71638 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fmin + +fltx fmin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.323194 ns -> 0.818994 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.323194 ns -> 0.818994 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.323194 ns -> 0.818994 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.323194 ns -> 0.818994 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +2.32 ns (-1.50 ns) + + +fltx fmin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.323194 ns -> 0.818994 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +Both (-NaN) + + +fltx fmin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.323194 ns -> 0.818994 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.323194 ns -> 0.818994 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fmax + +fltx fmax +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.456736 ns -> 0.820997 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.456736 ns -> 0.820997 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.456736 ns -> 0.820997 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmax +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.456736 ns -> 0.820997 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +2.46 ns (-1.64 ns) + + +fltx fmax +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.456736 ns -> 0.820997 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +Both (-NaN) + + +fltx fmax +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.456736 ns -> 0.820997 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmax +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 2.456736 ns -> 0.820997 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fdim + +fltx fdim +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.247208 ns -> 2.752651 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +138.0 + + +fltx fdim +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.247208 ns -> 2.752651 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +106.2 + + +fltx fdim +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.247208 ns -> 2.752651 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fdim +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.247208 ns -> 2.752651 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3.25 ns (-0.495 ns) + + +fltx fdim +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.247208 ns -> 2.752651 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fdim +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.247208 ns -> 2.752651 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fdim +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 137.996123973 -> 137.996123973 +worst bits: 106.227061 -> 106.227061 +domains: 2/2 -> 2/2 +time: 3.247208 ns -> 2.752651 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +copysign + +fltx copysign +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.029455 ns -> 1.034325 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.029455 ns -> 1.034325 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.029455 ns -> 1.034325 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx copysign +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.029455 ns -> 1.034325 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.03 ns (+0.005 ns) + + +fltx copysign +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.029455 ns -> 1.034325 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx copysign +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.029455 ns -> 1.034325 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx copysign +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.029455 ns -> 1.034325 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ldexp + +fltx ldexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.269166 ns -> 1.291592 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.269166 ns -> 1.291592 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.269166 ns -> 1.291592 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ldexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.269166 ns -> 1.291592 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.27 ns (+0.022 ns) + + +fltx ldexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.269166 ns -> 1.291592 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx ldexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.269166 ns -> 1.291592 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ldexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.269166 ns -> 1.291592 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbn + +fltx scalbn +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.246553 ns -> 1.256482 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.246553 ns -> 1.256482 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.246553 ns -> 1.256482 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbn +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.246553 ns -> 1.256482 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.25 ns (+0.010 ns) + + +fltx scalbn +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.246553 ns -> 1.256482 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx scalbn +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.246553 ns -> 1.256482 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbn +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.246553 ns -> 1.256482 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbln + +fltx scalbln +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.243244 ns -> 1.257744 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.243244 ns -> 1.257744 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.243244 ns -> 1.257744 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbln +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.243244 ns -> 1.257744 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.24 ns (+0.014 ns) + + +fltx scalbln +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.243244 ns -> 1.257744 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx scalbln +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.243244 ns -> 1.257744 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbln +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.243244 ns -> 1.257744 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +frexp + +fltx frexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.83405 ns -> 1.816078 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> no + +exact + + +fltx frexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.83405 ns -> 1.816078 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> no + +exact + + +fltx frexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.83405 ns -> 1.816078 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> no + +1/1 + + +fltx frexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.83405 ns -> 1.816078 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> no + +1.83 ns (-0.018 ns) + + +fltx frexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.83405 ns -> 1.816078 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> no + +Both + + +fltx frexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.83405 ns -> 1.816078 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> no + +✓ + + +fltx frexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.83405 ns -> 1.816078 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> no + +✓ (✗) + + +modf + +fltx modf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.545918 ns -> 5.55057 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.545918 ns -> 5.55057 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.545918 ns -> 5.55057 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx modf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.545918 ns -> 5.55057 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +5.55 ns (+0.005 ns) + + +fltx modf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.545918 ns -> 5.55057 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx modf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.545918 ns -> 5.55057 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx modf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.545918 ns -> 5.55057 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ilogb + +fltx ilogb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.46864 ns -> 1.19319 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.46864 ns -> 1.19319 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.46864 ns -> 1.19319 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx ilogb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.46864 ns -> 1.19319 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1.47 ns (-0.275 ns) + + +fltx ilogb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.46864 ns -> 1.19319 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.46864 ns -> 1.19319 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.46864 ns -> 1.19319 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +logb + +fltx logb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.47026 ns -> 1.24016 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.47026 ns -> 1.24016 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.47026 ns -> 1.24016 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx logb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.47026 ns -> 1.24016 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.47 ns (-0.230 ns) + + +fltx logb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.47026 ns -> 1.24016 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx logb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.47026 ns -> 1.24016 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx logb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.47026 ns -> 1.24016 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +nextafter + +fltx nextafter +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.001007 ns -> 4.415737 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.001007 ns -> 4.415737 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.001007 ns -> 4.415737 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.001007 ns -> 4.415737 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +5.00 ns (-0.585 ns) + + +fltx nextafter +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.001007 ns -> 4.415737 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.001007 ns -> 4.415737 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.001007 ns -> 4.415737 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +nexttoward + +fltx nexttoward +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.668849 ns -> 4.582252 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.668849 ns -> 4.582252 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.668849 ns -> 4.582252 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.668849 ns -> 4.582252 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +4.67 ns (-0.087 ns) + + +fltx nexttoward +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.668849 ns -> 4.582252 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.668849 ns -> 4.582252 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.668849 ns -> 4.582252 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Roots & powers + +sqr + +fltx sqr +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.226281 ns -> 1.457811 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.7 + + +fltx sqr +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.226281 ns -> 1.457811 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +105.4 + + +fltx sqr +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.226281 ns -> 1.457811 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sqr +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.226281 ns -> 1.457811 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.23 ns (+0.232 ns) + + +fltx sqr +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.226281 ns -> 1.457811 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sqr +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.226281 ns -> 1.457811 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sqr +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.712755765 -> 108.712755765 +worst bits: 105.370295 -> 105.370295 +domains: 2/2 -> 2/2 +time: 1.226281 ns -> 1.457811 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +sqrt + +fltx sqrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 5.106323 ns -> 5.191481 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +109.5 + + +fltx sqrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 5.106323 ns -> 5.191481 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +104.7 + + +fltx sqrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 5.106323 ns -> 5.191481 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +3/3 + + +fltx sqrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 5.106323 ns -> 5.191481 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +5.11 ns (+0.085 ns) + + +fltx sqrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 5.106323 ns -> 5.191481 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx sqrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 5.106323 ns -> 5.191481 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx sqrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.50008051297698 -> 109.50008051297698 +worst bits: 104.669867 -> 104.669867 +domains: 3/3 -> 3/3 +time: 5.106323 ns -> 5.191481 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +cbrt + +fltx cbrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.530914443 -> 108.530914443 +worst bits: 103.988941 -> 103.988941 +domains: 2/2 -> 2/2 +time: 71.891276 ns -> 73.364672 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.5 + + +fltx cbrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.530914443 -> 108.530914443 +worst bits: 103.988941 -> 103.988941 +domains: 2/2 -> 2/2 +time: 71.891276 ns -> 73.364672 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.0 + + +fltx cbrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.530914443 -> 108.530914443 +worst bits: 103.988941 -> 103.988941 +domains: 2/2 -> 2/2 +time: 71.891276 ns -> 73.364672 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx cbrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.530914443 -> 108.530914443 +worst bits: 103.988941 -> 103.988941 +domains: 2/2 -> 2/2 +time: 71.891276 ns -> 73.364672 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +71.89 ns (+1.47 ns) + + +fltx cbrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.530914443 -> 108.530914443 +worst bits: 103.988941 -> 103.988941 +domains: 2/2 -> 2/2 +time: 71.891276 ns -> 73.364672 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx cbrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.530914443 -> 108.530914443 +worst bits: 103.988941 -> 103.988941 +domains: 2/2 -> 2/2 +time: 71.891276 ns -> 73.364672 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx cbrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.530914443 -> 108.530914443 +worst bits: 103.988941 -> 103.988941 +domains: 2/2 -> 2/2 +time: 71.891276 ns -> 73.364672 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +hypot + +fltx hypot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379786777 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 9.091561 ns -> 8.943954 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +122.4 (+0.000442) + + +fltx hypot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379786777 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 9.091561 ns -> 8.943954 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +104.4 + + +fltx hypot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379786777 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 9.091561 ns -> 8.943954 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +2/2 + + +fltx hypot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379786777 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 9.091561 ns -> 8.943954 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +9.09 ns (-0.148 ns) + + +fltx hypot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379786777 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 9.091561 ns -> 8.943954 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +Both + + +fltx hypot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379786777 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 9.091561 ns -> 8.943954 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +✓ (✗) + + +fltx hypot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 122.379344938 -> 122.379786777 +worst bits: 104.375984 -> 104.375984 +domains: 2/2 -> 2/2 +time: 9.091561 ns -> 8.943954 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +- + + +pow + +fltx pow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 220.27181 ns -> 219.243707 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.1 + + +fltx pow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 220.27181 ns -> 219.243707 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +101.3 + + +fltx pow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 220.27181 ns -> 219.243707 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx pow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 220.27181 ns -> 219.243707 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.3 ns (-1.03 ns) + + +fltx pow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 220.27181 ns -> 219.243707 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx pow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 220.27181 ns -> 219.243707 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx pow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1276135 -> 107.1276135 +worst bits: 101.314349 -> 101.314349 +domains: 2/2 -> 2/2 +time: 220.27181 ns -> 219.243707 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ipow + +fltx ipow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 18.192665 ns -> 18.201144 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +106.5 + + +fltx ipow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 18.192665 ns -> 18.201144 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +103.2 + + +fltx ipow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 18.192665 ns -> 18.201144 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +2/2 + + +fltx ipow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 18.192665 ns -> 18.201144 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +18.19 ns (+0.008 ns) + + +fltx ipow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 18.192665 ns -> 18.201144 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx ipow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 18.192665 ns -> 18.201144 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx ipow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.491467825 -> 106.491467825 +worst bits: 103.190083 -> 103.190083 +domains: 2/2 -> 2/2 +time: 18.192665 ns -> 18.201144 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + + +Exponentials + +exp + +fltx exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.9878975 -> 106.8743695 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 108.21167 ns -> 110.194227 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.0 (-0.1) + + +fltx exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.9878975 -> 106.8743695 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 108.21167 ns -> 110.194227 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.6 + + +fltx exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.9878975 -> 106.8743695 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 108.21167 ns -> 110.194227 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.9878975 -> 106.8743695 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 108.21167 ns -> 110.194227 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +108.2 ns (+1.98 ns) + + +fltx exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.9878975 -> 106.8743695 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 108.21167 ns -> 110.194227 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.9878975 -> 106.8743695 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 108.21167 ns -> 110.194227 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.9878975 -> 106.8743695 +worst bits: 103.64511 -> 103.64511 +domains: 2/2 -> 2/2 +time: 108.21167 ns -> 110.194227 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +exp2 + +fltx exp2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 101.780349 ns -> 101.621344 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +108.9 + + +fltx exp2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 101.780349 ns -> 101.621344 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +105.1 + + +fltx exp2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 101.780349 ns -> 101.621344 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 101.780349 ns -> 101.621344 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +101.8 ns (-0.159 ns) + + +fltx exp2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 101.780349 ns -> 101.621344 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx exp2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 101.780349 ns -> 101.621344 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.8963935 -> 108.8963935 +worst bits: 105.117537 -> 105.117537 +domains: 2/2 -> 2/2 +time: 101.780349 ns -> 101.621344 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +expm1 + +fltx expm1 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 109.521484 ns -> 108.707242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +121.6 + + +fltx expm1 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 109.521484 ns -> 108.707242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.1 + + +fltx expm1 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 109.521484 ns -> 108.707242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx expm1 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 109.521484 ns -> 108.707242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +109.5 ns (-0.814 ns) + + +fltx expm1 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 109.521484 ns -> 108.707242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx expm1 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 109.521484 ns -> 108.707242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx expm1 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.61686848 -> 121.61686848 +worst bits: 104.102752 -> 104.102752 +domains: 2/2 -> 2/2 +time: 109.521484 ns -> 108.707242 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Logarithms + +log + +fltx log +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.387070195 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 145.586948 ns -> 138.11744 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +108.4 (-0.021) + + +fltx log +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.387070195 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 145.586948 ns -> 138.11744 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.7 + + +fltx log +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.387070195 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 145.586948 ns -> 138.11744 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.387070195 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 145.586948 ns -> 138.11744 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +145.6 ns (-7.47 ns) + + +fltx log +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.387070195 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 145.586948 ns -> 138.11744 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.387070195 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 145.586948 ns -> 138.11744 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.40767633 -> 108.387070195 +worst bits: 103.727726 -> 103.727726 +domains: 3/3 -> 3/3 +time: 145.586948 ns -> 138.11744 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log2 + +fltx log2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.772162753 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 150.885641 ns -> 143.079427 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +108.8 (-0.013) + + +fltx log2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.772162753 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 150.885641 ns -> 143.079427 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.7 + + +fltx log2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.772162753 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 150.885641 ns -> 143.079427 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.772162753 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 150.885641 ns -> 143.079427 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +150.9 ns (-7.81 ns) + + +fltx log2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.772162753 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 150.885641 ns -> 143.079427 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.772162753 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 150.885641 ns -> 143.079427 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.785650924 -> 108.772162753 +worst bits: 103.716432 -> 103.716432 +domains: 3/3 -> 3/3 +time: 150.885641 ns -> 143.079427 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log10 + +fltx log10 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.485335382 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 149.883823 ns -> 144.788411 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.5 (-0.018) + + +fltx log10 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.485335382 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 149.883823 ns -> 144.788411 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.8 + + +fltx log10 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.485335382 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 149.883823 ns -> 144.788411 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log10 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.485335382 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 149.883823 ns -> 144.788411 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +149.9 ns (-5.10 ns) + + +fltx log10 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.485335382 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 149.883823 ns -> 144.788411 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log10 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.485335382 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 149.883823 ns -> 144.788411 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log10 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.503050022 -> 107.485335382 +worst bits: 103.762278 -> 103.762278 +domains: 3/3 -> 3/3 +time: 149.883823 ns -> 144.788411 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log1p + +fltx log1p +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 151.185826 ns -> 150.549316 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +121.4 + + +fltx log1p +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 151.185826 ns -> 150.549316 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.6 + + +fltx log1p +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 151.185826 ns -> 150.549316 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx log1p +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 151.185826 ns -> 150.549316 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +151.2 ns (-0.637 ns) + + +fltx log1p +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 151.185826 ns -> 150.549316 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx log1p +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 151.185826 ns -> 150.549316 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx log1p +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 121.372231555 -> 121.372231555 +worst bits: 103.619384 -> 103.619384 +domains: 2/2 -> 2/2 +time: 151.185826 ns -> 150.549316 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Trigonometric + +sin + +fltx sin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 101.179824 ns -> 101.540411 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.6 + + +fltx sin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 101.179824 ns -> 101.540411 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +98.6 + + +fltx sin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 101.179824 ns -> 101.540411 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx sin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 101.179824 ns -> 101.540411 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +101.2 ns (+0.361 ns) + + +fltx sin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 101.179824 ns -> 101.540411 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 101.179824 ns -> 101.540411 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.553532277 -> 110.553532277 +worst bits: 98.619216 -> 98.619216 +domains: 3/3 -> 3/3 +time: 101.179824 ns -> 101.540411 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cos + +fltx cos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 101.138944 ns -> 101.039163 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +113.5 + + +fltx cos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 101.138944 ns -> 101.039163 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +99.2 + + +fltx cos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 101.138944 ns -> 101.039163 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx cos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 101.138944 ns -> 101.039163 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +101.1 ns (-0.100 ns) + + +fltx cos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 101.138944 ns -> 101.039163 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 101.138944 ns -> 101.039163 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 113.520718505 -> 113.520718505 +worst bits: 99.209588 -> 99.209588 +domains: 3/3 -> 3/3 +time: 101.138944 ns -> 101.039163 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +sincos + +fltx sincos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 107.06936 ns -> 107.501221 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 107.06936 ns -> 107.501221 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 107.06936 ns -> 107.501221 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 107.06936 ns -> 107.501221 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +107.1 ns (+0.432 ns) + + +fltx sincos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 107.06936 ns -> 107.501221 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 107.06936 ns -> 107.501221 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 107.06936 ns -> 107.501221 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +tan + +fltx tan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 107.74292 ns -> 108.02124 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +106.7 + + +fltx tan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 107.74292 ns -> 108.02124 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +98.6 + + +fltx tan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 107.74292 ns -> 108.02124 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx tan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 107.74292 ns -> 108.02124 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.7 ns (+0.278 ns) + + +fltx tan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 107.74292 ns -> 108.02124 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx tan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 107.74292 ns -> 108.02124 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.705038797 -> 106.705038797 +worst bits: 98.614153 -> 98.614153 +domains: 3/3 -> 3/3 +time: 107.74292 ns -> 108.02124 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asin + +fltx asin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 189.262251 ns -> 189.293324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.6 + + +fltx asin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 189.262251 ns -> 189.293324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.1 + + +fltx asin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 189.262251 ns -> 189.293324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 189.262251 ns -> 189.293324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +189.3 ns (+0.031 ns) + + +fltx asin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 189.262251 ns -> 189.293324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx asin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 189.262251 ns -> 189.293324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.580073592 -> 108.580073592 +worst bits: 104.081582 -> 104.081582 +domains: 2/2 -> 2/2 +time: 189.262251 ns -> 189.293324 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acos + +fltx acos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 194.310361 ns -> 194.495739 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +106.5 + + +fltx acos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 194.310361 ns -> 194.495739 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +81.6 + + +fltx acos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 194.310361 ns -> 194.495739 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 194.310361 ns -> 194.495739 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +194.3 ns (+0.185 ns) + + +fltx acos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 194.310361 ns -> 194.495739 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx acos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 194.310361 ns -> 194.495739 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 106.470630111 -> 106.470630111 +worst bits: 81.584963 -> 81.584963 +domains: 2/2 -> 2/2 +time: 194.310361 ns -> 194.495739 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +atan + +fltx atan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 136.94987 ns -> 137.018019 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.7 + + +fltx atan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 136.94987 ns -> 137.018019 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.9 + + +fltx atan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 136.94987 ns -> 137.018019 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 136.94987 ns -> 137.018019 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +136.9 ns (+0.068 ns) + + +fltx atan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 136.94987 ns -> 137.018019 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 136.94987 ns -> 137.018019 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.728555 -> 108.728555 +worst bits: 104.92639 -> 104.92639 +domains: 2/2 -> 2/2 +time: 136.94987 ns -> 137.018019 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +atan2 + +fltx atan2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 144.076102 ns -> 144.128418 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.7 + + +fltx atan2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 144.076102 ns -> 144.128418 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +104.5 + + +fltx atan2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 144.076102 ns -> 144.128418 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx atan2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 144.076102 ns -> 144.128418 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +144.1 ns (+0.052 ns) + + +fltx atan2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 144.076102 ns -> 144.128418 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atan2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 144.076102 ns -> 144.128418 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.727143624 -> 108.727143624 +worst bits: 104.520841 -> 104.520841 +domains: 3/3 -> 3/3 +time: 144.076102 ns -> 144.128418 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Hyperbolic + +sinh + +fltx sinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 124.42294 ns -> 124.67804 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +107.4 + + +fltx sinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 124.42294 ns -> 124.67804 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.6 + + +fltx sinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 124.42294 ns -> 124.67804 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 124.42294 ns -> 124.67804 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +124.4 ns (+0.255 ns) + + +fltx sinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 124.42294 ns -> 124.67804 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 124.42294 ns -> 124.67804 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.4201585 -> 107.4201585 +worst bits: 103.568829 -> 103.568829 +domains: 2/2 -> 2/2 +time: 124.42294 ns -> 124.67804 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cosh + +fltx cosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 123.616536 ns -> 123.605526 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.9 + + +fltx cosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 123.616536 ns -> 123.605526 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +104.4 + + +fltx cosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 123.616536 ns -> 123.605526 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx cosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 123.616536 ns -> 123.605526 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +123.6 ns (-0.011 ns) + + +fltx cosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 123.616536 ns -> 123.605526 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 123.616536 ns -> 123.605526 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.9070545 -> 107.9070545 +worst bits: 104.370708 -> 104.370708 +domains: 2/2 -> 2/2 +time: 123.616536 ns -> 123.605526 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +tanh + +fltx tanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 129.334677 ns -> 129.320502 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +109.2 + + +fltx tanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 129.334677 ns -> 129.320502 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.8 + + +fltx tanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 129.334677 ns -> 129.320502 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx tanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 129.334677 ns -> 129.320502 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +129.3 ns (-0.014 ns) + + +fltx tanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 129.334677 ns -> 129.320502 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx tanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 129.334677 ns -> 129.320502 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 109.217494 -> 109.217494 +worst bits: 103.771823 -> 103.771823 +domains: 2/2 -> 2/2 +time: 129.334677 ns -> 129.320502 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asinh + +fltx asinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 136.161436 ns -> 138.372171 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.1 + + +fltx asinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 136.161436 ns -> 138.372171 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.8 + + +fltx asinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 136.161436 ns -> 138.372171 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 136.161436 ns -> 138.372171 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +136.2 ns (+2.21 ns) + + +fltx asinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 136.161436 ns -> 138.372171 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx asinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 136.161436 ns -> 138.372171 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.081857 -> 108.081857 +worst bits: 103.818628 -> 103.818628 +domains: 2/2 -> 2/2 +time: 136.161436 ns -> 138.372171 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acosh + +fltx acosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031852794 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 162.830529 ns -> 163.232422 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +108.0 (+0.000333) + + +fltx acosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031852794 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 162.830529 ns -> 163.232422 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +103.7 + + +fltx acosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031852794 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 162.830529 ns -> 163.232422 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031852794 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 162.830529 ns -> 163.232422 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +162.8 ns (+0.402 ns) + + +fltx acosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031852794 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 162.830529 ns -> 163.232422 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx acosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031852794 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 162.830529 ns -> 163.232422 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.031519376 -> 108.031852794 +worst bits: 103.672888 -> 103.672888 +domains: 2/2 -> 2/2 +time: 162.830529 ns -> 163.232422 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +atanh + +fltx atanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 160.863281 ns -> 163.423978 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +108.1 + + +fltx atanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 160.863281 ns -> 163.423978 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.1 + + +fltx atanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 160.863281 ns -> 163.423978 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 160.863281 ns -> 163.423978 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +160.9 ns (+2.56 ns) + + +fltx atanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 160.863281 ns -> 163.423978 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 160.863281 ns -> 163.423978 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 108.11583849 -> 108.11583849 +worst bits: 103.139045 -> 103.139045 +domains: 2/2 -> 2/2 +time: 160.863281 ns -> 163.423978 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Special + +erfc + +fltx erfc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 790.720274 ns -> 782.821801 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.2 + + +fltx erfc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 790.720274 ns -> 782.821801 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +99.2 + + +fltx erfc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 790.720274 ns -> 782.821801 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx erfc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 790.720274 ns -> 782.821801 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +790.7 ns (-7.90 ns) + + +fltx erfc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 790.720274 ns -> 782.821801 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx erfc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 790.720274 ns -> 782.821801 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx erfc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.1893035 -> 107.1893035 +worst bits: 99.167646 -> 99.167646 +domains: 2/2 -> 2/2 +time: 790.720274 ns -> 782.821801 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +erf + +fltx erf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 788.58817 ns -> 785.819404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +110.9 + + +fltx erf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 788.58817 ns -> 785.819404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +103.5 + + +fltx erf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 788.58817 ns -> 785.819404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx erf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 788.58817 ns -> 785.819404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +788.6 ns (-2.77 ns) + + +fltx erf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 788.58817 ns -> 785.819404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx erf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 788.58817 ns -> 785.819404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx erf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 110.8988915 -> 110.8988915 +worst bits: 103.47754 -> 103.47754 +domains: 2/2 -> 2/2 +time: 788.58817 ns -> 785.819404 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +tgamma + +fltx tgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 561.074561 ns -> 564.507004 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +105.6 + + +fltx tgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 561.074561 ns -> 564.507004 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +97.3 + + +fltx tgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 561.074561 ns -> 564.507004 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx tgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 561.074561 ns -> 564.507004 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +561.1 ns (+3.43 ns) + + +fltx tgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 561.074561 ns -> 564.507004 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx tgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 561.074561 ns -> 564.507004 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx tgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 105.565044 -> 105.565044 +worst bits: 97.317514 -> 97.317514 +domains: 1/1 -> 1/1 +time: 561.074561 ns -> 564.507004 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +lgamma + +fltx lgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 616.427176 ns -> 621.732955 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +107.3 + + +fltx lgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 616.427176 ns -> 621.732955 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +102.2 + + +fltx lgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 616.427176 ns -> 621.732955 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 616.427176 ns -> 621.732955 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +616.4 ns (+5.31 ns) + + +fltx lgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 616.427176 ns -> 621.732955 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx lgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 616.427176 ns -> 621.732955 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 107.30017 -> 107.30017 +worst bits: 102.168212 -> 102.168212 +domains: 1/1 -> 1/1 +time: 616.427176 ns -> 621.732955 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + + +Comparisons + +equal + +fltx equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.949037 ns -> 0.818484 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.949037 ns -> 0.818484 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.949037 ns -> 0.818484 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.949037 ns -> 0.818484 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.949 ns (-0.131 ns) + + +fltx equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.949037 ns -> 0.818484 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.949037 ns -> 0.818484 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.949037 ns -> 0.818484 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +not_equal + +fltx not_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.030589 ns -> 0.922221 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.030589 ns -> 0.922221 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.030589 ns -> 0.922221 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx not_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.030589 ns -> 0.922221 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.03 ns (-0.108 ns) + + +fltx not_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.030589 ns -> 0.922221 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx not_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.030589 ns -> 0.922221 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx not_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.030589 ns -> 0.922221 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less + +fltx less +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.105277 ns -> 1.209771 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.105277 ns -> 1.209771 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.105277 ns -> 1.209771 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.105277 ns -> 1.209771 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.11 ns (+0.104 ns) + + +fltx less +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.105277 ns -> 1.209771 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.105277 ns -> 1.209771 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.105277 ns -> 1.209771 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater + +fltx greater +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.250709 ns -> 1.059767 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.250709 ns -> 1.059767 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.250709 ns -> 1.059767 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.250709 ns -> 1.059767 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.25 ns (-0.191 ns) + + +fltx greater +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.250709 ns -> 1.059767 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.250709 ns -> 1.059767 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.250709 ns -> 1.059767 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less_equal + +fltx less_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.022715 ns -> 1.149067 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.022715 ns -> 1.149067 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.022715 ns -> 1.149067 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.022715 ns -> 1.149067 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.02 ns (+0.126 ns) + + +fltx less_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.022715 ns -> 1.149067 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.022715 ns -> 1.149067 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.022715 ns -> 1.149067 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater_equal + +fltx greater_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.155811 ns -> 1.008519 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.155811 ns -> 1.008519 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.155811 ns -> 1.008519 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.155811 ns -> 1.008519 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.16 ns (-0.147 ns) + + +fltx greater_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.155811 ns -> 1.008519 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.155811 ns -> 1.008519 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.155811 ns -> 1.008519 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + + +Random + +uniform_real + +fltx uniform_real +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 21.32868 ns -> 21.126511 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 21.32868 ns -> 21.126511 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 21.32868 ns -> 21.126511 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 21.32868 ns -> 21.126511 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +21.33 ns (-0.202 ns) + + +fltx uniform_real +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 21.32868 ns -> 21.126511 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 21.32868 ns -> 21.126511 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 21.32868 ns -> 21.126511 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +normal + +fltx normal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 100.520833 ns -> 108.64367 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 100.520833 ns -> 108.64367 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 100.520833 ns -> 108.64367 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 100.520833 ns -> 108.64367 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +100.5 ns (+8.12 ns) + + +fltx normal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 100.520833 ns -> 108.64367 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 100.520833 ns -> 108.64367 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 100.520833 ns -> 108.64367 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Mixed Workloads + +product_sum + +fltx product_sum +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.093188 ns -> 7.491246 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.093188 ns -> 7.491246 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.093188 ns -> 7.491246 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.093188 ns -> 7.491246 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +5.09 ns (+2.40 ns) + + +fltx product_sum +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.093188 ns -> 7.491246 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.093188 ns -> 7.491246 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 5.093188 ns -> 7.491246 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +chained_arithmetic + +fltx chained_arithmetic +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 23.435626 ns -> 22.793631 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 23.435626 ns -> 22.793631 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 23.435626 ns -> 22.793631 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 23.435626 ns -> 22.793631 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +23.44 ns (-0.642 ns) + + +fltx chained_arithmetic +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 23.435626 ns -> 22.793631 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 23.435626 ns -> 22.793631 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 23.435626 ns -> 22.793631 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +affine_trig + +fltx affine_trig +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 213.073484 ns -> 217.339819 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 213.073484 ns -> 217.339819 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 213.073484 ns -> 217.339819 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 213.073484 ns -> 217.339819 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +213.1 ns (+4.27 ns) + + +fltx affine_trig +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 213.073484 ns -> 217.339819 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 213.073484 ns -> 217.339819 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 213.073484 ns -> 217.339819 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +mandelbrot + +fltx mandelbrot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 17.823968 ns -> 17.984836 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 17.823968 ns -> 17.984836 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 17.823968 ns -> 17.984836 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 17.823968 ns -> 17.984836 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +17.82 ns (+0.161 ns) + + +fltx mandelbrot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 17.823968 ns -> 17.984836 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 17.823968 ns -> 17.984836 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 17.823968 ns -> 17.984836 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +matrix_vector_4x4 + +fltx matrix_vector_4x4 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 72.088703 ns -> 80.671738 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 72.088703 ns -> 80.671738 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 72.088703 ns -> 80.671738 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 72.088703 ns -> 80.671738 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +72.09 ns (+8.58 ns) + + +fltx matrix_vector_4x4 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 72.088703 ns -> 80.671738 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 72.088703 ns -> 80.671738 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 72.088703 ns -> 80.671738 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +horner_polynomial + +fltx horner_polynomial +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 113.862916 ns -> 101.755137 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 113.862916 ns -> 101.755137 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 113.862916 ns -> 101.755137 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 113.862916 ns -> 101.755137 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +113.9 ns (-12.11 ns) + + +fltx horner_polynomial +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 113.862916 ns -> 101.755137 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 113.862916 ns -> 101.755137 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 113.862916 ns -> 101.755137 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +newton_root + +fltx newton_root +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 33.542868 ns -> 30.100806 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 33.542868 ns -> 30.100806 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 33.542868 ns -> 30.100806 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 33.542868 ns -> 30.100806 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +33.54 ns (-3.44 ns) + + +fltx newton_root +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 33.542868 ns -> 30.100806 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 33.542868 ns -> 30.100806 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 33.542868 ns -> 30.100806 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +log_sum_exp + +fltx log_sum_exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 907.746479 ns -> 900.184124 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 907.746479 ns -> 900.184124 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 907.746479 ns -> 900.184124 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 907.746479 ns -> 900.184124 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +907.7 ns (-7.56 ns) + + +fltx log_sum_exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 907.746479 ns -> 900.184124 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 907.746479 ns -> 900.184124 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 907.746479 ns -> 900.184124 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +haversine + +fltx haversine +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 540.719043 ns -> 532.112488 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 540.719043 ns -> 532.112488 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 540.719043 ns -> 532.112488 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 540.719043 ns -> 532.112488 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +540.7 ns (-8.61 ns) + + +fltx haversine +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 540.719043 ns -> 532.112488 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 540.719043 ns -> 532.112488 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 540.719043 ns -> 532.112488 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deltas: green improves under fast-math; red regresses. + diff --git a/validation/metrics/generated/profile_comparison/windows_x86_64_MinGW_f256_strict_fastmath_comp.svg b/validation/metrics/generated/profile_comparison/windows_x86_64_MinGW_f256_strict_fastmath_comp.svg new file mode 100644 index 0000000..3423956 --- /dev/null +++ b/validation/metrics/generated/profile_comparison/windows_x86_64_MinGW_f256_strict_fastmath_comp.svg @@ -0,0 +1,9359 @@ + + + + +f256 strict vs consumer fast-math — Windows / x64 / GCC (MinGW-w64) +Strict first; deltas are fast-math - strict. Accuracy excludes the separate subnormal domain. + +operation + +bl::f256 + +bits accurate + +domain + +performance + +Inf/ +NaN + +±0 + +Subnorm + +mean + +worst + +pass + +time + + +Arithmetic + +add + +fltx add +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.516871 ns -> 10.462325 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> no + +226.0 + + +fltx add +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.516871 ns -> 10.462325 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> no + +215.3 + + +fltx add +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.516871 ns -> 10.462325 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> no + +1/1 + + +fltx add +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.516871 ns -> 10.462325 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> no + +10.52 ns (-0.055 ns) + + +fltx add +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.516871 ns -> 10.462325 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> no + +Both + + +fltx add +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.516871 ns -> 10.462325 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> no + +✗ + + +fltx add +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 225.979394 -> 225.979394 +worst bits: 215.297307 -> 215.297307 +domains: 1/1 -> 1/1 +time: 10.516871 ns -> 10.462325 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> no + +✓ (✗) + + +subtract + +fltx subtract +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.122784 +worst bits: 215.220788 -> 214.719416 +domains: 1/1 -> 1/1 +time: 10.410927 ns -> 10.388633 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> no + +226.1 (-0.001) + + +fltx subtract +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.122784 +worst bits: 215.220788 -> 214.719416 +domains: 1/1 -> 1/1 +time: 10.410927 ns -> 10.388633 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> no + +215.2 (-0.5) + + +fltx subtract +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.122784 +worst bits: 215.220788 -> 214.719416 +domains: 1/1 -> 1/1 +time: 10.410927 ns -> 10.388633 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> no + +1/1 + + +fltx subtract +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.122784 +worst bits: 215.220788 -> 214.719416 +domains: 1/1 -> 1/1 +time: 10.410927 ns -> 10.388633 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> no + +10.41 ns (-0.022 ns) + + +fltx subtract +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.122784 +worst bits: 215.220788 -> 214.719416 +domains: 1/1 -> 1/1 +time: 10.410927 ns -> 10.388633 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> no + +Both + + +fltx subtract +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.122784 +worst bits: 215.220788 -> 214.719416 +domains: 1/1 -> 1/1 +time: 10.410927 ns -> 10.388633 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> no + +✗ + + +fltx subtract +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.123353 -> 226.122784 +worst bits: 215.220788 -> 214.719416 +domains: 1/1 -> 1/1 +time: 10.410927 ns -> 10.388633 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: yes -> no + +✓ (✗) + + +multiply + +fltx multiply +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 23.15625 ns -> 25.301378 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +220.0 + + +fltx multiply +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 23.15625 ns -> 25.301378 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +215.2 + + +fltx multiply +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 23.15625 ns -> 25.301378 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +1/1 + + +fltx multiply +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 23.15625 ns -> 25.301378 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +23.16 ns (+2.15 ns) + + +fltx multiply +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 23.15625 ns -> 25.301378 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +Both (-Inf) + + +fltx multiply +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 23.15625 ns -> 25.301378 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +✓ (✗) + + +fltx multiply +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.010524 -> 220.010524 +worst bits: 215.221541 -> 215.221541 +domains: 1/1 -> 1/1 +time: 23.15625 ns -> 25.301378 ns +special values: Both -> NaN +signed zero: yes -> no +subnormal support: yes -> yes + +✓ + + +divide + +fltx divide +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 107.009277 ns -> 107.237549 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> no + +219.2 + + +fltx divide +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 107.009277 ns -> 107.237549 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> no + +214.8 + + +fltx divide +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 107.009277 ns -> 107.237549 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> no + +1/1 + + +fltx divide +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 107.009277 ns -> 107.237549 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> no + +107.0 ns (+0.228 ns) + + +fltx divide +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 107.009277 ns -> 107.237549 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> no + +Both + + +fltx divide +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 107.009277 ns -> 107.237549 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> no + +✓ + + +fltx divide +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.218459 -> 219.218459 +worst bits: 214.762066 -> 214.762066 +domains: 1/1 -> 1/1 +time: 107.009277 ns -> 107.237549 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> no + +✓ (✗) + + + +IO + +to_string + +fltx to_string +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 347.366954 ns -> 347.804343 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.4 + + +fltx to_string +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 347.366954 ns -> 347.804343 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.0 + + +fltx to_string +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 347.366954 ns -> 347.804343 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx to_string +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 347.366954 ns -> 347.804343 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +347.4 ns (+0.437 ns) + + +fltx to_string +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 347.366954 ns -> 347.804343 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx to_string +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 347.366954 ns -> 347.804343 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx to_string +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 347.366954 ns -> 347.804343 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +to_chars + +fltx to_chars +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 308.155299 ns -> 303.659429 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +220.4 + + +fltx to_chars +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 308.155299 ns -> 303.659429 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +217.0 + + +fltx to_chars +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 308.155299 ns -> 303.659429 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +2/2 + + +fltx to_chars +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 308.155299 ns -> 303.659429 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +308.2 ns (-4.50 ns) + + +fltx to_chars +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 308.155299 ns -> 303.659429 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +Both + + +fltx to_chars +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 308.155299 ns -> 303.659429 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +✓ (✗) + + +fltx to_chars +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.440705573 -> 220.440705573 +worst bits: 216.9758 -> 216.9758 +domains: 2/2 -> 2/2 +time: 308.155299 ns -> 303.659429 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +- + + +parse + +fltx parse +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729662732 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 386.740668 ns -> 462.088314 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +219.7 (+0.000171) + + +fltx parse +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729662732 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 386.740668 ns -> 462.088314 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +212.0 + + +fltx parse +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729662732 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 386.740668 ns -> 462.088314 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx parse +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729662732 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 386.740668 ns -> 462.088314 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +386.7 ns (+75.35 ns) + + +fltx parse +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729662732 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 386.740668 ns -> 462.088314 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx parse +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729662732 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 386.740668 ns -> 462.088314 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx parse +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.729492211 -> 219.729662732 +worst bits: 212.017147 -> 212.017147 +domains: 2/2 -> 2/2 +time: 386.740668 ns -> 462.088314 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Rounding + +floor + +fltx floor +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.396501 ns -> 1.28778 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.396501 ns -> 1.28778 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx floor +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.396501 ns -> 1.28778 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx floor +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.396501 ns -> 1.28778 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.40 ns (-0.109 ns) + + +fltx floor +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.396501 ns -> 1.28778 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx floor +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.396501 ns -> 1.28778 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx floor +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.396501 ns -> 1.28778 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ceil + +fltx ceil +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.411047 ns -> 1.244923 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ceil +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.411047 ns -> 1.244923 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ceil +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.411047 ns -> 1.244923 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ceil +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.411047 ns -> 1.244923 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.41 ns (-0.166 ns) + + +fltx ceil +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.411047 ns -> 1.244923 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx ceil +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.411047 ns -> 1.244923 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ceil +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.411047 ns -> 1.244923 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +trunc + +fltx trunc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.790801 ns -> 2.313778 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +exact + + +fltx trunc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.790801 ns -> 2.313778 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +exact + + +fltx trunc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.790801 ns -> 2.313778 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +1/1 + + +fltx trunc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.790801 ns -> 2.313778 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +2.79 ns (-0.477 ns) + + +fltx trunc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.790801 ns -> 2.313778 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +Both + + +fltx trunc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.790801 ns -> 2.313778 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +✓ (✗) + + +fltx trunc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 2.790801 ns -> 2.313778 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +- + + +round + +fltx round +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.205627 ns -> 10.095398 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.205627 ns -> 10.095398 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx round +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.205627 ns -> 10.095398 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.205627 ns -> 10.095398 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +10.21 ns (-0.110 ns) + + +fltx round +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.205627 ns -> 10.095398 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.205627 ns -> 10.095398 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.205627 ns -> 10.095398 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +roundeven + +fltx roundeven +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.118402 ns -> 9.125255 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.118402 ns -> 9.125255 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx roundeven +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.118402 ns -> 9.125255 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx roundeven +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.118402 ns -> 9.125255 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +9.12 ns (+0.007 ns) + + +fltx roundeven +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.118402 ns -> 9.125255 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx roundeven +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.118402 ns -> 9.125255 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx roundeven +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 9.118402 ns -> 9.125255 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +lround + +fltx lround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 5.08619 ns -> 5.134658 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 5.08619 ns -> 5.134658 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx lround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 5.08619 ns -> 5.134658 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 5.08619 ns -> 5.134658 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +5.09 ns (+0.048 ns) + + +fltx lround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 5.08619 ns -> 5.134658 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 5.08619 ns -> 5.134658 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 5.08619 ns -> 5.134658 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +llround + +fltx llround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.807818 ns -> 4.848278 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.807818 ns -> 4.848278 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx llround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.807818 ns -> 4.848278 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx llround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.807818 ns -> 4.848278 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +4.81 ns (+0.040 ns) + + +fltx llround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.807818 ns -> 4.848278 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.807818 ns -> 4.848278 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx llround +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 4.807818 ns -> 4.848278 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +round_decimals + +fltx round_decimals +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 127.529907 ns -> 128.289795 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.0 + + +fltx round_decimals +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 127.529907 ns -> 128.289795 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +215.3 + + +fltx round_decimals +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 127.529907 ns -> 128.289795 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_decimals +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 127.529907 ns -> 128.289795 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +127.5 ns (+0.760 ns) + + +fltx round_decimals +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 127.529907 ns -> 128.289795 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round_decimals +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 127.529907 ns -> 128.289795 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_decimals +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.044956 -> 220.044956 +worst bits: 215.330917 -> 215.330917 +domains: 1/1 -> 1/1 +time: 127.529907 ns -> 128.289795 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +round_significant + +fltx round_significant +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 163.258714 ns -> 167.3753 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +229.6 + + +fltx round_significant +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 163.258714 ns -> 167.3753 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +215.1 + + +fltx round_significant +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 163.258714 ns -> 167.3753 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx round_significant +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 163.258714 ns -> 167.3753 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +163.3 ns (+4.12 ns) + + +fltx round_significant +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 163.258714 ns -> 167.3753 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx round_significant +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 163.258714 ns -> 167.3753 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx round_significant +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.647449 -> 229.647449 +worst bits: 215.06782 -> 215.06782 +domains: 1/1 -> 1/1 +time: 163.258714 ns -> 167.3753 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Remainders + +fmod + +fltx fmod +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 69.569499 ns -> 71.153971 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +244.0 + + +fltx fmod +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 69.569499 ns -> 71.153971 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.7 + + +fltx fmod +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 69.569499 ns -> 71.153971 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx fmod +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 69.569499 ns -> 71.153971 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +69.57 ns (+1.58 ns) + + +fltx fmod +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 69.569499 ns -> 71.153971 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fmod +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 69.569499 ns -> 71.153971 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmod +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 243.996795284 -> 243.996795284 +worst bits: 217.724535 -> 217.724535 +domains: 3/3 -> 3/3 +time: 69.569499 ns -> 71.153971 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remainder + +fltx remainder +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 99.110874 ns -> 99.607104 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remainder +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 99.110874 ns -> 99.607104 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remainder +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 99.110874 ns -> 99.607104 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remainder +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 99.110874 ns -> 99.607104 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +99.11 ns (+0.496 ns) + + +fltx remainder +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 99.110874 ns -> 99.607104 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx remainder +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 99.110874 ns -> 99.607104 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remainder +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 99.110874 ns -> 99.607104 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +remquo + +fltx remquo +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 99.992051 ns -> 98.09911 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 99.992051 ns -> 98.09911 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx remquo +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 99.992051 ns -> 98.09911 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx remquo +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 99.992051 ns -> 98.09911 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +99.99 ns (-1.89 ns) + + +fltx remquo +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 99.992051 ns -> 98.09911 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx remquo +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 99.992051 ns -> 98.09911 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx remquo +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 99.992051 ns -> 98.09911 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Float Utils + +abs + +fltx abs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.582144 ns -> 0.694394 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: yes -> no + +exact + + +fltx abs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.582144 ns -> 0.694394 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: yes -> no + +exact + + +fltx abs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.582144 ns -> 0.694394 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: yes -> no + +1/1 + + +fltx abs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.582144 ns -> 0.694394 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: yes -> no + +1.58 ns (-0.888 ns) + + +fltx abs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.582144 ns -> 0.694394 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: yes -> no + +Both + + +fltx abs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.582144 ns -> 0.694394 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: yes -> no + +✓ (✗) + + +fltx abs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.582144 ns -> 0.694394 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: yes -> no + +✓ (✗) + + +fabs + +fltx fabs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.600566 ns -> 0.69389 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +exact + + +fltx fabs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.600566 ns -> 0.69389 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +exact + + +fltx fabs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.600566 ns -> 0.69389 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +1/1 + + +fltx fabs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.600566 ns -> 0.69389 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +1.60 ns (-0.907 ns) + + +fltx fabs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.600566 ns -> 0.69389 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +Both + + +fltx fabs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.600566 ns -> 0.69389 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +✓ (✗) + + +fltx fabs +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.600566 ns -> 0.69389 ns +special values: Both -> Both +signed zero: yes -> no +subnormal support: - -> - + +- + + +fma + +fltx fma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 38.162435 ns -> 37.914225 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +229.7 + + +fltx fma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 38.162435 ns -> 37.914225 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +215.1 + + +fltx fma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 38.162435 ns -> 37.914225 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +3/3 + + +fltx fma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 38.162435 ns -> 37.914225 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +38.16 ns (-0.248 ns) + + +fltx fma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 38.162435 ns -> 37.914225 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx fma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 38.162435 ns -> 37.914225 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx fma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.715460613 -> 229.715460613 +worst bits: 215.096656 -> 215.096656 +domains: 3/3 -> 3/3 +time: 38.162435 ns -> 37.914225 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + +recip + +fltx recip +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.927920075 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 100.988188 ns -> 104.033203 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +217.9 (+0.003) + + +fltx recip +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.927920075 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 100.988188 ns -> 104.033203 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +214.6 + + +fltx recip +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.927920075 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 100.988188 ns -> 104.033203 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx recip +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.927920075 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 100.988188 ns -> 104.033203 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +101.0 ns (+3.05 ns) + + +fltx recip +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.927920075 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 100.988188 ns -> 104.033203 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +Both (-NaN) + + +fltx recip +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.927920075 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 100.988188 ns -> 104.033203 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx recip +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.92444534 -> 217.927920075 +worst bits: 214.625136 -> 214.625136 +domains: 2/2 -> 2/2 +time: 100.988188 ns -> 104.033203 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fmin + +fltx fmin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.528652 ns -> 1.472511 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.528652 ns -> 1.472511 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.528652 ns -> 1.472511 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.528652 ns -> 1.472511 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +1.53 ns (-0.056 ns) + + +fltx fmin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.528652 ns -> 1.472511 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +Both (-NaN) + + +fltx fmin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.528652 ns -> 1.472511 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.528652 ns -> 1.472511 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fmax + +fltx fmax +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.632334 ns -> 1.477668 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.632334 ns -> 1.477668 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fmax +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.632334 ns -> 1.477668 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fmax +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.632334 ns -> 1.477668 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +1.63 ns (-0.155 ns) + + +fltx fmax +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.632334 ns -> 1.477668 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +Both (-NaN) + + +fltx fmax +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.632334 ns -> 1.477668 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fmax +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.632334 ns -> 1.477668 ns +special values: Both -> Inf +signed zero: yes -> yes +subnormal support: - -> - + +- + + +fdim + +fltx fdim +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.472039 ns -> 5.304473 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fdim +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.472039 ns -> 5.304473 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx fdim +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.472039 ns -> 5.304473 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx fdim +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.472039 ns -> 5.304473 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +5.47 ns (-0.168 ns) + + +fltx fdim +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.472039 ns -> 5.304473 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx fdim +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.472039 ns -> 5.304473 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx fdim +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 5.472039 ns -> 5.304473 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +copysign + +fltx copysign +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.682812 ns -> 0.666614 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.682812 ns -> 0.666614 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx copysign +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.682812 ns -> 0.666614 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx copysign +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.682812 ns -> 0.666614 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +0.683 ns (-0.016 ns) + + +fltx copysign +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.682812 ns -> 0.666614 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx copysign +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.682812 ns -> 0.666614 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx copysign +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.682812 ns -> 0.666614 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ldexp + +fltx ldexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.704102 ns -> 6.204948 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.704102 ns -> 6.204948 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx ldexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.704102 ns -> 6.204948 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx ldexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.704102 ns -> 6.204948 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.70 ns (+4.50 ns) + + +fltx ldexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.704102 ns -> 6.204948 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx ldexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.704102 ns -> 6.204948 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx ldexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.704102 ns -> 6.204948 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbn + +fltx scalbn +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.706172 ns -> 5.903787 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.706172 ns -> 5.903787 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbn +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.706172 ns -> 5.903787 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbn +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.706172 ns -> 5.903787 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.71 ns (+4.20 ns) + + +fltx scalbn +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.706172 ns -> 5.903787 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx scalbn +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.706172 ns -> 5.903787 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbn +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.706172 ns -> 5.903787 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +scalbln + +fltx scalbln +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.697666 ns -> 5.9047 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.697666 ns -> 5.9047 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx scalbln +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.697666 ns -> 5.9047 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1/1 + + +fltx scalbln +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.697666 ns -> 5.9047 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1.70 ns (+4.21 ns) + + +fltx scalbln +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.697666 ns -> 5.9047 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx scalbln +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.697666 ns -> 5.9047 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx scalbln +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 1.697666 ns -> 5.9047 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +frexp + +fltx frexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.66624 ns -> 9.577934 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx frexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.66624 ns -> 9.577934 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +exact + + +fltx frexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.66624 ns -> 9.577934 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +1/1 + + +fltx frexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.66624 ns -> 9.577934 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +10.67 ns (-1.09 ns) + + +fltx frexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.66624 ns -> 9.577934 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx frexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.66624 ns -> 9.577934 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx frexp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 10.66624 ns -> 9.577934 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +modf + +fltx modf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 14.709925 ns -> 14.305943 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 14.709925 ns -> 14.305943 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +exact + + +fltx modf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 14.709925 ns -> 14.305943 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx modf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 14.709925 ns -> 14.305943 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +14.71 ns (-0.404 ns) + + +fltx modf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 14.709925 ns -> 14.305943 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx modf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 14.709925 ns -> 14.305943 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx modf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 14.709925 ns -> 14.305943 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ilogb + +fltx ilogb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.066212 ns -> 0.929282 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.066212 ns -> 0.929282 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx ilogb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.066212 ns -> 0.929282 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx ilogb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.066212 ns -> 0.929282 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1.07 ns (-0.137 ns) + + +fltx ilogb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.066212 ns -> 0.929282 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.066212 ns -> 0.929282 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx ilogb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.066212 ns -> 0.929282 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +logb + +fltx logb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.077894 ns -> 1.074157 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.077894 ns -> 1.074157 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx logb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.077894 ns -> 1.074157 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx logb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.077894 ns -> 1.074157 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1.08 ns (-0.004 ns) + + +fltx logb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.077894 ns -> 1.074157 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx logb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.077894 ns -> 1.074157 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx logb +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 2/2 -> 2/2 +time: 1.077894 ns -> 1.074157 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +nextafter + +fltx nextafter +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.644847 ns -> 4.206465 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.644847 ns -> 4.206465 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.644847 ns -> 4.206465 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.644847 ns -> 4.206465 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +4.64 ns (-0.438 ns) + + +fltx nextafter +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.644847 ns -> 4.206465 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.644847 ns -> 4.206465 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nextafter +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.644847 ns -> 4.206465 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +nexttoward + +fltx nexttoward +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.443498 ns -> 4.275349 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.443498 ns -> 4.275349 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.443498 ns -> 4.275349 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.443498 ns -> 4.275349 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +4.44 ns (-0.168 ns) + + +fltx nexttoward +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.443498 ns -> 4.275349 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.443498 ns -> 4.275349 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx nexttoward +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4.443498 ns -> 4.275349 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Roots & powers + +sqr + +fltx sqr +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 22.753906 ns -> 22.792969 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +220.1 + + +fltx sqr +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 22.753906 ns -> 22.792969 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +215.3 + + +fltx sqr +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 22.753906 ns -> 22.792969 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sqr +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 22.753906 ns -> 22.792969 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +22.75 ns (+0.039 ns) + + +fltx sqr +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 22.753906 ns -> 22.792969 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sqr +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 22.753906 ns -> 22.792969 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sqr +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 220.120699598 -> 220.120699598 +worst bits: 215.25119 -> 215.25119 +domains: 2/2 -> 2/2 +time: 22.753906 ns -> 22.792969 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +sqrt + +fltx sqrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 120.250244 ns -> 121.181641 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +217.8 + + +fltx sqrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 120.250244 ns -> 121.181641 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +209.6 + + +fltx sqrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 120.250244 ns -> 121.181641 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +3/3 + + +fltx sqrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 120.250244 ns -> 121.181641 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +120.3 ns (+0.931 ns) + + +fltx sqrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 120.250244 ns -> 121.181641 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +Both + + +fltx sqrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 120.250244 ns -> 121.181641 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +fltx sqrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.76101457302093 -> 217.76101457302093 +worst bits: 209.568118 -> 209.568118 +domains: 3/3 -> 3/3 +time: 120.250244 ns -> 121.181641 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: yes -> yes + +✓ + + +cbrt + +fltx cbrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.287553022 -> 219.287553022 +worst bits: 214.867489 -> 214.867489 +domains: 2/2 -> 2/2 +time: 382.333519 ns -> 387.411644 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +219.3 + + +fltx cbrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.287553022 -> 219.287553022 +worst bits: 214.867489 -> 214.867489 +domains: 2/2 -> 2/2 +time: 382.333519 ns -> 387.411644 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.9 + + +fltx cbrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.287553022 -> 219.287553022 +worst bits: 214.867489 -> 214.867489 +domains: 2/2 -> 2/2 +time: 382.333519 ns -> 387.411644 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx cbrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.287553022 -> 219.287553022 +worst bits: 214.867489 -> 214.867489 +domains: 2/2 -> 2/2 +time: 382.333519 ns -> 387.411644 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +382.3 ns (+5.08 ns) + + +fltx cbrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.287553022 -> 219.287553022 +worst bits: 214.867489 -> 214.867489 +domains: 2/2 -> 2/2 +time: 382.333519 ns -> 387.411644 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx cbrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.287553022 -> 219.287553022 +worst bits: 214.867489 -> 214.867489 +domains: 2/2 -> 2/2 +time: 382.333519 ns -> 387.411644 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx cbrt +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.287553022 -> 219.287553022 +worst bits: 214.867489 -> 214.867489 +domains: 2/2 -> 2/2 +time: 382.333519 ns -> 387.411644 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +hypot + +fltx hypot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.930731323 -> 229.931215146 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 175.20419 ns -> 174.938965 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +229.9 (+0.000484) + + +fltx hypot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.930731323 -> 229.931215146 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 175.20419 ns -> 174.938965 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +213.9 + + +fltx hypot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.930731323 -> 229.931215146 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 175.20419 ns -> 174.938965 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx hypot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.930731323 -> 229.931215146 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 175.20419 ns -> 174.938965 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +175.2 ns (-0.265 ns) + + +fltx hypot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.930731323 -> 229.931215146 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 175.20419 ns -> 174.938965 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx hypot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.930731323 -> 229.931215146 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 175.20419 ns -> 174.938965 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx hypot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 229.930731323 -> 229.931215146 +worst bits: 213.870154 -> 213.870154 +domains: 2/2 -> 2/2 +time: 175.20419 ns -> 174.938965 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +pow + +fltx pow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2712.353516 ns -> 2714.453125 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +216.8 + + +fltx pow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2712.353516 ns -> 2714.453125 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +211.1 + + +fltx pow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2712.353516 ns -> 2714.453125 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx pow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2712.353516 ns -> 2714.453125 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2,712 ns (+2.10 ns) + + +fltx pow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2712.353516 ns -> 2714.453125 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx pow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2712.353516 ns -> 2714.453125 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx pow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.837164 -> 216.837164 +worst bits: 211.143117 -> 211.143117 +domains: 2/2 -> 2/2 +time: 2712.353516 ns -> 2714.453125 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +ipow + +fltx ipow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 121.609318 ns -> 121.701389 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +217.2 + + +fltx ipow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 121.609318 ns -> 121.701389 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +213.7 + + +fltx ipow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 121.609318 ns -> 121.701389 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +2/2 + + +fltx ipow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 121.609318 ns -> 121.701389 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +121.6 ns (+0.092 ns) + + +fltx ipow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 121.609318 ns -> 121.701389 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +Both + + +fltx ipow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 121.609318 ns -> 121.701389 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +✗ + + +fltx ipow +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.175762701 -> 217.175762701 +worst bits: 213.656994 -> 213.656994 +domains: 2/2 -> 2/2 +time: 121.609318 ns -> 121.701389 ns +special values: Both -> Both +signed zero: no -> no +subnormal support: - -> - + +- + + + +Exponentials + +exp + +fltx exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.736722 -> 216.4305135 +worst bits: 208.947269 -> 209.697661 +domains: 2/2 -> 2/2 +time: 1077.91748 ns -> 1072.558594 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +216.7 (-0.3) + + +fltx exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.736722 -> 216.4305135 +worst bits: 208.947269 -> 209.697661 +domains: 2/2 -> 2/2 +time: 1077.91748 ns -> 1072.558594 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +208.9 (+0.8) + + +fltx exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.736722 -> 216.4305135 +worst bits: 208.947269 -> 209.697661 +domains: 2/2 -> 2/2 +time: 1077.91748 ns -> 1072.558594 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.736722 -> 216.4305135 +worst bits: 208.947269 -> 209.697661 +domains: 2/2 -> 2/2 +time: 1077.91748 ns -> 1072.558594 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,078 ns (-5.36 ns) + + +fltx exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.736722 -> 216.4305135 +worst bits: 208.947269 -> 209.697661 +domains: 2/2 -> 2/2 +time: 1077.91748 ns -> 1072.558594 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.736722 -> 216.4305135 +worst bits: 208.947269 -> 209.697661 +domains: 2/2 -> 2/2 +time: 1077.91748 ns -> 1072.558594 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.736722 -> 216.4305135 +worst bits: 208.947269 -> 209.697661 +domains: 2/2 -> 2/2 +time: 1077.91748 ns -> 1072.558594 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +exp2 + +fltx exp2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 908.691406 ns -> 910.888672 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +218.0 + + +fltx exp2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 908.691406 ns -> 910.888672 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +214.2 + + +fltx exp2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 908.691406 ns -> 910.888672 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx exp2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 908.691406 ns -> 910.888672 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +908.7 ns (+2.20 ns) + + +fltx exp2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 908.691406 ns -> 910.888672 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx exp2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 908.691406 ns -> 910.888672 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx exp2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.030361 -> 218.030361 +worst bits: 214.202868 -> 214.202868 +domains: 2/2 -> 2/2 +time: 908.691406 ns -> 910.888672 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +expm1 + +fltx expm1 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.989217153 +worst bits: 207 -> 213.793932 +domains: 2/2 -> 2/2 +time: 1072.973633 ns -> 1068.371582 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +227.2 (+0.8) + + +fltx expm1 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.989217153 +worst bits: 207 -> 213.793932 +domains: 2/2 -> 2/2 +time: 1072.973633 ns -> 1068.371582 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +207.0 (+6.8) + + +fltx expm1 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.989217153 +worst bits: 207 -> 213.793932 +domains: 2/2 -> 2/2 +time: 1072.973633 ns -> 1068.371582 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx expm1 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.989217153 +worst bits: 207 -> 213.793932 +domains: 2/2 -> 2/2 +time: 1072.973633 ns -> 1068.371582 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,073 ns (-4.60 ns) + + +fltx expm1 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.989217153 +worst bits: 207 -> 213.793932 +domains: 2/2 -> 2/2 +time: 1072.973633 ns -> 1068.371582 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx expm1 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.989217153 +worst bits: 207 -> 213.793932 +domains: 2/2 -> 2/2 +time: 1072.973633 ns -> 1068.371582 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx expm1 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 227.154452503 -> 227.989217153 +worst bits: 207 -> 213.793932 +domains: 2/2 -> 2/2 +time: 1072.973633 ns -> 1068.371582 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Logarithms + +log + +fltx log +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.713430044 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1781.660156 ns -> 1781.054688 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.8 (-0.1) + + +fltx log +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.713430044 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1781.660156 ns -> 1781.054688 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +213.3 + + +fltx log +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.713430044 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1781.660156 ns -> 1781.054688 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.713430044 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1781.660156 ns -> 1781.054688 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,782 ns (-0.605 ns) + + +fltx log +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.713430044 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1781.660156 ns -> 1781.054688 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.713430044 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1781.660156 ns -> 1781.054688 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.776072084 -> 217.713430044 +worst bits: 213.252927 -> 213.252927 +domains: 3/3 -> 3/3 +time: 1781.660156 ns -> 1781.054688 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log2 + +fltx log2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.589512067 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1830.195312 ns -> 1808.867188 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +218.6 (-0.024) + + +fltx log2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.589512067 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1830.195312 ns -> 1808.867188 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +213.2 + + +fltx log2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.589512067 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1830.195312 ns -> 1808.867188 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.589512067 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1830.195312 ns -> 1808.867188 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,830 ns (-21.33 ns) + + +fltx log2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.589512067 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1830.195312 ns -> 1808.867188 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.589512067 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1830.195312 ns -> 1808.867188 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.61302666 -> 218.589512067 +worst bits: 213.192358 -> 213.192358 +domains: 3/3 -> 3/3 +time: 1830.195312 ns -> 1808.867188 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log10 + +fltx log10 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.407206146 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1826.367188 ns -> 1828.007812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.4 (-0.041) + + +fltx log10 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.407206146 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1826.367188 ns -> 1828.007812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +213.3 + + +fltx log10 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.407206146 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1826.367188 ns -> 1828.007812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx log10 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.407206146 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1826.367188 ns -> 1828.007812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,826 ns (+1.64 ns) + + +fltx log10 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.407206146 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1826.367188 ns -> 1828.007812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx log10 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.407206146 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1826.367188 ns -> 1828.007812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log10 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.44848007 -> 217.407206146 +worst bits: 213.257193 -> 213.257193 +domains: 3/3 -> 3/3 +time: 1826.367188 ns -> 1828.007812 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +log1p + +fltx log1p +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 227.627482935 +worst bits: 207 -> 214.020088 +domains: 2/2 -> 2/2 +time: 1835 ns -> 1839.433594 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +226.8 (+0.8) + + +fltx log1p +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 227.627482935 +worst bits: 207 -> 214.020088 +domains: 2/2 -> 2/2 +time: 1835 ns -> 1839.433594 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +207.0 (+7.0) + + +fltx log1p +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 227.627482935 +worst bits: 207 -> 214.020088 +domains: 2/2 -> 2/2 +time: 1835 ns -> 1839.433594 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx log1p +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 227.627482935 +worst bits: 207 -> 214.020088 +domains: 2/2 -> 2/2 +time: 1835 ns -> 1839.433594 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,835 ns (+4.43 ns) + + +fltx log1p +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 227.627482935 +worst bits: 207 -> 214.020088 +domains: 2/2 -> 2/2 +time: 1835 ns -> 1839.433594 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx log1p +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 227.627482935 +worst bits: 207 -> 214.020088 +domains: 2/2 -> 2/2 +time: 1835 ns -> 1839.433594 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx log1p +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.82219119 -> 227.627482935 +worst bits: 207 -> 214.020088 +domains: 2/2 -> 2/2 +time: 1835 ns -> 1839.433594 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Trigonometric + +sin + +fltx sin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 897.829861 ns -> 896.25 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +222.3 + + +fltx sin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 897.829861 ns -> 896.25 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +202.9 + + +fltx sin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 897.829861 ns -> 896.25 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx sin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 897.829861 ns -> 896.25 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +897.8 ns (-1.58 ns) + + +fltx sin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 897.829861 ns -> 896.25 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 897.829861 ns -> 896.25 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 222.290222968 -> 222.290222968 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 897.829861 ns -> 896.25 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cos + +fltx cos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 897.490234 ns -> 898.349609 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +226.8 + + +fltx cos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 897.490234 ns -> 898.349609 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +208.7 + + +fltx cos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 897.490234 ns -> 898.349609 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +3/3 + + +fltx cos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 897.490234 ns -> 898.349609 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +897.5 ns (+0.859 ns) + + +fltx cos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 897.490234 ns -> 898.349609 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 897.490234 ns -> 898.349609 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 226.780465244 -> 226.780465244 +worst bits: 208.674366 -> 208.674366 +domains: 3/3 -> 3/3 +time: 897.490234 ns -> 898.349609 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +sincos + +fltx sincos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1114.880371 ns -> 1299.06529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1114.880371 ns -> 1299.06529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1114.880371 ns -> 1299.06529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1114.880371 ns -> 1299.06529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1,115 ns (+184.2 ns) + + +fltx sincos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1114.880371 ns -> 1299.06529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1114.880371 ns -> 1299.06529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx sincos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1114.880371 ns -> 1299.06529 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +tan + +fltx tan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1208.59375 ns -> 1356.222098 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.1 + + +fltx tan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1208.59375 ns -> 1356.222098 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +202.9 + + +fltx tan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1208.59375 ns -> 1356.222098 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx tan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1208.59375 ns -> 1356.222098 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,209 ns (+147.6 ns) + + +fltx tan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1208.59375 ns -> 1356.222098 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx tan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1208.59375 ns -> 1356.222098 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.050653666 -> 217.050653666 +worst bits: 202.92477 -> 202.92477 +domains: 3/3 -> 3/3 +time: 1208.59375 ns -> 1356.222098 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asin + +fltx asin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1399.902344 ns -> 1406.119792 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.9 + + +fltx asin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1399.902344 ns -> 1406.119792 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.4 + + +fltx asin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1399.902344 ns -> 1406.119792 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1399.902344 ns -> 1406.119792 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,400 ns (+6.22 ns) + + +fltx asin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1399.902344 ns -> 1406.119792 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx asin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1399.902344 ns -> 1406.119792 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asin +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.91775033 -> 217.91775033 +worst bits: 214.404436 -> 214.404436 +domains: 2/2 -> 2/2 +time: 1399.902344 ns -> 1406.119792 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acos + +fltx acos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1417.692057 ns -> 1408.414714 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +216.0 + + +fltx acos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1417.692057 ns -> 1408.414714 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +192.5 + + +fltx acos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1417.692057 ns -> 1408.414714 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1417.692057 ns -> 1408.414714 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,418 ns (-9.28 ns) + + +fltx acos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1417.692057 ns -> 1408.414714 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx acos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1417.692057 ns -> 1408.414714 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acos +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 216.029308016 -> 216.029308016 +worst bits: 192.466318 -> 192.466318 +domains: 2/2 -> 2/2 +time: 1417.692057 ns -> 1408.414714 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +atan + +fltx atan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 908.44184 ns -> 908.268229 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +218.1 + + +fltx atan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 908.44184 ns -> 908.268229 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.7 + + +fltx atan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 908.44184 ns -> 908.268229 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 908.44184 ns -> 908.268229 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +908.4 ns (-0.174 ns) + + +fltx atan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 908.44184 ns -> 908.268229 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 908.44184 ns -> 908.268229 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.142465 -> 218.142465 +worst bits: 214.678988 -> 214.678988 +domains: 2/2 -> 2/2 +time: 908.44184 ns -> 908.268229 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +atan2 + +fltx atan2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 972.873264 ns -> 966.113281 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.9 + + +fltx atan2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 972.873264 ns -> 966.113281 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.3 + + +fltx atan2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 972.873264 ns -> 966.113281 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +3/3 + + +fltx atan2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 972.873264 ns -> 966.113281 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +972.9 ns (-6.76 ns) + + +fltx atan2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 972.873264 ns -> 966.113281 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atan2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 972.873264 ns -> 966.113281 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atan2 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.911773079 -> 217.911773079 +worst bits: 214.277602 -> 214.277602 +domains: 3/3 -> 3/3 +time: 972.873264 ns -> 966.113281 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Hyperbolic + +sinh + +fltx sinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1361.425781 ns -> 1394.108073 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.0 + + +fltx sinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1361.425781 ns -> 1394.108073 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +213.8 + + +fltx sinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1361.425781 ns -> 1394.108073 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx sinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1361.425781 ns -> 1394.108073 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,361 ns (+32.68 ns) + + +fltx sinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1361.425781 ns -> 1394.108073 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx sinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1361.425781 ns -> 1394.108073 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx sinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.022625 -> 217.022625 +worst bits: 213.844482 -> 213.844482 +domains: 2/2 -> 2/2 +time: 1361.425781 ns -> 1394.108073 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +cosh + +fltx cosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1360.867746 ns -> 1399.135045 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.5 + + +fltx cosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1360.867746 ns -> 1399.135045 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +214.2 + + +fltx cosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1360.867746 ns -> 1399.135045 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx cosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1360.867746 ns -> 1399.135045 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1,361 ns (+38.27 ns) + + +fltx cosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1360.867746 ns -> 1399.135045 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx cosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1360.867746 ns -> 1399.135045 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx cosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.5106305 -> 217.5106305 +worst bits: 214.159072 -> 214.159072 +domains: 2/2 -> 2/2 +time: 1360.867746 ns -> 1399.135045 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +tanh + +fltx tanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1315.513393 ns -> 1315.959821 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +219.1 + + +fltx tanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1315.513393 ns -> 1315.959821 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +214.0 + + +fltx tanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1315.513393 ns -> 1315.959821 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx tanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1315.513393 ns -> 1315.959821 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +1,316 ns (+0.446 ns) + + +fltx tanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1315.513393 ns -> 1315.959821 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx tanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1315.513393 ns -> 1315.959821 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx tanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 219.128554 -> 219.128554 +worst bits: 214.042672 -> 214.042672 +domains: 2/2 -> 2/2 +time: 1315.513393 ns -> 1315.959821 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +asinh + +fltx asinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2757.845052 ns -> 2806.673177 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +217.2 + + +fltx asinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2757.845052 ns -> 2806.673177 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +213.0 + + +fltx asinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2757.845052 ns -> 2806.673177 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx asinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2757.845052 ns -> 2806.673177 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2,758 ns (+48.83 ns) + + +fltx asinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2757.845052 ns -> 2806.673177 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx asinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2757.845052 ns -> 2806.673177 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx asinh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.1921705 -> 217.1921705 +worst bits: 212.956798 -> 212.956798 +domains: 2/2 -> 2/2 +time: 2757.845052 ns -> 2806.673177 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +acosh + +fltx acosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2547.802734 ns -> 2564.916992 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +217.7 + + +fltx acosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2547.802734 ns -> 2564.916992 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +213.7 + + +fltx acosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2547.802734 ns -> 2564.916992 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx acosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2547.802734 ns -> 2564.916992 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2,548 ns (+17.11 ns) + + +fltx acosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2547.802734 ns -> 2564.916992 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx acosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2547.802734 ns -> 2564.916992 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx acosh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 217.720725959 -> 217.720725959 +worst bits: 213.709421 -> 213.709421 +domains: 2/2 -> 2/2 +time: 2547.802734 ns -> 2564.916992 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +atanh + +fltx atanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2427.34375 ns -> 2405.859375 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +218.3 + + +fltx atanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2427.34375 ns -> 2405.859375 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +213.3 + + +fltx atanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2427.34375 ns -> 2405.859375 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx atanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2427.34375 ns -> 2405.859375 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2,427 ns (-21.48 ns) + + +fltx atanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2427.34375 ns -> 2405.859375 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx atanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2427.34375 ns -> 2405.859375 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx atanh +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 218.285376518 -> 218.285376518 +worst bits: 213.300563 -> 213.300563 +domains: 2/2 -> 2/2 +time: 2427.34375 ns -> 2405.859375 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + + +Special + +erfc + +fltx erfc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 12796.09375 ns -> 11072.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +208.2 + + +fltx erfc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 12796.09375 ns -> 11072.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +189.8 + + +fltx erfc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 12796.09375 ns -> 11072.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +2/2 + + +fltx erfc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 12796.09375 ns -> 11072.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +12,796 ns (-1,723 ns) + + +fltx erfc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 12796.09375 ns -> 11072.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx erfc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 12796.09375 ns -> 11072.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx erfc +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 208.160201 -> 208.160201 +worst bits: 189.779688 -> 189.779688 +domains: 2/2 -> 2/2 +time: 12796.09375 ns -> 11072.65625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +erf + +fltx erf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 12755.46875 ns -> 11166.40625 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +212.8 + + +fltx erf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 12755.46875 ns -> 11166.40625 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +196.8 + + +fltx erf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 12755.46875 ns -> 11166.40625 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +2/2 + + +fltx erf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 12755.46875 ns -> 11166.40625 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +12,755 ns (-1,589 ns) + + +fltx erf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 12755.46875 ns -> 11166.40625 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +Both + + +fltx erf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 12755.46875 ns -> 11166.40625 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +✓ + + +fltx erf +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 212.782396 -> 212.782396 +worst bits: 196.755396 -> 196.755396 +domains: 2/2 -> 2/2 +time: 12755.46875 ns -> 11166.40625 ns +special values: Both -> Both +signed zero: yes -> yes +subnormal support: - -> - + +- + + +tgamma + +fltx tgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 10132.8125 ns -> 10126.5625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +209.0 + + +fltx tgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 10132.8125 ns -> 10126.5625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +202.5 + + +fltx tgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 10132.8125 ns -> 10126.5625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx tgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 10132.8125 ns -> 10126.5625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +10,133 ns (-6.25 ns) + + +fltx tgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 10132.8125 ns -> 10126.5625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx tgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 10132.8125 ns -> 10126.5625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx tgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 209.040528 -> 209.040528 +worst bits: 202.45702 -> 202.45702 +domains: 1/1 -> 1/1 +time: 10132.8125 ns -> 10126.5625 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +lgamma + +fltx lgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 9141.40625 ns -> 9099.21875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +211.9 + + +fltx lgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 9141.40625 ns -> 9099.21875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +199.2 + + +fltx lgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 9141.40625 ns -> 9099.21875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx lgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 9141.40625 ns -> 9099.21875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +9,141 ns (-42.19 ns) + + +fltx lgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 9141.40625 ns -> 9099.21875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx lgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 9141.40625 ns -> 9099.21875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx lgamma +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: 211.903615 -> 211.903615 +worst bits: 199.225949 -> 199.225949 +domains: 1/1 -> 1/1 +time: 9141.40625 ns -> 9099.21875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + + +Comparisons + +equal + +fltx equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.666876 ns -> 0.539875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.666876 ns -> 0.539875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.666876 ns -> 0.539875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.666876 ns -> 0.539875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.667 ns (-0.127 ns) + + +fltx equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.666876 ns -> 0.539875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.666876 ns -> 0.539875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.666876 ns -> 0.539875 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +not_equal + +fltx not_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.73972 ns -> 0.604791 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.73972 ns -> 0.604791 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx not_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.73972 ns -> 0.604791 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx not_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.73972 ns -> 0.604791 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.740 ns (-0.135 ns) + + +fltx not_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.73972 ns -> 0.604791 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx not_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.73972 ns -> 0.604791 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx not_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.73972 ns -> 0.604791 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less + +fltx less +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.701605 ns -> 0.79452 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.701605 ns -> 0.79452 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.701605 ns -> 0.79452 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.701605 ns -> 0.79452 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.702 ns (+0.093 ns) + + +fltx less +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.701605 ns -> 0.79452 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.701605 ns -> 0.79452 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.701605 ns -> 0.79452 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater + +fltx greater +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.68559 ns -> 1.873497 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.68559 ns -> 1.873497 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.68559 ns -> 1.873497 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.68559 ns -> 1.873497 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.686 ns (+1.19 ns) + + +fltx greater +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.68559 ns -> 1.873497 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.68559 ns -> 1.873497 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.68559 ns -> 1.873497 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +less_equal + +fltx less_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.712379 ns -> 0.814922 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.712379 ns -> 0.814922 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx less_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.712379 ns -> 0.814922 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx less_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.712379 ns -> 0.814922 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.712 ns (+0.103 ns) + + +fltx less_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.712379 ns -> 0.814922 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx less_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.712379 ns -> 0.814922 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx less_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.712379 ns -> 0.814922 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +greater_equal + +fltx greater_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.685543 ns -> 0.808873 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.685543 ns -> 0.808873 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +exact + + +fltx greater_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.685543 ns -> 0.808873 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +1/1 + + +fltx greater_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.685543 ns -> 0.808873 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +0.686 ns (+0.123 ns) + + +fltx greater_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.685543 ns -> 0.808873 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +Both + + +fltx greater_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.685543 ns -> 0.808873 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx greater_equal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: inf -> inf +worst bits: inf -> inf +domains: 1/1 -> 1/1 +time: 0.685543 ns -> 0.808873 ns +special values: Both -> Both +signed zero: - -> - +subnormal support: - -> - + +- + + + +Random + +uniform_real + +fltx uniform_real +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 42.444796 ns -> 40.563986 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 42.444796 ns -> 40.563986 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 42.444796 ns -> 40.563986 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 42.444796 ns -> 40.563986 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +42.44 ns (-1.88 ns) + + +fltx uniform_real +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 42.444796 ns -> 40.563986 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 42.444796 ns -> 40.563986 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx uniform_real +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 42.444796 ns -> 40.563986 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +normal + +fltx normal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 367.940771 ns -> 354.774767 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 367.940771 ns -> 354.774767 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 367.940771 ns -> 354.774767 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 367.940771 ns -> 354.774767 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +367.9 ns (-13.17 ns) + + +fltx normal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 367.940771 ns -> 354.774767 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 367.940771 ns -> 354.774767 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx normal +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 367.940771 ns -> 354.774767 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + +Mixed Workloads + +product_sum + +fltx product_sum +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 46.246338 ns -> 46.193576 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 46.246338 ns -> 46.193576 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 46.246338 ns -> 46.193576 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 46.246338 ns -> 46.193576 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +46.25 ns (-0.053 ns) + + +fltx product_sum +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 46.246338 ns -> 46.193576 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 46.246338 ns -> 46.193576 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx product_sum +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 46.246338 ns -> 46.193576 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +chained_arithmetic + +fltx chained_arithmetic +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 164.733213 ns -> 164.655237 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 164.733213 ns -> 164.655237 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 164.733213 ns -> 164.655237 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 164.733213 ns -> 164.655237 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +164.7 ns (-0.078 ns) + + +fltx chained_arithmetic +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 164.733213 ns -> 164.655237 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 164.733213 ns -> 164.655237 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx chained_arithmetic +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 164.733213 ns -> 164.655237 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +affine_trig + +fltx affine_trig +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1834.4375 ns -> 1832.229167 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1834.4375 ns -> 1832.229167 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1834.4375 ns -> 1832.229167 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1834.4375 ns -> 1832.229167 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +1,834 ns (-2.21 ns) + + +fltx affine_trig +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1834.4375 ns -> 1832.229167 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1834.4375 ns -> 1832.229167 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx affine_trig +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 1834.4375 ns -> 1832.229167 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +mandelbrot + +fltx mandelbrot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 117.370217 ns -> 119.109848 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 117.370217 ns -> 119.109848 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 117.370217 ns -> 119.109848 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 117.370217 ns -> 119.109848 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +117.4 ns (+1.74 ns) + + +fltx mandelbrot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 117.370217 ns -> 119.109848 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 117.370217 ns -> 119.109848 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx mandelbrot +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 117.370217 ns -> 119.109848 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +matrix_vector_4x4 + +fltx matrix_vector_4x4 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 528.529199 ns -> 527.544301 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 528.529199 ns -> 527.544301 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 528.529199 ns -> 527.544301 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 528.529199 ns -> 527.544301 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +528.5 ns (-0.985 ns) + + +fltx matrix_vector_4x4 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 528.529199 ns -> 527.544301 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 528.529199 ns -> 527.544301 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx matrix_vector_4x4 +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 528.529199 ns -> 527.544301 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +horner_polynomial + +fltx horner_polynomial +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 422.572272 ns -> 420.368485 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 422.572272 ns -> 420.368485 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 422.572272 ns -> 420.368485 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 422.572272 ns -> 420.368485 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +422.6 ns (-2.20 ns) + + +fltx horner_polynomial +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 422.572272 ns -> 420.368485 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 422.572272 ns -> 420.368485 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx horner_polynomial +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 422.572272 ns -> 420.368485 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +newton_root + +fltx newton_root +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 236.779745 ns -> 236.633104 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 236.779745 ns -> 236.633104 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 236.779745 ns -> 236.633104 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 236.779745 ns -> 236.633104 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +236.8 ns (-0.147 ns) + + +fltx newton_root +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 236.779745 ns -> 236.633104 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 236.779745 ns -> 236.633104 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx newton_root +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 236.779745 ns -> 236.633104 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +log_sum_exp + +fltx log_sum_exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 9212.5 ns -> 9137.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 9212.5 ns -> 9137.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 9212.5 ns -> 9137.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 9212.5 ns -> 9137.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +9,212 ns (-75.00 ns) + + +fltx log_sum_exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 9212.5 ns -> 9137.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 9212.5 ns -> 9137.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx log_sum_exp +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 9212.5 ns -> 9137.5 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +haversine + +fltx haversine +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4722.575431 ns -> 4762.771739 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4722.575431 ns -> 4762.771739 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4722.575431 ns -> 4762.771739 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4722.575431 ns -> 4762.771739 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +4,723 ns (+40.20 ns) + + +fltx haversine +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4722.575431 ns -> 4762.771739 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4722.575431 ns -> 4762.771739 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + +fltx haversine +strict run: 1bc36f9be0894bcfb934a2e01311a61e +fast-math run: 1f47748c24e4435f9d017479a2e54bbd +source fingerprint: 7cd523deac971d7dc5123aa7d3aba292e38500fefa271f9811614c6106280be1 +mean bits: - -> - +worst bits: - -> - +domains: -/- -> -/- +time: 4722.575431 ns -> 4762.771739 ns +special values: - -> - +signed zero: - -> - +subnormal support: - -> - + +- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deltas: green improves under fast-math; red regresses. + diff --git a/validation/metrics/rebuild_tables.py b/validation/metrics/rebuild_tables.py new file mode 100644 index 0000000..69dfcde --- /dev/null +++ b/validation/metrics/rebuild_tables.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +"""Rebuild all metrics tables and overviews from existing data.""" + +from __future__ import annotations + +import sys +from pathlib import Path + + +METRICS_DIR = Path(__file__).resolve().parent +sys.path.insert(0, str(METRICS_DIR / "_internal")) + +from report_pipeline import main # noqa: E402 + + +if __name__ == "__main__": + raise SystemExit(main(METRICS_DIR)) diff --git a/validation/metrics/run_all_supported_metrics.py b/validation/metrics/run_all_supported_metrics.py new file mode 100644 index 0000000..ad5d658 --- /dev/null +++ b/validation/metrics/run_all_supported_metrics.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 +"""Run metrics for every supported preset on the current host.""" + +from __future__ import annotations + +import sys +from pathlib import Path + + +METRICS_DIR = Path(__file__).resolve().parent +ROOT = METRICS_DIR.parents[1] +sys.path.insert(0, str(METRICS_DIR / "_internal")) + +from supported_preset_pipeline import main # noqa: E402 + + +if __name__ == "__main__": + raise SystemExit(main(ROOT)) diff --git a/validation/metrics/run_preset_metrics.py b/validation/metrics/run_preset_metrics.py new file mode 100644 index 0000000..d3b5e74 --- /dev/null +++ b/validation/metrics/run_preset_metrics.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 +"""Run the complete metrics workflow from one CMake build preset.""" + +from __future__ import annotations + +import sys +from pathlib import Path + + +METRICS_DIR = Path(__file__).resolve().parent +ROOT = METRICS_DIR.parents[1] +sys.path.insert(0, str(METRICS_DIR / "_internal")) + +from preset_pipeline import main # noqa: E402 + + +if __name__ == "__main__": + raise SystemExit(main(ROOT)) diff --git a/validation/run_all_supported_checks.py b/validation/run_all_supported_checks.py new file mode 100644 index 0000000..ce1efdd --- /dev/null +++ b/validation/run_all_supported_checks.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 +"""Run the complete fltx CI checks for every supported host preset.""" + +from __future__ import annotations + +import sys +from pathlib import Path + + +VALIDATION_DIR = Path(__file__).resolve().parent +ROOT = VALIDATION_DIR.parent +sys.path.insert(0, str(VALIDATION_DIR / "_internal")) + +from supported_check_pipeline import main # noqa: E402 + + +if __name__ == "__main__": + raise SystemExit(main(ROOT)) diff --git a/validation/run_preset_checks.py b/validation/run_preset_checks.py new file mode 100644 index 0000000..a16ecbf --- /dev/null +++ b/validation/run_preset_checks.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 +"""Run the complete fltx CI checks from one CMake build preset.""" + +from __future__ import annotations + +import sys +from pathlib import Path + + +VALIDATION_DIR = Path(__file__).resolve().parent +ROOT = VALIDATION_DIR.parent +sys.path.insert(0, str(VALIDATION_DIR / "_internal")) + +from check_pipeline import main # noqa: E402 + + +if __name__ == "__main__": + raise SystemExit(main(ROOT)) diff --git a/validation/support/catch_main.cpp b/validation/support/catch_main.cpp new file mode 100644 index 0000000..5c66d12 --- /dev/null +++ b/validation/support/catch_main.cpp @@ -0,0 +1,13 @@ +#include + +#include "config_banner.hpp" + +#ifndef FLTX_TESTS_NAME +#define FLTX_TESTS_NAME "tests" +#endif + +int main(int argc, char* argv[]) +{ + fltx::tests::support::print_config_banner(FLTX_TESTS_NAME); + return Catch::Session{}.run(argc, argv); +} diff --git a/validation/support/config_banner.hpp b/validation/support/config_banner.hpp new file mode 100644 index 0000000..5388b96 --- /dev/null +++ b/validation/support/config_banner.hpp @@ -0,0 +1,195 @@ +#pragma once + +#include "source_identity.hpp" + +#include +#include + +#include +#include + +#ifndef FLTX_TESTS_COMPILER_ID +#define FLTX_TESTS_COMPILER_ID "unknown" +#endif + +#ifndef FLTX_TESTS_COMPILER_VERSION +#define FLTX_TESTS_COMPILER_VERSION "unknown" +#endif + +#ifndef FLTX_TESTS_COMPILER_FRONTEND_VARIANT +#define FLTX_TESTS_COMPILER_FRONTEND_VARIANT "unknown" +#endif + +#ifndef FLTX_TESTS_BUILD_CONFIG +#define FLTX_TESTS_BUILD_CONFIG "unknown" +#endif + +#ifndef FLTX_TESTS_SYSTEM_NAME +#define FLTX_TESTS_SYSTEM_NAME "unknown" +#endif + +#ifndef FLTX_TESTS_SYSTEM_PROCESSOR +#define FLTX_TESTS_SYSTEM_PROCESSOR "unknown" +#endif + +#ifndef FLTX_TESTS_BUILD_OPTIMIZED +#define FLTX_TESTS_BUILD_OPTIMIZED 0 +#endif + +#ifndef FLTX_TESTS_BUILD_FLAGS_HASH +#define FLTX_TESTS_BUILD_FLAGS_HASH "unknown" +#endif + +#ifndef FLTX_METRICS_QDPP_ENABLED +#define FLTX_METRICS_QDPP_ENABLED 0 +#endif + +#ifndef FLTX_METRICS_HAS_TLFLOAT +#define FLTX_METRICS_HAS_TLFLOAT 0 +#endif + +#if defined(__wasm32__) + #define FLTX_TESTS_ARCHITECTURE_NAME "wasm32" + #define FLTX_TESTS_ARCH_WASM32 1 + #define FLTX_TESTS_ARCH_ARM64 0 + #define FLTX_TESTS_ARCH_X86_64 0 +#elif defined(_M_ARM64) || defined(__aarch64__) + #define FLTX_TESTS_ARCHITECTURE_NAME "arm64" + #define FLTX_TESTS_ARCH_WASM32 0 + #define FLTX_TESTS_ARCH_ARM64 1 + #define FLTX_TESTS_ARCH_X86_64 0 +#elif defined(_M_X64) || defined(__x86_64__) + #define FLTX_TESTS_ARCHITECTURE_NAME "x86_64" + #define FLTX_TESTS_ARCH_WASM32 0 + #define FLTX_TESTS_ARCH_ARM64 0 + #define FLTX_TESTS_ARCH_X86_64 1 +#else + #define FLTX_TESTS_ARCHITECTURE_NAME "unknown" + #define FLTX_TESTS_ARCH_WASM32 0 + #define FLTX_TESTS_ARCH_ARM64 0 + #define FLTX_TESTS_ARCH_X86_64 0 +#endif + +#if defined(FLTX_TESTS_EXPECT_X86_64) && !FLTX_TESTS_ARCH_X86_64 + #error "validation preset requires an x86_64 target compiler" +#elif defined(FLTX_TESTS_EXPECT_ARM64) && !FLTX_TESTS_ARCH_ARM64 + #error "validation preset requires an ARM64 target compiler" +#elif defined(FLTX_TESTS_EXPECT_WASM32) && !FLTX_TESTS_ARCH_WASM32 + #error "validation preset requires a wasm32 target compiler" +#endif + +#if defined(FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH) + #if FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH && !defined(FLTX_FAST_MATH) + #error "consumer fast-math validation target was not compiled in fast-math mode" + #elif !FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH && defined(FLTX_FAST_MATH) + #error "strict consumer validation target was compiled in fast-math mode" + #endif +#endif + +namespace fltx::tests::support +{ + inline const char* fma_mode_name(bl::detail::configured_fma_mode mode) noexcept + { + switch (mode) + { + case bl::detail::configured_fma_mode::automatic: + return "AUTO"; + case bl::detail::configured_fma_mode::off: + return "OFF"; + case bl::detail::configured_fma_mode::assume: + return "ASSUME"; + } + return "invalid"; + } + + inline const char* fast_math_request_name( + bl::detail::internal_fast_math_request request) noexcept + { + switch (request) + { + case bl::detail::internal_fast_math_request::automatic: + return "AUTO"; + case bl::detail::internal_fast_math_request::enabled: + return "ON"; + case bl::detail::internal_fast_math_request::disabled: + return "OFF"; + } + return "invalid"; + } + + inline void print_config_banner(const char* test_name, const char* sample_mode = nullptr, + std::size_t samples = 0, std::size_t trials = 0) noexcept + { + const auto& library = bl::detail::library_build_info(); + + const char* fma = "AUTO"; + if constexpr (FLTX_HEADER_FMA_OFF) + fma = "OFF"; + else if constexpr (FLTX_HEADER_FMA_ASSUME) + fma = "ASSUME"; + + std::fprintf(stderr, "[fltx %s]\n", test_name); + if (sample_mode != nullptr) + { + std::fprintf(stderr, "[run] sample-mode=%s samples=%zu trials=%zu\n", sample_mode, + samples, trials); + } + std::fprintf(stderr, "[harness] qdpp=%s tlfloat=%s\n", FLTX_METRICS_QDPP_ENABLED ? "on" : "off", + FLTX_METRICS_HAS_TLFLOAT ? "on" : "off"); +#if !defined(FLTX_TESTS_ENABLE_EXTERNAL_COMPARISONS) || \ + !FLTX_TESTS_ENABLE_EXTERNAL_COMPARISONS || \ + (defined(FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH) && \ + FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH) + std::fprintf(stderr, "[implementations] f128=fltx f256=fltx\n"); +#else + std::fprintf(stderr, + "[implementations] f128=fltx%s,cppdd%s " + "f256=fltx%s,mpfr64%s\n", + FLTX_METRICS_QDPP_ENABLED ? ",qdpp" : "", FLTX_METRICS_HAS_TLFLOAT ? ",tlfloat" : "", + FLTX_METRICS_QDPP_ENABLED ? ",qdpp" : "", FLTX_METRICS_HAS_TLFLOAT ? ",tlfloat" : ""); +#endif + std::fprintf(stderr, + "[build] compiler-id=%s compiler-version=%s config=%s optimized=%d " + "system=%s processor=%s architecture=%s frontend-variant=%s " + "flags-hash=%s source-fingerprint=%s\n", + FLTX_TESTS_COMPILER_ID, FLTX_TESTS_COMPILER_VERSION, FLTX_TESTS_BUILD_CONFIG, + FLTX_TESTS_BUILD_OPTIMIZED, FLTX_TESTS_SYSTEM_NAME, FLTX_TESTS_SYSTEM_PROCESSOR, + FLTX_TESTS_ARCHITECTURE_NAME, FLTX_TESTS_COMPILER_FRONTEND_VARIANT, + FLTX_TESTS_BUILD_FLAGS_HASH, source_fingerprint); + std::fprintf(stderr, + "[consumer] fma=%s simd=%s fast-math=%s simulated-consteval=%s " + "x86=%d arm64=%d tu-x86-fma=%d has-x86-fma=%d\n", + fma, FLTX_HEADER_SIMD_OFF ? "off" : "on", +#if defined(FLTX_FAST_MATH) + "on", +#else + "off", +#endif +#if defined(FLTX_SIMULATE_FIXED_CONSTEVAL_MODE) + "on", +#else + "off", +#endif + FLTX_X86_TARGET, FLTX_ARM64_TARGET, FLTX_TU_HAS_X86_FMA, FLTX_HAS_X86_FMA); + + std::fprintf(stderr, + "[fltx lib] fma=%s simd=%s fast-math-request=%s fast-math=%s " + "x86=%d arm64=%d tu-x86-fma=%d runtime-fma=%s\n", + fma_mode_name(library.fma_mode), library.simd_policy_enabled ? "on" : "off", + fast_math_request_name(library.fast_math_request), + library.fast_math_enabled ? "on" : "off", library.x86_target, + library.arm64_target, library.tu_has_x86_fma, + bl::detail::library_runtime_hardware_fma_enabled() ? "available" + : "unavailable"); + + std::fprintf(stderr, + "[fltx lib strategy] compiled-x86-backend=%d runtime-check=%d " + "msvc-guarded=%d scalar-x86=%d baseline-arm64=%d runtime-path=%d " + "sse2=%d neon=%d wasm-simd=%d f256-simd=%d trig-simd=%d\n", + library.compiled_x86_fma_backend, library.x86_fma_runtime_check, + library.msvc_guarded_x86_fma, library.scalar_x86_fma, + library.baseline_arm64_fma, library.has_runtime_fma_path, library.has_sse2, + library.has_neon, library.has_wasm_simd, library.f256_simd_enabled, + library.f256_trig_simd_enabled); + } +} // namespace fltx::tests::support diff --git a/validation/support/csv.hpp b/validation/support/csv.hpp new file mode 100644 index 0000000..cb0ad15 --- /dev/null +++ b/validation/support/csv.hpp @@ -0,0 +1,118 @@ +#ifndef FLTX_TESTS_SUPPORT_CSV_INCLUDED +#define FLTX_TESTS_SUPPORT_CSV_INCLUDED + +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(_WIN32) +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include +#ifdef small +#undef small +#endif +#endif + +namespace fltx::tests +{ + [[nodiscard]] inline std::string csv_escape(std::string_view value) + { + if (value.find_first_of(",\"\r\n") == std::string_view::npos) + return std::string(value); + + std::string out{ "\"" }; + for (char c : value) + { + out += c; + if (c == '"') + out += '"'; + } + out += '"'; + return out; + } + + class csv_writer + { + public: + explicit csv_writer(std::filesystem::path final_path) + : final_path_(std::move(final_path)), + partial_path_( + final_path_.parent_path() / + (final_path_.stem().string() + ".partial" + final_path_.extension().string())) + { + if (!final_path_.parent_path().empty()) + std::filesystem::create_directories(final_path_.parent_path()); + stream_.open(partial_path_, std::ios::binary | std::ios::trunc); + if (!stream_) + throw std::runtime_error("cannot open metrics output: " + partial_path_.string()); + } + + void row(std::initializer_list fields) + { + bool first = true; + for (const std::string& field : fields) + { + if (!first) + stream_ << ','; + stream_ << csv_escape(field); + first = false; + } + stream_ << '\n'; + stream_.flush(); + if (!stream_) + throw std::runtime_error("failed to write metrics output: " + partial_path_.string()); + ++rows_written_; + } + + [[nodiscard]] std::size_t rows_written() const noexcept + { + return rows_written_; + } + + void finish() + { + stream_.flush(); + stream_.close(); +#if defined(_WIN32) + if (!MoveFileExW( + partial_path_.c_str(), + final_path_.c_str(), + MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH)) + { + throw std::runtime_error( + "cannot publish metrics output (Windows error " + + std::to_string(GetLastError()) + ")"); + } +#else + std::error_code error; + std::filesystem::rename(partial_path_, final_path_, error); + if (error) + throw std::runtime_error("cannot publish metrics output: " + error.message()); +#endif + } + + ~csv_writer() + { + if (stream_.is_open()) + stream_.close(); + } + + csv_writer(const csv_writer&) = delete; + csv_writer& operator=(const csv_writer&) = delete; + + private: + std::filesystem::path final_path_; + std::filesystem::path partial_path_; + std::ofstream stream_; + std::size_t rows_written_ = 0; + }; +} + +#endif diff --git a/validation/support/domains.hpp b/validation/support/domains.hpp new file mode 100644 index 0000000..8421164 --- /dev/null +++ b/validation/support/domains.hpp @@ -0,0 +1,852 @@ +#ifndef FLTX_TESTS_SUPPORT_DOMAINS_INCLUDED +#define FLTX_TESTS_SUPPORT_DOMAINS_INCLUDED + +#include "samples.hpp" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fltx::tests::domains +{ + struct domain + { + std::string name; + std::uint64_t seed = default_seed; + std::vector values; + }; + + struct binary_sample + { + sample lhs; + sample rhs; + bool preserve_nonzero = false; + }; + + struct binary_domain + { + std::string name; + std::uint64_t seed = default_seed; + std::vector values; + }; + + struct ternary_sample + { + sample x; + sample y; + sample z; + }; + + struct ternary_domain + { + std::string name; + std::uint64_t seed = default_seed; + std::vector values; + }; + + inline constexpr std::uint64_t ternary_y_seed_mask = + 0x9e3779b97f4a7c15ull; + inline constexpr std::uint64_t ternary_z_seed_mask = + 0xd1b54a32d192ed03ull; + + [[nodiscard]] inline ternary_domain zip_ternary( + domain x, + domain y, + domain z) + { + if (x.name != y.name || x.name != z.name) + throw std::invalid_argument("ternary domains must have matching names"); + if (x.values.size() != y.values.size() || + x.values.size() != z.values.size()) + { + throw std::invalid_argument("ternary domains must have matching sizes"); + } + + ternary_domain out{ std::move(x.name), x.seed, {} }; + out.values.reserve(x.values.size()); + for (std::size_t i = 0; i < x.values.size(); ++i) + { + out.values.push_back({ + std::move(x.values[i]), + std::move(y.values[i]), + std::move(z.values[i]) + }); + } + return out; + } + + enum class arithmetic_operation + { + add, + subtract, + multiply, + divide + }; + + struct text_domain + { + std::string name; + std::uint64_t seed = default_seed; + std::vector values; + }; + + [[nodiscard]] inline text_domain decimal_text( + std::string name, + std::size_t count, + int significant_digits, + int minimum_exponent, + int maximum_exponent, + std::uint64_t seed) + { + return { + std::move(name), + seed, + decimal_strings( + count, + significant_digits, + minimum_exponent, + maximum_exponent, + seed) + }; + } + + [[nodiscard]] inline domain interval( + std::string name, + double low, + double high, + std::size_t count, + std::uint64_t seed) + { + domain out{ std::move(name), seed, {} }; + out.values.reserve(count + 5); + out.values.push_back(make_exact_sample(low, "lower endpoint")); + out.values.push_back(make_exact_sample(high, "upper endpoint")); + out.values.push_back(make_exact_sample((low + high) * 0.5, "midpoint")); + + random_bits rng(seed); + for (std::size_t i = 0; i < count; ++i) + out.values.push_back(make_sample(rng.between(low, high))); + return out; + } + + [[nodiscard]] inline domain near_one( + std::size_t count, + std::uint64_t seed = default_seed ^ 0x01u) + { + return interval("near_one", 0.5, 1.5, count, seed); + } + + [[nodiscard]] inline domain moderate( + std::size_t count, + double low = -8.0, + double high = 8.0, + std::uint64_t seed = default_seed ^ 0x02u) + { + return interval("moderate", low, high, count, seed); + } + + [[nodiscard]] inline ternary_domain moderate_ternary( + std::size_t count, + double low = -8.0, + double high = 8.0, + std::uint64_t seed = default_seed ^ 0x02u) + { + return zip_ternary( + moderate(count, low, high, seed), + moderate(count, low, high, seed ^ ternary_y_seed_mask), + moderate(count, low, high, seed ^ ternary_z_seed_mask)); + } + + [[nodiscard]] inline std::vector arithmetic( + arithmetic_operation operation, + std::size_t count, + int precision_bits, + std::uint64_t seed = default_seed ^ 0x42u) + { + // One compact, deterministic corpus. Each 20-case block is 70% + // representative log-random values, at least 20% broad-range values, + // and 5% near the finite exponent limits. Add/subtract devote the + // remaining 5% to subnormals; multiply/divide use another broad case + // whose result remains finite. One representative case has an + // operation-appropriate structured operand relationship. Keeping a + // complete block even in smoke mode is the coverage contract. + const std::size_t sample_count = std::max(count, 20); + binary_domain general{ "general", seed, {} }; + binary_domain subnormal{ "subnormal", seed, {} }; + general.values.reserve(sample_count); + subnormal.values.reserve(sample_count / 20 + 1); + random_bits rng(seed ^ static_cast(operation)); + const bool additive = operation == arithmetic_operation::add || + operation == arithmetic_operation::subtract; + + const std::size_t limb_count = precision_bits <= 106 ? 2 : 4; + const auto has_subnormal_limb = [&](const sample& value) { + for (std::size_t limb = 0; limb < limb_count; ++limb) + { + const auto magnitude = native_fp::magnitude_bits( + value.limb[limb]); + if (magnitude != 0 && + magnitude <= native_fp::binary_format::fraction_mask) + { + return true; + } + } + return false; + }; + const auto near_underflow = [](const sample& value) { + const auto magnitude = native_fp::magnitude_bits(value.limb[0]); + const auto encoded_exponent = + (magnitude & native_fp::binary_format::exponent_mask) >> 52; + return encoded_exponent != 0 && encoded_exponent <= 23; + }; + const auto append = [&](binary_sample value, bool force_subnormal = false) { + const bool underflow_sensitive = force_subnormal || + has_subnormal_limb(value.lhs) || + has_subnormal_limb(value.rhs) || + (additive && + (near_underflow(value.lhs) || near_underflow(value.rhs))); + (underflow_sensitive ? subnormal.values : general.values) + .push_back(std::move(value)); + }; + + const auto random_exponent = [&](int low, int high) { + return low + static_cast( + rng.next() % static_cast(high - low + 1)); + }; + const auto log_sample = [&](int low, int high, std::string label) { + const int exponent = random_exponent(low, high); + const double sign = (rng.next() & 1u) != 0 ? 1.0 : -1.0; + return make_sample( + sign * std::ldexp(rng.between(0.5, 1.0), exponent), + std::move(label)); + }; + const auto append_random_pair = [&](int low, int high, const char* stratum) { + append({ + log_sample(low, high, std::string{stratum} + " lhs"), + log_sample(low, high, std::string{stratum} + " rhs"), + false + }); + }; + + static constexpr std::array extreme_exponents{ + -1021, -1000, -900, -500, 500, 900, 1000, 1021 + }; + static constexpr std::array multiplicative_extreme_exponents{ + -900, -500, 500, 900 + }; + for (std::size_t i = 0; i < sample_count; ++i) + { + const std::size_t slot = i % 20; + if (slot == 0) + { + const int lhs_exponent = additive + ? extreme_exponents[ + (i / 20 + rng.next()) % extreme_exponents.size()] + : multiplicative_extreme_exponents[ + (i / 20 + rng.next()) % + multiplicative_extreme_exponents.size()]; + const int rhs_exponent = operation == arithmetic_operation::multiply + ? std::clamp( + -lhs_exponent + random_exponent(-80, 80), + -1021, + 1021) + : lhs_exponent; + const double lhs_sign = (rng.next() & 1u) != 0 ? 1.0 : -1.0; + const double rhs_sign = (rng.next() & 1u) != 0 ? 1.0 : -1.0; + append({ + make_sample( + lhs_sign * std::ldexp( + rng.between(0.5, 0.74), lhs_exponent), + "extreme lhs"), + make_sample( + rhs_sign * std::ldexp( + rng.between(0.5, 0.74), rhs_exponent), + "extreme rhs"), + false + }); + } + else if (slot == 1) + { + if (!additive) + { + append_random_pair(-400, 400, "broad"); + continue; + } + const int lhs_exponent = random_exponent(-1073, -1022); + const int rhs_exponent = random_exponent(-1073, -1022); + const double lhs_sign = (rng.next() & 1u) != 0 ? 1.0 : -1.0; + const double rhs_sign = (rng.next() & 1u) != 0 ? 1.0 : -1.0; + append({ + make_exact_sample( + lhs_sign * std::ldexp(rng.between(0.5, 1.0), lhs_exponent), + "subnormal lhs"), + make_exact_sample( + rhs_sign * std::ldexp(rng.between(0.5, 1.0), rhs_exponent), + "subnormal rhs"), + false + }, true); + } + else if (slot == 2) + { + sample lhs = log_sample(-80, 80, "structured lhs"); + sample rhs; + if (operation == arithmetic_operation::multiply) + { + rhs = make_sample(1.0 / lhs.limb[0], "balanced-product rhs"); + append({std::move(lhs), std::move(rhs), false}); + continue; + } + + rhs = lhs; + if (operation == arithmetic_operation::add) + { + for (double& limb : rhs.limb) + limb = -limb; + } + const int maximum_offset_bits = std::max(80, precision_bits - 7); + const int offset_bits = 65 + static_cast( + rng.next() % static_cast( + maximum_offset_bits - 64)); + const double direction = (rng.next() & 1u) != 0 ? 1.0 : -1.0; + const std::size_t offset_limb = offset_bits <= 105 + ? 1 + : (offset_bits <= 159 ? 2 : 3); + rhs.limb[offset_limb] += direction * + std::ldexp(std::abs(lhs.limb[0]), -offset_bits); + rhs.label = operation == arithmetic_operation::divide + ? "near-equal divisor" + : "cancellation rhs"; + append({ + std::move(lhs), + std::move(rhs), + operation == arithmetic_operation::add || + operation == arithmetic_operation::subtract + }); + } + else if (slot == 3 || slot == 8 || slot == 13 || slot == 18) + { + append_random_pair( + additive ? -900 : -400, + additive ? 900 : 400, + "broad"); + } + else + { + append_random_pair(-80, 80, "representative"); + } + } + if (!additive) + { + for (std::uint64_t index = 1; index <= 4; ++index) + { + const double low_limb = std::bit_cast( + index * UINT64_C(0x40000)); + sample tiny{ + {0x1p-1000, low_limb, 0.0, 0.0}, + "subnormal-limb operand" + }; + append({ + std::move(tiny), + make_exact_sample( + operation == arithmetic_operation::multiply + ? 0x1p+900 + : 0x1p-900, + "scaling operand"), + false + }, true); + } + } + return {std::move(general), std::move(subnormal)}; + } + + [[nodiscard]] inline std::size_t binary_size(const domain& input) noexcept + { + return input.values.size(); + } + + [[nodiscard]] inline const sample& binary_lhs( + const domain& input, + std::size_t index) noexcept + { + return input.values[index]; + } + + [[nodiscard]] inline const sample& binary_rhs( + const domain& input, + std::size_t index) noexcept + { + return input.values[(index * 7 + 3) % input.values.size()]; + } + + [[nodiscard]] inline bool preserve_nonzero( + const domain& input, + std::size_t) noexcept + { + return input.name == "cancellation"; + } + + [[nodiscard]] inline std::size_t binary_size( + const binary_domain& input) noexcept + { + return input.values.size(); + } + + [[nodiscard]] inline const sample& binary_lhs( + const binary_domain& input, + std::size_t index) noexcept + { + return input.values[index].lhs; + } + + [[nodiscard]] inline const sample& binary_rhs( + const binary_domain& input, + std::size_t index) noexcept + { + return input.values[index].rhs; + } + + [[nodiscard]] inline bool preserve_nonzero( + const binary_domain& input, + std::size_t index) noexcept + { + return input.values[index].preserve_nonzero; + } + + [[nodiscard]] inline domain wide_exponent( + std::size_t count, + bool positive = false, + int min_exponent = -900, + int max_exponent = 900, + std::uint64_t seed = default_seed ^ 0x03u) + { + domain out{ "wide_exponent", seed, {} }; + out.values.reserve(count + 4); + random_bits rng(seed); + for (std::size_t i = 0; i < count; ++i) + { + const int exponent = min_exponent + + static_cast(rng.next() % static_cast(max_exponent - min_exponent + 1)); + const double sign = positive || (rng.next() & 1u) != 0 ? 1.0 : -1.0; + out.values.push_back(make_sample(sign * std::ldexp(rng.between(0.5, 1.0), exponent))); + } + return out; + } + + [[nodiscard]] inline ternary_domain wide_exponent_ternary( + std::size_t count, + bool positive = false, + int min_exponent = -900, + int max_exponent = 900, + std::uint64_t seed = default_seed ^ 0x03u) + { + return zip_ternary( + wide_exponent( + count, positive, min_exponent, max_exponent, seed), + wide_exponent( + count, positive, min_exponent, max_exponent, + seed ^ ternary_y_seed_mask), + wide_exponent( + count, positive, min_exponent, max_exponent, + seed ^ ternary_z_seed_mask)); + } + + [[nodiscard]] inline domain extreme_finite( + std::size_t count, + bool positive = false, + std::uint64_t seed = default_seed ^ 0x04u) + { + static constexpr std::array exponents{ + -1021, -1000, -900, -500, 500, 900, 1000, 1021 + }; + domain out{ "extreme_finite", seed, {} }; + out.values.reserve(count + exponents.size()); + random_bits rng(seed); + for (std::size_t i = 0; i < count; ++i) + { + const int exponent = exponents[rng.next() % exponents.size()]; + const double sign = positive || (rng.next() & 1u) != 0 ? 1.0 : -1.0; + out.values.push_back(make_sample(sign * std::ldexp(rng.between(0.5, 0.99), exponent))); + } + return out; + } + + [[nodiscard]] inline domain boundary( + std::size_t count, + double low = -1.0, + double high = 1.0, + std::uint64_t seed = default_seed ^ 0x05u) + { + domain out{ "boundary", seed, {} }; + const std::array anchors{ + low, std::nextafter(low, high), -0.5, -0.0, 0.0, + 0.5, std::nextafter(high, low), high, (low + high) * 0.5 + }; + for (double value : anchors) + { + if (value >= low && value <= high) + out.values.push_back(make_exact_sample(value)); + } + + random_bits rng(seed); + for (std::size_t i = 0; i < count; ++i) + { + const double anchor = (rng.next() & 1u) != 0 ? low : high; + const double inward = anchor == low ? 1.0 : -1.0; + out.values.push_back(make_sample(anchor + inward * std::ldexp(rng.between(0.5, 1.0), -20))); + } + return out; + } + + BL_PUSH_PRECISE; + [[nodiscard]] inline domain near_equal_cancellation( + std::size_t count, + std::uint64_t seed = default_seed ^ 0x06u) + { + domain out{ "cancellation", seed, {} }; + out.values.reserve(count + 4); + out.values.push_back(make_exact_sample(1.0, "one")); + out.values.push_back(make_sample(std::nextafter(1.0, 2.0), "next double after one")); + random_bits rng(seed); + for (std::size_t i = 0; i < count; ++i) + { + const int exponent = 20 + static_cast(rng.next() % 160u); + const double delta = std::ldexp(rng.between(0.5, 1.0), -exponent); + const double high = 1.0 + delta; + const double low = delta - (high - 1.0); + out.values.push_back({ + { high, low, 0.0, 0.0 }, + "one plus a low-limb delta" + }); + } + return out; + } + BL_POP_PRECISE; + + [[nodiscard]] inline ternary_domain fma_cancellation( + std::size_t count, + std::uint64_t seed = default_seed ^ 0x06u) + { + ternary_domain out{ "cancellation", seed, {} }; + out.values.reserve(count + 3); + + // This count-independent regression witness was first exposed by a + // 32,768-sample f256 fixed-constexpr run. Keep it explicit so smaller + // profiles cannot lose it through corpus-size-dependent operand pairing. + out.values.push_back({ + { + { 0x1.000000000069dp+0, 0x1.aff8095000000p-54, 0.0, 0.0 }, + "fma cancellation regression multiplicand" + }, + { + { + 0x1.0000000000001p+0, + 0x1.0000000000001p-55, + -0x1.0000000000001p-109, + 0x1.0000000000001p-163 + }, + "fma cancellation regression multiplier" + }, + make_exact_sample(0.0, "replaced by native product cancellation") + }); + + ternary_domain generated = zip_ternary( + near_equal_cancellation(count, seed), + near_equal_cancellation(count, seed ^ ternary_y_seed_mask), + near_equal_cancellation(count, seed ^ ternary_z_seed_mask)); + for (ternary_sample& value : generated.values) + out.values.push_back(std::move(value)); + return out; + } + + [[nodiscard]] inline domain near_zero_cancellation( + std::size_t count, + std::uint64_t seed = default_seed ^ 0x16u) + { + domain out{ "cancellation", seed, {} }; + out.values.reserve(count + 4); + out.values.push_back(make_exact_sample(0x1p-20, "small positive")); + out.values.push_back(make_exact_sample(-0x1p-20, "small negative")); + + random_bits rng(seed); + for (std::size_t i = 0; i < count; ++i) + { + const int exponent = 20 + static_cast(rng.next() % 880u); + const double sign = (rng.next() & 1u) != 0 ? 1.0 : -1.0; + out.values.push_back(make_sample( + sign * std::ldexp(rng.between(0.5, 1.0), -exponent))); + } + return out; + } + + [[nodiscard]] inline domain argument_reduction_impl( + std::size_t count, + int max_exponent, + std::uint64_t seed, + std::size_t retained_limbs) + { + // Independent four-double expansion of pi/2. Scaling it by 2^n gives + // exact integer multiples without first rounding the anchor to binary64. + static constexpr std::array half_pi{ + 1.5707963267948966, + 6.1232339957367660e-17, + -1.4973849048591698e-33, + 5.5622711043168264e-50 + }; + + domain out{ "argument_reduction", seed, {} }; + out.values.reserve(count + (retained_limbs == 2 ? 14 : 8)); + + const auto append = [&]( + int exponent, + std::size_t offset_limb, + double offset, + bool negative, + const char* relation = nullptr) + { + sample value{}; + for (std::size_t limb = 0; limb < retained_limbs; ++limb) + value.limb[limb] = std::ldexp(half_pi[limb], exponent); + + const double original = value.limb[offset_limb]; + value.limb[offset_limb] += offset; + if (retained_limbs == 2 && value.limb[offset_limb] == original) + { + throw std::logic_error( + "f128 argument-reduction perturbation was rounded away"); + } + + if (negative) + { + for (double& limb : value.limb) + limb = -limb; + } + value.label = + (relation == nullptr ? "near " : std::string{ relation } + ' ') + + "2^" + std::to_string(exponent) + " * pi/2"; + out.values.push_back(std::move(value)); + }; + + static constexpr std::array anchor_exponents{ 0, 20, 53, 56, 100, 159 }; + if (retained_limbs == 2) + { + // Keep the perturbation comfortably above the low limb's ulp while + // remaining about 100 bits below the full value. + for (int exponent : anchor_exponents) + { + if (exponent <= max_exponent) + { + const double offset = std::ldexp(0.625, exponent - 100); + append(exponent, 1, -offset, false, "below"); + append(exponent, 1, offset, false, "above"); + } + } + } + else + { + for (std::size_t i = 0; i < anchor_exponents.size(); ++i) + { + const int exponent = anchor_exponents[i]; + if (exponent <= max_exponent) + { + append( + exponent, + 3, + std::ldexp(0.625, exponent - 172), + (i & 1u) != 0); + } + } + } + + const auto append_anchor = [&](sample value) { + for (std::size_t limb = retained_limbs; limb < value.limb.size(); ++limb) + value.limb[limb] = 0.0; + out.values.push_back(std::move(value)); + }; + + if (max_exponent >= 56) + { + append_anchor({ + { + 1.1318780403245504e+17, + 4.4122550946403924, + -1.0804409825880908e-16, + 4.0080387316375899e-33 + }, + "large even multiple anchor" + }); + } + if (max_exponent >= 53) + { + append_anchor({ + { + -1.4148475504056880e+16, + -0.55153188683004906, + 1.3487244199107926e-17, + -4.9989771504159895e-34 + }, + "large negative multiple anchor" + }); + } + + random_bits rng(seed); + for (std::size_t i = 0; i < count; ++i) + { + const int exponent = static_cast( + rng.next() % static_cast(max_exponent + 1)); + if (retained_limbs == 2) + { + static constexpr std::array offset_bits{ 64, 82, 100 }; + const double magnitude = rng.between(0.5, 1.0); + const double sign = (rng.next() & 1u) != 0 ? 1.0 : -1.0; + append( + exponent, + 1, + std::ldexp(sign * magnitude, exponent - offset_bits[i % 3]), + (i & 1u) != 0); + } + else + { + const std::size_t offset_limb = 1 + i % 3; + const int offset_bits = + offset_limb == 1 ? 64 : offset_limb == 2 ? 118 : 172; + append( + exponent, + offset_limb, + std::ldexp(rng.between(-1.0, 1.0), exponent - offset_bits), + (i & 1u) != 0); + } + } + return out; + } + + [[nodiscard]] inline domain argument_reduction( + std::size_t count, + int max_exponent = 159, + std::uint64_t seed = default_seed ^ 0x07u) + { + return argument_reduction_impl(count, max_exponent, seed, 4); + } + + [[nodiscard]] inline domain argument_reduction_f128( + std::size_t count, + int max_exponent = 159, + std::uint64_t seed = default_seed ^ 0x07u) + { + return argument_reduction_impl(count, max_exponent, seed, 2); + } + + [[nodiscard]] inline domain subnormal( + std::size_t count, + std::uint64_t seed = default_seed ^ 0x08u) + { + domain out{ "subnormal", seed, {} }; + out.values.push_back(make_exact_sample(0.0, "+0")); + out.values.push_back(make_exact_sample(-0.0, "-0")); + out.values.push_back(make_exact_sample(std::numeric_limits::denorm_min(), "denorm_min")); + out.values.push_back(make_exact_sample(std::numeric_limits::min(), "min normal")); + random_bits rng(seed); + for (std::size_t i = 0; i < count; ++i) + { + const double value = std::ldexp( + rng.between(0.5, 1.0), + -1073 + static_cast(rng.next() % 53u)); + out.values.push_back(make_exact_sample((rng.next() & 1u) ? value : -value)); + } + return out; + } + + [[nodiscard]] inline domain atan2_extreme( + std::uint64_t seed = default_seed ^ 0x09u) + { + domain out{ "extreme_finite", seed, {} }; + const double huge = 0x1.123456789abcp+900; + const double tiny = 0x1.abcdef012345p-900; + out.values = { + make_sample(huge, "huge positive y"), + make_sample(-huge, "huge negative y"), + make_sample(tiny, "tiny positive x"), + make_sample(-tiny, "tiny negative x"), + make_sample(0x1.0000000000001p+1000, "near maximum y"), + make_sample(-0x1.0000000000001p+1000, "near minimum y"), + make_sample(0x1.0p-1000, "near minimum positive x"), + make_sample(-0x1.0p-1000, "near minimum negative x") + }; + return out; + } + + [[nodiscard]] inline domain product_extreme( + std::uint64_t seed = default_seed ^ 0x0au) + { + domain out{ "extreme_finite", seed, {} }; + const double huge = 0x1.23456789abcdep+900; + const double tiny = 0x1.0fedcba987654p-900; + const double large = 0x1.3456789abcdefp+500; + const double small_value = 0x1.123456789abcdp-500; + out.values = { + make_sample(huge, "huge multiplicand"), + make_sample(-huge, "negative huge multiplicand"), + make_sample(tiny, "tiny multiplier"), + make_sample(-tiny, "negative tiny multiplier"), + make_sample(large, "large multiplicand"), + make_sample(-large, "negative large multiplicand"), + make_sample(small_value, "small multiplier"), + make_sample(-small_value, "negative small multiplier") + }; + return out; + } + + [[nodiscard]] inline domain division_extreme( + std::uint64_t seed = default_seed ^ 0x0bu) + { + domain out{ "extreme_finite", seed, {} }; + const double huge = 0x1.23456789abcdep+900; + const double huge_peer = 0x1.0fedcba987654p+900; + const double tiny = 0x1.3456789abcdefp-900; + const double tiny_peer = 0x1.123456789abcdp-900; + out.values = { + make_sample(huge, "huge numerator"), + make_sample(-huge, "negative huge numerator"), + make_sample(huge_peer, "huge denominator"), + make_sample(-huge_peer, "negative huge denominator"), + make_sample(tiny, "tiny numerator"), + make_sample(-tiny, "negative tiny numerator"), + make_sample(tiny_peer, "tiny denominator"), + make_sample(-tiny_peer, "negative tiny denominator") + }; + return out; + } + + [[nodiscard]] inline domain positive(domain input, double minimum = 0.0) + { + for (sample& value : input.values) + { + value.limb[0] = std::max(minimum, std::abs(value.limb[0])); + value.limb[1] = std::abs(value.limb[1]); + value.limb[2] = std::abs(value.limb[2]); + value.limb[3] = std::abs(value.limb[3]); + } + return input; + } + + [[nodiscard]] inline domain bounded(domain input, double low, double high) + { + const double width = high - low; + for (sample& value : input.values) + { + const double normalized = std::fmod(std::abs(value.limb[0]), 1.0); + value = make_sample(low + normalized * width, std::move(value.label)); + } + return input; + } +} + +#endif diff --git a/validation/support/implementations.hpp b/validation/support/implementations.hpp new file mode 100644 index 0000000..9e22ead --- /dev/null +++ b/validation/support/implementations.hpp @@ -0,0 +1,481 @@ +#pragma once + +#include "mpfr.hpp" +#include "samples.hpp" + +#ifndef FLTX_METRICS_HAS_QDPP +#define FLTX_METRICS_HAS_QDPP 0 +#endif + +#if FLTX_METRICS_HAS_QDPP +#include +#include +#endif + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace fltx::tests::implementations +{ + using cppdd = boost::multiprecision::cpp_double_double; + using mpfr64 = boost::multiprecision::number< + boost::multiprecision::mpfr_float_backend<64>, + boost::multiprecision::et_off>; + +#if FLTX_METRICS_HAS_QDPP + using qd_f128 = dd_real; + using qd_f256 = qd_real; +#else + using qd_f128 = double; + using qd_f256 = double; +#endif + + struct identity + { + std::string_view id; + std::string_view short_label; + std::string_view label; + std::string_view api; + bool enabled = true; + }; + + inline constexpr identity fltx_f128{ + "fltx", "fltx", "fltx bl::f128", "fltx" + }; + inline constexpr identity fltx_f256{ + "fltx", "fltx", "fltx bl::f256", "fltx" + }; + inline constexpr identity native_f32{ + "native", "float", "native float", "bl:: native overloads" + }; + inline constexpr identity native_f64{ + "native", "double", "native double", "bl:: native overloads" + }; + inline constexpr identity qdpp_f128{ + "qdpp", "ddreal", "qdpp dd_real", "qdpp", FLTX_METRICS_HAS_QDPP != 0 + }; + inline constexpr identity qdpp_f256{ + "qdpp", "qdreal", "qdpp qd_real", "qdpp", FLTX_METRICS_HAS_QDPP != 0 + }; + inline constexpr identity boost_f128{ + "cppdd", + "cppdd", + "boost::multiprecision::cpp_double_double", + "Boost.Multiprecision" + }; + inline constexpr identity boost_f256{ + "mpfr64", + "mpfr64", + "boost::multiprecision::mpfr_float_backend<64>", + "Boost.Multiprecision" + }; + template + inline constexpr std::string_view precision_name = + std::is_same_v ? "f32" : + std::is_same_v ? "f64" : + std::is_same_v ? "f128" : "f256"; + + template + inline constexpr identity primary_identity = + std::is_same_v ? native_f32 : + std::is_same_v ? native_f64 : + std::is_same_v ? fltx_f128 : fltx_f256; + + template + inline constexpr identity qdpp_identity = + std::is_same_v ? qdpp_f128 : qdpp_f256; + + template + inline constexpr identity boost_identity = + std::is_same_v ? boost_f128 : boost_f256; + + using timing_components = std::array; + + [[nodiscard]] inline timing_components observe(float value) noexcept + { + return { value, 0.0, 0.0, 0.0 }; + } + + [[nodiscard]] inline timing_components observe(double value) noexcept + { + return { value, 0.0, 0.0, 0.0 }; + } + + [[nodiscard]] inline timing_components observe( + const bl::f128_s& value) noexcept + { + return { value.hi, value.lo, 0.0, 0.0 }; + } + + [[nodiscard]] inline timing_components observe( + const bl::f128& value) noexcept + { + return observe(static_cast(value)); + } + + [[nodiscard]] inline timing_components observe( + const bl::f256_s& value) noexcept + { + return { value.x0, value.x1, value.x2, value.x3 }; + } + + [[nodiscard]] inline timing_components observe( + const bl::f256& value) noexcept + { + return observe(static_cast(value)); + } + + [[nodiscard]] inline timing_components observe(const cppdd& value) noexcept + { + const auto parts = value.backend().crep(); + return { parts.first, parts.second, 0.0, 0.0 }; + } + + [[nodiscard]] inline timing_components observe(const mpfr64& value) + { + return { static_cast(value), 0.0, 0.0, 0.0 }; + } + +#if FLTX_METRICS_HAS_QDPP + [[nodiscard]] inline timing_components observe(const dd_real& value) noexcept + { + return { value.x[0], value.x[1], 0.0, 0.0 }; + } + + [[nodiscard]] inline timing_components observe(const qd_real& value) noexcept + { + return { value.x[0], value.x[1], value.x[2], value.x[3] }; + } +#endif + + template + [[nodiscard]] timing_components observe(const Value& value) noexcept + { + return { static_cast(value), 0.0, 0.0, 0.0 }; + } + + template + struct value_traits; + + template<> + struct value_traits + { + static constexpr double nominal_bits = + std::numeric_limits::digits; + + [[nodiscard]] static const mpfr::real& absolute_resolution() + { + static const mpfr::real value = + mpfr::absolute_resolution(); + return value; + } + + [[nodiscard]] static float from_sample(const sample& value) + { + return static_cast(value.limb[0]); + } + + [[nodiscard]] static mpfr::real to_real(float value) + { + return mpfr::native_float_to_real(value); + } + + [[nodiscard]] static bool is_finite(float value) + { + return native_fp::is_finite(value); + } + + [[nodiscard]] static bool sign_bit(float value) + { + return native_fp::sign_bit(value); + } + }; + + template<> + struct value_traits + { + static constexpr double nominal_bits = + std::numeric_limits::digits; + + [[nodiscard]] static const mpfr::real& absolute_resolution() + { + static const mpfr::real value = + mpfr::absolute_resolution(); + return value; + } + + [[nodiscard]] static double from_sample(const sample& value) + { + return value.limb[0]; + } + + [[nodiscard]] static mpfr::real to_real(double value) + { + return mpfr::native_float_to_real(value); + } + + [[nodiscard]] static bool is_finite(double value) + { + return native_fp::is_finite(value); + } + + [[nodiscard]] static bool sign_bit(double value) + { + return native_fp::sign_bit(value); + } + }; + + template<> + struct value_traits + { + static constexpr double nominal_bits = + std::numeric_limits::digits; + + [[nodiscard]] static const mpfr::real& absolute_resolution() + { + static const mpfr::real value = + mpfr::absolute_resolution(); + return value; + } + + [[nodiscard]] static bl::f128 from_sample(const sample& value) + { + return { value.limb[0], value.limb[1] }; + } + + [[nodiscard]] static mpfr::real to_real(const bl::f128_s& value) + { + return mpfr::traits::to_real(value); + } + + [[nodiscard]] static bool is_finite(const bl::f128_s& value) + { + return mpfr::traits::is_finite(value); + } + + [[nodiscard]] static bool sign_bit(const bl::f128_s& value) + { + return mpfr::traits::sign_bit(value); + } + }; + + template<> + struct value_traits + { + static constexpr double nominal_bits = + std::numeric_limits::digits; + + [[nodiscard]] static const mpfr::real& absolute_resolution() + { + static const mpfr::real value = + mpfr::absolute_resolution(); + return value; + } + + [[nodiscard]] static bl::f256 from_sample(const sample& value) + { + return { value.limb[0], value.limb[1], value.limb[2], value.limb[3] }; + } + + [[nodiscard]] static mpfr::real to_real(const bl::f256_s& value) + { + return mpfr::traits::to_real(value); + } + + [[nodiscard]] static bool is_finite(const bl::f256_s& value) + { + return mpfr::traits::is_finite(value); + } + + [[nodiscard]] static bool sign_bit(const bl::f256_s& value) + { + return mpfr::traits::sign_bit(value); + } + }; + + template<> + struct value_traits + { + static constexpr double nominal_bits = 106.0; + + [[nodiscard]] static const mpfr::real& absolute_resolution() + { + static const mpfr::real value = + mpfr::absolute_resolution(); + return value; + } + + [[nodiscard]] static cppdd from_sample(const sample& value) + { + if (!native_fp::is_finite(value.limb[0])) + return cppdd{ value.limb[0] }; + if (value.limb[0] == 0.0 && value.limb[1] == 0.0) + return cppdd{ native_fp::sign_bit(value.limb[0]) ? "-0" : "0" }; + return cppdd{ value.limb[0] } + cppdd{ value.limb[1] }; + } + + [[nodiscard]] static mpfr::real to_real(const cppdd& value) + { + const auto parts = value.backend().crep(); + const mpfr::real out = + mpfr::real{ parts.first } + mpfr::real{ parts.second }; + using boost::multiprecision::signbit; + return out == 0 && signbit(value) ? mpfr::signed_zero(true) : out; + } + + [[nodiscard]] static bool is_finite(const cppdd& value) + { + using boost::multiprecision::isfinite; + return isfinite(value); + } + + [[nodiscard]] static bool sign_bit(const cppdd& value) + { + using boost::multiprecision::signbit; + return signbit(value); + } + }; + + template<> + struct value_traits + { + static constexpr double nominal_bits = + std::numeric_limits::digits; + + // MPFR's exponent range is not tied to a fixed storage format. A + // zero resolution disables fixed-format underflow adjustment while + // retaining the ordinary relative-error metric. + [[nodiscard]] static const mpfr::real& absolute_resolution() + { + static const mpfr::real value{0}; + return value; + } + + [[nodiscard]] static mpfr64 from_sample(const sample& value) + { + if (!native_fp::is_finite(value.limb[0])) + return mpfr64{ value.limb[0] }; + if (value.limb[0] == 0.0 && value.limb[1] == 0.0 && + value.limb[2] == 0.0 && value.limb[3] == 0.0) + { + return mpfr64{ native_fp::sign_bit(value.limb[0]) ? "-0" : "0" }; + } + return mpfr64{ value.limb[0] } + mpfr64{ value.limb[1] } + + mpfr64{ value.limb[2] } + mpfr64{ value.limb[3] }; + } + + [[nodiscard]] static mpfr::real to_real(const mpfr64& value) + { + return mpfr::real{ value }; + } + + [[nodiscard]] static bool is_finite(const mpfr64& value) + { + using boost::multiprecision::isfinite; + return isfinite(value); + } + + [[nodiscard]] static bool sign_bit(const mpfr64& value) + { + using boost::multiprecision::signbit; + return signbit(value); + } + }; + +#if FLTX_METRICS_HAS_QDPP + template<> + struct value_traits + { + static constexpr double nominal_bits = 106.0; + + [[nodiscard]] static const mpfr::real& absolute_resolution() + { + static const mpfr::real value = + mpfr::absolute_resolution(); + return value; + } + + [[nodiscard]] static dd_real from_sample(const sample& value) + { + if (!native_fp::is_finite(value.limb[0])) + return dd_real{ value.limb[0] }; + return dd_real{ value.limb[0] } + dd_real{ value.limb[1] }; + } + + [[nodiscard]] static mpfr::real to_real(const dd_real& value) + { + const mpfr::real out = + mpfr::real{ value.x[0] } + mpfr::real{ value.x[1] }; + return out == 0 && native_fp::sign_bit(value.x[0]) + ? mpfr::signed_zero(true) + : out; + } + + [[nodiscard]] static bool is_finite(const dd_real& value) + { + return native_fp::is_finite(value.x[0]) && + native_fp::is_finite(value.x[1]); + } + + [[nodiscard]] static bool sign_bit(const dd_real& value) + { + return native_fp::sign_bit(value.x[0]); + } + }; + + template<> + struct value_traits + { + static constexpr double nominal_bits = 212.0; + + [[nodiscard]] static const mpfr::real& absolute_resolution() + { + static const mpfr::real value = + mpfr::absolute_resolution(); + return value; + } + + [[nodiscard]] static qd_real from_sample(const sample& value) + { + if (!native_fp::is_finite(value.limb[0])) + return qd_real{ value.limb[0] }; + return qd_real{ value.limb[0] } + qd_real{ value.limb[1] } + + qd_real{ value.limb[2] } + qd_real{ value.limb[3] }; + } + + [[nodiscard]] static mpfr::real to_real(const qd_real& value) + { + const mpfr::real out = + mpfr::real{ value.x[0] } + mpfr::real{ value.x[1] } + + mpfr::real{ value.x[2] } + mpfr::real{ value.x[3] }; + return out == 0 && native_fp::sign_bit(value.x[0]) + ? mpfr::signed_zero(true) + : out; + } + + [[nodiscard]] static bool is_finite(const qd_real& value) + { + return native_fp::is_finite(value.x[0]) && + native_fp::is_finite(value.x[1]) && + native_fp::is_finite(value.x[2]) && + native_fp::is_finite(value.x[3]); + } + + [[nodiscard]] static bool sign_bit(const qd_real& value) + { + return native_fp::sign_bit(value.x[0]); + } + }; +#endif + +} diff --git a/validation/support/mpfr.hpp b/validation/support/mpfr.hpp new file mode 100644 index 0000000..5829ff7 --- /dev/null +++ b/validation/support/mpfr.hpp @@ -0,0 +1,509 @@ +#ifndef FLTX_TESTS_SUPPORT_MPFR_INCLUDED +#define FLTX_TESTS_SUPPORT_MPFR_INCLUDED + +#include "samples.hpp" +#include "native_fp.hpp" +#include "thresholds.hpp" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace fltx::tests::mpfr +{ + using real = boost::multiprecision::number< + boost::multiprecision::mpfr_float_backend<400>, + boost::multiprecision::et_off>; + + [[nodiscard]] inline real signed_zero(bool negative) + { + real value; + mpfr_set_zero(value.backend().data(), negative ? -1 : 1); + return value; + } + + template + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION real + native_float_to_real(const Float& value) + { + static_assert( + std::is_same_v || std::is_same_v); + + using format = native_fp::binary_format; + using bits_type = typename format::bits_type; + const bits_type value_bits = native_fp::bits(value); + const bool negative = (value_bits & format::sign_mask) != 0; + const bits_type fraction = value_bits & format::fraction_mask; + const bits_type exponent_bits = + (value_bits & format::exponent_mask) >> format::fraction_bits; + const bits_type maximum_exponent = + format::exponent_mask >> format::fraction_bits; + + if (exponent_bits == maximum_exponent) + { + if (fraction != 0) + return std::numeric_limits::quiet_NaN(); + const real infinity = std::numeric_limits::infinity(); + return negative ? -infinity : infinity; + } + + if (exponent_bits == 0 && fraction == 0) + return signed_zero(negative); + + const bits_type significand = exponent_bits == 0 + ? fraction + : (bits_type{1} << format::fraction_bits) | fraction; + const int exponent = exponent_bits == 0 + ? 1 - format::exponent_bias - format::fraction_bits + : static_cast(exponent_bits) - + format::exponent_bias - format::fraction_bits; + using boost::multiprecision::ldexp; + const real magnitude = ldexp(real{significand}, exponent); + return negative ? -magnitude : magnitude; + } + + [[nodiscard]] constexpr double exact_score() noexcept + { + return std::bit_cast( + native_fp::binary_format::infinity - UINT64_C(1)); + } + + [[nodiscard]] constexpr bool is_exact_score(double value) noexcept + { + return native_fp::bits(value) == + native_fp::binary_format::infinity - UINT64_C(1); + } + + template + struct traits; + + template<> + struct traits + { + static constexpr thresholds::precision precision = thresholds::precision::f32; + static constexpr std::string_view name = "f32"; + + [[nodiscard]] static float from_sample(const sample& value) + { + return static_cast(value.limb[0]); + } + + [[nodiscard]] static real to_real(float value) + { + return native_float_to_real(value); + } + + [[nodiscard]] static bool is_finite(float value) + { + return native_fp::is_finite(value); + } + + [[nodiscard]] static bool sign_bit(float value) + { + return native_fp::sign_bit(value); + } + }; + + template<> + struct traits + { + static constexpr thresholds::precision precision = thresholds::precision::f64; + static constexpr std::string_view name = "f64"; + + [[nodiscard]] static double from_sample(const sample& value) + { + return value.limb[0]; + } + + [[nodiscard]] static real to_real(double value) + { + return native_float_to_real(value); + } + + [[nodiscard]] static bool is_finite(double value) + { + return native_fp::is_finite(value); + } + + [[nodiscard]] static bool sign_bit(double value) + { + return native_fp::sign_bit(value); + } + }; + + template<> + struct traits + { + static constexpr thresholds::precision precision = thresholds::precision::f128; + static constexpr std::string_view name = "f128"; + + [[nodiscard]] static bl::f128 from_sample(const sample& value) + { + return { value.limb[0], value.limb[1] }; + } + + [[nodiscard]] static real to_real(const bl::f128_s& value) + { + const bool hi_is_negative = native_fp::sign_bit(value.hi); + const real out = native_float_to_real(value.hi) + + native_float_to_real(value.lo); + return out == 0 && hi_is_negative + ? signed_zero(true) + : out; + } + + [[nodiscard]] static bool is_finite(const bl::f128_s& value) + { + return native_fp::is_finite(value.hi) && + native_fp::is_finite(value.lo); + } + + [[nodiscard]] static bool sign_bit(const bl::f128_s& value) + { + return native_fp::sign_bit(value.hi); + } + }; + + template<> + struct traits + { + static constexpr thresholds::precision precision = thresholds::precision::f256; + static constexpr std::string_view name = "f256"; + + [[nodiscard]] static bl::f256 from_sample(const sample& value) + { + return { value.limb[0], value.limb[1], value.limb[2], value.limb[3] }; + } + + [[nodiscard]] static real to_real(const bl::f256_s& value) + { + const bool x0_is_negative = native_fp::sign_bit(value.x0); + const real out = native_float_to_real(value.x0) + + native_float_to_real(value.x1) + + native_float_to_real(value.x2) + + native_float_to_real(value.x3); + return out == 0 && x0_is_negative + ? signed_zero(true) + : out; + } + + [[nodiscard]] static bool is_finite(const bl::f256_s& value) + { + return native_fp::is_finite(value.x0) && + native_fp::is_finite(value.x1) && + native_fp::is_finite(value.x2) && + native_fp::is_finite(value.x3); + } + + [[nodiscard]] static bool sign_bit(const bl::f256_s& value) + { + return native_fp::sign_bit(value.x0); + } + }; + + [[nodiscard]] inline real to_real(const sample& value) + { + return native_float_to_real(value.limb[0]) + + native_float_to_real(value.limb[1]) + + native_float_to_real(value.limb[2]) + + native_float_to_real(value.limb[3]); + } + + template + [[nodiscard]] real input_real(const sample& value) + { + real out; + if constexpr (std::is_same_v) + out = native_float_to_real(static_cast(value.limb[0])); + else if constexpr (std::is_same_v) + out = native_float_to_real(value.limb[0]); + else if constexpr (std::is_same_v) + out = native_float_to_real(value.limb[0]) + + native_float_to_real(value.limb[1]); + else + out = to_real(value); + + if (out == 0 && native_fp::sign_bit(value.limb[0])) + return signed_zero(true); + return out; + } + + template + [[nodiscard]] sample sample_from_real(real value, std::string label = {}) + { + sample out{}; + out.label = std::move(label); + constexpr std::size_t limb_count = std::is_same_v ? 2 : 4; + for (std::size_t i = 0; i < limb_count; ++i) + { + out.limb[i] = static_cast(value); + value -= real{ out.limb[i] }; + } + return out; + } + + [[nodiscard]] inline real round_even(const real& value) + { + if (value == 0) + return value; + + using boost::multiprecision::floor; + const real lower = floor(value); + const real fraction = value - lower; + real rounded; + if (fraction < real{ 0.5 }) + rounded = lower; + else if (fraction > real{ 0.5 }) + rounded = lower + 1; + else + rounded = floor(lower / 2) * 2 == lower ? lower : lower + 1; + return rounded == 0 && value < 0 ? signed_zero(true) : rounded; + } + + [[nodiscard]] inline real round_away_from_zero(const real& value) + { + if (value == 0) + return value; + + using boost::multiprecision::ceil; + using boost::multiprecision::floor; + const real rounded = value < 0 + ? ceil(value - real{ 0.5 }) + : floor(value + real{ 0.5 }); + return rounded == 0 && value < 0 ? signed_zero(true) : rounded; + } + + [[nodiscard]] inline real trunc(const real& value) + { + if (value == 0) + return value; + + using boost::multiprecision::ceil; + using boost::multiprecision::floor; + const real rounded = value < 0 ? ceil(value) : floor(value); + return rounded == 0 && value < 0 ? signed_zero(true) : rounded; + } + + [[nodiscard]] inline real round_decimals(const real& value, int digits) + { + if (digits <= 0 || value == 0) + return value; + + using boost::multiprecision::pow; + const real scale = pow(real{ 10 }, digits); + return round_even(value * scale) / scale; + } + + [[nodiscard]] inline real round_significant( + const real& value, + int figures) + { + if (figures <= 0 || value == 0) + return value; + + using boost::multiprecision::abs; + using boost::multiprecision::floor; + using boost::multiprecision::log10; + using boost::multiprecision::pow; + const int exponent = + static_cast(floor(log10(abs(value)))); + const real scale = pow(real{ 10 }, figures - 1 - exponent); + return round_even(value * scale) / scale; + } + + [[nodiscard]] inline real remainder(const real& x, const real& y) + { + const real result = x - round_even(x / y) * y; + if (result != 0) + return result; + + using boost::multiprecision::signbit; + return signed_zero(signbit(x)); + } + + [[nodiscard]] inline int remquo_bits(const real& x, const real& y) + { + const real quotient = round_even(x / y); + using boost::multiprecision::abs; + using boost::multiprecision::fmod; + const int low_bits = static_cast(fmod(abs(quotient), real{ 8 })); + return quotient < 0 ? -low_bits : low_bits; + } + + [[nodiscard]] inline int ilogb(const real& value) + { + using boost::multiprecision::abs; + using boost::multiprecision::frexp; + int exponent = 0; + (void)frexp(abs(value), &exponent); + return exponent - 1; + } + + [[nodiscard]] inline bool is_nan(const real& value) + { + using boost::multiprecision::isnan; + return isnan(value); + } + + [[nodiscard]] inline bool is_inf(const real& value) + { + using boost::multiprecision::isinf; + return isinf(value); + } + + [[nodiscard]] inline bool sign_bit(const real& value) + { + return mpfr_signbit(value.backend().data()) != 0; + } + + template + [[nodiscard]] real absolute_resolution() + { + using boost::multiprecision::ldexp; + return ldexp(real{1}, std::is_same_v ? -149 : -1074); + } + + [[nodiscard]] FLTX_VALIDATION_PRECISE_FUNCTION double resolution_adjusted_bits( + const real& observed, + const real& reference, + const real& absolute_resolution, + double nominal_bits) + { + if (is_nan(observed) || is_nan(reference)) + return is_nan(observed) && is_nan(reference) + ? exact_score() + : 0.0; + + if (is_inf(observed) || is_inf(reference)) + return is_inf(observed) && is_inf(reference) && sign_bit(observed) == sign_bit(reference) + ? exact_score() + : 0.0; + + if (reference == 0) + { + return observed == 0 + ? exact_score() + : 0.0; + } + + real reference_magnitude = reference; + if (reference_magnitude < 0) + reference_magnitude = -reference_magnitude; + + // Below half of the component type's smallest value, zero is the + // correctly rounded result. At and above that boundary, returning + // zero for a representable nonzero value is a categorical failure, + // not a high nominal-precision score. + if (absolute_resolution > 0 && + reference_magnitude <= absolute_resolution / 2) + { + return observed == 0 + ? exact_score() + : 0.0; + } + if (observed == 0 || sign_bit(observed) != sign_bit(reference)) + return 0.0; + + real error = observed - reference; + if (error < 0) + error = -error; + if (error == 0) + return exact_score(); + + real scale = reference_magnitude; + // Expansions retain their nominal precision only while another + // representable component exists below the result. Once the absolute + // double/float spacing dominates, score error in ULPs and express it + // on the same nominal-bit scale as normal values. + using boost::multiprecision::ldexp; + if (absolute_resolution > 0) + { + const real resolution_limited_scale = ldexp( + absolute_resolution, + static_cast(nominal_bits) - 1); + if (scale < resolution_limited_scale) + scale = resolution_limited_scale; + } + + using boost::multiprecision::log2; + return static_cast(-log2(error / scale)); + } + + [[nodiscard]] inline std::string text(const real& value) + { + std::ostringstream out; + out << std::setprecision(80) << value; + return out.str(); + } + + [[nodiscard]] inline real abs(real value) + { + return value < 0 ? -value : value; + } + + [[nodiscard]] inline real cbrt(const real& value) + { + using boost::multiprecision::pow; + const real magnitude = pow(abs(value), real{ 1 } / real{ 3 }); + return value < 0 ? -magnitude : magnitude; + } + + [[nodiscard]] inline real exp2(const real& value) + { + using boost::multiprecision::exp; + using boost::multiprecision::log; + static const real ln2 = log(real{ 2 }); + return exp(value * ln2); + } + + [[nodiscard]] inline real log2(const real& value) + { + using boost::multiprecision::log; + static const real ln2 = log(real{ 2 }); + return log(value) / ln2; + } + + [[nodiscard]] inline real log10(const real& value) + { + using boost::multiprecision::log; + static const real ln10 = log(real{ 10 }); + return log(value) / ln10; + } + + [[nodiscard]] inline real hypot(const real& x, const real& y) + { + using boost::multiprecision::sqrt; + return sqrt(x * x + y * y); + } + + [[nodiscard]] inline real fma(const real& x, const real& y, const real& z) + { + return x * y + z; + } + + [[nodiscard]] inline real fmod(const real& x, const real& y) + { + using boost::multiprecision::trunc; + const real result = x - trunc(x / y) * y; + if (result != 0) + return result; + + using boost::multiprecision::signbit; + return signed_zero(signbit(x)); + } +} + +#endif diff --git a/validation/support/native_fp.hpp b/validation/support/native_fp.hpp new file mode 100644 index 0000000..5b4bd60 --- /dev/null +++ b/validation/support/native_fp.hpp @@ -0,0 +1,175 @@ +#ifndef FLTX_TESTS_SUPPORT_NATIVE_FP_INCLUDED +#define FLTX_TESTS_SUPPORT_NATIVE_FP_INCLUDED + +#include +#include +#include + +#if defined(__clang__) && defined(FLTX_FAST_MATH) + #define FLTX_VALIDATION_SPECIAL_VALUE_FUNCTION \ + inline __attribute__((noinline, optnone)) + #define FLTX_VALIDATION_PRECISE_FUNCTION \ + inline __attribute__((noinline, optnone)) +#elif defined(__GNUC__) && defined(FLTX_FAST_MATH) + #define FLTX_VALIDATION_SPECIAL_VALUE_FUNCTION \ + inline __attribute__((noinline, optimize("no-fast-math"))) + #define FLTX_VALIDATION_PRECISE_FUNCTION \ + inline __attribute__((noinline, optimize("no-fast-math"))) +#elif defined(_MSC_VER) + #define FLTX_VALIDATION_SPECIAL_VALUE_FUNCTION __forceinline + #define FLTX_VALIDATION_PRECISE_FUNCTION inline __declspec(noinline) +#else + #define FLTX_VALIDATION_SPECIAL_VALUE_FUNCTION inline + #define FLTX_VALIDATION_PRECISE_FUNCTION inline +#endif + +namespace fltx::tests::native_fp +{ + template + struct binary_format; + + template<> + struct binary_format + { + using bits_type = std::uint32_t; + static constexpr int fraction_bits = 23; + static constexpr int exponent_bits = 8; + static constexpr int exponent_bias = 127; + static constexpr bits_type sign_mask = UINT32_C(0x80000000); + static constexpr bits_type fraction_mask = UINT32_C(0x007fffff); + static constexpr bits_type exponent_mask = UINT32_C(0x7f800000); + static constexpr bits_type infinity = exponent_mask; + static constexpr bits_type quiet_nan = UINT32_C(0x7fc00000); + static constexpr bits_type denorm_min = UINT32_C(1); + }; + + template<> + struct binary_format + { + using bits_type = std::uint64_t; + static constexpr int fraction_bits = 52; + static constexpr int exponent_bits = 11; + static constexpr int exponent_bias = 1023; + static constexpr bits_type sign_mask = UINT64_C(0x8000000000000000); + static constexpr bits_type fraction_mask = UINT64_C(0x000fffffffffffff); + static constexpr bits_type exponent_mask = UINT64_C(0x7ff0000000000000); + static constexpr bits_type infinity = exponent_mask; + static constexpr bits_type quiet_nan = UINT64_C(0x7ff8000000000000); + static constexpr bits_type denorm_min = UINT64_C(1); + }; + + template + using bits_type = typename binary_format::bits_type; + + template + [[nodiscard]] constexpr bits_type bits(Float value) noexcept + { + static_assert(std::is_same_v || std::is_same_v); + return std::bit_cast>(value); + } + + template + [[nodiscard]] constexpr bits_type magnitude_bits(Float value) noexcept + { + return bits(value) & ~binary_format::sign_mask; + } + + template + [[nodiscard]] constexpr bool sign_bit(Float value) noexcept + { + return (bits(value) & binary_format::sign_mask) != 0; + } + + template + [[nodiscard]] constexpr bool is_nan(Float value) noexcept + { + return magnitude_bits(value) > binary_format::infinity; + } + + template + [[nodiscard]] constexpr bool is_inf(Float value) noexcept + { + return magnitude_bits(value) == binary_format::infinity; + } + + template + [[nodiscard]] constexpr bool is_finite(Float value) noexcept + { + return magnitude_bits(value) < binary_format::infinity; + } + + template + [[nodiscard]] FLTX_VALIDATION_SPECIAL_VALUE_FUNCTION constexpr Float + positive_infinity() noexcept + { + return std::bit_cast(binary_format::infinity); + } + + template + [[nodiscard]] FLTX_VALIDATION_SPECIAL_VALUE_FUNCTION constexpr Float + negative_infinity() noexcept + { + return std::bit_cast( + binary_format::sign_mask | binary_format::infinity); + } + + template + [[nodiscard]] FLTX_VALIDATION_SPECIAL_VALUE_FUNCTION constexpr Float + quiet_nan() noexcept + { + return std::bit_cast(binary_format::quiet_nan); + } + + template + [[nodiscard]] FLTX_VALIDATION_SPECIAL_VALUE_FUNCTION constexpr Float + signed_zero(bool negative) noexcept + { + return std::bit_cast( + negative ? binary_format::sign_mask : bits_type{0}); + } + + template + [[nodiscard]] FLTX_VALIDATION_SPECIAL_VALUE_FUNCTION constexpr Float + denorm_min() noexcept + { + return std::bit_cast(binary_format::denorm_min); + } + + template + [[nodiscard]] constexpr Float next_up(Float value) noexcept + { + using format = binary_format; + auto raw = bits(value); + if (is_nan(value) || raw == format::infinity) + return value; + if (magnitude_bits(value) == 0) + return denorm_min(); + if (sign_bit(value)) + --raw; + else + ++raw; + return std::bit_cast(raw); + } + + template + [[nodiscard]] constexpr Float next_down(Float value) noexcept + { + using format = binary_format; + auto raw = bits(value); + if (is_nan(value) || + raw == (format::sign_mask | format::infinity)) + return value; + if (magnitude_bits(value) == 0) + { + return std::bit_cast( + format::sign_mask | format::denorm_min); + } + if (sign_bit(value)) + ++raw; + else + --raw; + return std::bit_cast(raw); + } +} + +#endif diff --git a/validation/support/qdpp_smoke.cpp b/validation/support/qdpp_smoke.cpp new file mode 100644 index 0000000..1f6e928 --- /dev/null +++ b/validation/support/qdpp_smoke.cpp @@ -0,0 +1,24 @@ +#include +#include + +namespace +{ + constexpr dd_real dd_sum = dd_real{1.25} + dd_real{0.75}; + constexpr qd_real qd_product = qd_real{1.5} * qd_real{2.0}; + + static_assert(to_double(dd_sum) == 2.0); + static_assert(to_double(qd_product) == 3.0); +} + +int main() +{ + const dd_real dd_root = sqrt(dd_real{4.0}); + const qd_real qd_root = sqrt(qd_real{9.0}); + const qd_real qd_sine = sin(qd_real{0.0}); + + return to_double(dd_root) == 2.0 && + to_double(qd_root) == 3.0 && + to_double(qd_sine) == 0.0 + ? 0 + : 1; +} diff --git a/validation/support/samples.hpp b/validation/support/samples.hpp new file mode 100644 index 0000000..17aeab8 --- /dev/null +++ b/validation/support/samples.hpp @@ -0,0 +1,126 @@ +#ifndef FLTX_TESTS_SUPPORT_SAMPLES_INCLUDED +#define FLTX_TESTS_SUPPORT_SAMPLES_INCLUDED + +#include "native_fp.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fltx::tests +{ + inline constexpr std::uint64_t default_seed = 0x8f3f73b5cf1c9adeull; + + class random_bits + { + public: + explicit constexpr random_bits(std::uint64_t seed) noexcept + : state_(seed != 0 ? seed : default_seed) + { + } + + [[nodiscard]] constexpr std::uint64_t next() noexcept + { + std::uint64_t x = state_; + x ^= x >> 12; + x ^= x << 25; + x ^= x >> 27; + state_ = x; + return x * 0x2545f4914f6cdd1dull; + } + + [[nodiscard]] double unit() noexcept + { + return static_cast(next() >> 11) * 0x1.0p-53; + } + + [[nodiscard]] double between(double low, double high) noexcept + { + return low + (high - low) * unit(); + } + + private: + std::uint64_t state_; + }; + + struct sample + { + std::array limb{}; + std::string label; + }; + + [[nodiscard]] inline sample make_sample(double value, std::string label = {}) + { + const double scale = std::abs(value); + if (scale == 0.0 || !native_fp::is_finite(scale)) + return { { value, 0.0, 0.0, 0.0 }, std::move(label) }; + + const double tail1 = std::copysign(std::ldexp(scale, -55), value == 0.0 ? 1.0 : value); + const double tail2 = -std::copysign(std::ldexp(scale, -109), tail1); + const double tail3 = std::copysign(std::ldexp(scale, -163), tail1); + return { { value, tail1, tail2, tail3 }, std::move(label) }; + } + + [[nodiscard]] inline sample make_exact_sample(double value, std::string label = {}) + { + return { { value, 0.0, 0.0, 0.0 }, std::move(label) }; + } + + [[nodiscard]] inline std::string describe(const sample& value) + { + std::ostringstream out; + if (!value.label.empty()) + out << value.label << ' '; + out << std::setprecision(17) + << '[' << value.limb[0] << ',' << value.limb[1] + << ',' << value.limb[2] << ',' << value.limb[3] << ']'; + return out.str(); + } + + [[nodiscard]] inline std::vector decimal_strings( + std::size_t count, + int significant_digits, + int minimum_exponent, + int maximum_exponent, + std::uint64_t seed) + { + const int digits = std::max(significant_digits, 18); + const int exponent_span = maximum_exponent - minimum_exponent + 1; + std::vector out; + out.reserve(count); + random_bits rng(seed); + + for (std::size_t index = 0; index < count; ++index) + { + std::string text; + text.reserve(static_cast(digits) + 10); + if ((index & 1u) != 0) + text.push_back('-'); + text.push_back(static_cast('1' + rng.next() % 9)); + text.push_back('.'); + for (int digit = 1; digit < digits; ++digit) + text.push_back(static_cast('0' + rng.next() % 10)); + + const int exponent = minimum_exponent + + static_cast( + rng.next() % static_cast(exponent_span)); + text.push_back('e'); + text.push_back(exponent < 0 ? '-' : '+'); + const int magnitude = exponent < 0 ? -exponent : exponent; + if (magnitude < 10) + text.push_back('0'); + text += std::to_string(magnitude); + out.push_back(std::move(text)); + } + return out; + } +} + +#endif diff --git a/validation/support/source_identity.hpp b/validation/support/source_identity.hpp new file mode 100644 index 0000000..86eeb3c --- /dev/null +++ b/validation/support/source_identity.hpp @@ -0,0 +1,13 @@ +#pragma once + +#if defined(FLTX_METRICS_EMBED_SOURCE_FINGERPRINT) +#include +#else +#define FLTX_METRICS_BUILD_SOURCE_FINGERPRINT "unavailable" +#endif + +namespace fltx::tests::support +{ + inline constexpr const char* source_fingerprint = + FLTX_METRICS_BUILD_SOURCE_FINGERPRINT; +} diff --git a/validation/support/thresholds.hpp b/validation/support/thresholds.hpp new file mode 100644 index 0000000..9353eb1 --- /dev/null +++ b/validation/support/thresholds.hpp @@ -0,0 +1,85 @@ +#ifndef FLTX_TESTS_SUPPORT_THRESHOLDS_INCLUDED +#define FLTX_TESTS_SUPPORT_THRESHOLDS_INCLUDED + +#include + +namespace fltx::tests::thresholds +{ + enum class precision + { + f32, + f64, + f128, + f256 + }; + + [[nodiscard]] constexpr double target_bits(precision value) noexcept + { + if (value == precision::f32) + return 24.0; + if (value == precision::f64) + return 53.0; + return value == precision::f128 ? 106.0 : 212.0; + } + + [[nodiscard]] constexpr double required( + precision value, + std::string_view operation, + std::string_view domain) noexcept + { + if (value == precision::f32) + { + if (domain == "argument_reduction" && operation == "tan") + return 18.0; + return 20.0; + } + if (value == precision::f64) + { + if (domain == "argument_reduction" && operation == "tan") + return 45.0; + return 48.0; + } + + const bool f128 = value == precision::f128; + const double arithmetic = f128 ? 90.0 : 190.0; + const double transcendental = f128 ? 80.0 : 180.0; + + if (operation == "parse") + return target_bits(value); + + if (domain == "argument_reduction") + { + if (operation == "tan") + return f128 ? 75.0 : 170.0; + return transcendental; + } + if (domain == "cancellation") + { + if (operation == "expm1" || operation == "log1p") + return transcendental; + return arithmetic; + } + if (domain == "boundary") + return transcendental; + if (operation == "tan") + return f128 ? 75.0 : 170.0; + if (operation == "sin" || operation == "cos" || + operation == "atan" || operation == "atan2" || + operation == "asin" || operation == "acos" || + operation == "exp" || operation == "exp2" || + operation == "expm1" || operation == "log" || + operation == "log2" || operation == "log10" || + operation == "log1p" || operation == "pow" || + operation == "sinh" || operation == "cosh" || + operation == "tanh" || operation == "asinh" || + operation == "acosh" || operation == "atanh" || + operation == "erf" || operation == "erfc" || + operation == "lgamma" || operation == "tgamma") + { + return transcendental; + } + return arithmetic; + } +} + +#endif diff --git a/validation/support/tlfloat_implementation.hpp b/validation/support/tlfloat_implementation.hpp new file mode 100644 index 0000000..ecee78f --- /dev/null +++ b/validation/support/tlfloat_implementation.hpp @@ -0,0 +1,200 @@ +#pragma once + +#include "implementations.hpp" + +#ifndef FLTX_METRICS_HAS_TLFLOAT +#define FLTX_METRICS_HAS_TLFLOAT 0 +#endif + +#if FLTX_METRICS_HAS_TLFLOAT +#include "tlfloat_support.hpp" +#endif + +#include +#include +#include + +namespace fltx::tests::implementations +{ +#if FLTX_METRICS_HAS_TLFLOAT + using tl_f128 = tlfloat::Quad; + using tl_f256 = tlfloat::Octuple; +#else + using tl_f128 = double; + using tl_f256 = double; +#endif + + inline constexpr identity tlfloat_f128{"tlfloat", "tlquad", "TLFloat Quad", "TLFloat", + FLTX_METRICS_HAS_TLFLOAT != 0}; + inline constexpr identity tlfloat_f256{"tlfloat", "tloct", "TLFloat Octuple", "TLFloat", + FLTX_METRICS_HAS_TLFLOAT != 0}; + + template + inline constexpr identity tlfloat_identity = + std::is_same_v ? tlfloat_f128 : tlfloat_f256; + +#if FLTX_METRICS_HAS_TLFLOAT + template + [[nodiscard]] mpfr::real tlfloat_to_real(const std::array& words, + unsigned exponent_bits, unsigned fraction_bits) + { + const unsigned top_fraction_bits = fraction_bits - static_cast((N - 1) * 64); + const std::uint64_t exponent_mask = (std::uint64_t{1} << exponent_bits) - 1; + const std::uint64_t fraction_mask = (std::uint64_t{1} << top_fraction_bits) - 1; + const std::uint64_t exponent = (words.back() >> top_fraction_bits) & exponent_mask; + const bool negative = ((words.back() >> (top_fraction_bits + exponent_bits)) & 1) != 0; + + bool zero = (words.back() & fraction_mask) == 0; + for (std::size_t i = 0; i + 1 < N; ++i) + zero = zero && words[i] == 0; + if (exponent == exponent_mask) + { + if (!zero) + return mpfr::real{"nan"}; + return mpfr::real{negative ? "-inf" : "inf"}; + } + if (exponent == 0 && zero) + return mpfr::real{negative ? -0.0 : 0.0}; + + const long long bias = (std::int64_t{1} << (exponent_bits - 1)) - 1; + const long long binary_exponent = + exponent == 0 ? 1 - bias : static_cast(exponent) - bias; + + mpfr::real significand{words.back() & fraction_mask}; + for (std::size_t i = N - 1; i-- > 0;) + { + using boost::multiprecision::ldexp; + significand = ldexp(significand, 64) + mpfr::real{words[i]}; + } + if (exponent != 0) + { + using boost::multiprecision::ldexp; + significand += ldexp(mpfr::real{1}, static_cast(fraction_bits)); + } + using boost::multiprecision::ldexp; + const mpfr::real out = + ldexp(significand, static_cast(binary_exponent - fraction_bits)); + return negative ? -out : out; + } + + template + [[nodiscard]] bool tlfloat_is_finite(const std::array& words, + unsigned exponent_bits, unsigned fraction_bits) noexcept + { + const unsigned top_fraction_bits = fraction_bits - static_cast((N - 1) * 64); + const std::uint64_t exponent_mask = (std::uint64_t{1} << exponent_bits) - 1; + return ((words.back() >> top_fraction_bits) & exponent_mask) != exponent_mask; + } + + template + [[nodiscard]] bool tlfloat_sign_bit(const std::array& words, + unsigned exponent_bits, unsigned fraction_bits) noexcept + { + const unsigned top_fraction_bits = fraction_bits - static_cast((N - 1) * 64); + return ((words.back() >> (top_fraction_bits + exponent_bits)) & 1) != 0; + } + + [[nodiscard]] inline timing_components observe(const tlfloat::Quad& value) noexcept + { + const auto words = std::bit_cast>(value); + return {static_cast(words[0]), static_cast(words[1]), 0.0, 0.0}; + } + + [[nodiscard]] inline timing_components observe(const tlfloat::Octuple& value) noexcept + { + const auto words = std::bit_cast>(value); + return {static_cast(words[0]), static_cast(words[1]), + static_cast(words[2]), static_cast(words[3])}; + } + + template<> struct value_traits + { + static constexpr double nominal_bits = 113.0; + + [[nodiscard]] static const mpfr::real& absolute_resolution() + { + using boost::multiprecision::ldexp; + static const mpfr::real value = + ldexp(mpfr::real{1}, -16494); + return value; + } + + [[nodiscard]] static tlfloat::Quad from_sample(const sample& value) + { + if (!native_fp::is_finite(value.limb[0])) + { + if (native_fp::is_nan(value.limb[0])) + return tlfloat::Quad{"nan"}; + return tlfloat::Quad{ + native_fp::sign_bit(value.limb[0]) ? "-inf" : "inf"}; + } + if (value.limb[0] == 0.0 && value.limb[1] == 0.0) + { + return tlfloat::Quad{native_fp::sign_bit(value.limb[0]) ? "-0" : "0"}; + } + return tlfloat::Quad{value.limb[0]} + tlfloat::Quad{value.limb[1]}; + } + + [[nodiscard]] static mpfr::real to_real(const tlfloat::Quad& value) + { + return tlfloat_to_real(std::bit_cast>(value), 15, 112); + } + + [[nodiscard]] static bool is_finite(const tlfloat::Quad& value) + { + return tlfloat_is_finite(std::bit_cast>(value), 15, 112); + } + + [[nodiscard]] static bool sign_bit(const tlfloat::Quad& value) + { + return tlfloat_sign_bit(std::bit_cast>(value), 15, 112); + } + }; + + template<> struct value_traits + { + static constexpr double nominal_bits = 237.0; + + [[nodiscard]] static const mpfr::real& absolute_resolution() + { + using boost::multiprecision::ldexp; + static const mpfr::real value = + ldexp(mpfr::real{1}, -262378); + return value; + } + + [[nodiscard]] static tlfloat::Octuple from_sample(const sample& value) + { + if (!native_fp::is_finite(value.limb[0])) + { + if (native_fp::is_nan(value.limb[0])) + return tlfloat::Octuple{"nan"}; + return tlfloat::Octuple{ + native_fp::sign_bit(value.limb[0]) ? "-inf" : "inf"}; + } + if (value.limb[0] == 0.0 && value.limb[1] == 0.0 && value.limb[2] == 0.0 && + value.limb[3] == 0.0) + { + return tlfloat::Octuple{native_fp::sign_bit(value.limb[0]) ? "-0" : "0"}; + } + return tlfloat::Octuple{value.limb[0]} + tlfloat::Octuple{value.limb[1]} + + tlfloat::Octuple{value.limb[2]} + tlfloat::Octuple{value.limb[3]}; + } + + [[nodiscard]] static mpfr::real to_real(const tlfloat::Octuple& value) + { + return tlfloat_to_real(std::bit_cast>(value), 19, 236); + } + + [[nodiscard]] static bool is_finite(const tlfloat::Octuple& value) + { + return tlfloat_is_finite(std::bit_cast>(value), 19, 236); + } + + [[nodiscard]] static bool sign_bit(const tlfloat::Octuple& value) + { + return tlfloat_sign_bit(std::bit_cast>(value), 19, 236); + } + }; +#endif +} // namespace fltx::tests::implementations diff --git a/validation/support/tlfloat_ops.hpp b/validation/support/tlfloat_ops.hpp new file mode 100644 index 0000000..09c7173 --- /dev/null +++ b/validation/support/tlfloat_ops.hpp @@ -0,0 +1,298 @@ +#pragma once + +#include "tlfloat_implementation.hpp" + +#if FLTX_METRICS_HAS_TLFLOAT +#include +#endif + +#include +#include +#include + +namespace fltx::tests::tlfloat_ops +{ + namespace adl_calls + { + template [[nodiscard]] auto fabs_(const Value& x) + { + return fabs(x); + } + template [[nodiscard]] auto floor_(const Value& x) + { + return floor(x); + } + template [[nodiscard]] auto ceil_(const Value& x) + { + return ceil(x); + } + template [[nodiscard]] auto trunc_(const Value& x) + { + return trunc(x); + } + template [[nodiscard]] auto round_(const Value& x) + { + return round(x); + } + template [[nodiscard]] auto rint_(const Value& x) + { + return rint(x); + } + template [[nodiscard]] auto sqrt_(const Value& x) + { + return sqrt(x); + } + template [[nodiscard]] auto fmin_(const Value& x, const Value& y) + { + return fmin(x, y); + } + template [[nodiscard]] auto fmax_(const Value& x, const Value& y) + { + return fmax(x, y); + } + template [[nodiscard]] auto fdim_(const Value& x, const Value& y) + { + return fdim(x, y); + } + template [[nodiscard]] auto copysign_(const Value& x, const Value& y) + { + return copysign(x, y); + } + template [[nodiscard]] auto nextafter_(const Value& x, const Value& y) + { + return nextafter(x, y); + } + template [[nodiscard]] auto hypot_(const Value& x, const Value& y) + { + return hypot(x, y); + } + template + [[nodiscard]] auto fma_(const Value& x, const Value& y, const Value& z) + { + return fma(x, y, z); + } + template [[nodiscard]] auto modf_(const Value& x, Value* integral) + { + return modf(x, integral); + } + template [[nodiscard]] auto frexp_(const Value& x, int* exponent) + { + return frexp(x, exponent); + } + template [[nodiscard]] auto ldexp_(const Value& x, int exponent) + { + return ldexp(x, exponent); + } + template [[nodiscard]] auto ilogb_(const Value& x) + { + return ilogb(x); + } + } // namespace adl_calls + + template [[nodiscard]] auto abs(const Value& x) + { +#if FLTX_METRICS_HAS_TLFLOAT + return adl_calls::fabs_(x); +#else + return std::fabs(x); +#endif + } + +#if FLTX_METRICS_HAS_TLFLOAT +#define FLTX_METRICS_TLFLOAT_UNARY(name) \ + template [[nodiscard]] auto name(const Value& x) \ + { \ + return tlfloat::name(x); \ + } +#else +#define FLTX_METRICS_TLFLOAT_UNARY(name) \ + template [[nodiscard]] auto name(const Value& x) \ + { \ + return std::name(x); \ + } +#endif + + FLTX_METRICS_TLFLOAT_UNARY(sin) + FLTX_METRICS_TLFLOAT_UNARY(cos) + FLTX_METRICS_TLFLOAT_UNARY(tan) + FLTX_METRICS_TLFLOAT_UNARY(atan) + FLTX_METRICS_TLFLOAT_UNARY(asin) + FLTX_METRICS_TLFLOAT_UNARY(acos) + FLTX_METRICS_TLFLOAT_UNARY(exp) + FLTX_METRICS_TLFLOAT_UNARY(exp2) + FLTX_METRICS_TLFLOAT_UNARY(expm1) + FLTX_METRICS_TLFLOAT_UNARY(log) + FLTX_METRICS_TLFLOAT_UNARY(log2) + FLTX_METRICS_TLFLOAT_UNARY(log10) + FLTX_METRICS_TLFLOAT_UNARY(log1p) + FLTX_METRICS_TLFLOAT_UNARY(sinh) + FLTX_METRICS_TLFLOAT_UNARY(cosh) + FLTX_METRICS_TLFLOAT_UNARY(tanh) + FLTX_METRICS_TLFLOAT_UNARY(asinh) + FLTX_METRICS_TLFLOAT_UNARY(acosh) + FLTX_METRICS_TLFLOAT_UNARY(atanh) + FLTX_METRICS_TLFLOAT_UNARY(erf) + FLTX_METRICS_TLFLOAT_UNARY(erfc) + FLTX_METRICS_TLFLOAT_UNARY(lgamma) + FLTX_METRICS_TLFLOAT_UNARY(tgamma) + +#undef FLTX_METRICS_TLFLOAT_UNARY + +#define FLTX_METRICS_TLFLOAT_ADL_UNARY(name) \ + template [[nodiscard]] auto name(const Value& x) \ + { \ + return adl_calls::name##_(x); \ + } + + FLTX_METRICS_TLFLOAT_ADL_UNARY(floor) + FLTX_METRICS_TLFLOAT_ADL_UNARY(ceil) + FLTX_METRICS_TLFLOAT_ADL_UNARY(trunc) + FLTX_METRICS_TLFLOAT_ADL_UNARY(round) + FLTX_METRICS_TLFLOAT_ADL_UNARY(sqrt) + +#undef FLTX_METRICS_TLFLOAT_ADL_UNARY + + template [[nodiscard]] auto cbrt(const Value& x) + { +#if FLTX_METRICS_HAS_TLFLOAT + return tlfloat::cbrt(x); +#else + return std::cbrt(x); +#endif + } + + template [[nodiscard]] auto roundeven(const Value& x) + { +#if FLTX_METRICS_HAS_TLFLOAT + return adl_calls::rint_(x); +#else + return std::nearbyint(x); +#endif + } + +#if FLTX_METRICS_HAS_TLFLOAT +#define FLTX_METRICS_TLFLOAT_BINARY(name) \ + template [[nodiscard]] auto name(const Value& x, const Value& y) \ + { \ + return tlfloat::name(x, y); \ + } +#else +#define FLTX_METRICS_TLFLOAT_BINARY(name) \ + template [[nodiscard]] auto name(const Value& x, const Value& y) \ + { \ + return std::name(x, y); \ + } +#endif + + FLTX_METRICS_TLFLOAT_BINARY(fmod) + FLTX_METRICS_TLFLOAT_BINARY(remainder) + FLTX_METRICS_TLFLOAT_BINARY(atan2) + FLTX_METRICS_TLFLOAT_BINARY(pow) + +#undef FLTX_METRICS_TLFLOAT_BINARY + +#define FLTX_METRICS_TLFLOAT_ADL_BINARY(name) \ + template [[nodiscard]] auto name(const Value& x, const Value& y) \ + { \ + return adl_calls::name##_(x, y); \ + } + + FLTX_METRICS_TLFLOAT_ADL_BINARY(fmin) + FLTX_METRICS_TLFLOAT_ADL_BINARY(fmax) + FLTX_METRICS_TLFLOAT_ADL_BINARY(fdim) + FLTX_METRICS_TLFLOAT_ADL_BINARY(copysign) + FLTX_METRICS_TLFLOAT_ADL_BINARY(nextafter) + FLTX_METRICS_TLFLOAT_ADL_BINARY(hypot) + +#undef FLTX_METRICS_TLFLOAT_ADL_BINARY + + template [[nodiscard]] auto fma(const Value& x, const Value& y, const Value& z) + { +#if FLTX_METRICS_HAS_TLFLOAT + return adl_calls::fma_(x, y, z); +#else + return std::fma(x, y, z); +#endif + } + + template [[nodiscard]] auto remquo(const Value& x, const Value& y) + { +#if FLTX_METRICS_HAS_TLFLOAT + const auto result = tlfloat::remquo(x, y); + // TLFloat returns the full quotient; C remquo exposes only signed low bits. + return std::pair{result.first, result.second % 8}; +#else + int quotient = 0; + return std::pair{std::remquo(x, y, "ient), quotient}; +#endif + } + + template [[nodiscard]] auto modf(const Value& x) + { +#if FLTX_METRICS_HAS_TLFLOAT + Value integral{}; + return std::pair{adl_calls::modf_(x, &integral), integral}; +#else + Value integral{}; + return std::pair{std::modf(x, &integral), integral}; +#endif + } + + template [[nodiscard]] auto frexp(const Value& x) + { +#if FLTX_METRICS_HAS_TLFLOAT + int exponent = 0; + return std::pair{adl_calls::frexp_(x, &exponent), exponent}; +#else + int exponent = 0; + return std::pair{std::frexp(x, &exponent), exponent}; +#endif + } + + template [[nodiscard]] auto ldexp(const Value& x, int exponent) + { +#if FLTX_METRICS_HAS_TLFLOAT + return adl_calls::ldexp_(x, exponent); +#else + return std::ldexp(x, exponent); +#endif + } + + template [[nodiscard]] auto ilogb(const Value& x) + { +#if FLTX_METRICS_HAS_TLFLOAT + return adl_calls::ilogb_(x); +#else + return std::ilogb(x); +#endif + } + + template [[nodiscard]] auto sincos_sum(const Value& x) + { +#if FLTX_METRICS_HAS_TLFLOAT + const auto result = tlfloat::sincos(x); + return result.first + result.second; +#else + return std::sin(x) + std::cos(x); +#endif + } + + template [[nodiscard]] std::string to_string(const Value& x, int digits) + { +#if FLTX_METRICS_HAS_TLFLOAT + return tlfloat::to_string(x, digits); +#else + (void)digits; + return std::to_string(x); +#endif + } + + template [[nodiscard]] Value parse(const std::string& text) + { +#if FLTX_METRICS_HAS_TLFLOAT + return Value{text.c_str()}; +#else + return std::stod(text); +#endif + } +} // namespace fltx::tests::tlfloat_ops diff --git a/validation/support/tlfloat_smoke.cpp b/validation/support/tlfloat_smoke.cpp new file mode 100644 index 0000000..3624fed --- /dev/null +++ b/validation/support/tlfloat_smoke.cpp @@ -0,0 +1,19 @@ +#include "tlfloat_support.hpp" + +#include + +int main() +{ + static_assert(sizeof(tlfloat::Quad) == 16); + static_assert(sizeof(tlfloat::Octuple) == 32); + + const tlfloat::Quad quad = tlfloat::Quad{ 1.25 } + tlfloat::Quad{ 0.75 }; + const tlfloat::Octuple octuple = + tlfloat::Octuple{ 2.5 } * tlfloat::Octuple{ 2.0 }; + + const bool headers_work = + static_cast(quad) == 2.0 && + static_cast(octuple) == 5.0; + const bool library_is_linked = tlfloat_version() != std::uint64_t{ 0 }; + return headers_work && library_is_linked ? 0 : 1; +} diff --git a/validation/support/tlfloat_support.hpp b/validation/support/tlfloat_support.hpp new file mode 100644 index 0000000..15b0cec --- /dev/null +++ b/validation/support/tlfloat_support.hpp @@ -0,0 +1,11 @@ +#pragma once + +// TLFloat 1.17.1 uses standard type traits without including their header. +#include + +// Keep the C++ header first: it establishes TLFloat's bigint definitions +// before the C compatibility header. +// clang-format off +#include +#include +// clang-format on diff --git a/validation/tests/constexpr/accuracy.cpp b/validation/tests/constexpr/accuracy.cpp new file mode 100644 index 0000000..28b0faa --- /dev/null +++ b/validation/tests/constexpr/accuracy.cpp @@ -0,0 +1,610 @@ +#include "mpfr.hpp" + +#include + +#include +#include +#include +#include + +#include + +namespace +{ + namespace oracle = fltx::tests::mpfr; + namespace thresholds = fltx::tests::thresholds; + + enum class unary_op + { + sqrt, + exp, + expm1, + log, + log1p, + sin, + cos, + tan, + atan, + asin, + acos, + sinh, + cosh, + tanh, + asinh, + acosh, + atanh, + cbrt, + erf, + erfc, + lgamma, + tgamma + }; + + enum class binary_op + { + add, + subtract, + multiply, + divide, + fmod, + remainder, + pow, + atan2, + hypot + }; + + template + struct unary_case + { + std::string_view label; + unary_op operation; + Float input; + Float result; + }; + + template + struct binary_case + { + std::string_view label; + binary_op operation; + Float lhs; + Float rhs; + Float result; + }; + + [[nodiscard]] constexpr std::string_view name(unary_op operation) noexcept + { + switch (operation) + { + case unary_op::sqrt: return "sqrt"; + case unary_op::exp: return "exp"; + case unary_op::expm1: return "expm1"; + case unary_op::log: return "log"; + case unary_op::log1p: return "log1p"; + case unary_op::sin: return "sin"; + case unary_op::cos: return "cos"; + case unary_op::tan: return "tan"; + case unary_op::atan: return "atan"; + case unary_op::asin: return "asin"; + case unary_op::acos: return "acos"; + case unary_op::sinh: return "sinh"; + case unary_op::cosh: return "cosh"; + case unary_op::tanh: return "tanh"; + case unary_op::asinh: return "asinh"; + case unary_op::acosh: return "acosh"; + case unary_op::atanh: return "atanh"; + case unary_op::cbrt: return "cbrt"; + case unary_op::erf: return "erf"; + case unary_op::erfc: return "erfc"; + case unary_op::lgamma: return "lgamma"; + case unary_op::tgamma: return "tgamma"; + } + return "unknown"; + } + + [[nodiscard]] constexpr std::string_view name(binary_op operation) noexcept + { + switch (operation) + { + case binary_op::add: return "add"; + case binary_op::subtract: return "subtract"; + case binary_op::multiply: return "multiply"; + case binary_op::divide: return "divide"; + case binary_op::fmod: return "fmod"; + case binary_op::remainder: return "remainder"; + case binary_op::pow: return "pow"; + case binary_op::atan2: return "atan2"; + case binary_op::hypot: return "hypot"; + } + return "unknown"; + } + + template + [[nodiscard]] constexpr Float fp(double value) + { + return static_cast(value); + } + + template + [[nodiscard]] constexpr Float q(double numerator, double denominator) + { + return fp(numerator) / fp(denominator); + } + + template + [[nodiscard]] constexpr Float mixed( + double whole, + double numerator, + double denominator) + { + return fp(whole) + q(numerator, denominator); + } + + template + [[nodiscard]] constexpr int large_sqrt_exponent() noexcept + { + if constexpr (std::is_same_v) + return 80; + return 180; + } + + template + [[nodiscard]] constexpr Float evaluate(unary_op operation, Float input) + { + switch (operation) + { + case unary_op::sqrt: return bl::sqrt(input); + case unary_op::exp: return bl::exp(input); + case unary_op::expm1: return bl::expm1(input); + case unary_op::log: return bl::log(input); + case unary_op::log1p: return bl::log1p(input); + case unary_op::sin: return bl::sin(input); + case unary_op::cos: return bl::cos(input); + case unary_op::tan: return bl::tan(input); + case unary_op::atan: return bl::atan(input); + case unary_op::asin: return bl::asin(input); + case unary_op::acos: return bl::acos(input); + case unary_op::sinh: return bl::sinh(input); + case unary_op::cosh: return bl::cosh(input); + case unary_op::tanh: return bl::tanh(input); + case unary_op::asinh: return bl::asinh(input); + case unary_op::acosh: return bl::acosh(input); + case unary_op::atanh: return bl::atanh(input); + case unary_op::cbrt: return bl::cbrt(input); + case unary_op::erf: return bl::erf(input); + case unary_op::erfc: return bl::erfc(input); + case unary_op::lgamma: return bl::lgamma(input); + case unary_op::tgamma: return bl::tgamma(input); + } + return std::numeric_limits::quiet_NaN(); + } + + template + [[nodiscard]] constexpr Float evaluate( + binary_op operation, + Float lhs, + Float rhs) + { + switch (operation) + { + case binary_op::add: return lhs + rhs; + case binary_op::subtract: return lhs - rhs; + case binary_op::multiply: return lhs * rhs; + case binary_op::divide: return lhs / rhs; + case binary_op::fmod: return bl::fmod(lhs, rhs); + case binary_op::remainder: return bl::remainder(lhs, rhs); + case binary_op::pow: return bl::pow(lhs, rhs); + case binary_op::atan2: return bl::atan2(lhs, rhs); + case binary_op::hypot: return bl::hypot(lhs, rhs); + } + return std::numeric_limits::quiet_NaN(); + } + + template + [[nodiscard]] constexpr unary_case make_case( + std::string_view label, + unary_op operation, + Float input) + { + return { label, operation, input, evaluate(operation, input) }; + } + + template + [[nodiscard]] constexpr binary_case make_case( + std::string_view label, + binary_op operation, + Float lhs, + Float rhs) + { + return { label, operation, lhs, rhs, evaluate(operation, lhs, rhs) }; + } + + template + [[nodiscard]] constexpr auto core_unary_cases() + { + return std::array{ + make_case("sqrt tiny scaled", unary_op::sqrt, + bl::ldexp(mixed(1.0, 1.0, 3.0), -80)), + make_case("sqrt two", unary_op::sqrt, fp(2.0)), + make_case("sqrt large scaled", unary_op::sqrt, + bl::ldexp( + mixed(1.0, 1.0, 5.0), + large_sqrt_exponent())), + make_case("exp negative", unary_op::exp, q(-5.0, 4.0)), + make_case("exp positive", unary_op::exp, q(3.0, 2.0)), + make_case("expm1 moderate negative", unary_op::expm1, q(-1.0, 2.0)), + make_case("expm1 moderate positive", unary_op::expm1, q(1.0, 4.0)), + make_case("log subunit", unary_op::log, q(1.0, 8.0)), + make_case("log mixed", unary_op::log, mixed(1.0, 1.0, 7.0)), + make_case("log1p negative", unary_op::log1p, q(-3.0, 4.0)), + make_case("log1p positive", unary_op::log1p, q(5.0, 4.0)), + make_case("sin reduced negative", unary_op::sin, q(-3.0, 4.0)), + make_case("sin reduced positive", unary_op::sin, q(1.0, 2.0)), + make_case("cos reduced negative", unary_op::cos, q(-3.0, 4.0)), + make_case("cos reduced positive", unary_op::cos, q(1.0, 2.0)), + make_case("tan reduced", unary_op::tan, q(1.0, 4.0)), + make_case("atan negative", unary_op::atan, q(-5.0, 8.0)), + make_case("atan positive", unary_op::atan, q(3.0, 4.0)) + }; + } + + template + [[nodiscard]] constexpr auto inverse_unary_cases() + { + return std::array{ + make_case("asin negative", unary_op::asin, q(-1.0, 4.0)), + make_case("asin positive", unary_op::asin, q(1.0, 2.0)), + make_case("acos negative", unary_op::acos, q(-1.0, 4.0)), + make_case("acos positive", unary_op::acos, q(1.0, 2.0)), + make_case("asinh negative", unary_op::asinh, q(-5.0, 4.0)), + make_case("asinh positive", unary_op::asinh, q(3.0, 4.0)), + make_case("acosh near one", unary_op::acosh, mixed(1.0, 1.0, 16.0)), + make_case("acosh moderate", unary_op::acosh, q(5.0, 2.0)), + make_case("atanh negative", unary_op::atanh, q(-1.0, 4.0)), + make_case("atanh positive", unary_op::atanh, q(1.0, 2.0)) + }; + } + + template + [[nodiscard]] constexpr auto hyperbolic_unary_cases() + { + return std::array{ + make_case("sinh negative", unary_op::sinh, q(-3.0, 4.0)), + make_case("sinh positive", unary_op::sinh, q(5.0, 4.0)), + make_case("cosh small", unary_op::cosh, q(1.0, 2.0)), + make_case("cosh moderate", unary_op::cosh, q(5.0, 4.0)), + make_case("tanh negative", unary_op::tanh, q(-3.0, 4.0)), + make_case("tanh positive", unary_op::tanh, q(5.0, 4.0)) + }; + } + + template + [[nodiscard]] constexpr auto special_unary_cases() + { + return std::array{ + make_case("cbrt negative", unary_op::cbrt, fp(-27.0)), + make_case("cbrt positive", unary_op::cbrt, q(5.0, 8.0)), + make_case("erf negative", unary_op::erf, q(-5.0, 4.0)), + make_case("erf positive", unary_op::erf, q(1.0, 2.0)), + make_case("erfc negative", unary_op::erfc, q(-5.0, 4.0)), + make_case("erfc positive", unary_op::erfc, q(1.0, 2.0)), + make_case("lgamma small", unary_op::lgamma, q(1.0, 8.0)), + make_case("lgamma moderate", unary_op::lgamma, q(15.0, 4.0)), + make_case("tgamma half", unary_op::tgamma, q(1.0, 2.0)), + make_case("tgamma moderate", unary_op::tgamma, q(9.0, 4.0)) + }; + } + + template + [[nodiscard]] constexpr auto arithmetic_binary_cases() + { + return std::array{ + make_case("add cancellation", binary_op::add, + mixed(1.0, 1.0, 7.0), q(-8.0, 7.0)), + make_case("subtract close", binary_op::subtract, + mixed(1.0, 1.0, 4096.0), fp(1.0)), + make_case("multiply mixed", binary_op::multiply, + mixed(3.0, 1.0, 7.0), q(-11.0, 13.0)), + make_case("divide mixed", binary_op::divide, + mixed(7.0, 2.0, 11.0), mixed(3.0, 1.0, 5.0)) + }; + } + + template + [[nodiscard]] constexpr auto reduction_binary_cases() + { + return std::array{ + make_case("fmod simple", binary_op::fmod, + mixed(5.0, 1.0, 4.0), fp(2.0)), + make_case("fmod fractional divisor", binary_op::fmod, + mixed(17.0, 1.0, 7.0), mixed(3.0, 1.0, 11.0)), + make_case("fmod scaled quotient", binary_op::fmod, + bl::ldexp(mixed(1.0, 3.0, 17.0), 48), + mixed(5.0, 1.0, 8.0)), + make_case("remainder simple", binary_op::remainder, + mixed(17.0, 1.0, 7.0), mixed(3.0, 1.0, 11.0)) + }; + } + + template + [[nodiscard]] constexpr auto transcendental_binary_cases() + { + return std::array{ + make_case("pow fractional", binary_op::pow, + mixed(1.0, 1.0, 4.0), mixed(1.0, 1.0, 8.0)), + make_case("pow reciprocal", binary_op::pow, + q(5.0, 2.0), q(-3.0, 2.0)), + make_case("atan2 quadrant one", binary_op::atan2, + q(1.0, 2.0), mixed(1.0, 1.0, 4.0)), + make_case("atan2 quadrant three", binary_op::atan2, + q(-3.0, 4.0), q(-5.0, 4.0)), + make_case("hypot 3 4", binary_op::hypot, + fp(3.0), fp(4.0)), + make_case("hypot fractional", binary_op::hypot, + q(5.0, 8.0), q(7.0, 9.0)) + }; + } + + template + struct corpus_traits; + + template<> + struct corpus_traits + { + using public_type = bl::f32; + static constexpr thresholds::precision precision = thresholds::precision::f32; + static constexpr std::string_view label = "f32"; + }; + + template<> + struct corpus_traits + { + using public_type = bl::f64; + static constexpr thresholds::precision precision = thresholds::precision::f64; + static constexpr std::string_view label = "f64"; + }; + + template<> + struct corpus_traits + { + using public_type = bl::f128; + static constexpr thresholds::precision precision = thresholds::precision::f128; + static constexpr std::string_view label = "f128"; + }; + + template<> + struct corpus_traits + { + using public_type = bl::f256; + static constexpr thresholds::precision precision = thresholds::precision::f256; + static constexpr std::string_view label = "f256"; + }; + + template + [[nodiscard]] oracle::real to_real(const Float& value) + { + using public_type = typename corpus_traits::public_type; + return oracle::traits::to_real(value); + } + + template + [[nodiscard]] double matched_bits( + const Float& observed, + const oracle::real& expected) + { + using traits = corpus_traits; + using public_type = typename traits::public_type; + return oracle::resolution_adjusted_bits( + to_real(observed), + expected, + oracle::absolute_resolution(), + thresholds::target_bits(traits::precision)); + } + + [[nodiscard]] oracle::real evaluate(unary_op operation, const oracle::real& input) + { + using boost::multiprecision::abs; + using boost::multiprecision::acos; + using boost::multiprecision::acosh; + using boost::multiprecision::asin; + using boost::multiprecision::asinh; + using boost::multiprecision::atan; + using boost::multiprecision::atanh; + using boost::multiprecision::cos; + using boost::multiprecision::cosh; + using boost::multiprecision::erf; + using boost::multiprecision::erfc; + using boost::multiprecision::exp; + using boost::multiprecision::expm1; + using boost::multiprecision::lgamma; + using boost::multiprecision::log; + using boost::multiprecision::log1p; + using boost::multiprecision::pow; + using boost::multiprecision::sin; + using boost::multiprecision::sinh; + using boost::multiprecision::sqrt; + using boost::multiprecision::tan; + using boost::multiprecision::tanh; + using boost::multiprecision::tgamma; + + switch (operation) + { + case unary_op::sqrt: return sqrt(input); + case unary_op::exp: return exp(input); + case unary_op::expm1: return expm1(input); + case unary_op::log: return log(input); + case unary_op::log1p: return log1p(input); + case unary_op::sin: return sin(input); + case unary_op::cos: return cos(input); + case unary_op::tan: return tan(input); + case unary_op::atan: return atan(input); + case unary_op::asin: return asin(input); + case unary_op::acos: return acos(input); + case unary_op::sinh: return sinh(input); + case unary_op::cosh: return cosh(input); + case unary_op::tanh: return tanh(input); + case unary_op::asinh: return asinh(input); + case unary_op::acosh: return acosh(input); + case unary_op::atanh: return atanh(input); + case unary_op::cbrt: return oracle::cbrt(input); + case unary_op::erf: return erf(input); + case unary_op::erfc: return erfc(input); + case unary_op::lgamma: return lgamma(input); + case unary_op::tgamma: return tgamma(input); + } + return std::numeric_limits::quiet_NaN(); + } + + [[nodiscard]] oracle::real evaluate( + binary_op operation, + const oracle::real& lhs, + const oracle::real& rhs) + { + using boost::multiprecision::atan2; + using boost::multiprecision::pow; + + switch (operation) + { + case binary_op::add: return lhs + rhs; + case binary_op::subtract: return lhs - rhs; + case binary_op::multiply: return lhs * rhs; + case binary_op::divide: return lhs / rhs; + case binary_op::fmod: return oracle::fmod(lhs, rhs); + case binary_op::remainder: return oracle::remainder(lhs, rhs); + case binary_op::pow: return pow(lhs, rhs); + case binary_op::atan2: return atan2(lhs, rhs); + case binary_op::hypot: return oracle::hypot(lhs, rhs); + } + return std::numeric_limits::quiet_NaN(); + } + + template + void check(const std::array, Size>& cases) + { + for (const auto& test : cases) + { + const oracle::real expected = evaluate(test.operation, to_real(test.input)); + const double bits = matched_bits(test.result, expected); + const double required = thresholds::required( + corpus_traits::precision, + name(test.operation), + "moderate"); + + INFO("type=" << corpus_traits::label); + INFO("operation=" << name(test.operation)); + INFO("case=" << test.label); + INFO("constexpr result=" << oracle::text(to_real(test.result))); + INFO("expected=" << oracle::text(expected)); + INFO("matched bits=" << bits); + INFO("required bits=" << required); + CHECK(bits >= required); + } + } + + template + void check(const std::array, Size>& cases) + { + for (const auto& test : cases) + { + const oracle::real expected = evaluate( + test.operation, + to_real(test.lhs), + to_real(test.rhs)); + const double bits = matched_bits(test.result, expected); + const double required = thresholds::required( + corpus_traits::precision, + name(test.operation), + test.operation == binary_op::add ? "cancellation" : "moderate"); + + INFO("type=" << corpus_traits::label); + INFO("operation=" << name(test.operation)); + INFO("case=" << test.label); + INFO("constexpr result=" << oracle::text(to_real(test.result))); + INFO("expected=" << oracle::text(expected)); + INFO("matched bits=" << bits); + INFO("required bits=" << required); + CHECK(bits >= required); + } + } + + template + void check_corpus() + { + constexpr auto core = core_unary_cases(); + constexpr auto inverse = inverse_unary_cases(); + constexpr auto hyperbolic = hyperbolic_unary_cases(); + constexpr auto special = special_unary_cases(); + constexpr auto arithmetic = arithmetic_binary_cases(); + constexpr auto reduction = reduction_binary_cases(); + constexpr auto transcendental = transcendental_binary_cases(); + + static_assert(core.size() + inverse.size() + hyperbolic.size() + + special.size() + arithmetic.size() + reduction.size() + + transcendental.size() == 58); + + check(core); + check(inverse); + check(hyperbolic); + check(special); + check(arithmetic); + check(reduction); + check(transcendental); + } +} + +#if defined(FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH) && \ + FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH +TEST_CASE("MPFR observation preserves native values by representation", + "[constexpr][oracle][!mayfail]") +#else +TEST_CASE("MPFR observation preserves native values by representation", + "[constexpr][oracle]") +#endif +{ + namespace native_fp = fltx::tests::native_fp; + using boost::multiprecision::ldexp; + + const double negative_zero = native_fp::signed_zero(true); + const double denorm = native_fp::denorm_min(); + const double infinity = native_fp::positive_infinity(); + const double nan = native_fp::quiet_nan(); + + const oracle::real observed_zero = oracle::native_float_to_real(negative_zero); + CHECK(observed_zero == 0); + CHECK(oracle::sign_bit(observed_zero)); + CHECK(oracle::native_float_to_real(denorm) == ldexp(oracle::real{1}, -1074)); + CHECK(oracle::is_inf(oracle::native_float_to_real(infinity))); + CHECK(oracle::is_nan(oracle::native_float_to_real(nan))); + CHECK(oracle::is_exact_score(oracle::exact_score())); +} + +TEST_CASE("genuine constexpr f128 corpus meets MPFR accuracy gates", + "[constexpr][accuracy][corpus][f128]") +{ + check_corpus(); +} + +// Consumer fast-math also relaxes compiler constant evaluation. Its complete +// native numerical corpus remains advisory in the fixed-simulation runner; +// core.cpp still hard-gates exact native constexpr special-value contracts in +// both consumer profiles. +#if !defined(FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH) || \ + !FLTX_TESTS_EXPECT_CONSUMER_FAST_MATH +TEST_CASE("genuine constexpr f32 corpus meets MPFR accuracy gates", + "[constexpr][accuracy][corpus][f32]") +{ + check_corpus(); +} + +TEST_CASE("genuine constexpr f64 corpus meets MPFR accuracy gates", + "[constexpr][accuracy][corpus][f64]") +{ + check_corpus(); +} +#endif + +TEST_CASE("genuine constexpr f256 corpus meets MPFR accuracy gates", + "[constexpr][accuracy][corpus][f256]") +{ + check_corpus(); +} diff --git a/validation/tests/constexpr/core.cpp b/validation/tests/constexpr/core.cpp new file mode 100644 index 0000000..8529f8d --- /dev/null +++ b/validation/tests/constexpr/core.cpp @@ -0,0 +1,369 @@ +#include + +#include +#include +#include +#include + +#include + +namespace +{ + template + constexpr bool within_roundoff(const T& a, const T& b) + { + const T delta = a - b; + const T difference = bl::abs(delta); + const T scale = bl::fmax(bl::abs(a), T{ 1.0 }); + return difference <= scale * std::numeric_limits::epsilon() * 64.0; + } + + template + constexpr bool within_bits(const T& actual, const T& expected, int bits) + { + const T scale = bl::fmax(bl::abs(expected), T{ 1.0 }); + return bl::abs(actual - expected) <= bl::ldexp(scale, -bits); + } + + constexpr bl::f128 dd_input{ 1.25 }; + constexpr bl::f256 qd_input{ 1.25 }; + + constexpr auto dd_sqrt = bl::sqrt(bl::f128{ 4.0 }); + constexpr auto dd_exp_log = bl::exp(bl::log(dd_input)); + constexpr auto dd_sincos = bl::sincos(dd_input); + constexpr auto qd_sqrt = bl::sqrt(bl::f256{ 4.0 }); + constexpr auto qd_exp_log = bl::exp(bl::log(qd_input)); + constexpr auto qd_sincos = bl::sincos(qd_input); + + // Independently precomputed with a 256-bit MPFR oracle, then split into + // correctly rounded binary64 limbs. These values prevent an algebraic + // identity from allowing matching constexpr errors to pass unnoticed. + constexpr bl::f128 dd_exp_expected{ + 0x1.747a513dbef6ap+0, + 0x1.88d1e2d966c25p-54 + }; + constexpr bl::f256 qd_exp_expected{ + 0x1.747a513dbef6ap+0, + 0x1.88d1e2d966c25p-54, + -0x1.bfa3a8705bde1p-108, + 0x1.a5c6dbedc36bbp-163 + }; + constexpr bl::f128 dd_log_expected{ + 0x1.4618bc21c5ec2p-2, + 0x1.f42decdeccf1dp-56 + }; + constexpr bl::f256 qd_log_expected{ + 0x1.4618bc21c5ec2p-2, + 0x1.f42decdeccf1dp-56, + -0x1.77d446996da00p-111, + 0x1.68872796bdd6bp-165 + }; + constexpr bl::f128 dd_sin_expected{ + 0x1.e5e14fe11418cp-1, + 0x1.f26492c1c25a0p-57 + }; + constexpr bl::f256 qd_sin_expected{ + 0x1.e5e14fe11418cp-1, + 0x1.f26492c1c25a0p-57, + 0x1.3931bcfd30bc4p-113, + 0x1.3379a6078b05fp-168 + }; + constexpr bl::f128 dd_cos_expected{ + 0x1.42e3dd88bd952p-2, + -0x1.353a9f74bf255p-57 + }; + constexpr bl::f256 qd_cos_expected{ + 0x1.42e3dd88bd952p-2, + -0x1.353a9f74bf255p-57, + 0x1.f11df0328f9f2p-114, + -0x1.a3c409c7e5592p-168 + }; + + template + consteval bool core_is_constant_evaluated() + { + T value{ 1.25 }; + value += T{ 0.75 }; + value *= T{ 3.0 }; + value -= T{ 1.0 }; + value /= T{ 2.0 }; + + return value == T{ 2.5 } && + -value < T{ 0.0 } && + bl::clamp(value, T{ 0.0 }, T{ 2.0 }) == T{ 2.0 } && + bl::isfinite(value) && + bl::isnormal(value) && + !bl::isnan(value) && + !bl::signbit(value) && + bl::fpclassify(value) == FP_NORMAL && + bl::recip(T{ 4.0 }) == T{ 0.25 }; + } + + template + consteval bool native_minmax_special_values_are_constant_evaluated() + { + constexpr T zero{ 0.0 }; + constexpr T negative_zero{ -0.0 }; + constexpr T one{ 1.0 }; + constexpr T nan = std::numeric_limits::quiet_NaN(); + + const T minimum_zero = bl::fmin(zero, negative_zero); + const T maximum_zero = bl::fmax(negative_zero, zero); + + return bl::fmin(nan, one) == one && + bl::fmin(one, nan) == one && + bl::fmax(nan, one) == one && + bl::fmax(one, nan) == one && + bl::isnan(bl::fmin(nan, nan)) && + bl::isnan(bl::fmax(nan, nan)) && + bl::iszero(minimum_zero) && bl::signbit(minimum_zero) && + bl::iszero(maximum_zero) && !bl::signbit(maximum_zero); + } + + template + consteval bool native_log_pow_atan2_special_values_are_constant_evaluated() + { + constexpr T one{ 1.0 }; + constexpr T infinity = std::numeric_limits::infinity(); + constexpr T negative_infinity = -infinity; + constexpr T nan = std::numeric_limits::quiet_NaN(); + + const T log1p_positive_infinity = bl::log1p(infinity); + const T atan2_positive_infinity = bl::atan2(infinity, one); + const T atan2_negative_infinity = bl::atan2(negative_infinity, one); + const T atan2_finite_positive_infinity = bl::atan2(one, infinity); + const T atan2_finite_negative_infinity = bl::atan2(one, negative_infinity); + const T atan2_both_positive_infinity = bl::atan2(infinity, infinity); + const T atan2_mixed_infinity = bl::atan2(infinity, negative_infinity); + + return bl::isinf(log1p_positive_infinity) && + !bl::signbit(log1p_positive_infinity) && + bl::isnan(bl::log1p(negative_infinity)) && + bl::isnan(bl::log1p(nan)) && + bl::isinf(bl::pow(infinity, one)) && + !bl::signbit(bl::pow(infinity, one)) && + bl::isinf(bl::pow(negative_infinity, one)) && + bl::signbit(bl::pow(negative_infinity, one)) && + bl::pow(one, infinity) == one && + bl::pow(one, negative_infinity) == one && + bl::isinf(bl::pow(infinity, infinity)) && + bl::iszero(bl::pow(infinity, negative_infinity)) && + bl::isnan(bl::pow(nan, one)) && + bl::pow(one, nan) == one && + bl::isnan(bl::pow(nan, nan)) && + atan2_positive_infinity > T{ 1.5 } && + atan2_positive_infinity < T{ 1.6 } && + atan2_negative_infinity < T{ -1.5 } && + atan2_negative_infinity > T{ -1.6 } && + bl::iszero(atan2_finite_positive_infinity) && + !bl::signbit(atan2_finite_positive_infinity) && + atan2_finite_negative_infinity > T{ 3.1 } && + atan2_finite_negative_infinity < T{ 3.2 } && + atan2_both_positive_infinity > T{ 0.7 } && + atan2_both_positive_infinity < T{ 0.8 } && + atan2_mixed_infinity > T{ 2.3 } && + atan2_mixed_infinity < T{ 2.4 } && + bl::isnan(bl::atan2(nan, one)) && + bl::isnan(bl::atan2(one, nan)) && + bl::isnan(bl::atan2(nan, nan)); + } + + template + consteval bool arithmetic_special_values_are_constant_evaluated() + { + constexpr T zero{ 0.0 }; + constexpr T negative_zero{ -0.0 }; + constexpr T one{ 1.0 }; + constexpr T infinity = std::numeric_limits::infinity(); + + const T positive_infinity = one / zero; + const T negative_infinity = one / negative_zero; + + return bl::isinf(positive_infinity) && !bl::signbit(positive_infinity) && + bl::isinf(negative_infinity) && bl::signbit(negative_infinity) && + bl::isnan(zero / zero) && + bl::isnan(infinity - infinity) && + bl::isnan(infinity * zero); + } + + template + consteval bool exact_math_is_constant_evaluated() + { + T integral{}; + int exponent = 0; + int quotient = 0; + T sine{}; + T cosine{}; + + const T fraction = bl::modf(T{ 3.25 }, &integral); + const T mantissa = bl::frexp(T{ 8.0 }, &exponent); + const T remainder = bl::remquo(T{ 5.0 }, T{ 2.0 }, "ient); + const bool sincos_ok = bl::sincos(T{ 0.0 }, sine, cosine); + + return bl::floor(T{ -2.25 }) == T{ -3.0 } && + bl::ceil(T{ -2.25 }) == T{ -2.0 } && + bl::trunc(T{ -2.75 }) == T{ -2.0 } && + bl::round(T{ -2.5 }) == T{ -3.0 } && + bl::roundeven(T{ 2.5 }) == T{ 2.0 } && + bl::lround(T{ -2.5 }) == -3L && + bl::llround(T{ 2.5 }) == 3LL && + bl::round_decimals(T{ 1.375 }, 2) > T{ 1.379 } && + bl::round_decimals(T{ 1.375 }, 2) < T{ 1.381 } && + bl::round_significant(T{ 12345.0 }, 3) > T{ 12299.0 } && + bl::round_significant(T{ 12345.0 }, 3) < T{ 12301.0 } && + fraction == T{ 0.25 } && integral == T{ 3.0 } && + mantissa == T{ 0.5 } && exponent == 4 && + bl::ldexp(T{ 0.5 }, 4) == T{ 8.0 } && + bl::scalbn(T{ 0.5 }, 4) == T{ 8.0 } && + bl::scalbln(T{ 0.5 }, 4L) == T{ 8.0 } && + bl::ilogb(T{ 8.0 }) == 3 && + bl::logb(T{ 8.0 }) == T{ 3.0 } && + remainder == T{ 1.0 } && quotient != 0 && + bl::nexttoward(T{ 1.0 }, T{ 2.0 }) > T{ 1.0 } && + bl::ipow(T{ 2.0 }, 10) == T{ 1024.0 } && + sincos_ok && sine == T{ 0.0 } && cosine == T{ 1.0 }; + } + + template + consteval bool io_is_constant_evaluated() + { + const auto parsed = bl::try_parse("12.5"); + const auto rejected = bl::try_parse("12.5tail"); + const T fallback = bl::parse("bad", T{ 7.0 }); + const auto text = bl::to_static_string(T{ 12.5 }, 1, std::ios_base::fixed); + + return parsed && parsed.consumed == 4 && parsed.value == T{ 12.5 } && + !rejected && rejected.consumed == 4 && + fallback == T{ 7.0 } && text.view() == std::string_view{ "12.5" }; + } + + template + consteval bool nominal_navigation_is_constant_evaluated() + { + constexpr T one{ 1.0 }; + constexpr T zero{ 0.0 }; + constexpr T up = bl::nextafter(one, T{ 2.0 }); + constexpr T down = bl::nextafter(one, zero); + + if constexpr (std::is_same_v) + { + return up == T{ 1.0, 0x1p-105 } && + down == T{ 1.0, -0x1p-106 } && + up - one == std::numeric_limits::epsilon(); + } + else + { + return up == T{ 1.0, 0x1p-211, 0.0, 0.0 } && + down == T{ 1.0, -0x1p-212, 0.0, 0.0 } && + up - one == std::numeric_limits::epsilon(); + } + } + + template + consteval bool random_is_constant_evaluated() + { + const auto first = bl::uniform_real_array<4>( + T{ -2.0 }, + T{ 3.0 }, + bl::mt19937_64{ 0x1020304050607080ull }); + const auto second = bl::random_array<4>( + bl::mt19937_64{ 0x1020304050607080ull }, + bl::uniform_real_distribution{ T{ -2.0 }, T{ 3.0 } }); + bl::mt19937 canonical_engine{ 1234u }; + const T canonical = + bl::generate_canonical::digits>(canonical_engine); + + bl::mt19937_64 distribution_engine{ 777u }; + bl::exponential_distribution exponential{ T{ 0.75 } }; + bl::normal_distribution normal{ T{ 1.0 }, T{ 0.5 } }; + bl::lognormal_distribution lognormal{ T{ 0.0 }, T{ 0.5 } }; + const T exponential_sample = exponential(distribution_engine); + const T normal_sample = normal(distribution_engine); + const T lognormal_sample = lognormal(distribution_engine); + + return first == second && + first.front() >= T{ -2.0 } && first.front() < T{ 3.0 } && + first.back() >= T{ -2.0 } && first.back() < T{ 3.0 } && + canonical >= T{ 0.0 } && canonical < T{ 1.0 } && + exponential_sample >= T{ 0.0 } && + bl::isfinite(normal_sample) && + lognormal_sample > T{ 0.0 }; + } + + static_assert(dd_sqrt == bl::f128{ 2.0 }); + static_assert(qd_sqrt == bl::f256{ 2.0 }); + static_assert(dd_exp_log > bl::f128{ 1.249 }); + static_assert(dd_exp_log < bl::f128{ 1.251 }); + static_assert(qd_exp_log > bl::f256{ 1.249 }); + static_assert(qd_exp_log < bl::f256{ 1.251 }); + static_assert(dd_sincos.s * dd_sincos.s + dd_sincos.c * dd_sincos.c > + bl::f128{ 0.999 }); + static_assert(qd_sincos.s * qd_sincos.s + qd_sincos.c * qd_sincos.c > + bl::f256{ 0.999 }); + static_assert(within_bits(bl::exp(bl::f128{ 0.375 }), dd_exp_expected, 78)); + static_assert(within_bits(bl::exp(bl::f256{ 0.375 }), qd_exp_expected, 178)); + static_assert(within_bits(bl::log(bl::f128{ 1.375 }), dd_log_expected, 78)); + static_assert(within_bits(bl::log(bl::f256{ 1.375 }), qd_log_expected, 178)); + static_assert(within_bits(dd_sincos.s, dd_sin_expected, 78)); + static_assert(within_bits(dd_sincos.c, dd_cos_expected, 78)); + static_assert(within_bits(qd_sincos.s, qd_sin_expected, 178)); + static_assert(within_bits(qd_sincos.c, qd_cos_expected, 178)); + static_assert(core_is_constant_evaluated()); + static_assert(core_is_constant_evaluated()); + static_assert(native_minmax_special_values_are_constant_evaluated()); + static_assert(native_minmax_special_values_are_constant_evaluated()); + static_assert(native_log_pow_atan2_special_values_are_constant_evaluated()); + static_assert(native_log_pow_atan2_special_values_are_constant_evaluated()); + static_assert(arithmetic_special_values_are_constant_evaluated()); + static_assert(arithmetic_special_values_are_constant_evaluated()); + static_assert(exact_math_is_constant_evaluated()); + static_assert(exact_math_is_constant_evaluated()); + static_assert(nominal_navigation_is_constant_evaluated()); + static_assert(nominal_navigation_is_constant_evaluated()); + static_assert(io_is_constant_evaluated()); + static_assert(io_is_constant_evaluated()); + static_assert(io_is_constant_evaluated()); + static_assert(io_is_constant_evaluated()); + static_assert(random_is_constant_evaluated()); + static_assert(random_is_constant_evaluated()); +} + +TEST_CASE("genuine constant evaluation covers representative heavy paths", "[constexpr]") +{ + CHECK(dd_sqrt == bl::sqrt(bl::f128{ 4.0 })); + CHECK(dd_exp_log == bl::exp(bl::log(dd_input))); + CHECK(within_roundoff(dd_sincos.s, bl::sin(dd_input))); + CHECK(within_roundoff(dd_sincos.c, bl::cos(dd_input))); + + CHECK(qd_sqrt == bl::sqrt(bl::f256{ 4.0 })); + CHECK(qd_exp_log == bl::exp(bl::log(qd_input))); + CHECK(within_roundoff(qd_sincos.s, bl::sin(qd_input))); + CHECK(within_roundoff(qd_sincos.c, bl::cos(qd_input))); + STATIC_CHECK(within_bits(bl::exp(bl::f128{ 0.375 }), dd_exp_expected, 78)); + STATIC_CHECK(within_bits(bl::exp(bl::f256{ 0.375 }), qd_exp_expected, 178)); + STATIC_CHECK(within_bits(bl::log(bl::f128{ 1.375 }), dd_log_expected, 78)); + STATIC_CHECK(within_bits(bl::log(bl::f256{ 1.375 }), qd_log_expected, 178)); + STATIC_CHECK(within_bits(dd_sincos.s, dd_sin_expected, 78)); + STATIC_CHECK(within_bits(dd_sincos.c, dd_cos_expected, 78)); + STATIC_CHECK(within_bits(qd_sincos.s, qd_sin_expected, 178)); + STATIC_CHECK(within_bits(qd_sincos.c, qd_cos_expected, 178)); + + STATIC_CHECK(core_is_constant_evaluated()); + STATIC_CHECK(core_is_constant_evaluated()); + STATIC_CHECK(native_minmax_special_values_are_constant_evaluated()); + STATIC_CHECK(native_minmax_special_values_are_constant_evaluated()); + STATIC_CHECK(native_log_pow_atan2_special_values_are_constant_evaluated()); + STATIC_CHECK(native_log_pow_atan2_special_values_are_constant_evaluated()); + STATIC_CHECK(arithmetic_special_values_are_constant_evaluated()); + STATIC_CHECK(arithmetic_special_values_are_constant_evaluated()); + STATIC_CHECK(exact_math_is_constant_evaluated()); + STATIC_CHECK(exact_math_is_constant_evaluated()); + STATIC_CHECK(nominal_navigation_is_constant_evaluated()); + STATIC_CHECK(nominal_navigation_is_constant_evaluated()); + STATIC_CHECK(io_is_constant_evaluated()); + STATIC_CHECK(io_is_constant_evaluated()); + STATIC_CHECK(io_is_constant_evaluated()); + STATIC_CHECK(io_is_constant_evaluated()); + STATIC_CHECK(random_is_constant_evaluated()); + STATIC_CHECK(random_is_constant_evaluated()); +} diff --git a/validation/tests/contracts/approx_comparison.cpp b/validation/tests/contracts/approx_comparison.cpp new file mode 100644 index 0000000..ac4dcc9 --- /dev/null +++ b/validation/tests/contracts/approx_comparison.cpp @@ -0,0 +1,131 @@ +#include + +#include +#include + +#include + +namespace +{ + template + concept has_default_approx_eq = requires (const Left& left, const Right& right) + { + { bl::approx_eq(left, right) } -> std::same_as; + }; + + template + concept has_two_tolerances = requires ( + const Left& left, + const Right& right, + const Tolerance& tolerance) + { + bl::approx_eq(left, right, tolerance, tolerance); + }; + + static_assert(has_default_approx_eq); + static_assert(has_default_approx_eq); + static_assert(has_default_approx_eq); + static_assert(has_default_approx_eq); + static_assert(has_default_approx_eq); + static_assert(has_default_approx_eq); + static_assert(has_default_approx_eq); + static_assert(has_default_approx_eq); + static_assert(!has_default_approx_eq); + static_assert(!has_default_approx_eq); + static_assert(!has_default_approx_eq); + static_assert(!has_default_approx_eq); + static_assert(!has_default_approx_eq); + static_assert(!has_two_tolerances); + static_assert(!has_two_tolerances); + + static_assert(bl::f128_parity_tolerance == bl::f128_s{ 0x1p-80, 0.0 }); + static_assert(bl::f256_parity_tolerance == + bl::f256_s{ 0x1p-188, 0.0, 0.0, 0.0 }); + + constexpr bl::f128 dd_one{ 1.0 }; + constexpr bl::f128 dd_boundary = dd_one + bl::f128{ 0x1p-80 }; + constexpr bl::f128 dd_outside = dd_one + bl::f128{ 0x1p-79 }; + static_assert(bl::approx_eq(dd_one, dd_boundary)); + static_assert(!bl::approx_eq(dd_one, dd_outside)); + + constexpr bl::f256 qd_one{ 1.0 }; + constexpr bl::f256 qd_boundary = qd_one + bl::f256{ 0x1p-188 }; + constexpr bl::f256 qd_outside = qd_one + bl::f256{ 0x1p-187 }; + static_assert(bl::approx_eq(qd_one, qd_boundary)); + static_assert(!bl::approx_eq(qd_one, qd_outside)); + + constexpr bl::f128 dd_max = std::numeric_limits::max(); + constexpr bl::f256 qd_max = std::numeric_limits::max(); + static_assert(!bl::approx_eq(dd_max, -dd_max, bl::f128{ 1.5 })); + static_assert(bl::approx_eq(dd_max, -dd_max, bl::f128{ 2.0 })); + static_assert(!bl::approx_eq(qd_max, -qd_max, bl::f256{ 1.5 })); + static_assert(bl::approx_eq(qd_max, -qd_max, bl::f256{ 2.0 })); +} + +TEST_CASE("approx_eq applies relative tolerances", "[contracts][comparison]") +{ + CHECK(bl::approx_eq(dd_one, dd_boundary)); + CHECK(bl::approx_eq(dd_boundary, dd_one)); + CHECK_FALSE(bl::approx_eq(dd_one, dd_outside)); + + const bl::f128 dd_large = bl::ldexp(bl::f128{ 1.0 }, 400); + CHECK(bl::approx_eq( + dd_large, + dd_large + bl::ldexp(bl::f128{ 1.0 }, 320))); + CHECK_FALSE(bl::approx_eq( + dd_large, + dd_large + bl::ldexp(bl::f128{ 1.0 }, 321))); + + CHECK(bl::approx_eq(qd_one, qd_boundary)); + CHECK(bl::approx_eq(qd_boundary, qd_one)); + CHECK_FALSE(bl::approx_eq(qd_one, qd_outside)); + + const bl::f256 qd_large = bl::ldexp(bl::f256{ 1.0 }, 400); + const bl::f256 qd_large_boundary = + qd_large + bl::ldexp(bl::f256{ 1.0 }, 212); + const bl::f256 qd_large_outside = + qd_large + bl::ldexp(bl::f256{ 1.0 }, 213); + CHECK(bl::approx_eq( + qd_large, + qd_large_boundary)); + CHECK_FALSE(bl::approx_eq( + qd_large, + qd_large_outside)); + + CHECK_FALSE(bl::approx_eq(bl::f128{ 0.0 }, bl::f128{ 0x1p-900 })); + CHECK_FALSE(bl::approx_eq(bl::f256{ 0.0 }, bl::f256{ 0x1p-900 })); +} + +TEST_CASE("approx_eq preserves special-value semantics", "[contracts][comparison]") +{ + const bl::f128 dd_positive_zero{ 0.0 }; + const bl::f128 dd_negative_zero{ -0.0 }; + const bl::f128 dd_infinity = std::numeric_limits::infinity(); + const bl::f128 dd_nan = std::numeric_limits::quiet_NaN(); + + CHECK(bl::approx_eq(dd_positive_zero, dd_negative_zero)); + CHECK(bl::approx_eq(dd_infinity, dd_infinity)); + CHECK_FALSE(bl::approx_eq(dd_infinity, -dd_infinity)); + CHECK_FALSE(bl::approx_eq(dd_nan, dd_nan)); + CHECK_FALSE(bl::approx_eq(dd_one, dd_one, bl::f128{ -1.0 })); + CHECK_FALSE(bl::approx_eq(dd_one, dd_one, dd_nan)); + CHECK(bl::approx_eq(dd_one, dd_outside, dd_infinity)); + + const bl::f256 qd_positive_zero{ 0.0 }; + const bl::f256 qd_negative_zero{ -0.0 }; + const bl::f256 qd_infinity = std::numeric_limits::infinity(); + const bl::f256 qd_nan = std::numeric_limits::quiet_NaN(); + + CHECK(bl::approx_eq(qd_positive_zero, qd_negative_zero)); + CHECK(bl::approx_eq(qd_infinity, qd_infinity)); + CHECK_FALSE(bl::approx_eq(qd_infinity, -qd_infinity)); + CHECK_FALSE(bl::approx_eq(qd_nan, qd_nan)); + CHECK_FALSE(bl::approx_eq(qd_one, qd_one, bl::f256{ -1.0 })); + CHECK_FALSE(bl::approx_eq(qd_one, qd_one, qd_nan)); + CHECK(bl::approx_eq(qd_one, qd_outside, qd_infinity)); + + CHECK_FALSE(bl::approx_eq(dd_max, -dd_max, bl::f128{ 1.5 })); + CHECK(bl::approx_eq(dd_max, -dd_max, bl::f128{ 2.0 })); + CHECK_FALSE(bl::approx_eq(qd_max, -qd_max, bl::f256{ 1.5 })); + CHECK(bl::approx_eq(qd_max, -qd_max, bl::f256{ 2.0 })); +} diff --git a/validation/tests/contracts/benchmark_policy.cpp b/validation/tests/contracts/benchmark_policy.cpp new file mode 100644 index 0000000..079bb98 --- /dev/null +++ b/validation/tests/contracts/benchmark_policy.cpp @@ -0,0 +1,136 @@ +#include "../../benchmarks/runtime/integer_observer.hpp" +#include "../../benchmarks/runtime/timing_policy.hpp" +#include "../../benchmarks/runtime/samples.hpp" +#include "../../support/native_fp.hpp" + +#include + +#include +#include +#include +#include + +namespace policy = fltx::tests::benchmark::timing_policy; +namespace samples = fltx::tests::benchmark::samples; + +TEST_CASE("validation observes native floating encodings without classification intrinsics", + "[contracts][benchmark-policy]") +{ + namespace native_fp = fltx::tests::native_fp; + + const double negative_zero = native_fp::signed_zero(true); + const double infinity = native_fp::positive_infinity(); + const double nan = native_fp::quiet_nan(); + + CHECK(native_fp::sign_bit(negative_zero)); + CHECK(native_fp::is_inf(infinity)); + CHECK_FALSE(native_fp::is_finite(infinity)); + CHECK(native_fp::is_nan(nan)); + CHECK(native_fp::is_finite(native_fp::denorm_min())); +} + +TEST_CASE("benchmark observation accumulates floating representations as integers", + "[contracts][benchmark-policy]") +{ + fltx::tests::benchmark::integer_observer observer; + observer.add({1.0, -0.0, 2.0, -3.0}); + observer.add({-1.0, 0.0, -2.0, 3.0}); + + const auto lane0 = std::bit_cast(1.0) + + std::bit_cast(-1.0); + const auto lane1 = std::bit_cast(-0.0) + + std::bit_cast(0.0); + const auto lane2 = std::bit_cast(2.0) + + std::bit_cast(-2.0); + const auto lane3 = std::bit_cast(-3.0) + + std::bit_cast(3.0); + CHECK(observer.value() == + (lane0 ^ std::rotl(lane1, 13) ^ std::rotl(lane2, 29) ^ + std::rotl(lane3, 47))); +} + +TEST_CASE("benchmark measurements run primary first", + "[contracts][benchmark-policy]") +{ + std::vector order; + policy::for_each_measurement_primary_first( + 4, + [&](std::size_t index) { order.push_back(index); }); + CHECK(order == std::vector{0, 1, 2, 3}); +} + +TEST_CASE("standard benchmark timing tiers are adaptive", + "[contracts][benchmark-policy]") +{ + CHECK(policy::identity == "adaptive-v2"); + const auto fast = policy::select(1.0); + CHECK(fast.trials == 7); + CHECK(fast.target_trial_ns == 15'000'000.0); + + const auto ordinary = policy::select(20.0); + CHECK(ordinary.trials == 3); + CHECK(ordinary.target_trial_ns == 8'000'000.0); + + const auto slow = policy::select(10'000.0); + CHECK(slow.trials == 3); + CHECK(slow.target_trial_ns == 0.0); +} + +TEST_CASE("standard benchmark row budget keeps an odd trial count", + "[contracts][benchmark-policy]") +{ + CHECK(policy::fitting_trials(7, 15'000'000.0) == 7); + CHECK(policy::fitting_trials(3, 2'000'000'000.0) == 1); + CHECK(policy::fitting_trials(7, 1'000'000'000.0) == 5); + CHECK(policy::fitting_trials(3, 6'000'000'000.0) == 1); +} + +TEST_CASE("standard benchmark calibration runs once per row", + "[contracts][benchmark-policy]") +{ + std::size_t calls = 0; + const auto measured = policy::calibrate_once( + [&](std::size_t batches) { + ++calls; + return static_cast(batches) * 1'000'000.0; + }, + 8'000'000.0, + 1u << 20); + + CHECK(measured.elapsed_ns >= 8'000'000.0); + CHECK(measured.calls == calls); + CHECK(calls < 5); + + calls = 0; + const auto slow = policy::calibrate_once( + [&](std::size_t) { + ++calls; + return 6'000'000'000.0; + }, + 0.0, + 1u << 20); + CHECK(slow.batches == 1); + CHECK(slow.calls == 1); + CHECK(calls == 1); +} + +TEST_CASE("adaptive benchmark corpora match operation cost", + "[contracts][benchmark-policy]") +{ + CHECK(samples::count_for("add", 8192, "standard") == 81920); + CHECK(samples::count_for("sqrt", 4096, "standard") == 40960); + CHECK(samples::count_for("sin", 8192, "standard") == 2048); + CHECK(samples::count_for("erf", 8192, "standard") == 256); + CHECK(samples::count_for("tgamma", 4096, "standard") == 128); + + CHECK(samples::count_for("add", 4096, "small") == 40960); + CHECK(samples::count_for("sqrt", 2048, "small") == 20480); + CHECK(samples::count_for("sin", 4096, "small") == 1024); + CHECK(samples::count_for("erf", 4096, "small") == 128); + CHECK(samples::count_for("tgamma", 2048, "small") == 64); + + CHECK(samples::count_for("add", 12, "smoke") == 12); + CHECK(samples::count_for("sin", 12, "smoke") == 3); + CHECK(samples::count_for("add", 81920, "full") == 81920); + CHECK(samples::count_for("erf", 81920, "full") == 20480); +} diff --git a/validation/tests/contracts/core.cpp b/validation/tests/contracts/core.cpp new file mode 100644 index 0000000..1c79598 --- /dev/null +++ b/validation/tests/contracts/core.cpp @@ -0,0 +1,577 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace +{ + template + void check_scalar_arithmetic(Scalar scalar) + { + const T six{ 6.0 }; + const T one_third{ T{ 2.0 } / T{ 6.0 } }; + + CHECK(T{ six + scalar } == T{ 8.0 }); + CHECK(T{ six - scalar } == T{ 4.0 }); + CHECK(T{ six * scalar } == T{ 12.0 }); + CHECK(T{ six / scalar } == T{ 3.0 }); + CHECK(T{ scalar + six } == T{ 8.0 }); + CHECK(T{ scalar - six } == T{ -4.0 }); + CHECK(T{ scalar * six } == T{ 12.0 }); + CHECK(T{ scalar / six } == one_third); + + T value{ 6.0 }; + CHECK(&(value += scalar) == &value); + CHECK(value == T{ 8.0 }); + CHECK(&(value -= scalar) == &value); + CHECK(value == T{ 6.0 }); + CHECK(&(value *= scalar) == &value); + CHECK(value == T{ 12.0 }); + CHECK(&(value /= scalar) == &value); + CHECK(value == T{ 6.0 }); + } + + template + void check_wide_integer_arithmetic(Integer integer) + { + T exact{}; + exact = integer; + const T zero{ 0.0 }; + const T one{ 1.0 }; + + CHECK(T{ zero + integer } == exact); + CHECK(T{ integer + zero } == exact); + CHECK(T{ exact - integer } == zero); + CHECK(T{ integer - exact } == zero); + CHECK(T{ one * integer } == exact); + CHECK(T{ integer * one } == exact); + CHECK(T{ exact / integer } == one); + CHECK(T{ integer / exact } == one); + + T value{ 0.0 }; + value += integer; + CHECK(value == exact); + value -= integer; + CHECK(value == zero); + value = 1.0; + value *= integer; + CHECK(value == exact); + value /= integer; + CHECK(value == one); + } + + template + void check_core_type() + { + const T one{ 1.0 }; + const T half{ 0.5 }; + + const T sum = one + half; + const T difference = one - half; + const T product = one * half; + const T quotient = one / half; + CHECK(sum == T{ 1.5 }); + CHECK(difference == T{ 0.5 }); + CHECK(product == T{ 0.5 }); + CHECK(quotient == T{ 2.0 }); + CHECK(-one == T{ -1.0 }); + + T value = one; + value += half; + value -= half; + value *= T{ 2.0 }; + value /= T{ 2.0 }; + CHECK(value == one); + + CHECK(T{ 1.0 } == 1); + CHECK(T{ 1.0 } < 2.0); + CHECK(0.0 < T{ 1.0 }); + CHECK((T{ 1.0 } <=> T{ 2.0 }) == std::partial_ordering::less); + } + + template + void check_ordered_predicates() + { + const T one{ 1.0 }; + const T two{ 2.0 }; + const T nan = std::numeric_limits::quiet_NaN(); + + CHECK(bl::ispositive(one)); + CHECK_FALSE(bl::ispositive(T{ -1.0 })); + CHECK_FALSE(bl::ispositive(T{ -0.0 })); + CHECK(bl::isless(one, two)); + CHECK(bl::islessequal(one, one)); + CHECK(bl::isgreater(two, one)); + CHECK(bl::isgreaterequal(two, two)); + CHECK(bl::islessgreater(one, two)); + CHECK_FALSE(bl::islessgreater(one, one)); + + CHECK_FALSE(bl::isless(nan, one)); + CHECK_FALSE(bl::islessequal(nan, one)); + CHECK_FALSE(bl::isgreater(nan, one)); + CHECK_FALSE(bl::isgreaterequal(nan, one)); + CHECK_FALSE(bl::islessgreater(nan, one)); + CHECK(bl::isunordered(nan, one)); + CHECK_FALSE(bl::isless(one, nan)); + CHECK_FALSE(bl::islessequal(one, nan)); + CHECK_FALSE(bl::isgreater(one, nan)); + CHECK_FALSE(bl::isgreaterequal(one, nan)); + CHECK_FALSE(bl::islessgreater(one, nan)); + CHECK(bl::isunordered(one, nan)); + CHECK_FALSE(bl::ispositive(nan)); + } + + template + void check_classification() + { + const T zero{ 0.0 }; + const T negative_zero{ -0.0 }; + const T infinity = std::numeric_limits::infinity(); + const T nan = std::numeric_limits::quiet_NaN(); + const T subnormal = std::numeric_limits::denorm_min(); + + CHECK(bl::iszero(zero)); + CHECK(bl::iszero(negative_zero)); + CHECK(bl::signbit(negative_zero)); + CHECK(bl::isfinite(T{ 1.0 })); + CHECK(bl::isnormal(T{ 1.0 })); + CHECK(bl::isinf(infinity)); + CHECK(bl::isnan(nan)); + CHECK(bl::isunordered(nan, T{ 1.0 })); + if constexpr (std::same_as || std::same_as) + { + CHECK_FALSE(nan == nan); + CHECK((nan <=> T{ 1.0 }) == std::partial_ordering::unordered); + } + CHECK(bl::fpclassify(zero) == FP_ZERO); + CHECK(bl::fpclassify(infinity) == FP_INFINITE); + CHECK(bl::fpclassify(nan) == FP_NAN); + CHECK(bl::fpclassify(subnormal) == FP_SUBNORMAL); + CHECK_FALSE(bl::isnormal(subnormal)); + } + + template + void check_number_constants() + { + constexpr std::array constants{ + std::numbers::e_v, + std::numbers::log2e_v, + std::numbers::log10e_v, + std::numbers::pi_v, + std::numbers::inv_pi_v, + std::numbers::inv_sqrtpi_v, + std::numbers::ln2_v, + std::numbers::ln10_v, + std::numbers::sqrt2_v, + std::numbers::sqrt3_v, + std::numbers::inv_sqrt3_v, + std::numbers::egamma_v, + std::numbers::phi_v + }; + + for (const T value : constants) + { + CHECK(bl::isfinite(value)); + CHECK(value > T{ 0.0 }); + } + + CHECK(std::numbers::e_v > T{ 2.7 }); + CHECK(std::numbers::e_v < T{ 2.8 }); + CHECK(std::numbers::pi_v > T{ 3.14 }); + CHECK(std::numbers::pi_v < T{ 3.15 }); + CHECK(std::numbers::ln2_v > T{ 0.69 }); + CHECK(std::numbers::ln2_v < T{ 0.70 }); + } + + template + void check_numeric_limits( + int digits, + int digits10, + int max_digits10, + int min_exponent, + int min_exponent10) + { + using limits = std::numeric_limits; + + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + + CHECK(limits::is_specialized); + CHECK(limits::digits == digits); + CHECK(limits::digits10 == digits10); + CHECK(limits::max_digits10 == max_digits10); + CHECK(limits::is_signed); + CHECK_FALSE(limits::is_integer); + CHECK_FALSE(limits::is_exact); + CHECK(limits::radix == 2); + CHECK(limits::min_exponent == min_exponent); + CHECK(limits::max_exponent == std::numeric_limits::max_exponent); + CHECK(limits::min_exponent10 == min_exponent10); + CHECK(limits::max_exponent10 == std::numeric_limits::max_exponent10); + CHECK_FALSE(limits::is_iec559); + CHECK(limits::is_bounded); + CHECK_FALSE(limits::is_modulo); + CHECK_FALSE(limits::traps); + CHECK_FALSE(limits::tinyness_before); + CHECK(limits::round_style == std::round_to_nearest); + + CHECK(limits::min() > T{ 0.0 }); + CHECK(bl::fpclassify(limits::min()) == FP_NORMAL); + CHECK(bl::isfinite(limits::max())); + CHECK(limits::lowest() == -limits::max()); + CHECK(limits::epsilon() > T{ 0.0 }); + CHECK(limits::round_error() == T{ 0.5 }); + CHECK(limits::has_infinity); + CHECK(limits::has_quiet_NaN); + CHECK(limits::has_signaling_NaN); + CHECK(limits::has_denorm == std::denorm_present); + CHECK_FALSE(limits::has_denorm_loss); + CHECK(bl::isinf(limits::infinity())); + CHECK(bl::isnan(limits::quiet_NaN())); + CHECK(bl::isnan(limits::signaling_NaN())); + CHECK(bl::fpclassify(limits::denorm_min()) == FP_SUBNORMAL); + } + + template + void check_wrapper_numeric_limits() + { + using value_limits = std::numeric_limits; + using storage_limits = std::numeric_limits; + + STATIC_CHECK(value_limits::is_specialized == storage_limits::is_specialized); + STATIC_CHECK(value_limits::digits == storage_limits::digits); + STATIC_CHECK(value_limits::digits10 == storage_limits::digits10); + STATIC_CHECK(value_limits::max_digits10 == storage_limits::max_digits10); + STATIC_CHECK(value_limits::is_signed == storage_limits::is_signed); + STATIC_CHECK(value_limits::is_integer == storage_limits::is_integer); + STATIC_CHECK(value_limits::is_exact == storage_limits::is_exact); + STATIC_CHECK(value_limits::radix == storage_limits::radix); + STATIC_CHECK(value_limits::min_exponent == storage_limits::min_exponent); + STATIC_CHECK(value_limits::max_exponent == storage_limits::max_exponent); + STATIC_CHECK(value_limits::min_exponent10 == storage_limits::min_exponent10); + STATIC_CHECK(value_limits::max_exponent10 == storage_limits::max_exponent10); + STATIC_CHECK(value_limits::has_denorm == storage_limits::has_denorm); + STATIC_CHECK(value_limits::has_denorm_loss == storage_limits::has_denorm_loss); + STATIC_CHECK(value_limits::is_iec559 == storage_limits::is_iec559); + STATIC_CHECK(value_limits::is_bounded == storage_limits::is_bounded); + STATIC_CHECK(value_limits::is_modulo == storage_limits::is_modulo); + STATIC_CHECK(value_limits::traps == storage_limits::traps); + STATIC_CHECK(value_limits::tinyness_before == storage_limits::tinyness_before); + STATIC_CHECK(value_limits::round_style == storage_limits::round_style); + + STATIC_CHECK(value_limits::min() == Value{ storage_limits::min() }); + STATIC_CHECK(value_limits::max() == Value{ storage_limits::max() }); + STATIC_CHECK(value_limits::lowest() == Value{ storage_limits::lowest() }); + STATIC_CHECK(value_limits::epsilon() == Value{ storage_limits::epsilon() }); + STATIC_CHECK(value_limits::round_error() == Value{ storage_limits::round_error() }); + STATIC_CHECK(value_limits::infinity() == Value{ storage_limits::infinity() }); + STATIC_CHECK(value_limits::denorm_min() == Value{ storage_limits::denorm_min() }); + CHECK(bl::isnan(value_limits::quiet_NaN())); + CHECK(bl::isnan(value_limits::signaling_NaN())); + } + + template + void check_wrapper_number_constants() + { + STATIC_CHECK(std::numbers::e_v == Value{ std::numbers::e_v }); + STATIC_CHECK(std::numbers::log2e_v == Value{ std::numbers::log2e_v }); + STATIC_CHECK(std::numbers::log10e_v == Value{ std::numbers::log10e_v }); + STATIC_CHECK(std::numbers::pi_v == Value{ std::numbers::pi_v }); + STATIC_CHECK(std::numbers::inv_pi_v == Value{ std::numbers::inv_pi_v }); + STATIC_CHECK(std::numbers::inv_sqrtpi_v == Value{ std::numbers::inv_sqrtpi_v }); + STATIC_CHECK(std::numbers::ln2_v == Value{ std::numbers::ln2_v }); + STATIC_CHECK(std::numbers::ln10_v == Value{ std::numbers::ln10_v }); + STATIC_CHECK(std::numbers::sqrt2_v == Value{ std::numbers::sqrt2_v }); + STATIC_CHECK(std::numbers::sqrt3_v == Value{ std::numbers::sqrt3_v }); + STATIC_CHECK(std::numbers::inv_sqrt3_v == Value{ std::numbers::inv_sqrt3_v }); + STATIC_CHECK(std::numbers::egamma_v == Value{ std::numbers::egamma_v }); + STATIC_CHECK(std::numbers::phi_v == Value{ std::numbers::phi_v }); + } + + template + [[nodiscard]] std::size_t hash_value(const T& value) noexcept + { + return std::hash{}(value); + } + + template + void check_special_value_hashes() + { + const T infinity = std::numeric_limits::infinity(); + const T nan = std::numeric_limits::quiet_NaN(); + CHECK(hash_value(infinity) == hash_value(infinity)); + CHECK(hash_value(nan) == hash_value(nan)); + } +} + +using namespace bl::int_literals; + +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(255_u8 == std::uint8_t{ 255 }); +static_assert(127_i8 == std::int8_t{ 127 }); +static_assert(65535_u16 == std::uint16_t{ 65535 }); +static_assert(32767_i16 == std::int16_t{ 32767 }); +static_assert(123456_u32 == std::uint32_t{ 123456 }); +static_assert(123456_i32 == std::int32_t{ 123456 }); +static_assert(123456789_u64 == std::uint64_t{ 123456789 }); +static_assert(123456789_i64 == std::int64_t{ 123456789 }); + +static_assert(bl::fltx_f32); +static_assert(bl::fltx_f64); +static_assert(bl::fltx_f128); +static_assert(bl::fltx_f128); +static_assert(bl::fltx_f256); +static_assert(bl::fltx_f256); +static_assert(bl::fltx_float); +static_assert(bl::fltx_extended_float); +static_assert(bl::fltx_floating_point); +static_assert(bl::fltx_arithmetic); +static_assert(!bl::fltx_float); +static_assert(!bl::fltx_extended_float); +static_assert(bl::is_f32_v); +static_assert(bl::is_f64_v); +static_assert(bl::is_f128_v); +static_assert(bl::is_f256_v); +static_assert(bl::is_fltx_extended_float_v); +static_assert(bl::is_fltx_float_v); +static_assert(bl::is_floating_point_v); +static_assert(bl::is_arithmetic_v); +static_assert(bl::is_integral_v); +static_assert(bl::fltx_precision_rank_v == 1); +static_assert(bl::fltx_precision_rank_v == 2); +static_assert(bl::fltx_precision_rank_v == 3); +static_assert(bl::fltx_precision_rank_v == 4); +static_assert(bl::fltx_precision_rank_v == 5); +static_assert(std::same_as, double>); +static_assert(std::same_as, bl::f128>); +static_assert(std::same_as, bl::f256>); +static_assert(std::same_as, double>); +static_assert(std::same_as, long double>); +static_assert(std::same_as, bl::f256>); +static_assert(static_cast(bl::FloatType::COUNT) == 4); +static_assert(bl::to_string(bl::FloatType::COUNT) == "unknown"); +static_assert(bl::to_string(static_cast(99)) == "unknown"); + +TEST_CASE("extended types preserve arithmetic and conversion contracts", "[contracts][core]") +{ + check_core_type(); + check_core_type(); + check_core_type(); + check_core_type(); + + constexpr std::int64_t exact = (std::int64_t{ 1 } << 60) + 3; + CHECK(static_cast(static_cast(bl::f128{ exact })) != exact); + CHECK(bl::f128{ exact } == exact); + CHECK(bl::f256{ exact } == exact); + + const bl::f128 dd{ 1.0, 0x1p-60 }; + const bl::f256 qd{ dd }; + CHECK(static_cast(qd) == dd); + CHECK(static_cast(bl::f128{ 1.5 }) == 1.5); + CHECK(static_cast(bl::f256{ 1.5 }) == 1.5f); + CHECK(static_cast(bl::f128_s{ 7.75 }) == 7); + + bl::f128_s assigned128{}; + assigned128 = exact; + CHECK(assigned128 == exact); + assigned128 = std::uint32_t{ 42 }; + CHECK(assigned128 == 42); + + bl::f256_s assigned256{}; + assigned256 = static_cast(exact); + CHECK(assigned256 == exact); + assigned256 = std::int16_t{ -42 }; + CHECK(assigned256 == -42); + + assigned128 = qd; + CHECK(assigned128 == dd); + assigned256 = dd; + CHECK(assigned256 == qd); +} + +TEST_CASE("scalar and cross-precision arithmetic exercise each overload family", "[contracts][core]") +{ + check_scalar_arithmetic(2.0f); + check_scalar_arithmetic(2.0); + check_scalar_arithmetic(std::int32_t{ 2 }); + check_scalar_arithmetic(std::uint64_t{ 2 }); + check_scalar_arithmetic(std::int64_t{ 2 }); + + check_scalar_arithmetic(2.0f); + check_scalar_arithmetic(2.0); + check_scalar_arithmetic(std::int32_t{ 2 }); + check_scalar_arithmetic(std::uint64_t{ 2 }); + check_scalar_arithmetic(std::int64_t{ 2 }); + + constexpr std::int64_t signed_wide = (std::int64_t{ 1 } << 60) + 3; + constexpr std::uint64_t unsigned_wide = (std::uint64_t{ 1 } << 63) + 5; + check_wide_integer_arithmetic(signed_wide); + check_wide_integer_arithmetic(unsigned_wide); + check_wide_integer_arithmetic(signed_wide); + check_wide_integer_arithmetic(unsigned_wide); + + const bl::f128_s narrow{ 2.0 }; + const bl::f256_s wide{ 6.0 }; + CHECK(wide + narrow == bl::f256_s{ 8.0 }); + CHECK(wide - narrow == bl::f256_s{ 4.0 }); + CHECK(wide * narrow == bl::f256_s{ 12.0 }); + CHECK(wide / narrow == bl::f256_s{ 3.0 }); + CHECK(narrow + wide == bl::f256_s{ 8.0 }); + CHECK(narrow - wide == bl::f256_s{ -4.0 }); + CHECK(narrow * wide == bl::f256_s{ 12.0 }); + CHECK(narrow / wide == bl::f256_s{ 2.0 } / bl::f256_s{ 6.0 }); + + bl::f256_s compound{ 6.0 }; + CHECK(&(compound += narrow) == &compound); + CHECK(compound == bl::f256_s{ 8.0 }); + CHECK(&(compound -= narrow) == &compound); + CHECK(compound == bl::f256_s{ 6.0 }); + CHECK(&(compound *= narrow) == &compound); + CHECK(compound == bl::f256_s{ 12.0 }); + CHECK(&(compound /= narrow) == &compound); + CHECK(compound == bl::f256_s{ 6.0 }); +} + +TEST_CASE("classification and ordering handle IEEE special values", "[contracts][core]") +{ + check_classification(); + check_classification(); + check_classification(); + check_classification(); + check_ordered_predicates(); + check_ordered_predicates(); +} + +TEST_CASE("limits, constants, and traits describe both expansion types", "[contracts][core]") +{ + STATIC_CHECK(bl::f128_s::eps() == std::numeric_limits::epsilon()); + STATIC_CHECK(bl::f256_s::eps() == std::numeric_limits::epsilon()); + STATIC_CHECK(std::numeric_limits::highest() == + std::numeric_limits::max()); + STATIC_CHECK(std::numeric_limits::highest() == + std::numeric_limits::max()); + STATIC_CHECK(std::numeric_limits::epsilon() == + bl::f128_s{ 0x1p-105, 0.0 }); + STATIC_CHECK(std::numeric_limits::epsilon() == + bl::f256_s{ 0x1p-211, 0.0, 0.0, 0.0 }); + STATIC_CHECK(std::numeric_limits::min() == + bl::f128_s{ 0x1p-969, 0.0 }); + STATIC_CHECK(std::numeric_limits::min() == + bl::f256_s{ 0x1p-863, 0.0, 0.0, 0.0 }); + STATIC_CHECK(std::numeric_limits::max() == bl::f128_s{ + 0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+969 }); + STATIC_CHECK(std::numeric_limits::max() == bl::f256_s{ + 0x1.fffffffffffffp+1023, + 0x1.fffffffffffffp+969, + 0x1.fffffffffffffp+915, + 0x1.fffffffffffffp+861 }); + STATIC_CHECK(bl::to_string(bl::FloatType::F32) == "f32"); + STATIC_CHECK(bl::to_string(bl::FloatType::F64) == "f64"); + STATIC_CHECK(bl::to_string(bl::FloatType::F128) == "f128"); + STATIC_CHECK(bl::to_string(bl::FloatType::F256) == "f256"); + + check_numeric_limits(106, 31, 33, -968, -291); + check_numeric_limits(106, 31, 33, -968, -291); + check_numeric_limits(212, 63, 65, -862, -259); + check_numeric_limits(212, 63, 65, -862, -259); + check_wrapper_numeric_limits(); + check_wrapper_numeric_limits(); + + check_number_constants(); + check_number_constants(); + check_number_constants(); + check_number_constants(); + check_wrapper_number_constants(); + check_wrapper_number_constants(); +} + +TEST_CASE("hashing follows equality and includes every limb", "[contracts][hash]") +{ + const bl::f128_s f128_zero_a{ 0.0, -0.0 }; + const bl::f128_s f128_zero_b{ -0.0, 0.0 }; + CHECK(f128_zero_a == f128_zero_b); + CHECK(hash_value(f128_zero_a) == hash_value(f128_zero_b)); + CHECK(hash_value(bl::f128{ f128_zero_a }) == hash_value(bl::f128{ f128_zero_b })); + + const bl::f256_s f256_zero_a{ 0.0, -0.0, 0.0, -0.0 }; + const bl::f256_s f256_zero_b{ -0.0, 0.0, -0.0, 0.0 }; + CHECK(f256_zero_a == f256_zero_b); + CHECK(hash_value(f256_zero_a) == hash_value(f256_zero_b)); + CHECK(hash_value(bl::f256{ f256_zero_a }) == hash_value(bl::f256{ f256_zero_b })); + + const bl::f256_s base{ 1.0, 0.0, 0.0, 0.0 }; + CHECK(hash_value(base) != hash_value(bl::f256_s{ 1.0, 0x1p-80, 0.0, 0.0 })); + CHECK(hash_value(base) != hash_value(bl::f256_s{ 1.0, 0.0, 0x1p-160, 0.0 })); + CHECK(hash_value(base) != hash_value(bl::f256_s{ 1.0, 0.0, 0.0, 0x1p-240 })); + + const bl::f128_s base128{ 1.0, 0.0 }; + CHECK(hash_value(base128) != hash_value(bl::f128_s{ 1.0, 0x1p-80 })); + CHECK(hash_value(bl::f128{ base128 }) == hash_value(base128)); + CHECK(hash_value(bl::f256{ base }) == hash_value(base)); + + STATIC_CHECK(noexcept(std::hash{}(std::declval()))); + STATIC_CHECK(noexcept(std::hash{}(std::declval()))); + STATIC_CHECK(noexcept(std::hash{}(std::declval()))); + STATIC_CHECK(noexcept(std::hash{}(std::declval()))); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + + std::unordered_map f128_storage_values; + f128_storage_values.emplace(bl::f128_s{ 3.0, 0x1p-82 }, 128); + CHECK(f128_storage_values.at(bl::f128_s{ 3.0, 0x1p-82 }) == 128); + + std::unordered_map f128_values; + f128_values.emplace(bl::f128{ -3.0, 0x1p-82 }, "f128"); + CHECK(f128_values.at(bl::f128{ -3.0, 0x1p-82 }) == "f128"); + + std::unordered_set f256_storage_values; + f256_storage_values.emplace(5.0, 0x1p-80, -0x1p-160, 0x1p-240); + CHECK(f256_storage_values.contains( + bl::f256_s{ 5.0, 0x1p-80, -0x1p-160, 0x1p-240 })); + + std::unordered_set f256_values; + f256_values.emplace(-5.0, 0x1p-80, -0x1p-160, 0x1p-240); + CHECK(f256_values.contains( + bl::f256{ -5.0, 0x1p-80, -0x1p-160, 0x1p-240 })); + + check_special_value_hashes(); + check_special_value_hashes(); + check_special_value_hashes(); + check_special_value_hashes(); +} diff --git a/validation/tests/contracts/decimal.cpp b/validation/tests/contracts/decimal.cpp new file mode 100644 index 0000000..af4b16c --- /dev/null +++ b/validation/tests/contracts/decimal.cpp @@ -0,0 +1,110 @@ +#include + +#include +#include + +#include + +namespace +{ + using bl::detail::exact_decimal::biguint; + + void check_reciprocal_power5_table(int significand_bits) + { + using namespace bl::detail::exact_decimal; + + for (int exponent = 1; + exponent <= bl::detail::pow_tables::reciprocal_power5_max_exponent; + ++exponent) + { + const biguint denominator = pow5_big(exponent); + const auto& cached = + bl::detail::pow_tables::reciprocal_power5_table[exponent - 1]; + const biguint reciprocal = from_words( + cached.words, + bl::detail::pow_tables::reciprocal_power5_word_count); + + biguint reciprocal_predecessor = reciprocal; + reciprocal_predecessor.sub_small(1); + biguint binary_scale{ 1 }; + binary_scale.shl_bits(cached.binary_shift); + + const biguint rounded_product = mul_big(reciprocal, denominator); + const biguint predecessor_product = + mul_big(reciprocal_predecessor, denominator); + + CAPTURE(exponent, cached.binary_shift); + CHECK(rounded_product.compare(binary_scale) >= 0); + CHECK(predecessor_product.compare(binary_scale) < 0); + + biguint denominator_minus_one = denominator; + denominator_minus_one.sub_small(1); + biguint denominator_plus_one = denominator; + denominator_plus_one.add_small(1); + + biguint binary_boundary{ 1 }; + binary_boundary.shl_bits(1 + (exponent * 29) % 211); + biguint binary_boundary_minus_one = binary_boundary; + binary_boundary_minus_one.sub_small(1); + biguint binary_boundary_plus_one = binary_boundary; + binary_boundary_plus_one.add_small(1); + + biguint wide{ UINT64_C(0xfedcba9876543211) }; + wide.shl_bits((exponent * 17) % 157); + wide.add_small(static_cast(exponent)); + + const std::array numerators{ + biguint{ 1 }, + denominator_minus_one, + denominator, + denominator_plus_one, + binary_boundary_minus_one, + binary_boundary, + binary_boundary_plus_one, + wide + }; + + int reciprocal_cases = 0; + for (std::size_t sample = 0; sample < numerators.size(); ++sample) + { + const biguint& numerator = numerators[sample]; + const int ratio_exp = floor_log2_ratio(numerator, denominator); + + biguint reciprocal_result; + const bool used_reciprocal = + try_extract_rounded_significand_reciprocal( + numerator, + denominator, + exponent, + ratio_exp, + significand_bits, + reciprocal_result); + + biguint exact_numerator = numerator; + biguint exact_denominator = denominator; + const biguint exact_result = extract_rounded_significand_chunks( + exact_numerator, + exact_denominator, + ratio_exp, + significand_bits); + + CAPTURE(exponent, significand_bits, sample); + if (used_reciprocal) + { + ++reciprocal_cases; + CHECK(reciprocal_result.compare(exact_result) == 0); + } + } + + CAPTURE(exponent, significand_bits, reciprocal_cases); + CHECK(reciprocal_cases >= 4); + } + } +} + +TEST_CASE("cached reciprocal powers of five match exact quotient extraction", + "[contracts][io][decimal]") +{ + check_reciprocal_power5_table(159); + check_reciprocal_power5_table(265); +} diff --git a/validation/tests/contracts/dispatch.cpp b/validation/tests/contracts/dispatch.cpp new file mode 100644 index 0000000..ae0f91b --- /dev/null +++ b/validation/tests/contracts/dispatch.cpp @@ -0,0 +1,159 @@ +#include + +#include +#include +#include +#include + +#include + +enum class dispatch_mode +{ + subtract = 2, + add = 7, + COUNT = 8 +}; + +template<> +struct bl_enum_domain_traits + : bl_enum_domain_values +{}; + +static_assert(std::is_same_v< + bl_enum_type_map_t, + bl::f32>); +static_assert(std::is_same_v< + bl_enum_type_map_t, + bl::f64>); +static_assert(std::is_same_v< + bl_enum_type_map_t, + bl::f128>); +static_assert(std::is_same_v< + bl_enum_type_map_t, + bl::f256>); + +namespace +{ + template + int dispatch_probe(int value) + { + if constexpr (Add) + return value + bl::fltx_precision_rank_v; + return value - bl::fltx_precision_rank_v; + } + + template + int two_type_probe(int value) + { + constexpr int ranks = bl::fltx_precision_rank_v + bl::fltx_precision_rank_v; + return Add ? value + ranks : value - ranks; + } + + template + int mode_probe(int value) + { + constexpr int delta = Twice ? 2 : 1; + if constexpr (Mode == dispatch_mode::add) + return value + delta; + return value - delta; + } + + struct member_probe + { + template + int apply(int value) const + { + return dispatch_probe(value); + } + }; + + struct callable_probe + { + template + int operator()(int value) const + { + return dispatch_probe(value); + } + }; +} + +TEST_CASE("runtime float selection maps to the documented template type", "[contracts][dispatch]") +{ + const auto table = bl_dispatch_table(dispatch_probe, 10); + + CHECK(bl_table_invoke(table, bl_enum_type(bl::FloatType::F32), true) == 11); + CHECK(bl_table_invoke(table, bl_enum_type(bl::FloatType::F64), true) == 12); + CHECK(bl_table_invoke(table, bl_enum_type(bl::FloatType::F128), true) == 14); + CHECK(bl_table_invoke(table, bl_enum_type(bl::FloatType::F256), true) == 15); + CHECK(bl_table_invoke(table, bl_enum_type(bl::FloatType::F256), false) == 5); +} + +TEST_CASE("type tags, member functions, and callable objects share dispatch semantics", "[contracts][dispatch]") +{ + CHECK(bl_table_invoke( + bl_dispatch_table(dispatch_probe, 10), + bl_type, + true) == 14); + + CHECK(bl_table_invoke( + bl_dispatch_table(dispatch_probe, 10), + false) == 8); + + const member_probe object; + CHECK(bl_table_invoke( + bl_dispatch_table_memfn(object, member_probe::apply, 10), + bl_enum_type(bl::FloatType::F256), + true) == 15); + + const callable_probe callable; + CHECK(bl_table_invoke( + bl_dispatch_table_callable(callable, 10), + bl_type, + false) == 9); + + CHECK(bl_table_invoke( + bl_dispatch_table(two_type_probe, 10), + bl_enum_type(bl::FloatType::F128), + bl_enum_type(bl::FloatType::F64), + true) == 16); +} + +TEST_CASE("raw enum dispatch supports explicit sparse domains", "[contracts][dispatch]") +{ + STATIC_CHECK(bl_enum_domain_traits::size == 2); + STATIC_CHECK(bl_enum_domain_traits::index(dispatch_mode::subtract) == 0); + STATIC_CHECK(bl_enum_domain_traits::index(dispatch_mode::add) == 1); + STATIC_CHECK(bl_enum_domain_traits::value(0) == dispatch_mode::subtract); + STATIC_CHECK(bl_enum_domain_traits::value(1) == dispatch_mode::add); + + const auto table = bl_dispatch_table(mode_probe, 10); + CHECK(bl_table_invoke(table, dispatch_mode::subtract, false) == 9); + CHECK(bl_table_invoke(table, dispatch_mode::subtract, true) == 8); + CHECK(bl_table_invoke(table, dispatch_mode::add, false) == 11); + CHECK(bl_table_invoke(table, dispatch_mode::add, true) == 12); +} + +TEST_CASE("dispatch domain helpers report the actual table shape", "[contracts][dispatch]") +{ + const auto type = bl_enum_type(bl::FloatType::F128); + CHECK(bl_dispatch_arg_domain_size(type) == 4); + CHECK(bl_enum_type_domain_size(type) == 4); + CHECK(bl_dispatch_arg_domain_size(bl_type) == 1); + CHECK(bl_dispatch_arg_domain_size(dispatch_mode::add) == 2); + CHECK(bl_dispatch_table_variant_count(type, true) == 8); + CHECK(bl_table_variants_count(type, dispatch_mode::add, true) == 16); + CHECK(bl_dispatch_table_domain_sizes(type, true) == std::array{ 4, 2 }); + CHECK(bl_dispatch_table_domain_sizes( + bl_type, + type, + dispatch_mode::add, + true) == std::array{ 1, 4, 2, 2 }); + + const std::string report = bl_dispatch_table_report("probe", type, true); + CHECK(report.find("probe: 8 variants") != std::string::npos); + CHECK(report.find("arg[0] domain = 4") != std::string::npos); + CHECK(report.find("arg[1] domain = 2") != std::string::npos); + + const std::string default_label = bl_dispatch_table_report(nullptr, bl_type); + CHECK(default_label.find("dispatch: 1 variants") != std::string::npos); +} diff --git a/validation/tests/contracts/edge_cases.cpp b/validation/tests/contracts/edge_cases.cpp new file mode 100644 index 0000000..62f7fc6 --- /dev/null +++ b/validation/tests/contracts/edge_cases.cpp @@ -0,0 +1,215 @@ +#include + +#include "../../support/domains.hpp" + +#include +#include +#include + +#include + +TEST_CASE("large expansion limbs survive floor and truncation", "[contracts][edge-case]") +{ + const auto check_decimal_inputs = []() { + const T floor_input = bl::parse( + "4.6958550912494028428400315673292717414e+19"); + const T trunc_input = bl::parse( + "-1.5848854675958108400285213569604012722e+23"); + CHECK(bl::floor(floor_input) == bl::parse("46958550912494028428")); + CHECK(bl::trunc(trunc_input) == bl::parse("-158488546759581084002852")); + }; + + SECTION("f128") + { + check_decimal_inputs.template operator()(); + const bl::f128 value{ 0x1p+100, 0x1p+40 + 0.75 }; + CHECK(bl::floor(value) == bl::f128{ 0x1p+100, 0x1p+40 }); + CHECK(bl::trunc(-value) == bl::f128{ -0x1p+100, -0x1p+40 }); + } + + SECTION("f256") + { + check_decimal_inputs.template operator()(); + const bl::f256 value{ + 0x1p+100, 0x1p+40 + 0.75, 0x1p-20, -0x1p-80 + }; + const bl::f256 integral{ 0x1p+100, 0x1p+40, 0.0, 0.0 }; + CHECK(bl::floor(value) == integral); + CHECK(bl::trunc(-value) == -integral); + } +} + +TEST_CASE("fmod, remainder, and remquo preserve exact low-limb half ties", + "[contracts][edge-case][remainder]") +{ + SECTION("f128") + { + const bl::f128 half{ + 0x1.8000000000000p+0, 0x1.0000000000000p-60 + }; + const bl::f128 divisor{ + -0x1.8000000000000p+1, -0x1.0000000000000p-59 + }; + int quotient = 12345; + + CHECK(bl::fmod(half, divisor) == half); + CHECK(bl::remainder(half, divisor) == half); + CHECK(bl::remquo(half, divisor, "ient) == half); + CHECK(quotient == 0); + } + + SECTION("f256") + { + const bl::f256 half{ + 0x1.8000000000000p+0, + 0x1.0000000000000p-60, + -0x1.0000000000000p-113, + 0x1.0000000000000p-166 + }; + const bl::f256 divisor{ + -0x1.8000000000000p+1, + -0x1.0000000000000p-59, + 0x1.0000000000000p-112, + -0x1.0000000000000p-165 + }; + int quotient = 12345; + + CHECK(bl::fmod(half, divisor) == half); + CHECK(bl::remainder(half, divisor) == half); + CHECK(bl::remquo(half, divisor, "ient) == half); + CHECK(quotient == 0); + } +} + +TEST_CASE("remainder operations handle huge double-divisor quotients", + "[contracts][edge-case][remainder]") +{ + const auto check = [](const T& lhs, const T& rhs) { + const T expected{ 0.5 }; + int quotient = 0; + + CHECK(bl::fmod(lhs, rhs) == expected); + CHECK(bl::remainder(lhs, rhs) == expected); + CHECK(bl::remquo(lhs, rhs, "ient) == expected); + CHECK(quotient < 0); + CHECK((static_cast(-quotient) & 0x7u) == 1u); + }; + + const double large = std::nextafter(std::ldexp(1.0, 900), 0.0); + check(bl::f128{ large, 0.0 }, bl::f128{ -7.5, 0.0 }); + check( + bl::f256{ large, 0.0, 0.0, 0.0 }, + bl::f256{ -7.5, 0.0, 0.0, 0.0 }); +} + +TEST_CASE("nextafter crosses normal and subnormal boundaries", "[contracts][edge-case]") +{ + const bl::f128 minimum = std::numeric_limits::min(); + const bl::f128 below = bl::nextafter(minimum, bl::f128{ 0.0 }); + CHECK(below < minimum); + CHECK(bl::fpclassify(below) == FP_SUBNORMAL); + CHECK(bl::nextafter(below, minimum) == minimum); + + const bl::f256 zero{ 0.0 }; + const bl::f256 negative = bl::nextafter(zero, bl::f256{ -1.0 }); + CHECK(negative < zero); + CHECK(bl::signbit(negative)); +} + +TEST_CASE("cancellation corpus preserves values below a binary64 ulp", + "[contracts][support]") +{ + const auto domain = fltx::tests::domains::near_equal_cancellation(64); + std::set> unique; + std::size_t low_limb_values = 0; + for (const auto& value : domain.values) + { + unique.insert(value.limb); + if (value.limb[1] != 0.0) + ++low_limb_values; + } + + CHECK(unique.size() > 48); + CHECK(low_limb_values > 40); +} + +TEST_CASE("ternary accuracy domains are prefix-stable", + "[contracts][support]") +{ + const auto check_prefix = [](const auto& small, const auto& large) + { + REQUIRE(small.values.size() < large.values.size()); + for (std::size_t i = 0; i < small.values.size(); ++i) + { + CHECK(small.values[i].x.limb == large.values[i].x.limb); + CHECK(small.values[i].y.limb == large.values[i].y.limb); + CHECK(small.values[i].z.limb == large.values[i].z.limb); + } + }; + + check_prefix( + fltx::tests::domains::moderate_ternary(8), + fltx::tests::domains::moderate_ternary(16)); + check_prefix( + fltx::tests::domains::wide_exponent_ternary(8), + fltx::tests::domains::wide_exponent_ternary(16)); + + const auto cancellation = fltx::tests::domains::fma_cancellation(8); + check_prefix( + cancellation, + fltx::tests::domains::fma_cancellation(16)); + + CHECK(cancellation.values.front().x.limb == std::array{ + 0x1.000000000069dp+0, 0x1.aff8095000000p-54, 0.0, 0.0 + }); + CHECK(cancellation.values.front().y.limb == std::array{ + 0x1.0000000000001p+0, + 0x1.0000000000001p-55, + -0x1.0000000000001p-109, + 0x1.0000000000001p-163 + }); +} + +TEST_CASE("f128 fma handles an overflowing leading product", + "[contracts][edge-case][fma]") +{ + const bl::f128 huge{ 0x1p+1000 }; + const bl::f128 overflow = bl::fma(huge, huge, bl::f128{ 1.0 }); + CHECK(bl::isinf(overflow)); + CHECK_FALSE(bl::signbit(overflow)); + CHECK(overflow.lo == 0.0); + + const bl::f128 negative_overflow = bl::fma(-huge, huge, bl::f128{ -1.0 }); + CHECK(bl::isinf(negative_overflow)); + CHECK(bl::signbit(negative_overflow)); + CHECK(negative_overflow.lo == 0.0); + + const bl::f128 exact_power{ 0x1p+512 }; + const bl::f128 cancelled = bl::fma( + exact_power, + exact_power, + bl::f128{ -std::numeric_limits::max() }); + CHECK(cancelled == bl::f128{ 0x1p+971 }); +} + +TEST_CASE("f256 Payne-Hanek reduction preserves quadrants for deep expansions", + "[contracts][edge-case][trig]") +{ + const bl::f256 near_negative_29_pi{ + -91.106186954104004, + 1.2379612731767154e-18, + -1.1116010032489903e-35, + -6.0911710209670782e-52 + }; + CHECK(bl::sin(near_negative_29_pi) > bl::f256{ 0.0 }); + CHECK(bl::cos(near_negative_29_pi) < bl::f256{ 0.0 }); + + const bl::f256 above_25_pi_over_2{ + 39.269908169872416, + -2.4554834046605899e-16, + -3.385941079041688e-34, + -8.7933276384616772e-54 + }; + CHECK(bl::tan(above_25_pi_over_2) < bl::f256{ 0.0 }); + CHECK(bl::abs(bl::tan(above_25_pi_over_2)) > bl::f256{ 1.0e30 }); +} diff --git a/validation/tests/contracts/expressions.cpp b/validation/tests/contracts/expressions.cpp new file mode 100644 index 0000000..1b5c498 --- /dev/null +++ b/validation/tests/contracts/expressions.cpp @@ -0,0 +1,326 @@ +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace +{ + constexpr bl::f256 expression_x{ + 0x1.2000000000000p+0, + 0x1.09d8792fb4c49p-113, + 0x1.5a5ead789df78p-167, + 0x1.6227d7f2ceee1p-221 + }; + constexpr bl::f256 expression_y{ + -0x1.c000000000000p-1, + -0x1.09d8792fb4c49p-113, + -0x1.5a5ead789df78p-167, + -0x1.6227d7f2ceee1p-221 + }; + constexpr bl::f256 expression_c{ + 0x1.5555555555555p-2, + 0x1.5555555555555p-56, + 0x1.4a41a59e03228p-110, + -0x1.8e6e9c8fb13fap-164 + }; + + [[nodiscard]] auto delayed_expression() + { + const bl::f256 x = expression_x; + const bl::f256 y = expression_y; + const bl::f256 c = expression_c; + return x * x - y * y + c; + } + + [[nodiscard]] auto delayed_math_expression() + { + const bl::f256 value{ 1.3125, 0x1p-60, -0x1p-120, 0x1p-180 }; + return bl::log(value) - value; + } + + struct point + { + bl::f256_s x; + bl::f256_s y; + }; + + [[nodiscard]] auto delayed_storage_expression() + { + const point a{ + { 0.875, 0x1p-60, -0x1p-120, 0x1p-180 }, + { -1.125, -0x1p-60, 0x1p-120, -0x1p-180 } + }; + const point b{ + { 1.375, 0x1p-60, -0x1p-120, 0x1p-180 }, + { -1.625, -0x1p-60, 0x1p-120, -0x1p-180 } + }; + return ((a.x + a.y * 0.5) - (b.x / 3.0)) + + ((2.0 * b.y) - (a.x * b.y)) / (a.y + 1.25); + } + + void clobber_stack() + { + std::array values{}; + for (std::size_t i = 0; i < values.size(); ++i) + { + const double scale = static_cast(i + 1); + values[i] = { + scale, + std::ldexp(scale, -60), + -std::ldexp(scale, -120), + std::ldexp(scale, -180) + }; + } + + static volatile double sink = 0.0; + sink = values.back().x0 + values.back().x3; + } + + void require_same_limbs(const bl::f256& a, const bl::f256& b) + { + CHECK(a.x0 == b.x0); + CHECK(a.x1 == b.x1); + CHECK(a.x2 == b.x2); + CHECK(a.x3 == b.x3); + } + + struct expression_case + { + const char* name; + bl::f256 value; + const char* expected; + }; + + void check_expression_case(const expression_case& test) + { + const bl::f256 expected = bl::parse(test.expected); + bl::f256 scale = bl::abs(expected); + if (scale < bl::f256{ 1.0 }) + scale = bl::f256{ 1.0 }; + const bl::f256 tolerance = + scale * std::numeric_limits::epsilon() * 64.0; + + CAPTURE(test.name); + CHECK(bl::abs(test.value - expected) <= tolerance); + } +} + +using product_expression = std::remove_cvref_t() * std::declval())>; +static_assert(std::constructible_from); +static_assert(!std::constructible_from); +static_assert(!std::constructible_from); + +TEST_CASE("delayed f256 expressions own their operands", "[contracts][expressions]") +{ + auto expression = delayed_expression(); + clobber_stack(); + const bl::f256 delayed = std::move(expression); + auto direct_expression = delayed_expression(); + const bl::f256 directly_constructed{ std::move(direct_expression) }; + const bl::f256 independently_rounded{ + 0x1.aaaaaaaaaaaabp-1, + -0x1.5555555555555p-55, + -0x1.5290696780c8ap-109, + 0x1.8e6e9c8fb13fbp-165 + }; + require_same_limbs(delayed, independently_rounded); + require_same_limbs(directly_constructed, independently_rounded); +} + +TEST_CASE("delayed f256 expressions own math temporaries and storage members", + "[contracts][expressions]") +{ + auto math_expression = delayed_math_expression(); + auto storage_expression = delayed_storage_expression(); + clobber_stack(); + + const bl::f256 delayed_math = std::move(math_expression); + const bl::f256 delayed_storage = std::move(storage_expression); + + const bl::f256 math_input{ + 1.3125, 0x1p-60, -0x1p-120, 0x1p-180 + }; + const bl::f256 immediate_math = bl::log(math_input) - math_input; + require_same_limbs(delayed_math, immediate_math); + + const point a{ + { 0.875, 0x1p-60, -0x1p-120, 0x1p-180 }, + { -1.125, -0x1p-60, 0x1p-120, -0x1p-180 } + }; + const point b{ + { 1.375, 0x1p-60, -0x1p-120, 0x1p-180 }, + { -1.625, -0x1p-60, 0x1p-120, -0x1p-180 } + }; + const bl::f256 immediate_storage = + ((a.x + a.y * 0.5) - (b.x / 3.0)) + + ((2.0 * b.y) - (a.x * b.y)) / (a.y + 1.25); + require_same_limbs(delayed_storage, immediate_storage); +} + +TEST_CASE("f256 multiplication remains fused with a following subtraction", + "[contracts][expressions]") +{ + const bl::f256 rounded_product{ + -0x1.f800000000000p-1, + -0x1.09d8792fb4c49p-112, + -0x1.5a5ead789df78p-166, + -0x1.66781f7a94e69p-220 + }; + const bl::f256 independently_rounded_residual{ + 0x1.d529c8e2c2693p-274, + 0x1.f25380232caccp-328, + -0x1.9cd5b6c082469p-386, + -0x1.5eb53f5b41559p-441 + }; + + const bl::f256 residual = expression_x * expression_y - rounded_product; + const bl::f256 error = bl::abs(residual - independently_rounded_residual); + const bl::f256 tolerance = + bl::abs(independently_rounded_residual) * bl::f256{ 0x1p-50 }; + + CHECK(residual != bl::f256{ 0.0 }); + CHECK(error <= tolerance); +} + +TEST_CASE("f256 product expression shapes preserve mathematical value", + "[contracts][expressions][fusion]") +{ + const bl::f256 x = bl::parse( + "1.1250000000000000000000000000000001"); + const bl::f256 y = bl::parse( + "-0.8750000000000000000000000000000001"); + const bl::f256 a = bl::parse( + "0.3333333333333333333333333333333333"); + + auto xy0 = x * y; + auto xy1 = x * y; + const bl::f256 doubled = std::move(xy0) + std::move(xy1); + + auto xy2 = x * y; + auto xy3 = x * y; + const bl::f256 doubled_plus = + a + (std::move(xy2) + std::move(xy3)); + + auto xy4 = x * y; + auto xy5 = x * y; + const bl::f256 associated_plus = + (std::move(xy4) + a) + std::move(xy5); + + auto xy6 = x * y; + auto xy7 = x * y; + const bl::f256 associated_minus = + (std::move(xy6) - a) + std::move(xy7); + + auto xx0 = x * x; + auto yy0 = y * y; + const bl::f256 commuted_difference = + a + (std::move(xx0) - std::move(yy0)); + + auto xy8 = x * y; + auto xx1 = x * x; + auto yy1 = y * y; + const bl::f256 product_reassociated = + std::move(xy8) + (std::move(xx1) + std::move(yy1)); + + auto xx2 = x * x; + auto yy2 = y * y; + const bl::f256 product_plus_value_sub_product = + std::move(xx2) + (a - std::move(yy2)); + + auto xx3 = x * x; + auto yy3 = y * y; + const bl::f256 value_sub_product_plus_product = + (a - std::move(xx3)) + std::move(yy3); + + auto xx4 = x * x; + auto yy4 = y * y; + const bl::f256 product_minus_value_sub_product = + std::move(xx4) - (a - std::move(yy4)); + + const bl::f256 scaled_right_associated = + (x * 1.25) + (a + y * -0.75); + const bl::f256 scaled_value_sub_product = + (x * 1.25) + (a - y * 0.75); + const bl::f256 scaled_sub_associated = + (x * 1.25) - (a + y * 0.75); + const bl::f256 scaled_left_associated = + (a + x * 1.25) - (y * 0.75); + + const std::array cases{ + expression_case{ + "doubled product", doubled, + "-1.96875000000000000000000000000000040000000000000000000000000000000002" + }, + expression_case{ + "doubled product plus value", doubled_plus, + "-1.63541666666666666666666666666666710000000000000000000000000000000002" + }, + expression_case{ + "associated plus", associated_plus, + "-1.63541666666666666666666666666666710000000000000000000000000000000002" + }, + expression_case{ + "associated minus", associated_minus, + "-2.30208333333333333333333333333333370000000000000000000000000000000002" + }, + expression_case{ + "commuted difference", commuted_difference, + "0.83333333333333333333333333333333335000000000000000000000000000000000" + }, + expression_case{ + "product reassociated", product_reassociated, + "1.04687500000000000000000000000000020000000000000000000000000000000001" + }, + expression_case{ + "product plus value minus product", product_plus_value_sub_product, + "0.83333333333333333333333333333333335000000000000000000000000000000000" + }, + expression_case{ + "value minus product plus product", value_sub_product_plus_product, + "-0.16666666666666666666666666666666675000000000000000000000000000000000" + }, + expression_case{ + "product minus value minus product", product_minus_value_sub_product, + "1.69791666666666666666666666666666710000000000000000000000000000000002" + }, + expression_case{ + "scaled right associated", scaled_right_associated, + "2.395833333333333333333333333333333500" + }, + expression_case{ + "scaled value minus product", scaled_value_sub_product, + "2.395833333333333333333333333333333500" + }, + expression_case{ + "scaled subtraction associated", scaled_sub_associated, + "1.729166666666666666666666666666666900" + }, + expression_case{ + "scaled left associated", scaled_left_associated, + "2.395833333333333333333333333333333500" + } + }; + + for (const auto& test : cases) + check_expression_case(test); +} + +TEST_CASE("f256 storage assignment materializes a complete expression", "[contracts][expressions]") +{ + const bl::f256 x{ 1.125 }; + const bl::f256 y{ 0.875 }; + const bl::f256 value = x * x + y * y; + const bl::f256_s storage = value; + CHECK(storage.x0 == value.x0); + CHECK(storage.x1 == value.x1); + CHECK(storage.x2 == value.x2); + CHECK(storage.x3 == value.x3); +} diff --git a/validation/tests/contracts/io.cpp b/validation/tests/contracts/io.cpp new file mode 100644 index 0000000..c7d9be9 --- /dev/null +++ b/validation/tests/contracts/io.cpp @@ -0,0 +1,883 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "../../support/samples.hpp" + +namespace +{ + template + void check_parse_and_format() + { + constexpr std::array texts{ + "0", "-0", "1.25", "-3.75", "1e-20", "3.1415926535897932384626433832795" + }; + + for (const auto text : texts) + { + T parsed{}; + const auto result = bl::from_chars(text.data(), text.data() + text.size(), parsed); + REQUIRE(result.ec == std::errc{}); + REQUIRE(result.ptr == text.data() + text.size()); + + const std::string formatted = + bl::to_string(parsed, std::numeric_limits::max_digits10, std::ios_base::scientific); + CHECK(bl::parse(formatted) == parsed); + } + } + + template + void check_invalid_input_is_transactional() + { + for (const std::string_view text : { "", " ", ".", "+.", "e10", "--1" }) + { + T value{ 42.0 }; + const auto result = bl::from_chars(text.data(), text.data() + text.size(), value); + CAPTURE(text); + CHECK(result.ec == std::errc::invalid_argument); + CHECK(result.ptr == text.data()); + CHECK(value == T{ 42.0 }); + } + } + + enum class partial_token_kind + { + finite, + infinity, + nan + }; + + struct partial_token_case + { + std::string_view text; + std::size_t consumed; + partial_token_kind kind; + double finite_value = 0.0; + bool negative = false; + }; + + template + void check_partial_token_boundaries() + { + constexpr std::array cases{ + partial_token_case{ + "1.25tail", 4, partial_token_kind::finite, 1.25 + }, + partial_token_case{ + "1e+oops", 1, partial_token_kind::finite, 1.0 + }, + partial_token_case{ + "infinity;", 8, partial_token_kind::infinity + }, + partial_token_case{ + "-inf tail", 4, partial_token_kind::infinity, 0.0, true + }, + partial_token_case{ + "NaN(payload)", 3, partial_token_kind::nan + }, + partial_token_case{ + "nan rest", 3, partial_token_kind::nan + } + }; + + for (const auto& test : cases) + { + T value{}; + const auto result = bl::from_chars( + test.text.data(), test.text.data() + test.text.size(), value); + CAPTURE(test.text); + REQUIRE(result.ec == std::errc{}); + REQUIRE(result.ptr == test.text.data() + test.consumed); + + if (test.kind == partial_token_kind::finite) + CHECK(value == T{ test.finite_value }); + else if (test.kind == partial_token_kind::infinity) + { + CHECK(bl::isinf(value)); + CHECK(bl::signbit(value) == test.negative); + } + else + CHECK(bl::isnan(value)); + } + } + + template + void check_extreme_decimal_saturation() + { + constexpr std::string_view overflow = "1e100000000"; + T positive{}; + const auto overflow_result = bl::from_chars( + overflow.data(), overflow.data() + overflow.size(), positive); + REQUIRE(overflow_result.ec == std::errc{}); + REQUIRE(overflow_result.ptr == overflow.data() + overflow.size()); + CHECK(bl::isinf(positive)); + CHECK_FALSE(bl::signbit(positive)); + + constexpr std::string_view underflow = "-1e-100000000"; + T negative{ 1.0 }; + const auto underflow_result = bl::from_chars( + underflow.data(), underflow.data() + underflow.size(), negative); + REQUIRE(underflow_result.ec == std::errc{}); + REQUIRE(underflow_result.ptr == underflow.data() + underflow.size()); + CHECK(bl::iszero(negative)); + CHECK(bl::signbit(negative)); + } + + template + void check_public_conversion_surface() + { + const T original{ 1.25 }; + std::array buffer{}; + + const auto shortest = + bl::to_chars(buffer.data(), buffer.data() + buffer.size(), original); + REQUIRE(shortest.ec == std::errc{}); + + T restored{}; + const auto shortest_input = + bl::from_chars(buffer.data(), shortest.ptr, restored); + CHECK(shortest_input.ec == std::errc{}); + CHECK(shortest_input.ptr == shortest.ptr); + CHECK(restored == original); + + const auto general = bl::to_chars( + buffer.data(), + buffer.data() + buffer.size(), + original, + std::chars_format::general); + REQUIRE(general.ec == std::errc{}); + + const auto fixed = bl::to_chars( + buffer.data(), + buffer.data() + buffer.size(), + original, + std::chars_format::fixed, + 2); + REQUIRE(fixed.ec == std::errc{}); + const std::string_view fixed_text{ + buffer.data(), + static_cast(fixed.ptr - buffer.data()) + }; + CHECK(fixed_text == "1.25"); + + restored = T{}; + const auto fixed_input = + bl::from_chars(buffer.data(), fixed.ptr, restored, std::chars_format::fixed); + CHECK(fixed_input.ec == std::errc{}); + CHECK(fixed_input.ptr == fixed.ptr); + CHECK(restored == original); + + const auto parsed = bl::try_parse(fixed_text, std::chars_format::fixed); + REQUIRE(parsed); + CHECK(parsed.consumed == fixed_text.size()); + CHECK(parsed.value == original); + + restored = T{}; + CHECK(bl::try_parse(fixed_text, restored, std::chars_format::fixed)); + CHECK(restored == original); + CHECK(bl::parse(fixed_text, std::chars_format::fixed) == original); + CHECK(bl::parse("invalid", T{ 9.0 }) == T{ 9.0 }); + + const auto static_text = + bl::to_static_string(original, 2, std::ios_base::fixed); + CHECK(static_text.view() == fixed_text); + CHECK(bl::to_string(original, 2, std::ios_base::fixed) == fixed_text); + } + + template + void check_maximum_decimal_precision() + { + for (const T original : { + T{ std::numeric_limits::max() }, + T{ -std::numeric_limits::max() } }) + { + const std::string text = bl::to_string( + original, + std::numeric_limits::max_digits10, + std::ios_base::scientific); + const auto restored = bl::try_parse(text); + REQUIRE(restored); + REQUIRE(bl::isfinite(restored.value)); + + T magnitude = original; + if (magnitude < T{}) + magnitude = -magnitude; + + T difference = restored.value - original; + if (difference < T{}) + difference = -difference; + const T tolerance = + magnitude * std::numeric_limits::epsilon(); + CHECK(difference <= tolerance); + } + } + + [[nodiscard]] bool nonoverlapping(double high, double low) noexcept + { + if (low == 0.0) + return true; + return high != 0.0 && std::isfinite(high) && std::isfinite(low) && + high + low == high; + } + + [[nodiscard]] bool is_canonical(const bl::f128_s& value) noexcept + { + return nonoverlapping(value.hi, value.lo); + } + + [[nodiscard]] bool is_canonical(const bl::f256_s& value) noexcept + { + return nonoverlapping(value.x0, value.x1) && + nonoverlapping(value.x1, value.x2) && + nonoverlapping(value.x2, value.x3); + } + + [[nodiscard]] bool same_encoding(double lhs, double rhs) noexcept + { + return std::bit_cast(lhs) == + std::bit_cast(rhs); + } + + [[nodiscard]] bool same_tail_encoding(double lhs, double rhs) noexcept + { + return (lhs == 0.0 && rhs == 0.0) || same_encoding(lhs, rhs); + } + + [[nodiscard]] bool same_encoding( + const bl::f128_s& lhs, + const bl::f128_s& rhs) noexcept + { + return same_encoding(lhs.hi, rhs.hi) && + same_tail_encoding(lhs.lo, rhs.lo); + } + + [[nodiscard]] bool same_encoding( + const bl::f256_s& lhs, + const bl::f256_s& rhs) noexcept + { + return same_encoding(lhs.x0, rhs.x0) && + same_tail_encoding(lhs.x1, rhs.x1) && + same_tail_encoding(lhs.x2, rhs.x2) && + same_tail_encoding(lhs.x3, rhs.x3); + } + + [[nodiscard]] std::string raw_limbs(const bl::f128_s& value) + { + std::ostringstream out; + out << std::hexfloat << value.hi << ", " << value.lo; + return out.str(); + } + + [[nodiscard]] std::string raw_limbs(const bl::f256_s& value) + { + std::ostringstream out; + out << std::hexfloat + << value.x0 << ", " << value.x1 << ", " + << value.x2 << ", " << value.x3; + return out.str(); + } + + [[nodiscard]] double random_limb( + fltx::tests::random_bits& random, + int exponent) + { + const double magnitude = std::ldexp(1.0 + random.unit(), exponent); + return std::copysign( + magnitude, + (random.next() & 1u) != 0 ? -1.0 : 1.0); + } + + [[nodiscard]] bl::f128 canonical_f128( + fltx::tests::random_bits& random, + int sample) + { + static constexpr std::array boundaries{ + bl::f128{ 0.0, 0.0 }, + bl::f128{ -0.0, 0.0 }, + bl::f128{ std::numeric_limits::denorm_min(), 0.0 }, + bl::f128{ -std::numeric_limits::denorm_min(), 0.0 }, + bl::f128{ std::numeric_limits::min(), 0.0 }, + bl::f128{ -std::numeric_limits::min(), 0.0 }, + bl::f128{ 1.0, 0x1p-55 }, + bl::f128{ 1.0, -0x1p-55 }, + bl::f128{ -1.0, 0x1p-55 }, + bl::f128{ -1.0, -0x1p-55 }, + bl::f128{ 0x1p-900, 0x1p-955 }, + bl::f128{ -0x1p-900, -0x1p-955 }, + bl::f128{ 0x1p+900, 0x1p+845 }, + bl::f128{ -0x1p+900, -0x1p+845 }, + }; + + if (sample < static_cast(boundaries.size())) + return boundaries[static_cast(sample)]; + + const int exponent = static_cast(random.next() % 1'701u) - 850; + return { + random_limb(random, exponent), + random_limb(random, exponent - 56) + }; + } + + [[nodiscard]] bl::f256 canonical_f256( + fltx::tests::random_bits& random, + int sample) + { + static constexpr std::array boundaries{ + bl::f256{ 0.0, 0.0, 0.0, 0.0 }, + bl::f256{ -0.0, 0.0, 0.0, 0.0 }, + bl::f256{ std::numeric_limits::denorm_min(), 0.0, 0.0, 0.0 }, + bl::f256{ -std::numeric_limits::denorm_min(), 0.0, 0.0, 0.0 }, + bl::f256{ std::numeric_limits::min(), 0.0, 0.0, 0.0 }, + bl::f256{ -std::numeric_limits::min(), 0.0, 0.0, 0.0 }, + bl::f256{ 1.0, 0x1p-55, -0x1p-110, 0x1p-165 }, + bl::f256{ 1.0, -0x1p-55, 0x1p-110, -0x1p-165 }, + bl::f256{ -1.0, 0x1p-55, -0x1p-110, 0x1p-165 }, + bl::f256{ -1.0, -0x1p-55, 0x1p-110, -0x1p-165 }, + bl::f256{ 0x1p-800, 0x1p-855, -0x1p-910, 0x1p-965 }, + bl::f256{ -0x1p-800, -0x1p-855, 0x1p-910, -0x1p-965 }, + bl::f256{ 0x1p+800, 0x1p+745, -0x1p+690, 0x1p+635 }, + bl::f256{ -0x1p+800, -0x1p+745, 0x1p+690, -0x1p+635 }, + }; + + if (sample < static_cast(boundaries.size())) + return boundaries[static_cast(sample)]; + + const int exponent = static_cast(random.next() % 1'701u) - 850; + return { + random_limb(random, exponent), + random_limb(random, exponent - 56), + random_limb(random, exponent - 112), + random_limb(random, exponent - 168) + }; + } + + template + void check_deterministic_round_trips( + std::uint64_t seed, + T (*make_value)(fltx::tests::random_bits&, int)) + { + constexpr int sample_count = 10'000; + constexpr int expansion_round_trip_digits = + std::is_same_v ? 67 : 33; + fltx::tests::random_bits random{ seed }; + + for (int sample = 0; sample < sample_count; ++sample) + { + const T original = make_value(random, sample); + if (!is_canonical(original)) + { + CAPTURE(seed, sample); + FAIL("raw-limb round-trip input is not canonical"); + } + + const std::string text = bl::to_string( + original, + expansion_round_trip_digits, + std::ios_base::scientific); + const auto restored = bl::try_parse(text); + + if (!restored) + { + const std::string original_limbs = raw_limbs(original); + const std::string restored_limbs = "parse failed"; + CAPTURE(seed, sample, original_limbs, text, restored_limbs); + CHECK(restored); + } + else if (!same_encoding(restored.value, original)) + { + const std::string original_limbs = raw_limbs(original); + const std::string restored_limbs = raw_limbs(restored.value); + CAPTURE(seed, sample, original_limbs, text, restored_limbs); + CHECK(same_encoding(restored.value, original)); + } + } + + SUCCEED("10,000 deterministic values round-tripped exactly"); + } + + template + [[nodiscard]] T nominal_round_trip_value( + fltx::tests::random_bits& random, + int sample) + { + const T zero{}; + const T one{ 1.0 }; + const T two{ 2.0 }; + static const std::array boundaries{ + zero, + T{ -0.0 }, + T{ std::numeric_limits::denorm_min() }, + T{ -std::numeric_limits::denorm_min() }, + T{ std::numeric_limits::min() }, + T{ -std::numeric_limits::min() }, + one, + T{ -one }, + bl::nextafter(one, two), + bl::nextafter(one, zero), + bl::nextafter(T{ 8.0 }, T{ 16.0 }), + bl::nextafter(T{ 8.0 }, zero), + std::numeric_limits::max(), + std::numeric_limits::lowest(), + }; + + if (sample < static_cast(boundaries.size())) + return boundaries[static_cast(sample)]; + + const int exponent = static_cast(random.next() % 1'701u) - 850; + T value{ random_limb(random, exponent) }; + const T target = (random.next() & 1u) != 0 + ? std::numeric_limits::infinity() + : -std::numeric_limits::infinity(); + const int steps = static_cast(random.next() % 17u); + for (int step = 0; step < steps; ++step) + value = bl::nextafter(value, target); + return value; + } + + template + void check_nominal_default_round_trips(std::uint64_t seed) + { + constexpr int sample_count = 10'000; + fltx::tests::random_bits random{ seed }; + + for (int sample = 0; sample < sample_count; ++sample) + { + const T original = nominal_round_trip_value(random, sample); + REQUIRE(is_canonical(original)); + + const std::string dynamic_text = bl::to_string(original); + const auto static_text = bl::to_static_string(original); + std::array chars{}; + const auto chars_result = + bl::to_chars(chars.data(), chars.data() + chars.size(), original); + REQUIRE(chars_result.ec == std::errc{}); + const std::string_view chars_text{ + chars.data(), + static_cast(chars_result.ptr - chars.data()) + }; + + CAPTURE(seed, sample, dynamic_text, raw_limbs(original)); + CHECK(static_text.view() == dynamic_text); + CHECK(chars_text == dynamic_text); +#if FLTX_HAS_STD_FORMAT + CHECK(std::format("{}", original) == dynamic_text); +#endif + + const auto restored = bl::try_parse(dynamic_text); + REQUIRE(restored); + CAPTURE(raw_limbs(restored.value)); + CHECK(bl::to_string(restored.value) == dynamic_text); + + T difference = restored.value - original; + if (difference < T{}) + difference = -difference; + const T neighbor = bl::nextafter(original, restored.value); + T nominal_step = neighbor - original; + if (nominal_step < T{}) + nominal_step = -nominal_step; + const T half_step{ nominal_step * T{ 0.5 } }; + CHECK(difference <= half_step); + } + } +} + +TEST_CASE("parse, format, and stream round trips preserve values", "[contracts][io]") +{ + check_parse_and_format(); + check_parse_and_format(); + check_parse_and_format(); + check_parse_and_format(); + check_maximum_decimal_precision(); + check_maximum_decimal_precision(); + + const bl::f128 dd = bl::parse("1.00000000000000000000000000000001"); + const bl::f256 qd = bl::parse( + "1.000000000000000000000000000000000000000000000000000000000000001"); + const std::string dd_text = bl::to_string(dd, 33, std::ios_base::scientific); + const std::string qd_text = bl::to_string(qd, 67, std::ios_base::scientific); + CHECK(bl::parse(dd_text) == dd); + CHECK(bl::parse(qd_text) == qd); + CHECK(bl::to_string(dd) == bl::to_string( + dd, std::numeric_limits::max_digits10)); + CHECK(bl::to_string(qd) == bl::to_string( + qd, std::numeric_limits::max_digits10)); + CHECK(bl::to_static_string(dd).view() == + bl::to_static_string(dd, 33).view()); + CHECK(bl::to_static_string(qd).view() == + bl::to_static_string(qd, 65).view()); + + std::stringstream stream; + stream << std::scientific << std::setprecision(67) << qd; + bl::f256 restored{}; + stream >> restored; + CHECK(restored == qd); + + const bl::f128_s dd_storage = + bl::parse("1.00000000000000000000000000000001"); + const bl::f256_s qd_storage = bl::parse( + "1.000000000000000000000000000000000000000000000000000000000000001"); + CHECK(dd_storage.lo != 0.0); + CHECK((qd_storage.x1 != 0.0 || qd_storage.x2 != 0.0 || qd_storage.x3 != 0.0)); + + std::stringstream storage_stream; + storage_stream + << std::scientific + << std::setprecision(std::numeric_limits::max_digits10) + << dd_storage + << ' ' + << std::setprecision(67) + << qd_storage; + bl::f128_s restored_dd_storage{}; + bl::f256_s restored_qd_storage{}; + storage_stream >> restored_dd_storage >> restored_qd_storage; + CHECK(restored_dd_storage == dd_storage); + CHECK(restored_qd_storage == qd_storage); +} + +TEST_CASE("parsing reports partial and invalid input without hidden overwrite", "[contracts][io]") +{ + check_invalid_input_is_transactional(); + check_invalid_input_is_transactional(); + check_invalid_input_is_transactional(); + check_invalid_input_is_transactional(); + + constexpr std::string_view partial = "1.25tail"; + bl::f128 value{}; + const auto result = bl::from_chars(partial.data(), partial.data() + partial.size(), value); + CHECK(result.ec == std::errc{}); + CHECK(result.ptr == partial.data() + 4); + CHECK(value == bl::f128{ 1.25 }); + + std::istringstream stream{ "1.25tail" }; + bl::f128 unchanged{ 42.0 }; + CHECK_FALSE(static_cast(stream >> unchanged)); + CHECK(unchanged == bl::f128{ 42.0 }); +} + +TEST_CASE("from_chars preserves partial token boundaries", + "[contracts][io][charconv]") +{ + check_partial_token_boundaries(); + check_partial_token_boundaries(); +} + +TEST_CASE("I/O preserves signed zero and special values", "[contracts][io][special]") +{ + const auto inf = std::numeric_limits::infinity(); + const auto nan = std::numeric_limits::quiet_NaN(); + + CHECK(bl::to_string(inf) == "inf"); + CHECK(bl::to_string(-inf) == "-inf"); + CHECK(bl::to_string(nan) == "nan"); + CHECK(bl::isinf(bl::parse("inf"))); + CHECK(bl::isnan(bl::parse("nan"))); + + const auto negative_zero = bl::parse("-0"); + CHECK(bl::iszero(negative_zero)); + CHECK(bl::signbit(negative_zero)); + CHECK(bl::to_string(negative_zero, 3, std::ios_base::fixed) == "-0.000"); +} + +TEST_CASE("literals retain digits beyond binary64", "[contracts][io][literal]") +{ + using namespace bl::literals; + + constexpr bl::f128 dd = "1.00000000000000000000000000000001"_dd; + constexpr bl::f256 qd = + "1.000000000000000000000000000000000000000000000000000000000000001"_qd; + + STATIC_CHECK(dd > bl::f128{ 1.0 }); + STATIC_CHECK(qd > bl::f256{ 1.0 }); + STATIC_CHECK(0x1.4p+0_dd == bl::f128{ 1.25 }); + STATIC_CHECK(0x1.4p+0_qd == bl::f256{ 1.25 }); +} + +TEST_CASE("extended parsing preserves hexadecimal precision and range semantics", + "[contracts][io][charconv]") +{ + using namespace bl::literals; + + STATIC_CHECK("0X1.8P+2"_dd == bl::f128{ 6.0 }); + STATIC_CHECK("0X1.8P+2"_qd == bl::f256{ 6.0 }); + STATIC_CHECK( + bl::parse("+0X1.4P+0") == bl::f256{ 1.25 }); + + std::string half_hex = "1."; + half_hex.append(52, '0'); + half_hex += "1p+0"; + const bl::f256 half_low_bit = + bl::f256{ 1.0 } + bl::ldexp(bl::f256{ 1.0 }, -212); + CHECK(bl::parse(half_hex, std::chars_format::hex) == + half_low_bit); + + std::string above_half_hex = "1."; + above_half_hex.append(52, '0'); + above_half_hex += '1'; + above_half_hex.append(200, '0'); + above_half_hex += "1p+0"; + CHECK(bl::parse(above_half_hex, std::chars_format::hex) == + half_low_bit); + + check_extreme_decimal_saturation(); + check_extreme_decimal_saturation(); +} + +TEST_CASE("charconv-shaped helpers expose buffers, errors, and complete parsing", "[contracts][io][charconv]") +{ + check_public_conversion_surface(); + check_public_conversion_surface(); + check_public_conversion_surface(); + check_public_conversion_surface(); + check_public_conversion_surface(); + check_public_conversion_surface(); + + std::array buffer{}; + const auto written = bl::to_chars( + buffer.data(), + buffer.data() + buffer.size(), + bl::f128{ 1.25 }, + std::chars_format::fixed, + 3); + REQUIRE(written.ec == std::errc{}); + CHECK(std::string(buffer.data(), written.ptr) == "1.250"); + + const auto parsed = bl::try_parse("1.25"); + REQUIRE(parsed); + CHECK(parsed.consumed == 4); + CHECK(parsed.value == bl::f256{ 1.25 }); + + bl::f128 unchanged{ 7.0 }; + CHECK_FALSE(bl::try_parse("1.25tail", unchanged)); + CHECK(unchanged == bl::f128{ 7.0 }); + CHECK_THROWS_AS(bl::parse("not-a-number"), std::invalid_argument); + + for (const auto format : { + std::chars_format::general, + std::chars_format::fixed, + std::chars_format::scientific, + std::chars_format::hex }) + { + std::array text{}; + const bl::f256 original{ 1.25 }; + const auto encoded = + bl::to_chars(text.data(), text.data() + text.size(), original, format, 12); + REQUIRE(encoded.ec == std::errc{}); + + bl::f256_s decoded{}; + const auto decoded_result = + bl::from_chars(text.data(), encoded.ptr, decoded, format); + CAPTURE(static_cast(format)); + CHECK(decoded_result.ec == std::errc{}); + CHECK(decoded_result.ptr == encoded.ptr); + CHECK(decoded == original); + } + + std::array too_small{}; + const auto overflow = bl::to_chars( + too_small.data(), + too_small.data() + too_small.size(), + bl::f128_s{ 123.0, 0.0 }); + CHECK(overflow.ec == std::errc::value_too_large); + CHECK(overflow.ptr == too_small.data() + too_small.size()); + + constexpr std::string_view oversized_native = "1e10000"; + const auto out_of_range = bl::try_parse(oversized_native); + CHECK_FALSE(out_of_range); + CHECK(out_of_range.ec == std::errc::result_out_of_range); + + bl::f32 unchanged_native = 7.0f; + const auto native_range_result = bl::from_chars( + oversized_native.data(), + oversized_native.data() + oversized_native.size(), + unchanged_native); + CHECK(native_range_result.ptr == + oversized_native.data() + oversized_native.size()); + CHECK(native_range_result.ec == std::errc::result_out_of_range); + CHECK(unchanged_native == 7.0f); + + CHECK(bl::parse("0x1.8p+1") == 3.0); + CHECK(bl::parse("+1.25") == bl::f128{ 1.25 }); + + static_assert(std::is_same_v< + decltype(bl::to_static_string(bl::f32{})), + bl::f32_io_string>); + static_assert(std::is_same_v< + decltype(bl::to_static_string(bl::f64{})), + bl::f64_io_string>); + static_assert(std::is_same_v< + decltype(bl::to_static_string(bl::f128{})), + bl::f128_io_string>); + static_assert(std::is_same_v< + decltype(bl::to_static_string(bl::f256{})), + bl::f256_io_string>); +} + +TEST_CASE("fixed-capacity strings provide a conventional constexpr string surface", + "[contracts][io][static-string]") +{ + constexpr auto built = [] { + bl::static_string<16> value{ "ab" }; + value.push_back('c'); + value.append(2, 'd'); + value.insert(1, "XY"); + value.insert(value.size(), 1, '!'); + return value; + }(); + + STATIC_CHECK(built.view() == "aXYbcdd!"); + STATIC_CHECK(built.size() == 8); + STATIC_CHECK(!built.empty()); + STATIC_CHECK(built.front() == 'a'); + STATIC_CHECK(built[3] == 'b'); + STATIC_CHECK(built.end() - built.begin() == 8); + STATIC_CHECK(bl::static_string<16>::static_capacity == 16); + + bl::static_string<8> runtime{ std::string_view{ "one" } }; + runtime = "two"; + CHECK(std::string(runtime) == "two"); + CHECK(std::string_view(runtime.data(), runtime.size()) == "two"); + CHECK(std::string_view(runtime.c_str()) == "two"); + runtime.resize(5); + CHECK(runtime.size() == 5); + runtime.clear(); + CHECK(runtime.empty()); + CHECK(runtime.c_str()[0] == '\0'); + CHECK_THROWS(runtime.insert(1, "x")); + CHECK_THROWS(runtime.assign("123456789")); + + CHECK( + bl::to_string( + 1.23456789, + bl::precision_info{ 8, 2, 2 }, + std::ios_base::fixed) == + "1.23...89"); +} + +TEST_CASE("deterministic high-volume extended round trips preserve every value", + "[contracts][io][roundtrip]") +{ + SECTION("f128") + { + check_deterministic_round_trips( + 0x1020304050607080ull, + canonical_f128); + } + + SECTION("f256") + { + check_deterministic_round_trips( + 0x8070605040302010ull, + canonical_f256); + } +} + +TEST_CASE("default decimal output round trips the nominal value model", + "[contracts][io][roundtrip][nominal]") +{ + SECTION("f128") + { + check_nominal_default_round_trips( + 0x6d2b79f5a4c381e0ull); + } + + SECTION("f256") + { + check_nominal_default_round_trips( + 0x91e73ac46b5d280full); + } +} + +#if FLTX_HAS_STD_FORMAT +TEST_CASE("std format integration supports familiar numeric specifications", "[contracts][io][format]") +{ + CHECK(std::format("{}", bl::f128{ 1.25 }) == "1.25"); + CHECK(std::format("{:.4g}", bl::f128{ 1.25 }) == "1.25"); + CHECK(std::format("{:.3f}", bl::f128{ 1.25 }) == "1.250"); + CHECK(std::format("{:.2f}", bl::f128_s{ 2.5, 0.0 }) == "2.50"); + CHECK(std::format("{:.2f}", bl::f256_s{ 2.5, 0.0, 0.0, 0.0 }) == "2.50"); + CHECK(std::format("{:+.2e}", bl::f256{ 1.5 }) == "+1.50e+00"); + CHECK(std::format("{:+.2E}", bl::f256{ 1.5 }) == "+1.50E+00"); + CHECK(std::format("{: .2f}", bl::f128{ 1.25 }) == " 1.25"); + CHECK(std::format("{: .2f}", bl::f128{ -1.25 }) == "-1.25"); + CHECK(std::format("{:+08.2f}", bl::f128{ 1.25 }) == "+0001.25"); + CHECK(std::format("{:08.2f}", bl::f128{ -1.25 }) == "-0001.25"); + CHECK(std::format("{:>8.2f}", bl::f128{ 1.25 }) == " 1.25"); + CHECK(std::format("{:<8.2f}", bl::f128{ 1.25 }) == "1.25 "); + CHECK(std::format("{:*^8.2f}", bl::f128{ 1.25 }) == "**1.25**"); + CHECK(std::format("{:#.0f}", bl::f128{ 1.0 }) == "1."); + CHECK(std::format("{:#.3g}", bl::f128{ 1.0 }) == "1.00"); + CHECK(std::format("{:a}", bl::f128{ 1.25 }) == "0x1.4p+0"); + CHECK(std::format("{:.2a}", bl::f128{ 1.25 }) == "0x1.40p+0"); + CHECK(std::format("{:+#.0A}", bl::f256{ 1.0 }) == "+0X1.P+0"); + CHECK(std::format("{:>12.1a}", bl::f128{ 1.25 }) == " 0x1.4p+0"); + CHECK(std::format("{:.2F}", std::numeric_limits::infinity()) == "INF"); + CHECK(std::format("{:+.2F}", std::numeric_limits::quiet_NaN()) == "+NAN"); + CHECK(std::format("{:+A}", std::numeric_limits::infinity()) == "+INF"); + + #if !defined(__EMSCRIPTEN__) + const bl::f128 invalid_format_value{ 1.0 }; + CHECK_THROWS_AS( + std::vformat("{:x}", std::make_format_args(invalid_format_value)), + std::format_error); + #endif +} + +TEST_CASE("std format integration preserves long precision and padding", + "[contracts][io][format]") +{ + const bl::f256 pi = std::numbers::pi_v; + + const std::string fixed60 = std::format("{:.60f}", pi); + CHECK(fixed60.size() == 62u); + CHECK(fixed60.find('.') == 1u); + CHECK(fixed60.starts_with( + "3.14159265358979323846264338327950288419716939937510")); + + const std::string scientific55 = std::format("{:.55e}", pi); + CHECK(scientific55.size() == 61u); + CHECK(scientific55.starts_with( + "3.14159265358979323846264338327950288419716939937510")); + CHECK(scientific55.ends_with("e+00")); + + const std::string general64 = std::format("{:.64g}", pi); + CHECK(general64.size() == 65u); + CHECK(general64.find('.') == 1u); + CHECK(general64.starts_with( + "3.14159265358979323846264338327950288419716939937510")); + CHECK(general64.back() != '0'); + + const std::string right80 = std::format("{:>80.60f}", pi); + CHECK(right80.size() == 80u); + CHECK(right80 == std::string(80u - fixed60.size(), ' ') + fixed60); + + const std::string left76 = std::format("{:_<76.60f}", pi); + CHECK(left76.size() == 76u); + CHECK(left76 == fixed60 + std::string(76u - fixed60.size(), '_')); + + const std::string centered67 = std::format("{:*^67.60f}", pi); + CHECK(centered67.size() == 67u); + CHECK(centered67 == std::string(2u, '*') + fixed60 + std::string(3u, '*')); + + CHECK(std::format("{:.10g}", bl::f256{ 1.25 }) == "1.25"); + CHECK(std::format("{:#.10g}", bl::f256{ 1.25 }) == "1.250000000"); + CHECK(std::format("{:.0f}", pi) == "3"); + CHECK(std::format("{:#.0f}", pi) == "3."); +} +#endif diff --git a/validation/tests/contracts/math.cpp b/validation/tests/contracts/math.cpp new file mode 100644 index 0000000..2624538 --- /dev/null +++ b/validation/tests/contracts/math.cpp @@ -0,0 +1,886 @@ +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace +{ + [[nodiscard]] bool nonoverlapping(double high, double low) noexcept + { + if (low == 0.0) + return true; + if (high == 0.0 || !std::isfinite(high) || !std::isfinite(low)) + return false; + return high + low == high; + } + + [[nodiscard]] bool is_canonical(const bl::f128_s& value) noexcept + { + return nonoverlapping(value.hi, value.lo); + } + + [[nodiscard]] bool is_canonical(const bl::f256_s& value) noexcept + { + return nonoverlapping(value.x0, value.x1) && + nonoverlapping(value.x1, value.x2) && + nonoverlapping(value.x2, value.x3); + } + + template + void check_canonical(std::string_view operation, const T& value) + { + INFO("operation: " << operation); + CHECK(is_canonical(value)); + } + + template + [[nodiscard]] T expansion(double leading, double trailing) + { + if constexpr (std::is_same_v) + return T{ leading, trailing }; + else + return T{ leading, trailing, 0.0, 0.0 }; + } + + template + constexpr bool nominal_nextafter_contract() + { + constexpr T zero{ 0.0 }; + constexpr T one{ 1.0 }; + constexpr T two{ 2.0 }; + constexpr T eight{ 8.0 }; + constexpr T epsilon = std::numeric_limits::epsilon(); + + const T above_one = bl::nextafter(one, two); + const T below_one = bl::nextafter(one, zero); + const T above_eight = bl::nextafter(eight, T{ 16.0 }); + const T below_eight = bl::nextafter(eight, zero); + + if constexpr (std::is_same_v) + { + if (above_one != T{ 1.0, 0x1p-105 } || + below_one != T{ 1.0, -0x1p-106 } || + above_eight != T{ 8.0, 0x1p-102 } || + below_eight != T{ 8.0, -0x1p-103 } || + bl::nextafter(T{ -1.0 }, zero) != T{ -1.0, 0x1p-106 } || + bl::nextafter(T{ -1.0 }, T{ -2.0 }) != T{ -1.0, -0x1p-105 }) + { + return false; + } + } + else + { + if (above_one != T{ 1.0, 0x1p-211, 0.0, 0.0 } || + below_one != T{ 1.0, -0x1p-212, 0.0, 0.0 } || + above_eight != T{ 8.0, 0x1p-208, 0.0, 0.0 } || + below_eight != T{ 8.0, -0x1p-209, 0.0, 0.0 } || + bl::nextafter(T{ -1.0 }, zero) != T{ -1.0, 0x1p-212, 0.0, 0.0 } || + bl::nextafter(T{ -1.0 }, T{ -2.0 }) != T{ -1.0, -0x1p-211, 0.0, 0.0 }) + { + return false; + } + } + + return above_one - one == epsilon && + bl::nextafter(above_one, zero) == one && + bl::nextafter(below_one, two) == one; + } + + template + void check_exact_math() + { + CHECK(bl::abs(T{ -2.0 }) == T{ 2.0 }); + CHECK(bl::fabs(T{ -2.0 }) == T{ 2.0 }); + CHECK_FALSE(bl::signbit(bl::fabs(T{ -0.0 }))); + CHECK(bl::sqr(T{ -3.0 }) == T{ 9.0 }); + CHECK(bl::recip(T{ 4.0 }) == T{ 0.25 }); + CHECK(bl::sqrt(T{ 4.0 }) == T{ 2.0 }); + CHECK(bl::cbrt(T{ 8.0 }) == T{ 2.0 }); + CHECK(bl::hypot(T{ 3.0 }, T{ 4.0 }) == T{ 5.0 }); + CHECK(bl::pow(T{ 2.0 }, 10) == T{ 1024.0 }); + CHECK(bl::fma(T{ 2.0 }, T{ 3.0 }, T{ 4.0 }) == T{ 10.0 }); + CHECK(bl::fmin(T{ 2.0 }, T{ 3.0 }) == T{ 2.0 }); + CHECK(bl::fmax(T{ 2.0 }, T{ 3.0 }) == T{ 3.0 }); + CHECK(bl::fdim(T{ 2.0 }, T{ 3.0 }) == T{ 0.0 }); + CHECK(bl::copysign(T{ 2.0 }, T{ -1.0 }) == T{ -2.0 }); + CHECK(bl::clamp(T{ 3.0 }, T{ -1.0 }, T{ 2.0 }) == T{ 2.0 }); + } + + template + void check_decomposition() + { + T integral{}; + int exponent = 0; + int quotient = 0; + + CHECK(bl::modf(T{ 3.25 }, &integral) == T{ 0.25 }); + CHECK(integral == T{ 3.0 }); + CHECK(bl::frexp(T{ 8.0 }, &exponent) == T{ 0.5 }); + CHECK(exponent == 4); + CHECK(bl::ldexp(T{ 0.5 }, 4) == T{ 8.0 }); + CHECK(bl::scalbn(T{ 0.5 }, 4) == T{ 8.0 }); + CHECK(bl::scalbln(T{ 0.5 }, 4L) == T{ 8.0 }); + CHECK(bl::logb(T{ 8.0 }) == T{ 3.0 }); + CHECK(bl::ilogb(T{ 8.0 }) == 3); + CHECK(bl::fmod(T{ 5.5 }, T{ 2.0 }) == T{ 1.5 }); + CHECK(bl::remainder(T{ 5.0 }, T{ 2.0 }) == T{ 1.0 }); + CHECK(bl::remquo(T{ 5.0 }, T{ 2.0 }, "ient) == T{ 1.0 }); + CHECK((quotient & 1) == 0); + + const T one{ 1.0 }; + const T next = bl::nextafter(one, T{ 2.0 }); + CHECK(next > one); + CHECK(bl::nextafter(next, T{ 0.0 }) == one); + CHECK(bl::nexttoward(one, T{ 2.0 }) == next); + CHECK(bl::nexttoward(one, 2.0L) == next); + } + + template + void check_sincos() + { + const T input{ 0.375 }; + T sine{}; + T cosine{}; + const bool ok = bl::sincos(input, sine, cosine); + const auto result = bl::sincos(input); + + CHECK(ok); + CHECK(result.ok == ok); + CHECK(result.s == sine); + CHECK(result.c == cosine); + + const T identity = sine * sine + cosine * cosine; + const T delta = identity - T{ 1.0 }; + const T error = bl::abs(delta); + const T tolerance = std::numeric_limits::epsilon() * 64.0; + CHECK(error < tolerance); + } + + template + void check_nan(std::string_view operation, const T& value) + { + INFO("operation: " << operation); + CHECK(bl::isnan(value)); + } + + template + void check_zero( + std::string_view operation, + const T& value) + { + INFO("operation: " << operation); + CHECK(bl::iszero(value)); + } + + template + void check_zero( + std::string_view operation, + const T& value, + bool negative) + { + INFO("operation: " << operation); + CHECK(bl::iszero(value)); + CHECK(bl::signbit(value) == negative); + } + + template + void check_infinity( + std::string_view operation, + const T& value, + bool negative) + { + INFO("operation: " << operation); + CHECK(bl::isinf(value)); + CHECK(bl::signbit(value) == negative); + } + + template + [[nodiscard]] T divide_without_constant_folding(T numerator, T denominator) + { + if constexpr (std::is_floating_point_v) + { + volatile T runtime_numerator = numerator; + volatile T runtime_denominator = denominator; + return runtime_numerator / runtime_denominator; + } + else + { + return numerator / denominator; + } + } + + template + void check_arithmetic_special_values(std::string_view precision) + { + INFO("precision: " << precision); + const T zero{ 0.0 }; + const T negative_zero{ -0.0 }; + const T one{ 1.0 }; + const T negative_one{ -1.0 }; + const T infinity = std::numeric_limits::infinity(); + const T negative_infinity = -infinity; + const T nan = std::numeric_limits::quiet_NaN(); + + #if defined(FLTX_FAST_MATH) + constexpr bool relaxed_basic_arithmetic = + std::is_same_v || std::is_same_v; + #else + constexpr bool relaxed_basic_arithmetic = false; + #endif + + if constexpr (!relaxed_basic_arithmetic) + { + check_infinity("infinity + finite", T{ infinity + one }, false); + check_infinity("finite + -infinity", T{ one + negative_infinity }, true); + check_nan("infinity + -infinity", T{ infinity + negative_infinity }); + check_nan("infinity - infinity", T{ infinity - infinity }); + check_nan("NaN arithmetic propagation", T{ nan + one }); + + check_nan("infinity * zero", T{ infinity * zero }); + check_zero("zero * negative", T{ zero * negative_one }, true); + check_zero("-zero * negative", T{ negative_zero * negative_one }, false); + check_infinity("finite / +zero", + divide_without_constant_folding(one, zero), false); + check_infinity("finite / -zero", + divide_without_constant_folding(one, negative_zero), true); + check_nan("zero / zero", + divide_without_constant_folding(zero, zero)); + check_nan("infinity / infinity", + divide_without_constant_folding(infinity, infinity)); + } + + check_zero("abs(-zero)", T{ bl::abs(negative_zero) }, false); + check_infinity("fabs(-infinity)", T{ bl::fabs(negative_infinity) }, false); + check_nan("abs(NaN)", T{ bl::abs(nan) }); + check_zero("sqr(-zero)", T{ bl::sqr(negative_zero) }, false); + check_infinity("sqr(-infinity)", T{ bl::sqr(negative_infinity) }, false); + check_infinity("recip(+zero)", T{ bl::recip(zero) }, false); + check_infinity("recip(-zero)", T{ bl::recip(negative_zero) }, true); + check_zero("recip(+infinity)", T{ bl::recip(infinity) }, false); + check_zero("recip(-infinity)", T{ bl::recip(negative_infinity) }, true); + + check_nan("fma(infinity, zero, one)", + T{ bl::fma(infinity, zero, one) }); + check_nan("fma(infinity, one, -infinity)", + T{ bl::fma(infinity, one, negative_infinity) }); + check_nan("fma NaN propagation", T{ bl::fma(nan, one, one) }); + check_infinity("fma infinity result", + T{ bl::fma(infinity, one, one) }, false); + + CHECK(T{ bl::fmin(nan, one) } == one); + CHECK(T{ bl::fmin(one, nan) } == one); + CHECK(T{ bl::fmax(nan, one) } == one); + CHECK(T{ bl::fmax(one, nan) } == one); + check_nan("fmin(NaN, NaN)", T{ bl::fmin(nan, nan) }); + check_nan("fmax(NaN, NaN)", T{ bl::fmax(nan, nan) }); + if constexpr (std::is_same_v || std::is_same_v) + { + check_zero("fmin(+zero, -zero)", + T{ bl::fmin(zero, negative_zero) }); + check_zero("fmax(-zero, +zero)", + T{ bl::fmax(negative_zero, zero) }); + } + else + { + check_zero("fmin(+zero, -zero)", + T{ bl::fmin(zero, negative_zero) }, true); + check_zero("fmax(-zero, +zero)", + T{ bl::fmax(negative_zero, zero) }, false); + } + + check_nan("fdim NaN propagation", T{ bl::fdim(nan, one) }); + check_infinity("fdim(+infinity, finite)", + T{ bl::fdim(infinity, one) }, false); + check_zero("fdim(finite, +infinity)", + T{ bl::fdim(one, infinity) }, false); + check_zero("copysign(+zero, -zero)", + T{ bl::copysign(zero, negative_zero) }, true); + check_infinity("copysign(+infinity, -one)", + T{ bl::copysign(infinity, negative_one) }, true); + } + + template + void check_root_and_power_special_values(std::string_view precision) + { + INFO("precision: " << precision); + const T zero{ 0.0 }; + const T negative_zero{ -0.0 }; + const T one{ 1.0 }; + const T negative_one{ -1.0 }; + const T infinity = std::numeric_limits::infinity(); + const T negative_infinity = -infinity; + const T nan = std::numeric_limits::quiet_NaN(); + + check_zero("sqrt(-zero)", T{ bl::sqrt(negative_zero) }, true); + check_infinity("sqrt(+infinity)", T{ bl::sqrt(infinity) }, false); + check_nan("sqrt(negative)", T{ bl::sqrt(negative_one) }); + check_nan("sqrt(NaN)", T{ bl::sqrt(nan) }); + check_zero("cbrt(-zero)", T{ bl::cbrt(negative_zero) }, true); + check_infinity("cbrt(-infinity)", + T{ bl::cbrt(negative_infinity) }, true); + check_infinity("hypot(infinity, NaN)", + T{ bl::hypot(infinity, nan) }, false); + check_nan("hypot(finite, NaN)", T{ bl::hypot(one, nan) }); + check_zero("hypot(+zero, -zero)", + T{ bl::hypot(zero, negative_zero) }, false); + + check_infinity("exp(+infinity)", T{ bl::exp(infinity) }, false); + check_zero("exp(-infinity)", T{ bl::exp(negative_infinity) }, false); + check_infinity("exp2(+infinity)", T{ bl::exp2(infinity) }, false); + check_zero("exp2(-infinity)", T{ bl::exp2(negative_infinity) }, false); + check_infinity("expm1(+infinity)", T{ bl::expm1(infinity) }, false); + CHECK(T{ bl::expm1(negative_infinity) } == negative_one); + check_zero("expm1(-zero)", T{ bl::expm1(negative_zero) }, true); + check_nan("exp(NaN)", T{ bl::exp(nan) }); + + check_infinity("log(+zero)", T{ bl::log(zero) }, true); + check_infinity("log(-zero)", T{ bl::log(negative_zero) }, true); + check_nan("log(negative)", T{ bl::log(negative_one) }); + check_infinity("log(+infinity)", T{ bl::log(infinity) }, false); + check_infinity("log2(+zero)", T{ bl::log2(zero) }, true); + check_nan("log2(negative)", T{ bl::log2(negative_one) }); + check_infinity("log10(+infinity)", + T{ bl::log10(infinity) }, false); + check_infinity("log1p(-one)", T{ bl::log1p(negative_one) }, true); + check_nan("log1p(less than -one)", T{ bl::log1p(T{ -2.0 }) }); + check_zero("log1p(-zero)", T{ bl::log1p(negative_zero) }, true); + + CHECK(T{ bl::pow(one, nan) } == one); + CHECK(T{ bl::pow(nan, zero) } == one); + CHECK(T{ bl::pow(negative_one, infinity) } == one); + check_nan("pow(negative, fractional)", + T{ bl::pow(T{ -2.0 }, T{ 0.5 }) }); + check_zero("pow(-zero, positive odd)", + T{ bl::pow(negative_zero, T{ 3.0 }) }, true); + check_infinity("pow(-zero, negative odd)", + T{ bl::pow(negative_zero, T{ -3.0 }) }, true); + check_zero("pow(+infinity, negative)", + T{ bl::pow(infinity, T{ -2.0 }) }, false); + } + + template + void check_transcendental_special_values(std::string_view precision) + { + INFO("precision: " << precision); + const T zero{ 0.0 }; + const T negative_zero{ -0.0 }; + const T one{ 1.0 }; + const T negative_one{ -1.0 }; + const T infinity = std::numeric_limits::infinity(); + const T negative_infinity = -infinity; + const T nan = std::numeric_limits::quiet_NaN(); + + check_zero("sin(-zero)", T{ bl::sin(negative_zero) }, true); + CHECK(T{ bl::cos(negative_zero) } == one); + check_zero("tan(-zero)", T{ bl::tan(negative_zero) }, true); + check_nan("sin(infinity)", T{ bl::sin(infinity) }); + check_nan("cos(-infinity)", T{ bl::cos(negative_infinity) }); + check_nan("tan(infinity)", T{ bl::tan(infinity) }); + check_nan("sin(NaN)", T{ bl::sin(nan) }); + + check_zero("asin(-zero)", T{ bl::asin(negative_zero) }, true); + check_zero("atan(-zero)", T{ bl::atan(negative_zero) }, true); + check_nan("asin(outside domain)", T{ bl::asin(T{ 2.0 }) }); + check_nan("acos(outside domain)", T{ bl::acos(T{ -2.0 }) }); + check_zero("atan2(-zero, positive)", + T{ bl::atan2(negative_zero, one) }, true); + check_zero("atan2(+zero, positive)", + T{ bl::atan2(zero, one) }, false); + CHECK(bl::signbit(T{ bl::atan2(negative_zero, negative_one) })); + CHECK_FALSE(bl::signbit(T{ bl::atan2(zero, negative_one) })); + + check_zero("sinh(-zero)", T{ bl::sinh(negative_zero) }, true); + CHECK(T{ bl::cosh(negative_zero) } == one); + check_zero("tanh(-zero)", T{ bl::tanh(negative_zero) }, true); + check_zero("asinh(-zero)", T{ bl::asinh(negative_zero) }, true); + check_zero("acosh(one)", T{ bl::acosh(one) }, false); + check_nan("acosh(below one)", T{ bl::acosh(zero) }); + check_infinity("atanh(+one)", T{ bl::atanh(one) }, false); + check_infinity("atanh(-one)", T{ bl::atanh(negative_one) }, true); + check_nan("atanh(outside domain)", T{ bl::atanh(T{ 2.0 }) }); + + check_zero("erf(-zero)", T{ bl::erf(negative_zero) }, true); + CHECK(T{ bl::erf(infinity) } == one); + CHECK(T{ bl::erf(negative_infinity) } == negative_one); + check_zero("erfc(+infinity)", T{ bl::erfc(infinity) }, false); + CHECK(T{ bl::erfc(negative_infinity) } == T{ 2.0 }); + check_infinity("lgamma(-infinity)", + T{ bl::lgamma(negative_infinity) }, false); + check_infinity("tgamma(+zero)", T{ bl::tgamma(zero) }, false); + check_infinity("tgamma(-zero)", T{ bl::tgamma(negative_zero) }, true); + check_infinity("tgamma(+infinity)", T{ bl::tgamma(infinity) }, false); + check_nan("tgamma(-infinity)", T{ bl::tgamma(negative_infinity) }); + } + + template + void check_rounding_and_remainder_special_values(std::string_view precision) + { + INFO("precision: " << precision); + const T zero{ 0.0 }; + const T negative_zero{ -0.0 }; + const T one{ 1.0 }; + const T infinity = std::numeric_limits::infinity(); + const T negative_infinity = -infinity; + const T nan = std::numeric_limits::quiet_NaN(); + + check_zero("floor(-zero)", T{ bl::floor(negative_zero) }, true); + check_zero("ceil(-zero)", T{ bl::ceil(negative_zero) }, true); + check_zero("trunc(-zero)", T{ bl::trunc(negative_zero) }, true); + check_zero("round(-zero)", T{ bl::round(negative_zero) }, true); + check_zero("roundeven(-zero)", T{ bl::roundeven(negative_zero) }, true); + check_zero("round(positive fraction)", T{ bl::round(T{ 0.375 }) }, false); + check_zero("round(negative fraction)", T{ bl::round(T{ -0.375 }) }, true); + check_infinity("floor(+infinity)", T{ bl::floor(infinity) }, false); + check_infinity("round(-infinity)", + T{ bl::round(negative_infinity) }, true); + check_infinity("roundeven(+infinity)", + T{ bl::roundeven(infinity) }, false); + check_nan("roundeven(NaN)", T{ bl::roundeven(nan) }); + check_zero("round_decimals(-zero)", + T{ bl::round_decimals(negative_zero, 3) }, true); + check_infinity("round_significant(infinity)", + T{ bl::round_significant(infinity, 4) }, false); + + check_zero("fmod(-zero, finite)", + T{ bl::fmod(negative_zero, one) }, true); + check_zero("remainder(-zero, finite)", + T{ bl::remainder(negative_zero, one) }, true); + CHECK(T{ bl::fmod(one, infinity) } == one); + CHECK(T{ bl::remainder(one, infinity) } == one); + check_nan("fmod(infinity, finite)", T{ bl::fmod(infinity, one) }); + check_nan("remainder(finite, zero)", + T{ bl::remainder(one, zero) }); + check_nan("fmod NaN propagation", T{ bl::fmod(nan, one) }); + + int quotient = 123; + check_nan("remquo(infinity, finite)", + T{ bl::remquo(infinity, one, "ient) }); + + T integral{}; + check_zero("modf(+infinity) fraction", + T{ bl::modf(infinity, &integral) }, false); + check_infinity("modf(+infinity) integral", integral, false); + check_zero("modf(-infinity) fraction", + T{ bl::modf(negative_infinity, &integral) }, true); + check_infinity("modf(-infinity) integral", integral, true); + check_zero("modf(-zero) fraction", + T{ bl::modf(negative_zero, &integral) }, true); + check_zero("modf(-zero) integral", integral, true); + check_nan("modf(NaN) fraction", T{ bl::modf(nan, &integral) }); + check_nan("modf(NaN) integral", integral); + + int exponent = 99; + check_zero("frexp(-zero)", + T{ bl::frexp(negative_zero, &exponent) }, true); + CHECK(exponent == 0); + check_infinity("frexp(+infinity)", + T{ bl::frexp(infinity, &exponent) }, false); + check_zero("ldexp(-zero)", T{ bl::ldexp(negative_zero, 12) }, true); + check_infinity("scalbn(-infinity)", + T{ bl::scalbn(negative_infinity, -12) }, true); + check_infinity("ldexp(+infinity)", + T{ bl::ldexp(infinity, 12) }, false); + check_nan("ldexp(NaN)", T{ bl::ldexp(nan, 12) }); + check_infinity("ipow(+infinity, odd)", + T{ bl::ipow(infinity, 7) }, false); + check_infinity("ipow(-infinity, odd)", + T{ bl::ipow(negative_infinity, 7) }, true); + check_nan("ipow(NaN, odd)", T{ bl::ipow(nan, 7) }); + check_infinity("logb(+zero)", T{ bl::logb(zero) }, true); + check_infinity("logb(+infinity)", T{ bl::logb(infinity) }, false); + check_nan("logb(NaN)", T{ bl::logb(nan) }); + + const T below_infinity = bl::nextafter(infinity, zero); + CHECK(bl::isfinite(below_infinity)); + CHECK_FALSE(bl::signbit(below_infinity)); + const T below_zero = bl::nextafter(zero, T{ -1.0 }); + CHECK_FALSE(bl::iszero(below_zero)); + CHECK(bl::signbit(below_zero)); + check_zero("nextafter(-zero, +zero)", + T{ bl::nextafter(negative_zero, zero) }, false); + } + + template + void check_expansion_precision_rounding() + { + const T decimal = bl::parse("1.2345"); + const T decimal_tie = bl::parse("1.1875"); + const T negative_decimal_tie = bl::parse("-1.1875"); + const T two_decimals = bl::parse("1.23"); + const T three_decimals = bl::parse("1.234"); + const T tied_decimals = bl::parse("1.188"); + const T negative_tied_decimals = bl::parse("-1.188"); + const T unchanged = bl::parse("1.25"); + CHECK(bl::round_decimals(decimal, 2) == two_decimals); + CHECK(bl::round_decimals(decimal, 3) == three_decimals); + CHECK(bl::round_decimals(decimal_tie, 3) == tied_decimals); + CHECK(bl::round_decimals( + negative_decimal_tie, 3) == negative_tied_decimals); + CHECK(bl::round_decimals(unchanged, 0) == unchanged); + + const T positive_below_half = bl::parse( + "0.0002719634966936723775485033971720674"); + const T negative_below_half = -positive_below_half; + const T positive_zero = bl::round_decimals(positive_below_half, 3); + const T negative_zero = bl::round_decimals(negative_below_half, 3); + CHECK(bl::iszero(positive_zero)); + CHECK_FALSE(bl::signbit(positive_zero)); + CHECK(bl::iszero(negative_zero)); + CHECK(bl::signbit(negative_zero)); + + const T large = bl::parse("12345"); + const T small = bl::parse("0.012345"); + const T tie_down = bl::parse("12500"); + const T tie_up = bl::parse("13500"); + const T rounded_large = bl::parse("12300"); + const T rounded_small = bl::parse("0.0123"); + const T rounded_down = bl::parse("12000"); + const T rounded_up = bl::parse("14000"); + CHECK(bl::round_significant( + large, 3) == rounded_large); + CHECK(bl::round_significant( + small, 3) == rounded_small); + CHECK(bl::round_significant( + tie_down, 2) == rounded_down); + CHECK(bl::round_significant( + tie_up, 2) == rounded_up); + } +} + +TEST_CASE("exact math contracts hold for both expansion types", "[contracts][math]") +{ + check_exact_math(); + check_exact_math(); + check_exact_math(); + check_exact_math(); +} + +TEST_CASE("nextafter follows the nominal 106 and 212 bit models", + "[contracts][math][nextafter]") +{ + STATIC_CHECK(nominal_nextafter_contract()); + STATIC_CHECK(nominal_nextafter_contract()); + + const auto check_edges = []() + { + using limits = std::numeric_limits; + const T zero{ 0.0 }; + const T negative_zero{ -0.0 }; + const T denorm = limits::denorm_min(); + const T infinity = limits::infinity(); + const T nan = limits::quiet_NaN(); + + CHECK(bl::nextafter(zero, T{ 1.0 }) == denorm); + CHECK(bl::nextafter(zero, T{ -1.0 }) == -denorm); + CHECK_FALSE(bl::signbit(bl::nextafter(negative_zero, zero))); + CHECK(bl::nextafter(infinity, zero) == limits::max()); + CHECK(bl::nextafter(-infinity, zero) == limits::lowest()); + CHECK(bl::isinf(bl::nextafter(limits::max(), infinity))); + CHECK(bl::isinf(bl::nextafter(limits::lowest(), -infinity))); + CHECK(bl::isnan(bl::nextafter(nan, zero))); + + const T below_minimum = bl::nextafter(limits::min(), zero); + CHECK(below_minimum < limits::min()); + CHECK(bl::fpclassify(below_minimum) == FP_SUBNORMAL); + CHECK(bl::nextafter(below_minimum, limits::min()) == limits::min()); + }; + check_edges.template operator()(); + check_edges.template operator()(); + + constexpr bl::f128 sparse128{ 1.0, 0x1.8p-106 }; + constexpr bl::f256 sparse256{ + 1.0, 0x1p-55, -0x1p-120, 0x1.8p-212 + }; + STATIC_CHECK(bl::nextafter(sparse128, bl::f128{ 2.0 }) == + sparse128 + bl::f128{ 0x1p-105 }); + STATIC_CHECK(bl::nextafter(sparse256, bl::f256{ 2.0 }) == + sparse256 + bl::f256{ 0x1p-211 }); + STATIC_CHECK(bl::ilogb(bl::f128{ 1.0, -0x1p-107 }) == -1); + STATIC_CHECK(bl::ilogb(bl::f256{ 1.0, -0x1p-213, 0.0, 0.0 }) == -1); + +#if LDBL_MANT_DIG > DBL_MANT_DIG + constexpr long double extended_target = 1.0L + 0x1p-60L; + STATIC_CHECK(bl::nexttoward(bl::f128{ 1.0 }, extended_target) > bl::f128{ 1.0 }); + STATIC_CHECK(bl::nexttoward(bl::f256{ 1.0 }, extended_target) > bl::f256{ 1.0 }); +#endif +} + +TEST_CASE("rounding and decomposition preserve defined semantics", "[contracts][math]") +{ + check_decomposition(); + check_decomposition(); + check_decomposition(); + check_decomposition(); + + CHECK(bl::floor(bl::f128{ -2.25 }) == bl::f128{ -3.0 }); + CHECK(bl::ceil(bl::f128{ -2.25 }) == bl::f128{ -2.0 }); + CHECK(bl::trunc(bl::f256{ -2.75 }) == bl::f256{ -2.0 }); + CHECK(bl::round(bl::f256{ -2.5 }) == bl::f256{ -3.0 }); + CHECK(bl::roundeven(bl::f128{ 2.5 }) == bl::f128{ 2.0 }); + CHECK(bl::roundeven(bl::f128{ 3.5 }) == bl::f128{ 4.0 }); + CHECK(bl::lround(bl::f128{ -2.5 }) == -3L); + CHECK(bl::llround(bl::f256{ 2.5 }) == 3LL); + CHECK(bl::to_string( + bl::round_decimals(bl::f128{ 1.2345 }, 2), + 2, + std::ios_base::fixed) == "1.23"); + CHECK(bl::to_string( + bl::round_decimals(bl::f256{ 1.2345 }, 2), + 2, + std::ios_base::fixed) == "1.23"); + CHECK(bl::round_significant(bl::f128{ 1234.5 }, 3) == bl::f128{ 1230.0 }); + CHECK(bl::round_significant(bl::f256{ 1234.5 }, 3) == bl::f256{ 1230.0 }); +} + +TEST_CASE("decimal and significant-figure rounding preserve tie rules", "[contracts][math][rounding]") +{ + CHECK(bl::round_decimals(1.2345f, 2) == 1.23f); + CHECK(bl::round_decimals(1.125f, 2) == 1.12f); + CHECK(bl::round_decimals(1.375f, 2) == 1.38f); + CHECK(bl::round_decimals(-1.375f, 2) == -1.38f); + CHECK(bl::round_significant(12345.0f, 3) == 12300.0f); + CHECK(bl::round_significant(0.012345f, 3) == 0.0123f); + CHECK(bl::round_significant(12500.0f, 2) == 12000.0f); + CHECK(bl::round_significant(13500.0f, 2) == 14000.0f); + + CHECK(bl::round_decimals(1.2345, 2) == 1.23); + CHECK(bl::round_decimals(1.2345, 3) == 1.234); + CHECK(bl::round_decimals(1.125, 2) == 1.12); + CHECK(bl::round_decimals(1.375, 2) == 1.38); + CHECK(bl::round_decimals(-1.375, 2) == -1.38); + CHECK(bl::round_significant(12345.0, 3) == 12300.0); + CHECK(bl::round_significant(0.012345, 3) == 0.0123); + CHECK(bl::round_significant(12500.0, 2) == 12000.0); + CHECK(bl::round_significant(13500.0, 2) == 14000.0); + + check_expansion_precision_rounding(); + check_expansion_precision_rounding(); +} + +TEST_CASE("integer rounding covers expansion limbs at signed boundaries", "[contracts][math][rounding]") +{ + const bl::f128 long_min128{ + static_cast(std::numeric_limits::min()), 0.5 + }; + const bl::f256 long_min256{ + static_cast(std::numeric_limits::min()), 0.5, 0.0, 0.0 + }; + CHECK(bl::lround(long_min128) == std::numeric_limits::min()); + CHECK(bl::lround(long_min256) == std::numeric_limits::min()); + + if constexpr (std::numeric_limits::digits <= 53) + { + const bl::f128 long_max128{ + static_cast(std::numeric_limits::max()), -0.49 + }; + const bl::f256 long_max256{ + static_cast(std::numeric_limits::max()), + -0.49, 0.0, 0.0 + }; + CHECK(bl::lround(long_max128) == std::numeric_limits::max()); + CHECK(bl::lround(long_max256) == std::numeric_limits::max()); + } + + const bl::f128 long_long_min128{ + static_cast(std::numeric_limits::min()), 0.5 + }; + const bl::f256 long_long_min256{ + static_cast(std::numeric_limits::min()), + 0.5, 0.0, 0.0 + }; + CHECK(bl::llround(long_long_min128) == + std::numeric_limits::min()); + CHECK(bl::llround(long_long_min256) == + std::numeric_limits::min()); + + CHECK(bl::llround(bl::f128{ 0x1p52, 0.5 }) == 4503599627370497LL); + CHECK(bl::llround(bl::f256{ 0x1p52, 0.5, 0.0, 0.0 }) == + 4503599627370497LL); + CHECK(bl::llround(bl::f128{ -0x1p52, -0.5 }) == -4503599627370497LL); + CHECK(bl::llround(bl::f256{ -0x1p52, -0.5, 0.0, 0.0 }) == + -4503599627370497LL); + CHECK(bl::llround(bl::f128{ 0x1p53, -0.5 }) == 9007199254740992LL); + CHECK(bl::llround(bl::f256{ 0x1p53, -0.5, 0.0, 0.0 }) == + 9007199254740992LL); +} + +TEST_CASE("sincos overloads agree and log_as_double is well scaled", "[contracts][math]") +{ + check_sincos(); + check_sincos(); + check_sincos(); + check_sincos(); + + CHECK(std::abs(bl::log_as_double(bl::exp(bl::f128{ 1.0 })) - 1.0) < 1e-14); + CHECK(std::abs(bl::log_as_double(bl::exp(bl::f256{ 1.0 })) - 1.0) < 1e-14); +} + +TEST_CASE("public expansion math results keep nonoverlapping limbs", + "[contracts][math][canonical]") +{ + const auto check = []() { + const T a = expansion(1.0, 0x1p-60); + const T b = expansion(-0.375, -0x1p-64); + const T domain = expansion(0.625, 0x1p-62); + const T positive = expansion(1.125, 0x1p-60); + const T gamma_argument = expansion(1.75, 0x1p-62); + + check_canonical("add", T{ a + b }); + check_canonical("subtract", T{ a - b }); + check_canonical("multiply", T{ a * domain }); + check_canonical("divide", T{ a / positive }); + check_canonical("negate", T{ -a }); + check_canonical("abs", bl::abs(b)); + check_canonical("fabs", bl::fabs(b)); + check_canonical("sqr", bl::sqr(a)); + check_canonical("recip", bl::recip(positive)); + check_canonical("clamp", bl::clamp(a, domain, positive)); + check_canonical("fma", bl::fma(a, positive, b)); + check_canonical("fmin", bl::fmin(a, b)); + check_canonical("fmax", bl::fmax(a, b)); + check_canonical("fdim", bl::fdim(a, domain)); + check_canonical("copysign", bl::copysign(a, b)); + check_canonical("floor", bl::floor(b)); + check_canonical("ceil", bl::ceil(b)); + check_canonical("trunc", bl::trunc(b)); + check_canonical("round", bl::round(b)); + check_canonical("roundeven", bl::roundeven(b)); + check_canonical("fmod", bl::fmod(a, domain)); + check_canonical("remainder", bl::remainder(a, domain)); + + int quotient = 0; + check_canonical("remquo", bl::remquo(a, domain, "ient)); + check_canonical("sqrt", bl::sqrt(positive)); + check_canonical("cbrt", bl::cbrt(b)); + check_canonical("hypot", bl::hypot(a, b)); + check_canonical("pow", bl::pow(positive, domain)); + check_canonical("ipow", bl::ipow(positive, -3)); + check_canonical("exp", bl::exp(domain)); + check_canonical("exp2", bl::exp2(domain)); + check_canonical("expm1", bl::expm1(domain)); + check_canonical("log", bl::log(positive)); + check_canonical("log2", bl::log2(positive)); + check_canonical("log10", bl::log10(positive)); + check_canonical("log1p", bl::log1p(domain)); + + const auto trig = bl::sincos(domain); + check_canonical("sincos.sin", trig.s); + check_canonical("sincos.cos", trig.c); + check_canonical("sin", bl::sin(domain)); + check_canonical("cos", bl::cos(domain)); + check_canonical("tan", bl::tan(domain)); + check_canonical("atan", bl::atan(domain)); + check_canonical("atan2", bl::atan2(b, a)); + check_canonical("asin", bl::asin(domain)); + check_canonical("acos", bl::acos(domain)); + check_canonical("sinh", bl::sinh(domain)); + check_canonical("cosh", bl::cosh(domain)); + check_canonical("tanh", bl::tanh(domain)); + check_canonical("asinh", bl::asinh(b)); + check_canonical("acosh", bl::acosh(positive)); + check_canonical("atanh", bl::atanh(domain)); + check_canonical("erf", bl::erf(domain)); + check_canonical("erfc", bl::erfc(domain)); + check_canonical("lgamma", bl::lgamma(gamma_argument)); + check_canonical("tgamma", bl::tgamma(gamma_argument)); + + int exponent = 0; + T integral{}; + check_canonical("frexp", bl::frexp(a, &exponent)); + check_canonical("modf.fraction", bl::modf(a, &integral)); + check_canonical("modf.integral", integral); + check_canonical("ldexp", bl::ldexp(a, 7)); + check_canonical("scalbn", bl::scalbn(a, -7)); + check_canonical("scalbln", bl::scalbln(a, 7L)); + check_canonical("logb", bl::logb(a)); + check_canonical("nextafter", bl::nextafter(a, positive)); + check_canonical("nexttoward", bl::nexttoward(a, positive)); + check_canonical( + "round_decimals", + bl::round_decimals(T{ 1.23456789 }, 5)); + check_canonical( + "round_significant", + bl::round_significant(T{ 12345.6789 }, 5)); + }; + + check.template operator()(); + check.template operator()(); +} + +TEST_CASE("arithmetic special values follow IEEE conventions", "[contracts][math][special]") +{ + // Native runtime wrappers inherit the active std/compiler floating-point + // mode. Fast-math special values remain observational metrics rather than + // a stronger FLTX contract; strict runtime and constexpr paths are checked. +#if !defined(FLTX_FAST_MATH) + check_arithmetic_special_values("f32"); + check_arithmetic_special_values("f64"); +#endif + check_arithmetic_special_values("f128"); + check_arithmetic_special_values("f256"); +} + +TEST_CASE("roots and powers handle poles and invalid domains", "[contracts][math][special]") +{ +#if !defined(FLTX_FAST_MATH) + check_root_and_power_special_values("f32"); + check_root_and_power_special_values("f64"); +#endif + check_root_and_power_special_values("f128"); + check_root_and_power_special_values("f256"); +} + +TEST_CASE("transcendentals preserve signed outputs and domain semantics", "[contracts][math][special]") +{ +#if !defined(FLTX_FAST_MATH) + check_transcendental_special_values("f32"); + check_transcendental_special_values("f64"); +#endif + check_transcendental_special_values("f128"); + check_transcendental_special_values("f256"); +} + +TEST_CASE("rounding and remainder special values preserve signs", "[contracts][math][special]") +{ +#if !defined(FLTX_FAST_MATH) + check_rounding_and_remainder_special_values("f32"); + check_rounding_and_remainder_special_values("f64"); +#endif + check_rounding_and_remainder_special_values("f128"); + check_rounding_and_remainder_special_values("f256"); +} + +TEST_CASE("fixed rounding ignores the process rounding mode", "[contracts][math][rounding]") +{ +#if defined(__EMSCRIPTEN__) + // WebAssembly has a fixed nearest-even environment and does not expose + // mutable hardware rounding modes. + CHECK(bl::roundeven(2.5) == 2.0); + CHECK(bl::round(bl::f128{ 2.5 }) == bl::f128{ 3.0 }); + CHECK(bl::floor(bl::f256{ -2.25 }) == bl::f256{ -3.0 }); +#else + struct guard + { + int previous = std::fegetround(); + ~guard() { std::fesetround(previous); } + } restore; + + constexpr std::array modes{ FE_TONEAREST, FE_DOWNWARD, FE_UPWARD, FE_TOWARDZERO }; + for (const int mode : modes) + { + REQUIRE(std::fesetround(mode) == 0); + CHECK(bl::roundeven(2.5) == 2.0); + CHECK(bl::round(bl::f128{ 2.5 }) == bl::f128{ 3.0 }); + CHECK(bl::floor(bl::f256{ -2.25 }) == bl::f256{ -3.0 }); + } +#endif +} diff --git a/validation/tests/contracts/overload_matrix.cpp b/validation/tests/contracts/overload_matrix.cpp new file mode 100644 index 0000000..d569714 --- /dev/null +++ b/validation/tests/contracts/overload_matrix.cpp @@ -0,0 +1,305 @@ +#include +#include +#include +#include + +#include + +namespace +{ +#define FLTX_EXPECT_UNARY(NAME, ARGUMENT, RESULT) \ + static_assert(std::same_as< \ + decltype(bl::NAME(std::declval())), RESULT>) + +#define FLTX_EXPECT_BINARY(NAME, LEFT, RIGHT, RESULT) \ + static_assert(std::same_as< \ + decltype(bl::NAME(std::declval(), std::declval())), \ + RESULT>) + +#define FLTX_EXPECT_TERNARY(NAME, FIRST, SECOND, THIRD, RESULT) \ + static_assert(std::same_as< \ + decltype(bl::NAME( \ + std::declval(), \ + std::declval(), \ + std::declval())), \ + RESULT>) + +#define FLTX_NUMERIC_UNARY_MATRIX(NAME) \ + FLTX_EXPECT_UNARY(NAME, float, bl::f32); \ + FLTX_EXPECT_UNARY(NAME, double, bl::f64); \ + FLTX_EXPECT_UNARY(NAME, int, bl::f64); \ + FLTX_EXPECT_UNARY(NAME, bl::f128_s, bl::f128); \ + FLTX_EXPECT_UNARY(NAME, bl::f128, bl::f128); \ + FLTX_EXPECT_UNARY(NAME, bl::f256_s, bl::f256); \ + FLTX_EXPECT_UNARY(NAME, bl::f256, bl::f256) + +#define FLTX_BOOLEAN_UNARY_MATRIX(NAME) \ + FLTX_EXPECT_UNARY(NAME, float, bool); \ + FLTX_EXPECT_UNARY(NAME, double, bool); \ + FLTX_EXPECT_UNARY(NAME, int, bool); \ + FLTX_EXPECT_UNARY(NAME, bl::f128_s, bool); \ + FLTX_EXPECT_UNARY(NAME, bl::f128, bool); \ + FLTX_EXPECT_UNARY(NAME, bl::f256_s, bool); \ + FLTX_EXPECT_UNARY(NAME, bl::f256, bool) + +#define FLTX_INTEGER_UNARY_MATRIX(NAME, RESULT) \ + FLTX_EXPECT_UNARY(NAME, float, RESULT); \ + FLTX_EXPECT_UNARY(NAME, double, RESULT); \ + FLTX_EXPECT_UNARY(NAME, int, RESULT); \ + FLTX_EXPECT_UNARY(NAME, bl::f128_s, RESULT); \ + FLTX_EXPECT_UNARY(NAME, bl::f128, RESULT); \ + FLTX_EXPECT_UNARY(NAME, bl::f256_s, RESULT); \ + FLTX_EXPECT_UNARY(NAME, bl::f256, RESULT) + +#define FLTX_NUMERIC_BINARY_MATRIX(NAME) \ + FLTX_EXPECT_BINARY(NAME, float, float, bl::f32); \ + FLTX_EXPECT_BINARY(NAME, double, double, bl::f64); \ + FLTX_EXPECT_BINARY(NAME, float, double, bl::f64); \ + FLTX_EXPECT_BINARY(NAME, int, float, bl::f64); \ + FLTX_EXPECT_BINARY(NAME, bl::f128_s, float, bl::f128); \ + FLTX_EXPECT_BINARY(NAME, double, bl::f128, bl::f128); \ + FLTX_EXPECT_BINARY(NAME, bl::f128, bl::f128_s, bl::f128); \ + FLTX_EXPECT_BINARY(NAME, bl::f256_s, float, bl::f256); \ + FLTX_EXPECT_BINARY(NAME, bl::f128, bl::f256_s, bl::f256); \ + FLTX_EXPECT_BINARY(NAME, bl::f256, double, bl::f256) + +#define FLTX_BOOLEAN_BINARY_MATRIX(NAME) \ + FLTX_EXPECT_BINARY(NAME, float, float, bool); \ + FLTX_EXPECT_BINARY(NAME, double, double, bool); \ + FLTX_EXPECT_BINARY(NAME, float, double, bool); \ + FLTX_EXPECT_BINARY(NAME, int, float, bool); \ + FLTX_EXPECT_BINARY(NAME, bl::f128_s, float, bool); \ + FLTX_EXPECT_BINARY(NAME, double, bl::f128, bool); \ + FLTX_EXPECT_BINARY(NAME, bl::f128, bl::f128_s, bool); \ + FLTX_EXPECT_BINARY(NAME, bl::f256_s, float, bool); \ + FLTX_EXPECT_BINARY(NAME, bl::f128, bl::f256_s, bool); \ + FLTX_EXPECT_BINARY(NAME, bl::f256, double, bool) + + static_assert(bl::fltx_precision_rank_v == 1); + static_assert(bl::fltx_precision_rank_v == 2); + static_assert(bl::fltx_precision_rank_v == 2); + static_assert(bl::fltx_precision_rank_v == 2); + static_assert(bl::fltx_precision_rank_v == 3); + static_assert(bl::fltx_precision_rank_v == 4); + static_assert(bl::fltx_precision_rank_v == 5); + + static_assert(std::same_as, bl::f32>); + static_assert(std::same_as, bl::f64>); + static_assert(std::same_as, bl::f64>); + static_assert(std::same_as, bl::f64>); + static_assert(std::same_as, bl::f64>); + static_assert(std::same_as, long double>); + static_assert(std::same_as< + bl::common_float_type_t, bl::f128>); + static_assert(std::same_as< + bl::common_float_type_t, bl::f256>); + + static_assert(std::same_as, bl::f64>); + static_assert(std::same_as, bl::f128_s>); + static_assert(std::same_as, bl::f256_s>); + static_assert(!bl::detail::math::promoted_math_arg); + + FLTX_EXPECT_UNARY(abs, float, bl::f32); + FLTX_EXPECT_UNARY(abs, double, bl::f64); + FLTX_EXPECT_UNARY(abs, int, bl::f64); + FLTX_EXPECT_UNARY(abs, bl::f128_s, bl::f128_s); + FLTX_EXPECT_UNARY(abs, bl::f128, bl::f128_s); + FLTX_EXPECT_UNARY(abs, bl::f256_s, bl::f256_s); + FLTX_EXPECT_UNARY(abs, bl::f256, bl::f256_s); + FLTX_NUMERIC_UNARY_MATRIX(fabs); + FLTX_NUMERIC_UNARY_MATRIX(floor); + FLTX_NUMERIC_UNARY_MATRIX(ceil); + FLTX_NUMERIC_UNARY_MATRIX(trunc); + FLTX_NUMERIC_UNARY_MATRIX(round); + FLTX_NUMERIC_UNARY_MATRIX(roundeven); + FLTX_NUMERIC_UNARY_MATRIX(logb); + FLTX_NUMERIC_UNARY_MATRIX(exp); + FLTX_NUMERIC_UNARY_MATRIX(exp2); + FLTX_NUMERIC_UNARY_MATRIX(expm1); + FLTX_NUMERIC_UNARY_MATRIX(log); + FLTX_NUMERIC_UNARY_MATRIX(log2); + FLTX_NUMERIC_UNARY_MATRIX(log10); + FLTX_NUMERIC_UNARY_MATRIX(log1p); + FLTX_NUMERIC_UNARY_MATRIX(sqrt); + FLTX_NUMERIC_UNARY_MATRIX(cbrt); + FLTX_NUMERIC_UNARY_MATRIX(sin); + FLTX_NUMERIC_UNARY_MATRIX(cos); + FLTX_NUMERIC_UNARY_MATRIX(tan); + FLTX_NUMERIC_UNARY_MATRIX(atan); + FLTX_NUMERIC_UNARY_MATRIX(asin); + FLTX_NUMERIC_UNARY_MATRIX(acos); + FLTX_NUMERIC_UNARY_MATRIX(sinh); + FLTX_NUMERIC_UNARY_MATRIX(cosh); + FLTX_NUMERIC_UNARY_MATRIX(tanh); + FLTX_NUMERIC_UNARY_MATRIX(asinh); + FLTX_NUMERIC_UNARY_MATRIX(acosh); + FLTX_NUMERIC_UNARY_MATRIX(atanh); + FLTX_NUMERIC_UNARY_MATRIX(erf); + FLTX_NUMERIC_UNARY_MATRIX(erfc); + FLTX_NUMERIC_UNARY_MATRIX(lgamma); + FLTX_NUMERIC_UNARY_MATRIX(tgamma); + + FLTX_BOOLEAN_UNARY_MATRIX(signbit); + FLTX_BOOLEAN_UNARY_MATRIX(isnan); + FLTX_BOOLEAN_UNARY_MATRIX(isinf); + FLTX_BOOLEAN_UNARY_MATRIX(isfinite); + FLTX_BOOLEAN_UNARY_MATRIX(iszero); + FLTX_BOOLEAN_UNARY_MATRIX(isnormal); + FLTX_EXPECT_UNARY(ispositive, bl::f128_s, bool); + FLTX_EXPECT_UNARY(ispositive, bl::f128, bool); + FLTX_EXPECT_UNARY(ispositive, bl::f256_s, bool); + FLTX_EXPECT_UNARY(ispositive, bl::f256, bool); + FLTX_INTEGER_UNARY_MATRIX(fpclassify, int); + FLTX_INTEGER_UNARY_MATRIX(ilogb, int); + FLTX_INTEGER_UNARY_MATRIX(lround, long); + FLTX_INTEGER_UNARY_MATRIX(llround, long long); + + FLTX_NUMERIC_BINARY_MATRIX(fmod); + FLTX_NUMERIC_BINARY_MATRIX(remainder); + FLTX_NUMERIC_BINARY_MATRIX(fmin); + FLTX_NUMERIC_BINARY_MATRIX(fmax); + FLTX_NUMERIC_BINARY_MATRIX(fdim); + FLTX_NUMERIC_BINARY_MATRIX(copysign); + FLTX_NUMERIC_BINARY_MATRIX(hypot); + FLTX_NUMERIC_BINARY_MATRIX(atan2); + FLTX_NUMERIC_BINARY_MATRIX(nextafter); + + FLTX_BOOLEAN_BINARY_MATRIX(isunordered); + FLTX_BOOLEAN_BINARY_MATRIX(isgreater); + FLTX_BOOLEAN_BINARY_MATRIX(isgreaterequal); + FLTX_BOOLEAN_BINARY_MATRIX(isless); + FLTX_BOOLEAN_BINARY_MATRIX(islessequal); + FLTX_BOOLEAN_BINARY_MATRIX(islessgreater); + + FLTX_EXPECT_TERNARY(fma, float, float, float, bl::f32); + FLTX_EXPECT_TERNARY(fma, float, double, int, bl::f64); + FLTX_EXPECT_TERNARY(fma, bl::f128_s, float, int, bl::f128); + FLTX_EXPECT_TERNARY(fma, bl::f128, bl::f256_s, double, bl::f256); + FLTX_EXPECT_TERNARY(fma, bl::f256, double, float, bl::f256); + + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as< + decltype(bl::remquo(bl::f128{}, 2.0, nullptr)), bl::f128>); + static_assert(std::same_as< + decltype(bl::remquo(bl::f128{}, bl::f256{}, nullptr)), bl::f256>); + +#define FLTX_SCALING_MATRIX(NAME, EXPONENT) \ + static_assert(std::same_as); \ + static_assert(std::same_as); \ + static_assert(std::same_as); \ + static_assert(std::same_as); \ + static_assert(std::same_as) + + FLTX_SCALING_MATRIX(ldexp, 2); + FLTX_SCALING_MATRIX(scalbn, 2); + FLTX_SCALING_MATRIX(scalbln, 2L); + + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + + static_assert(std::same_as(nullptr))), bl::f32>); + static_assert(std::same_as(nullptr))), bl::f64>); + static_assert(std::same_as(nullptr))), bl::f64>); + static_assert(std::same_as< + decltype(bl::modf(bl::f128{}, static_cast(nullptr))), bl::f128>); + static_assert(std::same_as< + decltype(bl::modf(bl::f256{}, static_cast(nullptr))), bl::f256>); + + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as< + decltype(bl::nexttoward(bl::f128{}, bl::f256{})), bl::f256>); + static_assert(std::same_as< + decltype(bl::nexttoward(bl::f256{}, bl::f128{})), bl::f256>); + + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as< + decltype(bl::pow(bl::f128{}, bl::f256{})), bl::f256>); + static_assert(std::same_as< + decltype(bl::pow(bl::f256{}, bl::f128{})), bl::f256>); + static_assert(std::same_as); + + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + static_assert(std::same_as); + + FLTX_EXPECT_UNARY(sqr, float, bl::f32); + FLTX_EXPECT_UNARY(sqr, double, bl::f64); + FLTX_EXPECT_UNARY(sqr, bl::f128, bl::f128); + FLTX_EXPECT_UNARY(sqr, bl::f256, bl::f256); + FLTX_EXPECT_UNARY(recip, float, bl::f32); + FLTX_EXPECT_UNARY(recip, double, bl::f64); + FLTX_EXPECT_UNARY(recip, bl::f128_s, bl::f128); + FLTX_EXPECT_UNARY(recip, bl::f256_s, bl::f256); + +#define FLTX_DECIMAL_ROUNDING_MATRIX(NAME) \ + static_assert(std::same_as); \ + static_assert(std::same_as); \ + static_assert(std::same_as); \ + static_assert(std::same_as) + + FLTX_DECIMAL_ROUNDING_MATRIX(round_decimals); + FLTX_DECIMAL_ROUNDING_MATRIX(round_significant); + + static_assert(std::same_as< + decltype(bl::sincos(std::declval(), + std::declval(), std::declval())), bool>); + static_assert(std::same_as< + decltype(bl::sincos(std::declval(), + std::declval(), std::declval())), bool>); + static_assert(std::same_as< + decltype(bl::sincos(std::declval(), + std::declval(), std::declval())), bool>); + static_assert(std::same_as< + decltype(bl::sincos(std::declval(), + std::declval(), std::declval())), bool>); + + template + concept can_pow = requires (Base base, Exponent exponent) + { + bl::pow(base, exponent); + }; + + template + concept can_sin = requires (Value value) + { + bl::sin(value); + }; + + static_assert(!can_pow); + static_assert(!can_pow); + static_assert(!can_pow); + static_assert(!can_sin); + + static_assert(noexcept(bl::isfinite(std::declval()))); + static_assert(noexcept(bl::ispositive(std::declval()))); + static_assert(noexcept(bl::isless( + std::declval(), + std::declval()))); + static_assert(noexcept(bl::nextafter( + std::declval(), + std::declval()))); + +#undef FLTX_DECIMAL_ROUNDING_MATRIX +#undef FLTX_SCALING_MATRIX +#undef FLTX_BOOLEAN_BINARY_MATRIX +#undef FLTX_NUMERIC_BINARY_MATRIX +#undef FLTX_INTEGER_UNARY_MATRIX +#undef FLTX_BOOLEAN_UNARY_MATRIX +#undef FLTX_NUMERIC_UNARY_MATRIX +#undef FLTX_EXPECT_TERNARY +#undef FLTX_EXPECT_BINARY +#undef FLTX_EXPECT_UNARY +} diff --git a/validation/tests/contracts/overloads.cpp b/validation/tests/contracts/overloads.cpp new file mode 100644 index 0000000..190537d --- /dev/null +++ b/validation/tests/contracts/overloads.cpp @@ -0,0 +1,130 @@ +#include + +#include +#include +#include +#include + +#include + +namespace +{ + template + consteval bool arithmetic_returns() + { + return + std::same_as() + std::declval()), Result> && + std::same_as() - std::declval()), Result> && + std::same_as() * std::declval()), Result> && + std::same_as() / std::declval()), Result>; + } + + template + concept compound_arithmetic = requires (Left left, Right right) + { + { left += right } -> std::same_as; + { left -= right } -> std::same_as; + { left *= right } -> std::same_as; + { left /= right } -> std::same_as; + }; + + template + concept assignment_returns_left = requires (Left left, Right right) + { + { left = right } -> std::same_as; + }; +} + +static_assert(arithmetic_returns()); +static_assert(arithmetic_returns()); +static_assert(arithmetic_returns()); +static_assert(arithmetic_returns()); +static_assert(arithmetic_returns()); +static_assert(arithmetic_returns()); +static_assert(arithmetic_returns()); +static_assert(arithmetic_returns()); +static_assert(arithmetic_returns()); +static_assert(arithmetic_returns()); +static_assert(arithmetic_returns()); +static_assert(arithmetic_returns()); + +static_assert(compound_arithmetic); +static_assert(compound_arithmetic); +static_assert(compound_arithmetic); +static_assert(compound_arithmetic); +static_assert(compound_arithmetic); +static_assert(compound_arithmetic); +static_assert(compound_arithmetic); +static_assert(compound_arithmetic); +static_assert(compound_arithmetic); +static_assert(compound_arithmetic); +static_assert(compound_arithmetic); + +static_assert(std::constructible_from); +static_assert(std::constructible_from); +static_assert(std::constructible_from); +static_assert(std::constructible_from); +static_assert(std::constructible_from); +static_assert(std::constructible_from); +static_assert(std::constructible_from); +static_assert(std::constructible_from); +static_assert(std::constructible_from); +static_assert(std::constructible_from); +static_assert(std::constructible_from); +static_assert(std::convertible_to); +static_assert(std::convertible_to); +static_assert(!std::convertible_to); +static_assert(!std::convertible_to); +static_assert(assignment_returns_left); +static_assert(assignment_returns_left); +static_assert(assignment_returns_left); +static_assert(assignment_returns_left); + +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(std::same_as); +static_assert(noexcept(bl::isfinite(std::declval()))); +static_assert(noexcept(bl::ispositive(std::declval()))); +static_assert(noexcept(bl::isless( + std::declval(), + std::declval()))); +static_assert(noexcept(bl::nextafter( + std::declval(), + std::declval()))); + +TEST_CASE("promoted overloads behave like their standard-shaped counterparts", "[contracts][overloads]") +{ + CHECK(bl::sqrt(9) == 3.0); + CHECK(bl::hypot(3, 4) == 5.0); + CHECK(bl::fma(1.0f, 2.0, 3.0) == 5.0); + CHECK(bl::pow(bl::f128{ 2.0 }, 10) == bl::f128{ 1024.0 }); + CHECK(bl::hypot(bl::f128{ 3.0 }, bl::f256{ 4.0 }) == bl::f256{ 5.0 }); + CHECK(bl::sqr(bl::f128{ -3.0 }) == bl::f128{ 9.0 }); + CHECK(bl::fabs(bl::f256{ -3.0 }) == bl::f256{ 3.0 }); + CHECK(bl::isless(bl::f128{ 1.0 }, bl::f256{ 2.0 })); + CHECK(bl::isgreaterequal(bl::f256{ 2.0 }, 2.0)); + + int quotient = 0; + CHECK(bl::remquo(5, 2, "ient) == 1.0); + CHECK((quotient & 1) == 0); + + double integral = 0.0; + CHECK(bl::modf(3, &integral) == 0.0); + CHECK(integral == 3.0); +} diff --git a/validation/tests/contracts/random.cpp b/validation/tests/contracts/random.cpp new file mode 100644 index 0000000..4a8874d --- /dev/null +++ b/validation/tests/contracts/random.cpp @@ -0,0 +1,467 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace +{ + struct modulo_six_engine + { + using result_type = unsigned int; + + unsigned int value = 0; + + [[nodiscard]] static constexpr result_type min() noexcept { return 0; } + [[nodiscard]] static constexpr result_type max() noexcept { return 5; } + + [[nodiscard]] constexpr result_type operator()() noexcept + { + const result_type result = value; + value = (value + 1) % 6; + return result; + } + }; + + template + void check_stream_round_trip(Distribution distribution) + { + std::stringstream stream; + stream << distribution; + Distribution restored; + stream >> restored; + REQUIRE(stream); + CHECK(restored == distribution); + } + + template + void check_real_distribution_surface() + { + using uniform = bl::uniform_real_distribution; + using exponential = bl::exponential_distribution; + using normal = bl::normal_distribution; + using lognormal = bl::lognormal_distribution; + + bl::mt19937_64 engine{ 0x12345678u }; + + constexpr typename uniform::param_type uniform_params{ + Real{ -2.0 }, + Real{ 3.0 } + }; + uniform uniform_dist{ uniform_params }; + CHECK(uniform_dist.param() == uniform_params); + CHECK(uniform_dist.a() == Real{ -2.0 }); + CHECK(uniform_dist.b() == Real{ 3.0 }); + CHECK(uniform_dist.min() == Real{ -2.0 }); + CHECK(uniform_dist.max() == Real{ 3.0 }); + const Real uniform_override = uniform_dist( + engine, + typename uniform::param_type{ Real{ 10.0 }, Real{ 11.0 } }); + CHECK(uniform_override >= Real{ 10.0 }); + CHECK(uniform_override < Real{ 11.0 }); + CHECK(uniform_dist.param() == uniform_params); + uniform_dist.param( + typename uniform::param_type{ Real{ -4.0 }, Real{ -3.0 } }); + CHECK(uniform_dist.a() == Real{ -4.0 }); + uniform_dist.reset(); + check_stream_round_trip(uniform_dist); + + constexpr typename exponential::param_type exponential_params{ Real{ 0.75 } }; + exponential exponential_dist{ exponential_params }; + CHECK(exponential_dist.lambda() == Real{ 0.75 }); + CHECK(exponential_dist.min() == Real{ 0.0 }); + CHECK(exponential_dist.max() == std::numeric_limits::max()); + CHECK(exponential_dist.param() == exponential_params); + CHECK(exponential_dist( + engine, + typename exponential::param_type{ Real{ 0.5 } }) >= Real{ 0.0 }); + CHECK(exponential_dist.param() == exponential_params); + exponential_dist.param( + typename exponential::param_type{ Real{ 1.25 } }); + CHECK(exponential_dist.lambda() == Real{ 1.25 }); + exponential_dist.reset(); + check_stream_round_trip(exponential_dist); + + constexpr typename normal::param_type normal_params{ + Real{ -1.0 }, + Real{ 0.25 } + }; + normal normal_dist{ normal_params }; + CHECK(normal_dist.mean() == Real{ -1.0 }); + CHECK(normal_dist.stddev() == Real{ 0.25 }); + CHECK(normal_dist.min() == std::numeric_limits::lowest()); + CHECK(normal_dist.max() == std::numeric_limits::max()); + CHECK(normal_dist.param() == normal_params); + CHECK(bl::isfinite(normal_dist( + engine, + typename normal::param_type{ Real{ 10.0 }, Real{ 2.0 } }))); + CHECK(normal_dist.param() == normal_params); + check_stream_round_trip(normal_dist); + normal_dist.reset(); + normal_dist.param( + typename normal::param_type{ Real{ 3.0 }, Real{ 4.0 } }); + CHECK(normal_dist.mean() == Real{ 3.0 }); + CHECK(normal_dist.stddev() == Real{ 4.0 }); + + constexpr typename lognormal::param_type lognormal_params{ + Real{ 0.1 }, + Real{ 0.75 } + }; + lognormal lognormal_dist{ lognormal_params }; + CHECK(lognormal_dist.m() == Real{ 0.1 }); + CHECK(lognormal_dist.s() == Real{ 0.75 }); + CHECK(lognormal_dist.min() == Real{ 0.0 }); + CHECK(lognormal_dist.max() == std::numeric_limits::max()); + CHECK(lognormal_dist.param() == lognormal_params); + CHECK(lognormal_dist( + engine, + typename lognormal::param_type{ Real{ 0.2 }, Real{ 0.5 } }) > + Real{ 0.0 }); + CHECK(lognormal_dist.param() == lognormal_params); + check_stream_round_trip(lognormal_dist); + lognormal_dist.reset(); + lognormal_dist.param( + typename lognormal::param_type{ Real{ -0.5 }, Real{ 1.25 } }); + CHECK(lognormal_dist.m() == Real{ -0.5 }); + CHECK(lognormal_dist.s() == Real{ 1.25 }); + } +} + +static_assert(bl::uniform_random_bit_generator); +static_assert(std::same_as); +static_assert(!std::copy_constructible); +static_assert(std::constructible_from); + +TEST_CASE("fltx Mersenne Twister engines match the standard engines", "[contracts][random]") +{ + bl::mt19937 ours32{ 5489u }; + std::mt19937 standard32{ 5489u }; + bl::mt19937_64 ours64{ 5489u }; + std::mt19937_64 standard64{ 5489u }; + + for (int i = 0; i < 1000; ++i) + { + REQUIRE(ours32() == standard32()); + REQUIRE(ours64() == standard64()); + } + + bl::mt19937 default_engine; + bl::mt19937 default_seeded{ bl::mt19937::default_seed }; + CHECK(default_engine == default_seeded); + CHECK(bl::mt19937::min() == std::mt19937::min()); + CHECK(bl::mt19937::max() == std::mt19937::max()); + + const bl::mt19937 unchanged{ 7u }; + bl::mt19937 malformed_target = unchanged; + std::istringstream malformed{ "999999" }; + malformed >> malformed_target; + CHECK(malformed.fail()); + CHECK(malformed_target == unchanged); +} + +TEST_CASE("seed sequences and engine state match standard behavior", "[contracts][random]") +{ + bl::seed_seq ours{ 1u, 2u, 3u, 4u, 5u }; + std::seed_seq standard{ 1u, 2u, 3u, 4u, 5u }; + std::array ours_words{}; + std::array standard_words{}; + ours.generate(ours_words.begin(), ours_words.end()); + standard.generate(standard_words.begin(), standard_words.end()); + CHECK(ours_words == standard_words); + CHECK(ours.size() == 5); + + std::vector saved_seed; + ours.param(std::back_inserter(saved_seed)); + CHECK(saved_seed == std::vector{ 1u, 2u, 3u, 4u, 5u }); + + bl::seed_seq iterator_seed{ saved_seed.begin(), saved_seed.end() }; + std::array iterator_words{}; + iterator_seed.generate(iterator_words.begin(), iterator_words.end()); + CHECK(iterator_words == ours_words); + + bl::seed_seq ours_engine_seed{ 4u, 3u, 2u, 1u }; + std::seed_seq standard_engine_seed{ 4u, 3u, 2u, 1u }; + bl::mt19937 ours_seeded_engine{ ours_engine_seed }; + std::mt19937 standard_seeded_engine{ standard_engine_seed }; + CHECK(ours_seeded_engine() == standard_seeded_engine()); + ours_seeded_engine.seed(17u); + standard_seeded_engine.seed(17u); + CHECK(ours_seeded_engine() == standard_seeded_engine()); + + bl::mt19937_64 engine{ 42u }; + engine.discard(37); + std::stringstream state; + state << engine; + bl::mt19937_64 restored; + state >> restored; + REQUIRE(restored == engine); + CHECK(restored() == engine()); + + bl::seed_seq empty_ours; + std::seed_seq empty_standard; + empty_ours.generate(ours_words.begin(), ours_words.end()); + empty_standard.generate(standard_words.begin(), standard_words.end()); + CHECK(ours_words == standard_words); +} + +TEST_CASE("integer and real distributions are deterministic and bounded", "[contracts][random]") +{ + bl::mt19937_64 integer_engine{ 0x1020304050607080ull }; + bl::mt19937_64 left{ 0x1020304050607080ull }; + bl::mt19937_64 right{ 0x1020304050607080ull }; + bl::uniform_int_distribution integers{ -17, 23 }; + bl::uniform_real_distribution dd{ bl::f128{ -2.0 }, bl::f128{ 3.0 } }; + bl::uniform_real_distribution qd{ bl::f256{ -2.0 }, bl::f256{ 3.0 } }; + + for (int i = 0; i < 128; ++i) + { + const int sample = integers(integer_engine); + CHECK(sample >= -17); + CHECK(sample <= 23); + + const bl::f128 a = dd(left); + const bl::f128 b = dd(right); + CHECK(a >= bl::f128{ -2.0 }); + CHECK(a < bl::f128{ 3.0 }); + CHECK(a == b); + } + + bl::mt19937_64 qd_engine{ 7u }; + const auto sample = qd(qd_engine); + CHECK(sample >= bl::f256{ -2.0 }); + CHECK(sample < bl::f256{ 3.0 }); + + bl::uniform_int_distribution signed_full{ + std::numeric_limits::min(), + std::numeric_limits::max() + }; + bl::uniform_int_distribution unsigned_full{ + 0, + std::numeric_limits::max() + }; + bl::mt19937_64 wide_engine{ 99u }; + for (int i = 0; i < 32; ++i) + { + const auto signed_value = signed_full(wide_engine); + const auto unsigned_value = unsigned_full(wide_engine); + CHECK(signed_value >= signed_full.min()); + CHECK(signed_value <= signed_full.max()); + CHECK(unsigned_value >= unsigned_full.min()); + CHECK(unsigned_value <= unsigned_full.max()); + } + + modulo_six_engine canonical_engine; + modulo_six_engine bounded_engine; + bl::uniform_int_distribution four_values{ 0, 3 }; + for (int i = 0; i < 16; ++i) + { + const double canonical = bl::generate_canonical(canonical_engine); + CHECK(canonical >= 0.0); + CHECK(canonical < 1.0); + + const int bounded = four_values(bounded_engine); + CHECK(bounded >= 0); + CHECK(bounded <= 3); + } +} + +TEST_CASE("extended random helpers are deterministic", "[contracts][random]") +{ + const auto a = bl::uniform_real_array<8>(bl::f128{ -1.0 }, bl::f128{ 1.0 }, 123u); + const auto b = bl::uniform_real_array<8>(bl::f128{ -1.0 }, bl::f128{ 1.0 }, 123u); + CHECK(a == b); + + const auto normal_a = + bl::normal_array<8, bl::f128>(bl::f128{ 1.0 }, bl::f128{ 0.5 }, 123u); + const auto normal_b = + bl::normal_array<8, bl::f128>(bl::f128{ 1.0 }, bl::f128{ 0.5 }, 123u); + CHECK(normal_a == normal_b); + + bl::mt19937 canonical_engine{ 1234u }; + const bl::f256 canonical = + bl::generate_canonical::digits>( + canonical_engine); + CHECK(canonical >= bl::f256{ 0.0 }); + CHECK(canonical < bl::f256{ 1.0 }); +} + +TEST_CASE("all real distributions expose their distinct public operations", + "[contracts][random][distribution]") +{ + check_real_distribution_surface(); + check_real_distribution_surface(); + + bl::mt19937_64 engine{ 1001u }; + CHECK(bl::exponential_distribution{ 1.5f }(engine) >= 0.0f); + CHECK(bl::isfinite(bl::normal_distribution{ 1.0, 2.0 }(engine))); + CHECK(bl::lognormal_distribution{ 0.0L, 0.5L }(engine) > 0.0L); +} + +TEST_CASE("integer distributions expose params, overrides, equality, and streams", + "[contracts][random][distribution]") +{ + using distribution = bl::uniform_int_distribution; + constexpr distribution::param_type initial{ -7, 13 }; + constexpr distribution::param_type same{ -7, 13 }; + STATIC_CHECK(initial == same); + STATIC_CHECK(initial.a() == -7); + STATIC_CHECK(initial.b() == 13); + + distribution values{ initial }; + CHECK(values.a() == -7); + CHECK(values.b() == 13); + CHECK(values.min() == -7); + CHECK(values.max() == 13); + CHECK(values.param() == initial); + + bl::mt19937 engine{ 321u }; + const int override_value = + values(engine, distribution::param_type{ 10, 12 }); + CHECK(override_value >= 10); + CHECK(override_value <= 12); + CHECK(values.param() == initial); + + values.param(distribution::param_type{ -2, 2 }); + CHECK(values == distribution{ -2, 2 }); + values.reset(); + check_stream_round_trip(values); + + bl::uniform_int_distribution one_value{ 7u, 7u }; + CHECK(one_value(engine) == 7u); +} + +TEST_CASE("array helpers cover engine, seed, explicit, and default overloads", + "[contracts][random][array]") +{ + bl::mt19937_64 first_engine{ 12u }; + bl::mt19937_64 second_engine{ 12u }; + CHECK( + bl::uniform_real_array<4>(-1.0, 1.0, first_engine) == + bl::uniform_real_array<4>(-1.0, 1.0, second_engine)); + CHECK( + bl::uniform_real_array<4, bl::f128>(first_engine) == + bl::uniform_real_array<4, bl::f128>(second_engine)); + CHECK( + bl::uniform_real_array<4, bl::f256>(17u) == + bl::uniform_real_array<4, bl::f256>(17u)); + + bl::mt19937_64 third_engine{ 24u }; + bl::mt19937_64 fourth_engine{ 24u }; + CHECK( + bl::normal_array<4>(1.0, 0.5, third_engine) == + bl::normal_array<4>(1.0, 0.5, fourth_engine)); + CHECK( + bl::normal_array<4, bl::f128>(third_engine) == + bl::normal_array<4, bl::f128>(fourth_engine)); + CHECK( + bl::normal_array<4, bl::f256>(29u) == + bl::normal_array<4, bl::f256>(29u)); + + const auto constants = bl::random_array<4>( + bl::mt19937{ 1u }, + bl::uniform_int_distribution{ 5, 5 }); + CHECK(constants == std::array{ 5, 5, 5, 5 }); +} + +TEST_CASE("stateful distributions reset cached samples", "[contracts][random]") +{ + using normal = bl::normal_distribution; + using lognormal = bl::lognormal_distribution; + + constexpr normal::param_type normal_params{ -1.0, 0.25 }; + constexpr lognormal::param_type lognormal_params{ 0.1, 0.75 }; + normal normal_dist{ normal_params }; + normal normal_fresh{ normal_params }; + lognormal lognormal_dist{ lognormal_params }; + lognormal lognormal_fresh{ lognormal_params }; + bl::mt19937_64 engine{ 777u }; + + normal override_dist{ normal_params }; + const double override_sample = + override_dist(engine, normal::param_type{ 10.0, 2.0 }); + CHECK(bl::isfinite(override_sample)); + CHECK(override_dist.param() == normal_params); + + static_cast(normal_dist(engine)); + static_cast(lognormal_dist(engine)); + CHECK(normal_dist != normal_fresh); + CHECK(lognormal_dist != lognormal_fresh); + + normal_dist.reset(); + lognormal_dist.reset(); + CHECK(normal_dist == normal_fresh); + CHECK(lognormal_dist == lognormal_fresh); +} + +TEST_CASE("extended normal distributions retain only their parameters", + "[contracts][random]") +{ + bl::mt19937_64 engine{ 777u }; + + bl::normal_distribution normal128{ bl::f128{ -1.0 }, bl::f128{ 0.25 } }; + const auto fresh_normal128 = normal128; + static_cast(normal128(engine)); + CHECK(normal128 == fresh_normal128); + + bl::lognormal_distribution lognormal128{ bl::f128{ 0.1 }, bl::f128{ 0.75 } }; + const auto fresh_lognormal128 = lognormal128; + static_cast(lognormal128(engine)); + CHECK(lognormal128 == fresh_lognormal128); + + bl::normal_distribution normal256{ bl::f256{ -1.0 }, bl::f256{ 0.25 } }; + const auto fresh_normal256 = normal256; + static_cast(normal256(engine)); + CHECK(normal256 == fresh_normal256); + + bl::lognormal_distribution lognormal256{ bl::f256{ 0.1 }, bl::f256{ 0.75 } }; + const auto fresh_lognormal256 = lognormal256; + static_cast(lognormal256(engine)); + CHECK(lognormal256 == fresh_lognormal256); +} + +TEST_CASE("extended normal distributions have stable sample moments", + "[contracts][random]") +{ + constexpr std::size_t sample_count = 32'768; + + const auto check_moments = []() { + bl::mt19937_64 engine{ 0x1020304050607080ull }; + bl::normal_distribution distribution; + double sum = 0.0; + double sum_squares = 0.0; + + for (std::size_t index = 0; index < sample_count; ++index) + { + const double sample = static_cast(distribution(engine)); + sum += sample; + sum_squares += sample * sample; + } + + const double mean = sum / static_cast(sample_count); + const double variance = + sum_squares / static_cast(sample_count) - mean * mean; + CHECK(mean > -0.03); + CHECK(mean < 0.03); + CHECK(variance > 0.94); + CHECK(variance < 1.06); + }; + + check_moments.template operator()(); + check_moments.template operator()(); +} + +TEST_CASE("random device exposes the standard runtime-only shape", "[contracts][random]") +{ + bl::random_device device; + const auto sample = device(); + CHECK(sample >= bl::random_device::min()); + CHECK(sample <= bl::random_device::max()); + CHECK(device.entropy() >= 0.0); +} diff --git a/validation/tests/package/CMakeLists.txt b/validation/tests/package/CMakeLists.txt new file mode 100644 index 0000000..be5701c --- /dev/null +++ b/validation/tests/package/CMakeLists.txt @@ -0,0 +1,62 @@ +cmake_minimum_required(VERSION 3.21) +project(fltx_package_consumers LANGUAGES CXX) + +find_package(fltx CONFIG REQUIRED) + +get_target_property(_FLTX_PACKAGE_DEFINITIONS fltx::fltx INTERFACE_COMPILE_DEFINITIONS) +set(_FLTX_PACKAGE_FMA_AUTO ON) +foreach(_FLTX_EXPLICIT_FMA_MODE IN ITEMS FLTX_HEADER_FMA_OFF=1 FLTX_HEADER_FMA_ASSUME=1) + if(_FLTX_EXPLICIT_FMA_MODE IN_LIST _FLTX_PACKAGE_DEFINITIONS) + set(_FLTX_PACKAGE_FMA_AUTO OFF) + endif() +endforeach() + +function(add_fltx_consumer target) + add_executable(${target} consumer.cpp) + target_link_libraries(${target} PRIVATE fltx::fltx) + target_compile_features(${target} PRIVATE cxx_std_20) + target_compile_definitions(${target} PRIVATE + "FLTX_TESTS_COMPILER_ID=\"${CMAKE_CXX_COMPILER_ID}\"" + "FLTX_TESTS_COMPILER_VERSION=\"${CMAKE_CXX_COMPILER_VERSION}\"" + "FLTX_TESTS_BUILD_CONFIG=\"$\"" + "FLTX_TESTS_SYSTEM_NAME=\"${CMAKE_SYSTEM_NAME}\"" + "FLTX_TESTS_SYSTEM_PROCESSOR=\"${CMAKE_SYSTEM_PROCESSOR}\"" + "FLTX_TESTS_BUILD_OPTIMIZED=$,$,$>,1,0>" + ) +endfunction() + +add_fltx_consumer(fltx_package_strict) +add_fltx_consumer(fltx_package_fastmath) +if(_FLTX_PACKAGE_FMA_AUTO) + add_fltx_consumer(fltx_package_no_fma) +endif() + +target_compile_definitions(fltx_package_strict PRIVATE FLTX_TESTS_EXPECT_STRICT=1) +target_compile_definitions(fltx_package_fastmath PRIVATE FLTX_TESTS_EXPECT_FAST_MATH=1) + +if(MSVC) + target_compile_options(fltx_package_fastmath PRIVATE /fp:fast) +else() + target_compile_options(fltx_package_fastmath PRIVATE -ffast-math) + target_link_options(fltx_package_fastmath PRIVATE -ffast-math) +endif() + +if(_FLTX_PACKAGE_FMA_AUTO) + # Exercise AUTO as a translation unit that cannot use local x86 FMA and + # whose test-only CPU probe reports that runtime FMA is unavailable. + target_compile_definitions(fltx_package_no_fma PRIVATE + FLTX_TESTS_EXPECT_NO_LOCAL_FMA=1 + FLTX_TEST_RUNTIME_X86_FMA_AVAILABLE=0 + FLTX_TU_HAS_X86_FMA=0 + FLTX_HAS_X86_FMA=0 + ) +endif() + +include(CTest) +if(BUILD_TESTING) + add_test(NAME fltx.package.strict COMMAND fltx_package_strict) + add_test(NAME fltx.package.fastmath COMMAND fltx_package_fastmath) + if(_FLTX_PACKAGE_FMA_AUTO) + add_test(NAME fltx.package.no_fma COMMAND fltx_package_no_fma) + endif() +endif() diff --git a/validation/tests/package/consumer.cpp b/validation/tests/package/consumer.cpp new file mode 100644 index 0000000..77eb430 --- /dev/null +++ b/validation/tests/package/consumer.cpp @@ -0,0 +1,107 @@ +#include + +#include "../../support/config_banner.hpp" + +#include +#include +#include +#include +#include +#include + +static_assert(std::is_same_v, bl::f256>); +static_assert(std::numeric_limits::digits == 106); +static_assert(std::numeric_limits::digits == 212); + +namespace +{ + int fail(const char* message) + { + std::cerr << "fltx package consumer failed: " << message << '\n'; + return EXIT_FAILURE; + } + + template + bool fma_cancellation_contract() + { + const T unit{ 1.0 }; + const T increment = bl::ldexp(unit, -52); + const T expected = -bl::ldexp(unit, -104); + const T a = unit + increment; + const T b = unit - increment; + + return bl::fma(a, b, -unit) == expected; + } + + template + bool product_cancellation_contract() + { + const T unit{ 1.0 }; + const T increment = bl::ldexp(unit, -52); + const T expected = -bl::ldexp(unit, -104); + const T a = unit + increment; + const T b = unit - increment; + + return static_cast(a * b - unit) == expected; + } + + bool f128_multiply_special_contract() + { + constexpr std::uint64_t sign_mask = UINT64_C(0x8000000000000000); + const double positive_zero = std::bit_cast(UINT64_C(0)); + const double negative_zero = std::bit_cast(sign_mask); + + const bl::f128_s positive = + bl::f128_s{positive_zero, positive_zero} * bl::f128_s{2.0, positive_zero}; + const bl::f128_s double_negative = + bl::f128_s{negative_zero, positive_zero} * bl::f128_s{-2.0, positive_zero}; + + return std::bit_cast(positive.hi) == UINT64_C(0) && + std::bit_cast(positive.lo) == UINT64_C(0) && + std::bit_cast(double_negative.hi) == UINT64_C(0) && + std::bit_cast(double_negative.lo) == UINT64_C(0); + } +} + +int main() +{ + fltx::tests::support::print_config_banner("package consumer"); + +#if defined(FLTX_TESTS_EXPECT_FAST_MATH) && !defined(FLTX_FAST_MATH) + return fail("consumer fast-math mode was not detected"); +#elif defined(FLTX_TESTS_EXPECT_STRICT) && defined(FLTX_FAST_MATH) + return fail("strict consumer was detected as fast-math"); +#endif + +#if defined(FLTX_TESTS_EXPECT_NO_LOCAL_FMA) && FLTX_TU_HAS_X86_FMA + return fail("no-FMA consumer unexpectedly has translation-unit FMA"); +#endif +#if defined(FLTX_TESTS_EXPECT_NO_LOCAL_FMA) && FLTX_X86_FMA_RUNTIME_CHECK + if (bl::detail::fp::runtime_hardware_fma_enabled()) + return fail("injected runtime CPU probe did not disable FMA"); +#endif + + const bl::f128 dd = bl::parse("1.00000000000000000000000000000001"); + const bl::f256 qd = bl::parse( + "1.000000000000000000000000000000000000000000000000000000000000001"); + + if (!(dd > bl::f128{ 1.0 }) || !(qd > bl::f256{ 1.0 })) + return fail("decimal parsing lost low limbs"); + if (bl::sqrt(bl::f128{ 4.0 }) != bl::f128{ 2.0 }) + return fail("f128 sqrt contract"); + if (bl::sqrt(bl::f256{ 4.0 }) != bl::f256{ 2.0 }) + return fail("f256 sqrt contract"); + if (!fma_cancellation_contract()) + return fail("f128 fused-cancellation contract"); + if (!product_cancellation_contract()) + return fail("f128 product-cancellation contract"); + if (!f128_multiply_special_contract()) + return fail("f128 multiply signed-zero contract"); + if (!fma_cancellation_contract()) + return fail("f256 fused-cancellation contract"); + if (!product_cancellation_contract()) + return fail("f256 product-cancellation contract"); + + std::cout << "fltx package consumer passed\n"; + return EXIT_SUCCESS; +} diff --git a/validation/tests/standard/cxx_standard_contract.cpp b/validation/tests/standard/cxx_standard_contract.cpp new file mode 100644 index 0000000..9d44986 --- /dev/null +++ b/validation/tests/standard/cxx_standard_contract.cpp @@ -0,0 +1,172 @@ +#include +#include +#include +#include + +#include + +#ifndef FLTX_CXX_STANDARD_CONTRACT +#error FLTX_CXX_STANDARD_CONTRACT must identify the requested C++ standard. +#endif + +static_assert(BL_CXX_LANGUAGE_VERSION >= 202002L); + +#if FLTX_CXX_STANDARD_CONTRACT >= 23 + #if !BL_HAS_IF_CONSTEVAL + #error C++23 builds must use standard if consteval dispatch. + #endif + #if defined(BL_IF_CONSTEVAL_MSVC_CXX20_EXTENSION) + #error C++23 builds must not select the MSVC C++20 extension path. + #endif + #if defined(BL_IF_CONSTEVAL_GCC_CXX20_EXTENSION) + #error C++23 builds must not select the GCC C++20 extension path. + #endif +#elif defined(_MSC_VER) && !defined(__clang__) + #if !defined(BL_IF_CONSTEVAL_MSVC_CXX20_EXTENSION) + #error MSVC C++20 builds must select the fast if consteval extension path. + #endif +#elif defined(__GNUC__) && !defined(__clang__) + #if !defined(BL_IF_CONSTEVAL_GCC_CXX20_EXTENSION) + #error GCC C++20 builds must select the fast if consteval extension path. + #endif +#endif + +namespace +{ + template + consteval bool core_is_constant_evaluated() + { + T value{ 1.25 }; + value += T{ 0.75 }; + value *= T{ 3.0 }; + value -= T{ 1.0 }; + value /= T{ 2.0 }; + + return value == T{ 2.5 } && + -value < T{ 0.0 } && + bl::clamp(value, T{ 0.0 }, T{ 2.0 }) == T{ 2.0 } && + bl::isfinite(value) && + bl::isnormal(value) && + !bl::isnan(value) && + !bl::signbit(value) && + bl::recip(T{ 4.0 }) == T{ 0.25 }; + } + + template + consteval bool math_is_constant_evaluated() + { + T integral{}; + int exponent = 0; + int quotient = 0; + T sine{}; + T cosine{}; + + const T fraction = bl::modf(T{ 3.25 }, &integral); + const T mantissa = bl::frexp(T{ 8.0 }, &exponent); + const T remainder = bl::remquo(T{ 5.0 }, T{ 2.0 }, "ient); + const T exp_log = bl::exp(bl::log(T{ 1.25 })); + const bool sincos_ok = bl::sincos(T{ 0.0 }, sine, cosine); + + return bl::sqrt(T{ 4.0 }) == T{ 2.0 } && + exp_log > T{ 1.249 } && exp_log < T{ 1.251 } && + bl::floor(T{ -2.25 }) == T{ -3.0 } && + bl::ceil(T{ -2.25 }) == T{ -2.0 } && + bl::trunc(T{ -2.75 }) == T{ -2.0 } && + bl::roundeven(T{ 2.5 }) == T{ 2.0 } && + fraction == T{ 0.25 } && integral == T{ 3.0 } && + mantissa == T{ 0.5 } && exponent == 4 && + remainder == T{ 1.0 } && quotient != 0 && + bl::ipow(T{ 2.0 }, 10) == T{ 1024.0 } && + sincos_ok && sine == T{ 0.0 } && cosine == T{ 1.0 }; + } + + template + consteval bool io_is_constant_evaluated() + { + const auto parsed = bl::try_parse("12.5"); + const auto rejected = bl::try_parse("12.5tail"); + const T fallback = bl::parse("bad", T{ 7.0 }); + const auto text = bl::to_static_string( + T{ 12.5 }, + 1, + std::ios_base::fixed); + + return parsed && parsed.consumed == 4 && parsed.value == T{ 12.5 } && + !rejected && rejected.consumed == 4 && + fallback == T{ 7.0 } && + text.view() == std::string_view{ "12.5" }; + } + + template + consteval bool random_is_constant_evaluated() + { + const auto first = bl::uniform_real_array<4>( + T{ -2.0 }, + T{ 3.0 }, + bl::mt19937_64{ 0x1020304050607080ull }); + const auto second = bl::random_array<4>( + bl::mt19937_64{ 0x1020304050607080ull }, + bl::uniform_real_distribution{ T{ -2.0 }, T{ 3.0 } }); + + bl::mt19937_64 distribution_engine{ 777u }; + bl::exponential_distribution exponential{ T{ 0.75 } }; + bl::normal_distribution normal{ T{ 1.0 }, T{ 0.5 } }; + bl::lognormal_distribution lognormal{ T{ 0.0 }, T{ 0.5 } }; + const T exponential_sample = exponential(distribution_engine); + const T normal_sample = normal(distribution_engine); + const T lognormal_sample = lognormal(distribution_engine); + + return first == second && + first.front() >= T{ -2.0 } && first.front() < T{ 3.0 } && + first.back() >= T{ -2.0 } && first.back() < T{ 3.0 } && + exponential_sample >= T{ 0.0 } && + bl::isfinite(normal_sample) && + lognormal_sample > T{ 0.0 }; + } + + using namespace bl::literals; + + constexpr bl::f128 dd_literal = "1.25"_dd; + constexpr bl::f256 qd_literal = "1.25"_qd; + constexpr bl::f256 expression_value{ + qd_literal * bl::f256{ 2.0 } + bl::f256{ 0.5 } + }; + + static_assert(dd_literal == bl::f128{ 1.25 }); + static_assert(qd_literal == bl::f256{ 1.25 }); + static_assert(expression_value == bl::f256{ 3.0 }); + static_assert(core_is_constant_evaluated()); + static_assert(core_is_constant_evaluated()); + static_assert(math_is_constant_evaluated()); + static_assert(math_is_constant_evaluated()); + static_assert(io_is_constant_evaluated()); + static_assert(io_is_constant_evaluated()); + static_assert(io_is_constant_evaluated()); + static_assert(io_is_constant_evaluated()); + static_assert(random_is_constant_evaluated()); + static_assert(random_is_constant_evaluated()); + + template + int dispatch_probe(int value) + { + if constexpr (Add) + return value + bl::fltx_precision_rank_v; + return value - bl::fltx_precision_rank_v; + } + + [[maybe_unused]] void instantiate_runtime_and_dispatch_contracts( + bl::f128 dd, + bl::f256 qd) + { + const auto table = bl_dispatch_table(dispatch_probe, 10); + (void)bl_table_invoke( + table, + bl_enum_type(bl::FloatType::F256), + true); + + // These calls must remain valid thin wrappers around compiled runtime + // implementations when they are not constant-evaluated. + (void)bl::sin(dd); + (void)bl::sin(qd); + } +}